<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />



<meta name="date" content="2022-01-24" />

<title>Descriptive statistics and graphs</title>

<script src="data:application/javascript;base64,Ly8gUGFuZG9jIDIuOSBhZGRzIGF0dHJpYnV0ZXMgb24gYm90aCBoZWFkZXIgYW5kIGRpdi4gV2UgcmVtb3ZlIHRoZSBmb3JtZXIgKHRvCi8vIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgUGFuZG9jIDwgMi44KS4KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKGUpIHsKICB2YXIgaHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkaXYuc2VjdGlvbltjbGFzcyo9J2xldmVsJ10gPiA6Zmlyc3QtY2hpbGQiKTsKICB2YXIgaSwgaCwgYTsKICBmb3IgKGkgPSAwOyBpIDwgaHMubGVuZ3RoOyBpKyspIHsKICAgIGggPSBoc1tpXTsKICAgIGlmICghL15oWzEtNl0kL2kudGVzdChoLnRhZ05hbWUpKSBjb250aW51ZTsgIC8vIGl0IHNob3VsZCBiZSBhIGhlYWRlciBoMS1oNgogICAgYSA9IGguYXR0cmlidXRlczsKICAgIHdoaWxlIChhLmxlbmd0aCA+IDApIGgucmVtb3ZlQXR0cmlidXRlKGFbMF0ubmFtZSk7CiAgfQp9KTsK"></script>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSB2My42LjAgfCAoYykgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oZSx0KXsidXNlIHN0cmljdCI7Im9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcigialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudCIpO3JldHVybiB0KGUpfTp0KGUpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihDLGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1bXSxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLGk9dC5pbmRleE9mLG49e30sbz1uLnRvU3RyaW5nLHY9bi5oYXNPd25Qcm9wZXJ0eSxhPXYudG9TdHJpbmcsbD1hLmNhbGwoT2JqZWN0KSx5PXt9LG09ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJudW1iZXIiIT10eXBlb2YgZS5ub2RlVHlwZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUuaXRlbX0seD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxFPUMuZG9jdW1lbnQsYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjYuMCIsUz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgUy5mbi5pbml0KGUsdCl9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9Uy5mbj1TLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6UyxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9Uy5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFMuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKFMuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PW4mJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LFMuZXh0ZW5kPVMuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxtKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSlyPWVbdF0sIl9fcHJvdG9fXyIhPT10JiZhIT09ciYmKGwmJnImJihTLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8obj1hW3RdLG89aSYmIUFycmF5LmlzQXJyYXkobik/W106aXx8Uy5pc1BsYWluT2JqZWN0KG4pP246e30saT0hMSxhW3RdPVMuZXh0ZW5kKGwsbyxyKSk6dm9pZCAwIT09ciYmKGFbdF09cikpO3JldHVybiBhfSxTLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fCJbb2JqZWN0IE9iamVjdF0iIT09by5jYWxsKGUpKSYmKCEodD1yKGUpKXx8ImZ1bmN0aW9uIj09dHlwZW9mKG49di5jYWxsKHQsImNvbnN0cnVjdG9yIikmJnQuY29uc3RydWN0b3IpJiZhLmNhbGwobik9PT1sKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtiKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2lmKHAoZSkpe2ZvcihuPWUubGVuZ3RoO3I8bjtyKyspaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrfWVsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYocChPYmplY3QoZSkpP1MubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTppLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPTAsYT1bXTtpZihwKGUpKWZvcihyPWUubGVuZ3RoO288cjtvKyspbnVsbCE9KGk9dChlW29dLG8sbikpJiZhLnB1c2goaSk7ZWxzZSBmb3IobyBpbiBlKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO3JldHVybiBnKGEpfSxndWlkOjEsc3VwcG9ydDp5fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFMuZm5bU3ltYm9sLml0ZXJhdG9yXT10W1N5bWJvbC5pdGVyYXRvcl0pLFMuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2wiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBkPWZ1bmN0aW9uKG4pe3ZhciBlLGQsYixvLGksaCxmLGcsdyx1LGwsVCxDLGEsRSx2LHMsYyx5LFM9InNpenpsZSIrMSpuZXcgRGF0ZSxwPW4uZG9jdW1lbnQsaz0wLHI9MCxtPXVlKCkseD11ZSgpLEE9dWUoKSxOPXVlKCksaj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGw9ITApLDB9LEQ9e30uaGFzT3duUHJvcGVydHksdD1bXSxxPXQucG9wLEw9dC5wdXNoLEg9dC5wdXNoLE89dC5zbGljZSxQPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsST0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVz0iXFxbIitNKyIqKCIrSSsiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0krIikpfCkiK00rIipcXF0iLEY9IjooIitJKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitXKyIpKil8LiopXFwpfCkiLEI9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLCQ9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksej1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9bmV3IFJlZ0V4cChNKyJ8PiIpLFg9bmV3IFJlZ0V4cChGKSxWPW5ldyBSZWdFeHAoIl4iK0krIiQiKSxHPXtJRDpuZXcgUmVnRXhwKCJeIygiK0krIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrSSsiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrSSsifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1cpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitGKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitSKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxKPS9eaFxkJC9pLEs9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLFo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxlZT0vWyt+XS8sdGU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK00rIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLG5lPWZ1bmN0aW9uKGUsdCl7dmFyIG49IjB4IitlLnNsaWNlKDEpLTY1NTM2O3JldHVybiB0fHwobjwwP1N0cmluZy5mcm9tQ2hhckNvZGUobis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShuPj4xMHw1NTI5NiwxMDIzJm58NTYzMjApKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwocC5jaGlsZE5vZGVzKSxwLmNoaWxkTm9kZXMpLHRbcC5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhTlt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiYoVS50ZXN0KHQpfHx6LnRlc3QodCkpKXsoZj1lZS50ZXN0KHQpJiZ5ZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJmQuc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UocmUsaWUpOmUuc2V0QXR0cmlidXRlKCJpZCIscz1TKSksbz0obD1oKHQpKS5sZW5ndGg7d2hpbGUoby0tKWxbb109KHM/IiMiK3M6IjpzY29wZSIpKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpfXRyeXtyZXR1cm4gSC5hcHBseShuLGYucXVlcnlTZWxlY3RvckFsbChjKSksbn1jYXRjaChlKXtOKHQsITApfWZpbmFsbHl7cz09PVMmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGcodC5yZXBsYWNlKCQsIiQxIiksZSxuLHIpfWZ1bmN0aW9uIHVlKCl7dmFyIHI9W107cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gci5wdXNoKHQrIiAiKT5iLmNhY2hlTGVuZ3RoJiZkZWxldGUgZVtyLnNoaWZ0KCldLGVbdCsiICJdPW59fWZ1bmN0aW9uIGxlKGUpe3JldHVybiBlW1NdPSEwLGV9ZnVuY3Rpb24gY2UoZSl7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2goZSl7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGZlKGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9bi5sZW5ndGg7d2hpbGUoci0tKWIuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIHBlKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBkZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZS50eXBlPT09dH19ZnVuY3Rpb24gaGUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PXR8fCJidXR0b24iPT09dCkmJmUudHlwZT09PW59fWZ1bmN0aW9uIGdlKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmYWUoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gdmUoYSl7cmV0dXJuIGxlKGZ1bmN0aW9uKG8pe3JldHVybiBvPStvLGxlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKFtdLGUubGVuZ3RoLG8pLGk9ci5sZW5ndGg7d2hpbGUoaS0tKWVbbj1yW2ldXSYmKGVbbl09ISh0W25dPWVbbl0pKX0pfSl9ZnVuY3Rpb24geWUoZSl7cmV0dXJuIGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBkPXNlLnN1cHBvcnQ9e30saT1zZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm5hbWVzcGFjZVVSSSxuPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hWS50ZXN0KHR8fG4mJm4ubm9kZU5hbWV8fCJIVE1MIil9LFQ9c2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWU/ZS5vd25lckRvY3VtZW50fHxlOnA7cmV0dXJuIHIhPUMmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudCYmKGE9KEM9cikuZG9jdW1lbnRFbGVtZW50LEU9IWkoQykscCE9QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuc2NvcGU9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQoQy5jcmVhdGVFbGVtZW50KCJkaXYiKSksInVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxkLmF0dHJpYnV0ZXM9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksZC5nZXRFbGVtZW50c0J5VGFnTmFtZT1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChDLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLGQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1LLnRlc3QoQy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxkLmdldEJ5SWQ9Y2UoZnVuY3Rpb24oZSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZSkuaWQ9UywhQy5nZXRFbGVtZW50c0J5TmFtZXx8IUMuZ2V0RWxlbWVudHNCeU5hbWUoUykubGVuZ3RofSksZC5nZXRCeUlkPyhiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sYi5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRCeUlkJiZFKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KTooYi5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIG49ZS5yZXBsYWNlKHRlLG5lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gdCYmdC52YWx1ZT09PW59fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLGIuZmluZC5UQUc9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmQucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGIuZmluZC5DTEFTUz1kLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkUpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0scz1bXSx2PVtdLChkLnFzYT1LLnRlc3QoQy5xdWVyeVNlbGVjdG9yQWxsKSkmJihjZShmdW5jdGlvbihlKXt2YXIgdDthLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrUysiJz48L2E+PHNlbGVjdCBpZD0nIitTKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnYucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrUysiLV0iKS5sZW5ndGh8fHYucHVzaCgifj0iKSwodD1DLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnNldEF0dHJpYnV0ZSgibmFtZSIsIiIpLGUuYXBwZW5kQ2hpbGQodCksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT0nJ10iKS5sZW5ndGh8fHYucHVzaCgiXFxbIitNKyIqbmFtZSIrTSsiKj0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitTKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpLGUucXVlcnlTZWxlY3RvckFsbCgiXFxcZiIpLHYucHVzaCgiW1xcclxcblxcZl0iKX0pLGNlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnYucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmdi5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGEuYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4Iiksdi5wdXNoKCIsLio6Iil9KSksKGQubWF0Y2hlc1NlbGVjdG9yPUsudGVzdChjPWEubWF0Y2hlc3x8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubW96TWF0Y2hlc1NlbGVjdG9yfHxhLm9NYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IpKSYmY2UoZnVuY3Rpb24oZSl7ZC5kaXNjb25uZWN0ZWRNYXRjaD1jLmNhbGwoZSwiKiIpLGMuY2FsbChlLCJbcyE9JyddOngiKSxzLnB1c2goIiE9IixGKX0pLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHM9cy5sZW5ndGgmJm5ldyBSZWdFeHAocy5qb2luKCJ8IikpLHQ9Sy50ZXN0KGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHk9dHx8Sy50ZXN0KGEuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0saj10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KDEmKG49KGUub3duZXJEb2N1bWVudHx8ZSk9PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09Q3x8ZS5vd25lckRvY3VtZW50PT1wJiZ5KHAsZSk/LTE6dD09Q3x8dC5vd25lckRvY3VtZW50PT1wJiZ5KHAsdCk/MTp1P1AodSxlKS1QKHUsdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUsYT1bZV0scz1bdF07aWYoIWl8fCFvKXJldHVybiBlPT1DPy0xOnQ9PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09cD8tMTpzW3JdPT1wPzE6MH0pLEN9LHNlLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc2UoZSxudWxsLG51bGwsdCl9LHNlLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFQoZSksZC5tYXRjaGVzU2VsZWN0b3ImJkUmJiFOW3QrIiAiXSYmKCFzfHwhcy50ZXN0KHQpKSYmKCF2fHwhdi50ZXN0KHQpKSl0cnl7dmFyIG49Yy5jYWxsKGUsdCk7aWYobnx8ZC5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe04odCwhMCl9cmV0dXJuIDA8c2UodCxDLG51bGwsW2VdKS5sZW5ndGh9LHNlLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSkseShlLHQpfSxzZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZELmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KGopLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1tW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJm0oZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoQiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtTXXx8KGFbU109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09ayYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W2sscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1rJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW1NdfHwoYVtTXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtrLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW1NdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoJCwiJDEiKSk7cmV0dXJuIHNbU10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bayxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW1NdfHwoZVtTXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PWsmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltTXSYmKHY9Q2UodikpLHkmJiF5W1NdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlbU10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoJCwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKCQsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9QVtlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtTXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPUEoZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPWsrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT1DfHx0fHxpKTtsIT09ZyYmbnVsbCE9KG89ZFtsXSk7bCsrKXtpZih4JiZvKXthPTAsdHx8by5vd25lckRvY3VtZW50PT1DfHwoVChvKSxuPSFFKTt3aGlsZShzPXZbYSsrXSlpZihzKG8sdHx8QyxuKSl7ci5wdXNoKG8pO2JyZWFrfWkmJihrPWgpfW0mJigobz0hcyYmbykmJnUtLSxlJiZjLnB1c2gobykpfWlmKHUrPWwsbSYmbCE9PXUpe2E9MDt3aGlsZShzPXlbYSsrXSlzKGMsZix0LG4pO2lmKGUpe2lmKDA8dSl3aGlsZShsLS0pY1tsXXx8ZltsXXx8KGZbbF09cS5jYWxsKHIpKTtmPVRlKGYpfUguYXBwbHkocixmKSxpJiYhZSYmMDxmLmxlbmd0aCYmMTx1K3kubGVuZ3RoJiZzZS51bmlxdWVTb3J0KHIpfXJldHVybiBpJiYoaz1oLHc9cCksY30sbT9sZShyKTpyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIGF9LGc9c2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxjPSFyJiZoKGU9bC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09Yy5sZW5ndGgpe2lmKDI8KG89Y1swXT1jWzBdLnNsaWNlKDApKS5sZW5ndGgmJiJJRCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmRSYmYi5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KGIuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksdCl8fFtdKVswXSkpcmV0dXJuIG47bCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9aT1HLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6by5sZW5ndGg7d2hpbGUoaS0tKXtpZihhPW9baV0sYi5yZWxhdGl2ZVtzPWEudHlwZV0pYnJlYWs7aWYoKHU9Yi5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh0ZSxuZSksZWUudGVzdChvWzBdLnR5cGUpJiZ5ZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKG8uc3BsaWNlKGksMSksIShlPXIubGVuZ3RoJiZ4ZShvKSkpcmV0dXJuIEguYXBwbHkobixyKSxuO2JyZWFrfX19cmV0dXJuKGx8fGYoZSxjKSkocix0LCFFLG4sIXR8fGVlLnRlc3QoZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpLG59LGQuc29ydFN0YWJsZT1TLnNwbGl0KCIiKS5zb3J0KGopLmpvaW4oIiIpPT09UyxkLmRldGVjdER1cGxpY2F0ZXM9ISFsLFQoKSxkLnNvcnREZXRhY2hlZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKEMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxmZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksZC5hdHRyaWJ1dGVzJiZjZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxmZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxjZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8ZmUoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSxzZX0oQyk7Uy5maW5kPWQsUy5leHByPWQuc2VsZWN0b3JzLFMuZXhwclsiOiJdPVMuZXhwci5wc2V1ZG9zLFMudW5pcXVlU29ydD1TLnVuaXF1ZT1kLnVuaXF1ZVNvcnQsUy50ZXh0PWQuZ2V0VGV4dCxTLmlzWE1MRG9jPWQuaXNYTUwsUy5jb250YWlucz1kLmNvbnRhaW5zLFMuZXNjYXBlU2VsZWN0b3I9ZC5lc2NhcGU7dmFyIGg9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9dm9pZCAwIT09bjt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJlMoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufSxrPVMuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gQShlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIE49L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gaihlLG4scil7cmV0dXJuIG0obik/Uy5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1yfSk6bi5ub2RlVHlwZT9TLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1yfSk6InN0cmluZyIhPXR5cGVvZiBuP1MuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPGkuY2FsbChuLGUpIT09cn0pOlMuZmlsdGVyKG4sZSxyKX1TLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT9TLmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOlMuZmluZC5tYXRjaGVzKGUsUy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxTLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soUyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYoUy5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKylTLmZpbmQoZSxpW3RdLG4pO3JldHVybiAxPHI/Uy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmay50ZXN0KGUpP1MoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgRCxxPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KFMuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fEQsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKHI9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpxLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIFM/dFswXTp0LFMubWVyZ2UodGhpcyxTLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OkUsITApKSxOLnRlc3QoclsxXSkmJlMuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW0odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4oaT1FLmdldEVsZW1lbnRCeUlkKHJbMl0pKSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKFMpOlMubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9Uy5mbixEPVMoRSk7dmFyIEw9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sSD17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBPKGUsdCl7d2hpbGUoKGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PVMoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoUy5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZTKGUpO2lmKCFrLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/LTE8YS5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPG8ubGVuZ3RoP1MudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2kuY2FsbChTKGUpLHRoaXNbMF0pOmkuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soUy51bmlxdWVTb3J0KFMubWVyZ2UodGhpcy5nZXQoKSxTKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLFMuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE8oZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gTyhlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gaChlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBoKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBoKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaChlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gVCgoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUuY29udGVudERvY3VtZW50JiZyKGUuY29udGVudERvY3VtZW50KT9lLmNvbnRlbnREb2N1bWVudDooQShlLCJ0ZW1wbGF0ZSIpJiYoZT1lLmNvbnRlbnR8fGUpLFMubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihyLGkpe1MuZm5bcl09ZnVuY3Rpb24oZSx0KXt2YXIgbj1TLm1hcCh0aGlzLGksZSk7cmV0dXJuIlVudGlsIiE9PXIuc2xpY2UoLTUpJiYodD1lKSx0JiYic3RyaW5nIj09dHlwZW9mIHQmJihuPVMuZmlsdGVyKHQsbikpLDE8dGhpcy5sZW5ndGgmJihIW3JdfHxTLnVuaXF1ZVNvcnQobiksTC50ZXN0KHIpJiZuLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIFA9L1teXHgyMFx0XHJcblxmXSsvZztmdW5jdGlvbiBSKGUpe3JldHVybiBlfWZ1bmN0aW9uIE0oZSl7dGhyb3cgZX1mdW5jdGlvbiBJKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm0oaT1lLnRoZW4pP2kuY2FsbChlLHQsbik6dC5hcHBseSh2b2lkIDAsW2VdLnNsaWNlKHIpKX1jYXRjaChlKXtuLmFwcGx5KHZvaWQgMCxbZV0pfX1TLkNhbGxiYWNrcz1mdW5jdGlvbihyKXt2YXIgZSxuO3I9InN0cmluZyI9PXR5cGVvZiByPyhlPXIsbj17fSxTLmVhY2goZS5tYXRjaChQKXx8W10sZnVuY3Rpb24oZSx0KXtuW3RdPSEwfSksbik6Uy5leHRlbmQoe30scik7dmFyIGksdCxvLGEscz1bXSx1PVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihhPWF8fHIub25jZSxvPWk9ITA7dS5sZW5ndGg7bD0tMSl7dD11LnNoaWZ0KCk7d2hpbGUoKytsPHMubGVuZ3RoKSExPT09c1tsXS5hcHBseSh0WzBdLHRbMV0pJiZyLnN0b3BPbkZhbHNlJiYobD1zLmxlbmd0aCx0PSExKX1yLm1lbW9yeXx8KHQ9ITEpLGk9ITEsYSYmKHM9dD9bXToiIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBzJiYodCYmIWkmJihsPXMubGVuZ3RoLTEsdS5wdXNoKHQpKSxmdW5jdGlvbiBuKGUpe1MuZWFjaChlLGZ1bmN0aW9uKGUsdCl7bSh0KT9yLnVuaXF1ZSYmZi5oYXModCl8fHMucHVzaCh0KTp0JiZ0Lmxlbmd0aCYmInN0cmluZyIhPT13KHQpJiZuKHQpfSl9KGFyZ3VtZW50cyksdCYmIWkmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIFMuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgtMTwobj1TLmluQXJyYXkodCxzLG4pKSlzLnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxTLmluQXJyYXkoZSxzKTowPHMubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBzJiYocz1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBhPXU9W10scz10PSIiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIXN9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PVtdLHR8fGl8fChzPXQ9IiIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhYX0sZmlyZVdpdGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXx8KHQ9W2UsKHQ9dHx8W10pLnNsaWNlP3Quc2xpY2UoKTp0XSx1LnB1c2godCksaXx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfX07cmV0dXJuIGZ9LFMuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgbz1bWyJub3RpZnkiLCJwcm9ncmVzcyIsUy5DYWxsYmFja3MoIm1lbW9yeSIpLFMuQ2FsbGJhY2tzKCJtZW1vcnkiKSwyXSxbInJlc29sdmUiLCJkb25lIixTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxTLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwwLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksUy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMSwicmVqZWN0ZWQiXV0saT0icGVuZGluZyIsYT17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gaX0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHMuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSwiY2F0Y2giOmZ1bmN0aW9uKGUpe3JldHVybiBhLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBpPWFyZ3VtZW50cztyZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihyKXtTLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPW0oaVt0WzRdXSkmJmlbdFs0XV07c1t0WzFdXShmdW5jdGlvbigpe3ZhciBlPW4mJm4uYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm0oZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyhyLm5vdGlmeSkuZG9uZShyLnJlc29sdmUpLmZhaWwoci5yZWplY3QpOnJbdFswXSsiV2l0aCJdKHRoaXMsbj9bZV06YXJndW1lbnRzKX0pfSksaT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQsbixyKXt2YXIgdT0wO2Z1bmN0aW9uIGwoaSxvLGEscyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49dGhpcyxyPWFyZ3VtZW50cyxlPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZighKGk8dSkpe2lmKChlPWEuYXBwbHkobixyKSk9PT1vLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/cz90LmNhbGwoZSxsKHUsbyxSLHMpLGwodSxvLE0scykpOih1KyssdC5jYWxsKGUsbCh1LG8sUixzKSxsKHUsbyxNLHMpLGwodSxvLFIsby5ub3RpZnlXaXRoKSkpOihhIT09UiYmKG49dm9pZCAwLHI9W2VdKSwoc3x8by5yZXNvbHZlV2l0aCkobixyKSl9fSx0PXM/ZTpmdW5jdGlvbigpe3RyeXtlKCl9Y2F0Y2goZSl7Uy5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSx0LnN0YWNrVHJhY2UpLHU8PWkrMSYmKGEhPT1NJiYobj12b2lkIDAscj1bZV0pLG8ucmVqZWN0V2l0aChuLHIpKX19O2k/dCgpOihTLkRlZmVycmVkLmdldFN0YWNrSG9vayYmKHQuc3RhY2tUcmFjZT1TLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxDLnNldFRpbWVvdXQodCkpfX1yZXR1cm4gUy5EZWZlcnJlZChmdW5jdGlvbihlKXtvWzBdWzNdLmFkZChsKDAsZSxtKHIpP3I6UixlLm5vdGlmeVdpdGgpKSxvWzFdWzNdLmFkZChsKDAsZSxtKHQpP3Q6UikpLG9bMl1bM10uYWRkKGwoMCxlLG0obik/bjpNKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/Uy5leHRlbmQoZSxhKTphfX0scz17fTtyZXR1cm4gUy5lYWNoKG8sZnVuY3Rpb24oZSx0KXt2YXIgbj10WzJdLHI9dFs1XTthW3RbMV1dPW4uYWRkLHImJm4uYWRkKGZ1bmN0aW9uKCl7aT1yfSxvWzMtZV1bMl0uZGlzYWJsZSxvWzMtZV1bM10uZGlzYWJsZSxvWzBdWzJdLmxvY2ssb1swXVszXS5sb2NrKSxuLmFkZCh0WzNdLmZpcmUpLHNbdFswXV09ZnVuY3Rpb24oKXtyZXR1cm4gc1t0WzBdKyJXaXRoIl0odGhpcz09PXM/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxzW3RbMF0rIldpdGgiXT1uLmZpcmVXaXRofSksYS5wcm9taXNlKHMpLGUmJmUuY2FsbChzLHMpLHN9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCx0PW4scj1BcnJheSh0KSxpPXMuY2FsbChhcmd1bWVudHMpLG89Uy5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxpW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9zLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYobjw9MSYmKEkoZSxvLmRvbmUoYSh0KSkucmVzb2x2ZSxvLnJlamVjdCwhbiksInBlbmRpbmciPT09by5zdGF0ZSgpfHxtKGlbdF0mJmlbdF0udGhlbikpKXJldHVybiBvLnRoZW4oKTt3aGlsZSh0LS0pSShpW3RdLGEodCksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgVz0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztTLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtDLmNvbnNvbGUmJkMuY29uc29sZS53YXJuJiZlJiZXLnRlc3QoZS5uYW1lKSYmQy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LFMucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgRj1TLkRlZmVycmVkKCk7ZnVuY3Rpb24gQigpe0UucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixCKSxTLnJlYWR5KCl9Uy5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gRi50aGVuKGUpWyJjYXRjaCJdKGZ1bmN0aW9uKGUpe1MucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxTLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tUy5yZWFkeVdhaXQ6Uy5pc1JlYWR5KXx8KFMuaXNSZWFkeT0hMCkhPT1lJiYwPC0tUy5yZWFkeVdhaXR8fEYucmVzb2x2ZVdpdGgoRSxbU10pfX0pLFMucmVhZHkudGhlbj1GLnRoZW4sImNvbXBsZXRlIj09PUUucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09RS5yZWFkeVN0YXRlJiYhRS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Qy5zZXRUaW1lb3V0KFMucmVhZHkpOihFLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEIpLEMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsQikpO3ZhciAkPWZ1bmN0aW9uKGUsdCxuLHIsaSxvLGEpe3ZhciBzPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT13KG4pKWZvcihzIGluIGk9ITAsbikkKGUsdCxzLG5bc10sITAsbyxhKTtlbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLG0ocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoUyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxfPS9eLW1zLS8sej0vLShbYS16XSkvZztmdW5jdGlvbiBVKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2UoXywibXMtIikucmVwbGFjZSh6LFUpfXZhciBWPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gRygpe3RoaXMuZXhwYW5kbz1TLmV4cGFuZG8rRy51aWQrK31HLnVpZD0xLEcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFYoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW1godCldPW47ZWxzZSBmb3IociBpbiB0KWlbWChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtYKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChYKToodD1YKHQpKWluIHI/W3RdOnQubWF0Y2goUCl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHxTLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiFTLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgWT1uZXcgRyxRPW5ldyBHLEo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxLPS9bQS1aXS9nO2Z1bmN0aW9uIFooZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShLLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Si50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fVEuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufVMuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBRLmhhc0RhdGEoZSl8fFkuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFEuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gWS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1kucmVtb3ZlKGUsdCl9fSksUy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1RLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVkuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9WChyLnNsaWNlKDUpKSxaKG8scixpW3JdKSk7WS5zZXQobywiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIGl9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBuP3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbil9KTokKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ7aWYobyYmdm9pZCAwPT09ZSlyZXR1cm4gdm9pZCAwIT09KHQ9US5nZXQobyxuKSk/dDp2b2lkIDAhPT0odD1aKG8sbikpP3Q6dm9pZCAwO3RoaXMuZWFjaChmdW5jdGlvbigpe1Euc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtRLnJlbW92ZSh0aGlzLGUpfSl9fSksUy5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHwiZngiKSsicXVldWUiLHI9WS5nZXQoZSx0KSxuJiYoIXJ8fEFycmF5LmlzQXJyYXkobik/cj1ZLmFjY2VzcyhlLHQsUy5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49Uy5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz1TLl9xdWV1ZUhvb2tzKGUsdCk7ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLGZ1bmN0aW9uKCl7Uy5kZXF1ZXVlKGUsdCl9LG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIFkuZ2V0KGUsbil8fFkuYWNjZXNzKGUsbix7ZW1wdHk6Uy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7WS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksUy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsbil7dmFyIGU9MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihuPXQsdD0iZngiLGUtLSksYXJndW1lbnRzLmxlbmd0aDxlP1MucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1uP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Uy5xdWV1ZSh0aGlzLHQsbik7Uy5fcXVldWVIb29rcyh0aGlzLHQpLCJmeCI9PT10JiYiaW5wcm9ncmVzcyIhPT1lWzBdJiZTLmRlcXVldWUodGhpcyx0KX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9Uy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49WS5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgZWU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsdGU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK2VlKyIpKFthLXolXSopJCIsImkiKSxuZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLHJlPUUuZG9jdW1lbnRFbGVtZW50LGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX0sb2U9e2NvbXBvc2VkOiEwfTtyZS5nZXRSb290Tm9kZSYmKGllPWZ1bmN0aW9uKGUpe3JldHVybiBTLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8ZS5nZXRSb290Tm9kZShvZSk9PT1lLm93bmVyRG9jdW1lbnR9KTt2YXIgYWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PVMuY3NzKGUsImRpc3BsYXkiKX07ZnVuY3Rpb24gc2UoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBTLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChTLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihTLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmdGUuZXhlYyhTLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pUy5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLFMuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgdWU9e307ZnVuY3Rpb24gbGUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109WS5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmYWUocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT11ZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9Uy5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSx1ZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsWS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1TLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBsZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT9TKHRoaXMpLnNob3coKTpTKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBjZSxmZSxwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2k7Y2U9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKGZlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxmZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksZmUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGNlLmFwcGVuZENoaWxkKGZlKSx5LmNoZWNrQ2xvbmU9Y2UuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGNlLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIWNlLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxjZS5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+Iix5Lm9wdGlvbj0hIWNlLmxhc3RDaGlsZDt2YXIgZ2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP1MubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspWS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFkuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZCx5Lm9wdGlvbnx8KGdlLm9wdGdyb3VwPWdlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24geGUoZSx0LG4scixpKXtmb3IodmFyIG8sYSxzLHUsbCxjLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxkPTAsaD1lLmxlbmd0aDtkPGg7ZCsrKWlmKChvPWVbZF0pfHwwPT09bylpZigib2JqZWN0Ij09PXcobykpUy5tZXJnZShwLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYobWUudGVzdChvKSl7YT1hfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLHM9KGRlLmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksdT1nZVtzXXx8Z2UuX2RlZmF1bHQsYS5pbm5lckhUTUw9dVsxXStTLmh0bWxQcmVmaWx0ZXIobykrdVsyXSxjPXVbMF07d2hpbGUoYy0tKWE9YS5sYXN0Q2hpbGQ7Uy5tZXJnZShwLGEuY2hpbGROb2RlcyksKGE9Zi5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIHAucHVzaCh0LmNyZWF0ZVRleHROb2RlKG8pKTtmLnRleHRDb250ZW50PSIiLGQ9MDt3aGlsZShvPXBbZCsrXSlpZihyJiYtMTxTLmluQXJyYXkobyxyKSlpJiZpLnB1c2gobyk7ZWxzZSBpZihsPWllKG8pLGE9dmUoZi5hcHBlbmRDaGlsZChvKSwic2NyaXB0IiksbCYmeWUoYSksbil7Yz0wO3doaWxlKG89YVtjKytdKWhlLnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gZn12YXIgYmU9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHdlKCl7cmV0dXJuITB9ZnVuY3Rpb24gVGUoKXtyZXR1cm4hMX1mdW5jdGlvbiBDZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEUuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIEVlKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHMgaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApLHQpRWUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9VGU7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIFMoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD1TLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBTZShlLGksbyl7bz8oWS5zZXQoZSxpLCExKSxTLmV2ZW50LmFkZChlLGkse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1ZLmdldCh0aGlzLGkpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbaV0pe2lmKHIubGVuZ3RoKShTLmV2ZW50LnNwZWNpYWxbaV18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihyPXMuY2FsbChhcmd1bWVudHMpLFkuc2V0KHRoaXMsaSxyKSx0PW8odGhpcyxpKSx0aGlzW2ldKCksciE9PShuPVkuZ2V0KHRoaXMsaSkpfHx0P1kuc2V0KHRoaXMsaSwhMSk6bj17fSxyIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbiYmbi52YWx1ZX1lbHNlIHIubGVuZ3RoJiYoWS5zZXQodGhpcyxpLHt2YWx1ZTpTLmV2ZW50LnRyaWdnZXIoUy5leHRlbmQoclswXSxTLkV2ZW50LnByb3RvdHlwZSksci5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1ZLmdldChlLGkpJiZTLmV2ZW50LmFkZChlLGksd2UpfVMuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5nZXQodCk7aWYoVih0KSl7bi5oYW5kbGVyJiYobj0obz1uKS5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmUy5maW5kLm1hdGNoZXNTZWxlY3RvcihyZSxpKSxuLmd1aWR8fChuLmd1aWQ9Uy5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFMmJlMuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP1MuZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9YmUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1TLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9Uy5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmUy5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxTLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9WS5oYXNEYXRhKGUpJiZZLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChQKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9YmUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fFMucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KVMuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7Uy5pc0VtcHR5T2JqZWN0KHUpJiZZLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksdT1TLmV2ZW50LmZpeChlKSxsPShZLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbdS50eXBlXXx8W10sYz1TLmV2ZW50LnNwZWNpYWxbdS50eXBlXXx8e307Zm9yKHNbMF09dSx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZih1LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdSkpe2E9Uy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdSxsKSx0PTA7d2hpbGUoKGk9YVt0KytdKSYmIXUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIXUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl1LnJuYW1lc3BhY2UmJiExIT09by5uYW1lc3BhY2UmJiF1LnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fCh1LmhhbmRsZU9iaj1vLHUuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KChTLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0odS5yZXN1bHQ9cikmJih1LnByZXZlbnREZWZhdWx0KCksdS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHUpLHUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/LTE8UyhpLHRoaXMpLmluZGV4KGwpOlMuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShTLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bShlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbUy5leHBhbmRvXT9lOm5ldyBTLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIsd2UpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXN8fGU7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZTZSh0LCJjbGljayIpLCEwfSxfZGVmYXVsdDpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtyZXR1cm4gcGUudGVzdCh0LnR5cGUpJiZ0LmNsaWNrJiZBKHQsImlucHV0IikmJlkuZ2V0KHQsImNsaWNrIil8fEEodCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LFMucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LFMuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBTLkV2ZW50KSlyZXR1cm4gbmV3IFMuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT93ZTpUZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZTLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbUy5leHBhbmRvXT0hMH0sUy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOlRlLGlzUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlRlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXdlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13ZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sUy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjb2RlOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOiEwfSxTLmV2ZW50LmFkZFByb3ApLFMuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtTLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIFNlKHRoaXMsZSxDZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gU2UodGhpcyxlKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZGVsZWdhdGVUeXBlOnR9fSksUy5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe1MuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxTLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxTLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEVlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosUyhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49VGUpLHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGtlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLEFlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLE5lPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBqZShlLHQpe3JldHVybiBBKGUsInRhYmxlIikmJkEoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZTKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIERlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gcWUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIExlKGUsdCl7dmFyIG4scixpLG8sYSxzO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihZLmhhc0RhdGEoZSkmJihzPVkuZ2V0KGUpLmV2ZW50cykpZm9yKGkgaW4gWS5yZW1vdmUodCwiaGFuZGxlIGV2ZW50cyIpLHMpZm9yKG49MCxyPXNbaV0ubGVuZ3RoO248cjtuKyspUy5ldmVudC5hZGQodCxpLHNbaV1bbl0pO1EuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1TLmV4dGVuZCh7fSxvKSxRLnNldCh0LGEpKX19ZnVuY3Rpb24gSGUobixyLGksbyl7cj1nKHIpO3ZhciBlLHQsYSxzLHUsbCxjPTAsZj1uLmxlbmd0aCxwPWYtMSxkPXJbMF0saD1tKGQpO2lmKGh8fDE8ZiYmInN0cmluZyI9PXR5cGVvZiBkJiYheS5jaGVja0Nsb25lJiZBZS50ZXN0KGQpKXJldHVybiBuLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bi5lcShlKTtoJiYoclswXT1kLmNhbGwodGhpcyxlLHQuaHRtbCgpKSksSGUodCxyLGksbyl9KTtpZihmJiYodD0oZT14ZShyLG5bMF0ub3duZXJEb2N1bWVudCwhMSxuLG8pKS5maXJzdENoaWxkLDE9PT1lLmNoaWxkTm9kZXMubGVuZ3RoJiYoZT10KSx0fHxvKSl7Zm9yKHM9KGE9Uy5tYXAodmUoZSwic2NyaXB0IiksRGUpKS5sZW5ndGg7YzxmO2MrKyl1PWUsYyE9PXAmJih1PVMuY2xvbmUodSwhMCwhMCkscyYmUy5tZXJnZShhLHZlKHUsInNjcmlwdCIpKSksaS5jYWxsKG5bY10sdSxjKTtpZihzKWZvcihsPWFbYS5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCxTLm1hcChhLHFlKSxjPTA7YzxzO2MrKyl1PWFbY10saGUudGVzdCh1LnR5cGV8fCIiKSYmIVkuYWNjZXNzKHUsImdsb2JhbEV2YWwiKSYmUy5jb250YWlucyhsLHUpJiYodS5zcmMmJiJtb2R1bGUiIT09KHUudHlwZXx8IiIpLnRvTG93ZXJDYXNlKCk/Uy5fZXZhbFVybCYmIXUubm9Nb2R1bGUmJlMuX2V2YWxVcmwodS5zcmMse25vbmNlOnUubm9uY2V8fHUuZ2V0QXR0cmlidXRlKCJub25jZSIpfSxsKTpiKHUudGV4dENvbnRlbnQucmVwbGFjZShOZSwiIiksdSxsKSl9cmV0dXJuIG59ZnVuY3Rpb24gT2UoZSx0LG4pe2Zvcih2YXIgcixpPXQ/Uy5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fFMuY2xlYW5EYXRhKHZlKHIpKSxyLnBhcmVudE5vZGUmJihuJiZpZShyKSYmeWUodmUociwic2NyaXB0IikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9Uy5leHRlbmQoe2h0bWxQcmVmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPWUuY2xvbmVOb2RlKCEwKSxmPWllKGUpO2lmKCEoeS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8Uy5pc1hNTERvYyhlKSkpZm9yKGE9dmUoYykscj0wLGk9KG89dmUoZSkpLmxlbmd0aDtyPGk7cisrKXM9b1tyXSx1PWFbcl0sdm9pZCAwLCJpbnB1dCI9PT0obD11Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiZwZS50ZXN0KHMudHlwZSk/dS5jaGVja2VkPXMuY2hlY2tlZDoiaW5wdXQiIT09bCYmInRleHRhcmVhIiE9PWx8fCh1LmRlZmF1bHRWYWx1ZT1zLmRlZmF1bHRWYWx1ZSk7aWYodClpZihuKWZvcihvPW98fHZlKGUpLGE9YXx8dmUoYykscj0wLGk9by5sZW5ndGg7cjxpO3IrKylMZShvW3JdLGFbcl0pO2Vsc2UgTGUoZSxjKTtyZXR1cm4gMDwoYT12ZShjLCJzY3JpcHQiKSkubGVuZ3RoJiZ5ZShhLCFmJiZ2ZShlLCJzY3JpcHQiKSksY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT1TLmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShuPWVbb10pO28rKylpZihWKG4pKXtpZih0PW5bWS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT9TLmV2ZW50LnJlbW92ZShuLHIpOlMucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1kuZXhwYW5kb109dm9pZCAwfW5bUS5leHBhbmRvXSYmKG5bUS5leHBhbmRvXT12b2lkIDApfX19KSxTLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBPZSh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIE9lKHRoaXMsZSl9LHRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuICQodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9TLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fGplKHRoaXMsZSkuYXBwZW5kQ2hpbGQoZSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9amUodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7bnVsbCE9KGU9dGhpc1t0XSk7dCsrKTE9PT1lLm5vZGVUeXBlJiYoUy5jbGVhbkRhdGEodmUoZSwhMSkpLGUudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBTLmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmIWtlLnRlc3QoZSkmJiFnZVsoZGUuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9Uy5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspMT09PSh0PXRoaXNbbl18fHt9KS5ub2RlVHlwZSYmKFMuY2xlYW5EYXRhKHZlKHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIEhlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTtTLmluQXJyYXkodGhpcyxuKTwwJiYoUy5jbGVhbkRhdGEodmUodGhpcykpLHQmJnQucmVwbGFjZUNoaWxkKGUsdGhpcykpfSxuKX19KSxTLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGEpe1MuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1TKGUpLGk9ci5sZW5ndGgtMSxvPTA7bzw9aTtvKyspdD1vPT09aT90aGlzOnRoaXMuY2xvbmUoITApLFMocltvXSlbYV0odCksdS5hcHBseShuLHQuZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUGU9bmV3IFJlZ0V4cCgiXigiK2VlKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUmU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiB0JiZ0Lm9wZW5lcnx8KHQ9QyksdC5nZXRDb21wdXRlZFN0eWxlKGUpfSxNZT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9O2ZvcihpIGluIHQpb1tpXT1lLnN0eWxlW2ldLGUuc3R5bGVbaV09dFtpXTtmb3IoaSBpbiByPW4uY2FsbChlKSx0KWUuc3R5bGVbaV09b1tpXTtyZXR1cm4gcn0sSWU9bmV3IFJlZ0V4cChuZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiBXZShlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybihuPW58fFJlKGUpKSYmKCIiIT09KGE9bi5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxuW3RdKXx8aWUoZSl8fChhPVMuc3R5bGUoZSx0KSksIXkucGl4ZWxCb3hTdHlsZXMoKSYmUGUudGVzdChhKSYmSWUudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hKyIiOmF9ZnVuY3Rpb24gRmUoZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7aWYoIWUoKSlyZXR1cm4odGhpcy5nZXQ9dCkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSB0aGlzLmdldH19fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtpZihsKXt1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjAiLGwuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIscmUuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIGU9Qy5nZXRDb21wdXRlZFN0eWxlKGwpO249IjElIiE9PWUudG9wLHM9MTI9PT10KGUubWFyZ2luTGVmdCksbC5zdHlsZS5yaWdodD0iNjAlIixvPTM2PT09dChlLnJpZ2h0KSxyPTM2PT09dChlLndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaT0xMj09PXQobC5vZmZzZXRXaWR0aC8zKSxyZS5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIHQoZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIG4scixpLG8sYSxzLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPUUuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIseS5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWwuc3R5bGUuYmFja2dyb3VuZENsaXAsUy5leHRlbmQoeSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHJ9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxvfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGUoKSxufSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGl9LHJlbGlhYmxlVHJEaW1lbnNpb25zOmZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7cmV0dXJuIG51bGw9PWEmJihlPUUuY3JlYXRlRWxlbWVudCgidGFibGUiKSx0PUUuY3JlYXRlRWxlbWVudCgidHIiKSxuPUUuY3JlYXRlRWxlbWVudCgiZGl2IiksZS5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZSIsdC5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MXB4IHNvbGlkIix0LnN0eWxlLmhlaWdodD0iMXB4IixuLnN0eWxlLmhlaWdodD0iOXB4IixuLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyZS5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZCh0KS5hcHBlbmRDaGlsZChuKSxyPUMuZ2V0Q29tcHV0ZWRTdHlsZSh0KSxhPXBhcnNlSW50KHIuaGVpZ2h0LDEwKStwYXJzZUludChyLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChyLmJvcmRlckJvdHRvbVdpZHRoLDEwKT09PXQub2Zmc2V0SGVpZ2h0LHJlLnJlbW92ZUNoaWxkKGUpKSxhfX0pKX0oKTt2YXIgQmU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLCRlPUUuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsX2U9e307ZnVuY3Rpb24gemUoZSl7dmFyIHQ9Uy5jc3NQcm9wc1tlXXx8X2VbZV07cmV0dXJuIHR8fChlIGluICRlP2U6X2VbZV09ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1CZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUJlW25dK3QpaW4gJGUpcmV0dXJuIGV9KGUpfHxlKX12YXIgVWU9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFhlPS9eLS0vLFZlPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxHZT17bGV0dGVyU3BhY2luZzoiMCIsZm9udFdlaWdodDoiNDAwIn07ZnVuY3Rpb24gWWUoZSx0LG4pe3ZhciByPXRlLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fCJweCIpOnR9ZnVuY3Rpb24gUWUoZSx0LG4scixpLG8pe3ZhciBhPSJ3aWR0aCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpIm1hcmdpbiI9PT1uJiYodSs9Uy5jc3MoZSxuK25lW2FdLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYodS09Uy5jc3MoZSwicGFkZGluZyIrbmVbYV0sITAsaSkpLCJtYXJnaW4iIT09biYmKHUtPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKSkpOih1Kz1TLmNzcyhlLCJwYWRkaW5nIituZVthXSwhMCxpKSwicGFkZGluZyIhPT1uP3UrPVMuY3NzKGUsImJvcmRlciIrbmVbYV0rIldpZHRoIiwhMCxpKTpzKz1TLmNzcyhlLCJib3JkZXIiK25lW2FdKyJXaWR0aCIsITAsaSkpO3JldHVybiFyJiYwPD1vJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVsib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKXx8MCksdX1mdW5jdGlvbiBKZShlLHQsbil7dmFyIHI9UmUoZSksaT0oIXkuYm94U2l6aW5nUmVsaWFibGUoKXx8bikmJiJib3JkZXItYm94Ij09PVMuY3NzKGUsImJveFNpemluZyIsITEsciksbz1pLGE9V2UoZSx0LHIpLHM9Im9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7aWYoUGUudGVzdChhKSl7aWYoIW4pcmV0dXJuIGE7YT0iYXV0byJ9cmV0dXJuKCF5LmJveFNpemluZ1JlbGlhYmxlKCkmJml8fCF5LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkmJkEoZSwidHIiKXx8ImF1dG8iPT09YXx8IXBhcnNlRmxvYXQoYSkmJiJpbmxpbmUiPT09Uy5jc3MoZSwiZGlzcGxheSIsITEscikpJiZlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiYoaT0iYm9yZGVyLWJveCI9PT1TLmNzcyhlLCJib3hTaXppbmciLCExLHIpLChvPXMgaW4gZSkmJihhPWVbc10pKSwoYT1wYXJzZUZsb2F0KGEpfHwwKStRZShlLHQsbnx8KGk/ImJvcmRlciI6ImNvbnRlbnQiKSxvLHIsYSkrInB4In1mdW5jdGlvbiBLZShlLHQsbixyLGkpe3JldHVybiBuZXcgS2UucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1TLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVdlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGdyaWRBcmVhOiEwLGdyaWRDb2x1bW46ITAsZ3JpZENvbHVtbkVuZDohMCxncmlkQ29sdW1uU3RhcnQ6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTdGFydDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9WCh0KSx1PVhlLnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PXplKHMpKSxhPVMuY3NzSG9va3NbdF18fFMuY3NzSG9va3Nbc10sdm9pZCAwPT09bilyZXR1cm4gYSYmImdldCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07InN0cmluZyI9PT0obz10eXBlb2YgbikmJihpPXRlLmV4ZWMobikpJiZpWzFdJiYobj1zZShlLHQsaSksbz0ibnVtYmVyIiksbnVsbCE9biYmbj09biYmKCJudW1iZXIiIT09b3x8dXx8KG4rPWkmJmlbM118fChTLmNzc051bWJlcltzXT8iIjoicHgiKSkseS5jbGVhckNsb25lU3R5bGV8fCIiIT09bnx8MCE9PXQuaW5kZXhPZigiYmFja2dyb3VuZCIpfHwobFt0XT0iaW5oZXJpdCIpLGEmJiJzZXQiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPVgodCk7cmV0dXJuIFhlLnRlc3QodCl8fCh0PXplKHMpKSwoYT1TLmNzc0hvb2tzW3RdfHxTLmNzc0hvb2tzW3NdKSYmImdldCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1XZShlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBHZSYmKGk9R2VbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLFMuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx1KXtTLmNzc0hvb2tzW3VdPXtnZXQ6ZnVuY3Rpb24oZSx0LG4pe2lmKHQpcmV0dXJuIVVlLnRlc3QoUy5jc3MoZSwiZGlzcGxheSIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9KZShlLHUsbik6TWUoZSxWZSxmdW5jdGlvbigpe3JldHVybiBKZShlLHUsbil9KX0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVJlKGUpLG89IXkuc2Nyb2xsYm94U2l6ZSgpJiYiYWJzb2x1dGUiPT09aS5wb3NpdGlvbixhPShvfHxuKSYmImJvcmRlci1ib3giPT09Uy5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxzPW4/UWUoZSx1LG4sYSxpKTowO3JldHVybiBhJiZvJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdVswXS50b1VwcGVyQ2FzZSgpK3Uuc2xpY2UoMSldLXBhcnNlRmxvYXQoaVt1XSktUWUoZSx1LCJib3JkZXIiLCExLGkpLS41KSkscyYmKHI9dGUuZXhlYyh0KSkmJiJweCIhPT0oclszXXx8InB4IikmJihlLnN0eWxlW3VdPXQsdD1TLmNzcyhlLHUpKSxZZSgwLHQscyl9fX0pLFMuY3NzSG9va3MubWFyZ2luTGVmdD1GZSh5LnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoV2UoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LU1lKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSxTLmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihpLG8pe1MuY3NzSG9va3NbaStvXT17ZXhwYW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49e30scj0ic3RyaW5nIj09dHlwZW9mIGU/ZS5zcGxpdCgiICIpOltlXTt0PDQ7dCsrKW5baStuZVt0XStvXT1yW3RdfHxyW3QtMl18fHJbMF07cmV0dXJuIG59fSwibWFyZ2luIiE9PWkmJihTLmNzc0hvb2tzW2krb10uc2V0PVllKX0pLFMuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPVJlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPVMuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj9TLnN0eWxlKGUsdCxuKTpTLmNzcyhlLHQpfSxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX19KSwoKFMuVHdlZW49S2UpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6S2UsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8Uy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fChTLmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9S2UucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOktlLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPUtlLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD1TLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6S2UucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0pLmluaXQucHJvdG90eXBlPUtlLnByb3RvdHlwZSwoS2UucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9Uy5jc3MoZS5lbGVtLGUucHJvcCwiIikpJiYiYXV0byIhPT10P3Q6MH0sc2V0OmZ1bmN0aW9uKGUpe1MuZnguc3RlcFtlLnByb3BdP1MuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fCFTLmNzc0hvb2tzW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVt6ZShlLnByb3ApXT9lLmVsZW1bZS5wcm9wXT1lLm5vdzpTLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSkuc2Nyb2xsVG9wPUtlLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LFMuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6InN3aW5nIn0sUy5meD1LZS5wcm90b3R5cGUuaW5pdCxTLmZ4LnN0ZXA9e307dmFyIFplLGV0LHR0LG50LHJ0PS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxpdD0vcXVldWVIb29rcyQvO2Z1bmN0aW9uIG90KCl7ZXQmJighMT09PUUuaGlkZGVuJiZDLnJlcXVlc3RBbmltYXRpb25GcmFtZT9DLnJlcXVlc3RBbmltYXRpb25GcmFtZShvdCk6Qy5zZXRUaW1lb3V0KG90LFMuZnguaW50ZXJ2YWwpLFMuZngudGljaygpKX1mdW5jdGlvbiBhdCgpe3JldHVybiBDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtaZT12b2lkIDB9KSxaZT1EYXRlLm5vdygpfWZ1bmN0aW9uIHN0KGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KWlbIm1hcmdpbiIrKG49bmVbcl0pXT1pWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiB1dChlLHQsbil7Zm9yKHZhciByLGk9KGx0LnR3ZWVuZXJzW3RdfHxbXSkuY29uY2F0KGx0LnR3ZWVuZXJzWyIqIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIGx0KG8sZSx0KXt2YXIgbixhLHI9MCxpPWx0LnByZWZpbHRlcnMubGVuZ3RoLHM9Uy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoYSlyZXR1cm4hMTtmb3IodmFyIGU9WmV8fGF0KCksdD1NYXRoLm1heCgwLGwuc3RhcnRUaW1lK2wuZHVyYXRpb24tZSksbj0xLSh0L2wuZHVyYXRpb258fDApLHI9MCxpPWwudHdlZW5zLmxlbmd0aDtyPGk7cisrKWwudHdlZW5zW3JdLnJ1bihuKTtyZXR1cm4gcy5ub3RpZnlXaXRoKG8sW2wsbix0XSksbjwxJiZpP3Q6KGl8fHMubm90aWZ5V2l0aChvLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgobyxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06byxwcm9wczpTLmV4dGVuZCh7fSxlKSxvcHRzOlMuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpTLmVhc2luZy5fZGVmYXVsdH0sdCksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOnQsc3RhcnRUaW1lOlplfHxhdCgpLGR1cmF0aW9uOnQuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49Uy5Ud2VlbihvLGwub3B0cyxlLHQsbC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWU/bC50d2VlbnMubGVuZ3RoOjA7aWYoYSlyZXR1cm4gdGhpcztmb3IoYT0hMDt0PG47dCsrKWwudHdlZW5zW3RdLnJ1bigxKTtyZXR1cm4gZT8ocy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsLGVdKSk6cy5yZWplY3RXaXRoKG8sW2wsZV0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcighZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYoaT10W3I9WChuKV0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT1TLmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKWZvcihuIGluIG89YS5leHBhbmQobyksZGVsZXRlIGVbcl0sbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKTtlbHNlIHRbcl09aX0oYyxsLm9wdHMuc3BlY2lhbEVhc2luZyk7cjxpO3IrKylpZihuPWx0LnByZWZpbHRlcnNbcl0uY2FsbChsLG8sYyxsLm9wdHMpKXJldHVybiBtKG4uc3RvcCkmJihTLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIFMubWFwKGMsdXQsbCksbShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChvLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLFMuZngudGltZXIoUy5leHRlbmQodSx7ZWxlbTpvLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1TLkFuaW1hdGlvbj1TLmV4dGVuZChsdCx7dHdlZW5lcnM6eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIHNlKG4uZWxlbSxlLHRlLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bShlKT8odD1lLGU9WyIqIl0pOmU9ZS5tYXRjaChQKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sbHQudHdlZW5lcnNbbl09bHQudHdlZW5lcnNbbl18fFtdLGx0LnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjLGY9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZhZShlKSx2PVkuZ2V0KGUsImZ4c2hvdyIpO2ZvcihyIGluIG4ucXVldWV8fChudWxsPT0oYT1TLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLFMucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksdClpZihpPXRbcl0scnQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHwidG9nZ2xlIj09PWksaT09PShnPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1pfHwhdnx8dm9pZCAwPT09dltyXSljb250aW51ZTtnPSEwfWRbcl09diYmdltyXXx8Uy5zdHlsZShlLHIpfWlmKCh1PSFTLmlzRW1wdHlPYmplY3QodCkpfHwhUy5pc0VtcHR5T2JqZWN0KGQpKWZvcihyIGluIGYmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbnVsbD09KGw9diYmdi5kaXNwbGF5KSYmKGw9WS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0oYz1TLmNzcyhlLCJkaXNwbGF5IikpJiYobD9jPWw6KGxlKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz1TLmNzcyhlLCJkaXNwbGF5IiksbGUoW2VdKSkpLCgiaW5saW5lIj09PWN8fCJpbmxpbmUtYmxvY2siPT09YyYmbnVsbCE9bCkmJiJub25lIj09PVMuY3NzKGUsImZsb2F0IikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD0ibm9uZSI9PT1jPyIiOmMpKSxoLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz0iaGlkZGVuIixwLmFsd2F5cyhmdW5jdGlvbigpe2gub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxoLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLGgub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxkKXV8fCh2PyJoaWRkZW4iaW4gdiYmKGc9di5oaWRkZW4pOnY9WS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZsZShbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2ZvcihyIGluIGd8fGxlKFtlXSksWS5yZW1vdmUoZSwiZnhzaG93IiksZClTLnN0eWxlKGUscixkW3JdKX0pKSx1PXV0KGc/dltyXTowLHIscCksciBpbiB2fHwodltyXT11LnN0YXJ0LGcmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9sdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6bHQucHJlZmlsdGVycy5wdXNoKGUpfX0pLFMuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT9TLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBTLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiBTLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPVMuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249Uy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmUy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LFMuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixyKXt2YXIgaT1TLmlzRW1wdHlPYmplY3QodCksbz1TLnNwZWVkKGUsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIGU9bHQodGhpcyxTLmV4dGVuZCh7fSx0KSxvKTsoaXx8WS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihpLGUsbyl7dmFyIGE9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChvKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBpJiYobz1lLGU9aSxpPXZvaWQgMCksZSYmdGhpcy5xdWV1ZShpfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCx0PW51bGwhPWkmJmkrInF1ZXVlSG9va3MiLG49Uy50aW1lcnMscj1ZLmdldCh0aGlzKTtpZih0KXJbdF0mJnJbdF0uc3RvcCYmYShyW3RdKTtlbHNlIGZvcih0IGluIHIpclt0XSYmclt0XS5zdG9wJiZpdC50ZXN0KHQpJiZhKHJbdF0pO2Zvcih0PW4ubGVuZ3RoO3QtLTspblt0XS5lbGVtIT09dGhpc3x8bnVsbCE9aSYmblt0XS5xdWV1ZSE9PWl8fChuW3RdLmFuaW0uc3RvcChvKSxlPSExLG4uc3BsaWNlKHQsMSkpOyFlJiZvfHxTLmRlcXVldWUodGhpcyxpKX0pfSxmaW5pc2g6ZnVuY3Rpb24oYSl7cmV0dXJuITEhPT1hJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0PVkuZ2V0KHRoaXMpLG49dFthKyJxdWV1ZSJdLHI9dFthKyJxdWV1ZUhvb2tzIl0saT1TLnRpbWVycyxvPW4/bi5sZW5ndGg6MDtmb3IodC5maW5pc2g9ITAsUy5xdWV1ZSh0aGlzLGEsW10pLHImJnIuc3RvcCYmci5zdG9wLmNhbGwodGhpcywhMCksZT1pLmxlbmd0aDtlLS07KWlbZV0uZWxlbT09PXRoaXMmJmlbZV0ucXVldWU9PT1hJiYoaVtlXS5hbmltLnN0b3AoITApLGkuc3BsaWNlKGUsMSkpO2ZvcihlPTA7ZTxvO2UrKyluW2VdJiZuW2VdLmZpbmlzaCYmbltlXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgdC5maW5pc2h9KX19KSxTLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUscil7dmFyIGk9Uy5mbltyXTtTLmZuW3JdPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoc3QociwhMCksZSx0LG4pfX0pLFMuZWFjaCh7c2xpZGVEb3duOnN0KCJzaG93Iiksc2xpZGVVcDpzdCgiaGlkZSIpLHNsaWRlVG9nZ2xlOnN0KCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUscil7Uy5mbltlXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYW5pbWF0ZShyLGUsdCxuKX19KSxTLnRpbWVycz1bXSxTLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj1TLnRpbWVycztmb3IoWmU9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHxTLmZ4LnN0b3AoKSxaZT12b2lkIDB9LFMuZngudGltZXI9ZnVuY3Rpb24oZSl7Uy50aW1lcnMucHVzaChlKSxTLmZ4LnN0YXJ0KCl9LFMuZnguaW50ZXJ2YWw9MTMsUy5meC5zdGFydD1mdW5jdGlvbigpe2V0fHwoZXQ9ITAsb3QoKSl9LFMuZnguc3RvcD1mdW5jdGlvbigpe2V0PW51bGx9LFMuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LFMuZm4uZGVsYXk9ZnVuY3Rpb24ocixlKXtyZXR1cm4gcj1TLmZ4JiZTLmZ4LnNwZWVkc1tyXXx8cixlPWV8fCJmeCIsdGhpcy5xdWV1ZShlLGZ1bmN0aW9uKGUsdCl7dmFyIG49Qy5zZXRUaW1lb3V0KGUscik7dC5zdG9wPWZ1bmN0aW9uKCl7Qy5jbGVhclRpbWVvdXQobil9fSl9LHR0PUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxudD1FLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLmFwcGVuZENoaWxkKEUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHR0LnR5cGU9ImNoZWNrYm94Iix5LmNoZWNrT249IiIhPT10dC52YWx1ZSx5Lm9wdFNlbGVjdGVkPW50LnNlbGVjdGVkLCh0dD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0Iix0dC50eXBlPSJyYWRpbyIseS5yYWRpb1ZhbHVlPSJ0Ij09PXR0LnZhbHVlO3ZhciBjdCxmdD1TLmV4cHIuYXR0ckhhbmRsZTtTLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiAkKHRoaXMsUy5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtTLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLFMuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgZS5nZXRBdHRyaWJ1dGU/Uy5wcm9wKGUsdCxuKTooMT09PW8mJlMuaXNYTUxEb2MoZSl8fChpPVMuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fChTLmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP2N0OnZvaWQgMCkpLHZvaWQgMCE9PW4/bnVsbD09PW4/dm9pZCBTLnJlbW92ZUF0dHIoZSx0KTppJiYic2V0ImluIGkmJnZvaWQgMCE9PShyPWkuc2V0KGUsbix0KSk/cjooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOm51bGw9PShyPVMuZmluZC5hdHRyKGUsdCkpP3ZvaWQgMDpyKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheS5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmQShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goUCk7aWYoaSYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1pW3IrK10pZS5yZW1vdmVBdHRyaWJ1dGUobil9fSksY3Q9e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuITE9PT10P1MucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LFMuZWFjaChTLmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBhPWZ0W3RdfHxTLmZpbmQuYXR0cjtmdFt0XT1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KGk9ZnRbb10sZnRbb109cixyPW51bGwhPWEoZSx0LG4pP286bnVsbCxmdFtvXT1pKSxyfX0pO3ZhciBwdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGR0PS9eKD86YXxhcmVhKSQvaTtmdW5jdGlvbiBodChlKXtyZXR1cm4oZS5tYXRjaChQKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBndChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiB2dChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZSYmZS5tYXRjaChQKXx8W119Uy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJCh0aGlzLFMucHJvcCxlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbUy5wcm9wRml4W2VdfHxlXX0pfX0pLFMuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmUy5pc1hNTERvYyhlKXx8KHQ9Uy5wcm9wRml4W3RdfHx0LGk9Uy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6cHQudGVzdChlLm5vZGVOYW1lKXx8ZHQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSkseS5vcHRTZWxlY3RlZHx8KFMucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxTLmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe1MucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSxTLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLmFkZENsYXNzKHQuY2FsbCh0aGlzLGUsZ3QodGhpcykpKX0pO2lmKChlPXZ0KHQpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1ndChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIraHQoaSkrIiAiKXthPTA7d2hpbGUobz1lW2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9aHQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxuLHIsaSxvLGEscyx1PTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1ModGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSxndCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigoZT12dCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9Z3Qobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK2h0KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXdoaWxlKC0xPHIuaW5kZXhPZigiICIrbysiICIpKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz1odChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGksdCl7dmFyIG89dHlwZW9mIGksYT0ic3RyaW5nIj09PW98fEFycmF5LmlzQXJyYXkoaSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmYT90P3RoaXMuYWRkQ2xhc3MoaSk6dGhpcy5yZW1vdmVDbGFzcyhpKTptKGkpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLnRvZ2dsZUNsYXNzKGkuY2FsbCh0aGlzLGUsZ3QodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4scjtpZihhKXt0PTAsbj1TKHRoaXMpLHI9dnQoaSk7d2hpbGUoZT1yW3QrK10pbi5oYXNDbGFzcyhlKT9uLnJlbW92ZUNsYXNzKGUpOm4uYWRkQ2xhc3MoZSl9ZWxzZSB2b2lkIDAhPT1pJiYiYm9vbGVhbiIhPT1vfHwoKGU9Z3QodGhpcykpJiZZLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIixlfHwhMT09PWk/IiI6WS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYtMTwoIiAiK2h0KGd0KG4pKSsiICIpLmluZGV4T2YodCkpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIHl0PS9cci9nO1MuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24obil7dmFyIHIsZSxpLHQ9dGhpc1swXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1tKG4pLHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgdDsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PSh0PWk/bi5jYWxsKHRoaXMsZSxTKHRoaXMpLnZhbCgpKTpuKT90PSIiOiJudW1iZXIiPT10eXBlb2YgdD90Kz0iIjpBcnJheS5pc0FycmF5KHQpJiYodD1TLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHI9Uy52YWxIb29rc1t0aGlzLnR5cGVdfHxTLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHImJnZvaWQgMCE9PXIuc2V0KHRoaXMsdCwidmFsdWUiKXx8KHRoaXMudmFsdWU9dCkpfSkpOnQ/KHI9Uy52YWxIb29rc1t0LnR5cGVdfHxTLnZhbEhvb2tzW3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYiZ2V0ImluIHImJnZvaWQgMCE9PShlPXIuZ2V0KHQsInZhbHVlIikpP2U6InN0cmluZyI9PXR5cGVvZihlPXQudmFsdWUpP2UucmVwbGFjZSh5dCwiIik6bnVsbD09ZT8iIjplOnZvaWQgMH19KSxTLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVMuZmluZC5hdHRyKGUsInZhbHVlIik7cmV0dXJuIG51bGwhPXQ/dDpodChTLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLG89ZS5zZWxlY3RlZEluZGV4LGE9InNlbGVjdC1vbmUiPT09ZS50eXBlLHM9YT9udWxsOltdLHU9YT9vKzE6aS5sZW5ndGg7Zm9yKHI9bzwwP3U6YT9vOjA7cjx1O3IrKylpZigoKG49aVtyXSkuc2VsZWN0ZWR8fHI9PT1vKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhQShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PVMobikudmFsKCksYSlyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz1TLm1ha2VBcnJheSh0KSxhPWkubGVuZ3RoO3doaWxlKGEtLSkoKHI9aVthXSkuc2VsZWN0ZWQ9LTE8Uy5pbkFycmF5KFMudmFsSG9va3Mub3B0aW9uLmdldChyKSxvKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fX0pLFMuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe1MudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxTLmluQXJyYXkoUyhlKS52YWwoKSx0KX19LHkuY2hlY2tPbnx8KFMudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSx5LmZvY3VzaW49Im9uZm9jdXNpbiJpbiBDO3ZhciBtdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8seHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07Uy5leHRlbmQoUy5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGwsYyxmLHA9W258fEVdLGQ9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxoPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKG89Zj1hPW49bnx8RSwzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFtdC50ZXN0KGQrUy5ldmVudC50cmlnZ2VyZWQpJiYoLTE8ZC5pbmRleE9mKCIuIikmJihkPShoPWQuc3BsaXQoIi4iKSkuc2hpZnQoKSxoLnNvcnQoKSksdT1kLmluZGV4T2YoIjoiKTwwJiYib24iK2QsKGU9ZVtTLmV4cGFuZG9dP2U6bmV3IFMuRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cj8yOjMsZS5uYW1lc3BhY2U9aC5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOlMubWFrZUFycmF5KHQsW2VdKSxjPVMuZXZlbnQuc3BlY2lhbFtkXXx8e30scnx8IWMudHJpZ2dlcnx8ITEhPT1jLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFyJiYhYy5ub0J1YmJsZSYmIXgobikpe2ZvcihzPWMuZGVsZWdhdGVUeXBlfHxkLG10LnRlc3QocytkKXx8KG89by5wYXJlbnROb2RlKTtvO289by5wYXJlbnROb2RlKXAucHVzaChvKSxhPW87YT09PShuLm93bmVyRG9jdW1lbnR8fEUpJiZwLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fEMpfWk9MDt3aGlsZSgobz1wW2krK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKWY9byxlLnR5cGU9MTxpP3M6Yy5iaW5kVHlwZXx8ZCwobD0oWS5nZXQobywiZXZlbnRzIil8fE9iamVjdC5jcmVhdGUobnVsbCkpW2UudHlwZV0mJlkuZ2V0KG8sImhhbmRsZSIpKSYmbC5hcHBseShvLHQpLChsPXUmJm9bdV0pJiZsLmFwcGx5JiZWKG8pJiYoZS5yZXN1bHQ9bC5hcHBseShvLHQpLCExPT09ZS5yZXN1bHQmJmUucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIGUudHlwZT1kLHJ8fGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fGMuX2RlZmF1bHQmJiExIT09Yy5fZGVmYXVsdC5hcHBseShwLnBvcCgpLHQpfHwhVihuKXx8dSYmbShuW2RdKSYmIXgobikmJigoYT1uW3VdKSYmKG5bdV09bnVsbCksUy5ldmVudC50cmlnZ2VyZWQ9ZCxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYuYWRkRXZlbnRMaXN0ZW5lcihkLHh0KSxuW2RdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZmLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCx4dCksUy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLGEmJihuW3VdPWEpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1TLmV4dGVuZChuZXcgUy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTtTLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLFMuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe1MuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIFMuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseS5mb2N1c2lufHxTLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7Uy5ldmVudC5zaW11bGF0ZShyLGUudGFyZ2V0LFMuZXZlbnQuZml4KGUpKX07Uy5ldmVudC5zcGVjaWFsW3JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PVkuYWNjZXNzKGUscik7dHx8ZS5hZGRFdmVudExpc3RlbmVyKG4saSwhMCksWS5hY2Nlc3MoZSxyLCh0fHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMuZG9jdW1lbnR8fHRoaXMsdD1ZLmFjY2VzcyhlLHIpLTE7dD9ZLmFjY2VzcyhlLHIsdCk6KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihuLGksITApLFkucmVtb3ZlKGUscikpfX19KTt2YXIgYnQ9Qy5sb2NhdGlvbix3dD17Z3VpZDpEYXRlLm5vdygpfSxUdD0vXD8vO1MucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXt0PShuZXcgQy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKGUpe31yZXR1cm4gbj10JiZ0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpWzBdLHQmJiFufHxTLmVycm9yKCJJbnZhbGlkIFhNTDogIisobj9TLm1hcChuLmNoaWxkTm9kZXMsZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KS5qb2luKCJcbiIpOmUpKSx0fTt2YXIgQ3Q9L1xbXF0kLyxFdD0vXHI/XG4vZyxTdD0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksa3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEF0KG4sZSxyLGkpe3ZhciB0O2lmKEFycmF5LmlzQXJyYXkoZSkpUy5lYWNoKGUsZnVuY3Rpb24oZSx0KXtyfHxDdC50ZXN0KG4pP2kobix0KTpBdChuKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsaSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09dyhlKSlpKG4sZSk7ZWxzZSBmb3IodCBpbiBlKUF0KG4rIlsiK3QrIl0iLGVbdF0scixpKX1TLnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dmFyIG49bSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChudWxsPT1uPyIiOm4pfTtpZihudWxsPT1lKXJldHVybiIiO2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhUy5pc1BsYWluT2JqZWN0KGUpKVMuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpQXQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSxTLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIFMucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1TLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9TLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFTKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYma3QudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVN0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPVModGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP1MubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShFdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoRXQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgTnQ9LyUyMC9nLGp0PS8jLiokLyxEdD0vKFs/Jl0pXz1bXiZdKi8scXQ9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxMdD0vXig/OkdFVHxIRUFEKSQvLEh0PS9eXC9cLy8sT3Q9e30sUHQ9e30sUnQ9IiovIi5jb25jYXQoIioiKSxNdD1FLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBJdChvKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLHI9MCxpPWUudG9Mb3dlckNhc2UoKS5tYXRjaChQKXx8W107aWYobSh0KSl3aGlsZShuPWlbcisrXSkiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwob1tuXT1vW25dfHxbXSkudW5zaGlmdCh0KSk6KG9bbl09b1tuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIFd0KHQsaSxvLGEpe3ZhciBzPXt9LHU9dD09PVB0O2Z1bmN0aW9uIGwoZSl7dmFyIHI7cmV0dXJuIHNbZV09ITAsUy5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dmFyIG49dChpLG8sYSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBufHx1fHxzW25dP3U/IShyPW4pOnZvaWQgMDooaS5kYXRhVHlwZXMudW5zaGlmdChuKSxsKG4pLCExKX0pLHJ9cmV0dXJuIGwoaS5kYXRhVHlwZXNbMF0pfHwhc1siKiJdJiZsKCIqIil9ZnVuY3Rpb24gRnQoZSx0KXt2YXIgbixyLGk9Uy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihuIGluIHQpdm9pZCAwIT09dFtuXSYmKChpW25dP2U6cnx8KHI9e30pKVtuXT10W25dKTtyZXR1cm4gciYmUy5leHRlbmQoITAsZSxyKSxlfU10LmhyZWY9YnQuaHJlZixTLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6YnQuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdChidC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpSdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Uy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/RnQoRnQoZSxTLmFqYXhTZXR0aW5ncyksdCk6RnQoUy5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SXQoT3QpLGFqYXhUcmFuc3BvcnQ6SXQoUHQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLHQ9dHx8e307dmFyIGMsZixwLG4sZCxyLGgsZyxpLG8sdj1TLmFqYXhTZXR1cCh7fSx0KSx5PXYuY29udGV4dHx8dixtPXYuY29udGV4dCYmKHkubm9kZVR5cGV8fHkuanF1ZXJ5KT9TKHkpOlMuZXZlbnQseD1TLkRlZmVycmVkKCksYj1TLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3PXYuc3RhdHVzQ29kZXx8e30sYT17fSxzPXt9LHU9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoaCl7aWYoIW4pe249e307d2hpbGUodD1xdC5leGVjKHApKW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSl9dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gaD9wOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09aCYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWgmJih2Lm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihoKVQuYWx3YXlzKGVbVC5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpd1t0XT1bd1t0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dTtyZXR1cm4gYyYmYy5hYm9ydCh0KSxsKDAsdCksdGhpc319O2lmKHgucHJvbWlzZShUKSx2LnVybD0oKGV8fHYudXJsfHxidC5ocmVmKSsiIikucmVwbGFjZShIdCxidC5wcm90b2NvbCsiLy8iKSx2LnR5cGU9dC5tZXRob2R8fHQudHlwZXx8di5tZXRob2R8fHYudHlwZSx2LmRhdGFUeXBlcz0odi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFApfHxbIiJdLG51bGw9PXYuY3Jvc3NEb21haW4pe3I9RS5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj12LnVybCxyLmhyZWY9ci5ocmVmLHYuY3Jvc3NEb21haW49TXQucHJvdG9jb2wrIi8vIitNdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe3YuY3Jvc3NEb21haW49ITB9fWlmKHYuZGF0YSYmdi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiB2LmRhdGEmJih2LmRhdGE9Uy5wYXJhbSh2LmRhdGEsdi50cmFkaXRpb25hbCkpLFd0KE90LHYsdCxUKSxoKXJldHVybiBUO2ZvcihpIGluKGc9Uy5ldmVudCYmdi5nbG9iYWwpJiYwPT1TLmFjdGl2ZSsrJiZTLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLHYudHlwZT12LnR5cGUudG9VcHBlckNhc2UoKSx2Lmhhc0NvbnRlbnQ9IUx0LnRlc3Qodi50eXBlKSxmPXYudXJsLnJlcGxhY2UoanQsIiIpLHYuaGFzQ29udGVudD92LmRhdGEmJnYucHJvY2Vzc0RhdGEmJjA9PT0odi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYodi5kYXRhPXYuZGF0YS5yZXBsYWNlKE50LCIrIikpOihvPXYudXJsLnNsaWNlKGYubGVuZ3RoKSx2LmRhdGEmJih2LnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIHYuZGF0YSkmJihmKz0oVHQudGVzdChmKT8iJiI6Ij8iKSt2LmRhdGEsZGVsZXRlIHYuZGF0YSksITE9PT12LmNhY2hlJiYoZj1mLnJlcGxhY2UoRHQsIiQxIiksbz0oVHQudGVzdChmKT8iJiI6Ij8iKSsiXz0iK3d0Lmd1aWQrKytvKSx2LnVybD1mK28pLHYuaWZNb2RpZmllZCYmKFMubGFzdE1vZGlmaWVkW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixTLmxhc3RNb2RpZmllZFtmXSksUy5ldGFnW2ZdJiZULnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLFMuZXRhZ1tmXSkpLCh2LmRhdGEmJnYuaGFzQ29udGVudCYmITEhPT12LmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmVC5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHYuY29udGVudFR5cGUpLFQuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0Iix2LmRhdGFUeXBlc1swXSYmdi5hY2NlcHRzW3YuZGF0YVR5cGVzWzBdXT92LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dKygiKiIhPT12LmRhdGFUeXBlc1swXT8iLCAiK1J0KyI7IHE9MC4wMSI6IiIpOnYuYWNjZXB0c1siKiJdKSx2LmhlYWRlcnMpVC5zZXRSZXF1ZXN0SGVhZGVyKGksdi5oZWFkZXJzW2ldKTtpZih2LmJlZm9yZVNlbmQmJighMT09PXYuYmVmb3JlU2VuZC5jYWxsKHksVCx2KXx8aCkpcmV0dXJuIFQuYWJvcnQoKTtpZih1PSJhYm9ydCIsYi5hZGQodi5jb21wbGV0ZSksVC5kb25lKHYuc3VjY2VzcyksVC5mYWlsKHYuZXJyb3IpLGM9V3QoUHQsdix0LFQpKXtpZihULnJlYWR5U3RhdGU9MSxnJiZtLnRyaWdnZXIoImFqYXhTZW5kIixbVCx2XSksaClyZXR1cm4gVDt2LmFzeW5jJiYwPHYudGltZW91dCYmKGQ9Qy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSx2LnRpbWVvdXQpKTt0cnl7aD0hMSxjLnNlbmQoYSxsKX1jYXRjaChlKXtpZihoKXRocm93IGU7bCgtMSxlKX19ZWxzZSBsKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBsKGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsbD10O2h8fChoPSEwLGQmJkMuY2xlYXJUaW1lb3V0KGQpLGM9dm9pZCAwLHA9cnx8IiIsVC5yZWFkeVN0YXRlPTA8ZT80OjAsaT0yMDA8PWUmJmU8MzAwfHwzMDQ9PT1lLG4mJihzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczt3aGlsZSgiKiI9PT11WzBdKXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKCJDb250ZW50LVR5cGUiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaSsiICIrdVswXV0pe289aTticmVha31hfHwoYT1pKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dfSh2LFQsbikpLCFpJiYtMTxTLmluQXJyYXkoInNjcmlwdCIsdi5kYXRhVHlwZXMpJiZTLmluQXJyYXkoImpzb24iLHYuZGF0YVR5cGVzKTwwJiYodi5jb252ZXJ0ZXJzWyJ0ZXh0IHNjcmlwdCJdPWZ1bmN0aW9uKCl7fSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoUy5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKFMuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLVMuYWN0aXZlfHxTLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFMuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBTLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxTLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtTW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksUy5hamF4KFMuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxTLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxTLmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZS5oZWFkZXJzKSJjb250ZW50LXR5cGUiPT09dC50b0xvd2VyQ2FzZSgpJiYoZS5jb250ZW50VHlwZT1lLmhlYWRlcnNbdF18fCIiKX0pLFMuX2V2YWxVcmw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBTLmFqYXgoe3VybDplLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oKXt9fSxkYXRhRmlsdGVyOmZ1bmN0aW9uKGUpe1MuZ2xvYmFsRXZhbChlLHQsbil9fSl9LFMuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PVMoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1TKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtTKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtTKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLFMuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hUy5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sUy5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LFMuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIEJ0PXswOjIwMCwxMjIzOjIwNH0sJHQ9Uy5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhJHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gJHQseS5hamF4PSR0PSEhJHQsUy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHwkdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChCdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksUy5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxTLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gUy5nbG9iYWxFdmFsKGUpLGV9fX0pLFMuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxTLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1TKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgX3QsenQ9W10sVXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztTLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9enQucG9wKCl8fFMuZXhwYW5kbysiXyIrd3QuZ3VpZCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksUy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9ITEhPT1lLmpzb25wJiYoVXQudGVzdChlLnVybCk/InVybCI6InN0cmluZyI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZVdC50ZXN0KGUuZGF0YSkmJiJkYXRhIik7aWYoYXx8Impzb25wIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiByPWUuanNvbnBDYWxsYmFjaz1tKGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLGE/ZVthXT1lW2FdLnJlcGxhY2UoVXQsIiQxIityKTohMSE9PWUuanNvbnAmJihlLnVybCs9KFR0LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuanNvbnArIj0iK3IpLGUuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBvfHxTLmVycm9yKHIrIiB3YXMgbm90IGNhbGxlZCIpLG9bMF19LGUuZGF0YVR5cGVzWzBdPSJqc29uIixpPUNbcl0sQ1tyXT1mdW5jdGlvbigpe289YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PWk/UyhDKS5yZW1vdmVQcm9wKHIpOkNbcl09aSxlW3JdJiYoZS5qc29ucENhbGxiYWNrPXQuanNvbnBDYWxsYmFjayx6dC5wdXNoKHIpKSxvJiZtKGkpJiZpKG9bMF0pLG89aT12b2lkIDB9KSwic2NyaXB0In0pLHkuY3JlYXRlSFRNTERvY3VtZW50PSgoX3Q9RS5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpLmJvZHkpLmlubmVySFRNTD0iPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT4iLDI9PT1fdC5jaGlsZE5vZGVzLmxlbmd0aCksUy5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiJzdHJpbmciIT10eXBlb2YgZT9bXTooImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0fHwoeS5jcmVhdGVIVE1MRG9jdW1lbnQ/KChyPSh0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPUUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9RSksbz0hbiYmW10sKGk9Ti5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT14ZShbZV0sdCxvKSxvJiZvLmxlbmd0aCYmUyhvKS5yZW1vdmUoKSxTLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpKTt2YXIgcixpLG99LFMuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZigiICIpO3JldHVybi0xPHMmJihyPWh0KGUuc2xpY2UocykpLGU9ZS5zbGljZSgwLHMpKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKGk9IlBPU1QiKSwwPGEubGVuZ3RoJiZTLmFqYXgoe3VybDplLHR5cGU6aXx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/UygiPGRpdj4iKS5hcHBlbmQoUy5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxTLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gUy5ncmVwKFMudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxTLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbD1TLmNzcyhlLCJwb3NpdGlvbiIpLGM9UyhlKSxmPXt9OyJzdGF0aWMiPT09bCYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIikscz1jLm9mZnNldCgpLG89Uy5jc3MoZSwidG9wIiksdT1TLmNzcyhlLCJsZWZ0IiksKCJhYnNvbHV0ZSI9PT1sfHwiZml4ZWQiPT09bCkmJi0xPChvK3UpLmluZGV4T2YoImF1dG8iKT8oYT0ocj1jLnBvc2l0aW9uKCkpLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG0odCkmJih0PXQuY2FsbChlLG4sUy5leHRlbmQoe30scykpKSxudWxsIT10LnRvcCYmKGYudG9wPXQudG9wLXMudG9wK2EpLG51bGwhPXQubGVmdCYmKGYubGVmdD10LmxlZnQtcy5sZWZ0K2kpLCJ1c2luZyJpbiB0P3QudXNpbmcuY2FsbChlLGYpOmMuY3NzKGYpfX0sUy5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe1Mub2Zmc2V0LnNldE9mZnNldCh0aGlzLHQsZSl9KTt2YXIgZSxuLHI9dGhpc1swXTtyZXR1cm4gcj9yLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLHI9dGhpc1swXSxpPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1TLmNzcyhyLCJwb3NpdGlvbiIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle3Q9dGhpcy5vZmZzZXQoKSxuPXIub3duZXJEb2N1bWVudCxlPXIub2Zmc2V0UGFyZW50fHxuLmRvY3VtZW50RWxlbWVudDt3aGlsZShlJiYoZT09PW4uYm9keXx8ZT09PW4uZG9jdW1lbnRFbGVtZW50KSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5wYXJlbnROb2RlO2UmJmUhPT1yJiYxPT09ZS5ub2RlVHlwZSYmKChpPVMoZSkub2Zmc2V0KCkpLnRvcCs9Uy5jc3MoZSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxpLmxlZnQrPVMuY3NzKGUsImJvcmRlckxlZnRXaWR0aCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLVMuY3NzKHIsIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC1TLmNzcyhyLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7d2hpbGUoZSYmInN0YXRpYyI9PT1TLmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHJlfSl9fSksUy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKHQsaSl7dmFyIG89InBhZ2VZT2Zmc2V0Ij09PWk7Uy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gJCh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZih4KGUpP3I9ZTo5PT09ZS5ub2RlVHlwZSYmKHI9ZS5kZWZhdWx0Vmlldyksdm9pZCAwPT09bilyZXR1cm4gcj9yW2ldOmVbdF07cj9yLnNjcm9sbFRvKG8/ci5wYWdlWE9mZnNldDpuLG8/bjpyLnBhZ2VZT2Zmc2V0KTplW3RdPW59LHQsZSxhcmd1bWVudHMubGVuZ3RoKX19KSxTLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXtTLmNzc0hvb2tzW25dPUZlKHkucGl4ZWxQb3NpdGlvbixmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuIHQ9V2UoZSxuKSxQZS50ZXN0KHQpP1MoZSkucG9zaXRpb24oKVtuXSsicHgiOnR9KX0pLFMuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEscyl7Uy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OnMsIiI6Im91dGVyIithfSxmdW5jdGlvbihyLG8pe1MuZm5bb109ZnVuY3Rpb24oZSx0KXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoJiYocnx8ImJvb2xlYW4iIT10eXBlb2YgZSksaT1yfHwoITA9PT1lfHwhMD09PXQ/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiAkKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB4KGUpPzA9PT1vLmluZGV4T2YoIm91dGVyIik/ZVsiaW5uZXIiK2FdOmUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2FdOjk9PT1lLm5vZGVUeXBlPyhyPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVsic2Nyb2xsIithXSxyWyJzY3JvbGwiK2FdLGUuYm9keVsib2Zmc2V0IithXSxyWyJvZmZzZXQiK2FdLHJbImNsaWVudCIrYV0pKTp2b2lkIDA9PT1uP1MuY3NzKGUsdCxpKTpTLnN0eWxlKGUsdCxuLGkpfSxzLG4/ZTp2b2lkIDAsbil9fSl9KSxTLmVhY2goWyJhamF4U3RhcnQiLCJhamF4U3RvcCIsImFqYXhDb21wbGV0ZSIsImFqYXhFcnJvciIsImFqYXhTdWNjZXNzIiwiYWpheFNlbmQiXSxmdW5jdGlvbihlLHQpe1MuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSxTLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LGhvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLFMuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLG4pe1MuZm5bbl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMDxhcmd1bWVudHMubGVuZ3RoP3RoaXMub24obixudWxsLGUsdCk6dGhpcy50cmlnZ2VyKG4pfX0pO3ZhciBYdD0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2c7Uy5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZigic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9biksbShlKSlyZXR1cm4gcj1zLmNhbGwoYXJndW1lbnRzLDIpLChpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdChzLmNhbGwoYXJndW1lbnRzKSkpfSkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHxTLmd1aWQrKyxpfSxTLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP1MucmVhZHlXYWl0Kys6Uy5yZWFkeSghMCl9LFMuaXNBcnJheT1BcnJheS5pc0FycmF5LFMucGFyc2VKU09OPUpTT04ucGFyc2UsUy5ub2RlTmFtZT1BLFMuaXNGdW5jdGlvbj1tLFMuaXNXaW5kb3c9eCxTLmNhbWVsQ2FzZT1YLFMudHlwZT13LFMubm93PURhdGUubm93LFMuaXNOdW1lcmljPWZ1bmN0aW9uKGUpe3ZhciB0PVMudHlwZShlKTtyZXR1cm4oIm51bWJlciI9PT10fHwic3RyaW5nIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sUy50cmltPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKFh0LCIiKX0sImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KTt2YXIgVnQ9Qy5qUXVlcnksR3Q9Qy4kO3JldHVybiBTLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIEMuJD09PVMmJihDLiQ9R3QpLGUmJkMualF1ZXJ5PT09UyYmKEMualF1ZXJ5PVZ0KSxTfSwidW5kZWZpbmVkIj09dHlwZW9mIGUmJihDLmpRdWVyeT1DLiQ9UyksU30pOwo="></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="data:text/css,html%7Bfont%2Dfamily%3Asans%2Dserif%3B%2Dwebkit%2Dtext%2Dsize%2Dadjust%3A100%25%3B%2Dms%2Dtext%2Dsize%2Dadjust%3A100%25%7Dbody%7Bmargin%3A0%7Darticle%2Caside%2Cdetails%2Cfigcaption%2Cfigure%2Cfooter%2Cheader%2Chgroup%2Cmain%2Cmenu%2Cnav%2Csection%2Csummary%7Bdisplay%3Ablock%7Daudio%2Ccanvas%2Cprogress%2Cvideo%7Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Abaseline%7Daudio%3Anot%28%5Bcontrols%5D%29%7Bdisplay%3Anone%3Bheight%3A0%7D%5Bhidden%5D%2Ctemplate%7Bdisplay%3Anone%7Da%7Bbackground%2Dcolor%3Atransparent%7Da%3Aactive%2Ca%3Ahover%7Boutline%3A0%7Dabbr%5Btitle%5D%7Bborder%2Dbottom%3A1px%20dotted%7Db%2Cstrong%7Bfont%2Dweight%3A700%7Ddfn%7Bfont%2Dstyle%3Aitalic%7Dh1%7Bmargin%3A%2E67em%200%3Bfont%2Dsize%3A2em%7Dmark%7Bcolor%3A%23000%3Bbackground%3A%23ff0%7Dsmall%7Bfont%2Dsize%3A80%25%7Dsub%2Csup%7Bposition%3Arelative%3Bfont%2Dsize%3A75%25%3Bline%2Dheight%3A0%3Bvertical%2Dalign%3Abaseline%7Dsup%7Btop%3A%2D%2E5em%7Dsub%7Bbottom%3A%2D%2E25em%7Dimg%7Bborder%3A0%7Dsvg%3Anot%28%3Aroot%29%7Boverflow%3Ahidden%7Dfigure%7Bmargin%3A1em%2040px%7Dhr%7Bheight%3A0%3B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%7Dpre%7Boverflow%3Aauto%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%2Cmonospace%3Bfont%2Dsize%3A1em%7Dbutton%2Cinput%2Coptgroup%2Cselect%2Ctextarea%7Bmargin%3A0%3Bfont%3Ainherit%3Bcolor%3Ainherit%7Dbutton%7Boverflow%3Avisible%7Dbutton%2Cselect%7Btext%2Dtransform%3Anone%7Dbutton%2Chtml%20input%5Btype%3Dbutton%5D%2Cinput%5Btype%3Dreset%5D%2Cinput%5Btype%3Dsubmit%5D%7B%2Dwebkit%2Dappearance%3Abutton%3Bcursor%3Apointer%7Dbutton%5Bdisabled%5D%2Chtml%20input%5Bdisabled%5D%7Bcursor%3Adefault%7Dbutton%3A%3A%2Dmoz%2Dfocus%2Dinner%2Cinput%3A%3A%2Dmoz%2Dfocus%2Dinner%7Bpadding%3A0%3Bborder%3A0%7Dinput%7Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%3Bpadding%3A0%7Dinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Dinner%2Dspin%2Dbutton%2Cinput%5Btype%3Dnumber%5D%3A%3A%2Dwebkit%2Douter%2Dspin%2Dbutton%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Acontent%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Acontent%2Dbox%3Bbox%2Dsizing%3Acontent%2Dbox%3B%2Dwebkit%2Dappearance%3Atextfield%7Dinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Dcancel%2Dbutton%2Cinput%5Btype%3Dsearch%5D%3A%3A%2Dwebkit%2Dsearch%2Ddecoration%7B%2Dwebkit%2Dappearance%3Anone%7Dfieldset%7Bpadding%3A%2E35em%20%2E625em%20%2E75em%3Bmargin%3A0%202px%3Bborder%3A1px%20solid%20silver%7Dlegend%7Bpadding%3A0%3Bborder%3A0%7Dtextarea%7Boverflow%3Aauto%7Doptgroup%7Bfont%2Dweight%3A700%7Dtable%7Bborder%2Dspacing%3A0%3Bborder%2Dcollapse%3Acollapse%7Dtd%2Cth%7Bpadding%3A0%7D%40media%20print%7B%2A%2C%3Aafter%2C%3Abefore%7Bcolor%3A%23000%21important%3Btext%2Dshadow%3Anone%21important%3Bbackground%3A0%200%21important%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%21important%3Bbox%2Dshadow%3Anone%21important%7Da%2Ca%3Avisited%7Btext%2Ddecoration%3Aunderline%7Da%5Bhref%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28href%29%20%22%29%22%7Dabbr%5Btitle%5D%3Aafter%7Bcontent%3A%22%20%28%22%20attr%28title%29%20%22%29%22%7Da%5Bhref%5E%3D%22javascript%3A%22%5D%3Aafter%2Ca%5Bhref%5E%3D%22%23%22%5D%3Aafter%7Bcontent%3A%22%22%7Dblockquote%2Cpre%7Bborder%3A1px%20solid%20%23999%3Bpage%2Dbreak%2Dinside%3Aavoid%7Dthead%7Bdisplay%3Atable%2Dheader%2Dgroup%7Dimg%2Ctr%7Bpage%2Dbreak%2Dinside%3Aavoid%7Dimg%7Bmax%2Dwidth%3A100%25%21important%7Dh2%2Ch3%2Cp%7Borphans%3A3%3Bwidows%3A3%7Dh2%2Ch3%7Bpage%2Dbreak%2Dafter%3Aavoid%7D%2Enavbar%7Bdisplay%3Anone%7D%2Ebtn%3E%2Ecaret%2C%2Edropup%3E%2Ebtn%3E%2Ecaret%7Bborder%2Dtop%2Dcolor%3A%23000%21important%7D%2Elabel%7Bborder%3A1px%20solid%20%23000%7D%2Etable%7Bborder%2Dcollapse%3Acollapse%21important%7D%2Etable%20td%2C%2Etable%20th%7Bbackground%2Dcolor%3A%23fff%21important%7D%2Etable%2Dbordered%20td%2C%2Etable%2Dbordered%20th%7Bborder%3A1px%20solid%20%23ddd%21important%7D%7D%40font%2Dface%7Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%3Bsrc%3Aurl%28data%3Aapplication%2Fvnd%2Ems%2Dfontobject%3Bbase64%2Cn04AAEFNAAACAAIABAAAAAAABQAAAAAAAAABAJABAAAEAExQAAAAAAAAAAIAAAAAAAAAAAEAAAAAAAAAJxJ%2FLAAAAAAAAAAAAAAAAAAAAAAAACgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAAAADgBSAGUAZwB1AGwAYQByAAAAeABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA5ADsAUABTACAAMAAwADEALgAwADAAOQA7AGgAbwB0AGMAbwBuAHYAIAAxAC4AMAAuADcAMAA7AG0AYQBrAGUAbwB0AGYALgBsAGkAYgAyAC4ANQAuADUAOAAzADIAOQAAADgARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzACAAUgBlAGcAdQBsAGEAcgAAAAAAQlNHUAAAAAAAAAAAAAAAAAAAAAADAKncAE0TAE0ZAEbuFM3pjM%2FSEdmjKHUbyow8ATBE40IvWA3vTu8LiABDQ%2BpexwUMcm1SMnNryctQSiI1K5ZnbOlXKmnVV5YvRe6RnNMFNCOs1KNVpn6yZhCJkRtVRNzEufeIq7HgSrcx4S8h%2Fv4vnrrKc6oCNxmSk2uKlZQHBii6iKFoH0746ThvkO1kJHlxjrkxs%2BLWORaDQBEtiYJIR5IB9Bi1UyL4Rmr0BNigNkMzlKQmnofBHviqVzUxwdMb3NdCn69hy%2BpRYVKGVS%2F1tnsqv4LL7wCCPZZAZPT4aCShHjHJVNuXbmMrY5LeQaGnvAkXlVrJgKRAUdFjrWEah9XebPeQMj7KS7DIBAFt8ycgC5PLGUOHSE3ErGZCiViNLL5ZARfywnCoZaKQCu6NuFX42AEeKtKUGnr%2FCm2Cy8tpFhBPMW5Fxi4Qm4TkDWh4IWFDClhU2hRWosUWqcKLlgyXB%2BlSHaWaHiWlBAR8SeSgSPCQxdVQgzUixWKSTrIQEbU94viDctkvX%2BVSjJuUmV8L4CXShI11esnp0pjWNZIyxKHS4wVQ2ime1P4RnhvGw0aDN1OLAXGERsB7buFpFGGBAre4QEQR0HOIO5oYH305G%2BKspT%2FFupEGGafCCwxSe6ZUa%2B073rXHnNdVXE6eWvibUS27XtRzkH838mYLMBmYysZTM0EM3A1fbpCBYFccN1B%2FEnCYu%2FTgCGmr7bMh8GfYL%2BBfcLvB0gRagC09w9elfldaIy%2FhNCBLRgBgtCC7jAF63wLSMAfbfAlEggYU0bUA7ACCJmTDpEmJtI78w4%2FBO7dN7JR7J7ZvbYaUbaILSQsRBiF3HGk5fEg6p9unwLvn98r%2BvnsV%2B372uf1xBLq4qU%2F45fTuqaAP%2BpssmCCCTF0mhEow8ZXZOS8D7Q85JsxZ%2BAzok7B7O%2Ff6J8AzYBySZQB%2FQHYUSA%2BEeQhEWiS6AIQzgcsDiER4MjgMBAWDV4AgQ3g1eBgIdweCQmCjJEMkJ%2BPKRWyFHHmg1Wi%2F6xzUgA0LREoKJChwnQa9B%2B5RQZRB3IlBlkAnxyQNaANwHMowzlYSMCBgnbpzvqpl0iTJNCQidDI9ZrSYNIRBhHtUa5YHMHxyGEik9hDE0AKj72AbTCaxtHPUaKZdAZSnQTyjGqGLsmBStCejApUhg4uBMU6mATujEl%2BKdDPbI6Ag4vLr%2BhjY6lbjBeoLKnZl0UZgRX8gTySOeynZVz1wOq7e1hFGYIq%2BMhrGxDLak0PrwYzSXtcuyhXEhwOYofiW%2BEcI%2Fjw8P6IY6ed%2BetAbuqKp5QIapT77LnAe505lMuqL79a0ut4rWexzFttsOsLDy7zvtQzcq3U1qabe7tB0wHWVXji%2BzDbo8x8HyIRUbXnwUcklFv51fvTymiV%2BMXLSmGH9d9%2BaXpD5X6lao41anWGig7IwIdnoBY2ht%2FpO9mClLo4NdXHAsefqWUKlXJkbqPOFhMoR4aiA1BXqhRNbB2Xwi%2B7u%2FjpAoOpKJ0UX24EsrzMfHXViakCNcKjBxuQX8BO0ZqjJ3xXzf%2B61t2VXOSgJ8xu65QKgtN6FibPmPYsXbJRHHqbgATcSZxBqGiDiU4NNNsYBsKD0MIP%2FOfKnlk%2FLkaid%2FO2NbKeuQrwOB2Gq3YHyr6ALgzym5wIBnsdC1ZkoBFZSQXChZvlesPqvK2c5oHHT3Q65jYpNxnQcGF0EHbvYqoFw60WNlXIHQF2HQB7zD6lWjZ9rVqUKBXUT6hrkZOle0RFYII0V5ZYGl1JAP0Ud1fZZMvSomBzJ710j4Me8mjQDwEre5Uv2wQfk1ifDwb5ksuJQQ3xt423lbuQjvoIQByQrNDh1JxGFkOdlJvu%2FgFtuW0wR4cgd%2BZKesSV7QkNE2kw6AV4hoIuC02LGmTomyf8PiO6CZzOTLTPQ%2BHW06H%2Btx%2BbQ8LmDYg1pTFrp2oJXgkZTyeRJZM0C8aE2LpFrNVDuhARsN543%2FFV6klQ6Tv1OoZGXLv0igKrl%2FCmJxRmX7JJbJ998VSIPQRyDBICzl4JJlYHbdql30NvYcOuZ7a10uWRrgoieOdgIm4rlq6vNOQBuqESLbXG5lzdJGHw2m0sDYmODXbYGTfSTGRKpssTO95fothJCjUGQgEL4yKoGAF%2F0SrpUDNn8CBgBcSDQByAeNkCXp4S4Ro2Xh4OeaGRgR66PVOsU8bc6TR5%2FxTcn4IVMLOkXSWiXxkZQCbvKfmoAvQaKjO3EDKwkwqHChCDEM5loQRPd5ACBki1TjF772oaQhQbQ5C0lcWXPFOzrfsDGUXGrpxasbG4iab6eByaQkQfm0VFlP0ZsDkvvqCL6QXMUwCjdMx1ZOyKhTJ7a1GWAdOUcJ8RSejxNVyGs31OKMyRyBVoZFjqIkmKlLQ5eHMeEL4MkUf23cQ%2F1SgRCJ1dk4UdBT7OoyuNgLs0oCd8RnrEIb6QdMxT2QjD4zMrJkfgx5aDMcA4orsTtKCqWb%2FVeyceqa5OGSmB28YwH4rFbkQaLoUN8OQQYnD3w2eXpI4ScQfbCUZiJ4yMOIKLyyTc7BQ4uXUw6Ee6%2FxM%2B4Y67ngNBknxIPwuppgIhFcwJyr6EIj%2BLzNj%2FmfR2vhhRlx0BILZoAYruF0caWQ7YxO66UmeguDREAFHYuC7HJviRgVO6ruJH59h%2FC%2FPkgSle8xNzZJULLWq9JMDTE2fjGE146a1Us6PZDGYle6ldWRqn%2FpdpgHKNGrGIdkRK%2BKPETT9nKT6kLyDI8xd9A1FgWmXWRAIHwZ37WyZHOVyCadJEmMVz0MadMjDrPho%2BEIochkVC2xgGiwwsQ6DMv2P7UXqT4x7CdcYGId2BJQQa85EQKmCmwcRejQ9Bm4oATENFPkxPXILHpMPUyWTI5rjNOsIlmEeMbcOCEqInpXACYQ9DDxmFo9vcmsDblcMtg4tqBerNngkIKaFJmrQAPnq1dEzsMXcwjcHdfdCibcAxxA%2Bq%2Fj9m3LM%2FO7WJka4tSidVCjsvo2lQ%2F2ewyoYyXwAYyr2PlRoR5MpgVmSUIrM3PQxXPbgjBOaDQFIyFMJvx3Pc5RSYj12ySVF9fwFPQu2e2KWVoL9q3Ayv3IzpGHUdvdPdrNUdicjsTQ2ISy7QU3DrEytIjvbzJnAkmANXjAFERA0MUoPF3%2F5KFmW14bBNOhwircYgMqoDpUMcDtCmBE82QM2YtdjVLB4kBuKho%2FbcwQdeboqfQartuU3CsCf%2BcXkgYAqp%2F0Ee3RorAZt0AvvOCSI4JICIlGlsV0bsSid%2FNIEALAAzb6HAgyWHBps6xAOwkJIGcB82CxRQq4sJf3FzA70A%2BTRqcqjEMETCoez3mkPcpnoALs0ugJY8kQwrC%2BJE5ik3w9rzrvDRjAQnqgEVvdGrNwlanR0SOKWzxOJOvLJhcd8Cl4AshACUkv9czdMkJCVQSQhp6kp7StAlpVRpK0t0SW6LHeBJnE2QchB5Ccu8kxRghZXGIgZIiSj7gEKMJDClcnX6hgoqJMwiQDigIXg3ioFLCgDgjPtYHYpsF5EiA4kcnN18MZtOrY866dEQAb0FB34OGKHGZQjwW%2FWDHA60cYFaI%2FPjpzquUqdaYGcIq%2BmLez3WLFFCtNBN2QJcrlcoELgiPku5R5dSlJFaCEqEZle1AQzAKC%2B1SotMcBNyQUFuRHRF6OlimSBgjZeTBCwLyc6A%2BP%2FoFRchXTz5ADknYJHxzrJ5pGuIKRQISU6WyKTBBjD8WozmVYWIsto1AS5rxzKlvJu4E%2FvwOiKxRtCWsDM%2BeTHUrmwrCK5BIfMzGkD%2B0Fk5LzBs0jMYXktNDblB06LMNJ09U8pzSLmo14MS0OMjcdrZ31pyQqxJJpRImlSvfYAK8inkYU52QY2FPEVsjoWewpwhRp5yAuNpkqhdb7ku9Seefl2D0B8SMTFD90xi4CSOwwZy9IKkpMtI3FmFUg3%2FkFutpQGNc3pCR7gvC4sgwbupDu3DyEN%2BW6YGLNM21jpB49irxy9BSlHrVDlnihGKHwPrbVFtc%2Bh1rVQKZduxIyojccZIIcOCmhEnC7UkY68WXKQgLi2JCDQkQWJRQuk60hZp0D3rtCTINSeY9Ej2kIKYfGxwOs4j9qMM7fYZiipzgcf7TamnehqdhsiMiCawXnz4xAbyCkLAx5EGbo3Ax1u3dUIKnTxIaxwQTHehPl3V491H0%2BbC5zgpGz7Io%2BmjdhKlPJ01EeMpM7UsRJMi1nGjmJg35i6bQBAAxjO%2FENJubU2mg3ONySEoWklCwdABETcs7ck3jgiuU9pcKKpbgn%2B3YlzV1FzIkB6pmEDOSSyDfPPlQskznctFji0kpgZjW5RZe6x9kYT4KJcXg0bNiCyif%2BpZACCyRMmYsfiKmN9tSO65F0R2OO6ytlEhY5Sj6uRKfFxw0ijJaAx%2Fk3QgnAFSq27%2F2i4GEBA%2BUvTJKK%2F9eISNvG46Em5RZfjTYLdeD8kdXHyrwId%2FDQZUaMCY4gGbke2C8vfjgV%2FY9kkRQOJIn%2FxM9INZSpiBnqX0Q9GlQPpPKAyO5y%2BW5NMPSRdBCUlmuxl40ZfMCnf2Cp044uI9WLFtCi4YVxKjuRCOBWIb4XbIsGdbo4qtMQnNOQz4XDSui7W%2FN6l54qOynCqD3DpWQ%2BmpD7C40D8BZEWGJX3tlAaZBMj1yjvDYKwCJBa201u6nBKE5UE%2B7QSEhCwrXfbRZylAaAkplhBWX50dumrElePyNMRYUrC99UmcSSNgImhFhDI4BXjMtiqkgizUGCrZ8iwFxU6fQ8GEHCFdLewwxYWxgScAYMdMLmcZR6b7rZl95eQVDGVoUKcRMM1ixXQtXNkBETZkVVPg8LoSrdetHzkuM7DjZRHP02tCxA1fmkXKF3VzfN1pc1cv%2F8lbTIkkYpqKM9VOhp65ktYk%2BQ46myFWBapDfyWUCnsnI00QTBQmuFjMZTcd0V2NQ768Fhpby04k2IzNR1wKabuGJqYWwSly6ocMFGTeeI%2BejsWDYgEvr66QgqdcIbFYDNgsm0x9UHY6SCd5%2B7tpsLpKdvhahIDyYmEJQCqMqtCF6UlrE5GXRmbu%2Bvtm3BFSxI6ND6UxIE7GsGMgWqghXxSnaRJuGFveTcK5ZVSPJyjUxe1dKgI6kNF7EZhIZs8y8FVqwEfbM0Xk2ltORVDKZZM40SD3qQoQe0orJEKwPfZwm3YPqwixhUMOndis6MhbmfvLBKjC8sKKIZKbJk8L11oNkCQzCgvjhyyEiQSuJcgCQSG4Mocfgc0Hkwcjal1UNgP0CBPikYqBIk9tONv4kLtBswH07vUCjEaHiFGlLf8MgXKzSgjp2HolRRccAOh0ILHz9qlGgIFkwAnzHJRjWFhlA7ROwINyB5HFj59PRZHFor6voq7l23EPNRwdWhgawqbivLSjRA4htEYUFkjESu67icTg5S0aW1sOkCiIysfJ9UnIWevOOLGpepcBxy1wEhd2WI3AZg7sr9WBmHWyasxMcvY%2FiOmsLtHSWNUWEGk9hScMPShasUA1AcHOtRZlqMeQ0OzYS9vQvYUjOLrzP07BUAFikcJNMi7gIxEw4pL1G54TcmmmoAQ5s7TGWErJZ2Io4yQ0ljRYhL8H5e62oDtLF8aDpnIvZ5R3GWJyAugdiiJW9hQAVTsnCBHhwu7rkBlBX6r3b7ejEY0k5GGeyKv66v%2B6dg7mcJTrWHbtMywbedYqCQ0FPwoytmSWsL8WTtChZCKKzEF7vP6De4x2BJkkniMgSdWhbeBSLtJZR9CTHetK1xb34AYIJ37OegYIoPVbXgJ%2FqDQK%2BbfCtxQRVKQu77WzOoM6SGL7MaZwCGJVk46aImai9fmam%2BWpHG%2B0BtQPWUgZ7RIAlPq6lkECUhZQ2gqWkMYKcYMYaIc4gYCDFHYa2d1nzp3%2BJ1eCBay8IYZ0wQRKGAqvCuZ%2FUgbQPyllosq%2BXtfKIZOzmeJqRazpmmoP%2F76YfkjzV2NlXTDSBYB04SVlNQsFTbGPk1t%2FI4Jktu0XSgifO2ozFOiwd%2F0SssJDn0dn4xqk4GDTTKX73%2FwQyBLdqgJ%2BWx6AQaba3BA9CKEzjtQYIfAsiYamapq80LAamYjinlKXUkxdpIDk0puXUEYzSalfRibAeDAKpNiqQ0FTwoxuGYzRnisyTotdVTclis1LHRQCy%2FqqL8oUaQzWRxilq5Mi0IJGtMY02cGLD69vGjkj3p6pGePKI8bkBv5evq8SjjyU04vJR2cQXQwSJyoinDsUJHCQ50jrFTT7yRdbdYQMB3MYCb6uBzJ9ewhXYPAIZSXfeEQBZZ3GPN3Nbhh%2FwkvAJLXnQMdi5NYYZ5GHE400GS5rXkOZSQsdZgIbzRnF9ueLnsfQ47wHAsirITnTlkCcuWWIUhJSbpM3wWhXNHvt2xUsKKMpdBSbJnBMcihkoDqAd1Zml%2FR4yrzow1Q2A5G%2Bkzo%2FRhRxQS2lCSDRV8LlYLBOOoo1bF4jwJAwKMK1tWLHlu9i0j4Ig8qVm6wE1DxXwAwQwsaBWUg2pOOol2dHxyt6npwJEdLDDVYyRc2D0HbcbLUJQj8gPevQBUBOUHXPrsAPBERICpnYESeu2OHotpXQxRGlCCtLdIsu23MhZVEoJg8Qumj%2FUMMc34IBqTKLDTp76WzL%2FdMjCxK7MjhiGjeYAC%2Fkj%2FjY%2FRde7hpSM1xChrog6yZ7OWTuD56xBJnGFE%2BpT2ElSyCnJcwVzCjkqeNLfMEJqKW0G7OFIp0G%2B9mh50I9o8k1tpCY0xYqFNIALgIfc2me4n1bmJnRZ89oepgLPT0NTMLNZsvSCZAc3TXaNB07vail36%2FdBySis4m9%2FDR8izaLJW6bWCkVgm5T%2Bius3ZXq4xI%2BGnbveLbdRwF2mNtsrE0JjYc1AXknCOrLSu7Te%2Fr4dPYMCl5qtiHNTn%2BTPbh1jCBHH%2BdMJNhwNgs3nT%2BOhQoQ0vYif56BMG6WowAcHR3DjQolxLzyVekHj00PBAaW7IIAF1EF%2BuRIWyXjQMAs2chdpaKPNaB%2BkSezYt0%2BCA04sOg5vx8Fr7Ofa9sUv87h7SLAUFSzbetCCZ9pmyLt6l6%2FTzoA1%2FZBG9bIUVHLAbi%2FkdBFgYGyGwRQGBpkqCEg2ah9UD6EedEcEL3j4y0BQQCiExEnocA3SZboh%2Bepgd3YsOkHskZwPuQ5OoyA0fTA5AXrHcUOQF%2BzkJHIA7PwCDk1gGVmGUZSSoPhNf%2BTklauz98QofOlCIQ%2FtCD4dosHYPqtPCXB3agggQQIqQJsSkB%2Bqn0rkQ1toJjON%2FOtCIB9RYv3PqRA4C4U68ZMlZn6BdgEvi2ziU%2BTQ6NIw3ej%2BAtDwMGEZk7e2IjxUWKdAxyaw9OCwSmeADTPPleyk6UhGDNXQb%2B%2BW6Uk4q6F7%2Frg6WVTo82IoCxSIsFDrav4EPHphD3u4hR53WKVvYZUwNCCeM4PMBWzK%2BEfIthZOkuAwPo5C5jgoZgn6dUdvx5rIDmd58cXXdKNfw3l%2BwM2UjgrDJeQHhbD7HW2QDoZMCujgIUkk5Fg8VCsdyjOtnGRx8wgKRPZN5dR0zPUyfGZFVihbFRniXZFOZGKPnEQzU3AnD1KfR6weHW2XS6KbPJxUkOTZsAB9vTVp3Le1F8q5l%2BDMcLiIq78jxAImD2pGFw0VHfRatScGlK6SMu8leTmhUSMy8Uhdd6xBiH3Gdman4tjQGLboJfqz6fL2WKHTmrfsKZRYX6BTDjDldKMosaSTLdQS7oDisJNqAUhw1PfTlnacCO8vl8706Km1FROgLDmudzxg%2BEWTiArtHgLsRrAXYWdB0NmToNCJdKm0KWycZQqb%2BMw76Qy29iQ5up%2FX7oyw8QZ75kP5F6iJAJz6KCmqxz8fEa%2FxnsMYcIO%2FvEkGRuMckhr4rIeLrKaXnmIzlNLxbFspOphkcnJdnz%2FChp%2FVlpj2P7jJQmQRwGnltkTV5dbF9fE3%2FfxoSqTROgq9wFUlbuYzYcasE0ouzBo%2BdDCDzxKAfhbAZYxQiHrLzV2iVexnDX%2FQnT1fsT%2Fxuhu1ui5qIytgbGmRoQkeQooO8eJNNZsf0iALur8QxZFH0nCMnjerYQqG1pIfjyVZWxhVRznmmfLG00BcBWJE6hzQWRyFknuJnXuk8A5FRDCulwrWASSNoBtR%2BCtGdkPwYN2o7DOw%2FVGlCZPusRBFXODQdUM5zeHDIVuAJBLqbO%2Ff9Qua%2BpDqEPk230Sob9lEZ8BHiCorjVghuI0lI4JDgHGRDD%2FprQ84B1pVGkIpVUAHCG%2Biz3Bn3qm2AVrYcYWhock4jso5%2BJ7HfHVj4WMIQdGctq3psBCVVzupQOEioBGA2Bk%2BUILT7%2BVoX5mdxxA5fS42gISQVi%2FHTzrgMxu0fY6hE1ocUwwbsbWcezrY2n6S8%2F6cxXkOH4prpmPuFoikTzY7T85C4T2XYlbxLglSv2uLCgFv8Quk%2FwdesUdWPeHYIH0R729JIisN9Apdd4eB10aqwXrPt%2BSu9mA8k8n1sjMwnfsfF2j3jMUzXepSHmZ%2FBfqXvzgUNQQWOXO8YEuFBh4QTYCkOAPxywpYu1VxiDyJmKVcmJPGWk%2Fgc3Pov02StyYDahwmzw3E1gYC9wkupyWfDqDSUMpCTH5e5N8B%2F%2FlHiMuIkTNw4USHrJU67bjXGqNav6PBuQSoqTxc8avHoGmvqNtXzIaoyMIQIiiUHIM64cXieouplhNYln7qgc4wBVAYR104kO%2BCvKqsg4yIUlFNThVUAKZxZt1XA34h3TCUUiXVkZ0w8Hh2R0Z5L0b4LZvPd%2Fp1gi%2F07h8qfwHrByuSxglc9cI4QIg2oqvC%2Fqm0i7tjPLTgDhoWTAKDO2ONW5oe%2B%2FeKB9vZB8K6C25yCZ9RFVMnb6NRdRjyVK57CHHSkJBfnM2%2Fj4ODUwRkqrtBBCrDsDpt8jhZdXoy%2F1BCqw3sSGhgGGy0a5Jw6BP%2FTExoCmNFYjZl248A0osgPyGEmRA%2BfAsqPVaNAfytu0vuQJ7rk3J4kTDTR2AlCHJ5cls26opZM4w3jMULh2YXKpcqGBtuleAlOZnaZGbD6DHzMd6i2oFeJ8z9XYmalg1Szd%2FocZDc1C7Y6vcALJz2lYnTXiWEr2wawtoR4g3jvWUU2Ngjd1cewtFzEvM1NiHZPeLlIXFbBPawxNgMwwAlyNSuGF3zizVeOoC9bag1qRAQKQE%2FEZBWC2J8mnXAN2aTBboZ7HewnObE8CwROudZHmUM5oZ%2FUgd%2FJZQK8lvAm43uDRAbyW8gZ%2BZGq0EVerVGUKUSm%2FIdn8AQHdR4m7bue88WBwft9mSCeMOt1ncBwziOmJYI2ZR7ewNMPiCugmSsE4EyQ%2BQATJG6qORMGd4snEzc6B4shPIo4G1T7PgSm8PY5eUkPdF8JZ0VBtadbHXoJgnEhZQaODPj2gpODKJY5Yp4DOsLBFxWbvXN755KWylJm%2BoOd4zEL9Hpubuy2gyyfxh8oEfFutnYWdfB8PdESLWYvSqbElP9qo3u6KTmkhoacDauMNNjj0oy40DFV7Ql0aZj77xfGl7TJNHnIwgqOkenruYYNo6h724%2BzUQ7%2BvkCpZB%2BpGA562hYQiDxHVWOq0oDQl%2FQsoiY%2BcuI7iWq%2FZIBtHcXJ7kks%2Bh2fCNUPA82BzjnqktNts%2BRLdk1VSu%2BtqEn7QZCCsvEqk6FkfiOYkrsw092J8jsfIuEKypNjLxrKA9kiA19mxBD2suxQKCzwXGws7kEJvlhUiV9tArLIdZW0IORcxEzdzKmjtFhsjKy%2F44XYXdI5noQoRcvjZ1RMPACRqYg2V1%2BOwOepcOknRLLFdYgTkT5UApt%2FJhLM3jeFYprZV%2BZow2g8fP%2BU68hkKFWJj2yBbKqsrp25xkZX1DAjUw52IMYWaOhab8Kp05VrdNftqwRrymWF4OQSjbdfzmRZirK8FMJELEgER2PHjEAN9pGfLhCUiTJFbd5LBkOBMaxLr%2FA1SY9dXFz4RjzoU9ExfJCmx%2FI9FKEGT3n2cmzl2X42L3Jh%2BAbQq6sA%2BSs1kitoa4TAYgKHaoybHUDJ51oETdeI%2F9ThSmjWGkyLi5QAGWhL0BG1UsTyRGRJOldKBrYJeB8ljLJHfATWTEQBXBDnQexOHTB%2BUn44zExFE4vLytcu5NwpWrUxO%2F0ZICUGM7hGABXym0V6ZvDST0E370St9MIWQOTWngeoQHUTdCJUP04spMBMS8LSker9cReVQkULFDIZDFPrhTzBl6sed9wcZQTbL%2BBDqMyaN3RJPh%2Fanbx%2BIv%2BqgQdAa3M9Z5JmvYlh4qop%2BHo1F1W5gbOE9YKLgAnWytXElU4G8GtW47lhgFE6gaSs%2Bgs37sFvi0PPVvA5dnCBgILTwoKd%2F%2BDoL9F6inlM7H4rOTzD79KJgKlZO%2FZgt22UsKhrAaXU5ZcLrAglTVKJEmNJvORGN1vqrcfSMizfpsgbIe9zno%2BgBoKVXgIL%2FVI8dB1O5o%2FR3Suez%2FgD7M781ShjKpIIORM%2FnxG%2BjjhhgPwsn2IoXsPGPqYHXA63zJ07M2GPEykQwJBYLK808qYxuIew4frk52nhCsnCYmXiR6CuapvE1IwRB4%2FQftDbEn%2BAucIr1oxrLabRj9q4ae0%2BfXkHnteAJwXRbVkR0mctVSwEbqhJiMSZUp9DNbEDMmjX22m3ABpkrPQQTP3S1sib5pD2VRKRd%2BeNAjLYyT0hGrdjWJZy24OYXRoWQAIhGBZRxuBFMjjZQhpgrWo8SiFYbojcHO8V5DyscJpLTHyx9Fimassyo5U6WNtquUMYgccaHY5amgR3PQzq3ToNM5ABnoB9kuxsebqmYZm0R9qxJbFXCQ1UPyFIbxoUraTJFDpCk0Wk9GaYJKz%2F6oHwEP0Q14lMtlddQsOAU9zlYdMVHiT7RQP3XCmWYDcHCGbVRHGnHuwzScA0BaSBOGkz3lM8CArjrBsyEoV6Ys4qgDK3ykQQPZ3hCRGNXQTNNXbEb6tDiTDLKOyMzRhCFT%2BmAUmiYbV3YQVqFVp9dorv%2BTsLeCykS2b5yyu8AV7IS9cxcL8z4Kfwp%2BxJyYLv1OsxQCZwTB4a8BZ%2F5EdxTBJthApqyfd9u3ifr%2FWILTqq5VqgwMT9SOxbSGWLQJUUWCVi4k9tho9nEsbUh7U6NUsLmkYFXOhZ0kmamaJLRNJzSj%2Fqn4Mso6zb6iLLBXoaZ6AqeWCjHQm2lztnejYYM2eubnpBdKVLORZhudH3JF1waBJKA9%2BW8EhMj3Kzf0L4vi4k6RoHh3Z5YgmSZmk6ns4fjScjAoL8GoOECgqgYEBYUGFVO4FUv4%2FYtowhEmTs0vrvlD%2FCrisnoBNDAcUi%2FteY7OctFlmARQzjOItrrlKuPO6E2Ox93L4O%2F4DcgV%2FdZ7qR3VBwVQxP1GCieA4RIpweYJ5FoYrHxqRBdJjnqbsikA2Ictbb8vE1GYIo9dacK0REgDX4smy6GAkxlH1yCGGsk%2BtgiDhNKuKu3yNrMdxafmKTF632F8Vx4BNK57GvlFisrkjN9WDAtjsWA0ENT2e2nETUb%2Fn7qwhvGnrHuf5bX6Vh%2Fn3xffU3PeHdR%2BFA92i6ufT3AlyAREoNDh6chiMWTvjKjHDeRhOa9YkOQRq1vQXEMppAQVwHCuIcV2g5rBn6GmZZpTR7vnSD6ZmhdSl176gqKTXu5E%2BYbfL0adwNtHP7dT7t7b46DVZIkzaRJOM%2BS6KcrzYVg%2BT3wSRFRQashjfU18NutrKa%2F7PXbtuJvpIjbgPeqd%2BpjmRw6YKpnANFSQcpzTZgpSNJ6J7uiagAbir%2F8tNXJ%2FOsOnRh6iuIexxrmkIneAgz8QoLmiaJ8sLQrELVK2yn3wOHp57BAZJhDZjTBzyoRAuuZ4eoxHruY1pSb7qq79cIeAdOwin4GdgMeIMHeG%2BFZWYaiUQQyC5b50zKjYw97dFjAeY2I4Bnl105Iku1y0lMA1ZHolLx19uZnRdILcXKlZGQx%2FGdEqSsMRU1BIrFqRcV1qQOOHyxOLXEGcbRtAEsuAC2V4K3p5mFJ22IDWaEkk9ttf5Izb2LkD1MnrSwztXmmD%2FQi%2FEmVEFBfiKGmftsPwVaIoZanlKndMZsIBOskFYpDOq3QUs9aSbAAtL5Dbokus2G4%2FasthNMK5UQKCOhU97oaOYNGsTah%2BjfCKsZnTRn5TbhFX8ghg8CBYt%2FBjeYYYUrtUZ5jVij%2Fop7V5SsbA4mYTOwZ46hqdpbB6Qvq3AS2HHNkC15pTDIcDNGsMPXaBidXYPHc6PJAkRh29Vx8KcgX46LoUQBhRM%2B3SW6Opll%2FwgxxsPgKJKzr5QCmwkUxNbeg6Wj34SUnEzOemSuvS2OetRCO8Tyy%2BQbSKVJcqkia%2BGvDefFwMOmgnD7h81TUtMn%2BmRpyJJ349HhAnoWFTejhpYTL9G8N2nVg1qkXBeoS9Nw2fB27t7trm7d%2FQK7Cr4uoCeOQ7%2F8JfKT77KiDzLImESHw%2F0wf73QeHu74hxv7uihi4fTX%2BXEwAyQG3264dwv17aJ5N335Vt9sdrAXhPOAv8JFvzqyYXwfx8WYJaef1gMl98JRFyl5Mv5Uo%2FoVH5ww5OzLFsiTPDns7fS6EURSSWd%2F92BxMYQ8sBaH%2Bj%2BwthQPdVgDGpTfi%2BJQIWMD8xKqULliRH01rTeyF8x8q%2FGBEEEBrAJMPf25UQwi0b8tmqRXY7kIvNkzrkvRWLnxoGYEJsz8u4oOyMp8cHyaybb1HdMCaLApUE%2B%2F7xLIZGP6H9xuSEXp1zLIdjk5nBaMuV%2FyTDRRP8Y2ww5RO6d2D94o%2B6ucWIqUAvgHIHXhZsmDhjVLczmZ3ca0Cb3PpKwt2UtHVQ0BgFJsqqTsnzZPlKahRUkEu4qmkJt%2Bkqdae76ViWe3STan69yaF9%2BfESD2lcQshLHWVu4ovItXxO69bqC5p1nZLvI8NdQB9s9UNaJGlQ5mG947ipdDA0eTIw%2FA1zEdjWquIsQXXGIVEH0thC5M%2BW9pZe7IhAVnPJkYCCXN5a32HjN6nsvokEqRS44tGIs7s2LVTvcrHAF%2BRVmI8L4HUYk4x%2B67AxSMJKqCg8zrGOgvK9kNMdDrNiUtSWuHFpC8%2Fp5qIQrEo%2FH%2B1l%2F0cAwQ2nKmpWxKcMIuHY44Y6DlkpO48tRuUGBWT0FyHwSKO72Ud%2BtJUfdaZ4CWNijzZtlRa8%2BCkmO%2FEwHYfPZFU%2FhzjFWH7vnzHRMo%2BaF9u8qHSAiEkA2HjoNQPEwHsDKOt6hOoK3Ce%2F%2B%2F9boMWDa44I6FrQhdgS7OnNaSzwxWKZMcyHi6LN4WC6sSj0qm2PSOGBTvDs%2FGWJS6SwEN%2FULwpb4LQo9fYjUfSXRwZkynUazlSpvX9e%2BG2zor8l%2BYaMxSEomDdLHGcD6YVQPegTaA74H8%2BV4WvJkFUrjMLGLlvSZQWvi8%2FQA7yzQ8GPno%2F%2F5SJHRP%2FOqKObPCo81s%2F%2B6WgLqykYpGAgQZhVDEBPXWgU%2FWzFZjKUhSFInufPRiMAUULC6T11yL45ZrRoB4DzOyJShKXaAJIBS9wzLYIoCEcJKQW8GVCx4fihqJ6mshBUXSw3wWVj3grrHQlGNGhIDNNzsxQ3M%2BGWn6ASobIWC%2BLbYOC6UpahVO13Zs2zOzZC8z7FmA05JhUGyBsF4tsG0drcggIFzgg%2Fkpf3%2BCnAXKiMgIE8Jk%2FMhpkc8DUJEUzDSnWlQFme3d0sHZDrg7LavtsEX3cHwjCYA17pMTfx8Ajw9hHscN67hyo%2BRJQ4458RmPywXykkVcW688oVUrQhahpPRvTWPnuI0B%2BSkQu7dCyvLRyFYlC1LG1gRCIvn3rwQeINzZQC2KXq31FaR9UmVV2QeGVqBHjmE%2BVMd3b1fhCynD0pQNhCG6%2FWCDbKPyE7NRQzL3BzQAJ0g09aUzcQA6mUp9iZFK6Sbp%2FYbHjo%2B%2B7%2FWj8S4YNa%2BZdqAw1hDrKWFXv9%2BzaXpf8ZTDSbiqsxnwN%2FCzK5tPkOr4tRh2kY3Bn9JtalbIOI4b3F7F1vPQMfoDcdxMS8CW9m%2FNCW%2FHILTUVWQIPiD0j1A6bo8vsv6P1hCESl2abrSJWDrq5sSzUpwoxaCU9FtJyYH4QFMxDBpkkBR6kn0LMPO%2B5EJ7Z6bCiRoPedRZ%2FP0SSdii7ZnPAtVwwHUidcdyspwncz5uq6vvm4IEDbJVLUFCn%2FLvIHfooUBTkFO130FC7CmmcrKdgDJcid9mvVzsDSibOoXtIf9k6ABle3PmIxejodc4aob0QKS432srrCMndbfD454q52V01G4q913mC5HOsTzWF4h2No1av1VbcUgWAqyoZl%2B11PoFYnNv2HwAODeNRkHj%2B8SF1fcvVBu6MrehHAZK1Gm69ICcTKizykHgGFx7QdowTVAsYEF2tVc0Z6wLryz2FI1sc5By2znJAAmINndoJiB4sfPdPrTC8RnkW7KRCwxC6YvXg5ahMlQuMpoCSXjOlBy0Kij%2BbsCYPbGp8BdCBiLmLSAkEQRaieWo1SYvZIKJGj9Ur%2FeWHjiB7SOVdqMAVmpBvfRiebsFjger7DC%2B8kRFGtNrTrnnGD2GAJb8rQCWkUPYHhwXsjNBSkE6lGWUj5QNhK0DMNM2l%2BkXRZ0KLZaGsFSIdQz%2FHXDxf3%2FTE30%2BDgBKWGWdxElyLccJfEpjsnszECNoDGZpdwdRgCixeg9L4EPhH%2BRptvRMVRaahu4cySjS3P5wxAUCPkmn%2BrhyASpmiTaiDeggaIxYBmtLZDDhiWIJaBgzfCsAGUF1Q1SFZYyXDt9skCaxJsxK2Ms65dmdp5WAZyxik%2FzbrTQk5KmgxCg%2Ff45L0jywebOWUYFJQAJia7XzCV0x89rpp%2Ff3AVWhSPyTanqmik2SkD8A3Ml4NhIGLAjBXtPShwKYfi2eXtrDuKLk4QlSyTw1ftXgwqA2jUuopDl%2B5tfUWZNwBpEPXghzbBggYCw%2Fdhy0ntds2yeHCDKkF%2FYxQjNIL%2FF%2F37jLPHCKBO9ibwYCmuxImIo0ijV2Wbg3kSN2psoe8IsABv3RNFaF9uMyCtCYtqcD%2BqNOhwMlfARQUdJ2tUX%2BMNJqOwIciWalZsmEjt07tfa8ma4cji9sqz%2BQ9hWfmMoKEbIHPOQORbhQRHIsrTYlnVTNvcq1imqmmPDdVDkJgRcTgB8Sb6epCQVmFZe%2BjGDiNJQLWnfx%2BdrTKYjm0G8yH0ZAGMWzEJhUEQ4Maimgf%2Fbkvo8PLVBsZl152y5S8%2BHRDfZIMCbYZ1WDp4yrdchOJw8k6R%2B%2F2pHmydK4NIK2PHdFPHtoLmHxRDwLFb7eB%2BM4zNZcB9NrAgjVyzLM7xyYSY13ykWfIEEd2n5%2FiYp3ZdrCf7fL%2Ben%2BsIJu2W7E30MrAgZBD1rAAbZHPgeAMtKCg3NpSpYQUDWJu9bT3V7tOKv%2BNRiJc8JAKqqgCA%2FPNRBR7ChpiEulyQApMK1AyqcWnpSOmYh6yLiWkGJ2mklCSPIqN7UypWj3dGi5MvsHQ87MrB4VFgypJaFriaHivwcHIpmyi5LhNqtem4q0n8awM19Qk8BOS0EsqGscuuydYsIGsbT5GHnERUiMpKJl4ON7qjB4fEqlGN%2FhCky89232UQCiaeWpDYCJINXjT6xl4Gc7DxRCtgV0i1ma4RgWLsNtnEBRQFqZggCLiuyEydmFd7WlogpkCw5G1x4ft2psm3KAREwVwr1Gzl6RT7FDAqpVal34ewVm3VH4qn5mjGj%2BbYL1NgfLNeXDwtmYSpwzbruDKpTjOdgiIHDVQSb5%2FzBgSMbHLkxWWgghIh9QTFSDILixVwg0Eg1puooBiHAt7DzwJ7m8i8%2Fi%2BjHvKf0QDnnHVkVTIqMvIQImOrzCJwhSR7qYB5gSwL6aWL9hERHCZc4G2%2BJrpgHNB8eCCmcIWIQ6rSdyPCyftXkDlErUkHafHRlkOIjxGbAktz75bnh50dU7YHk%2BMz7wwstg6RFZb%2BTZuSOx1qqP5C66c0mptQmzIC2dlpte7vZrauAMm%2F7RfBYkGtXWGiaWTtwvAQiq2oD4YixPLXE2khB2FRaNRDTk%2B9sZ6K74Ia9VntCpN4BhJGJMT4Z5c5FhSepRCRWmBXqx%2BwhVZC4me4saDs2iNqXMuCl6iAZflH8fscC1sTsy4PHeC%2BXYuqMBMUun5YezKbRKmEPwuK%2BCLzijPEQgfhahQswBBLfg%2FGBgBiI4QwAqzJkkyYAWtjzSg2ILgMAgqxYfwERRo3zruBL9WOryUArSD8sQOcD7fvIODJxKFS615KFPsb68USBEPPj1orNzFY2xoTtNBVTyzBhPbhFH0PI5AtlJBl2aSgNPYzxYLw7XTDBDinmVoENwiGzmngrMo8OmnRP0Z0i0Zrln9DDFcnmOoBZjABaQIbPOJYZGqX%2BRCMlDDbElcjaROLDoualmUIQ88Kekk3iM4OQrADcxi3rJguS4MOIBIgKgXrjd1WkbCdqxJk%2F4efRIFsavZA7KvvJQqp3Iid5Z0NFc5aiMRzGN3vrpBzaMy4JYde3wr96PjN90AYOIbyp6T4zj8LoE66OGcX1Ef4Z3KoWLAUF4BTg7ug%2FAbkG5UNQXAMkQezujSHeir2uTThgd3gpyzDrbnEdDRH2W7U6PeRvBX1ZFMP5RM%2BZu6UUZZD8hDPHldVWntTCNk7To8IeOW9yn2wx0gmurwqC60AOde4r3ETi5pVMSDK8wxhoGAoEX9NLWHIR33VbrbMveii2jAJlrxwytTHbWNu8Y4N8vCCyZjAX%2FpcsfwXbLze2%2BD%2Bu33OGBoJyAAL3jn3RuEcdp5If8O%2Ba4NKWvxOTyDltG0IWoHhwVGe7dKkCWFT%2B%2Btm%2BhaBCikRUUMrMhYKZJKYoVuv%2FbsJzO8DwfVIInQq3g3BYypiz8baogH3r3GwqCwFtZnz4xMjAVOYnyOi5HWbFA8n0qz1OjSpHWFzpQOpvkNETZBGpxN8ybhtqV%2FDMUxd9uFZmBfKXMCn%2FSqkWJyKPnT6lq%2B4zBZni6fYRByJn6OK%2BOgPBGRAJluwGSk4wxjOOzyce%2FPKODwRlsgrVkdcsEiYrqYdXo0Er2GXi2GQZd0tNJT6c9pK1EEJG1zgDJBoTVuCXGAU8BKTvCO%2FcEQ1Wjk3Zzuy90JX4m3O5IlxVFhYkSUwuQB2up7jhvkm%2BbddRQu5F9s0XftGEJ9JSuSk%2BZachCbdU45fEqbugzTIUokwoAKvpUQF%2FCvLbWW5BNQFqFkJg2f30E%2F48StNe5QwBg8zz3YAJ82FZoXBxXSv4QDooDo79NixyglO9AembuBcx5Re3CwOKTHebOPhkmFC7wNaWtoBhFuV4AkEuJ0J%2B1pT0tLkvFVZaNzfhs%2FKd3%2BA9YsImlO4XK4vpCo%2FelHQi%2F9gkFg07xxnuXLt21unCIpDV%2BbbRxb7FC6nWYTsMFF8%2B1LUg4JFjVt3vqbuhHmDKbgQ4e%2BRGizRiO8ky05LQGMdL2IKLSNar0kNG7lHJMaXr5mLdG3nykgj6vB%2FKVijd1ARWkFEf3yiUw1v%2FWaQivVUpIDdSNrrKbjO5NPnxz6qTTGgYg03HgPhDrCFyYZTi3XQw3HXCva39mpLNFtz8AiEhxAJHpWX13gCTAwgm9YTvMeiqetdNQv6IU0hH0G%2BZManTqDLPjyrOse7WiiwOJCG%2BJ0pZYULhN8NILulmYYvmVcV2MjAfA39sGKqGdjpiPo86fecg65UPyXDIAOyOkCx5NQsLeD4gGVjTVDwOHWkbbBW0GeNjDkcSOn2Nq4cEssP54t9D749A7M1AIOBl0Fi0sSO5v3P7LCBrM6ZwFY6kp2FX6AcbGUdybnfChHPyu6WlRZ2Fwv9YM0RMI7kISRgR8HpQSJJOyTfXj%2F6gQKuihPtiUtlCQVPohUgzfezTg8o1b3n9pNZeco1QucaoXe40Fa5JYhqdTspFmxGtW9h5ezLFZs3j%2FN46f%2BS2rjYNC2JySXrnSAFhvAkz9a5L3pza8eYKHNoPrvBRESpxYPJdKVUxBE39nJ1chrAFpy4MMkf0qKgYALctGg1DQI1kIymyeS2AJNT4X240d3IFQb%2F0jQbaHJ2YRK8A%2Bls6WMhWmpCXYG5jqapGs5%2FeOJErxi2%2F2KWVHiPellTgh%2FfNl%2F2KYPKb7DUcAg%2BmCOPQFCiU9Mq%2FWLcU1xxC8aLePFZZlE%2BPCLzf7ey46INWRw2kcXySR9FDgByXzfxiNKwDFbUSMMhALPFSedyjEVM5442GZ4hTrsAEvZxIieSHGSgkwFh%2FnFNdrrFD4tBH4Il7fW6ur4J8Xaz7RW9jgtuPEXQsYk7gcMs2neu3zJwTyUerHKSh1iTBkj2YJh1SSOZL5pLuQbFFAvyO4k1Hxg2h99MTC6cTUkbONQIAnEfGsGkNFWRbuRyyaEZInM5pij73EA9rPIUfU4XoqQpHT9THZkW%2BoKFLvpyvTBMM69tN1Ydwv1LIEhHsC%2BueVG%2Bw%2BkyCPsvV3erRikcscHjZCkccx6VrBkBRusTDDd8847GA7p2Ucy0y0HdSRN6YIBciYa4vuXcAZbQAuSEmzw%2BH%2FAuOx%2BaH%2BtBL88H57D0MsqyiZxhOEQkF%2F8DR1d2hSPMj%2FsNOa5rxcUnBgH8ictv2J%2Bcb4BA4v3MCShdZ2vtK30vAwkobnEWh7rsSyhmos3WC93Gn9C4nnAd%2FPjMMtQfyDNZsOPd6XcAsnBE%2FmRHtHEyJMzJfZFLE9OvQa0i9kUmToJ0ZxknTgdl%2FXPV8xoh0K7wNHHsnBdvFH3sv52lU7UFteseLG%2FVanIvcwycVA7%2BBE1Ulyb20BvwUWZcMTKhaCcmY3ROpvonVMV4N7yBXTL7IDtHzQ4CCcqF66LjF3xUqgErKzolLyCG6Kb7irP%2FMVTCCwGRxfrPGpMMGvPLgJ881PHMNMIO09T5ig7AzZTX%2F5PLlwnJLDAPfuHynSGhV4tPqR3gJ4kg4c06c%2FF1AcjGytKm2Yb5jwMotF7vro4YDLWlnMIpmPg36NgAZsGA0W1spfLSue4xxat0Gdwd0lqDBOgIaMANykwwDKejt5YaNtJYIkrSgu0KjIg0pznY0SCd1qlC6R19g97UrWDoYJGlrvCE05J%2F5wkjpkre727p5PTRX5FGrSBIfJqhJE%2FIS876PaHFkx9pGTH3oaY3jJRvLX9Iy3Edoar7cFvJqyUlOhAEiOSAyYgVEGkzHdug%2BoRHIEOXAExMiTSKU9A6nmRC8mp8iYhwWdP2U%2F5EkFAdPrZw03YA3gSyNUtMZeh7dDCu8pF5x0VORCTgKp07ehy7NZqKTpIC4UJJ89lnboyAfy5OyXzXtuDRbtAFjZRSyGFTpFrXwkpjSLIQIG3N0Vj4BtzK3wdlkBJrO18MNsgseR4BysJilI0wI6ZahLhBFA0XBmV8d4LUzEcNVb0xbLjLTETYN8OEVqNxkt10W614dd1FlFFVTIgB7%2FBQQp1sWlNolpIu4ekxUTBV7NmxOFKEBmmN%2BnA7pvF78%2FRII5ZHA09OAiE%2F66MF6HQ%2BqVEJCHxwymukkNvzqHEh52dULPbVasfQMgTDyBZzx4007YiKdBuUauQOt27Gmy8ISclPmEUCIcuLbkb1mzQSqIa3iE0PJh7UMYQbkpe%2BhXjTJKdldyt2mVPwywoODGJtBV1lJTgMsuSQBlDMwhEKIfrvsxGQjHPCEfNfMAY2oxvyKcKPUbQySkKG6tj9AQyEW3Q5rpaDJ5Sns9ScLKeizPRbvWYAw4bXkrZdmB7CQopCH8NAmqbuciZChHN8lVGaDbCnmddnqO1PQ4ieMYfcSiBE5zzMz%2BJV%2F4eyzrzTEShvqSGzgWimkNxLvUj86iAwcZuIkqdB0VaIB7wncLRmzHkiUQpPBIXbDDLHBlq7vp9xwuC9AiNkIptAYlG7Biyuk8ILdynuUM1cHWJgeB%2BK3wBP%2FineogxkvBNNQ4AkW0hvpBOQGFfeptF2YTR75MexYDUy7Q%2F9uocGsx41O4IZhViw%2F2FvAEuGO5g2kyXBUijAggWM08bRhXg5ijgMwDJy40QeY%2FcQpUDZiIzmvskQpO5G1zyGZA8WByjIQU4jRoFJt56behxtHUUE%2Fom7Rj2psYXGmq3llVOCgGYKNMo4pzwntITtapDqjvQtqpjaJwjHmDzSVGLxMt12gEXAdLi%2FcaHSM3FPRGRf7dB7YC%2BcD2ho6oL2zGDCkjlf%2FDFoQVl8GS%2F56wur3rdV6ggtzZW60MRB3g%2BU1W8o8cvqIpMkctiGVMzXUFI7FacFLrgtdz4mTEr4aRAaQ2AFQaNeG7GX0yOJgMRYFziXdJf24kg%2FgBQIZMG%2FYcPEllRTVNoDYR6oSJ8wQNLuihfw81UpiKPm714bZX1KYjcXJdfclCUOOpvTxr9AAJevTY4HK%2FG7F3mUc3GOAKqh60zM0v34v%2BELyhJZqhkaMA8UMMOU90f8RKEJFj7EqepBVwsRiLbwMo1J2zrE2UYJnsgIAscDmjPjnzI8a719Wxp757wqmSJBjXowhc46QN4RwKIxqEE6E5218OeK7RfcpGjWG1jD7qND%2B%2FGTk6M56Ig4yMsU6LUW1EWE%2BfIYycVV1thldSlbP6ltdC01y3KUfkobkt2q01YYMmxpKRvh1Z48uNKzP%2FIoRIZ%2FF6buOymSnW8gICitpJjKWBscSb9JJKaWkvEkqinAJ2kowKoqkqZftRqfRQlLtKoqvTRDi2vg%2FRrPD%2Fd3a09J8JhGZlEkOM6znTsoMCsuvTmywxTCDhw5dd0GJOHCMPbsj3QLkTE3MInsZsimDQ3HkvthT7U9VA4s6G07sID0FW4SHJmRGwCl%2BMu4xf0ezqeXD2PtPDnwMPo86sbwDV%2B9PWcgFcARUVYm3hrFQrHcgMElFGbSM2A1zUYA3baWfheJp2AINmTJLuoyYD%2FOwA4a6V0ChBN97E8YtDBerUECv0u0TlxR5yhJCXvJxgyM73Bb6pyq0jTFJDZ4p1Am1SA6sh8nADd1hAcGBMfq4d%2FUfwnmBqe0Jun1n1LzrgKuZMAnxA3NtCN7Klf4BH%2B14B7ibBmgt0TGUafVzI4uKlpF7v8NmgNjg90D6QE3tbx8AjSAC%2BOA1YJvclyPKgT27QpIEgVYpbPYGBsnyCNrGz9XUsCHkW1QAHgL2STZk12QGqmvAB0NFteERkvBIH7INDsNW9KKaAYyDMdBEMzJiWaJHZALqDxQDWRntumSDPcplyFiI1oDpT8wbwe01AHhW6%2BvAUUBoGhY3CT2tgwehdPqU%2F4Q7ZLYvhRl%2FogOvR9O2%2BwkkPKW5vCTjD2fHRYXONCoIl4Jh1bZY0ZE1O94mMGn%2FdFSWBWzQ%2FVYk%2BGezi46RgiDv3EshoTmMSlioUK6MQEN8qeyK6FRninyX8ZPeUWjjbMJChn0n%2FyJvrq5bh5UcCAcBYSafTFg7p0jDgrXo2QWLb3WpSOET%2FHh4oSadBTvyDo10IufLzxiMLAnbZ1vcUmj3w7BQuIXjEZXifwukVxrGa9j%2BDXfpi12m1RbzYLg9J2wFergEwOxFyD0%2FJstNK06ZN2XdZSGWxcJODpQHOq4iKqjqkJUmPu1VczL5xTGUfCgLEYyNBCCbMBFT%2FcUP6pE%2FmujnHsSDeWxMbhrNilS5MyYR0nJyzanWXBeVcEQrRIhQeJA6Xt4f2eQESNeLwmC10WJVHqwx8SSyrtAAjpGjidcj1E2FYN0LObUcFQhafUKTiGmHWRHGsFCB%2BHEXgrzJEB5bp0QiF8ZHh11nFX8AboTD0PS4O1LqF8XBks2MpjsQnwKHF6HgaKCVLJtcr0XjqFMRGfKv8tmmykhLRzu%2BvqQ02%2BKpJBjaLt9ye1Ab%2BBbEBhy4EVdIJDrL2naV0o4wU8YZ2Lq04FG1mWCKC%2BUwkXOoAjneU%2FxHplMQo2cXUlrVNqJYczgYlaOEczVCs%2FOCgkyvLmTmdaBJc1iBLuKwmr6qtRnhowngsDxhzKFAi02tf8bmET8BO27ovJKF1plJwm3b0JpMh38%2BxsrXXg7U74QUM8ZCIMOpXujHntKdaRtsgyEZl5MClMVMMMZkZLNxH9%2Bb8fH6%2Bb8Lev30A9TuEVj9CqAdmwAAHBPbfOBFEATAPZ2CS0OH1Pj%2F0Q7PFUcC8hDrxESWdfgFRm%2B7vvWbkEppHB4T%2F1ApWnlTIqQwjcPl0VgS1yHSmD0OdsCVST8CQVwuiew1Y%2Bg3QGFjNMzwRB2DSsAk26cmA8lp2wIU4p93AUBiUHFGOxOajAqD7Gm6NezNDjYzwLOaSXRBYcWipTSONHjUDXCY4mMI8XoVCR%2FRrs%2FJLKXgEx%2BqkmeDlFOD1%2FyTQNDClRuiUyKYCllfMiQiyFkmuTz2vLsBNyRW%2Bxz%2B5FElFxWB28VjYIGZ0Yd%2B5wIjkcoMaggxswbT0pCmckRAErbRlIlcOGdBo4djTNO8FAgQ%2BlT6vPS60BwTRSUAM3ddkEAZiwtEyArrkiDRnS7LJ%2B2hwbzd2YDQagSgACpsovmjil5wfPuXq3GuH0CyE7FK3M4FgRaFoIkaodORrPx1%2BJpI9psyNYIFuJogZa0%2F1AhOWdlHQxdAgbwacsHqPZo8u%2FngAH2GmaTdhYnBfSDbBfh8CHq6Bx5bttP2%2BRdM%2BMAaYaZ0Y%2FADkbNCZuAyAVQa2OcXOeICmDn9Q%2FeFkDeFQg5MgHEDXq%2FtVjj%2Bjtd26nhaaolWxs1ixSUgOBwrDhRIGOLyOVk2%2FBc0UxvseQCO2pQ2i%2BKrfhu%2FWeBovNb5dJxQtJRUDv2mCwYVpNl2efQM9xQHnK0JwLYt%2FU0Wf%2BphiA4uw8G91slC832pmOTCAoZXohg1fewCZqLBhkOUBofBWpMPsqg7XEXgPfAlDo2U5WXjtFdS87PIqClCK5nW6adCeXPkUiTGx0emOIDQqw1yFYGHEVx20xKjJVYe0O8iLmnQr3FA9nSIQilUKtJ4ZAdcTm7%2BExseJauyqo30hs%2B1qSW211A1SFAOUgDlCGq7eTIcMAeyZkV1SQJ4j%2Fe1Smbq4HcjqgFbLAGLyKxlMDMgZavK5NAYH19Olz3la%2FQCTiVelFnU6O%2FGCvykqS%2FwZJDhKN9gBtSOp%2F1SP5VRgJcoVj%2Bkmf2wBgv4gjrgARBWiURYx8xENV3bEVUAAWWD3dYDKAIWk5opaCFCMR5ZjJExiCAw7gYiSZ2rkyTce4eNMY3lfGn%2B8p6%2BvBckGlKEXnA6Eota69OxDO9oOsJoy28BXOR0UoXNRaJD5ceKdlWMJlOFzDdZNpc05tkMGQtqeNF2lttZqNco1VtwXgRstLSQ6tSPChgqtGV5h2DcDReIQadaNRR6AsAYKL5gSFsCJMgfsaZ7DpKh8mg8Wz8V7H%2BgDnLuMxaWEIUPevIbClgap4dqmVWSrPgVYCzAoZHIa5z2Ocx1D%2FGvDOEqMOKLrMefWIbSWHZ6jbgA8qVBhYNHpx0P%2BjAgN5TB3haSifDcApp6yymEi6Ij%2FGsEpDYUgcHATJUYDUAmC1SCkJ4cuZXSAP2DEpQsGUjQmKJfJOvlC2x%2FpChkOyLW7KEoMYc5FDC4v2FGqSoRWiLsbPCiyg1U5yiHZVm1XLkHMMZL11%2Fyxyw0UnGig3MFdZklN5FI%2FqiT65T%2BjOXOdO7XbgWurOAZR6Cv9uu1cm5LjkXX4xi6mWn5r5NjBS0gTliHhMZI2WNqSiSphEtiCAwnafS11JhseDGHYQ5%2BbqWiAYiAv6Jsf79%2FVUs4cIl%2Bn6%2BWOjcgB%2F2l5TreoAV2717JzZbQIR0W1cl%2FdEqCy5kJ3ZSIHuU0vBoHooEpiHeQWVkkkOqRX27eD1FWw4BfO9CJDdKoSogQi3hAAwsPRFrN5RbX7bqLdBJ9JYMohWrgJKHSjVl1sy2xAG0E3sNyO0oCbSGOxCNBRRXTXenYKuwAoDLfnDcQaCwehUOIDiHAu5m5hMpKeKM4sIo3vxACakIxKoH2YWF2QM84e6F5C5hJU4g8uxuFOlAYnqtwxmHyNEawLW%2FPhoawJDrGAP0JYWHgAVUByo%2FbGdiv2T2EMg8gsS14%2FrAdzlOYazFE7w4OzxeKiWdm3nSOnQRRKXSlVo8HEAbBfyJMKqoq%2BSCcTSx5NDtbFwNlh8VhjGGDu7JG5%2FTAGAvniQSSUog0pNzTim8Owc6QTuSKSTXlQqwV3eiEnklS3LeSXYPXGK2VgeZBqNcHG6tZHvA3vTINhV0ELuQdp3t1y9%2BogD8Kk%2FW7QoRN1UWPqM4%2BxdygkFDPLoTaumKReKiLWoPHOfY54m3qPx4c%2B4pgY3MRKKbljG8w4wvz8pxk3AqKsy4GMAkAtmRjRMsCxbb4Q2Ds0Ia9ci8cMT6DmsJG00XaHCIS%2Bo3F8YVVeikw13w%2BOEDaCYYhC0ZE54kA4jpjruBr5STWeqQG6M74HHL6TZ3lXrd99ZX%2B%2B7LhNatQaZosuxEf5yRA15S9gPeHskBIq3Gcw81AGb9%2FO53DYi%2F5CsQ51EmEh8Rkg4vOciClpy4d04eYsfr6fyQkBmtD%2BP8sNh6e%2BXYHJXT%2FlkXxT4KXU5F2sGxYyzfniMMQkb9OjDN2C8tRRgTyL7GwozH14PrEUZc6oz05Emne3Ts5EG7WolDmU8OB1LDG3VrpQxp%2BpT0KYV5dGtknU64JhabdqcVQbGZiAxQAnvN1u70y1AnmvOSPgLI6uB4AuDGhmAu3ATkJSw7OtS%2F2ToPjqkaq62%2F7WFG8advGlRRqxB9diP07JrXowKR9tpRa%2BjGJ91zxNTT1h8I2PcSfoUPtd7NejVoH03EUcqSBuFZPkMZhegHyo2ZAITovmm3zAIdGFWxoNNORiMRShgwdYwFzkPw5PA4a5MIIQpmq%2Bnsp3YMuXt%2FGkXxLx%2FP6%2BZJS0lFyz4MunC3eWSGE8xlCQrKvhKUPXr0hjpAN9ZK4PfEDrPMfMbGNWcHDzjA7ngMxTPnT7GMHar%2BgMQQ3NwHCv4zH4BIMYvzsdiERi6gebRmerTsVwZJTRsL8dkZgxgRxmpbgRcud%2BYlCIRpPwHShlUSwuipZnx9QCsEWziVazdDeKSYU5CF7UVPAhLer3CgJOQXl%2Fzh575R5rsrmRnKAzq4POFdgbYBuEviM4%2BLVC15ssLNFghbTtHWerS1hDt5s4qkLUha%2FqpZXhWh1C6lTQAqCNQnaDjS7UGFBC6wTu8yFnKJnExCnAs3Ok9yj5KpfZESQ4lTy5pTGTnkAUpxI%2ByjEldJfSo4y0QhG4i4IwkRFGcjWY8%2BEzgYYJUK7BXQksLxAww%2FYYWBMhJILB9e8ePEJ4OP7z%2B4%2FwOQDl64iOYDp26DaONPxpKtBxq%2FaTzRGarm3VkPYTLJKx6Z%2FMw2YbBGseJhPMwhhNswrIkyvV2BYzrvZbxLpKwcWJhYmFtVZ%2BlPEq91FzVp1HlQY1bZVLqeNR9SAUn6n0E28k%2FUuGkNpP1DBI5ch%2FEehZfjUQ9aE41NhETExoPT2gGQz0IhWJbEOvTQ4wgcXCHHFBhewYUiFHuhRSAUVmEHeCRQHQkXGFwkAgyzREJCVN7TRnTon36Zw3tPhx4EALwNdwDv%2BJ41YSP4B2CQqz0EFgARZ4ESgBHQgROwAVn9GTI%2BHYexTUevLUeta4%2FDqKrbMVS%2BYqb8hUwYCrlgKtmAq1YCrFgKrd4qpXiqZcKn1oqdWipjYKpWwVPVYqW6xUpVipKqFR3QKjagVEtAqHpxUMTitsnFaJOKx2cVhswq35RVpyiq9lFVNIKnOQVMkgqtYxVNxiqQjFS7GKlSIVIsQqPIhUWwioigFQ%2B%2BKkN8VHr49HDw9Ebo9EDo9DTo9Crg9BDg9%2FWx7gWx7YWwlobYrOGxWPNisAaAHEyALpkAVDIAeWAArsABVXACYuAD5cAF6wAKFQAQqgAbVAAsoAAlQAUaYAfkwAvogBWQACOgAD9AAHSAAKT4GUdMiOvFngBTwCn2AZ7Dv6B6k%2F90B8%2ByRnkV144AIBoAMTQATGgAjNAA4YABgwABZgB%2FmQCwyAVlwCguASlwCEuAQFwB4uAMlwBYuAJlQAUVAAhUD2KgdpUDaJgaRMDFJgX5MC1JgWJEAokQCWRAHxEAWkQBMRADpEAMkQAYROAEecC484DRpwBDTnwNOdw05tjTmiNOYwtswhYFwLA7BYG4LA2BYGOLAwRYFuLAsxYFQJAohIEyJAMwkAwiQC0JAJgkAeiQBkJAFokAPCQA0JABwcD4Dgc4cDdDgaYcDIDgYgUC6CgWgUClCgUYUAVBQBOFAEYMALgwAgDA9QYAdIn8AZzeBB2L5EcWrenUT1KXienEsuJJ7x5U8XlTjc1NVzUyXFTGb1LlpUtWlTDIjqwE4LsagowoCi2gJLKAkpoBgJQNpAIhNqaEoneI6kiiqQ6Go%2Fn6j0cS%2Ba2gEU8gIHJ%2BBwfgZX4GL%2BBd%2FgW34FZ%2BBS%2FgUH4FN6BTegTvoEv6BJegRnYEF2A79gOvYDl2BdEjCkqkGtwXp0LNToIskOTXzh%2FF062yJ7AAAAEDAWAAABWhJ%2BKPEIJgBFxMVP7w2QJBGHASQnOBKXKFIdUK4igKA9IEaYJg%29%20format%28%27embedded%2Dopentype%27%29%2Curl%28data%3Aapplication%2Ffont%2Dwoff%3Bbase64%2Cd09GRgABAAAAAFuAAA8AAAAAsVwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABWAAAABwAAAAcbSqX3EdERUYAAAF0AAAAHwAAACABRAAET1MvMgAAAZQAAABFAAAAYGe5a4ljbWFwAAAB3AAAAsAAAAZy2q3jgWN2dCAAAAScAAAABAAAAAQAKAL4Z2FzcAAABKAAAAAIAAAACP%2F%2FAANnbHlmAAAEqAAATRcAAJSkfV3Cb2hlYWQAAFHAAAAANAAAADYFTS%2FYaGhlYQAAUfQAAAAcAAAAJApEBBFobXR4AABSEAAAAU8AAAN00scgYGxvY2EAAFNgAAACJwAAAjBv%2B5XObWF4cAAAVYgAAAAgAAAAIAFqANhuYW1lAABVqAAAAZ4AAAOisyygm3Bvc3QAAFdIAAAELQAACtG6o%2BU1d2ViZgAAW3gAAAAGAAAABsMYVFAAAAABAAAAAMw9os8AAAAA0HaBdQAAAADQdnOXeNpjYGRgYOADYgkGEGBiYGRgZBQDkixgHgMABUgASgB42mNgZulmnMDAysDCzMN0gYGBIQpCMy5hMGLaAeQDpRCACYkd6h3ux%2BDAoPD%2FP%2FOB%2FwJAdSIM1UBhRiQlCgyMADGWCwwAAAB42u2UP2hTQRzHf5ekaVPExv6JjW3fvTQ0sa3QLA5xylBLgyBx0gzSWEUaXbIoBBQyCQGHLqXUqYNdtIIgIg5FHJxEtwqtpbnfaV1E1KFaSvX5vVwGEbW6OPngk8%2FvvXfv7pt3v4SImojIDw6BViKxRgIVBaZwVdSv%2BxvXA%2BIuzqcog2cOkkvDNE8Lbqs74k64i%2B5Sf3u8Z2AnIRLbyVCyTflVSEXVoEqrrMqrgiqqsqqqWQ5xlAc5zWOc5TwXucxVnuE5HdQhHdFRHdNJndZZndeFLc%2FzsKJLQ%2FWV6BcrCdWkwspVKZVROaw0qUqqoqZZcJhdTnGGxznHBS5xhad5VhNWCuturBTXKZ3RObuS98pb9c57k6ql9rp2v1as5deb1r6s9q1GV2IrHSt73T631424YXzjgPwqt%2BRn%2BVG%2BlRvyirwsS%2FKCPCfPytPypDwhj8mjctRZd9acF86y89x55jxxHjkPnXstXfbt%2FpNjj%2FnwXW%2BcHa6%2FSYvZ7yEwbDYazDcIgoUGzY3h2HtqgUcs1AFPWKgTXrRQF7xkoQhRf7uF9hPFeyzUTTSwY6EoUUJY6AC8bSGMS4Ys1Au3WaiPSGGsMtkdGH2rzJgYHAaYjxIwQqtB1CnYkEZ9BM6ALOpROAfyqI%2FDBQudgidBETXuqRIooz4DV0AV9UV4GsyivkTEyMMmw1UYGdhkuAYjA5sMGMvIwCbDDRgZeAz1TXgcmDy3YeRhk%2BcOjCxsMjyAkYFNhscwMrDJ8BQ2886gXoaRhedQvyTSkDZ7uA6HLLQBI5vGntAbGHugTc53cMxC7%2BE4SKL%2BACOzNpk3YWTWJid%2BiRo5NXIKM3fBItAPW55FdJLY3FeHBDr90606JCIU9Jk%2BMs3%2FY%2F8L8jUq3y79bJ%2F0%2F%2BROoP4v9v%2F4%2Fmj%2Bi7HBXUd0%2FelU6IHfHt8Aj9EPGAAoAvgAAAAB%2F%2F8AAnjaxb0JfBvVtTA%2BdxaN1hltI1m2ZVuSJVneLVlSHCdy9oTEWchqtrBEJRAgCYEsQNhC2EsbWmpI2dqkQBoSYgKlpaQthVL0yusrpW77aEubfq%2Fly%2BujvJampSTW5Dvnzmi1E%2Bjr%2F%2F3%2BXmbu3Llz77nnbuece865DMu0MAy5jGtiOEZkOp8lTNeUwyLP%2FDH%2BrEH41ZTDHAtB5lkOowWMPiwayNiUwwTjE46AI5xwhFrINPXYn%2F7ENY0dbWHfZAiTZbL8ID%2FInAd5xz2NpIH4STpDGonHIJNE3OP1KG4ISaSNeBuITAyRLgIxoiEUhFAnmUpEiXSRSGqAQEw0kuyFUIb0k2gnGSApyBFi0il2SI5YLGb5MdFjXCey4mNHzQ7WwLGEdZiPPgYR64we8THZHAt%2BwnT84D%2Fx8YTpGPgheKH4CMEDVF9xBOIeP3EbQgGH29BGgpGkIxCMTCW9qUTA0Zsir%2BQUP1mt%2BP2KusevwIO6Bx%2FIaj8%2FOD5O0VNrZW2EsqZBWbO1skRiEKE0DdlKKaSVO5VAuRpqk8VQJAqY7ydxaK44YJvrO2EWjOoDBoFYzQbDNkON%2BUbiKoRkywMWWf1j4bEY2iIY1AeMgvmEz%2FkVo9v4FSc%2FaMZMrFbjl4zWLL0%2BY5FlyzNlEVYDudJohg8gPUP7kcB%2Fmn%2BG6cd%2B5PV4Q72dXCgocWJADBgUuDTwiXiGSyZo14HOEQ2lE6k0XDIEusexDzZOMXwt1Dutz%2BtqmxTvlskNWXXUQIbhaurum9GrePqm9Yaeabjkiqf%2BbUvzDOvb2Y1E%2BEX2DnemcTP%2FzLcuu7xjQXdAtjR0Lo5n4%2FHs%2FGtntMlysHt%2B29NXbH6se%2F%2FWbFcyu%2Br28H0MwzI30DYeYTLMXIA2EG8QlHpAsyS0EfEToR0a3utIxFPJ3kiIHCCrZ66b0e2xEmL1dM9YN%2FMwS5p01N5jMX%2FBLKt%2F1R83l0LyC29M6%2BiYxo%2FUNg%2FEF7c2WyyW5tYl8WnhWg2%2FhyySbD5UhnDyS7OcU0dnrFw%2BDfGdI7v4QfYIIzOMq9hFtY55gmvC7jZ2FK7sEdrn6IXBuucYhjsGdQ8z0yEbWkkczjjsE5hNAIZrPx2zOLZDmKNXcXtg7EMqidAEEWg%2BSJCBBNwxvxJfc%2FbZa%2BKKf%2BxoKZybnq5vaqpPTye7CiF%2BZFjxZ8%2F7Qij0hfOG%2FcowPA1rT1l4ymWnrKmxxqfErTVrpgwPlz1kC%2BOy8NMDz6c%2BIO38K%2Fx0xkPnLW8Kx6qGAoQdL%2BTD9V9rb%2B%2Fctn%2F%2Ftrxz8dUrZrD%2Fzk%2FferF0cNt1BzctmX2FZPXt%2FjnFCQNz4Ah%2FiKllGiCMs1w5Lkg0kiEwj6VTXCDKsX9rMpnvIj9pcDecXAIXMnqn2dTUbN6w0XQ9ue6FV%2FnnXCH7S3lPWGltVcLsH75ub3ab7A8M28caNrIeOr3o5Q0yFsYL80xaa0EY%2FUEczV7icUMY5pnelAkmUAXmHYjvFWFGxuqlSaow3OM%2B%2FiYY7%2Fl%2FhVELF4EjRqNR%2FbvRbOY%2BDUGzGR%2FOh3EqmE%2FugIQQguGt%2FeMYz%2F%2BL0cimjeZfQDI3phXMbMQsqH%2BCjwVz%2Fhf4idHovgVmB8gLvjbicDcC%2FNypP536E%2F9N%2FpuMibExdohBmNwyiaZdJGoigos7GpF222xrfnZhML%2F7Z%2BylaqP63Hr%2Bm7bdUkQ6%2F2cXqdfmvwixY%2Bs2ksXFeXcE%2BiX0Z%2BIow76DBNgjJ7TOdUK18iPsPflfQD%2BDPsZG2Aj9VmKMMJ4fYRrhIaxhTDR0Elh2vA6h%2FAE6xUb29mj3sjmL72petXjejPy%2Boel60M99tFduCI59N3221xe7apOvxs6aHs7vab1IqY2tv7q2xsHeHGml%2FcV06u%2F8S%2FxTjJ%2BJYc0bWEX0ukW6YmIbGkJRMdjJ9mYIH5QIdJF4hvRGyK7cC7ctImQRcUET99fGXOoft35GYLMQu%2Bg2smnkgZUrH8AL%2F9Si217IssJ916nv14ZrJrvdxLkQvrvtBcjgPC0NXOicO8Qf4mcxPqh3hgUw3DDfdvLJXngg7N3dN2zbPJSaed3OfZnMU7dvmznp3C3bruO%2BNmue0LFsy7S%2B6265%2BfCKFYdvvuW6vmlblnUI8xCXp37CrOZv4B9gauDBlYp7adcUXB5DNCwYImlXOJJKkAdvExXxVvKEYnCo%2B3eIskP9qrrfIYs71CccBjfXRC52udTHHdaP1A1ui%2FVvH1otbrLrpNXBsGX5B89QghDyimlvNB2KfkxZ5C9%2Fem3%2Bd1%2Bd%2F%2FIfFp2%2B2Oxn%2Fs%2B9n%2F79p39S3s8idN6g0yZObwJOgKUpNB3GyU0Ls0PbRzIRq4lcarLKOJBkLRzJQD4j2090XrbA7DW8K3jNF5hlGS5e4V2D17zgss4T20egOJte5iD0bReM9yjTxnQxCRj3c5kFzGJmGbNKmwGw39IJDJcXJZGMkaAB4jyJAKw0jt5IAuIE%2BA%2BU3cVAZZrq9zhDyBrU8oosuxcGNTzCKJfla7JjNVmuSb%2F%2BtuzN2H%2BX4vlB%2BPpdfMXXmuVsNiub1T34SFbjYw5itEvVi0K0Nt9pNJUMI7SLGRhf2xipfCYf8z5OdlGKayOucFeVPeS%2Fdbo3lBrbSMmwUiQN5%2Fed7g0Ds1s17IuZC5kNzM3MZ6EWCa0DtekdJfAxz%2BR%2FOX28sND7yRMTBcf%2B%2Bs8mQCQWHya4qBv%2FufeMoWyslPA9DtMxUknxkH%2FyfTnm2CMYzs%2BCq3r7PxY%2FMXomrvTEsRpfEGHa%2BWN8E1AHjElb7d06ddA7oK%2F%2B5Mdsv9EtPms0jv0Z5kf1FqPxWdFtfFr0kHfgDX0Y%2B5PRSG7RUj0tQr7rmfX8DH4G5W28kKeJLtmQsQkuwMP1pk16EV4sl7vrMJATfyUWo%2FGwEco4rh4XFQgaiUX9qxZHrMQqKnz%2Fc2d8b9TysYrAuXpP%2FRf%2FGr8b1qwwc5a%2BeuLa6S6sneNXToG2XrEJi4R5SGs8Sq2S3d97bsfCRaTdaLwKClRHt37mkudvXbjwVrLhuYeGhh56bvfQkHpk2CwvwClqgWwuBfndC3c8dwmstj81KkagcUgbfPY8Zje0W%2F82VPWJHmSq6pP8hPWpotc%2FEexDOK3qU%2BwngPhOCiO9MJRm8TJefjelrzoKnG2Bn%2B1NCUmPE4gHFmBN9jrTigRIpsACrc9Gstg58ULkp9467%2BGf%2FeFnD5%2F31lNrt2967dhrm7bzI%2BVT5m%2BfzKhvf2MzpICEm79Bopkn07lt1762adNr127LwVqQLdJ5%2BlpQDcvHPQtVY5knhYrK6q8%2FJsiP6EuhGZdFdaNszjvpqvc%2BPI0CdjN0AXsFOC3ZfALDJwr4q2Xq%2BGF%2BGNbsxUg5NLLIEXi8otcDQcUts0D8eQ1iVDRAMBTsYiNdRIxE09EIBJO9A2xqgERTaW86BUFn0OD2xFO97FAgFhF6OoQ7prYt4XwSeUgQHiJyDbeke9IdQntciLQ1FlJMaYcUNvZBg%2BFB1ubjlnRNvl3o6IEU2w7fdNPhm%2Fhh%2BFLysUu6%2B%2BDLHkOkrSHYEjH0tEPe7WdD3uyDgvAgK%2Fm4szFFR7ch0toUgBTdWHr7EpaWru6%2B6dmbbnqWEbV2EtxAsXiZAPTtGPSbHsotI2leoM8TePEqgSQprs7AGFf8kuOkPdZPXGb55POAW1d%2FjLST9v5YflasP6v%2FCO7%2BGNAPC2BMZWmsOjp2NNbfHwMCJD%2BLPVL%2BD%2FOYlWEEI%2F9jpPddOFkB5d1GSuKZYggmCCd7JUxD7EXAzxyirYnNDLdDZoFdx14kivkvGc3579Jm36reTTvDgBnaO6vzyQ6chQmlsMoIkIQ2%2BbBDWBud1Va4pcCn8CPqxlh%2FfgtG8IPaPH8C5wk6%2FnZDv69jurV5QhtwE0x2iqOsj9Mx8B9%2F0EaUdiPfOYYDCi%2Fq9jhWRuupMDEU0%2BCtX0sDFxv07T%2FK5niBPqN9%2BtQjgEc31NGCXFeMcCEuQBIc%2FBK4CO78u7EPYvl3yaEfK3vcb6qP1R2tI7vUjVDDUdKubsSrNjYKY1qBEa2P50SJoaXiksIoLiCwnxS6EBuBde87botNfdEWwYvF%2FR0%2Fu5yCqhGeEOR2ynSeyXjt6ka7neyye8kryBSWE52y%2BRBgogrXPZ8E1yIHoHIFUM%2BAbJhE7lbMtt8ApL%2BxmZW7PwbjAO0fAVoXQOuiSP%2FksIVdFZ0aulsamKUzwPZ%2FNYDMJRBPCxsBqLzqHyneXF6Ej9HlIFo7%2Bpg%2BjUb3unRmGpstGkm6etOuDBGA5wCMefp1gTHcdZlvPBXlOslvYTp1cd8UjYLVd%2FJ5awNrIOKLnIt9MD9qdrKrWCvA6ALm3QV9VrsPm60Q7%2BRHJHP%2B2hqfugo%2FMvI2H%2Fmqr4b9tFnKSRY1Y5Ek80Nm%2FWIhr1ikKnxGz9TWXrokf9xwujfvcOTtNTWnxd0F37Y2W79tteBqZ4G5qLCuomw%2BnSr28QESCRVLTyYKILGJOPfcnaIFOsewhRdvv%2BrWa%2FWih0vlbX6Zb75T5C0qNKVFvH1QL%2FvazSWgC2s6oWXXIuUxQelKiJbowuJDQViatLmLijg9CQBMg8WiPgiw3LEeYRmm5f%2BXdnvkDnxLLjMLxtvX74C3OlwPQqx4xwIdpPx38LrlDphiyWUWHWKAzzxurS%2FxTo%2BP5wGFak62ap1PVFFN4v%2Fy%2BxuR39WnIO7lsWfwgVsK17wxrs9K8ltIKuhkw7f%2F6dhK6gQokFKhWX3urrjk%2FrnI0pgfpGMeuQIUaEM7%2BGF5q2iMkCaMQwxxOzcvU0eXbsnS9XknXvP7Gtw5dwPXlFu2ecvSHEZgNDsU6x%2FGdXBYXyOQjzZReSedeEPY6nEv9gJR4oBQJtFO6Kd0fwC6BO4LNHDeBujB6dSNcUQC9zIv2LnAzGk99bUDrdFY%2B9yGFQtEo0GQPNv6vS2drj4%2B1jHbv3aJSMUWP%2BQTZrmbNTjU8wyG%2FiXNNpskybLcJ3CiTF5Ir%2BJYzmJwE0mSVhlxbtbmvweB3ulB6Til5UuUZydpgiFVeobhU0WaBqpJ198d%2B%2FXeNRTZ9%2F1OPfG7%2B2hwzd5W3D%2BhmyjsRcUg%2F%2BCavb%2B%2BVh2ls3L7zT%2FetOnHNxeerv313vzLVqPai4nJv%2BK1FC6040%2F4udw7sAb3laSg0XCkAAs0npBO6VJabS4Elk%2FU%2BD4gTXW%2Bj0wnrMlqNamq4tMIYB87tE10i0FR3LZNhJsb7%2FR561btmes8YBCRkhYNByRtKd55mqTas9FYhJnbRGHuOh3M4QTdgQSqmgRxuzGdSvZGcbMxNQGk5C3ebLjoXIOFM4l%2BWKHmLTJwRv9E8GWJ6dYvf%2FFmEyEGr%2Bgyrr1p5zrgkz0Cw2j94Hv8Jdx7dIVegBSNtgsqGsRQEYiIBoXwD0LNvQ5d7s5Z00QzwNhqZA0b%2BtMG1tQq5nd84uq8R0zPvX35G8uRaze4jcOHzz0w1%2BQ2BIRvf6J6Kgatnrbiem%2BCFvAxfkrndzD9MFPP1GWTUHclpASUkCNAQkpCCcCgDSUDAhDZ%2BCuEkgn8J7i9nMA7pA4lISappxILKfAeSAbIcSDuN2bJcfZILqeO5rLs0MnngSHYRdrHjmaz7JEsEPw51ZqDJDmUIOZIe34WaQeegNsJn1qz8AIpT3yCjyEih%2FxELkuJ0lEMYTLVCiWpo5oYMleMH6USyYJcD%2BuOe%2BkWKpn1Qns34iyYDjkSLvgnZXcgVQNeqINXr48m3iS7cjm8tedyY0f1QvTnHHdsrKby%2F%2BSSbPY8%2FNH6vpl%2FEsq3Ae4ZU1HC44KFiI9o7CEgab%2FRqHbj7s5KAg06s39ZP%2FzxI%2FmVuF%2FTbTSy%2B3Fb8If9%2Fcv7%2Bwt91yy8RfP1QXtW5RzQn7qIiZyuFM5QfJ5E9uVnqT85TanFx0lkP3ukBAMprvsRyi%2FC8NAJL1xbIIirSvnSj4O5netb4JxmNANHPssHAcHMHsFRgEug816gDBeMbdfiuRcghqYcm0%2BXxx%2F5IAEtN3fqFF3LzAXqwoT0PN0OVTNqxo8sxMkd5Ig6k79Zk7VxxX6gMLOZFQgvpW2RrMW1D0BDihaXQ9wVRoBxPLfpknmkeMtoB%2FqM9cRc9IqmMD2XUmdZ7GSRKPUZvChf8BoykriM2MnKYbOHX8R7cLdNCxSFFVQqoYswnlWtlFS2mNkhswVpZiQW1J%2FUKFfipHGlUkM6UKBhMz1istELIHJLMSctu3ugzfaVSOjKvUgc%2FTHK4Sdg2Wscz69leKIkkrwuuWiOe9yGYKQXRumkC3qbRcMwrvhjNXgdZk3RxAUEhuSPvn3nnd%2B%2BU%2F3vlVOmrJzCD8JLxV1OHRjrZifbcFDOuRNTGqdgQm1tSNJ2OcQ04YiEXuxtII1ECSQRoQGYioEsgCfchB4ghAtw7FfJre4WZ9hkVi9MtjuWqtdNDlpMrfEG9fOT6q21okg%2Be4As38MfGquNt7oUws6Ysarj1%2FefE%2Byst86YUVNvDdts3Pv5c8m%2FaP0C%2Bf8%2FQb%2BIMnGq09BgwN01oIOAnAdagI8mBSrqk1gxTDUBOtk2ousEtBH2z4Ir2d3f6k8PXXVlt2qN9RODxRuoJT%2Fv27wm09jRYVc%2Fe%2B%2Biyx2tyzJb%2Fn3J0htXP87eSsQaf2Ly0s6Zmxela88REy1cf4273mI3iXNJ7KxrZibOm9xm6rl4fqy%2Ft27smU8tOfdW2ucBzg2UfmOIVyLIl3kpYlwphDISTXJXsctmiDtN7fNV6zelgxwnWxsVr83Aj%2FS5ki1jL%2Fa0GC6%2B2L6Um%2BaoddlNFuj%2BbJ8mH%2FiaLh8I0%2FU51NspIEfq0dohwyFXKgm4NggwQ4rRhCOUFtxxo8XnitT4cnGfT93IS8FaT85XE3H5LMY4zIEPL1hw443wz%2B1UmhTJyJGxZzw%2BwsKkKZgUiVtKOKMEb2AKHTv61FNc01PQFwKnvsZ%2F9pPA4RKTASWahmh%2B8MxwzHxKy74IRn5LGRjsPUUwTu64UYNY38caqd7HKucZ%2FtHnODtENw%2F2UfHRMaq1UUPDJQ0OKkWCeet5fYOhII1VRz8%2B%2FElg5j4Gxur3J8o2PJ4rg%2B2d08T%2FfwEzSVbyZ9XPro95T477lRKqUSRXQnauHNsISAl27oWi6Fv9z48JMv8r%2FaMMj8onCP%2FDuDZOuN%2BGPPr%2F%2Bp7bx%2B7JlbYdppcNhzKU%2F1Px5aiaGDn%2Fs1iGMaBcleKUo%2Fv9rcxkZj7DBEKOfrayytXNLYiUdBY%2BpleQXdnscKlQcpzuWluxsieeyuXIK6SdxozitWyGOV3vOHHjguyCQ6fpIYy2JwvrQEF%2FQa9Pdf%2FQqOSqCiE%2FEE1%2FXIVKTc2tzWbHnimrEd%2BVyz311Ml3P0GVTj7PD5aDnsvCvH36alEaPMePcMegXs7x8igTu4B9v7G9vTHvhCu%2FkzIdx%2BBxC0ay9zRSvoS0F2lIxI%2BX7klU63I40gLQ3w5ep5na%2BSFnba3z5D64zv%2BQtM4n4ffG3tq4aNHGRfxgrXPMim%2B5487abL7xhdseIRn1KDl%2B7aINixdv0OD%2BJSPwKf5%2BxoP6aiTeQIDVlIhMcL1H5R9PYXvprs3fv2bO7MOplCmweuiq2JRZ1zz%2B9a%2Fv2PH1Hfz9236w%2BZrPXvWfAxlj4NLLHpq3c%2FPQ3uvmvbrjG7fe%2Bo2y%2FcLdtE6VUlXi0ASb1VLUBVSUWSU4HdvAraTyS8xzM8NxvxFkXV6pUVRiJwcgC5zEeht4rwcp7ki0k41G0qlQhG1Vzlq8alEmnFi58caB5Q9vn988MLhqyVlHvLEWjtQFeupdiocF%2FtkkOGPW2ibWaBTkeZ%2FdvPWazXfOnnvL6jkRXpi85sFzZt%2B55ZptW3bl1cCCHZPD06MhySha7UFzjcjbp8fOecFCirzAG%2FyVjBX6OFIaadSjQq1nNhyIe8tVbaaSdHlXIWKacMeuZA1uxS95zILhyrxAdsXTL6m7kNQlx2P9uZf2qhufePFFbpI6%2FOU0WcP99RrCsrwseVot5mtytpf6Y0gm9sdeyKnPQ7onyK4nXlR%2Frg7H95M1upzu89DH6pgUcikoiihJ6NJKmRxV1x%2BMJiOA3YwhDRQrWU0u%2F0rvq0VYXnyCwsLeTJYBq3dAtJDavuzyoVpzZ99Z0%2Ba0uoiFH%2FxcqgDR7rUFeOrUn6Cywb8ZeNMbhLV5ugP9l0zv9UN5b5mFkjzxUcpPJCn3V402pRxtJd2GrnLdhtVk9ZSZh9W91fCSH5B7ofxPiWL%2Bj3D%2FuwhBRdyAyozeZwvQzs79soi%2BBKSnafLviZCcfrpBpLyimfLfTyJtbyruIQKD01tUwJyKEo%2FybaxkSNFUMdMkhQoJyRBQFhnUkDQSXhTM%2B3NmY0EDM7ffLIjqWEGt8lCO6mLia3PukFnghosJD5p5SIho%2FVDkzQfLE%2BIrYoJXkD19pdP7OwG%2FvoIUtagiWiZ4PAFTHHlTVhRZ7dYmPar%2BNJ%2B8JhmR6DFK5DV1foHoLNO%2FpHrvZfmWZ15RQlwvoVDKhCWNK3CCch9lfFBuAqUgpFSShmNaPj%2Bi5%2B%2BWZfKeViJfW5HnUakVL4UCNVkA4%2BETfIqx4B5xSaP2L1yn0zn2ltPn4%2BOqZGmwwEVCaCSqG53ldtL1oLGAhdMLd09MpCCF6tD6ZnAZBY9hDaYsP0jzZ0j5ZjKsF4i1UmLuhbJMCnYJPt5VwFNvmZawXjEvLJqIH8STonZjq7BZ8gKgR20C9MDFqJAX1H64QW2NEup6qgzLP8cvppL%2FNNTOBTCJABOHeWoXzLhw4Wuy7gaBtjKr9kgKq8ZlRYBS32Lpxc8vIhpNDTfyNXWybMJbn2RyQ5EmWc2QF9wmSZ0KYCE%2BcPuYO6b15Uotj2Kd4MItLS7gtFbkTdrFND6pvEZqv5Yv7jXAus7Pg7avo7KDot50NX3CPkP%2BKps8J9%2F3mGQIteY%2FLGPC%2BL7872SPR2br5fy8MtKBMHedGuM28%2FMZmPJMrGgi3Gb1S%2BSi1%2FL%2FzrZwO9XH1ce%2Fz7ZQ1WSoY%2F%2BpMb5FT4ua0Wm%2BJf%2F298nFmChEQ%2BTi71est4mq9VYI6RsymoRJKYidElT2FGnDTZvqtfhGAFTbeqEw68GqtfmbVa%2F1IFO1%2FjdWr%2F8BDRRtQh9XNjubEm4aWVpVonpTGR7PVGc%2BKJNoBIWF7kYi4gUV3r1U6723i6TxUl3n3%2FtM27aZfKb7THiHW9VzFSwHJ05VfK6Ar7kaB0XgPPE0BSkSFKsBUpaLihEWoA9wBt8qirh2VSOkZwXEwyrxZ5jyt2rJmSo9gX7cg6jsEUGJU9z9xJPOEM3uQQxKgkh35DNATnVyrmJ3mbCNyIB%2Fyox4wH1bg2DwN7q9kov4pFqny8oSm3RQbGgJ1QQTs6ZMLilOVYJ9v6Wha3HcJ9jddsXp9YhGUXLXt%2FqMDnvLpPNTXfNa60z5%2FyjXQOMq%2BlNmwh5egpYrdfZQZV9rI47xlRkuyTjpzsmCBSWNkAXVoK8sgYWqQJWbo1RLo6QH0YW6pxqfCnRgkd%2BRiFjUQUQ7poIaYoakgXxwFd9BuuI38H1xBxXSFb%2FpBDIKQFn7YB3dB36l7sG1FLaKiBdp1KxLvfswap%2F30lnVESgNnvjbUoT6w9N%2BXoio0qcYOIM%2Bheg940YimsucQVvli9NEcft2UZwGQwLuilj1fFr1i3NP94X%2BPE7Hpvtj6lBJfJ4R6NvWiaL6MgzWHxiN66DExa%2BdAdAbMYX6HVF8A%2B7rjEZIXAVbDe7PVI9rmN69JOLV1DOSvRPxWNPZBZf%2FNf%2BNy65BhYxxxV%2B77XJ2wfQ389%2FIQPgajXbwMsuAz%2F0IaQcXJavKbRqR2IqyZruXjVC2%2Bhdee%2F5vdnYOedpmVtR3NGXldxSzDSIiBVpkGb9by89UpEPKrSLZmyFDzMab%2FwXl2CNe7s%2FqCtTvWgG5kpBmCBlSzDS%2Fr8N4uwBwohRW63JTS1y32f0TQsPfXVGEHQrV8%2FNCfiOUVirYcBbIeA2%2BiF68rQIo3B%2FS628vYESr79ehzS7Q9LEL9UXmik9XVHb1yBO3Ngvt5935%2Bk1efkV51mzzrM0LL3%2F20avnwMeKuWyOUZg2TasSqZ%2BKcZQiOn1Iu2Vh497ALUVZiCKt%2Fgh6IvTIj1ZLRjWAkpHKOKovNwp00eqPROiAbiNEKieXwMLcXhVJ1%2FuzmLP4tfxaHR59cBdJVG1kTAgl9ze9QKUEQ946Hkb%2BokJ5JRDyf54Axur1D%2BWS49cLr0tTPEu7UmXrxcSr3XNvumv4yXzInXKH4F7Tc7p17Zt%2Bt%2FqW2%2B93k063X7VW6lALxTY7i1nBXMxcxmzQbabxz%2BtJo%2BwijYaIGMNS8AoSMgAPt84DdHOoMPfjXhF%2BkuH1tZvuFQrRCN07xGcXRX9MYxYchDe5BcHj%2BZ4i%2B42WyPc8Xofi7bbZJN5nJLJ5qr6IqRtzqNlM17SpFsnkEyTWoABEjz4JXOQvzWYuwdnV5LNGOwTM5v9r4RpQ8ZXsYodks3o31JBlzbYtNotisnm22MxiwGFXam5oN1n0TA%2FhRvshvTSDwHff4nNzRo9Dum6PaJbMXzDz%2Bx%2BFkj4L4bFNBb1asqsgH7Dyh4DvbkPtf5yMDKzEwyoaESMSNS9P9gJVA3%2FRTlwoMwZvxECFWxIPNw9gi01nOHjP32esZTtmXHnxvZd8ZtakqQ7ekajbXetpNa6ocTVxJtY%2BuSe69OLz77zh5bDR3xjZMzUz6fxrz1nqrZGcHQHfPVefN%2BfiK86LeXj%2BSc5lPKy%2Bk%2FvCUI%2FDaLFYCWHr6nbXuILTIsb5imNKY%2FrCm28fSMxPhkN1XbNMNZGuqwOBhtTSxWuTk6bw0ZaG86b1hKddePOKuBvmiguYBn4T%2FyOqOyGRBt7bKUI1GjioBC8aUKwF7Q319UgcmtFGIzCJGBqwQij0ynDsfdFGc3TS3BlNfJ25xmzniMkpXXTPvCaD3ZaZvyzjmZdudBostmhb0ORZNN2sJBeed1HXkrUsywueQH%2BL0eCPxmsa5ZpgRJSDZ11yDv%2Bjmbd86vxZfc1WcZJ3UkMq1BOOOVtvu%2F%2BpB%2Ben186d3GTwWAw2jheaJs09%2F%2BLNfZft37DALyrNj1wABMuUKbODyTVnT%2FKYbJ3Tpq8IrNh92dkxOj5P%2FYpZx4%2FycyiVcDYdn4JbEoKdQi9054iBKsygLW46FRGxAb0NPNCm8BSNCPjoKcj6EAus4SuP3rB%2BcV99%2FeTF6294dA8%2BTK6v74MHVpYNRt%2FI30e8QGTOOdfGWzzxcy%2B87a7bLjw37rHw1nPzp0KyyRSeZO%2BQQhInt3dYgvycjrPOv%2BT8s1rptaP84VeywdWX2T4ysr0%2F7TLIs6%2Bx9zib56ye1dM9e%2FXsZmePY3NDs9zlnNVt4%2BWgHJbbz3Livg4P9WWgviOMm4kCRT6I8vw0NbUUEnFvOuFKoxQW1gTsvFirsF5pb7qTUCx4i7VmtToveaDxvK9uOaedVvPRpVOnNz0Q6bry7uiSdQ8t7Vy4JQKVS%2BXPplV2ts4bvCwZu%2BKzgITtxepaPRzWdpv74muvv6RO0SorX6cu%2FdqKn%2FXWnrtp%2FZragz13DUCl5myiFW2Ycvb0PtsXnU%2Btx8pvLFbUspLX68mdegwmOif%2FNPDONajTGoUh6tU56HBJCTBASVvNUB5VIiKpc9kd7kludodSFz7xQbiOmMk5dOYk56gzL6uaf7N8a6MQOHm0ae6snZpFDfuT3%2FjdYzjzwkXXIVHoXNuCfQslQZqBZjTsoHMqrkE4jaYdgkGz2ATOgB3cPkSukD01DnV3ttb1wx%2B6arPqbkcNAHoFPzKUUQ%2BqL0k97pjbZv1I%2FegC9zTFbrrlFpNdmea%2BgIgfWW3wqkcis8ky5FAcRd1If5nNZrl2FFpungc8wpoCl1BpQV%2FScS%2BzjlASyUTVv%2FAJ46gkJI4bHX4lTnloctxPZE1ckS3%2BjG2fKIjkQFyzuo8jvYQG1OrGvJPSTu%2FnSp9PHNTl4z5hK%2F8gtXVKF6gEKiglgcKiRlCESsQCV5QIlKWKpr34lt%2FwkSx%2FJCmP5%2FcBKQfl%2F5gd%2BrOS%2F%2Bp91%2F%2BYCg5CXK2W4M9fu%2B%2F6xxX%2BvnelVuldIDCG0VQTpU9Dw4pRfei%2B6zWx0MLie0gPbyrkmRU7OwT16JGeyXLHqOLqAfVN1GPlBzWtFNzj0TRTCjogtP1NjIvu5habN5Aoa1k66wGpqriVetJgiGdwDZtKhnN0y4n9sXYnsqGmZfDSR15%2B5NLBlhoDaedEm7sxmpqRija6ZEEg2EAnTiAC8IrmFbGz1q08P9PSkjl%2F5bqzYqT9hMmptEXDgTqP3Wiye%2BsD4Wir4jCeoHbbp5hRfpB7BakUIppIlPCD30dR1GtslDz8OsqbXmejFC%2Fv8wu5X2myq7SJ8Avzv9DFUJySf5uNvq4%2BTi7W9D%2FOZrLChdwxmPNiBRqVjnpK%2FaGxRCDspVYKAW9AN1JANoo8wP4BJUlGqdgw6m1qPQ2QW3%2BOfU5%2FieLS%2FNuKpDU3uf8bcAXyBal5jMR2NEAbPAZt0K3hvxHBEDlUxfIGcD%2BN2gNSNx36nfqlAYow0puatNpRz0e4W2oahKzQHsjf2c16ad%2F3t2KTtPobnX6D8C8pd0MDP%2BKx7wnXqGGlLQcvikMErm6TmfsuxJXbSAxqNjOogJLQBLiKEHAE%2BJGTS3JoEhTrz8%2FCB%2B5YlupJ58aOat8Kv4JvregxwcU5Cp8GFAFm1FyOfto6GS2m1NGTS6CPNKkbsTdCBlnN9onMho55BX8IJZtEQ35lk%2BhtwN5A0V3RCPoD%2FyXAcv6pAtbZczRUA64JmcUf4q7Q89ZHLeJVZ5D1Ps%2Ft%2B0iCT3AHVtZC7JDCXfR7OSb%2FXja5H3zQbZL1B%2BULX1BMTEk3AseSpmnKEK4T9ekMIidUCRQFfcbj7z8gNLvzF7mbhQN8h6ZbRset%2BnQWdS%2FZX3k7WpS8P9sfo0iGS64wV516pOhjI6TZ2dApgI5%2BLhxywYoWxKUrykKJsIoDsR4mSrCTg0egMPnLW%2F3Q5Nn8BZEuzqEI7HK3n0%2BzFmuO3TtWQ5WJoG9YqCD6Gc32SxnbnVPfsxvrFXK2dILl7bLthDp6glhcsfp4bYvbSmj%2FmQ94uBTw0E73x2jbNRCvC6VL6GCFDwU7eWQDcC5FY5s0slieRDwtAbRsbLXbaXAuu14e2OJw1dc6jQ3ZdY8v7rv2%2FBWZLqvFWVvvcmwZkK9f5jS4muO9yR5res4kfkRxhV03L1RfPOiPtYi8pd7jNEsOpyTwxpaY%2FyCZu%2FAmd5Or9uS3DYaeqVOhH7gZN%2F8I%2Fwi1fEuLXvyNivibjuKvN%2B1Nc01HF%2F3h%2Bef%2FsOhox8MPd5SFucPjorQwXT%2BytA8EmA5mamHNFDVhBI5pjZbQpugBNkO8MvRub8KVDKST1Wag7D3xlin1ZF7LFP%2F79nbvCXFOY%2BPUjrT7%2FotsPXXZ4exdPzuhZuL5LUXVAn7k7PbhG89uz3b41X01gbjP1xwlu5rrvvf9%2Bpbs6E%2FVu7Nk642%2FPYRaAiUBdrmO6CDTBLPQFA1ur0uXoBR1INDMkypKpoTqnSMx5GiEdTEaSHLs0Alvu%2F19%2F5QW9Rv1U1ridT22i%2B53pzumbs%2BXFFXYC%2B%2BCGsTj5JUT%2FGCgRt3n78i2n71FHG4%2Fu6X%2B%2B9%2Braya7os3ZbDmgWfXun44e%2Bu2NZKuGZ0HiF8M4TlMPR%2BEU6rPKRJ8wOU2RFUFLex3egEsz3YqEAq0cqhAAW19dBZIlVzR61tuIdTnpXH7l%2BuXrbjPUyep%2B8cl6aXKWhPHpDcXl9KiTWDNr4mBQc8Tq%2BNzK%2FOKSbsfl79o9G20R%2BbrBXYvUg0rLHhtrc4TN81TTOWSZ0gL1ZVlOYH2ery%2F7XVUjFMbzYpg7UswcqJPQwBd0LKLabJ8IaCr2otcjSkIrGwootKECaUd4XH1%2BSdazRrfddkBU98t1htvWrbjqSqjaCguxrffM%2F5zDCpBALUycmajhd%2BR6ww4SWafuZ5eU%2BtPid4lgd3gt%2Bb%2FY9rQoZNmiXYPXyRHbRs8zX%2Ff4WIFjWZJtUdSD55AP3xtXH%2BZipC0EqdBGDA4CoYEU6gRLGPU11QhkLTBiEYPiqOeQgwTCl9aok1Qr5pFf71qEeNxjy%2F8F0GoqYPv75Yh9j3x4DuJ%2BuEzHRpAq2lMqb%2BqfTdiq6kGtzfOWsv0c7lSeMXDHBDe1MT%2BLUgx0Pg%2Fp87u2UicdIvqQi8DkxhcUwUXCedMpb4NQjwY3npTmgsURJavLwCRyEcN2HfWsDVGfv%2Fu9ZUWUx%2BPYFueUKwaNvbtu%2BXps3eVWbN1GcgVrdMnWJ7WmJz9SD66EBidag0NF1Ukep0t5A7sFCWdhzvYwHv6L%2FBehXuHqfaBwBEU7hfVLcXvS4VQv%2BT%2FvaSIl7cbeMc7ekv9i8S3e1L5xxpvMGcu1EYPbKyCiijjGXcDKckm43PqU2qNWlXusZMiqF82cuVzolUHN9NNR0HZPxFPV9V0wLtvq%2Bk4DqOwVWDlzuQLVdqFiP08cRX7aRlBVfR8cb55bWe5LExnlcsDp1vAP8Q9BucPMk1Ulh4GnN0SAdxcNHv3q9ohx1Ati4S%2FtkWjIDe3hQdkUGrGRaFBiUdiTSkI41UkMuuQHP%2BEaSQYlPQTFWJF03BNPpTu5KFAdkWgDukzsZKMG0Q1TAQQglScOaP%2FdsZ8%2BfP75D%2F9Uu5Gs3FY%2F2SxPld0DHOciXI9gqjcEidXjE%2B3BLosy0OcX3T7O5g65ROGyzQ2BZs7WbZVnO5ydLe32hMwTQ4wnnKXW6XW5LAa7oaXOIHoUl0FgLQLH2by8wSTWeAx2Y5PDazK3BqZbeJZwXGPaYhX87ZNszoDdaRxotXO1nNlpdvAPFWHDm8PqEE0sZxDEqGzxisFNnuCWetPcGrObN0p23tTZwMuRVodSV8%2BLTrOV3eRvzjQZiSjaLYS1WEJe0kNsJlZu9LFun7%2B%2BwW4gRDRbaxw2nrOGm%2BxOj9cmtbp9ZqeTM1m8UXfQQCSTVSQox6pvtjot%2FFpHvIUjJovFEoYvHYV9C5Y%2FxN9OfcalvII37UEhTbTg%2FAQIaPb4Vz6j5u8%2FaViycMod%2FfkDcpu8QZbZoeBi%2FvbzP3XPsZvOubMtaPHkD9jt6%2BU2O7vqU%2F9C9SMvgrXpQNG%2FE0oJxun%2BCiElUa0IKQSUwERxOntKSV7ekcuh9VBZBBo3VUcB58ofKBHCwLyf9qFosz9Ibf8dGqwaBMjRig4SGOZ2UkWI7UiO9OfUPdxOYFApUZyfpY7mgEc5rtNGGk2H1lPhAk1Hp%2FVAMqQEHEUfEYkkUQq1JMdzsX7kklRrTrUi1wMcDjmu1YYfATj7Y%2BpGpPEBXuoQIj8rR9mgCl4C9yqmF7xnVWxGVniNqtpVmXBvQ6iwni5YQ8a1jYrXtc2J13HvgkvqWxuva1sbr%2BP2S5ceKGyBwDv2DbrToe1u6BkAJV7xnVLUaq0sJB8pFqcUIPi3yuwxi4JuLr%2BP30f3OkPQ72aO0xYo3%2FEsmO3QO5qEF8S0qQH0UsKXv0brnl9%2B8M7jF174%2BDsfvPOl1au%2FRL5%2F9DsbNnwHL2pHR1NTRxMZhJtHktOOxLxErPF6YlLvpC9YP73x%2B4ofw%2B3xVdrHcDE0dQQCmCRgvt9b35xINDf1CDcRSfJ%2BpYl%2BSf8YcurfmXP5F%2Fkj6J82jNsrkWiEuhVlgFfyNkB3S5MUzLhoNiwSCYcxQ7Ui4J0Xh7fmqRbaPa1tzujxkBRlsEHy0%2FOM4pYLPb7g9O6BQJN6l9zQ0OGyCaZz0vMTbHOzXfQ7a2tsterTcqxeInODoemdktw%2B1SbVhKwtW9ffe8VKadK0OVuC3bWzyKm5LeddsWTeorWyY9IMtUFutdu5g%2BRn533qkocdvLs2HmhU75br%2FMmWtD8zA3OP2t1ea636jEzqYxJZGAwFiDEd61oTsrRuW3%2F3pYNi3bS%2BRd%2BGjOfVpAPNd6y64Gsz1GaZleWIPoYL%2Fv9mTeQBENVEguiF1aC4YeXxFETw6QyPfn0m9g8IrMFAvKM1EI11DARnbqibHk%2FIojy5rSdgCyZi06y8sS024PeuO4MfwQ5Y9yKRZCqyYaF30vzeHlmUprR21tR0t0yz8KZY66zWuGvxVQB%2F36kP%2BK38t2Hu6NQ9SFJfw0AdpqPEK2qTMpf2VCqJwqPoJezTL824b8akoL%2Bx03nhh%2BoNo5e77psxg9Q5LzebIKD%2BfsY34f2MtB9fk9v5b8PT6tYrgv4kRPwd0q9z3gdJSJ0653KjCYPwCaR5aUY63eW48O%2Fkdo33yxX9wCiMv2QTrk8eGSI6Ag6moG9t2P%2FF7GRNlDjl0gw7pJ5aOXXqyqn8SENnXBmbSwUYLyqJjv3UmY1nKr4t80no0faXsaIEiF%2FBRaIBnItSce4OUif7W6Vm9T9H1X9Vj71BEm%2BRdmIJQST%2FZfVdudUvh9S%2FqqNvqT98g9SQ3lHibZY0mRVHooyDN%2FFHmTgzjdozKw28NwQ0hwN6BCoPKaEk3YtKwNhwRLXuk076CGoZNXDQcRwZvreTZY9EZi%2Bd0s4%2Bztv8iei04JQl6ZbDD2eHV7X4uHuFVfPrOmcs6m6Kr7hssr%2B1VZFcEZ%2FPdJkn1hOs8SXS%2FNFFgqt94PIZzZ3tdaL6Q5vo6piSzdy737pwsX1VyxUrF15iJ4uNkq%2Brbyg1Z%2BO8VsNC1UmcvORPRfxtPrfRwL2p%2FoA1eZp6Z%2FaGffoewaXcA%2FxBlKlQLfhQL%2FoPgBGP3qsA7IQS8qDVNswHKRSheDUvA3Q7MZoRcJMxlEygujn1QdyzfPfq3dEp%2FbXh5e5YXW2Ngfvza0ZF6UgFL%2FE0fTq4LBlvTE2qb%2FKuuzYSXVnjTfM1osvqMHVbm9950quIZlbqaL6YP7jk3kUtA0GnX2nvq53f3WoSsvEdDRnULgo2fN7lNZJgI8%2FVWi33c3bBZnGY05%2Bdm%2B3qc7fNmj4YGKLj2nfqFP%2Bg7jdDlxEV5XsJQZP6hYrS1l0VQr4c69Xueixp90gnZPmE5OF22j%2BSYEWHlZ0K%2FHgsh%2FZtsbh6h2DNRlvv6jJh9XaJaHCZDiUDKNTMkvb8vsqCyf3ZNdSmO0fa0Y4baJTtpbKzuVzeeSI7fCKr2Z0WypapnXJ4gnoWy3PoUIlIQ1TXdqhQJIXp9Wx5fYdpeWh2TY5D%2BYVyKd0jw3iumwi%2FBC3cEy4o83QlZnW79MrCgCjbhWXBlRZVVZZv4rIKpXC01HFlHdHLoeWVl6UVc%2FJ5uGm6CViW5mulYMk%2BHqNYr0AyUPivLg2oMs2MPqtuhHyRyiwvNJej1Br%2BfcLyoAyu8D9B7bgmzUqfFobF5nKnK4%2Bt8MPJkI%2FxHUNWk117jugWF%2BxazTAALQn6%2BUE9lhoI5ApGA%2FiuJOsrlNP28SVVuBVajXmircLel46w2bJS1Q0Ft0KDuikDFL%2F3pYrid1Q4FvofwRIo4R9h2ftSwc6jHAMqLcCql8YPHtlzGoByNXYN6v8hXnRaOhUvx0sVLCexwupGDR4NOYC7PePa5keIPACnuAdD7dEadRuTIiS6Lb7uskb381My5yjzF8lGCjBRqdwrWJCagfB3yCy7XT1i92hbcZ5Ci1FJkgYMDf6n%2BjspIsHFjJrTOdzSMuOa9DbDcj%2FnH9N9bIoGVgzHPWIQuFuYtaMRaq8eCKI0gEF6lPOZjBz3EEvaaxwSUT9U%2F8JbJZPJJLBLolH1La%2FRbF9AbC8JJjv%2FmMnssKjLRBJyqj9QXxNko0Ux%2FX79epfiXkm6fmKwF%2Fen1HLc6LxloXWKvGa5rVCVL83VuiPcDEX%2FK5pTXOxHfx6HHB0t2FI0qI2rCZFTrvPWU67zVuS%2FkTsLnc7IKhFg30e4FOkqNSfH5PtkmUy6Cpiv%2F36k2sbqCeCFNa%2BURpoY0sZoYmCgCr3qgZz6s8I0gP1bYiR%2BD79H56NOz0EVWCTy2%2FfffvSCCx59W7uRV9995eqrX8GLesOXNm360iZ%2BT%2FEl3uZqL%2BFyzSZ8XxpTiI%2FG0nkT4zznFZ0t4ipMz5v4q9ssqbdKUZt6u82knPCrt6PZwsnn0XySVnyPR1ZXAn72yx48bWJsu7apnI3Hy8bygUK5Js32qcytapqgmn95uexccj205vGgJ%2BeuOeG2SORmKZr%2FqKzcx9SFctMJdwMUFZDJITs7dnOp1EKZCxg304Cevyfya%2BvlKqv6aXK1qIj3imL%2BL6hL%2ByvUlFfE0VKZ7E8gBY3M%2F8VoJCFgizH1W6VyC76nH6b7jiibYVxUmVIEspry%2FLgZIlCeP11Z4zs%2FAwvVwtGFEut5S1JY4lfyT0N%2FevOLo%2BrUEgjcqc9IkGpQbv3iW7Co5b%2BKgjvpzYdH85PLcc4X21ouwEGl%2FS4qnUAvoSlXUUhR1eKr2VWFTB%2BGMl6FsiQsVD1R3urlAAIoSn7JQkmiVVCHSpCwDH%2FqPepXQ0Db77CJOAImohB%2BRPWr31ev5g%2FkE%2BzTa4lbvZo8xdWPffQu9yJTPCNB66s%2BzXoJt%2F0L6hSoCuBIoK8fnBGG87OoRckJpLqyWe4YbpGi50g0%2B3I3UD85Oa0fzubfoXxPLbW3FDWzigmyJeM0tQkax7PqTy80%2BUxfUHPlBZIRVNQ%2Bv0xRm8REKPoLmNr0%2BUo48v9GFbXPKylqQ2IKm00QddgyWGMROCTxdLB9nCY8P7j2DjlsV%2F%2Bmfr0C0r%2FNkeXbbpPlOTBBwT0mVz1zx9S%2FwJecBF9Wgv3p032iP2v4VSgfgW2G%2BHUEdEXU6iq4CtpLJfIN9XQG8dwa1VoO8XC2SrPDDyCOQptXgbcPvlAgBfxBoGwftQKeKFrNTASPt3pGGqDt%2FQRasn2kri%2BH6L80MJRsmVYJrAKyDItpJUy3%2F15WYIJqcJ9Q5N%2FLFJ4c3dc1URpWl9hW6mu50MUIelg4ucTPf15zs5DFo1c0VSp1tKB9jkwIyuM45kb%2BIP8gHed%2B6jO3v0KbIknzLy636E8KPTdCuUpB0wLo9JKnAO6pv0vS31EtBha%2FfJemkgLVVnd8KCk4qBTpQ5m7FbifBKrPJcq0pZAFVG%2FXbOFz%2BTcq2MLrcmV28Nmi%2FOHskh82bau0k8eWCaPijQPWQ5lUvslwVCfHkXBMIehqUgtDNLeauH1huvZTbYmw%2BluPjyWoNGEuxRLR7LK5fSyXFUyK7PURQv2v8D3XOt2NJ6liBbmPGOsakw1kbeOs%2B31Wm5qpH%2BiJWSzqdPr2O7zc2TmtnrzCig6bBd%2FvgQmzOlz0STWIlmZEQfupogOZFHUZ7EkUnMn0RrpIMqAgHRJAOjIJ3yGw1I%2FMAp9q9S3Q%2FclADNm1wEeO%2Bxbwg5OIYHZLY3ehG5lJk2xhco%2B6JWybpEVz2wrR6hZyD0QXZbeDVB%2BonmlimpkWprdAs4WEZDSQppsDlcdCBJJESIYFuAtUnC4GIF2C3Uu2Kv7L1bdz6FxtqxpG4TqQOqOUNAJ2HLvPWA2GgDy4O4vaDrtyl6P%2B1fAll%2BSyFcQ28GHqh7fvvf37udylf0fNwhzgz87Y%2Bcf5x9GnF6ygHu18sAbipWeF0YPBgp2GaKeQduxxdEr3SgbH1kvH7tvqSLhedomOvZyts2dw8acu3dY%2Ff%2BucuMtCuP%2Fe4zC4XnH3OLZ8ZuxTWxy8dJfU5dhDeKPSlJy5pn%2F%2B7u3XrJhmr9C5CuleGflGQocKnlAUaRKp0BAHV0ZwUt9VCqk6zYOgRIuMfePJzdmBdpPJ7%2F6B23%2Bf%2Bsp9NMDZevovvfYHG5dGPISQq1DojqNckchVrCcCYz%2FQ0hI0m3NKDRfkgsrnamo%2Bp0CAq1FyvC3a3Nak%2Fs5VX282x9Ufy3E39VAx6o7LpCvO2wK%2Bch9jNqpJCutcIOooKnYWtDK8gTRVYygRQfwgzKM5%2BjP2jOZdx3r32Py7rQUPOzAnoRs95NvRAR0qLGU11Taqu1bUYSzMcWjMEir067JQQHfIrLBHsrgv00%2FWavd8HRLMEEYFSW3HCSNQehnrHztKqHcDyo4VfZ6gPKCR%2BgufwA8GegxUEo4A%2Bgd0BASHiH6jYMLIsUdQJTs%2FC641KN4oCHWolCMLlMfIdtWKScjx7SM5LD9HnfmhrGI0S139UWfUnxgOXdJFW%2BAMcGjKr6eHAttHF5sUoeArYKDcxMSYcKA%2FxUDhPiEOEAPafSIUFArN0r24ynI91EPARDXvIDYyvqZaWeroBOUABQA%2FE%2BDXC7PWafDLQY2oiwpUEyj4RQtVlUp1GrM7In2p2A7VuiOW6otMiGOo5Mrp05ejVuTy6dNX%2Fk%2F7mybZQ0nUmfrbx3U4KueDnlHm5wdh8FFeKnoaKKh%2FTK18StOPhwG9Xo5mqXAxvw%2F79YQwwDR%2BnAKQQ4izVXioB84qcppWB7IqjU45z4CE17OvF1Dw%2BoTFqxtz8dxwtogBnF9MjIl%2Fin%2BK8s3hM9laIn0TiCbTAXL0T798bPXqx36p3chrv0O%2BGC9Xaj48Ecv8U8UEeBvUEsDlTepiU5OvlpeNGvpnKF0RvUooWhIjnx6GeBapXCQYTw9DNg6%2FOC3gZjp76oNTj9Kz6Jqobxb9NDqc08vcKReOpcsQV2K8InXFaXW3aI6Ofr1k48rp7CX7rx%2Bv1UKPsfvzQU0Kc83i2VdILmd2%2FyX55zT9luN2%2BCu4nKfwPcK%2FCvDVU%2BpHh8%2BLaldIf1fA5h3ndT6Fln9%2FW%2F9Ce1vndfvJtnPVO2xhm3qbafHVCN1X363UXHq9xuVD8OSD29Z8pZ5cZrern9cAdGW%2Fuib%2Fud%2BVK0L9a42r6C90kL8KzxwLQw9NkIQJL0ASU8M%2BVG0KsUdgdvpgP%2F6NqqP0%2FgHZFUfGEijZLHpiIgvV5%2FBltrj8Qd7XQd5p4P%2B7tJo30NMO6VGBwahSPMYiaaBYoLY6uEnciyhhh1Z%2FvvacG%2Frjpsvnpzs0B1Id6fmX8119l88XnOxe%2FuGrzzHcdu7UtY3%2B2vmXN5zUyj3ZcPl8p1sZSs6%2FnGXtwrV7Ka0XZdz83fwjjINpZWYw85lL8BRK4nGyIir2RiOsEyipuEcIakpGjWgBjLiHWOgj0Yi34gW1kKPxHt2Na5q%2Blwg1RdRSpFDNzosb44YJXnAfoEOpZW%2F%2F6u1lhYA6leevezbI26zNHO811M2dc5HFxpk4i1jPC0s21%2FBWW5DnPQbn2X1WK43%2FaM2n18DfSoybbNHijFpamzXI31eRibGUOxSu%2FlT96YZlq1Yt20DaSBuG6knw2eusHs5EPBfNmVvHKdaQzcDfz9ZsXmLDWGXy2U5OsYSsIn8CS12jQIyD12KKqZrLPy7mSPdICmd6WGHG8NDZkkHuE4h9TU8FpmUO%2FVjC%2FEinToFyoNDz2p9XD6g78WgQdPG7Z3R0T%2FZ5dTM9lsL8Ktek7szl2L%2BgQwGgwkZHc2g5Su7NvVqwGy2Ua4KSXUwt1X4PaM5paaEu6jQ5zVFyNabxvUksVt2T%2F4VeamYPlLtffdQsk%2B2sUTY%2FzDXl%2F05W53%2FBz9UK3p7LjapZ2ZxOm%2BUlZXrL3HHGqO8%2BwVroDaCTTnTxitMxmiAAYQzVJQH%2Bnj3oIHnPaN6Zq6sNSLjBl8tKgVr2mj%2F9CWi9dnKca8rBQBsd5R1tzVlgrl5pbnPw6kZclCr2CHxMnHohLz%2B3KRQokzALyeIKFU1TNCiayJdoHvDYe7K6mZLm8S3uJ9dojuaJ62%2FqN%2FtjQxnSnhnKPw%2BLNrLi8ZKyJ3x1YhiI1aNAtP6NzCGzYv3DmaGh%2FLvQZnt0evgIhTFV0kE%2FPYxAnOHhCQUZdCWY5JWJwMzlAGl1mpNbDU7yyGnhRMILsYhH3VRAijrPcBU8%2FCj1Y9NY6cnGVW0CjTLaz7E3epvaT%2FLtTV72Rs%2B0WVVmd0dz%2FMGTI5F0OsIviaqDlbbO5X6xT3PeXbXHRtf%2Fz%2Bfdka%2BeKPr8KF7IF4vBsT9MFPuPJMBTBMq9hQxXelQ%2Bbewnf18ap4Ib%2BmSMrtDU5zqlD8QANa5MBGh%2FOwOvSDfcV2d66mfEWsbGWmIz6nsyZDWQSmqmxDneYyvjHPmRXHZxeueyRGLZzvRioKnGto9nIPkibAJA16adcOZRQr1iAP3bUyBR7T4RgAWTKxhkCYFwshq%2B7iV9r0whk50cmRcTg4fy5x4OmmNkHndIA2%2BYuMbmE9dwGYB4KFTsvnDE6Ah47r%2FfE3AYI%2BoXADpkdlENcZ8OZEEf8FFGZNxMs6ZLpG3SUFLL7Q2kcFU%2FA%2FJsw%2BvWDa%2F7emewLaoeibaF1B9qUNnuqWK3%2BUfXYVL1v%2FomD15xxeDkPnXTOKSVcCbDGtOu0YQNpGAP7U1HU58UrqGu8xIbHtkQ3LVhb7Dx46ET3Ffcm1q0YcOizNmf3bC3VjWfAcpSv3MyTlgJ23FHQgmgvk%2Bgk8pL0mcCDOn08MDAQlf%2B%2FSlTZ1z12fnqntOhbOTL9%2FZdevbAPN%2Byby1f%2FuUtC%2Fixm8ZBo59LTXEW060hGrTDplNprWd58fwB%2Fb%2FE27BdS%2Fs7U%2BrGVCeQ46nzaw9QccnmZerGZZs3Yw9aVHt%2BKh6HN4ti6lxIhT%2FwahnZtWwzlY9QHQ2c79C%2BdxzvVDKy8GqKWQERO9YAKbpsDUTLdWV5dE8PVPjvj9pqw7ah%2FPFVtkit7aj6G5xY9mfJrCz1j1e0BcnPol4UjtrCdbahIVtd2HaURujnFJR8CuOuUUfhrGhgKKgjCYNSvCc1WKlEp8wHUaAYynFNyzZn%2B2MnYv36dbMDBTonl%2FT%2Fma5IKAyEGz%2B4eRnVtaX6tss2o34u8mWorFtuFgm4A6qK%2Fyp%2FgLEBVat5WnPDdKA574ubuFJ%2FIUfZ%2FY2Nt6mN%2BZNNTSTaeI56gKwkXerTe9DDHUw8%2FH35FY3nNN7GGuBKWhrV9ep%2B0k1WjNWVaHkW1yA%2BQHWNu8rtBw2a5YXuE40rs7%2FGA%2Bj09V3hA98yRnFPOGr8ltGlsFdD%2F7tRce3LH6Trcneuiy7K7J3khKu%2B3qUaXPWaX7T6%2FKfj9BX2eZq2XAcZT79u1ClJzUtHUqfqSMWBcZS43Ena0cUGLgpkKxB1QM%2B0Fxz10wgg6r5rltnFpH05pepUq3Y2HfYqeKRntmUFNz%2BXmcOs1H31U6cC6RTVLfCg7RNBF1UF2%2FwBgu0fFQtPEU1sSg3VcNsR7dWq3af87tUFn1l3ltXpaJxpNvtcZkH2WmMst3JqRpxUH%2BWC0E1qOGtP66s1MYv%2BVLu8%2FXFXvV%2FZbunYYBeVN64ls0ur6NzpV9xzlmQwB5qC4Tq70WC0tk8dWJXeHvkD0h9zJOM0vD86%2F1NJMaIAolctvlByferCsqOKDKceOfUu1PsmoFCamV5mCrMUOCi6V6FJosMF22AcrKJgQDVhfYh6tepp%2FlYgvnCEAbJQ1L0rOpajEmRcasMiPfxhgGoVo4rwreQpV6fUJHH2e8fa1s2c13Apl1b89a58ozdoap2sjgLN9uISl7P1DrulyeIkt0zr6JjWocoPOZsaXPb6jtqBblsgsaRre2xHi4nELm0MhG1%2Bx1SXwLpFi53b%2BaHRYo%2FIrbZtuWAKu5cSEXfybnnmUCaXGTpQr0xK2O2WWY76f%2BnAjNVf7nCZHU5XqIkTnpt6VtvsFlPXg1031g%2FVRdpkkyVpD7jnmax88QwDvg%2F66NnMRdRXTcGTmQc3cuINwN5IQqi0yzb%2BYFVHuVqI5s4ADfg5oE4ybDLd28mFSFmYvRoomsWXEdLU2Wl3GJy93ZNb%2Fd5gqmNaqJZSO1l6PVRy0nZIj%2F45EetjLguh1rLqR%2BSK0hO6NrsqcNX8zoUdjQYDJ7tb4os6%2Bi%2BY0qpY2AWlnLRDWdGFTfGY1gV0zNAtJ7pdo24se0D88AwLY%2FgZmE9iuP4V5v7CSR%2FRThaHLh%2BUeBkXwU6BC7lGOevK65udTv%2BtS%2FPfW7qj3ljTcj3b9OkbV85t8xsMj7Ddj7DGpthZKwKPvso%2Fc%2F1K9aLE12fMWLV1y1D9ua8lyJdWXr%2FbG%2BnoCFutf%2FmLILe39ITUV4igr3876fpX5g2zeB52sWnIL4fXHlgeUzOx5QfIvJQyrKQE9wHUqVq%2BPEaOrz0wVvNbJZVSfsuMzxN4l9PkedFzw9V5Dj%2BnzpgoT4ZxCxJfC5RWLc74YVHxKlExCYt0JAOMatREhHBSCAtSfod6x6Ls8HCWECLwXZ9nd5Dz1T24JUdWs6fU3%2B%2BfcnT49Qe%2BkBs%2BwdsMZgPXMp3U5S958snPP%2FEE7bvkOPCuTUDTUQ%2FUzirLhML9yPahoe1D5Fj5jWsaoveyP00PehdUAHk%2FseDVWsvDWXXXsyn%2F4wfpXc2V3%2FQxli3jl%2F5hj%2F83avSCfpTNxOEKLmTjxOEKuxgNlsQn0xgct724mhynupNW1Ph6o3RYS3%2F%2B2TJrzLlkFz%2Bip3qCHKf6eqW02QJLjBYuuj4sobhCWqa%2FYHGEHpcnumuWSOhxeaL7sOakNR6vvmo%2BYcfFA8UFXEPZf9UjyudIOyNwx%2Fi90DdsujS%2FFX2UAwvWSVK4NxaMhAGw3oowp%2Fuc8CTi7D2rBgZWwb%2F60faR7SPsEbjkXy4G0XaqhXPwe2cePjxjxuHD6ssQuR1fq6PF0E%2Bo2t1nePTn8TUmxz%2FA3crMoCc7egESuoTHYc7mYdg6etORoOhR7BBGD%2BqJopELrl4S6cJNRtEAsLP%2FOdvnJq0Wo0GolY2Et9VFB2Kf%2B4bZvVyxfOMz3WdFfSIryj6DwWghre7aQbdiDrkTL3A3vNDuDpk93HqXwam%2BbWmUJZfNn5ozKV5Pmmq8PF%2FjVY%2B2Tlk2M2RzSXKjmbQ4RZcQavEYrN%2F9rlXwtIQqzxQNMzPPfHYLvuPoO9TbT8bpGw5CQPGd%2BSyX%2FCyf0Vxjd2R9NmsunnXYa8xGHzn%2BsSfM5J0y0DZEXWWxkXjcR75KBLNLHi7XvX2G8VOrf4Ykg0AMdBESIpo7MgAfyakA6rkqpI6UjNs0px7cMV%2BD5BF49Tez1VGnYmq0WIijp985m4Sn2gJR9b07riPPFo97OYbUZbxJCpot7H%2FlpZBicglCPN7WOfJkcHqc3ElWqvvz%2F1E6bIQrG%2Btz6WkM1SM9FBTR7FSs8KyBBytSmNEoquJNFN5EQyTiCrnKDx1h58yxCepPHU5nxGoxEQeeOZi2m80DxNxncVhr6BmEfUarxejw%2BWSiHhWk19bSY7aKR5MsteblJpfTLtjimBouXsm3d3djjYM%2BwEW0El9dM%2FueVRWIsXwe43R7SgbVZqrnqoJ1X%2FkuF7pcgf8duv4q6vayV5U9zMV91GxO59UUjW8rHV6u799WzKMT7umRCXbYUKM%2BfoaCcwgaoqZUtmodV3p%2BX7akb4dnU9B9La38RPFUG2SCC90tVA4XwEFhyOpZZrUCsgWYHsczLFBBVGNtstoN1bw0Z%2BO4fYIbvZVt4EUcJEKOhHeincWqONw%2Bq6w5Go%2BWGOSR7LhKV%2BKBqbBPpfUvOf9QqkpDyVhBeyyZQGMsdA5FBUqvFMtUyGq9vjnsAJU4UcrxldP1CCaofyDkSAifoP5QwWx%2BSyUGxp75BzGAvtG7uQ38LehlyEQMeh0TeE6Bm7tYdXqdkt0uOb3kfYlNwmOdDyacOq%2FqlFo1v%2BPTmTi3E%2FglC9W11b34A22zmLzvb231Q0L2Bgg60OTW4YdstO%2BYOJnO38TtpH7zy9ymokWyA79qlVSn38HtpFlImFnhu3b4boNWXklOXV0Iwo7lQ1hrZyPFcwtjwFP7iEKSHSSJw509kh8kj6pr%2BH1jR7km9vcvqN9657vffefkv%2BfKxge1X%2B7RdjYUPIESN7gTvRkB%2FRMYtEkaVkdHApmdBPpnKmz0n1xSWFOyVIuLrinZwpoCRe6kyiVZoHX088F%2BUX4%2BWKS4iBTP0IWxGtZgOdMaV4KTayqHQF%2FVihBwTbgDXTCmKoOBJeNhwJMzEVjtjIFLuU38fPR7hqNG1JS7g%2FqRCuy3vmQ3W9Vu8qbVbP%2BSzazGRJH83MzP90Ck2m31mMjP8TiLn5uwD2Ugr2PFvPQjB5BnSJvQxGQZZEB%2BLopqzGzDbMmbkAPkZVJjeO5FzOSBKCgJze2ZS4Gemc9twrwY6u9H61iUQTcRvtdT9RW3tRxAWwFs2tcuJRnI6xjmBdWjbgFNRHMHiF1uHYBfUR%2Fut5Ug2jXAaT96%2B9RH%2FFToRwIzGbKmVJ1AZQnoabSB1yyIg7ByAridHApPMjyw0OiV6RjSbCuzwLAvFizBliWJua1tsuAgvNPbmljYbpt8lkWam7b3XZiOiKJskMOtmfScnsbPW208knwjuXrXK4Q1iKIgNyYXXDVT9C2Ye%2F78GQ5BEEXfFdde2RwauOysdJNL5AzCy84ard%2FnGAVN8alecnFdgu5Gbd5DJTL%2BhHZK0vApVy3OfU8XTSJg1TlssivsPYUlIqvn66PzrVTymCc4wgF6SDNR0pDf%2B9Gp%2BVnsUH5WtpHYsuhOaey8zdwLN47V8MTbm78g687%2BP3cx6tcAeNpjYGRgYGBk8s0%2FzBIfz2%2FzlUGeZQNQhOFCWfF0GP0%2F8P8c1jusIkAuBwMTSBQAYwQM6HjaY2BkYGAV%2Bd8KJgP%2FXWG9wwAUQQGLAYqPBl942n1TvUoDQRCe1VM8kWARjNrZGIurBAsRBIuA2vkAFsJiKTYW4guIjT5ARMgTxCLoA1hcb5OgDyGHrY7f7M65e8fpLF%2B%2B2W%2FnZ2eTmGfaIJi5I0qGDlZZcD51QzTTJirZPAI9JIwVA%2BwT8L5nOdMaV0AuMJ%2BicRHq8of6LSD18fzq8ds7xjpwBnQiSI9V5QVl6NwPvgM15NXn%2FAtWZyj3W0HjEXitOc%2FdIdbetPdFTZ%2BP6t%2BX7xU0%2Fk6GJtOe1%2FB3arN0%2Fpmz1J4UZc%2BD6ExwjD7vioeGd5HvhvU%2BR%2BDZcGZ6YBPNfAi0G97iBPwFXqph2cW8%2BD7kjMfwtinHb6kLb6Wygk3cZytSEoptGrlScdHtLPeri1JKueACMZfU1ViJG1Sq5E43dIt7SZZFl1zuRhb%2FGOs44xFVDbrJzB5tYs35OmaXTrEmkv0DajnMWQB42mNgYNCCwk0MLxheMPrhgUuY2JiUmOqY2pjWMD1hdmPOY%2B5hPsLCwWLEksSyiOUOawzrLrYiti%2FsCuxJ7Kc45DiSOPZxmnG2cG7jvMelweXDNYXrEbcBdxf3KR4OngheLd443g18fHwZfFv4NfiX8T8TEBIIEZggsEpQS7BMcJsQl5CFUI3QAWEp4RLhCyJaIldEbURXiJ4RYxEzE0sQ2yD2TzxIfJkEk4SeRJbENIkNEg8k%2FklqSGZITpE8InlL8p2UmVSG1A6pb9Jx0ltkjGSmyDySlZF1kc2RnSK7R%2FaZnJ5cmdwB%2BST5SwpuCvsUjRTLFHcoOShNU9qhzKespGyhXKV8SPmBCpOKgUqcyjSVR6omqgmqe9RE1OrUnqkHqO9R%2F6FholGgsUZzgeYZLTUtL60WbS7tKh0OnQydXTpvdGV0O3S%2F6Gnopekt0ruhz6fvpl%2Bnv0n%2Fh4GdQYvBJUMhwwTDdYYvjFSM4oxmGd0zVjK2M84w3mYiYZJgssLkkqmO6TzTF2Z2ZjVmd8ylzP3MJ5lfsRCwcLJoszhhyWXpZdlhecZKxirHapbVPesF1ndsJGwCbBbZ%2FLA1sn1jZ2XXY3fFXsM%2Bz36V%2FS8HD4cGh2OOTI51ThJOK5zeOUs4OzmXOS9wPuUi4JLgss7lm2uU6zY3NrcSty1u39zN3Mvct7l%2F8xDzMPLw88jyaPM44ynkaeEZ59niucqLyUvPKwgAn3OqOQAAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAHjarZK9TgJBEMf%2Fd6CRaAyRhMLqCgsbL4ciglTGRPEjSiSKlnLycXJ86CEniU%2FhM9jYWPgIFkYfwd6nsDD%2Bd1mBIIUx3mZnfzs3MzszuwDCeIYG8UUwQxmAFgxxPeeuyxrmcaNYxzTuFAewi0fFQSTxqXgM11pC8TgS2oPiCUS1d8Uh8ofiSczpYcVT5LjiCPlY8Qui%2BncOr7D02y6%2FBTCrP%2Fm%2Bb5bdTrPi2I26Z9qNGtbRQBMdXMJBGRW0YOCecxEWYoiTCvxrYBunqHPdoX2bLOyrMKlZg8thDETw5K7Itci1TXlGy0124QRZZLDFU%2FexhxztMozlosTpMH6ZPge0L%2BOKGnFKjJ4WRwppHPL0PP3SI2P9jLQwFOu3GRhDfkeyDo%2F%2FG7IHgzllZQxLdquvrdCyBVvat3seJlYo06gxapUxhU2JWnFygR03sSxnEkvcpf5Y5eibGq315TDp7fKWm8zbUVl71Aqq%2FZtNnlkWmLnQtno9ycvXYbA6W2pF3aKfCayyC0Ja7Fr%2FPW70%2FHO4YM0OKxFvzf0C1MyPjwAAeNpt1VWUU2cYRuHsgxenQt1d8%2F3JOUnqAyR1d%2FcCLQVKO22pu7tQd3d3d3d3d3cXmGzumrWy3pWLs%2FNdPDMpZaWu1783l1Lpf14MnfzO6FbqVupfGkD30iR60JNe9KYP09CXfvRnAAMZxGCGMG3pW6ZjemZgKDMyEzMzC7MyG7MzB3MyF3MzD%2FMyH%2FOzAAuyEAuzCIuyGIuzBGWCRIUqOQU16jRYkqVYmmVYluVYng6GMZwRNGmxAiuyEiuzCquyGquzBmuyFmuzDuuyHuuzARuyERuzCZuyGZuzBVuyFVuzDduyHdszklGMZgd2ZAw7MZZxjGdnJrALu9LJbuzOHkxkT%2FZib%2FZhX%2FZjfw7gQA7iYA7hUA7jcI7gSI7iaI7hWI7jeE7gRE7iZE5hEqdyGqdzBmdyFmdzDudyHudzARdyERdzCZdyGZdzBVdyFVdzDddyHddzAzdyEzdzC7dyG7dzB3dyF3dzD%2FdyH%2FfzAA%2FyEA%2FzCI%2FyGI%2FzBE%2FyFE%2FzDM%2FyHM%2FzAi%2FyEi%2FzCq%2FyGq%2FzBm%2FyFm%2FzDu%2FyHu%2FzAR%2FyER%2FzCZ%2FyGZ%2FzBV%2FyFV%2FzDd%2FyHd%2FzAz%2FyEz%2FzC7%2FyG7%2FzB3%2FyF3%2FzD%2F9mpYwsy7pl3bMeWc%2BsV9Y765NNk%2FXN%2BmX9swHZwGxQNjgb0nPkmInjR0V7Uq%2FOsaPL5Y7ylE3l8tQNN7kVt%2BrmbuHW3LrbcDvam1rtzVvdm50TxrU%2FDBvRtZUY1rV5a3jXFn550Wo%2FXDNWK3dFmh7X9LimxzU9qulRTY9qelTTo5rlKLt2wk7YiaprL%2ByFvbAX9pK9ZC%2FZS%2FaSvWQv2Uv2kr1kr2KvYq9ir2KvYq9ir2KvYq9ir2Kvaq9qr2qvaq9qr2qvaq9qr2qvai%2B3l9vL7eX2cnu5vdxebi%2B3l9sr7BV2CjuFncJOYaewU9gp7NTs1LyrZq9mr2avZq9mr2avZq9mr26vbq9ur26vbq9ur26vbq9ur26vYa9hr2GvYa9hr2GvYa%2FR7oXuQ%2Feh%2B2j%2FUU7e3C3cqc%2FV3fYdof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D92H7kP3ofvQfeg%2BdB%2B6D92H7kP3ofvQfRT29B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6D%2F2H%2FkP%2Fof%2FQf%2Bg%2F9B%2F6j6nuG3Ya7U5q%2F0hN3nCTW3Grbu4Wrs%2FrP%2Bk%2F6T%2FpP%2Bk%2F6T%2FpP%2Bk%2B6T7pPek86TzpPOk86TzpOuk66TrpOuk66TrpOlWmPu%2F36zrpOuk66TrpOuk66TrpOvl%2FPek76TvpO%2Bk76TvpO%2Bk76TvpO%2Bk76TvpO7V9t%2BqtVs%2FOaOURU6bo6PgPt6rZbwAAAAABVFDDFwAA%29%20format%28%27woff%27%29%2Curl%28data%3Aapplication%2Ffont%2Dsfnt%3Bbase64%2CAAEAAAAPAIAAAwBwRkZUTW0ql9wAAAD8AAAAHEdERUYBRAAEAAABGAAAACBPUy8yZ7lriQAAATgAAABgY21hcNqt44EAAAGYAAAGcmN2dCAAKAL4AAAIDAAAAARnYXNw%2F%2F8AAwAACBAAAAAIZ2x5Zn1dwm8AAAgYAACUpGhlYWQFTS%2FYAACcvAAAADZoaGVhCkQEEQAAnPQAAAAkaG10eNLHIGAAAJ0YAAADdGxvY2Fv%2B5XOAACgjAAAAjBtYXhwAWoA2AAAorwAAAAgbmFtZbMsoJsAAKLcAAADonBvc3S6o%2BU1AACmgAAACtF3ZWJmwxhUUAAAsVQAAAAGAAAAAQAAAADMPaLPAAAAANB2gXUAAAAA0HZzlwABAAAADgAAABgAAAAAAAIAAQABARYAAQAEAAAAAgAAAAMEiwGQAAUABAMMAtAAAABaAwwC0AAAAaQAMgK4AAAAAAUAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAFVLV04AQAAg%2F%2F8DwP8QAAAFFAB7AAAAAQAAAAAAAAAAAAAAIAABAAAABQAAAAMAAAAsAAAACgAAAdwAAQAAAAAEaAADAAEAAAAsAAMACgAAAdwABAGwAAAAaABAAAUAKAAgACsAoAClIAogLyBfIKwgvSISIxsl%2FCYBJvonCScP4APgCeAZ4CngOeBJ4FngYOBp4HngieCX4QnhGeEp4TnhRuFJ4VnhaeF54YnhleGZ4gbiCeIW4hniIeIn4jniSeJZ4mD4%2F%2F%2F%2FAAAAIAAqAKAApSAAIC8gXyCsIL0iEiMbJfwmASb6JwknD%2BAB4AXgEOAg4DDgQOBQ4GDgYuBw4IDgkOEB4RDhIOEw4UDhSOFQ4WDhcOGA4ZDhl%2BIA4gniEOIY4iHiI%2BIw4kDiUOJg%2BP%2F%2F%2F%2F%2Fj%2F9r%2FZv9i4Ajf5N%2B132nfWd4F3P3aHdoZ2SHZE9kOIB0gHCAWIBAgCiAEH%2F4f%2BB%2F3H%2FEf6x%2FlH3wfdh9wH2ofZB9jH10fVx9RH0sfRR9EHt4e3B7WHtUezh7NHsUevx65HrMIFQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAACjAAAAAAAAAA1AAAAIAAAACAAAAADAAAAKgAAACsAAAAEAAAAoAAAAKAAAAAGAAAApQAAAKUAAAAHAAAgAAAAIAoAAAAIAAAgLwAAIC8AAAATAAAgXwAAIF8AAAAUAAAgrAAAIKwAAAAVAAAgvQAAIL0AAAAWAAAiEgAAIhIAAAAXAAAjGwAAIxsAAAAYAAAl%2FAAAJfwAAAAZAAAmAQAAJgEAAAAaAAAm%2BgAAJvoAAAAbAAAnCQAAJwkAAAAcAAAnDwAAJw8AAAAdAADgAQAA4AMAAAAeAADgBQAA4AkAAAAhAADgEAAA4BkAAAAmAADgIAAA4CkAAAAwAADgMAAA4DkAAAA6AADgQAAA4EkAAABEAADgUAAA4FkAAABOAADgYAAA4GAAAABYAADgYgAA4GkAAABZAADgcAAA4HkAAABhAADggAAA4IkAAABrAADgkAAA4JcAAAB1AADhAQAA4QkAAAB9AADhEAAA4RkAAACGAADhIAAA4SkAAACQAADhMAAA4TkAAACaAADhQAAA4UYAAACkAADhSAAA4UkAAACrAADhUAAA4VkAAACtAADhYAAA4WkAAAC3AADhcAAA4XkAAADBAADhgAAA4YkAAADLAADhkAAA4ZUAAADVAADhlwAA4ZkAAADbAADiAAAA4gYAAADeAADiCQAA4gkAAADlAADiEAAA4hYAAADmAADiGAAA4hkAAADtAADiIQAA4iEAAADvAADiIwAA4icAAADwAADiMAAA4jkAAAD1AADiQAAA4kkAAAD%2FAADiUAAA4lkAAAEJAADiYAAA4mAAAAETAAD4%2FwAA%2BP8AAAEUAAH1EQAB9REAAAEVAAH2qgAB9qoAAAEWAAYCCgAAAAABAAABAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAEAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAL4AAAAAf%2F%2FAAIAAgAoAAABaAMgAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCxAwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIRElMxEjKAFA%2Fujw8AMg%2FOAoAtAAAQBkAGQETARMAFsAAAEyFh8BHgEdATc%2BAR8BFgYPATMyFhcWFRQGDwEOASsBFx4BDwEGJi8BFRQGBwYjIiYvAS4BPQEHDgEvASY2PwEjIiYnJjU0Nj8BPgE7AScuAT8BNhYfATU0Njc2AlgPJgsLCg%2BeBxYIagcCB57gChECBgMCAQIRCuCeBwIHaggWB54PCikiDyYLCwoPngcWCGoHAgee4AoRAgYDAgECEQrgngcCB2oIFgeeDwopBEwDAgECEQrgngcCB2oIFgeeDwopIg8mCwsKD54HFghqBwIHnuAKEQIGAwIBAhEK4J4HAgdqCBYHng8KKSIPJgsLCg%2BeBxYIagcCB57gChECBgAAAAABAAAAAARMBEwAIwAAATMyFhURITIWHQEUBiMhERQGKwEiJjURISImPQE0NjMhETQ2AcLIFR0BXhUdHRX%2Boh0VyBUd%2FqIVHR0VAV4dBEwdFf6iHRXIFR3%2BohUdHRUBXh0VyBUdAV4VHQAAAAABAHAAAARABEwARQAAATMyFgcBBgchMhYPAQ4BKwEVITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ASYnASY2OwEyHwEWMj8BNgM5%2BgoFCP6UBgUBDAoGBngGGAp9ARMKBgZ4BhgKfQ8LlAsP%2Fu0KBgZ4BhgKff7tCgYGeAYYCnYFBv6UCAUK%2BhkSpAgUCKQSBEwKCP6UBgwMCKAIDGQMCKAIDK4LDw8LrgwIoAgMZAwIoAgMDAYBbAgKEqQICKQSAAABAGQABQSMBK4AOwAAATIXFhcjNC4DIyIOAwchByEGFSEHIR4EMzI%2BAzUzBgcGIyInLgEnIzczNjcjNzM%2BATc2AujycDwGtSM0QDkXEys4MjAPAXtk%2FtQGAZZk%2FtQJMDlCNBUWOUA0I64eYmunznYkQgzZZHABBdpkhhQ%2BH3UErr1oaS1LMCEPCx4uTzJkMjJkSnRCKw8PIjBKK6trdZ4wqndkLzVkV4UljQAAAgB7AAAETASwAD4ARwAAASEyHgUVHAEVFA4FKwEHITIWDwEOASsBFRQGKwEiJj0BISImPwE%2BATsBNSEiJj8BPgE7ARE0NhcRMzI2NTQmIwGsAV5DakIwFgwBAQwWMEJqQ7ICASAKBgZ4BhgKigsKlQoP%2FvUKBgZ4BhgKdf71CgYGeAYYCnUPtstALS1ABLAaJD8yTyokCwsLJCpQMkAlGmQMCKAIDK8LDg8KrwwIoAgMZAwIoAgMAdsKD8j%2B1EJWVEAAAAEAyAGQBEwCvAAPAAATITIWHQEUBiMhIiY9ATQ2%2BgMgFR0dFfzgFR0dArwdFcgVHR0VyBUdAAAAAgDIAAAD6ASwACUAQQAAARUUBisBFRQGBx4BHQEzMhYdASE1NDY7ATU0NjcuAT0BIyImPQEXFRQWFx4BFAYHDgEdASE1NCYnLgE0Njc%2BAT0BA%2BgdFTJjUVFjMhUd%2FOAdFTJjUVFjMhUdyEE3HCAgHDdBAZBBNxwgIBw3QQSwlhUdZFuVIyOVW5YdFZaWFR2WW5UjI5VbZB0VlshkPGMYDDI8MgwYYzyWljxjGAwyPDIMGGM8ZAAAAAEAAAAAAAAAAAAAAAAxAAAB%2F%2FIBLATCBEEAFgAAATIWFzYzMhYVFAYjISImNTQ2NyY1NDYB9261LCwueKqqeP0ST3FVQgLYBEF3YQ6teHmtclBFaw4MGZnXAAAAAgAAAGQEsASvABoAHgAAAB4BDwEBMzIWHQEhNTQ2OwEBJyY%2BARYfATc2AyEnAwL2IAkKiAHTHhQe%2B1AeFB4B1IcKCSAkCm9wCXoBebbDBLMTIxC7%2FRYlFSoqFSUC6rcQJBQJEJSWEPwecAIWAAAAAAQAAABkBLAETAALABcAIwA3AAATITIWBwEGIicBJjYXARYUBwEGJjURNDYJATYWFREUBicBJjQHARYGIyEiJjcBNjIfARYyPwE2MhkEfgoFCP3MCBQI%2FcwIBQMBCAgI%2FvgICgoDjAEICAoKCP74CFwBbAgFCvuCCgUIAWwIFAikCBQIpAgUBEwKCP3JCAgCNwgK2v74CBQI%2FvgIBQoCJgoF%2FvABCAgFCv3aCgUIAQgIFID%2BlAgKCggBbAgIpAgIpAgAAAAD%2F%2FD%2F8AS6BLoACQANABAAAAAyHwEWFA8BJzcTAScJAQUTA%2BAmDpkNDWPWXyL9mdYCZv4f%2FrNuBLoNmQ4mDlzWYP50%2FZrWAmb8anABTwAAAAEAAAAABLAEsAAPAAABETMyFh0BITU0NjsBEQEhArz6FR384B0V%2Bv4MBLACiv3aHRUyMhUdAiYCJgAAAAEADgAIBEwEnAAfAAABJTYWFREUBgcGLgE2NzYXEQURFAYHBi4BNjc2FxE0NgFwAoUnMFNGT4gkV09IQv2oWEFPiCRXT0hCHQP5ow8eIvzBN1EXGSltchkYEAIJm%2F2iKmAVGilucRoYEQJ%2FJioAAAACAAn%2F%2BAS7BKcAHQApAAAAMh4CFQcXFAcBFgYPAQYiJwEGIycHIi4CND4BBCIOARQeATI%2BATQmAZDItoNOAQFOARMXARY7GikT%2Fu13jgUCZLaDTk6DAXKwlFZWlLCUVlYEp06DtmQCBY15%2Fu4aJRg6FBQBEk0BAU6Dtsi2g1tWlLCUVlaUsJQAAQBkAFgErwREABkAAAE%2BAh4CFRQOAwcuBDU0PgIeAQKJMHt4dVg2Q3mEqD4%2Bp4V4Qzhadnh5A7VESAUtU3ZAOXmAf7JVVbJ%2FgHk5QHZTLQVIAAAAAf%2FTAF4EewSUABgAAAETNjIXEyEyFgcFExYGJyUFBiY3EyUmNjMBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAyABYRMT%2Fp8RDPn%2BbxQLDPb3DAsUAZD7DBEAAv%2FTAF4EewSUABgAIgAAARM2MhcTITIWBwUTFgYnJQUGJjcTJSY2MwUjFwc3Fyc3IycBl4MHFQeBAaUVBhH%2BqoIHDxH%2Bqf6qEQ8Hgv6lEQYUAfPwxUrBw0rA6k4DIAFhExP%2BnxEM%2Bf5vFAsM9vcMCxQBkPsMEWSO4ouM5YzTAAABAAAAAASwBLAAJgAAATIWHQEUBiMVFBYXBR4BHQEUBiMhIiY9ATQ2NyU%2BAT0BIiY9ATQ2Alh8sD4mDAkBZgkMDwr7ggoPDAkBZgkMJj6wBLCwfPouaEsKFwbmBRcKXQoPDwpdChcF5gYXCktoLvp8sAAAAA0AAAAABLAETAAPABMAIwAnACsALwAzADcARwBLAE8AUwBXAAATITIWFREUBiMhIiY1ETQ2FxUzNSkBIgYVERQWMyEyNjURNCYzFTM1BRUzNSEVMzUFFTM1IRUzNQchIgYVERQWMyEyNjURNCYFFTM1IRUzNQUVMzUhFTM1GQR%2BCg8PCvuCCg8PVWQCo%2F3aCg8PCgImCg8Pc2T8GGQDIGT8GGQDIGTh%2FdoKDw8KAiYKDw%2F872QDIGT8GGQDIGQETA8K%2B%2BYKDw8KBBoKD2RkZA8K%2FqIKDw8KAV4KD2RkyGRkZGTIZGRkZGQPCv6iCg8PCgFeCg9kZGRkZMhkZGRkAAAEAAAAAARMBEwADwAfAC8APwAAEyEyFhURFAYjISImNRE0NikBMhYVERQGIyEiJjURNDYBITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NjIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR39vQGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHQRMHRX%2BcBUdHRUBkBUdHRX%2BcBUdHRUBkBUd%2FagdFf5wFR0dFQGQFR0dFf5wFR0dFQGQFR0AAAkAAAAABEwETAAPAB8ALwA%2FAE8AXwBvAH8AjwAAEzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2ATMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYhMzIWHQEUBisBIiY9ATQ2MsgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR389cgVHR0VyBUdHQGlyBUdHRXIFR0dAaXIFR0dFcgVHR0ETB0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHf5wHRXIFR0dFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHR0VyBUdHRXIFR0ABgAAAAAEsARMAA8AHwAvAD8ATwBfAAATMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYyyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHf6FyBUdHRXIFR0dAaUCvBUdHRX9RBUdHQRMHRXIFR0dFcgVHR0VyBUdHRXIFR3%2BcB0VyBUdHRXIFR0dFcgVHR0VyBUd%2FnAdFcgVHR0VyBUdHRXIFR0dFcgVHQAAAAABACYALAToBCAAFwAACQE2Mh8BFhQHAQYiJwEmND8BNjIfARYyAdECOwgUB7EICPzxBxUH%2FoAICLEHFAirBxYB3QI7CAixBxQI%2FPAICAGACBQHsQgIqwcAAQBuAG4EQgRCACMAAAEXFhQHCQEWFA8BBiInCQEGIi8BJjQ3CQEmND8BNjIXCQE2MgOIsggI%2FvUBCwgIsggVB%2F70%2FvQHFQiyCAgBC%2F71CAiyCBUHAQwBDAcVBDuzCBUH%2FvT%2B9AcVCLIICAEL%2FvUICLIIFQcBDAEMBxUIsggI%2FvUBDAcAAwAX%2F%2BsExQSZABkAJQBJAAAAMh4CFRQHARYUDwEGIicBBiMiLgI0PgEEIg4BFB4BMj4BNCYFMzIWHQEzMhYdARQGKwEVFAYrASImPQEjIiY9ATQ2OwE1NDYBmcSzgk1OASwICG0HFQj%2B1HeOYrSBTU2BAW%2BzmFhYmLOZWFj%2BvJYKD0sKDw8KSw8KlgoPSwoPDwpLDwSZTYKzYo15%2FtUIFQhsCAgBK01NgbTEs4JNWJmzmFhYmLOZIw8KSw8KlgoPSwoPDwpLDwqWCg9LCg8AAAMAF%2F%2FrBMUEmQAZACUANQAAADIeAhUUBwEWFA8BBiInAQYjIi4CND4BBCIOARQeATI%2BATQmBSEyFh0BFAYjISImPQE0NgGZxLOCTU4BLAgIbQcVCP7Ud45itIFNTYEBb7OYWFiYs5lYWP5YAV4KDw8K%2FqIKDw8EmU2Cs2KNef7VCBUIbAgIAStNTYG0xLOCTViZs5hYWJizmYcPCpYKDw8KlgoPAAAAAAIAFwAXBJkEsAAPAC0AAAEzMhYVERQGKwEiJjURNDYFNRYSFRQOAiIuAjU0EjcVDgEVFB4BMj4BNTQmAiZkFR0dFWQVHR0BD6fSW5vW6tabW9KnZ3xyxejFcnwEsB0V%2FnAVHR0VAZAVHeGmPv7ZuHXWm1tbm9Z1uAEnPqY3yHh0xXJyxXR4yAAEAGQAAASwBLAADwAfAC8APwAAATMyFhURFAYrASImNRE0NgEzMhYVERQGKwEiJjURNDYBMzIWFREUBisBIiY1ETQ2BTMyFh0BFAYrASImPQE0NgQBlgoPDwqWCg8P%2Ft6WCg8PCpYKDw%2F%2B3pYKDw8KlgoPD%2F7elgoPDwqWCg8PBLAPCvuCCg8PCgR%2BCg%2F%2BcA8K%2FRIKDw8KAu4KD%2F7UDwr%2BPgoPDwoBwgoPyA8K%2BgoPDwr6Cg8AAAAAAgAaABsElgSWAEcATwAAATIfAhYfATcWFwcXFh8CFhUUDwIGDwEXBgcnBwYPAgYjIi8CJi8BByYnNycmLwImNTQ%2FAjY%2FASc2Nxc3Nj8CNhIiBhQWMjY0AlghKSYFMS0Fhj0rUAMZDgGYBQWYAQ8YA1AwOIYFLDIFJisfISkmBTEtBYY8LFADGQ0ClwYGlwINGQNQLzqFBS0xBSYreLJ%2BfrJ%2BBJYFmAEOGQJQMDmGBSwxBiYrHiIoJgYxLAWGPSxRAxkOApcFBZcCDhkDUTA5hgUtMAYmKiAhKCYGMC0Fhj0sUAIZDgGYBf6ZfrF%2BfrEABwBkAAAEsAUUABMAFwAhACUAKQAtADEAAAEhMhYdASEyFh0BITU0NjMhNTQ2FxUhNQERFAYjISImNREXETMRMxEzETMRMxEzETMRAfQBLCk7ARMKD%2Fu0DwoBEzspASwBLDsp%2FUQpO2RkZGRkZGRkBRQ7KWQPCktLCg9kKTtkZGT%2B1PzgKTs7KQMgZP1EArz9RAK8%2FUQCvP1EArwAAQAMAAAFCATRAB8AABMBNjIXARYGKwERFAYrASImNREhERQGKwEiJjURIyImEgJsCBUHAmAIBQqvDwr6Cg%2F%2B1A8K%2BgoPrwoFAmoCYAcH%2FaAICv3BCg8PCgF3%2FokKDw8KAj8KAAIAZAAAA%2BgEsAARABcAAAERFBYzIREUBiMhIiY1ETQ2MwEjIiY9AQJYOykBLB0V%2FOAVHR0VA1L6FR0EsP5wKTv9dhUdHRUETBUd%2FnAdFfoAAwAXABcEmQSZAA8AGwAwAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBTMyFhURMzIWHQEUBisBIiY1ETQ2AePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnL%2BfDIKD68KDw8K%2BgoPDwSZW5vW6tabW1ub1urWmztyxejFcnLF6MUNDwr%2B7Q8KMgoPDwoBXgoPAAAAAAL%2FnAAABRQEsAALAA8AACkBAyMDIQEzAzMDMwEDMwMFFP3mKfIp%2FeYBr9EVohTQ%2Fp4b4BsBkP5wBLD%2B1AEs%2FnD%2B1AEsAAAAAAIAZAAABLAEsAAVAC8AAAEzMhYVETMyFgcBBiInASY2OwERNDYBMzIWFREUBiMhIiY1ETQ2OwEyFh0BITU0NgImyBUdvxQLDf65DSYN%2FrkNCxS%2FHQJUMgoPDwr75goPDwoyCg8DhA8EsB0V%2Fj4XEP5wEBABkBAXAcIVHfzgDwr%2BogoPDwoBXgoPDwqvrwoPAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUzMhYVETMyFgcDBiInAyY2OwERNDYB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv58lgoPiRUKDd8NJg3fDQoViQ8EmVub1urWm1tbm9bq1ps7csXoxXJyxejFDQ8K%2Fu0XEP7tEBABExAXARMKDwAAAAMAFwAXBJkEmQAPABsAMQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiUTFgYrAREUBisBIiY1ESMiJjcTNjIB4%2BrWm1tbm9bq1ptbW5sBv%2BjFcnLF6MVycv7n3w0KFYkPCpYKD4kVCg3fDSYEmVub1urWm1tbm9bq1ps7csXoxXJyxejFAf7tEBf%2B7QoPDwoBExcQARMQAAAAAAIAAAAABLAEsAAZADkAABMhMhYXExYVERQGBwYjISImJyY1EzQ3Ez4BBSEiBgcDBhY7ATIWHwEeATsBMjY%2FAT4BOwEyNicDLgHhAu4KEwO6BwgFDBn7tAweAgYBB7kDEwKX%2FdQKEgJXAgwKlgoTAiYCEwr6ChMCJgITCpYKDAJXAhIEsA4K%2FXQYGf5XDB4CBggEDRkBqRkYAowKDsgOC%2F4%2BCw4OCpgKDg4KmAoODgsBwgsOAAMAFwAXBJkEmQAPABsAJwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgUXFhQPAQYmNRE0NgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJy%2Fov9ERH9EBgYBJlbm9bq1ptbW5vW6tabO3LF6MVycsXoxV2%2BDCQMvgwLFQGQFQsAAQAXABcEmQSwACgAAAE3NhYVERQGIyEiJj8BJiMiDgEUHgEyPgE1MxQOAiIuAjQ%2BAjMyA7OHBwsPCv6WCwQHhW2BdMVycsXoxXKWW5vW6tabW1ub1nXABCSHBwQL%2FpYKDwsHhUxyxejFcnLFdHXWm1tbm9bq1ptbAAAAAAIAFwABBJkEsAAaADUAAAE3NhYVERQGIyEiJj8BJiMiDgEVIzQ%2BAjMyEzMUDgIjIicHBiY1ETQ2MyEyFg8BFjMyPgEDs4cHCw8L%2FpcLBAeGboF0xXKWW5vWdcDrllub1nXAnIYHCw8LAWgKBQiFboJ0xXIEJIcHBAv%2BlwsPCweGS3LFdHXWm1v9v3XWm1t2hggFCgFoCw8LB4VMcsUAAAAKAGQAAASwBLAADwAfAC8APwBPAF8AbwB%2FAI8AnwAAEyEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0NgczMhYdARQGKwEiJj0BNDYzITIWHQEUBiMhIiY9ATQ2BzMyFh0BFAYrASImPQE0NjMhMhYdARQGIyEiJj0BNDYHMzIWHQEUBisBIiY9ATQ2MyEyFh0BFAYjISImPQE0Nn0EGgoPDwr75goPDwPA%2FK4KDw8KA1IKDw%2F9CDIKDw8KMgoPD9IBwgoPDwr%2BPgoPD74yCg8PCjIKDw%2FSAcIKDw8K%2Fj4KDw%2B%2BMgoPDwoyCg8P0gHCCg8PCv4%2BCg8PvjIKDw8KMgoPD9IBwgoPDwr%2BPgoPDwSwDwr7ggoPDwoEfgoPyA8K%2FK4KDw8KA1IKD2QPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKD8gPCjIKDw8KMgoPDwoyCg8PCjIKDwAAAAACAAAAAARMBLAAGQAjAAABNTQmIyEiBh0BIyIGFREUFjMhMjY1ETQmIyE1NDY7ATIWHQEDhHVT%2FtRSdmQpOzspA4QpOzsp%2FageFMgUHgMgyFN1dlLIOyn9qCk7OykCWCk7lhUdHRWWAAIAZAAABEwETAAJADcAABMzMhYVESMRNDYFMhcWFREUBw4DIyIuAScuAiMiBwYjIicmNRE%2BATc2HgMXHgIzMjc2fTIKD2QPA8AEBRADIUNAMRwaPyonKSxHHlVLBwgGBQ4WeDsXKC4TOQQpLUUdZ1AHBEwPCvvNBDMKDzACBhH%2BWwYGO1AkDQ0ODg8PDzkFAwcPAbY3VwMCAwsGFAEODg5XCAAAAwAAAAAEsASXACEAMQBBAAAAMh4CFREUBisBIiY1ETQuASAOARURFAYrASImNRE0PgEDMzIWFREUBisBIiY1ETQ2ITMyFhURFAYrASImNRE0NgHk6N6jYw8KMgoPjeT%2B%2BuSNDwoyCg9joyqgCAwMCKAIDAwCYKAIDAwIoAgMDASXY6PedP7UCg8PCgEsf9FyctF%2F%2FtQKDw8KASx03qP9wAwI%2FjQIDAwIAcwIDAwI%2FjQIDAwIAcwIDAAAAAACAAAA0wRHA90AFQA5AAABJTYWFREUBiclJisBIiY1ETQ2OwEyBTc2Mh8BFhQPARcWFA8BBiIvAQcGIi8BJjQ%2FAScmND8BNjIXAUEBAgkMDAn%2B%2FhUZ%2BgoPDwr6GQJYeAcUByIHB3h4BwciBxQHeHgHFAciBwd3dwcHIgcUBwMurAYHCv0SCgcGrA4PCgFeCg%2BEeAcHIgcUB3h4BxQHIgcHd3cHByIHFAd4eAcUByIICAAAAAACAAAA0wNyA90AFQAvAAABJTYWFREUBiclJisBIiY1ETQ2OwEyJTMWFxYVFAcGDwEiLwEuATc2NTQnJjY%2FATYBQQECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcDLqwGBwr9EgoHBqwODwoBXgoPZAEJgaGafwkBAQYXBxMIZ36EaggUBxYFAAAAAAMAAADEBGID7AAbADEASwAAATMWFxYVFAYHBgcjIi8BLgE3NjU0JicmNj8BNgUlNhYVERQGJyUmKwEiJjURNDY7ATIlMxYXFhUUBwYPASIvAS4BNzY1NCcmNj8BNgPHAwsGh0RABwoDCQcqCAIGbzs3BgIJKgf9ggECCQwMCf7%2BFRn6Cg8PCvoZAdIECgZgWgYLAwkHHQcDBkhOBgMIHQcD7AEJs9lpy1QJAQYiBhQIlrJarEcJFAYhBb6sBgcK%2FRIKBwasDg8KAV4KD2QBCYGhmn8JAQEGFwcTCGd%2BhGoIFQYWBQAAAAANAAAAAASwBLAACQAVABkAHQAhACUALQA7AD8AQwBHAEsATwAAATMVIxUhFSMRIQEjFTMVIREjESM1IQURIREhESERBSM1MwUjNTMBMxEhETM1MwEzFSMVIzUjNTM1IzUhBREhEQcjNTMFIzUzASM1MwUhNSEB9GRk%2FnBkAfQCvMjI%2FtTIZAJY%2B7QBLAGQASz84GRkArxkZP1EyP4MyGQB9MhkyGRkyAEs%2FUQBLGRkZAOEZGT%2BDGRkAfT%2B1AEsA4RkZGQCWP4MZMgBLAEsyGT%2B1AEs%2FtQBLMhkZGT%2BDP4MAfRk%2FtRkZGRkyGTI%2FtQBLMhkZGT%2B1GRkZAAAAAAJAAAAAASwBLAAAwAHAAsADwATABcAGwAfACMAADcjETMTIxEzASMRMxMjETMBIxEzASE1IRcjNTMXIzUzBSM1M2RkZMhkZAGQyMjIZGQBLMjI%2FOD%2B1AEsyGRkyGRkASzIyMgD6PwYA%2Bj8GAPo%2FBgD6PwYA%2Bj7UGRkW1tbW1sAAAIAAAAKBKYEsAANABUAAAkBFhQHAQYiJwETNDYzBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAUM7Uzs7UzsEsP1WCBQI%2FjAICAKqAdsKD807O1Q7OwAAAAADAAAACgXSBLAADQAZACEAAAkBFhQHAQYiJwETNDYzIQEWFAcBBiIvAQkBBCYiBhQWMjYB9AKqCAj%2BMAgUCP1WAQ8KAwYCqggI%2FjAIFAg4Aaj9RP7TO1M7O1M7BLD9VggUCP4wCAgCqgHbCg%2F9VggUCP4wCAg4AaoCvM07O1Q7OwAAAAABAGQAAASwBLAAJgAAASEyFREUDwEGJjURNCYjISIPAQYWMyEyFhURFAYjISImNRE0PwE2ASwDOUsSQAgKDwr9RBkSQAgFCgK8Cg8PCvyuCg8SixIEsEv8fBkSQAgFCgO2Cg8SQAgKDwr8SgoPDwoDzxkSixIAAAABAMj%2F%2FwRMBLAACgAAEyEyFhURCQERNDb6AyAVHf4%2B%2Fj4dBLAdFfuCAbz%2BQwR%2FFR0AAAAAAwAAAAAEsASwABUARQBVAAABISIGBwMGHwEeATMhMjY%2FATYnAy4BASMiBg8BDgEjISImLwEuASsBIgYVERQWOwEyNj0BNDYzITIWHQEUFjsBMjY1ETQmASEiBg8BBhYzITI2LwEuAQM2%2FkQLEAFOBw45BhcKAcIKFwY%2BDgdTARABVpYKFgROBBYK%2FdoKFgROBBYKlgoPDwqWCg8PCgLuCg8PCpYKDw%2F%2Bsf4MChMCJgILCgJYCgsCJgITBLAPCv7TGBVsCQwMCWwVGAEtCg%2F%2BcA0JnAkNDQmcCQ0PCv12Cg8PCpYKDw8KlgoPDwoCigoP%2FagOCpgKDg4KmAoOAAAAAAQAAABkBLAETAAdACEAKQAxAAABMzIeAh8BMzIWFREUBiMhIiY1ETQ2OwE%2BBAEVMzUEIgYUFjI2NCQyFhQGIiY0AfTIOF00JAcGlik7Oyn8GCk7OymWAgknM10ByGT%2Bz76Hh76H%2Fu9WPDxWPARMKTs7FRQ7Kf2oKTs7KQJYKTsIG0U1K%2F7UZGRGh76Hh74IPFY8PFYAAAAAAgA1AAAEsASvACAAIwAACQEWFx4BHwEVITUyNi8BIQYHBh4CMxUhNTY3PgE%2FAQEDIQMCqQGBFCgSJQkK%2Fl81LBFS%2Fnk6IgsJKjIe%2FpM4HAwaBwcBj6wBVKIEr%2FwaMioTFQECQkJXLd6RWSIuHAxCQhgcDCUNDQPu%2FVoByQAAAAADAGQAAAPwBLAAJwAyADsAAAEeBhUUDgMjITU%2BATURNC4EJzUFMh4CFRQOAgclMzI2NTQuAisBETMyNjU0JisBAvEFEzUwOyodN1htbDD%2BDCk7AQYLFyEaAdc5dWM%2BHy0tEP6Pi05pESpTPnbYUFJ9Xp8CgQEHGB0zOlIuQ3VONxpZBzMoAzsYFBwLEAkHRwEpSXNDM1s6KwkxYUopOzQb%2FK5lUFqBAAABAMgAAANvBLAAGQAAARcOAQcDBhYXFSE1NjcTNjQuBCcmJzUDbQJTQgeECSxK%2Fgy6Dq0DAw8MHxUXDQYEsDkTNSj8uTEoBmFhEFIDQBEaExAJCwYHAwI5AAAAAAL%2FtQAABRQEsAAlAC8AAAEjNC4FKwERFBYfARUhNTI%2BAzURIyIOBRUjESEFIxEzByczESM3BRQyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj7m0tLfX1LS30DhBUgFQ4IAwH8rhYZAQJkZAEFCRUOA1IBAwgOFSAVASzI%2FOCnpwMgpwACACH%2FtQSPBLAAJQAvAAABIzQuBSsBERQWHwEVITUyPgM1ESMiDgUVIxEhEwc1IRUnNxUhNQRMMggLGRMmGBnIMhkZ%2FnAEDiIaFsgZGCYTGQsIMgPoQ6f84KenAyADhBUgFQ4IAwH9dhYZAQJkZAEFCRUOAooBAwgOFSAVASz7gn1LS319S0sABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyAlgVHR0V%2FagVHR0VA%2BgVHR0V%2FBgVHR0VAyAVHR0V%2FOAVHR0VBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AABMhMhYdARQGIyEiJj0BNDYDITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NgMhMhYdARQGIyEiJj0BNDb6ArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR3dArwVHR0V%2FUQVHR2zBEwVHR0V%2B7QVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0ABAAAAAAEsARMAA8AHwAvAD8AAAE1NDYzITIWHQEUBiMhIiYBNTQ2MyEyFh0BFAYjISImEzU0NjMhMhYdARQGIyEiJgE1NDYzITIWHQEUBiMhIiYB9B0VAlgVHR0V%2FagVHf5wHRUD6BUdHRX8GBUdyB0VAyAVHR0V%2FOAVHf7UHRUETBUdHRX7tBUdA7ZkFR0dFWQVHR3%2B6WQVHR0VZBUdHf7pZBUdHRVkFR0d%2FulkFR0dFWQVHR0AAAQAAAAABLAETAAPAB8ALwA%2FAAATITIWHQEUBiMhIiY9ATQ2EyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2MgRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dFQRMFR0dFfu0FR0dBEwdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAgAAAAABLAETAAPAB8ALwA%2FAE8AXwBvAH8AABMzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2ATMyFh0BFAYrASImPQE0NikBMhYdARQGIyEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2KQEyFh0BFAYjISImPQE0NgEzMhYdARQGKwEiJj0BNDYpATIWHQEUBiMhIiY9ATQ2MmQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR3%2B6WQVHR0VZBUdHQFBAyAVHR0V%2FOAVHR0ETB0VZBUdHRVkFR0dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdHRVkFR0dFWQVHf7UHRVkFR0dFWQVHR0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0dFWQVHR0VZBUdAAAG%2F5wAAASwBEwAAwATACMAKgA6AEoAACEjETsCMhYdARQGKwEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2BQc1IzUzNQUhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2AZBkZJZkFR0dFWQVHR0VAfQVHR0V%2FgwVHR3%2B%2BqfIyAHCASwVHR0V%2FtQVHR0VAlgVHR0V%2FagVHR0ETB0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR36fUtkS68dFWQVHR0VZBUd%2FtQdFWQVHR0VZBUdAAAABgAAAAAFFARMAA8AEwAjACoAOgBKAAATMzIWHQEUBisBIiY9ATQ2ASMRMwEhMhYdARQGIyEiJj0BNDYFMxUjFSc3BSEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYyZBUdHRVkFR0dA2dkZPyuAfQVHR0V%2FgwVHR0EL8jIp6f75gEsFR0dFf7UFR0dFQJYFR0dFf2oFR0dBEwdFWQVHR0VZBUd%2B7QETP7UHRVkFR0dFWQVHchkS319rx0VZBUdHRVkFR3%2B1B0VZBUdHRVkFR0AAAAAAgAAAMgEsAPoAA8AEgAAEyEyFhURFAYjISImNRE0NgkCSwLuHywsH%2F0SHywsBIT%2B1AEsA%2BgsH%2F12HywsHwKKHyz9RAEsASwAAwAAAAAEsARMAA8AFwAfAAATITIWFREUBiMhIiY1ETQ2FxE3BScBExEEMhYUBiImNCwEWBIaGhL7qBIaGkr3ASpKASXs%2FNJwTk5wTgRMGhL8DBIaGhID9BIaZP0ftoOcAT7%2B4AH0dE5vT09vAAAAAAIA2wAFBDYEkQAWAB4AAAEyHgEVFAcOAQ8BLgQnJjU0PgIWIgYUFjI2NAKIdcZzRkWyNjYJIV5YbSk8RHOft7eCgreCBJF4ynVzj23pPz4IIWZomEiEdVijeUjDgriBgbgAAAACABcAFwSZBJkADwAXAAAAMh4CFA4CIi4CND4BAREiDgEUHgEB4%2BrWm1tbm9bq1ptbW5sBS3TFcnLFBJlbm9bq1ptbW5vW6tab%2FG8DVnLF6MVyAAACAHUAAwPfBQ8AGgA1AAABHgYVFA4DBy4DNTQ%2BBQMOAhceBBcWNj8BNiYnLgInJjc2IyYCKhVJT1dOPiUzVnB9P1SbfEokP0xXUEm8FykoAwEbITEcExUWAgYCCQkFEikMGiACCAgFD0iPdXdzdYdFR4BeRiYEBTpjl1lFh3ZzeHaQ%2Ff4hS4I6JUEnIw4IBwwQIgoYBwQQQSlZtgsBAAAAAwAAAAAEywRsAAwAKgAvAAABNz4CHgEXHgEPAiUhMhcHISIGFREUFjMhMjY9ATcRFAYjISImNRE0NgkBBzcBA%2BhsAgYUFR0OFgoFBmz9BQGQMje7%2FpApOzspAfQpO8i7o%2F5wpbm5Azj%2BlqE3AWMD9XMBAgIEDw4WKgsKc8gNuzsp%2FgwpOzsptsj%2BtKW5uaUBkKW5%2Ftf%2BljKqAWMAAgAAAAAEkwRMABsANgAAASEGByMiBhURFBYzITI2NTcVFAYjISImNRE0NgUBFhQHAQYmJzUmDgMHPgY3NT4BAV4BaaQ0wyk7OykB9Ck7yLml%2FnClubkCfwFTCAj%2BrAcLARo5ZFRYGgouOUlARioTAQsETJI2Oyn%2BDCk7OymZZ6W5uaUBkKW5G%2F7TBxUH%2Fs4GBAnLAQINFjAhO2JBNB0UBwHSCgUAAAAAAgAAAAAEnQRMAB0ANQAAASEyFwchIgYVERQWMyEyNj0BNxUUBiMhIiY1ETQ2CQE2Mh8BFhQHAQYiLwEmND8BNjIfARYyAV4BXjxDsv6jKTs7KQH0KTvIuaX%2BcKW5uQHKAYsHFQdlBwf97QcVB%2FgHB2UHFQdvCBQETBexOyn%2BDCk7OylFyNulubmlAZCluf4zAYsHB2UHFQf97AcH%2BAcVB2UHB28HAAAAAQAKAAoEpgSmADsAAAkBNjIXARYGKwEVMzU0NhcBFhQHAQYmPQEjFTMyFgcBBiInASY2OwE1IxUUBicBJjQ3ATYWHQEzNSMiJgE%2BAQgIFAgBBAcFCqrICggBCAgI%2FvgICsiqCgUH%2FvwIFAj%2B%2BAgFCq%2FICgj%2B%2BAgIAQgICsivCgUDlgEICAj%2B%2BAgKyK0KBAf%2B%2FAcVB%2F73BwQKrcgKCP74CAgBCAgKyK0KBAcBCQcVBwEEBwQKrcgKAAEAyAAAA4QETAAZAAATMzIWFREBNhYVERQGJwERFAYrASImNRE0NvpkFR0B0A8VFQ%2F%2BMB0VZBUdHQRMHRX%2BSgHFDggV%2FBgVCA4Bxf5KFR0dFQPoFR0AAAABAAAAAASwBEwAIwAAEzMyFhURATYWFREBNhYVERQGJwERFAYnAREUBisBIiY1ETQ2MmQVHQHQDxUB0A8VFQ%2F%2BMBUP%2FjAdFWQVHR0ETB0V%2FkoBxQ4IFf5KAcUOCBX8GBUIDgHF%2FkoVCA4Bxf5KFR0dFQPoFR0AAAABAJ0AGQSwBDMAFQAAAREUBicBERQGJwEmNDcBNhYVEQE2FgSwFQ%2F%2BMBUP%2FhQPDwHsDxUB0A8VBBr8GBUIDgHF%2FkoVCA4B4A4qDgHgDggV%2FkoBxQ4IAAAAAQDIABYEMwQ2AAsAABMBFhQHAQYmNRE0NvMDLhIS%2FNISGRkEMv4OCx4L%2Fg4LDhUD6BUOAAIAyABkA4QD6AAPAB8AABMzMhYVERQGKwEiJjURNDYhMzIWFREUBisBIiY1ETQ2%2BsgVHR0VyBUdHQGlyBUdHRXIFR0dA%2BgdFfzgFR0dFQMgFR0dFfzgFR0dFQMgFR0AAAEAyABkBEwD6AAPAAABERQGIyEiJjURNDYzITIWBEwdFfzgFR0dFQMgFR0DtvzgFR0dFQMgFR0dAAAAAAEAAAAZBBMEMwAVAAABETQ2FwEWFAcBBiY1EQEGJjURNDYXAfQVDwHsDw%2F%2BFA8V%2FjAPFRUPAmQBthUIDv4gDioO%2FiAOCBUBtv47DggVA%2BgVCA4AAAH%2F%2FgACBLMETwAjAAABNzIWFRMUBiMHIiY1AwEGJjUDAQYmNQM0NhcBAzQ2FwEDNDYEGGQUHgUdFWQVHQL%2BMQ4VAv4yDxUFFQ8B0gIVDwHSAh0ETgEdFfwYFR0BHRUBtf46DwkVAbX%2BOQ4JFAPoFQkP%2Fj4BthQJDv49AbYVHQAAAQEsAAAD6ARMABkAAAEzMhYVERQGKwEiJjURAQYmNRE0NhcBETQ2A1JkFR0dFWQVHf4wDxUVDwHQHQRMHRX8GBUdHRUBtv47DggVA%2BgVCA7%2BOwG2FR0AAAIAZADIBLAESAALABsAAAkBFgYjISImNwE2MgEhMhYdARQGIyEiJj0BNDYCrgH1DwkW%2B%2B4WCQ8B9Q8q%2FfcD6BUdHRX8GBUdHQQ5%2FeQPFhYPAhwP%2FUgdFWQVHR0VZBUdAAEAiP%2F8A3UESgAFAAAJAgcJAQN1%2FqABYMX92AIoA4T%2Bn%2F6fxgIoAiYAAAAAAQE7%2F%2FwEKARKAAUAAAkBJwkBNwQo%2FdnGAWH%2Bn8YCI%2F3ZxgFhAWHGAAIAFwAXBJkEmQAPADMAAAAyHgIUDgIiLgI0PgEFIyIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmKwE1NCYB4%2BrWm1tbm9bq1ptbW5sBfWQVHZYVHR0Vlh0VZBUdlhUdHRWWHQSZW5vW6tabW1ub1urWm7odFZYdFWQVHZYVHR0Vlh0VZBUdlhUdAAAAAAIAFwAXBJkEmQAPAB8AAAAyHgIUDgIiLgI0PgEBISIGHQEUFjMhMjY9ATQmAePq1ptbW5vW6tabW1ubAkX%2BDBUdHRUB9BUdHQSZW5vW6tabW1ub1urWm%2F5%2BHRVkFR0dFWQVHQACABcAFwSZBJkADwAzAAAAMh4CFA4CIi4CND4BBCIPAScmIg8BBhQfAQcGFB8BFjI%2FARcWMj8BNjQvATc2NC8BAePq1ptbW5vW6tabW1ubAeUZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0JCXh4CQmNBJlbm9bq1ptbW5vW6tabrQl4eAkJjQkZCXh4CRkJjQkJeHgJCY0JGQl4eAkZCY0AAgAXABcEmQSZAA8AJAAAADIeAhQOAiIuAjQ%2BAQEnJiIPAQYUHwEWMjcBNjQvASYiBwHj6tabW1ub1urWm1tbmwEVVAcVCIsHB%2FIHFQcBdwcHiwcVBwSZW5vW6tabW1ub1urWm%2F4xVQcHiwgUCPEICAF3BxUIiwcHAAAAAAMAFwAXBJkEmQAPADsASwAAADIeAhQOAiIuAjQ%2BAQUiDgMVFDsBFjc%2BATMyFhUUBgciDgUHBhY7ATI%2BAzU0LgMTIyIGHQEUFjsBMjY9ATQmAePq1ptbW5vW6tabW1ubAT8dPEIyIRSDHgUGHR8UFw4TARkOGhITDAIBDQ6tBx4oIxgiM0Q8OpYKDw8KlgoPDwSZW5vW6tabW1ub1urWm5ELHi9PMhkFEBQQFRIXFgcIBw4UHCoZCBEQKDhcNi9IKhsJ%2FeMPCpYKDw8KlgoPAAADABcAFwSZBJkADwAfAD4AAAAyHgIUDgIiLgI0PgEFIyIGHQEUFjsBMjY9ATQmAyMiBh0BFBY7ARUjIgYdARQWMyEyNj0BNCYrARE0JgHj6tabW1ub1urWm1tbmwGWlgoPDwqWCg8PCvoKDw8KS0sKDw8KAV4KDw8KSw8EmVub1urWm1tbm9bq1ptWDwqWCg8PCpYKD%2F7UDwoyCg%2FIDwoyCg8PCjIKDwETCg8AAgAAAAAEsASwAC8AXwAAATMyFh0BHgEXMzIWHQEUBisBDgEHFRQGKwEiJj0BLgEnIyImPQE0NjsBPgE3NTQ2ExUUBisBIiY9AQ4BBzMyFh0BFAYrAR4BFzU0NjsBMhYdAT4BNyMiJj0BNDY7AS4BAg2WCg9nlxvCCg8PCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw%2B5DwqWCg9EZheoCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmBLAPCsIbl2cPCpYKD2eXG8IKDw8KwhuXZw8KlgoPZ5cbwgoP%2Fs2oCg8PCqgXZkQPCpYKD0RmF6gKDw8KqBdmRA8KlgoPRGYAAwAXABcEmQSZAA8AGwA%2FAAAAMh4CFA4CIi4CND4BBCIOARQeATI%2BATQmBxcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyAePq1ptbW5vW6tabW1ubAb%2FoxXJyxejFcnKaQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwdABxUHfHwHFQSZW5vW6tabW1ub1urWmztyxejFcnLF6MVaQAcVB3x8BxUHQAcHfHwHB0AHFQd8fAcVB0AHB3x8BwAAAAMAFwAXBJkEmQAPABsAMAAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcXFhQHAQYiLwEmND8BNjIfATc2MgHj6tabW1ub1urWm1tbmwG%2F6MVycsXoxXJyg2oHB%2F7ACBQIyggIagcVB0%2FFBxUEmVub1urWm1tbm9bq1ps7csXoxXJyxejFfWoHFQf%2BvwcHywcVB2oICE%2FFBwAAAAMAFwAXBJkEmQAPABgAIQAAADIeAhQOAiIuAjQ%2BAQUiDgEVFBcBJhcBFjMyPgE1NAHj6tabW1ub1urWm1tbmwFLdMVyQQJLafX9uGhzdMVyBJlbm9bq1ptbW5vW6tabO3LFdHhpAktB0P24PnLFdHMAAAAAAQAXAFMEsAP5ABUAABMBNhYVESEyFh0BFAYjIREUBicBJjQnAgoQFwImFR0dFf3aFxD99hACRgGrDQoV%2Ft0dFcgVHf7dFQoNAasNJgAAAAABAAAAUwSZA%2FkAFQAACQEWFAcBBiY1ESEiJj0BNDYzIRE0NgJ%2FAgoQEP32EBf92hUdHRUCJhcD8f5VDSYN%2FlUNChUBIx0VyBUdASMVCgAAAAEAtwAABF0EmQAVAAAJARYGIyERFAYrASImNREhIiY3ATYyAqoBqw0KFf7dHRXIFR3%2B3RUKDQGrDSYEif32EBf92hUdHRUCJhcQAgoQAAAAAQC3ABcEXQSwABUAAAEzMhYVESEyFgcBBiInASY2MyERNDYCJsgVHQEjFQoN%2FlUNJg3%2BVQ0KFQEjHQSwHRX92hcQ%2FfYQEAIKEBcCJhUdAAABAAAAtwSZBF0AFwAACQEWFAcBBiY1EQ4DBz4ENxE0NgJ%2FAgoQEP32EBdesKWBJAUsW4fHfhcEVf5VDSYN%2FlUNChUBIwIkRHVNabGdcUYHAQYVCgACAAAAAASwBLAAFQArAAABITIWFREUBi8BBwYiLwEmND8BJyY2ASEiJjURNDYfATc2Mh8BFhQPARcWBgNSASwVHRUOXvkIFAhqBwf5Xg4I%2FiH%2B1BUdFQ5e%2BQgUCGoHB%2FleDggEsB0V%2FtQVCA5e%2BQcHaggUCPleDhX7UB0VASwVCA5e%2BQcHaggUCPleDhUAAAACAEkASQRnBGcAFQArAAABFxYUDwEXFgYjISImNRE0Nh8BNzYyASEyFhURFAYvAQcGIi8BJjQ%2FAScmNgP2agcH%2BV4OCBX%2B1BUdFQ5e%2BQgU%2FQwBLBUdFQ5e%2BQgUCGoHB%2FleDggEYGoIFAj5Xg4VHRUBLBUIDl75B%2F3xHRX%2B1BUIDl75BwdqCBQI%2BV4OFQAAAAADABcAFwSZBJkADwAfAC8AAAAyHgIUDgIiLgI0PgEFIyIGFxMeATsBMjY3EzYmAyMiBh0BFBY7ATI2PQE0JgHj6tabW1ub1urWm1tbmwGz0BQYBDoEIxQ2FCMEOgQYMZYKDw8KlgoPDwSZW5vW6tabW1ub1urWm7odFP7SFB0dFAEuFB3%2BDA8KlgoPDwqWCg8AAAAABQAAAAAEsASwAEkAVQBhAGgAbwAAATIWHwEWHwEWFxY3Nj8BNjc2MzIWHwEWHwIeATsBMhYdARQGKwEiBh0BIREjESE1NCYrASImPQE0NjsBMjY1ND8BNjc%2BBAUHBhY7ATI2LwEuAQUnJgYPAQYWOwEyNhMhIiY1ESkBERQGIyERAQQJFAUFFhbEFQ8dCAsmxBYXERUXMA0NDgQZCAEPCj0KDw8KMgoP%2FnDI%2FnAPCjIKDw8KPQsOCRkFDgIGFRYfAp2mBwQK2woKAzMDEP41sQgQAzMDCgrnCwMe%2FokKDwGQAlgPCv6JBLAEAgIKDXYNCxUJDRZ2DQoHIREQFRh7LAkLDwoyCg8PCq8BLP7UrwoPDwoyCg8GBQQwgBkUAwgWEQ55ogcKDgqVCgSqnQcECo8KDgr8cg8KAXf%2BiQoPAZAAAAAAAgAAAAwErwSmACsASQAAATYWFQYCDgQuAScmByYOAQ8BBiY1NDc%2BATc%2BAScuAT4BNz4GFyYGBw4BDwEOBAcOARY2Nz4CNz4DNz4BBI0IGgItQmxhi2KORDg9EQQRMxuZGhYqCFUYEyADCQIQOjEnUmFch3vAJQgdHyaiPT44XHRZUhcYDhItIRmKcVtGYWtbKRYEBKYDEwiy%2Ft3IlVgxEQgLCwwBAQIbG5kYEyJAJghKFRE8Hzdff4U%2FM0o1JSMbL0QJGCYvcSEhHjZST2c1ODwEJygeW0AxJUBff1UyFAABAF0AHgRyBM8ATwAAAQ4BHgQXLgc%2BATceAwYHDgQHBicmNzY3PgQuAScWDgMmJy4BJyY%2BBDcGHgM3PgEuAicmPgMCjScfCic4R0IgBBsKGAoQAwEJEg5gikggBhANPkpTPhZINx8SBgsNJysiCRZOQQoVNU1bYC9QZwICBAUWITsoCAYdJzIYHw8YIiYHDyJJYlkEz0OAZVxEOSQMBzgXOB42IzElKRIqg5Gnl0o3Z0c6IAYWCwYNAwQFIDhHXGF1OWiqb0sdBxUknF0XNTQ8PEUiNWNROBYJDS5AQVUhVZloUSkAAAAAA%2F%2FcAGoE1ARGABsAPwBRAAAAMh4FFA4FIi4FND4EBSYGFxYVFAYiJjU0NzYmBwYHDgEXHgQyPgM3NiYnJgUHDgEXFhcWNj8BNiYnJicuAQIGpJ17bk85HBw6T257naKde25POhwcOU9uewIPDwYIGbD4sBcIBw5GWg0ECxYyWl%2BDiINfWjIWCwQMWv3%2FIw8JCSU4EC0OIw4DDywtCyIERi1JXGJcSSpJXGJcSS0tSVxiXEkqSVxiXEncDwYTOT58sLB8OzcTBg9FcxAxEiRGXkQxMEVeRSQSMRF1HiQPLxJEMA0EDyIPJQ8sSRIEAAAABP%2FcAAAE1ASwABQAJwA7AEwAACEjNy4ENTQ%2BBTMyFzczEzceARUUDgMHNz4BNzYmJyYlBgcOARceBBc3LgE1NDc2JhcHDgEXFhcWNj8CJyYnLgECUJQfW6l2WSwcOU9ue51SPUEglCYvbIknUGqYUi5NdiYLBAw2%2FVFGWg0ECxIqSExoNSlrjxcIB3wjDwkJJTgQLQ4MFgMsLQsieBRhdHpiGxVJXGJcSS0Pef5StVXWNBpacm5jGq0xiD8SMRFGckVzEDESHjxRQTkNmhKnbjs3EwZwJA8vEkQwDQQPC1YELEkSBAAAAAP%2FngAABRIEqwALABgAKAAAJwE2FhcBFgYjISImJSE1NDY7ATIWHQEhAQczMhYPAQ4BKwEiJi8BJjZaAoIUOBQCghUbJfryJRsBCgFZDwqWCg8BWf5DaNAUGAQ6BCMUNhQjBDoEGGQEKh8FIfvgIEdEhEsKDw8KSwLT3x0U%2FBQdHRT8FB0AAAABAGQAFQSwBLAAKAAAADIWFREBHgEdARQGJyURFh0BFAYvAQcGJj0BNDcRBQYmPQE0NjcBETQCTHxYAWsPFhgR%2FplkGhPNzRMaZP6ZERgWDwFrBLBYPv6t%2FrsOMRQpFA0M%2Bf75XRRAFRAJgIAJEBVAFF0BB%2FkMDRQpFDEOAUUBUz4AAAARAAAAAARMBLAAHQAnACsALwAzADcAOwA%2FAEMARwBLAE8AUwBXAFsAXwBjAAABMzIWHQEzMhYdASE1NDY7ATU0NjsBMhYdASE1NDYBERQGIyEiJjURFxUzNTMVMzUzFTM1MxUzNTMVMzUFFTM1MxUzNTMVMzUzFTM1MxUzNQUVMzUzFTM1MxUzNTMVMzUzFTM1A1JkFR0yFR37tB0VMh0VZBUdAfQdAQ8dFfwYFR1kZGRkZGRkZGRk%2FHxkZGRkZGRkZGT8fGRkZGRkZGRkZASwHRUyHRWWlhUdMhUdHRUyMhUd%2FnD9EhUdHRUC7shkZGRkZGRkZGRkyGRkZGRkZGRkZGTIZGRkZGRkZGRkZAAAAAMAAAAZBXcElwAZACUANwAAARcWFA8BBiY9ASMBISImPQE0NjsBATM1NDYBBycjIiY9ATQ2MyEBFxYUDwEGJj0BIyc3FzM1NDYEb%2FkPD%2FkOFZ%2F9qP7dFR0dFdECWPEV%2FamNetEVHR0VASMDGvkPD%2FkOFfG1jXqfFQSN5g4qDuYOCBWW%2FagdFWQVHQJYlhUI%2FpiNeh0VZBUd%2Fk3mDioO5g4IFZa1jXqWFQgAAAABAAAAAASwBEwAEgAAEyEyFhURFAYjIQERIyImNRE0NmQD6Ck7Oyn9rP7QZCk7OwRMOyn9qCk7%2FtQBLDspAlgpOwAAAAMAZAAABEwEsAAJABMAPwAAEzMyFh0BITU0NiEzMhYdASE1NDYBERQOBSIuBTURIRUUFRwBHgYyPgYmNTQ9AZbIFR3%2B1B0C0cgVHf7UHQEPBhgoTGacwJxmTCgYBgEsAwcNFB8nNkI2Jx8TDwUFAQSwHRX6%2BhUdHRX6%2BhUd%2FnD%2B1ClJalZcPigoPlxWakkpASz6CRIVKyclIRsWEAgJEBccISUnKhURCPoAAAAB%2F%2F8A1ARMA8IABQAAAQcJAScBBEzG%2Fp%2F%2Bn8UCJwGbxwFh%2Fp%2FHAicAAQAAAO4ETQPcAAUAAAkCNwkBBE392v3ZxgFhAWEDFf3ZAifH%2Fp8BYQAAAAAC%2F1EAZAVfA%2BgAFAApAAABITIWFREzMhYPAQYiLwEmNjsBESElFxYGKwERIRchIiY1ESMiJj8BNjIBlALqFR2WFQgO5g4qDuYOCBWW%2FoP%2BHOYOCBWWAYHX%2FRIVHZYVCA7mDioD6B0V%2FdkVDvkPD%2FkOFQGRuPkOFf5wyB0VAiYVDvkPAAABAAYAAASeBLAAMAAAEzMyFh8BITIWBwMOASMhFyEyFhQGKwEVFAYiJj0BIRUUBiImPQEjIiYvAQMjIiY0NjheERwEJgOAGB4FZAUsIf2HMAIXFR0dFTIdKh3%2B1B0qHR8SHQYFyTYUHh4EsBYQoiUY%2FiUVK8gdKh0yFR0dFTIyFR0dFTIUCQoDwR0qHQAAAAACAAAAAASwBEwACwAPAAABFSE1MzQ2MyEyFhUFIREhBLD7UMg7KQEsKTv9RASw%2B1AD6GRkKTs7Kcj84AACAAAAAAXcBEwADAAQAAATAxEzNDYzITIWFSEVBQEhAcjIyDspASwqOgH0ASz%2B1PtQASwDIP5wAlgpOzspyGT9RAK8AAEBRQAAA2sErwAbAAABFxYGKwERMzIWDwEGIi8BJjY7AREjIiY%2FATYyAnvmDggVlpYVCA7mDioO5g4IFZaWFQgO5g4qBKD5DhX9pxUO%2BQ8P%2BQ4VAlkVDvkPAAAAAQABAUQErwNrABsAAAEXFhQPAQYmPQEhFRQGLwEmND8BNhYdASE1NDYDqPkODvkPFf2oFQ%2F5Dg75DxUCWBUDYOUPKQ%2FlDwkUl5cUCQ%2FlDykP5Q8JFZWVFQkAAAAEAAAAAASwBLAACQAZAB0AIQAAAQMuASMhIgYHAwUhIgYdARQWMyEyNj0BNCYFNTMVMzUzFQSRrAUkFP1gFCQFrAQt%2FBgpOzspA%2BgpOzv%2Bq2RkZAGQAtwXLSgV%2FR1kOylkKTs7KWQpO8hkZGRkAAAAA%2F%2BcAGQEsARMAAsAIwAxAAAAMhYVERQGIiY1ETQDJSMTFgYjIisBIiYnAj0BNDU0PgE7ASUBFSIuAz0BND4CNwRpKh0dKh1k%2FV0mLwMRFQUCVBQdBDcCCwzIAqP8GAQOIhoWFR0dCwRMHRX8rhUdHRUDUhX8mcj%2B7BAIHBUBUQ76AgQQDw36%2FtT6AQsTKRwyGigUDAEAAAACAEoAAARmBLAALAA1AAABMzIWDwEeARcTFzMyFhQGBw4EIyIuBC8BLgE0NjsBNxM%2BATcnJjYDFjMyNw4BIiYCKV4UEgYSU3oPP3YRExwaEggeZGqfTzl0XFU%2BLwwLEhocExF2Pw96UxIGEyQyNDUxDDdGOASwFRMlE39N%2FrmtHSkoBwQLHBYSCg4REg4FBAgoKR2tAUdNfhQgExr7vgYGMT09AAEAFAAUBJwEnAAXAAABNwcXBxcHFycHJwcnBzcnNyc3Jxc3FzcDIOBO6rS06k7gLZubLeBO6rS06k7gLZubA7JO4C2bmy3gTuq0tOpO4C2bmy3gTuq0tAADAAAAZASwBLAAIQAtAD0AAAEzMhYdAQchMhYdARQHAw4BKwEiJi8BIyImNRE0PwI%2BARcPAREzFzMTNSE3NQEzMhYVERQGKwEiJjURNDYCijIoPBwBSCg8He4QLBf6B0YfHz0tNxSRYA0xG2SWZIjW%2Bv4%2BMv12ZBUdHRVkFR0dBLBRLJZ9USxkLR3%2BqBghMhkZJCcBkCQbxMYcKGTU1f6JZAF3feGv%2FtQdFf4MFR0dFQH0FR0AAAAAAwAAAAAEsARMACAAMAA8AAABMzIWFxMWHQEUBiMhFh0BFAYrASImLwImNRE0NjsBNgUzMhYVERQGKwEiJjURNDYhByMRHwEzNSchNQMCWPoXLBDuHTwo%2FrgcPCgyGzENYJEUNy09fP3pZBUdHRVkFR0dAl%2BIZJZkMjIBwvoETCEY%2FqgdLWQsUXYHlixRKBzGxBskAZAnJGRkHRX%2BDBUdHRUB9BUdZP6J1dSv4X0BdwADAAAAZAUOBE8AGwA3AEcAAAElNh8BHgEPASEyFhQGKwEDDgEjISImNRE0NjcXERchEz4BOwEyNiYjISoDLgQnJj8BJwUzMhYVERQGKwEiJjURNDYBZAFrHxZuDQEMVAEuVGxuVGqDBhsP%2FqoHphwOOmQBJYMGGw%2FLFRMSFv44AgoCCQMHAwUDAQwRklb9T2QVHR0VZBUdHQNp5hAWcA0mD3lMkE7%2BrRUoog0CDRElCkj%2BCVkBUxUoMjIBAgIDBQIZFrdT5B0V%2FgwVHR0VAfQVHQAAAAP%2FnABkBLAETwAdADYARgAAAQUeBBURFAYjISImJwMjIiY0NjMhJyY2PwE2BxcWBw4FKgIjIRUzMhYXEyE3ESUFMzIWFREUBisBIiY1ETQ2AdsBbgIIFBANrAf%2Bqg8bBoNqVW1sVAEuVQsBDW4WSpIRDAIDBQMHAwkDCgH%2BJd0PHAaCASZq%2FqoCUGQVHR0VZBUdHQRP5gEFEBEXC%2F3zDaIoFQFTTpBMeQ8mDXAWrrcWGQIFAwICAWQoFf6tWQH37OQdFf4MFR0dFQH0FR0AAAADAGEAAARMBQ4AGwA3AEcAAAAyFh0BBR4BFREUBiMhIiYvAQMmPwE%2BAR8BETQXNTQmBhURHAMOBAcGLwEHEyE3ESUuAQMhMhYdARQGIyEiJj0BNDYB3pBOAVMVKKIN%2FfMRJQoJ5hAWcA0mD3nGMjIBAgIDBQIZFrdT7AH3Wf6tFSiWAfQVHR0V%2FgwVHR0FDm5UaoMGGw%2F%2BqgemHA4OAWsfFm4NAQxUAS5U1ssVExIW%2FjgCCgIJAwcDBQMBDBGSVv6tZAElgwYb%2FQsdFWQVHR0VZBUdAAP%2F%2FQAGA%2BgFFAAPAC0ASQAAASEyNj0BNCYjISIGHQEUFgEVFAYiJjURBwYmLwEmNxM%2BBDMhMhYVERQGBwEDFzc2Fx4FHAIVERQWNj0BNDY3JREnAV4B9BUdHRX%2BDBUdHQEPTpBMeQ8mDXAWEOYBBRARFwsCDQ2iKBX9iexTtxYZAgUDAgIBMjIoFQFTWQRMHRVkFR0dFWQVHfzmalRubFQBLlQMAQ1uFh8BawIIEw8Mpgf%2Bqg8bBgHP%2Fq1WkhEMAQMFAwcDCQIKAv44FhITFcsPGwaDASVkAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBJSYGHQEhIgYdARQWMyEVFBY3JTY0AeLs1ptbW5vW7NabW1ubAob%2B7RAX%2Fu0KDw8KARMXEAETEASaW5vW7NabW1ub1uzWm%2F453w0KFYkPCpYKD4kVCg3fDSYAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgENAQYUFwUWNj0BITI2PQE0JiMhNTQmAeLs1ptbW5vW7NabW1ubASX%2B7RAQARMQFwETCg8PCv7tFwSaW5vW7NabW1ub1uzWm%2BjfDSYN3w0KFYkPCpYKD4kVCgAAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEBAyYiBwMGFjsBERQWOwEyNjURMzI2AeLs1ptbW5vW7NabW1ubAkvfDSYN3w0KFYkPCpYKD4kVCgSaW5vW7NabW1ub1uzWm%2F5AARMQEP7tEBf%2B7QoPDwoBExcAAAIAFgAWBJoEmgAPACUAAAAyHgIUDgIiLgI0PgEFIyIGFREjIgYXExYyNxM2JisBETQmAeLs1ptbW5vW7NabW1ubAZeWCg%2BJFQoN3w0mDd8NChWJDwSaW5vW7NabW1ub1uzWm7sPCv7tFxD%2B7RAQARMQFwETCg8AAAMAGAAYBJgEmAAPAJYApgAAADIeAhQOAiIuAjQ%2BASUOAwcGJgcOAQcGFgcOAQcGFgcUFgcyHgEXHgIXHgI3Fg4BFx4CFxQGFBcWNz4CNy4BJy4BJyIOAgcGJyY2NS4BJzYuAQYHBicmNzY3HgIXHgMfAT4CJyY%2BATc%2BAzcmNzIWMjY3LgMnND4CJiceAT8BNi4CJwYHFB4BFS4CJz4BNxYyPgEB5OjVm1xcm9Xo1ZtcXJsBZA8rHDoKDz0PFD8DAxMBAzEFCRwGIgEMFhkHECIvCxU%2FOR0HFBkDDRQjEwcFaHUeISQDDTAMD0UREi4oLBAzDwQBBikEAQMLGhIXExMLBhAGKBsGBxYVEwYFAgsFAwMNFwQGCQcYFgYQCCARFwkKKiFBCwQCAQMDHzcLDAUdLDgNEiEQEgg%2FKhADGgMKEgoRBJhcm9Xo1ZtcXJvV6NWbEQwRBwkCAwYFBycPCxcHInIWInYcCUcYChQECA4QBAkuHgQPJioRFRscBAcSCgwCch0kPiAIAQcHEAsBAgsLIxcBMQENCQIPHxkCFBkdHB4QBgEBBwoMGBENBAMMJSAQEhYXDQ4qFBkKEhIDCQsXJxQiBgEOCQwHAQ0DBAUcJAwSCwRnETIoAwEJCwsLJQcKDBEAAAAAAQAAAAIErwSFABYAAAE2FwUXNxYGBw4BJwEGIi8BJjQ3ASY2AvSkjv79kfsGUE08hjv9rA8rD28PDwJYIk8EhVxliuh%2BWYcrIgsW%2FawQEG4PKxACV2XJAAYAAABgBLAErAAPABMAIwAnADcAOwAAEyEyFh0BFAYjISImPQE0NgUjFTMFITIWHQEUBiMhIiY9ATQ2BSEVIQUhMhYdARQGIyEiJj0BNDYFIRUhZAPoKTs7KfwYKTs7BBHIyPwYA%2BgpOzsp%2FBgpOzsEEf4MAfT8GAPoKTs7KfwYKTs7BBH%2B1AEsBKw7KWQpOzspZCk7ZGTIOylkKTs7KWQpO2RkyDspZCk7OylkKTtkZAAAAAIAZAAABEwEsAALABEAABMhMhYUBiMhIiY0NgERBxEBIZYDhBUdHRX8fBUdHQI7yP6iA4QEsB0qHR0qHf1E%2FtTIAfQB9AAAAAMAAABkBLAEsAAXABsAJQAAATMyFh0BITIWFREhNSMVIRE0NjMhNTQ2FxUzNQEVFAYjISImPQEB9MgpOwEsKTv%2BDMj%2BDDspASw7KcgB9Dsp%2FBgpOwSwOylkOyn%2BcGRkAZApO2QpO2RkZP1EyCk7OynIAAAABAAAAAAEsASwABUAKwBBAFcAABMhMhYPARcWFA8BBiIvAQcGJjURNDYpATIWFREUBi8BBwYiLwEmND8BJyY2ARcWFA8BFxYGIyEiJjURNDYfATc2MgU3NhYVERQGIyEiJj8BJyY0PwE2MhcyASwVCA5exwcHaggUCMdeDhUdAzUBLBUdFQ5exwgUCGoHB8deDgj%2BL2oHB8deDggV%2FtQVHRUOXscIFALLXg4VHRX%2B1BUIDl7HBwdqCBQIBLAVDl7HCBQIagcHx14OCBUBLBUdHRX%2B1BUIDl7HBwdqCBQIx14OFf0maggUCMdeDhUdFQEsFQgOXscHzl4OCBX%2B1BUdFQ5exwgUCGoHBwAAAAYAAAAABKgEqAAPABsAIwA7AEMASwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JiQyFhQGIiY0JDIWFAYjIicHFhUUBiImNTQ2PwImNTQEMhYUBiImNCQyFhQGIiY0Advy3Z9fX5%2Fd8t2gXl6gAcbgv29vv%2BC%2Fb2%2F%2BLS0gIC0gAUwtICAWDg83ETNIMykfegEJ%2FoctICAtIAIdLSAgLSAEqF%2Bf3fLdoF5eoN3y3Z9Xb7%2Fgv29vv%2BC%2FBiAtISEtICAtIQqRFxwkMzMkIDEFfgEODhekIC0gIC0gIC0gIC0AAf%2FYAFoEuQS8AFsAACUBNjc2JicmIyIOAwcABw4EFx4BMzI3ATYnLgEjIgcGBwEOASY0NwA3PgEzMhceARcWBgcOBgcGIyImJyY2NwE2NzYzMhceARcWBgcBDgEnLgECIgHVWwgHdl8WGSJBMD8hIP6IDx4eLRMNBQlZN0ozAiQkEAcdEhoYDRr%2Bqw8pHA4BRyIjQS4ODyw9DQ4YIwwod26La1YOOEBGdiIwGkQB%2F0coW2tQSE5nDxE4Qv4eDyoQEAOtAdZbZWKbEQQUGjIhH%2F6JDxsdNSg3HT5CMwIkJCcQFBcMGv6uDwEcKQ4BTSIjIQEINykvYyMLKnhuiWZMBxtAOU6%2BRAH%2FSBg3ISSGV121Qv4kDwIPDyYAAAACAGQAWASvBEQAGQBEAAABPgIeAhUUDgMHLgQ1ND4CHgEFIg4DIi4DIyIGFRQeAhcWFx4EMj4DNzY3PgQ1NCYCiTB7eHVYNkN5hKg%2BPqeFeEM4WnZ4eQEjIT8yLSohJyktPyJDbxtBMjMPBw86KzEhDSIzKUAMBAgrKT8dF2oDtURIBS1TdkA5eYB%2FslVVsn%2BAeTlAdlMtBUgtJjY1JiY1NiZvTRc4SjQxDwcOPCouGBgwKEALBAkpKkQqMhNPbQACADn%2F8gR3BL4AFwAuAAAAMh8BFhUUBg8BJi8BNycBFwcvASY0NwEDNxYfARYUBwEGIi8BJjQ%2FARYfAQcXAQKru0KNQjgiHR8uEl%2F3%2FnvUaRONQkIBGxJpCgmNQkL%2B5UK6Qo1CQjcdLhJf9wGFBL5CjUJeKmsiHTUuEl%2F4%2FnvUahKNQrpCARv%2BRmkICY1CukL%2B5UJCjUK7Qjc3LxFf%2BAGFAAAAAAMAyAAAA%2BgEsAARABUAHQAAADIeAhURFAYjISImNRE0PgEHESERACIGFBYyNjQCBqqaZDo7Kf2oKTs8Zj4CWP7%2FVj09Vj0EsB4uMhX8Ryk7OykDuRUzLar9RAK8%2FRY9Vj09VgABAAAAAASwBLAAFgAACQEWFAYiLwEBEScBBRMBJyEBJyY0NjIDhgEbDx0qDiT%2B6dT%2BzP7oywEz0gEsAQsjDx0qBKH%2B5g8qHQ8j%2FvX%2B1NL%2BzcsBGAE01AEXJA4qHQAAAAADAScAEQQJBOAAMgBAAEsAAAEVHgQXIy4DJxEXHgQVFAYHFSM1JicuASczHgEXEScuBDU0PgI3NRkBDgMVFB4DFxYXET4ENC4CArwmRVI8LAKfBA0dMydAIjxQNyiym2SWVygZA4sFV0obLkJOMCAyVWg6HSoqFQ4TJhkZCWgWKTEiGBkzNwTgTgUTLD9pQiQuLBsH%2Fs0NBxMtPGQ%2Bi6oMTU8QVyhrVk1iEAFPCA4ZLzlYNkZwSCoGTf4SARIEDh02Jh0rGRQIBgPQ%2FsoCCRYgNEM0JRkAAAABAGQAZgOUBK0ASgAAATIeARUjNC4CIyIGBwYVFB4BFxYXMxUjFgYHBgc%2BATM2FjMyNxcOAyMiLgEHDgEPASc%2BBTc%2BAScjNTMmJy4CPgE3NgIxVJlemSc8OxolVBQpGxoYBgPxxQgVFS02ImIWIIwiUzUyHzY4HCAXanQmJ1YYFzcEGAcTDBEJMAwk3aYXFQcKAg4tJGEErVCLTig%2FIhIdFSw5GkowKgkFZDKCHj4yCg8BIh6TExcIASIfBAMaDAuRAxAFDQsRCjePR2QvORQrREFMIVgAAAACABn%2F%2FwSXBLAADwAfAAABMzIWDwEGIi8BJjY7AREzBRcWBisBESMRIyImPwE2MgGQlhUIDuYOKg7mDggVlsgCF%2BYOCBWWyJYVCA7mDioBLBYO%2Bg8P%2Bg4WA4QQ%2BQ4V%2FHwDhBUO%2BQ8AAAQAGf%2F%2FA%2BgEsAAHABcAGwAlAAABIzUjFSMRIQEzMhYPAQYiLwEmNjsBETMFFTM1EwczFSE1NyM1IQPoZGRkASz9qJYVCA7mDioO5g4IFZbIAZFkY8jI%2FtTIyAEsArxkZAH0%2FHwWDvoPD%2FoOFgOEZMjI%2FRL6ZJb6ZAAAAAAEABn%2F%2FwPoBLAADwAZACEAJQAAATMyFg8BBiIvASY2OwERMwUHMxUhNTcjNSERIzUjFSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAljIyP7UyMgBLGRkZAEsx2QBLBYO%2Bg8P%2Bg4WA4SW%2BmSW%2BmT7UGRkAfRkyMgAAAAEABn%2F%2FwRMBLAADwAVABsAHwAAATMyFg8BBiIvASY2OwERMwEjESM1MxMjNSMRIQcVMzUBkJYVCA7mDioO5g4IFZbIAlhkZMhkZMgBLMdkASwWDvoPD%2FoOFgOE%2FgwBkGT7UGQBkGTIyAAAAAAEABn%2F%2FwRMBLAADwAVABkAHwAAATMyFg8BBiIvASY2OwERMwEjNSMRIQcVMzUDIxEjNTMBkJYVCA7mDioO5g4IFZbIArxkyAEsx2QBZGTIASwWDvoPD%2FoOFgOE%2FgxkAZBkyMj7tAGQZAAAAAAFABn%2F%2FwSwBLAADwATABcAGwAfAAABMzIWDwEGIi8BJjY7AREzBSM1MxMhNSETITUhEyE1IQGQlhUIDuYOKg7mDggVlsgB9MjIZP7UASxk%2FnABkGT%2BDAH0ASwWDvoPD%2FoOFgOEyMj%2BDMj%2BDMj%2BDMgABQAZ%2F%2F8EsASwAA8AEwAXABsAHwAAATMyFg8BBiIvASY2OwERMwUhNSEDITUhAyE1IQMjNTMBkJYVCA7mDioO5g4IFZbIAyD%2BDAH0ZP5wAZBk%2FtQBLGTIyAEsFg76Dw%2F6DhYDhMjI%2FgzI%2FgzI%2FgzIAAIAAAAABEwETAAPAB8AAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmAV4BkKK8u6P%2BcKW5uQJn%2FgwpOzspAfQpOzsETLuj%2FnClubmlAZClucg7Kf4MKTs7KQH0KTsAAAAAAwAAAAAETARMAA8AHwArAAABITIWFREUBiMhIiY1ETQ2BSEiBhURFBYzITI2NRE0JgUXFhQPAQYmNRE0NgFeAZClubml%2FnCju7wCZP4MKTs7KQH0KTs7%2Fm%2F9ERH9EBgYBEy5pf5wpbm5pQGQo7vIOyn%2BDCk7OykB9Ck7gr4MJAy%2BDAsVAZAVCwAAAAADAAAAAARMBEwADwAfACsAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFg8BBiIvASY2AV4BkKO7uaX%2BcKW5uQJn%2FgwpOzspAfQpOzv%2BFQGQFQsMvgwkDL4MCwRMvKL%2BcKW5uaUBkKO7yDsp%2FgwpOzspAfQpO8gYEP0REf0QGAAAAAMAAAAABEwETAAPAB8AKwAAASEyFhURFAYjISImNRE0NgUhIgYVERQWMyEyNjURNCYFFxYGIyEiJj8BNjIBXgGQpbm5pf5wo7u5Amf%2BDCk7OykB9Ck7O%2F77vgwLFf5wFQsMvgwkBEy5pf5wo7u8ogGQpbnIOyn%2BDCk7OykB9Ck7z%2F0QGBgQ%2FREAAAAAAgAAAAAFFARMAB8ANQAAASEyFhURFAYjISImPQE0NjMhMjY1ETQmIyEiJj0BNDYHARYUBwEGJj0BIyImPQE0NjsBNTQ2AiYBkKW5uaX%2BcBUdHRUBwik7Oyn%2BPhUdHb8BRBAQ%2FrwQFvoVHR0V%2BhYETLml%2FnCluR0VZBUdOykB9Ck7HRVkFR3p%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgAAAQDZAAID1wSeACMAAAEXFgcGAgclMhYHIggBBwYrAScmNz4BPwEhIicmNzYANjc2MwMZCQgDA5gCASwYEQ4B%2Fvf%2B8wQMDgkJCQUCUCcn%2FtIXCAoQSwENuwUJEASeCQoRC%2F5TBwEjEv7K%2FsUFDwgLFQnlbm4TFRRWAS%2FTBhAAAAACAAAAAAT%2BBEwAHwA1AAABITIWHQEUBiMhIgYVERQWMyEyFh0BFAYjISImNRE0NgUBFhQHAQYmPQEjIiY9ATQ2OwE1NDYBXgGQFR0dFf4%2BKTs7KQHCFR0dFf5wpbm5AvEBRBAQ%2FrwQFvoVHR0V%2BhYETB0VZBUdOyn%2BDCk7HRVkFR25pQGQpbnp%2FuQOJg7%2B5A4KFZYdFcgVHZYVCgACAAAAAASwBLAAFQAxAAABITIWFREUBi8BAQYiLwEmNDcBJyY2ASMiBhURFBYzITI2PQE3ERQGIyEiJjURNDYzIQLuAZAVHRUObf7IDykPjQ8PAThtDgj%2B75wpOzspAfQpO8i7o%2F5wpbm5pQEsBLAdFf5wFQgObf7IDw%2BNDykPAThtDhX%2B1Dsp%2FgwpOzsplMj%2B1qW5uaUBkKW5AAADAA4ADgSiBKIADwAbACMAAAAyHgIUDgIiLgI0PgEEIg4BFB4BMj4BNCYEMhYUBiImNAHh7tmdXV2d2e7ZnV1dnQHD5sJxccLmwnFx%2FnugcnKgcgSiXZ3Z7tmdXV2d2e7ZnUdxwubCcXHC5sJzcqBycqAAAAMAAAAABEwEsAAVAB8AIwAAATMyFhURMzIWBwEGIicBJjY7ARE0NgEhMhYdASE1NDYFFTM1AcLIFR31FAoO%2FoEOJw3%2BhQ0JFfod%2FoUD6BUd%2B7QdA2dkBLAdFf6iFg%2F%2BVg8PAaoPFgFeFR38fB0V%2BvoVHWQyMgAAAAMAAAAABEwErAAVAB8AIwAACQEWBisBFRQGKwEiJj0BIyImNwE%2BAQEhMhYdASE1NDYFFTM1AkcBeg4KFfQiFsgUGPoUCw4Bfw4n%2FfkD6BUd%2B7QdA2dkBJ7%2BTQ8g%2BhQeHRX6IQ8BrxAC%2FH8dFfr6FR1kMjIAAwAAAAAETARLABQAHgAiAAAJATYyHwEWFAcBBiInASY0PwE2MhcDITIWHQEhNTQ2BRUzNQGMAXEHFQeLBwf98wcVB%2F7cBweLCBUH1APoFR37tB0DZ2QC0wFxBweLCBUH%2FfMICAEjCBQIiwcH%2FdIdFfr6FR1kMjIABAAAAAAETASbAAkAGQAjACcAABM3NjIfAQcnJjQFNzYWFQMOASMFIiY%2FASc3ASEyFh0BITU0NgUVMzWHjg4qDk3UTQ4CFtIOFQIBHRX9qxUIDtCa1P49A%2BgVHfu0HQNnZAP%2Fjg4OTdRMDyqa0g4IFf2pFB4BFQ7Qm9T9Oh0V%2BvoVHWQyMgAAAAQAAAAABEwEsAAPABkAIwAnAAABBR4BFRMUBi8BByc3JyY2EwcGIi8BJjQ%2FAQEhMhYdASE1NDYFFTM1AV4CVxQeARUO0JvUm9IOCMNMDyoOjg4OTf76A%2BgVHfu0HQNnZASwAgEdFf2rFQgO0JrUmtIOFf1QTQ4Ojg4qDk3%2BWB0V%2BvoVHWQyMgACAAT%2F7ASwBK8ABQAIAAAlCQERIQkBFQEEsP4d%2Fsb%2BcQSs%2FTMCq2cBFP5xAacDHPz55gO5AAAAAAIAAABkBEwEsAAVABkAAAERFAYrAREhESMiJjURNDY7AREhETMHIzUzBEwdFZb9RJYVHR0V%2BgH0ZMhkZAPo%2FK4VHQGQ%2FnAdFQPoFB7%2B1AEsyMgAAAMAAABFBN0EsAAWABoALwAAAQcBJyYiDwEhESMiJjURNDY7AREhETMHIzUzARcWFAcBBiIvASY0PwE2Mh8BATYyBEwC%2FtVfCRkJlf7IlhUdHRX6AfRkyGRkAbBqBwf%2BXAgUCMoICGoHFQdPASkHFQPolf7VXwkJk%2F5wHRUD6BQe%2FtQBLMjI%2Fc5qBxUH%2FlsHB8sHFQdqCAhPASkHAAMAAAANBQcEsAAWABoAPgAAAREHJy4BBwEhESMiJjURNDY7AREhETMHIzUzARcWFA8BFxYUDwEGIi8BBwYiLwEmND8BJyY0PwE2Mh8BNzYyBExnhg8lEP72%2FreWFR0dFfoB9GTIZGQB9kYPD4ODDw9GDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykD6P7zZ4YPAw7%2B9v5wHRUD6BQe%2FtQBLMjI%2FYxGDykPg4MPKQ9GDw%2BDgw8PRg8pD4ODDykPRg8Pg4MPAAADAAAAFQSXBLAAFQAZAC8AAAERISIGHQEhESMiJjURNDY7AREhETMHIzUzEzMyFh0BMzIWDwEGIi8BJjY7ATU0NgRM%2FqIVHf4MlhUdHRX6AfRkyGRklmQVHZYVCA7mDioO5g4IFZYdA%2Bj%2B1B0Vlv5wHRUD6BQe%2FtQBLMjI%2FagdFfoVDuYODuYOFfoVHQAAAAADAAAAAASXBLAAFQAZAC8AAAERJyYiBwEhESMiJjURNDY7AREhETMHIzUzExcWBisBFRQGKwEiJj0BIyImPwE2MgRMpQ4qDv75%2Fm6WFR0dFfoB9GTIZGTr5g4IFZYdFWQVHZYVCA7mDioD6P5wpQ8P%2Fvf%2BcB0VA%2BgUHv7UASzIyP2F5Q8V%2BhQeHhT6FQ%2FlDwADAAAAyASwBEwACQATABcAABMhMhYdASE1NDYBERQGIyEiJjURExUhNTIETBUd%2B1AdBJMdFfu0FR1kAZAETB0VlpYVHf7U%2FdoVHR0VAib%2B1MjIAAAGAAMAfQStBJcADwAZAB0ALQAxADsAAAEXFhQPAQYmPQEhNSE1NDYBIyImPQE0NjsBFyM1MwE3NhYdASEVIRUUBi8BJjQFIzU7AjIWHQEUBisBA6f4Dg74DhX%2BcAGQFf0vMhUdHRUyyGRk%2FoL3DhUBkP5wFQ73DwOBZGRkMxQdHRQzBI3mDioO5g4IFZbIlhUI%2FoUdFWQVHcjI%2FcvmDggVlsiWFQgO5g4qecgdFWQVHQAAAAACAGQAAASwBLAAFgBRAAABJTYWFREUBisBIiY1ES4ENRE0NiUyFh8BERQOAg8BERQGKwEiJjURLgQ1ETQ%2BAzMyFh8BETMRPAE%2BAjMyFh8BETMRND4DA14BFBklHRXIFR0EDiIaFiX%2B4RYZAgEVHR0LCh0VyBUdBA4iGhYBBwoTDRQZAgNkBQkVDxcZAQFkAQUJFQQxdBIUH%2FuuFR0dFQGNAQgbHzUeAWcfRJEZDA3%2BPhw%2FMSkLC%2F5BFR0dFQG%2FBA8uLkAcAcICBxENCxkMDf6iAV4CBxENCxkMDf6iAV4CBxENCwABAGQAAASwBEwAMwAAARUiDgMVERQWHwEVITUyNjURIREUFjMVITUyPgM1ETQmLwE1IRUiBhURIRE0JiM1BLAEDiIaFjIZGf5wSxn%2BDBlL%2FnAEDiIaFjIZGQGQSxkB9BlLBEw4AQUKFA78iBYZAQI4OA0lAYr%2BdiUNODgBBQoUDgN4FhkBAjg4DSX%2BdgGKJQ04AAAABgAAAAAETARMAAwAHAAgACQAKAA0AAABITIWHQEjBTUnITchBSEyFhURFAYjISImNRE0NhcVITUBBTUlBRUhNQUVFAYjIQchJyE3MwKjAXcVHWn%2B2cj%2BcGQBd%2F4lASwpOzsp%2FtQpOzspASwCvP5wAZD8GAEsArwdFf6JZP6JZAGQyGkD6B0VlmJiyGTIOyn%2BDCk7OykB9Ck7ZMjI%2FveFo4XGyMhm%2BBUdZGTIAAEAEAAQBJ8EnwAmAAATNzYWHwEWBg8BHgEXNz4BHwEeAQ8BBiIuBicuBTcRohEuDosOBhF3ZvyNdxEzE8ATBxGjAw0uMUxPZWZ4O0p3RjITCwED76IRBhPCFDERdo78ZXYRBA6IDi8RogEECBUgNUNjO0qZfHNVQBAAAAACAAAAAASwBEwAIwBBAAAAMh4EHwEVFAYvAS4BPQEmIAcVFAYPAQYmPQE%2BBRIyHgIfARUBHgEdARQGIyEiJj0BNDY3ATU0PgIB%2FLimdWQ%2FLAkJHRTKFB2N%2FsKNHRTKFB0DDTE7ZnTKcFImFgEBAW0OFR0V%2B7QVHRUOAW0CFiYETBUhKCgiCgrIFRgDIgMiFZIYGJIVIgMiAxgVyAQNJyQrIP7kExwcCgoy%2FtEPMhTUFR0dFdQUMg8BLzIEDSEZAAADAAAAAASwBLAADQAdACcAAAEHIScRMxUzNTMVMzUzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYETMj9qMjIyMjIyPyuArwVHR0VDIn8SokMFR0dswRMFR37UB0CvMjIAfTIyMjI%2FOAdKh1kZB0qHf7UHRUyMhUdAAAAAwBkAAAEsARMAAkAEwAdAAABIyIGFREhETQmASMiBhURIRE0JgEhETQ2OwEyFhUCvGQpOwEsOwFnZCk7ASw7%2FRv%2B1DspZCk7BEw7KfwYA%2BgpO%2F7UOyn9RAK8KTv84AGQKTs7KQAAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQURByMRMwcRMxHIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkyMhkZARMsHz%2BDHywsHwB9HywyP1EArzIZP7UZGQBLGT%2B1GQB9GT%2B1AEsAAAABf%2BcAAAEsARMAA8AEwAfACUAKQAAEyEyFhURFAYjISImNRE0NhcRIREBIzUjFSMRMxUzNTMFEQcjETMHETMRyAK8fLCwfP1EfLCwGAOE%2FgxkZGRkZGQBkGTIyGRkBEywfP4MfLCwfAH0fLDI%2FUQCvP2oyMgB9MjIZP7UZAH0ZP7UASwABP%2BcAAAEsARMAA8AEwAbACMAABMhMhYVERQGIyEiJjURNDYXESERBSMRMxUhESEFIxEzFSERIcgCvHywsHz9RHywsBgDhP4MyMj%2B1AEsAZDIyP7UASwETLB8%2Fgx8sLB8AfR8sMj9RAK8yP7UZAH0ZP7UZAH0AAAABP%2BcAAAEsARMAA8AEwAWABkAABMhMhYVERQGIyEiJjURNDYXESERAS0BDQERyAK8fLCwfP1EfLCwGAOE%2Fgz%2B1AEsAZD%2B1ARMsHz%2BDHywsHwB9HywyP1EArz%2BDJaWlpYBLAAAAAX%2FnAAABLAETAAPABMAFwAgACkAABMhMhYVERQGIyEiJjURNDYXESERAyERIQcjIgYVFBY7AQERMzI2NTQmI8gCvHywsHz9RHywsBgDhGT9RAK8ZIImOTYpgv4Mgik2OSYETLB8%2Fgx8sLB8AfR8sMj9RAK8%2FagB9GRWQUFUASz%2B1FRBQVYAAAAF%2F5wAAASwBEwADwATAB8AJQApAAATITIWFREUBiMhIiY1ETQ2FxEhEQUjFTMRITUzNSMRIQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMjI%2FtTIyAEsAZBkZMjIZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yGT%2B1GRkASz%2BDAGQZP4MZAAG%2F5wAAASwBEwADwATABkAHwAjACcAABMhMhYVERQGIyEiJjURNDYXESERBTMRIREzASMRIzUzBRUzNQEjNTPIArx8sLB8%2FUR8sLAYA4T9RMj%2B1GQCWGRkyP2oZAEsZGQETLB8%2Fgx8sLB8AfR8sMj9RAK8yP5wAfT%2BDAGQZMjIyP7UZAAF%2F5wAAASwBEwADwATABwAIgAmAAATITIWFREUBiMhIiY1ETQ2FxEhEQEHIzU3NSM1IQEjESM1MwMjNTPIArx8sLB8%2FUR8sLAYA4T%2BDMdkx8gBLAGQZGTIx2RkBEywfP4MfLCwfAH0fLDI%2FUQCvP5wyDLIlmT%2BDAGQZP4MZAAAAAMACQAJBKcEpwAPABsAJQAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgchFSEVISc1NyEB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWz%2B1AEs%2FtRkZAEsBKdentvw255eXp7b8NueTHHC5MJxccLkwtDIZGTIZAAAAAAEAAkACQSnBKcADwAbACcAKwAAADIeAhQOAiIuAjQ%2BAQQiDgEUHgEyPgE0JgcVBxcVIycjFSMRIQcVMzUB4PDbnl5entvw255eXp4BxeTCcXHC5MJxcWwyZGRklmQBLMjIBKdentvw255eXp7b8NueTHHC5MJxccLkwtBkMmQyZGQBkGRkZAAAAv%2Fy%2F50EwgRBACAANgAAATIWFzYzMhYUBisBNTQmIyEiBh0BIyImNTQ2NyY1ND4BEzMyFhURMzIWDwEGIi8BJjY7ARE0NgH3brUsLC54qqp4gB0V%2FtQVHd5QcFZBAmKqepYKD4kVCg3fDSYN3w0KFYkPBEF3YQ6t8a36FR0dFfpzT0VrDhMSZKpi%2FbMPCv7tFxD0EBD0EBcBEwoPAAAAAAL%2F8v%2BcBMMEQQAcADMAAAEyFhc2MzIWFxQGBwEmIgcBIyImNTQ2NyY1ND4BExcWBisBERQGKwEiJjURIyImNzY3NjIB9m62LCsueaoBeFr%2Bhg0lDf6DCU9xVkECYqnm3w0KFYkPCpYKD4kVCg3HGBMZBEF3YQ%2BteGOkHAFoEBD%2Bk3NPRWsOExNkqWP9kuQQF%2F7tCg8PCgETFxDMGBMAAAABAGQAAARMBG0AGAAAJTUhATMBMwkBMwEzASEVIyIGHQEhNTQmIwK8AZD%2B8qr%2B8qr%2B1P7Uqv7yqv7yAZAyFR0BkB0VZGQBLAEsAU3%2Bs%2F7U%2FtRkHRUyMhUdAAAAAAEAeQAABDcEmwAvAAABMhYXHgEVFAYHFhUUBiMiJxUyFh0BITU0NjM1BiMiJjU0Ny4BNTQ2MzIXNCY1NDYCWF6TGll7OzIJaUo3LRUd%2FtQdFS03SmkELzlpSgUSAqMEm3FZBoNaPWcfHRpKaR77HRUyMhUd%2Bx5pShIUFVg1SmkCAhAFdKMAAAAGACcAFASJBJwAEQAqAEIASgBiAHsAAAEWEgIHDgEiJicmAhI3PgEyFgUiBw4BBwYWHwEWMzI3Njc2Nz4BLwEmJyYXIgcOAQcGFh8BFjMyNz4BNz4BLwEmJyYWJiIGFBYyNjciBw4BBw4BHwEWFxYzMjc%2BATc2Ji8BJhciBwYHBgcOAR8BFhcWMzI3PgE3NiYvASYD8m9PT29T2dzZU29PT29T2dzZ%2Fj0EBHmxIgQNDCQDBBcGG0dGYAsNAwkDCwccBAVQdRgEDA0iBAQWBhJROQwMAwkDCwf5Y4xjY4xjVhYGElE6CwwDCQMLBwgEBVB1GAQNDCIEjRcGG0dGYAsNAwkDCwcIBAR5sSIEDQwkAwPyb%2F7V%2FtVvU1dXU28BKwErb1NXVxwBIrF5DBYDCQEWYEZHGwMVDCMNBgSRAhh1UA0WAwkBFTpREgMVCyMMBwT6Y2OMY2MVFTpREQQVCyMMBwQCGHVQDRYDCQEkFmBGRxsDFQwjDQYEASKxeQwWAwkBAAAABQBkAAAD6ASwAAwADwAWABwAIgAAASERIzUhFSERNDYzIQEjNQMzByczNTMDISImNREFFRQGKwECvAEstP6s%2FoQPCgI%2FASzIZKLU1KJktP51Cg8DhA8KwwMg%2FoTIyALzCg%2F%2B1Mj84NTUyP4MDwoBi8jDCg8AAAAABQBkAAAD6ASwAAkADAATABoAIQAAASERCQERNDYzIQEjNRMjFSM1IzcDISImPQEpARUUBisBNQK8ASz%2Bov3aDwoCPwEsyD6iZKLUqv6dCg8BfAIIDwqbAyD9%2BAFe%2FdoERwoP%2FtTI%2FHzIyNT%2BZA8KNzcKD1AAAAAAAwAAAAAEsAP0AAgAGQAfAAABIxUzFyERIzcFMzIeAhUhFSEDETM0PgIBMwMhASEEiqJkZP7UotT9EsgbGiEOASz9qMhkDiEaAnPw8PzgASwB9AMgyGQBLNTUBBErJGT%2BogHCJCsRBP5w%2FnAB9AAAAAMAAAAABEwETAAZADIAOQAAATMyFh0BMzIWHQEUBiMhIiY9ATQ2OwE1NDYFNTIWFREUBiMhIic3ARE0NjMVFBYzITI2AQc1IzUzNQKKZBUdMhUdHRX%2B1BUdHRUyHQFzKTs7Kf2oARP2%2Fro7KVg%2BASw%2BWP201MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7KfzgKTsE9gFGAUQpO5Y%2BWFj95tSiZKIAAwBkAAAEvARMABkANgA9AAABMzIWHQEzMhYdARQGIyEiJj0BNDY7ATU0NgU1MhYVESMRMxQOAiMhIiY1ETQ2MxUUFjMhMjYBBzUjNTM1AcJkFR0yFR0dFf7UFR0dFTIdAXMpO8jIDiEaG%2F2oKTs7KVg%2BASw%2BWAGc1MjIBEwdFTIdFWQVHR0VZBUdMhUd%2BpY7Kf4M%2FtQkKxEEOykDICk7lj5YWP3m1KJkogAAAAP%2FogAABRYE1AALABsAHwAACQEWBiMhIiY3ATYyEyMiBhcTHgE7ATI2NxM2JgMVMzUCkgJ9FyAs%2BwQsIBcCfRZARNAUGAQ6BCMUNhQjBDoEGODIBK37sCY3NyYEUCf%2BTB0U%2FtIUHR0UAS4UHf4MZGQAAAAACQAAAAAETARMAA8AHwAvAD8ATwBfAG8AfwCPAAABMzIWHQEUBisBIiY9ATQ2EzMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBMzIWHQEUBisBIiY9ATQ2ITMyFh0BFAYrASImPQE0NiEzMhYdARQGKwEiJj0BNDYBqfoKDw8K%2BgoPDwr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPD%2Fzq%2BgoPDwr6Cg8PAZr6Cg8PCvoKDw8BmvoKDw8K%2BgoPDwRMDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg%2F%2B1A8KlgoPDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKD%2F7UDwqWCg8PCpYKDw8KlgoPDwqWCg8PCpYKDw8KlgoPAAAAAwAAAAAEsAUUABkAKQAzAAABMxUjFSEyFg8BBgchJi8BJjYzITUjNTM1MwEhMhYUBisBFyE3IyImNDYDITIWHQEhNTQ2ArxkZAFePjEcQiko%2FPwoKUIcMT4BXmRkyP4%2BArwVHR0VDIn8SooNFR0dswRMFR37UB0EsMhkTzeEUzMzU4Q3T2TIZPx8HSodZGQdKh3%2B1B0VMjIVHQAABAAAAAAEsAUUAAUAGQArADUAAAAyFhUjNAchFhUUByEyFg8BIScmNjMhJjU0AyEyFhQGKwEVBSElNSMiJjQ2AyEyFh0BITU0NgIwUDnCPAE6EgMBSCkHIq%2F9WrIiCikBSAOvArwVHR0VlgET%2FEoBE5YVHR2zBEwVHftQHQUUOykpjSUmCBEhFpGRFiERCCb%2BlR0qHcjIyMgdKh39qB0VMjIVHQAEAAAAAASwBJ0ABwAUACQALgAAADIWFAYiJjQTMzIWFRQXITY1NDYzASEyFhQGKwEXITcjIiY0NgMhMhYdASE1NDYCDZZqapZqty4iKyf%2BvCcrI%2F7NArwVHR0VDYr8SokMFR0dswRMFR37UB0EnWqWamqW%2Fus5Okxra0w6Of5yHSodZGQdKh3%2B1B0VMjIVHQAEAAAAAASwBRQADwAcACwANgAAATIeARUUBiImNTQ3FzcnNhMzMhYVFBchNjU0NjMBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYL1szb5xvIpBvoyIfLiIrJ%2F68Jysj%2Fs0CvBUdHRUNivxKiQwVHR2zBEwVHftQHQUUa4s2Tm9vTj5Rj2%2BjGv4KOTpMa2tMOjn%2Bch0qHWRkHSod%2FtQdFTIyFR0AAAADAAAAAASwBRIAEgAiACwAAAEFFSEUHgMXIS4BNTQ%2BAjcBITIWFAYrARchNyMiJjQ2AyEyFh0BITU0NgJYASz%2B1CU%2FP00T%2Fe48PUJtj0r%2BogK8FR0dFQ2K%2FEqJDBUdHbMETBUd%2B1AdBLChizlmUT9IGVO9VFShdksE%2FH4dKh1kZB0qHf7UHRUyMhUdAAIAyAAAA%2BgFFAAPACkAAAAyFh0BHgEdASE1NDY3NTQDITIWFyMVMxUjFTMVIxUzFAYjISImNRE0NgIvUjsuNv5wNi5kAZA2XBqsyMjIyMh1U%2F5wU3V1BRQ7KU4aXDYyMjZcGk4p%2Fkc2LmRkZGRkU3V1UwGQU3UAAAMAZP%2F%2FBEwETAAPAC8AMwAAEyEyFhURFAYjISImNRE0NgMhMhYdARQGIyEXFhQGIi8BIQcGIiY0PwEhIiY9ATQ2BQchJ5YDhBUdHRX8fBUdHQQDtgoPDwr%2B5eANGiUNWP30Vw0mGg3g%2Ft8KDw8BqmQBRGQETB0V%2FgwVHR0VAfQVHf1EDwoyCg%2FgDSUbDVhYDRslDeAPCjIKD2RkZAAAAAAEAAAAAASwBEwAGQAjAC0ANwAAEyEyFh0BIzQmKwEiBhUjNCYrASIGFSM1NDYDITIWFREhETQ2ExUUBisBIiY9ASEVFAYrASImPQHIAyBTdWQ7KfopO2Q7KfopO2R1EQPoKTv7UDvxHRVkFR0D6B0VZBUdBEx1U8gpOzspKTs7KchTdf4MOyn%2B1AEsKTv%2BDDIVHR0VMjIVHR0VMgADAAEAAASpBKwADQARABsAAAkBFhQPASEBJjQ3ATYyCQMDITIWHQEhNTQ2AeACqh8fg%2F4f%2FfsgIAEnH1n%2BrAFWAS%2F%2Bq6IDIBUd%2FHwdBI39VR9ZH4MCBh9ZHwEoH%2F5u%2FqoBMAFV%2FBsdFTIyFR0AAAAAAgCPAAAEIQSwABcALwAAAQMuASMhIgYHAwYWMyEVFBYyNj0BMzI2AyE1NDY7ATU0NjsBETMRMzIWHQEzMhYVBCG9CCcV%2FnAVJwi9CBMVAnEdKh19FROo%2Fa0dFTIdFTDILxUdMhUdAocB%2BhMcHBP%2BBhMclhUdHRWWHP2MMhUdMhUdASz%2B1B0VMh0VAAAEAAAAAASwBLAADQAQAB8AIgAAASERFAYjIREBNTQ2MyEBIzUBIREUBiMhIiY1ETQ2MyEBIzUDhAEsDwr%2Bif7UDwoBdwEsyP2oASwPCv12Cg8PCgF3ASzIAyD9wQoPAk8BLFQKD%2F7UyP4M%2FcEKDw8KA7YKD%2F7UyAAC%2F5wAZAUUBEcARgBWAAABMzIeAhcWFxY2NzYnJjc%2BARYXFgcOASsBDgEPAQ4BKwEiJj8BBisBIicHDgErASImPwEmLwEuAT0BNDY7ATY3JyY2OwE2BSMiBh0BFBY7ATI2PQE0JgHkw0uOakkMEhEfQwoKGRMKBQ8XDCkCA1Y9Pgc4HCcDIhVkFRgDDDEqwxgpCwMiFWQVGAMaVCyfExwdFXwLLW8QBxXLdAFF%2BgoPDwr6Cg8PBEdBa4pJDgYKISAiJRsQCAYIDCw9P1c3fCbqFB0dFEYOCEAUHR0UnUplNQcmFTIVHVdPXw4TZV8PCjIKDw8KMgoPAAb%2FnP%2FmBRQEfgAJACQANAA8AFIAYgAAASU2Fh8BFgYPASUzMhYfASEyFh0BFAYHBQYmJyYjISImPQE0NhcjIgYdARQ7ATI2NTQmJyYEIgYUFjI2NAE3PgEeARceAT8BFxYGDwEGJi8BJjYlBwYfAR4BPwE2Jy4BJy4BAoEBpxMuDiAOAxCL%2FCtqQ0geZgM3FR0cE%2F0fFyIJKjr%2B1D5YWLlQExIqhhALIAsSAYBALS1ALf4PmBIgHhMQHC0aPzANITNQL3wpgigJASlmHyElDR0RPRMFAhQHCxADhPcICxAmDyoNeMgiNtQdFTIVJgeEBBQPQ1g%2ByD5YrBwVODMQEAtEERzJLUAtLUD%2B24ITChESEyMgAwWzPUkrRSgJL5cvfRxYGyYrDwkLNRAhFEgJDAQAAAAAAwBkAAAEOQSwAFEAYABvAAABMzIWHQEeARcWDgIPATIeBRUUDgUjFRQGKwEiJj0BIxUUBisBIiY9ASMiJj0BNDY7AREjIiY9ATQ2OwE1NDY7ATIWHQEzNTQ2AxUhMj4CNTc0LgMjARUhMj4CNTc0LgMjAnGWCg9PaAEBIC4uEBEGEjQwOiodFyI2LUAjGg8KlgoPZA8KlgoPrwoPDwpLSwoPDwqvDwqWCg9kD9cBBxwpEwsBAQsTKRz%2B%2BQFrHCkTCwEBCxMpHASwDwptIW1KLk0tHwYGAw8UKDJOLTtdPCoVCwJLCg8PCktLCg8PCksPCpYKDwJYDwqWCg9LCg8PCktLCg%2F%2B1MgVHR0LCgQOIhoW%2FnDIFR0dCwoEDiIaFgAAAwAEAAIEsASuABcAKQAsAAATITIWFREUBg8BDgEjISImJy4CNRE0NgQiDgQPARchNy4FAyMT1AMMVnokEhIdgVL9xFKCHAgYKHoCIIx9VkcrHQYGnAIwnAIIIClJVSGdwwSuelb%2BYDO3QkJXd3ZYHFrFMwGgVnqZFyYtLSUMDPPzBQ8sKDEj%2FsIBBQACAMgAAAOEBRQADwAZAAABMzIWFREUBiMhIiY1ETQ2ARUUBisBIiY9AQHblmesVCn%2BPilUrAFINhWWFTYFFKxn%2FgwpVFQpAfRnrPwY4RU2NhXhAAACAMgAAAOEBRQADwAZAAABMxQWMxEUBiMhIiY1ETQ2ARUUBisBIiY9AQHbYLOWVCn%2BPilUrAFINhWWFTYFFJaz%2FkIpVFQpAfRnrPwY4RU2NhXhAAACAAAAFAUOBBoAFAAaAAAJASUHFRcVJwc1NzU0Jj4CPwEnCQEFJTUFJQUO%2FYL%2Bhk5klpZkAQEBBQQvkwKCAVz%2Bov6iAV4BXgL%2F%2FuWqPOCWx5SVyJb6BA0GCgYDKEEBG%2F1ipqaTpaUAAAMAZAH0BLADIAAHAA8AFwAAEjIWFAYiJjQkMhYUBiImNCQyFhQGIiY0vHxYWHxYAeh8WFh8WAHofFhYfFgDIFh8WFh8WFh8WFh8WFh8WFh8AAAAAAMBkAAAArwETAAHAA8AFwAAADIWFAYiJjQSMhYUBiImNBIyFhQGIiY0Aeh8WFh8WFh8WFh8WFh8WFh8WARMWHxYWHz%2ByFh8WFh8%2FshYfFhYfAAAAAMAZABkBEwETAAPAB8ALwAAEyEyFh0BFAYjISImPQE0NhMhMhYdARQGIyEiJj0BNDYTITIWHQEUBiMhIiY9ATQ2fQO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PCgO2Cg8PCvxKCg8PBEwPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoP%2FnAPCpYKDw8KlgoPAAAABAAAAAAEsASwAA8AHwAvADMAAAEhMhYVERQGIyEiJjURNDYFISIGFREUFjMhMjY1ETQmBSEyFhURFAYjISImNRE0NhcVITUBXgH0ory7o%2F4Mpbm5Asv9qCk7OykCWCk7O%2F2xAfQVHR0V%2FgwVHR1HAZAEsLuj%2FgylubmlAfSlucg7Kf2oKTs7KQJYKTtkHRX%2B1BUdHRUBLBUdZMjIAAAAAAEAZABkBLAETAA7AAATITIWFAYrARUzMhYUBisBFTMyFhQGKwEVMzIWFAYjISImNDY7ATUjIiY0NjsBNSMiJjQ2OwE1IyImNDaWA%2BgVHR0VMjIVHR0VMjIVHR0VMjIVHR0V%2FBgVHR0VMjIVHR0VMjIVHR0VMjIVHR0ETB0qHcgdKh3IHSodyB0qHR0qHcgdKh3IHSodyB0qHQAAAAYBLAAFA%2BgEowAHAA0AEwAZAB8AKgAAAR4BBgcuATYBMhYVIiYlFAYjNDYBMhYVIiYlFAYjNDYDFRQGIiY9ARYzMgKKVz8%2FV1c%2FP%2F75fLB8sAK8sHyw%2FcB8sHywArywfLCwHSodKAMRBKNDsrJCQrKy%2FsCwfLB8fLB8sP7UsHywfHywfLD%2B05AVHR0VjgQAAAH%2FtQDIBJQDgQBCAAABNzYXAR4BBw4BKwEyFRQOBCsBIhE0NyYiBxYVECsBIi4DNTQzIyImJyY2NwE2HwEeAQ4BLwEHIScHBi4BNgLpRRkUASoLCAYFGg8IAQQNGyc%2FKZK4ChRUFQu4jjBJJxkHAgcPGQYGCAsBKhQaTBQVCiMUM7YDe7YsFCMKFgNuEwYS%2FtkLHw8OEw0dNkY4MhwBIBgXBAQYF%2F7gKjxTQyMNEw4PHwoBKBIHEwUjKBYGDMHBDAUWKCMAAAAAAgAAAAAEsASwACUAQwAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjNC4DKwERFBYXMxUjNTI1ESMiDgMVIzUhBLAyCAsZEyYYGcgyGRn%2BcAQOIhoWyBkYJhMZCwgyA%2Bj9RBkIChgQEWQZDQzIMmQREBgKCBkB9AOEFSAVDggDAfyuFhkBAmRkAQUJFQ4DUgEDCA4VIBUBLP0SDxMKBQH%2BVwsNATIyGQGpAQUKEw%2BWAAAAAAMAAAAABEwErgAdACAAMAAAATUiJy4BLwEBIwEGBw4BDwEVITUiJj8BIRcWBiMVARsBARUUBiMhIiY9ATQ2MyEyFgPoGR4OFgUE%2Ft9F%2FtQSFQkfCwsBETE7EkUBJT0NISf%2B7IZ5AbEdFfwYFR0dFQPoFR0BLDIgDiIKCwLr%2FQ4jFQkTBQUyMisusKYiQTIBhwFW%2Fqr942QVHR0VZBUdHQADAAAAAASwBLAADwBHAEoAABMhMhYVERQGIyEiJjURNDYFIyIHAQYHBgcGHQEUFjMhMjY9ATQmIyInJj8BIRcWBwYjIgYdARQWMyEyNj0BNCYnIicmJyMBJhMjEzIETBUdHRX7tBUdHQJGRg0F%2FtUREhImDAsJAREIDAwINxAKCj8BCjkLEQwYCAwMCAE5CAwLCBEZGQ8B%2FuAFDsVnBLAdFfu0FR0dFQRMFR1SDP0PIBMSEAUNMggMDAgyCAwXDhmjmR8YEQwIMggMDAgyBwwBGRskAuwM%2FgUBCAAABAAAAAAEsASwAAMAEwAjACcAAAEhNSEFITIWFREUBiMhIiY1ETQ2KQEyFhURFAYjISImNRE0NhcRIREEsPtQBLD7ggGQFR0dFf5wFR0dAm0BkBUdHRX%2BcBUdHUcBLARMZMgdFfx8FR0dFQOEFR0dFf5wFR0dFQGQFR1k%2FtQBLAAEAAAAAASwBLAADwAfACMAJwAAEyEyFhURFAYjISImNRE0NgEhMhYVERQGIyEiJjURNDYXESEREyE1ITIBkBUdHRX%2BcBUdHQJtAZAVHR0V%2FnAVHR1HASzI%2B1AEsASwHRX8fBUdHRUDhBUd%2FgwdFf5wFR0dFQGQFR1k%2FtQBLP2oZAAAAAACAAAAZASwA%2BgAJwArAAATITIWFREzNTQ2MyEyFh0BMxUjFRQGIyEiJj0BIxEUBiMhIiY1ETQ2AREhETIBkBUdZB0VAZAVHWRkHRX%2BcBUdZB0V%2FnAVHR0CnwEsA%2BgdFf6ilhUdHRWWZJYVHR0Vlv6iFR0dFQMgFR3%2B1P7UASwAAAQAAAAABLAEsAADABMAFwAnAAAzIxEzFyEyFhURFAYjISImNRE0NhcRIREBITIWFREUBiMhIiY1ETQ2ZGRklgGQFR0dFf5wFR0dRwEs%2FqIDhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAAAAgBkAAAETASwACcAKwAAATMyFhURFAYrARUhMhYVERQGIyEiJjURNDYzITUjIiY1ETQ2OwE1MwcRIRECWJYVHR0VlgHCFR0dFfx8FR0dFQFelhUdHRWWZMgBLARMHRX%2BcBUdZB0V%2FnAVHR0VAZAVHWQdFQGQFR1kyP7UASwAAAAEAAAAAASwBLAAAwATABcAJwAAISMRMwUhMhYVERQGIyEiJjURNDYXESERASEyFhURFAYjISImNRE0NgSwZGT9dgGQFR0dFf5wFR0dRwEs%2FK4DhBUdHRX8fBUdHQSwZB0V%2FnAVHR0VAZAVHWT%2B1AEs%2FgwdFf5wFR0dFQGQFR0AAAEBLAAwA28EgAAPAAAJAQYjIiY1ETQ2MzIXARYUA2H%2BEhcSDhAQDhIXAe4OAjX%2BEhcbGQPoGRsX%2FhIOKgAAAAABAUEAMgOEBH4ACwAACQE2FhURFAYnASY0AU8B7h0qKh3%2BEg4CewHuHREp%2FBgpER0B7g4qAAAAAAEAMgFBBH4DhAALAAATITIWBwEGIicBJjZkA%2BgpER3%2BEg4qDv4SHREDhCod%2FhIODgHuHSoAAAAAAQAyASwEfgNvAAsAAAkBFgYjISImNwE2MgJ7Ae4dESn8GCkRHQHuDioDYf4SHSoqHQHuDgAAAAACAAgAAASwBCgABgAKAAABFQE1LQE1ASE1IQK8%2FUwBnf5jBKj84AMgAuW2%2Fr3dwcHd%2B9jIAAAAAAIAAABkBLAEsAALADEAAAEjFTMVIREzNSM1IQEzND4FOwERFAYPARUhNSIuAzURMzIeBRUzESEEsMjI%2FtTIyAEs%2B1AyCAsZEyYYGWQyGRkBkAQOIhoWZBkYJhMZCwgy%2FOADhGRkASxkZP4MFSAVDggDAf3aFhkBAmRkAQUJFQ4CJgEDCA4VIBUBLAAAAgAAAAAETAPoACUAMQAAASM0LgUrAREUFh8BFSE1Mj4DNREjIg4FFSMRIQEjFTMVIREzNSM1IQMgMggLGRMmGBlkMhkZ%2FnAEDiIaFmQZGCYTGQsIMgMgASzIyP7UyMgBLAK8FSAVDggDAf3aFhkCAWRkAQUJFQ4CJgEDCA4VIBUBLPzgZGQBLGRkAAABAMgAZgNyBEoAEgAAATMyFgcJARYGKwEiJwEmNDcBNgK9oBAKDP4wAdAMChCgDQr%2BKQcHAdcKBEoWDP4w%2FjAMFgkB1wgUCAHXCQAAAQE%2BAGYD6ARKABIAAAEzMhcBFhQHAQYrASImNwkBJjYBU6ANCgHXBwf%2BKQoNoBAKDAHQ%2FjAMCgRKCf4pCBQI%2FikJFgwB0AHQDBYAAAEAZgDIBEoDcgASAAAAFh0BFAcBBiInASY9ATQ2FwkBBDQWCf4pCBQI%2FikJFgwB0AHQA3cKEKANCv4pBwcB1woNoBAKDP4wAdAAAAABAGYBPgRKA%2BgAEgAACQEWHQEUBicJAQYmPQE0NwE2MgJqAdcJFgz%2BMP4wDBYJAdcIFAPh%2FikKDaAQCgwB0P4wDAoQoA0KAdcHAAAAAgDZ%2F%2FkEPQSwAAUAOgAAARQGIzQ2BTMyFh8BNjc%2BAh4EBgcOBgcGIiYjIgYiJy4DLwEuAT4EHgEXJyY2A%2BiwfLD%2BVmQVJgdPBQsiKFAzRyorDwURAQQSFyozTSwNOkkLDkc3EDlfNyYHBw8GDyUqPjdGMR%2BTDA0EsHywfLDIHBPCAQIGBwcFDx81S21DBxlLR1xKQhEFBQcHGWt0bCQjP2hJNyATBwMGBcASGAAAAAACAMgAFQOEBLAAFgAaAAATITIWFREUBisBEQcGJjURIyImNRE0NhcVITX6AlgVHR0Vlv8TGpYVHR2rASwEsB0V%2FnAVHf4MsgkQFQKKHRUBkBUdZGRkAAAAAgDIABkETASwAA4AEgAAEyEyFhURBRElIREjETQ2ARU3NfoC7ic9%2FUQCWP1EZB8BDWQEsFEs%2FFt1A7Z9%2FBgEARc0%2FV1kFGQAAQAAAAECTW%2FDBF9fDzz1AB8EsAAAAADQdnOXAAAAANB2c5f%2FUf%2BcBdwFFAAAAAgAAgAAAAAAAAABAAAFFP%2BFAAAFFP9R%2FtQF3AABAAAAAAAAAAAAAAAAAAAAowG4ACgAAAAAAZAAAASwAAAEsABkBLAAAASwAAAEsABwAooAAAUUAAACigAABRQAAAGxAAABRQAAANgAAADYAAAAogAAAQQAAABIAAABBAAAAUUAAASwAGQEsAB7BLAAyASwAMgB9AAABLD%2F8gSwAAAEsAAABLD%2F8ASwAAAEsAAOBLAACQSwAGQEsP%2FTBLD%2F0wSwAAAEsAAABLAAAASwAAAEsAAABLAAJgSwAG4EsAAXBLAAFwSwABcEsABkBLAAGgSwAGQEsAAMBLAAZASwABcEsP%2BcBLAAZASwABcEsAAXBLAAAASwABcEsAAXBLAAFwSwAGQEsAAABLAAZASwAAAEsAAABLAAAASwAAAEsAAABLAAAASwAAAEsAAABLAAZASwAMgEsAAABLAAAASwADUEsABkBLAAyASw%2F7UEsAAhBLAAAASwAAAEsAAABLAAAASwAAAEsP%2BcBLAAAASwAAAEsAAABLAA2wSwABcEsAB1BLAAAASwAAAEsAAABLAACgSwAMgEsAAABLAAnQSwAMgEsADIBLAAyASwAAAEsP%2F%2BBLABLASwAGQEsACIBLABOwSwABcEsAAXBLAAFwSwABcEsAAXBLAAFwSwAAAEsAAXBLAAFwSwABcEsAAXBLAAAASwALcEsAC3BLAAAASwAAAEsABJBLAAFwSwAAAEsAAABLAAXQSw%2F9wEsP%2FcBLD%2FnwSwAGQEsAAABLAAAASwAAAEsABkBLD%2F%2FwSwAAAEsP9RBLAABgSwAAAEsAAABLABRQSwAAEEsAAABLD%2FnASwAEoEsAAUBLAAAASwAAAEsAAABLD%2FnASwAGEEsP%2F9BLAAFgSwABYEsAAWBLAAFgSwABgEsAAABMQAAASwAGQAAAAAAAD%2F2ABkADkAyAAAAScAZAAZABkAGQAZABkAGQAZAAAAAAAAAAAAAADZAAAAAAAOAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAMAZABkAAAAEAAAAAAAZP%2Bc%2F5z%2FnP%2Bc%2F5z%2FnP%2Bc%2F5wACQAJ%2F%2FL%2F8gBkAHkAJwBkAGQAAAAAAGT%2FogAAAAAAAAAAAAAAAADIAGQAAAABAI8AAP%2Bc%2F5wAZAAEAMgAyAAAAGQBkABkAAAAZAEs%2F7UAAAAAAAAAAAAAAAAAAABkAAABLAFBADIAMgAIAAAAAADIAT4AZgBmANkAyADIAAAAKgAqACoAKgCyAOgA6AFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BTgFOAU4BpAIGAiICfgKGAqwC5ANGA24DjAPEBAgEMgRiBKIE3AVcBboGcgb0ByAHYgfKCB4IYgi%2BCTYJhAm2Cd4KKApMCpQK4gswC4oLygwIDFgNKg1eDbAODg5oDrQPKA%2BmD%2BYQEhBUEJAQqhEqEXYRthIKEjgSfBLAExoTdBPQFCoU1BU8FagVzBYEFjYWYBawFv4XUhemGAIYLhhqGJYYsBjgGP4ZKBloGZQZxBnaGe4aNhpoGrga9hteG7QcMhyUHOIdHB1EHWwdlB28HeYeLh52HsAfYh%2FSIEYgviEyIXYhuCJAIpYiuCMOIyIjOCN6I8Ij4CQCJDAkXiSWJOIlNCVgJbwmFCZ%2BJuYnUCe8J%2FgoNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi%2F4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8%2BD0yPew%2BOj6MPtQ%2FKD9uP6o%2F%2BkBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA%2FgADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB%2BgADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD%2FtQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE%2BAT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG%2FAcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB%2BgH7AfwB%2FQH%2BAf8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA%3D%29%20format%28%27truetype%27%29%2Curl%28data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI%2FPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE%2BPC9tZXRhZGF0YT4KPGRlZnM%2BCjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA%2BCjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8%2BCjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ%2BCjwvZGVmcz48L3N2Zz4g%29%20format%28%27svg%27%29%7D%2Eglyphicon%7Bposition%3Arelative%3Btop%3A1px%3Bdisplay%3Ainline%2Dblock%3Bfont%2Dfamily%3A%27Glyphicons%20Halflings%27%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3B%2Dwebkit%2Dfont%2Dsmoothing%3Aantialiased%3B%2Dmoz%2Dosx%2Dfont%2Dsmoothing%3Agrayscale%7D%2Eglyphicon%2Dasterisk%3Abefore%7Bcontent%3A%22%5C2a%22%7D%2Eglyphicon%2Dplus%3Abefore%7Bcontent%3A%22%5C2b%22%7D%2Eglyphicon%2Deur%3Abefore%2C%2Eglyphicon%2Deuro%3Abefore%7Bcontent%3A%22%5C20ac%22%7D%2Eglyphicon%2Dminus%3Abefore%7Bcontent%3A%22%5C2212%22%7D%2Eglyphicon%2Dcloud%3Abefore%7Bcontent%3A%22%5C2601%22%7D%2Eglyphicon%2Denvelope%3Abefore%7Bcontent%3A%22%5C2709%22%7D%2Eglyphicon%2Dpencil%3Abefore%7Bcontent%3A%22%5C270f%22%7D%2Eglyphicon%2Dglass%3Abefore%7Bcontent%3A%22%5Ce001%22%7D%2Eglyphicon%2Dmusic%3Abefore%7Bcontent%3A%22%5Ce002%22%7D%2Eglyphicon%2Dsearch%3Abefore%7Bcontent%3A%22%5Ce003%22%7D%2Eglyphicon%2Dheart%3Abefore%7Bcontent%3A%22%5Ce005%22%7D%2Eglyphicon%2Dstar%3Abefore%7Bcontent%3A%22%5Ce006%22%7D%2Eglyphicon%2Dstar%2Dempty%3Abefore%7Bcontent%3A%22%5Ce007%22%7D%2Eglyphicon%2Duser%3Abefore%7Bcontent%3A%22%5Ce008%22%7D%2Eglyphicon%2Dfilm%3Abefore%7Bcontent%3A%22%5Ce009%22%7D%2Eglyphicon%2Dth%2Dlarge%3Abefore%7Bcontent%3A%22%5Ce010%22%7D%2Eglyphicon%2Dth%3Abefore%7Bcontent%3A%22%5Ce011%22%7D%2Eglyphicon%2Dth%2Dlist%3Abefore%7Bcontent%3A%22%5Ce012%22%7D%2Eglyphicon%2Dok%3Abefore%7Bcontent%3A%22%5Ce013%22%7D%2Eglyphicon%2Dremove%3Abefore%7Bcontent%3A%22%5Ce014%22%7D%2Eglyphicon%2Dzoom%2Din%3Abefore%7Bcontent%3A%22%5Ce015%22%7D%2Eglyphicon%2Dzoom%2Dout%3Abefore%7Bcontent%3A%22%5Ce016%22%7D%2Eglyphicon%2Doff%3Abefore%7Bcontent%3A%22%5Ce017%22%7D%2Eglyphicon%2Dsignal%3Abefore%7Bcontent%3A%22%5Ce018%22%7D%2Eglyphicon%2Dcog%3Abefore%7Bcontent%3A%22%5Ce019%22%7D%2Eglyphicon%2Dtrash%3Abefore%7Bcontent%3A%22%5Ce020%22%7D%2Eglyphicon%2Dhome%3Abefore%7Bcontent%3A%22%5Ce021%22%7D%2Eglyphicon%2Dfile%3Abefore%7Bcontent%3A%22%5Ce022%22%7D%2Eglyphicon%2Dtime%3Abefore%7Bcontent%3A%22%5Ce023%22%7D%2Eglyphicon%2Droad%3Abefore%7Bcontent%3A%22%5Ce024%22%7D%2Eglyphicon%2Ddownload%2Dalt%3Abefore%7Bcontent%3A%22%5Ce025%22%7D%2Eglyphicon%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce026%22%7D%2Eglyphicon%2Dupload%3Abefore%7Bcontent%3A%22%5Ce027%22%7D%2Eglyphicon%2Dinbox%3Abefore%7Bcontent%3A%22%5Ce028%22%7D%2Eglyphicon%2Dplay%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce029%22%7D%2Eglyphicon%2Drepeat%3Abefore%7Bcontent%3A%22%5Ce030%22%7D%2Eglyphicon%2Drefresh%3Abefore%7Bcontent%3A%22%5Ce031%22%7D%2Eglyphicon%2Dlist%2Dalt%3Abefore%7Bcontent%3A%22%5Ce032%22%7D%2Eglyphicon%2Dlock%3Abefore%7Bcontent%3A%22%5Ce033%22%7D%2Eglyphicon%2Dflag%3Abefore%7Bcontent%3A%22%5Ce034%22%7D%2Eglyphicon%2Dheadphones%3Abefore%7Bcontent%3A%22%5Ce035%22%7D%2Eglyphicon%2Dvolume%2Doff%3Abefore%7Bcontent%3A%22%5Ce036%22%7D%2Eglyphicon%2Dvolume%2Ddown%3Abefore%7Bcontent%3A%22%5Ce037%22%7D%2Eglyphicon%2Dvolume%2Dup%3Abefore%7Bcontent%3A%22%5Ce038%22%7D%2Eglyphicon%2Dqrcode%3Abefore%7Bcontent%3A%22%5Ce039%22%7D%2Eglyphicon%2Dbarcode%3Abefore%7Bcontent%3A%22%5Ce040%22%7D%2Eglyphicon%2Dtag%3Abefore%7Bcontent%3A%22%5Ce041%22%7D%2Eglyphicon%2Dtags%3Abefore%7Bcontent%3A%22%5Ce042%22%7D%2Eglyphicon%2Dbook%3Abefore%7Bcontent%3A%22%5Ce043%22%7D%2Eglyphicon%2Dbookmark%3Abefore%7Bcontent%3A%22%5Ce044%22%7D%2Eglyphicon%2Dprint%3Abefore%7Bcontent%3A%22%5Ce045%22%7D%2Eglyphicon%2Dcamera%3Abefore%7Bcontent%3A%22%5Ce046%22%7D%2Eglyphicon%2Dfont%3Abefore%7Bcontent%3A%22%5Ce047%22%7D%2Eglyphicon%2Dbold%3Abefore%7Bcontent%3A%22%5Ce048%22%7D%2Eglyphicon%2Ditalic%3Abefore%7Bcontent%3A%22%5Ce049%22%7D%2Eglyphicon%2Dtext%2Dheight%3Abefore%7Bcontent%3A%22%5Ce050%22%7D%2Eglyphicon%2Dtext%2Dwidth%3Abefore%7Bcontent%3A%22%5Ce051%22%7D%2Eglyphicon%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce052%22%7D%2Eglyphicon%2Dalign%2Dcenter%3Abefore%7Bcontent%3A%22%5Ce053%22%7D%2Eglyphicon%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce054%22%7D%2Eglyphicon%2Dalign%2Djustify%3Abefore%7Bcontent%3A%22%5Ce055%22%7D%2Eglyphicon%2Dlist%3Abefore%7Bcontent%3A%22%5Ce056%22%7D%2Eglyphicon%2Dindent%2Dleft%3Abefore%7Bcontent%3A%22%5Ce057%22%7D%2Eglyphicon%2Dindent%2Dright%3Abefore%7Bcontent%3A%22%5Ce058%22%7D%2Eglyphicon%2Dfacetime%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce059%22%7D%2Eglyphicon%2Dpicture%3Abefore%7Bcontent%3A%22%5Ce060%22%7D%2Eglyphicon%2Dmap%2Dmarker%3Abefore%7Bcontent%3A%22%5Ce062%22%7D%2Eglyphicon%2Dadjust%3Abefore%7Bcontent%3A%22%5Ce063%22%7D%2Eglyphicon%2Dtint%3Abefore%7Bcontent%3A%22%5Ce064%22%7D%2Eglyphicon%2Dedit%3Abefore%7Bcontent%3A%22%5Ce065%22%7D%2Eglyphicon%2Dshare%3Abefore%7Bcontent%3A%22%5Ce066%22%7D%2Eglyphicon%2Dcheck%3Abefore%7Bcontent%3A%22%5Ce067%22%7D%2Eglyphicon%2Dmove%3Abefore%7Bcontent%3A%22%5Ce068%22%7D%2Eglyphicon%2Dstep%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce069%22%7D%2Eglyphicon%2Dfast%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce070%22%7D%2Eglyphicon%2Dbackward%3Abefore%7Bcontent%3A%22%5Ce071%22%7D%2Eglyphicon%2Dplay%3Abefore%7Bcontent%3A%22%5Ce072%22%7D%2Eglyphicon%2Dpause%3Abefore%7Bcontent%3A%22%5Ce073%22%7D%2Eglyphicon%2Dstop%3Abefore%7Bcontent%3A%22%5Ce074%22%7D%2Eglyphicon%2Dforward%3Abefore%7Bcontent%3A%22%5Ce075%22%7D%2Eglyphicon%2Dfast%2Dforward%3Abefore%7Bcontent%3A%22%5Ce076%22%7D%2Eglyphicon%2Dstep%2Dforward%3Abefore%7Bcontent%3A%22%5Ce077%22%7D%2Eglyphicon%2Deject%3Abefore%7Bcontent%3A%22%5Ce078%22%7D%2Eglyphicon%2Dchevron%2Dleft%3Abefore%7Bcontent%3A%22%5Ce079%22%7D%2Eglyphicon%2Dchevron%2Dright%3Abefore%7Bcontent%3A%22%5Ce080%22%7D%2Eglyphicon%2Dplus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce081%22%7D%2Eglyphicon%2Dminus%2Dsign%3Abefore%7Bcontent%3A%22%5Ce082%22%7D%2Eglyphicon%2Dremove%2Dsign%3Abefore%7Bcontent%3A%22%5Ce083%22%7D%2Eglyphicon%2Dok%2Dsign%3Abefore%7Bcontent%3A%22%5Ce084%22%7D%2Eglyphicon%2Dquestion%2Dsign%3Abefore%7Bcontent%3A%22%5Ce085%22%7D%2Eglyphicon%2Dinfo%2Dsign%3Abefore%7Bcontent%3A%22%5Ce086%22%7D%2Eglyphicon%2Dscreenshot%3Abefore%7Bcontent%3A%22%5Ce087%22%7D%2Eglyphicon%2Dremove%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce088%22%7D%2Eglyphicon%2Dok%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce089%22%7D%2Eglyphicon%2Dban%2Dcircle%3Abefore%7Bcontent%3A%22%5Ce090%22%7D%2Eglyphicon%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce091%22%7D%2Eglyphicon%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce092%22%7D%2Eglyphicon%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce093%22%7D%2Eglyphicon%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce094%22%7D%2Eglyphicon%2Dshare%2Dalt%3Abefore%7Bcontent%3A%22%5Ce095%22%7D%2Eglyphicon%2Dresize%2Dfull%3Abefore%7Bcontent%3A%22%5Ce096%22%7D%2Eglyphicon%2Dresize%2Dsmall%3Abefore%7Bcontent%3A%22%5Ce097%22%7D%2Eglyphicon%2Dexclamation%2Dsign%3Abefore%7Bcontent%3A%22%5Ce101%22%7D%2Eglyphicon%2Dgift%3Abefore%7Bcontent%3A%22%5Ce102%22%7D%2Eglyphicon%2Dleaf%3Abefore%7Bcontent%3A%22%5Ce103%22%7D%2Eglyphicon%2Dfire%3Abefore%7Bcontent%3A%22%5Ce104%22%7D%2Eglyphicon%2Deye%2Dopen%3Abefore%7Bcontent%3A%22%5Ce105%22%7D%2Eglyphicon%2Deye%2Dclose%3Abefore%7Bcontent%3A%22%5Ce106%22%7D%2Eglyphicon%2Dwarning%2Dsign%3Abefore%7Bcontent%3A%22%5Ce107%22%7D%2Eglyphicon%2Dplane%3Abefore%7Bcontent%3A%22%5Ce108%22%7D%2Eglyphicon%2Dcalendar%3Abefore%7Bcontent%3A%22%5Ce109%22%7D%2Eglyphicon%2Drandom%3Abefore%7Bcontent%3A%22%5Ce110%22%7D%2Eglyphicon%2Dcomment%3Abefore%7Bcontent%3A%22%5Ce111%22%7D%2Eglyphicon%2Dmagnet%3Abefore%7Bcontent%3A%22%5Ce112%22%7D%2Eglyphicon%2Dchevron%2Dup%3Abefore%7Bcontent%3A%22%5Ce113%22%7D%2Eglyphicon%2Dchevron%2Ddown%3Abefore%7Bcontent%3A%22%5Ce114%22%7D%2Eglyphicon%2Dretweet%3Abefore%7Bcontent%3A%22%5Ce115%22%7D%2Eglyphicon%2Dshopping%2Dcart%3Abefore%7Bcontent%3A%22%5Ce116%22%7D%2Eglyphicon%2Dfolder%2Dclose%3Abefore%7Bcontent%3A%22%5Ce117%22%7D%2Eglyphicon%2Dfolder%2Dopen%3Abefore%7Bcontent%3A%22%5Ce118%22%7D%2Eglyphicon%2Dresize%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce119%22%7D%2Eglyphicon%2Dresize%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce120%22%7D%2Eglyphicon%2Dhdd%3Abefore%7Bcontent%3A%22%5Ce121%22%7D%2Eglyphicon%2Dbullhorn%3Abefore%7Bcontent%3A%22%5Ce122%22%7D%2Eglyphicon%2Dbell%3Abefore%7Bcontent%3A%22%5Ce123%22%7D%2Eglyphicon%2Dcertificate%3Abefore%7Bcontent%3A%22%5Ce124%22%7D%2Eglyphicon%2Dthumbs%2Dup%3Abefore%7Bcontent%3A%22%5Ce125%22%7D%2Eglyphicon%2Dthumbs%2Ddown%3Abefore%7Bcontent%3A%22%5Ce126%22%7D%2Eglyphicon%2Dhand%2Dright%3Abefore%7Bcontent%3A%22%5Ce127%22%7D%2Eglyphicon%2Dhand%2Dleft%3Abefore%7Bcontent%3A%22%5Ce128%22%7D%2Eglyphicon%2Dhand%2Dup%3Abefore%7Bcontent%3A%22%5Ce129%22%7D%2Eglyphicon%2Dhand%2Ddown%3Abefore%7Bcontent%3A%22%5Ce130%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dright%3Abefore%7Bcontent%3A%22%5Ce131%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dleft%3Abefore%7Bcontent%3A%22%5Ce132%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Dup%3Abefore%7Bcontent%3A%22%5Ce133%22%7D%2Eglyphicon%2Dcircle%2Darrow%2Ddown%3Abefore%7Bcontent%3A%22%5Ce134%22%7D%2Eglyphicon%2Dglobe%3Abefore%7Bcontent%3A%22%5Ce135%22%7D%2Eglyphicon%2Dwrench%3Abefore%7Bcontent%3A%22%5Ce136%22%7D%2Eglyphicon%2Dtasks%3Abefore%7Bcontent%3A%22%5Ce137%22%7D%2Eglyphicon%2Dfilter%3Abefore%7Bcontent%3A%22%5Ce138%22%7D%2Eglyphicon%2Dbriefcase%3Abefore%7Bcontent%3A%22%5Ce139%22%7D%2Eglyphicon%2Dfullscreen%3Abefore%7Bcontent%3A%22%5Ce140%22%7D%2Eglyphicon%2Ddashboard%3Abefore%7Bcontent%3A%22%5Ce141%22%7D%2Eglyphicon%2Dpaperclip%3Abefore%7Bcontent%3A%22%5Ce142%22%7D%2Eglyphicon%2Dheart%2Dempty%3Abefore%7Bcontent%3A%22%5Ce143%22%7D%2Eglyphicon%2Dlink%3Abefore%7Bcontent%3A%22%5Ce144%22%7D%2Eglyphicon%2Dphone%3Abefore%7Bcontent%3A%22%5Ce145%22%7D%2Eglyphicon%2Dpushpin%3Abefore%7Bcontent%3A%22%5Ce146%22%7D%2Eglyphicon%2Dusd%3Abefore%7Bcontent%3A%22%5Ce148%22%7D%2Eglyphicon%2Dgbp%3Abefore%7Bcontent%3A%22%5Ce149%22%7D%2Eglyphicon%2Dsort%3Abefore%7Bcontent%3A%22%5Ce150%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%3Abefore%7Bcontent%3A%22%5Ce151%22%7D%2Eglyphicon%2Dsort%2Dby%2Dalphabet%2Dalt%3Abefore%7Bcontent%3A%22%5Ce152%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%3Abefore%7Bcontent%3A%22%5Ce153%22%7D%2Eglyphicon%2Dsort%2Dby%2Dorder%2Dalt%3Abefore%7Bcontent%3A%22%5Ce154%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%3Abefore%7Bcontent%3A%22%5Ce155%22%7D%2Eglyphicon%2Dsort%2Dby%2Dattributes%2Dalt%3Abefore%7Bcontent%3A%22%5Ce156%22%7D%2Eglyphicon%2Dunchecked%3Abefore%7Bcontent%3A%22%5Ce157%22%7D%2Eglyphicon%2Dexpand%3Abefore%7Bcontent%3A%22%5Ce158%22%7D%2Eglyphicon%2Dcollapse%2Ddown%3Abefore%7Bcontent%3A%22%5Ce159%22%7D%2Eglyphicon%2Dcollapse%2Dup%3Abefore%7Bcontent%3A%22%5Ce160%22%7D%2Eglyphicon%2Dlog%2Din%3Abefore%7Bcontent%3A%22%5Ce161%22%7D%2Eglyphicon%2Dflash%3Abefore%7Bcontent%3A%22%5Ce162%22%7D%2Eglyphicon%2Dlog%2Dout%3Abefore%7Bcontent%3A%22%5Ce163%22%7D%2Eglyphicon%2Dnew%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce164%22%7D%2Eglyphicon%2Drecord%3Abefore%7Bcontent%3A%22%5Ce165%22%7D%2Eglyphicon%2Dsave%3Abefore%7Bcontent%3A%22%5Ce166%22%7D%2Eglyphicon%2Dopen%3Abefore%7Bcontent%3A%22%5Ce167%22%7D%2Eglyphicon%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce168%22%7D%2Eglyphicon%2Dimport%3Abefore%7Bcontent%3A%22%5Ce169%22%7D%2Eglyphicon%2Dexport%3Abefore%7Bcontent%3A%22%5Ce170%22%7D%2Eglyphicon%2Dsend%3Abefore%7Bcontent%3A%22%5Ce171%22%7D%2Eglyphicon%2Dfloppy%2Ddisk%3Abefore%7Bcontent%3A%22%5Ce172%22%7D%2Eglyphicon%2Dfloppy%2Dsaved%3Abefore%7Bcontent%3A%22%5Ce173%22%7D%2Eglyphicon%2Dfloppy%2Dremove%3Abefore%7Bcontent%3A%22%5Ce174%22%7D%2Eglyphicon%2Dfloppy%2Dsave%3Abefore%7Bcontent%3A%22%5Ce175%22%7D%2Eglyphicon%2Dfloppy%2Dopen%3Abefore%7Bcontent%3A%22%5Ce176%22%7D%2Eglyphicon%2Dcredit%2Dcard%3Abefore%7Bcontent%3A%22%5Ce177%22%7D%2Eglyphicon%2Dtransfer%3Abefore%7Bcontent%3A%22%5Ce178%22%7D%2Eglyphicon%2Dcutlery%3Abefore%7Bcontent%3A%22%5Ce179%22%7D%2Eglyphicon%2Dheader%3Abefore%7Bcontent%3A%22%5Ce180%22%7D%2Eglyphicon%2Dcompressed%3Abefore%7Bcontent%3A%22%5Ce181%22%7D%2Eglyphicon%2Dearphone%3Abefore%7Bcontent%3A%22%5Ce182%22%7D%2Eglyphicon%2Dphone%2Dalt%3Abefore%7Bcontent%3A%22%5Ce183%22%7D%2Eglyphicon%2Dtower%3Abefore%7Bcontent%3A%22%5Ce184%22%7D%2Eglyphicon%2Dstats%3Abefore%7Bcontent%3A%22%5Ce185%22%7D%2Eglyphicon%2Dsd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce186%22%7D%2Eglyphicon%2Dhd%2Dvideo%3Abefore%7Bcontent%3A%22%5Ce187%22%7D%2Eglyphicon%2Dsubtitles%3Abefore%7Bcontent%3A%22%5Ce188%22%7D%2Eglyphicon%2Dsound%2Dstereo%3Abefore%7Bcontent%3A%22%5Ce189%22%7D%2Eglyphicon%2Dsound%2Ddolby%3Abefore%7Bcontent%3A%22%5Ce190%22%7D%2Eglyphicon%2Dsound%2D5%2D1%3Abefore%7Bcontent%3A%22%5Ce191%22%7D%2Eglyphicon%2Dsound%2D6%2D1%3Abefore%7Bcontent%3A%22%5Ce192%22%7D%2Eglyphicon%2Dsound%2D7%2D1%3Abefore%7Bcontent%3A%22%5Ce193%22%7D%2Eglyphicon%2Dcopyright%2Dmark%3Abefore%7Bcontent%3A%22%5Ce194%22%7D%2Eglyphicon%2Dregistration%2Dmark%3Abefore%7Bcontent%3A%22%5Ce195%22%7D%2Eglyphicon%2Dcloud%2Ddownload%3Abefore%7Bcontent%3A%22%5Ce197%22%7D%2Eglyphicon%2Dcloud%2Dupload%3Abefore%7Bcontent%3A%22%5Ce198%22%7D%2Eglyphicon%2Dtree%2Dconifer%3Abefore%7Bcontent%3A%22%5Ce199%22%7D%2Eglyphicon%2Dtree%2Ddeciduous%3Abefore%7Bcontent%3A%22%5Ce200%22%7D%2Eglyphicon%2Dcd%3Abefore%7Bcontent%3A%22%5Ce201%22%7D%2Eglyphicon%2Dsave%2Dfile%3Abefore%7Bcontent%3A%22%5Ce202%22%7D%2Eglyphicon%2Dopen%2Dfile%3Abefore%7Bcontent%3A%22%5Ce203%22%7D%2Eglyphicon%2Dlevel%2Dup%3Abefore%7Bcontent%3A%22%5Ce204%22%7D%2Eglyphicon%2Dcopy%3Abefore%7Bcontent%3A%22%5Ce205%22%7D%2Eglyphicon%2Dpaste%3Abefore%7Bcontent%3A%22%5Ce206%22%7D%2Eglyphicon%2Dalert%3Abefore%7Bcontent%3A%22%5Ce209%22%7D%2Eglyphicon%2Dequalizer%3Abefore%7Bcontent%3A%22%5Ce210%22%7D%2Eglyphicon%2Dking%3Abefore%7Bcontent%3A%22%5Ce211%22%7D%2Eglyphicon%2Dqueen%3Abefore%7Bcontent%3A%22%5Ce212%22%7D%2Eglyphicon%2Dpawn%3Abefore%7Bcontent%3A%22%5Ce213%22%7D%2Eglyphicon%2Dbishop%3Abefore%7Bcontent%3A%22%5Ce214%22%7D%2Eglyphicon%2Dknight%3Abefore%7Bcontent%3A%22%5Ce215%22%7D%2Eglyphicon%2Dbaby%2Dformula%3Abefore%7Bcontent%3A%22%5Ce216%22%7D%2Eglyphicon%2Dtent%3Abefore%7Bcontent%3A%22%5C26fa%22%7D%2Eglyphicon%2Dblackboard%3Abefore%7Bcontent%3A%22%5Ce218%22%7D%2Eglyphicon%2Dbed%3Abefore%7Bcontent%3A%22%5Ce219%22%7D%2Eglyphicon%2Dapple%3Abefore%7Bcontent%3A%22%5Cf8ff%22%7D%2Eglyphicon%2Derase%3Abefore%7Bcontent%3A%22%5Ce221%22%7D%2Eglyphicon%2Dhourglass%3Abefore%7Bcontent%3A%22%5C231b%22%7D%2Eglyphicon%2Dlamp%3Abefore%7Bcontent%3A%22%5Ce223%22%7D%2Eglyphicon%2Dduplicate%3Abefore%7Bcontent%3A%22%5Ce224%22%7D%2Eglyphicon%2Dpiggy%2Dbank%3Abefore%7Bcontent%3A%22%5Ce225%22%7D%2Eglyphicon%2Dscissors%3Abefore%7Bcontent%3A%22%5Ce226%22%7D%2Eglyphicon%2Dbitcoin%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dbtc%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dxbt%3Abefore%7Bcontent%3A%22%5Ce227%22%7D%2Eglyphicon%2Dyen%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Djpy%3Abefore%7Bcontent%3A%22%5C00a5%22%7D%2Eglyphicon%2Druble%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Drub%3Abefore%7Bcontent%3A%22%5C20bd%22%7D%2Eglyphicon%2Dscale%3Abefore%7Bcontent%3A%22%5Ce230%22%7D%2Eglyphicon%2Dice%2Dlolly%3Abefore%7Bcontent%3A%22%5Ce231%22%7D%2Eglyphicon%2Dice%2Dlolly%2Dtasted%3Abefore%7Bcontent%3A%22%5Ce232%22%7D%2Eglyphicon%2Deducation%3Abefore%7Bcontent%3A%22%5Ce233%22%7D%2Eglyphicon%2Doption%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce234%22%7D%2Eglyphicon%2Doption%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce235%22%7D%2Eglyphicon%2Dmenu%2Dhamburger%3Abefore%7Bcontent%3A%22%5Ce236%22%7D%2Eglyphicon%2Dmodal%2Dwindow%3Abefore%7Bcontent%3A%22%5Ce237%22%7D%2Eglyphicon%2Doil%3Abefore%7Bcontent%3A%22%5Ce238%22%7D%2Eglyphicon%2Dgrain%3Abefore%7Bcontent%3A%22%5Ce239%22%7D%2Eglyphicon%2Dsunglasses%3Abefore%7Bcontent%3A%22%5Ce240%22%7D%2Eglyphicon%2Dtext%2Dsize%3Abefore%7Bcontent%3A%22%5Ce241%22%7D%2Eglyphicon%2Dtext%2Dcolor%3Abefore%7Bcontent%3A%22%5Ce242%22%7D%2Eglyphicon%2Dtext%2Dbackground%3Abefore%7Bcontent%3A%22%5Ce243%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dtop%3Abefore%7Bcontent%3A%22%5Ce244%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce245%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dhorizontal%3Abefore%7Bcontent%3A%22%5Ce246%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dleft%3Abefore%7Bcontent%3A%22%5Ce247%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dvertical%3Abefore%7Bcontent%3A%22%5Ce248%22%7D%2Eglyphicon%2Dobject%2Dalign%2Dright%3Abefore%7Bcontent%3A%22%5Ce249%22%7D%2Eglyphicon%2Dtriangle%2Dright%3Abefore%7Bcontent%3A%22%5Ce250%22%7D%2Eglyphicon%2Dtriangle%2Dleft%3Abefore%7Bcontent%3A%22%5Ce251%22%7D%2Eglyphicon%2Dtriangle%2Dbottom%3Abefore%7Bcontent%3A%22%5Ce252%22%7D%2Eglyphicon%2Dtriangle%2Dtop%3Abefore%7Bcontent%3A%22%5Ce253%22%7D%2Eglyphicon%2Dconsole%3Abefore%7Bcontent%3A%22%5Ce254%22%7D%2Eglyphicon%2Dsuperscript%3Abefore%7Bcontent%3A%22%5Ce255%22%7D%2Eglyphicon%2Dsubscript%3Abefore%7Bcontent%3A%22%5Ce256%22%7D%2Eglyphicon%2Dmenu%2Dleft%3Abefore%7Bcontent%3A%22%5Ce257%22%7D%2Eglyphicon%2Dmenu%2Dright%3Abefore%7Bcontent%3A%22%5Ce258%22%7D%2Eglyphicon%2Dmenu%2Ddown%3Abefore%7Bcontent%3A%22%5Ce259%22%7D%2Eglyphicon%2Dmenu%2Dup%3Abefore%7Bcontent%3A%22%5Ce260%22%7D%2A%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7D%3Aafter%2C%3Abefore%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dhtml%7Bfont%2Dsize%3A10px%3B%2Dwebkit%2Dtap%2Dhighlight%2Dcolor%3Argba%280%2C0%2C0%2C0%29%7Dbody%7Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%7Dbutton%2Cinput%2Cselect%2Ctextarea%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dsize%3Ainherit%3Bline%2Dheight%3Ainherit%7Da%7Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%7Da%3Afocus%2Ca%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%7Da%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Dfigure%7Bmargin%3A0%7Dimg%7Bvertical%2Dalign%3Amiddle%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%2C%2Eimg%2Dresponsive%2C%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bdisplay%3Ablock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%7D%2Eimg%2Drounded%7Bborder%2Dradius%3A6px%7D%2Eimg%2Dthumbnail%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bheight%3Aauto%3Bpadding%3A4px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aall%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aall%20%2E2s%20ease%2Din%2Dout%7D%2Eimg%2Dcircle%7Bborder%2Dradius%3A50%25%7Dhr%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A20px%3Bborder%3A0%3Bborder%2Dtop%3A1px%20solid%20%23eee%7D%2Esr%2Donly%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A%2D1px%3Boverflow%3Ahidden%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bborder%3A0%7D%2Esr%2Donly%2Dfocusable%3Aactive%2C%2Esr%2Donly%2Dfocusable%3Afocus%7Bposition%3Astatic%3Bwidth%3Aauto%3Bheight%3Aauto%3Bmargin%3A0%3Boverflow%3Avisible%3Bclip%3Aauto%7D%5Brole%3Dbutton%5D%7Bcursor%3Apointer%7D%2Eh1%2C%2Eh2%2C%2Eh3%2C%2Eh4%2C%2Eh5%2C%2Eh6%2Ch1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%7Bfont%2Dfamily%3Ainherit%3Bfont%2Dweight%3A500%3Bline%2Dheight%3A1%2E1%3Bcolor%3Ainherit%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2C%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23777%7D%2Eh1%2C%2Eh2%2C%2Eh3%2Ch1%2Ch2%2Ch3%7Bmargin%2Dtop%3A20px%3Bmargin%2Dbottom%3A10px%7D%2Eh1%20%2Esmall%2C%2Eh1%20small%2C%2Eh2%20%2Esmall%2C%2Eh2%20small%2C%2Eh3%20%2Esmall%2C%2Eh3%20small%2Ch1%20%2Esmall%2Ch1%20small%2Ch2%20%2Esmall%2Ch2%20small%2Ch3%20%2Esmall%2Ch3%20small%7Bfont%2Dsize%3A65%25%7D%2Eh4%2C%2Eh5%2C%2Eh6%2Ch4%2Ch5%2Ch6%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Eh4%20%2Esmall%2C%2Eh4%20small%2C%2Eh5%20%2Esmall%2C%2Eh5%20small%2C%2Eh6%20%2Esmall%2C%2Eh6%20small%2Ch4%20%2Esmall%2Ch4%20small%2Ch5%20%2Esmall%2Ch5%20small%2Ch6%20%2Esmall%2Ch6%20small%7Bfont%2Dsize%3A75%25%7D%2Eh1%2Ch1%7Bfont%2Dsize%3A36px%7D%2Eh2%2Ch2%7Bfont%2Dsize%3A30px%7D%2Eh3%2Ch3%7Bfont%2Dsize%3A24px%7D%2Eh4%2Ch4%7Bfont%2Dsize%3A18px%7D%2Eh5%2Ch5%7Bfont%2Dsize%3A14px%7D%2Eh6%2Ch6%7Bfont%2Dsize%3A12px%7Dp%7Bmargin%3A0%200%2010px%7D%2Elead%7Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A16px%3Bfont%2Dweight%3A300%3Bline%2Dheight%3A1%2E4%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Elead%7Bfont%2Dsize%3A21px%7D%7D%2Esmall%2Csmall%7Bfont%2Dsize%3A85%25%7D%2Emark%2Cmark%7Bpadding%3A%2E2em%3Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etext%2Dleft%7Btext%2Dalign%3Aleft%7D%2Etext%2Dright%7Btext%2Dalign%3Aright%7D%2Etext%2Dcenter%7Btext%2Dalign%3Acenter%7D%2Etext%2Djustify%7Btext%2Dalign%3Ajustify%7D%2Etext%2Dnowrap%7Bwhite%2Dspace%3Anowrap%7D%2Etext%2Dlowercase%7Btext%2Dtransform%3Alowercase%7D%2Etext%2Duppercase%7Btext%2Dtransform%3Auppercase%7D%2Etext%2Dcapitalize%7Btext%2Dtransform%3Acapitalize%7D%2Etext%2Dmuted%7Bcolor%3A%23777%7D%2Etext%2Dprimary%7Bcolor%3A%23337ab7%7Da%2Etext%2Dprimary%3Afocus%2Ca%2Etext%2Dprimary%3Ahover%7Bcolor%3A%23286090%7D%2Etext%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Etext%2Dsuccess%3Afocus%2Ca%2Etext%2Dsuccess%3Ahover%7Bcolor%3A%232b542c%7D%2Etext%2Dinfo%7Bcolor%3A%2331708f%7Da%2Etext%2Dinfo%3Afocus%2Ca%2Etext%2Dinfo%3Ahover%7Bcolor%3A%23245269%7D%2Etext%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Etext%2Dwarning%3Afocus%2Ca%2Etext%2Dwarning%3Ahover%7Bcolor%3A%2366512c%7D%2Etext%2Ddanger%7Bcolor%3A%23a94442%7Da%2Etext%2Ddanger%3Afocus%2Ca%2Etext%2Ddanger%3Ahover%7Bcolor%3A%23843534%7D%2Ebg%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7Da%2Ebg%2Dprimary%3Afocus%2Ca%2Ebg%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Ebg%2Dsuccess%7Bbackground%2Dcolor%3A%23dff0d8%7Da%2Ebg%2Dsuccess%3Afocus%2Ca%2Ebg%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%23c1e2b3%7D%2Ebg%2Dinfo%7Bbackground%2Dcolor%3A%23d9edf7%7Da%2Ebg%2Dinfo%3Afocus%2Ca%2Ebg%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%23afd9ee%7D%2Ebg%2Dwarning%7Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Ebg%2Dwarning%3Afocus%2Ca%2Ebg%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f7ecb5%7D%2Ebg%2Ddanger%7Bbackground%2Dcolor%3A%23f2dede%7Da%2Ebg%2Ddanger%3Afocus%2Ca%2Ebg%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23e4b9b9%7D%2Epage%2Dheader%7Bpadding%2Dbottom%3A9px%3Bmargin%3A40px%200%2020px%3Bborder%2Dbottom%3A1px%20solid%20%23eee%7Dol%2Cul%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A10px%7Dol%20ol%2Col%20ul%2Cul%20ol%2Cul%20ul%7Bmargin%2Dbottom%3A0%7D%2Elist%2Dunstyled%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%7Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D5px%3Blist%2Dstyle%3Anone%7D%2Elist%2Dinline%3Eli%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A5px%3Bpadding%2Dleft%3A5px%7Ddl%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A20px%7Ddd%2Cdt%7Bline%2Dheight%3A1%2E42857143%7Ddt%7Bfont%2Dweight%3A700%7Ddd%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Edl%2Dhorizontal%20dt%7Bfloat%3Aleft%3Bwidth%3A160px%3Boverflow%3Ahidden%3Bclear%3Aleft%3Btext%2Dalign%3Aright%3Btext%2Doverflow%3Aellipsis%3Bwhite%2Dspace%3Anowrap%7D%2Edl%2Dhorizontal%20dd%7Bmargin%2Dleft%3A180px%7D%7Dabbr%5Bdata%2Doriginal%2Dtitle%5D%2Cabbr%5Btitle%5D%7Bcursor%3Ahelp%3Bborder%2Dbottom%3A1px%20dotted%20%23777%7D%2Einitialism%7Bfont%2Dsize%3A90%25%3Btext%2Dtransform%3Auppercase%7Dblockquote%7Bpadding%3A10px%2020px%3Bmargin%3A0%200%2020px%3Bfont%2Dsize%3A17%2E5px%3Bborder%2Dleft%3A5px%20solid%20%23eee%7Dblockquote%20ol%3Alast%2Dchild%2Cblockquote%20p%3Alast%2Dchild%2Cblockquote%20ul%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7Dblockquote%20%2Esmall%2Cblockquote%20footer%2Cblockquote%20small%7Bdisplay%3Ablock%3Bfont%2Dsize%3A80%25%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%7Dblockquote%20%2Esmall%3Abefore%2Cblockquote%20footer%3Abefore%2Cblockquote%20small%3Abefore%7Bcontent%3A%27%5C2014%20%5C00A0%27%7D%2Eblockquote%2Dreverse%2Cblockquote%2Epull%2Dright%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A0%3Btext%2Dalign%3Aright%3Bborder%2Dright%3A5px%20solid%20%23eee%3Bborder%2Dleft%3A0%7D%2Eblockquote%2Dreverse%20%2Esmall%3Abefore%2C%2Eblockquote%2Dreverse%20footer%3Abefore%2C%2Eblockquote%2Dreverse%20small%3Abefore%2Cblockquote%2Epull%2Dright%20%2Esmall%3Abefore%2Cblockquote%2Epull%2Dright%20footer%3Abefore%2Cblockquote%2Epull%2Dright%20small%3Abefore%7Bcontent%3A%27%27%7D%2Eblockquote%2Dreverse%20%2Esmall%3Aafter%2C%2Eblockquote%2Dreverse%20footer%3Aafter%2C%2Eblockquote%2Dreverse%20small%3Aafter%2Cblockquote%2Epull%2Dright%20%2Esmall%3Aafter%2Cblockquote%2Epull%2Dright%20footer%3Aafter%2Cblockquote%2Epull%2Dright%20small%3Aafter%7Bcontent%3A%27%5C00A0%20%5C2014%27%7Daddress%7Bmargin%2Dbottom%3A20px%3Bfont%2Dstyle%3Anormal%3Bline%2Dheight%3A1%2E42857143%7Dcode%2Ckbd%2Cpre%2Csamp%7Bfont%2Dfamily%3Amonospace%7Dcode%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23c7254e%3Bbackground%2Dcolor%3A%23f9f2f4%3Bborder%2Dradius%3A4px%7Dkbd%7Bpadding%3A2px%204px%3Bfont%2Dsize%3A90%25%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%3Bborder%2Dradius%3A3px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E25%29%7Dkbd%20kbd%7Bpadding%3A0%3Bfont%2Dsize%3A100%25%3Bfont%2Dweight%3A700%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7Dpre%7Bdisplay%3Ablock%3Bpadding%3A9%2E5px%3Bmargin%3A0%200%2010px%3Bfont%2Dsize%3A13px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bword%2Dbreak%3Abreak%2Dall%3Bword%2Dwrap%3Abreak%2Dword%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7Dpre%20code%7Bpadding%3A0%3Bfont%2Dsize%3Ainherit%3Bcolor%3Ainherit%3Bwhite%2Dspace%3Apre%2Dwrap%3Bbackground%2Dcolor%3Atransparent%3Bborder%2Dradius%3A0%7D%2Epre%2Dscrollable%7Bmax%2Dheight%3A340px%3Boverflow%2Dy%3Ascroll%7D%2Econtainer%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%7Bwidth%3A750px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Econtainer%7Bwidth%3A970px%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Econtainer%7Bwidth%3A1170px%7D%7D%2Econtainer%2Dfluid%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Erow%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%2C%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%2C%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%2C%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bposition%3Arelative%3Bmin%2Dheight%3A1px%3Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Ecol%2Dxs%2D1%2C%2Ecol%2Dxs%2D10%2C%2Ecol%2Dxs%2D11%2C%2Ecol%2Dxs%2D12%2C%2Ecol%2Dxs%2D2%2C%2Ecol%2Dxs%2D3%2C%2Ecol%2Dxs%2D4%2C%2Ecol%2Dxs%2D5%2C%2Ecol%2Dxs%2D6%2C%2Ecol%2Dxs%2D7%2C%2Ecol%2Dxs%2D8%2C%2Ecol%2Dxs%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dxs%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dxs%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dxs%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dxs%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dxs%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dxs%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dxs%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dxs%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dxs%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dxs%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dxs%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dxs%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dxs%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dxs%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dxs%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dxs%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dxs%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dxs%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dxs%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dxs%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dxs%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dxs%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dxs%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dxs%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dxs%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dxs%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dxs%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dxs%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Ecol%2Dsm%2D1%2C%2Ecol%2Dsm%2D10%2C%2Ecol%2Dsm%2D11%2C%2Ecol%2Dsm%2D12%2C%2Ecol%2Dsm%2D2%2C%2Ecol%2Dsm%2D3%2C%2Ecol%2Dsm%2D4%2C%2Ecol%2Dsm%2D5%2C%2Ecol%2Dsm%2D6%2C%2Ecol%2Dsm%2D7%2C%2Ecol%2Dsm%2D8%2C%2Ecol%2Dsm%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dsm%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dsm%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dsm%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dsm%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dsm%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dsm%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dsm%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dsm%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dsm%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dsm%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dsm%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dsm%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dsm%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dsm%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dsm%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dsm%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dsm%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dsm%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dsm%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dsm%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dsm%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dsm%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dsm%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dsm%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dsm%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dsm%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dsm%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dsm%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Ecol%2Dmd%2D1%2C%2Ecol%2Dmd%2D10%2C%2Ecol%2Dmd%2D11%2C%2Ecol%2Dmd%2D12%2C%2Ecol%2Dmd%2D2%2C%2Ecol%2Dmd%2D3%2C%2Ecol%2Dmd%2D4%2C%2Ecol%2Dmd%2D5%2C%2Ecol%2Dmd%2D6%2C%2Ecol%2Dmd%2D7%2C%2Ecol%2Dmd%2D8%2C%2Ecol%2Dmd%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dmd%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dmd%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dmd%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dmd%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dmd%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dmd%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dmd%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dmd%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dmd%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dmd%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dmd%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dmd%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dmd%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dmd%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dmd%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dmd%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dmd%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dmd%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dmd%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dmd%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dmd%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dmd%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dmd%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dmd%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dmd%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dmd%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dmd%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dmd%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ecol%2Dlg%2D1%2C%2Ecol%2Dlg%2D10%2C%2Ecol%2Dlg%2D11%2C%2Ecol%2Dlg%2D12%2C%2Ecol%2Dlg%2D2%2C%2Ecol%2Dlg%2D3%2C%2Ecol%2Dlg%2D4%2C%2Ecol%2Dlg%2D5%2C%2Ecol%2Dlg%2D6%2C%2Ecol%2Dlg%2D7%2C%2Ecol%2Dlg%2D8%2C%2Ecol%2Dlg%2D9%7Bfloat%3Aleft%7D%2Ecol%2Dlg%2D12%7Bwidth%3A100%25%7D%2Ecol%2Dlg%2D11%7Bwidth%3A91%2E66666667%25%7D%2Ecol%2Dlg%2D10%7Bwidth%3A83%2E33333333%25%7D%2Ecol%2Dlg%2D9%7Bwidth%3A75%25%7D%2Ecol%2Dlg%2D8%7Bwidth%3A66%2E66666667%25%7D%2Ecol%2Dlg%2D7%7Bwidth%3A58%2E33333333%25%7D%2Ecol%2Dlg%2D6%7Bwidth%3A50%25%7D%2Ecol%2Dlg%2D5%7Bwidth%3A41%2E66666667%25%7D%2Ecol%2Dlg%2D4%7Bwidth%3A33%2E33333333%25%7D%2Ecol%2Dlg%2D3%7Bwidth%3A25%25%7D%2Ecol%2Dlg%2D2%7Bwidth%3A16%2E66666667%25%7D%2Ecol%2Dlg%2D1%7Bwidth%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D12%7Bright%3A100%25%7D%2Ecol%2Dlg%2Dpull%2D11%7Bright%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D10%7Bright%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D9%7Bright%3A75%25%7D%2Ecol%2Dlg%2Dpull%2D8%7Bright%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D7%7Bright%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D6%7Bright%3A50%25%7D%2Ecol%2Dlg%2Dpull%2D5%7Bright%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D4%7Bright%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D3%7Bright%3A25%25%7D%2Ecol%2Dlg%2Dpull%2D2%7Bright%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpull%2D1%7Bright%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpull%2D0%7Bright%3Aauto%7D%2Ecol%2Dlg%2Dpush%2D12%7Bleft%3A100%25%7D%2Ecol%2Dlg%2Dpush%2D11%7Bleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D10%7Bleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D9%7Bleft%3A75%25%7D%2Ecol%2Dlg%2Dpush%2D8%7Bleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D7%7Bleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D6%7Bleft%3A50%25%7D%2Ecol%2Dlg%2Dpush%2D5%7Bleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D4%7Bleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D3%7Bleft%3A25%25%7D%2Ecol%2Dlg%2Dpush%2D2%7Bleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Dpush%2D1%7Bleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Dpush%2D0%7Bleft%3Aauto%7D%2Ecol%2Dlg%2Doffset%2D12%7Bmargin%2Dleft%3A100%25%7D%2Ecol%2Dlg%2Doffset%2D11%7Bmargin%2Dleft%3A91%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D10%7Bmargin%2Dleft%3A83%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D9%7Bmargin%2Dleft%3A75%25%7D%2Ecol%2Dlg%2Doffset%2D8%7Bmargin%2Dleft%3A66%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D7%7Bmargin%2Dleft%3A58%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D6%7Bmargin%2Dleft%3A50%25%7D%2Ecol%2Dlg%2Doffset%2D5%7Bmargin%2Dleft%3A41%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D4%7Bmargin%2Dleft%3A33%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D3%7Bmargin%2Dleft%3A25%25%7D%2Ecol%2Dlg%2Doffset%2D2%7Bmargin%2Dleft%3A16%2E66666667%25%7D%2Ecol%2Dlg%2Doffset%2D1%7Bmargin%2Dleft%3A8%2E33333333%25%7D%2Ecol%2Dlg%2Doffset%2D0%7Bmargin%2Dleft%3A0%7D%7Dtable%7Bbackground%2Dcolor%3Atransparent%7Dcaption%7Bpadding%2Dtop%3A8px%3Bpadding%2Dbottom%3A8px%3Bcolor%3A%23777%3Btext%2Dalign%3Aleft%7Dth%7B%7D%2Etable%7Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A20px%7D%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%3Ethead%3Etr%3Eth%7Bpadding%3A8px%3Bline%2Dheight%3A1%2E42857143%3Bvertical%2Dalign%3Atop%3Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Etable%3Ethead%3Etr%3Eth%7Bvertical%2Dalign%3Abottom%3Bborder%2Dbottom%3A2px%20solid%20%23ddd%7D%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecaption%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ecolgroup%2Bthead%3Etr%3Afirst%2Dchild%3Eth%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Etd%2C%2Etable%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dtop%3A0%7D%2Etable%3Etbody%2Btbody%7Bborder%2Dtop%3A2px%20solid%20%23ddd%7D%2Etable%20%2Etable%7Bbackground%2Dcolor%3A%23fff%7D%2Etable%2Dcondensed%3Etbody%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etbody%3Etr%3Eth%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Etd%2C%2Etable%2Dcondensed%3Etfoot%3Etr%3Eth%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Etd%2C%2Etable%2Dcondensed%3Ethead%3Etr%3Eth%7Bpadding%3A5px%7D%2Etable%2Dbordered%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Etbody%3Etr%3Etd%2C%2Etable%2Dbordered%3Etbody%3Etr%3Eth%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%2C%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%2C%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dbordered%3Ethead%3Etr%3Etd%2C%2Etable%2Dbordered%3Ethead%3Etr%3Eth%7Bborder%2Dbottom%2Dwidth%3A2px%7D%2Etable%2Dstriped%3Etbody%3Etr%3Anth%2Dof%2Dtype%28odd%29%7Bbackground%2Dcolor%3A%23f9f9f9%7D%2Etable%2Dhover%3Etbody%3Etr%3Ahover%7Bbackground%2Dcolor%3A%23f5f5f5%7Dtable%20col%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcolumn%3Bfloat%3Anone%7Dtable%20td%5Bclass%2A%3Dcol%2D%5D%2Ctable%20th%5Bclass%2A%3Dcol%2D%5D%7Bposition%3Astatic%3Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%7D%2Etable%3Etbody%3Etr%2Eactive%3Etd%2C%2Etable%3Etbody%3Etr%2Eactive%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Eactive%2C%2Etable%3Etbody%3Etr%3Eth%2Eactive%2C%2Etable%3Etfoot%3Etr%2Eactive%3Etd%2C%2Etable%3Etfoot%3Etr%2Eactive%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Eactive%2C%2Etable%3Etfoot%3Etr%3Eth%2Eactive%2C%2Etable%3Ethead%3Etr%2Eactive%3Etd%2C%2Etable%3Ethead%3Etr%2Eactive%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Eactive%2C%2Etable%3Ethead%3Etr%3Eth%2Eactive%7Bbackground%2Dcolor%3A%23f5f5f5%7D%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Eactive%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Eactive%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Eactive%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Eactive%3Ahover%7Bbackground%2Dcolor%3A%23e8e8e8%7D%2Etable%3Etbody%3Etr%2Esuccess%3Etd%2C%2Etable%3Etbody%3Etr%2Esuccess%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Esuccess%2C%2Etable%3Etbody%3Etr%3Eth%2Esuccess%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Etd%2C%2Etable%3Etfoot%3Etr%2Esuccess%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Esuccess%2C%2Etable%3Etfoot%3Etr%3Eth%2Esuccess%2C%2Etable%3Ethead%3Etr%2Esuccess%3Etd%2C%2Etable%3Ethead%3Etr%2Esuccess%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Esuccess%2C%2Etable%3Ethead%3Etr%3Eth%2Esuccess%7Bbackground%2Dcolor%3A%23dff0d8%7D%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Esuccess%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Esuccess%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Esuccess%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Esuccess%3Ahover%7Bbackground%2Dcolor%3A%23d0e9c6%7D%2Etable%3Etbody%3Etr%2Einfo%3Etd%2C%2Etable%3Etbody%3Etr%2Einfo%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Einfo%2C%2Etable%3Etbody%3Etr%3Eth%2Einfo%2C%2Etable%3Etfoot%3Etr%2Einfo%3Etd%2C%2Etable%3Etfoot%3Etr%2Einfo%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Einfo%2C%2Etable%3Etfoot%3Etr%3Eth%2Einfo%2C%2Etable%3Ethead%3Etr%2Einfo%3Etd%2C%2Etable%3Ethead%3Etr%2Einfo%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Einfo%2C%2Etable%3Ethead%3Etr%3Eth%2Einfo%7Bbackground%2Dcolor%3A%23d9edf7%7D%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Einfo%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Einfo%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Einfo%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Einfo%3Ahover%7Bbackground%2Dcolor%3A%23c4e3f3%7D%2Etable%3Etbody%3Etr%2Ewarning%3Etd%2C%2Etable%3Etbody%3Etr%2Ewarning%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Ewarning%2C%2Etable%3Etbody%3Etr%3Eth%2Ewarning%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Etd%2C%2Etable%3Etfoot%3Etr%2Ewarning%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Ewarning%2C%2Etable%3Etfoot%3Etr%3Eth%2Ewarning%2C%2Etable%3Ethead%3Etr%2Ewarning%3Etd%2C%2Etable%3Ethead%3Etr%2Ewarning%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Ewarning%2C%2Etable%3Ethead%3Etr%3Eth%2Ewarning%7Bbackground%2Dcolor%3A%23fcf8e3%7D%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Ewarning%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Ewarning%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Ewarning%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Ewarning%3Ahover%7Bbackground%2Dcolor%3A%23faf2cc%7D%2Etable%3Etbody%3Etr%2Edanger%3Etd%2C%2Etable%3Etbody%3Etr%2Edanger%3Eth%2C%2Etable%3Etbody%3Etr%3Etd%2Edanger%2C%2Etable%3Etbody%3Etr%3Eth%2Edanger%2C%2Etable%3Etfoot%3Etr%2Edanger%3Etd%2C%2Etable%3Etfoot%3Etr%2Edanger%3Eth%2C%2Etable%3Etfoot%3Etr%3Etd%2Edanger%2C%2Etable%3Etfoot%3Etr%3Eth%2Edanger%2C%2Etable%3Ethead%3Etr%2Edanger%3Etd%2C%2Etable%3Ethead%3Etr%2Edanger%3Eth%2C%2Etable%3Ethead%3Etr%3Etd%2Edanger%2C%2Etable%3Ethead%3Etr%3Eth%2Edanger%7Bbackground%2Dcolor%3A%23f2dede%7D%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Etd%2C%2Etable%2Dhover%3Etbody%3Etr%2Edanger%3Ahover%3Eth%2C%2Etable%2Dhover%3Etbody%3Etr%3Ahover%3E%2Edanger%2C%2Etable%2Dhover%3Etbody%3Etr%3Etd%2Edanger%3Ahover%2C%2Etable%2Dhover%3Etbody%3Etr%3Eth%2Edanger%3Ahover%7Bbackground%2Dcolor%3A%23ebcccc%7D%2Etable%2Dresponsive%7Bmin%2Dheight%3A%2E01%25%3Boverflow%2Dx%3Aauto%7D%40media%20screen%20and%20%28max%2Dwidth%3A767px%29%7B%2Etable%2Dresponsive%7Bwidth%3A100%25%3Bmargin%2Dbottom%3A15px%3Boverflow%2Dy%3Ahidden%3B%2Dms%2Doverflow%2Dstyle%3A%2Dms%2Dautohiding%2Dscrollbar%3Bborder%3A1px%20solid%20%23ddd%7D%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etbody%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Etfoot%3Etr%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%3Ethead%3Etr%3Eth%7Bwhite%2Dspace%3Anowrap%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%7Dfieldset%7Bmin%2Dwidth%3A0%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3A0%7Dlegend%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bpadding%3A0%3Bmargin%2Dbottom%3A20px%3Bfont%2Dsize%3A21px%3Bline%2Dheight%3Ainherit%3Bcolor%3A%23333%3Bborder%3A0%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7Dlabel%7Bdisplay%3Ainline%2Dblock%3Bmax%2Dwidth%3A100%25%3Bmargin%2Dbottom%3A5px%3Bfont%2Dweight%3A700%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dbox%2Dsizing%3Aborder%2Dbox%3B%2Dmoz%2Dbox%2Dsizing%3Aborder%2Dbox%3Bbox%2Dsizing%3Aborder%2Dbox%7Dinput%5Btype%3Dcheckbox%5D%2Cinput%5Btype%3Dradio%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%5C9%3Bline%2Dheight%3Anormal%7Dinput%5Btype%3Dfile%5D%7Bdisplay%3Ablock%7Dinput%5Btype%3Drange%5D%7Bdisplay%3Ablock%3Bwidth%3A100%25%7Dselect%5Bmultiple%5D%2Cselect%5Bsize%5D%7Bheight%3Aauto%7Dinput%5Btype%3Dfile%5D%3Afocus%2Cinput%5Btype%3Dcheckbox%5D%3Afocus%2Cinput%5Btype%3Dradio%5D%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7Doutput%7Bdisplay%3Ablock%3Bpadding%2Dtop%3A7px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%7D%2Eform%2Dcontrol%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3A34px%3Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23fff%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3B%2Dwebkit%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2C%2Dwebkit%2Dbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3B%2Do%2Dtransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%3Btransition%3Aborder%2Dcolor%20ease%2Din%2Dout%20%2E15s%2Cbox%2Dshadow%20ease%2Din%2Dout%20%2E15s%7D%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366afe9%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%208px%20rgba%28102%2C175%2C233%2C%2E6%29%7D%2Eform%2Dcontrol%3A%3A%2Dmoz%2Dplaceholder%7Bcolor%3A%23999%3Bopacity%3A1%7D%2Eform%2Dcontrol%3A%2Dms%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%3A%3A%2Dwebkit%2Dinput%2Dplaceholder%7Bcolor%3A%23999%7D%2Eform%2Dcontrol%5Bdisabled%5D%2C%2Eform%2Dcontrol%5Breadonly%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bbackground%2Dcolor%3A%23eee%3Bopacity%3A1%7D%2Eform%2Dcontrol%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Eform%2Dcontrol%7Bcursor%3Anot%2Dallowed%7Dtextarea%2Eform%2Dcontrol%7Bheight%3Aauto%7Dinput%5Btype%3Dsearch%5D%7B%2Dwebkit%2Dappearance%3Anone%7D%40media%20screen%20and%20%28%2Dwebkit%2Dmin%2Ddevice%2Dpixel%2Dratio%3A0%29%7Binput%5Btype%3Ddate%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dtime%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Eform%2Dcontrol%2Cinput%5Btype%3Dmonth%5D%2Eform%2Dcontrol%7Bline%2Dheight%3A34px%7D%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dsm%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dsm%2Cinput%5Btype%3Dtime%5D%2Einput%2Dsm%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dsm%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dsm%7Bline%2Dheight%3A30px%7D%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddate%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dtime%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Ddatetime%2Dlocal%5D%2C%2Einput%2Dgroup%2Dlg%20input%5Btype%3Dmonth%5D%2Cinput%5Btype%3Ddate%5D%2Einput%2Dlg%2Cinput%5Btype%3Dtime%5D%2Einput%2Dlg%2Cinput%5Btype%3Ddatetime%2Dlocal%5D%2Einput%2Dlg%2Cinput%5Btype%3Dmonth%5D%2Einput%2Dlg%7Bline%2Dheight%3A46px%7D%7D%2Eform%2Dgroup%7Bmargin%2Dbottom%3A15px%7D%2Echeckbox%2C%2Eradio%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Echeckbox%20label%2C%2Eradio%20label%7Bmin%2Dheight%3A20px%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Echeckbox%2Dinline%20input%5Btype%3Dcheckbox%5D%2C%2Eradio%20input%5Btype%3Dradio%5D%2C%2Eradio%2Dinline%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A4px%5C9%3Bmargin%2Dleft%3A%2D20px%7D%2Echeckbox%2B%2Echeckbox%2C%2Eradio%2B%2Eradio%7Bmargin%2Dtop%3A%2D5px%7D%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%2C%2Eradio%2Dinline%2B%2Eradio%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7Dfieldset%5Bdisabled%5D%20input%5Btype%3Dcheckbox%5D%2Cfieldset%5Bdisabled%5D%20input%5Btype%3Dradio%5D%2Cinput%5Btype%3Dcheckbox%5D%2Edisabled%2Cinput%5Btype%3Dcheckbox%5D%5Bdisabled%5D%2Cinput%5Btype%3Dradio%5D%2Edisabled%2Cinput%5Btype%3Dradio%5D%5Bdisabled%5D%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Dinline%2Edisabled%2C%2Eradio%2Dinline%2Edisabled%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%2Dinline%2Cfieldset%5Bdisabled%5D%20%2Eradio%2Dinline%7Bcursor%3Anot%2Dallowed%7D%2Echeckbox%2Edisabled%20label%2C%2Eradio%2Edisabled%20label%2Cfieldset%5Bdisabled%5D%20%2Echeckbox%20label%2Cfieldset%5Bdisabled%5D%20%2Eradio%20label%7Bcursor%3Anot%2Dallowed%7D%2Eform%2Dcontrol%2Dstatic%7Bmin%2Dheight%3A34px%3Bpadding%2Dtop%3A7px%3Bpadding%2Dbottom%3A7px%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dcontrol%2Dstatic%2Einput%2Dlg%2C%2Eform%2Dcontrol%2Dstatic%2Einput%2Dsm%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dsm%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dsm%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dsm%2Ctextarea%2Einput%2Dsm%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Eform%2Dgroup%2Dsm%20select%2Eform%2Dcontrol%7Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Eform%2Dgroup%2Dsm%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dsm%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A30px%3Bmin%2Dheight%3A32px%3Bpadding%3A6px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Einput%2Dlg%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dlg%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dlg%2Ctextarea%2Einput%2Dlg%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Eform%2Dgroup%2Dlg%20select%2Eform%2Dcontrol%7Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dlg%20select%5Bmultiple%5D%2Eform%2Dcontrol%2C%2Eform%2Dgroup%2Dlg%20textarea%2Eform%2Dcontrol%7Bheight%3Aauto%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2Dstatic%7Bheight%3A46px%3Bmin%2Dheight%3A38px%3Bpadding%3A11px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Ehas%2Dfeedback%7Bposition%3Arelative%7D%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%7Bpadding%2Dright%3A42%2E5px%7D%2Eform%2Dcontrol%2Dfeedback%7Bposition%3Aabsolute%3Btop%3A0%3Bright%3A0%3Bz%2Dindex%3A2%3Bdisplay%3Ablock%3Bwidth%3A34px%3Bheight%3A34px%3Bline%2Dheight%3A34px%3Btext%2Dalign%3Acenter%3Bpointer%2Devents%3Anone%7D%2Eform%2Dgroup%2Dlg%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dlg%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A46px%3Bheight%3A46px%3Bline%2Dheight%3A46px%7D%2Eform%2Dgroup%2Dsm%20%2Eform%2Dcontrol%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dgroup%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%2C%2Einput%2Dsm%2B%2Eform%2Dcontrol%2Dfeedback%7Bwidth%3A30px%3Bheight%3A30px%3Bline%2Dheight%3A30px%7D%2Ehas%2Dsuccess%20%2Echeckbox%2C%2Ehas%2Dsuccess%20%2Echeckbox%2Dinline%2C%2Ehas%2Dsuccess%20%2Econtrol%2Dlabel%2C%2Ehas%2Dsuccess%20%2Ehelp%2Dblock%2C%2Ehas%2Dsuccess%20%2Eradio%2C%2Ehas%2Dsuccess%20%2Eradio%2Dinline%2C%2Ehas%2Dsuccess%2Echeckbox%20label%2C%2Ehas%2Dsuccess%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dsuccess%2Eradio%20label%2C%2Ehas%2Dsuccess%2Eradio%2Dinline%20label%7Bcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%233c763d%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%232b542c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%2367b168%7D%2Ehas%2Dsuccess%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%233c763d%7D%2Ehas%2Dsuccess%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%233c763d%7D%2Ehas%2Dwarning%20%2Echeckbox%2C%2Ehas%2Dwarning%20%2Echeckbox%2Dinline%2C%2Ehas%2Dwarning%20%2Econtrol%2Dlabel%2C%2Ehas%2Dwarning%20%2Ehelp%2Dblock%2C%2Ehas%2Dwarning%20%2Eradio%2C%2Ehas%2Dwarning%20%2Eradio%2Dinline%2C%2Ehas%2Dwarning%2Echeckbox%20label%2C%2Ehas%2Dwarning%2Echeckbox%2Dinline%20label%2C%2Ehas%2Dwarning%2Eradio%20label%2C%2Ehas%2Dwarning%2Eradio%2Dinline%20label%7Bcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%238a6d3b%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%2366512c%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23c0a16b%7D%2Ehas%2Dwarning%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%238a6d3b%7D%2Ehas%2Dwarning%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%238a6d3b%7D%2Ehas%2Derror%20%2Echeckbox%2C%2Ehas%2Derror%20%2Echeckbox%2Dinline%2C%2Ehas%2Derror%20%2Econtrol%2Dlabel%2C%2Ehas%2Derror%20%2Ehelp%2Dblock%2C%2Ehas%2Derror%20%2Eradio%2C%2Ehas%2Derror%20%2Eradio%2Dinline%2C%2Ehas%2Derror%2Echeckbox%20label%2C%2Ehas%2Derror%2Echeckbox%2Dinline%20label%2C%2Ehas%2Derror%2Eradio%20label%2C%2Ehas%2Derror%2Eradio%2Dinline%20label%7Bcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%7Bborder%2Dcolor%3A%23a94442%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%3Afocus%7Bborder%2Dcolor%3A%23843534%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E075%29%2C0%200%206px%20%23ce8483%7D%2Ehas%2Derror%20%2Einput%2Dgroup%2Daddon%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23a94442%7D%2Ehas%2Derror%20%2Eform%2Dcontrol%2Dfeedback%7Bcolor%3A%23a94442%7D%2Ehas%2Dfeedback%20label%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A25px%7D%2Ehas%2Dfeedback%20label%2Esr%2Donly%7E%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%2Ehelp%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dtop%3A5px%3Bmargin%2Dbottom%3A10px%3Bcolor%3A%23737373%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dinline%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Eform%2Dinline%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Eform%2Dinline%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Eform%2Dinline%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Eform%2Dinline%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%2C%2Eform%2Dinline%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Eform%2Dinline%20%2Echeckbox%20label%2C%2Eform%2Dinline%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Eform%2Dinline%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Eform%2Dinline%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Eform%2Dinline%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Echeckbox%2Dinline%2C%2Eform%2Dhorizontal%20%2Eradio%2C%2Eform%2Dhorizontal%20%2Eradio%2Dinline%7Bpadding%2Dtop%3A7px%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%7D%2Eform%2Dhorizontal%20%2Echeckbox%2C%2Eform%2Dhorizontal%20%2Eradio%7Bmin%2Dheight%3A27px%7D%2Eform%2Dhorizontal%20%2Eform%2Dgroup%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A7px%3Bmargin%2Dbottom%3A0%3Btext%2Dalign%3Aright%7D%7D%2Eform%2Dhorizontal%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Bright%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dlg%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A14%2E33px%3Bfont%2Dsize%3A18px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Eform%2Dhorizontal%20%2Eform%2Dgroup%2Dsm%20%2Econtrol%2Dlabel%7Bpadding%2Dtop%3A6px%3Bfont%2Dsize%3A12px%7D%7D%2Ebtn%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A6px%2012px%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3B%2Dms%2Dtouch%2Daction%3Amanipulation%3Btouch%2Daction%3Amanipulation%3Bcursor%3Apointer%3B%2Dwebkit%2Duser%2Dselect%3Anone%3B%2Dmoz%2Duser%2Dselect%3Anone%3B%2Dms%2Duser%2Dselect%3Anone%3Buser%2Dselect%3Anone%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ebtn%2Eactive%2Efocus%2C%2Ebtn%2Eactive%3Afocus%2C%2Ebtn%2Efocus%2C%2Ebtn%3Aactive%2Efocus%2C%2Ebtn%3Aactive%3Afocus%2C%2Ebtn%3Afocus%7Boutline%3Athin%20dotted%3Boutline%3A5px%20auto%20%2Dwebkit%2Dfocus%2Dring%2Dcolor%3Boutline%2Doffset%3A%2D2px%7D%2Ebtn%2Efocus%2C%2Ebtn%3Afocus%2C%2Ebtn%3Ahover%7Bcolor%3A%23333%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Eactive%2C%2Ebtn%3Aactive%7Bbackground%2Dimage%3Anone%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Edisabled%2C%2Ebtn%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%7Bcursor%3Anot%2Dallowed%3Bfilter%3Aalpha%28opacity%3D65%29%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%3Bopacity%3A%2E65%7Da%2Ebtn%2Edisabled%2Cfieldset%5Bdisabled%5D%20a%2Ebtn%7Bpointer%2Devents%3Anone%7D%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%2Efocus%2C%2Ebtn%2Ddefault%3Afocus%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23e6e6e6%3Bborder%2Dcolor%3A%23adadad%7D%2Ebtn%2Ddefault%2Eactive%2Efocus%2C%2Ebtn%2Ddefault%2Eactive%3Afocus%2C%2Ebtn%2Ddefault%2Eactive%3Ahover%2C%2Ebtn%2Ddefault%3Aactive%2Efocus%2C%2Ebtn%2Ddefault%3Aactive%3Afocus%2C%2Ebtn%2Ddefault%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23d4d4d4%3Bborder%2Dcolor%3A%238c8c8c%7D%2Ebtn%2Ddefault%2Eactive%2C%2Ebtn%2Ddefault%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddefault%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddefault%2Edisabled%2C%2Ebtn%2Ddefault%2Edisabled%2Eactive%2C%2Ebtn%2Ddefault%2Edisabled%2Efocus%2C%2Ebtn%2Ddefault%2Edisabled%3Aactive%2C%2Ebtn%2Ddefault%2Edisabled%3Afocus%2C%2Ebtn%2Ddefault%2Edisabled%3Ahover%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddefault%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddefault%3Ahover%7Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ccc%7D%2Ebtn%2Ddefault%20%2Ebadge%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23333%7D%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%2Efocus%2C%2Ebtn%2Dprimary%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23286090%3Bborder%2Dcolor%3A%23204d74%7D%2Ebtn%2Dprimary%2Eactive%2Efocus%2C%2Ebtn%2Dprimary%2Eactive%3Afocus%2C%2Ebtn%2Dprimary%2Eactive%3Ahover%2C%2Ebtn%2Dprimary%3Aactive%2Efocus%2C%2Ebtn%2Dprimary%3Aactive%3Afocus%2C%2Ebtn%2Dprimary%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23204d74%3Bborder%2Dcolor%3A%23122b40%7D%2Ebtn%2Dprimary%2Eactive%2C%2Ebtn%2Dprimary%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dprimary%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dprimary%2Edisabled%2C%2Ebtn%2Dprimary%2Edisabled%2Eactive%2C%2Ebtn%2Dprimary%2Edisabled%2Efocus%2C%2Ebtn%2Dprimary%2Edisabled%3Aactive%2C%2Ebtn%2Dprimary%2Edisabled%3Afocus%2C%2Ebtn%2Dprimary%2Edisabled%3Ahover%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dprimary%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dprimary%3Ahover%7Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%232e6da4%7D%2Ebtn%2Dprimary%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%2Efocus%2C%2Ebtn%2Dsuccess%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23449d44%3Bborder%2Dcolor%3A%23398439%7D%2Ebtn%2Dsuccess%2Eactive%2Efocus%2C%2Ebtn%2Dsuccess%2Eactive%3Afocus%2C%2Ebtn%2Dsuccess%2Eactive%3Ahover%2C%2Ebtn%2Dsuccess%3Aactive%2Efocus%2C%2Ebtn%2Dsuccess%3Aactive%3Afocus%2C%2Ebtn%2Dsuccess%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23398439%3Bborder%2Dcolor%3A%23255625%7D%2Ebtn%2Dsuccess%2Eactive%2C%2Ebtn%2Dsuccess%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dsuccess%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dsuccess%2Edisabled%2C%2Ebtn%2Dsuccess%2Edisabled%2Eactive%2C%2Ebtn%2Dsuccess%2Edisabled%2Efocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Aactive%2C%2Ebtn%2Dsuccess%2Edisabled%3Afocus%2C%2Ebtn%2Dsuccess%2Edisabled%3Ahover%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dsuccess%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dsuccess%3Ahover%7Bbackground%2Dcolor%3A%235cb85c%3Bborder%2Dcolor%3A%234cae4c%7D%2Ebtn%2Dsuccess%20%2Ebadge%7Bcolor%3A%235cb85c%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%2Efocus%2C%2Ebtn%2Dinfo%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331b0d5%3Bborder%2Dcolor%3A%23269abc%7D%2Ebtn%2Dinfo%2Eactive%2Efocus%2C%2Ebtn%2Dinfo%2Eactive%3Afocus%2C%2Ebtn%2Dinfo%2Eactive%3Ahover%2C%2Ebtn%2Dinfo%3Aactive%2Efocus%2C%2Ebtn%2Dinfo%3Aactive%3Afocus%2C%2Ebtn%2Dinfo%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23269abc%3Bborder%2Dcolor%3A%231b6d85%7D%2Ebtn%2Dinfo%2Eactive%2C%2Ebtn%2Dinfo%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dinfo%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dinfo%2Edisabled%2C%2Ebtn%2Dinfo%2Edisabled%2Eactive%2C%2Ebtn%2Dinfo%2Edisabled%2Efocus%2C%2Ebtn%2Dinfo%2Edisabled%3Aactive%2C%2Ebtn%2Dinfo%2Edisabled%3Afocus%2C%2Ebtn%2Dinfo%2Edisabled%3Ahover%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dinfo%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dinfo%3Ahover%7Bbackground%2Dcolor%3A%235bc0de%3Bborder%2Dcolor%3A%2346b8da%7D%2Ebtn%2Dinfo%20%2Ebadge%7Bcolor%3A%235bc0de%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%2Efocus%2C%2Ebtn%2Dwarning%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ec971f%3Bborder%2Dcolor%3A%23d58512%7D%2Ebtn%2Dwarning%2Eactive%2Efocus%2C%2Ebtn%2Dwarning%2Eactive%3Afocus%2C%2Ebtn%2Dwarning%2Eactive%3Ahover%2C%2Ebtn%2Dwarning%3Aactive%2Efocus%2C%2Ebtn%2Dwarning%3Aactive%3Afocus%2C%2Ebtn%2Dwarning%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d58512%3Bborder%2Dcolor%3A%23985f0d%7D%2Ebtn%2Dwarning%2Eactive%2C%2Ebtn%2Dwarning%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Dwarning%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Dwarning%2Edisabled%2C%2Ebtn%2Dwarning%2Edisabled%2Eactive%2C%2Ebtn%2Dwarning%2Edisabled%2Efocus%2C%2Ebtn%2Dwarning%2Edisabled%3Aactive%2C%2Ebtn%2Dwarning%2Edisabled%3Afocus%2C%2Ebtn%2Dwarning%2Edisabled%3Ahover%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dwarning%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dwarning%3Ahover%7Bbackground%2Dcolor%3A%23f0ad4e%3Bborder%2Dcolor%3A%23eea236%7D%2Ebtn%2Dwarning%20%2Ebadge%7Bcolor%3A%23f0ad4e%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%2Efocus%2C%2Ebtn%2Ddanger%3Afocus%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23c9302c%3Bborder%2Dcolor%3A%23ac2925%7D%2Ebtn%2Ddanger%2Eactive%2Efocus%2C%2Ebtn%2Ddanger%2Eactive%3Afocus%2C%2Ebtn%2Ddanger%2Eactive%3Ahover%2C%2Ebtn%2Ddanger%3Aactive%2Efocus%2C%2Ebtn%2Ddanger%3Aactive%3Afocus%2C%2Ebtn%2Ddanger%3Aactive%3Ahover%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%2Efocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Afocus%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23ac2925%3Bborder%2Dcolor%3A%23761c19%7D%2Ebtn%2Ddanger%2Eactive%2C%2Ebtn%2Ddanger%3Aactive%2C%2Eopen%3E%2Edropdown%2Dtoggle%2Ebtn%2Ddanger%7Bbackground%2Dimage%3Anone%7D%2Ebtn%2Ddanger%2Edisabled%2C%2Ebtn%2Ddanger%2Edisabled%2Eactive%2C%2Ebtn%2Ddanger%2Edisabled%2Efocus%2C%2Ebtn%2Ddanger%2Edisabled%3Aactive%2C%2Ebtn%2Ddanger%2Edisabled%3Afocus%2C%2Ebtn%2Ddanger%2Edisabled%3Ahover%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Eactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%2Efocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Aactive%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Ddanger%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Eactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%2Efocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Aactive%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Ddanger%3Ahover%7Bbackground%2Dcolor%3A%23d9534f%3Bborder%2Dcolor%3A%23d43f3a%7D%2Ebtn%2Ddanger%20%2Ebadge%7Bcolor%3A%23d9534f%3Bbackground%2Dcolor%3A%23fff%7D%2Ebtn%2Dlink%7Bfont%2Dweight%3A400%3Bcolor%3A%23337ab7%3Bborder%2Dradius%3A0%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%2Eactive%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%5Bdisabled%5D%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%7Bbackground%2Dcolor%3Atransparent%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%2Dlink%2C%2Ebtn%2Dlink%3Aactive%2C%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bborder%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%3Afocus%2C%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%2323527c%3Btext%2Ddecoration%3Aunderline%3Bbackground%2Dcolor%3Atransparent%7D%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%7D%2Ebtn%2Dgroup%2Dlg%3E%2Ebtn%2C%2Ebtn%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7D%2Ebtn%2Dgroup%2Dsm%3E%2Ebtn%2C%2Ebtn%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%2C%2Ebtn%2Dxs%7Bpadding%3A1px%205px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7D%2Ebtn%2Dblock%7Bdisplay%3Ablock%3Bwidth%3A100%25%7D%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dtop%3A5px%7Dinput%5Btype%3Dbutton%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dreset%5D%2Ebtn%2Dblock%2Cinput%5Btype%3Dsubmit%5D%2Ebtn%2Dblock%7Bwidth%3A100%25%7D%2Efade%7Bopacity%3A0%3B%2Dwebkit%2Dtransition%3Aopacity%20%2E15s%20linear%3B%2Do%2Dtransition%3Aopacity%20%2E15s%20linear%3Btransition%3Aopacity%20%2E15s%20linear%7D%2Efade%2Ein%7Bopacity%3A1%7D%2Ecollapse%7Bdisplay%3Anone%7D%2Ecollapse%2Ein%7Bdisplay%3Ablock%7Dtr%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%7Dtbody%2Ecollapse%2Ein%7Bdisplay%3Atable%2Drow%2Dgroup%7D%2Ecollapsing%7Bposition%3Arelative%3Bheight%3A0%3Boverflow%3Ahidden%3B%2Dwebkit%2Dtransition%2Dtiming%2Dfunction%3Aease%3B%2Do%2Dtransition%2Dtiming%2Dfunction%3Aease%3Btransition%2Dtiming%2Dfunction%3Aease%3B%2Dwebkit%2Dtransition%2Dduration%3A%2E35s%3B%2Do%2Dtransition%2Dduration%3A%2E35s%3Btransition%2Dduration%3A%2E35s%3B%2Dwebkit%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3B%2Do%2Dtransition%2Dproperty%3Aheight%2Cvisibility%3Btransition%2Dproperty%3Aheight%2Cvisibility%7D%2Ecaret%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A0%3Bheight%3A0%3Bmargin%2Dleft%3A2px%3Bvertical%2Dalign%3Amiddle%3Bborder%2Dtop%3A4px%20dashed%3Bborder%2Dtop%3A4px%20solid%5C9%3Bborder%2Dright%3A4px%20solid%20transparent%3Bborder%2Dleft%3A4px%20solid%20transparent%7D%2Edropdown%2C%2Edropup%7Bposition%3Arelative%7D%2Edropdown%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Edropdown%2Dmenu%7Bposition%3Aabsolute%3Btop%3A100%25%3Bleft%3A0%3Bz%2Dindex%3A1000%3Bdisplay%3Anone%3Bfloat%3Aleft%3Bmin%2Dwidth%3A160px%3Bpadding%3A5px%200%3Bmargin%3A2px%200%200%3Bfont%2Dsize%3A14px%3Btext%2Dalign%3Aleft%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E15%29%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%3Bbox%2Dshadow%3A0%206px%2012px%20rgba%280%2C0%2C0%2C%2E175%29%7D%2Edropdown%2Dmenu%2Epull%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%20%2Edivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Edropdown%2Dmenu%3Eli%3Ea%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bclear%3Aboth%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23333%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23262626%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7D%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23337ab7%3Boutline%3A0%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%7D%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28enabled%3Dfalse%29%7D%2Eopen%3E%2Edropdown%2Dmenu%7Bdisplay%3Ablock%7D%2Eopen%3Ea%7Boutline%3A0%7D%2Edropdown%2Dmenu%2Dright%7Bright%3A0%3Bleft%3Aauto%7D%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%2Edropdown%2Dheader%7Bdisplay%3Ablock%3Bpadding%3A3px%2020px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23777%3Bwhite%2Dspace%3Anowrap%7D%2Edropdown%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A990%7D%2Epull%2Dright%3E%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Edropup%20%2Ecaret%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Ecaret%7Bcontent%3A%22%22%3Bborder%2Dtop%3A0%3Bborder%2Dbottom%3A4px%20dashed%3Bborder%2Dbottom%3A4px%20solid%5C9%7D%2Edropup%20%2Edropdown%2Dmenu%2C%2Enavbar%2Dfixed%2Dbottom%20%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bbottom%3A100%25%3Bmargin%2Dbottom%3A2px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dright%20%2Edropdown%2Dmenu%7Bright%3A0%3Bleft%3Aauto%7D%2Enavbar%2Dright%20%2Edropdown%2Dmenu%2Dleft%7Bright%3Aauto%3Bleft%3A0%7D%7D%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bvertical%2Dalign%3Amiddle%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%3E%2Ebtn%7Bposition%3Arelative%3Bfloat%3Aleft%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Ahover%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Eactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Aactive%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Afocus%2C%2Ebtn%2Dgroup%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%20%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dleft%3A%2D1px%7D%2Ebtn%2Dtoolbar%7Bmargin%2Dleft%3A%2D5px%7D%2Ebtn%2Dtoolbar%20%2Ebtn%2C%2Ebtn%2Dtoolbar%20%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%20%2Einput%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dtoolbar%3E%2Ebtn%2C%2Ebtn%2Dtoolbar%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dtoolbar%3E%2Einput%2Dgroup%7Bmargin%2Dleft%3A5px%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%2C%2Ebtn%2Dgroup%3E%2Edropdown%2Dtoggle%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%7Bfloat%3Aleft%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%20%2Edropdown%2Dtoggle%3Aactive%2C%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7Boutline%3A0%7D%2Ebtn%2Dgroup%3E%2Ebtn%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A8px%3Bpadding%2Dleft%3A8px%7D%2Ebtn%2Dgroup%3E%2Ebtn%2Dlg%2B%2Edropdown%2Dtoggle%7Bpadding%2Dright%3A12px%3Bpadding%2Dleft%3A12px%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%7B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%3Bbox%2Dshadow%3Ainset%200%203px%205px%20rgba%280%2C0%2C0%2C%2E125%29%7D%2Ebtn%2Dgroup%2Eopen%20%2Edropdown%2Dtoggle%2Ebtn%2Dlink%7B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Ebtn%20%2Ecaret%7Bmargin%2Dleft%3A0%7D%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Edropup%20%2Ebtn%2Dlg%20%2Ecaret%7Bborder%2Dwidth%3A0%205px%205px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bdisplay%3Ablock%3Bfloat%3Anone%3Bwidth%3A100%25%3Bmax%2Dwidth%3A100%25%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3E%2Ebtn%7Bfloat%3Anone%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2B%2Ebtn%2Dgroup%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%2B%2Ebtn%2Dgroup%7Bmargin%2Dtop%3A%2D1px%3Bmargin%2Dleft%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%7Bborder%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%3Alast%2Dchild%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Afirst%2Dchild%3Anot%28%3Alast%2Dchild%29%3E%2Edropdown%2Dtoggle%7Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Alast%2Dchild%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Ebtn%2Dgroup%2Djustified%7Bdisplay%3Atable%3Bwidth%3A100%25%3Btable%2Dlayout%3Afixed%3Bborder%2Dcollapse%3Aseparate%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2C%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%7Bdisplay%3Atable%2Dcell%3Bfloat%3Anone%3Bwidth%3A1%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Ebtn%7Bwidth%3A100%25%7D%2Ebtn%2Dgroup%2Djustified%3E%2Ebtn%2Dgroup%20%2Edropdown%2Dmenu%7Bleft%3Aauto%7D%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%20input%5Btype%3Dradio%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dcheckbox%5D%2C%5Bdata%2Dtoggle%3Dbuttons%5D%3E%2Ebtn%2Dgroup%3E%2Ebtn%20input%5Btype%3Dradio%5D%7Bposition%3Aabsolute%3Bclip%3Arect%280%2C0%2C0%2C0%29%3Bpointer%2Devents%3Anone%7D%2Einput%2Dgroup%7Bposition%3Arelative%3Bdisplay%3Atable%3Bborder%2Dcollapse%3Aseparate%7D%2Einput%2Dgroup%5Bclass%2A%3Dcol%2D%5D%7Bfloat%3Anone%3Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%7Bposition%3Arelative%3Bz%2Dindex%3A2%3Bfloat%3Aleft%3Bwidth%3A100%25%3Bmargin%2Dbottom%3A0%7D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%3Bborder%2Dradius%3A6px%7Dselect%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A46px%3Bline%2Dheight%3A46px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dlg%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%3Bborder%2Dradius%3A3px%7Dselect%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3A30px%3Bline%2Dheight%3A30px%7Dselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Cselect%5Bmultiple%5D%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Eform%2Dcontrol%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Daddon%2Ctextarea%2Einput%2Dgroup%2Dsm%3E%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bheight%3Aauto%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bdisplay%3Atable%2Dcell%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Daddon%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Anot%28%3Afirst%2Dchild%29%3Anot%28%3Alast%2Dchild%29%7Bborder%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%2C%2Einput%2Dgroup%2Dbtn%7Bwidth%3A1%25%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%7D%2Einput%2Dgroup%2Daddon%7Bpadding%3A6px%2012px%3Bfont%2Dsize%3A14px%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%3Bcolor%3A%23555%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23eee%3Bborder%3A1px%20solid%20%23ccc%3Bborder%2Dradius%3A4px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dsm%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bborder%2Dradius%3A3px%7D%2Einput%2Dgroup%2Daddon%2Einput%2Dlg%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bborder%2Dradius%3A6px%7D%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dcheckbox%5D%2C%2Einput%2Dgroup%2Daddon%20input%5Btype%3Dradio%5D%7Bmargin%2Dtop%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Edropdown%2Dtoggle%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Alast%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%3Anot%28%3Alast%2Dchild%29%3Anot%28%2Edropdown%2Dtoggle%29%7Bborder%2Dtop%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Afirst%2Dchild%7Bborder%2Dright%3A0%7D%2Einput%2Dgroup%20%2Eform%2Dcontrol%3Alast%2Dchild%2C%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%3Anot%28%3Afirst%2Dchild%29%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%3Anot%28%3Afirst%2Dchild%29%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Edropdown%2Dtoggle%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Einput%2Dgroup%2Daddon%3Alast%2Dchild%7Bborder%2Dleft%3A0%7D%2Einput%2Dgroup%2Dbtn%7Bposition%3Arelative%3Bfont%2Dsize%3A0%3Bwhite%2Dspace%3Anowrap%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%7Bposition%3Arelative%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Aactive%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Afocus%2C%2Einput%2Dgroup%2Dbtn%3E%2Ebtn%3Ahover%7Bz%2Dindex%3A2%7D%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Afirst%2Dchild%3E%2Ebtn%2Dgroup%7Bmargin%2Dright%3A%2D1px%7D%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2C%2Einput%2Dgroup%2Dbtn%3Alast%2Dchild%3E%2Ebtn%2Dgroup%7Bz%2Dindex%3A2%3Bmargin%2Dleft%3A%2D1px%7D%2Enav%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A0%3Blist%2Dstyle%3Anone%7D%2Enav%3Eli%7Bposition%3Arelative%3Bdisplay%3Ablock%7D%2Enav%3Eli%3Ea%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%7D%2Enav%3Eli%3Ea%3Afocus%2C%2Enav%3Eli%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Enav%3Eli%2Edisabled%3Ea%7Bcolor%3A%23777%7D%2Enav%3Eli%2Edisabled%3Ea%3Afocus%2C%2Enav%3Eli%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23777%3Btext%2Ddecoration%3Anone%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3Atransparent%7D%2Enav%20%2Eopen%3Ea%2C%2Enav%20%2Eopen%3Ea%3Afocus%2C%2Enav%20%2Eopen%3Ea%3Ahover%7Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23337ab7%7D%2Enav%20%2Enav%2Ddivider%7Bheight%3A1px%3Bmargin%3A9px%200%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23e5e5e5%7D%2Enav%3Eli%3Ea%3Eimg%7Bmax%2Dwidth%3Anone%7D%2Enav%2Dtabs%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Enav%2Dtabs%3Eli%7Bfloat%3Aleft%3Bmargin%2Dbottom%3A%2D1px%7D%2Enav%2Dtabs%3Eli%3Ea%7Bmargin%2Dright%3A2px%3Bline%2Dheight%3A1%2E42857143%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%3Eli%3Ea%3Ahover%7Bborder%2Dcolor%3A%23eee%20%23eee%20%23ddd%7D%2Enav%2Dtabs%3Eli%2Eactive%3Ea%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dcolor%3Atransparent%7D%2Enav%2Dtabs%2Enav%2Djustified%7Bwidth%3A100%25%3Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Enav%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Enav%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Enav%2Dpills%3Eli%7Bfloat%3Aleft%7D%2Enav%2Dpills%3Eli%3Ea%7Bborder%2Dradius%3A4px%7D%2Enav%2Dpills%3Eli%2Bli%7Bmargin%2Dleft%3A2px%7D%2Enav%2Dpills%3Eli%2Eactive%3Ea%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Afocus%2C%2Enav%2Dpills%3Eli%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%7D%2Enav%2Dstacked%3Eli%7Bfloat%3Anone%7D%2Enav%2Dstacked%3Eli%2Bli%7Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A0%7D%2Enav%2Djustified%7Bwidth%3A100%25%7D%2Enav%2Djustified%3Eli%7Bfloat%3Anone%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A5px%3Btext%2Dalign%3Acenter%7D%2Enav%2Djustified%3E%2Edropdown%20%2Edropdown%2Dmenu%7Btop%3Aauto%3Bleft%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Djustified%3Eli%7Bdisplay%3Atable%2Dcell%3Bwidth%3A1%25%7D%2Enav%2Djustified%3Eli%3Ea%7Bmargin%2Dbottom%3A0%7D%7D%2Enav%2Dtabs%2Djustified%7Bborder%2Dbottom%3A0%7D%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bmargin%2Dright%3A0%3Bborder%2Dradius%3A4px%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%3A1px%20solid%20%23ddd%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enav%2Dtabs%2Djustified%3Eli%3Ea%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%204px%200%200%7D%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Afocus%2C%2Enav%2Dtabs%2Djustified%3E%2Eactive%3Ea%3Ahover%7Bborder%2Dbottom%2Dcolor%3A%23fff%7D%7D%2Etab%2Dcontent%3E%2Etab%2Dpane%7Bdisplay%3Anone%7D%2Etab%2Dcontent%3E%2Eactive%7Bdisplay%3Ablock%7D%2Enav%2Dtabs%20%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A%2D1px%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%7Bposition%3Arelative%3Bmin%2Dheight%3A50px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%7Bborder%2Dradius%3A4px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dheader%7Bfloat%3Aleft%7D%7D%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%3Boverflow%2Dx%3Avisible%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Bborder%2Dtop%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Aauto%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dcollapse%7Bwidth%3Aauto%3Bborder%2Dtop%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dcollapse%2Ecollapse%7Bdisplay%3Ablock%21important%3Bheight%3Aauto%21important%3Bpadding%2Dbottom%3A0%3Boverflow%3Avisible%21important%7D%2Enavbar%2Dcollapse%2Ein%7Boverflow%2Dy%3Avisible%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dstatic%2Dtop%20%2Enavbar%2Dcollapse%7Bpadding%2Dright%3A0%3Bpadding%2Dleft%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A340px%7D%40media%20%28max%2Ddevice%2Dwidth%3A480px%29%20and%20%28orientation%3Alandscape%29%7B%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dfixed%2Dtop%20%2Enavbar%2Dcollapse%7Bmax%2Dheight%3A200px%7D%7D%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A%2D15px%3Bmargin%2Dleft%3A%2D15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Econtainer%2Dfluid%3E%2Enavbar%2Dcollapse%2C%2Econtainer%2Dfluid%3E%2Enavbar%2Dheader%2C%2Econtainer%3E%2Enavbar%2Dcollapse%2C%2Econtainer%3E%2Enavbar%2Dheader%7Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%7D%7D%2Enavbar%2Dstatic%2Dtop%7Bz%2Dindex%3A1000%3Bborder%2Dwidth%3A0%200%201px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dstatic%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bposition%3Afixed%3Bright%3A0%3Bleft%3A0%3Bz%2Dindex%3A1030%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dfixed%2Dbottom%2C%2Enavbar%2Dfixed%2Dtop%7Bborder%2Dradius%3A0%7D%7D%2Enavbar%2Dfixed%2Dtop%7Btop%3A0%3Bborder%2Dwidth%3A0%200%201px%7D%2Enavbar%2Dfixed%2Dbottom%7Bbottom%3A0%3Bmargin%2Dbottom%3A0%3Bborder%2Dwidth%3A1px%200%200%7D%2Enavbar%2Dbrand%7Bfloat%3Aleft%3Bheight%3A50px%3Bpadding%3A15px%2015px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A20px%7D%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dbrand%3Ahover%7Btext%2Ddecoration%3Anone%7D%2Enavbar%2Dbrand%3Eimg%7Bdisplay%3Ablock%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%3E%2Econtainer%20%2Enavbar%2Dbrand%2C%2Enavbar%3E%2Econtainer%2Dfluid%20%2Enavbar%2Dbrand%7Bmargin%2Dleft%3A%2D15px%7D%7D%2Enavbar%2Dtoggle%7Bposition%3Arelative%3Bfloat%3Aright%3Bpadding%3A9px%2010px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A15px%3Bmargin%2Dbottom%3A8px%3Bbackground%2Dcolor%3Atransparent%3Bbackground%2Dimage%3Anone%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Enavbar%2Dtoggle%3Afocus%7Boutline%3A0%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bdisplay%3Ablock%3Bwidth%3A22px%3Bheight%3A2px%3Bborder%2Dradius%3A1px%7D%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%2B%2Eicon%2Dbar%7Bmargin%2Dtop%3A4px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtoggle%7Bdisplay%3Anone%7D%7D%2Enavbar%2Dnav%7Bmargin%3A7%2E5px%20%2D15px%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A10px%3Bpadding%2Dbottom%3A10px%3Bline%2Dheight%3A20px%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%7Bposition%3Astatic%3Bfloat%3Anone%3Bwidth%3Aauto%3Bmargin%2Dtop%3A0%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edropdown%2Dheader%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bpadding%3A5px%2015px%205px%2025px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bline%2Dheight%3A20px%7D%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bbackground%2Dimage%3Anone%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dnav%7Bfloat%3Aleft%3Bmargin%3A0%7D%2Enavbar%2Dnav%3Eli%7Bfloat%3Aleft%7D%2Enavbar%2Dnav%3Eli%3Ea%7Bpadding%2Dtop%3A15px%3Bpadding%2Dbottom%3A15px%7D%7D%2Enavbar%2Dform%7Bpadding%3A10px%2015px%3Bmargin%2Dtop%3A8px%3Bmargin%2Dright%3A%2D15px%3Bmargin%2Dbottom%3A8px%3Bmargin%2Dleft%3A%2D15px%3Bborder%2Dtop%3A1px%20solid%20transparent%3Bborder%2Dbottom%3A1px%20solid%20transparent%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%2C0%201px%200%20rgba%28255%2C255%2C255%2C%2E1%29%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%7Bdisplay%3Ainline%2Dblock%3Bwidth%3Aauto%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Eform%2Dcontrol%2Dstatic%7Bdisplay%3Ainline%2Dblock%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%7Bdisplay%3Ainline%2Dtable%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Eform%2Dcontrol%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Daddon%2C%2Enavbar%2Dform%20%2Einput%2Dgroup%20%2Einput%2Dgroup%2Dbtn%7Bwidth%3Aauto%7D%2Enavbar%2Dform%20%2Einput%2Dgroup%3E%2Eform%2Dcontrol%7Bwidth%3A100%25%7D%2Enavbar%2Dform%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%2C%2Enavbar%2Dform%20%2Eradio%7Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Enavbar%2Dform%20%2Echeckbox%20label%2C%2Enavbar%2Dform%20%2Eradio%20label%7Bpadding%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Echeckbox%20input%5Btype%3Dcheckbox%5D%2C%2Enavbar%2Dform%20%2Eradio%20input%5Btype%3Dradio%5D%7Bposition%3Arelative%3Bmargin%2Dleft%3A0%7D%2Enavbar%2Dform%20%2Ehas%2Dfeedback%20%2Eform%2Dcontrol%2Dfeedback%7Btop%3A0%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dform%20%2Eform%2Dgroup%7Bmargin%2Dbottom%3A5px%7D%2Enavbar%2Dform%20%2Eform%2Dgroup%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dform%7Bwidth%3Aauto%3Bpadding%2Dtop%3A0%3Bpadding%2Dbottom%3A0%3Bmargin%2Dright%3A0%3Bmargin%2Dleft%3A0%3Bborder%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3Anone%3Bbox%2Dshadow%3Anone%7D%7D%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Enavbar%2Dfixed%2Dbottom%20%2Enavbar%2Dnav%3Eli%3E%2Edropdown%2Dmenu%7Bmargin%2Dbottom%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A0%3Bborder%2Dbottom%2Dleft%2Dradius%3A0%7D%2Enavbar%2Dbtn%7Bmargin%2Dtop%3A8px%3Bmargin%2Dbottom%3A8px%7D%2Enavbar%2Dbtn%2Ebtn%2Dsm%7Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Enavbar%2Dbtn%2Ebtn%2Dxs%7Bmargin%2Dtop%3A14px%3Bmargin%2Dbottom%3A14px%7D%2Enavbar%2Dtext%7Bmargin%2Dtop%3A15px%3Bmargin%2Dbottom%3A15px%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dtext%7Bfloat%3Aleft%3Bmargin%2Dright%3A15px%3Bmargin%2Dleft%3A15px%7D%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Enavbar%2Dleft%7Bfloat%3Aleft%21important%7D%2Enavbar%2Dright%7Bfloat%3Aright%21important%3Bmargin%2Dright%3A%2D15px%7D%2Enavbar%2Dright%7E%2Enavbar%2Dright%7Bmargin%2Dright%3A0%7D%7D%2Enavbar%2Ddefault%7Bbackground%2Dcolor%3A%23f8f8f8%3Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%235e5e5e%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtext%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23ddd%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23888%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23333%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23555%3Bbackground%2Dcolor%3A%23e7e7e7%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Ddefault%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23ccc%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%7Bcolor%3A%23777%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23333%7D%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Ddefault%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23ccc%7D%2Enavbar%2Dinverse%7Bbackground%2Dcolor%3A%23222%3Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dbrand%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtext%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%7Bborder%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%3Ahover%7Bbackground%2Dcolor%3A%23333%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dtoggle%20%2Eicon%2Dbar%7Bbackground%2Dcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dcollapse%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dform%7Bborder%2Dcolor%3A%23101010%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%3E%2Eopen%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edropdown%2Dheader%7Bborder%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%20%2Edivider%7Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3Eli%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3Atransparent%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Eactive%3Ea%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23080808%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Afocus%2C%2Enavbar%2Dinverse%20%2Enavbar%2Dnav%20%2Eopen%20%2Edropdown%2Dmenu%3E%2Edisabled%3Ea%3Ahover%7Bcolor%3A%23444%3Bbackground%2Dcolor%3Atransparent%7D%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Enavbar%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%7Bcolor%3A%239d9d9d%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23fff%7D%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Afocus%2C%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%5Bdisabled%5D%3Ahover%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Afocus%2Cfieldset%5Bdisabled%5D%20%2Enavbar%2Dinverse%20%2Ebtn%2Dlink%3Ahover%7Bcolor%3A%23444%7D%2Ebreadcrumb%7Bpadding%3A8px%2015px%3Bmargin%2Dbottom%3A20px%3Blist%2Dstyle%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%7D%2Ebreadcrumb%3Eli%7Bdisplay%3Ainline%2Dblock%7D%2Ebreadcrumb%3Eli%2Bli%3Abefore%7Bpadding%3A0%205px%3Bcolor%3A%23ccc%3Bcontent%3A%22%2F%5C00a0%22%7D%2Ebreadcrumb%3E%2Eactive%7Bcolor%3A%23777%7D%2Epagination%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Bborder%2Dradius%3A4px%7D%2Epagination%3Eli%7Bdisplay%3Ainline%7D%2Epagination%3Eli%3Ea%2C%2Epagination%3Eli%3Espan%7Bposition%3Arelative%3Bfloat%3Aleft%3Bpadding%3A6px%2012px%3Bmargin%2Dleft%3A%2D1px%3Bline%2Dheight%3A1%2E42857143%3Bcolor%3A%23337ab7%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Epagination%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%3Eli%3Afirst%2Dchild%3Espan%7Bmargin%2Dleft%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7D%2Epagination%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%7D%2Epagination%3Eli%3Ea%3Afocus%2C%2Epagination%3Eli%3Ea%3Ahover%2C%2Epagination%3Eli%3Espan%3Afocus%2C%2Epagination%3Eli%3Espan%3Ahover%7Bz%2Dindex%3A3%3Bcolor%3A%2323527c%3Bbackground%2Dcolor%3A%23eee%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%3E%2Eactive%3Ea%2C%2Epagination%3E%2Eactive%3Ea%3Afocus%2C%2Epagination%3E%2Eactive%3Ea%3Ahover%2C%2Epagination%3E%2Eactive%3Espan%2C%2Epagination%3E%2Eactive%3Espan%3Afocus%2C%2Epagination%3E%2Eactive%3Espan%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bcursor%3Adefault%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epagination%3E%2Edisabled%3Ea%2C%2Epagination%3E%2Edisabled%3Ea%3Afocus%2C%2Epagination%3E%2Edisabled%3Ea%3Ahover%2C%2Epagination%3E%2Edisabled%3Espan%2C%2Epagination%3E%2Edisabled%3Espan%3Afocus%2C%2Epagination%3E%2Edisabled%3Espan%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%3Bborder%2Dcolor%3A%23ddd%7D%2Epagination%2Dlg%3Eli%3Ea%2C%2Epagination%2Dlg%3Eli%3Espan%7Bpadding%3A10px%2016px%3Bfont%2Dsize%3A18px%3Bline%2Dheight%3A1%2E3333333%7D%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A6px%3Bborder%2Dbottom%2Dleft%2Dradius%3A6px%7D%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dlg%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A6px%3Bborder%2Dbottom%2Dright%2Dradius%3A6px%7D%2Epagination%2Dsm%3Eli%3Ea%2C%2Epagination%2Dsm%3Eli%3Espan%7Bpadding%3A5px%2010px%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A1%2E5%7D%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Afirst%2Dchild%3Espan%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Ea%2C%2Epagination%2Dsm%3Eli%3Alast%2Dchild%3Espan%7Bborder%2Dtop%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epager%7Bpadding%2Dleft%3A0%3Bmargin%3A20px%200%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Epager%20li%7Bdisplay%3Ainline%7D%2Epager%20li%3Ea%2C%2Epager%20li%3Espan%7Bdisplay%3Ainline%2Dblock%3Bpadding%3A5px%2014px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A15px%7D%2Epager%20li%3Ea%3Afocus%2C%2Epager%20li%3Ea%3Ahover%7Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23eee%7D%2Epager%20%2Enext%3Ea%2C%2Epager%20%2Enext%3Espan%7Bfloat%3Aright%7D%2Epager%20%2Eprevious%3Ea%2C%2Epager%20%2Eprevious%3Espan%7Bfloat%3Aleft%7D%2Epager%20%2Edisabled%3Ea%2C%2Epager%20%2Edisabled%3Ea%3Afocus%2C%2Epager%20%2Edisabled%3Ea%3Ahover%2C%2Epager%20%2Edisabled%3Espan%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23fff%7D%2Elabel%7Bdisplay%3Ainline%3Bpadding%3A%2E2em%20%2E6em%20%2E3em%3Bfont%2Dsize%3A75%25%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Abaseline%3Bborder%2Dradius%3A%2E25em%7Da%2Elabel%3Afocus%2Ca%2Elabel%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elabel%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Elabel%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Elabel%2Ddefault%7Bbackground%2Dcolor%3A%23777%7D%2Elabel%2Ddefault%5Bhref%5D%3Afocus%2C%2Elabel%2Ddefault%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%235e5e5e%7D%2Elabel%2Dprimary%7Bbackground%2Dcolor%3A%23337ab7%7D%2Elabel%2Dprimary%5Bhref%5D%3Afocus%2C%2Elabel%2Dprimary%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23286090%7D%2Elabel%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Elabel%2Dsuccess%5Bhref%5D%3Afocus%2C%2Elabel%2Dsuccess%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23449d44%7D%2Elabel%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Elabel%2Dinfo%5Bhref%5D%3Afocus%2C%2Elabel%2Dinfo%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%2331b0d5%7D%2Elabel%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Elabel%2Dwarning%5Bhref%5D%3Afocus%2C%2Elabel%2Dwarning%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23ec971f%7D%2Elabel%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Elabel%2Ddanger%5Bhref%5D%3Afocus%2C%2Elabel%2Ddanger%5Bhref%5D%3Ahover%7Bbackground%2Dcolor%3A%23c9302c%7D%2Ebadge%7Bdisplay%3Ainline%2Dblock%3Bmin%2Dwidth%3A10px%3Bpadding%3A3px%207px%3Bfont%2Dsize%3A12px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bwhite%2Dspace%3Anowrap%3Bvertical%2Dalign%3Amiddle%3Bbackground%2Dcolor%3A%23777%3Bborder%2Dradius%3A10px%7D%2Ebadge%3Aempty%7Bdisplay%3Anone%7D%2Ebtn%20%2Ebadge%7Bposition%3Arelative%3Btop%3A%2D1px%7D%2Ebtn%2Dgroup%2Dxs%3E%2Ebtn%20%2Ebadge%2C%2Ebtn%2Dxs%20%2Ebadge%7Btop%3A0%3Bpadding%3A1px%205px%7Da%2Ebadge%3Afocus%2Ca%2Ebadge%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%7D%2Elist%2Dgroup%2Ditem%2Eactive%3E%2Ebadge%2C%2Enav%2Dpills%3E%2Eactive%3Ea%3E%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%7Bfloat%3Aright%7D%2Elist%2Dgroup%2Ditem%3E%2Ebadge%2B%2Ebadge%7Bmargin%2Dright%3A5px%7D%2Enav%2Dpills%3Eli%3Ea%3E%2Ebadge%7Bmargin%2Dleft%3A3px%7D%2Ejumbotron%7Bpadding%2Dtop%3A30px%3Bpadding%2Dbottom%3A30px%3Bmargin%2Dbottom%3A30px%3Bcolor%3Ainherit%3Bbackground%2Dcolor%3A%23eee%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bcolor%3Ainherit%7D%2Ejumbotron%20p%7Bmargin%2Dbottom%3A15px%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A200%7D%2Ejumbotron%3Ehr%7Bborder%2Dtop%2Dcolor%3A%23d5d5d5%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bborder%2Dradius%3A6px%7D%2Ejumbotron%20%2Econtainer%7Bmax%2Dwidth%3A100%25%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ejumbotron%7Bpadding%2Dtop%3A48px%3Bpadding%2Dbottom%3A48px%7D%2Econtainer%20%2Ejumbotron%2C%2Econtainer%2Dfluid%20%2Ejumbotron%7Bpadding%2Dright%3A60px%3Bpadding%2Dleft%3A60px%7D%2Ejumbotron%20%2Eh1%2C%2Ejumbotron%20h1%7Bfont%2Dsize%3A63px%7D%7D%2Ethumbnail%7Bdisplay%3Ablock%3Bpadding%3A4px%3Bmargin%2Dbottom%3A20px%3Bline%2Dheight%3A1%2E42857143%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3Aborder%20%2E2s%20ease%2Din%2Dout%3Btransition%3Aborder%20%2E2s%20ease%2Din%2Dout%7D%2Ethumbnail%20a%3Eimg%2C%2Ethumbnail%3Eimg%7Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7Da%2Ethumbnail%2Eactive%2Ca%2Ethumbnail%3Afocus%2Ca%2Ethumbnail%3Ahover%7Bborder%2Dcolor%3A%23337ab7%7D%2Ethumbnail%20%2Ecaption%7Bpadding%3A9px%3Bcolor%3A%23333%7D%2Ealert%7Bpadding%3A15px%3Bmargin%2Dbottom%3A20px%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%7D%2Ealert%20h4%7Bmargin%2Dtop%3A0%3Bcolor%3Ainherit%7D%2Ealert%20%2Ealert%2Dlink%7Bfont%2Dweight%3A700%7D%2Ealert%3Ep%2C%2Ealert%3Eul%7Bmargin%2Dbottom%3A0%7D%2Ealert%3Ep%2Bp%7Bmargin%2Dtop%3A5px%7D%2Ealert%2Ddismissable%2C%2Ealert%2Ddismissible%7Bpadding%2Dright%3A35px%7D%2Ealert%2Ddismissable%20%2Eclose%2C%2Ealert%2Ddismissible%20%2Eclose%7Bposition%3Arelative%3Btop%3A%2D2px%3Bright%3A%2D21px%3Bcolor%3Ainherit%7D%2Ealert%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Ealert%2Dsuccess%20hr%7Bborder%2Dtop%2Dcolor%3A%23c9e2b3%7D%2Ealert%2Dsuccess%20%2Ealert%2Dlink%7Bcolor%3A%232b542c%7D%2Ealert%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Ealert%2Dinfo%20hr%7Bborder%2Dtop%2Dcolor%3A%23a6e1ec%7D%2Ealert%2Dinfo%20%2Ealert%2Dlink%7Bcolor%3A%23245269%7D%2Ealert%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Ealert%2Dwarning%20hr%7Bborder%2Dtop%2Dcolor%3A%23f7e1b5%7D%2Ealert%2Dwarning%20%2Ealert%2Dlink%7Bcolor%3A%2366512c%7D%2Ealert%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Ealert%2Ddanger%20hr%7Bborder%2Dtop%2Dcolor%3A%23e4b9c0%7D%2Ealert%2Ddanger%20%2Ealert%2Dlink%7Bcolor%3A%23843534%7D%40%2Dwebkit%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40%2Do%2Dkeyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%40keyframes%20progress%2Dbar%2Dstripes%7Bfrom%7Bbackground%2Dposition%3A40px%200%7Dto%7Bbackground%2Dposition%3A0%200%7D%7D%2Eprogress%7Bheight%3A20px%3Bmargin%2Dbottom%3A20px%3Boverflow%3Ahidden%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%3Bbox%2Dshadow%3Ainset%200%201px%202px%20rgba%280%2C0%2C0%2C%2E1%29%7D%2Eprogress%2Dbar%7Bfloat%3Aleft%3Bwidth%3A0%3Bheight%3A100%25%3Bfont%2Dsize%3A12px%3Bline%2Dheight%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23337ab7%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3Bbox%2Dshadow%3Ainset%200%20%2D1px%200%20rgba%280%2C0%2C0%2C%2E15%29%3B%2Dwebkit%2Dtransition%3Awidth%20%2E6s%20ease%3B%2Do%2Dtransition%3Awidth%20%2E6s%20ease%3Btransition%3Awidth%20%2E6s%20ease%7D%2Eprogress%2Dbar%2Dstriped%2C%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3B%2Dwebkit%2Dbackground%2Dsize%3A40px%2040px%3Bbackground%2Dsize%3A40px%2040px%7D%2Eprogress%2Dbar%2Eactive%2C%2Eprogress%2Eactive%20%2Eprogress%2Dbar%7B%2Dwebkit%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3B%2Do%2Danimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%3Banimation%3Aprogress%2Dbar%2Dstripes%202s%20linear%20infinite%7D%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dcolor%3A%235cb85c%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dsuccess%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dcolor%3A%235bc0de%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dinfo%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dcolor%3A%23f0ad4e%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Dwarning%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dcolor%3A%23d9534f%7D%2Eprogress%2Dstriped%20%2Eprogress%2Dbar%2Ddanger%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%3Bbackground%2Dimage%3Alinear%2Dgradient%2845deg%2Crgba%28255%2C255%2C255%2C%2E15%29%2025%25%2Ctransparent%2025%25%2Ctransparent%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2050%25%2Crgba%28255%2C255%2C255%2C%2E15%29%2075%25%2Ctransparent%2075%25%2Ctransparent%29%7D%2Emedia%7Bmargin%2Dtop%3A15px%7D%2Emedia%3Afirst%2Dchild%7Bmargin%2Dtop%3A0%7D%2Emedia%2C%2Emedia%2Dbody%7Boverflow%3Ahidden%3Bzoom%3A1%7D%2Emedia%2Dbody%7Bwidth%3A10000px%7D%2Emedia%2Dobject%7Bdisplay%3Ablock%7D%2Emedia%2Dobject%2Eimg%2Dthumbnail%7Bmax%2Dwidth%3Anone%7D%2Emedia%2Dright%2C%2Emedia%3E%2Epull%2Dright%7Bpadding%2Dleft%3A10px%7D%2Emedia%2Dleft%2C%2Emedia%3E%2Epull%2Dleft%7Bpadding%2Dright%3A10px%7D%2Emedia%2Dbody%2C%2Emedia%2Dleft%2C%2Emedia%2Dright%7Bdisplay%3Atable%2Dcell%3Bvertical%2Dalign%3Atop%7D%2Emedia%2Dmiddle%7Bvertical%2Dalign%3Amiddle%7D%2Emedia%2Dbottom%7Bvertical%2Dalign%3Abottom%7D%2Emedia%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Emedia%2Dlist%7Bpadding%2Dleft%3A0%3Blist%2Dstyle%3Anone%7D%2Elist%2Dgroup%7Bpadding%2Dleft%3A0%3Bmargin%2Dbottom%3A20px%7D%2Elist%2Dgroup%2Ditem%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bpadding%3A10px%2015px%3Bmargin%2Dbottom%3A%2D1px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20%23ddd%7D%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A4px%3Bborder%2Dtop%2Dright%2Dradius%3A4px%7D%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bmargin%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A4px%3Bborder%2Dbottom%2Dleft%2Dradius%3A4px%7Da%2Elist%2Dgroup%2Ditem%2Cbutton%2Elist%2Dgroup%2Ditem%7Bcolor%3A%23555%7Da%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3A%23333%7Da%2Elist%2Dgroup%2Ditem%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%3Ahover%7Bcolor%3A%23555%3Btext%2Ddecoration%3Anone%3Bbackground%2Dcolor%3A%23f5f5f5%7Dbutton%2Elist%2Dgroup%2Ditem%7Bwidth%3A100%25%3Btext%2Dalign%3Aleft%7D%2Elist%2Dgroup%2Ditem%2Edisabled%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%7Bcolor%3A%23777%3Bcursor%3Anot%2Dallowed%3Bbackground%2Dcolor%3A%23eee%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Edisabled%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Edisabled%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23777%7D%2Elist%2Dgroup%2Ditem%2Eactive%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%7Bz%2Dindex%3A2%3Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3E%2Esmall%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dheading%3Esmall%7Bcolor%3Ainherit%7D%2Elist%2Dgroup%2Ditem%2Eactive%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Afocus%20%2Elist%2Dgroup%2Ditem%2Dtext%2C%2Elist%2Dgroup%2Ditem%2Eactive%3Ahover%20%2Elist%2Dgroup%2Ditem%2Dtext%7Bcolor%3A%23c7ddef%7D%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%7Bcolor%3A%233c763d%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%3Ahover%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23d0e9c6%7Da%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dsuccess%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%233c763d%3Bborder%2Dcolor%3A%233c763d%7D%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%7Bcolor%3A%2331708f%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%3Ahover%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23c4e3f3%7Da%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dinfo%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%2331708f%3Bborder%2Dcolor%3A%2331708f%7D%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%7Bcolor%3A%238a6d3b%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%3Ahover%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23faf2cc%7Da%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Dwarning%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%238a6d3b%3Bborder%2Dcolor%3A%238a6d3b%7D%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%7Bcolor%3A%23a94442%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%20%2Elist%2Dgroup%2Ditem%2Dheading%7Bcolor%3Ainherit%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%3Ahover%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23ebcccc%7Da%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Ca%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Afocus%2Cbutton%2Elist%2Dgroup%2Ditem%2Ddanger%2Eactive%3Ahover%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23a94442%3Bborder%2Dcolor%3A%23a94442%7D%2Elist%2Dgroup%2Ditem%2Dheading%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A5px%7D%2Elist%2Dgroup%2Ditem%2Dtext%7Bmargin%2Dbottom%3A0%3Bline%2Dheight%3A1%2E3%7D%2Epanel%7Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23fff%3Bborder%3A1px%20solid%20transparent%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3A0%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Epanel%2Dbody%7Bpadding%3A15px%7D%2Epanel%2Dheading%7Bpadding%3A10px%2015px%3Bborder%2Dbottom%3A1px%20solid%20transparent%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%2Dheading%3E%2Edropdown%20%2Edropdown%2Dtoggle%7Bcolor%3Ainherit%7D%2Epanel%2Dtitle%7Bmargin%2Dtop%3A0%3Bmargin%2Dbottom%3A0%3Bfont%2Dsize%3A16px%3Bcolor%3Ainherit%7D%2Epanel%2Dtitle%3E%2Esmall%2C%2Epanel%2Dtitle%3E%2Esmall%3Ea%2C%2Epanel%2Dtitle%3Ea%2C%2Epanel%2Dtitle%3Esmall%2C%2Epanel%2Dtitle%3Esmall%3Ea%7Bcolor%3Ainherit%7D%2Epanel%2Dfooter%7Bpadding%3A10px%2015px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dtop%3A1px%20solid%20%23ddd%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%7Bborder%2Dwidth%3A1px%200%3Bborder%2Dradius%3A0%7D%2Epanel%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Afirst%2Dchild%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%3A0%3Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%2C%2Epanel%3E%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%3Alast%2Dchild%20%2Elist%2Dgroup%2Ditem%3Alast%2Dchild%7Bborder%2Dbottom%3A0%3Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A0%3Bborder%2Dtop%2Dright%2Dradius%3A0%7D%2Epanel%2Dheading%2B%2Elist%2Dgroup%20%2Elist%2Dgroup%2Ditem%3Afirst%2Dchild%7Bborder%2Dtop%2Dwidth%3A0%7D%2Elist%2Dgroup%2B%2Epanel%2Dfooter%7Bborder%2Dtop%2Dwidth%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%2C%2Epanel%3E%2Etable%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%7Bmargin%2Dbottom%3A0%7D%2Epanel%3E%2Epanel%2Dcollapse%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%20caption%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%20caption%7Bpadding%2Dright%3A15px%3Bpadding%2Dleft%3A15px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%3Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dtop%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Afirst%2Dchild%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Afirst%2Dchild%3Ethead%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dtop%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%3Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Afirst%2Dchild%7Bborder%2Dbottom%2Dleft%2Dradius%3A3px%7D%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3Alast%2Dchild%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etbody%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20td%3Alast%2Dchild%2C%2Epanel%3E%2Etable%3Alast%2Dchild%3Etfoot%3Alast%2Dchild%3Etr%3Alast%2Dchild%20th%3Alast%2Dchild%7Bborder%2Dbottom%2Dright%2Dradius%3A3px%7D%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2C%2Epanel%3E%2Epanel%2Dbody%2B%2Etable%2Dresponsive%2C%2Epanel%3E%2Etable%2B%2Epanel%2Dbody%2C%2Epanel%3E%2Etable%2Dresponsive%2B%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20td%2C%2Epanel%3E%2Etable%3Etbody%3Afirst%2Dchild%3Etr%3Afirst%2Dchild%20th%7Bborder%2Dtop%3A0%7D%2Epanel%3E%2Etable%2Dbordered%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%7Bborder%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Afirst%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Afirst%2Dchild%7Bborder%2Dleft%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Eth%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Etd%3Alast%2Dchild%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Eth%3Alast%2Dchild%7Bborder%2Dright%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Afirst%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Ethead%3Etr%3Afirst%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etbody%3Etr%3Alast%2Dchild%3Eth%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Etd%2C%2Epanel%3E%2Etable%2Dresponsive%3E%2Etable%2Dbordered%3Etfoot%3Etr%3Alast%2Dchild%3Eth%7Bborder%2Dbottom%3A0%7D%2Epanel%3E%2Etable%2Dresponsive%7Bmargin%2Dbottom%3A0%3Bborder%3A0%7D%2Epanel%2Dgroup%7Bmargin%2Dbottom%3A20px%7D%2Epanel%2Dgroup%20%2Epanel%7Bmargin%2Dbottom%3A0%3Bborder%2Dradius%3A4px%7D%2Epanel%2Dgroup%20%2Epanel%2B%2Epanel%7Bmargin%2Dtop%3A5px%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%7Bborder%2Dbottom%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Elist%2Dgroup%2C%2Epanel%2Dgroup%20%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%3A1px%20solid%20%23ddd%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%7Bborder%2Dtop%3A0%7D%2Epanel%2Dgroup%20%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%20%2Epanel%2Dbody%7Bborder%2Dbottom%3A1px%20solid%20%23ddd%7D%2Epanel%2Ddefault%7Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%7Bcolor%3A%23333%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ddd%7D%2Epanel%2Ddefault%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f5f5f5%3Bbackground%2Dcolor%3A%23333%7D%2Epanel%2Ddefault%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ddd%7D%2Epanel%2Dprimary%7Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%7Bcolor%3A%23fff%3Bbackground%2Dcolor%3A%23337ab7%3Bborder%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23337ab7%7D%2Epanel%2Dprimary%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23337ab7%3Bbackground%2Dcolor%3A%23fff%7D%2Epanel%2Dprimary%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23337ab7%7D%2Epanel%2Dsuccess%7Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%7Bcolor%3A%233c763d%3Bbackground%2Dcolor%3A%23dff0d8%3Bborder%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23dff0d8%3Bbackground%2Dcolor%3A%233c763d%7D%2Epanel%2Dsuccess%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23d6e9c6%7D%2Epanel%2Dinfo%7Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%7Bcolor%3A%2331708f%3Bbackground%2Dcolor%3A%23d9edf7%3Bborder%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dinfo%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23d9edf7%3Bbackground%2Dcolor%3A%2331708f%7D%2Epanel%2Dinfo%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23bce8f1%7D%2Epanel%2Dwarning%7Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%7Bcolor%3A%238a6d3b%3Bbackground%2Dcolor%3A%23fcf8e3%3Bborder%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23faebcc%7D%2Epanel%2Dwarning%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23fcf8e3%3Bbackground%2Dcolor%3A%238a6d3b%7D%2Epanel%2Dwarning%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23faebcc%7D%2Epanel%2Ddanger%7Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%7Bcolor%3A%23a94442%3Bbackground%2Dcolor%3A%23f2dede%3Bborder%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dtop%2Dcolor%3A%23ebccd1%7D%2Epanel%2Ddanger%3E%2Epanel%2Dheading%20%2Ebadge%7Bcolor%3A%23f2dede%3Bbackground%2Dcolor%3A%23a94442%7D%2Epanel%2Ddanger%3E%2Epanel%2Dfooter%2B%2Epanel%2Dcollapse%3E%2Epanel%2Dbody%7Bborder%2Dbottom%2Dcolor%3A%23ebccd1%7D%2Eembed%2Dresponsive%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bheight%3A0%3Bpadding%3A0%3Boverflow%3Ahidden%7D%2Eembed%2Dresponsive%20%2Eembed%2Dresponsive%2Ditem%2C%2Eembed%2Dresponsive%20embed%2C%2Eembed%2Dresponsive%20iframe%2C%2Eembed%2Dresponsive%20object%2C%2Eembed%2Dresponsive%20video%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A100%25%3Bheight%3A100%25%3Bborder%3A0%7D%2Eembed%2Dresponsive%2D16by9%7Bpadding%2Dbottom%3A56%2E25%25%7D%2Eembed%2Dresponsive%2D4by3%7Bpadding%2Dbottom%3A75%25%7D%2Ewell%7Bmin%2Dheight%3A20px%3Bpadding%3A19px%3Bmargin%2Dbottom%3A20px%3Bbackground%2Dcolor%3A%23f5f5f5%3Bborder%3A1px%20solid%20%23e3e3e3%3Bborder%2Dradius%3A4px%3B%2Dwebkit%2Dbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%3Bbox%2Dshadow%3Ainset%200%201px%201px%20rgba%280%2C0%2C0%2C%2E05%29%7D%2Ewell%20blockquote%7Bborder%2Dcolor%3A%23ddd%3Bborder%2Dcolor%3Argba%280%2C0%2C0%2C%2E15%29%7D%2Ewell%2Dlg%7Bpadding%3A24px%3Bborder%2Dradius%3A6px%7D%2Ewell%2Dsm%7Bpadding%3A9px%3Bborder%2Dradius%3A3px%7D%2Eclose%7Bfloat%3Aright%3Bfont%2Dsize%3A21px%3Bfont%2Dweight%3A700%3Bline%2Dheight%3A1%3Bcolor%3A%23000%3Btext%2Dshadow%3A0%201px%200%20%23fff%3Bfilter%3Aalpha%28opacity%3D20%29%3Bopacity%3A%2E2%7D%2Eclose%3Afocus%2C%2Eclose%3Ahover%7Bcolor%3A%23000%3Btext%2Ddecoration%3Anone%3Bcursor%3Apointer%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7Dbutton%2Eclose%7B%2Dwebkit%2Dappearance%3Anone%3Bpadding%3A0%3Bcursor%3Apointer%3Bbackground%3A0%200%3Bborder%3A0%7D%2Emodal%2Dopen%7Boverflow%3Ahidden%7D%2Emodal%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1050%3Bdisplay%3Anone%3Boverflow%3Ahidden%3B%2Dwebkit%2Doverflow%2Dscrolling%3Atouch%3Boutline%3A0%7D%2Emodal%2Efade%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E3s%20ease%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E3s%20ease%2Dout%3Btransition%3Atransform%20%2E3s%20ease%2Dout%3B%2Dwebkit%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Dms%2Dtransform%3Atranslate%280%2C%2D25%25%29%3B%2Do%2Dtransform%3Atranslate%280%2C%2D25%25%29%3Btransform%3Atranslate%280%2C%2D25%25%29%7D%2Emodal%2Ein%20%2Emodal%2Ddialog%7B%2Dwebkit%2Dtransform%3Atranslate%280%2C0%29%3B%2Dms%2Dtransform%3Atranslate%280%2C0%29%3B%2Do%2Dtransform%3Atranslate%280%2C0%29%3Btransform%3Atranslate%280%2C0%29%7D%2Emodal%2Dopen%20%2Emodal%7Boverflow%2Dx%3Ahidden%3Boverflow%2Dy%3Aauto%7D%2Emodal%2Ddialog%7Bposition%3Arelative%3Bwidth%3Aauto%3Bmargin%3A10px%7D%2Emodal%2Dcontent%7Bposition%3Arelative%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23999%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3Boutline%3A0%3B%2Dwebkit%2Dbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%203px%209px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dbackdrop%7Bposition%3Afixed%3Btop%3A0%3Bright%3A0%3Bbottom%3A0%3Bleft%3A0%3Bz%2Dindex%3A1040%3Bbackground%2Dcolor%3A%23000%7D%2Emodal%2Dbackdrop%2Efade%7Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%7D%2Emodal%2Dbackdrop%2Ein%7Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Emodal%2Dheader%7Bmin%2Dheight%3A16%2E43px%3Bpadding%3A15px%3Bborder%2Dbottom%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dheader%20%2Eclose%7Bmargin%2Dtop%3A%2D2px%7D%2Emodal%2Dtitle%7Bmargin%3A0%3Bline%2Dheight%3A1%2E42857143%7D%2Emodal%2Dbody%7Bposition%3Arelative%3Bpadding%3A15px%7D%2Emodal%2Dfooter%7Bpadding%3A15px%3Btext%2Dalign%3Aright%3Bborder%2Dtop%3A1px%20solid%20%23e5e5e5%7D%2Emodal%2Dfooter%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dbottom%3A0%3Bmargin%2Dleft%3A5px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dgroup%20%2Ebtn%2B%2Ebtn%7Bmargin%2Dleft%3A%2D1px%7D%2Emodal%2Dfooter%20%2Ebtn%2Dblock%2B%2Ebtn%2Dblock%7Bmargin%2Dleft%3A0%7D%2Emodal%2Dscrollbar%2Dmeasure%7Bposition%3Aabsolute%3Btop%3A%2D9999px%3Bwidth%3A50px%3Bheight%3A50px%3Boverflow%3Ascroll%7D%40media%20%28min%2Dwidth%3A768px%29%7B%2Emodal%2Ddialog%7Bwidth%3A600px%3Bmargin%3A30px%20auto%7D%2Emodal%2Dcontent%7B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%3Bbox%2Dshadow%3A0%205px%2015px%20rgba%280%2C0%2C0%2C%2E5%29%7D%2Emodal%2Dsm%7Bwidth%3A300px%7D%7D%40media%20%28min%2Dwidth%3A992px%29%7B%2Emodal%2Dlg%7Bwidth%3A900px%7D%7D%2Etooltip%7Bposition%3Aabsolute%3Bz%2Dindex%3A1070%3Bdisplay%3Ablock%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A12px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bfilter%3Aalpha%28opacity%3D0%29%3Bopacity%3A0%3Bline%2Dbreak%3Aauto%7D%2Etooltip%2Ein%7Bfilter%3Aalpha%28opacity%3D90%29%3Bopacity%3A%2E9%7D%2Etooltip%2Etop%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A%2D3px%7D%2Etooltip%2Eright%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A3px%7D%2Etooltip%2Ebottom%7Bpadding%3A5px%200%3Bmargin%2Dtop%3A3px%7D%2Etooltip%2Eleft%7Bpadding%3A0%205px%3Bmargin%2Dleft%3A%2D3px%7D%2Etooltip%2Dinner%7Bmax%2Dwidth%3A200px%3Bpadding%3A3px%208px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Bbackground%2Dcolor%3A%23000%3Bborder%2Dradius%3A4px%7D%2Etooltip%2Darrow%7Bposition%3Aabsolute%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Etooltip%2Etop%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dleft%20%2Etooltip%2Darrow%7Bright%3A5px%3Bbottom%3A0%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Etop%2Dright%20%2Etooltip%2Darrow%7Bbottom%3A0%3Bleft%3A5px%3Bmargin%2Dbottom%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%200%3Bborder%2Dtop%2Dcolor%3A%23000%7D%2Etooltip%2Eright%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bleft%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%205px%205px%200%3Bborder%2Dright%2Dcolor%3A%23000%7D%2Etooltip%2Eleft%20%2Etooltip%2Darrow%7Btop%3A50%25%3Bright%3A0%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A5px%200%205px%205px%3Bborder%2Dleft%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dleft%20%2Etooltip%2Darrow%7Btop%3A0%3Bright%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Etooltip%2Ebottom%2Dright%20%2Etooltip%2Darrow%7Btop%3A0%3Bleft%3A5px%3Bmargin%2Dtop%3A%2D5px%3Bborder%2Dwidth%3A0%205px%205px%3Bborder%2Dbottom%2Dcolor%3A%23000%7D%2Epopover%7Bposition%3Aabsolute%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A1060%3Bdisplay%3Anone%3Bmax%2Dwidth%3A276px%3Bpadding%3A1px%3Bfont%2Dfamily%3A%22Helvetica%20Neue%22%2CHelvetica%2CArial%2Csans%2Dserif%3Bfont%2Dsize%3A14px%3Bfont%2Dstyle%3Anormal%3Bfont%2Dweight%3A400%3Bline%2Dheight%3A1%2E42857143%3Btext%2Dalign%3Aleft%3Btext%2Dalign%3Astart%3Btext%2Ddecoration%3Anone%3Btext%2Dshadow%3Anone%3Btext%2Dtransform%3Anone%3Bletter%2Dspacing%3Anormal%3Bword%2Dbreak%3Anormal%3Bword%2Dspacing%3Anormal%3Bword%2Dwrap%3Anormal%3Bwhite%2Dspace%3Anormal%3Bbackground%2Dcolor%3A%23fff%3B%2Dwebkit%2Dbackground%2Dclip%3Apadding%2Dbox%3Bbackground%2Dclip%3Apadding%2Dbox%3Bborder%3A1px%20solid%20%23ccc%3Bborder%3A1px%20solid%20rgba%280%2C0%2C0%2C%2E2%29%3Bborder%2Dradius%3A6px%3B%2Dwebkit%2Dbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bbox%2Dshadow%3A0%205px%2010px%20rgba%280%2C0%2C0%2C%2E2%29%3Bline%2Dbreak%3Aauto%7D%2Epopover%2Etop%7Bmargin%2Dtop%3A%2D10px%7D%2Epopover%2Eright%7Bmargin%2Dleft%3A10px%7D%2Epopover%2Ebottom%7Bmargin%2Dtop%3A10px%7D%2Epopover%2Eleft%7Bmargin%2Dleft%3A%2D10px%7D%2Epopover%2Dtitle%7Bpadding%3A8px%2014px%3Bmargin%3A0%3Bfont%2Dsize%3A14px%3Bbackground%2Dcolor%3A%23f7f7f7%3Bborder%2Dbottom%3A1px%20solid%20%23ebebeb%3Bborder%2Dradius%3A5px%205px%200%200%7D%2Epopover%2Dcontent%7Bpadding%3A9px%2014px%7D%2Epopover%3E%2Earrow%2C%2Epopover%3E%2Earrow%3Aafter%7Bposition%3Aabsolute%3Bdisplay%3Ablock%3Bwidth%3A0%3Bheight%3A0%3Bborder%2Dcolor%3Atransparent%3Bborder%2Dstyle%3Asolid%7D%2Epopover%3E%2Earrow%7Bborder%2Dwidth%3A11px%7D%2Epopover%3E%2Earrow%3Aafter%7Bcontent%3A%22%22%3Bborder%2Dwidth%3A10px%7D%2Epopover%2Etop%3E%2Earrow%7Bbottom%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dcolor%3A%23999%3Bborder%2Dtop%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Etop%3E%2Earrow%3Aafter%7Bbottom%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dcolor%3A%23fff%3Bborder%2Dbottom%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%7Btop%3A50%25%3Bleft%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dcolor%3A%23999%3Bborder%2Dright%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Eright%3E%2Earrow%3Aafter%7Bbottom%3A%2D10px%3Bleft%3A1px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dcolor%3A%23fff%3Bborder%2Dleft%2Dwidth%3A0%7D%2Epopover%2Ebottom%3E%2Earrow%7Btop%3A%2D11px%3Bleft%3A50%25%3Bmargin%2Dleft%3A%2D11px%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23999%3Bborder%2Dbottom%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Ebottom%3E%2Earrow%3Aafter%7Btop%3A1px%3Bmargin%2Dleft%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dtop%2Dwidth%3A0%3Bborder%2Dbottom%2Dcolor%3A%23fff%7D%2Epopover%2Eleft%3E%2Earrow%7Btop%3A50%25%3Bright%3A%2D11px%3Bmargin%2Dtop%3A%2D11px%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23999%3Bborder%2Dleft%2Dcolor%3Argba%280%2C0%2C0%2C%2E25%29%7D%2Epopover%2Eleft%3E%2Earrow%3Aafter%7Bright%3A1px%3Bbottom%3A%2D10px%3Bcontent%3A%22%20%22%3Bborder%2Dright%2Dwidth%3A0%3Bborder%2Dleft%2Dcolor%3A%23fff%7D%2Ecarousel%7Bposition%3Arelative%7D%2Ecarousel%2Dinner%7Bposition%3Arelative%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%2Ecarousel%2Dinner%3E%2Eitem%7Bposition%3Arelative%3Bdisplay%3Anone%3B%2Dwebkit%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3B%2Do%2Dtransition%3A%2E6s%20ease%2Din%2Dout%20left%3Btransition%3A%2E6s%20ease%2Din%2Dout%20left%7D%2Ecarousel%2Dinner%3E%2Eitem%3Ea%3Eimg%2C%2Ecarousel%2Dinner%3E%2Eitem%3Eimg%7Bline%2Dheight%3A1%7D%40media%20all%20and%20%28transform%2D3d%29%2C%28%2Dwebkit%2Dtransform%2D3d%29%7B%2Ecarousel%2Dinner%3E%2Eitem%7B%2Dwebkit%2Dtransition%3A%2Dwebkit%2Dtransform%20%2E6s%20ease%2Din%2Dout%3B%2Do%2Dtransition%3A%2Do%2Dtransform%20%2E6s%20ease%2Din%2Dout%3Btransition%3Atransform%20%2E6s%20ease%2Din%2Dout%3B%2Dwebkit%2Dbackface%2Dvisibility%3Ahidden%3Bbackface%2Dvisibility%3Ahidden%3B%2Dwebkit%2Dperspective%3A1000px%3Bperspective%3A1000px%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eright%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%3Btransform%3Atranslate3d%28%2D100%25%2C0%2C0%29%7D%2Ecarousel%2Dinner%3E%2Eitem%2Eactive%2C%2Ecarousel%2Dinner%3E%2Eitem%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eitem%2Eprev%2Eright%7Bleft%3A0%3B%2Dwebkit%2Dtransform%3Atranslate3d%280%2C0%2C0%29%3Btransform%3Atranslate3d%280%2C0%2C0%29%7D%7D%2Ecarousel%2Dinner%3E%2Eactive%2C%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bdisplay%3Ablock%7D%2Ecarousel%2Dinner%3E%2Eactive%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Enext%2C%2Ecarousel%2Dinner%3E%2Eprev%7Bposition%3Aabsolute%3Btop%3A0%3Bwidth%3A100%25%7D%2Ecarousel%2Dinner%3E%2Enext%7Bleft%3A100%25%7D%2Ecarousel%2Dinner%3E%2Eprev%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Enext%2Eleft%2C%2Ecarousel%2Dinner%3E%2Eprev%2Eright%7Bleft%3A0%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eleft%7Bleft%3A%2D100%25%7D%2Ecarousel%2Dinner%3E%2Eactive%2Eright%7Bleft%3A100%25%7D%2Ecarousel%2Dcontrol%7Bposition%3Aabsolute%3Btop%3A0%3Bbottom%3A0%3Bleft%3A0%3Bwidth%3A15%25%3Bfont%2Dsize%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%3Bfilter%3Aalpha%28opacity%3D50%29%3Bopacity%3A%2E5%7D%2Ecarousel%2Dcontrol%2Eleft%7Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E5%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E0001%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E5%29%200%2Crgba%280%2C0%2C0%2C%2E0001%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2380000000%27%2C%20endColorstr%3D%27%2300000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%2Eright%7Bright%3A0%3Bleft%3Aauto%3Bbackground%2Dimage%3A%2Dwebkit%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Do%2Dlinear%2Dgradient%28left%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bbackground%2Dimage%3A%2Dwebkit%2Dgradient%28linear%2Cleft%20top%2Cright%20top%2Cfrom%28rgba%280%2C0%2C0%2C%2E0001%29%29%2Cto%28rgba%280%2C0%2C0%2C%2E5%29%29%29%3Bbackground%2Dimage%3Alinear%2Dgradient%28to%20right%2Crgba%280%2C0%2C0%2C%2E0001%29%200%2Crgba%280%2C0%2C0%2C%2E5%29%20100%25%29%3Bfilter%3Aprogid%3ADXImageTransform%2EMicrosoft%2Egradient%28startColorstr%3D%27%2300000000%27%2C%20endColorstr%3D%27%2380000000%27%2C%20GradientType%3D1%29%3Bbackground%2Drepeat%3Arepeat%2Dx%7D%2Ecarousel%2Dcontrol%3Afocus%2C%2Ecarousel%2Dcontrol%3Ahover%7Bcolor%3A%23fff%3Btext%2Ddecoration%3Anone%3Bfilter%3Aalpha%28opacity%3D90%29%3Boutline%3A0%3Bopacity%3A%2E9%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bposition%3Aabsolute%3Btop%3A50%25%3Bz%2Dindex%3A5%3Bdisplay%3Ainline%2Dblock%3Bmargin%2Dtop%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bleft%3A50%25%3Bmargin%2Dleft%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bright%3A50%25%3Bmargin%2Dright%3A%2D10px%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A20px%3Bheight%3A20px%3Bfont%2Dfamily%3Aserif%3Bline%2Dheight%3A1%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%3Abefore%7Bcontent%3A%27%5C2039%27%7D%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%3Abefore%7Bcontent%3A%27%5C203a%27%7D%2Ecarousel%2Dindicators%7Bposition%3Aabsolute%3Bbottom%3A10px%3Bleft%3A50%25%3Bz%2Dindex%3A15%3Bwidth%3A60%25%3Bpadding%2Dleft%3A0%3Bmargin%2Dleft%3A%2D30%25%3Btext%2Dalign%3Acenter%3Blist%2Dstyle%3Anone%7D%2Ecarousel%2Dindicators%20li%7Bdisplay%3Ainline%2Dblock%3Bwidth%3A10px%3Bheight%3A10px%3Bmargin%3A1px%3Btext%2Dindent%3A%2D999px%3Bcursor%3Apointer%3Bbackground%2Dcolor%3A%23000%5C9%3Bbackground%2Dcolor%3Argba%280%2C0%2C0%2C0%29%3Bborder%3A1px%20solid%20%23fff%3Bborder%2Dradius%3A10px%7D%2Ecarousel%2Dindicators%20%2Eactive%7Bwidth%3A12px%3Bheight%3A12px%3Bmargin%3A0%3Bbackground%2Dcolor%3A%23fff%7D%2Ecarousel%2Dcaption%7Bposition%3Aabsolute%3Bright%3A15%25%3Bbottom%3A20px%3Bleft%3A15%25%3Bz%2Dindex%3A10%3Bpadding%2Dtop%3A20px%3Bpadding%2Dbottom%3A20px%3Bcolor%3A%23fff%3Btext%2Dalign%3Acenter%3Btext%2Dshadow%3A0%201px%202px%20rgba%280%2C0%2C0%2C%2E6%29%7D%2Ecarousel%2Dcaption%20%2Ebtn%7Btext%2Dshadow%3Anone%7D%40media%20screen%20and%20%28min%2Dwidth%3A768px%29%7B%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bwidth%3A30px%3Bheight%3A30px%3Bmargin%2Dtop%3A%2D15px%3Bfont%2Dsize%3A30px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dleft%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dprev%7Bmargin%2Dleft%3A%2D15px%7D%2Ecarousel%2Dcontrol%20%2Eglyphicon%2Dchevron%2Dright%2C%2Ecarousel%2Dcontrol%20%2Eicon%2Dnext%7Bmargin%2Dright%3A%2D15px%7D%2Ecarousel%2Dcaption%7Bright%3A20%25%3Bleft%3A20%25%3Bpadding%2Dbottom%3A30px%7D%2Ecarousel%2Dindicators%7Bbottom%3A20px%7D%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Abefore%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Ebtn%2Dtoolbar%3Abefore%2C%2Eclearfix%3Aafter%2C%2Eclearfix%3Abefore%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%2Dfluid%3Abefore%2C%2Econtainer%3Aafter%2C%2Econtainer%3Abefore%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Abefore%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Abefore%2C%2Emodal%2Dfooter%3Aafter%2C%2Emodal%2Dfooter%3Abefore%2C%2Enav%3Aafter%2C%2Enav%3Abefore%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dcollapse%3Abefore%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%2Dheader%3Abefore%2C%2Enavbar%3Aafter%2C%2Enavbar%3Abefore%2C%2Epager%3Aafter%2C%2Epager%3Abefore%2C%2Epanel%2Dbody%3Aafter%2C%2Epanel%2Dbody%3Abefore%2C%2Erow%3Aafter%2C%2Erow%3Abefore%7Bdisplay%3Atable%3Bcontent%3A%22%20%22%7D%2Ebtn%2Dgroup%2Dvertical%3E%2Ebtn%2Dgroup%3Aafter%2C%2Ebtn%2Dtoolbar%3Aafter%2C%2Eclearfix%3Aafter%2C%2Econtainer%2Dfluid%3Aafter%2C%2Econtainer%3Aafter%2C%2Edl%2Dhorizontal%20dd%3Aafter%2C%2Eform%2Dhorizontal%20%2Eform%2Dgroup%3Aafter%2C%2Emodal%2Dfooter%3Aafter%2C%2Enav%3Aafter%2C%2Enavbar%2Dcollapse%3Aafter%2C%2Enavbar%2Dheader%3Aafter%2C%2Enavbar%3Aafter%2C%2Epager%3Aafter%2C%2Epanel%2Dbody%3Aafter%2C%2Erow%3Aafter%7Bclear%3Aboth%7D%2Ecenter%2Dblock%7Bdisplay%3Ablock%3Bmargin%2Dright%3Aauto%3Bmargin%2Dleft%3Aauto%7D%2Epull%2Dright%7Bfloat%3Aright%21important%7D%2Epull%2Dleft%7Bfloat%3Aleft%21important%7D%2Ehide%7Bdisplay%3Anone%21important%7D%2Eshow%7Bdisplay%3Ablock%21important%7D%2Einvisible%7Bvisibility%3Ahidden%7D%2Etext%2Dhide%7Bfont%3A0%2F0%20a%3Bcolor%3Atransparent%3Btext%2Dshadow%3Anone%3Bbackground%2Dcolor%3Atransparent%3Bborder%3A0%7D%2Ehidden%7Bdisplay%3Anone%21important%7D%2Eaffix%7Bposition%3Afixed%7D%40%2Dms%2Dviewport%7Bwidth%3Adevice%2Dwidth%7D%2Evisible%2Dlg%2C%2Evisible%2Dmd%2C%2Evisible%2Dsm%2C%2Evisible%2Dxs%7Bdisplay%3Anone%21important%7D%2Evisible%2Dlg%2Dblock%2C%2Evisible%2Dlg%2Dinline%2C%2Evisible%2Dlg%2Dinline%2Dblock%2C%2Evisible%2Dmd%2Dblock%2C%2Evisible%2Dmd%2Dinline%2C%2Evisible%2Dmd%2Dinline%2Dblock%2C%2Evisible%2Dsm%2Dblock%2C%2Evisible%2Dsm%2Dinline%2C%2Evisible%2Dsm%2Dinline%2Dblock%2C%2Evisible%2Dxs%2Dblock%2C%2Evisible%2Dxs%2Dinline%2C%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dxs%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dxs%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dxs%2Cth%2Evisible%2Dxs%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Evisible%2Dxs%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dsm%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dsm%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dsm%2Cth%2Evisible%2Dsm%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Evisible%2Dsm%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dmd%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dmd%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dmd%2Cth%2Evisible%2Dmd%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Evisible%2Dmd%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dlg%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dlg%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dlg%2Cth%2Evisible%2Dlg%7Bdisplay%3Atable%2Dcell%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Evisible%2Dlg%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20%28max%2Dwidth%3A767px%29%7B%2Ehidden%2Dxs%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A768px%29%20and%20%28max%2Dwidth%3A991px%29%7B%2Ehidden%2Dsm%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A992px%29%20and%20%28max%2Dwidth%3A1199px%29%7B%2Ehidden%2Dmd%7Bdisplay%3Anone%21important%7D%7D%40media%20%28min%2Dwidth%3A1200px%29%7B%2Ehidden%2Dlg%7Bdisplay%3Anone%21important%7D%7D%2Evisible%2Dprint%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%7Bdisplay%3Ablock%21important%7Dtable%2Evisible%2Dprint%7Bdisplay%3Atable%21important%7Dtr%2Evisible%2Dprint%7Bdisplay%3Atable%2Drow%21important%7Dtd%2Evisible%2Dprint%2Cth%2Evisible%2Dprint%7Bdisplay%3Atable%2Dcell%21important%7D%7D%2Evisible%2Dprint%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dblock%7Bdisplay%3Ablock%21important%7D%7D%2Evisible%2Dprint%2Dinline%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%7Bdisplay%3Ainline%21important%7D%7D%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Anone%21important%7D%40media%20print%7B%2Evisible%2Dprint%2Dinline%2Dblock%7Bdisplay%3Ainline%2Dblock%21important%7D%7D%40media%20print%7B%2Ehidden%2Dprint%7Bdisplay%3Anone%21important%7D%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyohCiAqIEJvb3RzdHJhcCB2My4zLjUgKGh0dHA6Ly9nZXRib290c3RyYXAuY29tKQogKiBDb3B5cmlnaHQgMjAxMS0yMDE1IFR3aXR0ZXIsIEluYy4KICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqLwppZigidW5kZWZpbmVkIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5Iik7K2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj1hLmZuLmpxdWVyeS5zcGxpdCgiICIpWzBdLnNwbGl0KCIuIik7aWYoYlswXTwyJiZiWzFdPDl8fDE9PWJbMF0mJjk9PWJbMV0mJmJbMl08MSl0aHJvdyBuZXcgRXJyb3IoIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyIil9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksYj17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn07Zm9yKHZhciBjIGluIGIpaWYodm9pZCAwIT09YS5zdHlsZVtjXSlyZXR1cm57ZW5kOmJbY119O3JldHVybiExfWEuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oYil7dmFyIGM9ITEsZD10aGlzO2EodGhpcykub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Yz0hMH0pO3ZhciBlPWZ1bmN0aW9uKCl7Y3x8YShkKS50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KGUsYiksdGhpc30sYShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPWIoKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGEuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6YS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihiKXtyZXR1cm4gYShiLnRhcmdldCkuaXModGhpcyk/Yi5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dm9pZCAwfX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1hKHRoaXMpLGU9Yy5kYXRhKCJicy5hbGVydCIpO2V8fGMuZGF0YSgiYnMuYWxlcnQiLGU9bmV3IGQodGhpcykpLCJzdHJpbmciPT10eXBlb2YgYiYmZVtiXS5jYWxsKGMpfSl9dmFyIGM9J1tkYXRhLWRpc21pc3M9ImFsZXJ0Il0nLGQ9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2siLGMsdGhpcy5jbG9zZSl9O2QuVkVSU0lPTj0iMy4zLjUiLGQuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsZC5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gYygpe2cuZGV0YWNoKCkudHJpZ2dlcigiY2xvc2VkLmJzLmFsZXJ0IikucmVtb3ZlKCl9dmFyIGU9YSh0aGlzKSxmPWUuYXR0cigiZGF0YS10YXJnZXQiKTtmfHwoZj1lLmF0dHIoImhyZWYiKSxmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGc9YShmKTtiJiZiLnByZXZlbnREZWZhdWx0KCksZy5sZW5ndGh8fChnPWUuY2xvc2VzdCgiLmFsZXJ0IikpLGcudHJpZ2dlcihiPWEuRXZlbnQoImNsb3NlLmJzLmFsZXJ0IikpLGIuaXNEZWZhdWx0UHJldmVudGVkKCl8fChnLnJlbW92ZUNsYXNzKCJpbiIpLGEuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKTpjKCkpfTt2YXIgZT1hLmZuLmFsZXJ0O2EuZm4uYWxlcnQ9YixhLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWQsYS5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWxlcnQ9ZSx0aGlzfSxhKGRvY3VtZW50KS5vbigiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGkiLGMsZC5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMuYnV0dG9uIiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5idXR0b24iLGU9bmV3IGModGhpcyxmKSksInRvZ2dsZSI9PWI/ZS50b2dnbGUoKTpiJiZlLnNldFN0YXRlKGIpfSl9dmFyIGM9ZnVuY3Rpb24oYixkKXt0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy5pc0xvYWRpbmc9ITF9O2MuVkVSU0lPTj0iMy4zLjUiLGMuREVGQVVMVFM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn0sYy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oYil7dmFyIGM9ImRpc2FibGVkIixkPXRoaXMuJGVsZW1lbnQsZT1kLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIixmPWQuZGF0YSgpO2IrPSJUZXh0IixudWxsPT1mLnJlc2V0VGV4dCYmZC5kYXRhKCJyZXNldFRleHQiLGRbZV0oKSksc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uKCl7ZFtlXShudWxsPT1mW2JdP3RoaXMub3B0aW9uc1tiXTpmW2JdKSwibG9hZGluZ1RleHQiPT1iPyh0aGlzLmlzTG9hZGluZz0hMCxkLmFkZENsYXNzKGMpLmF0dHIoYyxjKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxkLnJlbW92ZUNsYXNzKGMpLnJlbW92ZUF0dHIoYykpfSx0aGlzKSwwKX0sYy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGE9ITAsYj10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucyJdJyk7aWYoYi5sZW5ndGgpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiaW5wdXQiKTsicmFkaW8iPT1jLnByb3AoInR5cGUiKT8oYy5wcm9wKCJjaGVja2VkIikmJihhPSExKSxiLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcygiYWN0aXZlIikpOiJjaGVja2JveCI9PWMucHJvcCgidHlwZSIpJiYoYy5wcm9wKCJjaGVja2VkIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSYmKGE9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpKSxjLnByb3AoImNoZWNrZWQiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImFjdGl2ZSIpKSxhJiZjLnRyaWdnZXIoImNoYW5nZSIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJhY3RpdmUiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcygiYWN0aXZlIil9O3ZhciBkPWEuZm4uYnV0dG9uO2EuZm4uYnV0dG9uPWIsYS5mbi5idXR0b24uQ29uc3RydWN0b3I9YyxhLmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYnV0dG9uPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZV49ImJ1dHRvbiJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKGMudGFyZ2V0KTtkLmhhc0NsYXNzKCJidG4iKXx8KGQ9ZC5jbG9zZXN0KCIuYnRuIikpLGIuY2FsbChkLCJ0b2dnbGUiKSxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0icmFkaW8iXScpfHxhKGMudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT0iY2hlY2tib3giXScpfHxjLnByZXZlbnREZWZhdWx0KCl9KS5vbigiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlXj0iYnV0dG9uIl0nLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmNsb3Nlc3QoIi5idG4iKS50b2dnbGVDbGFzcygiZm9jdXMiLC9eZm9jdXMoaW4pPyQvLnRlc3QoYi50eXBlKSl9KX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmNhcm91c2VsIiksZj1hLmV4dGVuZCh7fSxjLkRFRkFVTFRTLGQuZGF0YSgpLCJvYmplY3QiPT10eXBlb2YgYiYmYiksZz0ic3RyaW5nIj09dHlwZW9mIGI/YjpmLnNsaWRlO2V8fGQuZGF0YSgiYnMuY2Fyb3VzZWwiLGU9bmV3IGModGhpcyxmKSksIm51bWJlciI9PXR5cGVvZiBiP2UudG8oYik6Zz9lW2ddKCk6Zi5pbnRlcnZhbCYmZS5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgYz1mdW5jdGlvbihiLGMpe3RoaXMuJGVsZW1lbnQ9YShiKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZCgiLmNhcm91c2VsLWluZGljYXRvcnMiKSx0aGlzLm9wdGlvbnM9Yyx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbigia2V5ZG93bi5icy5jYXJvdXNlbCIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLCJob3ZlciI9PXRoaXMub3B0aW9ucy5wYXVzZSYmISgib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWwiLGEucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsYy5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOiJob3ZlciIsd3JhcDohMCxrZXlib2FyZDohMH0sYy5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihhKXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdChhLnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKGEud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn1hLnByZXZlbnREZWZhdWx0KCl9fSxjLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihiKXtyZXR1cm4gYnx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxjLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuJGl0ZW1zPWEucGFyZW50KCkuY2hpbGRyZW4oIi5pdGVtIiksdGhpcy4kaXRlbXMuaW5kZXgoYXx8dGhpcy4kYWN0aXZlKX0sYy5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuZ2V0SXRlbUluZGV4KGIpLGQ9InByZXYiPT1hJiYwPT09Y3x8Im5leHQiPT1hJiZjPT10aGlzLiRpdGVtcy5sZW5ndGgtMTtpZihkJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGI7dmFyIGU9InByZXYiPT1hPy0xOjEsZj0oYytlKSV0aGlzLiRpdGVtcy5sZW5ndGg7cmV0dXJuIHRoaXMuJGl0ZW1zLmVxKGYpfSxjLnByb3RvdHlwZS50bz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLGM9dGhpcy5nZXRJdGVtSW5kZXgodGhpcy4kYWN0aXZlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIikpO3JldHVybiBhPnRoaXMuJGl0ZW1zLmxlbmd0aC0xfHwwPmE/dm9pZCAwOnRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZSgic2xpZC5icy5jYXJvdXNlbCIsZnVuY3Rpb24oKXtiLnRvKGEpfSk6Yz09YT90aGlzLnBhdXNlKCkuY3ljbGUoKTp0aGlzLnNsaWRlKGE+Yz8ibmV4dCI6InByZXYiLHRoaXMuJGl0ZW1zLmVxKGEpKX0sYy5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oYil7cmV0dXJuIGJ8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uJiYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCksdGhpcy5jeWNsZSghMCkpLHRoaXMuaW50ZXJ2YWw9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzfSxjLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgibmV4dCIpfSxjLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2xpZGluZz92b2lkIDA6dGhpcy5zbGlkZSgicHJldiIpfSxjLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihiLGQpe3ZhciBlPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZj1kfHx0aGlzLmdldEl0ZW1Gb3JEaXJlY3Rpb24oYixlKSxnPXRoaXMuaW50ZXJ2YWwsaD0ibmV4dCI9PWI/ImxlZnQiOiJyaWdodCIsaT10aGlzO2lmKGYuaGFzQ2xhc3MoImFjdGl2ZSIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGo9ZlswXSxrPWEuRXZlbnQoInNsaWRlLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGspLCFrLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsZyYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7dmFyIGw9YSh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgoZildKTtsJiZsLmFkZENsYXNzKCJhY3RpdmUiKX12YXIgbT1hLkV2ZW50KCJzbGlkLmJzLmNhcm91c2VsIix7cmVsYXRlZFRhcmdldDpqLGRpcmVjdGlvbjpofSk7cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJzbGlkZSIpPyhmLmFkZENsYXNzKGIpLGZbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhoKSxmLmFkZENsYXNzKGgpLGUub25lKCJic1RyYW5zaXRpb25FbmQiLGZ1bmN0aW9uKCl7Zi5yZW1vdmVDbGFzcyhbYixoXS5qb2luKCIgIikpLmFkZENsYXNzKCJhY3RpdmUiKSxlLnJlbW92ZUNsYXNzKFsiYWN0aXZlIixoXS5qb2luKCIgIikpLGkuc2xpZGluZz0hMSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS4kZWxlbWVudC50cmlnZ2VyKG0pfSwwKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTikpOihlLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxmLmFkZENsYXNzKCJhY3RpdmUiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKG0pKSxnJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBkPWEuZm4uY2Fyb3VzZWw7YS5mbi5jYXJvdXNlbD1iLGEuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9YyxhLmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5jYXJvdXNlbD1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe3ZhciBkLGU9YSh0aGlzKSxmPWEoZS5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1lLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSk7aWYoZi5oYXNDbGFzcygiY2Fyb3VzZWwiKSl7dmFyIGc9YS5leHRlbmQoe30sZi5kYXRhKCksZS5kYXRhKCkpLGg9ZS5hdHRyKCJkYXRhLXNsaWRlLXRvIik7aCYmKGcuaW50ZXJ2YWw9ITEpLGIuY2FsbChmLGcpLGgmJmYuZGF0YSgiYnMuY2Fyb3VzZWwiKS50byhoKSxjLnByZXZlbnREZWZhdWx0KCl9fTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMuY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGUpLm9uKCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaSIsIltkYXRhLXNsaWRlLXRvXSIsZSksYSh3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2EoJ1tkYXRhLXJpZGU9ImNhcm91c2VsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKTtiLmNhbGwoYyxjLmRhdGEoKSl9KX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXt2YXIgYyxkPWIuYXR0cigiZGF0YS10YXJnZXQiKXx8KGM9Yi5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIik7cmV0dXJuIGEoZCl9ZnVuY3Rpb24gYyhiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9YSh0aGlzKSxlPWMuZGF0YSgiYnMuY29sbGFwc2UiKSxmPWEuZXh0ZW5kKHt9LGQuREVGQVVMVFMsYy5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTshZSYmZi50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoYikmJihmLnRvZ2dsZT0hMSksZXx8Yy5kYXRhKCJicy5jb2xsYXBzZSIsZT1uZXcgZCh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBkPWZ1bmN0aW9uKGIsYyl7dGhpcy4kZWxlbWVudD1hKGIpLHRoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxkLkRFRkFVTFRTLGMpLHRoaXMuJHRyaWdnZXI9YSgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2hyZWY9IiMnK2IuaWQrJyJdLFtkYXRhLXRvZ2dsZT0iY29sbGFwc2UiXVtkYXRhLXRhcmdldD0iIycrYi5pZCsnIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07ZC5WRVJTSU9OPSIzLjMuNSIsZC5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxkLkRFRkFVTFRTPXt0b2dnbGU6ITB9LGQucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGE/IndpZHRoIjoiaGVpZ2h0In0sZC5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpKXt2YXIgYixlPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKCIucGFuZWwiKS5jaGlsZHJlbigiLmluLCAuY29sbGFwc2luZyIpO2lmKCEoZSYmZS5sZW5ndGgmJihiPWUuZGF0YSgiYnMuY29sbGFwc2UiKSxiJiZiLnRyYW5zaXRpb25pbmcpKSl7dmFyIGY9YS5FdmVudCgic2hvdy5icy5jb2xsYXBzZSIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihmKSwhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmZS5sZW5ndGgmJihjLmNhbGwoZSwiaGlkZSIpLGJ8fGUuZGF0YSgiYnMuY29sbGFwc2UiLG51bGwpKTt2YXIgZz10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIikuYWRkQ2xhc3MoImNvbGxhcHNpbmciKVtnXSgwKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcygiY29sbGFwc2VkIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITApLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBoPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2luZyIpLmFkZENsYXNzKCJjb2xsYXBzZSBpbiIpW2ddKCIiKSx0aGlzLnRyYW5zaXRpb25pbmc9MCx0aGlzLiRlbGVtZW50LnRyaWdnZXIoInNob3duLmJzLmNvbGxhcHNlIil9O2lmKCFhLnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gaC5jYWxsKHRoaXMpO3ZhciBpPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixnXS5qb2luKCItIikpO3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkoaCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZC5UUkFOU0lUSU9OX0RVUkFUSU9OKVtnXSh0aGlzLiRlbGVtZW50WzBdW2ldKX19fX0sZC5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIikpe3ZhciBiPWEuRXZlbnQoImhpZGUuYnMuY29sbGFwc2UiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYiksIWIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBjPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudFtjXSh0aGlzLiRlbGVtZW50W2NdKCkpWzBdLm9mZnNldEhlaWdodCx0aGlzLiRlbGVtZW50LmFkZENsYXNzKCJjb2xsYXBzaW5nIikucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIGluIikuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLHRoaXMuJHRyaWdnZXIuYWRkQ2xhc3MoImNvbGxhcHNlZCIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgZT1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNpbmciKS5hZGRDbGFzcygiY29sbGFwc2UiKS50cmlnZ2VyKCJoaWRkZW4uYnMuY29sbGFwc2UiKX07cmV0dXJuIGEuc3VwcG9ydC50cmFuc2l0aW9uP3ZvaWQgdGhpcy4kZWxlbWVudFtjXSgwKS5vbmUoImJzVHJhbnNpdGlvbkVuZCIsYS5wcm94eShlLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChkLlRSQU5TSVRJT05fRFVSQVRJT04pOmUuY2FsbCh0aGlzKX19fSxkLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZC5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdW2RhdGEtcGFyZW50PSInK3RoaXMub3B0aW9ucy5wYXJlbnQrJyJdJykuZWFjaChhLnByb3h5KGZ1bmN0aW9uKGMsZCl7dmFyIGU9YShkKTt0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhiKGUpLGUpfSx0aGlzKSkuZW5kKCl9LGQucHJvdG90eXBlLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcz1mdW5jdGlvbihhLGIpe3ZhciBjPWEuaGFzQ2xhc3MoImluIik7YS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKSxiLnRvZ2dsZUNsYXNzKCJjb2xsYXBzZWQiLCFjKS5hdHRyKCJhcmlhLWV4cGFuZGVkIixjKX07dmFyIGU9YS5mbi5jb2xsYXBzZTthLmZuLmNvbGxhcHNlPWMsYS5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1kLGEuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLmNvbGxhcHNlPWUsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLmNvbGxhcHNlLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJjb2xsYXBzZSJdJyxmdW5jdGlvbihkKXt2YXIgZT1hKHRoaXMpO2UuYXR0cigiZGF0YS10YXJnZXQiKXx8ZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBmPWIoZSksZz1mLmRhdGEoImJzLmNvbGxhcHNlIiksaD1nPyJ0b2dnbGUiOmUuZGF0YSgpO2MuY2FsbChmLGgpfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3ZhciBjPWIuYXR0cigiZGF0YS10YXJnZXQiKTtjfHwoYz1iLmF0dHIoImhyZWYiKSxjPWMmJi8jW0EtWmEtel0vLnRlc3QoYykmJmMucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKSk7dmFyIGQ9YyYmYShjKTtyZXR1cm4gZCYmZC5sZW5ndGg/ZDpiLnBhcmVudCgpfWZ1bmN0aW9uIGMoYyl7YyYmMz09PWMud2hpY2h8fChhKGUpLnJlbW92ZSgpLGEoZikuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1iKGQpLGY9e3JlbGF0ZWRUYXJnZXQ6dGhpc307ZS5oYXNDbGFzcygib3BlbiIpJiYoYyYmImNsaWNrIj09Yy50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGMudGFyZ2V0LnRhZ05hbWUpJiZhLmNvbnRhaW5zKGVbMF0sYy50YXJnZXQpfHwoZS50cmlnZ2VyKGM9YS5FdmVudCgiaGlkZS5icy5kcm9wZG93biIsZikpLGMuaXNEZWZhdWx0UHJldmVudGVkKCl8fChkLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLGUucmVtb3ZlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJoaWRkZW4uYnMuZHJvcGRvd24iLGYpKSkpfSkpfWZ1bmN0aW9uIGQoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoImJzLmRyb3Bkb3duIik7ZHx8Yy5kYXRhKCJicy5kcm9wZG93biIsZD1uZXcgZyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZkW2JdLmNhbGwoYyl9KX12YXIgZT0iLmRyb3Bkb3duLWJhY2tkcm9wIixmPSdbZGF0YS10b2dnbGU9ImRyb3Bkb3duIl0nLGc9ZnVuY3Rpb24oYil7YShiKS5vbigiY2xpY2suYnMuZHJvcGRvd24iLHRoaXMudG9nZ2xlKX07Zy5WRVJTSU9OPSIzLjMuNSIsZy5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGQpe3ZhciBlPWEodGhpcyk7aWYoIWUuaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3ZhciBmPWIoZSksZz1mLmhhc0NsYXNzKCJvcGVuIik7aWYoYygpLCFnKXsib250b3VjaHN0YXJ0ImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWYuY2xvc2VzdCgiLm5hdmJhci1uYXYiKS5sZW5ndGgmJmEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmFkZENsYXNzKCJkcm9wZG93bi1iYWNrZHJvcCIpLmluc2VydEFmdGVyKGEodGhpcykpLm9uKCJjbGljayIsYyk7dmFyIGg9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYoZi50cmlnZ2VyKGQ9YS5FdmVudCgic2hvdy5icy5kcm9wZG93biIsaCkpLGQuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO2UudHJpZ2dlcigiZm9jdXMiKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwidHJ1ZSIpLGYudG9nZ2xlQ2xhc3MoIm9wZW4iKS50cmlnZ2VyKCJzaG93bi5icy5kcm9wZG93biIsaCl9cmV0dXJuITF9fSxnLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGMpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGMud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChjLnRhcmdldC50YWdOYW1lKSl7dmFyIGQ9YSh0aGlzKTtpZihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhZC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7dmFyIGU9YihkKSxnPWUuaGFzQ2xhc3MoIm9wZW4iKTtpZighZyYmMjchPWMud2hpY2h8fGcmJjI3PT1jLndoaWNoKXJldHVybiAyNz09Yy53aGljaCYmZS5maW5kKGYpLnRyaWdnZXIoImZvY3VzIiksZC50cmlnZ2VyKCJjbGljayIpO3ZhciBoPSIgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhIixpPWUuZmluZCgiLmRyb3Bkb3duLW1lbnUiK2gpO2lmKGkubGVuZ3RoKXt2YXIgaj1pLmluZGV4KGMudGFyZ2V0KTszOD09Yy53aGljaCYmaj4wJiZqLS0sNDA9PWMud2hpY2gmJmo8aS5sZW5ndGgtMSYmaisrLH5qfHwoaj0wKSxpLmVxKGopLnRyaWdnZXIoImZvY3VzIil9fX19O3ZhciBoPWEuZm4uZHJvcGRvd247YS5mbi5kcm9wZG93bj1kLGEuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9ZyxhLmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5kcm9wZG93bj1oLHRoaXN9LGEoZG9jdW1lbnQpLm9uKCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaSIsYykub24oImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIiwiLmRyb3Bkb3duIGZvcm0iLGZ1bmN0aW9uKGEpe2Euc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGkiLGYsZy5wcm90b3R5cGUudG9nZ2xlKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsZixnLnByb3RvdHlwZS5rZXlkb3duKS5vbigia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93bi1tZW51IixnLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYixkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9YSh0aGlzKSxmPWUuZGF0YSgiYnMubW9kYWwiKSxnPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZS5kYXRhKCksIm9iamVjdCI9PXR5cGVvZiBiJiZiKTtmfHxlLmRhdGEoImJzLm1vZGFsIixmPW5ldyBjKHRoaXMsZykpLCJzdHJpbmciPT10eXBlb2YgYj9mW2JdKGQpOmcuc2hvdyYmZi5zaG93KGQpfSl9dmFyIGM9ZnVuY3Rpb24oYixjKXt0aGlzLm9wdGlvbnM9Yyx0aGlzLiRib2R5PWEoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD1hKGIpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1kaWFsb2ciKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1jb250ZW50IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLGEucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoImxvYWRlZC5icy5tb2RhbCIpfSx0aGlzKSl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxjLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3coYSl9LGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpcyxlPWEuRXZlbnQoInNob3cuYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3dufHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIsJ1tkYXRhLWRpc21pc3M9Im1vZGFsIl0nLGEucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuJGVsZW1lbnQub25lKCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWwiLGZ1bmN0aW9uKGIpe2EoYi50YXJnZXQpLmlzKGQuJGVsZW1lbnQpJiYoZC5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBlPWEuc3VwcG9ydC50cmFuc2l0aW9uJiZkLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik7ZC4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fGQuJGVsZW1lbnQuYXBwZW5kVG8oZC4kYm9keSksZC4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLGQuYWRqdXN0RGlhbG9nKCksZSYmZC4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxkLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLGQuZW5mb3JjZUZvY3VzKCk7dmFyIGY9YS5FdmVudCgic2hvd24uYnMubW9kYWwiLHtyZWxhdGVkVGFyZ2V0OmJ9KTtlP2QuJGRpYWxvZy5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZnVuY3Rpb24oKXtkLiRlbGVtZW50LnRyaWdnZXIoImZvY3VzIikudHJpZ2dlcihmKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZC4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpLnRyaWdnZXIoZil9KSl9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7YiYmYi5wcmV2ZW50RGVmYXVsdCgpLGI9YS5FdmVudCgiaGlkZS5icy5tb2RhbCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihiKSx0aGlzLmlzU2hvd24mJiFiLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSxhKGRvY3VtZW50KS5vZmYoImZvY3VzaW4uYnMubW9kYWwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLm9mZigiY2xpY2suZGlzbWlzcy5icy5tb2RhbCIpLm9mZigibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsIiksdGhpcy4kZGlhbG9nLm9mZigibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWwiKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGVsZW1lbnQub25lKCJic1RyYW5zaXRpb25FbmQiLGEucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGMucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe2EoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5icy5tb2RhbCIpLm9uKCJmb2N1c2luLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3RoaXMuJGVsZW1lbnRbMF09PT1hLnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXMoYS50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJmb2N1cyIpfSx0aGlzKSl9LGMucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oImtleWRvd24uZGlzbWlzcy5icy5tb2RhbCIsYS5wcm94eShmdW5jdGlvbihhKXsyNz09YS53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP2Eod2luZG93KS5vbigicmVzaXplLmJzLm1vZGFsIixhLnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTphKHdpbmRvdykub2ZmKCJyZXNpemUuYnMubW9kYWwiKX0sYy5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7YS4kYm9keS5yZW1vdmVDbGFzcygibW9kYWwtb3BlbiIpLGEucmVzZXRBZGp1c3RtZW50cygpLGEucmVzZXRTY3JvbGxiYXIoKSxhLiRlbGVtZW50LnRyaWdnZXIoImhpZGRlbi5icy5tb2RhbCIpfSl9LGMucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGMucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGIpe3ZhciBkPXRoaXMsZT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgZj1hLnN1cHBvcnQudHJhbnNpdGlvbiYmZTtpZih0aGlzLiRiYWNrZHJvcD1hKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hZGRDbGFzcygibW9kYWwtYmFja2Ryb3AgIitlKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKCJjbGljay5kaXNtaXNzLmJzLm1vZGFsIixhLnByb3h5KGZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s/dm9pZCh0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEpOnZvaWQoYS50YXJnZXQ9PT1hLmN1cnJlbnRUYXJnZXQmJigic3RhdGljIj09dGhpcy5vcHRpb25zLmJhY2tkcm9wP3RoaXMuJGVsZW1lbnRbMF0uZm9jdXMoKTp0aGlzLmhpZGUoKSkpfSx0aGlzKSksZiYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIiksIWIpcmV0dXJuO2Y/dGhpcy4kYmFja2Ryb3Aub25lKCJic1RyYW5zaXRpb25FbmQiLGIpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YigpfWVsc2UgaWYoIXRoaXMuaXNTaG93biYmdGhpcy4kYmFja2Ryb3Ape3RoaXMuJGJhY2tkcm9wLnJlbW92ZUNsYXNzKCJpbiIpO3ZhciBnPWZ1bmN0aW9uKCl7ZC5yZW1vdmVCYWNrZHJvcCgpLGImJmIoKX07YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoImJzVHJhbnNpdGlvbkVuZCIsZykuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTpnKCl9ZWxzZSBiJiZiKCl9LGMucHJvdG90eXBlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuYWRqdXN0RGlhbG9nKCl9LGMucHJvdG90eXBlLmFkanVzdERpYWxvZz1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OiF0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiFhP3RoaXMuc2Nyb2xsYmFyV2lkdGg6IiJ9KX0sYy5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDoiIixwYWRkaW5nUmlnaHQ6IiJ9KX0sYy5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgYT13aW5kb3cuaW5uZXJXaWR0aDtpZighYSl7dmFyIGI9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2E9Yi5yaWdodC1NYXRoLmFicyhiLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDxhLHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGMucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciBhPXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKCJwYWRkaW5nLXJpZ2h0Iil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHwiIix0aGlzLmJvZHlJc092ZXJmbG93aW5nJiZ0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsYSt0aGlzLnNjcm9sbGJhcldpZHRoKX0sYy5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcygicGFkZGluZy1yaWdodCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxjLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5jbGFzc05hbWU9Im1vZGFsLXNjcm9sbGJhci1tZWFzdXJlIix0aGlzLiRib2R5LmFwcGVuZChhKTt2YXIgYj1hLm9mZnNldFdpZHRoLWEuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQoYSksYn07dmFyIGQ9YS5mbi5tb2RhbDthLmZuLm1vZGFsPWIsYS5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1jLGEuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLm1vZGFsPWQsdGhpc30sYShkb2N1bWVudCkub24oImNsaWNrLmJzLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9ZC5hdHRyKCJocmVmIiksZj1hKGQuYXR0cigiZGF0YS10YXJnZXQiKXx8ZSYmZS5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKSxnPWYuZGF0YSgiYnMubW9kYWwiKT8idG9nZ2xlIjphLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChlKSYmZX0sZi5kYXRhKCksZC5kYXRhKCkpO2QuaXMoImEiKSYmYy5wcmV2ZW50RGVmYXVsdCgpLGYub25lKCJzaG93LmJzLm1vZGFsIixmdW5jdGlvbihhKXthLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLm9uZSgiaGlkZGVuLmJzLm1vZGFsIixmdW5jdGlvbigpe2QuaXMoIjp2aXNpYmxlIikmJmQudHJpZ2dlcigiZm9jdXMiKX0pfSksYi5jYWxsKGYsZyx0aGlzKX0pfShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMudG9vbHRpcCIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnRvb2x0aXAiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KCJ0b29sdGlwIixhLGIpfTtjLlZFUlNJT049IjMuMy41IixjLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGMuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6InRvcCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InRvb2x0aXAiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9InRvb2x0aXAtYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InRvb2x0aXAtaW5uZXIiPjwvZGl2PjwvZGl2PicsdHJpZ2dlcjoiaG92ZXIgZm9jdXMiLHRpdGxlOiIiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOiJib2R5IixwYWRkaW5nOjB9fSxjLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGIsYyxkKXtpZih0aGlzLmVuYWJsZWQ9ITAsdGhpcy50eXBlPWIsdGhpcy4kZWxlbWVudD1hKGMpLHRoaXMub3B0aW9ucz10aGlzLmdldE9wdGlvbnMoZCksdGhpcy4kdmlld3BvcnQ9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZhKGEuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMudmlld3BvcnQpP3RoaXMub3B0aW9ucy52aWV3cG9ydC5jYWxsKHRoaXMsdGhpcy4kZWxlbWVudCk6dGhpcy5vcHRpb25zLnZpZXdwb3J0LnNlbGVjdG9yfHx0aGlzLm9wdGlvbnMudmlld3BvcnQpLHRoaXMuaW5TdGF0ZT17Y2xpY2s6ITEsaG92ZXI6ITEsZm9jdXM6ITF9LHRoaXMuJGVsZW1lbnRbMF1pbnN0YW5jZW9mIGRvY3VtZW50LmNvbnN0cnVjdG9yJiYhdGhpcy5vcHRpb25zLnNlbGVjdG9yKXRocm93IG5ldyBFcnJvcigiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgIit0aGlzLnR5cGUrIiBvbiB0aGUgd2luZG93LmRvY3VtZW50IG9iamVjdCEiKTtmb3IodmFyIGU9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoIiAiKSxmPWUubGVuZ3RoO2YtLTspe3ZhciBnPWVbZl07aWYoImNsaWNrIj09Zyl0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZigibWFudWFsIiE9Zyl7dmFyIGg9ImhvdmVyIj09Zz8ibW91c2VlbnRlciI6ImZvY3VzaW4iLGk9ImhvdmVyIj09Zz8ibW91c2VsZWF2ZSI6ImZvY3Vzb3V0Ijt0aGlzLiRlbGVtZW50Lm9uKGgrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGkrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYS5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9YS5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSk6dGhpcy5maXhUaXRsZSgpfSxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGIpe3JldHVybiBiPWEuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxiKSxiLmRlbGF5JiYibnVtYmVyIj09dHlwZW9mIGIuZGVsYXkmJihiLmRlbGF5PXtzaG93OmIuZGVsYXksaGlkZTpiLmRlbGF5fSksYn0sYy5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGI9e30sYz10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJmEuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKGEsZCl7Y1thXSE9ZCYmKGJbYV09ZCl9KSxifSxjLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihiKXt2YXIgYz1iIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9iOmEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSk7cmV0dXJuIGN8fChjPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGIuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSxhKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsYykpLGIgaW5zdGFuY2VvZiBhLkV2ZW50JiYoYy5pblN0YXRlWyJmb2N1c2luIj09Yi50eXBlPyJmb2N1cyI6ImhvdmVyIl09ITApLGMudGlwKCkuaGFzQ2xhc3MoImluIil8fCJpbiI9PWMuaG92ZXJTdGF0ZT92b2lkKGMuaG92ZXJTdGF0ZT0iaW4iKTooY2xlYXJUaW1lb3V0KGMudGltZW91dCksYy5ob3ZlclN0YXRlPSJpbiIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ImluIj09Yy5ob3ZlclN0YXRlJiZjLnNob3coKX0sYy5vcHRpb25zLmRlbGF5LnNob3cpKTpjLnNob3coKSl9LGMucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVthXSlyZXR1cm4hMDtyZXR1cm4hMX0sYy5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oYil7dmFyIGM9YiBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/YjphKGIuY3VycmVudFRhcmdldCkuZGF0YSgiYnMuIit0aGlzLnR5cGUpO3JldHVybiBjfHwoYz1uZXcgdGhpcy5jb25zdHJ1Y3RvcihiLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksYShiLmN1cnJlbnRUYXJnZXQpLmRhdGEoImJzLiIrdGhpcy50eXBlLGMpKSxiIGluc3RhbmNlb2YgYS5FdmVudCYmKGMuaW5TdGF0ZVsiZm9jdXNvdXQiPT1iLnR5cGU/ImZvY3VzIjoiaG92ZXIiXT0hMSksYy5pc0luU3RhdGVUcnVlKCk/dm9pZCAwOihjbGVhclRpbWVvdXQoYy50aW1lb3V0KSxjLmhvdmVyU3RhdGU9Im91dCIsYy5vcHRpb25zLmRlbGF5JiZjLm9wdGlvbnMuZGVsYXkuaGlkZT92b2lkKGMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Im91dCI9PWMuaG92ZXJTdGF0ZSYmYy5oaWRlKCl9LGMub3B0aW9ucy5kZWxheS5oaWRlKSk6Yy5oaWRlKCkpfSxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9YS5FdmVudCgic2hvdy5icy4iK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGIpO3ZhciBkPWEuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhZClyZXR1cm47dmFyIGU9dGhpcyxmPXRoaXMudGlwKCksZz10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLGYuYXR0cigiaWQiLGcpLHRoaXMuJGVsZW1lbnQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZyksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmZi5hZGRDbGFzcygiZmFkZSIpO3ZhciBoPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLGZbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxpPS9ccz9hdXRvP1xzPy9pLGo9aS50ZXN0KGgpO2omJihoPWgucmVwbGFjZShpLCIiKXx8InRvcCIpLGYuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYWRkQ2xhc3MoaCkuZGF0YSgiYnMuIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9mLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOmYuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKCJpbnNlcnRlZC5icy4iK3RoaXMudHlwZSk7dmFyIGs9dGhpcy5nZXRQb3NpdGlvbigpLGw9ZlswXS5vZmZzZXRXaWR0aCxtPWZbMF0ub2Zmc2V0SGVpZ2h0O2lmKGope3ZhciBuPWgsbz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtoPSJib3R0b20iPT1oJiZrLmJvdHRvbSttPm8uYm90dG9tPyJ0b3AiOiJ0b3AiPT1oJiZrLnRvcC1tPG8udG9wPyJib3R0b20iOiJyaWdodCI9PWgmJmsucmlnaHQrbD5vLndpZHRoPyJsZWZ0IjoibGVmdCI9PWgmJmsubGVmdC1sPG8ubGVmdD8icmlnaHQiOmgsZi5yZW1vdmVDbGFzcyhuKS5hZGRDbGFzcyhoKX12YXIgcD10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQoaCxrLGwsbSk7dGhpcy5hcHBseVBsYWNlbWVudChwLGgpO3ZhciBxPWZ1bmN0aW9uKCl7dmFyIGE9ZS5ob3ZlclN0YXRlO2UuJGVsZW1lbnQudHJpZ2dlcigic2hvd24uYnMuIitlLnR5cGUpLGUuaG92ZXJTdGF0ZT1udWxsLCJvdXQiPT1hJiZlLmxlYXZlKGUpfTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKCJmYWRlIik/Zi5vbmUoImJzVHJhbnNpdGlvbkVuZCIscSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYy5UUkFOU0lUSU9OX0RVUkFUSU9OKTpxKCl9fSxjLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihiLGMpe3ZhciBkPXRoaXMudGlwKCksZT1kWzBdLm9mZnNldFdpZHRoLGY9ZFswXS5vZmZzZXRIZWlnaHQsZz1wYXJzZUludChkLmNzcygibWFyZ2luLXRvcCIpLDEwKSxoPXBhcnNlSW50KGQuY3NzKCJtYXJnaW4tbGVmdCIpLDEwKTtpc05hTihnKSYmKGc9MCksaXNOYU4oaCkmJihoPTApLGIudG9wKz1nLGIubGVmdCs9aCxhLm9mZnNldC5zZXRPZmZzZXQoZFswXSxhLmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24oYSl7ZC5jc3Moe3RvcDpNYXRoLnJvdW5kKGEudG9wKSxsZWZ0Ok1hdGgucm91bmQoYS5sZWZ0KX0pfX0sYiksMCksZC5hZGRDbGFzcygiaW4iKTt2YXIgaT1kWzBdLm9mZnNldFdpZHRoLGo9ZFswXS5vZmZzZXRIZWlnaHQ7InRvcCI9PWMmJmohPWYmJihiLnRvcD1iLnRvcCtmLWopO3ZhciBrPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGMsYixpLGopO2subGVmdD9iLmxlZnQrPWsubGVmdDpiLnRvcCs9ay50b3A7dmFyIGw9L3RvcHxib3R0b20vLnRlc3QoYyksbT1sPzIqay5sZWZ0LWUraToyKmsudG9wLWYraixuPWw/Im9mZnNldFdpZHRoIjoib2Zmc2V0SGVpZ2h0IjtkLm9mZnNldChiKSx0aGlzLnJlcGxhY2VBcnJvdyhtLGRbMF1bbl0sbCl9LGMucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbihhLGIsYyl7dGhpcy5hcnJvdygpLmNzcyhjPyJsZWZ0IjoidG9wIiw1MCooMS1hL2IpKyIlIikuY3NzKGM/InRvcCI6ImxlZnQiLCIiKX0sYy5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMudGlwKCksYj10aGlzLmdldFRpdGxlKCk7YS5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGIpLGEucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGMucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oYil7ZnVuY3Rpb24gZCgpeyJpbiIhPWUuaG92ZXJTdGF0ZSYmZi5kZXRhY2goKSxlLiRlbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKS50cmlnZ2VyKCJoaWRkZW4uYnMuIitlLnR5cGUpLGImJmIoKX12YXIgZT10aGlzLGY9YSh0aGlzLiR0aXApLGc9YS5FdmVudCgiaGlkZS5icy4iK3RoaXMudHlwZSk7cmV0dXJuIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihnKSxnLmlzRGVmYXVsdFByZXZlbnRlZCgpP3ZvaWQgMDooZi5yZW1vdmVDbGFzcygiaW4iKSxhLnN1cHBvcnQudHJhbnNpdGlvbiYmZi5oYXNDbGFzcygiZmFkZSIpP2Yub25lKCJic1RyYW5zaXRpb25FbmQiLGQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGMuVFJBTlNJVElPTl9EVVJBVElPTik6ZCgpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMpfSxjLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQ7KGEuYXR0cigidGl0bGUiKXx8InN0cmluZyIhPXR5cGVvZiBhLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKSkmJmEuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYS5hdHRyKCJ0aXRsZSIpfHwiIikuYXR0cigidGl0bGUiLCIiKX0sYy5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGMucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGIpe2I9Ynx8dGhpcy4kZWxlbWVudDt2YXIgYz1iWzBdLGQ9IkJPRFkiPT1jLnRhZ05hbWUsZT1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PWUud2lkdGgmJihlPWEuZXh0ZW5kKHt9LGUse3dpZHRoOmUucmlnaHQtZS5sZWZ0LGhlaWdodDplLmJvdHRvbS1lLnRvcH0pKTt2YXIgZj1kP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCksZz17c2Nyb2xsOmQ/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6Yi5zY3JvbGxUb3AoKX0saD1kP3t3aWR0aDphKHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6YSh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiBhLmV4dGVuZCh7fSxlLGcsaCxmKX0sYy5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4iYm90dG9tIj09YT97dG9wOmIudG9wK2IuaGVpZ2h0LGxlZnQ6Yi5sZWZ0K2Iud2lkdGgvMi1jLzJ9OiJ0b3AiPT1hP3t0b3A6Yi50b3AtZCxsZWZ0OmIubGVmdCtiLndpZHRoLzItYy8yfToibGVmdCI9PWE/e3RvcDpiLnRvcCtiLmhlaWdodC8yLWQvMixsZWZ0OmIubGVmdC1jfTp7dG9wOmIudG9wK2IuaGVpZ2h0LzItZC8yLGxlZnQ6Yi5sZWZ0K2Iud2lkdGh9fSxjLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBlO3ZhciBmPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsZz10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdChhKSl7dmFyIGg9Yi50b3AtZi1nLnNjcm9sbCxpPWIudG9wK2YtZy5zY3JvbGwrZDtoPGcudG9wP2UudG9wPWcudG9wLWg6aT5nLnRvcCtnLmhlaWdodCYmKGUudG9wPWcudG9wK2cuaGVpZ2h0LWkpfWVsc2V7dmFyIGo9Yi5sZWZ0LWYsaz1iLmxlZnQrZitjO2o8Zy5sZWZ0P2UubGVmdD1nLmxlZnQtajprPmcucmlnaHQmJihlLmxlZnQ9Zy5sZWZ0K2cud2lkdGgtayl9cmV0dXJuIGV9LGMucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLiRlbGVtZW50LGM9dGhpcy5vcHRpb25zO3JldHVybiBhPWIuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpfHwoImZ1bmN0aW9uIj09dHlwZW9mIGMudGl0bGU/Yy50aXRsZS5jYWxsKGJbMF0pOmMudGl0bGUpfSxjLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24oYSl7ZG8gYSs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpO3doaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKTtyZXR1cm4gYX0sYy5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD1hKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZSsiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhIik7cmV0dXJuIHRoaXMuJHRpcH0sYy5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZCgiLnRvb2x0aXAtYXJyb3ciKX0sYy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxjLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxjLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGMucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2ImJihjPWEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSksY3x8KGM9bmV3IHRoaXMuY29uc3RydWN0b3IoYi5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLGEoYi5jdXJyZW50VGFyZ2V0KS5kYXRhKCJicy4iK3RoaXMudHlwZSxjKSkpLGI/KGMuaW5TdGF0ZS5jbGljaz0hYy5pblN0YXRlLmNsaWNrLGMuaXNJblN0YXRlVHJ1ZSgpP2MuZW50ZXIoYyk6Yy5sZWF2ZShjKSk6Yy50aXAoKS5oYXNDbGFzcygiaW4iKT9jLmxlYXZlKGMpOmMuZW50ZXIoYyl9LGMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe2EuJGVsZW1lbnQub2ZmKCIuIithLnR5cGUpLnJlbW92ZURhdGEoImJzLiIrYS50eXBlKSxhLiR0aXAmJmEuJHRpcC5kZXRhY2goKSxhLiR0aXA9bnVsbCxhLiRhcnJvdz1udWxsLGEuJHZpZXdwb3J0PW51bGx9KX07dmFyIGQ9YS5mbi50b29sdGlwO2EuZm4udG9vbHRpcD1iLGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1jLGEuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4udG9vbHRpcD1kLHRoaXN9fShqUXVlcnkpLCtmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9YSh0aGlzKSxlPWQuZGF0YSgiYnMucG9wb3ZlciIpLGY9Im9iamVjdCI9PXR5cGVvZiBiJiZiOyhlfHwhL2Rlc3Ryb3l8aGlkZS8udGVzdChiKSkmJihlfHxkLmRhdGEoImJzLnBvcG92ZXIiLGU9bmV3IGModGhpcyxmKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCkpfSl9dmFyIGM9ZnVuY3Rpb24oYSxiKXt0aGlzLmluaXQoInBvcG92ZXIiLGEsYil9O2lmKCFhLmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanMiKTtjLlZFUlNJT049IjMuMy41IixjLkRFRkFVTFRTPWEuZXh0ZW5kKHt9LGEuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OiJyaWdodCIsdHJpZ2dlcjoiY2xpY2siLGNvbnRlbnQ6IiIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9InBvcG92ZXIiIHJvbGU9InRvb2x0aXAiPjxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj48aDMgY2xhc3M9InBvcG92ZXItdGl0bGUiPjwvaDM+PGRpdiBjbGFzcz0icG9wb3Zlci1jb250ZW50Ij48L2Rpdj48L2Rpdj4nfSksYy5wcm90b3R5cGU9YS5leHRlbmQoe30sYS5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksYy5wcm90b3R5cGUuY29uc3RydWN0b3I9YyxjLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBjLkRFRkFVTFRTfSxjLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy50aXAoKSxiPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2EuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShiKSxhLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sPyJzdHJpbmciPT10eXBlb2YgYz8iaHRtbCI6ImFwcGVuZCI6InRleHQiXShjKSxhLnJlbW92ZUNsYXNzKCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpbiIpLGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5odG1sKCl8fGEuZmluZCgiLnBvcG92ZXItdGl0bGUiKS5oaWRlKCl9LGMucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sYy5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciBhPXRoaXMuJGVsZW1lbnQsYj10aGlzLm9wdGlvbnM7cmV0dXJuIGEuYXR0cigiZGF0YS1jb250ZW50Iil8fCgiZnVuY3Rpb24iPT10eXBlb2YgYi5jb250ZW50P2IuY29udGVudC5jYWxsKGFbMF0pOmIuY29udGVudCl9LGMucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoIi5hcnJvdyIpfTt2YXIgZD1hLmZuLnBvcG92ZXI7YS5mbi5wb3BvdmVyPWIsYS5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWMsYS5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gYS5mbi5wb3BvdmVyPWQsdGhpc319KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGMsZCl7dGhpcy4kYm9keT1hKGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9YShhKGMpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzpjKSx0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYi5ERUZBVUxUUyxkKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwiIikrIiAubmF2IGxpID4gYSIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbigic2Nyb2xsLmJzLnNjcm9sbHNweSIsYS5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGMoYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLnNjcm9sbHNweSIpLGY9Im9iamVjdCI9PXR5cGVvZiBjJiZjO2V8fGQuZGF0YSgiYnMuc2Nyb2xsc3B5IixlPW5ldyBiKHRoaXMsZikpLCJzdHJpbmciPT10eXBlb2YgYyYmZVtjXSgpfSl9Yi5WRVJTSU9OPSIzLjMuNSIsYi5ERUZBVUxUUz17b2Zmc2V0OjEwfSxiLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxiLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcyxjPSJvZmZzZXQiLGQ9MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksYS5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGM9InBvc2l0aW9uIixkPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpLGU9Yi5kYXRhKCJ0YXJnZXQiKXx8Yi5hdHRyKCJocmVmIiksZj0vXiMuLy50ZXN0KGUpJiZhKGUpO3JldHVybiBmJiZmLmxlbmd0aCYmZi5pcygiOnZpc2libGUiKSYmW1tmW2NdKCkudG9wK2QsZV1dfHxudWxsfSkuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhWzBdLWJbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yi5vZmZzZXRzLnB1c2godGhpc1swXSksYi50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sYi5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGM9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQrYy10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGU9dGhpcy5vZmZzZXRzLGY9dGhpcy50YXJnZXRzLGc9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWMmJnRoaXMucmVmcmVzaCgpLGI+PWQpcmV0dXJuIGchPShhPWZbZi5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKGEpO2lmKGcmJmI8ZVswXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKGE9ZS5sZW5ndGg7YS0tOylnIT1mW2FdJiZiPj1lW2FdJiYodm9pZCAwPT09ZVthKzFdfHxiPGVbYSsxXSkmJnRoaXMuYWN0aXZhdGUoZlthXSl9LGIucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGIpe3RoaXMuYWN0aXZlVGFyZ2V0PWIsdGhpcy5jbGVhcigpO3ZhciBjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytiKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2IrJyJdJyxkPWEoYykucGFyZW50cygibGkiKS5hZGRDbGFzcygiYWN0aXZlIik7ZC5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiYoZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpKSwKZC50cmlnZ2VyKCJhY3RpdmF0ZS5icy5zY3JvbGxzcHkiKX0sYi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXthKHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpfTt2YXIgZD1hLmZuLnNjcm9sbHNweTthLmZuLnNjcm9sbHNweT1jLGEuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWIsYS5mbi5zY3JvbGxzcHkubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnNjcm9sbHNweT1kLHRoaXN9LGEod2luZG93KS5vbigibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGkiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1hKHRoaXMpO2MuY2FsbChiLGIuZGF0YSgpKX0pfSl9KGpRdWVyeSksK2Z1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1hKHRoaXMpLGU9ZC5kYXRhKCJicy50YWIiKTtlfHxkLmRhdGEoImJzLnRhYiIsZT1uZXcgYyh0aGlzKSksInN0cmluZyI9PXR5cGVvZiBiJiZlW2JdKCl9KX12YXIgYz1mdW5jdGlvbihiKXt0aGlzLmVsZW1lbnQ9YShiKX07Yy5WRVJTSU9OPSIzLjMuNSIsYy5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxjLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5lbGVtZW50LGM9Yi5jbG9zZXN0KCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpIiksZD1iLmRhdGEoInRhcmdldCIpO2lmKGR8fChkPWIuYXR0cigiaHJlZiIpLGQ9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpKSwhYi5wYXJlbnQoImxpIikuaGFzQ2xhc3MoImFjdGl2ZSIpKXt2YXIgZT1jLmZpbmQoIi5hY3RpdmU6bGFzdCBhIiksZj1hLkV2ZW50KCJoaWRlLmJzLnRhYiIse3JlbGF0ZWRUYXJnZXQ6YlswXX0pLGc9YS5FdmVudCgic2hvdy5icy50YWIiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KTtpZihlLnRyaWdnZXIoZiksYi50cmlnZ2VyKGcpLCFnLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGg9YShkKTt0aGlzLmFjdGl2YXRlKGIuY2xvc2VzdCgibGkiKSxjKSx0aGlzLmFjdGl2YXRlKGgsaC5wYXJlbnQoKSxmdW5jdGlvbigpe2UudHJpZ2dlcih7dHlwZToiaGlkZGVuLmJzLnRhYiIscmVsYXRlZFRhcmdldDpiWzBdfSksYi50cmlnZ2VyKHt0eXBlOiJzaG93bi5icy50YWIiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pfSl9fX0sYy5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oYixkLGUpe2Z1bmN0aW9uIGYoKXtnLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5maW5kKCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9InRhYiJdJykuYXR0cigiYXJpYS1leHBhbmRlZCIsITEpLGIuYWRkQ2xhc3MoImFjdGl2ZSIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksaD8oYlswXS5vZmZzZXRXaWR0aCxiLmFkZENsYXNzKCJpbiIpKTpiLnJlbW92ZUNsYXNzKCJmYWRlIiksYi5wYXJlbnQoIi5kcm9wZG93bi1tZW51IikubGVuZ3RoJiZiLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT0idGFiIl0nKS5hdHRyKCJhcmlhLWV4cGFuZGVkIiwhMCksZSYmZSgpfXZhciBnPWQuZmluZCgiPiAuYWN0aXZlIiksaD1lJiZhLnN1cHBvcnQudHJhbnNpdGlvbiYmKGcubGVuZ3RoJiZnLmhhc0NsYXNzKCJmYWRlIil8fCEhZC5maW5kKCI+IC5mYWRlIikubGVuZ3RoKTtnLmxlbmd0aCYmaD9nLm9uZSgiYnNUcmFuc2l0aW9uRW5kIixmKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChjLlRSQU5TSVRJT05fRFVSQVRJT04pOmYoKSxnLnJlbW92ZUNsYXNzKCJpbiIpfTt2YXIgZD1hLmZuLnRhYjthLmZuLnRhYj1iLGEuZm4udGFiLkNvbnN0cnVjdG9yPWMsYS5mbi50YWIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBhLmZuLnRhYj1kLHRoaXN9O3ZhciBlPWZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKSxiLmNhbGwoYSh0aGlzKSwic2hvdyIpfTthKGRvY3VtZW50KS5vbigiY2xpY2suYnMudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXScsZSkub24oImNsaWNrLmJzLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0icGlsbCJdJyxlKX0oalF1ZXJ5KSwrZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZT1kLmRhdGEoImJzLmFmZml4IiksZj0ib2JqZWN0Ij09dHlwZW9mIGImJmI7ZXx8ZC5kYXRhKCJicy5hZmZpeCIsZT1uZXcgYyh0aGlzLGYpKSwic3RyaW5nIj09dHlwZW9mIGImJmVbYl0oKX0pfXZhciBjPWZ1bmN0aW9uKGIsZCl7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGMuREVGQVVMVFMsZCksdGhpcy4kdGFyZ2V0PWEodGhpcy5vcHRpb25zLnRhcmdldCkub24oInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpLm9uKCJjbGljay5icy5hZmZpeC5kYXRhLWFwaSIsYS5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PWEoYiksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2MuVkVSU0lPTj0iMy4zLjUiLGMuUkVTRVQ9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGMuREVGQVVMVFM9e29mZnNldDowLHRhcmdldDp3aW5kb3d9LGMucHJvdG90eXBlLmdldFN0YXRlPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxmPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCksZz10aGlzLiR0YXJnZXQuaGVpZ2h0KCk7aWYobnVsbCE9YyYmInRvcCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gYz5lPyJ0b3AiOiExO2lmKCJib3R0b20iPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWM/ZSt0aGlzLnVucGluPD1mLnRvcD8hMToiYm90dG9tIjphLWQ+PWUrZz8hMToiYm90dG9tIjt2YXIgaD1udWxsPT10aGlzLmFmZml4ZWQsaT1oP2U6Zi50b3Asaj1oP2c6YjtyZXR1cm4gbnVsbCE9YyYmYz49ZT8idG9wIjpudWxsIT1kJiZpK2o+PWEtZD8iYm90dG9tIjohMX0sYy5wcm90b3R5cGUuZ2V0UGlubmVkT2Zmc2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5waW5uZWRPZmZzZXQpcmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0O3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoYy5SRVNFVCkuYWRkQ2xhc3MoImFmZml4Iik7dmFyIGE9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGI9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9Yi50b3AtYX0sYy5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KGEucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxjLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7dmFyIGI9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxkPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1kLnRvcCxmPWQuYm90dG9tLGc9TWF0aC5tYXgoYShkb2N1bWVudCkuaGVpZ2h0KCksYShkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7Im9iamVjdCIhPXR5cGVvZiBkJiYoZj1lPWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZT1kLnRvcCh0aGlzLiRlbGVtZW50KSksImZ1bmN0aW9uIj09dHlwZW9mIGYmJihmPWQuYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgaD10aGlzLmdldFN0YXRlKGcsYixlLGYpO2lmKHRoaXMuYWZmaXhlZCE9aCl7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoInRvcCIsIiIpO3ZhciBpPSJhZmZpeCIrKGg/Ii0iK2g6IiIpLGo9YS5FdmVudChpKyIuYnMuYWZmaXgiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksai5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPWgsdGhpcy51bnBpbj0iYm90dG9tIj09aD90aGlzLmdldFBpbm5lZE9mZnNldCgpOm51bGwsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhjLlJFU0VUKS5hZGRDbGFzcyhpKS50cmlnZ2VyKGkucmVwbGFjZSgiYWZmaXgiLCJhZmZpeGVkIikrIi5icy5hZmZpeCIpfSJib3R0b20iPT1oJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmctYi1mfSl9fTt2YXIgZD1hLmZuLmFmZml4O2EuZm4uYWZmaXg9YixhLmZuLmFmZml4LkNvbnN0cnVjdG9yPWMsYS5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZm4uYWZmaXg9ZCx0aGlzfSxhKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YSgnW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmRhdGEoKTtkLm9mZnNldD1kLm9mZnNldHx8e30sbnVsbCE9ZC5vZmZzZXRCb3R0b20mJihkLm9mZnNldC5ib3R0b209ZC5vZmZzZXRCb3R0b20pLG51bGwhPWQub2Zmc2V0VG9wJiYoZC5vZmZzZXQudG9wPWQub2Zmc2V0VG9wKSxiLmNhbGwoYyxkKX0pfSl9KGpRdWVyeSk7"></script>
<script src="data:application/javascript;base64,LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjIgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCi8vIE9ubHkgcnVuIHRoaXMgY29kZSBpbiBJRSA4CmlmICghIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKCJNU0lFIDgiKSkgewohZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7dmFyIGM9YS5jcmVhdGVFbGVtZW50KCJwIiksZD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybiBjLmlubmVySFRNTD0ieDxzdHlsZT4iK2IrIjwvc3R5bGU+IixkLmluc2VydEJlZm9yZShjLmxhc3RDaGlsZCxkLmZpcnN0Q2hpbGQpfWZ1bmN0aW9uIGQoKXt2YXIgYT10LmVsZW1lbnRzO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT9hLnNwbGl0KCIgIik6YX1mdW5jdGlvbiBlKGEsYil7dmFyIGM9dC5lbGVtZW50czsic3RyaW5nIiE9dHlwZW9mIGMmJihjPWMuam9pbigiICIpKSwic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEuam9pbigiICIpKSx0LmVsZW1lbnRzPWMrIiAiK2EsaihiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPXNbYVtxXV07cmV0dXJuIGJ8fChiPXt9LHIrKyxhW3FdPXIsc1tyXT1iKSxifWZ1bmN0aW9uIGcoYSxjLGQpe2lmKGN8fChjPWIpLGwpcmV0dXJuIGMuY3JlYXRlRWxlbWVudChhKTtkfHwoZD1mKGMpKTt2YXIgZTtyZXR1cm4gZT1kLmNhY2hlW2FdP2QuY2FjaGVbYV0uY2xvbmVOb2RlKCk6cC50ZXN0KGEpPyhkLmNhY2hlW2FdPWQuY3JlYXRlRWxlbShhKSkuY2xvbmVOb2RlKCk6ZC5jcmVhdGVFbGVtKGEpLCFlLmNhbkhhdmVDaGlsZHJlbnx8by50ZXN0KGEpfHxlLnRhZ1Vybj9lOmQuZnJhZy5hcHBlbmRDaGlsZChlKX1mdW5jdGlvbiBoKGEsYyl7aWYoYXx8KGE9YiksbClyZXR1cm4gYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Yz1jfHxmKGEpO2Zvcih2YXIgZT1jLmZyYWcuY2xvbmVOb2RlKCksZz0wLGg9ZCgpLGk9aC5sZW5ndGg7aT5nO2crKyllLmNyZWF0ZUVsZW1lbnQoaFtnXSk7cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIpe2IuY2FjaGV8fChiLmNhY2hlPXt9LGIuY3JlYXRlRWxlbT1hLmNyZWF0ZUVsZW1lbnQsYi5jcmVhdGVGcmFnPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxiLmZyYWc9Yi5jcmVhdGVGcmFnKCkpLGEuY3JlYXRlRWxlbWVudD1mdW5jdGlvbihjKXtyZXR1cm4gdC5zaGl2TWV0aG9kcz9nKGMsYSxiKTpiLmNyZWF0ZUVsZW0oYyl9LGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD1GdW5jdGlvbigiaCxmIiwicmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49Zi5jbG9uZU5vZGUoKSxjPW4uY3JlYXRlRWxlbWVudDtoLnNoaXZNZXRob2RzJiYoIitkKCkuam9pbigpLnJlcGxhY2UoL1tcd1wtOl0rL2csZnVuY3Rpb24oYSl7cmV0dXJuIGIuY3JlYXRlRWxlbShhKSxiLmZyYWcuY3JlYXRlRWxlbWVudChhKSwnYygiJythKyciKSd9KSsiKTtyZXR1cm4gbn0iKSh0LGIuZnJhZyl9ZnVuY3Rpb24gaihhKXthfHwoYT1iKTt2YXIgZD1mKGEpO3JldHVybiF0LnNoaXZDU1N8fGt8fGQuaGFzQ1NTfHwoZC5oYXNDU1M9ISFjKGEsImFydGljbGUsYXNpZGUsZGlhbG9nLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbmF2LHNlY3Rpb257ZGlzcGxheTpibG9ja31tYXJre2JhY2tncm91bmQ6I0ZGMDtjb2xvcjojMDAwfXRlbXBsYXRle2Rpc3BsYXk6bm9uZX0iKSksbHx8aShhLGQpLGF9dmFyIGssbCxtPSIzLjcuMiIsbj1hLmh0bWw1fHx7fSxvPS9ePHxeKD86YnV0dG9ufG1hcHxzZWxlY3R8dGV4dGFyZWF8b2JqZWN0fGlmcmFtZXxvcHRpb258b3B0Z3JvdXApJC9pLHA9L14oPzphfGJ8Y29kZXxkaXZ8ZmllbGRzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aXxsYWJlbHxsaXxvbHxwfHF8c3BhbnxzdHJvbmd8c3R5bGV8dGFibGV8dGJvZHl8dGR8dGh8dHJ8dWwpJC9pLHE9Il9odG1sNXNoaXYiLHI9MCxzPXt9OyFmdW5jdGlvbigpe3RyeXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImEiKTthLmlubmVySFRNTD0iPHh5ej48L3h5ej4iLGs9ImhpZGRlbiJpbiBhLGw9MT09YS5jaGlsZE5vZGVzLmxlbmd0aHx8ZnVuY3Rpb24oKXtiLmNyZWF0ZUVsZW1lbnQoImEiKTt2YXIgYT1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGEuY2xvbmVOb2RlfHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8InVuZGVmaW5lZCI9PXR5cGVvZiBhLmNyZWF0ZUVsZW1lbnR9KCl9Y2F0Y2goYyl7az0hMCxsPSEwfX0oKTt2YXIgdD17ZWxlbWVudHM6bi5lbGVtZW50c3x8ImFiYnIgYXJ0aWNsZSBhc2lkZSBhdWRpbyBiZGkgY2FudmFzIGRhdGEgZGF0YWxpc3QgZGV0YWlscyBkaWFsb2cgZmlnY2FwdGlvbiBmaWd1cmUgZm9vdGVyIGhlYWRlciBoZ3JvdXAgbWFpbiBtYXJrIG1ldGVyIG5hdiBvdXRwdXQgcGljdHVyZSBwcm9ncmVzcyBzZWN0aW9uIHN1bW1hcnkgdGVtcGxhdGUgdGltZSB2aWRlbyIsdmVyc2lvbjptLHNoaXZDU1M6bi5zaGl2Q1NTIT09ITEsc3VwcG9ydHNVbmtub3duRWxlbWVudHM6bCxzaGl2TWV0aG9kczpuLnNoaXZNZXRob2RzIT09ITEsdHlwZToiZGVmYXVsdCIsc2hpdkRvY3VtZW50OmosY3JlYXRlRWxlbWVudDpnLGNyZWF0ZURvY3VtZW50RnJhZ21lbnQ6aCxhZGRFbGVtZW50czplfTthLmh0bWw1PXQsaihiKX0odGhpcyxkb2N1bWVudCk7Cn07Cg=="></script>
<script src="data:application/javascript;base64,LyohIFJlc3BvbmQuanMgdjEuNC4yOiBtaW4vbWF4LXdpZHRoIG1lZGlhIHF1ZXJ5IHBvbHlmaWxsICogQ29weXJpZ2h0IDIwMTMgU2NvdHQgSmVobAogKiBMaWNlbnNlZCB1bmRlciBodHRwczovL2dpdGh1Yi5jb20vc2NvdHRqZWhsL1Jlc3BvbmQvYmxvYi9tYXN0ZXIvTElDRU5TRS1NSVQKICogICovCgovLyBPbmx5IHJ1biB0aGlzIGNvZGUgaW4gSUUgOAppZiAoISF3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgiTVNJRSA4IikpIHsKIWZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjthLm1hdGNoTWVkaWE9YS5tYXRjaE1lZGlhfHxmdW5jdGlvbihhKXt2YXIgYixjPWEuZG9jdW1lbnRFbGVtZW50LGQ9Yy5maXJzdEVsZW1lbnRDaGlsZHx8Yy5maXJzdENoaWxkLGU9YS5jcmVhdGVFbGVtZW50KCJib2R5IiksZj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmLmlkPSJtcS10ZXN0LTEiLGYuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7dG9wOi0xMDBlbSIsZS5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIixlLmFwcGVuZENoaWxkKGYpLGZ1bmN0aW9uKGEpe3JldHVybiBmLmlubmVySFRNTD0nJnNoeTs8c3R5bGUgbWVkaWE9IicrYSsnIj4gI21xLXRlc3QtMSB7IHdpZHRoOiA0MnB4OyB9PC9zdHlsZT4nLGMuaW5zZXJ0QmVmb3JlKGUsZCksYj00Mj09PWYub2Zmc2V0V2lkdGgsYy5yZW1vdmVDaGlsZChlKSx7bWF0Y2hlczpiLG1lZGlhOmF9fX0oYS5kb2N1bWVudCl9KHRoaXMpLGZ1bmN0aW9uKGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKCl7dSghMCl9dmFyIGM9e307YS5yZXNwb25kPWMsYy51cGRhdGU9ZnVuY3Rpb24oKXt9O3ZhciBkPVtdLGU9ZnVuY3Rpb24oKXt2YXIgYj0hMTt0cnl7Yj1uZXcgYS5YTUxIdHRwUmVxdWVzdH1jYXRjaChjKXtiPW5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGJ9fSgpLGY9ZnVuY3Rpb24oYSxiKXt2YXIgYz1lKCk7YyYmKGMub3BlbigiR0VUIixhLCEwKSxjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQhPT1jLnJlYWR5U3RhdGV8fDIwMCE9PWMuc3RhdHVzJiYzMDQhPT1jLnN0YXR1c3x8YihjLnJlc3BvbnNlVGV4dCl9LDQhPT1jLnJlYWR5U3RhdGUmJmMuc2VuZChudWxsKSl9O2lmKGMuYWpheD1mLGMucXVldWU9ZCxjLnJlZ2V4PXttZWRpYTovQG1lZGlhW15ce10rXHsoW15ce1x9XSpce1teXH1ce10qXH0pKy9naSxrZXlmcmFtZXM6L0AoPzpcLSg/Om98bW96fHdlYmtpdClcLSk/a2V5ZnJhbWVzW15ce10rXHsoPzpbXlx7XH1dKlx7W15cfVx7XSpcfSkrW15cfV0qXH0vZ2ksdXJsczovKHVybFwoKVsnIl0/KFteXC9cKSciXVteOlwpJyJdKylbJyJdPyhcKSkvZyxmaW5kU3R5bGVzOi9AbWVkaWEgKihbXlx7XSspXHsoW1xTXHNdKz8pJC8sb25seTovKG9ubHlccyspPyhbYS16QS1aXSspXHM/LyxtaW53Oi9cKFtcc10qbWluXC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpLyxtYXh3Oi9cKFtcc10qbWF4XC13aWR0aFxzKjpbXHNdKihbXHNdKlswLTlcLl0rKShweHxlbSlbXHNdKlwpL30sYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQ9YS5tYXRjaE1lZGlhJiZudWxsIT09YS5tYXRjaE1lZGlhKCJvbmx5IGFsbCIpJiZhLm1hdGNoTWVkaWEoIm9ubHkgYWxsIikubWF0Y2hlcywhYy5tZWRpYVF1ZXJpZXNTdXBwb3J0ZWQpe3ZhciBnLGgsaSxqPWEuZG9jdW1lbnQsaz1qLmRvY3VtZW50RWxlbWVudCxsPVtdLG09W10sbj1bXSxvPXt9LHA9MzAscT1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGsscj1qLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJiYXNlIilbMF0scz1xLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIiksdD1mdW5jdGlvbigpe3ZhciBhLGI9ai5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPWouYm9keSxkPWsuc3R5bGUuZm9udFNpemUsZT1jJiZjLnN0eWxlLmZvbnRTaXplLGY9ITE7cmV0dXJuIGIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjFlbTt3aWR0aDoxZW0iLGN8fChjPWY9ai5jcmVhdGVFbGVtZW50KCJib2R5IiksYy5zdHlsZS5iYWNrZ3JvdW5kPSJub25lIiksay5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5zdHlsZS5mb250U2l6ZT0iMTAwJSIsYy5hcHBlbmRDaGlsZChiKSxmJiZrLmluc2VydEJlZm9yZShjLGsuZmlyc3RDaGlsZCksYT1iLm9mZnNldFdpZHRoLGY/ay5yZW1vdmVDaGlsZChjKTpjLnJlbW92ZUNoaWxkKGIpLGsuc3R5bGUuZm9udFNpemU9ZCxlJiYoYy5zdHlsZS5mb250U2l6ZT1lKSxhPWk9cGFyc2VGbG9hdChhKX0sdT1mdW5jdGlvbihiKXt2YXIgYz0iY2xpZW50V2lkdGgiLGQ9a1tjXSxlPSJDU1MxQ29tcGF0Ij09PWouY29tcGF0TW9kZSYmZHx8ai5ib2R5W2NdfHxkLGY9e30sbz1zW3MubGVuZ3RoLTFdLHI9KG5ldyBEYXRlKS5nZXRUaW1lKCk7aWYoYiYmZyYmcD5yLWcpcmV0dXJuIGEuY2xlYXJUaW1lb3V0KGgpLGg9YS5zZXRUaW1lb3V0KHUscCksdm9pZCAwO2c9cjtmb3IodmFyIHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXt2YXIgdz1sW3ZdLHg9dy5taW53LHk9dy5tYXh3LHo9bnVsbD09PXgsQT1udWxsPT09eSxCPSJlbSI7eCYmKHg9cGFyc2VGbG9hdCh4KSooeC5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSkseSYmKHk9cGFyc2VGbG9hdCh5KSooeS5pbmRleE9mKEIpPi0xP2l8fHQoKToxKSksdy5oYXNxdWVyeSYmKHomJkF8fCEoenx8ZT49eCl8fCEoQXx8eT49ZSkpfHwoZlt3Lm1lZGlhXXx8KGZbdy5tZWRpYV09W10pLGZbdy5tZWRpYV0ucHVzaChtW3cucnVsZXNdKSl9Zm9yKHZhciBDIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShDKSYmbltDXSYmbltDXS5wYXJlbnROb2RlPT09cSYmcS5yZW1vdmVDaGlsZChuW0NdKTtuLmxlbmd0aD0wO2Zvcih2YXIgRCBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkoRCkpe3ZhciBFPWouY3JlYXRlRWxlbWVudCgic3R5bGUiKSxGPWZbRF0uam9pbigiXG4iKTtFLnR5cGU9InRleHQvY3NzIixFLm1lZGlhPUQscS5pbnNlcnRCZWZvcmUoRSxvLm5leHRTaWJsaW5nKSxFLnN0eWxlU2hlZXQ/RS5zdHlsZVNoZWV0LmNzc1RleHQ9RjpFLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoRikpLG4ucHVzaChFKX19LHY9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEucmVwbGFjZShjLnJlZ2V4LmtleWZyYW1lcywiIikubWF0Y2goYy5yZWdleC5tZWRpYSksZj1lJiZlLmxlbmd0aHx8MDtiPWIuc3Vic3RyaW5nKDAsYi5sYXN0SW5kZXhPZigiLyIpKTt2YXIgZz1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKGMucmVnZXgudXJscywiJDEiK2IrIiQyJDMiKX0saD0hZiYmZDtiLmxlbmd0aCYmKGIrPSIvIiksaCYmKGY9MSk7Zm9yKHZhciBpPTA7Zj5pO2krKyl7dmFyIGosayxuLG87aD8oaj1kLG0ucHVzaChnKGEpKSk6KGo9ZVtpXS5tYXRjaChjLnJlZ2V4LmZpbmRTdHlsZXMpJiZSZWdFeHAuJDEsbS5wdXNoKFJlZ0V4cC4kMiYmZyhSZWdFeHAuJDIpKSksbj1qLnNwbGl0KCIsIiksbz1uLmxlbmd0aDtmb3IodmFyIHA9MDtvPnA7cCsrKWs9bltwXSxsLnB1c2goe21lZGlhOmsuc3BsaXQoIigiKVswXS5tYXRjaChjLnJlZ2V4Lm9ubHkpJiZSZWdFeHAuJDJ8fCJhbGwiLHJ1bGVzOm0ubGVuZ3RoLTEsaGFzcXVlcnk6ay5pbmRleE9mKCIoIik+LTEsbWludzprLm1hdGNoKGMucmVnZXgubWludykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIiksbWF4dzprLm1hdGNoKGMucmVnZXgubWF4dykmJnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsoUmVnRXhwLiQyfHwiIil9KX11KCl9LHc9ZnVuY3Rpb24oKXtpZihkLmxlbmd0aCl7dmFyIGI9ZC5zaGlmdCgpO2YoYi5ocmVmLGZ1bmN0aW9uKGMpe3YoYyxiLmhyZWYsYi5tZWRpYSksb1tiLmhyZWZdPSEwLGEuc2V0VGltZW91dChmdW5jdGlvbigpe3coKX0sMCl9KX19LHg9ZnVuY3Rpb24oKXtmb3IodmFyIGI9MDtiPHMubGVuZ3RoO2IrKyl7dmFyIGM9c1tiXSxlPWMuaHJlZixmPWMubWVkaWEsZz1jLnJlbCYmInN0eWxlc2hlZXQiPT09Yy5yZWwudG9Mb3dlckNhc2UoKTtlJiZnJiYhb1tlXSYmKGMuc3R5bGVTaGVldCYmYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQ/KHYoYy5zdHlsZVNoZWV0LnJhd0Nzc1RleHQsZSxmKSxvW2VdPSEwKTooIS9eKFthLXpBLVo6XSpcL1wvKS8udGVzdChlKSYmIXJ8fGUucmVwbGFjZShSZWdFeHAuJDEsIiIpLnNwbGl0KCIvIilbMF09PT1hLmxvY2F0aW9uLmhvc3QpJiYoIi8vIj09PWUuc3Vic3RyaW5nKDAsMikmJihlPWEubG9jYXRpb24ucHJvdG9jb2wrZSksZC5wdXNoKHtocmVmOmUsbWVkaWE6Zn0pKSl9dygpfTt4KCksYy51cGRhdGU9eCxjLmdldEVtVmFsdWU9dCxhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLGIsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9ucmVzaXplIixiKX19KHRoaXMpOwp9Owo="></script>
<style>h1 {font-size: 34px;}
       h1.title {font-size: 38px;}
       h2 {font-size: 30px;}
       h3 {font-size: 24px;}
       h4 {font-size: 18px;}
       h5 {font-size: 16px;}
       h6 {font-size: 12px;}
       code {color: inherit; background-color: rgba(0, 0, 0, 0.04);}
       pre:not([class]) { background-color: white }</style>
<script src="data:application/javascript;base64,LyohIGpRdWVyeSBVSSAtIHYxLjExLjQgLSAyMDE2LTAxLTA1CiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBjb3JlLmpzLCB3aWRnZXQuanMsIG1vdXNlLmpzLCBwb3NpdGlvbi5qcywgZHJhZ2dhYmxlLmpzLCBkcm9wcGFibGUuanMsIHJlc2l6YWJsZS5qcywgc2VsZWN0YWJsZS5qcywgc29ydGFibGUuanMsIGFjY29yZGlvbi5qcywgYXV0b2NvbXBsZXRlLmpzLCBidXR0b24uanMsIGRpYWxvZy5qcywgbWVudS5qcywgcHJvZ3Jlc3NiYXIuanMsIHNlbGVjdG1lbnUuanMsIHNsaWRlci5qcywgc3Bpbm5lci5qcywgdGFicy5qcywgdG9vbHRpcC5qcywgZWZmZWN0LmpzLCBlZmZlY3QtYmxpbmQuanMsIGVmZmVjdC1ib3VuY2UuanMsIGVmZmVjdC1jbGlwLmpzLCBlZmZlY3QtZHJvcC5qcywgZWZmZWN0LWV4cGxvZGUuanMsIGVmZmVjdC1mYWRlLmpzLCBlZmZlY3QtZm9sZC5qcywgZWZmZWN0LWhpZ2hsaWdodC5qcywgZWZmZWN0LXB1ZmYuanMsIGVmZmVjdC1wdWxzYXRlLmpzLCBlZmZlY3Qtc2NhbGUuanMsIGVmZmVjdC1zaGFrZS5qcywgZWZmZWN0LXNpemUuanMsIGVmZmVjdC1zbGlkZS5qcywgZWZmZWN0LXRyYW5zZmVyLmpzCiogQ29weXJpZ2h0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFsianF1ZXJ5Il0sZSk6ZShqUXVlcnkpfSkoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHMpe3ZhciBuLGEsbyxyPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT1yPyhuPXQucGFyZW50Tm9kZSxhPW4ubmFtZSx0LmhyZWYmJmEmJiJtYXAiPT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPyhvPWUoImltZ1t1c2VtYXA9JyMiK2ErIiddIilbMF0sISFvJiZpKG8pKTohMSk6KC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3Qocik/IXQuZGlzYWJsZWQ6ImEiPT09cj90LmhyZWZ8fHM6cykmJmkodCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5leHByLmZpbHRlcnMudmlzaWJsZSh0KSYmIWUodCkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIj09PWUuY3NzKHRoaXMsInZpc2liaWxpdHkiKX0pLmxlbmd0aH1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC52YWwoKTtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksdCE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIil9fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS4xMS40IixrZXlDb2RlOntCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7c2Nyb2xsUGFyZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuY3NzKCJwb3NpdGlvbiIpLHM9ImFic29sdXRlIj09PWksbj10Py8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLGE9dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gcyYmInN0YXRpYyI9PT10LmNzcygicG9zaXRpb24iKT8hMTpuLnRlc3QodC5jc3MoIm92ZXJmbG93IikrdC5jc3MoIm92ZXJmbG93LXkiKSt0LmNzcygib3ZlcmZsb3cteCIpKX0pLmVxKDApO3JldHVybiJmaXhlZCIhPT1pJiZhLmxlbmd0aD9hOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrZSl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhZS5kYXRhKGksdCl9fSk6ZnVuY3Rpb24odCxpLHMpe3JldHVybiEhZS5kYXRhKHQsc1szXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihpKXtyZXR1cm4gdChpLCFpc05hTihlLmF0dHIoaSwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSwidGFiaW5kZXgiKSxuPWlzTmFOKHMpO3JldHVybihufHxzPj0wKSYmdChpLCFuKX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHModCxpLHMsYSl7cmV0dXJuIGUuZWFjaChuLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYSYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksaX12YXIgbj0iV2lkdGgiPT09aT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sYT1pLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIraV09ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/b1siaW5uZXIiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCkrInB4Iil9KX0sZS5mblsib3V0ZXIiK2ldPWZ1bmN0aW9uKHQsbil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0P29bIm91dGVyIitpXS5jYWxsKHRoaXMsdCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCwhMCxuKSsicHgiKX0pfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKGkpKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxlLnVpLmllPSEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQpLmZvY3VzKCkscyYmcy5jYWxsKHQpfSxpKX0pOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5mb2N1cyksZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPSJvbnNlbGVjdHN0YXJ0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZChlKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX0sekluZGV4OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLHQpO2lmKHRoaXMubGVuZ3RoKWZvcih2YXIgaSxzLG49ZSh0aGlzWzBdKTtuLmxlbmd0aCYmblswXSE9PWRvY3VtZW50Oyl7aWYoaT1uLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PWl8fCJyZWxhdGl2ZSI9PT1pfHwiZml4ZWQiPT09aSkmJihzPXBhcnNlSW50KG4uY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKHMpJiYwIT09cykpcmV0dXJuIHM7bj1uLnBhcmVudCgpfXJldHVybiAwfX0pLGUudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKG4gaW4gcylhLnBsdWdpbnNbbl09YS5wbHVnaW5zW25dfHxbXSxhLnBsdWdpbnNbbl0ucHVzaChbaSxzW25dXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIG4sYT1lLnBsdWdpbnNbdF07aWYoYSYmKHN8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PWUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iobj0wO2EubGVuZ3RoPm47bisrKWUub3B0aW9uc1thW25dWzBdXSYmYVtuXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fTt2YXIgbj0wLGE9QXJyYXkucHJvdG90eXBlLnNsaWNlO2UuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcyxuLGE7Zm9yKGE9MDtudWxsIT0obj1pW2FdKTthKyspdHJ5e3M9ZS5fZGF0YShuLCJldmVudHMiKSxzJiZzLnJlbW92ZSYmZShuKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIil9Y2F0Y2gobyl7fXQoaSl9fShlLmNsZWFuRGF0YSksZS53aWRnZXQ9ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGg9e30sbD10LnNwbGl0KCIuIilbMF07cmV0dXJuIHQ9dC5zcGxpdCgiLiIpWzFdLG49bCsiLSIrdCxzfHwocz1pLGk9ZS5XaWRnZXQpLGUuZXhwclsiOiJdW24udG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24odCl7cmV0dXJuISFlLmRhdGEodCxuKX0sZVtsXT1lW2xdfHx7fSxhPWVbbF1bdF0sbz1lW2xdW3RdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVdpZGdldD8oYXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGUsdCksdm9pZCAwKTpuZXcgbyhlLHQpfSxlLmV4dGVuZChvLGEse3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxyPW5ldyBpLHIub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sci5vcHRpb25zKSxlLmVhY2gocyxmdW5jdGlvbih0LHMpe3JldHVybiBlLmlzRnVuY3Rpb24ocyk/KGhbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fc3VwZXIsYT10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9bix0PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPWksdGhpcy5fc3VwZXJBcHBseT1hLHR9fSgpLHZvaWQgMCk6KGhbdF09cyx2b2lkIDApfSksby5wcm90b3R5cGU9ZS53aWRnZXQuZXh0ZW5kKHIse3dpZGdldEV2ZW50UHJlZml4OmE/ci53aWRnZXRFdmVudFByZWZpeHx8dDp0fSxoLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTpsLHdpZGdldE5hbWU6dCx3aWRnZXRGdWxsTmFtZTpufSksYT8oZS5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsaSl7dmFyIHM9aS5wcm90b3R5cGU7ZS53aWRnZXQocy5uYW1lc3BhY2UrIi4iK3Mud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBhLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKSxvfSxlLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBpLHMsbj1hLmNhbGwoYXJndW1lbnRzLDEpLG89MCxyPW4ubGVuZ3RoO3I+bztvKyspZm9yKGkgaW4gbltvXSlzPW5bb11baV0sbltvXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09cyYmKHRbaV09ZS5pc1BsYWluT2JqZWN0KHMpP2UuaXNQbGFpbk9iamVjdCh0W2ldKT9lLndpZGdldC5leHRlbmQoe30sdFtpXSxzKTplLndpZGdldC5leHRlbmQoe30scyk6cyk7cmV0dXJuIHR9LGUud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbih0LGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHx0O2UuZm5bdF09ZnVuY3Rpb24obil7dmFyIG89InN0cmluZyI9PXR5cGVvZiBuLHI9YS5jYWxsKGFyZ3VtZW50cywxKSxoPXRoaXM7cmV0dXJuIG8/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGksYT1lLmRhdGEodGhpcyxzKTtyZXR1cm4iaW5zdGFuY2UiPT09bj8oaD1hLCExKTphP2UuaXNGdW5jdGlvbihhW25dKSYmIl8iIT09bi5jaGFyQXQoMCk/KGk9YVtuXS5hcHBseShhLHIpLGkhPT1hJiZ2b2lkIDAhPT1pPyhoPWkmJmkuanF1ZXJ5P2gucHVzaFN0YWNrKGkuZ2V0KCkpOmksITEpOnZvaWQgMCk6ZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbisiJyBmb3IgIit0KyIgd2lkZ2V0IGluc3RhbmNlIik6ZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK3QrIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK24rIiciKX0pOihyLmxlbmd0aCYmKG49ZS53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdChyKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLHMpO3Q/KHQub3B0aW9uKG58fHt9KSx0Ll9pbml0JiZ0Ll9pbml0KCkpOmUuZGF0YSh0aGlzLHMsbmV3IGkobix0aGlzKSl9KSksaH19LGUuV2lkZ2V0PWZ1bmN0aW9uKCl7fSxlLldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sZS5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLGRlZmF1bHRFbGVtZW50OiI8ZGl2PiIsb3B0aW9uczp7ZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24odCxpKXtpPWUoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PWUoaSksdGhpcy51dWlkPW4rKyx0aGlzLmV2ZW50TmFtZXNwYWNlPSIuIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksaSE9PXRoaXMmJihlLmRhdGEoaSx0aGlzLndpZGdldEZ1bGxOYW1lLHRoaXMpLHRoaXMuX29uKCEwLHRoaXMuZWxlbWVudCx7cmVtb3ZlOmZ1bmN0aW9uKGUpe2UudGFyZ2V0PT09aSYmdGhpcy5kZXN0cm95KCl9fSksdGhpcy5kb2N1bWVudD1lKGkuc3R5bGU/aS5vd25lckRvY3VtZW50OmkuZG9jdW1lbnR8fGkpLHRoaXMud2luZG93PWUodGhpcy5kb2N1bWVudFswXS5kZWZhdWx0Vmlld3x8dGhpcy5kb2N1bWVudFswXS5wYXJlbnRXaW5kb3cpKSx0aGlzLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksdCksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSkucmVtb3ZlRGF0YShlLmNhbWVsQ2FzZSh0aGlzLndpZGdldEZ1bGxOYW1lKSksdGhpcy53aWRnZXQoKS51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCAiKyJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuYmluZGluZ3MudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxfZGVzdHJveTplLm5vb3Asd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89dDtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlmKG89e30scz10LnNwbGl0KCIuIiksdD1zLnNoaWZ0KCkscy5sZW5ndGgpe2ZvcihuPW9bdF09ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1t0XSksYT0wO3MubGVuZ3RoLTE+YTthKyspbltzW2FdXT1uW3NbYV1dfHx7fSxuPW5bc1thXV07aWYodD1zLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1uW3RdP251bGw6blt0XTtuW3RdPWl9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW3RdP251bGw6dGhpcy5vcHRpb25zW3RdO29bdF09aX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhvKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXRoaXMuX3NldE9wdGlvbih0LGVbdF0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXT10LCJkaXNhYmxlZCI9PT1lJiYodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQiLCEhdCksdCYmKHRoaXMuaG92ZXJhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuZm9jdXNhYmxlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiExfSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITB9KX0sX29uOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPXRoaXM7ImJvb2xlYW4iIT10eXBlb2YgdCYmKHM9aSxpPXQsdD0hMSkscz8oaT1uPWUoaSksdGhpcy5iaW5kaW5ncz10aGlzLmJpbmRpbmdzLmFkZChpKSk6KHM9aSxpPXRoaXMuZWxlbWVudCxuPXRoaXMud2lkZ2V0KCkpLGUuZWFjaChzLGZ1bmN0aW9uKHMsbyl7ZnVuY3Rpb24gcigpe3JldHVybiB0fHxhLm9wdGlvbnMuZGlzYWJsZWQhPT0hMCYmIWUodGhpcykuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIik/KCJzdHJpbmciPT10eXBlb2Ygbz9hW29dOm8pLmFwcGx5KGEsYXJndW1lbnRzKTp2b2lkIDB9InN0cmluZyIhPXR5cGVvZiBvJiYoci5ndWlkPW8uZ3VpZD1vLmd1aWR8fHIuZ3VpZHx8ZS5ndWlkKyspO3ZhciBoPXMubWF0Y2goL14oW1x3Oi1dKilccyooLiopJC8pLGw9aFsxXSthLmV2ZW50TmFtZXNwYWNlLHU9aFsyXTt1P24uZGVsZWdhdGUodSxsLHIpOmkuYmluZChsLHIpfSl9LF9vZmY6ZnVuY3Rpb24odCxpKXtpPShpfHwiIikuc3BsaXQoIiAiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrIiAiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLHQudW5iaW5kKGkpLnVuZGVsZWdhdGUoaSksdGhpcy5iaW5kaW5ncz1lKHRoaXMuYmluZGluZ3Mubm90KHQpLmdldCgpKSx0aGlzLmZvY3VzYWJsZT1lKHRoaXMuZm9jdXNhYmxlLm5vdCh0KS5nZXQoKSksdGhpcy5ob3ZlcmFibGU9ZSh0aGlzLmhvdmVyYWJsZS5ub3QodCkuZ2V0KCkpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9zW2VdOmUpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksdHx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24odCl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKHQpLHRoaXMuX29uKHQse21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnNbdF07aWYocz1zfHx7fSxpPWUuRXZlbnQoaSksaS50eXBlPSh0PT09dGhpcy53aWRnZXRFdmVudFByZWZpeD90OnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrdCkudG9Mb3dlckNhc2UoKSxpLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sYT1pLm9yaWdpbmFsRXZlbnQpZm9yKG4gaW4gYSluIGluIGl8fChpW25dPWFbbl0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLHMpLCEoZS5pc0Z1bmN0aW9uKG8pJiZvLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KHMpKT09PSExfHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LGUuZWFjaCh7c2hvdzoiZmFkZUluIixoaWRlOiJmYWRlT3V0In0sZnVuY3Rpb24odCxpKXtlLldpZGdldC5wcm90b3R5cGVbIl8iK3RdPWZ1bmN0aW9uKHMsbixhKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBvLHI9bj9uPT09ITB8fCJudW1iZXIiPT10eXBlb2Ygbj9pOm4uZWZmZWN0fHxpOnQ7bj1ufHx7fSwibnVtYmVyIj09dHlwZW9mIG4mJihuPXtkdXJhdGlvbjpufSksbz0hZS5pc0VtcHR5T2JqZWN0KG4pLG4uY29tcGxldGU9YSxuLmRlbGF5JiZzLmRlbGF5KG4uZGVsYXkpLG8mJmUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFtyXT9zW3RdKG4pOnIhPT10JiZzW3JdP3Nbcl0obi5kdXJhdGlvbixuLmVhc2luZyxhKTpzLnF1ZXVlKGZ1bmN0aW9uKGkpe2UodGhpcylbdF0oKSxhJiZhLmNhbGwoc1swXSksaSgpfSl9fSksZS53aWRnZXQ7dmFyIG89ITE7ZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbigpe289ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NhbmNlbDoiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7cmV0dXJuITA9PT1lLmRhdGEoaS50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKT8oZS5yZW1vdmVEYXRhKGkudGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMSk6dm9pZCAwfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIW8pe3RoaXMuX21vdXNlTW92ZWQ9ITEsdGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKHQpLHRoaXMuX21vdXNlRG93bkV2ZW50PXQ7dmFyIGk9dGhpcyxzPTE9PT10LndoaWNoLG49InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsJiZ0LnRhcmdldC5ub2RlTmFtZT9lKHQudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtyZXR1cm4gcyYmIW4mJnRoaXMuX21vdXNlQ2FwdHVyZSh0KT8odGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0KSE9PSExLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyh0LnByZXZlbnREZWZhdWx0KCksITApOighMD09PWUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZlLnJlbW92ZURhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gaS5fbW91c2VNb3ZlKGUpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlVXAoZSl9LHRoaXMuZG9jdW1lbnQuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdC5wcmV2ZW50RGVmYXVsdCgpLG89ITAsITApKTohMH19LF9tb3VzZU1vdmU6ZnVuY3Rpb24odCl7aWYodGhpcy5fbW91c2VNb3ZlZCl7aWYoZS51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk+ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSYmIXQuYnV0dG9uKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpO2lmKCF0LndoaWNoKXJldHVybiB0aGlzLl9tb3VzZVVwKHQpfXJldHVybih0LndoaWNofHx0LmJ1dHRvbikmJih0aGlzLl9tb3VzZU1vdmVkPSEwKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyh0KSx0LnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsdCkhPT0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKHQpOnRoaXMuX21vdXNlVXAodCkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdGhpcy5fbW91c2VTdGFydGVkJiYodGhpcy5fbW91c2VTdGFydGVkPSExLHQudGFyZ2V0PT09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZlLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiLCEwKSx0aGlzLl9tb3VzZVN0b3AodCkpLG89ITEsITF9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC1lLnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS1lLnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLHQsaSl7cmV0dXJuW3BhcnNlRmxvYXQoZVswXSkqKHAudGVzdChlWzBdKT90LzEwMDoxKSxwYXJzZUZsb2F0KGVbMV0pKihwLnRlc3QoZVsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkodCxpKXtyZXR1cm4gcGFyc2VJbnQoZS5jc3ModCxpKSwxMCl8fDB9ZnVuY3Rpb24gcyh0KXt2YXIgaT10WzBdO3JldHVybiA5PT09aS5ub2RlVHlwZT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOjAsbGVmdDowfX06ZS5pc1dpbmRvdyhpKT97d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpLG9mZnNldDp7dG9wOnQuc2Nyb2xsVG9wKCksbGVmdDp0LnNjcm9sbExlZnQoKX19OmkucHJldmVudERlZmF1bHQ/e3dpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0Ont0b3A6aS5wYWdlWSxsZWZ0OmkucGFnZVh9fTp7d2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSxvZmZzZXQ6dC5vZmZzZXQoKX19ZS51aT1lLnVpfHx7fTt2YXIgbixhLG89TWF0aC5tYXgscj1NYXRoLmFicyxoPU1hdGgucm91bmQsbD0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxkPS9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLGM9L15cdysvLHA9LyUkLyxmPWUuZm4ucG9zaXRpb247ZS5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO3ZhciB0LGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxhPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSx0PWEub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1hLm9mZnNldFdpZHRoLHQ9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49dC1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPXQuaXNXaW5kb3d8fHQuaXNEb2N1bWVudD8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy14Iikscz10LmlzV2luZG93fHx0LmlzRG9jdW1lbnQ/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLG49InNjcm9sbCI9PT1pfHwiYXV0byI9PT1pJiZ0LndpZHRoPHQuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxhPSJzY3JvbGwiPT09c3x8ImF1dG8iPT09cyYmdC5oZWlnaHQ8dC5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtyZXR1cm57d2lkdGg6YT9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6bj9lLnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24odCl7dmFyIGk9ZSh0fHx3aW5kb3cpLHM9ZS5pc1dpbmRvdyhpWzBdKSxuPSEhaVswXSYmOT09PWlbMF0ubm9kZVR5cGU7cmV0dXJue2VsZW1lbnQ6aSxpc1dpbmRvdzpzLGlzRG9jdW1lbnQ6bixvZmZzZXQ6aS5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDppLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6aS5zY3JvbGxUb3AoKSx3aWR0aDpzfHxuP2kud2lkdGgoKTppLm91dGVyV2lkdGgoKSxoZWlnaHQ6c3x8bj9pLmhlaWdodCgpOmkub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5vZilyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj1lLmV4dGVuZCh7fSxuKTt2YXIgcCxtLGcsdix5LGIsXz1lKG4ub2YpLHg9ZS5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKG4ud2l0aGluKSx3PWUucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyh4KSxrPShuLmNvbGxpc2lvbnx8ImZsaXAiKS5zcGxpdCgiICIpLFQ9e307cmV0dXJuIGI9cyhfKSxfWzBdLnByZXZlbnREZWZhdWx0JiYobi5hdD0ibGVmdCB0b3AiKSxtPWIud2lkdGgsZz1iLmhlaWdodCx2PWIub2Zmc2V0LHk9ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGUsdCxpPShuW3RoaXNdfHwiIikuc3BsaXQoIiAiKTsxPT09aS5sZW5ndGgmJihpPWwudGVzdChpWzBdKT9pLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoaVswXSk/WyJjZW50ZXIiXS5jb25jYXQoaSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksaVswXT1sLnRlc3QoaVswXSk/aVswXToiY2VudGVyIixpWzFdPXUudGVzdChpWzFdKT9pWzFdOiJjZW50ZXIiLGU9ZC5leGVjKGlbMF0pLHQ9ZC5leGVjKGlbMV0pLFRbdGhpc109W2U/ZVswXTowLHQ/dFswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT1rLmxlbmd0aCYmKGtbMV09a1swXSksInJpZ2h0Ij09PW4uYXRbMF0/eS5sZWZ0Kz1tOiJjZW50ZXIiPT09bi5hdFswXSYmKHkubGVmdCs9bS8yKSwiYm90dG9tIj09PW4uYXRbMV0/eS50b3ArPWc6ImNlbnRlciI9PT1uLmF0WzFdJiYoeS50b3ArPWcvMikscD10KFQuYXQsbSxnKSx5LmxlZnQrPXBbMF0seS50b3ArPXBbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbCx1PWUodGhpcyksZD11Lm91dGVyV2lkdGgoKSxjPXUub3V0ZXJIZWlnaHQoKSxmPWkodGhpcywibWFyZ2luTGVmdCIpLGI9aSh0aGlzLCJtYXJnaW5Ub3AiKSxEPWQrZitpKHRoaXMsIm1hcmdpblJpZ2h0Iikrdy53aWR0aCxTPWMrYitpKHRoaXMsIm1hcmdpbkJvdHRvbSIpK3cuaGVpZ2h0LE49ZS5leHRlbmQoe30seSksTT10KFQubXksdS5vdXRlcldpZHRoKCksdS5vdXRlckhlaWdodCgpKTsicmlnaHQiPT09bi5teVswXT9OLmxlZnQtPWQ6ImNlbnRlciI9PT1uLm15WzBdJiYoTi5sZWZ0LT1kLzIpLCJib3R0b20iPT09bi5teVsxXT9OLnRvcC09YzoiY2VudGVyIj09PW4ubXlbMV0mJihOLnRvcC09Yy8yKSxOLmxlZnQrPU1bMF0sTi50b3ArPU1bMV0sYXx8KE4ubGVmdD1oKE4ubGVmdCksTi50b3A9aChOLnRvcCkpLHM9e21hcmdpbkxlZnQ6ZixtYXJnaW5Ub3A6Yn0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHQsaSl7ZS51aS5wb3NpdGlvbltrW3RdXSYmZS51aS5wb3NpdGlvbltrW3RdXVtpXShOLHt0YXJnZXRXaWR0aDptLHRhcmdldEhlaWdodDpnLGVsZW1XaWR0aDpkLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpzLGNvbGxpc2lvbldpZHRoOkQsY29sbGlzaW9uSGVpZ2h0OlMsb2Zmc2V0OltwWzBdK01bMF0scFsxXStNWzFdXSxteTpuLm15LGF0Om4uYXQsd2l0aGluOngsZWxlbTp1fSl9KSxuLnVzaW5nJiYobD1mdW5jdGlvbihlKXt2YXIgdD12LmxlZnQtTi5sZWZ0LGk9dCttLWQscz12LnRvcC1OLnRvcCxhPXMrZy1jLGg9e3RhcmdldDp7ZWxlbWVudDpfLGxlZnQ6di5sZWZ0LHRvcDp2LnRvcCx3aWR0aDptLGhlaWdodDpnfSxlbGVtZW50OntlbGVtZW50OnUsbGVmdDpOLmxlZnQsdG9wOk4udG9wLHdpZHRoOmQsaGVpZ2h0OmN9LGhvcml6b250YWw6MD5pPyJsZWZ0Ijp0PjA/InJpZ2h0IjoiY2VudGVyIix2ZXJ0aWNhbDowPmE/InRvcCI6cz4wPyJib3R0b20iOiJtaWRkbGUifTtkPm0mJm0+cih0K2kpJiYoaC5ob3Jpem9udGFsPSJjZW50ZXIiKSxjPmcmJmc+cihzK2EpJiYoaC52ZXJ0aWNhbD0ibWlkZGxlIiksaC5pbXBvcnRhbnQ9byhyKHQpLHIoaSkpPm8ocihzKSxyKGEpKT8iaG9yaXpvbnRhbCI6InZlcnRpY2FsIixuLnVzaW5nLmNhbGwodGhpcyxlLGgpfSksdS5vZmZzZXQoZS5leHRlbmQoTix7dXNpbmc6bH0pKX0pfSxlLnVpLnBvc2l0aW9uPXtmaXQ6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbExlZnQ6cy5vZmZzZXQubGVmdCxhPXMud2lkdGgscj1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGg9bi1yLGw9cit0LmNvbGxpc2lvbldpZHRoLWEtbjt0LmNvbGxpc2lvbldpZHRoPmE/aD4wJiYwPj1sPyhpPWUubGVmdCtoK3QuY29sbGlzaW9uV2lkdGgtYS1uLGUubGVmdCs9aC1pKTplLmxlZnQ9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbldpZHRoOm46aD4wP2UubGVmdCs9aDpsPjA/ZS5sZWZ0LT1sOmUubGVmdD1vKGUubGVmdC1yLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dC53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsVG9wOnMub2Zmc2V0LnRvcCxhPXQud2l0aGluLmhlaWdodCxyPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGg9bi1yLGw9cit0LmNvbGxpc2lvbkhlaWdodC1hLW47dC5jb2xsaXNpb25IZWlnaHQ+YT9oPjAmJjA+PWw/KGk9ZS50b3AraCt0LmNvbGxpc2lvbkhlaWdodC1hLW4sZS50b3ArPWgtaSk6ZS50b3A9bD4wJiYwPj1oP246aD5sP24rYS10LmNvbGxpc2lvbkhlaWdodDpuOmg+MD9lLnRvcCs9aDpsPjA/ZS50b3AtPWw6ZS50b3A9byhlLnRvcC1yLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dC53aXRoaW4sYT1uLm9mZnNldC5sZWZ0K24uc2Nyb2xsTGVmdCxvPW4ud2lkdGgsaD1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LGw9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCx1PWwtaCxkPWwrdC5jb2xsaXNpb25XaWR0aC1vLWgsYz0ibGVmdCI9PT10Lm15WzBdPy10LmVsZW1XaWR0aDoicmlnaHQiPT09dC5teVswXT90LmVsZW1XaWR0aDowLHA9ImxlZnQiPT09dC5hdFswXT90LnRhcmdldFdpZHRoOiJyaWdodCI9PT10LmF0WzBdPy10LnRhcmdldFdpZHRoOjAsZj0tMip0Lm9mZnNldFswXTswPnU/KGk9ZS5sZWZ0K2MrcCtmK3QuY29sbGlzaW9uV2lkdGgtby1hLCgwPml8fHIodSk+aSkmJihlLmxlZnQrPWMrcCtmKSk6ZD4wJiYocz1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0K2MrcCtmLWgsKHM+MHx8ZD5yKHMpKSYmKGUubGVmdCs9YytwK2YpKX0sdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPXQud2l0aGluLGE9bi5vZmZzZXQudG9wK24uc2Nyb2xsVG9wLG89bi5oZWlnaHQsaD1uLmlzV2luZG93P24uc2Nyb2xsVG9wOm4ub2Zmc2V0LnRvcCxsPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLHU9bC1oLGQ9bCt0LmNvbGxpc2lvbkhlaWdodC1vLWgsYz0idG9wIj09PXQubXlbMV0scD1jPy10LmVsZW1IZWlnaHQ6ImJvdHRvbSI9PT10Lm15WzFdP3QuZWxlbUhlaWdodDowLGY9InRvcCI9PT10LmF0WzFdP3QudGFyZ2V0SGVpZ2h0OiJib3R0b20iPT09dC5hdFsxXT8tdC50YXJnZXRIZWlnaHQ6MCxtPS0yKnQub2Zmc2V0WzFdOzA+dT8ocz1lLnRvcCtwK2YrbSt0LmNvbGxpc2lvbkhlaWdodC1vLWEsKDA+c3x8cih1KT5zKSYmKGUudG9wKz1wK2YrbSkpOmQ+MCYmKGk9ZS50b3AtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3ArcCtmK20taCwoaT4wfHxkPnIoaSkpJiYoZS50b3ArPXArZittKSl9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19LGZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sbyxyPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0saD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocj8iZGl2IjoiYm9keSIpLHM9e3Zpc2liaWxpdHk6ImhpZGRlbiIsd2lkdGg6MCxoZWlnaHQ6MCxib3JkZXI6MCxtYXJnaW46MCxiYWNrZ3JvdW5kOiJub25lIn0sciYmZS5leHRlbmQocyx7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiItMTAwMHB4Iix0b3A6Ii0xMDAwcHgifSk7Zm9yKG8gaW4gcyl0LnN0eWxlW29dPXNbb107dC5hcHBlbmRDaGlsZChoKSxpPXJ8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxpLmluc2VydEJlZm9yZSh0LGkuZmlyc3RDaGlsZCksaC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDEwLjc0MzIyMjJweDsiLG49ZShoKS5vZmZzZXQoKS5sZWZ0LGE9bj4xMCYmMTE+bix0LmlubmVySFRNTD0iIixpLnJlbW92ZUNoaWxkKHQpfSgpfSgpLGUudWkucG9zaXRpb24sZS53aWRnZXQoInVpLmRyYWdnYWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7Im9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmKHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudCkuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT8odGhpcy5kZXN0cm95T25DbGVhcj0hMCx2b2lkIDApOih0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCksdm9pZCAwKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KHQpLHRoaXMuaGVscGVyfHxpLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KHRoaXMuX2Jsb2NrRnJhbWVzKGkuaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6aS5pZnJhbWVGaXgpLCEwKTohMSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbih0KXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQodCkubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5hcHBlbmRUbyh0LnBhcmVudCgpKS5vdXRlcldpZHRoKHQub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodCh0Lm91dGVySGVpZ2h0KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuZG9jdW1lbnRbMF07aWYodGhpcy5oYW5kbGVFbGVtZW50LmlzKHQudGFyZ2V0KSl0cnl7aS5hY3RpdmVFbGVtZW50JiYiYm9keSIhPT1pLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpLmFjdGl2ZUVsZW1lbnQpLmJsdXIoKX1jYXRjaChzKXt9fSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHModCksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0LCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbm9ybWFsaXplUmlnaHRCb3R0b20oKSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwhaSl7dmFyIHM9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxzKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIsZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VuYmxvY2tGcmFtZXMoKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSx0aGlzLmhhbmRsZUVsZW1lbnQuaXModC50YXJnZXQpJiZ0aGlzLmVsZW1lbnQuZm9jdXMoKSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIWUodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX3NldEhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudD10aGlzLm9wdGlvbnMuaGFuZGxlP3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpOnRoaXMuZWxlbWVudCx0aGlzLmhhbmRsZUVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1oYW5kbGUiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlRWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlLWhhbmRsZSIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucyxzPWUuaXNGdW5jdGlvbihpLmhlbHBlciksbj1zP2UoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxuLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzJiZuWzBdPT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksblswXT09PXRoaXMuZWxlbWVudFswXXx8LyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qobi5jc3MoInBvc2l0aW9uIikpfHxuLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLG59LF9zZXRQb3NpdGlvblJlbGF0aXZlOmZ1bmN0aW9uKCl7L14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdChlLnRhZ05hbWUpfHxlPT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4iYWJzb2x1dGUiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1pJiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksdD10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrKHQ/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zLGE9dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVtlKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLGUod2luZG93KS5zY3JvbGxMZWZ0KCkrZSh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCkrKGUod2luZG93KS5oZWlnaHQoKXx8YS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx2b2lkIDApOiJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsZShhKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUoYSkuaGVpZ2h0KCl8fGEuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOigicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoIm92ZXJmbG93IikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLCh0P01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKHQ/TWF0aC5tYXgocy5zY3JvbGxIZWlnaHQscy5vZmZzZXRIZWlnaHQpOnMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSx2b2lkIDApOih0aGlzLmNvbnRhaW5tZW50PW51bGwsdm9pZCAwKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsdCl7dHx8KHQ9dGhpcy5wb3NpdGlvbik7dmFyIGk9ImFic29sdXRlIj09PWU/MTotMSxzPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6dC50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKmkrdGhpcy5vZmZzZXQucGFyZW50LnRvcCppLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OnQubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnM/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCkqaX19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuLGEsbz10aGlzLm9wdGlvbnMscj10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKSxoPWUucGFnZVgsbD1lLnBhZ2VZO3JldHVybiByJiZ0aGlzLm9mZnNldC5zY3JvbGx8fCh0aGlzLm9mZnNldC5zY3JvbGw9e3RvcDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxsZWZ0OnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX0pLHQmJih0aGlzLmNvbnRhaW5tZW50JiYodGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlQ29udGFpbmVyLm9mZnNldCgpLGk9W3RoaXMuY29udGFpbm1lbnRbMF0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0rcy50b3AsdGhpcy5jb250YWlubWVudFsyXStzLmxlZnQsdGhpcy5jb250YWlubWVudFszXStzLnRvcF0pOmk9dGhpcy5jb250YWlubWVudCxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aVswXSYmKGg9aVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxpWzFdJiYobD1pWzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0mJihoPWlbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+aVszXSYmKGw9aVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxvLmdyaWQmJihuPW8uZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVkpL28uZ3JpZFsxXSkqby5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWSxsPWk/bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV18fG4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10/bjpuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXT9uLW8uZ3JpZFsxXTpuK28uZ3JpZFsxXTpuLGE9by5ncmlkWzBdP3RoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChoLXRoaXMub3JpZ2luYWxQYWdlWCkvby5ncmlkWzBdKSpvLmdyaWRbMF06dGhpcy5vcmlnaW5hbFBhZ2VYLGg9aT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF18fGEtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdP2E6YS10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdP2Etby5ncmlkWzBdOmErby5ncmlkWzBdOmEpLCJ5Ij09PW8uYXhpcyYmKGg9dGhpcy5vcmlnaW5hbFBhZ2VYKSwieCI9PT1vLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnI/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSxsZWZ0OmgtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX25vcm1hbGl6ZVJpZ2h0Qm90dG9tOmZ1bmN0aW9uKCl7InkiIT09dGhpcy5vcHRpb25zLmF4aXMmJiJhdXRvIiE9PXRoaXMuaGVscGVyLmNzcygicmlnaHQiKSYmKHRoaXMuaGVscGVyLndpZHRoKHRoaXMuaGVscGVyLndpZHRoKCkpLHRoaXMuaGVscGVyLmNzcygicmlnaHQiLCJhdXRvIikpLCJ4IiE9PXRoaXMub3B0aW9ucy5heGlzJiYiYXV0byIhPT10aGlzLmhlbHBlci5jc3MoImJvdHRvbSIpJiYodGhpcy5oZWxwZXIuaGVpZ2h0KHRoaXMuaGVscGVyLmhlaWdodCgpKSx0aGlzLmhlbHBlci5jc3MoImJvdHRvbSIsImF1dG8iKSl9LF90cmlnZ2VyOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gcz1zfHx0aGlzLl91aUhhc2goKSxlLnVpLnBsdWdpbi5jYWxsKHRoaXMsdCxbaSxzLHRoaXNdLCEwKSwvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KHQpJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSxzLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzKSxlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLHQsaSxzKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5zb3J0YWJsZXM9W10sZShzLm9wdGlvbnMuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLnNvcnRhYmxlKCJpbnN0YW5jZSIpO2kmJiFpLm9wdGlvbnMuZGlzYWJsZWQmJihzLnNvcnRhYmxlcy5wdXNoKGkpLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pKX0pfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lLmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgZT10aGlzO2UuaXNPdmVyPyhlLmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsZS5fc3RvcmVkQ1NTPXtwb3NpdGlvbjplLnBsYWNlaG9sZGVyLmNzcygicG9zaXRpb24iKSx0b3A6ZS5wbGFjZWhvbGRlci5jc3MoInRvcCIpLGxlZnQ6ZS5wbGFjZWhvbGRlci5jc3MoImxlZnQiKX0sZS5fbW91c2VTdG9wKHQpLGUub3B0aW9ucy5oZWxwZXI9ZS5vcHRpb25zLl9oZWxwZXIpOihlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxuKSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7ZS5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIG49ITEsYT10aGlzO2EucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyxhLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsYS5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssYS5faW50ZXJzZWN0c1dpdGgoYS5jb250YWluZXJDYWNoZSkmJihuPSEwLGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uQWJzPXMucG9zaXRpb25BYnMsdGhpcy5oZWxwZXJQcm9wb3J0aW9ucz1zLmhlbHBlclByb3BvcnRpb25zLHRoaXMub2Zmc2V0LmNsaWNrPXMub2Zmc2V0LmNsaWNrLHRoaXMhPT1hJiZ0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lckNhY2hlKSYmZS5jb250YWlucyhhLmVsZW1lbnRbMF0sdGhpcy5lbGVtZW50WzBdKSYmKG49ITEpLG4KfSkpLG4/KGEuaXNPdmVyfHwoYS5pc092ZXI9MSxzLl9wYXJlbnQ9aS5oZWxwZXIucGFyZW50KCksYS5jdXJyZW50SXRlbT1pLmhlbHBlci5hcHBlbmRUbyhhLmVsZW1lbnQpLmRhdGEoInVpLXNvcnRhYmxlLWl0ZW0iLCEwKSxhLm9wdGlvbnMuX2hlbHBlcj1hLm9wdGlvbnMuaGVscGVyLGEub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LHQudGFyZ2V0PWEuY3VycmVudEl0ZW1bMF0sYS5fbW91c2VDYXB0dXJlKHQsITApLGEuX21vdXNlU3RhcnQodCwhMCwhMCksYS5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxhLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsYS5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LWEub2Zmc2V0LnBhcmVudC5sZWZ0LGEub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3AtYS5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxzLmRyb3BwZWQ9YS5lbGVtZW50LGUuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSkscy5jdXJyZW50SXRlbT1zLmVsZW1lbnQsYS5mcm9tT3V0c2lkZT1zKSxhLmN1cnJlbnRJdGVtJiYoYS5fbW91c2VEcmFnKHQpLGkucG9zaXRpb249YS5wb3NpdGlvbikpOmEuaXNPdmVyJiYoYS5pc092ZXI9MCxhLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsYS5vcHRpb25zLl9yZXZlcnQ9YS5vcHRpb25zLnJldmVydCxhLm9wdGlvbnMucmV2ZXJ0PSExLGEuX3RyaWdnZXIoIm91dCIsdCxhLl91aUhhc2goYSkpLGEuX21vdXNlU3RvcCh0LCEwKSxhLm9wdGlvbnMucmV2ZXJ0PWEub3B0aW9ucy5fcmV2ZXJ0LGEub3B0aW9ucy5oZWxwZXI9YS5vcHRpb25zLl9oZWxwZXIsYS5wbGFjZWhvbGRlciYmYS5wbGFjZWhvbGRlci5yZW1vdmUoKSxpLmhlbHBlci5hcHBlbmRUbyhzLl9wYXJlbnQpLHMuX3JlZnJlc2hPZmZzZXRzKHQpLGkucG9zaXRpb249cy5fZ2VuZXJhdGVQb3NpdGlvbih0LCEwKSxzLl90cmlnZ2VyKCJmcm9tU29ydGFibGUiLHQpLHMuZHJvcHBlZD0hMSxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUoImJvZHkiKSxhPXMub3B0aW9ucztuLmNzcygiY3Vyc29yIikmJihhLl9jdXJzb3I9bi5jc3MoImN1cnNvciIpKSxuLmNzcygiY3Vyc29yIixhLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsbi5fY3Vyc29yKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsIm9wYWNpdHkiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoIm9wYWNpdHkiKSYmKGEuX29wYWNpdHk9bi5jc3MoIm9wYWNpdHkiKSksbi5jc3MoIm9wYWNpdHkiLGEub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9vcGFjaXR5JiZlKGkuaGVscGVyKS5jc3MoIm9wYWNpdHkiLG4uX29wYWNpdHkpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic2Nyb2xsIix7c3RhcnQ6ZnVuY3Rpb24oZSx0LGkpe2kuc2Nyb2xsUGFyZW50Tm90SGlkZGVufHwoaS5zY3JvbGxQYXJlbnROb3RIaWRkZW49aS5oZWxwZXIuc2Nyb2xsUGFyZW50KCExKSksaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0hPT1pLmRvY3VtZW50WzBdJiYiSFRNTCIhPT1pLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXS50YWdOYW1lJiYoaS5vdmVyZmxvd09mZnNldD1pLnNjcm9sbFBhcmVudE5vdEhpZGRlbi5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucyxhPSExLG89cy5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0scj1zLmRvY3VtZW50WzBdO28hPT1yJiYiSFRNTCIhPT1vLnRhZ05hbWU/KG4uYXhpcyYmIngiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC50b3Arby5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P28uc2Nyb2xsVG9wPWE9by5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDp0LnBhZ2VZLXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihvLnNjcm9sbFRvcD1hPW8uc2Nyb2xsVG9wLW4uc2Nyb2xsU3BlZWQpKSxuLmF4aXMmJiJ5Ij09PW4uYXhpc3x8KHMub3ZlcmZsb3dPZmZzZXQubGVmdCtvLm9mZnNldFdpZHRoLXQucGFnZVg8bi5zY3JvbGxTZW5zaXRpdml0eT9vLnNjcm9sbExlZnQ9YT1vLnNjcm9sbExlZnQrbi5zY3JvbGxTcGVlZDp0LnBhZ2VYLXMub3ZlcmZsb3dPZmZzZXQubGVmdDxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoby5zY3JvbGxMZWZ0PWE9by5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKSk6KG4uYXhpcyYmIngiPT09bi5heGlzfHwodC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKHIpLnNjcm9sbFRvcChlKHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiYieSI9PT1uLmF4aXN8fCh0LnBhZ2VYLWUocikuc2Nyb2xsTGVmdCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YT1lKHIpLnNjcm9sbExlZnQoZShyKS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShyKS5zY3JvbGxMZWZ0KCkpPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihhPWUocikuc2Nyb2xsTGVmdChlKHIpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpKSxhIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhzLHQpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic25hcCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sZShuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHwiOmRhdGEodWktZHJhZ2dhYmxlKSI6bi5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQub2Zmc2V0KCk7dGhpcyE9PXMuZWxlbWVudFswXSYmcy5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOmkudG9wLGxlZnQ6aS5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbih0LGkscyl7dmFyIG4sYSxvLHIsaCxsLHUsZCxjLHAsZj1zLm9wdGlvbnMsbT1mLnNuYXBUb2xlcmFuY2UsZz1pLm9mZnNldC5sZWZ0LHY9ZytzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHk9aS5vZmZzZXQudG9wLGI9eStzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoYz1zLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtjPj0wO2MtLSloPXMuc25hcEVsZW1lbnRzW2NdLmxlZnQtcy5tYXJnaW5zLmxlZnQsbD1oK3Muc25hcEVsZW1lbnRzW2NdLndpZHRoLHU9cy5zbmFwRWxlbWVudHNbY10udG9wLXMubWFyZ2lucy50b3AsZD11K3Muc25hcEVsZW1lbnRzW2NdLmhlaWdodCxoLW0+dnx8Zz5sK218fHUtbT5ifHx5PmQrbXx8IWUuY29udGFpbnMocy5zbmFwRWxlbWVudHNbY10uaXRlbS5vd25lckRvY3VtZW50LHMuc25hcEVsZW1lbnRzW2NdLml0ZW0pPyhzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmcy5vcHRpb25zLnNuYXAucmVsZWFzZSYmcy5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHMuZWxlbWVudCx0LGUuZXh0ZW5kKHMuX3VpSGFzaCgpLHtzbmFwSXRlbTpzLnNuYXBFbGVtZW50c1tjXS5pdGVtfSkpLHMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nPSExKTooImlubmVyIiE9PWYuc25hcE1vZGUmJihuPW0+PU1hdGguYWJzKHUtYiksYT1tPj1NYXRoLmFicyhkLXkpLG89bT49TWF0aC5hYnMoaC12KSxyPW0+PU1hdGguYWJzKGwtZyksbiYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDp1LXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpkLGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omgtcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8YXx8b3x8ciwib3V0ZXIiIT09Zi5zbmFwTW9kZSYmKG49bT49TWF0aC5hYnModS15KSxhPW0+PU1hdGguYWJzKGQtYiksbz1tPj1NYXRoLmFicyhoLWcpLHI9bT49TWF0aC5hYnMobC12KSxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnUsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSksIXMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiYobnx8YXx8b3x8cnx8cCkmJnMub3B0aW9ucy5zbmFwLnNuYXAmJnMub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChzLmVsZW1lbnQsdCxlLmV4dGVuZChzLl91aUhhc2goKSx7c25hcEl0ZW06cy5zbmFwRWxlbWVudHNbY10uaXRlbX0pKSxzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZz1ufHxhfHxvfHxyfHxwKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9cy5vcHRpb25zLG89ZS5tYWtlQXJyYXkoZShhLnN0YWNrKSkuc29ydChmdW5jdGlvbih0LGkpe3JldHVybihwYXJzZUludChlKHQpLmNzcygiekluZGV4IiksMTApfHwwKS0ocGFyc2VJbnQoZShpKS5jc3MoInpJbmRleCIpLDEwKXx8MCl9KTtvLmxlbmd0aCYmKG49cGFyc2VJbnQoZShvWzBdKS5jc3MoInpJbmRleCIpLDEwKXx8MCxlKG8pLmVhY2goZnVuY3Rpb24odCl7ZSh0aGlzKS5jc3MoInpJbmRleCIsbit0KX0pLHRoaXMuY3NzKCJ6SW5kZXgiLG4rby5sZW5ndGgpKX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInpJbmRleCIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKGkuaGVscGVyKSxhPXMub3B0aW9ucztuLmNzcygiekluZGV4IikmJihhLl96SW5kZXg9bi5jc3MoInpJbmRleCIpKSxuLmNzcygiekluZGV4IixhLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl96SW5kZXgmJmUoaS5oZWxwZXIpLmNzcygiekluZGV4IixuLl96SW5kZXgpfX0pLGUudWkuZHJhZ2dhYmxlLGUud2lkZ2V0KCJ1aS5kcm9wcGFibGUiLHt2ZXJzaW9uOiIxLjExLjQiLHdpZGdldEV2ZW50UHJlZml4OiJkcm9wIixvcHRpb25zOnthY2NlcHQ6IioiLGFjdGl2ZUNsYXNzOiExLGFkZENsYXNzZXM6ITAsZ3JlZWR5OiExLGhvdmVyQ2xhc3M6ITEsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0IixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaT10aGlzLm9wdGlvbnMscz1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihzKT9zOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKHMpfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9YXJndW1lbnRzWzBdLHZvaWQgMCk6dD90OnQ9e3dpZHRoOnRoaXMuZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9hZGRUb01hbmFnZXI6ZnVuY3Rpb24odCl7ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0XT1lLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdfHxbXSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RdLnB1c2godGhpcyl9LF9zcGxpY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7ZS5sZW5ndGg+dDt0KyspZVt0XT09PXRoaXMmJmUuc3BsaWNlKHQsMSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZSh0KSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyb3BwYWJsZSB1aS1kcm9wcGFibGUtZGlzYWJsZWQiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe2lmKCJhY2NlcHQiPT09dCl0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhpKX07ZWxzZSBpZigic2NvcGUiPT09dCl7dmFyIHM9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZShzKSx0aGlzLl9hZGRUb01hbmFnZXIoaSl9dGhpcy5fc3VwZXIodCxpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpJiZ0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLGkmJnRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLHQsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKHQpe3ZhciBpPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbih0KXt2YXIgaT1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3V0Iix0LHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24odCxpKXt2YXIgcz1pfHxlLnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLm5vdCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT1lKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKTtyZXR1cm4gaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChzLGUuZXh0ZW5kKGkse29mZnNldDppLmVsZW1lbnQub2Zmc2V0KCl9KSxpLm9wdGlvbnMudG9sZXJhbmNlLHQpPyhuPSEwLCExKTp2b2lkIDB9KSxuPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHMuY3VycmVudEl0ZW18fHMuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHMpKSx0aGlzLmVsZW1lbnQpOiExKTohMX0sdWk6ZnVuY3Rpb24oZSl7cmV0dXJue2RyYWdnYWJsZTplLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQsaGVscGVyOmUuaGVscGVyLHBvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUucG9zaXRpb25BYnN9fX0pLGUudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsaSl7cmV0dXJuIGU+PXQmJnQraT5lfXJldHVybiBmdW5jdGlvbih0LGkscyxuKXtpZighaS5vZmZzZXQpcmV0dXJuITE7dmFyIGE9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrdC5tYXJnaW5zLmxlZnQsbz0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wK3QubWFyZ2lucy50b3Ascj1hK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaD1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGw9aS5vZmZzZXQubGVmdCx1PWkub2Zmc2V0LnRvcCxkPWwraS5wcm9wb3J0aW9ucygpLndpZHRoLGM9dStpLnByb3BvcnRpb25zKCkuaGVpZ2h0O3N3aXRjaChzKXtjYXNlImZpdCI6cmV0dXJuIGE+PWwmJmQ+PXImJm8+PXUmJmM+PWg7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBhK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5sJiZkPnItdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZvK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+dSYmYz5oLXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI7Y2FzZSJwb2ludGVyIjpyZXR1cm4gZShuLnBhZ2VZLHUsaS5wcm9wb3J0aW9ucygpLmhlaWdodCkmJmUobi5wYWdlWCxsLGkucHJvcG9ydGlvbnMoKS53aWR0aCk7Y2FzZSJ0b3VjaCI6cmV0dXJuKG8+PXUmJmM+PW98fGg+PXUmJmM+PWh8fHU+byYmaD5jKSYmKGE+PWwmJmQ+PWF8fHI+PWwmJmQ+PXJ8fGw+YSYmcj5kKTtkZWZhdWx0OnJldHVybiExfX19KCksZS51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sbz1pP2kudHlwZTpudWxsLHI9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLmFkZEJhY2soKTtlOmZvcihzPTA7YS5sZW5ndGg+cztzKyspaWYoIShhW3NdLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFhW3NdLmFjY2VwdC5jYWxsKGFbc10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKSl7Zm9yKG49MDtyLmxlbmd0aD5uO24rKylpZihyW25dPT09YVtzXS5lbGVtZW50WzBdKXthW3NdLnByb3BvcnRpb25zKCkuaGVpZ2h0PTA7Y29udGludWUgZX1hW3NdLnZpc2libGU9Im5vbmUiIT09YVtzXS5lbGVtZW50LmNzcygiZGlzcGxheSIpLGFbc10udmlzaWJsZSYmKCJtb3VzZWRvd24iPT09byYmYVtzXS5fYWN0aXZhdGUuY2FsbChhW3NdLGkpLGFbc10ub2Zmc2V0PWFbc10uZWxlbWVudC5vZmZzZXQoKSxhW3NdLnByb3BvcnRpb25zKHt3aWR0aDphW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OmFbc10uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KSl9fSxkcm9wOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ITE7cmV0dXJuIGUuZWFjaCgoZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkmJihzPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLGkpfHxzKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PSEwLHRoaXMuaXNvdmVyPSExLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLGkpKSl9KSxzfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxpKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxpKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSl7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsaSksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRpc2FibGVkJiYhdGhpcy5ncmVlZHlDaGlsZCYmdGhpcy52aXNpYmxlKXt2YXIgcyxuLGEsbz1lLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFvJiZ0aGlzLmlzb3Zlcj8iaXNvdXQiOm8mJiF0aGlzLmlzb3Zlcj8iaXNvdmVyIjpudWxsO3ImJih0aGlzLm9wdGlvbnMuZ3JlZWR5JiYobj10aGlzLm9wdGlvbnMuc2NvcGUsYT10aGlzLmVsZW1lbnQucGFyZW50cygiOmRhdGEodWktZHJvcHBhYmxlKSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmRyb3BwYWJsZSgiaW5zdGFuY2UiKS5vcHRpb25zLnNjb3BlPT09bn0pLGEubGVuZ3RoJiYocz1lKGFbMF0pLmRyb3BwYWJsZSgiaW5zdGFuY2UiKSxzLmdyZWVkeUNoaWxkPSJpc292ZXIiPT09cikpLHMmJiJpc292ZXIiPT09ciYmKHMuaXNvdmVyPSExLHMuaXNvdXQ9ITAscy5fb3V0LmNhbGwocyxpKSksdGhpc1tyXT0hMCx0aGlzWyJpc291dCI9PT1yPyJpc292ZXIiOiJpc291dCJdPSExLHRoaXNbImlzb3ZlciI9PT1yPyJfb3ZlciI6Il9vdXQiXS5jYWxsKHRoaXMsaSkscyYmImlzb3V0Ij09PXImJihzLmlzb3V0PSExLHMuaXNvdmVyPSEwLHMuX292ZXIuY2FsbChzLGkpKSl9fSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsaSl7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LGkpfX0sZS51aS5kcm9wcGFibGUsZS53aWRnZXQoInVpLnJlc2l6YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6OTAscmVzaXplOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9udW06ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSxfaXNOdW1iZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX0sX2hhc1Njcm9sbDpmdW5jdGlvbih0LGkpe2lmKCJoaWRkZW4iPT09ZSh0KS5jc3MoIm92ZXJmbG93IikpcmV0dXJuITE7dmFyIHM9aSYmImxlZnQiPT09aT8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsbj0hMTtyZXR1cm4gdFtzXT4wPyEwOih0W3NdPTEsbj10W3NdPjAsdFtzXT0wLG4pfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG4sYSxvPXRoaXMscj10aGlzLm9wdGlvbnM7aWYodGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1yZXNpemFibGUiKSxlLmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFyLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOnIuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOnIuaGVscGVyfHxyLmdob3N0fHxyLmFuaW1hdGU/ci5oZWxwZXJ8fCJ1aS1yZXNpemFibGUtaGVscGVyIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAoZSgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoInRvcCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcygibGVmdCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YSgidWktcmVzaXphYmxlIix0aGlzLmVsZW1lbnQucmVzaXphYmxlKCJpbnN0YW5jZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPXIuaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKSx0aGlzLl9oYW5kbGVzPWUoKSx0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PT1TdHJpbmcpZm9yKCJhbGwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPSJuLGUscyx3LHNlLHN3LG5lLG53IiksdD10aGlzLmhhbmRsZXMuc3BsaXQoIiwiKSx0aGlzLmhhbmRsZXM9e30saT0wO3QubGVuZ3RoPmk7aSsrKXM9ZS50cmltKHRbaV0pLGE9InVpLXJlc2l6YWJsZS0iK3Msbj1lKCI8ZGl2IGNsYXNzPSd1aS1yZXNpemFibGUtaGFuZGxlICIrYSsiJz48L2Rpdj4iKSxuLmNzcyh7ekluZGV4OnIuekluZGV4fSksInNlIj09PXMmJm4uYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2UiKSx0aGlzLmhhbmRsZXNbc109Ii51aS1yZXNpemFibGUtIitzLHRoaXMuZWxlbWVudC5hcHBlbmQobik7dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt2YXIgaSxzLG4sYTt0PXR8fHRoaXMuZWxlbWVudDtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpdGhpcy5oYW5kbGVzW2ldLmNvbnN0cnVjdG9yPT09U3RyaW5nP3RoaXMuaGFuZGxlc1tpXT10aGlzLmVsZW1lbnQuY2hpbGRyZW4odGhpcy5oYW5kbGVzW2ldKS5maXJzdCgpLnNob3coKToodGhpcy5oYW5kbGVzW2ldLmpxdWVyeXx8dGhpcy5oYW5kbGVzW2ldLm5vZGVUeXBlKSYmKHRoaXMuaGFuZGxlc1tpXT1lKHRoaXMuaGFuZGxlc1tpXSksdGhpcy5fb24odGhpcy5oYW5kbGVzW2ldLHttb3VzZWRvd246by5fbW91c2VEb3dufSkpLHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14odGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbikkL2kpJiYocz1lKHRoaXMuaGFuZGxlc1tpXSx0aGlzLmVsZW1lbnQpLGE9L3N3fG5lfG53fHNlfG58cy8udGVzdChpKT9zLm91dGVySGVpZ2h0KCk6cy5vdXRlcldpZHRoKCksbj1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KGkpPyJUb3AiOi9zZXxzd3xzLy50ZXN0KGkpPyJCb3R0b20iOi9eZSQvLnRlc3QoaSk/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpLHQuY3NzKG4sYSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmhhbmRsZXNbaV0pfSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXtvLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihuPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxvLmF4aXM9biYmblsxXT9uWzFdOiJzZSIpfSksci5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe3IuZGlzYWJsZWR8fChlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSxvLl9oYW5kbGVzLnNob3coKSl9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8by5yZXNpemluZ3x8KGUodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLG8uX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgdCxpPWZ1bmN0aW9uKHQpe2UodCkucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikucmVtb3ZlRGF0YSgidWktcmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSx0PXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOnQuY3NzKCJ0b3AiKSxsZWZ0OnQuY3NzKCJsZWZ0Iil9KS5pbnNlcnRBZnRlcih0KSx0LnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbj0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpcz1lKHRoaXMuaGFuZGxlc1tpXSlbMF0sKHM9PT10LnRhcmdldHx8ZS5jb250YWlucyhzLHQudGFyZ2V0KSkmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYT10aGlzLm9wdGlvbnMsbz10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsdGhpcy5fcmVuZGVyUHJveHkoKSxpPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSkscz10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSksYS5jb250YWlubWVudCYmKGkrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLHMrPWUoYS5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6dGhpcy5oZWxwZXIud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIuaGVpZ2h0KCl9Ont3aWR0aDpvLndpZHRoKCksaGVpZ2h0Om8uaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6by5vdXRlcldpZHRoKCksaGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5zaXplRGlmZj17d2lkdGg6by5vdXRlcldpZHRoKCktby53aWR0aCgpLGhlaWdodDpvLm91dGVySGVpZ2h0KCktby5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89Im51bWJlciI9PXR5cGVvZiBhLmFzcGVjdFJhdGlvP2EuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLG49ZSgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKSxlKCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIj09PW4/dGhpcy5heGlzKyItcmVzaXplIjpuKSxvLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0Iix0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG49dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sYT10aGlzLmF4aXMsbz10LnBhZ2VYLW4ubGVmdHx8MCxyPXQucGFnZVktbi50b3B8fDAsaD10aGlzLl9jaGFuZ2VbYV07cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksaD8oaT1oLmFwcGx5KHRoaXMsW3QsbyxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXModC5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSx0KSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLHQpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIix0KSxzPXRoaXMuX2FwcGx5Q2hhbmdlcygpLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLGUuaXNFbXB0eU9iamVjdChzKXx8KHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksdGhpcy5fdHJpZ2dlcigicmVzaXplIix0LHRoaXMudWkoKSksdGhpcy5fYXBwbHlDaGFuZ2VzKCkpLCExKTohMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLHMsbixhLG8scixoLGw9dGhpcy5vcHRpb25zLHU9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYoaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbj1zJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6dS5zaXplRGlmZi5oZWlnaHQsYT1zPzA6dS5zaXplRGlmZi53aWR0aCxvPXt3aWR0aDp1LmhlbHBlci53aWR0aCgpLWEsaGVpZ2h0OnUuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VJbnQodS5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsodS5wb3NpdGlvbi5sZWZ0LXUub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxoPXBhcnNlSW50KHUuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsodS5wb3NpdGlvbi50b3AtdS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGwsbC5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKG8se3RvcDpoLGxlZnQ6cn0pKSx1LmhlbHBlci5oZWlnaHQodS5zaXplLmhlaWdodCksdS5oZWxwZXIud2lkdGgodS5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFsLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVByZXZQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2UG9zaXRpb249e3RvcDp0aGlzLnBvc2l0aW9uLnRvcCxsZWZ0OnRoaXMucG9zaXRpb24ubGVmdH0sdGhpcy5wcmV2U2l6ZT17d2lkdGg6dGhpcy5zaXplLndpZHRoLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0fX0sX2FwcGx5Q2hhbmdlczpmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiB0aGlzLnBvc2l0aW9uLnRvcCE9PXRoaXMucHJldlBvc2l0aW9uLnRvcCYmKGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PXRoaXMucHJldlBvc2l0aW9uLmxlZnQmJihlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJihlLndpZHRoPXRoaXMuc2l6ZS53aWR0aCsicHgiKSx0aGlzLnNpemUuaGVpZ2h0IT09dGhpcy5wcmV2U2l6ZS5oZWlnaHQmJihlLmhlaWdodD10aGlzLnNpemUuaGVpZ2h0KyJweCIpLHRoaXMuaGVscGVyLmNzcyhlKSxlfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYSxvPXRoaXMub3B0aW9uczthPXttaW5XaWR0aDp0aGlzLl9pc051bWJlcihvLm1pbldpZHRoKT9vLm1pbldpZHRoOjAsbWF4V2lkdGg6dGhpcy5faXNOdW1iZXIoby5tYXhXaWR0aCk/by5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0OnRoaXMuX2lzTnVtYmVyKG8ubWluSGVpZ2h0KT9vLm1pbkhlaWdodDowLG1heEhlaWdodDp0aGlzLl9pc051bWJlcihvLm1heEhlaWdodCk/by5tYXhIZWlnaHQ6MS8wfSwodGhpcy5fYXNwZWN0UmF0aW98fGUpJiYodD1hLm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9YS5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9YS5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPWEubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyx0PmEubWluV2lkdGgmJihhLm1pbldpZHRoPXQpLHM+YS5taW5IZWlnaHQmJihhLm1pbkhlaWdodD1zKSxhLm1heFdpZHRoPmkmJihhLm1heFdpZHRoPWkpLGEubWF4SGVpZ2h0Pm4mJihhLm1heEhlaWdodD1uKSksdGhpcy5fdkJvdW5kYXJpZXM9YX0sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMuX2lzTnVtYmVyKGUubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9ZS5sZWZ0KSx0aGlzLl9pc051bWJlcihlLnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD1lLnRvcCksdGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD1lLmhlaWdodCksdGhpcy5faXNOdW1iZXIoZS53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9ZS53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uLGk9dGhpcy5zaXplLHM9dGhpcy5heGlzO3JldHVybiB0aGlzLl9pc051bWJlcihlLmhlaWdodCk/ZS53aWR0aD1lLmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiYoZS5oZWlnaHQ9ZS53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSwic3ciPT09cyYmKGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksIm53Ij09PXMmJihlLnRvcD10LnRvcCsoaS5oZWlnaHQtZS5oZWlnaHQpLGUubGVmdD10LmxlZnQrKGkud2lkdGgtZS53aWR0aCkpLGV9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl92Qm91bmRhcmllcyxpPXRoaXMuYXhpcyxzPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1heFdpZHRoJiZ0Lm1heFdpZHRoPGUud2lkdGgsbj10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWF4SGVpZ2h0JiZ0Lm1heEhlaWdodDxlLmhlaWdodCxhPXRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiZ0Lm1pbldpZHRoJiZ0Lm1pbldpZHRoPmUud2lkdGgsbz10aGlzLl9pc051bWJlcihlLmhlaWdodCkmJnQubWluSGVpZ2h0JiZ0Lm1pbkhlaWdodD5lLmhlaWdodCxyPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxsPS9zd3xud3x3Ly50ZXN0KGkpLHU9L253fG5lfG4vLnRlc3QoaSk7cmV0dXJuIGEmJihlLndpZHRoPXQubWluV2lkdGgpLG8mJihlLmhlaWdodD10Lm1pbkhlaWdodCkscyYmKGUud2lkdGg9dC5tYXhXaWR0aCksbiYmKGUuaGVpZ2h0PXQubWF4SGVpZ2h0KSxhJiZsJiYoZS5sZWZ0PXItdC5taW5XaWR0aCkscyYmbCYmKGUubGVmdD1yLXQubWF4V2lkdGgpLG8mJnUmJihlLnRvcD1oLXQubWluSGVpZ2h0KSxuJiZ1JiYoZS50b3A9aC10Lm1heEhlaWdodCksZS53aWR0aHx8ZS5oZWlnaHR8fGUubGVmdHx8IWUudG9wP2Uud2lkdGh8fGUuaGVpZ2h0fHxlLnRvcHx8IWUubGVmdHx8KGUubGVmdD1udWxsKTplLnRvcD1udWxsLGV9LF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsaT1bXSxzPVtlLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxlLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGUuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGUuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sbj1bZS5jc3MoInBhZGRpbmdUb3AiKSxlLmNzcygicGFkZGluZ1JpZ2h0IiksZS5jc3MoInBhZGRpbmdCb3R0b20iKSxlLmNzcygicGFkZGluZ0xlZnQiKV07ND50O3QrKylpW3RdPXBhcnNlSW50KHNbdF0sMTApfHwwLGlbdF0rPXBhcnNlSW50KG5bdF0sMTApfHwwO3JldHVybntoZWlnaHQ6aVswXStpWzJdLHdpZHRoOmlbMV0raVszXX19LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgZSx0PTAsaT10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoPnQ7dCsrKWU9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1t0XSx0aGlzLm91dGVyRGltZW5zaW9uc3x8KHRoaXMub3V0ZXJEaW1lbnNpb25zPXRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyhlKSksZS5jc3Moe2hlaWdodDppLmhlaWdodCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodHx8MCx3aWR0aDppLndpZHRoKCktdGhpcy5vdXRlckRpbWVuc2lvbnMud2lkdGh8fDB9KX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD10Lm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fGUoIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PiIpLHRoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLTEsaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLTEscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0KyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArInB4Iix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpKTp0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrdH19LHc6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrdCx3aWR0aDppLndpZHRoLXR9fSxuOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcz10aGlzLm9yaWdpbmFsU2l6ZSxuPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOm4udG9wK2ksaGVpZ2h0OnMuaGVpZ2h0LWl9fSxzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtpfX0sc2U6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxpLHNdKSl9LHN3OmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxuZTpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LGksc10pKX0sbnc6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxpLHNdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKHQsaSl7ZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW2ksdGhpcy51aSgpXSksInJlc2l6ZSIhPT10JiZ0aGlzLl90cmlnZ2VyKHQsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscz1pLm9wdGlvbnMsbj1pLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLGE9bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksbz1hJiZpLl9oYXNTY3JvbGwoblswXSwibGVmdCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1hPzA6aS5zaXplRGlmZi53aWR0aCxoPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1vfSxsPXBhcnNlSW50KGkuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGkucG9zaXRpb24ubGVmdC1pLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsdT1wYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGkucG9zaXRpb24udG9wLWkub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2kuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGgsdSYmbD97dG9wOnUsbGVmdDpsfTp7fSkse2R1cmF0aW9uOnMuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpzLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBzPXt3aWR0aDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtuJiZuLmxlbmd0aCYmZShuWzBdKS5jc3Moe3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUocyksaS5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbyxyLGg9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksbD1oLm9wdGlvbnMsdT1oLmVsZW1lbnQsZD1sLmNvbnRhaW5tZW50LGM9ZCBpbnN0YW5jZW9mIGU/ZC5nZXQoMCk6L3BhcmVudC8udGVzdChkKT91LnBhcmVudCgpLmdldCgwKTpkO2MmJihoLmNvbnRhaW5lckVsZW1lbnQ9ZShjKSwvZG9jdW1lbnQvLnRlc3QoZCl8fGQ9PT1kb2N1bWVudD8oaC5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0saC5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxoLnBhcmVudERhdGE9e2VsZW1lbnQ6ZShkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOmUoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OmUoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fSk6KHQ9ZShjKSxpPVtdLGUoWyJUb3AiLCJSaWdodCIsIkxlZnQiLCJCb3R0b20iXSkuZWFjaChmdW5jdGlvbihlLHMpe2lbZV09aC5fbnVtKHQuY3NzKCJwYWRkaW5nIitzKSl9KSxoLmNvbnRhaW5lck9mZnNldD10Lm9mZnNldCgpLGguY29udGFpbmVyUG9zaXRpb249dC5wb3NpdGlvbigpLGguY29udGFpbmVyU2l6ZT17aGVpZ2h0OnQuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOnQuaW5uZXJXaWR0aCgpLWlbMV19LHM9aC5jb250YWluZXJPZmZzZXQsbj1oLmNvbnRhaW5lclNpemUuaGVpZ2h0LGE9aC5jb250YWluZXJTaXplLndpZHRoLG89aC5faGFzU2Nyb2xsKGMsImxlZnQiKT9jLnNjcm9sbFdpZHRoOmEscj1oLl9oYXNTY3JvbGwoYyk/Yy5zY3JvbGxIZWlnaHQ6bixoLnBhcmVudERhdGE9e2VsZW1lbnQ6YyxsZWZ0OnMubGVmdCx0b3A6cy50b3Asd2lkdGg6byxoZWlnaHQ6cn0pKX0scmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIikscj1vLm9wdGlvbnMsaD1vLmNvbnRhaW5lck9mZnNldCxsPW8ucG9zaXRpb24sdT1vLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxkPXt0b3A6MCxsZWZ0OjB9LGM9by5jb250YWluZXJFbGVtZW50LHA9ITA7Y1swXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKCJwb3NpdGlvbiIpKSYmKGQ9aCksbC5sZWZ0PChvLl9oZWxwZXI/aC5sZWZ0OjApJiYoby5zaXplLndpZHRoPW8uc2l6ZS53aWR0aCsoby5faGVscGVyP28ucG9zaXRpb24ubGVmdC1oLmxlZnQ6by5wb3NpdGlvbi5sZWZ0LWQubGVmdCksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSksby5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoby5faGVscGVyP2gudG9wOjApJiYoby5zaXplLmhlaWdodD1vLnNpemUuaGVpZ2h0KyhvLl9oZWxwZXI/by5wb3NpdGlvbi50b3AtaC50b3A6by5wb3NpdGlvbi50b3ApLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpLG8ucG9zaXRpb24udG9wPW8uX2hlbHBlcj9oLnRvcDowKSxuPW8uY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1vLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLGE9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KG8uY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpLG4mJmE/KG8ub2Zmc2V0LmxlZnQ9by5wYXJlbnREYXRhLmxlZnQrby5wb3NpdGlvbi5sZWZ0LG8ub2Zmc2V0LnRvcD1vLnBhcmVudERhdGEudG9wK28ucG9zaXRpb24udG9wKTooby5vZmZzZXQubGVmdD1vLmVsZW1lbnQub2Zmc2V0KCkubGVmdCxvLm9mZnNldC50b3A9by5lbGVtZW50Lm9mZnNldCgpLnRvcCksaT1NYXRoLmFicyhvLnNpemVEaWZmLndpZHRoKyhvLl9oZWxwZXI/by5vZmZzZXQubGVmdC1kLmxlZnQ6by5vZmZzZXQubGVmdC1oLmxlZnQpKSxzPU1hdGguYWJzKG8uc2l6ZURpZmYuaGVpZ2h0KyhvLl9oZWxwZXI/by5vZmZzZXQudG9wLWQudG9wOm8ub2Zmc2V0LnRvcC1oLnRvcCkpLGkrby5zaXplLndpZHRoPj1vLnBhcmVudERhdGEud2lkdGgmJihvLnNpemUud2lkdGg9by5wYXJlbnREYXRhLndpZHRoLWksdSYmKG8uc2l6ZS5oZWlnaHQ9by5zaXplLndpZHRoL28uYXNwZWN0UmF0aW8scD0hMSkpLHMrby5zaXplLmhlaWdodD49by5wYXJlbnREYXRhLmhlaWdodCYmKG8uc2l6ZS5oZWlnaHQ9by5wYXJlbnREYXRhLmhlaWdodC1zLHUmJihvLnNpemUud2lkdGg9by5zaXplLmhlaWdodCpvLmFzcGVjdFJhdGlvLHA9ITEpKSxwfHwoby5wb3NpdGlvbi5sZWZ0PW8ucHJldlBvc2l0aW9uLmxlZnQsby5wb3NpdGlvbi50b3A9by5wcmV2UG9zaXRpb24udG9wLG8uc2l6ZS53aWR0aD1vLnByZXZTaXplLndpZHRoLG8uc2l6ZS5oZWlnaHQ9by5wcmV2U2l6ZS5oZWlnaHQpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnMscz10LmNvbnRhaW5lck9mZnNldCxuPXQuY29udGFpbmVyUG9zaXRpb24sYT10LmNvbnRhaW5lckVsZW1lbnQsbz1lKHQuaGVscGVyKSxyPW8ub2Zmc2V0KCksaD1vLm91dGVyV2lkdGgoKS10LnNpemVEaWZmLndpZHRoLGw9by5vdXRlckhlaWdodCgpLXQuc2l6ZURpZmYuaGVpZ2h0O3QuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLHQuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1uLmxlZnQtcy5sZWZ0LHdpZHRoOmgsaGVpZ2h0Omx9KX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFsc29SZXNpemUiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zO2UoaS5hbHNvUmVzaXplKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9LHJlc2l6ZTpmdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLG49cy5vcHRpb25zLGE9cy5vcmlnaW5hbFNpemUsbz1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtYS5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLWEud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLW8udG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LW8ubGVmdHx8MH07ZShuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHM9ZSh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIpLG49e30sYT10LnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2goYSxmdW5jdGlvbihlLHQpe3ZhciBpPShzW3RdfHwwKSsoclt0XXx8MCk7aSYmaT49MCYmKG5bdF09aXx8bnVsbCl9KSx0LmNzcyhuKX0pfSxzdG9wOmZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zLHM9dC5zaXplO3QuZ2hvc3Q9dC5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSx0Lmdob3N0LmNzcyh7b3BhY2l0eTouMjUsZGlzcGxheToiYmxvY2siLHBvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnMuaGVpZ2h0LHdpZHRoOnMud2lkdGgsbWFyZ2luOjAsbGVmdDowLHRvcDowfSkuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1naG9zdCIpLmFkZENsYXNzKCJzdHJpbmciPT10eXBlb2YgaS5naG9zdD9pLmdob3N0OiIiKSx0Lmdob3N0LmFwcGVuZFRvKHQuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIik7dC5naG9zdCYmdC5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnQuc2l6ZS5oZWlnaHQsd2lkdGg6dC5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKTt0Lmdob3N0JiZ0LmhlbHBlciYmdC5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKHQuZ2hvc3QuZ2V0KDApKX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdCxpPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLHM9aS5vcHRpb25zLG49aS5zaXplLGE9aS5vcmlnaW5hbFNpemUsbz1pLm9yaWdpbmFsUG9zaXRpb24scj1pLmF4aXMsaD0ibnVtYmVyIj09dHlwZW9mIHMuZ3JpZD9bcy5ncmlkLHMuZ3JpZF06cy5ncmlkLGw9aFswXXx8MSx1PWhbMV18fDEsZD1NYXRoLnJvdW5kKChuLndpZHRoLWEud2lkdGgpL2wpKmwsYz1NYXRoLnJvdW5kKChuLmhlaWdodC1hLmhlaWdodCkvdSkqdSxwPWEud2lkdGgrZCxmPWEuaGVpZ2h0K2MsbT1zLm1heFdpZHRoJiZwPnMubWF4V2lkdGgsZz1zLm1heEhlaWdodCYmZj5zLm1heEhlaWdodCx2PXMubWluV2lkdGgmJnMubWluV2lkdGg+cCx5PXMubWluSGVpZ2h0JiZzLm1pbkhlaWdodD5mO3MuZ3JpZD1oLHYmJihwKz1sKSx5JiYoZis9dSksbSYmKHAtPWwpLGcmJihmLT11KSwvXihzZXxzfGUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mKTovXihuZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9by50b3AtYyk6L14oc3cpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24ubGVmdD1vLmxlZnQtZCk6KCgwPj1mLXV8fDA+PXAtbCkmJih0PWkuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyh0aGlzKSksZi11PjA/KGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcC1jKTooZj11LXQuaGVpZ2h0LGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1vLnRvcCthLmhlaWdodC1mKSxwLWw+MD8oaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1kKToocD1sLXQud2lkdGgsaS5zaXplLndpZHRoPXAsaS5wb3NpdGlvbi5sZWZ0PW8ubGVmdCthLndpZHRoLXApKX19KSxlLnVpLnJlc2l6YWJsZSxlLndpZGdldCgidWkuc2VsZWN0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b1JlZnJlc2g6ITAsZGlzdGFuY2U6MCxmaWx0ZXI6IioiLHRvbGVyYW5jZToidG91Y2giLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExLHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe3Q9ZShpLm9wdGlvbnMuZmlsdGVyLGkuZWxlbWVudFswXSksdC5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSx0LmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5vZmZzZXQoKTtlLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDppLmxlZnQsdG9wOmkudG9wLHJpZ2h0OmkubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206aS50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPXQuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9ZSgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVt0LnBhZ2VYLHQucGFnZVldLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWVzPWUocy5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy5zdGFydHNlbGVjdGVkPSEwLHQubWV0YUtleXx8dC5jdHJsS2V5fHwocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGVkPSExLHMuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6cy5lbGVtZW50fSkpfSksZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cmV0dXJuIG4/KHM9IXQubWV0YUtleSYmIXQuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksbi4kZWxlbWVudC5yZW1vdmVDbGFzcyhzPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3Mocz8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxuLnVuc2VsZWN0aW5nPSFzLG4uc2VsZWN0aW5nPXMsbi5zZWxlY3RlZD1zLHM/aS5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOm4uZWxlbWVudH0pLCExKTp2b2lkIDB9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxhPXRoaXMub3Bvc1swXSxvPXRoaXMub3Bvc1sxXSxyPXQucGFnZVgsaD10LnBhZ2VZO3JldHVybiBhPnImJihpPXIscj1hLGE9aSksbz5oJiYoaT1oLGg9byxvPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDphLHRvcDpvLHdpZHRoOnItYSxoZWlnaHQ6aC1vfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKSxsPSExOwppJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJigidG91Y2giPT09bi50b2xlcmFuY2U/bD0hKGkubGVmdD5yfHxhPmkucmlnaHR8fGkudG9wPmh8fG8+aS5ib3R0b20pOiJmaXQiPT09bi50b2xlcmFuY2UmJihsPWkubGVmdD5hJiZyPmkucmlnaHQmJmkudG9wPm8mJmg+aS5ib3R0b20pLGw/KGkuc2VsZWN0ZWQmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEpLGkudW5zZWxlY3RpbmcmJihpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwoaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksaS5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6aS5lbGVtZW50fSkpKTooaS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZpLnN0YXJ0c2VsZWN0ZWQ/KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksaS5zZWxlY3RlZD0hMCk6KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGkuc2VsZWN0aW5nPSExLGkuc3RhcnRzZWxlY3RlZCYmKGkuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hMCkscy5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSksaS5zZWxlY3RlZCYmKHQubWV0YUtleXx8dC5jdHJsS2V5fHxpLnN0YXJ0c2VsZWN0ZWR8fChpLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGkuc2VsZWN0ZWQ9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoInVuc2VsZWN0aW5nIix0LHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpKSl9KSwhMX19LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcztyZXR1cm4gdGhpcy5kcmFnZ2VkPSExLGUoIi51aS11bnNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3MuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMSxzLnN0YXJ0c2VsZWN0ZWQ9ITEsaS5fdHJpZ2dlcigidW5zZWxlY3RlZCIsdCx7dW5zZWxlY3RlZDpzLmVsZW1lbnR9KX0pLGUoIi51aS1zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKS5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGluZz0hMSxzLnNlbGVjdGVkPSEwLHMuc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKCJzZWxlY3RlZCIsdCx7c2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KSxlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTEuNCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNvcnQiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFdpdGg6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaXRlbXM6Ij4gKiIsb3BhY2l0eTohMSxwbGFjZWhvbGRlcjohMSxyZXZlcnQ6ITEsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCIsekluZGV4OjFlMyxhY3RpdmF0ZTpudWxsLGJlZm9yZVN0b3A6bnVsbCxjaGFuZ2U6bnVsbCxkZWFjdGl2YXRlOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsLHJlY2VpdmU6bnVsbCxyZW1vdmU6bnVsbCxzb3J0Om51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdXBkYXRlOm51bGx9LF9pc092ZXJBeGlzOmZ1bmN0aW9uKGUsdCxpKXtyZXR1cm4gZT49dCYmdCtpPmV9LF9pc0Zsb2F0aW5nOmZ1bmN0aW9uKGUpe3JldHVybi9sZWZ0fHJpZ2h0Ly50ZXN0KGUuY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KGUuY3NzKCJkaXNwbGF5IikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNvcnRhYmxlIiksdGhpcy5yZWZyZXNoKCksdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVhZHk9ITB9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNvcnRhYmxlLWhhbmRsZSIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oYW5kbGUiKSxlLmVhY2godGhpcy5pdGVtcyxmdW5jdGlvbigpeyh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlP3RoaXMuaXRlbS5maW5kKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUpOnRoaXMuaXRlbSkuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhhbmRsZSIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLmZpbmQoIi51aS1zb3J0YWJsZS1oYW5kbGUiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGFuZGxlIiksdGhpcy5fbW91c2VEZXN0cm95KCk7Zm9yKHZhciBlPXRoaXMuaXRlbXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5pdGVtc1tlXS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsaSl7dmFyIHM9bnVsbCxuPSExLGE9dGhpcztyZXR1cm4gdGhpcy5yZXZlcnRpbmc/ITE6dGhpcy5vcHRpb25zLmRpc2FibGVkfHwic3RhdGljIj09PXRoaXMub3B0aW9ucy50eXBlPyExOih0aGlzLl9yZWZyZXNoSXRlbXModCksZSh0LnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhKHRoaXMsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YT8ocz1lKHRoaXMpLCExKTp2b2lkIDB9KSxlLmRhdGEodC50YXJnZXQsYS53aWRnZXROYW1lKyItaXRlbSIpPT09YSYmKHM9ZSh0LnRhcmdldCkpLHM/IXRoaXMub3B0aW9ucy5oYW5kbGV8fGl8fChlKHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZCgiKiIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PXQudGFyZ2V0JiYobj0hMCl9KSxuKT8odGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApOiExOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKHQpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxlLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxvLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKG8uY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxvLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLG8uY3Vyc29yJiYiYXV0byIhPT1vLmN1cnNvciYmKGE9dGhpcy5kb2N1bWVudC5maW5kKCJib2R5IiksdGhpcy5zdG9yZWRDdXJzb3I9YS5jc3MoImN1cnNvciIpLGEuY3NzKCJjdXJzb3IiLG8uY3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQ9ZSgiPHN0eWxlPip7IGN1cnNvcjogIitvLmN1cnNvcisiICFpbXBvcnRhbnQ7IH08L3N0eWxlPiIpLmFwcGVuZFRvKGEpKSxvLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsby5vcGFjaXR5KSksby56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixvLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmIkhUTUwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSYmKHRoaXMub3ZlcmZsb3dPZmZzZXQ9dGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIXMpZm9yKG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhby5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC10LnBhZ2VZPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK28uc2Nyb2xsU3BlZWQ6dC5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLW8uc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPG8uc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrby5zY3JvbGxTcGVlZDp0LnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxvLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtby5zY3JvbGxTcGVlZCkpOih0LnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8by5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktby5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKHQucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8by5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKStvLnNjcm9sbFNwZWVkKSksdC5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxvLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLW8uc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKHQucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPG8uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKStvLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFvLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5vcHRpb25zLmF4aXMmJiJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IiksdGhpcy5vcHRpb25zLmF4aXMmJiJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPXRoaXMuaXRlbXNbaV0sbj1zLml0ZW1bMF0sYT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyksYSYmcy5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmbiE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMucGxhY2Vob2xkZXJbMT09PWE/Im5leHQiOiJwcmV2Il0oKVswXSE9PW4mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbikmJigic2VtaS1keW5hbWljIj09PXRoaXMub3B0aW9ucy50eXBlPyFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxuKTohMCkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1hPyJkb3duIjoidXAiLCJwb2ludGVyIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZSh0LHMpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LGkpe2lmKHQpe2lmKGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxhPXRoaXMub3B0aW9ucy5heGlzLG89e307YSYmIngiIT09YXx8KG8ubGVmdD1uLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLGEmJiJ5IiE9PWF8fChvLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZShvLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtzLl9jbGVhcih0KX0pfWVsc2UgdGhpcy5fY2xlYXIodCxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksIm9yaWdpbmFsIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoImRlYWN0aXZhdGUiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigib3V0IixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSwib3JpZ2luYWwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLGUuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj9lKHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6ZSh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkodCYmdC5jb25uZWN0ZWQpLHM9W107cmV0dXJuIHQ9dHx8e30sZShpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KGUodC5pdGVtfHx0aGlzKS5hdHRyKHQuYXR0cmlidXRlfHwiaWQiKXx8IiIpLm1hdGNoKHQuZXhwcmVzc2lvbnx8LyguKylbXC09X10oLispLyk7aSYmcy5wdXNoKCh0LmtleXx8aVsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhcy5sZW5ndGgmJnQua2V5JiZzLnB1c2godC5rZXkrIj0iKSxzLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxzPVtdO3JldHVybiB0PXR8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsaT10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscz10aGlzLnBvc2l0aW9uQWJzLnRvcCxuPXMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsYT1lLmxlZnQsbz1hK2Uud2lkdGgscj1lLnRvcCxoPXIrZS5oZWlnaHQsbD10aGlzLm9mZnNldC5jbGljay50b3AsdT10aGlzLm9mZnNldC5jbGljay5sZWZ0LGQ9IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZoPnMrbCxjPSJ5Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0K3U+YSYmbz50K3UscD1kJiZjO3JldHVybiJwb2ludGVyIj09PXRoaXMub3B0aW9ucy50b2xlcmFuY2V8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHwicG9pbnRlciIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0+ZVt0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdP3A6dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI+YSYmbz5pLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPnImJmg+bi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKGUpe3ZhciB0PSJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCxlLnRvcCxlLmhlaWdodCksaT0ieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQsZS53aWR0aCkscz10JiZpLG49dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksYT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBzP3RoaXMuZmxvYXRpbmc/YSYmInJpZ2h0Ij09PWF8fCJkb3duIj09PW4/MjoxOm4mJigiZG93biI9PT1uPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLGUudG9wK2UuaGVpZ2h0LzIsZS5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCxlLmxlZnQrZS53aWR0aC8yLGUud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuPyJyaWdodCI9PT1uJiZpfHwibGVmdCI9PT1uJiYhaTpzJiYoImRvd24iPT09cyYmdHx8InVwIj09PXMmJiF0KX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PWUmJihlPjA/ImRvd24iOiJ1cCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PWUmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT09U3RyaW5nP1tlLmNvbm5lY3RXaXRoXTplLmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7ci5wdXNoKHRoaXMpfXZhciBzLG4sYSxvLHI9W10saD1bXSxsPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYobCYmdClmb3Iocz1sLmxlbmd0aC0xO3M+PTA7cy0tKWZvcihhPWUobFtzXSx0aGlzLmRvY3VtZW50WzBdKSxuPWEubGVuZ3RoLTE7bj49MDtuLS0pbz1lLmRhdGEoYVtuXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmaC5wdXNoKFtlLmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnQpOmUoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxvXSk7Zm9yKGgucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gZShyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5maW5kKCI6ZGF0YSgiK3RoaXMud2lkZ2V0TmFtZSsiLWl0ZW0pIik7dGhpcy5pdGVtcz1lLmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbihlKXtmb3IodmFyIGk9MDt0Lmxlbmd0aD5pO2krKylpZih0W2ldPT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBpLHMsbixhLG8scixoLGwsdT10aGlzLml0ZW1zLGQ9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0sYz10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGMmJnRoaXMucmVhZHkpZm9yKGk9Yy5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobj1lKGNbaV0sdGhpcy5kb2N1bWVudFswXSkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKWE9ZS5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSksYSYmYSE9PXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihkLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSk7Zm9yKGk9ZC5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobz1kW2ldWzFdLHI9ZFtpXVswXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKWg9ZShyW3NdKSxoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsbyksdS5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6byx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/IngiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKTohMSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO3ZhciBpLHMsbixhO2ZvcihpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pcz10aGlzLml0ZW1zW2ldLHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmcy5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KG49dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/ZSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxzLml0ZW0pOnMuaXRlbSx0fHwocy53aWR0aD1uLm91dGVyV2lkdGgoKSxzLmhlaWdodD1uLm91dGVySGVpZ2h0KCkpLGE9bi5vZmZzZXQoKSxzLmxlZnQ9YS5sZWZ0LHMudG9wPWEudG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlhPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PWEubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPWEudG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dD10fHx0aGlzO3ZhciBpLHM9dC5vcHRpb25zO3MucGxhY2Vob2xkZXImJnMucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPXMucGxhY2Vob2xkZXIscy5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBzPXQuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPWUoIjwiK3MrIj4iLHQuZG9jdW1lbnRbMF0pLmFkZENsYXNzKGl8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik7cmV0dXJuInRib2R5Ij09PXM/dC5fY3JlYXRlVHJQbGFjZWhvbGRlcih0LmN1cnJlbnRJdGVtLmZpbmQoInRyIikuZXEoMCksZSgiPHRyPiIsdC5kb2N1bWVudFswXSkuYXBwZW5kVG8obikpOiJ0ciI9PT1zP3QuX2NyZWF0ZVRyUGxhY2Vob2xkZXIodC5jdXJyZW50SXRlbSxuKToiaW1nIj09PXMmJm4uYXR0cigic3JjIix0LmN1cnJlbnRJdGVtLmF0dHIoInNyYyIpKSxpfHxuLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLG59LHVwZGF0ZTpmdW5jdGlvbihlLG4peyghaXx8cy5mb3JjZVBsYWNlaG9sZGVyU2l6ZSkmJihuLmhlaWdodCgpfHxuLmhlaWdodCh0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLG4ud2lkdGgoKXx8bi53aWR0aCh0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSkpfX0pLHQucGxhY2Vob2xkZXI9ZShzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz10aGlzO3QuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7ZSgiPHRkPiYjMTYwOzwvdGQ+IixzLmRvY3VtZW50WzBdKS5hdHRyKCJjb2xzcGFuIixlKHRoaXMpLmF0dHIoImNvbHNwYW4iKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scixoLGwsdSxkLGM9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCFlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGMmJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sYy5lbGVtZW50WzBdKSljb250aW51ZTtjPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYoYylpZigxPT09dGhpcy5jb250YWluZXJzLmxlbmd0aCl0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTEpO2Vsc2V7Zm9yKG49MWU0LGE9bnVsbCx1PWMuZmxvYXRpbmd8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5jdXJyZW50SXRlbSksbz11PyJsZWZ0IjoidG9wIixyPXU/IndpZHRoIjoiaGVpZ2h0IixkPXU/ImNsaWVudFgiOiJjbGllbnRZIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbb10sbD0hMSx0W2RdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksbj5NYXRoLmFicyh0W2RdLWgpJiYobj1NYXRoLmFicyh0W2RdLWgpLGE9dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sPyJ1cCI6ImRvd24iKSk7aWYoIWEmJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj09PXRoaXMuY29udGFpbmVyc1twXSlyZXR1cm4gdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpLHZvaWQgMDthP3RoaXMuX3JlYXJyYW5nZSh0LGEsbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS5pc0Z1bmN0aW9uKGkuaGVscGVyKT9lKGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdCx0aGlzLmN1cnJlbnRJdGVtXSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKCJwYXJlbnQiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoc1swXSksc1swXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfSksKCFzWzBdLnN0eWxlLndpZHRofHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoIXNbMF0uc3R5bGUuaGVpZ2h0fHxpLmZvcmNlSGVscGVyU2l6ZSkmJnMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVybiJhYnNvbHV0ZSI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJiJodG1sIj09PXRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmZS51aS5pZSkmJih0PXt0b3A6MCxsZWZ0OjB9KSx7dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoInJlbGF0aXZlIj09PXRoaXMuY3NzUG9zaXRpb24pe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQsaSxzLG49dGhpcy5vcHRpb25zOyJwYXJlbnQiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksKCJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50fHwid2luZG93Ij09PW4uY29udGFpbm1lbnQpJiYodGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LmhlaWdodCgpfHx0aGlzLmRvY3VtZW50WzBdLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKSwvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCl8fCh0PWUobi5jb250YWlubWVudClbMF0saT1lKG4uY29udGFpbm1lbnQpLm9mZnNldCgpLHM9ImhpZGRlbiIhPT1lKHQpLmNzcygib3ZlcmZsb3ciKSx0aGlzLmNvbnRhaW5tZW50PVtpLmxlZnQrKHBhcnNlSW50KGUodCkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludChlKHQpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKHQpLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxpLmxlZnQrKHM/TWF0aC5tYXgodC5zY3JvbGxXaWR0aCx0Lm9mZnNldFdpZHRoKTp0Lm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUodCkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHM/TWF0aC5tYXgodC5zY3JvbGxIZWlnaHQsdC5vZmZzZXRIZWlnaHQpOnQub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZSh0KS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZSh0KS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIHM9ImFic29sdXRlIj09PXQ/MTotMSxuPSJhYnNvbHV0ZSIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGE9LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6YT8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6YT8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxhPXQucGFnZVgsbz10LnBhZ2VZLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaD0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7cmV0dXJuInJlbGF0aXZlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJih0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKGE9dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYobz10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihhPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKG89dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxuLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV0sbz10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktbi5ncmlkWzFdOmkrbi5ncmlkWzFdOmkscz10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdLGE9dGhpcy5jb250YWlubWVudD9zLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9zOnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9zLW4uZ3JpZFswXTpzK24uZ3JpZFswXTpzKSkse3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmg/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKGUsdCxpLHMpe2k/aVswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTp0Lml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSwiZG93biI9PT10aGlzLmRpcmVjdGlvbj90Lml0ZW1bMF06dC5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIG49dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bj09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFzKX0pfSxfY2xlYXI6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKGUsdCxpKXtyZXR1cm4gZnVuY3Rpb24ocyl7aS5fdHJpZ2dlcihlLHMsdC5fdWlIYXNoKHQpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHMsbj1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHMgaW4gdGhpcy5fc3RvcmVkQ1NTKSgiYXV0byI9PT10aGlzLl9zdG9yZWRDU1Nbc118fCJzdGF0aWMiPT09dGhpcy5fc3RvcmVkQ1NTW3NdKSYmKHRoaXMuX3N0b3JlZENTU1tzXT0iIik7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIXQmJm4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZWNlaXZlIixlLHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwhdGhpcy5mcm9tT3V0c2lkZSYmdGhpcy5kb21Qb3NpdGlvbi5wcmV2PT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8dHx8bi5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInVwZGF0ZSIsZSx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYodHx8KG4ucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJyZW1vdmUiLGUsdGhpcy5fdWlIYXNoKCkpfSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJyZWNlaXZlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSksbi5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJ1cGRhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXR8fG4ucHVzaChpKCJkZWFjdGl2YXRlIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyJiYobi5wdXNoKGkoIm91dCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbc10pKSx0aGlzLmNvbnRhaW5lcnNbc10uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZCgiYm9keSIpLmNzcygiY3Vyc29yIix0aGlzLnN0b3JlZEN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLCJhdXRvIj09PXRoaXMuX3N0b3JlZFpJbmRleD8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsdHx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIXQpe2ZvcihzPTA7bi5sZW5ndGg+cztzKyspbltzXS5jYWxsKHRoaXMsZSk7dGhpcy5fdHJpZ2dlcigic3RvcCIsZSx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXtlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24odCl7dmFyIGk9dHx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fGUoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjp0P3QuZWxlbWVudDpudWxsfX19KSxlLndpZGdldCgidWkuYWNjb3JkaW9uIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOiJoaWRlIixib3JkZXJCb3R0b21XaWR0aDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSIsaGVpZ2h0OiJoaWRlIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDoic2hvdyIsYm9yZGVyQm90dG9tV2lkdGg6InNob3ciLHBhZGRpbmdUb3A6InNob3ciLHBhZGRpbmdCb3R0b206InNob3ciLGhlaWdodDoic2hvdyJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0LmNvbGxhcHNpYmxlfHx0LmFjdGl2ZSE9PSExJiZudWxsIT10LmFjdGl2ZXx8KHQuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwwPnQuYWN0aXZlJiYodC5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTplKCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuaWNvbnM7dCYmKGUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb24gdWktaWNvbiAiK3QuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKHQuaGVhZGVyKS5hZGRDbGFzcyh0LmFjdGl2ZUhlYWRlciksdGhpcy5oZWFkZXJzLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSxlPXRoaXMuaGVhZGVycy5uZXh0KCkucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCIpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZVVuaXF1ZUlkKCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZlLmNzcygiaGVpZ2h0IiwiIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6KCJldmVudCI9PT1lJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksImNvbGxhcHNpYmxlIiE9PWV8fHR8fHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMXx8dGhpcy5fYWN0aXZhdGUoMCksImljb25zIj09PWUmJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkpLHZvaWQgMCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCF0LmFsdEtleSYmIXQuY3RybEtleSl7dmFyIGk9ZS51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksYT0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046YT10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOmE9dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBpLkhPTUU6YT10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDphPXRoaXMuaGVhZGVyc1tzLTFdfWEmJihlKHQudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGUoYSkuYXR0cigidGFiSW5kZXgiLDApLGEuZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSx0LmFjdGl2ZT09PSExJiZ0LmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnQuYWN0aXZlPT09ITE/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsdC5hY3RpdmUtMSkpOnQuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZGVycyx0PXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSx0aGlzLnBhbmVscz10aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmZpbHRlcigiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKSIpLmhpZGUoKSx0JiYodGhpcy5fb2ZmKGUubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZih0Lm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cigicm9sZSIsInRhYiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC51bmlxdWVJZCgpLmF0dHIoImlkIikscz10Lm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3QuYXR0cigiYXJpYS1jb250cm9scyIsbikscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksImZpbGwiPT09cz8odD1uLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPWkuY3NzKCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1zJiYiZml4ZWQiIT09cyYmKHQtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXMmJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuY3NzKCJoZWlnaHQiLCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZmluZEFjdGl2ZSh0KVswXTtpIT09dGhpcy5hY3RpdmVbMF0mJihpPWl8fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgaT17a2V5ZG93bjoiX2tleWRvd24ifTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7aVt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246Il9wYW5lbEtleURvd24ifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uWzBdPT09c1swXSxvPWEmJmkuY29sbGFwc2libGUscj1vP2UoKTpuLm5leHQoKSxoPXMubmV4dCgpLGw9e29sZEhlYWRlcjpzLG9sZFBhbmVsOmgsbmV3SGVhZGVyOm8/ZSgpOm4sbmV3UGFuZWw6cn07CnQucHJldmVudERlZmF1bHQoKSxhJiYhaS5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMXx8KGkuYWN0aXZlPW8/ITE6dGhpcy5oZWFkZXJzLmluZGV4KG4pLHRoaXMuYWN0aXZlPWE/ZSgpOm4sdGhpcy5fdG9nZ2xlKGwpLHMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaWNvbnMmJnMuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5oZWFkZXIpLGF8fChuLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIiksaS5pY29ucyYmbi5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuaGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmFjdGl2ZUhlYWRlciksbi5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKSl9LF90b2dnbGU6ZnVuY3Rpb24odCl7dmFyIGk9dC5uZXdQYW5lbCxzPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6dC5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PWksdGhpcy5wcmV2SGlkZT1zLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUoaSxzLHQpOihzLmhpZGUoKSxpLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSkscy5hdHRyKHsiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHMucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSksaS5sZW5ndGgmJnMubGVuZ3RoP3MucHJldigpLmF0dHIoe3RhYkluZGV4Oi0xLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSk6aS5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXBhcnNlSW50KGUodGhpcykuYXR0cigidGFiSW5kZXgiKSwxMCl9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGkuYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLnByZXYoKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHMsbixhLG89dGhpcyxyPTAsaD1lLmNzcygiYm94LXNpemluZyIpLGw9ZS5sZW5ndGgmJighdC5sZW5ndGh8fGUuaW5kZXgoKTx0LmluZGV4KCkpLHU9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LGQ9bCYmdS5kb3dufHx1LGM9ZnVuY3Rpb24oKXtvLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkJiYoYT1kKSwic3RyaW5nIj09dHlwZW9mIGQmJihuPWQpLG49bnx8ZC5lYXNpbmd8fHUuZWFzaW5nLGE9YXx8ZC5kdXJhdGlvbnx8dS5kdXJhdGlvbix0Lmxlbmd0aD9lLmxlbmd0aD8ocz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjphLGVhc2luZzpuLGNvbXBsZXRlOmMsc3RlcDpmdW5jdGlvbihlLGkpe2kubm93PU1hdGgucm91bmQoZSksImhlaWdodCIhPT1pLnByb3A/ImNvbnRlbnQtYm94Ij09PWgmJihyKz1pLm5vdyk6ImNvbnRlbnQiIT09by5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pLHZvaWQgMCk6dC5hbmltYXRlKHRoaXMuaGlkZVByb3BzLGEsbixjKTplLmFuaW1hdGUodGhpcy5zaG93UHJvcHMsYSxuLGMpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIixudWxsLGUpfX0pLGUud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS4xMS40IixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LGl0ZW1zOiI+ICoiLG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0LTEgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQudGFyZ2V0KTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGgmJih0aGlzLnNlbGVjdCh0KSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCl8fCh0aGlzLm1vdXNlSGFuZGxlZD0hMCksaS5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOiF0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpJiZlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXtpZighdGhpcy5wcmV2aW91c0ZpbHRlcil7dmFyIGk9ZSh0LmN1cnJlbnRUYXJnZXQpO2kuc2libGluZ3MoIi51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5mb2N1cyh0LGkpfX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7dHx8dGhpcy5mb2N1cyhlLGkpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KXx8dGhpcy5jb2xsYXBzZUFsbCh0KX0pfSxrZXlkb3duOiJfa2V5ZG93biJ9KSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtjbGljazpmdW5jdGlvbihlKXt0aGlzLl9jbG9zZU9uRG9jdW1lbnRDbGljayhlKSYmdGhpcy5jb2xsYXBzZUFsbChlKSx0aGlzLm1vdXNlSGFuZGxlZD0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtaWNvbnMgdWktZnJvbnQiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbz0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpvPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsbj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksYT0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbj09PXM/YT0hMDpuPXMrbixpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSxpPWEmJi0xIT09aS5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpP3RoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKHQsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9byYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuaXMoIlthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKT90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcyxuPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGE9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKSxhLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnQiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5wYXJlbnQoKSxzPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO2kuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKHMpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixpLmF0dHIoImlkIikpfSksdD1hLmFkZCh0aGlzLmVsZW1lbnQpLGk9dC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcyksaS5ub3QoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtzLl9pc0RpdmlkZXIodCkmJnQuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtZGl2aWRlciIpfSksaS5ub3QoIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXIiKS5hZGRDbGFzcygidWktbWVudS1pdGVtIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSxpLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLmFjdGl2ZSYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OiJtZW51aXRlbSIsbGlzdGJveDoib3B0aW9uIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Imljb25zIj09PWUmJnRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUpLmFkZENsYXNzKHQuc3VibWVudSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO3RoaXMuYmx1cihlLGUmJiJmb2N1cyI9PT1lLnR5cGUpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxzPXRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscy5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJiJrZXlkb3duIj09PWUudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPXQuY2hpbGRyZW4oIi51aS1tZW51IiksaS5sZW5ndGgmJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKGkpLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG8scjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHM9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsbj10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLWktcyxhPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSxyPXQub3V0ZXJIZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChhK24pOm4rcj5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbi1vK3IpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksInRydWUiPT09ZS5hdHRyKCJhcmlhLWhpZGRlbiIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgaT1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtzLmxlbmd0aHx8KHM9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShzKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoIi51aS1zdGF0ZS1hY3RpdmUiKS5ub3QoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKHQpe3JldHVybiFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudSIpLmxlbmd0aH0sX2lzRGl2aWRlcjpmdW5jdGlvbihlKXtyZXR1cm4hL1teXC1cdTIwMTRcdTIwMTNcc10vLnRlc3QoZS50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz0iZmlyc3QiPT09ZXx8Imxhc3QiPT09ZT90aGlzLmFjdGl2ZVsiZmlyc3QiPT09ZT8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTp0aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdF0oKSksdGhpcy5mb2N1cyhpLHMpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzTGFzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksMD5pLm9mZnNldCgpLnRvcC1zLW59KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LHByZXZpb3VzUGFnZTpmdW5jdGlvbih0KXt2YXIgaSxzLG47cmV0dXJuIHRoaXMuYWN0aXZlPyh0aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT1lKHRoaXMpLGkub2Zmc2V0KCkudG9wLXMrbj4wfSksdGhpcy5mb2N1cyh0LGkpKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpKSksdm9pZCAwKToodGhpcy5uZXh0KHQpLHZvaWQgMCl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24odCl7dmFyIGk9dC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIikscz1SZWdFeHAoIl4iK2ksImkiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KGUudHJpbShlKHRoaXMpLnRleHQoKSkpfSl9fSksZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJ0ZXh0YXJlYSI9PT1uLG89ImlucHV0Ij09PW47dGhpcy5pc011bHRpTGluZT1hPyEwOm8/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIiksdGhpcy52YWx1ZU1ldGhvZD10aGlzLmVsZW1lbnRbYXx8bz8idmFsIjoidGV4dCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwib2ZmIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXJldHVybiB0PSEwLHM9ITAsaT0hMCx2b2lkIDA7dD0hMSxzPSExLGk9ITE7dmFyIGE9ZS51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2UgYS5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixuKTticmVhaztjYXNlIGEuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLG4pO2JyZWFrO2Nhc2UgYS5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsbik7YnJlYWs7Y2FzZSBhLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsbik7YnJlYWs7Y2FzZSBhLkVOVEVSOnRoaXMubWVudS5hY3RpdmUmJih0PSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIGEuVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBhLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6aT0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KG4pfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocyl7aWYodClyZXR1cm4gdD0hMSwoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMDtpZighaSl7dmFyIG49ZS51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscyk7YnJlYWs7Y2FzZSBuLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHMpfX19LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBzPyhzPSExLGUucHJldmVudERlZmF1bHQoKSx2b2lkIDApOih0aGlzLl9zZWFyY2hUaW1lb3V0KGUpLHZvaWQgMCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpLHZvaWQgMCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT1lKCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KCJpbnN0YW5jZSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocyl7cy50YXJnZXQ9PT10LmVsZW1lbnRbMF18fHMudGFyZ2V0PT09aXx8ZS5jb250YWlucyhpLHMudGFyZ2V0KXx8dC5jbG9zZSgpfSl9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbjtyZXR1cm4gdGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSx0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKT8odGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIixmdW5jdGlvbigpe2UodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KX0pLHZvaWQgMCk6KG49aS5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIiksITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpufSkmJnQub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSxzPWkuaXRlbS5hdHRyKCJhcmlhLWxhYmVsIil8fG4udmFsdWUscyYmZS50cmltKHMpLmxlbmd0aCYmKHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSksdm9pZCAwKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXQuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoiYXNzZXJ0aXZlIiwiYXJpYS1yZWxldmFudCI6ImFkZGl0aW9ucyJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJzb3VyY2UiPT09ZSYmdGhpcy5faW5pdFNvdXJjZSgpLCJhcHBlbmRUbyI9PT1lJiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiZGlzYWJsZWQiPT09ZSYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQ9dC5qcXVlcnl8fHQubm9kZVR5cGU/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodCkuZXEoMCkpLHQmJnRbMF18fCh0PXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksdC5sZW5ndGh8fCh0PXRoaXMuZG9jdW1lbnRbMF0uYm9keSksdH0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgdCxpLHM9dGhpcztlLmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KHQ9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3MoZS51aS5hdXRvY29tcGxldGUuZmlsdGVyKHQsaS50ZXJtKSl9KToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbih0LG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPWUuYWpheCh7dXJsOmksZGF0YTp0LGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKGUpe24oZSl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpLHM9ZS5hbHRLZXl8fGUuY3RybEtleXx8ZS5tZXRhS2V5fHxlLnNoaWZ0S2V5OyghdHx8dCYmIWkmJiFzKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWU/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZSh0KTp0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpIT09ITE/dGhpcy5fc2VhcmNoKGUpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIGUucHJveHkoZnVuY3Rpb24oZSl7dD09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UoZSksdGhpcy5wZW5kaW5nLS0sdGhpcy5wZW5kaW5nfHx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6ZX0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUmJmUubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QoZSksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLGUpKX0sX2NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdLmxhYmVsJiZ0WzBdLnZhbHVlP3Q6ZS5tYXAodCxmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe30sdCx7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksdCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztlLmVhY2goaSxmdW5jdGlvbihlLGkpe3MuX3JlbmRlckl0ZW1EYXRhKHQsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIGUoIjxsaT4iKS50ZXh0KGkubGFiZWwpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdChlKXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KGUpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMubWVudS5ibHVyKCksdm9pZCAwKToodGhpcy5tZW51W2VdKHQpLHZvaWQgMCk6KHRoaXMuc2VhcmNoKG51bGwsdCksdm9pZCAwKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKGUsdCl7KCF0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSkmJih0aGlzLl9tb3ZlKGUsdCksdC5wcmV2ZW50RGVmYXVsdCgpKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1SZWdFeHAoZS51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksImkiKTtyZXR1cm4gZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIHMudGVzdChlLmxhYmVsfHxlLnZhbHVlfHxlKX0pfX0pLGUud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLGUudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOiJObyBzZWFyY2ggcmVzdWx0cy4iLHJlc3VsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU+MT8iIHJlc3VsdHMgYXJlIjoiIHJlc3VsdCBpcyIpKyIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS4ifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPXQmJnQubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKHQubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxlKCI8ZGl2PiIpLnRleHQoaSkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9fSksZS51aS5hdXRvY29tcGxldGU7dmFyIHIsaD0idWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLGw9InVpLWJ1dHRvbi1pY29ucy1vbmx5IHVpLWJ1dHRvbi1pY29uLW9ubHkgdWktYnV0dG9uLXRleHQtaWNvbnMgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IHVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IHVpLWJ1dHRvbi10ZXh0LW9ubHkiLHU9ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmZpbmQoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKX0sMSl9LGQ9ZnVuY3Rpb24odCl7dmFyIGk9dC5uYW1lLHM9dC5mb3JtLG49ZShbXSk7cmV0dXJuIGkmJihpPWkucmVwbGFjZSgvJy9nLCJcXCciKSxuPXM/ZShzKS5maW5kKCJbbmFtZT0nIitpKyInXVt0eXBlPXJhZGlvXSIpOmUoIltuYW1lPSciK2krIiddW3R5cGU9cmFkaW9dIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksbn07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsdSksImJvb2xlYW4iIT10eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMscz0iY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlLG49cz8iIjoidWktc3RhdGUtYWN0aXZlIjtudWxsPT09aS5sYWJlbCYmKGkubGFiZWw9ImlucHV0Ij09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCk6dGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKGgpLmF0dHIoInJvbGUiLCJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8dGhpcz09PXImJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgibW91c2VsZWF2ZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fGUodGhpcykucmVtb3ZlQ2xhc3Mobil9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpLmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5fb24oe2ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pLHMmJnRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LnJlZnJlc2goKX0pLCJjaGVja2JveCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6dm9pZCAwfSk6InJhZGlvIj09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZihpLmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHQuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7dmFyIHM9dC5lbGVtZW50WzBdO2Qocykubm90KHMpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOih0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6KGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtyPW51bGx9KSx2b2lkIDApfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx2b2lkIDApfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdm9pZCAwKX0pLmJpbmQoImtleXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlKyIgYmx1ciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIixpLmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3ZhciBlLHQsaTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT8iY2hlY2tib3giOnRoaXMuZWxlbWVudC5pcygiW3R5cGU9cmFkaW9dIik/InJhZGlvIjp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ImlucHV0IjoiYnV0dG9uIiwiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlPyhlPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLHQ9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGU9ZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbHRlcih0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksaT10aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksaSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucHJvcCgiYXJpYS1wcmVzc2VkIixpKSk6dGhpcy5idXR0b25FbGVtZW50PXRoaXMuZWxlbWVudH0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhoKyIgdWktc3RhdGUtYWN0aXZlICIrbCkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZT8odGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhIXQpLHQmJigiY2hlY2tib3giPT09dGhpcy50eXBlfHwicmFkaW8iPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIHVpLXN0YXRlLWFjdGl2ZSIpKSx2b2lkIDApOih0aGlzLl9yZXNldEJ1dHRvbigpLHZvaWQgMCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoImlucHV0LCBidXR0b24iKT90aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdCksInJhZGlvIj09PXRoaXMudHlwZT9kKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaXMoIjpjaGVja2VkIik/ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6ImNoZWNrYm94Ij09PXRoaXMudHlwZSYmKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKT90aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIikpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZigiaW5wdXQiPT09dGhpcy50eXBlKXJldHVybiB0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKSx2b2lkIDA7dmFyIHQ9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGwpLGk9ZSgiPHNwYW4+PC9zcGFuPiIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKHQuZW1wdHkoKSkudGV4dCgpLHM9dGhpcy5vcHRpb25zLmljb25zLG49cy5wcmltYXJ5JiZzLnNlY29uZGFyeSxhPVtdO3MucHJpbWFyeXx8cy5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZhLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhuPyJzIjpzLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxzLnByaW1hcnkmJnQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK3MucHJpbWFyeSsiJz48L3NwYW4+Iikscy5zZWNvbmRhcnkmJnQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitzLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChhLnB1c2gobj8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8dC5hdHRyKCJ0aXRsZSIsZS50cmltKGkpKSkpOmEucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLHQuYWRkQ2xhc3MoYS5qb2luKCIgIikpfX0pLGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2l0ZW1zOiJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YSh1aS1idXR0b24pIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uc2V0Iil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiZGlzYWJsZWQiPT09ZSYmdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIixlLHQpLHRoaXMuX3N1cGVyKGUsdCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD0icnRsIj09PXRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpLGk9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxzPWkuZmlsdGVyKCI6dWktYnV0dG9uIik7aS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKSxzLmJ1dHRvbigicmVmcmVzaCIpLHRoaXMuYnV0dG9ucz1pLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1yaWdodCI6InVpLWNvcm5lci1sZWZ0IikuZW5kKCkuZmlsdGVyKCI6bGFzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1sZWZ0IjoidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKX19KSxlLnVpLmJ1dHRvbixlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS4xMS40IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b09wZW46ITAsYnV0dG9uczpbXSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDoiQ2xvc2UiLGRpYWxvZ0NsYXNzOiIiLGRyYWdnYWJsZTohMCxoaWRlOm51bGwsaGVpZ2h0OiJhdXRvIixtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDswPmkmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGUsdGhpcy5fY3JlYXRlV3JhcHBlcigpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9jcmVhdGVUaXRsZWJhcigpLHRoaXMuX2NyZWF0ZUJ1dHRvblBhbmUoKSx0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHRoaXMub3B0aW9ucy5yZXNpemFibGUmJmUuZm4ucmVzaXphYmxlJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCksdGhpcy5faXNPcGVuPSExLHRoaXMuX3RyYWNrRm9jdXMoKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0LmpxdWVyeXx8dC5ub2RlVHlwZSk/ZSh0KTp0aGlzLmRvY3VtZW50LmZpbmQodHx8ImJvZHkiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnN0b3AoITAsITApLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIix0aGlzLm9yaWdpbmFsVGl0bGUpLGU9dC5wYXJlbnQuY2hpbGRyZW4oKS5lcSh0LmluZGV4KSxlLmxlbmd0aCYmZVswXSE9PXRoaXMuZWxlbWVudFswXT9lLmJlZm9yZSh0aGlzLmVsZW1lbnQpOnQucGFyZW50LmFwcGVuZCh0aGlzLmVsZW1lbnQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aURpYWxvZ30sZGlzYWJsZTplLm5vb3AsZW5hYmxlOmUubm9vcCxjbG9zZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXM7aWYodGhpcy5faXNPcGVuJiZ0aGlzLl90cmlnZ2VyKCJiZWZvcmVDbG9zZSIsdCkhPT0hMSl7aWYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSwhdGhpcy5vcGVuZXIuZmlsdGVyKCI6Zm9jdXNhYmxlIikuZm9jdXMoKS5sZW5ndGgpdHJ5e2k9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGkmJiJib2R5IiE9PWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpKS5ibHVyKCl9Y2F0Y2gobil7fXRoaXMuX2hpZGUodGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe3MuX3RyaWdnZXIoImNsb3NlIix0KX0pfX0saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbn0sbW92ZVRvVG9wOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZVRvVG9wKCl9LF9tb3ZlVG9Ub3A6ZnVuY3Rpb24odCxpKXt2YXIgcz0hMSxuPXRoaXMudWlEaWFsb2cuc2libGluZ3MoIi51aS1mcm9udDp2aXNpYmxlIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK2UodGhpcykuY3NzKCJ6LWluZGV4Iil9KS5nZXQoKSxhPU1hdGgubWF4LmFwcGx5KG51bGwsbik7cmV0dXJuIGE+PSt0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIpJiYodGhpcy51aURpYWxvZy5jc3MoInotaW5kZXgiLGErMSkscz0hMCkscyYmIWkmJnRoaXMuX3RyaWdnZXIoImZvY3VzIix0KSxzfSxvcGVuOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5faXNPcGVuPyh0aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpLHZvaWQgMCk6KHRoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCksdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fY3JlYXRlT3ZlcmxheSgpLHRoaXMuX21vdmVUb1RvcChudWxsLCEwKSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5jc3MoInotaW5kZXgiLHRoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7dC5fZm9jdXNUYWJiYWJsZSgpLHQuX3RyaWdnZXIoImZvY3VzIil9KSx0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl90cmlnZ2VyKCJvcGVuIiksdm9pZCAwKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9mb2N1c2VkRWxlbWVudDtlfHwoZT10aGlzLmVsZW1lbnQuZmluZCgiW2F1dG9mb2N1c10iKSksZS5sZW5ndGh8fChlPXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmZpbmQoIjp0YWJiYWJsZSIpKSxlLmxlbmd0aHx8KGU9dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2cpLGUuZXEoMCkuZm9jdXMoKX0sX2tlZXBGb2N1czpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIHQ9dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50LGk9dGhpcy51aURpYWxvZ1swXT09PXR8fGUuY29udGFpbnModGhpcy51aURpYWxvZ1swXSx0KTtpfHx0aGlzLl9mb2N1c1RhYmJhYmxlKCl9dC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLl9kZWxheShpKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nPWUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS1mcm9udCAiK3RoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuaGlkZSgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6ImRpYWxvZyJ9KS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nLHtrZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhdC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmdC5rZXlDb2RlJiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSh0KSx2b2lkIDA7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlRBQiYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBpPXRoaXMudWlEaWFsb2cuZmluZCgiOnRhYmJhYmxlIikscz1pLmZpbHRlcigiOmZpcnN0Iiksbj1pLmZpbHRlcigiOmxhc3QiKTt0LnRhcmdldCE9PW5bMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8dC5zaGlmdEtleT90LnRhcmdldCE9PXNbMF0mJnQudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8IXQuc2hpZnRLZXl8fCh0aGlzLl9kZWxheShmdW5jdGlvbigpe24uZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cy5mb2N1cygpfSksdC5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlVG9Ub3AoZSkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZCgiW2FyaWEtZGVzY3JpYmVkYnldIikubGVuZ3RofHx0aGlzLnVpRGlhbG9nLmF0dHIoeyJhcmlhLWRlc2NyaWJlZGJ5Ijp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKCJpZCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciB0O3RoaXMudWlEaWFsb2dUaXRsZWJhcj1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIHVpLWhlbHBlci1jbGVhcmZpeCIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbih0KXtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIil8fHRoaXMudWlEaWFsb2cuZm9jdXMoKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT1lKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+IikuYnV0dG9uKHtsYWJlbDp0aGlzLm9wdGlvbnMuY2xvc2VUZXh0LGljb25zOntwcmltYXJ5OiJ1aS1pY29uLWNsb3NldGhpY2sifSx0ZXh0OiExfSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpfX0pLHQ9ZSgiPHNwYW4+IikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlIikucHJlcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fdGl0bGUodCksdGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1sYWJlbGxlZGJ5Ijp0LmF0dHIoImlkIil9KX0sX3RpdGxlOmZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy50aXRsZXx8ZS5odG1sKCImIzE2MDsiKSxlLnRleHQodGhpcy5vcHRpb25zLnRpdGxlKQp9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7cmV0dXJuIHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSxlLmlzRW1wdHlPYmplY3QoaSl8fGUuaXNBcnJheShpKSYmIWkubGVuZ3RoPyh0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHZvaWQgMCk6KGUuZWFjaChpLGZ1bmN0aW9uKGkscyl7dmFyIG4sYTtzPWUuaXNGdW5jdGlvbihzKT97Y2xpY2s6cyx0ZXh0Oml9OnMscz1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0scyksbj1zLmNsaWNrLHMuY2xpY2s9ZnVuY3Rpb24oKXtuLmFwcGx5KHQuZWxlbWVudFswXSxhcmd1bWVudHMpfSxhPXtpY29uczpzLmljb25zLHRleHQ6cy5zaG93VGV4dH0sZGVsZXRlIHMuaWNvbnMsZGVsZXRlIHMuc2hvd1RleHQsZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHMpLmJ1dHRvbihhKS5hcHBlbmRUbyh0LnVpQnV0dG9uU2V0KX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdm9pZCAwKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3JldHVybntwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLm9mZnNldH19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihzLG4pe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixzLHQobikpfSxkcmFnOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigiZHJhZyIsZSx0KHMpKX0sc3RvcDpmdW5jdGlvbihuLGEpe3ZhciBvPWEub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1hLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisobz49MD8iKyI6IiIpK28rIiAiKyJ0b3AiKyhyPj0wPyIrIjoiIikrcixvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdG9wIixuLHQoYSkpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsYT10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6cy5tYXhXaWR0aCxtYXhIZWlnaHQ6cy5tYXhIZWlnaHQsbWluV2lkdGg6cy5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpvLHN0YXJ0OmZ1bmN0aW9uKHMsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKCJyZXNpemVTdGFydCIscyx0KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUscyl7aS5fdHJpZ2dlcigicmVzaXplIixlLHQocykpfSxzdG9wOmZ1bmN0aW9uKG4sYSl7dmFyIG89aS51aURpYWxvZy5vZmZzZXQoKSxyPW8ubGVmdC1pLmRvY3VtZW50LnNjcm9sbExlZnQoKSxoPW8udG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5oZWlnaHQ9aS51aURpYWxvZy5oZWlnaHQoKSxzLndpZHRoPWkudWlEaWFsb2cud2lkdGgoKSxzLnBvc2l0aW9uPXtteToibGVmdCB0b3AiLGF0OiJsZWZ0Iisocj49MD8iKyI6IiIpK3IrIiAiKyJ0b3AiKyhoPj0wPyIrIjoiIikraCxvZjppLndpbmRvd30sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLG4sdChhKSl9fSkuY3NzKCJwb3NpdGlvbiIsYSl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbih0KXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD1lKHQudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT1lLmluQXJyYXkodGhpcyx0KTstMSE9PWkmJnQuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLWluc3RhbmNlcyIpO3JldHVybiBlfHwoZT1bXSx0aGlzLmRvY3VtZW50LmRhdGEoInVpLWRpYWxvZy1pbnN0YW5jZXMiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiJhdXRvIj09PWUuaGVpZ2h0P2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTtlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksZXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMSxuPXt9O2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aS5fc2V0T3B0aW9uKGUsdCksZSBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLGUgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bZV09dCl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy51aURpYWxvZzsiZGlhbG9nQ2xhc3MiPT09ZSYmbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCJkaXNhYmxlZCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSwiYXBwZW5kVG8iPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiYnV0dG9ucyI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksImNsb3NlVGV4dCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSwiZHJhZ2dhYmxlIj09PWUmJihpPW4uaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxpJiYhdCYmbi5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSwicG9zaXRpb24iPT09ZSYmdGhpcy5fcG9zaXRpb24oKSwicmVzaXphYmxlIj09PWUmJihzPW4uaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxzJiYhdCYmbi5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiYic3RyaW5nIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSxzfHx0PT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksInRpdGxlIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC1lKSxpPSJudW1iZXIiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC1lKToibm9uZSIsImF1dG8iPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0OmksaGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aH0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwpe3ZhciB0PSEwO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dD0hMX0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dHx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiwodGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKXx8MCkrMSl9fSxfZGVzdHJveU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwmJnRoaXMub3ZlcmxheSl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKS0xO2U/dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luIikucmVtb3ZlRGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsfX19KSxlLndpZGdldCgidWkucHJvZ3Jlc3NiYXIiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e21heDoxMDAsdmFsdWU6MCxjaGFuZ2U6bnVsbCxjb21wbGV0ZTpudWxsfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vbGRWYWx1ZT10aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJwcm9ncmVzc2JhciIsImFyaWEtdmFsdWVtaW4iOnRoaXMubWlufSksdGhpcy52YWx1ZURpdj1lKCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy52YWx1ZURpdi5yZW1vdmUoKX0sdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5vcHRpb25zLnZhbHVlOih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIDApfSxfY29uc3RyYWluZWRWYWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZSYmKGU9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9ZT09PSExLCJudW1iZXIiIT10eXBlb2YgZSYmKGU9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sZSkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbihlKXt2YXIgdD1lLnZhbHVlO2RlbGV0ZSBlLnZhbHVlLHRoaXMuX3N1cGVyKGUpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7Im1heCI9PT1lJiYodD1NYXRoLm1heCh0aGlzLm1pbix0KSksImRpc2FibGVkIj09PWUmJnRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5fc3VwZXIoZSx0KX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlLGk9dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8dD50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsdD09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKGkudG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PWUoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dH0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT10JiYodGhpcy5vbGRWYWx1ZT10LHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpKSx0PT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKX19KSxlLndpZGdldCgidWkuc2VsZWN0bWVudSIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxzZWxlY3Q+IixvcHRpb25zOnthcHBlbmRUbzpudWxsLGRpc2FibGVkOm51bGwsaWNvbnM6e2J1dHRvbjoidWktaWNvbi10cmlhbmdsZS0xLXMifSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHdpZHRoOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoImlkIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZSsiLWJ1dHRvbiIsbWVudTplKyItbWVudSJ9LHRoaXMuX2RyYXdCdXR0b24oKSx0aGlzLl9kcmF3TWVudSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCl9LF9kcmF3QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmxhYmVsPWUoImxhYmVsW2Zvcj0nIit0aGlzLmlkcy5lbGVtZW50KyInXSIpLmF0dHIoImZvciIsdGhpcy5pZHMuYnV0dG9uKSx0aGlzLl9vbih0aGlzLmxhYmVsLHtjbGljazpmdW5jdGlvbihlKXt0aGlzLmJ1dHRvbi5mb2N1cygpLGUucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiLHRhYmluZGV4OnRoaXMub3B0aW9ucy5kaXNhYmxlZD8tMTowLGlkOnRoaXMuaWRzLmJ1dHRvbixyb2xlOiJjb21ib2JveCIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtYXV0b2NvbXBsZXRlIjoibGlzdCIsImFyaWEtb3ducyI6dGhpcy5pZHMubWVudSwiYXJpYS1oYXNwb3B1cCI6InRydWUifSkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSxlKCI8c3Bhbj4iLHsiY2xhc3MiOiJ1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbn0pLnByZXBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5idXR0b25UZXh0PWUoIjxzcGFuPiIseyJjbGFzcyI6InVpLXNlbGVjdG1lbnUtdGV4dCJ9KS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsdGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbjpzZWxlY3RlZCIpLnRleHQoKSksdGhpcy5fcmVzaXplQnV0dG9uKCksdGhpcy5fb24odGhpcy5idXR0b24sdGhpcy5fYnV0dG9uRXZlbnRzKSx0aGlzLmJ1dHRvbi5vbmUoImZvY3VzaW4iLGZ1bmN0aW9uKCl7dC5tZW51SXRlbXN8fHQuX3JlZnJlc2hNZW51KCl9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5idXR0b24pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmJ1dHRvbil9LF9kcmF3TWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5tZW51PWUoIjx1bD4iLHsiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1sYWJlbGxlZGJ5Ijp0aGlzLmlkcy5idXR0b24saWQ6dGhpcy5pZHMubWVudX0pLHRoaXMubWVudVdyYXA9ZSgiPGRpdj4iLHsiY2xhc3MiOiJ1aS1zZWxlY3RtZW51LW1lbnUgdWktZnJvbnQifSkuYXBwZW5kKHRoaXMubWVudSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5tZW51SW5zdGFuY2U9dGhpcy5tZW51Lm1lbnUoe3JvbGU6Imxpc3Rib3giLHNlbGVjdDpmdW5jdGlvbihlLGkpe2UucHJldmVudERlZmF1bHQoKSx0Ll9zZXRTZWxlY3Rpb24oKSx0Ll9zZWxlY3QoaS5pdGVtLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIpLGUpfSxmb2N1czpmdW5jdGlvbihlLGkpe3ZhciBzPWkuaXRlbS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKTtudWxsIT10LmZvY3VzSW5kZXgmJnMuaW5kZXghPT10LmZvY3VzSW5kZXgmJih0Ll90cmlnZ2VyKCJmb2N1cyIsZSx7aXRlbTpzfSksdC5pc09wZW58fHQuX3NlbGVjdChzLGUpKSx0LmZvY3VzSW5kZXg9cy5pbmRleCx0LmJ1dHRvbi5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHQubWVudUl0ZW1zLmVxKHMuaW5kZXgpLmF0dHIoImlkIikpfX0pLm1lbnUoImluc3RhbmNlIiksdGhpcy5tZW51LmFkZENsYXNzKCJ1aS1jb3JuZXItYm90dG9tIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKHRoaXMubWVudSwibW91c2VsZWF2ZSIpLHRoaXMubWVudUluc3RhbmNlLl9jbG9zZU9uRG9jdW1lbnRDbGljaz1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLm1lbnVJbnN0YW5jZS5faXNEaXZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLl9zZXRUZXh0KHRoaXMuYnV0dG9uVGV4dCx0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKS50ZXh0KCkpLHRoaXMub3B0aW9ucy53aWR0aHx8dGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3RoaXMubWVudS5lbXB0eSgpO3ZhciBlLHQ9dGhpcy5lbGVtZW50LmZpbmQoIm9wdGlvbiIpO3QubGVuZ3RoJiYodGhpcy5fcGFyc2VPcHRpb25zKHQpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZCgibGkiKS5ub3QoIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwIiksZT10aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLGUpLHRoaXMuX3NldEFyaWEoZS5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIikpKX0sb3BlbjpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLm1lbnVJdGVtcz8odGhpcy5tZW51LmZpbmQoIi51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkpKTp0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuaXNPcGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLl9yZXNpemVNZW51KCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHRoaXMuX2RvY3VtZW50Q2xpY2spLHRoaXMuX3RyaWdnZXIoIm9wZW4iLGUpKX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5tZW51V3JhcC5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5idXR0b259LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmlzT3BlbiYmKHRoaXMuaXNPcGVuPSExLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLnJhbmdlPW51bGwsdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQpLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcyxuPSIiO2UuZWFjaChpLGZ1bmN0aW9uKGksYSl7YS5vcHRncm91cCE9PW4mJihlKCI8bGk+Iix7ImNsYXNzIjoidWktc2VsZWN0bWVudS1vcHRncm91cCB1aS1tZW51LWRpdmlkZXIiKyhhLmVsZW1lbnQucGFyZW50KCJvcHRncm91cCIpLnByb3AoImRpc2FibGVkIik/IiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpLHRleHQ6YS5vcHRncm91cH0pLmFwcGVuZFRvKHQpLG49YS5vcHRncm91cCkscy5fcmVuZGVySXRlbURhdGEodCxhKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoInVpLXNlbGVjdG1lbnUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSgiPGxpPiIpO3JldHVybiBpLmRpc2FibGVkJiZzLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHRoaXMuX3NldFRleHQocyxpLmxhYmVsKSxzLmFwcGVuZFRvKHQpfSxfc2V0VGV4dDpmdW5jdGlvbihlLHQpe3Q/ZS50ZXh0KHQpOmUuaHRtbCgiJiMxNjA7Iil9LF9tb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPSIudWktbWVudS1pdGVtIjt0aGlzLmlzT3Blbj9pPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCk6KGk9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLG4rPSI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZCkiKSxzPSJmaXJzdCI9PT1lfHwibGFzdCI9PT1lP2lbImZpcnN0Ij09PWU/InByZXZBbGwiOiJuZXh0QWxsIl0obikuZXEoLTEpOmlbZSsiQWxsIl0obikuZXEoMCkscy5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKHQscyl9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUpe3RoaXNbdGhpcy5pc09wZW4/ImNsb3NlIjoib3BlbiJdKGUpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5yYW5nZSYmKHdpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmVtb3ZlQWxsUmFuZ2VzKCksZS5hZGRSYW5nZSh0aGlzLnJhbmdlKSk6dGhpcy5yYW5nZS5zZWxlY3QoKSx0aGlzLmJ1dHRvbi5mb2N1cygpKX0sX2RvY3VtZW50Q2xpY2s6e21vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLmlzT3BlbiYmKGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1zZWxlY3RtZW51LW1lbnUsICMiK3RoaXMuaWRzLmJ1dHRvbikubGVuZ3RofHx0aGlzLmNsb3NlKHQpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciBlO3dpbmRvdy5nZXRTZWxlY3Rpb24/KGU9d2luZG93LmdldFNlbGVjdGlvbigpLGUucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9ZS5nZXRSYW5nZUF0KDApKSk6dGhpcy5yYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX0sY2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5fc2V0U2VsZWN0aW9uKCksdGhpcy5fdG9nZ2xlKGUpfSxrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlRBQjpjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jbG9zZSh0KSxpPSExO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnRoaXMuaXNPcGVuJiZ0aGlzLl9zZWxlY3RGb2N1c2VkSXRlbSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0LmFsdEtleT90aGlzLl90b2dnbGUodCk6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5pc09wZW4/dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0odCk6dGhpcy5fdG9nZ2xlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5fbW92ZSgicHJldiIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6dGhpcy5fbW92ZSgibmV4dCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMuX21vdmUoImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMuX21vdmUoImxhc3QiLHQpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tZW51LnRyaWdnZXIodCksaT0hMX1pJiZ0LnByZXZlbnREZWZhdWx0KCl9fSxfc2VsZWN0Rm9jdXNlZEl0ZW06ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KTt0Lmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHx0aGlzLl9zZWxlY3QodC5kYXRhKCJ1aS1zZWxlY3RtZW51LWl0ZW0iKSxlKX0sX3NlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4O3RoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4PWUuaW5kZXgsdGhpcy5fc2V0VGV4dCh0aGlzLmJ1dHRvblRleHQsZS5sYWJlbCksdGhpcy5fc2V0QXJpYShlKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQse2l0ZW06ZX0pLGUuaW5kZXghPT1pJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHQse2l0ZW06ZX0pLHRoaXMuY2xvc2UodCl9LF9zZXRBcmlhOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubWVudUl0ZW1zLmVxKGUuaW5kZXgpLmF0dHIoImlkIik7dGhpcy5idXR0b24uYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dCwiYXJpYS1hY3RpdmVkZXNjZW5kYW50Ijp0fSksdGhpcy5tZW51LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsdCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiaWNvbnMiPT09ZSYmdGhpcy5idXR0b24uZmluZCgic3Bhbi51aS1pY29uIikucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbikuYWRkQ2xhc3ModC5idXR0b24pLHRoaXMuX3N1cGVyKGUsdCksImFwcGVuZFRvIj09PWUmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksImRpc2FibGVkIj09PWUmJih0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oImRpc2FibGVkIix0KSx0aGlzLmJ1dHRvbi50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLHQpLmF0dHIoImFyaWEtZGlzYWJsZWQiLHQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdCksdD8odGhpcy5idXR0b24uYXR0cigidGFiaW5kZXgiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoInRhYmluZGV4IiwwKSksIndpZHRoIj09PWUmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0PXQuanF1ZXJ5fHx0Lm5vZGVUeXBlP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSx0JiZ0WzBdfHwodD10aGlzLmVsZW1lbnQuY2xvc2VzdCgiLnVpLWZyb250IikpLHQubGVuZ3RofHwodD10aGlzLmRvY3VtZW50WzBdLmJvZHkpLHR9LF90b2dnbGVBdHRyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b24udG9nZ2xlQ2xhc3MoInVpLWNvcm5lci10b3AiLHRoaXMuaXNPcGVuKS50b2dnbGVDbGFzcygidWktY29ybmVyLWFsbCIsIXRoaXMuaXNPcGVuKS5hdHRyKCJhcmlhLWV4cGFuZGVkIix0aGlzLmlzT3BlbiksdGhpcy5tZW51V3JhcC50b2dnbGVDbGFzcygidWktc2VsZWN0bWVudS1vcGVuIix0aGlzLmlzT3BlbiksdGhpcy5tZW51LmF0dHIoImFyaWEtaGlkZGVuIiwhdGhpcy5pc09wZW4pfSxfcmVzaXplQnV0dG9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLndpZHRoO2V8fChlPXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgoZSl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEpKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57ZGlzYWJsZWQ6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIil9fSxfcGFyc2VPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPVtdO3QuZWFjaChmdW5jdGlvbih0LHMpe3ZhciBuPWUocyksYT1uLnBhcmVudCgib3B0Z3JvdXAiKTtpLnB1c2goe2VsZW1lbnQ6bixpbmRleDp0LHZhbHVlOm4udmFsKCksbGFiZWw6bi50ZXh0KCksb3B0Z3JvdXA6YS5hdHRyKCJsYWJlbCIpfHwiIixkaXNhYmxlZDphLnByb3AoImRpc2FibGVkIil8fG4ucHJvcCgiZGlzYWJsZWQiKX0pfSksdGhpcy5pdGVtcz1pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVsLmF0dHIoImZvciIsdGhpcy5pZHMuZWxlbWVudCl9fSksZS53aWRnZXQoInVpLnNsaWRlciIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMS40Iix3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbCxjaGFuZ2U6bnVsbCxzbGlkZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxudW1QYWdlczo1LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIHQsaSxzPXRoaXMub3B0aW9ucyxuPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxhPSI8c3BhbiBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIHRhYmluZGV4PScwJz48L3NwYW4+IixvPVtdO2ZvcihpPXMudmFsdWVzJiZzLnZhbHVlcy5sZW5ndGh8fDEsbi5sZW5ndGg+aSYmKG4uc2xpY2UoaSkucmVtb3ZlKCksbj1uLnNsaWNlKDAsaSkpLHQ9bi5sZW5ndGg7aT50O3QrKylvLnB1c2goYSk7dGhpcy5oYW5kbGVzPW4uYWRkKGUoby5qb2luKCIiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5oYW5kbGU9dGhpcy5oYW5kbGVzLmVxKDApLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIsdCl9KX0sX2NyZWF0ZVJhbmdlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLGk9IiI7dC5yYW5nZT8odC5yYW5nZT09PSEwJiYodC52YWx1ZXM/dC52YWx1ZXMubGVuZ3RoJiYyIT09dC52YWx1ZXMubGVuZ3RoP3QudmFsdWVzPVt0LnZhbHVlc1swXSx0LnZhbHVlc1swXV06ZS5pc0FycmF5KHQudmFsdWVzKSYmKHQudmFsdWVzPXQudmFsdWVzLnNsaWNlKDApKTp0LnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5sZW5ndGg/dGhpcy5yYW5nZS5yZW1vdmVDbGFzcygidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4IikuY3NzKHtsZWZ0OiIiLGJvdHRvbToiIn0pOih0aGlzLnJhbmdlPWUoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSxpPSJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiksdGhpcy5yYW5nZS5hZGRDbGFzcyhpKygibWluIj09PXQucmFuZ2V8fCJtYXgiPT09dC5yYW5nZT8iIHVpLXNsaWRlci1yYW5nZS0iK3QucmFuZ2U6IiIpKSk6KHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5yYW5nZT1udWxsKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fb2ZmKHRoaXMuaGFuZGxlcyksdGhpcy5fb24odGhpcy5oYW5kbGVzLHRoaXMuX2hhbmRsZUV2ZW50cyksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGFuZGxlcyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGFuZGxlcyl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbyxyLGgsbCx1PXRoaXMsZD10aGlzLm9wdGlvbnM7cmV0dXJuIGQuZGlzYWJsZWQ/ITE6KHRoaXMuZWxlbWVudFNpemU9e3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpfSx0aGlzLmVsZW1lbnRPZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLGk9e3g6dC5wYWdlWCx5OnQucGFnZVl9LHM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGkpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKzEsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7dmFyIGk9TWF0aC5hYnMocy11LnZhbHVlcyh0KSk7KG4+aXx8bj09PWkmJih0PT09dS5fbGFzdENoYW5nZWRWYWx1ZXx8dS52YWx1ZXModCk9PT1kLm1pbikpJiYobj1pLGE9ZSh0aGlzKSxvPXQpfSkscj10aGlzLl9zdGFydCh0LG8pLHI9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLHRoaXMuX2hhbmRsZUluZGV4PW8sYS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxoPWEub2Zmc2V0KCksbD0hZSh0LnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OnQucGFnZVgtaC5sZWZ0LWEud2lkdGgoKS8yLHRvcDp0LnBhZ2VZLWgudG9wLWEuaGVpZ2h0KCkvMi0ocGFyc2VJbnQoYS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoYS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoYS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUodCxvLHMpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgdD17eDplLnBhZ2VYLHk6ZS5wYWdlWX0saT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UodCk7cmV0dXJuIHRoaXMuX3NsaWRlKGUsdGhpcy5faGFuZGxlSW5kZXgsaSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYTtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsaT1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LGk9ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscz1pL3Qscz4xJiYocz0xKSwwPnMmJihzPTApLCJ2ZXJ0aWNhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYocz0xLXMpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNaW4oKStzKm4sdGhpcy5fdHJpbUFsaWduVmFsdWUoYSl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxpKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxpKXt2YXIgcyxuLGE7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHM9dGhpcy52YWx1ZXModD8wOjEpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJigwPT09dCYmaT5zfHwxPT09dCYmcz5pKSYmKGk9cyksaSE9PXRoaXMudmFsdWVzKHQpJiYobj10aGlzLnZhbHVlcygpLG5bdF09aSxhPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOmksdmFsdWVzOm59KSxzPXRoaXMudmFsdWVzKHQ/MDoxKSxhIT09ITEmJnRoaXMudmFsdWVzKHQsaSkpKTppIT09dGhpcy52YWx1ZSgpJiYoYT10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTppfSksYSE9PSExJiZ0aGlzLnZhbHVlKGkpKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyh0KSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLGkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBpPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihpLnZhbHVlPXRoaXMudmFsdWVzKHQpLGkudmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9dCx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUsaSl9fSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHZvaWQgMCk6dGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1t0XT10aGlzLl90cmltQWxpZ25WYWx1ZShpKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCx0KSx2b2lkIDA7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCFlLmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy5fdmFsdWVzKHQpOnRoaXMudmFsdWUoKTtmb3Iocz10aGlzLm9wdGlvbnMudmFsdWVzLG49YXJndW1lbnRzWzBdLGE9MDtzLmxlbmd0aD5hO2ErPTEpc1thXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW2FdKSx0aGlzLl9jaGFuZ2UobnVsbCxhKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzLG49MDtzd2l0Y2goInJhbmdlIj09PXQmJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYoIm1pbiI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6Im1heCI9PT1pJiYodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcyh0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aC0xKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpKSxlLmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihuPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSwiZGlzYWJsZWQiPT09dCYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISFpKSx0aGlzLl9zdXBlcih0LGkpLHQpe2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5oYW5kbGVzLmNzcygiaG9yaXpvbnRhbCI9PT1pPyJib3R0b20iOiJsZWZ0IiwiIik7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPTA7bj5zO3MrPTEpdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInN0ZXAiOmNhc2UibWluIjpjYXNlIm1heCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UicmFuZ2UiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9fSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIGU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSl9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpO2lmKHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKXtmb3IoaT10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCkscz0wO2kubGVuZ3RoPnM7cys9MSlpW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pO3JldHVybiBpfXJldHVybltdfSxfdHJpbUFsaWduVmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fdmFsdWVNaW4oKT49ZSlyZXR1cm4gdGhpcy5fdmFsdWVNaW4oKTtpZihlPj10aGlzLl92YWx1ZU1heCgpKXJldHVybiB0aGlzLl92YWx1ZU1heCgpO3ZhciB0PXRoaXMub3B0aW9ucy5zdGVwPjA/dGhpcy5vcHRpb25zLnN0ZXA6MSxpPShlLXRoaXMuX3ZhbHVlTWluKCkpJXQscz1lLWk7cmV0dXJuIDIqTWF0aC5hYnMoaSk+PXQmJihzKz1pPjA/dDotdCkscGFyc2VGbG9hdChzLnRvRml4ZWQoNSkpfSxfY2FsY3VsYXRlTmV3TWF4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLm1heCx0PXRoaXMuX3ZhbHVlTWluKCksaT10aGlzLm9wdGlvbnMuc3RlcCxzPU1hdGguZmxvb3IoKyhlLXQpLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpL2kpKmk7ZT1zK3QsdGhpcy5tYXg9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsaD10aGlzLGw9dGhpcy5fYW5pbWF0ZU9mZj8hMTpyLmFuaW1hdGUsdT17fTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihzKXtpPTEwMCooKGgudmFsdWVzKHMpLWguX3ZhbHVlTWluKCkpLyhoLl92YWx1ZU1heCgpLWguX3ZhbHVlTWluKCkpKSx1WyJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24/ImxlZnQiOiJib3R0b20iXT1pKyIlIixlKHRoaXMpLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0odSxyLmFuaW1hdGUpLGgub3B0aW9ucy5yYW5nZT09PSEwJiYoImhvcml6b250YWwiPT09aC5vcmllbnRhdGlvbj8oMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmktdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTppKyIlIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDppLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSx0PWl9KToocz10aGlzLnZhbHVlKCksbj10aGlzLl92YWx1ZU1pbigpLGE9dGhpcy5fdmFsdWVNYXgoKSxpPWEhPT1uPzEwMCooKHMtbikvKGEtbikpOjAsdVsiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJsZWZ0IjoiYm90dG9tIl09aSsiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh1LHIuYW5pbWF0ZSksIm1pbiI9PT1vJiYiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1pKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pLCJtaW4iPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OmkrIiUifSxyLmFuaW1hdGUpLCJtYXgiPT09byYmInZlcnRpY2FsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2VbbD8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLWkrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZih0LnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSEwLGUodC50YXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSxpPXRoaXMuX3N0YXJ0KHQsbyksaT09PSExKSlyZXR1cm59c3dpdGNoKGE9dGhpcy5vcHRpb25zLnN0ZXAscz1uPXRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMudmFsdWVzKG8pOnRoaXMudmFsdWUoKSx0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6bj10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpuPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKHMrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOm49dGhpcy5fdHJpbUFsaWduVmFsdWUocy0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihzPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzK2EpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihzPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShzLWEpfXRoaXMuX3NsaWRlKHQsbyxuKX0sa2V5dXA6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxpKSx0aGlzLl9jaGFuZ2UodCxpKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikpfX19KSxlLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTEuNCIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLCIiIT09dGhpcy52YWx1ZSgpJiZ0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LGk9dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goWyJtaW4iLCJtYXgiLCJzdGVwIl0sZnVuY3Rpb24oZSxzKXt2YXIgbj1pLmF0dHIocyk7dm9pZCAwIT09biYmbi5sZW5ndGgmJih0W3NdPW4pfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDoiX3N0b3AiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix2b2lkIDApOih0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSksdm9pZCAwKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKHQpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX19LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiBpKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLGkuY2FsbCh0aGlzKX0pLHRoaXMuX3N0YXJ0KHQpIT09ITEmJnRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe3JldHVybiBlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpP3RoaXMuX3N0YXJ0KHQpPT09ITE/ITE6KHRoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCksdm9pZCAwKTp2b2lkIDB9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJzcGluYnV0dG9uIiksdGhpcy5idXR0b25zPWUuZmluZCgiLnVpLXNwaW5uZXItYnV0dG9uIikuYXR0cigidGFiSW5kZXgiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoLjUqZS5oZWlnaHQoKSkmJmUuaGVpZ2h0KCk+MCYmZS5oZWlnaHQoZS5oZWlnaHQoKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9ZS51aS5rZXlDb2RlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugcy5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSx0KSwhMDtjYXNlIHMuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsdCksITA7Y2FzZSBzLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSx0KSwhMDtjYXNlIHMuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLHQpLCEwfXJldHVybiExfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnNwaW5uaW5nfHx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSkhPT0hMT8odGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApOiExfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxpKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LGkpfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmdGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6aX0pPT09ITF8fCh0aGlzLl92YWx1ZShpKSx0aGlzLmNvdW50ZXIrKyl9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBpP2UuaXNGdW5jdGlvbihpKT9pKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIrZSxpPXQuaW5kZXhPZigiLiIpO3JldHVybi0xPT09aT8wOnQubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9bnVsbCE9PXMubWluP3MubWluOjAsaT1lLXQsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsZT10K2ksZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmZT5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnMubWluPmU/cy5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoImN1bHR1cmUiPT09ZXx8Im51bWJlckZvcm1hdCI9PT1lKXt2YXIgaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCx0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSksdm9pZCAwfSgibWF4Ij09PWV8fCJtaW4iPT09ZXx8InN0ZXAiPT09ZSkmJiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dGhpcy5fcGFyc2UodCkpLCJpY29ucyI9PT1lJiYodGhpcy5idXR0b25zLmZpcnN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMudXApLmFkZENsYXNzKHQudXApLHRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZCgiLnVpLWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuZG93bikuYWRkQ2xhc3ModC5kb3duKSksdGhpcy5fc3VwZXIoZSx0KSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsISF0KSx0aGlzLmJ1dHRvbnMuYnV0dG9uKHQ/ImRpc2FibGUiOiJlbmFibGUiKSl9LF9zZXRPcHRpb25zOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSl9KSxfcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlJiYiIiE9PWUmJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLCIiPT09ZXx8aXNOYU4oZSk/bnVsbDplCn0sX2Zvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4iIj09PWU/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0saXNWYWxpZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWUoKTtyZXR1cm4gbnVsbD09PWU/ITE6ZT09PXRoaXMuX2FkanVzdFZhbHVlKGUpfSxfdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgaTsiIiE9PWUmJihpPXRoaXMuX3BhcnNlKGUpLG51bGwhPT1pJiYodHx8KGk9dGhpcy5fYWRqdXN0VmFsdWUoaSkpLGU9dGhpcy5fZm9ybWF0KGkpKSksdGhpcy5lbGVtZW50LnZhbChlKSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zcGlubmVyLWlucHV0IikucHJvcCgiZGlzYWJsZWQiLCExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKGUpfSksX3N0ZXBVcDpmdW5jdGlvbihlKXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oZSl9KSxfc3RlcERvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOnMoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpzKGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocyh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpLHZvaWQgMCk6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pLGUud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS4xMS40IixkZWxheTozMDAsb3B0aW9uczp7YWN0aXZlOm51bGwsY29sbGFwc2libGU6ITEsZXZlbnQ6ImNsaWNrIixoZWlnaHRTdHlsZToiY29udGVudCIsaGlkZTpudWxsLHNob3c6bnVsbCxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGwsYmVmb3JlTG9hZDpudWxsLGxvYWQ6bnVsbH0sX2lzTG9jYWw6ZnVuY3Rpb24oKXt2YXIgZT0vIy4qJC87cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBpLHM7dD10LmNsb25lTm9kZSghMSksaT10LmhyZWYucmVwbGFjZShlLCIiKSxzPWxvY2F0aW9uLmhyZWYucmVwbGFjZShlLCIiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2gobil7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaChuKXt9cmV0dXJuIHQuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsaS5jb2xsYXBzaWJsZSksdGhpcy5fcHJvY2Vzc1RhYnMoKSxpLmFjdGl2ZT10aGlzLl9pbml0aWFsQWN0aXZlKCksZS5pc0FycmF5KGkuZGlzYWJsZWQpJiYoaS5kaXNhYmxlZD1lLnVuaXF1ZShpLmRpc2FibGVkLmNvbmNhdChlLm1hcCh0aGlzLnRhYnMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gdC50YWJzLmluZGV4KGUpfSkpKS5zb3J0KCkpLHRoaXMuYWN0aXZlPXRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTplKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT10JiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtyZXR1cm4gZShuKS5hdHRyKCJhcmlhLWNvbnRyb2xzIik9PT1zPyh0PWksITEpOnZvaWQgMH0pLG51bGw9PT10JiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikpKSwobnVsbD09PXR8fC0xPT09dCkmJih0PXRoaXMudGFicy5sZW5ndGg/MDohMSkpLHQhPT0hMSYmKHQ9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcSh0KSksLTE9PT10JiYodD1pPyExOjApKSwhaSYmdD09PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0wKSx0fSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpOmUoKX19LF90YWJLZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCJsaSIpLHM9dGhpcy50YWJzLmluZGV4KGkpLG49ITA7aWYoIXRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpe3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cysrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6bj0hMSxzLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnM9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocyksdm9pZCAwO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnJldHVybiB0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocz09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6cyksdm9pZCAwO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxzPXRoaXMuX2ZvY3VzTmV4dFRhYihzLG4pLHQuY3RybEtleXx8dC5tZXRhS2V5fHwoaS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx0aGlzLnRhYnMuZXEocykuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbigiYWN0aXZlIixzKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVQYWdlTmF2KHQpfHx0LmN0cmxLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS5mb2N1cygpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUD8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwKTp0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfRE9XTj8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwKTp2b2lkIDB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtyZXR1cm4gdD5uJiYodD0wKSwwPnQmJih0PW4pLHR9Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PWUuaW5BcnJheShzKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspdD1pP3QrMTp0LTE7cmV0dXJuIHR9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLl9maW5kTmV4dFRhYihlLHQpLHRoaXMudGFicy5lcShlKS5mb2N1cygpLGV9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6ImRpc2FibGVkIj09PWU/KHRoaXMuX3NldHVwRGlzYWJsZWQodCksdm9pZCAwKToodGhpcy5fc3VwZXIoZSx0KSwiY29sbGFwc2libGUiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsdCksdHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSksImV2ZW50Ij09PWUmJnRoaXMuX3NldHVwRXZlbnRzKHQpLCJoZWlnaHRTdHlsZSI9PT1lJiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHQpLHZvaWQgMCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCJcXCQmIik6IiJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTt0LmRpc2FibGVkPWUubWFwKGkuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksdC5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PXQuZGlzYWJsZWQubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsdC5hY3RpdmUtMSksITEpKTp0LmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpOih0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cERpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7ImFyaWEtaGlkZGVuIjoiZmFsc2UifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLnRhYnMscz10aGlzLmFuY2hvcnMsbj10aGlzLnBhbmVsczt0aGlzLnRhYmxpc3Q9dGhpcy5fZ2V0TGlzdCgpLmFkZENsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLmF0dHIoInJvbGUiLCJ0YWJsaXN0IikuZGVsZWdhdGUoIj4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy50YWJzPXRoaXMudGFibGlzdC5maW5kKCI+IGxpOmhhcyhhW2hyZWZdKSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiKS5hdHRyKHtyb2xlOiJ0YWIiLHRhYkluZGV4Oi0xfSksdGhpcy5hbmNob3JzPXRoaXMudGFicy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSgiYSIsdGhpcylbMF19KS5hZGRDbGFzcygidWktdGFicy1hbmNob3IiKS5hdHRyKHtyb2xlOiJwcmVzZW50YXRpb24iLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHM9ZSgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGkscyl7dmFyIG4sYSxvLHI9ZShzKS51bmlxdWVJZCgpLmF0dHIoImlkIiksaD1lKHMpLmNsb3Nlc3QoImxpIiksbD1oLmF0dHIoImFyaWEtY29udHJvbHMiKTt0Ll9pc0xvY2FsKHMpPyhuPXMuaGFzaCxvPW4uc3Vic3RyaW5nKDEpLGE9dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihuKSkpOihvPWguYXR0cigiYXJpYS1jb250cm9scyIpfHxlKHt9KS51bmlxdWVJZCgpWzBdLmlkLG49IiMiK28sYT10LmVsZW1lbnQuZmluZChuKSxhLmxlbmd0aHx8KGE9dC5fY3JlYXRlUGFuZWwobyksYS5pbnNlcnRBZnRlcih0LnBhbmVsc1tpLTFdfHx0LnRhYmxpc3QpKSxhLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxhLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChhKSksbCYmaC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGguYXR0cih7ImFyaWEtY29udHJvbHMiOm8sImFyaWEtbGFiZWxsZWRieSI6cn0pLGEuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyKX0pLHRoaXMucGFuZWxzLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5hdHRyKCJyb2xlIiwidGFicGFuZWwiKSxpJiYodGhpcy5fb2ZmKGkubm90KHRoaXMudGFicykpLHRoaXMuX29mZihzLm5vdCh0aGlzLmFuY2hvcnMpKSx0aGlzLl9vZmYobi5ub3QodGhpcy5wYW5lbHMpKSl9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiPGRpdj4iKS5hdHRyKCJpZCIsdCkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApfSxfc2V0dXBEaXNhYmxlZDpmdW5jdGlvbih0KXtlLmlzQXJyYXkodCkmJih0Lmxlbmd0aD90Lmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PSEwKTp0PSExKTtmb3IodmFyIGkscz0wO2k9dGhpcy50YWJzW3NdO3MrKyl0PT09ITB8fC0xIT09ZS5pbkFycmF5KHMsdCk/ZShpKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpOmUoaSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e307dCYmZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2lbdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOiJfdGFiS2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjoiX3BhbmVsS2V5ZG93biJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLmVsZW1lbnQucGFyZW50KCk7ImZpbGwiPT09dD8oaT1zLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz10LmNzcygicG9zaXRpb24iKTsiYWJzb2x1dGUiIT09cyYmImZpeGVkIiE9PXMmJihpLT10Lm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXQmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSxlKHRoaXMpLmhlaWdodCgiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPWUodC5jdXJyZW50VGFyZ2V0KSxhPW4uY2xvc2VzdCgibGkiKSxvPWFbMF09PT1zWzBdLHI9byYmaS5jb2xsYXBzaWJsZSxoPXI/ZSgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKGEpLGw9cy5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyk6ZSgpLHU9e29sZFRhYjpzLG9sZFBhbmVsOmwsbmV3VGFiOnI/ZSgpOmEsbmV3UGFuZWw6aH07dC5wcmV2ZW50RGVmYXVsdCgpLGEuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGEuaGFzQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCx1KT09PSExfHwoaS5hY3RpdmU9cj8hMTp0aGlzLnRhYnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9bz9lKCk6YSx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fGUuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLHQpLHRoaXMuX3RvZ2dsZSh0LHUpKX0sX3RvZ2dsZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXthLnJ1bm5pbmc9ITEsYS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsaSl9ZnVuY3Rpb24gbigpe2kubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG8ubGVuZ3RoJiZhLm9wdGlvbnMuc2hvdz9hLl9zaG93KG8sYS5vcHRpb25zLnNob3cscyk6KG8uc2hvdygpLHMoKSl9dmFyIGE9dGhpcyxvPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbigpfSk6KGkub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIuaGlkZSgpLG4oKSksci5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLm9sZFRhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLG8ubGVuZ3RoJiZyLmxlbmd0aD9pLm9sZFRhYi5hdHRyKCJ0YWJJbmRleCIsLTEpOm8ubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1lKHRoaXMpLmF0dHIoInRhYkluZGV4Iil9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG8uYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLGkubmV3VGFiLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXMuX2ZpbmRBY3RpdmUodCk7c1swXSE9PXRoaXMuYWN0aXZlWzBdJiYocy5sZW5ndGh8fChzPXRoaXMuYWN0aXZlKSxpPXMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD09PSExP2UoKTp0aGlzLnRhYnMuZXEodCl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIrZSsiJ10iKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLXRhYnMtY29sbGFwc2libGUiKSx0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuYW5jaG9ycy5yZW1vdmVDbGFzcygidWktdGFicy1hbmNob3IiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFibGlzdC51bmJpbmQodGhpcy5ldmVudE5hbWVzcGFjZSksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtpP3QuYXR0cigiYXJpYS1jb250cm9scyIsaSkucmVtb3ZlRGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLnBhbmVscy5zaG93KCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZ0aGlzLnBhbmVscy5jc3MoImhlaWdodCIsIiIpfSxlbmFibGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkO2khPT0hMSYmKHZvaWQgMD09PXQ/aT0hMToodD10aGlzLl9nZXRJbmRleCh0KSxpPWUuaXNBcnJheShpKT9lLm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dD9lOm51bGx9KTplLm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gaSE9PXQ/aTpudWxsfSkpLHRoaXMuX3NldHVwRGlzYWJsZWQoaSkpfSxkaXNhYmxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihpIT09ITApe2lmKHZvaWQgMD09PXQpaT0hMDtlbHNle2lmKHQ9dGhpcy5fZ2V0SW5kZXgodCksLTEhPT1lLmluQXJyYXkodCxpKSlyZXR1cm47aT1lLmlzQXJyYXkoaSk/ZS5tZXJnZShbdF0saSkuc29ydCgpOlt0XX10aGlzLl9zZXR1cERpc2FibGVkKGkpfX0sbG9hZDpmdW5jdGlvbih0LGkpe3Q9dGhpcy5fZ2V0SW5kZXgodCk7dmFyIHM9dGhpcyxuPXRoaXMudGFicy5lcSh0KSxhPW4uZmluZCgiLnVpLXRhYnMtYW5jaG9yIiksbz10aGlzLl9nZXRQYW5lbEZvclRhYihuKSxyPXt0YWI6bixwYW5lbDpvfSxoPWZ1bmN0aW9uKGUsdCl7ImFib3J0Ij09PXQmJnMucGFuZWxzLnN0b3AoITEsITApLG4ucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLG8ucmVtb3ZlQXR0cigiYXJpYS1idXN5IiksZT09PXMueGhyJiZkZWxldGUgcy54aHJ9O3RoaXMuX2lzTG9jYWwoYVswXSl8fCh0aGlzLnhocj1lLmFqYXgodGhpcy5fYWpheFNldHRpbmdzKGEsaSxyKSksdGhpcy54aHImJiJjYW5jZWxlZCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYobi5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksby5hdHRyKCJhcmlhLWJ1c3kiLCJ0cnVlIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbihlLHQsbil7c2V0VGltZW91dChmdW5jdGlvbigpe28uaHRtbChlKSxzLl90cmlnZ2VyKCJsb2FkIixpLHIpLGgobix0KX0sMSl9KS5mYWlsKGZ1bmN0aW9uKGUsdCl7c2V0VGltZW91dChmdW5jdGlvbigpe2goZSx0KX0sMSl9KSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LGEpe3JldHVybiBuLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixpLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczphfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIitpKSl9fSksZS53aWRnZXQoInVpLnRvb2x0aXAiLHt2ZXJzaW9uOiIxLjExLjQiLG9wdGlvbnM6e2NvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLmF0dHIoInRpdGxlIil8fCIiO3JldHVybiBlKCI8YT4iKS50ZXh0KHQpLmh0bWwoKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXTpub3QoW2Rpc2FibGVkXSkiLHBvc2l0aW9uOntteToibGVmdCB0b3ArMTUiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXAifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24odCxpKXt2YXIgcz0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyk7cy5wdXNoKGkpLHQuZGF0YSgidWktdG9vbHRpcC1pZCIsaSkuYXR0cigiYXJpYS1kZXNjcmliZWRieSIsZS50cmltKHMuam9pbigiICIpKSl9LF9yZW1vdmVEZXNjcmliZWRCeTpmdW5jdGlvbih0KXt2YXIgaT10LmRhdGEoInVpLXRvb2x0aXAtaWQiKSxzPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKSxuPWUuaW5BcnJheShpLHMpOy0xIT09biYmcy5zcGxpY2UobiwxKSx0LnJlbW92ZURhdGEoInVpLXRvb2x0aXAtaWQiKSxzPWUudHJpbShzLmpvaW4oIiAiKSkscz90LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLHMpOnQucmVtb3ZlQXR0cigiYXJpYS1kZXNjcmliZWRieSIpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGUoKSx0aGlzLmxpdmVSZWdpb249ZSgiPGRpdj4iKS5hdHRyKHtyb2xlOiJsb2ciLCJhcmlhLWxpdmUiOiJhc3NlcnRpdmUiLCJhcmlhLXJlbGV2YW50IjoiYWRkaXRpb25zIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsaSl7dmFyIHM9dGhpcztyZXR1cm4iZGlzYWJsZWQiPT09dD8odGhpc1tpPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1pLHZvaWQgMCk6KHRoaXMuX3N1cGVyKHQsaSksImNvbnRlbnQiPT09dCYmZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oZSx0KXtzLl91cGRhdGVDb250ZW50KHQuZWxlbWVudCl9KSx2b2lkIDApfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj1lLkV2ZW50KCJibHVyIik7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PXMuZWxlbWVudFswXSx0LmNsb3NlKG4sITApfSksdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5pcygiW3RpdGxlXSIpJiZ0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHQuYXR0cigidGl0bGUiKSkucmVtb3ZlQXR0cigidGl0bGUiKX0pfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJnQuYXR0cigidGl0bGUiLHQuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pfSxvcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7cy5sZW5ndGgmJiFzLmRhdGEoInVpLXRvb2x0aXAtaWQiKSYmKHMuYXR0cigidGl0bGUiKSYmcy5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixzLmF0dHIoInRpdGxlIikpLHMuZGF0YSgidWktdG9vbHRpcC1vcGVuIiwhMCksdCYmIm1vdXNlb3ZlciI9PT10LnR5cGUmJnMucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxzPWUodGhpcyk7cy5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSYmKHQ9ZS5FdmVudCgiYmx1ciIpLHQudGFyZ2V0PXQuY3VycmVudFRhcmdldD10aGlzLGkuY2xvc2UodCwhMCkpLHMuYXR0cigidGl0bGUiKSYmKHMudW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpzLmF0dHIoInRpdGxlIil9LHMuYXR0cigidGl0bGUiLCIiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnModCxzKSx0aGlzLl91cGRhdGVDb250ZW50KHMsdCkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBpLHM9dGhpcy5vcHRpb25zLmNvbnRlbnQsbj10aGlzLGE9dD90LnR5cGU6bnVsbDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHM/dGhpcy5fb3Blbih0LGUscyk6KGk9cy5jYWxsKGVbMF0sZnVuY3Rpb24oaSl7bi5fZGVsYXkoZnVuY3Rpb24oKXtlLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiYodCYmKHQudHlwZT1hKSx0aGlzLl9vcGVuKHQsZSxpKSl9KX0pLGkmJnRoaXMuX29wZW4odCxlLGkpLHZvaWQgMCl9LF9vcGVuOmZ1bmN0aW9uKHQsaSxzKXtmdW5jdGlvbiBuKGUpe2wub2Y9ZSxvLmlzKCI6aGlkZGVuIil8fG8ucG9zaXRpb24obCl9dmFyIGEsbyxyLGgsbD1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKGE9dGhpcy5fZmluZChpKSlyZXR1cm4gYS50b29sdGlwLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKHMpLHZvaWQgMDtpLmlzKCJbdGl0bGVdIikmJih0JiYibW91c2VvdmVyIj09PXQudHlwZT9pLmF0dHIoInRpdGxlIiwiIik6aS5yZW1vdmVBdHRyKCJ0aXRsZSIpKSxhPXRoaXMuX3Rvb2x0aXAoaSksbz1hLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxvLmF0dHIoImlkIikpLG8uZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwocyksdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHMuY2xvbmU/KGg9cy5jbG9uZSgpLGgucmVtb3ZlQXR0cigiaWQiKS5maW5kKCJbaWRdIikucmVtb3ZlQXR0cigiaWQiKSk6aD1zLGUoIjxkaXY+IikuaHRtbChoKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pLHRoaXMub3B0aW9ucy50cmFjayYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpPyh0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZW1vdmU6bn0pLG4odCkpOm8ucG9zaXRpb24oZS5leHRlbmQoe29mOml9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLG8uaGlkZSgpLHRoaXMuX3Nob3cobyx0aGlzLm9wdGlvbnMuc2hvdyksdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7by5pcygiOnZpc2libGUiKSYmKG4obC5vZiksY2xlYXJJbnRlcnZhbChyKSl9LGUuZnguaW50ZXJ2YWwpKSx0aGlzLl90cmlnZ2VyKCJvcGVuIix0LHt0b29sdGlwOm99KX19LF9yZWdpc3RlckNsb3NlSGFuZGxlcnM6ZnVuY3Rpb24odCxpKXt2YXIgcz17a2V5dXA6ZnVuY3Rpb24odCl7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSl7dmFyIHM9ZS5FdmVudCh0KTtzLmN1cnJlbnRUYXJnZXQ9aVswXSx0aGlzLmNsb3NlKHMsITApfX19O2lbMF0hPT10aGlzLmVsZW1lbnRbMF0mJihzLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZVRvb2x0aXAodGhpcy5fZmluZChpKS50b29sdGlwKX0pLHQmJiJtb3VzZW92ZXIiIT09dC50eXBlfHwocy5tb3VzZWxlYXZlPSJjbG9zZSIpLHQmJiJmb2N1c2luIiE9PXQudHlwZXx8KHMuZm9jdXNvdXQ9ImNsb3NlIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLG49ZSh0P3QuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLGE9dGhpcy5fZmluZChuKTtyZXR1cm4gYT8oaT1hLnRvb2x0aXAsYS5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmIW4uYXR0cigidGl0bGUiKSYmbi5hdHRyKCJ0aXRsZSIsbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLHRoaXMuX3JlbW92ZURlc2NyaWJlZEJ5KG4pLGEuaGlkaW5nPSEwLGkuc3RvcCghMCksdGhpcy5faGlkZShpLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fcmVtb3ZlVG9vbHRpcChlKHRoaXMpKX0pLG4ucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1vcGVuIiksdGhpcy5fb2ZmKG4sIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobiwicmVtb3ZlIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLHQmJiJtb3VzZWxlYXZlIj09PXQudHlwZSYmZS5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbih0LGkpe2UoaS5lbGVtZW50KS5hdHRyKCJ0aXRsZSIsaS50aXRsZSksZGVsZXRlIHMucGFyZW50c1t0XX0pLGEuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsdCx7dG9vbHRpcDppfSksYS5oaWRpbmd8fChhLmNsb3Npbmc9ITEpKSx2b2lkIDApOihuLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHZvaWQgMCl9LF90b29sdGlwOmZ1bmN0aW9uKHQpe3ZhciBpPWUoIjxkaXY+IikuYXR0cigicm9sZSIsInRvb2x0aXAiKS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpLHM9aS51bmlxdWVJZCgpLmF0dHIoImlkIik7cmV0dXJuIGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXRvb2x0aXAtY29udGVudCIpLmFwcGVuZFRvKGkpLGkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLnRvb2x0aXBzW3NdPXtlbGVtZW50OnQsdG9vbHRpcDppfX0sX2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhKCJ1aS10b29sdGlwLWlkIik7cmV0dXJuIHQ/dGhpcy50b29sdGlwc1t0XTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbihlKXtlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW2UuYXR0cigiaWQiKV19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPWUuRXZlbnQoImJsdXIiKSxhPXMuZWxlbWVudDtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9YVswXSx0LmNsb3NlKG4sITApLGUoIiMiK2kpLnJlbW92ZSgpLGEuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiYoYS5hdHRyKCJ0aXRsZSIpfHxhLmF0dHIoInRpdGxlIixhLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksYS5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfX0pO3ZhciBjPSJ1aS1lZmZlY3RzLSIscD1lO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoZSx0LGkpe3ZhciBzPWRbdC50eXBlXXx8e307cmV0dXJuIG51bGw9PWU/aXx8IXQuZGVmP251bGw6dC5kZWY6KGU9cy5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpzLm1vZD8oZStzLm1vZCklcy5tb2Q6MD5lPzA6ZT5zLm1heD9zLm1heDplKX1mdW5jdGlvbiBzKGkpe3ZhciBzPWwoKSxuPXMuX3JnYmE9W107cmV0dXJuIGk9aS50b0xvd2VyQ2FzZSgpLGYoaCxmdW5jdGlvbihlLGEpe3ZhciBvLHI9YS5yZS5leGVjKGkpLGg9ciYmYS5wYXJzZShyKSxsPWEuc3BhY2V8fCJyZ2JhIjtyZXR1cm4gaD8obz1zW2xdKGgpLHNbdVtsXS5jYWNoZV09b1t1W2xdLmNhY2hlXSxuPXMuX3JnYmE9by5fcmdiYSwhMSk6dH0pLG4ubGVuZ3RoPygiMCwwLDAsMCI9PT1uLmpvaW4oKSYmZS5leHRlbmQobixhLnRyYW5zcGFyZW50KSxzKTphW2ldfWZ1bmN0aW9uIG4oZSx0LGkpe3JldHVybiBpPShpKzEpJTEsMT42Kmk/ZSs2Kih0LWUpKmk6MT4yKmk/dDoyPjMqaT9lKzYqKHQtZSkqKDIvMy1pKTplfXZhciBhLG89ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLHI9L14oW1wtK10pPVxzKihcZCtcLj9cZCopLyxoPVt7cmU6L3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XChccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bMi41NSplWzFdLDIuNTUqZVsyXSwyLjU1KmVbM10sZVs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdLDE2KSxwYXJzZUludChlWzJdLDE2KSxwYXJzZUludChlWzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fSx7cmU6L2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkPyg/OlwuXGQrKT8pXHMqKT9cKS8sc3BhY2U6ImhzbGEiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLGw9ZS5Db2xvcj1mdW5jdGlvbih0LGkscyxuKXtyZXR1cm4gbmV3IGUuQ29sb3IuZm4ucGFyc2UodCxpLHMsbil9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6ImJ5dGUifSxncmVlbjp7aWR4OjEsdHlwZToiYnl0ZSJ9LGJsdWU6e2lkeDoyLHR5cGU6ImJ5dGUifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6ImRlZ3JlZXMifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOiJwZXJjZW50In0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOiJwZXJjZW50In19fX0sZD17ImJ5dGUiOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LGM9bC5zdXBwb3J0PXt9LHA9ZSgiPHA+IilbMF0sZj1lLmVhY2g7cC5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixjLnJnYmE9cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGYodSxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSksbC5mbj1lLmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24obixvLHIsaCl7aWYobj09PXQpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KG4uanF1ZXJ5fHxuLm5vZGVUeXBlKSYmKG49ZShuKS5jc3Mobyksbz10KTt2YXIgZD10aGlzLGM9ZS50eXBlKG4pLHA9dGhpcy5fcmdiYT1bXTtyZXR1cm4gbyE9PXQmJihuPVtuLG8scixoXSxjPSJhcnJheSIpLCJzdHJpbmciPT09Yz90aGlzLnBhcnNlKHMobil8fGEuX2RlZmF1bHQpOiJhcnJheSI9PT1jPyhmKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3BbdC5pZHhdPWkoblt0LmlkeF0sdCl9KSx0aGlzKToib2JqZWN0Ij09PWM/KG4gaW5zdGFuY2VvZiBsP2YodSxmdW5jdGlvbihlLHQpe25bdC5jYWNoZV0mJihkW3QuY2FjaGVdPW5bdC5jYWNoZV0uc2xpY2UoKSl9KTpmKHUsZnVuY3Rpb24odCxzKXt2YXIgYT1zLmNhY2hlO2Yocy5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFkW2FdJiZzLnRvKXtpZigiYWxwaGEiPT09ZXx8bnVsbD09bltlXSlyZXR1cm47ZFthXT1zLnRvKGQuX3JnYmEpfWRbYV1bdC5pZHhdPWkobltlXSx0LCEwKX0pLGRbYV0mJjA+ZS5pbkFycmF5KG51bGwsZFthXS5zbGljZSgwLDMpKSYmKGRbYV1bM109MSxzLmZyb20mJihkLl9yZ2JhPXMuZnJvbShkW2FdKSkpfSksdGhpcyk6dH0saXM6ZnVuY3Rpb24oZSl7dmFyIGk9bChlKSxzPSEwLG49dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGUsYSl7dmFyIG8scj1pW2EuY2FjaGVdO3JldHVybiByJiYobz1uW2EuY2FjaGVdfHxhLnRvJiZhLnRvKG4uX3JnYmEpfHxbXSxmKGEucHJvcHMsZnVuY3Rpb24oZSxpKXtyZXR1cm4gbnVsbCE9cltpLmlkeF0/cz1yW2kuaWR4XT09PW9baS5pZHhdOnR9KSksc30pLHN9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gZih1LGZ1bmN0aW9uKGkscyl7dFtzLmNhY2hlXSYmZS5wdXNoKGkpfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBzPWwoZSksbj1zLl9zcGFjZSgpLGE9dVtuXSxvPTA9PT10aGlzLmFscGhhKCk/bCgidHJhbnNwYXJlbnQiKTp0aGlzLHI9b1thLmNhY2hlXXx8YS50byhvLl9yZ2JhKSxoPXIuc2xpY2UoKTtyZXR1cm4gcz1zW2EuY2FjaGVdLGYoYS5wcm9wcyxmdW5jdGlvbihlLG4pe3ZhciBhPW4uaWR4LG89clthXSxsPXNbYV0sdT1kW24udHlwZV18fHt9O251bGwhPT1sJiYobnVsbD09PW8/aFthXT1sOih1Lm1vZCYmKGwtbz51Lm1vZC8yP28rPXUubW9kOm8tbD51Lm1vZC8yJiYoby09dS5tb2QpKSxoW2FdPWkoKGwtbykqdCtvLG4pKSl9KSx0aGlzW25dKGgpfSxibGVuZDpmdW5jdGlvbih0KXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49bCh0KS5fcmdiYTtyZXR1cm4gbChlLm1hcChpLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcykqblt0XStzKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJyZ2JhKCIsaT1lLm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWU/dD4yPzE6MDplfSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSx0PSJyZ2IoIiksdCtpLmpvaW4oKSsiKSJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciB0PSJoc2xhKCIsaT1lLm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbihlLHQpe3JldHVybiBudWxsPT1lJiYoZT10PjI/MTowKSx0JiYzPnQmJihlPU1hdGgucm91bmQoMTAwKmUpKyIlIiksZX0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksdD0iaHNsKCIpLHQraS5qb2luKCkrIikifSx0b0hleFN0cmluZzpmdW5jdGlvbih0KXt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpO3JldHVybiB0JiZpLnB1c2gofn4oMjU1KnMpKSwiIyIrZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLDE9PT1lLmxlbmd0aD8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9yZ2JhWzNdPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxsLmZuLnBhcnNlLnByb3RvdHlwZT1sLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihudWxsPT1lWzBdfHxudWxsPT1lWzFdfHxudWxsPT1lWzJdKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdCxpLHM9ZVswXS8yNTUsbj1lWzFdLzI1NSxhPWVbMl0vMjU1LG89ZVszXSxyPU1hdGgubWF4KHMsbixhKSxoPU1hdGgubWluKHMsbixhKSxsPXItaCx1PXIraCxkPS41KnU7cmV0dXJuIHQ9aD09PXI/MDpzPT09cj82MCoobi1hKS9sKzM2MDpuPT09cj82MCooYS1zKS9sKzEyMDo2MCoocy1uKS9sKzI0MCxpPTA9PT1sPzA6LjU+PWQ/bC91OmwvKDItdSksW01hdGgucm91bmQodCklMzYwLGksZCxudWxsPT1vPzE6b119LHUuaHNsYS5mcm9tPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWVbMF18fG51bGw9PWVbMV18fG51bGw9PWVbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLGVbM11dO3ZhciB0PWVbMF0vMzYwLGk9ZVsxXSxzPWVbMl0sYT1lWzNdLG89LjU+PXM/cyooMStpKTpzK2ktcyppLHI9MipzLW87cmV0dXJuW01hdGgucm91bmQoMjU1Km4ocixvLHQrMS8zKSksTWF0aC5yb3VuZCgyNTUqbihyLG8sdCkpLE1hdGgucm91bmQoMjU1Km4ocixvLHQtMS8zKSksYV19LGYodSxmdW5jdGlvbihzLG4pe3ZhciBhPW4ucHJvcHMsbz1uLmNhY2hlLGg9bi50byx1PW4uZnJvbTtsLmZuW3NdPWZ1bmN0aW9uKHMpe2lmKGgmJiF0aGlzW29dJiYodGhpc1tvXT1oKHRoaXMuX3JnYmEpKSxzPT09dClyZXR1cm4gdGhpc1tvXS5zbGljZSgpO3ZhciBuLHI9ZS50eXBlKHMpLGQ9ImFycmF5Ij09PXJ8fCJvYmplY3QiPT09cj9zOmFyZ3VtZW50cyxjPXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gZihhLGZ1bmN0aW9uKGUsdCl7dmFyIHM9ZFsib2JqZWN0Ij09PXI/ZTp0LmlkeF07bnVsbD09cyYmKHM9Y1t0LmlkeF0pLGNbdC5pZHhdPWkocyx0KX0pLHU/KG49bCh1KGMpKSxuW29dPWMsbik6bChjKX0sZihhLGZ1bmN0aW9uKHQsaSl7bC5mblt0XXx8KGwuZm5bdF09ZnVuY3Rpb24obil7dmFyIGEsbz1lLnR5cGUobiksaD0iYWxwaGEiPT09dD90aGlzLl9oc2xhPyJoc2xhIjoicmdiYSI6cyxsPXRoaXNbaF0oKSx1PWxbaS5pZHhdO3JldHVybiJ1bmRlZmluZWQiPT09bz91OigiZnVuY3Rpb24iPT09byYmKG49bi5jYWxsKHRoaXMsdSksbz1lLnR5cGUobikpLG51bGw9PW4mJmkuZW1wdHk/dGhpczooInN0cmluZyI9PT1vJiYoYT1yLmV4ZWMobiksYSYmKG49dStwYXJzZUZsb2F0KGFbMl0pKigiKyI9PT1hWzFdPzE6LTEpKSksbFtpLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksbC5ob29rPWZ1bmN0aW9uKHQpe3ZhciBpPXQuc3BsaXQoIiAiKTtmKGksZnVuY3Rpb24odCxpKXtlLmNzc0hvb2tzW2ldPXtzZXQ6ZnVuY3Rpb24odCxuKXt2YXIgYSxvLHI9IiI7aWYoInRyYW5zcGFyZW50IiE9PW4mJigic3RyaW5nIiE9PWUudHlwZShuKXx8KGE9cyhuKSkpKXtpZihuPWwoYXx8biksIWMucmdiYSYmMSE9PW4uX3JnYmFbM10pe2ZvcihvPSJiYWNrZ3JvdW5kQ29sb3IiPT09aT90LnBhcmVudE5vZGU6dDsoIiI9PT1yfHwidHJhbnNwYXJlbnQiPT09cikmJm8mJm8uc3R5bGU7KXRyeXtyPWUuY3NzKG8sImJhY2tncm91bmRDb2xvciIpLG89by5wYXJlbnROb2RlfWNhdGNoKGgpe31uPW4uYmxlbmQociYmInRyYW5zcGFyZW50IiE9PXI/cjoiX2RlZmF1bHQiKX1uPW4udG9SZ2JhU3RyaW5nKCl9dHJ5e3Quc3R5bGVbaV09bn1jYXRjaChoKXt9fX0sZS5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpe3QuY29sb3JJbml0fHwodC5zdGFydD1sKHQuZWxlbSxpKSx0LmVuZD1sKHQuZW5kKSx0LmNvbG9ySW5pdD0hMCksZS5jc3NIb29rc1tpXS5zZXQodC5lbGVtLHQuc3RhcnQudHJhbnNpdGlvbih0LmVuZCx0LnBvcykpfX0pfSxsLmhvb2sobyksZS5jc3NIb29rcy5ib3JkZXJDb2xvcj17ZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXt9O3JldHVybiBmKFsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sZnVuY3Rpb24oaSxzKXt0WyJib3JkZXIiK3MrIkNvbG9yIl09ZX0pLHR9fSxhPWUuQ29sb3IubmFtZXM9e2FxdWE6IiMwMGZmZmYiLGJsYWNrOiIjMDAwMDAwIixibHVlOiIjMDAwMGZmIixmdWNoc2lhOiIjZmYwMGZmIixncmF5OiIjODA4MDgwIixncmVlbjoiIzAwODAwMCIsbGltZToiIzAwZmYwMCIsbWFyb29uOiIjODAwMDAwIixuYXZ5OiIjMDAwMDgwIixvbGl2ZToiIzgwODAwMCIscHVycGxlOiIjODAwMDgwIixyZWQ6IiNmZjAwMDAiLHNpbHZlcjoiI2MwYzBjMCIsdGVhbDoiIzAwODA4MCIsd2hpdGU6IiNmZmZmZmYiLHllbGxvdzoiI2ZmZmYwMCIsdHJhbnNwYXJlbnQ6W251bGwsbnVsbCxudWxsLDBdLF9kZWZhdWx0OiIjZmZmZmZmIn19KHApLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0KXt2YXIgaSxzLG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P3Qub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCk6dC5jdXJyZW50U3R5bGUsYT17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSwic3RyaW5nIj09dHlwZW9mIG5baV0mJihhW2UuY2FtZWxDYXNlKGkpXT1uW2ldKTtlbHNlIGZvcihpIGluIG4pInN0cmluZyI9PXR5cGVvZiBuW2ldJiYoYVtpXT1uW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBpKHQsaSl7dmFyIHMsYSxvPXt9O2ZvcihzIGluIGkpYT1pW3NdLHRbc10hPT1hJiYobltzXXx8KGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQoYSkpKSYmKG9bc109YSkpO3JldHVybiBvfXZhciBzPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sbj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07ZS5lYWNoKFsiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyVG9wU3R5bGUiXSxmdW5jdGlvbih0LGkpe2UuZnguc3RlcFtpXT1mdW5jdGlvbihlKXsoIm5vbmUiIT09ZS5lbmQmJiFlLnNldEF0dHJ8fDE9PT1lLnBvcyYmIWUuc2V0QXR0cikmJihwLnN0eWxlKGUuZWxlbSxpLGUuZW5kKSxlLnNldEF0dHI9ITApfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKG4sYSxvLHIpe3ZhciBoPWUuc3BlZWQoYSxvLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIGEsbz1lKHRoaXMpLHI9by5hdHRyKCJjbGFzcyIpfHwiIixsPWguY2hpbGRyZW4/by5maW5kKCIqIikuYWRkQmFjaygpOm87bD1sLm1hcChmdW5jdGlvbigpe3ZhciBpPWUodGhpcyk7cmV0dXJue2VsOmksc3RhcnQ6dCh0aGlzKX19KSxhPWZ1bmN0aW9uKCl7ZS5lYWNoKHMsZnVuY3Rpb24oZSx0KXtuW3RdJiZvW3QrIkNsYXNzIl0oblt0XSl9KX0sYSgpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9dCh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksby5hdHRyKCJjbGFzcyIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT1lLkRlZmVycmVkKCkscz1lLmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXthKCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLCIiKX0pfSksaC5jb21wbGV0ZS5jYWxsKG9bMF0pfSl9KX0sZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gcz9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOml9LHMsbixhKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KGUuZm4uYWRkQ2xhc3MpLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMsbixhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6aX0scyxuLGEpOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5yZW1vdmVDbGFzcyksdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLGEsbyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygc3x8dm9pZCAwPT09cz9uP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHM/e2FkZDppfTp7cmVtb3ZlOml9LG4sYSxvKTp0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTplLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LHMsbixhKX19KGUuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsaSxzLG4sYSl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6dH0scyxuLGEpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGkscyxuKXtyZXR1cm4gZS5pc1BsYWluT2JqZWN0KHQpJiYoaT10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxudWxsPT1pJiYoaT17fSksZS5pc0Z1bmN0aW9uKGkpJiYobj1pLHM9bnVsbCxpPXt9KSwoIm51bWJlciI9PXR5cGVvZiBpfHxlLmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLGUuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJmUuZXh0ZW5kKHQsaSkscz1zfHxpLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHM/czpzIGluIGUuZnguc3BlZWRzP2UuZnguc3BlZWRzW3NdOmUuZnguc3BlZWRzLl9kZWZhdWx0LHQuY29tcGxldGU9bnx8aS5jb21wbGV0ZSx0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIXR8fCJudW1iZXIiPT10eXBlb2YgdHx8ZS5meC5zcGVlZHNbdF0/ITA6InN0cmluZyIhPXR5cGVvZiB0fHxlLmVmZmVjdHMuZWZmZWN0W3RdP2UuaXNGdW5jdGlvbih0KT8hMDoib2JqZWN0IiE9dHlwZW9mIHR8fHQuZWZmZWN0PyExOiEwOiEwfWUuZXh0ZW5kKGUuZWZmZWN0cyx7dmVyc2lvbjoiMS4xMS40IixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPTA7dC5sZW5ndGg+aTtpKyspbnVsbCE9PXRbaV0mJmUuZGF0YShjK3RbaV0sZVswXS5zdHlsZVt0W2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzO2ZvcihzPTA7dC5sZW5ndGg+cztzKyspbnVsbCE9PXRbc10mJihpPWUuZGF0YShjK3Rbc10pLHZvaWQgMD09PWkmJihpPSIiKSxlLmNzcyh0W3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbihlLHQpe3JldHVybiJ0b2dnbGUiPT09dCYmKHQ9ZS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLHR9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGUsdCl7dmFyIGkscztzd2l0Y2goZVswXSl7Y2FzZSJ0b3AiOmk9MDticmVhaztjYXNlIm1pZGRsZSI6aT0uNTticmVhaztjYXNlImJvdHRvbSI6aT0xO2JyZWFrO2RlZmF1bHQ6aT1lWzBdL3QuaGVpZ2h0fXN3aXRjaChlWzFdKXtjYXNlImxlZnQiOnM9MDticmVhaztjYXNlImNlbnRlciI6cz0uNTticmVhaztjYXNlInJpZ2h0IjpzPTE7YnJlYWs7ZGVmYXVsdDpzPWVbMV0vdC53aWR0aH1yZXR1cm57eDpzLHk6aX19LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24odCl7aWYodC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiB0LnBhcmVudCgpO3ZhciBpPXt3aWR0aDp0Lm91dGVyV2lkdGgoITApLGhlaWdodDp0Lm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOnQuY3NzKCJmbG9hdCIpfSxzPWUoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0sYT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXthLmlkfWNhdGNoKG8pe2E9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHMpLCh0WzBdPT09YXx8ZS5jb250YWlucyh0WzBdLGEpKSYmZShhKS5mb2N1cygpLHM9dC5wYXJlbnQoKSwic3RhdGljIj09PXQuY3NzKCJwb3NpdGlvbiIpPyhzLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihlLmV4dGVuZChpLHtwb3NpdGlvbjp0LmNzcygicG9zaXRpb24iKSx6SW5kZXg6dC5jc3MoInotaW5kZXgiKX0pLGUuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGUscyl7aVtzXT10LmNzcyhzKSxpc05hTihwYXJzZUludChpW3NdLDEwKSkmJihpW3NdPSJhdXRvIil9KSx0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksdC5jc3Mobikscy5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKHQpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHQucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1pfHxlLmNvbnRhaW5zKHRbMF0saSkpJiZlKGkpLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxpLHMsbil7cmV0dXJuIG49bnx8e30sZS5lYWNoKGksZnVuY3Rpb24oZSxpKXt2YXIgYT10LmNzc1VuaXQoaSk7YVswXT4wJiYobltpXT1hWzBdKnMrYVsxXSl9KSxufX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGkoKXtlLmlzRnVuY3Rpb24oYSkmJmEuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLGE9cy5jb21wbGV0ZSxyPXMubW9kZTsobi5pcygiOmhpZGRlbiIpPyJoaWRlIj09PXI6InNob3ciPT09cik/KG5bcl0oKSxpKCkpOm8uY2FsbChuWzBdLHMsaSl9dmFyIHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj1zLm1vZGUsYT1zLnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF07cmV0dXJuIGUuZngub2ZmfHwhbz9uP3RoaXNbbl0ocy5kdXJhdGlvbixzLmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzLmNvbXBsZXRlJiZzLmNvbXBsZXRlLmNhbGwodGhpcyl9KTphPT09ITE/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYXx8ImZ4IixpKX0sc2hvdzpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0ic2hvdyIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0oZS5mbi5zaG93KSxoaWRlOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiBlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJoaWRlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8ImJvb2xlYW4iPT10eXBlb2YgcylyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT0idG9nZ2xlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fShlLmZuLnRvZ2dsZSksY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLmNzcyh0KSxzPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtpLmluZGV4T2YodCk+MCYmKHM9W3BhcnNlRmxvYXQoaSksdF0pfSksc319KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxpKXt0W2ldPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gMD09PWV8fDE9PT1lP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKDgwKihlLTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LGk9NDsoKHQ9TWF0aC5wb3coMiwtLWkpKS0xKS8xMT5lOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyp0LTIpLzIyLWUsMil9fSksZS5lYWNoKHQsZnVuY3Rpb24odCxpKXtlLmVhc2luZ1siZWFzZUluIit0XT1pLGUuZWFzaW5nWyJlYXNlT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gMS1pKDEtZSl9LGUuZWFzaW5nWyJlYXNlSW5PdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybi41PmU/aSgyKmUpLzI6MS1pKC0yKmUrMikvMn19KX0oKSxlLmVmZmVjdHMsZS5lZmZlY3RzLmVmZmVjdC5ibGluZD1mdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPWUodGhpcykscj0vdXB8ZG93bnx2ZXJ0aWNhbC8saD0vdXB8bGVmdHx2ZXJ0aWNhbHxob3Jpem9udGFsLyxsPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHU9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksZD10LmRpcmVjdGlvbnx8InVwIixjPXIudGVzdChkKSxwPWM/ImhlaWdodCI6IndpZHRoIixmPWM/InRvcCI6ImxlZnQiLG09aC50ZXN0KGQpLGc9e30sdj0ic2hvdyI9PT11O28ucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKT9lLmVmZmVjdHMuc2F2ZShvLnBhcmVudCgpLGwpOmUuZWZmZWN0cy5zYXZlKG8sbCksby5zaG93KCkscz1lLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj1zW3BdKCksYT1wYXJzZUZsb2F0KHMuY3NzKGYpKXx8MCxnW3BdPXY/bjowLG18fChvLmNzcyhjPyJib3R0b20iOiJyaWdodCIsMCkuY3NzKGM/InRvcCI6ImxlZnQiLCJhdXRvIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUifSksZ1tmXT12P2E6bithKSx2JiYocy5jc3MocCwwKSxtfHxzLmNzcyhmLGErbikpLHMuYW5pbWF0ZShnLHtkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PXUmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sbCksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpCn19KX0sZS5lZmZlY3RzLmVmZmVjdC5ib3VuY2U9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGEsbz1lKHRoaXMpLHI9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0saD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8ImVmZmVjdCIpLGw9ImhpZGUiPT09aCx1PSJzaG93Ij09PWgsZD10LmRpcmVjdGlvbnx8InVwIixjPXQuZGlzdGFuY2UscD10LnRpbWVzfHw1LGY9MipwKyh1fHxsPzE6MCksbT10LmR1cmF0aW9uL2YsZz10LmVhc2luZyx2PSJ1cCI9PT1kfHwiZG93biI9PT1kPyJ0b3AiOiJsZWZ0Iix5PSJ1cCI9PT1kfHwibGVmdCI9PT1kLGI9by5xdWV1ZSgpLF89Yi5sZW5ndGg7Zm9yKCh1fHxsKSYmci5wdXNoKCJvcGFjaXR5IiksZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKSxjfHwoYz1vWyJ0b3AiPT09dj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oKS8zKSx1JiYoYT17b3BhY2l0eToxfSxhW3ZdPTAsby5jc3MoIm9wYWNpdHkiLDApLmNzcyh2LHk/MiotYzoyKmMpLmFuaW1hdGUoYSxtLGcpKSxsJiYoYy89TWF0aC5wb3coMixwLTEpKSxhPXt9LGFbdl09MCxzPTA7cD5zO3MrKyluPXt9LG5bdl09KHk/Ii09IjoiKz0iKStjLG8uYW5pbWF0ZShuLG0sZykuYW5pbWF0ZShhLG0sZyksYz1sPzIqYzpjLzI7bCYmKG49e29wYWNpdHk6MH0sblt2XT0oeT8iLT0iOiIrPSIpK2Msby5hbmltYXRlKG4sbSxnKSksby5xdWV1ZShmdW5jdGlvbigpe2wmJm8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfSksXz4xJiZiLnNwbGljZS5hcHBseShiLFsxLDBdLmNvbmNhdChiLnNwbGljZShfLGYrMSkpKSxvLmRlcXVldWUoKX0sZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLGg9ZS5lZmZlY3RzLnNldE1vZGUobyx0Lm1vZGV8fCJoaWRlIiksbD0ic2hvdyI9PT1oLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsZD0idmVydGljYWwiPT09dSxjPWQ/ImhlaWdodCI6IndpZHRoIixwPWQ/InRvcCI6ImxlZnQiLGY9e307ZS5lZmZlY3RzLnNhdmUobyxyKSxvLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPSJJTUciPT09b1swXS50YWdOYW1lP3M6byxhPW5bY10oKSxsJiYobi5jc3MoYywwKSxuLmNzcyhwLGEvMikpLGZbY109bD9hOjAsZltwXT1sPzA6YS8yLG4uYW5pbWF0ZShmLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe2x8fG8uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG8sciksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmRyb3A9ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodGhpcyksYT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwib3BhY2l0eSIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImhpZGUiKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWg/InBvcyI6Im5lZyIsZD17b3BhY2l0eTpyPzE6MH07ZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxzPXQuZGlzdGFuY2V8fG5bInRvcCI9PT1sPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCkvMixyJiZuLmNzcygib3BhY2l0eSIsMCkuY3NzKGwsInBvcyI9PT11Py1zOnMpLGRbbF09KHI/InBvcyI9PT11PyIrPSI6Ii09IjoicG9zIj09PXU/Ii09IjoiKz0iKStzLG4uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PW8mJm4uaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKG4sYSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LmV4cGxvZGU9ZnVuY3Rpb24odCxpKXtmdW5jdGlvbiBzKCl7Yi5wdXNoKHRoaXMpLGIubGVuZ3RoPT09ZCpjJiZuKCl9ZnVuY3Rpb24gbigpe3AuY3NzKHt2aXNpYmlsaXR5OiJ2aXNpYmxlIn0pLGUoYikucmVtb3ZlKCksbXx8cC5oaWRlKCksaSgpfXZhciBhLG8scixoLGwsdSxkPXQucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KHQucGllY2VzKSk6MyxjPWQscD1lKHRoaXMpLGY9ZS5lZmZlY3RzLnNldE1vZGUocCx0Lm1vZGV8fCJoaWRlIiksbT0ic2hvdyI9PT1mLGc9cC5zaG93KCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikub2Zmc2V0KCksdj1NYXRoLmNlaWwocC5vdXRlcldpZHRoKCkvYykseT1NYXRoLmNlaWwocC5vdXRlckhlaWdodCgpL2QpLGI9W107Zm9yKGE9MDtkPmE7YSsrKWZvcihoPWcudG9wK2EqeSx1PWEtKGQtMSkvMixvPTA7Yz5vO28rKylyPWcubGVmdCtvKnYsbD1vLShjLTEpLzIscC5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotbyp2LHRvcDotYSp5fSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDp2LGhlaWdodDp5LGxlZnQ6cisobT9sKnY6MCksdG9wOmgrKG0/dSp5OjApLG9wYWNpdHk6bT8wOjF9KS5hbmltYXRlKHtsZWZ0OnIrKG0/MDpsKnYpLHRvcDpoKyhtPzA6dSp5KSxvcGFjaXR5Om0/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcscyl9LGUuZWZmZWN0cy5lZmZlY3QuZmFkZT1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8InRvZ2dsZSIpO3MuYW5pbWF0ZSh7b3BhY2l0eTpufSx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6aX0pfSxlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxpKXt2YXIgcyxuLGE9ZSh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHI9ZS5lZmZlY3RzLnNldE1vZGUoYSx0Lm1vZGV8fCJoaWRlIiksaD0ic2hvdyI9PT1yLGw9ImhpZGUiPT09cix1PXQuc2l6ZXx8MTUsZD0vKFswLTldKyklLy5leGVjKHUpLGM9ISF0Lmhvcml6Rmlyc3QscD1oIT09YyxmPXA/WyJ3aWR0aCIsImhlaWdodCJdOlsiaGVpZ2h0Iiwid2lkdGgiXSxtPXQuZHVyYXRpb24vMixnPXt9LHY9e307ZS5lZmZlY3RzLnNhdmUoYSxvKSxhLnNob3coKSxzPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGEpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxuPXA/W3Mud2lkdGgoKSxzLmhlaWdodCgpXTpbcy5oZWlnaHQoKSxzLndpZHRoKCldLGQmJih1PXBhcnNlSW50KGRbMV0sMTApLzEwMCpuW2w/MDoxXSksaCYmcy5jc3MoYz97aGVpZ2h0OjAsd2lkdGg6dX06e2hlaWdodDp1LHdpZHRoOjB9KSxnW2ZbMF1dPWg/blswXTp1LHZbZlsxXV09aD9uWzFdOjAscy5hbmltYXRlKGcsbSx0LmVhc2luZykuYW5pbWF0ZSh2LG0sdC5lYXNpbmcsZnVuY3Rpb24oKXtsJiZhLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShhLG8pLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX0pfSxlLmVmZmVjdHMuZWZmZWN0LmhpZ2hsaWdodD1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1bImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRDb2xvciIsIm9wYWNpdHkiXSxhPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwic2hvdyIpLG89e2JhY2tncm91bmRDb2xvcjpzLmNzcygiYmFja2dyb3VuZENvbG9yIil9OyJoaWRlIj09PWEmJihvLm9wYWNpdHk9MCksZS5lZmZlY3RzLnNhdmUocyxuKSxzLnNob3coKS5jc3Moe2JhY2tncm91bmRJbWFnZToibm9uZSIsYmFja2dyb3VuZENvbG9yOnQuY29sb3J8fCIjZmZmZjk5In0pLmFuaW1hdGUobyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXsiaGlkZSI9PT1hJiZzLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShzLG4pLGkoKX19KX0sZS5lZmZlY3RzLmVmZmVjdC5zaXplPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhLG89ZSh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGg9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGw9WyJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Il0sdT1bImZvbnRTaXplIl0sZD1bImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGM9WyJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxwPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHwiZWZmZWN0IiksZj10LnJlc3RvcmV8fCJlZmZlY3QiIT09cCxtPXQuc2NhbGV8fCJib3RoIixnPXQub3JpZ2lufHxbIm1pZGRsZSIsImNlbnRlciJdLHY9by5jc3MoInBvc2l0aW9uIikseT1mP3I6aCxiPXtoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTsic2hvdyI9PT1wJiZvLnNob3coKSxzPXtoZWlnaHQ6by5oZWlnaHQoKSx3aWR0aDpvLndpZHRoKCksb3V0ZXJIZWlnaHQ6by5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6by5vdXRlcldpZHRoKCl9LCJ0b2dnbGUiPT09dC5tb2RlJiYic2hvdyI9PT1wPyhvLmZyb209dC50b3x8YixvLnRvPXQuZnJvbXx8cyk6KG8uZnJvbT10LmZyb218fCgic2hvdyI9PT1wP2I6cyksby50bz10LnRvfHwoImhpZGUiPT09cD9iOnMpKSxhPXtmcm9tOnt5Om8uZnJvbS5oZWlnaHQvcy5oZWlnaHQseDpvLmZyb20ud2lkdGgvcy53aWR0aH0sdG86e3k6by50by5oZWlnaHQvcy5oZWlnaHQseDpvLnRvLndpZHRoL3Mud2lkdGh9fSwoImJveCI9PT1tfHwiYm90aCI9PT1tKSYmKGEuZnJvbS55IT09YS50by55JiYoeT15LmNvbmNhdChkKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxkLGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGQsYS50by55LG8udG8pKSxhLmZyb20ueCE9PWEudG8ueCYmKHk9eS5jb25jYXQoYyksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sYyxhLmZyb20ueCxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLGEudG8ueCxvLnRvKSkpLCgiY29udGVudCI9PT1tfHwiYm90aCI9PT1tKSYmYS5mcm9tLnkhPT1hLnRvLnkmJih5PXkuY29uY2F0KHUpLmNvbmNhdChsKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyx1LGEuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLHUsYS50by55LG8udG8pKSxlLmVmZmVjdHMuc2F2ZShvLHkpLG8uc2hvdygpLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKG8pLG8uY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpLmNzcyhvLmZyb20pLGcmJihuPWUuZWZmZWN0cy5nZXRCYXNlbGluZShnLHMpLG8uZnJvbS50b3A9KHMub3V0ZXJIZWlnaHQtby5vdXRlckhlaWdodCgpKSpuLnksby5mcm9tLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLm91dGVyV2lkdGgoKSkqbi54LG8udG8udG9wPShzLm91dGVySGVpZ2h0LW8udG8ub3V0ZXJIZWlnaHQpKm4ueSxvLnRvLmxlZnQ9KHMub3V0ZXJXaWR0aC1vLnRvLm91dGVyV2lkdGgpKm4ueCksby5jc3Moby5mcm9tKSwoImNvbnRlbnQiPT09bXx8ImJvdGgiPT09bSkmJihkPWQuY29uY2F0KFsibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIl0pLmNvbmNhdCh1KSxjPWMuY29uY2F0KFsibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0Il0pLGw9ci5jb25jYXQoZCkuY29uY2F0KGMpLG8uZmluZCgiKlt3aWR0aF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPXtoZWlnaHQ6aS5oZWlnaHQoKSx3aWR0aDppLndpZHRoKCksb3V0ZXJIZWlnaHQ6aS5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6aS5vdXRlcldpZHRoKCl9O2YmJmUuZWZmZWN0cy5zYXZlKGksbCksaS5mcm9tPXtoZWlnaHQ6cy5oZWlnaHQqYS5mcm9tLnksd2lkdGg6cy53aWR0aCphLmZyb20ueCxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KmEuZnJvbS55LG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKmEuZnJvbS54fSxpLnRvPXtoZWlnaHQ6cy5oZWlnaHQqYS50by55LHdpZHRoOnMud2lkdGgqYS50by54LG91dGVySGVpZ2h0OnMuaGVpZ2h0KmEudG8ueSxvdXRlcldpZHRoOnMud2lkdGgqYS50by54fSxhLmZyb20ueSE9PWEudG8ueSYmKGkuZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGQsYS5mcm9tLnksaS5mcm9tKSxpLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksZCxhLnRvLnksaS50bykpLGEuZnJvbS54IT09YS50by54JiYoaS5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksYyxhLmZyb20ueCxpLmZyb20pLGkudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxjLGEudG8ueCxpLnRvKSksaS5jc3MoaS5mcm9tKSxpLmFuaW1hdGUoaS50byx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7ZiYmZS5lZmZlY3RzLnJlc3RvcmUoaSxsKX0pfSkpLG8uYW5pbWF0ZShvLnRvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpezA9PT1vLnRvLm9wYWNpdHkmJm8uY3NzKCJvcGFjaXR5IixvLmZyb20ub3BhY2l0eSksImhpZGUiPT09cCYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyx5KSxmfHwoInN0YXRpYyI9PT12P28uY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDpvLnRvLnRvcCxsZWZ0Om8udG8ubGVmdH0pOmUuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe28uY3NzKHQsZnVuY3Rpb24odCxpKXt2YXIgcz1wYXJzZUludChpLDEwKSxuPWU/by50by5sZWZ0Om8udG8udG9wO3JldHVybiJhdXRvIj09PWk/bisicHgiOnMrbisicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksaSgpfX0pfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKSxuPWUuZXh0ZW5kKCEwLHt9LHQpLGE9ZS5lZmZlY3RzLnNldE1vZGUocyx0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fCgwPT09cGFyc2VJbnQodC5wZXJjZW50LDEwKT8wOiJoaWRlIj09PWE/MDoxMDApLHI9dC5kaXJlY3Rpb258fCJib3RoIixoPXQub3JpZ2luLGw9e2hlaWdodDpzLmhlaWdodCgpLHdpZHRoOnMud2lkdGgoKSxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgoKX0sdT17eToiaG9yaXpvbnRhbCIhPT1yP28vMTAwOjEseDoidmVydGljYWwiIT09cj9vLzEwMDoxfTtuLmVmZmVjdD0ic2l6ZSIsbi5xdWV1ZT0hMSxuLmNvbXBsZXRlPWksImVmZmVjdCIhPT1hJiYobi5vcmlnaW49aHx8WyJtaWRkbGUiLCJjZW50ZXIiXSxuLnJlc3RvcmU9ITApLG4uZnJvbT10LmZyb218fCgic2hvdyI9PT1hP3toZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTpsKSxuLnRvPXtoZWlnaHQ6bC5oZWlnaHQqdS55LHdpZHRoOmwud2lkdGgqdS54LG91dGVySGVpZ2h0Omwub3V0ZXJIZWlnaHQqdS55LG91dGVyV2lkdGg6bC5vdXRlcldpZHRoKnUueH0sbi5mYWRlJiYoInNob3ciPT09YSYmKG4uZnJvbS5vcGFjaXR5PTAsbi50by5vcGFjaXR5PTEpLCJoaWRlIj09PWEmJihuLmZyb20ub3BhY2l0eT0xLG4udG8ub3BhY2l0eT0wKSkscy5lZmZlY3Qobil9LGUuZWZmZWN0cy5lZmZlY3QucHVmZj1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbj1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPSJoaWRlIj09PW4sbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwxNTAscj1vLzEwMCxoPXtoZWlnaHQ6cy5oZWlnaHQoKSx3aWR0aDpzLndpZHRoKCksb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6cy5vdXRlcldpZHRoKCl9O2UuZXh0ZW5kKHQse2VmZmVjdDoic2NhbGUiLHF1ZXVlOiExLGZhZGU6ITAsbW9kZTpuLGNvbXBsZXRlOmkscGVyY2VudDphP286MTAwLGZyb206YT9oOntoZWlnaHQ6aC5oZWlnaHQqcix3aWR0aDpoLndpZHRoKnIsb3V0ZXJIZWlnaHQ6aC5vdXRlckhlaWdodCpyLG91dGVyV2lkdGg6aC5vdXRlcldpZHRoKnJ9fSkscy5lZmZlY3QodCl9LGUuZWZmZWN0cy5lZmZlY3QucHVsc2F0ZT1mdW5jdGlvbih0LGkpe3ZhciBzLG49ZSh0aGlzKSxhPWUuZWZmZWN0cy5zZXRNb2RlKG4sdC5tb2RlfHwic2hvdyIpLG89InNob3ciPT09YSxyPSJoaWRlIj09PWEsaD1vfHwiaGlkZSI9PT1hLGw9MioodC50aW1lc3x8NSkrKGg/MTowKSx1PXQuZHVyYXRpb24vbCxkPTAsYz1uLnF1ZXVlKCkscD1jLmxlbmd0aDtmb3IoKG98fCFuLmlzKCI6dmlzaWJsZSIpKSYmKG4uY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksZD0xKSxzPTE7bD5zO3MrKyluLmFuaW1hdGUoe29wYWNpdHk6ZH0sdSx0LmVhc2luZyksZD0xLWQ7bi5hbmltYXRlKHtvcGFjaXR5OmR9LHUsdC5lYXNpbmcpLG4ucXVldWUoZnVuY3Rpb24oKXtyJiZuLmhpZGUoKSxpKCl9KSxwPjEmJmMuc3BsaWNlLmFwcGx5KGMsWzEsMF0uY29uY2F0KGMuc3BsaWNlKHAsbCsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNoYWtlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8ImVmZmVjdCIpLHI9dC5kaXJlY3Rpb258fCJsZWZ0IixoPXQuZGlzdGFuY2V8fDIwLGw9dC50aW1lc3x8Myx1PTIqbCsxLGQ9TWF0aC5yb3VuZCh0LmR1cmF0aW9uL3UpLGM9InVwIj09PXJ8fCJkb3duIj09PXI/InRvcCI6ImxlZnQiLHA9InVwIj09PXJ8fCJsZWZ0Ij09PXIsZj17fSxtPXt9LGc9e30sdj1uLnF1ZXVlKCkseT12Lmxlbmd0aDtmb3IoZS5lZmZlY3RzLnNhdmUobixhKSxuLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKSxmW2NdPShwPyItPSI6Iis9IikraCxtW2NdPShwPyIrPSI6Ii09IikrMipoLGdbY109KHA/Ii09IjoiKz0iKSsyKmgsbi5hbmltYXRlKGYsZCx0LmVhc2luZykscz0xO2w+cztzKyspbi5hbmltYXRlKG0sZCx0LmVhc2luZykuYW5pbWF0ZShnLGQsdC5lYXNpbmcpO24uYW5pbWF0ZShtLGQsdC5lYXNpbmcpLmFuaW1hdGUoZixkLzIsdC5lYXNpbmcpLnF1ZXVlKGZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9KSx5PjEmJnYuc3BsaWNlLmFwcGx5KHYsWzEsMF0uY29uY2F0KHYuc3BsaWNlKHksdSsxKSkpLG4uZGVxdWV1ZSgpfSxlLmVmZmVjdHMuZWZmZWN0LnNsaWRlPWZ1bmN0aW9uKHQsaSl7dmFyIHMsbj1lKHRoaXMpLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0sbz1lLmVmZmVjdHMuc2V0TW9kZShuLHQubW9kZXx8InNob3ciKSxyPSJzaG93Ij09PW8saD10LmRpcmVjdGlvbnx8ImxlZnQiLGw9InVwIj09PWh8fCJkb3duIj09PWg/InRvcCI6ImxlZnQiLHU9InVwIj09PWh8fCJsZWZ0Ij09PWgsZD17fTtlLmVmZmVjdHMuc2F2ZShuLGEpLG4uc2hvdygpLHM9dC5kaXN0YW5jZXx8blsidG9wIj09PWw/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihuKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksciYmbi5jc3MobCx1P2lzTmFOKHMpPyItIitzOi1zOnMpLGRbbF09KHI/dT8iKz0iOiItPSI6dT8iLT0iOiIrPSIpK3Msbi5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09byYmbi5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobixhKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihuKSxpKCl9fSl9LGUuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG49ZSh0LnRvKSxhPSJmaXhlZCI9PT1uLmNzcygicG9zaXRpb24iKSxvPWUoImJvZHkiKSxyPWE/by5zY3JvbGxUb3AoKTowLGg9YT9vLnNjcm9sbExlZnQoKTowLGw9bi5vZmZzZXQoKSx1PXt0b3A6bC50b3AtcixsZWZ0OmwubGVmdC1oLGhlaWdodDpuLmlubmVySGVpZ2h0KCksd2lkdGg6bi5pbm5lcldpZHRoKCl9LGQ9cy5vZmZzZXQoKSxjPWUoIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PiIpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpkLnRvcC1yLGxlZnQ6ZC5sZWZ0LWgsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKSxwb3NpdGlvbjphPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUodSx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7Yy5yZW1vdmUoKSxpKCl9KX19KTs="></script>
<link href="data:text/css,%0A%0A%2Etocify%20%7B%0Awidth%3A%2020%25%3B%0Amax%2Dheight%3A%2090%25%3B%0Aoverflow%3A%20auto%3B%0Amargin%2Dleft%3A%202%25%3B%0Aposition%3A%20fixed%3B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%206px%3B%0A%7D%0A%0A%2Etocify%20ul%2C%20%2Etocify%20li%20%7B%0Alist%2Dstyle%3A%20none%3B%0Amargin%3A%200%3B%0Apadding%3A%200%3B%0Aborder%3A%20none%3B%0Aline%2Dheight%3A%2030px%3B%0A%7D%0A%0A%2Etocify%2Dheader%20%7B%0Atext%2Dindent%3A%2010px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2020px%3B%0Adisplay%3A%20none%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20li%20%7B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0A%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2030px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2040px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2050px%3B%0A%7D%0A%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%2Etocify%2Dsubheader%20%7B%0Atext%2Dindent%3A%2060px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20%3E%20a%2C%20%2Etocify%20%2Enav%2Dlist%20%2Enav%2Dheader%20%7B%0Amargin%3A%200px%3B%0A%7D%0A%0A%2Etocify%20%2Etocify%2Ditem%20a%2C%20%2Etocify%20%2Elist%2Dgroup%2Ditem%20%7B%0Apadding%3A%205px%3B%0A%7D%0A%2Etocify%20%2Enav%2Dpills%20%3E%20li%20%7B%0Afloat%3A%20none%3B%0A%7D%0A%0A%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyoganF1ZXJ5IFRvY2lmeSAtIHYxLjkuMSAtIDIwMTMtMTAtMjIKICogaHR0cDovL3d3dy5ncmVnZnJhbmtvLmNvbS9qcXVlcnkudG9jaWZ5LmpzLwogKiBDb3B5cmlnaHQgKGMpIDIwMTMgR3JlZyBGcmFua287IExpY2Vuc2VkIE1JVCAqLwoKLy8gSW1tZWRpYXRlbHktSW52b2tlZCBGdW5jdGlvbiBFeHByZXNzaW9uIChJSUZFKSBbQmVuIEFsbWFuIEJsb2cgUG9zdF0oaHR0cDovL2JlbmFsbWFuLmNvbS9uZXdzLzIwMTAvMTEvaW1tZWRpYXRlbHktaW52b2tlZC1mdW5jdGlvbi1leHByZXNzaW9uLykgdGhhdCBjYWxscyBhbm90aGVyIElJRkUgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIHBsdWdpbiBsb2dpYy4gIEkgdXNlZCB0aGlzIHBhdHRlcm4gc28gdGhhdCBhbnlvbmUgdmlld2luZyB0aGlzIGNvZGUgd291bGQgbm90IGhhdmUgdG8gc2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIHBhZ2UgdG8gdmlldyB0aGUgbG9jYWwgcGFyYW1ldGVycyB0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBtYWluIElJRkUuCihmdW5jdGlvbih0b2NpZnkpIHsKCiAgICAvLyBFQ01BU2NyaXB0IDUgU3RyaWN0IE1vZGU6IFtKb2huIFJlc2lnIEJsb2cgUG9zdF0oaHR0cDovL2Vqb2huLm9yZy9ibG9nL2VjbWFzY3JpcHQtNS1zdHJpY3QtbW9kZS1qc29uLWFuZC1tb3JlLykKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAvLyBDYWxscyB0aGUgc2Vjb25kIElJRkUgYW5kIGxvY2FsbHkgcGFzc2VzIGluIHRoZSBnbG9iYWwgalF1ZXJ5LCB3aW5kb3csIGFuZCBkb2N1bWVudCBvYmplY3RzCiAgICB0b2NpZnkod2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7CgogIH0KCiAgLy8gTG9jYWxseSBwYXNzZXMgaW4gYGpRdWVyeWAsIHRoZSBgd2luZG93YCBvYmplY3QsIHRoZSBgZG9jdW1lbnRgIG9iamVjdCwgYW5kIGFuIGB1bmRlZmluZWRgIHZhcmlhYmxlLiAgVGhlIGBqUXVlcnlgLCBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBvYmplY3RzIGFyZSBwYXNzZWQgaW4gbG9jYWxseSwgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgc2luY2UgamF2YXNjcmlwdCBmaXJzdCBzZWFyY2hlcyBmb3IgYSB2YXJpYWJsZSBtYXRjaCB3aXRoaW4gdGhlIGxvY2FsIHZhcmlhYmxlcyBzZXQgYmVmb3JlIHNlYXJjaGluZyB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBzZXQuICBBbGwgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZXMgYXJlIGFsc28gcGFzc2VkIGluIGxvY2FsbHkgdG8gYmUgbWluaWZpZXIgZnJpZW5kbHkuIGB1bmRlZmluZWRgIGNhbiBiZSBwYXNzZWQgaW4gbG9jYWxseSwgYmVjYXVzZSBpdCBpcyBub3QgYSByZXNlcnZlZCB3b3JkIGluIEphdmFTY3JpcHQuCiAgKGZ1bmN0aW9uKCQsIHdpbmRvdywgZG9jdW1lbnQsIHVuZGVmaW5lZCkgewoKICAgIC8vIEVDTUFTY3JpcHQgNSBTdHJpY3QgTW9kZTogW0pvaG4gUmVzaWcgQmxvZyBQb3N0XShodHRwOi8vZWpvaG4ub3JnL2Jsb2cvZWNtYXNjcmlwdC01LXN0cmljdC1tb2RlLWpzb24tYW5kLW1vcmUvKQogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciB0b2NDbGFzc05hbWUgPSAidG9jaWZ5IiwKICAgICAgdG9jQ2xhc3MgPSAiLiIgKyB0b2NDbGFzc05hbWUsCiAgICAgIHRvY0ZvY3VzQ2xhc3NOYW1lID0gInRvY2lmeS1mb2N1cyIsCiAgICAgIHRvY0hvdmVyQ2xhc3NOYW1lID0gInRvY2lmeS1ob3ZlciIsCiAgICAgIGhpZGVUb2NDbGFzc05hbWUgPSAidG9jaWZ5LWhpZGUiLAogICAgICBoaWRlVG9jQ2xhc3MgPSAiLiIgKyBoaWRlVG9jQ2xhc3NOYW1lLAogICAgICBoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LWhlYWRlciIsCiAgICAgIGhlYWRlckNsYXNzID0gIi4iICsgaGVhZGVyQ2xhc3NOYW1lLAogICAgICBzdWJoZWFkZXJDbGFzc05hbWUgPSAidG9jaWZ5LXN1YmhlYWRlciIsCiAgICAgIHN1YmhlYWRlckNsYXNzID0gIi4iICsgc3ViaGVhZGVyQ2xhc3NOYW1lLAogICAgICBpdGVtQ2xhc3NOYW1lID0gInRvY2lmeS1pdGVtIiwKICAgICAgaXRlbUNsYXNzID0gIi4iICsgaXRlbUNsYXNzTmFtZSwKICAgICAgZXh0ZW5kUGFnZUNsYXNzTmFtZSA9ICJ0b2NpZnktZXh0ZW5kLXBhZ2UiLAogICAgICBleHRlbmRQYWdlQ2xhc3MgPSAiLiIgKyBleHRlbmRQYWdlQ2xhc3NOYW1lOwoKICAgIC8vIENhbGxpbmcgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IE1ldGhvZAogICAgJC53aWRnZXQoInRvYy50b2NpZnkiLCB7CgogICAgICAvL1BsdWdpbiB2ZXJzaW9uCiAgICAgIHZlcnNpb246ICIxLjkuMSIsCgogICAgICAvLyBUaGVzZSBvcHRpb25zIHdpbGwgYmUgdXNlZCBhcyBkZWZhdWx0cwogICAgICBvcHRpb25zOiB7CgogICAgICAgIC8vICoqY29udGV4dCoqOiBBY2NlcHRzIFN0cmluZzogQW55IGpRdWVyeSBzZWxlY3RvcgogICAgICAgIC8vIFRoZSBjb250YWluZXIgZWxlbWVudCB0aGF0IGhvbGRzIGFsbCBvZiB0aGUgZWxlbWVudHMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMKICAgICAgICBjb250ZXh0OiAiYm9keSIsCgogICAgICAgIC8vICoqaWdub3JlU2VsZWN0b3IqKjogQWNjZXB0cyBTdHJpbmc6IEFueSBqUXVlcnkgc2VsZWN0b3IKICAgICAgICAvLyBBIHNlbGVjdG9yIHRvIGFueSBlbGVtZW50IHRoYXQgd291bGQgYmUgbWF0Y2hlZCBieSBzZWxlY3RvcnMgdGhhdCB5b3Ugd2lzaCB0byBiZSBpZ25vcmVkCiAgICAgICAgaWdub3JlU2VsZWN0b3I6IG51bGwsCgogICAgICAgIC8vICoqc2VsZWN0b3JzKio6IEFjY2VwdHMgYW4gQXJyYXkgb2YgU3RyaW5nczogQW55IGpRdWVyeSBzZWxlY3RvcnMKICAgICAgICAvLyBUaGUgZWxlbWVudCdzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgVGhlIG9yZGVyIGlzIHZlcnkgaW1wb3J0YW50IHNpbmNlIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSB0YWJsZSBvZiBjb250ZW50J3MgbmVzdGluZyBzdHJ1Y3R1cmUKICAgICAgICBzZWxlY3RvcnM6ICJoMSwgaDIsIGgzIiwKCiAgICAgICAgLy8gKipzaG93QW5kSGlkZSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIFVzZWQgdG8gZGV0ZXJtaW5lIGlmIGVsZW1lbnRzIHNob3VsZCBiZSBzaG93biBhbmQgaGlkZGVuCiAgICAgICAgc2hvd0FuZEhpZGU6IHRydWUsCgogICAgICAgIC8vICoqc2hvd0VmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZUluIiwgInNob3ciLCBvciAic2xpZGVEb3duIgogICAgICAgIC8vIFVzZWQgdG8gZGlzcGxheSBhbnkgb2YgdGhlIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcwogICAgICAgIHNob3dFZmZlY3Q6ICJzbGlkZURvd24iLAoKICAgICAgICAvLyAqKnNob3dFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBzaG93IGFuaW1hdGlvbgogICAgICAgIHNob3dFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqaGlkZUVmZmVjdCoqOiBBY2NlcHRzIFN0cmluZzogIm5vbmUiLCAiZmFkZU91dCIsICJoaWRlIiwgb3IgInNsaWRlVXAiCiAgICAgICAgLy8gVXNlZCB0byBoaWRlIGFueSBvZiB0aGUgdGFibGUgb2YgY29udGVudHMgbmVzdGVkIGl0ZW1zCiAgICAgICAgaGlkZUVmZmVjdDogInNsaWRlVXAiLAoKICAgICAgICAvLyAqKmhpZGVFZmZlY3RTcGVlZCoqOiBBY2NlcHRzIE51bWJlciAobWlsbGlzZWNvbmRzKSBvciBTdHJpbmc6ICJzbG93IiwgIm1lZGl1bSIsIG9yICJmYXN0IgogICAgICAgIC8vIFRoZSB0aW1lIGR1cmF0aW9uIG9mIHRoZSBoaWRlIGFuaW1hdGlvbgogICAgICAgIGhpZGVFZmZlY3RTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc21vb3RoU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiBhIGpRdWVyeSBhbmltYXRpb24gc2hvdWxkIGJlIHVzZWQgdG8gc2Nyb2xsIHRvIHNwZWNpZmljIHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW1zIG9uIHRoZSBwYWdlCiAgICAgICAgc21vb3RoU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKnNtb290aFNjcm9sbFNwZWVkKio6IEFjY2VwdHMgTnVtYmVyIChtaWxsaXNlY29uZHMpIG9yIFN0cmluZzogInNsb3ciLCAibWVkaXVtIiwgb3IgImZhc3QiCiAgICAgICAgLy8gVGhlIHRpbWUgZHVyYXRpb24gb2YgdGhlIHNtb290aFNjcm9sbCBhbmltYXRpb24KICAgICAgICBzbW9vdGhTY3JvbGxTcGVlZDogIm1lZGl1bSIsCgogICAgICAgIC8vICoqc2Nyb2xsVG8qKjogQWNjZXB0cyBOdW1iZXIgKHBpeGVscykKICAgICAgICAvLyBUaGUgYW1vdW50IG9mIHNwYWNlIGJldHdlZW4gdGhlIHRvcCBvZiBwYWdlIGFuZCB0aGUgc2VsZWN0ZWQgdGFibGUgb2YgY29udGVudHMgaXRlbSBhZnRlciB0aGUgcGFnZSBoYXMgYmVlbiBzY3JvbGxlZAogICAgICAgIHNjcm9sbFRvOiAwLAoKICAgICAgICAvLyAqKnNob3dBbmRIaWRlT25TY3JvbGwqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBEZXRlcm1pbmVzIGlmIHRhYmxlIG9mIGNvbnRlbnRzIG5lc3RlZCBpdGVtcyBzaG91bGQgYmUgc2hvd24gYW5kIGhpZGRlbiB3aGlsZSBzY3JvbGxpbmcKICAgICAgICBzaG93QW5kSGlkZU9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9uU2Nyb2xsKio6IEFjY2VwdHMgYSBib29sZWFuOiB0cnVlIG9yIGZhbHNlCiAgICAgICAgLy8gRGV0ZXJtaW5lcyBpZiB0YWJsZSBvZiBjb250ZW50cyBuZXN0ZWQgaXRlbXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkIChzZXQgdG8gYSBkaWZmZXJlbnQgY29sb3IpIHdoaWxlIHNjcm9sbGluZwogICAgICAgIGhpZ2hsaWdodE9uU2Nyb2xsOiB0cnVlLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodE9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyCiAgICAgICAgLy8gVGhlIG9mZnNldCBkaXN0YW5jZSBpbiBwaXhlbHMgdG8gdHJpZ2dlciB0aGUgbmV4dCBhY3RpdmUgdGFibGUgb2YgY29udGVudHMgaXRlbQogICAgICAgIGhpZ2hsaWdodE9mZnNldDogNDAsCgogICAgICAgIC8vICoqdGhlbWUqKjogQWNjZXB0cyBhIHN0cmluZzogImJvb3RzdHJhcCIsICJqcXVlcnl1aSIsIG9yICJub25lIgogICAgICAgIC8vIERldGVybWluZXMgaWYgVHdpdHRlciBCb290c3RyYXAsIGpRdWVyeVVJLCBvciBUb2NpZnkgY2xhc3NlcyBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHRhYmxlIG9mIGNvbnRlbnRzCiAgICAgICAgdGhlbWU6ICJib290c3RyYXAiLAoKICAgICAgICAvLyAqKmV4dGVuZFBhZ2UqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBJZiBhIHVzZXIgc2Nyb2xscyB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIGFuZCB0aGUgcGFnZSBpcyBub3QgdGFsbCBlbm91Z2ggdG8gc2Nyb2xsIHRvIHRoZSBsYXN0IHRhYmxlIG9mIGNvbnRlbnRzIGl0ZW0sIHRoZW4gdGhlIHBhZ2UgaGVpZ2h0IGlzIGluY3JlYXNlZAogICAgICAgIGV4dGVuZFBhZ2U6IHRydWUsCgogICAgICAgIC8vICoqZXh0ZW5kUGFnZU9mZnNldCoqOiBBY2NlcHRzIGEgbnVtYmVyOiBwaXhlbHMKICAgICAgICAvLyBIb3cgY2xvc2UgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhIHVzZXIgbXVzdCBzY3JvbGwgYmVmb3JlIHRoZSBwYWdlIGlzIGV4dGVuZGVkCiAgICAgICAgZXh0ZW5kUGFnZU9mZnNldDogMTAwLAoKICAgICAgICAvLyAqKmhpc3RvcnkqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBBZGRzIGEgaGFzaCB0byB0aGUgcGFnZSB1cmwgdG8gbWFpbnRhaW4gaGlzdG9yeQogICAgICAgIGhpc3Rvcnk6IHRydWUsCgogICAgICAgIC8vICoqc2Nyb2xsSGlzdG9yeSoqOiBBY2NlcHRzIGEgYm9vbGVhbjogdHJ1ZSBvciBmYWxzZQogICAgICAgIC8vIEFkZHMgYSBoYXNoIHRvIHRoZSBwYWdlIHVybCwgdG8gbWFpbnRhaW4gaGlzdG9yeSwgd2hlbiBzY3JvbGxpbmcgdG8gYSBUT0MgaXRlbQogICAgICAgIHNjcm9sbEhpc3Rvcnk6IGZhbHNlLAoKICAgICAgICAvLyAqKmhhc2hHZW5lcmF0b3IqKjogSG93IHRoZSBoYXNoIHZhbHVlICh0aGUgYW5jaG9yIHNlZ21lbnQgb2YgdGhlIFVSTCwgZm9sbG93aW5nIHRoZQogICAgICAgIC8vICMgY2hhcmFjdGVyKSB3aWxsIGJlIGdlbmVyYXRlZC4KICAgICAgICAvLwogICAgICAgIC8vICJjb21wYWN0IiAoZGVmYXVsdCkgLSAjQ29tcHJlc3Nlc0V2ZXJ5dGhpbmdUb2dldGhlcgogICAgICAgIC8vICJwcmV0dHkiIC0gI2xvb2tzLWxpa2UtYS1uaWNlLXVybC1hbmQtaXMtZWFzaWx5LXJlYWRhYmxlCiAgICAgICAgLy8gZnVuY3Rpb24odGV4dCwgZWxlbWVudCl7fSAtIFlvdXIgb3duIGhhc2ggZ2VuZXJhdGlvbiBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHRleHQgYXMgYW4KICAgICAgICAvLyBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIGhhc2ggdmFsdWUuCiAgICAgICAgaGFzaEdlbmVyYXRvcjogImNvbXBhY3QiLAoKICAgICAgICAvLyAqKmhpZ2hsaWdodERlZmF1bHQqKjogQWNjZXB0cyBhIGJvb2xlYW46IHRydWUgb3IgZmFsc2UKICAgICAgICAvLyBTZXQncyB0aGUgZmlyc3QgVE9DIGl0ZW0gYXMgYWN0aXZlIGlmIG5vIG90aGVyIFRPQyBpdGVtIGlzIGFjdGl2ZS4KICAgICAgICBoaWdobGlnaHREZWZhdWx0OiB0cnVlCgogICAgICB9LAoKICAgICAgLy8gX0NyZWF0ZQogICAgICAvLyAtLS0tLS0tCiAgICAgIC8vICAgICAgQ29uc3RydWN0cyB0aGUgcGx1Z2luLiAgT25seSBjYWxsZWQgb25jZS4KICAgICAgX2NyZWF0ZTogZnVuY3Rpb24oKSB7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gdHJ1ZTsKCiAgICAgICAgLy8gSW50ZXJuYWwgYXJyYXkgdGhhdCBrZWVwcyB0cmFjayBvZiBhbGwgVE9DIGl0ZW1zIChIZWxwcyB0byByZWNvZ25pemUgaWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBUT0MgaXRlbSBzdHJpbmdzKQogICAgICAgIHNlbGYuaXRlbXMgPSBbXTsKCiAgICAgICAgLy8gR2VuZXJhdGVzIHRoZSBIVE1MIGZvciB0aGUgZHluYW1pYyB0YWJsZSBvZiBjb250ZW50cwogICAgICAgIHNlbGYuX2dlbmVyYXRlVG9jKCk7CgogICAgICAgIC8vIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgICAgc2VsZi5fYWRkQ1NTQ2xhc3NlcygpOwoKICAgICAgICBzZWxmLndlYmtpdCA9IChmdW5jdGlvbigpIHsKCiAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHdpbmRvdykgewoKICAgICAgICAgICAgaWYgKHByb3ApIHsKCiAgICAgICAgICAgICAgaWYgKHByb3AudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJ3ZWJraXQiKSAhPT0gLTEpIHsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIH0oKSk7CgogICAgICAgIC8vIEFkZHMgalF1ZXJ5IGV2ZW50IGhhbmRsZXJzIHRvIHRoZSBuZXdseSBnZW5lcmF0ZWQgdGFibGUgb2YgY29udGVudHMKICAgICAgICBzZWxmLl9zZXRFdmVudEhhbmRsZXJzKCk7CgogICAgICAgIC8vIEJpbmRpbmcgdG8gdGhlIFdpbmRvdyBsb2FkIGV2ZW50IHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBzY3JvbGxUb3AgaXMgY2FsY3VsYXRlZAogICAgICAgICQod2luZG93KS5vbigibG9hZCIsIGZ1bmN0aW9uKCkgewoKICAgICAgICAgIC8vIFNldHMgdGhlIGFjdGl2ZSBUT0MgaXRlbQogICAgICAgICAgc2VsZi5fc2V0QWN0aXZlRWxlbWVudCh0cnVlKTsKCiAgICAgICAgICAvLyBPbmNlIGFsbCBhbmltYXRpb25zIG9uIHRoZSBwYWdlIGFyZSBjb21wbGV0ZSwgdGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAogICAgICAgICAgJCgiaHRtbCwgYm9keSIpLnByb21pc2UoKS5kb25lKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgc2VsZi5leHRlbmRQYWdlU2Nyb2xsID0gZmFsc2U7CgogICAgICAgICAgICB9LCAwKTsKCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlVG9jCiAgICAgIC8vIC0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgSFRNTCBmb3IgdGhlIGR5bmFtaWMgdGFibGUgb2YgY29udGVudHMKICAgICAgX2dlbmVyYXRlVG9jOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gX0xvY2FsIHZhcmlhYmxlc18KCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgc2VsZiB2YXJpYWJsZQogICAgICAgIHZhciBzZWxmID0gdGhpcywKCiAgICAgICAgICAvLyBBbGwgb2YgdGhlIEhUTUwgdGFncyBmb3VuZCB3aXRoaW4gdGhlIGNvbnRleHQgcHJvdmlkZWQgKGkuZS4gYm9keSkgdGhhdCBtYXRjaCB0aGUgdG9wIGxldmVsIGpRdWVyeSBzZWxlY3RvciBhYm92ZQogICAgICAgICAgZmlyc3RFbGVtLAoKICAgICAgICAgIC8vIEluc3RhbnRpYXRlZCB2YXJpYWJsZSB0aGF0IHdpbGwgc3RvcmUgdGhlIHRvcCBsZXZlbCBuZXdseSBjcmVhdGVkIHVub3JkZXJlZCBsaXN0IERPTSBlbGVtZW50CiAgICAgICAgICB1bCwKICAgICAgICAgIGlnbm9yZVNlbGVjdG9yID0gc2VsZi5vcHRpb25zLmlnbm9yZVNlbGVjdG9yOwoKCiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBlbGVtZW50IHRvIHN0YXJ0IHRoZSB0b2Mgd2l0aAogICAgICAgIC8vIGdldCBhbGwgdGhlIHRvcCBsZXZlbCBzZWxlY3RvcnMKICAgICAgICBmaXJzdEVsZW0gPSBbXTsKICAgICAgICB2YXIgc2VsZWN0b3JzID0gdGhpcy5vcHRpb25zLnNlbGVjdG9ycy5yZXBsYWNlKC8gL2csICIiKS5zcGxpdCgiLCIpOwogICAgICAgIC8vIGZpbmQgdGhlIGZpcnN0IHNldCB0aGF0IGhhdmUgYXQgbGVhc3Qgb25lIG5vbi1pZ25vcmVkIGVsZW1lbnQKICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgc2VsZWN0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZm91bmRTZWxlY3RvcnMgPSAkKHRoaXMub3B0aW9ucy5jb250ZXh0KS5maW5kKHNlbGVjdG9yc1tpXSk7CiAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IGZvdW5kU2VsZWN0b3JzLmxlbmd0aDsgcysrKSB7CiAgICAgICAgICAgIGlmICghJChmb3VuZFNlbGVjdG9yc1tzXSkuaXMoaWdub3JlU2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgZmlyc3RFbGVtID0gZm91bmRTZWxlY3RvcnM7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChmaXJzdEVsZW0ubGVuZ3RoPiAwKQogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmICghZmlyc3RFbGVtLmxlbmd0aCkgewoKICAgICAgICAgIHNlbGYuZWxlbWVudC5hZGRDbGFzcyhoaWRlVG9jQ2xhc3NOYW1lKTsKCiAgICAgICAgICByZXR1cm47CgogICAgICAgIH0KCiAgICAgICAgc2VsZi5lbGVtZW50LmFkZENsYXNzKHRvY0NsYXNzTmFtZSk7CgogICAgICAgIC8vIExvb3BzIHRocm91Z2ggZWFjaCB0b3AgbGV2ZWwgc2VsZWN0b3IKICAgICAgICBmaXJzdEVsZW0uZWFjaChmdW5jdGlvbihpbmRleCkgewoKICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGFuZCBhZGRzIGEgZHluYW1pYyBJRCBhbmQgc3RhbmRhcmQgY2xhc3MgbmFtZQogICAgICAgICAgdWwgPSAkKCI8dWwvPiIsIHsKICAgICAgICAgICAgImlkIjogaGVhZGVyQ2xhc3NOYW1lICsgaW5kZXgsCiAgICAgICAgICAgICJjbGFzcyI6IGhlYWRlckNsYXNzTmFtZQogICAgICAgICAgfSkuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIHRvcCBsZXZlbCBsaXN0IGl0ZW0gSFRNTCBlbGVtZW50IHRvIHRoZSBwcmV2aW91c2x5IGNyZWF0ZWQgSFRNTCBoZWFkZXIKICAgICAgICAgIGFwcGVuZChzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgICAvLyBBZGQgdGhlIGNyZWF0ZWQgdW5vcmRlcmVkIGxpc3QgZWxlbWVudCB0byB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgc2VsZi5lbGVtZW50LmFwcGVuZCh1bCk7CgogICAgICAgICAgLy8gRmluZHMgYWxsIG9mIHRoZSBIVE1MIHRhZ3MgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZCBzdWJoZWFkZXIgZWxlbWVudHMKICAgICAgICAgICQodGhpcykubmV4dFVudGlsKHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkuZWFjaChmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBuZXN0ZWQgc3ViaGVhZGVyIGVsZW1lbWVudHMKICAgICAgICAgICAgaWYgKCQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5sZW5ndGggPT09IDApIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmlsdGVyKHNlbGYub3B0aW9ucy5zZWxlY3RvcnMpLmVhY2goZnVuY3Rpb24oKSB7CgogICAgICAgICAgICAgICAgLy9JZiB0aGUgZWxlbWVudCBtYXRjaGVzIHRoZSBpZ25vcmVTZWxlY3RvciB0aGVuIHdlIHNraXAgaXQKICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLmlzKGlnbm9yZVNlbGVjdG9yKSkgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2VsZi5fYXBwZW5kU3ViaGVhZGVycy5jYWxsKHRoaXMsIHNlbGYsIHVsKTsKCiAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbmVzdGVkIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgLy8gTG9vcHMgdGhyb3VnaCBhbGwgb2YgdGhlIHN1YmhlYWRlciBlbGVtZW50cwogICAgICAgICAgICAgICQodGhpcykuZmluZChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKS5lYWNoKGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vSWYgdGhlIGVsZW1lbnQgbWF0Y2hlcyB0aGUgaWdub3JlU2VsZWN0b3IgdGhlbiB3ZSBza2lwIGl0CiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5pcyhpZ25vcmVTZWxlY3RvcikpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNlbGYuX2FwcGVuZFN1YmhlYWRlcnMuY2FsbCh0aGlzLCBzZWxmLCB1bCk7CgogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgfQoKICAgICAgICAgIH0pOwoKICAgICAgICB9KTsKCiAgICAgIH0sCgogICAgICBfc2V0QWN0aXZlRWxlbWVudDogZnVuY3Rpb24ocGFnZWxvYWQpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAoKICAgICAgICAgIGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksCgogICAgICAgICAgZWxlbSA9IHNlbGYuZWxlbWVudC5maW5kKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGhhc2ggKyAnIl0nKTsKCiAgICAgICAgaWYgKGhhc2gubGVuZ3RoKSB7CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgZWxlbS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIFRyaWdnZXJzIHRoZSBjbGljayBldmVudCBvbiB0aGUgY3VycmVudGx5IGZvY3VzZWQgVE9DIGl0ZW0KICAgICAgICAgIGVsZW0uY2xpY2soKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBSZW1vdmVzIGhpZ2hsaWdodGluZyBmcm9tIGFsbCBvZiB0aGUgbGlzdCBpdGVtJ3MKICAgICAgICAgIHNlbGYuZWxlbWVudC5maW5kKCIuIiArIHNlbGYuZm9jdXNDbGFzcykucmVtb3ZlQ2xhc3Moc2VsZi5mb2N1c0NsYXNzKTsKCiAgICAgICAgICBpZiAoIWhhc2gubGVuZ3RoICYmIHBhZ2Vsb2FkICYmIHNlbGYub3B0aW9ucy5oaWdobGlnaHREZWZhdWx0KSB7CgogICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBmaXJzdCBUT0MgaXRlbSBpZiBubyBvdGhlciBpdGVtcyBhcmUgaGlnaGxpZ2h0ZWQKICAgICAgICAgICAgc2VsZi5lbGVtZW50LmZpbmQoaXRlbUNsYXNzKS5maXJzdCgpLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgfQoKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOwoKICAgICAgfSwKCiAgICAgIC8vIF9uZXN0RWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEhlbHBzIGNyZWF0ZSB0aGUgdGFibGUgb2YgY29udGVudHMgbGlzdCBieSBhcHBlbmRpbmcgbmVzdGVkIGxpc3QgaXRlbXMKICAgICAgX25lc3RFbGVtZW50czogZnVuY3Rpb24oc2VsZiwgaW5kZXgpIHsKCiAgICAgICAgdmFyIGFyciwgaXRlbSwgaGFzaFZhbHVlOwoKICAgICAgICBhcnIgPSAkLmdyZXAodGhpcy5pdGVtcywgZnVuY3Rpb24oaXRlbSkgewoKICAgICAgICAgIHJldHVybiBpdGVtID09PSBzZWxmLnRleHQoKTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIElmIHRoZXJlIGlzIGFscmVhZHkgYSBkdXBsaWNhdGUgVE9DIGl0ZW0KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewoKICAgICAgICAgIC8vIEFkZHMgdGhlIGN1cnJlbnQgVE9DIGl0ZW0gdGV4dCBhbmQgaW5kZXggKGZvciBzbGlnaHQgcmFuZG9taXphdGlvbikgdG8gdGhlIGludGVybmFsIGFycmF5CiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goc2VsZi50ZXh0KCkgKyBpbmRleCk7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgbm90IGEgZHVwbGljYXRlIFRPQyBpdGVtCiAgICAgICAgZWxzZSB7CgogICAgICAgICAgLy8gQWRkcyB0aGUgY3VycmVudCBUT0MgaXRlbSB0ZXh0IHRvIHRoZSBpbnRlcm5hbCBhcnJheQogICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHNlbGYudGV4dCgpKTsKCiAgICAgICAgfQoKICAgICAgICBoYXNoVmFsdWUgPSB0aGlzLl9nZW5lcmF0ZUhhc2hWYWx1ZShhcnIsIHNlbGYsIGluZGV4KTsKCiAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIGl0ZW0gPSAkKCI8bGkvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUgdG8gdGhlIGxpc3QgaXRlbQogICAgICAgICAgImNsYXNzIjogaXRlbUNsYXNzTmFtZSwKCiAgICAgICAgICAiZGF0YS11bmlxdWUiOiBoYXNoVmFsdWUKCiAgICAgICAgfSk7CgogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAzIikgewoKICAgICAgICAgIGl0ZW0uYXBwZW5kKCQoIjxhLz4iLCB7CgogICAgICAgICAgICAiaHRtbCI6IHNlbGYuaHRtbCgpCgogICAgICAgICAgfSkpOwoKICAgICAgICB9IGVsc2UgewoKICAgICAgICAgIGl0ZW0uaHRtbChzZWxmLmh0bWwoKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gQWRkcyBhbiBIVE1MIGFuY2hvciB0YWcgYmVmb3JlIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIEhUTUwgZWxlbWVudAogICAgICAgIHNlbGYuYmVmb3JlKCQoIjxkaXYvPiIsIHsKCiAgICAgICAgICAvLyBTZXRzIGEgbmFtZSBhdHRyaWJ1dGUgb24gdGhlIGFuY2hvciB0YWcgdG8gdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSB0cmF2ZXJzZWQgSFRNTCBlbGVtZW50IChhbHNvIG1ha2luZyBzdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgaXMgcmVwbGFjZWQgd2l0aCBhbiB1bmRlcnNjb3JlKQogICAgICAgICAgIm5hbWUiOiBoYXNoVmFsdWUsCgogICAgICAgICAgImRhdGEtdW5pcXVlIjogaGFzaFZhbHVlCgogICAgICAgIH0pKTsKCiAgICAgICAgcmV0dXJuIGl0ZW07CgogICAgICB9LAoKICAgICAgLy8gX2dlbmVyYXRlSGFzaFZhbHVlCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEdlbmVyYXRlcyB0aGUgaGFzaCB2YWx1ZSB0aGF0IHdpbGwgYmUgdXNlZCB0byByZWZlciB0byBlYWNoIGl0ZW0uCiAgICAgIF9nZW5lcmF0ZUhhc2hWYWx1ZTogZnVuY3Rpb24oYXJyLCBzZWxmLCBpbmRleCkgewoKICAgICAgICB2YXIgaGFzaFZhbHVlID0gIiIsCiAgICAgICAgICBoYXNoR2VuZXJhdG9yT3B0aW9uID0gdGhpcy5vcHRpb25zLmhhc2hHZW5lcmF0b3I7CgogICAgICAgIGlmIChoYXNoR2VuZXJhdG9yT3B0aW9uID09PSAicHJldHR5IikgewoKICAgICAgICAgIC8vIHByZXR0aWZ5IHRoZSB0ZXh0CiAgICAgICAgICBoYXNoVmFsdWUgPSBzZWxmLnRleHQoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzL2csICItIik7CgogICAgICAgICAgLy8gZml4IGRvdWJsZSBoeXBoZW5zCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIi0tIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvLS0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBmaXggY29sb24tc3BhY2UgaW5zdGFuY2VzCiAgICAgICAgICB3aGlsZSAoaGFzaFZhbHVlLmluZGV4T2YoIjotIikgPiAtMSkgewogICAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoVmFsdWUucmVwbGFjZSgvOi0vZywgIi0iKTsKICAgICAgICAgIH0KCiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaGFzaEdlbmVyYXRvck9wdGlvbiA9PT0gImZ1bmN0aW9uIikgewoKICAgICAgICAgIC8vIGNhbGwgdGhlIGZ1bmN0aW9uCiAgICAgICAgICBoYXNoVmFsdWUgPSBoYXNoR2VuZXJhdG9yT3B0aW9uKHNlbGYudGV4dCgpLCBzZWxmKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBjb21wYWN0IC0gdGhlIGRlZmF1bHQKICAgICAgICAgIGhhc2hWYWx1ZSA9IHNlbGYudGV4dCgpLnJlcGxhY2UoL1xzL2csICIiKTsKCiAgICAgICAgfQoKICAgICAgICAvLyBhZGQgdGhlIGluZGV4IGlmIHdlIG5lZWQgdG8KICAgICAgICBpZiAoYXJyLmxlbmd0aCkgewogICAgICAgICAgaGFzaFZhbHVlICs9ICIiICsgaW5kZXg7CiAgICAgICAgfQoKICAgICAgICAvLyByZXR1cm4gdGhlIHZhbHVlCiAgICAgICAgcmV0dXJuIGhhc2hWYWx1ZTsKCiAgICAgIH0sCgogICAgICAvLyBfYXBwZW5kRWxlbWVudHMKICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgSGVscHMgY3JlYXRlIHRoZSB0YWJsZSBvZiBjb250ZW50cyBsaXN0IGJ5IGFwcGVuZGluZyBzdWJoZWFkZXIgZWxlbWVudHMKCiAgICAgIF9hcHBlbmRTdWJoZWFkZXJzOiBmdW5jdGlvbihzZWxmLCB1bCkgewoKICAgICAgICAvLyBUaGUgY3VycmVudCBlbGVtZW50IGluZGV4CiAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleChzZWxmLm9wdGlvbnMuc2VsZWN0b3JzKSwKCiAgICAgICAgICAvLyBGaW5kcyB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50CiAgICAgICAgICBwcmV2aW91c0hlYWRlciA9ICQoc2VsZi5vcHRpb25zLnNlbGVjdG9ycykuZXEoaW5kZXggLSAxKSwKCiAgICAgICAgICBjdXJyZW50VGFnTmFtZSA9ICskKHRoaXMpLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgcHJldmlvdXNUYWdOYW1lID0gK3ByZXZpb3VzSGVhZGVyLnByb3AoInRhZ05hbWUiKS5jaGFyQXQoMSksCgogICAgICAgICAgbGFzdFN1YmhlYWRlcjsKCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgaGVhZGVyIERPTSBlbGVtZW50IGlzIHNtYWxsZXIgdGhhbiB0aGUgcHJldmlvdXMgaGVhZGVyIERPTSBlbGVtZW50IG9yIHRoZSBmaXJzdCBzdWJoZWFkZXIKICAgICAgICBpZiAoY3VycmVudFRhZ05hbWUgPCBwcmV2aW91c1RhZ05hbWUpIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZChzdWJoZWFkZXJDbGFzcyArICJbZGF0YS10YWc9IiArIGN1cnJlbnRUYWdOYW1lICsgIl0iKS5sYXN0KCkuYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGhlYWRlciBET00gZWxlbWVudCBpcyB0aGUgc2FtZSB0eXBlIG9mIGhlYWRlcihlZy4gaDQpIGFzIHRoZSBwcmV2aW91cyBoZWFkZXIgRE9NIGVsZW1lbnQKICAgICAgICBlbHNlIGlmIChjdXJyZW50VGFnTmFtZSA9PT0gcHJldmlvdXNUYWdOYW1lKSB7CgogICAgICAgICAgdWwuZmluZChpdGVtQ2xhc3MpLmxhc3QoKS5hZnRlcihzZWxmLl9uZXN0RWxlbWVudHMoJCh0aGlzKSwgaW5kZXgpKTsKCiAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAvLyBTZWxlY3RzIHRoZSBsYXN0IHVub3JkZXJlZCBsaXN0IEhUTUwgZm91bmQgd2l0aGluIHRoZSBIVE1MIGVsZW1lbnQgY2FsbGluZyB0aGUgcGx1Z2luCiAgICAgICAgICB1bC5maW5kKGl0ZW1DbGFzcykubGFzdCgpLgoKICAgICAgICAgIC8vIEFwcGVuZHMgYW4gdW5vcmRlcmVkTGlzdCBIVE1MIGVsZW1lbnQgdG8gdGhlIGR5bmFtaWMgYHVub3JkZXJlZExpc3RgIHZhcmlhYmxlIGFuZCBzZXRzIGEgY29tbW9uIGNsYXNzIG5hbWUKICAgICAgICAgIGFmdGVyKCQoIjx1bC8+IiwgewoKICAgICAgICAgICAgImNsYXNzIjogc3ViaGVhZGVyQ2xhc3NOYW1lLAoKICAgICAgICAgICAgImRhdGEtdGFnIjogY3VycmVudFRhZ05hbWUKCiAgICAgICAgICB9KSkubmV4dChzdWJoZWFkZXJDbGFzcykuCgogICAgICAgICAgLy8gQXBwZW5kcyBhIGxpc3QgaXRlbSBIVE1MIGVsZW1lbnQgdG8gdGhlIGxhc3QgdW5vcmRlcmVkIGxpc3QgSFRNTCBlbGVtZW50IGZvdW5kIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgICAgYXBwZW5kKHNlbGYuX25lc3RFbGVtZW50cygkKHRoaXMpLCBpbmRleCkpOwogICAgICAgIH0KCiAgICAgIH0sCgogICAgICAvLyBfc2V0RXZlbnRIYW5kbGVycwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tCiAgICAgIC8vICAgICAgQWRkcyBqUXVlcnkgZXZlbnQgaGFuZGxlcnMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cwogICAgICBfc2V0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgIC8vIFN0b3JlcyB0aGUgcGx1Z2luIGNvbnRleHQgaW4gdGhlIHNlbGYgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGhvbGQgYSBzcGVjaWZpYyBlbGVtZW50J3MgY29udGV4dAogICAgICAgICAgJHNlbGYsCgogICAgICAgICAgLy8gSW5zdGFudGlhdGVzIGEgbmV3IHZhcmlhYmxlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uCiAgICAgICAgICBkdXJhdGlvbjsKCiAgICAgICAgLy8gRXZlbnQgZGVsZWdhdGlvbiB0aGF0IGxvb2tzIGZvciBhbnkgY2xpY2tzIG9uIGxpc3QgaXRlbSBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIEhUTUwgZWxlbWVudCBjYWxsaW5nIHRoZSBwbHVnaW4KICAgICAgICB0aGlzLmVsZW1lbnQub24oImNsaWNrLnRvY2lmeSIsICJsaSIsIGZ1bmN0aW9uKGV2ZW50KSB7CgogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5oaXN0b3J5KSB7CgogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9ICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gUmVtb3ZlcyBoaWdobGlnaHRpbmcgZnJvbSBhbGwgb2YgdGhlIGxpc3QgaXRlbSdzCiAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgLy8gSGlnaGxpZ2h0cyB0aGUgY3VycmVudCBsaXN0IGl0ZW0gdGhhdCB3YXMgY2xpY2tlZAogICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgIC8vIElmIHRoZSBzaG93QW5kSGlkZSBvcHRpb24gaXMgdHJ1ZQogICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5zaG93QW5kSGlkZSkgewoKICAgICAgICAgICAgdmFyIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArICQodGhpcykuYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICAgICAgc2VsZi5fdHJpZ2dlclNob3coZWxlbSk7CgogICAgICAgICAgfQoKICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQodGhpcykpOwoKICAgICAgICB9KTsKCiAgICAgICAgLy8gTW91c2VlbnRlciBhbmQgTW91c2VsZWF2ZSBldmVudCBoYW5kbGVycyBmb3IgdGhlIGxpc3QgaXRlbSdzIHdpdGhpbiB0aGUgSFRNTCBlbGVtZW50IGNhbGxpbmcgdGhlIHBsdWdpbgogICAgICAgIHRoaXMuZWxlbWVudC5maW5kKCJsaSIpLm9uKHsKCiAgICAgICAgICAvLyBNb3VzZWVudGVyIGV2ZW50IGhhbmRsZXIKICAgICAgICAgICJtb3VzZWVudGVyLnRvY2lmeSI6IGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgLy8gQWRkcyBhIGhvdmVyIENTUyBjbGFzcyB0byB0aGUgY3VycmVudCBsaXN0IGl0ZW0KICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhzZWxmLmhvdmVyQ2xhc3MpOwoKICAgICAgICAgICAgLy8gTWFrZXMgc3VyZSB0aGUgY3Vyc29yIGlzIHNldCB0byB0aGUgcG9pbnRlciBpY29uCiAgICAgICAgICAgICQodGhpcykuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpOwoKICAgICAgICAgIH0sCgogICAgICAgICAgLy8gTW91c2VsZWF2ZSBldmVudCBoYW5kbGVyCiAgICAgICAgICAibW91c2VsZWF2ZS50b2NpZnkiOiBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMudGhlbWUgIT09ICJib290c3RyYXAiKSB7CgogICAgICAgICAgICAgIC8vIFJlbW92ZXMgdGhlIGhvdmVyIENTUyBjbGFzcyBmcm9tIHRoZSBjdXJyZW50IGxpc3QgaXRlbQogICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3Moc2VsZi5ob3ZlckNsYXNzKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIC8vIG9ubHkgYXR0YWNoIGhhbmRsZXIgaWYgbmVlZGVkIChleHBlbnNpdmUgaW4gSUUpCiAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5leHRlbmRQYWdlIHx8IHNlbGYub3B0aW9ucy5oaWdobGlnaHRPblNjcm9sbCB8fCBzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSB8fCBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCkgewogICAgICAgICAgLy8gV2luZG93IHNjcm9sbCBldmVudCBoYW5kbGVyCiAgICAgICAgICAkKHdpbmRvdykub24oInNjcm9sbC50b2NpZnkiLCBmdW5jdGlvbigpIHsKCiAgICAgICAgICAgIC8vIE9uY2UgYWxsIGFuaW1hdGlvbnMgb24gdGhlIHBhZ2UgYXJlIGNvbXBsZXRlLCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCiAgICAgICAgICAgICQoImh0bWwsIGJvZHkiKS5wcm9taXNlKCkuZG9uZShmdW5jdGlvbigpIHsKCiAgICAgICAgICAgICAgLy8gTG9jYWwgdmFyaWFibGVzCgogICAgICAgICAgICAgIC8vIFN0b3JlcyBob3cgZmFyIHRoZSB1c2VyIGhhcyBzY3JvbGxlZAogICAgICAgICAgICAgIHZhciB3aW5TY3JvbGxUb3AgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCksCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBoZWlnaHQgb2YgdGhlIHdpbmRvdwogICAgICAgICAgICAgICAgd2luSGVpZ2h0ID0gJCh3aW5kb3cpLmhlaWdodCgpLAoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgaGVpZ2h0IG9mIHRoZSBkb2N1bWVudAogICAgICAgICAgICAgICAgZG9jSGVpZ2h0ID0gJChkb2N1bWVudCkuaGVpZ2h0KCksCgogICAgICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gJCgiYm9keSIpWzBdLnNjcm9sbEhlaWdodCwKCiAgICAgICAgICAgICAgICAvLyBJbnN0YW50aWF0ZXMgYSB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBob2xkIGEgc2VsZWN0ZWQgSFRNTCBlbGVtZW50CiAgICAgICAgICAgICAgICBlbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtLAoKICAgICAgICAgICAgICAgIGxhc3RFbGVtT2Zmc2V0LAoKICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtOwoKICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmV4dGVuZFBhZ2UpIHsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgdGhlIGxhc3QgdG9jIGl0ZW0gaXMgbm90IGZvY3VzZWQKICAgICAgICAgICAgICAgIGlmICgoc2VsZi53ZWJraXQgJiYgd2luU2Nyb2xsVG9wID49IHNjcm9sbEhlaWdodCAtIHdpbkhlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSB8fCAoIXNlbGYud2Via2l0ICYmIHdpbkhlaWdodCArIHdpblNjcm9sbFRvcCA+IGRvY0hlaWdodCAtIHNlbGYub3B0aW9ucy5leHRlbmRQYWdlT2Zmc2V0KSkgewoKICAgICAgICAgICAgICAgICAgaWYgKCEkKGV4dGVuZFBhZ2VDbGFzcykubGVuZ3RoKSB7CgogICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtID0gJCgnZGl2W2RhdGEtdW5pcXVlPSInICsgJChpdGVtQ2xhc3MpLmxhc3QoKS5hdHRyKCJkYXRhLXVuaXF1ZSIpICsgJyJdJyk7CgogICAgICAgICAgICAgICAgICAgIGlmICghbGFzdEVsZW0ubGVuZ3RoKSByZXR1cm47CgogICAgICAgICAgICAgICAgICAgIC8vIEdldHMgdGhlIHRvcCBvZmZzZXQgb2YgdGhlIHBhZ2UgaGVhZGVyIHRoYXQgaXMgbGlua2VkIHRvIHRoZSBsYXN0IHRvYyBpdGVtCiAgICAgICAgICAgICAgICAgICAgbGFzdEVsZW1PZmZzZXQgPSBsYXN0RWxlbS5vZmZzZXQoKS50b3A7CgogICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZHMgYSBkaXYgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBhbmQgc2V0cyB0aGUgaGVpZ2h0IHRvIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSB3aW5kb3cgc2Nyb2xsVG9wIGFuZCB0aGUgbGFzdCBlbGVtZW50J3MgcG9zaXRpb24gdG9wIG9mZnNldAogICAgICAgICAgICAgICAgICAgICQoc2VsZi5vcHRpb25zLmNvbnRleHQpLmFwcGVuZCgkKCI8ZGl2Lz4iLCB7CgogICAgICAgICAgICAgICAgICAgICAgImNsYXNzIjogZXh0ZW5kUGFnZUNsYXNzTmFtZSwKCiAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IjogTWF0aC5hYnMobGFzdEVsZW1PZmZzZXQgLSB3aW5TY3JvbGxUb3ApICsgInB4IiwKCiAgICAgICAgICAgICAgICAgICAgICAiZGF0YS11bmlxdWUiOiBleHRlbmRQYWdlQ2xhc3NOYW1lCgogICAgICAgICAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZXh0ZW5kUGFnZVNjcm9sbCkgewoKICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtID0gc2VsZi5lbGVtZW50LmZpbmQoJ2xpLicgKyBzZWxmLmZvY3VzQ2xhc3MpOwoKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Njcm9sbFRvKCQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGN1cnJlbnRFbGVtLmF0dHIoImRhdGEtdW5pcXVlIikgKyAnIl0nKSk7CgogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgLy8gVGhlIHplcm8gdGltZW91dCBlbnN1cmVzIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBydW4gYWZ0ZXIgdGhlIHNjcm9sbCBldmVudHMKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewoKICAgICAgICAgICAgICAgIC8vIF9Mb2NhbCB2YXJpYWJsZXNfCgogICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBkaXN0YW5jZSB0byB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIHZhciBjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPSBudWxsLAoKICAgICAgICAgICAgICAgICAgLy8gU3RvcmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgICAgY2xvc2VzdEFuY2hvcklkeCA9IG51bGwsCgogICAgICAgICAgICAgICAgICAvLyBLZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgYW5jaG9ycwogICAgICAgICAgICAgICAgICBhbmNob3JzID0gJChzZWxmLm9wdGlvbnMuY29udGV4dCkuZmluZCgiZGl2W2RhdGEtdW5pcXVlXSIpLAoKICAgICAgICAgICAgICAgICAgYW5jaG9yVGV4dDsKCiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmVzIHRoZSBpbmRleCBvZiB0aGUgY2xvc2VzdCBhbmNob3IKICAgICAgICAgICAgICAgIGFuY2hvcnMuZWFjaChmdW5jdGlvbihpZHgpIHsKICAgICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlID0gTWF0aC5hYnMoKCQodGhpcykubmV4dCgpLmxlbmd0aCA/ICQodGhpcykubmV4dCgpIDogJCh0aGlzKSkub2Zmc2V0KCkudG9wIC0gd2luU2Nyb2xsVG9wIC0gc2VsZi5vcHRpb25zLmhpZ2hsaWdodE9mZnNldCk7CiAgICAgICAgICAgICAgICAgIGlmIChjbG9zZXN0QW5jaG9yRGlzdGFuY2UgPT0gbnVsbCB8fCBkaXN0YW5jZSA8IGNsb3Nlc3RBbmNob3JEaXN0YW5jZSkgewogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JEaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgICAgICAgIGNsb3Nlc3RBbmNob3JJZHggPSBpZHg7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICBhbmNob3JUZXh0ID0gJChhbmNob3JzW2Nsb3Nlc3RBbmNob3JJZHhdKS5hdHRyKCJkYXRhLXVuaXF1ZSIpOwoKICAgICAgICAgICAgICAgIC8vIFN0b3JlcyB0aGUgbGlzdCBpdGVtIEhUTUwgZWxlbWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50bHkgdHJhdmVyc2VkIGFuY2hvciB0YWcKICAgICAgICAgICAgICAgIGVsZW0gPSAkKCdsaVtkYXRhLXVuaXF1ZT0iJyArIGFuY2hvclRleHQgKyAnIl0nKTsKCiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgYGhpZ2hsaWdodE9uU2Nyb2xsYCBvcHRpb24gaXMgdHJ1ZSBhbmQgYSBuZXh0IGVsZW1lbnQgaXMgZm91bmQKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaGlnaGxpZ2h0T25TY3JvbGwgJiYgZWxlbS5sZW5ndGgpIHsKCiAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZXMgaGlnaGxpZ2h0aW5nIGZyb20gYWxsIG9mIHRoZSBsaXN0IGl0ZW0ncwogICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuZmluZCgiLiIgKyBzZWxmLmZvY3VzQ2xhc3MpLnJlbW92ZUNsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgICAvLyBIaWdobGlnaHRzIHRoZSBjb3JyZXNwb25kaW5nIGxpc3QgaXRlbQogICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzKHNlbGYuZm9jdXNDbGFzcyk7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2Nyb2xsSGlzdG9yeSkgewoKICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoICE9PSAiIyIgKyBhbmNob3JUZXh0KSB7CgogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCIjIiArIGFuY2hvclRleHQpOwoKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBgc2hvd0FuZEhpZGVPblNjcm9sbGAgb3B0aW9uIGlzIHRydWUKICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGVPblNjcm9sbCAmJiBzZWxmLm9wdGlvbnMuc2hvd0FuZEhpZGUpIHsKCiAgICAgICAgICAgICAgICAgIHNlbGYuX3RyaWdnZXJTaG93KGVsZW0sIHRydWUpOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgfSwgMCk7CgogICAgICAgICAgICB9KTsKCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICB9LAoKICAgICAgLy8gU2hvdwogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgT3BlbnMgdGhlIGN1cnJlbnQgc3ViLWhlYWRlcgogICAgICBzaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgLy8gU3RvcmVzIHRoZSBwbHVnaW4gY29udGV4dCBpbiB0aGUgYHNlbGZgIHZhcmlhYmxlCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgZWxlbWVudCA9IGVsZW07CgogICAgICAgIC8vIElmIHRoZSBzdWItaGVhZGVyIGlzIG5vdCBhbHJlYWR5IHZpc2libGUKICAgICAgICBpZiAoIWVsZW0uaXMoIjp2aXNpYmxlIikpIHsKCiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGRvZXMgbm90IGhhdmUgYW55IG5lc3RlZCBzdWJoZWFkZXJzLCBpcyBub3QgYSBoZWFkZXIsIGFuZCBpdHMgcGFyZW50IGlzIG5vdCB2aXNpYmxlCiAgICAgICAgICBpZiAoIWVsZW0uZmluZChzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSAmJiAhZWxlbS5wYXJlbnQoKS5pcygiOnZpc2libGUiKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIGFsbCBvZiB0aGUgc3ViaGVhZGVycyB3aXRoaW4gdGhlIGN1cnJlbnQgaGVhZGVyCiAgICAgICAgICAgIGVsZW0gPSBlbGVtLnBhcmVudHMoc3ViaGVhZGVyQ2xhc3MpLmFkZChlbGVtKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBkb2VzIG5vdCBoYXZlIGFueSBuZXN0ZWQgc3ViaGVhZGVycyBhbmQgaXMgbm90IGEgaGVhZGVyCiAgICAgICAgICBlbHNlIGlmICghZWxlbS5jaGlsZHJlbihzdWJoZWFkZXJDbGFzcykubGVuZ3RoICYmICFlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSkgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgY3VycmVudCBlbGVtZW50IHRvIHRoZSBjbG9zZXN0IHN1YmhlYWRlcgogICAgICAgICAgICBlbGVtID0gZWxlbS5jbG9zZXN0KHN1YmhlYWRlckNsYXNzKTsKCiAgICAgICAgICB9CgogICAgICAgICAgLy9EZXRlcm1pbmVzIHdoYXQgalF1ZXJ5IGVmZmVjdCB0byB1c2UKICAgICAgICAgIHN3aXRjaCAoc2VsZi5vcHRpb25zLnNob3dFZmZlY3QpIHsKCiAgICAgICAgICAgIC8vVXNlcyBgbm8gZWZmZWN0YAogICAgICAgICAgICBjYXNlICJub25lIjoKCiAgICAgICAgICAgICAgZWxlbS5zaG93KCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL1VzZXMgdGhlIGpRdWVyeSBgc2hvd2Agc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAic2hvdyI6CgogICAgICAgICAgICAgIGVsZW0uc2hvdyhzZWxmLm9wdGlvbnMuc2hvd0VmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIC8vVXNlcyB0aGUgalF1ZXJ5IGBzbGlkZURvd25gIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICAgIGNhc2UgInNsaWRlRG93biI6CgogICAgICAgICAgICAgIGVsZW0uc2xpZGVEb3duKHNlbGYub3B0aW9ucy5zaG93RWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgLy9Vc2VzIHRoZSBqUXVlcnkgYGZhZGVJbmAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgICAgY2FzZSAiZmFkZUluIjoKCiAgICAgICAgICAgICAgZWxlbS5mYWRlSW4oc2VsZi5vcHRpb25zLnNob3dFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAvL0lmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBgalF1ZXJ5VUkgc2hvdyBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgIGVsZW0uc2hvdygpOwoKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgc3ViaGVhZGVyIHBhcmVudCBlbGVtZW50IGlzIGEgaGVhZGVyCiAgICAgICAgaWYgKGVsZW0ucGFyZW50KCkuaXMoaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gSGlkZXMgYWxsIG5vbi1hY3RpdmUgc3ViLWhlYWRlcnMKICAgICAgICAgIHNlbGYuaGlkZSgkKHN1YmhlYWRlckNsYXNzKS5ub3QoZWxlbSkpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHN1YmhlYWRlciBwYXJlbnQgZWxlbWVudCBpcyBub3QgYSBoZWFkZXIKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBIaWRlcyBhbGwgbm9uLWFjdGl2ZSBzdWItaGVhZGVycwogICAgICAgICAgc2VsZi5oaWRlKCQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLmNsb3Nlc3QoaGVhZGVyQ2xhc3MpLmZpbmQoc3ViaGVhZGVyQ2xhc3MpLm5vdChlbGVtLnNpYmxpbmdzKCkpKSk7CgogICAgICAgIH0KCiAgICAgICAgLy8gTWFpbnRhaW5zIGNoYWluYWJsaXR5CiAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICB9LAoKICAgICAgLy8gSGlkZQogICAgICAvLyAtLS0tCiAgICAgIC8vICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50IHN1Yi1oZWFkZXIKICAgICAgaGlkZTogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICAvLyBTdG9yZXMgdGhlIHBsdWdpbiBjb250ZXh0IGluIHRoZSBgc2VsZmAgdmFyaWFibGUKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIC8vRGV0ZXJtaW5lcyB3aGF0IGpRdWVyeSBlZmZlY3QgdG8gdXNlCiAgICAgICAgc3dpdGNoIChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdCkgewoKICAgICAgICAgIC8vIFVzZXMgYG5vIGVmZmVjdGAKICAgICAgICAgIGNhc2UgIm5vbmUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIFVzZXMgdGhlIGpRdWVyeSBgaGlkZWAgc3BlY2lhbCBlZmZlY3QKICAgICAgICAgIGNhc2UgImhpZGUiOgoKICAgICAgICAgICAgZWxlbS5oaWRlKHNlbGYub3B0aW9ucy5oaWRlRWZmZWN0U3BlZWQpOwoKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAvLyBVc2VzIHRoZSBqUXVlcnkgYHNsaWRlVXBgIHNwZWNpYWwgZWZmZWN0CiAgICAgICAgICBjYXNlICJzbGlkZVVwIjoKCiAgICAgICAgICAgIGVsZW0uc2xpZGVVcChzZWxmLm9wdGlvbnMuaGlkZUVmZmVjdFNwZWVkKTsKCiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgLy8gVXNlcyB0aGUgalF1ZXJ5IGBmYWRlT3V0YCBzcGVjaWFsIGVmZmVjdAogICAgICAgICAgY2FzZSAiZmFkZU91dCI6CgogICAgICAgICAgICBlbGVtLmZhZGVPdXQoc2VsZi5vcHRpb25zLmhpZGVFZmZlY3RTcGVlZCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGFib3ZlIG9wdGlvbnMgd2VyZSBwYXNzZWQsIHRoZW4gYSBganF1ZXJ5VUkgaGlkZSBlZmZlY3RgIGlzIGV4cGVjdGVkCiAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgZWxlbS5oaWRlKCk7CgogICAgICAgICAgICBicmVhazsKCiAgICAgICAgfQoKICAgICAgICAvLyBNYWludGFpbnMgY2hhaW5hYmxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKICAgICAgfSwKCiAgICAgIC8vIF90cmlnZ2VyU2hvdwogICAgICAvLyAtLS0tLS0tLS0tLS0KICAgICAgLy8gICAgICBEZXRlcm1pbmVzIHdoYXQgZWxlbWVudHMgZ2V0IHNob3duIG9uIHNjcm9sbCBhbmQgY2xpY2sKICAgICAgX3RyaWdnZXJTaG93OiBmdW5jdGlvbihlbGVtLCBzY3JvbGwpIHsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50IGlzIGEgaGVhZGVyIGVsZW1lbnQgb3IgdGhlIG5leHQgZWxlbWVudCBpcyBhIG5lc3RlZCBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGlmIChlbGVtLnBhcmVudCgpLmlzKGhlYWRlckNsYXNzKSB8fCBlbGVtLm5leHQoKS5pcyhzdWJoZWFkZXJDbGFzcykpIHsKCiAgICAgICAgICAvLyBTaG93cyB0aGUgbmV4dCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLm5leHQoc3ViaGVhZGVyQ2xhc3MpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnQgaXMgYSBzdWJoZWFkZXIgZWxlbWVudAogICAgICAgIGVsc2UgaWYgKGVsZW0ucGFyZW50KCkuaXMoc3ViaGVhZGVyQ2xhc3MpKSB7CgogICAgICAgICAgLy8gU2hvd3MgdGhlIHBhcmVudCBzdWItaGVhZGVyIGVsZW1lbnQKICAgICAgICAgIHNlbGYuc2hvdyhlbGVtLnBhcmVudCgpLCBzY3JvbGwpOwoKICAgICAgICB9CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0sCgogICAgICAvLyBfYWRkQ1NTQ2xhc3NlcwogICAgICAvLyAtLS0tLS0tLS0tLS0tLQogICAgICAvLyAgICAgIEFkZHMgQ1NTIGNsYXNzZXMgdG8gdGhlIG5ld2x5IGdlbmVyYXRlZCB0YWJsZSBvZiBjb250ZW50cyBIVE1MCiAgICAgIF9hZGRDU1NDbGFzc2VzOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSBqcXVlcnlVSSB0aGVtZQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMudGhlbWUgPT09ICJqcXVlcnl1aSIpIHsKCiAgICAgICAgICB0aGlzLmZvY3VzQ2xhc3MgPSAidWktc3RhdGUtZGVmYXVsdCI7CgogICAgICAgICAgdGhpcy5ob3ZlckNsYXNzID0gInVpLXN0YXRlLWhvdmVyIjsKCiAgICAgICAgICAvL0FkZHMgdGhlIGRlZmF1bHQgc3R5bGluZyB0byB0aGUgZHJvcGRvd24gbGlzdAogICAgICAgICAgdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS13aWRnZXQiKS5maW5kKCIudG9jLXRpdGxlIikuYWRkQ2xhc3MoInVpLXdpZGdldC1oZWFkZXIiKS5lbmQoKS5maW5kKCJsaSIpLmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCIpOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSB1c2VyIHdhbnRzIGEgdHdpdHRlckJvb3RzdHJhcCB0aGVtZQogICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy50aGVtZSA9PT0gImJvb3RzdHJhcCIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibmF2IG5hdi1saXN0Iik7CgogICAgICAgICAgdGhpcy5mb2N1c0NsYXNzID0gImFjdGl2ZSI7CgogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIHVzZXIgd2FudHMgYSB0d2l0dGVyQm9vdHN0cmFwIHRoZW1lCiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLnRoZW1lID09PSAiYm9vdHN0cmFwMyIpIHsKCiAgICAgICAgICB0aGlzLmVsZW1lbnQuZmluZChoZWFkZXJDbGFzcyArICIsIiArIHN1YmhlYWRlckNsYXNzKS5hZGRDbGFzcygibGlzdC1ncm91cCIpOwoKICAgICAgICAgIHRoaXMuZWxlbWVudC5maW5kKGl0ZW1DbGFzcykuYWRkQ2xhc3MoImxpc3QtZ3JvdXAtaXRlbSIpOwoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9ICJhY3RpdmUiOwoKICAgICAgICB9CgogICAgICAgIC8vIElmIGEgdXNlciBkb2VzIG5vdCB3YW50IGEgcHJlYnVpbHQgdGhlbWUKICAgICAgICBlbHNlIHsKCiAgICAgICAgICAvLyBBZGRzIG1vcmUgbmV1dHJhbCBjbGFzc2VzIChpbnN0ZWFkIG9mIGpxdWVyeXVpKQoKICAgICAgICAgIHRoaXMuZm9jdXNDbGFzcyA9IHRvY0ZvY3VzQ2xhc3NOYW1lOwoKICAgICAgICAgIHRoaXMuaG92ZXJDbGFzcyA9IHRvY0hvdmVyQ2xhc3NOYW1lOwoKICAgICAgICB9CgogICAgICAgIC8vTWFpbnRhaW5zIGNoYWluYWJpbGl0eQogICAgICAgIHJldHVybiB0aGlzOwoKICAgICAgfSwKCiAgICAgIC8vIHNldE9wdGlvbgogICAgICAvLyAtLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIFRvY2lmeSBvcHRpb24gYWZ0ZXIgdGhlIHBsdWdpbiBpcyBpbnZva2VkCiAgICAgIHNldE9wdGlvbjogZnVuY3Rpb24oKSB7CgogICAgICAgIC8vIENhbGxzIHRoZSBqUXVlcnlVSSBXaWRnZXQgRmFjdG9yeSBzZXRPcHRpb24gbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgIH0sCgogICAgICAvLyBzZXRPcHRpb25zCiAgICAgIC8vIC0tLS0tLS0tLS0KICAgICAgLy8gICAgICBTZXRzIGEgc2luZ2xlIG9yIG11bHRpcGxlIFRvY2lmeSBvcHRpb25zIGFmdGVyIHRoZSBwbHVnaW4gaXMgaW52b2tlZAogICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbigpIHsKCiAgICAgICAgLy8gQ2FsbHMgdGhlIGpRdWVyeVVJIFdpZGdldCBGYWN0b3J5IHNldE9wdGlvbnMgbWV0aG9kCiAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb25zLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICB9LAoKICAgICAgLy8gX3Njcm9sbFRvCiAgICAgIC8vIC0tLS0tLS0tLQogICAgICAvLyAgICAgIFNjcm9sbHMgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICAgIF9zY3JvbGxUbzogZnVuY3Rpb24oZWxlbSkgewoKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICBkdXJhdGlvbiA9IHNlbGYub3B0aW9ucy5zbW9vdGhTY3JvbGwgfHwgMCwKICAgICAgICAgIHNjcm9sbFRvID0gc2VsZi5vcHRpb25zLnNjcm9sbFRvLAogICAgICAgICAgY3VycmVudERpdiA9ICQoJ2RpdltkYXRhLXVuaXF1ZT0iJyArIGVsZW0uYXR0cigiZGF0YS11bmlxdWUiKSArICciXScpOwoKICAgICAgICBpZiAoIWN1cnJlbnREaXYubGVuZ3RoKSB7CgogICAgICAgICAgcmV0dXJuIHNlbGY7CgogICAgICAgIH0KCiAgICAgICAgLy8gT25jZSBhbGwgYW5pbWF0aW9ucyBvbiB0aGUgcGFnZSBhcmUgY29tcGxldGUsIHRoaXMgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKICAgICAgICAkKCJodG1sLCBib2R5IikucHJvbWlzZSgpLmRvbmUoZnVuY3Rpb24oKSB7CgogICAgICAgICAgLy8gQW5pbWF0ZXMgdGhlIGh0bWwgYW5kIGJvZHkgZWxlbWVudCBzY3JvbGx0b3BzCiAgICAgICAgICAkKCJodG1sLCBib2R5IikuYW5pbWF0ZSh7CgogICAgICAgICAgICAvLyBTZXRzIHRoZSBqUXVlcnkgYHNjcm9sbFRvcGAgdG8gdGhlIHRvcCBvZmZzZXQgb2YgdGhlIEhUTUwgZGl2IHRhZyB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgbGlzdCBpdGVtJ3MgYGRhdGEtdW5pcXVlYCB0YWcKICAgICAgICAgICAgInNjcm9sbFRvcCI6IGN1cnJlbnREaXYub2Zmc2V0KCkudG9wIC0gKCQuaXNGdW5jdGlvbihzY3JvbGxUbykgPyBzY3JvbGxUby5jYWxsKCkgOiBzY3JvbGxUbykgKyAicHgiCgogICAgICAgICAgfSwgewoKICAgICAgICAgICAgLy8gU2V0cyB0aGUgc21vb3RoU2Nyb2xsIGFuaW1hdGlvbiB0aW1lIGR1cmF0aW9uIHRvIHRoZSBzbW9vdGhTY3JvbGxTcGVlZCBvcHRpb24KICAgICAgICAgICAgImR1cmF0aW9uIjogZHVyYXRpb24KCiAgICAgICAgICB9KTsKCiAgICAgICAgfSk7CgogICAgICAgIC8vIE1haW50YWlucyBjaGFpbmFiaWxpdHkKICAgICAgICByZXR1cm4gc2VsZjsKCiAgICAgIH0KCiAgICB9KTsKCiAgfSkpOyAvL2VuZCBvZiBwbHVnaW4K"></script>
<script src="data:application/javascript;base64,CgovKioKICogalF1ZXJ5IFBsdWdpbjogU3RpY2t5IFRhYnMKICoKICogQGF1dGhvciBBaWRhbiBMaXN0ZXIgPGFpZGFuQHBocC5uZXQ+CiAqIGFkYXB0ZWQgYnkgUnViZW4gQXJzbGFuIHRvIGFjdGl2YXRlIHBhcmVudCB0YWJzIHRvbwogKiBodHRwOi8vd3d3LmFpZGFubGlzdGVyLmNvbS8yMDE0LzAzL3BlcnNpc3RpbmctdGhlLXRhYi1zdGF0ZS1pbi1ib290c3RyYXAvCiAqLwooZnVuY3Rpb24oJCkgewogICJ1c2Ugc3RyaWN0IjsKICAkLmZuLnJtYXJrZG93blN0aWNreVRhYnMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBjb250ZXh0ID0gdGhpczsKICAgIC8vIFNob3cgdGhlIHRhYiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIGhhc2ggaW4gdGhlIFVSTCwgb3IgdGhlIGZpcnN0IHRhYgogICAgdmFyIHNob3dTdHVmZkZyb21IYXNoID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHZhciBzZWxlY3RvciA9IGhhc2ggPyAnYVtocmVmPSInICsgaGFzaCArICciXScgOiAnbGkuYWN0aXZlID4gYSc7CiAgICAgIHZhciAkc2VsZWN0b3IgPSAkKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgICAgaWYoJHNlbGVjdG9yLmRhdGEoJ3RvZ2dsZScpID09PSAidGFiIikgewogICAgICAgICRzZWxlY3Rvci50YWIoJ3Nob3cnKTsKICAgICAgICAvLyB3YWxrIHVwIHRoZSBhbmNlc3RvcnMgb2YgdGhpcyBlbGVtZW50LCBzaG93IGFueSBoaWRkZW4gdGFicwogICAgICAgICRzZWxlY3Rvci5wYXJlbnRzKCcuc2VjdGlvbi50YWJzZXQnKS5lYWNoKGZ1bmN0aW9uKGksIGVsbSkgewogICAgICAgICAgdmFyIGxpbmsgPSAkKCdhW2hyZWY9IiMnICsgJChlbG0pLmF0dHIoJ2lkJykgKyAnIl0nKTsKICAgICAgICAgIGlmKGxpbmsuZGF0YSgndG9nZ2xlJykgPT09ICJ0YWIiKSB7CiAgICAgICAgICAgIGxpbmsudGFiKCJzaG93Iik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CgoKICAgIC8vIFNldCB0aGUgY29ycmVjdCB0YWIgd2hlbiB0aGUgcGFnZSBsb2FkcwogICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CgogICAgLy8gU2V0IHRoZSBjb3JyZWN0IHRhYiB3aGVuIGEgdXNlciB1c2VzIHRoZWlyIGJhY2svZm9yd2FyZCBidXR0b24KICAgICQod2luZG93KS5vbignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgewogICAgICBzaG93U3R1ZmZGcm9tSGFzaChjb250ZXh0KTsKICAgIH0pOwoKICAgIC8vIENoYW5nZSB0aGUgVVJMIHdoZW4gdGFicyBhcmUgY2xpY2tlZAogICAgJCgnYScsIGNvbnRleHQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKICAgICAgaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgdGhpcy5ocmVmKTsKICAgICAgc2hvd1N0dWZmRnJvbUhhc2goY29udGV4dCk7CiAgICB9KTsKCiAgICByZXR1cm4gdGhpczsKICB9Owp9KGpRdWVyeSkpOwoKd2luZG93LmJ1aWxkVGFic2V0cyA9IGZ1bmN0aW9uKHRvY0lEKSB7CgogIC8vIGJ1aWxkIGEgdGFic2V0IGZyb20gYSBzZWN0aW9uIGRpdiB3aXRoIHRoZSAudGFic2V0IGNsYXNzCiAgZnVuY3Rpb24gYnVpbGRUYWJzZXQodGFic2V0KSB7CgogICAgLy8gY2hlY2sgZm9yIGZhZGUgYW5kIHBpbGxzIG9wdGlvbnMKICAgIHZhciBmYWRlID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtZmFkZSIpOwogICAgdmFyIHBpbGxzID0gdGFic2V0Lmhhc0NsYXNzKCJ0YWJzZXQtcGlsbHMiKTsKICAgIHZhciBuYXZDbGFzcyA9IHBpbGxzID8gIm5hdi1waWxscyIgOiAibmF2LXRhYnMiOwoKICAgIC8vIGRldGVybWluZSB0aGUgaGVhZGluZyBsZXZlbCBvZiB0aGUgdGFic2V0IGFuZCB0YWJzCiAgICB2YXIgbWF0Y2ggPSB0YWJzZXQuYXR0cignY2xhc3MnKS5tYXRjaCgvbGV2ZWwoXGQpIC8pOwogICAgaWYgKG1hdGNoID09PSBudWxsKQogICAgICByZXR1cm47CiAgICB2YXIgdGFic2V0TGV2ZWwgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgdmFyIHRhYkxldmVsID0gdGFic2V0TGV2ZWwgKyAxOwoKICAgIC8vIGZpbmQgYWxsIHN1YmhlYWRpbmdzIGltbWVkaWF0ZWx5IGJlbG93CiAgICB2YXIgdGFicyA9IHRhYnNldC5maW5kKCJkaXYuc2VjdGlvbi5sZXZlbCIgKyB0YWJMZXZlbCk7CiAgICBpZiAoIXRhYnMubGVuZ3RoKQogICAgICByZXR1cm47CgogICAgLy8gY3JlYXRlIHRhYmxpc3QgYW5kIHRhYi1jb250ZW50IGVsZW1lbnRzCiAgICB2YXIgdGFiTGlzdCA9ICQoJzx1bCBjbGFzcz0ibmF2ICcgKyBuYXZDbGFzcyArICciIHJvbGU9InRhYmxpc3QiPjwvdWw+Jyk7CiAgICAkKHRhYnNbMF0pLmJlZm9yZSh0YWJMaXN0KTsKICAgIHZhciB0YWJDb250ZW50ID0gJCgnPGRpdiBjbGFzcz0idGFiLWNvbnRlbnQiPjwvZGl2PicpOwogICAgJCh0YWJzWzBdKS5iZWZvcmUodGFiQ29udGVudCk7CgogICAgLy8gYnVpbGQgdGhlIHRhYnNldAogICAgdmFyIGFjdGl2ZVRhYiA9IDA7CiAgICB0YWJzLmVhY2goZnVuY3Rpb24oaSkgewoKICAgICAgLy8gZ2V0IHRoZSB0YWIgZGl2CiAgICAgIHZhciB0YWIgPSAkKHRhYnNbaV0pOwoKICAgICAgLy8gZ2V0IHRoZSBpZCB0aGVuIHNhbml0aXplIGl0IGZvciB1c2Ugd2l0aCBib290c3RyYXAgdGFicwogICAgICB2YXIgaWQgPSB0YWIuYXR0cignaWQnKTsKCiAgICAgIC8vIHNlZSBpZiB0aGlzIGlzIG1hcmtlZCBhcyB0aGUgYWN0aXZlIHRhYgogICAgICBpZiAodGFiLmhhc0NsYXNzKCdhY3RpdmUnKSkKICAgICAgICBhY3RpdmVUYWIgPSBpOwoKICAgICAgLy8gcmVtb3ZlIGFueSB0YWJsZSBvZiBjb250ZW50cyBlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aAogICAgICAvLyB0aGlzIElEIChzaW5jZSB3ZSdsbCBiZSByZW1vdmluZyB0aGUgaGVhZGluZyBlbGVtZW50KQogICAgICAkKCJkaXYjIiArIHRvY0lEICsgIiBsaSBhW2hyZWY9JyMiICsgaWQgKyAiJ10iKS5wYXJlbnQoKS5yZW1vdmUoKTsKCiAgICAgIC8vIHNhbml0aXplIHRoZSBpZCBmb3IgdXNlIHdpdGggYm9vdHN0cmFwIHRhYnMKICAgICAgaWQgPSBpZC5yZXBsYWNlKC9bLlwvPyYhIzw+XS9nLCAnJykucmVwbGFjZSgvXHMvZywgJ18nKTsKICAgICAgdGFiLmF0dHIoJ2lkJywgaWQpOwoKICAgICAgLy8gZ2V0IHRoZSBoZWFkaW5nIGVsZW1lbnQgd2l0aGluIGl0LCBncmFiIGl0J3MgdGV4dCwgdGhlbiByZW1vdmUgaXQKICAgICAgdmFyIGhlYWRpbmcgPSB0YWIuZmluZCgnaCcgKyB0YWJMZXZlbCArICc6Zmlyc3QnKTsKICAgICAgdmFyIGhlYWRpbmdUZXh0ID0gaGVhZGluZy5odG1sKCk7CiAgICAgIGhlYWRpbmcucmVtb3ZlKCk7CgogICAgICAvLyBidWlsZCBhbmQgYXBwZW5kIHRoZSB0YWIgbGlzdCBpdGVtCiAgICAgIHZhciBhID0gJCgnPGEgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4nICsgaGVhZGluZ1RleHQgKyAnPC9hPicpOwogICAgICBhLmF0dHIoJ2hyZWYnLCAnIycgKyBpZCk7CiAgICAgIGEuYXR0cignYXJpYS1jb250cm9scycsIGlkKTsKICAgICAgdmFyIGxpID0gJCgnPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+PC9saT4nKTsKICAgICAgbGkuYXBwZW5kKGEpOwogICAgICB0YWJMaXN0LmFwcGVuZChsaSk7CgogICAgICAvLyBzZXQgaXQncyBhdHRyaWJ1dGVzCiAgICAgIHRhYi5hdHRyKCdyb2xlJywgJ3RhYnBhbmVsJyk7CiAgICAgIHRhYi5hZGRDbGFzcygndGFiLXBhbmUnKTsKICAgICAgdGFiLmFkZENsYXNzKCd0YWJiZWQtcGFuZScpOwogICAgICBpZiAoZmFkZSkKICAgICAgICB0YWIuYWRkQ2xhc3MoJ2ZhZGUnKTsKCiAgICAgIC8vIG1vdmUgaXQgaW50byB0aGUgdGFiIGNvbnRlbnQgZGl2CiAgICAgIHRhYi5kZXRhY2goKS5hcHBlbmRUbyh0YWJDb250ZW50KTsKICAgIH0pOwoKICAgIC8vIHNldCBhY3RpdmUgdGFiCiAgICAkKHRhYkxpc3QuY2hpbGRyZW4oJ2xpJylbYWN0aXZlVGFiXSkuYWRkQ2xhc3MoJ2FjdGl2ZScpOwogICAgdmFyIGFjdGl2ZSA9ICQodGFiQ29udGVudC5jaGlsZHJlbignZGl2LnNlY3Rpb24nKVthY3RpdmVUYWJdKTsKICAgIGFjdGl2ZS5hZGRDbGFzcygnYWN0aXZlJyk7CiAgICBpZiAoZmFkZSkKICAgICAgYWN0aXZlLmFkZENsYXNzKCdpbicpOwoKICAgIGlmICh0YWJzZXQuaGFzQ2xhc3MoInRhYnNldC1zdGlja3kiKSkKICAgICAgdGFic2V0LnJtYXJrZG93blN0aWNreVRhYnMoKTsKICB9CgogIC8vIGNvbnZlcnQgc2VjdGlvbiBkaXZzIHdpdGggdGhlIC50YWJzZXQgY2xhc3MgdG8gdGFic2V0cwogIHZhciB0YWJzZXRzID0gJCgiZGl2LnNlY3Rpb24udGFic2V0Iik7CiAgdGFic2V0cy5lYWNoKGZ1bmN0aW9uKGkpIHsKICAgIGJ1aWxkVGFic2V0KCQodGFic2V0c1tpXSkpOwogIH0pOwp9OwoK"></script>
<script src="data:application/javascript;base64,CndpbmRvdy5pbml0aWFsaXplQ29kZUZvbGRpbmcgPSBmdW5jdGlvbihzaG93KSB7CgogIC8vIGhhbmRsZXJzIGZvciBzaG93LWFsbCBhbmQgaGlkZSBhbGwKICAkKCIjcm1kLXNob3ctYWxsLWNvZGUiKS5jbGljayhmdW5jdGlvbigpIHsKICAgICQoJ2Rpdi5yLWNvZGUtY29sbGFwc2UnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNvbGxhcHNlKCdzaG93Jyk7CiAgICB9KTsKICB9KTsKICAkKCIjcm1kLWhpZGUtYWxsLWNvZGUiKS5jbGljayhmdW5jdGlvbigpIHsKICAgICQoJ2Rpdi5yLWNvZGUtY29sbGFwc2UnKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAkKHRoaXMpLmNvbGxhcHNlKCdoaWRlJyk7CiAgICB9KTsKICB9KTsKCiAgLy8gaW5kZXggZm9yIHVuaXF1ZSBjb2RlIGVsZW1lbnQgaWRzCiAgdmFyIGN1cnJlbnRJbmRleCA9IDE7CgogIC8vIHNlbGVjdCBhbGwgUiBjb2RlIGJsb2NrcwogIHZhciByQ29kZUJsb2NrcyA9ICQoJ3ByZS5yLCBwcmUucHl0aG9uLCBwcmUuYmFzaCwgcHJlLnNxbCwgcHJlLmNwcCwgcHJlLnN0YW4sIHByZS5qdWxpYSwgcHJlLmZvbGRhYmxlJyk7CiAgckNvZGVCbG9ja3MuZWFjaChmdW5jdGlvbigpIHsKCiAgICAvLyBjcmVhdGUgYSBjb2xsYXBzYWJsZSBkaXYgdG8gd3JhcCB0aGUgY29kZSBpbgogICAgdmFyIGRpdiA9ICQoJzxkaXYgY2xhc3M9ImNvbGxhcHNlIHItY29kZS1jb2xsYXBzZSI+PC9kaXY+Jyk7CiAgICB2YXIgc2hvd1RoaXMgPSAoc2hvdyB8fCAkKHRoaXMpLmhhc0NsYXNzKCdmb2xkLXNob3cnKSkgJiYgISQodGhpcykuaGFzQ2xhc3MoJ2ZvbGQtaGlkZScpOwogICAgdmFyIGlkID0gJ3Jjb2RlLTY0M0UwRjM2JyArIGN1cnJlbnRJbmRleCsrOwogICAgZGl2LmF0dHIoJ2lkJywgaWQpOwogICAgJCh0aGlzKS5iZWZvcmUoZGl2KTsKICAgICQodGhpcykuZGV0YWNoKCkuYXBwZW5kVG8oZGl2KTsKCiAgICAvLyBhZGQgYSBzaG93IGNvZGUgYnV0dG9uIHJpZ2h0IGFib3ZlCiAgICB2YXIgc2hvd0NvZGVUZXh0ID0gJCgnPHNwYW4+JyArIChzaG93VGhpcyA/ICdIaWRlJyA6ICdDb2RlJykgKyAnPC9zcGFuPicpOwogICAgdmFyIHNob3dDb2RlQnV0dG9uID0gJCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXhzIGJ0bi1zZWNvbmRhcnkgYnRuLXNtIGNvZGUtZm9sZGluZy1idG4gcHVsbC1yaWdodCBmbG9hdC1yaWdodCI+PC9idXR0b24+Jyk7CiAgICBzaG93Q29kZUJ1dHRvbi5hcHBlbmQoc2hvd0NvZGVUZXh0KTsKICAgIHNob3dDb2RlQnV0dG9uCiAgICAgICAgLmF0dHIoJ2RhdGEtdG9nZ2xlJywgJ2NvbGxhcHNlJykKICAgICAgICAuYXR0cignZGF0YS10YXJnZXQnLCAnIycgKyBpZCkKICAgICAgICAuYXR0cignYXJpYS1leHBhbmRlZCcsIHNob3dUaGlzKQogICAgICAgIC5hdHRyKCdhcmlhLWNvbnRyb2xzJywgaWQpOwoKICAgIHZhciBidXR0b25Sb3cgPSAkKCc8ZGl2IGNsYXNzPSJyb3ciPjwvZGl2PicpOwogICAgdmFyIGJ1dHRvbkNvbCA9ICQoJzxkaXYgY2xhc3M9ImNvbC1tZC0xMiI+PC9kaXY+Jyk7CgogICAgYnV0dG9uQ29sLmFwcGVuZChzaG93Q29kZUJ1dHRvbik7CiAgICBidXR0b25Sb3cuYXBwZW5kKGJ1dHRvbkNvbCk7CgogICAgZGl2LmJlZm9yZShidXR0b25Sb3cpOwoKICAgIC8vIHNob3cgdGhlIGRpdiBpZiBuZWNlc3NhcnkKICAgIGlmIChzaG93VGhpcykgZGl2LmNvbGxhcHNlKCdzaG93Jyk7CgogICAgLy8gdXBkYXRlIHN0YXRlIG9mIGJ1dHRvbiBvbiBzaG93L2hpZGUKICAgIC8vICAgKiBDaGFuZ2UgdGV4dAogICAgLy8gICAqIGFkZCBhIGNsYXNzIGZvciBpbnRlcm1lZGlhdGUgc3RhdGVzIHN0eWxpbmcKICAgIGRpdi5vbignaGlkZS5icy5jb2xsYXBzZScsIGZ1bmN0aW9uICgpIHsKICAgICAgc2hvd0NvZGVUZXh0LnRleHQoJ0NvZGUnKTsKICAgICAgc2hvd0NvZGVCdXR0b24uYWRkQ2xhc3MoJ2J0bi1jb2xsYXBzaW5nJyk7CiAgICB9KTsKICAgIGRpdi5vbignaGlkZGVuLmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZUJ1dHRvbi5yZW1vdmVDbGFzcygnYnRuLWNvbGxhcHNpbmcnKTsKICAgIH0pOwogICAgZGl2Lm9uKCdzaG93LmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZVRleHQudGV4dCgnSGlkZScpOwogICAgICBzaG93Q29kZUJ1dHRvbi5hZGRDbGFzcygnYnRuLWV4cGFuZGluZycpOwogICAgfSk7CiAgICBkaXYub24oJ3Nob3duLmJzLmNvbGxhcHNlJywgZnVuY3Rpb24gKCkgewogICAgICBzaG93Q29kZUJ1dHRvbi5yZW1vdmVDbGFzcygnYnRuLWV4cGFuZGluZycpOwogICAgfSk7CgogIH0pOwoKfQo="></script>
<link href="data:text/css,%2Epagedtable%20%7B%0Aoverflow%3A%20auto%3B%0Apadding%2Dleft%3A%208px%3B%0Apadding%2Dright%3A%208px%3B%0A%7D%0A%2Epagedtable%2Dwrapper%20%7B%0Aborder%3A%201px%20solid%20%23ccc%3B%0Aborder%2Dradius%3A%204px%3B%0Amargin%2Dbottom%3A%2010px%3B%0A%7D%0A%2Epagedtable%20table%20%7B%0Awidth%3A%20100%25%3B%0Amax%2Dwidth%3A%20100%25%3B%0Amargin%3A%200%3B%0A%7D%0A%2Epagedtable%20th%20%7B%0Apadding%3A%200%205px%200%205px%3B%0Aborder%3A%20none%3B%0Aborder%2Dbottom%3A%202px%20solid%20%23dddddd%3B%0Amin%2Dwidth%3A%2045px%3B%0A%7D%0A%2Epagedtable%2Dempty%20th%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20td%20%7B%0Apadding%3A%200%204px%200%204px%3B%0A%7D%0A%2Epagedtable%20%2Eeven%20%7B%0Abackground%2Dcolor%3A%20rgba%28140%2C%20140%2C%20140%2C%200%2E1%29%3B%0A%7D%0A%2Epagedtable%2Dpadding%2Dcol%20%7B%0Adisplay%3A%20none%3B%0A%7D%0A%2Epagedtable%20a%20%7B%0A%2Dwebkit%2Dtouch%2Dcallout%3A%20none%3B%0A%2Dwebkit%2Duser%2Dselect%3A%20none%3B%0A%2Dkhtml%2Duser%2Dselect%3A%20none%3B%0A%2Dmoz%2Duser%2Dselect%3A%20none%3B%0A%2Dms%2Duser%2Dselect%3A%20none%3B%0Auser%2Dselect%3A%20none%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%20%7B%0Acursor%3A%20pointer%3B%0Apadding%3A%200%205px%200%205px%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dnav%2Ddisabled%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dnav%2Ddisabled%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Acolor%3A%20%23999%3B%0A%7D%0A%2Epagedtable%2Dindexes%20%7B%0Acursor%3A%20pointer%3B%0Afloat%3A%20right%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dcurrent%20%7B%0Acursor%3A%20default%3B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0Aborder%3A%200%3B%0A%7D%0Aa%2Epagedtable%2Dindex%2Dcurrent%3Ahover%20%7B%0Atext%2Ddecoration%3A%20none%3B%0Afont%2Dweight%3A%20bold%3B%0Acolor%3A%20%23333%3B%0A%7D%0A%2Epagedtable%2Dindex%20%7B%0Awidth%3A%2030px%3B%0Adisplay%3A%20inline%2Dblock%3B%0Atext%2Dalign%3A%20center%3B%0Aborder%3A%200%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dleft%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%200%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dindex%2Dseparator%2Dright%20%7B%0Adisplay%3A%20inline%2Dblock%3B%0Acolor%3A%20%23333%3B%0Afont%2Dsize%3A%209px%3B%0Apadding%3A%200%204px%200%200%3B%0Acursor%3A%20default%3B%0A%7D%0A%2Epagedtable%2Dfooter%20%7B%0Apadding%2Dtop%3A%204px%3B%0Apadding%2Dbottom%3A%205px%3B%0A%7D%0A%2Epagedtable%2Dnot%2Dempty%20%2Epagedtable%2Dfooter%20%7B%0Aborder%2Dtop%3A%202px%20solid%20%23dddddd%3B%0A%7D%0A%2Epagedtable%2Dinfo%20%7B%0Aoverflow%3A%20hidden%3B%0Acolor%3A%20%23999%3B%0Awhite%2Dspace%3A%20nowrap%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dname%20%7B%0Aoverflow%3A%20hidden%3B%0Atext%2Doverflow%3A%20ellipsis%3B%0A%7D%0A%2Epagedtable%2Dheader%2Dtype%20%7B%0Acolor%3A%20%23999%3B%0Afont%2Dweight%3A%20400%3B%0A%7D%0A%2Epagedtable%2Dna%2Dcell%20%7B%0Afont%2Dstyle%3A%20italic%3B%0Aopacity%3A%200%2E3%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,Ly8gUHJvZHVjdGlvbiBzdGVwcyBvZiBFQ01BLTI2MiwgRWRpdGlvbiA1LCAxNS40LjQuMTgKLy8gUmVmZXJlbmNlOiBodHRwOi8vZXM1LmdpdGh1Yi5pby8jeDE1LjQuNC4xOAppZiAoIUFycmF5LnByb3RvdHlwZS5mb3JFYWNoKSB7CgogIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgazsKCiAgICBpZiAodGhpcyA9PT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcgdGhpcyBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7CiAgICB9CgogICAgLy8gMS4gTGV0IE8gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRvT2JqZWN0KCkgcGFzc2luZyB0aGUKICAgIC8vIHx0aGlzfCB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQoKSBpbnRlcm5hbAogICAgLy8gbWV0aG9kIG9mIE8gd2l0aCB0aGUgYXJndW1lbnQgImxlbmd0aCIuCiAgICAvLyAzLiBMZXQgbGVuIGJlIHRvVWludDMyKGxlblZhbHVlKS4KICAgIHZhciBsZW4gPSBPLmxlbmd0aCA+Pj4gMDsKCiAgICAvLyA0LiBJZiBpc0NhbGxhYmxlKGNhbGxiYWNrKSBpcyBmYWxzZSwgdGhyb3cgYSBUeXBlRXJyb3IgZXhjZXB0aW9uLgogICAgLy8gU2VlOiBodHRwOi8vZXM1LmdpdGh1Yi5jb20vI3g5LjExCiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoY2FsbGJhY2sgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7CiAgICB9CgogICAgLy8gNS4gSWYgdGhpc0FyZyB3YXMgc3VwcGxpZWQsIGxldCBUIGJlIHRoaXNBcmc7IGVsc2UgbGV0CiAgICAvLyBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA3LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlOwoKICAgICAgLy8gYS4gTGV0IFBrIGJlIFRvU3RyaW5nKGspLgogICAgICAvLyAgICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5CiAgICAgIC8vICAgIGludGVybmFsIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgIFRoaXMgc3RlcCBjYW4gYmUgY29tYmluZWQgd2l0aCBjCiAgICAgIC8vIGMuIElmIGtQcmVzZW50IGlzIHRydWUsIHRoZW4KICAgICAgaWYgKGsgaW4gTykgewoKICAgICAgICAvLyBpLiBMZXQga1ZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgR2V0IGludGVybmFsCiAgICAgICAgLy8gbWV0aG9kIG9mIE8gd2l0aCBhcmd1bWVudCBQay4KICAgICAgICBrVmFsdWUgPSBPW2tdOwoKICAgICAgICAvLyBpaS4gQ2FsbCB0aGUgQ2FsbCBpbnRlcm5hbCBtZXRob2Qgb2YgY2FsbGJhY2sgd2l0aCBUIGFzCiAgICAgICAgLy8gdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIGNhbGxiYWNrLmNhbGwoVCwga1ZhbHVlLCBrLCBPKTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KICAgIC8vIDguIHJldHVybiB1bmRlZmluZWQKICB9Owp9CgovLyBQcm9kdWN0aW9uIHN0ZXBzIG9mIEVDTUEtMjYyLCBFZGl0aW9uIDUsIDE1LjQuNC4xOQovLyBSZWZlcmVuY2U6IGh0dHA6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNC40LjE5CmlmICghQXJyYXkucHJvdG90eXBlLm1hcCkgewoKICBBcnJheS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHsKCiAgICB2YXIgVCwgQSwgazsKCiAgICBpZiAodGhpcyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyB0aGlzIGlzIG51bGwgb3Igbm90IGRlZmluZWQnKTsKICAgIH0KCiAgICAvLyAxLiBMZXQgTyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgVG9PYmplY3QgcGFzc2luZyB0aGUgfHRoaXN8CiAgICAvLyAgICB2YWx1ZSBhcyB0aGUgYXJndW1lbnQuCiAgICB2YXIgTyA9IE9iamVjdCh0aGlzKTsKCiAgICAvLyAyLiBMZXQgbGVuVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggdGhlIGFyZ3VtZW50ICJsZW5ndGgiLgogICAgLy8gMy4gTGV0IGxlbiBiZSBUb1VpbnQzMihsZW5WYWx1ZSkuCiAgICB2YXIgbGVuID0gTy5sZW5ndGggPj4+IDA7CgogICAgLy8gNC4gSWYgSXNDYWxsYWJsZShjYWxsYmFjaykgaXMgZmFsc2UsIHRocm93IGEgVHlwZUVycm9yIGV4Y2VwdGlvbi4KICAgIC8vIFNlZTogaHR0cDovL2VzNS5naXRodWIuY29tLyN4OS4xMQogICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykgewogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGNhbGxiYWNrICsgJyBpcyBub3QgYSBmdW5jdGlvbicpOwogICAgfQoKICAgIC8vIDUuIElmIHRoaXNBcmcgd2FzIHN1cHBsaWVkLCBsZXQgVCBiZSB0aGlzQXJnOyBlbHNlIGxldCBUIGJlIHVuZGVmaW5lZC4KICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgICBUID0gdGhpc0FyZzsKICAgIH0KCiAgICAvLyA2LiBMZXQgQSBiZSBhIG5ldyBhcnJheSBjcmVhdGVkIGFzIGlmIGJ5IHRoZSBleHByZXNzaW9uIG5ldyBBcnJheShsZW4pCiAgICAvLyAgICB3aGVyZSBBcnJheSBpcyB0aGUgc3RhbmRhcmQgYnVpbHQtaW4gY29uc3RydWN0b3Igd2l0aCB0aGF0IG5hbWUgYW5kCiAgICAvLyAgICBsZW4gaXMgdGhlIHZhbHVlIG9mIGxlbi4KICAgIEEgPSBuZXcgQXJyYXkobGVuKTsKCiAgICAvLyA3LiBMZXQgayBiZSAwCiAgICBrID0gMDsKCiAgICAvLyA4LiBSZXBlYXQsIHdoaWxlIGsgPCBsZW4KICAgIHdoaWxlIChrIDwgbGVuKSB7CgogICAgICB2YXIga1ZhbHVlLCBtYXBwZWRWYWx1ZTsKCiAgICAgIC8vIGEuIExldCBQayBiZSBUb1N0cmluZyhrKS4KICAgICAgLy8gICBUaGlzIGlzIGltcGxpY2l0IGZvciBMSFMgb3BlcmFuZHMgb2YgdGhlIGluIG9wZXJhdG9yCiAgICAgIC8vIGIuIExldCBrUHJlc2VudCBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIEhhc1Byb3BlcnR5IGludGVybmFsCiAgICAgIC8vICAgIG1ldGhvZCBvZiBPIHdpdGggYXJndW1lbnQgUGsuCiAgICAgIC8vICAgVGhpcyBzdGVwIGNhbiBiZSBjb21iaW5lZCB3aXRoIGMKICAgICAgLy8gYy4gSWYga1ByZXNlbnQgaXMgdHJ1ZSwgdGhlbgogICAgICBpZiAoayBpbiBPKSB7CgogICAgICAgIC8vIGkuIExldCBrVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBHZXQgaW50ZXJuYWwKICAgICAgICAvLyAgICBtZXRob2Qgb2YgTyB3aXRoIGFyZ3VtZW50IFBrLgogICAgICAgIGtWYWx1ZSA9IE9ba107CgogICAgICAgIC8vIGlpLiBMZXQgbWFwcGVkVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBDYWxsIGludGVybmFsCiAgICAgICAgLy8gICAgIG1ldGhvZCBvZiBjYWxsYmFjayB3aXRoIFQgYXMgdGhlIHRoaXMgdmFsdWUgYW5kIGFyZ3VtZW50CiAgICAgICAgLy8gICAgIGxpc3QgY29udGFpbmluZyBrVmFsdWUsIGssIGFuZCBPLgogICAgICAgIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suY2FsbChULCBrVmFsdWUsIGssIE8pOwoKICAgICAgICAvLyBpaWkuIENhbGwgdGhlIERlZmluZU93blByb3BlcnR5IGludGVybmFsIG1ldGhvZCBvZiBBIHdpdGggYXJndW1lbnRzCiAgICAgICAgLy8gUGssIFByb3BlcnR5IERlc2NyaXB0b3IKICAgICAgICAvLyB7IFZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIFdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgRW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIENvbmZpZ3VyYWJsZTogdHJ1ZSB9LAogICAgICAgIC8vIGFuZCBmYWxzZS4KCiAgICAgICAgLy8gSW4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSwgdXNlIHRoZSBmb2xsb3dpbmc6CiAgICAgICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIGssIHsKICAgICAgICAvLyAgIHZhbHVlOiBtYXBwZWRWYWx1ZSwKICAgICAgICAvLyAgIHdyaXRhYmxlOiB0cnVlLAogICAgICAgIC8vICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICAvLyAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICAgIC8vIH0pOwoKICAgICAgICAvLyBGb3IgYmVzdCBicm93c2VyIHN1cHBvcnQsIHVzZSB0aGUgZm9sbG93aW5nOgogICAgICAgIEFba10gPSBtYXBwZWRWYWx1ZTsKICAgICAgfQogICAgICAvLyBkLiBJbmNyZWFzZSBrIGJ5IDEuCiAgICAgIGsrKzsKICAgIH0KCiAgICAvLyA5LiByZXR1cm4gQQogICAgcmV0dXJuIEE7CiAgfTsKfQoKdmFyIFBhZ2VkVGFibGUgPSBmdW5jdGlvbiAocGFnZWRUYWJsZSkgewogIHZhciBtZSA9IHRoaXM7CgogIHZhciBzb3VyY2UgPSBmdW5jdGlvbihwYWdlZFRhYmxlKSB7CiAgICB2YXIgc291cmNlRWxlbXMgPSBbXS5zbGljZS5jYWxsKHBhZ2VkVGFibGUuY2hpbGRyZW4pLmZpbHRlcihmdW5jdGlvbihlKSB7CiAgICAgIHJldHVybiBlLmhhc0F0dHJpYnV0ZSgiZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSIpOwogICAgfSk7CgogICAgaWYgKHNvdXJjZUVsZW1zID09PSBudWxsIHx8IHNvdXJjZUVsZW1zLmxlbmd0aCAhPT0gMSkgewogICAgICB0aHJvdygiQSBzaW5nbGUgZGF0YS1wYWdlZHRhYmxlLXNvdXJjZSB3YXMgbm90IGZvdW5kIik7CiAgICB9CgogICAgcmV0dXJuIEpTT04ucGFyc2Uoc291cmNlRWxlbXNbMF0uaW5uZXJIVE1MKTsKICB9KHBhZ2VkVGFibGUpOwoKICB2YXIgb3B0aW9ucyA9IGZ1bmN0aW9uKHNvdXJjZSkgewogICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Yoc291cmNlLm9wdGlvbnMpICE9PSAidW5kZWZpbmVkIiAmJgogICAgICBzb3VyY2Uub3B0aW9ucyAhPT0gbnVsbCA/IHNvdXJjZS5vcHRpb25zIDoge307CgogICAgdmFyIGNvbHVtbnMgPSB0eXBlb2Yob3B0aW9ucy5jb2x1bW5zKSAhPT0gInVuZGVmaW5lZCIgPyBvcHRpb25zLmNvbHVtbnMgOiB7fTsKICAgIHZhciByb3dzID0gdHlwZW9mKG9wdGlvbnMucm93cykgIT09ICJ1bmRlZmluZWQiID8gb3B0aW9ucy5yb3dzIDoge307CgogICAgdmFyIHBvc2l0aXZlSW50T3JOdWxsID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogbnVsbDsKICAgIH07CgogICAgcmV0dXJuIHsKICAgICAgcGFnZXM6IHBvc2l0aXZlSW50T3JOdWxsKG9wdGlvbnMucGFnZXMpLAogICAgICByb3dzOiB7CiAgICAgICAgbWluOiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1pbiksCiAgICAgICAgbWF4OiBwb3NpdGl2ZUludE9yTnVsbChyb3dzLm1heCksCiAgICAgICAgdG90YWw6IHBvc2l0aXZlSW50T3JOdWxsKHJvd3MudG90YWwpCiAgICAgIH0sCiAgICAgIGNvbHVtbnM6IHsKICAgICAgICBtaW46IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWluKSwKICAgICAgICBtYXg6IHBvc2l0aXZlSW50T3JOdWxsKGNvbHVtbnMubWF4KSwKICAgICAgICB0b3RhbDogcG9zaXRpdmVJbnRPck51bGwoY29sdW1ucy50b3RhbCkKICAgICAgfQogICAgfTsKICB9KHNvdXJjZSk7CgogIHZhciBNZWFzdXJlciA9IGZ1bmN0aW9uKCkgewoKICAgIC8vIHNldCBzb21lIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZXMgdGhhdCB3aWxsIGdldCBhZGp1c3RlZCBpbiBydW50aW1lCiAgICBtZS5tZWFzdXJlcyA9IHsKICAgICAgcGFkZGluZzogMTIsCiAgICAgIGNoYXJhY3RlcjogOCwKICAgICAgaGVpZ2h0OiAxNSwKICAgICAgZGVmYXVsdHM6IHRydWUKICAgIH07CgogICAgbWUuY2FsY3VsYXRlID0gZnVuY3Rpb24obWVhc3VyZXNDZWxsKSB7CiAgICAgIGlmICghbWUubWVhc3VyZXMuZGVmYXVsdHMpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdmFyIG1lYXN1cmVzQ2VsbFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobWVhc3VyZXNDZWxsLCBudWxsKTsKCiAgICAgIHZhciBuZXdQYWRkaW5nID0gcGFyc2VQYWRkaW5nKG1lYXN1cmVzQ2VsbFN0eWxlLnBhZGRpbmdMZWZ0KSArCiAgICAgICAgICAgIHBhcnNlUGFkZGluZyhtZWFzdXJlc0NlbGxTdHlsZS5wYWRkaW5nUmlnaHQpOwoKICAgICAgdmFyIHNhbXBsZVN0cmluZyA9ICJBQkNERUZHSElKMDEyMzQ1Njc4OSI7CiAgICAgIHZhciBuZXdDaGFyYWN0ZXIgPSBNYXRoLmNlaWwobWVhc3VyZXNDZWxsLmNsaWVudFdpZHRoIC8gc2FtcGxlU3RyaW5nLmxlbmd0aCk7CgogICAgICBpZiAobmV3UGFkZGluZyA8PSAwIHx8IG5ld0NoYXJhY3RlciA8PSAwKQogICAgICAgIHJldHVybjsKCiAgICAgIG1lLm1lYXN1cmVzLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgICBtZS5tZWFzdXJlcy5jaGFyYWN0ZXIgPSBuZXdDaGFyYWN0ZXI7CiAgICAgIG1lLm1lYXN1cmVzLmhlaWdodCA9IG1lYXN1cmVzQ2VsbC5jbGllbnRIZWlnaHQ7CiAgICAgIG1lLm1lYXN1cmVzLmRlZmF1bHRzID0gZmFsc2U7CiAgICB9OwoKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgUGFnZSA9IGZ1bmN0aW9uKGRhdGEsIG9wdGlvbnMpIHsKICAgIHZhciBtZSA9IHRoaXM7CgogICAgdmFyIGRlZmF1bHRzID0gewogICAgICBtYXg6IDcsCiAgICAgIHJvd3M6IDEwCiAgICB9OwoKICAgIHZhciB0b3RhbFBhZ2VzID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyBtZS5yb3dzKTsKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLm1heCA9IG9wdGlvbnMucGFnZXMgIT09IG51bGwgPyBvcHRpb25zLnBhZ2VzIDogZGVmYXVsdHMubWF4OwogICAgbWUudmlzaWJsZSA9IG1lLm1heDsKICAgIG1lLnJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gb3B0aW9ucy5yb3dzLm1pbiA6IGRlZmF1bHRzLnJvd3M7CiAgICBtZS50b3RhbCA9IHRvdGFsUGFnZXMoKTsKCiAgICBtZS5zZXRSb3dzID0gZnVuY3Rpb24obmV3Um93cykgewogICAgICBtZS5yb3dzID0gbmV3Um93czsKICAgICAgbWUudG90YWwgPSB0b3RhbFBhZ2VzKCk7CiAgICB9OwoKICAgIG1lLnNldFBhZ2VOdW1iZXIgPSBmdW5jdGlvbihuZXdQYWdlTnVtYmVyKSB7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyIDwgMCkgbmV3UGFnZU51bWJlciA9IDA7CiAgICAgIGlmIChuZXdQYWdlTnVtYmVyID49IG1lLnRvdGFsKSBuZXdQYWdlTnVtYmVyID0gbWUudG90YWwgLSAxOwoKICAgICAgbWUubnVtYmVyID0gbmV3UGFnZU51bWJlcjsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZVBhZ2VzID0gZnVuY3Rpb24odmlzaWJsZVBhZ2VzKSB7CiAgICAgIG1lLnZpc2libGUgPSBNYXRoLm1pbihtZS5tYXgsIHZpc2libGVQYWdlcyk7CiAgICAgIG1lLnNldFBhZ2VOdW1iZXIobWUubnVtYmVyKTsKICAgIH07CgogICAgbWUuZ2V0VmlzaWJsZVBhZ2VSYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSBtZS5udW1iZXIgLSBNYXRoLm1heChNYXRoLmZsb29yKChtZS52aXNpYmxlIC0gMSkgLyAyKSwgMCk7CiAgICAgIHZhciBlbmQgPSBtZS5udW1iZXIgKyBNYXRoLmZsb29yKG1lLnZpc2libGUgLyAyKSArIDE7CiAgICAgIHZhciBwYWdlQ291bnQgPSBtZS50b3RhbDsKCiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICB2YXIgZGlmZlRvU3RhcnQgPSAwIC0gc3RhcnQ7CiAgICAgICAgc3RhcnQgKz0gZGlmZlRvU3RhcnQ7CiAgICAgICAgZW5kICs9IGRpZmZUb1N0YXJ0OwogICAgICB9CgogICAgICBpZiAoZW5kID4gcGFnZUNvdW50KSB7CiAgICAgICAgdmFyIGRpZmZUb0VuZCA9IGVuZCAtIHBhZ2VDb3VudDsKICAgICAgICBzdGFydCAtPSBkaWZmVG9FbmQ7CiAgICAgICAgZW5kIC09IGRpZmZUb0VuZDsKICAgICAgfQoKICAgICAgc3RhcnQgPSBzdGFydCA8IDAgPyAwIDogc3RhcnQ7CiAgICAgIGVuZCA9IGVuZCA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBlbmQ7CgogICAgICB2YXIgZmlyc3QgPSBmYWxzZTsKICAgICAgdmFyIGxhc3QgPSBmYWxzZTsKCiAgICAgIGlmIChzdGFydCA+IDAgJiYgbWUudmlzaWJsZSA+IDEpIHsKICAgICAgICBzdGFydCA9IHN0YXJ0ICsgMTsKICAgICAgICBmaXJzdCA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChlbmQgPCBwYWdlQ291bnQgJiYgbWUudmlzaWJsZSA+IDIpIHsKICAgICAgICBlbmQgPSBlbmQgLSAxOwogICAgICAgIGxhc3QgPSB0cnVlOwogICAgICB9CgogICAgICByZXR1cm4gewogICAgICAgIGZpcnN0OiBmaXJzdCwKICAgICAgICBzdGFydDogc3RhcnQsCiAgICAgICAgZW5kOiBlbmQsCiAgICAgICAgbGFzdDogbGFzdAogICAgICB9OwogICAgfTsKCiAgICBtZS5nZXRSb3dTdGFydCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBwYWdlLm51bWJlciAqIHBhZ2Uucm93czsKICAgICAgaWYgKHJvd1N0YXJ0IDwgMCkKICAgICAgICByb3dTdGFydCA9IDA7CgogICAgICByZXR1cm4gcm93U3RhcnQ7CiAgICB9OwoKICAgIG1lLmdldFJvd0VuZCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgcm93U3RhcnQgPSBtZS5nZXRSb3dTdGFydCgpOwogICAgICByZXR1cm4gTWF0aC5taW4ocm93U3RhcnQgKyBtZS5yb3dzLCBkYXRhLmxlbmd0aCk7CiAgICB9OwoKICAgIG1lLmdldFBhZGRpbmdSb3dzID0gZnVuY3Rpb24oKSB7CiAgICAgIHZhciByb3dTdGFydCA9IG1lLmdldFJvd1N0YXJ0KCk7CiAgICAgIHZhciByb3dFbmQgPSBtZS5nZXRSb3dFbmQoKTsKICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID4gbWUucm93cyA/IG1lLnJvd3MgLSAocm93RW5kIC0gcm93U3RhcnQpIDogMDsKICAgIH07CiAgfTsKCiAgdmFyIENvbHVtbnMgPSBmdW5jdGlvbihkYXRhLCBjb2x1bW5zLCBvcHRpb25zKSB7CiAgICB2YXIgbWUgPSB0aGlzOwoKICAgIG1lLmRlZmF1bHRzID0gewogICAgICBtaW46IDUKICAgIH07CgogICAgbWUubnVtYmVyID0gMDsKICAgIG1lLnZpc2libGUgPSAwOwogICAgbWUudG90YWwgPSBjb2x1bW5zLmxlbmd0aDsKICAgIG1lLnN1YnNldCA9IFtdOwogICAgbWUucGFkZGluZyA9IDA7CiAgICBtZS5taW4gPSBvcHRpb25zLmNvbHVtbnMubWluICE9PSBudWxsID8gb3B0aW9ucy5jb2x1bW5zLm1pbiA6IG1lLmRlZmF1bHRzLm1pbjsKICAgIG1lLm1heCA9IG9wdGlvbnMuY29sdW1ucy5tYXggIT09IG51bGwgPyBvcHRpb25zLmNvbHVtbnMubWF4IDogbnVsbDsKICAgIG1lLndpZHRocyA9IHt9OwoKICAgIHZhciB3aWR0aHNMb29rQWhlYWQgPSBNYXRoLm1heCgxMDAsIG9wdGlvbnMucm93cy5taW4pOwogICAgdmFyIHBhZGRpbmdDb2xDaGFycyA9IDEwOwoKICAgIG1lLmVtcHR5TmFtZXMgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIGlmIChjb2x1bW5zLmxhYmVsICE9PSBudWxsICYmIGNvbHVtbnMubGFiZWwgIT09ICIiKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKCiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKCiAgICB2YXIgcGFyc2VQYWRkaW5nID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKSA+PSAwID8gcGFyc2VJbnQodmFsdWUpIDogMDsKICAgIH07CgogICAgbWUuY2FsY3VsYXRlV2lkdGhzID0gZnVuY3Rpb24obWVhc3VyZXMpIHsKICAgICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbikgewogICAgICAgIHZhciBtYXhDaGFycyA9IE1hdGgubWF4KAogICAgICAgICAgY29sdW1uLmxhYmVsLnRvU3RyaW5nKCkubGVuZ3RoLAogICAgICAgICAgY29sdW1uLnR5cGUudG9TdHJpbmcoKS5sZW5ndGgKICAgICAgICApOwoKICAgICAgICBmb3IgKHZhciBpZHhSb3cgPSAwOyBpZHhSb3cgPCBNYXRoLm1pbih3aWR0aHNMb29rQWhlYWQsIGRhdGEubGVuZ3RoKTsgaWR4Um93KyspIHsKICAgICAgICAgIG1heENoYXJzID0gTWF0aC5tYXgobWF4Q2hhcnMsIGRhdGFbaWR4Um93XVtjb2x1bW4ubmFtZS50b1N0cmluZygpXS5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgbWUud2lkdGhzW2NvbHVtbi5uYW1lXSA9IHsKICAgICAgICAgIC8vIHdpZHRoIGluIGNoYXJhY3RlcnMKICAgICAgICAgIGNoYXJzOiBtYXhDaGFycywKICAgICAgICAgIC8vIHdpZHRoIGZvciB0aGUgaW5uZXIgaHRtbCBjb2x1bW5zCiAgICAgICAgICBpbm5lcjogbWF4Q2hhcnMgKiBtZWFzdXJlcy5jaGFyYWN0ZXIsCiAgICAgICAgICAvLyB3aWR0aCBhZGRpbmcgb3V0ZXIgc3R5bGVzIGxpa2UgcGFkZGluZwogICAgICAgICAgb3V0ZXI6IG1heENoYXJzICogbWVhc3VyZXMuY2hhcmFjdGVyICsgbWVhc3VyZXMucGFkZGluZwogICAgICAgIH07CiAgICAgIH0pOwogICAgfTsKCiAgICBtZS5nZXRXaWR0aCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgd2lkdGhPdXRlciA9IDA7CiAgICAgIGZvciAodmFyIGlkeENvbCA9IDA7IGlkeENvbCA8IG1lLnN1YnNldC5sZW5ndGg7IGlkeENvbCsrKSB7CiAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSBtZS5zdWJzZXRbaWR4Q29sXS5uYW1lOwogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgbWUud2lkdGhzW2NvbHVtbk5hbWVdLm91dGVyOwogICAgICB9CgogICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIG1lLnBhZGRpbmcgKiBwYWRkaW5nQ29sQ2hhcnMgKiBtZWFzdXJlci5tZWFzdXJlcy5jaGFyYWN0ZXI7CgogICAgICBpZiAobWUuaGFzTW9yZUxlZnRDb2x1bW5zKCkpIHsKICAgICAgICB3aWR0aE91dGVyID0gd2lkdGhPdXRlciArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgbWVhc3VyZXIubWVhc3VyZXMucGFkZGluZzsKICAgICAgfQoKICAgICAgaWYgKG1lLmhhc01vcmVSaWdodENvbHVtbnMoKSkgewogICAgICAgIHdpZHRoT3V0ZXIgPSB3aWR0aE91dGVyICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyBtZWFzdXJlci5tZWFzdXJlcy5wYWRkaW5nOwogICAgICB9CgogICAgICByZXR1cm4gd2lkdGhPdXRlcjsKICAgIH07CgogICAgbWUudXBkYXRlU2xpY2UgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKG1lLm51bWJlciArIG1lLnZpc2libGUgPj0gbWUudG90YWwpCiAgICAgICAgbWUubnVtYmVyID0gbWUudG90YWwgLSBtZS52aXNpYmxlOwoKICAgICAgaWYgKG1lLm51bWJlciA8IDApIG1lLm51bWJlciA9IDA7CgogICAgICBtZS5zdWJzZXQgPSBjb2x1bW5zLnNsaWNlKG1lLm51bWJlciwgTWF0aC5taW4obWUubnVtYmVyICsgbWUudmlzaWJsZSwgbWUudG90YWwpKTsKCiAgICAgIG1lLnN1YnNldCA9IG1lLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uKSB7CiAgICAgICAgT2JqZWN0LmtleXMoY29sdW1uKS5mb3JFYWNoKGZ1bmN0aW9uKGNvbEtleSkgewogICAgICAgICAgY29sdW1uW2NvbEtleV0gPSBjb2x1bW5bY29sS2V5XSA9PT0gbnVsbCA/ICIiIDogY29sdW1uW2NvbEtleV0udG9TdHJpbmcoKTsKICAgICAgICB9KTsKCiAgICAgICAgY29sdW1uLndpZHRoID0gbnVsbDsKICAgICAgICByZXR1cm4gY29sdW1uOwogICAgICB9KTsKICAgIH07CgogICAgbWUuc2V0VmlzaWJsZUNvbHVtbnMgPSBmdW5jdGlvbihjb2x1bW5OdW1iZXIsIG5ld1Zpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpIHsKICAgICAgbWUubnVtYmVyID0gY29sdW1uTnVtYmVyOwogICAgICBtZS52aXNpYmxlID0gbmV3VmlzaWJsZUNvbHVtbnM7CiAgICAgIG1lLnBhZGRpbmcgPSBwYWRkaW5nQ291bnQ7CgogICAgICBtZS51cGRhdGVTbGljZSgpOwogICAgfTsKCiAgICBtZS5pbmNDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihpbmNyZW1lbnQpIHsKICAgICAgbWUubnVtYmVyID0gbWUubnVtYmVyICsgaW5jcmVtZW50OwogICAgfTsKCiAgICBtZS5zZXRDb2x1bW5OdW1iZXIgPSBmdW5jdGlvbihuZXdOdW1iZXIpIHsKICAgICAgbWUubnVtYmVyID0gbmV3TnVtYmVyOwogICAgfTsKCiAgICBtZS5zZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbihuZXdQYWRkaW5nKSB7CiAgICAgIG1lLnBhZGRpbmcgPSBuZXdQYWRkaW5nOwogICAgfTsKCiAgICBtZS5nZXRQYWRkaW5nQ291bnQgPSBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIG1lLnBhZGRpbmc7CiAgICB9OwoKICAgIG1lLmhhc01vcmVMZWZ0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyID4gMDsKICAgIH07CgogICAgbWUuaGFzTW9yZVJpZ2h0Q29sdW1ucyA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gbWUubnVtYmVyICsgbWUudmlzaWJsZSA8IG1lLnRvdGFsOwogICAgfTsKCiAgICBtZS51cGRhdGVTbGljZSgwKTsKICAgIHJldHVybiBtZTsKICB9OwoKICB2YXIgZGF0YSA9IHNvdXJjZS5kYXRhOwogIHZhciBwYWdlID0gbmV3IFBhZ2UoZGF0YSwgb3B0aW9ucyk7CiAgdmFyIG1lYXN1cmVyID0gbmV3IE1lYXN1cmVyKGRhdGEsIG9wdGlvbnMpOwogIHZhciBjb2x1bW5zID0gbmV3IENvbHVtbnMoZGF0YSwgc291cmNlLmNvbHVtbnMsIG9wdGlvbnMpOwoKICB2YXIgdGFibGUgPSBudWxsOwogIHZhciB0YWJsZURpdiA9IG51bGw7CiAgdmFyIGhlYWRlciA9IG51bGw7CiAgdmFyIGZvb3RlciA9IG51bGw7CiAgdmFyIHRib2R5ID0gbnVsbDsKCiAgLy8gQ2FjaGVzIHBhZ2VkVGFibGUuY2xpZW50V2lkdGgsIHNwZWNpYWxseSBmb3Igd2Via2l0CiAgdmFyIGNhY2hlZFBhZ2VkVGFibGVDbGllbnRXaWR0aCA9IG51bGw7CgogIHZhciBvbkNoYW5nZUNhbGxiYWNrcyA9IFtdOwoKICB2YXIgY2xlYXJTZWxlY3Rpb24gPSBmdW5jdGlvbigpIHsKICAgIGlmKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uZW1wdHkpIHsKICAgICAgZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7CiAgICB9IGVsc2UgaWYod2luZG93LmdldFNlbGVjdGlvbikgewogICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICB9CiAgfTsKCiAgdmFyIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYID0gNTsKCiAgdmFyIHJlbmRlckNvbHVtbk5hdmlnYXRpb24gPSBmdW5jdGlvbihpbmNyZW1lbnQsIGJhY2t3YXJkcykgewogICAgdmFyIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImJvcmRlci10b3A6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci1ib3R0b206ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweCBzb2xpZCB0cmFuc3BhcmVudDsiICsKICAgICAgImJvcmRlci0iICsgKGJhY2t3YXJkcyA/ICJyaWdodCIgOiAibGVmdCIpICsgIjogIiArIGNvbHVtbk5hdmlnYXRpb25XaWR0aFBYICsgInB4IHNvbGlkOyIpOwoKICAgIHZhciBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpOwogICAgaGVhZGVyLmFwcGVuZENoaWxkKGFycm93KTsKICAgIGhlYWRlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwKICAgICAgImN1cnNvcjogcG9pbnRlcjsiICsKICAgICAgInZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IiArCiAgICAgICJtaW4td2lkdGg6ICIgKyBjb2x1bW5OYXZpZ2F0aW9uV2lkdGhQWCArICJweDsiICsKICAgICAgIndpZHRoOiAiICsgY29sdW1uTmF2aWdhdGlvbldpZHRoUFggKyAicHg7Iik7CgogICAgaGVhZGVyLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgY29sdW1ucy5pbmNDb2x1bW5OdW1iZXIoYmFja3dhcmRzID8gLTEgOiBpbmNyZW1lbnQpOwoKICAgICAgbWUuYW5pbWF0ZUNvbHVtbnMoYmFja3dhcmRzKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICBjbGVhclNlbGVjdGlvbigpOwogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CgogICAgcmV0dXJuIGhlYWRlcjsKICB9OwoKICB2YXIgbWF4Q29sdW1uV2lkdGggPSBmdW5jdGlvbih3aWR0aCkgewogICAgdmFyIHBhZGRpbmcgPSA4MDsKICAgIHZhciBjb2x1bW5NYXggPSBNYXRoLm1heChjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggLSBwYWRkaW5nLCAwKTsKCiAgICByZXR1cm4gcGFyc2VJbnQod2lkdGgpID4gMCA/CiAgICAgIE1hdGgubWluKGNvbHVtbk1heCwgcGFyc2VJbnQod2lkdGgpKSArICJweCIgOgogICAgICBjb2x1bW5NYXggKyAicHgiOwogIH07CgogIHZhciBjbGVhckhlYWRlciA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwogICAgdGhlYWQuaW5uZXJIVE1MID0gIiI7CiAgfTsKCiAgdmFyIHJlbmRlckhlYWRlciA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoOwoKICAgIHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKCiAgICBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwogICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaGVhZGVyKTsKCiAgICBpZiAoY29sdW1ucy5udW1iZXIgPiAwKQogICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQocmVuZGVyQ29sdW1uTmF2aWdhdGlvbigtY29sdW1ucy52aXNpYmxlLCB0cnVlKSk7CgogICAgY29sdW1ucy5zdWJzZXQgPSBjb2x1bW5zLnN1YnNldC5tYXAoZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICB2YXIgY29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgY29sdW1uLnNldEF0dHJpYnV0ZSgiYWxpZ24iLCBjb2x1bW5EYXRhLmFsaWduKTsKICAgICAgY29sdW1uLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CgogICAgICBjb2x1bW4uc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgaWYgKGNvbHVtbkRhdGEud2lkdGgpIHsKICAgICAgICBjb2x1bW4uc3R5bGUubWluV2lkdGggPQogICAgICAgICAgY29sdW1uLnN0eWxlLm1heFdpZHRoID0gbWF4Q29sdW1uV2lkdGgoY29sdW1uRGF0YS53aWR0aCk7CiAgICAgIH0KCiAgICAgIHZhciBjb2x1bW5OYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGNvbHVtbk5hbWUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWhlYWRlci1uYW1lIik7CiAgICAgIGlmIChjb2x1bW5EYXRhLmxhYmVsID09PSAiIikgewogICAgICAgIGNvbHVtbk5hbWUuaW5uZXJIVE1MID0gIiZuYnNwOyI7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgY29sdW1uTmFtZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2x1bW5EYXRhLmxhYmVsKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtbk5hbWUpOwoKICAgICAgdmFyIGNvbHVtblR5cGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29sdW1uVHlwZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtaGVhZGVyLXR5cGUiKTsKICAgICAgaWYgKGNvbHVtbkRhdGEudHlwZSA9PT0gIiIpIHsKICAgICAgICBjb2x1bW5UeXBlLmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGNvbHVtblR5cGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjwiICsgY29sdW1uRGF0YS50eXBlICsgIj4iKSk7CiAgICAgIH0KICAgICAgY29sdW1uLmFwcGVuZENoaWxkKGNvbHVtblR5cGUpOwoKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGNvbHVtbik7CgogICAgICBjb2x1bW5EYXRhLmVsZW1lbnQgPSBjb2x1bW47CgogICAgICByZXR1cm4gY29sdW1uRGF0YTsKICAgIH0pOwoKICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCk7IGlkeCsrKSB7CiAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKICAgICAgcGFkZGluZ0NvbC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcGFkZGluZy1jb2wiKTsKICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHBhZGRpbmdDb2wpOwogICAgfQoKICAgIGlmIChjb2x1bW5zLm51bWJlciArIGNvbHVtbnMudmlzaWJsZSA8IGNvbHVtbnMudG90YWwpCiAgICAgIGhlYWRlci5hcHBlbmRDaGlsZChyZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKGNvbHVtbnMudmlzaWJsZSwgZmFsc2UpKTsKCiAgICBpZiAodHlwZW9mKGNsZWFyKSA9PSAidW5kZWZpbmVkIiB8fCBjbGVhcikgY2xlYXJIZWFkZXIoKTsKICAgIHZhciB0aGVhZCA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgidGhlYWQiKVswXTsKICAgIHRoZWFkLmFwcGVuZENoaWxkKGZyYWdtZW50KTsKICB9OwoKICBtZS5hbmltYXRlQ29sdW1ucyA9IGZ1bmN0aW9uKGJhY2t3YXJkcykgewogICAgdmFyIHRoZWFkID0gcGFnZWRUYWJsZS5xdWVyeVNlbGVjdG9yQWxsKCJ0aGVhZCIpWzBdOwoKICAgIHZhciBoZWFkZXJPbGQgPSB0aGVhZC5xdWVyeVNlbGVjdG9yQWxsKCJ0ciIpWzBdOwogICAgdmFyIHRib2R5T2xkID0gdGFibGUucXVlcnlTZWxlY3RvckFsbCgidGJvZHkiKVswXTsKCiAgICBtZS5maXRDb2x1bW5zKGJhY2t3YXJkcyk7CgogICAgcmVuZGVySGVhZGVyKGZhbHNlKTsKCiAgICBoZWFkZXIuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIGhlYWRlci5zdHlsZS50cmFuc2Zvcm0gPSBiYWNrd2FyZHMgPyAidHJhbnNsYXRlWCgtMzBweCkiIDogInRyYW5zbGF0ZVgoMzBweCkiOwogICAgaGVhZGVyLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICBoZWFkZXIuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gIjAiOwoKICAgIHJlbmRlckJvZHkoZmFsc2UpOwoKICAgIGlmIChoZWFkZXJPbGQpIHsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgICBoZWFkZXJPbGQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDEwMG1zIGxpbmVhciwgb3BhY2l0eSAxMDBtcyI7CiAgICAgIGhlYWRlck9sZC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgaWYgKGhlYWRlck9sZC5zdHlsZS50cmFuc2l0aW9uRW5kKSB7CiAgICAgICAgaGVhZGVyT2xkLmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBoZWFkZXJPbGRCeUNsYXNzID0gdGhlYWQucXVlcnlTZWxlY3RvcigiLnBhZ2VkdGFibGUtcmVtb3ZlLWhlYWQiKTsKICAgICAgICAgIGlmIChoZWFkZXJPbGRCeUNsYXNzKSB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGRCeUNsYXNzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB0aGVhZC5yZW1vdmVDaGlsZChoZWFkZXJPbGQpOwogICAgICB9CiAgICB9CgogICAgaWYgKHRib2R5T2xkKSB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keU9sZCk7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgIHRib2R5LnN0eWxlLnRyYW5zaXRpb24gPSAidHJhbnNmb3JtIDIwMG1zIGxpbmVhciwgb3BhY2l0eSAyMDBtcyI7CiAgICB0Ym9keS5zdHlsZS50cmFuc2l0aW9uRGVsYXkgPSAiMG1zIjsKCiAgICAvLyBmb3JjZSByZWxheW91dAogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyKS5vcGFjaXR5OwogICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGJvZHkpLm9wYWNpdHk7CgogICAgaWYgKGhlYWRlck9sZCkgewogICAgICBoZWFkZXJPbGQuc3R5bGUudHJhbnNmb3JtID0gYmFja3dhcmRzID8gInRyYW5zbGF0ZVgoMjBweCkiIDogInRyYW5zbGF0ZVgoLTMwcHgpIjsKICAgICAgaGVhZGVyT2xkLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgaGVhZGVyLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVYKDBweCkiOwogICAgaGVhZGVyLnN0eWxlLm9wYWNpdHkgPSAiMSI7CgogICAgdGJvZHkuc3R5bGUub3BhY2l0eSA9ICIxIjsKICB9CgogIG1lLm9uQ2hhbmdlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogIH07CgogIHZhciB0cmlnZ2VyT25DaGFuZ2UgPSBmdW5jdGlvbigpIHsKICAgIG9uQ2hhbmdlQ2FsbGJhY2tzLmZvckVhY2goZnVuY3Rpb24ob25DaGFuZ2UpIHsKICAgICAgb25DaGFuZ2UoKTsKICAgIH0pOwogIH07CgogIHZhciBjbGVhckJvZHkgPSBmdW5jdGlvbigpIHsKICAgIGlmICh0Ym9keSkgewogICAgICB0YWJsZS5yZW1vdmVDaGlsZCh0Ym9keSk7CiAgICAgIHRib2R5ID0gbnVsbDsKICAgIH0KICB9OwoKICB2YXIgcmVuZGVyQm9keSA9IGZ1bmN0aW9uKGNsZWFyKSB7CiAgICBjYWNoZWRQYWdlZFRhYmxlQ2xpZW50V2lkdGggPSBwYWdlZFRhYmxlLmNsaWVudFdpZHRoCgogICAgdmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoKICAgIHZhciBwYWdlRGF0YSA9IGRhdGEuc2xpY2UocGFnZS5nZXRSb3dTdGFydCgpLCBwYWdlLmdldFJvd0VuZCgpKTsKCiAgICBwYWdlRGF0YS5mb3JFYWNoKGZ1bmN0aW9uKGRhdGFSb3csIGlkeFJvdykgewogICAgICB2YXIgaHRtbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7CiAgICAgIGh0bWxSb3cuc2V0QXR0cmlidXRlKCJjbGFzcyIsIChpZHhSb3cgJSAyICE9PTApID8gImV2ZW4iIDogIm9kZCIpOwoKICAgICAgaWYgKGNvbHVtbnMuaGFzTW9yZUxlZnRDb2x1bW5zKCkpCiAgICAgICAgaHRtbFJvdy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpKTsKCiAgICAgIGNvbHVtbnMuc3Vic2V0LmZvckVhY2goZnVuY3Rpb24oY29sdW1uRGF0YSkgewogICAgICAgIHZhciBjZWxsTmFtZSA9IGNvbHVtbkRhdGEubmFtZTsKICAgICAgICB2YXIgZGF0YUNlbGwgPSBkYXRhUm93W2NlbGxOYW1lXTsKICAgICAgICB2YXIgaHRtbENlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwoKICAgICAgICBpZiAoZGF0YUNlbGwgPT09ICJOQSIpIGh0bWxDZWxsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1uYS1jZWxsIik7CiAgICAgICAgaWYgKGRhdGFDZWxsID09PSAiX19OQV9fIikgZGF0YUNlbGwgPSAiTkEiOwoKICAgICAgICB2YXIgY2VsbFRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkYXRhQ2VsbCk7CiAgICAgICAgaHRtbENlbGwuYXBwZW5kQ2hpbGQoY2VsbFRleHQpOwogICAgICAgIGlmIChkYXRhQ2VsbC5sZW5ndGggPiA1MCkgewogICAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGRhdGFDZWxsKTsKICAgICAgICB9CiAgICAgICAgaHRtbENlbGwuc2V0QXR0cmlidXRlKCJhbGlnbiIsIGNvbHVtbkRhdGEuYWxpZ24pOwogICAgICAgIGh0bWxDZWxsLnN0eWxlLnRleHRBbGlnbiA9IGNvbHVtbkRhdGEuYWxpZ247CiAgICAgICAgaHRtbENlbGwuc3R5bGUubWF4V2lkdGggPSBtYXhDb2x1bW5XaWR0aChudWxsKTsKICAgICAgICBpZiAoY29sdW1uRGF0YS53aWR0aCkgewogICAgICAgICAgaHRtbENlbGwuc3R5bGUubWluV2lkdGggPSBodG1sQ2VsbC5zdHlsZS5tYXhXaWR0aCA9IG1heENvbHVtbldpZHRoKGNvbHVtbkRhdGEud2lkdGgpOwogICAgICAgIH0KICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGh0bWxDZWxsKTsKICAgICAgfSk7CgogICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpOyBpZHgrKykgewogICAgICAgIHZhciBwYWRkaW5nQ29sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKICAgICAgICBwYWRkaW5nQ29sLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1wYWRkaW5nLWNvbCIpOwogICAgICAgIGh0bWxSb3cuYXBwZW5kQ2hpbGQocGFkZGluZ0NvbCk7CiAgICAgIH0KCiAgICAgIGlmIChjb2x1bW5zLmhhc01vcmVSaWdodENvbHVtbnMoKSkKICAgICAgICBodG1sUm93LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikpOwoKICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaHRtbFJvdyk7CiAgICB9KTsKCiAgICBmb3IgKHZhciBpZHhQYWRkaW5nID0gMDsgaWR4UGFkZGluZyA8IHBhZ2UuZ2V0UGFkZGluZ1Jvd3MoKTsgaWR4UGFkZGluZysrKSB7CiAgICAgIHZhciBwYWRkaW5nUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKCiAgICAgIHZhciBwYWRkaW5nQ2VsbFJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgIHBhZGRpbmdDZWxsUm93LmlubmVySFRNTCA9ICImbmJzcDsiOwogICAgICBwYWRkaW5nQ2VsbFJvdy5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLCAiMTAwJSIpOwogICAgICBwYWRkaW5nUm93LmFwcGVuZENoaWxkKHBhZGRpbmdDZWxsUm93KTsKCiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBhZGRpbmdSb3cpOwogICAgfQoKICAgIGlmICh0eXBlb2YoY2xlYXIpID09ICJ1bmRlZmluZWQiIHx8IGNsZWFyKSBjbGVhckJvZHkoKTsKICAgIHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKICAgIHRib2R5LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKCiAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7CiAgfTsKCiAgdmFyIGdldExhYmVsSW5mbyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIHBhZ2VTdGFydCA9IHBhZ2UuZ2V0Um93U3RhcnQoKTsKICAgIHZhciBwYWdlRW5kID0gcGFnZS5nZXRSb3dFbmQoKTsKICAgIHZhciB0b3RhbFJvd3MgPSBkYXRhLmxlbmd0aDsKCiAgICB2YXIgdG90YWxSb3dzTGFiZWwgPSBvcHRpb25zLnJvd3MudG90YWwgPyBvcHRpb25zLnJvd3MudG90YWwgOiB0b3RhbFJvd3M7CiAgICB2YXIgdG90YWxSb3dzTGFiZWxGb3JtYXQgPSB0b3RhbFJvd3NMYWJlbC50b1N0cmluZygpLnJlcGxhY2UoLyhcZCkoPz0oXGRcZFxkKSsoPyFcZCkpL2csICckMSwnKTsKCiAgICB2YXIgaW5mb1RleHQgPSAocGFnZVN0YXJ0ICsgMSkgKyAiLSIgKyBwYWdlRW5kICsgIiBvZiAiICsgdG90YWxSb3dzTGFiZWxGb3JtYXQgKyAiIHJvd3MiOwogICAgaWYgKHRvdGFsUm93cyA8IHBhZ2Uucm93cykgewogICAgICBpbmZvVGV4dCA9IHRvdGFsUm93c0xhYmVsICsgIiByb3ciICsgKHRvdGFsUm93cyAhPSAxID8gInMiIDogIiIpOwogICAgfQogICAgaWYgKGNvbHVtbnMudG90YWwgPiBjb2x1bW5zLnZpc2libGUpIHsKICAgICAgdmFyIHRvdGFsQ29sdW1uc0xhYmVsID0gb3B0aW9ucy5jb2x1bW5zLnRvdGFsID8gb3B0aW9ucy5jb2x1bW5zLnRvdGFsIDogY29sdW1ucy50b3RhbDsKCiAgICAgIGluZm9UZXh0ID0gaW5mb1RleHQgKyAiIHwgIiArIChjb2x1bW5zLm51bWJlciArIDEpICsgIi0iICsKICAgICAgICAoTWF0aC5taW4oY29sdW1ucy5udW1iZXIgKyBjb2x1bW5zLnZpc2libGUsIGNvbHVtbnMudG90YWwpKSArCiAgICAgICAgIiBvZiAiICsgdG90YWxDb2x1bW5zTGFiZWwgKyAiIGNvbHVtbnMiOwogICAgfQoKICAgIHJldHVybiBpbmZvVGV4dDsKICB9OwoKICB2YXIgY2xlYXJGb290ZXIgPSBmdW5jdGlvbigpIHsKICAgIGZvb3RlciA9IHBhZ2VkVGFibGUucXVlcnlTZWxlY3RvckFsbCgiZGl2LnBhZ2VkdGFibGUtZm9vdGVyIilbMF07CiAgICBmb290ZXIuaW5uZXJIVE1MID0gIiI7CgogICAgcmV0dXJuIGZvb3RlcjsKICB9OwoKICB2YXIgY3JlYXRlUGFnZUxpbmsgPSBmdW5jdGlvbihpZHhQYWdlKSB7CiAgICB2YXIgcGFnZUxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBwYWdlTGlua0NsYXNzID0gaWR4UGFnZSA9PT0gcGFnZS5udW1iZXIgPyAicGFnZWR0YWJsZS1pbmRleCBwYWdlZHRhYmxlLWluZGV4LWN1cnJlbnQiIDogInBhZ2VkdGFibGUtaW5kZXgiOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJjbGFzcyIsIHBhZ2VMaW5rQ2xhc3MpOwogICAgcGFnZUxpbmsuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiLCBpZHhQYWdlKTsKICAgIHBhZ2VMaW5rLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhcnNlSW50KHRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXBhZ2UtaW5kZXgiKSkpOwogICAgICByZW5kZXJCb2R5KCk7CiAgICAgIHJlbmRlckZvb3RlcigpOwoKICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICB9OwoKICAgIHBhZ2VMaW5rLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGlkeFBhZ2UgKyAxKSk7CgogICAgcmV0dXJuIHBhZ2VMaW5rOwogIH0KCiAgdmFyIHJlbmRlckZvb3RlciA9IGZ1bmN0aW9uKCkgewogICAgZm9vdGVyID0gY2xlYXJGb290ZXIoKTsKCiAgICB2YXIgbmV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIG5leHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIk5leHQiKSk7CiAgICBuZXh0Lm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyICsgMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChuZXh0KTsKCiAgICB2YXIgcGFnZU51bWJlcnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VOdW1iZXJzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleGVzIik7CgogICAgdmFyIHBhZ2VSYW5nZSA9IHBhZ2UuZ2V0VmlzaWJsZVBhZ2VSYW5nZSgpOwoKICAgIGlmIChwYWdlUmFuZ2UuZmlyc3QpIHsKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsoMCk7CiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VMaW5rKTsKCiAgICAgIHZhciBwYWdlU2VwYXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3Iuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLWluZGV4LXNlcGFyYXRvci1sZWZ0Iik7CiAgICAgIHBhZ2VTZXBhcmF0b3IuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIi4uLiIpKQogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlU2VwYXJhdG9yKTsKICAgIH0KCiAgICBmb3IgKHZhciBpZHhQYWdlID0gcGFnZVJhbmdlLnN0YXJ0OyBpZHhQYWdlIDwgcGFnZVJhbmdlLmVuZDsgaWR4UGFnZSsrKSB7CiAgICAgIHZhciBwYWdlTGluayA9IGNyZWF0ZVBhZ2VMaW5rKGlkeFBhZ2UpOwoKICAgICAgcGFnZU51bWJlcnMuYXBwZW5kQ2hpbGQocGFnZUxpbmspOwogICAgfQoKICAgIGlmIChwYWdlUmFuZ2UubGFzdCkgewogICAgICB2YXIgcGFnZVNlcGFyYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBwYWdlU2VwYXJhdG9yLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmRleC1zZXBhcmF0b3ItcmlnaHQiKTsKICAgICAgcGFnZVNlcGFyYXRvci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLi4uIikpCiAgICAgIHBhZ2VOdW1iZXJzLmFwcGVuZENoaWxkKHBhZ2VTZXBhcmF0b3IpOwoKICAgICAgdmFyIHBhZ2VMaW5rID0gY3JlYXRlUGFnZUxpbmsocGFnZS50b3RhbCAtIDEpOwogICAgICBwYWdlTnVtYmVycy5hcHBlbmRDaGlsZChwYWdlTGluayk7CiAgICB9CgogICAgaWYgKGRhdGEubGVuZ3RoID4gcGFnZS5yb3dzKSBmb290ZXIuYXBwZW5kQ2hpbGQocGFnZU51bWJlcnMpOwoKICAgIHZhciBwcmV2aW91cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgIHByZXZpb3VzLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJQcmV2aW91cyIpKTsKICAgIHByZXZpb3VzLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsKICAgICAgcGFnZS5zZXRQYWdlTnVtYmVyKHBhZ2UubnVtYmVyIC0gMSk7CiAgICAgIHJlbmRlckJvZHkoKTsKICAgICAgcmVuZGVyRm9vdGVyKCk7CgogICAgICB0cmlnZ2VyT25DaGFuZ2UoKTsKICAgIH07CiAgICBpZiAoZGF0YS5sZW5ndGggPiBwYWdlLnJvd3MpIGZvb3Rlci5hcHBlbmRDaGlsZChwcmV2aW91cyk7CgogICAgdmFyIGluZm9MYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgaW5mb0xhYmVsLnNldEF0dHJpYnV0ZSgiY2xhc3MiLCAicGFnZWR0YWJsZS1pbmZvIik7CiAgICBpbmZvTGFiZWwuc2V0QXR0cmlidXRlKCJ0aXRsZSIsIGdldExhYmVsSW5mbygpKTsKICAgIGluZm9MYWJlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShnZXRMYWJlbEluZm8oKSkpOwogICAgZm9vdGVyLmFwcGVuZENoaWxkKGluZm9MYWJlbCk7CgogICAgdmFyIGVuYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiI7CiAgICB2YXIgZGlzYWJsZWRDbGFzcyA9ICJwYWdlZHRhYmxlLWluZGV4LW5hdiBwYWdlZHRhYmxlLWluZGV4LW5hdi1kaXNhYmxlZCI7CiAgICBwcmV2aW91cy5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZS5udW1iZXIgPD0gMCA/IGRpc2FibGVkQ2xhc3MgOiBlbmFibGVkQ2xhc3MpOwogICAgbmV4dC5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgKHBhZ2UubnVtYmVyICsgMSkgKiBwYWdlLnJvd3MgPj0gZGF0YS5sZW5ndGggPyBkaXNhYmxlZENsYXNzIDogZW5hYmxlZENsYXNzKTsKICB9OwoKICB2YXIgbWVhc3VyZXNDZWxsID0gbnVsbDsKCiAgdmFyIHJlbmRlck1lYXN1cmVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbWVhc3VyZXNUYWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgbWVhc3VyZXNUYWJsZS5zdHlsZS53aGl0ZVNwYWNlID0gIm5vd3JhcCI7CiAgICBtZWFzdXJlc1RhYmxlLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIG1lYXN1cmVzVGFibGUuc3R5bGUud2lkdGggPSAiYXV0byI7CgogICAgdmFyIG1lYXN1cmVzUm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKICAgIG1lYXN1cmVzVGFibGUuYXBwZW5kQ2hpbGQobWVhc3VyZXNSb3cpOwoKICAgIG1lYXN1cmVzQ2VsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICB2YXIgc2FtcGxlU3RyaW5nID0gIkFCQ0RFRkdISUowMTIzNDU2Nzg5IjsKICAgIG1lYXN1cmVzQ2VsbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzYW1wbGVTdHJpbmcpKTsKCiAgICBtZWFzdXJlc1Jvdy5hcHBlbmRDaGlsZChtZWFzdXJlc0NlbGwpOwoKICAgIHRhYmxlRGl2LmFwcGVuZENoaWxkKG1lYXN1cmVzVGFibGUpOwogIH0KCiAgbWUuaW5pdCA9IGZ1bmN0aW9uKCkgewogICAgdGFibGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHBhZ2VkVGFibGUuYXBwZW5kQ2hpbGQodGFibGVEaXYpOwogICAgdmFyIHBhZ2VkVGFibGVDbGFzcyA9IGRhdGEubGVuZ3RoID4gMCA/CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtbm90LWVtcHR5IiA6CiAgICAgICJwYWdlZHRhYmxlIHBhZ2VkdGFibGUtZW1wdHkiOwoKICAgIGlmIChjb2x1bW5zLnRvdGFsID09IDAgfHwgKGNvbHVtbnMuZW1wdHlOYW1lcygpICYmIGRhdGEubGVuZ3RoID09IDApKSB7CiAgICAgIHBhZ2VkVGFibGVDbGFzcyA9IHBhZ2VkVGFibGVDbGFzcyArICIgcGFnZWR0YWJsZS1lbXB0eS1jb2x1bW5zIjsKICAgIH0KCiAgICB0YWJsZURpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgcGFnZWRUYWJsZUNsYXNzKTsKCiAgICByZW5kZXJNZWFzdXJlcygpOwogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpOwogICAgdGFibGUuc2V0QXR0cmlidXRlKCJjZWxsc3BhY2luZyIsICIwIik7CiAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInRhYmxlIHRhYmxlLWNvbmRlbnNlZCIpOwogICAgdGFibGVEaXYuYXBwZW5kQ2hpbGQodGFibGUpOwoKICAgIHRhYmxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoZWFkIikpOwoKICAgIHZhciBmb290ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGZvb3RlckRpdi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgInBhZ2VkdGFibGUtZm9vdGVyIik7CiAgICB0YWJsZURpdi5hcHBlbmRDaGlsZChmb290ZXJEaXYpOwoKICAgIC8vIGlmIHRoZSBob3N0IGhhcyBub3QgeWV0IHByb3ZpZGVkIGhvcml6b250YWwgc3BhY2UsIHJlbmRlciBoaWRkZW4KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHRhYmxlRGl2LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICB9CgogICAgbWUucmVuZGVyKCk7CgogICAgLy8gcmV0cnkgc2VpemluZyBjb2x1bW5zIGxhdGVyIGlmIHRoZSBob3N0IGhhcyBub3QgcHJvdmlkZWQgc3BhY2UKICAgIGZ1bmN0aW9uIHJldHJ5Rml0KCkgewogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggPD0gMCkgewogICAgICAgIHNldFRpbWVvdXQocmV0cnlGaXQsIDEwMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwKSB7CiAgICAgIHJldHJ5Rml0KCk7CiAgICB9CiAgfTsKCiAgdmFyIHJlZ2lzdGVyV2lkdGhzID0gZnVuY3Rpb24oKSB7CiAgICBjb2x1bW5zLnN1YnNldCA9IGNvbHVtbnMuc3Vic2V0Lm1hcChmdW5jdGlvbihjb2x1bW4pIHsKICAgICAgY29sdW1uLndpZHRoID0gY29sdW1ucy53aWR0aHNbY29sdW1uLm5hbWVdLmlubmVyOwogICAgICByZXR1cm4gY29sdW1uOwogICAgfSk7CiAgfTsKCiAgdmFyIHBhcnNlUGFkZGluZyA9IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpID49IDAgPyBwYXJzZUludCh2YWx1ZSkgOiAwOwogIH07CgogIG1lLmZpeGVkSGVpZ2h0ID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb3B0aW9ucy5yb3dzLm1heCAhPSBudWxsOwogIH0KCiAgbWUuZml0Um93cyA9IGZ1bmN0aW9uKCkgewogICAgaWYgKG1lLmZpeGVkSGVpZ2h0KCkpCiAgICAgIHJldHVybjsKCiAgICBtZWFzdXJlci5jYWxjdWxhdGUobWVhc3VyZXNDZWxsKTsKCiAgICB2YXIgcm93cyA9IG9wdGlvbnMucm93cy5taW4gIT09IG51bGwgPyBvcHRpb25zLnJvd3MubWluIDogMDsKICAgIHZhciBoZWFkZXJIZWlnaHQgPSBoZWFkZXIgIT09IG51bGwgJiYgaGVhZGVyLm9mZnNldEhlaWdodCA+IDAgPyBoZWFkZXIub2Zmc2V0SGVpZ2h0IDogMDsKICAgIHZhciBmb290ZXJIZWlnaHQgPSBmb290ZXIgIT09IG51bGwgJiYgZm9vdGVyLm9mZnNldEhlaWdodCA+IDAgPyBmb290ZXIub2Zmc2V0SGVpZ2h0IDogMDsKCiAgICBpZiAocGFnZWRUYWJsZS5vZmZzZXRIZWlnaHQgPiAwKSB7CiAgICAgIHZhciBhdmFpbGFibGVIZWlnaHQgPSBwYWdlZFRhYmxlLm9mZnNldEhlaWdodCAtIGhlYWRlckhlaWdodCAtIGZvb3RlckhlaWdodDsKICAgICAgcm93cyA9IE1hdGguZmxvb3IoKGF2YWlsYWJsZUhlaWdodCkgLyBtZWFzdXJlci5tZWFzdXJlcy5oZWlnaHQpOwogICAgfQoKICAgIHJvd3MgPSBvcHRpb25zLnJvd3MubWluICE9PSBudWxsID8gTWF0aC5tYXgob3B0aW9ucy5yb3dzLm1pbiwgcm93cykgOiByb3dzOwoKICAgIHBhZ2Uuc2V0Um93cyhyb3dzKTsKICB9CgogIC8vIFRoZSBnb2FsIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gYWRkIGFzIG1hbnkgY29sdW1ucyBhcyBwb3NzaWJsZQogIC8vIHN0YXJ0aW5nIGZyb20gbGVmdC10by1yaWdodCwgd2hlbiB0aGUgcmlnaHQgbW9zdCBsaW1pdCBpcyByZWFjaGVkCiAgLy8gaXQgdHJpZXMgdG8gYWRkIGNvbHVtbnMgZnJvbSB0aGUgbGVmdCBhcyB3ZWxsLgogIC8vCiAgLy8gV2hlbiBzdGFydEJhY2t3YXJkcyBpcyB0cnVlIGNvbHVtbnMgYXJlIGFkZGVkIGZyb20gcmlnaHQtdG8tbGVmdAogIG1lLmZpdENvbHVtbnMgPSBmdW5jdGlvbihzdGFydEJhY2t3YXJkcykgewogICAgbWVhc3VyZXIuY2FsY3VsYXRlKG1lYXN1cmVzQ2VsbCk7CiAgICBjb2x1bW5zLmNhbGN1bGF0ZVdpZHRocyhtZWFzdXJlci5tZWFzdXJlcyk7CgogICAgaWYgKHRhYmxlRGl2LmNsaWVudFdpZHRoID4gMCkgewogICAgICB0YWJsZURpdi5zdHlsZS5vcGFjaXR5ID0gMTsKICAgIH0KCiAgICB2YXIgdmlzaWJsZUNvbHVtbnMgPSB0YWJsZURpdi5jbGllbnRXaWR0aCA8PSAwID8gTWF0aC5tYXgoY29sdW1ucy5taW4sIDEpIDogMTsKICAgIHZhciBjb2x1bW5OdW1iZXIgPSBjb2x1bW5zLm51bWJlcjsKICAgIHZhciBwYWRkaW5nQ291bnQgPSAwOwoKICAgIC8vIHRyYWNrIGEgbGlzdCBvZiBhZGRlZCBjb2x1bW5zIGFzIHdlIGJ1aWxkIHRoZSB2aXNpYmxlIG9uZXMgdG8gYWxsb3cgdXMKICAgIC8vIHRvIHJlbW92ZSBjb2x1bW5zIHdoZW4gdGhleSBkb24ndCBmaXQgYW55bW9yZS4KICAgIHZhciBjb2x1bW5IaXN0b3J5ID0gW107CgogICAgdmFyIGxhc3RUYWJsZUhlaWdodCA9IDA7CiAgICB2YXIgYmFja3dhcmRzID0gc3RhcnRCYWNrd2FyZHM7CgogICAgdmFyIHRhYmxlRGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YWJsZURpdiwgbnVsbCk7CiAgICB2YXIgdGFibGVEaXZQYWRkaW5nID0gcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ0xlZnQpICsKICAgICAgcGFyc2VQYWRkaW5nKHRhYmxlRGl2U3R5bGUucGFkZGluZ1JpZ2h0KTsKCiAgICB2YXIgYWRkUGFkZGluZ0NvbCA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRXaWR0aCA9IDA7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29sdW1ucy5zZXRWaXNpYmxlQ29sdW1ucyhjb2x1bW5OdW1iZXIsIHZpc2libGVDb2x1bW5zLCBwYWRkaW5nQ291bnQpOwogICAgICBjdXJyZW50V2lkdGggPSBjb2x1bW5zLmdldFdpZHRoKCk7CgogICAgICBpZiAodGFibGVEaXYuY2xpZW50V2lkdGggLSB0YWJsZURpdlBhZGRpbmcgPCBjdXJyZW50V2lkdGgpIHsKICAgICAgICBicmVhazsKICAgICAgfQoKICAgICAgY29sdW1uSGlzdG9yeS5wdXNoKHsKICAgICAgICBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciwKICAgICAgICB2aXNpYmxlQ29sdW1uczogdmlzaWJsZUNvbHVtbnMsCiAgICAgICAgcGFkZGluZ0NvdW50OiBwYWRkaW5nQ291bnQKICAgICAgfSk7CgogICAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAxMDApIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJNb3JlIHRoYW4gMTAwIHRyaWVzIHRvIGZpdCBjb2x1bW5zLCBhYm9ydGluZyIpOwogICAgICAgIGJyZWFrOwogICAgICB9CgogICAgICBpZiAoY29sdW1ucy5tYXggIT09IG51bGwgJiYKICAgICAgICBjb2x1bW5zLnZpc2libGUgKyBjb2x1bW5zLmdldFBhZGRpbmdDb3VudCgpID49IGNvbHVtbnMubWF4KSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIC8vIGlmIHdlIHJ1biBvdXQgb2YgcmlnaHQtY29sdW1ucwogICAgICBpZiAoIWJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgKyBjb2x1bW5zLnZpc2libGUgPj0gY29sdW1ucy50b3RhbCkgewogICAgICAgIC8vIGlmIHdlIHN0YXJ0ZWQgYWRkaW5nIHJpZ2h0LWNvbHVtbnMsIHRyeSBhZGRpbmcgbGVmdC1jb2x1bW5zCiAgICAgICAgaWYgKCFzdGFydEJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgICBiYWNrd2FyZHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjb2x1bW5zLm1pbiA9PT0gbnVsbCB8fCB2aXNpYmxlQ29sdW1ucyArIGNvbHVtbnMuZ2V0UGFkZGluZ0NvdW50KCkgPj0gY29sdW1ucy5taW4pIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHBhZGRpbmdDb3VudCA9IHBhZGRpbmdDb3VudCArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBpZiB3ZSBydW4gb3V0IG9mIGxlZnQtY29sdW1ucwogICAgICBpZiAoYmFja3dhcmRzICYmIGNvbHVtbk51bWJlciA9PSAwKSB7CiAgICAgICAgLy8gaWYgd2Ugc3RhcnRlZCBhZGRpbmcgbGVmdC1jb2x1bW5zLCB0cnkgYWRkaW5nIHJpZ2h0LWNvbHVtbnMKICAgICAgICBpZiAoc3RhcnRCYWNrd2FyZHMgJiYgY29sdW1uTnVtYmVyICsgY29sdW1ucy52aXNpYmxlIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgICAgYmFja3dhcmRzID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNvbHVtbnMubWluID09PSBudWxsIHx8IHZpc2libGVDb2x1bW5zICsgY29sdW1ucy5nZXRQYWRkaW5nQ291bnQoKSA+PSBjb2x1bW5zLm1pbikgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgcGFkZGluZ0NvdW50ID0gcGFkZGluZ0NvdW50ICsgMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIHdoZW4gbW92aW5nIGJhY2t3YXJkcyB0cnkgZml0dGluZyBsZWZ0IGNvbHVtbnMgZmlyc3QKICAgICAgaWYgKGJhY2t3YXJkcyAmJiBjb2x1bW5OdW1iZXIgPiAwKSB7CiAgICAgICAgY29sdW1uTnVtYmVyID0gY29sdW1uTnVtYmVyIC0gMTsKICAgICAgfQoKICAgICAgaWYgKGNvbHVtbk51bWJlciArIHZpc2libGVDb2x1bW5zIDwgY29sdW1ucy50b3RhbCkgewogICAgICAgIHZpc2libGVDb2x1bW5zID0gdmlzaWJsZUNvbHVtbnMgKyAxOwogICAgICB9CiAgICB9CgogICAgdmFyIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gewogICAgICAgIGNvbHVtbk51bWJlcjogY29sdW1uTnVtYmVyLAogICAgICAgIHZpc2libGVDb2x1bW5zOiB2aXNpYmxlQ29sdW1ucywKICAgICAgICBwYWRkaW5nQ291bnQ6IHBhZGRpbmdDb3VudAogICAgfTsKCiAgICBpZiAoY29sdW1uSGlzdG9yeS5sZW5ndGggPiAwKSB7CiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uID0gY29sdW1uSGlzdG9yeVtjb2x1bW5IaXN0b3J5Lmxlbmd0aCAtIDFdOwogICAgfQoKICAgIGNvbHVtbnMuc2V0VmlzaWJsZUNvbHVtbnMoCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLmNvbHVtbk51bWJlciwKICAgICAgbGFzdFJlbmRlcmFibGVDb2x1bW4udmlzaWJsZUNvbHVtbnMsCiAgICAgIGxhc3RSZW5kZXJhYmxlQ29sdW1uLnBhZGRpbmdDb3VudCk7CgogICAgaWYgKHBhZ2VkVGFibGUub2Zmc2V0V2lkdGggPiAwKSB7CiAgICAgIHBhZ2Uuc2V0VmlzaWJsZVBhZ2VzKE1hdGgubWF4KE1hdGguY2VpbCgxLjAgKiAocGFnZWRUYWJsZS5vZmZzZXRXaWR0aCAtIDI1MCkgLyA0MCksIDIpKTsKICAgIH0KCiAgICByZWdpc3RlcldpZHRocygpOwogIH07CgogIG1lLmZpdCA9IGZ1bmN0aW9uKHN0YXJ0QmFja3dhcmRzKSB7CiAgICBtZS5maXRSb3dzKCk7CiAgICBtZS5maXRDb2x1bW5zKHN0YXJ0QmFja3dhcmRzKTsKICB9CgogIG1lLnJlbmRlciA9IGZ1bmN0aW9uKCkgewogICAgbWUuZml0Q29sdW1ucyhmYWxzZSk7CgogICAgLy8gcmVuZGVyIGhlYWRlci9mb290ZXIgdG8gbWVhc3VyZSBoZWlnaHQgYWNjdXJhdGVseQogICAgcmVuZGVySGVhZGVyKCk7CiAgICByZW5kZXJGb290ZXIoKTsKCiAgICBtZS5maXRSb3dzKCk7CiAgICByZW5kZXJCb2R5KCk7CgogICAgLy8gcmUtcmVuZGVyIGZvb3RlciB0byBtYXRjaCBuZXcgcm93cwogICAgcmVuZGVyRm9vdGVyKCk7CiAgfQoKICB2YXIgcmVzaXplTGFzdFdpZHRoID0gLTE7CiAgdmFyIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICB2YXIgcmVzaXplTmV3V2lkdGggPSAtMTsKICB2YXIgcmVzaXplTmV3SGVpZ2h0ID0gLTE7CiAgdmFyIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgbWUucmVzaXplID0gZnVuY3Rpb24obmV3V2lkdGgsIG5ld0hlaWdodCkgewoKICAgIGZ1bmN0aW9uIHJlc2l6ZURlbGF5ZWQoKSB7CiAgICAgIHJlc2l6ZVBlbmRpbmcgPSBmYWxzZTsKCiAgICAgIGlmICgKICAgICAgICAocmVzaXplTmV3V2lkdGggIT09IHJlc2l6ZUxhc3RXaWR0aCkgfHwKICAgICAgICAoIW1lLmZpeGVkSGVpZ2h0KCkgJiYgcmVzaXplTmV3SGVpZ2h0ICE9PSByZXNpemVMYXN0SGVpZ2h0KQogICAgICApIHsKICAgICAgICByZXNpemVMYXN0V2lkdGggPSByZXNpemVOZXdXaWR0aDsKICAgICAgICByZXNpemVMYXN0SGVpZ2h0ID0gcmVzaXplTmV3SGVpZ2h0OwoKICAgICAgICBzZXRUaW1lb3V0KHJlc2l6ZURlbGF5ZWQsIDIwMCk7CiAgICAgICAgcmVzaXplUGVuZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWUucmVuZGVyKCk7CiAgICAgICAgdHJpZ2dlck9uQ2hhbmdlKCk7CgogICAgICAgIHJlc2l6ZUxhc3RXaWR0aCA9IC0xOwogICAgICAgIHJlc2l6ZUxhc3RIZWlnaHQgPSAtMTsKICAgICAgfQogICAgfQoKICAgIHJlc2l6ZU5ld1dpZHRoID0gbmV3V2lkdGg7CiAgICByZXNpemVOZXdIZWlnaHQgPSBuZXdIZWlnaHQ7CgogICAgaWYgKCFyZXNpemVQZW5kaW5nKSByZXNpemVEZWxheWVkKCk7CiAgfTsKfTsKCnZhciBQYWdlZFRhYmxlRG9jOwooZnVuY3Rpb24gKFBhZ2VkVGFibGVEb2MpIHsKICB2YXIgYWxsUGFnZWRUYWJsZXMgPSBbXTsKCiAgUGFnZWRUYWJsZURvYy5pbml0QWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcyA9IFtdOwoKICAgIHZhciBwYWdlZFRhYmxlcyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtcGFnZWR0YWJsZT0iZmFsc2UiXSxbZGF0YS1wYWdlZHRhYmxlPSIiXScpKTsKICAgIHBhZ2VkVGFibGVzLmZvckVhY2goZnVuY3Rpb24ocGFnZWRUYWJsZSwgaWR4KSB7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJkYXRhLXBhZ2VkdGFibGUiLCAidHJ1ZSIpOwogICAgICBwYWdlZFRhYmxlLnNldEF0dHJpYnV0ZSgicGFnZWR0YWJsZS1wYWdlIiwgMCk7CiAgICAgIHBhZ2VkVGFibGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsICJwYWdlZHRhYmxlLXdyYXBwZXIiKTsKCiAgICAgIHZhciBwYWdlZFRhYmxlSW5zdGFuY2UgPSBuZXcgUGFnZWRUYWJsZShwYWdlZFRhYmxlKTsKICAgICAgcGFnZWRUYWJsZUluc3RhbmNlLmluaXQoKTsKCiAgICAgIGFsbFBhZ2VkVGFibGVzLnB1c2gocGFnZWRUYWJsZUluc3RhbmNlKTsKICAgIH0pOwogIH07CgogIFBhZ2VkVGFibGVEb2MucmVzaXplQWxsID0gZnVuY3Rpb24oKSB7CiAgICBhbGxQYWdlZFRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uKHBhZ2VkVGFibGUpIHsKICAgICAgcGFnZWRUYWJsZS5yZW5kZXIoKTsKICAgIH0pOwogIH07CgogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCBQYWdlZFRhYmxlRG9jLnJlc2l6ZUFsbCk7CgogIHJldHVybiBQYWdlZFRhYmxlRG9jOwp9KShQYWdlZFRhYmxlRG9jIHx8IChQYWdlZFRhYmxlRG9jID0ge30pKTsKCndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICBQYWdlZFRhYmxlRG9jLmluaXRBbGwoKTsKfTsK"></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKCkgewogIC8vIElmIHdpbmRvdy5IVE1MV2lkZ2V0cyBpcyBhbHJlYWR5IGRlZmluZWQsIHRoZW4gdXNlIGl0OyBvdGhlcndpc2UgY3JlYXRlIGEKICAvLyBuZXcgb2JqZWN0LiBUaGlzIGFsbG93cyBwcmVjZWRpbmcgY29kZSB0byBzZXQgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUKICAvLyBpbml0aWFsaXphdGlvbiBwcm9jZXNzICh0aG91Z2ggbm9uZSBjdXJyZW50bHkgZXhpc3QpLgogIHdpbmRvdy5IVE1MV2lkZ2V0cyA9IHdpbmRvdy5IVE1MV2lkZ2V0cyB8fCB7fTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSB2aWV3ZXIgcGFuZS4gSWYgbm90LCB3ZSdyZSBpbiBhIHdlYiBicm93c2VyLgogIHZhciB2aWV3ZXJNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnZpZXdlck1vZGUgPQogICAgICAvXGJ2aWV3ZXJfcGFuZT0xXGIvLnRlc3Qod2luZG93LmxvY2F0aW9uKTsKCiAgLy8gU2VlIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gU2hpbnkgbW9kZS4gSWYgbm90LCBpdCdzIGEgc3RhdGljIGRvY3VtZW50LgogIC8vIE5vdGUgdGhhdCBzdGF0aWMgd2lkZ2V0cyBjYW4gYXBwZWFyIGluIGJvdGggU2hpbnkgYW5kIHN0YXRpYyBtb2RlcywgYnV0CiAgLy8gb2J2aW91c2x5LCBTaGlueSB3aWRnZXRzIGNhbiBvbmx5IGFwcGVhciBpbiBTaGlueSBhcHBzL2RvY3VtZW50cy4KICB2YXIgc2hpbnlNb2RlID0gd2luZG93LkhUTUxXaWRnZXRzLnNoaW55TW9kZSA9CiAgICAgIHR5cGVvZih3aW5kb3cuU2hpbnkpICE9PSAidW5kZWZpbmVkIiAmJiAhIXdpbmRvdy5TaGlueS5vdXRwdXRCaW5kaW5nczsKCiAgLy8gV2UgY2FuJ3QgY291bnQgb24galF1ZXJ5IGJlaW5nIGF2YWlsYWJsZSwgc28gd2UgaW1wbGVtZW50IG91ciBvd24KICAvLyB2ZXJzaW9uIGlmIG5lY2Vzc2FyeS4KICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCBzZWxlY3RvcikgewogICAgaWYgKHR5cGVvZihqUXVlcnkpICE9PSAidW5kZWZpbmVkIiAmJiBzY29wZSBpbnN0YW5jZW9mIGpRdWVyeSkgewogICAgICByZXR1cm4gc2NvcGUuZmluZChzZWxlY3Rvcik7CiAgICB9CiAgICBpZiAoc2NvcGUucXVlcnlTZWxlY3RvckFsbCkgewogICAgICByZXR1cm4gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhc0FycmF5KHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT09IG51bGwpCiAgICAgIHJldHVybiBbXTsKICAgIGlmICgkLmlzQXJyYXkodmFsdWUpKQogICAgICByZXR1cm4gdmFsdWU7CiAgICByZXR1cm4gW3ZhbHVlXTsKICB9CgogIC8vIEltcGxlbWVudCBqUXVlcnkncyBleHRlbmQKICBmdW5jdGlvbiBleHRlbmQodGFyZ2V0IC8qLCAuLi4gKi8pIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07CiAgICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7CiAgICAgICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRhcmdldDsKICB9CgogIC8vIElFOCBkb2Vzbid0IHN1cHBvcnQgQXJyYXkuZm9yRWFjaC4KICBmdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgY2FsbGJhY2ssIHRoaXNBcmcpIHsKICAgIGlmICh2YWx1ZXMuZm9yRWFjaCkgewogICAgICB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjaywgdGhpc0FyZyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdmFsdWVzW2ldLCBpLCB2YWx1ZXMpOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBSZXBsYWNlcyB0aGUgc3BlY2lmaWVkIG1ldGhvZCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgZnVuY1NvdXJjZS4KICAvLwogIC8vIE5vdGUgdGhhdCBmdW5jU291cmNlIHNob3VsZCBub3QgQkUgdGhlIG5ldyBtZXRob2QsIGl0IHNob3VsZCBiZSBhIGZ1bmN0aW9uCiAgLy8gdGhhdCBSRVRVUk5TIHRoZSBuZXcgbWV0aG9kLiBmdW5jU291cmNlIHJlY2VpdmVzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgaXMKICAvLyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsIGl0IGNhbiBiZSBjYWxsZWQgZnJvbSB0aGUgbmV3IG1ldGhvZC4gVGhlIG92ZXJyaWRkZW4KICAvLyBtZXRob2QgY2FuIGJlIGNhbGxlZCBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiwgaXQgaGFzIHRoZSB0YXJnZXQgcGVybWFuZW50bHkKICAvLyBib3VuZCB0byBpdCBzbyAidGhpcyIgd2lsbCB3b3JrIGNvcnJlY3RseS4KICBmdW5jdGlvbiBvdmVycmlkZU1ldGhvZCh0YXJnZXQsIG1ldGhvZE5hbWUsIGZ1bmNTb3VyY2UpIHsKICAgIHZhciBzdXBlckZ1bmMgPSB0YXJnZXRbbWV0aG9kTmFtZV0gfHwgZnVuY3Rpb24oKSB7fTsKICAgIHZhciBzdXBlckZ1bmNCb3VuZCA9IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gc3VwZXJGdW5jLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH07CiAgICB0YXJnZXRbbWV0aG9kTmFtZV0gPSBmdW5jU291cmNlKHN1cGVyRnVuY0JvdW5kKTsKICB9CgogIC8vIEFkZCBhIG1ldGhvZCB0byBkZWxlZ2F0b3IgdGhhdCwgd2hlbiBpbnZva2VkLCBjYWxscwogIC8vIGRlbGVnYXRlZS5tZXRob2ROYW1lLiBJZiB0aGVyZSBpcyBubyBzdWNoIG1ldGhvZCBvbgogIC8vIHRoZSBkZWxlZ2F0ZWUsIGJ1dCB0aGVyZSB3YXMgb25lIG9uIGRlbGVnYXRvciBiZWZvcmUKICAvLyBkZWxlZ2F0ZU1ldGhvZCB3YXMgY2FsbGVkLCB0aGVuIHRoZSBvcmlnaW5hbCB2ZXJzaW9uCiAgLy8gaXMgaW52b2tlZCBpbnN0ZWFkLgogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gdmFyIGEgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2ExJyk7IH0KICAvLyAgIG1ldGhvZDI6IGZ1bmN0aW9uKCkgeyBjb25zb2xlLmxvZygnYTInKTsgfQogIC8vIH07CiAgLy8gdmFyIGIgPSB7CiAgLy8gICBtZXRob2QxOiBmdW5jdGlvbigpIHsgY29uc29sZS5sb2coJ2IxJyk7IH0KICAvLyB9OwogIC8vIGRlbGVnYXRlTWV0aG9kKGEsIGIsICJtZXRob2QxIik7CiAgLy8gZGVsZWdhdGVNZXRob2QoYSwgYiwgIm1ldGhvZDIiKTsKICAvLyBhLm1ldGhvZDEoKTsKICAvLyBhLm1ldGhvZDIoKTsKICAvLwogIC8vIFRoZSBvdXRwdXQgd291bGQgYmUgImIxIiwgImEyIi4KICBmdW5jdGlvbiBkZWxlZ2F0ZU1ldGhvZChkZWxlZ2F0b3IsIGRlbGVnYXRlZSwgbWV0aG9kTmFtZSkgewogICAgdmFyIGluaGVyaXRlZCA9IGRlbGVnYXRvclttZXRob2ROYW1lXTsKICAgIGRlbGVnYXRvclttZXRob2ROYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgdGFyZ2V0ID0gZGVsZWdhdGVlOwogICAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGVlW21ldGhvZE5hbWVdOwoKICAgICAgLy8gVGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0IG9uIHRoZSBkZWxlZ2F0ZWUuIEluc3RlYWQsCiAgICAgIC8vIGNhbGwgdGhlIG1ldGhvZCBvbiB0aGUgZGVsZWdhdG9yLCBpZiBpdCBleGlzdHMuCiAgICAgIGlmICghbWV0aG9kKSB7CiAgICAgICAgdGFyZ2V0ID0gZGVsZWdhdG9yOwogICAgICAgIG1ldGhvZCA9IGluaGVyaXRlZDsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QuYXBwbHkodGFyZ2V0LCBhcmd1bWVudHMpOwogICAgICB9CiAgICB9OwogIH0KCiAgLy8gSW1wbGVtZW50IGEgdmFndWUgZmFjc2ltaWxpZSBvZiBqUXVlcnkncyBkYXRhIG1ldGhvZAogIGZ1bmN0aW9uIGVsZW1lbnREYXRhKGVsLCBuYW1lLCB2YWx1ZSkgewogICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gZWxbImh0bWx3aWRnZXRfZGF0YV8iICsgbmFtZV07CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykgewogICAgICBlbFsiaHRtbHdpZGdldF9kYXRhXyIgKyBuYW1lXSA9IHZhbHVlOwogICAgICByZXR1cm4gZWw7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGVsZW1lbnREYXRhOiAiICsKICAgICAgICBhcmd1bWVudHMubGVuZ3RoKTsKICAgIH0KICB9CgogIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzQ0NjE3MC9lc2NhcGUtc3RyaW5nLWZvci11c2UtaW4tamF2YXNjcmlwdC1yZWdleAogIGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvW1wtXFtcXVwvXHtcfVwoXClcKlwrXD9cLlxcXF5cJFx8XS9nLCAiXFwkJiIpOwogIH0KCiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNsYXNzTmFtZSkgewogICAgdmFyIHJlID0gbmV3IFJlZ0V4cCgiXFxiIiArIGVzY2FwZVJlZ0V4cChjbGFzc05hbWUpICsgIlxcYiIpOwogICAgcmV0dXJuIHJlLnRlc3QoZWwuY2xhc3NOYW1lKTsKICB9CgogIC8vIGVsZW1lbnRzIC0gYXJyYXkgKG9yIGFycmF5LWxpa2Ugb2JqZWN0KSBvZiBIVE1MIGVsZW1lbnRzCiAgLy8gY2xhc3NOYW1lIC0gY2xhc3MgbmFtZSB0byB0ZXN0IGZvcgogIC8vIGluY2x1ZGUgLSBpZiB0cnVlLCBvbmx5IHJldHVybiBlbGVtZW50cyB3aXRoIGdpdmVuIGNsYXNzTmFtZTsKICAvLyAgIGlmIGZhbHNlLCBvbmx5IHJldHVybiBlbGVtZW50cyAqd2l0aG91dCogZ2l2ZW4gY2xhc3NOYW1lCiAgZnVuY3Rpb24gZmlsdGVyQnlDbGFzcyhlbGVtZW50cywgY2xhc3NOYW1lLCBpbmNsdWRlKSB7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaGFzQ2xhc3MoZWxlbWVudHNbaV0sIGNsYXNzTmFtZSkgPT0gaW5jbHVkZSkKICAgICAgICByZXN1bHRzLnB1c2goZWxlbWVudHNbaV0pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdHM7CiAgfQoKICBmdW5jdGlvbiBvbihvYmosIGV2ZW50TmFtZSwgZnVuYykgewogICAgaWYgKG9iai5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuYywgZmFsc2UpOwogICAgfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpIHsKICAgICAgb2JqLmF0dGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBvZmYob2JqLCBldmVudE5hbWUsIGZ1bmMpIHsKICAgIGlmIChvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcikKICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBmdW5jLCBmYWxzZSk7CiAgICBlbHNlIGlmIChvYmouZGV0YWNoRXZlbnQpIHsKICAgICAgb2JqLmRldGFjaEV2ZW50KGV2ZW50TmFtZSwgZnVuYyk7CiAgICB9CiAgfQoKICAvLyBUcmFuc2xhdGUgYXJyYXkgb2YgdmFsdWVzIHRvIHRvcC9yaWdodC9ib3R0b20vbGVmdCwgYXMgdXN1YWwgd2l0aAogIC8vIHRoZSAicGFkZGluZyIgQ1NTIHByb3BlcnR5CiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL3BhZGRpbmcKICBmdW5jdGlvbiB1bnBhY2tQYWRkaW5nKHZhbHVlKSB7CiAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gIm51bWJlciIpCiAgICAgIHZhbHVlID0gW3ZhbHVlXTsKICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDEpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMF0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzBdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDIpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMF0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDMpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzFdfTsKICAgIH0KICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDQpIHsKICAgICAgcmV0dXJuIHt0b3A6IHZhbHVlWzBdLCByaWdodDogdmFsdWVbMV0sIGJvdHRvbTogdmFsdWVbMl0sIGxlZnQ6IHZhbHVlWzNdfTsKICAgIH0KICB9CgogIC8vIENvbnZlcnQgYW4gdW5wYWNrZWQgcGFkZGluZyBvYmplY3QgdG8gYSBDU1MgdmFsdWUKICBmdW5jdGlvbiBwYWRkaW5nVG9Dc3MocGFkZGluZ09iaikgewogICAgcmV0dXJuIHBhZGRpbmdPYmoudG9wICsgInB4ICIgKyBwYWRkaW5nT2JqLnJpZ2h0ICsgInB4ICIgKyBwYWRkaW5nT2JqLmJvdHRvbSArICJweCAiICsgcGFkZGluZ09iai5sZWZ0ICsgInB4IjsKICB9CgogIC8vIE1ha2VzIGEgbnVtYmVyIHN1aXRhYmxlIGZvciBDU1MKICBmdW5jdGlvbiBweCh4KSB7CiAgICBpZiAodHlwZW9mKHgpID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuIHggKyAicHgiOwogICAgZWxzZQogICAgICByZXR1cm4geDsKICB9CgogIC8vIFJldHJpZXZlcyBydW50aW1lIHdpZGdldCBzaXppbmcgaW5mb3JtYXRpb24gZm9yIGFuIGVsZW1lbnQuCiAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBlaXRoZXIgbnVsbCwgb3IgYW4gb2JqZWN0IHdpdGggZmlsbCwgcGFkZGluZywKICAvLyBkZWZhdWx0V2lkdGgsIGRlZmF1bHRIZWlnaHQgZmllbGRzLgogIGZ1bmN0aW9uIHNpemluZ1BvbGljeShlbCkgewogICAgdmFyIHNpemluZ0VsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vaHRtbHdpZGdldC1zaXppbmcnXSIpOwogICAgaWYgKCFzaXppbmdFbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICB2YXIgc3AgPSBKU09OLnBhcnNlKHNpemluZ0VsLnRleHRDb250ZW50IHx8IHNpemluZ0VsLnRleHQgfHwgInt9Iik7CiAgICBpZiAodmlld2VyTW9kZSkgewogICAgICByZXR1cm4gc3Audmlld2VyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHNwLmJyb3dzZXI7CiAgICB9CiAgfQoKICAvLyBAcGFyYW0gdGFza3MgQXJyYXkgb2Ygc3RyaW5ncyAob3IgZmFsc3kgdmFsdWUsIGluIHdoaWNoIGNhc2Ugbm8tb3ApLgogIC8vICAgRWFjaCBlbGVtZW50IG11c3QgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCB5aWVsZHMgYQogIC8vICAgZnVuY3Rpb24uIE9yLCBjYW4gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoICJjb2RlIiBhbmQgImRhdGEiCiAgLy8gICBwcm9wZXJ0aWVzOyBpbiB0aGlzIGNhc2UsIHRoZSAiY29kZSIgcHJvcGVydHkgc2hvdWxkIGJlIGEgc3RyaW5nCiAgLy8gICBvZiBKUyB0aGF0J3MgYW4gZXhwciB0aGF0IHlpZWxkcyBhIGZ1bmN0aW9uLCBhbmQgImRhdGEiIHNob3VsZCBiZQogIC8vICAgYW4gb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZCBhcyBhbiBhZGRpdGlvbmFsIGFyZ3VtZW50IHdoZW4gdGhhdAogIC8vICAgZnVuY3Rpb24gaXMgY2FsbGVkLgogIC8vIEBwYXJhbSB0YXJnZXQgVGhlIG9iamVjdCB0aGF0IHdpbGwgYmUgInRoaXMiIGZvciBlYWNoIGZ1bmN0aW9uCiAgLy8gICBleGVjdXRpb24uCiAgLy8gQHBhcmFtIGFyZ3MgQXJyYXkgb2YgYXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAoVGhlCiAgLy8gICBzYW1lIGFyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byBhbGwgZnVuY3Rpb25zLikKICBmdW5jdGlvbiBldmFsQW5kUnVuKHRhc2tzLCB0YXJnZXQsIGFyZ3MpIHsKICAgIGlmICh0YXNrcykgewogICAgICBmb3JFYWNoKHRhc2tzLCBmdW5jdGlvbih0YXNrKSB7CiAgICAgICAgdmFyIHRoZXNlQXJncyA9IGFyZ3M7CiAgICAgICAgaWYgKHR5cGVvZih0YXNrKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIHRoZXNlQXJncyA9IHRoZXNlQXJncy5jb25jYXQoW3Rhc2suZGF0YV0pOwogICAgICAgICAgdGFzayA9IHRhc2suY29kZTsKICAgICAgICB9CiAgICAgICAgdmFyIHRhc2tGdW5jID0gdHJ5RXZhbCh0YXNrKTsKICAgICAgICBpZiAodHlwZW9mKHRhc2tGdW5jKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUYXNrIG11c3QgYmUgYSBmdW5jdGlvbiEgU291cmNlOlxuIiArIHRhc2spOwogICAgICAgIH0KICAgICAgICB0YXNrRnVuYy5hcHBseSh0YXJnZXQsIHRoZXNlQXJncyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gQXR0ZW1wdCBldmFsKCkgYm90aCB3aXRoIGFuZCB3aXRob3V0IGVuY2xvc2luZyBpbiBwYXJlbnRoZXNlcy4KICAvLyBOb3RlIHRoYXQgZW5jbG9zaW5nIGNvZXJjZXMgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbnRvCiAgLy8gYW4gZXhwcmVzc2lvbiB0aGF0IGV2YWwoKSBjYW4gcGFyc2UKICAvLyAob3RoZXJ3aXNlLCBhIFN5bnRheEVycm9yIGlzIHRocm93bikKICBmdW5jdGlvbiB0cnlFdmFsKGNvZGUpIHsKICAgIHZhciByZXN1bHQgPSBudWxsOwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gZXZhbCgiKCIgKyBjb2RlICsgIikiKTsKICAgIH0gY2F0Y2goZXJyb3IpIHsKICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikpIHsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHJlc3VsdCA9IGV2YWwoY29kZSk7CiAgICAgIH0gY2F0Y2goZSkgewogICAgICAgIGlmIChlIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHsKICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvdyBlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZ1bmN0aW9uIGluaXRTaXppbmcoZWwpIHsKICAgIHZhciBzaXppbmcgPSBzaXppbmdQb2xpY3koZWwpOwogICAgaWYgKCFzaXppbmcpCiAgICAgIHJldHVybjsKCiAgICB2YXIgY2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImh0bWx3aWRnZXRfY29udGFpbmVyIik7CiAgICBpZiAoIWNlbCkKICAgICAgcmV0dXJuOwoKICAgIGlmICh0eXBlb2Yoc2l6aW5nLnBhZGRpbmcpICE9PSAidW5kZWZpbmVkIikgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpbiA9ICIwIjsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ1RvQ3NzKHVucGFja1BhZGRpbmcoc2l6aW5nLnBhZGRpbmcpKTsKICAgIH0KCiAgICBpZiAoc2l6aW5nLmZpbGwpIHsKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICJoaWRkZW4iOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gIjEwMCUiOwogICAgICBpZiAoY2VsKSB7CiAgICAgICAgY2VsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgICB2YXIgcGFkID0gdW5wYWNrUGFkZGluZyhzaXppbmcucGFkZGluZyk7CiAgICAgICAgY2VsLnN0eWxlLnRvcCA9IHBhZC50b3AgKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5yaWdodCA9IHBhZC5yaWdodCArICJweCI7CiAgICAgICAgY2VsLnN0eWxlLmJvdHRvbSA9IHBhZC5ib3R0b20gKyAicHgiOwogICAgICAgIGNlbC5zdHlsZS5sZWZ0ID0gcGFkLmxlZnQgKyAicHgiOwogICAgICAgIGVsLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgICAgIGVsLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgICAgfQoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBjZWwub2Zmc2V0V2lkdGg7IH0sCiAgICAgICAgZ2V0SGVpZ2h0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGNlbC5vZmZzZXRIZWlnaHQ7IH0KICAgICAgfTsKCiAgICB9IGVsc2UgewogICAgICBlbC5zdHlsZS53aWR0aCA9IHB4KHNpemluZy53aWR0aCk7CiAgICAgIGVsLnN0eWxlLmhlaWdodCA9IHB4KHNpemluZy5oZWlnaHQpOwoKICAgICAgcmV0dXJuIHsKICAgICAgICBnZXRXaWR0aDogZnVuY3Rpb24oKSB7IHJldHVybiBlbC5vZmZzZXRXaWR0aDsgfSwKICAgICAgICBnZXRIZWlnaHQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZWwub2Zmc2V0SGVpZ2h0OyB9CiAgICAgIH07CiAgICB9CiAgfQoKICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9ucyBmb3IgbWV0aG9kcwogIHZhciBkZWZhdWx0cyA9IHsKICAgIGZpbmQ6IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsKHNjb3BlLCAiLiIgKyB0aGlzLm5hbWUpOwogICAgfSwKICAgIHJlbmRlckVycm9yOiBmdW5jdGlvbihlbCwgZXJyKSB7CiAgICAgIHZhciAkZWwgPSAkKGVsKTsKCiAgICAgIHRoaXMuY2xlYXJFcnJvcihlbCk7CgogICAgICAvLyBBZGQgYWxsIHRoZXNlIGVycm9yIGNsYXNzZXMsIGFzIFNoaW55IGRvZXMKICAgICAgdmFyIGVyckNsYXNzID0gInNoaW55LW91dHB1dC1lcnJvciI7CiAgICAgIGlmIChlcnIudHlwZSAhPT0gbnVsbCkgewogICAgICAgIC8vIHVzZSB0aGUgY2xhc3NlcyBvZiB0aGUgZXJyb3IgY29uZGl0aW9uIGFzIENTUyBjbGFzcyBuYW1lcwogICAgICAgIGVyckNsYXNzID0gZXJyQ2xhc3MgKyAiICIgKyAkLm1hcChhc0FycmF5KGVyci50eXBlKSwgZnVuY3Rpb24odHlwZSkgewogICAgICAgICAgcmV0dXJuIGVyckNsYXNzICsgIi0iICsgdHlwZTsKICAgICAgICB9KS5qb2luKCIgIik7CiAgICAgIH0KICAgICAgZXJyQ2xhc3MgPSBlcnJDbGFzcyArICIgaHRtbHdpZGdldHMtZXJyb3IiOwoKICAgICAgLy8gSXMgZWwgaW5saW5lIG9yIGJsb2NrPyBJZiBpbmxpbmUgb3IgaW5saW5lLWJsb2NrLCBqdXN0IGRpc3BsYXk6bm9uZSBpdAogICAgICAvLyBhbmQgYWRkIGFuIGlubGluZSBlcnJvci4KICAgICAgdmFyIGRpc3BsYXkgPSAkZWwuY3NzKCJkaXNwbGF5Iik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIGRpc3BsYXkpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgJGVsLmhpZGUoKTsKICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICIiKSB7CiAgICAgICAgICB2YXIgZXJyb3JTcGFuID0gJCgiPHNwYW4+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpOwogICAgICAgICAgZXJyb3JTcGFuLnRleHQoZXJyLm1lc3NhZ2UpOwogICAgICAgICAgJGVsLmFmdGVyKGVycm9yU3Bhbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRpc3BsYXkgPT09ICJibG9jayIpIHsKICAgICAgICAvLyBJZiBibG9jaywgYWRkIGFuIGVycm9yIGp1c3QgYWZ0ZXIgdGhlIGVsLCBzZXQgdmlzaWJpbGl0eTpub25lIG9uIHRoZQogICAgICAgIC8vIGVsLCBhbmQgcG9zaXRpb24gdGhlIGVycm9yIHRvIGJlIG9uIHRvcCBvZiB0aGUgZWwuCiAgICAgICAgLy8gTWFyayBpdCB3aXRoIGEgdW5pcXVlIElEIGFuZCBDU1MgY2xhc3Mgc28gd2UgY2FuIHJlbW92ZSBpdCBsYXRlci4KICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImhpZGRlbiIpOwogICAgICAgIGlmIChlcnIubWVzc2FnZSAhPT0gIiIpIHsKICAgICAgICAgIHZhciBlcnJvckRpdiA9ICQoIjxkaXY+IikuYWRkQ2xhc3MoZXJyQ2xhc3MpLmNzcygicG9zaXRpb24iLCAiYWJzb2x1dGUiKQogICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgIC5jc3MoImxlZnQiLCBlbC5vZmZzZXRMZWZ0KQogICAgICAgICAgICAvLyBzZXR0aW5nIHdpZHRoIGNhbiBwdXNoIG91dCB0aGUgcGFnZSBzaXplLCBmb3JjaW5nIG90aGVyd2lzZQogICAgICAgICAgICAvLyB1bm5lY2Vzc2FyeSBzY3JvbGxiYXJzIHRvIGFwcGVhciBhbmQgbWFraW5nIGl0IGltcG9zc2libGUgZm9yCiAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50IHRvIHNocmluazsgc28gdXNlIG1heC13aWR0aCBpbnN0ZWFkCiAgICAgICAgICAgIC5jc3MoIm1heFdpZHRoIiwgZWwub2Zmc2V0V2lkdGgpCiAgICAgICAgICAgIC5jc3MoImhlaWdodCIsIGVsLm9mZnNldEhlaWdodCk7CiAgICAgICAgICBlcnJvckRpdi50ZXh0KGVyci5tZXNzYWdlKTsKICAgICAgICAgICRlbC5hZnRlcihlcnJvckRpdik7CgogICAgICAgICAgLy8gUmVhbGx5IGR1bWIgd2F5IHRvIGtlZXAgdGhlIHNpemUvcG9zaXRpb24gb2YgdGhlIGVycm9yIGluIHN5bmMgd2l0aAogICAgICAgICAgLy8gdGhlIHBhcmVudCBlbGVtZW50IGFzIHRoZSB3aW5kb3cgaXMgcmVzaXplZCBvciB3aGF0ZXZlci4KICAgICAgICAgIHZhciBpbnRJZCA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAoIWVycm9yRGl2WzBdLnBhcmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludElkKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZXJyb3JEaXYKICAgICAgICAgICAgICAuY3NzKCJ0b3AiLCBlbC5vZmZzZXRUb3ApCiAgICAgICAgICAgICAgLmNzcygibGVmdCIsIGVsLm9mZnNldExlZnQpCiAgICAgICAgICAgICAgLmNzcygibWF4V2lkdGgiLCBlbC5vZmZzZXRXaWR0aCkKICAgICAgICAgICAgICAuY3NzKCJoZWlnaHQiLCBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgfSwgNTAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjbGVhckVycm9yOiBmdW5jdGlvbihlbCkgewogICAgICB2YXIgJGVsID0gJChlbCk7CiAgICAgIHZhciBkaXNwbGF5ID0gJGVsLmRhdGEoInJlc3RvcmUtZGlzcGxheS1tb2RlIik7CiAgICAgICRlbC5kYXRhKCJyZXN0b3JlLWRpc3BsYXktbW9kZSIsIG51bGwpOwoKICAgICAgaWYgKGRpc3BsYXkgPT09ICJpbmxpbmUiIHx8IGRpc3BsYXkgPT09ICJpbmxpbmUtYmxvY2siKSB7CiAgICAgICAgaWYgKGRpc3BsYXkpCiAgICAgICAgICAkZWwuY3NzKCJkaXNwbGF5IiwgZGlzcGxheSk7CiAgICAgICAgJChlbC5uZXh0U2libGluZykuZmlsdGVyKCIuaHRtbHdpZGdldHMtZXJyb3IiKS5yZW1vdmUoKTsKICAgICAgfSBlbHNlIGlmIChkaXNwbGF5ID09PSAiYmxvY2siKXsKICAgICAgICAkZWwuY3NzKCJ2aXNpYmlsaXR5IiwgImluaGVyaXQiKTsKICAgICAgICAkKGVsLm5leHRTaWJsaW5nKS5maWx0ZXIoIi5odG1sd2lkZ2V0cy1lcnJvciIpLnJlbW92ZSgpOwogICAgICB9CiAgICB9LAogICAgc2l6aW5nOiB7fQogIH07CgogIC8vIENhbGxlZCBieSB3aWRnZXQgYmluZGluZ3MgdG8gcmVnaXN0ZXIgYSBuZXcgdHlwZSBvZiB3aWRnZXQuIFRoZSBkZWZpbml0aW9uCiAgLy8gb2JqZWN0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAvLyAtIG5hbWUgKHJlcXVpcmVkKSAtIEEgc3RyaW5nIGluZGljYXRpbmcgdGhlIGJpbmRpbmcgbmFtZSwgd2hpY2ggd2lsbCBiZQogIC8vICAgdXNlZCBieSBkZWZhdWx0IGFzIHRoZSBDU1MgY2xhc3NuYW1lIHRvIGxvb2sgZm9yLgogIC8vIC0gaW5pdGlhbGl6ZSAob3B0aW9uYWwpIC0gQSBmdW5jdGlvbihlbCkgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIHBlcgogIC8vICAgd2lkZ2V0IGVsZW1lbnQ7IGlmIGEgdmFsdWUgaXMgcmV0dXJuZWQsIGl0IHdpbGwgYmUgcGFzc2VkIGFzIHRoZSB0aGlyZAogIC8vICAgdmFsdWUgdG8gcmVuZGVyVmFsdWUuCiAgLy8gLSByZW5kZXJWYWx1ZSAocmVxdWlyZWQpIC0gQSBmdW5jdGlvbihlbCwgZGF0YSwgaW5pdFZhbHVlKSB0aGF0IHdpbGwgYmUKICAvLyAgIGNhbGxlZCB3aXRoIGRhdGEuIFN0YXRpYyBjb250ZXh0cyB3aWxsIGNhdXNlIHRoaXMgdG8gYmUgY2FsbGVkIG9uY2UgcGVyCiAgLy8gICBlbGVtZW50OyBTaGlueSBhcHBzIHdpbGwgY2F1c2UgdGhpcyB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyCiAgLy8gICBlbGVtZW50LCBhcyB0aGUgZGF0YSBjaGFuZ2VzLgogIHdpbmRvdy5IVE1MV2lkZ2V0cy53aWRnZXQgPSBmdW5jdGlvbihkZWZpbml0aW9uKSB7CiAgICBpZiAoIWRlZmluaXRpb24ubmFtZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSBuYW1lIik7CiAgICB9CiAgICBpZiAoIWRlZmluaXRpb24udHlwZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSB0eXBlIik7CiAgICB9CiAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IG91dHB1dCB3aWRnZXRzCiAgICBpZiAoZGVmaW5pdGlvbi50eXBlICE9PSAib3V0cHV0IikgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB3aWRnZXQgdHlwZSAnIiArIGRlZmluaXRpb24udHlwZSArICInIik7CiAgICB9CiAgICAvLyBUT0RPOiBWZXJpZnkgdGhhdCAubmFtZSBpcyBhIHZhbGlkIENTUyBjbGFzc25hbWUKCiAgICAvLyBTdXBwb3J0IG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9ucy4gT2xkLXN0eWxlIGNsYXNzLWJvdW5kCiAgICAvLyBkZWZpbml0aW9ucyBoYXZlIG9uZSB3aWRnZXQgIm9iamVjdCIgcGVyIHdpZGdldCBwZXIgdHlwZS9jbGFzcyBvZgogICAgLy8gd2lkZ2V0OyB0aGUgcmVuZGVyVmFsdWUgYW5kIHJlc2l6ZSBtZXRob2RzIG9uIHN1Y2ggd2lkZ2V0IG9iamVjdHMKICAgIC8vIHRha2UgZWwgYW5kIGluc3RhbmNlIGFyZ3VtZW50cywgYmVjYXVzZSB0aGUgd2lkZ2V0IG9iamVjdCBjYW4ndAogICAgLy8gc3RvcmUgdGhlbS4gTmV3LXN0eWxlIGluc3RhbmNlLWJvdW5kIGRlZmluaXRpb25zIGhhdmUgb25lIHdpZGdldAogICAgLy8gb2JqZWN0IHBlciB3aWRnZXQgaW5zdGFuY2U7IHRoZSBkZWZpbml0aW9uIHRoYXQncyBwYXNzZWQgaW4gZG9lc24ndAogICAgLy8gcHJvdmlkZSByZW5kZXJWYWx1ZSBvciByZXNpemUgbWV0aG9kcyBhdCBhbGwsIGp1c3QgdGhlIHNpbmdsZSBtZXRob2QKICAgIC8vICAgZmFjdG9yeShlbCwgd2lkdGgsIGhlaWdodCkKICAgIC8vIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IHRoYXQgaGFzIHJlbmRlclZhbHVlKHgpIGFuZCByZXNpemUodywgaCkuCiAgICAvLyBUaGlzIGVuYWJsZXMgYSBmYXIgbW9yZSBuYXR1cmFsIHByb2dyYW1taW5nIHN0eWxlIGZvciB0aGUgd2lkZ2V0CiAgICAvLyBhdXRob3IsIHdobyBjYW4gc3RvcmUgcGVyLWluc3RhbmNlIHN0YXRlIHVzaW5nIGVpdGhlciBPTy1zdHlsZQogICAgLy8gaW5zdGFuY2UgZmllbGRzIG9yIGZ1bmN0aW9uYWwtc3R5bGUgY2xvc3VyZSB2YXJpYWJsZXMgKEkgZ3Vlc3MgdGhpcwogICAgLy8gaXMgaW4gY29udHJhc3QgdG8gd2hhdCBjYW4gb25seSBiZSBjYWxsZWQgQy1zdHlsZSBwc2V1ZG8tT08gd2hpY2ggaXMKICAgIC8vIHdoYXQgd2UgcmVxdWlyZWQgYmVmb3JlKS4KICAgIGlmIChkZWZpbml0aW9uLmZhY3RvcnkpIHsKICAgICAgZGVmaW5pdGlvbiA9IGNyZWF0ZUxlZ2FjeURlZmluaXRpb25BZGFwdGVyKGRlZmluaXRpb24pOwogICAgfQoKICAgIGlmICghZGVmaW5pdGlvbi5yZW5kZXJWYWx1ZSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIldpZGdldCBtdXN0IGhhdmUgYSByZW5kZXJWYWx1ZSBmdW5jdGlvbiIpOwogICAgfQoKICAgIC8vIEZvciBzdGF0aWMgcmVuZGVyaW5nIChub24tU2hpbnkpLCB1c2UgYSBzaW1wbGUgd2lkZ2V0IHJlZ2lzdHJhdGlvbgogICAgLy8gc2NoZW1lLiBXZSBhbHNvIHVzZSB0aGlzIHNjaGVtZSBmb3IgU2hpbnkgYXBwcy9kb2N1bWVudHMgdGhhdCBhbHNvCiAgICAvLyBjb250YWluIHN0YXRpYyB3aWRnZXRzLgogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIC8vIE1lcmdlIGRlZmF1bHRzIGludG8gdGhlIGRlZmluaXRpb247IGRvbid0IG11dGF0ZSB0aGUgb3JpZ2luYWwgZGVmaW5pdGlvbi4KICAgIHZhciBzdGF0aWNCaW5kaW5nID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CiAgICBvdmVycmlkZU1ldGhvZChzdGF0aWNCaW5kaW5nLCAiZmluZCIsIGZ1bmN0aW9uKHN1cGVyZnVuYykgewogICAgICByZXR1cm4gZnVuY3Rpb24oc2NvcGUpIHsKICAgICAgICB2YXIgcmVzdWx0cyA9IHN1cGVyZnVuYyhzY29wZSk7CiAgICAgICAgLy8gRmlsdGVyIG91dCBTaGlueSBvdXRwdXRzLCB3ZSBvbmx5IHdhbnQgdGhlIHN0YXRpYyBraW5kCiAgICAgICAgcmV0dXJuIGZpbHRlckJ5Q2xhc3MocmVzdWx0cywgImh0bWwtd2lkZ2V0LW91dHB1dCIsIGZhbHNlKTsKICAgICAgfTsKICAgIH0pOwogICAgd2luZG93LkhUTUxXaWRnZXRzLndpZGdldHMucHVzaChzdGF0aWNCaW5kaW5nKTsKCiAgICBpZiAoc2hpbnlNb2RlKSB7CiAgICAgIC8vIFNoaW55IGlzIHJ1bm5pbmcuIFJlZ2lzdGVyIHRoZSBkZWZpbml0aW9uIHdpdGggYW4gb3V0cHV0IGJpbmRpbmcuCiAgICAgIC8vIFRoZSBkZWZpbml0aW9uIGl0c2VsZiB3aWxsIG5vdCBiZSB0aGUgb3V0cHV0IGJpbmRpbmcsIGluc3RlYWQKICAgICAgLy8gd2Ugd2lsbCBtYWtlIGFuIG91dHB1dCBiaW5kaW5nIG9iamVjdCB0aGF0IGRlbGVnYXRlcyB0byB0aGUKICAgICAgLy8gZGVmaW5pdGlvbi4gVGhpcyBpcyBiZWNhdXNlIHdlIGZvb2xpc2hseSB1c2VkIHRoZSBzYW1lIG1ldGhvZAogICAgICAvLyBuYW1lIChyZW5kZXJWYWx1ZSkgZm9yIGh0bWx3aWRnZXRzIGRlZmluaXRpb24gYW5kIFNoaW55IGJpbmRpbmdzCiAgICAgIC8vIGJ1dCB0aGV5IGFjdHVhbGx5IGhhdmUgcXVpdGUgZGlmZmVyZW50IHNlbWFudGljcyAodGhlIFNoaW55CiAgICAgIC8vIGJpbmRpbmdzIHJlY2VpdmUgZGF0YSB0aGF0IGluY2x1ZGVzIGxvdHMgb2YgbWV0YWRhdGEgdGhhdCBpdAogICAgICAvLyBzdHJpcHMgb2ZmIGJlZm9yZSBjYWxsaW5nIGh0bWx3aWRnZXRzIHJlbmRlclZhbHVlKS4gV2UgY2FuJ3QKICAgICAgLy8ganVzdCBpZ25vcmUgdGhlIGRpZmZlcmVuY2UgYmVjYXVzZSBpbiBzb21lIHdpZGdldHMgaXQncyBoZWxwZnVsCiAgICAgIC8vIHRvIGNhbGwgdGhpcy5yZW5kZXJWYWx1ZSgpIGZyb20gaW5zaWRlIG9mIHJlc2l6ZSgpLCBhbmQgaWYKICAgICAgLy8gd2UncmUgbm90IGRlbGVnYXRpbmcsIHRoZW4gdGhhdCBjYWxsIHdpbGwgZ28gdG8gdGhlIFNoaW55CiAgICAgIC8vIHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgaHRtbHdpZGdldHMgdmVyc2lvbi4KCiAgICAgIC8vIE1lcmdlIGRlZmF1bHRzIHdpdGggZGVmaW5pdGlvbiwgd2l0aG91dCBtdXRhdGluZyBlaXRoZXIuCiAgICAgIHZhciBiaW5kaW5nRGVmID0gZXh0ZW5kKHt9LCBkZWZhdWx0cywgZGVmaW5pdGlvbik7CgogICAgICAvLyBUaGlzIG9iamVjdCB3aWxsIGJlIG91ciBhY3R1YWwgU2hpbnkgYmluZGluZy4KICAgICAgdmFyIHNoaW55QmluZGluZyA9IG5ldyBTaGlueS5PdXRwdXRCaW5kaW5nKCk7CgogICAgICAvLyBXaXRoIGEgZmV3IGV4Y2VwdGlvbnMsIHdlJ2xsIHdhbnQgdG8gc2ltcGx5IHVzZSB0aGUgYmluZGluZ0RlZidzCiAgICAgIC8vIHZlcnNpb24gb2YgbWV0aG9kcyBpZiB0aGV5IGFyZSBhdmFpbGFibGUsIG90aGVyd2lzZSBmYWxsIGJhY2sgdG8KICAgICAgLy8gU2hpbnkncyBkZWZhdWx0cy4gTk9URTogSWYgU2hpbnkncyBvdXRwdXQgYmluZGluZ3MgZ2FpbiBhZGRpdGlvbmFsCiAgICAgIC8vIG1ldGhvZHMgaW4gdGhlIGZ1dHVyZSwgYW5kIHdlIHdhbnQgdGhlbSB0byBiZSBvdmVycmlkZWFibGUgYnkKICAgICAgLy8gSFRNTFdpZGdldCBiaW5kaW5nIGRlZmluaXRpb25zLCB0aGVuIHdlJ2xsIG5lZWQgdG8gYWRkIHRoZW0gdG8gdGhpcwogICAgICAvLyBsaXN0LgogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJnZXRJZCIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJvblZhbHVlQ2hhbmdlIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgIm9uVmFsdWVFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJyZW5kZXJFcnJvciIpOwogICAgICBkZWxlZ2F0ZU1ldGhvZChzaGlueUJpbmRpbmcsIGJpbmRpbmdEZWYsICJjbGVhckVycm9yIik7CiAgICAgIGRlbGVnYXRlTWV0aG9kKHNoaW55QmluZGluZywgYmluZGluZ0RlZiwgInNob3dQcm9ncmVzcyIpOwoKICAgICAgLy8gVGhlIGZpbmQsIHJlbmRlclZhbHVlLCBhbmQgcmVzaXplIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5LCBiZWNhdXNlIHdlCiAgICAgIC8vIHdhbnQgdG8gYWN0dWFsbHkgZGVjb3JhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5kaW5nRGVmIG1ldGhvZHMuCgogICAgICBzaGlueUJpbmRpbmcuZmluZCA9IGZ1bmN0aW9uKHNjb3BlKSB7CiAgICAgICAgdmFyIHJlc3VsdHMgPSBiaW5kaW5nRGVmLmZpbmQoc2NvcGUpOwoKICAgICAgICAvLyBPbmx5IHJldHVybiBlbGVtZW50cyB0aGF0IGFyZSBTaGlueSBvdXRwdXRzLCBub3Qgc3RhdGljIG9uZXMKICAgICAgICB2YXIgZHluYW1pY1Jlc3VsdHMgPSByZXN1bHRzLmZpbHRlcigiLmh0bWwtd2lkZ2V0LW91dHB1dCIpOwoKICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgd2hhdGV2ZXIgY2F1c2VkIFNoaW55IHRvIHRoaW5rIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgLy8gbmV3IGR5bmFtaWMgb3V0cHV0cywgYWxzbyBjYXVzZWQgdGhlcmUgdG8gYmUgbmV3IHN0YXRpYyBvdXRwdXRzLgogICAgICAgIC8vIFNpbmNlIHRoZXJlIG1pZ2h0IGJlIGxvdHMgb2YgZGlmZmVyZW50IGh0bWx3aWRnZXRzIGJpbmRpbmdzLCB3ZQogICAgICAgIC8vIHNjaGVkdWxlIGV4ZWN1dGlvbiBmb3IgbGF0ZXItLW5vIG5lZWQgdG8gc3RhdGljUmVuZGVyIG11bHRpcGxlCiAgICAgICAgLy8gdGltZXMuCiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoICE9PSBkeW5hbWljUmVzdWx0cy5sZW5ndGgpCiAgICAgICAgICBzY2hlZHVsZVN0YXRpY1JlbmRlcigpOwoKICAgICAgICByZXR1cm4gZHluYW1pY1Jlc3VsdHM7CiAgICAgIH07CgogICAgICAvLyBXcmFwIHJlbmRlclZhbHVlIHRvIGhhbmRsZSBpbml0aWFsaXphdGlvbiwgd2hpY2ggdW5mb3J0dW5hdGVseSBpc24ndAogICAgICAvLyBzdXBwb3J0ZWQgbmF0aXZlbHkgYnkgU2hpbnkgYXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLgoKICAgICAgc2hpbnlCaW5kaW5nLnJlbmRlclZhbHVlID0gZnVuY3Rpb24oZWwsIGRhdGEpIHsKICAgICAgICBTaGlueS5yZW5kZXJEZXBlbmRlbmNpZXMoZGF0YS5kZXBzKTsKICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgIGlmICghKGRhdGEuZXZhbHMgaW5zdGFuY2VvZiBBcnJheSkpIGRhdGEuZXZhbHMgPSBbZGF0YS5ldmFsc107CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGRhdGEuZXZhbHMgJiYgaSA8IGRhdGEuZXZhbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNbaV0pOwogICAgICAgIH0KICAgICAgICBpZiAoIWJpbmRpbmdEZWYucmVuZGVyT25OdWxsVmFsdWUpIHsKICAgICAgICAgIGlmIChkYXRhLnggPT09IG51bGwpIHsKICAgICAgICAgICAgZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBlbC5zdHlsZS52aXNpYmlsaXR5ID0gImluaGVyaXQiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVsZW1lbnREYXRhKGVsLCAiaW5pdGlhbGl6ZWQiKSkgewogICAgICAgICAgaW5pdFNpemluZyhlbCk7CgogICAgICAgICAgZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIsIHRydWUpOwogICAgICAgICAgaWYgKGJpbmRpbmdEZWYuaW5pdGlhbGl6ZSkgewogICAgICAgICAgICB2YXIgcmVzdWx0ID0gYmluZGluZ0RlZi5pbml0aWFsaXplKGVsLCBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBlbC5vZmZzZXRIZWlnaHQpOwogICAgICAgICAgICBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IiwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYmluZGluZ0RlZi5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgZWxlbWVudERhdGEoZWwsICJpbml0X3Jlc3VsdCIpLCBbZWwsIGRhdGEueF0pOwogICAgICB9OwoKICAgICAgLy8gT25seSBvdmVycmlkZSByZXNpemUgaWYgYmluZGluZ0RlZiBpbXBsZW1lbnRzIGl0CiAgICAgIGlmIChiaW5kaW5nRGVmLnJlc2l6ZSkgewogICAgICAgIHNoaW55QmluZGluZy5yZXNpemUgPSBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCkgewogICAgICAgICAgLy8gU2hpbnkgY2FuIGNhbGwgcmVzaXplIGJlZm9yZSBpbml0aWFsaXplL3JlbmRlclZhbHVlIGhhdmUgYmVlbgogICAgICAgICAgLy8gY2FsbGVkLCB3aGljaCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIHdpZGdldHMuCiAgICAgICAgICBpZiAoZWxlbWVudERhdGEoZWwsICJpbml0aWFsaXplZCIpKSB7CiAgICAgICAgICAgIGJpbmRpbmdEZWYucmVzaXplKGVsLCB3aWR0aCwgaGVpZ2h0LCBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0IikpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KCiAgICAgIFNoaW55Lm91dHB1dEJpbmRpbmdzLnJlZ2lzdGVyKHNoaW55QmluZGluZywgYmluZGluZ0RlZi5uYW1lKTsKICAgIH0KICB9OwoKICB2YXIgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICBmdW5jdGlvbiBzY2hlZHVsZVN0YXRpY1JlbmRlcigpIHsKICAgIGlmICghc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkKSB7CiAgICAgIHNjaGVkdWxlU3RhdGljUmVuZGVyVGltZXJJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgc2NoZWR1bGVTdGF0aWNSZW5kZXJUaW1lcklkID0gbnVsbDsKICAgICAgICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyKCk7CiAgICAgIH0sIDEpOwogICAgfQogIH0KCiAgLy8gUmVuZGVyIHN0YXRpYyB3aWRnZXRzIGFmdGVyIHRoZSBkb2N1bWVudCBmaW5pc2hlcyBsb2FkaW5nCiAgLy8gU3RhdGljYWxseSByZW5kZXIgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIG9mIHRoaXMgd2lkZ2V0J3MgY2xhc3MKICB3aW5kb3cuSFRNTFdpZGdldHMuc3RhdGljUmVuZGVyID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgYmluZGluZ3MgPSB3aW5kb3cuSFRNTFdpZGdldHMud2lkZ2V0cyB8fCBbXTsKICAgIGZvckVhY2goYmluZGluZ3MsIGZ1bmN0aW9uKGJpbmRpbmcpIHsKICAgICAgdmFyIG1hdGNoZXMgPSBiaW5kaW5nLmZpbmQoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KTsKICAgICAgZm9yRWFjaChtYXRjaGVzLCBmdW5jdGlvbihlbCkgewogICAgICAgIHZhciBzaXplT2JqID0gaW5pdFNpemluZyhlbCwgYmluZGluZyk7CgogICAgICAgIGlmIChoYXNDbGFzcyhlbCwgImh0bWwtd2lkZ2V0LXN0YXRpYy1ib3VuZCIpKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGVsLmNsYXNzTmFtZSA9IGVsLmNsYXNzTmFtZSArICIgaHRtbC13aWRnZXQtc3RhdGljLWJvdW5kIjsKCiAgICAgICAgdmFyIGluaXRSZXN1bHQ7CiAgICAgICAgaWYgKGJpbmRpbmcuaW5pdGlhbGl6ZSkgewogICAgICAgICAgaW5pdFJlc3VsdCA9IGJpbmRpbmcuaW5pdGlhbGl6ZShlbCwKICAgICAgICAgICAgc2l6ZU9iaiA/IHNpemVPYmouZ2V0V2lkdGgoKSA6IGVsLm9mZnNldFdpZHRoLAogICAgICAgICAgICBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgKTsKICAgICAgICAgIGVsZW1lbnREYXRhKGVsLCAiaW5pdF9yZXN1bHQiLCBpbml0UmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChiaW5kaW5nLnJlc2l6ZSkgewogICAgICAgICAgdmFyIGxhc3RTaXplID0gewogICAgICAgICAgICB3OiBzaXplT2JqID8gc2l6ZU9iai5nZXRXaWR0aCgpIDogZWwub2Zmc2V0V2lkdGgsCiAgICAgICAgICAgIGg6IHNpemVPYmogPyBzaXplT2JqLmdldEhlaWdodCgpIDogZWwub2Zmc2V0SGVpZ2h0CiAgICAgICAgICB9OwogICAgICAgICAgdmFyIHJlc2l6ZUhhbmRsZXIgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgIHZhciBzaXplID0gewogICAgICAgICAgICAgIHc6IHNpemVPYmogPyBzaXplT2JqLmdldFdpZHRoKCkgOiBlbC5vZmZzZXRXaWR0aCwKICAgICAgICAgICAgICBoOiBzaXplT2JqID8gc2l6ZU9iai5nZXRIZWlnaHQoKSA6IGVsLm9mZnNldEhlaWdodAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoc2l6ZS53ID09PSAwICYmIHNpemUuaCA9PT0gMCkKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGlmIChzaXplLncgPT09IGxhc3RTaXplLncgJiYgc2l6ZS5oID09PSBsYXN0U2l6ZS5oKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgbGFzdFNpemUgPSBzaXplOwogICAgICAgICAgICBiaW5kaW5nLnJlc2l6ZShlbCwgc2l6ZS53LCBzaXplLmgsIGluaXRSZXN1bHQpOwogICAgICAgICAgfTsKCiAgICAgICAgICBvbih3aW5kb3csICJyZXNpemUiLCByZXNpemVIYW5kbGVyKTsKCiAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZCBmb3IgY2FzZXMgd2hlcmUgd2UncmUgcnVubmluZyBpbiBhIFNoaW55CiAgICAgICAgICAvLyBhcHAsIGJ1dCB0aGUgd2lkZ2V0IGl0c2VsZiBpcyBub3QgYSBTaGlueSBvdXRwdXQsIGJ1dAogICAgICAgICAgLy8gcmF0aGVyIGEgc2ltcGxlIHN0YXRpYyB3aWRnZXQuIE9uZSBleGFtcGxlIG9mIHRoaXMgaXMKICAgICAgICAgIC8vIGFuIHJtYXJrZG93biBkb2N1bWVudCB0aGF0IGhhcyBydW50aW1lOnNoaW55IGFuZCB3aWRnZXQKICAgICAgICAgIC8vIHRoYXQgaXNuJ3QgaW4gYSByZW5kZXIgZnVuY3Rpb24uIFNoaW55IG9ubHkga25vd3MgdG8KICAgICAgICAgIC8vIGNhbGwgcmVzaXplIGhhbmRsZXJzIGZvciBTaGlueSBvdXRwdXRzLCBub3QgZm9yIHN0YXRpYwogICAgICAgICAgLy8gd2lkZ2V0cywgc28gd2UgZG8gaXQgb3Vyc2VsdmVzLgogICAgICAgICAgaWYgKHdpbmRvdy5qUXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmpRdWVyeShkb2N1bWVudCkub24oCiAgICAgICAgICAgICAgInNob3duLmh0bWx3aWRnZXRzIHNob3duLmJzLnRhYi5odG1sd2lkZ2V0cyBzaG93bi5icy5jb2xsYXBzZS5odG1sd2lkZ2V0cyIsCiAgICAgICAgICAgICAgcmVzaXplSGFuZGxlcgogICAgICAgICAgICApOwogICAgICAgICAgICB3aW5kb3cualF1ZXJ5KGRvY3VtZW50KS5vbigKICAgICAgICAgICAgICAiaGlkZGVuLmh0bWx3aWRnZXRzIGhpZGRlbi5icy50YWIuaHRtbHdpZGdldHMgaGlkZGVuLmJzLmNvbGxhcHNlLmh0bWx3aWRnZXRzIiwKICAgICAgICAgICAgICByZXNpemVIYW5kbGVyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBzcGVjaWZpYyBjYXNlIG9mIGlvc2xpZGVzLCB3aGljaAogICAgICAgICAgLy8gZmxpcHMgc2xpZGVzIGJldHdlZW4gZGlzcGxheTpub25lIGFuZCBkaXNwbGF5OmJsb2NrLgogICAgICAgICAgLy8gSWRlYWxseSB3ZSB3b3VsZCBub3QgaGF2ZSB0byBoYXZlIGlvc2xpZGUtc3BlY2lmaWMgY29kZQogICAgICAgICAgLy8gaGVyZSwgYnV0IHJhdGhlciBoYXZlIGlvc2xpZGVzIHJhaXNlIGEgZ2VuZXJpYyBldmVudCwKICAgICAgICAgIC8vIGJ1dCB0aGUgcm1hcmtkb3duIHBhY2thZ2UganVzdCB3ZW50IHRvIENSQU4gc28gdGhlCiAgICAgICAgICAvLyB3aW5kb3cgdG8gZ2V0dGluZyB0aGF0IGZpeGVkIG1heSBiZSBsb25nLgogICAgICAgICAgaWYgKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSB7CiAgICAgICAgICAgIC8vIEl0J3MgT0sgdG8gbGltaXQgdGhpcyB0byB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcgogICAgICAgICAgICAvLyBicm93c2VycyBiZWNhdXNlIGlvc2xpZGVzIGl0c2VsZiBvbmx5IHN1cHBvcnRzCiAgICAgICAgICAgIC8vIHN1Y2ggYnJvd3NlcnMuCiAgICAgICAgICAgIG9uKGRvY3VtZW50LCAic2xpZGVlbnRlciIsIHJlc2l6ZUhhbmRsZXIpOwogICAgICAgICAgICBvbihkb2N1bWVudCwgInNsaWRlbGVhdmUiLCByZXNpemVIYW5kbGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBzY3JpcHREYXRhID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZm9yPSciICsgZWwuaWQgKyAiJ11bdHlwZT0nYXBwbGljYXRpb24vanNvbiddIik7CiAgICAgICAgaWYgKHNjcmlwdERhdGEpIHsKICAgICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzY3JpcHREYXRhLnRleHRDb250ZW50IHx8IHNjcmlwdERhdGEudGV4dCk7CiAgICAgICAgICAvLyBSZXNvbHZlIHN0cmluZ3MgbWFya2VkIGFzIGphdmFzY3JpcHQgbGl0ZXJhbHMgdG8gb2JqZWN0cwogICAgICAgICAgaWYgKCEoZGF0YS5ldmFscyBpbnN0YW5jZW9mIEFycmF5KSkgZGF0YS5ldmFscyA9IFtkYXRhLmV2YWxzXTsKICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBkYXRhLmV2YWxzICYmIGsgPCBkYXRhLmV2YWxzLmxlbmd0aDsgaysrKSB7CiAgICAgICAgICAgIHdpbmRvdy5IVE1MV2lkZ2V0cy5ldmFsdWF0ZVN0cmluZ01lbWJlcihkYXRhLngsIGRhdGEuZXZhbHNba10pOwogICAgICAgICAgfQogICAgICAgICAgYmluZGluZy5yZW5kZXJWYWx1ZShlbCwgZGF0YS54LCBpbml0UmVzdWx0KTsKICAgICAgICAgIGV2YWxBbmRSdW4oZGF0YS5qc0hvb2tzLnJlbmRlciwgaW5pdFJlc3VsdCwgW2VsLCBkYXRhLnhdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CgogICAgaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCk7CiAgfQoKCiAgZnVuY3Rpb24gaGFzX2pRdWVyeTMoKSB7CiAgICBpZiAoIXdpbmRvdy5qUXVlcnkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyICR2ZXJzaW9uID0gd2luZG93LmpRdWVyeS5mbi5qcXVlcnk7CiAgICB2YXIgJG1ham9yX3ZlcnNpb24gPSBwYXJzZUludCgkdmVyc2lvbi5zcGxpdCgiLiIpWzBdKTsKICAgIHJldHVybiAkbWFqb3JfdmVyc2lvbiA+PSAzOwogIH0KCiAgLyoKICAvIFNoaW55IDEuNCBidW1wZWQgalF1ZXJ5IGZyb20gMS54IHRvIDMueCB3aGljaCBtZWFucyBqUXVlcnkncwogIC8gb24tcmVhZHkgaGFuZGxlciAoaS5lLiwgJChmbikpIGlzIG5vdyBhc3luY3Jvbm91cyAoaS5lLiwgaXQgbm93CiAgLyByZWFsbHkgbWVhbnMgJChzZXRUaW1lb3V0KGZuKSkuCiAgLyBodHRwczovL2pxdWVyeS5jb20vdXBncmFkZS1ndWlkZS8zLjAvI2JyZWFraW5nLWNoYW5nZS1kb2N1bWVudC1yZWFkeS1oYW5kbGVycy1hcmUtbm93LWFzeW5jaHJvbm91cwogIC8KICAvIFNpbmNlIFNoaW55IHVzZXMgJCgpIHRvIHNjaGVkdWxlIGluaXRTaGlueSwgc2hpbnk+PTEuNCBjYWxscyBpbml0U2hpbnkKICAvIG9uZSB0aWNrIGxhdGVyIHRoYW4gaXQgZGlkIGJlZm9yZSwgd2hpY2ggbWVhbnMgc3RhdGljUmVuZGVyKCkgaXMKICAvIGNhbGxlZCByZW5kZXJWYWx1ZSgpIGVhcmxpZXIgdGhhbiAoYWR2YW5jZWQpIHdpZGdldCBhdXRob3JzIG1pZ2h0IGJlIGV4cGVjdGluZy4KICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL3NoaW55L2lzc3Vlcy8yNjMwCiAgLwogIC8gRm9yIGEgY29uY3JldGUgZXhhbXBsZSwgbGVhZmxldCBoYXMgc29tZSBtZXRob2RzIChlLmcuLCB1cGRhdGVCb3VuZHMpCiAgLyB3aGljaCByZWZlcmVuY2UgU2hpbnkgbWV0aG9kcyByZWdpc3RlcmVkIGluIGluaXRTaGlueSAoZS5nLiwgc2V0SW5wdXRWYWx1ZSkuCiAgLyBTaW5jZSBsZWFmbGV0IGlzIHByaXZ5IHRvIHRoaXMgbGlmZS1jeWNsZSwgaXQga25vd3MgdG8gdXNlIHNldFRpbWVvdXQoKSB0bwogIC8gZGVsYXkgZXhlY3V0aW9uIG9mIHRob3NlIG1ldGhvZHMgKHVudGlsIFNoaW55IG1ldGhvZHMgYXJlIHJlYWR5KQogIC8gaHR0cHM6Ly9naXRodWIuY29tL3JzdHVkaW8vbGVhZmxldC9ibG9iLzE4ZWM5ODEvamF2YXNjcmlwdC9zcmMvaW5kZXguanMjTDI2Ni1MMjY4CiAgLwogIC8gSWRlYWxseSB3aWRnZXQgYXV0aG9ycyB3b3VsZG4ndCBuZWVkIHRvIHVzZSB0aGlzIHNldFRpbWVvdXQoKSBoYWNrIHRoYXQKICAvIGxlYWZsZXQgdXNlcyB0byBjYWxsIFNoaW55IG1ldGhvZHMgb24gYSBzdGF0aWNSZW5kZXIoKS4gSW4gdGhlIGxvbmcgcnVuLAogIC8gdGhlIGxvZ2ljIGluaXRTaGlueSBzaG91bGQgYmUgYnJva2VuIHVwIHNvIHRoYXQgbWV0aG9kIHJlZ2lzdHJhdGlvbiBoYXBwZW5zCiAgLyByaWdodCBhd2F5LCBidXQgYmluZGluZyBoYXBwZW5zIGxhdGVyLgogICovCiAgZnVuY3Rpb24gbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpIHsKICAgIGlmIChzaGlueU1vZGUgJiYgaGFzX2pRdWVyeTMoKSkgewogICAgICB3aW5kb3cualF1ZXJ5KHdpbmRvdy5IVE1MV2lkZ2V0cy5zdGF0aWNSZW5kZXIpOwogICAgfSBlbHNlIHsKICAgICAgd2luZG93LkhUTUxXaWRnZXRzLnN0YXRpY1JlbmRlcigpOwogICAgfQogIH0KCiAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmdW5jdGlvbigpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsIGFyZ3VtZW50cy5jYWxsZWUsIGZhbHNlKTsKICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgfSwgZmFsc2UpOwogIH0gZWxzZSBpZiAoZG9jdW1lbnQuYXR0YWNoRXZlbnQpIHsKICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCBmdW5jdGlvbigpIHsKICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIpIHsKICAgICAgICBkb2N1bWVudC5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIiwgYXJndW1lbnRzLmNhbGxlZSk7CiAgICAgICAgbWF5YmVTdGF0aWNSZW5kZXJMYXRlcigpOwogICAgICB9CiAgICB9KTsKICB9CgoKICB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0QXR0YWNobWVudFVybCA9IGZ1bmN0aW9uKGRlcG5hbWUsIGtleSkgewogICAgLy8gSWYgbm8ga2V5LCBkZWZhdWx0IHRvIHRoZSBmaXJzdCBpdGVtCiAgICBpZiAodHlwZW9mKGtleSkgPT09ICJ1bmRlZmluZWQiKQogICAgICBrZXkgPSAxOwoKICAgIHZhciBsaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZGVwbmFtZSArICItIiArIGtleSArICItYXR0YWNobWVudCIpOwogICAgaWYgKCFsaW5rKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQXR0YWNobWVudCAiICsgZGVwbmFtZSArICIvIiArIGtleSArICIgbm90IGZvdW5kIGluIGRvY3VtZW50Iik7CiAgICB9CiAgICByZXR1cm4gbGluay5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICB9OwoKICB3aW5kb3cuSFRNTFdpZGdldHMuZGF0YWZyYW1lVG9EMyA9IGZ1bmN0aW9uKGRmKSB7CiAgICB2YXIgbmFtZXMgPSBbXTsKICAgIHZhciBsZW5ndGg7CiAgICBmb3IgKHZhciBuYW1lIGluIGRmKSB7CiAgICAgICAgaWYgKGRmLmhhc093blByb3BlcnR5KG5hbWUpKQogICAgICAgICAgICBuYW1lcy5wdXNoKG5hbWUpOwogICAgICAgIGlmICh0eXBlb2YoZGZbbmFtZV0pICE9PSAib2JqZWN0IiB8fCB0eXBlb2YoZGZbbmFtZV0ubGVuZ3RoKSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YobGVuZ3RoKSAhPT0gInVuZGVmaW5lZCIgJiYgbGVuZ3RoICE9PSBkZltuYW1lXS5sZW5ndGgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpOwogICAgICAgIH0KICAgICAgICBsZW5ndGggPSBkZltuYW1lXS5sZW5ndGg7CiAgICB9CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgdmFyIGl0ZW07CiAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBsZW5ndGg7IHJvdysrKSB7CiAgICAgICAgaXRlbSA9IHt9OwogICAgICAgIGZvciAodmFyIGNvbCA9IDA7IGNvbCA8IG5hbWVzLmxlbmd0aDsgY29sKyspIHsKICAgICAgICAgICAgaXRlbVtuYW1lc1tjb2xdXSA9IGRmW25hbWVzW2NvbF1dW3Jvd107CiAgICAgICAgfQogICAgICAgIHJlc3VsdHMucHVzaChpdGVtKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH07CgogIHdpbmRvdy5IVE1MV2lkZ2V0cy50cmFuc3Bvc2VBcnJheTJEID0gZnVuY3Rpb24oYXJyYXkpIHsKICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGFycmF5OwogICAgICB2YXIgbmV3QXJyYXkgPSBhcnJheVswXS5tYXAoZnVuY3Rpb24oY29sLCBpKSB7CiAgICAgICAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uKHJvdykgewogICAgICAgICAgICAgIHJldHVybiByb3dbaV0KICAgICAgICAgIH0pCiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3QXJyYXk7CiAgfTsKICAvLyBTcGxpdCB2YWx1ZSBhdCBzcGxpdENoYXIsIGJ1dCBhbGxvdyBzcGxpdENoYXIgdG8gYmUgZXNjYXBlZAogIC8vIHVzaW5nIGVzY2FwZUNoYXIuIEFueSBvdGhlciBjaGFyYWN0ZXJzIGVzY2FwZWQgYnkgZXNjYXBlQ2hhcgogIC8vIHdpbGwgYmUgaW5jbHVkZWQgYXMgdXN1YWwgKGluY2x1ZGluZyBlc2NhcGVDaGFyIGl0c2VsZikuCiAgZnVuY3Rpb24gc3BsaXRXaXRoRXNjYXBlKHZhbHVlLCBzcGxpdENoYXIsIGVzY2FwZUNoYXIpIHsKICAgIHZhciByZXN1bHRzID0gW107CiAgICB2YXIgZXNjYXBlTW9kZSA9IGZhbHNlOwogICAgdmFyIGN1cnJlbnRSZXN1bHQgPSAiIjsKICAgIGZvciAodmFyIHBvcyA9IDA7IHBvcyA8IHZhbHVlLmxlbmd0aDsgcG9zKyspIHsKICAgICAgaWYgKCFlc2NhcGVNb2RlKSB7CiAgICAgICAgaWYgKHZhbHVlW3Bvc10gPT09IHNwbGl0Q2hhcikgewogICAgICAgICAgcmVzdWx0cy5wdXNoKGN1cnJlbnRSZXN1bHQpOwogICAgICAgICAgY3VycmVudFJlc3VsdCA9ICIiOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWVbcG9zXSA9PT0gZXNjYXBlQ2hhcikgewogICAgICAgICAgZXNjYXBlTW9kZSA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGN1cnJlbnRSZXN1bHQgKz0gdmFsdWVbcG9zXTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY3VycmVudFJlc3VsdCArPSB2YWx1ZVtwb3NdOwogICAgICAgIGVzY2FwZU1vZGUgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGN1cnJlbnRSZXN1bHQgIT09ICIiKSB7CiAgICAgIHJlc3VsdHMucHVzaChjdXJyZW50UmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHRzOwogIH0KICAvLyBGdW5jdGlvbiBhdXRob3JlZCBieSBZaWh1aS9KSiBBbGxhaXJlCiAgd2luZG93LkhUTUxXaWRnZXRzLmV2YWx1YXRlU3RyaW5nTWVtYmVyID0gZnVuY3Rpb24obywgbWVtYmVyKSB7CiAgICB2YXIgcGFydHMgPSBzcGxpdFdpdGhFc2NhcGUobWVtYmVyLCAnLicsICdcXCcpOwogICAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgLy8gcGFydCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3IgJ251bWVyaWMnIG1lbWJlciBuYW1lCiAgICAgIGlmIChvICE9PSBudWxsICYmIHR5cGVvZiBvID09PSAib2JqZWN0IiAmJiBwYXJ0IGluIG8pIHsKICAgICAgICBpZiAoaSA9PSAobCAtIDEpKSB7IC8vIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIHRoZW4gZXZhbHVsYXRlCiAgICAgICAgICBpZiAodHlwZW9mIG9bcGFydF0gPT09ICJzdHJpbmciKQogICAgICAgICAgICBvW3BhcnRdID0gdHJ5RXZhbChvW3BhcnRdKTsKICAgICAgICB9IGVsc2UgeyAvLyBvdGhlcndpc2UgY29udGludWUgdG8gbmV4dCBlbWJlZGRlZCBvYmplY3QKICAgICAgICAgIG8gPSBvW3BhcnRdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH07CgogIC8vIFJldHJpZXZlIHRoZSBIVE1MV2lkZ2V0IGluc3RhbmNlIChpLmUuIHRoZSByZXR1cm4gdmFsdWUgb2YgYW4KICAvLyBIVE1MV2lkZ2V0IGJpbmRpbmcncyBpbml0aWFsaXplKCkgb3IgZmFjdG9yeSgpIGZ1bmN0aW9uKQogIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50LCBvciBudWxsIGlmIG5vbmUuCiAgd2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlID0gZnVuY3Rpb24oZWwpIHsKICAgIHJldHVybiBlbGVtZW50RGF0YShlbCwgImluaXRfcmVzdWx0Iik7CiAgfTsKCiAgLy8gRmluZHMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNjb3BlIHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3IsCiAgLy8gYW5kIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2UgKGkuZS4gdGhlIHJldHVybiB2YWx1ZSBvZgogIC8vIGFuIEhUTUxXaWRnZXQgYmluZGluZydzIGluaXRpYWxpemUoKSBvciBmYWN0b3J5KCkgZnVuY3Rpb24pCiAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoYXQgZWxlbWVudCwgaWYgYW55LiBJZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlCiAgLy8gc2VsZWN0b3IsIG9yIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGhhcyBubyBIVE1MV2lkZ2V0CiAgLy8gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGl0LCB0aGVuIG51bGwgaXMgcmV0dXJuZWQuCiAgLy8KICAvLyBUaGUgc2NvcGUgYXJndW1lbnQgaXMgb3B0aW9uYWwsIGFuZCBkZWZhdWx0cyB0byB3aW5kb3cuZG9jdW1lbnQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmZpbmQgPSBmdW5jdGlvbihzY29wZSwgc2VsZWN0b3IpIHsKICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgc2VsZWN0b3IgPSBzY29wZTsKICAgICAgc2NvcGUgPSBkb2N1bWVudDsKICAgIH0KCiAgICB2YXIgZWwgPSBzY29wZS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICAgIGlmIChlbCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB3aW5kb3cuSFRNTFdpZGdldHMuZ2V0SW5zdGFuY2UoZWwpOwogICAgfQogIH07CgogIC8vIEZpbmRzIGFsbCBlbGVtZW50cyBpbiB0aGUgc2NvcGUgdGhhdCBtYXRjaCB0aGUgc2VsZWN0b3IsIGFuZAogIC8vIHJldHVybnMgdGhlIEhUTUxXaWRnZXQgaW5zdGFuY2VzIChpLmUuIHRoZSByZXR1cm4gdmFsdWVzIG9mCiAgLy8gYW4gSFRNTFdpZGdldCBiaW5kaW5nJ3MgaW5pdGlhbGl6ZSgpIG9yIGZhY3RvcnkoKSBmdW5jdGlvbikKICAvLyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRzLCBpbiBhbiBhcnJheS4gSWYgZWxlbWVudHMgdGhhdAogIC8vIG1hdGNoIHRoZSBzZWxlY3RvciBkb24ndCBoYXZlIGFuIGFzc29jaWF0ZWQgSFRNTFdpZGdldAogIC8vIGluc3RhbmNlLCB0aGUgcmV0dXJuZWQgYXJyYXkgd2lsbCBjb250YWluIG51bGxzLgogIC8vCiAgLy8gVGhlIHNjb3BlIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gd2luZG93LmRvY3VtZW50LgogIHdpbmRvdy5IVE1MV2lkZ2V0cy5maW5kQWxsID0gZnVuY3Rpb24oc2NvcGUsIHNlbGVjdG9yKSB7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHNlbGVjdG9yID0gc2NvcGU7CiAgICAgIHNjb3BlID0gZG9jdW1lbnQ7CiAgICB9CgogICAgdmFyIG5vZGVzID0gc2NvcGUucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgICB2YXIgcmVzdWx0cyA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHRzLnB1c2god2luZG93LkhUTUxXaWRnZXRzLmdldEluc3RhbmNlKG5vZGVzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0czsKICB9OwoKICB2YXIgcG9zdFJlbmRlckhhbmRsZXJzID0gW107CiAgZnVuY3Rpb24gaW52b2tlUG9zdFJlbmRlckhhbmRsZXJzKCkgewogICAgd2hpbGUgKHBvc3RSZW5kZXJIYW5kbGVycy5sZW5ndGgpIHsKICAgICAgdmFyIGhhbmRsZXIgPSBwb3N0UmVuZGVySGFuZGxlcnMuc2hpZnQoKTsKICAgICAgaWYgKGhhbmRsZXIpIHsKICAgICAgICBoYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIFJlZ2lzdGVyIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZQogIC8vIG5leHQgdGltZSBzdGF0aWMgd2lkZ2V0cyBhcmUgcmVuZGVyZWQuCiAgd2luZG93LkhUTUxXaWRnZXRzLmFkZFBvc3RSZW5kZXJIYW5kbGVyID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgIHBvc3RSZW5kZXJIYW5kbGVycy5wdXNoKGNhbGxiYWNrKTsKICB9OwoKICAvLyBUYWtlcyBhIG5ldy1zdHlsZSBpbnN0YW5jZS1ib3VuZCBkZWZpbml0aW9uLCBhbmQgcmV0dXJucyBhbgogIC8vIG9sZC1zdHlsZSBjbGFzcy1ib3VuZCBkZWZpbml0aW9uLiBUaGlzIHNhdmVzIHVzIGZyb20gaGF2aW5nCiAgLy8gdG8gcmV3cml0ZSBhbGwgdGhlIGxvZ2ljIGluIHRoaXMgZmlsZSB0byBhY2NvbW9kYXRlIGJvdGgKICAvLyB0eXBlcyBvZiBkZWZpbml0aW9ucy4KICBmdW5jdGlvbiBjcmVhdGVMZWdhY3lEZWZpbml0aW9uQWRhcHRlcihkZWZuKSB7CiAgICB2YXIgcmVzdWx0ID0gewogICAgICBuYW1lOiBkZWZuLm5hbWUsCiAgICAgIHR5cGU6IGRlZm4udHlwZSwKICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oZWwsIHdpZHRoLCBoZWlnaHQpIHsKICAgICAgICByZXR1cm4gZGVmbi5mYWN0b3J5KGVsLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgfSwKICAgICAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgICAgIHJldHVybiBpbnN0YW5jZS5yZW5kZXJWYWx1ZSh4KTsKICAgICAgfSwKICAgICAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgICAgICByZXR1cm4gaW5zdGFuY2UucmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICB9CiAgICB9OwoKICAgIGlmIChkZWZuLmZpbmQpCiAgICAgIHJlc3VsdC5maW5kID0gZGVmbi5maW5kOwogICAgaWYgKGRlZm4ucmVuZGVyRXJyb3IpCiAgICAgIHJlc3VsdC5yZW5kZXJFcnJvciA9IGRlZm4ucmVuZGVyRXJyb3I7CiAgICBpZiAoZGVmbi5jbGVhckVycm9yKQogICAgICByZXN1bHQuY2xlYXJFcnJvciA9IGRlZm4uY2xlYXJFcnJvcjsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfSkoKTsKCg=="></script>
<script src="data:application/javascript;base64,CkhUTUxXaWRnZXRzLndpZGdldCh7CiAgbmFtZTogInBsb3RseSIsCiAgdHlwZTogIm91dHB1dCIsCgogIGluaXRpYWxpemU6IGZ1bmN0aW9uKGVsLCB3aWR0aCwgaGVpZ2h0KSB7CiAgICByZXR1cm4ge307CiAgfSwKCiAgcmVzaXplOiBmdW5jdGlvbihlbCwgd2lkdGgsIGhlaWdodCwgaW5zdGFuY2UpIHsKICAgIGlmIChpbnN0YW5jZS5hdXRvc2l6ZSkgewogICAgICB2YXIgd2lkdGggPSBpbnN0YW5jZS53aWR0aCB8fCB3aWR0aDsKICAgICAgdmFyIGhlaWdodCA9IGluc3RhbmNlLmhlaWdodCB8fCBoZWlnaHQ7CiAgICAgIFBsb3RseS5yZWxheW91dChlbC5pZCwge3dpZHRoOiB3aWR0aCwgaGVpZ2h0OiBoZWlnaHR9KTsKICAgIH0KICB9LCAgCiAgCiAgcmVuZGVyVmFsdWU6IGZ1bmN0aW9uKGVsLCB4LCBpbnN0YW5jZSkgewogICAgCiAgICAvLyBQbG90bHkucmVsYXlvdXQoKSBtdXRhdGVzIHRoZSBwbG90IGlucHV0IG9iamVjdCwgc28gbWFrZSBzdXJlIHRvIAogICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgdXNlci1zdXBwbGllZCB3aWR0aC9oZWlnaHQgKmJlZm9yZSoKICAgIC8vIHdlIGNhbGwgUGxvdGx5LnBsb3QoKTsKICAgIHZhciBsYXkgPSB4LmxheW91dCB8fCB7fTsKICAgIGluc3RhbmNlLndpZHRoID0gbGF5LndpZHRoOwogICAgaW5zdGFuY2UuaGVpZ2h0ID0gbGF5LmhlaWdodDsKICAgIGluc3RhbmNlLmF1dG9zaXplID0gbGF5LmF1dG9zaXplIHx8IHRydWU7CiAgICAKICAgIC8qIAogICAgLyAnaW5mb3JtIHRoZSB3b3JsZCcgYWJvdXQgaGlnaGxpZ2h0aW5nIG9wdGlvbnMgdGhpcyBpcyBzbyBvdGhlcgogICAgLyBjcm9zc3RhbGsgbGlicmFyaWVzIGhhdmUgYSBjaGFuY2UgdG8gcmVzcG9uZCB0byBzcGVjaWFsIHNldHRpbmdzIAogICAgLyBzdWNoIGFzIHBlcnNpc3RlbnQgc2VsZWN0aW9uLiAKICAgIC8gQUZBSUssIGxlYWZsZXQgaXMgdGhlIG9ubHkgbGlicmFyeSB3aXRoIHN1Y2ggaW50ZXJncmF0aW9uCiAgICAvIGh0dHBzOi8vZ2l0aHViLmNvbS9yc3R1ZGlvL2xlYWZsZXQvcHVsbC8zNDYvZmlsZXMjZGlmZi1hZDBjMmQ1MWNlNWZkZjhjOTBjNzM5NWIxMDJmNDI2NVIxNTQKICAgICovCiAgICB2YXIgY3RDb25maWcgPSBjcm9zc3RhbGsudmFyKCdwbG90bHlDcm9zc3RhbGtPcHRzJykuc2V0KHguaGlnaGxpZ2h0KTsKICAgICAgCiAgICBpZiAodHlwZW9mKHdpbmRvdykgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgIC8vIG1ha2Ugc3VyZSBwbG90cyBkb24ndCBnZXQgY3JlYXRlZCBvdXRzaWRlIHRoZSBuZXR3b3JrIChmb3Igb24tcHJlbSkKICAgICAgd2luZG93LlBMT1RMWUVOViA9IHdpbmRvdy5QTE9UTFlFTlYgfHwge307CiAgICAgIHdpbmRvdy5QTE9UTFlFTlYuQkFTRV9VUkwgPSB4LmJhc2VfdXJsOwogICAgICAKICAgICAgLy8gRW5hYmxlIHBlcnNpc3RlbnQgc2VsZWN0aW9uIHdoZW4gc2hpZnQga2V5IGlzIGRvd24KICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTgyODYxMy9jaGVjay1pZi1hLWtleS1pcy1kb3duCiAgICAgIHZhciBwZXJzaXN0T25TaGlmdCA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoIWUpIHdpbmRvdy5ldmVudDsKICAgICAgICBpZiAoZS5zaGlmdEtleSkgeyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSB0cnVlOyAKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCA9IHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnQgPSBmYWxzZTsgCiAgICAgICAgICB4LmhpZ2hsaWdodC5wZXJzaXN0ZW50U2hpZnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIAogICAgICAvLyBPbmx5IHJlbGV2YW50IGlmIHdlIGhhdmVuJ3QgZm9yY2VkIHBlcnNpc3RlbnQgbW9kZSBhdCBjb21tYW5kIGxpbmUKICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgd2luZG93Lm9ubW91c2Vtb3ZlID0gcGVyc2lzdE9uU2hpZnQ7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgZ3JhcGhEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbC5pZCk7CiAgICAKICAgIC8vIFRPRE86IG1vdmUgdGhlIGNvbnRyb2wgcGFuZWwgaW5qZWN0aW9uIHN0cmF0ZWd5IGluc2lkZSBoZXJlLi4uCiAgICBIVE1MV2lkZ2V0cy5hZGRQb3N0UmVuZGVySGFuZGxlcihmdW5jdGlvbigpIHsKICAgICAgCiAgICAgIC8vIGxvd2VyIHRoZSB6LWluZGV4IG9mIHRoZSBtb2RlYmFyIHRvIHByZXZlbnQgaXQgZnJvbSBoaWdoamFja2luZyBob3ZlcgogICAgICAvLyAoVE9ETzogZG8gdGhpcyB2aWEgQ1NTPykKICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JvcGVuc2NpL3Bsb3RseS9pc3N1ZXMvOTU2CiAgICAgIC8vIGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvcHJvcF9zdHlsZV96aW5kZXguYXNwCiAgICAgIHZhciBtb2RlYmFycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5qcy1wbG90bHktcGxvdCAucGxvdGx5IC5tb2RlYmFyIik7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZWJhcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBtb2RlYmFyc1tpXS5zdHlsZS56SW5kZXggPSAxOwogICAgICB9CiAgICB9KTsKICAgICAgCiAgICAgIC8vIGluamVjdCBhICJjb250cm9sIHBhbmVsIiBob2xkaW5nIHNlbGVjdGl6ZS9keW5hbWljIGNvbG9yIHdpZGdldChzKQogICAgaWYgKCh4LnNlbGVjdGl6ZSB8fCB4LmhpZ2hsaWdodC5keW5hbWljKSAmJiAhaW5zdGFuY2UucGxvdGx5KSB7CiAgICAgIHZhciBmbGV4ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZsZXguY2xhc3MgPSAicGxvdGx5LWNyb3NzdGFsay1jb250cm9sLXBhbmVsIjsKICAgICAgZmxleC5zdHlsZSA9ICJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXAiOwogICAgICAKICAgICAgLy8gaW5qZWN0IHRoZSBjb2xvdXJwaWNrZXIgSFRNTCBjb250YWluZXIgaW50byB0aGUgZmxleGJveAogICAgICBpZiAoeC5oaWdobGlnaHQuZHluYW1pYykgewogICAgICAgIHZhciBwaWNrZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwogICAgICAgIHBpY2tlcklucHV0LmlkID0gZWwuaWQgKyAiLWNvbG91cnBpY2tlciI7CiAgICAgICAgcGlja2VySW5wdXQucGxhY2Vob2xkZXIgPSAiYXNkYXNkIjsKICAgICAgICAKICAgICAgICB2YXIgcGlja2VyTGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgIHBpY2tlckxhYmVsLmZvciA9IHBpY2tlcklucHV0LmlkOwogICAgICAgIHBpY2tlckxhYmVsLmlubmVySFRNTCA9ICJCcnVzaCBjb2xvciZuYnNwOyZuYnNwOyI7CiAgICAgICAgCiAgICAgICAgcGlja2VyRGl2LmFwcGVuZENoaWxkKHBpY2tlckxhYmVsKTsKICAgICAgICBwaWNrZXJEaXYuYXBwZW5kQ2hpbGQocGlja2VySW5wdXQpOwogICAgICAgIGZsZXguYXBwZW5kQ2hpbGQocGlja2VyRGl2KTsKICAgICAgfQogICAgICAKICAgICAgLy8gaW5qZWN0IHNlbGVjdGl6ZSBIVE1MIGNvbnRhaW5lcnMgKG9uZSBmb3IgZXZlcnkgY3Jvc3N0YWxrIGdyb3VwKQogICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICB2YXIgaWRzID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpOwogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICBjb250YWluZXIuaWQgPSBpZHNbaV07CiAgICAgICAgICBjb250YWluZXIuc3R5bGUgPSAid2lkdGg6IDgwJTsgaGVpZ2h0OiAxMCUiOwogICAgICAgICAgY29udGFpbmVyLmNsYXNzID0gImZvcm0tZ3JvdXAgY3Jvc3N0YWxrLWlucHV0LXBsb3RseS1oaWdobGlnaHQiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwogICAgICAgICAgbGFiZWwuZm9yID0gaWRzW2ldOwogICAgICAgICAgbGFiZWwuaW5uZXJIVE1MID0geC5zZWxlY3RpemVbaWRzW2ldXS5ncm91cDsKICAgICAgICAgIGxhYmVsLmNsYXNzID0gImNvbnRyb2wtbGFiZWwiOwogICAgICAgICAgCiAgICAgICAgICB2YXIgc2VsZWN0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICB2YXIgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7CiAgICAgICAgICBzZWxlY3QubXVsdGlwbGUgPSB0cnVlOwogICAgICAgICAgCiAgICAgICAgICBzZWxlY3REaXYuYXBwZW5kQ2hpbGQoc2VsZWN0KTsKICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7CiAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RGl2KTsKICAgICAgICAgIGZsZXguYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIGZpbmFsbHksIGluc2VydCB0aGUgZmxleGJveCBpbnNpZGUgdGhlIGh0bWx3aWRnZXQgY29udGFpbmVyLAogICAgICAvLyBidXQgYmVmb3JlIHRoZSBwbG90bHkgZ3JhcGggZGl2CiAgICAgIGdyYXBoRGl2LnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKGZsZXgsIGdyYXBoRGl2KTsKICAgICAgCiAgICAgIGlmICh4LmhpZ2hsaWdodC5keW5hbWljKSB7CiAgICAgICAgdmFyIHBpY2tlciA9ICQoIiMiICsgcGlja2VySW5wdXQuaWQpOwogICAgICAgIHZhciBjb2xvcnMgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgICAgICAvLyBUT0RPOiBsZXQgdXNlcnMgc3BlY2lmeSBvcHRpb25zPwogICAgICAgIHZhciBvcHRzID0gewogICAgICAgICAgdmFsdWU6IGNvbG9yc1swXSwKICAgICAgICAgIHNob3dDb2xvdXI6ICJib3RoIiwKICAgICAgICAgIHBhbGV0dGU6ICJsaW1pdGVkIiwKICAgICAgICAgIGFsbG93ZWRDb2xzOiBjb2xvcnMuam9pbigiICIpLAogICAgICAgICAgd2lkdGg6ICIyMCUiLAogICAgICAgICAgaGVpZ2h0OiAiMTAlIgogICAgICAgIH07CiAgICAgICAgcGlja2VyLmNvbG91cnBpY2tlcih7Y2hhbmdlRGVsYXk6IDB9KTsKICAgICAgICBwaWNrZXIuY29sb3VycGlja2VyKCJzZXR0aW5ncyIsIG9wdHMpOwogICAgICAgIHBpY2tlci5jb2xvdXJwaWNrZXIoInZhbHVlIiwgb3B0cy52YWx1ZSk7CiAgICAgICAgLy8gaW5mb3JtIGNyb3NzdGFsayBhYm91dCBhIGNoYW5nZSBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gY29sb3VyCiAgICAgICAgdmFyIGdycHMgPSB4LmhpZ2hsaWdodC5jdEdyb3VwcyB8fCBbXTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNyb3NzdGFsay5ncm91cChncnBzW2ldKS52YXIoJ3Bsb3RseVNlbGVjdGlvbkNvbG91cicpCiAgICAgICAgICAgIC5zZXQocGlja2VyLmNvbG91cnBpY2tlcigndmFsdWUnKSk7CiAgICAgICAgfQogICAgICAgIHBpY2tlci5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgY3Jvc3N0YWxrLmdyb3VwKGdycHNbaV0pLnZhcigncGxvdGx5U2VsZWN0aW9uQ29sb3VyJykKICAgICAgICAgICAgICAuc2V0KHBpY2tlci5jb2xvdXJwaWNrZXIoJ3ZhbHVlJykpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIGlmIG5vIHBsb3QgZXhpc3RzIHlldCwgY3JlYXRlIG9uZSB3aXRoIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uCiAgICBpZiAoIWluc3RhbmNlLnBsb3RseSkgewogICAgICAKICAgICAgdmFyIHBsb3QgPSBQbG90bHkubmV3UGxvdChncmFwaERpdiwgeCk7CiAgICAgIGluc3RhbmNlLnBsb3RseSA9IHRydWU7CiAgICAgIAogICAgfSBlbHNlIGlmICh4LmxheW91dC50cmFuc2l0aW9uKSB7CiAgICAgIAogICAgICB2YXIgcGxvdCA9IFBsb3RseS5yZWFjdChncmFwaERpdiwgeCk7CiAgICAKICAgIH0gZWxzZSB7CiAgICAgIAogICAgICAvLyB0aGlzIGlzIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gUGxvdGx5Lm5ld1Bsb3QoKSwgYnV0IGF2b2lkcyBjcmVhdGluZyAKICAgICAgLy8gYSBuZXcgd2ViZ2wgY29udGV4dAogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9ibG9iLzJiMjRmOWRlZjkwMTgzMWU2MTI4MjA3NmNmM2Y4MzU1OThkNTZmMGUvc3JjL3Bsb3RfYXBpL3Bsb3RfYXBpLmpzI0w1MzEtTDUzMgoKICAgICAgLy8gVE9ETzogcmVzdG9yZSBjcm9zc3RhbGsgc2VsZWN0aW9ucz8KICAgICAgUGxvdGx5LnB1cmdlKGdyYXBoRGl2KTsKICAgICAgLy8gVE9ETzogd2h5IGlzIHRoaXMgbmVjZXNzYXJ5IHRvIGdldCBjcm9zc3RhbGsgd29ya2luZz8KICAgICAgZ3JhcGhEaXYuZGF0YSA9IHVuZGVmaW5lZDsKICAgICAgZ3JhcGhEaXYubGF5b3V0ID0gdW5kZWZpbmVkOwogICAgICB2YXIgcGxvdCA9IFBsb3RseS5uZXdQbG90KGdyYXBoRGl2LCB4KTsKICAgIH0KICAgIAogICAgLy8gVHJpZ2dlciBwbG90bHkuanMgY2FsbHMgZGVmaW5lZCB2aWEgYHBsb3RseVByb3h5KClgCiAgICBwbG90LnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUpIHsKICAgICAgICBTaGlueS5hZGRDdXN0b21NZXNzYWdlSGFuZGxlcigicGxvdGx5LWNhbGxzIiwgZnVuY3Rpb24obXNnKSB7CiAgICAgICAgICB2YXIgZ2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChtc2cuaWQpOwogICAgICAgICAgaWYgKCFnZCkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgcGxvdGx5IGdyYXBoIHdpdGggaWQ6ICIgKyBtc2cuaWQpOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhpcyBpc24ndCBhbiBvZmZpY2lhbCBwbG90bHkuanMgbWV0aG9kLCBidXQgaXQncyB0aGUgb25seSBjdXJyZW50IHdheSB0byAKICAgICAgICAgIC8vIGNoYW5nZSBqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGxvdCAKICAgICAgICAgIC8vIGh0dHBzOi8vY29tbXVuaXR5LnBsb3QubHkvdC91cGRhdGUtY29uZmlnLWZ1bmN0aW9uLzkwNTcKICAgICAgICAgIGlmIChtc2cubWV0aG9kID09ICJyZWNvbmZpZyIpIHsKICAgICAgICAgICAgUGxvdGx5LnJlYWN0KGdkLCBnZC5kYXRhLCBnZC5sYXlvdXQsIG1zZy5hcmdzKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFQbG90bHlbbXNnLm1ldGhvZF0pIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1ldGhvZCAiICsgbXNnLm1ldGhvZCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYXJncyA9IFtnZF0uY29uY2F0KG1zZy5hcmdzKTsKICAgICAgICAgIFBsb3RseVttc2cubWV0aG9kXS5hcHBseShudWxsLCBhcmdzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICAKICAgICAgLy8gcGxvdGx5J3MgbWFwYm94IEFQSSBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgYm91bmRpbmcgYm94ZXMKICAgICAgLy8gaHR0cHM6Ly93d3cubWFwYm94LmNvbS9tYXBib3gtZ2wtanMvZXhhbXBsZS9maXRib3VuZHMvCiAgICAgIC8vIHNvIHdlIGRvIHRoaXMgbWFudWFsbHkuLi4KICAgICAgLy8gVE9ETzogbWFrZSBzdXJlIHRoaXMgdHJpZ2dlcnMgb24gYSByZWRyYXcgYW5kIHJlbGF5b3V0IGFzIHdlbGwgYXMgb24gaW5pdGlhbCBkcmF3CiAgICAgIHZhciBtYXBib3hJRHMgPSBncmFwaERpdi5fZnVsbExheW91dC5fc3VicGxvdHMubWFwYm94IHx8IFtdOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hcGJveElEcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpZCA9IG1hcGJveElEc1tpXTsKICAgICAgICB2YXIgbWFwT3B0cyA9IHgubGF5b3V0W2lkXSB8fCB7fTsKICAgICAgICB2YXIgYXJncyA9IG1hcE9wdHMuX2ZpdEJvdW5kcyB8fCB7fTsKICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB2YXIgbWFwT2JqID0gZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbaWRdLl9zdWJwbG90Lm1hcDsKICAgICAgICBtYXBPYmouZml0Qm91bmRzKGFyZ3MuYm91bmRzLCBhcmdzLm9wdGlvbnMpOwogICAgICB9CiAgICAgIAogICAgfSk7CiAgICAKICAgIC8vIEF0dGFjaCBhdHRyaWJ1dGVzIChlLmcuLCAia2V5IiwgInoiKSB0byBwbG90bHkgZXZlbnQgZGF0YQogICAgZnVuY3Rpb24gZXZlbnREYXRhV2l0aEtleShldmVudERhdGEpIHsKICAgICAgaWYgKGV2ZW50RGF0YSA9PT0gdW5kZWZpbmVkIHx8ICFldmVudERhdGEuaGFzT3duUHJvcGVydHkoInBvaW50cyIpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIGV2ZW50RGF0YS5wb2ludHMubWFwKGZ1bmN0aW9uKHB0KSB7CiAgICAgICAgdmFyIG9iaiA9IHsKICAgICAgICAgIGN1cnZlTnVtYmVyOiBwdC5jdXJ2ZU51bWJlciwgCiAgICAgICAgICBwb2ludE51bWJlcjogcHQucG9pbnROdW1iZXIsIAogICAgICAgICAgeDogcHQueCwKICAgICAgICAgIHk6IHB0LnkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIElmICd6JyBpcyByZXBvcnRlZCB3aXRoIHRoZSBldmVudCBkYXRhLCB0aGVuIHVzZSBpdCEKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoInoiKSkgewogICAgICAgICAgb2JqLnogPSBwdC56OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAocHQuaGFzT3duUHJvcGVydHkoImN1c3RvbWRhdGEiKSkgewogICAgICAgICAgb2JqLmN1c3RvbWRhdGEgPSBwdC5jdXN0b21kYXRhOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiAKICAgICAgICAgIFRMO0RSOiAoSSB0aGluaykgd2UgaGF2ZSB0byBzZWxlY3QgdGhlIGdyYXBoIGRpdiAoYWdhaW4pIHRvIGF0dGFjaCBrZXlzLi4uCiAgICAgICAgICAKICAgICAgICAgIFdoeT8gUmVtZW1iZXIgdGhhdCBjcm9zc3RhbGsgd2lsbCBkeW5hbWljYWxseSBhZGQvZGVsZXRlIHRyYWNlcyAKICAgICAgICAgIChzZWUgdHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24oKSBiZWxvdykKICAgICAgICAgIEZvciB0aGlzIHJlYXNvbiwgd2UgY2FuJ3Qgc2ltcGx5IGdyYWIga2V5cyBmcm9tIHguZGF0YSAobGlrZSB3ZSBkaWQgcHJldmlvdXNseSkKICAgICAgICAgIE1vcmVvdmVyLCB3ZSBjYW4ndCB1c2UgX2Z1bGxEYXRhLCBzaW5jZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSAKICAgICAgICAgIHVub2ZmaWNpYWwgYXR0cmlidXRlcy4gSXQncyB0cnVlIHRoYXQgY2xpY2svaG92ZXIgZXZlbnRzIGZpcmUgd2l0aCAKICAgICAgICAgIHB0LmRhdGEsIGJ1dCBkcmFnIGV2ZW50cyBkb24ndC4uLgogICAgICAgICovCiAgICAgICAgdmFyIGdkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWwuaWQpOwogICAgICAgIHZhciB0cmFjZSA9IGdkLmRhdGFbcHQuY3VydmVOdW1iZXJdOwogICAgICAgIAogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB2YXIgYXR0cnNUb0F0dGFjaCA9IFsia2V5Il07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIHNpbXBsZSBrZXlzIGZpcmUgdGhlIHdob2xlIGtleQogICAgICAgICAgb2JqLmtleSA9IHRyYWNlLmtleTsKICAgICAgICAgIHZhciBhdHRyc1RvQXR0YWNoID0gW107CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnNUb0F0dGFjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGF0dHIgPSB0cmFjZVthdHRyc1RvQXR0YWNoW2ldXTsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGF0dHIpKSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgcHQucG9pbnROdW1iZXIgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gYXR0cltwdC5wb2ludE51bWJlcl07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcikpIHsKICAgICAgICAgICAgICBvYmpbYXR0cnNUb0F0dGFjaFtpXV0gPSBhdHRyW3B0LnBvaW50TnVtYmVyWzBdXVtwdC5wb2ludE51bWJlclsxXV07CiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwdC5wb2ludE51bWJlcnMpKSB7CiAgICAgICAgICAgICAgb2JqW2F0dHJzVG9BdHRhY2hbaV1dID0gcHQucG9pbnROdW1iZXJzLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIGF0dHJbaWR4XTsgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9iajsKICAgICAgfSk7CiAgICB9CiAgICAKICAgIAogICAgdmFyIGxlZ2VuZEV2ZW50RGF0YSA9IGZ1bmN0aW9uKGQpIHsKICAgICAgLy8gaWYgbGVnZW5kZ3JvdXAgaXMgbm90IHJlbGV2YW50IGp1c3QgcmV0dXJuIHRoZSB0cmFjZQogICAgICB2YXIgdHJhY2UgPSBkLmRhdGFbZC5jdXJ2ZU51bWJlcl07CiAgICAgIGlmICghdHJhY2UubGVnZW5kZ3JvdXApIHJldHVybiB0cmFjZTsKICAgICAgCiAgICAgIC8vIGlmIGxlZ2VuZGdyb3VwIHdhcyBzcGVjaWZpZWQsIHJldHVybiBhbGwgdHJhY2VzIHRoYXQgbWF0Y2ggdGhlIGdyb3VwCiAgICAgIHZhciBsZWdlbmRncnBzID0gZC5kYXRhLm1hcChmdW5jdGlvbih0cmFjZSl7IHJldHVybiB0cmFjZS5sZWdlbmRncm91cDsgfSk7CiAgICAgIHZhciB0cmFjZXMgPSBbXTsKICAgICAgZm9yIChpID0gMDsgaSA8IGxlZ2VuZGdycHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAobGVnZW5kZ3Jwc1tpXSA9PSB0cmFjZS5sZWdlbmRncm91cCkgewogICAgICAgICAgdHJhY2VzLnB1c2goZC5kYXRhW2ldKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiB0cmFjZXM7CiAgICB9OwoKICAgIAogICAgLy8gc2VuZCB1c2VyIGlucHV0IGV2ZW50IGRhdGEgdG8gc2hpbnkKICAgIGlmIChIVE1MV2lkZ2V0cy5zaGlueU1vZGUgJiYgU2hpbnkuc2V0SW5wdXRWYWx1ZSkgewogICAgICAKICAgICAgLy8gU29tZSBldmVudHMgY2xlYXIgb3RoZXIgaW5wdXQgdmFsdWVzCiAgICAgIC8vIFRPRE86IGFsd2F5cyByZWdpc3RlciB0aGVzZT8KICAgICAgdmFyIGV2ZW50Q2xlYXJNYXAgPSB7CiAgICAgICAgcGxvdGx5X2Rlc2VsZWN0OiBbInBsb3RseV9zZWxlY3RlZCIsICJwbG90bHlfc2VsZWN0aW5nIiwgInBsb3RseV9icnVzaGVkIiwgInBsb3RseV9icnVzaGluZyIsICJwbG90bHlfY2xpY2siXSwKICAgICAgICBwbG90bHlfdW5ob3ZlcjogWyJwbG90bHlfaG92ZXIiXSwKICAgICAgICBwbG90bHlfZG91YmxlY2xpY2s6IFsicGxvdGx5X2NsaWNrIl0KICAgICAgfTsKICAgIAogICAgICBPYmplY3Qua2V5cyhldmVudENsZWFyTWFwKS5tYXAoZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgZ3JhcGhEaXYub24oZXZ0LCBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBpbnB1dHNUb0NsZWFyID0gZXZlbnRDbGVhck1hcFtldnRdOwogICAgICAgICAgaW5wdXRzVG9DbGVhci5tYXAoZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICAgICAgU2hpbnkuc2V0SW5wdXRWYWx1ZShpbnB1dCArICItIiArIHguc291cmNlLCBudWxsLCB7cHJpb3JpdHk6ICJldmVudCJ9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgCiAgICAgIHZhciBldmVudERhdGFGdW5jdGlvbk1hcCA9IHsKICAgICAgICBwbG90bHlfY2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X3N1bmJ1cnN0Y2xpY2s6IGV2ZW50RGF0YVdpdGhLZXksCiAgICAgICAgcGxvdGx5X2hvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIHBsb3RseV91bmhvdmVyOiBldmVudERhdGFXaXRoS2V5LAogICAgICAgIC8vIElmICdwbG90bHlfc2VsZWN0ZWQnIGhhcyBhbHJlYWR5IGJlZW4gZmlyZWQsIGFuZCB5b3UgY2xpY2sKICAgICAgICAvLyBvbiB0aGUgcGxvdCBhZnRlcndhcmRzLCB0aGlzIGV2ZW50IGZpcmVzIGB1bmRlZmluZWRgPyE/CiAgICAgICAgLy8gVGhhdCBtaWdodCBiZSBjb25zaWRlcmVkIGEgcGxvdGx5LmpzIGJ1ZywgYnV0IGl0IGRvZXNuJ3QgbWFrZSAKICAgICAgICAvLyBzZW5zZSBmb3IgdGhpcyBpbnB1dCBjaGFuZ2UgdG8gb2NjdXIgaWYgYGRgIGlzIGZhbHN5IGJlY2F1c2UsCiAgICAgICAgLy8gZXZlbiBpbiB0aGUgZW1wdHkgc2VsZWN0aW9uIGNhc2UsIGBkYCBpcyB0cnV0aHkgKGFuIG9iamVjdCksCiAgICAgICAgLy8gYW5kIHRoZSAncGxvdGx5X2Rlc2VsZWN0JyBldmVudCB3aWxsIHJlc2V0IHRoaXMgaW5wdXQKICAgICAgICBwbG90bHlfc2VsZWN0ZWQ6IGZ1bmN0aW9uKGQpIHsgaWYgKGQpIHsgcmV0dXJuIGV2ZW50RGF0YVdpdGhLZXkoZCk7IH0gfSwKICAgICAgICBwbG90bHlfc2VsZWN0aW5nOiBmdW5jdGlvbihkKSB7IGlmIChkKSB7IHJldHVybiBldmVudERhdGFXaXRoS2V5KGQpOyB9IH0sCiAgICAgICAgcGxvdGx5X2JydXNoZWQ6IGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIGlmIChkKSB7IHJldHVybiBkLnJhbmdlID8gZC5yYW5nZSA6IGQubGFzc29Qb2ludHM7IH0KICAgICAgICB9LAogICAgICAgIHBsb3RseV9icnVzaGluZzogZnVuY3Rpb24oZCkgewogICAgICAgICAgaWYgKGQpIHsgcmV0dXJuIGQucmFuZ2UgPyBkLnJhbmdlIDogZC5sYXNzb1BvaW50czsgfQogICAgICAgIH0sCiAgICAgICAgcGxvdGx5X2xlZ2VuZGNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrOiBsZWdlbmRFdmVudERhdGEsCiAgICAgICAgcGxvdGx5X2NsaWNrYW5ub3RhdGlvbjogZnVuY3Rpb24oZCkgeyByZXR1cm4gZC5mdWxsQW5ub3RhdGlvbiB9CiAgICAgIH07CiAgICAgIAogICAgICB2YXIgcmVnaXN0ZXJTaGlueVZhbHVlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgICB2YXIgZXZlbnREYXRhUHJlUHJvY2Vzc29yID0gZXZlbnREYXRhRnVuY3Rpb25NYXBbZXZlbnRdIHx8IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGQgPyBkIDogZWwuaWQgfTsKICAgICAgICAvLyBzb21lIGV2ZW50cyBhcmUgdW5pcXVlIHRvIHRoZSBSIHBhY2thZ2UKICAgICAgICB2YXIgcGxvdGx5SlNldmVudCA9IChldmVudCA9PSAicGxvdGx5X2JydXNoZWQiKSA/ICJwbG90bHlfc2VsZWN0ZWQiIDogKGV2ZW50ID09ICJwbG90bHlfYnJ1c2hpbmciKSA/ICJwbG90bHlfc2VsZWN0aW5nIiA6IGV2ZW50OwogICAgICAgIC8vIHJlZ2lzdGVyIHRoZSBldmVudAogICAgICAgIGdyYXBoRGl2Lm9uKHBsb3RseUpTZXZlbnQsIGZ1bmN0aW9uKGQpIHsKICAgICAgICAgIFNoaW55LnNldElucHV0VmFsdWUoCiAgICAgICAgICAgIGV2ZW50ICsgIi0iICsgeC5zb3VyY2UsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV2ZW50RGF0YVByZVByb2Nlc3NvcihkKSksCiAgICAgICAgICAgIHtwcmlvcml0eTogImV2ZW50In0KICAgICAgICAgICk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIAogICAgICB2YXIgc2hpbnlFdmVudHMgPSB4LnNoaW55RXZlbnRzIHx8IFtdOwogICAgICBzaGlueUV2ZW50cy5tYXAocmVnaXN0ZXJTaGlueVZhbHVlKTsKICAgIH0KICAgIAogICAgLy8gR2l2ZW4gYW4gYXJyYXkgb2Yge2N1cnZlTnVtYmVyOiB4LCBwb2ludE51bWJlcjogeX0gb2JqZWN0cywKICAgIC8vIHJldHVybiBhIGhhc2ggb2YgewogICAgLy8gICBzZXQxOiB7dmFsdWU6IFtrZXkxLCBrZXkyLCAuLi5dLCBfaXNTaW1wbGVLZXk6IGZhbHNlfSwgCiAgICAvLyAgIHNldDI6IHt2YWx1ZTogW2tleTMsIGtleTQsIC4uLl0sIF9pc1NpbXBsZUtleTogZmFsc2V9CiAgICAvLyB9CiAgICBmdW5jdGlvbiBwb2ludHNUb0tleXMocG9pbnRzKSB7CiAgICAgIHZhciBrZXlzQnlTZXQgPSB7fTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAKICAgICAgICB2YXIgdHJhY2UgPSBncmFwaERpdi5kYXRhW3BvaW50c1tpXS5jdXJ2ZU51bWJlcl07CiAgICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgIXRyYWNlLnNldCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIHNldCBkZWZhdWx0cyBmb3IgdGhpcyBrZXlTZXQKICAgICAgICAvLyBub3RlIHRoYXQgd2UgZG9uJ3QgdHJhY2sgdGhlIG5lc3RlZCBwcm9wZXJ0eSAoeWV0KSBzaW5jZSB3ZSBhbHdheXMgCiAgICAgICAgLy8gZW1pdCB0aGUgdW5pb24gLS0gaHR0cDovL2Nwc2lldmVydC5naXRodWIuaW8vdGFsa3MvMjAxNjEyMTJiLyMyMQogICAgICAgIGtleXNCeVNldFt0cmFjZS5zZXRdID0ga2V5c0J5U2V0W3RyYWNlLnNldF0gfHwgewogICAgICAgICAgdmFsdWU6IFtdLAogICAgICAgICAgX2lzU2ltcGxlS2V5OiB0cmFjZS5faXNTaW1wbGVLZXkKICAgICAgICB9OwogICAgICAgIAogICAgICAgIC8vIFVzZSBwb2ludE51bWJlciBieSBkZWZhdWx0LCBidXQgYWdncmVnYXRlZCB0cmFjZXMgc2hvdWxkIGVtaXQgcG9pbnROdW1iZXJzCiAgICAgICAgdmFyIHB0TnVtID0gcG9pbnRzW2ldLnBvaW50TnVtYmVyOwogICAgICAgIHZhciBoYXNQdE51bSA9IHR5cGVvZiBwdE51bSA9PT0gIm51bWJlciI7CiAgICAgICAgdmFyIHB0TnVtID0gaGFzUHROdW0gPyBwdE51bSA6IHBvaW50c1tpXS5wb2ludE51bWJlcnM7CiAgICAgICAgCiAgICAgICAgLy8gc2VsZWN0aW5nIGEgcG9pbnQgb2YgYSAic2ltcGxlIiB0cmFjZSBtZWFuczogc2VsZWN0IHRoZSAKICAgICAgICAvLyBlbnRpcmUga2V5IGF0dGFjaGVkIHRvIHRoaXMgdHJhY2UsIHdoaWNoIGlzIHVzZWZ1bCBmb3IsCiAgICAgICAgLy8gc2F5IGNsaWNraW5nIG9uIGEgZml0dGVkIGxpbmUgdG8gc2VsZWN0IGNvcnJlc3BvbmRpbmcgb2JzZXJ2YXRpb25zIAogICAgICAgIHZhciBrZXkgPSB0cmFjZS5faXNTaW1wbGVLZXkgPyB0cmFjZS5rZXkgOiBBcnJheS5pc0FycmF5KHB0TnVtKSA/IHB0TnVtLm1hcChmdW5jdGlvbihpZHgpIHsgcmV0dXJuIHRyYWNlLmtleVtpZHhdOyB9KSA6IHRyYWNlLmtleVtwdE51bV07CiAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDg2NTAyNS9tZXJnZS1mbGF0dGVuLWFuLWFycmF5LW9mLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgdmFyIGtleUZsYXQgPSB0cmFjZS5faXNOZXN0ZWRLZXkgPyBbXS5jb25jYXQuYXBwbHkoW10sIGtleSkgOiBrZXk7CiAgICAgICAgCiAgICAgICAgLy8gVE9ETzogYmV0dGVyIHRvIG9ubHkgYWRkIG5ldyB2YWx1ZXM/CiAgICAgICAga2V5c0J5U2V0W3RyYWNlLnNldF0udmFsdWUgPSBrZXlzQnlTZXRbdHJhY2Uuc2V0XS52YWx1ZS5jb25jYXQoa2V5RmxhdCk7CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBrZXlzQnlTZXQ7CiAgICB9CiAgICAKICAgIAogICAgeC5oaWdobGlnaHQuY29sb3IgPSB4LmhpZ2hsaWdodC5jb2xvciB8fCBbXTsKICAgIC8vIG1ha2Ugc3VyZSBoaWdobGlnaHQgY29sb3IgaXMgYW4gYXJyYXkKICAgIGlmICghQXJyYXkuaXNBcnJheSh4LmhpZ2hsaWdodC5jb2xvcikpIHsKICAgICAgeC5oaWdobGlnaHQuY29sb3IgPSBbeC5oaWdobGlnaHQuY29sb3JdOwogICAgfQoKICAgIHZhciB0cmFjZU1hbmFnZXIgPSBuZXcgVHJhY2VNYW5hZ2VyKGdyYXBoRGl2LCB4LmhpZ2hsaWdodCk7CgogICAgLy8gR2F0aGVyIGFsbCAqdW5pcXVlKiBzZXRzLgogICAgdmFyIGFsbFNldHMgPSBbXTsKICAgIGZvciAodmFyIGN1cnZlSWR4ID0gMDsgY3VydmVJZHggPCB4LmRhdGEubGVuZ3RoOyBjdXJ2ZUlkeCsrKSB7CiAgICAgIHZhciBuZXdTZXQgPSB4LmRhdGFbY3VydmVJZHhdLnNldDsKICAgICAgaWYgKG5ld1NldCkgewogICAgICAgIGlmIChhbGxTZXRzLmluZGV4T2YobmV3U2V0KSA9PT0gLTEpIHsKICAgICAgICAgIGFsbFNldHMucHVzaChuZXdTZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIHJlZ2lzdGVyIGV2ZW50IGxpc3RlbmVycyBmb3IgYWxsIHNldHMKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsU2V0cy5sZW5ndGg7IGkrKykgewogICAgICAKICAgICAgdmFyIHNldCA9IGFsbFNldHNbaV07CiAgICAgIHZhciBzZWxlY3Rpb24gPSBuZXcgY3Jvc3N0YWxrLlNlbGVjdGlvbkhhbmRsZShzZXQpOwogICAgICB2YXIgZmlsdGVyID0gbmV3IGNyb3NzdGFsay5GaWx0ZXJIYW5kbGUoc2V0KTsKICAgICAgCiAgICAgIHZhciBmaWx0ZXJDaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgcmVtb3ZlQnJ1c2goZWwpOwogICAgICAgIHRyYWNlTWFuYWdlci51cGRhdGVGaWx0ZXIoc2V0LCBlLnZhbHVlKTsKICAgICAgfTsKICAgICAgZmlsdGVyLm9uKCJjaGFuZ2UiLCBmaWx0ZXJDaGFuZ2UpOwogICAgICAKICAgICAgCiAgICAgIHZhciBzZWxlY3Rpb25DaGFuZ2UgPSBmdW5jdGlvbihlKSB7CiAgICAgICAgCiAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgJ3Bsb3RseV9zZWxlY3RlZCcgbm93IGZpcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkCiAgICAgICAgLy8gcG9pbnRzIChpbiBhZGRpdGlvbiB0byBuZXcgb25lcykgd2hlbiBob2xkaW5nIHNoaWZ0IGtleS4gSW4gb3VyIGNhc2UsCiAgICAgICAgLy8gd2UganVzdCB3YW50IHRoZSBuZXcga2V5cyAKICAgICAgICBpZiAoeC5oaWdobGlnaHQub24gPT09ICJwbG90bHlfc2VsZWN0ZWQiICYmIHguaGlnaGxpZ2h0LnBlcnNpc3RlbnRTaGlmdCkgewogICAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTE4NzUxOC9ob3ctdG8tZ2V0LXRoZS1kaWZmZXJlbmNlLWJldHdlZW4tdHdvLWFycmF5cy1pbi1qYXZhc2NyaXB0CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZGlmZiA9IGZ1bmN0aW9uKGEpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oaSkge3JldHVybiBhLmluZGV4T2YoaSkgPCAwO30pOwogICAgICAgICAgfTsKICAgICAgICAgIGUudmFsdWUgPSBlLnZhbHVlLmRpZmYoZS5vbGRWYWx1ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIGFycmF5IG9mICJldmVudCBvYmplY3RzIiB0cmFja2luZyB0aGUgc2VsZWN0aW9uIGhpc3RvcnkKICAgICAgICAvLyB0aGlzIGlzIHVzZWQgdG8gYXZvaWQgYWRkaW5nIHJlZHVuZGFudCBzZWxlY3Rpb25zCiAgICAgICAgdmFyIHNlbGVjdGlvbkhpc3RvcnkgPSBjcm9zc3RhbGsudmFyKCJwbG90bHlTZWxlY3Rpb25IaXN0b3J5IikuZ2V0KCkgfHwgW107CiAgICAgICAgCiAgICAgICAgLy8gQ29uc3RydWN0IGFuIGV2ZW50IG9iamVjdCAiZGVmaW5pbmciIHRoZSBjdXJyZW50IGV2ZW50LiAKICAgICAgICB2YXIgZXZlbnQgPSB7CiAgICAgICAgICByZWNlaXZlcklEOiB0cmFjZU1hbmFnZXIuZ2QuaWQsCiAgICAgICAgICBwbG90bHlTZWxlY3Rpb25Db2xvdXI6IGNyb3NzdGFsay5ncm91cChzZXQpLnZhcigicGxvdGx5U2VsZWN0aW9uQ29sb3VyIikuZ2V0KCkKICAgICAgICB9OwogICAgICAgIGV2ZW50W3NldF0gPSBlLnZhbHVlOwogICAgICAgIC8vIFRPRE86IGlzIHRoZXJlIGEgc21hcnRlciB3YXkgdG8gY2hlY2sgb2JqZWN0IGVxdWFsaXR5PwogICAgICAgIGlmIChzZWxlY3Rpb25IaXN0b3J5Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIHZhciBldiA9IEpTT04uc3RyaW5naWZ5KGV2ZW50KTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0aW9uSGlzdG9yeS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXIgc2VsID0gSlNPTi5zdHJpbmdpZnkoc2VsZWN0aW9uSGlzdG9yeVtpXSk7CiAgICAgICAgICAgIGlmIChzZWwgPT0gZXYpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gYWNjdW11bGF0ZSBoaXN0b3J5IGZvciBwZXJzaXN0ZW50IHNlbGVjdGlvbgogICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCkgewogICAgICAgICAgc2VsZWN0aW9uSGlzdG9yeSA9IFtldmVudF07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbGVjdGlvbkhpc3RvcnkucHVzaChldmVudCk7CiAgICAgICAgfQogICAgICAgIGNyb3NzdGFsay52YXIoInBsb3RseVNlbGVjdGlvbkhpc3RvcnkiKS5zZXQoc2VsZWN0aW9uSGlzdG9yeSk7CiAgICAgICAgCiAgICAgICAgLy8gZG8gdGhlIGFjdHVhbCB1cGRhdGluZyBvZiB0cmFjZXMsIGZyYW1lcywgYW5kIHRoZSBzZWxlY3RpemUgd2lkZ2V0CiAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIGUudmFsdWUpOwogICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3RpemUvc2VsZWN0aXplLmpzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpLm1kI21ldGhvZHNfaXRlbXMKICAgICAgICBpZiAoeC5zZWxlY3RpemUpIHsKICAgICAgICAgIGlmICgheC5oaWdobGlnaHQucGVyc2lzdGVudCB8fCBlLnZhbHVlID09PSBudWxsKSB7CiAgICAgICAgICAgIHNlbGVjdGl6ZS5jbGVhcih0cnVlKTsKICAgICAgICAgIH0KICAgICAgICAgIHNlbGVjdGl6ZS5hZGRJdGVtcyhlLnZhbHVlLCB0cnVlKTsKICAgICAgICAgIHNlbGVjdGl6ZS5jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZWxlY3Rpb24ub24oImNoYW5nZSIsIHNlbGVjdGlvbkNoYW5nZSk7CiAgICAgIAogICAgICAvLyBTZXQgYSBjcm9zc3RhbGsgdmFyaWFibGUgc2VsZWN0aW9uIHZhbHVlLCB0cmlnZ2VyaW5nIGFuIHVwZGF0ZQogICAgICB2YXIgdHVybk9uID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlKSB7CiAgICAgICAgICB2YXIgc2VsZWN0ZWRLZXlzID0gcG9pbnRzVG9LZXlzKGUucG9pbnRzKTsKICAgICAgICAgIC8vIEtleXMgYXJlIGdyb3VwIG5hbWVzLCB2YWx1ZXMgYXJlIGFycmF5IG9mIHNlbGVjdGVkIGtleXMgZnJvbSBncm91cC4KICAgICAgICAgIGZvciAodmFyIHNldCBpbiBzZWxlY3RlZEtleXMpIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkS2V5cy5oYXNPd25Qcm9wZXJ0eShzZXQpKSB7CiAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldChzZWxlY3RlZEtleXNbc2V0XS52YWx1ZSwge3NlbmRlcjogZWx9KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKHguaGlnaGxpZ2h0LmRlYm91bmNlID4gMCkgewogICAgICAgIHR1cm5PbiA9IGRlYm91bmNlKHR1cm5PbiwgeC5oaWdobGlnaHQuZGVib3VuY2UpOwogICAgICB9CiAgICAgIGdyYXBoRGl2Lm9uKHguaGlnaGxpZ2h0Lm9uLCB0dXJuT24pOwogICAgICAKICAgICAgZ3JhcGhEaXYub24oeC5oaWdobGlnaHQub2ZmLCBmdW5jdGlvbiB0dXJuT2ZmKGUpIHsKICAgICAgICAvLyByZW1vdmUgYW55IHZpc3VhbCBjbHVlcwogICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAvLyByZW1vdmUgYW55IHNlbGVjdGlvbiBoaXN0b3J5CiAgICAgICAgY3Jvc3N0YWxrLnZhcigicGxvdGx5U2VsZWN0aW9uSGlzdG9yeSIpLnNldChudWxsKTsKICAgICAgICAvLyB0cmlnZ2VyIHRoZSBhY3R1YWwgcmVtb3ZhbCBvZiBzZWxlY3Rpb24gdHJhY2VzCiAgICAgICAgc2VsZWN0aW9uLnNldChudWxsLCB7c2VuZGVyOiBlbH0pOwogICAgICB9KTsKICAgICAgICAgIAogICAgICAvLyByZWdpc3RlciBhIGNhbGxiYWNrIGZvciBzZWxlY3RpemUgc28gdGhhdCB0aGVyZSBpcyBiaS1kaXJlY3Rpb25hbAogICAgICAvLyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHdpZGdldCBhbmQgZGlyZWN0IG1hbmlwdWxhdGlvbiBldmVudHMKICAgICAgaWYgKHguc2VsZWN0aXplKSB7CiAgICAgICAgdmFyIHNlbGVjdGl6ZUlEID0gT2JqZWN0LmtleXMoeC5zZWxlY3RpemUpW2ldOwogICAgICAgIHZhciBpdGVtcyA9IHguc2VsZWN0aXplW3NlbGVjdGl6ZUlEXS5pdGVtczsKICAgICAgICB2YXIgZmlyc3QgPSBbe3ZhbHVlOiAiIiwgbGFiZWw6ICIoQWxsKSJ9XTsKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIG9wdGlvbnM6IGZpcnN0LmNvbmNhdChpdGVtcyksCiAgICAgICAgICBzZWFyY2hGaWVsZDogImxhYmVsIiwKICAgICAgICAgIHZhbHVlRmllbGQ6ICJ2YWx1ZSIsCiAgICAgICAgICBsYWJlbEZpZWxkOiAibGFiZWwiLAogICAgICAgICAgbWF4SXRlbXM6IDUwCiAgICAgICAgfTsKICAgICAgICB2YXIgc2VsZWN0ID0gJCgiIyIgKyBzZWxlY3RpemVJRCkuZmluZCgic2VsZWN0IilbMF07CiAgICAgICAgdmFyIHNlbGVjdGl6ZSA9ICQoc2VsZWN0KS5zZWxlY3RpemUob3B0cylbMF0uc2VsZWN0aXplOwogICAgICAgIC8vIE5PVEU6IHRoaXMgY2FsbGJhY2sgaXMgdHJpZ2dlcmVkIHdoZW4gKmRpcmVjdGx5KiBhbHRlcmluZyAKICAgICAgICAvLyBkcm9wZG93biBpdGVtcwogICAgICAgIHNlbGVjdGl6ZS5vbigiY2hhbmdlIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgY3VycmVudEl0ZW1zID0gdHJhY2VNYW5hZ2VyLmdyb3VwU2VsZWN0aW9uc1tzZXRdIHx8IFtdOwogICAgICAgICAgaWYgKCF4LmhpZ2hsaWdodC5wZXJzaXN0ZW50KSB7CiAgICAgICAgICAgIHJlbW92ZUJydXNoKGVsKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50SXRlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBzZWxlY3RpemUucmVtb3ZlSXRlbShjdXJyZW50SXRlbXNbaV0sIHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBzZWxlY3RpemUuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uKGlkeCkgeyAKICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRJdGVtcy5pbmRleE9mKGlkeCkgPCAwOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgbmV3SXRlbXMpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSXRlbSBoYXMgYmVlbiByZW1vdmVkLi4uCiAgICAgICAgICAgIC8vIFRPRE86IHRoaXMgbG9naWMgd29uJ3Qgd29yayBmb3IgZHluYW1pY2FsbHkgY2hhbmdpbmcgcGFsZXR0ZSAKICAgICAgICAgICAgdHJhY2VNYW5hZ2VyLnVwZGF0ZVNlbGVjdGlvbihzZXQsIG51bGwpOwogICAgICAgICAgICB0cmFjZU1hbmFnZXIudXBkYXRlU2VsZWN0aW9uKHNldCwgc2VsZWN0aXplLml0ZW1zKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSAvLyBlbmQgb2Ygc2VsZWN0aW9uQ2hhbmdlCiAgICAKICB9IC8vIGVuZCBvZiByZW5kZXJWYWx1ZQp9KTsgLy8gZW5kIG9mIHdpZGdldCBkZWZpbml0aW9uCgovKioKICogQHBhcmFtIGdyYXBoRGl2IFRoZSBQbG90bHkgZ3JhcGggZGl2CiAqIEBwYXJhbSBoaWdobGlnaHQgQW4gb2JqZWN0IHdpdGggb3B0aW9ucyBmb3IgdXBkYXRpbmcgc2VsZWN0aW9uKHMpCiAqLwpmdW5jdGlvbiBUcmFjZU1hbmFnZXIoZ3JhcGhEaXYsIGhpZ2hsaWdodCkgewogIC8vIFRoZSBQbG90bHkgZ3JhcGggZGl2CiAgdGhpcy5nZCA9IGdyYXBoRGl2OwoKICAvLyBQcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgZGF0YS4KICAvLyBUT0RPOiB0cnkgdXNpbmcgTGliLmV4dGVuZEZsYXQoKSBhcyBkb25lIGluICAKICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGxvdGx5L3Bsb3RseS5qcy9wdWxsLzExMzYgCiAgdGhpcy5vcmlnRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ3JhcGhEaXYuZGF0YSkpOwogIAogIC8vIGF2b2lkIGRvaW5nIHRoaXMgb3ZlciBhbmQgb3ZlcgogIHRoaXMub3JpZ09wYWNpdHkgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHRoaXMub3JpZ09wYWNpdHlbaV0gPSB0aGlzLm9yaWdEYXRhW2ldLm9wYWNpdHkgPT09IDAgPyAwIDogKHRoaXMub3JpZ0RhdGFbaV0ub3BhY2l0eSB8fCAxKTsKICB9CgogIC8vIGtleTogZ3JvdXAgbmFtZSwgdmFsdWU6IG51bGwgb3IgYXJyYXkgb2Yga2V5cyByZXByZXNlbnRpbmcgdGhlCiAgLy8gbW9zdCByZWNlbnRseSByZWNlaXZlZCBzZWxlY3Rpb24gZm9yIHRoYXQgZ3JvdXAuCiAgdGhpcy5ncm91cFNlbGVjdGlvbnMgPSB7fTsKICAKICAvLyBzZWxlY3Rpb24gcGFyYW1ldGVycyAoZS5nLiwgdHJhbnNpZW50IHZlcnN1cyBwZXJzaXN0ZW50IHNlbGVjdGlvbikKICB0aGlzLmhpZ2hsaWdodCA9IGhpZ2hsaWdodDsKfQoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkgewogIC8vIFRPRE86IFVuaG9vayBhbGwgZXZlbnQgaGFuZGxlcnMKfTsKClRyYWNlTWFuYWdlci5wcm90b3R5cGUudXBkYXRlRmlsdGVyID0gZnVuY3Rpb24oZ3JvdXAsIGtleXMpIHsKCiAgaWYgKHR5cGVvZihrZXlzKSA9PT0gInVuZGVmaW5lZCIgfHwga2V5cyA9PT0gbnVsbCkgewogICAgCiAgICB0aGlzLmdkLmRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ0RhdGEpKTsKICAgIAogIH0gZWxzZSB7CiAgCiAgICB2YXIgdHJhY2VzID0gW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIHRyYWNlID0gdGhpcy5vcmlnRGF0YVtpXTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIHZhciBtYXRjaEZ1bmMgPSBnZXRNYXRjaEZ1bmModHJhY2UpOwogICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyh0cmFjZS5rZXksIGtleXMpOwogICAgICAKICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkgewogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICAvLyBzdWJzZXRBcnJheUF0dHJzIGRvZXNuJ3QgbXV0YXRlIHRyYWNlIChpdCBtYWtlcyBhIG1vZGlmaWVkIGNsb25lKQogICAgICAgICAgdHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKHRyYWNlLCBtYXRjaGVzKTsKICAgICAgICB9CiAgICAgICAgdHJhY2VzLnB1c2godHJhY2UpOwogICAgICB9CiAgICB9CiAgfQogIAogIHRoaXMuZ2QuZGF0YSA9IHRyYWNlczsKICBQbG90bHkucmVkcmF3KHRoaXMuZ2QpOwogIAogIC8vIE5PVEU6IHdlIHB1cnBvc2VseSBkbyBfbm90XyByZXN0b3JlIHNlbGVjdGlvbihzKSwgc2luY2Ugb24gZmlsdGVyLAogIC8vIGF4aXMgbGlrZWx5IHdpbGwgdXBkYXRlLCBjaGFuZ2luZyB0aGUgcGl4ZWwgLT4gZGF0YSBtYXBwaW5nLCBsZWFkaW5nIAogIC8vIHRvIGEgbGlrZWx5IG1pc21hdGNoIGluIHRoZSBicnVzaCBvdXRsaW5lIGFuZCBoaWdobGlnaHRlZCBtYXJrcwogIAp9OwoKVHJhY2VNYW5hZ2VyLnByb3RvdHlwZS51cGRhdGVTZWxlY3Rpb24gPSBmdW5jdGlvbihncm91cCwga2V5cykgewogIAogIGlmIChrZXlzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGtleXMpKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQga2V5cyBhcmd1bWVudDsgbnVsbCBvciBhcnJheSBleHBlY3RlZCIpOwogIH0KICAKICAvLyBpZiBzZWxlY3Rpb24gaGFzIGJlZW4gY2xlYXJlZCwgb3IgaWYgdGhpcyBpcyB0cmFuc2llbnQKICAvLyBzZWxlY3Rpb24sIGRlbGV0ZSB0aGUgInNlbGVjdGlvbiB0cmFjZXMiCiAgdmFyIG5OZXdUcmFjZXMgPSB0aGlzLmdkLmRhdGEubGVuZ3RoIC0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgaWYgKGtleXMgPT09IG51bGwgfHwgIXRoaXMuaGlnaGxpZ2h0LnBlcnNpc3RlbnQgJiYgbk5ld1RyYWNlcyA+IDApIHsKICAgIHZhciB0cmFjZXNUb1JlbW92ZSA9IFtdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmdkLmRhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXMuZ2QuZGF0YVtpXS5faXNDcm9zc3RhbGtUcmFjZSkgdHJhY2VzVG9SZW1vdmUucHVzaChpKTsKICAgIH0KICAgIFBsb3RseS5kZWxldGVUcmFjZXModGhpcy5nZCwgdHJhY2VzVG9SZW1vdmUpOwogICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdID0ga2V5czsKICB9IGVsc2UgewogICAgLy8gYWRkIHRvIHRoZSBncm91cFNlbGVjdGlvbiwgcmF0aGVyIHRoYW4gb3ZlcndyaXRpbmcgaXQKICAgIC8vIFRPRE86IGNhbiB0aGlzIGJlIHJlbW92ZWQ/CiAgICB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gPSB0aGlzLmdyb3VwU2VsZWN0aW9uc1tncm91cF0gfHwgW107CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGsgPSBrZXlzW2ldOwogICAgICBpZiAodGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLmluZGV4T2YoaykgPCAwKSB7CiAgICAgICAgdGhpcy5ncm91cFNlbGVjdGlvbnNbZ3JvdXBdLnB1c2goayk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgaWYgKGtleXMgPT09IG51bGwpIHsKICAgIAogICAgUGxvdGx5LnJlc3R5bGUodGhpcy5nZCwgeyJvcGFjaXR5IjogdGhpcy5vcmlnT3BhY2l0eX0pOwogICAgCiAgfSBlbHNlIGlmIChrZXlzLmxlbmd0aCA+PSAxKSB7CiAgICAKICAgIC8vIHBsYWNlaG9sZGVyIGZvciBuZXcgInNlbGVjdGlvbiB0cmFjZXMiCiAgICB2YXIgdHJhY2VzID0gW107CiAgICAvLyB0aGlzIHZhcmlhYmxlIGlzIHNldCBpbiBSL2hpZ2hsaWdodC5SCiAgICB2YXIgc2VsZWN0aW9uQ29sb3VyID0gY3Jvc3N0YWxrLmdyb3VwKGdyb3VwKS52YXIoInBsb3RseVNlbGVjdGlvbkNvbG91ciIpLmdldCgpIHx8IAogICAgICB0aGlzLmhpZ2hsaWdodC5jb2xvclswXTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3JpZ0RhdGEubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETzogdHJ5IHVzaW5nIExpYi5leHRlbmRGbGF0KCkgYXMgZG9uZSBpbiAgCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbG90bHkvcGxvdGx5LmpzL3B1bGwvMTEzNiAKICAgICAgdmFyIHRyYWNlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdkLmRhdGFbaV0pKTsKICAgICAgaWYgKCF0cmFjZS5rZXkgfHwgdHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIEdldCBzb3J0ZWQgYXJyYXkgb2YgbWF0Y2hpbmcgaW5kaWNlcyBpbiB0cmFjZS5rZXkKICAgICAgdmFyIG1hdGNoRnVuYyA9IGdldE1hdGNoRnVuYyh0cmFjZSk7CiAgICAgIHZhciBtYXRjaGVzID0gbWF0Y2hGdW5jKHRyYWNlLmtleSwga2V5cyk7CiAgICAgIAogICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhICJzaW1wbGUiIGtleSwgdGhhdCBtZWFucyBzZWxlY3QgdGhlIGVudGlyZSB0cmFjZQogICAgICAgIGlmICghdHJhY2UuX2lzU2ltcGxlS2V5KSB7CiAgICAgICAgICB0cmFjZSA9IHN1YnNldEFycmF5QXR0cnModHJhY2UsIG1hdGNoZXMpOwogICAgICAgIH0KICAgICAgICAvLyByZWFjaCBpbnRvIHRoZSBmdWxsIHRyYWNlIG9iamVjdCBzbyB3ZSBjYW4gcHJvcGVybHkgcmVmbGVjdCB0aGUgCiAgICAgICAgLy8gc2VsZWN0aW9uIGF0dHJpYnV0ZXMgaW4gZXZlcnkgdmlldwogICAgICAgIHZhciBkID0gdGhpcy5nZC5fZnVsbERhdGFbaV07CiAgICAgICAgCiAgICAgICAgLyogCiAgICAgICAgLyBSZWN1cnNpdmVseSBpbmhlcml0IHNlbGVjdGlvbiBhdHRyaWJ1dGVzIGZyb20gdmFyaW91cyBzb3VyY2VzLCAKICAgICAgICAvIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6CiAgICAgICAgLyAgKDEpIG9mZmljaWFsIHBsb3RseS5qcyBzZWxlY3RlZCBhdHRyaWJ1dGUKICAgICAgICAvICAoMikgaGlnaGxpZ2h0KHNlbGVjdGVkID0gYXR0cnNfc2VsZWN0ZWQoLi4uKSkKICAgICAgICAqLwogICAgICAgIC8vIFRPRE86IGl0IHdvdWxkIGJlIG5lYXQgdG8gaGF2ZSBhIGRyb3Bkb3duIHRvIGR5bmFtaWNhbGx5IHNwZWNpZnkgdGhlc2UhCiAgICAgICAgJC5leHRlbmQodHJ1ZSwgdHJhY2UsIHRoaXMuaGlnaGxpZ2h0LnNlbGVjdGVkKTsKICAgICAgICAKICAgICAgICAvLyBpZiBpdCBpcyBkZWZpbmVkLCBvdmVycmlkZSBjb2xvciB3aXRoIHRoZSAiZHluYW1pYyBicnVzaCBjb2xvciIiCiAgICAgICAgaWYgKGQubWFya2VyKSB7CiAgICAgICAgICB0cmFjZS5tYXJrZXIgPSB0cmFjZS5tYXJrZXIgfHwge307CiAgICAgICAgICB0cmFjZS5tYXJrZXIuY29sb3IgPSAgc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLm1hcmtlci5jb2xvciB8fCBkLm1hcmtlci5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgdHJhY2UubGluZSA9IHRyYWNlLmxpbmUgfHwge307CiAgICAgICAgICB0cmFjZS5saW5lLmNvbG9yID0gIHNlbGVjdGlvbkNvbG91ciB8fCB0cmFjZS5saW5lLmNvbG9yIHx8IGQubGluZS5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQudGV4dGZvbnQpIHsKICAgICAgICAgIHRyYWNlLnRleHRmb250ID0gdHJhY2UudGV4dGZvbnQgfHwge307CiAgICAgICAgICB0cmFjZS50ZXh0Zm9udC5jb2xvciA9ICBzZWxlY3Rpb25Db2xvdXIgfHwgdHJhY2UudGV4dGZvbnQuY29sb3IgfHwgZC50ZXh0Zm9udC5jb2xvcjsKICAgICAgICB9CiAgICAgICAgaWYgKGQuZmlsbGNvbG9yKSB7CiAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgc2VsZWN0aW9uQ29sb3VyIGluaGVyaXQgYWxwaGEgZnJvbSB0aGUgZXhpc3RpbmcgZmlsbGNvbG9yPwogICAgICAgICAgdHJhY2UuZmlsbGNvbG9yID0gc2VsZWN0aW9uQ29sb3VyIHx8IHRyYWNlLmZpbGxjb2xvciB8fCBkLmZpbGxjb2xvcjsKICAgICAgICB9CiAgICAgICAgLy8gYXR0YWNoIGEgc2Vuc2libGUgbmFtZS9sZWdlbmRncm91cAogICAgICAgIHRyYWNlLm5hbWUgPSB0cmFjZS5uYW1lIHx8IGtleXMuam9pbigiPGJyIC8+Iik7CiAgICAgICAgdHJhY2UubGVnZW5kZ3JvdXAgPSB0cmFjZS5sZWdlbmRncm91cCB8fCBrZXlzLmpvaW4oIjxiciAvPiIpOwogICAgICAgIAogICAgICAgIC8vIGtlZXAgdHJhY2sgb2YgbWFwcGluZyBiZXR3ZWVuIHRoaXMgbmV3IHRyYWNlIGFuZCB0aGUgdHJhY2UgaXQgdGFyZ2V0cwogICAgICAgIC8vIChuZWNlc3NhcnkgZm9yIHVwZGF0aW5nIGZyYW1lcyB0byByZWZsZWN0IHRoZSBzZWxlY3Rpb24gdHJhY2VzKQogICAgICAgIHRyYWNlLl9vcmlnaW5hbEluZGV4ID0gaTsKICAgICAgICB0cmFjZS5fbmV3SW5kZXggPSB0aGlzLmdkLl9mdWxsRGF0YS5sZW5ndGggKyB0cmFjZXMubGVuZ3RoOwogICAgICAgIHRyYWNlLl9pc0Nyb3NzdGFsa1RyYWNlID0gdHJ1ZTsKICAgICAgICB0cmFjZXMucHVzaCh0cmFjZSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgaWYgKHRyYWNlcy5sZW5ndGggPiAwKSB7CiAgICAgIAogICAgICBQbG90bHkuYWRkVHJhY2VzKHRoaXMuZ2QsIHRyYWNlcykudGhlbihmdW5jdGlvbihnZCkgewogICAgICAgIC8vIGluY3JlbWVudGFsbHkgYWRkIHNlbGVjdGlvbiB0cmFjZXMgdG8gZnJhbWVzCiAgICAgICAgLy8gKHRoaXMgaXMgaGVhdmlseSBpbnNwaXJlZCBieSBQbG90bHkuUGxvdHMubW9kaWZ5RnJhbWVzKCkgCiAgICAgICAgLy8gaW4gc3JjL3Bsb3RzL3Bsb3RzLmpzKQogICAgICAgIHZhciBfaGFzaCA9IGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoOwogICAgICAgIHZhciBfZnJhbWVzID0gZ2QuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMgfHwgW107CiAgICAgICAgCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfZnJhbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIGFkZCB0byBfZnJhbWVzW2ldLnRyYWNlcyAqaWYqIHRoaXMgZnJhbWUgcmVmZXJlbmNlcyBzZWxlY3RlZCB0cmFjZShzKQogICAgICAgICAgdmFyIG5ld0luZGljZXMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdHJhY2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIHZhciB0ciA9IHRyYWNlc1tqXTsKICAgICAgICAgICAgaWYgKF9mcmFtZXNbaV0udHJhY2VzLmluZGV4T2YodHIuX29yaWdpbmFsSW5kZXgpID4gLTEpIHsKICAgICAgICAgICAgICBuZXdJbmRpY2VzLnB1c2godHIuX25ld0luZGV4KTsKICAgICAgICAgICAgICBfZnJhbWVzW2ldLnRyYWNlcy5wdXNoKHRyLl9uZXdJbmRleCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gbm90aGluZyB0byBkby4uLgogICAgICAgICAgaWYgKG5ld0luZGljZXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICB2YXIgY3RyID0gMDsKICAgICAgICAgIHZhciBuRnJhbWVUcmFjZXMgPSBfZnJhbWVzW2ldLmRhdGEubGVuZ3RoOwogICAgICAgICAgCiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5GcmFtZVRyYWNlczsgaisrKSB7CiAgICAgICAgICAgIHZhciBmcmFtZVRyYWNlID0gX2ZyYW1lc1tpXS5kYXRhW2pdOwogICAgICAgICAgICBpZiAoIWZyYW1lVHJhY2Uua2V5IHx8IGZyYW1lVHJhY2Uuc2V0ICE9PSBncm91cCkgewogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgbWF0Y2hGdW5jID0gZ2V0TWF0Y2hGdW5jKGZyYW1lVHJhY2UpOwogICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IG1hdGNoRnVuYyhmcmFtZVRyYWNlLmtleSwga2V5cyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKCF0cmFjZS5faXNTaW1wbGVLZXkpIHsKICAgICAgICAgICAgICAgIGZyYW1lVHJhY2UgPSBzdWJzZXRBcnJheUF0dHJzKGZyYW1lVHJhY2UsIG1hdGNoZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB2YXIgZCA9IGdkLl9mdWxsRGF0YVtuZXdJbmRpY2VzW2N0cl1dOwogICAgICAgICAgICAgIGlmIChkLm1hcmtlcikgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5tYXJrZXIgPSBkLm1hcmtlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKGQubGluZSkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS5saW5lID0gZC5saW5lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoZC50ZXh0Zm9udCkgewogICAgICAgICAgICAgICAgZnJhbWVUcmFjZS50ZXh0Zm9udCA9IGQudGV4dGZvbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGN0ciA9IGN0ciArIDE7CiAgICAgICAgICAgICAgX2ZyYW1lc1tpXS5kYXRhLnB1c2goZnJhbWVUcmFjZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIAogICAgICAgICAgLy8gdXBkYXRlIGdkLl90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoCiAgICAgICAgICBfaGFzaFtfZnJhbWVzW2ldLm5hbWVdID0gX2ZyYW1lc1tpXTsKICAgICAgICB9CiAgICAgIAogICAgICB9KTsKICAgICAgCiAgICAgIC8vIGRpbSB0cmFjZXMgdGhhdCBoYXZlIGEgc2V0IG1hdGNoaW5nIHRoZSBzZXQgb2Ygc2VsZWN0aW9uIHNldHMKICAgICAgdmFyIHRyYWNlc1RvRGltID0gW10sCiAgICAgICAgICBvcGFjaXRpZXMgPSBbXSwKICAgICAgICAgIHNldHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwU2VsZWN0aW9ucyksCiAgICAgICAgICBuID0gdGhpcy5vcmlnRGF0YS5sZW5ndGg7CiAgICAgICAgICAKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2YXIgb3BhY2l0eSA9IHRoaXMub3JpZ09wYWNpdHlbaV0gfHwgMTsKICAgICAgICAvLyBoYXZlIHdlIGFscmVhZHkgZGltbWVkIHRoaXMgdHJhY2U/IE9yIGlzIHRoaXMgZXZlbiB3b3J0aCBkb2luZz8KICAgICAgICBpZiAob3BhY2l0eSAhPT0gdGhpcy5nZC5fZnVsbERhdGFbaV0ub3BhY2l0eSB8fCB0aGlzLmhpZ2hsaWdodC5vcGFjaXR5RGltID09PSAxKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgLy8gaXMgdGhpcyBzZXQgYW4gZWxlbWVudCBvZiB0aGUgc2V0IG9mIHNlbGVjdGlvbiBzZXRzPwogICAgICAgIHZhciBtYXRjaGVzID0gZmluZE1hdGNoZXMoc2V0cywgW3RoaXMuZ2QuZGF0YVtpXS5zZXRdKTsKICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGgpIHsKICAgICAgICAgIHRyYWNlc1RvRGltLnB1c2goaSk7CiAgICAgICAgICBvcGFjaXRpZXMucHVzaChvcGFjaXR5ICogdGhpcy5oaWdobGlnaHQub3BhY2l0eURpbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICBpZiAodHJhY2VzVG9EaW0ubGVuZ3RoID4gMCkgewogICAgICAgIFBsb3RseS5yZXN0eWxlKHRoaXMuZ2QsIHsib3BhY2l0eSI6IG9wYWNpdGllc30sIHRyYWNlc1RvRGltKTsKICAgICAgICAvLyB0dXJuIG9mZiB0aGUgc2VsZWN0ZWQvdW5zZWxlY3RlZCBBUEkKICAgICAgICBQbG90bHkucmVzdHlsZSh0aGlzLmdkLCB7InNlbGVjdGVkcG9pbnRzIjogbnVsbH0pOwogICAgICB9CiAgICAgIAogICAgfQogICAgCiAgfQp9OwoKLyogCk5vdGU6IGluIGFsbCBvZiB0aGVzZSBtYXRjaCBmdW5jdGlvbnMsIHdlIGFzc3VtZSBuZWVkbGVTZXQgKGkuZS4gdGhlIHNlbGVjdGVkIGtleXMpCmlzIGEgMUQgKG9yIGZsYXQpIGFycmF5LiBUaGUgcmVhbCBkaWZmZXJlbmNlIGlzIHRoZSBtZWFuaW5nIG9mIGhheXN0YWNrLgpmaW5kTWF0Y2hlcygpIGRvZXMgdGhlIHVzdWFsIHRoaW5nIHlvdSdkIGV4cGVjdCBmb3IgCmxpbmtlZCBicnVzaGluZyBvbiBhIHNjYXR0ZXJwbG90IG1hdHJpeC4gZmluZFNpbXBsZU1hdGNoZXMoKSByZXR1cm5zIGEgbWF0Y2ggaWZmIApoYXlzdGFjayBpcyBhIHN1YnNldCBvZiB0aGUgbmVlZGxlU2V0LiBmaW5kTmVzdGVkTWF0Y2hlcygpIHJldHVybnMgCiovCgpmdW5jdGlvbiBnZXRNYXRjaEZ1bmModHJhY2UpIHsKICByZXR1cm4gKHRyYWNlLl9pc05lc3RlZEtleSkgPyBmaW5kTmVzdGVkTWF0Y2hlcyA6IAogICAgKHRyYWNlLl9pc1NpbXBsZUtleSkgPyBmaW5kU2ltcGxlTWF0Y2hlcyA6IGZpbmRNYXRjaGVzOwp9CgovLyBmaW5kIG1hdGNoZXMgZm9yICJmbGF0IiBrZXlzCmZ1bmN0aW9uIGZpbmRNYXRjaGVzKGhheXN0YWNrLCBuZWVkbGVTZXQpIHsKICB2YXIgbWF0Y2hlcyA9IFtdOwogIGhheXN0YWNrLmZvckVhY2goZnVuY3Rpb24ob2JqLCBpKSB7CiAgICBpZiAob2JqID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKG9iaikgPj0gMCkgewogICAgICBtYXRjaGVzLnB1c2goaSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG1hdGNoZXM7Cn0KCi8vIGZpbmQgbWF0Y2hlcyBmb3IgInNpbXBsZSIga2V5cwpmdW5jdGlvbiBmaW5kU2ltcGxlTWF0Y2hlcyhoYXlzdGFjaywgbmVlZGxlU2V0KSB7CiAgdmFyIG1hdGNoID0gaGF5c3RhY2suZXZlcnkoZnVuY3Rpb24odmFsKSB7CiAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IG5lZWRsZVNldC5pbmRleE9mKHZhbCkgPj0gMDsKICB9KTsKICAvLyB5ZXMsIHRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2Ugb3RoZXIgdGhhbiBjb25mb3JtaW5nIAogIC8vIHRvIHRoZSBvdXRwdXQgdHlwZSBvZiB0aGUgb3RoZXIgbWF0Y2ggZnVuY3Rpb25zCiAgcmV0dXJuIChtYXRjaCkgPyBbMF0gOiBbXQp9CgovLyBmaW5kIG1hdGNoZXMgZm9yIGEgIm5lc3RlZCIgaGF5c3RhY2sgKDJEIGFycmF5cykKZnVuY3Rpb24gZmluZE5lc3RlZE1hdGNoZXMoaGF5c3RhY2ssIG5lZWRsZVNldCkgewogIHZhciBtYXRjaGVzID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBoYXlzdGFjay5sZW5ndGg7IGkrKykgewogICAgdmFyIGhheSA9IGhheXN0YWNrW2ldOwogICAgdmFyIG1hdGNoID0gaGF5LmV2ZXJ5KGZ1bmN0aW9uKHZhbCkgeyAKICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBuZWVkbGVTZXQuaW5kZXhPZih2YWwpID49IDA7IAogICAgfSk7CiAgICBpZiAobWF0Y2gpIHsKICAgICAgbWF0Y2hlcy5wdXNoKGkpOwogICAgfQogIH0KICByZXR1cm4gbWF0Y2hlczsKfQoKZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmopIHsKICByZXR1cm4gKAogICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nICYmCiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSA9PT0gT2JqZWN0LnByb3RvdHlwZQogICk7Cn0KCmZ1bmN0aW9uIHN1YnNldEFycmF5QXR0cnMob2JqLCBpbmRpY2VzKSB7CiAgdmFyIG5ld09iaiA9IHt9OwogIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbihrKSB7CiAgICB2YXIgdmFsID0gb2JqW2tdOwoKICAgIGlmIChrLmNoYXJBdCgwKSA9PT0gIl8iKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoayA9PT0gInRyYW5zZm9ybXMiICYmIEFycmF5LmlzQXJyYXkodmFsKSkgewogICAgICBuZXdPYmpba10gPSB2YWwubWFwKGZ1bmN0aW9uKHRyYW5zZm9ybSkgewogICAgICAgIHJldHVybiBzdWJzZXRBcnJheUF0dHJzKHRyYW5zZm9ybSwgaW5kaWNlcyk7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmIChrID09PSAiY29sb3JzY2FsZSIgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHZhbDsKICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5QXR0cnModmFsLCBpbmRpY2VzKTsKICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgIG5ld09ialtrXSA9IHN1YnNldEFycmF5KHZhbCwgaW5kaWNlcyk7CiAgICB9IGVsc2UgewogICAgICBuZXdPYmpba10gPSB2YWw7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld09iajsKfQoKZnVuY3Rpb24gc3Vic2V0QXJyYXkoYXJyLCBpbmRpY2VzKSB7CiAgdmFyIHJlc3VsdCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykgewogICAgcmVzdWx0LnB1c2goYXJyW2luZGljZXNbaV1dKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHJlbW92aW5nIHBsb3RseSdzIGJydXNoIApmdW5jdGlvbiByZW1vdmVCcnVzaChlbCkgewogIHZhciBvdXRsaW5lcyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIi5zZWxlY3Qtb3V0bGluZSIpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0bGluZXMubGVuZ3RoOyBpKyspIHsKICAgIG91dGxpbmVzW2ldLnJlbW92ZSgpOwogIH0KfQoKCi8vIGh0dHBzOi8vZGF2aWR3YWxzaC5uYW1lL2phdmFzY3JpcHQtZGVib3VuY2UtZnVuY3Rpb24KCi8vIFJldHVybnMgYSBmdW5jdGlvbiwgdGhhdCwgYXMgbG9uZyBhcyBpdCBjb250aW51ZXMgdG8gYmUgaW52b2tlZCwgd2lsbCBub3QKLy8gYmUgdHJpZ2dlcmVkLiBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgaXQgc3RvcHMgYmVpbmcgY2FsbGVkIGZvcgovLyBOIG1pbGxpc2Vjb25kcy4gSWYgYGltbWVkaWF0ZWAgaXMgcGFzc2VkLCB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBvbiB0aGUKLy8gbGVhZGluZyBlZGdlLCBpbnN0ZWFkIG9mIHRoZSB0cmFpbGluZy4KZnVuY3Rpb24gZGVib3VuY2UoZnVuYywgd2FpdCwgaW1tZWRpYXRlKSB7Cgl2YXIgdGltZW91dDsKCXJldHVybiBmdW5jdGlvbigpIHsKCQl2YXIgY29udGV4dCA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7CgkJdmFyIGxhdGVyID0gZnVuY3Rpb24oKSB7CgkJCXRpbWVvdXQgPSBudWxsOwoJCQlpZiAoIWltbWVkaWF0ZSkgZnVuYy5hcHBseShjb250ZXh0LCBhcmdzKTsKCQl9OwoJCXZhciBjYWxsTm93ID0gaW1tZWRpYXRlICYmICF0aW1lb3V0OwoJCWNsZWFyVGltZW91dCh0aW1lb3V0KTsKCQl0aW1lb3V0ID0gc2V0VGltZW91dChsYXRlciwgd2FpdCk7CgkJaWYgKGNhbGxOb3cpIGZ1bmMuYXBwbHkoY29udGV4dCwgYXJncyk7Cgl9Owp9Owo="></script>
<script src="data:application/javascript;base64,KGZ1bmN0aW9uKGdsb2JhbCl7InVzZSBzdHJpY3QiO3ZhciB1bmRlZmluZWQ9dm9pZCAwO3ZhciBNQVhfQVJSQVlfTEVOR1RIPTFlNTtmdW5jdGlvbiBUeXBlKHYpe3N3aXRjaCh0eXBlb2Ygdil7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiJ1bmRlZmluZWQiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UibnVtYmVyIjpyZXR1cm4ibnVtYmVyIjtjYXNlInN0cmluZyI6cmV0dXJuInN0cmluZyI7ZGVmYXVsdDpyZXR1cm4gdj09PW51bGw/Im51bGwiOiJvYmplY3QifX1mdW5jdGlvbiBDbGFzcyh2KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHYpLnJlcGxhY2UoL15cW29iamVjdCAqfFxdJC9nLCIiKX1mdW5jdGlvbiBJc0NhbGxhYmxlKG8pe3JldHVybiB0eXBlb2Ygbz09PSJmdW5jdGlvbiJ9ZnVuY3Rpb24gVG9PYmplY3Qodil7aWYodj09PW51bGx8fHY9PT11bmRlZmluZWQpdGhyb3cgVHlwZUVycm9yKCk7cmV0dXJuIE9iamVjdCh2KX1mdW5jdGlvbiBUb0ludDMyKHYpe3JldHVybiB2Pj4wfWZ1bmN0aW9uIFRvVWludDMyKHYpe3JldHVybiB2Pj4+MH12YXIgTE4yPU1hdGguTE4yLGFicz1NYXRoLmFicyxmbG9vcj1NYXRoLmZsb29yLGxvZz1NYXRoLmxvZyxtYXg9TWF0aC5tYXgsbWluPU1hdGgubWluLHBvdz1NYXRoLnBvdyxyb3VuZD1NYXRoLnJvdW5kOyhmdW5jdGlvbigpe3ZhciBvcmlnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZG9tX29ubHk9IWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIngiLHt9KX1jYXRjaChfKXtyZXR1cm4gZmFsc2V9fSgpO2lmKCFvcmlnfHxkb21fb25seSl7T2JqZWN0LmRlZmluZVByb3BlcnR5PWZ1bmN0aW9uKG8scHJvcCxkZXNjKXtpZihvcmlnKXRyeXtyZXR1cm4gb3JpZyhvLHByb3AsZGVzYyl9Y2F0Y2goXyl7fWlmKG8hPT1PYmplY3QobykpdGhyb3cgVHlwZUVycm9yKCJPYmplY3QuZGVmaW5lUHJvcGVydHkgY2FsbGVkIG9uIG5vbi1vYmplY3QiKTtpZihPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18mJiJnZXQiaW4gZGVzYylPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18uY2FsbChvLHByb3AsZGVzYy5nZXQpO2lmKE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyYmInNldCJpbiBkZXNjKU9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG8scHJvcCxkZXNjLnNldCk7aWYoInZhbHVlImluIGRlc2Mpb1twcm9wXT1kZXNjLnZhbHVlO3JldHVybiBvfX19KSgpO2Z1bmN0aW9uIG1ha2VBcnJheUFjY2Vzc29ycyhvYmope2lmKG9iai5sZW5ndGg+TUFYX0FSUkFZX0xFTkdUSCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSB0b28gbGFyZ2UgZm9yIHBvbHlmaWxsIik7ZnVuY3Rpb24gbWFrZUFycmF5QWNjZXNzb3IoaW5kZXgpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosaW5kZXgse2dldDpmdW5jdGlvbigpe3JldHVybiBvYmouX2dldHRlcihpbmRleCl9LHNldDpmdW5jdGlvbih2KXtvYmouX3NldHRlcihpbmRleCx2KX0sZW51bWVyYWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTpmYWxzZX0pfXZhciBpO2ZvcihpPTA7aTxvYmoubGVuZ3RoO2krPTEpe21ha2VBcnJheUFjY2Vzc29yKGkpfX1mdW5jdGlvbiBhc19zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+PnN9ZnVuY3Rpb24gYXNfdW5zaWduZWQodmFsdWUsYml0cyl7dmFyIHM9MzItYml0cztyZXR1cm4gdmFsdWU8PHM+Pj5zfWZ1bmN0aW9uIHBhY2tJOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja0k4KGJ5dGVzKXtyZXR1cm4gYXNfc2lnbmVkKGJ5dGVzWzBdLDgpfWZ1bmN0aW9uIHBhY2tVOChuKXtyZXR1cm5bbiYyNTVdfWZ1bmN0aW9uIHVucGFja1U4KGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF0sOCl9ZnVuY3Rpb24gcGFja1U4Q2xhbXBlZChuKXtuPXJvdW5kKE51bWJlcihuKSk7cmV0dXJuW248MD8wOm4+MjU1PzI1NTpuJjI1NV19ZnVuY3Rpb24gcGFja0kxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja0kxNihieXRlcyl7cmV0dXJuIGFzX3NpZ25lZChieXRlc1swXTw8OHxieXRlc1sxXSwxNil9ZnVuY3Rpb24gcGFja1UxNihuKXtyZXR1cm5bbj4+OCYyNTUsbiYyNTVdfWZ1bmN0aW9uIHVucGFja1UxNihieXRlcyl7cmV0dXJuIGFzX3Vuc2lnbmVkKGJ5dGVzWzBdPDw4fGJ5dGVzWzFdLDE2KX1mdW5jdGlvbiBwYWNrSTMyKG4pe3JldHVybltuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LG4mMjU1XX1mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpe3JldHVybiBhc19zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja1UzMihuKXtyZXR1cm5bbj4+MjQmMjU1LG4+PjE2JjI1NSxuPj44JjI1NSxuJjI1NV19ZnVuY3Rpb24gdW5wYWNrVTMyKGJ5dGVzKXtyZXR1cm4gYXNfdW5zaWduZWQoYnl0ZXNbMF08PDI0fGJ5dGVzWzFdPDwxNnxieXRlc1syXTw8OHxieXRlc1szXSwzMil9ZnVuY3Rpb24gcGFja0lFRUU3NTQodixlYml0cyxmYml0cyl7dmFyIGJpYXM9KDE8PGViaXRzLTEpLTEscyxlLGYsbG4saSxiaXRzLHN0cixieXRlcztmdW5jdGlvbiByb3VuZFRvRXZlbihuKXt2YXIgdz1mbG9vcihuKSxmPW4tdztpZihmPC41KXJldHVybiB3O2lmKGY+LjUpcmV0dXJuIHcrMTtyZXR1cm4gdyUyP3crMTp3fWlmKHYhPT12KXtlPSgxPDxlYml0cyktMTtmPXBvdygyLGZiaXRzLTEpO3M9MH1lbHNlIGlmKHY9PT1JbmZpbml0eXx8dj09PS1JbmZpbml0eSl7ZT0oMTw8ZWJpdHMpLTE7Zj0wO3M9djwwPzE6MH1lbHNlIGlmKHY9PT0wKXtlPTA7Zj0wO3M9MS92PT09LUluZmluaXR5PzE6MH1lbHNle3M9djwwO3Y9YWJzKHYpO2lmKHY+PXBvdygyLDEtYmlhcykpe2U9bWluKGZsb29yKGxvZyh2KS9MTjIpLDEwMjMpO2Y9cm91bmRUb0V2ZW4odi9wb3coMixlKSpwb3coMixmYml0cykpO2lmKGYvcG93KDIsZmJpdHMpPj0yKXtlPWUrMTtmPTF9aWYoZT5iaWFzKXtlPSgxPDxlYml0cyktMTtmPTB9ZWxzZXtlPWUrYmlhcztmPWYtcG93KDIsZmJpdHMpfX1lbHNle2U9MDtmPXJvdW5kVG9FdmVuKHYvcG93KDIsMS1iaWFzLWZiaXRzKSl9fWJpdHM9W107Zm9yKGk9ZmJpdHM7aTtpLT0xKXtiaXRzLnB1c2goZiUyPzE6MCk7Zj1mbG9vcihmLzIpfWZvcihpPWViaXRzO2k7aS09MSl7Yml0cy5wdXNoKGUlMj8xOjApO2U9Zmxvb3IoZS8yKX1iaXRzLnB1c2gocz8xOjApO2JpdHMucmV2ZXJzZSgpO3N0cj1iaXRzLmpvaW4oIiIpO2J5dGVzPVtdO3doaWxlKHN0ci5sZW5ndGgpe2J5dGVzLnB1c2gocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDgpLDIpKTtzdHI9c3RyLnN1YnN0cmluZyg4KX1yZXR1cm4gYnl0ZXN9ZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChieXRlcyxlYml0cyxmYml0cyl7dmFyIGJpdHM9W10saSxqLGIsc3RyLGJpYXMscyxlLGY7Zm9yKGk9Ynl0ZXMubGVuZ3RoO2k7aS09MSl7Yj1ieXRlc1tpLTFdO2ZvcihqPTg7ajtqLT0xKXtiaXRzLnB1c2goYiUyPzE6MCk7Yj1iPj4xfX1iaXRzLnJldmVyc2UoKTtzdHI9Yml0cy5qb2luKCIiKTtiaWFzPSgxPDxlYml0cy0xKS0xO3M9cGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLDEpLDIpPy0xOjE7ZT1wYXJzZUludChzdHIuc3Vic3RyaW5nKDEsMStlYml0cyksMik7Zj1wYXJzZUludChzdHIuc3Vic3RyaW5nKDErZWJpdHMpLDIpO2lmKGU9PT0oMTw8ZWJpdHMpLTEpe3JldHVybiBmIT09MD9OYU46cypJbmZpbml0eX1lbHNlIGlmKGU+MCl7cmV0dXJuIHMqcG93KDIsZS1iaWFzKSooMStmL3BvdygyLGZiaXRzKSl9ZWxzZSBpZihmIT09MCl7cmV0dXJuIHMqcG93KDIsLShiaWFzLTEpKSooZi9wb3coMixmYml0cykpfWVsc2V7cmV0dXJuIHM8MD8tMDowfX1mdW5jdGlvbiB1bnBhY2tGNjQoYil7cmV0dXJuIHVucGFja0lFRUU3NTQoYiwxMSw1Mil9ZnVuY3Rpb24gcGFja0Y2NCh2KXtyZXR1cm4gcGFja0lFRUU3NTQodiwxMSw1Mil9ZnVuY3Rpb24gdW5wYWNrRjMyKGIpe3JldHVybiB1bnBhY2tJRUVFNzU0KGIsOCwyMyl9ZnVuY3Rpb24gcGFja0YzMih2KXtyZXR1cm4gcGFja0lFRUU3NTQodiw4LDIzKX0oZnVuY3Rpb24oKXtmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXlCdWZmZXIgc2l6ZSBpcyBub3QgYSBzbWFsbCBlbm91Z2ggcG9zaXRpdmUgaW50ZWdlci4iKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJfYnl0ZXMiLHt2YWx1ZTpBcnJheShsZW5ndGgpfSk7Zm9yKHZhciBpPTA7aTxsZW5ndGg7aSs9MSl0aGlzLl9ieXRlc1tpXT0wfWdsb2JhbC5BcnJheUJ1ZmZlcj1nbG9iYWwuQXJyYXlCdWZmZXJ8fEFycmF5QnVmZmVyO2Z1bmN0aW9uICRUeXBlZEFycmF5JCgpe2lmKCFhcmd1bWVudHMubGVuZ3RofHx0eXBlb2YgYXJndW1lbnRzWzBdIT09Im9iamVjdCIpe3JldHVybiBmdW5jdGlvbihsZW5ndGgpe2xlbmd0aD1Ub0ludDMyKGxlbmd0aCk7aWYobGVuZ3RoPDApdGhyb3cgUmFuZ2VFcnJvcigibGVuZ3RoIGlzIG5vdCBhIHNtYWxsIGVub3VnaCBwb3NpdGl2ZSBpbnRlZ2VyLiIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTpsZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcih0aGlzLmJ5dGVMZW5ndGgpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ5dGVPZmZzZXQiLHt2YWx1ZTowfSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihhcmd1bWVudHMubGVuZ3RoPj0xJiZUeXBlKGFyZ3VtZW50c1swXSk9PT0ib2JqZWN0IiYmYXJndW1lbnRzWzBdaW5zdGFuY2VvZiAkVHlwZWRBcnJheSQpe3JldHVybiBmdW5jdGlvbih0eXBlZEFycmF5KXtpZih0aGlzLmNvbnN0cnVjdG9yIT09dHlwZWRBcnJheS5jb25zdHJ1Y3Rvcil0aHJvdyBUeXBlRXJyb3IoKTt2YXIgYnl0ZUxlbmd0aD10eXBlZEFycmF5Lmxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpuZXcgQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOjB9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6dHlwZWRBcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpdGhpcy5fc2V0dGVyKGksdHlwZWRBcnJheS5fZ2V0dGVyKGkpKX0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKGFyZ3VtZW50cy5sZW5ndGg+PTEmJlR5cGUoYXJndW1lbnRzWzBdKT09PSJvYmplY3QiJiYhKGFyZ3VtZW50c1swXWluc3RhbmNlb2YgJFR5cGVkQXJyYXkkKSYmIShhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihhcnJheSl7dmFyIGJ5dGVMZW5ndGg9YXJyYXkubGVuZ3RoKnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOm5ldyBBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6MH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJsZW5ndGgiLHt2YWx1ZTphcnJheS5sZW5ndGh9KTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krPTEpe3ZhciBzPWFycmF5W2ldO3RoaXMuX3NldHRlcihpLE51bWJlcihzKSl9fS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoYXJndW1lbnRzLmxlbmd0aD49MSYmVHlwZShhcmd1bWVudHNbMF0pPT09Im9iamVjdCImJihhcmd1bWVudHNbMF1pbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxDbGFzcyhhcmd1bWVudHNbMF0pPT09IkFycmF5QnVmZmVyIikpe3JldHVybiBmdW5jdGlvbihidWZmZXIsYnl0ZU9mZnNldCxsZW5ndGgpe2J5dGVPZmZzZXQ9VG9VaW50MzIoYnl0ZU9mZnNldCk7aWYoYnl0ZU9mZnNldD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IG91dCBvZiByYW5nZSIpO2lmKGJ5dGVPZmZzZXQldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJidWZmZXIgbGVuZ3RoIG1pbnVzIHRoZSBieXRlT2Zmc2V0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBlbGVtZW50IHNpemUuIik7aWYobGVuZ3RoPT09dW5kZWZpbmVkKXt2YXIgYnl0ZUxlbmd0aD1idWZmZXIuYnl0ZUxlbmd0aC1ieXRlT2Zmc2V0O2lmKGJ5dGVMZW5ndGgldGhpcy5CWVRFU19QRVJfRUxFTUVOVCl0aHJvdyBSYW5nZUVycm9yKCJsZW5ndGggb2YgYnVmZmVyIG1pbnVzIGJ5dGVPZmZzZXQgbm90IGEgbXVsdGlwbGUgb2YgdGhlIGVsZW1lbnQgc2l6ZSIpO2xlbmd0aD1ieXRlTGVuZ3RoL3RoaXMuQllURVNfUEVSX0VMRU1FTlR9ZWxzZXtsZW5ndGg9VG9VaW50MzIobGVuZ3RoKTtieXRlTGVuZ3RoPWxlbmd0aCp0aGlzLkJZVEVTX1BFUl9FTEVNRU5UfWlmKGJ5dGVPZmZzZXQrYnl0ZUxlbmd0aD5idWZmZXIuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJieXRlT2Zmc2V0IGFuZCBsZW5ndGggcmVmZXJlbmNlIGFuIGFyZWEgYmV5b25kIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJidWZmZXIiLHt2YWx1ZTpidWZmZXJ9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZUxlbmd0aCIse3ZhbHVlOmJ5dGVMZW5ndGh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiYnl0ZU9mZnNldCIse3ZhbHVlOmJ5dGVPZmZzZXR9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibGVuZ3RoIix7dmFsdWU6bGVuZ3RofSl9LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10aHJvdyBUeXBlRXJyb3IoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLCJmcm9tIix7dmFsdWU6ZnVuY3Rpb24oaXRlcmFibGUpe3JldHVybiBuZXcgdGhpcyhpdGVyYWJsZSl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JCwib2YiLHt2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgdGhpcyhhcmd1bWVudHMpfX0pO3ZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQ9e307JFR5cGVkQXJyYXkkLnByb3RvdHlwZT0kVHlwZWRBcnJheVByb3RvdHlwZSQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsIl9nZXR0ZXIiLHt2YWx1ZTpmdW5jdGlvbihpbmRleCl7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXRocm93IFN5bnRheEVycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO2luZGV4PVRvVWludDMyKGluZGV4KTtpZihpbmRleD49dGhpcy5sZW5ndGgpcmV0dXJuIHVuZGVmaW5lZDt2YXIgYnl0ZXM9W10saSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXtieXRlcy5wdXNoKHRoaXMuYnVmZmVyLl9ieXRlc1tvXSl9cmV0dXJuIHRoaXMuX3VucGFjayhieXRlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImdldCIse3ZhbHVlOiRUeXBlZEFycmF5JC5wcm90b3R5cGUuX2dldHRlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJfc2V0dGVyIix7dmFsdWU6ZnVuY3Rpb24oaW5kZXgsdmFsdWUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBTeW50YXhFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiKTtpbmRleD1Ub1VpbnQzMihpbmRleCk7aWYoaW5kZXg+PXRoaXMubGVuZ3RoKXJldHVybjt2YXIgYnl0ZXM9dGhpcy5fcGFjayh2YWx1ZSksaSxvO2ZvcihpPTAsbz10aGlzLmJ5dGVPZmZzZXQraW5kZXgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpPHRoaXMuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSxvKz0xKXt0aGlzLmJ1ZmZlci5fYnl0ZXNbb109Ynl0ZXNbaV19fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb25zdHJ1Y3RvciIse3ZhbHVlOiRUeXBlZEFycmF5JH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJjb3B5V2l0aGluIix7dmFsdWU6ZnVuY3Rpb24odGFyZ2V0LHN0YXJ0KXt2YXIgZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVUYXJnZXQ9VG9JbnQzMih0YXJnZXQpO3ZhciB0bztpZihyZWxhdGl2ZVRhcmdldDwwKXRvPW1heChsZW4rcmVsYXRpdmVUYXJnZXQsMCk7ZWxzZSB0bz1taW4ocmVsYXRpdmVUYXJnZXQsbGVuKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgZnJvbTtpZihyZWxhdGl2ZVN0YXJ0PDApZnJvbT1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBmcm9tPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3ZhciBjb3VudD1taW4oZmluYWwtZnJvbSxsZW4tdG8pO3ZhciBkaXJlY3Rpb247aWYoZnJvbTx0byYmdG88ZnJvbStjb3VudCl7ZGlyZWN0aW9uPS0xO2Zyb209ZnJvbStjb3VudC0xO3RvPXRvK2NvdW50LTF9ZWxzZXtkaXJlY3Rpb249MX13aGlsZShjb3VudD4wKXtvLl9zZXR0ZXIodG8sby5fZ2V0dGVyKGZyb20pKTtmcm9tPWZyb20rZGlyZWN0aW9uO3RvPXRvK2RpcmVjdGlvbjtjb3VudD1jb3VudC0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJldmVyeSIse3ZhbHVlOmZ1bmN0aW9uKGNhbGxiYWNrZm4pe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTtpZighSXNDYWxsYWJsZShjYWxsYmFja2ZuKSl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdGhpc0FyZz1hcmd1bWVudHNbMV07Zm9yKHZhciBpPTA7aTxsZW47aSsrKXtpZighY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsdC5fZ2V0dGVyKGkpLGksdCkpcmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWxsIix7dmFsdWU6ZnVuY3Rpb24odmFsdWUpe3ZhciBzdGFydD1hcmd1bWVudHNbMV0sZW5kPWFyZ3VtZW50c1syXTt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTtsZW49bWF4KGxlbiwwKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaztpZihyZWxhdGl2ZVN0YXJ0PDApaz1tYXgobGVuK3JlbGF0aXZlU3RhcnQsMCk7ZWxzZSBrPW1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kO2lmKGVuZD09PXVuZGVmaW5lZClyZWxhdGl2ZUVuZD1sZW47ZWxzZSByZWxhdGl2ZUVuZD1Ub0ludDMyKGVuZCk7dmFyIGZpbmFsO2lmKHJlbGF0aXZlRW5kPDApZmluYWw9bWF4KGxlbityZWxhdGl2ZUVuZCwwKTtlbHNlIGZpbmFsPW1pbihyZWxhdGl2ZUVuZCxsZW4pO3doaWxlKGs8ZmluYWwpe28uX3NldHRlcihrLHZhbHVlKTtrKz0xfXJldHVybiBvfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaWx0ZXIiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKyl7dmFyIHZhbD10Ll9nZXR0ZXIoaSk7aWYoY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHZhbCxpLHQpKXJlcy5wdXNoKHZhbCl9cmV0dXJuIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHJlcyl9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZpbmQiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4ga1ZhbHVlOysra31yZXR1cm4gdW5kZWZpbmVkfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJmaW5kSW5kZXgiLHt2YWx1ZTpmdW5jdGlvbihwcmVkaWNhdGUpe3ZhciBvPVRvT2JqZWN0KHRoaXMpO3ZhciBsZW5WYWx1ZT1vLmxlbmd0aDt2YXIgbGVuPVRvVWludDMyKGxlblZhbHVlKTtpZighSXNDYWxsYWJsZShwcmVkaWNhdGUpKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dW5kZWZpbmVkO3ZhciBrPTA7d2hpbGUoazxsZW4pe3ZhciBrVmFsdWU9by5fZ2V0dGVyKGspO3ZhciB0ZXN0UmVzdWx0PXByZWRpY2F0ZS5jYWxsKHQsa1ZhbHVlLGssbyk7aWYoQm9vbGVhbih0ZXN0UmVzdWx0KSlyZXR1cm4gazsrK2t9cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImZvckVhY2giLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspY2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJpbmRleE9mIix7dmFsdWU6ZnVuY3Rpb24oc2VhcmNoRWxlbWVudCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO2lmKGxlbj09PTApcmV0dXJuLTE7dmFyIG49MDtpZihhcmd1bWVudHMubGVuZ3RoPjApe249TnVtYmVyKGFyZ3VtZW50c1sxXSk7aWYobiE9PW4pe249MH1lbHNlIGlmKG4hPT0wJiZuIT09MS8wJiZuIT09LSgxLzApKXtuPShuPjB8fC0xKSpmbG9vcihhYnMobikpfX1pZihuPj1sZW4pcmV0dXJuLTE7dmFyIGs9bj49MD9uOm1heChsZW4tYWJzKG4pLDApO2Zvcig7azxsZW47aysrKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXtyZXR1cm4ga319cmV0dXJuLTF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsImpvaW4iLHt2YWx1ZTpmdW5jdGlvbihzZXBhcmF0b3Ipe2lmKHRoaXM9PT11bmRlZmluZWR8fHRoaXM9PT1udWxsKXRocm93IFR5cGVFcnJvcigpO3ZhciB0PU9iamVjdCh0aGlzKTt2YXIgbGVuPVRvVWludDMyKHQubGVuZ3RoKTt2YXIgdG1wPUFycmF5KGxlbik7Zm9yKHZhciBpPTA7aTxsZW47KytpKXRtcFtpXT10Ll9nZXR0ZXIoaSk7cmV0dXJuIHRtcC5qb2luKHNlcGFyYXRvcj09PXVuZGVmaW5lZD8iLCI6c2VwYXJhdG9yKX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwibGFzdEluZGV4T2YiLHt2YWx1ZTpmdW5jdGlvbihzZWFyY2hFbGVtZW50KXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYobGVuPT09MClyZXR1cm4tMTt2YXIgbj1sZW47aWYoYXJndW1lbnRzLmxlbmd0aD4xKXtuPU51bWJlcihhcmd1bWVudHNbMV0pO2lmKG4hPT1uKXtuPTB9ZWxzZSBpZihuIT09MCYmbiE9PTEvMCYmbiE9PS0oMS8wKSl7bj0obj4wfHwtMSkqZmxvb3IoYWJzKG4pKX19dmFyIGs9bj49MD9taW4obixsZW4tMSk6bGVuLWFicyhuKTtmb3IoO2s+PTA7ay0tKXtpZih0Ll9nZXR0ZXIoayk9PT1zZWFyY2hFbGVtZW50KXJldHVybiBrfXJldHVybi0xfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJtYXAiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHJlcz1bXTtyZXMubGVuZ3RoPWxlbjt2YXIgdGhpc3A9YXJndW1lbnRzWzFdO2Zvcih2YXIgaT0wO2k8bGVuO2krKylyZXNbaV09Y2FsbGJhY2tmbi5jYWxsKHRoaXNwLHQuX2dldHRlcihpKSxpLHQpO3JldHVybiBuZXcgdGhpcy5jb25zdHJ1Y3RvcihyZXMpfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkVHlwZWRBcnJheSQucHJvdG90eXBlLCJyZWR1Y2UiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9MDt2YXIgYWNjdW11bGF0b3I7aWYoYXJndW1lbnRzLmxlbmd0aD49Mil7YWNjdW11bGF0b3I9YXJndW1lbnRzWzFdfWVsc2V7YWNjdW11bGF0b3I9dC5fZ2V0dGVyKGsrKyl9d2hpbGUoazxsZW4pe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7aysrfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmVkdWNlUmlnaHQiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7aWYobGVuPT09MCYmYXJndW1lbnRzLmxlbmd0aD09PTEpdGhyb3cgVHlwZUVycm9yKCk7dmFyIGs9bGVuLTE7dmFyIGFjY3VtdWxhdG9yO2lmKGFyZ3VtZW50cy5sZW5ndGg+PTIpe2FjY3VtdWxhdG9yPWFyZ3VtZW50c1sxXX1lbHNle2FjY3VtdWxhdG9yPXQuX2dldHRlcihrLS0pfXdoaWxlKGs+PTApe2FjY3VtdWxhdG9yPWNhbGxiYWNrZm4uY2FsbCh1bmRlZmluZWQsYWNjdW11bGF0b3IsdC5fZ2V0dGVyKGspLGssdCk7ay0tfXJldHVybiBhY2N1bXVsYXRvcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwicmV2ZXJzZSIse3ZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciBoYWxmPWZsb29yKGxlbi8yKTtmb3IodmFyIGk9MCxqPWxlbi0xO2k8aGFsZjsrK2ksLS1qKXt2YXIgdG1wPXQuX2dldHRlcihpKTt0Ll9zZXR0ZXIoaSx0Ll9nZXR0ZXIoaikpO3QuX3NldHRlcihqLHRtcCl9cmV0dXJuIHR9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNldCIse3ZhbHVlOmZ1bmN0aW9uKGluZGV4LHZhbHVlKXtpZihhcmd1bWVudHMubGVuZ3RoPDEpdGhyb3cgU3ludGF4RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7dmFyIGFycmF5LHNlcXVlbmNlLG9mZnNldCxsZW4saSxzLGQsYnl0ZU9mZnNldCxieXRlTGVuZ3RoLHRtcDtpZih0eXBlb2YgYXJndW1lbnRzWzBdPT09Im9iamVjdCImJmFyZ3VtZW50c1swXS5jb25zdHJ1Y3Rvcj09PXRoaXMuY29uc3RydWN0b3Ipe2FycmF5PWFyZ3VtZW50c1swXTtvZmZzZXQ9VG9VaW50MzIoYXJndW1lbnRzWzFdKTtpZihvZmZzZXQrYXJyYXkubGVuZ3RoPnRoaXMubGVuZ3RoKXt0aHJvdyBSYW5nZUVycm9yKCJPZmZzZXQgcGx1cyBsZW5ndGggb2YgYXJyYXkgaXMgb3V0IG9mIHJhbmdlIil9Ynl0ZU9mZnNldD10aGlzLmJ5dGVPZmZzZXQrb2Zmc2V0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQ7Ynl0ZUxlbmd0aD1hcnJheS5sZW5ndGgqdGhpcy5CWVRFU19QRVJfRUxFTUVOVDtpZihhcnJheS5idWZmZXI9PT10aGlzLmJ1ZmZlcil7dG1wPVtdO2ZvcihpPTAscz1hcnJheS5ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEpe3RtcFtpXT1hcnJheS5idWZmZXIuX2J5dGVzW3NdfWZvcihpPTAsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLGQrPTEpe3RoaXMuYnVmZmVyLl9ieXRlc1tkXT10bXBbaV19fWVsc2V7Zm9yKGk9MCxzPWFycmF5LmJ5dGVPZmZzZXQsZD1ieXRlT2Zmc2V0O2k8Ynl0ZUxlbmd0aDtpKz0xLHMrPTEsZCs9MSl7dGhpcy5idWZmZXIuX2J5dGVzW2RdPWFycmF5LmJ1ZmZlci5fYnl0ZXNbc119fX1lbHNlIGlmKHR5cGVvZiBhcmd1bWVudHNbMF09PT0ib2JqZWN0IiYmdHlwZW9mIGFyZ3VtZW50c1swXS5sZW5ndGghPT0idW5kZWZpbmVkIil7c2VxdWVuY2U9YXJndW1lbnRzWzBdO2xlbj1Ub1VpbnQzMihzZXF1ZW5jZS5sZW5ndGgpO29mZnNldD1Ub1VpbnQzMihhcmd1bWVudHNbMV0pO2lmKG9mZnNldCtsZW4+dGhpcy5sZW5ndGgpe3Rocm93IFJhbmdlRXJyb3IoIk9mZnNldCBwbHVzIGxlbmd0aCBvZiBhcnJheSBpcyBvdXQgb2YgcmFuZ2UiKX1mb3IoaT0wO2k8bGVuO2krPTEpe3M9c2VxdWVuY2VbaV07dGhpcy5fc2V0dGVyKG9mZnNldCtpLE51bWJlcihzKSl9fWVsc2V7dGhyb3cgVHlwZUVycm9yKCJVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGUocykiKX19fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNsaWNlIix7dmFsdWU6ZnVuY3Rpb24oc3RhcnQsZW5kKXt2YXIgbz1Ub09iamVjdCh0aGlzKTt2YXIgbGVuVmFsPW8ubGVuZ3RoO3ZhciBsZW49VG9VaW50MzIobGVuVmFsKTt2YXIgcmVsYXRpdmVTdGFydD1Ub0ludDMyKHN0YXJ0KTt2YXIgaz1yZWxhdGl2ZVN0YXJ0PDA/bWF4KGxlbityZWxhdGl2ZVN0YXJ0LDApOm1pbihyZWxhdGl2ZVN0YXJ0LGxlbik7dmFyIHJlbGF0aXZlRW5kPWVuZD09PXVuZGVmaW5lZD9sZW46VG9JbnQzMihlbmQpO3ZhciBmaW5hbD1yZWxhdGl2ZUVuZDwwP21heChsZW4rcmVsYXRpdmVFbmQsMCk6bWluKHJlbGF0aXZlRW5kLGxlbik7dmFyIGNvdW50PWZpbmFsLWs7dmFyIGM9by5jb25zdHJ1Y3Rvcjt2YXIgYT1uZXcgYyhjb3VudCk7dmFyIG49MDt3aGlsZShrPGZpbmFsKXt2YXIga1ZhbHVlPW8uX2dldHRlcihrKTthLl9zZXR0ZXIobixrVmFsdWUpOysrazsrK259cmV0dXJuIGF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KCRUeXBlZEFycmF5JC5wcm90b3R5cGUsInNvbWUiLHt2YWx1ZTpmdW5jdGlvbihjYWxsYmFja2ZuKXtpZih0aGlzPT09dW5kZWZpbmVkfHx0aGlzPT09bnVsbCl0aHJvdyBUeXBlRXJyb3IoKTt2YXIgdD1PYmplY3QodGhpcyk7dmFyIGxlbj1Ub1VpbnQzMih0Lmxlbmd0aCk7aWYoIUlzQ2FsbGFibGUoY2FsbGJhY2tmbikpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHRoaXNwPWFyZ3VtZW50c1sxXTtmb3IodmFyIGk9MDtpPGxlbjtpKyspe2lmKGNhbGxiYWNrZm4uY2FsbCh0aGlzcCx0Ll9nZXR0ZXIoaSksaSx0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic29ydCIse3ZhbHVlOmZ1bmN0aW9uKGNvbXBhcmVmbil7aWYodGhpcz09PXVuZGVmaW5lZHx8dGhpcz09PW51bGwpdGhyb3cgVHlwZUVycm9yKCk7dmFyIHQ9T2JqZWN0KHRoaXMpO3ZhciBsZW49VG9VaW50MzIodC5sZW5ndGgpO3ZhciB0bXA9QXJyYXkobGVuKTtmb3IodmFyIGk9MDtpPGxlbjsrK2kpdG1wW2ldPXQuX2dldHRlcihpKTtpZihjb21wYXJlZm4pdG1wLnNvcnQoY29tcGFyZWZuKTtlbHNlIHRtcC5zb3J0KCk7Zm9yKGk9MDtpPGxlbjsrK2kpdC5fc2V0dGVyKGksdG1wW2ldKTtyZXR1cm4gdH19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoJFR5cGVkQXJyYXkkLnByb3RvdHlwZSwic3ViYXJyYXkiLHt2YWx1ZTpmdW5jdGlvbihzdGFydCxlbmQpe2Z1bmN0aW9uIGNsYW1wKHYsbWluLG1heCl7cmV0dXJuIHY8bWluP21pbjp2Pm1heD9tYXg6dn1zdGFydD1Ub0ludDMyKHN0YXJ0KTtlbmQ9VG9JbnQzMihlbmQpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MSl7c3RhcnQ9MH1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2VuZD10aGlzLmxlbmd0aH1pZihzdGFydDwwKXtzdGFydD10aGlzLmxlbmd0aCtzdGFydH1pZihlbmQ8MCl7ZW5kPXRoaXMubGVuZ3RoK2VuZH1zdGFydD1jbGFtcChzdGFydCwwLHRoaXMubGVuZ3RoKTtlbmQ9Y2xhbXAoZW5kLDAsdGhpcy5sZW5ndGgpO3ZhciBsZW49ZW5kLXN0YXJ0O2lmKGxlbjwwKXtsZW49MH1yZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IodGhpcy5idWZmZXIsdGhpcy5ieXRlT2Zmc2V0K3N0YXJ0KnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbGVuKX19KTtmdW5jdGlvbiBtYWtlVHlwZWRBcnJheShlbGVtZW50U2l6ZSxwYWNrLHVucGFjayl7dmFyIFR5cGVkQXJyYXk9ZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29uc3RydWN0b3IiLHt2YWx1ZTpUeXBlZEFycmF5fSk7JFR5cGVkQXJyYXkkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTttYWtlQXJyYXlBY2Nlc3NvcnModGhpcyl9O2lmKCJfX3Byb3RvX18iaW4gVHlwZWRBcnJheSl7VHlwZWRBcnJheS5fX3Byb3RvX189JFR5cGVkQXJyYXkkfWVsc2V7VHlwZWRBcnJheS5mcm9tPSRUeXBlZEFycmF5JC5mcm9tO1R5cGVkQXJyYXkub2Y9JFR5cGVkQXJyYXkkLm9mfVR5cGVkQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ9ZWxlbWVudFNpemU7dmFyIFR5cGVkQXJyYXlQcm90b3R5cGU9ZnVuY3Rpb24oKXt9O1R5cGVkQXJyYXlQcm90b3R5cGUucHJvdG90eXBlPSRUeXBlZEFycmF5UHJvdG90eXBlJDtUeXBlZEFycmF5LnByb3RvdHlwZT1uZXcgVHlwZWRBcnJheVByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIkJZVEVTX1BFUl9FTEVNRU5UIix7dmFsdWU6ZWxlbWVudFNpemV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVHlwZWRBcnJheS5wcm90b3R5cGUsIl9wYWNrIix7dmFsdWU6cGFja30pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUeXBlZEFycmF5LnByb3RvdHlwZSwiX3VucGFjayIse3ZhbHVlOnVucGFja30pO3JldHVybiBUeXBlZEFycmF5fXZhciBJbnQ4QXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrSTgsdW5wYWNrSTgpO3ZhciBVaW50OEFycmF5PW1ha2VUeXBlZEFycmF5KDEscGFja1U4LHVucGFja1U4KTt2YXIgVWludDhDbGFtcGVkQXJyYXk9bWFrZVR5cGVkQXJyYXkoMSxwYWNrVThDbGFtcGVkLHVucGFja1U4KTt2YXIgSW50MTZBcnJheT1tYWtlVHlwZWRBcnJheSgyLHBhY2tJMTYsdW5wYWNrSTE2KTt2YXIgVWludDE2QXJyYXk9bWFrZVR5cGVkQXJyYXkoMixwYWNrVTE2LHVucGFja1UxNik7dmFyIEludDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrSTMyLHVucGFja0kzMik7dmFyIFVpbnQzMkFycmF5PW1ha2VUeXBlZEFycmF5KDQscGFja1UzMix1bnBhY2tVMzIpO3ZhciBGbG9hdDMyQXJyYXk9bWFrZVR5cGVkQXJyYXkoNCxwYWNrRjMyLHVucGFja0YzMik7dmFyIEZsb2F0NjRBcnJheT1tYWtlVHlwZWRBcnJheSg4LHBhY2tGNjQsdW5wYWNrRjY0KTtnbG9iYWwuSW50OEFycmF5PWdsb2JhbC5JbnQ4QXJyYXl8fEludDhBcnJheTtnbG9iYWwuVWludDhBcnJheT1nbG9iYWwuVWludDhBcnJheXx8VWludDhBcnJheTtnbG9iYWwuVWludDhDbGFtcGVkQXJyYXk9Z2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5fHxVaW50OENsYW1wZWRBcnJheTtnbG9iYWwuSW50MTZBcnJheT1nbG9iYWwuSW50MTZBcnJheXx8SW50MTZBcnJheTtnbG9iYWwuVWludDE2QXJyYXk9Z2xvYmFsLlVpbnQxNkFycmF5fHxVaW50MTZBcnJheTtnbG9iYWwuSW50MzJBcnJheT1nbG9iYWwuSW50MzJBcnJheXx8SW50MzJBcnJheTtnbG9iYWwuVWludDMyQXJyYXk9Z2xvYmFsLlVpbnQzMkFycmF5fHxVaW50MzJBcnJheTtnbG9iYWwuRmxvYXQzMkFycmF5PWdsb2JhbC5GbG9hdDMyQXJyYXl8fEZsb2F0MzJBcnJheTtnbG9iYWwuRmxvYXQ2NEFycmF5PWdsb2JhbC5GbG9hdDY0QXJyYXl8fEZsb2F0NjRBcnJheX0pKCk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihhcnJheSxpbmRleCl7cmV0dXJuIElzQ2FsbGFibGUoYXJyYXkuZ2V0KT9hcnJheS5nZXQoaW5kZXgpOmFycmF5W2luZGV4XX12YXIgSVNfQklHX0VORElBTj1mdW5jdGlvbigpe3ZhciB1MTZhcnJheT1uZXcgVWludDE2QXJyYXkoWzQ2NjBdKSx1OGFycmF5PW5ldyBVaW50OEFycmF5KHUxNmFycmF5LmJ1ZmZlcik7cmV0dXJuIHIodThhcnJheSwwKT09PTE4fSgpO2Z1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlcixieXRlT2Zmc2V0LGJ5dGVMZW5ndGgpe2lmKCEoYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fENsYXNzKGJ1ZmZlcik9PT0iQXJyYXlCdWZmZXIiKSl0aHJvdyBUeXBlRXJyb3IoKTtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQ+YnVmZmVyLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiYnl0ZU9mZnNldCBvdXQgb2YgcmFuZ2UiKTtpZihieXRlTGVuZ3RoPT09dW5kZWZpbmVkKWJ5dGVMZW5ndGg9YnVmZmVyLmJ5dGVMZW5ndGgtYnl0ZU9mZnNldDtlbHNlIGJ5dGVMZW5ndGg9VG9VaW50MzIoYnl0ZUxlbmd0aCk7aWYoYnl0ZU9mZnNldCtieXRlTGVuZ3RoPmJ1ZmZlci5ieXRlTGVuZ3RoKXRocm93IFJhbmdlRXJyb3IoImJ5dGVPZmZzZXQgYW5kIGxlbmd0aCByZWZlcmVuY2UgYW4gYXJlYSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImJ1ZmZlciIse3ZhbHVlOmJ1ZmZlcn0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlTGVuZ3RoIix7dmFsdWU6Ynl0ZUxlbmd0aH0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJieXRlT2Zmc2V0Iix7dmFsdWU6Ynl0ZU9mZnNldH0pfWZ1bmN0aW9uIG1ha2VHZXR0ZXIoYXJyYXlUeXBlKXtyZXR1cm4gZnVuY3Rpb24gR2V0Vmlld1ZhbHVlKGJ5dGVPZmZzZXQsbGl0dGxlRW5kaWFuKXtieXRlT2Zmc2V0PVRvVWludDMyKGJ5dGVPZmZzZXQpO2lmKGJ5dGVPZmZzZXQrYXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UPnRoaXMuYnl0ZUxlbmd0aCl0aHJvdyBSYW5nZUVycm9yKCJBcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTtieXRlT2Zmc2V0Kz10aGlzLmJ5dGVPZmZzZXQ7dmFyIHVpbnQ4QXJyYXk9bmV3IFVpbnQ4QXJyYXkodGhpcy5idWZmZXIsYnl0ZU9mZnNldCxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQpLGJ5dGVzPVtdO2Zvcih2YXIgaT0wO2k8YXJyYXlUeXBlLkJZVEVTX1BFUl9FTEVNRU5UO2krPTEpYnl0ZXMucHVzaChyKHVpbnQ4QXJyYXksaSkpO2lmKEJvb2xlYW4obGl0dGxlRW5kaWFuKT09PUJvb2xlYW4oSVNfQklHX0VORElBTikpYnl0ZXMucmV2ZXJzZSgpO3JldHVybiByKG5ldyBhcnJheVR5cGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlciksMCl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQ4Iix7dmFsdWU6bWFrZUdldHRlcihVaW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDgiLHt2YWx1ZTptYWtlR2V0dGVyKEludDhBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJnZXRVaW50MTYiLHt2YWx1ZTptYWtlR2V0dGVyKFVpbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEludDE2Iix7dmFsdWU6bWFrZUdldHRlcihJbnQxNkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldFVpbnQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoVWludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0SW50MzIiLHt2YWx1ZTptYWtlR2V0dGVyKEludDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwiZ2V0RmxvYXQzMiIse3ZhbHVlOm1ha2VHZXR0ZXIoRmxvYXQzMkFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsImdldEZsb2F0NjQiLHt2YWx1ZTptYWtlR2V0dGVyKEZsb2F0NjRBcnJheSl9KTtmdW5jdGlvbiBtYWtlU2V0dGVyKGFycmF5VHlwZSl7cmV0dXJuIGZ1bmN0aW9uIFNldFZpZXdWYWx1ZShieXRlT2Zmc2V0LHZhbHVlLGxpdHRsZUVuZGlhbil7Ynl0ZU9mZnNldD1Ub1VpbnQzMihieXRlT2Zmc2V0KTtpZihieXRlT2Zmc2V0K2FycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVD50aGlzLmJ5dGVMZW5ndGgpdGhyb3cgUmFuZ2VFcnJvcigiQXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7dmFyIHR5cGVBcnJheT1uZXcgYXJyYXlUeXBlKFt2YWx1ZV0pLGJ5dGVBcnJheT1uZXcgVWludDhBcnJheSh0eXBlQXJyYXkuYnVmZmVyKSxieXRlcz1bXSxpLGJ5dGVWaWV3O2ZvcihpPTA7aTxhcnJheVR5cGUuQllURVNfUEVSX0VMRU1FTlQ7aSs9MSlieXRlcy5wdXNoKHIoYnl0ZUFycmF5LGkpKTtpZihCb29sZWFuKGxpdHRsZUVuZGlhbik9PT1Cb29sZWFuKElTX0JJR19FTkRJQU4pKWJ5dGVzLnJldmVyc2UoKTtieXRlVmlldz1uZXcgVWludDhBcnJheSh0aGlzLmJ1ZmZlcixieXRlT2Zmc2V0LGFycmF5VHlwZS5CWVRFU19QRVJfRUxFTUVOVCk7Ynl0ZVZpZXcuc2V0KGJ5dGVzKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDgiLHt2YWx1ZTptYWtlU2V0dGVyKFVpbnQ4QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50OCIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50OEFycmF5KX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEYXRhVmlldy5wcm90b3R5cGUsInNldFVpbnQxNiIse3ZhbHVlOm1ha2VTZXR0ZXIoVWludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0SW50MTYiLHt2YWx1ZTptYWtlU2V0dGVyKEludDE2QXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0VWludDMyIix7dmFsdWU6bWFrZVNldHRlcihVaW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRJbnQzMiIse3ZhbHVlOm1ha2VTZXR0ZXIoSW50MzJBcnJheSl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoRGF0YVZpZXcucHJvdG90eXBlLCJzZXRGbG9hdDMyIix7dmFsdWU6bWFrZVNldHRlcihGbG9hdDMyQXJyYXkpfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KERhdGFWaWV3LnByb3RvdHlwZSwic2V0RmxvYXQ2NCIse3ZhbHVlOm1ha2VTZXR0ZXIoRmxvYXQ2NEFycmF5KX0pO2dsb2JhbC5EYXRhVmlldz1nbG9iYWwuRGF0YVZpZXd8fERhdGFWaWV3fSkoKX0pKHRoaXMpOw=="></script>
<link href="data:text/css,%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%7Bmargin%2Dleft%3A%2D30px%3Bmargin%2Dright%3A%2D30px%3Bwhite%2Dspace%3Anormal%7Dbody%3E%2Econtainer%2Dfluid%2Ecrosstalk%2Dbscols%7Bmargin%2Dleft%3Aauto%3Bmargin%2Dright%3Aauto%7D%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%7Bdisplay%3Ainline%2Dblock%3Bpadding%2Dright%3A12px%3Bvertical%2Dalign%3Atop%7D%40media%20only%20screen%20and%20%28max%2Dwidth%3A%20480px%29%7B%2Ecrosstalk%2Dinput%2Dcheckboxgroup%20%2Ecrosstalk%2Doptions%2Dgroup%20%2Ecrosstalk%2Doptions%2Dcolumn%7Bdisplay%3Ablock%3Bpadding%2Dright%3Ainherit%7D%7D%2Ecrosstalk%2Dinput%7Bmargin%2Dbottom%3A15px%7D%2Ecrosstalk%2Dinput%20%2Econtrol%2Dlabel%7Bmargin%2Dbottom%3A0%3Bvertical%2Dalign%3Amiddle%7D%2Ecrosstalk%2Dinput%20input%5Btype%3D%22checkbox%22%5D%7Bmargin%3A4px%200%200%3Bmargin%2Dtop%3A1px%3Bline%2Dheight%3Anormal%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%7Bposition%3Arelative%3Bdisplay%3Ablock%3Bmargin%2Dtop%3A10px%3Bmargin%2Dbottom%3A10px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%3Elabel%7Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bcursor%3Apointer%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%20input%5Btype%3D%22checkbox%22%5D%2C%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%20input%5Btype%3D%22checkbox%22%5D%7Bposition%3Aabsolute%3Bmargin%2Dtop%3A2px%3Bmargin%2Dleft%3A%2D20px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2B%2Echeckbox%7Bmargin%2Dtop%3A%2D5px%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%7Bposition%3Arelative%3Bdisplay%3Ainline%2Dblock%3Bpadding%2Dleft%3A20px%3Bmargin%2Dbottom%3A0%3Bfont%2Dweight%3A400%3Bvertical%2Dalign%3Amiddle%3Bcursor%3Apointer%7D%2Ecrosstalk%2Dinput%20%2Echeckbox%2Dinline%2B%2Echeckbox%2Dinline%7Bmargin%2Dtop%3A0%3Bmargin%2Dleft%3A10px%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,IWZ1bmN0aW9uIG8odSxhLGwpe2Z1bmN0aW9uIHMobixlKXtpZighYVtuXSl7aWYoIXVbbl0pe3ZhciB0PSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFlJiZ0KXJldHVybiB0KG4sITApO2lmKGYpcmV0dXJuIGYobiwhMCk7dmFyIHI9bmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrbisiJyIpO3Rocm93IHIuY29kZT0iTU9EVUxFX05PVF9GT1VORCIscn12YXIgaT1hW25dPXtleHBvcnRzOnt9fTt1W25dWzBdLmNhbGwoaS5leHBvcnRzLGZ1bmN0aW9uKGUpe3ZhciB0PXVbbl1bMV1bZV07cmV0dXJuIHModHx8ZSl9LGksaS5leHBvcnRzLG8sdSxhLGwpfXJldHVybiBhW25dLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGU9MDtlPGwubGVuZ3RoO2UrKylzKGxbZV0pO3JldHVybiBzfSh7MTpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHI9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCk7dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5fdHlwZXM9e30sdGhpcy5fc2VxPTB9cmV0dXJuIHIoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fdHlwZXNbZV07bnx8KG49dGhpcy5fdHlwZXNbZV09e30pO3ZhciByPSJzdWIiK3RoaXMuX3NlcSsrO3JldHVybiBuW3JdPXQscn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl90eXBlc1tlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgdCl7Zm9yKHZhciByIGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eShyKSYmbltyXT09PXQpcmV0dXJuIGRlbGV0ZSBuW3JdLHI7cmV0dXJuITF9aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiEoIW58fCFuW3RdKSYmKGRlbGV0ZSBuW3RdLHQpO3Rocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCB0eXBlIGZvciBsaXN0ZW5lciIpfX0se2tleToidHJpZ2dlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX3R5cGVzW2VdO2Zvcih2YXIgaSBpbiByKXIuaGFzT3duUHJvcGVydHkoaSkmJnJbaV0uY2FsbChuLHQpfX1dKSxlfSgpO24uZGVmYXVsdD1pfSx7fV0sMjpbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksbi5GaWx0ZXJIYW5kbGU9dm9pZCAwO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGk9bChlKCIuL2V2ZW50cyIpKSxvPWwoZSgiLi9maWx0ZXJzZXQiKSksdT1sKGUoIi4vZ3JvdXAiKSksYT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBzPTE7bi5GaWx0ZXJIYW5kbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGUsdCl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IGEuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX2ZpbHRlclNldD1udWxsLHRoaXMuX2ZpbHRlclZhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPWEuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5faWQ9ImZpbHRlciIrcysrLHRoaXMuc2V0R3JvdXAoZSl9cmV0dXJuIHIobixbe2tleToic2V0R3JvdXAiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzO2lmKHRoaXMuX2dyb3VwIT09ZSYmKCh0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl9maWx0ZXJWYXImJih0aGlzLl9maWx0ZXJWYXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLmNsZWFyKCksdGhpcy5fdmFyT25DaGFuZ2VTdWI9bnVsbCx0aGlzLl9maWx0ZXJWYXI9bnVsbCx0aGlzLl9maWx0ZXJTZXQ9bnVsbCksdGhpcy5fZ3JvdXA9ZSkpKXtlPSgwLHUuZGVmYXVsdCkoZSksdGhpcy5fZmlsdGVyU2V0PSh0PWUudmFyKCJmaWx0ZXJzZXQiKSwobj10LmdldCgpKXx8KG49bmV3IG8uZGVmYXVsdCx0LnNldChuKSksbiksdGhpcy5fZmlsdGVyVmFyPSgwLHUuZGVmYXVsdCkoZSkudmFyKCJmaWx0ZXIiKTt2YXIgaT10aGlzLl9maWx0ZXJWYXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7ci5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUscil9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1pfX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5jbGVhcigpLHRoaXMuc2V0R3JvdXAobnVsbCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LmNsZWFyKHRoaXMuX2lkKSx0aGlzLl9vbkNoYW5nZShlKSl9fSx7a2V5OiJzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmlsdGVyU2V0JiYodGhpcy5fZmlsdGVyU2V0LnVwZGF0ZSh0aGlzLl9pZCxlKSx0aGlzLl9vbkNoYW5nZSh0KSl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vbihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9lbWl0dGVyLm9mZihlLHQpfX0se2tleToiX29uQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9maWx0ZXJTZXQmJnRoaXMuX2ZpbHRlclZhci5zZXQodGhpcy5fZmlsdGVyU2V0LnZhbHVlLHRoaXMuX21lcmdlRXh0cmFJbmZvKGUpKX19LHtrZXk6ImZpbHRlcmVkS2V5cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbHRlclNldD90aGlzLl9maWx0ZXJTZXQudmFsdWU6bnVsbH19XSksbn0oKX0seyIuL2V2ZW50cyI6MSwiLi9maWx0ZXJzZXQiOjMsIi4vZ3JvdXAiOjQsIi4vdXRpbCI6MTF9XSwzOltmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxhPWUoIi4vdXRpbCIpO2Z1bmN0aW9uIGwoZSx0KXtyZXR1cm4gZT09PXQ/MDplPHQ/LTE6dDxlPzE6dm9pZCAwfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLGUpLHRoaXMucmVzZXQoKX1yZXR1cm4gcihlLFt7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzPXt9LHRoaXMuX2tleXM9e30sdGhpcy5fdmFsdWU9bnVsbCx0aGlzLl9hY3RpdmVIYW5kbGVzPTB9fSx7a2V5OiJ1cGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7bnVsbCE9PXQmJih0PXQuc2xpY2UoMCkpLnNvcnQobCk7dmFyIG49KDAsYS5kaWZmU29ydGVkTGlzdHMpKHRoaXMuX2hhbmRsZXNbZV0sdCkscj1uLmFkZGVkLGk9bi5yZW1vdmVkO3RoaXMuX2hhbmRsZXNbZV09dDtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLl9rZXlzW3Jbb11dPSh0aGlzLl9rZXlzW3Jbb11dfHwwKSsxO2Zvcih2YXIgdT0wO3U8aS5sZW5ndGg7dSsrKXRoaXMuX2tleXNbaVt1XV0tLTt0aGlzLl91cGRhdGVWYWx1ZSh0KX19LHtrZXk6Il91cGRhdGVWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5fYWxsS2V5cyx0PU9iamVjdC5rZXlzKHRoaXMuX2hhbmRsZXMpLmxlbmd0aDtpZigwPT09dCl0aGlzLl92YWx1ZT1udWxsO2Vsc2V7dGhpcy5fdmFsdWU9W107Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3RoaXMuX2tleXNbZVtuXV09PT10JiZ0aGlzLl92YWx1ZS5wdXNoKGVbbl0pfX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwIT09dGhpcy5faGFuZGxlc1tlXSl7dmFyIHQ9dGhpcy5faGFuZGxlc1tlXTt0fHwodD1bXSk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdGhpcy5fa2V5c1t0W25dXS0tO2RlbGV0ZSB0aGlzLl9oYW5kbGVzW2VdLHRoaXMuX3VwZGF0ZVZhbHVlKCl9fX0se2tleToidmFsdWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl92YWx1ZX19LHtrZXk6Il9hbGxLZXlzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3Qua2V5cyh0aGlzLl9rZXlzKTtyZXR1cm4gZS5zb3J0KGwpLGV9fV0pLGV9KCk7bi5kZWZhdWx0PWl9LHsiLi91dGlsIjoxMX1dLDQ6W2Z1bmN0aW9uKGwsZSxzKXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtzLmRlZmF1bHQ9ZnVuY3Rpb24gZSh0KXt7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiB1Lmhhc093blByb3BlcnR5KHQpfHwodVt0XT1uZXcgYSh0KSksdVt0XTtpZigib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnIodCkpJiZ0Ll92YXJzJiZ0LnZhcilyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYxPT10Lmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiB0WzBdKXJldHVybiBlKHRbMF0pO3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBncm91cE5hbWUgYXJndW1lbnQiKX19O3ZhciB0LGk9bCgiLi92YXIiKSxvPSh0PWkpJiZ0Ll9fZXNNb2R1bGU/dDp7ZGVmYXVsdDp0fTtlLl9fY3Jvc3N0YWxrX2dyb3Vwcz1lLl9fY3Jvc3N0YWxrX2dyb3Vwc3x8e307dmFyIHU9ZS5fX2Nyb3NzdGFsa19ncm91cHM7dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpeyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMubmFtZT1lLHRoaXMuX3ZhcnM9e319cmV0dXJuIG4odCxbe2tleToidmFyIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YXIgbmFtZSIpO3JldHVybiB0aGlzLl92YXJzLmhhc093blByb3BlcnR5KGUpfHwodGhpcy5fdmFyc1tlXT1uZXcgby5kZWZhdWx0KHRoaXMsZSkpLHRoaXMuX3ZhcnNbZV19fSx7a2V5OiJoYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhciBuYW1lIik7cmV0dXJuIHRoaXMuX3ZhcnMuaGFzT3duUHJvcGVydHkoZSl9fV0pLHR9KCl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi92YXIiOjEyfV0sNTpbZnVuY3Rpb24oZixlLGMpeyhmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB0LG49ZigiLi9ncm91cCIpLHI9KHQ9bikmJnQuX19lc01vZHVsZT90OntkZWZhdWx0OnR9LGk9ZigiLi9zZWxlY3Rpb24iKSxvPWYoIi4vZmlsdGVyIiksdT1mKCIuL2lucHV0Iik7ZigiLi9pbnB1dF9zZWxlY3RpemUiKSxmKCIuL2lucHV0X2NoZWNrYm94Z3JvdXAiKSxmKCIuL2lucHV0X3NsaWRlciIpO3ZhciBhPSgwLHIuZGVmYXVsdCkoImRlZmF1bHQiKTtmdW5jdGlvbiBsKGUpe3JldHVybiBhLnZhcihlKX1lLlNoaW55JiZlLlNoaW55LmFkZEN1c3RvbU1lc3NhZ2VIYW5kbGVyKCJ1cGRhdGUtY2xpZW50LXZhbHVlIixmdW5jdGlvbihlKXsic3RyaW5nIj09dHlwZW9mIGUuZ3JvdXA/KDAsci5kZWZhdWx0KShlLmdyb3VwKS52YXIoZS5uYW1lKS5zZXQoZS52YWx1ZSk6bChlLm5hbWUpLnNldChlLnZhbHVlKX0pO3ZhciBzPXtncm91cDpyLmRlZmF1bHQsdmFyOmwsaGFzOmZ1bmN0aW9uKGUpe3JldHVybiBhLmhhcyhlKX0sU2VsZWN0aW9uSGFuZGxlOmkuU2VsZWN0aW9uSGFuZGxlLEZpbHRlckhhbmRsZTpvLkZpbHRlckhhbmRsZSxiaW5kOnUuYmluZH07Yy5kZWZhdWx0PXMsZS5jcm9zc3RhbGs9c30pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2ZpbHRlciI6MiwiLi9ncm91cCI6NCwiLi9pbnB1dCI6NiwiLi9pbnB1dF9jaGVja2JveGdyb3VwIjo3LCIuL2lucHV0X3NlbGVjdGl6ZSI6OCwiLi9pbnB1dF9zbGlkZXIiOjksIi4vc2VsZWN0aW9uIjoxMH1dLDY6W2Z1bmN0aW9uKGUsdCxhKXsoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxhLnJlZ2lzdGVyPWZ1bmN0aW9uKGUpe3JbZS5jbGFzc05hbWVdPWUsdC5kb2N1bWVudCYmImNvbXBsZXRlIiE9PXQuZG9jdW1lbnQucmVhZHlTdGF0ZT9vKGZ1bmN0aW9uKCl7bigpfSk6dC5kb2N1bWVudCYmc2V0VGltZW91dChuLDEwMCl9LGEuYmluZD1uO3ZhciBvPXQualF1ZXJ5LHI9e307ZnVuY3Rpb24gbigpe09iamVjdC5rZXlzKHIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIG49cltlXTtvKCIuIituLmNsYXNzTmFtZSkubm90KCIuY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikuZWFjaChmdW5jdGlvbihlLHQpe2kobix0KX0pfSl9ZnVuY3Rpb24gaShlLHQpe3ZhciBuPW8odCkuZmluZCgic2NyaXB0W3R5cGU9J2FwcGxpY2F0aW9uL2pzb24nXVtkYXRhLWZvcj0nIit0LmlkLnJlcGxhY2UoLyhbISIjJCUmJygpKissLi86Ozw9Pj9AW1xcXF1eYHt8fX5dKS9nLCJcXCQxIikrIiddIikscj1KU09OLnBhcnNlKG5bMF0uaW5uZXJUZXh0KSxpPWUuZmFjdG9yeSh0LHIpO28odCkuZGF0YSgiY3Jvc3N0YWxrLWluc3RhbmNlIixpKSxvKHQpLmFkZENsYXNzKCJjcm9zc3RhbGstaW5wdXQtYm91bmQiKX1pZih0LlNoaW55KXt2YXIgZT1uZXcgdC5TaGlueS5JbnB1dEJpbmRpbmcsdT10LmpRdWVyeTt1LmV4dGVuZChlLHtmaW5kOmZ1bmN0aW9uKGUpe3JldHVybiB1KGUpLmZpbmQoIi5jcm9zc3RhbGstaW5wdXQiKX0saW5pdGlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgdCxuO3UoZSkuaGFzQ2xhc3MoImNyb3NzdGFsay1pbnB1dC1ib3VuZCIpfHwobj1vKHQ9ZSksT2JqZWN0LmtleXMocikuZm9yRWFjaChmdW5jdGlvbihlKXtuLmhhc0NsYXNzKGUpJiYhbi5oYXNDbGFzcygiY3Jvc3N0YWxrLWlucHV0LWJvdW5kIikmJmkocltlXSx0KX0pKX0sZ2V0SWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWR9LGdldFZhbHVlOmZ1bmN0aW9uKGUpe30sc2V0VmFsdWU6ZnVuY3Rpb24oZSx0KXt9LHJlY2VpdmVNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7fSxzdWJzY3JpYmU6ZnVuY3Rpb24oZSx0KXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnJlc3VtZSgpfSx1bnN1YnNjcmliZTpmdW5jdGlvbihlKXt1KGUpLmRhdGEoImNyb3NzdGFsay1pbnN0YW5jZSIpLnN1c3BlbmQoKX19KSx0LlNoaW55LmlucHV0QmluZGluZ3MucmVnaXN0ZXIoZSwiY3Jvc3N0YWxrLmlucHV0QmluZGluZyIpfX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDc6W2Z1bmN0aW9uKHIsZSx0KXsoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShyKCIuL2lucHV0IikpLG49cigiLi9maWx0ZXIiKTt2YXIgYT1lLmpRdWVyeTt0LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1jaGVja2JveGdyb3VwIixmYWN0b3J5OmZ1bmN0aW9uKGUscil7dmFyIGk9bmV3IG4uRmlsdGVySGFuZGxlKHIuZ3JvdXApLG89dm9pZCAwLHU9YShlKTtyZXR1cm4gdS5vbigiY2hhbmdlIiwiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIsZnVuY3Rpb24oKXt2YXIgZT11LmZpbmQoImlucHV0W3R5cGU9J2NoZWNrYm94J106Y2hlY2tlZCIpO2lmKDA9PT1lLmxlbmd0aClvPW51bGwsaS5jbGVhcigpO2Vsc2V7dmFyIHQ9e307ZS5lYWNoKGZ1bmN0aW9uKCl7ci5tYXBbdGhpcy52YWx1ZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgbj1PYmplY3Qua2V5cyh0KTtuLnNvcnQoKSxvPW4saS5zZXQobil9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXtpLmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe28mJmkuc2V0KG8pfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjZ9XSw4OltmdW5jdGlvbihyLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1uKHIoIi4vaW5wdXQiKSksbD1uKHIoIi4vdXRpbCIpKSxzPXIoIi4vZmlsdGVyIik7ZnVuY3Rpb24gbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9dmFyIGY9ZS5qUXVlcnk7dC5yZWdpc3Rlcih7Y2xhc3NOYW1lOiJjcm9zc3RhbGstaW5wdXQtc2VsZWN0IixmYWN0b3J5OmZ1bmN0aW9uKGUsbil7dmFyIHQ9bC5kYXRhZnJhbWVUb0QzKG4uaXRlbXMpLHI9e29wdGlvbnM6W3t2YWx1ZToiIixsYWJlbDoiKEFsbCkifV0uY29uY2F0KHQpLHZhbHVlRmllbGQ6InZhbHVlIixsYWJlbEZpZWxkOiJsYWJlbCIsc2VhcmNoRmllbGQ6ImxhYmVsIn0saT1mKGUpLmZpbmQoInNlbGVjdCIpWzBdLG89ZihpKS5zZWxlY3RpemUocilbMF0uc2VsZWN0aXplLHU9bmV3IHMuRmlsdGVySGFuZGxlKG4uZ3JvdXApLGE9dm9pZCAwO3JldHVybiBvLm9uKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7aWYoMD09PW8uaXRlbXMubGVuZ3RoKWE9bnVsbCx1LmNsZWFyKCk7ZWxzZXt2YXIgdD17fTtvLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oZSl7bi5tYXBbZV0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPSEwfSl9KTt2YXIgZT1PYmplY3Qua2V5cyh0KTtlLnNvcnQoKSxhPWUsdS5zZXQoZSl9fSkse3N1c3BlbmQ6ZnVuY3Rpb24oKXt1LmNsZWFyKCl9LHJlc3VtZTpmdW5jdGlvbigpe2EmJnUuc2V0KGEpfX19fSl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi9maWx0ZXIiOjIsIi4vaW5wdXQiOjYsIi4vdXRpbCI6MTF9XSw5OltmdW5jdGlvbihuLGUsdCl7KGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD1mdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGU7aWYoU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChlKSlyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbj1bXSxyPSEwLGk9ITEsbz12b2lkIDA7dHJ5e2Zvcih2YXIgdSxhPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0odT1hLm5leHQoKSkuZG9uZSkmJihuLnB1c2godS52YWx1ZSksIXR8fG4ubGVuZ3RoIT09dCk7cj0hMCk7fWNhdGNoKGUpe2k9ITAsbz1lfWZpbmFsbHl7dHJ5eyFyJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319cmV0dXJuIG59KGUsdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSx0PWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKCIuL2lucHV0IikpLGE9bigiLi9maWx0ZXIiKTt2YXIgdj1lLmpRdWVyeSxwPWUuc3RyZnRpbWU7ZnVuY3Rpb24geShlLHQpe2Zvcih2YXIgbj1lLnRvU3RyaW5nKCk7bi5sZW5ndGg8dDspbj0iMCIrbjtyZXR1cm4gbn10LnJlZ2lzdGVyKHtjbGFzc05hbWU6ImNyb3NzdGFsay1pbnB1dC1zbGlkZXIiLGZhY3Rvcnk6ZnVuY3Rpb24oZSxsKXt2YXIgcz1uZXcgYS5GaWx0ZXJIYW5kbGUobC5ncm91cCksdD17fSxmPXYoZSkuZmluZCgiaW5wdXQiKSxuPWYuZGF0YSgiZGF0YS10eXBlIikscj1mLmRhdGEoInRpbWUtZm9ybWF0IiksaT1mLmRhdGEoInJvdW5kIiksbz12b2lkIDA7aWYoImRhdGUiPT09bilvPXAudXRjKCksdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX07ZWxzZSBpZigiZGF0ZXRpbWUiPT09bil7dmFyIHU9Zi5kYXRhKCJ0aW1lem9uZSIpO289dT9wLnRpbWV6b25lKHUpOnAsdC5wcmV0dGlmeT1mdW5jdGlvbihlKXtyZXR1cm4gbyhyLG5ldyBEYXRlKGUpKX19ZWxzZSJudW1iZXIiPT09biYmdm9pZCAwIT09aSYmKHQucHJldHRpZnk9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5wb3coMTAsaSk7cmV0dXJuIE1hdGgucm91bmQoZSp0KS90fSk7ZnVuY3Rpb24gYygpe3ZhciBlPWYuZGF0YSgiaW9uUmFuZ2VTbGlkZXIiKS5yZXN1bHQsdD12b2lkIDAsbj1mLmRhdGEoImRhdGEtdHlwZSIpO3JldHVybiB0PSJkYXRlIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuKHQ9bmV3IERhdGUoK2UpKWluc3RhbmNlb2YgRGF0ZT90LmdldFVUQ0Z1bGxZZWFyKCkrIi0iK3kodC5nZXRVVENNb250aCgpKzEsMikrIi0iK3kodC5nZXRVVENEYXRlKCksMik6bnVsbDt2YXIgdH06ImRhdGV0aW1lIj09PW4/ZnVuY3Rpb24oZSl7cmV0dXJuK2UvMWUzfTpmdW5jdGlvbihlKXtyZXR1cm4rZX0sImRvdWJsZSI9PT1mLmRhdGEoImlvblJhbmdlU2xpZGVyIikub3B0aW9ucy50eXBlP1t0KGUuZnJvbSksdChlLnRvKV06dChlLmZyb20pfWYuaW9uUmFuZ2VTbGlkZXIodCk7dmFyIGg9bnVsbDtyZXR1cm4gZi5vbigiY2hhbmdlLmNyb3NzdGFsa1NsaWRlcklucHV0IixmdW5jdGlvbihlKXtpZighZi5kYXRhKCJ1cGRhdGluZyIpJiYhZi5kYXRhKCJhbmltYXRpbmciKSl7Zm9yKHZhciB0PWMoKSxuPWQodCwyKSxyPW5bMF0saT1uWzFdLG89W10sdT0wO3U8bC52YWx1ZXMubGVuZ3RoO3UrKyl7dmFyIGE9bC52YWx1ZXNbdV07cjw9YSYmYTw9aSYmby5wdXNoKGwua2V5c1t1XSl9by5zb3J0KCkscy5zZXQobyksaD1vfX0pLHtzdXNwZW5kOmZ1bmN0aW9uKCl7cy5jbGVhcigpfSxyZXN1bWU6ZnVuY3Rpb24oKXtoJiZzLnNldChoKX19fX0pfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vZmlsdGVyIjoyLCIuL2lucHV0Ijo2fV0sMTA6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU2VsZWN0aW9uSGFuZGxlPXZvaWQgMDt2YXIgcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIHI9dFtuXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gciYmKHIud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIua2V5LHIpfX1yZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0oKSxpPWEoZSgiLi9ldmVudHMiKSksbz1hKGUoIi4vZ3JvdXAiKSksdT1mdW5jdGlvbihlKXt7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fX0oZSgiLi91dGlsIikpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW4uU2VsZWN0aW9uSGFuZGxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsbiksdGhpcy5fZXZlbnRSZWxheT1uZXcgaS5kZWZhdWx0LHRoaXMuX2VtaXR0ZXI9bmV3IHUuU3Vic2NyaXB0aW9uVHJhY2tlcih0aGlzLl9ldmVudFJlbGF5KSx0aGlzLl9ncm91cD1udWxsLHRoaXMuX3Zhcj1udWxsLHRoaXMuX3Zhck9uQ2hhbmdlU3ViPW51bGwsdGhpcy5fZXh0cmFJbmZvPXUuZXh0ZW5kKHtzZW5kZXI6dGhpc30sdCksdGhpcy5zZXRHcm91cChlKX1yZXR1cm4gcihuLFt7a2V5OiJzZXRHcm91cCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZih0aGlzLl9ncm91cCE9PWUmJih0aGlzLl9ncm91cHx8ZSkmJih0aGlzLl92YXImJih0aGlzLl92YXIub2ZmKCJjaGFuZ2UiLHRoaXMuX3Zhck9uQ2hhbmdlU3ViKSx0aGlzLl92YXI9bnVsbCx0aGlzLl92YXJPbkNoYW5nZVN1Yj1udWxsKSx0aGlzLl9ncm91cD1lKSl7dGhpcy5fdmFyPSgwLG8uZGVmYXVsdCkoZSkudmFyKCJzZWxlY3Rpb24iKTt2YXIgbj10aGlzLl92YXIub24oImNoYW5nZSIsZnVuY3Rpb24oZSl7dC5fZXZlbnRSZWxheS50cmlnZ2VyKCJjaGFuZ2UiLGUsdCl9KTt0aGlzLl92YXJPbkNoYW5nZVN1Yj1ufX19LHtrZXk6Il9tZXJnZUV4dHJhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHUuZXh0ZW5kKHt9LHRoaXMuX2V4dHJhSW5mbz90aGlzLl9leHRyYUluZm86bnVsbCxlfHxudWxsKX19LHtrZXk6InNldCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl92YXImJnRoaXMuX3Zhci5zZXQoZSx0aGlzLl9tZXJnZUV4dHJhSW5mbyh0KSl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fdmFyJiZ0aGlzLnNldCh2b2lkIDAsdGhpcy5fbWVyZ2VFeHRyYUluZm8oZSkpfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2VtaXR0ZXIub24oZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZW1pdHRlci5vZmYoZSx0KX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5zZXRHcm91cChudWxsKX19LHtrZXk6InZhbHVlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdmFyP3RoaXMuX3Zhci5nZXQoKTpudWxsfX1dKSxufSgpfSx7Ii4vZXZlbnRzIjoxLCIuL2dyb3VwIjo0LCIuL3V0aWwiOjExfV0sMTE6W2Z1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO3IuZW51bWVyYWJsZT1yLmVudW1lcmFibGV8fCExLHIuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsci5rZXkscil9fXJldHVybiBmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQmJnIoZS5wcm90b3R5cGUsdCksbiYmcihlLG4pLGV9fSgpLGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9O2Z1bmN0aW9uIHUoZSl7Zm9yKHZhciB0PTE7dDxlLmxlbmd0aDt0KyspaWYoZVt0XTw9ZVt0LTFdKXRocm93IG5ldyBFcnJvcigiTGlzdCBpcyBub3Qgc29ydGVkIG9yIGNvbnRhaW5zIGR1cGxpY2F0ZSIpfW4uZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkoMTx0P3QtMTowKSxyPTE7cjx0O3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldO2lmKG51bGwhPW8pZm9yKHZhciB1IGluIG8pby5oYXNPd25Qcm9wZXJ0eSh1KSYmKGVbdV09b1t1XSl9cmV0dXJuIGV9LG4uY2hlY2tTb3J0ZWQ9dSxuLmRpZmZTb3J0ZWRMaXN0cz1mdW5jdGlvbihlLHQpe3ZhciBuPTAscj0wO2V8fChlPVtdKTt0fHwodD1bXSk7dmFyIGk9W10sbz1bXTt1KGUpLHUodCk7Zm9yKDtuPGUubGVuZ3RoJiZyPHQubGVuZ3RoOyllW25dPT09dFtyXT8obisrLHIrKyk6ZVtuXTx0W3JdP2kucHVzaChlW24rK10pOm8ucHVzaCh0W3IrK10pO248ZS5sZW5ndGgmJihpPWkuY29uY2F0KGUuc2xpY2UobikpKTtyPHQubGVuZ3RoJiYobz1vLmNvbmNhdCh0LnNsaWNlKHIpKSk7cmV0dXJue3JlbW92ZWQ6aSxhZGRlZDpvfX0sbi5kYXRhZnJhbWVUb0QzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49dm9pZCAwO2Zvcih2YXIgciBpbiBlKXtpZihlLmhhc093blByb3BlcnR5KHIpJiZ0LnB1c2gociksIm9iamVjdCIhPT1sKGVbcl0pfHx2b2lkIDA9PT1lW3JdLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkFsbCBmaWVsZHMgbXVzdCBiZSBhcnJheXMiKTtpZih2b2lkIDAhPT1uJiZuIT09ZVtyXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJBbGwgZmllbGRzIG11c3QgYmUgYXJyYXlzIG9mIHRoZSBzYW1lIGxlbmd0aCIpO249ZVtyXS5sZW5ndGh9Zm9yKHZhciBpPVtdLG89dm9pZCAwLHU9MDt1PG47dSsrKXtvPXt9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKW9bdFthXV09ZVt0W2FdXVt1XTtpLnB1c2gobyl9cmV0dXJuIGl9O24uU3Vic2NyaXB0aW9uVHJhY2tlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCksdGhpcy5fZW1pdHRlcj1lLHRoaXMuX3N1YnM9e319cmV0dXJuIHIodCxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZW1pdHRlci5vbihlLHQpO3JldHVybiB0aGlzLl9zdWJzW25dPWUsbn19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9lbWl0dGVyLm9mZihlLHQpO3JldHVybiBuJiZkZWxldGUgdGhpcy5fc3Vic1tuXSxufX0se2tleToicmVtb3ZlQWxsTGlzdGVuZXJzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9zdWJzO3RoaXMuX3N1YnM9e30sT2JqZWN0LmtleXMobikuZm9yRWFjaChmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLm9mZihuW2VdLGUpfSl9fV0pLHR9KCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxlLGwpeyhmdW5jdGlvbihvKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBlLHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX19KCksbj1hKCIuL2V2ZW50cyIpLGk9KGU9bikmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9O3ZhciByPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLHQsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsciksdGhpcy5fZ3JvdXA9ZSx0aGlzLl9uYW1lPXQsdGhpcy5fdmFsdWU9bix0aGlzLl9ldmVudHM9bmV3IGkuZGVmYXVsdH1yZXR1cm4gdChyLFt7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX0se2tleToic2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMuX3ZhbHVlIT09ZSl7dmFyIG49dGhpcy5fdmFsdWU7dGhpcy5fdmFsdWU9ZTt2YXIgcj17fTtpZih0JiYib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOnUodCkpKWZvcih2YXIgaSBpbiB0KXQuaGFzT3duUHJvcGVydHkoaSkmJihyW2ldPXRbaV0pO3Iub2xkVmFsdWU9bixyLnZhbHVlPWUsdGhpcy5fZXZlbnRzLnRyaWdnZXIoImNoYW5nZSIscix0aGlzKSxvLlNoaW55JiZvLlNoaW55Lm9uSW5wdXRDaGFuZ2UmJm8uU2hpbnkub25JbnB1dENoYW5nZSgiLmNsaWVudFZhbHVlLSIrKG51bGwhPT10aGlzLl9ncm91cC5uYW1lP3RoaXMuX2dyb3VwLm5hbWUrIi0iOiIiKSt0aGlzLl9uYW1lLHZvaWQgMD09PWU/bnVsbDplKX19fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fZXZlbnRzLm9uKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2V2ZW50cy5vZmYoZSx0KX19XSkscn0oKTtsLmRlZmF1bHQ9cn0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuL2V2ZW50cyI6MX1dfSx7fSxbNV0pOwovLyMgc291cmNlTWFwcGluZ1VSTD1jcm9zc3RhbGsubWluLmpzLm1hcA=="></script>
<link href="data:text/css,%0Aslide%3Anot%28%2Ecurrent%29%20%2Eplotly%2Ehtml%2Dwidget%7B%0Adisplay%3A%20none%3B%0A%7D%0A" rel="stylesheet" />
<script src="data:application/javascript;base64,LyoqCiogcGxvdGx5LmpzIHYyLjUuMQoqIENvcHlyaWdodCAyMDEyLTIwMjEsIFBsb3RseSwgSW5jLgoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiovCiFmdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLHQpO2Vsc2V7KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcykuUGxvdGx5PXQoKX19KChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUscixuKXtmdW5jdGlvbiBpKG8scyl7aWYoIXJbb10pe2lmKCFlW29dKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighcyYmbClyZXR1cm4gbChvLCEwKTtpZihhKXJldHVybiBhKG8sITApO3ZhciBjPW5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK28rIiciKTt0aHJvdyBjLmNvZGU9Ik1PRFVMRV9OT1RfRk9VTkQiLGN9dmFyIHU9cltvXT17ZXhwb3J0czp7fX07ZVtvXVswXS5jYWxsKHUuZXhwb3J0cywoZnVuY3Rpb24odCl7cmV0dXJuIGkoZVtvXVsxXVt0XXx8dCl9KSx1LHUuZXhwb3J0cyx0LGUscixuKX1yZXR1cm4gcltvXS5leHBvcnRzfWZvcih2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxvPTA7bzxuLmxlbmd0aDtvKyspaShuW29dKTtyZXR1cm4gaX0oezE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3JjL2xpYiIpLGk9eyJYLFggZGl2IjonZGlyZWN0aW9uOmx0cjtmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7bWFyZ2luOjA7cGFkZGluZzowOycsIlggaW5wdXQsWCBidXR0b24iOidmb250LWZhbWlseToiT3BlbiBTYW5zIix2ZXJkYW5hLGFyaWFsLHNhbnMtc2VyaWY7JywiWCBpbnB1dDpmb2N1cyxYIGJ1dHRvbjpmb2N1cyI6Im91dGxpbmU6bm9uZTsiLCJYIGEiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIGE6aG92ZXIiOiJ0ZXh0LWRlY29yYXRpb246bm9uZTsiLCJYIC5jcmlzcCI6InNoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnVzZXItc2VsZWN0LW5vbmUiOiItd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTsiLCJYIHN2ZyI6Im92ZXJmbG93OmhpZGRlbjsiLCJYIHN2ZyBhIjoiZmlsbDojNDQ3YWRiOyIsIlggc3ZnIGE6aG92ZXIiOiJmaWxsOiMzYzZkYzU7IiwiWCAubWFpbi1zdmciOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cG9pbnRlci1ldmVudHM6bm9uZTsiLCJYIC5tYWluLXN2ZyAuZHJhZ2xheWVyIjoicG9pbnRlci1ldmVudHM6YWxsOyIsIlggLmN1cnNvci1kZWZhdWx0IjoiY3Vyc29yOmRlZmF1bHQ7IiwiWCAuY3Vyc29yLXBvaW50ZXIiOiJjdXJzb3I6cG9pbnRlcjsiLCJYIC5jdXJzb3ItY3Jvc3NoYWlyIjoiY3Vyc29yOmNyb3NzaGFpcjsiLCJYIC5jdXJzb3ItbW92ZSI6ImN1cnNvcjptb3ZlOyIsIlggLmN1cnNvci1jb2wtcmVzaXplIjoiY3Vyc29yOmNvbC1yZXNpemU7IiwiWCAuY3Vyc29yLXJvdy1yZXNpemUiOiJjdXJzb3I6cm93LXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnMtcmVzaXplIjoiY3Vyc29yOm5zLXJlc2l6ZTsiLCJYIC5jdXJzb3ItZXctcmVzaXplIjoiY3Vyc29yOmV3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itc3ctcmVzaXplIjoiY3Vyc29yOnN3LXJlc2l6ZTsiLCJYIC5jdXJzb3Itcy1yZXNpemUiOiJjdXJzb3I6cy1yZXNpemU7IiwiWCAuY3Vyc29yLXNlLXJlc2l6ZSI6ImN1cnNvcjpzZS1yZXNpemU7IiwiWCAuY3Vyc29yLXctcmVzaXplIjoiY3Vyc29yOnctcmVzaXplOyIsIlggLmN1cnNvci1lLXJlc2l6ZSI6ImN1cnNvcjplLXJlc2l6ZTsiLCJYIC5jdXJzb3ItbnctcmVzaXplIjoiY3Vyc29yOm53LXJlc2l6ZTsiLCJYIC5jdXJzb3Itbi1yZXNpemUiOiJjdXJzb3I6bi1yZXNpemU7IiwiWCAuY3Vyc29yLW5lLXJlc2l6ZSI6ImN1cnNvcjpuZS1yZXNpemU7IiwiWCAuY3Vyc29yLWdyYWIiOiJjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFiOyIsIlggLm1vZGViYXIiOiJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4O3JpZ2h0OjJweDsiLCJYIC5lYXNlLWJnIjoiLXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlIDBzOyIsIlggLm1vZGViYXItLWhvdmVyPjpub3QoLndhdGVybWFyaykiOiJvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7LW1zLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgZWFzZSAwczstby10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGVhc2UgMHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBlYXNlIDBzOyIsIlg6aG92ZXIgLm1vZGViYXItLWhvdmVyIC5tb2RlYmFyLWdyb3VwIjoib3BhY2l0eToxOyIsIlggLm1vZGViYXItZ3JvdXAiOiJmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLWxlZnQ6OHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aGl0ZS1zcGFjZTpub3dyYXA7IiwiWCAubW9kZWJhci1idG4iOiJwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTZweDtwYWRkaW5nOjNweCA0cHg7aGVpZ2h0OjIycHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6bm9ybWFsO2JveC1zaXppbmc6Ym9yZGVyLWJveDsiLCJYIC5tb2RlYmFyLWJ0biBzdmciOiJwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MnB4OyIsIlggLm1vZGViYXIudmVydGljYWwiOiJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQ7bWF4LWhlaWdodDoxMDAlOyIsIlggLm1vZGViYXIudmVydGljYWwgc3ZnIjoidG9wOi0xcHg7IiwiWCAubW9kZWJhci52ZXJ0aWNhbCAubW9kZWJhci1ncm91cCI6ImRpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nLWxlZnQ6MHB4O3BhZGRpbmctYm90dG9tOjhweDsiLCJYIC5tb2RlYmFyLnZlcnRpY2FsIC5tb2RlYmFyLWdyb3VwIC5tb2RlYmFyLWJ0biI6ImRpc3BsYXk6YmxvY2s7dGV4dC1hbGlnbjpjZW50ZXI7IiwiWCBbZGF0YS10aXRsZV06YmVmb3JlLFggW2RhdGEtdGl0bGVdOmFmdGVyIjoicG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1vei10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7LW1zLXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLCAwLCAwKTstby10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwgMCwgMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsIDAsIDApO2Rpc3BsYXk6bm9uZTtvcGFjaXR5OjA7ei1pbmRleDoxMDAxO3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjExMCU7cmlnaHQ6NTAlOyIsIlggW2RhdGEtdGl0bGVdOmhvdmVyOmJlZm9yZSxYIFtkYXRhLXRpdGxlXTpob3ZlcjphZnRlciI6ImRpc3BsYXk6YmxvY2s7b3BhY2l0eToxOyIsIlggW2RhdGEtdGl0bGVdOmJlZm9yZSI6J2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O3otaW5kZXg6MTAwMjttYXJnaW4tdG9wOi0xMnB4O2JvcmRlci1ib3R0b20tY29sb3I6IzY5NzM4YTttYXJnaW4tcmlnaHQ6LTZweDsnLCJYIFtkYXRhLXRpdGxlXTphZnRlciI6ImNvbnRlbnQ6YXR0cihkYXRhLXRpdGxlKTtiYWNrZ3JvdW5kOiM2OTczOGE7Y29sb3I6I2ZmZjtwYWRkaW5nOjhweCAxMHB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO21hcmdpbi1yaWdodDotMThweDtib3JkZXItcmFkaXVzOjJweDsiLCJYIC52ZXJ0aWNhbCBbZGF0YS10aXRsZV06YmVmb3JlLFggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTphZnRlciI6InRvcDowJTtyaWdodDoyMDAlOyIsIlggLnZlcnRpY2FsIFtkYXRhLXRpdGxlXTpiZWZvcmUiOiJib3JkZXI6NnB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiM2OTczOGE7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLXJpZ2h0Oi0zMHB4OyIsIlggLnNlbGVjdC1vdXRsaW5lIjoiZmlsbDpub25lO3N0cm9rZS13aWR0aDoxO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzOyIsIlggLnNlbGVjdC1vdXRsaW5lLTEiOiJzdHJva2U6I2ZmZjsiLCJYIC5zZWxlY3Qtb3V0bGluZS0yIjoic3Ryb2tlOiMwMDA7c3Ryb2tlLWRhc2hhcnJheToycHggMnB4OyIsWTonZm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsdmVyZGFuYSxhcmlhbCxzYW5zLXNlcmlmO3Bvc2l0aW9uOmZpeGVkO3RvcDo1MHB4O3JpZ2h0OjIwcHg7ei1pbmRleDoxMDAwMDtmb250LXNpemU6MTBwdDttYXgtd2lkdGg6MTgwcHg7JywiWSBwIjoibWFyZ2luOjA7IiwiWSAubm90aWZpZXItbm90ZSI6Im1pbi13aWR0aDoxODBweDttYXgtd2lkdGg6MjUwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZmZmO3otaW5kZXg6MzAwMDttYXJnaW46MDtiYWNrZ3JvdW5kLWNvbG9yOiM4Yzk3YWY7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0MCwxNTEsMTc1LC45KTtjb2xvcjojZmZmO3BhZGRpbmc6MTBweDtvdmVyZmxvdy13cmFwOmJyZWFrLXdvcmQ7d29yZC13cmFwOmJyZWFrLXdvcmQ7LW1zLWh5cGhlbnM6YXV0bzstd2Via2l0LWh5cGhlbnM6YXV0bztoeXBoZW5zOmF1dG87IiwiWSAubm90aWZpZXItY2xvc2UiOiJjb2xvcjojZmZmO29wYWNpdHk6Ljg7ZmxvYXQ6cmlnaHQ7cGFkZGluZzowIDVweDtiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4OyIsIlkgLm5vdGlmaWVyLWNsb3NlOmhvdmVyIjoiY29sb3I6IzQ0NDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjsifTtmb3IodmFyIGEgaW4gaSl7dmFyIG89YS5yZXBsYWNlKC9eLC8sIiAsIikucmVwbGFjZSgvWC9nLCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSIpLnJlcGxhY2UoL1kvZywiLnBsb3RseS1ub3RpZmllciIpO24uYWRkU3R5bGVSdWxlKG8saVthXSl9fSx7Ii4uL3NyYy9saWIiOjc3Nn1dLDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSIpfSx7Ii4uL3NyYy90cmFuc2Zvcm1zL2FnZ3JlZ2F0ZSI6MTM3Mn1dLDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFyIil9LHsiLi4vc3JjL3RyYWNlcy9iYXIiOjkyMn1dLDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvYmFycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL2JhcnBvbGFyIjo5MzV9XSw1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2JveCIpfSx7Ii4uL3NyYy90cmFjZXMvYm94Ijo5NDV9XSw2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiKX0seyIuLi9zcmMvY29tcG9uZW50cy9jYWxlbmRhcnMiOjYzN31dLDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvY2FuZGxlc3RpY2siKX0seyIuLi9zcmMvdHJhY2VzL2NhbmRsZXN0aWNrIjo5NTR9XSw4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvY2FycGV0Ijo5NzN9XSw5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGgiOjk4N31dLDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2Nob3JvcGxldGhtYXBib3giOjk5NH1dLDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbmUiKX0seyIuLi9zcmMvdHJhY2VzL2NvbmUiOjFlM31dLDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2NvbnRvdXIiOjEwMTV9XSwxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0Iil9LHsiLi4vc3JjL3RyYWNlcy9jb250b3VyY2FycGV0IjoxMDI2fV0sMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy9jb3JlIil9LHsiLi4vc3JjL2NvcmUiOjc1NH1dLDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL2RlbnNpdHltYXBib3giOjEwMzR9XSwxNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvZmlsdGVyIjoxMzczfV0sMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvZnVubmVsIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWwiOjEwNDR9XSwxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIil9LHsiLi4vc3JjL3RyYWNlcy9mdW5uZWxhcmVhIjoxMDUzfV0sMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFuc2Zvcm1zL2dyb3VwYnkiKX0seyIuLi9zcmMvdHJhbnNmb3Jtcy9ncm91cGJ5IjoxMzc0fV0sMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGVhdG1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcCI6MTA2Nn1dLDIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2hlYXRtYXBnbCIpfSx7Ii4uL3NyYy90cmFjZXMvaGVhdG1hcGdsIjoxMDc2fV0sMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaGlzdG9ncmFtIil9LHsiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0iOjEwODh9XSwyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZCIpfSx7Ii4uL3NyYy90cmFjZXMvaGlzdG9ncmFtMmQiOjEwOTR9XSwyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9oaXN0b2dyYW0yZGNvbnRvdXIiKX0seyIuLi9zcmMvdHJhY2VzL2hpc3RvZ3JhbTJkY29udG91ciI6MTA5OH1dLDI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2ljaWNsZSIpfSx7Ii4uL3NyYy90cmFjZXMvaWNpY2xlIjoxMTA0fV0sMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvaW1hZ2UiKX0seyIuLi9zcmMvdHJhY2VzL2ltYWdlIjoxMTE3fV0sMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb3JlIik7bi5yZWdpc3RlcihbdCgiLi9iYXIiKSx0KCIuL2JveCIpLHQoIi4vaGVhdG1hcCIpLHQoIi4vaGlzdG9ncmFtIiksdCgiLi9oaXN0b2dyYW0yZCIpLHQoIi4vaGlzdG9ncmFtMmRjb250b3VyIiksdCgiLi9jb250b3VyIiksdCgiLi9zY2F0dGVydGVybmFyeSIpLHQoIi4vdmlvbGluIiksdCgiLi9mdW5uZWwiKSx0KCIuL3dhdGVyZmFsbCIpLHQoIi4vaW1hZ2UiKSx0KCIuL3BpZSIpLHQoIi4vc3VuYnVyc3QiKSx0KCIuL3RyZWVtYXAiKSx0KCIuL2ljaWNsZSIpLHQoIi4vZnVubmVsYXJlYSIpLHQoIi4vc2NhdHRlcjNkIiksdCgiLi9zdXJmYWNlIiksdCgiLi9pc29zdXJmYWNlIiksdCgiLi92b2x1bWUiKSx0KCIuL21lc2gzZCIpLHQoIi4vY29uZSIpLHQoIi4vc3RyZWFtdHViZSIpLHQoIi4vc2NhdHRlcmdlbyIpLHQoIi4vY2hvcm9wbGV0aCIpLHQoIi4vc2NhdHRlcmdsIiksdCgiLi9zcGxvbSIpLHQoIi4vcG9pbnRjbG91ZCIpLHQoIi4vaGVhdG1hcGdsIiksdCgiLi9wYXJjb29yZHMiKSx0KCIuL3BhcmNhdHMiKSx0KCIuL3NjYXR0ZXJtYXBib3giKSx0KCIuL2Nob3JvcGxldGhtYXBib3giKSx0KCIuL2RlbnNpdHltYXBib3giKSx0KCIuL3NhbmtleSIpLHQoIi4vaW5kaWNhdG9yIiksdCgiLi90YWJsZSIpLHQoIi4vY2FycGV0IiksdCgiLi9zY2F0dGVyY2FycGV0IiksdCgiLi9jb250b3VyY2FycGV0IiksdCgiLi9vaGxjIiksdCgiLi9jYW5kbGVzdGljayIpLHQoIi4vc2NhdHRlcnBvbGFyIiksdCgiLi9zY2F0dGVycG9sYXJnbCIpLHQoIi4vYmFycG9sYXIiKSx0KCIuL2FnZ3JlZ2F0ZSIpLHQoIi4vZmlsdGVyIiksdCgiLi9ncm91cGJ5IiksdCgiLi9zb3J0IiksdCgiLi9jYWxlbmRhcnMiKV0pLGUuZXhwb3J0cz1ufSx7Ii4vYWdncmVnYXRlIjoyLCIuL2JhciI6MywiLi9iYXJwb2xhciI6NCwiLi9ib3giOjUsIi4vY2FsZW5kYXJzIjo2LCIuL2NhbmRsZXN0aWNrIjo3LCIuL2NhcnBldCI6OCwiLi9jaG9yb3BsZXRoIjo5LCIuL2Nob3JvcGxldGhtYXBib3giOjEwLCIuL2NvbmUiOjExLCIuL2NvbnRvdXIiOjEyLCIuL2NvbnRvdXJjYXJwZXQiOjEzLCIuL2NvcmUiOjE0LCIuL2RlbnNpdHltYXBib3giOjE1LCIuL2ZpbHRlciI6MTYsIi4vZnVubmVsIjoxNywiLi9mdW5uZWxhcmVhIjoxOCwiLi9ncm91cGJ5IjoxOSwiLi9oZWF0bWFwIjoyMCwiLi9oZWF0bWFwZ2wiOjIxLCIuL2hpc3RvZ3JhbSI6MjIsIi4vaGlzdG9ncmFtMmQiOjIzLCIuL2hpc3RvZ3JhbTJkY29udG91ciI6MjQsIi4vaWNpY2xlIjoyNSwiLi9pbWFnZSI6MjYsIi4vaW5kaWNhdG9yIjoyOCwiLi9pc29zdXJmYWNlIjoyOSwiLi9tZXNoM2QiOjMwLCIuL29obGMiOjMxLCIuL3BhcmNhdHMiOjMyLCIuL3BhcmNvb3JkcyI6MzMsIi4vcGllIjozNCwiLi9wb2ludGNsb3VkIjozNSwiLi9zYW5rZXkiOjM2LCIuL3NjYXR0ZXIzZCI6MzcsIi4vc2NhdHRlcmNhcnBldCI6MzgsIi4vc2NhdHRlcmdlbyI6MzksIi4vc2NhdHRlcmdsIjo0MCwiLi9zY2F0dGVybWFwYm94Ijo0MSwiLi9zY2F0dGVycG9sYXIiOjQyLCIuL3NjYXR0ZXJwb2xhcmdsIjo0MywiLi9zY2F0dGVydGVybmFyeSI6NDQsIi4vc29ydCI6NDUsIi4vc3Bsb20iOjQ2LCIuL3N0cmVhbXR1YmUiOjQ3LCIuL3N1bmJ1cnN0Ijo0OCwiLi9zdXJmYWNlIjo0OSwiLi90YWJsZSI6NTAsIi4vdHJlZW1hcCI6NTEsIi4vdmlvbGluIjo1MiwiLi92b2x1bWUiOjUzLCIuL3dhdGVyZmFsbCI6NTR9XSwyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9pbmRpY2F0b3IiKX0seyIuLi9zcmMvdHJhY2VzL2luZGljYXRvciI6MTEyNX1dLDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiKX0seyIuLi9zcmMvdHJhY2VzL2lzb3N1cmZhY2UiOjExMzF9XSwzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9tZXNoM2QiKX0seyIuLi9zcmMvdHJhY2VzL21lc2gzZCI6MTEzNn1dLDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL29obGMiKX0seyIuLi9zcmMvdHJhY2VzL29obGMiOjExNDF9XSwzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjYXRzIjoxMTUwfV0sMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvcGFyY29vcmRzIil9LHsiLi4vc3JjL3RyYWNlcy9wYXJjb29yZHMiOjExNjB9XSwzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9waWUiKX0seyIuLi9zcmMvdHJhY2VzL3BpZSI6MTE3MX1dLDM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiKX0seyIuLi9zcmMvdHJhY2VzL3BvaW50Y2xvdWQiOjExODB9XSwzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zYW5rZXkiKX0seyIuLi9zcmMvdHJhY2VzL3NhbmtleSI6MTE4Nn1dLDM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXIzZCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcjNkIjoxMjI0fV0sMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCIpfSx7Ii4uL3NyYy90cmFjZXMvc2NhdHRlcmNhcnBldCI6MTIzMX1dLDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnZW8iOjEyMzl9XSw0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVyZ2wiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJnbCI6MTI1Mn1dLDQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJtYXBib3giOjEyNjJ9XSw0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXIiKX0seyIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhciI6MTI3MH1dLDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJwb2xhcmdsIil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVycG9sYXJnbCI6MTI3N31dLDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NjYXR0ZXJ0ZXJuYXJ5Iil9LHsiLi4vc3JjL3RyYWNlcy9zY2F0dGVydGVybmFyeSI6MTI4NX1dLDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhbnNmb3Jtcy9zb3J0Iil9LHsiLi4vc3JjL3RyYW5zZm9ybXMvc29ydCI6MTM3Nn1dLDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3NwbG9tIil9LHsiLi4vc3JjL3RyYWNlcy9zcGxvbSI6MTI5NH1dLDQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmUiKX0seyIuLi9zcmMvdHJhY2VzL3N0cmVhbXR1YmUiOjEzMDJ9XSw0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdW5idXJzdCIpfSx7Ii4uL3NyYy90cmFjZXMvc3VuYnVyc3QiOjEzMTB9XSw0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIil9LHsiLi4vc3JjL3RyYWNlcy9zdXJmYWNlIjoxMzE5fV0sNTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdGFibGUiKX0seyIuLi9zcmMvdHJhY2VzL3RhYmxlIjoxMzI3fV0sNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdHJlZW1hcCIpfSx7Ii4uL3NyYy90cmFjZXMvdHJlZW1hcCI6MTMzOH1dLDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuLi9zcmMvdHJhY2VzL3Zpb2xpbiIpfSx7Ii4uL3NyYy90cmFjZXMvdmlvbGluIjoxMzUxfV0sNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4uL3NyYy90cmFjZXMvdm9sdW1lIil9LHsiLi4vc3JjL3RyYWNlcy92b2x1bWUiOjEzNTl9XSw1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi4vc3JjL3RyYWNlcy93YXRlcmZhbGwiKX0seyIuLi9zcmMvdHJhY2VzL3dhdGVyZmFsbCI6MTM2N31dLDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuZXllfHxbMCwwLDFdLHI9dC5jZW50ZXJ8fFswLDAsMF0scz10LnVwfHxbMCwxLDBdLGw9dC5kaXN0YW5jZUxpbWl0c3x8WzAsMS8wXSxjPXQubW9kZXx8InR1cm50YWJsZSIsdT1uKCksZj1pKCksaD1hKCk7cmV0dXJuIHUuc2V0RGlzdGFuY2VMaW1pdHMobFswXSxsWzFdKSx1Lmxvb2tBdCgwLGUscixzKSxmLnNldERpc3RhbmNlTGltaXRzKGxbMF0sbFsxXSksZi5sb29rQXQoMCxlLHIscyksaC5zZXREaXN0YW5jZUxpbWl0cyhsWzBdLGxbMV0pLGgubG9va0F0KDAsZSxyLHMpLG5ldyBvKHt0dXJudGFibGU6dSxvcmJpdDpmLG1hdHJpeDpofSxjKX07dmFyIG49dCgidHVybnRhYmxlLWNhbWVyYS1jb250cm9sbGVyIiksaT10KCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciIpLGE9dCgibWF0cml4LWNhbWVyYS1jb250cm9sbGVyIik7ZnVuY3Rpb24gbyh0LGUpe3RoaXMuX2NvbnRyb2xsZXJOYW1lcz1PYmplY3Qua2V5cyh0KSx0aGlzLl9jb250cm9sbGVyTGlzdD10aGlzLl9jb250cm9sbGVyTmFtZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzLl9tb2RlPWUsdGhpcy5fYWN0aXZlPXRbZV0sdGhpcy5fYWN0aXZlfHwodGhpcy5fbW9kZT0idHVybnRhYmxlIix0aGlzLl9hY3RpdmU9dC50dXJudGFibGUpLHRoaXMubW9kZXM9dGhpcy5fY29udHJvbGxlck5hbWVzLHRoaXMuY29tcHV0ZWRNYXRyaXg9dGhpcy5fYWN0aXZlLmNvbXB1dGVkTWF0cml4LHRoaXMuY29tcHV0ZWRFeWU9dGhpcy5fYWN0aXZlLmNvbXB1dGVkRXllLHRoaXMuY29tcHV0ZWRVcD10aGlzLl9hY3RpdmUuY29tcHV0ZWRVcCx0aGlzLmNvbXB1dGVkQ2VudGVyPXRoaXMuX2FjdGl2ZS5jb21wdXRlZENlbnRlcix0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMuX2FjdGl2ZS5jb21wdXRlZFJhZGl1c312YXIgcz1vLnByb3RvdHlwZTtzLmZsdXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5mbHVzaCh0KX0scy5pZGxlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb250cm9sbGVyTGlzdCxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXS5pZGxlKHQpfSxzLmxvb2tBdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ubG9va0F0KHQsZSxyLG4pfSxzLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucm90YXRlKHQsZSxyLG4pfSxzLnBhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0ucGFuKHQsZSxyLG4pfSxzLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9dGhpcy5fY29udHJvbGxlckxpc3QsYT0wO2E8aS5sZW5ndGg7KythKWlbYV0udHJhbnNsYXRlKHQsZSxyLG4pfSxzLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXRNYXRyaXgodCxlKX0scy5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl9jb250cm9sbGVyTGlzdCxuPTA7bjxyLmxlbmd0aDsrK24pcltuXS5zZXREaXN0YW5jZUxpbWl0cyh0LGUpfSxzLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbnRyb2xsZXJMaXN0LG49MDtuPHIubGVuZ3RoOysrbilyW25dLnNldERpc3RhbmNlKHQsZSl9LHMucmVjYWxjTWF0cml4PWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZS5yZWNhbGNNYXRyaXgodCl9LHMuZ2V0RGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5nZXREaXN0YW5jZSh0KX0scy5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYWN0aXZlLmdldERpc3RhbmNlTGltaXRzKHQpfSxzLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZS5sYXN0VCgpfSxzLnNldE1vZGU9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuX21vZGUpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZXJOYW1lcy5pbmRleE9mKHQpO2lmKCEoZTwwKSl7dmFyIHI9dGhpcy5fYWN0aXZlLG49dGhpcy5fY29udHJvbGxlckxpc3RbZV0saT1NYXRoLm1heChyLmxhc3RUKCksbi5sYXN0VCgpKTtyLnJlY2FsY01hdHJpeChpKSxuLnNldE1hdHJpeChpLHIuY29tcHV0ZWRNYXRyaXgpLHRoaXMuX2FjdGl2ZT1uLHRoaXMuX21vZGU9dCx0aGlzLmNvbXB1dGVkTWF0cml4PXRoaXMuX2FjdGl2ZS5jb21wdXRlZE1hdHJpeCx0aGlzLmNvbXB1dGVkRXllPXRoaXMuX2FjdGl2ZS5jb21wdXRlZEV5ZSx0aGlzLmNvbXB1dGVkVXA9dGhpcy5fYWN0aXZlLmNvbXB1dGVkVXAsdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLl9hY3RpdmUuY29tcHV0ZWRDZW50ZXIsdGhpcy5jb21wdXRlZFJhZGl1cz10aGlzLl9hY3RpdmUuY29tcHV0ZWRSYWRpdXN9fX0scy5nZXRNb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vZGV9fSx7Im1hdHJpeC1jYW1lcmEtY29udHJvbGxlciI6NDQ3LCJvcmJpdC1jYW1lcmEtY29udHJvbGxlciI6NDY4LCJ0dXJudGFibGUtY2FtZXJhLWNvbnRyb2xsZXIiOjU3Nn1dLDU2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpLHQoImQzLWNvbGxlY3Rpb24iKSx0KCJkMy1zaGFwZSIpLHQoImVsZW1lbnRhcnktY2lyY3VpdHMtZGlyZWN0ZWQtZ3JhcGgiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG51bGwpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiB0LnRhcmdldC5kZXB0aH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQuc291cmNlTGlua3MubGVuZ3RoP3QuZGVwdGg6ZS0xfWZ1bmN0aW9uIHModCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWk9aSYmaS5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdCIpP2kuZGVmYXVsdDppO3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJnQuY29uc3RydWN0b3I9PT1TeW1ib2wmJnQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGYodC5zb3VyY2UsZS5zb3VyY2UpfHx0LmluZGV4LWUuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmKHQudGFyZ2V0LGUudGFyZ2V0KXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC5wYXJ0T2ZDeWNsZT09PWUucGFydE9mQ3ljbGU/dC55MC1lLnkwOiJ0b3AiPT09dC5jaXJjdWxhckxpbmtUeXBlfHwiYm90dG9tIj09PWUuY2lyY3VsYXJMaW5rVHlwZT8tMToxfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudmFsdWV9ZnVuY3Rpb24gcCh0KXtyZXR1cm4odC55MCt0LnkxKS8yfWZ1bmN0aW9uIGQodCl7cmV0dXJuIHAodC5zb3VyY2UpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIHAodC50YXJnZXQpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5ub2Rlc31mdW5jdGlvbiB5KHQpe3JldHVybiB0LmxpbmtzfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj10LmdldChlKTtpZighcil0aHJvdyBuZXcgRXJyb3IoIm1pc3Npbmc6ICIrZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYih0LGUpe3JldHVybiBlKHQpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPTA7aWYobnVsbD09PXIpe2Zvcih2YXIgYT1bXSxvPTA7bzx0LmxpbmtzLmxlbmd0aDtvKyspe3ZhciBzPXQubGlua3Nbb10sbD1zLnNvdXJjZS5pbmRleCxjPXMudGFyZ2V0LmluZGV4O2FbbF18fChhW2xdPVtdKSxhW2NdfHwoYVtjXT1bXSksLTE9PT1hW2xdLmluZGV4T2YoYykmJmFbbF0ucHVzaChjKX12YXIgdT1pKGEpO3Uuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIGY9e307Zm9yKG89MDtvPHUubGVuZ3RoO28rKyl7dmFyIGg9dVtvXS5zbGljZSgtMik7ZltoWzBdXXx8KGZbaFswXV09e30pLGZbaFswXV1baFsxXV09ITB9dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnRhcmdldC5pbmRleCxyPXQuc291cmNlLmluZGV4O2U9PT1yfHxmW3JdJiZmW3JdW2VdPyh0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKTp0LmNpcmN1bGFyPSExfSkpfWVsc2UgdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnNvdXJjZVtyXTx0LnRhcmdldFtyXT90LmNpcmN1bGFyPSExOih0LmNpcmN1bGFyPSEwLHQuY2lyY3VsYXJMaW5rSUQ9bixuKz0xKX0pKX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9MCxuPTA7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpLmNpcmN1bGFyJiYoaS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZXx8aS50YXJnZXQuY2lyY3VsYXJMaW5rVHlwZT9pLmNpcmN1bGFyTGlua1R5cGU9aS5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZT9pLnNvdXJjZS5jaXJjdWxhckxpbmtUeXBlOmkudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU6aS5jaXJjdWxhckxpbmtUeXBlPXI8bj8idG9wIjoiYm90dG9tIiwidG9wIj09aS5jaXJjdWxhckxpbmtUeXBlP3IrPTE6bis9MSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxlKSE9YihpLnNvdXJjZSxlKSYmYih0LGUpIT1iKGkudGFyZ2V0LGUpfHwodC5jaXJjdWxhckxpbmtUeXBlPWkuY2lyY3VsYXJMaW5rVHlwZSl9KSkpfSkpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhciYmKHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9PXQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGUmJih0LmNpcmN1bGFyTGlua1R5cGU9dC5zb3VyY2UuY2lyY3VsYXJMaW5rVHlwZSkscSh0LGUpJiYodC5jaXJjdWxhckxpbmtUeXBlPXQuc291cmNlLmNpcmN1bGFyTGlua1R5cGUpKX0pKX1mdW5jdGlvbiBUKHQpe3ZhciBlPU1hdGguYWJzKHQueTEtdC55MCkscj1NYXRoLmFicyh0LnRhcmdldC54MC10LnNvdXJjZS54MSk7cmV0dXJuIE1hdGguYXRhbihyL2UpfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj0wO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7cj10LmNpcmN1bGFyJiYhcSh0LGUpP3IrMTpyfSkpO3ZhciBuPTA7cmV0dXJuIHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bj10LmNpcmN1bGFyJiYhcSh0LGUpP24rMTpufSkpLHIrbn1mdW5jdGlvbiBBKHQpe3ZhciBlPXQuc291cmNlLnNvdXJjZUxpbmtzLHI9MDtlLmZvckVhY2goKGZ1bmN0aW9uKHQpe3I9dC5jaXJjdWxhcj9yKzE6cn0pKTt2YXIgbj10LnRhcmdldC50YXJnZXRMaW5rcyxpPTA7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aT10LmNpcmN1bGFyP2krMTppfSkpLCEocj4xfHxpPjEpfWZ1bmN0aW9uIE0odCxlLHIpe3JldHVybiB0LnNvcnQoRSksdC5mb3JFYWNoKChmdW5jdGlvbihuLGkpe3ZhciBhLG8scz0wO2lmKHEobixyKSYmQShuKSluLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzI7ZWxzZXtmb3IodmFyIGw9MDtsPGk7bCsrKWlmKGE9dFtpXSxvPXRbbF0sIShhLnNvdXJjZS5jb2x1bW48by50YXJnZXQuY29sdW1ufHxhLnRhcmdldC5jb2x1bW4+by5zb3VyY2UuY29sdW1uKSl7dmFyIGM9dFtsXS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyK3RbbF0ud2lkdGgvMitlO3M9Yz5zP2M6c31uLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxCdWZmZXI9cytuLndpZHRoLzJ9fSkpLHR9ZnVuY3Rpb24gUyh0LHIsaSxhKXt2YXIgbz1lLm1pbih0LmxpbmtzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UueTB9KSk7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhclBhdGhEYXRhPXt9KX0pKSxNKHQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlfSkpLHIsYSksTSh0LmxpbmtzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZX0pKSxyLGEpLHQubGlua3MuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoZS5jaXJjdWxhcil7aWYoZS5jaXJjdWxhclBhdGhEYXRhLmFyY1JhZGl1cz1lLndpZHRoKzEwLGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0Tm9kZUJ1ZmZlcj01LGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodE5vZGVCdWZmZXI9NSxlLmNpcmN1bGFyUGF0aERhdGEuc291cmNlV2lkdGg9ZS5zb3VyY2UueDEtZS5zb3VyY2UueDAsZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVg9ZS5zb3VyY2UueDArZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVdpZHRoLGUuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRYPWUudGFyZ2V0LngwLGUuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZPWUueTAsZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk9ZS55MSxxKGUsYSkmJkEoZSkpZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRTbWFsbEFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cz0xMCtlLndpZHRoLzIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yLGUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzPTEwK2Uud2lkdGgvMiwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlPyhlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50PWUuc291cmNlLnkxKzI1K2UuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyk6KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9ZS5zb3VyY2UueTAtMjUtZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50K2UuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTtlbHNle3ZhciBzPWUuc291cmNlLmNvbHVtbixsPWUuY2lyY3VsYXJMaW5rVHlwZSxjPXQubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zb3VyY2UuY29sdW1uPT1zJiZ0LmNpcmN1bGFyTGlua1R5cGU9PWx9KSk7ImJvdHRvbSI9PWUuY2lyY3VsYXJMaW5rVHlwZT9jLnNvcnQoQyk6Yy5zb3J0KEwpO3ZhciB1PTA7Yy5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuY2lyY3VsYXJMaW5rSUQ9PWUuY2lyY3VsYXJMaW5rSUQmJihlLmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzPTEwK2Uud2lkdGgvMit1LGUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLHM9ZS50YXJnZXQuY29sdW1uLGM9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldC5jb2x1bW49PXMmJnQuY2lyY3VsYXJMaW5rVHlwZT09bH0pKSwiYm90dG9tIj09ZS5jaXJjdWxhckxpbmtUeXBlP2Muc29ydChJKTpjLnNvcnQoUCksdT0wLGMuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXt0LmNpcmN1bGFyTGlua0lEPT1lLmNpcmN1bGFyTGlua0lEJiYoZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXM9MTArZS53aWR0aC8yK3UsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXM9MTArZS53aWR0aC8yK24qcit1KSx1Kz10LndpZHRofSkpLCJib3R0b20iPT1lLmNpcmN1bGFyTGlua1R5cGU/KGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQ9TWF0aC5tYXgoaSxlLnNvdXJjZS55MSxlLnRhcmdldC55MSkrMjUrZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsQnVmZmVyLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbExlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMsZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50LWUuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKTooZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudD1vLTI1LWUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzLGUuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCtlLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cyl9ZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCtlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgtZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0Tm9kZUJ1ZmZlcixlLmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQ9ZS5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrZS5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cytlLmNpcmN1bGFyUGF0aERhdGEubGVmdE5vZGVCdWZmZXIsZS5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudD1lLmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WC1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cy1lLmNpcmN1bGFyUGF0aERhdGEucmlnaHROb2RlQnVmZmVyfWlmKGUuY2lyY3VsYXIpZS5wYXRoPWZ1bmN0aW9uKHQpe3ZhciBlPSIiO2U9InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT8iTSIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdEZ1bGxFeHRlbnQrIiAiKyh0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWS10LmNpcmN1bGFyUGF0aERhdGEubGVmdFNtYWxsQXJjUmFkaXVzKSsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRMYXJnZUFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCsiIEwiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgMCAwIDAgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxSaWdodElubmVyRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZLXQuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRTbWFsbEFyY1JhZGl1cysiIDAgMCAwICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFgrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS50YXJnZXRZOiJNIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnNvdXJjZVkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEuc291cmNlWSsiIEEiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0RnVsbEV4dGVudCsiICIrKHQuY2lyY3VsYXJQYXRoRGF0YS5zb3VyY2VZK3QuY2lyY3VsYXJQYXRoRGF0YS5sZWZ0U21hbGxBcmNSYWRpdXMpKyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLmxlZnRGdWxsRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdExhcmdlQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50KyIgIit0LmNpcmN1bGFyUGF0aERhdGEudmVydGljYWxGdWxsRXh0ZW50KyIgTCIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0SW5uZXJFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbEZ1bGxFeHRlbnQrIiBBIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRMYXJnZUFyY1JhZGl1cysiICIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAwIDAgMSAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodEZ1bGxFeHRlbnQrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS52ZXJ0aWNhbFJpZ2h0SW5uZXJFeHRlbnQrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRGdWxsRXh0ZW50KyIgIisodC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyIgQSIrdC5jaXJjdWxhclBhdGhEYXRhLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrIiAiK3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodFNtYWxsQXJjUmFkaXVzKyIgMCAwIDEgIit0LmNpcmN1bGFyUGF0aERhdGEucmlnaHRJbm5lckV4dGVudCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFkrIiBMIit0LmNpcmN1bGFyUGF0aERhdGEudGFyZ2V0WCsiICIrdC5jaXJjdWxhclBhdGhEYXRhLnRhcmdldFk7cmV0dXJuIGV9KGUpO2Vsc2V7dmFyIGY9bi5saW5rSG9yaXpvbnRhbCgpLnNvdXJjZSgoZnVuY3Rpb24odCl7cmV0dXJuW3Quc291cmNlLngwKyh0LnNvdXJjZS54MS10LnNvdXJjZS54MCksdC55MF19KSkudGFyZ2V0KChmdW5jdGlvbih0KXtyZXR1cm5bdC50YXJnZXQueDAsdC55MV19KSk7ZS5wYXRoPWYoZSl9fSkpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gTyh0KT09TyhlKT8iYm90dG9tIj09dC5jaXJjdWxhckxpbmtUeXBlP0ModCxlKTpMKHQsZSk6TyhlKS1PKHQpfWZ1bmN0aW9uIEwodCxlKXtyZXR1cm4gdC55MC1lLnkwfWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZS55MC10LnkwfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gdC55MS1lLnkxfWZ1bmN0aW9uIEkodCxlKXtyZXR1cm4gZS55MS10LnkxfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQudGFyZ2V0LmNvbHVtbi10LnNvdXJjZS5jb2x1bW59ZnVuY3Rpb24geih0KXtyZXR1cm4gdC50YXJnZXQueDAtdC5zb3VyY2UueDF9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPVQodCksbj16KGUpL01hdGgudGFuKHIpO3JldHVybiJ1cCI9PUgodCk/dC55MStuOnQueTEtbn1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9VCh0KSxuPXooZSkvTWF0aC50YW4ocik7cmV0dXJuInVwIj09SCh0KT90LnkxLW46dC55MStufWZ1bmN0aW9uIEYodCxlLHIsbil7dC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbihpKXtpZighaS5jaXJjdWxhciYmaS50YXJnZXQuY29sdW1uLWkuc291cmNlLmNvbHVtbj4xKXt2YXIgYT1pLnNvdXJjZS5jb2x1bW4rMSxvPWkudGFyZ2V0LmNvbHVtbi0xLHM9MSxsPW8tYSsxO2ZvcihzPTE7YTw9bzthKysscysrKXQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24obyl7aWYoby5jb2x1bW49PWEpe3ZhciBjLHU9cy8obCsxKSxmPU1hdGgucG93KDEtdSwzKSxoPTMqdSpNYXRoLnBvdygxLXUsMikscD0zKk1hdGgucG93KHUsMikqKDEtdSksZD1NYXRoLnBvdyh1LDMpLG09ZippLnkwK2gqaS55MCtwKmkueTErZCppLnkxLGc9bS1pLndpZHRoLzIsdj1tK2kud2lkdGgvMjtnPm8ueTAmJmc8by55MT8oYz1vLnkxLWcrMTAsYz0iYm90dG9tIj09by5jaXJjdWxhckxpbmtUeXBlP2M6LWMsbz1OKG8sYyxlLHIpLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yih0LG4pIT1iKG8sbikmJnQuY29sdW1uPT1vLmNvbHVtbiYmQihvLHQpJiZOKHQsYyxlLHIpfSkpKToodj5vLnkwJiZ2PG8ueTF8fGc8by55MCYmdj5vLnkxKSYmKGM9di1vLnkwKzEwLG89TihvLGMsZSxyKSx0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe2IodCxuKSE9YihvLG4pJiZ0LmNvbHVtbj09by5jb2x1bW4mJnQueTA8by55MSYmdC55MT5vLnkxJiZOKHQsYyxlLHIpfSkpKX19KSl9fSkpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdC55MD5lLnkwJiZ0LnkwPGUueTF8fCh0LnkxPmUueTAmJnQueTE8ZS55MXx8dC55MDxlLnkwJiZ0LnkxPmUueTEpfWZ1bmN0aW9uIE4odCxlLHIsbil7cmV0dXJuIHQueTArZT49ciYmdC55MStlPD1uJiYodC55MD10LnkwK2UsdC55MT10LnkxK2UsdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPXQueTErZX0pKSx0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9dC55MCtlfSkpKSx0fWZ1bmN0aW9uIGoodCxlLHIsbil7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihpKXtuJiZpLnkrKGkueTEtaS55MCk+ZSYmKGkueT1pLnktKGkueSsoaS55MS1pLnkwKS1lKSk7dmFyIGE9dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQuc291cmNlLHIpPT1iKGkscil9KSksbz1hLmxlbmd0aDtvPjEmJmEuc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQudGFyZ2V0LmNvbHVtbj09ZS50YXJnZXQuY29sdW1uKXJldHVybiB0LnkxLWUueTE7aWYoIVYodCxlKSlyZXR1cm4gdC55MS1lLnkxO2lmKHQudGFyZ2V0LmNvbHVtbj5lLnRhcmdldC5jb2x1bW4pe3ZhciByPVIoZSx0KTtyZXR1cm4gdC55MS1yfWlmKGUudGFyZ2V0LmNvbHVtbj50LnRhcmdldC5jb2x1bW4pcmV0dXJuIFIodCxlKS1lLnkxfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3QudGFyZ2V0LmNvbHVtbj09PWUudGFyZ2V0LmNvbHVtbj90LnRhcmdldC55MS1lLnRhcmdldC55MTplLnRhcmdldC5jb2x1bW4tdC50YXJnZXQuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnRhcmdldC5jb2x1bW49PT1lLnRhcmdldC5jb2x1bW4/ZS50YXJnZXQueTEtdC50YXJnZXQueTE6dC50YXJnZXQuY29sdW1uLWUudGFyZ2V0LmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBzPWkueTA7YS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkwPXMrdC53aWR0aC8yLHMrPXQud2lkdGh9KSksYS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgcj1lKzEsbj0wO3I8bztyKyspbis9YVtyXS53aWR0aDt0LnkwPWkueTEtbi10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFUodCxlLHIpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG49dC5saW5rcy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBiKHQudGFyZ2V0LHIpPT1iKGUscil9KSksaT1uLmxlbmd0aDtpPjEmJm4uc29ydCgoZnVuY3Rpb24odCxlKXtpZighdC5jaXJjdWxhciYmIWUuY2lyY3VsYXIpe2lmKHQuc291cmNlLmNvbHVtbj09ZS5zb3VyY2UuY29sdW1uKXJldHVybiB0LnkwLWUueTA7aWYoIVYodCxlKSlyZXR1cm4gdC55MC1lLnkwO2lmKGUuc291cmNlLmNvbHVtbjx0LnNvdXJjZS5jb2x1bW4pe3ZhciByPUQoZSx0KTtyZXR1cm4gdC55MC1yfWlmKHQuc291cmNlLmNvbHVtbjxlLnNvdXJjZS5jb2x1bW4pcmV0dXJuIEQodCxlKS1lLnkwfXJldHVybiB0LmNpcmN1bGFyJiYhZS5jaXJjdWxhcj8idG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6ZS5jaXJjdWxhciYmIXQuY2lyY3VsYXI/InRvcCI9PWUuY2lyY3VsYXJMaW5rVHlwZT8xOi0xOnQuY2lyY3VsYXImJmUuY2lyY3VsYXI/dC5jaXJjdWxhckxpbmtUeXBlPT09ZS5jaXJjdWxhckxpbmtUeXBlJiYidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3Quc291cmNlLmNvbHVtbj09PWUuc291cmNlLmNvbHVtbj90LnNvdXJjZS55MS1lLnNvdXJjZS55MTp0LnNvdXJjZS5jb2x1bW4tZS5zb3VyY2UuY29sdW1uOnQuY2lyY3VsYXJMaW5rVHlwZT09PWUuY2lyY3VsYXJMaW5rVHlwZSYmImJvdHRvbSI9PXQuY2lyY3VsYXJMaW5rVHlwZT90LnNvdXJjZS5jb2x1bW49PT1lLnNvdXJjZS5jb2x1bW4/dC5zb3VyY2UueTEtZS5zb3VyY2UueTE6ZS5zb3VyY2UuY29sdW1uLXQuc291cmNlLmNvbHVtbjoidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPy0xOjE6dm9pZCAwfSkpO3ZhciBhPWUueTA7bi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnkxPWErdC53aWR0aC8yLGErPXQud2lkdGh9KSksbi5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2lmKCJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUpe2Zvcih2YXIgYT1yKzEsbz0wO2E8aTthKyspbys9blthXS53aWR0aDt0LnkxPWUueTEtby10LndpZHRoLzJ9fSkpfSkpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gSCh0KT09SChlKX1mdW5jdGlvbiBIKHQpe3JldHVybiB0LnkwLXQueTE+MD8idXAiOiJkb3duIn1mdW5jdGlvbiBxKHQsZSl7cmV0dXJuIGIodC5zb3VyY2UsZSk9PWIodC50YXJnZXQsZSl9ZnVuY3Rpb24gRyh0LHIsbil7dmFyIGk9dC5ub2RlcyxhPXQubGlua3Msbz0hMSxzPSExO2lmKGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7InRvcCI9PXQuY2lyY3VsYXJMaW5rVHlwZT9vPSEwOiJib3R0b20iPT10LmNpcmN1bGFyTGlua1R5cGUmJihzPSEwKX0pKSwwPT1vfHwwPT1zKXt2YXIgbD1lLm1pbihpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MH0pKSxjPShuLXIpLyhlLm1heChpLChmdW5jdGlvbih0KXtyZXR1cm4gdC55MX0pKS1sKTtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnkxLXQueTApKmM7dC55MD0odC55MC1sKSpjLHQueTE9dC55MCtlfSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC55MD0odC55MC1sKSpjLHQueTE9KHQueTEtbCkqYyx0LndpZHRoPXQud2lkdGgqY30pKX19dC5zYW5rZXlDaXJjdWxhcj1mdW5jdGlvbigpe3ZhciB0LG4saT0wLGE9MCxiPTEsVD0xLEE9MjQsTT1nLEU9byxMPXYsQz15LFA9MzIsST0yLE89bnVsbDtmdW5jdGlvbiB6KCl7dmFyIHQ9e25vZGVzOkwuYXBwbHkobnVsbCxhcmd1bWVudHMpLGxpbmtzOkMuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtEKHQpLF8odCxNLE8pLFIodCksQih0KSx3KHQsTSksTih0LFAsTSksVih0KTtmb3IodmFyIGU9NCxyPTA7cjxlO3IrKylqKHQsVCxNKSxVKHQsVCxNKSxGKHQsYSxULE0pLGoodCxULE0pLFUodCxULE0pO3JldHVybiBHKHQsYSxUKSxTKHQsSSxULE0pLHR9ZnVuY3Rpb24gRCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5pbmRleD1lLHQuc291cmNlTGlua3M9W10sdC50YXJnZXRMaW5rcz1bXX0pKTt2YXIgZT1yLm1hcCh0Lm5vZGVzLE0pO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPT0odm9pZCAwPT09bj8idW5kZWZpbmVkIjpsKG4pKSYmKG49dC5zb3VyY2U9eChlLG4pKSwib2JqZWN0IiE9PSh2b2lkIDA9PT1pPyJ1bmRlZmluZWQiOmwoaSkpJiYoaT10LnRhcmdldD14KGUsaSkpLG4uc291cmNlTGlua3MucHVzaCh0KSxpLnRhcmdldExpbmtzLnB1c2godCl9KSksdH1mdW5jdGlvbiBSKHQpe3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5wYXJ0T2ZDeWNsZT0hMSx0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsaCksZS5zdW0odC50YXJnZXRMaW5rcyxoKSksdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNpcmN1bGFyJiYodC5wYXJ0T2ZDeWNsZT0hMCx0LmNpcmN1bGFyTGlua1R5cGU9ZS5jaXJjdWxhckxpbmtUeXBlKX0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2lyY3VsYXImJih0LnBhcnRPZkN5Y2xlPSEwLHQuY2lyY3VsYXJMaW5rVHlwZT1lLmNpcmN1bGFyTGlua1R5cGUpfSkpfSkpfWZ1bmN0aW9uIEIodCl7dmFyIGUscixuO2ZvcihlPXQubm9kZXMscj1bXSxuPTA7ZS5sZW5ndGg7KytuLGU9cixyPVtdKWUuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXB0aD1uLHQuc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7ci5pbmRleE9mKHQudGFyZ2V0KTwwJiYhdC5jaXJjdWxhciYmci5wdXNoKHQudGFyZ2V0KX0pKX0pKTtmb3IoZT10Lm5vZGVzLHI9W10sbj0wO2UubGVuZ3RoOysrbixlPXIscj1bXSllLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuaGVpZ2h0PW4sdC50YXJnZXRMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtyLmluZGV4T2YodC5zb3VyY2UpPDAmJiF0LmNpcmN1bGFyJiZyLnB1c2godC5zb3VyY2UpfSkpfSkpO3Qubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2x1bW49TWF0aC5mbG9vcihFLmNhbGwobnVsbCx0LG4pKX0pKX1mdW5jdGlvbiBOKG8scyxsKXt2YXIgYz1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbn0pKS5zb3J0S2V5cyhlLmFzY2VuZGluZykuZW50cmllcyhvLm5vZGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZhbHVlc30pKTshZnVuY3Rpb24ocil7aWYobil7dmFyIHM9MS8wO2MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9VCpuLyh0Lmxlbmd0aCsxKTtzPWU8cz9lOnN9KSksdD1zfXZhciBsPWUubWluKGMsKGZ1bmN0aW9uKHIpe3JldHVybihULWEtKHIubGVuZ3RoLTEpKnQpL2Uuc3VtKHIsaCl9KSk7bCo9LjMsby5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqbH0pKTt2YXIgdT1mdW5jdGlvbih0KXt2YXIgcj0wLG49MCxpPTAsYT0wLG89ZS5tYXgodC5ub2RlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSkpO3JldHVybiB0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXImJigidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlP3IrPXQud2lkdGg6bis9dC53aWR0aCwwPT10LnRhcmdldC5jb2x1bW4mJihhKz10LndpZHRoKSx0LnNvdXJjZS5jb2x1bW49PW8mJihpKz10LndpZHRoKSl9KSkse3RvcDpyPXI+MD9yKzI1KzEwOnIsYm90dG9tOm49bj4wP24rMjUrMTA6bixsZWZ0OmE9YT4wP2ErMjUrMTA6YSxyaWdodDppPWk+MD9pKzI1KzEwOml9fShvKSxmPWZ1bmN0aW9uKHQscil7dmFyIG49ZS5tYXgodC5ub2RlcywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1ufSkpLG89Yi1pLHM9VC1hLGw9by8obytyLnJpZ2h0K3IubGVmdCksYz1zLyhzK3IudG9wK3IuYm90dG9tKTtyZXR1cm4gaT1pKmwrci5sZWZ0LGI9MD09ci5yaWdodD9iOmIqbCxhPWEqYytyLnRvcCxUKj1jLHQubm9kZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC54MD1pK3QuY29sdW1uKigoYi1pLUEpL24pLHQueDE9dC54MCtBfSkpLGN9KG8sdSk7bCo9ZixvLmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Qud2lkdGg9dC52YWx1ZSpsfSkpLGMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dC5mb3JFYWNoKChmdW5jdGlvbih0LG4pe3QuZGVwdGg9PWMubGVuZ3RoLTEmJjE9PWV8fDA9PXQuZGVwdGgmJjE9PWU/KHQueTA9VC8yLXQudmFsdWUqbCx0LnkxPXQueTArdC52YWx1ZSpsKTp0LnBhcnRPZkN5Y2xlPzA9PWsodCxyKT8odC55MD1ULzIrbix0LnkxPXQueTArdC52YWx1ZSpsKToidG9wIj09dC5jaXJjdWxhckxpbmtUeXBlPyh0LnkwPWErbix0LnkxPXQueTArdC52YWx1ZSpsKToodC55MD1ULXQudmFsdWUqbC1uLHQueTE9dC55MCt0LnZhbHVlKmwpOjA9PXUudG9wfHwwPT11LmJvdHRvbT8odC55MD0oVC1hKS9lKm4sdC55MT10LnkwK3QudmFsdWUqbCk6KHQueTA9KFQtYSkvMi1lLzIrbix0LnkxPXQueTArdC52YWx1ZSpsKX0pKX0pKX0obCkseSgpO2Zvcih2YXIgdT0xLGc9cztnPjA7LS1nKXYodSo9Ljk5LGwpLHkoKTtmdW5jdGlvbiB2KHQscil7dmFyIG49Yy5sZW5ndGg7Yy5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgYT1pLmxlbmd0aCxvPWlbMF0uZGVwdGg7aS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgcztpZihpLnNvdXJjZUxpbmtzLmxlbmd0aHx8aS50YXJnZXRMaW5rcy5sZW5ndGgpaWYoaS5wYXJ0T2ZDeWNsZSYmayhpLHIpPjApO2Vsc2UgaWYoMD09byYmMT09YSlzPWkueTEtaS55MCxpLnkwPVQvMi1zLzIsaS55MT1ULzIrcy8yO2Vsc2UgaWYobz09bi0xJiYxPT1hKXM9aS55MS1pLnkwLGkueTA9VC8yLXMvMixpLnkxPVQvMitzLzI7ZWxzZXt2YXIgbD1lLm1lYW4oaS5zb3VyY2VMaW5rcyxtKSxjPWUubWVhbihpLnRhcmdldExpbmtzLGQpLHU9KChsJiZjPyhsK2MpLzI6bHx8YyktcChpKSkqdDtpLnkwKz11LGkueTErPXV9fSkpfSkpfWZ1bmN0aW9uIHkoKXtjLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLG4saSxvPWEscz1lLmxlbmd0aDtmb3IoZS5zb3J0KGYpLGk9MDtpPHM7KytpKShuPW8tKHI9ZVtpXSkueTApPjAmJihyLnkwKz1uLHIueTErPW4pLG89ci55MSt0O2lmKChuPW8tdC1UKT4wKWZvcihvPXIueTAtPW4sci55MS09bixpPXMtMjtpPj0wOy0taSkobj0ocj1lW2ldKS55MSt0LW8pPjAmJihyLnkwLT1uLHIueTEtPW4pLG89ci55MH0pKX19ZnVuY3Rpb24gVih0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydCh1KSx0LnRhcmdldExpbmtzLnNvcnQoYyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZSxuPXQueTEsaT1uO3Quc291cmNlTGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jaXJjdWxhcj8odC55MD1uLXQud2lkdGgvMixuLT10LndpZHRoKToodC55MD1lK3Qud2lkdGgvMixlKz10LndpZHRoKX0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2lyY3VsYXI/KHQueTE9aS10LndpZHRoLzIsaS09dC53aWR0aCk6KHQueTE9cit0LndpZHRoLzIscis9dC53aWR0aCl9KSl9KSl9cmV0dXJuIHoubm9kZUlkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpNfSx6Lm5vZGVBbGlnbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnModCkseik6RX0sei5ub2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEE9K3Qseik6QX0sei5ub2RlUGFkZGluZz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rZSx6KTp0fSx6Lm5vZGVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhMPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpMfSx6LmxpbmtzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhDPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cyh0KSx6KTpDfSx6LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9YT0wLGI9K3RbMF0sVD0rdFsxXSx6KTpbYi1pLFQtYV19LHouZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLGI9K3RbMV1bMF0sYT0rdFswXVsxXSxUPSt0WzFdWzFdLHopOltbaSxhXSxbYixUXV19LHouaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUD0rdCx6KTpQfSx6LmNpcmN1bGFyTGlua0dhcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oST0rdCx6KTpJfSx6Lm5vZGVQYWRkaW5nUmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49K3Qseik6bn0sei5zb3J0Tm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE89dCx6KTpPfSx6LnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdyh0LE0pLFYodCksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNpcmN1bGFyJiYodC5jaXJjdWxhckxpbmtUeXBlPXQueTArdC55MTxUPyJ0b3AiOiJib3R0b20iLHQuc291cmNlLmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlLHQudGFyZ2V0LmNpcmN1bGFyTGlua1R5cGU9dC5jaXJjdWxhckxpbmtUeXBlKX0pKSxqKHQsVCxNLCExKSxVKHQsVCxNKSxTKHQsSSxULE0pLHR9LHp9LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsYSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NSwiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1zaGFwZSI6MTY3LCJlbGVtZW50YXJ5LWNpcmN1aXRzLWRpcmVjdGVkLWdyYXBoIjoxODB9XSw1NzpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtYXJyYXkiKSx0KCJkMy1jb2xsZWN0aW9uIiksdCgiZDMtc2hhcGUiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlLHIsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQudGFyZ2V0LmRlcHRofWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdC5zb3VyY2VMaW5rcy5sZW5ndGg/dC5kZXB0aDplLTF9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gcyh0LGUpe3JldHVybiBjKHQuc291cmNlLGUuc291cmNlKXx8dC5pbmRleC1lLmluZGV4fWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gYyh0LnRhcmdldCxlLnRhcmdldCl8fHQuaW5kZXgtZS5pbmRleH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQueTAtZS55MH1mdW5jdGlvbiB1KHQpe3JldHVybiB0LnZhbHVlfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQueTArdC55MSkvMn1mdW5jdGlvbiBoKHQpe3JldHVybiBmKHQuc291cmNlKSp0LnZhbHVlfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGYodC50YXJnZXQpKnQudmFsdWV9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdC5pbmRleH1mdW5jdGlvbiBtKHQpe3JldHVybiB0Lm5vZGVzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQubGlua3N9ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiB5KHQpe3JldHVyblt0LnNvdXJjZS54MSx0LnkwXX1mdW5jdGlvbiB4KHQpe3JldHVyblt0LnRhcmdldC54MCx0LnkxXX10LnNhbmtleT1mdW5jdGlvbigpe3ZhciB0PTAsbj0wLGk9MSx5PTEseD0yNCxiPTgsXz1kLHc9YSxUPW0saz1nLEE9MzI7ZnVuY3Rpb24gTSgpe3ZhciB0PXtub2RlczpULmFwcGx5KG51bGwsYXJndW1lbnRzKSxsaW5rczprLmFwcGx5KG51bGwsYXJndW1lbnRzKX07cmV0dXJuIFModCksRSh0KSxMKHQpLEModCksUCh0KSx0fWZ1bmN0aW9uIFModCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3QuaW5kZXg9ZSx0LnNvdXJjZUxpbmtzPVtdLHQudGFyZ2V0TGlua3M9W119KSk7dmFyIGU9ci5tYXAodC5ub2RlcyxfKTt0LmxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dC5pbmRleD1yO3ZhciBuPXQuc291cmNlLGk9dC50YXJnZXQ7Im9iamVjdCIhPXR5cGVvZiBuJiYobj10LnNvdXJjZT12KGUsbikpLCJvYmplY3QiIT10eXBlb2YgaSYmKGk9dC50YXJnZXQ9dihlLGkpKSxuLnNvdXJjZUxpbmtzLnB1c2godCksaS50YXJnZXRMaW5rcy5wdXNoKHQpfSkpfWZ1bmN0aW9uIEUodCl7dC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnZhbHVlPU1hdGgubWF4KGUuc3VtKHQuc291cmNlTGlua3MsdSksZS5zdW0odC50YXJnZXRMaW5rcyx1KSl9KSl9ZnVuY3Rpb24gTChlKXt2YXIgcixuLGE7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlcHRoPWEsdC5zb3VyY2VMaW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXtuLmluZGV4T2YodC50YXJnZXQpPDAmJm4ucHVzaCh0LnRhcmdldCl9KSl9KSk7Zm9yKHI9ZS5ub2RlcyxuPVtdLGE9MDtyLmxlbmd0aDsrK2Escj1uLG49W10pci5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmhlaWdodD1hLHQudGFyZ2V0TGlua3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7bi5pbmRleE9mKHQuc291cmNlKTwwJiZuLnB1c2godC5zb3VyY2UpfSkpfSkpO3ZhciBvPShpLXQteCkvKGEtMSk7ZS5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLngxPShlLngwPXQrTWF0aC5tYXgoMCxNYXRoLm1pbihhLTEsTWF0aC5mbG9vcih3LmNhbGwobnVsbCxlLGEpKSkpKm8pK3h9KSl9ZnVuY3Rpb24gQyh0KXt2YXIgaT1yLm5lc3QoKS5rZXkoKGZ1bmN0aW9uKHQpe3JldHVybiB0LngwfSkpLnNvcnRLZXlzKGUuYXNjZW5kaW5nKS5lbnRyaWVzKHQubm9kZXMpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudmFsdWVzfSkpOyFmdW5jdGlvbigpe3ZhciByPWUubWF4KGksKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0pKSxhPTIvMyooeS1uKS8oci0xKTtiPmEmJihiPWEpO3ZhciBvPWUubWluKGksKGZ1bmN0aW9uKHQpe3JldHVybih5LW4tKHQubGVuZ3RoLTEpKmIpL2Uuc3VtKHQsdSl9KSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC55MT0odC55MD1lKSt0LnZhbHVlKm99KSl9KSksdC5saW5rcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LndpZHRoPXQudmFsdWUqb30pKX0oKSxkKCk7Zm9yKHZhciBhPTEsbz1BO28+MDstLW8pbChhKj0uOTkpLGQoKSxzKGEpLGQoKTtmdW5jdGlvbiBzKHQpe2kuZm9yRWFjaCgoZnVuY3Rpb24ocil7ci5mb3JFYWNoKChmdW5jdGlvbihyKXtpZihyLnRhcmdldExpbmtzLmxlbmd0aCl7dmFyIG49KGUuc3VtKHIudGFyZ2V0TGlua3MsaCkvZS5zdW0oci50YXJnZXRMaW5rcyx1KS1mKHIpKSp0O3IueTArPW4sci55MSs9bn19KSl9KSl9ZnVuY3Rpb24gbCh0KXtpLnNsaWNlKCkucmV2ZXJzZSgpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3IuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYoci5zb3VyY2VMaW5rcy5sZW5ndGgpe3ZhciBuPShlLnN1bShyLnNvdXJjZUxpbmtzLHApL2Uuc3VtKHIuc291cmNlTGlua3MsdSktZihyKSkqdDtyLnkwKz1uLHIueTErPW59fSkpfSkpfWZ1bmN0aW9uIGQoKXtpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhPW4sbz10Lmxlbmd0aDtmb3IodC5zb3J0KGMpLGk9MDtpPG87KytpKShyPWEtKGU9dFtpXSkueTApPjAmJihlLnkwKz1yLGUueTErPXIpLGE9ZS55MStiO2lmKChyPWEtYi15KT4wKWZvcihhPWUueTAtPXIsZS55MS09cixpPW8tMjtpPj0wOy0taSkocj0oZT10W2ldKS55MStiLWEpPjAmJihlLnkwLT1yLGUueTEtPXIpLGE9ZS55MH0pKX19ZnVuY3Rpb24gUCh0KXt0Lm5vZGVzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlTGlua3Muc29ydChsKSx0LnRhcmdldExpbmtzLnNvcnQocyl9KSksdC5ub2Rlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnkwLHI9ZTt0LnNvdXJjZUxpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTA9ZSt0LndpZHRoLzIsZSs9dC53aWR0aH0pKSx0LnRhcmdldExpbmtzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QueTE9cit0LndpZHRoLzIscis9dC53aWR0aH0pKX0pKX1yZXR1cm4gTS51cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIFAodCksdH0sTS5ub2RlSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KF89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOl99LE0ubm9kZUFsaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6byh0KSxNKTp3fSxNLm5vZGVXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeD0rdCxNKTp4fSxNLm5vZGVQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPSt0LE0pOmJ9LE0ubm9kZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFQ9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOlR9LE0ubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpvKHQpLE0pOmt9LE0uc2l6ZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uPTAsaT0rZVswXSx5PStlWzFdLE0pOltpLXQseS1uXX0sTS5leHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2VbMF1bMF0saT0rZVsxXVswXSxuPStlWzBdWzFdLHk9K2VbMV1bMV0sTSk6W1t0LG5dLFtpLHldXX0sTS5pdGVyYXRpb25zPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSt0LE0pOkF9LE19LHQuc2Fua2V5Q2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0LnRhcmdldExpbmtzLmxlbmd0aD90LmRlcHRoOnQuc291cmNlTGlua3MubGVuZ3RoP2UubWluKHQuc291cmNlTGlua3MsaSktMTowfSx0LnNhbmtleUxlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVwdGh9LHQuc2Fua2V5UmlnaHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS0xLXQuaGVpZ2h0fSx0LnNhbmtleUp1c3RpZnk9YSx0LnNhbmtleUxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIG4ubGlua0hvcml6b250YWwoKS5zb3VyY2UoeSkudGFyZ2V0KHgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtYXJyYXkiOjE1NSwiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1zaGFwZSI6MTY3fV0sNTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oKXt2YXIgdD17dmVyc2lvbjoiMy44LjAifSxyPVtdLnNsaWNlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KX0saT1zZWxmLmRvY3VtZW50O2Z1bmN0aW9uIGEodCl7cmV0dXJuIHQmJih0Lm93bmVyRG9jdW1lbnR8fHQuZG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudH1mdW5jdGlvbiBvKHQpe3JldHVybiB0JiYodC5vd25lckRvY3VtZW50JiZ0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHQuZG9jdW1lbnQmJnR8fHQuZGVmYXVsdFZpZXcpfWlmKGkpdHJ5e24oaS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcylbMF0ubm9kZVR5cGV9Y2F0Y2godCl7bj1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSk7ZS0tOylyW2VdPXRbZV07cmV0dXJuIHJ9fWlmKERhdGUubm93fHwoRGF0ZS5ub3c9ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9KSxpKXRyeXtpLmNyZWF0ZUVsZW1lbnQoIkRJViIpLnN0eWxlLnNldFByb3BlcnR5KCJvcGFjaXR5IiwwLCIiKX1jYXRjaCh0KXt2YXIgcz10aGlzLkVsZW1lbnQucHJvdG90eXBlLGw9cy5zZXRBdHRyaWJ1dGUsYz1zLnNldEF0dHJpYnV0ZU5TLHU9dGhpcy5DU1NTdHlsZURlY2xhcmF0aW9uLnByb3RvdHlwZSxmPXUuc2V0UHJvcGVydHk7cy5zZXRBdHRyaWJ1dGU9ZnVuY3Rpb24odCxlKXtsLmNhbGwodGhpcyx0LGUrIiIpfSxzLnNldEF0dHJpYnV0ZU5TPWZ1bmN0aW9uKHQsZSxyKXtjLmNhbGwodGhpcyx0LGUscisiIil9LHUuc2V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2YuY2FsbCh0aGlzLHQsZSsiIixyKX19ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiBwKHQpe3JldHVybiBudWxsPT09dD9OYU46K3R9ZnVuY3Rpb24gZCh0KXtyZXR1cm4haXNOYU4odCl9ZnVuY3Rpb24gbSh0KXtyZXR1cm57bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IoYXJndW1lbnRzLmxlbmd0aDwzJiYobj0wKSxhcmd1bWVudHMubGVuZ3RoPDQmJihpPWUubGVuZ3RoKTtuPGk7KXt2YXIgYT1uK2k+Pj4xO3QoZVthXSxyKTwwP249YSsxOmk9YX1yZXR1cm4gbn0scmlnaHQ6ZnVuY3Rpb24oZSxyLG4saSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKG49MCksYXJndW1lbnRzLmxlbmd0aDw0JiYoaT1lLmxlbmd0aCk7bjxpOyl7dmFyIGE9bitpPj4+MTt0KGVbYV0scik+MD9pPWE6bj1hKzF9cmV0dXJuIG59fX10LmFzY2VuZGluZz1oLHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5taW49ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8YTspaWYobnVsbCE9KG49dFtpXSkmJm4+PW4pe3I9bjticmVha31mb3IoOysraTxhOyludWxsIT0obj10W2ldKSYmcj5uJiYocj1uKX1lbHNle2Zvcig7KytpPGE7KWlmKG51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49ZS5jYWxsKHQsdFtpXSxpKSkmJnI+biYmKHI9bil9cmV0dXJuIHJ9LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KytpPGE7KWlmKG51bGwhPShuPXRbaV0pJiZuPj1uKXtyPW47YnJlYWt9Zm9yKDsrK2k8YTspbnVsbCE9KG49dFtpXSkmJm4+ciYmKHI9bil9ZWxzZXtmb3IoOysraTxhOylpZihudWxsIT0obj1lLmNhbGwodCx0W2ldLGkpKSYmbj49bil7cj1uO2JyZWFrfWZvcig7KytpPGE7KW51bGwhPShuPWUuY2FsbCh0LHRbaV0saSkpJiZuPnImJihyPW4pfXJldHVybiByfSx0LmV4dGVudD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPS0xLG89dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7KythPG87KWlmKG51bGwhPShuPXRbYV0pJiZuPj1uKXtyPWk9bjticmVha31mb3IoOysrYTxvOyludWxsIT0obj10W2FdKSYmKHI+biYmKHI9biksaTxuJiYoaT1uKSl9ZWxzZXtmb3IoOysrYTxvOylpZihudWxsIT0obj1lLmNhbGwodCx0W2FdLGEpKSYmbj49bil7cj1pPW47YnJlYWt9Zm9yKDsrK2E8bzspbnVsbCE9KG49ZS5jYWxsKHQsdFthXSxhKSkmJihyPm4mJihyPW4pLGk8biYmKGk9bikpfXJldHVybltyLGldfSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLGE9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2E8aTspZChyPSt0W2FdKSYmKG4rPXIpO2Vsc2UgZm9yKDsrK2E8aTspZChyPStlLmNhbGwodCx0W2FdLGEpKSYmKG4rPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPTAsaT10Lmxlbmd0aCxhPS0xLG89aTtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrYTxpOylkKHI9cCh0W2FdKSk/bis9cjotLW87ZWxzZSBmb3IoOysrYTxpOylkKHI9cChlLmNhbGwodCx0W2FdLGEpKSk/bis9cjotLW87aWYobylyZXR1cm4gbi9vfSx0LnF1YW50aWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQubGVuZ3RoLTEpKmUrMSxuPU1hdGguZmxvb3IociksaT0rdFtuLTFdLGE9ci1uO3JldHVybiBhP2krYSoodFtuXS1pKTppfSx0Lm1lZGlhbj1mdW5jdGlvbihlLHIpe3ZhciBuLGk9W10sYT1lLmxlbmd0aCxvPS0xO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytvPGE7KWQobj1wKGVbb10pKSYmaS5wdXNoKG4pO2Vsc2UgZm9yKDsrK288YTspZChuPXAoci5jYWxsKGUsZVtvXSxvKSkpJiZpLnB1c2gobik7aWYoaS5sZW5ndGgpcmV0dXJuIHQucXVhbnRpbGUoaS5zb3J0KGgpLC41KX0sdC52YXJpYW5jZT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPTAsbz0wLHM9LTEsbD0wO2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKWZvcig7KytzPGk7KWQocj1wKHRbc10pKSYmKG8rPShuPXItYSkqKHItKGErPW4vKytsKSkpO2Vsc2UgZm9yKDsrK3M8aTspZChyPXAoZS5jYWxsKHQsdFtzXSxzKSkpJiYobys9KG49ci1hKSooci0oYSs9bi8rK2wpKSk7aWYobD4xKXJldHVybiBvLyhsLTEpfSx0LmRldmlhdGlvbj1mdW5jdGlvbigpe3ZhciBlPXQudmFyaWFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBlP01hdGguc3FydChlKTplfTt2YXIgZz1tKGgpO2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQubGVuZ3RofXQuYmlzZWN0TGVmdD1nLmxlZnQsdC5iaXNlY3Q9dC5iaXNlY3RSaWdodD1nLnJpZ2h0LHQuYmlzZWN0b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG0oMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7cmV0dXJuIGgodChlKSxyKX06dCl9LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7KGE9YXJndW1lbnRzLmxlbmd0aCk8MyYmKHI9dC5sZW5ndGgsYTwyJiYoZT0wKSk7Zm9yKHZhciBuLGksYT1yLWU7YTspaT1NYXRoLnJhbmRvbSgpKmEtLXwwLG49dFthK2VdLHRbYStlXT10W2krZV0sdFtpK2VdPW47cmV0dXJuIHR9LHQucGVybXV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aCxuPW5ldyBBcnJheShyKTtyLS07KW5bcl09dFtlW3JdXTtyZXR1cm4gbn0sdC5wYWlycz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTEsbj10WzBdLGk9bmV3IEFycmF5KHI8MD8wOnIpO2U8cjspaVtlXT1bbixuPXRbKytlXV07cmV0dXJuIGl9LHQudHJhbnNwb3NlPWZ1bmN0aW9uKGUpe2lmKCEoYT1lLmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciByPS0xLG49dC5taW4oZSx2KSxpPW5ldyBBcnJheShuKTsrK3I8bjspZm9yKHZhciBhLG89LTEscz1pW3JdPW5ldyBBcnJheShhKTsrK288YTspc1tvXT1lW29dW3JdO3JldHVybiBpfSx0LnppcD1mdW5jdGlvbigpe3JldHVybiB0LnRyYW5zcG9zZShhcmd1bWVudHMpfSx0LmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSx0LnZhbHVlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2godFtyXSk7cmV0dXJuIGV9LHQuZW50cmllcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2goe2tleTpyLHZhbHVlOnRbcl19KTtyZXR1cm4gZX0sdC5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT0tMSxvPTA7KythPGk7KW8rPXRbYV0ubGVuZ3RoO2ZvcihyPW5ldyBBcnJheShvKTstLWk+PTA7KWZvcihlPShuPXRbaV0pLmxlbmd0aDstLWU+PTA7KXJbLS1vXT1uW2VdO3JldHVybiByfTt2YXIgeT1NYXRoLmFicztmdW5jdGlvbiB4KHQpe2Zvcih2YXIgZT0xO3QqZSUxOyllKj0xMDtyZXR1cm4gZX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciByIGluIGUpT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLHIse3ZhbHVlOmVbcl0sZW51bWVyYWJsZTohMX0pfWZ1bmN0aW9uIF8oKXt0aGlzLl89T2JqZWN0LmNyZWF0ZShudWxsKX10LnJhbmdlPWZ1bmN0aW9uKHQsZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTEsYXJndW1lbnRzLmxlbmd0aDwyJiYoZT10LHQ9MCkpLChlLXQpL3I9PTEvMCl0aHJvdyBuZXcgRXJyb3IoImluZmluaXRlIHJhbmdlIik7dmFyIG4saT1bXSxhPXgoeShyKSksbz0tMTtpZih0Kj1hLGUqPWEsKHIqPWEpPDApZm9yKDsobj10K3IqKytvKT5lOylpLnB1c2gobi9hKTtlbHNlIGZvcig7KG49dCtyKisrbyk8ZTspaS5wdXNoKG4vYSk7cmV0dXJuIGl9LHQubWFwPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IF87aWYodCBpbnN0YW5jZW9mIF8pdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3Iuc2V0KHQsZSl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgbixpPS0xLGE9dC5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8YTspci5zZXQoaSx0W2ldKTtlbHNlIGZvcig7KytpPGE7KXIuc2V0KGUuY2FsbCh0LG49dFtpXSxpKSxuKX1lbHNlIGZvcih2YXIgbyBpbiB0KXIuc2V0KG8sdFtvXSk7cmV0dXJuIHJ9O2Z1bmN0aW9uIHcodCl7cmV0dXJuIl9fcHJvdG9fXyI9PSh0Kz0iIil8fCJcMCI9PT10WzBdPyJcMCIrdDp0fWZ1bmN0aW9uIFQodCl7cmV0dXJuIlwwIj09PSh0Kz0iIilbMF0/dC5zbGljZSgxKTp0fWZ1bmN0aW9uIGsodCl7cmV0dXJuIHcodClpbiB0aGlzLl99ZnVuY3Rpb24gQSh0KXtyZXR1cm4odD13KHQpKWluIHRoaXMuXyYmZGVsZXRlIHRoaXMuX1t0XX1mdW5jdGlvbiBNKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuXyl0LnB1c2goVChlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gUygpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMuXykrK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gRSgpe2Zvcih2YXIgdCBpbiB0aGlzLl8pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gTCgpe3RoaXMuXz1PYmplY3QuY3JlYXRlKG51bGwpfWZ1bmN0aW9uIEModCl7cmV0dXJuIHR9ZnVuY3Rpb24gUCh0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q6bn19ZnVuY3Rpb24gSSh0LGUpe2lmKGUgaW4gdClyZXR1cm4gZTtlPWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtmb3IodmFyIHI9MCxuPU8ubGVuZ3RoO3I8bjsrK3Ipe3ZhciBpPU9bcl0rZTtpZihpIGluIHQpcmV0dXJuIGl9fWIoXyx7aGFzOmssZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9bdyh0KV19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9bdyh0KV09ZX0scmVtb3ZlOkEsa2V5czpNLHZhbHVlczpmdW5jdGlvbigpe3ZhciB0PVtdO2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5wdXNoKHRoaXMuX1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcy5fKXQucHVzaCh7a2V5OlQoZSksdmFsdWU6dGhpcy5fW2VdfSk7cmV0dXJuIHR9LHNpemU6UyxlbXB0eTpFLGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuXyl0LmNhbGwodGhpcyxUKGUpLHRoaXMuX1tlXSl9fSksdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIGUscixuPXt9LGk9W10sYT1bXTtmdW5jdGlvbiBvKHQsYSxzKXtpZihzPj1pLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwobixhKTplP2Euc29ydChlKTphO2Zvcih2YXIgbCxjLHUsZixoPS0xLHA9YS5sZW5ndGgsZD1pW3MrK10sbT1uZXcgXzsrK2g8cDspKGY9bS5nZXQobD1kKGM9YVtoXSkpKT9mLnB1c2goYyk6bS5zZXQobCxbY10pO3JldHVybiB0PyhjPXQoKSx1PWZ1bmN0aW9uKGUscil7Yy5zZXQoZSxvKHQscixzKSl9KTooYz17fSx1PWZ1bmN0aW9uKGUscil7Y1tlXT1vKHQscixzKX0pLG0uZm9yRWFjaCh1KSxjfXJldHVybiBuLm1hcD1mdW5jdGlvbih0LGUpe3JldHVybiBvKGUsdCwwKX0sbi5lbnRyaWVzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbiB0KGUscil7aWYocj49aS5sZW5ndGgpcmV0dXJuIGU7dmFyIG49W10sbz1hW3IrK107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxpKXtuLnB1c2goe2tleTplLHZhbHVlczp0KGkscil9KX0pKSxvP24uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbyh0LmtleSxlLmtleSl9KSk6bn0obyh0Lm1hcCxlLDApLDApfSxuLmtleT1mdW5jdGlvbih0KXtyZXR1cm4gaS5wdXNoKHQpLG59LG4uc29ydEtleXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFbaS5sZW5ndGgtMV09dCxufSxuLnNvcnRWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGU9dCxufSxuLnJvbGx1cD1mdW5jdGlvbih0KXtyZXR1cm4gcj10LG59LG59LHQuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBMO2lmKHQpZm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47KytyKWUuYWRkKHRbcl0pO3JldHVybiBlfSxiKEwse2hhczprLGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fW3codCs9IiIpXT0hMCx0fSxyZW1vdmU6QSx2YWx1ZXM6TSxzaXplOlMsZW1wdHk6RSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLl8pdC5jYWxsKHRoaXMsVChlKSl9fSksdC5iZWhhdmlvcj17fSx0LnJlYmluZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuPTEsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOyl0W3I9YXJndW1lbnRzW25dXT1QKHQsZSxlW3JdKTtyZXR1cm4gdH07dmFyIE89WyJ3ZWJraXQiLCJtcyIsIm1veiIsIk1veiIsIm8iLCJPIl07ZnVuY3Rpb24geigpe31mdW5jdGlvbiBEKCl7fWZ1bmN0aW9uIFIodCl7dmFyIGU9W10scj1uZXcgXztmdW5jdGlvbiBuKCl7Zm9yKHZhciByLG49ZSxpPS0xLGE9bi5sZW5ndGg7KytpPGE7KShyPW5baV0ub24pJiZyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdH1yZXR1cm4gbi5vbj1mdW5jdGlvbihuLGkpe3ZhciBhLG89ci5nZXQobik7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9vJiZvLm9uOihvJiYoby5vbj1udWxsLGU9ZS5zbGljZSgwLGE9ZS5pbmRleE9mKG8pKS5jb25jYXQoZS5zbGljZShhKzEpKSxyLnJlbW92ZShuKSksaSYmZS5wdXNoKHIuc2V0KG4se29uOml9KSksdCl9LG59ZnVuY3Rpb24gRigpe3QuZXZlbnQucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBCKCl7Zm9yKHZhciBlLHI9dC5ldmVudDtlPXIuc291cmNlRXZlbnQ7KXI9ZTtyZXR1cm4gcn1mdW5jdGlvbiBOKGUpe2Zvcih2YXIgcj1uZXcgRCxuPTAsaT1hcmd1bWVudHMubGVuZ3RoOysrbjxpOylyW2FyZ3VtZW50c1tuXV09UihyKTtyZXR1cm4gci5vZj1mdW5jdGlvbihuLGkpe3JldHVybiBmdW5jdGlvbihhKXt0cnl7dmFyIG89YS5zb3VyY2VFdmVudD10LmV2ZW50O2EudGFyZ2V0PWUsdC5ldmVudD1hLHJbYS50eXBlXS5hcHBseShuLGkpfWZpbmFsbHl7dC5ldmVudD1vfX19LHJ9dC5kaXNwYXRjaD1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgRCxlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDsrK2U8cjspdFthcmd1bWVudHNbZV1dPVIodCk7cmV0dXJuIHR9LEQucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbmRleE9mKCIuIiksbj0iIjtpZihyPj0wJiYobj10LnNsaWNlKHIrMSksdD10LnNsaWNlKDAscikpLHQpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzW3RdLm9uKG4pOnRoaXNbdF0ub24obixlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl7aWYobnVsbD09ZSlmb3IodCBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkodCkmJnRoaXNbdF0ub24obixudWxsKTtyZXR1cm4gdGhpc319LHQuZXZlbnQ9bnVsbCx0LnJlcXVvdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZShqLCJcXCQmIil9O3ZhciBqPS9bXFxcXlwkXCpcK1w/XHxcW1xdXChcKVwuXHtcfV0vZyxVPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbih0LGUpe3QuX19wcm90b19fPWV9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIGUpdFtyXT1lW3JdfTtmdW5jdGlvbiBWKHQpe3JldHVybiBVKHQsWSksdH12YXIgSD1mdW5jdGlvbih0LGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3IodCl9LHE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKHQpfSxHPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5tYXRjaGVzfHx0W0kodCwibWF0Y2hlc1NlbGVjdG9yIildO3JldHVybihHPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfSkodCxlKX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKEg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gU2l6emxlKHQsZSlbMF18fG51bGx9LHE9U2l6emxlLEc9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksdC5zZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gdC5zZWxlY3QoaS5kb2N1bWVudEVsZW1lbnQpfTt2YXIgWT10LnNlbGVjdGlvbi5wcm90b3R5cGU9W107ZnVuY3Rpb24gVyh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIEgodCx0aGlzKX19ZnVuY3Rpb24gWCh0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdD90OmZ1bmN0aW9uKCl7cmV0dXJuIHEodCx0aGlzKX19WS5zZWxlY3Q9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT1bXTt0PVcodCk7Zm9yKHZhciBvPS0xLHM9dGhpcy5sZW5ndGg7KytvPHM7KXthLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPShuPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBsPS0xLGM9bi5sZW5ndGg7KytsPGM7KShpPW5bbF0pPyhlLnB1c2gocj10LmNhbGwoaSxpLl9fZGF0YV9fLGwsbykpLHImJiJfX2RhdGFfXyJpbiBpJiYoci5fX2RhdGFfXz1pLl9fZGF0YV9fKSk6ZS5wdXNoKG51bGwpfXJldHVybiBWKGEpfSxZLnNlbGVjdEFsbD1mdW5jdGlvbih0KXt2YXIgZSxyLGk9W107dD1YKHQpO2Zvcih2YXIgYT0tMSxvPXRoaXMubGVuZ3RoOysrYTxvOylmb3IodmFyIHM9dGhpc1thXSxsPS0xLGM9cy5sZW5ndGg7KytsPGM7KShyPXNbbF0pJiYoaS5wdXNoKGU9bih0LmNhbGwocixyLl9fZGF0YV9fLGwsYSkpKSxlLnBhcmVudE5vZGU9cik7cmV0dXJuIFYoaSl9O3ZhciBaPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixKPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpaLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIn07ZnVuY3Rpb24gSyhlLHIpe3JldHVybiBlPXQubnMucXVhbGlmeShlKSxudWxsPT1yP2UubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoZSl9OiJmdW5jdGlvbiI9PXR5cGVvZiByP2UubG9jYWw/ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoZS5zcGFjZSxlLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCx0KX06ZnVuY3Rpb24oKXt2YXIgdD1yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT10P3RoaXMucmVtb3ZlQXR0cmlidXRlKGUpOnRoaXMuc2V0QXR0cmlidXRlKGUsdCl9OmUubG9jYWw/ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZU5TKGUuc3BhY2UsZS5sb2NhbCxyKX06ZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShlLHIpfX1mdW5jdGlvbiBRKHQpe3JldHVybiB0LnRyaW0oKS5yZXBsYWNlKC9ccysvZywiICIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuIG5ldyBSZWdFeHAoIig/Ol58XFxzKykiK3QucmVxdW90ZShlKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiB0dCh0KXtyZXR1cm4odCsiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pfWZ1bmN0aW9uIGV0KHQsZSl7dmFyIHI9KHQ9dHQodCkubWFwKHJ0KSkubGVuZ3RoO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2Z1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLGk9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7KytuPHI7KXRbbl0odGhpcyxpKX06ZnVuY3Rpb24oKXtmb3IodmFyIG49LTE7KytuPHI7KXRbbl0odGhpcyxlKX19ZnVuY3Rpb24gcnQodCl7dmFyIGU9JCh0KTtyZXR1cm4gZnVuY3Rpb24ocixuKXtpZihpPXIuY2xhc3NMaXN0KXJldHVybiBuP2kuYWRkKHQpOmkucmVtb3ZlKHQpO3ZhciBpPXIuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtuPyhlLmxhc3RJbmRleD0wLGUudGVzdChpKXx8ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkrIiAiK3QpKSk6ci5zZXRBdHRyaWJ1dGUoImNsYXNzIixRKGkucmVwbGFjZShlLCIgIikpKX19ZnVuY3Rpb24gbnQodCxlLHIpe3JldHVybiBudWxsPT1lP2Z1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1uP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkodCk6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LG4scil9OmZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSh0LGUscil9fWZ1bmN0aW9uIGl0KHQsZSl7cmV0dXJuIG51bGw9PWU/ZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t0XX06ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oKXt2YXIgcj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP2RlbGV0ZSB0aGlzW3RdOnRoaXNbdF09cn06ZnVuY3Rpb24oKXt0aGlzW3RdPWV9fWZ1bmN0aW9uIGF0KGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6KGU9dC5ucy5xdWFsaWZ5KGUpKS5sb2NhbD9mdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGUuc3BhY2UsZS5sb2NhbCl9OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vd25lckRvY3VtZW50LHI9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIHI9PT1aJiZ0LmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1aP3QuY3JlYXRlRWxlbWVudChlKTp0LmNyZWF0ZUVsZW1lbnROUyhyLGUpfX1mdW5jdGlvbiBvdCgpe3ZhciB0PXRoaXMucGFyZW50Tm9kZTt0JiZ0LnJlbW92ZUNoaWxkKHRoaXMpfWZ1bmN0aW9uIHN0KHQpe3JldHVybntfX2RhdGFfXzp0fX1mdW5jdGlvbiBsdCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gRyh0aGlzLHQpfX1mdW5jdGlvbiBjdCh0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aHx8KHQ9aCksZnVuY3Rpb24oZSxyKXtyZXR1cm4gZSYmcj90KGUuX19kYXRhX18sci5fX2RhdGFfXyk6IWUtIXJ9fWZ1bmN0aW9uIHV0KHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSxhPXRbcl0sbz0wLHM9YS5sZW5ndGg7bzxzO28rKykoaT1hW29dKSYmZShpLG8scik7cmV0dXJuIHR9ZnVuY3Rpb24gZnQodCl7cmV0dXJuIFUodCxodCksdH10Lm5zPXtwcmVmaXg6SixxdWFsaWZ5OmZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiOiIpLHI9dDtyZXR1cm4gZT49MCYmInhtbG5zIiE9PShyPXQuc2xpY2UoMCxlKSkmJih0PXQuc2xpY2UoZSsxKSksSi5oYXNPd25Qcm9wZXJ0eShyKT97c3BhY2U6SltyXSxsb2NhbDp0fTp0fX0sWS5hdHRyPWZ1bmN0aW9uKGUscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe3ZhciBuPXRoaXMubm9kZSgpO3JldHVybihlPXQubnMucXVhbGlmeShlKSkubG9jYWw/bi5nZXRBdHRyaWJ1dGVOUyhlLnNwYWNlLGUubG9jYWwpOm4uZ2V0QXR0cmlidXRlKGUpfWZvcihyIGluIGUpdGhpcy5lYWNoKEsocixlW3JdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChLKGUscikpfSxZLmNsYXNzZWQ9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIHI9dGhpcy5ub2RlKCksbj0odD10dCh0KSkubGVuZ3RoLGk9LTE7aWYoZT1yLmNsYXNzTGlzdCl7Zm9yKDsrK2k8bjspaWYoIWUuY29udGFpbnModFtpXSkpcmV0dXJuITF9ZWxzZSBmb3IoZT1yLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsrK2k8bjspaWYoISQodFtpXSkudGVzdChlKSlyZXR1cm4hMTtyZXR1cm4hMH1mb3IoZSBpbiB0KXRoaXMuZWFjaChldChlLHRbZV0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGV0KHQsZSkpfSxZLnN0eWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO2lmKG48Myl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXtmb3IociBpbiBuPDImJihlPSIiKSx0KXRoaXMuZWFjaChudChyLHRbcl0sZSkpO3JldHVybiB0aGlzfWlmKG48Mil7dmFyIGk9dGhpcy5ub2RlKCk7cmV0dXJuIG8oaSkuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCl9cj0iIn1yZXR1cm4gdGhpcy5lYWNoKG50KHQsZSxyKSl9LFkucHJvcGVydHk9ZnVuY3Rpb24odCxlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gdGhpcy5ub2RlKClbdF07Zm9yKGUgaW4gdCl0aGlzLmVhY2goaXQoZSx0W2VdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChpdCh0LGUpKX0sWS50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09ZT8iIjplfTpudWxsPT10P2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PXR9KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sWS5odG1sPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbigpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPW51bGw9PWU/IiI6ZX06bnVsbD09dD9mdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPSIifTpmdW5jdGlvbigpe3RoaXMuaW5uZXJIVE1MPXR9KTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LFkuYXBwZW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0PWF0KHQpLHRoaXMuc2VsZWN0KChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pKX0sWS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1hdCh0KSxlPVcoZSksdGhpcy5zZWxlY3QoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pKX0sWS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKG90KX0sWS5kYXRhPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPS0xLGE9dGhpcy5sZW5ndGg7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2Zvcih0PW5ldyBBcnJheShhPShyPXRoaXNbMF0pLmxlbmd0aCk7KytpPGE7KShuPXJbaV0pJiYodFtpXT1uLl9fZGF0YV9fKTtyZXR1cm4gdH1mdW5jdGlvbiBvKHQscil7dmFyIG4saSxhLG89dC5sZW5ndGgsdT1yLmxlbmd0aCxmPU1hdGgubWluKG8sdSksaD1uZXcgQXJyYXkodSkscD1uZXcgQXJyYXkodSksZD1uZXcgQXJyYXkobyk7aWYoZSl7dmFyIG0sZz1uZXcgXyx2PW5ldyBBcnJheShvKTtmb3Iobj0tMTsrK248bzspKGk9dFtuXSkmJihnLmhhcyhtPWUuY2FsbChpLGkuX19kYXRhX18sbikpP2Rbbl09aTpnLnNldChtLGkpLHZbbl09bSk7Zm9yKG49LTE7KytuPHU7KShpPWcuZ2V0KG09ZS5jYWxsKHIsYT1yW25dLG4pKSk/ITAhPT1pJiYoaFtuXT1pLGkuX19kYXRhX189YSk6cFtuXT1zdChhKSxnLnNldChtLCEwKTtmb3Iobj0tMTsrK248bzspbiBpbiB2JiYhMCE9PWcuZ2V0KHZbbl0pJiYoZFtuXT10W25dKX1lbHNle2ZvcihuPS0xOysrbjxmOylpPXRbbl0sYT1yW25dLGk/KGkuX19kYXRhX189YSxoW25dPWkpOnBbbl09c3QoYSk7Zm9yKDtuPHU7KytuKXBbbl09c3QocltuXSk7Zm9yKDtuPG87KytuKWRbbl09dFtuXX1wLnVwZGF0ZT1oLHAucGFyZW50Tm9kZT1oLnBhcmVudE5vZGU9ZC5wYXJlbnROb2RlPXQucGFyZW50Tm9kZSxzLnB1c2gocCksbC5wdXNoKGgpLGMucHVzaChkKX12YXIgcz1mdChbXSksbD1WKFtdKSxjPVYoW10pO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KWZvcig7KytpPGE7KW8ocj10aGlzW2ldLHQuY2FsbChyLHIucGFyZW50Tm9kZS5fX2RhdGFfXyxpKSk7ZWxzZSBmb3IoOysraTxhOylvKHI9dGhpc1tpXSx0KTtyZXR1cm4gbC5lbnRlcj1mdW5jdGlvbigpe3JldHVybiBzfSxsLmV4aXQ9ZnVuY3Rpb24oKXtyZXR1cm4gY30sbH0sWS5kYXR1bT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsdCk6dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iKX0sWS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W107ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PWx0KHQpKTtmb3IodmFyIGE9MCxvPXRoaXMubGVuZ3RoO2E8bzthKyspe2kucHVzaChlPVtdKSxlLnBhcmVudE5vZGU9KHI9dGhpc1thXSkucGFyZW50Tm9kZTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspKG49cltzXSkmJnQuY2FsbChuLG4uX19kYXRhX18scyxhKSYmZS5wdXNoKG4pfXJldHVybiBWKGkpfSxZLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KWZvcih2YXIgcixuPXRoaXNbdF0saT1uLmxlbmd0aC0xLGE9bltpXTstLWk+PTA7KShyPW5baV0pJiYoYSYmYSE9PXIubmV4dFNpYmxpbmcmJmEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocixhKSxhPXIpO3JldHVybiB0aGlzfSxZLnNvcnQ9ZnVuY3Rpb24odCl7dD1jdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciBlPS0xLHI9dGhpcy5sZW5ndGg7KytlPHI7KXRoaXNbZV0uc29ydCh0KTtyZXR1cm4gdGhpcy5vcmRlcigpfSxZLmVhY2g9ZnVuY3Rpb24odCl7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKGUscixuKXt0LmNhbGwoZSxlLl9fZGF0YV9fLHIsbil9KSl9LFkuY2FsbD1mdW5jdGlvbih0KXt2YXIgZT1uKGFyZ3VtZW50cyk7cmV0dXJuIHQuYXBwbHkoZVswXT10aGlzLGUpLHRoaXN9LFkuZW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5ub2RlKCl9LFkubm9kZT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5sZW5ndGg7dDxlO3QrKylmb3IodmFyIHI9dGhpc1t0XSxuPTAsaT1yLmxlbmd0aDtuPGk7bisrKXt2YXIgYT1yW25dO2lmKGEpcmV0dXJuIGF9cmV0dXJuIG51bGx9LFkuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHV0KHRoaXMsKGZ1bmN0aW9uKCl7Kyt0fSkpLHR9O3ZhciBodD1bXTtmdW5jdGlvbiBwdCh0KXt2YXIgZSxyO3JldHVybiBmdW5jdGlvbihuLGksYSl7dmFyIG8scz10W2FdLnVwZGF0ZSxsPXMubGVuZ3RoO2ZvcihhIT1yJiYocj1hLGU9MCksaT49ZSYmKGU9aSsxKTshKG89c1tlXSkmJisrZTxsOyk7cmV0dXJuIG99fWZ1bmN0aW9uIGR0KGUscixpKXt2YXIgYT0iX19vbiIrZSxvPWUuaW5kZXhPZigiLiIpLHM9Z3Q7bz4wJiYoZT1lLnNsaWNlKDAsbykpO3ZhciBsPW10LmdldChlKTtmdW5jdGlvbiBjKCl7dmFyIHQ9dGhpc1thXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGUsdCx0LiQpLGRlbGV0ZSB0aGlzW2FdKX1yZXR1cm4gbCYmKGU9bCxzPXZ0KSxvP3I/ZnVuY3Rpb24oKXt2YXIgdD1zKHIsbihhcmd1bWVudHMpKTtjLmNhbGwodGhpcyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGUsdGhpc1thXT10LHQuJD1pKSx0Ll89cn06YzpyP3o6ZnVuY3Rpb24oKXt2YXIgcixuPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrdC5yZXF1b3RlKGUpKyIkIik7Zm9yKHZhciBpIGluIHRoaXMpaWYocj1pLm1hdGNoKG4pKXt2YXIgYT10aGlzW2ldO3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihyWzFdLGEsYS4kKSxkZWxldGUgdGhpc1tpXX19fXQuc2VsZWN0aW9uLmVudGVyPWZ0LHQuc2VsZWN0aW9uLmVudGVyLnByb3RvdHlwZT1odCxodC5hcHBlbmQ9WS5hcHBlbmQsaHQuZW1wdHk9WS5lbXB0eSxodC5ub2RlPVkubm9kZSxodC5jYWxsPVkuY2FsbCxodC5zaXplPVkuc2l6ZSxodC5zZWxlY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1bXSxzPS0xLGw9dGhpcy5sZW5ndGg7KytzPGw7KXtuPShpPXRoaXNbc10pLnVwZGF0ZSxvLnB1c2goZT1bXSksZS5wYXJlbnROb2RlPWkucGFyZW50Tm9kZTtmb3IodmFyIGM9LTEsdT1pLmxlbmd0aDsrK2M8dTspKGE9aVtjXSk/KGUucHVzaChuW2NdPXI9dC5jYWxsKGkucGFyZW50Tm9kZSxhLl9fZGF0YV9fLGMscykpLHIuX19kYXRhX189YS5fX2RhdGFfXyk6ZS5wdXNoKG51bGwpfXJldHVybiBWKG8pfSxodC5pbnNlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyJiYoZT1wdCh0aGlzKSksWS5pbnNlcnQuY2FsbCh0aGlzLHQsZSl9LHQuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1bSCh0LGkpXSkucGFyZW50Tm9kZT1pLmRvY3VtZW50RWxlbWVudDooZT1bdF0pLnBhcmVudE5vZGU9YSh0KSxWKFtlXSl9LHQuc2VsZWN0QWxsPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiJzdHJpbmciPT10eXBlb2YgdD8oZT1uKHEodCxpKSkpLnBhcmVudE5vZGU9aS5kb2N1bWVudEVsZW1lbnQ6KGU9bih0KSkucGFyZW50Tm9kZT1udWxsLFYoW2VdKX0sWS5vbj1mdW5jdGlvbih0LGUscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aDtpZihuPDMpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl7Zm9yKHIgaW4gbjwyJiYoZT0hMSksdCl0aGlzLmVhY2goZHQocix0W3JdLGUpKTtyZXR1cm4gdGhpc31pZihuPDIpcmV0dXJuKG49dGhpcy5ub2RlKClbIl9fb24iK3RdKSYmbi5fO3I9ITF9cmV0dXJuIHRoaXMuZWFjaChkdCh0LGUscikpfTt2YXIgbXQ9dC5tYXAoe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSk7ZnVuY3Rpb24gZ3QoZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9dC5ldmVudDt0LmV2ZW50PW4sclswXT10aGlzLl9fZGF0YV9fO3RyeXtlLmFwcGx5KHRoaXMscil9ZmluYWxseXt0LmV2ZW50PWl9fX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPWd0KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQucmVsYXRlZFRhcmdldDtlJiYoZT09PXRoaXN8fDgmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0aGlzKSl8fHIuY2FsbCh0aGlzLHQpfX1pJiZtdC5mb3JFYWNoKChmdW5jdGlvbih0KXsib24iK3QgaW4gaSYmbXQucmVtb3ZlKHQpfSkpO3ZhciB5dCx4dD0wO2Z1bmN0aW9uIGJ0KGUpe3ZhciByPSIuZHJhZ3N1cHByZXNzLSIrICsreHQsbj0iY2xpY2siK3IsaT10LnNlbGVjdChvKGUpKS5vbigidG91Y2htb3ZlIityLEYpLm9uKCJkcmFnc3RhcnQiK3IsRikub24oInNlbGVjdHN0YXJ0IityLEYpO2lmKG51bGw9PXl0JiYoeXQ9ISgib25zZWxlY3RzdGFydCJpbiBlKSYmSShlLnN0eWxlLCJ1c2VyU2VsZWN0IikpLHl0KXt2YXIgcz1hKGUpLnN0eWxlLGw9c1t5dF07c1t5dF09Im5vbmUifXJldHVybiBmdW5jdGlvbih0KXtpZihpLm9uKHIsbnVsbCkseXQmJihzW3l0XT1sKSx0KXt2YXIgZT1mdW5jdGlvbigpe2kub24obixudWxsKX07aS5vbihuLChmdW5jdGlvbigpe0YoKSxlKCl9KSwhMCksc2V0VGltZW91dChlLDApfX19dC5tb3VzZT1mdW5jdGlvbih0KXtyZXR1cm4gd3QodCxCKCkpfTt2YXIgX3Q9dGhpcy5uYXZpZ2F0b3ImJi9XZWJLaXQvLnRlc3QodGhpcy5uYXZpZ2F0b3IudXNlckFnZW50KT8tMTowO2Z1bmN0aW9uIHd0KGUscil7ci5jaGFuZ2VkVG91Y2hlcyYmKHI9ci5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIG49ZS5vd25lclNWR0VsZW1lbnR8fGU7aWYobi5jcmVhdGVTVkdQb2ludCl7dmFyIGk9bi5jcmVhdGVTVkdQb2ludCgpO2lmKF90PDApe3ZhciBhPW8oZSk7aWYoYS5zY3JvbGxYfHxhLnNjcm9sbFkpe3ZhciBzPShuPXQuc2VsZWN0KCJib2R5IikuYXBwZW5kKCJzdmciKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzowLGJvcmRlcjoibm9uZSJ9LCJpbXBvcnRhbnQiKSlbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7X3Q9IShzLmZ8fHMuZSksbi5yZW1vdmUoKX19cmV0dXJuIF90PyhpLng9ci5wYWdlWCxpLnk9ci5wYWdlWSk6KGkueD1yLmNsaWVudFgsaS55PXIuY2xpZW50WSksWyhpPWkubWF0cml4VHJhbnNmb3JtKGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxpLnldfXZhciBsPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3IuY2xpZW50WC1sLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1sLnRvcC1lLmNsaWVudFRvcF19ZnVuY3Rpb24gVHQoKXtyZXR1cm4gdC5ldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5pZGVudGlmaWVyfXQudG91Y2g9ZnVuY3Rpb24odCxlLHIpe2lmKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9ZSxlPUIoKS5jaGFuZ2VkVG91Y2hlcyksZSlmb3IodmFyIG4saT0wLGE9ZS5sZW5ndGg7aTxhOysraSlpZigobj1lW2ldKS5pZGVudGlmaWVyPT09cilyZXR1cm4gd3QodCxuKX0sdC5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7dmFyIGU9TihhLCJkcmFnIiwiZHJhZ3N0YXJ0IiwiZHJhZ2VuZCIpLHI9bnVsbCxuPXMoeix0Lm1vdXNlLG8sIm1vdXNlbW92ZSIsIm1vdXNldXAiKSxpPXMoVHQsdC50b3VjaCxDLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIpO2Z1bmN0aW9uIGEoKXt0aGlzLm9uKCJtb3VzZWRvd24uZHJhZyIsbikub24oInRvdWNoc3RhcnQuZHJhZyIsaSl9ZnVuY3Rpb24gcyhuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsLGM9dGhpcyx1PXQuZXZlbnQudGFyZ2V0LmNvcnJlc3BvbmRpbmdFbGVtZW50fHx0LmV2ZW50LnRhcmdldCxmPWMucGFyZW50Tm9kZSxoPWUub2YoYyxhcmd1bWVudHMpLHA9MCxkPW4oKSxtPSIuZHJhZyIrKG51bGw9PWQ/IiI6Ii0iK2QpLGc9dC5zZWxlY3QoYSh1KSkub24obyttLHgpLm9uKHMrbSxiKSx2PWJ0KHUpLHk9aShmLGQpO2Z1bmN0aW9uIHgoKXt2YXIgdCxlLHI9aShmLGQpO3ImJih0PXJbMF0teVswXSxlPXJbMV0teVsxXSxwfD10fGUseT1yLGgoe3R5cGU6ImRyYWciLHg6clswXStsWzBdLHk6clsxXStsWzFdLGR4OnQsZHk6ZX0pKX1mdW5jdGlvbiBiKCl7aShmLGQpJiYoZy5vbihvK20sbnVsbCkub24ocyttLG51bGwpLHYocCksaCh7dHlwZToiZHJhZ2VuZCJ9KSl9bD1yP1sobD1yLmFwcGx5KGMsYXJndW1lbnRzKSkueC15WzBdLGwueS15WzFdXTpbMCwwXSxoKHt0eXBlOiJkcmFnc3RhcnQifSl9fXJldHVybiBhLm9yaWdpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LGEpOnJ9LHQucmViaW5kKGEsZSwib24iKX0sdC50b3VjaGVzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKGU9QigpLnRvdWNoZXMpLGU/bihlKS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPXd0KHQsZSk7cmV0dXJuIHIuaWRlbnRpZmllcj1lLmlkZW50aWZpZXIscn0pKTpbXX07dmFyIGt0PTFlLTYsQXQ9TWF0aC5QSSxNdD0yKkF0LFN0PU10LWt0LEV0PUF0LzIsTHQ9QXQvMTgwLEN0PTE4MC9BdDtmdW5jdGlvbiBQdCh0KXtyZXR1cm4gdD4xP0V0OnQ8LTE/LUV0Ok1hdGguYXNpbih0KX1mdW5jdGlvbiBJdCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn12YXIgT3Q9TWF0aC5TUVJUMjt0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8MWUtMTIpbj1NYXRoLmxvZyhjL28pL090LHI9ZnVuY3Rpb24odCl7cmV0dXJuW2krdCp1LGErdCpmLG8qTWF0aC5leHAoT3QqdCpuKV19O2Vsc2V7dmFyIHA9TWF0aC5zcXJ0KGgpLGQ9KGMqYy1vKm8rNCpoKS8oMipvKjIqcCksbT0oYypjLW8qby00KmgpLygyKmMqMipwKSxnPU1hdGgubG9nKE1hdGguc3FydChkKmQrMSktZCksdj1NYXRoLmxvZyhNYXRoLnNxcnQobSptKzEpLW0pO249KHYtZykvT3Qscj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUl0KGcpLGw9by8oMipwKSoocyooZT1PdCpyK2csKChlPU1hdGguZXhwKDIqZSkpLTEpLyhlKzEpKS1mdW5jdGlvbih0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpLTEvdCkvMn0oZykpO3JldHVybltpK2wqdSxhK2wqZixvKnMvSXQoT3QqcitnKV19fXJldHVybiByLmR1cmF0aW9uPTFlMypuLHJ9LHQuYmVoYXZpb3Iuem9vbT1mdW5jdGlvbigpe3ZhciBlLHIsbixhLHMsbCxjLHUsZixoPXt4OjAseTowLGs6MX0scD1bOTYwLDUwMF0sZD1SdCxtPTI1MCxnPTAsdj0ibW91c2Vkb3duLnpvb20iLHk9Im1vdXNlbW92ZS56b29tIix4PSJtb3VzZXVwLnpvb20iLGI9InRvdWNoc3RhcnQuem9vbSIsXz1OKHcsInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7ZnVuY3Rpb24gdyh0KXt0Lm9uKHYsUCkub24oRHQrIi56b29tIixPKS5vbigiZGJsY2xpY2suem9vbSIseikub24oYixJKX1mdW5jdGlvbiBUKHQpe3JldHVyblsodFswXS1oLngpL2guaywodFsxXS1oLnkpL2gua119ZnVuY3Rpb24gayh0KXtoLms9TWF0aC5tYXgoZFswXSxNYXRoLm1pbihkWzFdLHQpKX1mdW5jdGlvbiBBKHQsZSl7ZT1mdW5jdGlvbih0KXtyZXR1cm5bdFswXSpoLmsraC54LHRbMV0qaC5rK2gueV19KGUpLGgueCs9dFswXS1lWzBdLGgueSs9dFsxXS1lWzFdfWZ1bmN0aW9uIE0oZSxuLGksYSl7ZS5fX2NoYXJ0X189e3g6aC54LHk6aC55LGs6aC5rfSxrKE1hdGgucG93KDIsYSkpLEEocj1uLGkpLGU9dC5zZWxlY3QoZSksbT4wJiYoZT1lLnRyYW5zaXRpb24oKS5kdXJhdGlvbihtKSksZS5jYWxsKHcuZXZlbnQpfWZ1bmN0aW9uIFMoKXtjJiZjLmRvbWFpbihsLnJhbmdlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1oLngpL2gua30pKS5tYXAobC5pbnZlcnQpKSxmJiZmLmRvbWFpbih1LnJhbmdlKCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC1oLnkpL2gua30pKS5tYXAodS5pbnZlcnQpKX1mdW5jdGlvbiBFKHQpe2crK3x8dCh7dHlwZToiem9vbXN0YXJ0In0pfWZ1bmN0aW9uIEwodCl7UygpLHQoe3R5cGU6Inpvb20iLHNjYWxlOmguayx0cmFuc2xhdGU6W2gueCxoLnldfSl9ZnVuY3Rpb24gQyh0KXstLWd8fCh0KHt0eXBlOiJ6b29tZW5kIn0pLHI9bnVsbCl9ZnVuY3Rpb24gUCgpe3ZhciBlPXRoaXMscj1fLm9mKGUsYXJndW1lbnRzKSxuPTAsaT10LnNlbGVjdChvKGUpKS5vbih5LGwpLm9uKHgsYyksYT1UKHQubW91c2UoZSkpLHM9YnQoZSk7ZnVuY3Rpb24gbCgpe249MSxBKHQubW91c2UoZSksYSksTChyKX1mdW5jdGlvbiBjKCl7aS5vbih5LG51bGwpLm9uKHgsbnVsbCkscyhuKSxDKHIpfURpLmNhbGwoZSksRShyKX1mdW5jdGlvbiBJKCl7dmFyIGUscj10aGlzLG49Xy5vZihyLGFyZ3VtZW50cyksaT17fSxhPTAsbz0iLnpvb20tIit0LmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsbD0idG91Y2htb3ZlIitvLGM9InRvdWNoZW5kIitvLHU9W10sZj10LnNlbGVjdChyKSxwPWJ0KHIpO2Z1bmN0aW9uIGQoKXt2YXIgbj10LnRvdWNoZXMocik7cmV0dXJuIGU9aC5rLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5pZGVudGlmaWVyIGluIGkmJihpW3QuaWRlbnRpZmllcl09VCh0KSl9KSksbn1mdW5jdGlvbiBtKCl7dmFyIGU9dC5ldmVudC50YXJnZXQ7dC5zZWxlY3QoZSkub24obCxnKS5vbihjLHkpLHUucHVzaChlKTtmb3IodmFyIG49dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxvPTAsZj1uLmxlbmd0aDtvPGY7KytvKWlbbltvXS5pZGVudGlmaWVyXT1udWxsO3ZhciBwPWQoKSxtPURhdGUubm93KCk7aWYoMT09PXAubGVuZ3RoKXtpZihtLXM8NTAwKXt2YXIgdj1wWzBdO00ocix2LGlbdi5pZGVudGlmaWVyXSxNYXRoLmZsb29yKE1hdGgubG9nKGguaykvTWF0aC5MTjIpKzEpLEYoKX1zPW19ZWxzZSBpZihwLmxlbmd0aD4xKXt2PXBbMF07dmFyIHg9cFsxXSxiPXZbMF0teFswXSxfPXZbMV0teFsxXTthPWIqYitfKl99fWZ1bmN0aW9uIGcoKXt2YXIgbyxsLGMsdSxmPXQudG91Y2hlcyhyKTtEaS5jYWxsKHIpO2Zvcih2YXIgaD0wLHA9Zi5sZW5ndGg7aDxwOysraCx1PW51bGwpaWYoYz1mW2hdLHU9aVtjLmlkZW50aWZpZXJdKXtpZihsKWJyZWFrO289YyxsPXV9aWYodSl7dmFyIGQ9KGQ9Y1swXS1vWzBdKSpkKyhkPWNbMV0tb1sxXSkqZCxtPWEmJk1hdGguc3FydChkL2EpO289WyhvWzBdK2NbMF0pLzIsKG9bMV0rY1sxXSkvMl0sbD1bKGxbMF0rdVswXSkvMiwobFsxXSt1WzFdKS8yXSxrKG0qZSl9cz1udWxsLEEobyxsKSxMKG4pfWZ1bmN0aW9uIHkoKXtpZih0LmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIGU9dC5ldmVudC5jaGFuZ2VkVG91Y2hlcyxyPTAsYT1lLmxlbmd0aDtyPGE7KytyKWRlbGV0ZSBpW2Vbcl0uaWRlbnRpZmllcl07Zm9yKHZhciBzIGluIGkpcmV0dXJuIHZvaWQgZCgpfXQuc2VsZWN0QWxsKHUpLm9uKG8sbnVsbCksZi5vbih2LFApLm9uKGIsSSkscCgpLEMobil9bSgpLEUobiksZi5vbih2LG51bGwpLm9uKGIsbSl9ZnVuY3Rpb24gTygpe3ZhciBpPV8ub2YodGhpcyxhcmd1bWVudHMpO2E/Y2xlYXJUaW1lb3V0KGEpOihEaS5jYWxsKHRoaXMpLGU9VChyPW58fHQubW91c2UodGhpcykpLEUoaSkpLGE9c2V0VGltZW91dCgoZnVuY3Rpb24oKXthPW51bGwsQyhpKX0pLDUwKSxGKCksayhNYXRoLnBvdygyLC4wMDIqenQoKSkqaC5rKSxBKHIsZSksTChpKX1mdW5jdGlvbiB6KCl7dmFyIGU9dC5tb3VzZSh0aGlzKSxyPU1hdGgubG9nKGguaykvTWF0aC5MTjI7TSh0aGlzLGUsVChlKSx0LmV2ZW50LnNoaWZ0S2V5P01hdGguY2VpbChyKS0xOk1hdGguZmxvb3IocikrMSl9cmV0dXJuIER0fHwoRHQ9Im9ud2hlZWwiaW4gaT8oenQ9ZnVuY3Rpb24oKXtyZXR1cm4tdC5ldmVudC5kZWx0YVkqKHQuZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBpPyh6dD1mdW5jdGlvbigpe3JldHVybiB0LmV2ZW50LndoZWVsRGVsdGF9LCJtb3VzZXdoZWVsIik6KHp0PWZ1bmN0aW9uKCl7cmV0dXJuLXQuZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpKSx3LmV2ZW50PWZ1bmN0aW9uKGUpe2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1fLm9mKHRoaXMsYXJndW1lbnRzKSxuPWg7Qmk/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0Lnpvb20iLChmdW5jdGlvbigpe2g9dGhpcy5fX2NoYXJ0X198fHt4OjAseTowLGs6MX0sRShlKX0pKS50d2Vlbigiem9vbTp6b29tIiwoZnVuY3Rpb24oKXt2YXIgaT1wWzBdLGE9cFsxXSxvPXI/clswXTppLzIscz1yP3JbMV06YS8yLGw9dC5pbnRlcnBvbGF0ZVpvb20oWyhvLWgueCkvaC5rLChzLWgueSkvaC5rLGkvaC5rXSxbKG8tbi54KS9uLmssKHMtbi55KS9uLmssaS9uLmtdKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9bCh0KSxuPWkvclsyXTt0aGlzLl9fY2hhcnRfXz1oPXt4Om8tclswXSpuLHk6cy1yWzFdKm4sazpufSxMKGUpfX0pKS5lYWNoKCJpbnRlcnJ1cHQuem9vbSIsKGZ1bmN0aW9uKCl7QyhlKX0pKS5lYWNoKCJlbmQuem9vbSIsKGZ1bmN0aW9uKCl7QyhlKX0pKToodGhpcy5fX2NoYXJ0X189aCxFKGUpLEwoZSksQyhlKSl9KSl9LHcudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPXt4Oit0WzBdLHk6K3RbMV0sazpoLmt9LFMoKSx3KTpbaC54LGgueV19LHcuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9e3g6aC54LHk6aC55LGs6bnVsbH0saygrdCksUygpLHcpOmgua30sdy5zY2FsZUV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD1udWxsPT10P1J0OlsrdFswXSwrdFsxXV0sdyk6ZH0sdy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCYmWyt0WzBdLCt0WzFdXSx3KTpufSx3LnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9dCYmWyt0WzBdLCt0WzFdXSx3KTpwfSx3LmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhtPSt0LHcpOm19LHcueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LGw9dC5jb3B5KCksaD17eDowLHk6MCxrOjF9LHcpOmN9LHcueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LHU9dC5jb3B5KCksaD17eDowLHk6MCxrOjF9LHcpOmZ9LHQucmViaW5kKHcsXywib24iKX07dmFyIHp0LER0LFJ0PVswLDEvMF07ZnVuY3Rpb24gRnQoKXt9ZnVuY3Rpb24gQnQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgQnQ/KHRoaXMuaD0rdCx0aGlzLnM9K2Usdm9pZCh0aGlzLmw9K3IpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIEJ0P25ldyBCdCh0LmgsdC5zLHQubCk6bmUoIiIrdCxpZSxCdCk6bmV3IEJ0KHQsZSxyKX10LmNvbG9yPUZ0LEZ0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpKyIifSx0LmhzbD1CdDt2YXIgTnQ9QnQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiBqdCh0LGUscil7dmFyIG4saTtmdW5jdGlvbiBhKHQpe3JldHVybiBNYXRoLnJvdW5kKDI1NSpmdW5jdGlvbih0KXtyZXR1cm4gdD4zNjA/dC09MzYwOnQ8MCYmKHQrPTM2MCksdDw2MD9uKyhpLW4pKnQvNjA6dDwxODA/aTp0PDI0MD9uKyhpLW4pKigyNDAtdCkvNjA6bn0odCkpfXJldHVybiB0PWlzTmFOKHQpPzA6KHQlPTM2MCk8MD90KzM2MDp0LGU9aXNOYU4oZSl8fGU8MD8wOmU+MT8xOmUsbj0yKihyPXI8MD8wOnI+MT8xOnIpLShpPXI8PS41P3IqKDErZSk6citlLXIqZSksbmV3IFF0KGEodCsxMjApLGEodCksYSh0LTEyMCkpfWZ1bmN0aW9uIFV0KGUscixuKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFV0Pyh0aGlzLmg9K2UsdGhpcy5jPStyLHZvaWQodGhpcy5sPStuKSk6YXJndW1lbnRzLmxlbmd0aDwyP2UgaW5zdGFuY2VvZiBVdD9uZXcgVXQoZS5oLGUuYyxlLmwpOlh0KGUgaW5zdGFuY2VvZiBxdD9lLmw6KGU9YWUoKGU9dC5yZ2IoZSkpLnIsZS5nLGUuYikpLmwsZS5hLGUuYik6bmV3IFV0KGUscixuKX1OdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSksbmV3IEJ0KHRoaXMuaCx0aGlzLnMsdGhpcy5sL3QpfSxOdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpLG5ldyBCdCh0aGlzLmgsdGhpcy5zLHQqdGhpcy5sKX0sTnQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIGp0KHRoaXMuaCx0aGlzLnMsdGhpcy5sKX0sdC5oY2w9VXQ7dmFyIFZ0PVV0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24gSHQodCxlLHIpe3JldHVybiBpc05hTih0KSYmKHQ9MCksaXNOYU4oZSkmJihlPTApLG5ldyBxdChyLE1hdGguY29zKHQqPUx0KSplLE1hdGguc2luKHQpKmUpfWZ1bmN0aW9uIHF0KHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHF0Pyh0aGlzLmw9K3QsdGhpcy5hPStlLHZvaWQodGhpcy5iPStyKSk6YXJndW1lbnRzLmxlbmd0aDwyP3QgaW5zdGFuY2VvZiBxdD9uZXcgcXQodC5sLHQuYSx0LmIpOnQgaW5zdGFuY2VvZiBVdD9IdCh0LmgsdC5jLHQubCk6YWUoKHQ9UXQodCkpLnIsdC5nLHQuYik6bmV3IHF0KHQsZSxyKX1WdC5icmlnaHRlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV0KHRoaXMuaCx0aGlzLmMsTWF0aC5taW4oMTAwLHRoaXMubCtHdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSl9LFZ0LmRhcmtlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFV0KHRoaXMuaCx0aGlzLmMsTWF0aC5tYXgoMCx0aGlzLmwtR3QqKGFyZ3VtZW50cy5sZW5ndGg/dDoxKSkpfSxWdC5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gSHQodGhpcy5oLHRoaXMuYyx0aGlzLmwpLnJnYigpfSx0LmxhYj1xdDt2YXIgR3Q9MTgsWXQ9cXQucHJvdG90eXBlPW5ldyBGdDtmdW5jdGlvbiBXdCh0LGUscil7dmFyIG49KHQrMTYpLzExNixpPW4rZS81MDAsYT1uLXIvMjAwO3JldHVybiBuZXcgUXQoS3QoMy4yNDA0NTQyKihpPS45NTA0NypadChpKSktMS41MzcxMzg1KihuPTEqWnQobikpLS40OTg1MzE0KihhPTEuMDg4ODMqWnQoYSkpKSxLdCgtLjk2OTI2NippKzEuODc2MDEwOCpuKy4wNDE1NTYqYSksS3QoLjA1NTY0MzQqaS0uMjA0MDI1OSpuKzEuMDU3MjI1MiphKSl9ZnVuY3Rpb24gWHQodCxlLHIpe3JldHVybiB0PjA/bmV3IFV0KE1hdGguYXRhbjIocixlKSpDdCxNYXRoLnNxcnQoZSplK3IqciksdCk6bmV3IFV0KE5hTixOYU4sdCl9ZnVuY3Rpb24gWnQodCl7cmV0dXJuIHQ+LjIwNjg5MzAzND90KnQqdDoodC00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBKdCh0KXtyZXR1cm4gdD4uMDA4ODU2P01hdGgucG93KHQsMS8zKTo3Ljc4NzAzNyp0KzQvMjl9ZnVuY3Rpb24gS3QodCl7cmV0dXJuIE1hdGgucm91bmQoMjU1Kih0PD0uMDAzMDQ/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gUXQodCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgUXQ/KHRoaXMucj1+fnQsdGhpcy5nPX5+ZSx2b2lkKHRoaXMuYj1+fnIpKTphcmd1bWVudHMubGVuZ3RoPDI/dCBpbnN0YW5jZW9mIFF0P25ldyBRdCh0LnIsdC5nLHQuYik6bmUoIiIrdCxRdCxqdCk6bmV3IFF0KHQsZSxyKX1mdW5jdGlvbiAkdCh0KXtyZXR1cm4gbmV3IFF0KHQ+PjE2LHQ+PjgmMjU1LDI1NSZ0KX1mdW5jdGlvbiB0ZSh0KXtyZXR1cm4gJHQodCkrIiJ9WXQuYnJpZ2h0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxdChNYXRoLm1pbigxMDAsdGhpcy5sK0d0Kihhcmd1bWVudHMubGVuZ3RoP3Q6MSkpLHRoaXMuYSx0aGlzLmIpfSxZdC5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxdChNYXRoLm1heCgwLHRoaXMubC1HdCooYXJndW1lbnRzLmxlbmd0aD90OjEpKSx0aGlzLmEsdGhpcy5iKX0sWXQucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIFd0KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sdC5yZ2I9UXQ7dmFyIGVlPVF0LnByb3RvdHlwZT1uZXcgRnQ7ZnVuY3Rpb24gcmUodCl7cmV0dXJuIHQ8MTY/IjAiK01hdGgubWF4KDAsdCkudG9TdHJpbmcoMTYpOk1hdGgubWluKDI1NSx0KS50b1N0cmluZygxNil9ZnVuY3Rpb24gbmUodCxlLHIpe3ZhciBuLGksYSxvPTAscz0wLGw9MDtpZihuPS8oW2Etel0rKVwoKC4qKVwpLy5leGVjKHQ9dC50b0xvd2VyQ2FzZSgpKSlzd2l0Y2goaT1uWzJdLnNwbGl0KCIsIiksblsxXSl7Y2FzZSJoc2wiOnJldHVybiByKHBhcnNlRmxvYXQoaVswXSkscGFyc2VGbG9hdChpWzFdKS8xMDAscGFyc2VGbG9hdChpWzJdKS8xMDApO2Nhc2UicmdiIjpyZXR1cm4gZShzZShpWzBdKSxzZShpWzFdKSxzZShpWzJdKSl9cmV0dXJuKGE9bGUuZ2V0KHQpKT9lKGEucixhLmcsYS5iKToobnVsbD09dHx8IiMiIT09dC5jaGFyQXQoMCl8fGlzTmFOKGE9cGFyc2VJbnQodC5zbGljZSgxKSwxNikpfHwoND09PXQubGVuZ3RoPyhvPSgzODQwJmEpPj40LG98PW8+PjQscz0yNDAmYSxzfD1zPj40LGw9MTUmYSxsfD1sPDw0KTo3PT09dC5sZW5ndGgmJihvPSgxNjcxMTY4MCZhKT4+MTYscz0oNjUyODAmYSk+PjgsbD0yNTUmYSkpLGUobyxzLGwpKX1mdW5jdGlvbiBpZSh0LGUscil7dmFyIG4saSxhPU1hdGgubWluKHQvPTI1NSxlLz0yNTUsci89MjU1KSxvPU1hdGgubWF4KHQsZSxyKSxzPW8tYSxsPShvK2EpLzI7cmV0dXJuIHM/KGk9bDwuNT9zLyhvK2EpOnMvKDItby1hKSxuPXQ9PW8/KGUtcikvcysoZTxyPzY6MCk6ZT09bz8oci10KS9zKzI6KHQtZSkvcys0LG4qPTYwKToobj1OYU4saT1sPjAmJmw8MT8wOm4pLG5ldyBCdChuLGksbCl9ZnVuY3Rpb24gYWUodCxlLHIpe3ZhciBuPUp0KCguNDEyNDU2NCoodD1vZSh0KSkrLjM1NzU3NjEqKGU9b2UoZSkpKy4xODA0Mzc1KihyPW9lKHIpKSkvLjk1MDQ3KSxpPUp0KCguMjEyNjcyOSp0Ky43MTUxNTIyKmUrLjA3MjE3NSpyKS8xKTtyZXR1cm4gcXQoMTE2KmktMTYsNTAwKihuLWkpLDIwMCooaS1KdCgoLjAxOTMzMzkqdCsuMTE5MTkyKmUrLjk1MDMwNDEqcikvMS4wODg4MykpKX1mdW5jdGlvbiBvZSh0KXtyZXR1cm4odC89MjU1KTw9LjA0MDQ1P3QvMTIuOTI6TWF0aC5wb3coKHQrLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBzZSh0KXt2YXIgZT1wYXJzZUZsb2F0KHQpO3JldHVybiIlIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSplKTplfWVlLmJyaWdodGVyPWZ1bmN0aW9uKHQpe3Q9TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD90OjEpO3ZhciBlPXRoaXMucixyPXRoaXMuZyxuPXRoaXMuYixpPTMwO3JldHVybiBlfHxyfHxuPyhlJiZlPGkmJihlPWkpLHImJnI8aSYmKHI9aSksbiYmbjxpJiYobj1pKSxuZXcgUXQoTWF0aC5taW4oMjU1LGUvdCksTWF0aC5taW4oMjU1LHIvdCksTWF0aC5taW4oMjU1LG4vdCkpKTpuZXcgUXQoaSxpLGkpfSxlZS5kYXJrZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBRdCgodD1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP3Q6MSkpKnRoaXMucix0KnRoaXMuZyx0KnRoaXMuYil9LGVlLmhzbD1mdW5jdGlvbigpe3JldHVybiBpZSh0aGlzLnIsdGhpcy5nLHRoaXMuYil9LGVlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIiMiK3JlKHRoaXMucikrcmUodGhpcy5nKStyZSh0aGlzLmIpfTt2YXIgbGU9dC5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH0pO2Z1bmN0aW9uIGNlKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gdWUodCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksZmUoZSxyLHQsbil9fWZ1bmN0aW9uIGZlKGUscixpLGEpe3ZhciBvPXt9LHM9dC5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksbD17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciB0LGU9Yy5zdGF0dXM7aWYoIWUmJmZ1bmN0aW9uKHQpe3ZhciBlPXQucmVzcG9uc2VUeXBlO3JldHVybiBlJiYidGV4dCIhPT1lP3QucmVzcG9uc2U6dC5yZXNwb25zZVRleHR9KGMpfHxlPj0yMDAmJmU8MzAwfHwzMDQ9PT1lKXt0cnl7dD1pLmNhbGwobyxjKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBzLmVycm9yLmNhbGwobyx0KX1zLmxvYWQuY2FsbChvLHQpfWVsc2Ugcy5lcnJvci5jYWxsKG8sYyl9cmV0dXJuIHNlbGYuWERvbWFpblJlcXVlc3QmJiEoIndpdGhDcmVkZW50aWFscyJpbiBjKSYmL14oaHR0cChzKT86KT9cL1wvLy50ZXN0KGUpJiYoYz1uZXcgWERvbWFpblJlcXVlc3QpLCJvbmxvYWQiaW4gYz9jLm9ubG9hZD1jLm9uZXJyb3I9ZjpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT4zJiZmKCl9LGMub25wcm9ncmVzcz1mdW5jdGlvbihlKXt2YXIgcj10LmV2ZW50O3QuZXZlbnQ9ZTt0cnl7cy5wcm9ncmVzcy5jYWxsKG8sYyl9ZmluYWxseXt0LmV2ZW50PXJ9fSxvLmhlYWRlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0PSh0KyIiKS50b0xvd2VyQ2FzZSgpLGFyZ3VtZW50cy5sZW5ndGg8Mj9sW3RdOihudWxsPT1lP2RlbGV0ZSBsW3RdOmxbdF09ZSsiIixvKX0sby5taW1lVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1udWxsPT10P251bGw6dCsiIixvKTpyfSxvLnJlc3BvbnNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG8pOnV9LG8ucmVzcG9uc2U9ZnVuY3Rpb24odCl7cmV0dXJuIGk9dCxvfSxbImdldCIsInBvc3QiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtvW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIG8uc2VuZC5hcHBseShvLFt0XS5jb25jYXQobihhcmd1bWVudHMpKSl9fSkpLG8uc2VuZD1mdW5jdGlvbih0LG4saSl7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYoaT1uLG49bnVsbCksYy5vcGVuKHQsZSwhMCksbnVsbD09cnx8ImFjY2VwdCJpbiBsfHwobC5hY2NlcHQ9cisiLCovKiIpLGMuc2V0UmVxdWVzdEhlYWRlcilmb3IodmFyIGEgaW4gbCljLnNldFJlcXVlc3RIZWFkZXIoYSxsW2FdKTtyZXR1cm4gbnVsbCE9ciYmYy5vdmVycmlkZU1pbWVUeXBlJiZjLm92ZXJyaWRlTWltZVR5cGUociksbnVsbCE9dSYmKGMucmVzcG9uc2VUeXBlPXUpLG51bGwhPWkmJm8ub24oImVycm9yIixpKS5vbigibG9hZCIsKGZ1bmN0aW9uKHQpe2kobnVsbCx0KX0pKSxzLmJlZm9yZXNlbmQuY2FsbChvLGMpLGMuc2VuZChudWxsPT1uP251bGw6biksb30sby5hYm9ydD1mdW5jdGlvbigpe3JldHVybiBjLmFib3J0KCksb30sdC5yZWJpbmQobyxzLCJvbiIpLG51bGw9PWE/bzpvLmdldChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP2Z1bmN0aW9uKGUscil7dChudWxsPT1lP3I6bnVsbCl9OnR9KGEpKX1sZS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2xlLnNldCh0LCR0KGUpKX0pKSx0LmZ1bmN0b3I9Y2UsdC54aHI9dWUoQyksdC5kc3Y9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgUmVnRXhwKCdbIicrdCsiXG5dIiksbj10LmNoYXJDb2RlQXQoMCk7ZnVuY3Rpb24gaSh0LHIsbil7YXJndW1lbnRzLmxlbmd0aDwzJiYobj1yLHI9bnVsbCk7dmFyIGk9ZmUodCxlLG51bGw9PXI/YTpvKHIpLG4pO3JldHVybiBpLnJvdz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9pLnJlc3BvbnNlKG51bGw9PShyPXQpP2E6byh0KSk6cn0saX1mdW5jdGlvbiBhKHQpe3JldHVybiBpLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gaS5wYXJzZShlLnJlc3BvbnNlVGV4dCx0KX19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5tYXAobCkuam9pbih0KX1mdW5jdGlvbiBsKHQpe3JldHVybiByLnRlc3QodCk/JyInK3QucmVwbGFjZSgvXCIvZywnIiInKSsnIic6dH1yZXR1cm4gaS5wYXJzZT1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBpLnBhcnNlUm93cyh0LChmdW5jdGlvbih0LG4pe2lmKHIpcmV0dXJuIHIodCxuLTEpO3ZhciBpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj17fSxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXJbdFtpXV09ZVtpXTtyZXR1cm4gcn07cj1lP2Z1bmN0aW9uKHQscil7cmV0dXJuIGUoaSh0KSxyKX06aX0pKX0saS5wYXJzZVJvd3M9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9e30sbz17fSxzPVtdLGw9dC5sZW5ndGgsYz0wLHU9MDtmdW5jdGlvbiBmKCl7aWYoYz49bClyZXR1cm4gbztpZihpKXJldHVybiBpPSExLGE7dmFyIGU9YztpZigzND09PXQuY2hhckNvZGVBdChlKSl7Zm9yKHZhciByPWU7cisrPGw7KWlmKDM0PT09dC5jaGFyQ29kZUF0KHIpKXtpZigzNCE9PXQuY2hhckNvZGVBdChyKzEpKWJyZWFrOysrcn1yZXR1cm4gYz1yKzIsMTM9PT0ocz10LmNoYXJDb2RlQXQocisxKSk/KGk9ITAsMTA9PT10LmNoYXJDb2RlQXQocisyKSYmKytjKToxMD09PXMmJihpPSEwKSx0LnNsaWNlKGUrMSxyKS5yZXBsYWNlKC8iIi9nLCciJyl9Zm9yKDtjPGw7KXt2YXIgcyx1PTE7aWYoMTA9PT0ocz10LmNoYXJDb2RlQXQoYysrKSkpaT0hMDtlbHNlIGlmKDEzPT09cylpPSEwLDEwPT09dC5jaGFyQ29kZUF0KGMpJiYoKytjLCsrdSk7ZWxzZSBpZihzIT09biljb250aW51ZTtyZXR1cm4gdC5zbGljZShlLGMtdSl9cmV0dXJuIHQuc2xpY2UoZSl9Zm9yKDsocj1mKCkpIT09bzspe2Zvcih2YXIgaD1bXTtyIT09YSYmciE9PW87KWgucHVzaChyKSxyPWYoKTtlJiZudWxsPT0oaD1lKGgsdSsrKSl8fHMucHVzaChoKX1yZXR1cm4gc30saS5mb3JtYXQ9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlWzBdKSlyZXR1cm4gaS5mb3JtYXRSb3dzKGUpO3ZhciByPW5ldyBMLG49W107cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpci5oYXMoZSl8fG4ucHVzaChyLmFkZChlKSl9KSksW24ubWFwKGwpLmpvaW4odCldLmNvbmNhdChlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbChlW3RdKX0pKS5qb2luKHQpfSkpKS5qb2luKCJcbiIpfSxpLmZvcm1hdFJvd3M9ZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLmpvaW4oIlxuIil9LGl9LHQuY3N2PXQuZHN2KCIsIiwidGV4dC9jc3YiKSx0LnRzdj10LmRzdigiXHQiLCJ0ZXh0L3RhYi1zZXBhcmF0ZWQtdmFsdWVzIik7dmFyIGhlLHBlLGRlLG1lLGdlPXRoaXNbSSh0aGlzLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQodCwxNyl9O2Z1bmN0aW9uIHZlKHQsZSxyKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoO248MiYmKGU9MCksbjwzJiYocj1EYXRlLm5vdygpKTt2YXIgaT1yK2UsYT17Yzp0LHQ6aSxuOm51bGx9O3JldHVybiBwZT9wZS5uPWE6aGU9YSxwZT1hLGRlfHwobWU9Y2xlYXJUaW1lb3V0KG1lKSxkZT0xLGdlKHllKSksYX1mdW5jdGlvbiB5ZSgpe3ZhciB0PXhlKCksZT1iZSgpLXQ7ZT4yND8oaXNGaW5pdGUoZSkmJihjbGVhclRpbWVvdXQobWUpLG1lPXNldFRpbWVvdXQoeWUsZSkpLGRlPTApOihkZT0xLGdlKHllKSl9ZnVuY3Rpb24geGUoKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxlPWhlO2U7KXQ+PWUudCYmZS5jKHQtZS50KSYmKGUuYz1udWxsKSxlPWUubjtyZXR1cm4gdH1mdW5jdGlvbiBiZSgpe2Zvcih2YXIgdCxlPWhlLHI9MS8wO2U7KWUuYz8oZS50PHImJihyPWUudCksZT0odD1lKS5uKTplPXQ/dC5uPWUubjpoZT1lLm47cmV0dXJuIHBlPXQscn1mdW5jdGlvbiBfZSh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiB3ZSh0KXtyZXR1cm4gdFsxXX1mdW5jdGlvbiBUZSh0KXtmb3IodmFyIGUscixuLGk9dC5sZW5ndGgsYT1bMCwxXSxvPTIscz0yO3M8aTtzKyspe2Zvcig7bz4xJiYoZT10W2Fbby0yXV0scj10W2Fbby0xXV0sbj10W3NdLChyWzBdLWVbMF0pKihuWzFdLWVbMV0pLShyWzFdLWVbMV0pKihuWzBdLWVbMF0pPD0wKTspLS1vO2FbbysrXT1zfXJldHVybiBhLnNsaWNlKDAsbyl9ZnVuY3Rpb24ga2UodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19dC50aW1lcj1mdW5jdGlvbigpe3ZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC50aW1lci5mbHVzaD1mdW5jdGlvbigpe3hlKCksYmUoKX0sdC5yb3VuZD1mdW5jdGlvbih0LGUpe3JldHVybiBlP01hdGgucm91bmQodCooZT1NYXRoLnBvdygxMCxlKSkpL2U6TWF0aC5yb3VuZCh0KX0sdC5nZW9tPXt9LHQuZ2VvbS5odWxsPWZ1bmN0aW9uKHQpe3ZhciBlPV9lLHI9d2U7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbih0KTtmdW5jdGlvbiBuKHQpe2lmKHQubGVuZ3RoPDMpcmV0dXJuW107dmFyIG4saT1jZShlKSxhPWNlKHIpLG89dC5sZW5ndGgscz1bXSxsPVtdO2ZvcihuPTA7bjxvO24rKylzLnB1c2goWytpLmNhbGwodGhpcyx0W25dLG4pLCthLmNhbGwodGhpcyx0W25dLG4pLG5dKTtmb3Iocy5zb3J0KGtlKSxuPTA7bjxvO24rKylsLnB1c2goW3Nbbl1bMF0sLXNbbl1bMV1dKTt2YXIgYz1UZShzKSx1PVRlKGwpLGY9dVswXT09PWNbMF0saD11W3UubGVuZ3RoLTFdPT09Y1tjLmxlbmd0aC0xXSxwPVtdO2ZvcihuPWMubGVuZ3RoLTE7bj49MDstLW4pcC5wdXNoKHRbc1tjW25dXVsyXV0pO2ZvcihuPStmO248dS5sZW5ndGgtaDsrK24pcC5wdXNoKHRbc1t1W25dXVsyXV0pO3JldHVybiBwfXJldHVybiBuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxufSx0Lmdlb20ucG9seWdvbj1mdW5jdGlvbih0KXtyZXR1cm4gVSh0LEFlKSx0fTt2YXIgQWU9dC5nZW9tLnBvbHlnb24ucHJvdG90eXBlPVtdO2Z1bmN0aW9uIE1lKHQsZSxyKXtyZXR1cm4oclswXS1lWzBdKSoodFsxXS1lWzFdKTwoclsxXS1lWzFdKSoodFswXS1lWzBdKX1mdW5jdGlvbiBTZSh0LGUscixuKXt2YXIgaT10WzBdLGE9clswXSxvPWVbMF0taSxzPW5bMF0tYSxsPXRbMV0sYz1yWzFdLHU9ZVsxXS1sLGY9blsxXS1jLGg9KHMqKGwtYyktZiooaS1hKSkvKGYqby1zKnUpO3JldHVybltpK2gqbyxsK2gqdV19ZnVuY3Rpb24gRWUodCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIShlWzBdLXJbMF18fGVbMV0tclsxXSl9QWUuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPS0xLHI9dGhpcy5sZW5ndGgsbj10aGlzW3ItMV0saT0wOysrZTxyOyl0PW4sbj10aGlzW2VdLGkrPXRbMV0qblswXS10WzBdKm5bMV07cmV0dXJuLjUqaX0sQWUuY2VudHJvaWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPS0xLGk9dGhpcy5sZW5ndGgsYT0wLG89MCxzPXRoaXNbaS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KHQ9LTEvKDYqdGhpcy5hcmVhKCkpKTsrK248aTspZT1zLHM9dGhpc1tuXSxyPWVbMF0qc1sxXS1zWzBdKmVbMV0sYSs9KGVbMF0rc1swXSkqcixvKz0oZVsxXStzWzFdKSpyO3JldHVyblthKnQsbyp0XX0sQWUuY2xpcD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvLHM9RWUodCksbD0tMSxjPXRoaXMubGVuZ3RoLUVlKHRoaXMpLHU9dGhpc1tjLTFdOysrbDxjOyl7Zm9yKGU9dC5zbGljZSgpLHQubGVuZ3RoPTAsaT10aGlzW2xdLGE9ZVsobj1lLmxlbmd0aC1zKS0xXSxyPS0xOysrcjxuOylNZShvPWVbcl0sdSxpKT8oTWUoYSx1LGkpfHx0LnB1c2goU2UoYSxvLHUsaSkpLHQucHVzaChvKSk6TWUoYSx1LGkpJiZ0LnB1c2goU2UoYSxvLHUsaSkpLGE9bztzJiZ0LnB1c2godFswXSksdT1pfXJldHVybiB0fTt2YXIgTGUsQ2UsUGUsSWUsT2UsemU9W10sRGU9W107ZnVuY3Rpb24gUmUoKXtlcih0aGlzKSx0aGlzLmVkZ2U9dGhpcy5zaXRlPXRoaXMuY2lyY2xlPW51bGx9ZnVuY3Rpb24gRmUodCl7dmFyIGU9emUucG9wKCl8fG5ldyBSZTtyZXR1cm4gZS5zaXRlPXQsZX1mdW5jdGlvbiBCZSh0KXtXZSh0KSxQZS5yZW1vdmUodCksemUucHVzaCh0KSxlcih0KX1mdW5jdGlvbiBOZSh0KXt2YXIgZT10LmNpcmNsZSxyPWUueCxuPWUuY3ksaT17eDpyLHk6bn0sYT10LlAsbz10Lk4scz1bdF07QmUodCk7Zm9yKHZhciBsPWE7bC5jaXJjbGUmJnkoci1sLmNpcmNsZS54KTxrdCYmeShuLWwuY2lyY2xlLmN5KTxrdDspYT1sLlAscy51bnNoaWZ0KGwpLEJlKGwpLGw9YTtzLnVuc2hpZnQobCksV2UobCk7Zm9yKHZhciBjPW87Yy5jaXJjbGUmJnkoci1jLmNpcmNsZS54KTxrdCYmeShuLWMuY2lyY2xlLmN5KTxrdDspbz1jLk4scy5wdXNoKGMpLEJlKGMpLGM9bztzLnB1c2goYyksV2UoYyk7dmFyIHUsZj1zLmxlbmd0aDtmb3IodT0xO3U8ZjsrK3UpYz1zW3VdLGw9c1t1LTFdLFFlKGMuZWRnZSxsLnNpdGUsYy5zaXRlLGkpO2w9c1swXSwoYz1zW2YtMV0pLmVkZ2U9SmUobC5zaXRlLGMuc2l0ZSxudWxsLGkpLFllKGwpLFllKGMpfWZ1bmN0aW9uIGplKHQpe2Zvcih2YXIgZSxyLG4saSxhPXQueCxvPXQueSxzPVBlLl87czspaWYoKG49VWUocyxvKS1hKT5rdClzPXMuTDtlbHNle2lmKCEoKGk9YS1WZShzLG8pKT5rdCkpe24+LWt0PyhlPXMuUCxyPXMpOmk+LWt0PyhlPXMscj1zLk4pOmU9cj1zO2JyZWFrfWlmKCFzLlIpe2U9czticmVha31zPXMuUn12YXIgbD1GZSh0KTtpZihQZS5pbnNlcnQoZSxsKSxlfHxyKXtpZihlPT09cilyZXR1cm4gV2UoZSkscj1GZShlLnNpdGUpLFBlLmluc2VydChsLHIpLGwuZWRnZT1yLmVkZ2U9SmUoZS5zaXRlLGwuc2l0ZSksWWUoZSksdm9pZCBZZShyKTtpZihyKXtXZShlKSxXZShyKTt2YXIgYz1lLnNpdGUsdT1jLngsZj1jLnksaD10LngtdSxwPXQueS1mLGQ9ci5zaXRlLG09ZC54LXUsZz1kLnktZix2PTIqKGgqZy1wKm0pLHk9aCpoK3AqcCx4PW0qbStnKmcsYj17eDooZyp5LXAqeCkvdit1LHk6KGgqeC1tKnkpL3YrZn07UWUoci5lZGdlLGMsZCxiKSxsLmVkZ2U9SmUoYyx0LG51bGwsYiksci5lZGdlPUplKHQsZCxudWxsLGIpLFllKGUpLFllKHIpfWVsc2UgbC5lZGdlPUplKGUuc2l0ZSxsLnNpdGUpfX1mdW5jdGlvbiBVZSh0LGUpe3ZhciByPXQuc2l0ZSxuPXIueCxpPXIueSxhPWktZTtpZighYSlyZXR1cm4gbjt2YXIgbz10LlA7aWYoIW8pcmV0dXJuLTEvMDt2YXIgcz0ocj1vLnNpdGUpLngsbD1yLnksYz1sLWU7aWYoIWMpcmV0dXJuIHM7dmFyIHU9cy1uLGY9MS9hLTEvYyxoPXUvYztyZXR1cm4gZj8oLWgrTWF0aC5zcXJ0KGgqaC0yKmYqKHUqdS8oLTIqYyktbCtjLzIraS1hLzIpKSkvZituOihuK3MpLzJ9ZnVuY3Rpb24gVmUodCxlKXt2YXIgcj10Lk47aWYocilyZXR1cm4gVWUocixlKTt2YXIgbj10LnNpdGU7cmV0dXJuIG4ueT09PWU/bi54OjEvMH1mdW5jdGlvbiBIZSh0KXt0aGlzLnNpdGU9dCx0aGlzLmVkZ2VzPVtdfWZ1bmN0aW9uIHFlKHQsZSl7cmV0dXJuIGUuYW5nbGUtdC5hbmdsZX1mdW5jdGlvbiBHZSgpe2VyKHRoaXMpLHRoaXMueD10aGlzLnk9dGhpcy5hcmM9dGhpcy5zaXRlPXRoaXMuY3k9bnVsbH1mdW5jdGlvbiBZZSh0KXt2YXIgZT10LlAscj10Lk47aWYoZSYmcil7dmFyIG49ZS5zaXRlLGk9dC5zaXRlLGE9ci5zaXRlO2lmKG4hPT1hKXt2YXIgbz1pLngscz1pLnksbD1uLngtbyxjPW4ueS1zLHU9YS54LW8sZj0yKihsKihnPWEueS1zKS1jKnUpO2lmKCEoZj49LTFlLTEyKSl7dmFyIGg9bCpsK2MqYyxwPXUqdStnKmcsZD0oZypoLWMqcCkvZixtPShsKnAtdSpoKS9mLGc9bStzLHY9RGUucG9wKCl8fG5ldyBHZTt2LmFyYz10LHYuc2l0ZT1pLHYueD1kK28sdi55PWcrTWF0aC5zcXJ0KGQqZCttKm0pLHYuY3k9Zyx0LmNpcmNsZT12O2Zvcih2YXIgeT1udWxsLHg9T2UuXzt4OylpZih2Lnk8eC55fHx2Lnk9PT14LnkmJnYueDw9eC54KXtpZigheC5MKXt5PXguUDticmVha314PXguTH1lbHNle2lmKCF4LlIpe3k9eDticmVha314PXguUn1PZS5pbnNlcnQoeSx2KSx5fHwoSWU9dil9fX19ZnVuY3Rpb24gV2UodCl7dmFyIGU9dC5jaXJjbGU7ZSYmKGUuUHx8KEllPWUuTiksT2UucmVtb3ZlKGUpLERlLnB1c2goZSksZXIoZSksdC5jaXJjbGU9bnVsbCl9ZnVuY3Rpb24gWGUodCxlKXt2YXIgcj10LmI7aWYocilyZXR1cm4hMDt2YXIgbixpLGE9dC5hLG89ZVswXVswXSxzPWVbMV1bMF0sbD1lWzBdWzFdLGM9ZVsxXVsxXSx1PXQubCxmPXQucixoPXUueCxwPXUueSxkPWYueCxtPWYueSxnPShoK2QpLzIsdj0ocCttKS8yO2lmKG09PT1wKXtpZihnPG98fGc+PXMpcmV0dXJuO2lmKGg+ZCl7aWYoYSl7aWYoYS55Pj1jKXJldHVybn1lbHNlIGE9e3g6Zyx5Omx9O3I9e3g6Zyx5OmN9fWVsc2V7aWYoYSl7aWYoYS55PGwpcmV0dXJufWVsc2UgYT17eDpnLHk6Y307cj17eDpnLHk6bH19fWVsc2UgaWYoaT12LShuPShoLWQpLyhtLXApKSpnLG48LTF8fG4+MSlpZihoPmQpe2lmKGEpe2lmKGEueT49YylyZXR1cm59ZWxzZSBhPXt4OihsLWkpL24seTpsfTtyPXt4OihjLWkpL24seTpjfX1lbHNle2lmKGEpe2lmKGEueTxsKXJldHVybn1lbHNlIGE9e3g6KGMtaSkvbix5OmN9O3I9e3g6KGwtaSkvbix5Omx9fWVsc2UgaWYocDxtKXtpZihhKXtpZihhLng+PXMpcmV0dXJufWVsc2UgYT17eDpvLHk6bipvK2l9O3I9e3g6cyx5Om4qcytpfX1lbHNle2lmKGEpe2lmKGEueDxvKXJldHVybn1lbHNlIGE9e3g6cyx5Om4qcytpfTtyPXt4Om8seTpuKm8raX19cmV0dXJuIHQuYT1hLHQuYj1yLCEwfWZ1bmN0aW9uIFplKHQsZSl7dGhpcy5sPXQsdGhpcy5yPWUsdGhpcy5hPXRoaXMuYj1udWxsfWZ1bmN0aW9uIEplKHQsZSxyLG4pe3ZhciBpPW5ldyBaZSh0LGUpO3JldHVybiBMZS5wdXNoKGkpLHImJlFlKGksdCxlLHIpLG4mJlFlKGksZSx0LG4pLENlW3QuaV0uZWRnZXMucHVzaChuZXcgJGUoaSx0LGUpKSxDZVtlLmldLmVkZ2VzLnB1c2gobmV3ICRlKGksZSx0KSksaX1mdW5jdGlvbiBLZSh0LGUscil7dmFyIG49bmV3IFplKHQsbnVsbCk7cmV0dXJuIG4uYT1lLG4uYj1yLExlLnB1c2gobiksbn1mdW5jdGlvbiBRZSh0LGUscixuKXt0LmF8fHQuYj90Lmw9PT1yP3QuYj1uOnQuYT1uOih0LmE9bix0Lmw9ZSx0LnI9cil9ZnVuY3Rpb24gJGUodCxlLHIpe3ZhciBuPXQuYSxpPXQuYjt0aGlzLmVkZ2U9dCx0aGlzLnNpdGU9ZSx0aGlzLmFuZ2xlPXI/TWF0aC5hdGFuMihyLnktZS55LHIueC1lLngpOnQubD09PWU/TWF0aC5hdGFuMihpLngtbi54LG4ueS1pLnkpOk1hdGguYXRhbjIobi54LWkueCxpLnktbi55KX1mdW5jdGlvbiB0cigpe3RoaXMuXz1udWxsfWZ1bmN0aW9uIGVyKHQpe3QuVT10LkM9dC5MPXQuUj10LlA9dC5OPW51bGx9ZnVuY3Rpb24gcnIodCxlKXt2YXIgcj1lLG49ZS5SLGk9ci5VO2k/aS5MPT09cj9pLkw9bjppLlI9bjp0Ll89bixuLlU9aSxyLlU9bixyLlI9bi5MLHIuUiYmKHIuUi5VPXIpLG4uTD1yfWZ1bmN0aW9uIG5yKHQsZSl7dmFyIHI9ZSxuPWUuTCxpPXIuVTtpP2kuTD09PXI/aS5MPW46aS5SPW46dC5fPW4sbi5VPWksci5VPW4sci5MPW4uUixyLkwmJihyLkwuVT1yKSxuLlI9cn1mdW5jdGlvbiBpcih0KXtmb3IoO3QuTDspdD10Lkw7cmV0dXJuIHR9ZnVuY3Rpb24gYXIodCxlKXt2YXIgcixuLGksYT10LnNvcnQob3IpLnBvcCgpO2ZvcihMZT1bXSxDZT1uZXcgQXJyYXkodC5sZW5ndGgpLFBlPW5ldyB0cixPZT1uZXcgdHI7OylpZihpPUllLGEmJighaXx8YS55PGkueXx8YS55PT09aS55JiZhLng8aS54KSlhLng9PT1yJiZhLnk9PT1ufHwoQ2VbYS5pXT1uZXcgSGUoYSksamUoYSkscj1hLngsbj1hLnkpLGE9dC5wb3AoKTtlbHNle2lmKCFpKWJyZWFrO05lKGkuYXJjKX1lJiYoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLGEsbz1MZSxzPShyPXRbMF1bMF0sbj10WzBdWzFdLGk9dFsxXVswXSxhPXRbMV1bMV0sZnVuY3Rpb24odCl7dmFyIGUsbz10LmEscz10LmIsbD1vLngsYz1vLnksdT0wLGY9MSxoPXMueC1sLHA9cy55LWM7aWYoZT1yLWwsaHx8IShlPjApKXtpZihlLz1oLGg8MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfWVsc2UgaWYoaD4wKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9aWYoZT1pLWwsaHx8IShlPDApKXtpZihlLz1oLGg8MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWVsc2UgaWYoaD4wKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9aWYoZT1uLWMscHx8IShlPjApKXtpZihlLz1wLHA8MCl7aWYoZTx1KXJldHVybjtlPGYmJihmPWUpfWVsc2UgaWYocD4wKXtpZihlPmYpcmV0dXJuO2U+dSYmKHU9ZSl9aWYoZT1hLWMscHx8IShlPDApKXtpZihlLz1wLHA8MCl7aWYoZT5mKXJldHVybjtlPnUmJih1PWUpfWVsc2UgaWYocD4wKXtpZihlPHUpcmV0dXJuO2U8ZiYmKGY9ZSl9cmV0dXJuIHU+MCYmKHQuYT17eDpsK3UqaCx5OmMrdSpwfSksZjwxJiYodC5iPXt4OmwrZipoLHk6YytmKnB9KSx0fX19fX0pLGw9by5sZW5ndGg7bC0tOykoIVhlKGU9b1tsXSx0KXx8IXMoZSl8fHkoZS5hLngtZS5iLngpPGt0JiZ5KGUuYS55LWUuYi55KTxrdCkmJihlLmE9ZS5iPW51bGwsby5zcGxpY2UobCwxKSl9KGUpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxmPXRbMF1bMF0saD10WzFdWzBdLHA9dFswXVsxXSxkPXRbMV1bMV0sbT1DZSxnPW0ubGVuZ3RoO2ctLTspaWYoKGE9bVtnXSkmJmEucHJlcGFyZSgpKWZvcihsPShzPWEuZWRnZXMpLmxlbmd0aCxvPTA7bzxsOyluPSh1PXNbb10uZW5kKCkpLngsaT11LnksZT0oYz1zWysrbyVsXS5zdGFydCgpKS54LHI9Yy55LCh5KG4tZSk+a3R8fHkoaS1yKT5rdCkmJihzLnNwbGljZShvLDAsbmV3ICRlKEtlKGEuc2l0ZSx1LHkobi1mKTxrdCYmZC1pPmt0P3t4OmYseTp5KGUtZik8a3Q/cjpkfTp5KGktZCk8a3QmJmgtbj5rdD97eDp5KHItZCk8a3Q/ZTpoLHk6ZH06eShuLWgpPGt0JiZpLXA+a3Q/e3g6aCx5OnkoZS1oKTxrdD9yOnB9OnkoaS1wKTxrdCYmbi1mPmt0P3t4Onkoci1wKTxrdD9lOmYseTpwfTpudWxsKSxhLnNpdGUsbnVsbCkpLCsrbCl9KGUpKTt2YXIgbz17Y2VsbHM6Q2UsZWRnZXM6TGV9O3JldHVybiBQZT1PZT1MZT1DZT1udWxsLG99ZnVuY3Rpb24gb3IodCxlKXtyZXR1cm4gZS55LXQueXx8ZS54LXQueH1IZS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlPXRoaXMuZWRnZXMscj1lLmxlbmd0aDtyLS07KSh0PWVbcl0uZWRnZSkuYiYmdC5hfHxlLnNwbGljZShyLDEpO3JldHVybiBlLnNvcnQocWUpLGUubGVuZ3RofSwkZS5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSx0ci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbih0LGUpe3ZhciByLG4saTtpZih0KXtpZihlLlA9dCxlLk49dC5OLHQuTiYmKHQuTi5QPWUpLHQuTj1lLHQuUil7Zm9yKHQ9dC5SO3QuTDspdD10Lkw7dC5MPWV9ZWxzZSB0LlI9ZTtyPXR9ZWxzZSB0aGlzLl8/KHQ9aXIodGhpcy5fKSxlLlA9bnVsbCxlLk49dCx0LlA9dC5MPWUscj10KTooZS5QPWUuTj1udWxsLHRoaXMuXz1lLHI9bnVsbCk7Zm9yKGUuTD1lLlI9bnVsbCxlLlU9cixlLkM9ITAsdD1lO3ImJnIuQzspcj09PShuPXIuVSkuTD8oaT1uLlIpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLlImJihycih0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxucih0aGlzLG4pKTooaT1uLkwpJiZpLkM/KHIuQz1pLkM9ITEsbi5DPSEwLHQ9bik6KHQ9PT1yLkwmJihucih0aGlzLHIpLHI9KHQ9cikuVSksci5DPSExLG4uQz0hMCxycih0aGlzLG4pKSxyPXQuVTt0aGlzLl8uQz0hMX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3QuTiYmKHQuTi5QPXQuUCksdC5QJiYodC5QLk49dC5OKSx0Lk49dC5QPW51bGw7dmFyIGUscixuLGk9dC5VLGE9dC5MLG89dC5SO2lmKHI9YT9vP2lyKG8pOmE6byxpP2kuTD09PXQ/aS5MPXI6aS5SPXI6dGhpcy5fPXIsYSYmbz8obj1yLkMsci5DPXQuQyxyLkw9YSxhLlU9cixyIT09bz8oaT1yLlUsci5VPXQuVSx0PXIuUixpLkw9dCxyLlI9byxvLlU9cik6KHIuVT1pLGk9cix0PXIuUikpOihuPXQuQyx0PXIpLHQmJih0LlU9aSksIW4paWYodCYmdC5DKXQuQz0hMTtlbHNle2Rve2lmKHQ9PT10aGlzLl8pYnJlYWs7aWYodD09PWkuTCl7aWYoKGU9aS5SKS5DJiYoZS5DPSExLGkuQz0hMCxycih0aGlzLGkpLGU9aS5SKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLlImJmUuUi5DfHwoZS5MLkM9ITEsZS5DPSEwLG5yKHRoaXMsZSksZT1pLlIpLGUuQz1pLkMsaS5DPWUuUi5DPSExLHJyKHRoaXMsaSksdD10aGlzLl87YnJlYWt9fWVsc2UgaWYoKGU9aS5MKS5DJiYoZS5DPSExLGkuQz0hMCxucih0aGlzLGkpLGU9aS5MKSxlLkwmJmUuTC5DfHxlLlImJmUuUi5DKXtlLkwmJmUuTC5DfHwoZS5SLkM9ITEsZS5DPSEwLHJyKHRoaXMsZSksZT1pLkwpLGUuQz1pLkMsaS5DPWUuTC5DPSExLG5yKHRoaXMsaSksdD10aGlzLl87YnJlYWt9ZS5DPSEwLHQ9aSxpPWkuVX13aGlsZSghdC5DKTt0JiYodC5DPSExKX19fSx0Lmdlb20udm9yb25vaT1mdW5jdGlvbih0KXt2YXIgZT1fZSxyPXdlLG49ZSxpPXIsYT1zcjtpZih0KXJldHVybiBvKHQpO2Z1bmN0aW9uIG8odCl7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPWFbMF1bMF0sbj1hWzBdWzFdLGk9YVsxXVswXSxvPWFbMV1bMV07cmV0dXJuIGFyKHModCksYSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24oYSxzKXt2YXIgbD1hLmVkZ2VzLGM9YS5zaXRlOyhlW3NdPWwubGVuZ3RoP2wubWFwKChmdW5jdGlvbih0KXt2YXIgZT10LnN0YXJ0KCk7cmV0dXJuW2UueCxlLnldfSkpOmMueD49ciYmYy54PD1pJiZjLnk+PW4mJmMueTw9bz9bW3Isb10sW2ksb10sW2ksbl0sW3Isbl1dOltdKS5wb2ludD10W3NdfSkpLGV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3g6TWF0aC5yb3VuZChuKHQsZSkva3QpKmt0LHk6TWF0aC5yb3VuZChpKHQsZSkva3QpKmt0LGk6ZX19KSl9cmV0dXJuIG8ubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyKHModCkpLmVkZ2VzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubCYmdC5yfSkpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3NvdXJjZTp0W2UubC5pXSx0YXJnZXQ6dFtlLnIuaV19fSkpfSxvLnRyaWFuZ2xlcz1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gYXIocyh0KSkuY2VsbHMuZm9yRWFjaCgoZnVuY3Rpb24ocixuKXtmb3IodmFyIGksYSxvLHMsbD1yLnNpdGUsYz1yLmVkZ2VzLnNvcnQocWUpLHU9LTEsZj1jLmxlbmd0aCxoPWNbZi0xXS5lZGdlLHA9aC5sPT09bD9oLnI6aC5sOysrdTxmOyloLGk9cCxwPShoPWNbdV0uZWRnZSkubD09PWw/aC5yOmgubCxuPGkuaSYmbjxwLmkmJihvPWkscz1wLCgoYT1sKS54LXMueCkqKG8ueS1hLnkpLShhLngtby54KSoocy55LWEueSk8MCkmJmUucHVzaChbdFtuXSx0W2kuaV0sdFtwLmldXSl9KSksZX0sby54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPWNlKGU9dCksbyk6ZX0sby55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHI9dCksbyk6cn0sby5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/c3I6dCxvKTphPT09c3I/bnVsbDphfSxvLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/by5jbGlwRXh0ZW50KHQmJltbMCwwXSx0XSk6YT09PXNyP251bGw6YSYmYVsxXX0sb307dmFyIHNyPVtbLTFlNiwtMWU2XSxbMWU2LDFlNl1dO2Z1bmN0aW9uIGxyKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gY3IodCl7cmV0dXJuIHQueX1mdW5jdGlvbiB1cih0LGUscixuLGksYSl7aWYoIXQoZSxyLG4saSxhKSl7dmFyIG89LjUqKHIraSkscz0uNSoobithKSxsPWUubm9kZXM7bFswXSYmdXIodCxsWzBdLHIsbixvLHMpLGxbMV0mJnVyKHQsbFsxXSxvLG4saSxzKSxsWzJdJiZ1cih0LGxbMl0scixzLG8sYSksbFszXSYmdXIodCxsWzNdLG8scyxpLGEpfX1mdW5jdGlvbiBmcih0LGUscixuLGksYSxvKXt2YXIgcyxsPTEvMDtyZXR1cm4gZnVuY3Rpb24gdChjLHUsZixoLHApe2lmKCEodT5hfHxmPm98fGg8bnx8cDxpKSl7aWYoZD1jLnBvaW50KXt2YXIgZCxtPWUtYy54LGc9ci1jLnksdj1tKm0rZypnO2lmKHY8bCl7dmFyIHk9TWF0aC5zcXJ0KGw9dik7bj1lLXksaT1yLXksYT1lK3ksbz1yK3kscz1kfX1mb3IodmFyIHg9Yy5ub2RlcyxiPS41Kih1K2gpLF89LjUqKGYrcCksdz0ocj49Xyk8PDF8ZT49YixUPXcrNDt3PFQ7Kyt3KWlmKGM9eFszJnddKXN3aXRjaCgzJncpe2Nhc2UgMDp0KGMsdSxmLGIsXyk7YnJlYWs7Y2FzZSAxOnQoYyxiLGYsaCxfKTticmVhaztjYXNlIDI6dChjLHUsXyxiLHApO2JyZWFrO2Nhc2UgMzp0KGMsYixfLGgscCl9fX0odCxuLGksYSxvKSxzfWZ1bmN0aW9uIGhyKGUscil7ZT10LnJnYihlKSxyPXQucmdiKHIpO3ZhciBuPWUucixpPWUuZyxhPWUuYixvPXIuci1uLHM9ci5nLWksbD1yLmItYTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIiMiK3JlKE1hdGgucm91bmQobitvKnQpKStyZShNYXRoLnJvdW5kKGkrcyp0KSkrcmUoTWF0aC5yb3VuZChhK2wqdCkpfX1mdW5jdGlvbiBwcih0LGUpe3ZhciByLG49e30saT17fTtmb3IociBpbiB0KXIgaW4gZT9uW3JdPXlyKHRbcl0sZVtyXSk6aVtyXT10W3JdO2ZvcihyIGluIGUpciBpbiB0fHwoaVtyXT1lW3JdKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHIgaW4gbilpW3JdPW5bcl0odCk7cmV0dXJuIGl9fWZ1bmN0aW9uIGRyKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gdCooMS1yKStlKnJ9fWZ1bmN0aW9uIG1yKHQsZSl7dmFyIHIsbixpLGE9Z3IubGFzdEluZGV4PXZyLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1nci5leGVjKHQpKSYmKG49dnIuZXhlYyhlKSk7KShpPW4uaW5kZXgpPmEmJihpPWUuc2xpY2UoYSxpKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLChyPXJbMF0pPT09KG49blswXSk/c1tvXT9zW29dKz1uOnNbKytvXT1uOihzWysrb109bnVsbCxsLnB1c2goe2k6byx4OmRyKHIsbil9KSksYT12ci5sYXN0SW5kZXg7cmV0dXJuIGE8ZS5sZW5ndGgmJihpPWUuc2xpY2UoYSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSxzLmxlbmd0aDwyP2xbMF0/KGU9bFswXS54LGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gZX06KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9dC5nZW9tLmRlbGF1bmF5PWZ1bmN0aW9uKGUpe3JldHVybiB0Lmdlb20udm9yb25vaSgpLnRyaWFuZ2xlcyhlKX0sdC5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz1fZSxzPXdlO2lmKGE9YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbz1scixzPWNyLDM9PT1hJiYoaT1yLG49ZSxyPWU9MCksbCh0KTtmdW5jdGlvbiBsKHQpe3ZhciBsLGMsdSxmLGgscCxkLG0sZyx2PWNlKG8pLHg9Y2Uocyk7aWYobnVsbCE9ZSlwPWUsZD1yLG09bixnPWk7ZWxzZSBpZihtPWc9LShwPWQ9MS8wKSxjPVtdLHU9W10saD10Lmxlbmd0aCxhKWZvcihmPTA7ZjxoOysrZikobD10W2ZdKS54PHAmJihwPWwueCksbC55PGQmJihkPWwueSksbC54Pm0mJihtPWwueCksbC55PmcmJihnPWwueSksYy5wdXNoKGwueCksdS5wdXNoKGwueSk7ZWxzZSBmb3IoZj0wO2Y8aDsrK2Ype3ZhciBiPSt2KGw9dFtmXSxmKSxfPSt4KGwsZik7YjxwJiYocD1iKSxfPGQmJihkPV8pLGI+bSYmKG09YiksXz5nJiYoZz1fKSxjLnB1c2goYiksdS5wdXNoKF8pfXZhciB3PW0tcCxUPWctZDtmdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8scyl7aWYoIWlzTmFOKHIpJiYhaXNOYU4obikpaWYodC5sZWFmKXt2YXIgbD10LngsYz10Lnk7aWYobnVsbCE9bClpZih5KGwtcikreShjLW4pPC4wMSlBKHQsZSxyLG4saSxhLG8scyk7ZWxzZXt2YXIgdT10LnBvaW50O3QueD10Lnk9dC5wb2ludD1udWxsLEEodCx1LGwsYyxpLGEsbyxzKSxBKHQsZSxyLG4saSxhLG8scyl9ZWxzZSB0Lng9cix0Lnk9bix0LnBvaW50PWV9ZWxzZSBBKHQsZSxyLG4saSxhLG8scyl9ZnVuY3Rpb24gQSh0LGUscixuLGksYSxvLHMpe3ZhciBsPS41KihpK28pLGM9LjUqKGErcyksdT1yPj1sLGY9bj49YyxoPWY8PDF8dTt0LmxlYWY9ITEsdT9pPWw6bz1sLGY/YT1jOnM9YyxrKHQ9dC5ub2Rlc1toXXx8KHQubm9kZXNbaF09e2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfSksZSxyLG4saSxhLG8scyl9dz5UP2c9ZCt3Om09cCtUO3ZhciBNPXtsZWFmOiEwLG5vZGVzOltdLHBvaW50Om51bGwseDpudWxsLHk6bnVsbCxhZGQ6ZnVuY3Rpb24odCl7ayhNLHQsK3YodCwrK2YpLCt4KHQsZikscCxkLG0sZyl9LHZpc2l0OmZ1bmN0aW9uKHQpe3VyKHQsTSxwLGQsbSxnKX0sZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gZnIoTSx0WzBdLHRbMV0scCxkLG0sZyl9fTtpZihmPS0xLG51bGw9PWUpe2Zvcig7KytmPGg7KWsoTSx0W2ZdLGNbZl0sdVtmXSxwLGQsbSxnKTstLWZ9ZWxzZSB0LmZvckVhY2goTS5hZGQpO3JldHVybiBjPXU9dD1sPW51bGwsTX1yZXR1cm4gbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbCk6b30sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsbCk6c30sbC5leHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/ZT1yPW49aT1udWxsOihlPSt0WzBdWzBdLHI9K3RbMF1bMV0sbj0rdFsxXVswXSxpPSt0WzFdWzFdKSxsKTpudWxsPT1lP251bGw6W1tlLHJdLFtuLGldXX0sbC5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P2U9cj1uPWk9bnVsbDooZT1yPTAsbj0rdFswXSxpPSt0WzFdKSxsKTpudWxsPT1lP251bGw6W24tZSxpLXJdfSxsfSx0LmludGVycG9sYXRlUmdiPWhyLHQuaW50ZXJwb2xhdGVPYmplY3Q9cHIsdC5pbnRlcnBvbGF0ZU51bWJlcj1kcix0LmludGVycG9sYXRlU3RyaW5nPW1yO3ZhciBncj0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csdnI9bmV3IFJlZ0V4cChnci5zb3VyY2UsImciKTtmdW5jdGlvbiB5cihlLHIpe2Zvcih2YXIgbixpPXQuaW50ZXJwb2xhdG9ycy5sZW5ndGg7LS1pPj0wJiYhKG49dC5pbnRlcnBvbGF0b3JzW2ldKGUscikpOyk7cmV0dXJuIG59ZnVuY3Rpb24geHIodCxlKXt2YXIgcixuPVtdLGk9W10sYT10Lmxlbmd0aCxvPWUubGVuZ3RoLHM9TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpO2ZvcihyPTA7cjxzOysrciluLnB1c2goeXIodFtyXSxlW3JdKSk7Zm9yKDtyPGE7KytyKWlbcl09dFtyXTtmb3IoO3I8bzsrK3IpaVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3Iocj0wO3I8czsrK3IpaVtyXT1uW3JdKHQpO3JldHVybiBpfX10LmludGVycG9sYXRlPXlyLHQuaW50ZXJwb2xhdG9ycz1bZnVuY3Rpb24odCxlKXt2YXIgcj10eXBlb2YgZTtyZXR1cm4oInN0cmluZyI9PT1yP2xlLmhhcyhlLnRvTG93ZXJDYXNlKCkpfHwvXigjfHJnYlwofGhzbFwoKS9pLnRlc3QoZSk/aHI6bXI6ZSBpbnN0YW5jZW9mIEZ0P2hyOkFycmF5LmlzQXJyYXkoZSk/eHI6Im9iamVjdCI9PT1yJiZpc05hTihlKT9wcjpkcikodCxlKX1dLHQuaW50ZXJwb2xhdGVBcnJheT14cjt2YXIgYnI9ZnVuY3Rpb24oKXtyZXR1cm4gQ30sX3I9dC5tYXAoe2xpbmVhcjpicixwb2x5OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KX19LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gTXJ9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIFNyfSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gTHJ9LGV4cDpmdW5jdGlvbigpe3JldHVybiBDcn0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIFByfSxlbGFzdGljOmZ1bmN0aW9uKHQsZSl7dmFyIHI7YXJndW1lbnRzLmxlbmd0aDwyJiYoZT0uNDUpO2FyZ3VtZW50cy5sZW5ndGg/cj1lL010Kk1hdGguYXNpbigxL3QpOih0PTEscj1lLzQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gMSt0Kk1hdGgucG93KDIsLTEwKm4pKk1hdGguc2luKChuLXIpKk10L2UpfX0sYmFjazpmdW5jdGlvbih0KXt0fHwodD0xLjcwMTU4KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooKHQrMSkqZS10KX19LGJvdW5jZTpmdW5jdGlvbigpe3JldHVybiBJcn19KSx3cj10Lm1hcCh7aW46QyxvdXQ6a3IsImluLW91dCI6QXIsIm91dC1pbiI6ZnVuY3Rpb24odCl7cmV0dXJuIEFyKGtyKHQpKX19KTtmdW5jdGlvbiBUcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDplPj0xPzE6dChlKX19ZnVuY3Rpb24ga3IodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiAxLXQoMS1lKX19ZnVuY3Rpb24gQXIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi41KihlPC41P3QoMiplKToyLXQoMi0yKmUpKX19ZnVuY3Rpb24gTXIodCl7cmV0dXJuIHQqdH1mdW5jdGlvbiBTcih0KXtyZXR1cm4gdCp0KnR9ZnVuY3Rpb24gRXIodCl7aWYodDw9MClyZXR1cm4gMDtpZih0Pj0xKXJldHVybiAxO3ZhciBlPXQqdCxyPWUqdDtyZXR1cm4gNCoodDwuNT9yOjMqKHQtZSkrci0uNzUpfWZ1bmN0aW9uIExyKHQpe3JldHVybiAxLU1hdGguY29zKHQqRXQpfWZ1bmN0aW9uIENyKHQpe3JldHVybiBNYXRoLnBvdygyLDEwKih0LTEpKX1mdW5jdGlvbiBQcih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfWZ1bmN0aW9uIElyKHQpe3JldHVybiB0PDEvMi43NT83LjU2MjUqdCp0OnQ8Mi8yLjc1PzcuNTYyNSoodC09MS41LzIuNzUpKnQrLjc1OnQ8Mi41LzIuNzU/Ny41NjI1Kih0LT0yLjI1LzIuNzUpKnQrLjkzNzU6Ny41NjI1Kih0LT0yLjYyNS8yLjc1KSp0Ky45ODQzNzV9ZnVuY3Rpb24gT3IodCxlKXtyZXR1cm4gZS09dCxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0K2Uqcil9fWZ1bmN0aW9uIHpyKHQpe3ZhciBlLHIsbixpPVt0LmEsdC5iXSxhPVt0LmMsdC5kXSxvPVJyKGkpLHM9RHIoaSxhKSxsPVJyKCgoZT1hKVswXSs9KG49LXMpKihyPWkpWzBdLGVbMV0rPW4qclsxXSxlKSl8fDA7aVswXSphWzFdPGFbMF0qaVsxXSYmKGlbMF0qPS0xLGlbMV0qPS0xLG8qPS0xLHMqPS0xKSx0aGlzLnJvdGF0ZT0obz9NYXRoLmF0YW4yKGlbMV0saVswXSk6TWF0aC5hdGFuMigtYVswXSxhWzFdKSkqQ3QsdGhpcy50cmFuc2xhdGU9W3QuZSx0LmZdLHRoaXMuc2NhbGU9W28sbF0sdGhpcy5za2V3PWw/TWF0aC5hdGFuMihzLGwpKkN0OjB9ZnVuY3Rpb24gRHIodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXX1mdW5jdGlvbiBScih0KXt2YXIgZT1NYXRoLnNxcnQoRHIodCx0KSk7cmV0dXJuIGUmJih0WzBdLz1lLHRbMV0vPWUpLGV9dC5lYXNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5kZXhPZigiLSIpLG49ZT49MD90LnNsaWNlKDAsZSk6dCxpPWU+PTA/dC5zbGljZShlKzEpOiJpbiI7cmV0dXJuIG49X3IuZ2V0KG4pfHxicixUcigoaT13ci5nZXQoaSl8fEMpKG4uYXBwbHkobnVsbCxyLmNhbGwoYXJndW1lbnRzLDEpKSkpfSx0LmludGVycG9sYXRlSGNsPWZ1bmN0aW9uKGUscil7ZT10LmhjbChlKSxyPXQuaGNsKHIpO3ZhciBuPWUuaCxpPWUuYyxhPWUubCxvPXIuaC1uLHM9ci5jLWksbD1yLmwtYTtpc05hTihzKSYmKHM9MCxpPWlzTmFOKGkpP3IuYzppKTtpc05hTihvKT8obz0wLG49aXNOYU4obik/ci5oOm4pOm8+MTgwP28tPTM2MDpvPC0xODAmJihvKz0zNjApO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gSHQobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZUhzbD1mdW5jdGlvbihlLHIpe2U9dC5oc2woZSkscj10LmhzbChyKTt2YXIgbj1lLmgsaT1lLnMsYT1lLmwsbz1yLmgtbixzPXIucy1pLGw9ci5sLWE7aXNOYU4ocykmJihzPTAsaT1pc05hTihpKT9yLnM6aSk7aXNOYU4obyk/KG89MCxuPWlzTmFOKG4pP3IuaDpuKTpvPjE4MD9vLT0zNjA6bzwtMTgwJiYobys9MzYwKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGp0KG4rbyp0LGkrcyp0LGErbCp0KSsiIn19LHQuaW50ZXJwb2xhdGVMYWI9ZnVuY3Rpb24oZSxyKXtlPXQubGFiKGUpLHI9dC5sYWIocik7dmFyIG49ZS5sLGk9ZS5hLGE9ZS5iLG89ci5sLW4scz1yLmEtaSxsPXIuYi1hO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gV3QobitvKnQsaStzKnQsYStsKnQpKyIifX0sdC5pbnRlcnBvbGF0ZVJvdW5kPU9yLHQudHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciByPWkuY3JlYXRlRWxlbWVudE5TKHQubnMucHJlZml4LnN2ZywiZyIpO3JldHVybih0LnRyYW5zZm9ybT1mdW5jdGlvbih0KXtpZihudWxsIT10KXtyLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIix0KTt2YXIgZT1yLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCl9cmV0dXJuIG5ldyB6cihlP2UubWF0cml4OkZyKX0pKGUpfSx6ci5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy50cmFuc2xhdGUrIilyb3RhdGUoIit0aGlzLnJvdGF0ZSsiKXNrZXdYKCIrdGhpcy5za2V3KyIpc2NhbGUoIit0aGlzLnNjYWxlKyIpIn07dmFyIEZyPXthOjEsYjowLGM6MCxkOjEsZTowLGY6MH07ZnVuY3Rpb24gQnIodCl7cmV0dXJuIHQubGVuZ3RoP3QucG9wKCkrIiwiOiIifWZ1bmN0aW9uIE5yKGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gZT10LnRyYW5zZm9ybShlKSxyPXQudHJhbnNmb3JtKHIpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKCJ0cmFuc2xhdGUoIixudWxsLCIsIixudWxsLCIpIik7bi5wdXNoKHtpOmktNCx4OmRyKHRbMF0sZVswXSl9LHtpOmktMix4OmRyKHRbMV0sZVsxXSl9KX1lbHNlKGVbMF18fGVbMV0pJiZyLnB1c2goInRyYW5zbGF0ZSgiK2UrIikiKX0oZS50cmFuc2xhdGUsci50cmFuc2xhdGUsbixpKSxmdW5jdGlvbih0LGUscixuKXt0IT09ZT8odC1lPjE4MD9lKz0zNjA6ZS10PjE4MCYmKHQrPTM2MCksbi5wdXNoKHtpOnIucHVzaChCcihyKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpkcih0LGUpfSkpOmUmJnIucHVzaChCcihyKSsicm90YXRlKCIrZSsiKSIpfShlLnJvdGF0ZSxyLnJvdGF0ZSxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe3QhPT1lP24ucHVzaCh7aTpyLnB1c2goQnIocikrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpkcih0LGUpfSk6ZSYmci5wdXNoKEJyKHIpKyJza2V3WCgiK2UrIikiKX0oZS5za2V3LHIuc2tldyxuLGkpLGZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXSl7dmFyIGk9ci5wdXNoKEJyKHIpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtuLnB1c2goe2k6aS00LHg6ZHIodFswXSxlWzBdKX0se2k6aS0yLHg6ZHIodFsxXSxlWzFdKX0pfWVsc2UgMT09PWVbMF0mJjE9PT1lWzFdfHxyLnB1c2goQnIocikrInNjYWxlKCIrZSsiKSIpfShlLnNjYWxlLHIuc2NhbGUsbixpKSxlPXI9bnVsbCxmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxhPWkubGVuZ3RoOysrcjxhOyluWyhlPWlbcl0pLmldPWUueCh0KTtyZXR1cm4gbi5qb2luKCIiKX19ZnVuY3Rpb24ganIodCxlKXtyZXR1cm4gZT0oZS09dD0rdCl8fDEvZSxmdW5jdGlvbihyKXtyZXR1cm4oci10KS9lfX1mdW5jdGlvbiBVcih0LGUpe3JldHVybiBlPShlLT10PSt0KXx8MS9lLGZ1bmN0aW9uKHIpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsKHItdCkvZSkpfX1mdW5jdGlvbiBWcih0KXtmb3IodmFyIGU9dC5zb3VyY2Uscj10LnRhcmdldCxuPWZ1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIHQ7dmFyIHI9SHIodCksbj1IcihlKSxpPXIucG9wKCksYT1uLnBvcCgpLG89bnVsbDtmb3IoO2k9PT1hOylvPWksaT1yLnBvcCgpLGE9bi5wb3AoKTtyZXR1cm4gb30oZSxyKSxpPVtlXTtlIT09bjspZT1lLnBhcmVudCxpLnB1c2goZSk7Zm9yKHZhciBhPWkubGVuZ3RoO3IhPT1uOylpLnNwbGljZShhLDAscikscj1yLnBhcmVudDtyZXR1cm4gaX1mdW5jdGlvbiBIcih0KXtmb3IodmFyIGU9W10scj10LnBhcmVudDtudWxsIT1yOyllLnB1c2godCksdD1yLHI9ci5wYXJlbnQ7cmV0dXJuIGUucHVzaCh0KSxlfWZ1bmN0aW9uIHFyKHQpe3QuZml4ZWR8PTJ9ZnVuY3Rpb24gR3IodCl7dC5maXhlZCY9LTd9ZnVuY3Rpb24gWXIodCl7dC5maXhlZHw9NCx0LnB4PXQueCx0LnB5PXQueX1mdW5jdGlvbiBXcih0KXt0LmZpeGVkJj0tNX10LmludGVycG9sYXRlVHJhbnNmb3JtPU5yLHQubGF5b3V0PXt9LHQubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0tMSxuPXQubGVuZ3RoOysrcjxuOyllLnB1c2goVnIodFtyXSkpO3JldHVybiBlfX0sdC5sYXlvdXQuY2hvcmQ9ZnVuY3Rpb24oKXt2YXIgZSxyLG4saSxhLG8scyxsPXt9LGM9MDtmdW5jdGlvbiB1KCl7dmFyIGwsdSxoLHAsZCxtPXt9LGc9W10sdj10LnJhbmdlKGkpLHk9W107Zm9yKGU9W10scj1bXSxsPTAscD0tMTsrK3A8aTspe2Zvcih1PTAsZD0tMTsrK2Q8aTspdSs9bltwXVtkXTtnLnB1c2godSkseS5wdXNoKHQucmFuZ2UoaSkpLGwrPXV9Zm9yKGEmJnYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gYShnW3RdLGdbZV0pfSkpLG8mJnkuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0LnNvcnQoKGZ1bmN0aW9uKHQscil7cmV0dXJuIG8obltlXVt0XSxuW2VdW3JdKX0pKX0pKSxsPShNdC1jKmkpL2wsdT0wLHA9LTE7KytwPGk7KXtmb3IoaD11LGQ9LTE7KytkPGk7KXt2YXIgeD12W3BdLGI9eVt4XVtkXSxfPW5beF1bYl0sdz11LFQ9dSs9XypsO21beCsiLSIrYl09e2luZGV4Ongsc3ViaW5kZXg6YixzdGFydEFuZ2xlOncsZW5kQW5nbGU6VCx2YWx1ZTpffX1yW3hdPXtpbmRleDp4LHN0YXJ0QW5nbGU6aCxlbmRBbmdsZTp1LHZhbHVlOmdbeF19LHUrPWN9Zm9yKHA9LTE7KytwPGk7KWZvcihkPXAtMTsrK2Q8aTspe3ZhciBrPW1bcCsiLSIrZF0sQT1tW2QrIi0iK3BdOyhrLnZhbHVlfHxBLnZhbHVlKSYmZS5wdXNoKGsudmFsdWU8QS52YWx1ZT97c291cmNlOkEsdGFyZ2V0Omt9Ontzb3VyY2U6ayx0YXJnZXQ6QX0pfXMmJmYoKX1mdW5jdGlvbiBmKCl7ZS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBzKCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMiwoZS5zb3VyY2UudmFsdWUrZS50YXJnZXQudmFsdWUpLzIpfSkpfXJldHVybiBsLm1hdHJpeD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0obj10KSYmbi5sZW5ndGgsZT1yPW51bGwsbCk6bn0sbC5wYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPXQsZT1yPW51bGwsbCk6Y30sbC5zb3J0R3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZT1yPW51bGwsbCk6YX0sbC5zb3J0U3ViZ3JvdXBzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsZT1udWxsLGwpOm99LGwuc29ydENob3Jkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz10LGUmJmYoKSxsKTpzfSxsLmNob3Jkcz1mdW5jdGlvbigpe3JldHVybiBlfHx1KCksZX0sbC5ncm91cHM9ZnVuY3Rpb24oKXtyZXR1cm4gcnx8dSgpLHJ9LGx9LHQubGF5b3V0LmZvcmNlPWZ1bmN0aW9uKCl7dmFyIGUscixuLGksYSxvLHM9e30sbD10LmRpc3BhdGNoKCJzdGFydCIsInRpY2siLCJlbmQiKSxjPVsxLDFdLHU9LjksZj1YcixoPVpyLHA9LTMwLGQ9SnIsbT0uMSxnPS42NCx2PVtdLHk9W107ZnVuY3Rpb24geCh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4saSl7aWYoZS5wb2ludCE9PXQpe3ZhciBhPWUuY3gtdC54LG89ZS5jeS10Lnkscz1pLXIsbD1hKmErbypvO2lmKHMqcy9nPGwpe2lmKGw8ZCl7dmFyIGM9ZS5jaGFyZ2UvbDt0LnB4LT1hKmMsdC5weS09bypjfXJldHVybiEwfWlmKGUucG9pbnQmJmwmJmw8ZCl7Yz1lLnBvaW50Q2hhcmdlL2w7dC5weC09YSpjLHQucHktPW8qY319cmV0dXJuIWUuY2hhcmdlfX1mdW5jdGlvbiBiKGUpe2UucHg9dC5ldmVudC54LGUucHk9dC5ldmVudC55LHMucmVzdW1lKCl9cmV0dXJuIHMudGljaz1mdW5jdGlvbigpe2lmKChuKj0uOTkpPC4wMDUpcmV0dXJuIGU9bnVsbCxsLmVuZCh7dHlwZToiZW5kIixhbHBoYTpuPTB9KSwhMDt2YXIgcixzLGYsaCxkLGcsYixfLHcsVD12Lmxlbmd0aCxrPXkubGVuZ3RoO2ZvcihzPTA7czxrOysrcyloPShmPXlbc10pLnNvdXJjZSwoZz0oXz0oZD1mLnRhcmdldCkueC1oLngpKl8rKHc9ZC55LWgueSkqdykmJihfKj1nPW4qYVtzXSooKGc9TWF0aC5zcXJ0KGcpKS1pW3NdKS9nLHcqPWcsZC54LT1fKihiPWgud2VpZ2h0K2Qud2VpZ2h0P2gud2VpZ2h0LyhoLndlaWdodCtkLndlaWdodCk6LjUpLGQueS09dypiLGgueCs9XyooYj0xLWIpLGgueSs9dypiKTtpZigoYj1uKm0pJiYoXz1jWzBdLzIsdz1jWzFdLzIscz0tMSxiKSlmb3IoOysrczxUOykoZj12W3NdKS54Kz0oXy1mLngpKmIsZi55Kz0ody1mLnkpKmI7aWYocClmb3IoIWZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPTAsYT0wO2lmKGUuY2hhcmdlPTAsIWUubGVhZilmb3IodmFyIG8scz1lLm5vZGVzLGw9cy5sZW5ndGgsYz0tMTsrK2M8bDspbnVsbCE9KG89c1tjXSkmJih0KG8scixuKSxlLmNoYXJnZSs9by5jaGFyZ2UsaSs9by5jaGFyZ2Uqby5jeCxhKz1vLmNoYXJnZSpvLmN5KTtpZihlLnBvaW50KXtlLmxlYWZ8fChlLnBvaW50LngrPU1hdGgucmFuZG9tKCktLjUsZS5wb2ludC55Kz1NYXRoLnJhbmRvbSgpLS41KTt2YXIgdT1yKm5bZS5wb2ludC5pbmRleF07ZS5jaGFyZ2UrPWUucG9pbnRDaGFyZ2U9dSxpKz11KmUucG9pbnQueCxhKz11KmUucG9pbnQueX1lLmN4PWkvZS5jaGFyZ2UsZS5jeT1hL2UuY2hhcmdlfShyPXQuZ2VvbS5xdWFkdHJlZSh2KSxuLG8pLHM9LTE7KytzPFQ7KShmPXZbc10pLmZpeGVkfHxyLnZpc2l0KHgoZikpO2ZvcihzPS0xOysrczxUOykoZj12W3NdKS5maXhlZD8oZi54PWYucHgsZi55PWYucHkpOihmLngtPShmLnB4LShmLnB4PWYueCkpKnUsZi55LT0oZi5weS0oZi5weT1mLnkpKSp1KTtsLnRpY2soe3R5cGU6InRpY2siLGFscGhhOm59KX0scy5ub2Rlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odj10LHMpOnZ9LHMubGlua3M9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9dCxzKTp5fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxzKTpjfSxzLmxpbmtEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LHMpOmZ9LHMuZGlzdGFuY2U9cy5saW5rRGlzdGFuY2Uscy5saW5rU3RyZW5ndGg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDordCxzKTpofSxzLmZyaWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PSt0LHMpOnV9LHMuY2hhcmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6K3Qscyk6cH0scy5jaGFyZ2VEaXN0YW5jZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD10KnQscyk6TWF0aC5zcXJ0KGQpfSxzLmdyYXZpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3Qscyk6bX0scy50aGV0YT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz10KnQscyk6TWF0aC5zcXJ0KGcpfSxzLmFscGhhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSt0LG4/dD4wP249dDooZS5jPW51bGwsZS50PU5hTixlPW51bGwsbC5lbmQoe3R5cGU6ImVuZCIsYWxwaGE6bj0wfSkpOnQ+MCYmKGwuc3RhcnQoe3R5cGU6InN0YXJ0IixhbHBoYTpuPXR9KSxlPXZlKHMudGljaykpLHMpOm59LHMuc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj12Lmxlbmd0aCxsPXkubGVuZ3RoLHU9Y1swXSxkPWNbMV07Zm9yKHQ9MDt0PG47Kyt0KShyPXZbdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO3Q8bDsrK3QpIm51bWJlciI9PXR5cGVvZihyPXlbdF0pLnNvdXJjZSYmKHIuc291cmNlPXZbci5zb3VyY2VdKSwibnVtYmVyIj09dHlwZW9mIHIudGFyZ2V0JiYoci50YXJnZXQ9dltyLnRhcmdldF0pLCsrci5zb3VyY2Uud2VpZ2h0LCsrci50YXJnZXQud2VpZ2h0O2Zvcih0PTA7dDxuOysrdClyPXZbdF0saXNOYU4oci54KSYmKHIueD1tKCJ4Iix1KSksaXNOYU4oci55KSYmKHIueT1tKCJ5IixkKSksaXNOYU4oci5weCkmJihyLnB4PXIueCksaXNOYU4oci5weSkmJihyLnB5PXIueSk7aWYoaT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgZilmb3IodD0wO3Q8bDsrK3QpaVt0XT0rZi5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClpW3RdPWY7aWYoYT1bXSwiZnVuY3Rpb24iPT10eXBlb2YgaClmb3IodD0wO3Q8bDsrK3QpYVt0XT0raC5jYWxsKHRoaXMseVt0XSx0KTtlbHNlIGZvcih0PTA7dDxsOysrdClhW3RdPWg7aWYobz1bXSwiZnVuY3Rpb24iPT10eXBlb2YgcClmb3IodD0wO3Q8bjsrK3Qpb1t0XT0rcC5jYWxsKHRoaXMsdlt0XSx0KTtlbHNlIGZvcih0PTA7dDxuOysrdClvW3RdPXA7ZnVuY3Rpb24gbShyLGkpe2lmKCFlKXtmb3IoZT1uZXcgQXJyYXkobiksYz0wO2M8bjsrK2MpZVtjXT1bXTtmb3IoYz0wO2M8bDsrK2Mpe3ZhciBhPXlbY107ZVthLnNvdXJjZS5pbmRleF0ucHVzaChhLnRhcmdldCksZVthLnRhcmdldC5pbmRleF0ucHVzaChhLnNvdXJjZSl9fWZvcih2YXIgbyxzPWVbdF0sYz0tMSx1PXMubGVuZ3RoOysrYzx1OylpZighaXNOYU4obz1zW2NdW3JdKSlyZXR1cm4gbztyZXR1cm4gTWF0aC5yYW5kb20oKSppfXJldHVybiBzLnJlc3VtZSgpfSxzLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBzLmFscGhhKC4xKX0scy5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHMuYWxwaGEoMCl9LHMuZHJhZz1mdW5jdGlvbigpe2lmKHJ8fChyPXQuYmVoYXZpb3IuZHJhZygpLm9yaWdpbihDKS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixxcikub24oImRyYWcuZm9yY2UiLGIpLm9uKCJkcmFnZW5kLmZvcmNlIixHcikpLCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiByO3RoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsWXIpLm9uKCJtb3VzZW91dC5mb3JjZSIsV3IpLmNhbGwocil9LHQucmViaW5kKHMsbCwib24iKX07dmFyIFhyPTIwLFpyPTEsSnI9MS8wO2Z1bmN0aW9uIEtyKGUscil7cmV0dXJuIHQucmViaW5kKGUsciwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxlLm5vZGVzPWUsZS5saW5rcz1ubixlfWZ1bmN0aW9uIFFyKHQsZSl7Zm9yKHZhciByPVt0XTtudWxsIT0odD1yLnBvcCgpKTspaWYoZSh0KSwoaT10LmNoaWxkcmVuKSYmKG49aS5sZW5ndGgpKWZvcih2YXIgbixpOy0tbj49MDspci5wdXNoKGlbbl0pfWZ1bmN0aW9uICRyKHQsZSl7Zm9yKHZhciByPVt0XSxuPVtdO251bGwhPSh0PXIucG9wKCkpOylpZihuLnB1c2godCksKGE9dC5jaGlsZHJlbikmJihpPWEubGVuZ3RoKSlmb3IodmFyIGksYSxvPS0xOysrbzxpOylyLnB1c2goYVtvXSk7Zm9yKDtudWxsIT0odD1uLnBvcCgpKTspZSh0KX1mdW5jdGlvbiB0bih0KXtyZXR1cm4gdC5jaGlsZHJlbn1mdW5jdGlvbiBlbih0KXtyZXR1cm4gdC52YWx1ZX1mdW5jdGlvbiBybih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24gbm4oZSl7cmV0dXJuIHQubWVyZ2UoZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LmNoaWxkcmVufHxbXSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm57c291cmNlOnQsdGFyZ2V0OmV9fSkpfSkpKX10LmxheW91dC5oaWVyYXJjaHk9ZnVuY3Rpb24oKXt2YXIgdD1ybixlPXRuLHI9ZW47ZnVuY3Rpb24gbihpKXt2YXIgYSxvPVtpXSxzPVtdO2ZvcihpLmRlcHRoPTA7bnVsbCE9KGE9by5wb3AoKSk7KWlmKHMucHVzaChhKSwoYz1lLmNhbGwobixhLGEuZGVwdGgpKSYmKGw9Yy5sZW5ndGgpKXtmb3IodmFyIGwsYyx1Oy0tbD49MDspby5wdXNoKHU9Y1tsXSksdS5wYXJlbnQ9YSx1LmRlcHRoPWEuZGVwdGgrMTtyJiYoYS52YWx1ZT0wKSxhLmNoaWxkcmVuPWN9ZWxzZSByJiYoYS52YWx1ZT0rci5jYWxsKG4sYSxhLmRlcHRoKXx8MCksZGVsZXRlIGEuY2hpbGRyZW47cmV0dXJuICRyKGksKGZ1bmN0aW9uKGUpe3ZhciBuLGk7dCYmKG49ZS5jaGlsZHJlbikmJm4uc29ydCh0KSxyJiYoaT1lLnBhcmVudCkmJihpLnZhbHVlKz1lLnZhbHVlKX0pKSxzfXJldHVybiBuLnNvcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLmNoaWxkcmVuPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG4ucmV2YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gciYmKFFyKHQsKGZ1bmN0aW9uKHQpe3QuY2hpbGRyZW4mJih0LnZhbHVlPTApfSkpLCRyKHQsKGZ1bmN0aW9uKHQpe3ZhciBlO3QuY2hpbGRyZW58fCh0LnZhbHVlPStyLmNhbGwobix0LHQuZGVwdGgpfHwwKSwoZT10LnBhcmVudCkmJihlLnZhbHVlKz10LnZhbHVlKX0pKSksdH0sbn0sdC5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkscj1bMSwxXTtmdW5jdGlvbiBuKHQsbil7dmFyIGk9ZS5jYWxsKHRoaXMsdCxuKTtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yLGUueT1lLmRlcHRoKmksZS5keD1uLGUuZHk9aSxhJiYobz1hLmxlbmd0aCkpe3ZhciBvLHMsbCxjPS0xO2ZvcihuPWUudmFsdWU/bi9lLnZhbHVlOjA7KytjPG87KXQocz1hW2NdLHIsbD1zLnZhbHVlKm4saSkscis9bH19KGlbMF0sMCxyWzBdLHJbMV0vZnVuY3Rpb24gdChlKXt2YXIgcj1lLmNoaWxkcmVuLG49MDtpZihyJiYoaT1yLmxlbmd0aCkpZm9yKHZhciBpLGE9LTE7KythPGk7KW49TWF0aC5tYXgobix0KHJbYV0pKTtyZXR1cm4gMStufShpWzBdKSksaX1yZXR1cm4gbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sS3IobixlKX0sdC5sYXlvdXQucGllPWZ1bmN0aW9uKCl7dmFyIGU9TnVtYmVyLHI9YW4sbj0wLGk9TXQsYT0wO2Z1bmN0aW9uIG8ocyl7dmFyIGwsYz1zLmxlbmd0aCx1PXMubWFwKChmdW5jdGlvbih0LHIpe3JldHVybitlLmNhbGwobyx0LHIpfSkpLGY9KygiZnVuY3Rpb24iPT10eXBlb2Ygbj9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpuKSxoPSgiZnVuY3Rpb24iPT10eXBlb2YgaT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTppKS1mLHA9TWF0aC5taW4oTWF0aC5hYnMoaCkvYywrKCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuYXBwbHkodGhpcyxhcmd1bWVudHMpOmEpKSxkPXAqKGg8MD8tMToxKSxtPXQuc3VtKHUpLGc9bT8oaC1jKmQpL206MCx2PXQucmFuZ2UoYykseT1bXTtyZXR1cm4gbnVsbCE9ciYmdi5zb3J0KHI9PT1hbj9mdW5jdGlvbih0LGUpe3JldHVybiB1W2VdLXVbdF19OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIoc1t0XSxzW2VdKX0pLHYuZm9yRWFjaCgoZnVuY3Rpb24odCl7eVt0XT17ZGF0YTpzW3RdLHZhbHVlOmw9dVt0XSxzdGFydEFuZ2xlOmYsZW5kQW5nbGU6Zis9bCpnK2QscGFkQW5nbGU6cH19KSkseX1yZXR1cm4gby52YWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG8pOmV9LG8uc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG8pOnJ9LG8uc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LG8pOm59LG8uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxvKTppfSxvLnBhZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsbyk6YX0sb307dmFyIGFuPXt9O2Z1bmN0aW9uIG9uKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gc24odCl7cmV0dXJuIHQueX1mdW5jdGlvbiBsbih0LGUscil7dC55MD1lLHQueT1yfXQubGF5b3V0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIGU9QyxyPWZuLG49aG4saT1sbixhPW9uLG89c247ZnVuY3Rpb24gcyhsLGMpe2lmKCEocD1sLmxlbmd0aCkpcmV0dXJuIGw7dmFyIHU9bC5tYXAoKGZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbChzLHQscil9KSksZj11Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0LGUpe3JldHVyblthLmNhbGwocyx0LGUpLG8uY2FsbChzLHQsZSldfSkpfSkpLGg9ci5jYWxsKHMsZixjKTt1PXQucGVybXV0ZSh1LGgpLGY9dC5wZXJtdXRlKGYsaCk7dmFyIHAsZCxtLGcsdj1uLmNhbGwocyxmLGMpLHk9dVswXS5sZW5ndGg7Zm9yKG09MDttPHk7KyttKWZvcihpLmNhbGwocyx1WzBdW21dLGc9dlttXSxmWzBdW21dWzFdKSxkPTE7ZDxwOysrZClpLmNhbGwocyx1W2RdW21dLGcrPWZbZC0xXVttXVsxXSxmW2RdW21dWzFdKTtyZXR1cm4gbH1yZXR1cm4gcy52YWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxzKTplfSxzLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y24uZ2V0KHQpfHxmbixzKTpyfSxzLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnVuLmdldCh0KXx8aG4scyk6bn0scy54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQscyk6YX0scy55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQscyk6b30scy5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxzKTppfSxzfTt2YXIgY249dC5tYXAoeyJpbnNpZGUtb3V0IjpmdW5jdGlvbihlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1lLm1hcChwbiksbz1lLm1hcChkbikscz10LnJhbmdlKGkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFbdF0tYVtlXX0pKSxsPTAsYz0wLHU9W10sZj1bXTtmb3Iocj0wO3I8aTsrK3Ipbj1zW3JdLGw8Yz8obCs9b1tuXSx1LnB1c2gobikpOihjKz1vW25dLGYucHVzaChuKSk7cmV0dXJuIGYucmV2ZXJzZSgpLmNvbmNhdCh1KX0scmV2ZXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdC5yYW5nZShlLmxlbmd0aCkucmV2ZXJzZSgpfSxkZWZhdWx0OmZufSksdW49dC5tYXAoe3NpbGhvdWV0dGU6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT10WzBdLmxlbmd0aCxvPVtdLHM9MCxsPVtdO2ZvcihyPTA7cjxhOysrcil7Zm9yKGU9MCxuPTA7ZTxpO2UrKyluKz10W2VdW3JdWzFdO24+cyYmKHM9biksby5wdXNoKG4pfWZvcihyPTA7cjxhOysrcilsW3JdPShzLW9bcl0pLzI7cmV0dXJuIGx9LHdpZ2dsZTpmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGMsdT10Lmxlbmd0aCxmPXRbMF0saD1mLmxlbmd0aCxwPVtdO2ZvcihwWzBdPWw9Yz0wLHI9MTtyPGg7KytyKXtmb3IoZT0wLGk9MDtlPHU7KytlKWkrPXRbZV1bcl1bMV07Zm9yKGU9MCxhPTAscz1mW3JdWzBdLWZbci0xXVswXTtlPHU7KytlKXtmb3Iobj0wLG89KHRbZV1bcl1bMV0tdFtlXVtyLTFdWzFdKS8oMipzKTtuPGU7KytuKW8rPSh0W25dW3JdWzFdLXRbbl1bci0xXVsxXSkvczthKz1vKnRbZV1bcl1bMV19cFtyXT1sLT1pP2EvaSpzOjAsbDxjJiYoYz1sKX1mb3Iocj0wO3I8aDsrK3IpcFtyXS09YztyZXR1cm4gcH0sZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXQubGVuZ3RoLGE9dFswXS5sZW5ndGgsbz0xL2kscz1bXTtmb3Iocj0wO3I8YTsrK3Ipe2ZvcihlPTAsbj0wO2U8aTtlKyspbis9dFtlXVtyXVsxXTtpZihuKWZvcihlPTA7ZTxpO2UrKyl0W2VdW3JdWzFdLz1uO2Vsc2UgZm9yKGU9MDtlPGk7ZSsrKXRbZV1bcl1bMV09b31mb3Iocj0wO3I8YTsrK3Ipc1tyXT0wO3JldHVybiBzfSx6ZXJvOmhufSk7ZnVuY3Rpb24gZm4oZSl7cmV0dXJuIHQucmFuZ2UoZS5sZW5ndGgpfWZ1bmN0aW9uIGhuKHQpe2Zvcih2YXIgZT0tMSxyPXRbMF0ubGVuZ3RoLG49W107KytlPHI7KW5bZV09MDtyZXR1cm4gbn1mdW5jdGlvbiBwbih0KXtmb3IodmFyIGUscj0xLG49MCxpPXRbMF1bMV0sYT10Lmxlbmd0aDtyPGE7KytyKShlPXRbcl1bMV0pPmkmJihuPXIsaT1lKTtyZXR1cm4gbn1mdW5jdGlvbiBkbih0KXtyZXR1cm4gdC5yZWR1Y2UobW4sMCl9ZnVuY3Rpb24gbW4odCxlKXtyZXR1cm4gdCtlWzFdfWZ1bmN0aW9uIGduKHQsZSl7cmV0dXJuIHZuKHQsTWF0aC5jZWlsKE1hdGgubG9nKGUubGVuZ3RoKS9NYXRoLkxOMisxKSl9ZnVuY3Rpb24gdm4odCxlKXtmb3IodmFyIHI9LTEsbj0rdFswXSxpPSh0WzFdLW4pL2UsYT1bXTsrK3I8PWU7KWFbcl09aSpyK247cmV0dXJuIGF9ZnVuY3Rpb24geW4oZSl7cmV0dXJuW3QubWluKGUpLHQubWF4KGUpXX1mdW5jdGlvbiB4bih0LGUpe3JldHVybiB0LnZhbHVlLWUudmFsdWV9ZnVuY3Rpb24gYm4odCxlKXt2YXIgcj10Ll9wYWNrX25leHQ7dC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXQsZS5fcGFja19uZXh0PXIsci5fcGFja19wcmV2PWV9ZnVuY3Rpb24gX24odCxlKXt0Ll9wYWNrX25leHQ9ZSxlLl9wYWNrX3ByZXY9dH1mdW5jdGlvbiB3bih0LGUpe3ZhciByPWUueC10Lngsbj1lLnktdC55LGk9dC5yK2UucjtyZXR1cm4uOTk5KmkqaT5yKnIrbipufWZ1bmN0aW9uIFRuKHQpe2lmKChlPXQuY2hpbGRyZW4pJiYobD1lLmxlbmd0aCkpe3ZhciBlLHIsbixpLGEsbyxzLGwsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMDtpZihlLmZvckVhY2goa24pLChyPWVbMF0pLng9LXIucixyLnk9MCx4KHIpLGw+MSYmKChuPWVbMV0pLng9bi5yLG4ueT0wLHgobiksbD4yKSlmb3IoTW4ocixuLGk9ZVsyXSkseChpKSxibihyLGkpLHIuX3BhY2tfcHJldj1pLGJuKGksbiksbj1yLl9wYWNrX25leHQsYT0zO2E8bDthKyspe01uKHIsbixpPWVbYV0pO3ZhciBwPTAsZD0xLG09MTtmb3Iobz1uLl9wYWNrX25leHQ7byE9PW47bz1vLl9wYWNrX25leHQsZCsrKWlmKHduKG8saSkpe3A9MTticmVha31pZigxPT1wKWZvcihzPXIuX3BhY2tfcHJldjtzIT09by5fcGFja19wcmV2JiYhd24ocyxpKTtzPXMuX3BhY2tfcHJldixtKyspO3A/KGQ8bXx8ZD09bSYmbi5yPHIucj9fbihyLG49byk6X24ocj1zLG4pLGEtLSk6KGJuKHIsaSksbj1pLHgoaSkpfXZhciBnPShjK3UpLzIsdj0oZitoKS8yLHk9MDtmb3IoYT0wO2E8bDthKyspKGk9ZVthXSkueC09ZyxpLnktPXYseT1NYXRoLm1heCh5LGkucitNYXRoLnNxcnQoaS54KmkueCtpLnkqaS55KSk7dC5yPXksZS5mb3JFYWNoKEFuKX1mdW5jdGlvbiB4KHQpe2M9TWF0aC5taW4odC54LXQucixjKSx1PU1hdGgubWF4KHQueCt0LnIsdSksZj1NYXRoLm1pbih0LnktdC5yLGYpLGg9TWF0aC5tYXgodC55K3QucixoKX19ZnVuY3Rpb24ga24odCl7dC5fcGFja19uZXh0PXQuX3BhY2tfcHJldj10fWZ1bmN0aW9uIEFuKHQpe2RlbGV0ZSB0Ll9wYWNrX25leHQsZGVsZXRlIHQuX3BhY2tfcHJldn1mdW5jdGlvbiBNbih0LGUscil7dmFyIG49dC5yK3IucixpPWUueC10LngsYT1lLnktdC55O2lmKG4mJihpfHxhKSl7dmFyIG89ZS5yK3IucixzPWkqaSthKmEsbD0uNSsoKG4qPW4pLShvKj1vKSkvKDIqcyksYz1NYXRoLnNxcnQoTWF0aC5tYXgoMCwyKm8qKG4rcyktKG4tPXMpKm4tbypvKSkvKDIqcyk7ci54PXQueCtsKmkrYyphLHIueT10LnkrbCphLWMqaX1lbHNlIHIueD10LngrbixyLnk9dC55fWZ1bmN0aW9uIFNuKHQsZSl7cmV0dXJuIHQucGFyZW50PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gRW4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZS5sZW5ndGg/ZVswXTp0LnR9ZnVuY3Rpb24gTG4odCl7dmFyIGUscj10LmNoaWxkcmVuO3JldHVybihlPXIubGVuZ3RoKT9yW2UtMV06dC50fWZ1bmN0aW9uIENuKHQsZSxyKXt2YXIgbj1yLyhlLmktdC5pKTtlLmMtPW4sZS5zKz1yLHQuYys9bixlLnorPXIsZS5tKz1yfWZ1bmN0aW9uIFBuKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIEluKHQpe3JldHVybnt4OnQueCx5OnQueSxkeDp0LmR4LGR5OnQuZHl9fWZ1bmN0aW9uIE9uKHQsZSl7dmFyIHI9dC54K2VbM10sbj10LnkrZVswXSxpPXQuZHgtZVsxXS1lWzNdLGE9dC5keS1lWzBdLWVbMl07cmV0dXJuIGk8MCYmKHIrPWkvMixpPTApLGE8MCYmKG4rPWEvMixhPTApLHt4OnIseTpuLGR4OmksZHk6YX19ZnVuY3Rpb24gem4odCl7dmFyIGU9dFswXSxyPXRbdC5sZW5ndGgtMV07cmV0dXJuIGU8cj9bZSxyXTpbcixlXX1mdW5jdGlvbiBEbih0KXtyZXR1cm4gdC5yYW5nZUV4dGVudD90LnJhbmdlRXh0ZW50KCk6em4odC5yYW5nZSgpKX1mdW5jdGlvbiBSbih0LGUscixuKXt2YXIgaT1yKHRbMF0sdFsxXSksYT1uKGVbMF0sZVsxXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhKGkodCkpfX1mdW5jdGlvbiBGbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoLTEsYT10W25dLG89dFtpXTtyZXR1cm4gbzxhJiYocj1uLG49aSxpPXIscj1hLGE9byxvPXIpLHRbbl09ZS5mbG9vcihhKSx0W2ldPWUuY2VpbChvKSx0fWZ1bmN0aW9uIEJuKHQpe3JldHVybiB0P3tmbG9vcjpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5mbG9vcihlL3QpKnR9LGNlaWw6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguY2VpbChlL3QpKnR9fTpObn10LmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXt2YXIgZT0hMCxyPU51bWJlcixuPXluLGk9Z247ZnVuY3Rpb24gYShhLG8pe2Zvcih2YXIgcyxsLGM9W10sdT1hLm1hcChyLHRoaXMpLGY9bi5jYWxsKHRoaXMsdSxvKSxoPWkuY2FsbCh0aGlzLGYsdSxvKSxwPShvPS0xLHUubGVuZ3RoKSxkPWgubGVuZ3RoLTEsbT1lPzE6MS9wOysrbzxkOykocz1jW29dPVtdKS5keD1oW28rMV0tKHMueD1oW29dKSxzLnk9MDtpZihkPjApZm9yKG89LTE7KytvPHA7KShsPXVbb10pPj1mWzBdJiZsPD1mWzFdJiYoKHM9Y1t0LmJpc2VjdChoLGwsMSxkKS0xXSkueSs9bSxzLnB1c2goYVtvXSkpO3JldHVybiBjfXJldHVybiBhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jZSh0KSxhKTpufSxhLmJpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9Im51bWJlciI9PXR5cGVvZiB0P2Z1bmN0aW9uKGUpe3JldHVybiB2bihlLHQpfTpjZSh0KSxhKTppfSxhLmZyZXF1ZW5jeT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0hIXQsYSk6ZX0sYX0sdC5sYXlvdXQucGFjaz1mdW5jdGlvbigpe3ZhciBlLHI9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydCh4biksbj0wLGk9WzEsMV07ZnVuY3Rpb24gYSh0LGEpe3ZhciBvPXIuY2FsbCh0aGlzLHQsYSkscz1vWzBdLGw9aVswXSxjPWlbMV0sdT1udWxsPT1lP01hdGguc3FydDoiZnVuY3Rpb24iPT10eXBlb2YgZT9lOmZ1bmN0aW9uKCl7cmV0dXJuIGV9O2lmKHMueD1zLnk9MCwkcihzLChmdW5jdGlvbih0KXt0LnI9K3UodC52YWx1ZSl9KSksJHIocyxUbiksbil7dmFyIGY9biooZT8xOk1hdGgubWF4KDIqcy5yL2wsMipzLnIvYykpLzI7JHIocywoZnVuY3Rpb24odCl7dC5yKz1mfSkpLCRyKHMsVG4pLCRyKHMsKGZ1bmN0aW9uKHQpe3Quci09Zn0pKX1yZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYT1lLmNoaWxkcmVuO2lmKGUueD1yKz1pKmUueCxlLnk9bis9aSplLnksZS5yKj1pLGEpZm9yKHZhciBvPS0xLHM9YS5sZW5ndGg7KytvPHM7KXQoYVtvXSxyLG4saSl9KHMsbC8yLGMvMixlPzE6MS9NYXRoLm1heCgyKnMuci9sLDIqcy5yL2MpKSxvfXJldHVybiBhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxhKTppfSxhLnJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10fHwiZnVuY3Rpb24iPT10eXBlb2YgdD90Oit0LGEpOmV9LGEucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rdCxhKTpufSxLcihhLHIpfSx0LmxheW91dC50cmVlPWZ1bmN0aW9uKCl7dmFyIGU9dC5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxyPVNuLG49WzEsMV0saT1udWxsO2Z1bmN0aW9uIGEodCxhKXt2YXIgYz1lLmNhbGwodGhpcyx0LGEpLHU9Y1swXSxmPWZ1bmN0aW9uKHQpe3ZhciBlLHI9e0E6bnVsbCxjaGlsZHJlbjpbdF19LG49W3JdO2Zvcig7bnVsbCE9KGU9bi5wb3AoKSk7KWZvcih2YXIgaSxhPWUuY2hpbGRyZW4sbz0wLHM9YS5sZW5ndGg7bzxzOysrbyluLnB1c2goKGFbb109aT17XzphW29dLHBhcmVudDplLGNoaWxkcmVuOihpPWFbb10uY2hpbGRyZW4pJiZpLnNsaWNlKCl8fFtdLEE6bnVsbCxhOm51bGwsejowLG06MCxjOjAsczowLHQ6bnVsbCxpOm99KS5hPWkpO3JldHVybiByLmNoaWxkcmVuWzBdfSh1KTtpZigkcihmLG8pLGYucGFyZW50Lm09LWYueixRcihmLHMpLGkpUXIodSxsKTtlbHNle3ZhciBoPXUscD11LGQ9dTtRcih1LChmdW5jdGlvbih0KXt0Lng8aC54JiYoaD10KSx0Lng+cC54JiYocD10KSx0LmRlcHRoPmQuZGVwdGgmJihkPXQpfSkpO3ZhciBtPXIoaCxwKS8yLWgueCxnPW5bMF0vKHAueCtyKHAsaCkvMittKSx2PW5bMV0vKGQuZGVwdGh8fDEpO1FyKHUsKGZ1bmN0aW9uKHQpe3QueD0odC54K20pKmcsdC55PXQuZGVwdGgqdn0pKX1yZXR1cm4gY31mdW5jdGlvbiBvKHQpe3ZhciBlPXQuY2hpbGRyZW4sbj10LnBhcmVudC5jaGlsZHJlbixpPXQuaT9uW3QuaS0xXTpudWxsO2lmKGUubGVuZ3RoKXshZnVuY3Rpb24odCl7dmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDtmb3IoOy0tYT49MDspKGU9aVthXSkueis9cixlLm0rPXIscis9ZS5zKyhuKz1lLmMpfSh0KTt2YXIgYT0oZVswXS56K2VbZS5sZW5ndGgtMV0ueikvMjtpPyh0Lno9aS56K3IodC5fLGkuXyksdC5tPXQuei1hKTp0Lno9YX1lbHNlIGkmJih0Lno9aS56K3IodC5fLGkuXykpO3QucGFyZW50LkE9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe2Zvcih2YXIgaSxhPXQsbz10LHM9ZSxsPWEucGFyZW50LmNoaWxkcmVuWzBdLGM9YS5tLHU9by5tLGY9cy5tLGg9bC5tO3M9TG4ocyksYT1FbihhKSxzJiZhOylsPUVuKGwpLChvPUxuKG8pKS5hPXQsKGk9cy56K2YtYS56LWMrcihzLl8sYS5fKSk+MCYmKENuKFBuKHMsdCxuKSx0LGkpLGMrPWksdSs9aSksZis9cy5tLGMrPWEubSxoKz1sLm0sdSs9by5tO3MmJiFMbihvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhRW4obCkmJihsLnQ9YSxsLm0rPWMtaCxuPXQpfXJldHVybiBufSh0LGksdC5wYXJlbnQuQXx8blswXSl9ZnVuY3Rpb24gcyh0KXt0Ll8ueD10LnordC5wYXJlbnQubSx0Lm0rPXQucGFyZW50Lm19ZnVuY3Rpb24gbCh0KXt0LngqPW5bMF0sdC55PXQuZGVwdGgqblsxXX1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpP2w6bnVsbCxhKTppP251bGw6bn0sYS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1udWxsPT0obj10KT9udWxsOmwsYSk6aT9uOm51bGx9LEtyKGEsZSl9LHQubGF5b3V0LmNsdXN0ZXI9ZnVuY3Rpb24oKXt2YXIgZT10LmxheW91dC5oaWVyYXJjaHkoKS5zb3J0KG51bGwpLnZhbHVlKG51bGwpLHI9U24sbj1bMSwxXSxpPSExO2Z1bmN0aW9uIGEoYSxvKXt2YXIgcyxsPWUuY2FsbCh0aGlzLGEsbyksYz1sWzBdLHU9MDskcihjLChmdW5jdGlvbihlKXt2YXIgbj1lLmNoaWxkcmVuO24mJm4ubGVuZ3RoPyhlLng9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K2UueH0pLDApL3QubGVuZ3RofShuKSxlLnk9ZnVuY3Rpb24oZSl7cmV0dXJuIDErdC5tYXgoZSwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKX0obikpOihlLng9cz91Kz1yKGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBmPWZ1bmN0aW9uIHQoZSl7dmFyIHI9ZS5jaGlsZHJlbjtyZXR1cm4gciYmci5sZW5ndGg/dChyWzBdKTplfShjKSxoPWZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLmNoaWxkcmVuO3JldHVybiBuJiYocj1uLmxlbmd0aCk/dChuW3ItMV0pOmV9KGMpLHA9Zi54LXIoZixoKS8yLGQ9aC54K3IoaCxmKS8yO3JldHVybiAkcihjLGk/ZnVuY3Rpb24odCl7dC54PSh0LngtYy54KSpuWzBdLHQueT0oYy55LXQueSkqblsxXX06ZnVuY3Rpb24odCl7dC54PSh0LngtcCkvKGQtcCkqblswXSx0Lnk9KDEtKGMueT90LnkvYy55OjEpKSpuWzFdfSksbH1yZXR1cm4gYS5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsYSk6cn0sYS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShuPXQpLGEpOmk/bnVsbDpufSxhLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGwhPShuPXQpLGEpOmk/bjpudWxsfSxLcihhLGUpfSx0LmxheW91dC50cmVlbWFwPWZ1bmN0aW9uKCl7dmFyIGUscj10LmxheW91dC5oaWVyYXJjaHkoKSxuPU1hdGgucm91bmQsaT1bMSwxXSxhPW51bGwsbz1JbixzPSExLGw9InNxdWFyaWZ5IixjPS41KigxK01hdGguc3FydCg1KSk7ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcixuLGk9LTEsYT10Lmxlbmd0aDsrK2k8YTspbj0ocj10W2ldKS52YWx1ZSooZTwwPzA6ZSksci5hcmVhPWlzTmFOKG4pfHxuPD0wPzA6bn1mdW5jdGlvbiBmKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG4saSxhPW8odCkscz1bXSxjPWUuc2xpY2UoKSxoPTEvMCxtPSJzbGljZSI9PT1sP2EuZHg6ImRpY2UiPT09bD9hLmR5OiJzbGljZS1kaWNlIj09PWw/MSZ0LmRlcHRoP2EuZHk6YS5keDpNYXRoLm1pbihhLmR4LGEuZHkpO2Zvcih1KGMsYS5keCphLmR5L3QudmFsdWUpLHMuYXJlYT0wOyhpPWMubGVuZ3RoKT4wOylzLnB1c2gocj1jW2ktMV0pLHMuYXJlYSs9ci5hcmVhLCJzcXVhcmlmeSIhPT1sfHwobj1wKHMsbSkpPD1oPyhjLnBvcCgpLGg9bik6KHMuYXJlYS09cy5wb3AoKS5hcmVhLGQocyxtLGEsITEpLG09TWF0aC5taW4oYS5keCxhLmR5KSxzLmxlbmd0aD1zLmFyZWE9MCxoPTEvMCk7cy5sZW5ndGgmJihkKHMsbSxhLCEwKSxzLmxlbmd0aD1zLmFyZWE9MCksZS5mb3JFYWNoKGYpfX1mdW5jdGlvbiBoKHQpe3ZhciBlPXQuY2hpbGRyZW47aWYoZSYmZS5sZW5ndGgpe3ZhciByLG49byh0KSxpPWUuc2xpY2UoKSxhPVtdO2Zvcih1KGksbi5keCpuLmR5L3QudmFsdWUpLGEuYXJlYT0wO3I9aS5wb3AoKTspYS5wdXNoKHIpLGEuYXJlYSs9ci5hcmVhLG51bGwhPXIueiYmKGQoYSxyLno/bi5keDpuLmR5LG4sIWkubGVuZ3RoKSxhLmxlbmd0aD1hLmFyZWE9MCk7ZS5mb3JFYWNoKGgpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByLG49dC5hcmVhLGk9MCxhPTEvMCxvPS0xLHM9dC5sZW5ndGg7KytvPHM7KShyPXRbb10uYXJlYSkmJihyPGEmJihhPXIpLHI+aSYmKGk9cikpO3JldHVybiBlKj1lLChuKj1uKT9NYXRoLm1heChlKmkqYy9uLG4vKGUqYSpjKSk6MS8wfWZ1bmN0aW9uIGQodCxlLHIsaSl7dmFyIGEsbz0tMSxzPXQubGVuZ3RoLGw9ci54LGM9ci55LHU9ZT9uKHQuYXJlYS9lKTowO2lmKGU9PXIuZHgpe2ZvcigoaXx8dT5yLmR5KSYmKHU9ci5keSk7KytvPHM7KShhPXRbb10pLng9bCxhLnk9YyxhLmR5PXUsbCs9YS5keD1NYXRoLm1pbihyLngrci5keC1sLHU/bihhLmFyZWEvdSk6MCk7YS56PSEwLGEuZHgrPXIueCtyLmR4LWwsci55Kz11LHIuZHktPXV9ZWxzZXtmb3IoKGl8fHU+ci5keCkmJih1PXIuZHgpOysrbzxzOykoYT10W29dKS54PWwsYS55PWMsYS5keD11LGMrPWEuZHk9TWF0aC5taW4oci55K3IuZHktYyx1P24oYS5hcmVhL3UpOjApO2Euej0hMSxhLmR5Kz1yLnkrci5keS1jLHIueCs9dSxyLmR4LT11fX1mdW5jdGlvbiBtKHQpe3ZhciBuPWV8fHIodCksYT1uWzBdO3JldHVybiBhLng9YS55PTAsYS52YWx1ZT8oYS5keD1pWzBdLGEuZHk9aVsxXSk6YS5keD1hLmR5PTAsZSYmci5yZXZhbHVlKGEpLHUoW2FdLGEuZHgqYS5keS9hLnZhbHVlKSwoZT9oOmYpKGEpLHMmJihlPW4pLG59cmV0dXJuIG0uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10LG0pOml9LG0ucGFkZGluZz1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gYTtmdW5jdGlvbiBlKGUpe3ZhciByPXQuY2FsbChtLGUsZS5kZXB0aCk7cmV0dXJuIG51bGw9PXI/SW4oZSk6T24oZSwibnVtYmVyIj09dHlwZW9mIHI/W3IscixyLHJdOnIpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIE9uKGUsdCl9dmFyIG47cmV0dXJuIG89bnVsbD09KGE9dCk/SW46ImZ1bmN0aW9uIj09KG49dHlwZW9mIHQpP2U6Im51bWJlciI9PT1uPyh0PVt0LHQsdCx0XSxyKTpyLG19LG0ucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD9NYXRoLnJvdW5kOk51bWJlcixtKTpuIT1OdW1iZXJ9LG0uc3RpY2t5PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPXQsZT1udWxsLG0pOnN9LG0ucmF0aW89ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxtKTpjfSxtLm1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCsiIixtKTpsfSxLcihtLHIpfSx0LnJhbmRvbT17bm9ybWFsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gcjwyJiYoZT0xKSxyPDEmJih0PTApLGZ1bmN0aW9uKCl7dmFyIHIsbixpO2Rve2k9KHI9MipNYXRoLnJhbmRvbSgpLTEpKnIrKG49MipNYXRoLnJhbmRvbSgpLTEpKm59d2hpbGUoIWl8fGk+MSk7cmV0dXJuIHQrZSpyKk1hdGguc3FydCgtMipNYXRoLmxvZyhpKS9pKX19LGxvZ05vcm1hbDpmdW5jdGlvbigpe3ZhciBlPXQucmFuZG9tLm5vcm1hbC5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZXhwKGUoKSl9fSxiYXRlczpmdW5jdGlvbihlKXt2YXIgcj10LnJhbmRvbS5pcndpbkhhbGwoZSk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHIoKS9lfX0saXJ3aW5IYWxsOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MDtyPHQ7cisrKWUrPU1hdGgucmFuZG9tKCk7cmV0dXJuIGV9fX0sdC5zY2FsZT17fTt2YXIgTm49e2Zsb29yOkMsY2VpbDpDfTtmdW5jdGlvbiBqbihlLHIsbixpKXt2YXIgYT1bXSxvPVtdLHM9MCxsPU1hdGgubWluKGUubGVuZ3RoLHIubGVuZ3RoKS0xO2ZvcihlW2xdPGVbMF0mJihlPWUuc2xpY2UoKS5yZXZlcnNlKCkscj1yLnNsaWNlKCkucmV2ZXJzZSgpKTsrK3M8PWw7KWEucHVzaChuKGVbcy0xXSxlW3NdKSksby5wdXNoKGkocltzLTFdLHJbc10pKTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dC5iaXNlY3QoZSxyLDEsbCktMTtyZXR1cm4gb1tuXShhW25dKHIpKX19ZnVuY3Rpb24gVW4oZSxyKXtyZXR1cm4gdC5yZWJpbmQoZSxyLCJyYW5nZSIsInJhbmdlUm91bmQiLCJpbnRlcnBvbGF0ZSIsImNsYW1wIil9ZnVuY3Rpb24gVm4odCxlKXtyZXR1cm4gRm4odCxCbihIbih0LGUpWzJdKSksRm4odCxCbihIbih0LGUpWzJdKSksdH1mdW5jdGlvbiBIbih0LGUpe251bGw9PWUmJihlPTEwKTt2YXIgcj16bih0KSxuPXJbMV0tclswXSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobi9lKS9NYXRoLkxOMTApKSxhPWUvbippO3JldHVybiBhPD0uMTU/aSo9MTA6YTw9LjM1P2kqPTU6YTw9Ljc1JiYoaSo9MiksclswXT1NYXRoLmNlaWwoclswXS9pKSppLHJbMV09TWF0aC5mbG9vcihyWzFdL2kpKmkrLjUqaSxyWzJdPWkscn1mdW5jdGlvbiBxbihlLHIpe3JldHVybiB0LnJhbmdlLmFwcGx5KHQsSG4oZSxyKSl9dC5zY2FsZS5saW5lYXI9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXt2YXIgYSxvO2Z1bmN0aW9uIHMoKXt2YXIgdD1NYXRoLm1pbihlLmxlbmd0aCxyLmxlbmd0aCk+Mj9qbjpSbixzPWk/VXI6anI7cmV0dXJuIGE9dChlLHIscyxuKSxvPXQocixlLHMseXIpLGx9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gYSh0KX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8odCl9LGwuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQubWFwKE51bWJlcikscygpKTplfSxsLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQscygpKTpyfSxsLnJhbmdlUm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwucmFuZ2UodCkuaW50ZXJwb2xhdGUoT3IpfSxsLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQscygpKTppfSxsLmludGVycG9sYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufSxsLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBxbihlLHQpfSxsLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChlLHQscil9LGwubmljZT1mdW5jdGlvbih0KXtyZXR1cm4gVm4oZSx0KSxzKCl9LGwuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUscixuLGkpfSxzKCl9KFswLDFdLFswLDFdLHlyLCExKX07dC5zY2FsZS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbixpKXtmdW5jdGlvbiBhKHQpe3JldHVybihuP01hdGgubG9nKHQ8MD8wOnQpOi1NYXRoLmxvZyh0PjA/MDotdCkpL01hdGgubG9nKHIpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4/TWF0aC5wb3cocix0KTotTWF0aC5wb3cociwtdCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZShhKHQpKX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8oZS5pbnZlcnQodCkpfSxzLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10WzBdPj0wLGUuZG9tYWluKChpPXQubWFwKE51bWJlcikpLm1hcChhKSkscyk6aX0scy5iYXNlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPSt0LGUuZG9tYWluKGkubWFwKGEpKSxzKTpyfSxzLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1GbihpLm1hcChhKSxuP01hdGg6R24pO3JldHVybiBlLmRvbWFpbih0KSxpPXQubWFwKG8pLHN9LHMudGlja3M9ZnVuY3Rpb24oKXt2YXIgdD16bihpKSxlPVtdLHM9dFswXSxsPXRbMV0sYz1NYXRoLmZsb29yKGEocykpLHU9TWF0aC5jZWlsKGEobCkpLGY9ciUxPzI6cjtpZihpc0Zpbml0ZSh1LWMpKXtpZihuKXtmb3IoO2M8dTtjKyspZm9yKHZhciBoPTE7aDxmO2grKyllLnB1c2gobyhjKSpoKTtlLnB1c2gobyhjKSl9ZWxzZSBmb3IoZS5wdXNoKG8oYykpO2MrKzx1Oylmb3IoaD1mLTE7aD4wO2gtLSllLnB1c2gobyhjKSpoKTtmb3IoYz0wO2VbY108cztjKyspO2Zvcih1PWUubGVuZ3RoO2VbdS0xXT5sO3UtLSk7ZT1lLnNsaWNlKGMsdSl9cmV0dXJuIGV9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUuY29weSgpLHIsbixpKX0sVW4ocyxlKX0odC5zY2FsZS5saW5lYXIoKS5kb21haW4oWzAsMV0pLDEwLCEwLFsxLDEwXSl9O3ZhciBHbj17Zmxvb3I6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguY2VpbCgtdCl9LGNlaWw6ZnVuY3Rpb24odCl7cmV0dXJuLU1hdGguZmxvb3IoLXQpfX07ZnVuY3Rpb24gWW4odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlPDA/LU1hdGgucG93KC1lLHQpOk1hdGgucG93KGUsdCl9fXQuc2NhbGUucG93PWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4pe3ZhciBpPVluKHIpLGE9WW4oMS9yKTtmdW5jdGlvbiBvKHQpe3JldHVybiBlKGkodCkpfXJldHVybiBvLmludmVydD1mdW5jdGlvbih0KXtyZXR1cm4gYShlLmludmVydCh0KSl9LG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlLmRvbWFpbigobj10Lm1hcChOdW1iZXIpKS5tYXAoaSkpLG8pOm59LG8udGlja3M9ZnVuY3Rpb24odCl7cmV0dXJuIHFuKG4sdCl9LG8udGlja0Zvcm1hdD1mdW5jdGlvbih0LGUpe3JldHVybiBkM19zY2FsZV9saW5lYXJUaWNrRm9ybWF0KG4sdCxlKX0sby5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBvLmRvbWFpbihWbihuLHQpKX0sby5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1ZbihyPXQpLGE9WW4oMS9yKSxlLmRvbWFpbihuLm1hcChpKSksbyk6cn0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5jb3B5KCkscixuKX0sVW4obyxlKX0odC5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sdC5zY2FsZS5zcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUucG93KCkuZXhwb25lbnQoLjUpfSx0LnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gZShyLG4pe3ZhciBpLGEsbztmdW5jdGlvbiBzKHQpe3JldHVybiBhWygoaS5nZXQodCl8fCgicmFuZ2UiPT09bi50P2kuc2V0KHQsci5wdXNoKHQpKTpOYU4pKS0xKSVhLmxlbmd0aF19ZnVuY3Rpb24gbChlLG4pe3JldHVybiB0LnJhbmdlKHIubGVuZ3RoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlK24qdH0pKX1yZXR1cm4gcy5kb21haW49ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHI7cj1bXSxpPW5ldyBfO2Zvcih2YXIgZSxhPS0xLG89dC5sZW5ndGg7KythPG87KWkuaGFzKGU9dFthXSl8fGkuc2V0KGUsci5wdXNoKGUpKTtyZXR1cm4gc1tuLnRdLmFwcGx5KHMsbi5hKX0scy5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT10LG89MCxuPXt0OiJyYW5nZSIsYTphcmd1bWVudHN9LHMpOmF9LHMucmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT0oaStjKS8yLDApOihjLWkpLyhyLmxlbmd0aC0xK2UpO3JldHVybiBhPWwoaSt1KmUvMix1KSxvPTAsbj17dDoicmFuZ2VQb2ludHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlUm91bmRQb2ludHM9ZnVuY3Rpb24odCxlKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApO3ZhciBpPXRbMF0sYz10WzFdLHU9ci5sZW5ndGg8Mj8oaT1jPU1hdGgucm91bmQoKGkrYykvMiksMCk6KGMtaSkvKHIubGVuZ3RoLTErZSl8MDtyZXR1cm4gYT1sKGkrTWF0aC5yb3VuZCh1KmUvMisoYy1pLShyLmxlbmd0aC0xK2UpKnUpLzIpLHUpLG89MCxuPXt0OiJyYW5nZVJvdW5kUG9pbnRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZUJhbmRzPWZ1bmN0aW9uKHQsZSxpKXthcmd1bWVudHMubGVuZ3RoPDImJihlPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGk9ZSk7dmFyIGM9dFsxXTx0WzBdLHU9dFtjLTBdLGY9dFsxLWNdLGg9KGYtdSkvKHIubGVuZ3RoLWUrMippKTtyZXR1cm4gYT1sKHUraCppLGgpLGMmJmEucmV2ZXJzZSgpLG89aCooMS1lKSxuPXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sc30scy5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odCxlLGkpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGU9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoaT1lKTt2YXIgYz10WzFdPHRbMF0sdT10W2MtMF0sZj10WzEtY10saD1NYXRoLmZsb29yKChmLXUpLyhyLmxlbmd0aC1lKzIqaSkpO3JldHVybiBhPWwodStNYXRoLnJvdW5kKChmLXUtKHIubGVuZ3RoLWUpKmgpLzIpLGgpLGMmJmEucmV2ZXJzZSgpLG89TWF0aC5yb3VuZChoKigxLWUpKSxuPXt0OiJyYW5nZVJvdW5kQmFuZHMiLGE6YXJndW1lbnRzfSxzfSxzLnJhbmdlQmFuZD1mdW5jdGlvbigpe3JldHVybiBvfSxzLnJhbmdlRXh0ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHpuKG4uYVswXSl9LHMuY29weT1mdW5jdGlvbigpe3JldHVybiBlKHIsbil9LHMuZG9tYWluKHIpfShbXSx7dDoicmFuZ2UiLGE6W1tdXX0pfSx0LnNjYWxlLmNhdGVnb3J5MTA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoV24pfSx0LnNjYWxlLmNhdGVnb3J5MjA9ZnVuY3Rpb24oKXtyZXR1cm4gdC5zY2FsZS5vcmRpbmFsKCkucmFuZ2UoWG4pfSx0LnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIHQuc2NhbGUub3JkaW5hbCgpLnJhbmdlKFpuKX0sdC5zY2FsZS5jYXRlZ29yeTIwYz1mdW5jdGlvbigpe3JldHVybiB0LnNjYWxlLm9yZGluYWwoKS5yYW5nZShKbil9O3ZhciBXbj1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcCh0ZSksWG49WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAodGUpLFpuPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcCh0ZSksSm49WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcCh0ZSk7ZnVuY3Rpb24gS24oKXtyZXR1cm4gMH10LnNjYWxlLnF1YW50aWxlPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXt2YXIgaTtmdW5jdGlvbiBhKCl7dmFyIGU9MCxhPW4ubGVuZ3RoO2ZvcihpPVtdOysrZTxhOylpW2UtMV09dC5xdWFudGlsZShyLGUvYSk7cmV0dXJuIG99ZnVuY3Rpb24gbyhlKXtpZighaXNOYU4oZT0rZSkpcmV0dXJuIG5bdC5iaXNlY3QoaSxlKV19cmV0dXJuIG8uZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQubWFwKHApLmZpbHRlcihkKS5zb3J0KGgpLGEoKSk6cn0sby5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGEoKSk6bn0sby5xdWFudGlsZXM9ZnVuY3Rpb24oKXtyZXR1cm4gaX0sby5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQ9bi5pbmRleE9mKHQpKTwwP1tOYU4sTmFOXTpbdD4wP2lbdC0xXTpyWzBdLHQ8aS5sZW5ndGg/aVt0XTpyW3IubGVuZ3RoLTFdXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIGUocixuKX0sYSgpfShbXSxbXSl9LHQuc2NhbGUucXVhbnRpemU9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLHIsbil7dmFyIGksYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuW01hdGgubWF4KDAsTWF0aC5taW4oYSxNYXRoLmZsb29yKGkqKHQtZSkpKSldfWZ1bmN0aW9uIHMoKXtyZXR1cm4gaT1uLmxlbmd0aC8oci1lKSxhPW4ubGVuZ3RoLTEsb31yZXR1cm4gby5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9K3RbMF0scj0rdFt0Lmxlbmd0aC0xXSxzKCkpOltlLHJdfSxvLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQscygpKTpufSxvLmludmVydEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm5bdD0odD1uLmluZGV4T2YodCkpPDA/TmFOOnQvaStlLHQrMS9pXX0sby5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIHQoZSxyLG4pfSxzKCl9KDAsMSxbMCwxXSl9LHQuc2NhbGUudGhyZXNob2xkPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGUocixuKXtmdW5jdGlvbiBpKGUpe2lmKGU8PWUpcmV0dXJuIG5bdC5iaXNlY3QocixlKV19cmV0dXJuIGkuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsaSk6cn0saS5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGkpOm59LGkuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PW4uaW5kZXhPZih0KSxbclt0LTFdLHJbdF1dfSxpLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gZShyLG4pfSxpfShbLjVdLFswLDFdKX0sdC5zY2FsZS5pZGVudGl0eT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuK3R9cmV0dXJuIHIuaW52ZXJ0PXIsci5kb21haW49ci5yYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10Lm1hcChyKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBxbihlLHQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZDNfc2NhbGVfbGluZWFyVGlja0Zvcm1hdChlLHQscil9LHIuY29weT1mdW5jdGlvbigpe3JldHVybiB0KGUpfSxyfShbMCwxXSl9LHQuc3ZnPXt9LHQuc3ZnLmFyYz1mdW5jdGlvbigpe3ZhciB0PSRuLGU9dGkscj1LbixuPVFuLGk9ZWksYT1yaSxvPW5pO2Z1bmN0aW9uIHMoKXt2YXIgcz1NYXRoLm1heCgwLCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksYz1NYXRoLm1heCgwLCtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSksdT1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKS1FdCxmPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpLUV0LGg9TWF0aC5hYnMoZi11KSxwPXU+Zj8wOjE7aWYoYzxzJiYoZD1jLGM9cyxzPWQpLGg+PVN0KXJldHVybiBsKGMscCkrKHM/bChzLDEtcCk6IiIpKyJaIjt2YXIgZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTT0wLFM9MCxFPVtdO2lmKCh2PSgrby5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDApLzIpJiYoZz1uPT09UW4/TWF0aC5zcXJ0KHMqcytjKmMpOituLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxwfHwoUyo9LTEpLGMmJihTPVB0KGcvYypNYXRoLnNpbih2KSkpLHMmJihNPVB0KGcvcypNYXRoLnNpbih2KSkpKSxjKXt5PWMqTWF0aC5jb3ModStTKSx4PWMqTWF0aC5zaW4odStTKSxiPWMqTWF0aC5jb3MoZi1TKSxfPWMqTWF0aC5zaW4oZi1TKTt2YXIgTD1NYXRoLmFicyhmLXUtMipTKTw9QXQ/MDoxO2lmKFMmJmlpKHkseCxiLF8pPT09cF5MKXt2YXIgQz0odStmKS8yO3k9YypNYXRoLmNvcyhDKSx4PWMqTWF0aC5zaW4oQyksYj1fPW51bGx9fWVsc2UgeT14PTA7aWYocyl7dz1zKk1hdGguY29zKGYtTSksVD1zKk1hdGguc2luKGYtTSksaz1zKk1hdGguY29zKHUrTSksQT1zKk1hdGguc2luKHUrTSk7dmFyIFA9TWF0aC5hYnModS1mKzIqTSk8PUF0PzA6MTtpZihNJiZpaSh3LFQsayxBKT09PTEtcF5QKXt2YXIgST0odStmKS8yO3c9cypNYXRoLmNvcyhJKSxUPXMqTWF0aC5zaW4oSSksaz1BPW51bGx9fWVsc2Ugdz1UPTA7aWYoaD5rdCYmKGQ9TWF0aC5taW4oTWF0aC5hYnMoYy1zKS8yLCtyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpPi4wMDEpe209czxjXnA/MDoxO3ZhciBPPWQsej1kO2lmKGg8QXQpe3ZhciBEPW51bGw9PWs/W3csVF06bnVsbD09Yj9beSx4XTpTZShbeSx4XSxbayxBXSxbYixfXSxbdyxUXSksUj15LURbMF0sRj14LURbMV0sQj1iLURbMF0sTj1fLURbMV0saj0xL01hdGguc2luKE1hdGguYWNvcygoUipCK0YqTikvKE1hdGguc3FydChSKlIrRipGKSpNYXRoLnNxcnQoQipCK04qTikpKS8yKSxVPU1hdGguc3FydChEWzBdKkRbMF0rRFsxXSpEWzFdKTt6PU1hdGgubWluKGQsKHMtVSkvKGotMSkpLE89TWF0aC5taW4oZCwoYy1VKS8oaisxKSl9aWYobnVsbCE9Yil7dmFyIFY9YWkobnVsbD09az9bdyxUXTpbayxBXSxbeSx4XSxjLE8scCksSD1haShbYixfXSxbdyxUXSxjLE8scCk7ZD09PU8/RS5wdXNoKCJNIixWWzBdLCJBIixPLCIsIixPLCIgMCAwLCIsbSwiICIsVlsxXSwiQSIsYywiLCIsYywiIDAgIiwxLXBeaWkoVlsxXVswXSxWWzFdWzFdLEhbMV1bMF0sSFsxXVsxXSksIiwiLHAsIiAiLEhbMV0sIkEiLE8sIiwiLE8sIiAwIDAsIixtLCIgIixIWzBdKTpFLnB1c2goIk0iLFZbMF0sIkEiLE8sIiwiLE8sIiAwIDEsIixtLCIgIixIWzBdKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCk7aWYobnVsbCE9ayl7dmFyIHE9YWkoW3kseF0sW2ssQV0scywteixwKSxHPWFpKFt3LFRdLG51bGw9PWI/W3kseF06W2IsX10scywteixwKTtkPT09ej9FLnB1c2goIkwiLEdbMF0sIkEiLHosIiwiLHosIiAwIDAsIixtLCIgIixHWzFdLCJBIixzLCIsIixzLCIgMCAiLHBeaWkoR1sxXVswXSxHWzFdWzFdLHFbMV1bMF0scVsxXVsxXSksIiwiLDEtcCwiICIscVsxXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pOkUucHVzaCgiTCIsR1swXSwiQSIseiwiLCIseiwiIDAgMCwiLG0sIiAiLHFbMF0pfWVsc2UgRS5wdXNoKCJMIix3LCIsIixUKX1lbHNlIEUucHVzaCgiTSIseSwiLCIseCksbnVsbCE9YiYmRS5wdXNoKCJBIixjLCIsIixjLCIgMCAiLEwsIiwiLHAsIiAiLGIsIiwiLF8pLEUucHVzaCgiTCIsdywiLCIsVCksbnVsbCE9ayYmRS5wdXNoKCJBIixzLCIsIixzLCIgMCAiLFAsIiwiLDEtcCwiICIsaywiLCIsQSk7cmV0dXJuIEUucHVzaCgiWiIpLEUuam9pbigiIil9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiJNMCwiK3QrIkEiK3QrIiwiK3QrIiAwIDEsIitlKyIgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLCIrZSsiIDAsIit0fXJldHVybiBzLmlubmVyUmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLHMpOnR9LHMub3V0ZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCkscyk6ZX0scy5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9Y2UodCkscyk6cn0scy5wYWRSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dD09UW4/UW46Y2UodCkscyk6bn0scy5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHQpLHMpOml9LHMuZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9Y2UodCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1jZSh0KSxzKTpvfSxzLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIHI9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLG49KCtpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLUV0O3JldHVybltNYXRoLmNvcyhuKSpyLE1hdGguc2luKG4pKnJdfSxzfTt2YXIgUW49ImF1dG8iO2Z1bmN0aW9uICRuKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIHRpKHQpe3JldHVybiB0Lm91dGVyUmFkaXVzfWZ1bmN0aW9uIGVpKHQpe3JldHVybiB0LnN0YXJ0QW5nbGV9ZnVuY3Rpb24gcmkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24gbmkodCl7cmV0dXJuIHQmJnQucGFkQW5nbGV9ZnVuY3Rpb24gaWkodCxlLHIsbil7cmV0dXJuKHQtcikqZS0oZS1uKSp0PjA/MDoxfWZ1bmN0aW9uIGFpKHQsZSxyLG4saSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9KGk/bjotbikvTWF0aC5zcXJ0KGEqYStvKm8pLGw9cypvLGM9LXMqYSx1PXRbMF0rbCxmPXRbMV0rYyxoPWVbMF0rbCxwPWVbMV0rYyxkPSh1K2gpLzIsbT0oZitwKS8yLGc9aC11LHY9cC1mLHk9ZypnK3Yqdix4PXItbixiPXUqcC1oKmYsXz0odjwwPy0xOjEpKk1hdGguc3FydChNYXRoLm1heCgwLHgqeCp5LWIqYikpLHc9KGIqdi1nKl8pL3ksVD0oLWIqZy12Kl8pL3ksaz0oYip2K2cqXykveSxBPSgtYipnK3YqXykveSxNPXctZCxTPVQtbSxFPWstZCxMPUEtbTtyZXR1cm4gTSpNK1MqUz5FKkUrTCpMJiYodz1rLFQ9QSksW1t3LWwsVC1jXSxbdypyL3gsVCpyL3hdXX1mdW5jdGlvbiBvaSgpe3JldHVybiEwfWZ1bmN0aW9uIHNpKHQpe3ZhciBlPV9lLHI9d2Usbj1vaSxpPWNpLGE9aS5rZXksbz0uNztmdW5jdGlvbiBzKGEpe3ZhciBzLGw9W10sYz1bXSx1PS0xLGY9YS5sZW5ndGgsaD1jZShlKSxwPWNlKHIpO2Z1bmN0aW9uIGQoKXtsLnB1c2goIk0iLGkodChjKSxvKSl9Zm9yKDsrK3U8Zjspbi5jYWxsKHRoaXMscz1hW3VdLHUpP2MucHVzaChbK2guY2FsbCh0aGlzLHMsdSksK3AuY2FsbCh0aGlzLHMsdSldKTpjLmxlbmd0aCYmKGQoKSxjPVtdKTtyZXR1cm4gYy5sZW5ndGgmJmQoKSxsLmxlbmd0aD9sLmpvaW4oIiIpOm51bGx9cmV0dXJuIHMueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LHMpOmV9LHMueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LHMpOnJ9LHMuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LHMpOm59LHMuaW50ZXJwb2xhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/aT10OihpPWxpLmdldCh0KXx8Y2kpLmtleSxzKTphfSxzLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxzKTpvfSxzfXQuc3ZnLmxpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gc2koQyl9O3ZhciBsaT10Lm1hcCh7bGluZWFyOmNpLCJsaW5lYXItY2xvc2VkIjp1aSxzdGVwOmZ1bmN0aW9uKHQpe3ZhciBlPTAscj10Lmxlbmd0aCxuPXRbMF0saT1bblswXSwiLCIsblsxXV07Zm9yKDsrK2U8cjspaS5wdXNoKCJIIiwoblswXSsobj10W2VdKVswXSkvMiwiViIsblsxXSk7cj4xJiZpLnB1c2goIkgiLG5bMF0pO3JldHVybiBpLmpvaW4oIiIpfSwic3RlcC1iZWZvcmUiOmZpLCJzdGVwLWFmdGVyIjpoaSxiYXNpczptaSwiYmFzaXMtb3BlbiI6ZnVuY3Rpb24odCl7aWYodC5sZW5ndGg8NClyZXR1cm4gY2kodCk7dmFyIGUscj1bXSxuPS0xLGk9dC5sZW5ndGgsYT1bMF0sbz1bMF07Zm9yKDsrK248MzspZT10W25dLGEucHVzaChlWzBdKSxvLnB1c2goZVsxXSk7ci5wdXNoKGdpKHhpLGEpKyIsIitnaSh4aSxvKSksLS1uO2Zvcig7KytuPGk7KWU9dFtuXSxhLnNoaWZ0KCksYS5wdXNoKGVbMF0pLG8uc2hpZnQoKSxvLnB1c2goZVsxXSksYmkocixhLG8pO3JldHVybiByLmpvaW4oIiIpfSwiYmFzaXMtY2xvc2VkIjpmdW5jdGlvbih0KXt2YXIgZSxyLG49LTEsaT10Lmxlbmd0aCxhPWkrNCxvPVtdLHM9W107Zm9yKDsrK248NDspcj10W24laV0sby5wdXNoKHJbMF0pLHMucHVzaChyWzFdKTtlPVtnaSh4aSxvKSwiLCIsZ2koeGkscyldLC0tbjtmb3IoOysrbjxhOylyPXRbbiVpXSxvLnNoaWZ0KCksby5wdXNoKHJbMF0pLHMuc2hpZnQoKSxzLnB1c2goclsxXSksYmkoZSxvLHMpO3JldHVybiBlLmpvaW4oIiIpfSxidW5kbGU6ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aC0xO2lmKHIpZm9yKHZhciBuLGksYT10WzBdWzBdLG89dFswXVsxXSxzPXRbcl1bMF0tYSxsPXRbcl1bMV0tbyxjPS0xOysrYzw9cjspbj10W2NdLGk9Yy9yLG5bMF09ZSpuWzBdKygxLWUpKihhK2kqcyksblsxXT1lKm5bMV0rKDEtZSkqKG8raSpsKTtyZXR1cm4gbWkodCl9LGNhcmRpbmFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/Y2kodCk6dFswXStwaSh0LGRpKHQsZSkpfSwiY2FyZGluYWwtb3BlbiI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg8ND9jaSh0KTp0WzFdK3BpKHQuc2xpY2UoMSwtMSksZGkodCxlKSl9LCJjYXJkaW5hbC1jbG9zZWQiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPDM/dWkodCk6dFswXStwaSgodC5wdXNoKHRbMF0pLHQpLGRpKFt0W3QubGVuZ3RoLTJdXS5jb25jYXQodCxbdFsxXV0pLGUpKX0sbW9ub3RvbmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPDM/Y2kodCk6dFswXStwaSh0LGZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9W10sbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9dC5sZW5ndGgtMSxuPVtdLGk9dFswXSxhPXRbMV0sbz1uWzBdPV9pKGksYSk7Zm9yKDsrK2U8cjspbltlXT0obysobz1faShpPWEsYT10W2UrMV0pKSkvMjtyZXR1cm4gbltlXT1vLG59KHQpLHM9LTEsbD10Lmxlbmd0aC0xO2Zvcig7KytzPGw7KWU9X2kodFtzXSx0W3MrMV0pLHkoZSk8a3Q/b1tzXT1vW3MrMV09MDoocj1vW3NdL2Usbj1vW3MrMV0vZSwoaT1yKnIrbipuKT45JiYoaT0zKmUvTWF0aC5zcXJ0KGkpLG9bc109aSpyLG9bcysxXT1pKm4pKTtzPS0xO2Zvcig7KytzPD1sOylpPSh0W01hdGgubWluKGwscysxKV1bMF0tdFtNYXRoLm1heCgwLHMtMSldWzBdKS8oNiooMStvW3NdKm9bc10pKSxhLnB1c2goW2l8fDAsb1tzXSppfHwwXSk7cmV0dXJuIGF9KHQpKX19KTtmdW5jdGlvbiBjaSh0KXtyZXR1cm4gdC5sZW5ndGg+MT90LmpvaW4oIkwiKTp0KyJaIn1mdW5jdGlvbiB1aSh0KXtyZXR1cm4gdC5qb2luKCJMIikrIloifWZ1bmN0aW9uIGZpKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgsbj10WzBdLGk9W25bMF0sIiwiLG5bMV1dOysrZTxyOylpLnB1c2goIlYiLChuPXRbZV0pWzFdLCJIIixuWzBdKTtyZXR1cm4gaS5qb2luKCIiKX1mdW5jdGlvbiBoaSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLG49dFswXSxpPVtuWzBdLCIsIixuWzFdXTsrK2U8cjspaS5wdXNoKCJIIiwobj10W2VdKVswXSwiViIsblsxXSk7cmV0dXJuIGkuam9pbigiIil9ZnVuY3Rpb24gcGkodCxlKXtpZihlLmxlbmd0aDwxfHx0Lmxlbmd0aCE9ZS5sZW5ndGgmJnQubGVuZ3RoIT1lLmxlbmd0aCsyKXJldHVybiBjaSh0KTt2YXIgcj10Lmxlbmd0aCE9ZS5sZW5ndGgsbj0iIixpPXRbMF0sYT10WzFdLG89ZVswXSxzPW8sbD0xO2lmKHImJihuKz0iUSIrKGFbMF0tMipvWzBdLzMpKyIsIisoYVsxXS0yKm9bMV0vMykrIiwiK2FbMF0rIiwiK2FbMV0saT10WzFdLGw9MiksZS5sZW5ndGg+MSl7cz1lWzFdLGE9dFtsXSxsKyssbis9IkMiKyhpWzBdK29bMF0pKyIsIisoaVsxXStvWzFdKSsiLCIrKGFbMF0tc1swXSkrIiwiKyhhWzFdLXNbMV0pKyIsIithWzBdKyIsIithWzFdO2Zvcih2YXIgYz0yO2M8ZS5sZW5ndGg7YysrLGwrKylhPXRbbF0scz1lW2NdLG4rPSJTIisoYVswXS1zWzBdKSsiLCIrKGFbMV0tc1sxXSkrIiwiK2FbMF0rIiwiK2FbMV19aWYocil7dmFyIHU9dFtsXTtuKz0iUSIrKGFbMF0rMipzWzBdLzMpKyIsIisoYVsxXSsyKnNbMV0vMykrIiwiK3VbMF0rIiwiK3VbMV19cmV0dXJuIG59ZnVuY3Rpb24gZGkodCxlKXtmb3IodmFyIHIsbj1bXSxpPSgxLWUpLzIsYT10WzBdLG89dFsxXSxzPTEsbD10Lmxlbmd0aDsrK3M8bDspcj1hLGE9byxvPXRbc10sbi5wdXNoKFtpKihvWzBdLXJbMF0pLGkqKG9bMV0tclsxXSldKTtyZXR1cm4gbn1mdW5jdGlvbiBtaSh0KXtpZih0Lmxlbmd0aDwzKXJldHVybiBjaSh0KTt2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9blswXSxhPW5bMV0sbz1baSxpLGksKG49dFsxXSlbMF1dLHM9W2EsYSxhLG5bMV1dLGw9W2ksIiwiLGEsIkwiLGdpKHhpLG8pLCIsIixnaSh4aSxzKV07Zm9yKHQucHVzaCh0W3ItMV0pOysrZTw9cjspbj10W2VdLG8uc2hpZnQoKSxvLnB1c2goblswXSkscy5zaGlmdCgpLHMucHVzaChuWzFdKSxiaShsLG8scyk7cmV0dXJuIHQucG9wKCksbC5wdXNoKCJMIixuKSxsLmpvaW4oIiIpfWZ1bmN0aW9uIGdpKHQsZSl7cmV0dXJuIHRbMF0qZVswXSt0WzFdKmVbMV0rdFsyXSplWzJdK3RbM10qZVszXX1saS5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2Uua2V5PXQsZS5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KHQpfSkpO3ZhciB2aT1bMCwyLzMsMS8zLDBdLHlpPVswLDEvMywyLzMsMF0seGk9WzAsMS82LDIvMywxLzZdO2Z1bmN0aW9uIGJpKHQsZSxyKXt0LnB1c2goIkMiLGdpKHZpLGUpLCIsIixnaSh2aSxyKSwiLCIsZ2koeWksZSksIiwiLGdpKHlpLHIpLCIsIixnaSh4aSxlKSwiLCIsZ2koeGkscikpfWZ1bmN0aW9uIF9pKHQsZSl7cmV0dXJuKGVbMV0tdFsxXSkvKGVbMF0tdFswXSl9ZnVuY3Rpb24gd2kodCl7Zm9yKHZhciBlLHIsbixpPS0xLGE9dC5sZW5ndGg7KytpPGE7KXI9KGU9dFtpXSlbMF0sbj1lWzFdLUV0LGVbMF09cipNYXRoLmNvcyhuKSxlWzFdPXIqTWF0aC5zaW4obik7cmV0dXJuIHR9ZnVuY3Rpb24gVGkodCl7dmFyIGU9X2Uscj1fZSxuPTAsaT13ZSxhPW9pLG89Y2kscz1vLmtleSxsPW8sYz0iTCIsdT0uNztmdW5jdGlvbiBmKHMpe3ZhciBmLGgscCxkPVtdLG09W10sZz1bXSx2PS0xLHk9cy5sZW5ndGgseD1jZShlKSxiPWNlKG4pLF89ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gaH06Y2Uociksdz1uPT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpjZShpKTtmdW5jdGlvbiBUKCl7ZC5wdXNoKCJNIixvKHQoZyksdSksYyxsKHQobS5yZXZlcnNlKCkpLHUpLCJaIil9Zm9yKDsrK3Y8eTspYS5jYWxsKHRoaXMsZj1zW3ZdLHYpPyhtLnB1c2goW2g9K3guY2FsbCh0aGlzLGYsdikscD0rYi5jYWxsKHRoaXMsZix2KV0pLGcucHVzaChbK18uY2FsbCh0aGlzLGYsdiksK3cuY2FsbCh0aGlzLGYsdildKSk6bS5sZW5ndGgmJihUKCksbT1bXSxnPVtdKTtyZXR1cm4gbS5sZW5ndGgmJlQoKSxkLmxlbmd0aD9kLmpvaW4oIiIpOm51bGx9cmV0dXJuIGYueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1yPXQsZik6cn0sZi54MD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LGYpOmV9LGYueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxmKTpyfSxmLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49aT10LGYpOml9LGYueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxmKTpufSxmLnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsZik6aX0sZi5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPXQsZik6YX0sZi5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD9vPXQ6KG89bGkuZ2V0KHQpfHxjaSkua2V5LGw9by5yZXZlcnNlfHxvLGM9by5jbG9zZWQ/Ik0iOiJMIixmKTpzfSxmLnRlbnNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxmKTp1fSxmfWZ1bmN0aW9uIGtpKHQpe3JldHVybiB0LnNvdXJjZX1mdW5jdGlvbiBBaSh0KXtyZXR1cm4gdC50YXJnZXR9ZnVuY3Rpb24gTWkodCl7cmV0dXJuIHQucmFkaXVzfWZ1bmN0aW9uIFNpKHQpe3JldHVyblt0LngsdC55XX1mdW5jdGlvbiBFaSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPWVbMF0sbj1lWzFdLUV0O3JldHVybltyKk1hdGguY29zKG4pLHIqTWF0aC5zaW4obildfX1mdW5jdGlvbiBMaSgpe3JldHVybiA2NH1mdW5jdGlvbiBDaSgpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFBpKHQpe3ZhciBlPU1hdGguc3FydCh0L0F0KTtyZXR1cm4iTTAsIitlKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiKy1lKyJBIitlKyIsIitlKyIgMCAxLDEgMCwiK2UrIloifXQuc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIHQ9c2kod2kpO3JldHVybiB0LnJhZGl1cz10LngsZGVsZXRlIHQueCx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHR9LGZpLnJldmVyc2U9aGksaGkucmV2ZXJzZT1maSx0LnN2Zy5hcmVhPWZ1bmN0aW9uKCl7cmV0dXJuIFRpKEMpfSx0LnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciB0PVRpKHdpKTtyZXR1cm4gdC5yYWRpdXM9dC54LGRlbGV0ZSB0LngsdC5pbm5lclJhZGl1cz10LngwLGRlbGV0ZSB0LngwLHQub3V0ZXJSYWRpdXM9dC54MSxkZWxldGUgdC54MSx0LmFuZ2xlPXQueSxkZWxldGUgdC55LHQuc3RhcnRBbmdsZT10LnkwLGRlbGV0ZSB0LnkwLHQuZW5kQW5nbGU9dC55MSxkZWxldGUgdC55MSx0fSx0LnN2Zy5jaG9yZD1mdW5jdGlvbigpe3ZhciB0PWtpLGU9QWkscj1NaSxuPWVpLGk9cmk7ZnVuY3Rpb24gYShyLG4pe3ZhciBpLGEsYz1vKHRoaXMsdCxyLG4pLHU9byh0aGlzLGUscixuKTtyZXR1cm4iTSIrYy5wMCtzKGMucixjLnAxLGMuYTEtYy5hMCkrKGE9dSwoKGk9YykuYTA9PWEuYTAmJmkuYTE9PWEuYTE/bChjLnIsYy5wMSxjLnIsYy5wMCk6bChjLnIsYy5wMSx1LnIsdS5wMCkrcyh1LnIsdS5wMSx1LmExLXUuYTApK2wodS5yLHUucDEsYy5yLGMucDApKSsiWiIpfWZ1bmN0aW9uIG8odCxlLGEsbyl7dmFyIHM9ZS5jYWxsKHQsYSxvKSxsPXIuY2FsbCh0LHMsbyksYz1uLmNhbGwodCxzLG8pLUV0LHU9aS5jYWxsKHQscyxvKS1FdDtyZXR1cm57cjpsLGEwOmMsYTE6dSxwMDpbbCpNYXRoLmNvcyhjKSxsKk1hdGguc2luKGMpXSxwMTpbbCpNYXRoLmNvcyh1KSxsKk1hdGguc2luKHUpXX19ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIkEiK3QrIiwiK3QrIiAwICIrICsocj5BdCkrIiwxICIrZX1mdW5jdGlvbiBsKHQsZSxyLG4pe3JldHVybiJRIDAsMCAiK259cmV0dXJuIGEucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWNlKHQpLGEpOnJ9LGEuc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWNlKGUpLGEpOnR9LGEudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNlKHQpLGEpOmV9LGEuc3RhcnRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1jZSh0KSxhKTpufSxhLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPWNlKHQpLGEpOml9LGF9LHQuc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9a2ksZT1BaSxyPVNpO2Z1bmN0aW9uIG4obixpKXt2YXIgYT10LmNhbGwodGhpcyxuLGkpLG89ZS5jYWxsKHRoaXMsbixpKSxzPShhLnkrby55KS8yLGw9W2Ese3g6YS54LHk6c30se3g6by54LHk6c30sb107cmV0dXJuIk0iKyhsPWwubWFwKHIpKVswXSsiQyIrbFsxXSsiICIrbFsyXSsiICIrbFszXX1yZXR1cm4gbi5zb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9Y2UoZSksbik6dH0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCksbik6ZX0sbi5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbn0sdC5zdmcuZGlhZ29uYWwucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIGU9dC5zdmcuZGlhZ29uYWwoKSxyPVNpLG49ZS5wcm9qZWN0aW9uO3JldHVybiBlLnByb2plY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bihFaShyPXQpKTpyfSxlfSx0LnN2Zy5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1DaSxlPUxpO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4oSWkuZ2V0KHQuY2FsbCh0aGlzLHIsbikpfHxQaSkoZS5jYWxsKHRoaXMscixuKSl9cmV0dXJuIHIudHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1jZShlKSxyKTp0fSxyLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9Y2UodCkscik6ZX0scn07dmFyIElpPXQubWFwKHtjaXJjbGU6UGksY3Jvc3M6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQvNSkvMjtyZXR1cm4iTSIrLTMqZSsiLCIrLWUrIkgiKy1lKyJWIistMyplKyJIIitlKyJWIistZSsiSCIrMyplKyJWIitlKyJIIitlKyJWIiszKmUrIkgiKy1lKyJWIitlKyJIIistMyplKyJaIn0sZGlhbW9uZDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC8oMip6aSkpLHI9ZSp6aTtyZXR1cm4iTTAsIistZSsiTCIrcisiLDAgMCwiK2UrIiAiKy1yKyIsMFoifSxzcXVhcmU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5zcXJ0KHQpLzI7cmV0dXJuIk0iKy1lKyIsIistZSsiTCIrZSsiLCIrLWUrIiAiK2UrIiwiK2UrIiAiKy1lKyIsIitlKyJaIn0sInRyaWFuZ2xlLWRvd24iOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguc3FydCh0L09pKSxyPWUqT2kvMjtyZXR1cm4iTTAsIityKyJMIitlKyIsIistcisiICIrLWUrIiwiKy1yKyJaIn0sInRyaWFuZ2xlLXVwIjpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC9PaSkscj1lKk9pLzI7cmV0dXJuIk0wLCIrLXIrIkwiK2UrIiwiK3IrIiAiKy1lKyIsIityKyJaIn19KTt0LnN2Zy5zeW1ib2xUeXBlcz1JaS5rZXlzKCk7dmFyIE9pPU1hdGguc3FydCgzKSx6aT1NYXRoLnRhbigzMCpMdCk7WS50cmFuc2l0aW9uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49Qml8fCsrVWksaT1xaSh0KSxhPVtdLG89Tml8fHt0aW1lOkRhdGUubm93KCksZWFzZTpFcixkZWxheTowLGR1cmF0aW9uOjI1MH0scz0tMSxsPXRoaXMubGVuZ3RoOysrczxsOyl7YS5wdXNoKGU9W10pO2Zvcih2YXIgYz10aGlzW3NdLHU9LTEsZj1jLmxlbmd0aDsrK3U8ZjspKHI9Y1t1XSkmJkdpKHIsdSxpLG4sbyksZS5wdXNoKHIpfXJldHVybiBGaShhLGksbil9LFkuaW50ZXJydXB0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2gobnVsbD09dD9EaTpSaShxaSh0KSkpfTt2YXIgRGk9UmkocWkoKSk7ZnVuY3Rpb24gUmkodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUscixuOyhlPXRoaXNbdF0pJiYobj1lW3I9ZS5hY3RpdmVdKSYmKG4udGltZXIuYz1udWxsLG4udGltZXIudD1OYU4sLS1lLmNvdW50P2RlbGV0ZSBlW3JdOmRlbGV0ZSB0aGlzW3RdLGUuYWN0aXZlKz0uNSxuLmV2ZW50JiZuLmV2ZW50LmludGVycnVwdC5jYWxsKHRoaXMsdGhpcy5fX2RhdGFfXyxuLmluZGV4KSl9fWZ1bmN0aW9uIEZpKHQsZSxyKXtyZXR1cm4gVSh0LGppKSx0Lm5hbWVzcGFjZT1lLHQuaWQ9cix0fXZhciBCaSxOaSxqaT1bXSxVaT0wO2Z1bmN0aW9uIFZpKHQsZSxyLG4pe3ZhciBpPXQuaWQsYT10Lm5hbWVzcGFjZTtyZXR1cm4gdXQodCwiZnVuY3Rpb24iPT10eXBlb2Ygcj9mdW5jdGlvbih0LG8scyl7dFthXVtpXS50d2Vlbi5zZXQoZSxuKHIuY2FsbCh0LHQuX19kYXRhX18sbyxzKSkpfToocj1uKHIpLGZ1bmN0aW9uKHQpe3RbYV1baV0udHdlZW4uc2V0KGUscil9KSl9ZnVuY3Rpb24gSGkodCl7cmV0dXJuIG51bGw9PXQmJih0PSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9dH19ZnVuY3Rpb24gcWkodCl7cmV0dXJuIG51bGw9PXQ/Il9fdHJhbnNpdGlvbl9fIjoiX190cmFuc2l0aW9uXyIrdCsiX18ifWZ1bmN0aW9uIEdpKHQsZSxyLG4saSl7dmFyIGEsbyxzLGwsYyx1PXRbcl18fCh0W3JdPXthY3RpdmU6MCxjb3VudDowfSksZj11W25dO2Z1bmN0aW9uIGgocil7dmFyIGk9dS5hY3RpdmUsaD11W2ldO2Zvcih2YXIgZCBpbiBoJiYoaC50aW1lci5jPW51bGwsaC50aW1lci50PU5hTiwtLXUuY291bnQsZGVsZXRlIHVbaV0saC5ldmVudCYmaC5ldmVudC5pbnRlcnJ1cHQuY2FsbCh0LHQuX19kYXRhX18saC5pbmRleCkpLHUpaWYoK2Q8bil7dmFyIG09dVtkXTttLnRpbWVyLmM9bnVsbCxtLnRpbWVyLnQ9TmFOLC0tdS5jb3VudCxkZWxldGUgdVtkXX1vLmM9cCx2ZSgoZnVuY3Rpb24oKXtyZXR1cm4gby5jJiZwKHJ8fDEpJiYoby5jPW51bGwsby50PU5hTiksMX0pLDAsYSksdS5hY3RpdmU9bixmLmV2ZW50JiZmLmV2ZW50LnN0YXJ0LmNhbGwodCx0Ll9fZGF0YV9fLGUpLGM9W10sZi50d2Vlbi5mb3JFYWNoKChmdW5jdGlvbihyLG4peyhuPW4uY2FsbCh0LHQuX19kYXRhX18sZSkpJiZjLnB1c2gobil9KSksbD1mLmVhc2Uscz1mLmR1cmF0aW9ufWZ1bmN0aW9uIHAoaSl7Zm9yKHZhciBhPWkvcyxvPWwoYSksaD1jLmxlbmd0aDtoPjA7KWNbLS1oXS5jYWxsKHQsbyk7aWYoYT49MSlyZXR1cm4gZi5ldmVudCYmZi5ldmVudC5lbmQuY2FsbCh0LHQuX19kYXRhX18sZSksLS11LmNvdW50P2RlbGV0ZSB1W25dOmRlbGV0ZSB0W3JdLDF9Znx8KGE9aS50aW1lLG89dmUoKGZ1bmN0aW9uKHQpe3ZhciBlPWYuZGVsYXk7aWYoby50PWUrYSxlPD10KXJldHVybiBoKHQtZSk7by5jPWh9KSwwLGEpLGY9dVtuXT17dHdlZW46bmV3IF8sdGltZTphLHRpbWVyOm8sZGVsYXk6aS5kZWxheSxkdXJhdGlvbjppLmR1cmF0aW9uLGVhc2U6aS5lYXNlLGluZGV4OmV9LGk9bnVsbCwrK3UuY291bnQpfWppLmNhbGw9WS5jYWxsLGppLmVtcHR5PVkuZW1wdHksamkubm9kZT1ZLm5vZGUsamkuc2l6ZT1ZLnNpemUsdC50cmFuc2l0aW9uPWZ1bmN0aW9uKGUscil7cmV0dXJuIGUmJmUudHJhbnNpdGlvbj9CaT9lLnRyYW5zaXRpb24ocik6ZTp0LnNlbGVjdGlvbigpLnRyYW5zaXRpb24oZSl9LHQudHJhbnNpdGlvbi5wcm90b3R5cGU9amksamkuc2VsZWN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpPXRoaXMuaWQsYT10aGlzLm5hbWVzcGFjZSxvPVtdO3Q9Vyh0KTtmb3IodmFyIHM9LTEsbD10aGlzLmxlbmd0aDsrK3M8bDspe28ucHVzaChlPVtdKTtmb3IodmFyIGM9dGhpc1tzXSx1PS0xLGY9Yy5sZW5ndGg7Kyt1PGY7KShuPWNbdV0pJiYocj10LmNhbGwobixuLl9fZGF0YV9fLHUscykpPygiX19kYXRhX18iaW4gbiYmKHIuX19kYXRhX189bi5fX2RhdGFfXyksR2kocix1LGEsaSxuW2FdW2ldKSxlLnB1c2gocikpOmUucHVzaChudWxsKX1yZXR1cm4gRmkobyxhLGkpfSxqaS5zZWxlY3RBbGw9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRoaXMuaWQscz10aGlzLm5hbWVzcGFjZSxsPVtdO3Q9WCh0KTtmb3IodmFyIGM9LTEsdT10aGlzLmxlbmd0aDsrK2M8dTspZm9yKHZhciBmPXRoaXNbY10saD0tMSxwPWYubGVuZ3RoOysraDxwOylpZihuPWZbaF0pe2E9bltzXVtvXSxyPXQuY2FsbChuLG4uX19kYXRhX18saCxjKSxsLnB1c2goZT1bXSk7Zm9yKHZhciBkPS0xLG09ci5sZW5ndGg7KytkPG07KShpPXJbZF0pJiZHaShpLGQscyxvLGEpLGUucHVzaChpKX1yZXR1cm4gRmkobCxzLG8pfSxqaS5maWx0ZXI9ZnVuY3Rpb24odCl7dmFyIGUscixuPVtdOyJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1sdCh0KSk7Zm9yKHZhciBpPTAsYT10aGlzLmxlbmd0aDtpPGE7aSsrKXtuLnB1c2goZT1bXSk7Zm9yKHZhciBvLHM9MCxsPShvPXRoaXNbaV0pLmxlbmd0aDtzPGw7cysrKShyPW9bc10pJiZ0LmNhbGwocixyLl9fZGF0YV9fLHMsaSkmJmUucHVzaChyKX1yZXR1cm4gRmkobix0aGlzLm5hbWVzcGFjZSx0aGlzLmlkKX0samkudHdlZW49ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmlkLG49dGhpcy5uYW1lc3BhY2U7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj90aGlzLm5vZGUoKVtuXVtyXS50d2Vlbi5nZXQodCk6dXQodGhpcyxudWxsPT1lP2Z1bmN0aW9uKGUpe2Vbbl1bcl0udHdlZW4ucmVtb3ZlKHQpfTpmdW5jdGlvbihpKXtpW25dW3JdLnR3ZWVuLnNldCh0LGUpfSl9LGppLmF0dHI9ZnVuY3Rpb24oZSxyKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2ZvcihyIGluIGUpdGhpcy5hdHRyKHIsZVtyXSk7cmV0dXJuIHRoaXN9dmFyIG49InRyYW5zZm9ybSI9PWU/TnI6eXIsaT10Lm5zLnF1YWxpZnkoZSk7ZnVuY3Rpb24gYSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGkpfWZ1bmN0aW9uIG8oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGkuc3BhY2UsaS5sb2NhbCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbnVsbD09dD9hOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGUoaSk7cmV0dXJuIHIhPT10JiYoZT1uKHIsdCksZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUoaSxlKHQpKX0pfSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbnVsbD09dD9vOih0Kz0iIixmdW5jdGlvbigpe3ZhciBlLHI9dGhpcy5nZXRBdHRyaWJ1dGVOUyhpLnNwYWNlLGkubG9jYWwpO3JldHVybiByIT09dCYmKGU9bihyLHQpLGZ1bmN0aW9uKHQpe3RoaXMuc2V0QXR0cmlidXRlTlMoaS5zcGFjZSxpLmxvY2FsLGUodCkpfSl9KX1yZXR1cm4gVmkodGhpcywiYXR0ci4iK2UscixpLmxvY2FsP2w6cyl9LGppLmF0dHJUd2Vlbj1mdW5jdGlvbihlLHIpe3ZhciBuPXQubnMucXVhbGlmeShlKTtyZXR1cm4gdGhpcy50d2VlbigiYXR0ci4iK2Usbi5sb2NhbD9mdW5jdGlvbih0LGUpe3ZhciBpPXIuY2FsbCh0aGlzLHQsZSx0aGlzLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCkpO3JldHVybiBpJiZmdW5jdGlvbih0KXt0aGlzLnNldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCxpKHQpKX19OmZ1bmN0aW9uKHQsZSl7dmFyIGk9ci5jYWxsKHRoaXMsdCxlLHRoaXMuZ2V0QXR0cmlidXRlKG4pKTtyZXR1cm4gaSYmZnVuY3Rpb24odCl7dGhpcy5zZXRBdHRyaWJ1dGUobixpKHQpKX19KX0samkuc3R5bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg7aWYobjwzKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe2ZvcihyIGluIG48MiYmKGU9IiIpLHQpdGhpcy5zdHlsZShyLHRbcl0sZSk7cmV0dXJuIHRoaXN9cj0iIn1mdW5jdGlvbiBpKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSh0KX1mdW5jdGlvbiBhKGUpe3JldHVybiBudWxsPT1lP2k6KGUrPSIiLGZ1bmN0aW9uKCl7dmFyIG4saT1vKHRoaXMpLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHQpO3JldHVybiBpIT09ZSYmKG49eXIoaSxlKSxmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsbihlKSxyKX0pfSl9cmV0dXJuIFZpKHRoaXMsInN0eWxlLiIrdCxlLGEpfSxqaS5zdHlsZVR3ZWVuPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKG4saSl7dmFyIGE9ZS5jYWxsKHRoaXMsbixpLG8odGhpcykuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpLmdldFByb3BlcnR5VmFsdWUodCkpO3JldHVybiBhJiZmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KHQsYShlKSxyKX19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9IiIpLHRoaXMudHdlZW4oInN0eWxlLiIrdCxuKX0samkudGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gVmkodGhpcywidGV4dCIsdCxIaSl9LGppLnJlbW92ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMubmFtZXNwYWNlO3JldHVybiB0aGlzLmVhY2goImVuZC50cmFuc2l0aW9uIiwoZnVuY3Rpb24oKXt2YXIgZTt0aGlzW3RdLmNvdW50PDImJihlPXRoaXMucGFyZW50Tm9kZSkmJmUucmVtb3ZlQ2hpbGQodGhpcyl9KSl9LGppLmVhc2U9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5pZCxuPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbbl1bcl0uZWFzZTooImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXQuZWFzZS5hcHBseSh0LGFyZ3VtZW50cykpLHV0KHRoaXMsKGZ1bmN0aW9uKHQpe3Rbbl1bcl0uZWFzZT1lfSkpKX0samkuZGVsYXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pZCxyPXRoaXMubmFtZXNwYWNlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDE/dGhpcy5ub2RlKClbcl1bZV0uZGVsYXk6dXQodGhpcywiZnVuY3Rpb24iPT10eXBlb2YgdD9mdW5jdGlvbihuLGksYSl7bltyXVtlXS5kZWxheT0rdC5jYWxsKG4sbi5fX2RhdGFfXyxpLGEpfToodD0rdCxmdW5jdGlvbihuKXtuW3JdW2VdLmRlbGF5PXR9KSl9LGppLmR1cmF0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLm5hbWVzcGFjZTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpW3JdW2VdLmR1cmF0aW9uOnV0KHRoaXMsImZ1bmN0aW9uIj09dHlwZW9mIHQ/ZnVuY3Rpb24obixpLGEpe25bcl1bZV0uZHVyYXRpb249TWF0aC5tYXgoMSx0LmNhbGwobixuLl9fZGF0YV9fLGksYSkpfToodD1NYXRoLm1heCgxLHQpLGZ1bmN0aW9uKG4pe25bcl1bZV0uZHVyYXRpb249dH0pKX0samkuZWFjaD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuaWQsaT10aGlzLm5hbWVzcGFjZTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBhPU5pLG89Qmk7dHJ5e0JpPW4sdXQodGhpcywoZnVuY3Rpb24odCxyLGEpe05pPXRbaV1bbl0sZS5jYWxsKHQsdC5fX2RhdGFfXyxyLGEpfSkpfWZpbmFsbHl7Tmk9YSxCaT1vfX1lbHNlIHV0KHRoaXMsKGZ1bmN0aW9uKGEpe3ZhciBvPWFbaV1bbl07KG8uZXZlbnR8fChvLmV2ZW50PXQuZGlzcGF0Y2goInN0YXJ0IiwiZW5kIiwiaW50ZXJydXB0IikpKS5vbihlLHIpfSkpO3JldHVybiB0aGlzfSxqaS50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixuPXRoaXMuaWQsaT0rK1VpLGE9dGhpcy5uYW1lc3BhY2Usbz1bXSxzPTAsbD10aGlzLmxlbmd0aDtzPGw7cysrKXtvLnB1c2godD1bXSk7Zm9yKHZhciBjLHU9MCxmPShjPXRoaXNbc10pLmxlbmd0aDt1PGY7dSsrKShlPWNbdV0pJiZHaShlLHUsYSxpLHt0aW1lOihyPWVbYV1bbl0pLnRpbWUsZWFzZTpyLmVhc2UsZGVsYXk6ci5kZWxheStyLmR1cmF0aW9uLGR1cmF0aW9uOnIuZHVyYXRpb259KSx0LnB1c2goZSl9cmV0dXJuIEZpKG8sYSxpKX0sdC5zdmcuYXhpcz1mdW5jdGlvbigpe3ZhciBlLHI9dC5zY2FsZS5saW5lYXIoKSxpPVlpLGE9NixvPTYscz0zLGw9WzEwXSxjPW51bGw7ZnVuY3Rpb24gdShuKXtuLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG4sdT10LnNlbGVjdCh0aGlzKSxmPXRoaXMuX19jaGFydF9ffHxyLGg9dGhpcy5fX2NoYXJ0X189ci5jb3B5KCkscD1udWxsPT1jP2gudGlja3M/aC50aWNrcy5hcHBseShoLGwpOmguZG9tYWluKCk6YyxkPW51bGw9PWU/aC50aWNrRm9ybWF0P2gudGlja0Zvcm1hdC5hcHBseShoLGwpOkM6ZSxtPXUuc2VsZWN0QWxsKCIudGljayIpLmRhdGEocCxoKSxnPW0uZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLGt0KSx2PXQudHJhbnNpdGlvbihtLmV4aXQoKSkuc3R5bGUoIm9wYWNpdHkiLGt0KS5yZW1vdmUoKSx5PXQudHJhbnNpdGlvbihtLm9yZGVyKCkpLnN0eWxlKCJvcGFjaXR5IiwxKSx4PU1hdGgubWF4KGEsMCkrcyxiPURuKGgpLF89dS5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksdz0oXy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksdC50cmFuc2l0aW9uKF8pKTtnLmFwcGVuZCgibGluZSIpLGcuYXBwZW5kKCJ0ZXh0Iik7dmFyIFQsayxBLE0sUz1nLnNlbGVjdCgibGluZSIpLEU9eS5zZWxlY3QoImxpbmUiKSxMPW0uc2VsZWN0KCJ0ZXh0IikudGV4dChkKSxQPWcuc2VsZWN0KCJ0ZXh0IiksST15LnNlbGVjdCgidGV4dCIpLE89InRvcCI9PT1pfHwibGVmdCI9PT1pPy0xOjE7aWYoImJvdHRvbSI9PT1pfHwidG9wIj09PWk/KG49WGksVD0ieCIsQT0ieSIsaz0ieDIiLE09InkyIixMLmF0dHIoImR5IixPPDA/IjBlbSI6Ii43MWVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksdy5hdHRyKCJkIiwiTSIrYlswXSsiLCIrTypvKyJWMEgiK2JbMV0rIlYiK08qbykpOihuPVppLFQ9InkiLEE9IngiLGs9InkyIixNPSJ4MiIsTC5hdHRyKCJkeSIsIi4zMmVtIikuc3R5bGUoInRleHQtYW5jaG9yIixPPDA/ImVuZCI6InN0YXJ0Iiksdy5hdHRyKCJkIiwiTSIrTypvKyIsIitiWzBdKyJIMFYiK2JbMV0rIkgiK08qbykpLFMuYXR0cihNLE8qYSksUC5hdHRyKEEsTyp4KSxFLmF0dHIoaywwKS5hdHRyKE0sTyphKSxJLmF0dHIoVCwwKS5hdHRyKEEsTyp4KSxoLnJhbmdlQmFuZCl7dmFyIHo9aCxEPXoucmFuZ2VCYW5kKCkvMjtmPWg9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCkrRH19ZWxzZSBmLnJhbmdlQmFuZD9mPWg6di5jYWxsKG4saCxmKTtnLmNhbGwobixmLGgpLHkuY2FsbChuLGgsaCl9KSl9cmV0dXJuIHUuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCx1KTpyfSx1Lm9yaWVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT10IGluIFdpP3QrIiI6WWksdSk6aX0sdS50aWNrcz1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPW4oYXJndW1lbnRzKSx1KTpsfSx1LnRpY2tWYWx1ZXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCx1KTpjfSx1LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCx1KTplfSx1LnRpY2tTaXplPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg7cmV0dXJuIGU/KGE9K3Qsbz0rYXJndW1lbnRzW2UtMV0sdSk6YX0sdS5pbm5lclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LHUpOmF9LHUub3V0ZXJUaWNrU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0rdCx1KTpvfSx1LnRpY2tQYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSt0LHUpOnN9LHUudGlja1N1YmRpdmlkZT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZ1fSx1fTt2YXIgWWk9ImJvdHRvbSIsV2k9e3RvcDoxLHJpZ2h0OjEsYm90dG9tOjEsbGVmdDoxfTtmdW5jdGlvbiBYaSh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoIisoaXNGaW5pdGUobik/bjpyKHQpKSsiLDApIn0pKX1mdW5jdGlvbiBaaSh0LGUscil7dC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgbj1lKHQpO3JldHVybiJ0cmFuc2xhdGUoMCwiKyhpc0Zpbml0ZShuKT9uOnIodCkpKyIpIn0pKX10LnN2Zy5icnVzaD1mdW5jdGlvbigpe3ZhciBlLHIsbj1OKGgsImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksaT1udWxsLGE9bnVsbCxzPVswLDBdLGw9WzAsMF0sYz0hMCx1PSEwLGY9S2lbMF07ZnVuY3Rpb24gaChlKXtlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGU9dC5zZWxlY3QodGhpcykuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuc3R5bGUoIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKS5vbigibW91c2Vkb3duLmJydXNoIixnKS5vbigidG91Y2hzdGFydC5icnVzaCIsZykscj1lLnNlbGVjdEFsbCgiLmJhY2tncm91bmQiKS5kYXRhKFswXSk7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFja2dyb3VuZCIpLnN0eWxlKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikuc3R5bGUoImN1cnNvciIsImNyb3NzaGFpciIpLGUuc2VsZWN0QWxsKCIuZXh0ZW50IikuZGF0YShbMF0pLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJleHRlbnQiKS5zdHlsZSgiY3Vyc29yIiwibW92ZSIpO3ZhciBuPWUuc2VsZWN0QWxsKCIucmVzaXplIikuZGF0YShmLEMpO24uZXhpdCgpLnJlbW92ZSgpLG4uZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJyZXNpemUgIit0fSkpLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gSmlbdF19KSkuYXBwZW5kKCJyZWN0IikuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi9bZXddJC8udGVzdCh0KT8tMzpudWxsfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4vXltuc10vLnRlc3QodCk/LTM6bnVsbH0pKS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLG4uc3R5bGUoImRpc3BsYXkiLGguZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIG8scz10LnRyYW5zaXRpb24oZSksbD10LnRyYW5zaXRpb24ocik7aSYmKG89RG4oaSksbC5hdHRyKCJ4IixvWzBdKS5hdHRyKCJ3aWR0aCIsb1sxXS1vWzBdKSxkKHMpKSxhJiYobz1EbihhKSxsLmF0dHIoInkiLG9bMF0pLmF0dHIoImhlaWdodCIsb1sxXS1vWzBdKSxtKHMpKSxwKHMpfSkpfWZ1bmN0aW9uIHAodCl7dC5zZWxlY3RBbGwoIi5yZXNpemUiKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4idHJhbnNsYXRlKCIrc1srL2UkLy50ZXN0KHQpXSsiLCIrbFsrL15zLy50ZXN0KHQpXSsiKSJ9KSl9ZnVuY3Rpb24gZCh0KXt0LnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoIngiLHNbMF0pLHQuc2VsZWN0QWxsKCIuZXh0ZW50LC5uPnJlY3QsLnM+cmVjdCIpLmF0dHIoIndpZHRoIixzWzFdLXNbMF0pfWZ1bmN0aW9uIG0odCl7dC5zZWxlY3QoIi5leHRlbnQiKS5hdHRyKCJ5IixsWzBdKSx0LnNlbGVjdEFsbCgiLmV4dGVudCwuZT5yZWN0LC53PnJlY3QiKS5hdHRyKCJoZWlnaHQiLGxbMV0tbFswXSl9ZnVuY3Rpb24gZygpe3ZhciBmLGcsdj10aGlzLHk9dC5zZWxlY3QodC5ldmVudC50YXJnZXQpLHg9bi5vZih2LGFyZ3VtZW50cyksYj10LnNlbGVjdCh2KSxfPXkuZGF0dW0oKSx3PSEvXihufHMpJC8udGVzdChfKSYmaSxUPSEvXihlfHcpJC8udGVzdChfKSYmYSxrPXkuY2xhc3NlZCgiZXh0ZW50IiksQT1idCh2KSxNPXQubW91c2UodiksUz10LnNlbGVjdChvKHYpKS5vbigia2V5ZG93bi5icnVzaCIsQykub24oImtleXVwLmJydXNoIixQKTtpZih0LmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Mub24oInRvdWNobW92ZS5icnVzaCIsSSkub24oInRvdWNoZW5kLmJydXNoIix6KTpTLm9uKCJtb3VzZW1vdmUuYnJ1c2giLEkpLm9uKCJtb3VzZXVwLmJydXNoIix6KSxiLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLGspTVswXT1zWzBdLU1bMF0sTVsxXT1sWzBdLU1bMV07ZWxzZSBpZihfKXt2YXIgRT0rL3ckLy50ZXN0KF8pLEw9Ky9ebi8udGVzdChfKTtnPVtzWzEtRV0tTVswXSxsWzEtTF0tTVsxXV0sTVswXT1zW0VdLE1bMV09bFtMXX1lbHNlIHQuZXZlbnQuYWx0S2V5JiYoZj1NLnNsaWNlKCkpO2Z1bmN0aW9uIEMoKXszMj09dC5ldmVudC5rZXlDb2RlJiYoa3x8KGY9bnVsbCxNWzBdLT1zWzFdLE1bMV0tPWxbMV0saz0yKSxGKCkpfWZ1bmN0aW9uIFAoKXszMj09dC5ldmVudC5rZXlDb2RlJiYyPT1rJiYoTVswXSs9c1sxXSxNWzFdKz1sWzFdLGs9MCxGKCkpfWZ1bmN0aW9uIEkoKXt2YXIgZT10Lm1vdXNlKHYpLHI9ITE7ZyYmKGVbMF0rPWdbMF0sZVsxXSs9Z1sxXSksa3x8KHQuZXZlbnQuYWx0S2V5PyhmfHwoZj1bKHNbMF0rc1sxXSkvMiwobFswXStsWzFdKS8yXSksTVswXT1zWysoZVswXTxmWzBdKV0sTVsxXT1sWysoZVsxXTxmWzFdKV0pOmY9bnVsbCksdyYmTyhlLGksMCkmJihkKGIpLHI9ITApLFQmJk8oZSxhLDEpJiYobShiKSxyPSEwKSxyJiYocChiKSx4KHt0eXBlOiJicnVzaCIsbW9kZTprPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBPKHQsbixpKXt2YXIgYSxvLGg9RG4obikscD1oWzBdLGQ9aFsxXSxtPU1baV0sZz1pP2w6cyx2PWdbMV0tZ1swXTtpZihrJiYocC09bSxkLT12K20pLGE9KGk/dTpjKT9NYXRoLm1heChwLE1hdGgubWluKGQsdFtpXSkpOnRbaV0saz9vPShhKz1tKSt2OihmJiYobT1NYXRoLm1heChwLE1hdGgubWluKGQsMipmW2ldLWEpKSksbTxhPyhvPWEsYT1tKTpvPW0pLGdbMF0hPWF8fGdbMV0hPW8pcmV0dXJuIGk/cj1udWxsOmU9bnVsbCxnWzBdPWEsZ1sxXT1vLCEwfWZ1bmN0aW9uIHooKXtJKCksYi5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsaC5lbXB0eSgpPyJub25lIjpudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLG51bGwpLFMub24oIm1vdXNlbW92ZS5icnVzaCIsbnVsbCkub24oIm1vdXNldXAuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaG1vdmUuYnJ1c2giLG51bGwpLm9uKCJ0b3VjaGVuZC5icnVzaCIsbnVsbCkub24oImtleWRvd24uYnJ1c2giLG51bGwpLm9uKCJrZXl1cC5icnVzaCIsbnVsbCksQSgpLHgoe3R5cGU6ImJydXNoZW5kIn0pfWIuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwibm9uZSIpLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSx0LnNlbGVjdCgiYm9keSIpLnN0eWxlKCJjdXJzb3IiLHkuc3R5bGUoImN1cnNvciIpKSx4KHt0eXBlOiJicnVzaHN0YXJ0In0pLEkoKX1yZXR1cm4gaC5ldmVudD1mdW5jdGlvbihpKXtpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9bi5vZih0aGlzLGFyZ3VtZW50cyksYT17eDpzLHk6bCxpOmUsajpyfSxvPXRoaXMuX19jaGFydF9ffHxhO3RoaXMuX19jaGFydF9fPWEsQmk/dC5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmVhY2goInN0YXJ0LmJydXNoIiwoZnVuY3Rpb24oKXtlPW8uaSxyPW8uaixzPW8ueCxsPW8ueSxpKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkpLnR3ZWVuKCJicnVzaDpicnVzaCIsKGZ1bmN0aW9uKCl7dmFyIHQ9eHIocyxhLngpLG49eHIobCxhLnkpO3JldHVybiBlPXI9bnVsbCxmdW5jdGlvbihlKXtzPWEueD10KGUpLGw9YS55PW4oZSksaSh7dHlwZToiYnJ1c2giLG1vZGU6InJlc2l6ZSJ9KX19KSkuZWFjaCgiZW5kLmJydXNoIiwoZnVuY3Rpb24oKXtlPWEuaSxyPWEuaixpKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLGkoe3R5cGU6ImJydXNoZW5kIn0pfSkpOihpKHt0eXBlOiJicnVzaHN0YXJ0In0pLGkoe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksaSh7dHlwZToiYnJ1c2hlbmQifSkpfSkpfSxoLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9S2lbIShpPXQpPDwxfCFhXSxoKTppfSxoLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9S2lbIWk8PDF8IShhPXQpXSxoKTphfSxoLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiZhPyhjPSEhdFswXSx1PSEhdFsxXSk6aT9jPSEhdDphJiYodT0hIXQpLGgpOmkmJmE/W2MsdV06aT9jOmE/dTpudWxsfSxoLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgbixvLGMsdSxmO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpJiYobj10WzBdLG89dFsxXSxhJiYobj1uWzBdLG89b1swXSksZT1bbixvXSxpLmludmVydCYmKG49aShuKSxvPWkobykpLG88biYmKGY9bixuPW8sbz1mKSxuPT1zWzBdJiZvPT1zWzFdfHwocz1bbixvXSkpLGEmJihjPXRbMF0sdT10WzFdLGkmJihjPWNbMV0sdT11WzFdKSxyPVtjLHVdLGEuaW52ZXJ0JiYoYz1hKGMpLHU9YSh1KSksdTxjJiYoZj1jLGM9dSx1PWYpLGM9PWxbMF0mJnU9PWxbMV18fChsPVtjLHVdKSksaCk6KGkmJihlPyhuPWVbMF0sbz1lWzFdKToobj1zWzBdLG89c1sxXSxpLmludmVydCYmKG49aS5pbnZlcnQobiksbz1pLmludmVydChvKSksbzxuJiYoZj1uLG49byxvPWYpKSksYSYmKHI/KGM9clswXSx1PXJbMV0pOihjPWxbMF0sdT1sWzFdLGEuaW52ZXJ0JiYoYz1hLmludmVydChjKSx1PWEuaW52ZXJ0KHUpKSx1PGMmJihmPWMsYz11LHU9ZikpKSxpJiZhP1tbbixjXSxbbyx1XV06aT9bbixvXTphJiZbYyx1XSl9LGguY2xlYXI9ZnVuY3Rpb24oKXtyZXR1cm4gaC5lbXB0eSgpfHwocz1bMCwwXSxsPVswLDBdLGU9cj1udWxsKSxofSxoLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISFpJiZzWzBdPT1zWzFdfHwhIWEmJmxbMF09PWxbMV19LHQucmViaW5kKGgsbiwib24iKX07dmFyIEppPXtuOiJucy1yZXNpemUiLGU6ImV3LXJlc2l6ZSIsczoibnMtcmVzaXplIix3OiJldy1yZXNpemUiLG53OiJud3NlLXJlc2l6ZSIsbmU6Im5lc3ctcmVzaXplIixzZToibndzZS1yZXNpemUiLHN3OiJuZXN3LXJlc2l6ZSJ9LEtpPVtbIm4iLCJlIiwicyIsInciLCJudyIsIm5lIiwic2UiLCJzdyJdLFsiZSIsInciXSxbIm4iLCJzIl0sW11dO2Z1bmN0aW9uIFFpKHQpe3JldHVybiBKU09OLnBhcnNlKHQucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiAkaSh0KXt2YXIgZT1pLmNyZWF0ZVJhbmdlKCk7cmV0dXJuIGUuc2VsZWN0Tm9kZShpLmJvZHkpLGUuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHQucmVzcG9uc2VUZXh0KX10LnRleHQ9dWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnJlc3BvbnNlVGV4dH0pKSx0Lmpzb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmUodCwiYXBwbGljYXRpb24vanNvbiIsUWksZSl9LHQuaHRtbD1mdW5jdGlvbih0LGUpe3JldHVybiBmZSh0LCJ0ZXh0L2h0bWwiLCRpLGUpfSx0LnhtbD11ZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVzcG9uc2VYTUx9KSksIm9iamVjdCI9PXR5cGVvZiBlJiZlLmV4cG9ydHM/ZS5leHBvcnRzPXQ6dGhpcy5kMz10fSkuYXBwbHkoc2VsZil9LHt9XSw1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9xdWFkIil9LHsiLi9xdWFkIjo2MH1dLDYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJjbGFtcCIpLGE9dCgicGFyc2UtcmVjdCIpLG89dCgiYXJyYXktYm91bmRzIikscz10KCJwaWNrLWJ5LWFsaWFzIiksbD10KCJkZWZpbmVkIiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIiksdT10KCJpcy1vYmoiKSxmPXQoImR0eXBlIiksaD10KCJtYXRoLWxvZzIiKTtmdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGE9MS8oZVsyXS1yKSxvPTEvKGVbM10tbikscz1uZXcgQXJyYXkodC5sZW5ndGgpLGw9MCxjPXQubGVuZ3RoLzI7bDxjO2wrKylzWzIqbF09aSgodFsyKmxdLXIpKmEsMCwxKSxzWzIqbCsxXT1pKCh0WzIqbCsxXS1uKSpvLDAsMSk7cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pLHQ9Yyh0LCJmbG9hdDY0IiksZT1zKGUse2JvdW5kczoicmFuZ2UgYm91bmRzIGRhdGFCb3ggZGF0YWJveCIsbWF4RGVwdGg6ImRlcHRoIG1heERlcHRoIG1heGRlcHRoIGxldmVsIG1heExldmVsIG1heGxldmVsIGxldmVscyIsZHR5cGU6InR5cGUgZHR5cGUgZm9ybWF0IG91dCBkc3Qgb3V0cHV0IGRlc3RpbmF0aW9uIn0pO3ZhciByPWwoZS5tYXhEZXB0aCwyNTUpLGk9bChlLmJvdW5kcyxvKHQsMikpO2lbMF09PT1pWzJdJiZpWzJdKyssaVsxXT09PWlbM10mJmlbM10rKzt2YXIgZCxtPXAodCxpKSxnPXQubGVuZ3RoPj4+MTtlLmR0eXBlfHwoZS5kdHlwZT0iYXJyYXkiKSwic3RyaW5nIj09dHlwZW9mIGUuZHR5cGU/ZD1uZXcoZihlLmR0eXBlKSkoZyk6ZS5kdHlwZSYmKGQ9ZS5kdHlwZSxBcnJheS5pc0FycmF5KGQpJiYoZC5sZW5ndGg9ZykpO2Zvcih2YXIgdj0wO3Y8ZzsrK3YpZFt2XT12O3ZhciB5PVtdLHg9W10sYj1bXSxfPVtdOyFmdW5jdGlvbiB0KGUsbixpLGEsbyxzKXtpZighYS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIGw9eVtvXXx8KHlbb109W10pLGM9YltvXXx8KGJbb109W10pLHU9eFtvXXx8KHhbb109W10pLGY9bC5sZW5ndGg7aWYoKytvPnJ8fHM+MTA3Mzc0MTgyNCl7Zm9yKHZhciBoPTA7aDxhLmxlbmd0aDtoKyspbC5wdXNoKGFbaF0pLGMucHVzaChzKSx1LnB1c2gobnVsbCxudWxsLG51bGwsbnVsbCk7cmV0dXJuIGZ9aWYobC5wdXNoKGFbMF0pLGMucHVzaChzKSxhLmxlbmd0aDw9MSlyZXR1cm4gdS5wdXNoKG51bGwsbnVsbCxudWxsLG51bGwpLGY7Zm9yKHZhciBwPS41KmksZD1lK3AsZz1uK3Asdj1bXSxfPVtdLHc9W10sVD1bXSxrPTEsQT1hLmxlbmd0aDtrPEE7aysrKXt2YXIgTT1hW2tdLFM9bVsyKk1dLEU9bVsyKk0rMV07UzxkP0U8Zz92LnB1c2goTSk6Xy5wdXNoKE0pOkU8Zz93LnB1c2goTSk6VC5wdXNoKE0pfXJldHVybiBzPDw9Mix1LnB1c2godChlLG4scCx2LG8scyksdChlLGcscCxfLG8scysxKSx0KGQsbixwLHcsbyxzKzIpLHQoZCxnLHAsVCxvLHMrMykpLGZ9KDAsMCwxLGQsMCwxKTtmb3IodmFyIHc9MCxUPTA7VDx5Lmxlbmd0aDtUKyspe3ZhciBrPXlbVF07aWYoZC5zZXQpZC5zZXQoayx3KTtlbHNlIGZvcih2YXIgQT0wLE09ay5sZW5ndGg7QTxNO0ErKylkW0Erd109a1tBXTt2YXIgUz13K3lbVF0ubGVuZ3RoO19bVF09W3csU10sdz1TfXJldHVybiBkLnJhbmdlPWZ1bmN0aW9uKCl7dmFyIGUscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKDtuLS07KXJbbl09YXJndW1lbnRzW25dO2lmKHUocltyLmxlbmd0aC0xXSkpe3ZhciBvPXIucG9wKCk7ci5sZW5ndGh8fG51bGw9PW8ueCYmbnVsbD09by5sJiZudWxsPT1vLmxlZnR8fChyPVtvXSxlPXt9KSxlPXMobyx7bGV2ZWw6ImxldmVsIG1heExldmVsIixkOiJkIGRpYW0gZGlhbWV0ZXIgciByYWRpdXMgcHggcHhTaXplIHBpeGVsIHBpeGVsU2l6ZSBtYXhEIHNpemUgbWluU2l6ZSIsbG9kOiJsb2QgZGV0YWlscyByYW5nZXMgb2Zmc2V0cyJ9KX1lbHNlIGU9e307ci5sZW5ndGh8fChyPWkpO3ZhciBjPWEuYXBwbHkodm9pZCAwLHIpLGY9W01hdGgubWluKGMueCxjLngrYy53aWR0aCksTWF0aC5taW4oYy55LGMueStjLmhlaWdodCksTWF0aC5tYXgoYy54LGMueCtjLndpZHRoKSxNYXRoLm1heChjLnksYy55K2MuaGVpZ2h0KV0sZD1mWzBdLG09ZlsxXSxnPWZbMl0sdj1mWzNdLGI9cChbZCxtLGcsdl0saSksXz1iWzBdLHc9YlsxXSxUPWJbMl0saz1iWzNdLEE9bChlLmxldmVsLHkubGVuZ3RoKTtpZihudWxsIT1lLmQpe3ZhciBNOyJudW1iZXIiPT10eXBlb2YgZS5kP009W2UuZCxlLmRdOmUuZC5sZW5ndGgmJihNPWUuZCksQT1NYXRoLm1pbihNYXRoLm1heChNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTVswXSkvKGlbMl0taVswXSkpKSxNYXRoLmNlaWwoLWgoTWF0aC5hYnMoTVsxXSkvKGlbM10taVsxXSkpKSksQSl9aWYoQT1NYXRoLm1pbihBLHkubGVuZ3RoKSxlLmxvZClyZXR1cm4gRShfLHcsVCxrLEEpO3ZhciBTPVtdO2Z1bmN0aW9uIEwoZSxyLG4saSxhLG8pe2lmKG51bGwhPT1hJiZudWxsIT09byYmIShfPmUrbnx8dz5yK258fFQ8ZXx8azxyfHxpPj1BfHxhPT09bykpe3ZhciBzPXlbaV07dm9pZCAwPT09byYmKG89cy5sZW5ndGgpO2Zvcih2YXIgbD1hO2w8bztsKyspe3ZhciBjPXNbbF0sdT10WzIqY10sZj10WzIqYysxXTt1Pj1kJiZ1PD1nJiZmPj1tJiZmPD12JiZTLnB1c2goYyl9dmFyIGg9eFtpXSxwPWhbNCphKzBdLGI9aFs0KmErMV0sTT1oWzQqYSsyXSxFPWhbNCphKzNdLFA9QyhoLGErMSksST0uNSpuLE89aSsxO0woZSxyLEksTyxwLGJ8fE18fEV8fFApLEwoZSxyK0ksSSxPLGIsTXx8RXx8UCksTChlK0kscixJLE8sTSxFfHxQKSxMKGUrSSxyK0ksSSxPLEUsUCl9fWZ1bmN0aW9uIEModCxlKXtmb3IodmFyIHI9bnVsbCxuPTA7bnVsbD09PXI7KWlmKHI9dFs0KmUrbl0sKytuPnQubGVuZ3RoKXJldHVybiBudWxsO3JldHVybiByfXJldHVybiBMKDAsMCwxLDAsMCwxKSxTfSxkO2Z1bmN0aW9uIEUodCxlLHIsaSxhKXtmb3IodmFyIG89W10scz0wO3M8YTtzKyspe3ZhciBsPWJbc10sYz1fW3NdWzBdLHU9TCh0LGUscyksZj1MKHIsaSxzKSxoPW4uZ2UobCx1KSxwPW4uZ3QobCxmLGgsbC5sZW5ndGgtMSk7b1tzXT1baCtjLHArY119cmV0dXJuIG99ZnVuY3Rpb24gTCh0LGUscil7Zm9yKHZhciBuPTEsaT0uNSxhPS41LG89LjUscz0wO3M8cjtzKyspbjw8PTIsbis9dDxpP2U8YT8wOjE6ZTxhPzI6MyxvKj0uNSxpKz10PGk/LW86byxhKz1lPGE/LW86bztyZXR1cm4gbn19fSx7ImFycmF5LWJvdW5kcyI6NzIsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsY2xhbXA6MTIxLGRlZmluZWQ6MTcxLGR0eXBlOjE3NiwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJpcy1vYmoiOjQzNiwibWF0aC1sb2cyIjo0NDYsInBhcnNlLXJlY3QiOjQ3MSwicGljay1ieS1hbGlhcyI6NDc1fV0sNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPXQoIkB0dXJmL21ldGEiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTA7aWYodCYmdC5sZW5ndGg+MCl7ZSs9TWF0aC5hYnMoYSh0WzBdKSk7Zm9yKHZhciByPTE7cjx0Lmxlbmd0aDtyKyspZS09TWF0aC5hYnMoYSh0W3JdKSl9cmV0dXJuIGV9ZnVuY3Rpb24gYSh0KXt2YXIgZSxyLG4saSxhLHMsbD0wLGM9dC5sZW5ndGg7aWYoYz4yKXtmb3Iocz0wO3M8YztzKyspcz09PWMtMj8obj1jLTIsaT1jLTEsYT0wKTpzPT09Yy0xPyhuPWMtMSxpPTAsYT0xKToobj1zLGk9cysxLGE9cysyKSxlPXRbbl0scj10W2ldLGwrPShvKHRbYV1bMF0pLW8oZVswXSkpKk1hdGguc2luKG8oclsxXSkpO2w9NjM3ODEzNypsKjYzNzgxMzcvMn1yZXR1cm4gbH1mdW5jdGlvbiBvKHQpe3JldHVybiB0Kk1hdGguUEkvMTgwfXIuZGVmYXVsdD1mdW5jdGlvbih0KXtyZXR1cm4gbi5nZW9tUmVkdWNlKHQsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZnVuY3Rpb24odCl7dmFyIGUscj0wO3N3aXRjaCh0LnR5cGUpe2Nhc2UiUG9seWdvbiI6cmV0dXJuIGkodC5jb29yZGluYXRlcyk7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihlPTA7ZTx0LmNvb3JkaW5hdGVzLmxlbmd0aDtlKyspcis9aSh0LmNvb3JkaW5hdGVzW2VdKTtyZXR1cm4gcjtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiTGluZVN0cmluZyI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiAwfXJldHVybiAwfShlKX0pLDApfX0seyJAdHVyZi9tZXRhIjo2NX1dLDYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj10KCJAdHVyZi9tZXRhIik7ZnVuY3Rpb24gaSh0KXt2YXIgZT1bMS8wLDEvMCwtMS8wLC0xLzBdO3JldHVybiBuLmNvb3JkRWFjaCh0LChmdW5jdGlvbih0KXtlWzBdPnRbMF0mJihlWzBdPXRbMF0pLGVbMV0+dFsxXSYmKGVbMV09dFsxXSksZVsyXTx0WzBdJiYoZVsyXT10WzBdKSxlWzNdPHRbMV0mJihlWzNdPXRbMV0pfSkpLGV9aS5kZWZhdWx0PWksci5kZWZhdWx0PWl9LHsiQHR1cmYvbWV0YSI6NjV9XSw2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvbWV0YSIpLGk9dCgiQHR1cmYvaGVscGVycyIpO3IuZGVmYXVsdD1mdW5jdGlvbih0LGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgcj0wLGE9MCxvPTA7cmV0dXJuIG4uY29vcmRFYWNoKHQsKGZ1bmN0aW9uKHQpe3IrPXRbMF0sYSs9dFsxXSxvKyt9KSwhMCksaS5wb2ludChbci9vLGEvb10sZS5wcm9wZXJ0aWVzKX19LHsiQHR1cmYvaGVscGVycyI6NjQsIkB0dXJmL21ldGEiOjY1fV0sNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pO3ZhciBuPXt0eXBlOiJGZWF0dXJlIn07cmV0dXJuKDA9PT1yLmlkfHxyLmlkKSYmKG4uaWQ9ci5pZCksci5iYm94JiYobi5iYm94PXIuYmJveCksbi5wcm9wZXJ0aWVzPWV8fHt9LG4uZ2VvbWV0cnk9dCxufWZ1bmN0aW9uIGkodCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSwhdCl0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIGlzIHJlcXVpcmVkIik7aWYoIUFycmF5LmlzQXJyYXkodCkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Iik7aWYodC5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoImNvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmciKTtpZighZCh0WzBdKXx8IWQodFsxXSkpdGhyb3cgbmV3IEVycm9yKCJjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycyIpO3JldHVybiBuKHt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBhKHQsZSxyKXt2b2lkIDA9PT1yJiYocj17fSk7Zm9yKHZhciBpPTAsYT10O2k8YS5sZW5ndGg7aSsrKXt2YXIgbz1hW2ldO2lmKG8ubGVuZ3RoPDQpdGhyb3cgbmV3IEVycm9yKCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLiIpO2Zvcih2YXIgcz0wO3M8b1tvLmxlbmd0aC0xXS5sZW5ndGg7cysrKWlmKG9bby5sZW5ndGgtMV1bc10hPT1vWzBdW3NdKXRocm93IG5ldyBFcnJvcigiRmlyc3QgYW5kIGxhc3QgUG9zaXRpb24gYXJlIG5vdCBlcXVpdmFsZW50LiIpfXJldHVybiBuKHt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fSxlLHIpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSx0Lmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcigiY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMiKTtyZXR1cm4gbih7dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBzKHQsZSl7dm9pZCAwPT09ZSYmKGU9e30pO3ZhciByPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiJ9O3JldHVybiBlLmlkJiYoci5pZD1lLmlkKSxlLmJib3gmJihyLmJib3g9ZS5iYm94KSxyLmZlYXR1cmVzPXQscn1mdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH0sZSxyKX1mdW5jdGlvbiBjKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxuKHt0eXBlOiJNdWx0aVBvbHlnb24iLGNvb3JkaW5hdGVzOnR9LGUscil9ZnVuY3Rpb24gZih0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0Km59ZnVuY3Rpb24gaCh0LGUpe3ZvaWQgMD09PWUmJihlPSJraWxvbWV0ZXJzIik7dmFyIG49ci5mYWN0b3JzW2VdO2lmKCFuKXRocm93IG5ldyBFcnJvcihlKyIgdW5pdHMgaXMgaW52YWxpZCIpO3JldHVybiB0L259ZnVuY3Rpb24gcCh0KXtyZXR1cm4gMTgwKih0JSgyKk1hdGguUEkpKS9NYXRoLlBJfWZ1bmN0aW9uIGQodCl7cmV0dXJuIWlzTmFOKHQpJiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHIuZWFydGhSYWRpdXM9NjM3MTAwOC44LHIuZmFjdG9ycz17Y2VudGltZXRlcnM6MTAwKnIuZWFydGhSYWRpdXMsY2VudGltZXRyZXM6MTAwKnIuZWFydGhSYWRpdXMsZGVncmVlczpyLmVhcnRoUmFkaXVzLzExMTMyNSxmZWV0OjMuMjgwODQqci5lYXJ0aFJhZGl1cyxpbmNoZXM6MzkuMzcqci5lYXJ0aFJhZGl1cyxraWxvbWV0ZXJzOnIuZWFydGhSYWRpdXMvMWUzLGtpbG9tZXRyZXM6ci5lYXJ0aFJhZGl1cy8xZTMsbWV0ZXJzOnIuZWFydGhSYWRpdXMsbWV0cmVzOnIuZWFydGhSYWRpdXMsbWlsZXM6ci5lYXJ0aFJhZGl1cy8xNjA5LjM0NCxtaWxsaW1ldGVyczoxZTMqci5lYXJ0aFJhZGl1cyxtaWxsaW1ldHJlczoxZTMqci5lYXJ0aFJhZGl1cyxuYXV0aWNhbG1pbGVzOnIuZWFydGhSYWRpdXMvMTg1MixyYWRpYW5zOjEseWFyZHM6MS4wOTM2KnIuZWFydGhSYWRpdXN9LHIudW5pdHNGYWN0b3JzPXtjZW50aW1ldGVyczoxMDAsY2VudGltZXRyZXM6MTAwLGRlZ3JlZXM6MS8xMTEzMjUsZmVldDozLjI4MDg0LGluY2hlczozOS4zNyxraWxvbWV0ZXJzOi4wMDEsa2lsb21ldHJlczouMDAxLG1ldGVyczoxLG1ldHJlczoxLG1pbGVzOjEvMTYwOS4zNDQsbWlsbGltZXRlcnM6MWUzLG1pbGxpbWV0cmVzOjFlMyxuYXV0aWNhbG1pbGVzOjEvMTg1MixyYWRpYW5zOjEvci5lYXJ0aFJhZGl1cyx5YXJkczoxLjA5MzYxMzN9LHIuYXJlYUZhY3RvcnM9e2FjcmVzOjI0NzEwNWUtOSxjZW50aW1ldGVyczoxZTQsY2VudGltZXRyZXM6MWU0LGZlZXQ6MTAuNzYzOTEwNDE3LGhlY3RhcmVzOjFlLTQsaW5jaGVzOjE1NTAuMDAzMTAwMDA2LGtpbG9tZXRlcnM6MWUtNixraWxvbWV0cmVzOjFlLTYsbWV0ZXJzOjEsbWV0cmVzOjEsbWlsZXM6Mzg2ZS05LG1pbGxpbWV0ZXJzOjFlNixtaWxsaW1ldHJlczoxZTYseWFyZHM6MS4xOTU5OTAwNDZ9LHIuZmVhdHVyZT1uLHIuZ2VvbWV0cnk9ZnVuY3Rpb24odCxlLHIpe3N3aXRjaCh2b2lkIDA9PT1yJiYocj17fSksdCl7Y2FzZSJQb2ludCI6cmV0dXJuIGkoZSkuZ2VvbWV0cnk7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gbyhlKS5nZW9tZXRyeTtjYXNlIlBvbHlnb24iOnJldHVybiBhKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2ludCI6cmV0dXJuIGMoZSkuZ2VvbWV0cnk7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOnJldHVybiBsKGUpLmdlb21ldHJ5O2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gdShlKS5nZW9tZXRyeTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcih0KyIgaXMgaW52YWxpZCIpfX0sci5wb2ludD1pLHIucG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLHModC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpKHQsZSl9KSkscil9LHIucG9seWdvbj1hLHIucG9seWdvbnM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB2b2lkIDA9PT1yJiYocj17fSkscyh0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGEodCxlKX0pKSxyKX0sci5saW5lU3RyaW5nPW8sci5saW5lU3RyaW5ncz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSxzKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbyh0LGUpfSkpLHIpfSxyLmZlYXR1cmVDb2xsZWN0aW9uPXMsci5tdWx0aUxpbmVTdHJpbmc9bCxyLm11bHRpUG9pbnQ9YyxyLm11bHRpUG9seWdvbj11LHIuZ2VvbWV0cnlDb2xsZWN0aW9uPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9e30pLG4oe3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0fSxlLHIpfSxyLnJvdW5kPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09ZSYmKGU9MCksZSYmIShlPj0wKSl0aHJvdyBuZXcgRXJyb3IoInByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIHI9TWF0aC5wb3coMTAsZXx8MCk7cmV0dXJuIE1hdGgucm91bmQodCpyKS9yfSxyLnJhZGlhbnNUb0xlbmd0aD1mLHIubGVuZ3RoVG9SYWRpYW5zPWgsci5sZW5ndGhUb0RlZ3JlZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcChoKHQsZSkpfSxyLmJlYXJpbmdUb0F6aW11dGg9ZnVuY3Rpb24odCl7dmFyIGU9dCUzNjA7cmV0dXJuIGU8MCYmKGUrPTM2MCksZX0sci5yYWRpYW5zVG9EZWdyZWVzPXAsci5kZWdyZWVzVG9SYWRpYW5zPWZ1bmN0aW9uKHQpe3JldHVybiB0JTM2MCpNYXRoLlBJLzE4MH0sci5jb252ZXJ0TGVuZ3RoPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1lJiYoZT0ia2lsb21ldGVycyIpLHZvaWQgMD09PXImJihyPSJraWxvbWV0ZXJzIiksISh0Pj0wKSl0aHJvdyBuZXcgRXJyb3IoImxlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7cmV0dXJuIGYoaCh0LGUpLHIpfSxyLmNvbnZlcnRBcmVhPWZ1bmN0aW9uKHQsZSxuKXtpZih2b2lkIDA9PT1lJiYoZT0ibWV0ZXJzIiksdm9pZCAwPT09biYmKG49ImtpbG9tZXRlcnMiKSwhKHQ+PTApKXRocm93IG5ldyBFcnJvcigiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7dmFyIGk9ci5hcmVhRmFjdG9yc1tlXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgb3JpZ2luYWwgdW5pdHMiKTt2YXIgYT1yLmFyZWFGYWN0b3JzW25dO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmaW5hbCB1bml0cyIpO3JldHVybiB0L2kqYX0sci5pc051bWJlcj1kLHIuaXNPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuISF0JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0fSxyLnZhbGlkYXRlQkJveD1mdW5jdGlvbih0KXtpZighdCl0aHJvdyBuZXcgRXJyb3IoImJib3ggaXMgcmVxdWlyZWQiKTtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBiZSBhbiBBcnJheSIpO2lmKDQhPT10Lmxlbmd0aCYmNiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzIik7dC5mb3JFYWNoKChmdW5jdGlvbih0KXtpZighZCh0KSl0aHJvdyBuZXcgRXJyb3IoImJib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycyIpfSkpfSxyLnZhbGlkYXRlSWQ9ZnVuY3Rpb24odCl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCJpZCBpcyByZXF1aXJlZCIpO2lmKC0xPT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiB0KSl0aHJvdyBuZXcgRXJyb3IoImlkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmciKX19LHt9XSw2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkociwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49dCgiQHR1cmYvaGVscGVycyIpO2Z1bmN0aW9uIGkodCxlLHIpe2lmKG51bGwhPT10KWZvcih2YXIgbixhLG8scyxsLGMsdSxmLGg9MCxwPTAsZD10LnR5cGUsbT0iRmVhdHVyZUNvbGxlY3Rpb24iPT09ZCxnPSJGZWF0dXJlIj09PWQsdj1tP3QuZmVhdHVyZXMubGVuZ3RoOjEseT0wO3k8djt5Kyspe2w9KGY9ISEodT1tP3QuZmVhdHVyZXNbeV0uZ2VvbWV0cnk6Zz90Lmdlb21ldHJ5OnQpJiYiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXUudHlwZSk/dS5nZW9tZXRyaWVzLmxlbmd0aDoxO2Zvcih2YXIgeD0wO3g8bDt4Kyspe3ZhciBiPTAsXz0wO2lmKG51bGwhPT0ocz1mP3UuZ2VvbWV0cmllc1t4XTp1KSl7Yz1zLmNvb3JkaW5hdGVzO3ZhciB3PXMudHlwZTtzd2l0Y2goaD0hcnx8IlBvbHlnb24iIT09dyYmIk11bHRpUG9seWdvbiIhPT13PzA6MSx3KXtjYXNlIG51bGw6YnJlYWs7Y2FzZSJQb2ludCI6aWYoITE9PT1lKGMscCx5LGIsXykpcmV0dXJuITE7cCsrLGIrKzticmVhaztjYXNlIkxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2ludCI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7aWYoITE9PT1lKGNbbl0scCx5LGIsXykpcmV0dXJuITE7cCsrLCJNdWx0aVBvaW50Ij09PXcmJmIrK30iTGluZVN0cmluZyI9PT13JiZiKys7YnJlYWs7Y2FzZSJQb2x5Z29uIjpjYXNlIk11bHRpTGluZVN0cmluZyI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKGE9MDthPGNbbl0ubGVuZ3RoLWg7YSsrKXtpZighMT09PWUoY1tuXVthXSxwLHksYixfKSlyZXR1cm4hMTtwKyt9Ik11bHRpTGluZVN0cmluZyI9PT13JiZiKyssIlBvbHlnb24iPT09dyYmXysrfSJQb2x5Z29uIj09PXcmJmIrKzticmVhaztjYXNlIk11bHRpUG9seWdvbiI6Zm9yKG49MDtuPGMubGVuZ3RoO24rKyl7Zm9yKF89MCxhPTA7YTxjW25dLmxlbmd0aDthKyspe2ZvcihvPTA7bzxjW25dW2FdLmxlbmd0aC1oO28rKyl7aWYoITE9PT1lKGNbbl1bYV1bb10scCx5LGIsXykpcmV0dXJuITE7cCsrfV8rK31iKyt9YnJlYWs7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmZvcihuPTA7bjxzLmdlb21ldHJpZXMubGVuZ3RoO24rKylpZighMT09PWkocy5nZW9tZXRyaWVzW25dLGUscikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfX19fX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6Zm9yKHI9MDtyPHQuZmVhdHVyZXMubGVuZ3RoJiYhMSE9PWUodC5mZWF0dXJlc1tyXS5wcm9wZXJ0aWVzLHIpO3IrKyk7YnJlYWs7Y2FzZSJGZWF0dXJlIjplKHQucHJvcGVydGllcywwKX19ZnVuY3Rpb24gbyh0LGUpe2lmKCJGZWF0dXJlIj09PXQudHlwZSllKHQsMCk7ZWxzZSBpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlKWZvcih2YXIgcj0wO3I8dC5mZWF0dXJlcy5sZW5ndGgmJiExIT09ZSh0LmZlYXR1cmVzW3JdLHIpO3IrKyk7fWZ1bmN0aW9uIHModCxlKXt2YXIgcixuLGksYSxvLHMsbCxjLHUsZixoPTAscD0iRmVhdHVyZUNvbGxlY3Rpb24iPT09dC50eXBlLGQ9IkZlYXR1cmUiPT09dC50eXBlLG09cD90LmZlYXR1cmVzLmxlbmd0aDoxO2ZvcihyPTA7cjxtO3IrKyl7Zm9yKHM9cD90LmZlYXR1cmVzW3JdLmdlb21ldHJ5OmQ/dC5nZW9tZXRyeTp0LGM9cD90LmZlYXR1cmVzW3JdLnByb3BlcnRpZXM6ZD90LnByb3BlcnRpZXM6e30sdT1wP3QuZmVhdHVyZXNbcl0uYmJveDpkP3QuYmJveDp2b2lkIDAsZj1wP3QuZmVhdHVyZXNbcl0uaWQ6ZD90LmlkOnZvaWQgMCxvPShsPSEhcyYmIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1zLnR5cGUpP3MuZ2VvbWV0cmllcy5sZW5ndGg6MSxpPTA7aTxvO2krKylpZihudWxsIT09KGE9bD9zLmdlb21ldHJpZXNbaV06cykpc3dpdGNoKGEudHlwZSl7Y2FzZSJQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9pbnQiOmNhc2UiUG9seWdvbiI6Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiTXVsdGlQb2x5Z29uIjppZighMT09PWUoYSxoLGMsdSxmKSlyZXR1cm4hMTticmVhaztjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6Zm9yKG49MDtuPGEuZ2VvbWV0cmllcy5sZW5ndGg7bisrKWlmKCExPT09ZShhLmdlb21ldHJpZXNbbl0saCxjLHUsZikpcmV0dXJuITE7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gR2VvbWV0cnkgVHlwZSIpfWVsc2UgaWYoITE9PT1lKG51bGwsaCxjLHUsZikpcmV0dXJuITE7aCsrfX1mdW5jdGlvbiBsKHQsZSl7cyh0LChmdW5jdGlvbih0LHIsaSxhLG8pe3ZhciBzLGw9bnVsbD09PXQ/bnVsbDp0LnR5cGU7c3dpdGNoKGwpe2Nhc2UgbnVsbDpjYXNlIlBvaW50IjpjYXNlIkxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6cmV0dXJuITEhPT1lKG4uZmVhdHVyZSh0LGkse2Jib3g6YSxpZDpvfSksciwwKSYmdm9pZCAwfXN3aXRjaChsKXtjYXNlIk11bHRpUG9pbnQiOnM9IlBvaW50IjticmVhaztjYXNlIk11bHRpTGluZVN0cmluZyI6cz0iTGluZVN0cmluZyI7YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOnM9IlBvbHlnb24ifWZvcih2YXIgYz0wO2M8dC5jb29yZGluYXRlcy5sZW5ndGg7YysrKXt2YXIgdT17dHlwZTpzLGNvb3JkaW5hdGVzOnQuY29vcmRpbmF0ZXNbY119O2lmKCExPT09ZShuLmZlYXR1cmUodSxpKSxyLGMpKXJldHVybiExfX0pKX1mdW5jdGlvbiBjKHQsZSl7bCh0LChmdW5jdGlvbih0LHIsYSl7dmFyIG89MDtpZih0Lmdlb21ldHJ5KXt2YXIgcz10Lmdlb21ldHJ5LnR5cGU7aWYoIlBvaW50IiE9PXMmJiJNdWx0aVBvaW50IiE9PXMpe3ZhciBsLGM9MCx1PTAsZj0wO3JldHVybiExIT09aSh0LChmdW5jdGlvbihpLHMsaCxwLGQpe2lmKHZvaWQgMD09PWx8fHI+Y3x8cD51fHxkPmYpcmV0dXJuIGw9aSxjPXIsdT1wLGY9ZCx2b2lkKG89MCk7dmFyIG09bi5saW5lU3RyaW5nKFtsLGldLHQucHJvcGVydGllcyk7aWYoITE9PT1lKG0scixhLGQsbykpcmV0dXJuITE7bysrLGw9aX0pKSYmdm9pZCAwfX19KSl9ZnVuY3Rpb24gdSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcigiZ2VvanNvbiBpcyByZXF1aXJlZCIpO2wodCwoZnVuY3Rpb24odCxyLGkpe2lmKG51bGwhPT10Lmdlb21ldHJ5KXt2YXIgYT10Lmdlb21ldHJ5LnR5cGUsbz10Lmdlb21ldHJ5LmNvb3JkaW5hdGVzO3N3aXRjaChhKXtjYXNlIkxpbmVTdHJpbmciOmlmKCExPT09ZSh0LHIsaSwwLDApKXJldHVybiExO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspaWYoITE9PT1lKG4ubGluZVN0cmluZyhvW3NdLHQucHJvcGVydGllcykscixpLHMpKXJldHVybiExfX19KSl9ci5jb29yZEFsbD1mdW5jdGlvbih0KXt2YXIgZT1bXTtyZXR1cm4gaSh0LChmdW5jdGlvbih0KXtlLnB1c2godCl9KSksZX0sci5jb29yZEVhY2g9aSxyLmNvb3JkUmVkdWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXI7cmV0dXJuIGkodCwoZnVuY3Rpb24odCxuLGksbyxzKXthPTA9PT1uJiZ2b2lkIDA9PT1yP3Q6ZShhLHQsbixpLG8scyl9KSxuKSxhfSxyLmZlYXR1cmVFYWNoPW8sci5mZWF0dXJlUmVkdWNlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yO3JldHVybiBvKHQsKGZ1bmN0aW9uKHQsaSl7bj0wPT09aSYmdm9pZCAwPT09cj90OmUobix0LGkpfSkpLG59LHIuZmluZFBvaW50PWZ1bmN0aW9uKHQsZSl7aWYoZT1lfHx7fSwhbi5pc09iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoIm9wdGlvbnMgaXMgaW52YWxpZCIpO3ZhciByLGk9ZS5mZWF0dXJlSW5kZXh8fDAsYT1lLm11bHRpRmVhdHVyZUluZGV4fHwwLG89ZS5nZW9tZXRyeUluZGV4fHwwLHM9ZS5jb29yZEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOnJldHVybiBuLnBvaW50KGMsbCxlKTtjYXNlIk11bHRpUG9pbnQiOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG4ucG9pbnQoY1thXSxsLGUpO2Nhc2UiTGluZVN0cmluZyI6cmV0dXJuIHM8MCYmKHM9Yy5sZW5ndGgrcyksbi5wb2ludChjW3NdLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MpLG4ucG9pbnQoY1tvXVtzXSxsLGUpO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxzPDAmJihzPWNbYV0ubGVuZ3RoK3MpLG4ucG9pbnQoY1thXVtzXSxsLGUpO2Nhc2UiTXVsdGlQb2x5Z29uIjpyZXR1cm4gYTwwJiYoYT1jLmxlbmd0aCthKSxvPDAmJihvPWNbYV0ubGVuZ3RoK28pLHM8MCYmKHM9Y1thXVtvXS5sZW5ndGgtcyksbi5wb2ludChjW2FdW29dW3NdLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5maW5kU2VnbWVudD1mdW5jdGlvbih0LGUpe2lmKGU9ZXx8e30sIW4uaXNPYmplY3QoZSkpdGhyb3cgbmV3IEVycm9yKCJvcHRpb25zIGlzIGludmFsaWQiKTt2YXIgcixpPWUuZmVhdHVyZUluZGV4fHwwLGE9ZS5tdWx0aUZlYXR1cmVJbmRleHx8MCxvPWUuZ2VvbWV0cnlJbmRleHx8MCxzPWUuc2VnbWVudEluZGV4fHwwLGw9ZS5wcm9wZXJ0aWVzO3N3aXRjaCh0LnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOmk8MCYmKGk9dC5mZWF0dXJlcy5sZW5ndGgraSksbD1sfHx0LmZlYXR1cmVzW2ldLnByb3BlcnRpZXMscj10LmZlYXR1cmVzW2ldLmdlb21ldHJ5O2JyZWFrO2Nhc2UiRmVhdHVyZSI6bD1sfHx0LnByb3BlcnRpZXMscj10Lmdlb21ldHJ5O2JyZWFrO2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIk11bHRpUG9seWdvbiI6cj10O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX1pZihudWxsPT09cilyZXR1cm4gbnVsbDt2YXIgYz1yLmNvb3JkaW5hdGVzO3N3aXRjaChyLnR5cGUpe2Nhc2UiUG9pbnQiOmNhc2UiTXVsdGlQb2ludCI6cmV0dXJuIG51bGw7Y2FzZSJMaW5lU3RyaW5nIjpyZXR1cm4gczwwJiYocz1jLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1tzXSxjW3MrMV1dLGwsZSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbzwwJiYobz1jLmxlbmd0aCtvKSxzPDAmJihzPWNbb10ubGVuZ3RoK3MtMSksbi5saW5lU3RyaW5nKFtjW29dW3NdLGNbb11bcysxXV0sbCxlKTtjYXNlIk11bHRpTGluZVN0cmluZyI6cmV0dXJuIGE8MCYmKGE9Yy5sZW5ndGgrYSksczwwJiYocz1jW2FdLmxlbmd0aCtzLTEpLG4ubGluZVN0cmluZyhbY1thXVtzXSxjW2FdW3MrMV1dLGwsZSk7Y2FzZSJNdWx0aVBvbHlnb24iOnJldHVybiBhPDAmJihhPWMubGVuZ3RoK2EpLG88MCYmKG89Y1thXS5sZW5ndGgrbyksczwwJiYocz1jW2FdW29dLmxlbmd0aC1zLTEpLG4ubGluZVN0cmluZyhbY1thXVtvXVtzXSxjW2FdW29dW3MrMV1dLGwsZSl9dGhyb3cgbmV3IEVycm9yKCJnZW9qc29uIGlzIGludmFsaWQiKX0sci5mbGF0dGVuRWFjaD1sLHIuZmxhdHRlblJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gbCh0LChmdW5jdGlvbih0LGksYSl7bj0wPT09aSYmMD09PWEmJnZvaWQgMD09PXI/dDplKG4sdCxpLGEpfSkpLG59LHIuZ2VvbUVhY2g9cyxyLmdlb21SZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIHModCwoZnVuY3Rpb24odCxpLGEsbyxzKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8scyl9KSksbn0sci5saW5lRWFjaD11LHIubGluZVJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cjtyZXR1cm4gdSh0LChmdW5jdGlvbih0LGksYSxvKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSxhLG8pfSkpLG59LHIucHJvcEVhY2g9YSxyLnByb3BSZWR1Y2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXI7cmV0dXJuIGEodCwoZnVuY3Rpb24odCxpKXtuPTA9PT1pJiZ2b2lkIDA9PT1yP3Q6ZShuLHQsaSl9KSksbn0sci5zZWdtZW50RWFjaD1jLHIuc2VnbWVudFJlZHVjZT1mdW5jdGlvbih0LGUscil7dmFyIG49cixpPSExO3JldHVybiBjKHQsKGZ1bmN0aW9uKHQsYSxvLHMsbCl7bj0hMT09PWkmJnZvaWQgMD09PXI/dDplKG4sdCxhLG8scyxsKSxpPSEwfSkpLG59fSx7IkB0dXJmL2hlbHBlcnMiOjY0fV0sNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWstbWFwIik6V2Vha01hcCxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz1uZXcgbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9by5nZXQodCkscj1lJiYoZS5fdHJpYW5nbGVCdWZmZXIuaGFuZGxlfHxlLl90cmlhbmdsZUJ1ZmZlci5idWZmZXIpO2lmKCFyfHwhdC5pc0J1ZmZlcihyKSl7dmFyIG49aSh0LG5ldyBGbG9hdDMyQXJyYXkoWy0xLC0xLC0xLDQsNCwtMV0pKTsoZT1hKHQsW3tidWZmZXI6bix0eXBlOnQuRkxPQVQsc2l6ZToyfV0pKS5fdHJpYW5nbGVCdWZmZXI9bixvLnNldCh0LGUpfWUuYmluZCgpLHQuZHJhd0FycmF5cyh0LlRSSUFOR0xFUywwLDMpLGUudW5iaW5kKCl9fSx7ImdsLWJ1ZmZlciI6MjU3LCJnbC12YW8iOjM0Mywid2Vhay1tYXAiOjU5OH1dLDY3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49MCxpPTA7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXt2YXIgYT0odD10LnNsaWNlKCkpWzBdLG89YS50b1VwcGVyQ2FzZSgpO2lmKGEhPW8pc3dpdGNoKHRbMF09byxhKXtjYXNlImEiOnRbNl0rPW4sdFs3XSs9aTticmVhaztjYXNlInYiOnRbMV0rPWk7YnJlYWs7Y2FzZSJoIjp0WzFdKz1uO2JyZWFrO2RlZmF1bHQ6Zm9yKHZhciBzPTE7czx0Lmxlbmd0aDspdFtzKytdKz1uLHRbcysrXSs9aX1zd2l0Y2gobyl7Y2FzZSJaIjpuPWUsaT1yO2JyZWFrO2Nhc2UiSCI6bj10WzFdO2JyZWFrO2Nhc2UiViI6aT10WzFdO2JyZWFrO2Nhc2UiTSI6bj1lPXRbMV0saT1yPXRbMl07YnJlYWs7ZGVmYXVsdDpuPXRbdC5sZW5ndGgtMl0saT10W3QubGVuZ3RoLTFdfXJldHVybiB0fSkpfX0se31dLDY4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgicGFkLWxlZnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9Im51bWJlciI9PXR5cGVvZiBlP2U6MSxyPXJ8fCI6ICI7dmFyIGk9dC5zcGxpdCgvXHI/XG4vKSxhPVN0cmluZyhpLmxlbmd0aCtlLTEpLmxlbmd0aDtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKHQsaSl7dmFyIG89aStlLHM9U3RyaW5nKG8pLmxlbmd0aDtyZXR1cm4gbihvLGEtcykrcit0fSkpLmpvaW4oIlxuIil9fSx7InBhZC1sZWZ0Ijo0Njl9XSw2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoMD09PWUpcmV0dXJuW107aWYoMT09PWUpcmV0dXJuWzBdO2Zvcih2YXIgcj10WzBdLmxlbmd0aCxuPVt0WzBdXSxhPVswXSxvPTE7bzxlOysrbylpZihuLnB1c2godFtvXSksaShuLHIpKXtpZihhLnB1c2gobyksYS5sZW5ndGg9PT1yKzEpcmV0dXJuIGF9ZWxzZSBuLnBvcCgpO3JldHVybiBhfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKTtmdW5jdGlvbiBpKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKzEpLGk9MDtpPHQubGVuZ3RoOysraSlyW2ldPXRbaV07Zm9yKGk9MDtpPD10Lmxlbmd0aDsrK2kpe2Zvcih2YXIgYT10Lmxlbmd0aDthPD1lOysrYSl7Zm9yKHZhciBvPW5ldyBBcnJheShlKSxzPTA7czxlOysrcylvW3NdPU1hdGgucG93KGErMS1pLHMpO3JbYV09b31pZihuLmFwcGx5KHZvaWQgMCxyKSlyZXR1cm4hMH1yZXR1cm4hMX19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjR9XSw3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlKS5maWx0ZXIoKGZ1bmN0aW9uKHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoci5sZW5ndGgpLGE9MDthPHIubGVuZ3RoOysrYSluW2FdPWVbclthXV07cmV0dXJuIGkobikqdDwxfSkpfTt2YXIgbj10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGk9dCgiY2lyY3VtcmFkaXVzIil9LHtjaXJjdW1yYWRpdXM6MTIwLCJkZWxhdW5heS10cmlhbmd1bGF0ZSI6MTcyfV0sNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQsZSkpfTt2YXIgbj10KCJhbHBoYS1jb21wbGV4IiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgtYm91bmRhcnkiKX0seyJhbHBoYS1jb21wbGV4Ijo3MCwic2ltcGxpY2lhbC1jb21wbGV4LWJvdW5kYXJ5Ijo1MzF9XSw3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO2U9bnVsbD09ZT8xOk1hdGguZmxvb3IoZSk7Zm9yKHZhciByPUFycmF5KDIqZSksbj0wO248ZTtuKyspe2Zvcih2YXIgaT0tMS8wLGE9MS8wLG89bixzPXQubGVuZ3RoO288cztvKz1lKXRbb10+aSYmKGk9dFtvXSksdFtvXTxhJiYoYT10W29dKTtyW25dPWEscltlK25dPWl9cmV0dXJuIHJ9fSx7fV0sNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleClyZXR1cm4gdC5maW5kSW5kZXgoZSxyKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIG49T2JqZWN0KHQpLGk9bi5sZW5ndGg7aWYoMD09PWkpcmV0dXJuLTE7Zm9yKHZhciBhPTA7YTxpO2ErKylpZihlLmNhbGwocixuW2FdLGEsbikpcmV0dXJuIGE7cmV0dXJuLTF9fSx7fV0sNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYXJyYXktYm91bmRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdHx8bnVsbD09dC5sZW5ndGgpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSBhbiBhcnJheSIpO251bGw9PWUmJihlPTEpO251bGw9PXImJihyPW4odCxlKSk7Zm9yKHZhciBpPTA7aTxlO2krKyl7dmFyIGE9cltlK2ldLG89cltpXSxzPWksbD10Lmxlbmd0aDtpZihhPT09MS8wJiZvPT09LTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTp0W3NdPT09bz8wOi41O2Vsc2UgaWYoYT09PTEvMClmb3Iocz1pO3M8bDtzKz1lKXRbc109dFtzXT09PWE/MTowO2Vsc2UgaWYobz09PS0xLzApZm9yKHM9aTtzPGw7cys9ZSl0W3NdPXRbc109PT1vPzA6MTtlbHNle3ZhciBjPWEtbztmb3Iocz1pO3M8bDtzKz1lKWlzTmFOKHRbc10pfHwodFtzXT0wPT09Yz8uNToodFtzXS1vKS9jKX19cmV0dXJuIHR9fSx7ImFycmF5LWJvdW5kcyI6NzJ9XSw3NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSJudW1iZXIiPT10eXBlb2YgdCxuPSJudW1iZXIiPT10eXBlb2YgZTtyJiYhbj8oZT10LHQ9MCk6cnx8bnx8KHQ9MCxlPTApO3ZhciBpPShlfD0wKS0odHw9MCk7aWYoaTwwKXRocm93IG5ldyBFcnJvcigiYXJyYXkgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTtmb3IodmFyIGE9bmV3IEFycmF5KGkpLG89MCxzPXQ7bzxpO28rKyxzKyspYVtvXT1zO3JldHVybiBhfX0se31dLDc2OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJvYmplY3QtYXNzaWduIik7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovZnVuY3Rpb24gaSh0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxhPU1hdGgubWluKHIsbik7aTxhOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5CdWZmZXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLkJ1ZmZlci5pc0J1ZmZlcj9yLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9dmFyIG89dCgidXRpbC8iKSxzPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbD1BcnJheS5wcm90b3R5cGUuc2xpY2UsYz0iZm9vIj09PWZ1bmN0aW9uKCl7fS5uYW1lO2Z1bmN0aW9uIHUodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBmKHQpe3JldHVybiFhKHQpJiYoImZ1bmN0aW9uIj09dHlwZW9mIHIuQXJyYXlCdWZmZXImJigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX12YXIgaD1lLmV4cG9ydHM9eSxwPS9ccypmdW5jdGlvblxzKyhbXlwoXHNdKilccyovO2Z1bmN0aW9uIGQodCl7aWYoby5pc0Z1bmN0aW9uKHQpKXtpZihjKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLm1hdGNoKHApO3JldHVybiBlJiZlWzFdfX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiBnKHQpe2lmKGN8fCFvLmlzRnVuY3Rpb24odCkpcmV0dXJuIG8uaW5zcGVjdCh0KTt2YXIgZT1kKHQpO3JldHVybiJbRnVuY3Rpb24iKyhlPyI6ICIrZToiIikrIl0ifWZ1bmN0aW9uIHYodCxlLHIsbixpKXt0aHJvdyBuZXcgaC5Bc3NlcnRpb25FcnJvcih7bWVzc2FnZTpyLGFjdHVhbDp0LGV4cGVjdGVkOmUsb3BlcmF0b3I6bixzdGFja1N0YXJ0RnVuY3Rpb246aX0pfWZ1bmN0aW9uIHkodCxlKXt0fHx2KHQsITAsZSwiPT0iLGgub2spfWZ1bmN0aW9uIHgodCxlLHIsbil7aWYodD09PWUpcmV0dXJuITA7aWYoYSh0KSYmYShlKSlyZXR1cm4gMD09PWkodCxlKTtpZihvLmlzRGF0ZSh0KSYmby5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYoby5pc1JlZ0V4cCh0KSYmby5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fG51bGwhPT1lJiYib2JqZWN0Ij09dHlwZW9mIGUpe2lmKGYodCkmJmYoZSkmJnUodCk9PT11KGUpJiYhKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXl8fHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpKXJldHVybiAwPT09aShuZXcgVWludDhBcnJheSh0LmJ1ZmZlciksbmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpKTtpZihhKHQpIT09YShlKSlyZXR1cm4hMTt2YXIgcz0obj1ufHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfSkuYWN0dWFsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1zJiZzPT09bi5leHBlY3RlZC5pbmRleE9mKGUpfHwobi5hY3R1YWwucHVzaCh0KSxuLmV4cGVjdGVkLnB1c2goZSksZnVuY3Rpb24odCxlLHIsbil7aWYobnVsbD09dHx8bnVsbD09ZSlyZXR1cm4hMTtpZihvLmlzUHJpbWl0aXZlKHQpfHxvLmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9Yih0KSxhPWIoZSk7aWYoaSYmIWF8fCFpJiZhKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9bC5jYWxsKHQpLGU9bC5jYWxsKGUpLHgodCxlLHIpO3ZhciBzLGMsdT1UKHQpLGY9VChlKTtpZih1Lmxlbmd0aCE9PWYubGVuZ3RoKXJldHVybiExO2Zvcih1LnNvcnQoKSxmLnNvcnQoKSxjPXUubGVuZ3RoLTE7Yz49MDtjLS0paWYodVtjXSE9PWZbY10pcmV0dXJuITE7Zm9yKGM9dS5sZW5ndGgtMTtjPj0wO2MtLSlpZihzPXVbY10sIXgodFtzXSxlW3NdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9KHQsZSxyLG4pKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIGIodCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBfKHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKCJbb2JqZWN0IFJlZ0V4cF0iPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiYhMD09PWUuY2FsbCh7fSx0KX1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJibG9jayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksaT1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dCgpfWNhdGNoKHQpe2U9dH1yZXR1cm4gZX0oZSksbj0ociYmci5uYW1lPyIgKCIrci5uYW1lKyIpLiI6Ii4iKSsobj8iICIrbjoiLiIpLHQmJiFpJiZ2KGksciwiTWlzc2luZyBleHBlY3RlZCBleGNlcHRpb24iK24pO3ZhciBhPSJzdHJpbmciPT10eXBlb2YgbixzPSF0JiZpJiYhcjtpZigoIXQmJm8uaXNFcnJvcihpKSYmYSYmXyhpLHIpfHxzKSYmdihpLHIsIkdvdCB1bndhbnRlZCBleGNlcHRpb24iK24pLHQmJmkmJnImJiFfKGkscil8fCF0JiZpKXRocm93IGl9aC5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLmFjdHVhbD10LmFjdHVhbCx0aGlzLmV4cGVjdGVkPXQuZXhwZWN0ZWQsdGhpcy5vcGVyYXRvcj10Lm9wZXJhdG9yLHQubWVzc2FnZT8odGhpcy5tZXNzYWdlPXQubWVzc2FnZSx0aGlzLmdlbmVyYXRlZE1lc3NhZ2U9ITEpOih0aGlzLm1lc3NhZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG0oZyh0LmFjdHVhbCksMTI4KSsiICIrdC5vcGVyYXRvcisiICIrbShnKHQuZXhwZWN0ZWQpLDEyOCl9KHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGU9dC5zdGFja1N0YXJ0RnVuY3Rpb258fHY7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9ZChlKSxhPW4uaW5kZXhPZigiXG4iK2kpO2lmKGE+PTApe3ZhciBvPW4uaW5kZXhPZigiXG4iLGErMSk7bj1uLnN1YnN0cmluZyhvKzEpfXRoaXMuc3RhY2s9bn19fSxvLmluaGVyaXRzKGguQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLGguZmFpbD12LGgub2s9eSxoLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZ2KHQsZSxyLCI9PSIsaC5lcXVhbCl9LGgubm90RXF1YWw9ZnVuY3Rpb24odCxlLHIpe3Q9PWUmJnYodCxlLHIsIiE9IixoLm5vdEVxdWFsKX0saC5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe3godCxlLCExKXx8dih0LGUsciwiZGVlcEVxdWFsIixoLmRlZXBFcXVhbCl9LGguZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt4KHQsZSwhMCl8fHYodCxlLHIsImRlZXBTdHJpY3RFcXVhbCIsaC5kZWVwU3RyaWN0RXF1YWwpfSxoLm5vdERlZXBFcXVhbD1mdW5jdGlvbih0LGUscil7eCh0LGUsITEpJiZ2KHQsZSxyLCJub3REZWVwRXF1YWwiLGgubm90RGVlcEVxdWFsKX0saC5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gdChlLHIsbil7eChlLHIsITApJiZ2KGUscixuLCJub3REZWVwU3RyaWN0RXF1YWwiLHQpfSxoLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmdih0LGUsciwiPT09IixoLnN0cmljdEVxdWFsKX0saC5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09PWUmJnYodCxlLHIsIiE9PSIsaC5ub3RTdHJpY3RFcXVhbCl9LGgudGhyb3dzPWZ1bmN0aW9uKHQsZSxyKXt3KCEwLHQsZSxyKX0saC5kb2VzTm90VGhyb3c9ZnVuY3Rpb24odCxlLHIpe3coITEsdCxlLHIpfSxoLmlmRXJyb3I9ZnVuY3Rpb24odCl7aWYodCl0aHJvdyB0fSxoLnN0cmljdD1uKChmdW5jdGlvbiB0KGUscil7ZXx8dihlLCEwLHIsIj09Iix0KX0pLGgse2VxdWFsOmguc3RyaWN0RXF1YWwsZGVlcEVxdWFsOmguZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOmgubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOmgubm90RGVlcFN0cmljdEVxdWFsfSksaC5zdHJpY3Quc3RyaWN0PWguc3RyaWN0O3ZhciBUPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClzLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsib2JqZWN0LWFzc2lnbiI6NDY2LCJ1dGlsLyI6Nzl9XSw3NzpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OmUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSx7fV0sNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIHQucmVhZFVJbnQ4fX0se31dLDc5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUsbil7KGZ1bmN0aW9uKCl7dmFyIGk9LyVbc2RqJV0vZztyLmZvcm1hdD1mdW5jdGlvbih0KXtpZighdih0KSl7Zm9yKHZhciBlPVtdLHI9MDtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWUucHVzaChzKGFyZ3VtZW50c1tyXSkpO3JldHVybiBlLmpvaW4oIiAiKX1yPTE7Zm9yKHZhciBuPWFyZ3VtZW50cyxhPW4ubGVuZ3RoLG89U3RyaW5nKHQpLnJlcGxhY2UoaSwoZnVuY3Rpb24odCl7aWYoIiUlIj09PXQpcmV0dXJuIiUiO2lmKHI+PWEpcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKG5bcisrXSk7Y2FzZSIlaiI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiB0fX0pKSxsPW5bcl07cjxhO2w9blsrK3JdKW0obCl8fCFiKGwpP28rPSIgIitsOm8rPSIgIitzKGwpO3JldHVybiBvfSxyLmRlcHJlY2F0ZT1mdW5jdGlvbih0LGkpe2lmKHkobi5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gci5kZXByZWNhdGUodCxpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09ZS5ub0RlcHJlY2F0aW9uKXJldHVybiB0O3ZhciBhPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFhKXtpZihlLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO2UudHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIgYSxvPXt9O2Z1bmN0aW9uIHModCxlKXt2YXIgbj17c2VlbjpbXSxzdHlsaXplOmN9O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYobi5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihuLmNvbG9ycz1hcmd1bWVudHNbM10pLGQoZSk/bi5zaG93SGlkZGVuPWU6ZSYmci5fZXh0ZW5kKG4sZSkseShuLnNob3dIaWRkZW4pJiYobi5zaG93SGlkZGVuPSExKSx5KG4uZGVwdGgpJiYobi5kZXB0aD0yKSx5KG4uY29sb3JzKSYmKG4uY29sb3JzPSExKSx5KG4uY3VzdG9tSW5zcGVjdCkmJihuLmN1c3RvbUluc3BlY3Q9ITApLG4uY29sb3JzJiYobi5zdHlsaXplPWwpLHUobix0LG4uZGVwdGgpfWZ1bmN0aW9uIGwodCxlKXt2YXIgcj1zLnN0eWxlc1tlXTtyZXR1cm4gcj8iXHgxYlsiK3MuY29sb3JzW3JdWzBdKyJtIit0KyJceDFiWyIrcy5jb2xvcnNbcl1bMV0rIm0iOnR9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0fWZ1bmN0aW9uIHUodCxlLG4pe2lmKHQuY3VzdG9tSW5zcGVjdCYmZSYmVChlLmluc3BlY3QpJiZlLmluc3BlY3QhPT1yLmluc3BlY3QmJighZS5jb25zdHJ1Y3Rvcnx8ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1lKSl7dmFyIGk9ZS5pbnNwZWN0KG4sdCk7cmV0dXJuIHYoaSl8fChpPXUodCxpLG4pKSxpfXZhciBhPWZ1bmN0aW9uKHQsZSl7aWYoeShlKSlyZXR1cm4gdC5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZih2KGUpKXt2YXIgcj0iJyIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gdC5zdHlsaXplKHIsInN0cmluZyIpfWlmKGcoZSkpcmV0dXJuIHQuc3R5bGl6ZSgiIitlLCJudW1iZXIiKTtpZihkKGUpKXJldHVybiB0LnN0eWxpemUoIiIrZSwiYm9vbGVhbiIpO2lmKG0oZSkpcmV0dXJuIHQuc3R5bGl6ZSgibnVsbCIsIm51bGwiKX0odCxlKTtpZihhKXJldHVybiBhO3ZhciBvPU9iamVjdC5rZXlzKGUpLHM9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtlW3RdPSEwfSkpLGV9KG8pO2lmKHQuc2hvd0hpZGRlbiYmKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLHcoZSkmJihvLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8by5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gZihlKTtpZigwPT09by5sZW5ndGgpe2lmKFQoZSkpe3ZhciBsPWUubmFtZT8iOiAiK2UubmFtZToiIjtyZXR1cm4gdC5zdHlsaXplKCJbRnVuY3Rpb24iK2wrIl0iLCJzcGVjaWFsIil9aWYoeChlKSlyZXR1cm4gdC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSwicmVnZXhwIik7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksImRhdGUiKTtpZih3KGUpKXJldHVybiBmKGUpfXZhciBjLGI9IiIsaz0hMSxBPVsieyIsIn0iXTsocChlKSYmKGs9ITAsQT1bIlsiLCJdIl0pLFQoZSkpJiYoYj0iIFtGdW5jdGlvbiIrKGUubmFtZT8iOiAiK2UubmFtZToiIikrIl0iKTtyZXR1cm4geChlKSYmKGI9IiAiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSksXyhlKSYmKGI9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwoZSkpLHcoZSkmJihiPSIgIitmKGUpKSwwIT09by5sZW5ndGh8fGsmJjAhPWUubGVuZ3RoP248MD94KGUpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSksInJlZ2V4cCIpOnQuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHQuc2Vlbi5wdXNoKGUpLGM9az9mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz1lLmxlbmd0aDtvPHM7KytvKUUoZSxTdHJpbmcobykpP2EucHVzaChoKHQsZSxyLG4sU3RyaW5nKG8pLCEwKSk6YS5wdXNoKCIiKTtyZXR1cm4gaS5mb3JFYWNoKChmdW5jdGlvbihpKXtpLm1hdGNoKC9eXGQrJC8pfHxhLnB1c2goaCh0LGUscixuLGksITApKX0pKSxhfSh0LGUsbixzLG8pOm8ubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gaCh0LGUsbixzLHIsayl9KSksdC5zZWVuLnBvcCgpLGZ1bmN0aW9uKHQsZSxyKXtpZih0LnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5pbmRleE9mKCJcbiIpPj0wJiYwLHQrZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0pLDApPjYwKXJldHVybiByWzBdKygiIj09PWU/IiI6ZSsiXG4gIikrIiAiK3Quam9pbigiLFxuICAiKSsiICIrclsxXTtyZXR1cm4gclswXStlKyIgIit0LmpvaW4oIiwgIikrIiAiK3JbMV19KGMsYixBKSk6QVswXStiK0FbMV19ZnVuY3Rpb24gZih0KXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrIl0ifWZ1bmN0aW9uIGgodCxlLHIsbixpLGEpe3ZhciBvLHMsbDtpZigobD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSkuZ2V0P3M9bC5zZXQ/dC5zdHlsaXplKCJbR2V0dGVyL1NldHRlcl0iLCJzcGVjaWFsIik6dC5zdHlsaXplKCJbR2V0dGVyXSIsInNwZWNpYWwiKTpsLnNldCYmKHM9dC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksRShuLGkpfHwobz0iWyIraSsiXSIpLHN8fCh0LnNlZW4uaW5kZXhPZihsLnZhbHVlKTwwPyhzPW0ocik/dSh0LGwudmFsdWUsbnVsbCk6dSh0LGwudmFsdWUsci0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKHM9YT9zLnNwbGl0KCJcbiIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiAgIit0fSkpLmpvaW4oIlxuIikuc3Vic3RyKDIpOiJcbiIrcy5zcGxpdCgiXG4iKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIgICAiK3R9KSkuam9pbigiXG4iKSk6cz10LnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLHkobykpe2lmKGEmJmkubWF0Y2goL15cZCskLykpcmV0dXJuIHM7KG89SlNPTi5zdHJpbmdpZnkoIiIraSkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KG89by5zdWJzdHIoMSxvLmxlbmd0aC0yKSxvPXQuc3R5bGl6ZShvLCJuYW1lIikpOihvPW8ucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLG89dC5zdHlsaXplKG8sInN0cmluZyIpKX1yZXR1cm4gbysiOiAiK3N9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KX1mdW5jdGlvbiBkKHQpe3JldHVybiJib29sZWFuIj09dHlwZW9mIHR9ZnVuY3Rpb24gbSh0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24gZyh0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiB4KHQpe3JldHVybiBiKHQpJiYiW29iamVjdCBSZWdFeHBdIj09PWsodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIF8odCl7cmV0dXJuIGIodCkmJiJbb2JqZWN0IERhdGVdIj09PWsodCl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gYih0KSYmKCJbb2JqZWN0IEVycm9yXSI9PT1rKHQpfHx0IGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIFQodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR9ZnVuY3Rpb24gayh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEEodCl7cmV0dXJuIHQ8MTA/IjAiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfXIuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoeShhKSYmKGE9ZS5lbnYuTk9ERV9ERUJVR3x8IiIpLHQ9dC50b1VwcGVyQ2FzZSgpLCFvW3RdKWlmKG5ldyBSZWdFeHAoIlxcYiIrdCsiXFxiIiwiaSIpLnRlc3QoYSkpe3ZhciBuPWUucGlkO29bdF09ZnVuY3Rpb24oKXt2YXIgZT1yLmZvcm1hdC5hcHBseShyLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcigiJXMgJWQ6ICVzIix0LG4sZSl9fWVsc2Ugb1t0XT1mdW5jdGlvbigpe307cmV0dXJuIG9bdF19LHIuaW5zcGVjdD1zLHMuY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxzLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHIuaXNBcnJheT1wLHIuaXNCb29sZWFuPWQsci5pc051bGw9bSxyLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10fSxyLmlzTnVtYmVyPWcsci5pc1N0cmluZz12LHIuaXNTeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fSxyLmlzVW5kZWZpbmVkPXksci5pc1JlZ0V4cD14LHIuaXNPYmplY3Q9YixyLmlzRGF0ZT1fLHIuaXNFcnJvcj13LHIuaXNGdW5jdGlvbj1ULHIuaXNQcmltaXRpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8InN5bWJvbCI9PXR5cGVvZiB0fHx2b2lkIDA9PT10fSxyLmlzQnVmZmVyPXQoIi4vc3VwcG9ydC9pc0J1ZmZlciIpO3ZhciBNPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gUygpe3ZhciB0PW5ldyBEYXRlLGU9W0EodC5nZXRIb3VycygpKSxBKHQuZ2V0TWludXRlcygpKSxBKHQuZ2V0U2Vjb25kcygpKV0uam9pbigiOiIpO3JldHVyblt0LmdldERhdGUoKSxNW3QuZ2V0TW9udGgoKV0sZV0uam9pbigiICIpfWZ1bmN0aW9uIEUodCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9ci5sb2c9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiJXMgLSAlcyIsUygpLHIuZm9ybWF0LmFwcGx5KHIsYXJndW1lbnRzKSl9LHIuaW5oZXJpdHM9dCgiaW5oZXJpdHMiKSxyLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IWIoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc3VwcG9ydC9pc0J1ZmZlciI6NzgsX3Byb2Nlc3M6NTA0LGluaGVyaXRzOjc3fV0sODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGF0b2IodCl9fSx7fV0sODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLGE9bmV3IEFycmF5KHIrMSksbz0wO288cjsrK28pe2Zvcih2YXIgcz1uZXcgQXJyYXkocisxKSxsPTA7bDw9cjsrK2wpc1tsXT10W2xdW29dO2Fbb109c31hW3JdPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzw9cjsrK28pYVtyXVtvXT0xO3ZhciBjPW5ldyBBcnJheShyKzEpO2ZvcihvPTA7bzxyOysrbyljW29dPWVbb107Y1tyXT0xO3ZhciB1PW4oYSxjKSxmPWkodVtyKzFdKTswPT09ZiYmKGY9MSk7dmFyIGg9bmV3IEFycmF5KHIrMSk7Zm9yKG89MDtvPD1yOysrbyloW29dPWkodVtvXSkvZjtyZXR1cm4gaH07dmFyIG49dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7KytyKWUrPXRbcl07cmV0dXJuIGV9fSx7InJvYnVzdC1saW5lYXItc29sdmUiOjUyM31dLDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuYnl0ZUxlbmd0aD1mdW5jdGlvbih0KXt2YXIgZT1jKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIDMqKHIrbikvNC1ufSxyLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj1jKHQpLG89blswXSxzPW5bMV0sbD1uZXcgYShmdW5jdGlvbih0LGUscil7cmV0dXJuIDMqKGUrcikvNC1yfSgwLG8scykpLHU9MCxmPXM+MD9vLTQ6bztmb3Iocj0wO3I8ZjtyKz00KWU9aVt0LmNoYXJDb2RlQXQocildPDwxOHxpW3QuY2hhckNvZGVBdChyKzEpXTw8MTJ8aVt0LmNoYXJDb2RlQXQocisyKV08PDZ8aVt0LmNoYXJDb2RlQXQociszKV0sbFt1KytdPWU+PjE2JjI1NSxsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlOzI9PT1zJiYoZT1pW3QuY2hhckNvZGVBdChyKV08PDJ8aVt0LmNoYXJDb2RlQXQocisxKV0+PjQsbFt1KytdPTI1NSZlKTsxPT09cyYmKGU9aVt0LmNoYXJDb2RlQXQocildPDwxMHxpW3QuY2hhckNvZGVBdChyKzEpXTw8NHxpW3QuY2hhckNvZGVBdChyKzIpXT4+MixsW3UrK109ZT4+OCYyNTUsbFt1KytdPTI1NSZlKTtyZXR1cm4gbH0sci5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLGk9ciUzLGE9W10sbz0wLHM9ci1pO288cztvKz0xNjM4MylhLnB1c2godSh0LG8sbysxNjM4Mz5zP3M6bysxNjM4MykpOzE9PT1pPyhlPXRbci0xXSxhLnB1c2gobltlPj4yXStuW2U8PDQmNjNdKyI9PSIpKToyPT09aSYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGEucHVzaChuW2U+PjEwXStuW2U+PjQmNjNdK25bZTw8MiY2M10rIj0iKSk7cmV0dXJuIGEuam9pbigiIil9O2Zvcih2YXIgbj1bXSxpPVtdLGE9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10saVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgcj10LmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXImJihyPWUpLFtyLHI9PT1lPzA6NC1yJTRdfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgaSxhLG89W10scz1lO3M8cjtzKz0zKWk9KHRbc108PDE2JjE2NzExNjgwKSsodFtzKzFdPDw4JjY1MjgwKSsoMjU1JnRbcysyXSksby5wdXNoKG5bKGE9aSk+PjE4JjYzXStuW2E+PjEyJjYzXStuW2E+PjYmNjNdK25bNjMmYV0pO3JldHVybiBvLmpvaW4oIiIpfWlbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGlbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSx7fV0sODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5hZGQoZVswXS5tdWwodFsxXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ubXVsKGVbMV0pLmNtcChlWzBdLm11bCh0WzFdKSl9fSx7fV0sODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKSx0WzFdLm11bChlWzBdKSl9fSx7Ii4vbGliL3JhdGlvbmFsaXplIjo5M31dLDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtcmF0IiksaT10KCIuL2xpYi9pcy1ibiIpLGE9dCgiLi9saWIvbnVtLXRvLWJuIiksbz10KCIuL2xpYi9zdHItdG8tYm4iKSxzPXQoIi4vbGliL3JhdGlvbmFsaXplIiksbD10KCIuL2RpdiIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7aWYobihlKSlyZXR1cm4gcj9sKGUsdChyKSk6W2VbMF0uY2xvbmUoKSxlWzFdLmNsb25lKCldO3ZhciBjLHUsZj0wO2lmKGkoZSkpYz1lLmNsb25lKCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpYz1vKGUpO2Vsc2V7aWYoMD09PWUpcmV0dXJuW2EoMCksYSgxKV07aWYoZT09PU1hdGguZmxvb3IoZSkpYz1hKGUpO2Vsc2V7Zm9yKDtlIT09TWF0aC5mbG9vcihlKTspZSo9TWF0aC5wb3coMiwyNTYpLGYtPTI1NjtjPWEoZSl9fWlmKG4ocikpYy5tdWwoclsxXSksdT1yWzBdLmNsb25lKCk7ZWxzZSBpZihpKHIpKXU9ci5jbG9uZSgpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiByKXU9byhyKTtlbHNlIGlmKHIpaWYocj09PU1hdGguZmxvb3IocikpdT1hKHIpO2Vsc2V7Zm9yKDtyIT09TWF0aC5mbG9vcihyKTspcio9TWF0aC5wb3coMiwyNTYpLGYrPTI1Njt1PWEocil9ZWxzZSB1PWEoMSk7Zj4wP2M9Yy51c2hsbihmKTpmPDAmJih1PXUudXNobG4oLWYpKTtyZXR1cm4gcyhjLHUpfX0seyIuL2RpdiI6ODUsIi4vaXMtcmF0Ijo4NywiLi9saWIvaXMtYm4iOjkxLCIuL2xpYi9udW0tdG8tYm4iOjkyLCIuL2xpYi9yYXRpb25hbGl6ZSI6OTMsIi4vbGliL3N0ci10by1ibiI6OTR9XSw4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9pcy1ibiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmMj09PXQubGVuZ3RoJiZuKHRbMF0pJiZuKHRbMV0pfX0seyIuL2xpYi9pcy1ibiI6OTF9XSw4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJibi5qcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5jbXAobmV3IG4oMCkpfX0seyJibi5qcyI6OTZ9XSw4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGgscj10LndvcmRzLGk9MDtpZigxPT09ZSlpPXJbMF07ZWxzZSBpZigyPT09ZSlpPXJbMF0rNjcxMDg4NjQqclsxXTtlbHNlIGZvcih2YXIgYT0wO2E8ZTthKyspe3ZhciBvPXJbYV07aSs9bypNYXRoLnBvdyg2NzEwODg2NCxhKX1yZXR1cm4gbih0KSppfX0seyIuL2JuLXNpZ24iOjg4fV0sOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZG91YmxlLWJpdHMiKSxpPXQoImJpdC10d2lkZGxlIikuY291bnRUcmFpbGluZ1plcm9zO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pKG4ubG8odCkpO2lmKGU8MzIpcmV0dXJuIGU7dmFyIHI9aShuLmhpKHQpKTtpZihyPjIwKXJldHVybiA1MjtyZXR1cm4gciszMn19LHsiYml0LXR3aWRkbGUiOjEwMSwiZG91YmxlLWJpdHMiOjE3NH1dLDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3QoImJuLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0JiYib2JqZWN0Ij09dHlwZW9mIHQmJkJvb2xlYW4odC53b3Jkcyl9fSx7ImJuLmpzIjo5Nn1dLDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJuLmpzIiksaT10KCJkb3VibGUtYml0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLmV4cG9uZW50KHQpO3JldHVybiBlPDUyP25ldyBuKHQpOm5ldyBuKHQqTWF0aC5wb3coMiw1Mi1lKSkudXNobG4oZS01Mil9fSx7ImJuLmpzIjo5NiwiZG91YmxlLWJpdHMiOjE3NH1dLDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbnVtLXRvLWJuIiksaT10KCIuL2JuLXNpZ24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKHQpLGE9aShlKTtpZigwPT09cilyZXR1cm5bbigwKSxuKDEpXTtpZigwPT09YSlyZXR1cm5bbigwKSxuKDApXTthPDAmJih0PXQubmVnKCksZT1lLm5lZygpKTt2YXIgbz10LmdjZChlKTtpZihvLmNtcG4oMSkpcmV0dXJuW3QuZGl2KG8pLGUuZGl2KG8pXTtyZXR1cm5bdCxlXX19LHsiLi9ibi1zaWduIjo4OCwiLi9udW0tdG8tYm4iOjkyfV0sOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYm4uanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuKHQpfX0seyJibi5qcyI6OTZ9XSw5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9yYXRpb25hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuKHRbMF0ubXVsKGVbMF0pLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sOTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIGEodCxlLHIpe2lmKGEuaXNCTih0KSlyZXR1cm4gdDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09dCYmKCJsZSIhPT1lJiYiYmUiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8ImJlIikpfXZhciBvOyJvYmplY3QiPT10eXBlb2YgZT9lLmV4cG9ydHM9YTpyLkJOPWEsYS5CTj1hLGEud29yZFNpemU9MjY7dHJ5e289InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJnZvaWQgMCE9PXdpbmRvdy5CdWZmZXI/d2luZG93LkJ1ZmZlcjp0KCJidWZmZXIiKS5CdWZmZXJ9Y2F0Y2godCl7fWZ1bmN0aW9uIHModCxlKXt2YXIgcj10LmNoYXJDb2RlQXQoZSk7cmV0dXJuIHI+PTY1JiZyPD03MD9yLTU1OnI+PTk3JiZyPD0xMDI/ci04NzpyLTQ4JjE1fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPXModCxyKTtyZXR1cm4gci0xPj1lJiYobnw9cyh0LHItMSk8PDQpLG59ZnVuY3Rpb24gYyh0LGUscixuKXtmb3IodmFyIGk9MCxhPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGE7bysrKXt2YXIgcz10LmNoYXJDb2RlQXQobyktNDg7aSo9bixpKz1zPj00OT9zLTQ5KzEwOnM+PTE3P3MtMTcrMTA6c31yZXR1cm4gaX1hLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhfHxudWxsIT09dCYmIm9iamVjdCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09YS53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sYS5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LGEubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxhLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZigib2JqZWN0Ij09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7ImhleCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KTt2YXIgaT0wOyItIj09PSh0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaSsrLHRoaXMubmVnYXRpdmU9MSksaTx0Lmxlbmd0aCYmKDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkscik6KHRoaXMuX3BhcnNlQmFzZSh0LGUsaSksImxlIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpKSl9LGEucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sYS5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBhLG8scz0wO2lmKCJiZSI9PT1yKWZvcihpPXQubGVuZ3RoLTEsYT0wO2k+PTA7aS09MylvPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1thXXw9bzw8cyY2NzEwODg2Myx0aGlzLndvcmRzW2ErMV09bz4+PjI2LXMmNjcxMDg4NjMsKHMrPTI0KT49MjYmJihzLT0yNixhKyspO2Vsc2UgaWYoImxlIj09PXIpZm9yKGk9MCxhPTA7aTx0Lmxlbmd0aDtpKz0zKW89dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW2FdfD1vPDxzJjY3MTA4ODYzLHRoaXMud29yZHNbYSsxXT1vPj4+MjYtcyY2NzEwODg2Mywocys9MjQpPj0yNiYmKHMtPTI2LGErKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIG49MDtuPHRoaXMubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPTA7dmFyIGksYT0wLG89MDtpZigiYmUiPT09cilmb3Iobj10Lmxlbmd0aC0xO24+PWU7bi09MilpPWwodCxlLG4pPDxhLHRoaXMud29yZHNbb118PTY3MTA4ODYzJmksYT49MTg/KGEtPTE4LG8rPTEsdGhpcy53b3Jkc1tvXXw9aT4+PjI2KTphKz04O2Vsc2UgZm9yKG49KHQubGVuZ3RoLWUpJTI9PTA/ZSsxOmU7bjx0Lmxlbmd0aDtuKz0yKWk9bCh0LGUsbik8PGEsdGhpcy53b3Jkc1tvXXw9NjcxMDg4NjMmaSxhPj0xOD8oYS09MTgsbys9MSx0aGlzLndvcmRzW29dfD1pPj4+MjYpOmErPTg7dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIGE9dC5sZW5ndGgtcixvPWElbixzPU1hdGgubWluKGEsYS1vKStyLGw9MCx1PXI7dTxzO3UrPW4pbD1jKHQsdSx1K24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK2w8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bDp0aGlzLl9pYWRkbihsKTtpZigwIT09byl7dmFyIGY9MTtmb3IobD1jKHQsdSx0Lmxlbmd0aCxlKSx1PTA7dTxvO3UrKylmKj1lO3RoaXMuaW11bG4oZiksdGhpcy53b3Jkc1swXStsPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPWw6dGhpcy5faWFkZG4obCl9dGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxhLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sYS5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxhLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sYS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgdT1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxmPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGg9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gcCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLGE9MHxlLndvcmRzWzBdLG89aSphLHM9NjcxMDg4NjMmbyxsPW8vNjcxMDg4NjR8MDtyLndvcmRzWzBdPXM7Zm9yKHZhciBjPTE7YzxuO2MrKyl7Zm9yKHZhciB1PWw+Pj4yNixmPTY3MTA4ODYzJmwsaD1NYXRoLm1pbihjLGUubGVuZ3RoLTEpLHA9TWF0aC5tYXgoMCxjLXQubGVuZ3RoKzEpO3A8PWg7cCsrKXt2YXIgZD1jLXB8MDt1Kz0obz0oaT0wfHQud29yZHNbZF0pKihhPTB8ZS53b3Jkc1twXSkrZikvNjcxMDg4NjR8MCxmPTY3MTA4ODYzJm99ci53b3Jkc1tjXT0wfGYsbD0wfHV9cmV0dXJuIDAhPT1sP3Iud29yZHNbY109MHxsOnIubGVuZ3RoLS0sci5zdHJpcCgpfWEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI7aWYoZT0wfGV8fDEsMTY9PT0odD10fHwxMCl8fCJoZXgiPT09dCl7cj0iIjtmb3IodmFyIGk9MCxhPTAsbz0wO288dGhpcy5sZW5ndGg7bysrKXt2YXIgcz10aGlzLndvcmRzW29dLGw9KDE2Nzc3MjE1JihzPDxpfGEpKS50b1N0cmluZygxNik7cj0wIT09KGE9cz4+PjI0LWkmMTY3NzcyMTUpfHxvIT09dGhpcy5sZW5ndGgtMT91WzYtbC5sZW5ndGhdK2wrcjpsK3IsKGkrPTIpPj0yNiYmKGktPTI2LG8tLSl9Zm9yKDAhPT1hJiYocj1hLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT0wOylyPSIwIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9Ii0iK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIGM9Zlt0XSxwPWhbdF07cj0iIjt2YXIgZD10aGlzLmNsb25lKCk7Zm9yKGQubmVnYXRpdmU9MDshZC5pc1plcm8oKTspe3ZhciBtPWQubW9kbihwKS50b1N0cmluZyh0KTtyPShkPWQuaWRpdm4ocCkpLmlzWmVybygpP20rcjp1W2MtbS5sZW5ndGhdK20rcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9IjAiK3IpO3IubGVuZ3RoJWUhPTA7KXI9IjAiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj0iLSIrcikscn1uKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGEucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sYS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxhLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKHZvaWQgMCE9PW8pLHRoaXMudG9BcnJheUxpa2Uobyx0LGUpfSxhLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sYS5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLGE9cnx8TWF0aC5tYXgoMSxpKTtuKGk8PWEsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxuKGE+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBvLHMsbD0ibGUiPT09ZSxjPW5ldyB0KGEpLHU9dGhpcy5jbG9uZSgpO2lmKGwpe2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbc109bztmb3IoO3M8YTtzKyspY1tzXT0wfWVsc2V7Zm9yKHM9MDtzPGEtaTtzKyspY1tzXT0wO2ZvcihzPTA7IXUuaXNaZXJvKCk7cysrKW89dS5hbmRsbigyNTUpLHUuaXVzaHJuKDgpLGNbYS1zLTFdPW99cmV0dXJuIGN9LE1hdGguY2x6MzI/YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06YS5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LGEucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09KDEmZSkmJnIrKyxyfSxhLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sYS5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LGEucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGEucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGEucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxhLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sYS5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sYS5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LGEucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LGEucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LGEucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LGEucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LGEucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LGEucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxhLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxhLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxhLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxhLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl09ZT90aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG47aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKWU9KDB8ci53b3Jkc1thXSkrKDB8bi53b3Jkc1thXSkraSx0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmYTxyLmxlbmd0aDthKyspZT0oMHxyLndvcmRzW2FdKStpLHRoaXMud29yZHNbYV09NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO2E8ci5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09ci53b3Jkc1thXTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LGEucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByLG4saT10aGlzLmNtcCh0KTtpZigwPT09aSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7aT4wPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBhPTAsbz0wO288bi5sZW5ndGg7bysrKWE9KGU9KDB8ci53b3Jkc1tvXSktKDB8bi53b3Jkc1tvXSkrYSk+PjI2LHRoaXMud29yZHNbb109NjcxMDg4NjMmZTtmb3IoOzAhPT1hJiZvPHIubGVuZ3RoO28rKylhPShlPSgwfHIud29yZHNbb10pK2EpPj4yNix0aGlzLndvcmRzW29dPTY3MTA4ODYzJmU7aWYoMD09PWEmJm88ci5sZW5ndGgmJnIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxvKSxyIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxhLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgZD1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG89dC53b3JkcyxzPWUud29yZHMsbD1yLndvcmRzLGM9MCx1PTB8b1swXSxmPTgxOTEmdSxoPXU+Pj4xMyxwPTB8b1sxXSxkPTgxOTEmcCxtPXA+Pj4xMyxnPTB8b1syXSx2PTgxOTEmZyx5PWc+Pj4xMyx4PTB8b1szXSxiPTgxOTEmeCxfPXg+Pj4xMyx3PTB8b1s0XSxUPTgxOTEmdyxrPXc+Pj4xMyxBPTB8b1s1XSxNPTgxOTEmQSxTPUE+Pj4xMyxFPTB8b1s2XSxMPTgxOTEmRSxDPUU+Pj4xMyxQPTB8b1s3XSxJPTgxOTEmUCxPPVA+Pj4xMyx6PTB8b1s4XSxEPTgxOTEmeixSPXo+Pj4xMyxGPTB8b1s5XSxCPTgxOTEmRixOPUY+Pj4xMyxqPTB8c1swXSxVPTgxOTEmaixWPWo+Pj4xMyxIPTB8c1sxXSxxPTgxOTEmSCxHPUg+Pj4xMyxZPTB8c1syXSxXPTgxOTEmWSxYPVk+Pj4xMyxaPTB8c1szXSxKPTgxOTEmWixLPVo+Pj4xMyxRPTB8c1s0XSwkPTgxOTEmUSx0dD1RPj4+MTMsZXQ9MHxzWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfHNbNl0sYXQ9ODE5MSZpdCxvdD1pdD4+PjEzLHN0PTB8c1s3XSxsdD04MTkxJnN0LGN0PXN0Pj4+MTMsdXQ9MHxzWzhdLGZ0PTgxOTEmdXQsaHQ9dXQ+Pj4xMyxwdD0wfHNbOV0sZHQ9ODE5MSZwdCxtdD1wdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5O3ZhciBndD0oYysobj1NYXRoLmltdWwoZixVKSl8MCkrKCg4MTkxJihpPShpPU1hdGguaW11bChmLFYpKStNYXRoLmltdWwoaCxVKXwwKSk8PDEzKXwwO2M9KChhPU1hdGguaW11bChoLFYpKSsoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoZCxVKSxpPShpPU1hdGguaW11bChkLFYpKStNYXRoLmltdWwobSxVKXwwLGE9TWF0aC5pbXVsKG0sVik7dmFyIHZ0PShjKyhuPW4rTWF0aC5pbXVsKGYscSl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsRyl8MCkrTWF0aC5pbXVsKGgscSl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLEcpfDApKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bCh2LFUpLGk9KGk9TWF0aC5pbXVsKHYsVikpK01hdGguaW11bCh5LFUpfDAsYT1NYXRoLmltdWwoeSxWKSxuPW4rTWF0aC5pbXVsKGQscSl8MCxpPShpPWkrTWF0aC5pbXVsKGQsRyl8MCkrTWF0aC5pbXVsKG0scSl8MCxhPWErTWF0aC5pbXVsKG0sRyl8MDt2YXIgeXQ9KGMrKG49bitNYXRoLmltdWwoZixXKXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixYKXwwKStNYXRoLmltdWwoaCxXKXwwKSk8PDEzKXwwO2M9KChhPWErTWF0aC5pbXVsKGgsWCl8MCkrKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGIsVSksaT0oaT1NYXRoLmltdWwoYixWKSkrTWF0aC5pbXVsKF8sVSl8MCxhPU1hdGguaW11bChfLFYpLG49bitNYXRoLmltdWwodixxKXwwLGk9KGk9aStNYXRoLmltdWwodixHKXwwKStNYXRoLmltdWwoeSxxKXwwLGE9YStNYXRoLmltdWwoeSxHKXwwLG49bitNYXRoLmltdWwoZCxXKXwwLGk9KGk9aStNYXRoLmltdWwoZCxYKXwwKStNYXRoLmltdWwobSxXKXwwLGE9YStNYXRoLmltdWwobSxYKXwwO3ZhciB4dD0oYysobj1uK01hdGguaW11bChmLEopfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLEspfDApK01hdGguaW11bChoLEopfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxLKXwwKSsoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVCxVKSxpPShpPU1hdGguaW11bChULFYpKStNYXRoLmltdWwoayxVKXwwLGE9TWF0aC5pbXVsKGssViksbj1uK01hdGguaW11bChiLHEpfDAsaT0oaT1pK01hdGguaW11bChiLEcpfDApK01hdGguaW11bChfLHEpfDAsYT1hK01hdGguaW11bChfLEcpfDAsbj1uK01hdGguaW11bCh2LFcpfDAsaT0oaT1pK01hdGguaW11bCh2LFgpfDApK01hdGguaW11bCh5LFcpfDAsYT1hK01hdGguaW11bCh5LFgpfDAsbj1uK01hdGguaW11bChkLEopfDAsaT0oaT1pK01hdGguaW11bChkLEspfDApK01hdGguaW11bChtLEopfDAsYT1hK01hdGguaW11bChtLEspfDA7dmFyIGJ0PShjKyhuPW4rTWF0aC5pbXVsKGYsJCl8MCl8MCkrKCg4MTkxJihpPShpPWkrTWF0aC5pbXVsKGYsdHQpfDApK01hdGguaW11bChoLCQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCx0dCl8MCkrKGk+Pj4xMyl8MCkrKGJ0Pj4+MjYpfDAsYnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKE0sVSksaT0oaT1NYXRoLmltdWwoTSxWKSkrTWF0aC5pbXVsKFMsVSl8MCxhPU1hdGguaW11bChTLFYpLG49bitNYXRoLmltdWwoVCxxKXwwLGk9KGk9aStNYXRoLmltdWwoVCxHKXwwKStNYXRoLmltdWwoayxxKXwwLGE9YStNYXRoLmltdWwoayxHKXwwLG49bitNYXRoLmltdWwoYixXKXwwLGk9KGk9aStNYXRoLmltdWwoYixYKXwwKStNYXRoLmltdWwoXyxXKXwwLGE9YStNYXRoLmltdWwoXyxYKXwwLG49bitNYXRoLmltdWwodixKKXwwLGk9KGk9aStNYXRoLmltdWwodixLKXwwKStNYXRoLmltdWwoeSxKKXwwLGE9YStNYXRoLmltdWwoeSxLKXwwLG49bitNYXRoLmltdWwoZCwkKXwwLGk9KGk9aStNYXRoLmltdWwoZCx0dCl8MCkrTWF0aC5pbXVsKG0sJCl8MCxhPWErTWF0aC5pbXVsKG0sdHQpfDA7dmFyIF90PShjKyhuPW4rTWF0aC5pbXVsKGYscnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG50KXwwKStNYXRoLmltdWwoaCxydCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG50KXwwKSsoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoTCxVKSxpPShpPU1hdGguaW11bChMLFYpKStNYXRoLmltdWwoQyxVKXwwLGE9TWF0aC5pbXVsKEMsViksbj1uK01hdGguaW11bChNLHEpfDAsaT0oaT1pK01hdGguaW11bChNLEcpfDApK01hdGguaW11bChTLHEpfDAsYT1hK01hdGguaW11bChTLEcpfDAsbj1uK01hdGguaW11bChULFcpfDAsaT0oaT1pK01hdGguaW11bChULFgpfDApK01hdGguaW11bChrLFcpfDAsYT1hK01hdGguaW11bChrLFgpfDAsbj1uK01hdGguaW11bChiLEopfDAsaT0oaT1pK01hdGguaW11bChiLEspfDApK01hdGguaW11bChfLEopfDAsYT1hK01hdGguaW11bChfLEspfDAsbj1uK01hdGguaW11bCh2LCQpfDAsaT0oaT1pK01hdGguaW11bCh2LHR0KXwwKStNYXRoLmltdWwoeSwkKXwwLGE9YStNYXRoLmltdWwoeSx0dCl8MCxuPW4rTWF0aC5pbXVsKGQscnQpfDAsaT0oaT1pK01hdGguaW11bChkLG50KXwwKStNYXRoLmltdWwobSxydCl8MCxhPWErTWF0aC5pbXVsKG0sbnQpfDA7dmFyIHd0PShjKyhuPW4rTWF0aC5pbXVsKGYsYXQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG90KXwwKStNYXRoLmltdWwoaCxhdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG90KXwwKSsoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoSSxVKSxpPShpPU1hdGguaW11bChJLFYpKStNYXRoLmltdWwoTyxVKXwwLGE9TWF0aC5pbXVsKE8sViksbj1uK01hdGguaW11bChMLHEpfDAsaT0oaT1pK01hdGguaW11bChMLEcpfDApK01hdGguaW11bChDLHEpfDAsYT1hK01hdGguaW11bChDLEcpfDAsbj1uK01hdGguaW11bChNLFcpfDAsaT0oaT1pK01hdGguaW11bChNLFgpfDApK01hdGguaW11bChTLFcpfDAsYT1hK01hdGguaW11bChTLFgpfDAsbj1uK01hdGguaW11bChULEopfDAsaT0oaT1pK01hdGguaW11bChULEspfDApK01hdGguaW11bChrLEopfDAsYT1hK01hdGguaW11bChrLEspfDAsbj1uK01hdGguaW11bChiLCQpfDAsaT0oaT1pK01hdGguaW11bChiLHR0KXwwKStNYXRoLmltdWwoXywkKXwwLGE9YStNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHYscnQpfDAsaT0oaT1pK01hdGguaW11bCh2LG50KXwwKStNYXRoLmltdWwoeSxydCl8MCxhPWErTWF0aC5pbXVsKHksbnQpfDAsbj1uK01hdGguaW11bChkLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoZCxvdCl8MCkrTWF0aC5pbXVsKG0sYXQpfDAsYT1hK01hdGguaW11bChtLG90KXwwO3ZhciBUdD0oYysobj1uK01hdGguaW11bChmLGx0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoZixjdCl8MCkrTWF0aC5pbXVsKGgsbHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoaCxjdCl8MCkrKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEQsVSksaT0oaT1NYXRoLmltdWwoRCxWKSkrTWF0aC5pbXVsKFIsVSl8MCxhPU1hdGguaW11bChSLFYpLG49bitNYXRoLmltdWwoSSxxKXwwLGk9KGk9aStNYXRoLmltdWwoSSxHKXwwKStNYXRoLmltdWwoTyxxKXwwLGE9YStNYXRoLmltdWwoTyxHKXwwLG49bitNYXRoLmltdWwoTCxXKXwwLGk9KGk9aStNYXRoLmltdWwoTCxYKXwwKStNYXRoLmltdWwoQyxXKXwwLGE9YStNYXRoLmltdWwoQyxYKXwwLG49bitNYXRoLmltdWwoTSxKKXwwLGk9KGk9aStNYXRoLmltdWwoTSxLKXwwKStNYXRoLmltdWwoUyxKKXwwLGE9YStNYXRoLmltdWwoUyxLKXwwLG49bitNYXRoLmltdWwoVCwkKXwwLGk9KGk9aStNYXRoLmltdWwoVCx0dCl8MCkrTWF0aC5pbXVsKGssJCl8MCxhPWErTWF0aC5pbXVsKGssdHQpfDAsbj1uK01hdGguaW11bChiLHJ0KXwwLGk9KGk9aStNYXRoLmltdWwoYixudCl8MCkrTWF0aC5pbXVsKF8scnQpfDAsYT1hK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwodixhdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsb3QpfDApK01hdGguaW11bCh5LGF0KXwwLGE9YStNYXRoLmltdWwoeSxvdCl8MCxuPW4rTWF0aC5pbXVsKGQsbHQpfDAsaT0oaT1pK01hdGguaW11bChkLGN0KXwwKStNYXRoLmltdWwobSxsdCl8MCxhPWErTWF0aC5pbXVsKG0sY3QpfDA7dmFyIGt0PShjKyhuPW4rTWF0aC5pbXVsKGYsZnQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLGh0KXwwKStNYXRoLmltdWwoaCxmdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLGh0KXwwKSsoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixVKSxpPShpPU1hdGguaW11bChCLFYpKStNYXRoLmltdWwoTixVKXwwLGE9TWF0aC5pbXVsKE4sViksbj1uK01hdGguaW11bChELHEpfDAsaT0oaT1pK01hdGguaW11bChELEcpfDApK01hdGguaW11bChSLHEpfDAsYT1hK01hdGguaW11bChSLEcpfDAsbj1uK01hdGguaW11bChJLFcpfDAsaT0oaT1pK01hdGguaW11bChJLFgpfDApK01hdGguaW11bChPLFcpfDAsYT1hK01hdGguaW11bChPLFgpfDAsbj1uK01hdGguaW11bChMLEopfDAsaT0oaT1pK01hdGguaW11bChMLEspfDApK01hdGguaW11bChDLEopfDAsYT1hK01hdGguaW11bChDLEspfDAsbj1uK01hdGguaW11bChNLCQpfDAsaT0oaT1pK01hdGguaW11bChNLHR0KXwwKStNYXRoLmltdWwoUywkKXwwLGE9YStNYXRoLmltdWwoUyx0dCl8MCxuPW4rTWF0aC5pbXVsKFQscnQpfDAsaT0oaT1pK01hdGguaW11bChULG50KXwwKStNYXRoLmltdWwoayxydCl8MCxhPWErTWF0aC5pbXVsKGssbnQpfDAsbj1uK01hdGguaW11bChiLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoYixvdCl8MCkrTWF0aC5pbXVsKF8sYXQpfDAsYT1hK01hdGguaW11bChfLG90KXwwLG49bitNYXRoLmltdWwodixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKHYsY3QpfDApK01hdGguaW11bCh5LGx0KXwwLGE9YStNYXRoLmltdWwoeSxjdCl8MCxuPW4rTWF0aC5pbXVsKGQsZnQpfDAsaT0oaT1pK01hdGguaW11bChkLGh0KXwwKStNYXRoLmltdWwobSxmdCl8MCxhPWErTWF0aC5pbXVsKG0saHQpfDA7dmFyIEF0PShjKyhuPW4rTWF0aC5pbXVsKGYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChmLG10KXwwKStNYXRoLmltdWwoaCxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChoLG10KXwwKSsoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPShpPU1hdGguaW11bChCLEcpKStNYXRoLmltdWwoTixxKXwwLGE9TWF0aC5pbXVsKE4sRyksbj1uK01hdGguaW11bChELFcpfDAsaT0oaT1pK01hdGguaW11bChELFgpfDApK01hdGguaW11bChSLFcpfDAsYT1hK01hdGguaW11bChSLFgpfDAsbj1uK01hdGguaW11bChJLEopfDAsaT0oaT1pK01hdGguaW11bChJLEspfDApK01hdGguaW11bChPLEopfDAsYT1hK01hdGguaW11bChPLEspfDAsbj1uK01hdGguaW11bChMLCQpfDAsaT0oaT1pK01hdGguaW11bChMLHR0KXwwKStNYXRoLmltdWwoQywkKXwwLGE9YStNYXRoLmltdWwoQyx0dCl8MCxuPW4rTWF0aC5pbXVsKE0scnQpfDAsaT0oaT1pK01hdGguaW11bChNLG50KXwwKStNYXRoLmltdWwoUyxydCl8MCxhPWErTWF0aC5pbXVsKFMsbnQpfDAsbj1uK01hdGguaW11bChULGF0KXwwLGk9KGk9aStNYXRoLmltdWwoVCxvdCl8MCkrTWF0aC5pbXVsKGssYXQpfDAsYT1hK01hdGguaW11bChrLG90KXwwLG49bitNYXRoLmltdWwoYixsdCl8MCxpPShpPWkrTWF0aC5pbXVsKGIsY3QpfDApK01hdGguaW11bChfLGx0KXwwLGE9YStNYXRoLmltdWwoXyxjdCl8MCxuPW4rTWF0aC5pbXVsKHYsZnQpfDAsaT0oaT1pK01hdGguaW11bCh2LGh0KXwwKStNYXRoLmltdWwoeSxmdCl8MCxhPWErTWF0aC5pbXVsKHksaHQpfDA7dmFyIE10PShjKyhuPW4rTWF0aC5pbXVsKGQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChkLG10KXwwKStNYXRoLmltdWwobSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChtLG10KXwwKSsoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixXKSxpPShpPU1hdGguaW11bChCLFgpKStNYXRoLmltdWwoTixXKXwwLGE9TWF0aC5pbXVsKE4sWCksbj1uK01hdGguaW11bChELEopfDAsaT0oaT1pK01hdGguaW11bChELEspfDApK01hdGguaW11bChSLEopfDAsYT1hK01hdGguaW11bChSLEspfDAsbj1uK01hdGguaW11bChJLCQpfDAsaT0oaT1pK01hdGguaW11bChJLHR0KXwwKStNYXRoLmltdWwoTywkKXwwLGE9YStNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKEwscnQpfDAsaT0oaT1pK01hdGguaW11bChMLG50KXwwKStNYXRoLmltdWwoQyxydCl8MCxhPWErTWF0aC5pbXVsKEMsbnQpfDAsbj1uK01hdGguaW11bChNLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTSxvdCl8MCkrTWF0aC5pbXVsKFMsYXQpfDAsYT1hK01hdGguaW11bChTLG90KXwwLG49bitNYXRoLmltdWwoVCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKFQsY3QpfDApK01hdGguaW11bChrLGx0KXwwLGE9YStNYXRoLmltdWwoayxjdCl8MCxuPW4rTWF0aC5pbXVsKGIsZnQpfDAsaT0oaT1pK01hdGguaW11bChiLGh0KXwwKStNYXRoLmltdWwoXyxmdCl8MCxhPWErTWF0aC5pbXVsKF8saHQpfDA7dmFyIFN0PShjKyhuPW4rTWF0aC5pbXVsKHYsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bCh2LG10KXwwKStNYXRoLmltdWwoeSxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bCh5LG10KXwwKSsoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixKKSxpPShpPU1hdGguaW11bChCLEspKStNYXRoLmltdWwoTixKKXwwLGE9TWF0aC5pbXVsKE4sSyksbj1uK01hdGguaW11bChELCQpfDAsaT0oaT1pK01hdGguaW11bChELHR0KXwwKStNYXRoLmltdWwoUiwkKXwwLGE9YStNYXRoLmltdWwoUix0dCl8MCxuPW4rTWF0aC5pbXVsKEkscnQpfDAsaT0oaT1pK01hdGguaW11bChJLG50KXwwKStNYXRoLmltdWwoTyxydCl8MCxhPWErTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChMLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxvdCl8MCkrTWF0aC5pbXVsKEMsYXQpfDAsYT1hK01hdGguaW11bChDLG90KXwwLG49bitNYXRoLmltdWwoTSxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKE0sY3QpfDApK01hdGguaW11bChTLGx0KXwwLGE9YStNYXRoLmltdWwoUyxjdCl8MCxuPW4rTWF0aC5pbXVsKFQsZnQpfDAsaT0oaT1pK01hdGguaW11bChULGh0KXwwKStNYXRoLmltdWwoayxmdCl8MCxhPWErTWF0aC5pbXVsKGssaHQpfDA7dmFyIEV0PShjKyhuPW4rTWF0aC5pbXVsKGIsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChiLG10KXwwKStNYXRoLmltdWwoXyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChfLG10KXwwKSsoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQiwkKSxpPShpPU1hdGguaW11bChCLHR0KSkrTWF0aC5pbXVsKE4sJCl8MCxhPU1hdGguaW11bChOLHR0KSxuPW4rTWF0aC5pbXVsKEQscnQpfDAsaT0oaT1pK01hdGguaW11bChELG50KXwwKStNYXRoLmltdWwoUixydCl8MCxhPWErTWF0aC5pbXVsKFIsbnQpfDAsbj1uK01hdGguaW11bChJLGF0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxvdCl8MCkrTWF0aC5pbXVsKE8sYXQpfDAsYT1hK01hdGguaW11bChPLG90KXwwLG49bitNYXRoLmltdWwoTCxsdCl8MCxpPShpPWkrTWF0aC5pbXVsKEwsY3QpfDApK01hdGguaW11bChDLGx0KXwwLGE9YStNYXRoLmltdWwoQyxjdCl8MCxuPW4rTWF0aC5pbXVsKE0sZnQpfDAsaT0oaT1pK01hdGguaW11bChNLGh0KXwwKStNYXRoLmltdWwoUyxmdCl8MCxhPWErTWF0aC5pbXVsKFMsaHQpfDA7dmFyIEx0PShjKyhuPW4rTWF0aC5pbXVsKFQsZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChULG10KXwwKStNYXRoLmltdWwoayxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChrLG10KXwwKSsoaT4+PjEzKXwwKSsoTHQ+Pj4yNil8MCxMdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixydCksaT0oaT1NYXRoLmltdWwoQixudCkpK01hdGguaW11bChOLHJ0KXwwLGE9TWF0aC5pbXVsKE4sbnQpLG49bitNYXRoLmltdWwoRCxhdCl8MCxpPShpPWkrTWF0aC5pbXVsKEQsb3QpfDApK01hdGguaW11bChSLGF0KXwwLGE9YStNYXRoLmltdWwoUixvdCl8MCxuPW4rTWF0aC5pbXVsKEksbHQpfDAsaT0oaT1pK01hdGguaW11bChJLGN0KXwwKStNYXRoLmltdWwoTyxsdCl8MCxhPWErTWF0aC5pbXVsKE8sY3QpfDAsbj1uK01hdGguaW11bChMLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoTCxodCl8MCkrTWF0aC5pbXVsKEMsZnQpfDAsYT1hK01hdGguaW11bChDLGh0KXwwO3ZhciBDdD0oYysobj1uK01hdGguaW11bChNLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTSxtdCl8MCkrTWF0aC5pbXVsKFMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUyxtdCl8MCkrKGk+Pj4xMyl8MCkrKEN0Pj4+MjYpfDAsQ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsYXQpLGk9KGk9TWF0aC5pbXVsKEIsb3QpKStNYXRoLmltdWwoTixhdCl8MCxhPU1hdGguaW11bChOLG90KSxuPW4rTWF0aC5pbXVsKEQsbHQpfDAsaT0oaT1pK01hdGguaW11bChELGN0KXwwKStNYXRoLmltdWwoUixsdCl8MCxhPWErTWF0aC5pbXVsKFIsY3QpfDAsbj1uK01hdGguaW11bChJLGZ0KXwwLGk9KGk9aStNYXRoLmltdWwoSSxodCl8MCkrTWF0aC5pbXVsKE8sZnQpfDAsYT1hK01hdGguaW11bChPLGh0KXwwO3ZhciBQdD0oYysobj1uK01hdGguaW11bChMLGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoTCxtdCl8MCkrTWF0aC5pbXVsKEMsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoQyxtdCl8MCkrKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIsbHQpLGk9KGk9TWF0aC5pbXVsKEIsY3QpKStNYXRoLmltdWwoTixsdCl8MCxhPU1hdGguaW11bChOLGN0KSxuPW4rTWF0aC5pbXVsKEQsZnQpfDAsaT0oaT1pK01hdGguaW11bChELGh0KXwwKStNYXRoLmltdWwoUixmdCl8MCxhPWErTWF0aC5pbXVsKFIsaHQpfDA7dmFyIEl0PShjKyhuPW4rTWF0aC5pbXVsKEksZHQpfDApfDApKygoODE5MSYoaT0oaT1pK01hdGguaW11bChJLG10KXwwKStNYXRoLmltdWwoTyxkdCl8MCkpPDwxMyl8MDtjPSgoYT1hK01hdGguaW11bChPLG10KXwwKSsoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixmdCksaT0oaT1NYXRoLmltdWwoQixodCkpK01hdGguaW11bChOLGZ0KXwwLGE9TWF0aC5pbXVsKE4saHQpO3ZhciBPdD0oYysobj1uK01hdGguaW11bChELGR0KXwwKXwwKSsoKDgxOTEmKGk9KGk9aStNYXRoLmltdWwoRCxtdCl8MCkrTWF0aC5pbXVsKFIsZHQpfDApKTw8MTMpfDA7Yz0oKGE9YStNYXRoLmltdWwoUixtdCl8MCkrKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzO3ZhciB6dD0oYysobj1NYXRoLmltdWwoQixkdCkpfDApKygoODE5MSYoaT0oaT1NYXRoLmltdWwoQixtdCkpK01hdGguaW11bChOLGR0KXwwKSk8PDEzKXwwO3JldHVybiBjPSgoYT1NYXRoLmltdWwoTixtdCkpKyhpPj4+MTMpfDApKyh6dD4+PjI2KXwwLHp0Jj02NzEwODg2MyxsWzBdPWd0LGxbMV09dnQsbFsyXT15dCxsWzNdPXh0LGxbNF09YnQsbFs1XT1fdCxsWzZdPXd0LGxbN109VHQsbFs4XT1rdCxsWzldPUF0LGxbMTBdPU10LGxbMTFdPVN0LGxbMTJdPUV0LGxbMTNdPUx0LGxbMTRdPUN0LGxbMTVdPVB0LGxbMTZdPUl0LGxbMTddPU90LGxbMThdPXp0LDAhPT1jJiYobFsxOV09YyxyLmxlbmd0aCsrKSxyfTtmdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4obmV3IGcpLm11bHAodCxlLHIpfWZ1bmN0aW9uIGcodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1NYXRoLmltdWx8fChkPXApLGEucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/ZCh0aGlzLHQsZSk6cjw2Mz9wKHRoaXMsdCxlKTpyPDEwMjQ/ZnVuY3Rpb24odCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxhPTA7YTxyLmxlbmd0aC0xO2ErKyl7dmFyIG89aTtpPTA7Zm9yKHZhciBzPTY3MTA4ODYzJm4sbD1NYXRoLm1pbihhLGUubGVuZ3RoLTEpLGM9TWF0aC5tYXgoMCxhLXQubGVuZ3RoKzEpO2M8PWw7YysrKXt2YXIgdT1hLWMsZj0oMHx0LndvcmRzW3VdKSooMHxlLndvcmRzW2NdKSxoPTY3MTA4ODYzJmY7cz02NzEwODg2MyYoaD1oK3N8MCksaSs9KG89KG89bysoZi82NzEwODg2NHwwKXwwKSsoaD4+PjI2KXwwKT4+PjI2LG8mPTY3MTA4ODYzfXIud29yZHNbYV09cyxuPW8sbz1pfXJldHVybiAwIT09bj9yLndvcmRzW2FdPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9KHRoaXMsdCxlKTptKHRoaXMsdCxlKX0sZy5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9YS5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxnLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZy5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPTA7bzxhO28rKyluW29dPWVbdFtvXV0saVtvXT1yW3Rbb11dfSxnLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMucGVybXV0ZShhLHQsZSxyLG4saSk7Zm9yKHZhciBvPTE7bzxpO288PD0xKWZvcih2YXIgcz1vPDwxLGw9TWF0aC5jb3MoMipNYXRoLlBJL3MpLGM9TWF0aC5zaW4oMipNYXRoLlBJL3MpLHU9MDt1PGk7dSs9cylmb3IodmFyIGY9bCxoPWMscD0wO3A8bztwKyspe3ZhciBkPXJbdStwXSxtPW5bdStwXSxnPXJbdStwK29dLHY9blt1K3Arb10seT1mKmctaCp2O3Y9Zip2K2gqZyxnPXksclt1K3BdPWQrZyxuW3UrcF09bSt2LHJbdStwK29dPWQtZyxuW3UrcCtvXT1tLXYscCE9PXMmJih5PWwqZi1jKmgsaD1sKmgrYypmLGY9eSl9fSxnLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZy5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZy5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZy5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIGE9MCxvPTA7bzxlO28rKylhKz0wfHRbb10sclsyKm9dPTgxOTEmYSxhPj4+PTEzLHJbMipvKzFdPTgxOTEmYSxhPj4+PTEzO2ZvcihvPTIqZTtvPGk7KytvKXJbb109MDtuKDA9PT1hKSxuKDA9PSgtODE5MiZhKSl9LGcucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGcucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksYT10aGlzLnN0dWIobiksbz1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksbD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobiksaD1yLndvcmRzO2gubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsbyxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCxjLG4pLHRoaXMudHJhbnNmb3JtKG8sYSxzLGwsbixpKSx0aGlzLnRyYW5zZm9ybShjLGEsdSxmLG4saSk7Zm9yKHZhciBwPTA7cDxuO3ArKyl7dmFyIGQ9c1twXSp1W3BdLWxbcF0qZltwXTtsW3BdPXNbcF0qZltwXStsW3BdKnVbcF0sc1twXT1kfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShzLGwsbiksdGhpcy50cmFuc2Zvcm0ocyxsLGgsYSxuLGkpLHRoaXMuY29uanVnYXRlKGgsYSxuKSx0aGlzLm5vcm1hbGl6ZTEzYihoLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sYS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxhLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksbSh0aGlzLHQsZSl9LGEucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxhLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsYT0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9YT4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmYX1yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sYS5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxhLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGEucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGEucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX0odCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgYSgxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxhLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bigibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LGE9NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgbz0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBzPXRoaXMud29yZHNbZV0mYSxsPSgwfHRoaXMud29yZHNbZV0pLXM8PHI7dGhpcy53b3Jkc1tlXT1sfG8sbz1zPj4+MjYtcn1vJiYodGhpcy53b3Jkc1tlXT1vLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe3ZhciBpO24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKSxpPWU/KGUtZSUyNikvMjY6MDt2YXIgYT10JTI2LG89TWF0aC5taW4oKHQtYSkvMjYsdGhpcy5sZW5ndGgpLHM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5hPDxhLGw9cjtpZihpLT1vLGk9TWF0aC5tYXgoMCxpKSxsKXtmb3IodmFyIGM9MDtjPG87YysrKWwud29yZHNbY109dGhpcy53b3Jkc1tjXTtsLmxlbmd0aD1vfWlmKDA9PT1vKTtlbHNlIGlmKHRoaXMubGVuZ3RoPm8pZm9yKHRoaXMubGVuZ3RoLT1vLGM9MDtjPHRoaXMubGVuZ3RoO2MrKyl0aGlzLndvcmRzW2NdPXRoaXMud29yZHNbYytvXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciB1PTA7Zm9yKGM9dGhpcy5sZW5ndGgtMTtjPj0wJiYoMCE9PXV8fGM+PWkpO2MtLSl7dmFyIGY9MHx0aGlzLndvcmRzW2NdO3RoaXMud29yZHNbY109dTw8MjYtYXxmPj4+YSx1PWYmc31yZXR1cm4gbCYmMCE9PXUmJihsLndvcmRzW2wubGVuZ3RoKytdPXUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGEucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxhLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LGEucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxhLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LGEucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxhLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtyZXR1cm4hKHRoaXMubGVuZ3RoPD1yKSYmISEodGhpcy53b3Jkc1tyXSZpKX0sYS5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LGEucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LGEucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxhLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKCJudW1iZXIiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxhLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LGEucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGEucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxhLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLGEsbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgcz0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStzO3ZhciBsPSgwfHQud29yZHNbaV0pKmU7cz0oKGEtPTY3MTA4ODYzJmwpPj4yNiktKGwvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKXM9KGE9KDB8dGhpcy53b3Jkc1tpK3JdKStzKT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PXMpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobigtMT09PXMpLHM9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspcz0oYT0tKDB8dGhpcy53b3Jkc1tpXSkrcyk+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj0odGhpcy5sZW5ndGgsdC5sZW5ndGgpLG49dGhpcy5jbG9uZSgpLGk9dCxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXTswIT09KHI9MjYtdGhpcy5fY291bnRCaXRzKG8pKSYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxvPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsbD1uLmxlbmd0aC1pLmxlbmd0aDtpZigibW9kIiE9PWUpeyhzPW5ldyBhKG51bGwpKS5sZW5ndGg9bCsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGM9MDtjPHMubGVuZ3RoO2MrKylzLndvcmRzW2NdPTB9dmFyIHU9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsbCk7MD09PXUubmVnYXRpdmUmJihuPXUscyYmKHMud29yZHNbbF09MSkpO2Zvcih2YXIgZj1sLTE7Zj49MDtmLS0pe3ZhciBoPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZl0pKygwfG4ud29yZHNbaS5sZW5ndGgrZi0xXSk7Zm9yKGg9TWF0aC5taW4oaC9vfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksaCxmKTswIT09bi5uZWdhdGl2ZTspaC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZiksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2ZdPWgpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLCJkaXYiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LGEucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgYSgwKSxtb2Q6bmV3IGEoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8ocz10aGlzLm5lZygpLmRpdm1vZCh0LGUpLCJtb2QiIT09ZSYmKGk9cy5kaXYubmVnKCkpLCJkaXYiIT09ZSYmKG89cy5tb2QubmVnKCksciYmMCE9PW8ubmVnYXRpdmUmJm8uaWFkZCh0KSkse2RpdjppLG1vZDpvfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhzPXRoaXMuZGl2bW9kKHQubmVnKCksZSksIm1vZCIhPT1lJiYoaT1zLmRpdi5uZWcoKSkse2RpdjppLG1vZDpzLm1vZH0pOjAhPSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhzPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksImRpdiIhPT1lJiYobz1zLm1vZC5uZWcoKSxyJiYwIT09by5uZWdhdGl2ZSYmby5pc3ViKHQpKSx7ZGl2OnMuZGl2LG1vZDpvfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgYSgwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoPyJkaXYiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IGEodGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBhKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKTt2YXIgaSxvLHN9LGEucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwiZGl2IiwhMSkuZGl2fSxhLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsIm1vZCIsITEpLm1vZH0sYS5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCwibW9kIiwhMCkubW9kfSxhLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxhPXIuY21wKG4pO3JldHVybiBhPDB8fDE9PT1pJiYwPT09YT9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LGEucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sYS5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sYS5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxhLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgYSgxKSxvPW5ldyBhKDApLHM9bmV3IGEoMCksbD1uZXcgYSgxKSxjPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKytjO2Zvcih2YXIgdT1yLmNsb25lKCksZj1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGg9MCxwPTE7MD09KGUud29yZHNbMF0mcCkmJmg8MjY7KytoLHA8PD0xKTtpZihoPjApZm9yKGUuaXVzaHJuKGgpO2gtLSA+MDspKGkuaXNPZGQoKXx8by5pc09kZCgpKSYmKGkuaWFkZCh1KSxvLmlzdWIoZikpLGkuaXVzaHJuKDEpLG8uaXVzaHJuKDEpO2Zvcih2YXIgZD0wLG09MTswPT0oci53b3Jkc1swXSZtKSYmZDwyNjsrK2QsbTw8PTEpO2lmKGQ+MClmb3Ioci5pdXNocm4oZCk7ZC0tID4wOykocy5pc09kZCgpfHxsLmlzT2RkKCkpJiYocy5pYWRkKHUpLGwuaXN1YihmKSkscy5pdXNocm4oMSksbC5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIocyksby5pc3ViKGwpKTooci5pc3ViKGUpLHMuaXN1YihpKSxsLmlzdWIobykpfXJldHVybnthOnMsYjpsLGdjZDpyLml1c2hsbihjKX19LGEucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGksbz1uZXcgYSgxKSxzPW5ldyBhKDApLGw9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgYz0wLHU9MTswPT0oZS53b3Jkc1swXSZ1KSYmYzwyNjsrK2MsdTw8PTEpO2lmKGM+MClmb3IoZS5pdXNocm4oYyk7Yy0tID4wOylvLmlzT2RkKCkmJm8uaWFkZChsKSxvLml1c2hybigxKTtmb3IodmFyIGY9MCxoPTE7MD09KHIud29yZHNbMF0maCkmJmY8MjY7KytmLGg8PD0xKTtpZihmPjApZm9yKHIuaXVzaHJuKGYpO2YtLSA+MDspcy5pc09kZCgpJiZzLmlhZGQobCkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxvLmlzdWIocykpOihyLmlzdWIoZSkscy5pc3ViKG8pKX1yZXR1cm4oaT0wPT09ZS5jbXBuKDEpP286cykuY21wbigwKTwwJiZpLmlhZGQodCksaX0sYS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBhPWU7ZT1yLHI9YX1lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LGEucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LGEucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMSZ0aGlzLndvcmRzWzBdKX0sYS5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09KDEmdGhpcy53b3Jkc1swXSl9LGEucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LGEucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oIm51bWJlciI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBhPWksbz1yOzAhPT1hJiZvPHRoaXMubGVuZ3RoO28rKyl7dmFyIHM9MHx0aGlzLndvcmRzW29dO2E9KHMrPWEpPj4+MjYscyY9NjcxMDg4NjMsdGhpcy53b3Jkc1tvXT1zfXJldHVybiAwIT09YSYmKHRoaXMud29yZHNbb109YSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxhLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sYS5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZSxyPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJnIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpZT0xO2Vsc2V7ciYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO2U9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxhLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sYS5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LGEucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sYS5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sYS5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxhLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxhLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuLTE9PT10aGlzLmNtcG4odCl9LGEucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybi0xPT09dGhpcy5jbXAodCl9LGEucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sYS5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sYS5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxhLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxhLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFQodCl9LGEucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG4oMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sYS5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LGEucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxhLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxhLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LGEucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sYS5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGEucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sYS5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGEucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxhLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIHY9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB5KHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBhKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBhKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB4KCl7eS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIGIoKXt5LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gXygpe3kuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiB3KCl7eS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFQodCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT1hLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBrKHQpe1QuY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGEoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9eS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBhKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0seS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG97dGhpcy5zcGxpdChyLHRoaXMudG1wKSxlPShyPShyPXRoaXMuaW11bEsocikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PXIuc3RyaXA/ci5zdHJpcCgpOnIuX3N0cmlwKCkscn0seS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHgseSkseC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9TWF0aC5taW4odC5sZW5ndGgsOSksbj0wO248cjtuKyspZS53b3Jkc1tuXT10LndvcmRzW25dO2lmKGUubGVuZ3RoPXIsdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBpPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109NDE5NDMwMyZpLG49MTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBhPTB8dC53b3Jkc1tuXTt0LndvcmRzW24tMTBdPSg0MTk0MzAzJmEpPDw0fGk+Pj4yMixpPWF9aT4+Pj0yMix0LndvcmRzW24tMTBdPWksMD09PWkmJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0seC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIseSksaShfLHkpLGkodyx5KSx3LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LGEuX3ByaW1lPWZ1bmN0aW9uKHQpe2lmKHZbdF0pcmV0dXJuIHZbdF07dmFyIGU7aWYoImsyNTYiPT09dCllPW5ldyB4O2Vsc2UgaWYoInAyMjQiPT09dCllPW5ldyBiO2Vsc2UgaWYoInAxOTIiPT09dCllPW5ldyBfO2Vsc2V7aWYoInAyNTUxOSIhPT10KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3QpO2U9bmV3IHd9cmV0dXJuIHZbdF09ZSxlfSxULnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sVC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sVC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxULnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LFQucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sVC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LFQucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sVC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sVC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxULnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBhKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLG89MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KW8rKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgcz1uZXcgYSgxKS50b1JlZCh0aGlzKSxsPXMucmVkTmVnKCksYz10aGlzLm0uc3VibigxKS5pdXNocm4oMSksdT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHU9bmV3IGEoMip1KnUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1LGMpLmNtcChsKTspdS5yZWRJQWRkKGwpO2Zvcih2YXIgZj10aGlzLnBvdyh1LGkpLGg9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxwPXRoaXMucG93KHQsaSksZD1vOzAhPT1wLmNtcChzKTspe2Zvcih2YXIgbT1wLGc9MDswIT09bS5jbXAocyk7ZysrKW09bS5yZWRTcXIoKTtuKGc8ZCk7dmFyIHY9dGhpcy5wb3coZixuZXcgYSgxKS5pdXNobG4oZC1nLTEpKTtoPWgucmVkTXVsKHYpLGY9di5yZWRTcXIoKSxwPXAucmVkTXVsKGYpLGQ9Z31yZXR1cm4gaH0sVC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxULnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgYSgxKS50b1JlZCh0aGlzKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9bmV3IEFycmF5KDE2KTtyWzBdPW5ldyBhKDEpLnRvUmVkKHRoaXMpLHJbMV09dDtmb3IodmFyIG49MjtuPHIubGVuZ3RoO24rKylyW25dPXRoaXMubXVsKHJbbi0xXSx0KTt2YXIgaT1yWzBdLG89MCxzPTAsbD1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bCYmKGw9MjYpLG49ZS5sZW5ndGgtMTtuPj0wO24tLSl7Zm9yKHZhciBjPWUud29yZHNbbl0sdT1sLTE7dT49MDt1LS0pe3ZhciBmPWM+PnUmMTtpIT09clswXSYmKGk9dGhpcy5zcXIoaSkpLDAhPT1mfHwwIT09bz8obzw8PTEsb3w9ZiwoND09PSsrc3x8MD09PW4mJjA9PT11KSYmKGk9dGhpcy5tdWwoaSxyW29dKSxzPTAsbz0wKSk6cz0wfWw9MjZ9cmV0dXJuIGl9LFQucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LFQucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxhLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrKHQpfSxpKGssVCksay5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGsucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0say5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IGEoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odm9pZCAwPT09ZXx8ZSx0aGlzKX0se2J1ZmZlcjoxMTF9XSw5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9ibi1zaWduIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRbMF0pKm4odFsxXSl9fSx7Ii4vbGliL2JuLXNpZ24iOjg4fV0sOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcmF0aW9uYWxpemUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0WzBdLm11bChlWzFdKS5zdWIodFsxXS5tdWwoZVswXSkpLHRbMV0ubXVsKGVbMV0pKX19LHsiLi9saWIvcmF0aW9uYWxpemUiOjkzfV0sOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvYm4tdG8tbnVtIiksaT10KCIuL2xpYi9jdHoiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV07aWYoMD09PWUuY21wbigwKSlyZXR1cm4gMDt2YXIgYT1lLmFicygpLmRpdm1vZChyLmFicygpKSxvPWEuZGl2LHM9bihvKSxsPWEubW9kLGM9ZS5uZWdhdGl2ZSE9PXIubmVnYXRpdmU/LTE6MTtpZigwPT09bC5jbXBuKDApKXJldHVybiBjKnM7aWYocyl7dmFyIHU9aShzKSs0LGY9bihsLnVzaGxuKHUpLmRpdlJvdW5kKHIpKTtyZXR1cm4gYyoocytmKk1hdGgucG93KDIsLXUpKX12YXIgaD1yLmJpdExlbmd0aCgpLWwuYml0TGVuZ3RoKCkrNTM7Zj1uKGwudXNobG4oaCkuZGl2Um91bmQocikpO3JldHVybiBoPDEwMjM/YypmKk1hdGgucG93KDIsLWgpOihmKj1NYXRoLnBvdygyLC0xMDIzKSxjKmYqTWF0aC5wb3coMiwxMDIzLWgpKX19LHsiLi9saWIvYm4tdG8tbnVtIjo4OSwiLi9saWIvY3R6Ijo5MH1dLDEwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyLG4saSl7Zm9yKHZhciBhPWkrMTtuPD1pOyl7dmFyIG89bitpPj4+MSxzPXRbb107KHZvaWQgMCE9PXI/cihzLGUpOnMtZSk+PTA/KGE9byxpPW8tMSk6bj1vKzF9cmV0dXJuIGF9ZnVuY3Rpb24gaSh0LGUscixuLGkpe2Zvcih2YXIgYT1pKzE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPjA/KGE9byxpPW8tMSk6bj1vKzF9cmV0dXJuIGF9ZnVuY3Rpb24gYSh0LGUscixuLGkpe2Zvcih2YXIgYT1uLTE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPDA/KGE9byxuPW8rMSk6aT1vLTF9cmV0dXJuIGF9ZnVuY3Rpb24gbyh0LGUscixuLGkpe2Zvcih2YXIgYT1uLTE7bjw9aTspe3ZhciBvPW4raT4+PjEscz10W29dOyh2b2lkIDAhPT1yP3IocyxlKTpzLWUpPD0wPyhhPW8sbj1vKzEpOmk9by0xfXJldHVybiBhfWZ1bmN0aW9uIHModCxlLHIsbixpKXtmb3IoO248PWk7KXt2YXIgYT1uK2k+Pj4xLG89dFthXSxzPXZvaWQgMCE9PXI/cihvLGUpOm8tZTtpZigwPT09cylyZXR1cm4gYTtzPD0wP249YSsxOmk9YS0xfXJldHVybi0xfWZ1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP2EodCxlLHIsdm9pZCAwPT09bj8wOjB8bix2b2lkIDA9PT1pP3QubGVuZ3RoLTE6MHxpKTphKHQsZSx2b2lkIDAsdm9pZCAwPT09cj8wOjB8cix2b2lkIDA9PT1uP3QubGVuZ3RoLTE6MHxuKX1lLmV4cG9ydHM9e2dlOmZ1bmN0aW9uKHQsZSxyLGksYSl7cmV0dXJuIGwodCxlLHIsaSxhLG4pfSxndDpmdW5jdGlvbih0LGUscixuLGEpe3JldHVybiBsKHQsZSxyLG4sYSxpKX0sbHQ6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gbCh0LGUscixuLGksYSl9LGxlOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGwodCxlLHIsbixpLG8pfSxlcTpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBsKHQsZSxyLG4saSxzKX19fSx7fV0sMTAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7dmFyIGU9MzI7cmV0dXJuKHQmPS10KSYmZS0tLDY1NTM1JnQmJihlLT0xNiksMTY3MTE5MzUmdCYmKGUtPTgpLDI1MjY0NTEzNSZ0JiYoZS09NCksODU4OTkzNDU5JnQmJihlLT0yKSwxNDMxNjU1NzY1JnQmJihlLT0xKSxlfXIuSU5UX0JJVFM9MzIsci5JTlRfTUFYPTIxNDc0ODM2NDcsci5JTlRfTUlOPS0xPDwzMSxyLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MCktKHQ8MCl9LHIuYWJzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ+PjMxO3JldHVybih0XmUpLWV9LHIubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVeKHReZSkmLSh0PGUpfSxyLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0Xih0XmUpJi0odDxlKX0sci5pc1BvdzI9ZnVuY3Rpb24odCl7cmV0dXJuISh0JnQtMXx8IXQpfSxyLmxvZzI9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gZT0odD42NTUzNSk8PDQsZXw9cj0oKHQ+Pj49ZSk+MjU1KTw8MyxlfD1yPSgodD4+Pj1yKT4xNSk8PDIsKGV8PXI9KCh0Pj4+PXIpPjMpPDwxKXwodD4+Pj1yKT4+MX0sci5sb2cxMD1mdW5jdGlvbih0KXtyZXR1cm4gdD49MWU5Pzk6dD49MWU4Pzg6dD49MWU3Pzc6dD49MWU2PzY6dD49MWU1PzU6dD49MWU0PzQ6dD49MWUzPzM6dD49MTAwPzI6dD49MTA/MTowfSxyLnBvcENvdW50PWZ1bmN0aW9uKHQpe3JldHVybiAxNjg0MzAwOSooKHQ9KDg1ODk5MzQ1OSYodC09dD4+PjEmMTQzMTY1NTc2NSkpKyh0Pj4+MiY4NTg5OTM0NTkpKSsodD4+PjQpJjI1MjY0NTEzNSk+Pj4yNH0sci5jb3VudFRyYWlsaW5nWmVyb3M9bixyLm5leHRQb3cyPWZ1bmN0aW9uKHQpe3JldHVybiB0Kz0wPT09dCwtLXQsdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNikrMX0sci5wcmV2UG93Mj1mdW5jdGlvbih0KXtyZXR1cm4gdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsKHR8PXQ+Pj4xNiktKHQ+Pj4xKX0sci5wYXJpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRePXQ+Pj4xNix0Xj10Pj4+OCx0Xj10Pj4+NCwyNzAzMD4+Pih0Jj0xNSkmMX07dmFyIGk9bmV3IEFycmF5KDI1Nik7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8MjU2OysrZSl7dmFyIHI9ZSxuPWUsaT03O2ZvcihyPj4+PTE7cjtyPj4+PTEpbjw8PTEsbnw9MSZyLC0taTt0W2VdPW48PGkmMjU1fX0oaSksci5yZXZlcnNlPWZ1bmN0aW9uKHQpe3JldHVybiBpWzI1NSZ0XTw8MjR8aVt0Pj4+OCYyNTVdPDwxNnxpW3Q+Pj4xNiYyNTVdPDw4fGlbdD4+PjI0JjI1NV19LHIuaW50ZXJsZWF2ZTI9ZnVuY3Rpb24odCxlKXtyZXR1cm4odD0xNDMxNjU1NzY1JigodD04NTg5OTM0NTkmKCh0PTI1MjY0NTEzNSYoKHQ9MTY3MTE5MzUmKCh0Jj02NTUzNSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGUmPTY1NTM1KXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9LHIuZGVpbnRlcmxlYXZlMj1mdW5jdGlvbih0LGUpe3JldHVybih0PTY1NTM1JigodD0xNjcxMTkzNSYoKHQ9MjUyNjQ1MTM1JigodD04NTg5OTM0NTkmKCh0PXQ+Pj5lJjE0MzE2NTU3NjUpfHQ+Pj4xKSl8dD4+PjIpKXx0Pj4+NCkpfHQ+Pj4xNikpPDwxNj4+MTZ9LHIuaW50ZXJsZWF2ZTM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PTEyMjcxMzM1MTMmKCh0PTMyNzIzNTYwMzUmKCh0PTI1MTcxOTY5NSYoKHQ9NDI3ODE5MDMzNSYoKHQmPTEwMjMpfHQ8PDE2KSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSwodHw9KGU9MTIyNzEzMzUxMyYoKGU9MzI3MjM1NjAzNSYoKGU9MjUxNzE5Njk1JigoZT00Mjc4MTkwMzM1JigoZSY9MTAyMyl8ZTw8MTYpKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKTw8MSl8KHI9MTIyNzEzMzUxMyYoKHI9MzI3MjM1NjAzNSYoKHI9MjUxNzE5Njk1Jigocj00Mjc4MTkwMzM1JigociY9MTAyMyl8cjw8MTYpKXxyPDw4KSl8cjw8NCkpfHI8PDIpKTw8Mn0sci5kZWludGVybGVhdmUzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQ9MTAyMyYoKHQ9NDI3ODE5MDMzNSYoKHQ9MjUxNzE5Njk1JigodD0zMjcyMzU2MDM1JigodD10Pj4+ZSYxMjI3MTMzNTEzKXx0Pj4+MikpfHQ+Pj40KSl8dD4+PjgpKXx0Pj4+MTYpKTw8MjI+PjIyfSxyLm5leHRDb21iaW5hdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10fHQtMTtyZXR1cm4gZSsxfCh+ZSYtfmUpLTE+Pj5uKHQpKzF9fSx7fV0sMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZXx8KGU9e30pO3ZhciByLG8scyxsLGMsdSxmLGgscCxkLG0sZz1udWxsPT1lLmN1dG9mZj8uMjU6ZS5jdXRvZmYsdj1udWxsPT1lLnJhZGl1cz84OmUucmFkaXVzLHk9ZS5jaGFubmVsfHwwO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8QXJyYXkuaXNBcnJheSh0KSl7aWYoIWUud2lkdGh8fCFlLmhlaWdodCl0aHJvdyBFcnJvcigiRm9yIHJhdyBkYXRhIHdpZHRoIGFuZCBoZWlnaHQgc2hvdWxkIGJlIHByb3ZpZGVkIGJ5IG9wdGlvbnMiKTtyPWUud2lkdGgsbz1lLmhlaWdodCxsPXQsdT1lLnN0cmlkZT9lLnN0cmlkZTpNYXRoLmZsb29yKHQubGVuZ3RoL3Ivbyl9ZWxzZSB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQmJnQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/KGY9KGg9dCkuZ2V0Q29udGV4dCgiMmQiKSxyPWgud2lkdGgsbz1oLmhlaWdodCxwPWYuZ2V0SW1hZ2VEYXRhKDAsMCxyLG8pLGw9cC5kYXRhLHU9NCk6d2luZG93LkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCYmdCBpbnN0YW5jZW9mIHdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ/KGg9dC5jYW52YXMsZj10LHI9aC53aWR0aCxvPWguaGVpZ2h0LHA9Zi5nZXRJbWFnZURhdGEoMCwwLHIsbyksbD1wLmRhdGEsdT00KTp3aW5kb3cuSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2Ygd2luZG93LkltYWdlRGF0YSYmKHA9dCxyPXQud2lkdGgsbz10LmhlaWdodCxsPXAuZGF0YSx1PTQpO2lmKHM9TWF0aC5tYXgocixvKSx3aW5kb3cuVWludDhDbGFtcGVkQXJyYXkmJmwgaW5zdGFuY2VvZiB3aW5kb3cuVWludDhDbGFtcGVkQXJyYXl8fHdpbmRvdy5VaW50OEFycmF5JiZsIGluc3RhbmNlb2Ygd2luZG93LlVpbnQ4QXJyYXkpZm9yKGM9bCxsPUFycmF5KHIqbyksZD0wLG09Yy5sZW5ndGg7ZDxtO2QrKylsW2RdPWNbZCp1K3ldLzI1NTtlbHNlIGlmKDEhPT11KXRocm93IEVycm9yKCJSYXcgZGF0YSBjYW4gaGF2ZSBvbmx5IDEgdmFsdWUgcGVyIHBpeGVsIik7dmFyIHg9QXJyYXkocipvKSxiPUFycmF5KHIqbyksXz1BcnJheShzKSx3PUFycmF5KHMpLFQ9QXJyYXkocysxKSxrPUFycmF5KHMpO2ZvcihkPTAsbT1yKm87ZDxtO2QrKyl7dmFyIEE9bFtkXTt4W2RdPTE9PT1BPzA6MD09PUE/aTpNYXRoLnBvdyhNYXRoLm1heCgwLC41LUEpLDIpLGJbZF09MT09PUE/aTowPT09QT8wOk1hdGgucG93KE1hdGgubWF4KDAsQS0uNSksMil9YSh4LHIsbyxfLHcsayxUKSxhKGIscixvLF8sdyxrLFQpO3ZhciBNPXdpbmRvdy5GbG9hdDMyQXJyYXk/bmV3IEZsb2F0MzJBcnJheShyKm8pOm5ldyBBcnJheShyKm8pO2ZvcihkPTAsbT1yKm87ZDxtO2QrKylNW2RdPW4oMS0oKHhbZF0tYltkXSkvditnKSwwLDEpO3JldHVybiBNfTt2YXIgaT0xZTIwO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEscyl7Zm9yKHZhciBsPTA7bDxlO2wrKyl7Zm9yKHZhciBjPTA7YzxyO2MrKyluW2NdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsciksYz0wO2M8cjtjKyspdFtjKmUrbF09aVtjXX1mb3IoYz0wO2M8cjtjKyspe2ZvcihsPTA7bDxlO2wrKyluW2xdPXRbYyplK2xdO2ZvcihvKG4saSxhLHMsZSksbD0wO2w8ZTtsKyspdFtjKmUrbF09TWF0aC5zcXJ0KGlbbF0pfX1mdW5jdGlvbiBvKHQsZSxyLG4sYSl7clswXT0wLG5bMF09LWksblsxXT0raTtmb3IodmFyIG89MSxzPTA7bzxhO28rKyl7Zm9yKHZhciBsPSh0W29dK28qby0odFtyW3NdXStyW3NdKnJbc10pKS8oMipvLTIqcltzXSk7bDw9bltzXTspcy0tLGw9KHRbb10rbypvLSh0W3Jbc11dK3Jbc10qcltzXSkpLygyKm8tMipyW3NdKTtyWysrc109byxuW3NdPWwsbltzKzFdPStpfWZvcihvPTAscz0wO288YTtvKyspe2Zvcig7bltzKzFdPG87KXMrKztlW29dPShvLXJbc10pKihvLXJbc10pK3RbcltzXV19fX0se2NsYW1wOjEyMX1dLDEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9dC5sZW5ndGgsYT0wO2ZvcihlPTA7ZTxpOysrZSlhKz10W2VdLmxlbmd0aDt2YXIgbz1uZXcgQXJyYXkoYSkscz0wO2ZvcihlPTA7ZTxpOysrZSl7dmFyIGw9dFtlXSxjPWwubGVuZ3RoO2ZvcihyPTA7cjxjOysrcil7dmFyIHU9b1tzKytdPW5ldyBBcnJheShjLTEpLGY9MDtmb3Iobj0wO248YzsrK24pbiE9PXImJih1W2YrK109bFtuXSk7aWYoMSZyKXt2YXIgaD11WzFdO3VbMV09dVswXSx1WzBdPWh9fX1yZXR1cm4gb319LHt9XSwxMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnJldHVybiBmKHQpO2Nhc2UgMjpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZT9jKHQsdCxlLCEwKTpoKHQsZSk7Y2FzZSAzOnJldHVybiBjKHQsZSxyLCExKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYm94LWludGVyc2VjdDogSW52YWxpZCBhcmd1bWVudHMiKX19O3ZhciBuLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCIuL2xpYi9zd2VlcCIpLG89dCgiLi9saWIvaW50ZXJzZWN0Iik7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj0wO3I8dDsrK3IpaWYoIShlW3JdPD1lW3IrdF0pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGwodCxlLHIsbil7Zm9yKHZhciBpPTAsYT0wLG89MCxsPXQubGVuZ3RoO288bDsrK28pe3ZhciBjPXRbb107aWYoIXMoZSxjKSl7Zm9yKHZhciB1PTA7dTwyKmU7Kyt1KXJbaSsrXT1jW3VdO25bYSsrXT1vfX1yZXR1cm4gYX1mdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBzPXQubGVuZ3RoLGM9ZS5sZW5ndGg7aWYoIShzPD0wfHxjPD0wKSl7dmFyIHU9dFswXS5sZW5ndGg+Pj4xO2lmKCEodTw9MCkpe3ZhciBmLGg9aS5tYWxsb2NEb3VibGUoMip1KnMpLHA9aS5tYWxsb2NJbnQzMihzKTtpZigocz1sKHQsdSxoLHApKT4wKXtpZigxPT09dSYmbilhLmluaXQocyksZj1hLnN3ZWVwQ29tcGxldGUodSxyLDAscyxoLHAsMCxzLGgscCk7ZWxzZXt2YXIgZD1pLm1hbGxvY0RvdWJsZSgyKnUqYyksbT1pLm1hbGxvY0ludDMyKGMpOyhjPWwoZSx1LGQsbSkpPjAmJihhLmluaXQocytjKSxmPTE9PT11P2Euc3dlZXBCaXBhcnRpdGUodSxyLDAscyxoLHAsMCxjLGQsbSk6byh1LHIsbixzLGgscCxjLGQsbSksaS5mcmVlKGQpLGkuZnJlZShtKSl9aS5mcmVlKGgpLGkuZnJlZShwKX1yZXR1cm4gZn19fWZ1bmN0aW9uIHUodCxlKXtuLnB1c2goW3QsZV0pfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG49W10sYyh0LHQsdSwhMCksbn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIG49W10sYyh0LGUsdSwhMSksbn19LHsiLi9saWIvaW50ZXJzZWN0IjoxMDYsIi4vbGliL3N3ZWVwIjoxMTAsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQ/ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXtyZXR1cm4gaS1uPmwtcz9mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj1jW2UreSt0XSxfPXVbdl07aWYoIShiPGR8fG08eCkpe2Zvcih2YXIgdz1lKzE7dzx0Oysrdyl7dmFyIFQ9YVt3K3BdLGs9YVt3K3QrcF0sQT1jW3creV0sTT1jW3crdCt5XTtpZihrPEF8fE08VCljb250aW51ZSB0fXZhciBTPXIoZyxfKTtpZih2b2lkIDAhPT1TKXJldHVybiBTfX19fSh0LGUscixuLGksYSxvLHMsbCxjLHUpOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT1jW2UrcCt0XSxnPXVbaF07dDpmb3IodmFyIHY9bix5PWYqbjt2PGk7Kyt2LHkrPWYpe3ZhciB4PWFbZSt5XSxiPWFbZSt5K3RdLF89b1t2XTtpZighKG08eHx8YjxkKSl7Zm9yKHZhciB3PWUrMTt3PHQ7Kyt3KXt2YXIgVD1hW3creV0saz1hW3crdCt5XSxBPWNbdytwXSxNPWNbdyt0K3BdO2lmKGs8QXx8TTxUKWNvbnRpbnVlIHR9dmFyIFM9cihfLGcpO2lmKHZvaWQgMCE9PVMpcmV0dXJuIFN9fX19KHQsZSxyLG4saSxhLG8scyxsLGMsdSl9OmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmKXtyZXR1cm4gYS1pPmMtbD9uP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPW4scD1mKm47aDxpOysraCxwKz1mKXt2YXIgZD1hW2UrcF0sbT1hW2UrcCt0XSxnPW9baF07dDpmb3IodmFyIHY9cyx5PWYqczt2PGw7Kyt2LHkrPWYpe3ZhciB4PWNbZSt5XSxiPXVbdl07aWYoISh4PD1kfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsZyk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1uLHA9ZipuO2g8aTsrK2gscCs9Zil7dmFyIGQ9YVtlK3BdLG09YVtlK3ArdF0sZz1vW2hdO3Q6Zm9yKHZhciB2PXMseT1mKnM7djxsOysrdix5Kz1mKXt2YXIgeD1jW2UreV0sYj11W3ZdO2lmKCEoeDxkfHxtPHgpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXytwXSxUPWFbXyt0K3BdLGs9Y1tfK3ldLEE9Y1tfK3QreV07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGcsYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpuP2Z1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7Zm9yKHZhciBmPTIqdCxoPXMscD1mKnM7aDxsOysraCxwKz1mKXt2YXIgZD1jW2UrcF0sbT11W2hdO3Q6Zm9yKHZhciBnPW4sdj1mKm47ZzxpOysrZyx2Kz1mKXt2YXIgeT1hW2Urdl0seD1hW2Urdit0XSxiPW9bZ107aWYoIShkPD15fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKG0sYik7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKTpmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe2Zvcih2YXIgZj0yKnQsaD1zLHA9ZipzO2g8bDsrK2gscCs9Zil7dmFyIGQ9Y1tlK3BdLG09dVtoXTt0OmZvcih2YXIgZz1uLHY9ZipuO2c8aTsrK2csdis9Zil7dmFyIHk9YVtlK3ZdLHg9YVtlK3YrdF0sYj1vW2ddO2lmKCEoZDx5fHx4PGQpKXtmb3IodmFyIF89ZSsxO188dDsrK18pe3ZhciB3PWFbXyt2XSxUPWFbXyt0K3ZdLGs9Y1tfK3BdLEE9Y1tfK3QrcF07aWYoVDxrfHxBPHcpY29udGludWUgdH12YXIgTT1yKGIsbSk7aWYodm9pZCAwIT09TSlyZXR1cm4gTX19fX0odCxlLHIsaSxhLG8scyxsLGMsdSxmKX19ci5wYXJ0aWFsPW4oITEpLHIuZnVsbD1uKCEwKX0se31dLDEwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSx1LHcsVCxrLEEpeyFmdW5jdGlvbih0LGUpe3ZhciByPTgqaS5sb2cyKGUrMSkqKHQrMSl8MCxhPWkubmV4dFBvdzIoNipyKTt2Lmxlbmd0aDxhJiYobi5mcmVlKHYpLHY9bi5tYWxsb2NJbnQzMihhKSk7dmFyIG89aS5uZXh0UG93MigyKnIpO3kubGVuZ3RoPG8mJihuLmZyZWUoeSkseT1uLm1hbGxvY0RvdWJsZShvKSl9KHQsYStUKTt2YXIgTSxTPTAsRT0yKnQ7eChTKyssMCwwLGEsMCxULHI/MTY6MCwtMS8wLDEvMCkscnx8eChTKyssMCwwLFQsMCxhLDEsLTEvMCwxLzApO2Zvcig7Uz4wOyl7dmFyIEw9NiooUy09MSksQz12W0xdLFA9dltMKzFdLEk9dltMKzJdLE89dltMKzNdLHo9dltMKzRdLEQ9dltMKzVdLFI9MipTLEY9eVtSXSxCPXlbUisxXSxOPTEmRCxqPSEhKDE2JkQpLFU9dSxWPXcsSD1rLHE9QTtpZihOJiYoVT1rLFY9QSxIPXUscT13KSwhKDImRCYmKEk9cCh0LEMsUCxJLFUsVixCKSxQPj1JKXx8NCZEJiYoUD1kKHQsQyxQLEksVSxWLEYpKT49SSkpe3ZhciBHPUktUCxZPXotTztpZihqKXtpZih0KkcqKEcrWSk8MTw8MjIpe2lmKHZvaWQgMCE9PShNPWwuc2NhbkNvbXBsZXRlKHQsQyxlLFAsSSxVLFYsTyx6LEgscSkpKXJldHVybiBNO2NvbnRpbnVlfX1lbHNle2lmKHQqTWF0aC5taW4oRyxZKTwxMjgpe2lmKHZvaWQgMCE9PShNPW8odCxDLGUsTixQLEksVSxWLE8seixILHEpKSlyZXR1cm4gTTtjb250aW51ZX1pZih0KkcqWTwxPDwyMil7aWYodm9pZCAwIT09KE09bC5zY2FuQmlwYXJ0aXRlKHQsQyxlLE4sUCxJLFUsVixPLHosSCxxKSkpcmV0dXJuIE07Y29udGludWV9fXZhciBXPWYodCxDLFAsSSxVLFYsRixCKTtpZihQPFcpaWYodCooVy1QKTwxMjgpe2lmKHZvaWQgMCE9PShNPXModCxDKzEsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIGlmKEM9PT10LTIpe2lmKHZvaWQgMCE9PShNPU4/bC5zd2VlcEJpcGFydGl0ZSh0LGUsTyx6LEgscSxQLFcsVSxWKTpsLnN3ZWVwQmlwYXJ0aXRlKHQsZSxQLFcsVSxWLE8seixILHEpKSlyZXR1cm4gTX1lbHNlIHgoUysrLEMrMSxQLFcsTyx6LE4sLTEvMCwxLzApLHgoUysrLEMrMSxPLHosUCxXLDFeTiwtMS8wLDEvMCk7aWYoVzxJKXt2YXIgWD1jKHQsQyxPLHosSCxxKSxaPUhbRSpYK0NdLEo9aCh0LEMsWCx6LEgscSxaKTtpZihKPHomJngoUysrLEMsVyxJLEoseiwoNHxOKSsoaj8xNjowKSxaLEIpLE88WCYmeChTKyssQyxXLEksTyxYLCgyfE4pKyhqPzE2OjApLEYsWiksWCsxPT09Sil7aWYodm9pZCAwIT09KE09aj9fKHQsQyxlLFcsSSxVLFYsWCxILHFbWF0pOmIodCxDLGUsTixXLEksVSxWLFgsSCxxW1hdKSkpcmV0dXJuIE19ZWxzZSBpZihYPEope3ZhciBLO2lmKGope2lmKEs9bSh0LEMsVyxJLFUsVixaKSxXPEspe3ZhciBRPWgodCxDLFcsSyxVLFYsWik7aWYoQz09PXQtMil7aWYoVzxRJiZ2b2lkIDAhPT0oTT1sLnN3ZWVwQ29tcGxldGUodCxlLFcsUSxVLFYsWCxKLEgscSkpKXJldHVybiBNO2lmKFE8SyYmdm9pZCAwIT09KE09bC5zd2VlcEJpcGFydGl0ZSh0LGUsUSxLLFUsVixYLEosSCxxKSkpcmV0dXJuIE19ZWxzZSBXPFEmJngoUysrLEMrMSxXLFEsWCxKLDE2LC0xLzAsMS8wKSxRPEsmJih4KFMrKyxDKzEsUSxLLFgsSiwwLC0xLzAsMS8wKSx4KFMrKyxDKzEsWCxKLFEsSywxLC0xLzAsMS8wKSl9fWVsc2UgSz1OP2codCxDLFcsSSxVLFYsWik6bSh0LEMsVyxJLFUsVixaKSxXPEsmJihDPT09dC0yP009Tj9sLnN3ZWVwQmlwYXJ0aXRlKHQsZSxYLEosSCxxLFcsSyxVLFYpOmwuc3dlZXBCaXBhcnRpdGUodCxlLFcsSyxVLFYsWCxKLEgscSk6KHgoUysrLEMrMSxXLEssWCxKLE4sLTEvMCwxLzApLHgoUysrLEMrMSxYLEosVyxLLDFeTiwtMS8wLDEvMCkpKX19fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vYnJ1dGUiKSxvPWEucGFydGlhbCxzPWEuZnVsbCxsPXQoIi4vc3dlZXAiKSxjPXQoIi4vbWVkaWFuIiksdT10KCIuL3BhcnRpdGlvbiIpLGY9dSgiIShsbz49cDApJiYhKHAxPj1oaSkiKSxoPXUoImxvPT09cDAiKSxwPXUoImxvPHAwIiksZD11KCJoaTw9cDAiKSxtPXUoImxvPD1wMCYmcDA8PWhpIiksZz11KCJsbzxwMCYmcDA8PWhpIiksdj1uLm1hbGxvY0ludDMyKDEwMjQpLHk9bi5tYWxsb2NEb3VibGUoMTAyNCk7ZnVuY3Rpb24geCh0LGUscixuLGksYSxvLHMsbCl7dmFyIGM9Nip0O3ZbY109ZSx2W2MrMV09cix2W2MrMl09bix2W2MrM109aSx2W2MrNF09YSx2W2MrNV09bzt2YXIgdT0yKnQ7eVt1XT1zLHlbdSsxXT1sfWZ1bmN0aW9uIGIodCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj0yKnQsaD1sKmYscD1jW2grZV07dDpmb3IodmFyIGQ9aSxtPWkqZjtkPGE7KytkLG0rPWYpe3ZhciBnPW9bbStlXSx2PW9bbStlK3RdO2lmKCEocDxnfHx2PHApJiYoIW58fHAhPT1nKSl7Zm9yKHZhciB5LHg9c1tkXSxiPWUrMTtiPHQ7KytiKXtnPW9bbStiXSx2PW9bbStiK3RdO3ZhciBfPWNbaCtiXSx3PWNbaCtiK3RdO2lmKHY8X3x8dzxnKWNvbnRpbnVlIHR9aWYodm9pZCAwIT09KHk9bj9yKHUseCk6cih4LHUpKSlyZXR1cm4geX19fWZ1bmN0aW9uIF8odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9Mip0LGY9cyp1LGg9bFtmK2VdO3Q6Zm9yKHZhciBwPW4sZD1uKnU7cDxpOysrcCxkKz11KXt2YXIgbT1vW3BdO2lmKG0hPT1jKXt2YXIgZz1hW2QrZV0sdj1hW2QrZSt0XTtpZighKGg8Z3x8djxoKSl7Zm9yKHZhciB5PWUrMTt5PHQ7Kyt5KXtnPWFbZCt5XSx2PWFbZCt5K3RdO3ZhciB4PWxbZit5XSxiPWxbZit5K3RdO2lmKHY8eHx8YjxnKWNvbnRpbnVlIHR9dmFyIF89cihtLGMpO2lmKHZvaWQgMCE9PV8pcmV0dXJuIF99fX19fSx7Ii4vYnJ1dGUiOjEwNSwiLi9tZWRpYW4iOjEwNywiLi9wYXJ0aXRpb24iOjEwOCwiLi9zd2VlcCI6MTEwLCJiaXQtdHdpZGRsZSI6MTAxLCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvLHMpe2lmKGE8PXIrMSlyZXR1cm4gcjt2YXIgbD1yLGM9YSx1PWErcj4+PjEsZj0yKnQsaD11LHA9b1tmKnUrZV07Zm9yKDtsPGM7KXtpZihjLWw8OCl7aSh0LGUsbCxjLG8scykscD1vW2YqdStlXTticmVha312YXIgZD1jLWwsbT1NYXRoLnJhbmRvbSgpKmQrbHwwLGc9b1tmKm0rZV0sdj1NYXRoLnJhbmRvbSgpKmQrbHwwLHk9b1tmKnYrZV0seD1NYXRoLnJhbmRvbSgpKmQrbHwwLGI9b1tmKngrZV07Zzw9eT9iPj15PyhoPXYscD15KTpnPj1iPyhoPW0scD1nKTooaD14LHA9Yik6eT49Yj8oaD12LHA9eSk6Yj49Zz8oaD1tLHA9Zyk6KGg9eCxwPWIpO2Zvcih2YXIgXz1mKihjLTEpLHc9ZipoLFQ9MDtUPGY7KytULCsrXywrK3cpe3ZhciBrPW9bX107b1tfXT1vW3ddLG9bd109a312YXIgQT1zW2MtMV07c1tjLTFdPXNbaF0sc1toXT1BLGg9bih0LGUsbCxjLTEsbyxzLHApO2ZvcihfPWYqKGMtMSksdz1mKmgsVD0wO1Q8ZjsrK1QsKytfLCsrdyl7az1vW19dO29bX109b1t3XSxvW3ddPWt9QT1zW2MtMV07aWYoc1tjLTFdPXNbaF0sc1toXT1BLHU8aCl7Zm9yKGM9aC0xO2w8YyYmb1tmKihjLTEpK2VdPT09cDspYy09MTtjKz0xfWVsc2V7aWYoIShoPHUpKWJyZWFrO2ZvcihsPWgrMTtsPGMmJm9bZipsK2VdPT09cDspbCs9MX19cmV0dXJuIG4odCxlLHIsdSxvLHMsb1tmKnUrZV0pfTt2YXIgbj10KCIuL3BhcnRpdGlvbiIpKCJsbzxwMCIpO2Z1bmN0aW9uIGkodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0yKnQscz1vKihyKzEpK2UsbD1yKzE7bDxuOysrbCxzKz1vKWZvcih2YXIgYz1pW3NdLHU9bCxmPW8qKGwtMSk7dT5yJiZpW2YrZV0+YzstLXUsZi09byl7Zm9yKHZhciBoPWYscD1mK28sZD0wO2Q8bzsrK2QsKytoLCsrcCl7dmFyIG09aVtoXTtpW2hdPWlbcF0saVtwXT1tfXZhciBnPWFbdV07YVt1XT1hW3UtMV0sYVt1LTFdPWd9fX0seyIuL3BhcnRpdGlvbiI6MTA4fV0sMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XX07dmFyIG49eyJsbz09PXAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXT09PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImxvPHAwIjpmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9Mip0LGw9cypyLGM9bCx1PXIsZj1lLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTxvKWlmKHU9PT1oKXUrPTEsYys9cztlbHNle2Zvcih2YXIgcD0wO3M+cDsrK3Ape3ZhciBkPWlbbCtwXTtpW2wrcF09aVtjXSxpW2MrK109ZH12YXIgbT1hW2hdO2FbaF09YVt1XSxhW3UrK109bX19cmV0dXJuIHV9LCJsbzw9cDAiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0yKnQsbD1zKnIsYz1sLHU9cixmPXQrZSxoPXI7bj5oOysraCxsKz1zKXtpZihpW2wrZl08PW8paWYodT09PWgpdSs9MSxjKz1zO2Vsc2V7Zm9yKHZhciBwPTA7cz5wOysrcCl7dmFyIGQ9aVtsK3BdO2lbbCtwXT1pW2NdLGlbYysrXT1kfXZhciBtPWFbaF07YVtoXT1hW3VdLGFbdSsrXT1tfX1yZXR1cm4gdX0sImhpPD1wMCI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9dCtlLGg9cjtuPmg7KytoLGwrPXMpe2lmKGlbbCtmXTw9bylpZih1PT09aCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIHA9MDtzPnA7KytwKXt2YXIgZD1pW2wrcF07aVtsK3BdPWlbY10saVtjKytdPWR9dmFyIG09YVtoXTthW2hdPWFbdV0sYVt1KytdPW19fXJldHVybiB1fSwibG88cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDxvJiZvPD1tKWlmKHU9PT1wKXUrPTEsYys9cztlbHNle2Zvcih2YXIgZz0wO3M+ZzsrK2cpe3ZhciB2PWlbbCtnXTtpW2wrZ109aVtjXSxpW2MrK109dn12YXIgeT1hW3BdO2FbcF09YVt1XSxhW3UrK109eX19cmV0dXJuIHV9LCJsbzw9cDAmJnAwPD1oaSI6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPTIqdCxsPXMqcixjPWwsdT1yLGY9ZSxoPXQrZSxwPXI7bj5wOysrcCxsKz1zKXt2YXIgZD1pW2wrZl0sbT1pW2wraF07aWYoZDw9byYmbzw9bSlpZih1PT09cCl1Kz0xLGMrPXM7ZWxzZXtmb3IodmFyIGc9MDtzPmc7KytnKXt2YXIgdj1pW2wrZ107aVtsK2ddPWlbY10saVtjKytdPXZ9dmFyIHk9YVtwXTthW3BdPWFbdV0sYVt1KytdPXl9fXJldHVybiB1fSwiIShsbz49cDApJiYhKHAxPj1oaSkiOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPTIqdCxjPWwqcix1PWMsZj1yLGg9ZSxwPXQrZSxkPXI7bj5kOysrZCxjKz1sKXt2YXIgbT1pW2MraF0sZz1pW2MrcF07aWYoIShtPj1vfHxzPj1nKSlpZihmPT09ZClmKz0xLHUrPWw7ZWxzZXtmb3IodmFyIHY9MDtsPnY7Kyt2KXt2YXIgeT1pW2Mrdl07aVtjK3ZdPWlbdV0saVt1KytdPXl9dmFyIHg9YVtkXTthW2RdPWFbZl0sYVtmKytdPXh9fXJldHVybiBmfX19LHt9XSwxMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZTw9MTI4P24oMCxlLTEsdCk6ZnVuY3Rpb24gdChlLHIsdSl7dmFyIGY9KHItZSsxKS82fDAsaD1lK2YscD1yLWYsZD1lK3I+PjEsbT1kLWYsZz1kK2Ysdj1oLHk9bSx4PWQsYj1nLF89cCx3PWUrMSxUPXItMSxrPTA7bCh2LHksdSkmJihrPXYsdj15LHk9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7bCh2LHgsdSkmJihrPXYsdj14LHg9ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bCh2LGIsdSkmJihrPXYsdj1iLGI9ayk7bCh4LGIsdSkmJihrPXgseD1iLGI9ayk7bCh5LF8sdSkmJihrPXkseT1fLF89ayk7bCh5LHgsdSkmJihrPXkseT14LHg9ayk7bChiLF8sdSkmJihrPWIsYj1fLF89ayk7Zm9yKHZhciBBPXVbMip5XSxNPXVbMip5KzFdLFM9dVsyKmJdLEU9dVsyKmIrMV0sTD0yKnYsQz0yKngsUD0yKl8sST0yKmgsTz0yKmQsej0yKnAsRD0wO0Q8MjsrK0Qpe3ZhciBSPXVbTCtEXSxGPXVbQytEXSxCPXVbUCtEXTt1W0krRF09Uix1W08rRF09Rix1W3orRF09Qn1hKG0sZSx1KSxhKGcscix1KTtmb3IodmFyIE49dztOPD1UOysrTilpZihjKE4sQSxNLHUpKU4hPT13JiZpKE4sdyx1KSwrK3c7ZWxzZSBpZighYyhOLFMsRSx1KSlmb3IoOzspe2lmKGMoVCxTLEUsdSkpe2MoVCxBLE0sdSk/KG8oTix3LFQsdSksKyt3LC0tVCk6KGkoTixULHUpLC0tVCk7YnJlYWt9aWYoLS1UPE4pYnJlYWt9cyhlLHctMSxBLE0sdSkscyhyLFQrMSxTLEUsdSksdy0yLWU8PTMyP24oZSx3LTIsdSk6dChlLHctMix1KTtyLShUKzIpPD0zMj9uKFQrMixyLHUpOnQoVCsyLHIsdSk7VC13PD0zMj9uKHcsVCx1KTp0KHcsVCx1KX0oMCxlLTEsdCl9O2Z1bmN0aW9uIG4odCxlLHIpe2Zvcih2YXIgbj0yKih0KzEpLGk9dCsxO2k8PWU7KytpKXtmb3IodmFyIGE9cltuKytdLG89cltuKytdLHM9aSxsPW4tMjtzLS0gPnQ7KXt2YXIgYz1yW2wtMl0sdT1yW2wtMV07aWYoYzxhKWJyZWFrO2lmKGM9PT1hJiZ1PG8pYnJlYWs7cltsXT1jLHJbbCsxXT11LGwtPTJ9cltsXT1hLHJbbCsxXT1vfX1mdW5jdGlvbiBpKHQsZSxyKXtlKj0yO3ZhciBuPXJbdCo9Ml0saT1yW3QrMV07clt0XT1yW2VdLHJbdCsxXT1yW2UrMV0scltlXT1uLHJbZSsxXT1pfWZ1bmN0aW9uIGEodCxlLHIpe2UqPTIsclt0Kj0yXT1yW2VdLHJbdCsxXT1yW2UrMV19ZnVuY3Rpb24gbyh0LGUscixuKXtlKj0yLHIqPTI7dmFyIGk9blt0Kj0yXSxhPW5bdCsxXTtuW3RdPW5bZV0sblt0KzFdPW5bZSsxXSxuW2VdPW5bcl0sbltlKzFdPW5bcisxXSxuW3JdPWksbltyKzFdPWF9ZnVuY3Rpb24gcyh0LGUscixuLGkpe2UqPTIsaVt0Kj0yXT1pW2VdLGlbZV09cixpW3QrMV09aVtlKzFdLGlbZSsxXT1ufWZ1bmN0aW9uIGwodCxlLHIpe2UqPTI7dmFyIG49clt0Kj0yXSxpPXJbZV07cmV0dXJuIShuPGkpJiYobiE9PWl8fHJbdCsxXT5yW2UrMV0pfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGk9blt0Kj0yXTtyZXR1cm4gaTxlfHxpPT09ZSYmblt0KzFdPHJ9fSx7fV0sMTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aW5pdDpmdW5jdGlvbih0KXt2YXIgZT1pLm5leHRQb3cyKHQpO28ubGVuZ3RoPGUmJihuLmZyZWUobyksbz1uLm1hbGxvY0ludDMyKGUpKTtzLmxlbmd0aDxlJiYobi5mcmVlKHMpLHM9bi5tYWxsb2NJbnQzMihlKSk7bC5sZW5ndGg8ZSYmKG4uZnJlZShsKSxsPW4ubWFsbG9jSW50MzIoZSkpO2MubGVuZ3RoPGUmJihuLmZyZWUoYyksYz1uLm1hbGxvY0ludDMyKGUpKTt1Lmxlbmd0aDxlJiYobi5mcmVlKHUpLHU9bi5tYWxsb2NJbnQzMihlKSk7Zi5sZW5ndGg8ZSYmKG4uZnJlZShmKSxmPW4ubWFsbG9jSW50MzIoZSkpO3ZhciByPTgqZTtoLmxlbmd0aDxyJiYobi5mcmVlKGgpLGg9bi5tYWxsb2NEb3VibGUocikpfSxzd2VlcEJpcGFydGl0ZTpmdW5jdGlvbih0LGUscixuLGksdSxmLG0sZyx2KXtmb3IodmFyIHk9MCx4PTIqdCxiPXQtMSxfPXgtMSx3PXI7dzxuOysrdyl7dmFyIFQ9dVt3XSxrPXgqdztoW3krK109aVtrK2JdLGhbeSsrXT0tKFQrMSksaFt5KytdPWlbaytfXSxoW3krK109VH1mb3Iodz1mO3c8bTsrK3cpe1Q9dlt3XSsoMTw8MjgpO3ZhciBBPXgqdztoW3krK109Z1tBK2JdLGhbeSsrXT0tVCxoW3krK109Z1tBK19dLGhbeSsrXT1UfXZhciBNPXk+Pj4xO2EoaCxNKTt2YXIgUz0wLEU9MDtmb3Iodz0wO3c8TTsrK3cpe3ZhciBMPTB8aFsyKncrMV07aWYoTD49MTw8MjgpcChsLGMsRS0tLEw9TC0oMTw8MjgpfDApO2Vsc2UgaWYoTD49MClwKG8scyxTLS0sTCk7ZWxzZSBpZihMPD0tKDE8PDI4KSl7TD0tTC0oMTw8MjgpfDA7Zm9yKHZhciBDPTA7QzxTOysrQyl7aWYodm9pZCAwIT09KFA9ZShvW0NdLEwpKSlyZXR1cm4gUH1kKGwsYyxFKyssTCl9ZWxzZXtMPS1MLTF8MDtmb3IoQz0wO0M8RTsrK0Mpe3ZhciBQO2lmKHZvaWQgMCE9PShQPWUoTCxsW0NdKSkpcmV0dXJuIFB9ZChvLHMsUysrLEwpfX19LHN3ZWVwQ29tcGxldGU6ZnVuY3Rpb24odCxlLHIsbixpLG0sZyx2LHkseCl7Zm9yKHZhciBiPTAsXz0yKnQsdz10LTEsVD1fLTEsaz1yO2s8bjsrK2spe3ZhciBBPW1ba10rMTw8MSxNPV8qaztoW2IrK109aVtNK3ddLGhbYisrXT0tQSxoW2IrK109aVtNK1RdLGhbYisrXT1BfWZvcihrPWc7azx2Oysrayl7QT14W2tdKzE8PDE7dmFyIFM9XyprO2hbYisrXT15W1Mrd10saFtiKytdPTF8LUEsaFtiKytdPXlbUytUXSxoW2IrK109MXxBfXZhciBFPWI+Pj4xO2EoaCxFKTt2YXIgTD0wLEM9MCxQPTA7Zm9yKGs9MDtrPEU7KytrKXt2YXIgST0wfGhbMiprKzFdLE89MSZJO2lmKGs8RS0xJiZJPj4xPT1oWzIqayszXT4+MSYmKE89MixrKz0xKSxJPDApe2Zvcih2YXIgej0tKEk+PjEpLTEsRD0wO0Q8UDsrK0Qpe2lmKHZvaWQgMCE9PShSPWUodVtEXSx6KSkpcmV0dXJuIFJ9aWYoMCE9PU8pZm9yKEQ9MDtEPEw7KytEKXtpZih2b2lkIDAhPT0oUj1lKG9bRF0seikpKXJldHVybiBSfWlmKDEhPT1PKWZvcihEPTA7RDxDOysrRCl7dmFyIFI7aWYodm9pZCAwIT09KFI9ZShsW0RdLHopKSlyZXR1cm4gUn0wPT09Tz9kKG8scyxMKysseik6MT09PU8/ZChsLGMsQysrLHopOjI9PT1PJiZkKHUsZixQKysseil9ZWxzZXt6PShJPj4xKS0xOzA9PT1PP3AobyxzLEwtLSx6KToxPT09Tz9wKGwsYyxDLS0seik6Mj09PU8mJnAodSxmLFAtLSx6KX19fSxzY2FuQmlwYXJ0aXRlOmZ1bmN0aW9uKHQsZSxyLG4saSxsLGMsdSxmLG0sZyx2KXt2YXIgeT0wLHg9Mip0LGI9ZSxfPWUrdCx3PTEsVD0xO24/VD0xPDwyODp3PTE8PDI4O2Zvcih2YXIgaz1pO2s8bDsrK2spe3ZhciBBPWsrdyxNPXgqaztoW3krK109Y1tNK2JdLGhbeSsrXT0tQSxoW3krK109Y1tNK19dLGhbeSsrXT1BfWZvcihrPWY7azxtOysrayl7QT1rK1Q7dmFyIFM9eCprO2hbeSsrXT1nW1MrYl0saFt5KytdPS1BfXZhciBFPXk+Pj4xO2EoaCxFKTt2YXIgTD0wO2ZvcihrPTA7azxFOysrayl7dmFyIEM9MHxoWzIqaysxXTtpZihDPDApe3ZhciBQPSExO2lmKChBPS1DKT49MTw8Mjg/KFA9IW4sQS09MTw8MjgpOihQPSEhbixBLT0xKSxQKWQobyxzLEwrKyxBKTtlbHNle3ZhciBJPXZbQV0sTz14KkEsej1nW08rZSsxXSxEPWdbTytlKzErdF07dDpmb3IodmFyIFI9MDtSPEw7KytSKXt2YXIgRj1vW1JdLEI9eCpGO2lmKCEoRDxjW0IrZSsxXXx8Y1tCK2UrMSt0XTx6KSl7Zm9yKHZhciBOPWUrMjtOPHQ7KytOKWlmKGdbTytOK3RdPGNbQitOXXx8Y1tCK04rdF08Z1tPK05dKWNvbnRpbnVlIHQ7dmFyIGosVT11W0ZdO2lmKHZvaWQgMCE9PShqPW4/cihJLFUpOnIoVSxJKSkpcmV0dXJuIGp9fX19ZWxzZSBwKG8scyxMLS0sQy13KX19LHNjYW5Db21wbGV0ZTpmdW5jdGlvbih0LGUscixuLGkscyxsLGMsdSxmLHApe2Zvcih2YXIgZD0wLG09Mip0LGc9ZSx2PWUrdCx5PW47eTxpOysreSl7dmFyIHg9eSsoMTw8MjgpLGI9bSp5O2hbZCsrXT1zW2IrZ10saFtkKytdPS14LGhbZCsrXT1zW2Irdl0saFtkKytdPXh9Zm9yKHk9Yzt5PHU7Kyt5KXt4PXkrMTt2YXIgXz1tKnk7aFtkKytdPWZbXytnXSxoW2QrK109LXh9dmFyIHc9ZD4+PjE7YShoLHcpO3ZhciBUPTA7Zm9yKHk9MDt5PHc7Kyt5KXt2YXIgaz0wfGhbMip5KzFdO2lmKGs8MCl7aWYoKHg9LWspPj0xPDwyOClvW1QrK109eC0oMTw8MjgpO2Vsc2V7dmFyIEE9cFt4LT0xXSxNPW0qeCxTPWZbTStlKzFdLEU9ZltNK2UrMSt0XTt0OmZvcih2YXIgTD0wO0w8VDsrK0wpe3ZhciBDPW9bTF0sUD1sW0NdO2lmKFA9PT1BKWJyZWFrO3ZhciBJPW0qQztpZighKEU8c1tJK2UrMV18fHNbSStlKzErdF08Uykpe2Zvcih2YXIgTz1lKzI7Tzx0OysrTylpZihmW00rTyt0XTxzW0krT118fHNbSStPK3RdPGZbTStPXSljb250aW51ZSB0O3ZhciB6PXIoUCxBKTtpZih2b2lkIDAhPT16KXJldHVybiB6fX19fWVsc2V7Zm9yKHg9ay0oMTw8MjgpLEw9VC0xO0w+PTA7LS1MKWlmKG9bTF09PT14KXtmb3IoTz1MKzE7TzxUOysrTylvW08tMV09b1tPXTticmVha30tLVR9fX19O3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgiYml0LXR3aWRkbGUiKSxhPXQoIi4vc29ydCIpLG89bi5tYWxsb2NJbnQzMigxMDI0KSxzPW4ubWFsbG9jSW50MzIoMTAyNCksbD1uLm1hbGxvY0ludDMyKDEwMjQpLGM9bi5tYWxsb2NJbnQzMigxMDI0KSx1PW4ubWFsbG9jSW50MzIoMTAyNCksZj1uLm1hbGxvY0ludDMyKDEwMjQpLGg9bi5tYWxsb2NEb3VibGUoODE5Mik7ZnVuY3Rpb24gcCh0LGUscixuKXt2YXIgaT1lW25dLGE9dFtyLTFdO3RbaV09YSxlW2FdPWl9ZnVuY3Rpb24gZCh0LGUscixuKXt0W3JdPW4sZVtuXT1yfX0seyIuL3NvcnQiOjEwOSwiYml0LXR3aWRkbGUiOjEwMSwidHlwZWRhcnJheS1wb29sIjo1OTB9XSwxMTE6W2Z1bmN0aW9uKHQsZSxyKXt9LHt9XSwxMTI6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KInVzZSBzdHJpY3QiO3ZhciBlPXQoImJhc2U2NC1qcyIpLG49dCgiaWVlZTc1NCIpO3IuQnVmZmVyPWEsci5TbG93QnVmZmVyPWZ1bmN0aW9uKHQpeyt0IT10JiYodD0wKTtyZXR1cm4gYS5hbGxvYygrdCl9LHIuSU5TUEVDVF9NQVhfQllURVM9NTA7ZnVuY3Rpb24gaSh0KXtpZih0PjIxNDc0ODM2NDcpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZS5fX3Byb3RvX189YS5wcm90b3R5cGUsZX1mdW5jdGlvbiBhKHQsZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHQpe2lmKCJzdHJpbmciPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gbCh0KX1yZXR1cm4gbyh0LGUscil9ZnVuY3Rpb24gbyh0LGUscil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBmdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgZSYmIiIhPT1lfHwoZT0idXRmOCIpO2lmKCFhLmlzRW5jb2RpbmcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTt2YXIgcj0wfGYodCxlKSxuPWkociksbz1uLndyaXRlKHQsZSk7byE9PXImJihuPW4uc2xpY2UoMCxvKSk7cmV0dXJuIG59KHQsZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXJldHVybiBjKHQpO2lmKG51bGw9PXQpdGhyb3cgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiB0KTtpZihCKHQsQXJyYXlCdWZmZXIpfHx0JiZCKHQuYnVmZmVyLEFycmF5QnVmZmVyKSlyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2lmKGU8MHx8dC5ieXRlTGVuZ3RoPGUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJvZmZzZXQiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2lmKHQuYnl0ZUxlbmd0aDxlKyhyfHwwKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignImxlbmd0aCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7dmFyIG47bj12b2lkIDA9PT1lJiZ2b2lkIDA9PT1yP25ldyBVaW50OEFycmF5KHQpOnZvaWQgMD09PXI/bmV3IFVpbnQ4QXJyYXkodCxlKTpuZXcgVWludDhBcnJheSh0LGUscik7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59KHQsZSxyKTtpZigibnVtYmVyIj09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJyk7dmFyIG49dC52YWx1ZU9mJiZ0LnZhbHVlT2YoKTtpZihudWxsIT1uJiZuIT09dClyZXR1cm4gYS5mcm9tKG4sZSxyKTt2YXIgbz1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKXt2YXIgZT0wfHUodC5sZW5ndGgpLHI9aShlKTtyZXR1cm4gMD09PXIubGVuZ3RofHx0LmNvcHkociwwLDAsZSkscn1pZih2b2lkIDAhPT10Lmxlbmd0aClyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHQubGVuZ3RofHxOKHQubGVuZ3RoKT9pKDApOmModCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJkFycmF5LmlzQXJyYXkodC5kYXRhKSlyZXR1cm4gYyh0LmRhdGEpfSh0KTtpZihvKXJldHVybiBvO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1TeW1ib2wudG9QcmltaXRpdmUmJiJmdW5jdGlvbiI9PXR5cGVvZiB0W1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIGEuZnJvbSh0W1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLGUscik7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgdCl9ZnVuY3Rpb24gcyh0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZih0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyt0KyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKX1mdW5jdGlvbiBsKHQpe3JldHVybiBzKHQpLGkodDwwPzA6MHx1KHQpKX1mdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDwwPzA6MHx1KHQubGVuZ3RoKSxyPWkoZSksbj0wO248ZTtuKz0xKXJbbl09MjU1JnRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0KXtpZih0Pj0yMTQ3NDgzNjQ3KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IisyMTQ3NDgzNjQ3Li50b1N0cmluZygxNikrIiBieXRlcyIpO3JldHVybiAwfHR9ZnVuY3Rpb24gZih0LGUpe2lmKGEuaXNCdWZmZXIodCkpcmV0dXJuIHQubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyh0KXx8Qih0LEFycmF5QnVmZmVyKSlyZXR1cm4gdC5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dmFyIHI9dC5sZW5ndGgsbj1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFuJiYwPT09cilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2goZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBEKHQpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gUih0KS5sZW5ndGg7ZGVmYXVsdDppZihpKXJldHVybiBuPy0xOkQodCkubGVuZ3RoO2U9KCIiK2UpLnRvTG93ZXJDYXNlKCksaT0hMH19ZnVuY3Rpb24gaCh0LGUscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PWV8fGU8MCkmJihlPTApLGU+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KGU+Pj49MCkpcmV0dXJuIiI7Zm9yKHR8fCh0PSJ1dGY4Iik7Oylzd2l0Y2godCl7Y2FzZSJoZXgiOnJldHVybiBNKHRoaXMsZSxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlImFzY2lpIjpyZXR1cm4gayh0aGlzLGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQSh0aGlzLGUscik7Y2FzZSJiYXNlNjQiOnJldHVybiB3KHRoaXMsZSxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIFModGhpcyxlLHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3Q9KHQrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIGQodCxlLHIsbixpKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiByPyhuPXIscj0wKTpyPjIxNDc0ODM2NDc/cj0yMTQ3NDgzNjQ3OnI8LTIxNDc0ODM2NDgmJihyPS0yMTQ3NDgzNjQ4KSxOKHI9K3IpJiYocj1pPzA6dC5sZW5ndGgtMSkscjwwJiYocj10Lmxlbmd0aCtyKSxyPj10Lmxlbmd0aCl7aWYoaSlyZXR1cm4tMTtyPXQubGVuZ3RoLTF9ZWxzZSBpZihyPDApe2lmKCFpKXJldHVybi0xO3I9MH1pZigic3RyaW5nIj09dHlwZW9mIGUmJihlPWEuZnJvbShlLG4pKSxhLmlzQnVmZmVyKGUpKXJldHVybiAwPT09ZS5sZW5ndGg/LTE6bSh0LGUscixuLGkpO2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2k/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHQsZSxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKHQsZSxyKTptKHQsW2VdLHIsbixpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBtKHQsZSxyLG4saSl7dmFyIGEsbz0xLHM9dC5sZW5ndGgsbD1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIDE9PT1vP3RbZV06dC5yZWFkVUludDE2QkUoZSpvKX1pZihpKXt2YXIgdT0tMTtmb3IoYT1yO2E8czthKyspaWYoYyh0LGEpPT09YyhlLC0xPT09dT8wOmEtdSkpe2lmKC0xPT09dSYmKHU9YSksYS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGEtPWEtdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxhPXI7YT49MDthLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihjKHQsYStoKSE9PWMoZSxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBhfXJldHVybi0xfWZ1bmN0aW9uIGcodCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+aSYmKG49aSk6bj1pO3ZhciBhPWUubGVuZ3RoO24+YS8yJiYobj1hLzIpO2Zvcih2YXIgbz0wO288bjsrK28pe3ZhciBzPXBhcnNlSW50KGUuc3Vic3RyKDIqbywyKSwxNik7aWYoTihzKSlyZXR1cm4gbzt0W3Irb109c31yZXR1cm4gb31mdW5jdGlvbiB2KHQsZSxyLG4pe3JldHVybiBGKEQoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24geSh0LGUscixuKXtyZXR1cm4gRihmdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX0oZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIHkodCxlLHIsbil9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gRihSKGUpLHQscixuKX1mdW5jdGlvbiBfKHQsZSxyLG4pe3JldHVybiBGKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG4saSxhPVtdLG89MDtvPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK28pcj10LmNoYXJDb2RlQXQobyksbj1yPj44LGk9ciUyNTYsYS5wdXNoKGkpLGEucHVzaChuKTtyZXR1cm4gYX0oZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gdyh0LHIsbil7cmV0dXJuIDA9PT1yJiZuPT09dC5sZW5ndGg/ZS5mcm9tQnl0ZUFycmF5KHQpOmUuZnJvbUJ5dGVBcnJheSh0LnNsaWNlKHIsbikpfWZ1bmN0aW9uIFQodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgYSxvLHMsbCxjPXRbaV0sdT1udWxsLGY9Yz4yMzk/NDpjPjIyMz8zOmM+MTkxPzI6MTtpZihpK2Y8PXIpc3dpdGNoKGYpe2Nhc2UgMTpjPDEyOCYmKHU9Yyk7YnJlYWs7Y2FzZSAyOjEyOD09KDE5MiYoYT10W2krMV0pKSYmKGw9KDMxJmMpPDw2fDYzJmEpPjEyNyYmKHU9bCk7YnJlYWs7Y2FzZSAzOmE9dFtpKzFdLG89dFtpKzJdLDEyOD09KDE5MiZhKSYmMTI4PT0oMTkyJm8pJiYobD0oMTUmYyk8PDEyfCg2MyZhKTw8Nnw2MyZvKT4yMDQ3JiYobDw1NTI5Nnx8bD41NzM0MykmJih1PWwpO2JyZWFrO2Nhc2UgNDphPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYobD0oMTUmYyk8PDE4fCg2MyZhKTw8MTJ8KDYzJm8pPDw2fDYzJnMpPjY1NTM1JiZsPDExMTQxMTImJih1PWwpfW51bGw9PT11Pyh1PTY1NTMzLGY9MSk6dT42NTUzNSYmKHUtPTY1NTM2LG4ucHVzaCh1Pj4+MTAmMTAyM3w1NTI5NiksdT01NjMyMHwxMDIzJnUpLG4ucHVzaCh1KSxpKz1mfXJldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD00MDk2KXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyx0KTt2YXIgcj0iIixuPTA7Zm9yKDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz00MDk2KSk7cmV0dXJuIHJ9KG4pfXIua01heExlbmd0aD0yMTQ3NDgzNjQ3LGEuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbigpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCl9Y2F0Y2godCl7cmV0dXJuITF9fSgpLGEuVFlQRURfQVJSQVlfU1VQUE9SVHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwiZnVuY3Rpb24iIT10eXBlb2YgY29uc29sZS5lcnJvcnx8Y29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKGEuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSwib2Zmc2V0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihhLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksInVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJm51bGwhPVN5bWJvbC5zcGVjaWVzJiZhW1N5bWJvbC5zcGVjaWVzXT09PWEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExfSksYS5wb29sU2l6ZT04MTkyLGEuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG8odCxlLHIpfSxhLnByb3RvdHlwZS5fX3Byb3RvX189VWludDhBcnJheS5wcm90b3R5cGUsYS5fX3Byb3RvX189VWludDhBcnJheSxhLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3JldHVybiBzKHQpLHQ8PTA/aSh0KTp2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9pKHQpLmZpbGwoZSxyKTppKHQpLmZpbGwoZSk6aSh0KX0odCxlLHIpfSxhLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfSxhLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gbCh0KX0sYS5pc0J1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmITA9PT10Ll9pc0J1ZmZlciYmdCE9PWEucHJvdG90eXBlfSxhLmNvbXBhcmU9ZnVuY3Rpb24odCxlKXtpZihCKHQsVWludDhBcnJheSkmJih0PWEuZnJvbSh0LHQub2Zmc2V0LHQuYnl0ZUxlbmd0aCkpLEIoZSxVaW50OEFycmF5KSYmKGU9YS5mcm9tKGUsZS5vZmZzZXQsZS5ieXRlTGVuZ3RoKSksIWEuaXNCdWZmZXIodCl8fCFhLmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LGEuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sYS5jb25jYXQ9ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PXQubGVuZ3RoKXJldHVybiBhLmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PWUpZm9yKGU9MCxyPTA7cjx0Lmxlbmd0aDsrK3IpZSs9dFtyXS5sZW5ndGg7dmFyIG49YS5hbGxvY1Vuc2FmZShlKSxpPTA7Zm9yKHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG89dFtyXTtpZihCKG8sVWludDhBcnJheSkmJihvPWEuZnJvbShvKSksIWEuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGkpLGkrPW8ubGVuZ3RofXJldHVybiBufSxhLmJ5dGVMZW5ndGg9ZixhLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsYS5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKXAodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClwKHRoaXMsZSxlKzMpLHAodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sYS5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KXAodGhpcyxlLGUrNykscCh0aGlzLGUrMSxlKzYpLHAodGhpcyxlKzIsZSs1KSxwKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LGEucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP1QodGhpcywwLHQpOmguYXBwbHkodGhpcyxhcmd1bWVudHMpfSxhLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1hLnByb3RvdHlwZS50b1N0cmluZyxhLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7aWYoIWEuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHx8MD09PWEuY29tcGFyZSh0aGlzLHQpfSxhLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9IiIsZT1yLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0PXRoaXMudG9TdHJpbmcoImhleCIsMCxlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPmUmJih0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAiK3QrIj4ifSxhLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoQih0LFVpbnQ4QXJyYXkpJiYodD1hLmZyb20odCx0Lm9mZnNldCx0LmJ5dGVMZW5ndGgpKSwhYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInRhcmdldCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KTtpZih2b2lkIDA9PT1lJiYoZT0wKSx2b2lkIDA9PT1yJiYocj10P3QubGVuZ3RoOjApLHZvaWQgMD09PW4mJihuPTApLHZvaWQgMD09PWkmJihpPXRoaXMubGVuZ3RoKSxlPDB8fHI+dC5sZW5ndGh8fG48MHx8aT50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYobj49aSYmZT49cilyZXR1cm4gMDtpZihuPj1pKXJldHVybi0xO2lmKGU+PXIpcmV0dXJuIDE7aWYodGhpcz09PXQpcmV0dXJuIDA7Zm9yKHZhciBvPShpPj4+PTApLShuPj4+PTApLHM9KHI+Pj49MCktKGU+Pj49MCksbD1NYXRoLm1pbihvLHMpLGM9dGhpcy5zbGljZShuLGkpLHU9dC5zbGljZShlLHIpLGY9MDtmPGw7KytmKWlmKGNbZl0hPT11W2ZdKXtvPWNbZl0scz11W2ZdO2JyZWFrfXJldHVybiBvPHM/LTE6czxvPzE6MH0sYS5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24odCxlLHIpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKHQsZSxyKX0sYS5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGQodGhpcyx0LGUsciwhMCl9LGEucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZCh0aGlzLHQsZSxyLCExKX0sYS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPSJ1dGY4IixyPXRoaXMubGVuZ3RoLGU9MDtlbHNlIGlmKHZvaWQgMD09PXImJiJzdHJpbmciPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO2U+Pj49MCxpc0Zpbml0ZShyKT8ocj4+Pj0wLHZvaWQgMD09PW4mJihuPSJ1dGY4IikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7bnx8KG49InV0ZjgiKTtmb3IodmFyIGE9ITE7Oylzd2l0Y2gobil7Y2FzZSJoZXgiOnJldHVybiBnKHRoaXMsdCxlLHIpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHYodGhpcyx0LGUscik7Y2FzZSJhc2NpaSI6cmV0dXJuIHkodGhpcyx0LGUscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLHQsZSxyKTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyx0LGUscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBfKHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYoYSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK24pO249KCIiK24pLnRvTG93ZXJDYXNlKCksYT0hMH19LGEucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07ZnVuY3Rpb24gayh0LGUscil7dmFyIG49IiI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPSIiO3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBpPWU7aTxyOysraSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBufWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuPXQubGVuZ3RoOyghZXx8ZTwwKSYmKGU9MCksKCFyfHxyPDB8fHI+bikmJihyPW4pO2Zvcih2YXIgaT0iIixhPWU7YTxyOysrYSlpKz16KHRbYV0pO3JldHVybiBpfWZ1bmN0aW9uIFModCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT0iIixhPTA7YTxuLmxlbmd0aDthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUoblthXSsyNTYqblthKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBFKHQsZSxyKXtpZih0JTEhPTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBMKHQsZSxyLG4saSxvKXtpZighYS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYoZT5pfHxlPG8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gQyh0LGUscixuLGksYSl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIFAodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Qyh0LDAsciw0KSxuLndyaXRlKHQsZSxyLGksMjMsNCkscis0fWZ1bmN0aW9uIEkodCxlLHIsaSxhKXtyZXR1cm4gZT0rZSxyPj4+PTAsYXx8Qyh0LDAsciw4KSxuLndyaXRlKHQsZSxyLGksNTIsOCkscis4fWEucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7KHQ9fn50KTwwPyh0Kz1yKTwwJiYodD0wKTp0PnImJih0PXIpLChlPXZvaWQgMD09PWU/cjp+fmUpPDA/KGUrPXIpPDAmJihlPTApOmU+ciYmKGU9ciksZTx0JiYoZT10KTt2YXIgbj10aGlzLnN1YmFycmF5KHQsZSk7cmV0dXJuIG4uX19wcm90b19fPWEucHJvdG90eXBlLG59LGEucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odCxlLHIpe3Q+Pj49MCxlPj4+PTAscnx8RSh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxhPTA7KythPGUmJihpKj0yNTYpOyluKz10aGlzW3QrYV0qaTtyZXR1cm4gbn0sYS5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSxhLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSx0aGlzW3RdfSxhLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sYS5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LGEucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3RdfHRoaXNbdCsxXTw8OHx0aGlzW3QrMl08PDE2KSsxNjc3NzIxNip0aGlzW3QrM119LGEucHJvdG90eXBlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LGEucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dD4+Pj0wLGU+Pj49MCxyfHxFKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLGE9MDsrK2E8ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCthXSppO3JldHVybiBuPj0oaSo9MTI4KSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sYS5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0Pj4+PTAsZT4+Pj0wLHJ8fEUodCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49ZSxpPTEsYT10aGlzW3QrLS1uXTtuPjAmJihpKj0yNTYpOylhKz10aGlzW3QrLS1uXSppO3JldHVybiBhPj0oaSo9MTI4KSYmKGEtPU1hdGgucG93KDIsOCplKSksYX0sYS5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8tMSooMjU1LXRoaXNbdF0rMSk6dGhpc1t0XX0sYS5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXt0Pj4+PTAsZXx8RSh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxhLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe3Q+Pj49MCxlfHxFKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0KzFdfHRoaXNbdF08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGEucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ+Pj49MCxlfHxFKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSxhLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sYS5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD4+Pj0wLGV8fEUodCw0LHRoaXMubGVuZ3RoKSxuLnJlYWQodGhpcyx0LCEwLDIzLDQpfSxhLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDQsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsMjMsNCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITAsNTIsOCl9LGEucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0Pj4+PTAsZXx8RSh0LDgsdGhpcy5sZW5ndGgpLG4ucmVhZCh0aGlzLHQsITEsNTIsOCl9LGEucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEwodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT0xLGE9MDtmb3IodGhpc1tlXT0yNTUmdDsrK2E8ciYmKGkqPTI1Nik7KXRoaXNbZSthXT10L2kmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKHQsZSxyLG4peyh0PSt0LGU+Pj49MCxyPj4+PTAsbil8fEwodGhpcyx0LGUscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgaT1yLTEsYT0xO2Zvcih0aGlzW2UraV09MjU1JnQ7LS1pPj0wJiYoYSo9MjU2KTspdGhpc1tlK2ldPXQvYSYyNTU7cmV0dXJuIGUrcn0sYS5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMSwyNTUsMCksdGhpc1tlXT0yNTUmdCxlKzF9LGEucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsNjU1MzUsMCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDY1NTM1LDApLHRoaXNbZV09dD4+PjgsdGhpc1tlKzFdPTI1NSZ0LGUrMn0sYS5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbZSszXT10Pj4+MjQsdGhpc1tlKzJdPXQ+Pj4xNix0aGlzW2UrMV09dD4+PjgsdGhpc1tlXT0yNTUmdCxlKzR9LGEucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2VdPXQ+Pj4yNCx0aGlzW2UrMV09dD4+PjE2LHRoaXNbZSsyXT10Pj4+OCx0aGlzW2UrM109MjU1JnQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtMKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT0wLG89MSxzPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0PDAmJjA9PT1zJiYwIT09dGhpc1tlK2EtMV0mJihzPTEpLHRoaXNbZSthXT0odC9vPj4wKS1zJjI1NTtyZXR1cm4gZStyfSxhLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZT4+Pj0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtMKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgYT1yLTEsbz0xLHM9MDtmb3IodGhpc1tlK2FdPTI1NSZ0Oy0tYT49MCYmKG8qPTI1Nik7KXQ8MCYmMD09PXMmJjAhPT10aGlzW2UrYSsxXSYmKHM9MSksdGhpc1tlK2FdPSh0L28+PjApLXMmMjU1O3JldHVybiBlK3J9LGEucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsMSwxMjcsLTEyOCksdDwwJiYodD0yNTUrdCsxKSx0aGlzW2VdPTI1NSZ0LGUrMX0sYS5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdD0rdCxlPj4+PTAscnx8TCh0aGlzLHQsZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tlXT0yNTUmdCx0aGlzW2UrMV09dD4+PjgsZSsyfSxhLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW2VdPXQ+Pj44LHRoaXNbZSsxXT0yNTUmdCxlKzJ9LGEucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9K3QsZT4+Pj0wLHJ8fEwodGhpcyx0LGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW2VdPTI1NSZ0LHRoaXNbZSsxXT10Pj4+OCx0aGlzW2UrMl09dD4+PjE2LHRoaXNbZSszXT10Pj4+MjQsZSs0fSxhLnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PSt0LGU+Pj49MCxyfHxMKHRoaXMsdCxlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdDwwJiYodD00Mjk0OTY3Mjk1K3QrMSksdGhpc1tlXT10Pj4+MjQsdGhpc1tlKzFdPXQ+Pj4xNix0aGlzW2UrMl09dD4+PjgsdGhpc1tlKzNdPTI1NSZ0LGUrNH0sYS5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMCxyKX0sYS5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gUCh0aGlzLHQsZSwhMSxyKX0sYS5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIEkodGhpcyx0LGUsITAscil9LGEucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBJKHRoaXMsdCxlLCExLHIpfSxhLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCFhLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksZT49dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxlfHwoZT0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PXQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYobjwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO24+dGhpcy5sZW5ndGgmJihuPXRoaXMubGVuZ3RoKSx0Lmxlbmd0aC1lPG4tciYmKG49dC5sZW5ndGgtZStyKTt2YXIgaT1uLXI7aWYodGhpcz09PXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKXRoaXMuY29weVdpdGhpbihlLHIsbik7ZWxzZSBpZih0aGlzPT09dCYmcjxlJiZlPG4pZm9yKHZhciBvPWktMTtvPj0wOy0tbyl0W28rZV09dGhpc1tvK3JdO2Vsc2UgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodCx0aGlzLnN1YmFycmF5KHIsbiksZSk7cmV0dXJuIGl9LGEucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odCxlLHIsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZigic3RyaW5nIj09dHlwZW9mIGU/KG49ZSxlPTAscj10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiByJiYobj1yLHI9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW4mJiJzdHJpbmciIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBuJiYhYS5pc0VuY29kaW5nKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrbik7aWYoMT09PXQubGVuZ3RoKXt2YXIgaT10LmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PW4mJmk8MTI4fHwibGF0aW4xIj09PW4pJiYodD1pKX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdCYmKHQmPTI1NSk7aWYoZTwwfHx0aGlzLmxlbmd0aDxlfHx0aGlzLmxlbmd0aDxyKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihyPD1lKXJldHVybiB0aGlzO3ZhciBvO2lmKGU+Pj49MCxyPXZvaWQgMD09PXI/dGhpcy5sZW5ndGg6cj4+PjAsdHx8KHQ9MCksIm51bWJlciI9PXR5cGVvZiB0KWZvcihvPWU7bzxyOysrbyl0aGlzW29dPXQ7ZWxzZXt2YXIgcz1hLmlzQnVmZmVyKHQpP3Q6YS5mcm9tKHQsbiksbD1zLmxlbmd0aDtpZigwPT09bCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdCsnIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCAidmFsdWUiJyk7Zm9yKG89MDtvPHItZTsrK28pdGhpc1tvK2VdPXNbbyVsXX1yZXR1cm4gdGhpc307dmFyIE89L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiB6KHQpe3JldHVybiB0PDE2PyIwIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7ZT1lfHwxLzA7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bnVsbCxhPVtdLG89MDtvPG47KytvKXtpZigocj10LmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyhlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZhLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPTY1NTM2KyhpLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGkmJihlLT0zKT4tMSYmYS5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO2EucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7YS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO2EucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKGUtPTQpPDApYnJlYWs7YS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gYX1mdW5jdGlvbiBSKHQpe3JldHVybiBlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKHQpe2lmKCh0PSh0PXQuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoTywiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7dC5sZW5ndGglNCE9MDspdCs9Ij0iO3JldHVybiB0fSh0KSl9ZnVuY3Rpb24gRih0LGUscixuKXtmb3IodmFyIGk9MDtpPG4mJiEoaStyPj1lLmxlbmd0aHx8aT49dC5sZW5ndGgpOysraSllW2krcl09dFtpXTtyZXR1cm4gaX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBlfHxudWxsIT10JiZudWxsIT10LmNvbnN0cnVjdG9yJiZudWxsIT10LmNvbnN0cnVjdG9yLm5hbWUmJnQuY29uc3RydWN0b3IubmFtZT09PWUubmFtZX1mdW5jdGlvbiBOKHQpe3JldHVybiB0IT10fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiYnVmZmVyIikuQnVmZmVyKX0seyJiYXNlNjQtanMiOjgyLGJ1ZmZlcjoxMTIsaWVlZTc1NDo0Mjd9XSwxMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvbW9ub3RvbmUiKSxpPXQoIi4vbGliL3RyaWFuZ3VsYXRpb24iKSxhPXQoIi4vbGliL2RlbGF1bmF5Iiksbz10KCIuL2xpYi9maWx0ZXIiKTtmdW5jdGlvbiBzKHQpe3JldHVybltNYXRoLm1pbih0WzBdLHRbMV0pLE1hdGgubWF4KHRbMF0sdFsxXSldfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdFswXS1lWzBdfHx0WzFdLWVbMV19ZnVuY3Rpb24gYyh0LGUscil7cmV0dXJuIGUgaW4gdD90W2VdOnJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtBcnJheS5pc0FycmF5KGUpPyhyPXJ8fHt9LGU9ZXx8W10pOihyPWV8fHt9LGU9W10pO3ZhciB1PSEhYyhyLCJkZWxhdW5heSIsITApLGY9ISFjKHIsImludGVyaW9yIiwhMCksaD0hIWMociwiZXh0ZXJpb3IiLCEwKSxwPSEhYyhyLCJpbmZpbml0eSIsITEpO2lmKCFmJiYhaHx8MD09PXQubGVuZ3RoKXJldHVybltdO3ZhciBkPW4odCxlKTtpZih1fHxmIT09aHx8cCl7Zm9yKHZhciBtPWkodC5sZW5ndGgsZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKHMpLnNvcnQobCl9KGUpKSxnPTA7ZzxkLmxlbmd0aDsrK2cpe3ZhciB2PWRbZ107bS5hZGRUcmlhbmdsZSh2WzBdLHZbMV0sdlsyXSl9cmV0dXJuIHUmJmEodCxtKSxoP2Y/cD9vKG0sMCxwKTptLmNlbGxzKCk6byhtLDEscCk6byhtLC0xKX1yZXR1cm4gZH19LHsiLi9saWIvZGVsYXVuYXkiOjExNCwiLi9saWIvZmlsdGVyIjoxMTUsIi4vbGliL21vbm90b25lIjoxMTYsIi4vbGliL3RyaWFuZ3VsYXRpb24iOjExN31dLDExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtaW4tc3BoZXJlIilbNF07dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSxyLGksYSxvKXt2YXIgcz1lLm9wcG9zaXRlKGksYSk7aWYoIShzPDApKXtpZihhPGkpe3ZhciBsPWk7aT1hLGE9bCxsPW8sbz1zLHM9bH1lLmlzQ29uc3RyYWludChpLGEpfHxuKHRbaV0sdFthXSx0W29dLHRbc10pPDAmJnIucHVzaChpLGEpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10Lmxlbmd0aCxvPWUuc3RhcnMscz0wO3M8YTsrK3MpZm9yKHZhciBsPW9bc10sYz0xO2M8bC5sZW5ndGg7Yys9Mil7aWYoISgocD1sW2NdKTxzKSYmIWUuaXNDb25zdHJhaW50KHMscCkpe2Zvcih2YXIgdT1sW2MtMV0sZj0tMSxoPTE7aDxsLmxlbmd0aDtoKz0yKWlmKGxbaC0xXT09PXApe2Y9bFtoXTticmVha31mPDB8fG4odFtzXSx0W3BdLHRbdV0sdFtmXSk8MCYmci5wdXNoKHMscCl9fWZvcig7ci5sZW5ndGg+MDspe2Zvcih2YXIgcD1yLnBvcCgpLGQ9KHM9ci5wb3AoKSx1PS0xLGY9LTEsbD1vW3NdLDEpO2Q8bC5sZW5ndGg7ZCs9Mil7dmFyIG09bFtkLTFdLGc9bFtkXTttPT09cD9mPWc6Zz09PXAmJih1PW0pfXU8MHx8ZjwwfHwobih0W3NdLHRbcF0sdFt1XSx0W2ZdKT49MHx8KGUuZmxpcChzLHApLGkodCxlLHIsdSxzLGYpLGkodCxlLHIscyxmLHUpLGkodCxlLHIsZixwLHUpLGkodCxlLHIscCx1LGYpKSl9fX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJyb2J1c3QtaW4tc3BoZXJlIjo1MjJ9XSwxMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpO2Z1bmN0aW9uIGEodCxlLHIsbixpLGEsbyl7dGhpcy5jZWxscz10LHRoaXMubmVpZ2hib3I9ZSx0aGlzLmZsYWdzPW4sdGhpcy5jb25zdHJhaW50PXIsdGhpcy5hY3RpdmU9aSx0aGlzLm5leHQ9YSx0aGlzLmJvdW5kYXJ5PW99ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXXx8dFsyXS1lWzJdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jZWxscygpLG49ci5sZW5ndGgsaT0wO2k8bjsrK2kpe3ZhciBzPSh2PXJbaV0pWzBdLGw9dlsxXSxjPXZbMl07bDxjP2w8cyYmKHZbMF09bCx2WzFdPWMsdlsyXT1zKTpjPHMmJih2WzBdPWMsdlsxXT1zLHZbMl09bCl9ci5zb3J0KG8pO3ZhciB1PW5ldyBBcnJheShuKTtmb3IoaT0wO2k8dS5sZW5ndGg7KytpKXVbaV09MDt2YXIgZj1bXSxoPVtdLHA9bmV3IEFycmF5KDMqbiksZD1uZXcgQXJyYXkoMypuKSxtPW51bGw7ZSYmKG09W10pO3ZhciBnPW5ldyBhKHIscCxkLHUsZixoLG0pO2ZvcihpPTA7aTxuOysraSlmb3IodmFyIHY9cltpXSx5PTA7eTwzOysreSl7cz12W3ldLGw9dlsoeSsxKSUzXTt2YXIgeD1wWzMqaSt5XT1nLmxvY2F0ZShsLHMsdC5vcHBvc2l0ZShsLHMpKSxiPWRbMyppK3ldPXQuaXNDb25zdHJhaW50KHMsbCk7eDwwJiYoYj9oLnB1c2goaSk6KGYucHVzaChpKSx1W2ldPTEpLGUmJm0ucHVzaChbbCxzLC0xXSkpfXJldHVybiBnfSh0LHIpO2lmKDA9PT1lKXJldHVybiByP24uY2VsbHMuY29uY2F0KG4uYm91bmRhcnkpOm4uY2VsbHM7dmFyIGk9MSxzPW4uYWN0aXZlLGw9bi5uZXh0LGM9bi5mbGFncyx1PW4uY2VsbHMsZj1uLmNvbnN0cmFpbnQsaD1uLm5laWdoYm9yO2Zvcig7cy5sZW5ndGg+MHx8bC5sZW5ndGg+MDspe2Zvcig7cy5sZW5ndGg+MDspe3ZhciBwPXMucG9wKCk7aWYoY1twXSE9PS1pKXtjW3BdPWk7dVtwXTtmb3IodmFyIGQ9MDtkPDM7KytkKXt2YXIgbT1oWzMqcCtkXTttPj0wJiYwPT09Y1ttXSYmKGZbMypwK2RdP2wucHVzaChtKToocy5wdXNoKG0pLGNbbV09aSkpfX19dmFyIGc9bDtsPXMscz1nLGwubGVuZ3RoPTAsaT0taX12YXIgdj1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT0wO2k8dC5sZW5ndGg7KytpKWVbaV09PT1yJiYodFtuKytdPXRbaV0pO3JldHVybiB0Lmxlbmd0aD1uLHR9KHUsYyxlKTtpZihyKXJldHVybiB2LmNvbmNhdChuLmJvdW5kYXJ5KTtyZXR1cm4gdn0sYS5wcm90b3R5cGUubG9jYXRlPShuPVswLDAsMF0sZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQscz1lLGw9cjtyZXR1cm4gZTxyP2U8dCYmKGE9ZSxzPXIsbD10KTpyPHQmJihhPXIscz10LGw9ZSksYTwwPy0xOihuWzBdPWEsblsxXT1zLG5bMl09bCxpLmVxKHRoaXMuY2VsbHMsbixvKSl9KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwfV0sMTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXTtmdW5jdGlvbiBhKHQsZSxyLG4saSl7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy5pZHg9cix0aGlzLmxvd2VySWRzPW4sdGhpcy51cHBlcklkcz1pfWZ1bmN0aW9uIG8odCxlLHIsbil7dGhpcy5hPXQsdGhpcy5iPWUsdGhpcy50eXBlPXIsdGhpcy5pZHg9bn1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9dC5hWzBdLWUuYVswXXx8dC5hWzFdLWUuYVsxXXx8dC50eXBlLWUudHlwZTtyZXR1cm4gcnx8KDAhPT10LnR5cGUmJihyPWkodC5hLHQuYixlLmIpKT9yOnQuaWR4LWUuaWR4KX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIGkodC5hLHQuYixlKX1mdW5jdGlvbiBjKHQsZSxyLGEsbyl7Zm9yKHZhciBzPW4ubHQoZSxhLGwpLGM9bi5ndChlLGEsbCksdT1zO3U8YzsrK3Upe2Zvcih2YXIgZj1lW3VdLGg9Zi5sb3dlcklkcyxwPWgubGVuZ3RoO3A+MSYmaShyW2hbcC0yXV0scltoW3AtMV1dLGEpPjA7KXQucHVzaChbaFtwLTFdLGhbcC0yXSxvXSkscC09MTtoLmxlbmd0aD1wLGgucHVzaChvKTt2YXIgZD1mLnVwcGVySWRzO2ZvcihwPWQubGVuZ3RoO3A+MSYmaShyW2RbcC0yXV0scltkW3AtMV1dLGEpPDA7KXQucHVzaChbZFtwLTJdLGRbcC0xXSxvXSkscC09MTtkLmxlbmd0aD1wLGQucHVzaChvKX19ZnVuY3Rpb24gdSh0LGUpe3ZhciByO3JldHVybihyPXQuYVswXTxlLmFbMF0/aSh0LmEsdC5iLGUuYSk6aShlLmIsZS5hLHQuYSkpP3I6KHI9ZS5iWzBdPHQuYlswXT9pKHQuYSx0LmIsZS5iKTppKGUuYixlLmEsdC5iKSl8fHQuaWR4LWUuaWR4fWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBpPW4ubGUodCxyLHUpLG89dFtpXSxzPW8udXBwZXJJZHMsbD1zW3MubGVuZ3RoLTFdO28udXBwZXJJZHM9W2xdLHQuc3BsaWNlKGkrMSwwLG5ldyBhKHIuYSxyLmIsci5pZHgsW2xdLHMpKX1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgaT1yLmE7ci5hPXIuYixyLmI9aTt2YXIgYT1uLmVxKHQscix1KSxvPXRbYV07dFthLTFdLnVwcGVySWRzPW8udXBwZXJJZHMsdC5zcGxpY2UoYSwxKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPVtdLGw9MDtsPHI7KytsKWkucHVzaChuZXcgbyh0W2xdLG51bGwsMCxsKSk7Zm9yKGw9MDtsPG47KytsKXt2YXIgdT1lW2xdLHA9dFt1WzBdXSxkPXRbdVsxXV07cFswXTxkWzBdP2kucHVzaChuZXcgbyhwLGQsMixsKSxuZXcgbyhkLHAsMSxsKSk6cFswXT5kWzBdJiZpLnB1c2gobmV3IG8oZCxwLDIsbCksbmV3IG8ocCxkLDEsbCkpfWkuc29ydChzKTtmb3IodmFyIG09aVswXS5hWzBdLSgxK01hdGguYWJzKGlbMF0uYVswXSkpKk1hdGgucG93KDIsLTUyKSxnPVtuZXcgYShbbSwxXSxbbSwwXSwtMSxbXSxbXSxbXSxbXSldLHY9W10seT0obD0wLGkubGVuZ3RoKTtsPHk7KytsKXt2YXIgeD1pW2xdLGI9eC50eXBlOzA9PT1iP2ModixnLHQseC5hLHguaWR4KToyPT09Yj9mKGcsdCx4KTpoKGcsdCx4KX1yZXR1cm4gdn19LHsiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwicm9idXN0LW9yaWVudGF0aW9uIjo1MjR9XSwxMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKTtmdW5jdGlvbiBpKHQsZSl7dGhpcy5zdGFycz10LHRoaXMuZWRnZXM9ZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09W107cmV0dXJuIG5ldyBpKHIsZSl9O3ZhciBhPWkucHJvdG90eXBlO2Z1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbj0xLGk9dC5sZW5ndGg7bjxpO24rPTIpaWYodFtuLTFdPT09ZSYmdFtuXT09PXIpcmV0dXJuIHRbbi0xXT10W2ktMl0sdFtuXT10W2ktMV0sdm9pZCh0Lmxlbmd0aD1pLTIpfWEuaXNDb25zdHJhaW50PWZ1bmN0aW9uKCl7dmFyIHQ9WzAsMF07ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0WzBdLWVbMF18fHRbMV0tZVsxXX1yZXR1cm4gZnVuY3Rpb24ocixpKXtyZXR1cm4gdFswXT1NYXRoLm1pbihyLGkpLHRbMV09TWF0aC5tYXgocixpKSxuLmVxKHRoaXMuZWRnZXMsdCxlKT49MH19KCksYS5yZW1vdmVUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztvKG5bdF0sZSxyKSxvKG5bZV0scix0KSxvKG5bcl0sdCxlKX0sYS5hZGRUcmlhbmdsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5zdGFycztuW3RdLnB1c2goZSxyKSxuW2VdLnB1c2gocix0KSxuW3JdLnB1c2godCxlKX0sYS5vcHBvc2l0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLnN0YXJzW2VdLG49MSxpPXIubGVuZ3RoO248aTtuKz0yKWlmKHJbbl09PT10KXJldHVybiByW24tMV07cmV0dXJuLTF9LGEuZmxpcD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub3Bwb3NpdGUodCxlKSxuPXRoaXMub3Bwb3NpdGUoZSx0KTt0aGlzLnJlbW92ZVRyaWFuZ2xlKHQsZSxyKSx0aGlzLnJlbW92ZVRyaWFuZ2xlKGUsdCxuKSx0aGlzLmFkZFRyaWFuZ2xlKHQsbixyKSx0aGlzLmFkZFRyaWFuZ2xlKGUscixuKX0sYS5lZGdlcz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN0YXJzLGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTAsbz1pLmxlbmd0aDthPG87YSs9MillLnB1c2goW2lbYV0saVthKzFdXSk7cmV0dXJuIGV9LGEuY2VsbHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5zdGFycyxlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvO2ErPTIpe3ZhciBzPWlbYV0sbD1pW2ErMV07cjxNYXRoLm1pbihzLGwpJiZlLnB1c2goW3IscyxsXSl9cmV0dXJuIGV9fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDB9XSwxMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9MTtyPHQubGVuZ3RoOysrcilmb3IodmFyIG49MDtuPHI7KytuKWlmKHRbcl08dFtuXSllPS1lO2Vsc2UgaWYodFtuXT09PXRbcl0pcmV0dXJuIDA7cmV0dXJuIGV9fSx7fV0sMTE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9dCgicm9idXN0LWxpbmVhci1zb2x2ZSIpO2Z1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLGk9MDtpPG47KytpKXIrPXRbaV0qZVtpXTtyZXR1cm4gcn1mdW5jdGlvbiBvKHQpe3ZhciBlPXQubGVuZ3RoO2lmKDA9PT1lKXJldHVybltdO3RbMF0ubGVuZ3RoO3ZhciByPW4oW3QubGVuZ3RoKzEsdC5sZW5ndGgrMV0sMSksbz1uKFt0Lmxlbmd0aCsxXSwxKTtyW2VdW2VdPTA7Zm9yKHZhciBzPTA7czxlOysrcyl7Zm9yKHZhciBsPTA7bDw9czsrK2wpcltsXVtzXT1yW3NdW2xdPTIqYSh0W3NdLHRbbF0pO29bc109YSh0W3NdLHRbc10pfXZhciBjPWkocixvKSx1PTAsZj1jW2UrMV07Zm9yKHM9MDtzPGYubGVuZ3RoOysrcyl1Kz1mW3NdO3ZhciBoPW5ldyBBcnJheShlKTtmb3Iocz0wO3M8ZTsrK3Mpe2Y9Y1tzXTt2YXIgcD0wO2ZvcihsPTA7bDxmLmxlbmd0aDsrK2wpcCs9ZltsXTtoW3NdPXAvdX1yZXR1cm4gaH1mdW5jdGlvbiBzKHQpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm5bXTtmb3IodmFyIGU9dFswXS5sZW5ndGgscj1uKFtlXSksaT1vKHQpLGE9MDthPHQubGVuZ3RoOysrYSlmb3IodmFyIHM9MDtzPGU7KytzKXJbc10rPXRbYV1bc10qaVthXTtyZXR1cm4gcn1zLmJhcnljZW5ldHJpYz1vLGUuZXhwb3J0cz1zfSx7ZHVwOjE3Nywicm9idXN0LWxpbmVhci1zb2x2ZSI6NTIzfV0sMTIwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHQpLHI9MCxpPTA7aTx0Lmxlbmd0aDsrK2kpZm9yKHZhciBhPXRbaV0sbz0wO288ZS5sZW5ndGg7KytvKXIrPU1hdGgucG93KGFbb10tZVtvXSwyKTtyZXR1cm4gTWF0aC5zcXJ0KHIvdC5sZW5ndGgpfTt2YXIgbj10KCJjaXJjdW1jZW50ZXIiKX0se2NpcmN1bWNlbnRlcjoxMTl9XSwxMjE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPHI/dDxlP2U6dD5yP3I6dDp0PHI/cjp0PmU/ZTp0fX0se31dLDEyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuO2lmKHIpe249ZTtmb3IodmFyIGk9bmV3IEFycmF5KGUubGVuZ3RoKSxhPTA7YTxlLmxlbmd0aDsrK2Epe3ZhciBvPWVbYV07aVthXT1bb1swXSxvWzFdLHJbYV1dfWU9aX12YXIgcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZCh0LFtdLHAodCkpO3JldHVybiB2KGUsbixyKSwhIW59KHQsZSwhIXIpO2Zvcig7eSh0LGUsISFyKTspcz0hMDtpZihyJiZzKXtuLmxlbmd0aD0wLHIubGVuZ3RoPTA7Zm9yKGE9MDthPGUubGVuZ3RoOysrYSl7bz1lW2FdO24ucHVzaChbb1swXSxvWzFdXSksci5wdXNoKG9bMl0pfX1yZXR1cm4gc307dmFyIG49dCgidW5pb24tZmluZCIpLGk9dCgiYm94LWludGVyc2VjdCIpLGE9dCgicm9idXN0LXNlZ21lbnQtaW50ZXJzZWN0Iiksbz10KCJiaWctcmF0Iikscz10KCJiaWctcmF0L2NtcCIpLGw9dCgiYmlnLXJhdC90by1mbG9hdCIpLGM9dCgicmF0LXZlYyIpLHU9dCgibmV4dGFmdGVyIiksZj10KCIuL2xpYi9yYXQtc2VnLWludGVyc2VjdCIpO2Z1bmN0aW9uIGgodCl7dmFyIGU9bCh0KTtyZXR1cm5bdShlLC0xLzApLHUoZSwxLzApXX1mdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXTtlW3JdPVt1KG5bMF0sLTEvMCksdShuWzFdLC0xLzApLHUoblswXSwxLzApLHUoblsxXSwxLzApXX1yZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1uZXcgbihhKSxzPVtdLGw9MDtsPGUubGVuZ3RoOysrbCl7dmFyIGM9ZVtsXSxmPWgoY1swXSkscD1oKGNbMV0pO3MucHVzaChbdShmWzBdLC0xLzApLHUocFswXSwtMS8wKSx1KGZbMV0sMS8wKSx1KHBbMV0sMS8wKV0pfWkocywoZnVuY3Rpb24odCxlKXtvLmxpbmsodCxlKX0pKTt2YXIgZD0hMCxtPW5ldyBBcnJheShhKTtmb3IobD0wO2w8YTsrK2wpeyh2PW8uZmluZChsKSkhPT1sJiYoZD0hMSx0W3ZdPVtNYXRoLm1pbih0W2xdWzBdLHRbdl1bMF0pLE1hdGgubWluKHRbbF1bMV0sdFt2XVsxXSldKX1pZihkKXJldHVybiBudWxsO3ZhciBnPTA7Zm9yKGw9MDtsPGE7KytsKXt2YXIgdjsodj1vLmZpbmQobCkpPT09bD8obVtsXT1nLHRbZysrXT10W2xdKTptW2xdPS0xfXQubGVuZ3RoPWc7Zm9yKGw9MDtsPGE7KytsKW1bbF08MCYmKG1bbF09bVtvLmZpbmQobCldKTtyZXR1cm4gbX1mdW5jdGlvbiBtKHQsZSl7cmV0dXJuIHRbMF0tZVswXXx8dFsxXS1lWzFdfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj10WzBdLWVbMF18fHRbMV0tZVsxXTtyZXR1cm4gcnx8KHRbMl08ZVsyXT8tMTp0WzJdPmVbMl0/MTowKX1mdW5jdGlvbiB2KHQsZSxyKXtpZigwIT09dC5sZW5ndGgpe2lmKGUpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDsrK24pe3ZhciBpPWVbKG89dFtuXSlbMF1dLGE9ZVtvWzFdXTtvWzBdPU1hdGgubWluKGksYSksb1sxXT1NYXRoLm1heChpLGEpfWVsc2UgZm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIG87aT0obz10W25dKVswXSxhPW9bMV07b1swXT1NYXRoLm1pbihpLGEpLG9bMV09TWF0aC5tYXgoaSxhKX1yP3Quc29ydChnKTp0LnNvcnQobSk7dmFyIHM9MTtmb3Iobj0xO248dC5sZW5ndGg7KytuKXt2YXIgbD10W24tMV0sYz10W25dOyhjWzBdIT09bFswXXx8Y1sxXSE9PWxbMV18fHImJmNbMl0hPT1sWzJdKSYmKHRbcysrXT1jKX10Lmxlbmd0aD1zfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGk9ZVtuXSxhPXRbaVswXV0sbz10W2lbMV1dO3Jbbl09W3UoTWF0aC5taW4oYVswXSxvWzBdKSwtMS8wKSx1KE1hdGgubWluKGFbMV0sb1sxXSksLTEvMCksdShNYXRoLm1heChhWzBdLG9bMF0pLDEvMCksdShNYXRoLm1heChhWzFdLG9bMV0pLDEvMCldfXJldHVybiByfSh0LGUpLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdO3JldHVybiBpKHIsKGZ1bmN0aW9uKHIsaSl7dmFyIG89ZVtyXSxzPWVbaV07aWYob1swXSE9PXNbMF0mJm9bMF0hPT1zWzFdJiZvWzFdIT09c1swXSYmb1sxXSE9PXNbMV0pe3ZhciBsPXRbb1swXV0sYz10W29bMV1dLHU9dFtzWzBdXSxmPXRbc1sxXV07YShsLGMsdSxmKSYmbi5wdXNoKFtyLGldKX19KSksbn0odCxlLG4pLG09cCh0KSxnPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBvPVtdO3JldHVybiBpKHIsbiwoZnVuY3Rpb24ocixuKXt2YXIgaT1lW3JdO2lmKGlbMF0hPT1uJiZpWzFdIT09bil7dmFyIHM9dFtuXSxsPXRbaVswXV0sYz10W2lbMV1dO2EobCxjLHMscykmJm8ucHVzaChbcixuXSl9fSkpLG99KHQsZSxuLG0pLHk9ZCh0LGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsdSxoPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bbyh0WzBdKSxvKHRbMV0pXX0pKTtmb3IoYT0wO2E8ci5sZW5ndGg7KythKXt2YXIgcD1yW2FdO3U9cFswXTt2YXIgZD1wWzFdLG09ZVt1XSxnPWVbZF0sdj1mKGModFttWzBdXSksYyh0W21bMV1dKSxjKHRbZ1swXV0pLGModFtnWzFdXSkpO2lmKHYpe3ZhciB5PXQubGVuZ3RoO3QucHVzaChbbCh2WzBdKSxsKHZbMV0pXSksaC5wdXNoKHYpLG4ucHVzaChbdSx5XSxbZCx5XSl9fWZvcihuLnNvcnQoKGZ1bmN0aW9uKHQsZSl7aWYodFswXSE9PWVbMF0pcmV0dXJuIHRbMF0tZVswXTt2YXIgcj1oW3RbMV1dLG49aFtlWzFdXTtyZXR1cm4gcyhyWzBdLG5bMF0pfHxzKHJbMV0sblsxXSl9KSksYT1uLmxlbmd0aC0xO2E+PTA7LS1hKXt2YXIgeD1lW3U9KFM9blthXSlbMF1dLGI9eFswXSxfPXhbMV0sdz10W2JdLFQ9dFtfXTtpZigod1swXS1UWzBdfHx3WzFdLVRbMV0pPDApe3ZhciBrPWI7Yj1fLF89a314WzBdPWI7dmFyIEEsTT14WzFdPVNbMV07Zm9yKGkmJihBPXhbMl0pO2E+MCYmblthLTFdWzBdPT09dTspe3ZhciBTLEU9KFM9blstLWFdKVsxXTtpP2UucHVzaChbTSxFLEFdKTplLnB1c2goW00sRV0pLE09RX1pP2UucHVzaChbTSxfLEFdKTplLnB1c2goW00sX10pfXJldHVybiBofSh0LGUsaCxnLHIpKTtyZXR1cm4gdihlLHksciksISF5fHwoaC5sZW5ndGg+MHx8Zy5sZW5ndGg+MCl9fSx7Ii4vbGliL3JhdC1zZWctaW50ZXJzZWN0IjoxMjMsImJpZy1yYXQiOjg2LCJiaWctcmF0L2NtcCI6ODQsImJpZy1yYXQvdG8tZmxvYXQiOjk5LCJib3gtaW50ZXJzZWN0IjoxMDQsbmV4dGFmdGVyOjQ2MywicmF0LXZlYyI6NTA4LCJyb2J1c3Qtc2VnbWVudC1pbnRlcnNlY3QiOjUyNywidW5pb24tZmluZCI6NTkxfV0sMTIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgYT1zKGUsdCksZj1zKG4sciksaD11KGEsZik7aWYoMD09PW8oaCkpcmV0dXJuIG51bGw7dmFyIHA9cyh0LHIpLGQ9dShmLHApLG09aShkLGgpLGc9YyhhLG0pO3JldHVybiBsKHQsZyl9O3ZhciBuPXQoImJpZy1yYXQvbXVsIiksaT10KCJiaWctcmF0L2RpdiIpLGE9dCgiYmlnLXJhdC9zdWIiKSxvPXQoImJpZy1yYXQvc2lnbiIpLHM9dCgicmF0LXZlYy9zdWIiKSxsPXQoInJhdC12ZWMvYWRkIiksYz10KCJyYXQtdmVjL211bHMiKTtmdW5jdGlvbiB1KHQsZSl7cmV0dXJuIGEobih0WzBdLGVbMV0pLG4odFsxXSxlWzBdKSl9fSx7ImJpZy1yYXQvZGl2Ijo4NSwiYmlnLXJhdC9tdWwiOjk1LCJiaWctcmF0L3NpZ24iOjk3LCJiaWctcmF0L3N1YiI6OTgsInJhdC12ZWMvYWRkIjo1MDcsInJhdC12ZWMvbXVscyI6NTA5LCJyYXQtdmVjL3N1YiI6NTEwfV0sMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNsYW1wIik7ZnVuY3Rpb24gaSh0LGUpe251bGw9PWUmJihlPSEwKTt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz10WzNdO3JldHVybiBudWxsPT1vJiYobz1lPzE6MjU1KSxlJiYocio9MjU1LGkqPTI1NSxhKj0yNTUsbyo9MjU1KSwxNjc3NzIxNioocj0yNTUmbihyLDAsMjU1KSkrKChpPTI1NSZuKGksMCwyNTUpKTw8MTYpKygoYT0yNTUmbihhLDAsMjU1KSk8PDgpKyhvPTI1NSZuKG8sMCwyNTUpKX1lLmV4cG9ydHM9aSxlLmV4cG9ydHMudG89aSxlLmV4cG9ydHMuZnJvbT1mdW5jdGlvbih0LGUpe3ZhciByPSh0PSt0KT4+PjI0LG49KDE2NzExNjgwJnQpPj4+MTYsaT0oNjUyODAmdCk+Pj44LGE9MjU1JnQ7cmV0dXJuITE9PT1lP1tyLG4saSxhXTpbci8yNTUsbi8yNTUsaS8yNTUsYS8yNTVdfX0se2NsYW1wOjEyMX1dLDEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2FsaWNlYmx1ZTpbMjQwLDI0OCwyNTVdLGFudGlxdWV3aGl0ZTpbMjUwLDIzNSwyMTVdLGFxdWE6WzAsMjU1LDI1NV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTJdLGF6dXJlOlsyNDAsMjU1LDI1NV0sYmVpZ2U6WzI0NSwyNDUsMjIwXSxiaXNxdWU6WzI1NSwyMjgsMTk2XSxibGFjazpbMCwwLDBdLGJsYW5jaGVkYWxtb25kOlsyNTUsMjM1LDIwNV0sYmx1ZTpbMCwwLDI1NV0sYmx1ZXZpb2xldDpbMTM4LDQzLDIyNl0sYnJvd246WzE2NSw0Miw0Ml0sYnVybHl3b29kOlsyMjIsMTg0LDEzNV0sY2FkZXRibHVlOls5NSwxNTgsMTYwXSxjaGFydHJldXNlOlsxMjcsMjU1LDBdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMF0sY29yYWw6WzI1NSwxMjcsODBdLGNvcm5mbG93ZXJibHVlOlsxMDAsMTQ5LDIzN10sY29ybnNpbGs6WzI1NSwyNDgsMjIwXSxjcmltc29uOlsyMjAsMjAsNjBdLGN5YW46WzAsMjU1LDI1NV0sZGFya2JsdWU6WzAsMCwxMzldLGRhcmtjeWFuOlswLDEzOSwxMzldLGRhcmtnb2xkZW5yb2Q6WzE4NCwxMzQsMTFdLGRhcmtncmF5OlsxNjksMTY5LDE2OV0sZGFya2dyZWVuOlswLDEwMCwwXSxkYXJrZ3JleTpbMTY5LDE2OSwxNjldLGRhcmtraGFraTpbMTg5LDE4MywxMDddLGRhcmttYWdlbnRhOlsxMzksMCwxMzldLGRhcmtvbGl2ZWdyZWVuOls4NSwxMDcsNDddLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMF0sZGFya29yY2hpZDpbMTUzLDUwLDIwNF0sZGFya3JlZDpbMTM5LDAsMF0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjJdLGRhcmtzZWFncmVlbjpbMTQzLDE4OCwxNDNdLGRhcmtzbGF0ZWJsdWU6WzcyLDYxLDEzOV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzldLGRhcmtzbGF0ZWdyZXk6WzQ3LDc5LDc5XSxkYXJrdHVycXVvaXNlOlswLDIwNiwyMDldLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMV0sZGVlcHBpbms6WzI1NSwyMCwxNDddLGRlZXBza3libHVlOlswLDE5MSwyNTVdLGRpbWdyYXk6WzEwNSwxMDUsMTA1XSxkaW1ncmV5OlsxMDUsMTA1LDEwNV0sZG9kZ2VyYmx1ZTpbMzAsMTQ0LDI1NV0sZmlyZWJyaWNrOlsxNzgsMzQsMzRdLGZsb3JhbHdoaXRlOlsyNTUsMjUwLDI0MF0sZm9yZXN0Z3JlZW46WzM0LDEzOSwzNF0sZnVjaHNpYTpbMjU1LDAsMjU1XSxnYWluc2Jvcm86WzIyMCwyMjAsMjIwXSxnaG9zdHdoaXRlOlsyNDgsMjQ4LDI1NV0sZ29sZDpbMjU1LDIxNSwwXSxnb2xkZW5yb2Q6WzIxOCwxNjUsMzJdLGdyYXk6WzEyOCwxMjgsMTI4XSxncmVlbjpbMCwxMjgsMF0sZ3JlZW55ZWxsb3c6WzE3MywyNTUsNDddLGdyZXk6WzEyOCwxMjgsMTI4XSxob25leWRldzpbMjQwLDI1NSwyNDBdLGhvdHBpbms6WzI1NSwxMDUsMTgwXSxpbmRpYW5yZWQ6WzIwNSw5Miw5Ml0saW5kaWdvOls3NSwwLDEzMF0saXZvcnk6WzI1NSwyNTUsMjQwXSxraGFraTpbMjQwLDIzMCwxNDBdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MF0sbGF2ZW5kZXJibHVzaDpbMjU1LDI0MCwyNDVdLGxhd25ncmVlbjpbMTI0LDI1MiwwXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1XSxsaWdodGJsdWU6WzE3MywyMTYsMjMwXSxsaWdodGNvcmFsOlsyNDAsMTI4LDEyOF0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NV0sbGlnaHRnb2xkZW5yb2R5ZWxsb3c6WzI1MCwyNTAsMjEwXSxsaWdodGdyYXk6WzIxMSwyMTEsMjExXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NF0sbGlnaHRncmV5OlsyMTEsMjExLDIxMV0sbGlnaHRwaW5rOlsyNTUsMTgyLDE5M10sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyXSxsaWdodHNlYWdyZWVuOlszMiwxNzgsMTcwXSxsaWdodHNreWJsdWU6WzEzNSwyMDYsMjUwXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTNdLGxpZ2h0c2xhdGVncmV5OlsxMTksMTM2LDE1M10sbGlnaHRzdGVlbGJsdWU6WzE3NiwxOTYsMjIyXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjRdLGxpbWU6WzAsMjU1LDBdLGxpbWVncmVlbjpbNTAsMjA1LDUwXSxsaW5lbjpbMjUwLDI0MCwyMzBdLG1hZ2VudGE6WzI1NSwwLDI1NV0sbWFyb29uOlsxMjgsMCwwXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MF0sbWVkaXVtYmx1ZTpbMCwwLDIwNV0sbWVkaXVtb3JjaGlkOlsxODYsODUsMjExXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5XSxtZWRpdW1zZWFncmVlbjpbNjAsMTc5LDExM10sbWVkaXVtc2xhdGVibHVlOlsxMjMsMTA0LDIzOF0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NF0sbWVkaXVtdHVycXVvaXNlOls3MiwyMDksMjA0XSxtZWRpdW12aW9sZXRyZWQ6WzE5OSwyMSwxMzNdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyXSxtaW50Y3JlYW06WzI0NSwyNTUsMjUwXSxtaXN0eXJvc2U6WzI1NSwyMjgsMjI1XSxtb2NjYXNpbjpbMjU1LDIyOCwxODFdLG5hdmFqb3doaXRlOlsyNTUsMjIyLDE3M10sbmF2eTpbMCwwLDEyOF0sb2xkbGFjZTpbMjUzLDI0NSwyMzBdLG9saXZlOlsxMjgsMTI4LDBdLG9saXZlZHJhYjpbMTA3LDE0MiwzNV0sb3JhbmdlOlsyNTUsMTY1LDBdLG9yYW5nZXJlZDpbMjU1LDY5LDBdLG9yY2hpZDpbMjE4LDExMiwyMTRdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwXSxwYWxlZ3JlZW46WzE1MiwyNTEsMTUyXSxwYWxldHVycXVvaXNlOlsxNzUsMjM4LDIzOF0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDddLHBhcGF5YXdoaXA6WzI1NSwyMzksMjEzXSxwZWFjaHB1ZmY6WzI1NSwyMTgsMTg1XSxwZXJ1OlsyMDUsMTMzLDYzXSxwaW5rOlsyNTUsMTkyLDIwM10scGx1bTpbMjIxLDE2MCwyMjFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwXSxwdXJwbGU6WzEyOCwwLDEyOF0scmViZWNjYXB1cnBsZTpbMTAyLDUxLDE1M10scmVkOlsyNTUsMCwwXSxyb3N5YnJvd246WzE4OCwxNDMsMTQzXSxyb3lhbGJsdWU6WzY1LDEwNSwyMjVdLHNhZGRsZWJyb3duOlsxMzksNjksMTldLHNhbG1vbjpbMjUwLDEyOCwxMTRdLHNhbmR5YnJvd246WzI0NCwxNjQsOTZdLHNlYWdyZWVuOls0NiwxMzksODddLHNlYXNoZWxsOlsyNTUsMjQ1LDIzOF0sc2llbm5hOlsxNjAsODIsNDVdLHNpbHZlcjpbMTkyLDE5MiwxOTJdLHNreWJsdWU6WzEzNSwyMDYsMjM1XSxzbGF0ZWJsdWU6WzEwNiw5MCwyMDVdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDRdLHNsYXRlZ3JleTpbMTEyLDEyOCwxNDRdLHNub3c6WzI1NSwyNTAsMjUwXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3XSxzdGVlbGJsdWU6WzcwLDEzMCwxODBdLHRhbjpbMjEwLDE4MCwxNDBdLHRlYWw6WzAsMTI4LDEyOF0sdGhpc3RsZTpbMjE2LDE5MSwyMTZdLHRvbWF0bzpbMjU1LDk5LDcxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDhdLHZpb2xldDpbMjM4LDEzMCwyMzhdLHdoZWF0OlsyNDUsMjIyLDE3OV0sd2hpdGU6WzI1NSwyNTUsMjU1XSx3aGl0ZXNtb2tlOlsyNDUsMjQ1LDI0NV0seWVsbG93OlsyNTUsMjU1LDBdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwXX19LHt9XSwxMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3ItcmdiYSIpLGk9dCgiY2xhbXAiKSxhPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ImZsb2F0IiE9PWUmJmV8fChlPSJhcnJheSIpLCJ1aW50Ij09PWUmJihlPSJ1aW50OCIpLCJ1aW50X2NsYW1wZWQiPT09ZSYmKGU9InVpbnQ4X2NsYW1wZWQiKTt2YXIgcj1uZXcoYShlKSkoNCksbz0idWludDgiIT09ZSYmInVpbnQ4X2NsYW1wZWQiIT09ZTtyZXR1cm4gdC5sZW5ndGgmJiJzdHJpbmciIT10eXBlb2YgdHx8KCh0PW4odCkpWzBdLz0yNTUsdFsxXS89MjU1LHRbMl0vPTI1NSksZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl8fCEhKEFycmF5LmlzQXJyYXkodCkmJih0WzBdPjF8fDA9PT10WzBdKSYmKHRbMV0+MXx8MD09PXRbMV0pJiYodFsyXT4xfHwwPT09dFsyXSkmJighdFszXXx8dFszXT4xKSl9KHQpPyhyWzBdPXRbMF0sclsxXT10WzFdLHJbMl09dFsyXSxyWzNdPW51bGwhPXRbM10/dFszXToyNTUsbyYmKHJbMF0vPTI1NSxyWzFdLz0yNTUsclsyXS89MjU1LHJbM10vPTI1NSkscik6KG8/KHJbMF09dFswXSxyWzFdPXRbMV0sclsyXT10WzJdLHJbM109bnVsbCE9dFszXT90WzNdOjEpOihyWzBdPWkoTWF0aC5mbG9vcigyNTUqdFswXSksMCwyNTUpLHJbMV09aShNYXRoLmZsb29yKDI1NSp0WzFdKSwwLDI1NSksclsyXT1pKE1hdGguZmxvb3IoMjU1KnRbMl0pLDAsMjU1KSxyWzNdPW51bGw9PXRbM10/MjU1OmkoTWF0aC5mbG9vcigyNTUqdFszXSksMCwyNTUpKSxyKX19LHtjbGFtcDoxMjEsImNvbG9yLXJnYmEiOjEyOCxkdHlwZToxNzZ9XSwxMjc6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5hbWUiKSxpPXQoImlzLXBsYWluLW9iaiIpLGE9dCgiZGVmaW5lZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxzLGw9W10sYz0xO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihuW3RdKWw9blt0XS5zbGljZSgpLHM9InJnYiI7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT09dCljPTAscz0icmdiIixsPVswLDAsMF07ZWxzZSBpZigvXiNbQS1GYS1mMC05XSskLy50ZXN0KHQpKXt2YXIgdT0ocD10LnNsaWNlKDEpKS5sZW5ndGg7Yz0xLHU8PTQ/KGw9W3BhcnNlSW50KHBbMF0rcFswXSwxNikscGFyc2VJbnQocFsxXStwWzFdLDE2KSxwYXJzZUludChwWzJdK3BbMl0sMTYpXSw0PT09dSYmKGM9cGFyc2VJbnQocFszXStwWzNdLDE2KS8yNTUpKToobD1bcGFyc2VJbnQocFswXStwWzFdLDE2KSxwYXJzZUludChwWzJdK3BbM10sMTYpLHBhcnNlSW50KHBbNF0rcFs1XSwxNildLDg9PT11JiYoYz1wYXJzZUludChwWzZdK3BbN10sMTYpLzI1NSkpLGxbMF18fChsWzBdPTApLGxbMV18fChsWzFdPTApLGxbMl18fChsWzJdPTApLHM9InJnYiJ9ZWxzZSBpZihlPS9eKCg/OnJnYnxoc1tsdmJdfGh3YnxjbXlrP3x4eVt6eV18Z3JheXxsYWJ8bGNodT92P3xbbHlddXZ8bG1zKWE/KVxzKlwoKFteXCldKilcKS8uZXhlYyh0KSl7dmFyIGY9ZVsxXSxoPSJyZ2IiPT09ZixwPWYucmVwbGFjZSgvYSQvLCIiKTtzPXA7dT0iY215ayI9PT1wPzQ6ImdyYXkiPT09cD8xOjM7bD1lWzJdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZnVuY3Rpb24odCxlKXtpZigvJSQvLnRlc3QodCkpcmV0dXJuIGU9PT11P3BhcnNlRmxvYXQodCkvMTAwOiJyZ2IiPT09cD8yNTUqcGFyc2VGbG9hdCh0KS8xMDA6cGFyc2VGbG9hdCh0KTtpZigiaCI9PT1wW2VdKXtpZigvZGVnJC8udGVzdCh0KSlyZXR1cm4gcGFyc2VGbG9hdCh0KTtpZih2b2lkIDAhPT1vW3RdKXJldHVybiBvW3RdfXJldHVybiBwYXJzZUZsb2F0KHQpfSkpLGY9PT1wJiZsLnB1c2goMSksYz1ofHx2b2lkIDA9PT1sW3VdPzE6bFt1XSxsPWwuc2xpY2UoMCx1KX1lbHNlIHQubGVuZ3RoPjEwJiYvWzAtOV0oPzpcc3xcLykvLnRlc3QodCkmJihsPXQubWF0Y2goLyhbMC05XSspL2cpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl9KSkscz10Lm1hdGNoKC8oW2Etel0pL2dpKS5qb2luKCIiKS50b0xvd2VyQ2FzZSgpKTtlbHNlIGlmKGlzTmFOKHQpKWlmKGkodCkpe3ZhciBkPWEodC5yLHQucmVkLHQuUixudWxsKTtudWxsIT09ZD8ocz0icmdiIixsPVtkLGEodC5nLHQuZ3JlZW4sdC5HKSxhKHQuYix0LmJsdWUsdC5CKV0pOihzPSJoc2wiLGw9W2EodC5oLHQuaHVlLHQuSCksYSh0LnMsdC5zYXR1cmF0aW9uLHQuUyksYSh0LmwsdC5saWdodG5lc3MsdC5MLHQuYix0LmJyaWdodG5lc3MpXSksYz1hKHQuYSx0LmFscGhhLHQub3BhY2l0eSwxKSxudWxsIT10Lm9wYWNpdHkmJihjLz0xMDApfWVsc2UoQXJyYXkuaXNBcnJheSh0KXx8ci5BcnJheUJ1ZmZlciYmQXJyYXlCdWZmZXIuaXNWaWV3JiZBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiYobD1bdFswXSx0WzFdLHRbMl1dLHM9InJnYiIsYz00PT09dC5sZW5ndGg/dFszXToxKTtlbHNlIHM9InJnYiIsbD1bdD4+PjE2LCg2NTI4MCZ0KT4+PjgsMjU1JnRdO3JldHVybntzcGFjZTpzLHZhbHVlczpsLGFscGhhOmN9fTt2YXIgbz17cmVkOjAsb3JhbmdlOjYwLHllbGxvdzoxMjAsZ3JlZW46MTgwLGJsdWU6MjQwLHB1cnBsZTozMDB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJjb2xvci1uYW1lIjoxMjUsZGVmaW5lZDoxNzEsImlzLXBsYWluLW9iaiI6NDM3fV0sMTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLXBhcnNlIiksaT10KCJjb2xvci1zcGFjZS9oc2wiKSxhPXQoImNsYW1wIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHI9bih0KTtyZXR1cm4gci5zcGFjZT8oKGU9QXJyYXkoMykpWzBdPWEoci52YWx1ZXNbMF0sMCwyNTUpLGVbMV09YShyLnZhbHVlc1sxXSwwLDI1NSksZVsyXT1hKHIudmFsdWVzWzJdLDAsMjU1KSwiaCI9PT1yLnNwYWNlWzBdJiYoZT1pLnJnYihlKSksZS5wdXNoKGEoci5hbHBoYSwwLDEpKSxlKTpbXX19LHtjbGFtcDoxMjEsImNvbG9yLXBhcnNlIjoxMjcsImNvbG9yLXNwYWNlL2hzbCI6MTI5fV0sMTI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcmdiIik7ZS5leHBvcnRzPXtuYW1lOiJoc2wiLG1pbjpbMCwwLDBdLG1heDpbMzYwLDEwMCwxMDBdLGNoYW5uZWw6WyJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIl0sYWxpYXM6WyJIU0wiXSxyZ2I6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvPXRbMF0vMzYwLHM9dFsxXS8xMDAsbD10WzJdLzEwMDtpZigwPT09cylyZXR1cm5bYT0yNTUqbCxhLGFdO2U9MipsLShyPWw8LjU/bCooMStzKTpsK3MtbCpzKSxpPVswLDAsMF07Zm9yKHZhciBjPTA7YzwzO2MrKykobj1vKzEvMyotKGMtMSkpPDA/bisrOm4+MSYmbi0tLGE9NipuPDE/ZSs2KihyLWUpKm46MipuPDE/cjozKm48Mj9lKyhyLWUpKigyLzMtbikqNjplLGlbY109MjU1KmE7cmV0dXJuIGl9fSxuLmhzbD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dFswXS8yNTUsaT10WzFdLzI1NSxhPXRbMl0vMjU1LG89TWF0aC5taW4obixpLGEpLHM9TWF0aC5tYXgobixpLGEpLGw9cy1vO3JldHVybiBzPT09bz9lPTA6bj09PXM/ZT0oaS1hKS9sOmk9PT1zP2U9MisoYS1uKS9sOmE9PT1zJiYoZT00KyhuLWkpL2wpLChlPU1hdGgubWluKDYwKmUsMzYwKSk8MCYmKGUrPTM2MCkscj0obytzKS8yLFtlLDEwMCoocz09PW8/MDpyPD0uNT9sLyhzK28pOmwvKDItcy1vKSksMTAwKnJdfX0seyIuL3JnYiI6MTMwfV0sMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToicmdiIixtaW46WzAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1XSxjaGFubmVsOlsicmVkIiwiZ3JlZW4iLCJibHVlIl0sYWxpYXM6WyJSR0IiXX19LHt9XSwxMzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2pldDpbe2luZGV4OjAscmdiOlswLDAsMTMxXX0se2luZGV4Oi4xMjUscmdiOlswLDYwLDE3MF19LHtpbmRleDouMzc1LHJnYjpbNSwyNTUsMjU1XX0se2luZGV4Oi42MjUscmdiOlsyNTUsMjU1LDBdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1MCwwLDBdfSx7aW5kZXg6MSxyZ2I6WzEyOCwwLDBdfV0saHN2Olt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6LjE2OSxyZ2I6WzI1MywyNTUsMl19LHtpbmRleDouMTczLHJnYjpbMjQ3LDI1NSwyXX0se2luZGV4Oi4zMzcscmdiOlswLDI1Miw0XX0se2luZGV4Oi4zNDEscmdiOlswLDI1MiwxMF19LHtpbmRleDouNTA2LHJnYjpbMSwyNDksMjU1XX0se2luZGV4Oi42NzEscmdiOlsyLDAsMjUzXX0se2luZGV4Oi42NzUscmdiOls4LDAsMjUzXX0se2luZGV4Oi44MzkscmdiOlsyNTUsMCwyNTFdfSx7aW5kZXg6Ljg0MyxyZ2I6WzI1NSwwLDI0NV19LHtpbmRleDoxLHJnYjpbMjU1LDAsNl19XSxob3Q6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjMscmdiOlsyMzAsMCwwXX0se2luZGV4Oi42LHJnYjpbMjU1LDIxMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxzcHJpbmc6W3tpbmRleDowLHJnYjpbMjU1LDAsMjU1XX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDBdfV0sc3VtbWVyOlt7aW5kZXg6MCxyZ2I6WzAsMTI4LDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwxMDJdfV0sYXV0dW1uOlt7aW5kZXg6MCxyZ2I6WzI1NSwwLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMF19XSx3aW50ZXI6W3tpbmRleDowLHJnYjpbMCwwLDI1NV19LHtpbmRleDoxLHJnYjpbMCwyNTUsMTI4XX1dLGJvbmU6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjM3NixyZ2I6Wzg0LDg0LDExNl19LHtpbmRleDouNzUzLHJnYjpbMTY5LDIwMCwyMDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTUsMjU1XX1dLGNvcHBlcjpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouODA0LHJnYjpbMjU1LDE2MCwxMDJdfSx7aW5kZXg6MSxyZ2I6WzI1NSwxOTksMTI3XX1dLGdyZXlzOlt7aW5kZXg6MCxyZ2I6WzAsMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSx5aWduYnU6W3tpbmRleDowLHJnYjpbOCwyOSw4OF19LHtpbmRleDouMTI1LHJnYjpbMzcsNTIsMTQ4XX0se2luZGV4Oi4yNSxyZ2I6WzM0LDk0LDE2OF19LHtpbmRleDouMzc1LHJnYjpbMjksMTQ1LDE5Ml19LHtpbmRleDouNSxyZ2I6WzY1LDE4MiwxOTZdfSx7aW5kZXg6LjYyNSxyZ2I6WzEyNywyMDUsMTg3XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTgwXX0se2luZGV4Oi44NzUscmdiOlsyMzcsMjQ4LDIxN119LHtpbmRleDoxLHJnYjpbMjU1LDI1NSwyMTddfV0sZ3JlZW5zOlt7aW5kZXg6MCxyZ2I6WzAsNjgsMjddfSx7aW5kZXg6LjEyNSxyZ2I6WzAsMTA5LDQ0XX0se2luZGV4Oi4yNSxyZ2I6WzM1LDEzOSw2OV19LHtpbmRleDouMzc1LHJnYjpbNjUsMTcxLDkzXX0se2luZGV4Oi41LHJnYjpbMTE2LDE5NiwxMThdfSx7aW5kZXg6LjYyNSxyZ2I6WzE2MSwyMTcsMTU1XX0se2luZGV4Oi43NSxyZ2I6WzE5OSwyMzMsMTkyXX0se2luZGV4Oi44NzUscmdiOlsyMjksMjQ1LDIyNF19LHtpbmRleDoxLHJnYjpbMjQ3LDI1MiwyNDVdfV0seWlvcnJkOlt7aW5kZXg6MCxyZ2I6WzEyOCwwLDM4XX0se2luZGV4Oi4xMjUscmdiOlsxODksMCwzOF19LHtpbmRleDouMjUscmdiOlsyMjcsMjYsMjhdfSx7aW5kZXg6LjM3NSxyZ2I6WzI1Miw3OCw0Ml19LHtpbmRleDouNSxyZ2I6WzI1MywxNDEsNjBdfSx7aW5kZXg6LjYyNSxyZ2I6WzI1NCwxNzgsNzZdfSx7aW5kZXg6Ljc1LHJnYjpbMjU0LDIxNywxMThdfSx7aW5kZXg6Ljg3NSxyZ2I6WzI1NSwyMzcsMTYwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDIwNF19XSxibHVlcmVkOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scmRidTpbe2luZGV4OjAscmdiOls1LDEwLDE3Ml19LHtpbmRleDouMzUscmdiOlsxMDYsMTM3LDI0N119LHtpbmRleDouNSxyZ2I6WzE5MCwxOTAsMTkwXX0se2luZGV4Oi42LHJnYjpbMjIwLDE3MCwxMzJdfSx7aW5kZXg6LjcscmdiOlsyMzAsMTQ1LDkwXX0se2luZGV4OjEscmdiOlsxNzgsMTAsMjhdfV0scGljbmljOlt7aW5kZXg6MCxyZ2I6WzAsMCwyNTVdfSx7aW5kZXg6LjEscmdiOls1MSwxNTMsMjU1XX0se2luZGV4Oi4yLHJnYjpbMTAyLDIwNCwyNTVdfSx7aW5kZXg6LjMscmdiOlsxNTMsMjA0LDI1NV19LHtpbmRleDouNCxyZ2I6WzIwNCwyMDQsMjU1XX0se2luZGV4Oi41LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6LjYscmdiOlsyNTUsMjA0LDI1NV19LHtpbmRleDouNyxyZ2I6WzI1NSwxNTMsMjU1XX0se2luZGV4Oi44LHJnYjpbMjU1LDEwMiwyMDRdfSx7aW5kZXg6LjkscmdiOlsyNTUsMTAyLDEwMl19LHtpbmRleDoxLHJnYjpbMjU1LDAsMF19XSxyYWluYm93Olt7aW5kZXg6MCxyZ2I6WzE1MCwwLDkwXX0se2luZGV4Oi4xMjUscmdiOlswLDAsMjAwXX0se2luZGV4Oi4yNSxyZ2I6WzAsMjUsMjU1XX0se2luZGV4Oi4zNzUscmdiOlswLDE1MiwyNTVdfSx7aW5kZXg6LjUscmdiOls0NCwyNTUsMTUwXX0se2luZGV4Oi42MjUscmdiOlsxNTEsMjU1LDBdfSx7aW5kZXg6Ljc1LHJnYjpbMjU1LDIzNCwwXX0se2luZGV4Oi44NzUscmdiOlsyNTUsMTExLDBdfSx7aW5kZXg6MSxyZ2I6WzI1NSwwLDBdfV0scG9ydGxhbmQ6W3tpbmRleDowLHJnYjpbMTIsNTEsMTMxXX0se2luZGV4Oi4yNSxyZ2I6WzEwLDEzNiwxODZdfSx7aW5kZXg6LjUscmdiOlsyNDIsMjExLDU2XX0se2luZGV4Oi43NSxyZ2I6WzI0MiwxNDMsNTZdfSx7aW5kZXg6MSxyZ2I6WzIxNywzMCwzMF19XSxibGFja2JvZHk6W3tpbmRleDowLHJnYjpbMCwwLDBdfSx7aW5kZXg6LjIscmdiOlsyMzAsMCwwXX0se2luZGV4Oi40LHJnYjpbMjMwLDIxMCwwXX0se2luZGV4Oi43LHJnYjpbMjU1LDI1NSwyNTVdfSx7aW5kZXg6MSxyZ2I6WzE2MCwyMDAsMjU1XX1dLGVhcnRoOlt7aW5kZXg6MCxyZ2I6WzAsMCwxMzBdfSx7aW5kZXg6LjEscmdiOlswLDE4MCwxODBdfSx7aW5kZXg6LjIscmdiOls0MCwyMTAsNDBdfSx7aW5kZXg6LjQscmdiOlsyMzAsMjMwLDUwXX0se2luZGV4Oi42LHJnYjpbMTIwLDcwLDIwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NV19XSxlbGVjdHJpYzpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMTUscmdiOlszMCwwLDEwMF19LHtpbmRleDouNCxyZ2I6WzEyMCwwLDEwMF19LHtpbmRleDouNixyZ2I6WzE2MCw5MCwwXX0se2luZGV4Oi44LHJnYjpbMjMwLDIwMCwwXX0se2luZGV4OjEscmdiOlsyNTUsMjUwLDIyMF19XSxhbHBoYTpbe2luZGV4OjAscmdiOlsyNTUsMjU1LDI1NSwwXX0se2luZGV4OjEscmdiOlsyNTUsMjU1LDI1NSwxXX1dLHZpcmlkaXM6W3tpbmRleDowLHJnYjpbNjgsMSw4NF19LHtpbmRleDouMTMscmdiOls3MSw0NCwxMjJdfSx7aW5kZXg6LjI1LHJnYjpbNTksODEsMTM5XX0se2luZGV4Oi4zOCxyZ2I6WzQ0LDExMywxNDJdfSx7aW5kZXg6LjUscmdiOlszMywxNDQsMTQxXX0se2luZGV4Oi42MyxyZ2I6WzM5LDE3MywxMjldfSx7aW5kZXg6Ljc1LHJnYjpbOTIsMjAwLDk5XX0se2luZGV4Oi44OCxyZ2I6WzE3MCwyMjAsNTBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzEsMzddfV0saW5mZXJubzpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlszMSwxMiw3Ml19LHtpbmRleDouMjUscmdiOls4NSwxNSwxMDldfSx7aW5kZXg6LjM4LHJnYjpbMTM2LDM0LDEwNl19LHtpbmRleDouNSxyZ2I6WzE4Niw1NCw4NV19LHtpbmRleDouNjMscmdiOlsyMjcsODksNTFdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ5LDE0MCwxMF19LHtpbmRleDouODgscmdiOlsyNDksMjAxLDUwXX0se2luZGV4OjEscmdiOlsyNTIsMjU1LDE2NF19XSxtYWdtYTpbe2luZGV4OjAscmdiOlswLDAsNF19LHtpbmRleDouMTMscmdiOlsyOCwxNiw2OF19LHtpbmRleDouMjUscmdiOls3OSwxOCwxMjNdfSx7aW5kZXg6LjM4LHJnYjpbMTI5LDM3LDEyOV19LHtpbmRleDouNSxyZ2I6WzE4MSw1NCwxMjJdfSx7aW5kZXg6LjYzLHJnYjpbMjI5LDgwLDEwMF19LHtpbmRleDouNzUscmdiOlsyNTEsMTM1LDk3XX0se2luZGV4Oi44OCxyZ2I6WzI1NCwxOTQsMTM1XX0se2luZGV4OjEscmdiOlsyNTIsMjUzLDE5MV19XSxwbGFzbWE6W3tpbmRleDowLHJnYjpbMTMsOCwxMzVdfSx7aW5kZXg6LjEzLHJnYjpbNzUsMywxNjFdfSx7aW5kZXg6LjI1LHJnYjpbMTI1LDMsMTY4XX0se2luZGV4Oi4zOCxyZ2I6WzE2OCwzNCwxNTBdfSx7aW5kZXg6LjUscmdiOlsyMDMsNzAsMTIxXX0se2luZGV4Oi42MyxyZ2I6WzIyOSwxMDcsOTNdfSx7aW5kZXg6Ljc1LHJnYjpbMjQ4LDE0OCw2NV19LHtpbmRleDouODgscmdiOlsyNTMsMTk1LDQwXX0se2luZGV4OjEscmdiOlsyNDAsMjQ5LDMzXX1dLHdhcm06W3tpbmRleDowLHJnYjpbMTI1LDAsMTc5XX0se2luZGV4Oi4xMyxyZ2I6WzE3MiwwLDE4N119LHtpbmRleDouMjUscmdiOlsyMTksMCwxNzBdfSx7aW5kZXg6LjM4LHJnYjpbMjU1LDAsMTMwXX0se2luZGV4Oi41LHJnYjpbMjU1LDYzLDc0XX0se2luZGV4Oi42MyxyZ2I6WzI1NSwxMjMsMF19LHtpbmRleDouNzUscmdiOlsyMzQsMTc2LDBdfSx7aW5kZXg6Ljg4LHJnYjpbMTkwLDIyOCwwXX0se2luZGV4OjEscmdiOlsxNDcsMjU1LDBdfV0sY29vbDpbe2luZGV4OjAscmdiOlsxMjUsMCwxNzldfSx7aW5kZXg6LjEzLHJnYjpbMTE2LDAsMjE4XX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDc0LDIzN119LHtpbmRleDouMzgscmdiOls2OCwxNDYsMjMxXX0se2luZGV4Oi41LHJnYjpbMCwyMDQsMTk3XX0se2luZGV4Oi42MyxyZ2I6WzAsMjQ3LDE0Nl19LHtpbmRleDouNzUscmdiOlswLDI1NSw4OF19LHtpbmRleDouODgscmdiOls0MCwyNTUsOF19LHtpbmRleDoxLHJnYjpbMTQ3LDI1NSwwXX1dLCJyYWluYm93LXNvZnQiOlt7aW5kZXg6MCxyZ2I6WzEyNSwwLDE3OV19LHtpbmRleDouMSxyZ2I6WzE5OSwwLDE4MF19LHtpbmRleDouMixyZ2I6WzI1NSwwLDEyMV19LHtpbmRleDouMyxyZ2I6WzI1NSwxMDgsMF19LHtpbmRleDouNCxyZ2I6WzIyMiwxOTQsMF19LHtpbmRleDouNSxyZ2I6WzE1MCwyNTUsMF19LHtpbmRleDouNixyZ2I6WzAsMjU1LDU1XX0se2luZGV4Oi43LHJnYjpbMCwyNDYsMTUwXX0se2luZGV4Oi44LHJnYjpbNTAsMTY3LDIyMl19LHtpbmRleDouOSxyZ2I6WzEwMyw1MSwyMzVdfSx7aW5kZXg6MSxyZ2I6WzEyNCwwLDE4Nl19XSxiYXRoeW1ldHJ5Olt7aW5kZXg6MCxyZ2I6WzQwLDI2LDQ0XX0se2luZGV4Oi4xMyxyZ2I6WzU5LDQ5LDkwXX0se2luZGV4Oi4yNSxyZ2I6WzY0LDc2LDEzOV19LHtpbmRleDouMzgscmdiOls2MywxMTAsMTUxXX0se2luZGV4Oi41LHJnYjpbNzIsMTQyLDE1OF19LHtpbmRleDouNjMscmdiOls4NSwxNzQsMTYzXX0se2luZGV4Oi43NSxyZ2I6WzEyMCwyMDYsMTYzXX0se2luZGV4Oi44OCxyZ2I6WzE4NywyMzAsMTcyXX0se2luZGV4OjEscmdiOlsyNTMsMjU0LDIwNF19XSxjZG9tOlt7aW5kZXg6MCxyZ2I6WzQ3LDE1LDYyXX0se2luZGV4Oi4xMyxyZ2I6Wzg3LDIzLDg2XX0se2luZGV4Oi4yNSxyZ2I6WzEzMCwyOCw5OV19LHtpbmRleDouMzgscmdiOlsxNzEsNDEsOTZdfSx7aW5kZXg6LjUscmdiOlsyMDYsNjcsODZdfSx7aW5kZXg6LjYzLHJnYjpbMjMwLDEwNiw4NF19LHtpbmRleDouNzUscmdiOlsyNDIsMTQ5LDEwM119LHtpbmRleDouODgscmdiOlsyNDksMTkzLDEzNV19LHtpbmRleDoxLHJnYjpbMjU0LDIzNywxNzZdfV0sY2hsb3JvcGh5bGw6W3tpbmRleDowLHJnYjpbMTgsMzYsMjBdfSx7aW5kZXg6LjEzLHJnYjpbMjUsNjMsNDFdfSx7aW5kZXg6LjI1LHJnYjpbMjQsOTEsNTldfSx7aW5kZXg6LjM4LHJnYjpbMTMsMTE5LDcyXX0se2luZGV4Oi41LHJnYjpbMTgsMTQ4LDgwXX0se2luZGV4Oi42MyxyZ2I6WzgwLDE3Myw4OV19LHtpbmRleDouNzUscmdiOlsxMzIsMTk2LDEyMl19LHtpbmRleDouODgscmdiOlsxNzUsMjIxLDE2Ml19LHtpbmRleDoxLHJnYjpbMjE1LDI0OSwyMDhdfV0sZGVuc2l0eTpbe2luZGV4OjAscmdiOls1NCwxNCwzNl19LHtpbmRleDouMTMscmdiOls4OSwyMyw4MF19LHtpbmRleDouMjUscmdiOlsxMTAsNDUsMTMyXX0se2luZGV4Oi4zOCxyZ2I6WzEyMCw3NywxNzhdfSx7aW5kZXg6LjUscmdiOlsxMjAsMTEzLDIxM119LHtpbmRleDouNjMscmdiOlsxMTUsMTUxLDIyOF19LHtpbmRleDouNzUscmdiOlsxMzQsMTg1LDIyN119LHtpbmRleDouODgscmdiOlsxNzcsMjE0LDIyN119LHtpbmRleDoxLHJnYjpbMjMwLDI0MSwyNDFdfV0sImZyZWVzdXJmYWNlLWJsdWUiOlt7aW5kZXg6MCxyZ2I6WzMwLDQsMTEwXX0se2luZGV4Oi4xMyxyZ2I6WzQ3LDE0LDE3Nl19LHtpbmRleDouMjUscmdiOls0MSw0NSwyMzZdfSx7aW5kZXg6LjM4LHJnYjpbMjUsOTksMjEyXX0se2luZGV4Oi41LHJnYjpbNjgsMTMxLDIwMF19LHtpbmRleDouNjMscmdiOlsxMTQsMTU2LDE5N119LHtpbmRleDouNzUscmdiOlsxNTcsMTgxLDIwM119LHtpbmRleDouODgscmdiOlsyMDAsMjA4LDIxNl19LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sImZyZWVzdXJmYWNlLXJlZCI6W3tpbmRleDowLHJnYjpbNjAsOSwxOF19LHtpbmRleDouMTMscmdiOlsxMDAsMTcsMjddfSx7aW5kZXg6LjI1LHJnYjpbMTQyLDIwLDI5XX0se2luZGV4Oi4zOCxyZ2I6WzE3Nyw0MywyN119LHtpbmRleDouNSxyZ2I6WzE5Miw4Nyw2M119LHtpbmRleDouNjMscmdiOlsyMDUsMTI1LDEwNV19LHtpbmRleDouNzUscmdiOlsyMTYsMTYyLDE0OF19LHtpbmRleDouODgscmdiOlsyMjcsMTk5LDE5M119LHtpbmRleDoxLHJnYjpbMjQxLDIzNywyMzZdfV0sb3h5Z2VuOlt7aW5kZXg6MCxyZ2I6WzY0LDUsNV19LHtpbmRleDouMTMscmdiOlsxMDYsNiwxNV19LHtpbmRleDouMjUscmdiOlsxNDQsMjYsN119LHtpbmRleDouMzgscmdiOlsxNjgsNjQsM119LHtpbmRleDouNSxyZ2I6WzE4OCwxMDAsNF19LHtpbmRleDouNjMscmdiOlsyMDYsMTM2LDExXX0se2luZGV4Oi43NSxyZ2I6WzIyMCwxNzQsMjVdfSx7aW5kZXg6Ljg4LHJnYjpbMjMxLDIxNSw0NF19LHtpbmRleDoxLHJnYjpbMjQ4LDI1NCwxMDVdfV0scGFyOlt7aW5kZXg6MCxyZ2I6WzUxLDIwLDI0XX0se2luZGV4Oi4xMyxyZ2I6WzkwLDMyLDM1XX0se2luZGV4Oi4yNSxyZ2I6WzEyOSw0NCwzNF19LHtpbmRleDouMzgscmdiOlsxNTksNjgsMjVdfSx7aW5kZXg6LjUscmdiOlsxODIsOTksMTldfSx7aW5kZXg6LjYzLHJnYjpbMTk5LDEzNCwyMl19LHtpbmRleDouNzUscmdiOlsyMTIsMTcxLDM1XX0se2luZGV4Oi44OCxyZ2I6WzIyMSwyMTAsNTRdfSx7aW5kZXg6MSxyZ2I6WzIyNSwyNTMsNzVdfV0scGhhc2U6W3tpbmRleDowLHJnYjpbMTQ1LDEwNSwxOF19LHtpbmRleDouMTMscmdiOlsxODQsNzEsMzhdfSx7aW5kZXg6LjI1LHJnYjpbMTg2LDU4LDExNV19LHtpbmRleDouMzgscmdiOlsxNjAsNzEsMTg1XX0se2luZGV4Oi41LHJnYjpbMTEwLDk3LDIxOF19LHtpbmRleDouNjMscmdiOls1MCwxMjMsMTY0XX0se2luZGV4Oi43NSxyZ2I6WzMxLDEzMSwxMTBdfSx7aW5kZXg6Ljg4LHJnYjpbNzcsMTI5LDM0XX0se2luZGV4OjEscmdiOlsxNDUsMTA1LDE4XX1dLHNhbGluaXR5Olt7aW5kZXg6MCxyZ2I6WzQyLDI0LDEwOF19LHtpbmRleDouMTMscmdiOlszMyw1MCwxNjJdfSx7aW5kZXg6LjI1LHJnYjpbMTUsOTAsMTQ1XX0se2luZGV4Oi4zOCxyZ2I6WzQwLDExOCwxMzddfSx7aW5kZXg6LjUscmdiOls1OSwxNDYsMTM1XX0se2luZGV4Oi42MyxyZ2I6Wzc5LDE3NSwxMjZdfSx7aW5kZXg6Ljc1LHJnYjpbMTIwLDIwMywxMDRdfSx7aW5kZXg6Ljg4LHJnYjpbMTkzLDIyMSwxMDBdfSx7aW5kZXg6MSxyZ2I6WzI1MywyMzksMTU0XX1dLHRlbXBlcmF0dXJlOlt7aW5kZXg6MCxyZ2I6WzQsMzUsNTFdfSx7aW5kZXg6LjEzLHJnYjpbMjMsNTEsMTIyXX0se2luZGV4Oi4yNSxyZ2I6Wzg1LDU5LDE1N119LHtpbmRleDouMzgscmdiOlsxMjksNzksMTQzXX0se2luZGV4Oi41LHJnYjpbMTc1LDk1LDEzMF19LHtpbmRleDouNjMscmdiOlsyMjIsMTEyLDEwMV19LHtpbmRleDouNzUscmdiOlsyNDksMTQ2LDY2XX0se2luZGV4Oi44OCxyZ2I6WzI0OSwxOTYsNjVdfSx7aW5kZXg6MSxyZ2I6WzIzMiwyNTAsOTFdfV0sdHVyYmlkaXR5Olt7aW5kZXg6MCxyZ2I6WzM0LDMxLDI3XX0se2luZGV4Oi4xMyxyZ2I6WzY1LDUwLDQxXX0se2luZGV4Oi4yNSxyZ2I6Wzk4LDY5LDUyXX0se2luZGV4Oi4zOCxyZ2I6WzEzMSw4OSw1N119LHtpbmRleDouNSxyZ2I6WzE2MSwxMTIsNTldfSx7aW5kZXg6LjYzLHJnYjpbMTg1LDE0MCw2Nl19LHtpbmRleDouNzUscmdiOlsyMDIsMTc0LDg4XX0se2luZGV4Oi44OCxyZ2I6WzIxNiwyMDksMTI2XX0se2luZGV4OjEscmdiOlsyMzMsMjQ2LDE3MV19XSwidmVsb2NpdHktYmx1ZSI6W3tpbmRleDowLHJnYjpbMTcsMzIsNjRdfSx7aW5kZXg6LjEzLHJnYjpbMzUsNTIsMTE2XX0se2luZGV4Oi4yNSxyZ2I6WzI5LDgxLDE1Nl19LHtpbmRleDouMzgscmdiOlszMSwxMTMsMTYyXX0se2luZGV4Oi41LHJnYjpbNTAsMTQ0LDE2OV19LHtpbmRleDouNjMscmdiOls4NywxNzMsMTc2XX0se2luZGV4Oi43NSxyZ2I6WzE0OSwxOTYsMTg5XX0se2luZGV4Oi44OCxyZ2I6WzIwMywyMjEsMjExXX0se2luZGV4OjEscmdiOlsyNTQsMjUxLDIzMF19XSwidmVsb2NpdHktZ3JlZW4iOlt7aW5kZXg6MCxyZ2I6WzIzLDM1LDE5XX0se2luZGV4Oi4xMyxyZ2I6WzI0LDY0LDM4XX0se2luZGV4Oi4yNSxyZ2I6WzExLDk1LDQ1XX0se2luZGV4Oi4zOCxyZ2I6WzM5LDEyMywzNV19LHtpbmRleDouNSxyZ2I6Wzk1LDE0NiwxMl19LHtpbmRleDouNjMscmdiOlsxNTIsMTY1LDE4XX0se2luZGV4Oi43NSxyZ2I6WzIwMSwxODYsNjldfSx7aW5kZXg6Ljg4LHJnYjpbMjMzLDIxNiwxMzddfSx7aW5kZXg6MSxyZ2I6WzI1NSwyNTMsMjA1XX1dLGN1YmVoZWxpeDpbe2luZGV4OjAscmdiOlswLDAsMF19LHtpbmRleDouMDcscmdiOlsyMiw1LDU5XX0se2luZGV4Oi4xMyxyZ2I6WzYwLDQsMTA1XX0se2luZGV4Oi4yLHJnYjpbMTA5LDEsMTM1XX0se2luZGV4Oi4yNyxyZ2I6WzE2MSwwLDE0N119LHtpbmRleDouMzMscmdiOlsyMTAsMiwxNDJdfSx7aW5kZXg6LjQscmdiOlsyNTEsMTEsMTIzXX0se2luZGV4Oi40NyxyZ2I6WzI1NSwyOSw5N119LHtpbmRleDouNTMscmdiOlsyNTUsNTQsNjldfSx7aW5kZXg6LjYscmdiOlsyNTUsODUsNDZdfSx7aW5kZXg6LjY3LHJnYjpbMjU1LDEyMCwzNF19LHtpbmRleDouNzMscmdiOlsyNTUsMTU3LDM3XX0se2luZGV4Oi44LHJnYjpbMjQxLDE5MSw1N119LHtpbmRleDouODcscmdiOlsyMjQsMjIwLDkzXX0se2luZGV4Oi45MyxyZ2I6WzIxOCwyNDEsMTQyXX0se2luZGV4OjEscmdiOlsyMjcsMjUzLDE5OF19XX19LHt9XSwxMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb2xvclNjYWxlIiksaT10KCJsZXJwIik7ZnVuY3Rpb24gYSh0KXtyZXR1cm5bdFswXS8yNTUsdFsxXS8yNTUsdFsyXS8yNTUsdFszXV19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGUscj0iIyIsbj0wO248MzsrK24pcis9KCIwMCIrKGU9KGU9dFtuXSkudG9TdHJpbmcoMTYpKSkuc3Vic3RyKGUubGVuZ3RoKTtyZXR1cm4gcn1mdW5jdGlvbiBzKHQpe3JldHVybiJyZ2JhKCIrdC5qb2luKCIsIikrIikifWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGwsYyx1LGYsaCxwLGQsbTt0fHwodD17fSk7cD0odC5uc2hhZGVzfHw3MiktMSxoPXQuZm9ybWF0fHwiaGV4IiwoZj10LmNvbG9ybWFwKXx8KGY9ImpldCIpO2lmKCJzdHJpbmciPT10eXBlb2YgZil7aWYoZj1mLnRvTG93ZXJDYXNlKCksIW5bZl0pdGhyb3cgRXJyb3IoZisiIG5vdCBhIHN1cHBvcnRlZCBjb2xvcnNjYWxlIik7dT1uW2ZdfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkoZikpdGhyb3cgRXJyb3IoInVuc3VwcG9ydGVkIGNvbG9ybWFwIG9wdGlvbiIsZik7dT1mLnNsaWNlKCl9aWYodS5sZW5ndGg+cCsxKXRocm93IG5ldyBFcnJvcihmKyIgbWFwIHJlcXVpcmVzIG5zaGFkZXMgdG8gYmUgYXQgbGVhc3Qgc2l6ZSAiK3UubGVuZ3RoKTtkPUFycmF5LmlzQXJyYXkodC5hbHBoYSk/MiE9PXQuYWxwaGEubGVuZ3RoP1sxLDFdOnQuYWxwaGEuc2xpY2UoKToibnVtYmVyIj09dHlwZW9mIHQuYWxwaGE/W3QuYWxwaGEsdC5hbHBoYV06WzEsMV07ZT11Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodC5pbmRleCpwKX0pKSxkWzBdPU1hdGgubWluKE1hdGgubWF4KGRbMF0sMCksMSksZFsxXT1NYXRoLm1pbihNYXRoLm1heChkWzFdLDApLDEpO3ZhciBnPXUubWFwKChmdW5jdGlvbih0LGUpe3ZhciByPXVbZV0uaW5kZXgsbj11W2VdLnJnYi5zbGljZSgpO3JldHVybiA0PT09bi5sZW5ndGgmJm5bM10+PTAmJm5bM108PTF8fChuWzNdPWRbMF0rKGRbMV0tZFswXSkqciksbn0pKSx2PVtdO2ZvcihtPTA7bTxlLmxlbmd0aC0xOysrbSl7Yz1lW20rMV0tZVttXSxyPWdbbV0sbD1nW20rMV07Zm9yKHZhciB5PTA7eTxjO3krKyl7dmFyIHg9eS9jO3YucHVzaChbTWF0aC5yb3VuZChpKHJbMF0sbFswXSx4KSksTWF0aC5yb3VuZChpKHJbMV0sbFsxXSx4KSksTWF0aC5yb3VuZChpKHJbMl0sbFsyXSx4KSksaShyWzNdLGxbM10seCldKX19di5wdXNoKHVbdS5sZW5ndGgtMV0ucmdiLmNvbmNhdChkWzFdKSksImhleCI9PT1oP3Y9di5tYXAobyk6InJnYmFTdHJpbmciPT09aD92PXYubWFwKHMpOiJmbG9hdCI9PT1oJiYodj12Lm1hcChhKSk7cmV0dXJuIHZ9fSx7Ii4vY29sb3JTY2FsZSI6MTMxLGxlcnA6NDQwfV0sMTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKGUscixhKTtpZigwPT09byl7dmFyIHM9aShuKHQsZSxyKSksYz1pKG4odCxlLGEpKTtpZihzPT09Yyl7aWYoMD09PXMpe3ZhciB1PWwodCxlLHIpLGY9bCh0LGUsYSk7cmV0dXJuIHU9PT1mPzA6dT8xOi0xfXJldHVybiAwfXJldHVybiAwPT09Yz9zPjB8fGwodCxlLGEpPy0xOjE6MD09PXM/Yz4wfHxsKHQsZSxyKT8xOi0xOmkoYy1zKX12YXIgaD1uKHQsZSxyKTtyZXR1cm4gaD4wP28+MCYmbih0LGUsYSk+MD8xOi0xOmg8MD9vPjB8fG4odCxlLGEpPjA/MTotMTpuKHQsZSxhKT4wfHxsKHQsZSxyKT8xOi0xfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxpPXQoInNpZ251bSIpLGE9dCgidHdvLXN1bSIpLG89dCgicm9idXN0LXByb2R1Y3QiKSxzPXQoInJvYnVzdC1zdW0iKTtmdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1hKHRbMF0sLWVbMF0pLGk9YSh0WzFdLC1lWzFdKSxsPWEoclswXSwtZVswXSksYz1hKHJbMV0sLWVbMV0pLHU9cyhvKG4sbCksbyhpLGMpKTtyZXR1cm4gdVt1Lmxlbmd0aC0xXT49MH19LHsicm9idXN0LW9yaWVudGF0aW9uIjo1MjQsInJvYnVzdC1wcm9kdWN0Ijo1MjUsInJvYnVzdC1zdW0iOjUyOSxzaWdudW06MTM0LCJ0d28tc3VtIjo1Nzh9XSwxMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PDA/LTE6dD4wPzE6MH19LHt9XSwxMzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lmxlbmd0aCxhPXQubGVuZ3RoLWUubGVuZ3RoO2lmKGEpcmV0dXJuIGE7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuIHRbMF0rdFsxXS1lWzBdLWVbMV18fG4odFswXSx0WzFdKS1uKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBvPXRbMF0rdFsxXSxzPWVbMF0rZVsxXTtpZihhPW8rdFsyXS0ocytlWzJdKSlyZXR1cm4gYTt2YXIgbD1uKHRbMF0sdFsxXSksYz1uKGVbMF0sZVsxXSk7cmV0dXJuIG4obCx0WzJdKS1uKGMsZVsyXSl8fG4obCt0WzJdLG8pLW4oYytlWzJdLHMpO2Nhc2UgNDp2YXIgdT10WzBdLGY9dFsxXSxoPXRbMl0scD10WzNdLGQ9ZVswXSxtPWVbMV0sZz1lWzJdLHY9ZVszXTtyZXR1cm4gdStmK2grcC0oZCttK2crdil8fG4odSxmLGgscCktbihkLG0sZyx2LGQpfHxuKHUrZix1K2gsdStwLGYraCxmK3AsaCtwKS1uKGQrbSxkK2csZCt2LG0rZyxtK3YsZyt2KXx8bih1K2YraCx1K2YrcCx1K2grcCxmK2grcCktbihkK20rZyxkK20rdixkK2crdixtK2crdik7ZGVmYXVsdDpmb3IodmFyIHk9dC5zbGljZSgpLnNvcnQoaSkseD1lLnNsaWNlKCkuc29ydChpKSxiPTA7YjxyOysrYilpZihhPXlbYl0teFtiXSlyZXR1cm4gYTtyZXR1cm4gMH19O3ZhciBuPU1hdGgubWluO2Z1bmN0aW9uIGkodCxlKXtyZXR1cm4gdC1lfX0se31dLDEzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJjb21wYXJlLWNlbGwiKSxpPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LGUpfHxpKHQpLWkoZSl9fSx7ImNlbGwtb3JpZW50YXRpb24iOjExOCwiY29tcGFyZS1jZWxsIjoxMzV9XSwxMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvY2gxZCIpLGk9dCgiLi9saWIvY2gyZCIpLGE9dCgiLi9saWIvY2huZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZigwPT09ZSlyZXR1cm5bXTtpZigxPT09ZSlyZXR1cm5bWzBdXTt2YXIgcj10WzBdLmxlbmd0aDtpZigwPT09cilyZXR1cm5bXTtpZigxPT09cilyZXR1cm4gbih0KTtpZigyPT09cilyZXR1cm4gaSh0KTtyZXR1cm4gYSh0LHIpfX0seyIuL2xpYi9jaDFkIjoxMzgsIi4vbGliL2NoMmQiOjEzOSwiLi9saWIvY2huZCI6MTQwfV0sMTM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj0xO248dC5sZW5ndGg7KytuKXRbbl1bMF08dFtlXVswXSYmKGU9biksdFtuXVswXT50W3JdWzBdJiYocj1uKTtyZXR1cm4gZTxyP1tbZV0sW3JdXTplPnI/W1tyXSxbZV1dOltbZV1dfX0se31dLDEzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWUubGVuZ3RoO2lmKHI8PTIpcmV0dXJuW107Zm9yKHZhciBpPW5ldyBBcnJheShyKSxhPWVbci0xXSxvPTA7bzxyOysrbyl7dmFyIHM9ZVtvXTtpW29dPVthLHNdLGE9c31yZXR1cm4gaX07dmFyIG49dCgibW9ub3RvbmUtY29udmV4LWh1bGwtMmQiKX0seyJtb25vdG9uZS1jb252ZXgtaHVsbC0yZCI6NDQ4fV0sMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gbih0LCEwKX1jYXRjaChvKXt2YXIgcj1pKHQpO2lmKHIubGVuZ3RoPD1lKXJldHVybltdO3ZhciBhPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPGUubGVuZ3RoOysraSluW2ldPXRbZVtpXV07dmFyIGE9ZS5sZW5ndGg7Zm9yKGk9MDtpPHI7KytpKWUuaW5kZXhPZihpKTwwJiYoblthKytdPXRbaV0pO3JldHVybiBufSh0LHIpO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MDtpPHI7KytpKWZvcih2YXIgYT10W2ldLG89MDtvPGEubGVuZ3RoOysrbyl7dmFyIHM9YVtvXTtpZihzPG4pYVtvXT1lW3NdO2Vsc2V7cy09bjtmb3IodmFyIGw9MDtsPG47KytsKXM+PWVbbF0mJihzKz0xKTthW29dPXN9fXJldHVybiB0fShuKGEsITApLHIpfX07dmFyIG49dCgiaW5jcmVtZW50YWwtY29udmV4LWh1bGwiKSxpPXQoImFmZmluZS1odWxsIil9LHsiYWZmaW5lLWh1bGwiOjY5LCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6NDI4fV0sMTQxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtBRkc6ImFmZ2hhbiIsQUxBOiJcXGJcXHdsYW5kIixBTEI6ImFsYmFuaWEiLERaQToiYWxnZXJpYSIsQVNNOiJeKD89LiphbWVyaWMpLipzYW1vYSIsQU5EOiJhbmRvcnJhIixBR086ImFuZ29sYSIsQUlBOiJhbmd1aWxsP2EiLEFUQToiYW50YXJjdGljYSIsQVRHOiJhbnRpZ3VhIixBUkc6ImFyZ2VudGluIixBUk06ImFybWVuaWEiLEFCVzoiXig/IS4qYm9uYWlyZSkuKlxcYmFydWJhIixBVVM6ImF1c3RyYWxpYSIsQVVUOiJeKD8hLipodW5nYXJ5KS4qYXVzdHJpYXxcXGJhdXN0cmkuKlxcYmVtcCIsQVpFOiJhemVyYmFpamFuIixCSFM6ImJhaGFtYXMiLEJIUjoiYmFocmFpbiIsQkdEOiJiYW5nbGFkZXNofF4oPz0uKmVhc3QpLipwYWtpP3N0YW4iLEJSQjoiYmFyYmFkb3MiLEJMUjoiYmVsYXJ1c3xieWVsbyIsQkVMOiJeKD8hLipsdXhlbSkuKmJlbGdpdW0iLEJMWjoiYmVsaXplfF4oPz0uKmJyaXRpc2gpLipob25kdXJhcyIsQkVOOiJiZW5pbnxkYWhvbWUiLEJNVToiYmVybXVkYSIsQlROOiJiaHV0YW4iLEJPTDoiYm9saXZpYSIsQkVTOiJeKD89Lipib25haXJlKS4qZXVzdGF0aXVzfF4oPz0uKmNhcmliKS4qbmV0aGVybGFuZHN8XFxiYmVzLj9pc2xhbmRzIixCSUg6ImhlcnplZ292aW5hfGJvc25pYSIsQldBOiJib3Rzd2FuYXxiZWNodWFuYSIsQlZUOiJib3V2ZXQiLEJSQToiYnJhemlsIixJT1Q6ImJyaXRpc2guP2luZGlhbi4/b2NlYW4iLEJSTjoiYnJ1bmVpIixCR1I6ImJ1bGdhcmlhIixCRkE6ImJ1cmtpbmF8XFxiZmFzb3x1cHBlci4/dm9sdGEiLEJESToiYnVydW5kaSIsQ1BWOiJ2ZXJkZSIsS0hNOiJjYW1ib2RpYXxrYW1wdWNoZWF8a2htZXIiLENNUjoiY2FtZXJvb24iLENBTjoiY2FuYWRhIixDWU06ImNheW1hbiIsQ0FGOiJcXGJjZW50cmFsLmFmcmljYW4ucmVwdWJsaWMiLFRDRDoiXFxiY2hhZCIsQ0hMOiJcXGJjaGlsZSIsQ0hOOiJeKD8hLipcXGJtYWMpKD8hLipcXGJob25nKSg/IS4qXFxidGFpKSg/IS4qXFxicmVwKS4qY2hpbmF8Xig/PS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLENYUjoiY2hyaXN0bWFzIixDQ0s6IlxcYmNvY29zfGtlZWxpbmciLENPTDoiY29sb21iaWEiLENPTToiY29tb3JvIixDT0c6Il4oPyEuKlxcYmRlbSkoPyEuKlxcYmRbXFwuXT9yKSg/IS4qa2luc2hhc2EpKD8hLip6YWlyZSkoPyEuKmJlbGcpKD8hLipsLm9wb2xkdmlsbGUpKD8hLipmcmVlKS4qXFxiY29uZ28iLENPSzoiXFxiY29vayIsQ1JJOiJjb3N0YS4/cmljYSIsQ0lWOiJpdm9pcmV8aXZvcnkiLEhSVjoiY3JvYXRpYSIsQ1VCOiJcXGJjdWJhIixDVVc6Il4oPyEuKmJvbmFpcmUpLipcXGJjdXJhKGN8XHhlNylhbyIsQ1lQOiJjeXBydXMiLENTSzoiY3plY2hvc2xvdmFraWEiLENaRToiXig/PS4qcmVwKS4qY3plY2h8Y3plY2hpYXxib2hlbWlhIixDT0Q6IlxcYmRlbS4qY29uZ298Y29uZ28uKlxcYmRlbXxjb25nby4qXFxiZFtcXC5dP3J8XFxiZFtcXC5dP3IuKmNvbmdvfGJlbGdpYW4uP2NvbmdvfGNvbmdvLj9mcmVlLj9zdGF0ZXxraW5zaGFzYXx6YWlyZXxsLm9wb2xkdmlsbGV8ZHJjfGRyb2N8cmRjIixETks6ImRlbm1hcmsiLERKSToiZGppYm91dGkiLERNQToiZG9taW5pY2EoPyFuKSIsRE9NOiJkb21pbmljYW4ucmVwIixFQ1U6ImVjdWFkb3IiLEVHWToiZWd5cHQiLFNMVjoiZWwuP3NhbHZhZG9yIixHTlE6Imd1aW5lLiplcXxlcS4qZ3VpbmV8Xig/PS4qc3BhbikuKmd1aW5lYSIsRVJJOiJlcml0cmVhIixFU1Q6ImVzdG9uaWEiLEVUSDoiZXRoaW9waWF8YWJ5c3NpbmlhIixGTEs6ImZhbGtsYW5kfG1hbHZpbmFzIixGUk86ImZhcm9lfGZhZXJvZSIsRkpJOiJmaWppIixGSU46ImZpbmxhbmQiLEZSQToiXig/IS4qXFxiZGVwKSg/IS4qbWFydGluaXF1ZSkuKmZyYW5jZXxmcmVuY2guP3JlcHVibGljfFxcYmdhdWwiLEdVRjoiXig/PS4qZnJlbmNoKS4qZ3VpYW5hIixQWUY6ImZyZW5jaC4/cG9seW5lc2lhfHRhaGl0aSIsQVRGOiJmcmVuY2guP3NvdXRoZXJuIixHQUI6ImdhYm9uIixHTUI6ImdhbWJpYSIsR0VPOiJeKD8hLipzb3V0aCkuKmdlb3JnaWEiLEREUjoiZ2VybWFuLj9kZW1vY3JhdGljLj9yZXB1YmxpY3xkZW1vY3JhdGljLj9yZXB1YmxpYy4qZ2VybWFueXxlYXN0Lmdlcm1hbnkiLERFVToiXig/IS4qZWFzdCkuKmdlcm1hbnl8Xig/PS4qXFxiZmVkLipcXGJyZXApLipnZXJtYW4iLEdIQToiZ2hhbmF8Z29sZC4/Y29hc3QiLEdJQjoiZ2licmFsdGFyIixHUkM6ImdyZWVjZXxoZWxsZW5pY3xoZWxsYXMiLEdSTDoiZ3JlZW5sYW5kIixHUkQ6ImdyZW5hZGEiLEdMUDoiZ3VhZGVsb3VwZSIsR1VNOiJcXGJndWFtIixHVE06Imd1YXRlbWFsYSIsR0dZOiJndWVybnNleSIsR0lOOiJeKD8hLiplcSkoPyEuKnNwYW4pKD8hLipiaXNzYXUpKD8hLipwb3J0dSkoPyEuKm5ldykuKmd1aW5lYSIsR05COiJiaXNzYXV8Xig/PS4qcG9ydHUpLipndWluZWEiLEdVWToiZ3V5YW5hfGJyaXRpc2guP2d1aWFuYSIsSFRJOiJoYWl0aSIsSE1EOiJoZWFyZC4qbWNkb25hbGQiLFZBVDoiaG9seS4/c2VlfHZhdGljYW58cGFwYWwuP3N0IixITkQ6Il4oPyEuKmJyaXQpLipob25kdXJhcyIsSEtHOiJob25nLj9rb25nIixIVU46Il4oPyEuKmF1c3RyKS4qaHVuZ2FyeSIsSVNMOiJpY2VsYW5kIixJTkQ6ImluZGlhKD8hLipvY2VhKSIsSUROOiJpbmRvbmVzaWEiLElSTjoiXFxiaXJhbnxwZXJzaWEiLElSUToiXFxiaXJhcXxtZXNvcG90YW1pYSIsSVJMOiIoXmlyZWxhbmQpfChecmVwdWJsaWMuKmlyZWxhbmQpIixJTU46Il4oPz0uKmlzbGUpLipcXGJtYW4iLElTUjoiaXNyYWVsIixJVEE6Iml0YWx5IixKQU06ImphbWFpY2EiLEpQTjoiamFwYW4iLEpFWToiamVyc2V5IixKT1I6ImpvcmRhbiIsS0FaOiJrYXphayIsS0VOOiJrZW55YXxicml0aXNoLj9lYXN0Lj9hZnJpY2F8ZWFzdC4/YWZyaWNhLj9wcm90IixLSVI6ImtpcmliYXRpIixQUks6Il4oPz0uKmRlbW9jcmF0fHBlb3BsZXxub3J0aHxkLipwLioucikuKlxcYmtvcmVhfGRwcmt8a29yZWEuKihkLipwLipyKSIsS1dUOiJrdXdhaXQiLEtHWjoia3lyZ3l6fGtpcmdoaXoiLExBTzoiXFxibGFvcz9cXGIiLExWQToibGF0dmlhIixMQk46ImxlYmFub24iLExTTzoibGVzb3Rob3xiYXN1dG8iLExCUjoibGliZXJpYSIsTEJZOiJsaWJ5YSIsTElFOiJsaWVjaHRlbnN0ZWluIixMVFU6ImxpdGh1YW5pYSIsTFVYOiJeKD8hLipiZWxnKS4qbHV4ZW0iLE1BQzoibWFjYShvfHUpIixNREc6Im1hZGFnYXNjYXJ8bWFsYWdhc3kiLE1XSToibWFsYXdpfG55YXNhIixNWVM6Im1hbGF5c2lhIixNRFY6Im1hbGRpdmUiLE1MSToiXFxibWFsaVxcYiIsTUxUOiJcXGJtYWx0YSIsTUhMOiJtYXJzaGFsbCIsTVRROiJtYXJ0aW5pcXVlIixNUlQ6Im1hdXJpdGFuaWEiLE1VUzoibWF1cml0aXVzIixNWVQ6IlxcYm1heW90dGUiLE1FWDoiXFxibWV4aWMiLEZTTToiZmVkLiptaWNyb25lc2lhfG1pY3JvbmVzaWEuKmZlZCIsTUNPOiJtb25hY28iLE1ORzoibW9uZ29saWEiLE1ORToiXig/IS4qc2VyYmlhKS4qbW9udGVuZWdybyIsTVNSOiJtb250c2VycmF0IixNQVI6Im1vcm9jY298XFxibWFyb2MiLE1PWjoibW96YW1iaXF1ZSIsTU1SOiJteWFubWFyfGJ1cm1hIixOQU06Im5hbWliaWEiLE5SVToibmF1cnUiLE5QTDoibmVwYWwiLE5MRDoiXig/IS4qXFxiYW50KSg/IS4qXFxiY2FyaWIpLipuZXRoZXJsYW5kcyIsQU5UOiJeKD89LipcXGJhbnQpLioobmV0aGVyfGR1dGNoKSIsTkNMOiJuZXcuP2NhbGVkb25pYSIsTlpMOiJuZXcuP3plYWxhbmQiLE5JQzoibmljYXJhZ3VhIixORVI6IlxcYm5pZ2VyKD8haWEpIixOR0E6Im5pZ2VyaWEiLE5JVToibml1ZSIsTkZLOiJub3Jmb2xrIixNTlA6Im1hcmlhbmEiLE5PUjoibm9yd2F5IixPTU46IlxcYm9tYW58dHJ1Y2lhbCIsUEFLOiJeKD8hLiplYXN0KS4qcGFraT9zdGFuIixQTFc6InBhbGF1IixQU0U6InBhbGVzdGlufFxcYmdhemF8d2VzdC4/YmFuayIsUEFOOiJwYW5hbWEiLFBORzoicGFwdWF8bmV3Lj9ndWluZWEiLFBSWToicGFyYWd1YXkiLFBFUjoicGVydSIsUEhMOiJwaGlsaXBwaW5lcyIsUENOOiJwaXRjYWlybiIsUE9MOiJwb2xhbmQiLFBSVDoicG9ydHVnYWwiLFBSSToicHVlcnRvLj9yaWNvIixRQVQ6InFhdGFyIixLT1I6Il4oPyEuKmQuKnAuKnIpKD8hLipkZW1vY3JhdCkoPyEuKnBlb3BsZSkoPyEuKm5vcnRoKS4qXFxia29yZWEoPyEuKmQuKnAuKnIpIixNREE6Im1vbGRvdnxiKGF8ZSlzc2FyYWJpYSIsUkVVOiJyKGV8XHhlOSl1bmlvbiIsUk9VOiJyKG98dXxvdSltYW5pYSIsUlVTOiJcXGJydXNzaWF8c292aWV0Lj91bmlvbnx1XFwuP3NcXC4/c1xcLj9yfHNvY2lhbGlzdC4/cmVwdWJsaWNzIixSV0E6InJ3YW5kYSIsQkxNOiJiYXJ0aChlfFx4ZTkpbGVteSIsU0hOOiJoZWxlbmEiLEtOQToia2l0dHN8XFxibmV2aXMiLExDQToiXFxibHVjaWEiLE1BRjoiXig/PS4qY29sbGVjdGl2aXR5KS4qbWFydGlufF4oPz0uKmZyYW5jZSkuKm1hcnRpbig/IWlxdWUpfF4oPz0uKmZyZW5jaCkuKm1hcnRpbig/IWlxdWUpIixTUE06Im1pcXVlbG9uIixWQ1Q6InZpbmNlbnQiLFdTTToiXig/IS4qYW1lcikuKnNhbW9hIixTTVI6InNhbi4/bWFyaW5vIixTVFA6IlxcYnMoYXxceGUzKW8uP3RvbShlfFx4ZTkpIixTQVU6IlxcYnNhXFx3Ki4/YXJhYmlhIixTRU46InNlbmVnYWwiLFNSQjoiXig/IS4qbW9udGUpLipzZXJiaWEiLFNZQzoic2V5Y2hlbGwiLFNMRToic2llcnJhIixTR1A6InNpbmdhcG9yZSIsU1hNOiJeKD8hLiptYXJ0aW4pKD8hLipzYWJhKS4qbWFhcnRlbiIsU1ZLOiJeKD8hLipjemUpLipzbG92YWsiLFNWTjoic2xvdmVuaWEiLFNMQjoic29sb21vbiIsU09NOiJzb21hbGkiLFpBRjoic291dGguYWZyaWNhfHNcXFxcLi4/YWZyaWNhIixTR1M6InNvdXRoLj9nZW9yZ2lhfHNhbmR3aWNoIixTU0Q6IlxcYnNcXHcqLj9zdWRhbiIsRVNQOiJzcGFpbiIsTEtBOiJzcmkuP2xhbmthfGNleWxvbiIsU0ROOiJeKD8hLipcXGJzKD8hdSkpLipzdWRhbiIsU1VSOiJzdXJpbmFtfGR1dGNoLj9ndWlhbmEiLFNKTToic3ZhbGJhcmQiLFNXWjoic3dhemlsYW5kIixTV0U6InN3ZWRlbiIsQ0hFOiJzd2l0enxzd2lzcyIsU1lSOiJzeXJpYSIsVFdOOiJ0YWl3YW58dGFpcGVpfGZvcm1vc2F8Xig/IS4qcGVvKSg/PS4qcmVwKS4qY2hpbmEiLFRKSzoidGFqaWsiLFRIQToidGhhaWxhbmR8XFxic2lhbSIsTUtEOiJtYWNlZG9uaWF8Znlyb20iLFRMUzoiXig/PS4qbGVzdGUpLip0aW1vcnxeKD89LiplYXN0KS4qdGltb3IiLFRHTzoidG9nbyIsVEtMOiJ0b2tlbGF1IixUT046InRvbmdhIixUVE86InRyaW5pZGFkfHRvYmFnbyIsVFVOOiJ0dW5pc2lhIixUVVI6InR1cmtleSIsVEtNOiJ0dXJrbWVuIixUQ0E6InR1cmtzIixUVVY6InR1dmFsdSIsVUdBOiJ1Z2FuZGEiLFVLUjoidWtyYWluIixBUkU6ImVtaXJhdGVzfF51XFwuP2FcXC4/ZVxcLj8kfHVuaXRlZC4/YXJhYi4/ZW0iLEdCUjoidW5pdGVkLj9raW5nZG9tfGJyaXRhaW58XnVcXC4/a1xcLj8kIixUWkE6InRhbnphbmlhIixVU0E6InVuaXRlZC4/c3RhdGVzXFxiKD8hLippc2xhbmRzKXxcXGJ1XFwuP3NcXC4/YVxcLj9cXGJ8Xlxccyp1XFwuP3NcXC4/XFxiKD8hLippc2xhbmRzKSIsVU1JOiJtaW5vci4/b3V0bHlpbmcuP2lzIixVUlk6InVydWd1YXkiLFVaQjoidXpiZWsiLFZVVDoidmFudWF0dXxuZXcuP2hlYnJpZGVzIixWRU46InZlbmV6dWVsYSIsVk5NOiJeKD8hLipyZXB1YmxpYykuKnZpZXQuP25hbXxeKD89Lipzb2NpYWxpc3QpLip2aWV0Lj9uYW0iLFZHQjoiXig/PS4qXFxidVxcLj9cXHM/aykuKnZpcmdpbnxeKD89Lipicml0KS4qdmlyZ2lufF4oPz0uKmtpbmdkb20pLip2aXJnaW4iLFZJUjoiXig/PS4qXFxidVxcLj9cXHM/cykuKnZpcmdpbnxeKD89LipzdGF0ZXMpLip2aXJnaW4iLFdMRjoiZnV0dW5hfHdhbGxpcyIsRVNIOiJ3ZXN0ZXJuLnNhaGFyYSIsWUVNOiJeKD8hLiphcmFiKSg/IS4qbm9ydGgpKD8hLipzYW5hKSg/IS4qcGVvKSg/IS4qZGVtKSg/IS4qc291dGgpKD8hLiphZGVuKSg/IS4qXFxicFxcLj9kXFwuP3IpLip5ZW1lbiIsWU1EOiJeKD89LipwZW8pLip5ZW1lbnxeKD8hLipyZXApKD89LipkZW0pLip5ZW1lbnxeKD89Lipzb3V0aCkuKnllbWVufF4oPz0uKmFkZW4pLip5ZW1lbnxeKD89LipcXGJwXFwuP2RcXC4/cikuKnllbWVuIixZVUc6Inl1Z29zbGF2aWEiLFpNQjoiemFtYmlhfG5vcnRoZXJuLj9yaG9kZXNpYSIsRUFaOiJ6YW56aWJhciIsWldFOiJ6aW1iYWJ3ZXxeKD8hLipub3J0aGVybikuKnJob2Rlc2lhIn19LHt9XSwxNDI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJ4eC1zbWFsbCIsIngtc21hbGwiLCJzbWFsbCIsIm1lZGl1bSIsImxhcmdlIiwieC1sYXJnZSIsInh4LWxhcmdlIiwibGFyZ2VyIiwic21hbGxlciJdfSx7fV0sMTQzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPVsibm9ybWFsIiwiY29uZGVuc2VkIiwic2VtaS1jb25kZW5zZWQiLCJleHRyYS1jb25kZW5zZWQiLCJ1bHRyYS1jb25kZW5zZWQiLCJleHBhbmRlZCIsInNlbWktZXhwYW5kZWQiLCJleHRyYS1leHBhbmRlZCIsInVsdHJhLWV4cGFuZGVkIl19LHt9XSwxNDQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJpdGFsaWMiLCJvYmxpcXVlIl19LHt9XSwxNDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciIsIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCJdfSx7fV0sMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGFyc2U6dCgiLi9wYXJzZSIpLHN0cmluZ2lmeTp0KCIuL3N0cmluZ2lmeSIpfX0seyIuL3BhcnNlIjoxNDgsIi4vc3RyaW5naWZ5IjoxNDl9XSwxNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY3NzLWZvbnQtc2l6ZS1rZXl3b3JkcyIpO2UuZXhwb3J0cz17aXNTaXplOmZ1bmN0aW9uKHQpe3JldHVybi9eW1xkXC5dLy50ZXN0KHQpfHwtMSE9PXQuaW5kZXhPZigiLyIpfHwtMSE9PW4uaW5kZXhPZih0KX19fSx7ImNzcy1mb250LXNpemUta2V5d29yZHMiOjE0Mn1dLDE0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ1bnF1b3RlIiksaT10KCJjc3MtZ2xvYmFsLWtleXdvcmRzIiksYT10KCJjc3Mtc3lzdGVtLWZvbnQta2V5d29yZHMiKSxvPXQoImNzcy1mb250LXdlaWdodC1rZXl3b3JkcyIpLHM9dCgiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiKSxsPXQoImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiKSxjPXQoInN0cmluZy1zcGxpdC1ieSIpLHU9dCgiLi9saWIvdXRpbCIpLmlzU2l6ZTtlLmV4cG9ydHM9aDt2YXIgZj1oLmNhY2hlPXt9O2Z1bmN0aW9uIGgodCl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiRm9udCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLiIpO2lmKGZbdF0pcmV0dXJuIGZbdF07aWYoIiI9PT10KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHBhcnNlIGFuIGVtcHR5IHN0cmluZy4iKTtpZigtMSE9PWEuaW5kZXhPZih0KSlyZXR1cm4gZlt0XT17c3lzdGVtOnR9O2Zvcih2YXIgZSxyPXtzdHlsZToibm9ybWFsIix2YXJpYW50OiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzdHJldGNoOiJub3JtYWwiLGxpbmVIZWlnaHQ6Im5vcm1hbCIsc2l6ZToiMXJlbSIsZmFtaWx5Olsic2VyaWYiXX0saD1jKHQsL1xzKy8pO2U9aC5zaGlmdCgpOyl7aWYoLTEhPT1pLmluZGV4T2YoZSkpcmV0dXJuWyJzdHlsZSIsInZhcmlhbnQiLCJ3ZWlnaHQiLCJzdHJldGNoIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0XT1lfSkpLGZbdF09cjtpZigtMT09PXMuaW5kZXhPZihlKSlpZigibm9ybWFsIiE9PWUmJiJzbWFsbC1jYXBzIiE9PWUpaWYoLTE9PT1sLmluZGV4T2YoZSkpe2lmKC0xPT09by5pbmRleE9mKGUpKXtpZih1KGUpKXt2YXIgZD1jKGUsIi8iKTtpZihyLnNpemU9ZFswXSxudWxsIT1kWzFdP3IubGluZUhlaWdodD1wKGRbMV0pOiIvIj09PWhbMF0mJihoLnNoaWZ0KCksci5saW5lSGVpZ2h0PXAoaC5zaGlmdCgpKSksIWgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiTWlzc2luZyByZXF1aXJlZCBmb250LWZhbWlseS4iKTtyZXR1cm4gci5mYW1pbHk9YyhoLmpvaW4oIiAiKSwvXHMqLFxzKi8pLm1hcChuKSxmW3RdPXJ9dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG9yIHVuc3VwcG9ydGVkIGZvbnQgdG9rZW46ICIrZSl9ci53ZWlnaHQ9ZX1lbHNlIHIuc3RyZXRjaD1lO2Vsc2Ugci52YXJpYW50PWU7ZWxzZSByLnN0eWxlPWV9dGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGZvbnQtc2l6ZS4iKX1mdW5jdGlvbiBwKHQpe3ZhciBlPXBhcnNlRmxvYXQodCk7cmV0dXJuIGUudG9TdHJpbmcoKT09PXQ/ZTp0fX0seyIuL2xpYi91dGlsIjoxNDcsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjE0MywiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjE0NCwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxNDUsImNzcy1nbG9iYWwta2V5d29yZHMiOjE1MCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxNTEsInN0cmluZy1zcGxpdC1ieSI6NTYyLHVucXVvdGU6NTkzfV0sMTQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBpY2stYnktYWxpYXMiKSxpPXQoIi4vbGliL3V0aWwiKS5pc1NpemUsYT1tKHQoImNzcy1nbG9iYWwta2V5d29yZHMiKSksbz1tKHQoImNzcy1zeXN0ZW0tZm9udC1rZXl3b3JkcyIpKSxzPW0odCgiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIikpLGw9bSh0KCJjc3MtZm9udC1zdHlsZS1rZXl3b3JkcyIpKSxjPW0odCgiY3NzLWZvbnQtc3RyZXRjaC1rZXl3b3JkcyIpKSx1PXtub3JtYWw6MSwic21hbGwtY2FwcyI6MX0sZj17c2VyaWY6MSwic2Fucy1zZXJpZiI6MSxtb25vc3BhY2U6MSxjdXJzaXZlOjEsZmFudGFzeToxLCJzeXN0ZW0tdWkiOjF9LGg9IjFyZW0iLHA9InNlcmlmIjtmdW5jdGlvbiBkKHQsZSl7aWYodCYmIWVbdF0mJiFhW3RdKXRocm93IEVycm9yKCJVbmtub3duIGtleXdvcmQgYCIrdCsiYCIpO3JldHVybiB0fWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPTE7cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCh0PW4odCx7c3R5bGU6InN0eWxlIGZvbnRzdHlsZSBmb250U3R5bGUgZm9udC1zdHlsZSBzbG9wZSBkaXN0aW5jdGlvbiIsdmFyaWFudDoidmFyaWFudCBmb250LXZhcmlhbnQgZm9udFZhcmlhbnQgZm9udHZhcmlhbnQgdmFyIGNhcGl0YWxpemF0aW9uIix3ZWlnaHQ6IndlaWdodCB3IGZvbnQtd2VpZ2h0IGZvbnRXZWlnaHQgZm9udHdlaWdodCIsc3RyZXRjaDoic3RyZXRjaCBmb250LXN0cmV0Y2ggZm9udFN0cmV0Y2ggZm9udHN0cmV0Y2ggd2lkdGgiLHNpemU6InNpemUgcyBmb250LXNpemUgZm9udFNpemUgZm9udHNpemUgaGVpZ2h0IGVtIGVtU2l6ZSIsbGluZUhlaWdodDoibGggbGluZS1oZWlnaHQgbGluZUhlaWdodCBsaW5laGVpZ2h0IGxlYWRpbmciLGZhbWlseToiZm9udCBmYW1pbHkgZm9udEZhbWlseSBmb250LWZhbWlseSBmb250ZmFtaWx5IHR5cGUgdHlwZWZhY2UgZmFjZSIsc3lzdGVtOiJzeXN0ZW0gcmVzZXJ2ZWQgZGVmYXVsdCBnbG9iYWwifSkpLnN5c3RlbSlyZXR1cm4gdC5zeXN0ZW0mJmQodC5zeXN0ZW0sbyksdC5zeXN0ZW07aWYoZCh0LnN0eWxlLGwpLGQodC52YXJpYW50LHUpLGQodC53ZWlnaHQscyksZCh0LnN0cmV0Y2gsYyksbnVsbD09dC5zaXplJiYodC5zaXplPWgpLCJudW1iZXIiPT10eXBlb2YgdC5zaXplJiYodC5zaXplKz0icHgiKSwhaSl0aHJvdyBFcnJvcigiQmFkIHNpemUgdmFsdWUgYCIrdC5zaXplKyJgIik7dC5mYW1pbHl8fCh0LmZhbWlseT1wKSxBcnJheS5pc0FycmF5KHQuZmFtaWx5KSYmKHQuZmFtaWx5Lmxlbmd0aHx8KHQuZmFtaWx5PVtwXSksdC5mYW1pbHk9dC5mYW1pbHkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZlt0XT90OiciJyt0KyciJ30pKS5qb2luKCIsICIpKTt2YXIgZT1bXTtyZXR1cm4gZS5wdXNoKHQuc3R5bGUpLHQudmFyaWFudCE9PXQuc3R5bGUmJmUucHVzaCh0LnZhcmlhbnQpLHQud2VpZ2h0IT09dC52YXJpYW50JiZ0LndlaWdodCE9PXQuc3R5bGUmJmUucHVzaCh0LndlaWdodCksdC5zdHJldGNoIT09dC53ZWlnaHQmJnQuc3RyZXRjaCE9PXQudmFyaWFudCYmdC5zdHJldGNoIT09dC5zdHlsZSYmZS5wdXNoKHQuc3RyZXRjaCksZS5wdXNoKHQuc2l6ZSsobnVsbD09dC5saW5lSGVpZ2h0fHwibm9ybWFsIj09PXQubGluZUhlaWdodHx8dC5saW5lSGVpZ2h0KyIiPT0iMSI/IiI6Ii8iK3QubGluZUhlaWdodCkpLGUucHVzaCh0LmZhbWlseSksZS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpfX0seyIuL2xpYi91dGlsIjoxNDcsImNzcy1mb250LXN0cmV0Y2gta2V5d29yZHMiOjE0MywiY3NzLWZvbnQtc3R5bGUta2V5d29yZHMiOjE0NCwiY3NzLWZvbnQtd2VpZ2h0LWtleXdvcmRzIjoxNDUsImNzcy1nbG9iYWwta2V5d29yZHMiOjE1MCwiY3NzLXN5c3RlbS1mb250LWtleXdvcmRzIjoxNTEsInBpY2stYnktYWxpYXMiOjQ3NX1dLDE1MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImluaGVyaXQiLCJpbml0aWFsIiwidW5zZXQiXX0se31dLDE1MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bImNhcHRpb24iLCJpY29uIiwibWVudSIsIm1lc3NhZ2UtYm94Iiwic21hbGwtY2FwdGlvbiIsInN0YXR1cy1iYXIiXX0se31dLDE1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWktMSxzPWkqaSxsPW8qbyxjPSgxKzIqaSkqbCx1PWkqbCxmPXMqKDMtMippKSxoPXMqbztpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciBwPXQubGVuZ3RoLTE7cD49MDstLXApYVtwXT1jKnRbcF0rdSplW3BdK2YqcltwXStoKm5bcF07cmV0dXJuIGF9cmV0dXJuIGMqdCt1KmUrZipyK2gqbn0sZS5leHBvcnRzLmRlcml2YXRpdmU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPTYqaSppLTYqaSxzPTMqaSppLTQqaSsxLGw9LTYqaSppKzYqaSxjPTMqaSppLTIqaTtpZih0Lmxlbmd0aCl7YXx8KGE9bmV3IEFycmF5KHQubGVuZ3RoKSk7Zm9yKHZhciB1PXQubGVuZ3RoLTE7dT49MDstLXUpYVt1XT1vKnRbdV0rcyplW3VdK2wqclt1XStjKm5bdV07cmV0dXJuIGF9cmV0dXJuIG8qdCtzKmUrbCpyW3VdK2Mqbn19LHt9XSwxNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJ0eXBlL3ZhbHVlL2lzIiksYT10KCJ0eXBlL3ZhbHVlL2Vuc3VyZSIpLG89dCgidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiKSxzPXQoImVzNS1leHQvb2JqZWN0L2NvcHkiKSxsPXQoImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIiksYz10KCJlczUtZXh0L29iamVjdC9tYXAiKSx1PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGg9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtuPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPWEoZSkmJm8oZS52YWx1ZSk7cmV0dXJuIGRlbGV0ZShuPXMoZSkpLndyaXRhYmxlLGRlbGV0ZSBuLnZhbHVlLG4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIXIub3ZlcndyaXRlRGVmaW5pdGlvbiYmaC5jYWxsKHRoaXMsdCk/aTooZS52YWx1ZT11LmNhbGwoaSxyLnJlc29sdmVDb250ZXh0P3IucmVzb2x2ZUNvbnRleHQodGhpcyk6dGhpcyksZih0aGlzLHQsZSksdGhpc1t0XSl9LG59LGUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1sKGFyZ3VtZW50c1sxXSk7cmV0dXJuIGkoZS5yZXNvbHZlQ29udGV4dCkmJm8oZS5yZXNvbHZlQ29udGV4dCksYyh0LChmdW5jdGlvbih0LHIpe3JldHVybiBuKHIsdCxlKX0pKX19LHsiZXM1LWV4dC9vYmplY3QvY29weSI6MTk3LCJlczUtZXh0L29iamVjdC9tYXAiOjIwNSwiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiOjIwNiwidHlwZS9wbGFpbi1mdW5jdGlvbi9lbnN1cmUiOjU4NCwidHlwZS92YWx1ZS9lbnN1cmUiOjU4OCwidHlwZS92YWx1ZS9pcyI6NTg5fV0sMTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGUvdmFsdWUvaXMiKSxpPXQoInR5cGUvcGxhaW4tZnVuY3Rpb24vaXMiKSxhPXQoImVzNS1leHQvb2JqZWN0L2Fzc2lnbiIpLG89dCgiZXM1LWV4dC9vYmplY3Qvbm9ybWFsaXplLW9wdGlvbnMiKSxzPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKTsoZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxsLGMsdTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyfHwic3RyaW5nIiE9dHlwZW9mIHQ/KGM9ZSxlPXQsdD1udWxsKTpjPWFyZ3VtZW50c1syXSxuKHQpPyhyPXMuY2FsbCh0LCJjIiksaT1zLmNhbGwodCwiZSIpLGw9cy5jYWxsKHQsInciKSk6KHI9bD0hMCxpPSExKSx1PXt2YWx1ZTplLGNvbmZpZ3VyYWJsZTpyLGVudW1lcmFibGU6aSx3cml0YWJsZTpsfSxjP2EobyhjKSx1KTp1fSkuZ3M9ZnVuY3Rpb24odCxlLHIpe3ZhciBsLGMsdSxmO3JldHVybiJzdHJpbmciIT10eXBlb2YgdD8odT1yLHI9ZSxlPXQsdD1udWxsKTp1PWFyZ3VtZW50c1szXSxuKGUpP2koZSk/bihyKT9pKHIpfHwodT1yLHI9dm9pZCAwKTpyPXZvaWQgMDoodT1lLGU9cj12b2lkIDApOmU9dm9pZCAwLG4odCk/KGw9cy5jYWxsKHQsImMiKSxjPXMuY2FsbCh0LCJlIikpOihsPSEwLGM9ITEpLGY9e2dldDplLHNldDpyLGNvbmZpZ3VyYWJsZTpsLGVudW1lcmFibGU6Y30sdT9hKG8odSksZik6Zn19LHsiZXM1LWV4dC9vYmplY3QvYXNzaWduIjoxOTQsImVzNS1leHQvb2JqZWN0L25vcm1hbGl6ZS1vcHRpb25zIjoyMDYsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIxMywidHlwZS9wbGFpbi1mdW5jdGlvbi9pcyI6NTg1LCJ0eXBlL3ZhbHVlL2lzIjo1ODl9XSwxNTU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6dD49ZT8wOk5hTn1mdW5jdGlvbiByKHQpe3ZhciByO3JldHVybiAxPT09dC5sZW5ndGgmJihyPXQsdD1mdW5jdGlvbih0LG4pe3JldHVybiBlKHIodCksbil9KSx7bGVmdDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPDA/bj1hKzE6aT1hfXJldHVybiBufSxyaWdodDpmdW5jdGlvbihlLHIsbixpKXtmb3IobnVsbD09biYmKG49MCksbnVsbD09aSYmKGk9ZS5sZW5ndGgpO248aTspe3ZhciBhPW4raT4+PjE7dChlW2FdLHIpPjA/aT1hOm49YSsxfXJldHVybiBufX19dmFyIG49cihlKSxpPW4ucmlnaHQsYT1uLmxlZnQ7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblt0LGVdfWZ1bmN0aW9uIHModCl7cmV0dXJuIG51bGw9PT10P05hTjordH1mdW5jdGlvbiBsKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9MCxvPS0xLGw9MCxjPTA7aWYobnVsbD09ZSlmb3IoOysrbzxpOylpc05hTihyPXModFtvXSkpfHwoYys9KG49ci1sKSooci0obCs9bi8rK2EpKSk7ZWxzZSBmb3IoOysrbzxpOylpc05hTihyPXMoZSh0W29dLG8sdCkpKXx8KGMrPShuPXItbCkqKHItKGwrPW4vKythKSkpO2lmKGE+MSlyZXR1cm4gYy8oYS0xKX1mdW5jdGlvbiBjKHQsZSl7dmFyIHI9bCh0LGUpO3JldHVybiByP01hdGguc3FydChyKTpyfWZ1bmN0aW9uIHUodCxlKXt2YXIgcixuLGksYT10Lmxlbmd0aCxvPS0xO2lmKG51bGw9PWUpe2Zvcig7KytvPGE7KWlmKG51bGwhPShyPXRbb10pJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9dFtvXSkmJihuPnImJihuPXIpLGk8ciYmKGk9cikpfWVsc2UgZm9yKDsrK288YTspaWYobnVsbCE9KHI9ZSh0W29dLG8sdCkpJiZyPj1yKWZvcihuPWk9cjsrK288YTspbnVsbCE9KHI9ZSh0W29dLG8sdCkpJiYobj5yJiYobj1yKSxpPHImJihpPXIpKTtyZXR1cm5bbixpXX12YXIgZj1BcnJheS5wcm90b3R5cGUsaD1mLnNsaWNlLHA9Zi5tYXA7ZnVuY3Rpb24gZCh0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19ZnVuY3Rpb24gbSh0KXtyZXR1cm4gdH1mdW5jdGlvbiBnKHQsZSxyKXt0PSt0LGU9K2Uscj0oaT1hcmd1bWVudHMubGVuZ3RoKTwyPyhlPXQsdD0wLDEpOmk8Mz8xOityO2Zvcih2YXIgbj0tMSxpPTB8TWF0aC5tYXgoMCxNYXRoLmNlaWwoKGUtdCkvcikpLGE9bmV3IEFycmF5KGkpOysrbjxpOylhW25dPXQrbipyO3JldHVybiBhfXZhciB2PU1hdGguc3FydCg1MCkseT1NYXRoLnNxcnQoMTApLHg9TWF0aC5zcXJ0KDIpO2Z1bmN0aW9uIGIodCxlLHIpe3ZhciBuPShlLXQpL01hdGgubWF4KDAsciksaT1NYXRoLmZsb29yKE1hdGgubG9nKG4pL01hdGguTE4xMCksYT1uL01hdGgucG93KDEwLGkpO3JldHVybiBpPj0wPyhhPj12PzEwOmE+PXk/NTphPj14PzI6MSkqTWF0aC5wb3coMTAsaSk6LU1hdGgucG93KDEwLC1pKS8oYT49dj8xMDphPj15PzU6YT49eD8yOjEpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPU1hdGguYWJzKGUtdCkvTWF0aC5tYXgoMCxyKSxpPU1hdGgucG93KDEwLE1hdGguZmxvb3IoTWF0aC5sb2cobikvTWF0aC5MTjEwKSksYT1uL2k7cmV0dXJuIGE+PXY/aSo9MTA6YT49eT9pKj01OmE+PXgmJihpKj0yKSxlPHQ/LWk6aX1mdW5jdGlvbiB3KHQpe3JldHVybiBNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKSsxfWZ1bmN0aW9uIFQodCxlLHIpe2lmKG51bGw9PXImJihyPXMpLG49dC5sZW5ndGgpe2lmKChlPStlKTw9MHx8bjwyKXJldHVybityKHRbMF0sMCx0KTtpZihlPj0xKXJldHVybityKHRbbi0xXSxuLTEsdCk7dmFyIG4saT0obi0xKSplLGE9TWF0aC5mbG9vcihpKSxvPStyKHRbYV0sYSx0KTtyZXR1cm4gbysoK3IodFthKzFdLGErMSx0KS1vKSooaS1hKX19ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saT10Lmxlbmd0aCxhPS0xO2lmKG51bGw9PWUpe2Zvcig7KythPGk7KWlmKG51bGwhPShyPXRbYV0pJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPXRbYV0pJiZuPnImJihuPXIpfWVsc2UgZm9yKDsrK2E8aTspaWYobnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPj1yKWZvcihuPXI7KythPGk7KW51bGwhPShyPWUodFthXSxhLHQpKSYmbj5yJiYobj1yKTtyZXR1cm4gbn1mdW5jdGlvbiBBKHQpe2lmKCEoaT10Lmxlbmd0aCkpcmV0dXJuW107Zm9yKHZhciBlPS0xLHI9ayh0LE0pLG49bmV3IEFycmF5KHIpOysrZTxyOylmb3IodmFyIGksYT0tMSxvPW5bZV09bmV3IEFycmF5KGkpOysrYTxpOylvW2FdPXRbYV1bZV07cmV0dXJuIG59ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdC5sZW5ndGh9dC5iaXNlY3Q9aSx0LmJpc2VjdFJpZ2h0PWksdC5iaXNlY3RMZWZ0PWEsdC5hc2NlbmRpbmc9ZSx0LmJpc2VjdG9yPXIsdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLHMsbD10Lmxlbmd0aCxjPWUubGVuZ3RoLHU9bmV3IEFycmF5KGwqYyk7Zm9yKG51bGw9PXImJihyPW8pLG49YT0wO248bDsrK24pZm9yKHM9dFtuXSxpPTA7aTxjOysraSwrK2EpdVthXT1yKHMsZVtpXSk7cmV0dXJuIHV9LHQuZGVzY2VuZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn0sdC5kZXZpYXRpb249Yyx0LmV4dGVudD11LHQuaGlzdG9ncmFtPWZ1bmN0aW9uKCl7dmFyIHQ9bSxlPXUscj13O2Z1bmN0aW9uIG4obil7dmFyIGEsbyxzPW4ubGVuZ3RoLGw9bmV3IEFycmF5KHMpO2ZvcihhPTA7YTxzOysrYSlsW2FdPXQoblthXSxhLG4pO3ZhciBjPWUobCksdT1jWzBdLGY9Y1sxXSxoPXIobCx1LGYpO0FycmF5LmlzQXJyYXkoaCl8fChoPV8odSxmLGgpLGg9ZyhNYXRoLmNlaWwodS9oKSpoLGYsaCkpO2Zvcih2YXIgcD1oLmxlbmd0aDtoWzBdPD11OyloLnNoaWZ0KCksLS1wO2Zvcig7aFtwLTFdPmY7KWgucG9wKCksLS1wO3ZhciBkLG09bmV3IEFycmF5KHArMSk7Zm9yKGE9MDthPD1wOysrYSkoZD1tW2FdPVtdKS54MD1hPjA/aFthLTFdOnUsZC54MT1hPHA/aFthXTpmO2ZvcihhPTA7YTxzOysrYSl1PD0obz1sW2FdKSYmbzw9ZiYmbVtpKGgsbywwLHApXS5wdXNoKG5bYV0pO3JldHVybiBtfXJldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZChlKSxuKTp0fSxuLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OmQoW3RbMF0sdFsxXV0pLG4pOmV9LG4udGhyZXNob2xkcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OkFycmF5LmlzQXJyYXkodCk/ZChoLmNhbGwodCkpOmQodCksbik6cn0sbn0sdC50aHJlc2hvbGRGcmVlZG1hbkRpYWNvbmlzPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4gdD1wLmNhbGwodCxzKS5zb3J0KGUpLE1hdGguY2VpbCgobi1yKS8oMiooVCh0LC43NSktVCh0LC4yNSkpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU2NvdHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBNYXRoLmNlaWwoKHItZSkvKDMuNSpjKHQpKk1hdGgucG93KHQubGVuZ3RoLC0xLzMpKSl9LHQudGhyZXNob2xkU3R1cmdlcz13LHQubWF4PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQubGVuZ3RoLGE9LTE7aWYobnVsbD09ZSl7Zm9yKDsrK2E8aTspaWYobnVsbCE9KHI9dFthXSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9dFthXSkmJnI+biYmKG49cil9ZWxzZSBmb3IoOysrYTxpOylpZihudWxsIT0ocj1lKHRbYV0sYSx0KSkmJnI+PXIpZm9yKG49cjsrK2E8aTspbnVsbCE9KHI9ZSh0W2FdLGEsdCkpJiZyPm4mJihuPXIpO3JldHVybiBufSx0Lm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQubGVuZ3RoLGk9bixhPS0xLG89MDtpZihudWxsPT1lKWZvcig7KythPG47KWlzTmFOKHI9cyh0W2FdKSk/LS1pOm8rPXI7ZWxzZSBmb3IoOysrYTxuOylpc05hTihyPXMoZSh0W2FdLGEsdCkpKT8tLWk6bys9cjtpZihpKXJldHVybiBvL2l9LHQubWVkaWFuPWZ1bmN0aW9uKHQscil7dmFyIG4saT10Lmxlbmd0aCxhPS0xLG89W107aWYobnVsbD09cilmb3IoOysrYTxpOylpc05hTihuPXModFthXSkpfHxvLnB1c2gobik7ZWxzZSBmb3IoOysrYTxpOylpc05hTihuPXMocih0W2FdLGEsdCkpKXx8by5wdXNoKG4pO3JldHVybiBUKG8uc29ydChlKSwuNSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpPXQubGVuZ3RoLGE9LTEsbz0wOysrYTxpOylvKz10W2FdLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyk7LS1pPj0wOylmb3IoZT0obj10W2ldKS5sZW5ndGg7LS1lPj0wOylyWy0tb109bltlXTtyZXR1cm4gcn0sdC5taW49ayx0LnBhaXJzPWZ1bmN0aW9uKHQsZSl7bnVsbD09ZSYmKGU9byk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9dFswXSxhPW5ldyBBcnJheShuPDA/MDpuKTtyPG47KWFbcl09ZShpLGk9dFsrK3JdKTtyZXR1cm4gYX0sdC5wZXJtdXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoLG49bmV3IEFycmF5KHIpO3ItLTspbltyXT10W2Vbcl1dO3JldHVybiBufSx0LnF1YW50aWxlPVQsdC5yYW5nZT1nLHQuc2Nhbj1mdW5jdGlvbih0LHIpe2lmKG49dC5sZW5ndGgpe3ZhciBuLGksYT0wLG89MCxzPXRbb107Zm9yKG51bGw9PXImJihyPWUpOysrYTxuOykocihpPXRbYV0scyk8MHx8MCE9PXIocyxzKSkmJihzPWksbz1hKTtyZXR1cm4gMD09PXIocyxzKT9vOnZvaWQgMH19LHQuc2h1ZmZsZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0obnVsbD09cj90Lmxlbmd0aDpyKS0oZT1udWxsPT1lPzA6K2UpO2E7KWk9TWF0aC5yYW5kb20oKSphLS18MCxuPXRbYStlXSx0W2ErZV09dFtpK2VdLHRbaStlXT1uO3JldHVybiB0fSx0LnN1bT1mdW5jdGlvbih0LGUpe3ZhciByLG49dC5sZW5ndGgsaT0tMSxhPTA7aWYobnVsbD09ZSlmb3IoOysraTxuOykocj0rdFtpXSkmJihhKz1yKTtlbHNlIGZvcig7KytpPG47KShyPStlKHRbaV0saSx0KSkmJihhKz1yKTtyZXR1cm4gYX0sdC50aWNrcz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scz0tMTtpZihyPStyLCh0PSt0KT09PShlPStlKSYmcj4wKXJldHVyblt0XTtpZigobj1lPHQpJiYoaT10LHQ9ZSxlPWkpLDA9PT0obz1iKHQsZSxyKSl8fCFpc0Zpbml0ZShvKSlyZXR1cm5bXTtpZihvPjApZm9yKHQ9TWF0aC5jZWlsKHQvbyksZT1NYXRoLmZsb29yKGUvbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwoZS10KzEpKTsrK3M8aTspYVtzXT0odCtzKSpvO2Vsc2UgZm9yKHQ9TWF0aC5mbG9vcih0Km8pLGU9TWF0aC5jZWlsKGUqbyksYT1uZXcgQXJyYXkoaT1NYXRoLmNlaWwodC1lKzEpKTsrK3M8aTspYVtzXT0odC1zKS9vO3JldHVybiBuJiZhLnJldmVyc2UoKSxhfSx0LnRpY2tJbmNyZW1lbnQ9Yix0LnRpY2tTdGVwPV8sdC50cmFuc3Bvc2U9QSx0LnZhcmlhbmNlPWwsdC56aXA9ZnVuY3Rpb24oKXtyZXR1cm4gQShhcmd1bWVudHMpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTY6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXtuKCJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9yOnQuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiByKHQscil7dmFyIG49bmV3IGU7aWYodCBpbnN0YW5jZW9mIGUpdC5lYWNoKChmdW5jdGlvbih0LGUpe24uc2V0KGUsdCl9KSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgaSxhPS0xLG89dC5sZW5ndGg7aWYobnVsbD09cilmb3IoOysrYTxvOyluLnNldChhLHRbYV0pO2Vsc2UgZm9yKDsrK2E8bzspbi5zZXQocihpPXRbYV0sYSx0KSxpKX1lbHNlIGlmKHQpZm9yKHZhciBzIGluIHQpbi5zZXQocyx0W3NdKTtyZXR1cm4gbn1mdW5jdGlvbiBuKCl7cmV0dXJue319ZnVuY3Rpb24gaSh0LGUscil7dFtlXT1yfWZ1bmN0aW9uIGEoKXtyZXR1cm4gcigpfWZ1bmN0aW9uIG8odCxlLHIpe3Quc2V0KGUscil9ZnVuY3Rpb24gcygpe31lLnByb3RvdHlwZT1yLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZSxoYXM6ZnVuY3Rpb24odCl7cmV0dXJuIiQiK3QgaW4gdGhpc30sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIit0XX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXNbIiQiK3RdPWUsdGhpc30scmVtb3ZlOmZ1bmN0aW9uKHQpe3ZhciBlPSIkIit0O3JldHVybiBlIGluIHRoaXMmJmRlbGV0ZSB0aGlzW2VdfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKSIkIj09PXRbMF0mJmRlbGV0ZSB0aGlzW3RdfSxrZXlzOmZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdC5wdXNoKGUuc2xpY2UoMSkpO3JldHVybiB0fSx2YWx1ZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2godGhpc1tlXSk7cmV0dXJuIHR9LGVudHJpZXM6ZnVuY3Rpb24oKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gdGhpcykiJCI9PT1lWzBdJiZ0LnB1c2goe2tleTplLnNsaWNlKDEpLHZhbHVlOnRoaXNbZV19KTtyZXR1cm4gdH0sc2l6ZTpmdW5jdGlvbigpe3ZhciB0PTA7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmKyt0O3JldHVybiB0fSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzKWlmKCIkIj09PXRbMF0pcmV0dXJuITE7cmV0dXJuITB9LGVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMpIiQiPT09ZVswXSYmdCh0aGlzW2VdLGUuc2xpY2UoMSksdGhpcyl9fTt2YXIgbD1yLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7dmFyIHI9bmV3IHM7aWYodCBpbnN0YW5jZW9mIHMpdC5lYWNoKChmdW5jdGlvbih0KXtyLmFkZCh0KX0pKTtlbHNlIGlmKHQpe3ZhciBuPS0xLGk9dC5sZW5ndGg7aWYobnVsbD09ZSlmb3IoOysrbjxpOylyLmFkZCh0W25dKTtlbHNlIGZvcig7KytuPGk7KXIuYWRkKGUodFtuXSxuLHQpKX1yZXR1cm4gcn1zLnByb3RvdHlwZT1jLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxoYXM6bC5oYXMsYWRkOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzWyIkIisodCs9IiIpXT10LHRoaXN9LHJlbW92ZTpsLnJlbW92ZSxjbGVhcjpsLmNsZWFyLHZhbHVlczpsLmtleXMsc2l6ZTpsLnNpemUsZW1wdHk6bC5lbXB0eSxlYWNoOmwuZWFjaH0sdC5uZXN0PWZ1bmN0aW9uKCl7dmFyIHQsZSxzLGw9W10sYz1bXTtmdW5jdGlvbiB1KG4saSxhLG8pe2lmKGk+PWwubGVuZ3RoKXJldHVybiBudWxsIT10JiZuLnNvcnQodCksbnVsbCE9ZT9lKG4pOm47Zm9yKHZhciBzLGMsZixoPS0xLHA9bi5sZW5ndGgsZD1sW2krK10sbT1yKCksZz1hKCk7KytoPHA7KShmPW0uZ2V0KHM9ZChjPW5baF0pKyIiKSk/Zi5wdXNoKGMpOm0uc2V0KHMsW2NdKTtyZXR1cm4gbS5lYWNoKChmdW5jdGlvbih0LGUpe28oZyxlLHUodCxpLGEsbykpfSkpLGd9cmV0dXJuIHM9e29iamVjdDpmdW5jdGlvbih0KXtyZXR1cm4gdSh0LDAsbixpKX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB1KHQsMCxhLG8pfSxlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbiB0KHIsbil7aWYoKytuPmwubGVuZ3RoKXJldHVybiByO3ZhciBpLGE9Y1tuLTFdO3JldHVybiBudWxsIT1lJiZuPj1sLmxlbmd0aD9pPXIuZW50cmllcygpOihpPVtdLHIuZWFjaCgoZnVuY3Rpb24oZSxyKXtpLnB1c2goe2tleTpyLHZhbHVlczp0KGUsbil9KX0pKSksbnVsbCE9YT9pLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodC5rZXksZS5rZXkpfSkpOml9KHUodCwwLGEsbyksMCl9LGtleTpmdW5jdGlvbih0KXtyZXR1cm4gbC5wdXNoKHQpLHN9LHNvcnRLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBjW2wubGVuZ3RoLTFdPXQsc30sc29ydFZhbHVlczpmdW5jdGlvbihlKXtyZXR1cm4gdD1lLHN9LHJvbGx1cDpmdW5jdGlvbih0KXtyZXR1cm4gZT10LHN9fX0sdC5zZXQ9Yyx0Lm1hcD1yLHQua2V5cz1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9LHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC5lbnRyaWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh7a2V5OnIsdmFsdWU6dFtyXX0pO3JldHVybiBlfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlLHIpe3QucHJvdG90eXBlPWUucHJvdG90eXBlPXIsci5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIHIodCxlKXt2YXIgcj1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKTtmb3IodmFyIG4gaW4gZSlyW25dPWVbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gbigpe312YXIgaT0iXFxzKihbKy1dP1xcZCspXFxzKiIsYT0iXFxzKihbKy1dP1xcZCpcXC4/XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixvPSJcXHMqKFsrLV0/XFxkKlxcLj9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixzPS9eIyhbMC05YS1mXXszLDh9KSQvLGw9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW2ksaSxpXSsiXFwpJCIpLGM9bmV3IFJlZ0V4cCgiXnJnYlxcKCIrW28sbyxvXSsiXFwpJCIpLHU9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tpLGksaSxhXSsiXFwpJCIpLGY9bmV3IFJlZ0V4cCgiXnJnYmFcXCgiK1tvLG8sbyxhXSsiXFwpJCIpLGg9bmV3IFJlZ0V4cCgiXmhzbFxcKCIrW2EsbyxvXSsiXFwpJCIpLHA9bmV3IFJlZ0V4cCgiXmhzbGFcXCgiK1thLG8sbyxhXSsiXFwpJCIpLGQ9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVyOjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQyMDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gbSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0aW9uIGcoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKX1mdW5jdGlvbiB2KHQpe3ZhciBlLHI7cmV0dXJuIHQ9KHQrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChlPXMuZXhlYyh0KSk/KHI9ZVsxXS5sZW5ndGgsZT1wYXJzZUludChlWzFdLDE2KSw2PT09cj95KGUpOjM9PT1yP25ldyB3KGU+PjgmMTV8ZT4+NCYyNDAsZT4+NCYxNXwyNDAmZSwoMTUmZSk8PDR8MTUmZSwxKTo4PT09cj94KGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsKDI1NSZlKS8yNTUpOjQ9PT1yP3goZT4+MTImMTV8ZT4+OCYyNDAsZT4+OCYxNXxlPj40JjI0MCxlPj40JjE1fDI0MCZlLCgoMTUmZSk8PDR8MTUmZSkvMjU1KTpudWxsKTooZT1sLmV4ZWModCkpP25ldyB3KGVbMV0sZVsyXSxlWzNdLDEpOihlPWMuZXhlYyh0KSk/bmV3IHcoMjU1KmVbMV0vMTAwLDI1NSplWzJdLzEwMCwyNTUqZVszXS8xMDAsMSk6KGU9dS5leGVjKHQpKT94KGVbMV0sZVsyXSxlWzNdLGVbNF0pOihlPWYuZXhlYyh0KSk/eCgyNTUqZVsxXS8xMDAsMjU1KmVbMl0vMTAwLDI1NSplWzNdLzEwMCxlWzRdKTooZT1oLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCwxKTooZT1wLmV4ZWModCkpP00oZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdKTpkLmhhc093blByb3BlcnR5KHQpP3koZFt0XSk6InRyYW5zcGFyZW50Ij09PXQ/bmV3IHcoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiB5KHQpe3JldHVybiBuZXcgdyh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQsMSl9ZnVuY3Rpb24geCh0LGUscixuKXtyZXR1cm4gbjw9MCYmKHQ9ZT1yPU5hTiksbmV3IHcodCxlLHIsbil9ZnVuY3Rpb24gYih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLHQ/bmV3IHcoKHQ9dC5yZ2IoKSkucix0LmcsdC5iLHQub3BhY2l0eSk6bmV3IHd9ZnVuY3Rpb24gXyh0LGUscixuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/Yih0KTpuZXcgdyh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gdyh0LGUscixuKXt0aGlzLnI9K3QsdGhpcy5nPStlLHRoaXMuYj0rcix0aGlzLm9wYWNpdHk9K259ZnVuY3Rpb24gVCgpe3JldHVybiIjIitBKHRoaXMucikrQSh0aGlzLmcpK0EodGhpcy5iKX1mdW5jdGlvbiBrKCl7dmFyIHQ9dGhpcy5vcGFjaXR5O3JldHVybigxPT09KHQ9aXNOYU4odCk/MTpNYXRoLm1heCgwLE1hdGgubWluKDEsdCkpKT8icmdiKCI6InJnYmEoIikrTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0aGlzLnIpfHwwKSkrIiwgIitNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKHRoaXMuZyl8fDApKSsiLCAiK01hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQodGhpcy5iKXx8MCkpKygxPT09dD8iKSI6IiwgIit0KyIpIil9ZnVuY3Rpb24gQSh0KXtyZXR1cm4oKHQ9TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCh0KXx8MCkpKTwxNj8iMCI6IiIpK3QudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIE0odCxlLHIsbil7cmV0dXJuIG48PTA/dD1lPXI9TmFOOnI8PTB8fHI+PTE/dD1lPU5hTjplPD0wJiYodD1OYU4pLG5ldyBMKHQsZSxyLG4pfWZ1bmN0aW9uIFModCl7aWYodCBpbnN0YW5jZW9mIEwpcmV0dXJuIG5ldyBMKHQuaCx0LnMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIG58fCh0PXYodCkpLCF0KXJldHVybiBuZXcgTDtpZih0IGluc3RhbmNlb2YgTClyZXR1cm4gdDt2YXIgZT0odD10LnJnYigpKS5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LGE9TWF0aC5taW4oZSxyLGkpLG89TWF0aC5tYXgoZSxyLGkpLHM9TmFOLGw9by1hLGM9KG8rYSkvMjtyZXR1cm4gbD8ocz1lPT09bz8oci1pKS9sKzYqKHI8aSk6cj09PW8/KGktZSkvbCsyOihlLXIpL2wrNCxsLz1jPC41P28rYToyLW8tYSxzKj02MCk6bD1jPjAmJmM8MT8wOnMsbmV3IEwocyxsLGMsdC5vcGFjaXR5KX1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9TKHQpOm5ldyBMKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBMKHQsZSxyLG4pe3RoaXMuaD0rdCx0aGlzLnM9K2UsdGhpcy5sPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBDKHQsZSxyKXtyZXR1cm4gMjU1Kih0PDYwP2UrKHItZSkqdC82MDp0PDE4MD9yOnQ8MjQwP2UrKHItZSkqKDI0MC10KS82MDplKX1lKG4sdix7Y29weTpmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLHQpfSxkaXNwbGF5YWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDptLGZvcm1hdEhleDptLGZvcm1hdEhzbDpmdW5jdGlvbigpe3JldHVybiBTKHRoaXMpLmZvcm1hdEhzbCgpfSxmb3JtYXRSZ2I6Zyx0b1N0cmluZzpnfSksZSh3LF8scihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgdyh0aGlzLnIqdCx0aGlzLmcqdCx0aGlzLmIqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZGlzcGxheWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRoaXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OlQsZm9ybWF0SGV4OlQsZm9ybWF0UmdiOmssdG9TdHJpbmc6a30pKSxlKEwsRSxyKG4se2JyaWdodGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/MS8uNzpNYXRoLnBvdygxLy43LHQpLG5ldyBMKHRoaXMuaCx0aGlzLnMsdGhpcy5sKnQsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiB0PW51bGw9PXQ/Ljc6TWF0aC5wb3coLjcsdCksbmV3IEwodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGU9aXNOYU4odCl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMscj10aGlzLmwsbj1yKyhyPC41P3I6MS1yKSplLGk9MipyLW47cmV0dXJuIG5ldyB3KEModD49MjQwP3QtMjQwOnQrMTIwLGksbiksQyh0LGksbiksQyh0PDEyMD90KzI0MDp0LTEyMCxpLG4pLHRoaXMub3BhY2l0eSl9LGRpc3BsYXlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuKDA8PXRoaXMucyYmdGhpcy5zPD0xfHxpc05hTih0aGlzLnMpKSYmMDw9dGhpcy5sJiZ0aGlzLmw8PTEmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxmb3JtYXRIc2w6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wYWNpdHk7cmV0dXJuKDE9PT0odD1pc05hTih0KT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSx0KSkpPyJoc2woIjoiaHNsYSgiKSsodGhpcy5ofHwwKSsiLCAiKzEwMCoodGhpcy5zfHwwKSsiJSwgIisxMDAqKHRoaXMubHx8MCkrIiUiKygxPT09dD8iKSI6IiwgIit0KyIpIil9fSkpO3ZhciBQPU1hdGguUEkvMTgwLEk9MTgwL01hdGguUEksTz02LzI5LHo9MypPKk87ZnVuY3Rpb24gRCh0KXtpZih0IGluc3RhbmNlb2YgRilyZXR1cm4gbmV3IEYodC5sLHQuYSx0LmIsdC5vcGFjaXR5KTtpZih0IGluc3RhbmNlb2YgcSlyZXR1cm4gRyh0KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGUscixuPVUodC5yKSxpPVUodC5nKSxhPVUodC5iKSxvPUIoKC4yMjI1MDQ1Km4rLjcxNjg3ODYqaSsuMDYwNjE2OSphKS8xKTtyZXR1cm4gbj09PWkmJmk9PT1hP2U9cj1vOihlPUIoKC40MzYwNzQ3Km4rLjM4NTA2NDkqaSsuMTQzMDgwNCphKS8uOTY0MjIpLHI9QigoLjAxMzkzMjIqbisuMDk3MTA0NSppKy43MTQxNzMzKmEpLy44MjUyMSkpLG5ldyBGKDExNipvLTE2LDUwMCooZS1vKSwyMDAqKG8tciksdC5vcGFjaXR5KX1mdW5jdGlvbiBSKHQsZSxyLG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9EKHQpOm5ldyBGKHQsZSxyLG51bGw9PW4/MTpuKX1mdW5jdGlvbiBGKHQsZSxyLG4pe3RoaXMubD0rdCx0aGlzLmE9K2UsdGhpcy5iPStyLHRoaXMub3BhY2l0eT0rbn1mdW5jdGlvbiBCKHQpe3JldHVybiB0Pi4wMDg4NTY0NTE2NzkwMzU2MzE/TWF0aC5wb3codCwxLzMpOnQveis0LzI5fWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQ+Tz90KnQqdDp6Kih0LTQvMjkpfWZ1bmN0aW9uIGoodCl7cmV0dXJuIDI1NSoodDw9LjAwMzEzMDg/MTIuOTIqdDoxLjA1NSpNYXRoLnBvdyh0LDEvMi40KS0uMDU1KX1mdW5jdGlvbiBVKHQpe3JldHVybih0Lz0yNTUpPD0uMDQwNDU/dC8xMi45MjpNYXRoLnBvdygodCsuMDU1KS8xLjA1NSwyLjQpfWZ1bmN0aW9uIFYodCl7aWYodCBpbnN0YW5jZW9mIHEpcmV0dXJuIG5ldyBxKHQuaCx0LmMsdC5sLHQub3BhY2l0eSk7aWYodCBpbnN0YW5jZW9mIEZ8fCh0PUQodCkpLDA9PT10LmEmJjA9PT10LmIpcmV0dXJuIG5ldyBxKE5hTiwwPHQubCYmdC5sPDEwMD8wOk5hTix0LmwsdC5vcGFjaXR5KTt2YXIgZT1NYXRoLmF0YW4yKHQuYix0LmEpKkk7cmV0dXJuIG5ldyBxKGU8MD9lKzM2MDplLE1hdGguc3FydCh0LmEqdC5hK3QuYip0LmIpLHQubCx0Lm9wYWNpdHkpfWZ1bmN0aW9uIEgodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEodCxlLHIsbnVsbD09bj8xOm4pfWZ1bmN0aW9uIHEodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMuYz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWZ1bmN0aW9uIEcodCl7aWYoaXNOYU4odC5oKSlyZXR1cm4gbmV3IEYodC5sLDAsMCx0Lm9wYWNpdHkpO3ZhciBlPXQuaCpQO3JldHVybiBuZXcgRih0LmwsTWF0aC5jb3MoZSkqdC5jLE1hdGguc2luKGUpKnQuYyx0Lm9wYWNpdHkpfWUoRixSLHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBGKHRoaXMubCsxOCoobnVsbD09dD8xOnQpLHRoaXMuYSx0aGlzLmIsdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgRih0aGlzLmwtMTgqKG51bGw9PXQ/MTp0KSx0aGlzLmEsdGhpcy5iLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3ZhciB0PSh0aGlzLmwrMTYpLzExNixlPWlzTmFOKHRoaXMuYSk/dDp0K3RoaXMuYS81MDAscj1pc05hTih0aGlzLmIpP3Q6dC10aGlzLmIvMjAwO3JldHVybiBuZXcgdyhqKDMuMTMzODU2MSooZT0uOTY0MjIqTihlKSktMS42MTY4NjY3Kih0PTEqTih0KSktLjQ5MDYxNDYqKHI9LjgyNTIxKk4ocikpKSxqKC0uOTc4NzY4NCplKzEuOTE2MTQxNSp0Ky4wMzM0NTQqciksaiguMDcxOTQ1MyplLS4yMjg5OTE0KnQrMS40MDUyNDI3KnIpLHRoaXMub3BhY2l0eSl9fSkpLGUocSxILHIobix7YnJpZ2h0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBxKHRoaXMuaCx0aGlzLmMsdGhpcy5sKzE4KihudWxsPT10PzE6dCksdGhpcy5vcGFjaXR5KX0sZGFya2VyOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcSh0aGlzLmgsdGhpcy5jLHRoaXMubC0xOCoobnVsbD09dD8xOnQpLHRoaXMub3BhY2l0eSl9LHJnYjpmdW5jdGlvbigpe3JldHVybiBHKHRoaXMpLnJnYigpfX0pKTt2YXIgWT0tLjE0ODYxLFc9MS43ODI3NyxYPS0uMjkyMjcsWj0tLjkwNjQ5LEo9MS45NzI5NCxLPUoqWixRPUoqVywkPVcqWC1aKlk7ZnVuY3Rpb24gdHQodCl7aWYodCBpbnN0YW5jZW9mIHJ0KXJldHVybiBuZXcgcnQodC5oLHQucyx0LmwsdC5vcGFjaXR5KTt0IGluc3RhbmNlb2Ygd3x8KHQ9Yih0KSk7dmFyIGU9dC5yLzI1NSxyPXQuZy8yNTUsbj10LmIvMjU1LGk9KCQqbitLKmUtUSpyKS8oJCtLLVEpLGE9bi1pLG89KEoqKHItaSktWCphKS9aLHM9TWF0aC5zcXJ0KG8qbythKmEpLyhKKmkqKDEtaSkpLGw9cz9NYXRoLmF0YW4yKG8sYSkqSS0xMjA6TmFOO3JldHVybiBuZXcgcnQobDwwP2wrMzYwOmwscyxpLHQub3BhY2l0eSl9ZnVuY3Rpb24gZXQodCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3R0KHQpOm5ldyBydCh0LGUscixudWxsPT1uPzE6bil9ZnVuY3Rpb24gcnQodCxlLHIsbil7dGhpcy5oPSt0LHRoaXMucz0rZSx0aGlzLmw9K3IsdGhpcy5vcGFjaXR5PStufWUocnQsZXQscihuLHticmlnaHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdD1udWxsPT10PzEvLjc6TWF0aC5wb3coMS8uNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxkYXJrZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bnVsbD09dD8uNzpNYXRoLnBvdyguNyx0KSxuZXcgcnQodGhpcy5oLHRoaXMucyx0aGlzLmwqdCx0aGlzLm9wYWNpdHkpfSxyZ2I6ZnVuY3Rpb24oKXt2YXIgdD1pc05hTih0aGlzLmgpPzA6KHRoaXMuaCsxMjApKlAsZT0rdGhpcy5sLHI9aXNOYU4odGhpcy5zKT8wOnRoaXMucyplKigxLWUpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KTtyZXR1cm4gbmV3IHcoMjU1KihlK3IqKFkqbitXKmkpKSwyNTUqKGUrciooWCpuK1oqaSkpLDI1NSooZStyKihKKm4pKSx0aGlzLm9wYWNpdHkpfX0pKSx0LmNvbG9yPXYsdC5jdWJlaGVsaXg9ZXQsdC5ncmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBGKHQsMCwwLG51bGw9PWU/MTplKX0sdC5oY2w9SCx0LmhzbD1FLHQubGFiPVIsdC5sY2g9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP1YodCk6bmV3IHEocixlLHQsbnVsbD09bj8xOm4pfSx0LnJnYj1fLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE1ODpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGU9e3ZhbHVlOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gcigpe2Zvcih2YXIgdCxlPTAscj1hcmd1bWVudHMubGVuZ3RoLGk9e307ZTxyOysrZSl7aWYoISh0PWFyZ3VtZW50c1tlXSsiIil8fHQgaW4gaXx8L1tccy5dLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK3QpO2lbdF09W119cmV0dXJuIG5ldyBuKGkpfWZ1bmN0aW9uIG4odCl7dGhpcy5fPXR9ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0LnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPSIiLG49dC5pbmRleE9mKCIuIik7aWYobj49MCYmKHI9dC5zbGljZShuKzEpLHQ9dC5zbGljZSgwLG4pKSx0JiYhZS5oYXNPd25Qcm9wZXJ0eSh0KSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIit0KTtyZXR1cm57dHlwZTp0LG5hbWU6cn19KSl9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcixuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWlmKChyPXRbbl0pLm5hbWU9PT1lKXJldHVybiByLnZhbHVlfWZ1bmN0aW9uIG8odCxyLG4pe2Zvcih2YXIgaT0wLGE9dC5sZW5ndGg7aTxhOysraSlpZih0W2ldLm5hbWU9PT1yKXt0W2ldPWUsdD10LnNsaWNlKDAsaSkuY29uY2F0KHQuc2xpY2UoaSsxKSk7YnJlYWt9cmV0dXJuIG51bGwhPW4mJnQucHVzaCh7bmFtZTpyLHZhbHVlOm59KSx0fW4ucHJvdG90eXBlPXIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpuLG9uOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLl8scz1pKHQrIiIsbiksbD0tMSxjPXMubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7aWYobnVsbCE9ZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbGxiYWNrOiAiK2UpO2Zvcig7KytsPGM7KWlmKHI9KHQ9c1tsXSkudHlwZSluW3JdPW8obltyXSx0Lm5hbWUsZSk7ZWxzZSBpZihudWxsPT1lKWZvcihyIGluIG4pbltyXT1vKG5bcl0sdC5uYW1lLG51bGwpO3JldHVybiB0aGlzfWZvcig7KytsPGM7KWlmKChyPSh0PXNbbF0pLnR5cGUpJiYocj1hKG5bcl0sdC5uYW1lKSkpcmV0dXJuIHJ9LGNvcHk6ZnVuY3Rpb24oKXt2YXIgdD17fSxlPXRoaXMuXztmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl0uc2xpY2UoKTtyZXR1cm4gbmV3IG4odCl9LGNhbGw6ZnVuY3Rpb24odCxlKXtpZigocj1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciByLG4saT1uZXcgQXJyYXkociksYT0wO2E8cjsrK2EpaVthXT1hcmd1bWVudHNbYSsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KHQpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK3QpO2ZvcihhPTAscj0obj10aGlzLl9bdF0pLmxlbmd0aDthPHI7KythKW5bYV0udmFsdWUuYXBwbHkoZSxpKX0sYXBwbHk6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkodCkpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrdCk7Zm9yKHZhciBuPXRoaXMuX1t0XSxpPTAsYT1uLmxlbmd0aDtpPGE7KytpKW5baV0udmFsdWUuYXBwbHkoZSxyKX19LHQuZGlzcGF0Y2g9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNTk6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXF1YWR0cmVlIiksdCgiZDMtY29sbGVjdGlvbiIpLHQoImQzLWRpc3BhdGNoIiksdCgiZDMtdGltZXIiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyxuLmQzLG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUscixuLGkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKCl7cmV0dXJuIDFlLTYqKE1hdGgucmFuZG9tKCktLjUpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQueCt0LnZ4fWZ1bmN0aW9uIGwodCl7cmV0dXJuIHQueSt0LnZ5fWZ1bmN0aW9uIGModCl7cmV0dXJuIHQuaW5kZXh9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPXQuZ2V0KGUpO2lmKCFyKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIitlKTtyZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdC55fXZhciBwPU1hdGguUEkqKDMtTWF0aC5zcXJ0KDUpKTt0LmZvcmNlQ2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbigpe3ZhciBuLGksYT1yLmxlbmd0aCxvPTAscz0wO2ZvcihuPTA7bjxhOysrbilvKz0oaT1yW25dKS54LHMrPWkueTtmb3Iobz1vL2EtdCxzPXMvYS1lLG49MDtuPGE7KytuKShpPXJbbl0pLngtPW8saS55LT1zfXJldHVybiBudWxsPT10JiYodD0wKSxudWxsPT1lJiYoZT0wKSxuLmluaXRpYWxpemU9ZnVuY3Rpb24odCl7cj10fSxuLng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9K2Usbik6dH0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0LG4pOmV9LG59LHQuZm9yY2VDb2xsaWRlPWZ1bmN0aW9uKHQpe3ZhciByLG4saT0xLGM9MTtmdW5jdGlvbiB1KCl7Zm9yKHZhciB0LGEsdSxoLHAsZCxtLGc9ci5sZW5ndGgsdj0wO3Y8YzsrK3YpZm9yKGE9ZS5xdWFkdHJlZShyLHMsbCkudmlzaXRBZnRlcihmKSx0PTA7dDxnOysrdCl1PXJbdF0sZD1uW3UuaW5kZXhdLG09ZCpkLGg9dS54K3UudngscD11LnkrdS52eSxhLnZpc2l0KHkpO2Z1bmN0aW9uIHkodCxlLHIsbixhKXt2YXIgcz10LmRhdGEsbD10LnIsYz1kK2w7aWYoIXMpcmV0dXJuIGU+aCtjfHxuPGgtY3x8cj5wK2N8fGE8cC1jO2lmKHMuaW5kZXg+dS5pbmRleCl7dmFyIGY9aC1zLngtcy52eCxnPXAtcy55LXMudnksdj1mKmYrZypnO3Y8YypjJiYoMD09PWYmJih2Kz0oZj1vKCkpKmYpLDA9PT1nJiYodis9KGc9bygpKSpnKSx2PShjLSh2PU1hdGguc3FydCh2KSkpL3YqaSx1LnZ4Kz0oZio9dikqKGM9KGwqPWwpLyhtK2wpKSx1LnZ5Kz0oZyo9dikqYyxzLnZ4LT1mKihjPTEtYykscy52eS09ZypjKX19fWZ1bmN0aW9uIGYodCl7aWYodC5kYXRhKXJldHVybiB0LnI9blt0LmRhdGEuaW5kZXhdO2Zvcih2YXIgZT10LnI9MDtlPDQ7KytlKXRbZV0mJnRbZV0ucj50LnImJih0LnI9dFtlXS5yKX1mdW5jdGlvbiBoKCl7aWYocil7dmFyIGUsaSxhPXIubGVuZ3RoO2ZvcihuPW5ldyBBcnJheShhKSxlPTA7ZTxhOysrZSlpPXJbZV0sbltpLmluZGV4XT0rdChpLGUscil9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MTordCkpLHUuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtyPXQsaCgpfSx1Lml0ZXJhdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9K3QsdSk6Y30sdS5zdHJlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdCx1KTppfSx1LnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLGgoKSx1KTp0fSx1fSx0LmZvcmNlTGluaz1mdW5jdGlvbih0KXt2YXIgZSxuLGkscyxsLGY9YyxoPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGgubWluKHNbdC5zb3VyY2UuaW5kZXhdLHNbdC50YXJnZXQuaW5kZXhdKX0scD1hKDMwKSxkPTE7ZnVuY3Rpb24gbShyKXtmb3IodmFyIGk9MCxhPXQubGVuZ3RoO2k8ZDsrK2kpZm9yKHZhciBzLGMsdSxmLGgscCxtLGc9MDtnPGE7KytnKWM9KHM9dFtnXSkuc291cmNlLGY9KHU9cy50YXJnZXQpLngrdS52eC1jLngtYy52eHx8bygpLGg9dS55K3UudnktYy55LWMudnl8fG8oKSxmKj1wPSgocD1NYXRoLnNxcnQoZipmK2gqaCkpLW5bZ10pL3AqciplW2ddLGgqPXAsdS52eC09ZioobT1sW2ddKSx1LnZ5LT1oKm0sYy52eCs9ZioobT0xLW0pLGMudnkrPWgqbX1mdW5jdGlvbiBnKCl7aWYoaSl7dmFyIGEsbyxjPWkubGVuZ3RoLGg9dC5sZW5ndGgscD1yLm1hcChpLGYpO2ZvcihhPTAscz1uZXcgQXJyYXkoYyk7YTxoOysrYSkobz10W2FdKS5pbmRleD1hLCJvYmplY3QiIT10eXBlb2Ygby5zb3VyY2UmJihvLnNvdXJjZT11KHAsby5zb3VyY2UpKSwib2JqZWN0IiE9dHlwZW9mIG8udGFyZ2V0JiYoby50YXJnZXQ9dShwLG8udGFyZ2V0KSksc1tvLnNvdXJjZS5pbmRleF09KHNbby5zb3VyY2UuaW5kZXhdfHwwKSsxLHNbby50YXJnZXQuaW5kZXhdPShzW28udGFyZ2V0LmluZGV4XXx8MCkrMTtmb3IoYT0wLGw9bmV3IEFycmF5KGgpO2E8aDsrK2Epbz10W2FdLGxbYV09c1tvLnNvdXJjZS5pbmRleF0vKHNbby5zb3VyY2UuaW5kZXhdK3Nbby50YXJnZXQuaW5kZXhdKTtlPW5ldyBBcnJheShoKSx2KCksbj1uZXcgQXJyYXkoaCkseSgpfX1mdW5jdGlvbiB2KCl7aWYoaSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZVtyXT0raCh0W3JdLHIsdCl9ZnVuY3Rpb24geSgpe2lmKGkpZm9yKHZhciBlPTAscj10Lmxlbmd0aDtlPHI7KytlKW5bZV09K3AodFtlXSxlLHQpfXJldHVybiBudWxsPT10JiYodD1bXSksbS5pbml0aWFsaXplPWZ1bmN0aW9uKHQpe2k9dCxnKCl9LG0ubGlua3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxnKCksbSk6dH0sbS5pZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj10LG0pOmZ9LG0uaXRlcmF0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdCxtKTpkfSxtLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksdigpLG0pOmh9LG0uZGlzdGFuY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDphKCt0KSx5KCksbSk6cH0sbX0sdC5mb3JjZU1hbnlCb2R5PWZ1bmN0aW9uKCl7dmFyIHQscixuLGkscz1hKC0zMCksbD0xLGM9MS8wLHU9LjgxO2Z1bmN0aW9uIHAoaSl7dmFyIGEsbz10Lmxlbmd0aCxzPWUucXVhZHRyZWUodCxmLGgpLnZpc2l0QWZ0ZXIobSk7Zm9yKG49aSxhPTA7YTxvOysrYSlyPXRbYV0scy52aXNpdChnKX1mdW5jdGlvbiBkKCl7aWYodCl7dmFyIGUscixuPXQubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShuKSxlPTA7ZTxuOysrZSlyPXRbZV0saVtyLmluZGV4XT0rcyhyLGUsdCl9fWZ1bmN0aW9uIG0odCl7dmFyIGUscixuLGEsbyxzPTAsbD0wO2lmKHQubGVuZ3RoKXtmb3Iobj1hPW89MDtvPDQ7KytvKShlPXRbb10pJiYocj1NYXRoLmFicyhlLnZhbHVlKSkmJihzKz1lLnZhbHVlLGwrPXIsbis9ciplLngsYSs9ciplLnkpO3QueD1uL2wsdC55PWEvbH1lbHNleyhlPXQpLng9ZS5kYXRhLngsZS55PWUuZGF0YS55O2Rve3MrPWlbZS5kYXRhLmluZGV4XX13aGlsZShlPWUubmV4dCl9dC52YWx1ZT1zfWZ1bmN0aW9uIGcodCxlLGEscyl7aWYoIXQudmFsdWUpcmV0dXJuITA7dmFyIGY9dC54LXIueCxoPXQueS1yLnkscD1zLWUsZD1mKmYraCpoO2lmKHAqcC91PGQpcmV0dXJuIGQ8YyYmKDA9PT1mJiYoZCs9KGY9bygpKSpmKSwwPT09aCYmKGQrPShoPW8oKSkqaCksZDxsJiYoZD1NYXRoLnNxcnQobCpkKSksci52eCs9Zip0LnZhbHVlKm4vZCxyLnZ5Kz1oKnQudmFsdWUqbi9kKSwhMDtpZighKHQubGVuZ3RofHxkPj1jKSl7KHQuZGF0YSE9PXJ8fHQubmV4dCkmJigwPT09ZiYmKGQrPShmPW8oKSkqZiksMD09PWgmJihkKz0oaD1vKCkpKmgpLGQ8bCYmKGQ9TWF0aC5zcXJ0KGwqZCkpKTtkb3t0LmRhdGEhPT1yJiYocD1pW3QuZGF0YS5pbmRleF0qbi9kLHIudngrPWYqcCxyLnZ5Kz1oKnApfXdoaWxlKHQ9dC5uZXh0KX19cmV0dXJuIHAuaW5pdGlhbGl6ZT1mdW5jdGlvbihlKXt0PWUsZCgpfSxwLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksZCgpLHApOnN9LHAuZGlzdGFuY2VNaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGw9dCp0LHApOk1hdGguc3FydChsKX0scC5kaXN0YW5jZU1heD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10KnQscCk6TWF0aC5zcXJ0KGMpfSxwLnRoZXRhPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQqdCxwKTpNYXRoLnNxcnQodSl9LHB9LHQuZm9yY2VSYWRpYWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzPWEoLjEpO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBhPTAscz1uLmxlbmd0aDthPHM7KythKXt2YXIgbD1uW2FdLGM9bC54LWV8fDFlLTYsdT1sLnktcnx8MWUtNixmPU1hdGguc3FydChjKmMrdSp1KSxoPShvW2FdLWYpKmlbYV0qdC9mO2wudngrPWMqaCxsLnZ5Kz11Kmh9fWZ1bmN0aW9uIGMoKXtpZihuKXt2YXIgZSxyPW4ubGVuZ3RoO2ZvcihpPW5ldyBBcnJheShyKSxvPW5ldyBBcnJheShyKSxlPTA7ZTxyOysrZSlvW2VdPSt0KG5bZV0sZSxuKSxpW2VdPWlzTmFOKG9bZV0pPzA6K3MobltlXSxlLG4pfX1yZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdCYmKHQ9YSgrdCkpLG51bGw9PWUmJihlPTApLG51bGw9PXImJihyPTApLGwuaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtuPXQsYygpfSxsLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCksYygpLGwpOnN9LGwucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6YSgrZSksYygpLGwpOnR9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT0rdCxsKTplfSxsLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsbCk6cn0sbH0sdC5mb3JjZVNpbXVsYXRpb249ZnVuY3Rpb24odCl7dmFyIGUsYT0xLG89LjAwMSxzPTEtTWF0aC5wb3cobywxLzMwMCksbD0wLGM9LjYsdT1yLm1hcCgpLGY9aS50aW1lcihkKSxoPW4uZGlzcGF0Y2goInRpY2siLCJlbmQiKTtmdW5jdGlvbiBkKCl7bSgpLGguY2FsbCgidGljayIsZSksYTxvJiYoZi5zdG9wKCksaC5jYWxsKCJlbmQiLGUpKX1mdW5jdGlvbiBtKHIpe3ZhciBuLGksbz10Lmxlbmd0aDt2b2lkIDA9PT1yJiYocj0xKTtmb3IodmFyIGY9MDtmPHI7KytmKWZvcihhKz0obC1hKSpzLHUuZWFjaCgoZnVuY3Rpb24odCl7dChhKX0pKSxuPTA7bjxvOysrbiludWxsPT0oaT10W25dKS5meD9pLngrPWkudngqPWM6KGkueD1pLmZ4LGkudng9MCksbnVsbD09aS5meT9pLnkrPWkudnkqPWM6KGkueT1pLmZ5LGkudnk9MCk7cmV0dXJuIGV9ZnVuY3Rpb24gZygpe2Zvcih2YXIgZSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKXtpZigoZT10W3JdKS5pbmRleD1yLG51bGwhPWUuZngmJihlLng9ZS5meCksbnVsbCE9ZS5meSYmKGUueT1lLmZ5KSxpc05hTihlLngpfHxpc05hTihlLnkpKXt2YXIgaT0xMCpNYXRoLnNxcnQociksYT1yKnA7ZS54PWkqTWF0aC5jb3MoYSksZS55PWkqTWF0aC5zaW4oYSl9KGlzTmFOKGUudngpfHxpc05hTihlLnZ5KSkmJihlLnZ4PWUudnk9MCl9fWZ1bmN0aW9uIHYoZSl7cmV0dXJuIGUuaW5pdGlhbGl6ZSYmZS5pbml0aWFsaXplKHQpLGV9cmV0dXJuIG51bGw9PXQmJih0PVtdKSxnKCksZT17dGljazptLHJlc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZi5yZXN0YXJ0KGQpLGV9LHN0b3A6ZnVuY3Rpb24oKXtyZXR1cm4gZi5zdG9wKCksZX0sbm9kZXM6ZnVuY3Rpb24ocil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9cixnKCksdS5lYWNoKHYpLGUpOnR9LGFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSt0LGUpOmF9LGFscGhhTWluOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSt0LGUpOm99LGFscGhhRGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9K3QsZSk6K3N9LGFscGhhVGFyZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0LGUpOmx9LHZlbG9jaXR5RGVjYXk6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9MS10LGUpOjEtY30sZm9yY2U6ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhudWxsPT1yP3UucmVtb3ZlKHQpOnUuc2V0KHQsdihyKSksZSk6dS5nZXQodCl9LGZpbmQ6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzLGwsYz0wLHU9dC5sZW5ndGg7Zm9yKG51bGw9PW4/bj0xLzA6bio9bixjPTA7Yzx1OysrYykobz0oaT1lLShzPXRbY10pLngpKmkrKGE9ci1zLnkpKmEpPG4mJihsPXMsbj1vKTtyZXR1cm4gbH0sb246ZnVuY3Rpb24odCxyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xPyhoLm9uKHQsciksZSk6aC5vbih0KX19fSx0LmZvcmNlWD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ4Kz0oblthXS1pLngpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSx0LmZvcmNlWT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saT1hKC4xKTtmdW5jdGlvbiBvKHQpe2Zvcih2YXIgaSxhPTAsbz1lLmxlbmd0aDthPG87KythKShpPWVbYV0pLnZ5Kz0oblthXS1pLnkpKnJbYV0qdH1mdW5jdGlvbiBzKCl7aWYoZSl7dmFyIGEsbz1lLmxlbmd0aDtmb3Iocj1uZXcgQXJyYXkobyksbj1uZXcgQXJyYXkobyksYT0wO2E8bzsrK2EpclthXT1pc05hTihuW2FdPSt0KGVbYV0sYSxlKSk/MDoraShlW2FdLGEsZSl9fXJldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0JiYodD1hKG51bGw9PXQ/MDordCkpLG8uaW5pdGlhbGl6ZT1mdW5jdGlvbih0KXtlPXQscygpfSxvLnN0cmVuZ3RoPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6YSgrdCkscygpLG8pOml9LG8ueT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOmEoK2UpLHMoKSxvKTp0fSxvfSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtY29sbGVjdGlvbiI6MTU2LCJkMy1kaXNwYXRjaCI6MTU4LCJkMy1xdWFkdHJlZSI6MTY2LCJkMy10aW1lciI6MTcwfV0sMTYwOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSl7aWYoKHI9KHQ9ZT90LnRvRXhwb25lbnRpYWwoZS0xKTp0LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciByLG49dC5zbGljZSgwLHIpO3JldHVybltuLmxlbmd0aD4xP25bMF0rbi5zbGljZSgyKTpuLCt0LnNsaWNlKHIrMSldfWZ1bmN0aW9uIHIodCl7cmV0dXJuKHQ9ZShNYXRoLmFicyh0KSkpP3RbMV06TmFOfXZhciBuLGk9L14oPzooLik/KFs8Pj1eXSkpPyhbK1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24gYSh0KXtpZighKGU9aS5leGVjKHQpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK3QpO3ZhciBlO3JldHVybiBuZXcgbyh7ZmlsbDplWzFdLGFsaWduOmVbMl0sc2lnbjplWzNdLHN5bWJvbDplWzRdLHplcm86ZVs1XSx3aWR0aDplWzZdLGNvbW1hOmVbN10scHJlY2lzaW9uOmVbOF0mJmVbOF0uc2xpY2UoMSksdHJpbTplWzldLHR5cGU6ZVsxMF19KX1mdW5jdGlvbiBvKHQpe3RoaXMuZmlsbD12b2lkIDA9PT10LmZpbGw/IiAiOnQuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PXQuYWxpZ24/Ij4iOnQuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PXQuc2lnbj8iLSI6dC5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PXQuc3ltYm9sPyIiOnQuc3ltYm9sKyIiLHRoaXMuemVybz0hIXQuemVybyx0aGlzLndpZHRoPXZvaWQgMD09PXQud2lkdGg/dm9pZCAwOit0LndpZHRoLHRoaXMuY29tbWE9ISF0LmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PXQucHJlY2lzaW9uP3ZvaWQgMDordC5wcmVjaXNpb24sdGhpcy50cmltPSEhdC50cmltLHRoaXMudHlwZT12b2lkIDA9PT10LnR5cGU/IiI6dC50eXBlKyIifWZ1bmN0aW9uIHModCxyKXt2YXIgbj1lKHQscik7aWYoIW4pcmV0dXJuIHQrIiI7dmFyIGk9blswXSxhPW5bMV07cmV0dXJuIGE8MD8iMC4iK25ldyBBcnJheSgtYSkuam9pbigiMCIpK2k6aS5sZW5ndGg+YSsxP2kuc2xpY2UoMCxhKzEpKyIuIitpLnNsaWNlKGErMSk6aStuZXcgQXJyYXkoYS1pLmxlbmd0aCsyKS5qb2luKCIwIil9YS5wcm90b3R5cGU9by5wcm90b3R5cGUsby5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAiOiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBlfTt2YXIgbD17IiUiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEwMCp0KS50b0ZpeGVkKGUpfSxiOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKHQpLnRvU3RyaW5nKDIpfSxjOmZ1bmN0aW9uKHQpe3JldHVybiB0KyIifSxkOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmFicyh0PU1hdGgucm91bmQodCkpPj0xZTIxP3QudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTp0LnRvU3RyaW5nKDEwKX0sZTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnRvRXhwb25lbnRpYWwoZSl9LGY6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50b0ZpeGVkKGUpfSxnOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudG9QcmVjaXNpb24oZSl9LG86ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQodCkudG9TdHJpbmcoOCl9LHA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcygxMDAqdCxlKX0scjpzLHM6ZnVuY3Rpb24odCxyKXt2YXIgaT1lKHQscik7aWYoIWkpcmV0dXJuIHQrIiI7dmFyIGE9aVswXSxvPWlbMV0scz1vLShuPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKG8vMykpKSkrMSxsPWEubGVuZ3RoO3JldHVybiBzPT09bD9hOnM+bD9hK25ldyBBcnJheShzLWwrMSkuam9pbigiMCIpOnM+MD9hLnNsaWNlKDAscykrIi4iK2Euc2xpY2Uocyk6IjAuIituZXcgQXJyYXkoMS1zKS5qb2luKCIwIikrZSh0LE1hdGgubWF4KDAscitzLTEpKVswXX0sWDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0seDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCh0KS50b1N0cmluZygxNil9fTtmdW5jdGlvbiBjKHQpe3JldHVybiB0fXZhciB1LGY9QXJyYXkucHJvdG90eXBlLm1hcCxoPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdO2Z1bmN0aW9uIHAodCl7dmFyIGUsaSxvPXZvaWQgMD09PXQuZ3JvdXBpbmd8fHZvaWQgMD09PXQudGhvdXNhbmRzP2M6KGU9Zi5jYWxsKHQuZ3JvdXBpbmcsTnVtYmVyKSxpPXQudGhvdXNhbmRzKyIiLGZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPXQubGVuZ3RoLGE9W10sbz0wLHM9ZVswXSxsPTA7bj4wJiZzPjAmJihsK3MrMT5yJiYocz1NYXRoLm1heCgxLHItbCkpLGEucHVzaCh0LnN1YnN0cmluZyhuLT1zLG4rcykpLCEoKGwrPXMrMSk+cikpOylzPWVbbz0obysxKSVlLmxlbmd0aF07cmV0dXJuIGEucmV2ZXJzZSgpLmpvaW4oaSl9KSxzPXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVswXSsiIix1PXZvaWQgMD09PXQuY3VycmVuY3k/IiI6dC5jdXJyZW5jeVsxXSsiIixwPXZvaWQgMD09PXQuZGVjaW1hbD8iLiI6dC5kZWNpbWFsKyIiLGQ9dm9pZCAwPT09dC5udW1lcmFscz9jOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bMC05XS9nLChmdW5jdGlvbihlKXtyZXR1cm4gdFsrZV19KSl9fShmLmNhbGwodC5udW1lcmFscyxTdHJpbmcpKSxtPXZvaWQgMD09PXQucGVyY2VudD8iJSI6dC5wZXJjZW50KyIiLGc9dm9pZCAwPT09dC5taW51cz8iLSI6dC5taW51cysiIix2PXZvaWQgMD09PXQubmFuPyJOYU4iOnQubmFuKyIiO2Z1bmN0aW9uIHkodCl7dmFyIGU9KHQ9YSh0KSkuZmlsbCxyPXQuYWxpZ24saT10LnNpZ24sYz10LnN5bWJvbCxmPXQuemVybyx5PXQud2lkdGgseD10LmNvbW1hLGI9dC5wcmVjaXNpb24sXz10LnRyaW0sdz10LnR5cGU7Im4iPT09dz8oeD0hMCx3PSJnIik6bFt3XXx8KHZvaWQgMD09PWImJihiPTEyKSxfPSEwLHc9ImciKSwoZnx8IjAiPT09ZSYmIj0iPT09cikmJihmPSEwLGU9IjAiLHI9Ij0iKTt2YXIgVD0iJCI9PT1jP3M6IiMiPT09YyYmL1tib3hYXS8udGVzdCh3KT8iMCIrdy50b0xvd2VyQ2FzZSgpOiIiLGs9IiQiPT09Yz91Oi9bJXBdLy50ZXN0KHcpP206IiIsQT1sW3ddLE09L1tkZWZncHJzJV0vLnRlc3Qodyk7ZnVuY3Rpb24gUyh0KXt2YXIgYSxzLGwsYz1ULHU9aztpZigiYyI9PT13KXU9QSh0KSt1LHQ9IiI7ZWxzZXt2YXIgbT0odD0rdCk8MHx8MS90PDA7aWYodD1pc05hTih0KT92OkEoTWF0aC5hYnModCksYiksXyYmKHQ9ZnVuY3Rpb24odCl7dDpmb3IodmFyIGUscj10Lmxlbmd0aCxuPTEsaT0tMTtuPHI7KytuKXN3aXRjaCh0W25dKXtjYXNlIi4iOmk9ZT1uO2JyZWFrO2Nhc2UiMCI6MD09PWkmJihpPW4pLGU9bjticmVhaztkZWZhdWx0OmlmKCErdFtuXSlicmVhayB0O2k+MCYmKGk9MCl9cmV0dXJuIGk+MD90LnNsaWNlKDAsaSkrdC5zbGljZShlKzEpOnR9KHQpKSxtJiYwPT0rdCYmIisiIT09aSYmKG09ITEpLGM9KG0/IigiPT09aT9pOmc6Ii0iPT09aXx8IigiPT09aT8iIjppKStjLHU9KCJzIj09PXc/aFs4K24vM106IiIpK3UrKG0mJiIoIj09PWk/IikiOiIiKSxNKWZvcihhPS0xLHM9dC5sZW5ndGg7KythPHM7KWlmKDQ4PihsPXQuY2hhckNvZGVBdChhKSl8fGw+NTcpe3U9KDQ2PT09bD9wK3Quc2xpY2UoYSsxKTp0LnNsaWNlKGEpKSt1LHQ9dC5zbGljZSgwLGEpO2JyZWFrfX14JiYhZiYmKHQ9byh0LDEvMCkpO3ZhciBTPWMubGVuZ3RoK3QubGVuZ3RoK3UubGVuZ3RoLEU9Uzx5P25ldyBBcnJheSh5LVMrMSkuam9pbihlKToiIjtzd2l0Y2goeCYmZiYmKHQ9byhFK3QsRS5sZW5ndGg/eS11Lmxlbmd0aDoxLzApLEU9IiIpLHIpe2Nhc2UiPCI6dD1jK3QrdStFO2JyZWFrO2Nhc2UiPSI6dD1jK0UrdCt1O2JyZWFrO2Nhc2UiXiI6dD1FLnNsaWNlKDAsUz1FLmxlbmd0aD4+MSkrYyt0K3UrRS5zbGljZShTKTticmVhaztkZWZhdWx0OnQ9RStjK3QrdX1yZXR1cm4gZCh0KX1yZXR1cm4gYj12b2lkIDA9PT1iPzY6L1tncHJzXS8udGVzdCh3KT9NYXRoLm1heCgxLE1hdGgubWluKDIxLGIpKTpNYXRoLm1heCgwLE1hdGgubWluKDIwLGIpKSxTLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHQrIiJ9LFN9cmV0dXJue2Zvcm1hdDp5LGZvcm1hdFByZWZpeDpmdW5jdGlvbih0LGUpe3ZhciBuPXkoKCh0PWEodCkpLnR5cGU9ImYiLHQpKSxpPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKSxvPU1hdGgucG93KDEwLC1pKSxzPWhbOCtpLzNdO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gbihvKnQpK3N9fX19ZnVuY3Rpb24gZChlKXtyZXR1cm4gdT1wKGUpLHQuZm9ybWF0PXUuZm9ybWF0LHQuZm9ybWF0UHJlZml4PXUuZm9ybWF0UHJlZml4LHV9ZCh7ZGVjaW1hbDoiLiIsdGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl0sbWludXM6Ii0ifSksdC5Gb3JtYXRTcGVjaWZpZXI9byx0LmZvcm1hdERlZmF1bHRMb2NhbGU9ZCx0LmZvcm1hdExvY2FsZT1wLHQuZm9ybWF0U3BlY2lmaWVyPWEsdC5wcmVjaXNpb25GaXhlZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCwtcihNYXRoLmFicyh0KSkpfSx0LnByZWNpc2lvblByZWZpeD1mdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCgwLDMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKHIoZSkvMykpKS1yKE1hdGguYWJzKHQpKSl9LHQucHJlY2lzaW9uUm91bmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1NYXRoLmFicyh0KSxlPU1hdGguYWJzKGUpLXQsTWF0aC5tYXgoMCxyKGUpLXIodCkpKzF9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2MTpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtZ2VvIiksdCgiZDMtYXJyYXkiKSk6aShuLmQzPW4uZDN8fHt9LG4uZDMsbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4sYT1NYXRoLmF0YW4yLG89TWF0aC5jb3Mscz1NYXRoLmV4cCxsPU1hdGguZmxvb3IsYz1NYXRoLmxvZyx1PU1hdGgubWF4LGY9TWF0aC5taW4saD1NYXRoLnBvdyxwPU1hdGgucm91bmQsZD1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH0sbT1NYXRoLnNpbixnPU1hdGgudGFuLHY9MWUtNix5PU1hdGguUEkseD15LzIsYj15LzQsXz1NYXRoLlNRUlQxXzIsdz1MKDIpLFQ9TCh5KSxrPTIqeSxBPTE4MC95LE09eS8xODA7ZnVuY3Rpb24gUyh0KXtyZXR1cm4gdD4xP3g6dDwtMT8teDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdD4xPzA6dDwtMT95Ok1hdGguYWNvcyh0KX1mdW5jdGlvbiBMKHQpe3JldHVybiB0PjA/TWF0aC5zcXJ0KHQpOjB9ZnVuY3Rpb24gQyh0KXtyZXR1cm4ocyh0KS1zKC10KSkvMn1mdW5jdGlvbiBQKHQpe3JldHVybihzKHQpK3MoLXQpKS8yfWZ1bmN0aW9uIEkodCl7dmFyIGU9Zyh0LzIpLHI9MipjKG8odC8yKSkvKGUqZSk7ZnVuY3Rpb24gaSh0LGUpe3ZhciBuPW8odCksaT1vKGUpLGE9bShlKSxzPWkqbixsPS0oKDEtcz9jKCgxK3MpLzIpLygxLXMpOi0uNSkrci8oMStzKSk7cmV0dXJuW2wqaSptKHQpLGwqYV19cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIHMsbD1MKGUqZStpKmkpLHU9LXQvMixmPTUwO2lmKCFsKXJldHVyblswLDBdO2Rve3ZhciBoPXUvMixwPW8oaCksZD1tKGgpLGc9ZC9wLHk9LWMobihwKSk7dS09cz0oMi9nKnktcipnLWwpLygteS8oZCpkKSsxLXIvKDIqcCpwKSkqKHA8MD8uNzoxKX13aGlsZShuKHMpPnYmJi0tZj4wKTt2YXIgeD1tKHUpO3JldHVyblthKGUqeCxsKm8odSkpLFMoaSp4L2wpXX0saX1mdW5jdGlvbiBPKHQsZSl7dmFyIHI9byhlKSxuPWZ1bmN0aW9uKHQpe3JldHVybiB0P3QvTWF0aC5zaW4odCk6MX0oRShyKm8odC89MikpKTtyZXR1cm5bMipyKm0odCkqbixtKGUpKm5dfWZ1bmN0aW9uIHoodCl7dmFyIGU9bSh0KSxyPW8odCksaT10Pj0wPzE6LTEscz1nKGkqdCksbD0oMStlLXIpLzI7ZnVuY3Rpb24gYyh0LG4pe3ZhciBjPW8obiksdT1vKHQvPTIpO3JldHVyblsoMStjKSptKHQpLChpKm4+LWEodSxzKS0uMDAxPzA6MTAqLWkpK2wrbShuKSpyLSgxK2MpKmUqdV19cmV0dXJuIGMuaW52ZXJ0PWZ1bmN0aW9uKHQsYyl7dmFyIHU9MCxmPTAsaD01MDtkb3t2YXIgcD1vKHUpLGQ9bSh1KSxnPW8oZikseT1tKGYpLHg9MStnLGI9eCpkLXQsXz1sK3kqci14KmUqcC1jLHc9eCpwLzIsVD0tZCp5LGs9ZSp4KmQvMixBPXIqZytlKnAqeSxNPVQqay1BKncsUz0oXypULWIqQSkvTS8yLEU9KGIqay1fKncpL007bihFKT4yJiYoRS89MiksdS09UyxmLT1FfXdoaWxlKChuKFMpPnZ8fG4oRSk+dikmJi0taD4wKTtyZXR1cm4gaSpmPi1hKG8odSkscyktLjAwMT9bMip1LGZdOm51bGx9LGN9ZnVuY3Rpb24gRCh0LGUpe3ZhciByPWcoZS8yKSxuPUwoMS1yKnIpLGk9MStuKm8odC89MiksYT1tKHQpKm4vaSxzPXIvaSxsPWEqYSxjPXMqcztyZXR1cm5bNC8zKmEqKDMrbC0zKmMpLDQvMypzKigzKzMqbC1jKV19Ty5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZighKHQqdCs0KmUqZT55Knkrdikpe3ZhciByPXQsaT1lLGE9MjU7ZG97dmFyIHMsbD1tKHIpLGM9bShyLzIpLHU9byhyLzIpLGY9bShpKSxoPW8oaSkscD1tKDIqaSksZD1mKmYsZz1oKmgseD1jKmMsYj0xLWcqdSp1LF89Yj9FKGgqdSkqTChzPTEvYik6cz0wLHc9MipfKmgqYy10LFQ9XypmLWUsaz1zKihnKngrXypoKnUqZCksQT1zKiguNSpsKnAtMipfKmYqYyksTT0uMjUqcyoocCpjLV8qZipnKmwpLFM9cyooZCp1K18qeCpoKSxDPUEqTS1TKms7aWYoIUMpYnJlYWs7dmFyIFA9KFQqQS13KlMpL0MsST0odypNLVQqaykvQztyLT1QLGktPUl9d2hpbGUoKG4oUCk+dnx8bihJKT52KSYmLS1hPjApO3JldHVybltyLGldfX0sRC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtpZihlKj0zLzgsISh0Kj0zLzgpJiZuKGUpPjEpcmV0dXJuIG51bGw7dmFyIHI9MSt0KnQrZSplLGk9TCgoci1MKHIqci00KmUqZSkpLzIpLHM9UyhpKS8zLGw9aT9mdW5jdGlvbih0KXtyZXR1cm4gYyh0K0wodCp0LTEpKX0obihlL2kpKS8zOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQrTCh0KnQrMSkpfShuKHQpKS8zLHU9byhzKSxmPVAobCksaD1mKmYtdSp1O3JldHVyblsyKmQodCkqYShDKGwpKnUsLjI1LWgpLDIqZChlKSphKGYqbShzKSwuMjUraCldfTt2YXIgUj1MKDgpLEY9YygxK3cpO2Z1bmN0aW9uIEIodCxlKXt2YXIgcj1uKGUpO3JldHVybiByPGI/W3QsYyhnKGIrZS8yKSldOlt0Km8ocikqKDIqdy0xL20ocikpLGQoZSkqKDIqdyooci1iKS1jKGcoci8yKSkpXX1mdW5jdGlvbiBOKHQpe3ZhciByPTIqeS90O2Z1bmN0aW9uIHModCxpKXt2YXIgcz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHQsaSk7aWYobih0KT54KXt2YXIgbD1hKHNbMV0sc1swXSksYz1MKHNbMF0qc1swXStzWzFdKnNbMV0pLHU9cipwKChsLXgpL3IpK3gsZj1hKG0obC09dSksMi1vKGwpKTtsPXUrUyh5L2MqbShmKSktZixzWzBdPWMqbyhsKSxzWzFdPWMqbShsKX1yZXR1cm4gc31yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcz1MKHQqdCtuKm4pO2lmKHM+eCl7dmFyIGw9YShuLHQpLGM9cipwKChsLXgpL3IpK3gsdT1sPmM/LTE6MSxmPXMqbyhjLWwpLGg9MS9nKHUqRSgoZi15KS9MKHkqKHktMipmKStzKnMpKSk7bD1jKzIqaSgoaCt1KkwoaCpoLTMpKS8zKSx0PXMqbyhsKSxuPXMqbShsKX1yZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdy5pbnZlcnQodCxuKX0sc31mdW5jdGlvbiBqKHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwyJiYocj10KSwxPT09cilyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXc7aWYocj09PTEvMClyZXR1cm4gVTtmdW5jdGlvbiBuKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcobi9yLGkpO3JldHVybiBhWzBdKj10LGF9cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7dmFyIGE9ZS5nZW9BemltdXRoYWxFcXVhbEFyZWFSYXcuaW52ZXJ0KG4vdCxpKTtyZXR1cm4gYVswXSo9cixhfSxufWZ1bmN0aW9uIFUodCxlKXtyZXR1cm5bdCpvKGUpL28oZS89MiksMiptKGUpXX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgaSxhLG8scz0xMDA7cj12b2lkIDA9PT1yPzA6K3IsZT0rZTtkb3soYT10KHIpKT09PShvPXQocit2KSkmJihvPWErdiksci09aT0tMSp2KihhLWUpLyhhLW8pfXdoaWxlKHMtLSA+MCYmbihpKT52KTtyZXR1cm4gczwwP05hTjpyfWZ1bmN0aW9uIEgodCxlLHIpe3JldHVybiB2b2lkIDA9PT1lJiYoZT00MCksdm9pZCAwPT09ciYmKHI9MWUtMTIpLGZ1bmN0aW9uKGksYSxvLHMpe3ZhciBsLGMsdTtvPXZvaWQgMD09PW8/MDorbyxzPXZvaWQgMD09PXM/MDorcztmb3IodmFyIGY9MDtmPGU7ZisrKXt2YXIgaD10KG8scykscD1oWzBdLWksZD1oWzFdLWE7aWYobihwKTxyJiZuKGQpPHIpYnJlYWs7dmFyIG09cCpwK2QqZDtpZihtPmwpby09Yy89MixzLT11Lz0yO2Vsc2V7bD1tO3ZhciBnPShvPjA/LTE6MSkqcix2PShzPjA/LTE6MSkqcix5PXQobytnLHMpLHg9dChvLHMrdiksYj0oeVswXS1oWzBdKS9nLF89KHlbMV0taFsxXSkvZyx3PSh4WzBdLWhbMF0pL3YsVD0oeFsxXS1oWzFdKS92LGs9VCpiLV8qdyxBPShuKGspPC41Py41OjEpL2s7aWYobys9Yz0oZCp3LXAqVCkqQSxzKz11PShwKl8tZCpiKSpBLG4oYyk8ciYmbih1KTxyKWJyZWFrfX1yZXR1cm5bbyxzXX19ZnVuY3Rpb24gcSgpe3ZhciB0PWooMS42OCwyKTtmdW5jdGlvbiBlKGUscil7aWYoZStyPC0xLjQpe3ZhciBuPShlLXIrMS42KSooZStyKzEuNCkvODtlKz1uLHItPS44Km4qbShyK3kvMil9dmFyIGk9dChlLHIpLGE9KDEtbyhlKnIpKS8xMjtyZXR1cm4gaVsxXTwwJiYoaVswXSo9MSthKSxpWzFdPjAmJihpWzFdKj0xK2EvMS41KmlbMF0qaVswXSksaX1yZXR1cm4gZS5pbnZlcnQ9SChlKSxlfWZ1bmN0aW9uIEcodCxlKXt2YXIgcixpPXQqbShlKSxhPTMwO2Rve2UtPXI9KGUrbShlKS1pKS8oMStvKGUpKX13aGlsZShuKHIpPnYmJi0tYT4wKTtyZXR1cm4gZS8yfWZ1bmN0aW9uIFkodCxlLHIpe2Z1bmN0aW9uIG4obixpKXtyZXR1cm5bdCpuKm8oaT1HKHIsaSkpLGUqbShpKV19cmV0dXJuIG4uaW52ZXJ0PWZ1bmN0aW9uKG4saSl7cmV0dXJuIGk9UyhpL2UpLFtuLyh0Km8oaSkpLFMoKDIqaSttKDIqaSkpL3IpXX0sbn1CLmludmVydD1mdW5jdGlvbih0LGUpe2lmKChhPW4oZSkpPEYpcmV0dXJuW3QsMippKHMoZSkpLXhdO3ZhciByLGEsbD1iLHU9MjU7ZG97dmFyIGY9byhsLzIpLGg9ZyhsLzIpO2wtPXI9KFIqKGwtYiktYyhoKS1hKS8oUi1mKmYvKDIqaCkpfXdoaWxlKG4ocik+MWUtMTImJi0tdT4wKTtyZXR1cm5bdC8obyhsKSooUi0xL20obCkpKSxkKGUpKmxdfSxVLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPTIqUyhlLzIpO3JldHVyblt0Km8oci8yKS9vKHIpLHJdfTt2YXIgVz1ZKHcveCx3LHkpO3ZhciBYPTIuMDAyNzYsWj0xLjExMDcyO2Z1bmN0aW9uIEoodCxlKXt2YXIgcj1HKHksZSk7cmV0dXJuW1gqdC8oMS9vKGUpK1ovbyhyKSksKGUrdyptKHIpKS9YXX1mdW5jdGlvbiBLKHQpe3ZhciByPTAsbj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKHQpLGk9bihyKTtyZXR1cm4gaS5wYXJhbGxlbD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHI9dCpNKTpyKkF9LGl9ZnVuY3Rpb24gUSh0LGUpe3JldHVyblt0Km8oZSksZV19ZnVuY3Rpb24gJCh0KXtpZighdClyZXR1cm4gUTt2YXIgZT0xL2codCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBpPWUrdC1uLGE9aT9yKm8obikvaTppO3JldHVybltpKm0oYSksZS1pKm8oYSldfXJldHVybiByLmludmVydD1mdW5jdGlvbihyLG4pe3ZhciBpPUwocipyKyhuPWUtbikqbikscz1lK3QtaTtyZXR1cm5baS9vKHMpKmEocixuKSxzXX0scn1mdW5jdGlvbiB0dCh0KXtmdW5jdGlvbiBlKGUscil7dmFyIG49eC1yLGk9bj9lKnQqbShuKS9uOm47cmV0dXJuW24qbShpKS90LHgtbipvKGkpXX1yZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24oZSxyKXt2YXIgbj1lKnQsaT14LXIsbz1MKG4qbitpKmkpLHM9YShuLGkpO3JldHVyblsobz9vL20obyk6MSkqcy90LHgtb119LGV9Si5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9WCplLHM9ZTwwPy1iOmIsbD0yNTtkb3tpPWEtdyptKHMpLHMtPXI9KG0oMipzKSsyKnMteSptKGkpKS8oMipvKDIqcykrMit5Km8oaSkqdypvKHMpKX13aGlsZShuKHIpPnYmJi0tbD4wKTtyZXR1cm4gaT1hLXcqbShzKSxbdCooMS9vKGkpK1ovbyhzKSkvWCxpXX0sUS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9vKGUpLGVdfTt2YXIgZXQ9WSgxLDQveSx5KTtmdW5jdGlvbiBydCh0LGUscixpLHMsbCl7dmFyIGMsdT1vKGwpO2lmKG4odCk+MXx8bihsKT4xKWM9RShyKnMrZSppKnUpO2Vsc2V7dmFyIGY9bSh0LzIpLGg9bShsLzIpO2M9MipTKEwoZipmK2UqaSpoKmgpKX1yZXR1cm4gbihjKT52P1tjLGEoaSptKGwpLGUqcy1yKmkqdSldOlswLDBdfWZ1bmN0aW9uIG50KHQsZSxyKXtyZXR1cm4gRSgodCp0K2UqZS1yKnIpLygyKnQqZSkpfWZ1bmN0aW9uIGl0KHQpe3JldHVybiB0LTIqeSpsKCh0K3kpLygyKnkpKX1mdW5jdGlvbiBhdCh0LGUscil7Zm9yKHZhciBuLGk9W1t0WzBdLHRbMV0sbSh0WzFdKSxvKHRbMV0pXSxbZVswXSxlWzFdLG0oZVsxXSksbyhlWzFdKV0sW3JbMF0sclsxXSxtKHJbMV0pLG8oclsxXSldXSxhPWlbMl0scz0wO3M8MzsrK3MsYT1uKW49aVtzXSxhLnY9cnQoblsxXS1hWzFdLGFbM10sYVsyXSxuWzNdLG5bMl0sblswXS1hWzBdKSxhLnBvaW50PVswLDBdO3ZhciBsPW50KGlbMF0udlswXSxpWzJdLnZbMF0saVsxXS52WzBdKSxjPW50KGlbMF0udlswXSxpWzFdLnZbMF0saVsyXS52WzBdKSx1PXktbDtpWzJdLnBvaW50WzFdPTAsaVswXS5wb2ludFswXT0tKGlbMV0ucG9pbnRbMF09aVswXS52WzBdLzIpO3ZhciBmPVtpWzJdLnBvaW50WzBdPWlbMF0ucG9pbnRbMF0raVsyXS52WzBdKm8obCksMiooaVswXS5wb2ludFsxXT1pWzFdLnBvaW50WzFdPWlbMl0udlswXSptKGwpKV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1tKGUpLGE9byhlKSxzPW5ldyBBcnJheSgzKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBsPWlbcl07aWYoc1tyXT1ydChlLWxbMV0sbFszXSxsWzJdLGEsbix0LWxbMF0pLCFzW3JdWzBdKXJldHVybiBsLnBvaW50O3Nbcl1bMV09aXQoc1tyXVsxXS1sLnZbMV0pfXZhciBoPWYuc2xpY2UoKTtmb3Iocj0wO3I8MzsrK3Ipe3ZhciBwPTI9PXI/MDpyKzEsZD1udChpW3JdLnZbMF0sc1tyXVswXSxzW3BdWzBdKTtzW3JdWzFdPDAmJihkPS1kKSxyPzE9PXI/KGQ9Yy1kLGhbMF0tPXNbcl1bMF0qbyhkKSxoWzFdLT1zW3JdWzBdKm0oZCkpOihkPXUtZCxoWzBdKz1zW3JdWzBdKm8oZCksaFsxXSs9c1tyXVswXSptKGQpKTooaFswXSs9c1tyXVswXSpvKGQpLGhbMV0tPXNbcl1bMF0qbShkKSl9cmV0dXJuIGhbMF0vPTMsaFsxXS89MyxofX1mdW5jdGlvbiBvdCh0KXtyZXR1cm4gdFswXSo9TSx0WzFdKj1NLHR9ZnVuY3Rpb24gc3QodCxyLG4pe3ZhciBpPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOlt0LHIsbl19KSxhPVstaVswXSwtaVsxXV0sbz1lLmdlb1JvdGF0aW9uKGEpLHM9YXQob3Qobyh0KSksb3QobyhyKSksb3QobyhuKSkpO3MuaW52ZXJ0PUgocyk7dmFyIGw9ZS5nZW9Qcm9qZWN0aW9uKHMpLnJvdGF0ZShhKSxjPWwuY2VudGVyO3JldHVybiBkZWxldGUgbC5yb3RhdGUsbC5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YyhvKHQpKTpvLmludmVydChjKCkpfSxsLmNsaXBBbmdsZSg5MCl9ZnVuY3Rpb24gbHQodCxlKXt2YXIgcj1MKDEtbShlKSk7cmV0dXJuWzIvVCp0KnIsVCooMS1yKV19ZnVuY3Rpb24gY3QodCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QsKHQ/dC9tKHQpOjEpKihtKHIpKm8odCktZSpvKHIpKV19cmV0dXJuIHIuaW52ZXJ0PWU/ZnVuY3Rpb24odCxyKXt0JiYocio9bSh0KS90KTt2YXIgbj1vKHQpO3JldHVyblt0LDIqYShMKG4qbitlKmUtcipyKS1uLGUtcildfTpmdW5jdGlvbih0LGUpe3JldHVyblt0LFModD9lKmcodCkvdDplKV19LHJ9bHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHI9ZS9ULTEpKnI7cmV0dXJuW3I+MD90KkwoeS9yKS8yOjAsUygxLXIpXX07dmFyIHV0PUwoMyk7ZnVuY3Rpb24gZnQodCxlKXtyZXR1cm5bdXQqdCooMipvKDIqZS8zKS0xKS9ULHV0KlQqbShlLzMpXX1mdW5jdGlvbiBodCh0KXt2YXIgZT1vKHQpO2Z1bmN0aW9uIHIodCxyKXtyZXR1cm5bdCplLG0ocikvZV19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHQscil7cmV0dXJuW3QvZSxTKHIqZSldfSxyfWZ1bmN0aW9uIHB0KHQpe3ZhciBlPW8odCk7ZnVuY3Rpb24gcih0LHIpe3JldHVyblt0KmUsKDErZSkqZyhyLzIpXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCxyKXtyZXR1cm5bdC9lLDIqaShyLygxK2UpKV19LHJ9ZnVuY3Rpb24gZHQodCxlKXt2YXIgcj1MKDgvKDMqeSkpO3JldHVybltyKnQqKDEtbihlKS95KSxyKmVdfWZ1bmN0aW9uIG10KHQsZSl7dmFyIHI9TCg0LTMqbShuKGUpKSk7cmV0dXJuWzIvTCg2KnkpKnQqcixkKGUpKkwoMip5LzMpKigyLXIpXX1mdW5jdGlvbiBndCh0LGUpe3ZhciByPUwoeSooNCt5KSk7cmV0dXJuWzIvcip0KigxK0woMS00KmUqZS8oeSp5KSkpLDQvciplXX1mdW5jdGlvbiB2dCh0LGUpe3ZhciByPSgyK3gpKm0oZSk7ZS89Mjtmb3IodmFyIGk9MCxhPTEvMDtpPDEwJiZuKGEpPnY7aSsrKXt2YXIgcz1vKGUpO2UtPWE9KGUrbShlKSoocysyKS1yKS8oMipzKigxK3MpKX1yZXR1cm5bMi9MKHkqKDQreSkpKnQqKDErbyhlKSksMipMKHkvKDQreSkpKm0oZSldfWZ1bmN0aW9uIHl0KHQsZSl7cmV0dXJuW3QqKDErbyhlKSkvTCgyK3kpLDIqZS9MKDIreSldfWZ1bmN0aW9uIHh0KHQsZSl7Zm9yKHZhciByPSgxK3gpKm0oZSksaT0wLGE9MS8wO2k8MTAmJm4oYSk+djtpKyspZS09YT0oZSttKGUpLXIpLygxK28oZSkpO3JldHVybiByPUwoMit5KSxbdCooMStvKGUpKS9yLDIqZS9yXX1mdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZS8odXQqVCkpO3JldHVybltUKnQvKHV0KigyKm8oMipyLzMpLTEpKSxyXX0sZHQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg4LygzKnkpKSxpPWUvcjtyZXR1cm5bdC8ociooMS1uKGkpL3kpKSxpXX0sbXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9Mi1uKGUpL0woMip5LzMpO3JldHVyblt0KkwoNip5KS8oMipyKSxkKGUpKlMoKDQtcipyKS8zKV19LGd0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPUwoeSooNCt5KSkvMjtyZXR1cm5bdCpyLygxK0woMS1lKmUqKDQreSkvKDQqeSkpKSxlKnIvMl19LHZ0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUqTCgoNCt5KS95KS8yLG49UyhyKSxpPW8obik7cmV0dXJuW3QvKDIvTCh5Kig0K3kpKSooMStpKSksUygobityKihpKzIpKS8oMit4KSldfSx5dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1MKDIreSksbj1lKnIvMjtyZXR1cm5bcip0LygxK28obikpLG5dfSx4dC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0xK3gsbj1MKHIvMik7cmV0dXJuWzIqdCpuLygxK28oZSo9bikpLFMoKGUrbShlKSkvcildfTt2YXIgYnQ9MysyKnc7ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj1tKHQvPTIpLG49byh0KSxhPUwobyhlKSkscz1vKGUvPTIpLGw9bShlKS8ocyt3Km4qYSksdT1MKDIvKDErbCpsKSksZj1MKCh3KnMrKG4rcikqYSkvKHcqcysobi1yKSphKSk7cmV0dXJuW2J0Kih1KihmLTEvZiktMipjKGYpKSxidCoodSpsKihmKzEvZiktMippKGwpKV19X3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIShyPUQuaW52ZXJ0KHQvMS4yLDEuMDY1KmUpKSlyZXR1cm4gbnVsbDt2YXIgcixhPXJbMF0scz1yWzFdLGw9MjA7dC89YnQsZS89YnQ7ZG97dmFyIGg9YS8yLHA9cy8yLGQ9bShoKSxnPW8oaCkseT1tKHApLGI9byhwKSxUPW8ocyksaz1MKFQpLEE9eS8oYit3KmcqayksTT1BKkEsUz1MKDIvKDErTSkpLEU9KHcqYisoZytkKSprKS8odypiKyhnLWQpKmspLEM9TChFKSxQPUMtMS9DLEk9QysxL0MsTz1TKlAtMipjKEMpLXQsej1TKkEqSS0yKmkoQSktZSxSPXkmJl8qaypkKk0veSxGPSh3KmcqYitrKS8oMiooYit3KmcqaykqKGIrdypnKmspKmspLEI9LS41KkEqUypTKlMsTj1CKlIsaj1CKkYsVT0oVT0yKmIrdyprKihnLWQpKSpVKkMsVj0odypnKmIqaytUKS9VLEg9LXcqZCp5LyhrKlUpLHE9UCpOLTIqVi9DK1MqKFYrVi9FKSxHPVAqai0yKkgvQytTKihIK0gvRSksWT1BKkkqTi0yKlIvKDErTSkrUypJKlIrUypBKihWLVYvRSksVz1BKkkqai0yKkYvKDErTSkrUypJKkYrUypBKihILUgvRSksWD1HKlktVypxO2lmKCFYKWJyZWFrO3ZhciBaPSh6KkctTypXKS9YLEo9KE8qWS16KnEpL1g7YS09WixzPXUoLXgsZih4LHMtSikpfXdoaWxlKChuKFopPnZ8fG4oSik+dikmJi0tbD4wKTtyZXR1cm4gbihuKHMpLXgpPHY/WzAsc106bCYmW2Esc119O3ZhciB3dD1vKDM1Kk0pO2Z1bmN0aW9uIFR0KHQsZSl7dmFyIHI9ZyhlLzIpO3JldHVyblt0Knd0KkwoMS1yKnIpLCgxK3d0KSpyXX1mdW5jdGlvbiBrdCh0LGUpe3ZhciByPWUvMixuPW8ocik7cmV0dXJuWzIqdC9UKm8oZSkqbipuLFQqZyhyKV19ZnVuY3Rpb24gQXQodCl7dmFyIGU9MS10LHI9aSh5LDApWzBdLWkoLXksMClbMF0sbj1MKDIqKGkoMCx4KVsxXS1pKDAsLXgpWzFdKS9yKTtmdW5jdGlvbiBpKHIsbil7dmFyIGk9byhuKSxhPW0obik7cmV0dXJuW2kvKGUrdCppKSpyLGUqbit0KmFdfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1pKHQsZSk7cmV0dXJuW3JbMF0qbixyWzFdL25dfWZ1bmN0aW9uIHModCl7cmV0dXJuIGEoMCx0KVsxXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24ocixpKXt2YXIgYT1WKHMsaSk7cmV0dXJuW3IvbioodCtlL28oYSkpLGFdfSxhfWZ1bmN0aW9uIE10KHQpe3JldHVyblt0WzBdLzIsUyhnKHRbMV0vMipNKSkqQV19ZnVuY3Rpb24gU3QodCl7cmV0dXJuWzIqdFswXSwyKmkobSh0WzFdKk0pKSpBXX1mdW5jdGlvbiBFdCh0LHIpe3ZhciBpPTIqeS9yLHM9dCp0O2Z1bmN0aW9uIGwocixsKXt2YXIgYz1lLmdlb0F6aW11dGhhbEVxdWlkaXN0YW50UmF3KHIsbCksdT1jWzBdLGY9Y1sxXSxoPXUqdStmKmY7aWYoaD5zKXt2YXIgZD1MKGgpLGc9YShmLHUpLGI9aSpwKGcvaSksXz1nLWIsdz10Km8oXyksVD0odCptKF8pLV8qbSh3KSkvKHgtdyksaz1MdChfLFQpLEE9KHktdCkvQ3Qoayx3LHkpO3U9ZDt2YXIgTSxTPTUwO2Rve3UtPU09KHQrQ3Qoayx3LHUpKkEtZCkvKGsodSkqQSl9d2hpbGUobihNKT52JiYtLVM+MCk7Zj1fKm0odSksdTx4JiYoZi09VCoodS14KSk7dmFyIEU9bShiKSxDPW8oYik7Y1swXT11KkMtZipFLGNbMV09dSpFK2YqQ31yZXR1cm4gY31yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24ocixsKXt2YXIgYz1yKnIrbCpsO2lmKGM+cyl7dmFyIHU9TChjKSxmPWEobCxyKSxoPWkqcChmL2kpLGQ9Zi1oO3I9dSpvKGQpLGw9dSptKGQpO2Zvcih2YXIgZz1yLXgsdj1tKHIpLGI9bC92LF89cjx4PzEvMDowLHc9MTA7Oyl7dmFyIFQ9dCptKGIpLGs9dCpvKGIpLEE9bShrKSxNPXgtayxTPShULWIqQSkvTSxFPUx0KGIsUyk7aWYobihfKTwxZS0xMnx8IS0tdylicmVhaztiLT1fPShiKnYtUypnLWwpLyh2LTIqZyooTSooaytiKlQqbyhrKS1BKS1UKihULWIqQSkpLyhNKk0pKX1yPSh1PXQrQ3QoRSxrLHIpKih5LXQpL0N0KEUsayx5KSkqbyhmPWgrYiksbD11Km0oZil9cmV0dXJuIGUuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXcuaW52ZXJ0KHIsbCl9LGx9ZnVuY3Rpb24gTHQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49dCpvKHIpO3JldHVybiByPHgmJihuLT1lKSxMKDErbipuKX19ZnVuY3Rpb24gQ3QodCxlLHIpe2Zvcih2YXIgbj0oci1lKS81MCxpPXQoZSkrdChyKSxhPTEsbz1lO2E8NTA7KythKWkrPTIqdChvKz1uKTtyZXR1cm4uNSppKm59ZnVuY3Rpb24gUHQodCxlLHIsaSxhLHMsbCxjKXtmdW5jdGlvbiB1KG4sdSl7aWYoIXUpcmV0dXJuW3Qqbi95LDBdO3ZhciBmPXUqdSxoPXQrZiooZStmKihyK2YqaSkpLHA9dSooYS0xK2YqKHMtYytmKmwpKSxkPShoKmgrcCpwKS8oMipwKSxnPW4qUyhoL2QpL3k7cmV0dXJuW2QqbShnKSx1KigxK2YqYykrZCooMS1vKGcpKV19cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8OCYmKGM9MCksdS5pbnZlcnQ9ZnVuY3Rpb24odSxmKXt2YXIgaCxwLGQ9eSp1L3QsZz1mLHg9NTA7ZG97dmFyIGI9ZypnLF89dCtiKihlK2IqKHIrYippKSksdz1nKihhLTErYioocy1jK2IqbCkpLFQ9XypfK3cqdyxrPTIqdyxBPVQvayxNPUEqQSxFPVMoXy9BKS95LEM9ZCpFLFA9XypfLEk9KDIqZStiKig0KnIrNipiKmkpKSpnLE89YStiKigzKnMrNSpiKmwpLHo9KDIqKF8qSSt3KihPLTEpKSprLVQqKDIqKE8tMSkpKS8oayprKSxEPW8oQyksUj1tKEMpLEY9QSpELEI9QSpSLE49ZC95KigxL0woMS1QL00pKSooSSpBLV8qeikvTSxqPUItdSxVPWcqKDErYipjKStBLUYtZixWPXoqUitGKk4sSD1GKkUscT0xK3otKHoqRC1CKk4pLEc9QipFLFk9VipHLXEqSDtpZighWSlicmVhaztkLT1oPShVKlYtaipxKS9ZLGctPXA9KGoqRy1VKkgpL1l9d2hpbGUoKG4oaCk+dnx8bihwKT52KSYmLS14PjApO3JldHVybltkLGddfSx1fVR0LmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUvKDErd3QpO3JldHVyblt0JiZ0Lyh3dCpMKDEtcipyKSksMippKHIpXX0sa3QuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aShlL1QpLG49byhyKSxhPTIqcjtyZXR1cm5bdCpULzIvKG8oYSkqbipuKSxhXX07dmFyIEl0PVB0KDIuODI4NCwtMS42OTg4LC43NTQzMiwtLjE4MDcxLDEuNzYwMDMsLS4zODkxNCwuMDQyNTU1KTt2YXIgT3Q9UHQoMi41ODM4MTksLS44MzU4MjcsLjE3MDM1NCwtLjAzODA5NCwxLjU0MzMxMywtLjQxMTQzNSwuMDgyNzQyKTt2YXIgenQ9UHQoNS82KnksLS42MjYzNiwtLjAzNDQsMCwxLjM0OTMsLS4wNTUyNCwwLC4wNDUpO2Z1bmN0aW9uIER0KHQsZSl7dmFyIHI9dCp0LG49ZSplO3JldHVyblt0KigxLS4xNjIzODgqbikqKC44Ny05NTI0MjZlLTkqcipyKSxlKigxK24vMTIpXX1EdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpPXQsYT1lLG89NTA7ZG97dmFyIHM9YSphO2EtPXI9KGEqKDErcy8xMiktZSkvKDErcy80KX13aGlsZShuKHIpPnYmJi0tbz4wKTtvPTUwLHQvPTEtLjE2MjM4OCpzO2Rve3ZhciBsPShsPWkqaSkqbDtpLT1yPShpKiguODctOTUyNDI2ZS05KmwpLXQpLyguODctLjAwNDc2MjEzKmwpfXdoaWxlKG4ocik+diYmLS1vPjApO3JldHVybltpLGFdfTt2YXIgUnQ9UHQoMi42NTE2LC0uNzY1MzQsLjE5MTIzLC0uMDQ3MDk0LDEuMzYyODksLS4xMzk2NSwuMDMxNzYyKTtmdW5jdGlvbiBGdCh0KXt2YXIgZT10KHgsMClbMF0tdCgteCwwKVswXTtmdW5jdGlvbiByKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQocitpKnksbik7cmV0dXJuIGFbMF0tPWkqZSxhfXJldHVybiB0LmludmVydCYmKHIuaW52ZXJ0PWZ1bmN0aW9uKHIsbil7dmFyIGk9cj4wPy0uNTouNSxhPXQuaW52ZXJ0KHIraSplLG4pLG89YVswXS1pKnk7cmV0dXJuIG88LXk/bys9Mip5Om8+eSYmKG8tPTIqeSksYVswXT1vLGF9KSxyfWZ1bmN0aW9uIEJ0KHQsZSl7dmFyIHI9ZCh0KSxpPWQoZSkscz1vKGUpLGw9byh0KSpzLGM9bSh0KSpzLHU9bShpKmUpO3Q9bihhKGMsdSkpLGU9UyhsKSxuKHQteCk+diYmKHQlPXgpO3ZhciBmPWZ1bmN0aW9uKHQsZSl7aWYoZT09PXgpcmV0dXJuWzAsMF07dmFyIHIsaSxhPW0oZSkscz1hKmEsbD1zKnMsYz0xK2wsdT0xKzMqbCxmPTEtbCxoPVMoMS9MKGMpKSxwPWYrcypjKmgsZD0oMS1hKS9wLGc9TChkKSxiPWQqYyxfPUwoYiksdz1nKmY7aWYoMD09PXQpcmV0dXJuWzAsLSh3K3MqXyldO3ZhciBULGs9byhlKSxBPTEvayxNPTIqYSprLEU9KC1wKmstKC0zKnMraCp1KSpNKigxLWEpKS8ocCpwKSxDPS1BKk0sUD0tQSoocypjKkUrZCp1Kk0pLEk9LTIqQSooZiooLjUqRS9nKS0yKnMqZypNKSxPPTQqdC95O2lmKHQ+LjIyMip5fHxlPHkvNCYmdD4uMTc1Knkpe2lmKHI9KHcrcypMKGIqKDErbCktdyp3KSkvKDErbCksdD55LzQpcmV0dXJuW3Iscl07dmFyIHo9cixEPS41KnI7cj0uNSooRCt6KSxpPTUwO2Rve3ZhciBSPUwoYi1yKnIpLEY9ciooSStDKlIpK1AqUyhyL18pLU87aWYoIUYpYnJlYWs7RjwwP0Q9cjp6PXIscj0uNSooRCt6KX13aGlsZShuKHotRCk+diYmLS1pPjApfWVsc2V7cj12LGk9MjU7ZG97dmFyIEI9cipyLE49TChiLUIpLGo9SStDKk4sVT1yKmorUCpTKHIvXyktTyxWPWorKFAtQypCKS9OO3ItPVQ9Tj9VL1Y6MH13aGlsZShuKFQpPnYmJi0taT4wKX1yZXR1cm5bciwtdy1zKkwoYi1yKnIpXX0odD55LzQ/eC10OnQsZSk7cmV0dXJuIHQ+eS80JiYodT1mWzBdLGZbMF09LWZbMV0sZlsxXT0tdSksZlswXSo9cixmWzFdKj0taSxmfWZ1bmN0aW9uIE50KHQsZSl7dmFyIHIsYSxsLGMsdSxmO2lmKGU8dilyZXR1cm5bKGM9bSh0KSktKHI9ZSoodC1jKihhPW8odCkpKS80KSphLGErcipjLDEtZSpjKmMvMix0LXJdO2lmKGU+PTEtdilyZXR1cm4gcj0oMS1lKS80LGw9MS8oYT1QKHQpKSxbKGM9KChmPXMoMiooZj10KSkpLTEpLyhmKzEpKStyKigodT1hKkModCkpLXQpLyhhKmEpLGwtcipjKmwqKHUtdCksbCtyKmMqbCoodSt0KSwyKmkocyh0KSkteCtyKih1LXQpL2FdO3ZhciBoPVsxLDAsMCwwLDAsMCwwLDAsMF0scD1bTChlKSwwLDAsMCwwLDAsMCwwLDBdLGQ9MDtmb3IoYT1MKDEtZSksdT0xO24ocFtkXS9oW2RdKT52JiZkPDg7KXI9aFtkKytdLHBbZF09KHItYSkvMixoW2RdPShyK2EpLzIsYT1MKHIqYSksdSo9MjtsPXUqaFtkXSp0O2Rve2w9KFMoYz1wW2RdKm0oYT1sKS9oW2RdKStsKS8yfXdoaWxlKC0tZCk7cmV0dXJuW20obCksYz1vKGwpLGMvbyhsLWEpLGxdfWZ1bmN0aW9uIGp0KHQsZSl7aWYoIWUpcmV0dXJuIHQ7aWYoMT09PWUpcmV0dXJuIGMoZyh0LzIrYikpO2Zvcih2YXIgcj0xLGE9TCgxLWUpLG89TChlKSxzPTA7bihvKT52O3MrKyl7aWYodCV5KXt2YXIgbD1pKGEqZyh0KS9yKTtsPDAmJihsKz15KSx0Kz1sK35+KHQveSkqeX1lbHNlIHQrPXQ7bz0ocithKS8yLGE9TChyKmEpLG89KChyPW8pLWEpLzJ9cmV0dXJuIHQvKGgoMixzKSpyKX1mdW5jdGlvbiBVdCh0LGUpe3ZhciByPSh3LTEpLyh3KzEpLGw9TCgxLXIqciksdT1qdCh4LGwqbCksZj1jKGcoeS80K24oZSkvMikpLGg9cygtMSpmKS9MKHIpLHA9ZnVuY3Rpb24odCxlKXt2YXIgcj10KnQsbj1lKzEsaT0xLXItZSplO3JldHVyblsuNSooKHQ+PTA/eDoteCktYShpLDIqdCkpLC0uMjUqYyhpKmkrNCpyKSsuNSpjKG4qbityKV19KGgqbygtMSp0KSxoKm0oLTEqdCkpLHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4odCksbz1DKG4oZSkpO2lmKGEpe3ZhciBzPTEvbShhKSxsPTEvKGcoYSkqZyhhKSksYz0tKGwrcioobypvKnMqcyktMStyKSx1PSgtYytMKGMqYy00Kigoci0xKSpsKSkpLzI7cmV0dXJuW2p0KGkoMS9MKHUpKSxyKSpkKHQpLGp0KGkoTCgodS9sLTEpL3IpKSwxLXIpKmQoZSldfXJldHVyblswLGp0KGkobyksMS1yKSpkKGUpXX0ocFswXSxwWzFdLGwqbCk7cmV0dXJuWy12WzFdLChlPj0wPzE6LTEpKiguNSp1LXZbMF0pXX1mdW5jdGlvbiBWdCh0KXt2YXIgZT1tKHQpLHI9byh0KSxpPUh0KHQpO2Z1bmN0aW9uIHModCxhKXt2YXIgcz1pKHQsYSk7dD1zWzBdLGE9c1sxXTt2YXIgbD1tKGEpLGM9byhhKSx1PW8odCksZj1FKGUqbCtyKmMqdSksaD1tKGYpLHA9bihoKT52P2YvaDoxO3JldHVybltwKnIqbSh0KSwobih0KT54P3A6LXApKihlKmMtcipsKnUpXX1yZXR1cm4gaS5pbnZlcnQ9SHQoLXQpLHMuaW52ZXJ0PWZ1bmN0aW9uKHQscil7dmFyIG49TCh0KnQrcipyKSxzPS1tKG4pLGw9byhuKSxjPW4qbCx1PS1yKnMsZj1uKmUsaD1MKGMqYyt1KnUtZipmKSxwPWEoYypmK3UqaCx1KmYtYypoKSxkPShuPng/LTE6MSkqYSh0KnMsbipvKHApKmwrciptKHApKnMpO3JldHVybiBpLmludmVydChkLHApfSxzfWZ1bmN0aW9uIEh0KHQpe3ZhciBlPW0odCkscj1vKHQpO3JldHVybiBmdW5jdGlvbih0LG4pe3ZhciBpPW8obikscz1vKHQpKmksbD1tKHQpKmksYz1tKG4pO3JldHVyblthKGwscypyLWMqZSksUyhjKnIrcyplKV19fUJ0LmludmVydD1mdW5jdGlvbih0LGUpe24odCk+MSYmKHQ9MipkKHQpLXQpLG4oZSk+MSYmKGU9MipkKGUpLWUpO3ZhciByPWQodCksaT1kKGUpLHM9LXIqdCxsPS1pKmUsYz1sL3M8MSx1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxpPTEsYT0uNSxzPTUwO2Zvcig7Oyl7dmFyIGw9YSphLGM9TChhKSx1PVMoMS9MKDErbCkpLGY9MS1sK2EqKDErbCkqdSxoPSgxLWMpL2YscD1MKGgpLGQ9aCooMStsKSxtPXAqKDEtbCksZz1MKGQtdCp0KSx2PWUrbSthKmc7aWYobihpLXIpPDFlLTEyfHwwPT0tLXN8fDA9PT12KWJyZWFrO3Y+MD9yPWE6aT1hLGE9LjUqKHIraSl9aWYoIXMpcmV0dXJuIG51bGw7dmFyIHg9UyhjKSxiPW8oeCksXz0xL2Isdz0yKmMqYixUPSgtZipiLSgtMyphK3UqKDErMypsKSkqdyooMS1jKSkvKGYqZik7cmV0dXJuW3kvNCoodCooLTIqXyooLjUqVC9wKigxLWwpLTIqYSpwKncpKy1fKncqZykrLV8qKGEqKDErbCkqVCtoKigxKzMqbCkqdykqUyh0L0woZCkpKSx4XX0oYz9sOnMsYz9zOmwpLGY9dVswXSxoPXVbMV0scD1vKGgpO3JldHVybiBjJiYoZj0teC1mKSxbciooYShtKGYpKnAsLW0oaCkpK3kpLGkqUyhvKGYpKnApXX0sVXQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGwsdSxmLGg9KHctMSkvKHcrMSkscD1MKDEtaCpoKSxkPWp0KHgscCpwKSxtPShuPS10LG89cCpwLChyPS41KmQtZSk/KGw9TnQocixvKSxuPyhmPSh1PU50KG4sMS1vKSlbMV0qdVsxXStvKmxbMF0qbFswXSp1WzBdKnVbMF0sW1tsWzBdKnVbMl0vZixsWzFdKmxbMl0qdVswXSp1WzFdL2ZdLFtsWzFdKnVbMV0vZiwtbFswXSpsWzJdKnVbMF0qdVsyXS9mXSxbbFsyXSp1WzFdKnVbMl0vZiwtbypsWzBdKmxbMV0qdVswXS9mXV0pOltbbFswXSwwXSxbbFsxXSwwXSxbbFsyXSwwXV0pOltbMCwodT1OdChuLDEtbykpWzBdL3VbMV1dLFsxL3VbMV0sMF0sW3VbMl0vdVsxXSwwXV0pLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdKmVbMF0rZVsxXSplWzFdO3JldHVyblsodFswXSplWzBdK3RbMV0qZVsxXSkvciwodFsxXSplWzBdLXRbMF0qZVsxXSkvcl19KG1bMF0sbVsxXSk7cmV0dXJuW2EoZ1sxXSxnWzBdKS8tMSwyKmkocygtLjUqYyhoKmdbMF0qZ1swXStoKmdbMV0qZ1sxXSkpKS14XX07dmFyIHF0PVMoMS0xLzMpKkEsR3Q9aHQoMCk7ZnVuY3Rpb24gWXQodCl7dmFyIGU9cXQqTSxyPWx0KHksZSlbMF0tbHQoLXksZSlbMF0saT1HdCgwLGUpWzFdLGE9bHQoMCxlKVsxXSxvPVQtYSxzPWsvdCxjPTQvayxoPWkrbypvKjQvaztmdW5jdGlvbiBwKHAsZCl7dmFyIG0sZz1uKGQpO2lmKGc+ZSl7dmFyIHY9Zih0LTEsdSgwLGwoKHAreSkvcykpKTsobT1sdChwKz15Kih0LTEpL3QtdipzLGcpKVswXT1tWzBdKmsvci1rKih0LTEpLygyKnQpK3Yqay90LG1bMV09aSs0KihtWzFdLWEpKm8vayxkPDAmJihtWzFdPS1tWzFdKX1lbHNlIG09R3QocCxkKTtyZXR1cm4gbVswXSo9YyxtWzFdLz1oLG19cmV0dXJuIHAuaW52ZXJ0PWZ1bmN0aW9uKGUscCl7ZS89Yzt2YXIgZD1uKHAqPWgpO2lmKGQ+aSl7dmFyIG09Zih0LTEsdSgwLGwoKGUreSkvcykpKTtlPShlK3kqKHQtMSkvdC1tKnMpKnIvazt2YXIgZz1sdC5pbnZlcnQoZSwuMjUqKGQtaSkqay9vK2EpO3JldHVybiBnWzBdLT15Kih0LTEpL3QtbSpzLHA8MCYmKGdbMV09LWdbMV0pLGd9cmV0dXJuIEd0LmludmVydChlLHApfSxwfWZ1bmN0aW9uIFd0KHQsZSl7cmV0dXJuW3QsMSZlPzkwLXY6cXRdfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuW3QsMSZlPy05MCt2Oi1xdF19ZnVuY3Rpb24gWnQodCl7cmV0dXJuW3RbMF0qKDEtdiksdFsxXV19ZnVuY3Rpb24gSnQodCl7dmFyIGUscj0xK3QsaT1TKG0oMS9yKSkscz0yKkwoeS8oZT15KzQqaSpyKSksbD0uNSpzKihyK0wodCooMit0KSkpLGM9dCp0LHU9cipyO2Z1bmN0aW9uIGYoZixoKXt2YXIgcCxkLGc9MS1tKGgpO2lmKGcmJmc8Mil7dmFyIHYsYj14LWgsXz0yNTtkb3t2YXIgdz1tKGIpLFQ9byhiKSxrPWkrYSh3LHItVCksQT0xK3UtMipyKlQ7Yi09dj0oYi1jKmktcip3K0Eqay0uNSpnKmUpLygyKnIqdyprKX13aGlsZShuKHYpPjFlLTEyJiYtLV8+MCk7cD1zKkwoQSksZD1mKmsveX1lbHNlIHA9cyoodCtnKSxkPWYqaS95O3JldHVybltwKm0oZCksbC1wKm8oZCldfXJldHVybiBmLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciBvPXQqdCsobi09bCkqbixmPSgxK3Utby8ocypzKSkvKDIqciksaD1FKGYpLHA9bShoKSxkPWkrYShwLHItZik7cmV0dXJuW1ModC9MKG8pKSp5L2QsUygxLTIqKGgtYyppLXIqcCsoMSt1LTIqcipmKSpkKS9lKV19LGZ9ZnVuY3Rpb24gS3QodCxlKXtyZXR1cm4gZT4tLjcxMDk4ODk1OTYyMDc1Njc/KCh0PVcodCxlKSlbMV0rPS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiBRdCh0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3PygodD1XKHQsZSkpWzFdLT1lPjA/LjA1MjgwMzUyNzQ1NDI6LS4wNTI4MDM1Mjc0NTQyLHQpOlEodCxlKX1mdW5jdGlvbiAkdCh0LGUscixuKXt2YXIgaT1MKDQqeS8oMipyKygxK3QtZS8yKSptKDIqcikrKHQrZSkvMiptKDQqcikrZS8yKm0oNipyKSkpLGE9TChuKm0ocikqTCgoMSt0Km8oMipyKStlKm8oNCpyKSkvKDErdCtlKSkpLHM9cipjKDEpO2Z1bmN0aW9uIGwocil7cmV0dXJuIEwoMSt0Km8oMipyKStlKm8oNCpyKSl9ZnVuY3Rpb24gYyhuKXt2YXIgaT1uKnI7cmV0dXJuKDIqaSsoMSt0LWUvMikqbSgyKmkpKyh0K2UpLzIqbSg0KmkpK2UvMiptKDYqaSkpL3J9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gbCh0KSptKHQpfXZhciBmPWZ1bmN0aW9uKHQsZSl7dmFyIG49cipWKGMscyptKGUpL3IsZS95KTtpc05hTihuKSYmKG49cipkKGUpKTt2YXIgdT1pKmwobik7cmV0dXJuW3UqYSp0L3kqbyhuKSx1L2EqbShuKV19O3JldHVybiBmLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciBuPVYodSxlKmEvaSk7cmV0dXJuW3QqeS8obyhuKSppKmEqbChuKSksUyhyKmMobi9yKS9zKV19LDA9PT1yJiYoaT1MKG4veSksKGY9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCppLG0oZSkvaV19KS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdC9pLFMoZSppKV19KSxmfWZ1bmN0aW9uIHRlKHQsZSxyLG4saSl7dm9pZCAwPT09biYmKG49MWUtOCksdm9pZCAwPT09aSYmKGk9MjApO3ZhciBhPXQoZSksbz10KC41KihlK3IpKSxzPXQocik7cmV0dXJuIGZ1bmN0aW9uIHQoZSxyLG4saSxhLG8scyxsLGMsdSxmKXtpZihmLm5hbkVuY291bnRlcmVkKXJldHVybiBOYU47dmFyIGgscCxkLG0sZyx2LHkseCxiLF87aWYocD1lKHIrLjI1KihoPW4tcikpLGQ9ZShuLS4yNSpoKSxpc05hTihwKSlmLm5hbkVuY291bnRlcmVkPSEwO2Vsc2V7aWYoIWlzTmFOKGQpKXJldHVybiBfPSgodj0obT1oKihpKzQqcCthKS8xMikrKGc9aCooYSs0KmQrbykvMTIpKS1zKS8xNSx1PmM/KGYubWF4RGVwdGhDb3VudCsrLHYrXyk6TWF0aC5hYnMoXyk8bD92K186KHg9dChlLHIseT1yKy41KmgsaSxwLGEsbSwuNSpsLGMsdSsxLGYpLGlzTmFOKHgpPyhmLm5hbkVuY291bnRlcmVkPSEwLE5hTik6KGI9dChlLHksbixhLGQsbyxnLC41KmwsYyx1KzEsZiksaXNOYU4oYik/KGYubmFuRW5jb3VudGVyZWQ9ITAsTmFOKTp4K2IpKTtmLm5hbkVuY291bnRlcmVkPSEwfX0odCxlLHIsYSxvLHMsKGErNCpvK3MpKihyLWUpLzYsbixpLDEse21heERlcHRoQ291bnQ6MCxuYW5FbmNvdW50ZXJlZDohMX0pfWZ1bmN0aW9uIGVlKHQsZSxyKXtmdW5jdGlvbiBpKHIpe3JldHVybiB0KygxLXQpKmgoMS1oKHIsZSksMS9lKX1mdW5jdGlvbiBhKHQpe3JldHVybiB0ZShpLDAsdCwxZS00KX1mb3IodmFyIG89MS9hKDEpLHM9MWUzLGw9KDErMWUtOCkqbyxjPVtdLHU9MDt1PD1zO3UrKyljLnB1c2goYSh1L3MpKmwpO2Z1bmN0aW9uIGYodCl7dmFyIGU9MCxyPXMsbj01MDA7ZG97Y1tuXT50P3I9bjplPW4sbj1lK3I+PjF9d2hpbGUobj5lKTt2YXIgaT1jW24rMV0tY1tuXTtyZXR1cm4gaSYmKGk9KHQtY1tuKzFdKS9pKSwobisxK2kpL3N9dmFyIHA9MipmKDEpL3kqby9yLGc9ZnVuY3Rpb24odCxlKXt2YXIgcj1mKG4obShlKSkpLGE9aShyKSp0O3JldHVybiByLz1wLFthLGU+PTA/cjotcl19O3JldHVybiBnLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuKGUqPXApPDEmJihyPWQoZSkqUyhhKG4oZSkpKm8pKSxbdC9pKG4oZSkpLHJdfSxnfWZ1bmN0aW9uIHJlKHQsZSl7cmV0dXJuIG4odFswXS1lWzBdKTx2JiZuKHRbMV0tZVsxXSk8dn1mdW5jdGlvbiBuZSh0LGUpe2Zvcih2YXIgcixuLGksYT0tMSxvPXQubGVuZ3RoLHM9dFswXSxsPVtdOysrYTxvOyl7bj0oKHI9dFthXSlbMF0tc1swXSkvZSxpPShyWzFdLXNbMV0pL2U7Zm9yKHZhciBjPTA7YzxlOysrYylsLnB1c2goW3NbMF0rYypuLHNbMV0rYyppXSk7cz1yfXJldHVybiBsLnB1c2gociksbH1mdW5jdGlvbiBpZSh0KXt2YXIgZSxuLGksYSxvLHMsbCxjPVtdLHU9dFswXS5sZW5ndGg7Zm9yKGw9MDtsPHU7KytsKW49KGU9dFswXVtsXSlbMF1bMF0saT1lWzBdWzFdLGE9ZVsxXVsxXSxvPWVbMl1bMF0scz1lWzJdWzFdLGMucHVzaChuZShbW24rdixpK3ZdLFtuK3YsYS12XSxbby12LGEtdl0sW28tdixzK3ZdXSwzMCkpO2ZvcihsPXRbMV0ubGVuZ3RoLTE7bD49MDstLWwpbj0oZT10WzFdW2xdKVswXVswXSxpPWVbMF1bMV0sYT1lWzFdWzFdLG89ZVsyXVswXSxzPWVbMl1bMV0sYy5wdXNoKG5lKFtbby12LHMtdl0sW28tdixhK3ZdLFtuK3YsYSt2XSxbbit2LGktdl1dLDMwKSk7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltyLm1lcmdlKGMpXX19ZnVuY3Rpb24gYWUodCxyLG4pe3ZhciBpLGE7ZnVuY3Rpb24gbyhlLG4pe2Zvcih2YXIgaT1uPDA/LTE6MSxhPXJbKyhuPDApXSxvPTAscz1hLmxlbmd0aC0xO288cyYmZT5hW29dWzJdWzBdOysrbyk7dmFyIGw9dChlLWFbb11bMV1bMF0sbik7cmV0dXJuIGxbMF0rPXQoYVtvXVsxXVswXSxpKm4+aSphW29dWzBdWzFdP2Fbb11bMF1bMV06bilbMF0sbH1uP28uaW52ZXJ0PW4obyk6dC5pbnZlcnQmJihvLmludmVydD1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT1hWysobjwwKV0scz1yWysobjwwKV0sbD0wLGM9aS5sZW5ndGg7bDxjOysrbCl7dmFyIHU9aVtsXTtpZih1WzBdWzBdPD1lJiZlPHVbMV1bMF0mJnVbMF1bMV08PW4mJm48dVsxXVsxXSl7dmFyIGY9dC5pbnZlcnQoZS10KHNbbF1bMV1bMF0sMClbMF0sbik7cmV0dXJuIGZbMF0rPXNbbF1bMV1bMF0scmUobyhmWzBdLGZbMV0pLFtlLG5dKT9mOm51bGx9fX0pO3ZhciBzPWUuZ2VvUHJvamVjdGlvbihvKSxsPXMuc3RyZWFtO3JldHVybiBzLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgcj1zLnJvdGF0ZSgpLG49bCh0KSxhPShzLnJvdGF0ZShbMCwwXSksbCh0KSk7cmV0dXJuIHMucm90YXRlKHIpLG4uc3BoZXJlPWZ1bmN0aW9uKCl7ZS5nZW9TdHJlYW0oaSxhKX0sbn0scy5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1pZShlKSxyPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybltbdFswXVswXSpNLHRbMF1bMV0qTV0sW3RbMV1bMF0qTSx0WzFdWzFdKk1dLFt0WzJdWzBdKk0sdFsyXVsxXSpNXV19KSl9KSksYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXt2YXIgcixuPXQoZVswXVswXSxlWzBdWzFdKVswXSxpPXQoZVsyXVswXSxlWzJdWzFdKVswXSxhPXQoZVsxXVswXSxlWzBdWzFdKVsxXSxvPXQoZVsxXVswXSxlWzFdWzFdKVsxXTtyZXR1cm4gYT5vJiYocj1hLGE9byxvPXIpLFtbbixhXSxbaSxvXV19KSl9KSkscyk6ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW1t0WzBdWzBdKkEsdFswXVsxXSpBXSxbdFsxXVswXSpBLHRbMV1bMV0qQV0sW3RbMl1bMF0qQSx0WzJdWzFdKkFdXX0pKX0pKX0sbnVsbCE9ciYmcy5sb2JlcyhyKSxzfUt0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBlPi0uNzEwOTg4OTU5NjIwNzU2Nz9XLmludmVydCh0LGUtLjA1MjgwMzUyNzQ1NDIpOlEuaW52ZXJ0KHQsZSl9LFF0LmludmVydD1mdW5jdGlvbih0LGUpe3JldHVybiBuKGUpPi43MTA5ODg5NTk2MjA3NTY3P1cuaW52ZXJ0KHQsZSsoZT4wPy4wNTI4MDM1Mjc0NTQyOi0uMDUyODAzNTI3NDU0MikpOlEuaW52ZXJ0KHQsZSl9O3ZhciBvZT1bW1tbLTE4MCwwXSxbLTEwMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzMwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTE2MCwtOTBdLFstMTAwLDBdXSxbWy0xMDAsMF0sWy02MCwtOTBdLFstMjAsMF1dLFtbLTIwLDBdLFsyMCwtOTBdLFs4MCwwXV0sW1s4MCwwXSxbMTQwLC05MF0sWzE4MCwwXV1dXTt2YXIgc2U9W1tbWy0xODAsMF0sWy0xMDAsOTBdLFstNDAsMF1dLFtbLTQwLDBdLFszMCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy0xNjAsLTkwXSxbLTEwMCwwXV0sW1stMTAwLDBdLFstNjAsLTkwXSxbLTIwLDBdXSxbWy0yMCwwXSxbMjAsLTkwXSxbODAsMF1dLFtbODAsMF0sWzE0MCwtOTBdLFsxODAsMF1dXV07dmFyIGxlPVtbW1stMTgwLDBdLFstMTAwLDkwXSxbLTQwLDBdXSxbWy00MCwwXSxbMzAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstMTYwLC05MF0sWy0xMDAsMF1dLFtbLTEwMCwwXSxbLTYwLC05MF0sWy0yMCwwXV0sW1stMjAsMF0sWzIwLC05MF0sWzgwLDBdXSxbWzgwLDBdLFsxNDAsLTkwXSxbMTgwLDBdXV1dO3ZhciBjZT1bW1tbLTE4MCwwXSxbLTkwLDkwXSxbMCwwXV0sW1swLDBdLFs5MCw5MF0sWzE4MCwwXV1dLFtbWy0xODAsMF0sWy05MCwtOTBdLFswLDBdXSxbWzAsMF0sWzkwLC05MF0sWzE4MCwwXV1dXTt2YXIgdWU9W1tbWy0xODAsMzVdLFstMzAsOTBdLFswLDM1XV0sW1swLDM1XSxbMzAsOTBdLFsxODAsMzVdXV0sW1tbLTE4MCwtMTBdLFstMTAyLC05MF0sWy02NSwtMTBdXSxbWy02NSwtMTBdLFs1LC05MF0sWzc3LC0xMF1dLFtbNzcsLTEwXSxbMTAzLC05MF0sWzE4MCwtMTBdXV1dO3ZhciBmZT1bW1tbLTE4MCwwXSxbLTExMCw5MF0sWy00MCwwXV0sW1stNDAsMF0sWzAsOTBdLFs0MCwwXV0sW1s0MCwwXSxbMTEwLDkwXSxbMTgwLDBdXV0sW1tbLTE4MCwwXSxbLTExMCwtOTBdLFstNDAsMF1dLFtbLTQwLDBdLFswLC05MF0sWzQwLDBdXSxbWzQwLDBdLFsxMTAsLTkwXSxbMTgwLDBdXV1dO2Z1bmN0aW9uIGhlKHQsZSl7cmV0dXJuWzMvayp0KkwoeSp5LzMtZSplKSxlXX1mdW5jdGlvbiBwZSh0KXtmdW5jdGlvbiBlKGUscil7aWYobihuKHIpLXgpPHYpcmV0dXJuWzAscjwwPy0yOjJdO3ZhciBpPW0ociksYT1oKCgxK2kpLygxLWkpLHQvMikscz0uNSooYSsxL2EpK28oZSo9dCk7cmV0dXJuWzIqbShlKS9zLChhLTEvYSkvc119cmV0dXJuIGUuaW52ZXJ0PWZ1bmN0aW9uKGUscil7dmFyIGk9bihyKTtpZihuKGktMik8dilyZXR1cm4gZT9udWxsOlswLGQocikqeF07aWYoaT4yKXJldHVybiBudWxsO3ZhciBvPShlLz0yKSplLHM9KHIvPTIpKnIsbD0yKnIvKDErbytzKTtyZXR1cm4gbD1oKCgxK2wpLygxLWwpLDEvdCksW2EoMiplLDEtby1zKS90LFMoKGwtMSkvKGwrMSkpXX0sZX1oZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bay8zKnQvTCh5KnkvMy1lKmUpLGVdfTt2YXIgZGU9eS93O2Z1bmN0aW9uIG1lKHQsZSl7cmV0dXJuW3QqKDErTChvKGUpKSkvMixlLyhvKGUvMikqbyh0LzYpKV19ZnVuY3Rpb24gZ2UodCxlKXt2YXIgcj10KnQsbj1lKmU7cmV0dXJuW3QqKC45NzU1MzQrbiooLS4wMTQzMDU5KnItLjExOTE2MSstLjA1NDcwMDkqbikpLGUqKDEuMDAzODQrciooLjA4MDI4OTQrLS4wMjg1NSpuKzE5OTAyNWUtOSpyKStuKiguMDk5ODkwOSstLjA0OTEwMzIqbikpXX1mdW5jdGlvbiB2ZSh0LGUpe3JldHVyblttKHQpL28oZSksZyhlKSpvKHQpXX1mdW5jdGlvbiB5ZSh0KXt2YXIgZT1vKHQpLHI9ZyhiK3QvMik7ZnVuY3Rpb24gaShpLGEpe3ZhciBvPWEtdCxzPW4obyk8dj9pKmU6bihzPWIrYS8yKTx2fHxuKG4ocykteCk8dj8wOmkqby9jKGcocykvcik7cmV0dXJuW3Msb119cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKGksYSl7dmFyIG8scz1hK3Q7cmV0dXJuW24oYSk8dj9pL2U6bihvPWIrcy8yKTx2fHxuKG4obykteCk8dj8wOmkqYyhnKG8pL3IpL2Esc119LGl9ZnVuY3Rpb24geGUodCxlKXtyZXR1cm5bdCwxLjI1KmMoZyhiKy40KmUpKV19ZnVuY3Rpb24gYmUodCl7dmFyIGU9dC5sZW5ndGgtMTtmdW5jdGlvbiByKHIsbil7Zm9yKHZhciBpLGE9byhuKSxzPTIvKDErYSpvKHIpKSxsPXMqYSptKHIpLGM9cyptKG4pLHU9ZSxmPXRbdV0saD1mWzBdLHA9ZlsxXTstLXU+PTA7KWg9KGY9dFt1XSlbMF0rbCooaT1oKS1jKnAscD1mWzFdK2wqcCtjKmk7cmV0dXJuW2g9bCooaT1oKS1jKnAscD1sKnArYyppXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24ocixzKXt2YXIgbD0yMCxjPXIsdT1zO2Rve2Zvcih2YXIgZixoPWUscD10W2hdLGQ9cFswXSxnPXBbMV0sdj0wLHk9MDstLWg+PTA7KXY9ZCtjKihmPXYpLXUqeSx5PWcrYyp5K3UqZixkPShwPXRbaF0pWzBdK2MqKGY9ZCktdSpnLGc9cFsxXStjKmcrdSpmO3ZhciB4LGIsXz0odj1kK2MqKGY9diktdSp5KSp2Kyh5PWcrYyp5K3UqZikqeTtjLT14PSgoZD1jKihmPWQpLXUqZy1yKSp2KyhnPWMqZyt1KmYtcykqeSkvXyx1LT1iPShnKnYtZCp5KS9ffXdoaWxlKG4oeCkrbihiKT4xZS0xMiYmLS1sPjApO2lmKGwpe3ZhciB3PUwoYypjK3UqdSksVD0yKmkoLjUqdyksaz1tKFQpO3JldHVyblthKGMqayx3Km8oVCkpLHc/Uyh1Kmsvdyk6MF19fSxyfW1lLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPW4odCksaT1uKGUpLGE9dixzPXg7aTxkZT9zKj1pL2RlOmErPTYqRShkZS9pKTtmb3IodmFyIGw9MDtsPDI1O2wrKyl7dmFyIGM9bShzKSx1PUwobyhzKSksZj1tKHMvMiksaD1vKHMvMikscD1tKGEvNiksZD1vKGEvNiksZz0uNSphKigxK3UpLXIseT1zLyhoKmQpLWksYj11Py0uMjUqYSpjL3U6MCxfPS41KigxK3UpLHc9KDErLjUqcypmL2gpLyhoKmQpLFQ9cy9oKihwLzYpLyhkKmQpLGs9YipULXcqXyxBPShnKlQteSpfKS9rLE09KHkqYi1nKncpL2s7aWYocy09QSxhLT1NLG4oQSk8diYmbihNKTx2KWJyZWFrfXJldHVyblt0PDA/LWE6YSxlPDA/LXM6c119LGdlLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWQodCkqeSxpPWUvMixhPTUwO2Rve3ZhciBvPXIqcixzPWkqaSxsPXIqaSxjPXIqKC45NzU1MzQrcyooLS4wMTQzMDU5Km8tLjExOTE2MSstLjA1NDcwMDkqcykpLXQsdT1pKigxLjAwMzg0K28qKC4wODAyODk0Ky0uMDI4NTUqcysxOTkwMjVlLTkqbykrcyooLjA5OTg5MDkrLS4wNDkxMDMyKnMpKS1lLGY9Ljk3NTUzNC1zKiguMTE5MTYxKzMqbyouMDE0MzA1OSsuMDU0NzAwOSpzKSxoPS1sKiguMjM4MzIyKy4yMTg4MDM2KnMrLjAyODYxMTgqbykscD1sKiguMTYwNTc4OCs3OTYxZS03Km8rLS4wNTcxKnMpLG09MS4wMDM4NCtvKiguMDgwMjg5NCsxOTkwMjVlLTkqbykrcyooMyooLjA5OTg5MDktLjAyODU1Km8pLS4yNDU1MTYqcyksZz1oKnAtbSpmLHg9KHUqaC1jKm0pL2csYj0oYypwLXUqZikvZztyLT14LGktPWJ9d2hpbGUoKG4oeCk+dnx8bihiKT52KSYmLS1hPjApO3JldHVybiBhJiZbcixpXX0sdmUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dCp0LG49ZSplKzEsaT1yK24sYT10P18qTCgoaS1MKGkqaS00KnIpKS9yKToxL0wobik7cmV0dXJuW1ModCphKSxkKGUpKkUoYSldfSx4ZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCwyLjUqaShzKC44KmUpKS0uNjI1KnldfTt2YXIgX2U9W1suOTk3MjUyMywwXSxbLjAwNTI1MTMsLS4wMDQxMTc1XSxbLjAwNzQ2MDYsLjAwNDgxMjVdLFstLjAxNTM3ODMsLS4xOTY4MjUzXSxbLjA2MzY4NzEsLS4xNDA4MDI3XSxbLjM2NjA5NzYsLS4yOTM3MzgyXV0sd2U9W1suOTg4NzksMF0sWzAsMF0sWy0uMDUwOTA5LDBdLFswLDBdLFsuMDc1NTI4LDBdXSxUZT1bWy45ODQyOTksMF0sWy4wMjExNjQyLC4wMDM3NjA4XSxbLS4xMDM2MDE4LC0uMDU3NTEwMl0sWy0uMDMyOTA5NSwtLjAzMjAxMTldLFsuMDQ5OTQ3MSwuMTIyMzMzNV0sWy4wMjYwNDYsLjA4OTk4MDVdLFs3Mzg4ZS03LC0uMTQzNTc5Ml0sWy4wMDc1ODQ4LC0uMTMzNDEwOF0sWy0uMDIxNjQ3MywuMDc3NjY0NV0sWy0uMDIyNTE2MSwuMDg1MzY3M11dLGtlPVtbLjkyNDUsMF0sWzAsMF0sWy4wMTk0MywwXV0sQWU9W1suNzIxMzE2LDBdLFswLDBdLFstLjAwODgxNjI1LC0uMDA2MTczMjVdXTtmdW5jdGlvbiBNZSh0LHIpe3ZhciBuPWUuZ2VvUHJvamVjdGlvbihiZSh0KSkucm90YXRlKHIpLmNsaXBBbmdsZSg5MCksaT1lLmdlb1JvdGF0aW9uKHIpLGE9bi5jZW50ZXI7cmV0dXJuIGRlbGV0ZSBuLnJvdGF0ZSxuLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKGkodCkpOmkuaW52ZXJ0KGEoKSl9LG59dmFyIFNlPUwoNiksRWU9TCg3KTtmdW5jdGlvbiBMZSh0LGUpe3ZhciByPVMoNyptKGUpLygzKlNlKSk7cmV0dXJuW1NlKnQqKDIqbygyKnIvMyktMSkvRWUsOSptKHIvMykvRWVdfWZ1bmN0aW9uIENlKHQsZSl7Zm9yKHZhciByLGk9KDErXykqbShlKSxhPWUscz0wO3M8MjUmJihhLT1yPShtKGEvMikrbShhKS1pKS8oLjUqbyhhLzIpK28oYSkpLCEobihyKTx2KSk7cysrKTtyZXR1cm5bdCooMSsyKm8oYSkvbyhhLzIpKS8oMyp3KSwyKkwoMykqbShhLzIpL0woMit3KV19ZnVuY3Rpb24gUGUodCxlKXtmb3IodmFyIHIsaT1MKDYvKDQreSkpLGE9KDEreS80KSptKGUpLHM9ZS8yLGw9MDtsPDI1JiYocy09cj0ocy8yK20ocyktYSkvKC41K28ocykpLCEobihyKTx2KSk7bCsrKTtyZXR1cm5baSooLjUrbyhzKSkqdC8xLjUsaSpzXX1mdW5jdGlvbiBJZSh0LGUpe3ZhciByPWUqZSxuPXIqcixpPXIqbjtyZXR1cm5bdCooLjg0NzE5LS4xMzA2MypyK2kqaSooLjA1NDk0KnItLjA0NTE1LS4wMjMyNipuKy4wMDMzMSppKSksZSooMS4wMTE4MytuKm4qKC4wMTkyNipyLS4wMjYyNS0uMDAzOTYqbikpXX1mdW5jdGlvbiBPZSh0LGUpe3JldHVyblt0KigxK28oZSkpLzIsMiooZS1nKGUvMikpXX1MZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj0zKlMoZSpFZS85KTtyZXR1cm5bdCpFZS8oU2UqKDIqbygyKnIvMyktMSkpLFMoMyptKHIpKlNlLzcpXX0sQ2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZSpMKDIrdykvKDIqTCgzKSksbj0yKlMocik7cmV0dXJuWzMqdyp0LygxKzIqbyhuKS9vKG4vMikpLFMoKHIrbShuKSkvKDErXykpXX0sUGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9TCg2Lyg0K3kpKSxpPWUvcjtyZXR1cm4gbihuKGkpLXgpPHYmJihpPWk8MD8teDp4KSxbMS41KnQvKHIqKC41K28oaSkpKSxTKChpLzIrbShpKSkvKDEreS80KSldfSxJZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPWUsbD0yNTtkb3tzLT1yPShzKigxLjAxMTgzKyhhPShpPXMqcykqaSkqYSooLjAxOTI2KmktLjAyNjI1LS4wMDM5NiphKSktZSkvKDEuMDExODMrYSphKiguMjExODYqaS0uMjM2MjUrLS4wNTE0OCphKSl9d2hpbGUobihyKT4xZS0xMiYmLS1sPjApO3JldHVyblt0LyguODQ3MTktLjEzMDYzKihpPXMqcykrKG89aSooYT1pKmkpKSpvKiguMDU0OTQqaS0uMDQ1MTUtLjAyMzI2KmErLjAwMzMxKm8pKSxzXX0sT2UuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUvMixpPTAsYT0xLzA7aTwxMCYmbihhKT52OysraSl7dmFyIHM9byhlLzIpO2UtPWE9KGUtZyhlLzIpLXIpLygxLS41LyhzKnMpKX1yZXR1cm5bMip0LygxK28oZSkpLGVdfTt2YXIgemU9W1tbWy0xODAsMF0sWy05MCw5MF0sWzAsMF1dLFtbMCwwXSxbOTAsOTBdLFsxODAsMF1dXSxbW1stMTgwLDBdLFstOTAsLTkwXSxbMCwwXV0sW1swLDBdLFs5MCwtOTBdLFsxODAsMF1dXV07ZnVuY3Rpb24gRGUodCxlKXt2YXIgcj1tKGUpLGk9byhlKSxhPWQodCk7aWYoMD09PXR8fG4oZSk9PT14KXJldHVyblswLGVdO2lmKDA9PT1lKXJldHVyblt0LDBdO2lmKG4odCk9PT14KXJldHVyblt0KmkseCpyXTt2YXIgcz15LygyKnQpLTIqdC95LGw9MiplL3ksYz0oMS1sKmwpLyhyLWwpLHU9cypzLGY9YypjLGg9MSt1L2YscD0xK2YvdSxnPShzKnIvYy1zLzIpL2gsdj0oZipyL3UrYy8yKS9wLGI9dip2LShmKnIqci91K2Mqci0xKS9wO3JldHVyblt4KihnK0woZypnK2kqaS9oKSphKSx4Kih2K0woYjwwPzA6YikqZCgtZSpzKSphKV19RGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQvPXgpKnQsbj1yKyhlLz14KSplLGk9eSp5O3JldHVyblt0PyhuLTErTCgoMS1uKSooMS1uKSs0KnIpKS8oMip0KSp4OjAsVigoZnVuY3Rpb24odCl7cmV0dXJuIG4qKHkqbSh0KS0yKnQpKnkrNCp0KnQqKGUtbSh0KSkrMip5KnQtaSplfSksMCldfTtmdW5jdGlvbiBSZSh0LGUpe3ZhciByPWUqZTtyZXR1cm5bdCxlKigxLjAxNDgrcipyKiguMjMxODUrciooLjAyNDA2KnItLjE0NDk5KSkpXX1mdW5jdGlvbiBGZSh0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcj1nKGUpLGk9dCptKGUpO3JldHVyblttKGkpL3IsZSsoMS1vKGkpKS9yXX1mdW5jdGlvbiBCZSh0LGUpe3ZhciByPWplKHRbMV0sdFswXSksbj1qZShlWzFdLGVbMF0pLGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYSh0WzBdKmVbMV0tdFsxXSplWzBdLHRbMF0qZVswXSt0WzFdKmVbMV0pfShyLG4pLHM9VWUocikvVWUobik7cmV0dXJuIE5lKFsxLDAsdFswXVswXSwwLDEsdFswXVsxXV0sTmUoW3MsMCwwLDAscywwXSxOZShbbyhpKSxtKGkpLDAsLW0oaSksbyhpKSwwXSxbMSwwLC1lWzBdWzBdLDAsMSwtZVswXVsxXV0pKSl9ZnVuY3Rpb24gTmUodCxlKXtyZXR1cm5bdFswXSplWzBdK3RbMV0qZVszXSx0WzBdKmVbMV0rdFsxXSplWzRdLHRbMF0qZVsyXSt0WzFdKmVbNV0rdFsyXSx0WzNdKmVbMF0rdFs0XSplWzNdLHRbM10qZVsxXSt0WzRdKmVbNF0sdFszXSplWzJdK3RbNF0qZVs1XSt0WzVdXX1mdW5jdGlvbiBqZSh0LGUpe3JldHVyblt0WzBdLWVbMF0sdFsxXS1lWzFdXX1mdW5jdGlvbiBVZSh0KXtyZXR1cm4gTCh0WzBdKnRbMF0rdFsxXSp0WzFdKX1mdW5jdGlvbiBWZSh0LHIsaSl7ZnVuY3Rpb24gYSh0LGUpe3ZhciBuLGk9cih0LGUpLGE9aS5wcm9qZWN0KFt0KkEsZSpBXSk7cmV0dXJuKG49aS50cmFuc2Zvcm0pP1tuWzBdKmFbMF0rblsxXSphWzFdK25bMl0sLShuWzNdKmFbMF0rbls0XSphWzFdK25bNV0pXTooYVsxXT0tYVsxXSxhKX0hZnVuY3Rpb24gdChlLHIpe2lmKGUuZWRnZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9W10sbj10W2UtMV0saT0wO2k8ZTsrK2kpci5wdXNoKFtuLG49dFtpXV0pO3JldHVybiByfShlLmZhY2UpLHIuZmFjZSl7dmFyIG49ZS5zaGFyZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPXQubGVuZ3RoLGE9bnVsbCxvPTA7bzxpOysrbyl7cj10W29dO2Zvcih2YXIgcz1lLmxlbmd0aDstLXM+PTA7KWlmKG49ZVtzXSxyWzBdPT09blswXSYmclsxXT09PW5bMV0pe2lmKGEpcmV0dXJuW2Escl07YT1yfX19KGUuZmFjZSxyLmZhY2UpLGk9QmUobi5tYXAoci5wcm9qZWN0KSxuLm1hcChlLnByb2plY3QpKTtlLnRyYW5zZm9ybT1yLnRyYW5zZm9ybT9OZShyLnRyYW5zZm9ybSxpKTppO2Zvcih2YXIgYT1yLmVkZ2VzLG89MCxzPWEubGVuZ3RoO288czsrK28pSGUoblswXSxhW29dWzFdKSYmSGUoblsxXSxhW29dWzBdKSYmKGFbb109ZSksSGUoblswXSxhW29dWzBdKSYmSGUoblsxXSxhW29dWzFdKSYmKGFbb109ZSk7Zm9yKGE9ZS5lZGdlcyxvPTAscz1hLmxlbmd0aDtvPHM7KytvKUhlKG5bMF0sYVtvXVswXSkmJkhlKG5bMV0sYVtvXVsxXSkmJihhW29dPXIpLEhlKG5bMF0sYVtvXVsxXSkmJkhlKG5bMV0sYVtvXVswXSkmJihhW29dPXIpfWVsc2UgZS50cmFuc2Zvcm09ci50cmFuc2Zvcm07ZS5jaGlsZHJlbiYmZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihyKXt0KHIsZSl9KSk7cmV0dXJuIGV9KHQse3RyYW5zZm9ybTpudWxsfSkscWUodCkmJihhLmludmVydD1mdW5jdGlvbihlLG4pe3ZhciBpPWZ1bmN0aW9uIHQoZSxuKXt2YXIgaT1lLnByb2plY3QuaW52ZXJ0LGE9ZS50cmFuc2Zvcm0sbz1uO2EmJihhPWZ1bmN0aW9uKHQpe3ZhciBlPTEvKHRbMF0qdFs0XS10WzFdKnRbM10pO3JldHVybltlKnRbNF0sLWUqdFsxXSxlKih0WzFdKnRbNV0tdFsyXSp0WzRdKSwtZSp0WzNdLGUqdFswXSxlKih0WzJdKnRbM10tdFswXSp0WzVdKV19KGEpLG89W2FbMF0qb1swXSthWzFdKm9bMV0rYVsyXSxhWzNdKm9bMF0rYVs0XSpvWzFdK2FbNV1dKTtpZihpJiZlPT09ZnVuY3Rpb24odCl7cmV0dXJuIHIodFswXSpNLHRbMV0qTSl9KHM9aShvKSkpcmV0dXJuIHM7Zm9yKHZhciBzLGw9ZS5jaGlsZHJlbixjPTAsdT1sJiZsLmxlbmd0aDtjPHU7KytjKWlmKHM9dChsW2NdLG4pKXJldHVybiBzfSh0LFtlLC1uXSk7cmV0dXJuIGkmJihpWzBdKj1NLGlbMV0qPU0saSl9KTt2YXIgbz1lLmdlb1Byb2plY3Rpb24oYSkscz1vLnN0cmVhbTtyZXR1cm4gby5zdHJlYW09ZnVuY3Rpb24ocil7dmFyIGk9by5yb3RhdGUoKSxhPXMociksbD0oby5yb3RhdGUoWzAsMF0pLHMocikpO3JldHVybiBvLnJvdGF0ZShpKSxhLnNwaGVyZT1mdW5jdGlvbigpe2wucG9seWdvblN0YXJ0KCksbC5saW5lU3RhcnQoKSxmdW5jdGlvbiB0KHIsaSxhKXt2YXIgbyxzLGw9aS5lZGdlcyxjPWwubGVuZ3RoLHU9e3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmkuZmFjZX0sZj1pLmZhY2UuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gOTAhPT1uKHRbMV0pfSkpLGg9ZS5nZW9Cb3VuZHMoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOmZ9KSxwPSExLGQ9LTEsbT1oWzFdWzBdLWhbMF1bMF0sZz0xODA9PT1tfHwzNjA9PT1tP1soaFswXVswXStoWzFdWzBdKS8yLChoWzBdWzFdK2hbMV1bMV0pLzJdOmUuZ2VvQ2VudHJvaWQodSk7aWYoYSlmb3IoOysrZDxjJiZsW2RdIT09YTspOysrZDtmb3IodmFyIHk9MDt5PGM7Kyt5KXM9bFsoeStkKSVjXSxBcnJheS5pc0FycmF5KHMpPyhwfHwoci5wb2ludCgobz1lLmdlb0ludGVycG9sYXRlKHNbMF0sZykodikpWzBdLG9bMV0pLHA9ITApLHIucG9pbnQoKG89ZS5nZW9JbnRlcnBvbGF0ZShzWzFdLGcpKHYpKVswXSxvWzFdKSk6KHA9ITEscyE9PWEmJnQocixzLGkpKX0obCx0KSxsLmxpbmVFbmQoKSxsLnBvbHlnb25FbmQoKX0sYX0sby5hbmdsZShudWxsPT1pPy0zMDppKkEpfWZ1bmN0aW9uIEhlKHQsZSl7cmV0dXJuIHQmJmUmJnRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXX1mdW5jdGlvbiBxZSh0KXtyZXR1cm4gdC5wcm9qZWN0LmludmVydHx8dC5jaGlsZHJlbiYmdC5jaGlsZHJlbi5zb21lKHFlKX1SZS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXtlPjEuNzkwODU3MTgzP2U9MS43OTA4NTcxODM6ZTwtMS43OTA4NTcxODMmJihlPS0xLjc5MDg1NzE4Myk7dmFyIHIsaT1lO2Rve3ZhciBhPWkqaTtpLT1yPShpKigxLjAxNDgrYSphKiguMjMxODUrYSooLjAyNDA2KmEtLjE0NDk5KSkpLWUpLygxLjAxNDgrYSphKig1Ki4yMzE4NSthKiguMjE2NTQqYS0xLjAxNDkzKSkpfXdoaWxlKG4ocik+dik7cmV0dXJuW3QsaV19LEZlLmludmVydD1mdW5jdGlvbih0LGUpe2lmKG4oZSk8dilyZXR1cm5bdCwwXTt2YXIgcixpPXQqdCtlKmUsYT0uNSplLHM9MTA7ZG97dmFyIGw9ZyhhKSxjPTEvbyhhKSx1PWktMiplKmErYSphO2EtPXI9KGwqdSsyKihhLWUpKS8oMit1KmMqYysyKihhLWUpKmwpfXdoaWxlKG4ocik+diYmLS1zPjApO3JldHVybiBsPWcoYSksWyhuKGUpPG4oYSsxL2wpP1ModCpsKTpkKGUpKmQodCkqKEUobih0KmwpKSt4KSkvbShhKSxhXX07dmFyIEdlPVtbMCw5MF0sWy05MCwwXSxbMCwwXSxbOTAsMF0sWzE4MCwwXSxbMCwtOTBdXSxZZT1bWzAsMiwxXSxbMCwzLDJdLFs1LDEsMl0sWzUsMiwzXSxbMCwxLDRdLFswLDQsM10sWzUsNCwxXSxbNSwzLDRdXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIEdlW3RdfSkpfSkpO3ZhciBXZT0yL0woMyk7ZnVuY3Rpb24gWGUodCxlKXt2YXIgcj1sdCh0LGUpO3JldHVybltyWzBdKldlLHJbMV1dfWZ1bmN0aW9uIFplKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxpPTA7cjxuOysrcilpKz10W3JdKmVbcl07cmV0dXJuIGl9ZnVuY3Rpb24gSmUodCl7cmV0dXJuW2EodFsxXSx0WzBdKSpBLFModSgtMSxmKDEsdFsyXSkpKSpBXX1mdW5jdGlvbiBLZSh0KXt2YXIgZT10WzBdKk0scj10WzFdKk0sbj1vKHIpO3JldHVybltuKm8oZSksbiptKGUpLG0ocildfWZ1bmN0aW9uIFFlKCl7fWZ1bmN0aW9uICRlKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRyKHQsZSl9KSl9fWZ1bmN0aW9uIHRyKHQsZSl7cmV0dXJue3R5cGU6IkZlYXR1cmUiLGlkOnQuaWQscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6ZXIodC5nZW9tZXRyeSxlKX19ZnVuY3Rpb24gZXIodCxyKXtpZighdClyZXR1cm4gbnVsbDtpZigiR2VvbWV0cnlDb2xsZWN0aW9uIj09PXQudHlwZSlyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm57dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlcih0LGUpfSkpfX0odCxyKTt2YXIgbjtzd2l0Y2godC50eXBlKXtjYXNlIlBvaW50IjpjYXNlIk11bHRpUG9pbnQiOm49aXI7YnJlYWs7Y2FzZSJMaW5lU3RyaW5nIjpjYXNlIk11bHRpTGluZVN0cmluZyI6bj1hcjticmVhaztjYXNlIlBvbHlnb24iOmNhc2UiTXVsdGlQb2x5Z29uIjpjYXNlIlNwaGVyZSI6bj1vcjticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBlLmdlb1N0cmVhbSh0LHIobikpLG4ucmVzdWx0KCl9WGUuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGx0LmludmVydCh0L1dlLGUpfTt2YXIgcnI9W10sbnI9W10saXI9e3BvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aD9yci5sZW5ndGg8Mj97dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOnJyWzBdfTp7dHlwZToiTXVsdGlQb2ludCIsY29vcmRpbmF0ZXM6cnJ9Om51bGw7cmV0dXJuIHJyPVtdLHR9fSxhcj17bGluZVN0YXJ0OlFlLHBvaW50OmZ1bmN0aW9uKHQsZSl7cnIucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtyci5sZW5ndGgmJihuci5wdXNoKHJyKSxycj1bXSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PW5yLmxlbmd0aD9uci5sZW5ndGg8Mj97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6bnJbMF19Ont0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOm5yfTpudWxsO3JldHVybiBucj1bXSx0fX0sb3I9e3BvbHlnb25TdGFydDpRZSxsaW5lU3RhcnQ6UWUscG9pbnQ6ZnVuY3Rpb24odCxlKXtyci5wdXNoKFt0LGVdKX0sbGluZUVuZDpmdW5jdGlvbigpe3ZhciB0PXJyLmxlbmd0aDtpZih0KXtkb3tyci5wdXNoKHJyWzBdLnNsaWNlKCkpfXdoaWxlKCsrdDw0KTtuci5wdXNoKHJyKSxycj1bXX19LHBvbHlnb25FbmQ6UWUscmVzdWx0OmZ1bmN0aW9uKCl7aWYoIW5yLmxlbmd0aClyZXR1cm4gbnVsbDt2YXIgdD1bXSxlPVtdO3JldHVybiBuci5mb3JFYWNoKChmdW5jdGlvbihyKXshZnVuY3Rpb24odCl7aWYoKGU9dC5sZW5ndGgpPDQpcmV0dXJuITE7Zm9yKHZhciBlLHI9MCxuPXRbZS0xXVsxXSp0WzBdWzBdLXRbZS0xXVswXSp0WzBdWzFdOysrcjxlOyluKz10W3ItMV1bMV0qdFtyXVswXS10W3ItMV1bMF0qdFtyXVsxXTtyZXR1cm4gbjw9MH0ocik/ZS5wdXNoKHIpOnQucHVzaChbcl0pfSkpLGUuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTt0LnNvbWUoKGZ1bmN0aW9uKHQpe2lmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0sbj1lWzFdLGk9ITEsYT0wLG89dC5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD10W2FdLGM9bFswXSx1PWxbMV0sZj10W3NdLGg9ZlswXSxwPWZbMV07dT5uXnA+biYmcjwoaC1jKSoobi11KS8ocC11KStjJiYoaT0haSl9cmV0dXJuIGl9KHRbMF0scikpcmV0dXJuIHQucHVzaChlKSwhMH0pKXx8dC5wdXNoKFtlXSl9KSksbnI9W10sdC5sZW5ndGg/dC5sZW5ndGg+MT97dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp0fTp7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6dFswXX06bnVsbH19O2Z1bmN0aW9uIHNyKHQpe3ZhciByPXQoeCwwKVswXS10KC14LDApWzBdO2Z1bmN0aW9uIGkoZSxpKXt2YXIgYT1uKGUpPHgsbz10KGE/ZTplPjA/ZS15OmUreSxpKSxzPShvWzBdLW9bMV0pKl8sbD0ob1swXStvWzFdKSpfO2lmKGEpcmV0dXJuW3MsbF07dmFyIGM9cipfLHU9cz4wXmw+MD8tMToxO3JldHVyblt1KnMtZChsKSpjLHUqbC1kKHMpKmNdfXJldHVybiB0LmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKGUsaSl7dmFyIGE9KGUraSkqXyxvPShpLWUpKl8scz1uKGEpPC41KnImJm4obyk8LjUqcjtpZighcyl7dmFyIGw9cipfLGM9YT4wXm8+MD8tMToxLHU9LWMqZSsobz4wPzE6LTEpKmwsZj0tYyppKyhhPjA/MTotMSkqbDthPSgtdS1mKSpfLG89KHUtZikqX312YXIgaD10LmludmVydChhLG8pO3JldHVybiBzfHwoaFswXSs9YT4wP3k6LXkpLGh9KSxlLmdlb1Byb2plY3Rpb24oaSkucm90YXRlKFstOTAsLTkwLDQ1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfWZ1bmN0aW9uIGxyKCl7cmV0dXJuIHNyKFV0KS5zY2FsZSgxMTEuNDgpfWZ1bmN0aW9uIGNyKHQpe3ZhciBlPW0odCk7ZnVuY3Rpb24gcihyLG4pe3ZhciBhPWU/ZyhyKmUvMikvZTpyLzI7aWYoIW4pcmV0dXJuWzIqYSwtdF07dmFyIHM9MippKGEqbShuKSksbD0xL2cobik7cmV0dXJuW20ocykqbCxuKygxLW8ocykpKmwtdF19cmV0dXJuIHIuaW52ZXJ0PWZ1bmN0aW9uKHIsYSl7aWYobihhKz10KTx2KXJldHVybltlPzIqaShlKnIvMikvZTpyLDBdO3ZhciBzLGw9cipyK2EqYSxjPTAsdT0xMDtkb3t2YXIgZj1nKGMpLGg9MS9vKGMpLHA9bC0yKmEqYytjKmM7Yy09cz0oZipwKzIqKGMtYSkpLygyK3AqaCpoKzIqKGMtYSkqZil9d2hpbGUobihzKT52JiYtLXU+MCk7dmFyIGQ9ciooZj1nKGMpKSx4PWcobihhKTxuKGMrMS9mKT8uNSpTKGQpOi41KkUoZCkreS80KS9tKGMpO3JldHVybltlPzIqaShlKngpL2U6Mip4LGNdfSxyfXZhciB1cj1bWy45OTg2LC0uMDYyXSxbMSwwXSxbLjk5ODYsLjA2Ml0sWy45OTU0LC4xMjRdLFsuOTksLjE4Nl0sWy45ODIyLC4yNDhdLFsuOTczLC4zMV0sWy45NiwuMzcyXSxbLjk0MjcsLjQzNF0sWy45MjE2LC40OTU4XSxbLjg5NjIsLjU1NzFdLFsuODY3OSwuNjE3Nl0sWy44MzUsLjY3NjldLFsuNzk4NiwuNzM0Nl0sWy43NTk3LC43OTAzXSxbLjcxODYsLjg0MzVdLFsuNjczMiwuODkzNl0sWy42MjEzLC45Mzk0XSxbLjU3MjIsLjk3NjFdLFsuNTMyMiwxXV07ZnVuY3Rpb24gZnIodCxlKXt2YXIgcixpPWYoMTgsMzYqbihlKS95KSxhPWwoaSksbz1pLWEscz0ocj11clthXSlbMF0sYz1yWzFdLHU9KHI9dXJbKythXSlbMF0saD1yWzFdLHA9KHI9dXJbZigxOSwrK2EpXSlbMF0sZD1yWzFdO3JldHVyblt0Kih1K28qKHAtcykvMitvKm8qKHAtMip1K3MpLzIpLChlPjA/eDoteCkqKGgrbyooZC1jKS8yK28qbyooZC0yKmgrYykvMildfWZ1bmN0aW9uIGhyKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPW8ociksaT0odC0xKS8odC1uKm8oZSkpO3JldHVybltpKm4qbShlKSxpKm0ocildfXJldHVybiBlLmludmVydD1mdW5jdGlvbihlLHIpe3ZhciBuPWUqZStyKnIsaT1MKG4pLG89KHQtTCgxLW4qKHQrMSkvKHQtMSkpKS8oKHQtMSkvaStpLyh0LTEpKTtyZXR1cm5bYShlKm8saSpMKDEtbypvKSksaT9TKHIqby9pKTowXX0sZX0odCk7aWYoIWUpcmV0dXJuIHI7dmFyIG49byhlKSxpPW0oZSk7ZnVuY3Rpb24gcyhlLGEpe3ZhciBvPXIoZSxhKSxzPW9bMV0sbD1zKmkvKHQtMSkrbjtyZXR1cm5bb1swXSpuL2wscy9sXX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24oZSxhKXt2YXIgbz0odC0xKS8odC0xLWEqaSk7cmV0dXJuIHIuaW52ZXJ0KG8qZSxvKmEqbil9LHN9dXIuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFsxXSo9MS4wMTQ0fSkpLGZyLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWUveCxpPTkwKnIsYT1mKDE4LG4oaS81KSksbz11KDAsbChhKSk7ZG97dmFyIHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxwPWgtcyxkPWgtMipjK3MsbT0yKihuKHIpLWMpL3AsZz1kL3Asdj1tKigxLWcqbSooMS0yKmcqbSkpO2lmKHY+PTB8fDE9PT1vKXtpPShlPj0wPzU6LTUpKih2K2EpO3ZhciB5LGI9NTA7ZG97dj0oYT1mKDE4LG4oaSkvNSkpLShvPWwoYSkpLHM9dXJbb11bMV0sYz11cltvKzFdWzFdLGg9dXJbZigxOSxvKzIpXVsxXSxpLT0oeT0oZT49MD94Oi14KSooYyt2KihoLXMpLzIrdip2KihoLTIqYytzKS8yKS1lKSpBfXdoaWxlKG4oeSk+MWUtMTImJi0tYj4wKTticmVha319d2hpbGUoLS1vPj0wKTt2YXIgXz11cltvXVswXSx3PXVyW28rMV1bMF0sVD11cltmKDE5LG8rMildWzBdO3JldHVyblt0Lyh3K3YqKFQtXykvMit2KnYqKFQtMip3K18pLzIpLGkqTV19O3ZhciBwcj0tMTc5Ljk5OTksZHI9MTc5Ljk5OTksbXI9LTg5Ljk5OTk7ZnVuY3Rpb24gZ3IodCl7cmV0dXJuIHQubGVuZ3RoPjB9ZnVuY3Rpb24gdnIodCl7cmV0dXJuLTkwPT09dHx8OTA9PT10P1swLHRdOlstMTgwLChlPXQsTWF0aC5mbG9vcigxZTQqZSkvMWU0KV07dmFyIGV9ZnVuY3Rpb24geXIodCl7dmFyIGU9dFswXSxyPXRbMV0sbj0hMTtyZXR1cm4gZTw9cHI/KGU9LTE4MCxuPSEwKTplPj1kciYmKGU9MTgwLG49ITApLHI8PW1yPyhyPS05MCxuPSEwKTpyPj04OS45OTk5JiYocj05MCxuPSEwKSxuP1tlLHJdOnR9ZnVuY3Rpb24geHIodCl7cmV0dXJuIHQubWFwKHlyKX1mdW5jdGlvbiBicih0LGUscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXt2YXIgYT10W25dLnNsaWNlKCk7ci5wdXNoKHtpbmRleDotMSxwb2x5Z29uOmUscmluZzphfSk7Zm9yKHZhciBvPTAscz1hLmxlbmd0aDtvPHM7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoYzw9cHJ8fGM+PWRyfHx1PD1tcnx8dT49ODkuOTk5OSl7YVtvXT15cihsKTtmb3IodmFyIGY9bysxO2Y8czsrK2Ype3ZhciBoPWFbZl0scD1oWzBdLGQ9aFsxXTtpZihwPnByJiZwPGRyJiZkPm1yJiZkPDg5Ljk5OTkpYnJlYWt9aWYoZj09PW8rMSljb250aW51ZTtpZihvKXt2YXIgbT17aW5kZXg6LTEscG9seWdvbjplLHJpbmc6YS5zbGljZSgwLG8rMSl9O20ucmluZ1ttLnJpbmcubGVuZ3RoLTFdPXZyKHUpLHJbci5sZW5ndGgtMV09bX1lbHNlIHIucG9wKCk7aWYoZj49cylicmVhaztyLnB1c2goe2luZGV4Oi0xLHBvbHlnb246ZSxyaW5nOmE9YS5zbGljZShmLTEpfSksYVswXT12cihhWzBdWzFdKSxvPS0xLHM9YS5sZW5ndGh9fX19ZnVuY3Rpb24gX3IodCl7dmFyIGUscixuLGksYSxvLHM9dC5sZW5ndGgsbD17fSxjPXt9O2ZvcihlPTA7ZTxzOysrZSluPShyPXRbZV0pLnJpbmdbMF0sYT1yLnJpbmdbci5yaW5nLmxlbmd0aC0xXSxuWzBdIT09YVswXXx8blsxXSE9PWFbMV0/KHIuaW5kZXg9ZSxsW25dPWNbYV09cik6KHIucG9seWdvbi5wdXNoKHIucmluZyksdFtlXT1udWxsKTtmb3IoZT0wO2U8czsrK2UpaWYocj10W2VdKXtpZihuPXIucmluZ1swXSxhPXIucmluZ1tyLnJpbmcubGVuZ3RoLTFdLGk9Y1tuXSxvPWxbYV0sZGVsZXRlIGxbbl0sZGVsZXRlIGNbYV0sblswXT09PWFbMF0mJm5bMV09PT1hWzFdKXtyLnBvbHlnb24ucHVzaChyLnJpbmcpO2NvbnRpbnVlfWk/KGRlbGV0ZSBjW25dLGRlbGV0ZSBsW2kucmluZ1swXV0saS5yaW5nLnBvcCgpLHRbaS5pbmRleF09bnVsbCxyPXtpbmRleDotMSxwb2x5Z29uOmkucG9seWdvbixyaW5nOmkucmluZy5jb25jYXQoci5yaW5nKX0saT09PW8/ci5wb2x5Z29uLnB1c2goci5yaW5nKTooci5pbmRleD1zKyssdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSkpOm8/KGRlbGV0ZSBsW2FdLGRlbGV0ZSBjW28ucmluZ1tvLnJpbmcubGVuZ3RoLTFdXSxyLnJpbmcucG9wKCkscj17aW5kZXg6cysrLHBvbHlnb246by5wb2x5Z29uLHJpbmc6ci5yaW5nLmNvbmNhdChvLnJpbmcpfSx0W28uaW5kZXhdPW51bGwsdC5wdXNoKGxbci5yaW5nWzBdXT1jW3IucmluZ1tyLnJpbmcubGVuZ3RoLTFdXT1yKSk6KHIucmluZy5wdXNoKHIucmluZ1swXSksci5wb2x5Z29uLnB1c2goci5yaW5nKSl9fWZ1bmN0aW9uIHdyKHQpe3ZhciBlPXt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTpUcih0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLG51bGwhPXQucHJvcGVydGllcyYmKGUucHJvcGVydGllcz10LnByb3BlcnRpZXMpLGV9ZnVuY3Rpb24gVHIodCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZSxyLG4saTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAoVHIpfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6eXIodC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6Y2FzZSJMaW5lU3RyaW5nIjplPXt0eXBlOnQudHlwZSxjb29yZGluYXRlczp4cih0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmU9e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoeHIpfTticmVhaztjYXNlIlBvbHlnb24iOnZhciBhPVtdO2JyKHQuY29vcmRpbmF0ZXMsYSxyPVtdKSxfcihyKSxlPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczphfTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1bXSxuPS0xLGk9dC5jb29yZGluYXRlcy5sZW5ndGg7Zm9yKHZhciBvPW5ldyBBcnJheShpKTsrK248aTspYnIodC5jb29yZGluYXRlc1tuXSxvW25dPVtdLHIpO19yKHIpLGU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6by5maWx0ZXIoZ3IpfTticmVhaztkZWZhdWx0OnJldHVybiB0fXJldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlfWZ1bmN0aW9uIGtyKHQsZSl7dmFyIHI9ZyhlLzIpLG49bShiKnIpO3JldHVyblt0KiguNzQ0ODItLjM0NTg4Km4qbiksMS43MDcxMSpyXX1mdW5jdGlvbiBBcih0LHIsbil7dmFyIGk9ZS5nZW9JbnRlcnBvbGF0ZShyLG4pLGE9aSguNSksbz1lLmdlb1JvdGF0aW9uKFstYVswXSwtYVsxXV0pKHIpLHM9aS5kaXN0YW5jZS8yLGw9LVMobShvWzFdKk0pL20ocykpLGM9Wy1hWzBdLC1hWzFdLC0ob1swXT4wP3ktbDpsKSpBXSx1PWUuZ2VvUHJvamVjdGlvbih0KHMpKS5yb3RhdGUoYyksZj1lLmdlb1JvdGF0aW9uKGMpLGg9dS5jZW50ZXI7cmV0dXJuIGRlbGV0ZSB1LnJvdGF0ZSx1LmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9oKGYodCkpOmYuaW52ZXJ0KGgoKSl9LHUuY2xpcEFuZ2xlKDkwKX1mdW5jdGlvbiBNcih0KXt2YXIgcj1vKHQpO2Z1bmN0aW9uIG4odCxuKXt2YXIgaT1lLmdlb0dub21vbmljUmF3KHQsbik7cmV0dXJuIGlbMF0qPXIsaX1yZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5nZW9Hbm9tb25pY1Jhdy5pbnZlcnQodC9yLG4pfSxufWZ1bmN0aW9uIFNyKHQsZSl7cmV0dXJuIEFyKE1yLHQsZSl9ZnVuY3Rpb24gRXIodCl7aWYoISh0Kj0yKSlyZXR1cm4gZS5nZW9BemltdXRoYWxFcXVpZGlzdGFudFJhdzt2YXIgcj0tdC8yLG49LXIsaT10KnQscz1nKG4pLGw9LjUvbShuKTtmdW5jdGlvbiBjKGUsYSl7dmFyIHM9RShvKGEpKm8oZS1yKSksbD1FKG8oYSkqbyhlLW4pKTtyZXR1cm5bKChzKj1zKS0obCo9bCkpLygyKnQpLChhPDA/LTE6MSkqTCg0KmkqbC0oaS1zK2wpKihpLXMrbCkpLygyKnQpXX1yZXR1cm4gYy5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgaSxjLHU9ZSplLGY9byhMKHUrKGk9dCtyKSppKSksaD1vKEwodSsoaT10K24pKmkpKTtyZXR1cm5bYShjPWYtaCxpPShmK2gpKnMpLChlPDA/LTE6MSkqRShMKGkqaStjKmMpKmwpXX0sY31mdW5jdGlvbiBMcih0LGUpe3JldHVybiBBcihFcix0LGUpfWZ1bmN0aW9uIENyKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO3ZhciByPW4oZS94KSxpPVMocik7aWYobih0KTx2fHxuKG4oZSkteCk8dilyZXR1cm5bMCxkKGUpKnkqZyhpLzIpXTt2YXIgYT1vKGkpLHM9bih5L3QtdC95KS8yLGw9cypzLGM9YS8ocithLTEpLHU9YyooMi9yLTEpLGY9dSp1LGg9ZitsLHA9Yy1mLG09bCtjO3JldHVybltkKHQpKnkqKHMqcCtMKGwqcCpwLWgqKGMqYy1mKSkpL2gsZChlKSp5Kih1Km0tcypMKChsKzEpKmgtbSptKSkvaF19ZnVuY3Rpb24gUHIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9bihlL3gpLGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLGQoZSkqeSpnKGkvMildO3ZhciBhPW8oaSkscz1uKHkvdC10L3kpLzIsbD1zKnMsYz1hKihMKDErbCktcyphKS8oMStsKnIqcik7cmV0dXJuW2QodCkqeSpjLGQoZSkqeSpMKDEtYyooMipzK2MpKV19ZnVuY3Rpb24gSXIodCxlKXtpZihuKGUpPHYpcmV0dXJuW3QsMF07dmFyIHI9ZS94LGk9UyhyKTtpZihuKHQpPHZ8fG4obihlKS14KTx2KXJldHVyblswLHkqZyhpLzIpXTt2YXIgYT0oeS90LXQveSkvMixzPXIvKDErbyhpKSk7cmV0dXJuW3kqKGQodCkqTChhKmErMS1zKnMpLWEpLHkqc119ZnVuY3Rpb24gT3IodCxlKXtpZighZSlyZXR1cm5bdCwwXTt2YXIgcj1uKGUpO2lmKCF0fHxyPT09eClyZXR1cm5bMCxlXTt2YXIgaT1yL3gsYT1pKmksbz0oOCppLWEqKGErMiktNSkvKDIqYSooaS0xKSkscz1vKm8sbD1pKm8sYz1hK3MrMipsLHU9aSszKm8sZj10L3gsaD1mKzEvZixwPWQobih0KS14KSpMKGgqaC00KSxtPXAqcCxnPShwKihjK3MtMSkrMipMKGMqKGErcyptLTEpKygxLWEpKihhKih1KnUrNCpzKSsxMipsKnMrNCpzKnMpKSkvKDQqYyttKTtyZXR1cm5bZCh0KSp4KmcsZChlKSp4KkwoMStwKm4oZyktZypnKV19ZnVuY3Rpb24genIodCxlLHIsbil7dmFyIGk9eS8zO3Q9dSh0LHYpLGU9dShlLHYpLHQ9Zih0LHgpLGU9ZihlLHktdikscj11KHIsMCkscj1mKHIsMTAwLXYpO3ZhciBzPShuPXUobix2KSkvMTAwLGw9RSgoci8xMDArMSkqbyhpKSkvaSxjPW0odCkvbShsKngpLGg9ZS95LHA9TChzKm0odC8yKS9tKGUvMikpO3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe2Z1bmN0aW9uIHMoYSxzKXt2YXIgbD1yKm0obipzKSxjPUwoMS1sKmwpLHU9TCgyLygxK2MqbyhhKj1pKSkpO3JldHVyblt0KmMqdSptKGEpLGUqbCp1XX1yZXR1cm4gcy5pbnZlcnQ9ZnVuY3Rpb24obyxzKXt2YXIgbD1vL3QsYz1zL2UsdT1MKGwqbCtjKmMpLGY9MipTKHUvMik7cmV0dXJuW2EobypnKGYpLHQqdSkvaSx1JiZTKHMqbShmKS8oZSpyKnUpKS9uXX0sc30ocC9MKGgqYypsKSwxLyhwKkwoaCpjKmwpKSxjLGwsaCl9ZnVuY3Rpb24gRHIoKXt2YXIgdD02NSpNLHI9NjAqTSxuPTIwLGk9MjAwLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6ciksbz1hKHQscixuLGkpO3JldHVybiBvLnBvbGVsaW5lPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodD0rZSpNLHIsbixpKTp0KkF9LG8ucGFyYWxsZWxzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyPStlKk0sbixpKTpyKkF9LG8uaW5mbGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG49K2UsaSk6bn0sby5yYXRpbz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuLGk9K2UpOml9LG8uc2NhbGUoMTYzLjc3NSl9a3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS8xLjcwNzExLG49bShiKnIpO3JldHVyblt0LyguNzQ0ODItLjM0NTg4Km4qbiksMippKHIpXX0sQ3IuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYobihlKTx2KXJldHVyblt0LDBdO2lmKG4odCk8dilyZXR1cm5bMCx4Km0oMippKGUveSkpXTt2YXIgcj0odC89eSkqdCxhPShlLz15KSplLHM9cithLGw9cypzLGM9LW4oZSkqKDErcyksdT1jLTIqYStyLGY9LTIqYysxKzIqYStsLGg9YS9mKygyKnUqdSp1LyhmKmYqZiktOSpjKnUvKGYqZikpLzI3LHA9KGMtdSp1LygzKmYpKS9mLGc9MipMKC1wLzMpLGI9RSgzKmgvKHAqZykpLzM7cmV0dXJuW3kqKHMtMStMKDErMiooci1hKStsKSkvKDIqdCksZChlKSp5KigtZypvKGIreS8zKS11LygzKmYpKV19LFByLmludmVydD1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVyblswLHgqbSgyKmkoZS95KSldO3ZhciByPW4odC95KSxvPSgxLXIqci0oZS89eSkqZSkvKDIqcikscz1MKG8qbysxKTtyZXR1cm5bZCh0KSp5KihzLW8pLGQoZSkqeCptKDIqYShMKCgxLTIqbypyKSoobytzKS1yKSxMKHMrbytyKSkpXX0sSXIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuW3QsMF07dmFyIHI9ZS95LG49KHkqeSooMS1yKnIpLXQqdCkvKDIqeSp0KTtyZXR1cm5bdD95KihkKHQpKkwobipuKzEpLW4pOjAseCptKDIqaShyKSldfSxPci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcjtpZighdHx8IWUpcmV0dXJuW3QsZV07ZS89eTt2YXIgaT1kKHQpKnQveCxhPShpKmktMSs0KmUqZSkvbihpKSxvPWEqYSxzPTIqZSxsPTUwO2Rve3ZhciBjPXMqcyx1PSg4KnMtYyooYysyKS01KS8oMipjKihzLTEpKSxmPSgzKnMtYypzLTEwKS8oMipjKnMpLGg9dSp1LHA9cyp1LG09cyt1LGc9bSptLGI9cyszKnUsXz0tMiptKig0KnAqaCsoMS00KmMrMypjKmMpKigxK2YpK2gqKDE0KmMtNi1vKyg4KmMtOC0yKm8pKmYpK3AqKDEyKmMtOCsoMTAqYy0xMC1vKSpmKSksdz1MKGcqKGMraCpvLTEpKygxLWMpKihjKihiKmIrNCpoKStoKigxMipwKzQqaCkpKTtzLT1yPShhKihnK2gtMSkrMip3LWkqKDQqZytvKSkvKGEqKDIqdSpmKzIqbSooMStmKSkrXy93LTgqbSooYSooLTEraCtnKSsyKncpKigxK2YpLyhvKzQqZykpfXdoaWxlKHI+diYmLS1sPjApO3JldHVybltkKHQpKihMKGEqYSs0KSthKSp5LzQseCpzXX07dmFyIFJyPTQqeSszKkwoMyksRnI9MipMKDIqeSpMKDMpL1JyKSxCcj1ZKEZyKkwoMykveSxGcixSci82KTtmdW5jdGlvbiBOcih0LGUpe3JldHVyblt0KkwoMS0zKmUqZS8oeSp5KSksZV19ZnVuY3Rpb24ganIodCxlKXt2YXIgcj1vKGUpLG49byh0KSpyLGk9MS1uLHM9byh0PWEobSh0KSpyLC1tKGUpKSksbD1tKHQpO3JldHVybltsKihyPUwoMS1uKm4pKS1zKmksLXMqci1sKmldfWZ1bmN0aW9uIFVyKHQsZSl7dmFyIHI9Tyh0LGUpO3JldHVyblsoclswXSt0L3gpLzIsKHJbMV0rZSkvMl19TnIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3QvTCgxLTMqZSplLyh5KnkpKSxlXX0sanIuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9KHQqdCtlKmUpLy0yLG49TCgtciooMityKSksaT1lKnIrdCpuLG89dCpyLWUqbixzPUwobypvK2kqaSk7cmV0dXJuW2EobippLHMqKDErcikpLHM/LVMobipvL3MpOjBdfSxVci5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LGk9ZSxhPTI1O2Rve3ZhciBzLGw9byhpKSxjPW0oaSksdT1tKDIqaSksZj1jKmMsaD1sKmwscD1tKHIpLGQ9byhyLzIpLGc9bShyLzIpLHk9ZypnLGI9MS1oKmQqZCxfPWI/RShsKmQpKkwocz0xL2IpOnM9MCx3PS41KigyKl8qbCpnK3IveCktdCxUPS41KihfKmMraSktZSxrPS41KnMqKGgqeStfKmwqZCpmKSsuNS94LEE9cyoocCp1LzQtXypjKmcpLE09LjEyNSpzKih1KmctXypjKmgqcCksUz0uNSpzKihmKmQrXyp5KmwpKy41LEM9QSpNLVMqayxQPShUKkEtdypTKS9DLEk9KHcqTS1UKmspL0M7ci09UCxpLT1JfXdoaWxlKChuKFApPnZ8fG4oSSk+dikmJi0tYT4wKTtyZXR1cm5bcixpXX0sdC5nZW9OYXR1cmFsRWFydGg9ZS5nZW9OYXR1cmFsRWFydGgxLHQuZ2VvTmF0dXJhbEVhcnRoUmF3PWUuZ2VvTmF0dXJhbEVhcnRoMVJhdyx0Lmdlb0Fpcnk9ZnVuY3Rpb24oKXt2YXIgdD14LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihJKSxuPXIodCk7cmV0dXJuIG4ucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD1lKk0pOnQqQX0sbi5zY2FsZSgxNzkuOTc2KS5jbGlwQW5nbGUoMTQ3KX0sdC5nZW9BaXJ5UmF3PUksdC5nZW9BaXRvZmY9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE8pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQWl0b2ZmUmF3PU8sdC5nZW9Bcm1hZGlsbG89ZnVuY3Rpb24oKXt2YXIgdD0yMCpNLHI9dD49MD8xOi0xLG49ZyhyKnQpLGk9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcih6KSxzPWkodCksbD1zLnN0cmVhbTtyZXR1cm4gcy5wYXJhbGxlbD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1nKChyPSh0PWUqTSk+PTA/MTotMSkqdCksaSh0KSk6dCpBfSxzLnN0cmVhbT1mdW5jdGlvbihlKXt2YXIgaT1zLnJvdGF0ZSgpLGM9bChlKSx1PShzLnJvdGF0ZShbMCwwXSksbChlKSksZj1zLnByZWNpc2lvbigpO3JldHVybiBzLnJvdGF0ZShpKSxjLnNwaGVyZT1mdW5jdGlvbigpe3UucG9seWdvblN0YXJ0KCksdS5saW5lU3RhcnQoKTtmb3IodmFyIGU9LTE4MCpyO3IqZTwxODA7ZSs9OTAqcil1LnBvaW50KGUsOTAqcik7aWYodClmb3IoO3IqKGUtPTMqcipmKT49LTE4MDspdS5wb2ludChlLHIqLWEobyhlKk0vMiksbikqQSk7dS5saW5lRW5kKCksdS5wb2x5Z29uRW5kKCl9LGN9LHMuc2NhbGUoMjE4LjY5NSkuY2VudGVyKFswLDI4LjA5NzRdKX0sdC5nZW9Bcm1hZGlsbG9SYXc9eix0Lmdlb0F1Z3VzdD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRCkuc2NhbGUoNjYuMTYwMyl9LHQuZ2VvQXVndXN0UmF3PUQsdC5nZW9CYWtlcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQikuc2NhbGUoMTEyLjMxNCl9LHQuZ2VvQmFrZXJSYXc9Qix0Lmdlb0JlcmdoYXVzPWZ1bmN0aW9uKCl7dmFyIHQ9NSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoTiksbj1yKHQpLGk9bi5zdHJlYW0scz0tbyguMDEqTSksbD1tKC4wMSpNKTtyZXR1cm4gbi5sb2Jlcz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPW4ucm90YXRlKCksYz1pKGUpLHU9KG4ucm90YXRlKFswLDBdKSxpKGUpKTtyZXR1cm4gbi5yb3RhdGUociksYy5zcGhlcmU9ZnVuY3Rpb24oKXt1LnBvbHlnb25TdGFydCgpLHUubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0zNjAvdCxuPTIqeS90LGk9OTAtMTgwL3QsYz14O2U8dDsrK2UsaS09cixjLT1uKXUucG9pbnQoYShsKm8oYykscykqQSxTKGwqbShjKSkqQSksaTwtOTA/KHUucG9pbnQoLTkwLC0xODAtaS0uMDEpLHUucG9pbnQoLTkwLC0xODAtaSsuMDEpKToodS5wb2ludCg5MCxpKy4wMSksdS5wb2ludCg5MCxpLS4wMSkpO3UubGluZUVuZCgpLHUucG9seWdvbkVuZCgpfSxjfSxuLnNjYWxlKDg3LjgwNzYpLmNlbnRlcihbMCwxNy4xODc1XSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0JlcmdoYXVzUmF3PU4sdC5nZW9CZXJ0aW4xOTUzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihxKCkpLnJvdGF0ZShbLTE2LjUsLTQyXSkuc2NhbGUoMTc2LjU3KS5jZW50ZXIoWzcuOTMsLjA5XSl9LHQuZ2VvQmVydGluMTk1M1Jhdz1xLHQuZ2VvQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEopLnNjYWxlKDE2MC44NTcpfSx0Lmdlb0JvZ2dzUmF3PUosdC5nZW9Cb25uZT1mdW5jdGlvbigpe3JldHVybiBLKCQpLnNjYWxlKDEyMy4wODIpLmNlbnRlcihbMCwyNi4xNDQxXSkucGFyYWxsZWwoNDUpfSx0Lmdlb0Jvbm5lUmF3PSQsdC5nZW9Cb3R0b21sZXk9ZnVuY3Rpb24oKXt2YXIgdD0uNSxyPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IodHQpLG49cih0KTtyZXR1cm4gbi5mcmFjdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9yKHQ9K2UpOnR9LG4uc2NhbGUoMTU4LjgzNyl9LHQuZ2VvQm90dG9tbGV5UmF3PXR0LHQuZ2VvQnJvbWxleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZXQpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvQnJvbWxleVJhdz1ldCx0Lmdlb0NoYW1iZXJsaW49c3QsdC5nZW9DaGFtYmVybGluUmF3PWF0LHQuZ2VvQ2hhbWJlcmxpbkFmcmljYT1mdW5jdGlvbigpe3JldHVybiBzdChbMCwyMl0sWzQ1LDIyXSxbMjIuNSwtMjJdKS5zY2FsZSgzODApLmNlbnRlcihbMjIuNSwyXSl9LHQuZ2VvQ29sbGlnbm9uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihsdCkuc2NhbGUoOTUuNjQ2NCkuY2VudGVyKFswLDMwXSl9LHQuZ2VvQ29sbGlnbm9uUmF3PWx0LHQuZ2VvQ3JhaWc9ZnVuY3Rpb24oKXtyZXR1cm4gSyhjdCkuc2NhbGUoMjQ5LjgyOCkuY2xpcEFuZ2xlKDkwKX0sdC5nZW9DcmFpZ1Jhdz1jdCx0Lmdlb0NyYXN0ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKGZ0KS5zY2FsZSgxNTYuMTkpfSx0Lmdlb0NyYXN0ZXJSYXc9ZnQsdC5nZW9DeWxpbmRyaWNhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBLKGh0KS5wYXJhbGxlbCgzOC41OCkuc2NhbGUoMTk1LjA0NCl9LHQuZ2VvQ3lsaW5kcmljYWxFcXVhbEFyZWFSYXc9aHQsdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gSyhwdCkuc2NhbGUoMTI0Ljc1KX0sdC5nZW9DeWxpbmRyaWNhbFN0ZXJlb2dyYXBoaWNSYXc9cHQsdC5nZW9FY2tlcnQxPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihkdCkuc2NhbGUoMTY1LjY2NCl9LHQuZ2VvRWNrZXJ0MVJhdz1kdCx0Lmdlb0Vja2VydDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKG10KS5zY2FsZSgxNjUuNjY0KX0sdC5nZW9FY2tlcnQyUmF3PW10LHQuZ2VvRWNrZXJ0Mz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oZ3QpLnNjYWxlKDE4MC43MzkpfSx0Lmdlb0Vja2VydDNSYXc9Z3QsdC5nZW9FY2tlcnQ0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2dCkuc2NhbGUoMTgwLjczOSl9LHQuZ2VvRWNrZXJ0NFJhdz12dCx0Lmdlb0Vja2VydDU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHl0KS5zY2FsZSgxNzMuMDQ0KX0sdC5nZW9FY2tlcnQ1UmF3PXl0LHQuZ2VvRWNrZXJ0Nj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oeHQpLnNjYWxlKDE3My4wNDQpfSx0Lmdlb0Vja2VydDZSYXc9eHQsdC5nZW9FaXNlbmxvaHI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKF90KS5zY2FsZSg2Mi41MjcxKX0sdC5nZW9FaXNlbmxvaHJSYXc9X3QsdC5nZW9GYWhleT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVHQpLnNjYWxlKDEzNy4xNTIpfSx0Lmdlb0ZhaGV5UmF3PVR0LHQuZ2VvRm91Y2F1dD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3QpLnNjYWxlKDEzNS4yNjQpfSx0Lmdlb0ZvdWNhdXRSYXc9a3QsdC5nZW9Gb3VjYXV0U2ludXNvaWRhbD1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihBdCksbj1yKHQpO3JldHVybiBuLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IodD0rZSk6dH0sbi5zY2FsZSgxNjguNzI1KX0sdC5nZW9Gb3VjYXV0U2ludXNvaWRhbFJhdz1BdCx0Lmdlb0dpbGJlcnQ9ZnVuY3Rpb24odCl7bnVsbD09dCYmKHQ9ZS5nZW9PcnRob2dyYXBoaWMpO3ZhciByPXQoKSxuPWUuZ2VvRXF1aXJlY3Rhbmd1bGFyKCkuc2NhbGUoQSkucHJlY2lzaW9uKDApLmNsaXBBbmdsZShudWxsKS50cmFuc2xhdGUoWzAsMF0pO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHIoTXQodCkpfWZ1bmN0aW9uIGEodCl7aVt0XT1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyW3RdLmFwcGx5KHIsYXJndW1lbnRzKSxpKTpyW3RdKCl9fXJldHVybiByLmludmVydCYmKGkuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiBTdChyLmludmVydCh0KSl9KSxpLnN0cmVhbT1mdW5jdGlvbih0KXt2YXIgZT1yLnN0cmVhbSh0KSxpPW4uc3RyZWFtKHtwb2ludDpmdW5jdGlvbih0LHIpe2UucG9pbnQodC8yLFMoZygtci8yKk0pKSpBKX0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7ZS5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe2UubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtlLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCl9fSk7cmV0dXJuIGkuc3BoZXJlPWUuc3BoZXJlLGl9LGkucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuLnJvdGF0ZSh0KSxpKTpuLnJvdGF0ZSgpfSxpLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oci5jZW50ZXIoTXQodCkpLGkpOlN0KHIuY2VudGVyKCkpfSxhKCJhbmdsZSIpLGEoImNsaXBBbmdsZSIpLGEoImNsaXBFeHRlbnQiKSxhKCJmaXRFeHRlbnQiKSxhKCJmaXRIZWlnaHQiKSxhKCJmaXRTaXplIiksYSgiZml0V2lkdGgiKSxhKCJzY2FsZSIpLGEoInRyYW5zbGF0ZSIpLGEoInByZWNpc2lvbiIpLGkuc2NhbGUoMjQ5LjUpfSx0Lmdlb0dpbmdlcnk9ZnVuY3Rpb24oKXt2YXIgdD02LHI9MzAqTSxuPW8ociksaT1tKHIpLHM9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihFdCksbD1zKHIsdCksYz1sLnN0cmVhbSx1PS1vKC4wMSpNKSxmPW0oLjAxKk0pO3JldHVybiBsLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1vKHI9ZSpNKSxpPW0ocikscyhyLHQpKTpyKkF9LGwubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cyhyLHQ9K2UpOnR9LGwuc3RyZWFtPWZ1bmN0aW9uKGUpe3ZhciByPWwucm90YXRlKCkscz1jKGUpLGg9KGwucm90YXRlKFswLDBdKSxjKGUpKTtyZXR1cm4gbC5yb3RhdGUocikscy5zcGhlcmU9ZnVuY3Rpb24oKXtoLnBvbHlnb25TdGFydCgpLGgubGluZVN0YXJ0KCk7Zm9yKHZhciBlPTAscj0yKnkvdCxzPTA7ZTx0OysrZSxzLT1yKWgucG9pbnQoYShmKm8ocyksdSkqQSxTKGYqbShzKSkqQSksaC5wb2ludChhKGkqbyhzLXIvMiksbikqQSxTKGkqbShzLXIvMikpKkEpO2gubGluZUVuZCgpLGgucG9seWdvbkVuZCgpfSxzfSxsLnJvdGF0ZShbOTAsLTQwXSkuc2NhbGUoOTEuNzA5NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0dpbmdlcnlSYXc9RXQsdC5nZW9HaW56YnVyZzQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEl0KS5zY2FsZSgxNDkuOTk1KX0sdC5nZW9HaW56YnVyZzRSYXc9SXQsdC5nZW9HaW56YnVyZzU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE90KS5zY2FsZSgxNTMuOTMpfSx0Lmdlb0dpbnpidXJnNVJhdz1PdCx0Lmdlb0dpbnpidXJnNj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oenQpLnNjYWxlKDEzMC45NDUpfSx0Lmdlb0dpbnpidXJnNlJhdz16dCx0Lmdlb0dpbnpidXJnOD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRHQpLnNjYWxlKDEzMS43NDcpfSx0Lmdlb0dpbnpidXJnOFJhdz1EdCx0Lmdlb0dpbnpidXJnOT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUnQpLnNjYWxlKDEzMS4wODcpfSx0Lmdlb0dpbnpidXJnOVJhdz1SdCx0Lmdlb0dyaW5nb3J0ZW49ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KEJ0KSkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9HcmluZ29ydGVuUmF3PUJ0LHQuZ2VvR3V5b3U9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEZ0KFV0KSkuc2NhbGUoMTUxLjQ5Nil9LHQuZ2VvR3V5b3VSYXc9VXQsdC5nZW9IYW1tZXI9ZnVuY3Rpb24oKXt2YXIgdD0yLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihqKSxuPXIodCk7cmV0dXJuIG4uY29lZmZpY2llbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0hhbW1lclJhdz1qLHQuZ2VvSGFtbWVyUmV0cm9hemltdXRoYWw9ZnVuY3Rpb24oKXt2YXIgdD0wLHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihWdCksbj1yKHQpLGk9bi5yb3RhdGUsYT1uLnN0cmVhbSxvPWUuZ2VvQ2lyY2xlKCk7cmV0dXJuIG4ucGFyYWxsZWw9ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQqQTt2YXIgaT1uLnJvdGF0ZSgpO3JldHVybiByKHQ9ZSpNKS5yb3RhdGUoaSl9LG4ucm90YXRlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLmNhbGwobixbZVswXSxlWzFdLXQqQV0pLG8uY2VudGVyKFstZVswXSwtZVsxXV0pLG4pOigoZT1pLmNhbGwobikpWzFdKz10KkEsZSl9LG4uc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybih0PWEodCkpLnNwaGVyZT1mdW5jdGlvbigpe3QucG9seWdvblN0YXJ0KCk7dmFyIGUscj1vLnJhZGl1cyg4OS45OSkoKS5jb29yZGluYXRlc1swXSxuPXIubGVuZ3RoLTEsaT0tMTtmb3IodC5saW5lU3RhcnQoKTsrK2k8bjspdC5wb2ludCgoZT1yW2ldKVswXSxlWzFdKTtmb3IodC5saW5lRW5kKCksbj0ocj1vLnJhZGl1cyg5MC4wMSkoKS5jb29yZGluYXRlc1swXSkubGVuZ3RoLTEsdC5saW5lU3RhcnQoKTstLWk+PTA7KXQucG9pbnQoKGU9cltpXSlbMF0sZVsxXSk7dC5saW5lRW5kKCksdC5wb2x5Z29uRW5kKCl9LHR9LG4uc2NhbGUoNzkuNDE4NykucGFyYWxsZWwoNDUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9IYW1tZXJSZXRyb2F6aW11dGhhbFJhdz1WdCx0Lmdlb0hlYWxwaXg9ZnVuY3Rpb24oKXt2YXIgdD00LG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihZdCksaT1uKHQpLGE9aS5zdHJlYW07cmV0dXJuIGkubG9iZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlKTp0fSxpLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgbz1pLnJvdGF0ZSgpLHM9YShuKSxsPShpLnJvdGF0ZShbMCwwXSksYShuKSk7cmV0dXJuIGkucm90YXRlKG8pLHMuc3BoZXJlPWZ1bmN0aW9uKCl7dmFyIG4saTtlLmdlb1N0cmVhbSgobj0xODAvdCxpPVtdLmNvbmNhdChyLnJhbmdlKC0xODAsMTgwK24vMixuKS5tYXAoV3QpLHIucmFuZ2UoMTgwLC0xODAtbi8yLC1uKS5tYXAoWHQpKSx7dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6WzE4MD09PW4/aS5tYXAoWnQpOmldfSksbCl9LHN9LGkuc2NhbGUoMjM5Ljc1KX0sdC5nZW9IZWFscGl4UmF3PVl0LHQuZ2VvSGlsbD1mdW5jdGlvbigpe3ZhciB0PTEscj1lLmdlb1Byb2plY3Rpb25NdXRhdG9yKEp0KSxuPXIodCk7cmV0dXJuIG4ucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDE2Ny43NzQpLmNlbnRlcihbMCwxOC42N10pfSx0Lmdlb0hpbGxSYXc9SnQsdC5nZW9Ib21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihRdCkuc2NhbGUoMTUyLjYzKX0sdC5nZW9Ib21vbG9zaW5lUmF3PVF0LHQuZ2VvSHVmbmFnZWw9ZnVuY3Rpb24oKXt2YXIgdD0xLHI9MCxuPTQ1Kk0saT0yLGE9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcigkdCksbz1hKHQscixuLGkpO3JldHVybiBvLmE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0PStlLHIsbixpKTp0fSxvLmI9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/YSh0LHI9K2UsbixpKTpyfSxvLnBzaU1heD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9hKHQscixuPStlKk0saSk6bipBfSxvLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2EodCxyLG4saT0rZSk6aX0sby5zY2FsZSgxODAuNzM5KX0sdC5nZW9IdWZuYWdlbFJhdz0kdCx0Lmdlb0h5cGVyZWxsaXB0aWNhbD1mdW5jdGlvbigpe3ZhciB0PTAscj0yLjUsbj0xLjE4MzEzNixpPWUuZ2VvUHJvamVjdGlvbk11dGF0b3IoZWUpLGE9aSh0LHIsbik7cmV0dXJuIGEuYWxwaGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0PStlLHIsbik6dH0sYS5rPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2kodCxyPStlLG4pOnJ9LGEuZ2FtbWE9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/aSh0LHIsbj0rZSk6bn0sYS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0h5cGVyZWxsaXB0aWNhbFJhdz1lZSx0Lmdlb0ludGVycnVwdD1hZSx0Lmdlb0ludGVycnVwdGVkQm9nZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoSixvZSkuc2NhbGUoMTYwLjg1Nyl9LHQuZ2VvSW50ZXJydXB0ZWRIb21vbG9zaW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFF0LHNlKS5zY2FsZSgxNTIuNjMpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFcsbGUpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb0ludGVycnVwdGVkTW9sbHdlaWRlSGVtaXNwaGVyZXM9ZnVuY3Rpb24oKXtyZXR1cm4gYWUoVyxjZSkuc2NhbGUoMTY5LjUyOSkucm90YXRlKFsyMCwwXSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51TW9sbHdlaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKEt0LHVlLEgpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvSW50ZXJydXB0ZWRTaW51c29pZGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKFEsZmUpLnNjYWxlKDE1Mi42Mykucm90YXRlKFstMjAsMF0pfSx0Lmdlb0thdnJheXNraXk3PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihoZSkuc2NhbGUoMTU4LjgzNyl9LHQuZ2VvS2F2cmF5c2tpeTdSYXc9aGUsdC5nZW9MYWdyYW5nZT1mdW5jdGlvbigpe3ZhciB0PS41LHI9ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihwZSksbj1yKHQpO3JldHVybiBuLnNwYWNpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PStlKTp0fSxuLnNjYWxlKDEyNC43NSl9LHQuZ2VvTGFncmFuZ2VSYXc9cGUsdC5nZW9MYXJyaXZlZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24obWUpLnNjYWxlKDk3LjI2NzIpfSx0Lmdlb0xhcnJpdmVlUmF3PW1lLHQuZ2VvTGFza293c2tpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihnZSkuc2NhbGUoMTM5Ljk4KX0sdC5nZW9MYXNrb3dza2lSYXc9Z2UsdC5nZW9MaXR0cm93PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbih2ZSkuc2NhbGUoMTQ0LjA0OSkuY2xpcEFuZ2xlKDg5Ljk5OSl9LHQuZ2VvTGl0dHJvd1Jhdz12ZSx0Lmdlb0xveGltdXRoYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSyh5ZSkucGFyYWxsZWwoNDApLnNjYWxlKDE1OC44MzcpfSx0Lmdlb0xveGltdXRoYWxSYXc9eWUsdC5nZW9NaWxsZXI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKHhlKS5zY2FsZSgxMDguMzE4KX0sdC5nZW9NaWxsZXJSYXc9eGUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWM9TWUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNSYXc9YmUsdC5nZW9Nb2RpZmllZFN0ZXJlb2dyYXBoaWNBbGFza2E9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoX2UsWzE1MiwtNjRdKS5zY2FsZSgxNDAwKS5jZW50ZXIoWy0xNjAuOTA4LDYyLjQ4NjRdKS5jbGlwQW5nbGUoMzApLmFuZ2xlKDcuOCl9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljR3M0OD1mdW5jdGlvbigpe3JldHVybiBNZSh3ZSxbOTUsLTM4XSkuc2NhbGUoMWUzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTk2LjU1NjMsMzguODY3NV0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY0dzNTA9ZnVuY3Rpb24oKXtyZXR1cm4gTWUoVGUsWzEyMCwtNDVdKS5zY2FsZSgzNTkuNTEzKS5jbGlwQW5nbGUoNTUpLmNlbnRlcihbLTExNy40NzQsNTMuMDYyOF0pfSx0Lmdlb01vZGlmaWVkU3RlcmVvZ3JhcGhpY01pbGxlcj1mdW5jdGlvbigpe3JldHVybiBNZShrZSxbLTIwLC0xOF0pLnNjYWxlKDIwOS4wOTEpLmNlbnRlcihbMjAsMTYuNzIxNF0pLmNsaXBBbmdsZSg4Mil9LHQuZ2VvTW9kaWZpZWRTdGVyZW9ncmFwaGljTGVlPWZ1bmN0aW9uKCl7cmV0dXJuIE1lKEFlLFsxNjUsMTBdKS5zY2FsZSgyNTApLmNsaXBBbmdsZSgxMzApLmNlbnRlcihbLTE2NSwtMTBdKX0sdC5nZW9Nb2xsd2VpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFcpLnNjYWxlKDE2OS41MjkpfSx0Lmdlb01vbGx3ZWlkZVJhdz1XLHQuZ2VvTXRGbGF0UG9sYXJQYXJhYm9saWM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKExlKS5zY2FsZSgxNjQuODU5KX0sdC5nZW9NdEZsYXRQb2xhclBhcmFib2xpY1Jhdz1MZSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpYz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oQ2UpLnNjYWxlKDE4OC4yMDkpfSx0Lmdlb010RmxhdFBvbGFyUXVhcnRpY1Jhdz1DZSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oUGUpLnNjYWxlKDE2Ni41MTgpfSx0Lmdlb010RmxhdFBvbGFyU2ludXNvaWRhbFJhdz1QZSx0Lmdlb05hdHVyYWxFYXJ0aDI9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEllKS5zY2FsZSgxNzUuMjk1KX0sdC5nZW9OYXR1cmFsRWFydGgyUmF3PUllLHQuZ2VvTmVsbEhhbW1lcj1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oT2UpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvTmVsbEhhbW1lclJhdz1PZSx0Lmdlb0ludGVycnVwdGVkUXVhcnRpY0F1dGhhbGljPWZ1bmN0aW9uKCl7cmV0dXJuIGFlKGooMS8wKSx6ZSkucm90YXRlKFsyMCwwXSkuc2NhbGUoMTUyLjYzKX0sdC5nZW9OaWNvbG9zaT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oRGUpLnNjYWxlKDEyNy4yNjcpfSx0Lmdlb05pY29sb3NpUmF3PURlLHQuZ2VvUGF0dGVyc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihSZSkuc2NhbGUoMTM5LjMxOSl9LHQuZ2VvUGF0dGVyc29uUmF3PVJlLHQuZ2VvUG9seWNvbmljPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihGZSkuc2NhbGUoMTAzLjc0KX0sdC5nZW9Qb2x5Y29uaWNSYXc9RmUsdC5nZW9Qb2x5aGVkcmFsPVZlLHQuZ2VvUG9seWhlZHJhbEJ1dHRlcmZseT1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Hbm9tb25pYygpLnNjYWxlKDEpLnRyYW5zbGF0ZShbMCwwXSkucm90YXRlKFstclswXSwtclsxXV0pfTt2YXIgcj1ZZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybntmYWNlOmUscHJvamVjdDp0KGUpfX0pKTtyZXR1cm5bLTEsMCwwLDEsMCwxLDQsNV0uZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1yW3RdO24mJihuLmNoaWxkcmVufHwobi5jaGlsZHJlbj1bXSkpLnB1c2gocltlXSl9KSksVmUoclswXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gclt0PC15LzI/ZTwwPzY6NDp0PDA/ZTwwPzI6MDp0PHkvMj9lPDA/MzoxOmU8MD83OjVdfSkpLmFuZ2xlKC0zMCkuc2NhbGUoMTAxLjg1OCkuY2VudGVyKFswLDQ1XSl9LHQuZ2VvUG9seWhlZHJhbENvbGxpZ25vbj1mdW5jdGlvbih0KXt0PXR8fGZ1bmN0aW9uKHQpe3ZhciByPWUuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFhlKS50cmFuc2xhdGUoWzAsMF0pLnNjYWxlKDEpLnJvdGF0ZShyWzFdPjA/Wy1yWzBdLDBdOlsxODAtclswXSwxODBdKX07dmFyIHI9WWUubWFwKChmdW5jdGlvbihlKXtyZXR1cm57ZmFjZTplLHByb2plY3Q6dChlKX19KSk7cmV0dXJuWy0xLDAsMCwxLDAsMSw0LDVdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49clt0XTtuJiYobi5jaGlsZHJlbnx8KG4uY2hpbGRyZW49W10pKS5wdXNoKHJbZV0pfSkpLFZlKHJbMF0sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHJbdDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1XX0pKS5hbmdsZSgtMzApLnNjYWxlKDEyMS45MDYpLmNlbnRlcihbMCw0OC41OTA0XSl9LHQuZ2VvUG9seWhlZHJhbFdhdGVybWFuPWZ1bmN0aW9uKHQpe3Q9dHx8ZnVuY3Rpb24odCl7dmFyIHI9Nj09PXQubGVuZ3RoP2UuZ2VvQ2VudHJvaWQoe3R5cGU6Ik11bHRpUG9pbnQiLGNvb3JkaW5hdGVzOnR9KTp0WzBdO3JldHVybiBlLmdlb0dub21vbmljKCkuc2NhbGUoMSkudHJhbnNsYXRlKFswLDBdKS5yb3RhdGUoWy1yWzBdLC1yWzFdXSl9O3ZhciByPVllLm1hcCgoZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dC5tYXAoS2UpLG49ci5sZW5ndGgsaT1yW24tMV0sYT1bXSxvPTA7bzxuOysrbyllPXJbb10sYS5wdXNoKEplKFsuOTQ4NjgzMjk4MDUwNTEzOCppWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCplWzBdLC45NDg2ODMyOTgwNTA1MTM4KmlbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmVbMV0sLjk0ODY4MzI5ODA1MDUxMzgqaVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqZVsyXV0pLEplKFsuOTQ4NjgzMjk4MDUwNTEzOCplWzBdKy4zMTYyMjc3NjYwMTY4Mzc5NCppWzBdLC45NDg2ODMyOTgwNTA1MTM4KmVbMV0rLjMxNjIyNzc2NjAxNjgzNzk0KmlbMV0sLjk0ODY4MzI5ODA1MDUxMzgqZVsyXSsuMzE2MjI3NzY2MDE2ODM3OTQqaVsyXV0pKSxpPWU7cmV0dXJuIGF9KSksbj1bXSxpPVstMSwwLDAsMSwwLDEsNCw1XTtyLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBhLG8scz1ZZVtlXSxsPXMubGVuZ3RoLGM9bltlXT1bXSx1PTA7dTxsOysrdSlyLnB1c2goW3NbdV0sdFsoMip1KzIpJSgyKmwpXSx0WygyKnUrMSklKDIqbCldXSksaS5wdXNoKGUpLGMucHVzaCgoYT1LZSh0WygyKnUrMiklKDIqbCldKSxvPUtlKHRbKDIqdSsxKSUoMipsKV0pLFthWzFdKm9bMl0tYVsyXSpvWzFdLGFbMl0qb1swXS1hWzBdKm9bMl0sYVswXSpvWzFdLWFbMV0qb1swXV0pKX0pKTt2YXIgYT1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJue3Byb2plY3Q6dChlKSxmYWNlOmV9fSkpO3JldHVybiBpLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIHI9YVt0XTtyJiYoci5jaGlsZHJlbnx8KHIuY2hpbGRyZW49W10pKS5wdXNoKGFbZV0pfSkpLFZlKGFbMF0sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9byhlKSxpPVtyKm8odCksciptKHQpLG0oZSldLHM9dDwteS8yP2U8MD82OjQ6dDwwP2U8MD8yOjA6dDx5LzI/ZTwwPzM6MTplPDA/Nzo1LGw9bltzXTtyZXR1cm4gYVtaZShsWzBdLGkpPDA/OCszKnM6WmUobFsxXSxpKTwwPzgrMypzKzE6WmUobFsyXSxpKTwwPzgrMypzKzI6c119KSkuYW5nbGUoLTMwKS5zY2FsZSgxMTAuNjI1KS5jZW50ZXIoWzAsNDVdKX0sdC5nZW9Qcm9qZWN0PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLnN0cmVhbTtpZighbil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcHJvamVjdGlvbiIpO3N3aXRjaCh0JiZ0LnR5cGUpe2Nhc2UiRmVhdHVyZSI6cj10cjticmVhaztjYXNlIkZlYXR1cmVDb2xsZWN0aW9uIjpyPSRlO2JyZWFrO2RlZmF1bHQ6cj1lcn1yZXR1cm4gcih0LG4pfSx0Lmdlb0dyaW5nb3J0ZW5RdWluY3VuY2lhbD1mdW5jdGlvbigpe3JldHVybiBzcihCdCkuc2NhbGUoMTc2LjQyMyl9LHQuZ2VvUGVpcmNlUXVpbmN1bmNpYWw9bHIsdC5nZW9QaWVyY2VRdWluY3VuY2lhbD1scix0Lmdlb1F1YW50aXplPWZ1bmN0aW9uKHQsZSl7aWYoISgwPD0oZT0rZSkmJmU8PTIwKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZGlnaXRzIik7ZnVuY3Rpb24gcih0KXt2YXIgcj10Lmxlbmd0aCxuPTIsaT1uZXcgQXJyYXkocik7Zm9yKGlbMF09K3RbMF0udG9GaXhlZChlKSxpWzFdPSt0WzFdLnRvRml4ZWQoZSk7bjxyOylpW25dPXRbbl0sKytuO3JldHVybiBpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXIodFswXSksbj1bZV0saT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1yKHRbaV0pOyhhLmxlbmd0aD4yfHxhWzBdIT1lWzBdfHxhWzFdIT1lWzFdKSYmKG4ucHVzaChhKSxlPWEpfXJldHVybiAxPT09bi5sZW5ndGgmJnQubGVuZ3RoPjEmJm4ucHVzaChyKHRbdC5sZW5ndGgtMV0pKSxufWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQubWFwKGkpfWZ1bmN0aW9uIG8odCl7aWYobnVsbD09dClyZXR1cm4gdDt2YXIgZTtzd2l0Y2godC50eXBlKXtjYXNlIkdlb21ldHJ5Q29sbGVjdGlvbiI6ZT17dHlwZToiR2VvbWV0cnlDb2xsZWN0aW9uIixnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcy5tYXAobyl9O2JyZWFrO2Nhc2UiUG9pbnQiOmU9e3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpyKHQuY29vcmRpbmF0ZXMpfTticmVhaztjYXNlIk11bHRpUG9pbnQiOmU9e3R5cGU6dC50eXBlLGNvb3JkaW5hdGVzOm4odC5jb29yZGluYXRlcyl9O2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6aSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aUxpbmVTdHJpbmciOmNhc2UiUG9seWdvbiI6ZT17dHlwZTp0LnR5cGUsY29vcmRpbmF0ZXM6YSh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvbHlnb24iOmU9e3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlcy5tYXAoYSl9O2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHR9cmV0dXJuIG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9ZnVuY3Rpb24gcyh0KXt2YXIgZT17dHlwZToiRmVhdHVyZSIscHJvcGVydGllczp0LnByb3BlcnRpZXMsZ2VvbWV0cnk6byh0Lmdlb21ldHJ5KX07cmV0dXJuIG51bGwhPXQuaWQmJihlLmlkPXQuaWQpLG51bGwhPXQuYmJveCYmKGUuYmJveD10LmJib3gpLGV9aWYobnVsbCE9dClzd2l0Y2godC50eXBlKXtjYXNlIkZlYXR1cmUiOnJldHVybiBzKHQpO2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBsPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6dC5mZWF0dXJlcy5tYXAocyl9O3JldHVybiBudWxsIT10LmJib3gmJihsLmJib3g9dC5iYm94KSxsO2RlZmF1bHQ6cmV0dXJuIG8odCl9cmV0dXJuIHR9LHQuZ2VvUXVpbmN1bmNpYWw9c3IsdC5nZW9SZWN0YW5ndWxhclBvbHljb25pYz1mdW5jdGlvbigpe3JldHVybiBLKGNyKS5zY2FsZSgxMzEuMjE1KX0sdC5nZW9SZWN0YW5ndWxhclBvbHljb25pY1Jhdz1jcix0Lmdlb1JvYmluc29uPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihmcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9Sb2JpbnNvblJhdz1mcix0Lmdlb1NhdGVsbGl0ZT1mdW5jdGlvbigpe3ZhciB0PTIscj0wLG49ZS5nZW9Qcm9qZWN0aW9uTXV0YXRvcihociksaT1uKHQscik7cmV0dXJuIGkuZGlzdGFuY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/bih0PStlLHIpOnR9LGkudGlsdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9uKHQscj1lKk0pOnIqQX0saS5zY2FsZSg0MzIuMTQ3KS5jbGlwQW5nbGUoRSgxL3QpKkEtMWUtNil9LHQuZ2VvU2F0ZWxsaXRlUmF3PWhyLHQuZ2VvU2ludU1vbGx3ZWlkZT1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oS3QpLnJvdGF0ZShbLTIwLC01NV0pLnNjYWxlKDE2NC4yNjMpLmNlbnRlcihbMCwtNS40MDM2XSl9LHQuZ2VvU2ludU1vbGx3ZWlkZVJhdz1LdCx0Lmdlb1NpbnVzb2lkYWw9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKFEpLnNjYWxlKDE1Mi42Myl9LHQuZ2VvU2ludXNvaWRhbFJhdz1RLHQuZ2VvU3RpdGNoPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXQpcmV0dXJuIHQ7c3dpdGNoKHQudHlwZSl7Y2FzZSJGZWF0dXJlIjpyZXR1cm4gd3IodCk7Y2FzZSJGZWF0dXJlQ29sbGVjdGlvbiI6dmFyIGU9e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp0LmZlYXR1cmVzLm1hcCh3cil9O3JldHVybiBudWxsIT10LmJib3gmJihlLmJib3g9dC5iYm94KSxlO2RlZmF1bHQ6cmV0dXJuIFRyKHQpfX0sdC5nZW9UaW1lcz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oa3IpLnNjYWxlKDE0Ni4xNTMpfSx0Lmdlb1RpbWVzUmF3PWtyLHQuZ2VvVHdvUG9pbnRBemltdXRoYWw9U3IsdC5nZW9Ud29Qb2ludEF6aW11dGhhbFJhdz1Ncix0Lmdlb1R3b1BvaW50QXppbXV0aGFsVXNhPWZ1bmN0aW9uKCl7cmV0dXJuIFNyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoNjApLnNjYWxlKDQwMCl9LHQuZ2VvVHdvUG9pbnRFcXVpZGlzdGFudD1Mcix0Lmdlb1R3b1BvaW50RXF1aWRpc3RhbnRSYXc9RXIsdC5nZW9Ud29Qb2ludEVxdWlkaXN0YW50VXNhPWZ1bmN0aW9uKCl7cmV0dXJuIExyKFstMTU4LDIxLjVdLFstNzcsMzldKS5jbGlwQW5nbGUoMTMwKS5zY2FsZSgxMjIuNTcxKX0sdC5nZW9WYW5EZXJHcmludGVuPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihDcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlblJhdz1Dcix0Lmdlb1ZhbkRlckdyaW50ZW4yPWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihQcikuc2NhbGUoNzkuNDE4Myl9LHQuZ2VvVmFuRGVyR3JpbnRlbjJSYXc9UHIsdC5nZW9WYW5EZXJHcmludGVuMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oSXIpLnNjYWxlKDc5LjQxODMpfSx0Lmdlb1ZhbkRlckdyaW50ZW4zUmF3PUlyLHQuZ2VvVmFuRGVyR3JpbnRlbjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKE9yKS5zY2FsZSgxMjcuMTYpfSx0Lmdlb1ZhbkRlckdyaW50ZW40UmF3PU9yLHQuZ2VvV2FnbmVyPURyLHQuZ2VvV2FnbmVyNz1mdW5jdGlvbigpe3JldHVybiBEcigpLnBvbGVsaW5lKDY1KS5wYXJhbGxlbHMoNjApLmluZmxhdGlvbigwKS5yYXRpbygyMDApLnNjYWxlKDE3Mi42MzMpfSx0Lmdlb1dhZ25lclJhdz16cix0Lmdlb1dhZ25lcjQ9ZnVuY3Rpb24oKXtyZXR1cm4gZS5nZW9Qcm9qZWN0aW9uKEJyKS5zY2FsZSgxNzYuODQpfSx0Lmdlb1dhZ25lcjRSYXc9QnIsdC5nZW9XYWduZXI2PWZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2VvUHJvamVjdGlvbihOcikuc2NhbGUoMTUyLjYzKX0sdC5nZW9XYWduZXI2UmF3PU5yLHQuZ2VvV2llY2hlbD1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oanIpLnJvdGF0ZShbMCwtOTAsNDVdKS5zY2FsZSgxMjQuNzUpLmNsaXBBbmdsZSgxNzkuOTk5KX0sdC5nZW9XaWVjaGVsUmF3PWpyLHQuZ2VvV2lua2VsMz1mdW5jdGlvbigpe3JldHVybiBlLmdlb1Byb2plY3Rpb24oVXIpLnNjYWxlKDE1OC44MzcpfSx0Lmdlb1dpbmtlbDNSYXc9VXIsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTUsImQzLWdlbyI6MTYyfV0sMTYyOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy1hcnJheSIpKTppKChuPW58fHNlbGYpLmQzPW4uZDN8fHt9LG4uZDMpfSh0aGlzLChmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKCl7cmV0dXJuIG5ldyBufWZ1bmN0aW9uIG4oKXt0aGlzLnJlc2V0KCl9bi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm4scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnM9dGhpcy50PTB9LGFkZDpmdW5jdGlvbih0KXthKGksdCx0aGlzLnQpLGEodGhpcyxpLnMsdGhpcy5zKSx0aGlzLnM/dGhpcy50Kz1pLnQ6dGhpcy5zPWkudH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN9fTt2YXIgaT1uZXcgbjtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnM9ZStyLGk9bi1lLGE9bi1pO3QudD1lLWErKHItaSl9dmFyIG89MWUtNixzPU1hdGguUEksbD1zLzIsYz1zLzQsdT0yKnMsZj0xODAvcyxoPXMvMTgwLHA9TWF0aC5hYnMsZD1NYXRoLmF0YW4sbT1NYXRoLmF0YW4yLGc9TWF0aC5jb3Msdj1NYXRoLmNlaWwseT1NYXRoLmV4cCx4PU1hdGgubG9nLGI9TWF0aC5wb3csXz1NYXRoLnNpbix3PU1hdGguc2lnbnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD8xOnQ8MD8tMTowfSxUPU1hdGguc3FydCxrPU1hdGgudGFuO2Z1bmN0aW9uIEEodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/czpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdD4xP2w6dDwtMT8tbDpNYXRoLmFzaW4odCl9ZnVuY3Rpb24gUyh0KXtyZXR1cm4odD1fKHQvMikpKnR9ZnVuY3Rpb24gRSgpe31mdW5jdGlvbiBMKHQsZSl7dCYmUC5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpJiZQW3QudHlwZV0odCxlKX12YXIgQz17RmVhdHVyZTpmdW5jdGlvbih0LGUpe0wodC5nZW9tZXRyeSxlKX0sRmVhdHVyZUNvbGxlY3Rpb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5mZWF0dXJlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KUwocltuXS5nZW9tZXRyeSxlKX19LFA9e1NwaGVyZTpmdW5jdGlvbih0LGUpe2Uuc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKHQsZSl7dD10LmNvb3JkaW5hdGVzLGUucG9pbnQodFswXSx0WzFdLHRbMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOyl0PXJbbl0sZS5wb2ludCh0WzBdLHRbMV0sdFsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24odCxlKXtJKHQuY29vcmRpbmF0ZXMsZSwwKX0sTXVsdGlMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylJKHJbbl0sZSwwKX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe08odC5jb29yZGluYXRlcyxlKX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylPKHJbbl0sZSl9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylMKHJbbl0sZSl9fTtmdW5jdGlvbiBJKHQsZSxyKXt2YXIgbixpPS0xLGE9dC5sZW5ndGgtcjtmb3IoZS5saW5lU3RhcnQoKTsrK2k8YTspbj10W2ldLGUucG9pbnQoblswXSxuWzFdLG5bMl0pO2UubGluZUVuZCgpfWZ1bmN0aW9uIE8odCxlKXt2YXIgcj0tMSxuPXQubGVuZ3RoO2ZvcihlLnBvbHlnb25TdGFydCgpOysrcjxuOylJKHRbcl0sZSwxKTtlLnBvbHlnb25FbmQoKX1mdW5jdGlvbiB6KHQsZSl7dCYmQy5oYXNPd25Qcm9wZXJ0eSh0LnR5cGUpP0NbdC50eXBlXSh0LGUpOkwodCxlKX12YXIgRCxSLEYsQixOLGo9cigpLFU9cigpLFY9e3BvaW50OkUsbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2oucmVzZXQoKSxWLmxpbmVTdGFydD1ILFYubGluZUVuZD1xfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dmFyIHQ9K2o7VS5hZGQodDwwP3UrdDp0KSx0aGlzLmxpbmVTdGFydD10aGlzLmxpbmVFbmQ9dGhpcy5wb2ludD1FfSxzcGhlcmU6ZnVuY3Rpb24oKXtVLmFkZCh1KX19O2Z1bmN0aW9uIEgoKXtWLnBvaW50PUd9ZnVuY3Rpb24gcSgpe1koRCxSKX1mdW5jdGlvbiBHKHQsZSl7Vi5wb2ludD1ZLEQ9dCxSPWUsRj10Kj1oLEI9ZyhlPShlKj1oKS8yK2MpLE49XyhlKX1mdW5jdGlvbiBZKHQsZSl7dmFyIHI9KHQqPWgpLUYsbj1yPj0wPzE6LTEsaT1uKnIsYT1nKGU9KGUqPWgpLzIrYyksbz1fKGUpLHM9TipvLGw9QiphK3MqZyhpKSx1PXMqbipfKGkpO2ouYWRkKG0odSxsKSksRj10LEI9YSxOPW99ZnVuY3Rpb24gVyh0KXtyZXR1cm5bbSh0WzFdLHRbMF0pLE0odFsyXSldfWZ1bmN0aW9uIFgodCl7dmFyIGU9dFswXSxyPXRbMV0sbj1nKHIpO3JldHVybltuKmcoZSksbipfKGUpLF8ocildfWZ1bmN0aW9uIFoodCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0WzFdKmVbMl0tdFsyXSplWzFdLHRbMl0qZVswXS10WzBdKmVbMl0sdFswXSplWzFdLXRbMV0qZVswXV19ZnVuY3Rpb24gSyh0LGUpe3RbMF0rPWVbMF0sdFsxXSs9ZVsxXSx0WzJdKz1lWzJdfWZ1bmN0aW9uIFEodCxlKXtyZXR1cm5bdFswXSplLHRbMV0qZSx0WzJdKmVdfWZ1bmN0aW9uICQodCl7dmFyIGU9VCh0WzBdKnRbMF0rdFsxXSp0WzFdK3RbMl0qdFsyXSk7dFswXS89ZSx0WzFdLz1lLHRbMl0vPWV9dmFyIHR0LGV0LHJ0LG50LGl0LGF0LG90LHN0LGx0LGN0LHV0LGZ0LGh0LHB0LGR0LG10LGd0LHZ0LHl0LHh0LGJ0LF90LHd0LFR0LGt0LEF0LE10PXIoKSxTdD17cG9pbnQ6RXQsbGluZVN0YXJ0OkN0LGxpbmVFbmQ6UHQscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7U3QucG9pbnQ9SXQsU3QubGluZVN0YXJ0PU90LFN0LmxpbmVFbmQ9enQsTXQucmVzZXQoKSxWLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7Vi5wb2x5Z29uRW5kKCksU3QucG9pbnQ9RXQsU3QubGluZVN0YXJ0PUN0LFN0LmxpbmVFbmQ9UHQsajwwPyh0dD0tKHJ0PTE4MCksZXQ9LShudD05MCkpOk10Pm8/bnQ9OTA6TXQ8LW8mJihldD0tOTApLGN0WzBdPXR0LGN0WzFdPXJ0fSxzcGhlcmU6ZnVuY3Rpb24oKXt0dD0tKHJ0PTE4MCksZXQ9LShudD05MCl9fTtmdW5jdGlvbiBFdCh0LGUpe2x0LnB1c2goY3Q9W3R0PXQscnQ9dF0pLGU8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSl9ZnVuY3Rpb24gTHQodCxlKXt2YXIgcj1YKFt0KmgsZSpoXSk7aWYoc3Qpe3ZhciBuPUooc3QsciksaT1KKFtuWzFdLC1uWzBdLDBdLG4pOyQoaSksaT1XKGkpO3ZhciBhLG89dC1pdCxzPW8+MD8xOi0xLGw9aVswXSpmKnMsYz1wKG8pPjE4MDtjXihzKml0PGwmJmw8cyp0KT8oYT1pWzFdKmYpPm50JiYobnQ9YSk6Y14ocyppdDwobD0obCszNjApJTM2MC0xODApJiZsPHMqdCk/KGE9LWlbMV0qZik8ZXQmJihldD1hKTooZTxldCYmKGV0PWUpLGU+bnQmJihudD1lKSksYz90PGl0P0R0KHR0LHQpPkR0KHR0LHJ0KSYmKHJ0PXQpOkR0KHQscnQpPkR0KHR0LHJ0KSYmKHR0PXQpOnJ0Pj10dD8odDx0dCYmKHR0PXQpLHQ+cnQmJihydD10KSk6dD5pdD9EdCh0dCx0KT5EdCh0dCxydCkmJihydD10KTpEdCh0LHJ0KT5EdCh0dCxydCkmJih0dD10KX1lbHNlIGx0LnB1c2goY3Q9W3R0PXQscnQ9dF0pO2U8ZXQmJihldD1lKSxlPm50JiYobnQ9ZSksc3Q9cixpdD10fWZ1bmN0aW9uIEN0KCl7U3QucG9pbnQ9THR9ZnVuY3Rpb24gUHQoKXtjdFswXT10dCxjdFsxXT1ydCxTdC5wb2ludD1FdCxzdD1udWxsfWZ1bmN0aW9uIEl0KHQsZSl7aWYoc3Qpe3ZhciByPXQtaXQ7TXQuYWRkKHAocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cil9ZWxzZSBhdD10LG90PWU7Vi5wb2ludCh0LGUpLEx0KHQsZSl9ZnVuY3Rpb24gT3QoKXtWLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHp0KCl7SXQoYXQsb3QpLFYubGluZUVuZCgpLHAoTXQpPm8mJih0dD0tKHJ0PTE4MCkpLGN0WzBdPXR0LGN0WzFdPXJ0LHN0PW51bGx9ZnVuY3Rpb24gRHQodCxlKXtyZXR1cm4oZS09dCk8MD9lKzM2MDplfWZ1bmN0aW9uIFJ0KHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBGdCh0LGUpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PWUmJmU8PXRbMV06ZTx0WzBdfHx0WzFdPGV9dmFyIEJ0PXtzcGhlcmU6RSxwb2ludDpOdCxsaW5lU3RhcnQ6VXQsbGluZUVuZDpxdCxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtCdC5saW5lU3RhcnQ9R3QsQnQubGluZUVuZD1ZdH0scG9seWdvbkVuZDpmdW5jdGlvbigpe0J0LmxpbmVTdGFydD1VdCxCdC5saW5lRW5kPXF0fX07ZnVuY3Rpb24gTnQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCk7anQocipnKHQpLHIqXyh0KSxfKGUpKX1mdW5jdGlvbiBqdCh0LGUscil7Kyt1dCxodCs9KHQtaHQpL3V0LHB0Kz0oZS1wdCkvdXQsZHQrPShyLWR0KS91dH1mdW5jdGlvbiBVdCgpe0J0LnBvaW50PVZ0fWZ1bmN0aW9uIFZ0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpO1R0PXIqZyh0KSxrdD1yKl8odCksQXQ9XyhlKSxCdC5wb2ludD1IdCxqdChUdCxrdCxBdCl9ZnVuY3Rpb24gSHQodCxlKXt0Kj1oO3ZhciByPWcoZSo9aCksbj1yKmcodCksaT1yKl8odCksYT1fKGUpLG89bShUKChvPWt0KmEtQXQqaSkqbysobz1BdCpuLVR0KmEpKm8rKG89VHQqaS1rdCpuKSpvKSxUdCpuK2t0KmkrQXQqYSk7ZnQrPW8sbXQrPW8qKFR0KyhUdD1uKSksZ3QrPW8qKGt0KyhrdD1pKSksdnQrPW8qKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIHF0KCl7QnQucG9pbnQ9TnR9ZnVuY3Rpb24gR3QoKXtCdC5wb2ludD1XdH1mdW5jdGlvbiBZdCgpe1h0KF90LHd0KSxCdC5wb2ludD1OdH1mdW5jdGlvbiBXdCh0LGUpe190PXQsd3Q9ZSx0Kj1oLGUqPWgsQnQucG9pbnQ9WHQ7dmFyIHI9ZyhlKTtUdD1yKmcodCksa3Q9cipfKHQpLEF0PV8oZSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFh0KHQsZSl7dCo9aDt2YXIgcj1nKGUqPWgpLG49cipnKHQpLGk9cipfKHQpLGE9XyhlKSxvPWt0KmEtQXQqaSxzPUF0Km4tVHQqYSxsPVR0Kmkta3QqbixjPVQobypvK3MqcytsKmwpLHU9TShjKSxmPWMmJi11L2M7eXQrPWYqbyx4dCs9ZipzLGJ0Kz1mKmwsZnQrPXUsbXQrPXUqKFR0KyhUdD1uKSksZ3QrPXUqKGt0KyhrdD1pKSksdnQrPXUqKEF0KyhBdD1hKSksanQoVHQsa3QsQXQpfWZ1bmN0aW9uIFp0KHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBKdCh0LGUpe2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gcj10KHIsbiksZShyWzBdLHJbMV0pfXJldHVybiB0LmludmVydCYmZS5pbnZlcnQmJihyLmludmVydD1mdW5jdGlvbihyLG4pe3JldHVybihyPWUuaW52ZXJ0KHIsbikpJiZ0LmludmVydChyWzBdLHJbMV0pfSkscn1mdW5jdGlvbiBLdCh0LGUpe3JldHVybltwKHQpPnM/dCtNYXRoLnJvdW5kKC10L3UpKnU6dCxlXX1mdW5jdGlvbiBRdCh0LGUscil7cmV0dXJuKHQlPXUpP2V8fHI/SnQodGUodCksZWUoZSxyKSk6dGUodCk6ZXx8cj9lZShlLHIpOkt0fWZ1bmN0aW9uICR0KHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblsoZSs9dCk+cz9lLXU6ZTwtcz9lK3U6ZSxyXX19ZnVuY3Rpb24gdGUodCl7dmFyIGU9JHQodCk7cmV0dXJuIGUuaW52ZXJ0PSR0KC10KSxlfWZ1bmN0aW9uIGVlKHQsZSl7dmFyIHI9Zyh0KSxuPV8odCksaT1nKGUpLGE9XyhlKTtmdW5jdGlvbiBvKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKnIrcypuO3JldHVyblttKGwqaS11KmEscypyLWMqbiksTSh1KmkrbCphKV19cmV0dXJuIG8uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7dmFyIG89ZyhlKSxzPWcodCkqbyxsPV8odCkqbyxjPV8oZSksdT1jKmktbCphO3JldHVyblttKGwqaStjKmEscypyK3UqbiksTSh1KnItcypuKV19LG99ZnVuY3Rpb24gcmUodCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4oZT10KGVbMF0qaCxlWzFdKmgpKVswXSo9ZixlWzFdKj1mLGV9cmV0dXJuIHQ9UXQodFswXSpoLHRbMV0qaCx0Lmxlbmd0aD4yP3RbMl0qaDowKSxlLmludmVydD1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmludmVydChlWzBdKmgsZVsxXSpoKSlbMF0qPWYsZVsxXSo9ZixlfSxlfWZ1bmN0aW9uIG5lKHQsZSxyLG4saSxhKXtpZihyKXt2YXIgbz1nKGUpLHM9XyhlKSxsPW4qcjtudWxsPT1pPyhpPWUrbip1LGE9ZS1sLzIpOihpPWllKG8saSksYT1pZShvLGEpLChuPjA/aTxhOmk+YSkmJihpKz1uKnUpKTtmb3IodmFyIGMsZj1pO24+MD9mPmE6ZjxhO2YtPWwpYz1XKFtvLC1zKmcoZiksLXMqXyhmKV0pLHQucG9pbnQoY1swXSxjWzFdKX19ZnVuY3Rpb24gaWUodCxlKXsoZT1YKGUpKVswXS09dCwkKGUpO3ZhciByPUEoLWVbMV0pO3JldHVybigoLWVbMl08MD8tcjpyKSt1LW8pJXV9ZnVuY3Rpb24gYWUoKXt2YXIgdCxlPVtdO3JldHVybntwb2ludDpmdW5jdGlvbihlLHIsbil7dC5wdXNoKFtlLHIsbl0pfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtlLnB1c2godD1bXSl9LGxpbmVFbmQ6RSxyZWpvaW46ZnVuY3Rpb24oKXtlLmxlbmd0aD4xJiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSl9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciByPWU7cmV0dXJuIGU9W10sdD1udWxsLHJ9fX1mdW5jdGlvbiBvZSh0LGUpe3JldHVybiBwKHRbMF0tZVswXSk8byYmcCh0WzFdLWVbMV0pPG99ZnVuY3Rpb24gc2UodCxlLHIsbil7dGhpcy54PXQsdGhpcy56PWUsdGhpcy5vPXIsdGhpcy5lPW4sdGhpcy52PSExLHRoaXMubj10aGlzLnA9bnVsbH1mdW5jdGlvbiBsZSh0LGUscixuLGkpe3ZhciBhLHMsbD1bXSxjPVtdO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoISgoZT10Lmxlbmd0aC0xKTw9MCkpe3ZhciBlLHIsbj10WzBdLHM9dFtlXTtpZihvZShuLHMpKXtpZighblsyXSYmIXNbMl0pe2ZvcihpLmxpbmVTdGFydCgpLGE9MDthPGU7KythKWkucG9pbnQoKG49dFthXSlbMF0sblsxXSk7cmV0dXJuIHZvaWQgaS5saW5lRW5kKCl9c1swXSs9MipvfWwucHVzaChyPW5ldyBzZShuLHQsbnVsbCwhMCkpLGMucHVzaChyLm89bmV3IHNlKG4sbnVsbCxyLCExKSksbC5wdXNoKHI9bmV3IHNlKHMsdCxudWxsLCExKSksYy5wdXNoKHIubz1uZXcgc2UocyxudWxsLHIsITApKX19KSksbC5sZW5ndGgpe2ZvcihjLnNvcnQoZSksY2UobCksY2UoYyksYT0wLHM9Yy5sZW5ndGg7YTxzOysrYSljW2FdLmU9cj0hcjtmb3IodmFyIHUsZixoPWxbMF07Oyl7Zm9yKHZhciBwPWgsZD0hMDtwLnY7KWlmKChwPXAubik9PT1oKXJldHVybjt1PXAueixpLmxpbmVTdGFydCgpO2Rve2lmKHAudj1wLm8udj0hMCxwLmUpe2lmKGQpZm9yKGE9MCxzPXUubGVuZ3RoO2E8czsrK2EpaS5wb2ludCgoZj11W2FdKVswXSxmWzFdKTtlbHNlIG4ocC54LHAubi54LDEsaSk7cD1wLm59ZWxzZXtpZihkKWZvcih1PXAucC56LGE9dS5sZW5ndGgtMTthPj0wOy0tYSlpLnBvaW50KChmPXVbYV0pWzBdLGZbMV0pO2Vsc2UgbihwLngscC5wLngsLTEsaSk7cD1wLnB9dT0ocD1wLm8pLnosZD0hZH13aGlsZSghcC52KTtpLmxpbmVFbmQoKX19fWZ1bmN0aW9uIGNlKHQpe2lmKGU9dC5sZW5ndGgpe2Zvcih2YXIgZSxyLG49MCxpPXRbMF07KytuPGU7KWkubj1yPXRbbl0sci5wPWksaT1yO2kubj1yPXRbMF0sci5wPWl9fUt0LmludmVydD1LdDt2YXIgdWU9cigpO2Z1bmN0aW9uIGZlKHQpe3JldHVybiBwKHRbMF0pPD1zP3RbMF06dyh0WzBdKSooKHAodFswXSkrcykldS1zKX1mdW5jdGlvbiBoZSh0LGUpe3ZhciByPWZlKGUpLG49ZVsxXSxpPV8obiksYT1bXyhyKSwtZyhyKSwwXSxmPTAsaD0wO3VlLnJlc2V0KCksMT09PWk/bj1sK286LTE9PT1pJiYobj0tbC1vKTtmb3IodmFyIHA9MCxkPXQubGVuZ3RoO3A8ZDsrK3ApaWYoeT0odj10W3BdKS5sZW5ndGgpZm9yKHZhciB2LHkseD12W3ktMV0sYj1mZSh4KSx3PXhbMV0vMitjLFQ9Xyh3KSxrPWcodyksQT0wO0E8eTsrK0EsYj1FLFQ9QyxrPVAseD1TKXt2YXIgUz12W0FdLEU9ZmUoUyksTD1TWzFdLzIrYyxDPV8oTCksUD1nKEwpLEk9RS1iLE89ST49MD8xOi0xLHo9TypJLEQ9ej5zLFI9VCpDO2lmKHVlLmFkZChtKFIqTypfKHopLGsqUCtSKmcoeikpKSxmKz1EP0krTyp1OkksRF5iPj1yXkU+PXIpe3ZhciBGPUooWCh4KSxYKFMpKTskKEYpO3ZhciBCPUooYSxGKTskKEIpO3ZhciBOPShEXkk+PTA/LTE6MSkqTShCWzJdKTsobj5OfHxuPT09TiYmKEZbMF18fEZbMV0pKSYmKGgrPUReST49MD8xOi0xKX19cmV0dXJuKGY8LW98fGY8byYmdWU8LW8pXjEmaH1mdW5jdGlvbiBwZSh0LHIsbixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIG8scyxsLGM9cihhKSx1PWFlKCksZj1yKHUpLGg9ITEscD17cG9pbnQ6ZCxsaW5lU3RhcnQ6ZyxsaW5lRW5kOnYscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7cC5wb2ludD15LHAubGluZVN0YXJ0PXgscC5saW5lRW5kPWIscz1bXSxvPVtdfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7cC5wb2ludD1kLHAubGluZVN0YXJ0PWcscC5saW5lRW5kPXYscz1lLm1lcmdlKHMpO3ZhciB0PWhlKG8saSk7cy5sZW5ndGg/KGh8fChhLnBvbHlnb25TdGFydCgpLGg9ITApLGxlKHMsbWUsdCxuLGEpKTp0JiYoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpKSxoJiYoYS5wb2x5Z29uRW5kKCksaD0hMSkscz1vPW51bGx9LHNwaGVyZTpmdW5jdGlvbigpe2EucG9seWdvblN0YXJ0KCksYS5saW5lU3RhcnQoKSxuKG51bGwsbnVsbCwxLGEpLGEubGluZUVuZCgpLGEucG9seWdvbkVuZCgpfX07ZnVuY3Rpb24gZChlLHIpe3QoZSxyKSYmYS5wb2ludChlLHIpfWZ1bmN0aW9uIG0odCxlKXtjLnBvaW50KHQsZSl9ZnVuY3Rpb24gZygpe3AucG9pbnQ9bSxjLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHYoKXtwLnBvaW50PWQsYy5saW5lRW5kKCl9ZnVuY3Rpb24geSh0LGUpe2wucHVzaChbdCxlXSksZi5wb2ludCh0LGUpfWZ1bmN0aW9uIHgoKXtmLmxpbmVTdGFydCgpLGw9W119ZnVuY3Rpb24gYigpe3kobFswXVswXSxsWzBdWzFdKSxmLmxpbmVFbmQoKTt2YXIgdCxlLHIsbixpPWYuY2xlYW4oKSxjPXUucmVzdWx0KCkscD1jLmxlbmd0aDtpZihsLnBvcCgpLG8ucHVzaChsKSxsPW51bGwscClpZigxJmkpe2lmKChlPShyPWNbMF0pLmxlbmd0aC0xKT4wKXtmb3IoaHx8KGEucG9seWdvblN0YXJ0KCksaD0hMCksYS5saW5lU3RhcnQoKSx0PTA7dDxlOysrdClhLnBvaW50KChuPXJbdF0pWzBdLG5bMV0pO2EubGluZUVuZCgpfX1lbHNlIHA+MSYmMiZpJiZjLnB1c2goYy5wb3AoKS5jb25jYXQoYy5zaGlmdCgpKSkscy5wdXNoKGMuZmlsdGVyKGRlKSl9cmV0dXJuIHB9fWZ1bmN0aW9uIGRlKHQpe3JldHVybiB0Lmxlbmd0aD4xfWZ1bmN0aW9uIG1lKHQsZSl7cmV0dXJuKCh0PXQueClbMF08MD90WzFdLWwtbzpsLXRbMV0pLSgoZT1lLngpWzBdPDA/ZVsxXS1sLW86bC1lWzFdKX12YXIgZ2U9cGUoKGZ1bmN0aW9uKCl7cmV0dXJuITB9KSwoZnVuY3Rpb24odCl7dmFyIGUscj1OYU4sbj1OYU4saT1OYU47cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3QubGluZVN0YXJ0KCksZT0xfSxwb2ludDpmdW5jdGlvbihhLGMpe3ZhciB1PWE+MD9zOi1zLGY9cChhLXIpO3AoZi1zKTxvPyh0LnBvaW50KHIsbj0obitjKS8yPjA/bDotbCksdC5wb2ludChpLG4pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh1LG4pLHQucG9pbnQoYSxuKSxlPTApOmkhPT11JiZmPj1zJiYocChyLWkpPG8mJihyLT1pKm8pLHAoYS11KTxvJiYoYS09dSpvKSxuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscz1fKHQtcik7cmV0dXJuIHAocyk+bz9kKChfKGUpKihhPWcobikpKl8ociktXyhuKSooaT1nKGUpKSpfKHQpKS8oaSphKnMpKTooZStuKS8yfShyLG4sYSxjKSx0LnBvaW50KGksbiksdC5saW5lRW5kKCksdC5saW5lU3RhcnQoKSx0LnBvaW50KHUsbiksZT0wKSx0LnBvaW50KHI9YSxuPWMpLGk9dX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLHI9bj1OYU59LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIDItZX19fSksKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpO2lmKG51bGw9PXQpaT1yKmwsbi5wb2ludCgtcyxpKSxuLnBvaW50KDAsaSksbi5wb2ludChzLGkpLG4ucG9pbnQocywwKSxuLnBvaW50KHMsLWkpLG4ucG9pbnQoMCwtaSksbi5wb2ludCgtcywtaSksbi5wb2ludCgtcywwKSxuLnBvaW50KC1zLGkpO2Vsc2UgaWYocCh0WzBdLWVbMF0pPm8pe3ZhciBhPXRbMF08ZVswXT9zOi1zO2k9ciphLzIsbi5wb2ludCgtYSxpKSxuLnBvaW50KDAsaSksbi5wb2ludChhLGkpfWVsc2Ugbi5wb2ludChlWzBdLGVbMV0pfSksWy1zLC1sXSk7ZnVuY3Rpb24gdmUodCl7dmFyIGU9Zyh0KSxyPTYqaCxuPWU+MCxpPXAoZSk+bztmdW5jdGlvbiBhKHQscil7cmV0dXJuIGcodCkqZyhyKT5lfWZ1bmN0aW9uIGwodCxyLG4pe3ZhciBpPVsxLDAsMF0sYT1KKFgodCksWChyKSksbD1aKGEsYSksYz1hWzBdLHU9bC1jKmM7aWYoIXUpcmV0dXJuIW4mJnQ7dmFyIGY9ZSpsL3UsaD0tZSpjL3UsZD1KKGksYSksbT1RKGksZik7SyhtLFEoYSxoKSk7dmFyIGc9ZCx2PVoobSxnKSx5PVooZyxnKSx4PXYqdi15KihaKG0sbSktMSk7aWYoISh4PDApKXt2YXIgYj1UKHgpLF89UShnLCgtdi1iKS95KTtpZihLKF8sbSksXz1XKF8pLCFuKXJldHVybiBfO3ZhciB3LGs9dFswXSxBPXJbMF0sTT10WzFdLFM9clsxXTtBPGsmJih3PWssaz1BLEE9dyk7dmFyIEU9QS1rLEw9cChFLXMpPG87aWYoIUwmJlM8TSYmKHc9TSxNPVMsUz13KSxMfHxFPG8/TD9NK1M+MF5fWzFdPChwKF9bMF0tayk8bz9NOlMpOk08PV9bMV0mJl9bMV08PVM6RT5zXihrPD1fWzBdJiZfWzBdPD1BKSl7dmFyIEM9UShnLCgtditiKS95KTtyZXR1cm4gSyhDLG0pLFtfLFcoQyldfX19ZnVuY3Rpb24gYyhlLHIpe3ZhciBpPW4/dDpzLXQsYT0wO3JldHVybiBlPC1pP2F8PTE6ZT5pJiYoYXw9MikscjwtaT9hfD00OnI+aSYmKGF8PTgpLGF9cmV0dXJuIHBlKGEsKGZ1bmN0aW9uKHQpe3ZhciBlLHIsbyx1LGY7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe3U9bz0hMSxmPTF9LHBvaW50OmZ1bmN0aW9uKGgscCl7dmFyIGQsbT1baCxwXSxnPWEoaCxwKSx2PW4/Zz8wOmMoaCxwKTpnP2MoaCsoaDwwP3M6LXMpLHApOjA7aWYoIWUmJih1PW89ZykmJnQubGluZVN0YXJ0KCksZyE9PW8mJighKGQ9bChlLG0pKXx8b2UoZSxkKXx8b2UobSxkKSkmJihtWzJdPTEpLGchPT1vKWY9MCxnPyh0LmxpbmVTdGFydCgpLGQ9bChtLGUpLHQucG9pbnQoZFswXSxkWzFdKSk6KGQ9bChlLG0pLHQucG9pbnQoZFswXSxkWzFdLDIpLHQubGluZUVuZCgpKSxlPWQ7ZWxzZSBpZihpJiZlJiZuXmcpe3ZhciB5O3Ymcnx8ISh5PWwobSxlLCEwKSl8fChmPTAsbj8odC5saW5lU3RhcnQoKSx0LnBvaW50KHlbMF1bMF0seVswXVsxXSksdC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpKToodC5wb2ludCh5WzFdWzBdLHlbMV1bMV0pLHQubGluZUVuZCgpLHQubGluZVN0YXJ0KCksdC5wb2ludCh5WzBdWzBdLHlbMF1bMV0sMykpKX0hZ3x8ZSYmb2UoZSxtKXx8dC5wb2ludChtWzBdLG1bMV0pLGU9bSxvPWcscj12fSxsaW5lRW5kOmZ1bmN0aW9uKCl7byYmdC5saW5lRW5kKCksZT1udWxsfSxjbGVhbjpmdW5jdGlvbigpe3JldHVybiBmfCh1JiZvKTw8MX19fSksKGZ1bmN0aW9uKGUsbixpLGEpe25lKGEsdCxyLGksZSxuKX0pLG4/WzAsLXRdOlstcyx0LXNdKX1mdW5jdGlvbiB5ZSh0LHIsbixpKXtmdW5jdGlvbiBhKGUsYSl7cmV0dXJuIHQ8PWUmJmU8PW4mJnI8PWEmJmE8PWl9ZnVuY3Rpb24gcyhlLGEsbyxzKXt2YXIgYz0wLGY9MDtpZihudWxsPT1lfHwoYz1sKGUsbykpIT09KGY9bChhLG8pKXx8dShlLGEpPDBebz4wKWRve3MucG9pbnQoMD09PWN8fDM9PT1jP3Q6bixjPjE/aTpyKX13aGlsZSgoYz0oYytvKzQpJTQpIT09Zik7ZWxzZSBzLnBvaW50KGFbMF0sYVsxXSl9ZnVuY3Rpb24gbChlLGkpe3JldHVybiBwKGVbMF0tdCk8bz9pPjA/MDozOnAoZVswXS1uKTxvP2k+MD8yOjE6cChlWzFdLXIpPG8/aT4wPzE6MDppPjA/MzoyfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdSh0LngsZS54KX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bCh0LDEpLG49bChlLDEpO3JldHVybiByIT09bj9yLW46MD09PXI/ZVsxXS10WzFdOjE9PT1yP3RbMF0tZVswXToyPT09cj90WzFdLWVbMV06ZVswXS10WzBdfXJldHVybiBmdW5jdGlvbihvKXt2YXIgbCx1LGYsaCxwLGQsbSxnLHYseSx4LGI9byxfPWFlKCksdz17cG9pbnQ6VCxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt3LnBvaW50PWssdSYmdS5wdXNoKGY9W10pO3k9ITAsdj0hMSxtPWc9TmFOfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bCYmKGsoaCxwKSxkJiZ2JiZfLnJlam9pbigpLGwucHVzaChfLnJlc3VsdCgpKSk7dy5wb2ludD1ULHYmJmIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtiPV8sbD1bXSx1PVtdLHg9ITB9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt2YXIgcj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHI9MCxuPXUubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBhLG8scz11W3JdLGw9MSxjPXMubGVuZ3RoLGY9c1swXSxoPWZbMF0scD1mWzFdO2w8YzsrK2wpYT1oLG89cCxmPXNbbF0saD1mWzBdLHA9ZlsxXSxvPD1pP3A+aSYmKGgtYSkqKGktbyk+KHAtbykqKHQtYSkmJisrZTpwPD1pJiYoaC1hKSooaS1vKTwocC1vKSoodC1hKSYmLS1lO3JldHVybiBlfSgpLG49eCYmcixhPShsPWUubWVyZ2UobCkpLmxlbmd0aDsobnx8YSkmJihvLnBvbHlnb25TdGFydCgpLG4mJihvLmxpbmVTdGFydCgpLHMobnVsbCxudWxsLDEsbyksby5saW5lRW5kKCkpLGEmJmxlKGwsYyxyLHMsbyksby5wb2x5Z29uRW5kKCkpO2I9byxsPXU9Zj1udWxsfX07ZnVuY3Rpb24gVCh0LGUpe2EodCxlKSYmYi5wb2ludCh0LGUpfWZ1bmN0aW9uIGsoZSxvKXt2YXIgcz1hKGUsbyk7aWYodSYmZi5wdXNoKFtlLG9dKSx5KWg9ZSxwPW8sZD1zLHk9ITEscyYmKGIubGluZVN0YXJ0KCksYi5wb2ludChlLG8pKTtlbHNlIGlmKHMmJnYpYi5wb2ludChlLG8pO2Vsc2V7dmFyIGw9W209TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksbSkpLGc9TWF0aC5tYXgoLTFlOSxNYXRoLm1pbigxZTksZykpXSxjPVtlPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LGUpKSxvPU1hdGgubWF4KC0xZTksTWF0aC5taW4oMWU5LG8pKV07IWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxzPXRbMF0sbD10WzFdLGM9MCx1PTEsZj1lWzBdLXMsaD1lWzFdLWw7aWYobz1yLXMsZnx8IShvPjApKXtpZihvLz1mLGY8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoZj4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1pLXMsZnx8IShvPDApKXtpZihvLz1mLGY8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoZj4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9aWYobz1uLWwsaHx8IShvPjApKXtpZihvLz1oLGg8MCl7aWYobzxjKXJldHVybjtvPHUmJih1PW8pfWVsc2UgaWYoaD4wKXtpZihvPnUpcmV0dXJuO28+YyYmKGM9byl9aWYobz1hLWwsaHx8IShvPDApKXtpZihvLz1oLGg8MCl7aWYobz51KXJldHVybjtvPmMmJihjPW8pfWVsc2UgaWYoaD4wKXtpZihvPGMpcmV0dXJuO288dSYmKHU9byl9cmV0dXJuIGM+MCYmKHRbMF09cytjKmYsdFsxXT1sK2MqaCksdTwxJiYoZVswXT1zK3UqZixlWzFdPWwrdSpoKSwhMH19fX19KGwsYyx0LHIsbixpKT9zJiYoYi5saW5lU3RhcnQoKSxiLnBvaW50KGUsbykseD0hMSk6KHZ8fChiLmxpbmVTdGFydCgpLGIucG9pbnQobFswXSxsWzFdKSksYi5wb2ludChjWzBdLGNbMV0pLHN8fGIubGluZUVuZCgpLHg9ITEpfW09ZSxnPW8sdj1zfXJldHVybiB3fX12YXIgeGUsYmUsX2Usd2U9cigpLFRlPXtzcGhlcmU6RSxwb2ludDpFLGxpbmVTdGFydDpmdW5jdGlvbigpe1RlLnBvaW50PUFlLFRlLmxpbmVFbmQ9a2V9LGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6RSxwb2x5Z29uRW5kOkV9O2Z1bmN0aW9uIGtlKCl7VGUucG9pbnQ9VGUubGluZUVuZD1FfWZ1bmN0aW9uIEFlKHQsZSl7eGU9dCo9aCxiZT1fKGUqPWgpLF9lPWcoZSksVGUucG9pbnQ9TWV9ZnVuY3Rpb24gTWUodCxlKXt0Kj1oO3ZhciByPV8oZSo9aCksbj1nKGUpLGk9cCh0LXhlKSxhPWcoaSksbz1uKl8oaSkscz1fZSpyLWJlKm4qYSxsPWJlKnIrX2UqbiphO3dlLmFkZChtKFQobypvK3MqcyksbCkpLHhlPXQsYmU9cixfZT1ufWZ1bmN0aW9uIFNlKHQpe3JldHVybiB3ZS5yZXNldCgpLHoodCxUZSksK3dlfXZhciBFZT1bbnVsbCxudWxsXSxMZT17dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6RWV9O2Z1bmN0aW9uIENlKHQsZSl7cmV0dXJuIEVlWzBdPXQsRWVbMV09ZSxTZShMZSl9dmFyIFBlPXtGZWF0dXJlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9lKHQuZ2VvbWV0cnksZSl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZmVhdHVyZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLmdlb21ldHJ5LGUpKXJldHVybiEwO3JldHVybiExfX0sSWU9e1NwaGVyZTpmdW5jdGlvbigpe3JldHVybiEwfSxQb2ludDpmdW5jdGlvbih0LGUpe3JldHVybiB6ZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvaW50OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuY29vcmRpbmF0ZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZih6ZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfSxMaW5lU3RyaW5nOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIERlKHQuY29vcmRpbmF0ZXMsZSl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmNvb3JkaW5hdGVzLG49LTEsaT1yLmxlbmd0aDsrK248aTspaWYoRGUocltuXSxlKSlyZXR1cm4hMDtyZXR1cm4hMX0sUG9seWdvbjpmdW5jdGlvbih0LGUpe3JldHVybiBSZSh0LmNvb3JkaW5hdGVzLGUpfSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb29yZGluYXRlcyxuPS0xLGk9ci5sZW5ndGg7KytuPGk7KWlmKFJlKHJbbl0sZSkpcmV0dXJuITA7cmV0dXJuITF9LEdlb21ldHJ5Q29sbGVjdGlvbjpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmdlb21ldHJpZXMsbj0tMSxpPXIubGVuZ3RoOysrbjxpOylpZihPZShyW25dLGUpKXJldHVybiEwO3JldHVybiExfX07ZnVuY3Rpb24gT2UodCxlKXtyZXR1cm4hKCF0fHwhSWUuaGFzT3duUHJvcGVydHkodC50eXBlKSkmJkllW3QudHlwZV0odCxlKX1mdW5jdGlvbiB6ZSh0LGUpe3JldHVybiAwPT09Q2UodCxlKX1mdW5jdGlvbiBEZSh0LGUpe2Zvcih2YXIgcixuLGksYT0wLG89dC5sZW5ndGg7YTxvO2ErKyl7aWYoMD09PShuPUNlKHRbYV0sZSkpKXJldHVybiEwO2lmKGE+MCYmKGk9Q2UodFthXSx0W2EtMV0pKT4wJiZyPD1pJiZuPD1pJiYocituLWkpKigxLU1hdGgucG93KChyLW4pL2ksMikpPDFlLTEyKmkpcmV0dXJuITA7cj1ufXJldHVybiExfWZ1bmN0aW9uIFJlKHQsZSl7cmV0dXJuISFoZSh0Lm1hcChGZSksQmUoZSkpfWZ1bmN0aW9uIEZlKHQpe3JldHVybih0PXQubWFwKEJlKSkucG9wKCksdH1mdW5jdGlvbiBCZSh0KXtyZXR1cm5bdFswXSpoLHRbMV0qaF19ZnVuY3Rpb24gTmUodCxyLG4pe3ZhciBpPWUucmFuZ2UodCxyLW8sbikuY29uY2F0KHIpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVyblt0LGVdfSkpfX1mdW5jdGlvbiBqZSh0LHIsbil7dmFyIGk9ZS5yYW5nZSh0LHItbyxuKS5jb25jYXQocik7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuW2UsdF19KSl9fWZ1bmN0aW9uIFVlKCl7dmFyIHQscixuLGksYSxzLGwsYyx1LGYsaCxkLG09MTAsZz1tLHk9OTAseD0zNjAsYj0yLjU7ZnVuY3Rpb24gXygpe3JldHVybnt0eXBlOiJNdWx0aUxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOncoKX19ZnVuY3Rpb24gdygpe3JldHVybiBlLnJhbmdlKHYoaS95KSp5LG4seSkubWFwKGgpLmNvbmNhdChlLnJhbmdlKHYoYy94KSp4LGwseCkubWFwKGQpKS5jb25jYXQoZS5yYW5nZSh2KHIvbSkqbSx0LG0pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHAodCV5KT5vfSkpLm1hcCh1KSkuY29uY2F0KGUucmFuZ2UodihzL2cpKmcsYSxnKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBwKHQleCk+b30pKS5tYXAoZikpfXJldHVybiBfLmxpbmVzPWZ1bmN0aW9uKCl7cmV0dXJuIHcoKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczp0fX0pKX0sXy5vdXRsaW5lPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOltoKGkpLmNvbmNhdChkKGwpLnNsaWNlKDEpLGgobikucmV2ZXJzZSgpLnNsaWNlKDEpLGQoYykucmV2ZXJzZSgpLnNsaWNlKDEpKV19fSxfLmV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLmV4dGVudE1ham9yKHQpLmV4dGVudE1pbm9yKHQpOl8uZXh0ZW50TWlub3IoKX0sXy5leHRlbnRNYWpvcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT0rdFswXVswXSxuPSt0WzFdWzBdLGM9K3RbMF1bMV0sbD0rdFsxXVsxXSxpPm4mJih0PWksaT1uLG49dCksYz5sJiYodD1jLGM9bCxsPXQpLF8ucHJlY2lzaW9uKGIpKTpbW2ksY10sW24sbF1dfSxfLmV4dGVudE1pbm9yPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPStlWzBdWzBdLHQ9K2VbMV1bMF0scz0rZVswXVsxXSxhPStlWzFdWzFdLHI+dCYmKGU9cixyPXQsdD1lKSxzPmEmJihlPXMscz1hLGE9ZSksXy5wcmVjaXNpb24oYikpOltbcixzXSxbdCxhXV19LF8uc3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9fLnN0ZXBNYWpvcih0KS5zdGVwTWlub3IodCk6Xy5zdGVwTWlub3IoKX0sXy5zdGVwTWFqb3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHk9K3RbMF0seD0rdFsxXSxfKTpbeSx4XX0sXy5zdGVwTWlub3I9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09K3RbMF0sZz0rdFsxXSxfKTpbbSxnXX0sXy5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGI9K2UsdT1OZShzLGEsOTApLGY9amUocix0LGIpLGg9TmUoYyxsLDkwKSxkPWplKGksbixiKSxfKTpifSxfLmV4dGVudE1ham9yKFtbLTE4MCwtOTArb10sWzE4MCw5MC1vXV0pLmV4dGVudE1pbm9yKFtbLTE4MCwtODAtb10sWzE4MCw4MCtvXV0pfWZ1bmN0aW9uIFZlKHQpe3JldHVybiB0fXZhciBIZSxxZSxHZSxZZSxXZT1yKCksWGU9cigpLFplPXtwb2ludDpFLGxpbmVTdGFydDpFLGxpbmVFbmQ6RSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtaZS5saW5lU3RhcnQ9SmUsWmUubGluZUVuZD0kZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1plLmxpbmVTdGFydD1aZS5saW5lRW5kPVplLnBvaW50PUUsV2UuYWRkKHAoWGUpKSxYZS5yZXNldCgpfSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1XZS8yO3JldHVybiBXZS5yZXNldCgpLHR9fTtmdW5jdGlvbiBKZSgpe1plLnBvaW50PUtlfWZ1bmN0aW9uIEtlKHQsZSl7WmUucG9pbnQ9UWUsSGU9R2U9dCxxZT1ZZT1lfWZ1bmN0aW9uIFFlKHQsZSl7WGUuYWRkKFllKnQtR2UqZSksR2U9dCxZZT1lfWZ1bmN0aW9uICRlKCl7UWUoSGUscWUpfXZhciB0cj0xLzAsZXI9dHIscnI9LXRyLG5yPXJyLGlyPXtwb2ludDpmdW5jdGlvbih0LGUpe3Q8dHImJih0cj10KTt0PnJyJiYocnI9dCk7ZTxlciYmKGVyPWUpO2U+bnImJihucj1lKX0sbGluZVN0YXJ0OkUsbGluZUVuZDpFLHBvbHlnb25TdGFydDpFLHBvbHlnb25FbmQ6RSxyZXN1bHQ6ZnVuY3Rpb24oKXt2YXIgdD1bW3RyLGVyXSxbcnIsbnJdXTtyZXR1cm4gcnI9bnI9LShlcj10cj0xLzApLHR9fTt2YXIgYXIsb3Isc3IsbHIsY3I9MCx1cj0wLGZyPTAsaHI9MCxwcj0wLGRyPTAsbXI9MCxncj0wLHZyPTAseXI9e3BvaW50OnhyLGxpbmVTdGFydDpicixsaW5lRW5kOlRyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3lyLmxpbmVTdGFydD1rcix5ci5saW5lRW5kPUFyfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eXIucG9pbnQ9eHIseXIubGluZVN0YXJ0PWJyLHlyLmxpbmVFbmQ9VHJ9LHJlc3VsdDpmdW5jdGlvbigpe3ZhciB0PXZyP1ttci92cixnci92cl06ZHI/W2hyL2RyLHByL2RyXTpmcj9bY3IvZnIsdXIvZnJdOltOYU4sTmFOXTtyZXR1cm4gY3I9dXI9ZnI9aHI9cHI9ZHI9bXI9Z3I9dnI9MCx0fX07ZnVuY3Rpb24geHIodCxlKXtjcis9dCx1cis9ZSwrK2ZyfWZ1bmN0aW9uIGJyKCl7eXIucG9pbnQ9X3J9ZnVuY3Rpb24gX3IodCxlKXt5ci5wb2ludD13cix4cihzcj10LGxyPWUpfWZ1bmN0aW9uIHdyKHQsZSl7dmFyIHI9dC1zcixuPWUtbHIsaT1UKHIqcituKm4pO2hyKz1pKihzcit0KS8yLHByKz1pKihscitlKS8yLGRyKz1pLHhyKHNyPXQsbHI9ZSl9ZnVuY3Rpb24gVHIoKXt5ci5wb2ludD14cn1mdW5jdGlvbiBrcigpe3lyLnBvaW50PU1yfWZ1bmN0aW9uIEFyKCl7U3IoYXIsb3IpfWZ1bmN0aW9uIE1yKHQsZSl7eXIucG9pbnQ9U3IseHIoYXI9c3I9dCxvcj1scj1lKX1mdW5jdGlvbiBTcih0LGUpe3ZhciByPXQtc3Isbj1lLWxyLGk9VChyKnIrbipuKTtocis9aSooc3IrdCkvMixwcis9aSoobHIrZSkvMixkcis9aSxtcis9KGk9bHIqdC1zciplKSooc3IrdCksZ3IrPWkqKGxyK2UpLHZyKz0zKmkseHIoc3I9dCxscj1lKX1mdW5jdGlvbiBFcih0KXt0aGlzLl9jb250ZXh0PXR9RXIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxwb2ludFJhZGl1czpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFkaXVzPXQsdGhpc30scG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPT09dGhpcy5fbGluZSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9wb2ludD1OYU59LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9jb250ZXh0LmxpbmVUbyh0LGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5fY29udGV4dC5tb3ZlVG8odCt0aGlzLl9yYWRpdXMsZSksdGhpcy5fY29udGV4dC5hcmModCxlLHRoaXMuX3JhZGl1cywwLHUpfX0scmVzdWx0OkV9O3ZhciBMcixDcixQcixJcixPcix6cj1yKCksRHI9e3BvaW50OkUsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7RHIucG9pbnQ9UnJ9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtMciYmRnIoQ3IsUHIpLERyLnBvaW50PUV9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe0xyPSEwfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7THI9bnVsbH0scmVzdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9K3pyO3JldHVybiB6ci5yZXNldCgpLHR9fTtmdW5jdGlvbiBScih0LGUpe0RyLnBvaW50PUZyLENyPUlyPXQsUHI9T3I9ZX1mdW5jdGlvbiBGcih0LGUpe0lyLT10LE9yLT1lLHpyLmFkZChUKElyKklyK09yKk9yKSksSXI9dCxPcj1lfWZ1bmN0aW9uIEJyKCl7dGhpcy5fc3RyaW5nPVtdfWZ1bmN0aW9uIE5yKHQpe3JldHVybiJtMCwiK3QrImEiK3QrIiwiK3QrIiAwIDEsMSAwLCIrLTIqdCsiYSIrdCsiLCIrdCsiIDAgMSwxIDAsIisyKnQrInoifWZ1bmN0aW9uIGpyKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgcj1uZXcgVXI7Zm9yKHZhciBuIGluIHQpcltuXT10W25dO3JldHVybiByLnN0cmVhbT1lLHJ9fWZ1bmN0aW9uIFVyKCl7fWZ1bmN0aW9uIFZyKHQsZSxyKXt2YXIgbj10LmNsaXBFeHRlbnQmJnQuY2xpcEV4dGVudCgpO3JldHVybiB0LnNjYWxlKDE1MCkudHJhbnNsYXRlKFswLDBdKSxudWxsIT1uJiZ0LmNsaXBFeHRlbnQobnVsbCkseihyLHQuc3RyZWFtKGlyKSksZShpci5yZXN1bHQoKSksbnVsbCE9biYmdC5jbGlwRXh0ZW50KG4pLHR9ZnVuY3Rpb24gSHIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj1lWzFdWzBdLWVbMF1bMF0saT1lWzFdWzFdLWVbMF1bMV0sYT1NYXRoLm1pbihuLyhyWzFdWzBdLXJbMF1bMF0pLGkvKHJbMV1bMV0tclswXVsxXSkpLG89K2VbMF1bMF0rKG4tYSooclsxXVswXStyWzBdWzBdKSkvMixzPStlWzBdWzFdKyhpLWEqKHJbMV1bMV0rclswXVsxXSkpLzI7dC5zY2FsZSgxNTAqYSkudHJhbnNsYXRlKFtvLHNdKX0pLHIpfWZ1bmN0aW9uIHFyKHQsZSxyKXtyZXR1cm4gSHIodCxbWzAsMF0sZV0scil9ZnVuY3Rpb24gR3IodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMF0tclswXVswXSksYT0obi1pKihyWzFdWzBdK3JbMF1bMF0pKS8yLG89LWkqclswXVsxXTt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9ZnVuY3Rpb24gWXIodCxlLHIpe3JldHVybiBWcih0LChmdW5jdGlvbihyKXt2YXIgbj0rZSxpPW4vKHJbMV1bMV0tclswXVsxXSksYT0taSpyWzBdWzBdLG89KG4taSooclsxXVsxXStyWzBdWzFdKSkvMjt0LnNjYWxlKDE1MCppKS50cmFuc2xhdGUoW2Esb10pfSkscil9QnIucHJvdG90eXBlPXtfcmFkaXVzOjQuNSxfY2lyY2xlOk5yKDQuNSkscG9pbnRSYWRpdXM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpIT09dGhpcy5fcmFkaXVzJiYodGhpcy5fcmFkaXVzPXQsdGhpcy5fY2lyY2xlPW51bGwpLHRoaXN9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7MD09PXRoaXMuX2xpbmUmJnRoaXMuX3N0cmluZy5wdXNoKCJaIiksdGhpcy5fcG9pbnQ9TmFOfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3N0cmluZy5wdXNoKCJNIix0LCIsIixlKSx0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9zdHJpbmcucHVzaCgiTCIsdCwiLCIsZSk7YnJlYWs7ZGVmYXVsdDpudWxsPT10aGlzLl9jaXJjbGUmJih0aGlzLl9jaXJjbGU9TnIodGhpcy5fcmFkaXVzKSksdGhpcy5fc3RyaW5nLnB1c2goIk0iLHQsIiwiLGUsdGhpcy5fY2lyY2xlKX19LHJlc3VsdDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0cmluZy5sZW5ndGgpe3ZhciB0PXRoaXMuX3N0cmluZy5qb2luKCIiKTtyZXR1cm4gdGhpcy5fc3RyaW5nPVtdLHR9cmV0dXJuIG51bGx9fSxVci5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlVyLHBvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19O3ZhciBXcj1nKDMwKmgpO2Z1bmN0aW9uIFhyKHQsZSl7cmV0dXJuK2U/ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKG4saSxhLHMsbCxjLHUsZixoLGQsZyx2LHkseCl7dmFyIGI9dS1uLF89Zi1pLHc9YipiK18qXztpZih3PjQqZSYmeS0tKXt2YXIgaz1zK2QsQT1sK2csUz1jK3YsRT1UKGsqaytBKkErUypTKSxMPU0oUy89RSksQz1wKHAoUyktMSk8b3x8cChhLWgpPG8/KGEraCkvMjptKEEsayksUD10KEMsTCksST1QWzBdLE89UFsxXSx6PUktbixEPU8taSxSPV8qei1iKkQ7KFIqUi93PmV8fHAoKGIqeitfKkQpL3ctLjUpPi4zfHxzKmQrbCpnK2MqdjxXcikmJihyKG4saSxhLHMsbCxjLEksTyxDLGsvPUUsQS89RSxTLHkseCkseC5wb2ludChJLE8pLHIoSSxPLEMsayxBLFMsdSxmLGgsZCxnLHYseSx4KSl9fXJldHVybiBmdW5jdGlvbihlKXt2YXIgbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbT17cG9pbnQ6ZyxsaW5lU3RhcnQ6dixsaW5lRW5kOngscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7ZS5wb2x5Z29uU3RhcnQoKSxtLmxpbmVTdGFydD1ifSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7ZS5wb2x5Z29uRW5kKCksbS5saW5lU3RhcnQ9dn19O2Z1bmN0aW9uIGcocixuKXtyPXQocixuKSxlLnBvaW50KHJbMF0sclsxXSl9ZnVuY3Rpb24gdigpe3U9TmFOLG0ucG9pbnQ9eSxlLmxpbmVTdGFydCgpfWZ1bmN0aW9uIHkobixpKXt2YXIgYT1YKFtuLGldKSxvPXQobixpKTtyKHUsZixjLGgscCxkLHU9b1swXSxmPW9bMV0sYz1uLGg9YVswXSxwPWFbMV0sZD1hWzJdLDE2LGUpLGUucG9pbnQodSxmKX1mdW5jdGlvbiB4KCl7bS5wb2ludD1nLGUubGluZUVuZCgpfWZ1bmN0aW9uIGIoKXt2KCksbS5wb2ludD1fLG0ubGluZUVuZD13fWZ1bmN0aW9uIF8odCxlKXt5KG49dCxlKSxpPXUsYT1mLG89aCxzPXAsbD1kLG0ucG9pbnQ9eX1mdW5jdGlvbiB3KCl7cih1LGYsYyxoLHAsZCxpLGEsbixvLHMsbCwxNixlKSxtLmxpbmVFbmQ9eCx4KCl9cmV0dXJuIG19fSh0LGUpOmZ1bmN0aW9uKHQpe3JldHVybiBqcih7cG9pbnQ6ZnVuY3Rpb24oZSxyKXtlPXQoZSxyKSx0aGlzLnN0cmVhbS5wb2ludChlWzBdLGVbMV0pfX0pfSh0KX12YXIgWnI9anIoe3BvaW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5zdHJlYW0ucG9pbnQodCpoLGUqaCl9fSk7ZnVuY3Rpb24gSnIodCxlLHIsbixpKXtmdW5jdGlvbiBhKGEsbyl7cmV0dXJuW2UrdCooYSo9biksci10KihvKj1pKV19cmV0dXJuIGEuaW52ZXJ0PWZ1bmN0aW9uKGEsbyl7cmV0dXJuWyhhLWUpL3Qqbiwoci1vKS90KmldfSxhfWZ1bmN0aW9uIEtyKHQsZSxyLG4saSxhKXt2YXIgbz1nKGEpLHM9XyhhKSxsPW8qdCxjPXMqdCx1PW8vdCxmPXMvdCxoPShzKnItbyplKS90LHA9KHMqZStvKnIpL3Q7ZnVuY3Rpb24gZCh0LGEpe3JldHVybltsKih0Kj1uKS1jKihhKj1pKStlLHItYyp0LWwqYV19cmV0dXJuIGQuaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuW24qKHUqdC1mKmUraCksaSoocC1mKnQtdSplKV19LGR9ZnVuY3Rpb24gUXIodCl7cmV0dXJuICRyKChmdW5jdGlvbigpe3JldHVybiB0fSkpKCl9ZnVuY3Rpb24gJHIodCl7dmFyIGUscixuLGksYSxvLHMsbCxjLHUscD0xNTAsZD00ODAsbT0yNTAsZz0wLHY9MCx5PTAseD0wLGI9MCxfPTAsdz0xLGs9MSxBPW51bGwsTT1nZSxTPW51bGwsRT1WZSxMPS41O2Z1bmN0aW9uIEModCl7cmV0dXJuIGwodFswXSpoLHRbMV0qaCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4odD1sLmludmVydCh0WzBdLHRbMV0pKSYmW3RbMF0qZix0WzFdKmZdfWZ1bmN0aW9uIEkoKXt2YXIgdD1LcihwLDAsMCx3LGssXykuYXBwbHkobnVsbCxlKGcsdikpLG49KF8/S3I6SnIpKHAsZC10WzBdLG0tdFsxXSx3LGssXyk7cmV0dXJuIHI9UXQoeSx4LGIpLHM9SnQoZSxuKSxsPUp0KHIscyksbz1YcihzLEwpLE8oKX1mdW5jdGlvbiBPKCl7cmV0dXJuIGM9dT1udWxsLEN9cmV0dXJuIEMuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBjJiZ1PT09dD9jOmM9WnIoZnVuY3Rpb24odCl7cmV0dXJuIGpyKHtwb2ludDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSxyKTtyZXR1cm4gdGhpcy5zdHJlYW0ucG9pbnQoblswXSxuWzFdKX19KX0ocikoTShvKEUodT10KSkpKSl9LEMucHJlY2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT10LEE9dm9pZCAwLE8oKSk6TX0sQy5wb3N0Y2xpcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oRT10LFM9bj1pPWE9bnVsbCxPKCkpOkV9LEMuY2xpcEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPSt0P3ZlKEE9dCpoKTooQT1udWxsLGdlKSxPKCkpOkEqZn0sQy5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhFPW51bGw9PXQ/KFM9bj1pPWE9bnVsbCxWZSk6eWUoUz0rdFswXVswXSxuPSt0WzBdWzFdLGk9K3RbMV1bMF0sYT0rdFsxXVsxXSksTygpKTpudWxsPT1TP251bGw6W1tTLG5dLFtpLGFdXX0sQy5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdCxJKCkpOnB9LEMudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSt0WzBdLG09K3RbMV0sSSgpKTpbZCxtXX0sQy5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGc9dFswXSUzNjAqaCx2PXRbMV0lMzYwKmgsSSgpKTpbZypmLHYqZl19LEMucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PXRbMF0lMzYwKmgseD10WzFdJTM2MCpoLGI9dC5sZW5ndGg+Mj90WzJdJTM2MCpoOjAsSSgpKTpbeSpmLHgqZixiKmZdfSxDLmFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQlMzYwKmgsSSgpKTpfKmZ9LEMucmVmbGVjdFg9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9dD8tMToxLEkoKSk6dzwwfSxDLnJlZmxlY3RZPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXQ/LTE6MSxJKCkpOms8MH0sQy5wcmVjaXNpb249ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89WHIocyxMPXQqdCksTygpKTpUKEwpfSxDLmZpdEV4dGVudD1mdW5jdGlvbih0LGUpe3JldHVybiBIcihDLHQsZSl9LEMuZml0U2l6ZT1mdW5jdGlvbih0LGUpe3JldHVybiBxcihDLHQsZSl9LEMuZml0V2lkdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3IoQyx0LGUpfSxDLmZpdEhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBZcihDLHQsZSl9LGZ1bmN0aW9uKCl7cmV0dXJuIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksQy5pbnZlcnQ9ZS5pbnZlcnQmJlAsSSgpfX1mdW5jdGlvbiB0bih0KXt2YXIgZT0wLHI9cy8zLG49JHIodCksaT1uKGUscik7cmV0dXJuIGkucGFyYWxsZWxzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24oZT10WzBdKmgscj10WzFdKmgpOltlKmYscipmXX0saX1mdW5jdGlvbiBlbih0LGUpe3ZhciByPV8odCksbj0ocitfKGUpKS8yO2lmKHAobik8bylyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9Zyh0KTtmdW5jdGlvbiByKHQscil7cmV0dXJuW3QqZSxfKHIpL2VdfXJldHVybiByLmludmVydD1mdW5jdGlvbih0LHIpe3JldHVyblt0L2UsTShyKmUpXX0scn0odCk7dmFyIGk9MStyKigyKm4tciksYT1UKGkpL247ZnVuY3Rpb24gbCh0LGUpe3ZhciByPVQoaS0yKm4qXyhlKSkvbjtyZXR1cm5bcipfKHQqPW4pLGEtcipnKHQpXX1yZXR1cm4gbC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1hLWUsbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbixNKChpLSh0KnQrcipyKSpuKm4pLygyKm4pKV19LGx9ZnVuY3Rpb24gcm4oKXtyZXR1cm4gdG4oZW4pLnNjYWxlKDE1NS40MjQpLmNlbnRlcihbMCwzMy42NDQyXSl9ZnVuY3Rpb24gbm4oKXtyZXR1cm4gcm4oKS5wYXJhbGxlbHMoWzI5LjUsNDUuNV0pLnNjYWxlKDEwNzApLnRyYW5zbGF0ZShbNDgwLDI1MF0pLnJvdGF0ZShbOTYsMF0pLmNlbnRlcihbLS42LDM4LjddKX1mdW5jdGlvbiBhbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbj1nKGUpLGk9ZyhyKSxhPXQobippKTtyZXR1cm5bYSppKl8oZSksYSpfKHIpXX19ZnVuY3Rpb24gb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49VChlKmUrcipyKSxpPXQobiksYT1fKGkpLG89ZyhpKTtyZXR1cm5bbShlKmEsbipvKSxNKG4mJnIqYS9uKV19fXZhciBzbj1hbigoZnVuY3Rpb24odCl7cmV0dXJuIFQoMi8oMSt0KSl9KSk7c24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipNKHQvMil9KSk7dmFyIGxuPWFuKChmdW5jdGlvbih0KXtyZXR1cm4odD1BKHQpKSYmdC9fKHQpfSkpO2Z1bmN0aW9uIGNuKHQsZSl7cmV0dXJuW3QseChrKChsK2UpLzIpKV19ZnVuY3Rpb24gdW4odCl7dmFyIGUscixuLGk9UXIodCksYT1pLmNlbnRlcixvPWkuc2NhbGUsbD1pLnRyYW5zbGF0ZSxjPWkuY2xpcEV4dGVudCx1PW51bGw7ZnVuY3Rpb24gZigpe3ZhciBhPXMqbygpLGw9aShyZShpLnJvdGF0ZSgpKS5pbnZlcnQoWzAsMF0pKTtyZXR1cm4gYyhudWxsPT11P1tbbFswXS1hLGxbMV0tYV0sW2xbMF0rYSxsWzFdK2FdXTp0PT09Y24/W1tNYXRoLm1heChsWzBdLWEsdSksZV0sW01hdGgubWluKGxbMF0rYSxyKSxuXV06W1t1LE1hdGgubWF4KGxbMV0tYSxlKV0sW3IsTWF0aC5taW4obFsxXSthLG4pXV0pfXJldHVybiBpLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvKHQpLGYoKSk6bygpfSxpLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obCh0KSxmKCkpOmwoKX0saS5jZW50ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGEodCksZigpKTphKCl9LGkuY2xpcEV4dGVudD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnVsbD09dD91PWU9cj1uPW51bGw6KHU9K3RbMF1bMF0sZT0rdFswXVsxXSxyPSt0WzFdWzBdLG49K3RbMV1bMV0pLGYoKSk6bnVsbD09dT9udWxsOltbdSxlXSxbcixuXV19LGYoKX1mdW5jdGlvbiBmbih0KXtyZXR1cm4gaygobCt0KS8yKX1mdW5jdGlvbiBobih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOngoci9nKGUpKS94KGZuKGUpL2ZuKHQpKSxpPXIqYihmbih0KSxuKS9uO2lmKCFuKXJldHVybiBjbjtmdW5jdGlvbiBhKHQsZSl7aT4wP2U8LWwrbyYmKGU9LWwrbyk6ZT5sLW8mJihlPWwtbyk7dmFyIHI9aS9iKGZuKGUpLG4pO3JldHVybltyKl8obip0KSxpLXIqZyhuKnQpXX1yZXR1cm4gYS5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1pLWUsYT13KG4pKlQodCp0K3Iqciksbz1tKHQscChyKSkqdyhyKTtyZXR1cm4gcipuPDAmJihvLT1zKncodCkqdyhyKSksW28vbiwyKmQoYihpL2EsMS9uKSktbF19LGF9ZnVuY3Rpb24gcG4odCxlKXtyZXR1cm5bdCxlXX1mdW5jdGlvbiBkbih0LGUpe3ZhciByPWcodCksbj10PT09ZT9fKHQpOihyLWcoZSkpLyhlLXQpLGk9ci9uK3Q7aWYocChuKTxvKXJldHVybiBwbjtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9aS1lLGE9bip0O3JldHVybltyKl8oYSksaS1yKmcoYSldfXJldHVybiBhLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByPWktZSxhPW0odCxwKHIpKSp3KHIpO3JldHVybiByKm48MCYmKGEtPXMqdyh0KSp3KHIpKSxbYS9uLGktdyhuKSpUKHQqdCtyKnIpXX0sYX1sbi5pbnZlcnQ9b24oKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpLGNuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblt0LDIqZCh5KGUpKS1sXX0scG4uaW52ZXJ0PXBuO3ZhciBtbj0xLjM0MDI2NCxnbj0tLjA4MTEwNix2bj04OTNlLTYseW49LjAwMzc5Nix4bj1UKDMpLzI7ZnVuY3Rpb24gYm4odCxlKXt2YXIgcj1NKHhuKl8oZSkpLG49cipyLGk9bipuKm47cmV0dXJuW3QqZyhyKS8oeG4qKG1uKzMqZ24qbitpKig3KnZuKzkqeW4qbikpKSxyKihtbitnbipuK2kqKHZuK3luKm4pKV19ZnVuY3Rpb24gX24odCxlKXt2YXIgcj1nKGUpLG49Zyh0KSpyO3JldHVybltyKl8odCkvbixfKGUpL25dfWZ1bmN0aW9uIHduKHQsZSl7dmFyIHI9ZSplLG49cipyO3JldHVyblt0KiguODcwNy0uMTMxOTc5KnIrbioobiooLjAwMzk3MSpyLS4wMDE1MjkqbiktLjAxMzc5MSkpLGUqKDEuMDA3MjI2K3IqKC4wMTUwODUrbiooLjAyODg3NCpyLS4wNDQ0NzUtLjAwNTkxNipuKSkpXX1mdW5jdGlvbiBUbih0LGUpe3JldHVybltnKGUpKl8odCksXyhlKV19ZnVuY3Rpb24ga24odCxlKXt2YXIgcj1nKGUpLG49MStnKHQpKnI7cmV0dXJuW3IqXyh0KS9uLF8oZSkvbl19ZnVuY3Rpb24gQW4odCxlKXtyZXR1cm5beChrKChsK2UpLzIpKSwtdF19Ym4uaW52ZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49ZSxpPW4qbixhPWkqaSppLG89MDtvPDEyJiYoYT0oaT0obi09cj0obioobW4rZ24qaSthKih2bit5bippKSktZSkvKG1uKzMqZ24qaSthKig3KnZuKzkqeW4qaSkpKSpuKSppKmksIShwKHIpPDFlLTEyKSk7KytvKTtyZXR1cm5beG4qdCoobW4rMypnbippK2EqKDcqdm4rOSp5bippKSkvZyhuKSxNKF8obikveG4pXX0sX24uaW52ZXJ0PW9uKGQpLHduLmludmVydD1mdW5jdGlvbih0LGUpe3ZhciByLG49ZSxpPTI1O2Rve3ZhciBhPW4qbixzPWEqYTtuLT1yPShuKigxLjAwNzIyNithKiguMDE1MDg1K3MqKC4wMjg4NzQqYS0uMDQ0NDc1LS4wMDU5MTYqcykpKS1lKS8oMS4wMDcyMjYrYSooLjA0NTI1NStzKiguMjU5ODY2KmEtLjMxMTMyNS0uMDA1OTE2KjExKnMpKSl9d2hpbGUocChyKT5vJiYtLWk+MCk7cmV0dXJuW3QvKC44NzA3KyhhPW4qbikqKGEqKGEqYSphKiguMDAzOTcxLS4wMDE1MjkqYSktLjAxMzc5MSktLjEzMTk3OSkpLG5dfSxUbi5pbnZlcnQ9b24oTSksa24uaW52ZXJ0PW9uKChmdW5jdGlvbih0KXtyZXR1cm4gMipkKHQpfSkpLEFuLmludmVydD1mdW5jdGlvbih0LGUpe3JldHVyblstZSwyKmQoeSh0KSktbF19LHQuZ2VvQWxiZXJzPW5uLHQuZ2VvQWxiZXJzVXNhPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxhLHM9bm4oKSxsPXJuKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxjPXJuKCkucm90YXRlKFsxNTcsMF0pLmNlbnRlcihbLTMsMTkuOV0pLnBhcmFsbGVscyhbOCwxOF0pLHU9e3BvaW50OmZ1bmN0aW9uKHQsZSl7YT1bdCxlXX19O2Z1bmN0aW9uIGYodCl7dmFyIGU9dFswXSxvPXRbMV07cmV0dXJuIGE9bnVsbCxyLnBvaW50KGUsbyksYXx8KG4ucG9pbnQoZSxvKSxhKXx8KGkucG9pbnQoZSxvKSxhKX1mdW5jdGlvbiBoKCl7cmV0dXJuIHQ9ZT1udWxsLGZ9cmV0dXJuIGYuaW52ZXJ0PWZ1bmN0aW9uKHQpe3ZhciBlPXMuc2NhbGUoKSxyPXMudHJhbnNsYXRlKCksbj0odFswXS1yWzBdKS9lLGk9KHRbMV0tclsxXSkvZTtyZXR1cm4oaT49LjEyJiZpPC4yMzQmJm4+PS0uNDI1JiZuPC0uMjE0P2w6aT49LjE2NiYmaTwuMjM0JiZuPj0tLjIxNCYmbjwtLjExNT9jOnMpLmludmVydCh0KX0sZi5zdHJlYW09ZnVuY3Rpb24ocil7cmV0dXJuIHQmJmU9PT1yP3Q6KG49W3Muc3RyZWFtKGU9ciksbC5zdHJlYW0ociksYy5zdHJlYW0ocildLGk9bi5sZW5ndGgsdD17cG9pbnQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTE7KytyPGk7KW5bcl0ucG9pbnQodCxlKX0sc3BoZXJlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PS0xOysrdDxpOyluW3RdLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9LTE7Kyt0PGk7KW5bdF0ucG9seWdvbkVuZCgpfX0pO3ZhciBuLGl9LGYucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzLnByZWNpc2lvbih0KSxsLnByZWNpc2lvbih0KSxjLnByZWNpc2lvbih0KSxoKCkpOnMucHJlY2lzaW9uKCl9LGYuc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHMuc2NhbGUodCksbC5zY2FsZSguMzUqdCksYy5zY2FsZSh0KSxmLnRyYW5zbGF0ZShzLnRyYW5zbGF0ZSgpKSk6cy5zY2FsZSgpfSxmLnRyYW5zbGF0ZT1mdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcy50cmFuc2xhdGUoKTt2YXIgZT1zLnNjYWxlKCksYT0rdFswXSxmPSt0WzFdO3JldHVybiByPXMudHJhbnNsYXRlKHQpLmNsaXBFeHRlbnQoW1thLS40NTUqZSxmLS4yMzgqZV0sW2ErLjQ1NSplLGYrLjIzOCplXV0pLnN0cmVhbSh1KSxuPWwudHJhbnNsYXRlKFthLS4zMDcqZSxmKy4yMDEqZV0pLmNsaXBFeHRlbnQoW1thLS40MjUqZStvLGYrLjEyKmUrb10sW2EtLjIxNCplLW8sZisuMjM0KmUtb11dKS5zdHJlYW0odSksaT1jLnRyYW5zbGF0ZShbYS0uMjA1KmUsZisuMjEyKmVdKS5jbGlwRXh0ZW50KFtbYS0uMjE0KmUrbyxmKy4xNjYqZStvXSxbYS0uMTE1KmUtbyxmKy4yMzQqZS1vXV0pLnN0cmVhbSh1KSxoKCl9LGYuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKGYsdCxlKX0sZi5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKGYsdCxlKX0sZi5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihmLHQsZSl9LGYuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKGYsdCxlKX0sZi5zY2FsZSgxMDcwKX0sdC5nZW9BcmVhPWZ1bmN0aW9uKHQpe3JldHVybiBVLnJlc2V0KCkseih0LFYpLDIqVX0sdC5nZW9BemltdXRoYWxFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoc24pLnNjYWxlKDEyNC43NSkuY2xpcEFuZ2xlKDE3OS45OTkpfSx0Lmdlb0F6aW11dGhhbEVxdWFsQXJlYVJhdz1zbix0Lmdlb0F6aW11dGhhbEVxdWlkaXN0YW50PWZ1bmN0aW9uKCl7cmV0dXJuIFFyKGxuKS5zY2FsZSg3OS40MTg4KS5jbGlwQW5nbGUoMTc5Ljk5OSl9LHQuZ2VvQXppbXV0aGFsRXF1aWRpc3RhbnRSYXc9bG4sdC5nZW9Cb3VuZHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYobnQ9cnQ9LSh0dD1ldD0xLzApLGx0PVtdLHoodCxTdCkscj1sdC5sZW5ndGgpe2ZvcihsdC5zb3J0KFJ0KSxlPTEsYT1bbj1sdFswXV07ZTxyOysrZSlGdChuLChpPWx0W2VdKVswXSl8fEZ0KG4saVsxXSk/KER0KG5bMF0saVsxXSk+RHQoblswXSxuWzFdKSYmKG5bMV09aVsxXSksRHQoaVswXSxuWzFdKT5EdChuWzBdLG5bMV0pJiYoblswXT1pWzBdKSk6YS5wdXNoKG49aSk7Zm9yKG89LTEvMCxlPTAsbj1hW3I9YS5sZW5ndGgtMV07ZTw9cjtuPWksKytlKWk9YVtlXSwocz1EdChuWzFdLGlbMF0pKT5vJiYobz1zLHR0PWlbMF0scnQ9blsxXSl9cmV0dXJuIGx0PWN0PW51bGwsdHQ9PT0xLzB8fGV0PT09MS8wP1tbTmFOLE5hTl0sW05hTixOYU5dXTpbW3R0LGV0XSxbcnQsbnRdXX0sdC5nZW9DZW50cm9pZD1mdW5jdGlvbih0KXt1dD1mdD1odD1wdD1kdD1tdD1ndD12dD15dD14dD1idD0wLHoodCxCdCk7dmFyIGU9eXQscj14dCxuPWJ0LGk9ZSplK3IqcituKm47cmV0dXJuIGk8MWUtMTImJihlPW10LHI9Z3Qsbj12dCxmdDxvJiYoZT1odCxyPXB0LG49ZHQpLChpPWUqZStyKnIrbipuKTwxZS0xMik/W05hTixOYU5dOlttKHIsZSkqZixNKG4vVChpKSkqZl19LHQuZ2VvQ2lyY2xlPWZ1bmN0aW9uKCl7dmFyIHQsZSxyPVp0KFswLDBdKSxuPVp0KDkwKSxpPVp0KDYpLGE9e3BvaW50OmZ1bmN0aW9uKHIsbil7dC5wdXNoKHI9ZShyLG4pKSxyWzBdKj1mLHJbMV0qPWZ9fTtmdW5jdGlvbiBvKCl7dmFyIG89ci5hcHBseSh0aGlzLGFyZ3VtZW50cykscz1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSpoLGw9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykqaDtyZXR1cm4gdD1bXSxlPVF0KC1vWzBdKmgsLW9bMV0qaCwwKS5pbnZlcnQsbmUoYSxzLGwsMSksbz17dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W3RdfSx0PWU9bnVsbCxvfXJldHVybiBvLmNlbnRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90Olp0KFsrdFswXSwrdFsxXV0pLG8pOnJ9LG8ucmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOm59LG8ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6WnQoK3QpLG8pOml9LG99LHQuZ2VvQ2xpcEFudGltZXJpZGlhbj1nZSx0Lmdlb0NsaXBDaXJjbGU9dmUsdC5nZW9DbGlwRXh0ZW50PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49MCxpPTAsYT05NjAsbz01MDA7cmV0dXJuIHI9e3N0cmVhbTpmdW5jdGlvbihyKXtyZXR1cm4gdCYmZT09PXI/dDp0PXllKG4saSxhLG8pKGU9cil9LGV4dGVudDpmdW5jdGlvbihzKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rc1swXVswXSxpPStzWzBdWzFdLGE9K3NbMV1bMF0sbz0rc1sxXVsxXSx0PWU9bnVsbCxyKTpbW24saV0sW2Esb11dfX19LHQuZ2VvQ2xpcFJlY3RhbmdsZT15ZSx0Lmdlb0NvbmljQ29uZm9ybWFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRuKGhuKS5zY2FsZSgxMDkuNSkucGFyYWxsZWxzKFszMCwzMF0pfSx0Lmdlb0NvbmljQ29uZm9ybWFsUmF3PWhuLHQuZ2VvQ29uaWNFcXVhbEFyZWE9cm4sdC5nZW9Db25pY0VxdWFsQXJlYVJhdz1lbix0Lmdlb0NvbmljRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdG4oZG4pLnNjYWxlKDEzMS4xNTQpLmNlbnRlcihbMCwxMy45Mzg5XSl9LHQuZ2VvQ29uaWNFcXVpZGlzdGFudFJhdz1kbix0Lmdlb0NvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKHQmJlBlLmhhc093blByb3BlcnR5KHQudHlwZSk/UGVbdC50eXBlXTpPZSkodCxlKX0sdC5nZW9EaXN0YW5jZT1DZSx0Lmdlb0VxdWFsRWFydGg9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoYm4pLnNjYWxlKDE3Ny4xNTgpfSx0Lmdlb0VxdWFsRWFydGhSYXc9Ym4sdC5nZW9FcXVpcmVjdGFuZ3VsYXI9ZnVuY3Rpb24oKXtyZXR1cm4gUXIocG4pLnNjYWxlKDE1Mi42Myl9LHQuZ2VvRXF1aXJlY3Rhbmd1bGFyUmF3PXBuLHQuZ2VvR25vbW9uaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoX24pLnNjYWxlKDE0NC4wNDkpLmNsaXBBbmdsZSg2MCl9LHQuZ2VvR25vbW9uaWNSYXc9X24sdC5nZW9HcmF0aWN1bGU9VWUsdC5nZW9HcmF0aWN1bGUxMD1mdW5jdGlvbigpe3JldHVybiBVZSgpKCl9LHQuZ2VvSWRlbnRpdHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLGEsbyxzPTEsbD0wLGM9MCx1PTEscD0xLGQ9MCxtPW51bGwsdj0xLHk9MSx4PWpyKHtwb2ludDpmdW5jdGlvbih0LGUpe3ZhciByPVQoW3QsZV0pO3RoaXMuc3RyZWFtLnBvaW50KHJbMF0sclsxXSl9fSksYj1WZTtmdW5jdGlvbiB3KCl7cmV0dXJuIHY9cyp1LHk9cypwLGE9bz1udWxsLFR9ZnVuY3Rpb24gVChyKXt2YXIgbj1yWzBdKnYsaT1yWzFdKnk7aWYoZCl7dmFyIGE9aSp0LW4qZTtuPW4qdCtpKmUsaT1hfXJldHVybltuK2wsaStjXX1yZXR1cm4gVC5pbnZlcnQ9ZnVuY3Rpb24ocil7dmFyIG49clswXS1sLGk9clsxXS1jO2lmKGQpe3ZhciBhPWkqdCtuKmU7bj1uKnQtaSplLGk9YX1yZXR1cm5bbi92LGkveV19LFQuc3RyZWFtPWZ1bmN0aW9uKHQpe3JldHVybiBhJiZvPT09dD9hOmE9eChiKG89dCkpfSxULnBvc3RjbGlwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPXQsbT1yPW49aT1udWxsLHcoKSk6Yn0sVC5jbGlwRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhiPW51bGw9PXQ/KG09cj1uPWk9bnVsbCxWZSk6eWUobT0rdFswXVswXSxyPSt0WzBdWzFdLG49K3RbMV1bMF0saT0rdFsxXVsxXSksdygpKTpudWxsPT1tP251bGw6W1ttLHJdLFtuLGldXX0sVC5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0rdCx3KCkpOnN9LFQudHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSt0WzBdLGM9K3RbMV0sdygpKTpbbCxjXX0sVC5hbmdsZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1fKGQ9ciUzNjAqaCksdD1nKGQpLHcoKSk6ZCpmfSxULnJlZmxlY3RYPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PXQ/LTE6MSx3KCkpOnU8MH0sVC5yZWZsZWN0WT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD10Py0xOjEsdygpKTpwPDB9LFQuZml0RXh0ZW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEhyKFQsdCxlKX0sVC5maXRTaXplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHFyKFQsdCxlKX0sVC5maXRXaWR0aD1mdW5jdGlvbih0LGUpe3JldHVybiBHcihULHQsZSl9LFQuZml0SGVpZ2h0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFlyKFQsdCxlKX0sVH0sdC5nZW9JbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMF0qaCxuPXRbMV0qaCxpPWVbMF0qaCxhPWVbMV0qaCxvPWcobikscz1fKG4pLGw9ZyhhKSxjPV8oYSksdT1vKmcocikscD1vKl8ociksZD1sKmcoaSksdj1sKl8oaSkseT0yKk0oVChTKGEtbikrbypsKlMoaS1yKSkpLHg9Xyh5KSxiPXk/ZnVuY3Rpb24odCl7dmFyIGU9Xyh0Kj15KS94LHI9Xyh5LXQpL3gsbj1yKnUrZSpkLGk9cipwK2UqdixhPXIqcytlKmM7cmV0dXJuW20oaSxuKSpmLG0oYSxUKG4qbitpKmkpKSpmXX06ZnVuY3Rpb24oKXtyZXR1cm5bcipmLG4qZl19O3JldHVybiBiLmRpc3RhbmNlPXksYn0sdC5nZW9MZW5ndGg9U2UsdC5nZW9NZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiB1bihjbikuc2NhbGUoOTYxL3UpfSx0Lmdlb01lcmNhdG9yUmF3PWNuLHQuZ2VvTmF0dXJhbEVhcnRoMT1mdW5jdGlvbigpe3JldHVybiBRcih3bikuc2NhbGUoMTc1LjI5NSl9LHQuZ2VvTmF0dXJhbEVhcnRoMVJhdz13bix0Lmdlb09ydGhvZ3JhcGhpYz1mdW5jdGlvbigpe3JldHVybiBRcihUbikuc2NhbGUoMjQ5LjUpLmNsaXBBbmdsZSg5MCtvKX0sdC5nZW9PcnRob2dyYXBoaWNSYXc9VG4sdC5nZW9QYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPTQuNTtmdW5jdGlvbiBhKHQpe3JldHVybiB0JiYoImZ1bmN0aW9uIj09dHlwZW9mIGkmJm4ucG9pbnRSYWRpdXMoK2kuYXBwbHkodGhpcyxhcmd1bWVudHMpKSx6KHQscihuKSkpLG4ucmVzdWx0KCl9cmV0dXJuIGEuYXJlYT1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoWmUpKSxaZS5yZXN1bHQoKX0sYS5tZWFzdXJlPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQscihEcikpLERyLnJlc3VsdCgpfSxhLmJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoaXIpKSxpci5yZXN1bHQoKX0sYS5jZW50cm9pZD1mdW5jdGlvbih0KXtyZXR1cm4geih0LHIoeXIpKSx5ci5yZXN1bHQoKX0sYS5wcm9qZWN0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW51bGw9PWU/KHQ9bnVsbCxWZSk6KHQ9ZSkuc3RyZWFtLGEpOnR9LGEuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1udWxsPT10PyhlPW51bGwsbmV3IEJyKTpuZXcgRXIoZT10KSwiZnVuY3Rpb24iIT10eXBlb2YgaSYmbi5wb2ludFJhZGl1cyhpKSxhKTplfSxhLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KG4ucG9pbnRSYWRpdXMoK3QpLCt0KSxhKTppfSxhLnByb2plY3Rpb24odCkuY29udGV4dChlKX0sdC5nZW9Qcm9qZWN0aW9uPVFyLHQuZ2VvUHJvamVjdGlvbk11dGF0b3I9JHIsdC5nZW9Sb3RhdGlvbj1yZSx0Lmdlb1N0ZXJlb2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUXIoa24pLnNjYWxlKDI1MCkuY2xpcEFuZ2xlKDE0Mil9LHQuZ2VvU3RlcmVvZ3JhcGhpY1Jhdz1rbix0Lmdlb1N0cmVhbT16LHQuZ2VvVHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3JldHVybntzdHJlYW06anIodCl9fSx0Lmdlb1RyYW5zdmVyc2VNZXJjYXRvcj1mdW5jdGlvbigpe3ZhciB0PXVuKEFuKSxlPXQuY2VudGVyLHI9dC5yb3RhdGU7cmV0dXJuIHQuY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoWy10WzFdLHRbMF1dKTpbKHQ9ZSgpKVsxXSwtdFswXV19LHQucm90YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3IoW3RbMF0sdFsxXSx0Lmxlbmd0aD4yP3RbMl0rOTA6OTBdKTpbKHQ9cigpKVswXSx0WzFdLHRbMl0tOTBdfSxyKFswLDAsOTBdKS5zY2FsZSgxNTkuMTU1KX0sdC5nZW9UcmFuc3ZlcnNlTWVyY2F0b3JSYXc9QW4sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWFycmF5IjoxNTV9XSwxNjM6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCxlKXtyZXR1cm4gdC5wYXJlbnQ9PT1lLnBhcmVudD8xOjJ9ZnVuY3Rpb24gcih0LGUpe3JldHVybiB0K2UueH1mdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE1hdGgubWF4KHQsZS55KX1mdW5jdGlvbiBpKHQpe3ZhciBlPTAscj10LmNoaWxkcmVuLG49ciYmci5sZW5ndGg7aWYobilmb3IoOy0tbj49MDspZSs9cltuXS52YWx1ZTtlbHNlIGU9MTt0LnZhbHVlPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciByLG4saSxhLHMsdT1uZXcgYyh0KSxmPSt0LnZhbHVlJiYodS52YWx1ZT10LnZhbHVlKSxoPVt1XTtmb3IobnVsbD09ZSYmKGU9byk7cj1oLnBvcCgpOylpZihmJiYoci52YWx1ZT0rci5kYXRhLnZhbHVlKSwoaT1lKHIuZGF0YSkpJiYocz1pLmxlbmd0aCkpZm9yKHIuY2hpbGRyZW49bmV3IEFycmF5KHMpLGE9cy0xO2E+PTA7LS1hKWgucHVzaChuPXIuY2hpbGRyZW5bYV09bmV3IGMoaVthXSkpLG4ucGFyZW50PXIsbi5kZXB0aD1yLmRlcHRoKzE7cmV0dXJuIHUuZWFjaEJlZm9yZShsKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0LmNoaWxkcmVufWZ1bmN0aW9uIHModCl7dC5kYXRhPXQuZGF0YS5kYXRhfWZ1bmN0aW9uIGwodCl7dmFyIGU9MDtkb3t0LmhlaWdodD1lfXdoaWxlKCh0PXQucGFyZW50KSYmdC5oZWlnaHQ8KytlKX1mdW5jdGlvbiBjKHQpe3RoaXMuZGF0YT10LHRoaXMuZGVwdGg9dGhpcy5oZWlnaHQ9MCx0aGlzLnBhcmVudD1udWxsfWMucHJvdG90eXBlPWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjLGNvdW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaEFmdGVyKGkpfSxlYWNoOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dGhpcyxvPVthXTtkb3tmb3IoZT1vLnJldmVyc2UoKSxvPVtdO2E9ZS5wb3AoKTspaWYodChhKSxyPWEuY2hpbGRyZW4pZm9yKG49MCxpPXIubGVuZ3RoO248aTsrK24pby5wdXNoKHJbbl0pfXdoaWxlKG8ubGVuZ3RoKTtyZXR1cm4gdGhpc30sZWFjaEFmdGVyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saT10aGlzLGE9W2ldLG89W107aT1hLnBvcCgpOylpZihvLnB1c2goaSksZT1pLmNoaWxkcmVuKWZvcihyPTAsbj1lLmxlbmd0aDtyPG47KytyKWEucHVzaChlW3JdKTtmb3IoO2k9by5wb3AoKTspdChpKTtyZXR1cm4gdGhpc30sZWFjaEJlZm9yZTpmdW5jdGlvbih0KXtmb3IodmFyIGUscixuPXRoaXMsaT1bbl07bj1pLnBvcCgpOylpZih0KG4pLGU9bi5jaGlsZHJlbilmb3Iocj1lLmxlbmd0aC0xO3I+PTA7LS1yKWkucHVzaChlW3JdKTtyZXR1cm4gdGhpc30sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2hBZnRlcigoZnVuY3Rpb24oZSl7Zm9yKHZhciByPSt0KGUuZGF0YSl8fDAsbj1lLmNoaWxkcmVuLGk9biYmbi5sZW5ndGg7LS1pPj0wOylyKz1uW2ldLnZhbHVlO2UudmFsdWU9cn0pKX0sc29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoQmVmb3JlKChmdW5jdGlvbihlKXtlLmNoaWxkcmVuJiZlLmNoaWxkcmVuLnNvcnQodCl9KSl9LHBhdGg6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj1mdW5jdGlvbih0LGUpe2lmKHQ9PT1lKXJldHVybiB0O3ZhciByPXQuYW5jZXN0b3JzKCksbj1lLmFuY2VzdG9ycygpLGk9bnVsbDt0PXIucG9wKCksZT1uLnBvcCgpO2Zvcig7dD09PWU7KWk9dCx0PXIucG9wKCksZT1uLnBvcCgpO3JldHVybiBpfShlLHQpLG49W2VdO2UhPT1yOyllPWUucGFyZW50LG4ucHVzaChlKTtmb3IodmFyIGk9bi5sZW5ndGg7dCE9PXI7KW4uc3BsaWNlKGksMCx0KSx0PXQucGFyZW50O3JldHVybiBufSxhbmNlc3RvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcyxlPVt0XTt0PXQucGFyZW50OyllLnB1c2godCk7cmV0dXJuIGV9LGRlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUpfSkpLHR9LGxlYXZlczpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKGUpe2UuY2hpbGRyZW58fHQucHVzaChlKX0pKSx0fSxsaW5rczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1bXTtyZXR1cm4gdC5lYWNoKChmdW5jdGlvbihyKXtyIT09dCYmZS5wdXNoKHtzb3VyY2U6ci5wYXJlbnQsdGFyZ2V0OnJ9KX0pKSxlfSxjb3B5OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuZWFjaEJlZm9yZShzKX19O3ZhciB1PUFycmF5LnByb3RvdHlwZS5zbGljZTtmdW5jdGlvbiBmKHQpe2Zvcih2YXIgZSxyLG49MCxpPSh0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG49dC5sZW5ndGg7bjspcj1NYXRoLnJhbmRvbSgpKm4tLXwwLGU9dFtuXSx0W25dPXRbcl0sdFtyXT1lO3JldHVybiB0fSh1LmNhbGwodCkpKS5sZW5ndGgsYT1bXTtuPGk7KWU9dFtuXSxyJiZkKHIsZSk/KytuOihyPWcoYT1oKGEsZSkpLG49MCk7cmV0dXJuIHJ9ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG47aWYobShlLHQpKXJldHVybltlXTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWlmKHAoZSx0W3JdKSYmbSh2KHRbcl0sZSksdCkpcmV0dXJuW3Rbcl0sZV07Zm9yKHI9MDtyPHQubGVuZ3RoLTE7KytyKWZvcihuPXIrMTtuPHQubGVuZ3RoOysrbilpZihwKHYodFtyXSx0W25dKSxlKSYmcCh2KHRbcl0sZSksdFtuXSkmJnAodih0W25dLGUpLHRbcl0pJiZtKHkodFtyXSx0W25dLGUpLHQpKXJldHVyblt0W3JdLHRbbl0sZV07dGhyb3cgbmV3IEVycm9yfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj10LnItZS5yLG49ZS54LXQueCxpPWUueS10Lnk7cmV0dXJuIHI8MHx8cipyPG4qbitpKml9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuci1lLnIrMWUtNixuPWUueC10LngsaT1lLnktdC55O3JldHVybiByPjAmJnIqcj5uKm4raSppfWZ1bmN0aW9uIG0odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcilpZighZCh0LGVbcl0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcodCl7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJue3g6KGU9dFswXSkueCx5OmUueSxyOmUucn07Y2FzZSAyOnJldHVybiB2KHRbMF0sdFsxXSk7Y2FzZSAzOnJldHVybiB5KHRbMF0sdFsxXSx0WzJdKX12YXIgZX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC54LG49dC55LGk9dC5yLGE9ZS54LG89ZS55LHM9ZS5yLGw9YS1yLGM9by1uLHU9cy1pLGY9TWF0aC5zcXJ0KGwqbCtjKmMpO3JldHVybnt4OihyK2ErbC9mKnUpLzIseToobitvK2MvZip1KS8yLHI6KGYraStzKS8yfX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj10LngsaT10LnksYT10LnIsbz1lLngscz1lLnksbD1lLnIsYz1yLngsdT1yLnksZj1yLnIsaD1uLW8scD1uLWMsZD1pLXMsbT1pLXUsZz1sLWEsdj1mLWEseT1uKm4raSppLWEqYSx4PXktbypvLXMqcytsKmwsYj15LWMqYy11KnUrZipmLF89cCpkLWgqbSx3PShkKmItbSp4KS8oMipfKS1uLFQ9KG0qZy1kKnYpL18saz0ocCp4LWgqYikvKDIqXyktaSxBPShoKnYtcCpnKS9fLE09VCpUK0EqQS0xLFM9MiooYSt3KlQraypBKSxFPXcqdytrKmstYSphLEw9LShNPyhTK01hdGguc3FydChTKlMtNCpNKkUpKS8oMipNKTpFL1MpO3JldHVybnt4Om4rdytUKkwseTppK2srQSpMLHI6TH19ZnVuY3Rpb24geCh0LGUscil7dmFyIG4saSxhLG8scz10LngtZS54LGw9dC55LWUueSxjPXMqcytsKmw7Yz8oaT1lLnIrci5yLGkqPWksbz10LnIrci5yLGk+KG8qPW8pPyhuPShjK28taSkvKDIqYyksYT1NYXRoLnNxcnQoTWF0aC5tYXgoMCxvL2MtbipuKSksci54PXQueC1uKnMtYSpsLHIueT10LnktbipsK2Eqcyk6KG49KGMraS1vKS8oMipjKSxhPU1hdGguc3FydChNYXRoLm1heCgwLGkvYy1uKm4pKSxyLng9ZS54K24qcy1hKmwsci55PWUueStuKmwrYSpzKSk6KHIueD1lLngrci5yLHIueT1lLnkpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj10LnIrZS5yLTFlLTYsbj1lLngtdC54LGk9ZS55LXQueTtyZXR1cm4gcj4wJiZyKnI+bipuK2kqaX1mdW5jdGlvbiBfKHQpe3ZhciBlPXQuXyxyPXQubmV4dC5fLG49ZS5yK3IucixpPShlLngqci5yK3IueCplLnIpL24sYT0oZS55KnIucityLnkqZS5yKS9uO3JldHVybiBpKmkrYSphfWZ1bmN0aW9uIHcodCl7dGhpcy5fPXQsdGhpcy5uZXh0PW51bGwsdGhpcy5wcmV2aW91cz1udWxsfWZ1bmN0aW9uIFQodCl7aWYoIShpPXQubGVuZ3RoKSlyZXR1cm4gMDt2YXIgZSxyLG4saSxhLG8scyxsLGMsdSxoO2lmKChlPXRbMF0pLng9MCxlLnk9MCwhKGk+MSkpcmV0dXJuIGUucjtpZihyPXRbMV0sZS54PS1yLnIsci54PWUucixyLnk9MCwhKGk+MikpcmV0dXJuIGUucityLnI7eChyLGUsbj10WzJdKSxlPW5ldyB3KGUpLHI9bmV3IHcociksbj1uZXcgdyhuKSxlLm5leHQ9bi5wcmV2aW91cz1yLHIubmV4dD1lLnByZXZpb3VzPW4sbi5uZXh0PXIucHJldmlvdXM9ZTt0OmZvcihzPTM7czxpOysrcyl7eChlLl8sci5fLG49dFtzXSksbj1uZXcgdyhuKSxsPXIubmV4dCxjPWUucHJldmlvdXMsdT1yLl8ucixoPWUuXy5yO2Rve2lmKHU8PWgpe2lmKGIobC5fLG4uXykpe3I9bCxlLm5leHQ9cixyLnByZXZpb3VzPWUsLS1zO2NvbnRpbnVlIHR9dSs9bC5fLnIsbD1sLm5leHR9ZWxzZXtpZihiKGMuXyxuLl8pKXsoZT1jKS5uZXh0PXIsci5wcmV2aW91cz1lLC0tcztjb250aW51ZSB0fWgrPWMuXy5yLGM9Yy5wcmV2aW91c319d2hpbGUobCE9PWMubmV4dCk7Zm9yKG4ucHJldmlvdXM9ZSxuLm5leHQ9cixlLm5leHQ9ci5wcmV2aW91cz1yPW4sYT1fKGUpOyhuPW4ubmV4dCkhPT1yOykobz1fKG4pKTxhJiYoZT1uLGE9byk7cj1lLm5leHR9Zm9yKGU9W3IuX10sbj1yOyhuPW4ubmV4dCkhPT1yOyllLnB1c2gobi5fKTtmb3Iobj1mKGUpLHM9MDtzPGk7KytzKShlPXRbc10pLngtPW4ueCxlLnktPW4ueTtyZXR1cm4gbi5yfWZ1bmN0aW9uIGsodCl7cmV0dXJuIG51bGw9PXQ/bnVsbDpBKHQpfWZ1bmN0aW9uIEEodCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0fWZ1bmN0aW9uIE0oKXtyZXR1cm4gMH1mdW5jdGlvbiBTKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBFKHQpe3JldHVybiBNYXRoLnNxcnQodC52YWx1ZSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5jaGlsZHJlbnx8KGUucj1NYXRoLm1heCgwLCt0KGUpfHwwKSl9fWZ1bmN0aW9uIEModCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7aWYobj1yLmNoaWxkcmVuKXt2YXIgbixpLGEsbz1uLmxlbmd0aCxzPXQocikqZXx8MDtpZihzKWZvcihpPTA7aTxvOysraSluW2ldLnIrPXM7aWYoYT1UKG4pLHMpZm9yKGk9MDtpPG87KytpKW5baV0uci09cztyLnI9YStzfX19ZnVuY3Rpb24gUCh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9ZS5wYXJlbnQ7ZS5yKj10LHImJihlLng9ci54K3QqZS54LGUueT1yLnkrdCplLnkpfX1mdW5jdGlvbiBJKHQpe3QueDA9TWF0aC5yb3VuZCh0LngwKSx0LnkwPU1hdGgucm91bmQodC55MCksdC54MT1NYXRoLnJvdW5kKHQueDEpLHQueTE9TWF0aC5yb3VuZCh0LnkxKX1mdW5jdGlvbiBPKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYobi1lKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS55MD1yLGEueTE9aSxhLngwPWUsYS54MT1lKz1hLnZhbHVlKmN9dmFyIHo9e2RlcHRoOi0xfSxEPXt9O2Z1bmN0aW9uIFIodCl7cmV0dXJuIHQuaWR9ZnVuY3Rpb24gRih0KXtyZXR1cm4gdC5wYXJlbnRJZH1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIHQucGFyZW50PT09ZS5wYXJlbnQ/MToyfWZ1bmN0aW9uIE4odCl7dmFyIGU9dC5jaGlsZHJlbjtyZXR1cm4gZT9lWzBdOnQudH1mdW5jdGlvbiBqKHQpe3ZhciBlPXQuY2hpbGRyZW47cmV0dXJuIGU/ZVtlLmxlbmd0aC0xXTp0LnR9ZnVuY3Rpb24gVSh0LGUscil7dmFyIG49ci8oZS5pLXQuaSk7ZS5jLT1uLGUucys9cix0LmMrPW4sZS56Kz1yLGUubSs9cn1mdW5jdGlvbiBWKHQsZSxyKXtyZXR1cm4gdC5hLnBhcmVudD09PWUucGFyZW50P3QuYTpyfWZ1bmN0aW9uIEgodCxlKXt0aGlzLl89dCx0aGlzLnBhcmVudD1udWxsLHRoaXMuY2hpbGRyZW49bnVsbCx0aGlzLkE9bnVsbCx0aGlzLmE9dGhpcyx0aGlzLno9MCx0aGlzLm09MCx0aGlzLmM9MCx0aGlzLnM9MCx0aGlzLnQ9bnVsbCx0aGlzLmk9ZX1mdW5jdGlvbiBxKHQsZSxyLG4saSl7Zm9yKHZhciBhLG89dC5jaGlsZHJlbixzPS0xLGw9by5sZW5ndGgsYz10LnZhbHVlJiYoaS1yKS90LnZhbHVlOysrczxsOykoYT1vW3NdKS54MD1lLGEueDE9bixhLnkwPXIsYS55MT1yKz1hLnZhbHVlKmN9SC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7dmFyIEc9KDErTWF0aC5zcXJ0KDUpKS8yO2Z1bmN0aW9uIFkodCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHY9W10seT1lLmNoaWxkcmVuLHg9MCxiPTAsXz15Lmxlbmd0aCx3PWUudmFsdWU7eDxfOyl7bD1pLXIsYz1hLW47ZG97dT15W2IrK10udmFsdWV9d2hpbGUoIXUmJmI8Xyk7Zm9yKGY9aD11LGc9dSp1KihtPU1hdGgubWF4KGMvbCxsL2MpLyh3KnQpKSxkPU1hdGgubWF4KGgvZyxnL2YpO2I8XzsrK2Ipe2lmKHUrPXM9eVtiXS52YWx1ZSxzPGYmJihmPXMpLHM+aCYmKGg9cyksZz11KnUqbSwocD1NYXRoLm1heChoL2csZy9mKSk+ZCl7dS09czticmVha31kPXB9di5wdXNoKG89e3ZhbHVlOnUsZGljZTpsPGMsY2hpbGRyZW46eS5zbGljZSh4LGIpfSksby5kaWNlP08obyxyLG4saSx3P24rPWMqdS93OmEpOnEobyxyLG4sdz9yKz1sKnUvdzppLGEpLHctPXUseD1ifXJldHVybiB2fXZhciBXPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe1koZSx0LHIsbixpLGEpfXJldHVybiByLnJhdGlvPWZ1bmN0aW9uKGUpe3JldHVybiB0KChlPStlKT4xP2U6MSl9LHJ9KEcpO3ZhciBYPWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0LHIsbixpLGEpe2lmKChvPXQuX3NxdWFyaWZ5KSYmby5yYXRpbz09PWUpZm9yKHZhciBvLHMsbCxjLHUsZj0tMSxoPW8ubGVuZ3RoLHA9dC52YWx1ZTsrK2Y8aDspe2ZvcihsPShzPW9bZl0pLmNoaWxkcmVuLGM9cy52YWx1ZT0wLHU9bC5sZW5ndGg7Yzx1OysrYylzLnZhbHVlKz1sW2NdLnZhbHVlO3MuZGljZT9PKHMscixuLGksbis9KGEtbikqcy52YWx1ZS9wKTpxKHMscixuLHIrPShpLXIpKnMudmFsdWUvcCxhKSxwLT1zLnZhbHVlfWVsc2UgdC5fc3F1YXJpZnk9bz1ZKGUsdCxyLG4saSxhKSxvLnJhdGlvPWV9cmV0dXJuIHIucmF0aW89ZnVuY3Rpb24oZSl7cmV0dXJuIHQoKGU9K2UpPjE/ZToxKX0scn0oRyk7dC5jbHVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9ZSxpPTEsYT0xLG89ITE7ZnVuY3Rpb24gcyhlKXt2YXIgcyxsPTA7ZS5lYWNoQWZ0ZXIoKGZ1bmN0aW9uKGUpe3ZhciBpPWUuY2hpbGRyZW47aT8oZS54PWZ1bmN0aW9uKHQpe3JldHVybiB0LnJlZHVjZShyLDApL3QubGVuZ3RofShpKSxlLnk9ZnVuY3Rpb24odCl7cmV0dXJuIDErdC5yZWR1Y2UobiwwKX0oaSkpOihlLng9cz9sKz10KGUscyk6MCxlLnk9MCxzPWUpfSkpO3ZhciBjPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZTtlPXQuY2hpbGRyZW47KXQ9ZVswXTtyZXR1cm4gdH0oZSksdT1mdW5jdGlvbih0KXtmb3IodmFyIGU7ZT10LmNoaWxkcmVuOyl0PWVbZS5sZW5ndGgtMV07cmV0dXJuIHR9KGUpLGY9Yy54LXQoYyx1KS8yLGg9dS54K3QodSxjKS8yO3JldHVybiBlLmVhY2hBZnRlcihvP2Z1bmN0aW9uKHQpe3QueD0odC54LWUueCkqaSx0Lnk9KGUueS10LnkpKmF9OmZ1bmN0aW9uKHQpe3QueD0odC54LWYpLyhoLWYpKmksdC55PSgxLShlLnk/dC55L2UueToxKSkqYX0pfXJldHVybiBzLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxzKTp0fSxzLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ITEsaT0rdFswXSxhPSt0WzFdLHMpOm8/bnVsbDpbaSxhXX0scy5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0hMCxpPSt0WzBdLGE9K3RbMV0scyk6bz9baSxhXTpudWxsfSxzfSx0LmhpZXJhcmNoeT1hLHQucGFjaz1mdW5jdGlvbigpe3ZhciB0PW51bGwsZT0xLHI9MSxuPU07ZnVuY3Rpb24gaShpKXtyZXR1cm4gaS54PWUvMixpLnk9ci8yLHQ/aS5lYWNoQmVmb3JlKEwodCkpLmVhY2hBZnRlcihDKG4sLjUpKS5lYWNoQmVmb3JlKFAoMSkpOmkuZWFjaEJlZm9yZShMKEUpKS5lYWNoQWZ0ZXIoQyhNLDEpKS5lYWNoQWZ0ZXIoQyhuLGkuci9NYXRoLm1pbihlLHIpKSkuZWFjaEJlZm9yZShQKE1hdGgubWluKGUscikvKDIqaS5yKSkpLGl9cmV0dXJuIGkucmFkaXVzPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWsoZSksaSk6dH0saS5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSt0WzBdLHI9K3RbMV0saSk6W2Uscl19LGkucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLGkpOm59LGl9LHQucGFja0VuY2xvc2U9Zix0LnBhY2tTaWJsaW5ncz1mdW5jdGlvbih0KXtyZXR1cm4gVCh0KSx0fSx0LnBhcnRpdGlvbj1mdW5jdGlvbigpe3ZhciB0PTEsZT0xLHI9MCxuPSExO2Z1bmN0aW9uIGkoaSl7dmFyIGE9aS5oZWlnaHQrMTtyZXR1cm4gaS54MD1pLnkwPXIsaS54MT10LGkueTE9ZS9hLGkuZWFjaEJlZm9yZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihuKXtuLmNoaWxkcmVuJiZPKG4sbi54MCx0KihuLmRlcHRoKzEpL2Usbi54MSx0KihuLmRlcHRoKzIpL2UpO3ZhciBpPW4ueDAsYT1uLnkwLG89bi54MS1yLHM9bi55MS1yO288aSYmKGk9bz0oaStvKS8yKSxzPGEmJihhPXM9KGErcykvMiksbi54MD1pLG4ueTA9YSxuLngxPW8sbi55MT1zfX0oZSxhKSksbiYmaS5lYWNoQmVmb3JlKEkpLGl9cmV0dXJuIGkucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ISF0LGkpOm59LGkuc2l6ZT1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0rclswXSxlPStyWzFdLGkpOlt0LGVdfSxpLnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3QsaSk6cn0saX0sdC5zdHJhdGlmeT1mdW5jdGlvbigpe3ZhciB0PVIsZT1GO2Z1bmN0aW9uIHIocil7dmFyIG4saSxhLG8scyx1LGYsaD1yLmxlbmd0aCxwPW5ldyBBcnJheShoKSxkPXt9O2ZvcihpPTA7aTxoOysraSluPXJbaV0scz1wW2ldPW5ldyBjKG4pLG51bGwhPSh1PXQobixpLHIpKSYmKHUrPSIiKSYmKGRbZj0iJCIrKHMuaWQ9dSldPWYgaW4gZD9EOnMpO2ZvcihpPTA7aTxoOysraSlpZihzPXBbaV0sbnVsbCE9KHU9ZShyW2ldLGkscikpJiYodSs9IiIpKXtpZighKG89ZFsiJCIrdV0pKXRocm93IG5ldyBFcnJvcigibWlzc2luZzogIit1KTtpZihvPT09RCl0aHJvdyBuZXcgRXJyb3IoImFtYmlndW91czogIit1KTtvLmNoaWxkcmVuP28uY2hpbGRyZW4ucHVzaChzKTpvLmNoaWxkcmVuPVtzXSxzLnBhcmVudD1vfWVsc2V7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIm11bHRpcGxlIHJvb3RzIik7YT1zfWlmKCFhKXRocm93IG5ldyBFcnJvcigibm8gcm9vdCIpO2lmKGEucGFyZW50PXosYS5lYWNoQmVmb3JlKChmdW5jdGlvbih0KXt0LmRlcHRoPXQucGFyZW50LmRlcHRoKzEsLS1ofSkpLmVhY2hCZWZvcmUobCksYS5wYXJlbnQ9bnVsbCxoPjApdGhyb3cgbmV3IEVycm9yKCJjeWNsZSIpO3JldHVybiBhfXJldHVybiByLmlkPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PUEoZSkscik6dH0sci5wYXJlbnRJZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1BKHQpLHIpOmV9LHJ9LHQudHJlZT1mdW5jdGlvbigpe3ZhciB0PUIsZT0xLHI9MSxuPW51bGw7ZnVuY3Rpb24gaShpKXt2YXIgbD1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksYSxvPW5ldyBIKHQsMCkscz1bb107ZT1zLnBvcCgpOylpZihuPWUuXy5jaGlsZHJlbilmb3IoZS5jaGlsZHJlbj1uZXcgQXJyYXkoYT1uLmxlbmd0aCksaT1hLTE7aT49MDstLWkpcy5wdXNoKHI9ZS5jaGlsZHJlbltpXT1uZXcgSChuW2ldLGkpKSxyLnBhcmVudD1lO3JldHVybihvLnBhcmVudD1uZXcgSChudWxsLDApKS5jaGlsZHJlbj1bb10sb30oaSk7aWYobC5lYWNoQWZ0ZXIoYSksbC5wYXJlbnQubT0tbC56LGwuZWFjaEJlZm9yZShvKSxuKWkuZWFjaEJlZm9yZShzKTtlbHNle3ZhciBjPWksdT1pLGY9aTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueDxjLngmJihjPXQpLHQueD51LngmJih1PXQpLHQuZGVwdGg+Zi5kZXB0aCYmKGY9dCl9KSk7dmFyIGg9Yz09PXU/MTp0KGMsdSkvMixwPWgtYy54LGQ9ZS8odS54K2grcCksbT1yLyhmLmRlcHRofHwxKTtpLmVhY2hCZWZvcmUoKGZ1bmN0aW9uKHQpe3QueD0odC54K3ApKmQsdC55PXQuZGVwdGgqbX0pKX1yZXR1cm4gaX1mdW5jdGlvbiBhKGUpe3ZhciByPWUuY2hpbGRyZW4sbj1lLnBhcmVudC5jaGlsZHJlbixpPWUuaT9uW2UuaS0xXTpudWxsO2lmKHIpeyFmdW5jdGlvbih0KXtmb3IodmFyIGUscj0wLG49MCxpPXQuY2hpbGRyZW4sYT1pLmxlbmd0aDstLWE+PTA7KShlPWlbYV0pLnorPXIsZS5tKz1yLHIrPWUucysobis9ZS5jKX0oZSk7dmFyIGE9KHJbMF0ueityW3IubGVuZ3RoLTFdLnopLzI7aT8oZS56PWkueit0KGUuXyxpLl8pLGUubT1lLnotYSk6ZS56PWF9ZWxzZSBpJiYoZS56PWkueit0KGUuXyxpLl8pKTtlLnBhcmVudC5BPWZ1bmN0aW9uKGUscixuKXtpZihyKXtmb3IodmFyIGksYT1lLG89ZSxzPXIsbD1hLnBhcmVudC5jaGlsZHJlblswXSxjPWEubSx1PW8ubSxmPXMubSxoPWwubTtzPWoocyksYT1OKGEpLHMmJmE7KWw9TihsKSwobz1qKG8pKS5hPWUsKGk9cy56K2YtYS56LWMrdChzLl8sYS5fKSk+MCYmKFUoVihzLGUsbiksZSxpKSxjKz1pLHUrPWkpLGYrPXMubSxjKz1hLm0saCs9bC5tLHUrPW8ubTtzJiYhaihvKSYmKG8udD1zLG8ubSs9Zi11KSxhJiYhTihsKSYmKGwudD1hLGwubSs9Yy1oLG49ZSl9cmV0dXJuIG59KGUsaSxlLnBhcmVudC5BfHxuWzBdKX1mdW5jdGlvbiBvKHQpe3QuXy54PXQueit0LnBhcmVudC5tLHQubSs9dC5wYXJlbnQubX1mdW5jdGlvbiBzKHQpe3QueCo9ZSx0Lnk9dC5kZXB0aCpyfXJldHVybiBpLnNlcGFyYXRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxpKTp0fSxpLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ITEsZT0rdFswXSxyPSt0WzFdLGkpOm4/bnVsbDpbZSxyXX0saS5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0hMCxlPSt0WzBdLHI9K3RbMV0saSk6bj9bZSxyXTpudWxsfSxpfSx0LnRyZWVtYXA9ZnVuY3Rpb24oKXt2YXIgdD1XLGU9ITEscj0xLG49MSxpPVswXSxhPU0sbz1NLHM9TSxsPU0sYz1NO2Z1bmN0aW9uIHUodCl7cmV0dXJuIHQueDA9dC55MD0wLHQueDE9cix0LnkxPW4sdC5lYWNoQmVmb3JlKGYpLGk9WzBdLGUmJnQuZWFjaEJlZm9yZShJKSx0fWZ1bmN0aW9uIGYoZSl7dmFyIHI9aVtlLmRlcHRoXSxuPWUueDArcix1PWUueTArcixmPWUueDEtcixoPWUueTEtcjtmPG4mJihuPWY9KG4rZikvMiksaDx1JiYodT1oPSh1K2gpLzIpLGUueDA9bixlLnkwPXUsZS54MT1mLGUueTE9aCxlLmNoaWxkcmVuJiYocj1pW2UuZGVwdGgrMV09YShlKS8yLG4rPWMoZSktcix1Kz1vKGUpLXIsKGYtPXMoZSktcik8biYmKG49Zj0obitmKS8yKSwoaC09bChlKS1yKTx1JiYodT1oPSh1K2gpLzIpLHQoZSxuLHUsZixoKSl9cmV0dXJuIHUucm91bmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9ISF0LHUpOmV9LHUuc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdFswXSxuPSt0WzFdLHUpOltyLG5dfSx1LnRpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9QShlKSx1KTp0fSx1LnBhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nSW5uZXIodCkucGFkZGluZ091dGVyKHQpOnUucGFkZGluZ0lubmVyKCl9LHUucGFkZGluZ0lubmVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6UygrdCksdSk6YX0sdS5wYWRkaW5nT3V0ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dS5wYWRkaW5nVG9wKHQpLnBhZGRpbmdSaWdodCh0KS5wYWRkaW5nQm90dG9tKHQpLnBhZGRpbmdMZWZ0KHQpOnUucGFkZGluZ1RvcCgpfSx1LnBhZGRpbmdUb3A9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpvfSx1LnBhZGRpbmdSaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOnN9LHUucGFkZGluZ0JvdHRvbT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0iZnVuY3Rpb24iPT10eXBlb2YgdD90OlMoK3QpLHUpOmx9LHUucGFkZGluZ0xlZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpTKCt0KSx1KTpjfSx1fSx0LnRyZWVtYXBCaW5hcnk9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvLHM9dC5jaGlsZHJlbixsPXMubGVuZ3RoLGM9bmV3IEFycmF5KGwrMSk7Zm9yKGNbMF09bz1hPTA7YTxsOysrYSljW2ErMV09bys9c1thXS52YWx1ZTshZnVuY3Rpb24gdChlLHIsbixpLGEsbyxsKXtpZihlPj1yLTEpe3ZhciB1PXNbZV07cmV0dXJuIHUueDA9aSx1LnkwPWEsdS54MT1vLHZvaWQodS55MT1sKX12YXIgZj1jW2VdLGg9bi8yK2YscD1lKzEsZD1yLTE7Zm9yKDtwPGQ7KXt2YXIgbT1wK2Q+Pj4xO2NbbV08aD9wPW0rMTpkPW19aC1jW3AtMV08Y1twXS1oJiZlKzE8cCYmLS1wO3ZhciBnPWNbcF0tZix2PW4tZztpZihvLWk+bC1hKXt2YXIgeT0oaSp2K28qZykvbjt0KGUscCxnLGksYSx5LGwpLHQocCxyLHYseSxhLG8sbCl9ZWxzZXt2YXIgeD0oYSp2K2wqZykvbjt0KGUscCxnLGksYSxvLHgpLHQocCxyLHYsaSx4LG8sbCl9fSgwLGwsdC52YWx1ZSxlLHIsbixpKX0sdC50cmVlbWFwRGljZT1PLHQudHJlZW1hcFJlc3F1YXJpZnk9WCx0LnRyZWVtYXBTbGljZT1xLHQudHJlZW1hcFNsaWNlRGljZT1mdW5jdGlvbih0LGUscixuLGkpeygxJnQuZGVwdGg/cTpPKSh0LGUscixuLGkpfSx0LnRyZWVtYXBTcXVhcmlmeT1XLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE2NDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbihuLGkpeyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9pKHIsdCgiZDMtY29sb3IiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0LGUscixuLGkpe3ZhciBhPXQqdCxvPWEqdDtyZXR1cm4oKDEtMyp0KzMqYS1vKSplKyg0LTYqYSszKm8pKnIrKDErMyp0KzMqYS0zKm8pKm4rbyppKS82fWZ1bmN0aW9uIG4odCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9bjw9MD9uPTA6bj49MT8obj0xLGUtMSk6TWF0aC5mbG9vcihuKmUpLGE9dFtpXSxvPXRbaSsxXSxzPWk+MD90W2ktMV06MiphLW8sbD1pPGUtMT90W2krMl06MipvLWE7cmV0dXJuIHIoKG4taS9lKSplLHMsYSxvLGwpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT1NYXRoLmZsb29yKCgobiU9MSk8MD8rK246bikqZSksYT10WyhpK2UtMSklZV0sbz10W2klZV0scz10WyhpKzEpJWVdLGw9dFsoaSsyKSVlXTtyZXR1cm4gcigobi1pL2UpKmUsYSxvLHMsbCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHR9fWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQrciplfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZS10O3JldHVybiByP28odCxyPjE4MHx8cjwtMTgwP3ItMzYwKk1hdGgucm91bmQoci8zNjApOnIpOmEoaXNOYU4odCk/ZTp0KX1mdW5jdGlvbiBsKHQpe3JldHVybiAxPT0odD0rdCk/YzpmdW5jdGlvbihlLHIpe3JldHVybiByLWU/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PU1hdGgucG93KHQsciksZT1NYXRoLnBvdyhlLHIpLXQscj0xL3IsZnVuY3Rpb24obil7cmV0dXJuIE1hdGgucG93KHQrbiplLHIpfX0oZSxyLHQpOmEoaXNOYU4oZSk/cjplKX19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWUtdDtyZXR1cm4gcj9vKHQscik6YShpc05hTih0KT9lOnQpfXZhciB1PWZ1bmN0aW9uIHQocil7dmFyIG49bChyKTtmdW5jdGlvbiBpKHQscil7dmFyIGk9bigodD1lLnJnYih0KSkuciwocj1lLnJnYihyKSkuciksYT1uKHQuZyxyLmcpLG89bih0LmIsci5iKSxzPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0LnI9aShlKSx0Lmc9YShlKSx0LmI9byhlKSx0Lm9wYWNpdHk9cyhlKSx0KyIifX1yZXR1cm4gaS5nYW1tYT10LGl9KDEpO2Z1bmN0aW9uIGYodCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPW5ldyBBcnJheShhKTtmb3Iobj0wO248YTsrK24paT1lLnJnYihyW25dKSxvW25dPWkucnx8MCxzW25dPWkuZ3x8MCxsW25dPWkuYnx8MDtyZXR1cm4gbz10KG8pLHM9dChzKSxsPXQobCksaS5vcGFjaXR5PTEsZnVuY3Rpb24odCl7cmV0dXJuIGkucj1vKHQpLGkuZz1zKHQpLGkuYj1sKHQpLGkrIiJ9fX12YXIgaD1mKG4pLHA9ZihpKTtmdW5jdGlvbiBkKHQsZSl7ZXx8KGU9W10pO3ZhciByLG49dD9NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCk6MCxpPWUuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oYSl7Zm9yKHI9MDtyPG47KytyKWlbcl09dFtyXSooMS1hKStlW3JdKmE7cmV0dXJuIGl9fWZ1bmN0aW9uIG0odCl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgRGF0YVZpZXcpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcixuPWU/ZS5sZW5ndGg6MCxpPXQ/TWF0aC5taW4obix0Lmxlbmd0aCk6MCxhPW5ldyBBcnJheShpKSxvPW5ldyBBcnJheShuKTtmb3Iocj0wO3I8aTsrK3IpYVtyXT1UKHRbcl0sZVtyXSk7Zm9yKDtyPG47KytyKW9bcl09ZVtyXTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHI9MDtyPGk7KytyKW9bcl09YVtyXSh0KTtyZXR1cm4gb319ZnVuY3Rpb24gdih0LGUpe3ZhciByPW5ldyBEYXRlO3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24obil7cmV0dXJuIHIuc2V0VGltZSh0KigxLW4pK2Uqbikscn19ZnVuY3Rpb24geSh0LGUpe3JldHVybiB0PSt0LGU9K2UsZnVuY3Rpb24ocil7cmV0dXJuIHQqKDEtcikrZSpyfX1mdW5jdGlvbiB4KHQsZSl7dmFyIHIsbj17fSxpPXt9O2ZvcihyIGluIG51bGwhPT10JiYib2JqZWN0Ij09dHlwZW9mIHR8fCh0PXt9KSxudWxsIT09ZSYmIm9iamVjdCI9PXR5cGVvZiBlfHwoZT17fSksZSlyIGluIHQ/bltyXT1UKHRbcl0sZVtyXSk6aVtyXT1lW3JdO3JldHVybiBmdW5jdGlvbih0KXtmb3IociBpbiBuKWlbcl09bltyXSh0KTtyZXR1cm4gaX19dmFyIGI9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLF89bmV3IFJlZ0V4cChiLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIHcodCxlKXt2YXIgcixuLGksYT1iLmxhc3RJbmRleD1fLmxhc3RJbmRleD0wLG89LTEscz1bXSxsPVtdO2Zvcih0Kz0iIixlKz0iIjsocj1iLmV4ZWModCkpJiYobj1fLmV4ZWMoZSkpOykoaT1uLmluZGV4KT5hJiYoaT1lLnNsaWNlKGEsaSksc1tvXT9zW29dKz1pOnNbKytvXT1pKSwocj1yWzBdKT09PShuPW5bMF0pP3Nbb10/c1tvXSs9bjpzWysrb109bjooc1srK29dPW51bGwsbC5wdXNoKHtpOm8seDp5KHIsbil9KSksYT1fLmxhc3RJbmRleDtyZXR1cm4gYTxlLmxlbmd0aCYmKGk9ZS5zbGljZShhKSxzW29dP3Nbb10rPWk6c1srK29dPWkpLHMubGVuZ3RoPDI/bFswXT9mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQoZSkrIiJ9fShsWzBdLngpOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0oZSk6KGU9bC5sZW5ndGgsZnVuY3Rpb24odCl7Zm9yKHZhciByLG49MDtuPGU7KytuKXNbKHI9bFtuXSkuaV09ci54KHQpO3JldHVybiBzLmpvaW4oIiIpfSl9ZnVuY3Rpb24gVCh0LHIpe3ZhciBuLGk9dHlwZW9mIHI7cmV0dXJuIG51bGw9PXJ8fCJib29sZWFuIj09PWk/YShyKTooIm51bWJlciI9PT1pP3k6InN0cmluZyI9PT1pPyhuPWUuY29sb3IocikpPyhyPW4sdSk6dzpyIGluc3RhbmNlb2YgZS5jb2xvcj91OnIgaW5zdGFuY2VvZiBEYXRlP3Y6bShyKT9kOkFycmF5LmlzQXJyYXkocik/ZzoiZnVuY3Rpb24iIT10eXBlb2Ygci52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2Ygci50b1N0cmluZ3x8aXNOYU4ocik/eDp5KSh0LHIpfXZhciBrLEEsTSxTLEU9MTgwL01hdGguUEksTD17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxyb3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBDKHQsZSxyLG4saSxhKXt2YXIgbyxzLGw7cmV0dXJuKG89TWF0aC5zcXJ0KHQqdCtlKmUpKSYmKHQvPW8sZS89byksKGw9dCpyK2UqbikmJihyLT10Kmwsbi09ZSpsKSwocz1NYXRoLnNxcnQocipyK24qbikpJiYoci89cyxuLz1zLGwvPXMpLHQqbjxlKnImJih0PS10LGU9LWUsbD0tbCxvPS1vKSx7dHJhbnNsYXRlWDppLHRyYW5zbGF0ZVk6YSxyb3RhdGU6TWF0aC5hdGFuMihlLHQpKkUsc2tld1g6TWF0aC5hdGFuKGwpKkUsc2NhbGVYOm8sc2NhbGVZOnN9fWZ1bmN0aW9uIFAodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dC5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKGEsbyl7dmFyIHM9W10sbD1bXTtyZXR1cm4gYT10KGEpLG89dChvKSxmdW5jdGlvbih0LG4saSxhLG8scyl7aWYodCE9PWl8fG4hPT1hKXt2YXIgbD1vLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsZSxudWxsLHIpO3MucHVzaCh7aTpsLTQseDp5KHQsaSl9LHtpOmwtMix4OnkobixhKX0pfWVsc2UoaXx8YSkmJm8ucHVzaCgidHJhbnNsYXRlKCIraStlK2Ercil9KGEudHJhbnNsYXRlWCxhLnRyYW5zbGF0ZVksby50cmFuc2xhdGVYLG8udHJhbnNsYXRlWSxzLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe3QhPT1lPyh0LWU+MTgwP2UrPTM2MDplLXQ+MTgwJiYodCs9MzYwKSxhLnB1c2goe2k6ci5wdXNoKGkocikrInJvdGF0ZSgiLG51bGwsbiktMix4OnkodCxlKX0pKTplJiZyLnB1c2goaShyKSsicm90YXRlKCIrZStuKX0oYS5yb3RhdGUsby5yb3RhdGUscyxsKSxmdW5jdGlvbih0LGUscixhKXt0IT09ZT9hLnB1c2goe2k6ci5wdXNoKGkocikrInNrZXdYKCIsbnVsbCxuKS0yLHg6eSh0LGUpfSk6ZSYmci5wdXNoKGkocikrInNrZXdYKCIrZStuKX0oYS5za2V3WCxvLnNrZXdYLHMsbCksZnVuY3Rpb24odCxlLHIsbixhLG8pe2lmKHQhPT1yfHxlIT09bil7dmFyIHM9YS5wdXNoKGkoYSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO28ucHVzaCh7aTpzLTQseDp5KHQscil9LHtpOnMtMix4OnkoZSxuKX0pfWVsc2UgMT09PXImJjE9PT1ufHxhLnB1c2goaShhKSsic2NhbGUoIityKyIsIituKyIpIil9KGEuc2NhbGVYLGEuc2NhbGVZLG8uc2NhbGVYLG8uc2NhbGVZLHMsbCksYT1vPW51bGwsZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9LTEsbj1sLmxlbmd0aDsrK3I8bjspc1soZT1sW3JdKS5pXT1lLngodCk7cmV0dXJuIHMuam9pbigiIil9fX12YXIgST1QKChmdW5jdGlvbih0KXtyZXR1cm4ibm9uZSI9PT10P0w6KGt8fChrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLEE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LE09ZG9jdW1lbnQuZGVmYXVsdFZpZXcpLGsuc3R5bGUudHJhbnNmb3JtPXQsdD1NLmdldENvbXB1dGVkU3R5bGUoQS5hcHBlbmRDaGlsZChrKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJ0cmFuc2Zvcm0iKSxBLnJlbW92ZUNoaWxkKGspLEMoKyh0PXQuc2xpY2UoNywtMSkuc3BsaXQoIiwiKSlbMF0sK3RbMV0sK3RbMl0sK3RbM10sK3RbNF0sK3RbNV0pKX0pLCJweCwgIiwicHgpIiwiZGVnKSIpLE89UCgoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/TDooU3x8KFM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKSksUy5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdCksKHQ9Uy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9DKCh0PXQubWF0cml4KS5hLHQuYix0LmMsdC5kLHQuZSx0LmYpOkwpfSksIiwgIiwiKSIsIikiKSx6PU1hdGguU1FSVDI7ZnVuY3Rpb24gRCh0KXtyZXR1cm4oKHQ9TWF0aC5leHAodCkpKzEvdCkvMn1mdW5jdGlvbiBSKHQpe3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXQoKHI9ZS5oc2wocikpLmgsKG49ZS5oc2wobikpLmgpLGE9YyhyLnMsbi5zKSxvPWMoci5sLG4ubCkscz1jKHIub3BhY2l0eSxuLm9wYWNpdHkpO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gci5oPWkodCksci5zPWEodCksci5sPW8odCksci5vcGFjaXR5PXModCkscisiIn19fXZhciBGPVIocyksQj1SKGMpO2Z1bmN0aW9uIE4odCl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9dCgocj1lLmhjbChyKSkuaCwobj1lLmhjbChuKSkuaCksYT1jKHIuYyxuLmMpLG89YyhyLmwsbi5sKSxzPWMoci5vcGFjaXR5LG4ub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9aSh0KSxyLmM9YSh0KSxyLmw9byh0KSxyLm9wYWNpdHk9cyh0KSxyKyIifX19dmFyIGo9TihzKSxVPU4oYyk7ZnVuY3Rpb24gVih0KXtyZXR1cm4gZnVuY3Rpb24gcihuKXtmdW5jdGlvbiBpKHIsaSl7dmFyIGE9dCgocj1lLmN1YmVoZWxpeChyKSkuaCwoaT1lLmN1YmVoZWxpeChpKSkuaCksbz1jKHIucyxpLnMpLHM9YyhyLmwsaS5sKSxsPWMoci5vcGFjaXR5LGkub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiByLmg9YSh0KSxyLnM9byh0KSxyLmw9cyhNYXRoLnBvdyh0LG4pKSxyLm9wYWNpdHk9bCh0KSxyKyIifX1yZXR1cm4gbj0rbixpLmdhbW1hPXIsaX0oMSl9dmFyIEg9VihzKSxxPVYoYyk7dC5pbnRlcnBvbGF0ZT1ULHQuaW50ZXJwb2xhdGVBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybihtKGUpP2Q6ZykodCxlKX0sdC5pbnRlcnBvbGF0ZUJhc2lzPW4sdC5pbnRlcnBvbGF0ZUJhc2lzQ2xvc2VkPWksdC5pbnRlcnBvbGF0ZUN1YmVoZWxpeD1ILHQuaW50ZXJwb2xhdGVDdWJlaGVsaXhMb25nPXEsdC5pbnRlcnBvbGF0ZURhdGU9dix0LmludGVycG9sYXRlRGlzY3JldGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0W01hdGgubWF4KDAsTWF0aC5taW4oZS0xLE1hdGguZmxvb3IociplKSkpXX19LHQuaW50ZXJwb2xhdGVIY2w9aix0LmludGVycG9sYXRlSGNsTG9uZz1VLHQuaW50ZXJwb2xhdGVIc2w9Rix0LmludGVycG9sYXRlSHNsTG9uZz1CLHQuaW50ZXJwb2xhdGVIdWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKCt0LCtlKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9cih0KTtyZXR1cm4gZS0zNjAqTWF0aC5mbG9vcihlLzM2MCl9fSx0LmludGVycG9sYXRlTGFiPWZ1bmN0aW9uKHQscil7dmFyIG49YygodD1lLmxhYih0KSkubCwocj1lLmxhYihyKSkubCksaT1jKHQuYSxyLmEpLGE9Yyh0LmIsci5iKSxvPWModC5vcGFjaXR5LHIub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0Lmw9bihlKSx0LmE9aShlKSx0LmI9YShlKSx0Lm9wYWNpdHk9byhlKSx0KyIifX0sdC5pbnRlcnBvbGF0ZU51bWJlcj15LHQuaW50ZXJwb2xhdGVOdW1iZXJBcnJheT1kLHQuaW50ZXJwb2xhdGVPYmplY3Q9eCx0LmludGVycG9sYXRlUmdiPXUsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzPWgsdC5pbnRlcnBvbGF0ZVJnYkJhc2lzQ2xvc2VkPXAsdC5pbnRlcnBvbGF0ZVJvdW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9K3QsZT0rZSxmdW5jdGlvbihyKXtyZXR1cm4gTWF0aC5yb3VuZCh0KigxLXIpK2Uqcil9fSx0LmludGVycG9sYXRlU3RyaW5nPXcsdC5pbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcz1JLHQuaW50ZXJwb2xhdGVUcmFuc2Zvcm1Tdmc9Tyx0LmludGVycG9sYXRlWm9vbT1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9dFsxXSxvPXRbMl0scz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1zLWksZj1sLWEsaD11KnUrZipmO2lmKGg8MWUtMTIpbj1NYXRoLmxvZyhjL28pL3oscj1mdW5jdGlvbih0KXtyZXR1cm5baSt0KnUsYSt0KmYsbypNYXRoLmV4cCh6KnQqbildfTtlbHNle3ZhciBwPU1hdGguc3FydChoKSxkPShjKmMtbypvKzQqaCkvKDIqbyoyKnApLG09KGMqYy1vKm8tNCpoKS8oMipjKjIqcCksZz1NYXRoLmxvZyhNYXRoLnNxcnQoZCpkKzEpLWQpLHY9TWF0aC5sb2coTWF0aC5zcXJ0KG0qbSsxKS1tKTtuPSh2LWcpL3oscj1mdW5jdGlvbih0KXt2YXIgZSxyPXQqbixzPUQoZyksbD1vLygyKnApKihzKihlPXoqcitnLCgoZT1NYXRoLmV4cCgyKmUpKS0xKS8oZSsxKSktZnVuY3Rpb24odCl7cmV0dXJuKCh0PU1hdGguZXhwKHQpKS0xL3QpLzJ9KGcpKTtyZXR1cm5baStsKnUsYStsKmYsbypzL0QoeipyK2cpXX19cmV0dXJuIHIuZHVyYXRpb249MWUzKm4scn0sdC5waWVjZXdpc2U9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPWUubGVuZ3RoLTEsaT1lWzBdLGE9bmV3IEFycmF5KG48MD8wOm4pO3I8bjspYVtyXT10KGksaT1lWysrcl0pO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgwLE1hdGgubWluKG4tMSxNYXRoLmZsb29yKHQqPW4pKSk7cmV0dXJuIGFbZV0odC1lKX19LHQucXVhbnRpemU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7KytuKXJbbl09dChuLyhlLTEpKTtyZXR1cm4gcn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7ImQzLWNvbG9yIjoxNTd9XSwxNjU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLmQzPXQuZDN8fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPU1hdGguUEkscj0yKmUsbj1yLTFlLTY7ZnVuY3Rpb24gaSgpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIifWZ1bmN0aW9uIGEoKXtyZXR1cm4gbmV3IGl9aS5wcm90b3R5cGU9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmksbW92ZVRvOmZ1bmN0aW9uKHQsZSl7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKX0sY2xvc2VQYXRoOmZ1bmN0aW9uKCl7bnVsbCE9PXRoaXMuX3gxJiYodGhpcy5feDE9dGhpcy5feDAsdGhpcy5feTE9dGhpcy5feTAsdGhpcy5fKz0iWiIpfSxsaW5lVG86ZnVuY3Rpb24odCxlKXt0aGlzLl8rPSJMIisodGhpcy5feDE9K3QpKyIsIisodGhpcy5feTE9K2UpfSxxdWFkcmF0aWNDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuXys9IlEiKyArdCsiLCIrICtlKyIsIisodGhpcy5feDE9K3IpKyIsIisodGhpcy5feTE9K24pfSxiZXppZXJDdXJ2ZVRvOmZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl8rPSJDIisgK3QrIiwiKyArZSsiLCIrICtyKyIsIisgK24rIiwiKyh0aGlzLl94MT0raSkrIiwiKyh0aGlzLl95MT0rYSl9LGFyY1RvOmZ1bmN0aW9uKHQscixuLGksYSl7dD0rdCxyPStyLG49K24saT0raSxhPSthO3ZhciBvPXRoaXMuX3gxLHM9dGhpcy5feTEsbD1uLXQsYz1pLXIsdT1vLXQsZj1zLXIsaD11KnUrZipmO2lmKGE8MCl0aHJvdyBuZXcgRXJyb3IoIm5lZ2F0aXZlIHJhZGl1czogIithKTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fKz0iTSIrKHRoaXMuX3gxPXQpKyIsIisodGhpcy5feTE9cik7ZWxzZSBpZihoPjFlLTYpaWYoTWF0aC5hYnMoZipsLWMqdSk+MWUtNiYmYSl7dmFyIHA9bi1vLGQ9aS1zLG09bCpsK2MqYyxnPXAqcCtkKmQsdj1NYXRoLnNxcnQobSkseT1NYXRoLnNxcnQoaCkseD1hKk1hdGgudGFuKChlLU1hdGguYWNvcygobStoLWcpLygyKnYqeSkpKS8yKSxiPXgveSxfPXgvdjtNYXRoLmFicyhiLTEpPjFlLTYmJih0aGlzLl8rPSJMIisodCtiKnUpKyIsIisocitiKmYpKSx0aGlzLl8rPSJBIithKyIsIithKyIsMCwwLCIrICsoZipwPnUqZCkrIiwiKyh0aGlzLl94MT10K18qbCkrIiwiKyh0aGlzLl95MT1yK18qYyl9ZWxzZSB0aGlzLl8rPSJMIisodGhpcy5feDE9dCkrIiwiKyh0aGlzLl95MT1yKTtlbHNlO30sYXJjOmZ1bmN0aW9uKHQsaSxhLG8scyxsKXt0PSt0LGk9K2ksbD0hIWw7dmFyIGM9KGE9K2EpKk1hdGguY29zKG8pLHU9YSpNYXRoLnNpbihvKSxmPXQrYyxoPWkrdSxwPTFebCxkPWw/by1zOnMtbztpZihhPDApdGhyb3cgbmV3IEVycm9yKCJuZWdhdGl2ZSByYWRpdXM6ICIrYSk7bnVsbD09PXRoaXMuX3gxP3RoaXMuXys9Ik0iK2YrIiwiK2g6KE1hdGguYWJzKHRoaXMuX3gxLWYpPjFlLTZ8fE1hdGguYWJzKHRoaXMuX3kxLWgpPjFlLTYpJiYodGhpcy5fKz0iTCIrZisiLCIraCksYSYmKGQ8MCYmKGQ9ZCVyK3IpLGQ+bj90aGlzLl8rPSJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHQtYykrIiwiKyhpLXUpKyJBIithKyIsIithKyIsMCwxLCIrcCsiLCIrKHRoaXMuX3gxPWYpKyIsIisodGhpcy5feTE9aCk6ZD4xZS02JiYodGhpcy5fKz0iQSIrYSsiLCIrYSsiLDAsIisgKyhkPj1lKSsiLCIrcCsiLCIrKHRoaXMuX3gxPXQrYSpNYXRoLmNvcyhzKSkrIiwiKyh0aGlzLl95MT1pK2EqTWF0aC5zaW4ocykpKSl9LHJlY3Q6ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5fKz0iTSIrKHRoaXMuX3gwPXRoaXMuX3gxPSt0KSsiLCIrKHRoaXMuX3kwPXRoaXMuX3kxPStlKSsiaCIrICtyKyJ2IisgK24rImgiKy1yKyJaIn0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ffX0sdC5wYXRoPWEsT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSkpfSx7fV0sMTY2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBlKHQsZSxyLG4pe2lmKGlzTmFOKGUpfHxpc05hTihyKSlyZXR1cm4gdDt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD10Ll9yb290LGQ9e2RhdGE6bn0sbT10Ll94MCxnPXQuX3kwLHY9dC5feDEseT10Ll95MTtpZighcClyZXR1cm4gdC5fcm9vdD1kLHQ7Zm9yKDtwLmxlbmd0aDspaWYoKGM9ZT49KGE9KG0rdikvMikpP209YTp2PWEsKHU9cj49KG89KGcreSkvMikpP2c9bzp5PW8saT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIGlbZl09ZCx0O2lmKHM9K3QuX3guY2FsbChudWxsLHAuZGF0YSksbD0rdC5feS5jYWxsKG51bGwscC5kYXRhKSxlPT09cyYmcj09PWwpcmV0dXJuIGQubmV4dD1wLGk/aVtmXT1kOnQuX3Jvb3Q9ZCx0O2Rve2k9aT9pW2ZdPW5ldyBBcnJheSg0KTp0Ll9yb290PW5ldyBBcnJheSg0KSwoYz1lPj0oYT0obSt2KS8yKSk/bT1hOnY9YSwodT1yPj0obz0oZyt5KS8yKSk/Zz1vOnk9b313aGlsZSgoZj11PDwxfGMpPT0oaD0obD49byk8PDF8cz49YSkpO3JldHVybiBpW2hdPXAsaVtmXT1kLHR9ZnVuY3Rpb24gcih0LGUscixuLGkpe3RoaXMubm9kZT10LHRoaXMueDA9ZSx0aGlzLnkwPXIsdGhpcy54MT1uLHRoaXMueTE9aX1mdW5jdGlvbiBuKHQpe3JldHVybiB0WzBdfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHRbMV19ZnVuY3Rpb24gYSh0LGUscil7dmFyIGE9bmV3IG8obnVsbD09ZT9uOmUsbnVsbD09cj9pOnIsTmFOLE5hTixOYU4sTmFOKTtyZXR1cm4gbnVsbD09dD9hOmEuYWRkQWxsKHQpfWZ1bmN0aW9uIG8odCxlLHIsbixpLGEpe3RoaXMuX3g9dCx0aGlzLl95PWUsdGhpcy5feDA9cix0aGlzLl95MD1uLHRoaXMuX3gxPWksdGhpcy5feTE9YSx0aGlzLl9yb290PXZvaWQgMH1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT17ZGF0YTp0LmRhdGF9LHI9ZTt0PXQubmV4dDspcj1yLm5leHQ9e2RhdGE6dC5kYXRhfTtyZXR1cm4gZX12YXIgbD1hLnByb3RvdHlwZT1vLnByb3RvdHlwZTtsLmNvcHk9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9bmV3IG8odGhpcy5feCx0aGlzLl95LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSxuPXRoaXMuX3Jvb3Q7aWYoIW4pcmV0dXJuIHI7aWYoIW4ubGVuZ3RoKXJldHVybiByLl9yb290PXMobikscjtmb3IodD1be3NvdXJjZTpuLHRhcmdldDpyLl9yb290PW5ldyBBcnJheSg0KX1dO249dC5wb3AoKTspZm9yKHZhciBpPTA7aTw0OysraSkoZT1uLnNvdXJjZVtpXSkmJihlLmxlbmd0aD90LnB1c2goe3NvdXJjZTplLHRhcmdldDpuLnRhcmdldFtpXT1uZXcgQXJyYXkoNCl9KTpuLnRhcmdldFtpXT1zKGUpKTtyZXR1cm4gcn0sbC5hZGQ9ZnVuY3Rpb24odCl7dmFyIHI9K3RoaXMuX3guY2FsbChudWxsLHQpLG49K3RoaXMuX3kuY2FsbChudWxsLHQpO3JldHVybiBlKHRoaXMuY292ZXIocixuKSxyLG4sdCl9LGwuYWRkQWxsPWZ1bmN0aW9uKHQpe3ZhciByLG4saSxhLG89dC5sZW5ndGgscz1uZXcgQXJyYXkobyksbD1uZXcgQXJyYXkobyksYz0xLzAsdT0xLzAsZj0tMS8wLGg9LTEvMDtmb3Iobj0wO248bzsrK24paXNOYU4oaT0rdGhpcy5feC5jYWxsKG51bGwscj10W25dKSl8fGlzTmFOKGE9K3RoaXMuX3kuY2FsbChudWxsLHIpKXx8KHNbbl09aSxsW25dPWEsaTxjJiYoYz1pKSxpPmYmJihmPWkpLGE8dSYmKHU9YSksYT5oJiYoaD1hKSk7aWYoYz5mfHx1PmgpcmV0dXJuIHRoaXM7Zm9yKHRoaXMuY292ZXIoYyx1KS5jb3ZlcihmLGgpLG49MDtuPG87KytuKWUodGhpcyxzW25dLGxbbl0sdFtuXSk7cmV0dXJuIHRoaXN9LGwuY292ZXI9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0PSt0KXx8aXNOYU4oZT0rZSkpcmV0dXJuIHRoaXM7dmFyIHI9dGhpcy5feDAsbj10aGlzLl95MCxpPXRoaXMuX3gxLGE9dGhpcy5feTE7aWYoaXNOYU4ocikpaT0ocj1NYXRoLmZsb29yKHQpKSsxLGE9KG49TWF0aC5mbG9vcihlKSkrMTtlbHNle2Zvcih2YXIgbyxzLGw9aS1yLGM9dGhpcy5fcm9vdDtyPnR8fHQ+PWl8fG4+ZXx8ZT49YTspc3dpdGNoKHM9KGU8bik8PDF8dDxyLChvPW5ldyBBcnJheSg0KSlbc109YyxjPW8sbCo9MixzKXtjYXNlIDA6aT1yK2wsYT1uK2w7YnJlYWs7Y2FzZSAxOnI9aS1sLGE9bitsO2JyZWFrO2Nhc2UgMjppPXIrbCxuPWEtbDticmVhaztjYXNlIDM6cj1pLWwsbj1hLWx9dGhpcy5fcm9vdCYmdGhpcy5fcm9vdC5sZW5ndGgmJih0aGlzLl9yb290PWMpfXJldHVybiB0aGlzLl94MD1yLHRoaXMuX3kwPW4sdGhpcy5feDE9aSx0aGlzLl95MT1hLHRoaXN9LGwuZGF0YT1mdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLnZpc2l0KChmdW5jdGlvbihlKXtpZighZS5sZW5ndGgpZG97dC5wdXNoKGUuZGF0YSl9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwuZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuY292ZXIoK3RbMF1bMF0sK3RbMF1bMV0pLmNvdmVyKCt0WzFdWzBdLCt0WzFdWzFdKTppc05hTih0aGlzLl94MCk/dm9pZCAwOltbdGhpcy5feDAsdGhpcy5feTBdLFt0aGlzLl94MSx0aGlzLl95MV1dfSxsLmZpbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbyxzLGwsYyx1LGY9dGhpcy5feDAsaD10aGlzLl95MCxwPXRoaXMuX3gxLGQ9dGhpcy5feTEsbT1bXSxnPXRoaXMuX3Jvb3Q7Zm9yKGcmJm0ucHVzaChuZXcgcihnLGYsaCxwLGQpKSxudWxsPT1uP249MS8wOihmPXQtbixoPWUtbixwPXQrbixkPWUrbixuKj1uKTtjPW0ucG9wKCk7KWlmKCEoIShnPWMubm9kZSl8fChhPWMueDApPnB8fChvPWMueTApPmR8fChzPWMueDEpPGZ8fChsPWMueTEpPGgpKWlmKGcubGVuZ3RoKXt2YXIgdj0oYStzKS8yLHk9KG8rbCkvMjttLnB1c2gobmV3IHIoZ1szXSx2LHkscyxsKSxuZXcgcihnWzJdLGEseSx2LGwpLG5ldyByKGdbMV0sdixvLHMseSksbmV3IHIoZ1swXSxhLG8sdix5KSksKHU9KGU+PXkpPDwxfHQ+PXYpJiYoYz1tW20ubGVuZ3RoLTFdLG1bbS5sZW5ndGgtMV09bVttLmxlbmd0aC0xLXVdLG1bbS5sZW5ndGgtMS11XT1jKX1lbHNle3ZhciB4PXQtK3RoaXMuX3guY2FsbChudWxsLGcuZGF0YSksYj1lLSt0aGlzLl95LmNhbGwobnVsbCxnLmRhdGEpLF89eCp4K2IqYjtpZihfPG4pe3ZhciB3PU1hdGguc3FydChuPV8pO2Y9dC13LGg9ZS13LHA9dCt3LGQ9ZSt3LGk9Zy5kYXRhfX1yZXR1cm4gaX0sbC5yZW1vdmU9ZnVuY3Rpb24odCl7aWYoaXNOYU4oYT0rdGhpcy5feC5jYWxsKG51bGwsdCkpfHxpc05hTihvPSt0aGlzLl95LmNhbGwobnVsbCx0KSkpcmV0dXJuIHRoaXM7dmFyIGUscixuLGksYSxvLHMsbCxjLHUsZixoLHA9dGhpcy5fcm9vdCxkPXRoaXMuX3gwLG09dGhpcy5feTAsZz10aGlzLl94MSx2PXRoaXMuX3kxO2lmKCFwKXJldHVybiB0aGlzO2lmKHAubGVuZ3RoKWZvcig7Oyl7aWYoKGM9YT49KHM9KGQrZykvMikpP2Q9czpnPXMsKHU9bz49KGw9KG0rdikvMikpP209bDp2PWwsZT1wLCEocD1wW2Y9dTw8MXxjXSkpcmV0dXJuIHRoaXM7aWYoIXAubGVuZ3RoKWJyZWFrOyhlW2YrMSYzXXx8ZVtmKzImM118fGVbZiszJjNdKSYmKHI9ZSxoPWYpfWZvcig7cC5kYXRhIT09dDspaWYobj1wLCEocD1wLm5leHQpKXJldHVybiB0aGlzO3JldHVybihpPXAubmV4dCkmJmRlbGV0ZSBwLm5leHQsbj8oaT9uLm5leHQ9aTpkZWxldGUgbi5uZXh0LHRoaXMpOmU/KGk/ZVtmXT1pOmRlbGV0ZSBlW2ZdLChwPWVbMF18fGVbMV18fGVbMl18fGVbM10pJiZwPT09KGVbM118fGVbMl18fGVbMV18fGVbMF0pJiYhcC5sZW5ndGgmJihyP3JbaF09cDp0aGlzLl9yb290PXApLHRoaXMpOih0aGlzLl9yb290PWksdGhpcyl9LGwucmVtb3ZlQWxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGg7ZTxyOysrZSl0aGlzLnJlbW92ZSh0W2VdKTtyZXR1cm4gdGhpc30sbC5yb290PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jvb3R9LGwuc2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIHRoaXMudmlzaXQoKGZ1bmN0aW9uKGUpe2lmKCFlLmxlbmd0aClkb3srK3R9d2hpbGUoZT1lLm5leHQpfSkpLHR9LGwudmlzaXQ9ZnVuY3Rpb24odCl7dmFyIGUsbixpLGEsbyxzLGw9W10sYz10aGlzLl9yb290O2ZvcihjJiZsLnB1c2gobmV3IHIoYyx0aGlzLl94MCx0aGlzLl95MCx0aGlzLl94MSx0aGlzLl95MSkpO2U9bC5wb3AoKTspaWYoIXQoYz1lLm5vZGUsaT1lLngwLGE9ZS55MCxvPWUueDEscz1lLnkxKSYmYy5sZW5ndGgpe3ZhciB1PShpK28pLzIsZj0oYStzKS8yOyhuPWNbM10pJiZsLnB1c2gobmV3IHIobix1LGYsbyxzKSksKG49Y1syXSkmJmwucHVzaChuZXcgcihuLGksZix1LHMpKSwobj1jWzFdKSYmbC5wdXNoKG5ldyByKG4sdSxhLG8sZikpLChuPWNbMF0pJiZsLnB1c2gobmV3IHIobixpLGEsdSxmKSl9cmV0dXJuIHRoaXN9LGwudmlzaXRBZnRlcj1mdW5jdGlvbih0KXt2YXIgZSxuPVtdLGk9W107Zm9yKHRoaXMuX3Jvb3QmJm4ucHVzaChuZXcgcih0aGlzLl9yb290LHRoaXMuX3gwLHRoaXMuX3kwLHRoaXMuX3gxLHRoaXMuX3kxKSk7ZT1uLnBvcCgpOyl7dmFyIGE9ZS5ub2RlO2lmKGEubGVuZ3RoKXt2YXIgbyxzPWUueDAsbD1lLnkwLGM9ZS54MSx1PWUueTEsZj0ocytjKS8yLGg9KGwrdSkvMjsobz1hWzBdKSYmbi5wdXNoKG5ldyByKG8scyxsLGYsaCkpLChvPWFbMV0pJiZuLnB1c2gobmV3IHIobyxmLGwsYyxoKSksKG89YVsyXSkmJm4ucHVzaChuZXcgcihvLHMsaCxmLHUpKSwobz1hWzNdKSYmbi5wdXNoKG5ldyByKG8sZixoLGMsdSkpfWkucHVzaChlKX1mb3IoO2U9aS5wb3AoKTspdChlLm5vZGUsZS54MCxlLnkwLGUueDEsZS55MSk7cmV0dXJuIHRoaXN9LGwueD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feD10LHRoaXMpOnRoaXMuX3h9LGwueT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5feT10LHRoaXMpOnRoaXMuX3l9LHQucXVhZHRyZWU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNjc6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24obixpKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/aShyLHQoImQzLXBhdGgiKSk6aSgobj1ufHxzZWxmKS5kMz1uLmQzfHx7fSxuLmQzKX0odGhpcywoZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdH19dmFyIG49TWF0aC5hYnMsaT1NYXRoLmF0YW4yLGE9TWF0aC5jb3Msbz1NYXRoLm1heCxzPU1hdGgubWluLGw9TWF0aC5zaW4sYz1NYXRoLnNxcnQsdT1NYXRoLlBJLGY9dS8yLGg9Mip1O2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQ+MT8wOnQ8LTE/dTpNYXRoLmFjb3ModCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gdD49MT9mOnQ8PS0xPy1mOk1hdGguYXNpbih0KX1mdW5jdGlvbiBtKHQpe3JldHVybiB0LmlubmVyUmFkaXVzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIHQub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gdih0KXtyZXR1cm4gdC5zdGFydEFuZ2xlfWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQuZW5kQW5nbGV9ZnVuY3Rpb24geCh0KXtyZXR1cm4gdCYmdC5wYWRBbmdsZX1mdW5jdGlvbiBiKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9bi1lLHU9by1pLGY9cy1hLGg9ZipsLXUqYztpZighKGgqaDwxZS0xMikpcmV0dXJuW3QrKGg9KHUqKGUtYSktZioodC1pKSkvaCkqbCxlK2gqY119ZnVuY3Rpb24gXyh0LGUscixuLGksYSxzKXt2YXIgbD10LXIsdT1lLW4sZj0ocz9hOi1hKS9jKGwqbCt1KnUpLGg9Zip1LHA9LWYqbCxkPXQraCxtPWUrcCxnPXIraCx2PW4rcCx5PShkK2cpLzIseD0obSt2KS8yLGI9Zy1kLF89di1tLHc9YipiK18qXyxUPWktYSxrPWQqdi1nKm0sQT0oXzwwPy0xOjEpKmMobygwLFQqVCp3LWsqaykpLE09KGsqXy1iKkEpL3csUz0oLWsqYi1fKkEpL3csRT0oaypfK2IqQSkvdyxMPSgtaypiK18qQSkvdyxDPU0teSxQPVMteCxJPUUteSxPPUwteDtyZXR1cm4gQypDK1AqUD5JKkkrTypPJiYoTT1FLFM9TCkse2N4Ok0sY3k6Uyx4MDE6LWgseTAxOi1wLHgxMTpNKihpL1QtMSkseTExOlMqKGkvVC0xKX19ZnVuY3Rpb24gdyh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gVCh0KXtyZXR1cm4gbmV3IHcodCl9ZnVuY3Rpb24gayh0KXtyZXR1cm4gdFswXX1mdW5jdGlvbiBBKHQpe3JldHVybiB0WzFdfWZ1bmN0aW9uIE0oKXt2YXIgdD1rLG49QSxpPXIoITApLGE9bnVsbCxvPVQscz1udWxsO2Z1bmN0aW9uIGwocil7dmFyIGwsYyx1LGY9ci5sZW5ndGgsaD0hMTtmb3IobnVsbD09YSYmKHM9byh1PWUucGF0aCgpKSksbD0wO2w8PWY7KytsKSEobDxmJiZpKGM9cltsXSxsLHIpKT09PWgmJigoaD0haCk/cy5saW5lU3RhcnQoKTpzLmxpbmVFbmQoKSksaCYmcy5wb2ludCgrdChjLGwsciksK24oYyxsLHIpKTtpZih1KXJldHVybiBzPW51bGwsdSsiInx8bnVsbH1yZXR1cm4gbC54PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSksbCk6dH0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6bn0sbC5kZWZpbmVkPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cighIXQpLGwpOml9LGwuY3VydmU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89dCxudWxsIT1hJiYocz1vKGEpKSxsKTpvfSxsLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PXQ/YT1zPW51bGw6cz1vKGE9dCksbCk6YX0sbH1mdW5jdGlvbiBTKCl7dmFyIHQ9ayxuPW51bGwsaT1yKDApLGE9QSxvPXIoITApLHM9bnVsbCxsPVQsYz1udWxsO2Z1bmN0aW9uIHUocil7dmFyIHUsZixoLHAsZCxtPXIubGVuZ3RoLGc9ITEsdj1uZXcgQXJyYXkobSkseT1uZXcgQXJyYXkobSk7Zm9yKG51bGw9PXMmJihjPWwoZD1lLnBhdGgoKSkpLHU9MDt1PD1tOysrdSl7aWYoISh1PG0mJm8ocD1yW3VdLHUscikpPT09ZylpZihnPSFnKWY9dSxjLmFyZWFTdGFydCgpLGMubGluZVN0YXJ0KCk7ZWxzZXtmb3IoYy5saW5lRW5kKCksYy5saW5lU3RhcnQoKSxoPXUtMTtoPj1mOy0taCljLnBvaW50KHZbaF0seVtoXSk7Yy5saW5lRW5kKCksYy5hcmVhRW5kKCl9ZyYmKHZbdV09K3QocCx1LHIpLHlbdV09K2kocCx1LHIpLGMucG9pbnQobj8rbihwLHUscik6dlt1XSxhPythKHAsdSxyKTp5W3VdKSl9aWYoZClyZXR1cm4gYz1udWxsLGQrIiJ8fG51bGx9ZnVuY3Rpb24gZigpe3JldHVybiBNKCkuZGVmaW5lZChvKS5jdXJ2ZShsKS5jb250ZXh0KHMpfXJldHVybiB1Lng9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxuPW51bGwsdSk6dH0sdS54MD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoK2UpLHUpOnR9LHUueDE9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49bnVsbD09dD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksdSk6bn0sdS55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYT1udWxsLHUpOml9LHUueTA9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSx1KTppfSx1LnkxPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW51bGw9PXQ/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHUpOmF9LHUubGluZVgwPXUubGluZVkwPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoaSl9LHUubGluZVkxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KHQpLnkoYSl9LHUubGluZVgxPWZ1bmN0aW9uKCl7cmV0dXJuIGYoKS54KG4pLnkoaSl9LHUuZGVmaW5lZD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoISF0KSx1KTpvfSx1LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPXQsbnVsbCE9cyYmKGM9bChzKSksdSk6bH0sdS5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT10P3M9Yz1udWxsOmM9bChzPXQpLHUpOnN9LHV9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiBlPHQ/LTE6ZT50PzE6ZT49dD8wOk5hTn1mdW5jdGlvbiBMKHQpe3JldHVybiB0fXcucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjtkZWZhdWx0OnRoaXMuX2NvbnRleHQubGluZVRvKHQsZSl9fX07dmFyIEM9SShUKTtmdW5jdGlvbiBQKHQpe3RoaXMuX2N1cnZlPXR9ZnVuY3Rpb24gSSh0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBuZXcgUCh0KGUpKX1yZXR1cm4gZS5fY3VydmU9dCxlfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5jdXJ2ZTtyZXR1cm4gdC5hbmdsZT10LngsZGVsZXRlIHQueCx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmN1cnZlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2UoSSh0KSk6ZSgpLl9jdXJ2ZX0sdH1mdW5jdGlvbiB6KCl7cmV0dXJuIE8oTSgpLmN1cnZlKEMpKX1mdW5jdGlvbiBEKCl7dmFyIHQ9UygpLmN1cnZlKEMpLGU9dC5jdXJ2ZSxyPXQubGluZVgwLG49dC5saW5lWDEsaT10LmxpbmVZMCxhPXQubGluZVkxO3JldHVybiB0LmFuZ2xlPXQueCxkZWxldGUgdC54LHQuc3RhcnRBbmdsZT10LngwLGRlbGV0ZSB0LngwLHQuZW5kQW5nbGU9dC54MSxkZWxldGUgdC54MSx0LnJhZGl1cz10LnksZGVsZXRlIHQueSx0LmlubmVyUmFkaXVzPXQueTAsZGVsZXRlIHQueTAsdC5vdXRlclJhZGl1cz10LnkxLGRlbGV0ZSB0LnkxLHQubGluZVN0YXJ0QW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhyKCkpfSxkZWxldGUgdC5saW5lWDAsdC5saW5lRW5kQW5nbGU9ZnVuY3Rpb24oKXtyZXR1cm4gTyhuKCkpfSxkZWxldGUgdC5saW5lWDEsdC5saW5lSW5uZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhpKCkpfSxkZWxldGUgdC5saW5lWTAsdC5saW5lT3V0ZXJSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gTyhhKCkpfSxkZWxldGUgdC5saW5lWTEsdC5jdXJ2ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9lKEkodCkpOmUoKS5fY3VydmV9LHR9ZnVuY3Rpb24gUih0LGUpe3JldHVyblsoZT0rZSkqTWF0aC5jb3ModC09TWF0aC5QSS8yKSxlKk1hdGguc2luKHQpXX1QLnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUuYXJlYVN0YXJ0KCl9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9jdXJ2ZS5hcmVhRW5kKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX2N1cnZlLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5fY3VydmUubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX2N1cnZlLnBvaW50KGUqTWF0aC5zaW4odCksZSotTWF0aC5jb3ModCkpfX07dmFyIEY9QXJyYXkucHJvdG90eXBlLnNsaWNlO2Z1bmN0aW9uIEIodCl7cmV0dXJuIHQuc291cmNlfWZ1bmN0aW9uIE4odCl7cmV0dXJuIHQudGFyZ2V0fWZ1bmN0aW9uIGoodCl7dmFyIG49QixpPU4sYT1rLG89QSxzPW51bGw7ZnVuY3Rpb24gbCgpe3ZhciByLGw9Ri5jYWxsKGFyZ3VtZW50cyksYz1uLmFwcGx5KHRoaXMsbCksdT1pLmFwcGx5KHRoaXMsbCk7aWYoc3x8KHM9cj1lLnBhdGgoKSksdChzLCthLmFwcGx5KHRoaXMsKGxbMF09YyxsKSksK28uYXBwbHkodGhpcyxsKSwrYS5hcHBseSh0aGlzLChsWzBdPXUsbCkpLCtvLmFwcGx5KHRoaXMsbCkpLHIpcmV0dXJuIHM9bnVsbCxyKyIifHxudWxsfXJldHVybiBsLnNvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGwpOm59LGwudGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbCk6aX0sbC54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6YX0sbC55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksbCk6b30sbC5jb250ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW51bGw9PXQ/bnVsbDp0LGwpOnN9LGx9ZnVuY3Rpb24gVSh0LGUscixuLGkpe3QubW92ZVRvKGUsciksdC5iZXppZXJDdXJ2ZVRvKGU9KGUrbikvMixyLGUsaSxuLGkpfWZ1bmN0aW9uIFYodCxlLHIsbixpKXt0Lm1vdmVUbyhlLHIpLHQuYmV6aWVyQ3VydmVUbyhlLHI9KHIraSkvMixuLHIsbixpKX1mdW5jdGlvbiBIKHQsZSxyLG4saSl7dmFyIGE9UihlLHIpLG89UihlLHI9KHIraSkvMikscz1SKG4sciksbD1SKG4saSk7dC5tb3ZlVG8oYVswXSxhWzFdKSx0LmJlemllckN1cnZlVG8ob1swXSxvWzFdLHNbMF0sc1sxXSxsWzBdLGxbMV0pfXZhciBxPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUvdSk7dC5tb3ZlVG8ociwwKSx0LmFyYygwLDAsciwwLGgpfX0sRz17ZHJhdzpmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydChlLzUpLzI7dC5tb3ZlVG8oLTMqciwtciksdC5saW5lVG8oLXIsLXIpLHQubGluZVRvKC1yLC0zKnIpLHQubGluZVRvKHIsLTMqciksdC5saW5lVG8ociwtciksdC5saW5lVG8oMypyLC1yKSx0LmxpbmVUbygzKnIsciksdC5saW5lVG8ocixyKSx0LmxpbmVUbyhyLDMqciksdC5saW5lVG8oLXIsMypyKSx0LmxpbmVUbygtcixyKSx0LmxpbmVUbygtMypyLHIpLHQuY2xvc2VQYXRoKCl9fSxZPU1hdGguc3FydCgxLzMpLFc9MipZLFg9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9XKSxuPXIqWTt0Lm1vdmVUbygwLC1yKSx0LmxpbmVUbyhuLDApLHQubGluZVRvKDAsciksdC5saW5lVG8oLW4sMCksdC5jbG9zZVBhdGgoKX19LFo9TWF0aC5zaW4odS8xMCkvTWF0aC5zaW4oNyp1LzEwKSxKPU1hdGguc2luKGgvMTApKlosSz0tTWF0aC5jb3MoaC8xMCkqWixRPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KC44OTA4MTMwOTE1MjkyODUyKmUpLG49SipyLGk9SypyO3QubW92ZVRvKDAsLXIpLHQubGluZVRvKG4saSk7Zm9yKHZhciBhPTE7YTw1OysrYSl7dmFyIG89aCphLzUscz1NYXRoLmNvcyhvKSxsPU1hdGguc2luKG8pO3QubGluZVRvKGwqciwtcypyKSx0LmxpbmVUbyhzKm4tbCppLGwqbitzKmkpfXQuY2xvc2VQYXRoKCl9fSwkPXtkcmF3OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zcXJ0KGUpLG49LXIvMjt0LnJlY3QobixuLHIscil9fSx0dD1NYXRoLnNxcnQoMyksZXQ9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj0tTWF0aC5zcXJ0KGUvKDMqdHQpKTt0Lm1vdmVUbygwLDIqciksdC5saW5lVG8oLXR0KnIsLXIpLHQubGluZVRvKHR0KnIsLXIpLHQuY2xvc2VQYXRoKCl9fSxydD0tLjUsbnQ9TWF0aC5zcXJ0KDMpLzIsaXQ9MS9NYXRoLnNxcnQoMTIpLGF0PTMqKGl0LzIrMSksb3Q9e2RyYXc6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNxcnQoZS9hdCksbj1yLzIsaT1yKml0LGE9bixvPXIqaXQrcixzPS1hLGw9bzt0Lm1vdmVUbyhuLGkpLHQubGluZVRvKGEsbyksdC5saW5lVG8ocyxsKSx0LmxpbmVUbyhydCpuLW50KmksbnQqbitydCppKSx0LmxpbmVUbyhydCphLW50Km8sbnQqYStydCpvKSx0LmxpbmVUbyhydCpzLW50KmwsbnQqcytydCpsKSx0LmxpbmVUbyhydCpuK250KmkscnQqaS1udCpuKSx0LmxpbmVUbyhydCphK250Km8scnQqby1udCphKSx0LmxpbmVUbyhydCpzK250KmwscnQqbC1udCpzKSx0LmNsb3NlUGF0aCgpfX0sc3Q9W3EsRyxYLCQsUSxldCxvdF07ZnVuY3Rpb24gbHQoKXt9ZnVuY3Rpb24gY3QodCxlLHIpe3QuX2NvbnRleHQuYmV6aWVyQ3VydmVUbygoMip0Ll94MCt0Ll94MSkvMywoMip0Ll95MCt0Ll95MSkvMywodC5feDArMip0Ll94MSkvMywodC5feTArMip0Ll95MSkvMywodC5feDArNCp0Ll94MStlKS82LCh0Ll95MCs0KnQuX3kxK3IpLzYpfWZ1bmN0aW9uIHV0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBmdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gaHQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIHB0KHQsZSl7dGhpcy5fYmFzaXM9bmV3IHV0KHQpLHRoaXMuX2JldGE9ZX11dC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl95MD10aGlzLl95MT1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAzOmN0KHRoaXMsdGhpcy5feDEsdGhpcy5feTEpO2Nhc2UgMjp0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2NvbnRleHQubGluZVRvKCg1KnRoaXMuX3gwK3RoaXMuX3gxKS82LCg1KnRoaXMuX3kwK3RoaXMuX3kxKS82KTtkZWZhdWx0OmN0KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPWV9fSxmdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3gyPXRoaXMuX3gzPXRoaXMuX3g0PXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3kyPXRoaXMuX3kzPXRoaXMuX3k0PU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDE6dGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDIsdGhpcy5feTIpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAyOnRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MisyKnRoaXMuX3gzKS8zLCh0aGlzLl95MisyKnRoaXMuX3kzKS8zKSx0aGlzLl9jb250ZXh0LmxpbmVUbygodGhpcy5feDMrMip0aGlzLl94MikvMywodGhpcy5feTMrMip0aGlzLl95MikvMyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95MiksdGhpcy5wb2ludCh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5wb2ludCh0aGlzLl94NCx0aGlzLl95NCl9fSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX3gyPXQsdGhpcy5feTI9ZTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9Mix0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDQ9dCx0aGlzLl95ND1lLHRoaXMuX2NvbnRleHQubW92ZVRvKCh0aGlzLl94MCs0KnRoaXMuX3gxK3QpLzYsKHRoaXMuX3kwKzQqdGhpcy5feTErZSkvNik7YnJlYWs7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0saHQucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feTA9dGhpcy5feTE9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTE7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTI7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTM7dmFyIHI9KHRoaXMuX3gwKzQqdGhpcy5feDErdCkvNixuPSh0aGlzLl95MCs0KnRoaXMuX3kxK2UpLzY7dGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyhyLG4pOnRoaXMuX2NvbnRleHQubW92ZVRvKHIsbik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDpjdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lfX0scHQucHJvdG90eXBlPXtsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W10sdGhpcy5fYmFzaXMubGluZVN0YXJ0KCl9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoLTE7aWYocj4wKWZvcih2YXIgbixpPXRbMF0sYT1lWzBdLG89dFtyXS1pLHM9ZVtyXS1hLGw9LTE7KytsPD1yOyluPWwvcix0aGlzLl9iYXNpcy5wb2ludCh0aGlzLl9iZXRhKnRbbF0rKDEtdGhpcy5fYmV0YSkqKGkrbipvKSx0aGlzLl9iZXRhKmVbbF0rKDEtdGhpcy5fYmV0YSkqKGErbipzKSk7dGhpcy5feD10aGlzLl95PW51bGwsdGhpcy5fYmFzaXMubGluZUVuZCgpfSxwb2ludDpmdW5jdGlvbih0LGUpe3RoaXMuX3gucHVzaCgrdCksdGhpcy5feS5wdXNoKCtlKX19O3ZhciBkdD1mdW5jdGlvbiB0KGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIDE9PT1lP25ldyB1dCh0KTpuZXcgcHQodCxlKX1yZXR1cm4gci5iZXRhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjg1KTtmdW5jdGlvbiBtdCh0LGUscil7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKHQuX3gxK3QuX2sqKHQuX3gyLXQuX3gwKSx0Ll95MSt0Ll9rKih0Ll95Mi10Ll95MCksdC5feDIrdC5fayoodC5feDEtZSksdC5feTIrdC5fayoodC5feTEtciksdC5feDIsdC5feTIpfWZ1bmN0aW9uIGd0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1ndC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6bXQodGhpcyx0aGlzLl94MSx0aGlzLl95MSl9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX3gxPXQsdGhpcy5feTE9ZTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Om10KHRoaXMsdCxlKX10aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgdnQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuZXcgZ3QodCxlKX1yZXR1cm4gci50ZW5zaW9uPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oMCk7ZnVuY3Rpb24geXQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5faz0oMS1lKS82fXl0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl94Mz10LHRoaXMuX3kzPWU7YnJlYWs7Y2FzZSAxOnRoaXMuX3BvaW50PTIsdGhpcy5fY29udGV4dC5tb3ZlVG8odGhpcy5feDQ9dCx0aGlzLl95ND1lKTticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl94NT10LHRoaXMuX3k1PWU7YnJlYWs7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIHh0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IHl0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIGJ0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2s9KDEtZSkvNn1idC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpeyh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMz09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtzd2l0Y2godD0rdCxlPStlLHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9Myx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Mix0aGlzLl95Mik7YnJlYWs7Y2FzZSAzOnRoaXMuX3BvaW50PTQ7ZGVmYXVsdDptdCh0aGlzLHQsZSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIF90PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gbmV3IGJ0KHQsZSl9cmV0dXJuIHIudGVuc2lvbj1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KDApO2Z1bmN0aW9uIHd0KHQsZSxyKXt2YXIgbj10Ll94MSxpPXQuX3kxLGE9dC5feDIsbz10Ll95MjtpZih0Ll9sMDFfYT4xZS0xMil7dmFyIHM9Mip0Ll9sMDFfMmErMyp0Ll9sMDFfYSp0Ll9sMTJfYSt0Ll9sMTJfMmEsbD0zKnQuX2wwMV9hKih0Ll9sMDFfYSt0Ll9sMTJfYSk7bj0obipzLXQuX3gwKnQuX2wxMl8yYSt0Ll94Mip0Ll9sMDFfMmEpL2wsaT0oaSpzLXQuX3kwKnQuX2wxMl8yYSt0Ll95Mip0Ll9sMDFfMmEpL2x9aWYodC5fbDIzX2E+MWUtMTIpe3ZhciBjPTIqdC5fbDIzXzJhKzMqdC5fbDIzX2EqdC5fbDEyX2ErdC5fbDEyXzJhLHU9Myp0Ll9sMjNfYSoodC5fbDIzX2ErdC5fbDEyX2EpO2E9KGEqYyt0Ll94MSp0Ll9sMjNfMmEtZSp0Ll9sMTJfMmEpL3Usbz0obypjK3QuX3kxKnQuX2wyM18yYS1yKnQuX2wxMl8yYSkvdX10Ll9jb250ZXh0LmJlemllckN1cnZlVG8obixpLGEsbyx0Ll94Mix0Ll95Mil9ZnVuY3Rpb24gVHQodCxlKXt0aGlzLl9jb250ZXh0PXQsdGhpcy5fYWxwaGE9ZX1UdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94MD10aGlzLl94MT10aGlzLl94Mj10aGlzLl95MD10aGlzLl95MT10aGlzLl95Mj1OYU4sdGhpcy5fbDAxX2E9dGhpcy5fbDEyX2E9dGhpcy5fbDIzX2E9dGhpcy5fbDAxXzJhPXRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmE9dGhpcy5fcG9pbnQ9MH0sbGluZUVuZDpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAyOnRoaXMuX2NvbnRleHQubGluZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5wb2ludCh0aGlzLl94Mix0aGlzLl95Mil9KHRoaXMuX2xpbmV8fDAhPT10aGlzLl9saW5lJiYxPT09dGhpcy5fcG9pbnQpJiZ0aGlzLl9jb250ZXh0LmNsb3NlUGF0aCgpLHRoaXMuX2xpbmU9MS10aGlzLl9saW5lfSxwb2ludDpmdW5jdGlvbih0LGUpe2lmKHQ9K3QsZT0rZSx0aGlzLl9wb2ludCl7dmFyIHI9dGhpcy5feDItdCxuPXRoaXMuX3kyLWU7dGhpcy5fbDIzX2E9TWF0aC5zcXJ0KHRoaXMuX2wyM18yYT1NYXRoLnBvdyhyKnIrbipuLHRoaXMuX2FscGhhKSl9c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MztkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIGt0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgVHQodCxlKTpuZXcgZ3QodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBBdCh0LGUpe3RoaXMuX2NvbnRleHQ9dCx0aGlzLl9hbHBoYT1lfUF0LnByb3RvdHlwZT17YXJlYVN0YXJ0Omx0LGFyZWFFbmQ6bHQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feDM9dGhpcy5feDQ9dGhpcy5feDU9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9dGhpcy5feTM9dGhpcy5feTQ9dGhpcy5feTU9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0aGlzLl94Myx0aGlzLl95MyksdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKTticmVhaztjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDMsdGhpcy5feTMpLHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7YnJlYWs7Y2FzZSAzOnRoaXMucG9pbnQodGhpcy5feDMsdGhpcy5feTMpLHRoaXMucG9pbnQodGhpcy5feDQsdGhpcy5feTQpLHRoaXMucG9pbnQodGhpcy5feDUsdGhpcy5feTUpfX0scG9pbnQ6ZnVuY3Rpb24odCxlKXtpZih0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe3ZhciByPXRoaXMuX3gyLXQsbj10aGlzLl95Mi1lO3RoaXMuX2wyM19hPU1hdGguc3FydCh0aGlzLl9sMjNfMmE9TWF0aC5wb3cocipyK24qbix0aGlzLl9hbHBoYSkpfXN3aXRjaCh0aGlzLl9wb2ludCl7Y2FzZSAwOnRoaXMuX3BvaW50PTEsdGhpcy5feDM9dCx0aGlzLl95Mz1lO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yLHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3g0PXQsdGhpcy5feTQ9ZSk7YnJlYWs7Y2FzZSAyOnRoaXMuX3BvaW50PTMsdGhpcy5feDU9dCx0aGlzLl95NT1lO2JyZWFrO2RlZmF1bHQ6d3QodGhpcyx0LGUpfXRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hLHRoaXMuX2wxMl9hPXRoaXMuX2wyM19hLHRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmEsdGhpcy5fbDEyXzJhPXRoaXMuX2wyM18yYSx0aGlzLl94MD10aGlzLl94MSx0aGlzLl94MT10aGlzLl94Mix0aGlzLl94Mj10LHRoaXMuX3kwPXRoaXMuX3kxLHRoaXMuX3kxPXRoaXMuX3kyLHRoaXMuX3kyPWV9fTt2YXIgTXQ9ZnVuY3Rpb24gdChlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP25ldyBBdCh0LGUpOm5ldyB5dCh0LDApfXJldHVybiByLmFscGhhPWZ1bmN0aW9uKGUpe3JldHVybiB0KCtlKX0scn0oLjUpO2Z1bmN0aW9uIFN0KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX2FscGhhPWV9U3QucHJvdG90eXBlPXthcmVhU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPTB9LGFyZWFFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9saW5lPU5hTn0sbGluZVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5feDA9dGhpcy5feDE9dGhpcy5feDI9dGhpcy5feTA9dGhpcy5feTE9dGhpcy5feTI9TmFOLHRoaXMuX2wwMV9hPXRoaXMuX2wxMl9hPXRoaXMuX2wyM19hPXRoaXMuX2wwMV8yYT10aGlzLl9sMTJfMmE9dGhpcy5fbDIzXzJhPXRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjM9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7aWYodD0rdCxlPStlLHRoaXMuX3BvaW50KXt2YXIgcj10aGlzLl94Mi10LG49dGhpcy5feTItZTt0aGlzLl9sMjNfYT1NYXRoLnNxcnQodGhpcy5fbDIzXzJhPU1hdGgucG93KHIqcituKm4sdGhpcy5fYWxwaGEpKX1zd2l0Y2godGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2JyZWFrO2Nhc2UgMjp0aGlzLl9wb2ludD0zLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDIsdGhpcy5feTIpOnRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMuX3gyLHRoaXMuX3kyKTticmVhaztjYXNlIDM6dGhpcy5fcG9pbnQ9NDtkZWZhdWx0Ond0KHRoaXMsdCxlKX10aGlzLl9sMDFfYT10aGlzLl9sMTJfYSx0aGlzLl9sMTJfYT10aGlzLl9sMjNfYSx0aGlzLl9sMDFfMmE9dGhpcy5fbDEyXzJhLHRoaXMuX2wxMl8yYT10aGlzLl9sMjNfMmEsdGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dGhpcy5feDIsdGhpcy5feDI9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT10aGlzLl95Mix0aGlzLl95Mj1lfX07dmFyIEV0PWZ1bmN0aW9uIHQoZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZT9uZXcgU3QodCxlKTpuZXcgYnQodCwwKX1yZXR1cm4gci5hbHBoYT1mdW5jdGlvbihlKXtyZXR1cm4gdCgrZSl9LHJ9KC41KTtmdW5jdGlvbiBMdCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gQ3QodCl7cmV0dXJuIHQ8MD8tMToxfWZ1bmN0aW9uIFB0KHQsZSxyKXt2YXIgbj10Ll94MS10Ll94MCxpPWUtdC5feDEsYT0odC5feTEtdC5feTApLyhufHxpPDAmJi0wKSxvPShyLXQuX3kxKS8oaXx8bjwwJiYtMCkscz0oYSppK28qbikvKG4raSk7cmV0dXJuKEN0KGEpK0N0KG8pKSpNYXRoLm1pbihNYXRoLmFicyhhKSxNYXRoLmFicyhvKSwuNSpNYXRoLmFicyhzKSl8fDB9ZnVuY3Rpb24gSXQodCxlKXt2YXIgcj10Ll94MS10Ll94MDtyZXR1cm4gcj8oMyoodC5feTEtdC5feTApL3ItZSkvMjplfWZ1bmN0aW9uIE90KHQsZSxyKXt2YXIgbj10Ll94MCxpPXQuX3kwLGE9dC5feDEsbz10Ll95MSxzPShhLW4pLzM7dC5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG4rcyxpK3MqZSxhLXMsby1zKnIsYSxvKX1mdW5jdGlvbiB6dCh0KXt0aGlzLl9jb250ZXh0PXR9ZnVuY3Rpb24gRHQodCl7dGhpcy5fY29udGV4dD1uZXcgUnQodCl9ZnVuY3Rpb24gUnQodCl7dGhpcy5fY29udGV4dD10fWZ1bmN0aW9uIEZ0KHQpe3RoaXMuX2NvbnRleHQ9dH1mdW5jdGlvbiBCdCh0KXt2YXIgZSxyLG49dC5sZW5ndGgtMSxpPW5ldyBBcnJheShuKSxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKTtmb3IoaVswXT0wLGFbMF09MixvWzBdPXRbMF0rMip0WzFdLGU9MTtlPG4tMTsrK2UpaVtlXT0xLGFbZV09NCxvW2VdPTQqdFtlXSsyKnRbZSsxXTtmb3IoaVtuLTFdPTIsYVtuLTFdPTcsb1tuLTFdPTgqdFtuLTFdK3Rbbl0sZT0xO2U8bjsrK2Upcj1pW2VdL2FbZS0xXSxhW2VdLT1yLG9bZV0tPXIqb1tlLTFdO2ZvcihpW24tMV09b1tuLTFdL2Fbbi0xXSxlPW4tMjtlPj0wOy0tZSlpW2VdPShvW2VdLWlbZSsxXSkvYVtlXTtmb3IoYVtuLTFdPSh0W25dK2lbbi0xXSkvMixlPTA7ZTxuLTE7KytlKWFbZV09Mip0W2UrMV0taVtlKzFdO3JldHVybltpLGFdfWZ1bmN0aW9uIE50KHQsZSl7dGhpcy5fY29udGV4dD10LHRoaXMuX3Q9ZX1mdW5jdGlvbiBqdCh0LGUpe2lmKChpPXQubGVuZ3RoKT4xKWZvcih2YXIgcixuLGksYT0xLG89dFtlWzBdXSxzPW8ubGVuZ3RoO2E8aTsrK2EpZm9yKG49byxvPXRbZVthXV0scj0wO3I8czsrK3Ipb1tyXVsxXSs9b1tyXVswXT1pc05hTihuW3JdWzFdKT9uW3JdWzBdOm5bcl1bMV19ZnVuY3Rpb24gVXQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpOy0tZT49MDspcltlXT1lO3JldHVybiByfWZ1bmN0aW9uIFZ0KHQsZSl7cmV0dXJuIHRbZV19ZnVuY3Rpb24gSHQodCl7dmFyIGU9dC5tYXAocXQpO3JldHVybiBVdCh0KS5zb3J0KChmdW5jdGlvbih0LHIpe3JldHVybiBlW3RdLWVbcl19KSl9ZnVuY3Rpb24gcXQodCl7Zm9yKHZhciBlLHI9LTEsbj0wLGk9dC5sZW5ndGgsYT0tMS8wOysrcjxpOykoZT0rdFtyXVsxXSk+YSYmKGE9ZSxuPXIpO3JldHVybiBufWZ1bmN0aW9uIEd0KHQpe3ZhciBlPXQubWFwKFl0KTtyZXR1cm4gVXQodCkuc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZVt0XS1lW3JdfSkpfWZ1bmN0aW9uIFl0KHQpe2Zvcih2YXIgZSxyPTAsbj0tMSxpPXQubGVuZ3RoOysrbjxpOykoZT0rdFtuXVsxXSkmJihyKz1lKTtyZXR1cm4gcn1MdC5wcm90b3R5cGU9e2FyZWFTdGFydDpsdCxhcmVhRW5kOmx0LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXt0aGlzLl9wb2ludCYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKX0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0PSt0LGU9K2UsdGhpcy5fcG9pbnQ/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKToodGhpcy5fcG9pbnQ9MSx0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpKX19LHp0LnByb3RvdHlwZT17YXJlYVN0YXJ0OmZ1bmN0aW9uKCl7dGhpcy5fbGluZT0wfSxhcmVhRW5kOmZ1bmN0aW9uKCl7dGhpcy5fbGluZT1OYU59LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuX3gwPXRoaXMuX3gxPXRoaXMuX3kwPXRoaXMuX3kxPXRoaXMuX3QwPU5hTix0aGlzLl9wb2ludD0wfSxsaW5lRW5kOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDI6dGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5feDEsdGhpcy5feTEpO2JyZWFrO2Nhc2UgMzpPdCh0aGlzLHRoaXMuX3QwLEl0KHRoaXMsdGhpcy5fdDApKX0odGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT10aGlzLl9wb2ludCkmJnRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCksdGhpcy5fbGluZT0xLXRoaXMuX2xpbmV9LHBvaW50OmZ1bmN0aW9uKHQsZSl7dmFyIHI9TmFOO2lmKGU9K2UsKHQ9K3QpIT09dGhpcy5feDF8fGUhPT10aGlzLl95MSl7c3dpdGNoKHRoaXMuX3BvaW50KXtjYXNlIDA6dGhpcy5fcG9pbnQ9MSx0aGlzLl9saW5lP3RoaXMuX2NvbnRleHQubGluZVRvKHQsZSk6dGhpcy5fY29udGV4dC5tb3ZlVG8odCxlKTticmVhaztjYXNlIDE6dGhpcy5fcG9pbnQ9MjticmVhaztjYXNlIDI6dGhpcy5fcG9pbnQ9MyxPdCh0aGlzLEl0KHRoaXMscj1QdCh0aGlzLHQsZSkpLHIpO2JyZWFrO2RlZmF1bHQ6T3QodGhpcyx0aGlzLl90MCxyPVB0KHRoaXMsdCxlKSl9dGhpcy5feDA9dGhpcy5feDEsdGhpcy5feDE9dCx0aGlzLl95MD10aGlzLl95MSx0aGlzLl95MT1lLHRoaXMuX3QwPXJ9fX0sKER0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHp0LnByb3RvdHlwZSkpLnBvaW50PWZ1bmN0aW9uKHQsZSl7enQucHJvdG90eXBlLnBvaW50LmNhbGwodGhpcyxlLHQpfSxSdC5wcm90b3R5cGU9e21vdmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubW92ZVRvKGUsdCl9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3RoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCl9LGxpbmVUbzpmdW5jdGlvbih0LGUpe3RoaXMuX2NvbnRleHQubGluZVRvKGUsdCl9LGJlemllckN1cnZlVG86ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuX2NvbnRleHQuYmV6aWVyQ3VydmVUbyhlLHQsbixyLGEsaSl9fSxGdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PVtdLHRoaXMuX3k9W119LGxpbmVFbmQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl94LGU9dGhpcy5feSxyPXQubGVuZ3RoO2lmKHIpaWYodGhpcy5fbGluZT90aGlzLl9jb250ZXh0LmxpbmVUbyh0WzBdLGVbMF0pOnRoaXMuX2NvbnRleHQubW92ZVRvKHRbMF0sZVswXSksMj09PXIpdGhpcy5fY29udGV4dC5saW5lVG8odFsxXSxlWzFdKTtlbHNlIGZvcih2YXIgbj1CdCh0KSxpPUJ0KGUpLGE9MCxvPTE7bzxyOysrYSwrK28pdGhpcy5fY29udGV4dC5iZXppZXJDdXJ2ZVRvKG5bMF1bYV0saVswXVthXSxuWzFdW2FdLGlbMV1bYV0sdFtvXSxlW29dKTsodGhpcy5fbGluZXx8MCE9PXRoaXMuX2xpbmUmJjE9PT1yKSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPTEtdGhpcy5fbGluZSx0aGlzLl94PXRoaXMuX3k9bnVsbH0scG9pbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLl94LnB1c2goK3QpLHRoaXMuX3kucHVzaCgrZSl9fSxOdC5wcm90b3R5cGU9e2FyZWFTdGFydDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9MH0sYXJlYUVuZDpmdW5jdGlvbigpe3RoaXMuX2xpbmU9TmFOfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLl94PXRoaXMuX3k9TmFOLHRoaXMuX3BvaW50PTB9LGxpbmVFbmQ6ZnVuY3Rpb24oKXswPHRoaXMuX3QmJnRoaXMuX3Q8MSYmMj09PXRoaXMuX3BvaW50JiZ0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LHRoaXMuX3kpLCh0aGlzLl9saW5lfHwwIT09dGhpcy5fbGluZSYmMT09PXRoaXMuX3BvaW50KSYmdGhpcy5fY29udGV4dC5jbG9zZVBhdGgoKSx0aGlzLl9saW5lPj0wJiYodGhpcy5fdD0xLXRoaXMuX3QsdGhpcy5fbGluZT0xLXRoaXMuX2xpbmUpfSxwb2ludDpmdW5jdGlvbih0LGUpe3N3aXRjaCh0PSt0LGU9K2UsdGhpcy5fcG9pbnQpe2Nhc2UgMDp0aGlzLl9wb2ludD0xLHRoaXMuX2xpbmU/dGhpcy5fY29udGV4dC5saW5lVG8odCxlKTp0aGlzLl9jb250ZXh0Lm1vdmVUbyh0LGUpO2JyZWFrO2Nhc2UgMTp0aGlzLl9wb2ludD0yO2RlZmF1bHQ6aWYodGhpcy5fdDw9MCl0aGlzLl9jb250ZXh0LmxpbmVUbyh0aGlzLl94LGUpLHRoaXMuX2NvbnRleHQubGluZVRvKHQsZSk7ZWxzZXt2YXIgcj10aGlzLl94KigxLXRoaXMuX3QpK3QqdGhpcy5fdDt0aGlzLl9jb250ZXh0LmxpbmVUbyhyLHRoaXMuX3kpLHRoaXMuX2NvbnRleHQubGluZVRvKHIsZSl9fXRoaXMuX3g9dCx0aGlzLl95PWV9fSx0LmFyYz1mdW5jdGlvbigpe3ZhciB0PW0sbz1nLHc9cigwKSxUPW51bGwsaz12LEE9eSxNPXgsUz1udWxsO2Z1bmN0aW9uIEUoKXt2YXIgcixtLGc9K3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHY9K28uYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9ay5hcHBseSh0aGlzLGFyZ3VtZW50cyktZix4PUEuYXBwbHkodGhpcyxhcmd1bWVudHMpLWYsRT1uKHgteSksTD14Pnk7aWYoU3x8KFM9cj1lLnBhdGgoKSksdjxnJiYobT12LHY9ZyxnPW0pLHY+MWUtMTIpaWYoRT5oLTFlLTEyKVMubW92ZVRvKHYqYSh5KSx2KmwoeSkpLFMuYXJjKDAsMCx2LHkseCwhTCksZz4xZS0xMiYmKFMubW92ZVRvKGcqYSh4KSxnKmwoeCkpLFMuYXJjKDAsMCxnLHgseSxMKSk7ZWxzZXt2YXIgQyxQLEk9eSxPPXgsej15LEQ9eCxSPUUsRj1FLEI9TS5hcHBseSh0aGlzLGFyZ3VtZW50cykvMixOPUI+MWUtMTImJihUPytULmFwcGx5KHRoaXMsYXJndW1lbnRzKTpjKGcqZyt2KnYpKSxqPXMobih2LWcpLzIsK3cuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxVPWosVj1qO2lmKE4+MWUtMTIpe3ZhciBIPWQoTi9nKmwoQikpLHE9ZChOL3YqbChCKSk7KFItPTIqSCk+MWUtMTI/KHorPUgqPUw/MTotMSxELT1IKTooUj0wLHo9RD0oeSt4KS8yKSwoRi09MipxKT4xZS0xMj8oSSs9cSo9TD8xOi0xLE8tPXEpOihGPTAsST1PPSh5K3gpLzIpfXZhciBHPXYqYShJKSxZPXYqbChJKSxXPWcqYShEKSxYPWcqbChEKTtpZihqPjFlLTEyKXt2YXIgWixKPXYqYShPKSxLPXYqbChPKSxRPWcqYSh6KSwkPWcqbCh6KTtpZihFPHUmJihaPWIoRyxZLFEsJCxKLEssVyxYKSkpe3ZhciB0dD1HLVpbMF0sZXQ9WS1aWzFdLHJ0PUotWlswXSxudD1LLVpbMV0saXQ9MS9sKHAoKHR0KnJ0K2V0Km50KS8oYyh0dCp0dCtldCpldCkqYyhydCpydCtudCpudCkpKS8yKSxhdD1jKFpbMF0qWlswXStaWzFdKlpbMV0pO1U9cyhqLChnLWF0KS8oaXQtMSkpLFY9cyhqLCh2LWF0KS8oaXQrMSkpfX1GPjFlLTEyP1Y+MWUtMTI/KEM9XyhRLCQsRyxZLHYsVixMKSxQPV8oSixLLFcsWCx2LFYsTCksUy5tb3ZlVG8oQy5jeCtDLngwMSxDLmN5K0MueTAxKSxWPGo/Uy5hcmMoQy5jeCxDLmN5LFYsaShDLnkwMSxDLngwMSksaShQLnkwMSxQLngwMSksIUwpOihTLmFyYyhDLmN4LEMuY3ksVixpKEMueTAxLEMueDAxKSxpKEMueTExLEMueDExKSwhTCksUy5hcmMoMCwwLHYsaShDLmN5K0MueTExLEMuY3grQy54MTEpLGkoUC5jeStQLnkxMSxQLmN4K1AueDExKSwhTCksUy5hcmMoUC5jeCxQLmN5LFYsaShQLnkxMSxQLngxMSksaShQLnkwMSxQLngwMSksIUwpKSk6KFMubW92ZVRvKEcsWSksUy5hcmMoMCwwLHYsSSxPLCFMKSk6Uy5tb3ZlVG8oRyxZKSxnPjFlLTEyJiZSPjFlLTEyP1U+MWUtMTI/KEM9XyhXLFgsSixLLGcsLVUsTCksUD1fKEcsWSxRLCQsZywtVSxMKSxTLmxpbmVUbyhDLmN4K0MueDAxLEMuY3krQy55MDEpLFU8aj9TLmFyYyhDLmN4LEMuY3ksVSxpKEMueTAxLEMueDAxKSxpKFAueTAxLFAueDAxKSwhTCk6KFMuYXJjKEMuY3gsQy5jeSxVLGkoQy55MDEsQy54MDEpLGkoQy55MTEsQy54MTEpLCFMKSxTLmFyYygwLDAsZyxpKEMuY3krQy55MTEsQy5jeCtDLngxMSksaShQLmN5K1AueTExLFAuY3grUC54MTEpLEwpLFMuYXJjKFAuY3gsUC5jeSxVLGkoUC55MTEsUC54MTEpLGkoUC55MDEsUC54MDEpLCFMKSkpOlMuYXJjKDAsMCxnLEQseixMKTpTLmxpbmVUbyhXLFgpfWVsc2UgUy5tb3ZlVG8oMCwwKTtpZihTLmNsb3NlUGF0aCgpLHIpcmV0dXJuIFM9bnVsbCxyKyIifHxudWxsfXJldHVybiBFLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIGU9KCt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK28uYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLHI9KCtrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSsgK0EuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLXUvMjtyZXR1cm5bYShyKSplLGwocikqZV19LEUuaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpyKCtlKSxFKTp0fSxFLm91dGVyUmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6b30sRS5jb3JuZXJSYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHc9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTp3fSxFLnBhZFJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oVD1udWxsPT10P251bGw6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTpUfSxFLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGs9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxFKTprfSxFLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhBPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksRSk6QX0sRS5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLEUpOk19LEUuY29udGV4dD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oUz1udWxsPT10P251bGw6dCxFKTpTfSxFfSx0LmFyZWE9Uyx0LmFyZWFSYWRpYWw9RCx0LmN1cnZlQmFzaXM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1dCh0KX0sdC5jdXJ2ZUJhc2lzQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZnQodCl9LHQuY3VydmVCYXNpc09wZW49ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBodCh0KX0sdC5jdXJ2ZUJ1bmRsZT1kdCx0LmN1cnZlQ2FyZGluYWw9dnQsdC5jdXJ2ZUNhcmRpbmFsQ2xvc2VkPXh0LHQuY3VydmVDYXJkaW5hbE9wZW49X3QsdC5jdXJ2ZUNhdG11bGxSb209a3QsdC5jdXJ2ZUNhdG11bGxSb21DbG9zZWQ9TXQsdC5jdXJ2ZUNhdG11bGxSb21PcGVuPUV0LHQuY3VydmVMaW5lYXI9VCx0LmN1cnZlTGluZWFyQ2xvc2VkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTHQodCl9LHQuY3VydmVNb25vdG9uZVg9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6dCh0KX0sdC5jdXJ2ZU1vbm90b25lWT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IER0KHQpfSx0LmN1cnZlTmF0dXJhbD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEZ0KHQpfSx0LmN1cnZlU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE50KHQsLjUpfSx0LmN1cnZlU3RlcEFmdGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTnQodCwxKX0sdC5jdXJ2ZVN0ZXBCZWZvcmU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBOdCh0LDApfSx0LmxpbmU9TSx0LmxpbmVSYWRpYWw9eix0LmxpbmtIb3Jpem9udGFsPWZ1bmN0aW9uKCl7cmV0dXJuIGooVSl9LHQubGlua1JhZGlhbD1mdW5jdGlvbigpe3ZhciB0PWooSCk7cmV0dXJuIHQuYW5nbGU9dC54LGRlbGV0ZSB0LngsdC5yYWRpdXM9dC55LGRlbGV0ZSB0LnksdH0sdC5saW5rVmVydGljYWw9ZnVuY3Rpb24oKXtyZXR1cm4gaihWKX0sdC5waWU9ZnVuY3Rpb24oKXt2YXIgdD1MLGU9RSxuPW51bGwsaT1yKDApLGE9cihoKSxvPXIoMCk7ZnVuY3Rpb24gcyhyKXt2YXIgcyxsLGMsdSxmLHA9ci5sZW5ndGgsZD0wLG09bmV3IEFycmF5KHApLGc9bmV3IEFycmF5KHApLHY9K2kuYXBwbHkodGhpcyxhcmd1bWVudHMpLHk9TWF0aC5taW4oaCxNYXRoLm1heCgtaCxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKS12KSkseD1NYXRoLm1pbihNYXRoLmFicyh5KS9wLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxiPXgqKHk8MD8tMToxKTtmb3Iocz0wO3M8cDsrK3MpKGY9Z1ttW3NdPXNdPSt0KHJbc10scyxyKSk+MCYmKGQrPWYpO2ZvcihudWxsIT1lP20uc29ydCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gZShnW3RdLGdbcl0pfSkpOm51bGwhPW4mJm0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbihyW3RdLHJbZV0pfSkpLHM9MCxjPWQ/KHktcCpiKS9kOjA7czxwOysrcyx2PXUpbD1tW3NdLHU9disoKGY9Z1tsXSk+MD9mKmM6MCkrYixnW2xdPXtkYXRhOnJbbF0saW5kZXg6cyx2YWx1ZTpmLHN0YXJ0QW5nbGU6dixlbmRBbmdsZTp1LHBhZEFuZ2xlOnh9O3JldHVybiBnfXJldHVybiBzLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cigrZSkscyk6dH0scy5zb3J0VmFsdWVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbj1udWxsLHMpOmV9LHMuc29ydD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10LGU9bnVsbCxzKTpufSxzLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxzKTppfSxzLmVuZEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCkscyk6YX0scy5wYWRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnIoK3QpLHMpOm99LHN9LHQucG9pbnRSYWRpYWw9Uix0LnJhZGlhbEFyZWE9RCx0LnJhZGlhbExpbmU9eix0LnN0YWNrPWZ1bmN0aW9uKCl7dmFyIHQ9cihbXSksZT1VdCxuPWp0LGk9VnQ7ZnVuY3Rpb24gYShyKXt2YXIgYSxvLHM9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksbD1yLmxlbmd0aCxjPXMubGVuZ3RoLHU9bmV3IEFycmF5KGMpO2ZvcihhPTA7YTxjOysrYSl7Zm9yKHZhciBmLGg9c1thXSxwPXVbYV09bmV3IEFycmF5KGwpLGQ9MDtkPGw7KytkKXBbZF09Zj1bMCwraShyW2RdLGgsZCxyKV0sZi5kYXRhPXJbZF07cC5rZXk9aH1mb3IoYT0wLG89ZSh1KTthPGM7KythKXVbb1thXV0uaW5kZXg9YTtyZXR1cm4gbih1LG8pLHV9cmV0dXJuIGEua2V5cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD0iZnVuY3Rpb24iPT10eXBlb2YgZT9lOnIoRi5jYWxsKGUpKSxhKTp0fSxhLnZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cigrdCksYSk6aX0sYS5vcmRlcj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1udWxsPT10P1V0OiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6cihGLmNhbGwodCkpLGEpOmV9LGEub2Zmc2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPW51bGw9PXQ/anQ6dCxhKTpufSxhfSx0LnN0YWNrT2Zmc2V0RGl2ZXJnaW5nPWZ1bmN0aW9uKHQsZSl7aWYoKHM9dC5sZW5ndGgpPjApZm9yKHZhciByLG4saSxhLG8scyxsPTAsYz10W2VbMF1dLmxlbmd0aDtsPGM7KytsKWZvcihhPW89MCxyPTA7cjxzOysrcikoaT0obj10W2Vbcl1dW2xdKVsxXS1uWzBdKT4wPyhuWzBdPWEsblsxXT1hKz1pKTppPDA/KG5bMV09byxuWzBdPW8rPWkpOihuWzBdPTAsblsxXT1pKX0sdC5zdGFja09mZnNldEV4cGFuZD1mdW5jdGlvbih0LGUpe2lmKChuPXQubGVuZ3RoKT4wKXtmb3IodmFyIHIsbixpLGE9MCxvPXRbMF0ubGVuZ3RoO2E8bzsrK2Epe2ZvcihpPXI9MDtyPG47KytyKWkrPXRbcl1bYV1bMV18fDA7aWYoaSlmb3Iocj0wO3I8bjsrK3IpdFtyXVthXVsxXS89aX1qdCh0LGUpfX0sdC5zdGFja09mZnNldE5vbmU9anQsdC5zdGFja09mZnNldFNpbGhvdWV0dGU9ZnVuY3Rpb24odCxlKXtpZigocj10Lmxlbmd0aCk+MCl7Zm9yKHZhciByLG49MCxpPXRbZVswXV0sYT1pLmxlbmd0aDtuPGE7KytuKXtmb3IodmFyIG89MCxzPTA7bzxyOysrbylzKz10W29dW25dWzFdfHwwO2lbbl1bMV0rPWlbbl1bMF09LXMvMn1qdCh0LGUpfX0sdC5zdGFja09mZnNldFdpZ2dsZT1mdW5jdGlvbih0LGUpe2lmKChpPXQubGVuZ3RoKT4wJiYobj0ocj10W2VbMF1dKS5sZW5ndGgpPjApe2Zvcih2YXIgcixuLGksYT0wLG89MTtvPG47KytvKXtmb3IodmFyIHM9MCxsPTAsYz0wO3M8aTsrK3Mpe2Zvcih2YXIgdT10W2Vbc11dLGY9dVtvXVsxXXx8MCxoPShmLSh1W28tMV1bMV18fDApKS8yLHA9MDtwPHM7KytwKXt2YXIgZD10W2VbcF1dO2grPShkW29dWzFdfHwwKS0oZFtvLTFdWzFdfHwwKX1sKz1mLGMrPWgqZn1yW28tMV1bMV0rPXJbby0xXVswXT1hLGwmJihhLT1jL2wpfXJbby0xXVsxXSs9cltvLTFdWzBdPWEsanQodCxlKX19LHQuc3RhY2tPcmRlckFwcGVhcmFuY2U9SHQsdC5zdGFja09yZGVyQXNjZW5kaW5nPUd0LHQuc3RhY2tPcmRlckRlc2NlbmRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIEd0KHQpLnJldmVyc2UoKX0sdC5zdGFja09yZGVySW5zaWRlT3V0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10Lmxlbmd0aCxpPXQubWFwKFl0KSxhPUh0KHQpLG89MCxzPTAsbD1bXSxjPVtdO2ZvcihlPTA7ZTxuOysrZSlyPWFbZV0sbzxzPyhvKz1pW3JdLGwucHVzaChyKSk6KHMrPWlbcl0sYy5wdXNoKHIpKTtyZXR1cm4gYy5yZXZlcnNlKCkuY29uY2F0KGwpfSx0LnN0YWNrT3JkZXJOb25lPVV0LHQuc3RhY2tPcmRlclJldmVyc2U9ZnVuY3Rpb24odCl7cmV0dXJuIFV0KHQpLnJldmVyc2UoKX0sdC5zeW1ib2w9ZnVuY3Rpb24oKXt2YXIgdD1yKHEpLG49cig2NCksaT1udWxsO2Z1bmN0aW9uIGEoKXt2YXIgcjtpZihpfHwoaT1yPWUucGF0aCgpKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKS5kcmF3KGksK24uYXBwbHkodGhpcyxhcmd1bWVudHMpKSxyKXJldHVybiBpPW51bGwscisiInx8bnVsbH1yZXR1cm4gYS50eXBlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6cihlKSxhKTp0fSxhLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpyKCt0KSxhKTpufSxhLmNvbnRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bnVsbD09dD9udWxsOnQsYSk6aX0sYX0sdC5zeW1ib2xDaXJjbGU9cSx0LnN5bWJvbENyb3NzPUcsdC5zeW1ib2xEaWFtb25kPVgsdC5zeW1ib2xTcXVhcmU9JCx0LnN5bWJvbFN0YXI9USx0LnN5bWJvbFRyaWFuZ2xlPWV0LHQuc3ltYm9sV3llPW90LHQuc3ltYm9scz1zdCxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtcGF0aCI6MTY1fV0sMTY4OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKG4saSl7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2kocix0KCJkMy10aW1lIikpOmkoKG49bnx8c2VsZikuZDM9bi5kM3x8e30sbi5kMyl9KHRoaXMsKGZ1bmN0aW9uKHQsZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIodCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZSgtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCk7cmV0dXJuIGUuc2V0RnVsbFllYXIodC55KSxlfXJldHVybiBuZXcgRGF0ZSh0LnksdC5tLHQuZCx0LkgsdC5NLHQuUyx0LkwpfWZ1bmN0aW9uIG4odCl7aWYoMDw9dC55JiZ0Lnk8MTAwKXt2YXIgZT1uZXcgRGF0ZShEYXRlLlVUQygtMSx0Lm0sdC5kLHQuSCx0Lk0sdC5TLHQuTCkpO3JldHVybiBlLnNldFVUQ0Z1bGxZZWFyKHQueSksZX1yZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEModC55LHQubSx0LmQsdC5ILHQuTSx0LlMsdC5MKSl9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJue3k6dCxtOmUsZDpyLEg6MCxNOjAsUzowLEw6MH19ZnVuY3Rpb24gYSh0KXt2YXIgYT10LmRhdGVUaW1lLG89dC5kYXRlLGw9dC50aW1lLGM9dC5wZXJpb2RzLHU9dC5kYXlzLGY9dC5zaG9ydERheXMsaD10Lm1vbnRocyxZPXQuc2hvcnRNb250aHMsaHQ9cChjKSxrdD1kKGMpLEF0PXAodSksTXQ9ZCh1KSxTdD1wKGYpLEV0PWQoZiksTHQ9cChoKSxDdD1kKGgpLFB0PXAoWSksSXQ9ZChZKSxPdD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldERheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldERheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gWVt0LmdldE1vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBoW3QuZ2V0TW9udGgoKV19LGM6bnVsbCxkOkQsZTpELGY6aixnOkssRzokLEg6UixJOkYsajpCLEw6TixtOlUsTTpWLHA6ZnVuY3Rpb24odCl7cmV0dXJuIGNbKyh0LmdldEhvdXJzKCk+PTEyKV19LHE6ZnVuY3Rpb24odCl7cmV0dXJuIDErfn4odC5nZXRNb250aCgpLzMpfSxROnd0LHM6VHQsUzpILHU6cSxVOkcsVjpXLHc6WCxXOloseDpudWxsLFg6bnVsbCx5OkosWTpRLFo6dHQsIiUiOl90fSx6dD17YTpmdW5jdGlvbih0KXtyZXR1cm4gZlt0LmdldFVUQ0RheSgpXX0sQTpmdW5jdGlvbih0KXtyZXR1cm4gdVt0LmdldFVUQ0RheSgpXX0sYjpmdW5jdGlvbih0KXtyZXR1cm4gWVt0LmdldFVUQ01vbnRoKCldfSxCOmZ1bmN0aW9uKHQpe3JldHVybiBoW3QuZ2V0VVRDTW9udGgoKV19LGM6bnVsbCxkOmV0LGU6ZXQsZjpvdCxnOnZ0LEc6eHQsSDpydCxJOm50LGo6aXQsTDphdCxtOnN0LE06bHQscDpmdW5jdGlvbih0KXtyZXR1cm4gY1srKHQuZ2V0VVRDSG91cnMoKT49MTIpXX0scTpmdW5jdGlvbih0KXtyZXR1cm4gMSt+fih0LmdldFVUQ01vbnRoKCkvMyl9LFE6d3QsczpUdCxTOmN0LHU6dXQsVTpmdCxWOnB0LHc6ZHQsVzptdCx4Om51bGwsWDpudWxsLHk6Z3QsWTp5dCxaOmJ0LCIlIjpfdH0sRHQ9e2E6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVN0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQudz1FdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxBOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1BdC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0Lnc9TXRbblswXS50b0xvd2VyQ2FzZSgpXSxyK25bMF0ubGVuZ3RoKTotMX0sYjpmdW5jdGlvbih0LGUscil7dmFyIG49UHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5tPUl0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LEI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUx0LmV4ZWMoZS5zbGljZShyKSk7cmV0dXJuIG4/KHQubT1DdFtuWzBdLnRvTG93ZXJDYXNlKCldLHIrblswXS5sZW5ndGgpOi0xfSxjOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQnQodCxhLGUscil9LGQ6QSxlOkEsZjpQLGc6XyxHOmIsSDpTLEk6UyxqOk0sTDpDLG06ayxNOkUscDpmdW5jdGlvbih0LGUscil7dmFyIG49aHQuZXhlYyhlLnNsaWNlKHIpKTtyZXR1cm4gbj8odC5wPWt0W25bMF0udG9Mb3dlckNhc2UoKV0scituWzBdLmxlbmd0aCk6LTF9LHE6VCxROk8sczp6LFM6TCx1OmcsVTp2LFY6eSx3Om0sVzp4LHg6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBCdCh0LG8sZSxyKX0sWDpmdW5jdGlvbih0LGUscil7cmV0dXJuIEJ0KHQsbCxlLHIpfSx5Ol8sWTpiLFo6dywiJSI6SX07ZnVuY3Rpb24gUnQodCxlKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG4saSxhLG89W10sbD0tMSxjPTAsdT10Lmxlbmd0aDtmb3IociBpbnN0YW5jZW9mIERhdGV8fChyPW5ldyBEYXRlKCtyKSk7KytsPHU7KTM3PT09dC5jaGFyQ29kZUF0KGwpJiYoby5wdXNoKHQuc2xpY2UoYyxsKSksbnVsbCE9KGk9c1tuPXQuY2hhckF0KCsrbCldKT9uPXQuY2hhckF0KCsrbCk6aT0iZSI9PT1uPyIgIjoiMCIsKGE9ZVtuXSkmJihuPWEocixpKSksby5wdXNoKG4pLGM9bCsxKTtyZXR1cm4gby5wdXNoKHQuc2xpY2UoYyxsKSksby5qb2luKCIiKX19ZnVuY3Rpb24gRnQodCxhKXtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIHMsbCxjPWkoMTkwMCx2b2lkIDAsMSk7aWYoQnQoYyx0LG8rPSIiLDApIT1vLmxlbmd0aClyZXR1cm4gbnVsbDtpZigiUSJpbiBjKXJldHVybiBuZXcgRGF0ZShjLlEpO2lmKCJzImluIGMpcmV0dXJuIG5ldyBEYXRlKDFlMypjLnMrKCJMImluIGM/Yy5MOjApKTtpZihhJiYhKCJaImluIGMpJiYoYy5aPTApLCJwImluIGMmJihjLkg9Yy5IJTEyKzEyKmMucCksdm9pZCAwPT09Yy5tJiYoYy5tPSJxImluIGM/Yy5xOjApLCJWImluIGMpe2lmKGMuVjwxfHxjLlY+NTMpcmV0dXJuIG51bGw7InciaW4gY3x8KGMudz0xKSwiWiJpbiBjPyhsPShzPW4oaShjLnksMCwxKSkpLmdldFVUQ0RheSgpLHM9bD40fHwwPT09bD9lLnV0Y01vbmRheS5jZWlsKHMpOmUudXRjTW9uZGF5KHMpLHM9ZS51dGNEYXkub2Zmc2V0KHMsNyooYy5WLTEpKSxjLnk9cy5nZXRVVENGdWxsWWVhcigpLGMubT1zLmdldFVUQ01vbnRoKCksYy5kPXMuZ2V0VVRDRGF0ZSgpKyhjLncrNiklNyk6KGw9KHM9cihpKGMueSwwLDEpKSkuZ2V0RGF5KCkscz1sPjR8fDA9PT1sP2UudGltZU1vbmRheS5jZWlsKHMpOmUudGltZU1vbmRheShzKSxzPWUudGltZURheS5vZmZzZXQocyw3KihjLlYtMSkpLGMueT1zLmdldEZ1bGxZZWFyKCksYy5tPXMuZ2V0TW9udGgoKSxjLmQ9cy5nZXREYXRlKCkrKGMudys2KSU3KX1lbHNlKCJXImluIGN8fCJVImluIGMpJiYoInciaW4gY3x8KGMudz0idSJpbiBjP2MudSU3OiJXImluIGM/MTowKSxsPSJaImluIGM/bihpKGMueSwwLDEpKS5nZXRVVENEYXkoKTpyKGkoYy55LDAsMSkpLmdldERheSgpLGMubT0wLGMuZD0iVyJpbiBjPyhjLncrNiklNys3KmMuVy0obCs1KSU3OmMudys3KmMuVS0obCs2KSU3KTtyZXR1cm4iWiJpbiBjPyhjLkgrPWMuWi8xMDB8MCxjLk0rPWMuWiUxMDAsbihjKSk6cihjKX19ZnVuY3Rpb24gQnQodCxlLHIsbil7Zm9yKHZhciBpLGEsbz0wLGw9ZS5sZW5ndGgsYz1yLmxlbmd0aDtvPGw7KXtpZihuPj1jKXJldHVybi0xO2lmKDM3PT09KGk9ZS5jaGFyQ29kZUF0KG8rKykpKXtpZihpPWUuY2hhckF0KG8rKyksIShhPUR0W2kgaW4gcz9lLmNoYXJBdChvKyspOmldKXx8KG49YSh0LHIsbikpPDApcmV0dXJuLTF9ZWxzZSBpZihpIT1yLmNoYXJDb2RlQXQobisrKSlyZXR1cm4tMX1yZXR1cm4gbn1yZXR1cm4gT3QueD1SdChvLE90KSxPdC5YPVJ0KGwsT3QpLE90LmM9UnQoYSxPdCksenQueD1SdChvLHp0KSx6dC5YPVJ0KGwsenQpLHp0LmM9UnQoYSx6dCkse2Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1SdCh0Kz0iIixPdCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0scGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RnQodCs9IiIsITEpO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9LHV0Y0Zvcm1hdDpmdW5jdGlvbih0KXt2YXIgZT1SdCh0Kz0iIix6dCk7cmV0dXJuIGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZX0sdXRjUGFyc2U6ZnVuY3Rpb24odCl7dmFyIGU9RnQodCs9IiIsITApO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHR9LGV9fX12YXIgbyxzPXsiLSI6IiIsXzoiICIsMDoiMCJ9LGw9L15ccypcZCsvLGM9L14lLyx1PS9bXFxeJCorP3xbXF0oKS57fV0vZztmdW5jdGlvbiBmKHQsZSxyKXt2YXIgbj10PDA/Ii0iOiIiLGk9KG4/LXQ6dCkrIiIsYT1pLmxlbmd0aDtyZXR1cm4gbisoYTxyP25ldyBBcnJheShyLWErMSkuam9pbihlKStpOmkpfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQucmVwbGFjZSh1LCJcXCQmIil9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIrdC5tYXAoaCkuam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIGQodCl7Zm9yKHZhciBlPXt9LHI9LTEsbj10Lmxlbmd0aDsrK3I8bjspZVt0W3JdLnRvTG93ZXJDYXNlKCldPXI7cmV0dXJuIGV9ZnVuY3Rpb24gbSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzEpKTtyZXR1cm4gbj8odC53PStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIGcodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQudT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiB2KHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlU9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geSh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5WPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuVz0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBiKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrNCkpO3JldHVybiBuPyh0Lnk9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC55PStuWzBdKygrblswXT42OD8xOTAwOjJlMykscituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49L14oWil8KFsrLV1cZFxkKSg/Ojo/KFxkXGQpKT8vLmV4ZWMoZS5zbGljZShyLHIrNikpO3JldHVybiBuPyh0Llo9blsxXT8wOi0oblsyXSsoblszXXx8IjAwIikpLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisxKSk7cmV0dXJuIG4/KHQucT0zKm5bMF0tMyxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0Lm09blswXS0xLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuZD0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMykpO3JldHVybiBuPyh0Lm09MCx0LmQ9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gUyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzIpKTtyZXR1cm4gbj8odC5IPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEUodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscisyKSk7cmV0dXJuIG4/KHQuTT0rblswXSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBMKHQsZSxyKXt2YXIgbj1sLmV4ZWMoZS5zbGljZShyLHIrMikpO3JldHVybiBuPyh0LlM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gQyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocixyKzMpKTtyZXR1cm4gbj8odC5MPStuWzBdLHIrblswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPWwuZXhlYyhlLnNsaWNlKHIscis2KSk7cmV0dXJuIG4/KHQuTD1NYXRoLmZsb29yKG5bMF0vMWUzKSxyK25bMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj1jLmV4ZWMoZS5zbGljZShyLHIrMSkpO3JldHVybiBuP3IrblswXS5sZW5ndGg6LTF9ZnVuY3Rpb24gTyh0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LlE9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24geih0LGUscil7dmFyIG49bC5leGVjKGUuc2xpY2UocikpO3JldHVybiBuPyh0LnM9K25bMF0scituWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBmKHQuZ2V0RGF0ZSgpLGUsMil9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBmKHQuZ2V0SG91cnMoKSxlLDIpfWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4gZih0LmdldEhvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gQih0LHIpe3JldHVybiBmKDErZS50aW1lRGF5LmNvdW50KGUudGltZVllYXIodCksdCksciwzKX1mdW5jdGlvbiBOKHQsZSl7cmV0dXJuIGYodC5nZXRNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIGoodCxlKXtyZXR1cm4gTih0LGUpKyIwMDAifWZ1bmN0aW9uIFUodCxlKXtyZXR1cm4gZih0LmdldE1vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIFYodCxlKXtyZXR1cm4gZih0LmdldE1pbnV0ZXMoKSxlLDIpfWZ1bmN0aW9uIEgodCxlKXtyZXR1cm4gZih0LmdldFNlY29uZHMoKSxlLDIpfWZ1bmN0aW9uIHEodCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIEcodCxyKXtyZXR1cm4gZihlLnRpbWVTdW5kYXkuY291bnQoZS50aW1lWWVhcih0KS0xLHQpLHIsMil9ZnVuY3Rpb24gWSh0KXt2YXIgcj10LmdldERheSgpO3JldHVybiByPj00fHwwPT09cj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpfWZ1bmN0aW9uIFcodCxyKXtyZXR1cm4gdD1ZKHQpLGYoZS50aW1lVGh1cnNkYXkuY291bnQoZS50aW1lWWVhcih0KSx0KSsoND09PWUudGltZVllYXIodCkuZ2V0RGF5KCkpLHIsMil9ZnVuY3Rpb24gWCh0KXtyZXR1cm4gdC5nZXREYXkoKX1mdW5jdGlvbiBaKHQscil7cmV0dXJuIGYoZS50aW1lTW9uZGF5LmNvdW50KGUudGltZVllYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIEoodCxlKXtyZXR1cm4gZih0LmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gSyh0LGUpe3JldHVybiBmKCh0PVkodCkpLmdldEZ1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24gUSh0LGUpe3JldHVybiBmKHQuZ2V0RnVsbFllYXIoKSUxZTQsZSw0KX1mdW5jdGlvbiAkKHQscil7dmFyIG49dC5nZXREYXkoKTtyZXR1cm4gZigodD1uPj00fHwwPT09bj9lLnRpbWVUaHVyc2RheSh0KTplLnRpbWVUaHVyc2RheS5jZWlsKHQpKS5nZXRGdWxsWWVhcigpJTFlNCxyLDQpfWZ1bmN0aW9uIHR0KHQpe3ZhciBlPXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtyZXR1cm4oZT4wPyItIjooZSo9LTEsIisiKSkrZihlLzYwfDAsIjAiLDIpK2YoZSU2MCwiMCIsMil9ZnVuY3Rpb24gZXQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0RhdGUoKSxlLDIpfWZ1bmN0aW9uIHJ0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENIb3VycygpLGUsMil9ZnVuY3Rpb24gbnQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0hvdXJzKCklMTJ8fDEyLGUsMil9ZnVuY3Rpb24gaXQodCxyKXtyZXR1cm4gZigxK2UudXRjRGF5LmNvdW50KGUudXRjWWVhcih0KSx0KSxyLDMpfWZ1bmN0aW9uIGF0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNaWxsaXNlY29uZHMoKSxlLDMpfWZ1bmN0aW9uIG90KHQsZSl7cmV0dXJuIGF0KHQsZSkrIjAwMCJ9ZnVuY3Rpb24gc3QodCxlKXtyZXR1cm4gZih0LmdldFVUQ01vbnRoKCkrMSxlLDIpfWZ1bmN0aW9uIGx0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENNaW51dGVzKCksZSwyKX1mdW5jdGlvbiBjdCh0LGUpe3JldHVybiBmKHQuZ2V0VVRDU2Vjb25kcygpLGUsMil9ZnVuY3Rpb24gdXQodCl7dmFyIGU9dC5nZXRVVENEYXkoKTtyZXR1cm4gMD09PWU/NzplfWZ1bmN0aW9uIGZ0KHQscil7cmV0dXJuIGYoZS51dGNTdW5kYXkuY291bnQoZS51dGNZZWFyKHQpLTEsdCksciwyKX1mdW5jdGlvbiBodCh0KXt2YXIgcj10LmdldFVUQ0RheSgpO3JldHVybiByPj00fHwwPT09cj9lLnV0Y1RodXJzZGF5KHQpOmUudXRjVGh1cnNkYXkuY2VpbCh0KX1mdW5jdGlvbiBwdCh0LHIpe3JldHVybiB0PWh0KHQpLGYoZS51dGNUaHVyc2RheS5jb3VudChlLnV0Y1llYXIodCksdCkrKDQ9PT1lLnV0Y1llYXIodCkuZ2V0VVRDRGF5KCkpLHIsMil9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHQuZ2V0VVRDRGF5KCl9ZnVuY3Rpb24gbXQodCxyKXtyZXR1cm4gZihlLnV0Y01vbmRheS5jb3VudChlLnV0Y1llYXIodCktMSx0KSxyLDIpfWZ1bmN0aW9uIGd0KHQsZSl7cmV0dXJuIGYodC5nZXRVVENGdWxsWWVhcigpJTEwMCxlLDIpfWZ1bmN0aW9uIHZ0KHQsZSl7cmV0dXJuIGYoKHQ9aHQodCkpLmdldFVUQ0Z1bGxZZWFyKCklMTAwLGUsMil9ZnVuY3Rpb24geXQodCxlKXtyZXR1cm4gZih0LmdldFVUQ0Z1bGxZZWFyKCklMWU0LGUsNCl9ZnVuY3Rpb24geHQodCxyKXt2YXIgbj10LmdldFVUQ0RheSgpO3JldHVybiBmKCh0PW4+PTR8fDA9PT1uP2UudXRjVGh1cnNkYXkodCk6ZS51dGNUaHVyc2RheS5jZWlsKHQpKS5nZXRVVENGdWxsWWVhcigpJTFlNCxyLDQpfWZ1bmN0aW9uIGJ0KCl7cmV0dXJuIiswMDAwIn1mdW5jdGlvbiBfdCgpe3JldHVybiIlIn1mdW5jdGlvbiB3dCh0KXtyZXR1cm4rdH1mdW5jdGlvbiBUdCh0KXtyZXR1cm4gTWF0aC5mbG9vcigrdC8xZTMpfWZ1bmN0aW9uIGt0KGUpe3JldHVybiBvPWEoZSksdC50aW1lRm9ybWF0PW8uZm9ybWF0LHQudGltZVBhcnNlPW8ucGFyc2UsdC51dGNGb3JtYXQ9by51dGNGb3JtYXQsdC51dGNQYXJzZT1vLnV0Y1BhcnNlLG99a3Qoe2RhdGVUaW1lOiIleCwgJVgiLGRhdGU6IiUtbS8lLWQvJVkiLHRpbWU6IiUtSTolTTolUyAlcCIscGVyaW9kczpbIkFNIiwiUE0iXSxkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxzaG9ydERheXM6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLHNob3J0TW9udGhzOlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl19KTt2YXIgQXQ9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc/ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9JU09TdHJpbmcoKX06dC51dGNGb3JtYXQoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3ZhciBNdD0rbmV3IERhdGUoIjIwMDAtMDEtMDFUMDA6MDA6MDAuMDAwWiIpP2Z1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlKHQpO3JldHVybiBpc05hTihlKT9udWxsOmV9OnQudXRjUGFyc2UoIiVZLSVtLSVkVCVIOiVNOiVTLiVMWiIpO3QuaXNvRm9ybWF0PUF0LHQuaXNvUGFyc2U9TXQsdC50aW1lRm9ybWF0RGVmYXVsdExvY2FsZT1rdCx0LnRpbWVGb3JtYXRMb2NhbGU9YSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHsiZDMtdGltZSI6MTY5fV0sMTY5OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP24ocik6bigodD10fHxzZWxmKS5kMz10LmQzfHx7fSl9KHRoaXMsKGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT1uZXcgRGF0ZSxyPW5ldyBEYXRlO2Z1bmN0aW9uIG4odCxpLGEsbyl7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdChlPTA9PT1hcmd1bWVudHMubGVuZ3RoP25ldyBEYXRlOm5ldyBEYXRlKCtlKSksZX1yZXR1cm4gcy5mbG9vcj1mdW5jdGlvbihlKXtyZXR1cm4gdChlPW5ldyBEYXRlKCtlKSksZX0scy5jZWlsPWZ1bmN0aW9uKGUpe3JldHVybiB0KGU9bmV3IERhdGUoZS0xKSksaShlLDEpLHQoZSksZX0scy5yb3VuZD1mdW5jdGlvbih0KXt2YXIgZT1zKHQpLHI9cy5jZWlsKHQpO3JldHVybiB0LWU8ci10P2U6cn0scy5vZmZzZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaSh0PW5ldyBEYXRlKCt0KSxudWxsPT1lPzE6TWF0aC5mbG9vcihlKSksdH0scy5yYW5nZT1mdW5jdGlvbihlLHIsbil7dmFyIGEsbz1bXTtpZihlPXMuY2VpbChlKSxuPW51bGw9PW4/MTpNYXRoLmZsb29yKG4pLCEoZTxyJiZuPjApKXJldHVybiBvO2Rve28ucHVzaChhPW5ldyBEYXRlKCtlKSksaShlLG4pLHQoZSl9d2hpbGUoYTxlJiZlPHIpO3JldHVybiBvfSxzLmZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigoZnVuY3Rpb24ocil7aWYocj49cilmb3IoO3QociksIWUocik7KXIuc2V0VGltZShyLTEpfSksKGZ1bmN0aW9uKHQscil7aWYodD49dClpZihyPDApZm9yKDsrK3I8PTA7KWZvcig7aSh0LC0xKSwhZSh0KTspO2Vsc2UgZm9yKDstLXI+PTA7KWZvcig7aSh0LDEpLCFlKHQpOyk7fSkpfSxhJiYocy5jb3VudD1mdW5jdGlvbihuLGkpe3JldHVybiBlLnNldFRpbWUoK24pLHIuc2V0VGltZSgraSksdChlKSx0KHIpLE1hdGguZmxvb3IoYShlLHIpKX0scy5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP3MuZmlsdGVyKG8/ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSkldD09MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHMuY291bnQoMCxlKSV0PT0wfSk6czpudWxsfSksc312YXIgaT1uKChmdW5jdGlvbigpe30pLChmdW5jdGlvbih0LGUpe3Quc2V0VGltZSgrdCtlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLXR9KSk7aS5ldmVyeT1mdW5jdGlvbih0KXtyZXR1cm4gdD1NYXRoLmZsb29yKHQpLGlzRmluaXRlKHQpJiZ0PjA/dD4xP24oKGZ1bmN0aW9uKGUpe2Uuc2V0VGltZShNYXRoLmZsb29yKGUvdCkqdCl9KSwoZnVuY3Rpb24oZSxyKXtlLnNldFRpbWUoK2Urcip0KX0pLChmdW5jdGlvbihlLHIpe3JldHVybihyLWUpL3R9KSk6aTpudWxsfTt2YXIgYT1pLnJhbmdlLG89bigoZnVuY3Rpb24odCl7dC5zZXRUaW1lKHQtdC5nZXRNaWxsaXNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrMWUzKmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvMWUzfSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ1NlY29uZHMoKX0pKSxzPW8ucmFuZ2UsbD1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKSl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldE1pbnV0ZXMoKX0pKSxjPWwucmFuZ2UsdT1uKChmdW5jdGlvbih0KXt0LnNldFRpbWUodC10LmdldE1pbGxpc2Vjb25kcygpLTFlMyp0LmdldFNlY29uZHMoKS02ZTQqdC5nZXRNaW51dGVzKCkpfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEhvdXJzKCl9KSksZj11LnJhbmdlLGg9bigoZnVuY3Rpb24odCl7dC5zZXRIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0RGF0ZSh0LmdldERhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTV9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0RGF0ZSgpLTF9KSkscD1oLnJhbmdlO2Z1bmN0aW9uIGQodCl7cmV0dXJuIG4oKGZ1bmN0aW9uKGUpe2Uuc2V0RGF0ZShlLmdldERhdGUoKS0oZS5nZXREYXkoKSs3LXQpJTcpLGUuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldERhdGUodC5nZXREYXRlKCkrNyplKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQtNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvNjA0OGU1fSkpfXZhciBtPWQoMCksZz1kKDEpLHY9ZCgyKSx5PWQoMykseD1kKDQpLGI9ZCg1KSxfPWQoNiksdz1tLnJhbmdlLFQ9Zy5yYW5nZSxrPXYucmFuZ2UsQT15LnJhbmdlLE09eC5yYW5nZSxTPWIucmFuZ2UsRT1fLnJhbmdlLEw9bigoZnVuY3Rpb24odCl7dC5zZXREYXRlKDEpLHQuc2V0SG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldE1vbnRoKHQuZ2V0TW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldE1vbnRoKCktdC5nZXRNb250aCgpKzEyKihlLmdldEZ1bGxZZWFyKCktdC5nZXRGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRNb250aCgpfSkpLEM9TC5yYW5nZSxQPW4oKGZ1bmN0aW9uKHQpe3Quc2V0TW9udGgoMCwxKSx0LnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRGdWxsWWVhcih0LmdldEZ1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRGdWxsWWVhcigpLXQuZ2V0RnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRGdWxsWWVhcigpfSkpO1AuZXZlcnk9ZnVuY3Rpb24odCl7cmV0dXJuIGlzRmluaXRlKHQ9TWF0aC5mbG9vcih0KSkmJnQ+MD9uKChmdW5jdGlvbihlKXtlLnNldEZ1bGxZZWFyKE1hdGguZmxvb3IoZS5nZXRGdWxsWWVhcigpL3QpKnQpLGUuc2V0TW9udGgoMCwxKSxlLnNldEhvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKGUscil7ZS5zZXRGdWxsWWVhcihlLmdldEZ1bGxZZWFyKCkrcip0KX0pKTpudWxsfTt2YXIgST1QLnJhbmdlLE89bigoZnVuY3Rpb24odCl7dC5zZXRVVENTZWNvbmRzKDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFRpbWUoK3QrNmU0KmUpfSksKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUtdCkvNmU0fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ01pbnV0ZXMoKX0pKSx6PU8ucmFuZ2UsRD1uKChmdW5jdGlvbih0KXt0LnNldFVUQ01pbnV0ZXMoMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRUaW1lKCt0KzM2ZTUqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS8zNmU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0hvdXJzKCl9KSksUj1ELnJhbmdlLEY9bigoZnVuY3Rpb24odCl7dC5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbih0LGUpe3Quc2V0VVRDRGF0ZSh0LmdldFVUQ0RhdGUoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybihlLXQpLzg2NGU1fSksKGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldFVUQ0RhdGUoKS0xfSkpLEI9Ri5yYW5nZTtmdW5jdGlvbiBOKHQpe3JldHVybiBuKChmdW5jdGlvbihlKXtlLnNldFVUQ0RhdGUoZS5nZXRVVENEYXRlKCktKGUuZ2V0VVRDRGF5KCkrNy10KSU3KSxlLnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpKzcqZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS10KS82MDQ4ZTV9KSl9dmFyIGo9TigwKSxVPU4oMSksVj1OKDIpLEg9TigzKSxxPU4oNCksRz1OKDUpLFk9Tig2KSxXPWoucmFuZ2UsWD1VLnJhbmdlLFo9Vi5yYW5nZSxKPUgucmFuZ2UsSz1xLnJhbmdlLFE9Ry5yYW5nZSwkPVkucmFuZ2UsdHQ9bigoZnVuY3Rpb24odCl7dC5zZXRVVENEYXRlKDEpLHQuc2V0VVRDSG91cnMoMCwwLDAsMCl9KSwoZnVuY3Rpb24odCxlKXt0LnNldFVUQ01vbnRoKHQuZ2V0VVRDTW9udGgoKStlKX0pLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmdldFVUQ01vbnRoKCktdC5nZXRVVENNb250aCgpKzEyKihlLmdldFVUQ0Z1bGxZZWFyKCktdC5nZXRVVENGdWxsWWVhcigpKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENNb250aCgpfSkpLGV0PXR0LnJhbmdlLHJ0PW4oKGZ1bmN0aW9uKHQpe3Quc2V0VVRDTW9udGgoMCwxKSx0LnNldFVUQ0hvdXJzKDAsMCwwLDApfSksKGZ1bmN0aW9uKHQsZSl7dC5zZXRVVENGdWxsWWVhcih0LmdldFVUQ0Z1bGxZZWFyKCkrZSl9KSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5nZXRVVENGdWxsWWVhcigpLXQuZ2V0VVRDRnVsbFllYXIoKX0pLChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZXRVVENGdWxsWWVhcigpfSkpO3J0LmV2ZXJ5PWZ1bmN0aW9uKHQpe3JldHVybiBpc0Zpbml0ZSh0PU1hdGguZmxvb3IodCkpJiZ0PjA/bigoZnVuY3Rpb24oZSl7ZS5zZXRVVENGdWxsWWVhcihNYXRoLmZsb29yKGUuZ2V0VVRDRnVsbFllYXIoKS90KSp0KSxlLnNldFVUQ01vbnRoKDAsMSksZS5zZXRVVENIb3VycygwLDAsMCwwKX0pLChmdW5jdGlvbihlLHIpe2Uuc2V0VVRDRnVsbFllYXIoZS5nZXRVVENGdWxsWWVhcigpK3IqdCl9KSk6bnVsbH07dmFyIG50PXJ0LnJhbmdlO3QudGltZURheT1oLHQudGltZURheXM9cCx0LnRpbWVGcmlkYXk9Yix0LnRpbWVGcmlkYXlzPVMsdC50aW1lSG91cj11LHQudGltZUhvdXJzPWYsdC50aW1lSW50ZXJ2YWw9bix0LnRpbWVNaWxsaXNlY29uZD1pLHQudGltZU1pbGxpc2Vjb25kcz1hLHQudGltZU1pbnV0ZT1sLHQudGltZU1pbnV0ZXM9Yyx0LnRpbWVNb25kYXk9Zyx0LnRpbWVNb25kYXlzPVQsdC50aW1lTW9udGg9TCx0LnRpbWVNb250aHM9Qyx0LnRpbWVTYXR1cmRheT1fLHQudGltZVNhdHVyZGF5cz1FLHQudGltZVNlY29uZD1vLHQudGltZVNlY29uZHM9cyx0LnRpbWVTdW5kYXk9bSx0LnRpbWVTdW5kYXlzPXcsdC50aW1lVGh1cnNkYXk9eCx0LnRpbWVUaHVyc2RheXM9TSx0LnRpbWVUdWVzZGF5PXYsdC50aW1lVHVlc2RheXM9ayx0LnRpbWVXZWRuZXNkYXk9eSx0LnRpbWVXZWRuZXNkYXlzPUEsdC50aW1lV2Vlaz1tLHQudGltZVdlZWtzPXcsdC50aW1lWWVhcj1QLHQudGltZVllYXJzPUksdC51dGNEYXk9Rix0LnV0Y0RheXM9Qix0LnV0Y0ZyaWRheT1HLHQudXRjRnJpZGF5cz1RLHQudXRjSG91cj1ELHQudXRjSG91cnM9Uix0LnV0Y01pbGxpc2Vjb25kPWksdC51dGNNaWxsaXNlY29uZHM9YSx0LnV0Y01pbnV0ZT1PLHQudXRjTWludXRlcz16LHQudXRjTW9uZGF5PVUsdC51dGNNb25kYXlzPVgsdC51dGNNb250aD10dCx0LnV0Y01vbnRocz1ldCx0LnV0Y1NhdHVyZGF5PVksdC51dGNTYXR1cmRheXM9JCx0LnV0Y1NlY29uZD1vLHQudXRjU2Vjb25kcz1zLHQudXRjU3VuZGF5PWosdC51dGNTdW5kYXlzPVcsdC51dGNUaHVyc2RheT1xLHQudXRjVGh1cnNkYXlzPUssdC51dGNUdWVzZGF5PVYsdC51dGNUdWVzZGF5cz1aLHQudXRjV2VkbmVzZGF5PUgsdC51dGNXZWRuZXNkYXlzPUosdC51dGNXZWVrPWosdC51dGNXZWVrcz1XLHQudXRjWWVhcj1ydCx0LnV0Y1llYXJzPW50LE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0pKX0se31dLDE3MDpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgciYmdm9pZCAwIT09ZT9uKHIpOm4oKHQ9dHx8c2VsZikuZDM9dC5kM3x8e30pfSh0aGlzLChmdW5jdGlvbih0KXsidXNlIHN0cmljdCI7dmFyIGUscixuPTAsaT0wLGE9MCxvPTAscz0wLGw9MCxjPSJvYmplY3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24odCl7c2V0VGltZW91dCh0LDE3KX07ZnVuY3Rpb24gZigpe3JldHVybiBzfHwodShoKSxzPWMubm93KCkrbCl9ZnVuY3Rpb24gaCgpe3M9MH1mdW5jdGlvbiBwKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj1uZXcgcDtyZXR1cm4gbi5yZXN0YXJ0KHQsZSxyKSxufWZ1bmN0aW9uIG0oKXtmKCksKytuO2Zvcih2YXIgdCxyPWU7cjspKHQ9cy1yLl90aW1lKT49MCYmci5fY2FsbC5jYWxsKG51bGwsdCkscj1yLl9uZXh0Oy0tbn1mdW5jdGlvbiBnKCl7cz0obz1jLm5vdygpKStsLG49aT0wO3RyeXttKCl9ZmluYWxseXtuPTAsZnVuY3Rpb24oKXt2YXIgdCxuLGk9ZSxhPTEvMDtmb3IoO2k7KWkuX2NhbGw/KGE+aS5fdGltZSYmKGE9aS5fdGltZSksdD1pLGk9aS5fbmV4dCk6KG49aS5fbmV4dCxpLl9uZXh0PW51bGwsaT10P3QuX25leHQ9bjplPW4pO3I9dCx5KGEpfSgpLHM9MH19ZnVuY3Rpb24gdigpe3ZhciB0PWMubm93KCksZT10LW87ZT4xZTMmJihsLT1lLG89dCl9ZnVuY3Rpb24geSh0KXtufHwoaSYmKGk9Y2xlYXJUaW1lb3V0KGkpKSx0LXM+MjQ/KHQ8MS8wJiYoaT1zZXRUaW1lb3V0KGcsdC1jLm5vdygpLWwpKSxhJiYoYT1jbGVhckludGVydmFsKGEpKSk6KGF8fChvPWMubm93KCksYT1zZXRJbnRlcnZhbCh2LDFlMykpLG49MSx1KGcpKSl9cC5wcm90b3R5cGU9ZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAscmVzdGFydDpmdW5jdGlvbih0LG4saSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTtpPShudWxsPT1pP2YoKToraSkrKG51bGw9PW4/MDorbiksdGhpcy5fbmV4dHx8cj09PXRoaXN8fChyP3IuX25leHQ9dGhpczplPXRoaXMscj10aGlzKSx0aGlzLl9jYWxsPXQsdGhpcy5fdGltZT1pLHkoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9jYWxsPW51bGwsdGhpcy5fdGltZT0xLzAseSgpKX19LHQuaW50ZXJ2YWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW5ldyBwLGk9ZTtyZXR1cm4gbnVsbD09ZT8obi5yZXN0YXJ0KHQsZSxyKSxuKTooZT0rZSxyPW51bGw9PXI/ZigpOityLG4ucmVzdGFydCgoZnVuY3Rpb24gYShvKXtvKz1pLG4ucmVzdGFydChhLGkrPWUsciksdChvKX0pLGUsciksbil9LHQubm93PWYsdC50aW1lb3V0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1uZXcgcDtyZXR1cm4gZT1udWxsPT1lPzA6K2Usbi5yZXN0YXJ0KChmdW5jdGlvbihyKXtuLnN0b3AoKSx0KHIrZSl9KSxlLHIpLG59LHQudGltZXI9ZCx0LnRpbWVyRmx1c2g9bSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSwxNzE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWlmKHZvaWQgMCE9PWFyZ3VtZW50c1t0XSlyZXR1cm4gYXJndW1lbnRzW3RdfX0se31dLDE3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCIpLGk9dCgidW5pcSIpO2Z1bmN0aW9uIGEodCxlKXt0aGlzLnBvaW50PXQsdGhpcy5pbmRleD1lfWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9dC5wb2ludCxuPWUucG9pbnQsaT1yLmxlbmd0aCxhPTA7YTxpOysrYSl7dmFyIG89blthXS1yW2FdO2lmKG8pcmV0dXJuIG99cmV0dXJuIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuW107dmFyIHM9dFswXS5sZW5ndGg7aWYoczwxKXJldHVybltdO2lmKDE9PT1zKXJldHVybiBmdW5jdGlvbih0LGUscil7aWYoMT09PXQpcmV0dXJuIHI/W1stMSwwXV06W107dmFyIG49ZS5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMF0sZV19KSk7bi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7Zm9yKHZhciBpPW5ldyBBcnJheSh0LTEpLGE9MTthPHQ7KythKXt2YXIgbz1uW2EtMV0scz1uW2FdO2lbYS0xXT1bb1sxXSxzWzFdXX1yJiZpLnB1c2goWy0xLGlbMF1bMV1dLFtpW3QtMV1bMV0sLTFdKTtyZXR1cm4gaX0ocix0LGUpO2Zvcih2YXIgbD1uZXcgQXJyYXkociksYz0xLHU9MDt1PHI7Kyt1KXtmb3IodmFyIGY9dFt1XSxoPW5ldyBBcnJheShzKzEpLHA9MCxkPTA7ZDxzOysrZCl7dmFyIG09ZltkXTtoW2RdPW0scCs9bSptfWhbc109cCxsW3VdPW5ldyBhKGgsdSksYz1NYXRoLm1heChwLGMpfWkobCxvKSxyPWwubGVuZ3RoO3ZhciBnPW5ldyBBcnJheShyK3MrMSksdj1uZXcgQXJyYXkocitzKzEpLHk9KHMrMSkqKHMrMSkqYyx4PW5ldyBBcnJheShzKzEpO2Zvcih1PTA7dTw9czsrK3UpeFt1XT0wO3hbc109eSxnWzBdPXguc2xpY2UoKSx2WzBdPS0xO2Zvcih1PTA7dTw9czsrK3UpeyhoPXguc2xpY2UoKSlbdV09MSxnW3UrMV09aCx2W3UrMV09LTF9Zm9yKHU9MDt1PHI7Kyt1KXt2YXIgYj1sW3VdO2dbdStzKzFdPWIucG9pbnQsdlt1K3MrMV09Yi5pbmRleH12YXIgXz1uKGcsITEpO189ZT9fLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8PXM7KytyKXt2YXIgbj12W3Rbcl1dO2lmKG48MCYmKytlPj0yKXJldHVybiExO3Rbcl09bn1yZXR1cm4hMH0pKTpfLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTw9czsrK2Upe3ZhciByPXZbdFtlXV07aWYocjwwKXJldHVybiExO3RbZV09cn1yZXR1cm4hMH0pKTtpZigxJnMpZm9yKHU9MDt1PF8ubGVuZ3RoOysrdSl7aD0oYj1fW3VdKVswXTtiWzBdPWJbMV0sYlsxXT1ofXJldHVybiBffX0seyJpbmNyZW1lbnRhbC1jb252ZXgtaHVsbCI6NDI4LHVuaXE6NTkyfV0sMTczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1hO3ZhciBuPShhLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkuZ2V0Q29udGV4dCgiMmQiKSxpPW8oWzMyLDEyNl0pO2Z1bmN0aW9uIGEodCxlKXtBcnJheS5pc0FycmF5KHQpJiYodD10LmpvaW4oIiwgIikpO3ZhciByLGE9e30scz0xNixsPS4wNTtlJiYoMj09PWUubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIGVbMF0/cj1vKGUpOkFycmF5LmlzQXJyYXkoZSk/cj1lOihlLm8/cj1vKGUubyk6ZS5wYWlycyYmKHI9ZS5wYWlycyksZS5mb250U2l6ZSYmKHM9ZS5mb250U2l6ZSksbnVsbCE9ZS50aHJlc2hvbGQmJihsPWUudGhyZXNob2xkKSkpLHJ8fChyPWkpLG4uZm9udD1zKyJweCAiK3Q7Zm9yKHZhciBjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciB1PXJbY10sZj1uLm1lYXN1cmVUZXh0KHVbMF0pLndpZHRoK24ubWVhc3VyZVRleHQodVsxXSkud2lkdGgsaD1uLm1lYXN1cmVUZXh0KHUpLndpZHRoO2lmKE1hdGguYWJzKGYtaCk+cypsKXt2YXIgcD0oaC1mKS9zO2FbdV09MWUzKnB9fXJldHVybiBhfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVtdLHI9dFswXTtyPD10WzFdO3IrKylmb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpPXRbMF07aTx0WzFdO2krKyl7dmFyIGE9bitTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO2UucHVzaChhKX1yZXR1cm4gZX1hLmNyZWF0ZVBhaXJzPW8sYS5hc2NpaT1pfSx7fV0sMTc0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpe3ZhciByPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQ2NEFycmF5KXt2YXIgbj1uZXcgRmxvYXQ2NEFycmF5KDEpLGk9bmV3IFVpbnQzMkFycmF5KG4uYnVmZmVyKTtpZihuWzBdPTEscj0hMCwxMDcyNjkzMjQ4PT09aVsxXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMF0saVsxXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMF09dCxpWzFdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX19ZWxzZSBpZigxMDcyNjkzMjQ4PT09aVswXSl7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsW2lbMV0saVswXV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbMV09dCxpWzBdPWUsblswXX0sZS5leHBvcnRzLmxvPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVsxXX0sZS5leHBvcnRzLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuWzBdPXQsaVswXX19ZWxzZSByPSExfWlmKCFyKXt2YXIgYT1uZXcgdCg4KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLFthLnJlYWRVSW50MzJMRSgwLCEwKSxhLnJlYWRVSW50MzJMRSg0LCEwKV19LGUuZXhwb3J0cy5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEud3JpdGVVSW50MzJMRSh0LDAsITApLGEud3JpdGVVSW50MzJMRShlLDQsITApLGEucmVhZERvdWJsZUxFKDAsITApfSxlLmV4cG9ydHMubG89ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDAsITApfSxlLmV4cG9ydHMuaGk9ZnVuY3Rpb24odCl7cmV0dXJuIGEud3JpdGVEb3VibGVMRSh0LDAsITApLGEucmVhZFVJbnQzMkxFKDQsITApfX1lLmV4cG9ydHMuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gZS5leHBvcnRzLmhpKHQpPj4+MzF9LGUuZXhwb3J0cy5leHBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4oZS5leHBvcnRzLmhpKHQpPDwxPj4+MjEpLTEwMjN9LGUuZXhwb3J0cy5mcmFjdGlvbj1mdW5jdGlvbih0KXt2YXIgcj1lLmV4cG9ydHMubG8odCksbj1lLmV4cG9ydHMuaGkodCksaT0xMDQ4NTc1Jm47cmV0dXJuIDIxNDY0MzUwNzImbiYmKGkrPTE8PDIwKSxbcixpXX0sZS5leHBvcnRzLmRlbm9ybWFsaXplZD1mdW5jdGlvbih0KXtyZXR1cm4hKDIxNDY0MzUwNzImZS5leHBvcnRzLmhpKHQpKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoImJ1ZmZlciIpLkJ1ZmZlcil9LHtidWZmZXI6MTEyfV0sMTc1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiYWJzLXN2Zy1wYXRoIiksaT10KCJub3JtYWxpemUtc3ZnLXBhdGgiKSxhPXtNOiJtb3ZlVG8iLEM6ImJlemllckN1cnZlVG8ifTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LmJlZ2luUGF0aCgpLGkobihlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXSxuPWUuc2xpY2UoMSk7dFthW3JdXS5hcHBseSh0LG4pfSkpLHQuY2xvc2VQYXRoKCl9fSx7ImFicy1zdmctcGF0aCI6NjcsIm5vcm1hbGl6ZS1zdmctcGF0aCI6NDY0fV0sMTc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImludDgiOnJldHVybiBJbnQ4QXJyYXk7Y2FzZSJpbnQxNiI6cmV0dXJuIEludDE2QXJyYXk7Y2FzZSJpbnQzMiI6cmV0dXJuIEludDMyQXJyYXk7Y2FzZSJ1aW50OCI6cmV0dXJuIFVpbnQ4QXJyYXk7Y2FzZSJ1aW50MTYiOnJldHVybiBVaW50MTZBcnJheTtjYXNlInVpbnQzMiI6cmV0dXJuIFVpbnQzMkFycmF5O2Nhc2UiZmxvYXQzMiI6cmV0dXJuIEZsb2F0MzJBcnJheTtjYXNlImZsb2F0NjQiOnJldHVybiBGbG9hdDY0QXJyYXk7Y2FzZSJhcnJheSI6cmV0dXJuIEFycmF5O2Nhc2UidWludDhfY2xhbXBlZCI6cmV0dXJuIFVpbnQ4Q2xhbXBlZEFycmF5fX19LHt9XSwxNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHZvaWQgMD09PWUmJihlPTApLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6aWYodD4wKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9bmV3IEFycmF5KHQpLG49MDtuPHQ7KytuKXJbbl09ZTtyZXR1cm4gcn0oMHx0LGUpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZigibnVtYmVyIj09dHlwZW9mIHQubGVuZ3RoKXJldHVybiBmdW5jdGlvbiB0KGUscixuKXt2YXIgaT0wfGVbbl07aWYoaTw9MClyZXR1cm5bXTt2YXIgYSxvPW5ldyBBcnJheShpKTtpZihuPT09ZS5sZW5ndGgtMSlmb3IoYT0wO2E8aTsrK2Epb1thXT1yO2Vsc2UgZm9yKGE9MDthPGk7KythKW9bYV09dChlLHIsbisxKTtyZXR1cm4gb30odCxlLDApfXJldHVybltdfX0se31dLDE3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSxyKXtyPXJ8fDI7dmFyIG4scyxsLGMsdSxwLGQsZz1lJiZlLmxlbmd0aCx2PWc/ZVswXSpyOnQubGVuZ3RoLHk9aSh0LDAsdixyLCEwKSx4PVtdO2lmKCF5fHx5Lm5leHQ9PT15LnByZXYpcmV0dXJuIHg7aWYoZyYmKHk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG8scyxsLGMsdSxwPVtdO2ZvcihvPTAscz1lLmxlbmd0aDtvPHM7bysrKWw9ZVtvXSpuLGM9bzxzLTE/ZVtvKzFdKm46dC5sZW5ndGgsKHU9aSh0LGwsYyxuLCExKSk9PT11Lm5leHQmJih1LnN0ZWluZXI9ITApLHAucHVzaChtKHUpKTtmb3IocC5zb3J0KGYpLG89MDtvPHAubGVuZ3RoO28rKylyPWEocj1oKHBbb10sciksci5uZXh0KTtyZXR1cm4gcn0odCxlLHkscikpLHQubGVuZ3RoPjgwKnIpe249bD10WzBdLHM9Yz10WzFdO2Zvcih2YXIgYj1yO2I8djtiKz1yKSh1PXRbYl0pPG4mJihuPXUpLChwPXRbYisxXSk8cyYmKHM9cCksdT5sJiYobD11KSxwPmMmJihjPXApO2Q9MCE9PShkPU1hdGgubWF4KGwtbixjLXMpKT8xL2Q6MH1yZXR1cm4gbyh5LHgscixuLHMsZCkseH1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dmFyIGEsbztpZihpPT09RSh0LGUscixuKT4wKWZvcihhPWU7YTxyO2ErPW4pbz1BKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89QShhLHRbYV0sdFthKzFdLG8pO3JldHVybiBvJiZ4KG8sby5uZXh0KSYmKE0obyksbz1vLm5leHQpLG99ZnVuY3Rpb24gYSh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO3ZhciByLG49dDtkb3tpZihyPSExLG4uc3RlaW5lcnx8IXgobixuLm5leHQpJiYwIT09eShuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYoTShuKSwobj1lPW4ucHJldik9PT1uLm5leHQpYnJlYWs7cj0hMH19d2hpbGUocnx8biE9PWUpO3JldHVybiBlfWZ1bmN0aW9uIG8odCxlLHIsbixpLGYsaCl7aWYodCl7IWgmJmYmJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ7ZG97bnVsbD09PWkueiYmKGkuej1kKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxmKTtmb3IodmFyIHAsbSxnPXQ7dC5wcmV2IT09dC5uZXh0OylpZihwPXQucHJldixtPXQubmV4dCxmP2wodCxuLGksZik6cyh0KSllLnB1c2gocC5pL3IpLGUucHVzaCh0LmkvciksZS5wdXNoKG0uaS9yKSxNKHQpLHQ9bS5uZXh0LGc9bS5uZXh0O2Vsc2UgaWYoKHQ9bSk9PT1nKXtoPzE9PT1oP28odD1jKGEodCksZSxyKSxlLHIsbixpLGYsMik6Mj09PWgmJnUodCxlLHIsbixpLGYpOm8oYSh0KSxlLHIsbixpLGYsMSk7YnJlYWt9fX1mdW5jdGlvbiBzKHQpe3ZhciBlPXQucHJldixyPXQsbj10Lm5leHQ7aWYoeShlLHIsbik+PTApcmV0dXJuITE7Zm9yKHZhciBpPXQubmV4dC5uZXh0O2khPT10LnByZXY7KXtpZihnKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZ5KGkucHJldixpLGkubmV4dCk+PTApcmV0dXJuITE7aT1pLm5leHR9cmV0dXJuITB9ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgaT10LnByZXYsYT10LG89dC5uZXh0O2lmKHkoaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksZj1kKHMsbCxlLHIsbiksaD1kKGMsdSxlLHIsbikscD10LnByZXZaLG09dC5uZXh0WjtwJiZwLno+PWYmJm0mJm0uejw9aDspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtpZihwPXAucHJldlosbSE9PXQucHJldiYmbSE9PXQubmV4dCYmZyhpLngsaS55LGEueCxhLnksby54LG8ueSxtLngsbS55KSYmeShtLnByZXYsbSxtLm5leHQpPj0wKXJldHVybiExO209bS5uZXh0Wn1mb3IoO3AmJnAuej49Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJmcoaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJnkocC5wcmV2LHAscC5uZXh0KT49MClyZXR1cm4hMTtwPXAucHJldlp9Zm9yKDttJiZtLno8PWg7KXtpZihtIT09dC5wcmV2JiZtIT09dC5uZXh0JiZnKGkueCxpLnksYS54LGEueSxvLngsby55LG0ueCxtLnkpJiZ5KG0ucHJldixtLG0ubmV4dCk+PTApcmV0dXJuITE7bT1tLm5leHRafXJldHVybiEwfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPXQ7ZG97dmFyIGk9bi5wcmV2LG89bi5uZXh0Lm5leHQ7IXgoaSxvKSYmYihpLG4sbi5uZXh0LG8pJiZUKGksbykmJlQobyxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goby5pL3IpLE0obiksTShuLm5leHQpLG49dD1vKSxuPW4ubmV4dH13aGlsZShuIT09dCk7cmV0dXJuIGEobil9ZnVuY3Rpb24gdSh0LGUscixuLGkscyl7dmFyIGw9dDtkb3tmb3IodmFyIGM9bC5uZXh0Lm5leHQ7YyE9PWwucHJldjspe2lmKGwuaSE9PWMuaSYmdihsLGMpKXt2YXIgdT1rKGwsYyk7cmV0dXJuIGw9YShsLGwubmV4dCksdT1hKHUsdS5uZXh0KSxvKGwsZSxyLG4saSxzKSx2b2lkIG8odSxlLHIsbixpLHMpfWM9Yy5uZXh0fWw9bC5uZXh0fXdoaWxlKGwhPT10KX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIHQueC1lLnh9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1lLGk9dC54LGE9dC55LG89LTEvMDtkb3tpZihhPD1uLnkmJmE+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7dmFyIHM9bi54KyhhLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYoczw9aSYmcz5vKXtpZihvPXMscz09PWkpe2lmKGE9PT1uLnkpcmV0dXJuIG47aWYoYT09PW4ubmV4dC55KXJldHVybiBuLm5leHR9cj1uLng8bi5uZXh0Lng/bjpuLm5leHR9fW49bi5uZXh0fXdoaWxlKG4hPT1lKTtpZighcilyZXR1cm4gbnVsbDtpZihpPT09bylyZXR1cm4gcjt2YXIgbCxjPXIsdT1yLngsZj1yLnksaD0xLzA7bj1yO2Rve2k+PW4ueCYmbi54Pj11JiZpIT09bi54JiZnKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxUKG4sdCkmJihsPGh8fGw9PT1oJiYobi54PnIueHx8bi54PT09ci54JiZwKHIsbikpKSYmKHI9bixoPWwpKSxuPW4ubmV4dH13aGlsZShuIT09Yyk7cmV0dXJuIHJ9KHQsZSk7aWYoIXIpcmV0dXJuIGU7dmFyIG49ayhyLHQpLGk9YShyLHIubmV4dCk7cmV0dXJuIGEobixuLm5leHQpLGU9PT1yP2k6ZX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHkodC5wcmV2LHQsZS5wcmV2KTwwJiZ5KGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBkKHQsZSxyLG4saSl7cmV0dXJuKHQ9MTQzMTY1NTc2NSYoKHQ9ODU4OTkzNDU5JigodD0yNTI2NDUxMzUmKCh0PTE2NzExOTM1JigodD0zMjc2NyoodC1yKSppKXx0PDw4KSl8dDw8NCkpfHQ8PDIpKXx0PDwxKSl8KGU9MTQzMTY1NTc2NSYoKGU9ODU4OTkzNDU5JigoZT0yNTI2NDUxMzUmKChlPTE2NzExOTM1JigoZT0zMjc2NyooZS1uKSppKXxlPDw4KSl8ZTw8NCkpfGU8PDIpKXxlPDwxKSk8PDF9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LHI9dDtkb3soZS54PHIueHx8ZS54PT09ci54JiZlLnk8ci55KSYmKHI9ZSksZT1lLm5leHR9d2hpbGUoZSE9PXQpO3JldHVybiByfWZ1bmN0aW9uIGcodCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gdC5uZXh0LmkhPT1lLmkmJnQucHJldi5pIT09ZS5pJiYhZnVuY3Rpb24odCxlKXt2YXIgcj10O2Rve2lmKHIuaSE9PXQuaSYmci5uZXh0LmkhPT10LmkmJnIuaSE9PWUuaSYmci5uZXh0LmkhPT1lLmkmJmIocixyLm5leHQsdCxlKSlyZXR1cm4hMDtyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuITF9KHQsZSkmJihUKHQsZSkmJlQoZSx0KSYmZnVuY3Rpb24odCxlKXt2YXIgcj10LG49ITEsaT0odC54K2UueCkvMixhPSh0LnkrZS55KS8yO2Rve3IueT5hIT1yLm5leHQueT5hJiZyLm5leHQueSE9PXIueSYmaTwoci5uZXh0Lngtci54KSooYS1yLnkpLyhyLm5leHQueS1yLnkpK3IueCYmKG49IW4pLHI9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4gbn0odCxlKSYmKHkodC5wcmV2LHQsZS5wcmV2KXx8eSh0LGUucHJldixlKSl8fHgodCxlKSYmeSh0LnByZXYsdCx0Lm5leHQpPjAmJnkoZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiB5KHQsZSxyKXtyZXR1cm4oZS55LXQueSkqKHIueC1lLngpLShlLngtdC54KSooci55LWUueSl9ZnVuY3Rpb24geCh0LGUpe3JldHVybiB0Lng9PT1lLngmJnQueT09PWUueX1mdW5jdGlvbiBiKHQsZSxyLG4pe3ZhciBpPXcoeSh0LGUscikpLGE9dyh5KHQsZSxuKSksbz13KHkocixuLHQpKSxzPXcoeShyLG4sZSkpO3JldHVybiBpIT09YSYmbyE9PXN8fCghKDAhPT1pfHwhXyh0LHIsZSkpfHwoISgwIT09YXx8IV8odCxuLGUpKXx8KCEoMCE9PW98fCFfKHIsdCxuKSl8fCEoMCE9PXN8fCFfKHIsZSxuKSkpKSl9ZnVuY3Rpb24gXyh0LGUscil7cmV0dXJuIGUueDw9TWF0aC5tYXgodC54LHIueCkmJmUueD49TWF0aC5taW4odC54LHIueCkmJmUueTw9TWF0aC5tYXgodC55LHIueSkmJmUueT49TWF0aC5taW4odC55LHIueSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiB5KHQucHJldix0LHQubmV4dCk8MD95KHQsZSx0Lm5leHQpPj0wJiZ5KHQsdC5wcmV2LGUpPj0wOnkodCxlLHQucHJldik8MHx8eSh0LHQubmV4dCxlKTwwfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1uZXcgUyh0LmksdC54LHQueSksbj1uZXcgUyhlLmksZS54LGUueSksaT10Lm5leHQsYT1lLnByZXY7cmV0dXJuIHQubmV4dD1lLGUucHJldj10LHIubmV4dD1pLGkucHJldj1yLG4ubmV4dD1yLHIucHJldj1uLGEubmV4dD1uLG4ucHJldj1hLG59ZnVuY3Rpb24gQSh0LGUscixuKXt2YXIgaT1uZXcgUyh0LGUscik7cmV0dXJuIG4/KGkubmV4dD1uLm5leHQsaS5wcmV2PW4sbi5uZXh0LnByZXY9aSxuLm5leHQ9aSk6KGkucHJldj1pLGkubmV4dD1pKSxpfWZ1bmN0aW9uIE0odCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBTKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZSxvPXItbjthPHI7YSs9bilpKz0odFtvXS10W2FdKSoodFthKzFdK3RbbysxXSksbz1hO3JldHVybiBpfWUuZXhwb3J0cz1uLGUuZXhwb3J0cy5kZWZhdWx0PW4sbi5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKEUodCwwLGEscikpO2lmKGkpZm9yKHZhciBzPTAsbD1lLmxlbmd0aDtzPGw7cysrKXt2YXIgYz1lW3NdKnIsdT1zPGwtMT9lW3MrMV0qcjp0Lmxlbmd0aDtvLT1NYXRoLmFicyhFKHQsYyx1LHIpKX12YXIgZj0wO2ZvcihzPTA7czxuLmxlbmd0aDtzKz0zKXt2YXIgaD1uW3NdKnIscD1uW3MrMV0qcixkPW5bcysyXSpyO2YrPU1hdGguYWJzKCh0W2hdLXRbZF0pKih0W3ArMV0tdFtoKzFdKS0odFtoXS10W3BdKSoodFtkKzFdLXRbaCsxXSkpfXJldHVybiAwPT09byYmMD09PWY/MDpNYXRoLmFicygoZi1vKS9vKX0sbi5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn19LHt9XSwxNzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5sZW5ndGg7aWYoIm51bWJlciIhPXR5cGVvZiBlKXtlPTA7Zm9yKHZhciBpPTA7aTxyOysraSl7dmFyIGE9dFtpXTtlPU1hdGgubWF4KGUsYVswXSxhWzFdKX1lPTErKDB8ZSl9ZXw9MDt2YXIgbz1uZXcgQXJyYXkoZSk7Zm9yKGk9MDtpPGU7KytpKW9baV09W107Zm9yKGk9MDtpPHI7KytpKXthPXRbaV07b1thWzBdXS5wdXNoKGFbMV0pLG9bYVsxXV0ucHVzaChhWzBdKX1mb3IodmFyIHM9MDtzPGU7KytzKW4ob1tzXSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpO3JldHVybiBvfTt2YXIgbj10KCJ1bmlxIil9LHt1bmlxOjU5Mn1dLDE4MDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT1bXSxhPVtdLG89W10scz17fSxsPVtdO2Z1bmN0aW9uIGModCl7dmFyIGUsbixpPSExO2ZvcihhLnB1c2godCksb1t0XT0hMCxlPTA7ZTxsW3RdLmxlbmd0aDtlKyspKG49bFt0XVtlXSk9PT1yPyh1KHIsYSksaT0hMCk6b1tuXXx8KGk9YyhuKSk7aWYoaSkhZnVuY3Rpb24gdChlKXtvW2VdPSExLHMuaGFzT3duUHJvcGVydHkoZSkmJk9iamVjdC5rZXlzKHNbZV0pLmZvckVhY2goKGZ1bmN0aW9uKHIpe2RlbGV0ZSBzW2VdW3JdLG9bcl0mJnQocil9KSl9KHQpO2Vsc2UgZm9yKGU9MDtlPGxbdF0ubGVuZ3RoO2UrKyl7bj1sW3RdW2VdO3ZhciBmPXNbbl07Znx8KGY9e30sc1tuXT1mKSxmW25dPSEwfXJldHVybiBhLnBvcCgpLGl9ZnVuY3Rpb24gdSh0LHIpe3ZhciBuPVtdLmNvbmNhdChyKS5jb25jYXQodCk7ZT9lKG4pOmkucHVzaChuKX1mdW5jdGlvbiBmKGUpeyFmdW5jdGlvbihlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKykocjxlfHwhdFtyXSkmJih0W3JdPVtdKSx0W3JdPXRbcl0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdD49ZX0pKX0oZSk7Zm9yKHZhciByLGk9bih0KS5jb21wb25lbnRzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoPjF9KSksYT0xLzAsbz0wO288aS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3M8aVtvXS5sZW5ndGg7cysrKWlbb11bc108YSYmKGE9aVtvXVtzXSxyPW8pO3ZhciBsPWlbcl07cmV0dXJuISFsJiZ7bGVhc3RWZXJ0ZXg6YSxhZGpMaXN0OnQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybi0xPT09bC5pbmRleE9mKGUpP1tdOnQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMSE9PWwuaW5kZXhPZih0KX0pKX0pKX19cj0wO2Zvcih2YXIgaD10Lmxlbmd0aDtyPGg7KXt2YXIgcD1mKHIpO2lmKHI9cC5sZWFzdFZlcnRleCxsPXAuYWRqTGlzdCl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDtkKyspZm9yKHZhciBtPTA7bTxsW2RdLmxlbmd0aDttKyspe3ZhciBnPWxbZF1bbV07b1srZ109ITEsc1tnXT17fX1jKHIpLHIrPTF9ZWxzZSByPWh9cmV0dXJuIGU/dm9pZCAwOml9fSx7InN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1NjR9XSwxODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcykubGVuZ3RoPTAsdGhpc319LHsiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTJ9XSwxODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIi4vaXMtaW1wbGVtZW50ZWQiKSgpP0FycmF5LmZyb206dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTgzLCIuL3NoaW0iOjE4NH1dLDE4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9QXJyYXkuZnJvbTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgciYmKGU9cih0PVsicmF6IiwiZHdhIl0pLEJvb2xlYW4oZSYmZSE9PXQmJiJkd2EiPT09ZVsxXSkpfX0se31dLDE4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJlczYtc3ltYm9sIikuaXRlcmF0b3IsaT10KCIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxhPXQoIi4uLy4uL2Z1bmN0aW9uL2lzLWZ1bmN0aW9uIiksbz10KCIuLi8uLi9udW1iZXIvdG8tcG9zLWludGVnZXIiKSxzPXQoIi4uLy4uL29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGw9dCgiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIiksYz10KCIuLi8uLi9vYmplY3QvaXMtdmFsdWUiKSx1PXQoIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciKSxmPUFycmF5LmlzQXJyYXksaD1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxwPXtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSxkPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixtLGcsdix5LHgsYixfLHcsVD1hcmd1bWVudHNbMV0saz1hcmd1bWVudHNbMl07aWYodD1PYmplY3QobCh0KSksYyhUKSYmcyhUKSx0aGlzJiZ0aGlzIT09QXJyYXkmJmEodGhpcykpZT10aGlzO2Vsc2V7aWYoIVQpe2lmKGkodCkpcmV0dXJuIDEhPT0odj10Lmxlbmd0aCk/QXJyYXkuYXBwbHkobnVsbCx0KTooKGc9bmV3IEFycmF5KDEpKVswXT10WzBdLGcpO2lmKGYodCkpe2ZvcihnPW5ldyBBcnJheSh2PXQubGVuZ3RoKSxyPTA7cjx2OysrcilnW3JdPXRbcl07cmV0dXJuIGd9fWc9W119aWYoIWYodCkpaWYodm9pZCAwIT09KF89dFtuXSkpe2Zvcih4PXMoXykuY2FsbCh0KSxlJiYoZz1uZXcgZSksYj14Lm5leHQoKSxyPTA7IWIuZG9uZTspdz1UP2guY2FsbChULGssYi52YWx1ZSxyKTpiLnZhbHVlLGU/KHAudmFsdWU9dyxkKGcscixwKSk6Z1tyXT13LGI9eC5uZXh0KCksKytyO3Y9cn1lbHNlIGlmKHUodCkpe2Zvcih2PXQubGVuZ3RoLGUmJihnPW5ldyBlKSxyPTAsbT0wO3I8djsrK3Ipdz10W3JdLHIrMTx2JiYoeT13LmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmeTw9NTYzMTkmJih3Kz10Wysrcl0pLHc9VD9oLmNhbGwoVCxrLHcsbSk6dyxlPyhwLnZhbHVlPXcsZChnLG0scCkpOmdbbV09dywrK207dj1tfWlmKHZvaWQgMD09PXYpZm9yKHY9byh0Lmxlbmd0aCksZSYmKGc9bmV3IGUodikpLHI9MDtyPHY7KytyKXc9VD9oLmNhbGwoVCxrLHRbcl0scik6dFtyXSxlPyhwLnZhbHVlPXcsZChnLHIscCkpOmdbcl09dztyZXR1cm4gZSYmKHAudmFsdWU9bnVsbCxnLmxlbmd0aD12KSxnfX0seyIuLi8uLi9mdW5jdGlvbi9pcy1hcmd1bWVudHMiOjE4NSwiLi4vLi4vZnVuY3Rpb24vaXMtZnVuY3Rpb24iOjE4NiwiLi4vLi4vbnVtYmVyL3RvLXBvcy1pbnRlZ2VyIjoxOTIsIi4uLy4uL29iamVjdC9pcy12YWx1ZSI6MjAxLCIuLi8uLi9vYmplY3QvdmFsaWQtY2FsbGFibGUiOjIxMCwiLi4vLi4vb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTIsIi4uLy4uL3N0cmluZy9pcy1zdHJpbmciOjIxNiwiZXM2LXN5bWJvbCI6MjI1fV0sMTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1uLmNhbGwoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0KT09PWl9fSx7fV0sMTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1SZWdFeHAucHJvdG90eXBlLnRlc3QuYmluZCgvXltvYmplY3QgW0EtWmEtejAtOV0qRnVuY3Rpb25dJC8pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaShuLmNhbGwodCkpfX0se31dLDE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSx7fV0sMTg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9NYXRoLnNpZ246dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MTg5LCIuL3NoaW0iOjE5MH1dLDE4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnNpZ247cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJigxPT09dCgxMCkmJi0xPT09dCgtMjApKX19LHt9XSwxOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PU51bWJlcih0KSxpc05hTih0KXx8MD09PXQ/dDp0PjA/MTotMX19LHt9XSwxOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbWF0aC9zaWduIiksaT1NYXRoLmFicyxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0KT8wOjAhPT0odD1OdW1iZXIodCkpJiZpc0Zpbml0ZSh0KT9uKHQpKmEoaSh0KSk6dH19LHsiLi4vbWF0aC9zaWduIjoxODh9XSwxOTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi90by1pbnRlZ2VyIiksaT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkoMCxuKHQpKX19LHsiLi90by1pbnRlZ2VyIjoxOTF9XSwxOTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi92YWxpZC12YWx1ZSIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsbz1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbCxzPU9iamVjdC5rZXlzLGw9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixjKXt2YXIgdSxmPWFyZ3VtZW50c1syXSxoPWFyZ3VtZW50c1szXTtyZXR1cm4gcj1PYmplY3QoaShyKSksbihjKSx1PXMociksaCYmdS5zb3J0KCJmdW5jdGlvbiI9PXR5cGVvZiBoP2EuY2FsbChoLHIpOnZvaWQgMCksImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PXVbdF0pLG8uY2FsbCh0LHUsKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGwuY2FsbChyLHQpP28uY2FsbChjLGYsclt0XSx0LHIsbik6ZX0pKX19fSx7Ii4vdmFsaWQtY2FsbGFibGUiOjIxMCwiLi92YWxpZC12YWx1ZSI6MjEyfV0sMTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9PYmplY3QuYXNzaWduOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjE5NSwiLi9zaGltIjoxOTZ9XSwxOTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQsZT1PYmplY3QuYXNzaWduO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYoZSh0PXtmb286InJheiJ9LHtiYXI6ImR3YSJ9LHt0cnp5OiJ0cnp5In0pLHQuZm9vK3QuYmFyK3QudHJ6eT09PSJyYXpkd2F0cnp5Iil9fSx7fV0sMTk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2tleXMiKSxpPXQoIi4uL3ZhbGlkLXZhbHVlIiksYT1NYXRoLm1heDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvLHMsbD1hKGFyZ3VtZW50cy5sZW5ndGgsMik7Zm9yKHQ9T2JqZWN0KGkodCkpLHM9ZnVuY3Rpb24obil7dHJ5e3Rbbl09ZVtuXX1jYXRjaCh0KXtyfHwocj10KX19LG89MTtvPGw7KytvKW4oZT1hcmd1bWVudHNbb10pLmZvckVhY2gocyk7aWYodm9pZCAwIT09cil0aHJvdyByO3JldHVybiB0fX0seyIuLi9rZXlzIjoyMDIsIi4uL3ZhbGlkLXZhbHVlIjoyMTJ9XSwxOTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYXJyYXkvZnJvbSIpLGk9dCgiLi9hc3NpZ24iKSxhPXQoIi4vdmFsaWQtdmFsdWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9T2JqZWN0KGEodCkpLHI9YXJndW1lbnRzWzFdLG89T2JqZWN0KGFyZ3VtZW50c1syXSk7aWYoZSE9PXQmJiFyKXJldHVybiBlO3ZhciBzPXt9O3JldHVybiByP24ociwoZnVuY3Rpb24oZSl7KG8uZW5zdXJlfHxlIGluIHQpJiYoc1tlXT10W2VdKX0pKTppKHMsdCksc319LHsiLi4vYXJyYXkvZnJvbSI6MTgyLCIuL2Fzc2lnbiI6MTk0LCIuL3ZhbGlkLXZhbHVlIjoyMTJ9XSwxOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG8scz1PYmplY3QuY3JlYXRlO3QoIi4vc2V0LXByb3RvdHlwZS1vZi9pcy1pbXBsZW1lbnRlZCIpKCl8fChuPXQoIi4vc2V0LXByb3RvdHlwZS1vZi9zaGltIikpLGUuZXhwb3J0cz1uPzEhPT1uLmxldmVsP3M6KGk9e30sYT17fSxvPXtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9LE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5wcm90b3R5cGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2FbdF09Il9fcHJvdG9fXyIhPT10P286e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH19KSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaSxhKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwibnVsbFBvbHlmaWxsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6aX0pLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMobnVsbD09PXQ/aTp0LGUpfSk6c30seyIuL3NldC1wcm90b3R5cGUtb2YvaXMtaW1wbGVtZW50ZWQiOjIwOCwiLi9zZXQtcHJvdG90eXBlLW9mL3NoaW0iOjIwOX1dLDE5OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9faXRlcmF0ZSIpKCJmb3JFYWNoIil9LHsiLi9faXRlcmF0ZSI6MTkzfV0sMjAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtdmFsdWUiKSxpPXtmdW5jdGlvbjohMCxvYmplY3Q6ITB9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbih0KSYmaVt0eXBlb2YgdF18fCExfX0seyIuL2lzLXZhbHVlIjoyMDF9XSwyMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZnVuY3Rpb24vbm9vcCIpKCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0IT09biYmbnVsbCE9PXR9fSx7Ii4uL2Z1bmN0aW9uL25vb3AiOjE4N31dLDIwMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LmtleXM6dCgiLi9zaGltIil9LHsiLi9pcy1pbXBsZW1lbnRlZCI6MjAzLCIuL3NoaW0iOjIwNH1dLDIwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5rZXlzKCJwcmltaXRpdmUiKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSx7fV0sMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2lzLXZhbHVlIiksaT1PYmplY3Qua2V5cztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KT9PYmplY3QodCk6dCl9fSx7Ii4uL2lzLXZhbHVlIjoyMDF9XSwyMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi92YWxpZC1jYWxsYWJsZSIpLGk9dCgiLi9mb3ItZWFjaCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbz1hcmd1bWVudHNbMl07cmV0dXJuIG4oZSksaSh0LChmdW5jdGlvbih0LG4saSxzKXtyW25dPWEuY2FsbChlLG8sdCxuLGkscyl9KSkscn19LHsiLi9mb3ItZWFjaCI6MTk5LCIuL3ZhbGlkLWNhbGxhYmxlIjoyMTB9XSwyMDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy12YWx1ZSIpLGk9QXJyYXkucHJvdG90eXBlLmZvckVhY2gsYT1PYmplY3QuY3JlYXRlLG89ZnVuY3Rpb24odCxlKXt2YXIgcjtmb3IociBpbiB0KWVbcl09dFtyXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPWEobnVsbCk7cmV0dXJuIGkuY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe24odCkmJm8oT2JqZWN0KHQpLGUpfSkpLGV9fSx7Ii4vaXMtdmFsdWUiOjIwMX1dLDIwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/T2JqZWN0LnNldFByb3RvdHlwZU9mOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIwOCwiLi9zaGltIjoyMDl9XSwyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmNyZWF0ZSxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixhPXt9O2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PU9iamVjdC5zZXRQcm90b3R5cGVPZixlPWFyZ3VtZW50c1swXXx8bjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmaSh0KGUobnVsbCksYSkpPT09YX19LHt9XSwyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCIuLi9pcy1vYmplY3QiKSxhPXQoIi4uL3ZhbGlkLXZhbHVlIiksbz1PYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yscz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD17Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfTtuPWZ1bmN0aW9uKHQsZSl7aWYoYSh0KSxudWxsPT09ZXx8aShlKSlyZXR1cm4gdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm90b3R5cGUgbXVzdCBiZSBudWxsIG9yIGFuIG9iamVjdCIpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscjtyZXR1cm4gdD8oMj09PXQubGV2ZWw/dC5zZXQ/KHI9dC5zZXQsZT1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwobih0LGUpLGUpLHR9KTplPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxlKS5fX3Byb3RvX189ZSx0fTplPWZ1bmN0aW9uIHQoZSxyKXt2YXIgaTtyZXR1cm4gbihlLHIpLChpPW8uY2FsbCh0Lm51bGxQb2x5ZmlsbCxlKSkmJmRlbGV0ZSB0Lm51bGxQb2x5ZmlsbC5fX3Byb3RvX18sbnVsbD09PXImJihyPXQubnVsbFBvbHlmaWxsKSxlLl9fcHJvdG9fXz1yLGkmJnModC5udWxsUG9seWZpbGwsIl9fcHJvdG9fXyIsbCksZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxldmVsIix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsdmFsdWU6dC5sZXZlbH0pKTpudWxsfShmdW5jdGlvbigpe3ZhciB0LGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPXt9LG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKTtpZihuKXt0cnl7KHQ9bi5zZXQpLmNhbGwoZSxyKX1jYXRjaCh0KXt9aWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cilyZXR1cm57c2V0OnQsbGV2ZWw6Mn19cmV0dXJuIGUuX19wcm90b19fPXIsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09cj97bGV2ZWw6Mn06KChlPXt9KS5fX3Byb3RvX189cixPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1yJiZ7bGV2ZWw6MX0pfSgpKSx0KCIuLi9jcmVhdGUiKX0seyIuLi9jcmVhdGUiOjE5OCwiLi4vaXMtb2JqZWN0IjoyMDAsIi4uL3ZhbGlkLXZhbHVlIjoyMTJ9XSwyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIHR9fSx7fV0sMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtb2JqZWN0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhbiBPYmplY3QiKTtyZXR1cm4gdH19LHsiLi9pcy1vYmplY3QiOjIwMH1dLDIxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzLXZhbHVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCB1c2UgbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gdH19LHsiLi9pcy12YWx1ZSI6MjAxfV0sMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9TdHJpbmcucHJvdG90eXBlLmNvbnRhaW5zOnQoIi4vc2hpbSIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIxNCwiLi9zaGltIjoyMTV9XSwyMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49InJhemR3YXRyenkiO2UuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuLmNvbnRhaW5zJiYoITA9PT1uLmNvbnRhaW5zKCJkd2EiKSYmITE9PT1uLmNvbnRhaW5zKCJmb28iKSl9fSx7fV0sMjE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4uY2FsbCh0aGlzLHQsYXJndW1lbnRzWzFdKT4tMX19LHt9XSwyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPW4uY2FsbCgiIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdHx8dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYodCBpbnN0YW5jZW9mIFN0cmluZ3x8bi5jYWxsKHQpPT09aSl8fCExfX0se31dLDIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGk9TWF0aC5yYW5kb207ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ7ZG97dD1pKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfXdoaWxlKG5bdF0pO3JldHVybiB0fX0se31dLDIxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPXQoImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiKSxhPXQoImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiKSxvPXQoImQiKSxzPXQoImVzNi1zeW1ib2wiKSxsPXQoIi4vIiksYz1PYmplY3QuZGVmaW5lUHJvcGVydHk7bj1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDb25zdHJ1Y3RvciByZXF1aXJlcyAnbmV3JyIpO2wuY2FsbCh0aGlzLHQpLGU9ZT9hLmNhbGwoZSwia2V5K3ZhbHVlIik/ImtleSt2YWx1ZSI6YS5jYWxsKGUsImtleSIpPyJrZXkiOiJ2YWx1ZSI6InZhbHVlIixjKHRoaXMsIl9fa2luZF9fIixvKCIiLGUpKX0saSYmaShuLGwpLGRlbGV0ZSBuLnByb3RvdHlwZS5jb25zdHJ1Y3RvcixuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlLHtfcmVzb2x2ZTpvKChmdW5jdGlvbih0KXtyZXR1cm4idmFsdWUiPT09dGhpcy5fX2tpbmRfXz90aGlzLl9fbGlzdF9fW3RdOiJrZXkrdmFsdWUiPT09dGhpcy5fX2tpbmRfXz9bdCx0aGlzLl9fbGlzdF9fW3RdXTp0fSkpfSksYyhuLnByb3RvdHlwZSxzLnRvU3RyaW5nVGFnLG8oImMiLCJBcnJheSBJdGVyYXRvciIpKX0seyIuLyI6MjIxLGQ6MTU0LCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIjoyMDcsImVzNS1leHQvc3RyaW5nLyMvY29udGFpbnMiOjIxMywiZXM2LXN5bWJvbCI6MjI1fV0sMjE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSIpLGE9dCgiZXM1LWV4dC9zdHJpbmcvaXMtc3RyaW5nIiksbz10KCIuL2dldCIpLHM9QXJyYXkuaXNBcnJheSxsPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGM9QXJyYXkucHJvdG90eXBlLnNvbWU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLG0sZyx2PWFyZ3VtZW50c1syXTtpZihzKHQpfHxuKHQpP3I9ImFycmF5IjphKHQpP3I9InN0cmluZyI6dD1vKHQpLGkoZSksZj1mdW5jdGlvbigpe2g9ITB9LCJhcnJheSIhPT1yKWlmKCJzdHJpbmciIT09cilmb3IodT10Lm5leHQoKTshdS5kb25lOyl7aWYobC5jYWxsKGUsdix1LnZhbHVlLGYpLGgpcmV0dXJuO3U9dC5uZXh0KCl9ZWxzZSBmb3IoZD10Lmxlbmd0aCxwPTA7cDxkJiYobT10W3BdLHArMTxkJiYoZz1tLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZzw9NTYzMTkmJihtKz10WysrcF0pLGwuY2FsbChlLHYsbSxmKSwhaCk7KytwKTtlbHNlIGMuY2FsbCh0LChmdW5jdGlvbih0KXtyZXR1cm4gbC5jYWxsKGUsdix0LGYpLGh9KSl9fSx7Ii4vZ2V0IjoyMjAsImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODUsImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIjoyMTAsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE2fV0sMjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIiksaT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxhPXQoIi4vYXJyYXkiKSxvPXQoIi4vc3RyaW5nIikscz10KCIuL3ZhbGlkLWl0ZXJhYmxlIiksbD10KCJlczYtc3ltYm9sIikuaXRlcmF0b3I7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzKHQpW2xdP3RbbF0oKTpuKHQpP25ldyBhKHQpOmkodCk/bmV3IG8odCk6bmV3IGEodCl9fSx7Ii4vYXJyYXkiOjIxOCwiLi9zdHJpbmciOjIyMywiLi92YWxpZC1pdGVyYWJsZSI6MjI0LCJlczUtZXh0L2Z1bmN0aW9uL2lzLWFyZ3VtZW50cyI6MTg1LCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciOjIxNiwiZXM2LXN5bWJvbCI6MjI1fV0sMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiZXM1LWV4dC9hcnJheS8jL2NsZWFyIiksYT10KCJlczUtZXh0L29iamVjdC9hc3NpZ24iKSxvPXQoImVzNS1leHQvb2JqZWN0L3ZhbGlkLWNhbGxhYmxlIikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZCIpLGM9dCgiZC9hdXRvLWJpbmQiKSx1PXQoImVzNi1zeW1ib2wiKSxmPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxoPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzO2UuZXhwb3J0cz1uPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29uc3RydWN0b3IgcmVxdWlyZXMgJ25ldyciKTtoKHRoaXMse19fbGlzdF9fOmwoInciLHModCkpLF9fY29udGV4dF9fOmwoInciLGUpLF9fbmV4dEluZGV4X186bCgidyIsMCl9KSxlJiYobyhlLm9uKSxlLm9uKCJfYWRkIix0aGlzLl9vbkFkZCksZS5vbigiX2RlbGV0ZSIsdGhpcy5fb25EZWxldGUpLGUub24oIl9jbGVhciIsdGhpcy5fb25DbGVhcikpfSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3IsaChuLnByb3RvdHlwZSxhKHtfbmV4dDpsKChmdW5jdGlvbigpe3ZhciB0O2lmKHRoaXMuX19saXN0X18pcmV0dXJuIHRoaXMuX19yZWRvX18mJnZvaWQgMCE9PSh0PXRoaXMuX19yZWRvX18uc2hpZnQoKSk/dDp0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xpc3RfXy5sZW5ndGg/dGhpcy5fX25leHRJbmRleF9fKys6dm9pZCB0aGlzLl91bkJpbmQoKX0pKSxuZXh0OmwoKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVJlc3VsdCh0aGlzLl9uZXh0KCkpfSkpLF9jcmVhdGVSZXN1bHQ6bCgoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/e2RvbmU6ITAsdmFsdWU6dm9pZCAwfTp7ZG9uZTohMSx2YWx1ZTp0aGlzLl9yZXNvbHZlKHQpfX0pKSxfcmVzb2x2ZTpsKChmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2xpc3RfX1t0XX0pKSxfdW5CaW5kOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX2xpc3RfXz1udWxsLGRlbGV0ZSB0aGlzLl9fcmVkb19fLHRoaXMuX19jb250ZXh0X18mJih0aGlzLl9fY29udGV4dF9fLm9mZigiX2FkZCIsdGhpcy5fb25BZGQpLHRoaXMuX19jb250ZXh0X18ub2ZmKCJfZGVsZXRlIix0aGlzLl9vbkRlbGV0ZSksdGhpcy5fX2NvbnRleHRfXy5vZmYoIl9jbGVhciIsdGhpcy5fb25DbGVhciksdGhpcy5fX2NvbnRleHRfXz1udWxsKX0pKSx0b1N0cmluZzpsKChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrKHRoaXNbdS50b1N0cmluZ1RhZ118fCJPYmplY3QiKSsiXSJ9KSl9LGMoe19vbkFkZDpsKChmdW5jdGlvbih0KXt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgrK3RoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fPyh0aGlzLl9fcmVkb19fLmZvckVhY2goKGZ1bmN0aW9uKGUscil7ZT49dCYmKHRoaXMuX19yZWRvX19bcl09KytlKX0pLHRoaXMpLHRoaXMuX19yZWRvX18ucHVzaCh0KSk6Zih0aGlzLCJfX3JlZG9fXyIsbCgiYyIsW3RdKSkpfSkpLF9vbkRlbGV0ZTpsKChmdW5jdGlvbih0KXt2YXIgZTt0Pj10aGlzLl9fbmV4dEluZGV4X198fCgtLXRoaXMuX19uZXh0SW5kZXhfXyx0aGlzLl9fcmVkb19fJiYoLTEhPT0oZT10aGlzLl9fcmVkb19fLmluZGV4T2YodCkpJiZ0aGlzLl9fcmVkb19fLnNwbGljZShlLDEpLHRoaXMuX19yZWRvX18uZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtlPnQmJih0aGlzLl9fcmVkb19fW3JdPS0tZSl9KSx0aGlzKSkpfSkpLF9vbkNsZWFyOmwoKGZ1bmN0aW9uKCl7dGhpcy5fX3JlZG9fXyYmaS5jYWxsKHRoaXMuX19yZWRvX18pLHRoaXMuX19uZXh0SW5kZXhfXz0wfSkpfSkpKSxmKG4ucHJvdG90eXBlLHUuaXRlcmF0b3IsbCgoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSl9LHtkOjE1NCwiZC9hdXRvLWJpbmQiOjE1MywiZXM1LWV4dC9hcnJheS8jL2NsZWFyIjoxODEsImVzNS1leHQvb2JqZWN0L2Fzc2lnbiI6MTk0LCJlczUtZXh0L29iamVjdC92YWxpZC1jYWxsYWJsZSI6MjEwLCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSI6MjEyLCJlczYtc3ltYm9sIjoyMjV9XSwyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXM1LWV4dC9mdW5jdGlvbi9pcy1hcmd1bWVudHMiKSxpPXQoImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIiksYT10KCJlczUtZXh0L3N0cmluZy9pcy1zdHJpbmciKSxvPXQoImVzNi1zeW1ib2wiKS5pdGVyYXRvcixzPUFycmF5LmlzQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhaSh0KSYmKCEhcyh0KXx8KCEhYSh0KXx8KCEhbih0KXx8ImZ1bmN0aW9uIj09dHlwZW9mIHRbb10pKSl9fSx7ImVzNS1leHQvZnVuY3Rpb24vaXMtYXJndW1lbnRzIjoxODUsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoyMDEsImVzNS1leHQvc3RyaW5nL2lzLXN0cmluZyI6MjE2LCJlczYtc3ltYm9sIjoyMjV9XSwyMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9zZXQtcHJvdG90eXBlLW9mIiksYT10KCJkIiksbz10KCJlczYtc3ltYm9sIikscz10KCIuLyIpLGw9T2JqZWN0LmRlZmluZVByb3BlcnR5O249ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7dD1TdHJpbmcodCkscy5jYWxsKHRoaXMsdCksbCh0aGlzLCJfX2xlbmd0aF9fIixhKCIiLHQubGVuZ3RoKSl9LGkmJmkobixzKSxkZWxldGUgbi5wcm90b3R5cGUuY29uc3RydWN0b3Isbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShzLnByb3RvdHlwZSx7X25leHQ6YSgoZnVuY3Rpb24oKXtpZih0aGlzLl9fbGlzdF9fKXJldHVybiB0aGlzLl9fbmV4dEluZGV4X188dGhpcy5fX2xlbmd0aF9fP3RoaXMuX19uZXh0SW5kZXhfXysrOnZvaWQgdGhpcy5fdW5CaW5kKCl9KSksX3Jlc29sdmU6YSgoZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9fbGlzdF9fW3RdO3JldHVybiB0aGlzLl9fbmV4dEluZGV4X189PT10aGlzLl9fbGVuZ3RoX18/cjooZT1yLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmZTw9NTYzMTk/cit0aGlzLl9fbGlzdF9fW3RoaXMuX19uZXh0SW5kZXhfXysrXTpyfSkpfSksbChuLnByb3RvdHlwZSxvLnRvU3RyaW5nVGFnLGEoImMiLCJTdHJpbmcgSXRlcmF0b3IiKSl9LHsiLi8iOjIyMSxkOjE1NCwiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiI6MjA3LCJlczYtc3ltYm9sIjoyMjV9XSwyMjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9pcy1pdGVyYWJsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHQrIiBpcyBub3QgaXRlcmFibGUiKTtyZXR1cm4gdH19LHsiLi9pcy1pdGVyYWJsZSI6MjIyfV0sMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT90KCJleHQvZ2xvYmFsLXRoaXMiKS5TeW1ib2w6dCgiLi9wb2x5ZmlsbCIpfSx7Ii4vaXMtaW1wbGVtZW50ZWQiOjIyNiwiLi9wb2x5ZmlsbCI6MjMxLCJleHQvZ2xvYmFsLXRoaXMiOjIzOX1dLDIyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJleHQvZ2xvYmFsLXRoaXMiKSxpPXtvYmplY3Q6ITAsc3ltYm9sOiEwfTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPW4uU3ltYm9sO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiExO3Q9ZSgidGVzdCBzeW1ib2wiKTt0cnl7U3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEhaVt0eXBlb2YgZS5pdGVyYXRvcl0mJighIWlbdHlwZW9mIGUudG9QcmltaXRpdmVdJiYhIWlbdHlwZW9mIGUudG9TdHJpbmdUYWddKX19LHsiZXh0L2dsb2JhbC10aGlzIjoyMzl9XSwyMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhdCYmKCJzeW1ib2wiPT10eXBlb2YgdHx8ISF0LmNvbnN0cnVjdG9yJiYoIlN5bWJvbCI9PT10LmNvbnN0cnVjdG9yLm5hbWUmJiJTeW1ib2wiPT09dFt0LmNvbnN0cnVjdG9yLnRvU3RyaW5nVGFnXSkpfX0se31dLDIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkIiksaT1PYmplY3QuY3JlYXRlLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5LG89T2JqZWN0LnByb3RvdHlwZSxzPWkobnVsbCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLGk9MDtzW3QrKGl8fCIiKV07KSsraTtyZXR1cm4gc1t0Kz1pfHwiIl09ITAsYShvLGU9IkBAIit0LG4uZ3MobnVsbCwoZnVuY3Rpb24odCl7cnx8KHI9ITAsYSh0aGlzLGUsbih0KSkscj0hMSl9KSkpLGV9fSx7ZDoxNTR9XSwyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZCIpLGk9dCgiZXh0L2dsb2JhbC10aGlzIikuU3ltYm9sO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModCx7aGFzSW5zdGFuY2U6bigiIixpJiZpLmhhc0luc3RhbmNlfHx0KCJoYXNJbnN0YW5jZSIpKSxpc0NvbmNhdFNwcmVhZGFibGU6bigiIixpJiZpLmlzQ29uY2F0U3ByZWFkYWJsZXx8dCgiaXNDb25jYXRTcHJlYWRhYmxlIikpLGl0ZXJhdG9yOm4oIiIsaSYmaS5pdGVyYXRvcnx8dCgiaXRlcmF0b3IiKSksbWF0Y2g6bigiIixpJiZpLm1hdGNofHx0KCJtYXRjaCIpKSxyZXBsYWNlOm4oIiIsaSYmaS5yZXBsYWNlfHx0KCJyZXBsYWNlIikpLHNlYXJjaDpuKCIiLGkmJmkuc2VhcmNofHx0KCJzZWFyY2giKSksc3BlY2llczpuKCIiLGkmJmkuc3BlY2llc3x8dCgic3BlY2llcyIpKSxzcGxpdDpuKCIiLGkmJmkuc3BsaXR8fHQoInNwbGl0IikpLHRvUHJpbWl0aXZlOm4oIiIsaSYmaS50b1ByaW1pdGl2ZXx8dCgidG9QcmltaXRpdmUiKSksdG9TdHJpbmdUYWc6bigiIixpJiZpLnRvU3RyaW5nVGFnfHx0KCJ0b1N0cmluZ1RhZyIpKSx1bnNjb3BhYmxlczpuKCIiLGkmJmkudW5zY29wYWJsZXN8fHQoInVuc2NvcGFibGVzIikpfSl9fSx7ZDoxNTQsImV4dC9nbG9iYWwtdGhpcyI6MjM5fV0sMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQiKSxpPXQoIi4uLy4uLy4uL3ZhbGlkYXRlLXN5bWJvbCIpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQse2ZvcjpuKChmdW5jdGlvbihlKXtyZXR1cm4gYVtlXT9hW2VdOmFbZV09dChTdHJpbmcoZSkpfSkpLGtleUZvcjpuKChmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiBpKHQpLGEpaWYoYVtlXT09PXQpcmV0dXJuIGV9KSl9KX19LHsiLi4vLi4vLi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTR9XSwyMzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saSxhLG89dCgiZCIpLHM9dCgiLi92YWxpZGF0ZS1zeW1ib2wiKSxsPXQoImV4dC9nbG9iYWwtdGhpcyIpLlN5bWJvbCxjPXQoIi4vbGliL3ByaXZhdGUvZ2VuZXJhdGUtbmFtZSIpLHU9dCgiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIiksZj10KCIuL2xpYi9wcml2YXRlL3NldHVwL3N5bWJvbC1yZWdpc3RyeSIpLGg9T2JqZWN0LmNyZWF0ZSxwPU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzLGQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKXRyeXtTdHJpbmcobCgpKSxhPSEwfWNhdGNoKHQpe31lbHNlIGw9bnVsbDtpPWZ1bmN0aW9uKHQpe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBuKHQpfSxlLmV4cG9ydHM9bj1mdW5jdGlvbiB0KGUpe3ZhciByO2lmKHRoaXMgaW5zdGFuY2VvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3JldHVybiBhP2woZSk6KHI9aChpLnByb3RvdHlwZSksZT12b2lkIDA9PT1lPyIiOlN0cmluZyhlKSxwKHIse19fZGVzY3JpcHRpb25fXzpvKCIiLGUpLF9fbmFtZV9fOm8oIiIsYyhlKSl9KSl9LHUobiksZihuKSxwKGkucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpvKG4pLHRvU3RyaW5nOm8oIiIsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19uYW1lX199KSl9KSxwKG4ucHJvdG90eXBlLHt0b1N0cmluZzpvKChmdW5jdGlvbigpe3JldHVybiJTeW1ib2wgKCIrcyh0aGlzKS5fX2Rlc2NyaXB0aW9uX18rIikifSkpLHZhbHVlT2Y6bygoZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzKX0pKX0pLGQobi5wcm90b3R5cGUsbi50b1ByaW1pdGl2ZSxvKCIiLChmdW5jdGlvbigpe3ZhciB0PXModGhpcyk7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0P3Q6dC50b1N0cmluZygpfSkpKSxkKG4ucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsIlN5bWJvbCIpKSxkKGkucHJvdG90eXBlLG4udG9TdHJpbmdUYWcsbygiYyIsbi5wcm90b3R5cGVbbi50b1N0cmluZ1RhZ10pKSxkKGkucHJvdG90eXBlLG4udG9QcmltaXRpdmUsbygiYyIsbi5wcm90b3R5cGVbbi50b1ByaW1pdGl2ZV0pKX0seyIuL2xpYi9wcml2YXRlL2dlbmVyYXRlLW5hbWUiOjIyOCwiLi9saWIvcHJpdmF0ZS9zZXR1cC9zdGFuZGFyZC1zeW1ib2xzIjoyMjksIi4vbGliL3ByaXZhdGUvc2V0dXAvc3ltYm9sLXJlZ2lzdHJ5IjoyMzAsIi4vdmFsaWRhdGUtc3ltYm9sIjoyMzIsZDoxNTQsImV4dC9nbG9iYWwtdGhpcyI6MjM5fV0sMjMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaXMtc3ltYm9sIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IG5ldyBUeXBlRXJyb3IodCsiIGlzIG5vdCBhIHN5bWJvbCIpO3JldHVybiB0fX0seyIuL2lzLXN5bWJvbCI6MjI3fV0sMjMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz10KCIuL2lzLWltcGxlbWVudGVkIikoKT9XZWFrTWFwOnQoIi4vcG9seWZpbGwiKX0seyIuL2lzLWltcGxlbWVudGVkIjoyMzQsIi4vcG9seWZpbGwiOjIzNn1dLDIzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBXZWFrTWFwKXJldHVybiExO3RyeXt0PW5ldyBXZWFrTWFwKFtbZT17fSwib25lIl0sW3t9LCJ0d28iXSxbe30sInRocmVlIl1dKX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4iW29iamVjdCBXZWFrTWFwXSI9PT1TdHJpbmcodCkmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5zZXQmJih0LnNldCh7fSwxKT09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5kZWxldGUmJigiZnVuY3Rpb24iPT10eXBlb2YgdC5oYXMmJiJvbmUiPT09dC5nZXQoZSkpKSkpfX0se31dLDIzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXAmJiJbb2JqZWN0IFdlYWtNYXBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXcgV2Vha01hcCl9LHt9XSwyMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJlczUtZXh0L29iamVjdC9pcy12YWx1ZSIpLGE9dCgiZXM1LWV4dC9vYmplY3Qvc2V0LXByb3RvdHlwZS1vZiIpLG89dCgiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0Iikscz10KCJlczUtZXh0L29iamVjdC92YWxpZC12YWx1ZSIpLGw9dCgiZXM1LWV4dC9zdHJpbmcvcmFuZG9tLXVuaXEiKSxjPXQoImQiKSx1PXQoImVzNi1pdGVyYXRvci9nZXQiKSxmPXQoImVzNi1pdGVyYXRvci9mb3Itb2YiKSxoPXQoImVzNi1zeW1ib2wiKS50b1N0cmluZ1RhZyxwPXQoIi4vaXMtbmF0aXZlLWltcGxlbWVudGVkIiksZD1BcnJheS5pc0FycmF5LG09T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSx2PU9iamVjdC5nZXRQcm90b3R5cGVPZjtlLmV4cG9ydHM9bj1mdW5jdGlvbigpe3ZhciB0LGU9YXJndW1lbnRzWzBdO2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXRocm93IG5ldyBUeXBlRXJyb3IoIkNvbnN0cnVjdG9yIHJlcXVpcmVzICduZXcnIik7cmV0dXJuIHQ9cCYmYSYmV2Vha01hcCE9PW4/YShuZXcgV2Vha01hcCx2KHRoaXMpKTp0aGlzLGkoZSkmJihkKGUpfHwoZT11KGUpKSksbSh0LCJfX3dlYWtNYXBEYXRhX18iLGMoImMiLCIkd2Vha01hcCQiK2woKSkpLGU/KGYoZSwoZnVuY3Rpb24oZSl7cyhlKSx0LnNldChlWzBdLGVbMV0pfSkpLHQpOnR9LHAmJihhJiZhKG4sV2Vha01hcCksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShXZWFrTWFwLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YyhuKX0pKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSx7ZGVsZXRlOmMoKGZ1bmN0aW9uKHQpe3JldHVybiEhZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pJiYoZGVsZXRlIHRbdGhpcy5fX3dlYWtNYXBEYXRhX19dLCEwKX0pKSxnZXQ6YygoZnVuY3Rpb24odCl7aWYoZy5jYWxsKG8odCksdGhpcy5fX3dlYWtNYXBEYXRhX18pKXJldHVybiB0W3RoaXMuX193ZWFrTWFwRGF0YV9fXX0pKSxoYXM6YygoZnVuY3Rpb24odCl7cmV0dXJuIGcuY2FsbChvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fKX0pKSxzZXQ6YygoZnVuY3Rpb24odCxlKXtyZXR1cm4gbShvKHQpLHRoaXMuX193ZWFrTWFwRGF0YV9fLGMoImMiLGUpKSx0aGlzfSkpLHRvU3RyaW5nOmMoKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifSkpfSksbShuLnByb3RvdHlwZSxoLGMoImMiLCJXZWFrTWFwIikpfSx7Ii4vaXMtbmF0aXZlLWltcGxlbWVudGVkIjoyMzUsZDoxNTQsImVzNS1leHQvb2JqZWN0L2lzLXZhbHVlIjoyMDEsImVzNS1leHQvb2JqZWN0L3NldC1wcm90b3R5cGUtb2YiOjIwNywiZXM1LWV4dC9vYmplY3QvdmFsaWQtb2JqZWN0IjoyMTEsImVzNS1leHQvb2JqZWN0L3ZhbGlkLXZhbHVlIjoyMTIsImVzNS1leHQvc3RyaW5nL3JhbmRvbS11bmlxIjoyMTcsImVzNi1pdGVyYXRvci9mb3Itb2YiOjIxOSwiZXM2LWl0ZXJhdG9yL2dldCI6MjIwLCJlczYtc3ltYm9sIjoyMjV9XSwyMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLGE9aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuYXBwbHk/aS5hcHBseTpmdW5jdGlvbih0LGUscil7cmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKHQsZSxyKX07bj1pJiYiZnVuY3Rpb24iPT10eXBlb2YgaS5vd25LZXlzP2kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KSl9OmZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KX07dmFyIG89TnVtYmVyLmlzTmFOfHxmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH07ZnVuY3Rpb24gcygpe3MuaW5pdC5jYWxsKHRoaXMpfWUuZXhwb3J0cz1zLGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2Z1bmN0aW9uIGkocil7dC5yZW1vdmVMaXN0ZW5lcihlLGEpLG4ocil9ZnVuY3Rpb24gYSgpeyJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlbW92ZUxpc3RlbmVyJiZ0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsaSkscihbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXYodCxlLGEse29uY2U6ITB9KSwiZXJyb3IiIT09ZSYmZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiB0Lm9uJiZ2KHQsImVycm9yIixlLHIpfSh0LGkse29uY2U6ITB9KX0pKX0scy5FdmVudEVtaXR0ZXI9cyxzLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxzLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxzLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgbD0xMDtmdW5jdGlvbiBjKHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiB0KX1mdW5jdGlvbiB1KHQpe3JldHVybiB2b2lkIDA9PT10Ll9tYXhMaXN0ZW5lcnM/cy5kZWZhdWx0TWF4TGlzdGVuZXJzOnQuX21heExpc3RlbmVyc31mdW5jdGlvbiBmKHQsZSxyLG4pe3ZhciBpLGEsbyxzO2lmKGMociksdm9pZCAwPT09KGE9dC5fZXZlbnRzKT8oYT10Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0Ll9ldmVudHNDb3VudD0wKToodm9pZCAwIT09YS5uZXdMaXN0ZW5lciYmKHQuZW1pdCgibmV3TGlzdGVuZXIiLGUsci5saXN0ZW5lcj9yLmxpc3RlbmVyOnIpLGE9dC5fZXZlbnRzKSxvPWFbZV0pLHZvaWQgMD09PW8pbz1hW2VdPXIsKyt0Ll9ldmVudHNDb3VudDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBvP289YVtlXT1uP1tyLG9dOltvLHJdOm4/by51bnNoaWZ0KHIpOm8ucHVzaChyKSwoaT11KHQpKT4wJiZvLmxlbmd0aD5pJiYhby53YXJuZWQpe28ud2FybmVkPSEwO3ZhciBsPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK28ubGVuZ3RoKyIgIitTdHJpbmcoZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7bC5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGwuZW1pdHRlcj10LGwudHlwZT1lLGwuY291bnQ9by5sZW5ndGgscz1sLGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKHMpfXJldHVybiB0fWZ1bmN0aW9uIGgoKXtpZighdGhpcy5maXJlZClyZXR1cm4gdGhpcy50YXJnZXQucmVtb3ZlTGlzdGVuZXIodGhpcy50eXBlLHRoaXMud3JhcEZuKSx0aGlzLmZpcmVkPSEwLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMubGlzdGVuZXIuY2FsbCh0aGlzLnRhcmdldCk6dGhpcy5saXN0ZW5lci5hcHBseSh0aGlzLnRhcmdldCxhcmd1bWVudHMpfWZ1bmN0aW9uIHAodCxlLHIpe3ZhciBuPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDp0LHR5cGU6ZSxsaXN0ZW5lcjpyfSxpPWguYmluZChuKTtyZXR1cm4gaS5saXN0ZW5lcj1yLG4ud3JhcEZuPWksaX1mdW5jdGlvbiBkKHQsZSxyKXt2YXIgbj10Ll9ldmVudHM7aWYodm9pZCAwPT09bilyZXR1cm5bXTt2YXIgaT1uW2VdO3JldHVybiB2b2lkIDA9PT1pP1tdOiJmdW5jdGlvbiI9PXR5cGVvZiBpP3I/W2kubGlzdGVuZXJ8fGldOltpXTpyP2Z1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPGUubGVuZ3RoOysrcillW3JdPXRbcl0ubGlzdGVuZXJ8fHRbcl07cmV0dXJuIGV9KGkpOmcoaSxpLmxlbmd0aCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09ZSl7dmFyIHI9ZVt0XTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcilyZXR1cm4gMTtpZih2b2lkIDAhPT1yKXJldHVybiByLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlOysrbilyW25dPXRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gdih0LGUscixuKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5vbiluLm9uY2U/dC5vbmNlKGUscik6dC5vbihlLHIpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdCk7dC5hZGRFdmVudExpc3RlbmVyKGUsKGZ1bmN0aW9uIGkoYSl7bi5vbmNlJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxpKSxyKGEpfSkpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0KXtpZigibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MHx8byh0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3QrIi4iKTtsPXR9fSkscy5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0scy5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8dDwwfHxvKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrdCsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxzLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdSh0aGlzKX0scy5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGFyZ3VtZW50c1tyXSk7dmFyIG49ImVycm9yIj09PXQsaT10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09aSluPW4mJnZvaWQgMD09PWkuZXJyb3I7ZWxzZSBpZighbilyZXR1cm4hMTtpZihuKXt2YXIgbztpZihlLmxlbmd0aD4wJiYobz1lWzBdKSxvIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgbzt2YXIgcz1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhvPyIgKCIrby5tZXNzYWdlKyIpIjoiIikpO3Rocm93IHMuY29udGV4dD1vLHN9dmFyIGw9aVt0XTtpZih2b2lkIDA9PT1sKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBsKWEobCx0aGlzLGUpO2Vsc2V7dmFyIGM9bC5sZW5ndGgsdT1nKGwsYyk7Zm9yKHI9MDtyPGM7KytyKWEodVtyXSx0aGlzLGUpfXJldHVybiEwfSxzLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3JldHVybiBmKHRoaXMsdCxlLCExKX0scy5wcm90b3R5cGUub249cy5wcm90b3R5cGUuYWRkTGlzdGVuZXIscy5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYodGhpcyx0LGUsITApfSxzLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5vbih0LHAodGhpcyx0LGUpKSx0aGlzfSxzLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGMoZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIodCxwKHRoaXMsdCxlKSksdGhpc30scy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvO2lmKGMoZSksdm9pZCAwPT09KG49dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0ocj1uW3RdKSlyZXR1cm4gdGhpcztpZihyPT09ZXx8ci5saXN0ZW5lcj09PWUpMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTooZGVsZXRlIG5bdF0sbi5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsdCxyLmxpc3RlbmVyfHxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil7Zm9yKGk9LTEsYT1yLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHJbYV09PT1lfHxyW2FdLmxpc3RlbmVyPT09ZSl7bz1yW2FdLmxpc3RlbmVyLGk9YTticmVha31pZihpPDApcmV0dXJuIHRoaXM7MD09PWk/ci5zaGlmdCgpOmZ1bmN0aW9uKHQsZSl7Zm9yKDtlKzE8dC5sZW5ndGg7ZSsrKXRbZV09dFtlKzFdO3QucG9wKCl9KHIsaSksMT09PXIubGVuZ3RoJiYoblt0XT1yWzBdKSx2b2lkIDAhPT1uLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIix0LG98fGUpfXJldHVybiB0aGlzfSxzLnByb3RvdHlwZS5vZmY9cy5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXIscy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbjtpZih2b2lkIDA9PT0ocj10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PXIucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1yW3RdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgclt0XSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIGksYT1PYmplY3Qua2V5cyhyKTtmb3Iobj0wO248YS5sZW5ndGg7KytuKSJyZW1vdmVMaXN0ZW5lciIhPT0oaT1hW25dKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoaSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YoZT1yW3RdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKHQsZSk7ZWxzZSBpZih2b2lkIDAhPT1lKWZvcihuPWUubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcih0LGVbbl0pO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24odCl7cmV0dXJuIGQodGhpcyx0LCEwKX0scy5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBkKHRoaXMsdCwhMSl9LHMubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0LGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0Lmxpc3RlbmVyQ291bnQ/dC5saXN0ZW5lckNvdW50KGUpOm0uY2FsbCh0LGUpfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PW0scy5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP24odGhpcy5fZXZlbnRzKTpbXX19LHt9XSwyMzg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZilyZXR1cm4gc2VsZjtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBnbG9iYWwgYHRoaXNgIil9O2UuZXhwb3J0cz1mdW5jdGlvbigpe2lmKHRoaXMpcmV0dXJuIHRoaXM7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCJfX2dsb2JhbF9fIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGNvbmZpZ3VyYWJsZTohMH0pfWNhdGNoKHQpe3JldHVybiBuKCl9dHJ5e3JldHVybiBfX2dsb2JhbF9ffHxuKCl9ZmluYWxseXtkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX2dsb2JhbF9ffX0oKX0se31dLDIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dCgiLi9pcy1pbXBsZW1lbnRlZCIpKCk/Z2xvYmFsVGhpczp0KCIuL2ltcGxlbWVudGF0aW9uIil9LHsiLi9pbXBsZW1lbnRhdGlvbiI6MjM4LCIuL2lzLWltcGxlbWVudGVkIjoyNDB9XSwyNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiYoISFnbG9iYWxUaGlzJiZnbG9iYWxUaGlzLkFycmF5PT09QXJyYXkpfX0se31dLDI0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWV8fDAsaT1yfHwxO3JldHVybltbdFsxMl0rdFswXSx0WzEzXSt0WzFdLHRbMTRdK3RbMl0sdFsxNV0rdFszXV0sW3RbMTJdLXRbMF0sdFsxM10tdFsxXSx0WzE0XS10WzJdLHRbMTVdLXRbM11dLFt0WzEyXSt0WzRdLHRbMTNdK3RbNV0sdFsxNF0rdFs2XSx0WzE1XSt0WzddXSxbdFsxMl0tdFs0XSx0WzEzXS10WzVdLHRbMTRdLXRbNl0sdFsxNV0tdFs3XV0sW24qdFsxMl0rdFs4XSxuKnRbMTNdK3RbOV0sbip0WzE0XSt0WzEwXSxuKnRbMTVdK3RbMTFdXSxbaSp0WzEyXS10WzhdLGkqdFsxM10tdFs5XSxpKnRbMTRdLXRbMTBdLGkqdFsxNV0tdFsxMV1dXX19LHt9XSwyNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtc3RyaW5nLWJsYW5rIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O2lmKCJzdHJpbmciPT09ZSl7dmFyIHI9dDtpZigwPT09KHQ9K3QpJiZuKHIpKXJldHVybiExfWVsc2UgaWYoIm51bWJlciIhPT1lKXJldHVybiExO3JldHVybiB0LXQ8MX19LHsiaXMtc3RyaW5nLWJsYW5rIjo0Mzh9XSwyNDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgbyhbMF0sWzBdLDApO2Nhc2UgMTpyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/bmV3IG8obj1sKHQpLG4sMCk6bmV3IG8odCxsKHQubGVuZ3RoKSwwKTtjYXNlIDI6aWYoIm51bWJlciI9PXR5cGVvZiBlKXt2YXIgbj1sKHQubGVuZ3RoKTtyZXR1cm4gbmV3IG8odCxuLCtlKX1yPTA7Y2FzZSAzOmlmKHQubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJzdGF0ZSBhbmQgdmVsb2NpdHkgbGVuZ3RocyBtdXN0IG1hdGNoIik7cmV0dXJuIG5ldyBvKHQsZSxyKX19O3ZhciBuPXQoImN1YmljLWhlcm1pdGUiKSxpPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gYSh0LGUscil7cmV0dXJuIE1hdGgubWluKGUsTWF0aC5tYXgodCxyKSl9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy5kaW1lbnNpb249dC5sZW5ndGgsdGhpcy5ib3VuZHM9W25ldyBBcnJheSh0aGlzLmRpbWVuc2lvbiksbmV3IEFycmF5KHRoaXMuZGltZW5zaW9uKV07Zm9yKHZhciBuPTA7bjx0aGlzLmRpbWVuc2lvbjsrK24pdGhpcy5ib3VuZHNbMF1bbl09LTEvMCx0aGlzLmJvdW5kc1sxXVtuXT0xLzA7dGhpcy5fc3RhdGU9dC5zbGljZSgpLnJldmVyc2UoKSx0aGlzLl92ZWxvY2l0eT1lLnNsaWNlKCkucmV2ZXJzZSgpLHRoaXMuX3RpbWU9W3JdLHRoaXMuX3NjcmF0Y2g9W3Quc2xpY2UoKSx0LnNsaWNlKCksdC5zbGljZSgpLHQuc2xpY2UoKSx0LnNsaWNlKCldfXZhciBzPW8ucHJvdG90eXBlO2Z1bmN0aW9uIGwodCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0OysrcillW3JdPTA7cmV0dXJuIGV9cy5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1pLmd0KHRoaXMuX3RpbWUsdCktMTtlPD0wfHwodGhpcy5fdGltZS5zcGxpY2UoMCxlKSx0aGlzLl9zdGF0ZS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSx0aGlzLl92ZWxvY2l0eS5zcGxpY2UoMCxlKnRoaXMuZGltZW5zaW9uKSl9LHMuY3VydmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGltZSxyPWUubGVuZ3RoLG89aS5sZShlLHQpLHM9dGhpcy5fc2NyYXRjaFswXSxsPXRoaXMuX3N0YXRlLGM9dGhpcy5fdmVsb2NpdHksdT10aGlzLmRpbWVuc2lvbixmPXRoaXMuYm91bmRzO2lmKG88MClmb3IodmFyIGg9dS0xLHA9MDtwPHU7KytwLC0taClzW3BdPWxbaF07ZWxzZSBpZihvPj1yLTEpe2g9bC5sZW5ndGgtMTt2YXIgZD10LWVbci0xXTtmb3IocD0wO3A8dTsrK3AsLS1oKXNbcF09bFtoXStkKmNbaF19ZWxzZXtoPXUqKG8rMSktMTt2YXIgbT1lW29dLGc9ZVtvKzFdLW18fDEsdj10aGlzLl9zY3JhdGNoWzFdLHk9dGhpcy5fc2NyYXRjaFsyXSx4PXRoaXMuX3NjcmF0Y2hbM10sYj10aGlzLl9zY3JhdGNoWzRdLF89ITA7Zm9yKHA9MDtwPHU7KytwLC0taCl2W3BdPWxbaF0seFtwXT1jW2hdKmcseVtwXT1sW2grdV0sYltwXT1jW2grdV0qZyxfPV8mJnZbcF09PT15W3BdJiZ4W3BdPT09YltwXSYmMD09PXhbcF07aWYoXylmb3IocD0wO3A8dTsrK3Apc1twXT12W3BdO2Vsc2Ugbih2LHgseSxiLCh0LW0pL2cscyl9dmFyIHc9ZlswXSxUPWZbMV07Zm9yKHA9MDtwPHU7KytwKXNbcF09YSh3W3BdLFRbcF0sc1twXSk7cmV0dXJuIHN9LHMuZGN1cnZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbWUscj1lLmxlbmd0aCxhPWkubGUoZSx0KSxvPXRoaXMuX3NjcmF0Y2hbMF0scz10aGlzLl9zdGF0ZSxsPXRoaXMuX3ZlbG9jaXR5LGM9dGhpcy5kaW1lbnNpb247aWYoYT49ci0xKWZvcih2YXIgdT1zLmxlbmd0aC0xLGY9KGVbci0xXSwwKTtmPGM7KytmLC0tdSlvW2ZdPWxbdV07ZWxzZXt1PWMqKGErMSktMTt2YXIgaD1lW2FdLHA9ZVthKzFdLWh8fDEsZD10aGlzLl9zY3JhdGNoWzFdLG09dGhpcy5fc2NyYXRjaFsyXSxnPXRoaXMuX3NjcmF0Y2hbM10sdj10aGlzLl9zY3JhdGNoWzRdLHk9ITA7Zm9yKGY9MDtmPGM7KytmLC0tdSlkW2ZdPXNbdV0sZ1tmXT1sW3VdKnAsbVtmXT1zW3UrY10sdltmXT1sW3UrY10qcCx5PXkmJmRbZl09PT1tW2ZdJiZnW2ZdPT09dltmXSYmMD09PWdbZl07aWYoeSlmb3IoZj0wO2Y8YzsrK2Ypb1tmXT0wO2Vsc2V7bi5kZXJpdmF0aXZlKGQsZyxtLHYsKHQtaCkvcCxvKTtmb3IoZj0wO2Y8YzsrK2Ypb1tmXS89cH19cmV0dXJuIG99LHMubGFzdFQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl90aW1lO3JldHVybiB0W3QubGVuZ3RoLTFdfSxzLnN0YWJsZT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLl92ZWxvY2l0eSxlPXQubGVuZ3RoLHI9dGhpcy5kaW1lbnNpb24tMTtyPj0wOy0tcilpZih0Wy0tZV0pcmV0dXJuITE7cmV0dXJuITB9LHMuanVtcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8ZXx8YXJndW1lbnRzLmxlbmd0aCE9PXIrMSkpe3ZhciBuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC10aGlzLmRpbWVuc2lvbixzPXRoaXMuYm91bmRzLGw9c1swXSxjPXNbMV07dGhpcy5fdGltZS5wdXNoKGUsdCk7Zm9yKHZhciB1PTA7dTwyOysrdSlmb3IodmFyIGY9MDtmPHI7KytmKW4ucHVzaChuW28rK10pLGkucHVzaCgwKTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKGY9cjtmPjA7LS1mKW4ucHVzaChhKGxbZi0xXSxjW2YtMV0sYXJndW1lbnRzW2ZdKSksaS5wdXNoKDApfX0scy5wdXNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXRoaXMuZGltZW5zaW9uO2lmKCEodDxlfHxhcmd1bWVudHMubGVuZ3RoIT09cisxKSl7dmFyIG49dGhpcy5fc3RhdGUsaT10aGlzLl92ZWxvY2l0eSxvPW4ubGVuZ3RoLXRoaXMuZGltZW5zaW9uLHM9dC1lLGw9dGhpcy5ib3VuZHMsYz1sWzBdLHU9bFsxXSxmPXM+MWUtNj8xL3M6MDt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBoPXI7aD4wOy0taCl7dmFyIHA9YShjW2gtMV0sdVtoLTFdLGFyZ3VtZW50c1toXSk7bi5wdXNoKHApLGkucHVzaCgocC1uW28rK10pKmYpfX19LHMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGltZW5zaW9uO2lmKCEodDx0aGlzLmxhc3RUKCl8fGFyZ3VtZW50cy5sZW5ndGghPT1lKzEpKXt2YXIgcj10aGlzLl9zdGF0ZSxuPXRoaXMuX3ZlbG9jaXR5LGk9dGhpcy5ib3VuZHMsbz1pWzBdLHM9aVsxXTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBsPWU7bD4wOy0tbClyLnB1c2goYShvW2wtMV0sc1tsLTFdLGFyZ3VtZW50c1tsXSkpLG4ucHVzaCgwKX19LHMubW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCkscj10aGlzLmRpbWVuc2lvbjtpZighKHQ8PWV8fGFyZ3VtZW50cy5sZW5ndGghPT1yKzEpKXt2YXIgbj10aGlzLl9zdGF0ZSxpPXRoaXMuX3ZlbG9jaXR5LG89bi5sZW5ndGgtdGhpcy5kaW1lbnNpb24scz10aGlzLmJvdW5kcyxsPXNbMF0sYz1zWzFdLHU9dC1lLGY9dT4xZS02PzEvdTowO3RoaXMuX3RpbWUucHVzaCh0KTtmb3IodmFyIGg9cjtoPjA7LS1oKXt2YXIgcD1hcmd1bWVudHNbaF07bi5wdXNoKGEobFtoLTFdLGNbaC0xXSxuW28rK10rcCkpLGkucHVzaChwKmYpfX19LHMuaWRsZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmxhc3RUKCk7aWYoISh0PGUpKXt2YXIgcj10aGlzLmRpbWVuc2lvbixuPXRoaXMuX3N0YXRlLGk9dGhpcy5fdmVsb2NpdHksbz1uLmxlbmd0aC1yLHM9dGhpcy5ib3VuZHMsbD1zWzBdLGM9c1sxXSx1PXQtZTt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciBmPXItMTtmPj0wOy0tZiluLnB1c2goYShsW2ZdLGNbZl0sbltvXSt1Kmlbb10pKSxpLnB1c2goMCksbys9MX19fSx7ImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsImN1YmljLWhlcm1pdGUiOjE1Mn1dLDI0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImR0eXBlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZighdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgZGF0YSBhcyBmaXJzdCBwYXJhbWV0ZXIiKTtpZihyPTB8KyhyfHwwKSxBcnJheS5pc0FycmF5KHQpJiZ0WzBdJiYibnVtYmVyIj09dHlwZW9mIHRbMF1bMF0pe3ZhciBpLGEsbyxzLGw9dFswXS5sZW5ndGgsYz10Lmxlbmd0aCpsO2UmJiJzdHJpbmciIT10eXBlb2YgZXx8KGU9bmV3KG4oZXx8ImZsb2F0MzIiKSkoYytyKSk7dmFyIHU9ZS5sZW5ndGgtcjtpZihjIT09dSl0aHJvdyBuZXcgRXJyb3IoInNvdXJjZSBsZW5ndGggIitjKyIgKCIrbCsieCIrdC5sZW5ndGgrIikgZG9lcyBub3QgbWF0Y2ggZGVzdGluYXRpb24gbGVuZ3RoICIrdSk7Zm9yKGk9MCxvPXI7aTx0Lmxlbmd0aDtpKyspZm9yKGE9MDthPGw7YSsrKWVbbysrXT1udWxsPT09dFtpXVthXT9OYU46dFtpXVthXX1lbHNlIGlmKGUmJiJzdHJpbmciIT10eXBlb2YgZSllLnNldCh0LHIpO2Vsc2V7dmFyIGY9bihlfHwiZmxvYXQzMiIpO2lmKEFycmF5LmlzQXJyYXkodCl8fCJhcnJheSI9PT1lKWZvcihlPW5ldyBmKHQubGVuZ3RoK3IpLGk9MCxvPXIscz1lLmxlbmd0aDtvPHM7bysrLGkrKyllW29dPW51bGw9PT10W2ldP05hTjp0W2ldO2Vsc2UgMD09PXI/ZT1uZXcgZih0KTooZT1uZXcgZih0Lmxlbmd0aCtyKSkuc2V0KHQscil9cmV0dXJuIGV9fSx7ZHR5cGU6MTc2fV0sMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250L3N0cmluZ2lmeSIpLGk9WzMyLDEyNl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5zaGFwZT90LnNoYXBlOnQuY2FudmFzP1t0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdOls1MTIsNTEyXSxyPXQuY2FudmFzfHxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxhPXQuZm9udCxvPSJudW1iZXIiPT10eXBlb2YgdC5zdGVwP1t0LnN0ZXAsdC5zdGVwXTp0LnN0ZXB8fFszMiwzMl0scz10LmNoYXJzfHxpO2EmJiJzdHJpbmciIT10eXBlb2YgYSYmKGE9bihhKSk7aWYoQXJyYXkuaXNBcnJheShzKSl7aWYoMj09PXMubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHNbMF0mJiJudW1iZXIiPT10eXBlb2Ygc1sxXSl7Zm9yKHZhciBsPVtdLGM9c1swXSx1PTA7Yzw9c1sxXTtjKyspbFt1KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYyk7cz1sfX1lbHNlIHM9U3RyaW5nKHMpLnNwbGl0KCIiKTtlPWUuc2xpY2UoKSxyLndpZHRoPWVbMF0sci5oZWlnaHQ9ZVsxXTt2YXIgZj1yLmdldENvbnRleHQoIjJkIik7Zi5maWxsU3R5bGU9IiMwMDAiLGYuZmlsbFJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGYuZm9udD1hLGYudGV4dEFsaWduPSJjZW50ZXIiLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaD1vWzBdLzIscD1vWzFdLzI7Zm9yKGM9MDtjPHMubGVuZ3RoO2MrKylmLmZpbGxUZXh0KHNbY10saCxwKSwoaCs9b1swXSk+ZVswXS1vWzBdLzImJihoPW9bMF0vMixwKz1vWzFdKTtyZXR1cm4gcn19LHsiY3NzLWZvbnQvc3RyaW5naWZ5IjoxNDl9XSwyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUpe2V8fChlPXt9KSwoInN0cmluZyI9PXR5cGVvZiB0fHxBcnJheS5pc0FycmF5KHQpKSYmKGUuZmFtaWx5PXQpO3ZhciByPUFycmF5LmlzQXJyYXkoZS5mYW1pbHkpP2UuZmFtaWx5LmpvaW4oIiwgIik6ZS5mYW1pbHk7aWYoIXIpdGhyb3cgRXJyb3IoImBmYW1pbHlgIG11c3QgYmUgZGVmaW5lZCIpO3ZhciBzPWUuc2l6ZXx8ZS5mb250U2l6ZXx8ZS5lbXx8NDgsbD1lLndlaWdodHx8ZS5mb250V2VpZ2h0fHwiIixjPSh0PVtlLnN0eWxlfHxlLmZvbnRTdHlsZXx8IiIsbCxzXS5qb2luKCIgIikrInB4ICIrcixlLm9yaWdpbnx8InRvcCIpO2lmKG4uY2FjaGVbcl0mJnM8PW4uY2FjaGVbcl0uZW0pcmV0dXJuIGkobi5jYWNoZVtyXSxjKTt2YXIgdT1lLmNhbnZhc3x8bi5jYW52YXMsZj11LmdldENvbnRleHQoIjJkIiksaD17dXBwZXI6dm9pZCAwIT09ZS51cHBlcj9lLnVwcGVyOiJIIixsb3dlcjp2b2lkIDAhPT1lLmxvd2VyP2UubG93ZXI6IngiLGRlc2NlbnQ6dm9pZCAwIT09ZS5kZXNjZW50P2UuZGVzY2VudDoicCIsYXNjZW50OnZvaWQgMCE9PWUuYXNjZW50P2UuYXNjZW50OiJoIix0aXR0bGU6dm9pZCAwIT09ZS50aXR0bGU/ZS50aXR0bGU6ImkiLG92ZXJzaG9vdDp2b2lkIDAhPT1lLm92ZXJzaG9vdD9lLm92ZXJzaG9vdDoiTyJ9LHA9TWF0aC5jZWlsKDEuNSpzKTt1LmhlaWdodD1wLHUud2lkdGg9LjUqcCxmLmZvbnQ9dDt2YXIgZD17dG9wOjB9O2YuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFN0eWxlPSJibGFjayIsZi5maWxsVGV4dCgiSCIsMCwwKTt2YXIgbT1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKTtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYm90dG9tIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBnPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QubGluZUhlaWdodD1kLmJvdHRvbT1wLWcrbSxmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0iYWxwaGFiZXRpYyIsZi5maWxsVGV4dCgiSCIsMCxwKTt2YXIgdj1wLWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLTErbTtkLmJhc2VsaW5lPWQuYWxwaGFiZXRpYz12LGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJtaWRkbGUiLGYuZmlsbFRleHQoIkgiLDAsLjUqcCk7dmFyIHk9YShmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5tZWRpYW49ZC5taWRkbGU9cC15LTErbS0uNSpwLGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJoYW5naW5nIixmLmZpbGxUZXh0KCJIIiwwLC41KnApO3ZhciB4PWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2QuaGFuZ2luZz1wLXgtMSttLS41KnAsZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9ImlkZW9ncmFwaGljIixmLmZpbGxUZXh0KCJIIiwwLHApO3ZhciBiPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpO2lmKGQuaWRlb2dyYXBoaWM9cC1iLTErbSxoLnVwcGVyJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnVwcGVyLDAsMCksZC51cHBlcj1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSxkLmNhcEhlaWdodD1kLmJhc2VsaW5lLWQudXBwZXIpLGgubG93ZXImJihmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgubG93ZXIsMCwwKSxkLmxvd2VyPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpLGQueEhlaWdodD1kLmJhc2VsaW5lLWQubG93ZXIpLGgudGl0dGxlJiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLnRpdHRsZSwwLDApLGQudGl0dGxlPWEoZi5nZXRJbWFnZURhdGEoMCwwLHAscCkpKSxoLmFzY2VudCYmKGYuY2xlYXJSZWN0KDAsMCxwLHApLGYudGV4dEJhc2VsaW5lPSJ0b3AiLGYuZmlsbFRleHQoaC5hc2NlbnQsMCwwKSxkLmFzY2VudD1hKGYuZ2V0SW1hZ2VEYXRhKDAsMCxwLHApKSksaC5kZXNjZW50JiYoZi5jbGVhclJlY3QoMCwwLHAscCksZi50ZXh0QmFzZWxpbmU9InRvcCIsZi5maWxsVGV4dChoLmRlc2NlbnQsMCwwKSxkLmRlc2NlbnQ9byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSkpLGgub3ZlcnNob290KXtmLmNsZWFyUmVjdCgwLDAscCxwKSxmLnRleHRCYXNlbGluZT0idG9wIixmLmZpbGxUZXh0KGgub3ZlcnNob290LDAsMCk7dmFyIF89byhmLmdldEltYWdlRGF0YSgwLDAscCxwKSk7ZC5vdmVyc2hvb3Q9Xy12fWZvcih2YXIgdyBpbiBkKWRbd10vPXM7cmV0dXJuIGQuZW09cyxuLmNhY2hlW3JdPWQsaShkLGMpfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj17fTtmb3IodmFyIG4gaW4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRbZV0pLHQpImVtIiE9PW4mJihyW25dPXRbbl0tZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj0zO248ci5sZW5ndGg7bis9NClpZigwIT09cltuXSlyZXR1cm4gTWF0aC5mbG9vciguMjUqKG4tMykvZSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5oZWlnaHQscj10LmRhdGEsbj1yLmxlbmd0aC0xO24+MDtuLT00KWlmKDAhPT1yW25dKXJldHVybiBNYXRoLmZsb29yKC4yNSoobi0zKS9lKX1lLmV4cG9ydHM9bixuLmNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSxuLmNhY2hlPXt9fSx7fV0sMjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModHx8bSxudWxsKX07ZnVuY3Rpb24gbih0LGUscixuLGksYSl7dGhpcy5fY29sb3I9dCx0aGlzLmtleT1lLHRoaXMudmFsdWU9cix0aGlzLmxlZnQ9bix0aGlzLnJpZ2h0PWksdGhpcy5fY291bnQ9YX1mdW5jdGlvbiBpKHQpe3JldHVybiBuZXcgbih0Ll9jb2xvcix0LmtleSx0LnZhbHVlLHQubGVmdCx0LnJpZ2h0LHQuX2NvdW50KX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIG5ldyBuKHQsZS5rZXksZS52YWx1ZSxlLmxlZnQsZS5yaWdodCxlLl9jb3VudCl9ZnVuY3Rpb24gbyh0KXt0Ll9jb3VudD0xKyh0LmxlZnQ/dC5sZWZ0Ll9jb3VudDowKSsodC5yaWdodD90LnJpZ2h0Ll9jb3VudDowKX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5fY29tcGFyZT10LHRoaXMucm9vdD1lfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlKXt2YXIgcjtpZihlLmxlZnQmJihyPWModCxlLmxlZnQpKSlyZXR1cm4gcjtyZXR1cm4ocj10KGUua2V5LGUudmFsdWUpKXx8KGUucmlnaHQ/Yyh0LGUucmlnaHQpOnZvaWQgMCl9ZnVuY3Rpb24gdSh0LGUscixuKXtpZihlKHQsbi5rZXkpPD0wKXt2YXIgaTtpZihuLmxlZnQpaWYoaT11KHQsZSxyLG4ubGVmdCkpcmV0dXJuIGk7aWYoaT1yKG4ua2V5LG4udmFsdWUpKXJldHVybiBpfWlmKG4ucmlnaHQpcmV0dXJuIHUodCxlLHIsbi5yaWdodCl9ZnVuY3Rpb24gZih0LGUscixuLGkpe3ZhciBhLG89cih0LGkua2V5KSxzPXIoZSxpLmtleSk7aWYobzw9MCl7aWYoaS5sZWZ0JiYoYT1mKHQsZSxyLG4saS5sZWZ0KSkpcmV0dXJuIGE7aWYocz4wJiYoYT1uKGkua2V5LGkudmFsdWUpKSlyZXR1cm4gYX1pZihzPjAmJmkucmlnaHQpcmV0dXJuIGYodCxlLHIsbixpLnJpZ2h0KX1mdW5jdGlvbiBoKHQsZSl7dGhpcy50cmVlPXQsdGhpcy5fc3RhY2s9ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkobCwia2V5cyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKGUpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsInZhbHVlcyIse2dldDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5wdXNoKHIpfSkpLHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJvb3Q/dGhpcy5yb290Ll9jb3VudDowfX0pLGwuaW5zZXJ0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuX2NvbXBhcmUsaT10aGlzLnJvb3QsbD1bXSxjPVtdO2k7KXt2YXIgdT1yKHQsaS5rZXkpO2wucHVzaChpKSxjLnB1c2godSksaT11PD0wP2kubGVmdDppLnJpZ2h0fWwucHVzaChuZXcgbigwLHQsZSxudWxsLG51bGwsMSkpO2Zvcih2YXIgZj1sLmxlbmd0aC0yO2Y+PTA7LS1mKXtpPWxbZl07Y1tmXTw9MD9sW2ZdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsbFtmKzFdLGkucmlnaHQsaS5fY291bnQrMSk6bFtmXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLGkubGVmdCxsW2YrMV0saS5fY291bnQrMSl9Zm9yKGY9bC5sZW5ndGgtMTtmPjE7LS1mKXt2YXIgaD1sW2YtMV07aT1sW2ZdO2lmKDE9PT1oLl9jb2xvcnx8MT09PWkuX2NvbG9yKWJyZWFrO3ZhciBwPWxbZi0yXTtpZihwLmxlZnQ9PT1oKWlmKGgubGVmdD09PWkpe2lmKCEoZD1wLnJpZ2h0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAubGVmdD1oLnJpZ2h0LGguX2NvbG9yPTEsaC5yaWdodD1wLGxbZi0yXT1oLGxbZi0xXT1pLG8ocCksbyhoKSxmPj0zKShtPWxbZi0zXSkubGVmdD09PXA/bS5sZWZ0PWg6bS5yaWdodD1oO2JyZWFrfWguX2NvbG9yPTEscC5yaWdodD1hKDEsZCkscC5fY29sb3I9MCxmLT0xfWVsc2V7aWYoIShkPXAucmlnaHQpfHwwIT09ZC5fY29sb3Ipe2lmKGgucmlnaHQ9aS5sZWZ0LHAuX2NvbG9yPTAscC5sZWZ0PWkucmlnaHQsaS5fY29sb3I9MSxpLmxlZnQ9aCxpLnJpZ2h0PXAsbFtmLTJdPWksbFtmLTFdPWgsbyhwKSxvKGgpLG8oaSksZj49MykobT1sW2YtM10pLmxlZnQ9PT1wP20ubGVmdD1pOm0ucmlnaHQ9aTticmVha31oLl9jb2xvcj0xLHAucmlnaHQ9YSgxLGQpLHAuX2NvbG9yPTAsZi09MX1lbHNlIGlmKGgucmlnaHQ9PT1pKXtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXtpZihwLl9jb2xvcj0wLHAucmlnaHQ9aC5sZWZ0LGguX2NvbG9yPTEsaC5sZWZ0PXAsbFtmLTJdPWgsbFtmLTFdPWksbyhwKSxvKGgpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1oOm0ubGVmdD1oO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9ZWxzZXt2YXIgZDtpZighKGQ9cC5sZWZ0KXx8MCE9PWQuX2NvbG9yKXt2YXIgbTtpZihoLmxlZnQ9aS5yaWdodCxwLl9jb2xvcj0wLHAucmlnaHQ9aS5sZWZ0LGkuX2NvbG9yPTEsaS5yaWdodD1oLGkubGVmdD1wLGxbZi0yXT1pLGxbZi0xXT1oLG8ocCksbyhoKSxvKGkpLGY+PTMpKG09bFtmLTNdKS5yaWdodD09PXA/bS5yaWdodD1pOm0ubGVmdD1pO2JyZWFrfWguX2NvbG9yPTEscC5sZWZ0PWEoMSxkKSxwLl9jb2xvcj0wLGYtPTF9fXJldHVybiBsWzBdLl9jb2xvcj0xLG5ldyBzKHIsbFswXSl9LGwuZm9yRWFjaD1mdW5jdGlvbih0LGUscil7aWYodGhpcy5yb290KXN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIGModCx0aGlzLnJvb3QpO2Nhc2UgMjpyZXR1cm4gdShlLHRoaXMuX2NvbXBhcmUsdCx0aGlzLnJvb3QpO2Nhc2UgMzppZih0aGlzLl9jb21wYXJlKGUscik+PTApcmV0dXJuO3JldHVybiBmKGUscix0aGlzLl9jb21wYXJlLHQsdGhpcy5yb290KX19LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJiZWdpbiIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLmxlZnQ7cmV0dXJuIG5ldyBoKHRoaXMsdCl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImVuZCIse2dldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPXRoaXMucm9vdDtlOyl0LnB1c2goZSksZT1lLnJpZ2h0O3JldHVybiBuZXcgaCh0aGlzLHQpfX0pLGwuYXQ9ZnVuY3Rpb24odCl7aWYodDwwKXJldHVybiBuZXcgaCh0aGlzLFtdKTtmb3IodmFyIGU9dGhpcy5yb290LHI9W107Oyl7aWYoci5wdXNoKGUpLGUubGVmdCl7aWYodDxlLmxlZnQuX2NvdW50KXtlPWUubGVmdDtjb250aW51ZX10LT1lLmxlZnQuX2NvdW50fWlmKCF0KXJldHVybiBuZXcgaCh0aGlzLHIpO2lmKHQtPTEsIWUucmlnaHQpYnJlYWs7aWYodD49ZS5yaWdodC5fY291bnQpYnJlYWs7ZT1lLnJpZ2h0fXJldHVybiBuZXcgaCh0aGlzLFtdKX0sbC5nZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYTw9MCYmKGk9bi5sZW5ndGgpLHI9YTw9MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmd0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPDAmJihpPW4ubGVuZ3RoKSxyPWE8MD9yLmxlZnQ6ci5yaWdodH1yZXR1cm4gbi5sZW5ndGg9aSxuZXcgaCh0aGlzLG4pfSxsLmx0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9jb21wYXJlLHI9dGhpcy5yb290LG49W10saT0wO3I7KXt2YXIgYT1lKHQsci5rZXkpO24ucHVzaChyKSxhPjAmJihpPW4ubGVuZ3RoKSxyPWE8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG4ubGVuZ3RoPWksbmV3IGgodGhpcyxuKX0sbC5sZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdLGk9MDtyOyl7dmFyIGE9ZSh0LHIua2V5KTtuLnB1c2gociksYT49MCYmKGk9bi5sZW5ndGgpLHI9YTwwP3IubGVmdDpyLnJpZ2h0fXJldHVybiBuLmxlbmd0aD1pLG5ldyBoKHRoaXMsbil9LGwuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdCxuPVtdO3I7KXt2YXIgaT1lKHQsci5rZXkpO2lmKG4ucHVzaChyKSwwPT09aSlyZXR1cm4gbmV3IGgodGhpcyxuKTtyPWk8PTA/ci5sZWZ0OnIucmlnaHR9cmV0dXJuIG5ldyBoKHRoaXMsW10pfSxsLnJlbW92ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmZpbmQodCk7cmV0dXJuIGU/ZS5yZW1vdmUoKTp0aGlzfSxsLmdldD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fY29tcGFyZSxyPXRoaXMucm9vdDtyOyl7dmFyIG49ZSh0LHIua2V5KTtpZigwPT09bilyZXR1cm4gci52YWx1ZTtyPW48PTA/ci5sZWZ0OnIucmlnaHR9fTt2YXIgcD1oLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dC5rZXk9ZS5rZXksdC52YWx1ZT1lLnZhbHVlLHQubGVmdD1lLmxlZnQsdC5yaWdodD1lLnJpZ2h0LHQuX2NvbG9yPWUuX2NvbG9yLHQuX2NvdW50PWUuX2NvdW50fWZ1bmN0aW9uIG0odCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbGlkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJub2RlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YWNrLmxlbmd0aD4wP3RoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXTpudWxsfSxlbnVtZXJhYmxlOiEwfSkscC5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgaCh0aGlzLnRyZWUsdGhpcy5fc3RhY2suc2xpY2UoKSl9LHAucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMD09PXQubGVuZ3RoKXJldHVybiB0aGlzLnRyZWU7dmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPXRbdC5sZW5ndGgtMV07ZVtlLmxlbmd0aC0xXT1uZXcgbihyLl9jb2xvcixyLmtleSxyLnZhbHVlLHIubGVmdCxyLnJpZ2h0LHIuX2NvdW50KTtmb3IodmFyIGw9dC5sZW5ndGgtMjtsPj0wOy0tbCl7KHI9dFtsXSkubGVmdD09PXRbbCsxXT9lW2xdPW5ldyBuKHIuX2NvbG9yLHIua2V5LHIudmFsdWUsZVtsKzFdLHIucmlnaHQsci5fY291bnQpOmVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KX1pZigocj1lW2UubGVuZ3RoLTFdKS5sZWZ0JiZyLnJpZ2h0KXt2YXIgYz1lLmxlbmd0aDtmb3Iocj1yLmxlZnQ7ci5yaWdodDspZS5wdXNoKHIpLHI9ci5yaWdodDt2YXIgdT1lW2MtMV07ZS5wdXNoKG5ldyBuKHIuX2NvbG9yLHUua2V5LHUudmFsdWUsci5sZWZ0LHIucmlnaHQsci5fY291bnQpKSxlW2MtMV0ua2V5PXIua2V5LGVbYy0xXS52YWx1ZT1yLnZhbHVlO2ZvcihsPWUubGVuZ3RoLTI7bD49YzstLWwpcj1lW2xdLGVbbF09bmV3IG4oci5fY29sb3Isci5rZXksci52YWx1ZSxyLmxlZnQsZVtsKzFdLHIuX2NvdW50KTtlW2MtMV0ubGVmdD1lW2NdfWlmKDA9PT0ocj1lW2UubGVuZ3RoLTFdKS5fY29sb3Ipe3ZhciBmPWVbZS5sZW5ndGgtMl07Zi5sZWZ0PT09cj9mLmxlZnQ9bnVsbDpmLnJpZ2h0PT09ciYmKGYucmlnaHQ9bnVsbCksZS5wb3AoKTtmb3IobD0wO2w8ZS5sZW5ndGg7KytsKWVbbF0uX2NvdW50LS07cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX1pZihyLmxlZnR8fHIucmlnaHQpe3IubGVmdD9kKHIsci5sZWZ0KTpyLnJpZ2h0JiZkKHIsci5yaWdodCksci5fY29sb3I9MTtmb3IobD0wO2w8ZS5sZW5ndGgtMTsrK2wpZVtsXS5fY291bnQtLTtyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLGVbMF0pfWlmKDE9PT1lLmxlbmd0aClyZXR1cm4gbmV3IHModGhpcy50cmVlLl9jb21wYXJlLG51bGwpO2ZvcihsPTA7bDxlLmxlbmd0aDsrK2wpZVtsXS5fY291bnQtLTt2YXIgaD1lW2UubGVuZ3RoLTJdO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscixuLHMsbD10Lmxlbmd0aC0xO2w+PTA7LS1sKXtpZihlPXRbbF0sMD09PWwpcmV0dXJuIHZvaWQoZS5fY29sb3I9MSk7aWYoKHI9dFtsLTFdKS5sZWZ0PT09ZSl7aWYoKG49ci5yaWdodCkucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLnJpZ2h0PWkobikpLnJpZ2h0PWkobi5yaWdodCksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5yaWdodD1zLG4uX2NvbG9yPXIuX2NvbG9yLGUuX2NvbG9yPTEsci5fY29sb3I9MSxzLl9jb2xvcj0xLG8ociksbyhuKSxsPjEpKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ubGVmdCYmMD09PW4ubGVmdC5fY29sb3Ipe2lmKHM9KG49ci5yaWdodD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLnJpZ2h0PXMubGVmdCxuLmxlZnQ9cy5yaWdodCxzLmxlZnQ9cixzLnJpZ2h0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkubGVmdD09PXI/Yy5sZWZ0PXM6Yy5yaWdodD1zO3JldHVybiB2b2lkKHRbbC0xXT1zKX1pZigxPT09bi5fY29sb3Ipe2lmKDA9PT1yLl9jb2xvcilyZXR1cm4gci5fY29sb3I9MSx2b2lkKHIucmlnaHQ9YSgwLG4pKTtyLnJpZ2h0PWEoMCxuKTtjb250aW51ZX1uPWkobiksci5yaWdodD1uLmxlZnQsbi5sZWZ0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5sZWZ0PT09cj9jLmxlZnQ9bjpjLnJpZ2h0PW4pLHRbbC0xXT1uLHRbbF09cixsKzE8dC5sZW5ndGg/dFtsKzFdPWU6dC5wdXNoKGUpLGwrPTJ9ZWxzZXtpZigobj1yLmxlZnQpLmxlZnQmJjA9PT1uLmxlZnQuX2NvbG9yKXtpZihzPShuPXIubGVmdD1pKG4pKS5sZWZ0PWkobi5sZWZ0KSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5sZWZ0PXMsbi5fY29sb3I9ci5fY29sb3IsZS5fY29sb3I9MSxyLl9jb2xvcj0xLHMuX2NvbG9yPTEsbyhyKSxvKG4pLGw+MSkoYz10W2wtMl0pLnJpZ2h0PT09cj9jLnJpZ2h0PW46Yy5sZWZ0PW47cmV0dXJuIHZvaWQodFtsLTFdPW4pfWlmKG4ucmlnaHQmJjA9PT1uLnJpZ2h0Ll9jb2xvcil7aWYocz0obj1yLmxlZnQ9aShuKSkucmlnaHQ9aShuLnJpZ2h0KSxyLmxlZnQ9cy5yaWdodCxuLnJpZ2h0PXMubGVmdCxzLnJpZ2h0PXIscy5sZWZ0PW4scy5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MSxuLl9jb2xvcj0xLGUuX2NvbG9yPTEsbyhyKSxvKG4pLG8ocyksbD4xKShjPXRbbC0yXSkucmlnaHQ9PT1yP2MucmlnaHQ9czpjLmxlZnQ9cztyZXR1cm4gdm9pZCh0W2wtMV09cyl9aWYoMT09PW4uX2NvbG9yKXtpZigwPT09ci5fY29sb3IpcmV0dXJuIHIuX2NvbG9yPTEsdm9pZChyLmxlZnQ9YSgwLG4pKTtyLmxlZnQ9YSgwLG4pO2NvbnRpbnVlfXZhciBjO249aShuKSxyLmxlZnQ9bi5yaWdodCxuLnJpZ2h0PXIsbi5fY29sb3I9ci5fY29sb3Isci5fY29sb3I9MCxvKHIpLG8obiksbD4xJiYoKGM9dFtsLTJdKS5yaWdodD09PXI/Yy5yaWdodD1uOmMubGVmdD1uKSx0W2wtMV09bix0W2xdPXIsbCsxPHQubGVuZ3RoP3RbbCsxXT1lOnQucHVzaChlKSxsKz0yfX19KGUpLGgubGVmdD09PXI/aC5sZWZ0PW51bGw6aC5yaWdodD1udWxsLG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxlWzBdKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImtleSIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3N0YWNrLmxlbmd0aD4wKXJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGgtMV0ua2V5fSxlbnVtZXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsInZhbHVlIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc3RhY2subGVuZ3RoPjApcmV0dXJuIHRoaXMuX3N0YWNrW3RoaXMuX3N0YWNrLmxlbmd0aC0xXS52YWx1ZX0sZW51bWVyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLCJpbmRleCIse2dldDpmdW5jdGlvbigpe3ZhciB0PTAsZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpe3ZhciByPXRoaXMudHJlZS5yb290O3JldHVybiByP3IuX2NvdW50OjB9ZVtlLmxlbmd0aC0xXS5sZWZ0JiYodD1lW2UubGVuZ3RoLTFdLmxlZnQuX2NvdW50KTtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPj0wOy0tbillW24rMV09PT1lW25dLnJpZ2h0JiYoKyt0LGVbbl0ubGVmdCYmKHQrPWVbbl0ubGVmdC5fY291bnQpKTtyZXR1cm4gdH0sZW51bWVyYWJsZTohMH0pLHAubmV4dD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N0YWNrO2lmKDAhPT10Lmxlbmd0aCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtpZihlLnJpZ2h0KWZvcihlPWUucmlnaHQ7ZTspdC5wdXNoKGUpLGU9ZS5sZWZ0O2Vsc2UgZm9yKHQucG9wKCk7dC5sZW5ndGg+MCYmdFt0Lmxlbmd0aC0xXS5yaWdodD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc05leHQiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5yaWdodClyZXR1cm4hMDtmb3IodmFyIGU9dC5sZW5ndGgtMTtlPjA7LS1lKWlmKHRbZS0xXS5sZWZ0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KSxwLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zdGFjaztpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJDYW4ndCB1cGRhdGUgZW1wdHkgbm9kZSEiKTt2YXIgcj1uZXcgQXJyYXkoZS5sZW5ndGgpLGk9ZVtlLmxlbmd0aC0xXTtyW3IubGVuZ3RoLTFdPW5ldyBuKGkuX2NvbG9yLGkua2V5LHQsaS5sZWZ0LGkucmlnaHQsaS5fY291bnQpO2Zvcih2YXIgYT1lLmxlbmd0aC0yO2E+PTA7LS1hKShpPWVbYV0pLmxlZnQ9PT1lW2ErMV0/clthXT1uZXcgbihpLl9jb2xvcixpLmtleSxpLnZhbHVlLHJbYSsxXSxpLnJpZ2h0LGkuX2NvdW50KTpyW2FdPW5ldyBuKGkuX2NvbG9yLGkua2V5LGkudmFsdWUsaS5sZWZ0LHJbYSsxXSxpLl9jb3VudCk7cmV0dXJuIG5ldyBzKHRoaXMudHJlZS5fY29tcGFyZSxyWzBdKX0scC5wcmV2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3RhY2s7aWYoMCE9PXQubGVuZ3RoKXt2YXIgZT10W3QubGVuZ3RoLTFdO2lmKGUubGVmdClmb3IoZT1lLmxlZnQ7ZTspdC5wdXNoKGUpLGU9ZS5yaWdodDtlbHNlIGZvcih0LnBvcCgpO3QubGVuZ3RoPjAmJnRbdC5sZW5ndGgtMV0ubGVmdD09PWU7KWU9dFt0Lmxlbmd0aC0xXSx0LnBvcCgpfX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHAsImhhc1ByZXYiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdGFjaztpZigwPT09dC5sZW5ndGgpcmV0dXJuITE7aWYodFt0Lmxlbmd0aC0xXS5sZWZ0KXJldHVybiEwO2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+MDstLWUpaWYodFtlLTFdLnJpZ2h0PT09dFtlXSlyZXR1cm4hMDtyZXR1cm4hMX19KX0se31dLDI0ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmciKTtpZihlPWV8fHt9LCJ1bmRlZmluZWQiPT10eXBlb2YgZG9jdW1lbnQmJiFlLmNhbnZhcylyZXR1cm4gbnVsbDt2YXIgcj1lLmNhbnZhc3x8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Im51bWJlciI9PXR5cGVvZiBlLndpZHRoJiYoci53aWR0aD1lLndpZHRoKTsibnVtYmVyIj09dHlwZW9mIGUuaGVpZ2h0JiYoci5oZWlnaHQ9ZS5oZWlnaHQpO3ZhciBuLGk9ZTt0cnl7dmFyIGE9W3RdOzA9PT10LmluZGV4T2YoIndlYmdsIikmJmEucHVzaCgiZXhwZXJpbWVudGFsLSIrdCk7Zm9yKHZhciBvPTA7bzxhLmxlbmd0aDtvKyspaWYobj1yLmdldENvbnRleHQoYVtvXSxpKSlyZXR1cm4gbn1jYXRjaCh0KXtuPW51bGx9cmV0dXJuIG58fG51bGx9fSx7fV0sMjQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB1KHQpO3JldHVybiByLnVwZGF0ZShlKSxyfTt2YXIgbj10KCIuL2xpYi90ZXh0LmpzIiksaT10KCIuL2xpYi9saW5lcy5qcyIpLGE9dCgiLi9saWIvYmFja2dyb3VuZC5qcyIpLG89dCgiLi9saWIvY3ViZS5qcyIpLHM9dCgiLi9saWIvdGlja3MuanMiKSxsPW5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdKTtmdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gdSh0KXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMTAsLTEwLC0xMF0sWzEwLDEwLDEwXV0sdGhpcy50aWNrcz1bW10sW10sW11dLHRoaXMuYXV0b1RpY2tzPSEwLHRoaXMudGlja1NwYWNpbmc9WzEsMSwxXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLnRpY2tGb250PVsic2Fucy1zZXJpZiIsInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGhpcy50aWNrU2l6ZT1bMTIsMTIsMTJdLHRoaXMudGlja0FuZ2xlPVswLDAsMF0sdGhpcy50aWNrQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTAsMTAsMTBdLHRoaXMubGFzdEN1YmVQcm9wcz17Y3ViZUVkZ2VzOlswLDAsMF0sYXhpczpbMCwwLDBdfSx0aGlzLmxhYmVscz1bIngiLCJ5IiwieiJdLHRoaXMubGFiZWxFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxhYmVsRm9udD0ic2Fucy1zZXJpZiIsdGhpcy5sYWJlbFNpemU9WzIwLDIwLDIwXSx0aGlzLmxhYmVsQW5nbGU9WzAsMCwwXSx0aGlzLmxhYmVsQWxpZ249WyJhdXRvIiwiYXV0byIsImF1dG8iXSx0aGlzLmxhYmVsQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxMCwxMCwxMF0sdGhpcy5saW5lRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5saW5lTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXSx0aGlzLmxpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGluZVRpY2tFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVUaWNrTWlycm9yPVshMSwhMSwhMV0sdGhpcy5saW5lVGlja0xlbmd0aD1bMCwwLDBdLHRoaXMubGluZVRpY2tXaWR0aD1bMSwxLDFdLHRoaXMubGluZVRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZEVuYWJsZT1bITAsITAsITBdLHRoaXMuZ3JpZFdpZHRoPVsxLDEsMV0sdGhpcy5ncmlkQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9FbmFibGU9WyEwLCEwLCEwXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnplcm9MaW5lV2lkdGg9WzIsMiwyXSx0aGlzLmJhY2tncm91bmRFbmFibGU9WyExLCExLCExXSx0aGlzLmJhY2tncm91bmRDb2xvcj1bWy44LC44LC44LC41XSxbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV1dLHRoaXMuX2ZpcnN0SW5pdD0hMCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fbGluZXM9bnVsbCx0aGlzLl9iYWNrZ3JvdW5kPWEodCl9dmFyIGY9dS5wcm90b3R5cGU7ZnVuY3Rpb24gaCgpe3RoaXMucHJpbWFsT2Zmc2V0PVswLDAsMF0sdGhpcy5wcmltYWxNaW5vcj1bMCwwLDBdLHRoaXMubWlycm9yT2Zmc2V0PVswLDAsMF0sdGhpcy5taXJyb3JNaW5vcj1bMCwwLDBdfWYudXBkYXRlPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pe2lmKG4gaW4gdCl7dmFyIGksYT10W25dLG89dGhpc1tuXTsoZT9BcnJheS5pc0FycmF5KGEpJiZBcnJheS5pc0FycmF5KGFbMF0pOkFycmF5LmlzQXJyYXkoYSkpP3RoaXNbbl09aT1bcihhWzBdKSxyKGFbMV0pLHIoYVsyXSldOnRoaXNbbl09aT1bcihhKSxyKGEpLHIoYSldO2Zvcih2YXIgcz0wO3M8MzsrK3MpaWYoaVtzXSE9PW9bc10pcmV0dXJuITB9cmV0dXJuITF9dD10fHx7fTt2YXIgcixhPWUuYmluZCh0aGlzLCExLE51bWJlciksbz1lLmJpbmQodGhpcywhMSxCb29sZWFuKSxsPWUuYmluZCh0aGlzLCExLFN0cmluZyksYz1lLmJpbmQodGhpcywhMCwoZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMz09PXQubGVuZ3RoKXJldHVyblsrdFswXSwrdFsxXSwrdFsyXSwxXTtpZig0PT09dC5sZW5ndGgpcmV0dXJuWyt0WzBdLCt0WzFdLCt0WzJdLCt0WzNdXX1yZXR1cm5bMCwwLDAsMV19KSksdT0hMSxmPSExO2lmKCJib3VuZHMiaW4gdClmb3IodmFyIGg9dC5ib3VuZHMscD0wO3A8MjsrK3ApZm9yKHZhciBkPTA7ZDwzOysrZCloW3BdW2RdIT09dGhpcy5ib3VuZHNbcF1bZF0mJihmPSEwKSx0aGlzLmJvdW5kc1twXVtkXT1oW3BdW2RdO2lmKCJ0aWNrcyJpbiB0KXtyPXQudGlja3MsdT0hMCx0aGlzLmF1dG9UaWNrcz0hMTtmb3IocD0wO3A8MzsrK3ApdGhpcy50aWNrU3BhY2luZ1twXT0wfWVsc2UgYSgidGlja1NwYWNpbmciKSYmKHRoaXMuYXV0b1RpY2tzPSEwLGY9ITApO2lmKHRoaXMuX2ZpcnN0SW5pdCYmKCJ0aWNrcyJpbiB0fHwidGlja1NwYWNpbmciaW4gdHx8KHRoaXMuYXV0b1RpY2tzPSEwKSxmPSEwLHU9ITAsdGhpcy5fZmlyc3RJbml0PSExKSxmJiZ0aGlzLmF1dG9UaWNrcyYmKHI9cy5jcmVhdGUodGhpcy5ib3VuZHMsdGhpcy50aWNrU3BhY2luZyksdT0hMCksdSl7Zm9yKHA9MDtwPDM7KytwKXJbcF0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKTtzLmVxdWFsKHIsdGhpcy50aWNrcyk/dT0hMTp0aGlzLnRpY2tzPXJ9bygidGlja0VuYWJsZSIpLGwoInRpY2tGb250IikmJih1PSEwKSxhKCJ0aWNrU2l6ZSIpLGEoInRpY2tBbmdsZSIpLGEoInRpY2tQYWQiKSxjKCJ0aWNrQ29sb3IiKTt2YXIgbT1sKCJsYWJlbHMiKTtsKCJsYWJlbEZvbnQiKSYmKG09ITApLG8oImxhYmVsRW5hYmxlIiksYSgibGFiZWxTaXplIiksYSgibGFiZWxQYWQiKSxjKCJsYWJlbENvbG9yIiksbygibGluZUVuYWJsZSIpLG8oImxpbmVNaXJyb3IiKSxhKCJsaW5lV2lkdGgiKSxjKCJsaW5lQ29sb3IiKSxvKCJsaW5lVGlja0VuYWJsZSIpLG8oImxpbmVUaWNrTWlycm9yIiksYSgibGluZVRpY2tMZW5ndGgiKSxhKCJsaW5lVGlja1dpZHRoIiksYygibGluZVRpY2tDb2xvciIpLG8oImdyaWRFbmFibGUiKSxhKCJncmlkV2lkdGgiKSxjKCJncmlkQ29sb3IiKSxvKCJ6ZXJvRW5hYmxlIiksYygiemVyb0xpbmVDb2xvciIpLGEoInplcm9MaW5lV2lkdGgiKSxvKCJiYWNrZ3JvdW5kRW5hYmxlIiksYygiYmFja2dyb3VuZENvbG9yIiksdGhpcy5fdGV4dD90aGlzLl90ZXh0JiYobXx8dSkmJnRoaXMuX3RleHQudXBkYXRlKHRoaXMuYm91bmRzLHRoaXMubGFiZWxzLHRoaXMubGFiZWxGb250LHRoaXMudGlja3MsdGhpcy50aWNrRm9udCk6dGhpcy5fdGV4dD1uKHRoaXMuZ2wsdGhpcy5ib3VuZHMsdGhpcy5sYWJlbHMsdGhpcy5sYWJlbEZvbnQsdGhpcy50aWNrcyx0aGlzLnRpY2tGb250KSx0aGlzLl9saW5lcyYmdSYmKHRoaXMuX2xpbmVzLmRpc3Bvc2UoKSx0aGlzLl9saW5lcz1udWxsKSx0aGlzLl9saW5lc3x8KHRoaXMuX2xpbmVzPWkodGhpcy5nbCx0aGlzLmJvdW5kcyx0aGlzLnRpY2tzKSl9O3ZhciBwPVtuZXcgaCxuZXcgaCxuZXcgaF07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT10LnByaW1hbE9mZnNldCxvPXQucHJpbWFsTWlub3Iscz10Lm1pcnJvck9mZnNldCxsPXQubWlycm9yTWlub3IsYz1uW2VdLHU9MDt1PDM7Kyt1KWlmKGUhPT11KXt2YXIgZj1hLGg9cyxwPW8sZD1sO2MmMTw8dSYmKGY9cyxoPWEscD1sLGQ9byksZlt1XT1yWzBdW3VdLGhbdV09clsxXVt1XSxpW3VdPjA/KHBbdV09LTEsZFt1XT0wKToocFt1XT0wLGRbdV09MSl9fXZhciBtPVswLDAsMF0sZz17bW9kZWw6bCx2aWV3OmwscHJvamVjdGlvbjpsLF9vcnRobzohMX07Zi5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiEwfSxmLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZi5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fTt2YXIgdj1bMCwwLDBdLHk9WzAsMCwwXSx4PVswLDAsMF07Zi5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8Zztmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGwsbj10LnZpZXd8fGwsaT10LnByb2plY3Rpb258fGwsYT10aGlzLmJvdW5kcyxzPXQuX29ydGhvfHwhMSx1PW8ocixuLGksYSxzKSxmPXUuY3ViZUVkZ2VzLGg9dS5heGlzLGI9blsxMl0sXz1uWzEzXSx3PW5bMTRdLFQ9blsxNV0saz0ocz8yOjEpKnRoaXMucGl4ZWxSYXRpbyooaVszXSpiK2lbN10qXytpWzExXSp3K2lbMTVdKlQpL2UuZHJhd2luZ0J1ZmZlckhlaWdodCxBPTA7QTwzOysrQSl0aGlzLmxhc3RDdWJlUHJvcHMuY3ViZUVkZ2VzW0FdPWZbQV0sdGhpcy5sYXN0Q3ViZVByb3BzLmF4aXNbQV09aFtBXTt2YXIgTT1wO2ZvcihBPTA7QTwzOysrQSlkKHBbQV0sQSx0aGlzLmJvdW5kcyxmLGgpO2U9dGhpcy5nbDt2YXIgUyxFPW07Zm9yKEE9MDtBPDM7KytBKXRoaXMuYmFja2dyb3VuZEVuYWJsZVtBXT9FW0FdPWhbQV06RVtBXT0wO3RoaXMuX2JhY2tncm91bmQuZHJhdyhyLG4saSxhLEUsdGhpcy5iYWNrZ3JvdW5kQ29sb3IpLHRoaXMuX2xpbmVzLmJpbmQocixuLGksdGhpcyk7Zm9yKEE9MDtBPDM7KytBKXt2YXIgTD1bMCwwLDBdO2hbQV0+MD9MW0FdPWFbMV1bQV06TFtBXT1hWzBdW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0Mpe3ZhciBQPShBKzErQyklMyxJPShBKzErKDFeQykpJTM7dGhpcy5ncmlkRW5hYmxlW1BdJiZ0aGlzLl9saW5lcy5kcmF3R3JpZChQLEksdGhpcy5ib3VuZHMsTCx0aGlzLmdyaWRDb2xvcltQXSx0aGlzLmdyaWRXaWR0aFtQXSp0aGlzLnBpeGVsUmF0aW8pfWZvcihDPTA7QzwyOysrQyl7UD0oQSsxK0MpJTMsST0oQSsxKygxXkMpKSUzO3RoaXMuemVyb0VuYWJsZVtJXSYmTWF0aC5taW4oYVswXVtJXSxhWzFdW0ldKTw9MCYmTWF0aC5tYXgoYVswXVtJXSxhWzFdW0ldKT49MCYmdGhpcy5fbGluZXMuZHJhd1plcm8oUCxJLHRoaXMuYm91bmRzLEwsdGhpcy56ZXJvTGluZUNvbG9yW0ldLHRoaXMuemVyb0xpbmVXaWR0aFtJXSp0aGlzLnBpeGVsUmF0aW8pfX1mb3IoQT0wO0E8MzsrK0Epe3RoaXMubGluZUVuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNMaW5lKEEsdGhpcy5ib3VuZHMsTVtBXS5wcmltYWxPZmZzZXQsdGhpcy5saW5lQ29sb3JbQV0sdGhpcy5saW5lV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKSx0aGlzLmxpbmVNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzTGluZShBLHRoaXMuYm91bmRzLE1bQV0ubWlycm9yT2Zmc2V0LHRoaXMubGluZUNvbG9yW0FdLHRoaXMubGluZVdpZHRoW0FdKnRoaXMucGl4ZWxSYXRpbyk7dmFyIE89Yyh2LE1bQV0ucHJpbWFsTWlub3IpLHo9Yyh5LE1bQV0ubWlycm9yTWlub3IpLEQ9dGhpcy5saW5lVGlja0xlbmd0aDtmb3IoQz0wO0M8MzsrK0Mpe3ZhciBSPWsvcls1KkNdO09bQ10qPURbQ10qUix6W0NdKj1EW0NdKlJ9dGhpcy5saW5lVGlja0VuYWJsZVtBXSYmdGhpcy5fbGluZXMuZHJhd0F4aXNUaWNrcyhBLE1bQV0ucHJpbWFsT2Zmc2V0LE8sdGhpcy5saW5lVGlja0NvbG9yW0FdLHRoaXMubGluZVRpY2tXaWR0aFtBXSp0aGlzLnBpeGVsUmF0aW8pLHRoaXMubGluZVRpY2tNaXJyb3JbQV0mJnRoaXMuX2xpbmVzLmRyYXdBeGlzVGlja3MoQSxNW0FdLm1pcnJvck9mZnNldCx6LHRoaXMubGluZVRpY2tDb2xvcltBXSx0aGlzLmxpbmVUaWNrV2lkdGhbQV0qdGhpcy5waXhlbFJhdGlvKX10aGlzLl9saW5lcy51bmJpbmQoKSx0aGlzLl90ZXh0LmJpbmQocixuLGksdGhpcy5waXhlbFJhdGlvKTt2YXIgRixCO2Z1bmN0aW9uIE4odCl7KEI9WzAsMCwwXSlbdF09MX1mdW5jdGlvbiBqKHQsZSxyKXt2YXIgbj0odCsxKSUzLGk9KHQrMiklMyxhPWVbbl0sbz1lW2ldLHM9cltuXSxsPXJbaV07YT4wJiZsPjB8fGE+MCYmbDwwfHxhPDAmJmw+MHx8YTwwJiZsPDA/TihuKToobz4wJiZzPjB8fG8+MCYmczwwfHxvPDAmJnM+MHx8bzwwJiZzPDApJiZOKGkpfWZvcihBPTA7QTwzOysrQSl7dmFyIFU9TVtBXS5wcmltYWxNaW5vcixWPU1bQV0ubWlycm9yTWlub3IsSD1jKHgsTVtBXS5wcmltYWxPZmZzZXQpO2ZvcihDPTA7QzwzOysrQyl0aGlzLmxpbmVUaWNrRW5hYmxlW0FdJiYoSFtDXSs9aypVW0NdKk1hdGgubWF4KHRoaXMubGluZVRpY2tMZW5ndGhbQ10sMCkvcls1KkNdKTt2YXIgcT1bMCwwLDBdO2lmKHFbQV09MSx0aGlzLnRpY2tFbmFibGVbQV0pey0zNjAwPT09dGhpcy50aWNrQW5nbGVbQV0/KHRoaXMudGlja0FuZ2xlW0FdPTAsdGhpcy50aWNrQWxpZ25bQV09ImF1dG8iKTp0aGlzLnRpY2tBbGlnbltBXT0tMSxGPTEsImF1dG8iPT09KFM9W3RoaXMudGlja0FsaWduW0FdLC41LEZdKVswXT9TWzBdPTA6U1swXT1wYXJzZUludCgiIitTWzBdKSxCPVswLDAsMF0saihBLFUsVik7Zm9yKEM9MDtDPDM7KytDKUhbQ10rPWsqVVtDXSp0aGlzLnRpY2tQYWRbQ10vcls1KkNdO3RoaXMuX3RleHQuZHJhd1RpY2tzKEEsdGhpcy50aWNrU2l6ZVtBXSx0aGlzLnRpY2tBbmdsZVtBXSxILHRoaXMudGlja0NvbG9yW0FdLHEsQixTKX1pZih0aGlzLmxhYmVsRW5hYmxlW0FdKXtGPTAsQj1bMCwwLDBdLHRoaXMubGFiZWxzW0FdLmxlbmd0aD40JiYoTihBKSxGPTEpLCJhdXRvIj09PShTPVt0aGlzLmxhYmVsQWxpZ25bQV0sLjUsRl0pWzBdP1NbMF09MDpTWzBdPXBhcnNlSW50KCIiK1NbMF0pO2ZvcihDPTA7QzwzOysrQylIW0NdKz1rKlVbQ10qdGhpcy5sYWJlbFBhZFtDXS9yWzUqQ107SFtBXSs9LjUqKGFbMF1bQV0rYVsxXVtBXSksdGhpcy5fdGV4dC5kcmF3TGFiZWwoQSx0aGlzLmxhYmVsU2l6ZVtBXSx0aGlzLmxhYmVsQW5nbGVbQV0sSCx0aGlzLmxhYmVsQ29sb3JbQV0sWzAsMCwwXSxCLFMpfX10aGlzLl90ZXh0LnVuYmluZCgpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLl90ZXh0LmRpc3Bvc2UoKSx0aGlzLl9saW5lcy5kaXNwb3NlKCksdGhpcy5fYmFja2dyb3VuZC5kaXNwb3NlKCksdGhpcy5fbGluZXM9bnVsbCx0aGlzLl90ZXh0PW51bGwsdGhpcy5fYmFja2dyb3VuZD1udWxsLHRoaXMuZ2w9bnVsbH19LHsiLi9saWIvYmFja2dyb3VuZC5qcyI6MjUwLCIuL2xpYi9jdWJlLmpzIjoyNTEsIi4vbGliL2xpbmVzLmpzIjoyNTIsIi4vbGliL3RleHQuanMiOjI1NCwiLi9saWIvdGlja3MuanMiOjI1NX1dLDI1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9W10scz0wLGw9MDtsPDM7KytsKWZvcih2YXIgYz0obCsxKSUzLHU9KGwrMiklMyxmPVswLDAsMF0saD1bMCwwLDBdLHA9LTE7cDw9MTtwKz0yKXtyLnB1c2gocyxzKzIscysxLHMrMSxzKzIscyszKSxmW2xdPXAsaFtsXT1wO2Zvcih2YXIgZD0tMTtkPD0xO2QrPTIpe2ZbY109ZDtmb3IodmFyIG09LTE7bTw9MTttKz0yKWZbdV09bSxlLnB1c2goZlswXSxmWzFdLGZbMl0saFswXSxoWzFdLGhbMl0pLHMrPTF9dmFyIGc9YztjPXUsdT1nfXZhciB2PW4odCxuZXcgRmxvYXQzMkFycmF5KGUpKSx5PW4odCxuZXcgVWludDE2QXJyYXkociksdC5FTEVNRU5UX0FSUkFZX0JVRkZFUikseD1pKHQsW3tidWZmZXI6dix0eXBlOnQuRkxPQVQsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyNH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyNH1dLHkpLGI9YSh0KTtyZXR1cm4gYi5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsYi5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0xLG5ldyBvKHQsdix4LGIpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgiLi9zaGFkZXJzIikuYmc7ZnVuY3Rpb24gbyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW59dmFyIHM9by5wcm90b3R5cGU7cy5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89ITEscz0wO3M8MzsrK3Mpbz1vfHxpW3NdO2lmKG8pe3ZhciBsPXRoaXMuZ2w7bC5lbmFibGUobC5QT0xZR09OX09GRlNFVF9GSUxMKSxsLnBvbHlnb25PZmZzZXQoMSwyKSx0aGlzLnNoYWRlci5iaW5kKCksdGhpcy5zaGFkZXIudW5pZm9ybXM9e21vZGVsOnQsdmlldzplLHByb2plY3Rpb246cixib3VuZHM6bixlbmFibGU6aSxjb2xvcnM6YX0sdGhpcy52YW8uYmluZCgpLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsMzYpLHRoaXMudmFvLnVuYmluZCgpLGwuZGlzYWJsZShsLlBPTFlHT05fT0ZGU0VUX0ZJTEwpfX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycyI6MjUzLCJnbC1idWZmZXIiOjI1NywiZ2wtdmFvIjozNDN9XSwyNTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscCl7aShzLGUsdCksaShzLHIscyk7Zm9yKHZhciB5PTAseD0wO3g8MjsrK3gpe3VbMl09YVt4XVsyXTtmb3IodmFyIGI9MDtiPDI7KytiKXt1WzFdPWFbYl1bMV07Zm9yKHZhciBfPTA7XzwyOysrXyl1WzBdPWFbX11bMF0saChsW3ldLHUscykseSs9MX19dmFyIHc9LTE7Zm9yKHg9MDt4PDg7Kyt4KXtmb3IodmFyIFQ9bFt4XVszXSxrPTA7azwzOysrayljW3hdW2tdPWxbeF1ba10vVDtwJiYoY1t4XVsyXSo9LTEpLFQ8MCYmKHc8MHx8Y1t4XVsyXTxjW3ddWzJdKSYmKHc9eCl9aWYodzwwKXt3PTA7Zm9yKHZhciBBPTA7QTwzOysrQSl7Zm9yKHZhciBNPShBKzIpJTMsUz0oQSsxKSUzLEU9LTEsTD0tMSxDPTA7QzwyOysrQyl7dmFyIFA9KE89Qzw8QSkrKEM8PE0pKygxLUM8PFMpLEk9TysoMS1DPDxNKSsoQzw8Uyk7byhjW09dLGNbUF0sY1tJXSxmKTwwfHwoQz9FPTE6TD0xKX1pZihFPDB8fEw8MClMPkUmJih3fD0xPDxBKTtlbHNle2ZvcihDPTA7QzwyOysrQyl7UD0oTz1DPDxBKSsoQzw8TSkrKDEtQzw8UyksST1PKygxLUM8PE0pKyhDPDxTKTt2YXIgTyx6PWQoW2xbT10sbFtQXSxsW0ldLGxbTysoMTw8TSkrKDE8PFMpXV0pO0M/RT16Okw9en1MPkUmJih3fD0xPDxBKX19fXZhciBEPTdedyxSPS0xO2Zvcih4PTA7eDw4OysreCl4IT09dyYmeCE9PUQmJihSPDB8fGNbUl1bMV0+Y1t4XVsxXSkmJihSPXgpO3ZhciBGPS0xO2Zvcih4PTA7eDwzOysreCl7aWYoKE49Ul4xPDx4KSE9PXcmJk4hPT1EKUY8MCYmKEY9TiksKFM9Y1tOXSlbMF08Y1tGXVswXSYmKEY9Til9dmFyIEI9LTE7Zm9yKHg9MDt4PDM7Kyt4KXt2YXIgTjtpZigoTj1SXjE8PHgpIT09dyYmTiE9PUQmJk4hPT1GKUI8MCYmKEI9TiksKFM9Y1tOXSlbMF0+Y1tCXVswXSYmKEI9Til9dmFyIGo9bTtqWzBdPWpbMV09alsyXT0wLGpbbi5sb2cyKEZeUildPVImRixqW24ubG9nMihSXkIpXT1SJkI7dmFyIFU9N15CO1U9PT13fHxVPT09RD8oVT03XkYsaltuLmxvZzIoQl5VKV09VSZCKTpqW24ubG9nMihGXlUpXT1VJkY7dmFyIFY9ZyxIPXc7Zm9yKEE9MDtBPDM7KytBKVZbQV09SCYxPDxBPy0xOjE7cmV0dXJuIHZ9O3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJnbC1tYXQ0L211bHRpcGx5IiksYT10KCJzcGxpdC1wb2x5Z29uIiksbz10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxzPW5ldyBBcnJheSgxNiksbD1uZXcgQXJyYXkoOCksYz1uZXcgQXJyYXkoOCksdT1uZXcgQXJyYXkoMyksZj1bMCwwLDBdO2Z1bmN0aW9uIGgodCxlLHIpe2Zvcih2YXIgbj0wO248NDsrK24pe3Rbbl09clsxMituXTtmb3IodmFyIGk9MDtpPDM7KytpKXRbbl0rPWVbaV0qcls0Kmkrbl19fSFmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ODsrK3QpbFt0XT1bMSwxLDEsMV0sY1t0XT1bMSwxLDFdfSgpO3ZhciBwPVtbMCwwLDEsMCwwXSxbMCwwLC0xLDEsMF0sWzAsLTEsMCwxLDBdLFswLDEsMCwxLDBdLFstMSwwLDAsMSwwXSxbMSwwLDAsMSwwXV07ZnVuY3Rpb24gZCh0KXtmb3IodmFyIGU9MDtlPHAubGVuZ3RoOysrZSlpZigodD1hLnBvc2l0aXZlKHQscFtlXSkpLmxlbmd0aDwzKXJldHVybiAwO3ZhciByPXRbMF0sbj1yWzBdL3JbM10saT1yWzFdL3JbM10sbz0wO2ZvcihlPTE7ZSsxPHQubGVuZ3RoOysrZSl7dmFyIHM9dFtlXSxsPXRbZSsxXSxjPXNbMF0vc1szXS1uLHU9c1sxXS9zWzNdLWksZj1sWzBdL2xbM10tbixoPWxbMV0vbFszXS1pO28rPU1hdGguYWJzKGMqaC11KmYpfXJldHVybiBvfXZhciBtPVsxLDEsMV0sZz1bMCwwLDBdLHY9e2N1YmVFZGdlczptLGF4aXM6Z319LHsiYml0LXR3aWRkbGUiOjEwMSwiZ2wtbWF0NC9tdWx0aXBseSI6Mjg5LCJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNCwic3BsaXQtcG9seWdvbiI6NTQxfV0sMjUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89W10scz1bMCwwLDBdLGw9WzAsMCwwXSxjPVswLDAsMF0sdT1bMCwwLDBdO28ucHVzaCgwLDAsMSwwLDEsMSwwLDAsLTEsMCwwLC0xLDAsMSwxLDAsMSwtMSk7Zm9yKHZhciBmPTA7ZjwzOysrZil7Zm9yKHZhciBoPW8ubGVuZ3RoLzN8MCxkPTA7ZDxyW2ZdLmxlbmd0aDsrK2Qpe3ZhciBtPStyW2ZdW2RdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX12YXIgZz1vLmxlbmd0aC8zfDA7c1tmXT1oLGxbZl09Zy1oO2g9by5sZW5ndGgvM3wwO2Zvcih2YXIgdj0wO3Y8cltmXS5sZW5ndGg7Kyt2KXttPStyW2ZdW3ZdLng7by5wdXNoKG0sMCwxLG0sMSwxLG0sMCwtMSxtLDAsLTEsbSwxLDEsbSwxLC0xKX1nPW8ubGVuZ3RoLzN8MDtjW2ZdPWgsdVtmXT1nLWh9dmFyIHk9bih0LG5ldyBGbG9hdDMyQXJyYXkobykpLHg9aSh0LFt7YnVmZmVyOnksdHlwZTp0LkZMT0FULHNpemU6MyxzdHJpZGU6MCxvZmZzZXQ6MH1dKSxiPWEodCk7cmV0dXJuIGIuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLG5ldyBwKHQseSx4LGIsbCxzLHUsYyl9O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCIuL3NoYWRlcnMiKS5saW5lLG89WzAsMCwwXSxzPVswLDAsMF0sbD1bMCwwLDBdLGM9WzAsMCwwXSx1PVsxLDFdO2Z1bmN0aW9uIGYodCl7cmV0dXJuIHRbMF09dFsxXT10WzJdPTAsdH1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9ZnVuY3Rpb24gcCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLnZlcnRCdWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy50aWNrQ291bnQ9aSx0aGlzLnRpY2tPZmZzZXQ9YSx0aGlzLmdyaWRDb3VudD1vLHRoaXMuZ3JpZE9mZnNldD1zfXZhciBkPXAucHJvdG90eXBlO2QuYmluZD1mdW5jdGlvbih0LGUscil7dGhpcy5zaGFkZXIuYmluZCgpLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1vZGVsPXQsdGhpcy5zaGFkZXIudW5pZm9ybXMudmlldz1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnByb2plY3Rpb249cix1WzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLHVbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlblNoYXBlPXUsdGhpcy52YW8uYmluZCgpfSxkLnVuYmluZD1mdW5jdGlvbigpe3RoaXMudmFvLnVuYmluZCgpfSxkLmRyYXdBeGlzTGluZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPXMsYVt0XT1lWzFdW3RdLWVbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPWE7dmFyIG8sdT1oKGMscik7dVt0XSs9ZVswXVt0XSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9dSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9aSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1uLChvPWYobCkpWyh0KzIpJTNdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1vLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsNiksKG89ZihsKSlbKHQrMSklM109MSx0aGlzLnNoYWRlci51bmlmb3Jtcy5zY3JlZW5BeGlzPW8sdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kcmF3QXhpc1RpY2tzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYodGhpcy50aWNrQ291bnRbdF0pe3ZhciBhPWYobyk7YVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz1yLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPW4sdGhpcy5zaGFkZXIudW5pZm9ybXMubGluZVdpZHRoPWk7dmFyIHM9ZihsKTtzW3RdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1zLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy50aWNrQ291bnRbdF0sdGhpcy50aWNrT2Zmc2V0W3RdKX19LGQuZHJhd0dyaWQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHRoaXMuZ3JpZENvdW50W3RdKXt2YXIgdT1mKHMpO3VbZV09clsxXVtlXS1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1pbm9yQXhpcz11O3ZhciBwPWgoYyxuKTtwW2VdKz1yWzBdW2VdLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1wO3ZhciBkPWYobyk7ZFt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm1ham9yQXhpcz1kO3ZhciBtPWYobCk7bVt0XT0xLHRoaXMuc2hhZGVyLnVuaWZvcm1zLnNjcmVlbkF4aXM9bSx0aGlzLnNoYWRlci51bmlmb3Jtcy5saW5lV2lkdGg9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMudmFvLmRyYXcodGhpcy5nbC5UUklBTkdMRVMsdGhpcy5ncmlkQ291bnRbdF0sdGhpcy5ncmlkT2Zmc2V0W3RdKX19LGQuZHJhd1plcm89ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPWYocyk7dGhpcy5zaGFkZXIudW5pZm9ybXMubWFqb3JBeGlzPW8sb1t0XT1yWzFdW3RdLXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMubWlub3JBeGlzPW87dmFyIHU9aChjLG4pO3VbdF0rPXJbMF1bdF0sdGhpcy5zaGFkZXIudW5pZm9ybXMub2Zmc2V0PXU7dmFyIHA9ZihsKTtwW2VdPTEsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NyZWVuQXhpcz1wLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmxpbmVXaWR0aD1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyw2KX0sZC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52YW8uZGlzcG9zZSgpLHRoaXMudmVydEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjI1MywiZ2wtYnVmZmVyIjoyNTcsImdsLXZhbyI6MzQzfV0sMjUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsc2xpZnkiKSxpPXQoImdsLXNoYWRlciIpLGE9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgb2Zmc2V0LCBtYWpvckF4aXMsIG1pbm9yQXhpcywgc2NyZWVuQXhpcztcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xudW5pZm9ybSB2ZWMyIHNjcmVlblNoYXBlO1xuXG52ZWMzIHByb2plY3QodmVjMyBwKSB7XG4gIHZlYzQgcHAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xuICByZXR1cm4gcHAueHl6IC8gbWF4KHBwLncsIDAuMDAwMSk7XG59XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBtYWpvciA9IHBvc2l0aW9uLnggKiBtYWpvckF4aXM7XG4gIHZlYzMgbWlub3IgPSBwb3NpdGlvbi55ICogbWlub3JBeGlzO1xuXG4gIHZlYzMgdlBvc2l0aW9uID0gbWFqb3IgKyBtaW5vciArIG9mZnNldDtcbiAgdmVjMyBwUG9zaXRpb24gPSBwcm9qZWN0KHZQb3NpdGlvbik7XG4gIHZlYzMgb2Zmc2V0ID0gcHJvamVjdCh2UG9zaXRpb24gKyBzY3JlZW5BeGlzICogcG9zaXRpb24ueik7XG5cbiAgdmVjMiBzY3JlZW4gPSBub3JtYWxpemUoKG9mZnNldCAtIHBQb3NpdGlvbikueHkgKiBzY3JlZW5TaGFwZSkgLyBzY3JlZW5TaGFwZTtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocFBvc2l0aW9uICsgdmVjMygwLjUgKiBzY3JlZW4gKiBsaW5lV2lkdGgsIDApLCAxLjApO1xufVxuIl0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcjtcbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG59Il0pO3IubGluZT1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV0pfTt2YXIgcz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBvZmZzZXQsIGF4aXMsIGFsaWduRGlyLCBhbGlnbk9wdDtcbnVuaWZvcm0gZmxvYXQgc2NhbGUsIGFuZ2xlLCBwaXhlbFNjYWxlO1xudW5pZm9ybSB2ZWMyIHJlc29sdXRpb247XG5cbnZlYzMgcHJvamVjdCh2ZWMzIHApIHtcbiAgdmVjNCBwcCA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHAsIDEuMCk7XG4gIHJldHVybiBwcC54eXogLyBtYXgocHAudywgMC4wMDAxKTtcbn1cblxuZmxvYXQgY29tcHV0ZVZpZXdBbmdsZSh2ZWMzIGEsIHZlYzMgYikge1xuICB2ZWMzIEEgPSBwcm9qZWN0KGEpO1xuICB2ZWMzIEIgPSBwcm9qZWN0KGIpO1xuXG4gIHJldHVybiBhdGFuKFxuICAgIChCLnkgLSBBLnkpICogcmVzb2x1dGlvbi55LFxuICAgIChCLnggLSBBLngpICogcmVzb2x1dGlvbi54XG4gICk7XG59XG5cbmNvbnN0IGZsb2F0IFBJID0gMy4xNDE1OTI7XG5jb25zdCBmbG9hdCBUV09fUEkgPSAyLjAgKiBQSTtcbmNvbnN0IGZsb2F0IEhBTEZfUEkgPSAwLjUgKiBQSTtcbmNvbnN0IGZsb2F0IE9ORV9BTkRfSEFMRl9QSSA9IDEuNSAqIFBJO1xuXG5pbnQgb3B0aW9uID0gaW50KGZsb29yKGFsaWduT3B0LnggKyAwLjAwMSkpO1xuZmxvYXQgaHZfcmF0aW8gPSAgICAgICBhbGlnbk9wdC55O1xuYm9vbCBlbmFibGVBbGlnbiA9ICAgIChhbGlnbk9wdC56ICE9IDAuMCk7XG5cbmZsb2F0IG1vZF9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2QoYSwgUEkpO1xufVxuXG5mbG9hdCBwb3NpdGl2ZV9hbmdsZShmbG9hdCBhKSB7XG4gIHJldHVybiBtb2RfYW5nbGUoKGEgPCAwLjApID9cbiAgICBhICsgVFdPX1BJIDpcbiAgICBhXG4gICk7XG59XG5cbmZsb2F0IGxvb2tfdXB3YXJkcyhmbG9hdCBhKSB7XG4gIGZsb2F0IGIgPSBwb3NpdGl2ZV9hbmdsZShhKTtcbiAgcmV0dXJuICgoYiA+IEhBTEZfUEkpICYmIChiIDw9IE9ORV9BTkRfSEFMRl9QSSkpID9cbiAgICBiIC0gUEkgOlxuICAgIGI7XG59XG5cbmZsb2F0IGxvb2tfaG9yaXpvbnRhbF9vcl92ZXJ0aWNhbChmbG9hdCBhLCBmbG9hdCByYXRpbykge1xuICAvLyByYXRpbyBjb250cm9scyB0aGUgcmF0aW8gYmV0d2VlbiBiZWluZyBob3Jpem9udGFsIHRvICh2ZXJ0aWNhbCArIGhvcml6b250YWwpXG4gIC8vIGlmIHJhdGlvIGlzIHNldCB0byAwLjUgdGhlbiBpdCBpcyA1MCUsIDUwJS5cbiAgLy8gd2hlbiB1c2luZyBhIGhpZ2hlciByYXRpbyBlLmcuIDAuNzUgdGhlIHJlc3VsdCB3b3VsZFxuICAvLyBsaWtlbHkgYmUgbW9yZSBob3Jpem9udGFsIHRoYW4gdmVydGljYWwuXG5cbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuXG4gIHJldHVyblxuICAgIChiIDwgKCAgICAgIHJhdGlvKSAqIEhBTEZfUEkpID8gMC4wIDpcbiAgICAoYiA8ICgyLjAgLSByYXRpbykgKiBIQUxGX1BJKSA/IC1IQUxGX1BJIDpcbiAgICAoYiA8ICgyLjAgKyByYXRpbykgKiBIQUxGX1BJKSA/IDAuMCA6XG4gICAgKGIgPCAoNC4wIC0gcmF0aW8pICogSEFMRl9QSSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDtcbn1cblxuZmxvYXQgcm91bmRUbyhmbG9hdCBhLCBmbG9hdCBiKSB7XG4gIHJldHVybiBmbG9hdChiICogZmxvb3IoKGEgKyAwLjUgKiBiKSAvIGIpKTtcbn1cblxuZmxvYXQgbG9va19yb3VuZF9uX2RpcmVjdGlvbnMoZmxvYXQgYSwgaW50IG4pIHtcbiAgZmxvYXQgYiA9IHBvc2l0aXZlX2FuZ2xlKGEpO1xuICBmbG9hdCBkaXYgPSBUV09fUEkgLyBmbG9hdChuKTtcbiAgZmxvYXQgYyA9IHJvdW5kVG8oYiwgZGl2KTtcbiAgcmV0dXJuIGxvb2tfdXB3YXJkcyhjKTtcbn1cblxuZmxvYXQgYXBwbHlBbGlnbk9wdGlvbihmbG9hdCByYXdBbmdsZSwgZmxvYXQgZGVsdGEpIHtcbiAgcmV0dXJuXG4gICAgKG9wdGlvbiA+ICAyKSA/IGxvb2tfcm91bmRfbl9kaXJlY3Rpb25zKHJhd0FuZ2xlICsgZGVsdGEsIG9wdGlvbikgOiAgICAgICAvLyBvcHRpb24gMy1uOiByb3VuZCB0byBuIGRpcmVjdGlvbnNcbiAgICAob3B0aW9uID09IDIpID8gbG9va19ob3Jpem9udGFsX29yX3ZlcnRpY2FsKHJhd0FuZ2xlICsgZGVsdGEsIGh2X3JhdGlvKSA6IC8vIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgICAob3B0aW9uID09IDEpID8gcmF3QW5nbGUgKyBkZWx0YSA6ICAgICAgIC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgZmxpcCB0byBhbGlnbiB3aXRoIG9uZSBkaXJlY3Rpb24gb2YgdGhlIGF4aXNcbiAgICAob3B0aW9uID09IDApID8gbG9va191cHdhcmRzKHJhd0FuZ2xlKSA6IC8vIHVzZSBmcmVlIGFuZ2xlLCBhbmQgc3RheSB1cHdhcmRzXG4gICAgKG9wdGlvbiA9PS0xKSA/IDAuMCA6ICAgICAgICAgICAgICAgICAgICAvLyB1c2VmdWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGFsbCB0ZXh0cyByZW1haW5zIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgcmF3QW5nbGU7ICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gYmFjayByYXcgaW5wdXQgYW5nbGVcbn1cblxuYm9vbCBpc0F4aXNUaXRsZSA9IChheGlzLnggPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnkgPT0gMC4wKSAmJlxuICAgICAgICAgICAgICAgICAgIChheGlzLnogPT0gMC4wKTtcblxudm9pZCBtYWluKCkge1xuICAvL0NvbXB1dGUgd29ybGQgb2Zmc2V0XG4gIGZsb2F0IGF4aXNEaXN0YW5jZSA9IHBvc2l0aW9uLno7XG4gIHZlYzMgZGF0YVBvc2l0aW9uID0gYXhpc0Rpc3RhbmNlICogYXhpcyArIG9mZnNldDtcblxuICBmbG9hdCBiZXRhID0gYW5nbGU7IC8vIGkuZS4gdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMgZm9yIGVhY2ggdGlja1xuXG4gIGZsb2F0IGF4aXNBbmdsZTtcbiAgZmxvYXQgY2xpcEFuZ2xlO1xuICBmbG9hdCBmbGlwO1xuXG4gIGlmIChlbmFibGVBbGlnbikge1xuICAgIGF4aXNBbmdsZSA9IChpc0F4aXNUaXRsZSkgPyBIQUxGX1BJIDpcbiAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlVmlld0FuZ2xlKGRhdGFQb3NpdGlvbiwgZGF0YVBvc2l0aW9uICsgYXhpcyk7XG4gICAgY2xpcEFuZ2xlID0gY29tcHV0ZVZpZXdBbmdsZShkYXRhUG9zaXRpb24sIGRhdGFQb3NpdGlvbiArIGFsaWduRGlyKTtcblxuICAgIGF4aXNBbmdsZSArPSAoc2luKGF4aXNBbmdsZSkgPCAwLjApID8gUEkgOiAwLjA7XG4gICAgY2xpcEFuZ2xlICs9IChzaW4oY2xpcEFuZ2xlKSA8IDAuMCkgPyBQSSA6IDAuMDtcblxuICAgIGZsaXAgPSAoZG90KHZlYzIoY29zKGF4aXNBbmdsZSksIHNpbihheGlzQW5nbGUpKSxcbiAgICAgICAgICAgICAgICB2ZWMyKHNpbihjbGlwQW5nbGUpLC1jb3MoY2xpcEFuZ2xlKSkpID4gMC4wKSA/IDEuMCA6IDAuMDtcblxuICAgIGJldGEgKz0gYXBwbHlBbGlnbk9wdGlvbihjbGlwQW5nbGUsIGZsaXAgKiBQSSk7XG4gIH1cblxuICAvL0NvbXB1dGUgcGxhbmUgb2Zmc2V0XG4gIHZlYzIgcGxhbmVDb29yZCA9IHBvc2l0aW9uLnh5ICogcGl4ZWxTY2FsZTtcblxuICBtYXQyIHBsYW5lWGZvcm0gPSBzY2FsZSAqIG1hdDIoXG4gICAgIGNvcyhiZXRhKSwgc2luKGJldGEpLFxuICAgIC1zaW4oYmV0YSksIGNvcyhiZXRhKVxuICApO1xuXG4gIHZlYzIgdmlld09mZnNldCA9IDIuMCAqIHBsYW5lWGZvcm0gKiBwbGFuZUNvb3JkIC8gcmVzb2x1dGlvbjtcblxuICAvL0NvbXB1dGUgY2xpcCBwb3NpdGlvblxuICB2ZWMzIGNsaXBQb3NpdGlvbiA9IHByb2plY3QoZGF0YVBvc2l0aW9uKTtcblxuICAvL0FwcGx5IHRleHQgb2Zmc2V0IGluIGNsaXAgY29vcmRpbmF0ZXNcbiAgY2xpcFBvc2l0aW9uICs9IHZlYzModmlld09mZnNldCwgMC4wKTtcblxuICAvL0RvbmVcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBQb3NpdGlvbiwgMS4wKTtcbn0iXSksbD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSBjb2xvcjtcbn0iXSk7ci50ZXh0PWZ1bmN0aW9uKHQpe3JldHVybiBpKHQscyxsLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9XSl9O3ZhciBjPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMzIG5vcm1hbDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSB2ZWMzIGVuYWJsZTtcbnVuaWZvcm0gdmVjMyBib3VuZHNbMl07XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcblxuICB2ZWMzIHNpZ25BeGlzID0gc2lnbihib3VuZHNbMV0gLSBib3VuZHNbMF0pO1xuXG4gIHZlYzMgcmVhbE5vcm1hbCA9IHNpZ25BeGlzICogbm9ybWFsO1xuXG4gIGlmKGRvdChyZWFsTm9ybWFsLCBlbmFibGUpID4gMC4wKSB7XG4gICAgdmVjMyBtaW5SYW5nZSA9IG1pbihib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBtYXhSYW5nZSA9IG1heChib3VuZHNbMF0sIGJvdW5kc1sxXSk7XG4gICAgdmVjMyBuUG9zaXRpb24gPSBtaXgobWluUmFuZ2UsIG1heFJhbmdlLCAwLjUgKiAocG9zaXRpb24gKyAxLjApKTtcbiAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KG5Qb3NpdGlvbiwgMS4wKTtcbiAgfSBlbHNlIHtcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoMCwwLDAsMCk7XG4gIH1cblxuICBjb2xvckNoYW5uZWwgPSBhYnMocmVhbE5vcm1hbCk7XG59Il0pLHU9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG5cbnZhcnlpbmcgdmVjMyBjb2xvckNoYW5uZWw7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfRnJhZ0NvbG9yID0gY29sb3JDaGFubmVsLnggKiBjb2xvcnNbMF0gK1xuICAgICAgICAgICAgICAgICBjb2xvckNoYW5uZWwueSAqIGNvbG9yc1sxXSArXG4gICAgICAgICAgICAgICAgIGNvbG9yQ2hhbm5lbC56ICogY29sb3JzWzJdO1xufSJdKTtyLmJnPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYyx1LG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJub3JtYWwiLHR5cGU6InZlYzMifV0pfX0seyJnbC1zaGFkZXIiOjMyMyxnbHNsaWZ5OjQyNH1dLDI1NDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEscyxsKXt2YXIgdT1uKHQpLGY9aSh0LFt7YnVmZmVyOnUsc2l6ZTozfV0pLGg9byh0KTtoLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MDt2YXIgcD1uZXcgYyh0LGgsdSxmKTtyZXR1cm4gcC51cGRhdGUoZSxyLGEscyxsKSxwfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXZhbyIpLGE9dCgidmVjdG9yaXplLXRleHQiKSxvPXQoIi4vc2hhZGVycyIpLnRleHQscz13aW5kb3d8fHIuZ2xvYmFsfHx7fSxsPXMuX19URVhUX0NBQ0hFfHx7fTtzLl9fVEVYVF9DQUNIRT17fTtmdW5jdGlvbiBjKHQsZSxyLG4pe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMuYnVmZmVyPXIsdGhpcy52YW89bix0aGlzLnRpY2tPZmZzZXQ9dGhpcy50aWNrQ291bnQ9dGhpcy5sYWJlbE9mZnNldD10aGlzLmxhYmVsQ291bnQ9bnVsbH12YXIgdT1jLnByb3RvdHlwZSxmPVswLDBdO3UuYmluZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnZhby5iaW5kKCksdGhpcy5zaGFkZXIuYmluZCgpO3ZhciBpPXRoaXMuc2hhZGVyLnVuaWZvcm1zO2kubW9kZWw9dCxpLnZpZXc9ZSxpLnByb2plY3Rpb249cixpLnBpeGVsU2NhbGU9bixmWzBdPXRoaXMuZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09dGhpcy5nbC5kcmF3aW5nQnVmZmVySGVpZ2h0LHRoaXMuc2hhZGVyLnVuaWZvcm1zLnJlc29sdXRpb249Zn0sdS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLnZhby51bmJpbmQoKX0sdS51cGRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bXTtmdW5jdGlvbiBzKHQsZSxyLG4saSxzKXt2YXIgYz1sW3JdO2N8fChjPWxbcl09e30pO3ZhciB1PWNbZV07dXx8KHU9Y1tlXT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gYSh0LGUpfWNhdGNoKGUpe3JldHVybiBjb25zb2xlLndhcm4oJ2Vycm9yIHZlY3Rvcml6aW5nIHRleHQ6IicrdCsnIiBlcnJvcjonLGUpLHtjZWxsczpbXSxwb3NpdGlvbnM6W119fX0oZSx7dHJpYW5nbGVzOiEwLGZvbnQ6cix0ZXh0QWxpZ246ImNlbnRlciIsdGV4dEJhc2VsaW5lOiJtaWRkbGUiLGxpbmVTcGFjaW5nOmksc3R5bGV0YWdzOnN9KSk7Zm9yKHZhciBmPShufHwxMikvMTIsaD11LnBvc2l0aW9ucyxwPXUuY2VsbHMsZD0wLG09cC5sZW5ndGg7ZDxtOysrZClmb3IodmFyIGc9cFtkXSx2PTI7dj49MDstLXYpe3ZhciB5PWhbZ1t2XV07by5wdXNoKGYqeVswXSwtZip5WzFdLHQpfX1mb3IodmFyIGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwLDBdLGg9WzAsMCwwXSxwPXticmVha2xpbmVzOiEwLGJvbGRzOiEwLGl0YWxpY3M6ITAsc3Vic2NyaXB0czohMCxzdXBlcnNjcmlwdHM6ITB9LGQ9MDtkPDM7KytkKXtmW2RdPW8ubGVuZ3RoLzN8MCxzKC41Kih0WzBdW2RdK3RbMV1bZF0pLGVbZF0scltkXSwxMiwxLjI1LHApLGhbZF09KG8ubGVuZ3RoLzN8MCktZltkXSxjW2RdPW8ubGVuZ3RoLzN8MDtmb3IodmFyIG09MDttPG5bZF0ubGVuZ3RoOysrbSluW2RdW21dLnRleHQmJnMobltkXVttXS54LG5bZF1bbV0udGV4dCxuW2RdW21dLmZvbnR8fGksbltkXVttXS5mb250U2l6ZXx8MTIsMS4yNSxwKTt1W2RdPShvLmxlbmd0aC8zfDApLWNbZF19dGhpcy5idWZmZXIudXBkYXRlKG8pLHRoaXMudGlja09mZnNldD1jLHRoaXMudGlja0NvdW50PXUsdGhpcy5sYWJlbE9mZnNldD1mLHRoaXMubGFiZWxDb3VudD1ofSx1LmRyYXdUaWNrcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMudGlja0NvdW50W3RdJiYodGhpcy5zaGFkZXIudW5pZm9ybXMuYXhpcz1hLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmNvbG9yPWksdGhpcy5zaGFkZXIudW5pZm9ybXMuYW5nbGU9cix0aGlzLnNoYWRlci51bmlmb3Jtcy5zY2FsZT1lLHRoaXMuc2hhZGVyLnVuaWZvcm1zLm9mZnNldD1uLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduRGlyPW8sdGhpcy5zaGFkZXIudW5pZm9ybXMuYWxpZ25PcHQ9cyx0aGlzLnZhby5kcmF3KHRoaXMuZ2wuVFJJQU5HTEVTLHRoaXMudGlja0NvdW50W3RdLHRoaXMudGlja09mZnNldFt0XSkpfSx1LmRyYXdMYWJlbD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMubGFiZWxDb3VudFt0XSYmKHRoaXMuc2hhZGVyLnVuaWZvcm1zLmF4aXM9YSx0aGlzLnNoYWRlci51bmlmb3Jtcy5jb2xvcj1pLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFuZ2xlPXIsdGhpcy5zaGFkZXIudW5pZm9ybXMuc2NhbGU9ZSx0aGlzLnNoYWRlci51bmlmb3Jtcy5vZmZzZXQ9bix0aGlzLnNoYWRlci51bmlmb3Jtcy5hbGlnbkRpcj1vLHRoaXMuc2hhZGVyLnVuaWZvcm1zLmFsaWduT3B0PXMsdGhpcy52YW8uZHJhdyh0aGlzLmdsLlRSSUFOR0xFUyx0aGlzLmxhYmVsQ291bnRbdF0sdGhpcy5sYWJlbE9mZnNldFt0XSkpfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX19KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vc2hhZGVycyI6MjUzLF9wcm9jZXNzOjUwNCwiZ2wtYnVmZmVyIjoyNTcsImdsLXZhbyI6MzQzLCJ2ZWN0b3JpemUtdGV4dCI6NTk2fV0sMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj10KyIiLG49ci5pbmRleE9mKCIuIiksaT0wO24+PTAmJihpPXIubGVuZ3RoLW4tMSk7dmFyIGE9TWF0aC5wb3coMTAsaSksbz1NYXRoLnJvdW5kKHQqZSphKSxzPW8rIiI7aWYocy5pbmRleE9mKCJlIik+PTApcmV0dXJuIHM7dmFyIGw9by9hLGM9byVhO288MD8obD0wfC1NYXRoLmNlaWwobCksYz0wfC1jKToobD0wfE1hdGguZmxvb3IobCksY3w9MCk7dmFyIHU9IiIrbDtpZihvPDAmJih1PSItIit1KSxpKXtmb3IodmFyIGY9IiIrYztmLmxlbmd0aDxpOylmPSIwIitmO3JldHVybiB1KyIuIitmfXJldHVybiB1fXIuY3JlYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLGk9MDtpPDM7KytpKXtmb3IodmFyIGE9W10sbz0odFswXVtpXSx0WzFdW2ldLDApO28qZVtpXTw9dFsxXVtpXTsrK28pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO2ZvcihvPS0xO28qZVtpXT49dFswXVtpXTstLW8pYS5wdXNoKHt4Om8qZVtpXSx0ZXh0Om4oZVtpXSxvKX0pO3IucHVzaChhKX1yZXR1cm4gcn0sci5lcXVhbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8MzsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDsrK24pe3ZhciBpPXRbcl1bbl0sYT1lW3JdW25dO2lmKGkueCE9PWEueHx8aS50ZXh0IT09YS50ZXh0fHxpLmZvbnQhPT1hLmZvbnR8fGkuZm9udENvbG9yIT09YS5mb250Q29sb3J8fGkuZm9udFNpemUhPT1hLmZvbnRTaXplfHxpLmR4IT09YS5keHx8aS5keSE9PWEuZHkpcmV0dXJuITF9fXJldHVybiEwfX0se31dLDI1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxmKXt2YXIgaD1lLm1vZGVsfHxjLHA9ZS52aWV3fHxjLHY9ZS5wcm9qZWN0aW9ufHxjLHk9ZS5fb3J0aG98fCExLHg9dC5ib3VuZHMsYj0oZj1mfHxhKGgscCx2LHgseSkpLmF4aXM7byh1LHAsaCksbyh1LHYsdSk7Zm9yKHZhciBfPW0sdz0wO3c8MzsrK3cpX1t3XS5sbz0xLzAsX1t3XS5oaT0tMS8wLF9bd10ucGl4ZWxzUGVyRGF0YVVuaXQ9MS8wO3ZhciBUPW4ocyh1LHUpKTtzKHUsdSk7Zm9yKHZhciBrPTA7azwzOysrayl7dmFyIEE9KGsrMSklMyxNPShrKzIpJTMsUz1nO3Q6Zm9yKHc9MDt3PDI7Kyt3KXt2YXIgRT1bXTtpZihiW2tdPDAhPSEhdyl7U1trXT14W3ddW2tdO2Zvcih2YXIgTD0wO0w8MjsrK0wpe1NbQV09eFtMXnddW0FdO2Zvcih2YXIgQz0wO0M8MjsrK0MpU1tNXT14W0NeTF53XVtNXSxFLnB1c2goUy5zbGljZSgpKX12YXIgUD15PzU6NDtmb3IoTD1QO0w9PT1QOysrTCl7aWYoMD09PUUubGVuZ3RoKWNvbnRpbnVlIHQ7RT1pLnBvc2l0aXZlKEUsVFtMXSl9Zm9yKEw9MDtMPEUubGVuZ3RoOysrTCl7TT1FW0xdO3ZhciBJPWQoZyx1LE0scixsKTtmb3IoQz0wO0M8MzsrK0MpX1tDXS5sbz1NYXRoLm1pbihfW0NdLmxvLE1bQ10pLF9bQ10uaGk9TWF0aC5tYXgoX1tDXS5oaSxNW0NdKSxDIT09ayYmKF9bQ10ucGl4ZWxzUGVyRGF0YVVuaXQ9TWF0aC5taW4oX1tDXS5waXhlbHNQZXJEYXRhVW5pdCxNYXRoLmFicyhJW0NdKSkpfX19fXJldHVybiBffTt2YXIgbj10KCJleHRyYWN0LWZydXN0dW0tcGxhbmVzIiksaT10KCJzcGxpdC1wb2x5Z29uIiksYT10KCIuL2xpYi9jdWJlLmpzIiksbz10KCJnbC1tYXQ0L211bHRpcGx5Iikscz10KCJnbC1tYXQ0L3RyYW5zcG9zZSIpLGw9dCgiZ2wtdmVjNC90cmFuc2Zvcm1NYXQ0IiksYz1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXSksdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLmxvPXQsdGhpcy5oaT1lLHRoaXMucGl4ZWxzUGVyRGF0YVVuaXQ9cn12YXIgaD1bMCwwLDAsMV0scD1bMCwwLDAsMV07ZnVuY3Rpb24gZCh0LGUscixuLGkpe2Zvcih2YXIgYT0wO2E8MzsrK2Epe2Zvcih2YXIgbz1oLHM9cCxjPTA7YzwzOysrYylzW2NdPW9bY109cltjXTtzWzNdPW9bM109MSxzW2FdKz0xLGwocyxzLGUpLHNbM108MCYmKHRbYV09MS8wKSxvW2FdLT0xLGwobyxvLGUpLG9bM108MCYmKHRbYV09MS8wKTt2YXIgdT0ob1swXS9vWzNdLXNbMF0vc1szXSkqbixmPShvWzFdL29bM10tc1sxXS9zWzNdKSppO3RbYV09LjI1Kk1hdGguc3FydCh1KnUrZipmKX1yZXR1cm4gdH12YXIgbT1bbmV3IGYoMS8wLC0xLzAsMS8wKSxuZXcgZigxLzAsLTEvMCwxLzApLG5ldyBmKDEvMCwtMS8wLDEvMCldLGc9WzAsMCwwXX0seyIuL2xpYi9jdWJlLmpzIjoyNTEsImV4dHJhY3QtZnJ1c3R1bS1wbGFuZXMiOjI0MSwiZ2wtbWF0NC9tdWx0aXBseSI6Mjg5LCJnbC1tYXQ0L3RyYW5zcG9zZSI6MzAwLCJnbC12ZWM0L3RyYW5zZm9ybU1hdDQiOjQxNCwic3BsaXQtcG9seWdvbiI6NTQxfV0sMjU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR5cGVkYXJyYXktcG9vbCIpLGk9dCgibmRhcnJheS1vcHMiKSxhPXQoIm5kYXJyYXkiKSxvPVsidWludDgiLCJ1aW50OF9jbGFtcGVkIiwidWludDE2IiwidWludDMyIiwiaW50OCIsImludDE2IiwiaW50MzIiLCJmbG9hdDMyIl07ZnVuY3Rpb24gcyh0LGUscixuLGkpe3RoaXMuZ2w9dCx0aGlzLnR5cGU9ZSx0aGlzLmhhbmRsZT1yLHRoaXMubGVuZ3RoPW4sdGhpcy51c2FnZT1pfXZhciBsPXMucHJvdG90eXBlO2Z1bmN0aW9uIGModCxlLHIsbixpLGEpe3ZhciBvPWkubGVuZ3RoKmkuQllURVNfUEVSX0VMRU1FTlQ7aWYoYTwwKXJldHVybiB0LmJ1ZmZlckRhdGEoZSxpLG4pLG87aWYobythPnIpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IElmIHJlc2l6aW5nIGJ1ZmZlciwgbXVzdCBub3Qgc3BlY2lmeSBvZmZzZXQiKTtyZXR1cm4gdC5idWZmZXJTdWJEYXRhKGUsYSxpKSxyfWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9bi5tYWxsb2ModC5sZW5ndGgsZSksaT10Lmxlbmd0aCxhPTA7YTxpOysrYSlyW2FdPXRbYV07cmV0dXJuIHJ9bC5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmhhbmRsZSl9LGwudW5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5nbC5iaW5kQnVmZmVyKHRoaXMudHlwZSxudWxsKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbC5kZWxldGVCdWZmZXIodGhpcy5oYW5kbGUpfSxsLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSYmKGU9LTEpLHRoaXMuYmluZCgpLCJvYmplY3QiPT10eXBlb2YgdCYmdm9pZCAwIT09dC5zaGFwZSl7dmFyIHI9dC5kdHlwZTtpZihvLmluZGV4T2Yocik8MCYmKHI9ImZsb2F0MzIiKSx0aGlzLnR5cGU9PT10aGlzLmdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSKXI9Z2wuZ2V0RXh0ZW5zaW9uKCJPRVNfZWxlbWVudF9pbmRleF91aW50IikmJiJ1aW50MTYiIT09cj8idWludDMyIjoidWludDE2IjtpZihyPT09dC5kdHlwZSYmZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPWUubGVuZ3RoLTE7bj49MDstLW4pe2lmKGVbbl0hPT1yKXJldHVybiExO3IqPXRbbl19cmV0dXJuITB9KHQuc2hhcGUsdC5zdHJpZGUpKTA9PT10Lm9mZnNldCYmdC5kYXRhLmxlbmd0aD09PXQuc2hhcGVbMF0/dGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQuZGF0YSxlKTp0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsdC5kYXRhLnN1YmFycmF5KHQub2Zmc2V0LHQuc2hhcGVbMF0pLGUpO2Vsc2V7dmFyIHM9bi5tYWxsb2ModC5zaXplLHIpLGw9YShzLHQuc2hhcGUpO2kuYXNzaWduKGwsdCksdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLGU8MD9zOnMuc3ViYXJyYXkoMCx0LnNpemUpLGUpLG4uZnJlZShzKX19ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt2YXIgZjtmPXRoaXMudHlwZT09PXRoaXMuZ2wuRUxFTUVOVF9BUlJBWV9CVUZGRVI/dSh0LCJ1aW50MTYiKTp1KHQsImZsb2F0MzIiKSx0aGlzLmxlbmd0aD1jKHRoaXMuZ2wsdGhpcy50eXBlLHRoaXMubGVuZ3RoLHRoaXMudXNhZ2UsZTwwP2Y6Zi5zdWJhcnJheSgwLHQubGVuZ3RoKSxlKSxuLmZyZWUoZil9ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHQmJiJudW1iZXIiPT10eXBlb2YgdC5sZW5ndGgpdGhpcy5sZW5ndGg9Yyh0aGlzLmdsLHRoaXMudHlwZSx0aGlzLmxlbmd0aCx0aGlzLnVzYWdlLHQsZSk7ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIHQmJnZvaWQgMCE9PXQpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgZGF0YSB0eXBlIik7aWYoZT49MCl0aHJvdyBuZXcgRXJyb3IoImdsLWJ1ZmZlcjogQ2Fubm90IHNwZWNpZnkgb2Zmc2V0IHdoZW4gcmVzaXppbmcgYnVmZmVyIik7KHR8PTApPD0wJiYodD0xKSx0aGlzLmdsLmJ1ZmZlckRhdGEodGhpcy50eXBlLDB8dCx0aGlzLnVzYWdlKSx0aGlzLmxlbmd0aD10fX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHI9cnx8dC5BUlJBWV9CVUZGRVIsbj1ufHx0LkRZTkFNSUNfRFJBVyxyIT09dC5BUlJBWV9CVUZGRVImJnIhPT10LkVMRU1FTlRfQVJSQVlfQlVGRkVSKXRocm93IG5ldyBFcnJvcigiZ2wtYnVmZmVyOiBJbnZhbGlkIHR5cGUgZm9yIHdlYmdsIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuQVJSQVlfQlVGRkVSIG9yIGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSIik7aWYobiE9PXQuRFlOQU1JQ19EUkFXJiZuIT09dC5TVEFUSUNfRFJBVyYmbiE9PXQuU1RSRUFNX0RSQVcpdGhyb3cgbmV3IEVycm9yKCJnbC1idWZmZXI6IEludmFsaWQgdXNhZ2UgZm9yIGJ1ZmZlciwgbXVzdCBiZSBlaXRoZXIgZ2wuRFlOQU1JQ19EUkFXLCBnbC5TVEFUSUNfRFJBVyBvciBnbC5TVFJFQU1fRFJBVyIpO3ZhciBpPXQuY3JlYXRlQnVmZmVyKCksYT1uZXcgcyh0LHIsaSwwLG4pO3JldHVybiBhLnVwZGF0ZShlKSxhfX0se25kYXJyYXk6NDYyLCJuZGFycmF5LW9wcyI6NDU3LCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDI1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC12ZWMzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wb3NpdGlvbnMsaT10LnZlY3RvcnMsYT17cG9zaXRpb25zOltdLHZlcnRleEludGVuc2l0eTpbXSx2ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM6dC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHMsdmVjdG9yczpbXSxjZWxsczpbXSxjb25lT2Zmc2V0OnQuY29uZU9mZnNldCxjb2xvcm1hcDp0LmNvbG9ybWFwfTtpZigwPT09dC5wb3NpdGlvbnMubGVuZ3RoKXJldHVybiBlJiYoZVswXT1bMCwwLDBdLGVbMV09WzAsMCwwXSksYTtmb3IodmFyIG89MCxzPTEvMCxsPS0xLzAsYz0xLzAsdT0tMS8wLGY9MS8wLGg9LTEvMCxwPW51bGwsZD1udWxsLG09W10sZz0xLzAsdj0hMSx5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB4PXJbeV07cz1NYXRoLm1pbih4WzBdLHMpLGw9TWF0aC5tYXgoeFswXSxsKSxjPU1hdGgubWluKHhbMV0sYyksdT1NYXRoLm1heCh4WzFdLHUpLGY9TWF0aC5taW4oeFsyXSxmKSxoPU1hdGgubWF4KHhbMl0saCk7dmFyIGI9aVt5XTtpZihuLmxlbmd0aChiKT5vJiYobz1uLmxlbmd0aChiKSkseSl7dmFyIF89MipuLmRpc3RhbmNlKHAseCkvKG4ubGVuZ3RoKGQpK24ubGVuZ3RoKGIpKTtfPyhnPU1hdGgubWluKGcsXyksdj0hMSk6dj0hMH12fHwocD14LGQ9YiksbS5wdXNoKGIpfXZhciB3PVtzLGMsZl0sVD1bbCx1LGhdO2UmJihlWzBdPXcsZVsxXT1UKSwwPT09byYmKG89MSk7dmFyIGs9MS9vO2lzRmluaXRlKGcpfHwoZz0xKSxhLnZlY3RvclNjYWxlPWc7dmFyIEE9dC5jb25lU2l6ZXx8LjU7dC5hYnNvbHV0ZUNvbmVTaXplJiYoQT10LmFic29sdXRlQ29uZVNpemUqayksYS5jb25lU2NhbGU9QTt5PTA7Zm9yKHZhciBNPTA7eTxyLmxlbmd0aDt5KyspZm9yKHZhciBTPSh4PXJbeV0pWzBdLEU9eFsxXSxMPXhbMl0sQz1tW3ldLFA9bi5sZW5ndGgoQykqayxJPTA7STw4O0krKyl7YS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS5wb3NpdGlvbnMucHVzaChbUyxFLEwsTSsrXSksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZWN0b3JzLnB1c2goQyksYS52ZXJ0ZXhJbnRlbnNpdHkucHVzaChQLFAsUCksYS52ZXJ0ZXhJbnRlbnNpdHkucHVzaChQLFAsUCk7dmFyIE89YS5wb3NpdGlvbnMubGVuZ3RoO2EuY2VsbHMucHVzaChbTy02LE8tNSxPLTRdLFtPLTMsTy0yLE8tMV0pfXJldHVybiBhfTt2YXIgaT10KCIuL2xpYi9zaGFkZXJzIik7ZS5leHBvcnRzLmNyZWF0ZU1lc2g9dCgiLi9jcmVhdGVfbWVzaCIpLGUuZXhwb3J0cy5jcmVhdGVDb25lTWVzaD1mdW5jdGlvbih0LHIpe3JldHVybiBlLmV4cG9ydHMuY3JlYXRlTWVzaCh0LHIse3NoYWRlcnM6aSx0cmFjZVR5cGU6ImNvbmUifSl9fSx7Ii4vY3JlYXRlX21lc2giOjI1OSwiLi9saWIvc2hhZGVycyI6MjYwLCJnbC12ZWMzIjozNjJ9XSwyNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJnbC1tYXQ0L211bHRpcGx5IiksbD10KCJnbC1tYXQ0L2ludmVydCIpLGM9dCgibmRhcnJheSIpLHU9dCgiY29sb3JtYXAiKSxmPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBoKHQsZSxyLG4saSxhLG8scyxsLGMsdSl7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuY2VsbHM9W10sdGhpcy5wb3NpdGlvbnM9W10sdGhpcy5pbnRlbnNpdHk9W10sdGhpcy50ZXh0dXJlPWUsdGhpcy5kaXJ0eT0hMCx0aGlzLnRyaVNoYWRlcj1yLHRoaXMucGlja1NoYWRlcj1uLHRoaXMudHJpYW5nbGVQb3NpdGlvbnM9aSx0aGlzLnRyaWFuZ2xlVmVjdG9ycz1hLHRoaXMudHJpYW5nbGVDb2xvcnM9cyx0aGlzLnRyaWFuZ2xlVVZzPWwsdGhpcy50cmlhbmdsZUlkcz1vLHRoaXMudHJpYW5nbGVWQU89Yyx0aGlzLnRyaWFuZ2xlQ291bnQ9MCx0aGlzLnBpY2tJZD0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpZ2h0UG9zaXRpb249WzFlNSwxZTUsMF0sdGhpcy5hbWJpZW50TGlnaHQ9LjgsdGhpcy5kaWZmdXNlTGlnaHQ9LjgsdGhpcy5zcGVjdWxhckxpZ2h0PTIsdGhpcy5yb3VnaG5lc3M9LjUsdGhpcy5mcmVzbmVsPTEuNSx0aGlzLm9wYWNpdHk9MSx0aGlzLnRyYWNlVHlwZT11LHRoaXMudHViZVNjYWxlPTEsdGhpcy5jb25lU2NhbGU9Mix0aGlzLnZlY3RvclNjYWxlPTEsdGhpcy5jb25lT2Zmc2V0PS4yNSx0aGlzLl9tb2RlbD1mLHRoaXMuX3ZpZXc9Zix0aGlzLl9wcm9qZWN0aW9uPWYsdGhpcy5fcmVzb2x1dGlvbj1bMSwxXX12YXIgcD1oLnByb3RvdHlwZTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9bih0LGUubWVzaFNoYWRlci52ZXJ0ZXgsZS5tZXNoU2hhZGVyLmZyYWdtZW50LG51bGwsZS5tZXNoU2hhZGVyLmF0dHJpYnV0ZXMpO3JldHVybiByLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixyLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxyLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTQscn1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9bih0LGUucGlja1NoYWRlci52ZXJ0ZXgsZS5waWNrU2hhZGVyLmZyYWdtZW50LG51bGwsZS5waWNrU2hhZGVyLmF0dHJpYnV0ZXMpO3JldHVybiByLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxyLmF0dHJpYnV0ZXMuaWQubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMudmVjdG9yLmxvY2F0aW9uPTQscn1wLmlzT3BhcXVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eT49MX0scC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3BhY2l0eTwxfSxwLnBpY2tTbG90cz0xLHAuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0scC51cGRhdGU9ZnVuY3Rpb24odCl7dD10fHx7fTt2YXIgZT10aGlzLmdsO3RoaXMuZGlydHk9ITAsImxpZ2h0UG9zaXRpb24iaW4gdCYmKHRoaXMubGlnaHRQb3NpdGlvbj10LmxpZ2h0UG9zaXRpb24pLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHZvaWQgMCE9PXQudHViZVNjYWxlJiYodGhpcy50dWJlU2NhbGU9dC50dWJlU2NhbGUpLHZvaWQgMCE9PXQudmVjdG9yU2NhbGUmJih0aGlzLnZlY3RvclNjYWxlPXQudmVjdG9yU2NhbGUpLHZvaWQgMCE9PXQuY29uZVNjYWxlJiYodGhpcy5jb25lU2NhbGU9dC5jb25lU2NhbGUpLHZvaWQgMCE9PXQuY29uZU9mZnNldCYmKHRoaXMuY29uZU9mZnNldD10LmNvbmVPZmZzZXQpLHQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCl7Zm9yKHZhciBlPXUoe2NvbG9ybWFwOnQsbnNoYWRlczoyNTYsZm9ybWF0OiJyZ2JhIn0pLHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj0wO248MjU2Oysrbil7Zm9yKHZhciBpPWVbbl0sYT0wO2E8MzsrK2Epcls0Km4rYV09aVthXTtyWzQqbiszXT0yNTUqaVszXX1yZXR1cm4gYyhyLFsyNTYsMjU2LDRdLFs0LDAsMV0pfSh0LmNvbG9ybWFwKSksdGhpcy50ZXh0dXJlLmdlbmVyYXRlTWlwbWFwKCkpO3ZhciByPXQuY2VsbHMsbj10LnBvc2l0aW9ucyxpPXQudmVjdG9ycztpZihuJiZyJiZpKXt2YXIgYT1bXSxvPVtdLHM9W10sbD1bXSxmPVtdO3RoaXMuY2VsbHM9cix0aGlzLnBvc2l0aW9ucz1uLHRoaXMudmVjdG9ycz1pO3ZhciBoPXQubWVzaENvbG9yfHxbMSwxLDEsMV0scD10LnZlcnRleEludGVuc2l0eSxkPTEvMCxtPS0xLzA7aWYocClpZih0LnZlcnRleEludGVuc2l0eUJvdW5kcylkPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1swXSxtPSt0LnZlcnRleEludGVuc2l0eUJvdW5kc1sxXTtlbHNlIGZvcih2YXIgZz0wO2c8cC5sZW5ndGg7KytnKXt2YXIgdj1wW2ddO2Q9TWF0aC5taW4oZCx2KSxtPU1hdGgubWF4KG0sdil9ZWxzZSBmb3IoZz0wO2c8bi5sZW5ndGg7KytnKXt2PW5bZ11bMl07ZD1NYXRoLm1pbihkLHYpLG09TWF0aC5tYXgobSx2KX10aGlzLmludGVuc2l0eT1wfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXTtmb3IoZz0wO2c8bi5sZW5ndGg7KytnKWZvcih2YXIgeT1uW2ddLHg9MDt4PDM7Kyt4KSFpc05hTih5W3hdKSYmaXNGaW5pdGUoeVt4XSkmJih0aGlzLmJvdW5kc1swXVt4XT1NYXRoLm1pbih0aGlzLmJvdW5kc1swXVt4XSx5W3hdKSx0aGlzLmJvdW5kc1sxXVt4XT1NYXRoLm1heCh0aGlzLmJvdW5kc1sxXVt4XSx5W3hdKSk7dmFyIGI9MDt0OmZvcihnPTA7ZzxyLmxlbmd0aDsrK2cpe3ZhciBfPXJbZ107c3dpdGNoKF8ubGVuZ3RoKXtjYXNlIDM6Zm9yKHg9MDt4PDM7Kyt4KXt5PW5bVD1fW3hdXTtmb3IodmFyIHc9MDt3PDM7Kyt3KWlmKGlzTmFOKHlbd10pfHwhaXNGaW5pdGUoeVt3XSkpY29udGludWUgdH1mb3IoeD0wO3g8MzsrK3gpe3ZhciBUO3k9bltUPV9bMi14XV07YS5wdXNoKHlbMF0seVsxXSx5WzJdLHlbM10pO3ZhciBrPWlbVF07by5wdXNoKGtbMF0sa1sxXSxrWzJdLGtbM118fDApO3ZhciBBLE09aDszPT09TS5sZW5ndGg/cy5wdXNoKE1bMF0sTVsxXSxNWzJdLDEpOnMucHVzaChNWzBdLE1bMV0sTVsyXSxNWzNdKSxBPXA/WyhwW1RdLWQpLyhtLWQpLDBdOlsoeVsyXS1kKS8obS1kKSwwXSxsLnB1c2goQVswXSxBWzFdKSxmLnB1c2goZyl9Yis9MX19dGhpcy50cmlhbmdsZUNvdW50PWIsdGhpcy50cmlhbmdsZVBvc2l0aW9ucy51cGRhdGUoYSksdGhpcy50cmlhbmdsZVZlY3RvcnMudXBkYXRlKG8pLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKHMpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGwpLHRoaXMudHJpYW5nbGVJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShmKSl9fSxwLmRyYXdUcmFuc3BhcmVudD1wLmRyYXc9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGYsbj10LnZpZXd8fGYsaT10LnByb2plY3Rpb258fGYsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt2YXIgYz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGludmVyc2VNb2RlbDpmLnNsaWNlKCksY2xpcEJvdW5kczphLGthbWJpZW50OnRoaXMuYW1iaWVudExpZ2h0LGtkaWZmdXNlOnRoaXMuZGlmZnVzZUxpZ2h0LGtzcGVjdWxhcjp0aGlzLnNwZWN1bGFyTGlnaHQscm91Z2huZXNzOnRoaXMucm91Z2huZXNzLGZyZXNuZWw6dGhpcy5mcmVzbmVsLGV5ZVBvc2l0aW9uOlswLDAsMF0sbGlnaHRQb3NpdGlvbjpbMCwwLDBdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHR1YmVTY2FsZTp0aGlzLnR1YmVTY2FsZSx2ZWN0b3JTY2FsZTp0aGlzLnZlY3RvclNjYWxlLGNvbmVTY2FsZTp0aGlzLmNvbmVTY2FsZSxjb25lT2Zmc2V0OnRoaXMuY29uZU9mZnNldCx0ZXh0dXJlOjB9O2MuaW52ZXJzZU1vZGVsPWwoYy5pbnZlcnNlTW9kZWwsYy5tb2RlbCksZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKSx0aGlzLnRleHR1cmUuYmluZCgwKTt2YXIgdT1uZXcgQXJyYXkoMTYpO3ModSxjLnZpZXcsYy5tb2RlbCkscyh1LGMucHJvamVjdGlvbix1KSxsKHUsdSk7Zm9yKG89MDtvPDM7KytvKWMuZXllUG9zaXRpb25bb109dVsxMitvXS91WzE1XTt2YXIgaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO2MubGlnaHRQb3NpdGlvbltvXT1wL2h9aWYodGhpcy50cmlhbmdsZUNvdW50PjApe3ZhciBtPXRoaXMudHJpU2hhZGVyO20uYmluZCgpLG0udW5pZm9ybXM9Yyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKX19LHAuZHJhd1BpY2s9ZnVuY3Rpb24odCl7dD10fHx7fTtmb3IodmFyIGU9dGhpcy5nbCxyPXQubW9kZWx8fGYsbj10LnZpZXd8fGYsaT10LnByb2plY3Rpb258fGYsYT1bWy0xZTYsLTFlNiwtMWU2XSxbMWU2LDFlNiwxZTZdXSxvPTA7bzwzOysrbylhWzBdW29dPU1hdGgubWF4KGFbMF1bb10sdGhpcy5jbGlwQm91bmRzWzBdW29dKSxhWzFdW29dPU1hdGgubWluKGFbMV1bb10sdGhpcy5jbGlwQm91bmRzWzFdW29dKTt0aGlzLl9tb2RlbD1bXS5zbGljZS5jYWxsKHIpLHRoaXMuX3ZpZXc9W10uc2xpY2UuY2FsbChuKSx0aGlzLl9wcm9qZWN0aW9uPVtdLnNsaWNlLmNhbGwoaSksdGhpcy5fcmVzb2x1dGlvbj1bZS5kcmF3aW5nQnVmZmVyV2lkdGgsZS5kcmF3aW5nQnVmZmVySGVpZ2h0XTt2YXIgcz17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSx0dWJlU2NhbGU6dGhpcy50dWJlU2NhbGUsdmVjdG9yU2NhbGU6dGhpcy52ZWN0b3JTY2FsZSxjb25lU2NhbGU6dGhpcy5jb25lU2NhbGUsY29uZU9mZnNldDp0aGlzLmNvbmVPZmZzZXQscGlja0lkOnRoaXMucGlja0lkLzI1NX0sbD10aGlzLnBpY2tTaGFkZXI7bC5iaW5kKCksbC51bmlmb3Jtcz1zLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpfSxwLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9uc1tyWzFdXS5zbGljZSgwLDMpLGk9e3Bvc2l0aW9uOm4sZGF0YUNvb3JkaW5hdGU6bixpbmRleDpNYXRoLmZsb29yKHJbMV0vNDgpfTtyZXR1cm4iY29uZSI9PT10aGlzLnRyYWNlVHlwZT9pLmluZGV4PU1hdGguZmxvb3IoclsxXS80OCk6InN0cmVhbXR1YmUiPT09dGhpcy50cmFjZVR5cGUmJihpLmludGVuc2l0eT10aGlzLmludGVuc2l0eVtyWzFdXSxpLnZlbG9jaXR5PXRoaXMudmVjdG9yc1tyWzFdXS5zbGljZSgwLDMpLGkuZGl2ZXJnZW5jZT10aGlzLnZlY3RvcnNbclsxXV1bM10saS5pbmRleD1lKSxpfSxwLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnRleHR1cmUuZGlzcG9zZSgpLHRoaXMudHJpU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWQU8uZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMudHJpYW5nbGVWZWN0b3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlSWRzLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yLnNoYWRlcnM7MT09PWFyZ3VtZW50cy5sZW5ndGgmJih0PShlPXQpLmdsKTt2YXIgcz1kKHQsbiksbD1tKHQsbiksdT1vKHQsYyhuZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1XSksWzEsMSw0XSkpO3UuZ2VuZXJhdGVNaXBtYXAoKSx1Lm1pbkZpbHRlcj10LkxJTkVBUl9NSVBNQVBfTElORUFSLHUubWFnRmlsdGVyPXQuTElORUFSO3ZhciBmPWkodCkscD1pKHQpLGc9aSh0KSx2PWkodCkseT1pKHQpLHg9YSh0LFt7YnVmZmVyOmYsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp5LHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjJ9LHtidWZmZXI6cCx0eXBlOnQuRkxPQVQsc2l6ZTo0fV0pLGI9bmV3IGgodCx1LHMsbCxmLHAseSxnLHYseCxyLnRyYWNlVHlwZXx8ImNvbmUiKTtyZXR1cm4gYi51cGRhdGUoZSksYn19LHtjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXNoYWRlciI6MzIzLCJnbC10ZXh0dXJlMmQiOjMzOCwiZ2wtdmFvIjozNDMsbmRhcnJheTo0NjJ9XSwyNjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIGNvbmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgY29uZSB3aXRoIGl0cyB0b3AgYXQgb3JpZ2luIGFuZCBoZWlnaHQgb2YgMS4wLFxuLy8gcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgdmVjdG9yIGF0dHJpYnV0ZS5cbi8vXG4vLyBFYWNoIGNvbmUgaXMgbWFkZSB1cCBvZiBhIHRvcCB2ZXJ0ZXgsIGEgY2VudGVyIGJhc2UgdmVydGV4IGFuZCBiYXNlIHBlcmltZXRlciB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgY29uZSBieSB0aGUgZm9sbG93aW5nOlxuLy8gICBzZWdtZW50ICsgMCB0b3AgdmVydGV4XG4vLyAgIHNlZ21lbnQgKyAxIHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyAgIHNlZ21lbnQgKyAyIHBlcmltZXRlciB2ZXJ0ZXggYVxuLy8gICBzZWdtZW50ICsgMyBjZW50ZXIgYmFzZSB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDQgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyA1IHBlcmltZXRlciB2ZXJ0ZXggYSsxXG4vLyBXaGVyZSBzZWdtZW50IGlzIHRoZSBudW1iZXIgb2YgdGhlIHJhZGlhbCBzZWdtZW50ICogNiBhbmQgYSBpcyB0aGUgYW5nbGUgYXQgdGhhdCByYWRpYWwgc2VnbWVudC5cbi8vIFRvIGdvIGZyb20gaW5kZXggdG8gc2VnbWVudCwgZmxvb3IoaW5kZXggLyA2KVxuLy8gVG8gZ28gZnJvbSBzZWdtZW50IHRvIGFuZ2xlLCAyKnBpICogKHNlZ21lbnQvc2VnbWVudENvdW50KVxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50IGluZGV4LCBpbmRleCAtIChzZWdtZW50KjYpXG4vL1xudmVjMyBnZXRDb25lUG9zaXRpb24odmVjMyBkLCBmbG9hdCByYXdJbmRleCwgZmxvYXQgY29uZU9mZnNldCwgb3V0IHZlYzMgbm9ybWFsKSB7XG5cbiAgY29uc3QgZmxvYXQgc2VnbWVudENvdW50ID0gOC4wO1xuXG4gIGZsb2F0IGluZGV4ID0gcmF3SW5kZXggLSBmbG9vcihyYXdJbmRleCAvXG4gICAgKHNlZ21lbnRDb3VudCAqIDYuMCkpICpcbiAgICAoc2VnbWVudENvdW50ICogNi4wKTtcblxuICBmbG9hdCBzZWdtZW50ID0gZmxvb3IoMC4wMDEgKyBpbmRleC82LjApO1xuICBmbG9hdCBzZWdtZW50SW5kZXggPSBpbmRleCAtIChzZWdtZW50KjYuMCk7XG5cbiAgbm9ybWFsID0gLW5vcm1hbGl6ZShkKTtcblxuICBpZiAoc2VnbWVudEluZGV4ID4gMi45OSAmJiBzZWdtZW50SW5kZXggPCAzLjAxKSB7XG4gICAgcmV0dXJuIG1peCh2ZWMzKDAuMCksIC1kLCBjb25lT2Zmc2V0KTtcbiAgfVxuXG4gIGZsb2F0IG5leHRBbmdsZSA9IChcbiAgICAoc2VnbWVudEluZGV4ID4gMC45OSAmJiAgc2VnbWVudEluZGV4IDwgMS4wMSkgfHxcbiAgICAoc2VnbWVudEluZGV4ID4gNC45OSAmJiAgc2VnbWVudEluZGV4IDwgNS4wMSlcbiAgKSA/IDEuMCA6IDAuMDtcbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKChzZWdtZW50ICsgbmV4dEFuZ2xlKSAvIHNlZ21lbnRDb3VudCk7XG5cbiAgdmVjMyB2MSA9IG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB2ZWMzIHYyID0gdjEgLSBkO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB5ID0gdiAqIHNpbihhbmdsZSkgKiBsZW5ndGgoZCkqMC4yNTtcbiAgdmVjMyB2MyA9IHYyICsgeCArIHk7XG4gIGlmIChzZWdtZW50SW5kZXggPCAzLjApIHtcbiAgICB2ZWMzIHR4ID0gdSAqIHNpbihhbmdsZSk7XG4gICAgdmVjMyB0eSA9IHYgKiAtY29zKGFuZ2xlKTtcbiAgICB2ZWMzIHRhbmdlbnQgPSB0eCArIHR5O1xuICAgIG5vcm1hbCA9IG5vcm1hbGl6ZShjcm9zcyh2MyAtIHYxLCB0YW5nZW50KSk7XG4gIH1cblxuICBpZiAoc2VnbWVudEluZGV4ID09IDAuMCkge1xuICAgIHJldHVybiBtaXgoZCwgdmVjMygwLjApLCBjb25lT2Zmc2V0KTtcbiAgfVxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWMzIHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCBjb25lU2NhbGUsIGNvbmVPZmZzZXQ7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yKSwgcG9zaXRpb24udywgY29uZU9mZnNldCwgbm9ybWFsKTtcbiAgdmVjNCBjb25lUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQocG9zaXRpb24ueHl6LCAxLjApICsgdmVjNChYWVosIDAuMCk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGNhbWVyYUNvb3JkaW5hdGUueHl6IC89IGNhbWVyYUNvb3JkaW5hdGUudztcbiAgZl9saWdodERpcmVjdGlvbiA9IGxpZ2h0UG9zaXRpb24gLSBjYW1lcmFDb29yZGluYXRlLnh5ejtcbiAgZl9leWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfbm9ybWFsID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwgMC4wKSAqIGludmVyc2VNb2RlbCkueHl6KTtcblxuICAvLyB2ZWM0IG1fcG9zaXRpb24gID0gbW9kZWwgKiB2ZWM0KGNvbmVQb3NpdGlvbiwgMS4wKTtcbiAgdmVjNCB0X3Bvc2l0aW9uICA9IHZpZXcgKiBjb25lUG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0aW9uICogdF9wb3NpdGlvbjtcblxuICBmX2NvbG9yICAgICAgICAgID0gY29sb3I7XG4gIGZfZGF0YSAgICAgICAgICAgPSBjb25lUG9zaXRpb24ueHl6O1xuICBmX3Bvc2l0aW9uICAgICAgID0gcG9zaXRpb24ueHl6O1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCByb3VnaG5lc3MsIGZyZXNuZWwsIGthbWJpZW50LCBrZGlmZnVzZSwga3NwZWN1bGFyLCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBmX3Bvc2l0aW9uKSkgZGlzY2FyZDtcbiAgdmVjMyBOID0gbm9ybWFsaXplKGZfbm9ybWFsKTtcbiAgdmVjMyBMID0gbm9ybWFsaXplKGZfbGlnaHREaXJlY3Rpb24pO1xuICB2ZWMzIFYgPSBub3JtYWxpemUoZl9leWVEaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtaW4oMS4wLCBtYXgoMC4wLCBjb29rVG9ycmFuY2VTcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MsIGZyZXNuZWwpKSk7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIHZlYzQgc3VyZmFjZUNvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KTtcbiAgdmVjNCBsaXRDb2xvciA9IHN1cmZhY2VDb2xvci5hICogdmVjNChkaWZmdXNlICogc3VyZmFjZUNvbG9yLnJnYiArIGtzcGVjdWxhciAqIHZlYzMoMSwxLDEpICogc3BlY3VsYXIsICAxLjApO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGxpdENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgY29uZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSBjb25lIHdpdGggaXRzIHRvcCBhdCBvcmlnaW4gYW5kIGhlaWdodCBvZiAxLjAsXG4vLyBwb2ludGluZyBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYXR0cmlidXRlLlxuLy9cbi8vIEVhY2ggY29uZSBpcyBtYWRlIHVwIG9mIGEgdG9wIHZlcnRleCwgYSBjZW50ZXIgYmFzZSB2ZXJ0ZXggYW5kIGJhc2UgcGVyaW1ldGVyIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSBjb25lIGJ5IHRoZSBmb2xsb3dpbmc6XG4vLyAgIHNlZ21lbnQgKyAwIHRvcCB2ZXJ0ZXhcbi8vICAgc2VnbWVudCArIDEgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vICAgc2VnbWVudCArIDIgcGVyaW1ldGVyIHZlcnRleCBhXG4vLyAgIHNlZ21lbnQgKyAzIGNlbnRlciBiYXNlIHZlcnRleFxuLy8gICBzZWdtZW50ICsgNCBwZXJpbWV0ZXIgdmVydGV4IGFcbi8vICAgc2VnbWVudCArIDUgcGVyaW1ldGVyIHZlcnRleCBhKzFcbi8vIFdoZXJlIHNlZ21lbnQgaXMgdGhlIG51bWJlciBvZiB0aGUgcmFkaWFsIHNlZ21lbnQgKiA2IGFuZCBhIGlzIHRoZSBhbmdsZSBhdCB0aGF0IHJhZGlhbCBzZWdtZW50LlxuLy8gVG8gZ28gZnJvbSBpbmRleCB0byBzZWdtZW50LCBmbG9vcihpbmRleCAvIDYpXG4vLyBUbyBnbyBmcm9tIHNlZ21lbnQgdG8gYW5nbGUsIDIqcGkgKiAoc2VnbWVudC9zZWdtZW50Q291bnQpXG4vLyBUbyBnbyBmcm9tIGluZGV4IHRvIHNlZ21lbnQgaW5kZXgsIGluZGV4IC0gKHNlZ21lbnQqNilcbi8vXG52ZWMzIGdldENvbmVQb3NpdGlvbih2ZWMzIGQsIGZsb2F0IHJhd0luZGV4LCBmbG9hdCBjb25lT2Zmc2V0LCBvdXQgdmVjMyBub3JtYWwpIHtcblxuICBjb25zdCBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgaW5kZXggPSByYXdJbmRleCAtIGZsb29yKHJhd0luZGV4IC9cbiAgICAoc2VnbWVudENvdW50ICogNi4wKSkgKlxuICAgIChzZWdtZW50Q291bnQgKiA2LjApO1xuXG4gIGZsb2F0IHNlZ21lbnQgPSBmbG9vcigwLjAwMSArIGluZGV4LzYuMCk7XG4gIGZsb2F0IHNlZ21lbnRJbmRleCA9IGluZGV4IC0gKHNlZ21lbnQqNi4wKTtcblxuICBub3JtYWwgPSAtbm9ybWFsaXplKGQpO1xuXG4gIGlmIChzZWdtZW50SW5kZXggPiAyLjk5ICYmIHNlZ21lbnRJbmRleCA8IDMuMDEpIHtcbiAgICByZXR1cm4gbWl4KHZlYzMoMC4wKSwgLWQsIGNvbmVPZmZzZXQpO1xuICB9XG5cbiAgZmxvYXQgbmV4dEFuZ2xlID0gKFxuICAgIChzZWdtZW50SW5kZXggPiAwLjk5ICYmICBzZWdtZW50SW5kZXggPCAxLjAxKSB8fFxuICAgIChzZWdtZW50SW5kZXggPiA0Ljk5ICYmICBzZWdtZW50SW5kZXggPCA1LjAxKVxuICApID8gMS4wIDogMC4wO1xuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoKHNlZ21lbnQgKyBuZXh0QW5nbGUpIC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHYxID0gbWl4KGQsIHZlYzMoMC4wKSwgY29uZU9mZnNldCk7XG4gIHZlYzMgdjIgPSB2MSAtIGQ7XG5cbiAgdmVjMyB1ID0gZ2V0T3J0aG9nb25hbFZlY3RvcihkKTtcbiAgdmVjMyB2ID0gbm9ybWFsaXplKGNyb3NzKHUsIGQpKTtcblxuICB2ZWMzIHggPSB1ICogY29zKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKSowLjI1O1xuICB2ZWMzIHYzID0gdjIgKyB4ICsgeTtcbiAgaWYgKHNlZ21lbnRJbmRleCA8IDMuMCkge1xuICAgIHZlYzMgdHggPSB1ICogc2luKGFuZ2xlKTtcbiAgICB2ZWMzIHR5ID0gdiAqIC1jb3MoYW5nbGUpO1xuICAgIHZlYzMgdGFuZ2VudCA9IHR4ICsgdHk7XG4gICAgbm9ybWFsID0gbm9ybWFsaXplKGNyb3NzKHYzIC0gdjEsIHRhbmdlbnQpKTtcbiAgfVxuXG4gIGlmIChzZWdtZW50SW5kZXggPT0gMC4wKSB7XG4gICAgcmV0dXJuIG1peChkLCB2ZWMzKDAuMCksIGNvbmVPZmZzZXQpO1xuICB9XG4gIHJldHVybiB2Mztcbn1cblxuYXR0cmlidXRlIHZlYzQgdmVjdG9yO1xuYXR0cmlidXRlIHZlYzQgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCB2ZWN0b3JTY2FsZSwgY29uZVNjYWxlLCBjb25lT2Zmc2V0O1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldENvbmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICgodmVjdG9yU2NhbGUgKiBjb25lU2NhbGUpICogdmVjdG9yLnh5eiksIHBvc2l0aW9uLncsIGNvbmVPZmZzZXQsIG5vcm1hbCk7XG4gIHZlYzQgY29uZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogY29uZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzMifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWMzIn1dfX0se2dsc2xpZnk6NDI0fV0sMjYxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXswOiJOT05FIiwxOiJPTkUiLDI6IkxJTkVfTE9PUCIsMzoiTElORV9TVFJJUCIsNDoiVFJJQU5HTEVTIiw1OiJUUklBTkdMRV9TVFJJUCIsNjoiVFJJQU5HTEVfRkFOIiwyNTY6IkRFUFRIX0JVRkZFUl9CSVQiLDUxMjoiTkVWRVIiLDUxMzoiTEVTUyIsNTE0OiJFUVVBTCIsNTE1OiJMRVFVQUwiLDUxNjoiR1JFQVRFUiIsNTE3OiJOT1RFUVVBTCIsNTE4OiJHRVFVQUwiLDUxOToiQUxXQVlTIiw3Njg6IlNSQ19DT0xPUiIsNzY5OiJPTkVfTUlOVVNfU1JDX0NPTE9SIiw3NzA6IlNSQ19BTFBIQSIsNzcxOiJPTkVfTUlOVVNfU1JDX0FMUEhBIiw3NzI6IkRTVF9BTFBIQSIsNzczOiJPTkVfTUlOVVNfRFNUX0FMUEhBIiw3NzQ6IkRTVF9DT0xPUiIsNzc1OiJPTkVfTUlOVVNfRFNUX0NPTE9SIiw3NzY6IlNSQ19BTFBIQV9TQVRVUkFURSIsMTAyNDoiU1RFTkNJTF9CVUZGRVJfQklUIiwxMDI4OiJGUk9OVCIsMTAyOToiQkFDSyIsMTAzMjoiRlJPTlRfQU5EX0JBQ0siLDEyODA6IklOVkFMSURfRU5VTSIsMTI4MToiSU5WQUxJRF9WQUxVRSIsMTI4MjoiSU5WQUxJRF9PUEVSQVRJT04iLDEyODU6Ik9VVF9PRl9NRU1PUlkiLDEyODY6IklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIiwyMzA0OiJDVyIsMjMwNToiQ0NXIiwyODQ5OiJMSU5FX1dJRFRIIiwyODg0OiJDVUxMX0ZBQ0UiLDI4ODU6IkNVTExfRkFDRV9NT0RFIiwyODg2OiJGUk9OVF9GQUNFIiwyOTI4OiJERVBUSF9SQU5HRSIsMjkyOToiREVQVEhfVEVTVCIsMjkzMDoiREVQVEhfV1JJVEVNQVNLIiwyOTMxOiJERVBUSF9DTEVBUl9WQUxVRSIsMjkzMjoiREVQVEhfRlVOQyIsMjk2MDoiU1RFTkNJTF9URVNUIiwyOTYxOiJTVEVOQ0lMX0NMRUFSX1ZBTFVFIiwyOTYyOiJTVEVOQ0lMX0ZVTkMiLDI5NjM6IlNURU5DSUxfVkFMVUVfTUFTSyIsMjk2NDoiU1RFTkNJTF9GQUlMIiwyOTY1OiJTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCIsMjk2NjoiU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MiLDI5Njc6IlNURU5DSUxfUkVGIiwyOTY4OiJTVEVOQ0lMX1dSSVRFTUFTSyIsMjk3ODoiVklFV1BPUlQiLDMwMjQ6IkRJVEhFUiIsMzA0MjoiQkxFTkQiLDMwODg6IlNDSVNTT1JfQk9YIiwzMDg5OiJTQ0lTU09SX1RFU1QiLDMxMDY6IkNPTE9SX0NMRUFSX1ZBTFVFIiwzMTA3OiJDT0xPUl9XUklURU1BU0siLDMzMTc6IlVOUEFDS19BTElHTk1FTlQiLDMzMzM6IlBBQ0tfQUxJR05NRU5UIiwzMzc5OiJNQVhfVEVYVFVSRV9TSVpFIiwzMzg2OiJNQVhfVklFV1BPUlRfRElNUyIsMzQwODoiU1VCUElYRUxfQklUUyIsMzQxMDoiUkVEX0JJVFMiLDM0MTE6IkdSRUVOX0JJVFMiLDM0MTI6IkJMVUVfQklUUyIsMzQxMzoiQUxQSEFfQklUUyIsMzQxNDoiREVQVEhfQklUUyIsMzQxNToiU1RFTkNJTF9CSVRTIiwzNTUzOiJURVhUVVJFXzJEIiw0MzUyOiJET05UX0NBUkUiLDQzNTM6IkZBU1RFU1QiLDQzNTQ6Ik5JQ0VTVCIsNTEyMDoiQllURSIsNTEyMToiVU5TSUdORURfQllURSIsNTEyMjoiU0hPUlQiLDUxMjM6IlVOU0lHTkVEX1NIT1JUIiw1MTI0OiJJTlQiLDUxMjU6IlVOU0lHTkVEX0lOVCIsNTEyNjoiRkxPQVQiLDUzODY6IklOVkVSVCIsNTg5MDoiVEVYVFVSRSIsNjQwMToiU1RFTkNJTF9JTkRFWCIsNjQwMjoiREVQVEhfQ09NUE9ORU5UIiw2NDA2OiJBTFBIQSIsNjQwNzoiUkdCIiw2NDA4OiJSR0JBIiw2NDA5OiJMVU1JTkFOQ0UiLDY0MTA6IkxVTUlOQU5DRV9BTFBIQSIsNzY4MDoiS0VFUCIsNzY4MToiUkVQTEFDRSIsNzY4MjoiSU5DUiIsNzY4MzoiREVDUiIsNzkzNjoiVkVORE9SIiw3OTM3OiJSRU5ERVJFUiIsNzkzODoiVkVSU0lPTiIsOTcyODoiTkVBUkVTVCIsOTcyOToiTElORUFSIiw5OTg0OiJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiw5OTg1OiJMSU5FQVJfTUlQTUFQX05FQVJFU1QiLDk5ODY6Ik5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsOTk4NzoiTElORUFSX01JUE1BUF9MSU5FQVIiLDEwMjQwOiJURVhUVVJFX01BR19GSUxURVIiLDEwMjQxOiJURVhUVVJFX01JTl9GSUxURVIiLDEwMjQyOiJURVhUVVJFX1dSQVBfUyIsMTAyNDM6IlRFWFRVUkVfV1JBUF9UIiwxMDQ5NzoiUkVQRUFUIiwxMDc1MjoiUE9MWUdPTl9PRkZTRVRfVU5JVFMiLDE2Mzg0OiJDT0xPUl9CVUZGRVJfQklUIiwzMjc2OToiQ09OU1RBTlRfQ09MT1IiLDMyNzcwOiJPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IiLDMyNzcxOiJDT05TVEFOVF9BTFBIQSIsMzI3NzI6Ik9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSIsMzI3NzM6IkJMRU5EX0NPTE9SIiwzMjc3NDoiRlVOQ19BREQiLDMyNzc3OiJCTEVORF9FUVVBVElPTl9SR0IiLDMyNzc4OiJGVU5DX1NVQlRSQUNUIiwzMjc3OToiRlVOQ19SRVZFUlNFX1NVQlRSQUNUIiwzMjgxOToiVU5TSUdORURfU0hPUlRfNF80XzRfNCIsMzI4MjA6IlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiLDMyODIzOiJQT0xZR09OX09GRlNFVF9GSUxMIiwzMjgyNDoiUE9MWUdPTl9PRkZTRVRfRkFDVE9SIiwzMjg1NDoiUkdCQTQiLDMyODU1OiJSR0I1X0ExIiwzMjg3MzoiVEVYVFVSRV9CSU5ESU5HXzJEIiwzMjkyNjoiU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFIiwzMjkyODoiU0FNUExFX0NPVkVSQUdFIiwzMjkzNjoiU0FNUExFX0JVRkZFUlMiLDMyOTM3OiJTQU1QTEVTIiwzMjkzODoiU0FNUExFX0NPVkVSQUdFX1ZBTFVFIiwzMjkzOToiU0FNUExFX0NPVkVSQUdFX0lOVkVSVCIsMzI5Njg6IkJMRU5EX0RTVF9SR0IiLDMyOTY5OiJCTEVORF9TUkNfUkdCIiwzMjk3MDoiQkxFTkRfRFNUX0FMUEhBIiwzMjk3MToiQkxFTkRfU1JDX0FMUEhBIiwzMzA3MToiQ0xBTVBfVE9fRURHRSIsMzMxNzA6IkdFTkVSQVRFX01JUE1BUF9ISU5UIiwzMzE4OToiREVQVEhfQ09NUE9ORU5UMTYiLDMzMzA2OiJERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQiLDMzNjM1OiJVTlNJR05FRF9TSE9SVF81XzZfNSIsMzM2NDg6Ik1JUlJPUkVEX1JFUEVBVCIsMzM5MDE6IkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSIsMzM5MDI6IkFMSUFTRURfTElORV9XSURUSF9SQU5HRSIsMzM5ODQ6IlRFWFRVUkUwIiwzMzk4NToiVEVYVFVSRTEiLDMzOTg2OiJURVhUVVJFMiIsMzM5ODc6IlRFWFRVUkUzIiwzMzk4ODoiVEVYVFVSRTQiLDMzOTg5OiJURVhUVVJFNSIsMzM5OTA6IlRFWFRVUkU2IiwzMzk5MToiVEVYVFVSRTciLDMzOTkyOiJURVhUVVJFOCIsMzM5OTM6IlRFWFRVUkU5IiwzMzk5NDoiVEVYVFVSRTEwIiwzMzk5NToiVEVYVFVSRTExIiwzMzk5NjoiVEVYVFVSRTEyIiwzMzk5NzoiVEVYVFVSRTEzIiwzMzk5ODoiVEVYVFVSRTE0IiwzMzk5OToiVEVYVFVSRTE1IiwzNGUzOiJURVhUVVJFMTYiLDM0MDAxOiJURVhUVVJFMTciLDM0MDAyOiJURVhUVVJFMTgiLDM0MDAzOiJURVhUVVJFMTkiLDM0MDA0OiJURVhUVVJFMjAiLDM0MDA1OiJURVhUVVJFMjEiLDM0MDA2OiJURVhUVVJFMjIiLDM0MDA3OiJURVhUVVJFMjMiLDM0MDA4OiJURVhUVVJFMjQiLDM0MDA5OiJURVhUVVJFMjUiLDM0MDEwOiJURVhUVVJFMjYiLDM0MDExOiJURVhUVVJFMjciLDM0MDEyOiJURVhUVVJFMjgiLDM0MDEzOiJURVhUVVJFMjkiLDM0MDE0OiJURVhUVVJFMzAiLDM0MDE1OiJURVhUVVJFMzEiLDM0MDE2OiJBQ1RJVkVfVEVYVFVSRSIsMzQwMjQ6Ik1BWF9SRU5ERVJCVUZGRVJfU0laRSIsMzQwNDE6IkRFUFRIX1NURU5DSUwiLDM0MDU1OiJJTkNSX1dSQVAiLDM0MDU2OiJERUNSX1dSQVAiLDM0MDY3OiJURVhUVVJFX0NVQkVfTUFQIiwzNDA2ODoiVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQIiwzNDA2OToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YIiwzNDA3MDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YIiwzNDA3MToiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZIiwzNDA3MjoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZIiwzNDA3MzoiVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aIiwzNDA3NDoiVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aIiwzNDA3NjoiTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSIsMzQzMzg6IlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCIsMzQzMzk6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSIsMzQzNDA6IlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFIiwzNDM0MToiVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFIiwzNDM0MjoiQ1VSUkVOVF9WRVJURVhfQVRUUklCIiwzNDM3MzoiVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSIiwzNDQ2NjoiTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTIiwzNDQ2NzoiQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMiLDM0NjYwOiJCVUZGRVJfU0laRSIsMzQ2NjE6IkJVRkZFUl9VU0FHRSIsMzQ4MTY6IlNURU5DSUxfQkFDS19GVU5DIiwzNDgxNzoiU1RFTkNJTF9CQUNLX0ZBSUwiLDM0ODE4OiJTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMIiwzNDgxOToiU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyIsMzQ4Nzc6IkJMRU5EX0VRVUFUSU9OX0FMUEhBIiwzNDkyMToiTUFYX1ZFUlRFWF9BVFRSSUJTIiwzNDkyMjoiVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEIiwzNDkzMDoiTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMiLDM0OTYyOiJBUlJBWV9CVUZGRVIiLDM0OTYzOiJFTEVNRU5UX0FSUkFZX0JVRkZFUiIsMzQ5NjQ6IkFSUkFZX0JVRkZFUl9CSU5ESU5HIiwzNDk2NToiRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyIsMzQ5NzU6IlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkciLDM1MDQwOiJTVFJFQU1fRFJBVyIsMzUwNDQ6IlNUQVRJQ19EUkFXIiwzNTA0ODoiRFlOQU1JQ19EUkFXIiwzNTYzMjoiRlJBR01FTlRfU0hBREVSIiwzNTYzMzoiVkVSVEVYX1NIQURFUiIsMzU2NjA6Ik1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyIsMzU2NjE6Ik1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTIiwzNTY2MzoiU0hBREVSX1RZUEUiLDM1NjY0OiJGTE9BVF9WRUMyIiwzNTY2NToiRkxPQVRfVkVDMyIsMzU2NjY6IkZMT0FUX1ZFQzQiLDM1NjY3OiJJTlRfVkVDMiIsMzU2Njg6IklOVF9WRUMzIiwzNTY2OToiSU5UX1ZFQzQiLDM1NjcwOiJCT09MIiwzNTY3MToiQk9PTF9WRUMyIiwzNTY3MjoiQk9PTF9WRUMzIiwzNTY3MzoiQk9PTF9WRUM0IiwzNTY3NDoiRkxPQVRfTUFUMiIsMzU2NzU6IkZMT0FUX01BVDMiLDM1Njc2OiJGTE9BVF9NQVQ0IiwzNTY3ODoiU0FNUExFUl8yRCIsMzU2ODA6IlNBTVBMRVJfQ1VCRSIsMzU3MTI6IkRFTEVURV9TVEFUVVMiLDM1NzEzOiJDT01QSUxFX1NUQVRVUyIsMzU3MTQ6IkxJTktfU1RBVFVTIiwzNTcxNToiVkFMSURBVEVfU1RBVFVTIiwzNTcxNjoiSU5GT19MT0dfTEVOR1RIIiwzNTcxNzoiQVRUQUNIRURfU0hBREVSUyIsMzU3MTg6IkFDVElWRV9VTklGT1JNUyIsMzU3MTk6IkFDVElWRV9VTklGT1JNX01BWF9MRU5HVEgiLDM1NzIwOiJTSEFERVJfU09VUkNFX0xFTkdUSCIsMzU3MjE6IkFDVElWRV9BVFRSSUJVVEVTIiwzNTcyMjoiQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIIiwzNTcyNDoiU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OIiwzNTcyNToiQ1VSUkVOVF9QUk9HUkFNIiwzNjAwMzoiU1RFTkNJTF9CQUNLX1JFRiIsMzYwMDQ6IlNURU5DSUxfQkFDS19WQUxVRV9NQVNLIiwzNjAwNToiU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyIsMzYwMDY6IkZSQU1FQlVGRkVSX0JJTkRJTkciLDM2MDA3OiJSRU5ERVJCVUZGRVJfQklORElORyIsMzYwNDg6IkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUiLDM2MDQ5OiJGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FIiwzNjA1MDoiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMIiwzNjA1MToiRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UiLDM2MDUzOiJGUkFNRUJVRkZFUl9DT01QTEVURSIsMzYwNTQ6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCIsMzYwNTU6IkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hNRU5UIiwzNjA1NzoiRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TIiwzNjA2MToiRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQiLDM2MDY0OiJDT0xPUl9BVFRBQ0hNRU5UMCIsMzYwOTY6IkRFUFRIX0FUVEFDSE1FTlQiLDM2MTI4OiJTVEVOQ0lMX0FUVEFDSE1FTlQiLDM2MTYwOiJGUkFNRUJVRkZFUiIsMzYxNjE6IlJFTkRFUkJVRkZFUiIsMzYxNjI6IlJFTkRFUkJVRkZFUl9XSURUSCIsMzYxNjM6IlJFTkRFUkJVRkZFUl9IRUlHSFQiLDM2MTY0OiJSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUIiwzNjE2ODoiU1RFTkNJTF9JTkRFWDgiLDM2MTc2OiJSRU5ERVJCVUZGRVJfUkVEX1NJWkUiLDM2MTc3OiJSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSIsMzYxNzg6IlJFTkRFUkJVRkZFUl9CTFVFX1NJWkUiLDM2MTc5OiJSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSIsMzYxODA6IlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFIiwzNjE4MToiUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSIsMzYxOTQ6IlJHQjU2NSIsMzYzMzY6IkxPV19GTE9BVCIsMzYzMzc6Ik1FRElVTV9GTE9BVCIsMzYzMzg6IkhJR0hfRkxPQVQiLDM2MzM5OiJMT1dfSU5UIiwzNjM0MDoiTUVESVVNX0lOVCIsMzYzNDE6IkhJR0hfSU5UIiwzNjM0NjoiU0hBREVSX0NPTVBJTEVSIiwzNjM0NzoiTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMiLDM2MzQ4OiJNQVhfVkFSWUlOR19WRUNUT1JTIiwzNjM0OToiTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyIsMzc0NDA6IlVOUEFDS19GTElQX1lfV0VCR0wiLDM3NDQxOiJVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wiLDM3NDQyOiJDT05URVhUX0xPU1RfV0VCR0wiLDM3NDQzOiJVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIiwzNzQ0NDoiQlJPV1NFUl9ERUZBVUxUX1dFQkdMIn19LHt9XSwyNjI6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLzEuMC9udW1iZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfX0seyIuLzEuMC9udW1iZXJzIjoyNjF9XSwyNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUpLG89aShlLFt7YnVmZmVyOnIsdHlwZTplLkZMT0FULHNpemU6MyxvZmZzZXQ6MCxzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTo0LG9mZnNldDoxMixzdHJpZGU6NDB9LHtidWZmZXI6cix0eXBlOmUuRkxPQVQsc2l6ZTozLG9mZnNldDoyOCxzdHJpZGU6NDB9XSksbD1hKGUpO2wuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGwuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0xLGwuYXR0cmlidXRlcy5vZmZzZXQubG9jYXRpb249Mjt2YXIgYz1uZXcgcyhlLHIsbyxsKTtyZXR1cm4gYy51cGRhdGUodCksY307dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpLG89WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIHModCxlLHIsbil7dGhpcy5nbD10LHRoaXMuc2hhZGVyPW4sdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuYm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuY2xpcEJvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMuY2FwU2l6ZT1bMTAsMTAsMTBdLHRoaXMubGluZUNvdW50PVswLDAsMF0sdGhpcy5saW5lT2Zmc2V0PVswLDAsMF0sdGhpcy5vcGFjaXR5PTEsdGhpcy5oYXNBbHBoYT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil0WzBdW3JdPU1hdGgubWluKHRbMF1bcl0sZVtyXSksdFsxXVtyXT1NYXRoLm1heCh0WzFdW3JdLGVbcl0pfWwuaXNPcGFxdWU9ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5oYXNBbHBoYX0sbC5pc1RyYW5zcGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzQWxwaGF9LGwuZHJhd1RyYW5zcGFyZW50PWwuZHJhdz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5zaGFkZXIudW5pZm9ybXM7dGhpcy5zaGFkZXIuYmluZCgpO3ZhciBuPXIudmlldz10LnZpZXd8fG8saT1yLnByb2plY3Rpb249dC5wcm9qZWN0aW9ufHxvO3IubW9kZWw9dC5tb2RlbHx8byxyLmNsaXBCb3VuZHM9dGhpcy5jbGlwQm91bmRzLHIub3BhY2l0eT10aGlzLm9wYWNpdHk7dmFyIGE9blsxMl0scz1uWzEzXSxsPW5bMTRdLGM9blsxNV0sdT0odC5fb3J0aG98fCExPzI6MSkqdGhpcy5waXhlbFJhdGlvKihpWzNdKmEraVs3XSpzK2lbMTFdKmwraVsxNV0qYykvZS5kcmF3aW5nQnVmZmVySGVpZ2h0O3RoaXMudmFvLmJpbmQoKTtmb3IodmFyIGY9MDtmPDM7KytmKWUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoW2ZdKnRoaXMucGl4ZWxSYXRpbyksci5jYXBTaXplPXRoaXMuY2FwU2l6ZVtmXSp1LHRoaXMubGluZUNvdW50W2ZdJiZlLmRyYXdBcnJheXMoZS5MSU5FUyx0aGlzLmxpbmVPZmZzZXRbZl0sdGhpcy5saW5lQ291bnRbZl0pO3RoaXMudmFvLnVuYmluZCgpfTt2YXIgdT1mdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoMyksZT0wO2U8MzsrK2Upe2Zvcih2YXIgcj1bXSxuPTE7bjw9MjsrK24pZm9yKHZhciBpPS0xO2k8PTE7aSs9Mil7dmFyIGE9WzAsMCwwXTthWyhuK2UpJTNdPWksci5wdXNoKGEpfXRbZV09cn1yZXR1cm4gdH0oKTtmdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT11W25dLGE9MDthPGkubGVuZ3RoOysrYSl7dmFyIG89aVthXTt0LnB1c2goZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0sclszXSxvWzBdLG9bMV0sb1syXSl9cmV0dXJuIGkubGVuZ3RofWwudXBkYXRlPWZ1bmN0aW9uKHQpeyJsaW5lV2lkdGgiaW4odD10fHx7fSkmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCxBcnJheS5pc0FycmF5KHRoaXMubGluZVdpZHRoKXx8KHRoaXMubGluZVdpZHRoPVt0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aCx0aGlzLmxpbmVXaWR0aF0pKSwiY2FwU2l6ZSJpbiB0JiYodGhpcy5jYXBTaXplPXQuY2FwU2l6ZSxBcnJheS5pc0FycmF5KHRoaXMuY2FwU2l6ZSl8fCh0aGlzLmNhcFNpemU9W3RoaXMuY2FwU2l6ZSx0aGlzLmNhcFNpemUsdGhpcy5jYXBTaXplXSkpLHRoaXMuaGFzQWxwaGE9ITEsIm9wYWNpdHkiaW4gdCYmKHRoaXMub3BhY2l0eT0rdC5vcGFjaXR5LHRoaXMub3BhY2l0eTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpO3ZhciBlPXQuY29sb3J8fFtbMCwwLDBdLFswLDAsMF0sWzAsMCwwXV0scj10LnBvc2l0aW9uLG49dC5lcnJvcjtpZihBcnJheS5pc0FycmF5KGVbMF0pfHwoZT1bZSxlLGVdKSxyJiZuKXt2YXIgaT1bXSxhPXIubGVuZ3RoLG89MDt0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmxpbmVDb3VudD1bMCwwLDBdO2Zvcih2YXIgcz0wO3M8MzsrK3Mpe3RoaXMubGluZU9mZnNldFtzXT1vO3Q6Zm9yKHZhciBsPTA7bDxhOysrbCl7Zm9yKHZhciB1PXJbbF0saD0wO2g8MzsrK2gpaWYoaXNOYU4odVtoXSl8fCFpc0Zpbml0ZSh1W2hdKSljb250aW51ZSB0O3ZhciBwPW5bbF0sZD1lW3NdO2lmKEFycmF5LmlzQXJyYXkoZFswXSkmJihkPWVbbF0pLDM9PT1kLmxlbmd0aD9kPVtkWzBdLGRbMV0sZFsyXSwxXTo0PT09ZC5sZW5ndGgmJihkPVtkWzBdLGRbMV0sZFsyXSxkWzNdXSwhdGhpcy5oYXNBbHBoYSYmZFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpLCFpc05hTihwWzBdW3NdKSYmIWlzTmFOKHBbMV1bc10pKXt2YXIgbTtpZihwWzBdW3NdPDApKG09dS5zbGljZSgpKVtzXSs9cFswXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKTtpZihwWzFdW3NdPjApKG09dS5zbGljZSgpKVtzXSs9cFsxXVtzXSxpLnB1c2godVswXSx1WzFdLHVbMl0sZFswXSxkWzFdLGRbMl0sZFszXSwwLDAsMCxtWzBdLG1bMV0sbVsyXSxkWzBdLGRbMV0sZFsyXSxkWzNdLDAsMCwwKSxjKHRoaXMuYm91bmRzLG0pLG8rPTIrZihpLG0sZCxzKX19dGhpcy5saW5lQ291bnRbc109by10aGlzLmxpbmVPZmZzZXRbc119dGhpcy5idWZmZXIudXBkYXRlKGkpfX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKSx0aGlzLnZhby5kaXNwb3NlKCl9fSx7Ii4vc2hhZGVycy9pbmRleCI6MjY0LCJnbC1idWZmZXIiOjI1NywiZ2wtdmFvIjozNDN9XSwyNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb24sIG9mZnNldDtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uO1xudW5pZm9ybSBmbG9hdCBjYXBTaXplO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uICA9IG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgd29ybGRQb3NpdGlvbiAgICAgICA9ICh3b3JsZFBvc2l0aW9uIC8gd29ybGRQb3NpdGlvbi53KSArIHZlYzQoY2FwU2l6ZSAqIG9mZnNldCwgMC4wKTtcbiAgZ2xfUG9zaXRpb24gICAgICAgICA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZnJhZ0NvbG9yICAgICAgICAgICA9IGNvbG9yO1xuICBmcmFnUG9zaXRpb24gICAgICAgID0gcG9zaXRpb247XG59Il0pLG89bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbnZhcnlpbmcgdmVjMyBmcmFnUG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZyYWdQb3NpdGlvbikgfHxcbiAgICBmcmFnQ29sb3IuYSAqIG9wYWNpdHkgPT0gMC5cbiAgKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IG9wYWNpdHkgKiBmcmFnQ29sb3I7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToib2Zmc2V0Iix0eXBlOiJ2ZWMzIn1dKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtdGV4dHVyZTJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2l8fChpPXQuRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQsYT10LkZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCxvPXQuRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TLHM9dC5GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCk7dmFyIGM9dC5nZXRFeHRlbnNpb24oIldFQkdMX2RyYXdfYnVmZmVycyIpOyFsJiZjJiZmdW5jdGlvbih0LGUpe3ZhciByPXQuZ2V0UGFyYW1ldGVyKGUuTUFYX0NPTE9SX0FUVEFDSE1FTlRTX1dFQkdMKTtsPW5ldyBBcnJheShyKzEpO2Zvcih2YXIgbj0wO248PXI7KytuKXtmb3IodmFyIGk9bmV3IEFycmF5KHIpLGE9MDthPG47KythKWlbYV09dC5DT0xPUl9BVFRBQ0hNRU5UMCthO2ZvcihhPW47YTxyOysrYSlpW2FdPXQuTk9ORTtsW25dPWl9fSh0LGMpO0FycmF5LmlzQXJyYXkoZSkmJihuPXIscj0wfGVbMV0sZT0wfGVbMF0pO2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogTWlzc2luZyBzaGFwZSBwYXJhbWV0ZXIiKTt2YXIgdT10LmdldFBhcmFtZXRlcih0Lk1BWF9SRU5ERVJCVUZGRVJfU0laRSk7aWYoZTwwfHxlPnV8fHI8MHx8cj51KXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBQYXJhbWV0ZXJzIGFyZSB0b28gbGFyZ2UgZm9yIEZCTyIpO3ZhciBmPTE7aWYoImNvbG9yImluKG49bnx8e30pKXtpZigoZj1NYXRoLm1heCgwfG4uY29sb3IsMCkpPDApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IE11c3Qgc3BlY2lmeSBhIG5vbm5lZ2F0aXZlIG51bWJlciBvZiBjb2xvcnMiKTtpZihmPjEpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBNdWx0aXBsZSBkcmF3IGJ1ZmZlciBleHRlbnNpb24gbm90IHN1cHBvcnRlZCIpO2lmKGY+dC5nZXRQYXJhbWV0ZXIoYy5NQVhfQ09MT1JfQVRUQUNITUVOVFNfV0VCR0wpKXRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBDb250ZXh0IGRvZXMgbm90IHN1cHBvcnQgIitmKyIgZHJhdyBidWZmZXJzIil9fXZhciBoPXQuVU5TSUdORURfQllURSxwPXQuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdCIpO2lmKG4uZmxvYXQmJmY+MCl7aWYoIXApdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENvbnRleHQgZG9lcyBub3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcyIpO2g9dC5GTE9BVH1lbHNlIG4ucHJlZmVyRmxvYXQmJmY+MCYmcCYmKGg9dC5GTE9BVCk7dmFyIG09ITA7ImRlcHRoImluIG4mJihtPSEhbi5kZXB0aCk7dmFyIGc9ITE7InN0ZW5jaWwiaW4gbiYmKGc9ISFuLnN0ZW5jaWwpO3JldHVybiBuZXcgZCh0LGUscixoLGYsbSxnLGMpfTt2YXIgaSxhLG8scyxsPW51bGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm5bdC5nZXRQYXJhbWV0ZXIodC5GUkFNRUJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlJFTkRFUkJVRkZFUl9CSU5ESU5HKSx0LmdldFBhcmFtZXRlcih0LlRFWFRVUkVfQklORElOR18yRCldfWZ1bmN0aW9uIHUodCxlKXt0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLGVbMF0pLHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixlWzFdKSx0LmJpbmRUZXh0dXJlKHQuVEVYVFVSRV8yRCxlWzJdKX1mdW5jdGlvbiBmKHQpe3N3aXRjaCh0KXtjYXNlIGk6dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIHVuc3VwcG9ydGVkIik7Y2FzZSBhOnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIGF0dGFjaG1lbnQiKTtjYXNlIG86dGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IEZyYW1lYnVmZmVyIGluY29tcGxldGUgZGltZW5zaW9ucyIpO2Nhc2Ugczp0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogRnJhbWVidWZmZXIgaW5jb21wbGV0ZSBtaXNzaW5nIGF0dGFjaG1lbnQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiZ2wtZmJvOiBGcmFtZWJ1ZmZlciBmYWlsZWQgZm9yIHVuc3BlY2lmaWVkIHJlYXNvbiIpfX1mdW5jdGlvbiBoKHQsZSxyLGksYSxvKXtpZighaSlyZXR1cm4gbnVsbDt2YXIgcz1uKHQsZSxyLGEsaSk7cmV0dXJuIHMubWFnRmlsdGVyPXQuTkVBUkVTVCxzLm1pbkZpbHRlcj10Lk5FQVJFU1Qscy5taXBTYW1wbGVzPTEscy5iaW5kKCksdC5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0LkZSQU1FQlVGRkVSLG8sdC5URVhUVVJFXzJELHMuaGFuZGxlLDApLHN9ZnVuY3Rpb24gcCh0LGUscixuLGkpe3ZhciBhPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHQuYmluZFJlbmRlcmJ1ZmZlcih0LlJFTkRFUkJVRkZFUixhKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UodC5SRU5ERVJCVUZGRVIsbixlLHIpLHQuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodC5GUkFNRUJVRkZFUixpLHQuUkVOREVSQlVGRkVSLGEpLGF9ZnVuY3Rpb24gZCh0LGUscixuLGksYSxvLHMpe3RoaXMuZ2w9dCx0aGlzLl9zaGFwZT1bMHxlLDB8cl0sdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2V4dD1zLHRoaXMuY29sb3I9bmV3IEFycmF5KGkpO2Zvcih2YXIgZD0wO2Q8aTsrK2QpdGhpcy5jb2xvcltkXT1udWxsO3RoaXMuX2NvbG9yX3JiPW51bGwsdGhpcy5kZXB0aD1udWxsLHRoaXMuX2RlcHRoX3JiPW51bGwsdGhpcy5fY29sb3JUeXBlPW4sdGhpcy5fdXNlRGVwdGg9YSx0aGlzLl91c2VTdGVuY2lsPW87dmFyIG09dGhpcyxnPVswfGUsMHxyXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhnLHswOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbS5fc2hhcGVbMF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gbS53aWR0aD10fX0sMTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG0uX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG0uaGVpZ2h0PXR9fX0pLHRoaXMuX3NoYXBlVmVjdG9yPWcsZnVuY3Rpb24odCl7dmFyIGU9Yyh0LmdsKSxyPXQuZ2wsbj10LmhhbmRsZT1yLmNyZWF0ZUZyYW1lYnVmZmVyKCksaT10Ll9zaGFwZVswXSxhPXQuX3NoYXBlWzFdLG89dC5jb2xvci5sZW5ndGgscz10Ll9leHQsZD10Ll91c2VTdGVuY2lsLG09dC5fdXNlRGVwdGgsZz10Ll9jb2xvclR5cGU7ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixuKTtmb3IodmFyIHY9MDt2PG87Kyt2KXQuY29sb3Jbdl09aChyLGksYSxnLHIuUkdCQSxyLkNPTE9SX0FUVEFDSE1FTlQwK3YpOzA9PT1vPyh0Ll9jb2xvcl9yYj1wKHIsaSxhLHIuUkdCQTQsci5DT0xPUl9BVFRBQ0hNRU5UMCkscyYmcy5kcmF3QnVmZmVyc1dFQkdMKGxbMF0pKTpvPjEmJnMuZHJhd0J1ZmZlcnNXRUJHTChsW29dKTt2YXIgeT1yLmdldEV4dGVuc2lvbigiV0VCR0xfZGVwdGhfdGV4dHVyZSIpO3k/ZD90LmRlcHRoPWgocixpLGEseS5VTlNJR05FRF9JTlRfMjRfOF9XRUJHTCxyLkRFUFRIX1NURU5DSUwsci5ERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQpOm0mJih0LmRlcHRoPWgocixpLGEsci5VTlNJR05FRF9TSE9SVCxyLkRFUFRIX0NPTVBPTkVOVCxyLkRFUFRIX0FUVEFDSE1FTlQpKTptJiZkP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9TVEVOQ0lMLHIuREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKTptP3QuX2RlcHRoX3JiPXAocixpLGEsci5ERVBUSF9DT01QT05FTlQxNixyLkRFUFRIX0FUVEFDSE1FTlQpOmQmJih0Ll9kZXB0aF9yYj1wKHIsaSxhLHIuU1RFTkNJTF9JTkRFWCxyLlNURU5DSUxfQVRUQUNITUVOVCkpO3ZhciB4PXIuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhyLkZSQU1FQlVGRkVSKTtpZih4IT09ci5GUkFNRUJVRkZFUl9DT01QTEVURSl7dC5fZGVzdHJveWVkPSEwLHIuYmluZEZyYW1lYnVmZmVyKHIuRlJBTUVCVUZGRVIsbnVsbCksci5kZWxldGVGcmFtZWJ1ZmZlcih0LmhhbmRsZSksdC5oYW5kbGU9bnVsbCx0LmRlcHRoJiYodC5kZXB0aC5kaXNwb3NlKCksdC5kZXB0aD1udWxsKSx0Ll9kZXB0aF9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2RlcHRoX3JiKSx0Ll9kZXB0aF9yYj1udWxsKTtmb3Iodj0wO3Y8dC5jb2xvci5sZW5ndGg7Kyt2KXQuY29sb3Jbdl0uZGlzcG9zZSgpLHQuY29sb3Jbdl09bnVsbDt0Ll9jb2xvcl9yYiYmKHIuZGVsZXRlUmVuZGVyYnVmZmVyKHQuX2NvbG9yX3JiKSx0Ll9jb2xvcl9yYj1udWxsKSx1KHIsZSksZih4KX11KHIsZSl9KHRoaXMpfXZhciBtPWQucHJvdG90eXBlO2Z1bmN0aW9uIGcodCxlLHIpe2lmKHQuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogQ2FuJ3QgcmVzaXplIGRlc3Ryb3llZCBGQk8iKTtpZih0Ll9zaGFwZVswXSE9PWV8fHQuX3NoYXBlWzFdIT09cil7dmFyIG49dC5nbCxpPW4uZ2V0UGFyYW1ldGVyKG4uTUFYX1JFTkRFUkJVRkZFUl9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC1mYm86IENhbid0IHJlc2l6ZSBGQk8sIGludmFsaWQgZGltZW5zaW9ucyIpO3QuX3NoYXBlWzBdPWUsdC5fc2hhcGVbMV09cjtmb3IodmFyIGE9YyhuKSxvPTA7bzx0LmNvbG9yLmxlbmd0aDsrK28pdC5jb2xvcltvXS5zaGFwZT10Ll9zaGFwZTt0Ll9jb2xvcl9yYiYmKG4uYmluZFJlbmRlcmJ1ZmZlcihuLlJFTkRFUkJVRkZFUix0Ll9jb2xvcl9yYiksbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLG4uUkdCQTQsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pKSx0LmRlcHRoJiYodC5kZXB0aC5zaGFwZT10Ll9zaGFwZSksdC5fZGVwdGhfcmImJihuLmJpbmRSZW5kZXJidWZmZXIobi5SRU5ERVJCVUZGRVIsdC5fZGVwdGhfcmIpLHQuX3VzZURlcHRoJiZ0Ll91c2VTdGVuY2lsP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX1NURU5DSUwsdC5fc2hhcGVbMF0sdC5fc2hhcGVbMV0pOnQuX3VzZURlcHRoP24ucmVuZGVyYnVmZmVyU3RvcmFnZShuLlJFTkRFUkJVRkZFUixuLkRFUFRIX0NPTVBPTkVOVDE2LHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKTp0Ll91c2VTdGVuY2lsJiZuLnJlbmRlcmJ1ZmZlclN0b3JhZ2Uobi5SRU5ERVJCVUZGRVIsbi5TVEVOQ0lMX0lOREVYLHQuX3NoYXBlWzBdLHQuX3NoYXBlWzFdKSksbi5iaW5kRnJhbWVidWZmZXIobi5GUkFNRUJVRkZFUix0LmhhbmRsZSk7dmFyIHM9bi5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKG4uRlJBTUVCVUZGRVIpO3MhPT1uLkZSQU1FQlVGRkVSX0NPTVBMRVRFJiYodC5kaXNwb3NlKCksdShuLGEpLGYocykpLHUobixhKX19T2JqZWN0LmRlZmluZVByb3BlcnRpZXMobSx7c2hhcGU6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/WzAsMF06dGhpcy5fc2hhcGVWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bMHx0LDB8dF0pLDIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLWZibzogU2hhcGUgdmVjdG9yIG11c3QgYmUgbGVuZ3RoIDIiKTt2YXIgZT0wfHRbMF0scj0wfHRbMV07cmV0dXJuIGcodGhpcyxlLHIpLFtlLHJdfSxlbnVtZXJhYmxlOiExfSx3aWR0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZD8wOnRoaXMuX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGcodGhpcyx0fD0wLHRoaXMuX3NoYXBlWzFdKSx0fSxlbnVtZXJhYmxlOiExfSxoZWlnaHQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZXN0cm95ZWQ/MDp0aGlzLl9zaGFwZVsxXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiB0fD0wLGcodGhpcyx0aGlzLl9zaGFwZVswXSx0KSx0fSxlbnVtZXJhYmxlOiExfX0pLG0uYmluZD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZXN0cm95ZWQpe3ZhciB0PXRoaXMuZ2w7dC5iaW5kRnJhbWVidWZmZXIodC5GUkFNRUJVRkZFUix0aGlzLmhhbmRsZSksdC52aWV3cG9ydCgwLDAsdGhpcy5fc2hhcGVbMF0sdGhpcy5fc2hhcGVbMV0pfX0sbS5kaXNwb3NlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl7dGhpcy5fZGVzdHJveWVkPSEwO3ZhciB0PXRoaXMuZ2w7dC5kZWxldGVGcmFtZWJ1ZmZlcih0aGlzLmhhbmRsZSksdGhpcy5oYW5kbGU9bnVsbCx0aGlzLmRlcHRoJiYodGhpcy5kZXB0aC5kaXNwb3NlKCksdGhpcy5kZXB0aD1udWxsKSx0aGlzLl9kZXB0aF9yYiYmKHQuZGVsZXRlUmVuZGVyYnVmZmVyKHRoaXMuX2RlcHRoX3JiKSx0aGlzLl9kZXB0aF9yYj1udWxsKTtmb3IodmFyIGU9MDtlPHRoaXMuY29sb3IubGVuZ3RoOysrZSl0aGlzLmNvbG9yW2VdLmRpc3Bvc2UoKSx0aGlzLmNvbG9yW2VdPW51bGw7dGhpcy5fY29sb3JfcmImJih0LmRlbGV0ZVJlbmRlcmJ1ZmZlcih0aGlzLl9jb2xvcl9yYiksdGhpcy5fY29sb3JfcmI9bnVsbCl9fX0seyJnbC10ZXh0dXJlMmQiOjMzOH1dLDI2NjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoInNwcmludGYtanMiKS5zcHJpbnRmLGk9dCgiZ2wtY29uc3RhbnRzL2xvb2t1cCIpLGE9dCgiZ2xzbC1zaGFkZXItbmFtZSIpLG89dCgiYWRkLWxpbmUtbnVtYmVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBzPWEoZSl8fCJvZiB1bmtub3duIG5hbWUgKHNlZSBucG0gZ2xzbC1zaGFkZXItbmFtZSkiLGw9InVua25vd24gdHlwZSI7dm9pZCAwIT09ciYmKGw9cj09PWkuRlJBR01FTlRfU0hBREVSPyJmcmFnbWVudCI6InZlcnRleCIpO2Zvcih2YXIgYz1uKCJFcnJvciBjb21waWxpbmcgJXMgc2hhZGVyICVzOlxuIixsLHMpLHU9bigiJXMlcyIsYyx0KSxmPXQuc3BsaXQoIlxuIiksaD17fSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07aWYoIiIhPT1kJiYiXDAiIT09ZCl7dmFyIG09cGFyc2VJbnQoZC5zcGxpdCgiOiIpWzJdKTtpZihpc05hTihtKSl0aHJvdyBuZXcgRXJyb3IobigiQ291bGQgbm90IHBhcnNlIGVycm9yOiAlcyIsZCkpO2hbbV09ZH19dmFyIGc9byhlKS5zcGxpdCgiXG4iKTtmb3IocD0wO3A8Zy5sZW5ndGg7cCsrKWlmKGhbcCszXXx8aFtwKzJdfHxoW3ArMV0pe3ZhciB2PWdbcF07aWYoYys9disiXG4iLGhbcCsxXSl7dmFyIHk9aFtwKzFdO3k9eS5zdWJzdHIoeS5zcGxpdCgiOiIsMykuam9pbigiOiIpLmxlbmd0aCsxKS50cmltKCksYys9bigiXl5eICVzXG5cbiIseSl9fXJldHVybntsb25nOmMudHJpbSgpLHNob3J0OnUudHJpbSgpfX19LHsiYWRkLWxpbmUtbnVtYmVycyI6NjgsImdsLWNvbnN0YW50cy9sb29rdXAiOjI2MiwiZ2xzbC1zaGFkZXItbmFtZSI6NDE2LCJzcHJpbnRmLWpzIjo1NDJ9XSwyNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxuPW8ocixsLnZlcnRleCxsLmZyYWdtZW50KSxpPW8ocixsLnBpY2tWZXJ0ZXgsbC5waWNrRnJhZ21lbnQpLGE9cyhyKSx1PXMociksZj1zKHIpLGg9cyhyKSxwPW5ldyBjKHQsbixpLGEsdSxmLGgpO3JldHVybiBwLnVwZGF0ZShlKSx0LmFkZE9iamVjdChwKSxwfTt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgiaW90YS1hcnJheSIpLGE9dCgidHlwZWRhcnJheS1wb29sIiksbz10KCJnbC1zaGFkZXIiKSxzPXQoImdsLWJ1ZmZlciIpLGw9dCgiLi9saWIvc2hhZGVycyIpO2Z1bmN0aW9uIGModCxlLHIsbixpLGEsbyl7dGhpcy5wbG90PXQsdGhpcy5zaGFkZXI9ZSx0aGlzLnBpY2tTaGFkZXI9cix0aGlzLnBvc2l0aW9uQnVmZmVyPW4sdGhpcy53ZWlnaHRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5pZEJ1ZmZlcj1vLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnNoYXBlPVswLDBdLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5waWNrT2Zmc2V0PTB9dmFyIHUsZj1jLnByb3RvdHlwZSxoPVswLDAsMSwwLDAsMSwxLDAsMSwxLDAsMV07Zi5kcmF3PSh1PVsxLDAsMCwwLDEsMCwwLDAsMV0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXRoaXMuYm91bmRzLG49dGhpcy5udW1WZXJ0aWNlcztpZighKG48PTApKXt2YXIgaT10LmdsLGE9dC5kYXRhQm94LG89clsyXS1yWzBdLHM9clszXS1yWzFdLGw9YVsyXS1hWzBdLGM9YVszXS1hWzFdO3VbMF09MipvL2wsdVs0XT0yKnMvYyx1WzZdPTIqKHJbMF0tYVswXSkvbC0xLHVbN109MiooclsxXS1hWzFdKS9jLTEsZS5iaW5kKCk7dmFyIGY9ZS51bmlmb3JtcztmLnZpZXdUcmFuc2Zvcm09dSxmLnNoYXBlPXRoaXMuc2hhcGU7dmFyIGg9ZS5hdHRyaWJ1dGVzO3RoaXMucG9zaXRpb25CdWZmZXIuYmluZCgpLGgucG9zaXRpb24ucG9pbnRlcigpLHRoaXMud2VpZ2h0QnVmZmVyLmJpbmQoKSxoLndlaWdodC5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMSksdGhpcy5jb2xvckJ1ZmZlci5iaW5kKCksaC5jb2xvci5wb2ludGVyKGkuVU5TSUdORURfQllURSwhMCksaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLDAsbil9fSksZi5kcmF3UGljaz1mdW5jdGlvbigpe3ZhciB0PVsxLDAsMCwwLDEsMCwwLDAsMV0sZT1bMCwwLDAsMF07cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMucGxvdCxpPXRoaXMucGlja1NoYWRlcixhPXRoaXMuYm91bmRzLG89dGhpcy5udW1WZXJ0aWNlcztpZighKG88PTApKXt2YXIgcz1uLmdsLGw9bi5kYXRhQm94LGM9YVsyXS1hWzBdLHU9YVszXS1hWzFdLGY9bFsyXS1sWzBdLGg9bFszXS1sWzFdO3RbMF09MipjL2YsdFs0XT0yKnUvaCx0WzZdPTIqKGFbMF0tbFswXSkvZi0xLHRbN109MiooYVsxXS1sWzFdKS9oLTE7Zm9yKHZhciBwPTA7cDw0OysrcCllW3BdPXI+PjgqcCYyNTU7dGhpcy5waWNrT2Zmc2V0PXIsaS5iaW5kKCk7dmFyIGQ9aS51bmlmb3JtcztkLnZpZXdUcmFuc2Zvcm09dCxkLnBpY2tPZmZzZXQ9ZSxkLnNoYXBlPXRoaXMuc2hhcGU7dmFyIG09aS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLnBvc2l0aW9uQnVmZmVyLmJpbmQoKSxtLnBvc2l0aW9uLnBvaW50ZXIoKSx0aGlzLndlaWdodEJ1ZmZlci5iaW5kKCksbS53ZWlnaHQucG9pbnRlcihzLlVOU0lHTkVEX0JZVEUsITEpLHRoaXMuaWRCdWZmZXIuYmluZCgpLG0ucGlja0lkLnBvaW50ZXIocy5VTlNJR05FRF9CWVRFLCExKSxzLmRyYXdBcnJheXMocy5UUklBTkdMRVMsMCxvKSxyK3RoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXX19fSgpLGYucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdO2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMueERhdGEscz10aGlzLnlEYXRhO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvW2EldGhpcy5zaGFwZVswXV0sc1thL3RoaXMuc2hhcGVbMF18MF1dfX0sZi51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9KHQ9dHx8e30pLnNoYXBlfHxbMCwwXSxyPXQueHx8aShlWzBdKSxvPXQueXx8aShlWzFdKSxzPXQuenx8bmV3IEZsb2F0MzJBcnJheShlWzBdKmVbMV0pLGw9ITEhPT10LnpzbW9vdGg7dGhpcy54RGF0YT1yLHRoaXMueURhdGE9bzt2YXIgYyx1LGYscCxkPXQuY29sb3JMZXZlbHN8fFswXSxtPXQuY29sb3JWYWx1ZXN8fFswLDAsMCwxXSxnPWQubGVuZ3RoLHY9dGhpcy5ib3VuZHM7bD8oYz12WzBdPXJbMF0sdT12WzFdPW9bMF0sZj12WzJdPXJbci5sZW5ndGgtMV0scD12WzNdPW9bby5sZW5ndGgtMV0pOihjPXZbMF09clswXSsoclsxXS1yWzBdKS8yLHU9dlsxXT1vWzBdKyhvWzFdLW9bMF0pLzIsZj12WzJdPXJbci5sZW5ndGgtMV0rKHJbci5sZW5ndGgtMV0tcltyLmxlbmd0aC0yXSkvMixwPXZbM109b1tvLmxlbmd0aC0xXSsob1tvLmxlbmd0aC0xXS1vW28ubGVuZ3RoLTJdKS8yKTt2YXIgeT0xLyhmLWMpLHg9MS8ocC11KSxiPWVbMF0sXz1lWzFdO3RoaXMuc2hhcGU9W2IsX107dmFyIHc9KGw/KGItMSkqKF8tMSk6YipfKSooaC5sZW5ndGg+Pj4xKTt0aGlzLm51bVZlcnRpY2VzPXc7Zm9yKHZhciBUPWEubWFsbG9jVWludDgoNCp3KSxrPWEubWFsbG9jRmxvYXQzMigyKncpLEE9YS5tYWxsb2NVaW50OCgyKncpLE09YS5tYWxsb2NVaW50MzIodyksUz0wLEU9bD9iLTE6YixMPWw/Xy0xOl8sQz0wO0M8TDsrK0Mpe3ZhciBQLEk7bD8oUD14KihvW0NdLXUpLEk9eCoob1tDKzFdLXUpKTooUD1DPF8tMT94KihvW0NdLShvW0MrMV0tb1tDXSkvMi11KTp4KihvW0NdLShvW0NdLW9bQy0xXSkvMi11KSxJPUM8Xy0xP3gqKG9bQ10rKG9bQysxXS1vW0NdKS8yLXUpOngqKG9bQ10rKG9bQ10tb1tDLTFdKS8yLXUpKTtmb3IodmFyIE89MDtPPEU7KytPKXt2YXIgeixEO2w/KHo9eSoocltPXS1jKSxEPXkqKHJbTysxXS1jKSk6KHo9TzxiLTE/eSoocltPXS0ocltPKzFdLXJbT10pLzItYyk6eSoocltPXS0ocltPXS1yW08tMV0pLzItYyksRD1PPGItMT95KihyW09dKyhyW08rMV0tcltPXSkvMi1jKTp5KihyW09dKyhyW09dLXJbTy0xXSkvMi1jKSk7Zm9yKHZhciBSPTA7UjxoLmxlbmd0aDtSKz0yKXt2YXIgRixCLE4saixVPWhbUl0sVj1oW1IrMV0sSD1zW2w/KEMrVikqYisoTytVKTpDKmIrT10scT1uLmxlKGQsSCk7aWYocTwwKUY9bVswXSxCPW1bMV0sTj1tWzJdLGo9bVszXTtlbHNlIGlmKHE9PT1nLTEpRj1tWzQqZy00XSxCPW1bNCpnLTNdLE49bVs0KmctMl0saj1tWzQqZy0xXTtlbHNle3ZhciBHPShILWRbcV0pLyhkW3ErMV0tZFtxXSksWT0xLUcsVz00KnEsWD00KihxKzEpO0Y9WSptW1ddK0cqbVtYXSxCPVkqbVtXKzFdK0cqbVtYKzFdLE49WSptW1crMl0rRyptW1grMl0saj1ZKm1bVyszXStHKm1bWCszXX1UWzQqU109MjU1KkYsVFs0KlMrMV09MjU1KkIsVFs0KlMrMl09MjU1Kk4sVFs0KlMrM109MjU1Kmosa1syKlNdPS41KnorLjUqRCxrWzIqUysxXT0uNSpQKy41KkksQVsyKlNdPVUsQVsyKlMrMV09VixNW1NdPUMqYitPLFMrPTF9fX10aGlzLnBvc2l0aW9uQnVmZmVyLnVwZGF0ZShrKSx0aGlzLndlaWdodEJ1ZmZlci51cGRhdGUoQSksdGhpcy5jb2xvckJ1ZmZlci51cGRhdGUoVCksdGhpcy5pZEJ1ZmZlci51cGRhdGUoTSksYS5mcmVlKGspLGEuZnJlZShUKSxhLmZyZWUoQSksYS5mcmVlKE0pfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvc2l0aW9uQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLndlaWdodEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5jb2xvckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5pZEJ1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MjY4LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1idWZmZXIiOjI1NywiZ2wtc2hhZGVyIjozMjMsImlvdGEtYXJyYXkiOjQzMSwidHlwZWRhcnJheS1wb29sIjo1OTB9XSwyNjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpO2UuZXhwb3J0cz17ZnJhZ21lbnQ6bihbInByZWNpc2lvbiBsb3dwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQoZnJhZ0NvbG9yLnJnYiAqIGZyYWdDb2xvci5hLCBmcmFnQ29sb3IuYSk7XG59XG4iXSksdmVydGV4Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB3ZWlnaHQ7XG5cbnVuaWZvcm0gdmVjMiBzaGFwZTtcbnVuaWZvcm0gbWF0MyB2aWV3VHJhbnNmb3JtO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgdlBvc2l0aW9uID0gdmlld1RyYW5zZm9ybSAqIHZlYzMoIHBvc2l0aW9uICsgKHdlaWdodC0uNSkvKHNoYXBlLTEuKSAsIDEuMCk7XG4gIGZyYWdDb2xvciA9IGNvbG9yO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSkscGlja0ZyYWdtZW50Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBkID0gc3RlcCguNSwgdldlaWdodCk7XG4gIHZlYzQgaWQgPSBmcmFnSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC54ICs9IGQueCArIGQueSpzaGFwZS54O1xuXG4gIGlkLnkgKz0gZmxvb3IoaWQueCAvIDI1Ni4wKTtcbiAgaWQueCAtPSBmbG9vcihpZC54IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQueiArPSBmbG9vcihpZC55IC8gMjU2LjApO1xuICBpZC55IC09IGZsb29yKGlkLnkgLyAyNTYuMCkgKiAyNTYuMDtcblxuICBpZC53ICs9IGZsb29yKGlkLnogLyAyNTYuMCk7XG4gIGlkLnogLT0gZmxvb3IoaWQueiAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGdsX0ZyYWdDb2xvciA9IGlkLzI1NS47XG59XG4iXSkscGlja1ZlcnRleDpuKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcbmF0dHJpYnV0ZSB2ZWMyIHdlaWdodDtcblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSBtYXQzIHZpZXdUcmFuc2Zvcm07XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG52YXJ5aW5nIHZlYzIgdldlaWdodDtcblxudm9pZCBtYWluKCkge1xuICB2V2VpZ2h0ID0gd2VpZ2h0O1xuXG4gIGZyYWdJZCA9IHBpY2tJZDtcblxuICB2ZWMzIHZQb3NpdGlvbiA9IHZpZXdUcmFuc2Zvcm0gKiB2ZWMzKCBwb3NpdGlvbiArICh3ZWlnaHQtLjUpLyhzaGFwZS0xLikgLCAxLjApO1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQodlBvc2l0aW9uLnh5LCAwLCB2UG9zaXRpb24ueik7XG59XG4iXSl9fSx7Z2xzbGlmeTo0MjR9XSwyNjk6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbmV4dFBvc2l0aW9uO1xuYXR0cmlidXRlIGZsb2F0IGFyY0xlbmd0aCwgbGluZVdpZHRoO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5cbnVuaWZvcm0gdmVjMiBzY3JlZW5TaGFwZTtcbnVuaWZvcm0gZmxvYXQgcGl4ZWxSYXRpbztcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMyB3b3JsZFBvc2l0aW9uO1xudmFyeWluZyBmbG9hdCBwaXhlbEFyY0xlbmd0aDtcblxudmVjNCBwcm9qZWN0KHZlYzMgcCkge1xuICByZXR1cm4gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocCwgMS4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWM0IHN0YXJ0UG9pbnQgPSBwcm9qZWN0KHBvc2l0aW9uKTtcbiAgdmVjNCBlbmRQb2ludCAgID0gcHJvamVjdChuZXh0UG9zaXRpb24pO1xuXG4gIHZlYzIgQSA9IHN0YXJ0UG9pbnQueHkgLyBzdGFydFBvaW50Lnc7XG4gIHZlYzIgQiA9ICAgZW5kUG9pbnQueHkgLyAgIGVuZFBvaW50Lnc7XG5cbiAgZmxvYXQgY2xpcEFuZ2xlID0gYXRhbihcbiAgICAoQi55IC0gQS55KSAqIHNjcmVlblNoYXBlLnksXG4gICAgKEIueCAtIEEueCkgKiBzY3JlZW5TaGFwZS54XG4gICk7XG5cbiAgdmVjMiBvZmZzZXQgPSAwLjUgKiBwaXhlbFJhdGlvICogbGluZVdpZHRoICogdmVjMihcbiAgICBzaW4oY2xpcEFuZ2xlKSxcbiAgICAtY29zKGNsaXBBbmdsZSlcbiAgKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzdGFydFBvaW50Lnh5ICsgc3RhcnRQb2ludC53ICogb2Zmc2V0LCBzdGFydFBvaW50Lnp3KTtcblxuICB3b3JsZFBvc2l0aW9uID0gcG9zaXRpb247XG4gIHBpeGVsQXJjTGVuZ3RoID0gYXJjTGVuZ3RoO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbn1cbiJdKSxvPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICAgICAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIGRhc2hUZXh0dXJlO1xudW5pZm9ybSBmbG9hdCAgICAgZGFzaFNjYWxlO1xudW5pZm9ybSBmbG9hdCAgICAgb3BhY2l0eTtcblxudmFyeWluZyB2ZWMzICAgIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0ICAgcGl4ZWxBcmNMZW5ndGg7XG52YXJ5aW5nIHZlYzQgICAgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHdvcmxkUG9zaXRpb24pIHx8XG4gICAgZnJhZ0NvbG9yLmEgKiBvcGFjaXR5ID09IDAuXG4gICkgZGlzY2FyZDtcblxuICBmbG9hdCBkYXNoV2VpZ2h0ID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKGRhc2hTY2FsZSAqIHBpeGVsQXJjTGVuZ3RoLCAwKSkucjtcbiAgaWYoZGFzaFdlaWdodCA8IDAuNSkge1xuICAgIGRpc2NhcmQ7XG4gIH1cbiAgZ2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG4jZGVmaW5lIEZMT0FUX01BWCAgMS43MDE0MTE4NGUzOFxuI2RlZmluZSBGTE9BVF9NSU4gIDEuMTc1NDk0MzVlLTM4XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtvbGFseXNlbmtvL2dsc2wtcmVhZC1mbG9hdC9ibG9iL21hc3Rlci9pbmRleC5nbHNsXG52ZWM0IHBhY2tGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IGF2ID0gYWJzKHYpO1xuXG4gIC8vSGFuZGxlIHNwZWNpYWwgY2FzZXNcbiAgaWYoYXYgPCBGTE9BVF9NSU4pIHtcbiAgICByZXR1cm4gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2UgaWYodiA+IEZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDEyNy4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH0gZWxzZSBpZih2IDwgLUZMT0FUX01BWCkge1xuICAgIHJldHVybiB2ZWM0KDI1NS4wLCAxMjguMCwgMC4wLCAwLjApIC8gMjU1LjA7XG4gIH1cblxuICB2ZWM0IGMgPSB2ZWM0KDAsMCwwLDApO1xuXG4gIC8vQ29tcHV0ZSBleHBvbmVudCBhbmQgbWFudGlzc2FcbiAgZmxvYXQgZSA9IGZsb29yKGxvZzIoYXYpKTtcbiAgZmxvYXQgbSA9IGF2ICogcG93KDIuMCwgLWUpIC0gMS4wO1xuXG4gIC8vVW5wYWNrIG1hbnRpc3NhXG4gIGNbMV0gPSBmbG9vcigxMjguMCAqIG0pO1xuICBtIC09IGNbMV0gLyAxMjguMDtcbiAgY1syXSA9IGZsb29yKDMyNzY4LjAgKiBtKTtcbiAgbSAtPSBjWzJdIC8gMzI3NjguMDtcbiAgY1szXSA9IGZsb29yKDgzODg2MDguMCAqIG0pO1xuXG4gIC8vVW5wYWNrIGV4cG9uZW50XG4gIGZsb2F0IGViaWFzID0gZSArIDEyNy4wO1xuICBjWzBdID0gZmxvb3IoZWJpYXMgLyAyLjApO1xuICBlYmlhcyAtPSBjWzBdICogMi4wO1xuICBjWzFdICs9IGZsb29yKGViaWFzKSAqIDEyOC4wO1xuXG4gIC8vVW5wYWNrIHNpZ24gYml0XG4gIGNbMF0gKz0gMTI4LjAgKiBzdGVwKDAuMCwgLXYpO1xuXG4gIC8vU2NhbGUgYmFjayB0byByYW5nZVxuICByZXR1cm4gYyAvIDI1NS4wO1xufVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIHdvcmxkUG9zaXRpb247XG52YXJ5aW5nIGZsb2F0IHBpeGVsQXJjTGVuZ3RoO1xudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZFBvc2l0aW9uKSkgZGlzY2FyZDtcblxuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZC8yNTUuMCwgcGFja0Zsb2F0KHBpeGVsQXJjTGVuZ3RoKS54eXopO1xufSJdKSxsPVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToibmV4dFBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6ImFyY0xlbmd0aCIsdHlwZToiZmxvYXQifSx7bmFtZToibGluZVdpZHRoIix0eXBlOiJmbG9hdCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9XTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLGwpfSxyLmNyZWF0ZVBpY2tTaGFkZXI9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCxhLHMsbnVsbCxsKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2x8fHQuc2NlbmUmJnQuc2NlbmUuZ2wscj1mKGUpO3IuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLHIuYXR0cmlidXRlcy5uZXh0UG9zaXRpb24ubG9jYXRpb249MSxyLmF0dHJpYnV0ZXMuYXJjTGVuZ3RoLmxvY2F0aW9uPTIsci5hdHRyaWJ1dGVzLmxpbmVXaWR0aC5sb2NhdGlvbj0zLHIuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj00O3ZhciBvPWgoZSk7by5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsby5hdHRyaWJ1dGVzLm5leHRQb3NpdGlvbi5sb2NhdGlvbj0xLG8uYXR0cmlidXRlcy5hcmNMZW5ndGgubG9jYXRpb249MixvLmF0dHJpYnV0ZXMubGluZVdpZHRoLmxvY2F0aW9uPTMsby5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTQ7Zm9yKHZhciBzPW4oZSksbD1pKGUsW3tidWZmZXI6cyxzaXplOjMsb2Zmc2V0OjAsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTozLG9mZnNldDoxMixzdHJpZGU6NDh9LHtidWZmZXI6cyxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZTo0OH0se2J1ZmZlcjpzLHNpemU6MSxvZmZzZXQ6Mjgsc3RyaWRlOjQ4fSx7YnVmZmVyOnMsc2l6ZTo0LG9mZnNldDozMixzdHJpZGU6NDh9XSksdT1jKG5ldyBBcnJheSgxMDI0KSxbMjU2LDEsNF0pLHA9MDtwPDEwMjQ7KytwKXUuZGF0YVtwXT0yNTU7dmFyIGQ9YShlLHUpO2Qud3JhcD1lLlJFUEVBVDt2YXIgbT1uZXcgdihlLHIsbyxzLGwsZCk7cmV0dXJuIG0udXBkYXRlKHQpLG19O3ZhciBuPXQoImdsLWJ1ZmZlciIpLGk9dCgiZ2wtdmFvIiksYT10KCJnbC10ZXh0dXJlMmQiKSxvPW5ldyBVaW50OEFycmF5KDQpLHM9bmV3IEZsb2F0MzJBcnJheShvLmJ1ZmZlcik7dmFyIGw9dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxjPXQoIm5kYXJyYXkiKSx1PXQoIi4vbGliL3NoYWRlcnMiKSxmPXUuY3JlYXRlU2hhZGVyLGg9dS5jcmVhdGVQaWNrU2hhZGVyLHA9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGQodCxlKXtmb3IodmFyIHI9MCxuPTA7bjwzOysrbil7dmFyIGk9dFtuXS1lW25dO3IrPWkqaX1yZXR1cm4gTWF0aC5zcXJ0KHIpfWZ1bmN0aW9uIG0odCl7Zm9yKHZhciBlPVtbLTFlNiwtMWU2LC0xZTZdLFsxZTYsMWU2LDFlNl1dLHI9MDtyPDM7KytyKWVbMF1bcl09TWF0aC5tYXgodFswXVtyXSxlWzBdW3JdKSxlWzFdW3JdPU1hdGgubWluKHRbMV1bcl0sZVsxXVtyXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt0aGlzLmFyY0xlbmd0aD10LHRoaXMucG9zaXRpb249ZSx0aGlzLmluZGV4PXIsdGhpcy5kYXRhQ29vcmRpbmF0ZT1ufWZ1bmN0aW9uIHYodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLnNoYWRlcj1lLHRoaXMucGlja1NoYWRlcj1yLHRoaXMuYnVmZmVyPW4sdGhpcy52YW89aSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5wb2ludHM9W10sdGhpcy5hcmNMZW5ndGg9W10sdGhpcy52ZXJ0ZXhDb3VudD0wLHRoaXMuYm91bmRzPVtbMCwwLDBdLFswLDAsMF1dLHRoaXMucGlja0lkPTAsdGhpcy5saW5lV2lkdGg9MSx0aGlzLnRleHR1cmU9YSx0aGlzLmRhc2hTY2FsZT0xLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5kaXJ0eT0hMCx0aGlzLnBpeGVsUmF0aW89MX12YXIgeT12LnByb3RvdHlwZTt5LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0seS5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSx5LnBpY2tTbG90cz0xLHkuc2V0UGlja0Jhc2U9ZnVuY3Rpb24odCl7dGhpcy5waWNrSWQ9dH0seS5kcmF3VHJhbnNwYXJlbnQ9eS5kcmF3PWZ1bmN0aW9uKHQpe2lmKHRoaXMudmVydGV4Q291bnQpe3ZhciBlPXRoaXMuZ2wscj10aGlzLnNoYWRlcixuPXRoaXMudmFvO3IuYmluZCgpLHIudW5pZm9ybXM9e21vZGVsOnQubW9kZWx8fHAsdmlldzp0LnZpZXd8fHAscHJvamVjdGlvbjp0LnByb2plY3Rpb258fHAsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksZGFzaFRleHR1cmU6dGhpcy50ZXh0dXJlLmJpbmQoKSxkYXNoU2NhbGU6dGhpcy5kYXNoU2NhbGUvdGhpcy5hcmNMZW5ndGhbdGhpcy5hcmNMZW5ndGgubGVuZ3RoLTFdLG9wYWNpdHk6dGhpcy5vcGFjaXR5LHNjcmVlblNoYXBlOltlLmRyYXdpbmdCdWZmZXJXaWR0aCxlLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvfSxuLmJpbmQoKSxuLmRyYXcoZS5UUklBTkdMRV9TVFJJUCx0aGlzLnZlcnRleENvdW50KSxuLnVuYmluZCgpfX0seS5kcmF3UGljaz1mdW5jdGlvbih0KXtpZih0aGlzLnZlcnRleENvdW50KXt2YXIgZT10aGlzLmdsLHI9dGhpcy5waWNrU2hhZGVyLG49dGhpcy52YW87ci5iaW5kKCksci51bmlmb3Jtcz17bW9kZWw6dC5tb2RlbHx8cCx2aWV3OnQudmlld3x8cCxwcm9qZWN0aW9uOnQucHJvamVjdGlvbnx8cCxwaWNrSWQ6dGhpcy5waWNrSWQsY2xpcEJvdW5kczptKHRoaXMuY2xpcEJvdW5kcyksc2NyZWVuU2hhcGU6W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0scGl4ZWxSYXRpbzp0aGlzLnBpeGVsUmF0aW99LG4uYmluZCgpLG4uZHJhdyhlLlRSSUFOR0xFX1NUUklQLHRoaXMudmVydGV4Q291bnQpLG4udW5iaW5kKCl9fSx5LnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMuZGlydHk9ITA7dmFyIG49ISF0LmNvbm5lY3RHYXBzOyJkYXNoU2NhbGUiaW4gdCYmKHRoaXMuZGFzaFNjYWxlPXQuZGFzaFNjYWxlKSx0aGlzLmhhc0FscGhhPSExLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9K3Qub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKTt2YXIgaT1bXSxhPVtdLG89W10scz0wLHU9MCxmPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLGg9dC5wb3NpdGlvbnx8dC5wb3NpdGlvbnM7aWYoaCl7dmFyIHA9dC5jb2xvcnx8dC5jb2xvcnN8fFswLDAsMCwxXSxtPXQubGluZVdpZHRofHwxLGc9ITE7dDpmb3IoZT0xO2U8aC5sZW5ndGg7KytlKXt2YXIgdix5LHgsYj1oW2UtMV0sXz1oW2VdO2ZvcihhLnB1c2gocyksby5wdXNoKGIuc2xpY2UoKSkscj0wO3I8MzsrK3Ipe2lmKGlzTmFOKGJbcl0pfHxpc05hTihfW3JdKXx8IWlzRmluaXRlKGJbcl0pfHwhaXNGaW5pdGUoX1tyXSkpe2lmKCFuJiZpLmxlbmd0aD4wKXtmb3IodmFyIHc9MDt3PDI0OysrdylpLnB1c2goaVtpLmxlbmd0aC0xMl0pO3UrPTIsZz0hMH1jb250aW51ZSB0fWZbMF1bcl09TWF0aC5taW4oZlswXVtyXSxiW3JdLF9bcl0pLGZbMV1bcl09TWF0aC5tYXgoZlsxXVtyXSxiW3JdLF9bcl0pfUFycmF5LmlzQXJyYXkocFswXSk/KHY9cC5sZW5ndGg+ZS0xP3BbZS0xXTpwLmxlbmd0aD4wP3BbcC5sZW5ndGgtMV06WzAsMCwwLDFdLHk9cC5sZW5ndGg+ZT9wW2VdOnAubGVuZ3RoPjA/cFtwLmxlbmd0aC0xXTpbMCwwLDAsMV0pOnY9eT1wLDM9PT12Lmxlbmd0aCYmKHY9W3ZbMF0sdlsxXSx2WzJdLDFdKSwzPT09eS5sZW5ndGgmJih5PVt5WzBdLHlbMV0seVsyXSwxXSksIXRoaXMuaGFzQWxwaGEmJnZbM108MSYmKHRoaXMuaGFzQWxwaGE9ITApLHg9QXJyYXkuaXNBcnJheShtKT9tLmxlbmd0aD5lLTE/bVtlLTFdOm0ubGVuZ3RoPjA/bVttLmxlbmd0aC0xXTpbMCwwLDAsMV06bTt2YXIgVD1zO2lmKHMrPWQoYixfKSxnKXtmb3Iocj0wO3I8MjsrK3IpaS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdKTt1Kz0yLGc9ITF9aS5wdXNoKGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQseCx2WzBdLHZbMV0sdlsyXSx2WzNdLGJbMF0sYlsxXSxiWzJdLF9bMF0sX1sxXSxfWzJdLFQsLXgsdlswXSx2WzFdLHZbMl0sdlszXSxfWzBdLF9bMV0sX1syXSxiWzBdLGJbMV0sYlsyXSxzLC14LHlbMF0seVsxXSx5WzJdLHlbM10sX1swXSxfWzFdLF9bMl0sYlswXSxiWzFdLGJbMl0scyx4LHlbMF0seVsxXSx5WzJdLHlbM10pLHUrPTR9fWlmKHRoaXMuYnVmZmVyLnVwZGF0ZShpKSxhLnB1c2gocyksby5wdXNoKGhbaC5sZW5ndGgtMV0uc2xpY2UoKSksdGhpcy5ib3VuZHM9Zix0aGlzLnZlcnRleENvdW50PXUsdGhpcy5wb2ludHM9byx0aGlzLmFyY0xlbmd0aD1hLCJkYXNoZXMiaW4gdCl7dmFyIGs9dC5kYXNoZXMuc2xpY2UoKTtmb3Ioay51bnNoaWZ0KDApLGU9MTtlPGsubGVuZ3RoOysrZSlrW2VdPWtbZS0xXStrW2VdO3ZhciBBPWMobmV3IEFycmF5KDEwMjQpLFsyNTYsMSw0XSk7Zm9yKGU9MDtlPDI1NjsrK2Upe2ZvcihyPTA7cjw0OysrcilBLnNldChlLDAsciwwKTsxJmwubGUoayxrW2subGVuZ3RoLTFdKmUvMjU1KT9BLnNldChlLDAsMCwwKTpBLnNldChlLDAsMCwyNTUpfXRoaXMudGV4dHVyZS5zZXRQaXhlbHMoQSl9fSx5LmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy52YW8uZGlzcG9zZSgpLHRoaXMuYnVmZmVyLmRpc3Bvc2UoKX0seS5waWNrPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiBudWxsO2lmKHQuaWQhPT10aGlzLnBpY2tJZClyZXR1cm4gbnVsbDt2YXIgZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gb1swXT1uLG9bMV09cixvWzJdPWUsb1szXT10LHNbMF19KHQudmFsdWVbMF0sdC52YWx1ZVsxXSx0LnZhbHVlWzJdLDApLHI9bC5sZSh0aGlzLmFyY0xlbmd0aCxlKTtpZihyPDApcmV0dXJuIG51bGw7aWYocj09PXRoaXMuYXJjTGVuZ3RoLmxlbmd0aC0xKXJldHVybiBuZXcgZyh0aGlzLmFyY0xlbmd0aFt0aGlzLmFyY0xlbmd0aC5sZW5ndGgtMV0sdGhpcy5wb2ludHNbdGhpcy5wb2ludHMubGVuZ3RoLTFdLnNsaWNlKCkscik7Zm9yKHZhciBuPXRoaXMucG9pbnRzW3JdLGk9dGhpcy5wb2ludHNbTWF0aC5taW4ocisxLHRoaXMucG9pbnRzLmxlbmd0aC0xKV0sYT0oZS10aGlzLmFyY0xlbmd0aFtyXSkvKHRoaXMuYXJjTGVuZ3RoW3IrMV0tdGhpcy5hcmNMZW5ndGhbcl0pLGM9MS1hLHU9WzAsMCwwXSxmPTA7ZjwzOysrZil1W2ZdPWMqbltmXSthKmlbZl07dmFyIGg9TWF0aC5taW4oYTwuNT9yOnIrMSx0aGlzLnBvaW50cy5sZW5ndGgtMSk7cmV0dXJuIG5ldyBnKGUsdSxoLHRoaXMucG9pbnRzW2hdKX19LHsiLi9saWIvc2hhZGVycyI6MjY5LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1idWZmZXIiOjI1NywiZ2wtdGV4dHVyZTJkIjozMzgsImdsLXZhbyI6MzQzLG5kYXJyYXk6NDYyfV0sMjcxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XTtyZXR1cm4gdFswXT1zKihoKnYtcCpnKS1mKihsKnYtYypnKSttKihsKnAtYypoKSx0WzFdPS0obiooaCp2LXAqZyktZiooaSp2LWEqZykrbSooaSpwLWEqaCkpLHRbMl09bioobCp2LWMqZyktcyooaSp2LWEqZykrbSooaSpjLWEqbCksdFszXT0tKG4qKGwqcC1jKmgpLXMqKGkqcC1hKmgpK2YqKGkqYy1hKmwpKSx0WzRdPS0obyooaCp2LXAqZyktdSoobCp2LWMqZykrZCoobCpwLWMqaCkpLHRbNV09ciooaCp2LXAqZyktdSooaSp2LWEqZykrZCooaSpwLWEqaCksdFs2XT0tKHIqKGwqdi1jKmcpLW8qKGkqdi1hKmcpK2QqKGkqYy1hKmwpKSx0WzddPXIqKGwqcC1jKmgpLW8qKGkqcC1hKmgpK3UqKGkqYy1hKmwpLHRbOF09byooZip2LXAqbSktdSoocyp2LWMqbSkrZCoocypwLWMqZiksdFs5XT0tKHIqKGYqdi1wKm0pLXUqKG4qdi1hKm0pK2QqKG4qcC1hKmYpKSx0WzEwXT1yKihzKnYtYyptKS1vKihuKnYtYSptKStkKihuKmMtYSpzKSx0WzExXT0tKHIqKHMqcC1jKmYpLW8qKG4qcC1hKmYpK3UqKG4qYy1hKnMpKSx0WzEyXT0tKG8qKGYqZy1oKm0pLXUqKHMqZy1sKm0pK2QqKHMqaC1sKmYpKSx0WzEzXT1yKihmKmctaCptKS11KihuKmctaSptKStkKihuKmgtaSpmKSx0WzE0XT0tKHIqKHMqZy1sKm0pLW8qKG4qZy1pKm0pK2QqKG4qbC1pKnMpKSx0WzE1XT1yKihzKmgtbCpmKS1vKihuKmgtaSpmKSt1KihuKmwtaSpzKSx0fX0se31dLDI3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9fSx7fV0sMjczOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFs4XT1lWzhdLHRbOV09ZVs5XSx0WzEwXT1lWzEwXSx0WzExXT1lWzExXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI3NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW5ldyBGbG9hdDMyQXJyYXkoMTYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXSxhPXRbNF0sbz10WzVdLHM9dFs2XSxsPXRbN10sYz10WzhdLHU9dFs5XSxmPXRbMTBdLGg9dFsxMV0scD10WzEyXSxkPXRbMTNdLG09dFsxNF0sZz10WzE1XTtyZXR1cm4oZSpvLXIqYSkqKGYqZy1oKm0pLShlKnMtbiphKSoodSpnLWgqZCkrKGUqbC1pKmEpKih1Km0tZipkKSsocipzLW4qbykqKGMqZy1oKnApLShyKmwtaSpvKSooYyptLWYqcCkrKG4qbC1pKnMpKihjKmQtdSpwKX19LHt9XSwyNzY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89cityLHM9bituLGw9aStpLGM9cipvLHU9bipvLGY9bipzLGg9aSpvLHA9aSpzLGQ9aSpsLG09YSpvLGc9YSpzLHY9YSpsO3JldHVybiB0WzBdPTEtZi1kLHRbMV09dSt2LHRbMl09aC1nLHRbM109MCx0WzRdPXUtdix0WzVdPTEtYy1kLHRbNl09cCttLHRbN109MCx0WzhdPWgrZyx0WzldPXAtbSx0WzEwXT0xLWMtZix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPU1hdGguc3FydChvKm8rcypzK2wqbCk7aWYoTWF0aC5hYnMoYyk8MWUtNilyZXR1cm4gbnVsbDtyZXR1cm4gbyo9Yz0xL2Mscyo9YyxsKj1jLG49TWF0aC5zaW4oZSksaT1NYXRoLmNvcyhlKSxhPTEtaSx0WzBdPW8qbyphK2ksdFsxXT1zKm8qYStsKm4sdFsyXT1sKm8qYS1zKm4sdFszXT0wLHRbNF09bypzKmEtbCpuLHRbNV09cypzKmEraSx0WzZdPWwqcyphK28qbix0WzddPTAsdFs4XT1vKmwqYStzKm4sdFs5XT1zKmwqYS1vKm4sdFsxMF09bCpsKmEraSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyNzg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1uK24sbD1pK2ksYz1hK2EsdT1uKnMsZj1uKmwsaD1uKmMscD1pKmwsZD1pKmMsbT1hKmMsZz1vKnMsdj1vKmwseT1vKmM7cmV0dXJuIHRbMF09MS0ocCttKSx0WzFdPWYreSx0WzJdPWgtdix0WzNdPTAsdFs0XT1mLXksdFs1XT0xLSh1K20pLHRbNl09ZCtnLHRbN109MCx0WzhdPWgrdix0WzldPWQtZyx0WzEwXT0xLSh1K3ApLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fX0se31dLDI3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09ZVsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09ZVsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT1lWzBdLHRbMTNdPWVbMV0sdFsxNF09ZVsyXSx0WzE1XT0xLHR9fSx7fV0sMjgxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5zaW4oZSksbj1NYXRoLmNvcyhlKTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW4sdFs2XT1yLHRbN109MCx0WzhdPTAsdFs5XT0tcix0WzEwXT1uLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fX0se31dLDI4MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc2luKGUpLG49TWF0aC5jb3MoZSk7cmV0dXJuIHRbMF09bix0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09bix0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPTAsdFs0XT0tcix0WzVdPW4sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9fSx7fV0sMjg0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTEvKHItZSksbD0xLyhpLW4pLGM9MS8oYS1vKTtyZXR1cm4gdFswXT0yKmEqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0yKmEqbCx0WzZdPTAsdFs3XT0wLHRbOF09KHIrZSkqcyx0WzldPShpK24pKmwsdFsxMF09KG8rYSkqYyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09byphKjIqYyx0WzE1XT0wLHR9fSx7fV0sMjg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH19LHt9XSwyODY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e2NyZWF0ZTp0KCIuL2NyZWF0ZSIpLGNsb25lOnQoIi4vY2xvbmUiKSxjb3B5OnQoIi4vY29weSIpLGlkZW50aXR5OnQoIi4vaWRlbnRpdHkiKSx0cmFuc3Bvc2U6dCgiLi90cmFuc3Bvc2UiKSxpbnZlcnQ6dCgiLi9pbnZlcnQiKSxhZGpvaW50OnQoIi4vYWRqb2ludCIpLGRldGVybWluYW50OnQoIi4vZGV0ZXJtaW5hbnQiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksdHJhbnNsYXRlOnQoIi4vdHJhbnNsYXRlIiksc2NhbGU6dCgiLi9zY2FsZSIpLHJvdGF0ZTp0KCIuL3JvdGF0ZSIpLHJvdGF0ZVg6dCgiLi9yb3RhdGVYIikscm90YXRlWTp0KCIuL3JvdGF0ZVkiKSxyb3RhdGVaOnQoIi4vcm90YXRlWiIpLGZyb21Sb3RhdGlvbjp0KCIuL2Zyb21Sb3RhdGlvbiIpLGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uOnQoIi4vZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24iKSxmcm9tU2NhbGluZzp0KCIuL2Zyb21TY2FsaW5nIiksZnJvbVRyYW5zbGF0aW9uOnQoIi4vZnJvbVRyYW5zbGF0aW9uIiksZnJvbVhSb3RhdGlvbjp0KCIuL2Zyb21YUm90YXRpb24iKSxmcm9tWVJvdGF0aW9uOnQoIi4vZnJvbVlSb3RhdGlvbiIpLGZyb21aUm90YXRpb246dCgiLi9mcm9tWlJvdGF0aW9uIiksZnJvbVF1YXQ6dCgiLi9mcm9tUXVhdCIpLGZydXN0dW06dCgiLi9mcnVzdHVtIikscGVyc3BlY3RpdmU6dCgiLi9wZXJzcGVjdGl2ZSIpLHBlcnNwZWN0aXZlRnJvbUZpZWxkT2ZWaWV3OnQoIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciKSxvcnRobzp0KCIuL29ydGhvIiksbG9va0F0OnQoIi4vbG9va0F0Iiksc3RyOnQoIi4vc3RyIil9fSx7Ii4vYWRqb2ludCI6MjcxLCIuL2Nsb25lIjoyNzIsIi4vY29weSI6MjczLCIuL2NyZWF0ZSI6Mjc0LCIuL2RldGVybWluYW50IjoyNzUsIi4vZnJvbVF1YXQiOjI3NiwiLi9mcm9tUm90YXRpb24iOjI3NywiLi9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjc4LCIuL2Zyb21TY2FsaW5nIjoyNzksIi4vZnJvbVRyYW5zbGF0aW9uIjoyODAsIi4vZnJvbVhSb3RhdGlvbiI6MjgxLCIuL2Zyb21ZUm90YXRpb24iOjI4MiwiLi9mcm9tWlJvdGF0aW9uIjoyODMsIi4vZnJ1c3R1bSI6Mjg0LCIuL2lkZW50aXR5IjoyODUsIi4vaW52ZXJ0IjoyODcsIi4vbG9va0F0IjoyODgsIi4vbXVsdGlwbHkiOjI4OSwiLi9vcnRobyI6MjkwLCIuL3BlcnNwZWN0aXZlIjoyOTEsIi4vcGVyc3BlY3RpdmVGcm9tRmllbGRPZlZpZXciOjI5MiwiLi9yb3RhdGUiOjI5MywiLi9yb3RhdGVYIjoyOTQsIi4vcm90YXRlWSI6Mjk1LCIuL3JvdGF0ZVoiOjI5NiwiLi9zY2FsZSI6Mjk3LCIuL3N0ciI6Mjk4LCIuL3RyYW5zbGF0ZSI6Mjk5LCIuL3RyYW5zcG9zZSI6MzAwfV0sMjg3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT1lWzJdLGE9ZVszXSxvPWVbNF0scz1lWzVdLGw9ZVs2XSxjPWVbN10sdT1lWzhdLGY9ZVs5XSxoPWVbMTBdLHA9ZVsxMV0sZD1lWzEyXSxtPWVbMTNdLGc9ZVsxNF0sdj1lWzE1XSx5PXIqcy1uKm8seD1yKmwtaSpvLGI9cipjLWEqbyxfPW4qbC1pKnMsdz1uKmMtYSpzLFQ9aSpjLWEqbCxrPXUqbS1mKmQsQT11KmctaCpkLE09dSp2LXAqZCxTPWYqZy1oKm0sRT1mKnYtcCptLEw9aCp2LXAqZyxDPXkqTC14KkUrYipTK18qTS13KkErVCprO2lmKCFDKXJldHVybiBudWxsO3JldHVybiBDPTEvQyx0WzBdPShzKkwtbCpFK2MqUykqQyx0WzFdPShpKkUtbipMLWEqUykqQyx0WzJdPShtKlQtZyp3K3YqXykqQyx0WzNdPShoKnctZipULXAqXykqQyx0WzRdPShsKk0tbypMLWMqQSkqQyx0WzVdPShyKkwtaSpNK2EqQSkqQyx0WzZdPShnKmItZCpULXYqeCkqQyx0WzddPSh1KlQtaCpiK3AqeCkqQyx0WzhdPShvKkUtcypNK2MqaykqQyx0WzldPShuKk0tcipFLWEqaykqQyx0WzEwXT0oZCp3LW0qYit2KnkpKkMsdFsxMV09KGYqYi11KnctcCp5KSpDLHRbMTJdPShzKkEtbypTLWwqaykqQyx0WzEzXT0ocipTLW4qQStpKmspKkMsdFsxNF09KG0qeC1kKl8tZyp5KSpDLHRbMTVdPSh1Kl8tZip4K2gqeSkqQyx0fX0se31dLDI4ODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGEsbyxzLGwsYyx1LGYsaCxwLGQsbT1lWzBdLGc9ZVsxXSx2PWVbMl0seT1pWzBdLHg9aVsxXSxiPWlbMl0sXz1yWzBdLHc9clsxXSxUPXJbMl07aWYoTWF0aC5hYnMobS1fKTwxZS02JiZNYXRoLmFicyhnLXcpPDFlLTYmJk1hdGguYWJzKHYtVCk8MWUtNilyZXR1cm4gbih0KTtmPW0tXyxoPWctdyxwPXYtVCxkPTEvTWF0aC5zcXJ0KGYqZitoKmgrcCpwKSxhPXgqKHAqPWQpLWIqKGgqPWQpLG89YiooZio9ZCkteSpwLHM9eSpoLXgqZiwoZD1NYXRoLnNxcnQoYSphK28qbytzKnMpKT8oYSo9ZD0xL2Qsbyo9ZCxzKj1kKTooYT0wLG89MCxzPTApO2w9aCpzLXAqbyxjPXAqYS1mKnMsdT1mKm8taCphLChkPU1hdGguc3FydChsKmwrYypjK3UqdSkpPyhsKj1kPTEvZCxjKj1kLHUqPWQpOihsPTAsYz0wLHU9MCk7cmV0dXJuIHRbMF09YSx0WzFdPWwsdFsyXT1mLHRbM109MCx0WzRdPW8sdFs1XT1jLHRbNl09aCx0WzddPTAsdFs4XT1zLHRbOV09dSx0WzEwXT1wLHRbMTFdPTAsdFsxMl09LShhKm0rbypnK3MqdiksdFsxM109LShsKm0rYypnK3UqdiksdFsxNF09LShmKm0raCpnK3AqdiksdFsxNV09MSx0fX0seyIuL2lkZW50aXR5IjoyODV9XSwyODk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLG09ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqbSx0WzFdPXgqaStiKmwrXypoK3cqZyx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qZit3Km0sdFs1XT14KmkrYipsK18qaCt3KmcsdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qZit3Km0sdFs5XT14KmkrYipsK18qaCt3KmcsdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypmK3cqbSx0WzEzXT14KmkrYipsK18qaCt3KmcsdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fX0se31dLDI5MDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9fSx7fV0sMjkxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9MS9NYXRoLnRhbihlLzIpLG89MS8obi1pKTtyZXR1cm4gdFswXT1hL3IsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09KGkrbikqbyx0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MippKm4qbyx0WzE1XT0wLHR9fSx7fV0sMjkyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPU1hdGgudGFuKGUudXBEZWdyZWVzKk1hdGguUEkvMTgwKSxhPU1hdGgudGFuKGUuZG93bkRlZ3JlZXMqTWF0aC5QSS8xODApLG89TWF0aC50YW4oZS5sZWZ0RGVncmVlcypNYXRoLlBJLzE4MCkscz1NYXRoLnRhbihlLnJpZ2h0RGVncmVlcypNYXRoLlBJLzE4MCksbD0yLyhvK3MpLGM9Mi8oaSthKTtyZXR1cm4gdFswXT1sLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPWMsdFs2XT0wLHRbN109MCx0WzhdPS0oby1zKSpsKi41LHRbOV09KGktYSkqYyouNSx0WzEwXT1uLyhyLW4pLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1uKnIvKHItbiksdFsxNV09MCx0fX0se31dLDI5MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRT1uWzBdLEw9blsxXSxDPW5bMl0sUD1NYXRoLnNxcnQoRSpFK0wqTCtDKkMpO2lmKE1hdGguYWJzKFApPDFlLTYpcmV0dXJuIG51bGw7RSo9UD0xL1AsTCo9UCxDKj1QLGk9TWF0aC5zaW4ociksYT1NYXRoLmNvcyhyKSxvPTEtYSxzPWVbMF0sbD1lWzFdLGM9ZVsyXSx1PWVbM10sZj1lWzRdLGg9ZVs1XSxwPWVbNl0sZD1lWzddLG09ZVs4XSxnPWVbOV0sdj1lWzEwXSx5PWVbMTFdLHg9RSpFKm8rYSxiPUwqRSpvK0MqaSxfPUMqRSpvLUwqaSx3PUUqTCpvLUMqaSxUPUwqTCpvK2Esaz1DKkwqbytFKmksQT1FKkMqbytMKmksTT1MKkMqby1FKmksUz1DKkMqbythLHRbMF09cyp4K2YqYittKl8sdFsxXT1sKngraCpiK2cqXyx0WzJdPWMqeCtwKmIrdipfLHRbM109dSp4K2QqYit5Kl8sdFs0XT1zKncrZipUK20qayx0WzVdPWwqdytoKlQrZyprLHRbNl09Yyp3K3AqVCt2KmssdFs3XT11KncrZCpUK3kqayx0WzhdPXMqQStmKk0rbSpTLHRbOV09bCpBK2gqTStnKlMsdFsxMF09YypBK3AqTSt2KlMsdFsxMV09dSpBK2QqTSt5KlMsZSE9PXQmJih0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHR9fSx7fV0sMjk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtlIT09dCYmKHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHRbM109ZVszXSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSk7cmV0dXJuIHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fX0se31dLDI5NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49TWF0aC5zaW4ociksaT1NYXRoLmNvcyhyKSxhPWVbMF0sbz1lWzFdLHM9ZVsyXSxsPWVbM10sYz1lWzhdLHU9ZVs5XSxmPWVbMTBdLGg9ZVsxMV07ZSE9PXQmJih0WzRdPWVbNF0sdFs1XT1lWzVdLHRbNl09ZVs2XSx0WzddPWVbN10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaS1jKm4sdFsxXT1vKmktdSpuLHRbMl09cyppLWYqbix0WzNdPWwqaS1oKm4sdFs4XT1hKm4rYyppLHRbOV09bypuK3UqaSx0WzEwXT1zKm4rZippLHRbMTFdPWwqbitoKmksdH19LHt9XSwyOTY6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtlIT09dCYmKHRbOF09ZVs4XSx0WzldPWVbOV0sdFsxMF09ZVsxMF0sdFsxMV09ZVsxMV0sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pO3JldHVybiB0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9fSx7fV0sMjk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsxXSxhPXJbMl07cmV0dXJuIHRbMF09ZVswXSpuLHRbMV09ZVsxXSpuLHRbMl09ZVsyXSpuLHRbM109ZVszXSpuLHRbNF09ZVs0XSppLHRbNV09ZVs1XSppLHRbNl09ZVs2XSppLHRbN109ZVs3XSppLHRbOF09ZVs4XSphLHRbOV09ZVs5XSphLHRbMTBdPWVbMTBdKmEsdFsxMV09ZVsxMV0qYSx0WzEyXT1lWzEyXSx0WzEzXT1lWzEzXSx0WzE0XT1lWzE0XSx0WzE1XT1lWzE1XSx0fX0se31dLDI5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ibWF0NCgiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiLCAiK3RbNl0rIiwgIit0WzddKyIsICIrdFs4XSsiLCAiK3RbOV0rIiwgIit0WzEwXSsiLCAiK3RbMTFdKyIsICIrdFsxMl0rIiwgIit0WzEzXSsiLCAiK3RbMTRdKyIsICIrdFsxNV0rIikifX0se31dLDI5OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG09clswXSxnPXJbMV0sdj1yWzJdO2U9PT10Pyh0WzEyXT1lWzBdKm0rZVs0XSpnK2VbOF0qditlWzEyXSx0WzEzXT1lWzFdKm0rZVs1XSpnK2VbOV0qditlWzEzXSx0WzE0XT1lWzJdKm0rZVs2XSpnK2VbMTBdKnYrZVsxNF0sdFsxNV09ZVszXSptK2VbN10qZytlWzExXSp2K2VbMTVdKToobj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9ZVs0XSxsPWVbNV0sYz1lWzZdLHU9ZVs3XSxmPWVbOF0saD1lWzldLHA9ZVsxMF0sZD1lWzExXSx0WzBdPW4sdFsxXT1pLHRbMl09YSx0WzNdPW8sdFs0XT1zLHRbNV09bCx0WzZdPWMsdFs3XT11LHRbOF09Zix0WzldPWgsdFsxMF09cCx0WzExXT1kLHRbMTJdPW4qbStzKmcrZip2K2VbMTJdLHRbMTNdPWkqbStsKmcraCp2K2VbMTNdLHRbMTRdPWEqbStjKmcrcCp2K2VbMTRdLHRbMTVdPW8qbSt1KmcrZCp2K2VbMTVdKTtyZXR1cm4gdH19LHt9XSwzMDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PT09ZSl7dmFyIHI9ZVsxXSxuPWVbMl0saT1lWzNdLGE9ZVs2XSxvPWVbN10scz1lWzExXTt0WzFdPWVbNF0sdFsyXT1lWzhdLHRbM109ZVsxMl0sdFs0XT1yLHRbNl09ZVs5XSx0WzddPWVbMTNdLHRbOF09bix0WzldPWEsdFsxMV09ZVsxNF0sdFsxMl09aSx0WzEzXT1vLHRbMTRdPXN9ZWxzZSB0WzBdPWVbMF0sdFsxXT1lWzRdLHRbMl09ZVs4XSx0WzNdPWVbMTJdLHRbNF09ZVsxXSx0WzVdPWVbNV0sdFs2XT1lWzldLHRbN109ZVsxM10sdFs4XT1lWzJdLHRbOV09ZVs2XSx0WzEwXT1lWzEwXSx0WzExXT1lWzE0XSx0WzEyXT1lWzNdLHRbMTNdPWVbN10sdFsxNF09ZVsxMV0sdFsxNV09ZVsxNV07cmV0dXJuIHR9fSx7fV0sMzAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJhcnljZW50cmljIiksaT10KCJwb2x5dG9wZS1jbG9zZXN0LXBvaW50L2xpYi9jbG9zZXN0X3BvaW50XzJkLmpzIik7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bMCwwLDAsMF0sbj0wO248NDsrK24pZm9yKHZhciBpPTA7aTw0OysraSlyW2ldKz10WzQqbitpXSplW25dO3JldHVybiByfWZ1bmN0aW9uIG8odCxlLHIsbixpKXtmb3IodmFyIG89YShuLGEocixhKGUsW3RbMF0sdFsxXSx0WzJdLDFdKSkpLHM9MDtzPDM7KytzKW9bc10vPW9bM107cmV0dXJuWy41KmlbMF0qKDErb1swXSksLjUqaVsxXSooMS1vWzFdKV19ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgcj1bMCwwLDBdLG49MDtuPHQubGVuZ3RoOysrbilmb3IodmFyIGk9dFtuXSxhPWVbbl0sbz0wO288MzsrK28pcltvXSs9YSppW29dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsYyl7aWYoMT09PXQubGVuZ3RoKXJldHVyblswLHRbMF0uc2xpY2UoKV07Zm9yKHZhciB1PW5ldyBBcnJheSh0Lmxlbmd0aCksZj0wO2Y8dC5sZW5ndGg7KytmKXVbZl09byh0W2ZdLHIsYSxsLGMpO3ZhciBoPTAscD0xLzA7Zm9yKGY9MDtmPHUubGVuZ3RoOysrZil7Zm9yKHZhciBkPTAsbT0wO208MjsrK20pZCs9TWF0aC5wb3codVtmXVttXS1lW21dLDIpO2Q8cCYmKHA9ZCxoPWYpfXZhciBnPWZ1bmN0aW9uKHQsZSl7aWYoMj09PXQubGVuZ3RoKXtmb3IodmFyIHI9MCxhPTAsbz0wO288MjsrK28pcis9TWF0aC5wb3coZVtvXS10WzBdW29dLDIpLGErPU1hdGgucG93KGVbb10tdFsxXVtvXSwyKTtyZXR1cm4gcj1NYXRoLnNxcnQociksYT1NYXRoLnNxcnQoYSkscithPDFlLTY/WzEsMF06W2EvKHIrYSksci8oYStyKV19aWYoMz09PXQubGVuZ3RoKXt2YXIgcz1bMCwwXTtyZXR1cm4gaSh0WzBdLHRbMV0sdFsyXSxlLHMpLG4odCxzKX1yZXR1cm5bXX0odSxlKSx2PTA7Zm9yKGY9MDtmPDM7KytmKXtpZihnW2ZdPC0uMDAxfHxnW2ZdPjEuMDAwMSlyZXR1cm4gbnVsbDt2Kz1nW2ZdfWlmKE1hdGguYWJzKHYtMSk+LjAwMSlyZXR1cm4gbnVsbDtyZXR1cm5baCxzKHQsZyksZ119fSx7YmFyeWNlbnRyaWM6ODEsInBvbHl0b3BlLWNsb3Nlc3QtcG9pbnQvbGliL2Nsb3Nlc3RfcG9pbnRfMmQuanMiOjQ4OH1dLDMwMjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbiwgbm9ybWFsO1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgdmVjMiB1djtcblxudW5pZm9ybSBtYXQ0IG1vZGVsXG4gICAgICAgICAgICwgdmlld1xuICAgICAgICAgICAsIHByb2plY3Rpb25cbiAgICAgICAgICAgLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgZXllUG9zaXRpb25cbiAgICAgICAgICAgLCBsaWdodFBvc2l0aW9uO1xuXG52YXJ5aW5nIHZlYzMgZl9ub3JtYWxcbiAgICAgICAgICAgLCBmX2xpZ2h0RGlyZWN0aW9uXG4gICAgICAgICAgICwgZl9leWVEaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2RhdGE7XG52YXJ5aW5nIHZlYzQgZl9jb2xvcjtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52ZWM0IHByb2plY3QodmVjMyBwKSB7XG4gIHJldHVybiBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwLCAxLjApO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uICAgICAgPSBwcm9qZWN0KHBvc2l0aW9uKTtcblxuICAvL0xpZ2h0aW5nIGdlb21ldHJ5IHBhcmFtZXRlcnNcbiAgdmVjNCBjYW1lcmFDb29yZGluYXRlID0gdmlldyAqIHZlYzQocG9zaXRpb24gLCAxLjApO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCAgPSBub3JtYWxpemUoKHZlYzQobm9ybWFsLCAwLjApICogaW52ZXJzZU1vZGVsKS54eXopO1xuXG4gIGZfY29sb3IgICAgICAgICAgPSBjb2xvcjtcbiAgZl9kYXRhICAgICAgICAgICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgICAgICAgICAgID0gdXY7XG59XG4iXSksYT1uKFsiI2V4dGVuc2lvbiBHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgOiBlbmFibGVcblxucHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuZmxvYXQgYmVja21hbm5EaXN0cmlidXRpb24oZmxvYXQgeCwgZmxvYXQgcm91Z2huZXNzKSB7XG4gIGZsb2F0IE5kb3RIID0gbWF4KHgsIDAuMDAwMSk7XG4gIGZsb2F0IGNvczJBbHBoYSA9IE5kb3RIICogTmRvdEg7XG4gIGZsb2F0IHRhbjJBbHBoYSA9IChjb3MyQWxwaGEgLSAxLjApIC8gY29zMkFscGhhO1xuICBmbG9hdCByb3VnaG5lc3MyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xuICBmbG9hdCBkZW5vbSA9IDMuMTQxNTkyNjUzNTg5NzkzICogcm91Z2huZXNzMiAqIGNvczJBbHBoYSAqIGNvczJBbHBoYTtcbiAgcmV0dXJuIGV4cCh0YW4yQWxwaGEgLyByb3VnaG5lc3MyKSAvIGRlbm9tO1xufVxuXG5mbG9hdCBjb29rVG9ycmFuY2VTcGVjdWxhcihcbiAgdmVjMyBsaWdodERpcmVjdGlvbixcbiAgdmVjMyB2aWV3RGlyZWN0aW9uLFxuICB2ZWMzIHN1cmZhY2VOb3JtYWwsXG4gIGZsb2F0IHJvdWdobmVzcyxcbiAgZmxvYXQgZnJlc25lbCkge1xuXG4gIGZsb2F0IFZkb3ROID0gbWF4KGRvdCh2aWV3RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcbiAgZmxvYXQgTGRvdE4gPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsKSwgMC4wKTtcblxuICAvL0hhbGYgYW5nbGUgdmVjdG9yXG4gIHZlYzMgSCA9IG5vcm1hbGl6ZShsaWdodERpcmVjdGlvbiArIHZpZXdEaXJlY3Rpb24pO1xuXG4gIC8vR2VvbWV0cmljIHRlcm1cbiAgZmxvYXQgTmRvdEggPSBtYXgoZG90KHN1cmZhY2VOb3JtYWwsIEgpLCAwLjApO1xuICBmbG9hdCBWZG90SCA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgTGRvdEggPSBtYXgoZG90KGxpZ2h0RGlyZWN0aW9uLCBIKSwgMC4wMDAwMDEpO1xuICBmbG9hdCBHMSA9ICgyLjAgKiBOZG90SCAqIFZkb3ROKSAvIFZkb3RIO1xuICBmbG9hdCBHMiA9ICgyLjAgKiBOZG90SCAqIExkb3ROKSAvIExkb3RIO1xuICBmbG9hdCBHID0gbWluKDEuMCwgbWluKEcxLCBHMikpO1xuICBcbiAgLy9EaXN0cmlidXRpb24gdGVybVxuICBmbG9hdCBEID0gYmVja21hbm5EaXN0cmlidXRpb24oTmRvdEgsIHJvdWdobmVzcyk7XG5cbiAgLy9GcmVzbmVsIHRlcm1cbiAgZmxvYXQgRiA9IHBvdygxLjAgLSBWZG90TiwgZnJlc25lbCk7XG5cbiAgLy9NdWx0aXBseSB0ZXJtcyBhbmQgZG9uZVxuICByZXR1cm4gIEcgKiBGICogRCAvIG1heCgzLjE0MTU5MjY1ICogVmRvdE4sIDAuMDAwMDAxKTtcbn1cblxuLy8jcHJhZ21hIGdsc2xpZnk6IGJlY2ttYW5uID0gcmVxdWlyZShnbHNsLXNwZWN1bGFyLWJlY2ttYW5uKSAvLyB1c2VkIGluIGdsLXN1cmZhY2UzZFxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHJvdWdobmVzc1xuICAgICAgICAgICAgLCBmcmVzbmVsXG4gICAgICAgICAgICAsIGthbWJpZW50XG4gICAgICAgICAgICAsIGtkaWZmdXNlXG4gICAgICAgICAgICAsIGtzcGVjdWxhcjtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbFxuICAgICAgICAgICAsIGZfbGlnaHREaXJlY3Rpb25cbiAgICAgICAgICAgLCBmX2V5ZURpcmVjdGlvblxuICAgICAgICAgICAsIGZfZGF0YTtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKGZfY29sb3IuYSA9PSAwLjAgfHxcbiAgICBvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSlcbiAgKSBkaXNjYXJkO1xuXG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICAvL2Zsb2F0IHNwZWN1bGFyID0gbWF4KDAuMCwgYmVja21hbm4oTCwgViwgTiwgcm91Z2huZXNzKSk7IC8vIHVzZWQgaW4gZ2wtc3VyZmFjZTNkXG5cbiAgZmxvYXQgZGlmZnVzZSAgPSBtaW4oa2FtYmllbnQgKyBrZGlmZnVzZSAqIG1heChkb3QoTiwgTCksIDAuMCksIDEuMCk7XG5cbiAgdmVjNCBzdXJmYWNlQ29sb3IgPSB2ZWM0KGZfY29sb3IucmdiLCAxLjApICogdGV4dHVyZTJEKHRleHR1cmUsIGZfdXYpO1xuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbGl0Q29sb3IgKiBmX2NvbG9yLmE7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIGZfY29sb3IgPSBjb2xvcjtcbiAgZl9kYXRhICA9IHBvc2l0aW9uO1xuICBmX3V2ICAgID0gdXY7XG59Il0pLHM9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG51bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMzIGZfZGF0YTtcbnZhcnlpbmcgdmVjMiBmX3V2O1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfZGF0YSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gZl9jb2xvciAqIHRleHR1cmUyRCh0ZXh0dXJlLCBmX3V2KSAqIG9wYWNpdHk7XG59Il0pLGw9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCAsMC4wICwwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuICBmX2NvbG9yID0gY29sb3I7XG4gIGZfdXYgPSB1djtcbn0iXSksYz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgdGV4dHVyZTtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICB2ZWMyIHBvaW50UiA9IGdsX1BvaW50Q29vcmQueHkgLSB2ZWMyKDAuNSwgMC41KTtcbiAgaWYoZG90KHBvaW50UiwgcG9pbnRSKSA+IDAuMjUpIHtcbiAgICBkaXNjYXJkO1xuICB9XG4gIGdsX0ZyYWdDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dikgKiBvcGFjaXR5O1xufSJdKSx1PW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgZl9pZCAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgPSBwb3NpdGlvbjtcbn0iXSksZj1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYm9vbCBvdXRPZlJhbmdlKGZsb2F0IGEsIGZsb2F0IGIsIGZsb2F0IHApIHtcbiAgcmV0dXJuICgocCA+IG1heChhLCBiKSkgfHwgXG4gICAgICAgICAgKHAgPCBtaW4oYSwgYikpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzIgYSwgdmVjMiBiLCB2ZWMyIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMzIGEsIHZlYzMgYiwgdmVjMyBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueiwgYi56LCBwLnopKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzQgYSwgdmVjNCBiLCB2ZWM0IHApIHtcbiAgcmV0dXJuIG91dE9mUmFuZ2UoYS54eXosIGIueHl6LCBwLnh5eik7XG59XG5cbnVuaWZvcm0gdmVjMyAgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcGlja0lkO1xuXG52YXJ5aW5nIHZlYzMgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIGZfcG9zaXRpb24pKSBkaXNjYXJkO1xuXG4gIGdsX0ZyYWdDb2xvciA9IHZlYzQocGlja0lkLCBmX2lkLnh5eik7XG59Il0pLGg9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyAgcG9zaXRpb247XG5hdHRyaWJ1dGUgZmxvYXQgcG9pbnRTaXplO1xuYXR0cmlidXRlIHZlYzQgIGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICBpZiAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCBwb3NpdGlvbikpIHtcblxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuICB9IGVsc2Uge1xuICAgIGdsX1Bvc2l0aW9uICA9IHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIGdsX1BvaW50U2l6ZSA9IHBvaW50U2l6ZTtcbiAgfVxuICBmX2lkICAgICAgICAgPSBpZDtcbiAgZl9wb3NpdGlvbiAgID0gcG9zaXRpb247XG59Il0pLHA9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG5cbnZvaWQgbWFpbigpIHtcbiAgZ2xfUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbn0iXSksZD1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWMzIGNvbnRvdXJDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbnRvdXJDb2xvciwgMS4wKTtcbn1cbiJdKTtyLm1lc2hTaGFkZXI9e3ZlcnRleDppLGZyYWdtZW50OmEsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci53aXJlU2hhZGVyPXt2ZXJ0ZXg6byxmcmFnbWVudDpzLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9XX0sci5wb2ludFNoYWRlcj17dmVydGV4OmwsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToidXYiLHR5cGU6InZlYzIifSx7bmFtZToicG9pbnRTaXplIix0eXBlOiJmbG9hdCJ9XX0sci5waWNrU2hhZGVyPXt2ZXJ0ZXg6dSxmcmFnbWVudDpmLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJpZCIsdHlwZToidmVjNCJ9XX0sci5wb2ludFBpY2tTaGFkZXI9e3ZlcnRleDpoLGZyYWdtZW50OmYsYXR0cmlidXRlczpbe25hbWU6InBvc2l0aW9uIix0eXBlOiJ2ZWMzIn0se25hbWU6InBvaW50U2l6ZSIsdHlwZToiZmxvYXQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV19LHIuY29udG91clNoYWRlcj17dmVydGV4OnAsZnJhZ21lbnQ6ZCxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifV19fSx7Z2xzbGlmeTo0MjR9XSwzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoImdsLXZhbyIpLG89dCgiZ2wtdGV4dHVyZTJkIikscz10KCJub3JtYWxzIiksbD10KCJnbC1tYXQ0L211bHRpcGx5IiksYz10KCJnbC1tYXQ0L2ludmVydCIpLHU9dCgibmRhcnJheSIpLGY9dCgiY29sb3JtYXAiKSxoPXQoInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIikscD10KCJ0eXBlZGFycmF5LXBvb2wiKSxkPXQoIi4vbGliL3NoYWRlcnMiKSxtPXQoIi4vbGliL2Nsb3Nlc3QtcG9pbnQiKSxnPWQubWVzaFNoYWRlcix2PWQud2lyZVNoYWRlcix5PWQucG9pbnRTaGFkZXIseD1kLnBpY2tTaGFkZXIsYj1kLnBvaW50UGlja1NoYWRlcixfPWQuY29udG91clNoYWRlcix3PVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtmdW5jdGlvbiBUKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sVCxrLEEsTSxTKXt0aGlzLmdsPXQsdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5jZWxscz1bXSx0aGlzLnBvc2l0aW9ucz1bXSx0aGlzLmludGVuc2l0eT1bXSx0aGlzLnRleHR1cmU9ZSx0aGlzLmRpcnR5PSEwLHRoaXMudHJpU2hhZGVyPXIsdGhpcy5saW5lU2hhZGVyPW4sdGhpcy5wb2ludFNoYWRlcj1pLHRoaXMucGlja1NoYWRlcj1hLHRoaXMucG9pbnRQaWNrU2hhZGVyPW8sdGhpcy5jb250b3VyU2hhZGVyPXMsdGhpcy50cmlhbmdsZVBvc2l0aW9ucz1sLHRoaXMudHJpYW5nbGVDb2xvcnM9dSx0aGlzLnRyaWFuZ2xlTm9ybWFscz1oLHRoaXMudHJpYW5nbGVVVnM9Zix0aGlzLnRyaWFuZ2xlSWRzPWMsdGhpcy50cmlhbmdsZVZBTz1wLHRoaXMudHJpYW5nbGVDb3VudD0wLHRoaXMubGluZVdpZHRoPTEsdGhpcy5lZGdlUG9zaXRpb25zPWQsdGhpcy5lZGdlQ29sb3JzPWcsdGhpcy5lZGdlVVZzPXYsdGhpcy5lZGdlSWRzPW0sdGhpcy5lZGdlVkFPPXksdGhpcy5lZGdlQ291bnQ9MCx0aGlzLnBvaW50UG9zaXRpb25zPXgsdGhpcy5wb2ludENvbG9ycz1fLHRoaXMucG9pbnRVVnM9VCx0aGlzLnBvaW50U2l6ZXM9ayx0aGlzLnBvaW50SWRzPWIsdGhpcy5wb2ludFZBTz1BLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29udG91ckxpbmVXaWR0aD0xLHRoaXMuY29udG91clBvc2l0aW9ucz1NLHRoaXMuY29udG91clZBTz1TLHRoaXMuY29udG91ckNvdW50PTAsdGhpcy5jb250b3VyQ29sb3I9WzAsMCwwXSx0aGlzLmNvbnRvdXJFbmFibGU9ITAsdGhpcy5waWNrVmVydGV4PSEwLHRoaXMucGlja0lkPTEsdGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV0sdGhpcy5jbGlwQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMubGlnaHRQb3NpdGlvbj1bMWU1LDFlNSwwXSx0aGlzLmFtYmllbnRMaWdodD0uOCx0aGlzLmRpZmZ1c2VMaWdodD0uOCx0aGlzLnNwZWN1bGFyTGlnaHQ9Mix0aGlzLnJvdWdobmVzcz0uNSx0aGlzLmZyZXNuZWw9MS41LHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5vcGFjaXR5c2NhbGU9ITEsdGhpcy5fbW9kZWw9dyx0aGlzLl92aWV3PXcsdGhpcy5fcHJvamVjdGlvbj13LHRoaXMuX3Jlc29sdXRpb249WzEsMV19dmFyIGs9VC5wcm90b3R5cGU7ZnVuY3Rpb24gQSh0LGUpe2lmKCFlKXJldHVybiAxO2lmKCFlLmxlbmd0aClyZXR1cm4gMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoOysrcil7aWYoZS5sZW5ndGg8MilyZXR1cm4gMTtpZihlW3JdWzBdPT09dClyZXR1cm4gZVtyXVsxXTtpZihlW3JdWzBdPnQmJnI+MCl7dmFyIG49KGVbcl1bMF0tdCkvKGVbcl1bMF0tZVtyLTFdWzBdKTtyZXR1cm4gZVtyXVsxXSooMS1uKStuKmVbci0xXVsxXX19cmV0dXJuIDF9ZnVuY3Rpb24gTSh0KXt2YXIgZT1uKHQsZy52ZXJ0ZXgsZy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5jb2xvci5sb2NhdGlvbj0yLGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0zLGUuYXR0cmlidXRlcy5ub3JtYWwubG9jYXRpb249NCxlfWZ1bmN0aW9uIFModCl7dmFyIGU9bih0LHYudmVydGV4LHYuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlfWZ1bmN0aW9uIEUodCl7dmFyIGU9bih0LHkudmVydGV4LHkuZnJhZ21lbnQpO3JldHVybiBlLmF0dHJpYnV0ZXMucG9zaXRpb24ubG9jYXRpb249MCxlLmF0dHJpYnV0ZXMuY29sb3IubG9jYXRpb249MixlLmF0dHJpYnV0ZXMudXYubG9jYXRpb249MyxlLmF0dHJpYnV0ZXMucG9pbnRTaXplLmxvY2F0aW9uPTQsZX1mdW5jdGlvbiBMKHQpe3ZhciBlPW4odCx4LnZlcnRleCx4LmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZX1mdW5jdGlvbiBDKHQpe3ZhciBlPW4odCxiLnZlcnRleCxiLmZyYWdtZW50KTtyZXR1cm4gZS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsZS5hdHRyaWJ1dGVzLmlkLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLnBvaW50U2l6ZS5sb2NhdGlvbj00LGV9ZnVuY3Rpb24gUCh0KXt2YXIgZT1uKHQsXy52ZXJ0ZXgsXy5mcmFnbWVudCk7cmV0dXJuIGUuYXR0cmlidXRlcy5wb3NpdGlvbi5sb2NhdGlvbj0wLGV9ay5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmhhc0FscGhhfSxrLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBbHBoYX0say5waWNrU2xvdHM9MSxrLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9LGsuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQmJnRoaXMuY29udG91ckVuYWJsZSl7Zm9yKHZhciBlPWgodGhpcy5jZWxscyx0aGlzLmludGVuc2l0eSx0LmludGVuc2l0eSkscj1lLmNlbGxzLG49ZS52ZXJ0ZXhJZHMsaT1lLnZlcnRleFdlaWdodHMsYT1yLmxlbmd0aCxvPXAubWFsbG9jRmxvYXQzMig2KmEpLHM9MCxsPTA7bDxhOysrbClmb3IodmFyIGM9cltsXSx1PTA7dTwyOysrdSl7dmFyIGY9Y1swXTsyPT09Yy5sZW5ndGgmJihmPWNbdV0pO2Zvcih2YXIgZD1uW2ZdWzBdLG09bltmXVsxXSxnPWlbZl0sdj0xLWcseT10aGlzLnBvc2l0aW9uc1tkXSx4PXRoaXMucG9zaXRpb25zW21dLGI9MDtiPDM7KytiKW9bcysrXT1nKnlbYl0rdip4W2JdfXRoaXMuY29udG91ckNvdW50PXMvM3wwLHRoaXMuY29udG91clBvc2l0aW9ucy51cGRhdGUoby5zdWJhcnJheSgwLHMpKSxwLmZyZWUobyl9ZWxzZSB0aGlzLmNvbnRvdXJDb3VudD0wfSxrLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5kaXJ0eT0hMCwiY29udG91ckVuYWJsZSJpbiB0JiYodGhpcy5jb250b3VyRW5hYmxlPXQuY29udG91ckVuYWJsZSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9dC5jb250b3VyQ29sb3IpLCJsaW5lV2lkdGgiaW4gdCYmKHRoaXMubGluZVdpZHRoPXQubGluZVdpZHRoKSwibGlnaHRQb3NpdGlvbiJpbiB0JiYodGhpcy5saWdodFBvc2l0aW9uPXQubGlnaHRQb3NpdGlvbiksdGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PXQub3BhY2l0eSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSx0aGlzLmhhc0FscGhhPSEwKSwiYW1iaWVudCJpbiB0JiYodGhpcy5hbWJpZW50TGlnaHQ9dC5hbWJpZW50KSwiZGlmZnVzZSJpbiB0JiYodGhpcy5kaWZmdXNlTGlnaHQ9dC5kaWZmdXNlKSwic3BlY3VsYXIiaW4gdCYmKHRoaXMuc3BlY3VsYXJMaWdodD10LnNwZWN1bGFyKSwicm91Z2huZXNzImluIHQmJih0aGlzLnJvdWdobmVzcz10LnJvdWdobmVzcyksImZyZXNuZWwiaW4gdCYmKHRoaXMuZnJlc25lbD10LmZyZXNuZWwpLHQudGV4dHVyZT8odGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRleHR1cmU9byhlLHQudGV4dHVyZSkpOnQuY29sb3JtYXAmJih0aGlzLnRleHR1cmUuc2hhcGU9WzI1NiwyNTZdLHRoaXMudGV4dHVyZS5taW5GaWx0ZXI9ZS5MSU5FQVJfTUlQTUFQX0xJTkVBUix0aGlzLnRleHR1cmUubWFnRmlsdGVyPWUuTElORUFSLHRoaXMudGV4dHVyZS5zZXRQaXhlbHMoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Zih7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSksbj1uZXcgVWludDhBcnJheSgxMDI0KSxpPTA7aTwyNTY7KytpKXtmb3IodmFyIGE9cltpXSxvPTA7bzwzOysrbyluWzQqaStvXT1hW29dO25bNCppKzNdPWU/MjU1KkEoaS8yNTUsZSk6MjU1KmFbM119cmV0dXJuIHUobixbMjU2LDI1Niw0XSxbNCwwLDFdKX0odC5jb2xvcm1hcCx0aGlzLm9wYWNpdHlzY2FsZSkpLHRoaXMudGV4dHVyZS5nZW5lcmF0ZU1pcG1hcCgpKTt2YXIgcj10LmNlbGxzLG49dC5wb3NpdGlvbnM7aWYobiYmcil7dmFyIGk9W10sYT1bXSxsPVtdLGM9W10saD1bXSxwPVtdLGQ9W10sbT1bXSxnPVtdLHY9W10seT1bXSx4PVtdLGI9W10sXz1bXTt0aGlzLmNlbGxzPXIsdGhpcy5wb3NpdGlvbnM9bjt2YXIgdz10LnZlcnRleE5vcm1hbHMsVD10LmNlbGxOb3JtYWxzLGs9dm9pZCAwPT09dC52ZXJ0ZXhOb3JtYWxzRXBzaWxvbj8xZS02OnQudmVydGV4Tm9ybWFsc0Vwc2lsb24sTT12b2lkIDA9PT10LmZhY2VOb3JtYWxzRXBzaWxvbj8xZS02OnQuZmFjZU5vcm1hbHNFcHNpbG9uO3QudXNlRmFjZXROb3JtYWxzJiYhVCYmKFQ9cy5mYWNlTm9ybWFscyhyLG4sTSkpLFR8fHd8fCh3PXMudmVydGV4Tm9ybWFscyhyLG4saykpO3ZhciBTPXQudmVydGV4Q29sb3JzLEU9dC5jZWxsQ29sb3JzLEw9dC5tZXNoQ29sb3J8fFsxLDEsMSwxXSxDPXQudmVydGV4VVZzLFA9dC52ZXJ0ZXhJbnRlbnNpdHksST10LmNlbGxVVnMsTz10LmNlbGxJbnRlbnNpdHksej0xLzAsRD0tMS8wO2lmKCFDJiYhSSlpZihQKWlmKHQudmVydGV4SW50ZW5zaXR5Qm91bmRzKXo9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzBdLEQ9K3QudmVydGV4SW50ZW5zaXR5Qm91bmRzWzFdO2Vsc2UgZm9yKHZhciBSPTA7UjxQLmxlbmd0aDsrK1Ipe3ZhciBGPVBbUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGlmKE8paWYodC5jZWxsSW50ZW5zaXR5Qm91bmRzKXo9K3QuY2VsbEludGVuc2l0eUJvdW5kc1swXSxEPSt0LmNlbGxJbnRlbnNpdHlCb3VuZHNbMV07ZWxzZSBmb3IoUj0wO1I8Ty5sZW5ndGg7KytSKXtGPU9bUl07ej1NYXRoLm1pbih6LEYpLEQ9TWF0aC5tYXgoRCxGKX1lbHNlIGZvcihSPTA7UjxuLmxlbmd0aDsrK1Ipe0Y9bltSXVsyXTt6PU1hdGgubWluKHosRiksRD1NYXRoLm1heChELEYpfXRoaXMuaW50ZW5zaXR5PVB8fChPfHxmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT10W25dWzJdO3JldHVybiByfShuKSksdGhpcy5waWNrVmVydGV4PSEoT3x8RSk7dmFyIEI9dC5wb2ludFNpemVzLE49dC5wb2ludFNpemV8fDE7dGhpcy5ib3VuZHM9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKFI9MDtSPG4ubGVuZ3RoOysrUilmb3IodmFyIGo9bltSXSxVPTA7VTwzOysrVSkhaXNOYU4oaltVXSkmJmlzRmluaXRlKGpbVV0pJiYodGhpcy5ib3VuZHNbMF1bVV09TWF0aC5taW4odGhpcy5ib3VuZHNbMF1bVV0saltVXSksdGhpcy5ib3VuZHNbMV1bVV09TWF0aC5tYXgodGhpcy5ib3VuZHNbMV1bVV0saltVXSkpO3ZhciBWPTAsSD0wLHE9MDt0OmZvcihSPTA7UjxyLmxlbmd0aDsrK1Ipe3ZhciBHPXJbUl07c3dpdGNoKEcubGVuZ3RoKXtjYXNlIDE6Zm9yKGo9bltXPUdbMF1dLFU9MDtVPDM7KytVKWlmKGlzTmFOKGpbVV0pfHwhaXNGaW5pdGUoaltVXSkpY29udGludWUgdDt2LnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD95LnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooeS5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSx4LnB1c2goWlswXSxaWzFdKSxCP2IucHVzaChCW1ddKTpiLnB1c2goTiksXy5wdXNoKFIpLHErPTE7YnJlYWs7Y2FzZSAyOmZvcihVPTA7VTwyOysrVSl7aj1uW1c9R1tVXV07Zm9yKHZhciBZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHR9Zm9yKFU9MDtVPDI7KytVKXtqPW5bVz1HW1VdXTtwLnB1c2goalswXSxqWzFdLGpbMl0pLFg9Uz9TW1ddOkU/RVtSXTpMLHRoaXMub3BhY2l0eXNjYWxlJiZQP2EucHVzaChYWzBdLFhbMV0sWFsyXSx0aGlzLm9wYWNpdHkqQSgoUFtXXS16KS8oRC16KSx0aGlzLm9wYWNpdHlzY2FsZSkpOjM9PT1YLmxlbmd0aD9kLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KTooZC5wdXNoKFhbMF0sWFsxXSxYWzJdLFhbM10qdGhpcy5vcGFjaXR5KSxYWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKSksWj1DP0NbV106UD9bKFBbV10teikvKEQteiksMF06ST9JW1JdOk8/WyhPW1JdLXopLyhELXopLDBdOlsoalsyXS16KS8oRC16KSwwXSxtLnB1c2goWlswXSxaWzFdKSxnLnB1c2goUil9SCs9MTticmVhaztjYXNlIDM6Zm9yKFU9MDtVPDM7KytVKWZvcihqPW5bVz1HW1VdXSxZPTA7WTwzOysrWSlpZihpc05hTihqW1ldKXx8IWlzRmluaXRlKGpbWV0pKWNvbnRpbnVlIHQ7Zm9yKFU9MDtVPDM7KytVKXt2YXIgVyxYLFosSjtqPW5bVz1HWzItVV1dO2kucHVzaChqWzBdLGpbMV0salsyXSksKFg9Uz9TW1ddOkU/RVtSXTpMKT90aGlzLm9wYWNpdHlzY2FsZSYmUD9hLnB1c2goWFswXSxYWzFdLFhbMl0sdGhpcy5vcGFjaXR5KkEoKFBbV10teikvKEQteiksdGhpcy5vcGFjaXR5c2NhbGUpKTozPT09WC5sZW5ndGg/YS5wdXNoKFhbMF0sWFsxXSxYWzJdLHRoaXMub3BhY2l0eSk6KGEucHVzaChYWzBdLFhbMV0sWFsyXSxYWzNdKnRoaXMub3BhY2l0eSksWFszXTwxJiYodGhpcy5oYXNBbHBoYT0hMCkpOmEucHVzaCguNSwuNSwuNSwxKSxaPUM/Q1tXXTpQP1soUFtXXS16KS8oRC16KSwwXTpJP0lbUl06Tz9bKE9bUl0teikvKEQteiksMF06WyhqWzJdLXopLyhELXopLDBdLGMucHVzaChaWzBdLFpbMV0pLEo9dz93W1ddOlRbUl0sbC5wdXNoKEpbMF0sSlsxXSxKWzJdKSxoLnB1c2goUil9Vis9MX19dGhpcy5wb2ludENvdW50PXEsdGhpcy5lZGdlQ291bnQ9SCx0aGlzLnRyaWFuZ2xlQ291bnQ9Vix0aGlzLnBvaW50UG9zaXRpb25zLnVwZGF0ZSh2KSx0aGlzLnBvaW50Q29sb3JzLnVwZGF0ZSh5KSx0aGlzLnBvaW50VVZzLnVwZGF0ZSh4KSx0aGlzLnBvaW50U2l6ZXMudXBkYXRlKGIpLHRoaXMucG9pbnRJZHMudXBkYXRlKG5ldyBVaW50MzJBcnJheShfKSksdGhpcy5lZGdlUG9zaXRpb25zLnVwZGF0ZShwKSx0aGlzLmVkZ2VDb2xvcnMudXBkYXRlKGQpLHRoaXMuZWRnZVVWcy51cGRhdGUobSksdGhpcy5lZGdlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoZykpLHRoaXMudHJpYW5nbGVQb3NpdGlvbnMudXBkYXRlKGkpLHRoaXMudHJpYW5nbGVDb2xvcnMudXBkYXRlKGEpLHRoaXMudHJpYW5nbGVVVnMudXBkYXRlKGMpLHRoaXMudHJpYW5nbGVOb3JtYWxzLnVwZGF0ZShsKSx0aGlzLnRyaWFuZ2xlSWRzLnVwZGF0ZShuZXcgVWludDMyQXJyYXkoaCkpfX0say5kcmF3VHJhbnNwYXJlbnQ9ay5kcmF3PWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dmFyIHM9e21vZGVsOnIsdmlldzpuLHByb2plY3Rpb246aSxpbnZlcnNlTW9kZWw6dy5zbGljZSgpLGNsaXBCb3VuZHM6YSxrYW1iaWVudDp0aGlzLmFtYmllbnRMaWdodCxrZGlmZnVzZTp0aGlzLmRpZmZ1c2VMaWdodCxrc3BlY3VsYXI6dGhpcy5zcGVjdWxhckxpZ2h0LHJvdWdobmVzczp0aGlzLnJvdWdobmVzcyxmcmVzbmVsOnRoaXMuZnJlc25lbCxleWVQb3NpdGlvbjpbMCwwLDBdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxjb250b3VyQ29sb3I6dGhpcy5jb250b3VyQ29sb3IsdGV4dHVyZTowfTtzLmludmVyc2VNb2RlbD1jKHMuaW52ZXJzZU1vZGVsLHMubW9kZWwpLGUuZGlzYWJsZShlLkNVTExfRkFDRSksdGhpcy50ZXh0dXJlLmJpbmQoMCk7dmFyIHU9bmV3IEFycmF5KDE2KTtsKHUscy52aWV3LHMubW9kZWwpLGwodSxzLnByb2plY3Rpb24sdSksYyh1LHUpO2ZvcihvPTA7bzwzOysrbylzLmV5ZVBvc2l0aW9uW29dPXVbMTIrb10vdVsxNV07dmFyIGYsaD11WzE1XTtmb3Iobz0wO288MzsrK28paCs9dGhpcy5saWdodFBvc2l0aW9uW29dKnVbNCpvKzNdO2ZvcihvPTA7bzwzOysrbyl7Zm9yKHZhciBwPXVbMTIrb10sZD0wO2Q8MzsrK2QpcCs9dVs0KmQrb10qdGhpcy5saWdodFBvc2l0aW9uW2RdO3MubGlnaHRQb3NpdGlvbltvXT1wL2h9dGhpcy50cmlhbmdsZUNvdW50PjAmJigoZj10aGlzLnRyaVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnRyaWFuZ2xlVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5UUklBTkdMRVMsMCwzKnRoaXMudHJpYW5nbGVDb3VudCksdGhpcy50cmlhbmdsZVZBTy51bmJpbmQoKSk7dGhpcy5lZGdlQ291bnQ+MCYmdGhpcy5saW5lV2lkdGg+MCYmKChmPXRoaXMubGluZVNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpO3RoaXMucG9pbnRDb3VudD4wJiYoKGY9dGhpcy5wb2ludFNoYWRlcikuYmluZCgpLGYudW5pZm9ybXM9cyx0aGlzLnBvaW50VkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5QT0lOVFMsMCx0aGlzLnBvaW50Q291bnQpLHRoaXMucG9pbnRWQU8udW5iaW5kKCkpO3RoaXMuY29udG91ckVuYWJsZSYmdGhpcy5jb250b3VyQ291bnQ+MCYmdGhpcy5jb250b3VyTGluZVdpZHRoPjAmJigoZj10aGlzLmNvbnRvdXJTaGFkZXIpLmJpbmQoKSxmLnVuaWZvcm1zPXMsdGhpcy5jb250b3VyVkFPLmJpbmQoKSxlLmRyYXdBcnJheXMoZS5MSU5FUywwLHRoaXMuY29udG91ckNvdW50KSx0aGlzLmNvbnRvdXJWQU8udW5iaW5kKCkpfSxrLmRyYXdQaWNrPWZ1bmN0aW9uKHQpe3Q9dHx8e307Zm9yKHZhciBlPXRoaXMuZ2wscj10Lm1vZGVsfHx3LG49dC52aWV3fHx3LGk9dC5wcm9qZWN0aW9ufHx3LGE9W1stMWU2LC0xZTYsLTFlNl0sWzFlNiwxZTYsMWU2XV0sbz0wO288MzsrK28pYVswXVtvXT1NYXRoLm1heChhWzBdW29dLHRoaXMuY2xpcEJvdW5kc1swXVtvXSksYVsxXVtvXT1NYXRoLm1pbihhWzFdW29dLHRoaXMuY2xpcEJvdW5kc1sxXVtvXSk7dGhpcy5fbW9kZWw9W10uc2xpY2UuY2FsbChyKSx0aGlzLl92aWV3PVtdLnNsaWNlLmNhbGwobiksdGhpcy5fcHJvamVjdGlvbj1bXS5zbGljZS5jYWxsKGkpLHRoaXMuX3Jlc29sdXRpb249W2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF07dmFyIHMsbD17bW9kZWw6cix2aWV3Om4scHJvamVjdGlvbjppLGNsaXBCb3VuZHM6YSxwaWNrSWQ6dGhpcy5waWNrSWQvMjU1fTsoKHM9dGhpcy5waWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMudHJpYW5nbGVDb3VudD4wJiYodGhpcy50cmlhbmdsZVZBTy5iaW5kKCksZS5kcmF3QXJyYXlzKGUuVFJJQU5HTEVTLDAsMyp0aGlzLnRyaWFuZ2xlQ291bnQpLHRoaXMudHJpYW5nbGVWQU8udW5iaW5kKCkpLHRoaXMuZWRnZUNvdW50PjAmJih0aGlzLmVkZ2VWQU8uYmluZCgpLGUubGluZVdpZHRoKHRoaXMubGluZVdpZHRoKnRoaXMucGl4ZWxSYXRpbyksZS5kcmF3QXJyYXlzKGUuTElORVMsMCwyKnRoaXMuZWRnZUNvdW50KSx0aGlzLmVkZ2VWQU8udW5iaW5kKCkpLHRoaXMucG9pbnRDb3VudD4wKSYmKChzPXRoaXMucG9pbnRQaWNrU2hhZGVyKS5iaW5kKCkscy51bmlmb3Jtcz1sLHRoaXMucG9pbnRWQU8uYmluZCgpLGUuZHJhd0FycmF5cyhlLlBPSU5UUywwLHRoaXMucG9pbnRDb3VudCksdGhpcy5wb2ludFZBTy51bmJpbmQoKSl9LGsucGljaz1mdW5jdGlvbih0KXtpZighdClyZXR1cm4gbnVsbDtpZih0LmlkIT09dGhpcy5waWNrSWQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQudmFsdWVbMF0rMjU2KnQudmFsdWVbMV0rNjU1MzYqdC52YWx1ZVsyXSxyPXRoaXMuY2VsbHNbZV0sbj10aGlzLnBvc2l0aW9ucyxpPW5ldyBBcnJheShyLmxlbmd0aCksYT0wO2E8ci5sZW5ndGg7KythKWlbYV09bltyW2FdXTt2YXIgbz10LmNvb3JkWzBdLHM9dC5jb29yZFsxXTtpZighdGhpcy5waWNrVmVydGV4KXt2YXIgbD10aGlzLnBvc2l0aW9uc1tyWzBdXSxjPXRoaXMucG9zaXRpb25zW3JbMV1dLHU9dGhpcy5wb3NpdGlvbnNbclsyXV0sZj1bKGxbMF0rY1swXSt1WzBdKS8zLChsWzFdK2NbMV0rdVsxXSkvMywobFsyXStjWzJdK3VbMl0pLzNdO3JldHVybntfY2VsbENlbnRlcjohMCxwb3NpdGlvbjpbbyxzXSxpbmRleDplLGNlbGw6cixjZWxsSWQ6ZSxpbnRlbnNpdHk6dGhpcy5pbnRlbnNpdHlbZV0sZGF0YUNvb3JkaW5hdGU6Zn19dmFyIGg9bShpLFtvKnRoaXMucGl4ZWxSYXRpbyx0aGlzLl9yZXNvbHV0aW9uWzFdLXMqdGhpcy5waXhlbFJhdGlvXSx0aGlzLl9tb2RlbCx0aGlzLl92aWV3LHRoaXMuX3Byb2plY3Rpb24sdGhpcy5fcmVzb2x1dGlvbik7aWYoIWgpcmV0dXJuIG51bGw7dmFyIHA9aFsyXSxkPTA7Zm9yKGE9MDthPHIubGVuZ3RoOysrYSlkKz1wW2FdKnRoaXMuaW50ZW5zaXR5W3JbYV1dO3JldHVybntwb3NpdGlvbjpoWzFdLGluZGV4OnJbaFswXV0sY2VsbDpyLGNlbGxJZDplLGludGVuc2l0eTpkLGRhdGFDb29yZGluYXRlOnRoaXMucG9zaXRpb25zW3JbaFswXV1dfX0say5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy50ZXh0dXJlLmRpc3Bvc2UoKSx0aGlzLnRyaVNoYWRlci5kaXNwb3NlKCksdGhpcy5saW5lU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBvaW50U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMucG9pbnRQaWNrU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVkFPLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlUG9zaXRpb25zLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlQ29sb3JzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlVVZzLmRpc3Bvc2UoKSx0aGlzLnRyaWFuZ2xlTm9ybWFscy5kaXNwb3NlKCksdGhpcy50cmlhbmdsZUlkcy5kaXNwb3NlKCksdGhpcy5lZGdlVkFPLmRpc3Bvc2UoKSx0aGlzLmVkZ2VQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuZWRnZUNvbG9ycy5kaXNwb3NlKCksdGhpcy5lZGdlVVZzLmRpc3Bvc2UoKSx0aGlzLmVkZ2VJZHMuZGlzcG9zZSgpLHRoaXMucG9pbnRWQU8uZGlzcG9zZSgpLHRoaXMucG9pbnRQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMucG9pbnRDb2xvcnMuZGlzcG9zZSgpLHRoaXMucG9pbnRVVnMuZGlzcG9zZSgpLHRoaXMucG9pbnRTaXplcy5kaXNwb3NlKCksdGhpcy5wb2ludElkcy5kaXNwb3NlKCksdGhpcy5jb250b3VyVkFPLmRpc3Bvc2UoKSx0aGlzLmNvbnRvdXJQb3NpdGlvbnMuZGlzcG9zZSgpLHRoaXMuY29udG91clNoYWRlci5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpezE9PT1hcmd1bWVudHMubGVuZ3RoJiYodD0oZT10KS5nbCk7dmFyIHI9dC5nZXRFeHRlbnNpb24oIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiTU9aX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpfHx0LmdldEV4dGVuc2lvbigiV0VCS0lUX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpO2lmKCFyKXRocm93IG5ldyBFcnJvcigiZGVyaXZhdGl2ZXMgbm90IHN1cHBvcnRlZCIpO3ZhciBuPU0odCkscz1TKHQpLGw9RSh0KSxjPUwodCksZj1DKHQpLGg9UCh0KSxwPW8odCx1KG5ldyBVaW50OEFycmF5KFsyNTUsMjU1LDI1NSwyNTVdKSxbMSwxLDRdKSk7cC5nZW5lcmF0ZU1pcG1hcCgpLHAubWluRmlsdGVyPXQuTElORUFSX01JUE1BUF9MSU5FQVIscC5tYWdGaWx0ZXI9dC5MSU5FQVI7dmFyIGQ9aSh0KSxtPWkodCksZz1pKHQpLHY9aSh0KSx5PWkodCkseD1hKHQsW3tidWZmZXI6ZCx0eXBlOnQuRkxPQVQsc2l6ZTozfSx7YnVmZmVyOnksdHlwZTp0LlVOU0lHTkVEX0JZVEUsc2l6ZTo0LG5vcm1hbGl6ZWQ6ITB9LHtidWZmZXI6bSx0eXBlOnQuRkxPQVQsc2l6ZTo0fSx7YnVmZmVyOmcsdHlwZTp0LkZMT0FULHNpemU6Mn0se2J1ZmZlcjp2LHR5cGU6dC5GTE9BVCxzaXplOjN9XSksYj1pKHQpLF89aSh0KSx3PWkodCksaz1pKHQpLEE9YSh0LFt7YnVmZmVyOmIsdHlwZTp0LkZMT0FULHNpemU6M30se2J1ZmZlcjprLHR5cGU6dC5VTlNJR05FRF9CWVRFLHNpemU6NCxub3JtYWxpemVkOiEwfSx7YnVmZmVyOl8sdHlwZTp0LkZMT0FULHNpemU6NH0se2J1ZmZlcjp3LHR5cGU6dC5GTE9BVCxzaXplOjJ9XSksST1pKHQpLE89aSh0KSx6PWkodCksRD1pKHQpLFI9aSh0KSxGPWEodCxbe2J1ZmZlcjpJLHR5cGU6dC5GTE9BVCxzaXplOjN9LHtidWZmZXI6Uix0eXBlOnQuVU5TSUdORURfQllURSxzaXplOjQsbm9ybWFsaXplZDohMH0se2J1ZmZlcjpPLHR5cGU6dC5GTE9BVCxzaXplOjR9LHtidWZmZXI6eix0eXBlOnQuRkxPQVQsc2l6ZToyfSx7YnVmZmVyOkQsdHlwZTp0LkZMT0FULHNpemU6MX1dKSxCPWkodCksTj1hKHQsW3tidWZmZXI6Qix0eXBlOnQuRkxPQVQsc2l6ZTozfV0pLGo9bmV3IFQodCxwLG4scyxsLGMsZixoLGQseSxtLGcsdix4LGIsayxfLHcsQSxJLFIsTyx6LEQsRixCLE4pO3JldHVybiBqLnVwZGF0ZShlKSxqfX0seyIuL2xpYi9jbG9zZXN0LXBvaW50IjozMDEsIi4vbGliL3NoYWRlcnMiOjMwMixjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXNoYWRlciI6MzIzLCJnbC10ZXh0dXJlMmQiOjMzOCwiZ2wtdmFvIjozNDMsbmRhcnJheTo0NjIsbm9ybWFsczo0NjUsInNpbXBsaWNpYWwtY29tcGxleC1jb250b3VyIjo1MzIsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmdsLHI9bihlLFswLDAsMCwxLDEsMCwxLDFdKSxzPWkoZSxhLmJveFZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0JveD0ocz1bMCwwXSxsPVswLDBdLGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wbG90LG89dGhpcy5zaGFkZXIsYz1hLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixvLnVuaWZvcm1zLmxvPXMsby51bmlmb3Jtcy5oaT1sLG8udW5pZm9ybXMuY29sb3I9aSxjLmRyYXdBcnJheXMoYy5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUsby5ncmlkVmVydCxvLmdyaWRGcmFnKSxsPWkoZSxvLnRpY2tWZXJ0LG8uZ3JpZEZyYWcpO3JldHVybiBuZXcgcyh0LHIsYSxsKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksbz10KCIuL3NoYWRlcnMiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tTaGFkZXI9bix0aGlzLnRpY2tzPVtbXSxbXV19ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0LWV9dmFyIGMsdSxmLGgscCxkPXMucHJvdG90eXBlO2QuZHJhdz0oYz1bMCwwXSx1PVswLDBdLGY9WzAsMF0sZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5wbG90LGU9dGhpcy52Ym8scj10aGlzLnNoYWRlcixuPXRoaXMudGlja3MsaT10LmdsLGE9dC5fdGlja0JvdW5kcyxvPXQuZGF0YUJveCxzPXQudmlld0JveCxsPXQuZ3JpZExpbmVXaWR0aCxoPXQuZ3JpZExpbmVDb2xvcixwPXQuZ3JpZExpbmVFbmFibGUsZD10LnBpeGVsUmF0aW8sbT0wO208MjsrK20pe3ZhciBnPWFbbV0sdj1hW20rMl0tZyx5PS41KihvW20rMl0rb1ttXSkseD1vW20rMl0tb1ttXTt1W21dPTIqdi94LGNbbV09MiooZy15KS94fXIuYmluZCgpLGUuYmluZCgpLHIuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpLHIudW5pZm9ybXMuZGF0YVNoaWZ0PWMsci51bmlmb3Jtcy5kYXRhU2NhbGU9dTt2YXIgYj0wO2ZvcihtPTA7bTwyOysrbSl7ZlswXT1mWzFdPTAsZlttXT0xLHIudW5pZm9ybXMuZGF0YUF4aXM9ZixyLnVuaWZvcm1zLmxpbmVXaWR0aD1sW21dLyhzW20rMl0tc1ttXSkqZCxyLnVuaWZvcm1zLmNvbG9yPWhbbV07dmFyIF89NipuW21dLmxlbmd0aDtwW21dJiZfJiZpLmRyYXdBcnJheXMoaS5UUklBTkdMRVMsYixfKSxiKz1ffX0pLGQuZHJhd1RpY2tNYXJrcz1mdW5jdGlvbigpe3ZhciB0PVswLDBdLGU9WzAsMF0scj1bMSwwXSxuPVswLDFdLGk9WzAsMF0sbz1bMCwwXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHM9dGhpcy5wbG90LGM9dGhpcy52Ym8sdT10aGlzLnRpY2tTaGFkZXIsZj10aGlzLnRpY2tzLGg9cy5nbCxwPXMuX3RpY2tCb3VuZHMsZD1zLmRhdGFCb3gsbT1zLnZpZXdCb3gsZz1zLnBpeGVsUmF0aW8sdj1zLnNjcmVlbkJveCx5PXZbMl0tdlswXSx4PXZbM10tdlsxXSxiPW1bMl0tbVswXSxfPW1bM10tbVsxXSx3PTA7dzwyOysrdyl7dmFyIFQ9cFt3XSxrPXBbdysyXS1ULEE9LjUqKGRbdysyXStkW3ddKSxNPWRbdysyXS1kW3ddO2Vbd109MiprL00sdFt3XT0yKihULUEpL019ZVswXSo9Yi95LHRbMF0qPWIveSxlWzFdKj1fL3gsdFsxXSo9Xy94LHUuYmluZCgpLGMuYmluZCgpLHUuYXR0cmlidXRlcy5kYXRhQ29vcmQucG9pbnRlcigpO3ZhciBTPXUudW5pZm9ybXM7Uy5kYXRhU2hpZnQ9dCxTLmRhdGFTY2FsZT1lO3ZhciBFPXMudGlja01hcmtMZW5ndGgsTD1zLnRpY2tNYXJrV2lkdGgsQz1zLnRpY2tNYXJrQ29sb3IsUD02KmZbMF0ubGVuZ3RoLEk9TWF0aC5taW4oYS5nZShmWzBdLChkWzBdLXBbMF0pLyhwWzJdLXBbMF0pLGwpLGZbMF0ubGVuZ3RoKSxPPU1hdGgubWluKGEuZ3QoZlswXSwoZFsyXS1wWzBdKS8ocFsyXS1wWzBdKSxsKSxmWzBdLmxlbmd0aCksej0wKzYqSSxEPTYqTWF0aC5tYXgoMCxPLUkpLFI9TWF0aC5taW4oYS5nZShmWzFdLChkWzFdLXBbMV0pLyhwWzNdLXBbMV0pLGwpLGZbMV0ubGVuZ3RoKSxGPU1hdGgubWluKGEuZ3QoZlsxXSwoZFszXS1wWzFdKS8ocFszXS1wWzFdKSxsKSxmWzFdLmxlbmd0aCksQj1QKzYqUixOPTYqTWF0aC5tYXgoMCxGLVIpO2lbMF09MioobVswXS1FWzFdKS95LTEsaVsxXT0obVszXSttWzFdKS94LTEsb1swXT1FWzFdKmcveSxvWzFdPUxbMV0qZy94LE4mJihTLmNvbG9yPUNbMV0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPW4sUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMsQixOKSksaVswXT0obVsyXSttWzBdKS95LTEsaVsxXT0yKihtWzFdLUVbMF0pL3gtMSxvWzBdPUxbMF0qZy95LG9bMV09RVswXSpnL3gsRCYmKFMuY29sb3I9Q1swXSxTLnRpY2tTY2FsZT1vLFMuZGF0YUF4aXM9cixTLnNjcmVlbk9mZnNldD1pLGguZHJhd0FycmF5cyhoLlRSSUFOR0xFUyx6LEQpKSxpWzBdPTIqKG1bMl0rRVszXSkveS0xLGlbMV09KG1bM10rbVsxXSkveC0xLG9bMF09RVszXSpnL3ksb1sxXT1MWzNdKmcveCxOJiYoUy5jb2xvcj1DWzNdLFMudGlja1NjYWxlPW8sUy5kYXRhQXhpcz1uLFMuc2NyZWVuT2Zmc2V0PWksaC5kcmF3QXJyYXlzKGguVFJJQU5HTEVTLEIsTikpLGlbMF09KG1bMl0rbVswXSkveS0xLGlbMV09MioobVszXStFWzJdKS94LTEsb1swXT1MWzJdKmcveSxvWzFdPUVbMl0qZy94LEQmJihTLmNvbG9yPUNbMl0sUy50aWNrU2NhbGU9byxTLmRhdGFBeGlzPXIsUy5zY3JlZW5PZmZzZXQ9aSxoLmRyYXdBcnJheXMoaC5UUklBTkdMRVMseixEKSl9fSgpLGQudXBkYXRlPShoPVsxLDEsLTEsLTEsMSwtMV0scD1bMSwtMSwxLDEsLTEsLTFdLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LnRpY2tzLHI9dC5ib3VuZHMsbj1uZXcgRmxvYXQzMkFycmF5KDE4KihlWzBdLmxlbmd0aCtlWzFdLmxlbmd0aCkpLGk9KHRoaXMucGxvdC56ZXJvTGluZUVuYWJsZSwwKSxhPVtbXSxbXV0sbz0wO288MjsrK28pZm9yKHZhciBzPWFbb10sbD1lW29dLGM9cltvXSx1PXJbbysyXSxmPTA7ZjxsLmxlbmd0aDsrK2Ype3ZhciBkPShsW2ZdLngtYykvKHUtYyk7cy5wdXNoKGQpO2Zvcih2YXIgbT0wO208NjsrK20pbltpKytdPWQsbltpKytdPWhbbV0sbltpKytdPXBbbV19dGhpcy50aWNrcz1hLHRoaXMudmJvLnVwZGF0ZShuKX0pLGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMudmJvLmRpc3Bvc2UoKSx0aGlzLnNoYWRlci5kaXNwb3NlKCksdGhpcy50aWNrU2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImJpbmFyeS1zZWFyY2gtYm91bmRzIjoxMDAsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSxbLTEsLTEsLTEsMSwxLC0xLDEsMV0pLHM9aShlLGEubGluZVZlcnQsYS5saW5lRnJhZyk7cmV0dXJuIG5ldyBvKHQscixzKX07dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC1zaGFkZXIiKSxhPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cn12YXIgcyxsLGM9by5wcm90b3R5cGU7Yy5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zaGFkZXI7dGhpcy52Ym8uYmluZCgpLHRoaXMuc2hhZGVyLmJpbmQoKSx0LmF0dHJpYnV0ZXMuY29vcmQucG9pbnRlcigpLHQudW5pZm9ybXMuc2NyZWVuQm94PXRoaXMucGxvdC5zY3JlZW5Cb3h9LGMuZHJhd0xpbmU9KHM9WzAsMF0sbD1bMCwwXSxmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5wbG90LGM9dGhpcy5zaGFkZXIsdT1vLmdsO3NbMF09dCxzWzFdPWUsbFswXT1yLGxbMV09bixjLnVuaWZvcm1zLnN0YXJ0PXMsYy51bmlmb3Jtcy5lbmQ9bCxjLnVuaWZvcm1zLndpZHRoPWkqby5waXhlbFJhdGlvLGMudW5pZm9ybXMuY29sb3I9YSx1LmRyYXdBcnJheXModS5UUklBTkdMRV9TVFJJUCwwLDQpfSksYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy52Ym8uZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzIjozMDcsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyM31dLDMwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT1uKFsicHJlY2lzaW9uIGxvd3AgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudm9pZCBtYWluKCkge1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnh5eiAqIGNvbG9yLncsIGNvbG9yLncpO1xufVxuIl0pO2UuZXhwb3J0cz17bGluZVZlcnQ6bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgY29vcmQ7XG5cbnVuaWZvcm0gdmVjNCBzY3JlZW5Cb3g7XG51bmlmb3JtIHZlYzIgc3RhcnQsIGVuZDtcbnVuaWZvcm0gZmxvYXQgd2lkdGg7XG5cbnZlYzIgcGVycCh2ZWMyIHYpIHtcbiAgcmV0dXJuIHZlYzIodi55LCAtdi54KTtcbn1cblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICB2ZWMyIGRlbHRhID0gbm9ybWFsaXplKHBlcnAoc3RhcnQgLSBlbmQpKTtcbiAgdmVjMiBvZmZzZXQgPSBtaXgoc3RhcnQsIGVuZCwgMC41ICogKGNvb3JkLnkrMS4wKSk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW4ob2Zmc2V0ICsgMC41ICogd2lkdGggKiBkZWx0YSAqIGNvb3JkLngpLCAwLCAxKTtcbn1cbiJdKSxsaW5lRnJhZzppLHRleHRWZXJ0Om4oWyIjZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzMgdGV4dENvb3JkaW5hdGU7XG5cbnVuaWZvcm0gdmVjMiBkYXRhU2NhbGUsIGRhdGFTaGlmdCwgZGF0YUF4aXMsIHNjcmVlbk9mZnNldCwgdGV4dFNjYWxlO1xudW5pZm9ybSBmbG9hdCBhbmdsZTtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCBkYXRhT2Zmc2V0ICA9IHRleHRDb29yZGluYXRlLno7XG4gIHZlYzIgZ2x5cGhPZmZzZXQgID0gdGV4dENvb3JkaW5hdGUueHk7XG4gIG1hdDIgZ2x5cGhNYXRyaXggPSBtYXQyKGNvcyhhbmdsZSksIHNpbihhbmdsZSksIC1zaW4oYW5nbGUpLCBjb3MoYW5nbGUpKTtcbiAgdmVjMiBzY3JlZW5Db29yZGluYXRlID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YU9mZnNldCArIGRhdGFTaGlmdCkgK1xuICAgIGdseXBoTWF0cml4ICogZ2x5cGhPZmZzZXQgKiB0ZXh0U2NhbGUgKyBzY3JlZW5PZmZzZXQ7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChzY3JlZW5Db29yZGluYXRlLCAwLCAxKTtcbn1cbiJdKSx0ZXh0RnJhZzppLGdyaWRWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZTtcbnVuaWZvcm0gZmxvYXQgbGluZVdpZHRoO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzIgcG9zID0gZGF0YUF4aXMgKiAoZGF0YVNjYWxlICogZGF0YUNvb3JkLnggKyBkYXRhU2hpZnQpO1xuICBwb3MgKz0gMTAuMCAqIGRhdGFDb29yZC55ICogdmVjMihkYXRhQXhpcy55LCAtZGF0YUF4aXMueCkgKyBkYXRhQ29vcmQueiAqIGxpbmVXaWR0aDtcbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcywgMCwgMSk7XG59XG4iXSksZ3JpZEZyYWc6aSxib3hWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMyIGNvb3JkO1xuXG51bmlmb3JtIHZlYzQgc2NyZWVuQm94O1xudW5pZm9ybSB2ZWMyIGxvLCBoaTtcblxudmVjMiBzY3JlZW4odmVjMiB2KSB7XG4gIHJldHVybiAyLjAgKiAodiAtIHNjcmVlbkJveC54eSkgLyAoc2NyZWVuQm94Lnp3IC0gc2NyZWVuQm94Lnh5KSAtIDEuMDtcbn1cblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQoc2NyZWVuKG1peChsbywgaGksIGNvb3JkKSksIDAsIDEpO1xufVxuIl0pLHRpY2tWZXJ0Om4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIGRhdGFDb29yZDtcblxudW5pZm9ybSB2ZWMyIGRhdGFBeGlzLCBkYXRhU2hpZnQsIGRhdGFTY2FsZSwgc2NyZWVuT2Zmc2V0LCB0aWNrU2NhbGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMiBwb3MgPSBkYXRhQXhpcyAqIChkYXRhU2NhbGUgKiBkYXRhQ29vcmQueCArIGRhdGFTaGlmdCk7XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3MgKyB0aWNrU2NhbGUqZGF0YUNvb3JkLnl6ICsgc2NyZWVuT2Zmc2V0LCAwLCAxKTtcbn1cbiJdKX19LHtnbHNsaWZ5OjQyNH1dLDMwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPW4oZSksYT1pKGUscy50ZXh0VmVydCxzLnRleHRGcmFnKTtyZXR1cm4gbmV3IGwodCxyLGEpfTt2YXIgbj10KCJnbC1idWZmZXIiKSxpPXQoImdsLXNoYWRlciIpLGE9dCgidGV4dC1jYWNoZSIpLG89dCgiYmluYXJ5LXNlYXJjaC1ib3VuZHMiKSxzPXQoIi4vc2hhZGVycyIpO2Z1bmN0aW9uIGwodCxlLHIpe3RoaXMucGxvdD10LHRoaXMudmJvPWUsdGhpcy5zaGFkZXI9cix0aGlzLnRpY2tPZmZzZXQ9W1tdLFtdXSx0aGlzLnRpY2tYPVtbXSxbXV0sdGhpcy5sYWJlbE9mZnNldD1bMCwwXSx0aGlzLmxhYmVsQ291bnQ9WzAsMF19dmFyIGMsdSxmLGgscCxkLG09bC5wcm90b3R5cGU7bS5kcmF3VGlja3M9KGM9WzAsMF0sdT1bMCwwXSxmPVswLDBdLGZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGxvdCxyPXRoaXMuc2hhZGVyLG49dGhpcy50aWNrWFt0XSxpPXRoaXMudGlja09mZnNldFt0XSxhPWUuZ2wscz1lLnZpZXdCb3gsbD1lLmRhdGFCb3gsaD1lLnNjcmVlbkJveCxwPWUucGl4ZWxSYXRpbyxkPWUudGlja0VuYWJsZSxtPWUudGlja1BhZCxnPWUudGlja0NvbG9yLHY9ZS50aWNrQW5nbGUseT1lLmxhYmVsRW5hYmxlLHg9ZS5sYWJlbFBhZCxiPWUubGFiZWxDb2xvcixfPWUubGFiZWxBbmdsZSx3PXRoaXMubGFiZWxPZmZzZXRbdF0sVD10aGlzLmxhYmVsQ291bnRbdF0saz1vLmx0KG4sbFt0XSksQT1vLmxlKG4sbFt0KzJdKTtjWzBdPWNbMV09MCxjW3RdPTEsdVt0XT0oc1syK3RdK3NbdF0pLyhoWzIrdF0taFt0XSktMTt2YXIgTT0yL2hbMisoMV50KV0taFsxXnRdO3VbMV50XT1NKnNbMV50XS0xLGRbdF0mJih1WzFedF0tPU0qcCptW3RdLGs8QSYmaVtBXT5pW2tdJiYoci51bmlmb3Jtcy5kYXRhQXhpcz1jLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1nW3RdLHIudW5pZm9ybXMuYW5nbGU9dlt0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsaVtrXSxpW0FdLWlba10pKSkseVt0XSYmVCYmKHVbMV50XS09TSpwKnhbdF0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3RdLHIudW5pZm9ybXMuYW5nbGU9X1t0XSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRVMsdyxUKSksdVsxXnRdPU0qc1syKygxXnQpXS0xLGRbdCsyXSYmKHVbMV50XSs9TSpwKm1bdCsyXSxrPEEmJmlbQV0+aVtrXSYmKHIudW5pZm9ybXMuZGF0YUF4aXM9YyxyLnVuaWZvcm1zLnNjcmVlbk9mZnNldD11LHIudW5pZm9ybXMuY29sb3I9Z1t0KzJdLHIudW5pZm9ybXMuYW5nbGU9dlt0KzJdLGEuZHJhd0FycmF5cyhhLlRSSUFOR0xFUyxpW2tdLGlbQV0taVtrXSkpKSx5W3QrMl0mJlQmJih1WzFedF0rPU0qcCp4W3QrMl0sci51bmlmb3Jtcy5kYXRhQXhpcz1mLHIudW5pZm9ybXMuc2NyZWVuT2Zmc2V0PXUsci51bmlmb3Jtcy5jb2xvcj1iW3QrMl0sci51bmlmb3Jtcy5hbmdsZT1fW3QrMl0sYS5kcmF3QXJyYXlzKGEuVFJJQU5HTEVTLHcsVCkpfSksbS5kcmF3VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD1bMCwwXSxlPVswLDBdO3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMucGxvdCxuPXRoaXMuc2hhZGVyLGk9ci5nbCxhPXIuc2NyZWVuQm94LG89ci50aXRsZUNlbnRlcixzPXIudGl0bGVBbmdsZSxsPXIudGl0bGVDb2xvcixjPXIucGl4ZWxSYXRpbztpZih0aGlzLnRpdGxlQ291bnQpe2Zvcih2YXIgdT0wO3U8MjsrK3UpZVt1XT0yKihvW3VdKmMtYVt1XSkvKGFbMit1XS1hW3VdKS0xO24uYmluZCgpLG4udW5pZm9ybXMuZGF0YUF4aXM9dCxuLnVuaWZvcm1zLnNjcmVlbk9mZnNldD1lLG4udW5pZm9ybXMuYW5nbGU9cyxuLnVuaWZvcm1zLmNvbG9yPWwsaS5kcmF3QXJyYXlzKGkuVFJJQU5HTEVTLHRoaXMudGl0bGVPZmZzZXQsdGhpcy50aXRsZUNvdW50KX19fSgpLG0uYmluZD0oaD1bMCwwXSxwPVswLDBdLGQ9WzAsMF0sZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBsb3QsZT10aGlzLnNoYWRlcixyPXQuX3RpY2tCb3VuZHMsbj10LmRhdGFCb3gsaT10LnNjcmVlbkJveCxhPXQudmlld0JveDtlLmJpbmQoKTtmb3IodmFyIG89MDtvPDI7KytvKXt2YXIgcz1yW29dLGw9cltvKzJdLXMsYz0uNSoobltvKzJdK25bb10pLHU9bltvKzJdLW5bb10sZj1hW29dLG09YVtvKzJdLWYsZz1pW29dLHY9aVtvKzJdLWc7cFtvXT0yKmwvdSptL3YsaFtvXT0yKihzLWMpL3UqbS92fWRbMV09Mip0LnBpeGVsUmF0aW8vKGlbM10taVsxXSksZFswXT1kWzFdKihpWzNdLWlbMV0pLyhpWzJdLWlbMF0pLGUudW5pZm9ybXMuZGF0YVNjYWxlPXAsZS51bmlmb3Jtcy5kYXRhU2hpZnQ9aCxlLnVuaWZvcm1zLnRleHRTY2FsZT1kLHRoaXMudmJvLmJpbmQoKSxlLmF0dHJpYnV0ZXMudGV4dENvb3JkaW5hdGUucG9pbnRlcigpfSksbS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxzPVtdLGw9dC50aWNrcyxjPXQuYm91bmRzO2ZvcihvPTA7bzwyOysrbyl7dmFyIHU9W01hdGguZmxvb3Iocy5sZW5ndGgvMyldLGY9Wy0xLzBdLGg9bFtvXTtmb3IoZT0wO2U8aC5sZW5ndGg7KytlKXt2YXIgcD1oW2VdLGQ9cC54LG09cC50ZXh0LGc9cC5mb250fHwic2Fucy1zZXJpZiI7aT1wLmZvbnRTaXplfHwxMjtmb3IodmFyIHY9MS8oY1tvKzJdLWNbb10pLHk9Y1tvXSx4PW0uc3BsaXQoIlxuIiksYj0wO2I8eC5sZW5ndGg7YisrKWZvcihuPWEoZyx4W2JdKS5kYXRhLHI9MDtyPG4ubGVuZ3RoO3IrPTIpcy5wdXNoKG5bcl0qaSwtbltyKzFdKmktYippKjEuMiwoZC15KSp2KTt1LnB1c2goTWF0aC5mbG9vcihzLmxlbmd0aC8zKSksZi5wdXNoKGQpfXRoaXMudGlja09mZnNldFtvXT11LHRoaXMudGlja1hbb109Zn1mb3Iobz0wO288MjsrK28pe2Zvcih0aGlzLmxhYmVsT2Zmc2V0W29dPU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQubGFiZWxGb250W29dLHQubGFiZWxzW29dLHt0ZXh0QWxpZ246ImNlbnRlciJ9KS5kYXRhLGk9dC5sYWJlbFNpemVbb10sZT0wO2U8bi5sZW5ndGg7ZSs9MilzLnB1c2gobltlXSppLC1uW2UrMV0qaSwwKTt0aGlzLmxhYmVsQ291bnRbb109TWF0aC5mbG9vcihzLmxlbmd0aC8zKS10aGlzLmxhYmVsT2Zmc2V0W29dfWZvcih0aGlzLnRpdGxlT2Zmc2V0PU1hdGguZmxvb3Iocy5sZW5ndGgvMyksbj1hKHQudGl0bGVGb250LHQudGl0bGUpLmRhdGEsaT10LnRpdGxlU2l6ZSxlPTA7ZTxuLmxlbmd0aDtlKz0yKXMucHVzaChuW2VdKmksLW5bZSsxXSppLDApO3RoaXMudGl0bGVDb3VudD1NYXRoLmZsb29yKHMubGVuZ3RoLzMpLXRoaXMudGl0bGVPZmZzZXQsdGhpcy52Ym8udXBkYXRlKHMpfSxtLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZiby5kaXNwb3NlKCksdGhpcy5zaGFkZXIuZGlzcG9zZSgpfX0seyIuL3NoYWRlcnMiOjMwNywiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwiZ2wtYnVmZmVyIjoyNTcsImdsLXNoYWRlciI6MzIzLCJ0ZXh0LWNhY2hlIjo1NzB9XSwzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj1uKGUsW2UuZHJhd2luZ0J1ZmZlcldpZHRoLGUuZHJhd2luZ0J1ZmZlckhlaWdodF0pLGM9bmV3IGwoZSxyKTtyZXR1cm4gYy5ncmlkPWkoYyksYy50ZXh0PWEoYyksYy5saW5lPW8oYyksYy5ib3g9cyhjKSxjLnVwZGF0ZSh0KSxjfTt2YXIgbj10KCJnbC1zZWxlY3Qtc3RhdGljIiksaT10KCIuL2xpYi9ncmlkIiksYT10KCIuL2xpYi90ZXh0Iiksbz10KCIuL2xpYi9saW5lIikscz10KCIuL2xpYi9ib3giKTtmdW5jdGlvbiBsKHQsZSl7dGhpcy5nbD10LHRoaXMucGlja0J1ZmZlcj1lLHRoaXMuc2NyZWVuQm94PVswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSx0aGlzLnZpZXdCb3g9WzAsMCwwLDBdLHRoaXMuZGF0YUJveD1bLTEwLC0xMCwxMCwxMF0sdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVXaWR0aD1bMSwxXSx0aGlzLmdyaWRMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMudGlja01hcmtMZW5ndGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtXaWR0aD1bMCwwLDAsMF0sdGhpcy50aWNrTWFya0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tFbmFibGU9WyEwLCEwLCEwLCEwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVsUGFkPVsxNSwxNSwxNSwxNV0sdGhpcy5sYWJlbEFuZ2xlPVswLE1hdGguUEkvMiwwLDMqTWF0aC5QSS8yXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5sYWJlbENvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMudGl0bGVDZW50ZXI9WzAsMF0sdGhpcy50aXRsZUVuYWJsZT0hMCx0aGlzLnRpdGxlQW5nbGU9MCx0aGlzLnRpdGxlQ29sb3I9WzAsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnplcm9MaW5lRW5hYmxlPVshMCwhMF0sdGhpcy56ZXJvTGluZVdpZHRoPVs0LDRdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ib3JkZXJMaW5lRW5hYmxlPVshMCwhMCwhMCwhMF0sdGhpcy5ib3JkZXJMaW5lV2lkdGg9WzIsMiwyLDJdLHRoaXMuYm9yZGVyTGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZ3JpZD1udWxsLHRoaXMudGV4dD1udWxsLHRoaXMubGluZT1udWxsLHRoaXMuYm94PW51bGwsdGhpcy5vYmplY3RzPVtdLHRoaXMub3ZlcmxheXM9W10sdGhpcy5fdGlja0JvdW5kcz1bMS8wLDEvMCwtMS8wLC0xLzBdLHRoaXMuc3RhdGljPSExLHRoaXMuZGlydHk9ITEsdGhpcy5waWNrRGlydHk9ITEsdGhpcy5waWNrRGVsYXk9MTIwLHRoaXMucGlja1JhZGl1cz0xMCx0aGlzLl9waWNrVGltZW91dD1udWxsLHRoaXMuX2RyYXdQaWNrPXRoaXMuZHJhd1BpY2suYmluZCh0aGlzKSx0aGlzLl9kZXB0aENvdW50ZXI9MH12YXIgYz1sLnByb3RvdHlwZTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT10LnNsaWNlKCkscj0wO3I8ZS5sZW5ndGg7KytyKWVbcl09ZVtyXS5zbGljZSgpO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlKXtyZXR1cm4gdC54LWUueH1jLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5kaXJ0eT10aGlzLnBpY2tEaXJ0eT0hMH0sYy5zZXRPdmVybGF5RGlydHk9ZnVuY3Rpb24oKXt0aGlzLmRpcnR5PSEwfSxjLm5leHREZXB0aFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcHRoQ291bnRlcisrLzY1NTM2fSxjLmRyYXc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsLGU9dGhpcy5zY3JlZW5Cb3gscj10aGlzLnZpZXdCb3gsbj10aGlzLmRhdGFCb3gsaT10aGlzLnBpeGVsUmF0aW8sYT10aGlzLmdyaWQsbz10aGlzLmxpbmUscz10aGlzLnRleHQsbD10aGlzLm9iamVjdHM7aWYodGhpcy5fZGVwdGhDb3VudGVyPTAsdGhpcy5waWNrRGlydHkmJih0aGlzLl9waWNrVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3BpY2tUaW1lb3V0KSx0aGlzLnBpY2tEaXJ0eT0hMSx0aGlzLl9waWNrVGltZW91dD1zZXRUaW1lb3V0KHRoaXMuX2RyYXdQaWNrLHRoaXMucGlja0RlbGF5KSksdGhpcy5kaXJ0eSl7aWYodGhpcy5kaXJ0eT0hMSx0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHQuZW5hYmxlKHQuU0NJU1NPUl9URVNUKSx0LmRpc2FibGUodC5ERVBUSF9URVNUKSx0LmRlcHRoRnVuYyh0LkxFU1MpLHQuZGVwdGhNYXNrKCExKSx0LmVuYWJsZSh0LkJMRU5EKSx0LmJsZW5kRXF1YXRpb24odC5GVU5DX0FERCx0LkZVTkNfQUREKSx0LmJsZW5kRnVuYyh0Lk9ORSx0Lk9ORV9NSU5VU19TUkNfQUxQSEEpLHRoaXMuYm9yZGVyQ29sb3Ipe3Quc2Npc3NvcihlWzBdLGVbMV0sZVsyXS1lWzBdLGVbM10tZVsxXSk7dmFyIGM9dGhpcy5ib3JkZXJDb2xvcjt0LmNsZWFyQ29sb3IoY1swXSpjWzNdLGNbMV0qY1szXSxjWzJdKmNbM10sY1szXSksdC5jbGVhcih0LkNPTE9SX0JVRkZFUl9CSVR8dC5ERVBUSF9CVUZGRVJfQklUKX10LnNjaXNzb3IoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pLHQudmlld3BvcnQoclswXSxyWzFdLHJbMl0tclswXSxyWzNdLXJbMV0pO3ZhciB1PXRoaXMuYmFja2dyb3VuZENvbG9yO3QuY2xlYXJDb2xvcih1WzBdKnVbM10sdVsxXSp1WzNdLHVbMl0qdVszXSx1WzNdKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVCksYS5kcmF3KCk7dmFyIGY9dGhpcy56ZXJvTGluZUVuYWJsZSxoPXRoaXMuemVyb0xpbmVDb2xvcixwPXRoaXMuemVyb0xpbmVXaWR0aDtpZihmWzBdfHxmWzFdKXtvLmJpbmQoKTtmb3IodmFyIGQ9MDtkPDI7KytkKWlmKGZbZF0mJm5bZF08PTAmJm5bZCsyXT49MCl7dmFyIG09ZVtkXS1uW2RdKihlW2QrMl0tZVtkXSkvKG5bZCsyXS1uW2RdKTswPT09ZD9vLmRyYXdMaW5lKG0sZVsxXSxtLGVbM10scFtkXSxoW2RdKTpvLmRyYXdMaW5lKGVbMF0sbSxlWzJdLG0scFtkXSxoW2RdKX19Zm9yKGQ9MDtkPGwubGVuZ3RoOysrZClsW2RdLmRyYXcoKTt0LnZpZXdwb3J0KGVbMF0sZVsxXSxlWzJdLWVbMF0sZVszXS1lWzFdKSx0LnNjaXNzb3IoZVswXSxlWzFdLGVbMl0tZVswXSxlWzNdLWVbMV0pLHRoaXMuZ3JpZC5kcmF3VGlja01hcmtzKCksby5iaW5kKCk7dmFyIGc9dGhpcy5ib3JkZXJMaW5lRW5hYmxlLHY9dGhpcy5ib3JkZXJMaW5lV2lkdGgseT10aGlzLmJvcmRlckxpbmVDb2xvcjtmb3IoZ1sxXSYmby5kcmF3TGluZShyWzBdLHJbMV0tLjUqdlsxXSppLHJbMF0sclszXSsuNSp2WzNdKmksdlsxXSx5WzFdKSxnWzBdJiZvLmRyYXdMaW5lKHJbMF0tLjUqdlswXSppLHJbMV0sclsyXSsuNSp2WzJdKmksclsxXSx2WzBdLHlbMF0pLGdbM10mJm8uZHJhd0xpbmUoclsyXSxyWzFdLS41KnZbMV0qaSxyWzJdLHJbM10rLjUqdlszXSppLHZbM10seVszXSksZ1syXSYmby5kcmF3TGluZShyWzBdLS41KnZbMF0qaSxyWzNdLHJbMl0rLjUqdlsyXSppLHJbM10sdlsyXSx5WzJdKSxzLmJpbmQoKSxkPTA7ZDwyOysrZClzLmRyYXdUaWNrcyhkKTt0aGlzLnRpdGxlRW5hYmxlJiZzLmRyYXdUaXRsZSgpO3ZhciB4PXRoaXMub3ZlcmxheXM7Zm9yKGQ9MDtkPHgubGVuZ3RoOysrZCl4W2RdLmRyYXcoKTt0LmRpc2FibGUodC5TQ0lTU09SX1RFU1QpLHQuZGlzYWJsZSh0LkJMRU5EKSx0LmRlcHRoTWFzayghMCl9fSxjLmRyYXdQaWNrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RhdGljKXt2YXIgdD10aGlzLnBpY2tCdWZmZXI7dGhpcy5nbCx0aGlzLl9waWNrVGltZW91dD1udWxsLHQuYmVnaW4oKTtmb3IodmFyIGU9MSxyPXRoaXMub2JqZWN0cyxuPTA7bjxyLmxlbmd0aDsrK24pZT1yW25dLmRyYXdQaWNrKGUpO3QuZW5kKCl9fSxjLnBpY2s9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5zdGF0aWMpe3ZhciByPXRoaXMucGl4ZWxSYXRpbyxuPXRoaXMucGlja1BpeGVsUmF0aW8saT10aGlzLnZpZXdCb3gsYT0wfE1hdGgucm91bmQoKHQtaVswXS9yKSpuKSxvPTB8TWF0aC5yb3VuZCgoZS1pWzFdL3IpKm4pLHM9dGhpcy5waWNrQnVmZmVyLnF1ZXJ5KGEsbyx0aGlzLnBpY2tSYWRpdXMpO2lmKCFzKXJldHVybiBudWxsO2Zvcih2YXIgbD1zLmlkKyhzLnZhbHVlWzBdPDw4KSsocy52YWx1ZVsxXTw8MTYpKyhzLnZhbHVlWzJdPDwyNCksYz10aGlzLm9iamVjdHMsdT0wO3U8Yy5sZW5ndGg7Kyt1KXt2YXIgZj1jW3VdLnBpY2soYSxvLGwpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9fSxjLnNldFNjcmVlbkJveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjcmVlbkJveCxyPXRoaXMucGl4ZWxSYXRpbztlWzBdPTB8TWF0aC5yb3VuZCh0WzBdKnIpLGVbMV09MHxNYXRoLnJvdW5kKHRbMV0qciksZVsyXT0wfE1hdGgucm91bmQodFsyXSpyKSxlWzNdPTB8TWF0aC5yb3VuZCh0WzNdKnIpLHRoaXMuc2V0RGlydHkoKX0sYy5zZXREYXRhQm94PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YUJveDsoZVswXSE9PXRbMF18fGVbMV0hPT10WzFdfHxlWzJdIT09dFsyXXx8ZVszXSE9PXRbM10pJiYoZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLHRoaXMuc2V0RGlydHkoKSl9LGMuc2V0Vmlld0JveD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBpeGVsUmF0aW8scj10aGlzLnZpZXdCb3g7clswXT0wfE1hdGgucm91bmQodFswXSplKSxyWzFdPTB8TWF0aC5yb3VuZCh0WzFdKmUpLHJbMl09MHxNYXRoLnJvdW5kKHRbMl0qZSksclszXT0wfE1hdGgucm91bmQodFszXSplKTt2YXIgbj10aGlzLnBpY2tQaXhlbFJhdGlvO3RoaXMucGlja0J1ZmZlci5zaGFwZT1bMHxNYXRoLnJvdW5kKCh0WzJdLXRbMF0pKm4pLDB8TWF0aC5yb3VuZCgodFszXS10WzFdKSpuKV0sdGhpcy5zZXREaXJ0eSgpfSxjLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7dGhpcy5waXhlbFJhdGlvPXQucGl4ZWxSYXRpb3x8MTt2YXIgcj10aGlzLnBpeGVsUmF0aW87dGhpcy5waWNrUGl4ZWxSYXRpbz1NYXRoLm1heChyLDEpLHRoaXMuc2V0U2NyZWVuQm94KHQuc2NyZWVuQm94fHxbMCwwLGUuZHJhd2luZ0J1ZmZlcldpZHRoL3IsZS5kcmF3aW5nQnVmZmVySGVpZ2h0L3JdKTt0aGlzLnNjcmVlbkJveDt0aGlzLnNldFZpZXdCb3godC52aWV3Qm94fHxbLjEyNSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjEyNSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbMl0tdGhpcy5zY3JlZW5Cb3hbMF0pL3IsLjg3NSoodGhpcy5zY3JlZW5Cb3hbM10tdGhpcy5zY3JlZW5Cb3hbMV0pL3JdKTt2YXIgbj10aGlzLnZpZXdCb3gsaT0oblsyXS1uWzBdKS8oblszXS1uWzFdKTt0aGlzLnNldERhdGFCb3godC5kYXRhQm94fHxbLTEwLC0xMC9pLDEwLDEwL2ldKSx0aGlzLmJvcmRlckNvbG9yPSExIT09dC5ib3JkZXJDb2xvciYmKHQuYm9yZGVyQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmJhY2tncm91bmRDb2xvcj0odC5iYWNrZ3JvdW5kQ29sb3J8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lRW5hYmxlPSh0LmdyaWRMaW5lRW5hYmxlfHxbITAsITBdKS5zbGljZSgpLHRoaXMuZ3JpZExpbmVXaWR0aD0odC5ncmlkTGluZVdpZHRofHxbMSwxXSkuc2xpY2UoKSx0aGlzLmdyaWRMaW5lQ29sb3I9dSh0LmdyaWRMaW5lQ29sb3J8fFtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdXSksdGhpcy56ZXJvTGluZUVuYWJsZT0odC56ZXJvTGluZUVuYWJsZXx8WyEwLCEwXSkuc2xpY2UoKSx0aGlzLnplcm9MaW5lV2lkdGg9KHQuemVyb0xpbmVXaWR0aHx8WzQsNF0pLnNsaWNlKCksdGhpcy56ZXJvTGluZUNvbG9yPXUodC56ZXJvTGluZUNvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGlja01hcmtMZW5ndGg9KHQudGlja01hcmtMZW5ndGh8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tNYXJrV2lkdGg9KHQudGlja01hcmtXaWR0aHx8WzAsMCwwLDBdKS5zbGljZSgpLHRoaXMudGlja01hcmtDb2xvcj11KHQudGlja01hcmtDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLHRoaXMudGl0bGVDZW50ZXI9KHQudGl0bGVDZW50ZXJ8fFsuNSooblswXStuWzJdKS9yLChuWzNdKzEyMCkvcl0pLnNsaWNlKCksdGhpcy50aXRsZUVuYWJsZT0hKCJ0aXRsZUVuYWJsZSJpbiB0KXx8ISF0LnRpdGxlRW5hYmxlLHRoaXMudGl0bGVBbmdsZT10LnRpdGxlQW5nbGV8fDAsdGhpcy50aXRsZUNvbG9yPSh0LnRpdGxlQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmxhYmVsUGFkPSh0LmxhYmVsUGFkfHxbMTUsMTUsMTUsMTVdKS5zbGljZSgpLHRoaXMubGFiZWxBbmdsZT0odC5sYWJlbEFuZ2xlfHxbMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0pLnNsaWNlKCksdGhpcy5sYWJlbEVuYWJsZT0odC5sYWJlbEVuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLmxhYmVsQ29sb3I9dSh0LmxhYmVsQ29sb3J8fFtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dKSx0aGlzLnRpY2tQYWQ9KHQudGlja1BhZHx8WzE1LDE1LDE1LDE1XSkuc2xpY2UoKSx0aGlzLnRpY2tBbmdsZT0odC50aWNrQW5nbGV8fFswLDAsMCwwXSkuc2xpY2UoKSx0aGlzLnRpY2tFbmFibGU9KHQudGlja0VuYWJsZXx8WyEwLCEwLCEwLCEwXSkuc2xpY2UoKSx0aGlzLnRpY2tDb2xvcj11KHQudGlja0NvbG9yfHxbWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSksdGhpcy5ib3JkZXJMaW5lRW5hYmxlPSh0LmJvcmRlckxpbmVFbmFibGV8fFshMCwhMCwhMCwhMF0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lV2lkdGg9KHQuYm9yZGVyTGluZVdpZHRofHxbMiwyLDIsMl0pLnNsaWNlKCksdGhpcy5ib3JkZXJMaW5lQ29sb3I9dSh0LmJvcmRlckxpbmVDb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pO3ZhciBhPXQudGlja3N8fFtbXSxbXV0sbz10aGlzLl90aWNrQm91bmRzO29bMF09b1sxXT0xLzAsb1syXT1vWzNdPS0xLzA7Zm9yKHZhciBzPTA7czwyOysrcyl7dmFyIGw9YVtzXS5zbGljZSgwKTswIT09bC5sZW5ndGgmJihsLnNvcnQoZiksb1tzXT1NYXRoLm1pbihvW3NdLGxbMF0ueCksb1tzKzJdPU1hdGgubWF4KG9bcysyXSxsW2wubGVuZ3RoLTFdLngpKX10aGlzLmdyaWQudXBkYXRlKHtib3VuZHM6byx0aWNrczphfSksdGhpcy50ZXh0LnVwZGF0ZSh7Ym91bmRzOm8sdGlja3M6YSxsYWJlbHM6dC5sYWJlbHN8fFsieCIsInkiXSxsYWJlbFNpemU6dC5sYWJlbFNpemV8fFsxMiwxMl0sbGFiZWxGb250OnQubGFiZWxGb250fHxbInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIl0sdGl0bGU6dC50aXRsZXx8IiIsdGl0bGVTaXplOnQudGl0bGVTaXplfHwxOCx0aXRsZUZvbnQ6dC50aXRsZUZvbnR8fCJzYW5zLXNlcmlmIn0pLHRoaXMuc3RhdGljPSEhdC5zdGF0aWMsdGhpcy5zZXREaXJ0eSgpfSxjLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmJveC5kaXNwb3NlKCksdGhpcy5ncmlkLmRpc3Bvc2UoKSx0aGlzLnRleHQuZGlzcG9zZSgpLHRoaXMubGluZS5kaXNwb3NlKCk7Zm9yKHZhciB0PXRoaXMub2JqZWN0cy5sZW5ndGgtMTt0Pj0wOy0tdCl0aGlzLm9iamVjdHNbdF0uZGlzcG9zZSgpO3RoaXMub2JqZWN0cy5sZW5ndGg9MDtmb3IodD10aGlzLm92ZXJsYXlzLmxlbmd0aC0xO3Q+PTA7LS10KXRoaXMub3ZlcmxheXNbdF0uZGlzcG9zZSgpO3RoaXMub3ZlcmxheXMubGVuZ3RoPTAsdGhpcy5nbD1udWxsfSxjLmFkZE9iamVjdD1mdW5jdGlvbih0KXt0aGlzLm9iamVjdHMuaW5kZXhPZih0KTwwJiYodGhpcy5vYmplY3RzLnB1c2godCksdGhpcy5zZXREaXJ0eSgpKX0sYy5yZW1vdmVPYmplY3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub2JqZWN0cyxyPTA7cjxlLmxlbmd0aDsrK3IpaWYoZVtyXT09PXQpe2Uuc3BsaWNlKHIsMSksdGhpcy5zZXREaXJ0eSgpO2JyZWFrfX0sYy5hZGRPdmVybGF5PWZ1bmN0aW9uKHQpe3RoaXMub3ZlcmxheXMuaW5kZXhPZih0KTwwJiYodGhpcy5vdmVybGF5cy5wdXNoKHQpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCkpfSxjLnJlbW92ZU92ZXJsYXk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMub3ZlcmxheXMscj0wO3I8ZS5sZW5ndGg7KytyKWlmKGVbcl09PT10KXtlLnNwbGljZShyLDEpLHRoaXMuc2V0T3ZlcmxheURpcnR5KCk7YnJlYWt9fX0seyIuL2xpYi9ib3giOjMwNCwiLi9saWIvZ3JpZCI6MzA1LCIuL2xpYi9saW5lIjozMDYsIi4vbGliL3RleHQiOjMwOCwiZ2wtc2VsZWN0LXN0YXRpYyI6MzIyfV0sMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Q9dHx8ZG9jdW1lbnQuYm9keSxlPWV8fHt9O3ZhciByPVsuMDEsMS8wXTsiZGlzdGFuY2VMaW1pdHMiaW4gZSYmKHJbMF09ZS5kaXN0YW5jZUxpbWl0c1swXSxyWzFdPWUuZGlzdGFuY2VMaW1pdHNbMV0pOyJ6b29tTWluImluIGUmJihyWzBdPWUuem9vbU1pbik7Inpvb21NYXgiaW4gZSYmKHJbMV09ZS56b29tTWF4KTt2YXIgYz1pKHtjZW50ZXI6ZS5jZW50ZXJ8fFswLDAsMF0sdXA6ZS51cHx8WzAsMSwwXSxleWU6ZS5leWV8fFswLDAsMTBdLG1vZGU6ZS5tb2RlfHwib3JiaXQiLGRpc3RhbmNlTGltaXRzOnJ9KSx1PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSxmPTAsaD10LmNsaWVudFdpZHRoLHA9dC5jbGllbnRIZWlnaHQsZD17a2V5QmluZGluZ01vZGU6InJvdGF0ZSIsZW5hYmxlV2hlZWw6ITAsdmlldzpjLGVsZW1lbnQ6dCxkZWxheTplLmRlbGF5fHwxNixyb3RhdGVTcGVlZDplLnJvdGF0ZVNwZWVkfHwxLHpvb21TcGVlZDplLnpvb21TcGVlZHx8MSx0cmFuc2xhdGVTcGVlZDplLnRyYW5zbGF0ZVNwZWVkfHwxLGZsaXBYOiEhZS5mbGlwWCxmbGlwWTohIWUuZmxpcFksbW9kZXM6Yy5tb2Rlcyxfb3J0aG86ZS5fb3J0aG98fGUucHJvamVjdGlvbiYmIm9ydGhvZ3JhcGhpYyI9PT1lLnByb2plY3Rpb24udHlwZXx8ITEsdGljazpmdW5jdGlvbigpe3ZhciBlPW4oKSxyPXRoaXMuZGVsYXksaT1lLTIqcjtjLmlkbGUoZS1yKSxjLnJlY2FsY01hdHJpeChpKSxjLmZsdXNoKGUtKDEwMCsyKnIpKTtmb3IodmFyIGE9ITAsbz1jLmNvbXB1dGVkTWF0cml4LHM9MDtzPDE2OysrcylhPWEmJnVbc109PT1vW3NdLHVbc109b1tzXTt2YXIgbD10LmNsaWVudFdpZHRoPT09aCYmdC5jbGllbnRIZWlnaHQ9PT1wO3JldHVybiBoPXQuY2xpZW50V2lkdGgscD10LmNsaWVudEhlaWdodCxhPyFsOihmPU1hdGguZXhwKGMuY29tcHV0ZWRSYWRpdXNbMF0pLCEwKX0sbG9va0F0OmZ1bmN0aW9uKHQsZSxyKXtjLmxvb2tBdChjLmxhc3RUKCksdCxlLHIpfSxyb3RhdGU6ZnVuY3Rpb24odCxlLHIpe2Mucm90YXRlKGMubGFzdFQoKSx0LGUscil9LHBhbjpmdW5jdGlvbih0LGUscil7Yy5wYW4oYy5sYXN0VCgpLHQsZSxyKX0sdHJhbnNsYXRlOmZ1bmN0aW9uKHQsZSxyKXtjLnRyYW5zbGF0ZShjLmxhc3RUKCksdCxlLHIpfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGQse21hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRNYXRyaXh9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXRNYXRyaXgoYy5sYXN0VCgpLHQpLGMuY29tcHV0ZWRNYXRyaXh9LGVudW1lcmFibGU6ITB9LG1vZGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmdldE1vZGUoKX0sc2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWMuY29tcHV0ZWRVcC5zbGljZSgpLHI9Yy5jb21wdXRlZEV5ZS5zbGljZSgpLGk9Yy5jb21wdXRlZENlbnRlci5zbGljZSgpO2lmKGMuc2V0TW9kZSh0KSwidHVybnRhYmxlIj09PXQpe3ZhciBhPW4oKTtjLl9hY3RpdmUubG9va0F0KGEscixpLGUpLGMuX2FjdGl2ZS5sb29rQXQoYSs1MDAscixpLFswLDAsMV0pLGMuX2FjdGl2ZS5mbHVzaChhKX1yZXR1cm4gYy5nZXRNb2RlKCl9LGVudW1lcmFibGU6ITB9LGNlbnRlcjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuY29tcHV0ZWRDZW50ZXJ9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsdCksYy5jb21wdXRlZENlbnRlcn0sZW51bWVyYWJsZTohMH0sZXllOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYy5jb21wdXRlZEV5ZX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLmxvb2tBdChjLmxhc3RUKCksdCksYy5jb21wdXRlZEV5ZX0sZW51bWVyYWJsZTohMH0sdXA6e2dldDpmdW5jdGlvbigpe3JldHVybiBjLmNvbXB1dGVkVXB9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5sb29rQXQoYy5sYXN0VCgpLG51bGwsbnVsbCx0KSxjLmNvbXB1dGVkVXB9LGVudW1lcmFibGU6ITB9LGRpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBjLnNldERpc3RhbmNlKGMubGFzdFQoKSx0KSx0fSxlbnVtZXJhYmxlOiEwfSxkaXN0YW5jZUxpbWl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGMuZ2V0RGlzdGFuY2VMaW1pdHMocil9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gYy5zZXREaXN0YW5jZUxpbWl0cyh0KSx0fSxlbnVtZXJhYmxlOiEwfX0pLHQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCExfSkpLGQuX2xhc3RYPS0xLGQuX2xhc3RZPS0xLGQuX2xhc3RNb2RzPXtzaGlmdDohMSxjb250cm9sOiExLGFsdDohMSxtZXRhOiExfSxkLmVuYWJsZU1vdXNlTGlzdGVuZXJzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHIsaSxhKXt2YXIgbz1kLmtleUJpbmRpbmdNb2RlO2lmKCExIT09byl7dmFyIHM9InJvdGF0ZSI9PT1vLGw9InBhbiI9PT1vLHU9Inpvb20iPT09byxoPSEhYS5jb250cm9sLHA9ISFhLmFsdCxtPSEhYS5zaGlmdCxnPSEhKDEmZSksdj0hISgyJmUpLHk9ISEoNCZlKSx4PTEvdC5jbGllbnRIZWlnaHQsYj14KihyLWQuX2xhc3RYKSxfPXgqKGktZC5fbGFzdFkpLHc9ZC5mbGlwWD8xOi0xLFQ9ZC5mbGlwWT8xOi0xLGs9TWF0aC5QSSpkLnJvdGF0ZVNwZWVkLEE9bigpO2lmKC0xIT09ZC5fbGFzdFgmJi0xIT09ZC5fbGFzdFkmJigocyYmZyYmIWgmJiFwJiYhbXx8ZyYmIWgmJiFwJiZtKSYmYy5yb3RhdGUoQSx3KmsqYiwtVCprKl8sMCksKGwmJmcmJiFoJiYhcCYmIW18fHZ8fGcmJmgmJiFwJiYhbSkmJmMucGFuKEEsLWQudHJhbnNsYXRlU3BlZWQqYipmLGQudHJhbnNsYXRlU3BlZWQqXypmLDApLHUmJmcmJiFoJiYhcCYmIW18fHl8fGcmJiFoJiZwJiYhbSkpe3ZhciBNPS1kLnpvb21TcGVlZCpfL3dpbmRvdy5pbm5lckhlaWdodCooQS1jLmxhc3RUKCkpKjEwMDtjLnBhbihBLDAsMCxmKihNYXRoLmV4cChNKS0xKSl9cmV0dXJuIGQuX2xhc3RYPXIsZC5fbGFzdFk9aSxkLl9sYXN0TW9kcz1hLCEwfX1kLm1vdXNlTGlzdGVuZXI9YSh0LGUpLHQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDAsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKX0pLCEhbCYme3Bhc3NpdmU6ITB9KSx0LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHIpe3ZhciBuPXMoci5jaGFuZ2VkVG91Y2hlc1swXSx0KTtlKDEsblswXSxuWzFdLGQuX2xhc3RNb2RzKSxyLnByZXZlbnREZWZhdWx0KCl9KSwhIWwmJntwYXNzaXZlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsKGZ1bmN0aW9uKHQpe2UoMCxkLl9sYXN0WCxkLl9sYXN0WSxkLl9sYXN0TW9kcyl9KSwhIWwmJntwYXNzaXZlOiEwfSksZC53aGVlbExpc3RlbmVyPW8odCwoZnVuY3Rpb24odCxlKXtpZighMSE9PWQua2V5QmluZGluZ01vZGUmJmQuZW5hYmxlV2hlZWwpe3ZhciByPWQuZmxpcFg/MTotMSxpPWQuZmxpcFk/MTotMSxhPW4oKTtpZihNYXRoLmFicyh0KT5NYXRoLmFicyhlKSljLnJvdGF0ZShhLDAsMCwtdCpyKk1hdGguUEkqZC5yb3RhdGVTcGVlZC93aW5kb3cuaW5uZXJXaWR0aCk7ZWxzZSBpZighZC5fb3J0aG8pe3ZhciBvPS1kLnpvb21TcGVlZCppKmUvd2luZG93LmlubmVySGVpZ2h0KihhLWMubGFzdFQoKSkvMjA7Yy5wYW4oYSwwLDAsZiooTWF0aC5leHAobyktMSkpfX19KSwhMCl9LGQuZW5hYmxlTW91c2VMaXN0ZW5lcnMoKSxkfTt2YXIgbj10KCJyaWdodC1ub3ciKSxpPXQoIjNkLXZpZXciKSxhPXQoIm1vdXNlLWNoYW5nZSIpLG89dCgibW91c2Utd2hlZWwiKSxzPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLGw9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIil9LHsiM2QtdmlldyI6NTUsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDI2LCJtb3VzZS1jaGFuZ2UiOjQ0OSwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTAsIm1vdXNlLXdoZWVsIjo0NTIsInJpZ2h0LW5vdyI6NTE4fV0sMzExOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2xzbGlmeSIpLGk9dCgiZ2wtc2hhZGVyIiksYT1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG52YXJ5aW5nIHZlYzIgdXY7XG52b2lkIG1haW4oKSB7XG4gIHV2ID0gcG9zaXRpb247XG4gIGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMCwgMSk7XG59Il0pLG89bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBzYW1wbGVyMkQgYWNjdW1CdWZmZXI7XG52YXJ5aW5nIHZlYzIgdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjNCBhY2N1bSA9IHRleHR1cmUyRChhY2N1bUJ1ZmZlciwgMC41ICogKHV2ICsgMS4wKSk7XG4gIGdsX0ZyYWdDb2xvciA9IG1pbih2ZWM0KDEsMSwxLDEpLCBhY2N1bSk7XG59Il0pO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaSh0LGEsbyxudWxsLFt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzIifV0pfX0seyJnbC1zaGFkZXIiOjMyMyxnbHNsaWZ5OjQyNH1dLDMxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbWVyYS5qcyIpLGk9dCgiZ2wtYXhlczNkIiksYT10KCJnbC1heGVzM2QvcHJvcGVydGllcyIpLG89dCgiZ2wtc3Bpa2VzM2QiKSxzPXQoImdsLXNlbGVjdC1zdGF0aWMiKSxsPXQoImdsLWZibyIpLGM9dCgiYS1iaWctdHJpYW5nbGUiKSx1PXQoIm1vdXNlLWNoYW5nZSIpLGY9dCgiZ2wtbWF0NC9wZXJzcGVjdGl2ZSIpLGg9dCgiZ2wtbWF0NC9vcnRobyIpLHA9dCgiLi9saWIvc2hhZGVyIiksZD10KCJpcy1tb2JpbGUiKSh7dGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITB9KTtmdW5jdGlvbiBtKCl7dGhpcy5tb3VzZT1bLTEsLTFdLHRoaXMuc2NyZWVuPW51bGwsdGhpcy5kaXN0YW5jZT0xLzAsdGhpcy5pbmRleD1udWxsLHRoaXMuZGF0YUNvb3JkaW5hdGU9bnVsbCx0aGlzLmRhdGFQb3NpdGlvbj1udWxsLHRoaXMub2JqZWN0PW51bGwsdGhpcy5kYXRhPW51bGx9ZnVuY3Rpb24gZyh0KXt2YXIgZT1NYXRoLnJvdW5kKE1hdGgubG9nKE1hdGguYWJzKHQpKS9NYXRoLmxvZygxMCkpO2lmKGU8MCl7dmFyIHI9TWF0aC5yb3VuZChNYXRoLnBvdygxMCwtZSkpO3JldHVybiBNYXRoLmNlaWwodCpyKS9yfWlmKGU+MCl7cj1NYXRoLnJvdW5kKE1hdGgucG93KDEwLGUpKTtyZXR1cm4gTWF0aC5jZWlsKHQvcikqcn1yZXR1cm4gTWF0aC5jZWlsKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuImJvb2xlYW4iIT10eXBlb2YgdHx8dH1lLmV4cG9ydHM9e2NyZWF0ZVNjZW5lOmZ1bmN0aW9uKHQpeyh0PXR8fHt9KS5jYW1lcmE9dC5jYW1lcmF8fHt9O3ZhciBlPXQuY2FudmFzO2lmKCFlKXtpZihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHQuY29udGFpbmVyKXQuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpO2Vsc2UgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKX12YXIgcj10LmdsO3J8fCh0LmdsT3B0aW9ucyYmKGQ9ISF0LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIpLHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1udWxsO3RyeXsocj10LmdldENvbnRleHQoIndlYmdsIixlKSl8fChyPXQuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIixlKSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9cmV0dXJuIHJ9KGUsdC5nbE9wdGlvbnN8fHtwcmVtdWx0aXBsaWVkQWxwaGE6ITAsYW50aWFsaWFzOiEwLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjpkfSkpO2lmKCFyKXRocm93IG5ldyBFcnJvcigid2ViZ2wgbm90IHN1cHBvcnRlZCIpO3ZhciB5PXQuYm91bmRzfHxbWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx4PW5ldyBtLGI9bChyLHIuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCx7cHJlZmVyRmxvYXQ6IWR9KSxfPXAociksdz10LmNhbWVyYU9iamVjdCYmITA9PT10LmNhbWVyYU9iamVjdC5fb3J0aG98fHQuY2FtZXJhLnByb2plY3Rpb24mJiJvcnRob2dyYXBoaWMiPT09dC5jYW1lcmEucHJvamVjdGlvbi50eXBlfHwhMSxUPXtleWU6dC5jYW1lcmEuZXllfHxbMiwwLDBdLGNlbnRlcjp0LmNhbWVyYS5jZW50ZXJ8fFswLDAsMF0sdXA6dC5jYW1lcmEudXB8fFswLDEsMF0sem9vbU1pbjp0LmNhbWVyYS56b29tTWF4fHwuMSx6b29tTWF4OnQuY2FtZXJhLnpvb21NaW58fDEwMCxtb2RlOnQuY2FtZXJhLm1vZGV8fCJ0dXJudGFibGUiLF9vcnRobzp3fSxrPXQuYXhlc3x8e30sQT1pKHIsayk7QS5lbmFibGU9IWsuZGlzYWJsZTt2YXIgTT10LnNwaWtlc3x8e30sUz1vKHIsTSksRT1bXSxMPVtdLEM9W10sUD1bXSxJPSEwLE89ITAsej1uZXcgQXJyYXkoMTYpLEQ9bmV3IEFycmF5KDE2KSxSPXt2aWV3Om51bGwscHJvamVjdGlvbjp6LG1vZGVsOkQsX29ydGhvOiExfSxGPShPPSEwLFtyLmRyYXdpbmdCdWZmZXJXaWR0aCxyLmRyYXdpbmdCdWZmZXJIZWlnaHRdKSxCPXQuY2FtZXJhT2JqZWN0fHxuKGUsVCksTj17Z2w6cixjb250ZXh0TG9zdDohMSxwaXhlbFJhdGlvOnQucGl4ZWxSYXRpb3x8MSxjYW52YXM6ZSxzZWxlY3Rpb246eCxjYW1lcmE6QixheGVzOkEsYXhlc1BpeGVsczpudWxsLHNwaWtlczpTLGJvdW5kczp5LG9iamVjdHM6RSxzaGFwZTpGLGFzcGVjdDp0LmFzcGVjdFJhdGlvfHxbMSwxLDFdLHBpY2tSYWRpdXM6dC5waWNrUmFkaXVzfHwxMCx6TmVhcjp0LnpOZWFyfHwuMDEsekZhcjp0LnpGYXJ8fDFlMyxmb3Z5OnQuZm92eXx8TWF0aC5QSS80LGNsZWFyQ29sb3I6dC5jbGVhckNvbG9yfHxbMCwwLDAsMF0sYXV0b1Jlc2l6ZTp2KHQuYXV0b1Jlc2l6ZSksYXV0b0JvdW5kczp2KHQuYXV0b0JvdW5kcyksYXV0b1NjYWxlOiEhdC5hdXRvU2NhbGUsYXV0b0NlbnRlcjp2KHQuYXV0b0NlbnRlciksY2xpcFRvQm91bmRzOnYodC5jbGlwVG9Cb3VuZHMpLHNuYXBUb0RhdGE6ISF0LnNuYXBUb0RhdGEsb25zZWxlY3Q6dC5vbnNlbGVjdHx8bnVsbCxvbnJlbmRlcjp0Lm9ucmVuZGVyfHxudWxsLG9uY2xpY2s6dC5vbmNsaWNrfHxudWxsLGNhbWVyYVBhcmFtczpSLG9uY29udGV4dGxvc3M6bnVsbCxtb3VzZUxpc3RlbmVyOm51bGwsX3N0b3BwZWQ6ITEsZ2V0QXNwZWN0cmF0aW86ZnVuY3Rpb24oKXtyZXR1cm57eDp0aGlzLmFzcGVjdFswXSx5OnRoaXMuYXNwZWN0WzFdLHo6dGhpcy5hc3BlY3RbMl19fSxzZXRBc3BlY3RyYXRpbzpmdW5jdGlvbih0KXt0aGlzLmFzcGVjdFswXT10LngsdGhpcy5hc3BlY3RbMV09dC55LHRoaXMuYXNwZWN0WzJdPXQueixPPSEwfSxzZXRCb3VuZHM6ZnVuY3Rpb24odCxlKXt0aGlzLmJvdW5kc1swXVt0XT1lLm1pbix0aGlzLmJvdW5kc1sxXVt0XT1lLm1heH0sc2V0Q2xlYXJDb2xvcjpmdW5jdGlvbih0KXt0aGlzLmNsZWFyQ29sb3I9dH0sY2xlYXJSR0JBOmZ1bmN0aW9uKCl7dGhpcy5nbC5jbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvclswXSx0aGlzLmNsZWFyQ29sb3JbMV0sdGhpcy5jbGVhckNvbG9yWzJdLHRoaXMuY2xlYXJDb2xvclszXSksdGhpcy5nbC5jbGVhcih0aGlzLmdsLkNPTE9SX0JVRkZFUl9CSVR8dGhpcy5nbC5ERVBUSF9CVUZGRVJfQklUKX19LGo9W3IuZHJhd2luZ0J1ZmZlcldpZHRoL04ucGl4ZWxSYXRpb3wwLHIuZHJhd2luZ0J1ZmZlckhlaWdodC9OLnBpeGVsUmF0aW98MF07ZnVuY3Rpb24gVSgpe2lmKCFOLl9zdG9wcGVkJiZOLmF1dG9SZXNpemUpe3ZhciB0PWUucGFyZW50Tm9kZSxyPTEsbj0xO3QmJnQhPT1kb2N1bWVudC5ib2R5PyhyPXQuY2xpZW50V2lkdGgsbj10LmNsaWVudEhlaWdodCk6KHI9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQpO3ZhciBpPTB8TWF0aC5jZWlsKHIqTi5waXhlbFJhdGlvKSxhPTB8TWF0aC5jZWlsKG4qTi5waXhlbFJhdGlvKTtpZihpIT09ZS53aWR0aHx8YSE9PWUuaGVpZ2h0KXtlLndpZHRoPWksZS5oZWlnaHQ9YTt2YXIgbz1lLnN0eWxlO28ucG9zaXRpb249by5wb3NpdGlvbnx8ImFic29sdXRlIixvLmxlZnQ9IjBweCIsby50b3A9IjBweCIsby53aWR0aD1yKyJweCIsby5oZWlnaHQ9bisicHgiLEk9ITB9fX1OLmF1dG9SZXNpemUmJlUoKTtmdW5jdGlvbiBWKCl7Zm9yKHZhciB0PUUubGVuZ3RoLGU9UC5sZW5ndGgsbj0wO248ZTsrK24pQ1tuXT0wO3Q6Zm9yKG49MDtuPHQ7KytuKXt2YXIgaT1FW25dLGE9aS5waWNrU2xvdHM7aWYoYSl7Zm9yKHZhciBvPTA7bzxlOysrbylpZihDW29dK2E8MjU1KXtMW25dPW8saS5zZXRQaWNrQmFzZShDW29dKzEpLENbb10rPWE7Y29udGludWUgdH12YXIgbD1zKHIsRik7TFtuXT1lLFAucHVzaChsKSxDLnB1c2goYSksaS5zZXRQaWNrQmFzZSgxKSxlKz0xfWVsc2UgTFtuXT0tMX1mb3IoO2U+MCYmMD09PUNbZS0xXTspQy5wb3AoKSxQLnBvcCgpLmRpc3Bvc2UoKX1mdW5jdGlvbiBIKCl7aWYoTi5jb250ZXh0TG9zdClyZXR1cm4hMDtyLmlzQ29udGV4dExvc3QoKSYmKE4uY29udGV4dExvc3Q9ITAsTi5tb3VzZUxpc3RlbmVyLmVuYWJsZWQ9ITEsTi5zZWxlY3Rpb24ub2JqZWN0PW51bGwsTi5vbmNvbnRleHRsb3NzJiZOLm9uY29udGV4dGxvc3MoKSl9d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsVSksTi51cGRhdGU9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQ9dHx8e30sST0hMCxPPSEwKX0sTi5hZGQ9ZnVuY3Rpb24odCl7Ti5fc3RvcHBlZHx8KHQuYXhlcz1BLEUucHVzaCh0KSxMLnB1c2goLTEpLEk9ITAsTz0hMCxWKCkpfSxOLnJlbW92ZT1mdW5jdGlvbih0KXtpZighTi5fc3RvcHBlZCl7dmFyIGU9RS5pbmRleE9mKHQpO2U8MHx8KEUuc3BsaWNlKGUsMSksTC5wb3AoKSxJPSEwLE89ITAsVigpKX19LE4uZGlzcG9zZT1mdW5jdGlvbigpe2lmKCFOLl9zdG9wcGVkJiYoTi5fc3RvcHBlZD0hMCx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixVKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dGxvc3QiLEgpLE4ubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLCFOLmNvbnRleHRMb3N0KSl7QS5kaXNwb3NlKCksUy5kaXNwb3NlKCk7Zm9yKHZhciB0PTA7dDxFLmxlbmd0aDsrK3QpRVt0XS5kaXNwb3NlKCk7Yi5kaXNwb3NlKCk7Zm9yKHQ9MDt0PFAubGVuZ3RoOysrdClQW3RdLmRpc3Bvc2UoKTtfLmRpc3Bvc2UoKSxyPW51bGwsQT1udWxsLFM9bnVsbCxFPVtdfX0sTi5fbW91c2VSb3RhdGluZz0hMSxOLl9wcmV2QnV0dG9ucz0wLE4uZW5hYmxlTW91c2VMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtOLm1vdXNlTGlzdGVuZXI9dShlLChmdW5jdGlvbih0LGUscil7aWYoIU4uX3N0b3BwZWQpe3ZhciBuPVAubGVuZ3RoLGk9RS5sZW5ndGgsYT14Lm9iamVjdDt4LmRpc3RhbmNlPTEvMCx4Lm1vdXNlWzBdPWUseC5tb3VzZVsxXT1yLHgub2JqZWN0PW51bGwseC5zY3JlZW49bnVsbCx4LmRhdGFDb29yZGluYXRlPXguZGF0YVBvc2l0aW9uPW51bGw7dmFyIG89ITE7aWYodCYmTi5fcHJldkJ1dHRvbnMpTi5fbW91c2VSb3RhdGluZz0hMDtlbHNle04uX21vdXNlUm90YXRpbmcmJihPPSEwKSxOLl9tb3VzZVJvdGF0aW5nPSExO2Zvcih2YXIgcz0wO3M8bjsrK3Mpe3ZhciBsPVBbc10ucXVlcnkoZSxqWzFdLXItMSxOLnBpY2tSYWRpdXMpO2lmKGwpe2lmKGwuZGlzdGFuY2U+eC5kaXN0YW5jZSljb250aW51ZTtmb3IodmFyIGM9MDtjPGk7KytjKXt2YXIgdT1FW2NdO2lmKExbY109PT1zKXt2YXIgZj11LnBpY2sobCk7ZiYmKHguYnV0dG9ucz10LHguc2NyZWVuPWwuY29vcmQseC5kaXN0YW5jZT1sLmRpc3RhbmNlLHgub2JqZWN0PXUseC5pbmRleD1mLmRpc3RhbmNlLHguZGF0YVBvc2l0aW9uPWYucG9zaXRpb24seC5kYXRhQ29vcmRpbmF0ZT1mLmRhdGFDb29yZGluYXRlLHguZGF0YT1mLG89ITApfX19fX1hJiZhIT09eC5vYmplY3QmJihhLmhpZ2hsaWdodCYmYS5oaWdobGlnaHQobnVsbCksST0hMCkseC5vYmplY3QmJih4Lm9iamVjdC5oaWdobGlnaHQmJngub2JqZWN0LmhpZ2hsaWdodCh4LmRhdGEpLEk9ITApLChvPW98fHgub2JqZWN0IT09YSkmJk4ub25zZWxlY3QmJk4ub25zZWxlY3QoeCksMSZ0JiYhKDEmTi5fcHJldkJ1dHRvbnMpJiZOLm9uY2xpY2smJk4ub25jbGljayh4KSxOLl9wcmV2QnV0dG9ucz10fX0pKX0sZS5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixIKTt2YXIgcT1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSxHPVtxWzBdLnNsaWNlKCkscVsxXS5zbGljZSgpXTtmdW5jdGlvbiBZKCl7aWYoIUgoKSl7VSgpO3ZhciB0PU4uY2FtZXJhLnRpY2soKTtSLnZpZXc9Ti5jYW1lcmEubWF0cml4LEk9SXx8dCxPPU98fHQsQS5waXhlbFJhdGlvPU4ucGl4ZWxSYXRpbyxTLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvO3ZhciBlPUUubGVuZ3RoLG49cVswXSxpPXFbMV07blswXT1uWzFdPW5bMl09MS8wLGlbMF09aVsxXT1pWzJdPS0xLzA7Zm9yKHZhciBvPTA7bzxlOysrbyl7KEM9RVtvXSkucGl4ZWxSYXRpbz1OLnBpeGVsUmF0aW8sQy5heGVzPU4uYXhlcyxJPUl8fCEhQy5kaXJ0eSxPPU98fCEhQy5kaXJ0eTt2YXIgcz1DLmJvdW5kcztpZihzKWZvcih2YXIgbD1zWzBdLHU9c1sxXSxwPTA7cDwzOysrcCluW3BdPU1hdGgubWluKG5bcF0sbFtwXSksaVtwXT1NYXRoLm1heChpW3BdLHVbcF0pfXZhciBkPU4uYm91bmRzO2lmKE4uYXV0b0JvdW5kcylmb3IocD0wO3A8MzsrK3Ape2lmKGlbcF08bltwXSluW3BdPS0xLGlbcF09MTtlbHNle25bcF09PT1pW3BdJiYobltwXS09MSxpW3BdKz0xKTt2YXIgbT0uMDUqKGlbcF0tbltwXSk7bltwXT1uW3BdLW0saVtwXT1pW3BdK219ZFswXVtwXT1uW3BdLGRbMV1bcF09aVtwXX12YXIgdj0hMTtmb3IocD0wO3A8MzsrK3Apdj12fHxHWzBdW3BdIT09ZFswXVtwXXx8R1sxXVtwXSE9PWRbMV1bcF0sR1swXVtwXT1kWzBdW3BdLEdbMV1bcF09ZFsxXVtwXTtpZihPPU98fHYsST1JfHx2KXtpZih2KXt2YXIgeT1bMCwwLDBdO2ZvcihvPTA7bzwzOysrbyl5W29dPWcoKGRbMV1bb10tZFswXVtvXSkvMTApO0EuYXV0b1RpY2tzP0EudXBkYXRlKHtib3VuZHM6ZCx0aWNrU3BhY2luZzp5fSk6QS51cGRhdGUoe2JvdW5kczpkfSl9dmFyIFQ9ci5kcmF3aW5nQnVmZmVyV2lkdGgsaz1yLmRyYXdpbmdCdWZmZXJIZWlnaHQ7RlswXT1ULEZbMV09ayxqWzBdPTB8TWF0aC5tYXgoVC9OLnBpeGVsUmF0aW8sMSksalsxXT0wfE1hdGgubWF4KGsvTi5waXhlbFJhdGlvLDEpLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ib3VuZHMsbj10LmNhbWVyYVBhcmFtcyxpPW4ucHJvamVjdGlvbixhPW4ubW9kZWwsbz10LmdsLmRyYXdpbmdCdWZmZXJXaWR0aCxzPXQuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCxsPXQuek5lYXIsYz10LnpGYXIsdT10LmZvdnkscD1vL3M7ZT8oaChpLC1wLHAsLTEsMSxsLGMpLG4uX29ydGhvPSEwKTooZihpLHUscCxsLGMpLG4uX29ydGhvPSExKTtmb3IodmFyIGQ9MDtkPDE2OysrZClhW2RdPTA7YVsxNV09MTt2YXIgbT0wO2ZvcihkPTA7ZDwzOysrZCltPU1hdGgubWF4KG0sclsxXVtkXS1yWzBdW2RdKTtmb3IoZD0wO2Q8MzsrK2QpdC5hdXRvU2NhbGU/YVs1KmRdPXQuYXNwZWN0W2RdLyhyWzFdW2RdLXJbMF1bZF0pOmFbNSpkXT0xL20sdC5hdXRvQ2VudGVyJiYoYVsxMitkXT0uNSotYVs1KmRdKihyWzBdW2RdK3JbMV1bZF0pKX0oTix3KTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXNCb3VuZHM9ZCxOLmNsaXBUb0JvdW5kcyYmKEMuY2xpcEJvdW5kcz1kKX14Lm9iamVjdCYmKE4uc25hcFRvRGF0YT9TLnBvc2l0aW9uPXguZGF0YUNvb3JkaW5hdGU6Uy5wb3NpdGlvbj14LmRhdGFQb3NpdGlvbixTLmJvdW5kcz1kKSxPJiYoTz0hMSxmdW5jdGlvbigpe2lmKCFIKCkpe3IuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMCksci5kaXNhYmxlKHIuQkxFTkQpLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpO2Zvcih2YXIgdD1FLmxlbmd0aCxlPVAubGVuZ3RoLG49MDtuPGU7KytuKXt2YXIgaT1QW25dO2kuc2hhcGU9aixpLmJlZ2luKCk7Zm9yKHZhciBhPTA7YTx0OysrYSlpZihMW2FdPT09bil7dmFyIG89RVthXTtvLmRyYXdQaWNrJiYoby5waXhlbFJhdGlvPTEsby5kcmF3UGljayhSKSl9aS5lbmQoKX19fSgpKSxOLmF4ZXNQaXhlbHM9YShOLmF4ZXMsUixULGspLE4ub25yZW5kZXImJk4ub25yZW5kZXIoKSxyLmJpbmRGcmFtZWJ1ZmZlcihyLkZSQU1FQlVGRkVSLG51bGwpLHIudmlld3BvcnQoMCwwLFQsayksTi5jbGVhclJHQkEoKSxyLmRlcHRoTWFzayghMCksci5jb2xvck1hc2soITAsITAsITAsITApLHIuZW5hYmxlKHIuREVQVEhfVEVTVCksci5kZXB0aEZ1bmMoci5MRVFVQUwpLHIuZGlzYWJsZShyLkJMRU5EKSxyLmRpc2FibGUoci5DVUxMX0ZBQ0UpO3ZhciBNPSExO0EuZW5hYmxlJiYoTT1NfHxBLmlzVHJhbnNwYXJlbnQoKSxBLmRyYXcoUikpLFMuYXhlcz1BLHgub2JqZWN0JiZTLmRyYXcoUiksci5kaXNhYmxlKHIuQ1VMTF9GQUNFKTtmb3Iobz0wO288ZTsrK28peyhDPUVbb10pLmF4ZXM9QSxDLnBpeGVsUmF0aW89Ti5waXhlbFJhdGlvLEMuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpLEMuaXNUcmFuc3BhcmVudCYmQy5pc1RyYW5zcGFyZW50KCkmJihNPSEwKX1pZihNKXtiLnNoYXBlPUYsYi5iaW5kKCksci5jbGVhcihyLkRFUFRIX0JVRkZFUl9CSVQpLHIuY29sb3JNYXNrKCExLCExLCExLCExKSxyLmRlcHRoTWFzayghMCksci5kZXB0aEZ1bmMoci5MRVNTKSxBLmVuYWJsZSYmQS5pc1RyYW5zcGFyZW50KCkmJkEuZHJhd1RyYW5zcGFyZW50KFIpO2ZvcihvPTA7bzxlOysrbyl7KEM9RVtvXSkuaXNPcGFxdWUmJkMuaXNPcGFxdWUoKSYmQy5kcmF3KFIpfXIuZW5hYmxlKHIuQkxFTkQpLHIuYmxlbmRFcXVhdGlvbihyLkZVTkNfQUREKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuY29sb3JNYXNrKCEwLCEwLCEwLCEwKSxyLmRlcHRoTWFzayghMSksci5jbGVhckNvbG9yKDAsMCwwLDApLHIuY2xlYXIoci5DT0xPUl9CVUZGRVJfQklUKSxBLmlzVHJhbnNwYXJlbnQoKSYmQS5kcmF3VHJhbnNwYXJlbnQoUik7Zm9yKG89MDtvPGU7KytvKXt2YXIgQzsoQz1FW29dKS5pc1RyYW5zcGFyZW50JiZDLmlzVHJhbnNwYXJlbnQoKSYmQy5kcmF3VHJhbnNwYXJlbnQoUil9ci5iaW5kRnJhbWVidWZmZXIoci5GUkFNRUJVRkZFUixudWxsKSxyLmJsZW5kRnVuYyhyLk9ORSxyLk9ORV9NSU5VU19TUkNfQUxQSEEpLHIuZGlzYWJsZShyLkRFUFRIX1RFU1QpLF8uYmluZCgpLGIuY29sb3JbMF0uYmluZCgwKSxfLnVuaWZvcm1zLmFjY3VtQnVmZmVyPTAsYyhyKSxyLmRpc2FibGUoci5CTEVORCl9ST0hMTtmb3Iobz0wO288ZTsrK28pRVtvXS5kaXJ0eT0hMX19fXJldHVybiBOLmVuYWJsZU1vdXNlTGlzdGVuZXJzKCksZnVuY3Rpb24gdCgpe2lmKE4uX3N0b3BwZWR8fE4uY29udGV4dExvc3QpcmV0dXJuO1koKSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9KCksTi5yZWRyYXc9ZnVuY3Rpb24oKXtOLl9zdG9wcGVkfHwoST0hMCxZKCkpfSxOfSxjcmVhdGVDYW1lcmE6bn19LHsiLi9jYW1lcmEuanMiOjMxMCwiLi9saWIvc2hhZGVyIjozMTEsImEtYmlnLXRyaWFuZ2xlIjo2NiwiZ2wtYXhlczNkIjoyNDksImdsLWF4ZXMzZC9wcm9wZXJ0aWVzIjoyNTYsImdsLWZibyI6MjY1LCJnbC1tYXQ0L29ydGhvIjoyOTAsImdsLW1hdDQvcGVyc3BlY3RpdmUiOjI5MSwiZ2wtc2VsZWN0LXN0YXRpYyI6MzIyLCJnbC1zcGlrZXMzZCI6MzMyLCJpcy1tb2JpbGUiOjQzNSwibW91c2UtY2hhbmdlIjo0NDl9XSwzMTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJnbHNsaWZ5Iik7ci5wb2ludFZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSBmbG9hdCBwb2ludENsb3VkO1xuXG5oaWdocCBmbG9hdCByYW5kKHZlYzIgY28pIHtcbiAgaGlnaHAgZmxvYXQgYSA9IDEyLjk4OTg7XG4gIGhpZ2hwIGZsb2F0IGIgPSA3OC4yMzM7XG4gIGhpZ2hwIGZsb2F0IGMgPSA0Mzc1OC41NDUzO1xuICBoaWdocCBmbG9hdCBkID0gZG90KGNvLnh5LCB2ZWMyKGEsIGIpKTtcbiAgaGlnaHAgZmxvYXQgZSA9IG1vZChkLCAzLjE0KTtcbiAgcmV0dXJuIGZyYWN0KHNpbihlKSAqIGMpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgaGdQb3NpdGlvbiA9IG1hdHJpeCAqIHZlYzMocG9zaXRpb24sIDEpO1xuICBnbF9Qb3NpdGlvbiAgPSB2ZWM0KGhnUG9zaXRpb24ueHksIDAsIGhnUG9zaXRpb24ueik7XG4gICAgLy8gaWYgd2UgZG9uJ3Qgaml0dGVyIHRoZSBwb2ludCBzaXplIGEgYml0LCBvdmVyYWxsIHBvaW50IGNsb3VkXG4gICAgLy8gc2F0dXJhdGlvbiAnanVtcHMnIG9uIHpvb21pbmcsIHdoaWNoIGlzIGRpc3R1cmJpbmcgYW5kIGNvbmZ1c2luZ1xuICBnbF9Qb2ludFNpemUgPSBwb2ludFNpemUgKiAoKDE5LjUgKyByYW5kKHBvc2l0aW9uKSkgLyAyMC4wKTtcbiAgaWYocG9pbnRDbG91ZCAhPSAwLjApIHsgLy8gcG9pbnRDbG91ZCBpcyB0cnV0aHlcbiAgICAvLyBnZXQgdGhlIHNhbWUgc3F1YXJlIHN1cmZhY2UgYXMgY2lyY2xlIHdvdWxkIGJlXG4gICAgZ2xfUG9pbnRTaXplICo9IDAuODg2O1xuICB9XG59Il0pLHIucG9pbnRGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIHZlYzQgY29sb3IsIGJvcmRlckNvbG9yO1xudW5pZm9ybSBmbG9hdCBjZW50ZXJGcmFjdGlvbjtcbnVuaWZvcm0gZmxvYXQgcG9pbnRDbG91ZDtcblxudm9pZCBtYWluKCkge1xuICBmbG9hdCByYWRpdXM7XG4gIHZlYzQgYmFzZUNvbG9yO1xuICBpZihwb2ludENsb3VkICE9IDAuMCkgeyAvLyBwb2ludENsb3VkIGlzIHRydXRoeVxuICAgIGlmKGNlbnRlckZyYWN0aW9uID09IDEuMCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdsX0ZyYWdDb2xvciA9IG1peChib3JkZXJDb2xvciwgY29sb3IsIGNlbnRlckZyYWN0aW9uKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmFkaXVzID0gbGVuZ3RoKDIuMCAqIGdsX1BvaW50Q29vcmQueHkgLSAxLjApO1xuICAgIGlmKHJhZGl1cyA+IDEuMCkge1xuICAgICAgZGlzY2FyZDtcbiAgICB9XG4gICAgYmFzZUNvbG9yID0gbWl4KGJvcmRlckNvbG9yLCBjb2xvciwgc3RlcChyYWRpdXMsIGNlbnRlckZyYWN0aW9uKSk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IucmdiICogYmFzZUNvbG9yLmEsIGJhc2VDb2xvci5hKTtcbiAgfVxufVxuIl0pLHIucGlja1ZlcnRleD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IHBpY2tJZDtcblxudW5pZm9ybSBtYXQzIG1hdHJpeDtcbnVuaWZvcm0gZmxvYXQgcG9pbnRTaXplO1xudW5pZm9ybSB2ZWM0IHBpY2tPZmZzZXQ7XG5cbnZhcnlpbmcgdmVjNCBmcmFnSWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgdmVjMyBoZ1Bvc2l0aW9uID0gbWF0cml4ICogdmVjMyhwb3NpdGlvbiwgMSk7XG4gIGdsX1Bvc2l0aW9uICA9IHZlYzQoaGdQb3NpdGlvbi54eSwgMCwgaGdQb3NpdGlvbi56KTtcbiAgZ2xfUG9pbnRTaXplID0gcG9pbnRTaXplO1xuXG4gIHZlYzQgaWQgPSBwaWNrSWQgKyBwaWNrT2Zmc2V0O1xuICBpZC55ICs9IGZsb29yKGlkLnggLyAyNTYuMCk7XG4gIGlkLnggLT0gZmxvb3IoaWQueCAvIDI1Ni4wKSAqIDI1Ni4wO1xuXG4gIGlkLnogKz0gZmxvb3IoaWQueSAvIDI1Ni4wKTtcbiAgaWQueSAtPSBmbG9vcihpZC55IC8gMjU2LjApICogMjU2LjA7XG5cbiAgaWQudyArPSBmbG9vcihpZC56IC8gMjU2LjApO1xuICBpZC56IC09IGZsb29yKGlkLnogLyAyNTYuMCkgKiAyNTYuMDtcblxuICBmcmFnSWQgPSBpZDtcbn1cbiJdKSxyLnBpY2tGcmFnbWVudD1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0lkO1xuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IHJhZGl1cyA9IGxlbmd0aCgyLjAgKiBnbF9Qb2ludENvb3JkLnh5IC0gMS4wKTtcbiAgaWYocmFkaXVzID4gMS4wKSB7XG4gICAgZGlzY2FyZDtcbiAgfVxuICBnbF9GcmFnQ29sb3IgPSBmcmFnSWQgLyAyNTUuMDtcbn1cbiJdKX0se2dsc2xpZnk6NDI0fV0sMzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKSxvPXQoIi4vbGliL3NoYWRlciIpO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLnBsb3Q9dCx0aGlzLm9mZnNldEJ1ZmZlcj1lLHRoaXMucGlja0J1ZmZlcj1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waWNrU2hhZGVyPWksdGhpcy5zaXplTWluPS41LHRoaXMuc2l6ZU1pbkNhcD0yLHRoaXMuc2l6ZU1heD0yMCx0aGlzLmFyZWFSYXRpbz0xLHRoaXMucG9pbnRDb3VudD0wLHRoaXMuY29sb3I9WzEsMCwwLDFdLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDFdLHRoaXMuYmxlbmQ9ITEsdGhpcy5waWNrT2Zmc2V0PTAsdGhpcy5wb2ludHM9bnVsbH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdsLGE9aShyKSxsPWkociksYz1uKHIsby5wb2ludFZlcnRleCxvLnBvaW50RnJhZ21lbnQpLHU9bihyLG8ucGlja1ZlcnRleCxvLnBpY2tGcmFnbWVudCksZj1uZXcgcyh0LGEsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSx0LmFkZE9iamVjdChmKSxmfTt2YXIgbCxjLHU9cy5wcm90b3R5cGU7dS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zaGFkZXIuZGlzcG9zZSgpLHRoaXMucGlja1NoYWRlci5kaXNwb3NlKCksdGhpcy5vZmZzZXRCdWZmZXIuZGlzcG9zZSgpLHRoaXMucGlja0J1ZmZlci5kaXNwb3NlKCksdGhpcy5wbG90LnJlbW92ZU9iamVjdCh0aGlzKX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcihlLHIpe3JldHVybiBlIGluIHQ/dFtlXTpyfXQ9dHx8e30sdGhpcy5zaXplTWluPXIoInNpemVNaW4iLC41KSx0aGlzLnNpemVNYXg9cigic2l6ZU1heCIsMjApLHRoaXMuY29sb3I9cigiY29sb3IiLFsxLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmFyZWFSYXRpbz1yKCJhcmVhUmF0aW8iLDEpLHRoaXMuYm9yZGVyQ29sb3I9cigiYm9yZGVyQ29sb3IiLFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJsZW5kPXIoImJsZW5kIiwhMSk7dmFyIG49dC5wb3NpdGlvbnMubGVuZ3RoPj4+MSxpPXQucG9zaXRpb25zIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5LG89dC5pZFRvSW5kZXggaW5zdGFuY2VvZiBJbnQzMkFycmF5JiZ0LmlkVG9JbmRleC5sZW5ndGg+PW4scz10LnBvc2l0aW9ucyxsPWk/czphLm1hbGxvY0Zsb2F0MzIocy5sZW5ndGgpLGM9bz90LmlkVG9JbmRleDphLm1hbGxvY0ludDMyKG4pO2lmKGl8fGwuc2V0KHMpLCFvKWZvcihsLnNldChzKSxlPTA7ZTxuO2UrKyljW2VdPWU7dGhpcy5wb2ludHM9cyx0aGlzLm9mZnNldEJ1ZmZlci51cGRhdGUobCksdGhpcy5waWNrQnVmZmVyLnVwZGF0ZShjKSxpfHxhLmZyZWUobCksb3x8YS5mcmVlKGMpLHRoaXMucG9pbnRDb3VudD1uLHRoaXMucGlja09mZnNldD0wfSx1LnVuaWZpZWREcmF3PShsPVsxLDAsMCwwLDEsMCwwLDAsMV0sYz1bMCwwLDAsMF0sZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwIT09dCxyPWU/dGhpcy5waWNrU2hhZGVyOnRoaXMuc2hhZGVyLG49dGhpcy5wbG90LmdsLGk9dGhpcy5wbG90LmRhdGFCb3g7aWYoMD09PXRoaXMucG9pbnRDb3VudClyZXR1cm4gdDt2YXIgYT1pWzJdLWlbMF0sbz1pWzNdLWlbMV0scz1mdW5jdGlvbih0LGUpe3ZhciByLG49MCxpPXQubGVuZ3RoPj4+MTtmb3Iocj0wO3I8aTtyKyspe3ZhciBhPXRbMipyXSxvPXRbMipyKzFdO2E+PWVbMF0mJmE8PWVbMl0mJm8+PWVbMV0mJm88PWVbM10mJm4rK31yZXR1cm4gbn0odGhpcy5wb2ludHMsaSksdT10aGlzLnBsb3QucGlja1BpeGVsUmF0aW8qTWF0aC5tYXgoTWF0aC5taW4odGhpcy5zaXplTWluQ2FwLHRoaXMuc2l6ZU1pbiksTWF0aC5taW4odGhpcy5zaXplTWF4LHRoaXMuc2l6ZU1heC9NYXRoLnBvdyhzLC4zMzMzMykpKTtsWzBdPTIvYSxsWzRdPTIvbyxsWzZdPS0yKmlbMF0vYS0xLGxbN109LTIqaVsxXS9vLTEsdGhpcy5vZmZzZXRCdWZmZXIuYmluZCgpLHIuYmluZCgpLHIuYXR0cmlidXRlcy5wb3NpdGlvbi5wb2ludGVyKCksci51bmlmb3Jtcy5tYXRyaXg9bCxyLnVuaWZvcm1zLmNvbG9yPXRoaXMuY29sb3Isci51bmlmb3Jtcy5ib3JkZXJDb2xvcj10aGlzLmJvcmRlckNvbG9yLHIudW5pZm9ybXMucG9pbnRDbG91ZD11PDUsci51bmlmb3Jtcy5wb2ludFNpemU9dSxyLnVuaWZvcm1zLmNlbnRlckZyYWN0aW9uPU1hdGgubWluKDEsTWF0aC5tYXgoMCxNYXRoLnNxcnQoMS10aGlzLmFyZWFSYXRpbykpKSxlJiYoY1swXT0yNTUmdCxjWzFdPXQ+PjgmMjU1LGNbMl09dD4+MTYmMjU1LGNbM109dD4+MjQmMjU1LHRoaXMucGlja0J1ZmZlci5iaW5kKCksci5hdHRyaWJ1dGVzLnBpY2tJZC5wb2ludGVyKG4uVU5TSUdORURfQllURSksci51bmlmb3Jtcy5waWNrT2Zmc2V0PWMsdGhpcy5waWNrT2Zmc2V0PXQpO3ZhciBmPW4uZ2V0UGFyYW1ldGVyKG4uQkxFTkQpLGg9bi5nZXRQYXJhbWV0ZXIobi5ESVRIRVIpO3JldHVybiBmJiYhdGhpcy5ibGVuZCYmbi5kaXNhYmxlKG4uQkxFTkQpLGgmJm4uZGlzYWJsZShuLkRJVEhFUiksbi5kcmF3QXJyYXlzKG4uUE9JTlRTLDAsdGhpcy5wb2ludENvdW50KSxmJiYhdGhpcy5ibGVuZCYmbi5lbmFibGUobi5CTEVORCksaCYmbi5lbmFibGUobi5ESVRIRVIpLHQrdGhpcy5wb2ludENvdW50fSksdS5kcmF3PXUudW5pZmllZERyYXcsdS5kcmF3UGljaz11LnVuaWZpZWREcmF3LHUucGljaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5waWNrT2Zmc2V0LGk9dGhpcy5wb2ludENvdW50O2lmKHI8bnx8cj49bitpKXJldHVybiBudWxsO3ZhciBhPXItbixvPXRoaXMucG9pbnRzO3JldHVybntvYmplY3Q6dGhpcyxwb2ludElkOmEsZGF0YUNvb3JkOltvWzIqYV0sb1syKmErMV1dfX19LHsiLi9saWIvc2hhZGVyIjozMTMsImdsLWJ1ZmZlciI6MjU3LCJnbC1zaGFkZXIiOjMyMywidHlwZWRhcnJheS1wb29sIjo1OTB9XSwzMTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPWVbMF0sdT1lWzFdLGY9ZVsyXSxoPWVbM10scD1yWzBdLGQ9clsxXSxtPXJbMl0sZz1yWzNdOyhhPWMqcCt1KmQrZiptK2gqZyk8MCYmKGE9LWEscD0tcCxkPS1kLG09LW0sZz0tZyk7MS1hPjFlLTY/KGk9TWF0aC5hY29zKGEpLG89TWF0aC5zaW4oaSkscz1NYXRoLnNpbigoMS1uKSppKS9vLGw9TWF0aC5zaW4obippKS9vKToocz0xLW4sbD1uKTtyZXR1cm4gdFswXT1zKmMrbCpwLHRbMV09cyp1K2wqZCx0WzJdPXMqZitsKm0sdFszXT1zKmgrbCpnLHR9fSx7fV0sMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdHx8MD09PXQ/dC50b1N0cmluZygpOiIifX0se31dLDMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ2ZWN0b3JpemUtdGV4dCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9aVtlXTthfHwoYT1pW2VdPXt9KTtpZih0IGluIGEpcmV0dXJuIGFbdF07dmFyIG89e3RleHRBbGlnbjoiY2VudGVyIix0ZXh0QmFzZWxpbmU6Im1pZGRsZSIsbGluZUhlaWdodDoxLGZvbnQ6ZSxsaW5lU3BhY2luZzoxLjI1LHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfSx0cmlhbmdsZXM6ITB9LHM9bih0LG8pO28udHJpYW5nbGVzPSExO3ZhciBsLGMsdT1uKHQsbyk7aWYociYmMSE9PXIpe2ZvcihsPTA7bDxzLnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7YzxzLnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXMucG9zaXRpb25zW2xdW2NdLz1yO2ZvcihsPTA7bDx1LnBvc2l0aW9ucy5sZW5ndGg7KytsKWZvcihjPTA7Yzx1LnBvc2l0aW9uc1tsXS5sZW5ndGg7KytjKXUucG9zaXRpb25zW2xdW2NdLz1yfXZhciBmPVtbMS8wLDEvMF0sWy0xLzAsLTEvMF1dLGg9dS5wb3NpdGlvbnMubGVuZ3RoO2ZvcihsPTA7bDxoOysrbCl7dmFyIHA9dS5wb3NpdGlvbnNbbF07Zm9yKGM9MDtjPDI7KytjKWZbMF1bY109TWF0aC5taW4oZlswXVtjXSxwW2NdKSxmWzFdW2NdPU1hdGgubWF4KGZbMV1bY10scFtjXSl9cmV0dXJuIGFbdF09W3MsdSxmXX07dmFyIGk9e319LHsidmVjdG9yaXplLXRleHQiOjU5Nn1dLDMxODpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXNoYWRlciIpLGk9dCgiZ2xzbGlmeSIpLGE9aShbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG5hdHRyaWJ1dGUgdmVjMyBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yO1xuYXR0cmlidXRlIHZlYzIgZ2x5cGg7XG5hdHRyaWJ1dGUgdmVjNCBpZDtcblxudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xudW5pZm9ybSBmbG9hdCBoaWdobGlnaHRTY2FsZTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjbGlwQm91bmRzWzJdO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gMS4wO1xuICAgIGlmKGRpc3RhbmNlKGhpZ2hsaWdodElkLCBpZCkgPCAwLjAwMDEpIHtcbiAgICAgIHNjYWxlID0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxKTtcbiAgICB2ZWM0IHZpZXdQb3NpdGlvbiA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICAgIHZpZXdQb3NpdGlvbiA9IHZpZXdQb3NpdGlvbiAvIHZpZXdQb3NpdGlvbi53O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqICh2aWV3UG9zaXRpb24gKyBzY2FsZSAqIHZlYzQoZ2x5cGgueCwgLWdseXBoLnksIDAsIDApKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IGhpZ2hsaWdodFNjYWxlLCBwaXhlbFJhdGlvO1xudW5pZm9ybSB2ZWM0IGhpZ2hsaWdodElkO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IHNjYWxlID0gcGl4ZWxSYXRpbztcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZC5iZ3IsIGlkLmJncikgPCAwLjAwMSkge1xuICAgICAgc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIHZlYzQgdmlld1Bvc2l0aW9uID0gdmlldyAqIHdvcmxkUG9zaXRpb247XG4gICAgdmVjNCBjbGlwUG9zaXRpb24gPSBwcm9qZWN0aW9uICogdmlld1Bvc2l0aW9uO1xuICAgIGNsaXBQb3NpdGlvbiAvPSBjbGlwUG9zaXRpb24udztcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uICsgdmVjNChzY3JlZW5TaXplICogc2NhbGUgKiB2ZWMyKGdseXBoLngsIC1nbHlwaC55KSwgMC4wLCAwLjApO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBwb3NpdGlvbjtcbiAgfVxufSJdKSxzPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxuYXR0cmlidXRlIHZlYzMgcG9zaXRpb247XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcjtcbmF0dHJpYnV0ZSB2ZWMyIGdseXBoO1xuYXR0cmlidXRlIHZlYzQgaWQ7XG5cbnVuaWZvcm0gZmxvYXQgaGlnaGxpZ2h0U2NhbGU7XG51bmlmb3JtIHZlYzQgaGlnaGxpZ2h0SWQ7XG51bmlmb3JtIHZlYzMgYXhlc1syXTtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMiBzY3JlZW5TaXplO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHNjYWxlLCBwaXhlbFJhdGlvO1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzQgcGlja0lkO1xudmFyeWluZyB2ZWMzIGRhdGFDb29yZGluYXRlO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChvdXRPZlJhbmdlKGNsaXBCb3VuZHNbMF0sIGNsaXBCb3VuZHNbMV0sIHBvc2l0aW9uKSkge1xuXG4gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDApO1xuICB9IGVsc2Uge1xuICAgIGZsb2F0IGxzY2FsZSA9IHBpeGVsUmF0aW8gKiBzY2FsZTtcbiAgICBpZihkaXN0YW5jZShoaWdobGlnaHRJZCwgaWQpIDwgMC4wMDAxKSB7XG4gICAgICBsc2NhbGUgKj0gaGlnaGxpZ2h0U2NhbGU7XG4gICAgfVxuXG4gICAgdmVjNCBjbGlwQ2VudGVyICAgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNChwb3NpdGlvbiwgMSk7XG4gICAgdmVjMyBkYXRhUG9zaXRpb24gPSBwb3NpdGlvbiArIDAuNSpsc2NhbGUqKGF4ZXNbMF0gKiBnbHlwaC54ICsgYXhlc1sxXSAqIGdseXBoLnkpICogY2xpcENlbnRlci53ICogc2NyZWVuU2l6ZS55O1xuICAgIHZlYzQgY2xpcFBvc2l0aW9uID0gcHJvamVjdGlvbiAqIHZpZXcgKiBtb2RlbCAqIHZlYzQoZGF0YVBvc2l0aW9uLCAxKTtcblxuICAgIGdsX1Bvc2l0aW9uID0gY2xpcFBvc2l0aW9uO1xuICAgIGludGVycENvbG9yID0gY29sb3I7XG4gICAgcGlja0lkID0gaWQ7XG4gICAgZGF0YUNvb3JkaW5hdGUgPSBkYXRhUG9zaXRpb247XG4gIH1cbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuXG52YXJ5aW5nIHZlYzQgaW50ZXJwQ29sb3I7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKFxuICAgIG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkgfHxcbiAgICBpbnRlcnBDb2xvci5hICogb3BhY2l0eSA9PSAwLlxuICApIGRpc2NhcmQ7XG4gIGdsX0ZyYWdDb2xvciA9IGludGVycENvbG9yICogb3BhY2l0eTtcbn1cbiJdKSxjPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzIGZyYWdDbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrR3JvdXA7XG5cbnZhcnlpbmcgdmVjNCBwaWNrSWQ7XG52YXJ5aW5nIHZlYzMgZGF0YUNvb3JkaW5hdGU7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoZnJhZ0NsaXBCb3VuZHNbMF0sIGZyYWdDbGlwQm91bmRzWzFdLCBkYXRhQ29vcmRpbmF0ZSkpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrR3JvdXAsIHBpY2tJZC5iZ3IpO1xufSJdKSx1PVt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzMifSx7bmFtZToiY29sb3IiLHR5cGU6InZlYzQifSx7bmFtZToiZ2x5cGgiLHR5cGU6InZlYzIifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifV0sZj17dmVydGV4OmEsZnJhZ21lbnQ6bCxhdHRyaWJ1dGVzOnV9LGg9e3ZlcnRleDpvLGZyYWdtZW50OmwsYXR0cmlidXRlczp1fSxwPXt2ZXJ0ZXg6cyxmcmFnbWVudDpsLGF0dHJpYnV0ZXM6dX0sZD17dmVydGV4OmEsZnJhZ21lbnQ6YyxhdHRyaWJ1dGVzOnV9LG09e3ZlcnRleDpvLGZyYWdtZW50OmMsYXR0cmlidXRlczp1fSxnPXt2ZXJ0ZXg6cyxmcmFnbWVudDpjLGF0dHJpYnV0ZXM6dX07ZnVuY3Rpb24gdih0LGUpe3ZhciByPW4odCxlKSxpPXIuYXR0cmlidXRlcztyZXR1cm4gaS5wb3NpdGlvbi5sb2NhdGlvbj0wLGkuY29sb3IubG9jYXRpb249MSxpLmdseXBoLmxvY2F0aW9uPTIsaS5pZC5sb2NhdGlvbj0zLHJ9ci5jcmVhdGVQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGYpfSxyLmNyZWF0ZU9ydGhvPWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsaCl9LHIuY3JlYXRlUHJvamVjdD1mdW5jdGlvbih0KXtyZXR1cm4gdih0LHApfSxyLmNyZWF0ZVBpY2tQZXJzcGVjdGl2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdih0LGQpfSxyLmNyZWF0ZVBpY2tPcnRobz1mdW5jdGlvbih0KXtyZXR1cm4gdih0LG0pfSxyLmNyZWF0ZVBpY2tQcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB2KHQsZyl9fSx7ImdsLXNoYWRlciI6MzIzLGdsc2xpZnk6NDI0fV0sMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImlzLXN0cmluZy1ibGFuayIpLGk9dCgiZ2wtYnVmZmVyIiksYT10KCJnbC12YW8iKSxvPXQoInR5cGVkYXJyYXktcG9vbCIpLHM9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGw9dCgiLi9saWIvc2hhZGVycyIpLGM9dCgiLi9saWIvZ2x5cGhzIiksdT10KCIuL2xpYi9nZXQtc2ltcGxlLXN0cmluZyIpLGY9WzEsMCwwLDAsMCwxLDAsMCwwLDAsMSwwLDAsMCwwLDFdO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT10WzNdO3JldHVybiB0WzBdPWVbMF0qcitlWzRdKm4rZVs4XSppK2VbMTJdKmEsdFsxXT1lWzFdKnIrZVs1XSpuK2VbOV0qaStlWzEzXSphLHRbMl09ZVsyXSpyK2VbNl0qbitlWzEwXSppK2VbMTRdKmEsdFszXT1lWzNdKnIrZVs3XSpuK2VbMTFdKmkrZVsxNV0qYSx0fWZ1bmN0aW9uIHAodCxlLHIsbil7cmV0dXJuIGgobixuKSxoKG4sbiksaChuLG4pfWZ1bmN0aW9uIGQodCxlKXt0aGlzLmluZGV4PXQsdGhpcy5kYXRhQ29vcmRpbmF0ZT10aGlzLnBvc2l0aW9uPWV9ZnVuY3Rpb24gbSh0KXtyZXR1cm4hMD09PXR8fHQ+MT8xOnR9ZnVuY3Rpb24gZyh0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dGhpcy5nbD10LHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMuc2hhZGVyPWUsdGhpcy5vcnRob1NoYWRlcj1yLHRoaXMucHJvamVjdFNoYWRlcj1uLHRoaXMucG9pbnRCdWZmZXI9aSx0aGlzLmNvbG9yQnVmZmVyPWEsdGhpcy5nbHlwaEJ1ZmZlcj1vLHRoaXMuaWRCdWZmZXI9cyx0aGlzLnZhbz1sLHRoaXMudmVydGV4Q291bnQ9MCx0aGlzLmxpbmVWZXJ0ZXhDb3VudD0wLHRoaXMub3BhY2l0eT0xLHRoaXMuaGFzQWxwaGE9ITEsdGhpcy5saW5lV2lkdGg9MCx0aGlzLnByb2plY3RTY2FsZT1bMi8zLDIvMywyLzNdLHRoaXMucHJvamVjdE9wYWNpdHk9WzEsMSwxXSx0aGlzLnByb2plY3RIYXNBbHBoYT0hMSx0aGlzLnBpY2tJZD0wLHRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyPWMsdGhpcy5waWNrT3J0aG9TaGFkZXI9dSx0aGlzLnBpY2tQcm9qZWN0U2hhZGVyPWYsdGhpcy5wb2ludHM9W10sdGhpcy5fc2VsZWN0UmVzdWx0PW5ldyBkKDAsWzAsMCwwXSksdGhpcy51c2VPcnRobz0hMCx0aGlzLmJvdW5kcz1bWzEvMCwxLzAsMS8wXSxbLTEvMCwtMS8wLC0xLzBdXSx0aGlzLmF4ZXNQcm9qZWN0PVshMCwhMCwhMF0sdGhpcy5heGVzQm91bmRzPVtbLTEvMCwtMS8wLC0xLzBdLFsxLzAsMS8wLDEvMF1dLHRoaXMuaGlnaGxpZ2h0SWQ9WzEsMSwxLDFdLHRoaXMuaGlnaGxpZ2h0U2NhbGU9Mix0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5kaXJ0eT0hMH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5nbCxyPWwuY3JlYXRlUGVyc3BlY3RpdmUoZSksbj1sLmNyZWF0ZU9ydGhvKGUpLG89bC5jcmVhdGVQcm9qZWN0KGUpLHM9bC5jcmVhdGVQaWNrUGVyc3BlY3RpdmUoZSksYz1sLmNyZWF0ZVBpY2tPcnRobyhlKSx1PWwuY3JlYXRlUGlja1Byb2plY3QoZSksZj1pKGUpLGg9aShlKSxwPWkoZSksZD1pKGUpLG09YShlLFt7YnVmZmVyOmYsc2l6ZTozLHR5cGU6ZS5GTE9BVH0se2J1ZmZlcjpoLHNpemU6NCx0eXBlOmUuRkxPQVR9LHtidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfSx7YnVmZmVyOmQsc2l6ZTo0LHR5cGU6ZS5VTlNJR05FRF9CWVRFLG5vcm1hbGl6ZWQ6ITB9XSksdj1uZXcgZyhlLHIsbixvLGYsaCxwLGQsbSxzLGMsdSk7cmV0dXJuIHYudXBkYXRlKHQpLHZ9O3ZhciB2PWcucHJvdG90eXBlO3YucGlja1Nsb3RzPTEsdi5zZXRQaWNrQmFzZT1mdW5jdGlvbih0KXt0aGlzLnBpY2tJZD10fSx2LmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhhc0FscGhhKXJldHVybiEwO2Zvcih2YXIgdD0wO3Q8MzsrK3QpaWYodGhpcy5heGVzUHJvamVjdFt0XSYmdGhpcy5wcm9qZWN0SGFzQWxwaGEpcmV0dXJuITA7cmV0dXJuITF9LHYuaXNPcGFxdWU9ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNBbHBoYSlyZXR1cm4hMDtmb3IodmFyIHQ9MDt0PDM7Kyt0KWlmKHRoaXMuYXhlc1Byb2plY3RbdF0mJiF0aGlzLnByb2plY3RIYXNBbHBoYSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHk9WzAsMF0seD1bMCwwLDBdLGI9WzAsMCwwXSxfPVswLDAsMCwxXSx3PVswLDAsMCwxXSxUPWYuc2xpY2UoKSxrPVswLDAsMF0sQT1bWzAsMCwwXSxbMCwwLDBdXTtmdW5jdGlvbiBNKHQpe3JldHVybiB0WzBdPXRbMV09dFsyXT0wLHR9ZnVuY3Rpb24gUyh0LGUpe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPTEsdH1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiB0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0W3JdPW4sdH1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpLGE9ZS5heGVzUHJvamVjdCxvPWUuZ2wsbD10LnVuaWZvcm1zLGM9ci5tb2RlbHx8Zix1PXIudmlld3x8ZixoPXIucHJvamVjdGlvbnx8ZixkPWUuYXhlc0JvdW5kcyxtPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BLHI9MDtyPDI7KytyKWZvcih2YXIgbj0wO248MzsrK24pZVtyXVtuXT1NYXRoLm1heChNYXRoLm1pbih0W3JdW25dLDFlOCksLTFlOCk7cmV0dXJuIGV9KGUuY2xpcEJvdW5kcyk7aT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzP2UuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXM6WzEsMSwxXSx5WzBdPTIvby5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL28uZHJhd2luZ0J1ZmZlckhlaWdodCx0LmJpbmQoKSxsLnZpZXc9dSxsLnByb2plY3Rpb249aCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPWUuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1lLmhpZ2hsaWdodFNjYWxlLGwuY2xpcEJvdW5kcz1tLGwucGlja0dyb3VwPWUucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89bjtmb3IodmFyIGc9MDtnPDM7KytnKWlmKGFbZ10pe2wuc2NhbGU9ZS5wcm9qZWN0U2NhbGVbZ10sbC5vcGFjaXR5PWUucHJvamVjdE9wYWNpdHlbZ107Zm9yKHZhciB2PVQsTD0wO0w8MTY7KytMKXZbTF09MDtmb3IoTD0wO0w8NDsrK0wpdls1KkxdPTE7dls1KmddPTAsaVtnXTwwP3ZbMTIrZ109ZFswXVtnXTp2WzEyK2ddPWRbMV1bZ10scyh2LGMsdiksbC5tb2RlbD12O3ZhciBDPShnKzEpJTMsUD0oZysyKSUzLEk9TSh4KSxPPU0oYik7SVtDXT0xLE9bUF09MTt2YXIgej1wKDAsMCwwLFMoXyxJKSksRD1wKDAsMCwwLFModyxPKSk7aWYoTWF0aC5hYnMoelsxXSk+TWF0aC5hYnMoRFsxXSkpe3ZhciBSPXo7ej1ELEQ9UixSPUksST1PLE89Ujt2YXIgRj1DO0M9UCxQPUZ9elswXTwwJiYoSVtDXT0tMSksRFsxXT4wJiYoT1tQXT0tMSk7dmFyIEI9MCxOPTA7Zm9yKEw9MDtMPDQ7KytMKUIrPU1hdGgucG93KGNbNCpDK0xdLDIpLE4rPU1hdGgucG93KGNbNCpQK0xdLDIpO0lbQ10vPU1hdGguc3FydChCKSxPW1BdLz1NYXRoLnNxcnQoTiksbC5heGVzWzBdPUksbC5heGVzWzFdPU8sbC5mcmFnQ2xpcEJvdW5kc1swXT1FKGssbVswXSxnLC0xZTgpLGwuZnJhZ0NsaXBCb3VuZHNbMV09RShrLG1bMV0sZywxZTgpLGUudmFvLmJpbmQoKSxlLnZhby5kcmF3KG8uVFJJQU5HTEVTLGUudmVydGV4Q291bnQpLGUubGluZVdpZHRoPjAmJihvLmxpbmVXaWR0aChlLmxpbmVXaWR0aCpuKSxlLnZhby5kcmF3KG8uTElORVMsZS5saW5lVmVydGV4Q291bnQsZS52ZXJ0ZXhDb3VudCkpLGUudmFvLnVuYmluZCgpfX12YXIgQz1bWy0xZTgsLTFlOCwtMWU4XSxbMWU4LDFlOCwxZThdXTtmdW5jdGlvbiBQKHQsZSxyLG4saSxhLG8pe3ZhciBzPXIuZ2w7aWYoKGE9PT1yLnByb2plY3RIYXNBbHBoYXx8bykmJkwoZSxyLG4saSksYT09PXIuaGFzQWxwaGF8fG8pe3QuYmluZCgpO3ZhciBsPXQudW5pZm9ybXM7bC5tb2RlbD1uLm1vZGVsfHxmLGwudmlldz1uLnZpZXd8fGYsbC5wcm9qZWN0aW9uPW4ucHJvamVjdGlvbnx8Zix5WzBdPTIvcy5kcmF3aW5nQnVmZmVyV2lkdGgseVsxXT0yL3MuZHJhd2luZ0J1ZmZlckhlaWdodCxsLnNjcmVlblNpemU9eSxsLmhpZ2hsaWdodElkPXIuaGlnaGxpZ2h0SWQsbC5oaWdobGlnaHRTY2FsZT1yLmhpZ2hsaWdodFNjYWxlLGwuZnJhZ0NsaXBCb3VuZHM9QyxsLmNsaXBCb3VuZHM9ci5heGVzLmJvdW5kcyxsLm9wYWNpdHk9ci5vcGFjaXR5LGwucGlja0dyb3VwPXIucGlja0lkLzI1NSxsLnBpeGVsUmF0aW89aSxyLnZhby5iaW5kKCksci52YW8uZHJhdyhzLlRSSUFOR0xFUyxyLnZlcnRleENvdW50KSxyLmxpbmVXaWR0aD4wJiYocy5saW5lV2lkdGgoci5saW5lV2lkdGgqaSksci52YW8uZHJhdyhzLkxJTkVTLHIubGluZVZlcnRleENvdW50LHIudmVydGV4Q291bnQpKSxyLnZhby51bmJpbmQoKX19ZnVuY3Rpb24gSSh0LGUscixpKXt2YXIgYTthPUFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aD90W2VdOnZvaWQgMDp0LGE9dShhKTt2YXIgbz0hMDtuKGEpJiYoYT0iXHUyNWJjIixvPSExKTt2YXIgcz1jKGEscixpKTtyZXR1cm57bWVzaDpzWzBdLGxpbmVzOnNbMV0sYm91bmRzOnNbMl0sdmlzaWJsZTpvfX12LmRyYXc9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMub3J0aG9TaGFkZXI6dGhpcy5zaGFkZXIsdGhpcy5wcm9qZWN0U2hhZGVyLHRoaXMsdCx0aGlzLnBpeGVsUmF0aW8sITEsITEpfSx2LmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtQKHRoaXMudXNlT3J0aG8/dGhpcy5vcnRob1NoYWRlcjp0aGlzLnNoYWRlcix0aGlzLnByb2plY3RTaGFkZXIsdGhpcyx0LHRoaXMucGl4ZWxSYXRpbywhMCwhMSl9LHYuZHJhd1BpY2s9ZnVuY3Rpb24odCl7UCh0aGlzLnVzZU9ydGhvP3RoaXMucGlja09ydGhvU2hhZGVyOnRoaXMucGlja1BlcnNwZWN0aXZlU2hhZGVyLHRoaXMucGlja1Byb2plY3RTaGFkZXIsdGhpcyx0LDEsITAsITApfSx2LnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXQudmFsdWVbMl0rKHQudmFsdWVbMV08PDgpKyh0LnZhbHVlWzBdPDwxNik7aWYoZT49dGhpcy5wb2ludENvdW50fHxlPDApcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wb2ludHNbZV0sbj10aGlzLl9zZWxlY3RSZXN1bHQ7bi5pbmRleD1lO2Zvcih2YXIgaT0wO2k8MzsrK2kpbi5wb3NpdGlvbltpXT1uLmRhdGFDb29yZGluYXRlW2ldPXJbaV07cmV0dXJuIG59LHYuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe2lmKHQpe3ZhciBlPXQuaW5kZXgscj0yNTUmZSxuPWU+PjgmMjU1LGk9ZT4+MTYmMjU1O3RoaXMuaGlnaGxpZ2h0SWQ9W3IvMjU1LG4vMjU1LGkvMjU1LDBdfWVsc2UgdGhpcy5oaWdobGlnaHRJZD1bMSwxLDEsMV19LHYudXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCJwZXJzcGVjdGl2ZSJpbih0PXR8fHt9KSYmKHRoaXMudXNlT3J0aG89IXQucGVyc3BlY3RpdmUpLCJvcnRob2dyYXBoaWMiaW4gdCYmKHRoaXMudXNlT3J0aG89ISF0Lm9ydGhvZ3JhcGhpYyksImxpbmVXaWR0aCJpbiB0JiYodGhpcy5saW5lV2lkdGg9dC5saW5lV2lkdGgpLCJwcm9qZWN0ImluIHQpaWYoQXJyYXkuaXNBcnJheSh0LnByb2plY3QpKXRoaXMuYXhlc1Byb2plY3Q9dC5wcm9qZWN0O2Vsc2V7dmFyIGU9ISF0LnByb2plY3Q7dGhpcy5heGVzUHJvamVjdD1bZSxlLGVdfWlmKCJwcm9qZWN0U2NhbGUiaW4gdClpZihBcnJheS5pc0FycmF5KHQucHJvamVjdFNjYWxlKSl0aGlzLnByb2plY3RTY2FsZT10LnByb2plY3RTY2FsZS5zbGljZSgpO2Vsc2V7dmFyIHI9K3QucHJvamVjdFNjYWxlO3RoaXMucHJvamVjdFNjYWxlPVtyLHIscl19aWYodGhpcy5wcm9qZWN0SGFzQWxwaGE9ITEsInByb2plY3RPcGFjaXR5ImluIHQpe2lmKEFycmF5LmlzQXJyYXkodC5wcm9qZWN0T3BhY2l0eSkpdGhpcy5wcm9qZWN0T3BhY2l0eT10LnByb2plY3RPcGFjaXR5LnNsaWNlKCk7ZWxzZXtyPSt0LnByb2plY3RPcGFjaXR5O3RoaXMucHJvamVjdE9wYWNpdHk9W3IscixyXX1mb3IodmFyIG49MDtuPDM7KytuKXRoaXMucHJvamVjdE9wYWNpdHlbbl09bSh0aGlzLnByb2plY3RPcGFjaXR5W25dKSx0aGlzLnByb2plY3RPcGFjaXR5W25dPDEmJih0aGlzLnByb2plY3RIYXNBbHBoYT0hMCl9dGhpcy5oYXNBbHBoYT0hMSwib3BhY2l0eSJpbiB0JiYodGhpcy5vcGFjaXR5PW0odC5vcGFjaXR5KSx0aGlzLm9wYWNpdHk8MSYmKHRoaXMuaGFzQWxwaGE9ITApKSx0aGlzLmRpcnR5PSEwO3ZhciBpLGEscz10LnBvc2l0aW9uLGw9dC5mb250fHwibm9ybWFsIixjPXQuYWxpZ25tZW50fHxbMCwwXTtpZigyPT09Yy5sZW5ndGgpaT1jWzBdLGE9Y1sxXTtlbHNle2k9W10sYT1bXTtmb3Iobj0wO248Yy5sZW5ndGg7KytuKWlbbl09Y1tuXVswXSxhW25dPWNbbl1bMV19dmFyIHU9WzEvMCwxLzAsMS8wXSxmPVstMS8wLC0xLzAsLTEvMF0saD10LmdseXBoLHA9dC5jb2xvcixkPXQuc2l6ZSxnPXQuYW5nbGUsdj10LmxpbmVDb2xvcix5PS0xLHg9MCxiPTAsXz0wO2lmKHMubGVuZ3RoKXtfPXMubGVuZ3RoO3Q6Zm9yKG49MDtuPF87KytuKXtmb3IodmFyIHc9c1tuXSxUPTA7VDwzOysrVClpZihpc05hTih3W1RdKXx8IWlzRmluaXRlKHdbVF0pKWNvbnRpbnVlIHQ7dmFyIGs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3grPTMqay5jZWxscy5sZW5ndGgsYis9MipBLmVkZ2VzLmxlbmd0aH19dmFyIFM9eCtiLEU9by5tYWxsb2NGbG9hdCgzKlMpLEw9by5tYWxsb2NGbG9hdCg0KlMpLEM9by5tYWxsb2NGbG9hdCgyKlMpLFA9by5tYWxsb2NVaW50MzIoUyk7aWYoUz4wKXt2YXIgTz0wLHo9eCxEPVswLDAsMCwxXSxSPVswLDAsMCwxXSxGPUFycmF5LmlzQXJyYXkocCkmJkFycmF5LmlzQXJyYXkocFswXSksQj1BcnJheS5pc0FycmF5KHYpJiZBcnJheS5pc0FycmF5KHZbMF0pO3Q6Zm9yKG49MDtuPF87KytuKXt5Kz0xO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1Qpe2lmKGlzTmFOKHdbVF0pfHwhaXNGaW5pdGUod1tUXSkpY29udGludWUgdDtmW1RdPU1hdGgubWF4KGZbVF0sd1tUXSksdVtUXT1NYXRoLm1pbih1W1RdLHdbVF0pfWs9KE49SShoLG4sbCx0aGlzLnBpeGVsUmF0aW8pKS5tZXNoLEE9Ti5saW5lcyxNPU4uYm91bmRzO3ZhciBOLGo9Ti52aXNpYmxlO2lmKGopaWYoQXJyYXkuaXNBcnJheShwKSl7aWYoMz09PShVPUY/bjxwLmxlbmd0aD9wW25dOlswLDAsMCwwXTpwKS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClEW1RdPVVbVF07RFszXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpRFtUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBEWzBdPURbMV09RFsyXT0wLERbM109MTtlbHNlIEQ9WzEsMSwxLDBdO2lmKGopaWYoQXJyYXkuaXNBcnJheSh2KSl7dmFyIFU7aWYoMz09PShVPUI/bjx2Lmxlbmd0aD92W25dOlswLDAsMCwwXTp2KS5sZW5ndGgpe2ZvcihUPTA7VDwzOysrVClSW1RdPVVbVF07UltUXT0xfWVsc2UgaWYoND09PVUubGVuZ3RoKXtmb3IoVD0wO1Q8NDsrK1QpUltUXT1VW1RdOyF0aGlzLmhhc0FscGhhJiZVWzNdPDEmJih0aGlzLmhhc0FscGhhPSEwKX19ZWxzZSBSWzBdPVJbMV09UlsyXT0wLFJbM109MTtlbHNlIFI9WzEsMSwxLDBdO3ZhciBWPS41O2o/QXJyYXkuaXNBcnJheShkKT9WPW48ZC5sZW5ndGg/K2Rbbl06MTI6ZD9WPStkOnRoaXMudXNlT3J0aG8mJihWPTEyKTpWPTA7dmFyIEg9MDtBcnJheS5pc0FycmF5KGcpP0g9bjxnLmxlbmd0aD8rZ1tuXTowOmcmJihIPStnKTt2YXIgcT1NYXRoLmNvcyhIKSxHPU1hdGguc2luKEgpO2Zvcih3PXNbbl0sVD0wO1Q8MzsrK1QpZltUXT1NYXRoLm1heChmW1RdLHdbVF0pLHVbVF09TWF0aC5taW4odVtUXSx3W1RdKTt2YXIgWT1pLFc9YTtZPTA7QXJyYXkuaXNBcnJheShpKT9ZPW48aS5sZW5ndGg/aVtuXTowOmkmJihZPWkpO1c9MDtBcnJheS5pc0FycmF5KGEpP1c9bjxhLmxlbmd0aD9hW25dOjA6YSYmKFc9YSk7dmFyIFg9W1kqPVk+MD8xLU1bMF1bMF06WTwwPzErTVsxXVswXToxLFcqPVc+MD8xLU1bMF1bMV06VzwwPzErTVsxXVsxXToxXSxaPWsuY2VsbHN8fFtdLEo9ay5wb3NpdGlvbnN8fFtdO2ZvcihUPTA7VDxaLmxlbmd0aDsrK1QpZm9yKHZhciBLPVpbVF0sUT0wO1E8MzsrK1Epe2Zvcih2YXIgJD0wOyQ8MzsrKyQpRVszKk8rJF09d1skXTtmb3IoJD0wOyQ8NDsrKyQpTFs0Kk8rJF09RFskXTtQW09dPXk7dmFyIHR0PUpbS1tRXV07Q1syKk9dPVYqKHEqdHRbMF0tRyp0dFsxXStYWzBdKSxDWzIqTysxXT1WKihHKnR0WzBdK3EqdHRbMV0rWFsxXSksTys9MX1mb3IoWj1BLmVkZ2VzLEo9QS5wb3NpdGlvbnMsVD0wO1Q8Wi5sZW5ndGg7KytUKWZvcihLPVpbVF0sUT0wO1E8MjsrK1Epe2ZvcigkPTA7JDwzOysrJClFWzMqeiskXT13WyRdO2ZvcigkPTA7JDw0OysrJClMWzQqeiskXT1SWyRdO1Bbel09eTt0dD1KW0tbUV1dO0NbMip6XT1WKihxKnR0WzBdLUcqdHRbMV0rWFswXSksQ1syKnorMV09ViooRyp0dFswXStxKnR0WzFdK1hbMV0pLHorPTF9fX10aGlzLmJvdW5kcz1bdSxmXSx0aGlzLnBvaW50cz1zLHRoaXMucG9pbnRDb3VudD1zLmxlbmd0aCx0aGlzLnZlcnRleENvdW50PXgsdGhpcy5saW5lVmVydGV4Q291bnQ9Yix0aGlzLnBvaW50QnVmZmVyLnVwZGF0ZShFKSx0aGlzLmNvbG9yQnVmZmVyLnVwZGF0ZShMKSx0aGlzLmdseXBoQnVmZmVyLnVwZGF0ZShDKSx0aGlzLmlkQnVmZmVyLnVwZGF0ZShQKSxvLmZyZWUoRSksby5mcmVlKEwpLG8uZnJlZShDKSxvLmZyZWUoUCl9LHYuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2hhZGVyLmRpc3Bvc2UoKSx0aGlzLm9ydGhvU2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBpY2tQZXJzcGVjdGl2ZVNoYWRlci5kaXNwb3NlKCksdGhpcy5waWNrT3J0aG9TaGFkZXIuZGlzcG9zZSgpLHRoaXMudmFvLmRpc3Bvc2UoKSx0aGlzLnBvaW50QnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmNvbG9yQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmdseXBoQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLmlkQnVmZmVyLmRpc3Bvc2UoKX19LHsiLi9saWIvZ2V0LXNpbXBsZS1zdHJpbmciOjMxNiwiLi9saWIvZ2x5cGhzIjozMTcsIi4vbGliL3NoYWRlcnMiOjMxOCwiZ2wtYnVmZmVyIjoyNTcsImdsLW1hdDQvbXVsdGlwbHkiOjI4OSwiZ2wtdmFvIjozNDMsImlzLXN0cmluZy1ibGFuayI6NDM4LCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDMyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5Iik7ci5ib3hWZXJ0ZXg9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgdmVydGV4O1xuXG51bmlmb3JtIHZlYzIgY29ybmVyQSwgY29ybmVyQjtcblxudm9pZCBtYWluKCkge1xuICBnbF9Qb3NpdGlvbiA9IHZlYzQobWl4KGNvcm5lckEsIGNvcm5lckIsIHZlcnRleCksIDAsIDEpO1xufVxuIl0pLHIuYm94RnJhZ21lbnQ9bihbInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pfSx7Z2xzbGlmeTo0MjR9XSwzMjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbC1idWZmZXIiKSxhPXQoIi4vbGliL3NoYWRlcnMiKTtmdW5jdGlvbiBvKHQsZSxyKXt0aGlzLnBsb3Q9dCx0aGlzLmJveEJ1ZmZlcj1lLHRoaXMuYm94U2hhZGVyPXIsdGhpcy5lbmFibGVkPSEwLHRoaXMuc2VsZWN0Qm94PVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy5ib3JkZXJDb2xvcj1bMCwwLDAsMV0sdGhpcy5pbm5lckZpbGw9ITEsdGhpcy5pbm5lckNvbG9yPVswLDAsMCwuMjVdLHRoaXMub3V0ZXJGaWxsPSEwLHRoaXMub3V0ZXJDb2xvcj1bMCwwLDAsLjVdLHRoaXMuYm9yZGVyV2lkdGg9MTB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbCxzPWkocixbMCwwLDAsMSwxLDAsMSwxXSksbD1uKHIsYS5ib3hWZXJ0ZXgsYS5ib3hGcmFnbWVudCksYz1uZXcgbyh0LHMsbCk7cmV0dXJuIGMudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShjKSxjfTt2YXIgcz1vLnByb3RvdHlwZTtzLmRyYXc9ZnVuY3Rpb24oKXtpZih0aGlzLmVuYWJsZWQpe3ZhciB0PXRoaXMucGxvdCxlPXRoaXMuc2VsZWN0Qm94LHI9dGhpcy5ib3JkZXJXaWR0aCxuPSh0aGlzLmlubmVyRmlsbCx0aGlzLmlubmVyQ29sb3IpLGk9KHRoaXMub3V0ZXJGaWxsLHRoaXMub3V0ZXJDb2xvciksYT10aGlzLmJvcmRlckNvbG9yLG89dC5ib3gscz10LnNjcmVlbkJveCxsPXQuZGF0YUJveCxjPXQudmlld0JveCx1PXQucGl4ZWxSYXRpbyxmPShlWzBdLWxbMF0pKihjWzJdLWNbMF0pLyhsWzJdLWxbMF0pK2NbMF0saD0oZVsxXS1sWzFdKSooY1szXS1jWzFdKS8obFszXS1sWzFdKStjWzFdLHA9KGVbMl0tbFswXSkqKGNbMl0tY1swXSkvKGxbMl0tbFswXSkrY1swXSxkPShlWzNdLWxbMV0pKihjWzNdLWNbMV0pLyhsWzNdLWxbMV0pK2NbMV07aWYoZj1NYXRoLm1heChmLGNbMF0pLGg9TWF0aC5tYXgoaCxjWzFdKSxwPU1hdGgubWluKHAsY1syXSksZD1NYXRoLm1pbihkLGNbM10pLCEocDxmfHxkPGgpKXtvLmJpbmQoKTt2YXIgbT1zWzJdLXNbMF0sZz1zWzNdLXNbMV07aWYodGhpcy5vdXRlckZpbGwmJihvLmRyYXdCb3goMCwwLG0saCxpKSxvLmRyYXdCb3goMCxoLGYsZCxpKSxvLmRyYXdCb3goMCxkLG0sZyxpKSxvLmRyYXdCb3gocCxoLG0sZCxpKSksdGhpcy5pbm5lckZpbGwmJm8uZHJhd0JveChmLGgscCxkLG4pLHI+MCl7dmFyIHY9cip1O28uZHJhd0JveChmLXYsaC12LHArdixoK3YsYSksby5kcmF3Qm94KGYtdixkLXYscCt2LGQrdixhKSxvLmRyYXdCb3goZi12LGgtdixmK3YsZCt2LGEpLG8uZHJhd0JveChwLXYsaC12LHArdixkK3YsYSl9fX19LHMudXBkYXRlPWZ1bmN0aW9uKHQpe3Q9dHx8e30sdGhpcy5pbm5lckZpbGw9ISF0LmlubmVyRmlsbCx0aGlzLm91dGVyRmlsbD0hIXQub3V0ZXJGaWxsLHRoaXMuaW5uZXJDb2xvcj0odC5pbm5lckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMub3V0ZXJDb2xvcj0odC5vdXRlckNvbG9yfHxbMCwwLDAsLjVdKS5zbGljZSgpLHRoaXMuYm9yZGVyQ29sb3I9KHQuYm9yZGVyQ29sb3J8fFswLDAsMCwxXSkuc2xpY2UoKSx0aGlzLmJvcmRlcldpZHRoPXQuYm9yZGVyV2lkdGh8fDAsdGhpcy5zZWxlY3RCb3g9KHQuc2VsZWN0Qm94fHx0aGlzLnNlbGVjdEJveCkuc2xpY2UoKX0scy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5ib3hCdWZmZXIuZGlzcG9zZSgpLHRoaXMuYm94U2hhZGVyLmRpc3Bvc2UoKSx0aGlzLnBsb3QucmVtb3ZlT3ZlcmxheSh0aGlzKX19LHsiLi9saWIvc2hhZGVycyI6MzIwLCJnbC1idWZmZXIiOjI1NywiZ2wtc2hhZGVyIjozMjN9XSwzMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxhPWVbMV0sbz1uKHQscixhLHt9KSxzPWkubWFsbG9jVWludDgociphKjQpO3JldHVybiBuZXcgbCh0LG8scyl9O3ZhciBuPXQoImdsLWZibyIpLGk9dCgidHlwZWRhcnJheS1wb29sIiksYT10KCJuZGFycmF5Iiksbz10KCJiaXQtdHdpZGRsZSIpLm5leHRQb3cyO2Z1bmN0aW9uIHModCxlLHIsbixpKXt0aGlzLmNvb3JkPVt0LGVdLHRoaXMuaWQ9cix0aGlzLnZhbHVlPW4sdGhpcy5kaXN0YW5jZT1pfWZ1bmN0aW9uIGwodCxlLHIpe3RoaXMuZ2w9dCx0aGlzLmZibz1lLHRoaXMuYnVmZmVyPXIsdGhpcy5fcmVhZFRpbWVvdXQ9bnVsbDt2YXIgbj10aGlzO3RoaXMuX3JlYWRDYWxsYmFjaz1mdW5jdGlvbigpe24uZ2wmJihlLmJpbmQoKSx0LnJlYWRQaXhlbHMoMCwwLGUuc2hhcGVbMF0sZS5zaGFwZVsxXSx0LlJHQkEsdC5VTlNJR05FRF9CWVRFLG4uYnVmZmVyKSxuLl9yZWFkVGltZW91dD1udWxsKX19dmFyIGM9bC5wcm90b3R5cGU7T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsInNoYXBlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2w/dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTpbMCwwXX0sc2V0OmZ1bmN0aW9uKHQpe2lmKHRoaXMuZ2wpe3RoaXMuZmJvLnNoYXBlPXQ7dmFyIGU9dGhpcy5mYm8uc2hhcGVbMF0scj10aGlzLmZiby5zaGFwZVsxXTtpZihyKmUqND50aGlzLmJ1ZmZlci5sZW5ndGgpe2kuZnJlZSh0aGlzLmJ1ZmZlcik7Zm9yKHZhciBuPXRoaXMuYnVmZmVyPWkubWFsbG9jVWludDgobyhyKmUqNCkpLGE9MDthPHIqZSo0OysrYSluW2FdPTI1NX1yZXR1cm4gdH19fSksYy5iZWdpbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2w7dGhpcy5zaGFwZTt0JiYodGhpcy5mYm8uYmluZCgpLHQuY2xlYXJDb2xvcigxLDEsMSwxKSx0LmNsZWFyKHQuQ09MT1JfQlVGRkVSX0JJVHx0LkRFUFRIX0JVRkZFUl9CSVQpKX0sYy5lbmQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3QmJih0LmJpbmRGcmFtZWJ1ZmZlcih0LkZSQU1FQlVGRkVSLG51bGwpLHRoaXMuX3JlYWRUaW1lb3V0fHxjbGVhclRpbWVvdXQodGhpcy5fcmVhZFRpbWVvdXQpLHRoaXMuX3JlYWRUaW1lb3V0PXNldFRpbWVvdXQodGhpcy5fcmVhZENhbGxiYWNrLDEpKX0sYy5xdWVyeT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuZ2wpcmV0dXJuIG51bGw7dmFyIG49dGhpcy5mYm8uc2hhcGUuc2xpY2UoKTt0fD0wLGV8PTAsIm51bWJlciIhPXR5cGVvZiByJiYocj0xKTt2YXIgaT0wfE1hdGgubWluKE1hdGgubWF4KHQtciwwKSxuWzBdKSxvPTB8TWF0aC5taW4oTWF0aC5tYXgodCtyLDApLG5bMF0pLGw9MHxNYXRoLm1pbihNYXRoLm1heChlLXIsMCksblsxXSksYz0wfE1hdGgubWluKE1hdGgubWF4KGUrciwwKSxuWzFdKTtpZihvPD1pfHxjPD1sKXJldHVybiBudWxsO3ZhciB1PVtvLWksYy1sXSxmPWEodGhpcy5idWZmZXIsW3VbMF0sdVsxXSw0XSxbNCw0Km5bMF0sMV0sNCooaStuWzBdKmwpKSxoPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MWU4LGk9LTEsYT0tMSxvPXQuc2hhcGVbMF0scz10LnNoYXBlWzFdLGw9MDtsPG87bCsrKWZvcih2YXIgYz0wO2M8cztjKyspe3ZhciB1PXQuZ2V0KGwsYywwKSxmPXQuZ2V0KGwsYywxKSxoPXQuZ2V0KGwsYywyKSxwPXQuZ2V0KGwsYywzKTtpZih1PDI1NXx8ZjwyNTV8fGg8MjU1fHxwPDI1NSl7dmFyIGQ9ZS1sLG09ci1jLGc9ZCpkK20qbTtnPG4mJihuPWcsaT1sLGE9Yyl9fXJldHVybltpLGEsbl19KGYuaGkodVswXSx1WzFdLDEpLHIscikscD1oWzBdLGQ9aFsxXTtyZXR1cm4gcDwwfHxNYXRoLnBvdyh0aGlzLnJhZGl1cywyKTxoWzJdP251bGw6bmV3IHMocCtpfDAsZCtsfDAsZi5nZXQocCxkLDApLFtmLmdldChwLGQsMSksZi5nZXQocCxkLDIpLGYuZ2V0KHAsZCwzKV0sTWF0aC5zcXJ0KGhbMl0pKX0sYy5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5nbCYmKHRoaXMuZmJvLmRpc3Bvc2UoKSxpLmZyZWUodGhpcy5idWZmZXIpLHRoaXMuZ2w9bnVsbCx0aGlzLl9yZWFkVGltZW91dCYmY2xlYXJUaW1lb3V0KHRoaXMuX3JlYWRUaW1lb3V0KSl9fSx7ImJpdC10d2lkZGxlIjoxMDEsImdsLWZibyI6MjY1LG5kYXJyYXk6NDYyLCJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDMyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jcmVhdGUtdW5pZm9ybXMiKSxpPXQoIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIiksYT10KCIuL2xpYi9yZWZsZWN0Iiksbz10KCIuL2xpYi9zaGFkZXItY2FjaGUiKSxzPXQoIi4vbGliL3J1bnRpbWUtcmVmbGVjdCIpLGw9dCgiLi9saWIvR0xFcnJvciIpO2Z1bmN0aW9uIGModCl7dGhpcy5nbD10LHRoaXMuZ2wubGFzdEF0dHJpYkNvdW50PTAsdGhpcy5fdnJlZj10aGlzLl9mcmVmPXRoaXMuX3JlbGluaz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLmF0dHJpYnV0ZXM9dGhpcy51bmlmb3Jtcz10aGlzLnR5cGVzPW51bGx9dmFyIHU9Yy5wcm90b3R5cGU7ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0Lm5hbWU8ZS5uYW1lPy0xOjF9dS5iaW5kPWZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5wcm9ncmFtfHx0aGlzLl9yZWxpbmsoKTt2YXIgZT10aGlzLmdsLmdldFByb2dyYW1QYXJhbWV0ZXIodGhpcy5wcm9ncmFtLHRoaXMuZ2wuQUNUSVZFX0FUVFJJQlVURVMpLHI9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ7aWYoZT5yKWZvcih0PXI7dDxlO3QrKyl0aGlzLmdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHQpO2Vsc2UgaWYocj5lKWZvcih0PWU7dDxyO3QrKyl0aGlzLmdsLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSh0KTt0aGlzLmdsLmxhc3RBdHRyaWJDb3VudD1lLHRoaXMuZ2wudXNlUHJvZ3JhbSh0aGlzLnByb2dyYW0pfSx1LmRpc3Bvc2U9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5nbC5sYXN0QXR0cmliQ291bnQsZT0wO2U8dDtlKyspdGhpcy5nbC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZSk7dGhpcy5nbC5sYXN0QXR0cmliQ291bnQ9MCx0aGlzLl9mcmVmJiZ0aGlzLl9mcmVmLmRpc3Bvc2UoKSx0aGlzLl92cmVmJiZ0aGlzLl92cmVmLmRpc3Bvc2UoKSx0aGlzLmF0dHJpYnV0ZXM9dGhpcy50eXBlcz10aGlzLnZlcnRTaGFkZXI9dGhpcy5mcmFnU2hhZGVyPXRoaXMucHJvZ3JhbT10aGlzLl9yZWxpbms9dGhpcy5fZnJlZj10aGlzLl92cmVmPW51bGx9LHUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyLGMpe2lmKCFlfHwxPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHU9dDt0PXUudmVydGV4LGU9dS5mcmFnbWVudCxyPXUudW5pZm9ybXMsYz11LmF0dHJpYnV0ZXN9dmFyIGg9dGhpcyxwPWguZ2wsZD1oLl92cmVmO2guX3ZyZWY9by5zaGFkZXIocCxwLlZFUlRFWF9TSEFERVIsdCksZCYmZC5kaXNwb3NlKCksaC52ZXJ0U2hhZGVyPWguX3ZyZWYuc2hhZGVyO3ZhciBtPXRoaXMuX2ZyZWY7aWYoaC5fZnJlZj1vLnNoYWRlcihwLHAuRlJBR01FTlRfU0hBREVSLGUpLG0mJm0uZGlzcG9zZSgpLGguZnJhZ1NoYWRlcj1oLl9mcmVmLnNoYWRlciwhcnx8IWMpe3ZhciBnPXAuY3JlYXRlUHJvZ3JhbSgpO2lmKHAuYXR0YWNoU2hhZGVyKGcsaC5mcmFnU2hhZGVyKSxwLmF0dGFjaFNoYWRlcihnLGgudmVydFNoYWRlcikscC5saW5rUHJvZ3JhbShnKSwhcC5nZXRQcm9ncmFtUGFyYW1ldGVyKGcscC5MSU5LX1NUQVRVUykpe3ZhciB2PXAuZ2V0UHJvZ3JhbUluZm9Mb2coZyk7dGhyb3cgbmV3IGwodiwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiIrdil9cj1yfHxzLnVuaWZvcm1zKHAsZyksYz1jfHxzLmF0dHJpYnV0ZXMocCxnKSxwLmRlbGV0ZVByb2dyYW0oZyl9KGM9Yy5zbGljZSgpKS5zb3J0KGYpO3ZhciB5LHg9W10sYj1bXSxfPVtdO2Zvcih5PTA7eTxjLmxlbmd0aDsrK3kpe3ZhciB3PWNbeV07aWYody50eXBlLmluZGV4T2YoIm1hdCIpPj0wKXtmb3IodmFyIFQ9MHx3LnR5cGUuY2hhckF0KHcudHlwZS5sZW5ndGgtMSksaz1uZXcgQXJyYXkoVCksQT0wO0E8VDsrK0Epa1tBXT1fLmxlbmd0aCxiLnB1c2gody5uYW1lKyJbIitBKyJdIiksIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uP18ucHVzaCh3LmxvY2F0aW9uK0EpOkFycmF5LmlzQXJyYXkody5sb2NhdGlvbikmJncubG9jYXRpb24ubGVuZ3RoPT09VCYmIm51bWJlciI9PXR5cGVvZiB3LmxvY2F0aW9uW0FdP18ucHVzaCgwfHcubG9jYXRpb25bQV0pOl8ucHVzaCgtMSk7eC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6a30pfWVsc2UgeC5wdXNoKHtuYW1lOncubmFtZSx0eXBlOncudHlwZSxsb2NhdGlvbnM6W18ubGVuZ3RoXX0pLGIucHVzaCh3Lm5hbWUpLCJudW1iZXIiPT10eXBlb2Ygdy5sb2NhdGlvbj9fLnB1c2goMHx3LmxvY2F0aW9uKTpfLnB1c2goLTEpfXZhciBNPTA7Zm9yKHk9MDt5PF8ubGVuZ3RoOysreSlpZihfW3ldPDApe2Zvcig7Xy5pbmRleE9mKE0pPj0wOylNKz0xO19beV09TX12YXIgUz1uZXcgQXJyYXkoci5sZW5ndGgpO2Z1bmN0aW9uIEUoKXtoLnByb2dyYW09by5wcm9ncmFtKHAsaC5fdnJlZixoLl9mcmVmLGIsXyk7Zm9yKHZhciB0PTA7dDxyLmxlbmd0aDsrK3QpU1t0XT1wLmdldFVuaWZvcm1Mb2NhdGlvbihoLnByb2dyYW0sclt0XS5uYW1lKX1FKCksaC5fcmVsaW5rPUUsaC50eXBlcz17dW5pZm9ybXM6YShyKSxhdHRyaWJ1dGVzOmEoYyl9LGguYXR0cmlidXRlcz1pKHAsaCx4LF8pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJ1bmlmb3JtcyIsbihwLGgscixTKSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPW5ldyBjKHQpO3JldHVybiBhLnVwZGF0ZShlLHIsbixpKSxhfX0seyIuL2xpYi9HTEVycm9yIjozMjQsIi4vbGliL2NyZWF0ZS1hdHRyaWJ1dGVzIjozMjUsIi4vbGliL2NyZWF0ZS11bmlmb3JtcyI6MzI2LCIuL2xpYi9yZWZsZWN0IjozMjcsIi4vbGliL3J1bnRpbWUtcmVmbGVjdCI6MzI4LCIuL2xpYi9zaGFkZXItY2FjaGUiOjMyOX1dLDMyNDpbZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3RoaXMuc2hvcnRNZXNzYWdlPWV8fCIiLHRoaXMubG9uZ01lc3NhZ2U9cnx8IiIsdGhpcy5yYXdFcnJvcj10fHwiIix0aGlzLm1lc3NhZ2U9ImdsLXNoYWRlcjogIisoZXx8dHx8IiIpKyhyPyJcbiIrcjoiIiksdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1uZXcgRXJyb3Isbi5wcm90b3R5cGUubmFtZT0iR0xFcnJvciIsbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9bn0se31dLDMyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBhPXt9LG89MCxjPXIubGVuZ3RoO288YzsrK28pe3ZhciB1PXJbb10sZj11Lm5hbWUsaD11LnR5cGUscD11LmxvY2F0aW9ucztzd2l0Y2goaCl7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJmbG9hdCI6cyh0LGUscFswXSxpLDEsYSxmKTticmVhaztkZWZhdWx0OmlmKGguaW5kZXhPZigidmVjIik+PTApe2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ModCxlLHBbMF0saSxkLGEsZil9ZWxzZXtpZighKGguaW5kZXhPZigibWF0Iik+PTApKXRocm93IG5ldyBuKCIiLCJVbmtub3duIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO3ZhciBkO2lmKChkPWguY2hhckNvZGVBdChoLmxlbmd0aC0xKS00OCk8Mnx8ZD40KXRocm93IG5ldyBuKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSBmb3IgYXR0cmlidXRlICIrZisiOiAiK2gpO2wodCxlLHAsaSxkLGEsZil9fX1yZXR1cm4gYX07dmFyIG49dCgiLi9HTEVycm9yIik7ZnVuY3Rpb24gaSh0LGUscixuLGksYSl7dGhpcy5fZ2w9dCx0aGlzLl93cmFwcGVyPWUsdGhpcy5faW5kZXg9cix0aGlzLl9sb2NhdGlvbnM9bix0aGlzLl9kaW1lbnNpb249aSx0aGlzLl9jb25zdEZ1bmM9YX12YXIgYT1pLnByb3RvdHlwZTthLnBvaW50ZXI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZ2wsYT10aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdO2kudmVydGV4QXR0cmliUG9pbnRlcihhLHRoaXMuX2RpbWVuc2lvbix0fHxpLkZMT0FULCEhZSxyfHwwLG58fDApLGkuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYSl9LGEuc2V0PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9jb25zdEZ1bmModGhpcy5fbG9jYXRpb25zW3RoaXMuX2luZGV4XSx0LGUscixuKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsImxvY2F0aW9uIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gdCE9PXRoaXMuX2xvY2F0aW9uc1t0aGlzLl9pbmRleF0mJih0aGlzLl9sb2NhdGlvbnNbdGhpcy5faW5kZXhdPTB8dCx0aGlzLl93cmFwcGVyLnByb2dyYW09bnVsbCksMHx0fX0pO3ZhciBvPVtmdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliMWYoZSxyKTp0LnZlcnRleEF0dHJpYjFmdihlLHIpfSxmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIyZihlLHIsbik6dC52ZXJ0ZXhBdHRyaWIyZnYoZSxyKX0sZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09ci5sZW5ndGg/dC52ZXJ0ZXhBdHRyaWIzZihlLHIsbixpKTp0LnZlcnRleEF0dHJpYjNmdihlLHIpfSxmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIHZvaWQgMD09PXIubGVuZ3RoP3QudmVydGV4QXR0cmliNGYoZSxyLG4saSxhKTp0LnZlcnRleEF0dHJpYjRmdihlLHIpfV07ZnVuY3Rpb24gcyh0LGUscixuLGEscyxsKXt2YXIgYz1vW2FdLHU9bmV3IGkodCxlLHIsbixhLGMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShzLGwse3NldDpmdW5jdGlvbihlKXtyZXR1cm4gdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkobltyXSksYyh0LG5bcl0sZSksZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LGVudW1lcmFibGU6ITB9KX1mdW5jdGlvbiBsKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgbD1uZXcgQXJyYXkoaSksYz1uZXcgQXJyYXkoaSksdT0wO3U8aTsrK3Upcyh0LGUsclt1XSxuLGksbCx1KSxjW3VdPWxbdV07T2JqZWN0LmRlZmluZVByb3BlcnR5KGwsImxvY2F0aW9uIix7c2V0OmZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBlPTA7ZTxpOysrZSljW2VdLmxvY2F0aW9uPXRbZV07ZWxzZSBmb3IoZT0wO2U8aTsrK2UpY1tlXS5sb2NhdGlvbj10K2U7cmV0dXJuIHR9LGdldDpmdW5jdGlvbigpe2Zvcih2YXIgdD1uZXcgQXJyYXkoaSksZT0wO2U8aTsrK2UpdFtlXT1uW3JbZV1dO3JldHVybiB0fSxlbnVtZXJhYmxlOiEwfSksbC5wb2ludGVyPWZ1bmN0aW9uKGUsYSxvLHMpe2U9ZXx8dC5GTE9BVCxhPSEhYSxvPW98fGkqaSxzPXN8fDA7Zm9yKHZhciBsPTA7bDxpOysrbCl7dmFyIGM9bltyW2xdXTt0LnZlcnRleEF0dHJpYlBvaW50ZXIoYyxpLGUsYSxvLHMrbCppKSx0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGMpfX07dmFyIGY9bmV3IEFycmF5KGkpLGg9dFsidmVydGV4QXR0cmliIitpKyJmdiJdO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLG8se3NldDpmdW5jdGlvbihlKXtmb3IodmFyIGE9MDthPGk7KythKXt2YXIgbz1uW3JbYV1dO2lmKHQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG8pLEFycmF5LmlzQXJyYXkoZVswXSkpaC5jYWxsKHQsbyxlW2FdKTtlbHNle2Zvcih2YXIgcz0wO3M8aTsrK3MpZltzXT1lW2kqYStzXTtoLmNhbGwodCxvLGYpfX1yZXR1cm4gZX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGVudW1lcmFibGU6ITB9KX19LHsiLi9HTEVycm9yIjozMjR9XSwzMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9yZWZsZWN0IiksaT10KCIuL0dMRXJyb3IiKTtmdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX1mdW5jdGlvbiBvKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2Zvcih2YXIgYT1mdW5jdGlvbiB0KGUscil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybltbZSxyXV07dmFyIG49W107Zm9yKHZhciBpIGluIHIpe3ZhciBhPXJbaV0sbz1lO3BhcnNlSW50KGkpKyIiPT09aT9vKz0iWyIraSsiXSI6bys9Ii4iK2ksIm9iamVjdCI9PXR5cGVvZiBhP24ucHVzaC5hcHBseShuLHQobyxhKSk6bi5wdXNoKFtvLGFdKX1yZXR1cm4gbn0oIiIsZSksbz0wO288YS5sZW5ndGg7KytvKXt2YXIgbD1hW29dLGM9bFswXSx1PWxbMV07aWYoc1t1XSl7dmFyIGY9bjtpZigic3RyaW5nIj09dHlwZW9mIGMmJigwPT09Yy5pbmRleE9mKCIuIil8fDA9PT1jLmluZGV4T2YoIlsiKSkpe3ZhciBoPWM7aWYoMD09PWMuaW5kZXhPZigiLiIpJiYoaD1jLnNsaWNlKDEpKSxoLmluZGV4T2YoIl0iKT09PWgubGVuZ3RoLTEpe3ZhciBwPWguaW5kZXhPZigiWyIpLGQ9aC5zbGljZSgwLHApLG09aC5zbGljZShwKzEsaC5sZW5ndGgtMSk7Zj1kP25bZF1bbV06blttXX1lbHNlIGY9bltoXX12YXIgZyx2PXJbdV0udHlwZTtzd2l0Y2godil7Y2FzZSJib29sIjpjYXNlImludCI6Y2FzZSJzYW1wbGVyMkQiOmNhc2Uic2FtcGxlckN1YmUiOnQudW5pZm9ybTFpKHNbdV0sZik7YnJlYWs7Y2FzZSJmbG9hdCI6dC51bmlmb3JtMWYoc1t1XSxmKTticmVhaztkZWZhdWx0OnZhciB5PXYuaW5kZXhPZigidmVjIik7aWYoISgwPD15JiZ5PD0xJiZ2Lmxlbmd0aD09PTQreSkpe2lmKDA9PT12LmluZGV4T2YoIm1hdCIpJiY0PT09di5sZW5ndGgpe2lmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIHVuaWZvcm0gZGltZW5zaW9uIHR5cGUgZm9yIG1hdHJpeCAiK25hbWUrIjogIit2KTt0WyJ1bmlmb3JtTWF0cml4IitnKyJmdiJdKHNbdV0sITEsZik7YnJlYWt9dGhyb3cgbmV3IGkoIiIsIlVua25vd24gdW5pZm9ybSBkYXRhIHR5cGUgZm9yICIrbmFtZSsiOiAiK3YpfWlmKChnPXYuY2hhckNvZGVBdCh2Lmxlbmd0aC0xKS00OCk8Mnx8Zz40KXRocm93IG5ldyBpKCIiLCJJbnZhbGlkIGRhdGEgdHlwZSIpO3N3aXRjaCh2LmNoYXJBdCgwKSl7Y2FzZSJiIjpjYXNlImkiOnRbInVuaWZvcm0iK2crIml2Il0oc1t1XSxmKTticmVhaztjYXNlInYiOnRbInVuaWZvcm0iK2crImZ2Il0oc1t1XSxmKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBpKCIiLCJVbnJlY29nbml6ZWQgZGF0YSB0eXBlIGZvciB2ZWN0b3IgIituYW1lKyI6ICIrdil9fX19fX1mdW5jdGlvbiBjKHQsZSxuKXtpZigib2JqZWN0Ij09dHlwZW9mIG4pe3ZhciBjPXUobik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmEoYyksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KX1lbHNlIHNbbl0/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OihmPW4sZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmdldFVuaWZvcm0oZS5wcm9ncmFtLHJbZl0pfSksc2V0OmwobiksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITF9KTp0W2VdPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlImJvb2wiOnJldHVybiExO2Nhc2UiaW50IjpjYXNlInNhbXBsZXIyRCI6Y2FzZSJzYW1wbGVyQ3ViZSI6Y2FzZSJmbG9hdCI6cmV0dXJuIDA7ZGVmYXVsdDp2YXIgZT10LmluZGV4T2YoInZlYyIpO2lmKDA8PWUmJmU8PTEmJnQubGVuZ3RoPT09NCtlKXtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCBkYXRhIHR5cGUiKTtyZXR1cm4iYiI9PT10LmNoYXJBdCgwKT9vKHIsITEpOm8ociwwKX1pZigwPT09dC5pbmRleE9mKCJtYXQiKSYmND09PXQubGVuZ3RoKXt2YXIgcjtpZigocj10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSktNDgpPDJ8fHI+NCl0aHJvdyBuZXcgaSgiIiwiSW52YWxpZCB1bmlmb3JtIGRpbWVuc2lvbiB0eXBlIGZvciBtYXRyaXggIituYW1lKyI6ICIrdCk7cmV0dXJuIG8ocipyLDApfXRocm93IG5ldyBpKCIiLCJVbmtub3duIHVuaWZvcm0gZGF0YSB0eXBlIGZvciAiK25hbWUrIjogIit0KX19KHJbbl0udHlwZSk7dmFyIGZ9ZnVuY3Rpb24gdSh0KXt2YXIgZTtpZihBcnJheS5pc0FycmF5KHQpKXtlPW5ldyBBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpYyhlLHIsdFtyXSl9ZWxzZSBmb3IodmFyIG4gaW4gZT17fSx0KWMoZSxuLHRbbl0pO3JldHVybiBlfXZhciBmPW4ociwhMCk7cmV0dXJue2dldDphKHUoZikpLHNldDpsKGYpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfX19LHsiLi9HTEVycm9yIjozMjQsIi4vcmVmbGVjdCI6MzI3fV0sMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBpPXRbbl0ubmFtZS5zcGxpdCgiLiIpLGE9cixvPTA7bzxpLmxlbmd0aDsrK28pe3ZhciBzPWlbb10uc3BsaXQoIlsiKTtpZihzLmxlbmd0aD4xKXtzWzBdaW4gYXx8KGFbc1swXV09W10pLGE9YVtzWzBdXTtmb3IodmFyIGw9MTtsPHMubGVuZ3RoOysrbCl7dmFyIGM9cGFyc2VJbnQoc1tsXSk7bDxzLmxlbmd0aC0xfHxvPGkubGVuZ3RoLTE/KGMgaW4gYXx8KGw8cy5sZW5ndGgtMT9hW2NdPVtdOmFbY109e30pLGE9YVtjXSk6YVtjXT1lP246dFtuXS50eXBlfX1lbHNlIG88aS5sZW5ndGgtMT8oc1swXWluIGF8fChhW3NbMF1dPXt9KSxhPWFbc1swXV0pOmFbc1swXV09ZT9uOnRbbl0udHlwZX1yZXR1cm4gcn19LHt9XSwzMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci51bmlmb3Jtcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9VTklGT1JNUyksbj1bXSxpPTA7aTxyOysraSl7dmFyIG89dC5nZXRBY3RpdmVVbmlmb3JtKGUsaSk7aWYobyl7dmFyIHM9YSh0LG8udHlwZSk7aWYoby5zaXplPjEpZm9yKHZhciBsPTA7bDxvLnNpemU7KytsKW4ucHVzaCh7bmFtZTpvLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIrbCsiXSIpLHR5cGU6c30pO2Vsc2Ugbi5wdXNoKHtuYW1lOm8ubmFtZSx0eXBlOnN9KX19cmV0dXJuIG59LHIuYXR0cmlidXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmdldFByb2dyYW1QYXJhbWV0ZXIoZSx0LkFDVElWRV9BVFRSSUJVVEVTKSxuPVtdLGk9MDtpPHI7KytpKXt2YXIgbz10LmdldEFjdGl2ZUF0dHJpYihlLGkpO28mJm4ucHVzaCh7bmFtZTpvLm5hbWUsdHlwZTphKHQsby50eXBlKX0pfXJldHVybiBufTt2YXIgbj17RkxPQVQ6ImZsb2F0IixGTE9BVF9WRUMyOiJ2ZWMyIixGTE9BVF9WRUMzOiJ2ZWMzIixGTE9BVF9WRUM0OiJ2ZWM0IixJTlQ6ImludCIsSU5UX1ZFQzI6Iml2ZWMyIixJTlRfVkVDMzoiaXZlYzMiLElOVF9WRUM0OiJpdmVjNCIsQk9PTDoiYm9vbCIsQk9PTF9WRUMyOiJidmVjMiIsQk9PTF9WRUMzOiJidmVjMyIsQk9PTF9WRUM0OiJidmVjNCIsRkxPQVRfTUFUMjoibWF0MiIsRkxPQVRfTUFUMzoibWF0MyIsRkxPQVRfTUFUNDoibWF0NCIsU0FNUExFUl8yRDoic2FtcGxlcjJEIixTQU1QTEVSX0NVQkU6InNhbXBsZXJDdWJlIn0saT1udWxsO2Z1bmN0aW9uIGEodCxlKXtpZighaSl7dmFyIHI9T2JqZWN0LmtleXMobik7aT17fTtmb3IodmFyIGE9MDthPHIubGVuZ3RoOysrYSl7dmFyIG89clthXTtpW3Rbb11dPW5bb119fXJldHVybiBpW2VdfX0se31dLDMyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnNoYWRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHUodCkuZ2V0U2hhZGVyUmVmZXJlbmNlKGUscil9LHIucHJvZ3JhbT1mdW5jdGlvbih0LGUscixuLGkpe3JldHVybiB1KHQpLmdldFByb2dyYW0oZSxyLG4saSl9O3ZhciBuPXQoIi4vR0xFcnJvciIpLGk9dCgiZ2wtZm9ybWF0LWNvbXBpbGVyLWVycm9yIiksYT1uZXcoInVuZGVmaW5lZCI9PXR5cGVvZiBXZWFrTWFwP3QoIndlYWttYXAtc2hpbSIpOldlYWtNYXApLG89MDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8pe3RoaXMuaWQ9dCx0aGlzLnNyYz1lLHRoaXMudHlwZT1yLHRoaXMuc2hhZGVyPW4sdGhpcy5jb3VudD1hLHRoaXMucHJvZ3JhbXM9W10sdGhpcy5jYWNoZT1vfWZ1bmN0aW9uIGwodCl7dGhpcy5nbD10LHRoaXMuc2hhZGVycz1be30se31dLHRoaXMucHJvZ3JhbXM9e319cy5wcm90b3R5cGUuZGlzcG9zZT1mdW5jdGlvbigpe2lmKDA9PS0tdGhpcy5jb3VudCl7Zm9yKHZhciB0PXRoaXMuY2FjaGUsZT10LmdsLHI9dGhpcy5wcm9ncmFtcyxuPTAsaT1yLmxlbmd0aDtuPGk7KytuKXt2YXIgYT10LnByb2dyYW1zW3Jbbl1dO2EmJihkZWxldGUgdC5wcm9ncmFtc1tuXSxlLmRlbGV0ZVByb2dyYW0oYSkpfWUuZGVsZXRlU2hhZGVyKHRoaXMuc2hhZGVyKSxkZWxldGUgdC5zaGFkZXJzW3RoaXMudHlwZT09PWUuRlJBR01FTlRfU0hBREVSfDBdW3RoaXMuc3JjXX19O3ZhciBjPWwucHJvdG90eXBlO2Z1bmN0aW9uIHUodCl7dmFyIGU9YS5nZXQodCk7cmV0dXJuIGV8fChlPW5ldyBsKHQpLGEuc2V0KHQsZSkpLGV9Yy5nZXRTaGFkZXJSZWZlcmVuY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdsLGE9dGhpcy5zaGFkZXJzW3Q9PT1yLkZSQUdNRU5UX1NIQURFUnwwXSxsPWFbZV07aWYobCYmci5pc1NoYWRlcihsLnNoYWRlcikpbC5jb3VudCs9MTtlbHNle3ZhciBjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10LmNyZWF0ZVNoYWRlcihlKTtpZih0LnNoYWRlclNvdXJjZShhLHIpLHQuY29tcGlsZVNoYWRlcihhKSwhdC5nZXRTaGFkZXJQYXJhbWV0ZXIoYSx0LkNPTVBJTEVfU1RBVFVTKSl7dmFyIG89dC5nZXRTaGFkZXJJbmZvTG9nKGEpO3RyeXt2YXIgcz1pKG8scixlKX1jYXRjaCh0KXt0aHJvdyBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBmb3JtYXQgY29tcGlsZXIgZXJyb3I6ICIrdCksbmV3IG4obywiRXJyb3IgY29tcGlsaW5nIHNoYWRlcjpcbiIrbyl9dGhyb3cgbmV3IG4obyxzLnNob3J0LHMubG9uZyl9cmV0dXJuIGF9KHIsdCxlKTtsPWFbZV09bmV3IHMobysrLGUsdCxjLFtdLDEsdGhpcyl9cmV0dXJuIGx9LGMuZ2V0UHJvZ3JhbT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1bdC5pZCxlLmlkLHIuam9pbigiOiIpLGkuam9pbigiOiIpXS5qb2luKCJAIiksbz10aGlzLnByb2dyYW1zW2FdO3JldHVybiBvJiZ0aGlzLmdsLmlzUHJvZ3JhbShvKXx8KHRoaXMucHJvZ3JhbXNbYV09bz1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXQuY3JlYXRlUHJvZ3JhbSgpO3QuYXR0YWNoU2hhZGVyKG8sZSksdC5hdHRhY2hTaGFkZXIobyxyKTtmb3IodmFyIHM9MDtzPGkubGVuZ3RoOysrcyl0LmJpbmRBdHRyaWJMb2NhdGlvbihvLGFbc10saVtzXSk7aWYodC5saW5rUHJvZ3JhbShvKSwhdC5nZXRQcm9ncmFtUGFyYW1ldGVyKG8sdC5MSU5LX1NUQVRVUykpe3ZhciBsPXQuZ2V0UHJvZ3JhbUluZm9Mb2cobyk7dGhyb3cgbmV3IG4obCwiRXJyb3IgbGlua2luZyBwcm9ncmFtOiAiK2wpfXJldHVybiBvfSh0aGlzLmdsLHQuc2hhZGVyLGUuc2hhZGVyLHIsaSksdC5wcm9ncmFtcy5wdXNoKGEpLGUucHJvZ3JhbXMucHVzaChhKSksb319LHsiLi9HTEVycm9yIjozMjQsImdsLWZvcm1hdC1jb21waWxlci1lcnJvciI6MjY2LCJ3ZWFrbWFwLXNoaW0iOjYwMX1dLDMzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucGxvdD10LHRoaXMuZW5hYmxlPVshMCwhMCwhMSwhMV0sdGhpcy53aWR0aD1bMSwxLDEsMV0sdGhpcy5jb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmNlbnRlcj1bMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG4odCk7cmV0dXJuIHIudXBkYXRlKGUpLHQuYWRkT3ZlcmxheShyKSxyfTt2YXIgaT1uLnByb3RvdHlwZTtpLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMuZW5hYmxlPSh0LmVuYWJsZXx8WyEwLCEwLCExLCExXSkuc2xpY2UoKSx0aGlzLndpZHRoPSh0LndpZHRofHxbMSwxLDEsMV0pLnNsaWNlKCksdGhpcy5jb2xvcj0odC5jb2xvcnx8W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKX0pKSx0aGlzLmNlbnRlcj0odC5jZW50ZXJ8fFsxLzAsMS8wXSkuc2xpY2UoKSx0aGlzLnBsb3Quc2V0T3ZlcmxheURpcnR5KCl9LGkuZHJhdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZW5hYmxlLGU9dGhpcy53aWR0aCxyPXRoaXMuY29sb3Isbj10aGlzLmNlbnRlcixpPXRoaXMucGxvdCxhPWkubGluZSxvPWkuZGF0YUJveCxzPWkudmlld0JveDtpZihhLmJpbmQoKSxvWzBdPD1uWzBdJiZuWzBdPD1vWzJdJiZvWzFdPD1uWzFdJiZuWzFdPD1vWzNdKXt2YXIgbD1zWzBdKyhuWzBdLW9bMF0pLyhvWzJdLW9bMF0pKihzWzJdLXNbMF0pLGM9c1sxXSsoblsxXS1vWzFdKS8ob1szXS1vWzFdKSooc1szXS1zWzFdKTt0WzBdJiZhLmRyYXdMaW5lKGwsYyxzWzBdLGMsZVswXSxyWzBdKSx0WzFdJiZhLmRyYXdMaW5lKGwsYyxsLHNbMV0sZVsxXSxyWzFdKSx0WzJdJiZhLmRyYXdMaW5lKGwsYyxzWzJdLGMsZVsyXSxyWzJdKSx0WzNdJiZhLmRyYXdMaW5lKGwsYyxsLHNbM10sZVszXSxyWzNdKX19LGkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMucGxvdC5yZW1vdmVPdmVybGF5KHRoaXMpfX0se31dLDMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbHNsaWZ5IiksaT10KCJnbC1zaGFkZXIiKSxhPW4oWyJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmF0dHJpYnV0ZSB2ZWMzIHBvc2l0aW9uLCBjb2xvcjtcbmF0dHJpYnV0ZSBmbG9hdCB3ZWlnaHQ7XG5cbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gdmVjMyBjb29yZGluYXRlc1szXTtcbnVuaWZvcm0gdmVjNCBjb2xvcnNbM107XG51bmlmb3JtIHZlYzIgc2NyZWVuU2hhcGU7XG51bmlmb3JtIGZsb2F0IGxpbmVXaWR0aDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIHZlcnRleFBvc2l0aW9uID0gbWl4KGNvb3JkaW5hdGVzWzBdLFxuICAgIG1peChjb29yZGluYXRlc1syXSwgY29vcmRpbmF0ZXNbMV0sIDAuNSAqIChwb3NpdGlvbiArIDEuMCkpLCBhYnMocG9zaXRpb24pKTtcblxuICB2ZWM0IGNsaXBQb3MgPSBwcm9qZWN0aW9uICogdmlldyAqIG1vZGVsICogdmVjNCh2ZXJ0ZXhQb3NpdGlvbiwgMS4wKTtcbiAgdmVjMiBjbGlwT2Zmc2V0ID0gKHByb2plY3Rpb24gKiB2aWV3ICogbW9kZWwgKiB2ZWM0KGNvbG9yLCAwLjApKS54eTtcbiAgdmVjMiBkZWx0YSA9IHdlaWdodCAqIGNsaXBPZmZzZXQgKiBzY3JlZW5TaGFwZTtcbiAgdmVjMiBsaW5lT2Zmc2V0ID0gbm9ybWFsaXplKHZlYzIoZGVsdGEueSwgLWRlbHRhLngpKSAvIHNjcmVlblNoYXBlO1xuXG4gIGdsX1Bvc2l0aW9uICAgPSB2ZWM0KGNsaXBQb3MueHkgKyBjbGlwUG9zLncgKiAwLjUgKiBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0LCBjbGlwUG9zLnosIGNsaXBQb3Mudyk7XG4gIGZyYWdDb2xvciAgICAgPSBjb2xvci54ICogY29sb3JzWzBdICsgY29sb3IueSAqIGNvbG9yc1sxXSArIGNvbG9yLnogKiBjb2xvcnNbMl07XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn0iXSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsYSxvLG51bGwsW3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjMyJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjMyJ9LHtuYW1lOiJ3ZWlnaHQiLHR5cGU6ImZsb2F0In1dKX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwzMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtYnVmZmVyIiksaT10KCJnbC12YW8iKSxhPXQoIi4vc2hhZGVycy9pbmRleCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO2Z1bmN0aW9uIG8odCxlLG4saSxhLG8pe3ZhciBzPVt0LGUsbiwwLDAsMCwxXTtzW2krM109MSxzW2ldPWEsci5wdXNoLmFwcGx5KHIscyksc1s2XT0tMSxyLnB1c2guYXBwbHkocixzKSxzW2ldPW8sci5wdXNoLmFwcGx5KHIscyksci5wdXNoLmFwcGx5KHIscyksc1s2XT0xLHIucHVzaC5hcHBseShyLHMpLHNbaV09YSxyLnB1c2guYXBwbHkocixzKX1vKDAsMCwwLDAsMCwxKSxvKDAsMCwwLDEsMCwxKSxvKDAsMCwwLDIsMCwxKSxvKDEsMCwwLDEsLTEsMSksbygxLDAsMCwyLC0xLDEpLG8oMCwxLDAsMCwtMSwxKSxvKDAsMSwwLDIsLTEsMSksbygwLDAsMSwwLC0xLDEpLG8oMCwwLDEsMSwtMSwxKTt2YXIgbD1uKHQsciksYz1pKHQsW3t0eXBlOnQuRkxPQVQsYnVmZmVyOmwsc2l6ZTozLG9mZnNldDowLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjMsb2Zmc2V0OjEyLHN0cmlkZToyOH0se3R5cGU6dC5GTE9BVCxidWZmZXI6bCxzaXplOjEsb2Zmc2V0OjI0LHN0cmlkZToyOH1dKSx1PWEodCk7dS5hdHRyaWJ1dGVzLnBvc2l0aW9uLmxvY2F0aW9uPTAsdS5hdHRyaWJ1dGVzLmNvbG9yLmxvY2F0aW9uPTEsdS5hdHRyaWJ1dGVzLndlaWdodC5sb2NhdGlvbj0yO3ZhciBmPW5ldyBzKHQsbCxjLHUpO3JldHVybiBmLnVwZGF0ZShlKSxmfTt2YXIgbz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV07ZnVuY3Rpb24gcyh0LGUscixuKXt0aGlzLmdsPXQsdGhpcy5idWZmZXI9ZSx0aGlzLnZhbz1yLHRoaXMuc2hhZGVyPW4sdGhpcy5waXhlbFJhdGlvPTEsdGhpcy5ib3VuZHM9W1stMWUzLC0xZTMsLTFlM10sWzFlMywxZTMsMWUzXV0sdGhpcy5wb3NpdGlvbj1bMCwwLDBdLHRoaXMubGluZVdpZHRoPVsyLDIsMl0sdGhpcy5jb2xvcnM9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmRyYXdTaWRlcz1bITAsITAsITBdLHRoaXMuYXhlcz1udWxsfXZhciBsPXMucHJvdG90eXBlLGM9WzAsMCwwXSx1PVswLDAsMF0sZj1bMCwwXTtsLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5kcmF3VHJhbnNwYXJlbnQ9ZnVuY3Rpb24odCl7fSxsLmRyYXc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbCxyPXRoaXMudmFvLG49dGhpcy5zaGFkZXI7ci5iaW5kKCksbi5iaW5kKCk7dmFyIGksYT10Lm1vZGVsfHxvLHM9dC52aWV3fHxvLGw9dC5wcm9qZWN0aW9ufHxvO3RoaXMuYXhlcyYmKGk9dGhpcy5heGVzLmxhc3RDdWJlUHJvcHMuYXhpcyk7Zm9yKHZhciBoPWMscD11LGQ9MDtkPDM7KytkKWkmJmlbZF08MD8oaFtkXT10aGlzLmJvdW5kc1swXVtkXSxwW2RdPXRoaXMuYm91bmRzWzFdW2RdKTooaFtkXT10aGlzLmJvdW5kc1sxXVtkXSxwW2RdPXRoaXMuYm91bmRzWzBdW2RdKTtmWzBdPWUuZHJhd2luZ0J1ZmZlcldpZHRoLGZbMV09ZS5kcmF3aW5nQnVmZmVySGVpZ2h0LG4udW5pZm9ybXMubW9kZWw9YSxuLnVuaWZvcm1zLnZpZXc9cyxuLnVuaWZvcm1zLnByb2plY3Rpb249bCxuLnVuaWZvcm1zLmNvb3JkaW5hdGVzPVt0aGlzLnBvc2l0aW9uLGgscF0sbi51bmlmb3Jtcy5jb2xvcnM9dGhpcy5jb2xvcnMsbi51bmlmb3Jtcy5zY3JlZW5TaGFwZT1mO2ZvcihkPTA7ZDwzOysrZCluLnVuaWZvcm1zLmxpbmVXaWR0aD10aGlzLmxpbmVXaWR0aFtkXSp0aGlzLnBpeGVsUmF0aW8sdGhpcy5lbmFibGVkW2RdJiYoci5kcmF3KGUuVFJJQU5HTEVTLDYsNipkKSx0aGlzLmRyYXdTaWRlc1tkXSYmci5kcmF3KGUuVFJJQU5HTEVTLDEyLDE4KzEyKmQpKTtyLnVuYmluZCgpfSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0JiYoImJvdW5kcyJpbiB0JiYodGhpcy5ib3VuZHM9dC5ib3VuZHMpLCJwb3NpdGlvbiJpbiB0JiYodGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uKSwibGluZVdpZHRoImluIHQmJih0aGlzLmxpbmVXaWR0aD10LmxpbmVXaWR0aCksImNvbG9ycyJpbiB0JiYodGhpcy5jb2xvcnM9dC5jb2xvcnMpLCJlbmFibGVkImluIHQmJih0aGlzLmVuYWJsZWQ9dC5lbmFibGVkKSwiZHJhd1NpZGVzImluIHQmJih0aGlzLmRyYXdTaWRlcz10LmRyYXdTaWRlcykpfSxsLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnZhby5kaXNwb3NlKCksdGhpcy5idWZmZXIuZGlzcG9zZSgpLHRoaXMuc2hhZGVyLmRpc3Bvc2UoKX19LHsiLi9zaGFkZXJzL2luZGV4IjozMzEsImdsLWJ1ZmZlciI6MjU3LCJnbC12YW8iOjM0M31dLDMzMzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2xpZnkiKSxpPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZlYzMgZ2V0T3J0aG9nb25hbFZlY3Rvcih2ZWMzIHYpIHtcbiAgLy8gUmV0dXJuIHVwLXZlY3RvciBmb3Igb25seS16IHZlY3Rvci5cbiAgLy8gUmV0dXJuIGF4ICsgYnkgKyBjeiA9IDAsIGEgcG9pbnQgdGhhdCBsaWVzIG9uIHRoZSBwbGFuZSB0aGF0IGhhcyB2IGFzIGEgbm9ybWFsIGFuZCB0aGF0IGlzbid0ICgwLDAsMCkuXG4gIC8vIEZyb20gdGhlIGFib3ZlIGlmLXN0YXRlbWVudCB3ZSBoYXZlIHx8YXx8ID4gMCAgVSAgfHxifHwgPiAwLlxuICAvLyBBc3NpZ24geiA9IDAsIHggPSAtYiwgeSA9IGE6XG4gIC8vIGEqLWIgKyBiKmEgKyBjKjAgPSAtYmEgKyBiYSArIDAgPSAwXG4gIGlmICh2Lngqdi54ID4gdi56KnYueiB8fCB2Lnkqdi55ID4gdi56KnYueikge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygtdi55LCB2LngsIDAuMCkpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBub3JtYWxpemUodmVjMygwLjAsIHYueiwgLXYueSkpO1xuICB9XG59XG5cbi8vIENhbGN1bGF0ZSB0aGUgdHViZSB2ZXJ0ZXggYW5kIG5vcm1hbCBhdCB0aGUgZ2l2ZW4gaW5kZXguXG4vL1xuLy8gVGhlIHJldHVybmVkIHZlcnRleCBpcyBmb3IgYSB0dWJlIHJpbmcgd2l0aCBpdHMgY2VudGVyIGF0IG9yaWdpbiwgcmFkaXVzIG9mIGxlbmd0aChkKSwgcG9pbnRpbmcgaW4gdGhlIGRpcmVjdGlvbiBvZiBkLlxuLy9cbi8vIEVhY2ggdHViZSBzZWdtZW50IGlzIG1hZGUgdXAgb2YgYSByaW5nIG9mIHZlcnRpY2VzLlxuLy8gVGhlc2UgdmVydGljZXMgYXJlIHVzZWQgdG8gbWFrZSB1cCB0aGUgdHJpYW5nbGVzIG9mIHRoZSB0dWJlIGJ5IGNvbm5lY3RpbmcgdGhlbSB0b2dldGhlciBpbiB0aGUgdmVydGV4IGFycmF5LlxuLy8gVGhlIGluZGV4ZXMgb2YgdHViZSBzZWdtZW50cyBydW4gZnJvbSAwIHRvIDguXG4vL1xudmVjMyBnZXRUdWJlUG9zaXRpb24odmVjMyBkLCBmbG9hdCBpbmRleCwgb3V0IHZlYzMgbm9ybWFsKSB7XG4gIGZsb2F0IHNlZ21lbnRDb3VudCA9IDguMDtcblxuICBmbG9hdCBhbmdsZSA9IDIuMCAqIDMuMTQxNTkgKiAoaW5kZXggLyBzZWdtZW50Q291bnQpO1xuXG4gIHZlYzMgdSA9IGdldE9ydGhvZ29uYWxWZWN0b3IoZCk7XG4gIHZlYzMgdiA9IG5vcm1hbGl6ZShjcm9zcyh1LCBkKSk7XG5cbiAgdmVjMyB4ID0gdSAqIGNvcyhhbmdsZSkgKiBsZW5ndGgoZCk7XG4gIHZlYzMgeSA9IHYgKiBzaW4oYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHYzID0geCArIHk7XG5cbiAgbm9ybWFsID0gbm9ybWFsaXplKHYzKTtcblxuICByZXR1cm4gdjM7XG59XG5cbmF0dHJpYnV0ZSB2ZWM0IHZlY3RvcjtcbmF0dHJpYnV0ZSB2ZWM0IGNvbG9yLCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWMyIHV2O1xuXG51bmlmb3JtIGZsb2F0IHZlY3RvclNjYWxlLCB0dWJlU2NhbGU7XG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb24sIGludmVyc2VNb2RlbDtcbnVuaWZvcm0gdmVjMyBleWVQb3NpdGlvbiwgbGlnaHRQb3NpdGlvbjtcblxudmFyeWluZyB2ZWMzIGZfbm9ybWFsLCBmX2xpZ2h0RGlyZWN0aW9uLCBmX2V5ZURpcmVjdGlvbiwgZl9kYXRhLCBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfY29sb3I7XG52YXJ5aW5nIHZlYzIgZl91djtcblxudm9pZCBtYWluKCkge1xuICAvLyBTY2FsZSB0aGUgdmVjdG9yIG1hZ25pdHVkZSB0byBzdGF5IGNvbnN0YW50IHdpdGhcbiAgLy8gbW9kZWwgJiB2aWV3IGNoYW5nZXMuXG4gIHZlYzMgbm9ybWFsO1xuICB2ZWMzIFhZWiA9IGdldFR1YmVQb3NpdGlvbihtYXQzKG1vZGVsKSAqICh0dWJlU2NhbGUgKiB2ZWN0b3IudyAqIG5vcm1hbGl6ZSh2ZWN0b3IueHl6KSksIHBvc2l0aW9uLncsIG5vcm1hbCk7XG4gIHZlYzQgdHViZVBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHBvc2l0aW9uLnh5eiwgMS4wKSArIHZlYzQoWFlaLCAwLjApO1xuXG4gIC8vTGlnaHRpbmcgZ2VvbWV0cnkgcGFyYW1ldGVyc1xuICB2ZWM0IGNhbWVyYUNvb3JkaW5hdGUgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGZfbGlnaHREaXJlY3Rpb24gPSBsaWdodFBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIGZfZXllRGlyZWN0aW9uICAgPSBleWVQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBmX25vcm1hbCA9IG5vcm1hbGl6ZSgodmVjNChub3JtYWwsIDAuMCkgKiBpbnZlcnNlTW9kZWwpLnh5eik7XG5cbiAgLy8gdmVjNCBtX3Bvc2l0aW9uICA9IG1vZGVsICogdmVjNCh0dWJlUG9zaXRpb24sIDEuMCk7XG4gIHZlYzQgdF9wb3NpdGlvbiAgPSB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBnbF9Qb3NpdGlvbiAgICAgID0gcHJvamVjdGlvbiAqIHRfcG9zaXRpb247XG5cbiAgZl9jb2xvciAgICAgICAgICA9IGNvbG9yO1xuICBmX2RhdGEgICAgICAgICAgID0gdHViZVBvc2l0aW9uLnh5ejtcbiAgZl9wb3NpdGlvbiAgICAgICA9IHBvc2l0aW9uLnh5ejtcbiAgZl91diAgICAgICAgICAgICA9IHV2O1xufVxuIl0pLGE9bihbIiNleHRlbnNpb24gR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIDogZW5hYmxlXG5cbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbmZsb2F0IGJlY2ttYW5uRGlzdHJpYnV0aW9uKGZsb2F0IHgsIGZsb2F0IHJvdWdobmVzcykge1xuICBmbG9hdCBOZG90SCA9IG1heCh4LCAwLjAwMDEpO1xuICBmbG9hdCBjb3MyQWxwaGEgPSBOZG90SCAqIE5kb3RIO1xuICBmbG9hdCB0YW4yQWxwaGEgPSAoY29zMkFscGhhIC0gMS4wKSAvIGNvczJBbHBoYTtcbiAgZmxvYXQgcm91Z2huZXNzMiA9IHJvdWdobmVzcyAqIHJvdWdobmVzcztcbiAgZmxvYXQgZGVub20gPSAzLjE0MTU5MjY1MzU4OTc5MyAqIHJvdWdobmVzczIgKiBjb3MyQWxwaGEgKiBjb3MyQWxwaGE7XG4gIHJldHVybiBleHAodGFuMkFscGhhIC8gcm91Z2huZXNzMikgLyBkZW5vbTtcbn1cblxuZmxvYXQgY29va1RvcnJhbmNlU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MsXG4gIGZsb2F0IGZyZXNuZWwpIHtcblxuICBmbG9hdCBWZG90TiA9IG1heChkb3Qodmlld0RpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG4gIGZsb2F0IExkb3ROID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgc3VyZmFjZU5vcm1hbCksIDAuMCk7XG5cbiAgLy9IYWxmIGFuZ2xlIHZlY3RvclxuICB2ZWMzIEggPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKTtcblxuICAvL0dlb21ldHJpYyB0ZXJtXG4gIGZsb2F0IE5kb3RIID0gbWF4KGRvdChzdXJmYWNlTm9ybWFsLCBIKSwgMC4wKTtcbiAgZmxvYXQgVmRvdEggPSBtYXgoZG90KHZpZXdEaXJlY3Rpb24sIEgpLCAwLjAwMDAwMSk7XG4gIGZsb2F0IExkb3RIID0gbWF4KGRvdChsaWdodERpcmVjdGlvbiwgSCksIDAuMDAwMDAxKTtcbiAgZmxvYXQgRzEgPSAoMi4wICogTmRvdEggKiBWZG90TikgLyBWZG90SDtcbiAgZmxvYXQgRzIgPSAoMi4wICogTmRvdEggKiBMZG90TikgLyBMZG90SDtcbiAgZmxvYXQgRyA9IG1pbigxLjAsIG1pbihHMSwgRzIpKTtcbiAgXG4gIC8vRGlzdHJpYnV0aW9uIHRlcm1cbiAgZmxvYXQgRCA9IGJlY2ttYW5uRGlzdHJpYnV0aW9uKE5kb3RILCByb3VnaG5lc3MpO1xuXG4gIC8vRnJlc25lbCB0ZXJtXG4gIGZsb2F0IEYgPSBwb3coMS4wIC0gVmRvdE4sIGZyZXNuZWwpO1xuXG4gIC8vTXVsdGlwbHkgdGVybXMgYW5kIGRvbmVcbiAgcmV0dXJuICBHICogRiAqIEQgLyBtYXgoMy4xNDE1OTI2NSAqIFZkb3ROLCAwLjAwMDAwMSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gc2FtcGxlcjJEIHRleHR1cmU7XG5cbnZhcnlpbmcgdmVjMyBmX25vcm1hbCwgZl9saWdodERpcmVjdGlvbiwgZl9leWVEaXJlY3Rpb24sIGZfZGF0YSwgZl9wb3NpdGlvbjtcbnZhcnlpbmcgdmVjNCBmX2NvbG9yO1xudmFyeWluZyB2ZWMyIGZfdXY7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG4gIHZlYzMgTiA9IG5vcm1hbGl6ZShmX25vcm1hbCk7XG4gIHZlYzMgTCA9IG5vcm1hbGl6ZShmX2xpZ2h0RGlyZWN0aW9uKTtcbiAgdmVjMyBWID0gbm9ybWFsaXplKGZfZXllRGlyZWN0aW9uKTtcblxuICBpZihnbF9Gcm9udEZhY2luZykge1xuICAgIE4gPSAtTjtcbiAgfVxuXG4gIGZsb2F0IHNwZWN1bGFyID0gbWluKDEuMCwgbWF4KDAuMCwgY29va1RvcnJhbmNlU3BlY3VsYXIoTCwgViwgTiwgcm91Z2huZXNzLCBmcmVzbmVsKSkpO1xuICBmbG9hdCBkaWZmdXNlICA9IG1pbihrYW1iaWVudCArIGtkaWZmdXNlICogbWF4KGRvdChOLCBMKSwgMC4wKSwgMS4wKTtcblxuICB2ZWM0IHN1cmZhY2VDb2xvciA9IGZfY29sb3IgKiB0ZXh0dXJlMkQodGV4dHVyZSwgZl91dik7XG4gIHZlYzQgbGl0Q29sb3IgPSBzdXJmYWNlQ29sb3IuYSAqIHZlYzQoZGlmZnVzZSAqIHN1cmZhY2VDb2xvci5yZ2IgKyBrc3BlY3VsYXIgKiB2ZWMzKDEsMSwxKSAqIHNwZWN1bGFyLCAgMS4wKTtcblxuICBnbF9GcmFnQ29sb3IgPSBsaXRDb2xvciAqIG9wYWNpdHk7XG59XG4iXSksbz1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG52ZWMzIGdldE9ydGhvZ29uYWxWZWN0b3IodmVjMyB2KSB7XG4gIC8vIFJldHVybiB1cC12ZWN0b3IgZm9yIG9ubHkteiB2ZWN0b3IuXG4gIC8vIFJldHVybiBheCArIGJ5ICsgY3ogPSAwLCBhIHBvaW50IHRoYXQgbGllcyBvbiB0aGUgcGxhbmUgdGhhdCBoYXMgdiBhcyBhIG5vcm1hbCBhbmQgdGhhdCBpc24ndCAoMCwwLDApLlxuICAvLyBGcm9tIHRoZSBhYm92ZSBpZi1zdGF0ZW1lbnQgd2UgaGF2ZSB8fGF8fCA+IDAgIFUgIHx8Ynx8ID4gMC5cbiAgLy8gQXNzaWduIHogPSAwLCB4ID0gLWIsIHkgPSBhOlxuICAvLyBhKi1iICsgYiphICsgYyowID0gLWJhICsgYmEgKyAwID0gMFxuICBpZiAodi54KnYueCA+IHYueip2LnogfHwgdi55KnYueSA+IHYueip2LnopIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoLXYueSwgdi54LCAwLjApKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbm9ybWFsaXplKHZlYzMoMC4wLCB2LnosIC12LnkpKTtcbiAgfVxufVxuXG4vLyBDYWxjdWxhdGUgdGhlIHR1YmUgdmVydGV4IGFuZCBub3JtYWwgYXQgdGhlIGdpdmVuIGluZGV4LlxuLy9cbi8vIFRoZSByZXR1cm5lZCB2ZXJ0ZXggaXMgZm9yIGEgdHViZSByaW5nIHdpdGggaXRzIGNlbnRlciBhdCBvcmlnaW4sIHJhZGl1cyBvZiBsZW5ndGgoZCksIHBvaW50aW5nIGluIHRoZSBkaXJlY3Rpb24gb2YgZC5cbi8vXG4vLyBFYWNoIHR1YmUgc2VnbWVudCBpcyBtYWRlIHVwIG9mIGEgcmluZyBvZiB2ZXJ0aWNlcy5cbi8vIFRoZXNlIHZlcnRpY2VzIGFyZSB1c2VkIHRvIG1ha2UgdXAgdGhlIHRyaWFuZ2xlcyBvZiB0aGUgdHViZSBieSBjb25uZWN0aW5nIHRoZW0gdG9nZXRoZXIgaW4gdGhlIHZlcnRleCBhcnJheS5cbi8vIFRoZSBpbmRleGVzIG9mIHR1YmUgc2VnbWVudHMgcnVuIGZyb20gMCB0byA4LlxuLy9cbnZlYzMgZ2V0VHViZVBvc2l0aW9uKHZlYzMgZCwgZmxvYXQgaW5kZXgsIG91dCB2ZWMzIG5vcm1hbCkge1xuICBmbG9hdCBzZWdtZW50Q291bnQgPSA4LjA7XG5cbiAgZmxvYXQgYW5nbGUgPSAyLjAgKiAzLjE0MTU5ICogKGluZGV4IC8gc2VnbWVudENvdW50KTtcblxuICB2ZWMzIHUgPSBnZXRPcnRob2dvbmFsVmVjdG9yKGQpO1xuICB2ZWMzIHYgPSBub3JtYWxpemUoY3Jvc3ModSwgZCkpO1xuXG4gIHZlYzMgeCA9IHUgKiBjb3MoYW5nbGUpICogbGVuZ3RoKGQpO1xuICB2ZWMzIHkgPSB2ICogc2luKGFuZ2xlKSAqIGxlbmd0aChkKTtcbiAgdmVjMyB2MyA9IHggKyB5O1xuXG4gIG5vcm1hbCA9IG5vcm1hbGl6ZSh2Myk7XG5cbiAgcmV0dXJuIHYzO1xufVxuXG5hdHRyaWJ1dGUgdmVjNCB2ZWN0b3I7XG5hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjtcbmF0dHJpYnV0ZSB2ZWM0IGlkO1xuXG51bmlmb3JtIG1hdDQgbW9kZWwsIHZpZXcsIHByb2plY3Rpb247XG51bmlmb3JtIGZsb2F0IHR1YmVTY2FsZTtcblxudmFyeWluZyB2ZWMzIGZfcG9zaXRpb247XG52YXJ5aW5nIHZlYzQgZl9pZDtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIG5vcm1hbDtcbiAgdmVjMyBYWVogPSBnZXRUdWJlUG9zaXRpb24obWF0Myhtb2RlbCkgKiAodHViZVNjYWxlICogdmVjdG9yLncgKiBub3JtYWxpemUodmVjdG9yLnh5eikpLCBwb3NpdGlvbi53LCBub3JtYWwpO1xuICB2ZWM0IHR1YmVQb3NpdGlvbiA9IG1vZGVsICogdmVjNChwb3NpdGlvbi54eXosIDEuMCkgKyB2ZWM0KFhZWiwgMC4wKTtcblxuICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogdHViZVBvc2l0aW9uO1xuICBmX2lkICAgICAgICA9IGlkO1xuICBmX3Bvc2l0aW9uICA9IHBvc2l0aW9uLnh5ejtcbn1cbiJdKSxzPW4oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMzICBjbGlwQm91bmRzWzJdO1xudW5pZm9ybSBmbG9hdCBwaWNrSWQ7XG5cbnZhcnlpbmcgdmVjMyBmX3Bvc2l0aW9uO1xudmFyeWluZyB2ZWM0IGZfaWQ7XG5cbnZvaWQgbWFpbigpIHtcbiAgaWYgKG91dE9mUmFuZ2UoY2xpcEJvdW5kc1swXSwgY2xpcEJvdW5kc1sxXSwgZl9wb3NpdGlvbikpIGRpc2NhcmQ7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gdmVjNChwaWNrSWQsIGZfaWQueHl6KTtcbn0iXSk7ci5tZXNoU2hhZGVyPXt2ZXJ0ZXg6aSxmcmFnbWVudDphLGF0dHJpYnV0ZXM6W3tuYW1lOiJwb3NpdGlvbiIsdHlwZToidmVjNCJ9LHtuYW1lOiJjb2xvciIsdHlwZToidmVjNCJ9LHtuYW1lOiJ1diIsdHlwZToidmVjMiJ9LHtuYW1lOiJ2ZWN0b3IiLHR5cGU6InZlYzQifV19LHIucGlja1NoYWRlcj17dmVydGV4Om8sZnJhZ21lbnQ6cyxhdHRyaWJ1dGVzOlt7bmFtZToicG9zaXRpb24iLHR5cGU6InZlYzQifSx7bmFtZToiaWQiLHR5cGU6InZlYzQifSx7bmFtZToidmVjdG9yIix0eXBlOiJ2ZWM0In1dfX0se2dsc2xpZnk6NDI0fV0sMzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXZlYzMiKSxpPXQoImdsLXZlYzQiKSxhPVsieHl6IiwieHp5IiwieXh6IiwieXp4Iiwienh5Iiwienl4Il0sbz1mdW5jdGlvbih0LGUscixhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aDtzKyspZm9yKHZhciBsPXRbc10udmVsb2NpdGllcyxjPTA7YzxsLmxlbmd0aDtjKyspbz1NYXRoLm1heChvLG4ubGVuZ3RoKGxbY10pKTt2YXIgdT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LnBvaW50cyxzPXQudmVsb2NpdGllcyxsPXQuZGl2ZXJnZW5jZXMsYz1bXSx1PVtdLGY9W10saD1bXSxwPVtdLGQ9W10sbT0wLGc9MCx2PWkuY3JlYXRlKCkseT1pLmNyZWF0ZSgpLHg9MDt4PG8ubGVuZ3RoO3grKyl7dmFyIGI9b1t4XSxfPXNbeF0sdz1sW3hdOzA9PT1lJiYodz0uMDUqciksZz1uLmxlbmd0aChfKS9hLHY9aS5jcmVhdGUoKSxuLmNvcHkodixfKSx2WzNdPXc7Zm9yKHZhciBUPTA7VDw4O1QrKylwW1RdPVtiWzBdLGJbMV0sYlsyXSxUXTtpZihoLmxlbmd0aD4wKWZvcihUPTA7VDw4O1QrKyl7dmFyIGs9KFQrMSklODtjLnB1c2goaFtUXSxwW1RdLHBba10scFtrXSxoW2tdLGhbVF0pLGYucHVzaCh5LHYsdix2LHkseSksZC5wdXNoKG0sZyxnLGcsbSxtKTt2YXIgQT1jLmxlbmd0aDt1LnB1c2goW0EtNixBLTUsQS00XSxbQS0zLEEtMixBLTFdKX12YXIgTT1oO2g9cCxwPU07dmFyIFM9eTt5PXYsdj1TO3ZhciBFPW07bT1nLGc9RX1yZXR1cm57cG9zaXRpb25zOmMsY2VsbHM6dSx2ZWN0b3JzOmYsdmVydGV4SW50ZW5zaXR5OmR9fSh0LHIsYSxvKX0pKSxmPVtdLGg9W10scD1bXSxkPVtdO2ZvcihzPTA7czx1Lmxlbmd0aDtzKyspe3ZhciBtPXVbc10sZz1mLmxlbmd0aDtmPWYuY29uY2F0KG0ucG9zaXRpb25zKSxwPXAuY29uY2F0KG0udmVjdG9ycyksZD1kLmNvbmNhdChtLnZlcnRleEludGVuc2l0eSk7Zm9yKGM9MDtjPG0uY2VsbHMubGVuZ3RoO2MrKyl7dmFyIHY9bS5jZWxsc1tjXSx5PVtdO2gucHVzaCh5KTtmb3IodmFyIHg9MDt4PHYubGVuZ3RoO3grKyl5LnB1c2godlt4XStnKX19cmV0dXJue3Bvc2l0aW9uczpmLGNlbGxzOmgsdmVjdG9yczpwLHZlcnRleEludGVuc2l0eTpkLGNvbG9ybWFwOmV9fSxzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Lmxlbmd0aDtmb3Iocj0wO3I8bjtyKyspe3ZhciBpPXRbcl07aWYoaT09PWUpcmV0dXJuIHI7aWYoaT5lKXJldHVybiByLTF9cmV0dXJuIHJ9LGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PGU/ZTp0PnI/cjp0fSxjPWZ1bmN0aW9uKHQpe3ZhciBlPTEvMDt0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3IodmFyIHI9dC5sZW5ndGgsbj0xO248cjtuKyspe3ZhciBpPU1hdGguYWJzKHRbbl0tdFtuLTFdKTtpPGUmJihlPWkpfXJldHVybiBlfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0aW5nUG9zaXRpb25zLGk9dC5tYXhMZW5ndGh8fDFlMyx1PXQudHViZVNpemV8fDEsZj10LmFic29sdXRlVHViZVNpemUsaD10LmdyaWRGaWxsfHwiK3greSt6IixwPXt9Oy0xIT09aC5pbmRleE9mKCIteCIpJiYocC5yZXZlcnNlZFg9ITApLC0xIT09aC5pbmRleE9mKCIteSIpJiYocC5yZXZlcnNlZFk9ITApLC0xIT09aC5pbmRleE9mKCIteiIpJiYocC5yZXZlcnNlZFo9ITApLHAuZmlsbGVkPWEuaW5kZXhPZihoLnJlcGxhY2UoLy0vZywiIikucmVwbGFjZSgvXCsvZywiIikpO3ZhciBkPXQuZ2V0VmVsb2NpdHl8fGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LGUscil7dmFyIGk9ZS52ZWN0b3JzLGE9ZS5tZXNoZ3JpZCxvPXRbMF0sYz10WzFdLHU9dFsyXSxmPWFbMF0ubGVuZ3RoLGg9YVsxXS5sZW5ndGgscD1hWzJdLmxlbmd0aCxkPXMoYVswXSxvKSxtPXMoYVsxXSxjKSxnPXMoYVsyXSx1KSx2PWQrMSx5PW0rMSx4PWcrMTtpZihkPWwoZCwwLGYtMSksdj1sKHYsMCxmLTEpLG09bChtLDAsaC0xKSx5PWwoeSwwLGgtMSksZz1sKGcsMCxwLTEpLHg9bCh4LDAscC0xKSxkPDB8fG08MHx8ZzwwfHx2PmYtMXx8eT5oLTF8fHg+cC0xKXJldHVybiBuLmNyZWF0ZSgpO3ZhciBiLF8sdyxULGssQSxNPWFbMF1bZF0sUz1hWzBdW3ZdLEU9YVsxXVttXSxMPWFbMV1beV0sQz1hWzJdW2ddLFA9KG8tTSkvKFMtTSksST0oYy1FKS8oTC1FKSxPPSh1LUMpLyhhWzJdW3hdLUMpO3N3aXRjaChpc0Zpbml0ZShQKXx8KFA9LjUpLGlzRmluaXRlKEkpfHwoST0uNSksaXNGaW5pdGUoTyl8fChPPS41KSxyLnJldmVyc2VkWCYmKGQ9Zi0xLWQsdj1mLTEtdiksci5yZXZlcnNlZFkmJihtPWgtMS1tLHk9aC0xLXkpLHIucmV2ZXJzZWRaJiYoZz1wLTEtZyx4PXAtMS14KSxyLmZpbGxlZCl7Y2FzZSA1Oms9ZyxBPXgsdz1tKnAsVD15KnAsYj1kKnAqaCxfPXYqcCpoO2JyZWFrO2Nhc2UgNDprPWcsQT14LGI9ZCpwLF89dipwLHc9bSpwKmYsVD15KnAqZjticmVhaztjYXNlIDM6dz1tLFQ9eSxrPWcqaCxBPXgqaCxiPWQqaCpwLF89dipoKnA7YnJlYWs7Y2FzZSAyOnc9bSxUPXksYj1kKmgsXz12Kmgsaz1nKmgqZixBPXgqaCpmO2JyZWFrO2Nhc2UgMTpiPWQsXz12LGs9ZypmLEE9eCpmLHc9bSpmKnAsVD15KmYqcDticmVhaztkZWZhdWx0OmI9ZCxfPXYsdz1tKmYsVD15KmYsaz1nKmYqaCxBPXgqZipofXZhciB6PWlbYit3K2tdLEQ9aVtiK3crQV0sUj1pW2IrVCtrXSxGPWlbYitUK0FdLEI9aVtfK3cra10sTj1pW18rdytBXSxqPWlbXytUK2tdLFU9aVtfK1QrQV0sVj1uLmNyZWF0ZSgpLEg9bi5jcmVhdGUoKSxxPW4uY3JlYXRlKCksRz1uLmNyZWF0ZSgpO24ubGVycChWLHosQixQKSxuLmxlcnAoSCxELE4sUCksbi5sZXJwKHEsUixqLFApLG4ubGVycChHLEYsVSxQKTt2YXIgWT1uLmNyZWF0ZSgpLFc9bi5jcmVhdGUoKTtuLmxlcnAoWSxWLHEsSSksbi5sZXJwKFcsSCxHLEkpO3ZhciBYPW4uY3JlYXRlKCk7cmV0dXJuIG4ubGVycChYLFksVyxPKSxYfShlLHQscCl9LG09dC5nZXREaXZlcmdlbmNlfHxmdW5jdGlvbih0LGUpe3ZhciByPW4uY3JlYXRlKCksaT0xZS00O24uYWRkKHIsdCxbaSwwLDBdKTt2YXIgYT1kKHIpO24uc3VidHJhY3QoYSxhLGUpLG4uc2NhbGUoYSxhLDEvaSksbi5hZGQocix0LFswLGksMF0pO3ZhciBvPWQocik7bi5zdWJ0cmFjdChvLG8sZSksbi5zY2FsZShvLG8sMS9pKSxuLmFkZChyLHQsWzAsMCxpXSk7dmFyIHM9ZChyKTtyZXR1cm4gbi5zdWJ0cmFjdChzLHMsZSksbi5zY2FsZShzLHMsMS9pKSxuLmFkZChyLGEsbyksbi5hZGQocixyLHMpLHJ9LGc9W10sdj1lWzBdWzBdLHk9ZVswXVsxXSx4PWVbMF1bMl0sYj1lWzFdWzBdLF89ZVsxXVsxXSx3PWVbMV1bMl0sVD1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIShlPHZ8fGU+Ynx8cjx5fHxyPl98fG48eHx8bj53KX0saz0xMCpuLmRpc3RhbmNlKGVbMF0sZVsxXSkvaSxBPWsqayxNPTEsUz0wLEU9ci5sZW5ndGg7RT4xJiYoTT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj1bXSxuPVtdLGk9e30sYT17fSxvPXt9LHM9dC5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciB1PXRbbF0sZj11WzBdLGg9dVsxXSxwPXVbMl07aVtmXXx8KGUucHVzaChmKSxpW2ZdPSEwKSxhW2hdfHwoci5wdXNoKGgpLGFbaF09ITApLG9bcF18fChuLnB1c2gocCksb1twXT0hMCl9dmFyIGQ9YyhlKSxtPWMociksZz1jKG4pLHY9TWF0aC5taW4oZCxtLGcpO3JldHVybiBpc0Zpbml0ZSh2KT92OjF9KHIpKTtmb3IodmFyIEw9MDtMPEU7TCsrKXt2YXIgQz1uLmNyZWF0ZSgpO24uY29weShDLHJbTF0pO3ZhciBQPVtDXSxJPVtdLE89ZChDKSx6PUM7SS5wdXNoKE8pO3ZhciBEPVtdLFI9bShDLE8pLEY9bi5sZW5ndGgoUik7aXNGaW5pdGUoRikmJkY+UyYmKFM9RiksRC5wdXNoKEYpLGcucHVzaCh7cG9pbnRzOlAsdmVsb2NpdGllczpJLGRpdmVyZ2VuY2VzOkR9KTtmb3IodmFyIEI9MDtCPDEwMCppJiZQLmxlbmd0aDxpJiZUKEMpOyl7QisrO3ZhciBOPW4uY2xvbmUoTyksaj1uLnNxdWFyZWRMZW5ndGgoTik7aWYoMD09PWopYnJlYWs7aWYoaj5BJiZuLnNjYWxlKE4sTixrL01hdGguc3FydChqKSksbi5hZGQoTixOLEMpLE89ZChOKSxuLnNxdWFyZWREaXN0YW5jZSh6LE4pLUE+LTFlLTQqQSl7UC5wdXNoKE4pLHo9TixJLnB1c2goTyk7Uj1tKE4sTyksRj1uLmxlbmd0aChSKTtpc0Zpbml0ZShGKSYmRj5TJiYoUz1GKSxELnB1c2goRil9Qz1OfX12YXIgVT1vKGcsdC5jb2xvcm1hcCxTLE0pO3JldHVybiBmP1UudHViZVNjYWxlPWY6KDA9PT1TJiYoUz0xKSxVLnR1YmVTY2FsZT0uNSp1Kk0vUyksVX07dmFyIHU9dCgiLi9saWIvc2hhZGVycyIpLGY9dCgiZ2wtY29uZTNkIikuY3JlYXRlTWVzaDtlLmV4cG9ydHMuY3JlYXRlVHViZU1lc2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZih0LGUse3NoYWRlcnM6dSx0cmFjZVR5cGU6InN0cmVhbXR1YmUifSl9fSx7Ii4vbGliL3NoYWRlcnMiOjMzMywiZ2wtY29uZTNkIjoyNTgsImdsLXZlYzMiOjM2MiwiZ2wtdmVjNCI6Mzk4fV0sMzM1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2wtc2hhZGVyIiksaT10KCJnbHNsaWZ5IiksYT1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgdmVjMyBmO1xuYXR0cmlidXRlIHZlYzMgbm9ybWFsO1xuXG51bmlmb3JtIHZlYzMgb2JqZWN0T2Zmc2V0O1xudW5pZm9ybSBtYXQ0IG1vZGVsLCB2aWV3LCBwcm9qZWN0aW9uLCBpbnZlcnNlTW9kZWw7XG51bmlmb3JtIHZlYzMgbGlnaHRQb3NpdGlvbiwgZXllUG9zaXRpb247XG51bmlmb3JtIHNhbXBsZXIyRCBjb2xvcm1hcDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIHZlYzMgbG9jYWxDb29yZGluYXRlID0gdmVjMyh1di56dywgZi54KTtcbiAgd29ybGRDb29yZGluYXRlID0gb2JqZWN0T2Zmc2V0ICsgbG9jYWxDb29yZGluYXRlO1xuICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbCAqIHZlYzQod29ybGRDb29yZGluYXRlLCAxLjApO1xuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgZ2xfUG9zaXRpb24gPSBjbGlwUG9zaXRpb247XG4gIGtpbGwgPSBmLnk7XG4gIHZhbHVlID0gZi56O1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di54eTtcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9MaWdodGluZyBnZW9tZXRyeSBwYXJhbWV0ZXJzXG4gIHZlYzQgY2FtZXJhQ29vcmRpbmF0ZSA9IHZpZXcgKiB3b3JsZFBvc2l0aW9uO1xuICBjYW1lcmFDb29yZGluYXRlLnh5eiAvPSBjYW1lcmFDb29yZGluYXRlLnc7XG4gIGxpZ2h0RGlyZWN0aW9uID0gbGlnaHRQb3NpdGlvbiAtIGNhbWVyYUNvb3JkaW5hdGUueHl6O1xuICBleWVEaXJlY3Rpb24gICA9IGV5ZVBvc2l0aW9uIC0gY2FtZXJhQ29vcmRpbmF0ZS54eXo7XG4gIHN1cmZhY2VOb3JtYWwgID0gbm9ybWFsaXplKCh2ZWM0KG5vcm1hbCwwKSAqIGludmVyc2VNb2RlbCkueHl6KTtcbn1cbiJdKSxvPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5mbG9hdCBiZWNrbWFubkRpc3RyaWJ1dGlvbihmbG9hdCB4LCBmbG9hdCByb3VnaG5lc3MpIHtcbiAgZmxvYXQgTmRvdEggPSBtYXgoeCwgMC4wMDAxKTtcbiAgZmxvYXQgY29zMkFscGhhID0gTmRvdEggKiBOZG90SDtcbiAgZmxvYXQgdGFuMkFscGhhID0gKGNvczJBbHBoYSAtIDEuMCkgLyBjb3MyQWxwaGE7XG4gIGZsb2F0IHJvdWdobmVzczIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XG4gIGZsb2F0IGRlbm9tID0gMy4xNDE1OTI2NTM1ODk3OTMgKiByb3VnaG5lc3MyICogY29zMkFscGhhICogY29zMkFscGhhO1xuICByZXR1cm4gZXhwKHRhbjJBbHBoYSAvIHJvdWdobmVzczIpIC8gZGVub207XG59XG5cbmZsb2F0IGJlY2ttYW5uU3BlY3VsYXIoXG4gIHZlYzMgbGlnaHREaXJlY3Rpb24sXG4gIHZlYzMgdmlld0RpcmVjdGlvbixcbiAgdmVjMyBzdXJmYWNlTm9ybWFsLFxuICBmbG9hdCByb3VnaG5lc3MpIHtcbiAgcmV0dXJuIGJlY2ttYW5uRGlzdHJpYnV0aW9uKGRvdChzdXJmYWNlTm9ybWFsLCBub3JtYWxpemUobGlnaHREaXJlY3Rpb24gKyB2aWV3RGlyZWN0aW9uKSksIHJvdWdobmVzcyk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZShmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBwKSB7XG4gIHJldHVybiAoKHAgPiBtYXgoYSwgYikpIHx8IFxuICAgICAgICAgIChwIDwgbWluKGEsIGIpKSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWMyIGEsIHZlYzIgYiwgdmVjMiBwKSB7XG4gIHJldHVybiAob3V0T2ZSYW5nZShhLngsIGIueCwgcC54KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS55LCBiLnksIHAueSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMyBhLCB2ZWMzIGIsIHZlYzMgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnosIGIueiwgcC56KSk7XG59XG5cbmJvb2wgb3V0T2ZSYW5nZSh2ZWM0IGEsIHZlYzQgYiwgdmVjNCBwKSB7XG4gIHJldHVybiBvdXRPZlJhbmdlKGEueHl6LCBiLnh5eiwgcC54eXopO1xufVxuXG51bmlmb3JtIHZlYzMgbG93ZXJCb3VuZCwgdXBwZXJCb3VuZDtcbnVuaWZvcm0gZmxvYXQgY29udG91clRpbnQ7XG51bmlmb3JtIHZlYzQgY29udG91ckNvbG9yO1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG51bmlmb3JtIHZlYzMgY2xpcEJvdW5kc1syXTtcbnVuaWZvcm0gZmxvYXQgcm91Z2huZXNzLCBmcmVzbmVsLCBrYW1iaWVudCwga2RpZmZ1c2UsIGtzcGVjdWxhciwgb3BhY2l0eTtcbnVuaWZvcm0gZmxvYXQgdmVydGV4Q29sb3I7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIGxpZ2h0RGlyZWN0aW9uLCBleWVEaXJlY3Rpb24sIHN1cmZhY2VOb3JtYWw7XG52YXJ5aW5nIHZlYzQgdkNvbG9yO1xuXG52b2lkIG1haW4oKSB7XG4gIGlmIChcbiAgICBraWxsID4gMC4wIHx8XG4gICAgdkNvbG9yLmEgPT0gMC4wIHx8XG4gICAgb3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpXG4gICkgZGlzY2FyZDtcblxuICB2ZWMzIE4gPSBub3JtYWxpemUoc3VyZmFjZU5vcm1hbCk7XG4gIHZlYzMgViA9IG5vcm1hbGl6ZShleWVEaXJlY3Rpb24pO1xuICB2ZWMzIEwgPSBub3JtYWxpemUobGlnaHREaXJlY3Rpb24pO1xuXG4gIGlmKGdsX0Zyb250RmFjaW5nKSB7XG4gICAgTiA9IC1OO1xuICB9XG5cbiAgZmxvYXQgc3BlY3VsYXIgPSBtYXgoYmVja21hbm5TcGVjdWxhcihMLCBWLCBOLCByb3VnaG5lc3MpLCAwLik7XG4gIGZsb2F0IGRpZmZ1c2UgID0gbWluKGthbWJpZW50ICsga2RpZmZ1c2UgKiBtYXgoZG90KE4sIEwpLCAwLjApLCAxLjApO1xuXG4gIC8vZGVjaWRlIGhvdyB0byBpbnRlcnBvbGF0ZSBjb2xvciBcdTIwMTQgaW4gdmVydGV4IG9yIGluIGZyYWdtZW50XG4gIHZlYzQgc3VyZmFjZUNvbG9yID1cbiAgICBzdGVwKHZlcnRleENvbG9yLCAuNSkgKiB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSkgK1xuICAgIHN0ZXAoLjUsIHZlcnRleENvbG9yKSAqIHZDb2xvcjtcblxuICB2ZWM0IGxpdENvbG9yID0gc3VyZmFjZUNvbG9yLmEgKiB2ZWM0KGRpZmZ1c2UgKiBzdXJmYWNlQ29sb3IucmdiICsga3NwZWN1bGFyICogdmVjMygxLDEsMSkgKiBzcGVjdWxhciwgIDEuMCk7XG5cbiAgZ2xfRnJhZ0NvbG9yID0gbWl4KGxpdENvbG9yLCBjb250b3VyQ29sb3IsIGNvbnRvdXJUaW50KSAqIG9wYWNpdHk7XG59XG4iXSkscz1pKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzQgdXY7XG5hdHRyaWJ1dGUgZmxvYXQgZjtcblxudW5pZm9ybSB2ZWMzIG9iamVjdE9mZnNldDtcbnVuaWZvcm0gbWF0MyBwZXJtdXRhdGlvbjtcbnVuaWZvcm0gbWF0NCBtb2RlbCwgdmlldywgcHJvamVjdGlvbjtcbnVuaWZvcm0gZmxvYXQgaGVpZ2h0LCB6T2Zmc2V0O1xudW5pZm9ybSBzYW1wbGVyMkQgY29sb3JtYXA7XG5cbnZhcnlpbmcgZmxvYXQgdmFsdWUsIGtpbGw7XG52YXJ5aW5nIHZlYzMgd29ybGRDb29yZGluYXRlO1xudmFyeWluZyB2ZWMyIHBsYW5lQ29vcmRpbmF0ZTtcbnZhcnlpbmcgdmVjMyBsaWdodERpcmVjdGlvbiwgZXllRGlyZWN0aW9uLCBzdXJmYWNlTm9ybWFsO1xudmFyeWluZyB2ZWM0IHZDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICB2ZWMzIGRhdGFDb29yZGluYXRlID0gcGVybXV0YXRpb24gKiB2ZWMzKHV2Lnh5LCBoZWlnaHQpO1xuICB3b3JsZENvb3JkaW5hdGUgPSBvYmplY3RPZmZzZXQgKyBkYXRhQ29vcmRpbmF0ZTtcbiAgdmVjNCB3b3JsZFBvc2l0aW9uID0gbW9kZWwgKiB2ZWM0KHdvcmxkQ29vcmRpbmF0ZSwgMS4wKTtcblxuICB2ZWM0IGNsaXBQb3NpdGlvbiA9IHByb2plY3Rpb24gKiB2aWV3ICogd29ybGRQb3NpdGlvbjtcbiAgY2xpcFBvc2l0aW9uLnogKz0gek9mZnNldDtcblxuICBnbF9Qb3NpdGlvbiA9IGNsaXBQb3NpdGlvbjtcbiAgdmFsdWUgPSBmICsgb2JqZWN0T2Zmc2V0Lno7XG4gIGtpbGwgPSAtMS4wO1xuICBwbGFuZUNvb3JkaW5hdGUgPSB1di56dztcblxuICB2Q29sb3IgPSB0ZXh0dXJlMkQoY29sb3JtYXAsIHZlYzIodmFsdWUsIHZhbHVlKSk7XG5cbiAgLy9Eb24ndCBkbyBsaWdodGluZyBmb3IgY29udG91cnNcbiAgc3VyZmFjZU5vcm1hbCAgID0gdmVjMygxLDAsMCk7XG4gIGV5ZURpcmVjdGlvbiAgICA9IHZlYzMoMCwxLDApO1xuICBsaWdodERpcmVjdGlvbiAgPSB2ZWMzKDAsMCwxKTtcbn1cbiJdKSxsPWkoWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5ib29sIG91dE9mUmFuZ2UoZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgcCkge1xuICByZXR1cm4gKChwID4gbWF4KGEsIGIpKSB8fCBcbiAgICAgICAgICAocCA8IG1pbihhLCBiKSkpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjMiBhLCB2ZWMyIGIsIHZlYzIgcCkge1xuICByZXR1cm4gKG91dE9mUmFuZ2UoYS54LCBiLngsIHAueCkgfHxcbiAgICAgICAgICBvdXRPZlJhbmdlKGEueSwgYi55LCBwLnkpKTtcbn1cblxuYm9vbCBvdXRPZlJhbmdlKHZlYzMgYSwgdmVjMyBiLCB2ZWMzIHApIHtcbiAgcmV0dXJuIChvdXRPZlJhbmdlKGEueCwgYi54LCBwLngpIHx8XG4gICAgICAgICAgb3V0T2ZSYW5nZShhLnksIGIueSwgcC55KSB8fFxuICAgICAgICAgIG91dE9mUmFuZ2UoYS56LCBiLnosIHAueikpO1xufVxuXG5ib29sIG91dE9mUmFuZ2UodmVjNCBhLCB2ZWM0IGIsIHZlYzQgcCkge1xuICByZXR1cm4gb3V0T2ZSYW5nZShhLnh5eiwgYi54eXosIHAueHl6KTtcbn1cblxudW5pZm9ybSB2ZWMyIHNoYXBlO1xudW5pZm9ybSB2ZWMzIGNsaXBCb3VuZHNbMl07XG51bmlmb3JtIGZsb2F0IHBpY2tJZDtcblxudmFyeWluZyBmbG9hdCB2YWx1ZSwga2lsbDtcbnZhcnlpbmcgdmVjMyB3b3JsZENvb3JkaW5hdGU7XG52YXJ5aW5nIHZlYzIgcGxhbmVDb29yZGluYXRlO1xudmFyeWluZyB2ZWMzIHN1cmZhY2VOb3JtYWw7XG5cbnZlYzIgc3BsaXRGbG9hdChmbG9hdCB2KSB7XG4gIGZsb2F0IHZoID0gMjU1LjAgKiB2O1xuICBmbG9hdCB1cHBlciA9IGZsb29yKHZoKTtcbiAgZmxvYXQgbG93ZXIgPSBmcmFjdCh2aCk7XG4gIHJldHVybiB2ZWMyKHVwcGVyIC8gMjU1LjAsIGZsb29yKGxvd2VyICogMTYuMCkgLyAxNi4wKTtcbn1cblxudm9pZCBtYWluKCkge1xuICBpZiAoKGtpbGwgPiAwLjApIHx8XG4gICAgICAob3V0T2ZSYW5nZShjbGlwQm91bmRzWzBdLCBjbGlwQm91bmRzWzFdLCB3b3JsZENvb3JkaW5hdGUpKSkgZGlzY2FyZDtcblxuICB2ZWMyIHV4ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueCAvIHNoYXBlLngpO1xuICB2ZWMyIHV5ID0gc3BsaXRGbG9hdChwbGFuZUNvb3JkaW5hdGUueSAvIHNoYXBlLnkpO1xuICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHBpY2tJZCwgdXgueCwgdXkueCwgdXgueSArICh1eS55LzE2LjApKTtcbn1cbiJdKTtyLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlUGlja1NoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQsYSxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJ2ZWMzIn0se25hbWU6Im5vcm1hbCIsdHlwZToidmVjMyJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZS5hdHRyaWJ1dGVzLm5vcm1hbC5sb2NhdGlvbj0yLGV9LHIuY3JlYXRlQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxvLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX0sci5jcmVhdGVQaWNrQ29udG91clNoYWRlcj1mdW5jdGlvbih0KXt2YXIgZT1uKHQscyxsLG51bGwsW3tuYW1lOiJ1diIsdHlwZToidmVjNCJ9LHtuYW1lOiJmIix0eXBlOiJmbG9hdCJ9XSk7cmV0dXJuIGUuYXR0cmlidXRlcy51di5sb2NhdGlvbj0wLGUuYXR0cmlidXRlcy5mLmxvY2F0aW9uPTEsZX19LHsiZ2wtc2hhZGVyIjozMjMsZ2xzbGlmeTo0MjR9XSwzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2wscj15KGUpLG49YihlKSxzPXgoZSksbD1fKGUpLGM9aShlKSx1PWEoZSxbe2J1ZmZlcjpjLHNpemU6NCxzdHJpZGU6NDAsb2Zmc2V0OjB9LHtidWZmZXI6YyxzaXplOjMsc3RyaWRlOjQwLG9mZnNldDoxNn0se2J1ZmZlcjpjLHNpemU6MyxzdHJpZGU6NDAsb2Zmc2V0OjI4fV0pLGY9aShlKSxoPWEoZSxbe2J1ZmZlcjpmLHNpemU6NCxzdHJpZGU6MjAsb2Zmc2V0OjB9LHtidWZmZXI6ZixzaXplOjEsc3RyaWRlOjIwLG9mZnNldDoxNn1dKSxwPWkoZSksZD1hKGUsW3tidWZmZXI6cCxzaXplOjIsdHlwZTplLkZMT0FUfV0pLG09byhlLDEsMjU2LGUuUkdCQSxlLlVOU0lHTkVEX0JZVEUpO20ubWluRmlsdGVyPWUuTElORUFSLG0ubWFnRmlsdGVyPWUuTElORUFSO3ZhciBnPW5ldyBNKGUsWzAsMF0sW1swLDAsMF0sWzAsMCwwXV0scixuLGMsdSxtLHMsbCxmLGgscCxkLFswLDAsMF0pLHY9e2xldmVsczpbW10sW10sW11dfTtmb3IodmFyIHcgaW4gdCl2W3ddPXRbd107cmV0dXJuIHYuY29sb3JtYXA9di5jb2xvcm1hcHx8ImpldCIsZy51cGRhdGUodiksZ307dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoImdsLWJ1ZmZlciIpLGE9dCgiZ2wtdmFvIiksbz10KCJnbC10ZXh0dXJlMmQiKSxzPXQoInR5cGVkYXJyYXktcG9vbCIpLGw9dCgiY29sb3JtYXAiKSxjPXQoIm5kYXJyYXktb3BzIiksdT10KCJuZGFycmF5LXBhY2siKSxmPXQoIm5kYXJyYXkiKSxoPXQoInN1cmZhY2UtbmV0cyIpLHA9dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGQ9dCgiZ2wtbWF0NC9pbnZlcnQiKSxtPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksZz10KCJuZGFycmF5LWdyYWRpZW50Iiksdj10KCIuL2xpYi9zaGFkZXJzIikseT12LmNyZWF0ZVNoYWRlcix4PXYuY3JlYXRlQ29udG91clNoYWRlcixiPXYuY3JlYXRlUGlja1NoYWRlcixfPXYuY3JlYXRlUGlja0NvbnRvdXJTaGFkZXIsdz1bMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0sVD1bWzAsMF0sWzAsMV0sWzEsMF0sWzEsMV0sWzEsMF0sWzAsMV1dLGs9W1swLDAsMCwwLDAsMCwwLDAsMF0sWzAsMCwwLDAsMCwwLDAsMCwwXSxbMCwwLDAsMCwwLDAsMCwwLDBdXTtmdW5jdGlvbiBBKHQsZSxyLG4saSl7dGhpcy5wb3NpdGlvbj10LHRoaXMuaW5kZXg9ZSx0aGlzLnV2PXIsdGhpcy5sZXZlbD1uLHRoaXMuZGF0YUNvb3JkaW5hdGU9aX0hZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7Kyt0KXt2YXIgZT1rW3RdLHI9KHQrMiklMztlWyh0KzEpJTMrMF09MSxlW3IrM109MSxlW3QrNl09MX19KCk7ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvLGwsYyx1LGgscCxkLG0sZyl7dGhpcy5nbD10LHRoaXMuc2hhcGU9ZSx0aGlzLmJvdW5kcz1yLHRoaXMub2JqZWN0T2Zmc2V0PWcsdGhpcy5pbnRlbnNpdHlCb3VuZHM9W10sdGhpcy5fc2hhZGVyPW4sdGhpcy5fcGlja1NoYWRlcj1pLHRoaXMuX2Nvb3JkaW5hdGVCdWZmZXI9YSx0aGlzLl92YW89byx0aGlzLl9jb2xvck1hcD1sLHRoaXMuX2NvbnRvdXJTaGFkZXI9Yyx0aGlzLl9jb250b3VyUGlja1NoYWRlcj11LHRoaXMuX2NvbnRvdXJCdWZmZXI9aCx0aGlzLl9jb250b3VyVkFPPXAsdGhpcy5fY29udG91ck9mZnNldHM9W1tdLFtdLFtdXSx0aGlzLl9jb250b3VyQ291bnRzPVtbXSxbXSxbXV0sdGhpcy5fdmVydGV4Q291bnQ9MCx0aGlzLl9waWNrUmVzdWx0PW5ldyBBKFswLDAsMF0sWzAsMF0sWzAsMF0sWzAsMCwwXSxbMCwwLDBdKSx0aGlzLl9keW5hbWljQnVmZmVyPWQsdGhpcy5fZHluYW1pY1ZBTz1tLHRoaXMuX2R5bmFtaWNPZmZzZXRzPVswLDAsMF0sdGhpcy5fZHluYW1pY0NvdW50cz1bMCwwLDBdLHRoaXMuY29udG91cldpZHRoPVsxLDEsMV0sdGhpcy5jb250b3VyTGV2ZWxzPVtbMV0sWzFdLFsxXV0sdGhpcy5jb250b3VyVGludD1bMCwwLDBdLHRoaXMuY29udG91ckNvbG9yPVtbLjUsLjUsLjUsMV0sWy41LC41LC41LDFdLFsuNSwuNSwuNSwxXV0sdGhpcy5zaG93Q29udG91cj0hMCx0aGlzLnNob3dTdXJmYWNlPSEwLHRoaXMuZW5hYmxlSGlnaGxpZ2h0PVshMCwhMCwhMF0sdGhpcy5oaWdobGlnaHRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuaGlnaGxpZ2h0VGludD1bMSwxLDFdLHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSx0aGlzLmVuYWJsZUR5bmFtaWM9WyEwLCEwLCEwXSx0aGlzLmR5bmFtaWNMZXZlbD1bTmFOLE5hTixOYU5dLHRoaXMuZHluYW1pY0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5keW5hbWljVGludD1bMSwxLDFdLHRoaXMuZHluYW1pY1dpZHRoPVsxLDEsMV0sdGhpcy5heGVzQm91bmRzPVtbMS8wLDEvMCwxLzBdLFstMS8wLC0xLzAsLTEvMF1dLHRoaXMuc3VyZmFjZVByb2plY3Q9WyExLCExLCExXSx0aGlzLmNvbnRvdXJQcm9qZWN0PVtbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sdGhpcy5jb2xvckJvdW5kcz1bITEsITFdLHRoaXMuX2ZpZWxkPVtmKHMubWFsbG9jRmxvYXQoMTAyNCksWzAsMF0pLGYocy5tYWxsb2NGbG9hdCgxMDI0KSxbMCwwXSksZihzLm1hbGxvY0Zsb2F0KDEwMjQpLFswLDBdKV0sdGhpcy5waWNrSWQ9MSx0aGlzLmNsaXBCb3VuZHM9W1stMS8wLC0xLzAsLTEvMF0sWzEvMCwxLzAsMS8wXV0sdGhpcy5zbmFwVG9EYXRhPSExLHRoaXMucGl4ZWxSYXRpbz0xLHRoaXMub3BhY2l0eT0xLHRoaXMubGlnaHRQb3NpdGlvbj1bMTAsMWU0LDBdLHRoaXMuYW1iaWVudExpZ2h0PS44LHRoaXMuZGlmZnVzZUxpZ2h0PS44LHRoaXMuc3BlY3VsYXJMaWdodD0yLHRoaXMucm91Z2huZXNzPS41LHRoaXMuZnJlc25lbD0xLjUsdGhpcy52ZXJ0ZXhDb2xvcj0wLHRoaXMuZGlydHk9ITB9dmFyIFM9TS5wcm90b3R5cGU7Uy5nZW5Db2xvcm1hcD1mdW5jdGlvbih0LGUpe3ZhciByPSExLG49dShbbCh7Y29sb3JtYXA6dCxuc2hhZGVzOjI1Nixmb3JtYXQ6InJnYmEifSkubWFwKChmdW5jdGlvbih0LG4pe3ZhciBpPWU/ZnVuY3Rpb24odCxlKXtpZighZSlyZXR1cm4gMTtpZighZS5sZW5ndGgpcmV0dXJuIDE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDsrK3Ipe2lmKGUubGVuZ3RoPDIpcmV0dXJuIDE7aWYoZVtyXVswXT09PXQpcmV0dXJuIGVbcl1bMV07aWYoZVtyXVswXT50JiZyPjApe3ZhciBuPShlW3JdWzBdLXQpLyhlW3JdWzBdLWVbci0xXVswXSk7cmV0dXJuIGVbcl1bMV0qKDEtbikrbiplW3ItMV1bMV19fXJldHVybiAxfShuLzI1NSxlKTp0WzNdO3JldHVybiBpPDEmJihyPSEwKSxbdFswXSx0WzFdLHRbMl0sMjU1KmldfSkpXSk7cmV0dXJuIGMuZGl2c2VxKG4sMjU1KSx0aGlzLmhhc0FscGhhU2NhbGU9cixufSxTLmlzVHJhbnNwYXJlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcGFjaXR5PDF8fHRoaXMuaGFzQWxwaGFTY2FsZX0sUy5pc09wYXF1ZT1mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzVHJhbnNwYXJlbnQoKX0sUy5waWNrU2xvdHM9MSxTLnNldFBpY2tCYXNlPWZ1bmN0aW9uKHQpe3RoaXMucGlja0lkPXR9O3ZhciBFPVswLDAsMF0sTD17c2hvd1N1cmZhY2U6ITEsc2hvd0NvbnRvdXI6ITEscHJvamVjdGlvbnM6W3cuc2xpY2UoKSx3LnNsaWNlKCksdy5zbGljZSgpXSxjbGlwQm91bmRzOltbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXSxbWzAsMCwwXSxbMCwwLDBdXV19O2Z1bmN0aW9uIEModCxlKXt2YXIgcixuLGksYT1lLmF4ZXMmJmUuYXhlcy5sYXN0Q3ViZVByb3BzLmF4aXN8fEUsbz1lLnNob3dTdXJmYWNlLHM9ZS5zaG93Q29udG91cjtmb3Iocj0wO3I8MzsrK3IpZm9yKG89b3x8ZS5zdXJmYWNlUHJvamVjdFtyXSxuPTA7bjwzOysrbilzPXN8fGUuY29udG91clByb2plY3Rbcl1bbl07Zm9yKHI9MDtyPDM7KytyKXt2YXIgbD1MLnByb2plY3Rpb25zW3JdO2ZvcihuPTA7bjwxNjsrK24pbFtuXT0wO2ZvcihuPTA7bjw0OysrbilsWzUqbl09MTtsWzUqcl09MCxsWzEyK3JdPWUuYXhlc0JvdW5kc1srKGFbcl0+MCldW3JdLHAobCx0Lm1vZGVsLGwpO3ZhciBjPUwuY2xpcEJvdW5kc1tyXTtmb3IoaT0wO2k8MjsrK2kpZm9yKG49MDtuPDM7KytuKWNbaV1bbl09dC5jbGlwQm91bmRzW2ldW25dO2NbMF1bcl09LTFlOCxjWzFdW3JdPTFlOH1yZXR1cm4gTC5zaG93U3VyZmFjZT1vLEwuc2hvd0NvbnRvdXI9cyxMfXZhciBQPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncuc2xpY2UoKSxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLGNvbG9yTWFwOjAsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxjb250b3VyVGludDowLGNvbnRvdXJDb2xvcjpbMCwwLDAsMV0scGVybXV0YXRpb246WzEsMCwwLDAsMSwwLDAsMCwxXSx6T2Zmc2V0Oi0xZS00LG9iamVjdE9mZnNldDpbMCwwLDBdLGthbWJpZW50OjEsa2RpZmZ1c2U6MSxrc3BlY3VsYXI6MSxsaWdodFBvc2l0aW9uOlsxZTMsMWUzLDFlM10sZXllUG9zaXRpb246WzAsMCwwXSxyb3VnaG5lc3M6MSxmcmVzbmVsOjEsb3BhY2l0eToxLHZlcnRleENvbG9yOjB9LEk9dy5zbGljZSgpLE89WzEsMCwwLDAsMSwwLDAsMCwxXTtmdW5jdGlvbiB6KHQsZSl7dD10fHx7fTt2YXIgcj10aGlzLmdsO3IuZGlzYWJsZShyLkNVTExfRkFDRSksdGhpcy5fY29sb3JNYXAuYmluZCgwKTt2YXIgbj1QO24ubW9kZWw9dC5tb2RlbHx8dyxuLnZpZXc9dC52aWV3fHx3LG4ucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsbi5sb3dlckJvdW5kPVt0aGlzLmJvdW5kc1swXVswXSx0aGlzLmJvdW5kc1swXVsxXSx0aGlzLmNvbG9yQm91bmRzWzBdfHx0aGlzLmJvdW5kc1swXVsyXV0sbi51cHBlckJvdW5kPVt0aGlzLmJvdW5kc1sxXVswXSx0aGlzLmJvdW5kc1sxXVsxXSx0aGlzLmNvbG9yQm91bmRzWzFdfHx0aGlzLmJvdW5kc1sxXVsyXV0sbi5vYmplY3RPZmZzZXQ9dGhpcy5vYmplY3RPZmZzZXQsbi5jb250b3VyQ29sb3I9dGhpcy5jb250b3VyQ29sb3JbMF0sbi5pbnZlcnNlTW9kZWw9ZChuLmludmVyc2VNb2RlbCxuLm1vZGVsKTtmb3IodmFyIGk9MDtpPDI7KytpKWZvcih2YXIgYT1uLmNsaXBCb3VuZHNbaV0sbz0wO288MzsrK28pYVtvXT1NYXRoLm1pbihNYXRoLm1heCh0aGlzLmNsaXBCb3VuZHNbaV1bb10sLTFlOCksMWU4KTtuLmthbWJpZW50PXRoaXMuYW1iaWVudExpZ2h0LG4ua2RpZmZ1c2U9dGhpcy5kaWZmdXNlTGlnaHQsbi5rc3BlY3VsYXI9dGhpcy5zcGVjdWxhckxpZ2h0LG4ucm91Z2huZXNzPXRoaXMucm91Z2huZXNzLG4uZnJlc25lbD10aGlzLmZyZXNuZWwsbi5vcGFjaXR5PXRoaXMub3BhY2l0eSxuLmhlaWdodD0wLG4ucGVybXV0YXRpb249TyxuLnZlcnRleENvbG9yPXRoaXMudmVydGV4Q29sb3I7dmFyIHM9STtmb3IocChzLG4udmlldyxuLm1vZGVsKSxwKHMsbi5wcm9qZWN0aW9uLHMpLGQocyxzKSxpPTA7aTwzOysraSluLmV5ZVBvc2l0aW9uW2ldPXNbMTIraV0vc1sxNV07dmFyIGw9c1sxNV07Zm9yKGk9MDtpPDM7KytpKWwrPXRoaXMubGlnaHRQb3NpdGlvbltpXSpzWzQqaSszXTtmb3IoaT0wO2k8MzsrK2kpe3ZhciBjPXNbMTIraV07Zm9yKG89MDtvPDM7KytvKWMrPXNbNCpvK2ldKnRoaXMubGlnaHRQb3NpdGlvbltvXTtuLmxpZ2h0UG9zaXRpb25baV09Yy9sfXZhciB1PUMobix0aGlzKTtpZih1LnNob3dTdXJmYWNlKXtmb3IodGhpcy5fc2hhZGVyLmJpbmQoKSx0aGlzLl9zaGFkZXIudW5pZm9ybXM9bix0aGlzLl92YW8uYmluZCgpLHRoaXMuc2hvd1N1cmZhY2UmJnRoaXMuX3ZlcnRleENvdW50JiZ0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksaT0wO2k8MzsrK2kpdGhpcy5zdXJmYWNlUHJvamVjdFtpXSYmdGhpcy52ZXJ0ZXhDb3VudCYmKHRoaXMuX3NoYWRlci51bmlmb3Jtcy5tb2RlbD11LnByb2plY3Rpb25zW2ldLHRoaXMuX3NoYWRlci51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSx0aGlzLl92YW8uZHJhdyhyLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCkpO3RoaXMuX3Zhby51bmJpbmQoKX1pZih1LnNob3dDb250b3VyKXt2YXIgZj10aGlzLl9jb250b3VyU2hhZGVyO24ua2FtYmllbnQ9MSxuLmtkaWZmdXNlPTAsbi5rc3BlY3VsYXI9MCxuLm9wYWNpdHk9MSxmLmJpbmQoKSxmLnVuaWZvcm1zPW47dmFyIGg9dGhpcy5fY29udG91clZBTztmb3IoaC5iaW5kKCksaT0wO2k8MzsrK2kpZm9yKGYudW5pZm9ybXMucGVybXV0YXRpb249a1tpXSxyLmxpbmVXaWR0aCh0aGlzLmNvbnRvdXJXaWR0aFtpXSp0aGlzLnBpeGVsUmF0aW8pLG89MDtvPHRoaXMuY29udG91ckxldmVsc1tpXS5sZW5ndGg7KytvKW89PT10aGlzLmhpZ2hsaWdodExldmVsW2ldPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W2ldKTowIT09byYmby0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtpXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW2ldLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtpXSksdGhpcy5fY29udG91ckNvdW50c1tpXVtvXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tpXVtvXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2ldW29dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2ldW29dKSk7Zm9yKGk9MDtpPDM7KytpKWZvcihmLnVuaWZvcm1zLm1vZGVsPXUucHJvamVjdGlvbnNbaV0sZi51bmlmb3Jtcy5jbGlwQm91bmRzPXUuY2xpcEJvdW5kc1tpXSxvPTA7bzwzOysrbylpZih0aGlzLmNvbnRvdXJQcm9qZWN0W2ldW29dKXtmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbb10sci5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbb10qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIG09MDttPHRoaXMuY29udG91ckxldmVsc1tvXS5sZW5ndGg7KyttKW09PT10aGlzLmhpZ2hsaWdodExldmVsW29dPyhmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmhpZ2hsaWdodENvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5oaWdobGlnaHRUaW50W29dKTowIT09bSYmbS0xIT09dGhpcy5oaWdobGlnaHRMZXZlbFtvXXx8KGYudW5pZm9ybXMuY29udG91ckNvbG9yPXRoaXMuY29udG91ckNvbG9yW29dLGYudW5pZm9ybXMuY29udG91clRpbnQ9dGhpcy5jb250b3VyVGludFtvXSksdGhpcy5fY29udG91ckNvdW50c1tvXVttXSYmKGYudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1tvXVttXSxoLmRyYXcoci5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW29dW21dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW29dW21dKSl9Zm9yKGgudW5iaW5kKCksKGg9dGhpcy5fZHluYW1pY1ZBTykuYmluZCgpLGk9MDtpPDM7KytpKWlmKDAhPT10aGlzLl9keW5hbWljQ291bnRzW2ldKWZvcihmLnVuaWZvcm1zLm1vZGVsPW4ubW9kZWwsZi51bmlmb3Jtcy5jbGlwQm91bmRzPW4uY2xpcEJvdW5kcyxmLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbaV0sci5saW5lV2lkdGgodGhpcy5keW5hbWljV2lkdGhbaV0qdGhpcy5waXhlbFJhdGlvKSxmLnVuaWZvcm1zLmNvbnRvdXJDb2xvcj10aGlzLmR5bmFtaWNDb2xvcltpXSxmLnVuaWZvcm1zLmNvbnRvdXJUaW50PXRoaXMuZHluYW1pY1RpbnRbaV0sZi51bmlmb3Jtcy5oZWlnaHQ9dGhpcy5keW5hbWljTGV2ZWxbaV0saC5kcmF3KHIuTElORVMsdGhpcy5fZHluYW1pY0NvdW50c1tpXSx0aGlzLl9keW5hbWljT2Zmc2V0c1tpXSksbz0wO288MzsrK28pdGhpcy5jb250b3VyUHJvamVjdFtvXVtpXSYmKGYudW5pZm9ybXMubW9kZWw9dS5wcm9qZWN0aW9uc1tvXSxmLnVuaWZvcm1zLmNsaXBCb3VuZHM9dS5jbGlwQm91bmRzW29dLGguZHJhdyhyLkxJTkVTLHRoaXMuX2R5bmFtaWNDb3VudHNbaV0sdGhpcy5fZHluYW1pY09mZnNldHNbaV0pKTtoLnVuYmluZCgpfX1TLmRyYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHouY2FsbCh0aGlzLHQsITEpfSxTLmRyYXdUcmFuc3BhcmVudD1mdW5jdGlvbih0KXtyZXR1cm4gei5jYWxsKHRoaXMsdCwhMCl9O3ZhciBEPXttb2RlbDp3LHZpZXc6dyxwcm9qZWN0aW9uOncsaW52ZXJzZU1vZGVsOncsY2xpcEJvdW5kczpbWzAsMCwwXSxbMCwwLDBdXSxoZWlnaHQ6MCxzaGFwZTpbMCwwXSxwaWNrSWQ6MCxsb3dlckJvdW5kOlswLDAsMF0sdXBwZXJCb3VuZDpbMCwwLDBdLHpPZmZzZXQ6MCxvYmplY3RPZmZzZXQ6WzAsMCwwXSxwZXJtdXRhdGlvbjpbMSwwLDAsMCwxLDAsMCwwLDFdLGxpZ2h0UG9zaXRpb246WzAsMCwwXSxleWVQb3NpdGlvbjpbMCwwLDBdfTtmdW5jdGlvbiBSKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/W2UodFswXSksZSh0WzFdKSxlKHRbMl0pXTpbZSh0KSxlKHQpLGUodCldfWZ1bmN0aW9uIEYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/Mz09PXQubGVuZ3RoP1t0WzBdLHRbMV0sdFsyXSwxXTpbdFswXSx0WzFdLHRbMl0sdFszXV06WzAsMCwwLDFdfWZ1bmN0aW9uIEIodCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm5bRih0WzBdKSxGKHRbMV0pLEYodFsyXSldO3ZhciBlPUYodCk7cmV0dXJuW2Uuc2xpY2UoKSxlLnNsaWNlKCksZS5zbGljZSgpXX19Uy5kcmF3UGljaz1mdW5jdGlvbih0KXt0PXR8fHt9O3ZhciBlPXRoaXMuZ2w7ZS5kaXNhYmxlKGUuQ1VMTF9GQUNFKTt2YXIgcj1EO3IubW9kZWw9dC5tb2RlbHx8dyxyLnZpZXc9dC52aWV3fHx3LHIucHJvamVjdGlvbj10LnByb2plY3Rpb258fHcsci5zaGFwZT10aGlzLl9maWVsZFsyXS5zaGFwZSxyLnBpY2tJZD10aGlzLnBpY2tJZC8yNTUsci5sb3dlckJvdW5kPXRoaXMuYm91bmRzWzBdLHIudXBwZXJCb3VuZD10aGlzLmJvdW5kc1sxXSxyLm9iamVjdE9mZnNldD10aGlzLm9iamVjdE9mZnNldCxyLnBlcm11dGF0aW9uPU87Zm9yKHZhciBuPTA7bjwyOysrbilmb3IodmFyIGk9ci5jbGlwQm91bmRzW25dLGE9MDthPDM7KythKWlbYV09TWF0aC5taW4oTWF0aC5tYXgodGhpcy5jbGlwQm91bmRzW25dW2FdLC0xZTgpLDFlOCk7dmFyIG89QyhyLHRoaXMpO2lmKG8uc2hvd1N1cmZhY2Upe2Zvcih0aGlzLl9waWNrU2hhZGVyLmJpbmQoKSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zPXIsdGhpcy5fdmFvLmJpbmQoKSx0aGlzLl92YW8uZHJhdyhlLlRSSUFOR0xFUyx0aGlzLl92ZXJ0ZXhDb3VudCksbj0wO248MzsrK24pdGhpcy5zdXJmYWNlUHJvamVjdFtuXSYmKHRoaXMuX3BpY2tTaGFkZXIudW5pZm9ybXMubW9kZWw9by5wcm9qZWN0aW9uc1tuXSx0aGlzLl9waWNrU2hhZGVyLnVuaWZvcm1zLmNsaXBCb3VuZHM9by5jbGlwQm91bmRzW25dLHRoaXMuX3Zhby5kcmF3KGUuVFJJQU5HTEVTLHRoaXMuX3ZlcnRleENvdW50KSk7dGhpcy5fdmFvLnVuYmluZCgpfWlmKG8uc2hvd0NvbnRvdXIpe3ZhciBzPXRoaXMuX2NvbnRvdXJQaWNrU2hhZGVyO3MuYmluZCgpLHMudW5pZm9ybXM9cjt2YXIgbD10aGlzLl9jb250b3VyVkFPO2ZvcihsLmJpbmQoKSxhPTA7YTwzOysrYSlmb3IoZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKSxzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sbj0wO248dGhpcy5jb250b3VyTGV2ZWxzW2FdLmxlbmd0aDsrK24pdGhpcy5fY29udG91ckNvdW50c1thXVtuXSYmKHMudW5pZm9ybXMuaGVpZ2h0PXRoaXMuY29udG91ckxldmVsc1thXVtuXSxsLmRyYXcoZS5MSU5FUyx0aGlzLl9jb250b3VyQ291bnRzW2FdW25dLHRoaXMuX2NvbnRvdXJPZmZzZXRzW2FdW25dKSk7Zm9yKG49MDtuPDM7KytuKWZvcihzLnVuaWZvcm1zLm1vZGVsPW8ucHJvamVjdGlvbnNbbl0scy51bmlmb3Jtcy5jbGlwQm91bmRzPW8uY2xpcEJvdW5kc1tuXSxhPTA7YTwzOysrYSlpZih0aGlzLmNvbnRvdXJQcm9qZWN0W25dW2FdKXtzLnVuaWZvcm1zLnBlcm11dGF0aW9uPWtbYV0sZS5saW5lV2lkdGgodGhpcy5jb250b3VyV2lkdGhbYV0qdGhpcy5waXhlbFJhdGlvKTtmb3IodmFyIGM9MDtjPHRoaXMuY29udG91ckxldmVsc1thXS5sZW5ndGg7KytjKXRoaXMuX2NvbnRvdXJDb3VudHNbYV1bY10mJihzLnVuaWZvcm1zLmhlaWdodD10aGlzLmNvbnRvdXJMZXZlbHNbYV1bY10sbC5kcmF3KGUuTElORVMsdGhpcy5fY29udG91ckNvdW50c1thXVtjXSx0aGlzLl9jb250b3VyT2Zmc2V0c1thXVtjXSkpfWwudW5iaW5kKCl9fSxTLnBpY2s9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7aWYodC5pZCE9PXRoaXMucGlja0lkKXJldHVybiBudWxsO3ZhciBlPXRoaXMuX2ZpZWxkWzJdLnNoYXBlLHI9dGhpcy5fcGlja1Jlc3VsdCxuPWVbMF0qKHQudmFsdWVbMF0rKHQudmFsdWVbMl0+PjQpLzE2KS8yNTUsaT1NYXRoLmZsb29yKG4pLGE9bi1pLG89ZVsxXSoodC52YWx1ZVsxXSsoMTUmdC52YWx1ZVsyXSkvMTYpLzI1NSxzPU1hdGguZmxvb3IobyksbD1vLXM7aSs9MSxzKz0xO3ZhciBjPXIucG9zaXRpb247Y1swXT1jWzFdPWNbMl09MDtmb3IodmFyIHU9MDt1PDI7Kyt1KWZvcih2YXIgZj11P2E6MS1hLGg9MDtoPDI7KytoKWZvcih2YXIgcD1pK3UsZD1zK2gsZz1mKihoP2w6MS1sKSx2PTA7djwzOysrdiljW3ZdKz10aGlzLl9maWVsZFt2XS5nZXQocCxkKSpnO2Zvcih2YXIgeT10aGlzLl9waWNrUmVzdWx0LmxldmVsLHg9MDt4PDM7Kyt4KWlmKHlbeF09bS5sZSh0aGlzLmNvbnRvdXJMZXZlbHNbeF0sY1t4XSkseVt4XTwwKXRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGg+MCYmKHlbeF09MCk7ZWxzZSBpZih5W3hdPHRoaXMuY29udG91ckxldmVsc1t4XS5sZW5ndGgtMSl7dmFyIGI9dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF1dLF89dGhpcy5jb250b3VyTGV2ZWxzW3hdW3lbeF0rMV07TWF0aC5hYnMoYi1jW3hdKT5NYXRoLmFicyhfLWNbeF0pJiYoeVt4XSs9MSl9Zm9yKHIuaW5kZXhbMF09YTwuNT9pOmkrMSxyLmluZGV4WzFdPWw8LjU/czpzKzEsci51dlswXT1uL2VbMF0sci51dlsxXT1vL2VbMV0sdj0wO3Y8MzsrK3Ypci5kYXRhQ29vcmRpbmF0ZVt2XT10aGlzLl9maWVsZFt2XS5nZXQoci5pbmRleFswXSxyLmluZGV4WzFdKTtyZXR1cm4gcn0sUy5wYWRGaWVsZD1mdW5jdGlvbih0LGUpe3ZhciByPWUuc2hhcGUuc2xpY2UoKSxuPXQuc2hhcGUuc2xpY2UoKTtjLmFzc2lnbih0LmxvKDEsMSkuaGkoclswXSxyWzFdKSxlKSxjLmFzc2lnbih0LmxvKDEpLmhpKHJbMF0sMSksZS5oaShyWzBdLDEpKSxjLmFzc2lnbih0LmxvKDEsblsxXS0xKS5oaShyWzBdLDEpLGUubG8oMCxyWzFdLTEpLmhpKHJbMF0sMSkpLGMuYXNzaWduKHQubG8oMCwxKS5oaSgxLHJbMV0pLGUuaGkoMSkpLGMuYXNzaWduKHQubG8oblswXS0xLDEpLmhpKDEsclsxXSksZS5sbyhyWzBdLTEpKSx0LnNldCgwLDAsZS5nZXQoMCwwKSksdC5zZXQoMCxuWzFdLTEsZS5nZXQoMCxyWzFdLTEpKSx0LnNldChuWzBdLTEsMCxlLmdldChyWzBdLTEsMCkpLHQuc2V0KG5bMF0tMSxuWzFdLTEsZS5nZXQoclswXS0xLHJbMV0tMSkpfSxTLnVwZGF0ZT1mdW5jdGlvbih0KXt0PXR8fHt9LHRoaXMub2JqZWN0T2Zmc2V0PXQub2JqZWN0T2Zmc2V0fHx0aGlzLm9iamVjdE9mZnNldCx0aGlzLmRpcnR5PSEwLCJjb250b3VyV2lkdGgiaW4gdCYmKHRoaXMuY29udG91cldpZHRoPVIodC5jb250b3VyV2lkdGgsTnVtYmVyKSksInNob3dDb250b3VyImluIHQmJih0aGlzLnNob3dDb250b3VyPVIodC5zaG93Q29udG91cixCb29sZWFuKSksInNob3dTdXJmYWNlImluIHQmJih0aGlzLnNob3dTdXJmYWNlPSEhdC5zaG93U3VyZmFjZSksImNvbnRvdXJUaW50ImluIHQmJih0aGlzLmNvbnRvdXJUaW50PVIodC5jb250b3VyVGludCxCb29sZWFuKSksImNvbnRvdXJDb2xvciJpbiB0JiYodGhpcy5jb250b3VyQ29sb3I9Qih0LmNvbnRvdXJDb2xvcikpLCJjb250b3VyUHJvamVjdCJpbiB0JiYodGhpcy5jb250b3VyUHJvamVjdD1SKHQuY29udG91clByb2plY3QsKGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsQm9vbGVhbil9KSkpLCJzdXJmYWNlUHJvamVjdCJpbiB0JiYodGhpcy5zdXJmYWNlUHJvamVjdD10LnN1cmZhY2VQcm9qZWN0KSwiZHluYW1pY0NvbG9yImluIHQmJih0aGlzLmR5bmFtaWNDb2xvcj1CKHQuZHluYW1pY0NvbG9yKSksImR5bmFtaWNUaW50ImluIHQmJih0aGlzLmR5bmFtaWNUaW50PVIodC5keW5hbWljVGludCxOdW1iZXIpKSwiZHluYW1pY1dpZHRoImluIHQmJih0aGlzLmR5bmFtaWNXaWR0aD1SKHQuZHluYW1pY1dpZHRoLE51bWJlcikpLCJvcGFjaXR5ImluIHQmJih0aGlzLm9wYWNpdHk9dC5vcGFjaXR5KSwib3BhY2l0eXNjYWxlImluIHQmJih0aGlzLm9wYWNpdHlzY2FsZT10Lm9wYWNpdHlzY2FsZSksImNvbG9yQm91bmRzImluIHQmJih0aGlzLmNvbG9yQm91bmRzPXQuY29sb3JCb3VuZHMpLCJ2ZXJ0ZXhDb2xvciJpbiB0JiYodGhpcy52ZXJ0ZXhDb2xvcj10LnZlcnRleENvbG9yPzE6MCksImNvbG9ybWFwImluIHQmJnRoaXMuX2NvbG9yTWFwLnNldFBpeGVscyh0aGlzLmdlbkNvbG9ybWFwKHQuY29sb3JtYXAsdGhpcy5vcGFjaXR5c2NhbGUpKTt2YXIgZT10LmZpZWxkfHx0LmNvb3JkcyYmdC5jb29yZHNbMl18fG51bGwscj0hMTtpZihlfHwoZT10aGlzLl9maWVsZFsyXS5zaGFwZVswXXx8dGhpcy5fZmllbGRbMl0uc2hhcGVbMl0/dGhpcy5fZmllbGRbMl0ubG8oMSwxKS5oaSh0aGlzLl9maWVsZFsyXS5zaGFwZVswXS0yLHRoaXMuX2ZpZWxkWzJdLnNoYXBlWzFdLTIpOnRoaXMuX2ZpZWxkWzJdLmhpKDAsMCkpLCJmaWVsZCJpbiB0fHwiY29vcmRzImluIHQpe3ZhciBpPShlLnNoYXBlWzBdKzIpKihlLnNoYXBlWzFdKzIpO2k+dGhpcy5fZmllbGRbMl0uZGF0YS5sZW5ndGgmJihzLmZyZWVGbG9hdCh0aGlzLl9maWVsZFsyXS5kYXRhKSx0aGlzLl9maWVsZFsyXS5kYXRhPXMubWFsbG9jRmxvYXQobi5uZXh0UG93MihpKSkpLHRoaXMuX2ZpZWxkWzJdPWYodGhpcy5fZmllbGRbMl0uZGF0YSxbZS5zaGFwZVswXSsyLGUuc2hhcGVbMV0rMl0pLHRoaXMucGFkRmllbGQodGhpcy5fZmllbGRbMl0sZSksdGhpcy5zaGFwZT1lLnNoYXBlLnNsaWNlKCk7Zm9yKHZhciBhPXRoaXMuc2hhcGUsbz0wO288MjsrK28pdGhpcy5fZmllbGRbMl0uc2l6ZT50aGlzLl9maWVsZFtvXS5kYXRhLmxlbmd0aCYmKHMuZnJlZUZsb2F0KHRoaXMuX2ZpZWxkW29dLmRhdGEpLHRoaXMuX2ZpZWxkW29dLmRhdGE9cy5tYWxsb2NGbG9hdCh0aGlzLl9maWVsZFsyXS5zaXplKSksdGhpcy5fZmllbGRbb109Zih0aGlzLl9maWVsZFtvXS5kYXRhLFthWzBdKzIsYVsxXSsyXSk7aWYodC5jb29yZHMpe3ZhciBsPXQuY29vcmRzO2lmKCFBcnJheS5pc0FycmF5KGwpfHwzIT09bC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIGNvb3JkaW5hdGVzIGZvciB4L3kiKTtmb3Iobz0wO288MjsrK28pe3ZhciBjPWxbb107Zm9yKHY9MDt2PDI7Kyt2KWlmKGMuc2hhcGVbdl0hPT1hW3ZdKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogY29vcmRzIGhhdmUgaW5jb3JyZWN0IHNoYXBlIik7dGhpcy5wYWRGaWVsZCh0aGlzLl9maWVsZFtvXSxjKX19ZWxzZSBpZih0LnRpY2tzKXt2YXIgdT10LnRpY2tzO2lmKCFBcnJheS5pc0FycmF5KHUpfHwyIT09dS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC1zdXJmYWNlOiBpbnZhbGlkIHRpY2tzIik7Zm9yKG89MDtvPDI7KytvKXt2YXIgcD11W29dO2lmKChBcnJheS5pc0FycmF5KHApfHxwLmxlbmd0aCkmJihwPWYocCkpLHAuc2hhcGVbMF0hPT1hW29dKXRocm93IG5ldyBFcnJvcigiZ2wtc3VyZmFjZTogaW52YWxpZCB0aWNrIGxlbmd0aCIpO3ZhciBkPWYocC5kYXRhLGEpO2Quc3RyaWRlW29dPXAuc3RyaWRlWzBdLGQuc3RyaWRlWzFeb109MCx0aGlzLnBhZEZpZWxkKHRoaXMuX2ZpZWxkW29dLGQpfX1lbHNle2ZvcihvPTA7bzwyOysrbyl7dmFyIG09WzAsMF07bVtvXT0xLHRoaXMuX2ZpZWxkW29dPWYodGhpcy5fZmllbGRbb10uZGF0YSxbYVswXSsyLGFbMV0rMl0sbSwwKX10aGlzLl9maWVsZFswXS5zZXQoMCwwLDApO2Zvcih2YXIgdj0wO3Y8YVswXTsrK3YpdGhpcy5fZmllbGRbMF0uc2V0KHYrMSwwLHYpO2Zvcih0aGlzLl9maWVsZFswXS5zZXQoYVswXSsxLDAsYVswXS0xKSx0aGlzLl9maWVsZFsxXS5zZXQoMCwwLDApLHY9MDt2PGFbMV07Kyt2KXRoaXMuX2ZpZWxkWzFdLnNldCgwLHYrMSx2KTt0aGlzLl9maWVsZFsxXS5zZXQoMCxhWzFdKzEsYVsxXS0xKX12YXIgeT10aGlzLl9maWVsZCx4PWYocy5tYWxsb2NGbG9hdCgzKnlbMl0uc2l6ZSoyKSxbMyxhWzBdKzIsYVsxXSsyLDJdKTtmb3Iobz0wO288MzsrK28pZyh4LnBpY2sobykseVtvXSwibWlycm9yIik7dmFyIGI9ZihzLm1hbGxvY0Zsb2F0KDMqeVsyXS5zaXplKSxbYVswXSsyLGFbMV0rMiwzXSk7Zm9yKG89MDtvPGFbMF0rMjsrK28pZm9yKHY9MDt2PGFbMV0rMjsrK3Ype3ZhciBfPXguZ2V0KDAsbyx2LDApLHc9eC5nZXQoMCxvLHYsMSksaz14LmdldCgxLG8sdiwwKSxBPXguZ2V0KDEsbyx2LDEpLE09eC5nZXQoMixvLHYsMCksUz14LmdldCgyLG8sdiwxKSxFPWsqUy1BKk0sTD1NKnctUypfLEM9XypBLXcqayxQPU1hdGguc3FydChFKkUrTCpMK0MqQyk7UDwxZS04PyhQPU1hdGgubWF4KE1hdGguYWJzKEUpLE1hdGguYWJzKEwpLE1hdGguYWJzKEMpKSk8MWUtOD8oQz0xLEw9RT0wLFA9MSk6UD0xL1A6UD0xL01hdGguc3FydChQKSxiLnNldChvLHYsMCxFKlApLGIuc2V0KG8sdiwxLEwqUCksYi5zZXQobyx2LDIsQypQKX1zLmZyZWUoeC5kYXRhKTt2YXIgST1bMS8wLDEvMCwxLzBdLE89Wy0xLzAsLTEvMCwtMS8wXSx6PTEvMCxEPS0xLzAsRj0oYVswXS0xKSooYVsxXS0xKSo2LE49cy5tYWxsb2NGbG9hdChuLm5leHRQb3cyKDEwKkYpKSxqPTAsVT0wO2ZvcihvPTA7bzxhWzBdLTE7KytvKXQ6Zm9yKHY9MDt2PGFbMV0tMTsrK3Ype2Zvcih2YXIgVj0wO1Y8MjsrK1YpZm9yKHZhciBIPTA7SDwyOysrSClmb3IodmFyIHE9MDtxPDM7KytxKXt2YXIgRz10aGlzLl9maWVsZFtxXS5nZXQoMStvK1YsMSt2K0gpO2lmKGlzTmFOKEcpfHwhaXNGaW5pdGUoRykpY29udGludWUgdH1mb3IocT0wO3E8NjsrK3Epe3ZhciBZPW8rVFtxXVswXSxXPXYrVFtxXVsxXSxYPXRoaXMuX2ZpZWxkWzBdLmdldChZKzEsVysxKSxaPXRoaXMuX2ZpZWxkWzFdLmdldChZKzEsVysxKTtHPXRoaXMuX2ZpZWxkWzJdLmdldChZKzEsVysxKSxFPWIuZ2V0KFkrMSxXKzEsMCksTD1iLmdldChZKzEsVysxLDEpLEM9Yi5nZXQoWSsxLFcrMSwyKSx0LmludGVuc2l0eSYmKEo9dC5pbnRlbnNpdHkuZ2V0KFksVykpO3ZhciBKPXQuaW50ZW5zaXR5P3QuaW50ZW5zaXR5LmdldChZLFcpOkcrdGhpcy5vYmplY3RPZmZzZXRbMl07TltqKytdPVksTltqKytdPVcsTltqKytdPVgsTltqKytdPVosTltqKytdPUcsTltqKytdPTAsTltqKytdPUosTltqKytdPUUsTltqKytdPUwsTltqKytdPUMsSVswXT1NYXRoLm1pbihJWzBdLFgrdGhpcy5vYmplY3RPZmZzZXRbMF0pLElbMV09TWF0aC5taW4oSVsxXSxaK3RoaXMub2JqZWN0T2Zmc2V0WzFdKSxJWzJdPU1hdGgubWluKElbMl0sRyt0aGlzLm9iamVjdE9mZnNldFsyXSksej1NYXRoLm1pbih6LEopLE9bMF09TWF0aC5tYXgoT1swXSxYK3RoaXMub2JqZWN0T2Zmc2V0WzBdKSxPWzFdPU1hdGgubWF4KE9bMV0sWit0aGlzLm9iamVjdE9mZnNldFsxXSksT1syXT1NYXRoLm1heChPWzJdLEcrdGhpcy5vYmplY3RPZmZzZXRbMl0pLEQ9TWF0aC5tYXgoRCxKKSxVKz0xfX1mb3IodC5pbnRlbnNpdHlCb3VuZHMmJih6PSt0LmludGVuc2l0eUJvdW5kc1swXSxEPSt0LmludGVuc2l0eUJvdW5kc1sxXSksbz02O288ajtvKz0xMClOW29dPShOW29dLXopLyhELXopO3RoaXMuX3ZlcnRleENvdW50PVUsdGhpcy5fY29vcmRpbmF0ZUJ1ZmZlci51cGRhdGUoTi5zdWJhcnJheSgwLGopKSxzLmZyZWVGbG9hdChOKSxzLmZyZWUoYi5kYXRhKSx0aGlzLmJvdW5kcz1bSSxPXSx0aGlzLmludGVuc2l0eT10LmludGVuc2l0eXx8dGhpcy5fZmllbGRbMl0sdGhpcy5pbnRlbnNpdHlCb3VuZHNbMF09PT16JiZ0aGlzLmludGVuc2l0eUJvdW5kc1sxXT09PUR8fChyPSEwKSx0aGlzLmludGVuc2l0eUJvdW5kcz1beixEXX1pZigibGV2ZWxzImluIHQpe3ZhciBLPXQubGV2ZWxzO2ZvcihLPUFycmF5LmlzQXJyYXkoS1swXSk/Sy5zbGljZSgpOltbXSxbXSxLXSxvPTA7bzwzOysrbylLW29dPUtbb10uc2xpY2UoKSxLW29dLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTtmb3Iobz0wO288MzsrK28pZm9yKHY9MDt2PEtbb10ubGVuZ3RoOysrdilLW29dW3ZdLT10aGlzLm9iamVjdE9mZnNldFtvXTt0OmZvcihvPTA7bzwzOysrbyl7aWYoS1tvXS5sZW5ndGghPT10aGlzLmNvbnRvdXJMZXZlbHNbb10ubGVuZ3RoKXtyPSEwO2JyZWFrfWZvcih2PTA7djxLW29dLmxlbmd0aDsrK3YpaWYoS1tvXVt2XSE9PXRoaXMuY29udG91ckxldmVsc1tvXVt2XSl7cj0hMDticmVhayB0fX10aGlzLmNvbnRvdXJMZXZlbHM9S31pZihyKXt5PXRoaXMuX2ZpZWxkLGE9dGhpcy5zaGFwZTtmb3IodmFyIFE9W10sJD0wOyQ8MzsrKyQpe3ZhciB0dD10aGlzLmNvbnRvdXJMZXZlbHNbJF0sZXQ9W10scnQ9W10sbnQ9WzAsMCwwXTtmb3Iobz0wO288dHQubGVuZ3RoOysrbyl7dmFyIGl0PWgodGhpcy5fZmllbGRbJF0sdHRbb10pO2V0LnB1c2goUS5sZW5ndGgvNXwwKSxVPTA7dDpmb3Iodj0wO3Y8aXQuY2VsbHMubGVuZ3RoOysrdil7dmFyIGF0PWl0LmNlbGxzW3ZdO2ZvcihxPTA7cTwyOysrcSl7dmFyIG90PWl0LnBvc2l0aW9uc1thdFtxXV0sc3Q9b3RbMF0sbHQ9MHxNYXRoLmZsb29yKHN0KSxjdD1zdC1sdCx1dD1vdFsxXSxmdD0wfE1hdGguZmxvb3IodXQpLGh0PXV0LWZ0LHB0PSExO2U6Zm9yKHZhciBkdD0wO2R0PDM7KytkdCl7bnRbZHRdPTA7dmFyIG10PSgkK2R0KzEpJTM7Zm9yKFY9MDtWPDI7KytWKXt2YXIgZ3Q9Vj9jdDoxLWN0O2ZvcihZPTB8TWF0aC5taW4oTWF0aC5tYXgobHQrViwwKSxhWzBdKSxIPTA7SDwyOysrSCl7dmFyIHZ0PUg/aHQ6MS1odDtpZihXPTB8TWF0aC5taW4oTWF0aC5tYXgoZnQrSCwwKSxhWzFdKSxHPWR0PDI/dGhpcy5fZmllbGRbbXRdLmdldChZLFcpOih0aGlzLmludGVuc2l0eS5nZXQoWSxXKS10aGlzLmludGVuc2l0eUJvdW5kc1swXSkvKHRoaXMuaW50ZW5zaXR5Qm91bmRzWzFdLXRoaXMuaW50ZW5zaXR5Qm91bmRzWzBdKSwhaXNGaW5pdGUoRyl8fGlzTmFOKEcpKXtwdD0hMDticmVhayBlfXZhciB5dD1ndCp2dDtudFtkdF0rPXl0Kkd9fX1pZihwdCl7aWYocT4wKXtmb3IodmFyIHh0PTA7eHQ8NTsrK3h0KVEucG9wKCk7VS09MX1jb250aW51ZSB0fVEucHVzaChudFswXSxudFsxXSxvdFswXSxvdFsxXSxudFsyXSksVSs9MX19cnQucHVzaChVKX10aGlzLl9jb250b3VyT2Zmc2V0c1skXT1ldCx0aGlzLl9jb250b3VyQ291bnRzWyRdPXJ0fXZhciBidD1zLm1hbGxvY0Zsb2F0KFEubGVuZ3RoKTtmb3Iobz0wO288US5sZW5ndGg7KytvKWJ0W29dPVFbb107dGhpcy5fY29udG91ckJ1ZmZlci51cGRhdGUoYnQpLHMuZnJlZUZsb2F0KGJ0KX19LFMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuX3NoYWRlci5kaXNwb3NlKCksdGhpcy5fdmFvLmRpc3Bvc2UoKSx0aGlzLl9jb29yZGluYXRlQnVmZmVyLmRpc3Bvc2UoKSx0aGlzLl9jb2xvck1hcC5kaXNwb3NlKCksdGhpcy5fY29udG91ckJ1ZmZlci5kaXNwb3NlKCksdGhpcy5fY29udG91clZBTy5kaXNwb3NlKCksdGhpcy5fY29udG91clNoYWRlci5kaXNwb3NlKCksdGhpcy5fY29udG91clBpY2tTaGFkZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNCdWZmZXIuZGlzcG9zZSgpLHRoaXMuX2R5bmFtaWNWQU8uZGlzcG9zZSgpO2Zvcih2YXIgdD0wO3Q8MzsrK3Qpcy5mcmVlRmxvYXQodGhpcy5fZmllbGRbdF0uZGF0YSl9LFMuaGlnaGxpZ2h0PWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXQpcmV0dXJuIHRoaXMuX2R5bmFtaWNDb3VudHM9WzAsMCwwXSx0aGlzLmR5YW5hbWljTGV2ZWw9W05hTixOYU4sTmFOXSx2b2lkKHRoaXMuaGlnaGxpZ2h0TGV2ZWw9Wy0xLC0xLC0xXSk7Zm9yKGU9MDtlPDM7KytlKXRoaXMuZW5hYmxlSGlnaGxpZ2h0W2VdP3RoaXMuaGlnaGxpZ2h0TGV2ZWxbZV09dC5sZXZlbFtlXTp0aGlzLmhpZ2hsaWdodExldmVsW2VdPS0xO2ZvcihyPXRoaXMuc25hcFRvRGF0YT90LmRhdGFDb29yZGluYXRlOnQucG9zaXRpb24sZT0wO2U8MzsrK2UpcltlXS09dGhpcy5vYmplY3RPZmZzZXRbZV07aWYodGhpcy5lbmFibGVEeW5hbWljWzBdJiZyWzBdIT09dGhpcy5keW5hbWljTGV2ZWxbMF18fHRoaXMuZW5hYmxlRHluYW1pY1sxXSYmclsxXSE9PXRoaXMuZHluYW1pY0xldmVsWzFdfHx0aGlzLmVuYWJsZUR5bmFtaWNbMl0mJnJbMl0hPT10aGlzLmR5bmFtaWNMZXZlbFsyXSl7Zm9yKHZhciBuPTAsaT10aGlzLnNoYXBlLGE9cy5tYWxsb2NGbG9hdCgxMippWzBdKmlbMV0pLG89MDtvPDM7KytvKWlmKHRoaXMuZW5hYmxlRHluYW1pY1tvXSl7dGhpcy5keW5hbWljTGV2ZWxbb109cltvXTt2YXIgbD0obysxKSUzLGM9KG8rMiklMyx1PXRoaXMuX2ZpZWxkW29dLGY9dGhpcy5fZmllbGRbbF0scD10aGlzLl9maWVsZFtjXSxkPWgodSxyW29dKSxtPWQuY2VsbHMsZz1kLnBvc2l0aW9ucztmb3IodGhpcy5fZHluYW1pY09mZnNldHNbb109bixlPTA7ZTxtLmxlbmd0aDsrK2UpZm9yKHZhciB2PW1bZV0seT0wO3k8MjsrK3kpe3ZhciB4PWdbdlt5XV0sYj0reFswXSxfPTB8Yix3PTB8TWF0aC5taW4oXysxLGlbMF0pLFQ9Yi1fLGs9MS1ULEE9K3hbMV0sTT0wfEEsUz0wfE1hdGgubWluKE0rMSxpWzFdKSxFPUEtTSxMPTEtRSxDPWsqTCxQPWsqRSxJPVQqTCxPPVQqRSx6PUMqZi5nZXQoXyxNKStQKmYuZ2V0KF8sUykrSSpmLmdldCh3LE0pK08qZi5nZXQodyxTKSxEPUMqcC5nZXQoXyxNKStQKnAuZ2V0KF8sUykrSSpwLmdldCh3LE0pK08qcC5nZXQodyxTKTtpZihpc05hTih6KXx8aXNOYU4oRCkpe3kmJihuLT0xKTticmVha31hWzIqbiswXT16LGFbMipuKzFdPUQsbis9MX10aGlzLl9keW5hbWljQ291bnRzW29dPW4tdGhpcy5fZHluYW1pY09mZnNldHNbb119ZWxzZSB0aGlzLmR5bmFtaWNMZXZlbFtvXT1OYU4sdGhpcy5fZHluYW1pY0NvdW50c1tvXT0wO3RoaXMuX2R5bmFtaWNCdWZmZXIudXBkYXRlKGEuc3ViYXJyYXkoMCwyKm4pKSxzLmZyZWVGbG9hdChhKX19fSx7Ii4vbGliL3NoYWRlcnMiOjMzNSwiYmluYXJ5LXNlYXJjaC1ib3VuZHMiOjEwMCwiYml0LXR3aWRkbGUiOjEwMSxjb2xvcm1hcDoxMzIsImdsLWJ1ZmZlciI6MjU3LCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L211bHRpcGx5IjoyODksImdsLXRleHR1cmUyZCI6MzM4LCJnbC12YW8iOjM0MyxuZGFycmF5OjQ2MiwibmRhcnJheS1ncmFkaWVudCI6NDU1LCJuZGFycmF5LW9wcyI6NDU3LCJuZGFycmF5LXBhY2siOjQ1OCwic3VyZmFjZS1uZXRzIjo1NjUsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNzcy1mb250IiksaT10KCJwaWNrLWJ5LWFsaWFzIiksYT10KCJyZWdsIiksbz10KCJnbC11dGlsL2NvbnRleHQiKSxzPXQoImVzNi13ZWFrLW1hcCIpLGw9dCgiY29sb3Itbm9ybWFsaXplIiksYz10KCJmb250LWF0bGFzIiksdT10KCJ0eXBlZGFycmF5LXBvb2wiKSxmPXQoInBhcnNlLXJlY3QiKSxoPXQoImlzLXBsYWluLW9iaiIpLHA9dCgicGFyc2UtdW5pdCIpLGQ9dCgidG8tcHgiKSxtPXQoImRldGVjdC1rZXJuaW5nIiksZz10KCJvYmplY3QtYXNzaWduIiksdj10KCJmb250LW1lYXN1cmUiKSx5PXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSx4PXQoImJpdC10d2lkZGxlIikubmV4dFBvdzIsYj1uZXcgcyxfPSExO2lmKGRvY3VtZW50LmJvZHkpe3ZhciB3PWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO3cuc3R5bGUuZm9udD0iaXRhbGljIHNtYWxsLWNhcHMgYm9sZCBjb25kZW5zZWQgMTZweC8yIGN1cnNpdmUiLGdldENvbXB1dGVkU3R5bGUodykuZm9udFN0cmV0Y2gmJihfPSEwKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHcpfXZhciBUPWZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdCYmdC5fZ2wmJnQucHJvcCYmdC50ZXh0dXJlJiZ0LmJ1ZmZlcn0odCk/dGhpcy5nbD1vKHQpOih0PXtyZWdsOnR9LHRoaXMuZ2w9dC5yZWdsLl9nbCksdGhpcy5zaGFkZXI9Yi5nZXQodGhpcy5nbCksdGhpcy5zaGFkZXI/dGhpcy5yZWdsPXRoaXMuc2hhZGVyLnJlZ2w6dGhpcy5yZWdsPXQucmVnbHx8YSh7Z2w6dGhpcy5nbH0pLHRoaXMuY2hhckJ1ZmZlcj10aGlzLnJlZ2wuYnVmZmVyKHt0eXBlOiJ1aW50OCIsdXNhZ2U6InN0cmVhbSJ9KSx0aGlzLnNpemVCdWZmZXI9dGhpcy5yZWdsLmJ1ZmZlcih7dHlwZToiZmxvYXQiLHVzYWdlOiJzdHJlYW0ifSksdGhpcy5zaGFkZXJ8fCh0aGlzLnNoYWRlcj10aGlzLmNyZWF0ZVNoYWRlcigpLGIuc2V0KHRoaXMuZ2wsdGhpcy5zaGFkZXIpKSx0aGlzLmJhdGNoPVtdLHRoaXMuZm9udFNpemU9W10sdGhpcy5mb250PVtdLHRoaXMuZm9udEF0bGFzPVtdLHRoaXMuZHJhdz10aGlzLnNoYWRlci5kcmF3LmJpbmQodGhpcyksdGhpcy5yZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlZ2wuX3JlZnJlc2goKSx0aGlzLmRyYXcodGhpcy5iYXRjaCl9LHRoaXMuY2FudmFzPXRoaXMuZ2wuY2FudmFzLHRoaXMudXBkYXRlKGgodCk/dDp7fSl9O1QucHJvdG90eXBlLmNyZWF0ZVNoYWRlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmVnbCxlPXQoe2JsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHN0ZW5jaWw6e2VuYWJsZTohMX0sZGVwdGg6e2VuYWJsZTohMX0sY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLGF0dHJpYnV0ZXM6e2NoYXJPZmZzZXQ6e29mZnNldDo0LHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoInNpemVCdWZmZXIiKX0sd2lkdGg6e29mZnNldDowLHN0cmlkZTo4LGJ1ZmZlcjp0LnRoaXMoInNpemVCdWZmZXIiKX0sY2hhcjp0LnRoaXMoImNoYXJCdWZmZXIiKSxwb3NpdGlvbjp0LnRoaXMoInBvc2l0aW9uIil9LHVuaWZvcm1zOnthdGxhc1NpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS5hdGxhcy53aWR0aCxlLmF0bGFzLmhlaWdodF19LGF0bGFzRGltOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UuYXRsYXMuY29scyxlLmF0bGFzLnJvd3NdfSxhdGxhczpmdW5jdGlvbih0LGUpe3JldHVybiBlLmF0bGFzLnRleHR1cmV9LGNoYXJTdGVwOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuYXRsYXMuc3RlcH0sZW06ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5hdGxhcy5lbX0sY29sb3I6dC5wcm9wKCJjb2xvciIpLG9wYWNpdHk6dC5wcm9wKCJvcGFjaXR5Iiksdmlld3BvcnQ6dC50aGlzKCJ2aWV3cG9ydEFycmF5Iiksc2NhbGU6dC50aGlzKCJzY2FsZSIpLGFsaWduOnQucHJvcCgiYWxpZ24iKSxiYXNlbGluZTp0LnByb3AoImJhc2VsaW5lIiksdHJhbnNsYXRlOnQudGhpcygidHJhbnNsYXRlIikscG9zaXRpb25PZmZzZXQ6dC5wcm9wKCJwb3NpdGlvbk9mZnNldCIpfSxwcmltaXRpdmU6InBvaW50cyIsdmlld3BvcnQ6dC50aGlzKCJ2aWV3cG9ydCIpLHZlcnQ6IlxuXHRcdFx0cHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuXHRcdFx0YXR0cmlidXRlIGZsb2F0IHdpZHRoLCBjaGFyT2Zmc2V0LCBjaGFyO1xuXHRcdFx0YXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG5cdFx0XHR1bmlmb3JtIGZsb2F0IGZvbnRTaXplLCBjaGFyU3RlcCwgZW0sIGFsaWduLCBiYXNlbGluZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHVuaWZvcm0gdmVjNCBjb2xvcjtcblx0XHRcdHVuaWZvcm0gdmVjMiBhdGxhc1NpemUsIGF0bGFzRGltLCBzY2FsZSwgdHJhbnNsYXRlLCBwb3NpdGlvbk9mZnNldDtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZvaWQgbWFpbiAoKSB7XG5cdFx0XHRcdHZlYzIgb2Zmc2V0ID0gZmxvb3IoZW0gKiAodmVjMihhbGlnbiArIGNoYXJPZmZzZXQsIGJhc2VsaW5lKVxuXHRcdFx0XHRcdCsgdmVjMihwb3NpdGlvbk9mZnNldC54LCAtcG9zaXRpb25PZmZzZXQueSkpKVxuXHRcdFx0XHRcdC8gKHZpZXdwb3J0Lnp3ICogc2NhbGUueHkpO1xuXG5cdFx0XHRcdHZlYzIgcG9zaXRpb24gPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGU7XG5cdFx0XHRcdHBvc2l0aW9uICs9IG9mZnNldCAqIHNjYWxlO1xuXG5cdFx0XHRcdGNoYXJDb29yZCA9IHBvc2l0aW9uICogdmlld3BvcnQuencgKyB2aWV3cG9ydC54eTtcblxuXHRcdFx0XHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLiAtIDEuLCAwLCAxKTtcblxuXHRcdFx0XHRnbF9Qb2ludFNpemUgPSBjaGFyU3RlcDtcblxuXHRcdFx0XHRjaGFySWQueCA9IG1vZChjaGFyLCBhdGxhc0RpbS54KTtcblx0XHRcdFx0Y2hhcklkLnkgPSBmbG9vcihjaGFyIC8gYXRsYXNEaW0ueCk7XG5cblx0XHRcdFx0Y2hhcldpZHRoID0gd2lkdGggKiBlbTtcblxuXHRcdFx0XHRmb250Q29sb3IgPSBjb2xvciAvIDI1NS47XG5cdFx0XHR9IixmcmFnOiJcblx0XHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblx0XHRcdHVuaWZvcm0gZmxvYXQgZm9udFNpemUsIGNoYXJTdGVwLCBvcGFjaXR5O1xuXHRcdFx0dW5pZm9ybSB2ZWMyIGF0bGFzU2l6ZTtcblx0XHRcdHVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblx0XHRcdHVuaWZvcm0gc2FtcGxlcjJEIGF0bGFzO1xuXHRcdFx0dmFyeWluZyB2ZWM0IGZvbnRDb2xvcjtcblx0XHRcdHZhcnlpbmcgdmVjMiBjaGFyQ29vcmQsIGNoYXJJZDtcblx0XHRcdHZhcnlpbmcgZmxvYXQgY2hhcldpZHRoO1xuXG5cdFx0XHRmbG9hdCBsaWdodG5lc3ModmVjNCBjb2xvcikge1xuXHRcdFx0XHRyZXR1cm4gY29sb3IuciAqIDAuMjk5ICsgY29sb3IuZyAqIDAuNTg3ICsgY29sb3IuYiAqIDAuMTE0O1xuXHRcdFx0fVxuXG5cdFx0XHR2b2lkIG1haW4gKCkge1xuXHRcdFx0XHR2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC0gY2hhckNvb3JkICsgY2hhclN0ZXAgKiAuNTtcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJTdGVwID0gZmxvb3IoY2hhclN0ZXAgKiAuNSArIC41KTtcblxuXHRcdFx0XHQvLyBpbnZlcnQgeSBhbmQgc2hpZnQgYnkgMXB4IChGRiBleHBlY2lhbGx5IG5lZWRzIHRoYXQpXG5cdFx0XHRcdHV2LnkgPSBjaGFyU3RlcCAtIHV2Lnk7XG5cblx0XHRcdFx0Ly8gaWdub3JlIHBvaW50cyBvdXRzaWRlIG9mIGNoYXJhY3RlciBib3VuZGluZyBib3hcblx0XHRcdFx0ZmxvYXQgaGFsZkNoYXJXaWR0aCA9IGNlaWwoY2hhcldpZHRoICogLjUpO1xuXHRcdFx0XHRpZiAoZmxvb3IodXYueCkgPiBoYWxmQ2hhclN0ZXAgKyBoYWxmQ2hhcldpZHRoIHx8XG5cdFx0XHRcdFx0Zmxvb3IodXYueCkgPCBoYWxmQ2hhclN0ZXAgLSBoYWxmQ2hhcldpZHRoKSByZXR1cm47XG5cblx0XHRcdFx0dXYgKz0gY2hhcklkICogY2hhclN0ZXA7XG5cdFx0XHRcdHV2ID0gdXYgLyBhdGxhc1NpemU7XG5cblx0XHRcdFx0dmVjNCBjb2xvciA9IGZvbnRDb2xvcjtcblx0XHRcdFx0dmVjNCBtYXNrID0gdGV4dHVyZTJEKGF0bGFzLCB1dik7XG5cblx0XHRcdFx0ZmxvYXQgbWFza1kgPSBsaWdodG5lc3MobWFzayk7XG5cdFx0XHRcdC8vIGZsb2F0IGNvbG9yWSA9IGxpZ2h0bmVzcyhjb2xvcik7XG5cdFx0XHRcdGNvbG9yLmEgKj0gbWFza1k7XG5cdFx0XHRcdGNvbG9yLmEgKj0gb3BhY2l0eTtcblxuXHRcdFx0XHQvLyBjb2xvci5hICs9IC4xO1xuXG5cdFx0XHRcdC8vIGFudGlhbGlhc2luZywgc2VlIHlpcSBjb2xvciBzcGFjZSB5LWNoYW5uZWwgZm9ybXVsYVxuXHRcdFx0XHQvLyBjb2xvci5yZ2IgKz0gKDEuIC0gY29sb3IucmdiKSAqICgxLiAtIG1hc2sucmdiKTtcblxuXHRcdFx0XHRnbF9GcmFnQ29sb3IgPSBjb2xvcjtcblx0XHRcdH0ifSk7cmV0dXJue3JlZ2w6dCxkcmF3OmUsYXRsYXM6e319fSxULnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZigic3RyaW5nIj09dHlwZW9mIHQpdD17dGV4dDp0fTtlbHNlIGlmKCF0KXJldHVybjtudWxsIT0odD1pKHQse3Bvc2l0aW9uOiJwb3NpdGlvbiBwb3NpdGlvbnMgY29vcmQgY29vcmRzIGNvb3JkaW5hdGVzIixmb250OiJmb250IGZvbnRGYWNlIGZvbnRmYWNlIHR5cGVmYWNlIGNzc0ZvbnQgY3NzLWZvbnQgZmFtaWx5IGZvbnRGYW1pbHkiLGZvbnRTaXplOiJmb250U2l6ZSBmb250c2l6ZSBzaXplIGZvbnQtc2l6ZSIsdGV4dDoidGV4dCB0ZXh0cyBjaGFycyBjaGFyYWN0ZXJzIHZhbHVlIHZhbHVlcyBzeW1ib2xzIixhbGlnbjoiYWxpZ24gYWxpZ25tZW50IHRleHRBbGlnbiB0ZXh0YmFzZWxpbmUiLGJhc2VsaW5lOiJiYXNlbGluZSB0ZXh0QmFzZWxpbmUgdGV4dGJhc2VsaW5lIixkaXJlY3Rpb246ImRpciBkaXJlY3Rpb24gdGV4dERpcmVjdGlvbiIsY29sb3I6ImNvbG9yIGNvbG91ciBmaWxsIGZpbGwtY29sb3IgZmlsbENvbG9yIHRleHRDb2xvciB0ZXh0Y29sb3IiLGtlcm5pbmc6Imtlcm5pbmcga2VybiIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2cCB2aWV3cG9ydCB2aWV3Qm94IHZpZXdib3ggdmlld1BvcnQiLG9wYWNpdHk6Im9wYWNpdHkgYWxwaGEgdHJhbnNwYXJlbmN5IHZpc2libGUgdmlzaWJpbGl0eSBvcGFxdWUiLG9mZnNldDoib2Zmc2V0IHBvc2l0aW9uT2Zmc2V0IHBhZGRpbmcgc2hpZnQgaW5kZW50IGluZGVudGF0aW9uIn0sITApKS5vcGFjaXR5JiYoQXJyYXkuaXNBcnJheSh0Lm9wYWNpdHkpP3RoaXMub3BhY2l0eT10Lm9wYWNpdHkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KX0pKTp0aGlzLm9wYWNpdHk9cGFyc2VGbG9hdCh0Lm9wYWNpdHkpKSxudWxsIT10LnZpZXdwb3J0JiYodGhpcy52aWV3cG9ydD1mKHQudmlld3BvcnQpLHRoaXMudmlld3BvcnRBcnJheT1bdGhpcy52aWV3cG9ydC54LHRoaXMudmlld3BvcnQueSx0aGlzLnZpZXdwb3J0LndpZHRoLHRoaXMudmlld3BvcnQuaGVpZ2h0XSksbnVsbD09dGhpcy52aWV3cG9ydCYmKHRoaXMudmlld3BvcnQ9e3g6MCx5OjAsd2lkdGg6dGhpcy5nbC5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnRoaXMuZ2wuZHJhd2luZ0J1ZmZlckhlaWdodH0sdGhpcy52aWV3cG9ydEFycmF5PVt0aGlzLnZpZXdwb3J0LngsdGhpcy52aWV3cG9ydC55LHRoaXMudmlld3BvcnQud2lkdGgsdGhpcy52aWV3cG9ydC5oZWlnaHRdKSxudWxsIT10Lmtlcm5pbmcmJih0aGlzLmtlcm5pbmc9dC5rZXJuaW5nKSxudWxsIT10Lm9mZnNldCYmKCJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJih0Lm9mZnNldD1bdC5vZmZzZXQsMF0pLHRoaXMucG9zaXRpb25PZmZzZXQ9eSh0Lm9mZnNldCkpLHQuZGlyZWN0aW9uJiYodGhpcy5kaXJlY3Rpb249dC5kaXJlY3Rpb24pLHQucmFuZ2UmJih0aGlzLnJhbmdlPXQucmFuZ2UsdGhpcy5zY2FsZT1bMS8odC5yYW5nZVsyXS10LnJhbmdlWzBdKSwxLyh0LnJhbmdlWzNdLXQucmFuZ2VbMV0pXSx0aGlzLnRyYW5zbGF0ZT1bLXQucmFuZ2VbMF0sLXQucmFuZ2VbMV1dKSx0LnNjYWxlJiYodGhpcy5zY2FsZT10LnNjYWxlKSx0LnRyYW5zbGF0ZSYmKHRoaXMudHJhbnNsYXRlPXQudHJhbnNsYXRlKSx0aGlzLnNjYWxlfHwodGhpcy5zY2FsZT1bMS90aGlzLnZpZXdwb3J0LndpZHRoLDEvdGhpcy52aWV3cG9ydC5oZWlnaHRdKSx0aGlzLnRyYW5zbGF0ZXx8KHRoaXMudHJhbnNsYXRlPVswLDBdKSx0aGlzLmZvbnQubGVuZ3RofHx0LmZvbnR8fCh0LmZvbnQ9VC5iYXNlRm9udFNpemUrInB4IHNhbnMtc2VyaWYiKTt2YXIgcixhPSExLG89ITE7aWYodC5mb250JiYoQXJyYXkuaXNBcnJheSh0LmZvbnQpP3QuZm9udDpbdC5mb250XSkuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXtpZigic3RyaW5nIj09dHlwZW9mIHQpdHJ5e3Q9bi5wYXJzZSh0KX1jYXRjaChlKXt0PW4ucGFyc2UoVC5iYXNlRm9udFNpemUrInB4ICIrdCl9ZWxzZSB0PW4ucGFyc2Uobi5zdHJpbmdpZnkodCkpO3ZhciBpPW4uc3RyaW5naWZ5KHtzaXplOlQuYmFzZUZvbnRTaXplLGZhbWlseTp0LmZhbWlseSxzdHJldGNoOl8/dC5zdHJldGNoOnZvaWQgMCx2YXJpYW50OnQudmFyaWFudCx3ZWlnaHQ6dC53ZWlnaHQsc3R5bGU6dC5zdHlsZX0pLHM9cCh0LnNpemUpLGw9TWF0aC5yb3VuZChzWzBdKmQoc1sxXSkpO2lmKGwhPT1lLmZvbnRTaXplW3JdJiYobz0hMCxlLmZvbnRTaXplW3JdPWwpLCEoZS5mb250W3JdJiZpPT1lLmZvbnRbcl0uYmFzZVN0cmluZ3x8KGE9ITAsZS5mb250W3JdPVQuZm9udHNbaV0sZS5mb250W3JdKSkpe3ZhciBjPXQuZmFtaWx5LmpvaW4oIiwgIiksdT1bdC5zdHlsZV07dC5zdHlsZSE9dC52YXJpYW50JiZ1LnB1c2godC52YXJpYW50KSx0LnZhcmlhbnQhPXQud2VpZ2h0JiZ1LnB1c2godC53ZWlnaHQpLF8mJnQud2VpZ2h0IT10LnN0cmV0Y2gmJnUucHVzaCh0LnN0cmV0Y2gpLGUuZm9udFtyXT17YmFzZVN0cmluZzppLGZhbWlseTpjLHdlaWdodDp0LndlaWdodCxzdHJldGNoOnQuc3RyZXRjaCxzdHlsZTp0LnN0eWxlLHZhcmlhbnQ6dC52YXJpYW50LHdpZHRoOnt9LGtlcm5pbmc6e30sbWV0cmljczp2KGMse29yaWdpbjoidG9wIixmb250U2l6ZTpULmJhc2VGb250U2l6ZSxmb250U3R5bGU6dS5qb2luKCIgIil9KX0sVC5mb250c1tpXT1lLmZvbnRbcl19fSkpLChhfHxvKSYmdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7dmFyIGE9bi5zdHJpbmdpZnkoe3NpemU6ZS5mb250U2l6ZVtpXSxmYW1pbHk6ci5mYW1pbHksc3RyZXRjaDpfP3Iuc3RyZXRjaDp2b2lkIDAsdmFyaWFudDpyLnZhcmlhbnQsd2VpZ2h0OnIud2VpZ2h0LHN0eWxlOnIuc3R5bGV9KTtpZihlLmZvbnRBdGxhc1tpXT1lLnNoYWRlci5hdGxhc1thXSwhZS5mb250QXRsYXNbaV0pe3ZhciBvPXIubWV0cmljcztlLnNoYWRlci5hdGxhc1thXT1lLmZvbnRBdGxhc1tpXT17Zm9udFN0cmluZzphLHN0ZXA6MipNYXRoLmNlaWwoZS5mb250U2l6ZVtpXSpvLmJvdHRvbSouNSksZW06ZS5mb250U2l6ZVtpXSxjb2xzOjAscm93czowLGhlaWdodDowLHdpZHRoOjAsY2hhcnM6W10saWRzOnt9LHRleHR1cmU6ZS5yZWdsLnRleHR1cmUoKX19bnVsbD09dC50ZXh0JiYodC50ZXh0PWUudGV4dCl9KSksInN0cmluZyI9PXR5cGVvZiB0LnRleHQmJnQucG9zaXRpb24mJnQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgcz1BcnJheSguNSp0LnBvc2l0aW9uLmxlbmd0aCksaD0wO2g8cy5sZW5ndGg7aCsrKXNbaF09dC50ZXh0O3QudGV4dD1zfWlmKG51bGwhPXQudGV4dHx8YSl7aWYodGhpcy50ZXh0T2Zmc2V0cz1bMF0sQXJyYXkuaXNBcnJheSh0LnRleHQpKXt0aGlzLmNvdW50PXQudGV4dFswXS5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO2Zvcih2YXIgYj0xO2I8dC50ZXh0Lmxlbmd0aDtiKyspdGhpcy50ZXh0T2Zmc2V0c1tiXT10aGlzLnRleHRPZmZzZXRzW2ItMV0rdC50ZXh0W2ItMV0ubGVuZ3RoLHRoaXMuY291bnQrPXQudGV4dFtiXS5sZW5ndGgsdGhpcy5jb3VudHMucHVzaCh0LnRleHRbYl0ubGVuZ3RoKTt0aGlzLnRleHQ9dC50ZXh0LmpvaW4oIiIpfWVsc2UgdGhpcy50ZXh0PXQudGV4dCx0aGlzLmNvdW50PXRoaXMudGV4dC5sZW5ndGgsdGhpcy5jb3VudHM9W3RoaXMuY291bnRdO3I9W10sdGhpcy5mb250LmZvckVhY2goKGZ1bmN0aW9uKHQsbil7VC5hdGxhc0NvbnRleHQuZm9udD10LmJhc2VTdHJpbmc7Zm9yKHZhciBpPWUuZm9udEF0bGFzW25dLGE9MDthPGUudGV4dC5sZW5ndGg7YSsrKXt2YXIgbz1lLnRleHQuY2hhckF0KGEpO2lmKG51bGw9PWkuaWRzW29dJiYoaS5pZHNbb109aS5jaGFycy5sZW5ndGgsaS5jaGFycy5wdXNoKG8pLHIucHVzaChvKSksbnVsbD09dC53aWR0aFtvXSYmKHQud2lkdGhbb109VC5hdGxhc0NvbnRleHQubWVhc3VyZVRleHQobykud2lkdGgvVC5iYXNlRm9udFNpemUsZS5rZXJuaW5nKSl7dmFyIHM9W107Zm9yKHZhciBsIGluIHQud2lkdGgpcy5wdXNoKGwrbyxvK2wpO2codC5rZXJuaW5nLG0odC5mYW1pbHkse3BhaXJzOnN9KSl9fX0pKX1pZih0LnBvc2l0aW9uKWlmKHQucG9zaXRpb24ubGVuZ3RoPjIpe2Zvcih2YXIgdz0hdC5wb3NpdGlvblswXS5sZW5ndGgsaz11Lm1hbGxvY0Zsb2F0KDIqdGhpcy5jb3VudCksQT0wLE09MDtBPHRoaXMuY291bnRzLmxlbmd0aDtBKyspe3ZhciBTPXRoaXMuY291bnRzW0FdO2lmKHcpZm9yKHZhciBFPTA7RTxTO0UrKylrW00rK109dC5wb3NpdGlvblsyKkFdLGtbTSsrXT10LnBvc2l0aW9uWzIqQSsxXTtlbHNlIGZvcih2YXIgTD0wO0w8UztMKyspa1tNKytdPXQucG9zaXRpb25bQV1bMF0sa1tNKytdPXQucG9zaXRpb25bQV1bMV19dGhpcy5wb3NpdGlvbi5jYWxsP3RoaXMucG9zaXRpb24oe3R5cGU6ImZsb2F0IixkYXRhOmt9KTp0aGlzLnBvc2l0aW9uPXRoaXMucmVnbC5idWZmZXIoe3R5cGU6ImZsb2F0IixkYXRhOmt9KSx1LmZyZWVGbG9hdChrKX1lbHNlIHRoaXMucG9zaXRpb24uZGVzdHJveSYmdGhpcy5wb3NpdGlvbi5kZXN0cm95KCksdGhpcy5wb3NpdGlvbj17Y29uc3RhbnQ6dC5wb3NpdGlvbn07aWYodC50ZXh0fHxhKXt2YXIgQz11Lm1hbGxvY1VpbnQ4KHRoaXMuY291bnQpLFA9dS5tYWxsb2NGbG9hdCgyKnRoaXMuY291bnQpO3RoaXMudGV4dFdpZHRoPVtdO2Zvcih2YXIgST0wLE89MDtJPHRoaXMuY291bnRzLmxlbmd0aDtJKyspe2Zvcih2YXIgej10aGlzLmNvdW50c1tJXSxEPXRoaXMuZm9udFtJXXx8dGhpcy5mb250WzBdLFI9dGhpcy5mb250QXRsYXNbSV18fHRoaXMuZm9udEF0bGFzWzBdLEY9MDtGPHo7RisrKXt2YXIgQj10aGlzLnRleHQuY2hhckF0KE8pLE49dGhpcy50ZXh0LmNoYXJBdChPLTEpO2lmKENbT109Ui5pZHNbQl0sUFsyKk9dPUQud2lkdGhbQl0sRil7dmFyIGo9UFsyKk8tMl0sVT1QWzIqT10sVj1QWzIqTy0xXSsuNSpqKy41KlU7aWYodGhpcy5rZXJuaW5nKXt2YXIgSD1ELmtlcm5pbmdbTitCXTtIJiYoVis9LjAwMSpIKX1QWzIqTysxXT1WfWVsc2UgUFsyKk8rMV09LjUqUFsyKk9dO08rK310aGlzLnRleHRXaWR0aC5wdXNoKFAubGVuZ3RoPy41KlBbMipPLTJdK1BbMipPLTFdOjApfXQuYWxpZ258fCh0LmFsaWduPXRoaXMuYWxpZ24pLHRoaXMuY2hhckJ1ZmZlcih7ZGF0YTpDLHR5cGU6InVpbnQ4Iix1c2FnZToic3RyZWFtIn0pLHRoaXMuc2l6ZUJ1ZmZlcih7ZGF0YTpQLHR5cGU6ImZsb2F0Iix1c2FnZToic3RyZWFtIn0pLHUuZnJlZVVpbnQ4KEMpLHUuZnJlZUZsb2F0KFApLHIubGVuZ3RoJiZ0aGlzLmZvbnQuZm9yRWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj1lLmZvbnRBdGxhc1tyXSxpPW4uc3RlcCxhPU1hdGguZmxvb3IoVC5tYXhBdGxhc1NpemUvaSksbz1NYXRoLm1pbihhLG4uY2hhcnMubGVuZ3RoKSxzPU1hdGguY2VpbChuLmNoYXJzLmxlbmd0aC9vKSxsPXgobyppKSx1PXgocyppKTtuLndpZHRoPWwsbi5oZWlnaHQ9dSxuLnJvd3M9cyxuLmNvbHM9byxuLmVtJiZuLnRleHR1cmUoe2RhdGE6Yyh7Y2FudmFzOlQuYXRsYXNDYW52YXMsZm9udDpuLmZvbnRTdHJpbmcsY2hhcnM6bi5jaGFycyxzaGFwZTpbbCx1XSxzdGVwOltpLGldfSl9KX0pKX1pZih0LmFsaWduJiYodGhpcy5hbGlnbj10LmFsaWduLHRoaXMuYWxpZ25PZmZzZXQ9dGhpcy50ZXh0V2lkdGgubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5hbGlnbik/ZS5hbGlnbi5sZW5ndGg+MT9lLmFsaWduW3JdOmUuYWxpZ25bMF06ZS5hbGlnbjtpZigibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG47c3dpdGNoKG4pe2Nhc2UicmlnaHQiOmNhc2UiZW5kIjpyZXR1cm4tdDtjYXNlImNlbnRlciI6Y2FzZSJjZW50cmUiOmNhc2UibWlkZGxlIjpyZXR1cm4uNSotdH1yZXR1cm4gMH0pKSksbnVsbD09dGhpcy5iYXNlbGluZSYmbnVsbD09dC5iYXNlbGluZSYmKHQuYmFzZWxpbmU9MCksbnVsbCE9dC5iYXNlbGluZSYmKHRoaXMuYmFzZWxpbmU9dC5iYXNlbGluZSxBcnJheS5pc0FycmF5KHRoaXMuYmFzZWxpbmUpfHwodGhpcy5iYXNlbGluZT1bdGhpcy5iYXNlbGluZV0pLHRoaXMuYmFzZWxpbmVPZmZzZXQ9dGhpcy5iYXNlbGluZS5tYXAoKGZ1bmN0aW9uKHQscil7dmFyIG49KGUuZm9udFtyXXx8ZS5mb250WzBdKS5tZXRyaWNzLGk9MDtyZXR1cm4gaSs9LjUqbi5ib3R0b20saSs9Im51bWJlciI9PXR5cGVvZiB0P3Qtbi5iYXNlbGluZTotblt0XSxpKj0tMX0pKSksbnVsbCE9dC5jb2xvcilpZih0LmNvbG9yfHwodC5jb2xvcj0idHJhbnNwYXJlbnQiKSwic3RyaW5nIiE9dHlwZW9mIHQuY29sb3ImJmlzTmFOKHQuY29sb3IpKXt2YXIgcTtpZigibnVtYmVyIj09dHlwZW9mIHQuY29sb3JbMF0mJnQuY29sb3IubGVuZ3RoPnRoaXMuY291bnRzLmxlbmd0aCl7dmFyIEc9dC5jb2xvci5sZW5ndGg7cT11Lm1hbGxvY1VpbnQ4KEcpO2Zvcih2YXIgWT0odC5jb2xvci5zdWJhcnJheXx8dC5jb2xvci5zbGljZSkuYmluZCh0LmNvbG9yKSxXPTA7VzxHO1crPTQpcS5zZXQobChZKFcsVys0KSwidWludDgiKSxXKX1lbHNle3ZhciBYPXQuY29sb3IubGVuZ3RoO3E9dS5tYWxsb2NVaW50OCg0KlgpO2Zvcih2YXIgWj0wO1o8WDtaKyspcS5zZXQobCh0LmNvbG9yW1pdfHwwLCJ1aW50OCIpLDQqWil9dGhpcy5jb2xvcj1xfWVsc2UgdGhpcy5jb2xvcj1sKHQuY29sb3IsInVpbnQ4Iik7aWYodC5wb3NpdGlvbnx8dC50ZXh0fHx0LmNvbG9yfHx0LmJhc2VsaW5lfHx0LmFsaWdufHx0LmZvbnR8fHQub2Zmc2V0fHx0Lm9wYWNpdHkpaWYodGhpcy5jb2xvci5sZW5ndGg+NHx8dGhpcy5iYXNlbGluZU9mZnNldC5sZW5ndGg+MXx8dGhpcy5hbGlnbiYmdGhpcy5hbGlnbi5sZW5ndGg+MXx8dGhpcy5mb250QXRsYXMubGVuZ3RoPjF8fHRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjIpe3ZhciBKPU1hdGgubWF4KC41KnRoaXMucG9zaXRpb24ubGVuZ3RofHwwLC4yNSp0aGlzLmNvbG9yLmxlbmd0aHx8MCx0aGlzLmJhc2VsaW5lT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmFsaWduT2Zmc2V0Lmxlbmd0aHx8MCx0aGlzLmZvbnQubGVuZ3RofHwwLHRoaXMub3BhY2l0eS5sZW5ndGh8fDAsLjUqdGhpcy5wb3NpdGlvbk9mZnNldC5sZW5ndGh8fDApO3RoaXMuYmF0Y2g9QXJyYXkoSik7Zm9yKHZhciBLPTA7Szx0aGlzLmJhdGNoLmxlbmd0aDtLKyspdGhpcy5iYXRjaFtLXT17Y291bnQ6dGhpcy5jb3VudHMubGVuZ3RoPjE/dGhpcy5jb3VudHNbS106dGhpcy5jb3VudHNbMF0sb2Zmc2V0OnRoaXMudGV4dE9mZnNldHMubGVuZ3RoPjE/dGhpcy50ZXh0T2Zmc2V0c1tLXTp0aGlzLnRleHRPZmZzZXRzWzBdLGNvbG9yOnRoaXMuY29sb3I/dGhpcy5jb2xvci5sZW5ndGg8PTQ/dGhpcy5jb2xvcjp0aGlzLmNvbG9yLnN1YmFycmF5KDQqSyw0KksrNCk6WzAsMCwwLDI1NV0sb3BhY2l0eTpBcnJheS5pc0FycmF5KHRoaXMub3BhY2l0eSk/dGhpcy5vcGFjaXR5W0tdOnRoaXMub3BhY2l0eSxiYXNlbGluZTpudWxsIT10aGlzLmJhc2VsaW5lT2Zmc2V0W0tdP3RoaXMuYmFzZWxpbmVPZmZzZXRbS106dGhpcy5iYXNlbGluZU9mZnNldFswXSxhbGlnbjp0aGlzLmFsaWduP251bGwhPXRoaXMuYWxpZ25PZmZzZXRbS10/dGhpcy5hbGlnbk9mZnNldFtLXTp0aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbS118fHRoaXMuZm9udEF0bGFzWzBdLHBvc2l0aW9uT2Zmc2V0OnRoaXMucG9zaXRpb25PZmZzZXQubGVuZ3RoPjI/dGhpcy5wb3NpdGlvbk9mZnNldC5zdWJhcnJheSgyKkssMipLKzIpOnRoaXMucG9zaXRpb25PZmZzZXR9fWVsc2UgdGhpcy5jb3VudD90aGlzLmJhdGNoPVt7Y291bnQ6dGhpcy5jb3VudCxvZmZzZXQ6MCxjb2xvcjp0aGlzLmNvbG9yfHxbMCwwLDAsMjU1XSxvcGFjaXR5OkFycmF5LmlzQXJyYXkodGhpcy5vcGFjaXR5KT90aGlzLm9wYWNpdHlbMF06dGhpcy5vcGFjaXR5LGJhc2VsaW5lOnRoaXMuYmFzZWxpbmVPZmZzZXRbMF0sYWxpZ246dGhpcy5hbGlnbk9mZnNldD90aGlzLmFsaWduT2Zmc2V0WzBdOjAsYXRsYXM6dGhpcy5mb250QXRsYXNbMF0scG9zaXRpb25PZmZzZXQ6dGhpcy5wb3NpdGlvbk9mZnNldH1dOnRoaXMuYmF0Y2g9W119LFQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LFQucHJvdG90eXBlLmtlcm5pbmc9ITAsVC5wcm90b3R5cGUucG9zaXRpb249e2NvbnN0YW50Om5ldyBGbG9hdDMyQXJyYXkoMil9LFQucHJvdG90eXBlLnRyYW5zbGF0ZT1udWxsLFQucHJvdG90eXBlLnNjYWxlPW51bGwsVC5wcm90b3R5cGUuZm9udD1udWxsLFQucHJvdG90eXBlLnRleHQ9IiIsVC5wcm90b3R5cGUucG9zaXRpb25PZmZzZXQ9WzAsMF0sVC5wcm90b3R5cGUub3BhY2l0eT0xLFQucHJvdG90eXBlLmNvbG9yPW5ldyBVaW50OEFycmF5KFswLDAsMCwyNTVdKSxULnByb3RvdHlwZS5hbGlnbk9mZnNldD1bMCwwXSxULm1heEF0bGFzU2l6ZT0xMDI0LFQuYXRsYXNDYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksVC5hdGxhc0NvbnRleHQ9VC5hdGxhc0NhbnZhcy5nZXRDb250ZXh0KCIyZCIse2FscGhhOiExfSksVC5iYXNlRm9udFNpemU9NjQsVC5mb250cz17fSxlLmV4cG9ydHM9VH0seyJiaXQtdHdpZGRsZSI6MTAxLCJjb2xvci1ub3JtYWxpemUiOjEyNiwiY3NzLWZvbnQiOjE0NiwiZGV0ZWN0LWtlcm5pbmciOjE3MywiZXM2LXdlYWstbWFwIjoyMzMsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjI0NCwiZm9udC1hdGxhcyI6MjQ1LCJmb250LW1lYXN1cmUiOjI0NiwiZ2wtdXRpbC9jb250ZXh0IjozMzksImlzLXBsYWluLW9iaiI6NDM3LCJvYmplY3QtYXNzaWduIjo0NjYsInBhcnNlLXJlY3QiOjQ3MSwicGFyc2UtdW5pdCI6NDczLCJwaWNrLWJ5LWFsaWFzIjo0NzUscmVnbDo1MTYsInRvLXB4Ijo1NzQsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm5kYXJyYXkiKSxpPXQoIm5kYXJyYXktb3BzIiksYT10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aDw9MSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogTWlzc2luZyBhcmd1bWVudHMgZm9yIHRleHR1cmUyZCBjb25zdHJ1Y3RvciIpO298fGModCk7aWYoIm51bWJlciI9PXR5cGVvZiBhcmd1bWVudHNbMV0pcmV0dXJuIHYodCxhcmd1bWVudHNbMV0sYXJndW1lbnRzWzJdLGFyZ3VtZW50c1szXXx8dC5SR0JBLGFyZ3VtZW50c1s0XXx8dC5VTlNJR05FRF9CWVRFKTtpZihBcnJheS5pc0FycmF5KGFyZ3VtZW50c1sxXSkpcmV0dXJuIHYodCwwfGFyZ3VtZW50c1sxXVswXSwwfGFyZ3VtZW50c1sxXVsxXSxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoIm9iamVjdCI9PXR5cGVvZiBhcmd1bWVudHNbMV0pe3ZhciBlPWFyZ3VtZW50c1sxXSxyPXUoZSk/ZTplLnJhdztpZihyKXJldHVybiB5KHQsciwwfGUud2lkdGgsMHxlLmhlaWdodCxhcmd1bWVudHNbMl18fHQuUkdCQSxhcmd1bWVudHNbM118fHQuVU5TSUdORURfQllURSk7aWYoZS5zaGFwZSYmZS5kYXRhJiZlLnN0cmlkZSlyZXR1cm4geCh0LGUpfXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIGFyZ3VtZW50cyBmb3IgdGV4dHVyZTJkIGNvbnN0cnVjdG9yIil9O3ZhciBvPW51bGwscz1udWxsLGw9bnVsbDtmdW5jdGlvbiBjKHQpe289W3QuTElORUFSLHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9ORUFSRVNUXSxzPVt0Lk5FQVJFU1QsdC5MSU5FQVIsdC5ORUFSRVNUX01JUE1BUF9ORUFSRVNULHQuTkVBUkVTVF9NSVBNQVBfTElORUFSLHQuTElORUFSX01JUE1BUF9ORUFSRVNULHQuTElORUFSX01JUE1BUF9MSU5FQVJdLGw9W3QuUkVQRUFULHQuQ0xBTVBfVE9fRURHRSx0Lk1JUlJPUkVEX1JFUEVBVF19ZnVuY3Rpb24gdSh0KXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEhUTUxDYW52YXNFbGVtZW50JiZ0IGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTEltYWdlRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSFRNTFZpZGVvRWxlbWVudCYmdCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnR8fCJ1bmRlZmluZWQiIT10eXBlb2YgSW1hZ2VEYXRhJiZ0IGluc3RhbmNlb2YgSW1hZ2VEYXRhfXZhciBmPWZ1bmN0aW9uKHQsZSl7aS5tdWxzKHQsZSwyNTUpfTtmdW5jdGlvbiBoKHQsZSxyKXt2YXIgbj10LmdsLGk9bi5nZXRQYXJhbWV0ZXIobi5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+aXx8cjwwfHxyPmkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaXplIik7cmV0dXJuIHQuX3NoYXBlPVtlLHJdLHQuYmluZCgpLG4udGV4SW1hZ2UyRChuLlRFWFRVUkVfMkQsMCx0LmZvcm1hdCxlLHIsMCx0LmZvcm1hdCx0LnR5cGUsbnVsbCksdC5fbWlwTGV2ZWxzPVswXSx0fWZ1bmN0aW9uIHAodCxlLHIsbixpLGEpe3RoaXMuZ2w9dCx0aGlzLmhhbmRsZT1lLHRoaXMuZm9ybWF0PWksdGhpcy50eXBlPWEsdGhpcy5fc2hhcGU9W3Isbl0sdGhpcy5fbWlwTGV2ZWxzPVswXSx0aGlzLl9tYWdGaWx0ZXI9dC5ORUFSRVNULHRoaXMuX21pbkZpbHRlcj10Lk5FQVJFU1QsdGhpcy5fd3JhcFM9dC5DTEFNUF9UT19FREdFLHRoaXMuX3dyYXBUPXQuQ0xBTVBfVE9fRURHRSx0aGlzLl9hbmlzb1NhbXBsZXM9MTt2YXIgbz10aGlzLHM9W3RoaXMuX3dyYXBTLHRoaXMuX3dyYXBUXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3dyYXBTfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud3JhcFM9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fd3JhcFR9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby53cmFwVD10fX1dKSx0aGlzLl93cmFwVmVjdG9yPXM7dmFyIGw9W3RoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdXTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhsLFt7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uX3NoYXBlWzBdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8ud2lkdGg9dH19LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gby5fc2hhcGVbMV19LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gby5oZWlnaHQ9dH19XSksdGhpcy5fc2hhcGVWZWN0b3I9bH12YXIgZD1wLnByb3RvdHlwZTtmdW5jdGlvbiBtKHQsZSl7cmV0dXJuIDM9PT10Lmxlbmd0aD8xPT09ZVsyXSYmZVsxXT09PXRbMF0qdFsyXSYmZVswXT09PXRbMl06MT09PWVbMF0mJmVbMV09PT10WzBdfWZ1bmN0aW9uIGcodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIHQuYmluZFRleHR1cmUodC5URVhUVVJFXzJELGUpLHQudGV4UGFyYW1ldGVyaSh0LlRFWFRVUkVfMkQsdC5URVhUVVJFX01JTl9GSUxURVIsdC5ORUFSRVNUKSx0LnRleFBhcmFtZXRlcmkodC5URVhUVVJFXzJELHQuVEVYVFVSRV9NQUdfRklMVEVSLHQuTkVBUkVTVCksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9TLHQuQ0xBTVBfVE9fRURHRSksdC50ZXhQYXJhbWV0ZXJpKHQuVEVYVFVSRV8yRCx0LlRFWFRVUkVfV1JBUF9ULHQuQ0xBTVBfVE9fRURHRSksZX1mdW5jdGlvbiB2KHQsZSxyLG4saSl7dmFyIGE9dC5nZXRQYXJhbWV0ZXIodC5NQVhfVEVYVFVSRV9TSVpFKTtpZihlPDB8fGU+YXx8cjwwfHxyPmEpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgdGV4dHVyZSBzaGFwZSIpO2lmKGk9PT10LkZMT0FUJiYhdC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2Zsb2F0IikpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEZsb2F0aW5nIHBvaW50IHRleHR1cmVzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpO3ZhciBvPWcodCk7cmV0dXJuIHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCxuLGUsciwwLG4saSxudWxsKSxuZXcgcCh0LG8sZSxyLG4saSl9ZnVuY3Rpb24geSh0LGUscixuLGksYSl7dmFyIG89Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGksaSxhLGUpLG5ldyBwKHQsbyxyLG4saSxhKX1mdW5jdGlvbiB4KHQsZSl7dmFyIHI9ZS5kdHlwZSxvPWUuc2hhcGUuc2xpY2UoKSxzPXQuZ2V0UGFyYW1ldGVyKHQuTUFYX1RFWFRVUkVfU0laRSk7aWYob1swXTwwfHxvWzBdPnN8fG9bMV08MHx8b1sxXT5zKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2l6ZSIpO3ZhciBsPW0obyxlLnN0cmlkZS5zbGljZSgpKSxjPTA7ImZsb2F0MzIiPT09cj9jPXQuRkxPQVQ6ImZsb2F0NjQiPT09cj8oYz10LkZMT0FULGw9ITEscj0iZmxvYXQzMiIpOiJ1aW50OCI9PT1yP2M9dC5VTlNJR05FRF9CWVRFOihjPXQuVU5TSUdORURfQllURSxsPSExLHI9InVpbnQ4Iik7dmFyIHUsaCxkPTA7aWYoMj09PW8ubGVuZ3RoKWQ9dC5MVU1JTkFOQ0Usbz1bb1swXSxvWzFdLDFdLGU9bihlLmRhdGEsbyxbZS5zdHJpZGVbMF0sZS5zdHJpZGVbMV0sMV0sZS5vZmZzZXQpO2Vsc2V7aWYoMyE9PW8ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHNoYXBlIGZvciB0ZXh0dXJlIik7aWYoMT09PW9bMl0pZD10LkFMUEhBO2Vsc2UgaWYoMj09PW9bMl0pZD10LkxVTUlOQU5DRV9BTFBIQTtlbHNlIGlmKDM9PT1vWzJdKWQ9dC5SR0I7ZWxzZXtpZig0IT09b1syXSl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgcGl4ZWwgY29vcmRzIik7ZD10LlJHQkF9fWMhPT10LkZMT0FUfHx0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXQiKXx8KGM9dC5VTlNJR05FRF9CWVRFLGw9ITEpO3ZhciB2PWUuc2l6ZTtpZihsKXU9MD09PWUub2Zmc2V0JiZlLmRhdGEubGVuZ3RoPT09dj9lLmRhdGE6ZS5kYXRhLnN1YmFycmF5KGUub2Zmc2V0LGUub2Zmc2V0K3YpO2Vsc2V7dmFyIHk9W29bMl0sb1syXSpvWzBdLDFdO2g9YS5tYWxsb2ModixyKTt2YXIgeD1uKGgsbyx5LDApOyJmbG9hdDMyIiE9PXImJiJmbG9hdDY0IiE9PXJ8fGMhPT10LlVOU0lHTkVEX0JZVEU/aS5hc3NpZ24oeCxlKTpmKHgsZSksdT1oLnN1YmFycmF5KDAsdil9dmFyIGI9Zyh0KTtyZXR1cm4gdC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCwwLGQsb1swXSxvWzFdLDAsZCxjLHUpLGx8fGEuZnJlZShoKSxuZXcgcCh0LGIsb1swXSxvWzFdLGQsYyl9T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZCx7bWluRmlsdGVyOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWluRmlsdGVyfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5iaW5kKCk7dmFyIGU9dGhpcy5nbDtpZih0aGlzLnR5cGU9PT1lLkZMT0FUJiZvLmluZGV4T2YodCk+PTAmJihlLmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIil8fCh0PWUuTkVBUkVTVCkpLHMuaW5kZXhPZih0KTwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBVbmtub3duIGZpbHRlciBtb2RlICIrdCk7cmV0dXJuIGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsdCksdGhpcy5fbWluRmlsdGVyPXR9fSxtYWdGaWx0ZXI6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYWdGaWx0ZXJ9LHNldDpmdW5jdGlvbih0KXt0aGlzLmJpbmQoKTt2YXIgZT10aGlzLmdsO2lmKHRoaXMudHlwZT09PWUuRkxPQVQmJm8uaW5kZXhPZih0KT49MCYmKGUuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKXx8KHQ9ZS5ORUFSRVNUKSkscy5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gZmlsdGVyIG1vZGUgIit0KTtyZXR1cm4gZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUix0KSx0aGlzLl9tYWdGaWx0ZXI9dH19LG1pcFNhbXBsZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hbmlzb1NhbXBsZXN9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9hbmlzb1NhbXBsZXM7aWYodGhpcy5fYW5pc29TYW1wbGVzPTB8TWF0aC5tYXgodCwxKSxlIT09dGhpcy5fYW5pc29TYW1wbGVzKXt2YXIgcj10aGlzLmdsLmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7ciYmdGhpcy5nbC50ZXhQYXJhbWV0ZXJmKHRoaXMuZ2wuVEVYVFVSRV8yRCxyLlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhULHRoaXMuX2FuaXNvU2FtcGxlcyl9cmV0dXJuIHRoaXMuX2FuaXNvU2FtcGxlc319LHdyYXBTOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JhcFN9LHNldDpmdW5jdGlvbih0KXtpZih0aGlzLmJpbmQoKSxsLmluZGV4T2YodCk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTtyZXR1cm4gdGhpcy5nbC50ZXhQYXJhbWV0ZXJpKHRoaXMuZ2wuVEVYVFVSRV8yRCx0aGlzLmdsLlRFWFRVUkVfV1JBUF9TLHQpLHRoaXMuX3dyYXBTPXR9fSx3cmFwVDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBUfSxzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kKCksbC5pbmRleE9mKHQpPDApdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVua25vd24gd3JhcCBtb2RlICIrdCk7cmV0dXJuIHRoaXMuZ2wudGV4UGFyYW1ldGVyaSh0aGlzLmdsLlRFWFRVUkVfMkQsdGhpcy5nbC5URVhUVVJFX1dSQVBfVCx0KSx0aGlzLl93cmFwVD10fX0sd3JhcDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyYXBWZWN0b3J9LHNldDpmdW5jdGlvbih0KXtpZihBcnJheS5pc0FycmF5KHQpfHwodD1bdCx0XSksMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBNdXN0IHNwZWNpZnkgd3JhcCBtb2RlIGZvciByb3dzIGFuZCBjb2x1bW5zIik7Zm9yKHZhciBlPTA7ZTwyOysrZSlpZihsLmluZGV4T2YodFtlXSk8MCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogVW5rbm93biB3cmFwIG1vZGUgIit0KTt0aGlzLl93cmFwUz10WzBdLHRoaXMuX3dyYXBUPXRbMV07dmFyIHI9dGhpcy5nbDtyZXR1cm4gdGhpcy5iaW5kKCksci50ZXhQYXJhbWV0ZXJpKHIuVEVYVFVSRV8yRCxyLlRFWFRVUkVfV1JBUF9TLHRoaXMuX3dyYXBTKSxyLnRleFBhcmFtZXRlcmkoci5URVhUVVJFXzJELHIuVEVYVFVSRV9XUkFQX1QsdGhpcy5fd3JhcFQpLHR9fSxzaGFwZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlVmVjdG9yfSxzZXQ6ZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSl7aWYoMiE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBJbnZhbGlkIHRleHR1cmUgc2hhcGUiKX1lbHNlIHQ9WzB8dCwwfHRdO3JldHVybiBoKHRoaXMsMHx0WzBdLDB8dFsxXSksWzB8dFswXSwwfHRbMV1dfX0sd2lkdGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGFwZVswXX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBoKHRoaXMsdHw9MCx0aGlzLl9zaGFwZVsxXSksdH19LGhlaWdodDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NoYXBlWzFdfSxzZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR8PTAsaCh0aGlzLHRoaXMuX3NoYXBlWzBdLHQpLHR9fX0pLGQuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmdsO3JldHVybiB2b2lkIDAhPT10JiZlLmFjdGl2ZVRleHR1cmUoZS5URVhUVVJFMCsoMHx0KSksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy5oYW5kbGUpLHZvaWQgMCE9PXQ/MHx0OmUuZ2V0UGFyYW1ldGVyKGUuQUNUSVZFX1RFWFRVUkUpLWUuVEVYVFVSRTB9LGQuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLmhhbmRsZSl9LGQuZ2VuZXJhdGVNaXBtYXA9ZnVuY3Rpb24oKXt0aGlzLmJpbmQoKSx0aGlzLmdsLmdlbmVyYXRlTWlwbWFwKHRoaXMuZ2wuVEVYVFVSRV8yRCk7Zm9yKHZhciB0PU1hdGgubWluKHRoaXMuX3NoYXBlWzBdLHRoaXMuX3NoYXBlWzFdKSxlPTA7dD4wOysrZSx0Pj4+PTEpdGhpcy5fbWlwTGV2ZWxzLmluZGV4T2YoZSk8MCYmdGhpcy5fbWlwTGV2ZWxzLnB1c2goZSl9LGQuc2V0UGl4ZWxzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzPXRoaXMuZ2w7dGhpcy5iaW5kKCksQXJyYXkuaXNBcnJheShlKT8obz1yLHI9MHxlWzFdLGU9MHxlWzBdKTooZT1lfHwwLHI9cnx8MCksbz1vfHwwO3ZhciBsPXUodCk/dDp0LnJhdztpZihsKXt0aGlzLl9taXBMZXZlbHMuaW5kZXhPZihvKTwwPyhzLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQsdGhpcy50eXBlLGwpLHRoaXMuX21pcExldmVscy5wdXNoKG8pKTpzLnRleFN1YkltYWdlMkQocy5URVhUVVJFXzJELG8sZSxyLHRoaXMuZm9ybWF0LHRoaXMudHlwZSxsKX1lbHNle2lmKCEodC5zaGFwZSYmdC5zdHJpZGUmJnQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IFVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO2lmKHQuc2hhcGUubGVuZ3RoPDJ8fGUrdC5zaGFwZVsxXT50aGlzLl9zaGFwZVsxXT4+Pm98fHIrdC5zaGFwZVswXT50aGlzLl9zaGFwZVswXT4+Pm98fGU8MHx8cjwwKXRocm93IG5ldyBFcnJvcigiZ2wtdGV4dHVyZTJkOiBUZXh0dXJlIGRpbWVuc2lvbnMgYXJlIG91dCBvZiBib3VuZHMiKTshZnVuY3Rpb24odCxlLHIsbyxzLGwsYyx1KXt2YXIgaD11LmR0eXBlLHA9dS5zaGFwZS5zbGljZSgpO2lmKHAubGVuZ3RoPDJ8fHAubGVuZ3RoPjMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgbmRhcnJheSwgbXVzdCBiZSAyZCBvciAzZCIpO3ZhciBkPTAsZz0wLHY9bShwLHUuc3RyaWRlLnNsaWNlKCkpOyJmbG9hdDMyIj09PWg/ZD10LkZMT0FUOiJmbG9hdDY0Ij09PWg/KGQ9dC5GTE9BVCx2PSExLGg9ImZsb2F0MzIiKToidWludDgiPT09aD9kPXQuVU5TSUdORURfQllURTooZD10LlVOU0lHTkVEX0JZVEUsdj0hMSxoPSJ1aW50OCIpO2lmKDI9PT1wLmxlbmd0aClnPXQuTFVNSU5BTkNFLHA9W3BbMF0scFsxXSwxXSx1PW4odS5kYXRhLHAsW3Uuc3RyaWRlWzBdLHUuc3RyaWRlWzFdLDFdLHUub2Zmc2V0KTtlbHNle2lmKDMhPT1wLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImdsLXRleHR1cmUyZDogSW52YWxpZCBzaGFwZSBmb3IgdGV4dHVyZSIpO2lmKDE9PT1wWzJdKWc9dC5BTFBIQTtlbHNlIGlmKDI9PT1wWzJdKWc9dC5MVU1JTkFOQ0VfQUxQSEE7ZWxzZSBpZigzPT09cFsyXSlnPXQuUkdCO2Vsc2V7aWYoNCE9PXBbMl0pdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEludmFsaWQgc2hhcGUgZm9yIHBpeGVsIGNvb3JkcyIpO2c9dC5SR0JBfXBbMl19ZyE9PXQuTFVNSU5BTkNFJiZnIT09dC5BTFBIQXx8cyE9PXQuTFVNSU5BTkNFJiZzIT09dC5BTFBIQXx8KGc9cyk7aWYoZyE9PXMpdGhyb3cgbmV3IEVycm9yKCJnbC10ZXh0dXJlMmQ6IEluY29tcGF0aWJsZSB0ZXh0dXJlIGZvcm1hdCBmb3Igc2V0UGl4ZWxzIik7dmFyIHk9dS5zaXplLHg9Yy5pbmRleE9mKG8pPDA7eCYmYy5wdXNoKG8pO2lmKGQ9PT1sJiZ2KTA9PT11Lm9mZnNldCYmdS5kYXRhLmxlbmd0aD09PXk/eD90LnRleEltYWdlMkQodC5URVhUVVJFXzJELG8scyxwWzBdLHBbMV0sMCxzLGwsdS5kYXRhKTp0LnRleFN1YkltYWdlMkQodC5URVhUVVJFXzJELG8sZSxyLHBbMF0scFsxXSxzLGwsdS5kYXRhKTp4P3QudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxzLHBbMF0scFsxXSwwLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpOnQudGV4U3ViSW1hZ2UyRCh0LlRFWFRVUkVfMkQsbyxlLHIscFswXSxwWzFdLHMsbCx1LmRhdGEuc3ViYXJyYXkodS5vZmZzZXQsdS5vZmZzZXQreSkpO2Vsc2V7dmFyIGI7Yj1sPT09dC5GTE9BVD9hLm1hbGxvY0Zsb2F0MzIoeSk6YS5tYWxsb2NVaW50OCh5KTt2YXIgXz1uKGIscCxbcFsyXSxwWzJdKnBbMF0sMV0pO2Q9PT10LkZMT0FUJiZsPT09dC5VTlNJR05FRF9CWVRFP2YoXyx1KTppLmFzc2lnbihfLHUpLHg/dC50ZXhJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLHMscFswXSxwWzFdLDAscyxsLGIuc3ViYXJyYXkoMCx5KSk6dC50ZXhTdWJJbWFnZTJEKHQuVEVYVFVSRV8yRCxvLGUscixwWzBdLHBbMV0scyxsLGIuc3ViYXJyYXkoMCx5KSksbD09PXQuRkxPQVQ/YS5mcmVlRmxvYXQzMihiKTphLmZyZWVVaW50OChiKX19KHMsZSxyLG8sdGhpcy5mb3JtYXQsdGhpcy50eXBlLHRoaXMuX21pcExldmVscyx0KX19fSx7bmRhcnJheTo0NjIsIm5kYXJyYXktb3BzIjo0NTcsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sMzM5OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHIpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJwaWNrLWJ5LWFsaWFzIik7ZnVuY3Rpb24gaSh0KXtpZih0LmNvbnRhaW5lcilpZih0LmNvbnRhaW5lcj09ZG9jdW1lbnQuYm9keSlkb2N1bWVudC5ib2R5LnN0eWxlLndpZHRofHwodC5jYW52YXMud2lkdGg9dC53aWR0aHx8dC5waXhlbFJhdGlvKnIuaW5uZXJXaWR0aCksZG9jdW1lbnQuYm9keS5zdHlsZS5oZWlnaHR8fCh0LmNhbnZhcy5oZWlnaHQ9dC5oZWlnaHR8fHQucGl4ZWxSYXRpbypyLmlubmVySGVpZ2h0KTtlbHNle3ZhciBlPXQuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3QuY2FudmFzLndpZHRoPXQud2lkdGh8fGUucmlnaHQtZS5sZWZ0LHQuY2FudmFzLmhlaWdodD10LmhlaWdodHx8ZS5ib3R0b20tZS50b3B9fWZ1bmN0aW9uIGEodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0Q29udGV4dCYmIndpZHRoImluIHQmJiJoZWlnaHQiaW4gdH1mdW5jdGlvbiBvKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7cmV0dXJuIHQuc3R5bGUucG9zaXRpb249ImFic29sdXRlIix0LnN0eWxlLnRvcD0wLHQuc3R5bGUubGVmdD0wLHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQ/InN0cmluZyI9PXR5cGVvZiB0JiYodD17Y29udGFpbmVyOnR9KTp0PXt9LGEodCk/dD17Y29udGFpbmVyOnR9OnQ9InN0cmluZyI9PXR5cGVvZihlPXQpLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2YgZS5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P3tjb250YWluZXI6dH06ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0FycmF5c3x8ImZ1bmN0aW9uIj09dHlwZW9mIHQuZHJhd0VsZW1lbnRzfSh0KT97Z2w6dH06bih0LHtjb250YWluZXI6ImNvbnRhaW5lciB0YXJnZXQgZWxlbWVudCBlbCBjYW52YXMgaG9sZGVyIHBhcmVudCBwYXJlbnROb2RlIHdyYXBwZXIgdXNlIHJlZiByb290IG5vZGUiLGdsOiJnbCBjb250ZXh0IHdlYmdsIGdsQ29udGV4dCIsYXR0cnM6ImF0dHJpYnV0ZXMgYXR0cnMgY29udGV4dEF0dHJpYnV0ZXMiLHBpeGVsUmF0aW86InBpeGVsUmF0aW8gcHhSYXRpbyBweCByYXRpbyBweHJhdGlvIHBpeGVscmF0aW8iLHdpZHRoOiJ3IHdpZHRoIixoZWlnaHQ6ImggaGVpZ2h0In0sITApLHQucGl4ZWxSYXRpb3x8KHQucGl4ZWxSYXRpbz1yLnBpeGVsUmF0aW98fDEpLHQuZ2wpcmV0dXJuIHQuZ2w7aWYodC5jYW52YXMmJih0LmNvbnRhaW5lcj10LmNhbnZhcy5wYXJlbnROb2RlKSx0LmNvbnRhaW5lcil7aWYoInN0cmluZyI9PXR5cGVvZiB0LmNvbnRhaW5lcil7dmFyIHM9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0LmNvbnRhaW5lcik7aWYoIXMpdGhyb3cgRXJyb3IoIkVsZW1lbnQgIit0LmNvbnRhaW5lcisiIGlzIG5vdCBmb3VuZCIpO3QuY29udGFpbmVyPXN9YSh0LmNvbnRhaW5lcik/KHQuY2FudmFzPXQuY29udGFpbmVyLHQuY29udGFpbmVyPXQuY2FudmFzLnBhcmVudE5vZGUpOnQuY2FudmFzfHwodC5jYW52YXM9bygpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY2FudmFzKSxpKHQpKX1lbHNlIGlmKCF0LmNhbnZhcyl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudCl0aHJvdyBFcnJvcigiTm90IERPTSBlbnZpcm9ubWVudC4gVXNlIGhlYWRsZXNzLWdsLiIpO3QuY29udGFpbmVyPWRvY3VtZW50LmJvZHl8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0LmNhbnZhcz1vKCksdC5jb250YWluZXIuYXBwZW5kQ2hpbGQodC5jYW52YXMpLGkodCl9cmV0dXJuIHQuZ2x8fFsid2ViZ2wiLCJleHBlcmltZW50YWwtd2ViZ2wiLCJ3ZWJnbC1leHBlcmltZW50YWwiXS5zb21lKChmdW5jdGlvbihlKXt0cnl7dC5nbD10LmNhbnZhcy5nZXRDb250ZXh0KGUsdC5hdHRycyl9Y2F0Y2godCl7fXJldHVybiB0LmdsfSkpLHQuZ2x9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwaWNrLWJ5LWFsaWFzIjo0NzV9XSwzNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtlP2UuYmluZCgpOnQuYmluZEJ1ZmZlcih0LkVMRU1FTlRfQVJSQVlfQlVGRkVSLG51bGwpO3ZhciBuPTB8dC5nZXRQYXJhbWV0ZXIodC5NQVhfVkVSVEVYX0FUVFJJQlMpO2lmKHIpe2lmKHIubGVuZ3RoPm4pdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IFRvbyBtYW55IHZlcnRleCBhdHRyaWJ1dGVzIik7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDsrK2kpe3ZhciBhPXJbaV07aWYoYS5idWZmZXIpe3ZhciBvPWEuYnVmZmVyLHM9YS5zaXplfHw0LGw9YS50eXBlfHx0LkZMT0FULGM9ISFhLm5vcm1hbGl6ZWQsdT1hLnN0cmlkZXx8MCxmPWEub2Zmc2V0fHwwO28uYmluZCgpLHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGkscyxsLGMsdSxmKX1lbHNle2lmKCJudW1iZXIiPT10eXBlb2YgYSl0LnZlcnRleEF0dHJpYjFmKGksYSk7ZWxzZSBpZigxPT09YS5sZW5ndGgpdC52ZXJ0ZXhBdHRyaWIxZihpLGFbMF0pO2Vsc2UgaWYoMj09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliMmYoaSxhWzBdLGFbMV0pO2Vsc2UgaWYoMz09PWEubGVuZ3RoKXQudmVydGV4QXR0cmliM2YoaSxhWzBdLGFbMV0sYVsyXSk7ZWxzZXtpZig0IT09YS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJnbC12YW86IEludmFsaWQgdmVydGV4IGF0dHJpYnV0ZSIpO3QudmVydGV4QXR0cmliNGYoaSxhWzBdLGFbMV0sYVsyXSxhWzNdKX10LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19Zm9yKDtpPG47KytpKXQuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfWVsc2V7dC5iaW5kQnVmZmVyKHQuQVJSQVlfQlVGRkVSLG51bGwpO2ZvcihpPTA7aTxuOysraSl0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKX19fSx7fV0sMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZG8tYmluZC5qcyIpO2Z1bmN0aW9uIGkodCl7dGhpcy5nbD10LHRoaXMuX2VsZW1lbnRzPW51bGwsdGhpcy5fYXR0cmlidXRlcz1udWxsLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXtuKHRoaXMuZ2wsdGhpcy5fZWxlbWVudHMsdGhpcy5fYXR0cmlidXRlcyl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fZWxlbWVudHM9ZSx0aGlzLl9hdHRyaWJ1dGVzPXQsdGhpcy5fZWxlbWVudHNUeXBlPXJ8fHRoaXMuZ2wuVU5TSUdORURfU0hPUlR9LGkucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLnVuYmluZD1mdW5jdGlvbigpe30saS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fZWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfX0seyIuL2RvLWJpbmQuanMiOjM0MH1dLDM0MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2RvLWJpbmQuanMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhKXt0aGlzLmxvY2F0aW9uPXQsdGhpcy5kaW1lbnNpb249ZSx0aGlzLmE9cix0aGlzLmI9bix0aGlzLmM9aSx0aGlzLmQ9YX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLmdsPXQsdGhpcy5fZXh0PWUsdGhpcy5oYW5kbGU9cix0aGlzLl9hdHRyaWJzPVtdLHRoaXMuX3VzZUVsZW1lbnRzPSExLHRoaXMuX2VsZW1lbnRzVHlwZT10LlVOU0lHTkVEX1NIT1JUfWkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZGltZW5zaW9uKXtjYXNlIDE6dC52ZXJ0ZXhBdHRyaWIxZih0aGlzLmxvY2F0aW9uLHRoaXMuYSk7YnJlYWs7Y2FzZSAyOnQudmVydGV4QXR0cmliMmYodGhpcy5sb2NhdGlvbix0aGlzLmEsdGhpcy5iKTticmVhaztjYXNlIDM6dC52ZXJ0ZXhBdHRyaWIzZih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jKTticmVhaztjYXNlIDQ6dC52ZXJ0ZXhBdHRyaWI0Zih0aGlzLmxvY2F0aW9uLHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCl9fSxhLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmJpbmRWZXJ0ZXhBcnJheU9FUyh0aGlzLmhhbmRsZSk7Zm9yKHZhciB0PTA7dDx0aGlzLl9hdHRyaWJzLmxlbmd0aDsrK3QpdGhpcy5fYXR0cmlic1t0XS5iaW5kKHRoaXMuZ2wpfSxhLnByb3RvdHlwZS51bmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLl9leHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpfSxhLnByb3RvdHlwZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fZXh0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMuaGFuZGxlKX0sYS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLmJpbmQoKSxuKHRoaXMuZ2wsZSx0KSx0aGlzLnVuYmluZCgpLHRoaXMuX2F0dHJpYnMubGVuZ3RoPTAsdClmb3IodmFyIGE9MDthPHQubGVuZ3RoOysrYSl7dmFyIG89dFthXTsibnVtYmVyIj09dHlwZW9mIG8/dGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsMSxvKSk6QXJyYXkuaXNBcnJheShvKSYmdGhpcy5fYXR0cmlicy5wdXNoKG5ldyBpKGEsby5sZW5ndGgsb1swXSxvWzFdLG9bMl0sb1szXSkpfXRoaXMuX3VzZUVsZW1lbnRzPSEhZSx0aGlzLl9lbGVtZW50c1R5cGU9cnx8dGhpcy5nbC5VTlNJR05FRF9TSE9SVH0sYS5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0LGUscil7cj1yfHwwO3ZhciBuPXRoaXMuZ2w7dGhpcy5fdXNlRWxlbWVudHM/bi5kcmF3RWxlbWVudHModCxlLHRoaXMuX2VsZW1lbnRzVHlwZSxyKTpuLmRyYXdBcnJheXModCxyLGUpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGEodCxlLGUuY3JlYXRlVmVydGV4QXJyYXlPRVMoKSl9fSx7Ii4vZG8tYmluZC5qcyI6MzQwfV0sMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL3Zhby1uYXRpdmUuanMiKSxpPXQoIi4vbGliL3Zhby1lbXVsYXRlZC5qcyIpO2Z1bmN0aW9uIGEodCl7dGhpcy5iaW5kVmVydGV4QXJyYXlPRVM9dC5iaW5kVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmNyZWF0ZVZlcnRleEFycmF5T0VTPXQuY3JlYXRlVmVydGV4QXJyYXkuYmluZCh0KSx0aGlzLmRlbGV0ZVZlcnRleEFycmF5T0VTPXQuZGVsZXRlVmVydGV4QXJyYXkuYmluZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbD10LmNyZWF0ZVZlcnRleEFycmF5P25ldyBhKHQpOnQuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpO3JldHVybihzPWw/bih0LGwpOmkodCkpLnVwZGF0ZShlLHIsbyksc319LHsiLi9saWIvdmFvLWVtdWxhdGVkLmpzIjozNDEsIi4vbGliL3Zhby1uYXRpdmUuanMiOjM0Mn1dLDM0NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9fSx7fV0sMzQ1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bih0WzBdLHRbMV0sdFsyXSksbz1uKGVbMF0sZVsxXSxlWzJdKTtpKHIsciksaShvLG8pO3ZhciBzPWEocixvKTtyZXR1cm4gcz4xPzA6TWF0aC5hY29zKHMpfTt2YXIgbj10KCIuL2Zyb21WYWx1ZXMiKSxpPXQoIi4vbm9ybWFsaXplIiksYT10KCIuL2RvdCIpfSx7Ii4vZG90IjozNTUsIi4vZnJvbVZhbHVlcyI6MzYxLCIuL25vcm1hbGl6ZSI6MzcyfV0sMzQ2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5jZWlsKGVbMF0pLHRbMV09TWF0aC5jZWlsKGVbMV0pLHRbMl09TWF0aC5jZWlsKGVbMl0pLHR9fSx7fV0sMzQ3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBGbG9hdDMyQXJyYXkoMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9fSx7fV0sMzQ4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09ZVswXSx0WzFdPWVbMV0sdFsyXT1lWzJdLHR9fSx7fV0sMzQ5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdH19LHt9XSwzNTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXTtyZXR1cm4gdFswXT1pKmwtYSpzLHRbMV09YSpvLW4qbCx0WzJdPW4qcy1pKm8sdH19LHt9XSwzNTE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXN0YW5jZSIpfSx7Ii4vZGlzdGFuY2UiOjM1Mn1dLDM1MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0tdFswXSxuPWVbMV0tdFsxXSxpPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4raSppKX19LHt9XSwzNTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9kaXZpZGUiKX0seyIuL2RpdmlkZSI6MzU0fV0sMzU0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdL3JbMF0sdFsxXT1lWzFdL3JbMV0sdFsyXT1lWzJdL3JbMl0sdH19LHt9XSwzNTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19fSx7fV0sMzU2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPTFlLTZ9LHt9XSwzNTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLGk9dFsxXSxhPXRbMl0sbz1lWzBdLHM9ZVsxXSxsPWVbMl07cmV0dXJuIE1hdGguYWJzKHItbyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhyKSxNYXRoLmFicyhvKSkmJk1hdGguYWJzKGktcyk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhpKSxNYXRoLmFicyhzKSkmJk1hdGguYWJzKGEtbCk8PW4qTWF0aC5tYXgoMSxNYXRoLmFicyhhKSxNYXRoLmFicyhsKSl9O3ZhciBuPXQoIi4vZXBzaWxvbiIpfSx7Ii4vZXBzaWxvbiI6MzU2fV0sMzU4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiZ0WzFdPT09ZVsxXSYmdFsyXT09PWVbMl19fSx7fV0sMzU5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5mbG9vcihlWzBdKSx0WzFdPU1hdGguZmxvb3IoZVsxXSksdFsyXT1NYXRoLmZsb29yKGVbMl0pLHR9fSx7fV0sMzYwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGksYSxvKXt2YXIgcyxsO2V8fChlPTMpO3J8fChyPTApO2w9aT9NYXRoLm1pbihpKmUrcix0Lmxlbmd0aCk6dC5sZW5ndGg7Zm9yKHM9cjtzPGw7cys9ZSluWzBdPXRbc10sblsxXT10W3MrMV0sblsyXT10W3MrMl0sYShuLG4sbyksdFtzXT1uWzBdLHRbcysxXT1uWzFdLHRbcysyXT1uWzJdO3JldHVybiB0fTt2YXIgbj10KCIuL2NyZWF0ZSIpKCl9LHsiLi9jcmVhdGUiOjM0OX1dLDM2MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IEZsb2F0MzJBcnJheSgzKTtyZXR1cm4gblswXT10LG5bMV09ZSxuWzJdPXIsbn19LHt9XSwzNjI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9e0VQU0lMT046dCgiLi9lcHNpbG9uIiksY3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGFuZ2xlOnQoIi4vYW5nbGUiKSxmcm9tVmFsdWVzOnQoIi4vZnJvbVZhbHVlcyIpLGNvcHk6dCgiLi9jb3B5Iiksc2V0OnQoIi4vc2V0IiksZXF1YWxzOnQoIi4vZXF1YWxzIiksZXhhY3RFcXVhbHM6dCgiLi9leGFjdEVxdWFscyIpLGFkZDp0KCIuL2FkZCIpLHN1YnRyYWN0OnQoIi4vc3VidHJhY3QiKSxzdWI6dCgiLi9zdWIiKSxtdWx0aXBseTp0KCIuL211bHRpcGx5IiksbXVsOnQoIi4vbXVsIiksZGl2aWRlOnQoIi4vZGl2aWRlIiksZGl2OnQoIi4vZGl2IiksbWluOnQoIi4vbWluIiksbWF4OnQoIi4vbWF4IiksZmxvb3I6dCgiLi9mbG9vciIpLGNlaWw6dCgiLi9jZWlsIikscm91bmQ6dCgiLi9yb3VuZCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLGRpc3Q6dCgiLi9kaXN0Iiksc3F1YXJlZERpc3RhbmNlOnQoIi4vc3F1YXJlZERpc3RhbmNlIiksc3FyRGlzdDp0KCIuL3NxckRpc3QiKSxsZW5ndGg6dCgiLi9sZW5ndGgiKSxsZW46dCgiLi9sZW4iKSxzcXVhcmVkTGVuZ3RoOnQoIi4vc3F1YXJlZExlbmd0aCIpLHNxckxlbjp0KCIuL3NxckxlbiIpLG5lZ2F0ZTp0KCIuL25lZ2F0ZSIpLGludmVyc2U6dCgiLi9pbnZlcnNlIiksbm9ybWFsaXplOnQoIi4vbm9ybWFsaXplIiksZG90OnQoIi4vZG90IiksY3Jvc3M6dCgiLi9jcm9zcyIpLGxlcnA6dCgiLi9sZXJwIikscmFuZG9tOnQoIi4vcmFuZG9tIiksdHJhbnNmb3JtTWF0NDp0KCIuL3RyYW5zZm9ybU1hdDQiKSx0cmFuc2Zvcm1NYXQzOnQoIi4vdHJhbnNmb3JtTWF0MyIpLHRyYW5zZm9ybVF1YXQ6dCgiLi90cmFuc2Zvcm1RdWF0Iikscm90YXRlWDp0KCIuL3JvdGF0ZVgiKSxyb3RhdGVZOnQoIi4vcm90YXRlWSIpLHJvdGF0ZVo6dCgiLi9yb3RhdGVaIiksZm9yRWFjaDp0KCIuL2ZvckVhY2giKX19LHsiLi9hZGQiOjM0NCwiLi9hbmdsZSI6MzQ1LCIuL2NlaWwiOjM0NiwiLi9jbG9uZSI6MzQ3LCIuL2NvcHkiOjM0OCwiLi9jcmVhdGUiOjM0OSwiLi9jcm9zcyI6MzUwLCIuL2Rpc3QiOjM1MSwiLi9kaXN0YW5jZSI6MzUyLCIuL2RpdiI6MzUzLCIuL2RpdmlkZSI6MzU0LCIuL2RvdCI6MzU1LCIuL2Vwc2lsb24iOjM1NiwiLi9lcXVhbHMiOjM1NywiLi9leGFjdEVxdWFscyI6MzU4LCIuL2Zsb29yIjozNTksIi4vZm9yRWFjaCI6MzYwLCIuL2Zyb21WYWx1ZXMiOjM2MSwiLi9pbnZlcnNlIjozNjMsIi4vbGVuIjozNjQsIi4vbGVuZ3RoIjozNjUsIi4vbGVycCI6MzY2LCIuL21heCI6MzY3LCIuL21pbiI6MzY4LCIuL211bCI6MzY5LCIuL211bHRpcGx5IjozNzAsIi4vbmVnYXRlIjozNzEsIi4vbm9ybWFsaXplIjozNzIsIi4vcmFuZG9tIjozNzMsIi4vcm90YXRlWCI6Mzc0LCIuL3JvdGF0ZVkiOjM3NSwiLi9yb3RhdGVaIjozNzYsIi4vcm91bmQiOjM3NywiLi9zY2FsZSI6Mzc4LCIuL3NjYWxlQW5kQWRkIjozNzksIi4vc2V0IjozODAsIi4vc3FyRGlzdCI6MzgxLCIuL3NxckxlbiI6MzgyLCIuL3NxdWFyZWREaXN0YW5jZSI6MzgzLCIuL3NxdWFyZWRMZW5ndGgiOjM4NCwiLi9zdWIiOjM4NSwiLi9zdWJ0cmFjdCI6Mzg2LCIuL3RyYW5zZm9ybU1hdDMiOjM4NywiLi90cmFuc2Zvcm1NYXQ0IjozODgsIi4vdHJhbnNmb3JtUXVhdCI6Mzg5fV0sMzYzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09MS9lWzBdLHRbMV09MS9lWzFdLHRbMl09MS9lWzJdLHR9fSx7fV0sMzY0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbGVuZ3RoIil9LHsiLi9sZW5ndGgiOjM2NX1dLDM2NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIE1hdGguc3FydChlKmUrcipyK24qbil9fSx7fV0sMzY2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXTtyZXR1cm4gdFswXT1pK24qKHJbMF0taSksdFsxXT1hK24qKHJbMV0tYSksdFsyXT1vK24qKHJbMl0tbyksdH19LHt9XSwzNjc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KGVbMF0sclswXSksdFsxXT1NYXRoLm1heChlWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoZVsyXSxyWzJdKSx0fX0se31dLDM2ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09TWF0aC5taW4oZVswXSxyWzBdKSx0WzFdPU1hdGgubWluKGVbMV0sclsxXSksdFsyXT1NYXRoLm1pbihlWzJdLHJbMl0pLHR9fSx7fV0sMzY5OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoIi4vbXVsdGlwbHkiKX0seyIuL211bHRpcGx5IjozNzB9XSwzNzA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0qclswXSx0WzFdPWVbMV0qclsxXSx0WzJdPWVbMl0qclsyXSx0fX0se31dLDM3MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdPS1lWzBdLHRbMV09LWVbMV0sdFsyXT0tZVsyXSx0fX0se31dLDM3MjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPXIqcituKm4raSppO2E+MCYmKGE9MS9NYXRoLnNxcnQoYSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEpO3JldHVybiB0fX0se31dLDM3MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2U9ZXx8MTt2YXIgcj0yKk1hdGgucmFuZG9tKCkqTWF0aC5QSSxuPTIqTWF0aC5yYW5kb20oKS0xLGk9TWF0aC5zcXJ0KDEtbipuKSplO3JldHVybiB0WzBdPU1hdGguY29zKHIpKmksdFsxXT1NYXRoLnNpbihyKSppLHRbMl09biplLHR9fSx7fV0sMzc0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMV0sYT1yWzJdLG89ZVsxXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1lWzBdLHRbMV09aStvKmMtcypsLHRbMl09YStvKmwrcypjLHR9fSx7fV0sMzc1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzJdLG89ZVswXS1pLHM9ZVsyXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK3MqbCtvKmMsdFsxXT1lWzFdLHRbMl09YStzKmMtbypsLHR9fSx7fV0sMzc2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89ZVswXS1pLHM9ZVsxXS1hLGw9TWF0aC5zaW4obiksYz1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1pK28qYy1zKmwsdFsxXT1hK28qbCtzKmMsdFsyXT1lWzJdLHR9fSx7fV0sMzc3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF09TWF0aC5yb3VuZChlWzBdKSx0WzFdPU1hdGgucm91bmQoZVsxXSksdFsyXT1NYXRoLnJvdW5kKGVbMl0pLHR9fSx7fV0sMzc4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdH19LHt9XSwzNzk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHR9fSx7fV0sMzgwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0WzBdPWUsdFsxXT1yLHRbMl09bix0fX0se31dLDM4MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3NxdWFyZWREaXN0YW5jZSIpfSx7Ii4vc3F1YXJlZERpc3RhbmNlIjozODN9XSwzODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiLi9zcXVhcmVkTGVuZ3RoIil9LHsiLi9zcXVhcmVkTGVuZ3RoIjozODR9XSwzODM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLXRbMF0sbj1lWzFdLXRbMV0saT1lWzJdLXRbMl07cmV0dXJuIHIqcituKm4raSppfX0se31dLDM4NDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9dFsxXSxuPXRbMl07cmV0dXJuIGUqZStyKnIrbipufX0se31dLDM4NTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz10KCIuL3N1YnRyYWN0Iil9LHsiLi9zdWJ0cmFjdCI6Mzg2fV0sMzg2OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH19LHt9XSwzODc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXTtyZXR1cm4gdFswXT1uKnJbMF0raSpyWzNdK2Eqcls2XSx0WzFdPW4qclsxXStpKnJbNF0rYSpyWzddLHRbMl09bipyWzJdK2kqcls1XSthKnJbOF0sdH19LHt9XSwzODg6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qbityWzRdKmkrcls4XSphK3JbMTJdKS9vLHRbMV09KHJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKS9vLHRbMl09KHJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSkvbyx0fX0se31dLDM4OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdLGM9clszXSx1PWMqbitzKmEtbCppLGY9YyppK2wqbi1vKmEsaD1jKmErbyppLXMqbixwPS1vKm4tcyppLWwqYTtyZXR1cm4gdFswXT11KmMrcCotbytmKi1sLWgqLXMsdFsxXT1mKmMrcCotcytoKi1vLXUqLWwsdFsyXT1oKmMrcCotbCt1Ki1zLWYqLW8sdH19LHt9XSwzOTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0rclswXSx0WzFdPWVbMV0rclsxXSx0WzJdPWVbMl0rclsyXSx0WzNdPWVbM10rclszXSx0fX0se31dLDM5MTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KDQpO3JldHVybiBlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZX19LHt9XSwzOTI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT1lWzBdLHRbMV09ZVsxXSx0WzJdPWVbMl0sdFszXT1lWzNdLHR9fSx7fV0sMzkzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSg0KTtyZXR1cm4gdFswXT0wLHRbMV09MCx0WzJdPTAsdFszXT0wLHR9fSx7fV0sMzk0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiBNYXRoLnNxcnQocipyK24qbitpKmkrYSphKX19LHt9XSwzOTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0vclswXSx0WzFdPWVbMV0vclsxXSx0WzJdPWVbMl0vclsyXSx0WzNdPWVbM10vclszXSx0fX0se31dLDM5NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0WzBdKmVbMF0rdFsxXSplWzFdK3RbMl0qZVsyXSt0WzNdKmVbM119fSx7fV0sMzk3OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBGbG9hdDMyQXJyYXkoNCk7cmV0dXJuIGlbMF09dCxpWzFdPWUsaVsyXT1yLGlbM109bixpfX0se31dLDM5ODpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz17Y3JlYXRlOnQoIi4vY3JlYXRlIiksY2xvbmU6dCgiLi9jbG9uZSIpLGZyb21WYWx1ZXM6dCgiLi9mcm9tVmFsdWVzIiksY29weTp0KCIuL2NvcHkiKSxzZXQ6dCgiLi9zZXQiKSxhZGQ6dCgiLi9hZGQiKSxzdWJ0cmFjdDp0KCIuL3N1YnRyYWN0IiksbXVsdGlwbHk6dCgiLi9tdWx0aXBseSIpLGRpdmlkZTp0KCIuL2RpdmlkZSIpLG1pbjp0KCIuL21pbiIpLG1heDp0KCIuL21heCIpLHNjYWxlOnQoIi4vc2NhbGUiKSxzY2FsZUFuZEFkZDp0KCIuL3NjYWxlQW5kQWRkIiksZGlzdGFuY2U6dCgiLi9kaXN0YW5jZSIpLHNxdWFyZWREaXN0YW5jZTp0KCIuL3NxdWFyZWREaXN0YW5jZSIpLGxlbmd0aDp0KCIuL2xlbmd0aCIpLHNxdWFyZWRMZW5ndGg6dCgiLi9zcXVhcmVkTGVuZ3RoIiksbmVnYXRlOnQoIi4vbmVnYXRlIiksaW52ZXJzZTp0KCIuL2ludmVyc2UiKSxub3JtYWxpemU6dCgiLi9ub3JtYWxpemUiKSxkb3Q6dCgiLi9kb3QiKSxsZXJwOnQoIi4vbGVycCIpLHJhbmRvbTp0KCIuL3JhbmRvbSIpLHRyYW5zZm9ybU1hdDQ6dCgiLi90cmFuc2Zvcm1NYXQ0IiksdHJhbnNmb3JtUXVhdDp0KCIuL3RyYW5zZm9ybVF1YXQiKX19LHsiLi9hZGQiOjM5MCwiLi9jbG9uZSI6MzkxLCIuL2NvcHkiOjM5MiwiLi9jcmVhdGUiOjM5MywiLi9kaXN0YW5jZSI6Mzk0LCIuL2RpdmlkZSI6Mzk1LCIuL2RvdCI6Mzk2LCIuL2Zyb21WYWx1ZXMiOjM5NywiLi9pbnZlcnNlIjozOTksIi4vbGVuZ3RoIjo0MDAsIi4vbGVycCI6NDAxLCIuL21heCI6NDAyLCIuL21pbiI6NDAzLCIuL211bHRpcGx5Ijo0MDQsIi4vbmVnYXRlIjo0MDUsIi4vbm9ybWFsaXplIjo0MDYsIi4vcmFuZG9tIjo0MDcsIi4vc2NhbGUiOjQwOCwiLi9zY2FsZUFuZEFkZCI6NDA5LCIuL3NldCI6NDEwLCIuL3NxdWFyZWREaXN0YW5jZSI6NDExLCIuL3NxdWFyZWRMZW5ndGgiOjQxMiwiLi9zdWJ0cmFjdCI6NDEzLCIuL3RyYW5zZm9ybU1hdDQiOjQxNCwiLi90cmFuc2Zvcm1RdWF0Ijo0MTV9XSwzOTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0xL2VbMF0sdFsxXT0xL2VbMV0sdFsyXT0xL2VbMl0sdFszXT0xL2VbM10sdH19LHt9XSw0MDA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPXRbMV0sbj10WzJdLGk9dFszXTtyZXR1cm4gTWF0aC5zcXJ0KGUqZStyKnIrbipuK2kqaSl9fSx7fV0sNDAxOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWVbMF0sYT1lWzFdLG89ZVsyXSxzPWVbM107cmV0dXJuIHRbMF09aStuKihyWzBdLWkpLHRbMV09YStuKihyWzFdLWEpLHRbMl09bytuKihyWzJdLW8pLHRbM109cytuKihyWzNdLXMpLHR9fSx7fV0sNDAyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1heChlWzBdLHJbMF0pLHRbMV09TWF0aC5tYXgoZVsxXSxyWzFdKSx0WzJdPU1hdGgubWF4KGVbMl0sclsyXSksdFszXT1NYXRoLm1heChlWzNdLHJbM10pLHR9fSx7fV0sNDAzOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihlWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oZVsxXSxyWzFdKSx0WzJdPU1hdGgubWluKGVbMl0sclsyXSksdFszXT1NYXRoLm1pbihlWzNdLHJbM10pLHR9fSx7fV0sNDA0OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnJbMF0sdFsxXT1lWzFdKnJbMV0sdFsyXT1lWzJdKnJbMl0sdFszXT1lWzNdKnJbM10sdH19LHt9XSw0MDU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXT0tZVswXSx0WzFdPS1lWzFdLHRbMl09LWVbMl0sdFszXT0tZVszXSx0fX0se31dLDQwNjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1yKnIrbipuK2kqaSthKmE7bz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPW4qbyx0WzJdPWkqbyx0WzNdPWEqbyk7cmV0dXJuIHR9fSx7fV0sNDA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoIi4vc2NhbGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHwxLHRbMF09TWF0aC5yYW5kb20oKSx0WzFdPU1hdGgucmFuZG9tKCksdFsyXT1NYXRoLnJhbmRvbSgpLHRbM109TWF0aC5yYW5kb20oKSxuKHQsdCksaSh0LHQsZSksdH19LHsiLi9ub3JtYWxpemUiOjQwNiwiLi9zY2FsZSI6NDA4fV0sNDA4OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdKnIsdFsxXT1lWzFdKnIsdFsyXT1lWzJdKnIsdFszXT1lWzNdKnIsdH19LHt9XSw0MDk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRbMF09ZVswXStyWzBdKm4sdFsxXT1lWzFdK3JbMV0qbix0WzJdPWVbMl0rclsyXSpuLHRbM109ZVszXStyWzNdKm4sdH19LHt9XSw0MTA6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdFswXT1lLHRbMV09cix0WzJdPW4sdFszXT1pLHR9fSx7fV0sNDExOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS10WzBdLG49ZVsxXS10WzFdLGk9ZVsyXS10WzJdLGE9ZVszXS10WzNdO3JldHVybiByKnIrbipuK2kqaSthKmF9fSx7fV0sNDEyOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuIGUqZStyKnIrbipuK2kqaX19LHt9XSw0MTM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0WzBdPWVbMF0tclswXSx0WzFdPWVbMV0tclsxXSx0WzJdPWVbMl0tclsyXSx0WzNdPWVbM10tclszXSx0fX0se31dLDQxNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89ZVszXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbOF0qYStyWzEyXSpvLHRbMV09clsxXSpuK3JbNV0qaStyWzldKmErclsxM10qbyx0WzJdPXJbMl0qbityWzZdKmkrclsxMF0qYStyWzE0XSpvLHRbM109clszXSpuK3JbN10qaStyWzExXSphK3JbMTVdKm8sdH19LHt9XSw0MTU6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPXJbMF0scz1yWzFdLGw9clsyXSxjPXJbM10sdT1jKm4rcyphLWwqaSxmPWMqaStsKm4tbyphLGg9YyphK28qaS1zKm4scD0tbypuLXMqaS1sKmE7cmV0dXJuIHRbMF09dSpjK3AqLW8rZiotbC1oKi1zLHRbMV09ZipjK3AqLXMraCotby11Ki1sLHRbMl09aCpjK3AqLWwrdSotcy1mKi1vLHRbM109ZVszXSx0fX0se31dLDQxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsc2wtdG9rZW5pemVyIiksaT10KCJhdG9iLWxpdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPUFycmF5LmlzQXJyYXkodCk/dDpuKHQpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIGE9ZVtyXTtpZigicHJlcHJvY2Vzc29yIj09PWEudHlwZSl7dmFyIG89YS5kYXRhLm1hdGNoKC9cI2RlZmluZVxzK1NIQURFUl9OQU1FKF9CNjQpP1xzKyguKykkLyk7aWYobyYmb1syXSl7dmFyIHM9b1sxXSxsPW9bMl07cmV0dXJuKHM/aShsKTpsKS50cmltKCl9fX19fSx7ImF0b2ItbGl0ZSI6ODAsImdsc2wtdG9rZW5pemVyIjo0MjN9XSw0MTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixjLHU9MCxmPTAsaD05OTkscD1bXSxkPVtdLG09MSxnPTAsdj0wLHk9ITEseD0hMSxiPSIiLF89YSx3PW47IjMwMCBlcyI9PT0odD10fHx7fSkudmVyc2lvbiYmKF89cyx3PW8pO3ZhciBUPXt9LGs9e307Zm9yKHU9MDt1PF8ubGVuZ3RoO3UrKylUW19bdV1dPSEwO2Zvcih1PTA7dTx3Lmxlbmd0aDt1Kyspa1t3W3VdXT0hMDtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGQ9W10sbnVsbCE9PXQ/ZnVuY3Rpb24odCl7dT0wLHQudG9TdHJpbmcmJih0PXQudG9TdHJpbmcoKSk7dmFyIHI7Yis9dC5yZXBsYWNlKC9cclxuL2csIlxuIiksYz1iLmxlbmd0aDtmb3IoO2U9Ylt1XSx1PGM7KXtzd2l0Y2gocj11LGgpe2Nhc2UgMDp1PUwoKTticmVhaztjYXNlIDE6Y2FzZSAyOnU9RSgpO2JyZWFrO2Nhc2UgMzp1PUMoKTticmVhaztjYXNlIDQ6dT1PKCk7YnJlYWs7Y2FzZSAxMTp1PUkoKTticmVhaztjYXNlIDU6dT16KCk7YnJlYWs7Y2FzZSA5OTk5OnU9RCgpO2JyZWFrO2Nhc2UgOTp1PVMoKTticmVhaztjYXNlIDk5OTp1PU0oKX1pZihyIT09dSlzd2l0Y2goYltyXSl7Y2FzZSJcbiI6Zz0wLCsrbTticmVhaztkZWZhdWx0OisrZ319cmV0dXJuIGYrPXUsYj1iLnNsaWNlKHUpLGR9KHQpOmZ1bmN0aW9uKHQpe3AubGVuZ3RoJiZBKHAuam9pbigiIikpO3JldHVybiBoPTEwLEEoIihlb2YpIiksZH0oKX07ZnVuY3Rpb24gQSh0KXt0Lmxlbmd0aCYmZC5wdXNoKHt0eXBlOmxbaF0sZGF0YTp0LHBvc2l0aW9uOnYsbGluZTptLGNvbHVtbjpnfSl9ZnVuY3Rpb24gTSgpe3JldHVybiBwPXAubGVuZ3RoP1tdOnAsIi8iPT09ciYmIioiPT09ZT8odj1mK3UtMSxoPTAscj1lLHUrMSk6Ii8iPT09ciYmIi8iPT09ZT8odj1mK3UtMSxoPTEscj1lLHUrMSk6IiMiPT09ZT8oaD0yLHY9Zit1LHUpOi9ccy8udGVzdChlKT8oaD05LHY9Zit1LHUpOih5PS9cZC8udGVzdChlKSx4PS9bXlx3X10vLnRlc3QoZSksdj1mK3UsaD15PzQ6eD8zOjk5OTksdSl9ZnVuY3Rpb24gUygpe3JldHVybi9bXlxzXS9nLnRlc3QoZSk/KEEocC5qb2luKCIiKSksaD05OTksdSk6KHAucHVzaChlKSxyPWUsdSsxKX1mdW5jdGlvbiBFKCl7cmV0dXJuIlxyIiE9PWUmJiJcbiIhPT1lfHwiXFwiPT09cj8ocC5wdXNoKGUpLHI9ZSx1KzEpOihBKHAuam9pbigiIikpLGg9OTk5LHUpfWZ1bmN0aW9uIEwoKXtyZXR1cm4iLyI9PT1lJiYiKiI9PT1yPyhwLnB1c2goZSksQShwLmpvaW4oIiIpKSxoPTk5OSx1KzEpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gQygpe2lmKCIuIj09PXImJi9cZC8udGVzdChlKSlyZXR1cm4gaD01LHU7aWYoIi8iPT09ciYmIioiPT09ZSlyZXR1cm4gaD0wLHU7aWYoIi8iPT09ciYmIi8iPT09ZSlyZXR1cm4gaD0xLHU7aWYoIi4iPT09ZSYmcC5sZW5ndGgpe2Zvcig7UChwKTspO3JldHVybiBoPTUsdX1pZigiOyI9PT1lfHwiKSI9PT1lfHwiKCI9PT1lKXtpZihwLmxlbmd0aClmb3IoO1AocCk7KTtyZXR1cm4gQShlKSxoPTk5OSx1KzF9dmFyIHQ9Mj09PXAubGVuZ3RoJiYiPSIhPT1lO2lmKC9bXHdfXGRcc10vLnRlc3QoZSl8fHQpe2Zvcig7UChwKTspO3JldHVybiBoPTk5OSx1fXJldHVybiBwLnB1c2goZSkscj1lLHUrMX1mdW5jdGlvbiBQKHQpe2Zvcih2YXIgZSxyLG49MDs7KXtpZihlPWkuaW5kZXhPZih0LnNsaWNlKDAsdC5sZW5ndGgrbikuam9pbigiIikpLHI9aVtlXSwtMT09PWUpe2lmKG4tLSt0Lmxlbmd0aD4wKWNvbnRpbnVlO3I9dC5zbGljZSgwLDEpLmpvaW4oIiIpfXJldHVybiBBKHIpLHYrPXIubGVuZ3RoLChwPXAuc2xpY2Uoci5sZW5ndGgpKS5sZW5ndGh9fWZ1bmN0aW9uIEkoKXtyZXR1cm4vW15hLWZBLUYwLTldLy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24gTygpe3JldHVybiIuIj09PWV8fC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSksaD01LHI9ZSx1KzEpOiJ4Ij09PWUmJjE9PT1wLmxlbmd0aCYmIjAiPT09cFswXT8oaD0xMSxwLnB1c2goZSkscj1lLHUrMSk6L1teXGRdLy50ZXN0KGUpPyhBKHAuam9pbigiIikpLGg9OTk5LHUpOihwLnB1c2goZSkscj1lLHUrMSl9ZnVuY3Rpb24geigpe3JldHVybiJmIj09PWUmJihwLnB1c2goZSkscj1lLHUrPTEpLC9bZUVdLy50ZXN0KGUpPyhwLnB1c2goZSkscj1lLHUrMSk6KCItIiE9PWUmJiIrIiE9PWV8fCEvW2VFXS8udGVzdChyKSkmJi9bXlxkXS8udGVzdChlKT8oQShwLmpvaW4oIiIpKSxoPTk5OSx1KToocC5wdXNoKGUpLHI9ZSx1KzEpfWZ1bmN0aW9uIEQoKXtpZigvW15cZFx3X10vLnRlc3QoZSkpe3ZhciB0PXAuam9pbigiIik7cmV0dXJuIGg9a1t0XT84OlRbdF0/Nzo2LEEocC5qb2luKCIiKSksaD05OTksdX1yZXR1cm4gcC5wdXNoKGUpLHI9ZSx1KzF9fTt2YXIgbj10KCIuL2xpYi9saXRlcmFscyIpLGk9dCgiLi9saWIvb3BlcmF0b3JzIiksYT10KCIuL2xpYi9idWlsdGlucyIpLG89dCgiLi9saWIvbGl0ZXJhbHMtMzAwZXMiKSxzPXQoIi4vbGliL2J1aWx0aW5zLTMwMGVzIiksbD1bImJsb2NrLWNvbW1lbnQiLCJsaW5lLWNvbW1lbnQiLCJwcmVwcm9jZXNzb3IiLCJvcGVyYXRvciIsImludGVnZXIiLCJmbG9hdCIsImlkZW50IiwiYnVpbHRpbiIsImtleXdvcmQiLCJ3aGl0ZXNwYWNlIiwiZW9mIiwiaW50ZWdlciJdfSx7Ii4vbGliL2J1aWx0aW5zIjo0MTksIi4vbGliL2J1aWx0aW5zLTMwMGVzIjo0MTgsIi4vbGliL2xpdGVyYWxzIjo0MjEsIi4vbGliL2xpdGVyYWxzLTMwMGVzIjo0MjAsIi4vbGliL29wZXJhdG9ycyI6NDIyfV0sNDE4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9idWlsdGlucyIpO249bi5zbGljZSgpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIS9eKGdsXF98dGV4dHVyZSkvLnRlc3QodCl9KSksZS5leHBvcnRzPW4uY29uY2F0KFsiZ2xfVmVydGV4SUQiLCJnbF9JbnN0YW5jZUlEIiwiZ2xfUG9zaXRpb24iLCJnbF9Qb2ludFNpemUiLCJnbF9GcmFnQ29vcmQiLCJnbF9Gcm9udEZhY2luZyIsImdsX0ZyYWdEZXB0aCIsImdsX1BvaW50Q29vcmQiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhPdXRwdXRWZWN0b3JzIiwiZ2xfTWF4RnJhZ21lbnRJbnB1dFZlY3RvcnMiLCJnbF9NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMiLCJnbF9NYXhEcmF3QnVmZmVycyIsImdsX01pblByb2dyYW1UZXhlbE9mZnNldCIsImdsX01heFByb2dyYW1UZXhlbE9mZnNldCIsImdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIiwiZ2xfRGVwdGhSYW5nZSIsInRydW5jIiwicm91bmQiLCJyb3VuZEV2ZW4iLCJpc25hbiIsImlzaW5mIiwiZmxvYXRCaXRzVG9JbnQiLCJmbG9hdEJpdHNUb1VpbnQiLCJpbnRCaXRzVG9GbG9hdCIsInVpbnRCaXRzVG9GbG9hdCIsInBhY2tTbm9ybTJ4MTYiLCJ1bnBhY2tTbm9ybTJ4MTYiLCJwYWNrVW5vcm0yeDE2IiwidW5wYWNrVW5vcm0yeDE2IiwicGFja0hhbGYyeDE2IiwidW5wYWNrSGFsZjJ4MTYiLCJvdXRlclByb2R1Y3QiLCJ0cmFuc3Bvc2UiLCJkZXRlcm1pbmFudCIsImludmVyc2UiLCJ0ZXh0dXJlIiwidGV4dHVyZVNpemUiLCJ0ZXh0dXJlUHJvaiIsInRleHR1cmVMb2QiLCJ0ZXh0dXJlT2Zmc2V0IiwidGV4ZWxGZXRjaCIsInRleGVsRmV0Y2hPZmZzZXQiLCJ0ZXh0dXJlUHJvak9mZnNldCIsInRleHR1cmVMb2RPZmZzZXQiLCJ0ZXh0dXJlUHJvakxvZCIsInRleHR1cmVQcm9qTG9kT2Zmc2V0IiwidGV4dHVyZUdyYWQiLCJ0ZXh0dXJlR3JhZE9mZnNldCIsInRleHR1cmVQcm9qR3JhZCIsInRleHR1cmVQcm9qR3JhZE9mZnNldCJdKX0seyIuL2J1aWx0aW5zIjo0MTl9XSw0MTk6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9WyJhYnMiLCJhY29zIiwiYWxsIiwiYW55IiwiYXNpbiIsImF0YW4iLCJjZWlsIiwiY2xhbXAiLCJjb3MiLCJjcm9zcyIsImRGZHgiLCJkRmR5IiwiZGVncmVlcyIsImRpc3RhbmNlIiwiZG90IiwiZXF1YWwiLCJleHAiLCJleHAyIiwiZmFjZWZvcndhcmQiLCJmbG9vciIsImZyYWN0IiwiZ2xfQmFja0NvbG9yIiwiZ2xfQmFja0xpZ2h0TW9kZWxQcm9kdWN0IiwiZ2xfQmFja0xpZ2h0UHJvZHVjdCIsImdsX0JhY2tNYXRlcmlhbCIsImdsX0JhY2tTZWNvbmRhcnlDb2xvciIsImdsX0NsaXBQbGFuZSIsImdsX0NsaXBWZXJ0ZXgiLCJnbF9Db2xvciIsImdsX0RlcHRoUmFuZ2UiLCJnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyIsImdsX0V5ZVBsYW5lUSIsImdsX0V5ZVBsYW5lUiIsImdsX0V5ZVBsYW5lUyIsImdsX0V5ZVBsYW5lVCIsImdsX0ZvZyIsImdsX0ZvZ0Nvb3JkIiwiZ2xfRm9nRnJhZ0Nvb3JkIiwiZ2xfRm9nUGFyYW1ldGVycyIsImdsX0ZyYWdDb2xvciIsImdsX0ZyYWdDb29yZCIsImdsX0ZyYWdEYXRhIiwiZ2xfRnJhZ0RlcHRoIiwiZ2xfRnJhZ0RlcHRoRVhUIiwiZ2xfRnJvbnRDb2xvciIsImdsX0Zyb250RmFjaW5nIiwiZ2xfRnJvbnRMaWdodE1vZGVsUHJvZHVjdCIsImdsX0Zyb250TGlnaHRQcm9kdWN0IiwiZ2xfRnJvbnRNYXRlcmlhbCIsImdsX0Zyb250U2Vjb25kYXJ5Q29sb3IiLCJnbF9MaWdodE1vZGVsIiwiZ2xfTGlnaHRNb2RlbFBhcmFtZXRlcnMiLCJnbF9MaWdodE1vZGVsUHJvZHVjdHMiLCJnbF9MaWdodFByb2R1Y3RzIiwiZ2xfTGlnaHRTb3VyY2UiLCJnbF9MaWdodFNvdXJjZVBhcmFtZXRlcnMiLCJnbF9NYXRlcmlhbFBhcmFtZXRlcnMiLCJnbF9NYXhDbGlwUGxhbmVzIiwiZ2xfTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heERyYXdCdWZmZXJzIiwiZ2xfTWF4RnJhZ21lbnRVbmlmb3JtQ29tcG9uZW50cyIsImdsX01heExpZ2h0cyIsImdsX01heFRleHR1cmVDb29yZHMiLCJnbF9NYXhUZXh0dXJlSW1hZ2VVbml0cyIsImdsX01heFRleHR1cmVVbml0cyIsImdsX01heFZhcnlpbmdGbG9hdHMiLCJnbF9NYXhWZXJ0ZXhBdHRyaWJzIiwiZ2xfTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMiLCJnbF9NYXhWZXJ0ZXhVbmlmb3JtQ29tcG9uZW50cyIsImdsX01vZGVsVmlld01hdHJpeCIsImdsX01vZGVsVmlld01hdHJpeEludmVyc2UiLCJnbF9Nb2RlbFZpZXdNYXRyaXhJbnZlcnNlVHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3TWF0cml4VHJhbnNwb3NlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCIsImdsX01vZGVsVmlld1Byb2plY3Rpb25NYXRyaXhJbnZlcnNlIiwiZ2xfTW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9Nb2RlbFZpZXdQcm9qZWN0aW9uTWF0cml4VHJhbnNwb3NlIiwiZ2xfTXVsdGlUZXhDb29yZDAiLCJnbF9NdWx0aVRleENvb3JkMSIsImdsX011bHRpVGV4Q29vcmQyIiwiZ2xfTXVsdGlUZXhDb29yZDMiLCJnbF9NdWx0aVRleENvb3JkNCIsImdsX011bHRpVGV4Q29vcmQ1IiwiZ2xfTXVsdGlUZXhDb29yZDYiLCJnbF9NdWx0aVRleENvb3JkNyIsImdsX05vcm1hbCIsImdsX05vcm1hbE1hdHJpeCIsImdsX05vcm1hbFNjYWxlIiwiZ2xfT2JqZWN0UGxhbmVRIiwiZ2xfT2JqZWN0UGxhbmVSIiwiZ2xfT2JqZWN0UGxhbmVTIiwiZ2xfT2JqZWN0UGxhbmVUIiwiZ2xfUG9pbnQiLCJnbF9Qb2ludENvb3JkIiwiZ2xfUG9pbnRQYXJhbWV0ZXJzIiwiZ2xfUG9pbnRTaXplIiwiZ2xfUG9zaXRpb24iLCJnbF9Qcm9qZWN0aW9uTWF0cml4IiwiZ2xfUHJvamVjdGlvbk1hdHJpeEludmVyc2UiLCJnbF9Qcm9qZWN0aW9uTWF0cml4SW52ZXJzZVRyYW5zcG9zZSIsImdsX1Byb2plY3Rpb25NYXRyaXhUcmFuc3Bvc2UiLCJnbF9TZWNvbmRhcnlDb2xvciIsImdsX1RleENvb3JkIiwiZ2xfVGV4dHVyZUVudkNvbG9yIiwiZ2xfVGV4dHVyZU1hdHJpeCIsImdsX1RleHR1cmVNYXRyaXhJbnZlcnNlIiwiZ2xfVGV4dHVyZU1hdHJpeEludmVyc2VUcmFuc3Bvc2UiLCJnbF9UZXh0dXJlTWF0cml4VHJhbnNwb3NlIiwiZ2xfVmVydGV4IiwiZ3JlYXRlclRoYW4iLCJncmVhdGVyVGhhbkVxdWFsIiwiaW52ZXJzZXNxcnQiLCJsZW5ndGgiLCJsZXNzVGhhbiIsImxlc3NUaGFuRXF1YWwiLCJsb2ciLCJsb2cyIiwibWF0cml4Q29tcE11bHQiLCJtYXgiLCJtaW4iLCJtaXgiLCJtb2QiLCJub3JtYWxpemUiLCJub3QiLCJub3RFcXVhbCIsInBvdyIsInJhZGlhbnMiLCJyZWZsZWN0IiwicmVmcmFjdCIsInNpZ24iLCJzaW4iLCJzbW9vdGhzdGVwIiwic3FydCIsInN0ZXAiLCJ0YW4iLCJ0ZXh0dXJlMkQiLCJ0ZXh0dXJlMkRMb2QiLCJ0ZXh0dXJlMkRQcm9qIiwidGV4dHVyZTJEUHJvakxvZCIsInRleHR1cmVDdWJlIiwidGV4dHVyZUN1YmVMb2QiLCJ0ZXh0dXJlMkRMb2RFWFQiLCJ0ZXh0dXJlMkRQcm9qTG9kRVhUIiwidGV4dHVyZUN1YmVMb2RFWFQiLCJ0ZXh0dXJlMkRHcmFkRVhUIiwidGV4dHVyZTJEUHJvakdyYWRFWFQiLCJ0ZXh0dXJlQ3ViZUdyYWRFWFQiXX0se31dLDQyMDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vbGl0ZXJhbHMiKTtlLmV4cG9ydHM9bi5zbGljZSgpLmNvbmNhdChbImxheW91dCIsImNlbnRyb2lkIiwic21vb3RoIiwiY2FzZSIsIm1hdDJ4MiIsIm1hdDJ4MyIsIm1hdDJ4NCIsIm1hdDN4MiIsIm1hdDN4MyIsIm1hdDN4NCIsIm1hdDR4MiIsIm1hdDR4MyIsIm1hdDR4NCIsInV2ZWMyIiwidXZlYzMiLCJ1dmVjNCIsInNhbXBsZXJDdWJlU2hhZG93Iiwic2FtcGxlcjJEQXJyYXkiLCJzYW1wbGVyMkRBcnJheVNoYWRvdyIsImlzYW1wbGVyMkQiLCJpc2FtcGxlcjNEIiwiaXNhbXBsZXJDdWJlIiwiaXNhbXBsZXIyREFycmF5IiwidXNhbXBsZXIyRCIsInVzYW1wbGVyM0QiLCJ1c2FtcGxlckN1YmUiLCJ1c2FtcGxlcjJEQXJyYXkiLCJjb2hlcmVudCIsInJlc3RyaWN0IiwicmVhZG9ubHkiLCJ3cml0ZW9ubHkiLCJyZXNvdXJjZSIsImF0b21pY191aW50Iiwibm9wZXJzcGVjdGl2ZSIsInBhdGNoIiwic2FtcGxlIiwic3Vicm91dGluZSIsImNvbW1vbiIsInBhcnRpdGlvbiIsImFjdGl2ZSIsImZpbHRlciIsImltYWdlMUQiLCJpbWFnZTJEIiwiaW1hZ2UzRCIsImltYWdlQ3ViZSIsImlpbWFnZTFEIiwiaWltYWdlMkQiLCJpaW1hZ2UzRCIsImlpbWFnZUN1YmUiLCJ1aW1hZ2UxRCIsInVpbWFnZTJEIiwidWltYWdlM0QiLCJ1aW1hZ2VDdWJlIiwiaW1hZ2UxREFycmF5IiwiaW1hZ2UyREFycmF5IiwiaWltYWdlMURBcnJheSIsImlpbWFnZTJEQXJyYXkiLCJ1aW1hZ2UxREFycmF5IiwidWltYWdlMkRBcnJheSIsImltYWdlMURTaGFkb3ciLCJpbWFnZTJEU2hhZG93IiwiaW1hZ2UxREFycmF5U2hhZG93IiwiaW1hZ2UyREFycmF5U2hhZG93IiwiaW1hZ2VCdWZmZXIiLCJpaW1hZ2VCdWZmZXIiLCJ1aW1hZ2VCdWZmZXIiLCJzYW1wbGVyMURBcnJheSIsInNhbXBsZXIxREFycmF5U2hhZG93IiwiaXNhbXBsZXIxRCIsImlzYW1wbGVyMURBcnJheSIsInVzYW1wbGVyMUQiLCJ1c2FtcGxlcjFEQXJyYXkiLCJpc2FtcGxlcjJEUmVjdCIsInVzYW1wbGVyMkRSZWN0Iiwic2FtcGxlckJ1ZmZlciIsImlzYW1wbGVyQnVmZmVyIiwidXNhbXBsZXJCdWZmZXIiLCJzYW1wbGVyMkRNUyIsImlzYW1wbGVyMkRNUyIsInVzYW1wbGVyMkRNUyIsInNhbXBsZXIyRE1TQXJyYXkiLCJpc2FtcGxlcjJETVNBcnJheSIsInVzYW1wbGVyMkRNU0FycmF5Il0pfSx7Ii4vbGl0ZXJhbHMiOjQyMX1dLDQyMTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bInByZWNpc2lvbiIsImhpZ2hwIiwibWVkaXVtcCIsImxvd3AiLCJhdHRyaWJ1dGUiLCJjb25zdCIsInVuaWZvcm0iLCJ2YXJ5aW5nIiwiYnJlYWsiLCJjb250aW51ZSIsImRvIiwiZm9yIiwid2hpbGUiLCJpZiIsImVsc2UiLCJpbiIsIm91dCIsImlub3V0IiwiZmxvYXQiLCJpbnQiLCJ1aW50Iiwidm9pZCIsImJvb2wiLCJ0cnVlIiwiZmFsc2UiLCJkaXNjYXJkIiwicmV0dXJuIiwibWF0MiIsIm1hdDMiLCJtYXQ0IiwidmVjMiIsInZlYzMiLCJ2ZWM0IiwiaXZlYzIiLCJpdmVjMyIsIml2ZWM0IiwiYnZlYzIiLCJidmVjMyIsImJ2ZWM0Iiwic2FtcGxlcjFEIiwic2FtcGxlcjJEIiwic2FtcGxlcjNEIiwic2FtcGxlckN1YmUiLCJzYW1wbGVyMURTaGFkb3ciLCJzYW1wbGVyMkRTaGFkb3ciLCJzdHJ1Y3QiLCJhc20iLCJjbGFzcyIsInVuaW9uIiwiZW51bSIsInR5cGVkZWYiLCJ0ZW1wbGF0ZSIsInRoaXMiLCJwYWNrZWQiLCJnb3RvIiwic3dpdGNoIiwiZGVmYXVsdCIsImlubGluZSIsIm5vaW5saW5lIiwidm9sYXRpbGUiLCJwdWJsaWMiLCJzdGF0aWMiLCJleHRlcm4iLCJleHRlcm5hbCIsImludGVyZmFjZSIsImxvbmciLCJzaG9ydCIsImRvdWJsZSIsImhhbGYiLCJmaXhlZCIsInVuc2lnbmVkIiwiaW5wdXQiLCJvdXRwdXQiLCJodmVjMiIsImh2ZWMzIiwiaHZlYzQiLCJkdmVjMiIsImR2ZWMzIiwiZHZlYzQiLCJmdmVjMiIsImZ2ZWMzIiwiZnZlYzQiLCJzYW1wbGVyMkRSZWN0Iiwic2FtcGxlcjNEUmVjdCIsInNhbXBsZXIyRFJlY3RTaGFkb3ciLCJzaXplb2YiLCJjYXN0IiwibmFtZXNwYWNlIiwidXNpbmciXX0se31dLDQyMjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1bIjw8PSIsIj4+PSIsIisrIiwiLS0iLCI8PCIsIj4+IiwiPD0iLCI+PSIsIj09IiwiIT0iLCImJiIsInx8IiwiKz0iLCItPSIsIio9IiwiLz0iLCIlPSIsIiY9IiwiXl4iLCJePSIsInw9IiwiKCIsIikiLCJbIiwiXSIsIi4iLCIhIiwifiIsIioiLCIvIiwiJSIsIisiLCItIiwiPCIsIj4iLCImIiwiXiIsInwiLCI/IiwiOiIsIj0iLCIsIiwiOyIsInsiLCJ9Il19LHt9XSw0MjM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuL2luZGV4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKSxpPVtdO3JldHVybiBpPShpPWkuY29uY2F0KHIodCkpKS5jb25jYXQocihudWxsKSl9fSx7Ii4vaW5kZXgiOjQxN31dLDQyNDpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXsic3RyaW5nIj09dHlwZW9mIHQmJih0PVt0XSk7Zm9yKHZhciBlPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpLHI9W10sbj0wO248dC5sZW5ndGgtMTtuKyspci5wdXNoKHRbbl0sZVtuXXx8IiIpO3JldHVybiByLnB1c2godFtuXSksci5qb2luKCIiKX19LHt9XSw0MjU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuLGk9dCgiaXMtYnJvd3NlciIpO249ImZ1bmN0aW9uIj09dHlwZW9mIHIubWF0Y2hNZWRpYT8hci5tYXRjaE1lZGlhKCIoaG92ZXI6IG5vbmUpIikubWF0Y2hlczppLGUuZXhwb3J0cz1ufSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJpcy1icm93c2VyIjo0MzJ9XSw0MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiaXMtYnJvd3NlciIpO2UuZXhwb3J0cz1uJiZmdW5jdGlvbigpe3ZhciB0PSExO3RyeXt2YXIgZT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXt0PSEwfX0pO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLGUpfWNhdGNoKGUpe3Q9ITF9cmV0dXJuIHR9KCl9LHsiaXMtYnJvd3NlciI6NDMyfV0sNDI3OltmdW5jdGlvbih0LGUscil7Ci8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCnIucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scz04Kmktbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2ktMTowLGg9cj8tMToxLHA9dFtlK2ZdO2ZvcihmKz1oLGE9cCYoMTw8LXUpLTEscD4+PS11LHUrPXM7dT4wO2E9MjU2KmErdFtlK2ZdLGYrPWgsdS09OCk7Zm9yKG89YSYoMTw8LXUpLTEsYT4+PS11LHUrPW47dT4wO289MjU2Km8rdFtlK2ZdLGYrPWgsdS09OCk7aWYoMD09PWEpYT0xLWM7ZWxzZXtpZihhPT09bClyZXR1cm4gbz9OYU46MS8wKihwPy0xOjEpO28rPU1hdGgucG93KDIsbiksYS09Y31yZXR1cm4ocD8tMToxKSpvKk1hdGgucG93KDIsYS1uKX0sci53cml0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLG09ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Km19fSx7fV0sNDI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDA9PT1yKXRocm93IG5ldyBFcnJvcigiTXVzdCBoYXZlIGF0IGxlYXN0IGQrMSBwb2ludHMiKTt2YXIgaT10WzBdLmxlbmd0aDtpZihyPD1pKXRocm93IG5ldyBFcnJvcigiTXVzdCBpbnB1dCBhdCBsZWFzdCBkKzEgcG9pbnRzIik7dmFyIG89dC5zbGljZSgwLGkrMSkscz1uLmFwcGx5KHZvaWQgMCxvKTtpZigwPT09cyl0aHJvdyBuZXcgRXJyb3IoIklucHV0IG5vdCBpbiBnZW5lcmFsIHBvc2l0aW9uIik7Zm9yKHZhciBsPW5ldyBBcnJheShpKzEpLHU9MDt1PD1pOysrdSlsW3VdPXU7czwwJiYobFswXT0xLGxbMV09MCk7dmFyIGY9bmV3IGEobCxuZXcgQXJyYXkoaSsxKSwhMSksaD1mLmFkamFjZW50LHA9bmV3IEFycmF5KGkrMik7Zm9yKHU9MDt1PD1pOysrdSl7Zm9yKHZhciBkPWwuc2xpY2UoKSxtPTA7bTw9aTsrK20pbT09PXUmJihkW21dPS0xKTt2YXIgZz1kWzBdO2RbMF09ZFsxXSxkWzFdPWc7dmFyIHY9bmV3IGEoZCxuZXcgQXJyYXkoaSsxKSwhMCk7aFt1XT12LHBbdV09dn1wW2krMV09Zjtmb3IodT0wO3U8PWk7Kyt1KXtkPWhbdV0udmVydGljZXM7dmFyIHk9aFt1XS5hZGphY2VudDtmb3IobT0wO208PWk7KyttKXt2YXIgeD1kW21dO2lmKHg8MCl5W21dPWY7ZWxzZSBmb3IodmFyIGI9MDtiPD1pOysrYiloW2JdLnZlcnRpY2VzLmluZGV4T2YoeCk8MCYmKHlbbV09aFtiXSl9fXZhciBfPW5ldyBjKGksbyxwKSx3PSEhZTtmb3IodT1pKzE7dTxyOysrdSlfLmluc2VydCh0W3VdLHcpO3JldHVybiBfLmJvdW5kYXJ5KCl9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpLGk9dCgic2ltcGxpY2lhbC1jb21wbGV4IikuY29tcGFyZUNlbGxzO2Z1bmN0aW9uIGEodCxlLHIpe3RoaXMudmVydGljZXM9dCx0aGlzLmFkamFjZW50PWUsdGhpcy5ib3VuZGFyeT1yLHRoaXMubGFzdFZpc2l0ZWQ9LTF9ZnVuY3Rpb24gbyh0LGUscil7dGhpcy52ZXJ0aWNlcz10LHRoaXMuY2VsbD1lLHRoaXMuaW5kZXg9cn1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIGkodC52ZXJ0aWNlcyxlLnZlcnRpY2VzKX1hLnByb3RvdHlwZS5mbGlwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52ZXJ0aWNlc1swXTt0aGlzLnZlcnRpY2VzWzBdPXRoaXMudmVydGljZXNbMV0sdGhpcy52ZXJ0aWNlc1sxXT10O3ZhciBlPXRoaXMuYWRqYWNlbnRbMF07dGhpcy5hZGphY2VudFswXT10aGlzLmFkamFjZW50WzFdLHRoaXMuYWRqYWNlbnRbMV09ZX07dmFyIGw9W107ZnVuY3Rpb24gYyh0LGUscil7dGhpcy5kaW1lbnNpb249dCx0aGlzLnZlcnRpY2VzPWUsdGhpcy5zaW1wbGljZXM9cix0aGlzLmludGVyaW9yPXIuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5ib3VuZGFyeX0pKSx0aGlzLnR1cGxlPW5ldyBBcnJheSh0KzEpO2Zvcih2YXIgaT0wO2k8PXQ7KytpKXRoaXMudHVwbGVbaV09dGhpcy52ZXJ0aWNlc1tpXTt2YXIgYSxvPWxbdF07b3x8KG89bFt0XT0oKGE9blt0KzFdKXx8KGE9biksZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50dXBsZTtyZXR1cm4gdC5hcHBseSh0aGlzLGUpfX0oYSkpKSx0aGlzLm9yaWVudD1vfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5kaW1lbnNpb24sbj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLGk9dGhpcy50dXBsZSxhPXRoaXMudmVydGljZXMsbz1bdF07Zm9yKHQubGFzdFZpc2l0ZWQ9LW47by5sZW5ndGg+MDspZm9yKHZhciBzPSh0PW8ucG9wKCkpLmFkamFjZW50LGw9MDtsPD1yOysrbCl7dmFyIGM9c1tsXTtpZihjLmJvdW5kYXJ5JiYhKGMubGFzdFZpc2l0ZWQ8PS1uKSl7Zm9yKHZhciB1PWMudmVydGljZXMsZj0wO2Y8PXI7KytmKXt2YXIgaD11W2ZdO2lbZl09aDwwP2U6YVtoXX12YXIgcD10aGlzLm9yaWVudCgpO2lmKHA+MClyZXR1cm4gYztjLmxhc3RWaXNpdGVkPS1uLDA9PT1wJiZvLnB1c2goYyl9fXJldHVybiBudWxsfSx1LndhbGs9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzLmxlbmd0aC0xLG49dGhpcy5kaW1lbnNpb24saT10aGlzLnZlcnRpY2VzLGE9dGhpcy50dXBsZSxvPWU/dGhpcy5pbnRlcmlvci5sZW5ndGgqTWF0aC5yYW5kb20oKXwwOnRoaXMuaW50ZXJpb3IubGVuZ3RoLTEscz10aGlzLmludGVyaW9yW29dO3Q6Zm9yKDshcy5ib3VuZGFyeTspe2Zvcih2YXIgbD1zLnZlcnRpY2VzLGM9cy5hZGphY2VudCx1PTA7dTw9bjsrK3UpYVt1XT1pW2xbdV1dO3MubGFzdFZpc2l0ZWQ9cjtmb3IodT0wO3U8PW47Kyt1KXt2YXIgZj1jW3VdO2lmKCEoZi5sYXN0VmlzaXRlZD49cikpe3ZhciBoPWFbdV07YVt1XT10O3ZhciBwPXRoaXMub3JpZW50KCk7aWYoYVt1XT1oLHA8MCl7cz1mO2NvbnRpbnVlIHR9Zi5ib3VuZGFyeT9mLmxhc3RWaXNpdGVkPS1yOmYubGFzdFZpc2l0ZWQ9cn19cmV0dXJufXJldHVybiBzfSx1LmFkZFBlYWtzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy52ZXJ0aWNlcy5sZW5ndGgtMSxuPXRoaXMuZGltZW5zaW9uLGk9dGhpcy52ZXJ0aWNlcyxsPXRoaXMudHVwbGUsYz10aGlzLmludGVyaW9yLHU9dGhpcy5zaW1wbGljZXMsZj1bZV07ZS5sYXN0VmlzaXRlZD1yLGUudmVydGljZXNbZS52ZXJ0aWNlcy5pbmRleE9mKC0xKV09cixlLmJvdW5kYXJ5PSExLGMucHVzaChlKTtmb3IodmFyIGg9W107Zi5sZW5ndGg+MDspe3ZhciBwPShlPWYucG9wKCkpLnZlcnRpY2VzLGQ9ZS5hZGphY2VudCxtPXAuaW5kZXhPZihyKTtpZighKG08MCkpZm9yKHZhciBnPTA7Zzw9bjsrK2cpaWYoZyE9PW0pe3ZhciB2PWRbZ107aWYodi5ib3VuZGFyeSYmISh2Lmxhc3RWaXNpdGVkPj1yKSl7dmFyIHk9di52ZXJ0aWNlcztpZih2Lmxhc3RWaXNpdGVkIT09LXIpe2Zvcih2YXIgeD0wLGI9MDtiPD1uOysrYil5W2JdPDA/KHg9YixsW2JdPXQpOmxbYl09aVt5W2JdXTtpZih0aGlzLm9yaWVudCgpPjApe3lbeF09cix2LmJvdW5kYXJ5PSExLGMucHVzaCh2KSxmLnB1c2godiksdi5sYXN0VmlzaXRlZD1yO2NvbnRpbnVlfXYubGFzdFZpc2l0ZWQ9LXJ9dmFyIF89di5hZGphY2VudCx3PXAuc2xpY2UoKSxUPWQuc2xpY2UoKSxrPW5ldyBhKHcsVCwhMCk7dS5wdXNoKGspO3ZhciBBPV8uaW5kZXhPZihlKTtpZighKEE8MCkpe19bQV09ayxUW21dPXYsd1tnXT0tMSxUW2ddPWUsZFtnXT1rLGsuZmxpcCgpO2ZvcihiPTA7Yjw9bjsrK2Ipe3ZhciBNPXdbYl07aWYoIShNPDB8fE09PT1yKSl7Zm9yKHZhciBTPW5ldyBBcnJheShuLTEpLEU9MCxMPTA7TDw9bjsrK0wpe3ZhciBDPXdbTF07QzwwfHxMPT09Ynx8KFNbRSsrXT1DKX1oLnB1c2gobmV3IG8oUyxrLGIpKX19fX19fWguc29ydChzKTtmb3IoZz0wO2crMTxoLmxlbmd0aDtnKz0yKXt2YXIgUD1oW2ddLEk9aFtnKzFdLE89UC5pbmRleCx6PUkuaW5kZXg7TzwwfHx6PDB8fChQLmNlbGwuYWRqYWNlbnRbUC5pbmRleF09SS5jZWxsLEkuY2VsbC5hZGphY2VudFtJLmluZGV4XT1QLmNlbGwpfX0sdS5pbnNlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnZlcnRpY2VzO3IucHVzaCh0KTt2YXIgbj10aGlzLndhbGsodCxlKTtpZihuKXtmb3IodmFyIGk9dGhpcy5kaW1lbnNpb24sYT10aGlzLnR1cGxlLG89MDtvPD1pOysrbyl7dmFyIHM9bi52ZXJ0aWNlc1tvXTthW29dPXM8MD90OnJbc119dmFyIGw9dGhpcy5vcmllbnQoYSk7bDwwfHwoMCE9PWx8fChuPXRoaXMuaGFuZGxlQm91bmRhcnlEZWdlbmVyYWN5KG4sdCkpKSYmdGhpcy5hZGRQZWFrcyh0LG4pfX0sdS5ib3VuZGFyeT1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmRpbWVuc2lvbixlPVtdLHI9dGhpcy5zaW1wbGljZXMsbj1yLmxlbmd0aCxpPTA7aTxuOysraSl7dmFyIGE9cltpXTtpZihhLmJvdW5kYXJ5KXtmb3IodmFyIG89bmV3IEFycmF5KHQpLHM9YS52ZXJ0aWNlcyxsPTAsYz0wLHU9MDt1PD10OysrdSlzW3VdPj0wP29bbCsrXT1zW3VdOmM9MSZ1O2lmKGM9PT0oMSZ0KSl7dmFyIGY9b1swXTtvWzBdPW9bMV0sb1sxXT1mfWUucHVzaChvKX19cmV0dXJuIGV9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0LCJzaW1wbGljaWFsLWNvbXBsZXgiOjUzNH1dLDQyOTpbZnVuY3Rpb24odCxlLHIpeyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJih0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19fSx7fV0sNDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gaSh0LGUscixuLGkpe3RoaXMubWlkPXQsdGhpcy5sZWZ0PWUsdGhpcy5yaWdodD1yLHRoaXMubGVmdFBvaW50cz1uLHRoaXMucmlnaHRQb2ludHM9aSx0aGlzLmNvdW50PShlP2UuY291bnQ6MCkrKHI/ci5jb3VudDowKStuLmxlbmd0aH1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIXR8fDA9PT10Lmxlbmd0aClyZXR1cm4gbmV3IHYobnVsbCk7cmV0dXJuIG5ldyB2KGcodCkpfTt2YXIgYT1pLnByb3RvdHlwZTtmdW5jdGlvbiBvKHQsZSl7dC5taWQ9ZS5taWQsdC5sZWZ0PWUubGVmdCx0LnJpZ2h0PWUucmlnaHQsdC5sZWZ0UG9pbnRzPWUubGVmdFBvaW50cyx0LnJpZ2h0UG9pbnRzPWUucmlnaHRQb2ludHMsdC5jb3VudD1lLmNvdW50fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1nKGUpO3QubWlkPXIubWlkLHQubGVmdD1yLmxlZnQsdC5yaWdodD1yLnJpZ2h0LHQubGVmdFBvaW50cz1yLmxlZnRQb2ludHMsdC5yaWdodFBvaW50cz1yLnJpZ2h0UG9pbnRzLHQuY291bnQ9ci5jb3VudH1mdW5jdGlvbiBsKHQsZSl7dmFyIHI9dC5pbnRlcnZhbHMoW10pO3IucHVzaChlKSxzKHQscil9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXQuaW50ZXJ2YWxzKFtdKSxuPXIuaW5kZXhPZihlKTtyZXR1cm4gbjwwPzA6KHIuc3BsaWNlKG4sMSkscyh0LHIpLDEpfWZ1bmN0aW9uIHUodCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGgmJnRbbl1bMF08PWU7KytuKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj10Lmxlbmd0aC0xO24+PTAmJnRbbl1bMV0+PWU7LS1uKXt2YXIgaT1yKHRbbl0pO2lmKGkpcmV0dXJuIGl9fWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49ZSh0W3JdKTtpZihuKXJldHVybiBufX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHQtZX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9dFswXS1lWzBdO3JldHVybiByfHx0WzFdLWVbMV19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXRbMV0tZVsxXTtyZXR1cm4gcnx8dFswXS1lWzBdfWZ1bmN0aW9uIGcodCl7aWYoMD09PXQubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgZT1bXSxyPTA7cjx0Lmxlbmd0aDsrK3IpZS5wdXNoKHRbcl1bMF0sdFtyXVsxXSk7ZS5zb3J0KHApO3ZhciBuPWVbZS5sZW5ndGg+PjFdLGE9W10sbz1bXSxzPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDsrK3Ipe3ZhciBsPXRbcl07bFsxXTxuP2EucHVzaChsKTpuPGxbMF0/by5wdXNoKGwpOnMucHVzaChsKX12YXIgYz1zLHU9cy5zbGljZSgpO3JldHVybiBjLnNvcnQoZCksdS5zb3J0KG0pLG5ldyBpKG4sZyhhKSxnKG8pLGMsdSl9ZnVuY3Rpb24gdih0KXt0aGlzLnJvb3Q9dH1hLmludGVydmFscz1mdW5jdGlvbih0KXtyZXR1cm4gdC5wdXNoLmFwcGx5KHQsdGhpcy5sZWZ0UG9pbnRzKSx0aGlzLmxlZnQmJnRoaXMubGVmdC5pbnRlcnZhbHModCksdGhpcy5yaWdodCYmdGhpcy5yaWdodC5pbnRlcnZhbHModCksdH0sYS5pbnNlcnQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb3VudC10aGlzLmxlZnRQb2ludHMubGVuZ3RoO2lmKHRoaXMuY291bnQrPTEsdFsxXTx0aGlzLm1pZCl0aGlzLmxlZnQ/NCoodGhpcy5sZWZ0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMubGVmdC5pbnNlcnQodCk6dGhpcy5sZWZ0PWcoW3RdKTtlbHNlIGlmKHRbMF0+dGhpcy5taWQpdGhpcy5yaWdodD80Kih0aGlzLnJpZ2h0LmNvdW50KzEpPjMqKGUrMSk/bCh0aGlzLHQpOnRoaXMucmlnaHQuaW5zZXJ0KHQpOnRoaXMucmlnaHQ9ZyhbdF0pO2Vsc2V7dmFyIHI9bi5nZSh0aGlzLmxlZnRQb2ludHMsdCxkKSxpPW4uZ2UodGhpcy5yaWdodFBvaW50cyx0LG0pO3RoaXMubGVmdFBvaW50cy5zcGxpY2UociwwLHQpLHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKGksMCx0KX19LGEucmVtb3ZlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY291bnQtdGhpcy5sZWZ0UG9pbnRzO2lmKHRbMV08dGhpcy5taWQpcmV0dXJuIHRoaXMubGVmdD80Kih0aGlzLnJpZ2h0P3RoaXMucmlnaHQuY291bnQ6MCk+MyooZS0xKT9jKHRoaXMsdCk6Mj09PShzPXRoaXMubGVmdC5yZW1vdmUodCkpPyh0aGlzLmxlZnQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYodFswXT50aGlzLm1pZClyZXR1cm4gdGhpcy5yaWdodD80Kih0aGlzLmxlZnQ/dGhpcy5sZWZ0LmNvdW50OjApPjMqKGUtMSk/Yyh0aGlzLHQpOjI9PT0ocz10aGlzLnJpZ2h0LnJlbW92ZSh0KSk/KHRoaXMucmlnaHQ9bnVsbCx0aGlzLmNvdW50LT0xLDEpOigxPT09cyYmKHRoaXMuY291bnQtPTEpLHMpOjA7aWYoMT09PXRoaXMuY291bnQpcmV0dXJuIHRoaXMubGVmdFBvaW50c1swXT09PXQ/MjowO2lmKDE9PT10aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbMF09PT10KXtpZih0aGlzLmxlZnQmJnRoaXMucmlnaHQpe2Zvcih2YXIgcj10aGlzLGk9dGhpcy5sZWZ0O2kucmlnaHQ7KXI9aSxpPWkucmlnaHQ7aWYocj09PXRoaXMpaS5yaWdodD10aGlzLnJpZ2h0O2Vsc2V7dmFyIGE9dGhpcy5sZWZ0LHM9dGhpcy5yaWdodDtyLmNvdW50LT1pLmNvdW50LHIucmlnaHQ9aS5sZWZ0LGkubGVmdD1hLGkucmlnaHQ9c31vKHRoaXMsaSksdGhpcy5jb3VudD0odGhpcy5sZWZ0P3RoaXMubGVmdC5jb3VudDowKSsodGhpcy5yaWdodD90aGlzLnJpZ2h0LmNvdW50OjApK3RoaXMubGVmdFBvaW50cy5sZW5ndGh9ZWxzZSB0aGlzLmxlZnQ/byh0aGlzLHRoaXMubGVmdCk6byh0aGlzLHRoaXMucmlnaHQpO3JldHVybiAxfWZvcihhPW4uZ2UodGhpcy5sZWZ0UG9pbnRzLHQsZCk7YTx0aGlzLmxlZnRQb2ludHMubGVuZ3RoJiZ0aGlzLmxlZnRQb2ludHNbYV1bMF09PT10WzBdOysrYSlpZih0aGlzLmxlZnRQb2ludHNbYV09PT10KXt0aGlzLmNvdW50LT0xLHRoaXMubGVmdFBvaW50cy5zcGxpY2UoYSwxKTtmb3Iocz1uLmdlKHRoaXMucmlnaHRQb2ludHMsdCxtKTtzPHRoaXMucmlnaHRQb2ludHMubGVuZ3RoJiZ0aGlzLnJpZ2h0UG9pbnRzW3NdWzFdPT09dFsxXTsrK3MpaWYodGhpcy5yaWdodFBvaW50c1tzXT09PXQpcmV0dXJuIHRoaXMucmlnaHRQb2ludHMuc3BsaWNlKHMsMSksMX1yZXR1cm4gMH0sYS5xdWVyeVBvaW50PWZ1bmN0aW9uKHQsZSl7aWYodDx0aGlzLm1pZCl7aWYodGhpcy5sZWZ0KWlmKHI9dGhpcy5sZWZ0LnF1ZXJ5UG9pbnQodCxlKSlyZXR1cm4gcjtyZXR1cm4gdSh0aGlzLmxlZnRQb2ludHMsdCxlKX1pZih0PnRoaXMubWlkKXt2YXIgcjtpZih0aGlzLnJpZ2h0KWlmKHI9dGhpcy5yaWdodC5xdWVyeVBvaW50KHQsZSkpcmV0dXJuIHI7cmV0dXJuIGYodGhpcy5yaWdodFBvaW50cyx0LGUpfXJldHVybiBoKHRoaXMubGVmdFBvaW50cyxlKX0sYS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtpZih0PHRoaXMubWlkJiZ0aGlzLmxlZnQmJihuPXRoaXMubGVmdC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47aWYoZT50aGlzLm1pZCYmdGhpcy5yaWdodCYmKG49dGhpcy5yaWdodC5xdWVyeUludGVydmFsKHQsZSxyKSkpcmV0dXJuIG47cmV0dXJuIGU8dGhpcy5taWQ/dSh0aGlzLmxlZnRQb2ludHMsZSxyKTp0PnRoaXMubWlkP2YodGhpcy5yaWdodFBvaW50cyx0LHIpOmgodGhpcy5sZWZ0UG9pbnRzLHIpfTt2YXIgeT12LnByb3RvdHlwZTt5Lmluc2VydD1mdW5jdGlvbih0KXt0aGlzLnJvb3Q/dGhpcy5yb290Lmluc2VydCh0KTp0aGlzLnJvb3Q9bmV3IGkodFswXSxudWxsLG51bGwsW3RdLFt0XSl9LHkucmVtb3ZlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucm9vdCl7dmFyIGU9dGhpcy5yb290LnJlbW92ZSh0KTtyZXR1cm4gMj09PWUmJih0aGlzLnJvb3Q9bnVsbCksMCE9PWV9cmV0dXJuITF9LHkucXVlcnlQb2ludD1mdW5jdGlvbih0LGUpe2lmKHRoaXMucm9vdClyZXR1cm4gdGhpcy5yb290LnF1ZXJ5UG9pbnQodCxlKX0seS5xdWVyeUludGVydmFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0PD1lJiZ0aGlzLnJvb3QpcmV0dXJuIHRoaXMucm9vdC5xdWVyeUludGVydmFsKHQsZSxyKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KHksImNvdW50Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuY291bnQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiaW50ZXJ2YWxzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdD90aGlzLnJvb3QuaW50ZXJ2YWxzKFtdKTpbXX19KX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwfV0sNDMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09cjtyZXR1cm4gZX19LHt9XSw0MzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ITB9LHt9XSw0MzM6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiEhdC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY29uc3RydWN0b3IuaXNCdWZmZXImJnQuY29uc3RydWN0b3IuaXNCdWZmZXIodCl9Ci8qIQogKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyCiAqCiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+CiAqIEBsaWNlbnNlICBNSVQKICovCmUuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmKG4odCl8fGZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0LnJlYWRGbG9hdExFJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5zbGljZSYmbih0LnNsaWNlKDAsMCkpfSh0KXx8ISF0Ll9pc0J1ZmZlcil9fSx7fV0sNDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmKC9NU0lFLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpfHwvVHJpZGVudFwvLy50ZXN0KG5hdmlnYXRvci5hcHBWZXJzaW9uKSl9LHt9XSw0MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWEsZS5leHBvcnRzLmlzTW9iaWxlPWEsZS5leHBvcnRzLmRlZmF1bHQ9YTt2YXIgbj0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vL2ksaT0vKGFuZHJvaWR8YmJcZCt8bWVlZ28pLittb2JpbGV8YXZhbnRnb3xiYWRhXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXNbNDZdMHxzeW1iaWFufHRyZW98dXBcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIChjZXxwaG9uZSl8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2k7ZnVuY3Rpb24gYSh0KXt0fHwodD17fSk7dmFyIGU9dC51YTtpZihlfHwidW5kZWZpbmVkIj09dHlwZW9mIG5hdmlnYXRvcnx8KGU9bmF2aWdhdG9yLnVzZXJBZ2VudCksZSYmZS5oZWFkZXJzJiYic3RyaW5nIj09dHlwZW9mIGUuaGVhZGVyc1sidXNlci1hZ2VudCJdJiYoZT1lLmhlYWRlcnNbInVzZXItYWdlbnQiXSksInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciByPXQudGFibGV0P2kudGVzdChlKTpuLnRlc3QoZSk7cmV0dXJuIXImJnQudGFibGV0JiZ0LmZlYXR1cmVEZXRlY3QmJm5hdmlnYXRvciYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjEmJi0xIT09ZS5pbmRleE9mKCJNYWNpbnRvc2giKSYmLTEhPT1lLmluZGV4T2YoIlNhZmFyaSIpJiYocj0hMCkscn19LHt9XSw0MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybiBudWxsIT09dCYmKCJvYmplY3QiPT09ZXx8ImZ1bmN0aW9uIj09PWUpfX0se31dLDQzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PW4uY2FsbCh0KSYmKG51bGw9PT0oZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCkpfHxlPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHt9KSl9fSx7fV0sNDM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZigoKGU9dC5jaGFyQ29kZUF0KG4pKTw5fHxlPjEzKSYmMzIhPT1lJiYxMzMhPT1lJiYxNjAhPT1lJiY1NzYwIT09ZSYmNjE1OCE9PWUmJihlPDgxOTJ8fGU+ODIwNSkmJjgyMzIhPT1lJiY4MjMzIT09ZSYmODIzOSE9PWUmJjgyODchPT1lJiY4Mjg4IT09ZSYmMTIyODghPT1lJiY2NTI3OSE9PWUpcmV0dXJuITE7cmV0dXJuITB9fSx7fV0sNDM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudHJpbSgpLCEhKC9eW216bGh2Y3NxdGFdXHMqWy0rLjAtOV1bXm1saHZ6Y3NxdGFdKy9pLnRlc3QodCkmJi9bXGR6XSQvaS50ZXN0KHQpJiZ0Lmxlbmd0aD40KSl9fSx7fV0sNDQwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCooMS1yKStlKnJ9fSx7fV0sNDQxOltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz1uKCk6KHQ9dHx8c2VsZikubWFwYm94Z2w9bigpfSh0aGlzLChmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdCxlLHI7ZnVuY3Rpb24gbihuLGkpe2lmKHQpaWYoZSl7dmFyIGE9InZhciBzaGFyZWRDaHVuayA9IHt9OyAoIit0KyIpKHNoYXJlZENodW5rKTsgKCIrZSsiKShzaGFyZWRDaHVuayk7IixvPXt9O3QobyksKHI9aShvKSkud29ya2VyVXJsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFthXSx7dHlwZToidGV4dC9qYXZhc2NyaXB0In0pKX1lbHNlIGU9aTtlbHNlIHQ9aX1yZXR1cm4gbigwLChmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSl7cmV0dXJuIHQoZT17ZXhwb3J0czp7fX0sZS5leHBvcnRzKSxlLmV4cG9ydHN9dmFyIHI9bjtmdW5jdGlvbiBuKHQsZSxyLG4pe3RoaXMuY3g9Myp0LHRoaXMuYng9Myooci10KS10aGlzLmN4LHRoaXMuYXg9MS10aGlzLmN4LXRoaXMuYngsdGhpcy5jeT0zKmUsdGhpcy5ieT0zKihuLWUpLXRoaXMuY3ksdGhpcy5heT0xLXRoaXMuY3ktdGhpcy5ieSx0aGlzLnAxeD10LHRoaXMucDF5PW4sdGhpcy5wMng9cix0aGlzLnAyeT1ufW4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWD1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXgqdCt0aGlzLmJ4KSp0K3RoaXMuY3gpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlWT1mdW5jdGlvbih0KXtyZXR1cm4oKHRoaXMuYXkqdCt0aGlzLmJ5KSp0K3RoaXMuY3kpKnR9LG4ucHJvdG90eXBlLnNhbXBsZUN1cnZlRGVyaXZhdGl2ZVg9ZnVuY3Rpb24odCl7cmV0dXJuKDMqdGhpcy5heCp0KzIqdGhpcy5ieCkqdCt0aGlzLmN4fSxuLnByb3RvdHlwZS5zb2x2ZUN1cnZlWD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG87Zm9yKHZvaWQgMD09PWUmJihlPTFlLTYpLGk9dCxvPTA7bzw4O28rKyl7aWYoYT10aGlzLnNhbXBsZUN1cnZlWChpKS10LE1hdGguYWJzKGEpPGUpcmV0dXJuIGk7dmFyIHM9dGhpcy5zYW1wbGVDdXJ2ZURlcml2YXRpdmVYKGkpO2lmKE1hdGguYWJzKHMpPDFlLTYpYnJlYWs7aS09YS9zfWlmKChpPXQpPChyPTApKXJldHVybiByO2lmKGk+KG49MSkpcmV0dXJuIG47Zm9yKDtyPG47KXtpZihhPXRoaXMuc2FtcGxlQ3VydmVYKGkpLE1hdGguYWJzKGEtdCk8ZSlyZXR1cm4gaTt0PmE/cj1pOm49aSxpPS41KihuLXIpK3J9cmV0dXJuIGl9LG4ucHJvdG90eXBlLnNvbHZlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc2FtcGxlQ3VydmVZKHRoaXMuc29sdmVDdXJ2ZVgodCxlKSl9O3ZhciBpPWE7ZnVuY3Rpb24gYSh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIG8odCxlLG4saSl7dmFyIGE9bmV3IHIodCxlLG4saSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhLnNvbHZlKHQpfX1hLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEodGhpcy54LHRoaXMueSl9LGFkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9hZGQodCl9LHN1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9zdWIodCl9LG11bHRCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX211bHRCeVBvaW50KHQpfSxkaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2RpdkJ5UG9pbnQodCl9LG11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbXVsdCh0KX0sZGl2OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX2Rpdih0KX0scm90YXRlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuX3JvdGF0ZSh0KX0scm90YXRlQXJvdW5kOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fcm90YXRlQXJvdW5kKHQsZSl9LG1hdE11bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5fbWF0TXVsdCh0KX0sdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3VuaXQoKX0scGVycDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuX3BlcnAoKX0scm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpfSxtYWc6ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMueCp0aGlzLngrdGhpcy55KnRoaXMueSl9LGVxdWFsczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGRpc3Q6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0aGlzLmRpc3RTcXIodCkpfSxkaXN0U3FyOmZ1bmN0aW9uKHQpe3ZhciBlPXQueC10aGlzLngscj10LnktdGhpcy55O3JldHVybiBlKmUrcipyfSxhbmdsZTpmdW5jdGlvbigpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueSx0aGlzLngpfSxhbmdsZVRvOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueS10LnksdGhpcy54LXQueCl9LGFuZ2xlV2l0aDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hbmdsZVdpdGhTZXAodC54LHQueSl9LGFuZ2xlV2l0aFNlcDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmF0YW4yKHRoaXMueCplLXRoaXMueSp0LHRoaXMueCp0K3RoaXMueSplKX0sX21hdE11bHQ6ZnVuY3Rpb24odCl7dmFyIGU9dFswXSp0aGlzLngrdFsxXSp0aGlzLnkscj10WzJdKnRoaXMueCt0WzNdKnRoaXMueTtyZXR1cm4gdGhpcy54PWUsdGhpcy55PXIsdGhpc30sX2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Kz10LngsdGhpcy55Kz10LnksdGhpc30sX3N1YjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54LT10LngsdGhpcy55LT10LnksdGhpc30sX211bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dCx0aGlzLnkqPXQsdGhpc30sX2RpdjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy54Lz10LHRoaXMueS89dCx0aGlzfSxfbXVsdEJ5UG9pbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMueCo9dC54LHRoaXMueSo9dC55LHRoaXN9LF9kaXZCeVBvaW50OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLngvPXQueCx0aGlzLnkvPXQueSx0aGlzfSxfdW5pdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kaXYodGhpcy5tYWcoKSksdGhpc30sX3BlcnA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnk7cmV0dXJuIHRoaXMueT10aGlzLngsdGhpcy54PS10LHRoaXN9LF9yb3RhdGU6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5jb3ModCkscj1NYXRoLnNpbih0KSxuPWUqdGhpcy54LXIqdGhpcy55LGk9cip0aGlzLngrZSp0aGlzLnk7cmV0dXJuIHRoaXMueD1uLHRoaXMueT1pLHRoaXN9LF9yb3RhdGVBcm91bmQ6ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNvcyh0KSxuPU1hdGguc2luKHQpLGk9ZS54K3IqKHRoaXMueC1lLngpLW4qKHRoaXMueS1lLnkpLGE9ZS55K24qKHRoaXMueC1lLngpK3IqKHRoaXMueS1lLnkpO3JldHVybiB0aGlzLng9aSx0aGlzLnk9YSx0aGlzfSxfcm91bmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PU1hdGgucm91bmQodGhpcy54KSx0aGlzLnk9TWF0aC5yb3VuZCh0aGlzLnkpLHRoaXN9fSxhLmNvbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBhP3Q6QXJyYXkuaXNBcnJheSh0KT9uZXcgYSh0WzBdLHRbMV0pOnR9O3ZhciBzPW8oLjI1LC4xLC4yNSwxKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5taW4ocixNYXRoLm1heChlLHQpKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1yLWUsaT0oKHQtZSklbituKSVuK2U7cmV0dXJuIGk9PT1lP3I6aX1mdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07Zm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtmb3IodmFyIG8gaW4gYSl0W29dPWFbb119cmV0dXJuIHR9dmFyIGY9MTtmdW5jdGlvbiBoKCl7cmV0dXJuIGYrK31mdW5jdGlvbiBwKCl7cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/KGVeMTYqTWF0aC5yYW5kb20oKT4+ZS80KS50b1N0cmluZygxNik6KFsxZTddKy1bMWUzXSstNGUzKy04ZTMrLTFlMTEpLnJlcGxhY2UoL1swMThdL2csdCl9KCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4hIXQmJi9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzRdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC9pLnRlc3QodCl9ZnVuY3Rpb24gbSh0LGUpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XSYmKGVbdF09ZVt0XS5iaW5kKGUpKX0pKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuLTEhPT10LmluZGV4T2YoZSx0Lmxlbmd0aC1lLmxlbmd0aCl9ZnVuY3Rpb24gdih0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpbltpXT1lLmNhbGwocnx8dGhpcyx0W2ldLGksdCk7cmV0dXJuIG59ZnVuY3Rpb24geSh0LGUscil7dmFyIG49e307Zm9yKHZhciBpIGluIHQpZS5jYWxsKHJ8fHRoaXMsdFtpXSxpLHQpJiYobltpXT10W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiB4KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP3QubWFwKHgpOiJvYmplY3QiPT10eXBlb2YgdCYmdD92KHQseCk6dH12YXIgYj17fTtmdW5jdGlvbiBfKHQpe2JbdF18fCgidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2Fybih0KSxiW3RdPSEwKX1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4oci55LXQueSkqKGUueC10LngpPihlLnktdC55KSooci54LXQueCl9ZnVuY3Rpb24gVCh0KXtmb3IodmFyIGU9MCxyPTAsbj10Lmxlbmd0aCxpPW4tMSxhPXZvaWQgMCxvPXZvaWQgMDtyPG47aT1yKyspYT10W3JdLGUrPSgobz10W2ldKS54LWEueCkqKGEueStvLnkpO3JldHVybiBlfWZ1bmN0aW9uIGsoKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZX1mdW5jdGlvbiBBKHQpe3ZhciBlPXt9O2lmKHQucmVwbGFjZSgvKD86XnwoPzpccypcLFxzKikpKFteXHgwMC1ceDIwXChcKTw+QFwsO1w6XFwiXC9cW1xdXD9cPVx7XH1ceDdGXSspKD86XD0oPzooW15ceDAwLVx4MjBcKFwpPD5AXCw7XDpcXCJcL1xbXF1cP1w9XHtcfVx4N0ZdKyl8KD86XCIoKD86W14iXFxdfFxcLikqKVwiKSkpPy9nLChmdW5jdGlvbih0LHIsbixpKXt2YXIgYT1ufHxpO3JldHVybiBlW3JdPSFhfHxhLnRvTG93ZXJDYXNlKCksIiJ9KSksZVsibWF4LWFnZSJdKXt2YXIgcj1wYXJzZUludChlWyJtYXgtYWdlIl0sMTApO2lzTmFOKHIpP2RlbGV0ZSBlWyJtYXgtYWdlIl06ZVsibWF4LWFnZSJdPXJ9cmV0dXJuIGV9dmFyIE09bnVsbDtmdW5jdGlvbiBTKHQpe2lmKG51bGw9PU0pe3ZhciBlPXQubmF2aWdhdG9yP3QubmF2aWdhdG9yLnVzZXJBZ2VudDpudWxsO009ISF0LnNhZmFyaXx8ISghZXx8ISgvXGIoaVBhZHxpUGhvbmV8aVBvZClcYi8udGVzdChlKXx8ZS5tYXRjaCgiU2FmYXJpIikmJiFlLm1hdGNoKCJDaHJvbWUiKSkpfXJldHVybiBNfWZ1bmN0aW9uIEUodCl7dHJ5e3ZhciBlPXNlbGZbdF07cmV0dXJuIGUuc2V0SXRlbSgiX21hcGJveF90ZXN0XyIsMSksZS5yZW1vdmVJdGVtKCJfbWFwYm94X3Rlc3RfIiksITB9Y2F0Y2godCl7cmV0dXJuITF9fXZhciBMLEMsUCxJLE89c2VsZi5wZXJmb3JtYW5jZSYmc2VsZi5wZXJmb3JtYW5jZS5ub3c/c2VsZi5wZXJmb3JtYW5jZS5ub3cuYmluZChzZWxmLnBlcmZvcm1hbmNlKTpEYXRlLm5vdy5iaW5kKERhdGUpLHo9c2VsZi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHNlbGYubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxzZWxmLndlYmtpdFJlcXVlc3RBbmltYXRpb25GcmFtZXx8c2VsZi5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSxEPXNlbGYuY2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYubW96Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHNlbGYubXNDYW5jZWxBbmltYXRpb25GcmFtZSxSPXtub3c6TyxmcmFtZTpmdW5jdGlvbih0KXt2YXIgZT16KHQpO3JldHVybntjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gRChlKX19fSxnZXRJbWFnZURhdGE6ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgcj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG49ci5nZXRDb250ZXh0KCIyZCIpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGNyZWF0ZSBjYW52YXMgMmQgY29udGV4dCIpO3JldHVybiByLndpZHRoPXQud2lkdGgsci5oZWlnaHQ9dC5oZWlnaHQsbi5kcmF3SW1hZ2UodCwwLDAsdC53aWR0aCx0LmhlaWdodCksbi5nZXRJbWFnZURhdGEoLWUsLWUsdC53aWR0aCsyKmUsdC5oZWlnaHQrMiplKX0scmVzb2x2ZVVSTDpmdW5jdGlvbih0KXtyZXR1cm4gTHx8KEw9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLEwuaHJlZj10LEwuaHJlZn0saGFyZHdhcmVDb25jdXJyZW5jeTpzZWxmLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5fHw0LGdldCBkZXZpY2VQaXhlbFJhdGlvKCl7cmV0dXJuIHNlbGYuZGV2aWNlUGl4ZWxSYXRpb30sZ2V0IHByZWZlcnNSZWR1Y2VkTW90aW9uKCl7cmV0dXJuISFzZWxmLm1hdGNoTWVkaWEmJihudWxsPT1DJiYoQz1zZWxmLm1hdGNoTWVkaWEoIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIikpLEMubWF0Y2hlcyl9fSxGPXtBUElfVVJMOiJodHRwczovL2FwaS5tYXBib3guY29tIixnZXQgRVZFTlRTX1VSTCgpe3JldHVybiB0aGlzLkFQSV9VUkw/MD09PXRoaXMuQVBJX1VSTC5pbmRleE9mKCJodHRwczovL2FwaS5tYXBib3guY24iKT8iaHR0cHM6Ly9ldmVudHMubWFwYm94LmNuL2V2ZW50cy92MiI6MD09PXRoaXMuQVBJX1VSTC5pbmRleE9mKCJodHRwczovL2FwaS5tYXBib3guY29tIik/Imh0dHBzOi8vZXZlbnRzLm1hcGJveC5jb20vZXZlbnRzL3YyIjpudWxsOm51bGx9LEZFRURCQUNLX1VSTDoiaHR0cHM6Ly9hcHBzLm1hcGJveC5jb20vZmVlZGJhY2siLFJFUVVJUkVfQUNDRVNTX1RPS0VOOiEwLEFDQ0VTU19UT0tFTjpudWxsLE1BWF9QQVJBTExFTF9JTUFHRV9SRVFVRVNUUzoxNn0sQj17c3VwcG9ydGVkOiExLHRlc3RTdXBwb3J0OmZ1bmN0aW9uKHQpe2lmKE58fCFJKXJldHVybjtqP1UodCk6UD10fX0sTj0hMSxqPSExO2Z1bmN0aW9uIFUodCl7dmFyIGU9dC5jcmVhdGVUZXh0dXJlKCk7dC5iaW5kVGV4dHVyZSh0LlRFWFRVUkVfMkQsZSk7dHJ5e2lmKHQudGV4SW1hZ2UyRCh0LlRFWFRVUkVfMkQsMCx0LlJHQkEsdC5SR0JBLHQuVU5TSUdORURfQllURSxJKSx0LmlzQ29udGV4dExvc3QoKSlyZXR1cm47Qi5zdXBwb3J0ZWQ9ITB9Y2F0Y2godCl7fXQuZGVsZXRlVGV4dHVyZShlKSxOPSEwfXNlbGYuZG9jdW1lbnQmJigoST1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpKS5vbmxvYWQ9ZnVuY3Rpb24oKXtQJiZVKFApLFA9bnVsbCxqPSEwfSxJLm9uZXJyb3I9ZnVuY3Rpb24oKXtOPSEwLFA9bnVsbH0sSS5zcmM9ImRhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1JoNEFBQUJYUlVKUVZsQTRUQkVBQUFBdkFRQUFBQWZRLy83M3YvK0JpT2gvQUFBPSIpO3ZhciBWPSIwMSI7dmFyIEg9ZnVuY3Rpb24odCxlKXt0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm49dCx0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbj1lLHRoaXMuX2NyZWF0ZVNrdVRva2VuKCl9O2Z1bmN0aW9uIHEodCl7cmV0dXJuIDA9PT10LmluZGV4T2YoIm1hcGJveDoiKX1ILnByb3RvdHlwZS5fY3JlYXRlU2t1VG9rZW49ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0iIixlPTA7ZTwxMDtlKyspdCs9IjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIltNYXRoLmZsb29yKDYyKk1hdGgucmFuZG9tKCkpXTtyZXR1cm57dG9rZW46WyIxIixWLHRdLmpvaW4oIiIpLHRva2VuRXhwaXJlc0F0OkRhdGUubm93KCkrNDMyZTV9fSgpO3RoaXMuX3NrdVRva2VuPXQudG9rZW4sdGhpcy5fc2t1VG9rZW5FeHBpcmVzQXQ9dC50b2tlbkV4cGlyZXNBdH0sSC5wcm90b3R5cGUuX2lzU2t1VG9rZW5FeHBpcmVkPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCk+dGhpcy5fc2t1VG9rZW5FeHBpcmVzQXR9LEgucHJvdG90eXBlLnRyYW5zZm9ybVJlcXVlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtUmVxdWVzdEZuJiZ0aGlzLl90cmFuc2Zvcm1SZXF1ZXN0Rm4odCxlKXx8e3VybDp0fX0sSC5wcm90b3R5cGUubm9ybWFsaXplU3R5bGVVUkw9ZnVuY3Rpb24odCxlKXtpZighcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpO3JldHVybiByLnBhdGg9Ii9zdHlsZXMvdjEiK3IucGF0aCx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxILnByb3RvdHlwZS5ub3JtYWxpemVHbHlwaHNVUkw9ZnVuY3Rpb24odCxlKXtpZighcSh0KSlyZXR1cm4gdDt2YXIgcj1YKHQpO3JldHVybiByLnBhdGg9Ii9mb250cy92MSIrci5wYXRoLHRoaXMuX21ha2VBUElVUkwocix0aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVNvdXJjZVVSTD1mdW5jdGlvbih0LGUpe2lmKCFxKHQpKXJldHVybiB0O3ZhciByPVgodCk7cmV0dXJuIHIucGF0aD0iL3Y0LyIrci5hdXRob3JpdHkrIi5qc29uIixyLnBhcmFtcy5wdXNoKCJzZWN1cmUiKSx0aGlzLl9tYWtlQVBJVVJMKHIsdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fGUpfSxILnByb3RvdHlwZS5ub3JtYWxpemVTcHJpdGVVUkw9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9WCh0KTtyZXR1cm4gcSh0KT8oaS5wYXRoPSIvc3R5bGVzL3YxIitpLnBhdGgrIi9zcHJpdGUiK2Urcix0aGlzLl9tYWtlQVBJVVJMKGksdGhpcy5fY3VzdG9tQWNjZXNzVG9rZW58fG4pKTooaS5wYXRoKz0iIitlK3IsWihpKSl9LEgucHJvdG90eXBlLm5vcm1hbGl6ZVRpbGVVUkw9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9pc1NrdVRva2VuRXhwaXJlZCgpJiZ0aGlzLl9jcmVhdGVTa3VUb2tlbigpLHQmJiFxKHQpKXJldHVybiB0O3ZhciByPVgodCksbj1SLmRldmljZVBpeGVsUmF0aW8+PTJ8fDUxMj09PWU/IkAyeCI6IiIsaT1CLnN1cHBvcnRlZD8iLndlYnAiOiIkMSI7ci5wYXRoPXIucGF0aC5yZXBsYWNlKC8oXC4ocG5nfGpwZylcZCopKD89JCkvLCIiK24raSksci5wYXRoPXIucGF0aC5yZXBsYWNlKC9eLitcL3Y0XC8vLCIvIiksci5wYXRoPSIvdjQiK3IucGF0aDt2YXIgYT10aGlzLl9jdXN0b21BY2Nlc3NUb2tlbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXS5tYXRjaCgvXmFjY2Vzc190b2tlbj0oLiopJC8pO2lmKG4pcmV0dXJuIG5bMV19cmV0dXJuIG51bGx9KHIucGFyYW1zKXx8Ri5BQ0NFU1NfVE9LRU47cmV0dXJuIEYuUkVRVUlSRV9BQ0NFU1NfVE9LRU4mJmEmJnRoaXMuX3NrdVRva2VuJiZyLnBhcmFtcy5wdXNoKCJza3U9Iit0aGlzLl9za3VUb2tlbiksdGhpcy5fbWFrZUFQSVVSTChyLGEpfSxILnByb3RvdHlwZS5jYW5vbmljYWxpemVUaWxlVVJMPWZ1bmN0aW9uKHQsZSl7dmFyIHI9WCh0KTtpZighci5wYXRoLm1hdGNoKC8oXlwvdjRcLykvKXx8IXIucGF0aC5tYXRjaCgvXC5bXHddKyQvKSlyZXR1cm4gdDt2YXIgbj0ibWFwYm94Oi8vdGlsZXMvIjtuKz1yLnBhdGgucmVwbGFjZSgiL3Y0LyIsIiIpO3ZhciBpPXIucGFyYW1zO3JldHVybiBlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIXQubWF0Y2goL15hY2Nlc3NfdG9rZW49Lyl9KSkpLGkubGVuZ3RoJiYobis9Ij8iK2kuam9pbigiJiIpKSxufSxILnByb3RvdHlwZS5jYW5vbmljYWxpemVUaWxlc2V0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPSEhZSYmcShlKSxuPVtdLGk9MCxhPXQudGlsZXN8fFtdO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtZKG8pP24ucHVzaCh0aGlzLmNhbm9uaWNhbGl6ZVRpbGVVUkwobyxyKSk6bi5wdXNoKG8pfXJldHVybiBufSxILnByb3RvdHlwZS5fbWFrZUFQSVVSTD1mdW5jdGlvbih0LGUpe3ZhciByPSJTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzIixuPVgoRi5BUElfVVJMKTtpZih0LnByb3RvY29sPW4ucHJvdG9jb2wsdC5hdXRob3JpdHk9bi5hdXRob3JpdHksIi8iIT09bi5wYXRoJiYodC5wYXRoPSIiK24ucGF0aCt0LnBhdGgpLCFGLlJFUVVJUkVfQUNDRVNTX1RPS0VOKXJldHVybiBaKHQpO2lmKCEoZT1lfHxGLkFDQ0VTU19UT0tFTikpdGhyb3cgbmV3IEVycm9yKCJBbiBBUEkgYWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkIHRvIHVzZSBNYXBib3ggR0wuICIrcik7aWYoInMiPT09ZVswXSl0aHJvdyBuZXcgRXJyb3IoIlVzZSBhIHB1YmxpYyBhY2Nlc3MgdG9rZW4gKHBrLiopIHdpdGggTWFwYm94IEdMLCBub3QgYSBzZWNyZXQgYWNjZXNzIHRva2VuIChzay4qKS4gIityKTtyZXR1cm4gdC5wYXJhbXM9dC5wYXJhbXMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4tMT09PXQuaW5kZXhPZigiYWNjZXNzX3Rva2VuIil9KSksdC5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrZSksWih0KX07dmFyIEc9L14oKGh0dHBzPzopP1wvXC8pPyhbXlwvXStcLik/bWFwYm94XC5jKG58b20pKFwvfFw/fCQpL2k7ZnVuY3Rpb24gWSh0KXtyZXR1cm4gRy50ZXN0KHQpfXZhciBXPS9eKFx3Kyk6XC9cLyhbXi8/XSopKFwvW14/XSspP1w/PyguKyk/LztmdW5jdGlvbiBYKHQpe3ZhciBlPXQubWF0Y2goVyk7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gcGFyc2UgVVJMIG9iamVjdCIpO3JldHVybntwcm90b2NvbDplWzFdLGF1dGhvcml0eTplWzJdLHBhdGg6ZVszXXx8Ii8iLHBhcmFtczplWzRdP2VbNF0uc3BsaXQoIiYiKTpbXX19ZnVuY3Rpb24gWih0KXt2YXIgZT10LnBhcmFtcy5sZW5ndGg/Ij8iK3QucGFyYW1zLmpvaW4oIiYiKToiIjtyZXR1cm4gdC5wcm90b2NvbCsiOi8vIit0LmF1dGhvcml0eSt0LnBhdGgrZX1mdW5jdGlvbiBKKHQpe2lmKCF0KXJldHVybiBudWxsO3ZhciBlLHI9dC5zcGxpdCgiLiIpO2lmKCFyfHwzIT09ci5sZW5ndGgpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBKU09OLnBhcnNlKChlPXJbMV0sZGVjb2RlVVJJQ29tcG9uZW50KHNlbGYuYXRvYihlKS5zcGxpdCgiIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4iJSIrKCIwMCIrdC5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfSkpLmpvaW4oIiIpKSkpfWNhdGNoKHQpe3JldHVybiBudWxsfX12YXIgSz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dCx0aGlzLmFub25JZD1udWxsLHRoaXMuZXZlbnREYXRhPXt9LHRoaXMucXVldWU9W10sdGhpcy5wZW5kaW5nUmVxdWVzdD1udWxsfTtLLnByb3RvdHlwZS5nZXRTdG9yYWdlS2V5PWZ1bmN0aW9uKHQpe3ZhciBlLHI9SihGLkFDQ0VTU19UT0tFTiksbj0iIjtyZXR1cm4gciYmci51PyhlPXIudSxuPXNlbGYuYnRvYShlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZywoZnVuY3Rpb24odCxlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShOdW1iZXIoIjB4IitlKSl9KSkpKTpuPUYuQUNDRVNTX1RPS0VOfHwiIix0PyJtYXBib3guZXZlbnREYXRhLiIrdCsiOiIrbjoibWFwYm94LmV2ZW50RGF0YToiK259LEsucHJvdG90eXBlLmZldGNoRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9RSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3ZhciBuPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0oZSk7biYmKHRoaXMuZXZlbnREYXRhPUpTT04ucGFyc2UobikpO3ZhciBpPXNlbGYubG9jYWxTdG9yYWdlLmdldEl0ZW0ocik7aSYmKHRoaXMuYW5vbklkPWkpfWNhdGNoKHQpe18oIlVuYWJsZSB0byByZWFkIGZyb20gTG9jYWxTdG9yYWdlIil9fSxLLnByb3RvdHlwZS5zYXZlRXZlbnREYXRhPWZ1bmN0aW9uKCl7dmFyIHQ9RSgibG9jYWxTdG9yYWdlIiksZT10aGlzLmdldFN0b3JhZ2VLZXkoKSxyPXRoaXMuZ2V0U3RvcmFnZUtleSgidXVpZCIpO2lmKHQpdHJ5e3NlbGYubG9jYWxTdG9yYWdlLnNldEl0ZW0ocix0aGlzLmFub25JZCksT2JqZWN0LmtleXModGhpcy5ldmVudERhdGEpLmxlbmd0aD49MSYmc2VsZi5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShlLEpTT04uc3RyaW5naWZ5KHRoaXMuZXZlbnREYXRhKSl9Y2F0Y2godCl7XygiVW5hYmxlIHRvIHdyaXRlIHRvIExvY2FsU3RvcmFnZSIpfX0sSy5wcm90b3R5cGUucHJvY2Vzc1JlcXVlc3RzPWZ1bmN0aW9uKHQpe30sSy5wcm90b3R5cGUucG9zdEV2ZW50PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXM7aWYoRi5FVkVOVFNfVVJMKXt2YXIgYT1YKEYuRVZFTlRTX1VSTCk7YS5wYXJhbXMucHVzaCgiYWNjZXNzX3Rva2VuPSIrKG58fEYuQUNDRVNTX1RPS0VOfHwiIikpO3ZhciBvPXtldmVudDp0aGlzLnR5cGUsY3JlYXRlZDpuZXcgRGF0ZSh0KS50b0lTT1N0cmluZygpLHNka0lkZW50aWZpZXI6Im1hcGJveC1nbC1qcyIsc2RrVmVyc2lvbjoiMS4xMC4xIixza3VJZDpWLHVzZXJJZDp0aGlzLmFub25JZH0scz1lP3UobyxlKTpvLGw9e3VybDpaKGEpLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn0sYm9keTpKU09OLnN0cmluZ2lmeShbc10pfTt0aGlzLnBlbmRpbmdSZXF1ZXN0PWJ0KGwsKGZ1bmN0aW9uKHQpe2kucGVuZGluZ1JlcXVlc3Q9bnVsbCxyKHQpLGkuc2F2ZUV2ZW50RGF0YSgpLGkucHJvY2Vzc1JlcXVlc3RzKG4pfSkpfX0sSy5wcm90b3R5cGUucXVldWVSZXF1ZXN0PWZ1bmN0aW9uKHQsZSl7dGhpcy5xdWV1ZS5wdXNoKHQpLHRoaXMucHJvY2Vzc1JlcXVlc3RzKGUpfTt2YXIgUSwkLHR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmNhbGwodGhpcywibWFwLmxvYWQiKSx0aGlzLnN1Y2Nlc3M9e30sdGhpcy5za3VUb2tlbj0iIn1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zdE1hcExvYWRFdmVudD1mdW5jdGlvbih0LGUscixuKXt0aGlzLnNrdVRva2VuPXIsKEYuRVZFTlRTX1VSTCYmbnx8Ri5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHEodCl8fFkodCl9KSkpJiZ0aGlzLnF1ZXVlUmVxdWVzdCh7aWQ6ZSx0aW1lc3RhbXA6RGF0ZS5ub3coKX0sbil9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3ZhciByPXRoaXMucXVldWUuc2hpZnQoKSxuPXIuaWQsaT1yLnRpbWVzdGFtcDtuJiZ0aGlzLnN1Y2Nlc3Nbbl18fCh0aGlzLmFub25JZHx8dGhpcy5mZXRjaEV2ZW50RGF0YSgpLGQodGhpcy5hbm9uSWQpfHwodGhpcy5hbm9uSWQ9cCgpKSx0aGlzLnBvc3RFdmVudChpLHtza3VUb2tlbjp0aGlzLnNrdVRva2VufSwoZnVuY3Rpb24odCl7dHx8biYmKGUuc3VjY2Vzc1tuXT0hMCl9KSx0KSl9fSxlfShLKSxldD1uZXcoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcywiYXBwVXNlclR1cm5zdGlsZSIpLHRoaXMuX2N1c3RvbUFjY2Vzc1Rva2VuPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3RUdXJuc3RpbGVFdmVudD1mdW5jdGlvbih0LGUpe0YuRVZFTlRTX1VSTCYmRi5BQ0NFU1NfVE9LRU4mJkFycmF5LmlzQXJyYXkodCkmJnQuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHEodCl8fFkodCl9KSkmJnRoaXMucXVldWVSZXF1ZXN0KERhdGUubm93KCksZSl9LGUucHJvdG90eXBlLnByb2Nlc3NSZXF1ZXN0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKCF0aGlzLnBlbmRpbmdSZXF1ZXN0JiYwIT09dGhpcy5xdWV1ZS5sZW5ndGgpe3RoaXMuYW5vbklkJiZ0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2VzcyYmdGhpcy5ldmVudERhdGEudG9rZW5VfHx0aGlzLmZldGNoRXZlbnREYXRhKCk7dmFyIHI9SihGLkFDQ0VTU19UT0tFTiksbj1yP3IudTpGLkFDQ0VTU19UT0tFTixpPW4hPT10aGlzLmV2ZW50RGF0YS50b2tlblU7ZCh0aGlzLmFub25JZCl8fCh0aGlzLmFub25JZD1wKCksaT0hMCk7dmFyIGE9dGhpcy5xdWV1ZS5zaGlmdCgpO2lmKHRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKXt2YXIgbz1uZXcgRGF0ZSh0aGlzLmV2ZW50RGF0YS5sYXN0U3VjY2Vzcykscz1uZXcgRGF0ZShhKSxsPShhLXRoaXMuZXZlbnREYXRhLmxhc3RTdWNjZXNzKS84NjRlNTtpPWl8fGw+PTF8fGw8LTF8fG8uZ2V0RGF0ZSgpIT09cy5nZXREYXRlKCl9ZWxzZSBpPSEwO2lmKCFpKXJldHVybiB0aGlzLnByb2Nlc3NSZXF1ZXN0cygpO3RoaXMucG9zdEV2ZW50KGEseyJlbmFibGVkLnRlbGVtZXRyeSI6ITF9LChmdW5jdGlvbih0KXt0fHwoZS5ldmVudERhdGEubGFzdFN1Y2Nlc3M9YSxlLmV2ZW50RGF0YS50b2tlblU9bil9KSx0KX19LGV9KEspKSxydD1ldC5wb3N0VHVybnN0aWxlRXZlbnQuYmluZChldCksbnQ9bmV3IHR0LGl0PW50LnBvc3RNYXBMb2FkRXZlbnQuYmluZChudCksYXQ9NTAwLG90PTUwO2Z1bmN0aW9uIHN0KCl7c2VsZi5jYWNoZXMmJiFRJiYoUT1zZWxmLmNhY2hlcy5vcGVuKCJtYXBib3gtdGlsZXMiKSl9ZnVuY3Rpb24gbHQodCxlLHIpe2lmKHN0KCksUSl7dmFyIG49e3N0YXR1czplLnN0YXR1cyxzdGF0dXNUZXh0OmUuc3RhdHVzVGV4dCxoZWFkZXJzOm5ldyBzZWxmLkhlYWRlcnN9O2UuaGVhZGVycy5mb3JFYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiBuLmhlYWRlcnMuc2V0KGUsdCl9KSk7dmFyIGk9QShlLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIil8fCIiKTtpZighaVsibm8tc3RvcmUiXSlpWyJtYXgtYWdlIl0mJm4uaGVhZGVycy5zZXQoIkV4cGlyZXMiLG5ldyBEYXRlKHIrMWUzKmlbIm1heC1hZ2UiXSkudG9VVENTdHJpbmcoKSksbmV3IERhdGUobi5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKS5nZXRUaW1lKCktcjw0MmU0fHxmdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PSQpdHJ5e25ldyBSZXNwb25zZShuZXcgUmVhZGFibGVTdHJlYW0pLCQ9ITB9Y2F0Y2godCl7JD0hMX0kP2UodC5ib2R5KTp0LmJsb2IoKS50aGVuKGUpfShlLChmdW5jdGlvbihlKXt2YXIgcj1uZXcgc2VsZi5SZXNwb25zZShlLG4pO3N0KCksUSYmUS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wdXQoY3QodC51cmwpLHIpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gXyh0Lm1lc3NhZ2UpfSkpfSkpfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10LmluZGV4T2YoIj8iKTtyZXR1cm4gZTwwP3Q6dC5zbGljZSgwLGUpfWZ1bmN0aW9uIHV0KHQsZSl7aWYoc3QoKSwhUSlyZXR1cm4gZShudWxsKTt2YXIgcj1jdCh0LnVybCk7US50aGVuKChmdW5jdGlvbih0KXt0Lm1hdGNoKHIpLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO3ZhciBlPW5ldyBEYXRlKHQuaGVhZGVycy5nZXQoIkV4cGlyZXMiKXx8MCkscj1BKHQuaGVhZGVycy5nZXQoIkNhY2hlLUNvbnRyb2wiKXx8IiIpO3JldHVybiBlPkRhdGUubm93KCkmJiFyWyJuby1jYWNoZSJdfShuKTt0LmRlbGV0ZShyKSxpJiZ0LnB1dChyLG4uY2xvbmUoKSksZShudWxsLG4saSl9KSkuY2F0Y2goZSl9KSkuY2F0Y2goZSl9dmFyIGZ0LGh0PTEvMDtmdW5jdGlvbiBwdCgpe3JldHVybiBudWxsPT1mdCYmKGZ0PXNlbGYuT2Zmc2NyZWVuQ2FudmFzJiZuZXcgc2VsZi5PZmZzY3JlZW5DYW52YXMoMSwxKS5nZXRDb250ZXh0KCIyZCIpJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5jcmVhdGVJbWFnZUJpdG1hcCksZnR9dmFyIGR0PXtVbmtub3duOiJVbmtub3duIixTdHlsZToiU3R5bGUiLFNvdXJjZToiU291cmNlIixUaWxlOiJUaWxlIixHbHlwaHM6IkdseXBocyIsU3ByaXRlSW1hZ2U6IlNwcml0ZUltYWdlIixTcHJpdGVKU09OOiJTcHJpdGVKU09OIixJbWFnZToiSW1hZ2UifTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmZyZWV6ZSYmT2JqZWN0LmZyZWV6ZShkdCk7dmFyIG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyLG4pezQwMT09PXImJlkobikmJihlKz0iOiB5b3UgbWF5IGhhdmUgcHJvdmlkZWQgYW4gaW52YWxpZCBNYXBib3ggYWNjZXNzIHRva2VuLiBTZWUgaHR0cHM6Ly93d3cubWFwYm94LmNvbS9hcGktZG9jdW1lbnRhdGlvbi8jYWNjZXNzLXRva2Vucy1hbmQtdG9rZW4tc2NvcGVzIiksdC5jYWxsKHRoaXMsZSksdGhpcy5zdGF0dXM9cix0aGlzLnVybD1uLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPWV9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSsiOiAiK3RoaXMubWVzc2FnZSsiICgiK3RoaXMuc3RhdHVzKyIpOiAiK3RoaXMudXJsfSxlfShFcnJvciksZ3Q9aygpP2Z1bmN0aW9uKCl7cmV0dXJuIHNlbGYud29ya2VyJiZzZWxmLndvcmtlci5yZWZlcnJlcn06ZnVuY3Rpb24oKXtyZXR1cm4oImJsb2I6Ij09PXNlbGYubG9jYXRpb24ucHJvdG9jb2w/c2VsZi5wYXJlbnQ6c2VsZikubG9jYXRpb24uaHJlZn07ZnVuY3Rpb24gdnQodCxlKXt2YXIgcixuPW5ldyBzZWxmLkFib3J0Q29udHJvbGxlcixpPW5ldyBzZWxmLlJlcXVlc3QodC51cmwse21ldGhvZDp0Lm1ldGhvZHx8IkdFVCIsYm9keTp0LmJvZHksY3JlZGVudGlhbHM6dC5jcmVkZW50aWFscyxoZWFkZXJzOnQuaGVhZGVycyxyZWZlcnJlcjpndCgpLHNpZ25hbDpuLnNpZ25hbH0pLGE9ITEsbz0hMSxzPShyPWkudXJsKS5pbmRleE9mKCJza3U9Iik+MCYmWShyKTsianNvbiI9PT10LnR5cGUmJmkuaGVhZGVycy5zZXQoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKTt2YXIgbD1mdW5jdGlvbihyLG4sYSl7aWYoIW8pe2lmKHImJiJTZWN1cml0eUVycm9yIiE9PXIubWVzc2FnZSYmXyhyKSxuJiZhKXJldHVybiBjKG4pO3ZhciBsPURhdGUubm93KCk7c2VsZi5mZXRjaChpKS50aGVuKChmdW5jdGlvbihyKXtpZihyLm9rKXt2YXIgbj1zP3IuY2xvbmUoKTpudWxsO3JldHVybiBjKHIsbixsKX1yZXR1cm4gZShuZXcgbXQoci5zdGF0dXNUZXh0LHIuc3RhdHVzLHQudXJsKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpezIwIT09dC5jb2RlJiZlKG5ldyBFcnJvcih0Lm1lc3NhZ2UpKX0pKX19LGM9ZnVuY3Rpb24ocixuLHMpeygiYXJyYXlCdWZmZXIiPT09dC50eXBlP3IuYXJyYXlCdWZmZXIoKToianNvbiI9PT10LnR5cGU/ci5qc29uKCk6ci50ZXh0KCkpLnRoZW4oKGZ1bmN0aW9uKHQpe298fChuJiZzJiZsdChpLG4scyksYT0hMCxlKG51bGwsdCxyLmhlYWRlcnMuZ2V0KCJDYWNoZS1Db250cm9sIiksci5oZWFkZXJzLmdldCgiRXhwaXJlcyIpKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe298fGUobmV3IEVycm9yKHQubWVzc2FnZSkpfSkpfTtyZXR1cm4gcz91dChpLGwpOmwobnVsbCxudWxsKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7bz0hMCxhfHxuLmFib3J0KCl9fX12YXIgeXQ9ZnVuY3Rpb24odCxlKXtpZihyPXQudXJsLCEoL15maWxlOi8udGVzdChyKXx8L15maWxlOi8udGVzdChndCgpKSYmIS9eXHcrOi8udGVzdChyKSkpe2lmKHNlbGYuZmV0Y2gmJnNlbGYuUmVxdWVzdCYmc2VsZi5BYm9ydENvbnRyb2xsZXImJnNlbGYuUmVxdWVzdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkoInNpZ25hbCIpKXJldHVybiB2dCh0LGUpO2lmKGsoKSYmc2VsZi53b3JrZXImJnNlbGYud29ya2VyLmFjdG9yKXtyZXR1cm4gc2VsZi53b3JrZXIuYWN0b3Iuc2VuZCgiZ2V0UmVzb3VyY2UiLHQsZSx2b2lkIDAsITApfX12YXIgcjtyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgc2VsZi5YTUxIdHRwUmVxdWVzdDtmb3IodmFyIG4gaW4gci5vcGVuKHQubWV0aG9kfHwiR0VUIix0LnVybCwhMCksImFycmF5QnVmZmVyIj09PXQudHlwZSYmKHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIpLHQuaGVhZGVycylyLnNldFJlcXVlc3RIZWFkZXIobix0LmhlYWRlcnNbbl0pO3JldHVybiJqc29uIj09PXQudHlwZSYmKHIucmVzcG9uc2VUeXBlPSJ0ZXh0IixyLnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFwcGxpY2F0aW9uL2pzb24iKSksci53aXRoQ3JlZGVudGlhbHM9ImluY2x1ZGUiPT09dC5jcmVkZW50aWFscyxyLm9uZXJyb3I9ZnVuY3Rpb24oKXtlKG5ldyBFcnJvcihyLnN0YXR1c1RleHQpKX0sci5vbmxvYWQ9ZnVuY3Rpb24oKXtpZigoci5zdGF0dXM+PTIwMCYmci5zdGF0dXM8MzAwfHwwPT09ci5zdGF0dXMpJiZudWxsIT09ci5yZXNwb25zZSl7dmFyIG49ci5yZXNwb25zZTtpZigianNvbiI9PT10LnR5cGUpdHJ5e249SlNPTi5wYXJzZShyLnJlc3BvbnNlKX1jYXRjaCh0KXtyZXR1cm4gZSh0KX1lKG51bGwsbixyLmdldFJlc3BvbnNlSGVhZGVyKCJDYWNoZS1Db250cm9sIiksci5nZXRSZXNwb25zZUhlYWRlcigiRXhwaXJlcyIpKX1lbHNlIGUobmV3IG10KHIuc3RhdHVzVGV4dCxyLnN0YXR1cyx0LnVybCkpfSxyLnNlbmQodC5ib2R5KSx7Y2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYWJvcnQoKX19fSh0LGUpfSx4dD1mdW5jdGlvbih0LGUpe3JldHVybiB5dCh1KHQse3R5cGU6ImFycmF5QnVmZmVyIn0pLGUpfSxidD1mdW5jdGlvbih0LGUpe3JldHVybiB5dCh1KHQse21ldGhvZDoiUE9TVCJ9KSxlKX07dmFyIF90LHd0O190PVtdLHd0PTA7dmFyIFR0PWZ1bmN0aW9uKHQsZSl7aWYoQi5zdXBwb3J0ZWQmJih0LmhlYWRlcnN8fCh0LmhlYWRlcnM9e30pLHQuaGVhZGVycy5hY2NlcHQ9ImltYWdlL3dlYnAsKi8qIiksd3Q+PUYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTKXt2YXIgcj17cmVxdWVzdFBhcmFtZXRlcnM6dCxjYWxsYmFjazplLGNhbmNlbGxlZDohMSxjYW5jZWw6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH19O3JldHVybiBfdC5wdXNoKHIpLHJ9d3QrKzt2YXIgbj0hMSxpPWZ1bmN0aW9uKCl7aWYoIW4pZm9yKG49ITAsd3QtLTtfdC5sZW5ndGgmJnd0PEYuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTOyl7dmFyIHQ9X3Quc2hpZnQoKSxlPXQucmVxdWVzdFBhcmFtZXRlcnMscj10LmNhbGxiYWNrO3QuY2FuY2VsbGVkfHwodC5jYW5jZWw9VHQoZSxyKS5jYW5jZWwpfX0sYT14dCh0LChmdW5jdGlvbih0LHIsbixhKXtpKCksdD9lKHQpOnImJihwdCgpP2Z1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkodCldLHt0eXBlOiJpbWFnZS9wbmcifSk7c2VsZi5jcmVhdGVJbWFnZUJpdG1hcChyKS50aGVuKChmdW5jdGlvbih0KXtlKG51bGwsdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe2UobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCBpbWFnZSBiZWNhdXNlIG9mICIrdC5tZXNzYWdlKyIuIFBsZWFzZSBtYWtlIHN1cmUgdG8gdXNlIGEgc3VwcG9ydGVkIGltYWdlIHR5cGUgc3VjaCBhcyBQTkcgb3IgSlBFRy4gTm90ZSB0aGF0IFNWR3MgYXJlIG5vdCBzdXBwb3J0ZWQuIikpfSkpfShyLGUpOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBzZWxmLkltYWdlLGE9c2VsZi5VUkw7aS5vbmxvYWQ9ZnVuY3Rpb24oKXtlKG51bGwsaSksYS5yZXZva2VPYmplY3RVUkwoaS5zcmMpfSxpLm9uZXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gZShuZXcgRXJyb3IoIkNvdWxkIG5vdCBsb2FkIGltYWdlLiBQbGVhc2UgbWFrZSBzdXJlIHRvIHVzZSBhIHN1cHBvcnRlZCBpbWFnZSB0eXBlIHN1Y2ggYXMgUE5HIG9yIEpQRUcuIE5vdGUgdGhhdCBTVkdzIGFyZSBub3Qgc3VwcG9ydGVkLiIpKX07dmFyIG89bmV3IHNlbGYuQmxvYihbbmV3IFVpbnQ4QXJyYXkodCldLHt0eXBlOiJpbWFnZS9wbmcifSk7aS5jYWNoZUNvbnRyb2w9cixpLmV4cGlyZXM9bixpLnNyYz10LmJ5dGVMZW5ndGg/YS5jcmVhdGVPYmplY3RVUkwobyk6ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBWUFBQUFmRmNTSkFBQUFDMGxFUVZRWVYyTmdBQUlBQUFVQUFhclZ5RkVBQUFBQVNVVk9SSzVDWUlJPSJ9KHIsZSxuLGEpKX0pKTtyZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7YS5jYW5jZWwoKSxpKCl9fX07ZnVuY3Rpb24ga3QodCxlLHIpe3JbdF0mJi0xIT09clt0XS5pbmRleE9mKGUpfHwoclt0XT1yW3RdfHxbXSxyW3RdLnB1c2goZSkpfWZ1bmN0aW9uIEF0KHQsZSxyKXtpZihyJiZyW3RdKXt2YXIgbj1yW3RdLmluZGV4T2YoZSk7LTEhPT1uJiZyW3RdLnNwbGljZShuLDEpfX12YXIgTXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT17fSksdSh0aGlzLGUpLHRoaXMudHlwZT10fSxTdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dm9pZCAwPT09ciYmKHI9e30pLHQuY2FsbCh0aGlzLCJlcnJvciIsdSh7ZXJyb3I6ZX0scikpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlfShNdCksRXQ9ZnVuY3Rpb24oKXt9O0V0LnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9saXN0ZW5lcnM9dGhpcy5fbGlzdGVuZXJzfHx7fSxrdCh0LGUsdGhpcy5fbGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUub2ZmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEF0KHQsZSx0aGlzLl9saXN0ZW5lcnMpLEF0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUub25jZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9vbmVUaW1lTGlzdGVuZXJzPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnN8fHt9LGt0KHQsZSx0aGlzLl9vbmVUaW1lTGlzdGVuZXJzKSx0aGlzfSxFdC5wcm90b3R5cGUuZmlyZT1mdW5jdGlvbih0LGUpeyJzdHJpbmciPT10eXBlb2YgdCYmKHQ9bmV3IE10KHQsZXx8e30pKTt2YXIgcj10LnR5cGU7aWYodGhpcy5saXN0ZW5zKHIpKXt0LnRhcmdldD10aGlzO2Zvcih2YXIgbj0wLGk9dGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbcl0/dGhpcy5fbGlzdGVuZXJzW3JdLnNsaWNlKCk6W107bjxpLmxlbmd0aDtuKz0xKXtpW25dLmNhbGwodGhpcyx0KX1mb3IodmFyIGE9MCxvPXRoaXMuX29uZVRpbWVMaXN0ZW5lcnMmJnRoaXMuX29uZVRpbWVMaXN0ZW5lcnNbcl0/dGhpcy5fb25lVGltZUxpc3RlbmVyc1tyXS5zbGljZSgpOltdO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtBdChyLHMsdGhpcy5fb25lVGltZUxpc3RlbmVycykscy5jYWxsKHRoaXMsdCl9dmFyIGw9dGhpcy5fZXZlbnRlZFBhcmVudDtsJiYodSh0LCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9ldmVudGVkUGFyZW50RGF0YT90aGlzLl9ldmVudGVkUGFyZW50RGF0YSgpOnRoaXMuX2V2ZW50ZWRQYXJlbnREYXRhKSxsLmZpcmUodCkpfWVsc2UgdCBpbnN0YW5jZW9mIFN0JiZjb25zb2xlLmVycm9yKHQuZXJyb3IpO3JldHVybiB0aGlzfSxFdC5wcm90b3R5cGUubGlzdGVucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGlzdGVuZXJzJiZ0aGlzLl9saXN0ZW5lcnNbdF0mJnRoaXMuX2xpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fb25lVGltZUxpc3RlbmVycyYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XSYmdGhpcy5fb25lVGltZUxpc3RlbmVyc1t0XS5sZW5ndGg+MHx8dGhpcy5fZXZlbnRlZFBhcmVudCYmdGhpcy5fZXZlbnRlZFBhcmVudC5saXN0ZW5zKHQpfSxFdC5wcm90b3R5cGUuc2V0RXZlbnRlZFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9ldmVudGVkUGFyZW50PXQsdGhpcy5fZXZlbnRlZFBhcmVudERhdGE9ZSx0aGlzfTt2YXIgTHQ9eyR2ZXJzaW9uOjgsJHJvb3Q6e3ZlcnNpb246e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczpbOF19LG5hbWU6e3R5cGU6InN0cmluZyJ9LG1ldGFkYXRhOnt0eXBlOiIqIn0sY2VudGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciJ9LHpvb206e3R5cGU6Im51bWJlciJ9LGJlYXJpbmc6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHBlcmlvZDozNjAsdW5pdHM6ImRlZ3JlZXMifSxwaXRjaDp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsdW5pdHM6ImRlZ3JlZXMifSxsaWdodDp7dHlwZToibGlnaHQifSxzb3VyY2VzOntyZXF1aXJlZDohMCx0eXBlOiJzb3VyY2VzIn0sc3ByaXRlOnt0eXBlOiJzdHJpbmcifSxnbHlwaHM6e3R5cGU6InN0cmluZyJ9LHRyYW5zaXRpb246e3R5cGU6InRyYW5zaXRpb24ifSxsYXllcnM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToibGF5ZXIifX0sc291cmNlczp7IioiOnt0eXBlOiJzb3VyY2UifX0sc291cmNlOlsic291cmNlX3ZlY3RvciIsInNvdXJjZV9yYXN0ZXIiLCJzb3VyY2VfcmFzdGVyX2RlbSIsInNvdXJjZV9nZW9qc29uIiwic291cmNlX3ZpZGVvIiwic291cmNlX2ltYWdlIl0sc291cmNlX3ZlY3Rvcjp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnt2ZWN0b3I6e319fSx1cmw6e3R5cGU6InN0cmluZyJ9LHRpbGVzOnt0eXBlOiJhcnJheSIsdmFsdWU6InN0cmluZyJ9LGJvdW5kczp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDo0LGRlZmF1bHQ6Wy0xODAsLTg1LjA1MTEyOSwxODAsODUuMDUxMTI5XX0sc2NoZW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6Inh5eiJ9LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSxwcm9tb3RlSWQ6e3R5cGU6InByb21vdGVJZCJ9LCIqIjp7dHlwZToiKiJ9fSxzb3VyY2VfcmFzdGVyOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e3Jhc3Rlcjp7fX19LHVybDp7dHlwZToic3RyaW5nIn0sdGlsZXM6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sYm91bmRzOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjQsZGVmYXVsdDpbLTE4MCwtODUuMDUxMTI5LDE4MCw4NS4wNTExMjldfSxtaW56b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MH0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIyfSx0aWxlU2l6ZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUxMix1bml0czoicGl4ZWxzIn0sc2NoZW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e3h5ejp7fSx0bXM6e319LGRlZmF1bHQ6Inh5eiJ9LGF0dHJpYnV0aW9uOnt0eXBlOiJzdHJpbmcifSwiKiI6e3R5cGU6IioifX0sc291cmNlX3Jhc3Rlcl9kZW06e3R5cGU6e3JlcXVpcmVkOiEwLHR5cGU6ImVudW0iLHZhbHVlczp7InJhc3Rlci1kZW0iOnt9fX0sdXJsOnt0eXBlOiJzdHJpbmcifSx0aWxlczp7dHlwZToiYXJyYXkiLHZhbHVlOiJzdHJpbmcifSxib3VuZHM6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlstMTgwLC04NS4wNTExMjksMTgwLDg1LjA1MTEyOV19LG1pbnpvb206e3R5cGU6Im51bWJlciIsZGVmYXVsdDowfSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MjJ9LHRpbGVTaXplOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NTEyLHVuaXRzOiJwaXhlbHMifSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sZW5jb2Rpbmc6e3R5cGU6ImVudW0iLHZhbHVlczp7dGVycmFyaXVtOnt9LG1hcGJveDp7fX0sZGVmYXVsdDoibWFwYm94In0sIioiOnt0eXBlOiIqIn19LHNvdXJjZV9nZW9qc29uOnt0eXBlOntyZXF1aXJlZDohMCx0eXBlOiJlbnVtIix2YWx1ZXM6e2dlb2pzb246e319fSxkYXRhOnt0eXBlOiIqIn0sbWF4em9vbTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE4fSxhdHRyaWJ1dGlvbjp7dHlwZToic3RyaW5nIn0sYnVmZmVyOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTI4LG1heGltdW06NTEyLG1pbmltdW06MH0sdG9sZXJhbmNlOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6LjM3NX0sY2x1c3Rlcjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMX0sY2x1c3RlclJhZGl1czp7dHlwZToibnVtYmVyIixkZWZhdWx0OjUwLG1pbmltdW06MH0sY2x1c3Rlck1heFpvb206e3R5cGU6Im51bWJlciJ9LGNsdXN0ZXJQcm9wZXJ0aWVzOnt0eXBlOiIqIn0sbGluZU1ldHJpY3M6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LGdlbmVyYXRlSWQ6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LHByb21vdGVJZDp7dHlwZToicHJvbW90ZUlkIn19LHNvdXJjZV92aWRlbzp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOnt2aWRlbzp7fX19LHVybHM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5IixsZW5ndGg6NCx2YWx1ZTp7dHlwZToiYXJyYXkiLGxlbmd0aDoyLHZhbHVlOiJudW1iZXIifX19LHNvdXJjZV9pbWFnZTp7dHlwZTp7cmVxdWlyZWQ6ITAsdHlwZToiZW51bSIsdmFsdWVzOntpbWFnZTp7fX19LHVybDp7cmVxdWlyZWQ6ITAsdHlwZToic3RyaW5nIn0sY29vcmRpbmF0ZXM6e3JlcXVpcmVkOiEwLHR5cGU6ImFycmF5IixsZW5ndGg6NCx2YWx1ZTp7dHlwZToiYXJyYXkiLGxlbmd0aDoyLHZhbHVlOiJudW1iZXIifX19LGxheWVyOntpZDp7dHlwZToic3RyaW5nIixyZXF1aXJlZDohMH0sdHlwZTp7dHlwZToiZW51bSIsdmFsdWVzOntmaWxsOnt9LGxpbmU6e30sc3ltYm9sOnt9LGNpcmNsZTp7fSxoZWF0bWFwOnt9LCJmaWxsLWV4dHJ1c2lvbiI6e30scmFzdGVyOnt9LGhpbGxzaGFkZTp7fSxiYWNrZ3JvdW5kOnt9fSxyZXF1aXJlZDohMH0sbWV0YWRhdGE6e3R5cGU6IioifSxzb3VyY2U6e3R5cGU6InN0cmluZyJ9LCJzb3VyY2UtbGF5ZXIiOnt0eXBlOiJzdHJpbmcifSxtaW56b29tOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxtYXh6b29tOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxtYXhpbXVtOjI0fSxmaWx0ZXI6e3R5cGU6ImZpbHRlciJ9LGxheW91dDp7dHlwZToibGF5b3V0In0scGFpbnQ6e3R5cGU6InBhaW50In19LGxheW91dDpbImxheW91dF9maWxsIiwibGF5b3V0X2xpbmUiLCJsYXlvdXRfY2lyY2xlIiwibGF5b3V0X2hlYXRtYXAiLCJsYXlvdXRfZmlsbC1leHRydXNpb24iLCJsYXlvdXRfc3ltYm9sIiwibGF5b3V0X3Jhc3RlciIsImxheW91dF9oaWxsc2hhZGUiLCJsYXlvdXRfYmFja2dyb3VuZCJdLGxheW91dF9iYWNrZ3JvdW5kOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfZmlsbDp7ImZpbGwtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9jaXJjbGU6eyJjaXJjbGUtc29ydC1rZXkiOnt0eXBlOiJudW1iZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LHZpc2liaWxpdHk6e3R5cGU6ImVudW0iLHZhbHVlczp7dmlzaWJsZTp7fSxub25lOnt9fSxkZWZhdWx0OiJ2aXNpYmxlIiwicHJvcGVydHktdHlwZSI6ImNvbnN0YW50In19LGxheW91dF9oZWF0bWFwOnt2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSwibGF5b3V0X2ZpbGwtZXh0cnVzaW9uIjp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2xpbmU6eyJsaW5lLWNhcCI6e3R5cGU6ImVudW0iLHZhbHVlczp7YnV0dDp7fSxyb3VuZDp7fSxzcXVhcmU6e319LGRlZmF1bHQ6ImJ1dHQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwibGluZS1qb2luIjp7dHlwZToiZW51bSIsdmFsdWVzOntiZXZlbDp7fSxyb3VuZDp7fSxtaXRlcjp7fX0sZGVmYXVsdDoibWl0ZXIiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLW1pdGVyLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjIscmVxdWlyZXM6W3sibGluZS1qb2luIjoibWl0ZXIifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXJvdW5kLWxpbWl0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMDUscmVxdWlyZXM6W3sibGluZS1qb2luIjoicm91bmQifV0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJsaW5lLXNvcnQta2V5Ijp7dHlwZToibnVtYmVyIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSx2aXNpYmlsaXR5Ont0eXBlOiJlbnVtIix2YWx1ZXM6e3Zpc2libGU6e30sbm9uZTp7fX0sZGVmYXVsdDoidmlzaWJsZSIsInByb3BlcnR5LXR5cGUiOiJjb25zdGFudCJ9fSxsYXlvdXRfc3ltYm9sOnsic3ltYm9sLXBsYWNlbWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7cG9pbnQ6e30sbGluZTp7fSwibGluZS1jZW50ZXIiOnt9fSxkZWZhdWx0OiJwb2ludCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJzeW1ib2wtc3BhY2luZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyNTAsbWluaW11bToxLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlt7InN5bWJvbC1wbGFjZW1lbnQiOiJsaW5lIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwic3ltYm9sLWF2b2lkLWVkZ2VzIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInN5bWJvbC1zb3J0LWtleSI6e3R5cGU6Im51bWJlciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInN5bWJvbC16LW9yZGVyIjp7dHlwZToiZW51bSIsdmFsdWVzOnthdXRvOnt9LCJ2aWV3cG9ydC15Ijp7fSxzb3VyY2U6e319LGRlZmF1bHQ6ImF1dG8iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1hbGxvdy1vdmVybGFwIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24taWdub3JlLXBsYWNlbWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITEscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLW9wdGlvbmFsIjp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiaWNvbi1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHVuaXRzOiJmYWN0b3Igb2YgdGhlIG9yaWdpbmFsIGljb24gc2l6ZSIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tdGV4dC1maXQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e25vbmU6e30sd2lkdGg6e30saGVpZ2h0Ont9LGJvdGg6e319LGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tdGV4dC1maXQtcGFkZGluZyI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIixsZW5ndGg6NCxkZWZhdWx0OlswLDAsMCwwXSx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiLCJ0ZXh0LWZpZWxkIix7Imljb24tdGV4dC1maXQiOlsiYm90aCIsIndpZHRoIiwiaGVpZ2h0Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24taW1hZ2UiOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24ta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbImljb24taW1hZ2UiLHsiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tb2Zmc2V0Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0scmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fSxhdXRvOnt9fSxkZWZhdWx0OiJhdXRvIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcGl0Y2gtYWxpZ25tZW50Ijp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e30sYXV0bzp7fX0sZGVmYXVsdDoiYXV0byIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9LGF1dG86e319LGRlZmF1bHQ6ImF1dG8iLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1maWVsZCI6e3R5cGU6ImZvcm1hdHRlZCIsZGVmYXVsdDoiIix0b2tlbnM6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtZm9udCI6e3R5cGU6ImFycmF5Iix2YWx1ZToic3RyaW5nIixkZWZhdWx0OlsiT3BlbiBTYW5zIFJlZ3VsYXIiLCJBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiXSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1zaXplIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjE2LG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1tYXgtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MTAsbWluaW11bTowLHVuaXRzOiJlbXMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWxpbmUtaGVpZ2h0Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEuMix1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtbGV0dGVyLXNwYWNpbmciOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx1bml0czoiZW1zIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1qdXN0aWZ5Ijp7dHlwZToiZW51bSIsdmFsdWVzOnthdXRvOnt9LGxlZnQ6e30sY2VudGVyOnt9LHJpZ2h0Ont9fSxkZWZhdWx0OiJjZW50ZXIiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LXJhZGlhbC1vZmZzZXQiOnt0eXBlOiJudW1iZXIiLHVuaXRzOiJlbXMiLGRlZmF1bHQ6MCxyZXF1aXJlczpbInRleHQtZmllbGQiXSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19fSwidGV4dC12YXJpYWJsZS1hbmNob3IiOnt0eXBlOiJhcnJheSIsdmFsdWU6ImVudW0iLHZhbHVlczp7Y2VudGVyOnt9LGxlZnQ6e30scmlnaHQ6e30sdG9wOnt9LGJvdHRvbTp7fSwidG9wLWxlZnQiOnt9LCJ0b3AtcmlnaHQiOnt9LCJib3R0b20tbGVmdCI6e30sImJvdHRvbS1yaWdodCI6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOntjZW50ZXI6e30sbGVmdDp7fSxyaWdodDp7fSx0b3A6e30sYm90dG9tOnt9LCJ0b3AtbGVmdCI6e30sInRvcC1yaWdodCI6e30sImJvdHRvbS1sZWZ0Ijp7fSwiYm90dG9tLXJpZ2h0Ijp7fX0sZGVmYXVsdDoiY2VudGVyIixyZXF1aXJlczpbInRleHQtZmllbGQiLHsiISI6InRleHQtdmFyaWFibGUtYW5jaG9yIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW1heC1hbmdsZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDo0NSx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIix7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtd3JpdGluZy1tb2RlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJlbnVtIix2YWx1ZXM6e2hvcml6b250YWw6e30sdmVydGljYWw6e319LHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyJzeW1ib2wtcGxhY2VtZW50IjpbInBvaW50Il19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx1bml0czoiZGVncmVlcyIscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtcGFkZGluZyI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoyLG1pbmltdW06MCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQta2VlcC11cHJpZ2h0Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMCxyZXF1aXJlczpbInRleHQtZmllbGQiLHsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiOiJtYXAifSx7InN5bWJvbC1wbGFjZW1lbnQiOlsibGluZSIsImxpbmUtY2VudGVyIl19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtdHJhbnNmb3JtIjp7dHlwZToiZW51bSIsdmFsdWVzOntub25lOnt9LHVwcGVyY2FzZTp7fSxsb3dlcmNhc2U6e319LGRlZmF1bHQ6Im5vbmUiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LW9mZnNldCI6e3R5cGU6ImFycmF5Iix2YWx1ZToibnVtYmVyIix1bml0czoiZW1zIixsZW5ndGg6MixkZWZhdWx0OlswLDBdLHJlcXVpcmVzOlsidGV4dC1maWVsZCIseyIhIjoidGV4dC1yYWRpYWwtb2Zmc2V0In1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWFsbG93LW92ZXJsYXAiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwidGV4dC1pZ25vcmUtcGxhY2VtZW50Ijp7dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtb3B0aW9uYWwiOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExLHJlcXVpcmVzOlsidGV4dC1maWVsZCIsImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sdmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X3Jhc3Rlcjp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sbGF5b3V0X2hpbGxzaGFkZTp7dmlzaWJpbGl0eTp7dHlwZToiZW51bSIsdmFsdWVzOnt2aXNpYmxlOnt9LG5vbmU6e319LGRlZmF1bHQ6InZpc2libGUiLCJwcm9wZXJ0eS10eXBlIjoiY29uc3RhbnQifX0sZmlsdGVyOnt0eXBlOiJhcnJheSIsdmFsdWU6IioifSxmaWx0ZXJfb3BlcmF0b3I6e3R5cGU6ImVudW0iLHZhbHVlczp7Ij09Ijp7fSwiIT0iOnt9LCI+Ijp7fSwiPj0iOnt9LCI8Ijp7fSwiPD0iOnt9LGluOnt9LCIhaW4iOnt9LGFsbDp7fSxhbnk6e30sbm9uZTp7fSxoYXM6e30sIiFoYXMiOnt9LHdpdGhpbjp7fX19LGdlb21ldHJ5X3R5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7UG9pbnQ6e30sTGluZVN0cmluZzp7fSxQb2x5Z29uOnt9fX0sZnVuY3Rpb246e2V4cHJlc3Npb246e3R5cGU6ImV4cHJlc3Npb24ifSxzdG9wczp7dHlwZToiYXJyYXkiLHZhbHVlOiJmdW5jdGlvbl9zdG9wIn0sYmFzZTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowfSxwcm9wZXJ0eTp7dHlwZToic3RyaW5nIixkZWZhdWx0OiIkem9vbSJ9LHR5cGU6e3R5cGU6ImVudW0iLHZhbHVlczp7aWRlbnRpdHk6e30sZXhwb25lbnRpYWw6e30saW50ZXJ2YWw6e30sY2F0ZWdvcmljYWw6e319LGRlZmF1bHQ6ImV4cG9uZW50aWFsIn0sY29sb3JTcGFjZTp7dHlwZToiZW51bSIsdmFsdWVzOntyZ2I6e30sbGFiOnt9LGhjbDp7fX0sZGVmYXVsdDoicmdiIn0sZGVmYXVsdDp7dHlwZToiKiIscmVxdWlyZWQ6ITF9fSxmdW5jdGlvbl9zdG9wOnt0eXBlOiJhcnJheSIsbWluaW11bTowLG1heGltdW06MjQsdmFsdWU6WyJudW1iZXIiLCJjb2xvciJdLGxlbmd0aDoyfSxleHByZXNzaW9uOnt0eXBlOiJhcnJheSIsdmFsdWU6IioiLG1pbmltdW06MX0sZXhwcmVzc2lvbl9uYW1lOnt0eXBlOiJlbnVtIix2YWx1ZXM6e2xldDp7Z3JvdXA6IlZhcmlhYmxlIGJpbmRpbmcifSx2YXI6e2dyb3VwOiJWYXJpYWJsZSBiaW5kaW5nIn0sbGl0ZXJhbDp7Z3JvdXA6IlR5cGVzIn0sYXJyYXk6e2dyb3VwOiJUeXBlcyJ9LGF0Ontncm91cDoiTG9va3VwIn0saW46e2dyb3VwOiJMb29rdXAifSwiaW5kZXgtb2YiOntncm91cDoiTG9va3VwIn0sc2xpY2U6e2dyb3VwOiJMb29rdXAifSxjYXNlOntncm91cDoiRGVjaXNpb24ifSxtYXRjaDp7Z3JvdXA6IkRlY2lzaW9uIn0sY29hbGVzY2U6e2dyb3VwOiJEZWNpc2lvbiJ9LHN0ZXA6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSxpbnRlcnBvbGF0ZTp7Z3JvdXA6IlJhbXBzLCBzY2FsZXMsIGN1cnZlcyJ9LCJpbnRlcnBvbGF0ZS1oY2wiOntncm91cDoiUmFtcHMsIHNjYWxlcywgY3VydmVzIn0sImludGVycG9sYXRlLWxhYiI6e2dyb3VwOiJSYW1wcywgc2NhbGVzLCBjdXJ2ZXMifSxsbjI6e2dyb3VwOiJNYXRoIn0scGk6e2dyb3VwOiJNYXRoIn0sZTp7Z3JvdXA6Ik1hdGgifSx0eXBlb2Y6e2dyb3VwOiJUeXBlcyJ9LHN0cmluZzp7Z3JvdXA6IlR5cGVzIn0sbnVtYmVyOntncm91cDoiVHlwZXMifSxib29sZWFuOntncm91cDoiVHlwZXMifSxvYmplY3Q6e2dyb3VwOiJUeXBlcyJ9LGNvbGxhdG9yOntncm91cDoiVHlwZXMifSxmb3JtYXQ6e2dyb3VwOiJUeXBlcyJ9LGltYWdlOntncm91cDoiVHlwZXMifSwibnVtYmVyLWZvcm1hdCI6e2dyb3VwOiJUeXBlcyJ9LCJ0by1zdHJpbmciOntncm91cDoiVHlwZXMifSwidG8tbnVtYmVyIjp7Z3JvdXA6IlR5cGVzIn0sInRvLWJvb2xlYW4iOntncm91cDoiVHlwZXMifSwidG8tcmdiYSI6e2dyb3VwOiJDb2xvciJ9LCJ0by1jb2xvciI6e2dyb3VwOiJUeXBlcyJ9LHJnYjp7Z3JvdXA6IkNvbG9yIn0scmdiYTp7Z3JvdXA6IkNvbG9yIn0sZ2V0Ontncm91cDoiTG9va3VwIn0saGFzOntncm91cDoiTG9va3VwIn0sbGVuZ3RoOntncm91cDoiTG9va3VwIn0scHJvcGVydGllczp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCJmZWF0dXJlLXN0YXRlIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCJnZW9tZXRyeS10eXBlIjp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LGlkOntncm91cDoiRmVhdHVyZSBkYXRhIn0sem9vbTp7Z3JvdXA6Ilpvb20ifSwiaGVhdG1hcC1kZW5zaXR5Ijp7Z3JvdXA6IkhlYXRtYXAifSwibGluZS1wcm9ncmVzcyI6e2dyb3VwOiJGZWF0dXJlIGRhdGEifSxhY2N1bXVsYXRlZDp7Z3JvdXA6IkZlYXR1cmUgZGF0YSJ9LCIrIjp7Z3JvdXA6Ik1hdGgifSwiKiI6e2dyb3VwOiJNYXRoIn0sIi0iOntncm91cDoiTWF0aCJ9LCIvIjp7Z3JvdXA6Ik1hdGgifSwiJSI6e2dyb3VwOiJNYXRoIn0sIl4iOntncm91cDoiTWF0aCJ9LHNxcnQ6e2dyb3VwOiJNYXRoIn0sbG9nMTA6e2dyb3VwOiJNYXRoIn0sbG46e2dyb3VwOiJNYXRoIn0sbG9nMjp7Z3JvdXA6Ik1hdGgifSxzaW46e2dyb3VwOiJNYXRoIn0sY29zOntncm91cDoiTWF0aCJ9LHRhbjp7Z3JvdXA6Ik1hdGgifSxhc2luOntncm91cDoiTWF0aCJ9LGFjb3M6e2dyb3VwOiJNYXRoIn0sYXRhbjp7Z3JvdXA6Ik1hdGgifSxtaW46e2dyb3VwOiJNYXRoIn0sbWF4Ontncm91cDoiTWF0aCJ9LHJvdW5kOntncm91cDoiTWF0aCJ9LGFiczp7Z3JvdXA6Ik1hdGgifSxjZWlsOntncm91cDoiTWF0aCJ9LGZsb29yOntncm91cDoiTWF0aCJ9LGRpc3RhbmNlOntncm91cDoiTWF0aCJ9LCI9PSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCIhPSI6e2dyb3VwOiJEZWNpc2lvbiJ9LCI+Ijp7Z3JvdXA6IkRlY2lzaW9uIn0sIjwiOntncm91cDoiRGVjaXNpb24ifSwiPj0iOntncm91cDoiRGVjaXNpb24ifSwiPD0iOntncm91cDoiRGVjaXNpb24ifSxhbGw6e2dyb3VwOiJEZWNpc2lvbiJ9LGFueTp7Z3JvdXA6IkRlY2lzaW9uIn0sIiEiOntncm91cDoiRGVjaXNpb24ifSx3aXRoaW46e2dyb3VwOiJEZWNpc2lvbiJ9LCJpcy1zdXBwb3J0ZWQtc2NyaXB0Ijp7Z3JvdXA6IlN0cmluZyJ9LHVwY2FzZTp7Z3JvdXA6IlN0cmluZyJ9LGRvd25jYXNlOntncm91cDoiU3RyaW5nIn0sY29uY2F0Ontncm91cDoiU3RyaW5nIn0sInJlc29sdmVkLWxvY2FsZSI6e2dyb3VwOiJTdHJpbmcifX19LGxpZ2h0OnthbmNob3I6e3R5cGU6ImVudW0iLGRlZmF1bHQ6InZpZXdwb3J0Iix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50Iix0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfX0scG9zaXRpb246e3R5cGU6ImFycmF5IixkZWZhdWx0OlsxLjE1LDIxMCwzMF0sbGVuZ3RoOjMsdmFsdWU6Im51bWJlciIsInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50Iix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfX0sY29sb3I6e3R5cGU6ImNvbG9yIiwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQiLGRlZmF1bHQ6IiNmZmZmZmYiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSx0cmFuc2l0aW9uOiEwfSxpbnRlbnNpdHk6e3R5cGU6Im51bWJlciIsInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50IixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LHRyYW5zaXRpb246ITB9fSxwYWludDpbInBhaW50X2ZpbGwiLCJwYWludF9saW5lIiwicGFpbnRfY2lyY2xlIiwicGFpbnRfaGVhdG1hcCIsInBhaW50X2ZpbGwtZXh0cnVzaW9uIiwicGFpbnRfc3ltYm9sIiwicGFpbnRfcmFzdGVyIiwicGFpbnRfaGlsbHNoYWRlIiwicGFpbnRfYmFja2dyb3VuZCJdLHBhaW50X2ZpbGw6eyJmaWxsLWFudGlhbGlhcyI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImZpbGwtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImZpbGwtb3V0bGluZS1jb2xvciI6e3R5cGU6ImNvbG9yIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLXBhdHRlcm4ifSx7ImZpbGwtYW50aWFsaWFzIjohMH1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC10cmFuc2xhdGUiOnt0eXBlOiJhcnJheSIsdmFsdWU6Im51bWJlciIsbGVuZ3RoOjIsZGVmYXVsdDpbMCwwXSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJmaWxsLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1wYXR0ZXJuIjp7dHlwZToicmVzb2x2ZWRJbWFnZSIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQtZGF0YS1kcml2ZW4ifX0sInBhaW50X2ZpbGwtZXh0cnVzaW9uIjp7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJmaWxsLWV4dHJ1c2lvbi1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlt7IiEiOiJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIn1dLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixyZXF1aXJlczpbImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSJdfSwicHJvcGVydHktdHlwZSI6ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIn0sImZpbGwtZXh0cnVzaW9uLWhlaWdodCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiZmlsbC1leHRydXNpb24tYmFzZSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx1bml0czoibWV0ZXJzIix0cmFuc2l0aW9uOiEwLHJlcXVpcmVzOlsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJmaWxsLWV4dHJ1c2lvbi12ZXJ0aWNhbC1ncmFkaWVudCI6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITAsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2xpbmU6eyJsaW5lLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsibGluZS10cmFuc2xhdGUiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImxpbmUtd2lkdGgiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZ2FwLXdpZHRoIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLW9mZnNldCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLHRyYW5zaXRpb246ITAsdW5pdHM6InBpeGVscyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJsaW5lLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImxpbmUtZGFzaGFycmF5Ijp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJsaW5lIHdpZHRocyIscmVxdWlyZXM6W3siISI6ImxpbmUtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZCJ9LCJsaW5lLXBhdHRlcm4iOnt0eXBlOiJyZXNvbHZlZEltYWdlIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX0sInByb3BlcnR5LXR5cGUiOiJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiJ9LCJsaW5lLWdyYWRpZW50Ijp7dHlwZToiY29sb3IiLHRyYW5zaXRpb246ITEscmVxdWlyZXM6W3siISI6ImxpbmUtZGFzaGFycmF5In0seyIhIjoibGluZS1wYXR0ZXJuIn0se3NvdXJjZToiZ2VvanNvbiIsaGFzOntsaW5lTWV0cmljczohMH19XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbImxpbmUtcHJvZ3Jlc3MiXX0sInByb3BlcnR5LXR5cGUiOiJjb2xvci1yYW1wIn19LHBhaW50X2NpcmNsZTp7ImNpcmNsZS1yYWRpdXMiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6NSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImNpcmNsZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJjaXJjbGUtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIjp7dHlwZToiZW51bSIsdmFsdWVzOnttYXA6e30sdmlld3BvcnQ6e319LGRlZmF1bHQ6Im1hcCIscmVxdWlyZXM6WyJjaXJjbGUtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJjaXJjbGUtcGl0Y2gtc2NhbGUiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoibWFwIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITEscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiOnt0eXBlOiJlbnVtIix2YWx1ZXM6e21hcDp7fSx2aWV3cG9ydDp7fX0sZGVmYXVsdDoidmlld3BvcnQiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6e3R5cGU6ImNvbG9yIixkZWZhdWx0OiIjMDAwMDAwIix0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifX0scGFpbnRfaGVhdG1hcDp7ImhlYXRtYXAtcmFkaXVzIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjMwLG1pbmltdW06MSx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaGVhdG1hcC13ZWlnaHQiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImhlYXRtYXAtaW50ZW5zaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoZWF0bWFwLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6WyJpbnRlcnBvbGF0ZSIsWyJsaW5lYXIiXSxbImhlYXRtYXAtZGVuc2l0eSJdLDAsInJnYmEoMCwgMCwgMjU1LCAwKSIsLjEsInJveWFsYmx1ZSIsLjMsImN5YW4iLC41LCJsaW1lIiwuNywieWVsbG93IiwxLCJyZWQiXSx0cmFuc2l0aW9uOiExLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiaGVhdG1hcC1kZW5zaXR5Il19LCJwcm9wZXJ0eS10eXBlIjoiY29sb3ItcmFtcCJ9LCJoZWF0bWFwLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9zeW1ib2w6eyJpY29uLW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJpY29uLWltYWdlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJpY29uLWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24taGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwiaWNvbi1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sImljb24tdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbImljb24taW1hZ2UiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImljb24tdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsiaWNvbi1pbWFnZSIsImljb24tdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJ0ZXh0LW9wYWNpdHkiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MSxtaW5pbXVtOjAsbWF4aW11bToxLHRyYW5zaXRpb246ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAsb3ZlcnJpZGFibGU6ITAscmVxdWlyZXM6WyJ0ZXh0LWZpZWxkIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIiwiZmVhdHVyZSIsImZlYXR1cmUtc3RhdGUiXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWRyaXZlbiJ9LCJ0ZXh0LWhhbG8tY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoicmdiYSgwLCAwLCAwLCAwKSIsdHJhbnNpdGlvbjohMCxyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtaGFsby13aWR0aCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJwaXhlbHMiLHJlcXVpcmVzOlsidGV4dC1maWVsZCJdLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiLCJmZWF0dXJlLXN0YXRlIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4ifSwidGV4dC1oYWxvLWJsdXIiOnt0eXBlOiJudW1iZXIiLGRlZmF1bHQ6MCxtaW5pbXVtOjAsdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iLCJmZWF0dXJlIiwiZmVhdHVyZS1zdGF0ZSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtZHJpdmVuIn0sInRleHQtdHJhbnNsYXRlIjp7dHlwZToiYXJyYXkiLHZhbHVlOiJudW1iZXIiLGxlbmd0aDoyLGRlZmF1bHQ6WzAsMF0sdHJhbnNpdGlvbjohMCx1bml0czoicGl4ZWxzIixyZXF1aXJlczpbInRleHQtZmllbGQiXSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInRleHQtdHJhbnNsYXRlLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJtYXAiLHJlcXVpcmVzOlsidGV4dC1maWVsZCIsInRleHQtdHJhbnNsYXRlIl0sZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9yYXN0ZXI6eyJyYXN0ZXItb3BhY2l0eSI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1odWUtcm90YXRlIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAscGVyaW9kOjM2MCx0cmFuc2l0aW9uOiEwLHVuaXRzOiJkZWdyZWVzIixleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1icmlnaHRuZXNzLW1heCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDoxLG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1zYXR1cmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTotMSxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sInJhc3Rlci1jb250cmFzdCI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDowLG1pbmltdW06LTEsbWF4aW11bToxLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItcmVzYW1wbGluZyI6e3R5cGU6ImVudW0iLHZhbHVlczp7bGluZWFyOnt9LG5lYXJlc3Q6e319LGRlZmF1bHQ6ImxpbmVhciIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMDAsbWluaW11bTowLHRyYW5zaXRpb246ITEsdW5pdHM6Im1pbGxpc2Vjb25kcyIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9fSxwYWludF9oaWxsc2hhZGU6eyJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWRpcmVjdGlvbiI6e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMzUsbWluaW11bTowLG1heGltdW06MzU5LHRyYW5zaXRpb246ITEsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiEwLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6e3R5cGU6ImVudW0iLHZhbHVlczp7bWFwOnt9LHZpZXdwb3J0Ont9fSxkZWZhdWx0OiJ2aWV3cG9ydCIsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1jb25zdGFudCJ9LCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIjp7dHlwZToibnVtYmVyIixkZWZhdWx0Oi41LG1pbmltdW06MCxtYXhpbXVtOjEsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiI0ZGRkZGRiIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOnt0eXBlOiJjb2xvciIsZGVmYXVsdDoiIzAwMDAwMCIsdHJhbnNpdGlvbjohMCxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In19LHBhaW50X2JhY2tncm91bmQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjp7dHlwZToiY29sb3IiLGRlZmF1bHQ6IiMwMDAwMDAiLHRyYW5zaXRpb246ITAscmVxdWlyZXM6W3siISI6ImJhY2tncm91bmQtcGF0dGVybiJ9XSxleHByZXNzaW9uOntpbnRlcnBvbGF0ZWQ6ITAscGFyYW1ldGVyczpbInpvb20iXX0sInByb3BlcnR5LXR5cGUiOiJkYXRhLWNvbnN0YW50In0sImJhY2tncm91bmQtcGF0dGVybiI6e3R5cGU6InJlc29sdmVkSW1hZ2UiLHRyYW5zaXRpb246ITAsZXhwcmVzc2lvbjp7aW50ZXJwb2xhdGVkOiExLHBhcmFtZXRlcnM6WyJ6b29tIl19LCJwcm9wZXJ0eS10eXBlIjoiY3Jvc3MtZmFkZWQifSwiYmFja2dyb3VuZC1vcGFjaXR5Ijp7dHlwZToibnVtYmVyIixkZWZhdWx0OjEsbWluaW11bTowLG1heGltdW06MSx0cmFuc2l0aW9uOiEwLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMCxwYXJhbWV0ZXJzOlsiem9vbSJdfSwicHJvcGVydHktdHlwZSI6ImRhdGEtY29uc3RhbnQifX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3R5cGU6Im51bWJlciIsZGVmYXVsdDozMDAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifSxkZWxheTp7dHlwZToibnVtYmVyIixkZWZhdWx0OjAsbWluaW11bTowLHVuaXRzOiJtaWxsaXNlY29uZHMifX0sInByb3BlcnR5LXR5cGUiOnsiZGF0YS1kcml2ZW4iOnt0eXBlOiJwcm9wZXJ0eS10eXBlIn0sImNyb3NzLWZhZGVkIjp7dHlwZToicHJvcGVydHktdHlwZSJ9LCJjcm9zcy1mYWRlZC1kYXRhLWRyaXZlbiI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiY29sb3ItcmFtcCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSwiZGF0YS1jb25zdGFudCI6e3R5cGU6InByb3BlcnR5LXR5cGUifSxjb25zdGFudDp7dHlwZToicHJvcGVydHktdHlwZSJ9fSxwcm9tb3RlSWQ6eyIqIjp7dHlwZToic3RyaW5nIn19fSxDdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLm1lc3NhZ2U9KHQ/dCsiOiAiOiIiKStyLG4mJih0aGlzLmlkZW50aWZpZXI9biksbnVsbCE9ZSYmZS5fX2xpbmVfXyYmKHRoaXMubGluZT1lLl9fbGluZV9fKX07ZnVuY3Rpb24gUHQodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlO3JldHVybiByP1tuZXcgQ3QoZSxyLCJjb25zdGFudHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQgYXMgb2YgdjgiKV06W119ZnVuY3Rpb24gSXQodCl7Zm9yKHZhciBlPVtdLHI9YXJndW1lbnRzLmxlbmd0aC0xO3ItLSA+MDspZVtyXT1hcmd1bWVudHNbcisxXTtmb3IodmFyIG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2Zvcih2YXIgbyBpbiBhKXRbb109YVtvXX1yZXR1cm4gdH1mdW5jdGlvbiBPdCh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIEJvb2xlYW4/dC52YWx1ZU9mKCk6dH1mdW5jdGlvbiB6dCh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0Lm1hcCh6dCk7aWYodCBpbnN0YW5jZW9mIE9iamVjdCYmISh0IGluc3RhbmNlb2YgTnVtYmVyfHx0IGluc3RhbmNlb2YgU3RyaW5nfHx0IGluc3RhbmNlb2YgQm9vbGVhbikpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KWVbcl09enQodFtyXSk7cmV0dXJuIGV9cmV0dXJuIE90KHQpfXZhciBEdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsciksdGhpcy5tZXNzYWdlPXIsdGhpcy5rZXk9ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRXJyb3IpLFJ0PWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09ZSYmKGU9W10pLHRoaXMucGFyZW50PXQsdGhpcy5iaW5kaW5ncz17fTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdLGE9aVswXSxvPWlbMV07dGhpcy5iaW5kaW5nc1thXT1vfX07UnQucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IFJ0KHRoaXMsdCl9LFJ0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7aWYodGhpcy5iaW5kaW5nc1t0XSlyZXR1cm4gdGhpcy5iaW5kaW5nc1t0XTtpZih0aGlzLnBhcmVudClyZXR1cm4gdGhpcy5wYXJlbnQuZ2V0KHQpO3Rocm93IG5ldyBFcnJvcih0KyIgbm90IGZvdW5kIGluIHNjb3BlLiIpfSxSdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKHQpe3JldHVybiEhdGhpcy5iaW5kaW5nc1t0XXx8ISF0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuaGFzKHQpfTt2YXIgRnQ9e2tpbmQ6Im51bGwifSxCdD17a2luZDoibnVtYmVyIn0sTnQ9e2tpbmQ6InN0cmluZyJ9LGp0PXtraW5kOiJib29sZWFuIn0sVXQ9e2tpbmQ6ImNvbG9yIn0sVnQ9e2tpbmQ6Im9iamVjdCJ9LEh0PXtraW5kOiJ2YWx1ZSJ9LHF0PXtraW5kOiJjb2xsYXRvciJ9LEd0PXtraW5kOiJmb3JtYXR0ZWQifSxZdD17a2luZDoicmVzb2x2ZWRJbWFnZSJ9O2Z1bmN0aW9uIFd0KHQsZSl7cmV0dXJue2tpbmQ6ImFycmF5IixpdGVtVHlwZTp0LE46ZX19ZnVuY3Rpb24gWHQodCl7aWYoImFycmF5Ij09PXQua2luZCl7dmFyIGU9WHQodC5pdGVtVHlwZSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0Lk4/ImFycmF5PCIrZSsiLCAiK3QuTisiPiI6InZhbHVlIj09PXQuaXRlbVR5cGUua2luZD8iYXJyYXkiOiJhcnJheTwiK2UrIj4ifXJldHVybiB0LmtpbmR9dmFyIFp0PVtGdCxCdCxOdCxqdCxVdCxHdCxWdCxXdChIdCksWXRdO2Z1bmN0aW9uIEp0KHQsZSl7aWYoImVycm9yIj09PWUua2luZClyZXR1cm4gbnVsbDtpZigiYXJyYXkiPT09dC5raW5kKXtpZigiYXJyYXkiPT09ZS5raW5kJiYoMD09PWUuTiYmInZhbHVlIj09PWUuaXRlbVR5cGUua2luZHx8IUp0KHQuaXRlbVR5cGUsZS5pdGVtVHlwZSkpJiYoIm51bWJlciIhPXR5cGVvZiB0Lk58fHQuTj09PWUuTikpcmV0dXJuIG51bGx9ZWxzZXtpZih0LmtpbmQ9PT1lLmtpbmQpcmV0dXJuIG51bGw7aWYoInZhbHVlIj09PXQua2luZClmb3IodmFyIHI9MCxuPVp0O3I8bi5sZW5ndGg7cis9MSl7aWYoIUp0KG5bcl0sZSkpcmV0dXJuIG51bGx9fXJldHVybiJFeHBlY3RlZCAiK1h0KHQpKyIgYnV0IGZvdW5kICIrWHQoZSkrIiBpbnN0ZWFkLiJ9ZnVuY3Rpb24gS3QodCxlKXtyZXR1cm4gZS5zb21lKChmdW5jdGlvbihlKXtyZXR1cm4gZS5raW5kPT09dC5raW5kfSkpfWZ1bmN0aW9uIFF0KHQsZSl7cmV0dXJuIGUuc29tZSgoZnVuY3Rpb24oZSl7cmV0dXJuIm51bGwiPT09ZT9udWxsPT09dDoiYXJyYXkiPT09ZT9BcnJheS5pc0FycmF5KHQpOiJvYmplY3QiPT09ZT90JiYhQXJyYXkuaXNBcnJheSh0KSYmIm9iamVjdCI9PXR5cGVvZiB0OmU9PT10eXBlb2YgdH0pKX12YXIgJHQ9ZSgoZnVuY3Rpb24odCxlKXt2YXIgcj17dHJhbnNwYXJlbnQ6WzAsMCwwLDBdLGFsaWNlYmx1ZTpbMjQwLDI0OCwyNTUsMV0sYW50aXF1ZXdoaXRlOlsyNTAsMjM1LDIxNSwxXSxhcXVhOlswLDI1NSwyNTUsMV0sYXF1YW1hcmluZTpbMTI3LDI1NSwyMTIsMV0sYXp1cmU6WzI0MCwyNTUsMjU1LDFdLGJlaWdlOlsyNDUsMjQ1LDIyMCwxXSxiaXNxdWU6WzI1NSwyMjgsMTk2LDFdLGJsYWNrOlswLDAsMCwxXSxibGFuY2hlZGFsbW9uZDpbMjU1LDIzNSwyMDUsMV0sYmx1ZTpbMCwwLDI1NSwxXSxibHVldmlvbGV0OlsxMzgsNDMsMjI2LDFdLGJyb3duOlsxNjUsNDIsNDIsMV0sYnVybHl3b29kOlsyMjIsMTg0LDEzNSwxXSxjYWRldGJsdWU6Wzk1LDE1OCwxNjAsMV0sY2hhcnRyZXVzZTpbMTI3LDI1NSwwLDFdLGNob2NvbGF0ZTpbMjEwLDEwNSwzMCwxXSxjb3JhbDpbMjU1LDEyNyw4MCwxXSxjb3JuZmxvd2VyYmx1ZTpbMTAwLDE0OSwyMzcsMV0sY29ybnNpbGs6WzI1NSwyNDgsMjIwLDFdLGNyaW1zb246WzIyMCwyMCw2MCwxXSxjeWFuOlswLDI1NSwyNTUsMV0sZGFya2JsdWU6WzAsMCwxMzksMV0sZGFya2N5YW46WzAsMTM5LDEzOSwxXSxkYXJrZ29sZGVucm9kOlsxODQsMTM0LDExLDFdLGRhcmtncmF5OlsxNjksMTY5LDE2OSwxXSxkYXJrZ3JlZW46WzAsMTAwLDAsMV0sZGFya2dyZXk6WzE2OSwxNjksMTY5LDFdLGRhcmtraGFraTpbMTg5LDE4MywxMDcsMV0sZGFya21hZ2VudGE6WzEzOSwwLDEzOSwxXSxkYXJrb2xpdmVncmVlbjpbODUsMTA3LDQ3LDFdLGRhcmtvcmFuZ2U6WzI1NSwxNDAsMCwxXSxkYXJrb3JjaGlkOlsxNTMsNTAsMjA0LDFdLGRhcmtyZWQ6WzEzOSwwLDAsMV0sZGFya3NhbG1vbjpbMjMzLDE1MCwxMjIsMV0sZGFya3NlYWdyZWVuOlsxNDMsMTg4LDE0MywxXSxkYXJrc2xhdGVibHVlOls3Miw2MSwxMzksMV0sZGFya3NsYXRlZ3JheTpbNDcsNzksNzksMV0sZGFya3NsYXRlZ3JleTpbNDcsNzksNzksMV0sZGFya3R1cnF1b2lzZTpbMCwyMDYsMjA5LDFdLGRhcmt2aW9sZXQ6WzE0OCwwLDIxMSwxXSxkZWVwcGluazpbMjU1LDIwLDE0NywxXSxkZWVwc2t5Ymx1ZTpbMCwxOTEsMjU1LDFdLGRpbWdyYXk6WzEwNSwxMDUsMTA1LDFdLGRpbWdyZXk6WzEwNSwxMDUsMTA1LDFdLGRvZGdlcmJsdWU6WzMwLDE0NCwyNTUsMV0sZmlyZWJyaWNrOlsxNzgsMzQsMzQsMV0sZmxvcmFsd2hpdGU6WzI1NSwyNTAsMjQwLDFdLGZvcmVzdGdyZWVuOlszNCwxMzksMzQsMV0sZnVjaHNpYTpbMjU1LDAsMjU1LDFdLGdhaW5zYm9ybzpbMjIwLDIyMCwyMjAsMV0sZ2hvc3R3aGl0ZTpbMjQ4LDI0OCwyNTUsMV0sZ29sZDpbMjU1LDIxNSwwLDFdLGdvbGRlbnJvZDpbMjE4LDE2NSwzMiwxXSxncmF5OlsxMjgsMTI4LDEyOCwxXSxncmVlbjpbMCwxMjgsMCwxXSxncmVlbnllbGxvdzpbMTczLDI1NSw0NywxXSxncmV5OlsxMjgsMTI4LDEyOCwxXSxob25leWRldzpbMjQwLDI1NSwyNDAsMV0saG90cGluazpbMjU1LDEwNSwxODAsMV0saW5kaWFucmVkOlsyMDUsOTIsOTIsMV0saW5kaWdvOls3NSwwLDEzMCwxXSxpdm9yeTpbMjU1LDI1NSwyNDAsMV0sa2hha2k6WzI0MCwyMzAsMTQwLDFdLGxhdmVuZGVyOlsyMzAsMjMwLDI1MCwxXSxsYXZlbmRlcmJsdXNoOlsyNTUsMjQwLDI0NSwxXSxsYXduZ3JlZW46WzEyNCwyNTIsMCwxXSxsZW1vbmNoaWZmb246WzI1NSwyNTAsMjA1LDFdLGxpZ2h0Ymx1ZTpbMTczLDIxNiwyMzAsMV0sbGlnaHRjb3JhbDpbMjQwLDEyOCwxMjgsMV0sbGlnaHRjeWFuOlsyMjQsMjU1LDI1NSwxXSxsaWdodGdvbGRlbnJvZHllbGxvdzpbMjUwLDI1MCwyMTAsMV0sbGlnaHRncmF5OlsyMTEsMjExLDIxMSwxXSxsaWdodGdyZWVuOlsxNDQsMjM4LDE0NCwxXSxsaWdodGdyZXk6WzIxMSwyMTEsMjExLDFdLGxpZ2h0cGluazpbMjU1LDE4MiwxOTMsMV0sbGlnaHRzYWxtb246WzI1NSwxNjAsMTIyLDFdLGxpZ2h0c2VhZ3JlZW46WzMyLDE3OCwxNzAsMV0sbGlnaHRza3libHVlOlsxMzUsMjA2LDI1MCwxXSxsaWdodHNsYXRlZ3JheTpbMTE5LDEzNiwxNTMsMV0sbGlnaHRzbGF0ZWdyZXk6WzExOSwxMzYsMTUzLDFdLGxpZ2h0c3RlZWxibHVlOlsxNzYsMTk2LDIyMiwxXSxsaWdodHllbGxvdzpbMjU1LDI1NSwyMjQsMV0sbGltZTpbMCwyNTUsMCwxXSxsaW1lZ3JlZW46WzUwLDIwNSw1MCwxXSxsaW5lbjpbMjUwLDI0MCwyMzAsMV0sbWFnZW50YTpbMjU1LDAsMjU1LDFdLG1hcm9vbjpbMTI4LDAsMCwxXSxtZWRpdW1hcXVhbWFyaW5lOlsxMDIsMjA1LDE3MCwxXSxtZWRpdW1ibHVlOlswLDAsMjA1LDFdLG1lZGl1bW9yY2hpZDpbMTg2LDg1LDIxMSwxXSxtZWRpdW1wdXJwbGU6WzE0NywxMTIsMjE5LDFdLG1lZGl1bXNlYWdyZWVuOls2MCwxNzksMTEzLDFdLG1lZGl1bXNsYXRlYmx1ZTpbMTIzLDEwNCwyMzgsMV0sbWVkaXVtc3ByaW5nZ3JlZW46WzAsMjUwLDE1NCwxXSxtZWRpdW10dXJxdW9pc2U6WzcyLDIwOSwyMDQsMV0sbWVkaXVtdmlvbGV0cmVkOlsxOTksMjEsMTMzLDFdLG1pZG5pZ2h0Ymx1ZTpbMjUsMjUsMTEyLDFdLG1pbnRjcmVhbTpbMjQ1LDI1NSwyNTAsMV0sbWlzdHlyb3NlOlsyNTUsMjI4LDIyNSwxXSxtb2NjYXNpbjpbMjU1LDIyOCwxODEsMV0sbmF2YWpvd2hpdGU6WzI1NSwyMjIsMTczLDFdLG5hdnk6WzAsMCwxMjgsMV0sb2xkbGFjZTpbMjUzLDI0NSwyMzAsMV0sb2xpdmU6WzEyOCwxMjgsMCwxXSxvbGl2ZWRyYWI6WzEwNywxNDIsMzUsMV0sb3JhbmdlOlsyNTUsMTY1LDAsMV0sb3JhbmdlcmVkOlsyNTUsNjksMCwxXSxvcmNoaWQ6WzIxOCwxMTIsMjE0LDFdLHBhbGVnb2xkZW5yb2Q6WzIzOCwyMzIsMTcwLDFdLHBhbGVncmVlbjpbMTUyLDI1MSwxNTIsMV0scGFsZXR1cnF1b2lzZTpbMTc1LDIzOCwyMzgsMV0scGFsZXZpb2xldHJlZDpbMjE5LDExMiwxNDcsMV0scGFwYXlhd2hpcDpbMjU1LDIzOSwyMTMsMV0scGVhY2hwdWZmOlsyNTUsMjE4LDE4NSwxXSxwZXJ1OlsyMDUsMTMzLDYzLDFdLHBpbms6WzI1NSwxOTIsMjAzLDFdLHBsdW06WzIyMSwxNjAsMjIxLDFdLHBvd2RlcmJsdWU6WzE3NiwyMjQsMjMwLDFdLHB1cnBsZTpbMTI4LDAsMTI4LDFdLHJlYmVjY2FwdXJwbGU6WzEwMiw1MSwxNTMsMV0scmVkOlsyNTUsMCwwLDFdLHJvc3licm93bjpbMTg4LDE0MywxNDMsMV0scm95YWxibHVlOls2NSwxMDUsMjI1LDFdLHNhZGRsZWJyb3duOlsxMzksNjksMTksMV0sc2FsbW9uOlsyNTAsMTI4LDExNCwxXSxzYW5keWJyb3duOlsyNDQsMTY0LDk2LDFdLHNlYWdyZWVuOls0NiwxMzksODcsMV0sc2Vhc2hlbGw6WzI1NSwyNDUsMjM4LDFdLHNpZW5uYTpbMTYwLDgyLDQ1LDFdLHNpbHZlcjpbMTkyLDE5MiwxOTIsMV0sc2t5Ymx1ZTpbMTM1LDIwNiwyMzUsMV0sc2xhdGVibHVlOlsxMDYsOTAsMjA1LDFdLHNsYXRlZ3JheTpbMTEyLDEyOCwxNDQsMV0sc2xhdGVncmV5OlsxMTIsMTI4LDE0NCwxXSxzbm93OlsyNTUsMjUwLDI1MCwxXSxzcHJpbmdncmVlbjpbMCwyNTUsMTI3LDFdLHN0ZWVsYmx1ZTpbNzAsMTMwLDE4MCwxXSx0YW46WzIxMCwxODAsMTQwLDFdLHRlYWw6WzAsMTI4LDEyOCwxXSx0aGlzdGxlOlsyMTYsMTkxLDIxNiwxXSx0b21hdG86WzI1NSw5OSw3MSwxXSx0dXJxdW9pc2U6WzY0LDIyNCwyMDgsMV0sdmlvbGV0OlsyMzgsMTMwLDIzOCwxXSx3aGVhdDpbMjQ1LDIyMiwxNzksMV0sd2hpdGU6WzI1NSwyNTUsMjU1LDFdLHdoaXRlc21va2U6WzI0NSwyNDUsMjQ1LDFdLHllbGxvdzpbMjU1LDI1NSwwLDFdLHllbGxvd2dyZWVuOlsxNTQsMjA1LDUwLDFdfTtmdW5jdGlvbiBuKHQpe3JldHVybih0PU1hdGgucm91bmQodCkpPDA/MDp0PjI1NT8yNTU6dH1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDA/MDp0PjE/MTp0fWZ1bmN0aW9uIGEodCl7cmV0dXJuIiUiPT09dFt0Lmxlbmd0aC0xXT9uKHBhcnNlRmxvYXQodCkvMTAwKjI1NSk6bihwYXJzZUludCh0KSl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4iJSI9PT10W3QubGVuZ3RoLTFdP2kocGFyc2VGbG9hdCh0KS8xMDApOmkocGFyc2VGbG9hdCh0KSl9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHI8MD9yKz0xOnI+MSYmKHItPTEpLDYqcjwxP3QrKGUtdCkqcio2OjIqcjwxP2U6MypyPDI/dCsoZS10KSooMi8zLXIpKjY6dH10cnl7ZS5wYXJzZUNTU0NvbG9yPWZ1bmN0aW9uKHQpe3ZhciBlLGk9dC5yZXBsYWNlKC8gL2csIiIpLnRvTG93ZXJDYXNlKCk7aWYoaSBpbiByKXJldHVybiByW2ldLnNsaWNlKCk7aWYoIiMiPT09aVswXSlyZXR1cm4gND09PWkubGVuZ3RoPyhlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTQwOTU/WygzODQwJmUpPj40fCgzODQwJmUpPj44LDI0MCZlfCgyNDAmZSk+PjQsMTUmZXwoMTUmZSk8PDQsMV06bnVsbDo3PT09aS5sZW5ndGgmJihlPXBhcnNlSW50KGkuc3Vic3RyKDEpLDE2KSk+PTAmJmU8PTE2Nzc3MjE1P1soMTY3MTE2ODAmZSk+PjE2LCg2NTI4MCZlKT4+OCwyNTUmZSwxXTpudWxsO3ZhciBsPWkuaW5kZXhPZigiKCIpLGM9aS5pbmRleE9mKCIpIik7aWYoLTEhPT1sJiZjKzE9PT1pLmxlbmd0aCl7dmFyIHU9aS5zdWJzdHIoMCxsKSxmPWkuc3Vic3RyKGwrMSxjLShsKzEpKS5zcGxpdCgiLCIpLGg9MTtzd2l0Y2godSl7Y2FzZSJyZ2JhIjppZig0IT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7aD1vKGYucG9wKCkpO2Nhc2UicmdiIjpyZXR1cm4gMyE9PWYubGVuZ3RoP251bGw6W2EoZlswXSksYShmWzFdKSxhKGZbMl0pLGhdO2Nhc2UiaHNsYSI6aWYoNCE9PWYubGVuZ3RoKXJldHVybiBudWxsO2g9byhmLnBvcCgpKTtjYXNlImhzbCI6aWYoMyE9PWYubGVuZ3RoKXJldHVybiBudWxsO3ZhciBwPShwYXJzZUZsb2F0KGZbMF0pJTM2MCszNjApJTM2MC8zNjAsZD1vKGZbMV0pLG09byhmWzJdKSxnPW08PS41P20qKGQrMSk6bStkLW0qZCx2PTIqbS1nO3JldHVybltuKDI1NSpzKHYsZyxwKzEvMykpLG4oMjU1KnModixnLHApKSxuKDI1NSpzKHYsZyxwLTEvMykpLGhdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fXJldHVybiBudWxsfX1jYXRjaCh0KXt9fSkpLnBhcnNlQ1NTQ29sb3IsdGU9ZnVuY3Rpb24odCxlLHIsbil7dm9pZCAwPT09biYmKG49MSksdGhpcy5yPXQsdGhpcy5nPWUsdGhpcy5iPXIsdGhpcy5hPW59O3RlLnBhcnNlPWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiB0ZSlyZXR1cm4gdDtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciBlPSR0KHQpO2lmKGUpcmV0dXJuIG5ldyB0ZShlWzBdLzI1NSplWzNdLGVbMV0vMjU1KmVbM10sZVsyXS8yNTUqZVszXSxlWzNdKX19fSx0ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvQXJyYXkoKSxlPXRbMF0scj10WzFdLG49dFsyXSxpPXRbM107cmV0dXJuInJnYmEoIitNYXRoLnJvdW5kKGUpKyIsIitNYXRoLnJvdW5kKHIpKyIsIitNYXRoLnJvdW5kKG4pKyIsIitpKyIpIn0sdGUucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnIsZT10aGlzLmcscj10aGlzLmIsbj10aGlzLmE7cmV0dXJuIDA9PT1uP1swLDAsMCwwXTpbMjU1KnQvbiwyNTUqZS9uLDI1NSpyL24sbl19LHRlLmJsYWNrPW5ldyB0ZSgwLDAsMCwxKSx0ZS53aGl0ZT1uZXcgdGUoMSwxLDEsMSksdGUudHJhbnNwYXJlbnQ9bmV3IHRlKDAsMCwwLDApLHRlLnJlZD1uZXcgdGUoMSwwLDAsMSk7dmFyIGVlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNlbnNpdGl2aXR5PXQ/ZT8idmFyaWFudCI6ImNhc2UiOmU/ImFjY2VudCI6ImJhc2UiLHRoaXMubG9jYWxlPXIsdGhpcy5jb2xsYXRvcj1uZXcgSW50bC5Db2xsYXRvcih0aGlzLmxvY2FsZT90aGlzLmxvY2FsZTpbXSx7c2Vuc2l0aXZpdHk6dGhpcy5zZW5zaXRpdml0eSx1c2FnZToic2VhcmNoIn0pfTtlZS5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmNvbGxhdG9yLmNvbXBhcmUodCxlKX0sZWUucHJvdG90eXBlLnJlc29sdmVkTG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJbnRsLkNvbGxhdG9yKHRoaXMubG9jYWxlP3RoaXMubG9jYWxlOltdKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGV9O3ZhciByZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMudGV4dD10LHRoaXMuaW1hZ2U9ZSx0aGlzLnNjYWxlPXIsdGhpcy5mb250U3RhY2s9bix0aGlzLnRleHRDb2xvcj1pfSxuZT1mdW5jdGlvbih0KXt0aGlzLnNlY3Rpb25zPXR9O25lLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuZShbbmV3IHJlKHQsbnVsbCxudWxsLG51bGwsbnVsbCldKX0sbmUucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2VjdGlvbnMubGVuZ3RofHwhdGhpcy5zZWN0aW9ucy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXQudGV4dC5sZW5ndGh8fHQuaW1hZ2UmJjAhPT10LmltYWdlLm5hbWUubGVuZ3RofSkpfSxuZS5mYWN0b3J5PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgbmU/dDpuZS5mcm9tU3RyaW5nKHQpfSxuZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuc2VjdGlvbnMubGVuZ3RoPyIiOnRoaXMuc2VjdGlvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0fSkpLmpvaW4oIiIpfSxuZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsiZm9ybWF0Il0sZT0wLHI9dGhpcy5zZWN0aW9ucztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYobi5pbWFnZSl0LnB1c2goWyJpbWFnZSIsbi5pbWFnZS5uYW1lXSk7ZWxzZXt0LnB1c2gobi50ZXh0KTt2YXIgaT17fTtuLmZvbnRTdGFjayYmKGlbInRleHQtZm9udCJdPVsibGl0ZXJhbCIsbi5mb250U3RhY2suc3BsaXQoIiwiKV0pLG4uc2NhbGUmJihpWyJmb250LXNjYWxlIl09bi5zY2FsZSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09WyJyZ2JhIl0uY29uY2F0KG4udGV4dENvbG9yLnRvQXJyYXkoKSkpLHQucHVzaChpKX19cmV0dXJuIHR9O3ZhciBpZT1mdW5jdGlvbih0KXt0aGlzLm5hbWU9dC5uYW1lLHRoaXMuYXZhaWxhYmxlPXQuYXZhaWxhYmxlfTtmdW5jdGlvbiBhZSh0LGUscixuKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJnQ8PTI1NSYmIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiZlPD0yNTUmJiJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmcjw9MjU1P3ZvaWQgMD09PW58fCJudW1iZXIiPT10eXBlb2YgbiYmbj49MCYmbjw9MT9udWxsOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrW3QsZSxyLG5dLmpvaW4oIiwgIikrIl06ICdhJyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMS4iOiJJbnZhbGlkIHJnYmEgdmFsdWUgWyIrKCJudW1iZXIiPT10eXBlb2Ygbj9bdCxlLHIsbl06W3QsZSxyXSkuam9pbigiLCAiKSsiXTogJ3InLCAnZycsIGFuZCAnYicgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NS4ifWZ1bmN0aW9uIG9lKHQpe2lmKG51bGw9PT10KXJldHVybiEwO2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4hMDtpZigiYm9vbGVhbiI9PXR5cGVvZiB0KXJldHVybiEwO2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgdGUpcmV0dXJuITA7aWYodCBpbnN0YW5jZW9mIGVlKXJldHVybiEwO2lmKHQgaW5zdGFuY2VvZiBuZSlyZXR1cm4hMDtpZih0IGluc3RhbmNlb2YgaWUpcmV0dXJuITA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoIW9lKHJbZV0pKXJldHVybiExfXJldHVybiEwfWlmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKHZhciBuIGluIHQpaWYoIW9lKHRbbl0pKXJldHVybiExO3JldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHNlKHQpe2lmKG51bGw9PT10KXJldHVybiBGdDtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIE50O2lmKCJib29sZWFuIj09dHlwZW9mIHQpcmV0dXJuIGp0O2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gQnQ7aWYodCBpbnN0YW5jZW9mIHRlKXJldHVybiBVdDtpZih0IGluc3RhbmNlb2YgZWUpcmV0dXJuIHF0O2lmKHQgaW5zdGFuY2VvZiBuZSlyZXR1cm4gR3Q7aWYodCBpbnN0YW5jZW9mIGllKXJldHVybiBZdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGUscj10Lmxlbmd0aCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9c2UoaVtuXSk7aWYoZSl7aWYoZT09PWEpY29udGludWU7ZT1IdDticmVha31lPWF9cmV0dXJuIFd0KGV8fEh0LHIpfXJldHVybiBWdH1mdW5jdGlvbiBsZSh0KXt2YXIgZT10eXBlb2YgdDtyZXR1cm4gbnVsbD09PXQ/IiI6InN0cmluZyI9PT1lfHwibnVtYmVyIj09PWV8fCJib29sZWFuIj09PWU/U3RyaW5nKHQpOnQgaW5zdGFuY2VvZiB0ZXx8dCBpbnN0YW5jZW9mIG5lfHx0IGluc3RhbmNlb2YgaWU/dC50b1N0cmluZygpOkpTT04uc3RyaW5naWZ5KHQpfWllLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWV9LGllLmZyb21TdHJpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bmV3IGllKHtuYW1lOnQsYXZhaWxhYmxlOiExfSk6bnVsbH0saWUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMubmFtZV19O3ZhciBjZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMudmFsdWU9ZX07Y2UucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIidsaXRlcmFsJyBleHByZXNzaW9uIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2lmKCFvZSh0WzFdKSlyZXR1cm4gZS5lcnJvcigiaW52YWxpZCB2YWx1ZSIpO3ZhciByPXRbMV0sbj1zZShyKSxpPWUuZXhwZWN0ZWRUeXBlO3JldHVybiJhcnJheSIhPT1uLmtpbmR8fDAhPT1uLk58fCFpfHwiYXJyYXkiIT09aS5raW5kfHwibnVtYmVyIj09dHlwZW9mIGkuTiYmMCE9PWkuTnx8KG49aSksbmV3IGNlKG4scil9LGNlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfSxjZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKCl7fSxjZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxjZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuImFycmF5Ij09PXRoaXMudHlwZS5raW5kfHwib2JqZWN0Ij09PXRoaXMudHlwZS5raW5kP1sibGl0ZXJhbCIsdGhpcy52YWx1ZV06dGhpcy52YWx1ZSBpbnN0YW5jZW9mIHRlP1sicmdiYSJdLmNvbmNhdCh0aGlzLnZhbHVlLnRvQXJyYXkoKSk6dGhpcy52YWx1ZSBpbnN0YW5jZW9mIG5lP3RoaXMudmFsdWUuc2VyaWFsaXplKCk6dGhpcy52YWx1ZX07dmFyIHVlPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT0iRXhwcmVzc2lvbkV2YWx1YXRpb25FcnJvciIsdGhpcy5tZXNzYWdlPXR9O3VlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlfTt2YXIgZmU9e3N0cmluZzpOdCxudW1iZXI6QnQsYm9vbGVhbjpqdCxvYmplY3Q6VnR9LGhlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5hcmdzPWV9O2hlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByLG49MSxpPXRbMF07aWYoImFycmF5Ij09PWkpe3ZhciBhLG87aWYodC5sZW5ndGg+Mil7dmFyIHM9dFsxXTtpZigic3RyaW5nIiE9dHlwZW9mIHN8fCEocyBpbiBmZSl8fCJvYmplY3QiPT09cylyZXR1cm4gZS5lcnJvcignVGhlIGl0ZW0gdHlwZSBhcmd1bWVudCBvZiAiYXJyYXkiIG11c3QgYmUgb25lIG9mIHN0cmluZywgbnVtYmVyLCBib29sZWFuJywxKTthPWZlW3NdLG4rK31lbHNlIGE9SHQ7aWYodC5sZW5ndGg+Myl7aWYobnVsbCE9PXRbMl0mJigibnVtYmVyIiE9dHlwZW9mIHRbMl18fHRbMl08MHx8dFsyXSE9PU1hdGguZmxvb3IodFsyXSkpKXJldHVybiBlLmVycm9yKCdUaGUgbGVuZ3RoIGFyZ3VtZW50IHRvICJhcnJheSIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgbGl0ZXJhbCcsMik7bz10WzJdLG4rK31yPVd0KGEsbyl9ZWxzZSByPWZlW2ldO2Zvcih2YXIgbD1bXTtuPHQubGVuZ3RoO24rKyl7dmFyIGM9ZS5wYXJzZSh0W25dLG4sSHQpO2lmKCFjKXJldHVybiBudWxsO2wucHVzaChjKX1yZXR1cm4gbmV3IGhlKHIsbCl9LGhlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHRoaXMuYXJncy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLmFyZ3NbZV0uZXZhbHVhdGUodCk7aWYoIUp0KHRoaXMudHlwZSxzZShyKSkpcmV0dXJuIHI7aWYoZT09PXRoaXMuYXJncy5sZW5ndGgtMSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgIitYdCh0aGlzLnR5cGUpKyIsIGJ1dCBmb3VuZCAiK1h0KHNlKHIpKSsiIGluc3RlYWQuIil9cmV0dXJuIG51bGx9LGhlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGhlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxoZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50eXBlLGU9W3Qua2luZF07aWYoImFycmF5Ij09PXQua2luZCl7dmFyIHI9dC5pdGVtVHlwZTtpZigic3RyaW5nIj09PXIua2luZHx8Im51bWJlciI9PT1yLmtpbmR8fCJib29sZWFuIj09PXIua2luZCl7ZS5wdXNoKHIua2luZCk7dmFyIG49dC5OOygibnVtYmVyIj09dHlwZW9mIG58fHRoaXMuYXJncy5sZW5ndGg+MSkmJmUucHVzaChuKX19cmV0dXJuIGUuY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX07dmFyIHBlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1HdCx0aGlzLnNlY3Rpb25zPXR9O3BlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MilyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50LiIpO3ZhciByPXRbMV07aWYoIUFycmF5LmlzQXJyYXkocikmJiJvYmplY3QiPT10eXBlb2YgcilyZXR1cm4gZS5lcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBpbWFnZSBvciB0ZXh0IHNlY3Rpb24uIik7Zm9yKHZhciBuPVtdLGk9ITEsYT0xO2E8PXQubGVuZ3RoLTE7KythKXt2YXIgbz10W2FdO2lmKGkmJiJvYmplY3QiPT10eXBlb2YgbyYmIUFycmF5LmlzQXJyYXkobykpe2k9ITE7dmFyIHM9bnVsbDtpZihvWyJmb250LXNjYWxlIl0mJiEocz1lLnBhcnNlKG9bImZvbnQtc2NhbGUiXSwxLEJ0KSkpcmV0dXJuIG51bGw7dmFyIGw9bnVsbDtpZihvWyJ0ZXh0LWZvbnQiXSYmIShsPWUucGFyc2Uob1sidGV4dC1mb250Il0sMSxXdChOdCkpKSlyZXR1cm4gbnVsbDt2YXIgYz1udWxsO2lmKG9bInRleHQtY29sb3IiXSYmIShjPWUucGFyc2Uob1sidGV4dC1jb2xvciJdLDEsVXQpKSlyZXR1cm4gbnVsbDt2YXIgdT1uW24ubGVuZ3RoLTFdO3Uuc2NhbGU9cyx1LmZvbnQ9bCx1LnRleHRDb2xvcj1jfWVsc2V7dmFyIGY9ZS5wYXJzZSh0W2FdLDEsSHQpO2lmKCFmKXJldHVybiBudWxsO3ZhciBoPWYudHlwZS5raW5kO2lmKCJzdHJpbmciIT09aCYmInZhbHVlIiE9PWgmJiJudWxsIiE9PWgmJiJyZXNvbHZlZEltYWdlIiE9PWgpcmV0dXJuIGUuZXJyb3IoIkZvcm1hdHRlZCB0ZXh0IHR5cGUgbXVzdCBiZSAnc3RyaW5nJywgJ3ZhbHVlJywgJ2ltYWdlJyBvciAnbnVsbCcuIik7aT0hMCxuLnB1c2goe2NvbnRlbnQ6ZixzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH0pfX1yZXR1cm4gbmV3IHBlKG4pfSxwZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBuZSh0aGlzLnNlY3Rpb25zLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5jb250ZW50LmV2YWx1YXRlKHQpO3JldHVybiBzZShyKT09PVl0P25ldyByZSgiIixyLG51bGwsbnVsbCxudWxsKTpuZXcgcmUobGUociksbnVsbCxlLnNjYWxlP2Uuc2NhbGUuZXZhbHVhdGUodCk6bnVsbCxlLmZvbnQ/ZS5mb250LmV2YWx1YXRlKHQpLmpvaW4oIiwiKTpudWxsLGUudGV4dENvbG9yP2UudGV4dENvbG9yLmV2YWx1YXRlKHQpOm51bGwpfSkpKX0scGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdO3Qobi5jb250ZW50KSxuLnNjYWxlJiZ0KG4uc2NhbGUpLG4uZm9udCYmdChuLmZvbnQpLG4udGV4dENvbG9yJiZ0KG4udGV4dENvbG9yKX19LHBlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHBlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9WyJmb3JtYXQiXSxlPTAscj10aGlzLnNlY3Rpb25zO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0LnB1c2gobi5jb250ZW50LnNlcmlhbGl6ZSgpKTt2YXIgaT17fTtuLnNjYWxlJiYoaVsiZm9udC1zY2FsZSJdPW4uc2NhbGUuc2VyaWFsaXplKCkpLG4uZm9udCYmKGlbInRleHQtZm9udCJdPW4uZm9udC5zZXJpYWxpemUoKSksbi50ZXh0Q29sb3ImJihpWyJ0ZXh0LWNvbG9yIl09bi50ZXh0Q29sb3Iuc2VyaWFsaXplKCkpLHQucHVzaChpKX1yZXR1cm4gdH07dmFyIGRlPWZ1bmN0aW9uKHQpe3RoaXMudHlwZT1ZdCx0aGlzLmlucHV0PXR9O2RlLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCB0d28gYXJndW1lbnRzLiIpO3ZhciByPWUucGFyc2UodFsxXSwxLE50KTtyZXR1cm4gcj9uZXcgZGUocik6ZS5lcnJvcigiTm8gaW1hZ2UgbmFtZSBwcm92aWRlZC4iKX0sZGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCkscj1pZS5mcm9tU3RyaW5nKGUpO3JldHVybiByJiZ0LmF2YWlsYWJsZUltYWdlcyYmKHIuYXZhaWxhYmxlPXQuYXZhaWxhYmxlSW1hZ2VzLmluZGV4T2YoZSk+LTEpLHJ9LGRlLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KX0sZGUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZGUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsiaW1hZ2UiLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgbWU9eyJ0by1ib29sZWFuIjpqdCwidG8tY29sb3IiOlV0LCJ0by1udW1iZXIiOkJ0LCJ0by1zdHJpbmciOk50fSxnZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT10LHRoaXMuYXJncz1lfTtnZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDIpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzBdO2lmKCgidG8tYm9vbGVhbiI9PT1yfHwidG8tc3RyaW5nIj09PXIpJiYyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTtmb3IodmFyIG49bWVbcl0saT1bXSxhPTE7YTx0Lmxlbmd0aDthKyspe3ZhciBvPWUucGFyc2UodFthXSxhLEh0KTtpZighbylyZXR1cm4gbnVsbDtpLnB1c2gobyl9cmV0dXJuIG5ldyBnZShuLGkpfSxnZS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7aWYoImJvb2xlYW4iPT09dGhpcy50eXBlLmtpbmQpcmV0dXJuIEJvb2xlYW4odGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKTtpZigiY29sb3IiPT09dGhpcy50eXBlLmtpbmQpe2Zvcih2YXIgZSxyLG49MCxpPXRoaXMuYXJncztuPGkubGVuZ3RoO24rPTEpe2lmKHI9bnVsbCwoZT1pW25dLmV2YWx1YXRlKHQpKWluc3RhbmNlb2YgdGUpcmV0dXJuIGU7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgYT10LnBhcnNlQ29sb3IoZSk7aWYoYSlyZXR1cm4gYX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkmJiEocj1lLmxlbmd0aDwzfHxlLmxlbmd0aD40PyJJbnZhbGlkIHJiZ2EgdmFsdWUgIitKU09OLnN0cmluZ2lmeShlKSsiOiBleHBlY3RlZCBhbiBhcnJheSBjb250YWluaW5nIGVpdGhlciB0aHJlZSBvciBmb3VyIG51bWVyaWMgdmFsdWVzLiI6YWUoZVswXSxlWzFdLGVbMl0sZVszXSkpKXJldHVybiBuZXcgdGUoZVswXS8yNTUsZVsxXS8yNTUsZVsyXS8yNTUsZVszXSl9dGhyb3cgbmV3IHVlKHJ8fCJDb3VsZCBub3QgcGFyc2UgY29sb3IgZnJvbSB2YWx1ZSAnIisoInN0cmluZyI9PXR5cGVvZiBlP2U6U3RyaW5nKEpTT04uc3RyaW5naWZ5KGUpKSkrIiciKX1pZigibnVtYmVyIj09PXRoaXMudHlwZS5raW5kKXtmb3IodmFyIG89bnVsbCxzPTAsbD10aGlzLmFyZ3M7czxsLmxlbmd0aDtzKz0xKXtpZihudWxsPT09KG89bFtzXS5ldmFsdWF0ZSh0KSkpcmV0dXJuIDA7dmFyIGM9TnVtYmVyKG8pO2lmKCFpc05hTihjKSlyZXR1cm4gY310aHJvdyBuZXcgdWUoIkNvdWxkIG5vdCBjb252ZXJ0ICIrSlNPTi5zdHJpbmdpZnkobykrIiB0byBudW1iZXIuIil9cmV0dXJuImZvcm1hdHRlZCI9PT10aGlzLnR5cGUua2luZD9uZS5mcm9tU3RyaW5nKGxlKHRoaXMuYXJnc1swXS5ldmFsdWF0ZSh0KSkpOiJyZXNvbHZlZEltYWdlIj09PXRoaXMudHlwZS5raW5kP2llLmZyb21TdHJpbmcobGUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKSk6bGUodGhpcy5hcmdzWzBdLmV2YWx1YXRlKHQpKX0sZ2UucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0aGlzLmFyZ3MuZm9yRWFjaCh0KX0sZ2UucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcmdzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LGdlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtpZigiZm9ybWF0dGVkIj09PXRoaXMudHlwZS5raW5kKXJldHVybiBuZXcgcGUoW3tjb250ZW50OnRoaXMuYXJnc1swXSxzY2FsZTpudWxsLGZvbnQ6bnVsbCx0ZXh0Q29sb3I6bnVsbH1dKS5zZXJpYWxpemUoKTtpZigicmVzb2x2ZWRJbWFnZSI9PT10aGlzLnR5cGUua2luZClyZXR1cm4gbmV3IGRlKHRoaXMuYXJnc1swXSkuc2VyaWFsaXplKCk7dmFyIHQ9WyJ0by0iK3RoaXMudHlwZS5raW5kXTtyZXR1cm4gdGhpcy5lYWNoQ2hpbGQoKGZ1bmN0aW9uKGUpe3QucHVzaChlLnNlcmlhbGl6ZSgpKX0pKSx0fTt2YXIgdmU9WyJVbmtub3duIiwiUG9pbnQiLCJMaW5lU3RyaW5nIiwiUG9seWdvbiJdLHllPWZ1bmN0aW9uKCl7dGhpcy5nbG9iYWxzPW51bGwsdGhpcy5mZWF0dXJlPW51bGwsdGhpcy5mZWF0dXJlU3RhdGU9bnVsbCx0aGlzLmZvcm1hdHRlZFNlY3Rpb249bnVsbCx0aGlzLl9wYXJzZUNvbG9yQ2FjaGU9e30sdGhpcy5hdmFpbGFibGVJbWFnZXM9bnVsbCx0aGlzLmNhbm9uaWNhbD1udWxsfTt5ZS5wcm90b3R5cGUuaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiaWQiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5pZDpudWxsfSx5ZS5wcm90b3R5cGUuZ2VvbWV0cnlUeXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZT8ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmVhdHVyZS50eXBlP3ZlW3RoaXMuZmVhdHVyZS50eXBlXTp0aGlzLmZlYXR1cmUudHlwZTpudWxsfSx5ZS5wcm90b3R5cGUuZ2VvbWV0cnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZWF0dXJlJiYiZ2VvbWV0cnkiaW4gdGhpcy5mZWF0dXJlP3RoaXMuZmVhdHVyZS5nZW9tZXRyeTpudWxsfSx5ZS5wcm90b3R5cGUuY2Fub25pY2FsSUQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5vbmljYWx9LHllLnByb3RvdHlwZS5wcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmVhdHVyZSYmdGhpcy5mZWF0dXJlLnByb3BlcnRpZXN8fHt9fSx5ZS5wcm90b3R5cGUucGFyc2VDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9wYXJzZUNvbG9yQ2FjaGVbdF07cmV0dXJuIGV8fChlPXRoaXMuX3BhcnNlQ29sb3JDYWNoZVt0XT10ZS5wYXJzZSh0KSksZX07dmFyIHhlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubmFtZT10LHRoaXMudHlwZT1lLHRoaXMuX2V2YWx1YXRlPXIsdGhpcy5hcmdzPW59O3hlLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fZXZhbHVhdGUodCx0aGlzLmFyZ3MpfSx4ZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuYXJncy5mb3JFYWNoKHQpfSx4ZS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSx4ZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMubmFtZV0uY29uY2F0KHRoaXMuYXJncy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNlcmlhbGl6ZSgpfSkpKX0seGUucGFyc2U9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRbMF0saT14ZS5kZWZpbml0aW9uc1tuXTtpZighaSlyZXR1cm4gZS5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCk7Zm9yKHZhciBhPUFycmF5LmlzQXJyYXkoaSk/aVswXTppLnR5cGUsbz1BcnJheS5pc0FycmF5KGkpP1tbaVsxXSxpWzJdXV06aS5vdmVybG9hZHMscz1vLmZpbHRlcigoZnVuY3Rpb24oZSl7dmFyIHI9ZVswXTtyZXR1cm4hQXJyYXkuaXNBcnJheShyKXx8ci5sZW5ndGg9PT10Lmxlbmd0aC0xfSkpLGw9bnVsbCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPWZbMF0scD1mWzFdO2w9bmV3IFVlKGUucmVnaXN0cnksZS5wYXRoLG51bGwsZS5zY29wZSk7Zm9yKHZhciBkPVtdLG09ITEsZz0xO2c8dC5sZW5ndGg7ZysrKXt2YXIgdj10W2ddLHk9QXJyYXkuaXNBcnJheShoKT9oW2ctMV06aC50eXBlLHg9bC5wYXJzZSh2LDErZC5sZW5ndGgseSk7aWYoIXgpe209ITA7YnJlYWt9ZC5wdXNoKHgpfWlmKCFtKWlmKEFycmF5LmlzQXJyYXkoaCkmJmgubGVuZ3RoIT09ZC5sZW5ndGgpbC5lcnJvcigiRXhwZWN0ZWQgIitoLmxlbmd0aCsiIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrZC5sZW5ndGgrIiBpbnN0ZWFkLiIpO2Vsc2V7Zm9yKHZhciBiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPUFycmF5LmlzQXJyYXkoaCk/aFtiXTpoLnR5cGUsdz1kW2JdO2wuY29uY2F0KGIrMSkuY2hlY2tTdWJ0eXBlKF8sdy50eXBlKX1pZigwPT09bC5lcnJvcnMubGVuZ3RoKXJldHVybiBuZXcgeGUobixhLHAsZCl9fWlmKDE9PT1zLmxlbmd0aCkocj1lLmVycm9ycykucHVzaC5hcHBseShyLGwuZXJyb3JzKTtlbHNle2Zvcih2YXIgVD0ocy5sZW5ndGg/czpvKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dFswXTtyZXR1cm4gZT1yLEFycmF5LmlzQXJyYXkoZSk/IigiK2UubWFwKFh0KS5qb2luKCIsICIpKyIpIjoiKCIrWHQoZS50eXBlKSsiLi4uKSJ9KSkuam9pbigiIHwgIiksaz1bXSxBPTE7QTx0Lmxlbmd0aDtBKyspe3ZhciBNPWUucGFyc2UodFtBXSwxK2subGVuZ3RoKTtpZighTSlyZXR1cm4gbnVsbDtrLnB1c2goWHQoTS50eXBlKSl9ZS5lcnJvcigiRXhwZWN0ZWQgYXJndW1lbnRzIG9mIHR5cGUgIitUKyIsIGJ1dCBmb3VuZCAoIitrLmpvaW4oIiwgIikrIikgaW5zdGVhZC4iKX1yZXR1cm4gbnVsbH0seGUucmVnaXN0ZXI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4geGUuZGVmaW5pdGlvbnM9ZSxlKXRbcl09eGV9O3ZhciBiZT1mdW5jdGlvbih0LGUscil7dGhpcy50eXBlPXF0LHRoaXMubG9jYWxlPXIsdGhpcy5jYXNlU2Vuc2l0aXZlPXQsdGhpcy5kaWFjcml0aWNTZW5zaXRpdmU9ZX07YmUucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIG9uZSBhcmd1bWVudC4iKTt2YXIgcj10WzFdO2lmKCJvYmplY3QiIT10eXBlb2Ygcnx8QXJyYXkuaXNBcnJheShyKSlyZXR1cm4gZS5lcnJvcigiQ29sbGF0b3Igb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgbj1lLnBhcnNlKHZvaWQgMCE9PXJbImNhc2Utc2Vuc2l0aXZlIl0mJnJbImNhc2Utc2Vuc2l0aXZlIl0sMSxqdCk7aWYoIW4pcmV0dXJuIG51bGw7dmFyIGk9ZS5wYXJzZSh2b2lkIDAhPT1yWyJkaWFjcml0aWMtc2Vuc2l0aXZlIl0mJnJbImRpYWNyaXRpYy1zZW5zaXRpdmUiXSwxLGp0KTtpZighaSlyZXR1cm4gbnVsbDt2YXIgYT1udWxsO3JldHVybiByLmxvY2FsZSYmIShhPWUucGFyc2Uoci5sb2NhbGUsMSxOdCkpP251bGw6bmV3IGJlKG4saSxhKX0sYmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZWUodGhpcy5jYXNlU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLmV2YWx1YXRlKHQpLHRoaXMubG9jYWxlP3RoaXMubG9jYWxlLmV2YWx1YXRlKHQpOm51bGwpfSxiZS5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5jYXNlU2Vuc2l0aXZlKSx0KHRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlKSx0aGlzLmxvY2FsZSYmdCh0aGlzLmxvY2FsZSl9LGJlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGJlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFsiY2FzZS1zZW5zaXRpdmUiXT10aGlzLmNhc2VTZW5zaXRpdmUuc2VyaWFsaXplKCksdFsiZGlhY3JpdGljLXNlbnNpdGl2ZSJdPXRoaXMuZGlhY3JpdGljU2Vuc2l0aXZlLnNlcmlhbGl6ZSgpLHRoaXMubG9jYWxlJiYodC5sb2NhbGU9dGhpcy5sb2NhbGUuc2VyaWFsaXplKCkpLFsiY29sbGF0b3IiLHRdfTtmdW5jdGlvbiBfZSh0LGUpe3RbMF09TWF0aC5taW4odFswXSxlWzBdKSx0WzFdPU1hdGgubWluKHRbMV0sZVsxXSksdFsyXT1NYXRoLm1heCh0WzJdLGVbMF0pLHRbM109TWF0aC5tYXgodFszXSxlWzFdKX1mdW5jdGlvbiB3ZSh0LGUpe3JldHVybiEodFswXTw9ZVswXSkmJighKHRbMl0+PWVbMl0pJiYoISh0WzFdPD1lWzFdKSYmISh0WzNdPj1lWzNdKSkpfWZ1bmN0aW9uIFRlKHQsZSl7dmFyIHIsbj0oMTgwK3RbMF0pLzM2MCxpPShyPXRbMV0sKDE4MC0xODAvTWF0aC5QSSpNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJLzQrcipNYXRoLlBJLzM2MCkpKS8zNjApLGE9TWF0aC5wb3coMixlLnopO3JldHVybltNYXRoLnJvdW5kKG4qYSo4MTkyKSxNYXRoLnJvdW5kKGkqYSo4MTkyKV19ZnVuY3Rpb24ga2UodCxlLHIpe3JldHVybiBlWzFdPnRbMV0hPXJbMV0+dFsxXSYmdFswXTwoclswXS1lWzBdKSoodFsxXS1lWzFdKS8oclsxXS1lWzFdKStlWzBdfWZ1bmN0aW9uIEFlKHQsZSl7Zm9yKHZhciByLG4saSxhLG8scyxsLGM9ITEsdT0wLGY9ZS5sZW5ndGg7dTxmO3UrKylmb3IodmFyIGg9ZVt1XSxwPTAsZD1oLmxlbmd0aDtwPGQtMTtwKyspe2lmKHI9dCxuPWhbcF0saT1oW3ArMV0sYT12b2lkIDAsbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsYT1yWzBdLW5bMF0sbz1yWzFdLW5bMV0scz1yWzBdLWlbMF0sbD1yWzFdLWlbMV0sYSpsLXMqbz09MCYmYSpzPD0wJiZvKmw8PTApcmV0dXJuITE7a2UodCxoW3BdLGhbcCsxXSkmJihjPSFjKX1yZXR1cm4gY31mdW5jdGlvbiBNZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKEFlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gU2UodCxlLHIsbil7dmFyIGk9dFswXS1yWzBdLGE9dFsxXS1yWzFdLG89ZVswXS1yWzBdLHM9ZVsxXS1yWzFdLGw9blswXS1yWzBdLGM9blsxXS1yWzFdLHU9aSpjLWwqYSxmPW8qYy1sKnM7cmV0dXJuIHU+MCYmZjwwfHx1PDAmJmY+MH1mdW5jdGlvbiBFZSh0LGUscil7Zm9yKHZhciBuPTAsaT1yO248aS5sZW5ndGg7bis9MSlmb3IodmFyIGE9aVtuXSxvPTA7bzxhLmxlbmd0aC0xOysrbylpZihzPXQsbD1lLGM9YVtvXSx1PWFbbysxXSxmPXZvaWQgMCxoPXZvaWQgMCxwPXZvaWQgMCxkPXZvaWQgMCxwPVtsWzBdLXNbMF0sbFsxXS1zWzFdXSxkPVt1WzBdLWNbMF0sdVsxXS1jWzFdXSwwIT0oZj1kKVswXSooaD1wKVsxXS1mWzFdKmhbMF0mJlNlKHMsbCxjLHUpJiZTZShjLHUscyxsKSlyZXR1cm4hMDt2YXIgcyxsLGMsdSxmLGgscCxkO3JldHVybiExfWZ1bmN0aW9uIExlKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYoIUFlKHRbcl0sZSkpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aC0xOysrbilpZihFZSh0W25dLHRbbisxXSxlKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBDZSh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKExlKHQsZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gUGUodCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT1bXSxvPTA7bzx0W2ldLmxlbmd0aDtvKyspe3ZhciBzPVRlKHRbaV1bb10scik7X2UoZSxzKSxhLnB1c2gocyl9bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIEllKHQsZSxyKXtmb3IodmFyIG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1QZSh0W2ldLGUscik7bi5wdXNoKGEpfXJldHVybiBufWZ1bmN0aW9uIE9lKHQsZSxyLG4pe2lmKHRbMF08clswXXx8dFswXT5yWzJdKXt2YXIgaT0uNSpuLGE9dFswXS1yWzBdPmk/LW46clswXS10WzBdPmk/bjowOzA9PT1hJiYoYT10WzBdLXJbMl0+aT8tbjpyWzJdLXRbMF0+aT9uOjApLHRbMF0rPWF9X2UoZSx0KX1mdW5jdGlvbiB6ZSh0LGUscixuKXtmb3IodmFyIGk9ODE5MipNYXRoLnBvdygyLG4ueiksYT1bODE5MipuLngsODE5MipuLnldLG89W10scz0wLGw9dDtzPGwubGVuZ3RoO3MrPTEpZm9yKHZhciBjPTAsdT1sW3NdO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPVtmLngrYVswXSxmLnkrYVsxXV07T2UoaCxlLHIsaSksby5wdXNoKGgpfXJldHVybiBvfWZ1bmN0aW9uIERlKHQsZSxyLG4pe2Zvcih2YXIgaSxhPTgxOTIqTWF0aC5wb3coMixuLnopLG89WzgxOTIqbi54LDgxOTIqbi55XSxzPVtdLGw9MCxjPXQ7bDxjLmxlbmd0aDtsKz0xKXtmb3IodmFyIHU9W10sZj0wLGg9Y1tsXTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1bcC54K29bMF0scC55K29bMV1dO19lKGUsZCksdS5wdXNoKGQpfXMucHVzaCh1KX1pZihlWzJdLWVbMF08PWEvMil7KGk9ZSlbMF09aVsxXT0xLzAsaVsyXT1pWzNdPS0xLzA7Zm9yKHZhciBtPTAsZz1zO208Zy5sZW5ndGg7bSs9MSlmb3IodmFyIHY9MCx5PWdbbV07djx5Lmxlbmd0aDt2Kz0xKXtPZSh5W3ZdLGUscixhKX19cmV0dXJuIHN9dmFyIFJlPWZ1bmN0aW9uKHQsZSl7dGhpcy50eXBlPWp0LHRoaXMuZ2VvanNvbj10LHRoaXMuZ2VvbWV0cmllcz1lfTtmdW5jdGlvbiBGZSh0KXtpZih0IGluc3RhbmNlb2YgeGUpe2lmKCJnZXQiPT09dC5uYW1lJiYxPT09dC5hcmdzLmxlbmd0aClyZXR1cm4hMTtpZigiZmVhdHVyZS1zdGF0ZSI9PT10Lm5hbWUpcmV0dXJuITE7aWYoImhhcyI9PT10Lm5hbWUmJjE9PT10LmFyZ3MubGVuZ3RoKXJldHVybiExO2lmKCJwcm9wZXJ0aWVzIj09PXQubmFtZXx8Imdlb21ldHJ5LXR5cGUiPT09dC5uYW1lfHwiaWQiPT09dC5uYW1lKXJldHVybiExO2lmKC9eZmlsdGVyLS8udGVzdCh0Lm5hbWUpKXJldHVybiExfWlmKHQgaW5zdGFuY2VvZiBSZSlyZXR1cm4hMTt2YXIgZT0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe2UmJiFGZSh0KSYmKGU9ITEpfSkpLGV9ZnVuY3Rpb24gQmUodCl7aWYodCBpbnN0YW5jZW9mIHhlJiYiZmVhdHVyZS1zdGF0ZSI9PT10Lm5hbWUpcmV0dXJuITE7dmFyIGU9ITA7cmV0dXJuIHQuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlJiYhQmUodCkmJihlPSExKX0pKSxlfWZ1bmN0aW9uIE5lKHQsZSl7aWYodCBpbnN0YW5jZW9mIHhlJiZlLmluZGV4T2YodC5uYW1lKT49MClyZXR1cm4hMTt2YXIgcj0hMDtyZXR1cm4gdC5lYWNoQ2hpbGQoKGZ1bmN0aW9uKHQpe3ImJiFOZSh0LGUpJiYocj0hMSl9KSkscn1SZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKDIhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTtpZihvZSh0WzFdKSl7dmFyIHI9dFsxXTtpZigiRmVhdHVyZUNvbGxlY3Rpb24iPT09ci50eXBlKWZvcih2YXIgbj0wO248ci5mZWF0dXJlcy5sZW5ndGg7KytuKXt2YXIgaT1yLmZlYXR1cmVzW25dLmdlb21ldHJ5LnR5cGU7aWYoIlBvbHlnb24iPT09aXx8Ik11bHRpUG9seWdvbiI9PT1pKXJldHVybiBuZXcgUmUocixyLmZlYXR1cmVzW25dLmdlb21ldHJ5KX1lbHNlIGlmKCJGZWF0dXJlIj09PXIudHlwZSl7dmFyIGE9ci5nZW9tZXRyeS50eXBlO2lmKCJQb2x5Z29uIj09PWF8fCJNdWx0aVBvbHlnb24iPT09YSlyZXR1cm4gbmV3IFJlKHIsci5nZW9tZXRyeSl9ZWxzZSBpZigiUG9seWdvbiI9PT1yLnR5cGV8fCJNdWx0aVBvbHlnb24iPT09ci50eXBlKXJldHVybiBuZXcgUmUocixyKX1yZXR1cm4gZS5lcnJvcigiJ3dpdGhpbicgZXhwcmVzc2lvbiByZXF1aXJlcyB2YWxpZCBnZW9qc29uIG9iamVjdCB0aGF0IGNvbnRhaW5zIHBvbHlnb24gZ2VvbWV0cnkgdHlwZS4iKX0sUmUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQuZ2VvbWV0cnkoKSYmbnVsbCE9dC5jYW5vbmljYWxJRCgpKXtpZigiUG9pbnQiPT09dC5nZW9tZXRyeVR5cGUoKSlyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1bMS8wLDEvMCwtMS8wLC0xLzBdLG49WzEvMCwxLzAsLTEvMCwtMS8wXSxpPXQuY2Fub25pY2FsSUQoKTtpZigiUG9seWdvbiI9PT1lLnR5cGUpe3ZhciBhPVBlKGUuY29vcmRpbmF0ZXMsbixpKSxvPXplKHQuZ2VvbWV0cnkoKSxyLG4saSk7aWYoIXdlKHIsbikpcmV0dXJuITE7Zm9yKHZhciBzPTAsbD1vO3M8bC5sZW5ndGg7cys9MSl7aWYoIUFlKGxbc10sYSkpcmV0dXJuITF9fWlmKCJNdWx0aVBvbHlnb24iPT09ZS50eXBlKXt2YXIgYz1JZShlLmNvb3JkaW5hdGVzLG4saSksdT16ZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgZj0wLGg9dTtmPGgubGVuZ3RoO2YrPTEpe2lmKCFNZShoW2ZdLGMpKXJldHVybiExfX1yZXR1cm4hMH0odCx0aGlzLmdlb21ldHJpZXMpO2lmKCJMaW5lU3RyaW5nIj09PXQuZ2VvbWV0cnlUeXBlKCkpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9WzEvMCwxLzAsLTEvMCwtMS8wXSxuPVsxLzAsMS8wLC0xLzAsLTEvMF0saT10LmNhbm9uaWNhbElEKCk7aWYoIlBvbHlnb24iPT09ZS50eXBlKXt2YXIgYT1QZShlLmNvb3JkaW5hdGVzLG4saSksbz1EZSh0Lmdlb21ldHJ5KCkscixuLGkpO2lmKCF3ZShyLG4pKXJldHVybiExO2Zvcih2YXIgcz0wLGw9bztzPGwubGVuZ3RoO3MrPTEpe2lmKCFMZShsW3NdLGEpKXJldHVybiExfX1pZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7dmFyIGM9SWUoZS5jb29yZGluYXRlcyxuLGkpLHU9RGUodC5nZW9tZXRyeSgpLHIsbixpKTtpZighd2UocixuKSlyZXR1cm4hMTtmb3IodmFyIGY9MCxoPXU7ZjxoLmxlbmd0aDtmKz0xKXtpZighQ2UoaFtmXSxjKSlyZXR1cm4hMX19cmV0dXJuITB9KHQsdGhpcy5nZW9tZXRyaWVzKX1yZXR1cm4hMX0sUmUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbigpe30sUmUucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sUmUucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVyblsid2l0aGluIix0aGlzLmdlb2pzb25dfTt2YXIgamU9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9ZS50eXBlLHRoaXMubmFtZT10LHRoaXMuYm91bmRFeHByZXNzaW9uPWV9O2plLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMiE9PXQubGVuZ3RofHwic3RyaW5nIiE9dHlwZW9mIHRbMV0pcmV0dXJuIGUuZXJyb3IoIid2YXInIGV4cHJlc3Npb24gcmVxdWlyZXMgZXhhY3RseSBvbmUgc3RyaW5nIGxpdGVyYWwgYXJndW1lbnQuIik7dmFyIHI9dFsxXTtyZXR1cm4gZS5zY29wZS5oYXMocik/bmV3IGplKHIsZS5zY29wZS5nZXQocikpOmUuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgIicrcisnIi4gTWFrZSBzdXJlICInK3IrJyIgaGFzIGJlZW4gYm91bmQgaW4gYW4gZW5jbG9zaW5nICJsZXQiIGV4cHJlc3Npb24gYmVmb3JlIHVzaW5nIGl0LicsMSl9LGplLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5ib3VuZEV4cHJlc3Npb24uZXZhbHVhdGUodCl9LGplLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24oKXt9LGplLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGplLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bInZhciIsdGhpcy5uYW1lXX07dmFyIFVlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dm9pZCAwPT09ZSYmKGU9W10pLHZvaWQgMD09PW4mJihuPW5ldyBSdCksdm9pZCAwPT09aSYmKGk9W10pLHRoaXMucmVnaXN0cnk9dCx0aGlzLnBhdGg9ZSx0aGlzLmtleT1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIlsiK3QrIl0ifSkpLmpvaW4oIiIpLHRoaXMuc2NvcGU9bix0aGlzLmVycm9ycz1pLHRoaXMuZXhwZWN0ZWRUeXBlPXJ9O2Z1bmN0aW9uIFZlKHQsZSl7Zm9yKHZhciByLG4saT10Lmxlbmd0aC0xLGE9MCxvPWkscz0wO2E8PW87KWlmKHI9dFtzPU1hdGguZmxvb3IoKGErbykvMildLG49dFtzKzFdLHI8PWUpe2lmKHM9PT1pfHxlPG4pcmV0dXJuIHM7YT1zKzF9ZWxzZXtpZighKHI+ZSkpdGhyb3cgbmV3IHVlKCJJbnB1dCBpcyBub3QgYSBudW1iZXIuIik7bz1zLTF9cmV0dXJuIDB9VWUucHJvdG90eXBlLnBhcnNlPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHZvaWQgMD09PWkmJihpPXt9KSxlP3RoaXMuY29uY2F0KGUscixuKS5fcGFyc2UodCxpKTp0aGlzLl9wYXJzZSh0LGkpfSxVZS5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUscil7cmV0dXJuImFzc2VydCI9PT1yP25ldyBoZShlLFt0XSk6ImNvZXJjZSI9PT1yP25ldyBnZShlLFt0XSk6dH1pZihudWxsIT09dCYmInN0cmluZyIhPXR5cGVvZiB0JiYiYm9vbGVhbiIhPXR5cGVvZiB0JiYibnVtYmVyIiE9dHlwZW9mIHR8fCh0PVsibGl0ZXJhbCIsdF0pLEFycmF5LmlzQXJyYXkodCkpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gdGhpcy5lcnJvcignRXhwZWN0ZWQgYW4gYXJyYXkgd2l0aCBhdCBsZWFzdCBvbmUgZWxlbWVudC4gSWYgeW91IHdhbnRlZCBhIGxpdGVyYWwgYXJyYXksIHVzZSBbImxpdGVyYWwiLCBbXV0uJyk7dmFyIG49dFswXTtpZigic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIHRoaXMuZXJyb3IoIkV4cHJlc3Npb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBidXQgZm91bmQgIit0eXBlb2YgbisnIGluc3RlYWQuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCksbnVsbDt2YXIgaT10aGlzLnJlZ2lzdHJ5W25dO2lmKGkpe3ZhciBhPWkucGFyc2UodCx0aGlzKTtpZighYSlyZXR1cm4gbnVsbDtpZih0aGlzLmV4cGVjdGVkVHlwZSl7dmFyIG89dGhpcy5leHBlY3RlZFR5cGUscz1hLnR5cGU7aWYoInN0cmluZyIhPT1vLmtpbmQmJiJudW1iZXIiIT09by5raW5kJiYiYm9vbGVhbiIhPT1vLmtpbmQmJiJvYmplY3QiIT09by5raW5kJiYiYXJyYXkiIT09by5raW5kfHwidmFsdWUiIT09cy5raW5kKWlmKCJjb2xvciIhPT1vLmtpbmQmJiJmb3JtYXR0ZWQiIT09by5raW5kJiYicmVzb2x2ZWRJbWFnZSIhPT1vLmtpbmR8fCJ2YWx1ZSIhPT1zLmtpbmQmJiJzdHJpbmciIT09cy5raW5kKXtpZih0aGlzLmNoZWNrU3VidHlwZShvLHMpKXJldHVybiBudWxsfWVsc2UgYT1yKGEsbyxlLnR5cGVBbm5vdGF0aW9ufHwiY29lcmNlIik7ZWxzZSBhPXIoYSxvLGUudHlwZUFubm90YXRpb258fCJhc3NlcnQiKX1pZighKGEgaW5zdGFuY2VvZiBjZSkmJiJyZXNvbHZlZEltYWdlIiE9PWEudHlwZS5raW5kJiZmdW5jdGlvbiB0KGUpe2lmKGUgaW5zdGFuY2VvZiBqZSlyZXR1cm4gdChlLmJvdW5kRXhwcmVzc2lvbik7aWYoZSBpbnN0YW5jZW9mIHhlJiYiZXJyb3IiPT09ZS5uYW1lKXJldHVybiExO2lmKGUgaW5zdGFuY2VvZiBiZSlyZXR1cm4hMTtpZihlIGluc3RhbmNlb2YgUmUpcmV0dXJuITE7dmFyIHI9ZSBpbnN0YW5jZW9mIGdlfHxlIGluc3RhbmNlb2YgaGUsbj0hMDtpZihlLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7bj1yP24mJnQoZSk6biYmZSBpbnN0YW5jZW9mIGNlfSkpLCFuKXJldHVybiExO3JldHVybiBGZShlKSYmTmUoZSxbInpvb20iLCJoZWF0bWFwLWRlbnNpdHkiLCJsaW5lLXByb2dyZXNzIiwiYWNjdW11bGF0ZWQiLCJpcy1zdXBwb3J0ZWQtc2NyaXB0Il0pfShhKSl7dmFyIGw9bmV3IHllO3RyeXthPW5ldyBjZShhLnR5cGUsYS5ldmFsdWF0ZShsKSl9Y2F0Y2godCl7cmV0dXJuIHRoaXMuZXJyb3IodC5tZXNzYWdlKSxudWxsfX1yZXR1cm4gYX1yZXR1cm4gdGhpcy5lcnJvcignVW5rbm93biBleHByZXNzaW9uICInK24rJyIuIElmIHlvdSB3YW50ZWQgYSBsaXRlcmFsIGFycmF5LCB1c2UgWyJsaXRlcmFsIiwgWy4uLl1dLicsMCl9cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5lcnJvcigiJ3VuZGVmaW5lZCcgdmFsdWUgaW52YWxpZC4gVXNlIG51bGwgaW5zdGVhZC4iKToib2JqZWN0Ij09dHlwZW9mIHQ/dGhpcy5lcnJvcignQmFyZSBvYmplY3RzIGludmFsaWQuIFVzZSBbImxpdGVyYWwiLCB7Li4ufV0gaW5zdGVhZC4nKTp0aGlzLmVycm9yKCJFeHBlY3RlZCBhbiBhcnJheSwgYnV0IGZvdW5kICIrdHlwZW9mIHQrIiBpbnN0ZWFkLiIpfSxVZS5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0ibnVtYmVyIj09dHlwZW9mIHQ/dGhpcy5wYXRoLmNvbmNhdCh0KTp0aGlzLnBhdGgsaT1yP3RoaXMuc2NvcGUuY29uY2F0KHIpOnRoaXMuc2NvcGU7cmV0dXJuIG5ldyBVZSh0aGlzLnJlZ2lzdHJ5LG4sZXx8bnVsbCxpLHRoaXMuZXJyb3JzKX0sVWUucHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGgtMTtyLS0gPjA7KWVbcl09YXJndW1lbnRzW3IrMV07dmFyIG49IiIrdGhpcy5rZXkrZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJbIit0KyJdIn0pKS5qb2luKCIiKTt0aGlzLmVycm9ycy5wdXNoKG5ldyBEdChuLHQpKX0sVWUucHJvdG90eXBlLmNoZWNrU3VidHlwZT1mdW5jdGlvbih0LGUpe3ZhciByPUp0KHQsZSk7cmV0dXJuIHImJnRoaXMuZXJyb3Iocikscn07dmFyIEhlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5sYWJlbHM9W10sdGhpcy5vdXRwdXRzPVtdO2Zvcih2YXIgbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hWzBdLHM9YVsxXTt0aGlzLmxhYmVscy5wdXNoKG8pLHRoaXMub3V0cHV0cy5wdXNoKHMpfX07ZnVuY3Rpb24gcWUodCxlLHIpe3JldHVybiB0KigxLXIpK2Uqcn1IZS5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoLTE8NClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3QgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCBvbmx5ICIrKHQubGVuZ3RoLTEpKyIuIik7aWYoKHQubGVuZ3RoLTEpJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxCdCk7aWYoIXIpcmV0dXJuIG51bGw7dmFyIG49W10saT1udWxsO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGk9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgYT0xO2E8dC5sZW5ndGg7YSs9Mil7dmFyIG89MT09PWE/LTEvMDp0W2FdLHM9dFthKzFdLGw9YSxjPWErMTtpZigibnVtYmVyIiE9dHlwZW9mIG8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgZGVmaW5lZCB1c2luZyBsaXRlcmFsIG51bWVyaWMgdmFsdWVzIChub3QgY29tcHV0ZWQgZXhwcmVzc2lvbnMpIGZvciB0aGUgaW5wdXQgdmFsdWVzLicsbCk7aWYobi5sZW5ndGgmJm5bbi5sZW5ndGgtMV1bMF0+PW8pcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgInN0ZXAiIGV4cHJlc3Npb25zIG11c3QgYmUgYXJyYW5nZWQgd2l0aCBpbnB1dCB2YWx1ZXMgaW4gc3RyaWN0bHkgYXNjZW5kaW5nIG9yZGVyLicsbCk7dmFyIHU9ZS5wYXJzZShzLGMsaSk7aWYoIXUpcmV0dXJuIG51bGw7aT1pfHx1LnR5cGUsbi5wdXNoKFtvLHVdKX1yZXR1cm4gbmV3IEhlKGkscixuKX0sSGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFiZWxzLHI9dGhpcy5vdXRwdXRzO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgbj10aGlzLmlucHV0LmV2YWx1YXRlKHQpO2lmKG48PWVbMF0pcmV0dXJuIHJbMF0uZXZhbHVhdGUodCk7dmFyIGk9ZS5sZW5ndGg7cmV0dXJuIG4+PWVbaS0xXT9yW2ktMV0uZXZhbHVhdGUodCk6cltWZShlLG4pXS5ldmFsdWF0ZSh0KX0sSGUucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpO2Zvcih2YXIgZT0wLHI9dGhpcy5vdXRwdXRzO2U8ci5sZW5ndGg7ZSs9MSl7dChyW2VdKX19LEhlLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3V0cHV0cy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxIZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsic3RlcCIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKV0sZT0wO2U8dGhpcy5sYWJlbHMubGVuZ3RoO2UrKyllPjAmJnQucHVzaCh0aGlzLmxhYmVsc1tlXSksdC5wdXNoKHRoaXMub3V0cHV0c1tlXS5zZXJpYWxpemUoKSk7cmV0dXJuIHR9O3ZhciBHZT1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxudW1iZXI6cWUsY29sb3I6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgdGUocWUodC5yLGUucixyKSxxZSh0LmcsZS5nLHIpLHFlKHQuYixlLmIscikscWUodC5hLGUuYSxyKSl9LGFycmF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIHFlKHQsZVtuXSxyKX0pKX19KSxZZT02LzI5LFdlPTMqWWUqWWUsWGU9TWF0aC5QSS8xODAsWmU9MTgwL01hdGguUEk7ZnVuY3Rpb24gSmUodCl7cmV0dXJuIHQ+LjAwODg1NjQ1MTY3OTAzNTYzMT9NYXRoLnBvdyh0LDEvMyk6dC9XZSs0LzI5fWZ1bmN0aW9uIEtlKHQpe3JldHVybiB0PlllP3QqdCp0OldlKih0LTQvMjkpfWZ1bmN0aW9uIFFlKHQpe3JldHVybiAyNTUqKHQ8PS4wMDMxMzA4PzEyLjkyKnQ6MS4wNTUqTWF0aC5wb3codCwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gJGUodCl7cmV0dXJuKHQvPTI1NSk8PS4wNDA0NT90LzEyLjkyOk1hdGgucG93KCh0Ky4wNTUpLzEuMDU1LDIuNCl9ZnVuY3Rpb24gdHIodCl7dmFyIGU9JGUodC5yKSxyPSRlKHQuZyksbj0kZSh0LmIpLGk9SmUoKC40MTI0NTY0KmUrLjM1NzU3NjEqcisuMTgwNDM3NSpuKS8uOTUwNDcpLGE9SmUoKC4yMTI2NzI5KmUrLjcxNTE1MjIqcisuMDcyMTc1Km4pLzEpO3JldHVybntsOjExNiphLTE2LGE6NTAwKihpLWEpLGI6MjAwKihhLUplKCguMDE5MzMzOSplKy4xMTkxOTIqcisuOTUwMzA0MSpuKS8xLjA4ODgzKSksYWxwaGE6dC5hfX1mdW5jdGlvbiBlcih0KXt2YXIgZT0odC5sKzE2KS8xMTYscj1pc05hTih0LmEpP2U6ZSt0LmEvNTAwLG49aXNOYU4odC5iKT9lOmUtdC5iLzIwMDtyZXR1cm4gZT0xKktlKGUpLHI9Ljk1MDQ3KktlKHIpLG49MS4wODg4MypLZShuKSxuZXcgdGUoUWUoMy4yNDA0NTQyKnItMS41MzcxMzg1KmUtLjQ5ODUzMTQqbiksUWUoLS45NjkyNjYqcisxLjg3NjAxMDgqZSsuMDQxNTU2Km4pLFFlKC4wNTU2NDM0KnItLjIwNDAyNTkqZSsxLjA1NzIyNTIqbiksdC5hbHBoYSl9ZnVuY3Rpb24gcnIodCxlLHIpe3ZhciBuPWUtdDtyZXR1cm4gdCtyKihuPjE4MHx8bjwtMTgwP24tMzYwKk1hdGgucm91bmQobi8zNjApOm4pfXZhciBucj17Zm9yd2FyZDp0cixyZXZlcnNlOmVyLGludGVycG9sYXRlOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57bDpxZSh0LmwsZS5sLHIpLGE6cWUodC5hLGUuYSxyKSxiOnFlKHQuYixlLmIsciksYWxwaGE6cWUodC5hbHBoYSxlLmFscGhhLHIpfX19LGlyPXtmb3J3YXJkOmZ1bmN0aW9uKHQpe3ZhciBlPXRyKHQpLHI9ZS5sLG49ZS5hLGk9ZS5iLGE9TWF0aC5hdGFuMihpLG4pKlplO3JldHVybntoOmE8MD9hKzM2MDphLGM6TWF0aC5zcXJ0KG4qbitpKmkpLGw6cixhbHBoYTp0LmF9fSxyZXZlcnNlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuaCpYZSxyPXQuYztyZXR1cm4gZXIoe2w6dC5sLGE6TWF0aC5jb3MoZSkqcixiOk1hdGguc2luKGUpKnIsYWxwaGE6dC5hbHBoYX0pfSxpbnRlcnBvbGF0ZTpmdW5jdGlvbih0LGUscil7cmV0dXJue2g6cnIodC5oLGUuaCxyKSxjOnFlKHQuYyxlLmMsciksbDpxZSh0LmwsZS5sLHIpLGFscGhhOnFlKHQuYWxwaGEsZS5hbHBoYSxyKX19fSxhcj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxsYWI6bnIsaGNsOmlyfSksb3I9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLnR5cGU9dCx0aGlzLm9wZXJhdG9yPWUsdGhpcy5pbnRlcnBvbGF0aW9uPXIsdGhpcy5pbnB1dD1uLHRoaXMubGFiZWxzPVtdLHRoaXMub3V0cHV0cz1bXTtmb3IodmFyIGE9MCxvPWk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9c1swXSxjPXNbMV07dGhpcy5sYWJlbHMucHVzaChsKSx0aGlzLm91dHB1dHMucHVzaChjKX19O2Z1bmN0aW9uIHNyKHQsZSxyLG4pe3ZhciBpPW4tcixhPXQtcjtyZXR1cm4gMD09PWk/MDoxPT09ZT9hL2k6KE1hdGgucG93KGUsYSktMSkvKE1hdGgucG93KGUsaSktMSl9b3IuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUsbixpKXt2YXIgYT0wO2lmKCJleHBvbmVudGlhbCI9PT10Lm5hbWUpYT1zcihlLHQuYmFzZSxuLGkpO2Vsc2UgaWYoImxpbmVhciI9PT10Lm5hbWUpYT1zcihlLDEsbixpKTtlbHNlIGlmKCJjdWJpYy1iZXppZXIiPT09dC5uYW1lKXt2YXIgbz10LmNvbnRyb2xQb2ludHM7YT1uZXcgcihvWzBdLG9bMV0sb1syXSxvWzNdKS5zb2x2ZShzcihlLDEsbixpKSl9cmV0dXJuIGF9LG9yLnBhcnNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dC5zbGljZSgzKTtpZighQXJyYXkuaXNBcnJheShuKXx8MD09PW4ubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhbiBpbnRlcnBvbGF0aW9uIHR5cGUgZXhwcmVzc2lvbi4iLDEpO2lmKCJsaW5lYXIiPT09blswXSluPXtuYW1lOiJsaW5lYXIifTtlbHNlIGlmKCJleHBvbmVudGlhbCI9PT1uWzBdKXt2YXIgbz1uWzFdO2lmKCJudW1iZXIiIT10eXBlb2YgbylyZXR1cm4gZS5lcnJvcigiRXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiByZXF1aXJlcyBhIG51bWVyaWMgYmFzZS4iLDEsMSk7bj17bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6b319ZWxzZXtpZigiY3ViaWMtYmV6aWVyIiE9PW5bMF0pcmV0dXJuIGUuZXJyb3IoIlVua25vd24gaW50ZXJwb2xhdGlvbiB0eXBlICIrU3RyaW5nKG5bMF0pLDEsMCk7dmFyIHM9bi5zbGljZSgxKTtpZig0IT09cy5sZW5ndGh8fHMuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0fHx0PDB8fHQ+MX0pKSlyZXR1cm4gZS5lcnJvcigiQ3ViaWMgYmV6aWVyIGludGVycG9sYXRpb24gcmVxdWlyZXMgZm91ciBudW1lcmljIGFyZ3VtZW50cyB3aXRoIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEuIiwxKTtuPXtuYW1lOiJjdWJpYy1iZXppZXIiLGNvbnRyb2xQb2ludHM6c319aWYodC5sZW5ndGgtMTw0KXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBhdCBsZWFzdCA0IGFyZ3VtZW50cywgYnV0IGZvdW5kIG9ubHkgIisodC5sZW5ndGgtMSkrIi4iKTtpZigodC5sZW5ndGgtMSklMiE9MClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgYW4gZXZlbiBudW1iZXIgb2YgYXJndW1lbnRzLiIpO2lmKCEoaT1lLnBhcnNlKGksMixCdCkpKXJldHVybiBudWxsO3ZhciBsPVtdLGM9bnVsbDsiaW50ZXJwb2xhdGUtaGNsIj09PXJ8fCJpbnRlcnBvbGF0ZS1sYWIiPT09cj9jPVV0OmUuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKGM9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9Mil7dmFyIGY9YVt1XSxoPWFbdSsxXSxwPXUrMyxkPXUrNDtpZigibnVtYmVyIiE9dHlwZW9mIGYpcmV0dXJuIGUuZXJyb3IoJ0lucHV0L291dHB1dCBwYWlycyBmb3IgImludGVycG9sYXRlIiBleHByZXNzaW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgbGl0ZXJhbCBudW1lcmljIHZhbHVlcyAobm90IGNvbXB1dGVkIGV4cHJlc3Npb25zKSBmb3IgdGhlIGlucHV0IHZhbHVlcy4nLHApO2lmKGwubGVuZ3RoJiZsW2wubGVuZ3RoLTFdWzBdPj1mKXJldHVybiBlLmVycm9yKCdJbnB1dC9vdXRwdXQgcGFpcnMgZm9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgbXVzdCBiZSBhcnJhbmdlZCB3aXRoIGlucHV0IHZhbHVlcyBpbiBzdHJpY3RseSBhc2NlbmRpbmcgb3JkZXIuJyxwKTt2YXIgbT1lLnBhcnNlKGgsZCxjKTtpZighbSlyZXR1cm4gbnVsbDtjPWN8fG0udHlwZSxsLnB1c2goW2YsbV0pfXJldHVybiJudW1iZXIiPT09Yy5raW5kfHwiY29sb3IiPT09Yy5raW5kfHwiYXJyYXkiPT09Yy5raW5kJiYibnVtYmVyIj09PWMuaXRlbVR5cGUua2luZCYmIm51bWJlciI9PXR5cGVvZiBjLk4/bmV3IG9yKGMscixuLGksbCk6ZS5lcnJvcigiVHlwZSAiK1h0KGMpKyIgaXMgbm90IGludGVycG9sYXRhYmxlLiIpfSxvci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYWJlbHMscj10aGlzLm91dHB1dHM7aWYoMT09PWUubGVuZ3RoKXJldHVybiByWzBdLmV2YWx1YXRlKHQpO3ZhciBuPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYobjw9ZVswXSlyZXR1cm4gclswXS5ldmFsdWF0ZSh0KTt2YXIgaT1lLmxlbmd0aDtpZihuPj1lW2ktMV0pcmV0dXJuIHJbaS0xXS5ldmFsdWF0ZSh0KTt2YXIgYT1WZShlLG4pLG89ZVthXSxzPWVbYSsxXSxsPW9yLmludGVycG9sYXRpb25GYWN0b3IodGhpcy5pbnRlcnBvbGF0aW9uLG4sbyxzKSxjPXJbYV0uZXZhbHVhdGUodCksdT1yW2ErMV0uZXZhbHVhdGUodCk7cmV0dXJuImludGVycG9sYXRlIj09PXRoaXMub3BlcmF0b3I/R2VbdGhpcy50eXBlLmtpbmQudG9Mb3dlckNhc2UoKV0oYyx1LGwpOiJpbnRlcnBvbGF0ZS1oY2wiPT09dGhpcy5vcGVyYXRvcj9pci5yZXZlcnNlKGlyLmludGVycG9sYXRlKGlyLmZvcndhcmQoYyksaXIuZm9yd2FyZCh1KSxsKSk6bnIucmV2ZXJzZShuci5pbnRlcnBvbGF0ZShuci5mb3J3YXJkKGMpLG5yLmZvcndhcmQodSksbCkpfSxvci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCk7Zm9yKHZhciBlPTAscj10aGlzLm91dHB1dHM7ZTxyLmxlbmd0aDtlKz0xKXt0KHJbZV0pfX0sb3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vdXRwdXRzLmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC5vdXRwdXREZWZpbmVkKCl9KSl9LG9yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdDt0PSJsaW5lYXIiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/WyJsaW5lYXIiXToiZXhwb25lbnRpYWwiPT09dGhpcy5pbnRlcnBvbGF0aW9uLm5hbWU/MT09PXRoaXMuaW50ZXJwb2xhdGlvbi5iYXNlP1sibGluZWFyIl06WyJleHBvbmVudGlhbCIsdGhpcy5pbnRlcnBvbGF0aW9uLmJhc2VdOlsiY3ViaWMtYmV6aWVyIl0uY29uY2F0KHRoaXMuaW50ZXJwb2xhdGlvbi5jb250cm9sUG9pbnRzKTtmb3IodmFyIGU9W3RoaXMub3BlcmF0b3IsdCx0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPTA7cjx0aGlzLmxhYmVscy5sZW5ndGg7cisrKWUucHVzaCh0aGlzLmxhYmVsc1tyXSx0aGlzLm91dHB1dHNbcl0uc2VyaWFsaXplKCkpO3JldHVybiBlfTt2YXIgbHI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9dCx0aGlzLmFyZ3M9ZX07bHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwyKXJldHVybiBlLmVycm9yKCJFeHBlY3RlY3RlZCBhdCBsZWFzdCBvbmUgYXJndW1lbnQuIik7dmFyIHI9bnVsbCxuPWUuZXhwZWN0ZWRUeXBlO24mJiJ2YWx1ZSIhPT1uLmtpbmQmJihyPW4pO2Zvcih2YXIgaT1bXSxhPTAsbz10LnNsaWNlKDEpO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPWUucGFyc2UocywxK2kubGVuZ3RoLHIsdm9pZCAwLHt0eXBlQW5ub3RhdGlvbjoib21pdCJ9KTtpZighbClyZXR1cm4gbnVsbDtyPXJ8fGwudHlwZSxpLnB1c2gobCl9dmFyIGM9biYmaS5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gSnQobix0LnR5cGUpfSkpO3JldHVybiBuZXcgbHIoYz9IdDpyLGkpfSxsci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9bnVsbCxuPTAsaT0wLGE9dGhpcy5hcmdzO2k8YS5sZW5ndGg7aSs9MSl7aWYobisrLChyPWFbaV0uZXZhbHVhdGUodCkpJiZyIGluc3RhbmNlb2YgaWUmJiFyLmF2YWlsYWJsZSYmKGV8fChlPXIubmFtZSkscj1udWxsLG49PT10aGlzLmFyZ3MubGVuZ3RoJiYocj1lKSksbnVsbCE9PXIpYnJlYWt9cmV0dXJuIHJ9LGxyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dGhpcy5hcmdzLmZvckVhY2godCl9LGxyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXJncy5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQub3V0cHV0RGVmaW5lZCgpfSkpfSxsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9WyJjb2FsZXNjZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBjcj1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1lLnR5cGUsdGhpcy5iaW5kaW5ncz1bXS5jb25jYXQodCksdGhpcy5yZXN1bHQ9ZX07Y3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlc3VsdC5ldmFsdWF0ZSh0KX0sY3IucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYmluZGluZ3M7ZTxyLmxlbmd0aDtlKz0xKXt0KHJbZV1bMV0pfXQodGhpcy5yZXN1bHQpfSxjci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgIisodC5sZW5ndGgtMSkrIiBpbnN0ZWFkLiIpO2Zvcih2YXIgcj1bXSxuPTE7bjx0Lmxlbmd0aC0xO24rPTIpe3ZhciBpPXRbbl07aWYoInN0cmluZyIhPXR5cGVvZiBpKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBzdHJpbmcsIGJ1dCBmb3VuZCAiK3R5cGVvZiBpKyIgaW5zdGVhZC4iLG4pO2lmKC9bXmEtekEtWjAtOV9dLy50ZXN0KGkpKXJldHVybiBlLmVycm9yKCJWYXJpYWJsZSBuYW1lcyBtdXN0IGNvbnRhaW4gb25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciAnXycuIixuKTt2YXIgYT1lLnBhcnNlKHRbbisxXSxuKzEpO2lmKCFhKXJldHVybiBudWxsO3IucHVzaChbaSxhXSl9dmFyIG89ZS5wYXJzZSh0W3QubGVuZ3RoLTFdLHQubGVuZ3RoLTEsZS5leHBlY3RlZFR5cGUscik7cmV0dXJuIG8/bmV3IGNyKHIsbyk6bnVsbH0sY3IucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZXN1bHQub3V0cHV0RGVmaW5lZCgpfSxjci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PVsibGV0Il0sZT0wLHI9dGhpcy5iaW5kaW5ncztlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV0saT1uWzBdLGE9blsxXTt0LnB1c2goaSxhLnNlcmlhbGl6ZSgpKX1yZXR1cm4gdC5wdXNoKHRoaXMucmVzdWx0LnNlcmlhbGl6ZSgpKSx0fTt2YXIgdXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuaW5kZXg9ZSx0aGlzLmlucHV0PXJ9O3VyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxCdCksbj1lLnBhcnNlKHRbMl0sMixXdChlLmV4cGVjdGVkVHlwZXx8SHQpKTtpZighcnx8IW4pcmV0dXJuIG51bGw7dmFyIGk9bi50eXBlO3JldHVybiBuZXcgdXIoaS5pdGVtVHlwZSxyLG4pfSx1ci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbmRleC5ldmFsdWF0ZSh0KSxyPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoZTwwKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPCAwLiIpO2lmKGU+PXIubGVuZ3RoKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggb3V0IG9mIGJvdW5kczogIitlKyIgPiAiKyhyLmxlbmd0aC0xKSsiLiIpO2lmKGUhPT1NYXRoLmZsb29yKGUpKXRocm93IG5ldyB1ZSgiQXJyYXkgaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLCBidXQgZm91bmQgIitlKyIgaW5zdGVhZC4iKTtyZXR1cm4gcltlXX0sdXIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5kZXgpLHQodGhpcy5pbnB1dCl9LHVyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHVyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImF0Iix0aGlzLmluZGV4LnNlcmlhbGl6ZSgpLHRoaXMuaW5wdXQuc2VyaWFsaXplKCldfTt2YXIgZnI9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9anQsdGhpcy5uZWVkbGU9dCx0aGlzLmhheXN0YWNrPWV9O2ZyLnBhcnNlPWZ1bmN0aW9uKHQsZSl7aWYoMyE9PXQubGVuZ3RoKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCAyIGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxIdCksbj1lLnBhcnNlKHRbMl0sMixIdCk7cmV0dXJuIHImJm4/S3Qoci50eXBlLFtqdCxOdCxCdCxGdCxIdF0pP25ldyBmcihyLG4pOmUuZXJyb3IoIkV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50IHRvIGJlIG9mIHR5cGUgYm9vbGVhbiwgc3RyaW5nLCBudW1iZXIgb3IgbnVsbCwgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQiKTpudWxsfSxmci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5uZWVkbGUuZXZhbHVhdGUodCkscj10aGlzLmhheXN0YWNrLmV2YWx1YXRlKHQpO2lmKCFyKXJldHVybiExO2lmKCFRdChlLFsiYm9vbGVhbiIsInN0cmluZyIsIm51bWJlciIsIm51bGwiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHNlKGUpKSsiIGluc3RlYWQuIik7aWYoIVF0KHIsWyJzdHJpbmciLCJhcnJheSJdKSl0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHNlY29uZCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoc2UocikpKyIgaW5zdGVhZC4iKTtyZXR1cm4gci5pbmRleE9mKGUpPj0wfSxmci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5uZWVkbGUpLHQodGhpcy5oYXlzdGFjayl9LGZyLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGZyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm5bImluIix0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSx0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpXX07dmFyIGhyPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnR5cGU9QnQsdGhpcy5uZWVkbGU9dCx0aGlzLmhheXN0YWNrPWUsdGhpcy5mcm9tSW5kZXg9cn07aHIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDw9Mnx8dC5sZW5ndGg+PTUpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDMgb3IgNCBhcmd1bWVudHMsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsSHQpLG49ZS5wYXJzZSh0WzJdLDIsSHQpO2lmKCFyfHwhbilyZXR1cm4gbnVsbDtpZighS3Qoci50eXBlLFtqdCxOdCxCdCxGdCxIdF0pKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyIG9yIG51bGwsIGJ1dCBmb3VuZCAiK1h0KHIudHlwZSkrIiBpbnN0ZWFkIik7aWYoND09PXQubGVuZ3RoKXt2YXIgaT1lLnBhcnNlKHRbM10sMyxCdCk7cmV0dXJuIGk/bmV3IGhyKHIsbixpKTpudWxsfXJldHVybiBuZXcgaHIocixuKX0saHIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubmVlZGxlLmV2YWx1YXRlKHQpLHI9dGhpcy5oYXlzdGFjay5ldmFsdWF0ZSh0KTtpZighUXQoZSxbImJvb2xlYW4iLCJzdHJpbmciLCJudW1iZXIiLCJudWxsIl0pKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBib29sZWFuLCBzdHJpbmcsIG51bWJlciBvciBudWxsLCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpO2lmKCFRdChyLFsic3RyaW5nIiwiYXJyYXkiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBzZWNvbmQgYXJndW1lbnQgdG8gYmUgb2YgdHlwZSBhcnJheSBvciBzdHJpbmcsIGJ1dCBmb3VuZCAiK1h0KHNlKHIpKSsiIGluc3RlYWQuIik7aWYodGhpcy5mcm9tSW5kZXgpe3ZhciBuPXRoaXMuZnJvbUluZGV4LmV2YWx1YXRlKHQpO3JldHVybiByLmluZGV4T2YoZSxuKX1yZXR1cm4gci5pbmRleE9mKGUpfSxoci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5uZWVkbGUpLHQodGhpcy5oYXlzdGFjayksdGhpcy5mcm9tSW5kZXgmJnQodGhpcy5mcm9tSW5kZXgpfSxoci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxoci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7aWYobnVsbCE9dGhpcy5mcm9tSW5kZXgmJnZvaWQgMCE9PXRoaXMuZnJvbUluZGV4KXt2YXIgdD10aGlzLmZyb21JbmRleC5zZXJpYWxpemUoKTtyZXR1cm5bImluZGV4LW9mIix0aGlzLm5lZWRsZS5zZXJpYWxpemUoKSx0aGlzLmhheXN0YWNrLnNlcmlhbGl6ZSgpLHRdfXJldHVyblsiaW5kZXgtb2YiLHRoaXMubmVlZGxlLnNlcmlhbGl6ZSgpLHRoaXMuaGF5c3RhY2suc2VyaWFsaXplKCldfTt2YXIgcHI9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuaW5wdXRUeXBlPXQsdGhpcy50eXBlPWUsdGhpcy5pbnB1dD1yLHRoaXMuY2FzZXM9bix0aGlzLm91dHB1dHM9aSx0aGlzLm90aGVyd2lzZT1hfTtwci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDUpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDQgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTEpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIGV2ZW4gbnVtYmVyIG9mIGFyZ3VtZW50cy4iKTt2YXIgcixuO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKG49ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgaT17fSxhPVtdLG89MjtvPHQubGVuZ3RoLTE7bys9Mil7dmFyIHM9dFtvXSxsPXRbbysxXTtBcnJheS5pc0FycmF5KHMpfHwocz1bc10pO3ZhciBjPWUuY29uY2F0KG8pO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gYy5lcnJvcigiRXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGJyYW5jaCBsYWJlbC4iKTtmb3IodmFyIHU9MCxmPXM7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2lmKCJudW1iZXIiIT10eXBlb2YgaCYmInN0cmluZyIhPXR5cGVvZiBoKXJldHVybiBjLmVycm9yKCJCcmFuY2ggbGFiZWxzIG11c3QgYmUgbnVtYmVycyBvciBzdHJpbmdzLiIpO2lmKCJudW1iZXIiPT10eXBlb2YgaCYmTWF0aC5hYnMoaCk+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIGMuZXJyb3IoIkJyYW5jaCBsYWJlbHMgbXVzdCBiZSBpbnRlZ2VycyBubyBsYXJnZXIgdGhhbiAiK051bWJlci5NQVhfU0FGRV9JTlRFR0VSKyIuIik7aWYoIm51bWJlciI9PXR5cGVvZiBoJiZNYXRoLmZsb29yKGgpIT09aClyZXR1cm4gYy5lcnJvcigiTnVtZXJpYyBicmFuY2ggbGFiZWxzIG11c3QgYmUgaW50ZWdlciB2YWx1ZXMuIik7aWYocil7aWYoYy5jaGVja1N1YnR5cGUocixzZShoKSkpcmV0dXJuIG51bGx9ZWxzZSByPXNlKGgpO2lmKHZvaWQgMCE9PWlbU3RyaW5nKGgpXSlyZXR1cm4gYy5lcnJvcigiQnJhbmNoIGxhYmVscyBtdXN0IGJlIHVuaXF1ZS4iKTtpW1N0cmluZyhoKV09YS5sZW5ndGh9dmFyIHA9ZS5wYXJzZShsLG8sbik7aWYoIXApcmV0dXJuIG51bGw7bj1ufHxwLnR5cGUsYS5wdXNoKHApfXZhciBkPWUucGFyc2UodFsxXSwxLEh0KTtpZighZClyZXR1cm4gbnVsbDt2YXIgbT1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxuKTtyZXR1cm4gbT8idmFsdWUiIT09ZC50eXBlLmtpbmQmJmUuY29uY2F0KDEpLmNoZWNrU3VidHlwZShyLGQudHlwZSk/bnVsbDpuZXcgcHIocixuLGQsaSxhLG0pOm51bGx9LHByLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpO3JldHVybihzZShlKT09PXRoaXMuaW5wdXRUeXBlJiZ0aGlzLm91dHB1dHNbdGhpcy5jYXNlc1tlXV18fHRoaXMub3RoZXJ3aXNlKS5ldmFsdWF0ZSh0KX0scHIucHJvdG90eXBlLmVhY2hDaGlsZD1mdW5jdGlvbih0KXt0KHRoaXMuaW5wdXQpLHRoaXMub3V0cHV0cy5mb3JFYWNoKHQpLHQodGhpcy5vdGhlcndpc2UpfSxwci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm91dHB1dHMuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm91dHB1dERlZmluZWQoKX0pKSYmdGhpcy5vdGhlcndpc2Uub3V0cHV0RGVmaW5lZCgpfSxwci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bIm1hdGNoIix0aGlzLmlucHV0LnNlcmlhbGl6ZSgpXSxyPVtdLG49e30saT0wLGE9T2JqZWN0LmtleXModGhpcy5jYXNlcykuc29ydCgpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt2b2lkIDA9PT0oZj1uW3RoaXMuY2FzZXNbb11dKT8oblt0aGlzLmNhc2VzW29dXT1yLmxlbmd0aCxyLnB1c2goW3RoaXMuY2FzZXNbb10sW29dXSkpOnJbZl1bMV0ucHVzaChvKX1mb3IodmFyIHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PT10LmlucHV0VHlwZS5raW5kP051bWJlcihlKTplfSxsPTAsYz1yO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXVbMF0saD11WzFdOzE9PT1oLmxlbmd0aD9lLnB1c2gocyhoWzBdKSk6ZS5wdXNoKGgubWFwKHMpKSxlLnB1c2godGhpcy5vdXRwdXRzW291dHB1dEluZGV4JDFdLnNlcmlhbGl6ZSgpKX1yZXR1cm4gZS5wdXNoKHRoaXMub3RoZXJ3aXNlLnNlcmlhbGl6ZSgpKSxlfTt2YXIgZHI9ZnVuY3Rpb24odCxlLHIpe3RoaXMudHlwZT10LHRoaXMuYnJhbmNoZXM9ZSx0aGlzLm90aGVyd2lzZT1yfTtkci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPDQpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGF0IGxlYXN0IDMgYXJndW1lbnRzLCBidXQgZm91bmQgb25seSAiKyh0Lmxlbmd0aC0xKSsiLiIpO2lmKHQubGVuZ3RoJTIhPTApcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIGFuIG9kZCBudW1iZXIgb2YgYXJndW1lbnRzLiIpO3ZhciByO2UuZXhwZWN0ZWRUeXBlJiYidmFsdWUiIT09ZS5leHBlY3RlZFR5cGUua2luZCYmKHI9ZS5leHBlY3RlZFR5cGUpO2Zvcih2YXIgbj1bXSxpPTE7aTx0Lmxlbmd0aC0xO2krPTIpe3ZhciBhPWUucGFyc2UodFtpXSxpLGp0KTtpZighYSlyZXR1cm4gbnVsbDt2YXIgbz1lLnBhcnNlKHRbaSsxXSxpKzEscik7aWYoIW8pcmV0dXJuIG51bGw7bi5wdXNoKFthLG9dKSxyPXJ8fG8udHlwZX12YXIgcz1lLnBhcnNlKHRbdC5sZW5ndGgtMV0sdC5sZW5ndGgtMSxyKTtyZXR1cm4gcz9uZXcgZHIocixuLHMpOm51bGx9LGRyLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXRoaXMuYnJhbmNoZXM7ZTxyLmxlbmd0aDtlKz0xKXt2YXIgbj1yW2VdLGk9blswXSxhPW5bMV07aWYoaS5ldmFsdWF0ZSh0KSlyZXR1cm4gYS5ldmFsdWF0ZSh0KX1yZXR1cm4gdGhpcy5vdGhlcndpc2UuZXZhbHVhdGUodCl9LGRyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJyYW5jaGVzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW5bMF0sYT1uWzFdO3QoaSksdChhKX10KHRoaXMub3RoZXJ3aXNlKX0sZHIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5icmFuY2hlcy5ldmVyeSgoZnVuY3Rpb24odCl7dFswXTtyZXR1cm4gdFsxXS5vdXRwdXREZWZpbmVkKCl9KSkmJnRoaXMub3RoZXJ3aXNlLm91dHB1dERlZmluZWQoKX0sZHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3ZhciB0PVsiY2FzZSJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBtcj1mdW5jdGlvbih0LGUscixuKXt0aGlzLnR5cGU9dCx0aGlzLmlucHV0PWUsdGhpcy5iZWdpbkluZGV4PXIsdGhpcy5lbmRJbmRleD1ufTtmdW5jdGlvbiBncih0LGUpe3JldHVybiI9PSI9PT10fHwiIT0iPT09dD8iYm9vbGVhbiI9PT1lLmtpbmR8fCJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8Im51bGwiPT09ZS5raW5kfHwidmFsdWUiPT09ZS5raW5kOiJzdHJpbmciPT09ZS5raW5kfHwibnVtYmVyIj09PWUua2luZHx8InZhbHVlIj09PWUua2luZH1mdW5jdGlvbiB2cih0LGUscixuKXtyZXR1cm4gMD09PW4uY29tcGFyZShlLHIpfWZ1bmN0aW9uIHlyKHQsZSxyKXt2YXIgbj0iPT0iIT09dCYmIiE9IiE9PXQ7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSh0LGUscil7dGhpcy50eXBlPWp0LHRoaXMubGhzPXQsdGhpcy5yaHM9ZSx0aGlzLmNvbGxhdG9yPXIsdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQ9InZhbHVlIj09PXQudHlwZS5raW5kfHwidmFsdWUiPT09ZS50eXBlLmtpbmR9cmV0dXJuIGkucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgmJjQhPT10Lmxlbmd0aClyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy4iKTt2YXIgcj10WzBdLGE9ZS5wYXJzZSh0WzFdLDEsSHQpO2lmKCFhKXJldHVybiBudWxsO2lmKCFncihyLGEudHlwZSkpcmV0dXJuIGUuY29uY2F0KDEpLmVycm9yKCciJytyKyJcIiBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgdHlwZSAnIitYdChhLnR5cGUpKyInLiIpO3ZhciBvPWUucGFyc2UodFsyXSwyLEh0KTtpZighbylyZXR1cm4gbnVsbDtpZighZ3IocixvLnR5cGUpKXJldHVybiBlLmNvbmNhdCgyKS5lcnJvcignIicrcisiXCIgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIHR5cGUgJyIrWHQoby50eXBlKSsiJy4iKTtpZihhLnR5cGUua2luZCE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IGNvbXBhcmUgdHlwZXMgJyIrWHQoYS50eXBlKSsiJyBhbmQgJyIrWHQoby50eXBlKSsiJy4iKTtuJiYoInZhbHVlIj09PWEudHlwZS5raW5kJiYidmFsdWUiIT09by50eXBlLmtpbmQ/YT1uZXcgaGUoby50eXBlLFthXSk6InZhbHVlIiE9PWEudHlwZS5raW5kJiYidmFsdWUiPT09by50eXBlLmtpbmQmJihvPW5ldyBoZShhLnR5cGUsW29dKSkpO3ZhciBzPW51bGw7aWYoND09PXQubGVuZ3RoKXtpZigic3RyaW5nIiE9PWEudHlwZS5raW5kJiYic3RyaW5nIiE9PW8udHlwZS5raW5kJiYidmFsdWUiIT09YS50eXBlLmtpbmQmJiJ2YWx1ZSIhPT1vLnR5cGUua2luZClyZXR1cm4gZS5lcnJvcigiQ2Fubm90IHVzZSBjb2xsYXRvciB0byBjb21wYXJlIG5vbi1zdHJpbmcgdHlwZXMuIik7aWYoIShzPWUucGFyc2UodFszXSwzLHF0KSkpcmV0dXJuIG51bGx9cmV0dXJuIG5ldyBpKGEsbyxzKX0saS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24oaSl7dmFyIGE9dGhpcy5saHMuZXZhbHVhdGUoaSksbz10aGlzLnJocy5ldmFsdWF0ZShpKTtpZihuJiZ0aGlzLmhhc1VudHlwZWRBcmd1bWVudCl7dmFyIHM9c2UoYSksbD1zZShvKTtpZihzLmtpbmQhPT1sLmtpbmR8fCJzdHJpbmciIT09cy5raW5kJiYibnVtYmVyIiE9PXMua2luZCl0aHJvdyBuZXcgdWUoJ0V4cGVjdGVkIGFyZ3VtZW50cyBmb3IgIicrdCsnIiB0byBiZSAoc3RyaW5nLCBzdHJpbmcpIG9yIChudW1iZXIsIG51bWJlciksIGJ1dCBmb3VuZCAoJytzLmtpbmQrIiwgIitsLmtpbmQrIikgaW5zdGVhZC4iKX1pZih0aGlzLmNvbGxhdG9yJiYhbiYmdGhpcy5oYXNVbnR5cGVkQXJndW1lbnQpe3ZhciBjPXNlKGEpLHU9c2Uobyk7aWYoInN0cmluZyIhPT1jLmtpbmR8fCJzdHJpbmciIT09dS5raW5kKXJldHVybiBlKGksYSxvKX1yZXR1cm4gdGhpcy5jb2xsYXRvcj9yKGksYSxvLHRoaXMuY29sbGF0b3IuZXZhbHVhdGUoaSkpOmUoaSxhLG8pfSxpLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmxocyksdCh0aGlzLnJocyksdGhpcy5jb2xsYXRvciYmdCh0aGlzLmNvbGxhdG9yKX0saS5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiEwfSxpLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgZT1bdF07cmV0dXJuIHRoaXMuZWFjaENoaWxkKChmdW5jdGlvbih0KXtlLnB1c2godC5zZXJpYWxpemUoKSl9KSksZX0saX0oKX1tci5wYXJzZT1mdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoPD0yfHx0Lmxlbmd0aD49NSlyZXR1cm4gZS5lcnJvcigiRXhwZWN0ZWQgMyBvciA0IGFyZ3VtZW50cywgYnV0IGZvdW5kICIrKHQubGVuZ3RoLTEpKyIgaW5zdGVhZC4iKTt2YXIgcj1lLnBhcnNlKHRbMV0sMSxIdCksbj1lLnBhcnNlKHRbMl0sMixCdCk7aWYoIXJ8fCFuKXJldHVybiBudWxsO2lmKCFLdChyLnR5cGUsW1d0KEh0KSxOdCxIdF0pKXJldHVybiBlLmVycm9yKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoci50eXBlKSsiIGluc3RlYWQiKTtpZig0PT09dC5sZW5ndGgpe3ZhciBpPWUucGFyc2UodFszXSwzLEJ0KTtyZXR1cm4gaT9uZXcgbXIoci50eXBlLHIsbixpKTpudWxsfXJldHVybiBuZXcgbXIoci50eXBlLHIsbil9LG1yLnByb3RvdHlwZS5ldmFsdWF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmlucHV0LmV2YWx1YXRlKHQpLHI9dGhpcy5iZWdpbkluZGV4LmV2YWx1YXRlKHQpO2lmKCFRdChlLFsic3RyaW5nIiwiYXJyYXkiXSkpdGhyb3cgbmV3IHVlKCJFeHBlY3RlZCBmaXJzdCBhcmd1bWVudCB0byBiZSBvZiB0eXBlIGFycmF5IG9yIHN0cmluZywgYnV0IGZvdW5kICIrWHQoc2UoZSkpKyIgaW5zdGVhZC4iKTtpZih0aGlzLmVuZEluZGV4KXt2YXIgbj10aGlzLmVuZEluZGV4LmV2YWx1YXRlKHQpO3JldHVybiBlLnNsaWNlKHIsbil9cmV0dXJuIGUuc2xpY2Uocil9LG1yLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLmlucHV0KSx0KHRoaXMuYmVnaW5JbmRleCksdGhpcy5lbmRJbmRleCYmdCh0aGlzLmVuZEluZGV4KX0sbXIucHJvdG90eXBlLm91dHB1dERlZmluZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbXIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuZW5kSW5kZXgmJnZvaWQgMCE9PXRoaXMuZW5kSW5kZXgpe3ZhciB0PXRoaXMuZW5kSW5kZXguc2VyaWFsaXplKCk7cmV0dXJuWyJzbGljZSIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKSx0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCksdF19cmV0dXJuWyJzbGljZSIsdGhpcy5pbnB1dC5zZXJpYWxpemUoKSx0aGlzLmJlZ2luSW5kZXguc2VyaWFsaXplKCldfTt2YXIgeHI9eXIoIj09IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPT09cn0pLHZyKSxicj15cigiIT0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGUhPT1yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiF2cigwLGUscixuKX0pKSxfcj15cigiPCIsKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZTxyfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKTwwfSkpLHdyPXlyKCI+IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPnJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPjB9KSksVHI9eXIoIjw9IiwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPD1yfSksKGZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLmNvbXBhcmUoZSxyKTw9MH0pKSxrcj15cigiPj0iLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGU+PXJ9KSwoZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uY29tcGFyZShlLHIpPj0wfSkpLEFyPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPU50LHRoaXMubnVtYmVyPXQsdGhpcy5sb2NhbGU9ZSx0aGlzLmN1cnJlbmN5PXIsdGhpcy5taW5GcmFjdGlvbkRpZ2l0cz1uLHRoaXMubWF4RnJhY3Rpb25EaWdpdHM9aX07QXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigzIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIHR3byBhcmd1bWVudHMuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEsQnQpO2lmKCFyKXJldHVybiBudWxsO3ZhciBuPXRbMl07aWYoIm9iamVjdCIhPXR5cGVvZiBufHxBcnJheS5pc0FycmF5KG4pKXJldHVybiBlLmVycm9yKCJOdW1iZXJGb3JtYXQgb3B0aW9ucyBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdC4iKTt2YXIgaT1udWxsO2lmKG4ubG9jYWxlJiYhKGk9ZS5wYXJzZShuLmxvY2FsZSwxLE50KSkpcmV0dXJuIG51bGw7dmFyIGE9bnVsbDtpZihuLmN1cnJlbmN5JiYhKGE9ZS5wYXJzZShuLmN1cnJlbmN5LDEsTnQpKSlyZXR1cm4gbnVsbDt2YXIgbz1udWxsO2lmKG5bIm1pbi1mcmFjdGlvbi1kaWdpdHMiXSYmIShvPWUucGFyc2UoblsibWluLWZyYWN0aW9uLWRpZ2l0cyJdLDEsQnQpKSlyZXR1cm4gbnVsbDt2YXIgcz1udWxsO3JldHVybiBuWyJtYXgtZnJhY3Rpb24tZGlnaXRzIl0mJiEocz1lLnBhcnNlKG5bIm1heC1mcmFjdGlvbi1kaWdpdHMiXSwxLEJ0KSk/bnVsbDpuZXcgQXIocixpLGEsbyxzKX0sQXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5sb2NhbGU/dGhpcy5sb2NhbGUuZXZhbHVhdGUodCk6W10se3N0eWxlOnRoaXMuY3VycmVuY3k/ImN1cnJlbmN5IjoiZGVjaW1hbCIsY3VycmVuY3k6dGhpcy5jdXJyZW5jeT90aGlzLmN1cnJlbmN5LmV2YWx1YXRlKHQpOnZvaWQgMCxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6dGhpcy5taW5GcmFjdGlvbkRpZ2l0cz90aGlzLm1pbkZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKHQpOnZvaWQgMCxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6dGhpcy5tYXhGcmFjdGlvbkRpZ2l0cz90aGlzLm1heEZyYWN0aW9uRGlnaXRzLmV2YWx1YXRlKHQpOnZvaWQgMH0pLmZvcm1hdCh0aGlzLm51bWJlci5ldmFsdWF0ZSh0KSl9LEFyLnByb3RvdHlwZS5lYWNoQ2hpbGQ9ZnVuY3Rpb24odCl7dCh0aGlzLm51bWJlciksdGhpcy5sb2NhbGUmJnQodGhpcy5sb2NhbGUpLHRoaXMuY3VycmVuY3kmJnQodGhpcy5jdXJyZW5jeSksdGhpcy5taW5GcmFjdGlvbkRpZ2l0cyYmdCh0aGlzLm1pbkZyYWN0aW9uRGlnaXRzKSx0aGlzLm1heEZyYWN0aW9uRGlnaXRzJiZ0KHRoaXMubWF4RnJhY3Rpb25EaWdpdHMpfSxBci5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxBci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMubG9jYWxlJiYodC5sb2NhbGU9dGhpcy5sb2NhbGUuc2VyaWFsaXplKCkpLHRoaXMuY3VycmVuY3kmJih0LmN1cnJlbmN5PXRoaXMuY3VycmVuY3kuc2VyaWFsaXplKCkpLHRoaXMubWluRnJhY3Rpb25EaWdpdHMmJih0WyJtaW4tZnJhY3Rpb24tZGlnaXRzIl09dGhpcy5taW5GcmFjdGlvbkRpZ2l0cy5zZXJpYWxpemUoKSksdGhpcy5tYXhGcmFjdGlvbkRpZ2l0cyYmKHRbIm1heC1mcmFjdGlvbi1kaWdpdHMiXT10aGlzLm1heEZyYWN0aW9uRGlnaXRzLnNlcmlhbGl6ZSgpKSxbIm51bWJlci1mb3JtYXQiLHRoaXMubnVtYmVyLnNlcmlhbGl6ZSgpLHRdfTt2YXIgTXI9ZnVuY3Rpb24odCl7dGhpcy50eXBlPUJ0LHRoaXMuaW5wdXQ9dH07TXIucGFyc2U9ZnVuY3Rpb24odCxlKXtpZigyIT09dC5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoIkV4cGVjdGVkIDEgYXJndW1lbnQsIGJ1dCBmb3VuZCAiKyh0Lmxlbmd0aC0xKSsiIGluc3RlYWQuIik7dmFyIHI9ZS5wYXJzZSh0WzFdLDEpO3JldHVybiByPyJhcnJheSIhPT1yLnR5cGUua2luZCYmInN0cmluZyIhPT1yLnR5cGUua2luZCYmInZhbHVlIiE9PXIudHlwZS5raW5kP2UuZXJyb3IoIkV4cGVjdGVkIGFyZ3VtZW50IG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgIitYdChyLnR5cGUpKyIgaW5zdGVhZC4iKTpuZXcgTXIocik6bnVsbH0sTXIucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQuZXZhbHVhdGUodCk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlLmxlbmd0aDtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlLmxlbmd0aDt0aHJvdyBuZXcgdWUoIkV4cGVjdGVkIHZhbHVlIHRvIGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFycmF5LCBidXQgZm91bmQgIitYdChzZShlKSkrIiBpbnN0ZWFkLiIpfSxNci5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3QodGhpcy5pbnB1dCl9LE1yLnByb3RvdHlwZS5vdXRwdXREZWZpbmVkPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE1yLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD1bImxlbmd0aCJdO3JldHVybiB0aGlzLmVhY2hDaGlsZCgoZnVuY3Rpb24oZSl7dC5wdXNoKGUuc2VyaWFsaXplKCkpfSkpLHR9O3ZhciBTcj17Ij09Ijp4ciwiIT0iOmJyLCI+Ijp3ciwiPCI6X3IsIj49IjprciwiPD0iOlRyLGFycmF5OmhlLGF0OnVyLGJvb2xlYW46aGUsY2FzZTpkcixjb2FsZXNjZTpscixjb2xsYXRvcjpiZSxmb3JtYXQ6cGUsaW1hZ2U6ZGUsaW46ZnIsImluZGV4LW9mIjpocixpbnRlcnBvbGF0ZTpvciwiaW50ZXJwb2xhdGUtaGNsIjpvciwiaW50ZXJwb2xhdGUtbGFiIjpvcixsZW5ndGg6TXIsbGV0OmNyLGxpdGVyYWw6Y2UsbWF0Y2g6cHIsbnVtYmVyOmhlLCJudW1iZXItZm9ybWF0IjpBcixvYmplY3Q6aGUsc2xpY2U6bXIsc3RlcDpIZSxzdHJpbmc6aGUsInRvLWJvb2xlYW4iOmdlLCJ0by1jb2xvciI6Z2UsInRvLW51bWJlciI6Z2UsInRvLXN0cmluZyI6Z2UsdmFyOmplLHdpdGhpbjpSZX07ZnVuY3Rpb24gRXIodCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdO3I9ci5ldmFsdWF0ZSh0KSxuPW4uZXZhbHVhdGUodCksaT1pLmV2YWx1YXRlKHQpO3ZhciBvPWE/YS5ldmFsdWF0ZSh0KToxLHM9YWUocixuLGksbyk7aWYocyl0aHJvdyBuZXcgdWUocyk7cmV0dXJuIG5ldyB0ZShyLzI1NSpvLG4vMjU1Km8saS8yNTUqbyxvKX1mdW5jdGlvbiBMcih0LGUpe3JldHVybiB0IGluIGV9ZnVuY3Rpb24gQ3IodCxlKXt2YXIgcj1lW3RdO3JldHVybiB2b2lkIDA9PT1yP251bGw6cn1mdW5jdGlvbiBQcih0KXtyZXR1cm57dHlwZTp0fX1mdW5jdGlvbiBJcih0KXtyZXR1cm57cmVzdWx0OiJzdWNjZXNzIix2YWx1ZTp0fX1mdW5jdGlvbiBPcih0KXtyZXR1cm57cmVzdWx0OiJlcnJvciIsdmFsdWU6dH19ZnVuY3Rpb24genIodCl7cmV0dXJuImRhdGEtZHJpdmVuIj09PXRbInByb3BlcnR5LXR5cGUiXXx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PXRbInByb3BlcnR5LXR5cGUiXX1mdW5jdGlvbiBEcih0KXtyZXR1cm4hIXQuZXhwcmVzc2lvbiYmdC5leHByZXNzaW9uLnBhcmFtZXRlcnMuaW5kZXhPZigiem9vbSIpPi0xfWZ1bmN0aW9uIFJyKHQpe3JldHVybiEhdC5leHByZXNzaW9uJiZ0LmV4cHJlc3Npb24uaW50ZXJwb2xhdGVkfWZ1bmN0aW9uIEZyKHQpe3JldHVybiB0IGluc3RhbmNlb2YgTnVtYmVyPyJudW1iZXIiOnQgaW5zdGFuY2VvZiBTdHJpbmc/InN0cmluZyI6dCBpbnN0YW5jZW9mIEJvb2xlYW4/ImJvb2xlYW4iOkFycmF5LmlzQXJyYXkodCk/ImFycmF5IjpudWxsPT09dD8ibnVsbCI6dHlwZW9mIHR9ZnVuY3Rpb24gQnIodCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmIUFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gTnIodCl7cmV0dXJuIHR9ZnVuY3Rpb24ganIodCxlLHIpe3JldHVybiB2b2lkIDAhPT10P3Q6dm9pZCAwIT09ZT9lOnZvaWQgMCE9PXI/cjp2b2lkIDB9ZnVuY3Rpb24gVXIodCxlLHIsbixpKXtyZXR1cm4ganIodHlwZW9mIHI9PT1pP25bcl06dm9pZCAwLHQuZGVmYXVsdCxlLmRlZmF1bHQpfWZ1bmN0aW9uIFZyKHQsZSxyKXtpZigibnVtYmVyIiE9PUZyKHIpKXJldHVybiBqcih0LmRlZmF1bHQsZS5kZWZhdWx0KTt2YXIgbj10LnN0b3BzLmxlbmd0aDtpZigxPT09bilyZXR1cm4gdC5zdG9wc1swXVsxXTtpZihyPD10LnN0b3BzWzBdWzBdKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI+PXQuc3RvcHNbbi0xXVswXSlyZXR1cm4gdC5zdG9wc1tuLTFdWzFdO3ZhciBpPVZlKHQuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdFswXX0pKSxyKTtyZXR1cm4gdC5zdG9wc1tpXVsxXX1mdW5jdGlvbiBIcih0LGUscil7dmFyIG49dm9pZCAwIT09dC5iYXNlP3QuYmFzZToxO2lmKCJudW1iZXIiIT09RnIocikpcmV0dXJuIGpyKHQuZGVmYXVsdCxlLmRlZmF1bHQpO3ZhciBpPXQuc3RvcHMubGVuZ3RoO2lmKDE9PT1pKXJldHVybiB0LnN0b3BzWzBdWzFdO2lmKHI8PXQuc3RvcHNbMF1bMF0pcmV0dXJuIHQuc3RvcHNbMF1bMV07aWYocj49dC5zdG9wc1tpLTFdWzBdKXJldHVybiB0LnN0b3BzW2ktMV1bMV07dmFyIGE9VmUodC5zdG9wcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHIpLG89ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi1yLGE9dC1yO3JldHVybiAwPT09aT8wOjE9PT1lP2EvaTooTWF0aC5wb3coZSxhKS0xKS8oTWF0aC5wb3coZSxpKS0xKX0ocixuLHQuc3RvcHNbYV1bMF0sdC5zdG9wc1thKzFdWzBdKSxzPXQuc3RvcHNbYV1bMV0sbD10LnN0b3BzW2ErMV1bMV0sYz1HZVtlLnR5cGVdfHxOcjtpZih0LmNvbG9yU3BhY2UmJiJyZ2IiIT09dC5jb2xvclNwYWNlKXt2YXIgdT1hclt0LmNvbG9yU3BhY2VdO2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdS5yZXZlcnNlKHUuaW50ZXJwb2xhdGUodS5mb3J3YXJkKHQpLHUuZm9yd2FyZChlKSxvKSl9fXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBzLmV2YWx1YXRlP3tldmFsdWF0ZTpmdW5jdGlvbigpe2Zvcih2YXIgdD1bXSxlPWFyZ3VtZW50cy5sZW5ndGg7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTt2YXIgcj1zLmV2YWx1YXRlLmFwcGx5KHZvaWQgMCx0KSxuPWwuZXZhbHVhdGUuYXBwbHkodm9pZCAwLHQpO2lmKHZvaWQgMCE9PXImJnZvaWQgMCE9PW4pcmV0dXJuIGMocixuLG8pfX06YyhzLGwsbyl9ZnVuY3Rpb24gcXIodCxlLHIpe3JldHVybiJjb2xvciI9PT1lLnR5cGU/cj10ZS5wYXJzZShyKToiZm9ybWF0dGVkIj09PWUudHlwZT9yPW5lLmZyb21TdHJpbmcoci50b1N0cmluZygpKToicmVzb2x2ZWRJbWFnZSI9PT1lLnR5cGU/cj1pZS5mcm9tU3RyaW5nKHIudG9TdHJpbmcoKSk6RnIocik9PT1lLnR5cGV8fCJlbnVtIj09PWUudHlwZSYmZS52YWx1ZXNbcl18fChyPXZvaWQgMCksanIocix0LmRlZmF1bHQsZS5kZWZhdWx0KX14ZS5yZWdpc3RlcihTcix7ZXJyb3I6W3traW5kOiJlcnJvciJ9LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3Rocm93IG5ldyB1ZShyLmV2YWx1YXRlKHQpKX1dLHR5cGVvZjpbTnQsW0h0XSxmdW5jdGlvbih0LGUpe3JldHVybiBYdChzZShlWzBdLmV2YWx1YXRlKHQpKSl9XSwidG8tcmdiYSI6W1d0KEJ0LDQpLFtVdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0FycmF5KCl9XSxyZ2I6W1V0LFtCdCxCdCxCdF0sRXJdLHJnYmE6W1V0LFtCdCxCdCxCdCxCdF0sRXJdLGhhczp7dHlwZTpqdCxvdmVybG9hZHM6W1tbTnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIExyKGVbMF0uZXZhbHVhdGUodCksdC5wcm9wZXJ0aWVzKCkpfV0sW1tOdCxWdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gTHIoci5ldmFsdWF0ZSh0KSxuLmV2YWx1YXRlKHQpKX1dXX0sZ2V0Ont0eXBlOkh0LG92ZXJsb2FkczpbW1tOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3IoZVswXS5ldmFsdWF0ZSh0KSx0LnByb3BlcnRpZXMoKSl9XSxbW050LFZ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiBDcihyLmV2YWx1YXRlKHQpLG4uZXZhbHVhdGUodCkpfV1dfSwiZmVhdHVyZS1zdGF0ZSI6W0h0LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3IoZVswXS5ldmFsdWF0ZSh0KSx0LmZlYXR1cmVTdGF0ZXx8e30pfV0scHJvcGVydGllczpbVnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQucHJvcGVydGllcygpfV0sImdlb21ldHJ5LXR5cGUiOltOdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKX1dLGlkOltIdCxbXSxmdW5jdGlvbih0KXtyZXR1cm4gdC5pZCgpfV0sem9vbTpbQnQsW10sZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2xvYmFscy56b29tfV0sImhlYXRtYXAtZGVuc2l0eSI6W0J0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMuaGVhdG1hcERlbnNpdHl8fDB9XSwibGluZS1wcm9ncmVzcyI6W0J0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB0Lmdsb2JhbHMubGluZVByb2dyZXNzfHwwfV0sYWNjdW11bGF0ZWQ6W0h0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10Lmdsb2JhbHMuYWNjdW11bGF0ZWQ/bnVsbDp0Lmdsb2JhbHMuYWNjdW11bGF0ZWR9XSwiKyI6W0J0LFByKEJ0KSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPWU7bjxpLmxlbmd0aDtuKz0xKXtyKz1pW25dLmV2YWx1YXRlKHQpfXJldHVybiByfV0sIioiOltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7cio9aVtuXS5ldmFsdWF0ZSh0KX1yZXR1cm4gcn1dLCItIjp7dHlwZTpCdCxvdmVybG9hZHM6W1tbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCktbi5ldmFsdWF0ZSh0KX1dLFtbQnRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuLWVbMF0uZXZhbHVhdGUodCl9XV19LCIvIjpbQnQsW0J0LEJ0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiByLmV2YWx1YXRlKHQpL24uZXZhbHVhdGUodCl9XSwiJSI6W0J0LFtCdCxCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXTtyZXR1cm4gci5ldmFsdWF0ZSh0KSVuLmV2YWx1YXRlKHQpfV0sbG4yOltCdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLkxOMn1dLHBpOltCdCxbXSxmdW5jdGlvbigpe3JldHVybiBNYXRoLlBJfV0sZTpbQnQsW10sZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5FfV0sIl4iOltCdCxbQnQsQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIE1hdGgucG93KHIuZXZhbHVhdGUodCksbi5ldmFsdWF0ZSh0KSl9XSxzcXJ0OltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zcXJ0KHIuZXZhbHVhdGUodCkpfV0sbG9nMTA6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmxvZyhyLmV2YWx1YXRlKHQpKS9NYXRoLkxOMTB9XSxsbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpfV0sbG9nMjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgubG9nKHIuZXZhbHVhdGUodCkpL01hdGguTE4yfV0sc2luOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5zaW4oci5ldmFsdWF0ZSh0KSl9XSxjb3M6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmNvcyhyLmV2YWx1YXRlKHQpKX1dLHRhbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGgudGFuKHIuZXZhbHVhdGUodCkpfV0sYXNpbjpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIE1hdGguYXNpbihyLmV2YWx1YXRlKHQpKX1dLGFjb3M6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmFjb3Moci5ldmFsdWF0ZSh0KSl9XSxhdGFuOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hdGFuKHIuZXZhbHVhdGUodCkpfV0sbWluOltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5taW4uYXBwbHkoTWF0aCxlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSkpfV0sbWF4OltCdCxQcihCdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCxlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXZhbHVhdGUodCl9KSkpfV0sYWJzOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5hYnMoci5ldmFsdWF0ZSh0KSl9XSxyb3VuZDpbQnQsW0J0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0uZXZhbHVhdGUodCk7cmV0dXJuIHI8MD8tTWF0aC5yb3VuZCgtcik6TWF0aC5yb3VuZChyKX1dLGZsb29yOltCdCxbQnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gTWF0aC5mbG9vcihyLmV2YWx1YXRlKHQpKX1dLGNlaWw6W0J0LFtCdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBNYXRoLmNlaWwoci5ldmFsdWF0ZSh0KSl9XSwiZmlsdGVyLT09IjpbanQsW050LEh0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj1lWzFdO3JldHVybiB0LnByb3BlcnRpZXMoKVtyLnZhbHVlXT09PW4udmFsdWV9XSwiZmlsdGVyLWlkLT09IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF07cmV0dXJuIHQuaWQoKT09PXIudmFsdWV9XSwiZmlsdGVyLXR5cGUtPT0iOltqdCxbTnRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXTtyZXR1cm4gdC5nZW9tZXRyeVR5cGUoKT09PXIudmFsdWV9XSwiZmlsdGVyLTwiOltqdCxbTnQsSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV0saT10LnByb3BlcnRpZXMoKVtyLnZhbHVlXSxhPW4udmFsdWU7cmV0dXJuIHR5cGVvZiBpPT10eXBlb2YgYSYmaTxhfV0sImZpbHRlci1pZC08IjpbanQsW0h0XSxmdW5jdGlvbih0LGUpe3ZhciByPWVbMF0sbj10LmlkKCksaT1yLnZhbHVlO3JldHVybiB0eXBlb2Ygbj09dHlwZW9mIGkmJm48aX1dLCJmaWx0ZXItPiI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPmF9XSwiZmlsdGVyLWlkLT4iOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPXQuaWQoKSxpPXIudmFsdWU7cmV0dXJuIHR5cGVvZiBuPT10eXBlb2YgaSYmbj5pfV0sImZpbHRlci08PSI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPD1hfV0sImZpbHRlci1pZC08PSI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPD1pfV0sImZpbHRlci0+PSI6W2p0LFtOdCxIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPXQucHJvcGVydGllcygpW3IudmFsdWVdLGE9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIGk9PXR5cGVvZiBhJiZpPj1hfV0sImZpbHRlci1pZC0+PSI6W2p0LFtIdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5pZCgpLGk9ci52YWx1ZTtyZXR1cm4gdHlwZW9mIG49PXR5cGVvZiBpJiZuPj1pfV0sImZpbHRlci1oYXMiOltqdCxbSHRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0udmFsdWUgaW4gdC5wcm9wZXJ0aWVzKCl9XSwiZmlsdGVyLWhhcy1pZCI6W2p0LFtdLGZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT09dC5pZCgpJiZ2b2lkIDAhPT10LmlkKCl9XSwiZmlsdGVyLXR5cGUtaW4iOltqdCxbV3QoTnQpXSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLnZhbHVlLmluZGV4T2YodC5nZW9tZXRyeVR5cGUoKSk+PTB9XSwiZmlsdGVyLWlkLWluIjpbanQsW1d0KEh0KV0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS52YWx1ZS5pbmRleE9mKHQuaWQoKSk+PTB9XSwiZmlsdGVyLWluLXNtYWxsIjpbanQsW050LFd0KEh0KV0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3JldHVybiBlWzFdLnZhbHVlLmluZGV4T2YodC5wcm9wZXJ0aWVzKClbci52YWx1ZV0pPj0wfV0sImZpbHRlci1pbi1sYXJnZSI6W2p0LFtOdCxXdChIdCldLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcig7cjw9bjspe3ZhciBpPXIrbj4+MTtpZihlW2ldPT09dClyZXR1cm4hMDtlW2ldPnQ/bj1pLTE6cj1pKzF9cmV0dXJuITF9KHQucHJvcGVydGllcygpW3IudmFsdWVdLG4udmFsdWUsMCxuLnZhbHVlLmxlbmd0aC0xKX1dLGFsbDp7dHlwZTpqdCxvdmVybG9hZHM6W1tbanQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCkmJm4uZXZhbHVhdGUodCl9XSxbUHIoanQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7aWYoIW5bcl0uZXZhbHVhdGUodCkpcmV0dXJuITF9cmV0dXJuITB9XV19LGFueTp7dHlwZTpqdCxvdmVybG9hZHM6W1tbanQsanRdLGZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXSxuPWVbMV07cmV0dXJuIHIuZXZhbHVhdGUodCl8fG4uZXZhbHVhdGUodCl9XSxbUHIoanQpLGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lO3I8bi5sZW5ndGg7cis9MSl7aWYobltyXS5ldmFsdWF0ZSh0KSlyZXR1cm4hMH1yZXR1cm4hMX1dXX0sIiEiOltqdCxbanRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIWVbMF0uZXZhbHVhdGUodCl9XSwiaXMtc3VwcG9ydGVkLXNjcmlwdCI6W2p0LFtOdF0sZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49dC5nbG9iYWxzJiZ0Lmdsb2JhbHMuaXNTdXBwb3J0ZWRTY3JpcHQ7cmV0dXJuIW58fG4oci5ldmFsdWF0ZSh0KSl9XSx1cGNhc2U6W050LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b1VwcGVyQ2FzZSgpfV0sZG93bmNhc2U6W050LFtOdF0sZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS5ldmFsdWF0ZSh0KS50b0xvd2VyQ2FzZSgpfV0sY29uY2F0OltOdCxQcihIdCksZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBsZShlLmV2YWx1YXRlKHQpKX0pKS5qb2luKCIiKX1dLCJyZXNvbHZlZC1sb2NhbGUiOltOdCxbcXRdLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVbMF0uZXZhbHVhdGUodCkucmVzb2x2ZWRMb2NhbGUoKX1dfSk7dmFyIEdyPWZ1bmN0aW9uKHQsZSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy5fd2FybmluZ0hpc3Rvcnk9e30sdGhpcy5fZXZhbHVhdG9yPW5ldyB5ZSx0aGlzLl9kZWZhdWx0VmFsdWU9ZT9mdW5jdGlvbih0KXtyZXR1cm4iY29sb3IiPT09dC50eXBlJiZCcih0LmRlZmF1bHQpP25ldyB0ZSgwLDAsMCwwKToiY29sb3IiPT09dC50eXBlP3RlLnBhcnNlKHQuZGVmYXVsdCl8fG51bGw6dm9pZCAwPT09dC5kZWZhdWx0P251bGw6dC5kZWZhdWx0fShlKTpudWxsLHRoaXMuX2VudW1WYWx1ZXM9ZSYmImVudW0iPT09ZS50eXBlP2UudmFsdWVzOm51bGx9O2Z1bmN0aW9uIFlyKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiZ0Lmxlbmd0aD4wJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJnRbMF1pbiBTcn1mdW5jdGlvbiBXcih0LGUpe3ZhciByPW5ldyBVZShTcixbXSxlP2Z1bmN0aW9uKHQpe3ZhciBlPXtjb2xvcjpVdCxzdHJpbmc6TnQsbnVtYmVyOkJ0LGVudW06TnQsYm9vbGVhbjpqdCxmb3JtYXR0ZWQ6R3QscmVzb2x2ZWRJbWFnZTpZdH07aWYoImFycmF5Ij09PXQudHlwZSlyZXR1cm4gV3QoZVt0LnZhbHVlXXx8SHQsdC5sZW5ndGgpO3JldHVybiBlW3QudHlwZV19KGUpOnZvaWQgMCksbj1yLnBhcnNlKHQsdm9pZCAwLHZvaWQgMCx2b2lkIDAsZSYmInN0cmluZyI9PT1lLnR5cGU/e3R5cGVBbm5vdGF0aW9uOiJjb2VyY2UifTp2b2lkIDApO3JldHVybiBuP0lyKG5ldyBHcihuLGUpKTpPcihyLmVycm9ycyl9R3IucHJvdG90eXBlLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmc9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWUsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yLHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWw9bix0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzPWl8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb249YSx0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUodGhpcy5fZXZhbHVhdG9yKX0sR3IucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLl9ldmFsdWF0b3IuZ2xvYmFscz10LHRoaXMuX2V2YWx1YXRvci5mZWF0dXJlPWV8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZlYXR1cmVTdGF0ZT1yfHxudWxsLHRoaXMuX2V2YWx1YXRvci5jYW5vbmljYWw9bix0aGlzLl9ldmFsdWF0b3IuYXZhaWxhYmxlSW1hZ2VzPWl8fG51bGwsdGhpcy5fZXZhbHVhdG9yLmZvcm1hdHRlZFNlY3Rpb249YXx8bnVsbDt0cnl7dmFyIG89dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHRoaXMuX2V2YWx1YXRvcik7aWYobnVsbD09b3x8Im51bWJlciI9PXR5cGVvZiBvJiZvIT1vKXJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7aWYodGhpcy5fZW51bVZhbHVlcyYmIShvIGluIHRoaXMuX2VudW1WYWx1ZXMpKXRocm93IG5ldyB1ZSgiRXhwZWN0ZWQgdmFsdWUgdG8gYmUgb25lIG9mICIrT2JqZWN0LmtleXModGhpcy5fZW51bVZhbHVlcykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9KSkuam9pbigiLCAiKSsiLCBidXQgZm91bmQgIitKU09OLnN0cmluZ2lmeShvKSsiIGluc3RlYWQuIik7cmV0dXJuIG99Y2F0Y2godCl7cmV0dXJuIHRoaXMuX3dhcm5pbmdIaXN0b3J5W3QubWVzc2FnZV18fCh0aGlzLl93YXJuaW5nSGlzdG9yeVt0Lm1lc3NhZ2VdPSEwLCJ1bmRlZmluZWQiIT10eXBlb2YgY29uc29sZSYmY29uc29sZS53YXJuKHQubWVzc2FnZSkpLHRoaXMuX2RlZmF1bHRWYWx1ZX19O3ZhciBYcj1mdW5jdGlvbih0LGUpe3RoaXMua2luZD10LHRoaXMuX3N0eWxlRXhwcmVzc2lvbj1lLHRoaXMuaXNTdGF0ZURlcGVuZGVudD0iY29uc3RhbnQiIT09dCYmIUJlKGUuZXhwcmVzc2lvbil9O1hyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxYci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfTt2YXIgWnI9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5raW5kPXQsdGhpcy56b29tU3RvcHM9cix0aGlzLl9zdHlsZUV4cHJlc3Npb249ZSx0aGlzLmlzU3RhdGVEZXBlbmRlbnQ9ImNhbWVyYSIhPT10JiYhQmUoZS5leHByZXNzaW9uKSx0aGlzLmludGVycG9sYXRpb25UeXBlPW59O2Z1bmN0aW9uIEpyKHQsZSl7aWYoImVycm9yIj09PSh0PVdyKHQsZSkpLnJlc3VsdClyZXR1cm4gdDt2YXIgcj10LnZhbHVlLmV4cHJlc3Npb24sbj1GZShyKTtpZighbiYmIXpyKGUpKXJldHVybiBPcihbbmV3IER0KCIiLCJkYXRhIGV4cHJlc3Npb25zIG5vdCBzdXBwb3J0ZWQiKV0pO3ZhciBpPU5lKHIsWyJ6b29tIl0pO2lmKCFpJiYhRHIoZSkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsInpvb20gZXhwcmVzc2lvbnMgbm90IHN1cHBvcnRlZCIpXSk7dmFyIGE9ZnVuY3Rpb24gdChlKXt2YXIgcj1udWxsO2lmKGUgaW5zdGFuY2VvZiBjcilyPXQoZS5yZXN1bHQpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGxyKWZvcih2YXIgbj0wLGk9ZS5hcmdzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihyPXQoYSkpYnJlYWt9ZWxzZShlIGluc3RhbmNlb2YgSGV8fGUgaW5zdGFuY2VvZiBvcikmJmUuaW5wdXQgaW5zdGFuY2VvZiB4ZSYmInpvb20iPT09ZS5pbnB1dC5uYW1lJiYocj1lKTtpZihyIGluc3RhbmNlb2YgRHQpcmV0dXJuIHI7cmV0dXJuIGUuZWFjaENoaWxkKChmdW5jdGlvbihlKXt2YXIgbj10KGUpO24gaW5zdGFuY2VvZiBEdD9yPW46IXImJm4/cj1uZXcgRHQoIiIsJyJ6b29tIiBleHByZXNzaW9uIG1heSBvbmx5IGJlIHVzZWQgYXMgaW5wdXQgdG8gYSB0b3AtbGV2ZWwgInN0ZXAiIG9yICJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbi4nKTpyJiZuJiZyIT09biYmKHI9bmV3IER0KCIiLCdPbmx5IG9uZSB6b29tLWJhc2VkICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIHN1YmV4cHJlc3Npb24gbWF5IGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbi4nKSl9KSkscn0ocik7aWYoIWEmJiFpKXJldHVybiBPcihbbmV3IER0KCIiLCciem9vbSIgZXhwcmVzc2lvbiBtYXkgb25seSBiZSB1c2VkIGFzIGlucHV0IHRvIGEgdG9wLWxldmVsICJzdGVwIiBvciAiaW50ZXJwb2xhdGUiIGV4cHJlc3Npb24uJyldKTtpZihhIGluc3RhbmNlb2YgRHQpcmV0dXJuIE9yKFthXSk7aWYoYSBpbnN0YW5jZW9mIG9yJiYhUnIoZSkpcmV0dXJuIE9yKFtuZXcgRHQoIiIsJyJpbnRlcnBvbGF0ZSIgZXhwcmVzc2lvbnMgY2Fubm90IGJlIHVzZWQgd2l0aCB0aGlzIHByb3BlcnR5JyldKTtpZighYSlyZXR1cm4gSXIobmV3IFhyKG4/ImNvbnN0YW50Ijoic291cmNlIix0LnZhbHVlKSk7dmFyIG89YSBpbnN0YW5jZW9mIG9yP2EuaW50ZXJwb2xhdGlvbjp2b2lkIDA7cmV0dXJuIElyKG5ldyBacihuPyJjYW1lcmEiOiJjb21wb3NpdGUiLHQudmFsdWUsYS5sYWJlbHMsbykpfVpyLnByb3RvdHlwZS5ldmFsdWF0ZVdpdGhvdXRFcnJvckhhbmRsaW5nPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtyZXR1cm4gdGhpcy5fc3R5bGVFeHByZXNzaW9uLmV2YWx1YXRlV2l0aG91dEVycm9ySGFuZGxpbmcodCxlLHIsbixpLGEpfSxaci5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiB0aGlzLl9zdHlsZUV4cHJlc3Npb24uZXZhbHVhdGUodCxlLHIsbixpLGEpfSxaci5wcm90b3R5cGUuaW50ZXJwb2xhdGlvbkZhY3Rvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW50ZXJwb2xhdGlvblR5cGU/b3IuaW50ZXJwb2xhdGlvbkZhY3Rvcih0aGlzLmludGVycG9sYXRpb25UeXBlLHQsZSxyKTowfTt2YXIgS3I9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYXJhbWV0ZXJzPXQsdGhpcy5fc3BlY2lmaWNhdGlvbj1lLEl0KHRoaXMsZnVuY3Rpb24gdChlLHIpe3ZhciBuLGksYSxvPSJjb2xvciI9PT1yLnR5cGUscz1lLnN0b3BzJiYib2JqZWN0Ij09dHlwZW9mIGUuc3RvcHNbMF1bMF0sbD1zfHx2b2lkIDAhPT1lLnByb3BlcnR5LGM9c3x8IWwsdT1lLnR5cGV8fChScihyKT8iZXhwb25lbnRpYWwiOiJpbnRlcnZhbCIpO2lmKG8mJigoZT1JdCh7fSxlKSkuc3RvcHMmJihlLnN0b3BzPWUuc3RvcHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bdFswXSx0ZS5wYXJzZSh0WzFdKV19KSkpLGUuZGVmYXVsdD9lLmRlZmF1bHQ9dGUucGFyc2UoZS5kZWZhdWx0KTplLmRlZmF1bHQ9dGUucGFyc2Uoci5kZWZhdWx0KSksZS5jb2xvclNwYWNlJiYicmdiIiE9PWUuY29sb3JTcGFjZSYmIWFyW2UuY29sb3JTcGFjZV0pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvbG9yIHNwYWNlOiAiK2UuY29sb3JTcGFjZSk7aWYoImV4cG9uZW50aWFsIj09PXUpbj1IcjtlbHNlIGlmKCJpbnRlcnZhbCI9PT11KW49VnI7ZWxzZSBpZigiY2F0ZWdvcmljYWwiPT09dSl7bj1VcixpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBmPTAsaD1lLnN0b3BzO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtpW3BbMF1dPXBbMV19YT10eXBlb2YgZS5zdG9wc1swXVswXX1lbHNle2lmKCJpZGVudGl0eSIhPT11KXRocm93IG5ldyBFcnJvcignVW5rbm93biBmdW5jdGlvbiB0eXBlICInK3UrJyInKTtuPXFyfWlmKHMpe2Zvcih2YXIgZD17fSxtPVtdLGc9MDtnPGUuc3RvcHMubGVuZ3RoO2crKyl7dmFyIHY9ZS5zdG9wc1tnXSx5PXZbMF0uem9vbTt2b2lkIDA9PT1kW3ldJiYoZFt5XT17em9vbTp5LHR5cGU6ZS50eXBlLHByb3BlcnR5OmUucHJvcGVydHksZGVmYXVsdDplLmRlZmF1bHQsc3RvcHM6W119LG0ucHVzaCh5KSksZFt5XS5zdG9wcy5wdXNoKFt2WzBdLnZhbHVlLHZbMV1dKX1mb3IodmFyIHg9W10sYj0wLF89bTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl07eC5wdXNoKFtkW3ddLnpvb20sdChkW3ddLHIpXSl9dmFyIFQ9e25hbWU6ImxpbmVhciJ9O3JldHVybntraW5kOiJjb21wb3NpdGUiLGludGVycG9sYXRpb25UeXBlOlQsaW50ZXJwb2xhdGlvbkZhY3Rvcjpvci5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLFQpLHpvb21TdG9wczp4Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZXZhbHVhdGU6ZnVuY3Rpb24odCxuKXt2YXIgaT10Lnpvb207cmV0dXJuIEhyKHtzdG9wczp4LGJhc2U6ZS5iYXNlfSxyLGkpLmV2YWx1YXRlKGksbil9fX1pZihjKXt2YXIgaz0iZXhwb25lbnRpYWwiPT09dT97bmFtZToiZXhwb25lbnRpYWwiLGJhc2U6dm9pZCAwIT09ZS5iYXNlP2UuYmFzZToxfTpudWxsO3JldHVybntraW5kOiJjYW1lcmEiLGludGVycG9sYXRpb25UeXBlOmssaW50ZXJwb2xhdGlvbkZhY3Rvcjpvci5pbnRlcnBvbGF0aW9uRmFjdG9yLmJpbmQodm9pZCAwLGspLHpvb21TdG9wczplLnN0b3BzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksZXZhbHVhdGU6ZnVuY3Rpb24odCl7dmFyIG89dC56b29tO3JldHVybiBuKGUscixvLGksYSl9fX1yZXR1cm57a2luZDoic291cmNlIixldmFsdWF0ZTpmdW5jdGlvbih0LG8pe3ZhciBzPW8mJm8ucHJvcGVydGllcz9vLnByb3BlcnRpZXNbZS5wcm9wZXJ0eV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1zP2pyKGUuZGVmYXVsdCxyLmRlZmF1bHQpOm4oZSxyLHMsaSxhKX19fSh0aGlzLl9wYXJhbWV0ZXJzLHRoaXMuX3NwZWNpZmljYXRpb24pKX07ZnVuY3Rpb24gUXIodCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWN8fHt9LGk9dC5vYmplY3RFbGVtZW50VmFsaWRhdG9yc3x8e30sYT10LnN0eWxlLG89dC5zdHlsZVNwZWMscz1bXSxsPUZyKHIpO2lmKCJvYmplY3QiIT09bClyZXR1cm5bbmV3IEN0KGUsciwib2JqZWN0IGV4cGVjdGVkLCAiK2wrIiBmb3VuZCIpXTtmb3IodmFyIGMgaW4gcil7dmFyIHU9Yy5zcGxpdCgiLiIpWzBdLGY9blt1XXx8blsiKiJdLGg9dm9pZCAwO2lmKGlbdV0paD1pW3VdO2Vsc2UgaWYoblt1XSloPWtuO2Vsc2UgaWYoaVsiKiJdKWg9aVsiKiJdO2Vsc2V7aWYoIW5bIioiXSl7cy5wdXNoKG5ldyBDdChlLHJbY10sJ3Vua25vd24gcHJvcGVydHkgIicrYysnIicpKTtjb250aW51ZX1oPWtufXM9cy5jb25jYXQoaCh7a2V5OihlP2UrIi4iOmUpK2MsdmFsdWU6cltjXSx2YWx1ZVNwZWM6ZixzdHlsZTphLHN0eWxlU3BlYzpvLG9iamVjdDpyLG9iamVjdEtleTpjfSxyKSl9Zm9yKHZhciBwIGluIG4paVtwXXx8bltwXS5yZXF1aXJlZCYmdm9pZCAwPT09bltwXS5kZWZhdWx0JiZ2b2lkIDA9PT1yW3BdJiZzLnB1c2gobmV3IEN0KGUsciwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiJytwKyciJykpO3JldHVybiBzfWZ1bmN0aW9uICRyKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGUsaT10LnN0eWxlU3BlYyxhPXQua2V5LG89dC5hcnJheUVsZW1lbnRWYWxpZGF0b3J8fGtuO2lmKCJhcnJheSIhPT1GcihlKSlyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgZXhwZWN0ZWQsICIrRnIoZSkrIiBmb3VuZCIpXTtpZihyLmxlbmd0aCYmZS5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgbGVuZ3RoICIrci5sZW5ndGgrIiBleHBlY3RlZCwgbGVuZ3RoICIrZS5sZW5ndGgrIiBmb3VuZCIpXTtpZihyWyJtaW4tbGVuZ3RoIl0mJmUubGVuZ3RoPHJbIm1pbi1sZW5ndGgiXSlyZXR1cm5bbmV3IEN0KGEsZSwiYXJyYXkgbGVuZ3RoIGF0IGxlYXN0ICIrclsibWluLWxlbmd0aCJdKyIgZXhwZWN0ZWQsIGxlbmd0aCAiK2UubGVuZ3RoKyIgZm91bmQiKV07dmFyIHM9e3R5cGU6ci52YWx1ZSx2YWx1ZXM6ci52YWx1ZXN9O2kuJHZlcnNpb248NyYmKHMuZnVuY3Rpb249ci5mdW5jdGlvbiksIm9iamVjdCI9PT1GcihyLnZhbHVlKSYmKHM9ci52YWx1ZSk7Zm9yKHZhciBsPVtdLGM9MDtjPGUubGVuZ3RoO2MrKylsPWwuY29uY2F0KG8oe2FycmF5OmUsYXJyYXlJbmRleDpjLHZhbHVlOmVbY10sdmFsdWVTcGVjOnMsc3R5bGU6bixzdHlsZVNwZWM6aSxrZXk6YSsiWyIrYysiXSJ9KSk7cmV0dXJuIGx9ZnVuY3Rpb24gdG4odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1GcihyKTtyZXR1cm4ibnVtYmVyIj09PWkmJnIhPXImJihpPSJOYU4iKSwibnVtYmVyIiE9PWk/W25ldyBDdChlLHIsIm51bWJlciBleHBlY3RlZCwgIitpKyIgZm91bmQiKV06Im1pbmltdW0iaW4gbiYmcjxuLm1pbmltdW0/W25ldyBDdChlLHIscisiIGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bSB2YWx1ZSAiK24ubWluaW11bSldOiJtYXhpbXVtImluIG4mJnI+bi5tYXhpbXVtP1tuZXcgQ3QoZSxyLHIrIiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgIituLm1heGltdW0pXTpbXX1mdW5jdGlvbiBlbih0KXt2YXIgZSxyLG4saT10LnZhbHVlU3BlYyxhPU90KHQudmFsdWUudHlwZSksbz17fSxzPSJjYXRlZ29yaWNhbCIhPT1hJiZ2b2lkIDA9PT10LnZhbHVlLnByb3BlcnR5LGw9IXMsYz0iYXJyYXkiPT09RnIodC52YWx1ZS5zdG9wcykmJiJhcnJheSI9PT1Gcih0LnZhbHVlLnN0b3BzWzBdKSYmIm9iamVjdCI9PT1Gcih0LnZhbHVlLnN0b3BzWzBdWzBdKSx1PVFyKHtrZXk6dC5rZXksdmFsdWU6dC52YWx1ZSx2YWx1ZVNwZWM6dC5zdHlsZVNwZWMuZnVuY3Rpb24sc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e3N0b3BzOmZ1bmN0aW9uKHQpe2lmKCJpZGVudGl0eSI9PT1hKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnaWRlbnRpdHkgZnVuY3Rpb24gbWF5IG5vdCBoYXZlIGEgInN0b3BzIiBwcm9wZXJ0eScpXTt2YXIgZT1bXSxyPXQudmFsdWU7ZT1lLmNvbmNhdCgkcih7a2V5OnQua2V5LHZhbHVlOnIsdmFsdWVTcGVjOnQudmFsdWVTcGVjLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLGFycmF5RWxlbWVudFZhbGlkYXRvcjpmfSkpLCJhcnJheSI9PT1GcihyKSYmMD09PXIubGVuZ3RoJiZlLnB1c2gobmV3IEN0KHQua2V5LHIsImFycmF5IG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RvcCIpKTtyZXR1cm4gZX0sZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4ga24oe2tleTp0LmtleSx2YWx1ZTp0LnZhbHVlLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSl9fX0pO3JldHVybiJpZGVudGl0eSI9PT1hJiZzJiZ1LnB1c2gobmV3IEN0KHQua2V5LHQudmFsdWUsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInByb3BlcnR5IicpKSwiaWRlbnRpdHkiPT09YXx8dC52YWx1ZS5zdG9wc3x8dS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJzdG9wcyInKSksImV4cG9uZW50aWFsIj09PWEmJnQudmFsdWVTcGVjLmV4cHJlc3Npb24mJiFScih0LnZhbHVlU3BlYykmJnUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwiZXhwb25lbnRpYWwgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSksdC5zdHlsZVNwZWMuJHZlcnNpb24+PTgmJihsJiYhenIodC52YWx1ZVNwZWMpP3UucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwicHJvcGVydHkgZnVuY3Rpb25zIG5vdCBzdXBwb3J0ZWQiKSk6cyYmIURyKHQudmFsdWVTcGVjKSYmdS5wdXNoKG5ldyBDdCh0LmtleSx0LnZhbHVlLCJ6b29tIGZ1bmN0aW9ucyBub3Qgc3VwcG9ydGVkIikpKSwiY2F0ZWdvcmljYWwiIT09YSYmIWN8fHZvaWQgMCE9PXQudmFsdWUucHJvcGVydHl8fHUucHVzaChuZXcgQ3QodC5rZXksdC52YWx1ZSwnInByb3BlcnR5IiBwcm9wZXJ0eSBpcyByZXF1aXJlZCcpKSx1O2Z1bmN0aW9uIGYodCl7dmFyIGU9W10sYT10LnZhbHVlLHM9dC5rZXk7aWYoImFycmF5IiE9PUZyKGEpKXJldHVybltuZXcgQ3QocyxhLCJhcnJheSBleHBlY3RlZCwgIitGcihhKSsiIGZvdW5kIildO2lmKDIhPT1hLmxlbmd0aClyZXR1cm5bbmV3IEN0KHMsYSwiYXJyYXkgbGVuZ3RoIDIgZXhwZWN0ZWQsIGxlbmd0aCAiK2EubGVuZ3RoKyIgZm91bmQiKV07aWYoYyl7aWYoIm9iamVjdCIhPT1GcihhWzBdKSlyZXR1cm5bbmV3IEN0KHMsYSwib2JqZWN0IGV4cGVjdGVkLCAiK0ZyKGFbMF0pKyIgZm91bmQiKV07aWYodm9pZCAwPT09YVswXS56b29tKXJldHVybltuZXcgQ3QocyxhLCJvYmplY3Qgc3RvcCBrZXkgbXVzdCBoYXZlIHpvb20iKV07aWYodm9pZCAwPT09YVswXS52YWx1ZSlyZXR1cm5bbmV3IEN0KHMsYSwib2JqZWN0IHN0b3Aga2V5IG11c3QgaGF2ZSB2YWx1ZSIpXTtpZihuJiZuPk90KGFbMF0uem9vbSkpcmV0dXJuW25ldyBDdChzLGFbMF0uem9vbSwic3RvcCB6b29tIHZhbHVlcyBtdXN0IGFwcGVhciBpbiBhc2NlbmRpbmcgb3JkZXIiKV07T3QoYVswXS56b29tKSE9PW4mJihuPU90KGFbMF0uem9vbSkscj12b2lkIDAsbz17fSksZT1lLmNvbmNhdChRcih7a2V5OnMrIlswXSIsdmFsdWU6YVswXSx2YWx1ZVNwZWM6e3pvb206e319LHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOnt6b29tOnRuLHZhbHVlOmh9fSkpfWVsc2UgZT1lLmNvbmNhdChoKHtrZXk6cysiWzBdIix2YWx1ZTphWzBdLHZhbHVlU3BlYzp7fSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30sYSkpO3JldHVybiBZcih6dChhWzFdKSk/ZS5jb25jYXQoW25ldyBDdChzKyJbMV0iLGFbMV0sImV4cHJlc3Npb25zIGFyZSBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiBzdG9wcy4iKV0pOmUuY29uY2F0KGtuKHtrZXk6cysiWzFdIix2YWx1ZTphWzFdLHZhbHVlU3BlYzppLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjfSkpfWZ1bmN0aW9uIGgodCxuKXt2YXIgcz1Gcih0LnZhbHVlKSxsPU90KHQudmFsdWUpLGM9bnVsbCE9PXQudmFsdWU/dC52YWx1ZTpuO2lmKGUpe2lmKHMhPT1lKXJldHVybltuZXcgQ3QodC5rZXksYyxzKyIgc3RvcCBkb21haW4gdHlwZSBtdXN0IG1hdGNoIHByZXZpb3VzIHN0b3AgZG9tYWluIHR5cGUgIitlKV19ZWxzZSBlPXM7aWYoIm51bWJlciIhPT1zJiYic3RyaW5nIiE9PXMmJiJib29sZWFuIiE9PXMpcmV0dXJuW25ldyBDdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZSBtdXN0IGJlIGEgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4iKV07aWYoIm51bWJlciIhPT1zJiYiY2F0ZWdvcmljYWwiIT09YSl7dmFyIHU9Im51bWJlciBleHBlY3RlZCwgIitzKyIgZm91bmQiO3JldHVybiB6cihpKSYmdm9pZCAwPT09YSYmKHUrPSdcbklmIHlvdSBpbnRlbmRlZCB0byB1c2UgYSBjYXRlZ29yaWNhbCBmdW5jdGlvbiwgc3BlY2lmeSBgInR5cGUiOiAiY2F0ZWdvcmljYWwiYC4nKSxbbmV3IEN0KHQua2V5LGMsdSldfXJldHVybiJjYXRlZ29yaWNhbCIhPT1hfHwibnVtYmVyIiE9PXN8fGlzRmluaXRlKGwpJiZNYXRoLmZsb29yKGwpPT09bD8iY2F0ZWdvcmljYWwiIT09YSYmIm51bWJlciI9PT1zJiZ2b2lkIDAhPT1yJiZsPHI/W25ldyBDdCh0LmtleSxjLCJzdG9wIGRvbWFpbiB2YWx1ZXMgbXVzdCBhcHBlYXIgaW4gYXNjZW5kaW5nIG9yZGVyIildOihyPWwsImNhdGVnb3JpY2FsIj09PWEmJmwgaW4gbz9bbmV3IEN0KHQua2V5LGMsInN0b3AgZG9tYWluIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSIpXToob1tsXT0hMCxbXSkpOltuZXcgQ3QodC5rZXksYywiaW50ZWdlciBleHBlY3RlZCwgZm91bmQgIitsKV19fWZ1bmN0aW9uIHJuKHQpe3ZhciBlPSgicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dD9KcjpXcikoenQodC52YWx1ZSksdC52YWx1ZVNwZWMpO2lmKCJlcnJvciI9PT1lLnJlc3VsdClyZXR1cm4gZS52YWx1ZS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgQ3QoIiIrdC5rZXkrZS5rZXksdC52YWx1ZSxlLm1lc3NhZ2UpfSkpO3ZhciByPWUudmFsdWUuZXhwcmVzc2lvbnx8ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb247aWYoInByb3BlcnR5Ij09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiJ0ZXh0LWZvbnQiPT09dC5wcm9wZXJ0eUtleSYmIXIub3V0cHV0RGVmaW5lZCgpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnSW52YWxpZCBkYXRhIGV4cHJlc3Npb24gZm9yICInK3QucHJvcGVydHlLZXkrJyIuIE91dHB1dCB2YWx1ZXMgbXVzdCBiZSBjb250YWluZWQgYXMgbGl0ZXJhbHMgd2l0aGluIHRoZSBleHByZXNzaW9uLicpXTtpZigicHJvcGVydHkiPT09dC5leHByZXNzaW9uQ29udGV4dCYmImxheW91dCI9PT10LnByb3BlcnR5VHlwZSYmIUJlKHIpKXJldHVybltuZXcgQ3QodC5rZXksdC52YWx1ZSwnImZlYXR1cmUtc3RhdGUiIGRhdGEgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgd2l0aCBsYXlvdXQgcHJvcGVydGllcy4nKV07aWYoImZpbHRlciI9PT10LmV4cHJlc3Npb25Db250ZXh0JiYhQmUocikpcmV0dXJuW25ldyBDdCh0LmtleSx0LnZhbHVlLCciZmVhdHVyZS1zdGF0ZSIgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGZpbHRlcnMuJyldO2lmKHQuZXhwcmVzc2lvbkNvbnRleHQmJjA9PT10LmV4cHJlc3Npb25Db250ZXh0LmluZGV4T2YoImNsdXN0ZXIiKSl7aWYoIU5lKHIsWyJ6b29tIiwiZmVhdHVyZS1zdGF0ZSJdKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsJyJ6b29tIiBhbmQgImZlYXR1cmUtc3RhdGUiIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggY2x1c3RlciBwcm9wZXJ0aWVzLicpXTtpZigiY2x1c3Rlci1pbml0aWFsIj09PXQuZXhwcmVzc2lvbkNvbnRleHQmJiFGZShyKSlyZXR1cm5bbmV3IEN0KHQua2V5LHQudmFsdWUsIkZlYXR1cmUgZGF0YSBleHByZXNzaW9ucyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIGluaXRpYWwgZXhwcmVzc2lvbiBwYXJ0IG9mIGNsdXN0ZXIgcHJvcGVydGllcy4iKV19cmV0dXJuW119ZnVuY3Rpb24gbm4odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49dC52YWx1ZVNwZWMsaT1bXTtyZXR1cm4gQXJyYXkuaXNBcnJheShuLnZhbHVlcyk/LTE9PT1uLnZhbHVlcy5pbmRleE9mKE90KHIpKSYmaS5wdXNoKG5ldyBDdChlLHIsImV4cGVjdGVkIG9uZSBvZiBbIituLnZhbHVlcy5qb2luKCIsICIpKyJdLCAiK0pTT04uc3RyaW5naWZ5KHIpKyIgZm91bmQiKSk6LTE9PT1PYmplY3Qua2V5cyhuLnZhbHVlcykuaW5kZXhPZihPdChyKSkmJmkucHVzaChuZXcgQ3QoZSxyLCJleHBlY3RlZCBvbmUgb2YgWyIrT2JqZWN0LmtleXMobi52YWx1ZXMpLmpvaW4oIiwgIikrIl0sICIrSlNPTi5zdHJpbmdpZnkocikrIiBmb3VuZCIpKSxpfWZ1bmN0aW9uIGFuKHQpe2lmKCEwPT09dHx8ITE9PT10KXJldHVybiEwO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuITE7c3dpdGNoKHRbMF0pe2Nhc2UiaGFzIjpyZXR1cm4gdC5sZW5ndGg+PTImJiIkaWQiIT09dFsxXSYmIiR0eXBlIiE9PXRbMV07Y2FzZSJpbiI6cmV0dXJuIHQubGVuZ3RoPj0zJiYoInN0cmluZyIhPXR5cGVvZiB0WzFdfHxBcnJheS5pc0FycmF5KHRbMl0pKTtjYXNlIiFpbiI6Y2FzZSIhaGFzIjpjYXNlIm5vbmUiOnJldHVybiExO2Nhc2UiPT0iOmNhc2UiIT0iOmNhc2UiPiI6Y2FzZSI+PSI6Y2FzZSI8IjpjYXNlIjw9IjpyZXR1cm4gMyE9PXQubGVuZ3RofHxBcnJheS5pc0FycmF5KHRbMV0pfHxBcnJheS5pc0FycmF5KHRbMl0pO2Nhc2UiYW55IjpjYXNlImFsbCI6Zm9yKHZhciBlPTAscj10LnNsaWNlKDEpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTtpZighYW4obikmJiJib29sZWFuIiE9dHlwZW9mIG4pcmV0dXJuITF9cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMH19S3IuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBLcih0Ll9wYXJhbWV0ZXJzLHQuX3NwZWNpZmljYXRpb24pfSxLci5zZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJue19wYXJhbWV0ZXJzOnQuX3BhcmFtZXRlcnMsX3NwZWNpZmljYXRpb246dC5fc3BlY2lmaWNhdGlvbn19O3ZhciBvbj17dHlwZToiYm9vbGVhbiIsZGVmYXVsdDohMSx0cmFuc2l0aW9uOiExLCJwcm9wZXJ0eS10eXBlIjoiZGF0YS1kcml2ZW4iLGV4cHJlc3Npb246e2ludGVycG9sYXRlZDohMSxwYXJhbWV0ZXJzOlsiem9vbSIsImZlYXR1cmUiXX19O2Z1bmN0aW9uIHNuKHQpe2lmKG51bGw9PXQpcmV0dXJue2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiEwfSxuZWVkR2VvbWV0cnk6ITF9O2FuKHQpfHwodD1jbih0KSk7dmFyIGU9V3IodCxvbik7aWYoImVycm9yIj09PWUucmVzdWx0KXRocm93IG5ldyBFcnJvcihlLnZhbHVlLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5KyI6ICIrdC5tZXNzYWdlfSkpLmpvaW4oIiwgIikpO3JldHVybntmaWx0ZXI6ZnVuY3Rpb24odCxyLG4pe3JldHVybiBlLnZhbHVlLmV2YWx1YXRlKHQscix7fSxuKX0sbmVlZEdlb21ldHJ5OmZ1bmN0aW9uIHQoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITE7aWYoIndpdGhpbiI9PT1lWzBdKXJldHVybiEwO2Zvcih2YXIgcj0xO3I8ZS5sZW5ndGg7cisrKWlmKHQoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9KHQpfX1mdW5jdGlvbiBsbih0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiBjbih0KXtpZighdClyZXR1cm4hMDt2YXIgZSxyPXRbMF07cmV0dXJuIHQubGVuZ3RoPD0xPyJhbnkiIT09cjoiPT0iPT09cj91bih0WzFdLHRbMl0sIj09Iik6IiE9Ij09PXI/cG4odW4odFsxXSx0WzJdLCI9PSIpKToiPCI9PT1yfHwiPiI9PT1yfHwiPD0iPT09cnx8Ij49Ij09PXI/dW4odFsxXSx0WzJdLHIpOiJhbnkiPT09cj8oZT10LnNsaWNlKDEpLFsiYW55Il0uY29uY2F0KGUubWFwKGNuKSkpOiJhbGwiPT09cj9bImFsbCJdLmNvbmNhdCh0LnNsaWNlKDEpLm1hcChjbikpOiJub25lIj09PXI/WyJhbGwiXS5jb25jYXQodC5zbGljZSgxKS5tYXAoY24pLm1hcChwbikpOiJpbiI9PT1yP2ZuKHRbMV0sdC5zbGljZSgyKSk6IiFpbiI9PT1yP3BuKGZuKHRbMV0sdC5zbGljZSgyKSkpOiJoYXMiPT09cj9obih0WzFdKToiIWhhcyI9PT1yP3BuKGhuKHRbMV0pKToid2l0aGluIiE9PXJ8fHR9ZnVuY3Rpb24gdW4odCxlLHIpe3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLSIrcixlXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtIityLGVdO2RlZmF1bHQ6cmV0dXJuWyJmaWx0ZXItIityLHQsZV19fWZ1bmN0aW9uIGZuKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiExO3N3aXRjaCh0KXtjYXNlIiR0eXBlIjpyZXR1cm5bImZpbHRlci10eXBlLWluIixbImxpdGVyYWwiLGVdXTtjYXNlIiRpZCI6cmV0dXJuWyJmaWx0ZXItaWQtaW4iLFsibGl0ZXJhbCIsZV1dO2RlZmF1bHQ6cmV0dXJuIGUubGVuZ3RoPjIwMCYmIWUuc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0IT10eXBlb2YgZVswXX0pKT9bImZpbHRlci1pbi1sYXJnZSIsdCxbImxpdGVyYWwiLGUuc29ydChsbildXTpbImZpbHRlci1pbi1zbWFsbCIsdCxbImxpdGVyYWwiLGVdXX19ZnVuY3Rpb24gaG4odCl7c3dpdGNoKHQpe2Nhc2UiJHR5cGUiOnJldHVybiEwO2Nhc2UiJGlkIjpyZXR1cm5bImZpbHRlci1oYXMtaWQiXTtkZWZhdWx0OnJldHVyblsiZmlsdGVyLWhhcyIsdF19fWZ1bmN0aW9uIHBuKHQpe3JldHVyblsiISIsdF19ZnVuY3Rpb24gZG4odCl7cmV0dXJuIGFuKHp0KHQudmFsdWUpKT9ybihJdCh7fSx0LHtleHByZXNzaW9uQ29udGV4dDoiZmlsdGVyIix2YWx1ZVNwZWM6e3ZhbHVlOiJib29sZWFuIn19KSk6ZnVuY3Rpb24gdChlKXt2YXIgcj1lLnZhbHVlLG49ZS5rZXk7aWYoImFycmF5IiE9PUZyKHIpKXJldHVybltuZXcgQ3QobixyLCJhcnJheSBleHBlY3RlZCwgIitGcihyKSsiIGZvdW5kIildO3ZhciBpLGE9ZS5zdHlsZVNwZWMsbz1bXTtpZihyLmxlbmd0aDwxKXJldHVybltuZXcgQ3QobixyLCJmaWx0ZXIgYXJyYXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgZWxlbWVudCIpXTtzd2l0Y2gobz1vLmNvbmNhdChubih7a2V5Om4rIlswXSIsdmFsdWU6clswXSx2YWx1ZVNwZWM6YS5maWx0ZXJfb3BlcmF0b3Isc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSksT3QoclswXSkpe2Nhc2UiPCI6Y2FzZSI8PSI6Y2FzZSI+IjpjYXNlIj49IjpyLmxlbmd0aD49MiYmIiR0eXBlIj09PU90KHJbMV0pJiZvLnB1c2gobmV3IEN0KG4sciwnIiR0eXBlIiBjYW5ub3QgYmUgdXNlIHdpdGggb3BlcmF0b3IgIicrclswXSsnIicpKTtjYXNlIj09IjpjYXNlIiE9IjozIT09ci5sZW5ndGgmJm8ucHVzaChuZXcgQ3QobixyLCdmaWx0ZXIgYXJyYXkgZm9yIG9wZXJhdG9yICInK3JbMF0rJyIgbXVzdCBoYXZlIDMgZWxlbWVudHMnKSk7Y2FzZSJpbiI6Y2FzZSIhaW4iOnIubGVuZ3RoPj0yJiYic3RyaW5nIiE9PShpPUZyKHJbMV0pKSYmby5wdXNoKG5ldyBDdChuKyJbMV0iLHJbMV0sInN0cmluZyBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7Zm9yKHZhciBzPTI7czxyLmxlbmd0aDtzKyspaT1GcihyW3NdKSwiJHR5cGUiPT09T3QoclsxXSk/bz1vLmNvbmNhdChubih7a2V5Om4rIlsiK3MrIl0iLHZhbHVlOnJbc10sdmFsdWVTcGVjOmEuZ2VvbWV0cnlfdHlwZSxzdHlsZTplLnN0eWxlLHN0eWxlU3BlYzplLnN0eWxlU3BlY30pKToic3RyaW5nIiE9PWkmJiJudW1iZXIiIT09aSYmImJvb2xlYW4iIT09aSYmby5wdXNoKG5ldyBDdChuKyJbIitzKyJdIixyW3NdLCJzdHJpbmcsIG51bWJlciwgb3IgYm9vbGVhbiBleHBlY3RlZCwgIitpKyIgZm91bmQiKSk7YnJlYWs7Y2FzZSJhbnkiOmNhc2UiYWxsIjpjYXNlIm5vbmUiOmZvcih2YXIgbD0xO2w8ci5sZW5ndGg7bCsrKW89by5jb25jYXQodCh7a2V5Om4rIlsiK2wrIl0iLHZhbHVlOnJbbF0sc3R5bGU6ZS5zdHlsZSxzdHlsZVNwZWM6ZS5zdHlsZVNwZWN9KSk7YnJlYWs7Y2FzZSJoYXMiOmNhc2UiIWhhcyI6aT1GcihyWzFdKSwyIT09ci5sZW5ndGg/by5wdXNoKG5ldyBDdChuLHIsJ2ZpbHRlciBhcnJheSBmb3IgIicrclswXSsnIiBvcGVyYXRvciBtdXN0IGhhdmUgMiBlbGVtZW50cycpKToic3RyaW5nIiE9PWkmJm8ucHVzaChuZXcgQ3QobisiWzFdIixyWzFdLCJzdHJpbmcgZXhwZWN0ZWQsICIraSsiIGZvdW5kIikpO2JyZWFrO2Nhc2Uid2l0aGluIjppPUZyKHJbMV0pLDIhPT1yLmxlbmd0aD9vLnB1c2gobmV3IEN0KG4sciwnZmlsdGVyIGFycmF5IGZvciAiJytyWzBdKyciIG9wZXJhdG9yIG11c3QgaGF2ZSAyIGVsZW1lbnRzJykpOiJvYmplY3QiIT09aSYmby5wdXNoKG5ldyBDdChuKyJbMV0iLHJbMV0sIm9iamVjdCBleHBlY3RlZCwgIitpKyIgZm91bmQiKSl9cmV0dXJuIG99KHQpfWZ1bmN0aW9uIG1uKHQsZSl7dmFyIHI9dC5rZXksbj10LnN0eWxlLGk9dC5zdHlsZVNwZWMsYT10LnZhbHVlLG89dC5vYmplY3RLZXkscz1pW2UrIl8iK3QubGF5ZXJUeXBlXTtpZighcylyZXR1cm5bXTt2YXIgbD1vLm1hdGNoKC9eKC4qKS10cmFuc2l0aW9uJC8pO2lmKCJwYWludCI9PT1lJiZsJiZzW2xbMV1dJiZzW2xbMV1dLnRyYW5zaXRpb24pcmV0dXJuIGtuKHtrZXk6cix2YWx1ZTphLHZhbHVlU3BlYzppLnRyYW5zaXRpb24sc3R5bGU6bixzdHlsZVNwZWM6aX0pO3ZhciBjLHU9dC52YWx1ZVNwZWN8fHNbb107aWYoIXUpcmV0dXJuW25ldyBDdChyLGEsJ3Vua25vd24gcHJvcGVydHkgIicrbysnIicpXTtpZigic3RyaW5nIj09PUZyKGEpJiZ6cih1KSYmIXUudG9rZW5zJiYoYz0vXnsoW159XSspfSQvLmV4ZWMoYSkpKXJldHVybltuZXcgQ3QocixhLCciJytvKyciIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJwb2xhdGlvbiBzeW50YXhcblVzZSBhbiBpZGVudGl0eSBwcm9wZXJ0eSBmdW5jdGlvbiBpbnN0ZWFkOiBgeyAidHlwZSI6ICJpZGVudGl0eSIsICJwcm9wZXJ0eSI6ICcrSlNPTi5zdHJpbmdpZnkoY1sxXSkrIiB9YC4iKV07dmFyIGY9W107cmV0dXJuInN5bWJvbCI9PT10LmxheWVyVHlwZSYmKCJ0ZXh0LWZpZWxkIj09PW8mJm4mJiFuLmdseXBocyYmZi5wdXNoKG5ldyBDdChyLGEsJ3VzZSBvZiAidGV4dC1maWVsZCIgcmVxdWlyZXMgYSBzdHlsZSAiZ2x5cGhzIiBwcm9wZXJ0eScpKSwidGV4dC1mb250Ij09PW8mJkJyKHp0KGEpKSYmImlkZW50aXR5Ij09PU90KGEudHlwZSkmJmYucHVzaChuZXcgQ3QocixhLCcidGV4dC1mb250IiBkb2VzIG5vdCBzdXBwb3J0IGlkZW50aXR5IGZ1bmN0aW9ucycpKSksZi5jb25jYXQoa24oe2tleTp0LmtleSx2YWx1ZTphLHZhbHVlU3BlYzp1LHN0eWxlOm4sc3R5bGVTcGVjOmksZXhwcmVzc2lvbkNvbnRleHQ6InByb3BlcnR5Iixwcm9wZXJ0eVR5cGU6ZSxwcm9wZXJ0eUtleTpvfSkpfWZ1bmN0aW9uIGduKHQpe3JldHVybiBtbih0LCJwYWludCIpfWZ1bmN0aW9uIHZuKHQpe3JldHVybiBtbih0LCJsYXlvdXQiKX1mdW5jdGlvbiB5bih0KXt2YXIgZT1bXSxyPXQudmFsdWUsbj10LmtleSxpPXQuc3R5bGUsYT10LnN0eWxlU3BlYztyLnR5cGV8fHIucmVmfHxlLnB1c2gobmV3IEN0KG4sciwnZWl0aGVyICJ0eXBlIiBvciAicmVmIiBpcyByZXF1aXJlZCcpKTt2YXIgbyxzPU90KHIudHlwZSksbD1PdChyLnJlZik7aWYoci5pZClmb3IodmFyIGM9T3Qoci5pZCksdT0wO3U8dC5hcnJheUluZGV4O3UrKyl7dmFyIGY9aS5sYXllcnNbdV07T3QoZi5pZCk9PT1jJiZlLnB1c2gobmV3IEN0KG4sci5pZCwnZHVwbGljYXRlIGxheWVyIGlkICInK3IuaWQrJyIsIHByZXZpb3VzbHkgdXNlZCBhdCBsaW5lICcrZi5pZC5fX2xpbmVfXykpfWlmKCJyZWYiaW4gcilbInR5cGUiLCJzb3VyY2UiLCJzb3VyY2UtbGF5ZXIiLCJmaWx0ZXIiLCJsYXlvdXQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJmUucHVzaChuZXcgQ3QobixyW3RdLCciJyt0KyciIGlzIHByb2hpYml0ZWQgZm9yIHJlZiBsYXllcnMnKSl9KSksaS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7T3QodC5pZCk9PT1sJiYobz10KX0pKSxvP28ucmVmP2UucHVzaChuZXcgQ3QobixyLnJlZiwicmVmIGNhbm5vdCByZWZlcmVuY2UgYW5vdGhlciByZWYgbGF5ZXIiKSk6cz1PdChvLnR5cGUpOmUucHVzaChuZXcgQ3QobixyLnJlZiwncmVmIGxheWVyICInK2wrJyIgbm90IGZvdW5kJykpO2Vsc2UgaWYoImJhY2tncm91bmQiIT09cylpZihyLnNvdXJjZSl7dmFyIGg9aS5zb3VyY2VzJiZpLnNvdXJjZXNbci5zb3VyY2VdLHA9aCYmT3QoaC50eXBlKTtoPyJ2ZWN0b3IiPT09cCYmInJhc3RlciI9PT1zP2UucHVzaChuZXcgQ3QobixyLnNvdXJjZSwnbGF5ZXIgIicrci5pZCsnIiByZXF1aXJlcyBhIHJhc3RlciBzb3VyY2UnKSk6InJhc3RlciI9PT1wJiYicmFzdGVyIiE9PXM/ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCdsYXllciAiJytyLmlkKyciIHJlcXVpcmVzIGEgdmVjdG9yIHNvdXJjZScpKToidmVjdG9yIiE9PXB8fHJbInNvdXJjZS1sYXllciJdPyJyYXN0ZXItZGVtIj09PXAmJiJoaWxsc2hhZGUiIT09cz9lLnB1c2gobmV3IEN0KG4sci5zb3VyY2UsInJhc3Rlci1kZW0gc291cmNlIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBsYXllciB0eXBlICdoaWxsc2hhZGUnLiIpKToibGluZSIhPT1zfHwhci5wYWludHx8IXIucGFpbnRbImxpbmUtZ3JhZGllbnQiXXx8Imdlb2pzb24iPT09cCYmaC5saW5lTWV0cmljc3x8ZS5wdXNoKG5ldyBDdChuLHIsJ2xheWVyICInK3IuaWQrJyIgc3BlY2lmaWVzIGEgbGluZS1ncmFkaWVudCwgd2hpY2ggcmVxdWlyZXMgYSBHZW9KU09OIHNvdXJjZSB3aXRoIGBsaW5lTWV0cmljc2AgZW5hYmxlZC4nKSk6ZS5wdXNoKG5ldyBDdChuLHIsJ2xheWVyICInK3IuaWQrJyIgbXVzdCBzcGVjaWZ5IGEgInNvdXJjZS1sYXllciInKSk6ZS5wdXNoKG5ldyBDdChuLHIuc291cmNlLCdzb3VyY2UgIicrci5zb3VyY2UrJyIgbm90IGZvdW5kJykpfWVsc2UgZS5wdXNoKG5ldyBDdChuLHIsJ21pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHkgInNvdXJjZSInKSk7cmV0dXJuIGU9ZS5jb25jYXQoUXIoe2tleTpuLHZhbHVlOnIsdmFsdWVTcGVjOmEubGF5ZXIsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSx0eXBlOmZ1bmN0aW9uKCl7cmV0dXJuIGtuKHtrZXk6bisiLnR5cGUiLHZhbHVlOnIudHlwZSx2YWx1ZVNwZWM6YS5sYXllci50eXBlLHN0eWxlOnQuc3R5bGUsc3R5bGVTcGVjOnQuc3R5bGVTcGVjLG9iamVjdDpyLG9iamVjdEtleToidHlwZSJ9KX0sZmlsdGVyOmRuLGxheW91dDpmdW5jdGlvbih0KXtyZXR1cm4gUXIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gdm4oSXQoe2xheWVyVHlwZTpzfSx0KSl9fX0pfSxwYWludDpmdW5jdGlvbih0KXtyZXR1cm4gUXIoe2xheWVyOnIsa2V5OnQua2V5LHZhbHVlOnQudmFsdWUsc3R5bGU6dC5zdHlsZSxzdHlsZVNwZWM6dC5zdHlsZVNwZWMsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6eyIqIjpmdW5jdGlvbih0KXtyZXR1cm4gZ24oSXQoe2xheWVyVHlwZTpzfSx0KSl9fX0pfX19KSl9ZnVuY3Rpb24geG4odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49RnIoZSk7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgQ3QocixlLCJzdHJpbmcgZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfXZhciBibj17cHJvbW90ZUlkOmZ1bmN0aW9uKHQpe3ZhciBlPXQua2V5LHI9dC52YWx1ZTtpZigic3RyaW5nIj09PUZyKHIpKXJldHVybiB4bih7a2V5OmUsdmFsdWU6cn0pO3ZhciBuPVtdO2Zvcih2YXIgaSBpbiByKW4ucHVzaC5hcHBseShuLHhuKHtrZXk6ZSsiLiIraSx2YWx1ZTpyW2ldfSkpO3JldHVybiBufX07ZnVuY3Rpb24gX24odCl7dmFyIGU9dC52YWx1ZSxyPXQua2V5LG49dC5zdHlsZVNwZWMsaT10LnN0eWxlO2lmKCFlLnR5cGUpcmV0dXJuW25ldyBDdChyLGUsJyJ0eXBlIiBpcyByZXF1aXJlZCcpXTt2YXIgYSxvPU90KGUudHlwZSk7c3dpdGNoKG8pe2Nhc2UidmVjdG9yIjpjYXNlInJhc3RlciI6Y2FzZSJyYXN0ZXItZGVtIjpyZXR1cm4gYT1Rcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6blsic291cmNlXyIrby5yZXBsYWNlKCItIiwiXyIpXSxzdHlsZTp0LnN0eWxlLHN0eWxlU3BlYzpuLG9iamVjdEVsZW1lbnRWYWxpZGF0b3JzOmJufSk7Y2FzZSJnZW9qc29uIjppZihhPVFyKHtrZXk6cix2YWx1ZTplLHZhbHVlU3BlYzpuLnNvdXJjZV9nZW9qc29uLHN0eWxlOmksc3R5bGVTcGVjOm4sb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6Ym59KSxlLmNsdXN0ZXIpZm9yKHZhciBzIGluIGUuY2x1c3RlclByb3BlcnRpZXMpe3ZhciBsPWUuY2x1c3RlclByb3BlcnRpZXNbc10sYz1sWzBdLHU9bFsxXSxmPSJzdHJpbmciPT10eXBlb2YgYz9bYyxbImFjY3VtdWxhdGVkIl0sWyJnZXQiLHNdXTpjO2EucHVzaC5hcHBseShhLHJuKHtrZXk6cisiLiIrcysiLm1hcCIsdmFsdWU6dSxleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1tYXAifSkpLGEucHVzaC5hcHBseShhLHJuKHtrZXk6cisiLiIrcysiLnJlZHVjZSIsdmFsdWU6ZixleHByZXNzaW9uQ29udGV4dDoiY2x1c3Rlci1yZWR1Y2UifSkpfXJldHVybiBhO2Nhc2UidmlkZW8iOnJldHVybiBRcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfdmlkZW8sc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiaW1hZ2UiOnJldHVybiBRcih7a2V5OnIsdmFsdWU6ZSx2YWx1ZVNwZWM6bi5zb3VyY2VfaW1hZ2Usc3R5bGU6aSxzdHlsZVNwZWM6bn0pO2Nhc2UiY2FudmFzIjpyZXR1cm5bbmV3IEN0KHIsbnVsbCwiUGxlYXNlIHVzZSBydW50aW1lIEFQSXMgdG8gYWRkIGNhbnZhcyBzb3VyY2VzLCByYXRoZXIgdGhhbiBpbmNsdWRpbmcgdGhlbSBpbiBzdHlsZXNoZWV0cy4iLCJzb3VyY2UuY2FudmFzIildO2RlZmF1bHQ6cmV0dXJuIG5uKHtrZXk6cisiLnR5cGUiLHZhbHVlOmUudHlwZSx2YWx1ZVNwZWM6e3ZhbHVlczpbInZlY3RvciIsInJhc3RlciIsInJhc3Rlci1kZW0iLCJnZW9qc29uIiwidmlkZW8iLCJpbWFnZSJdfSxzdHlsZTppLHN0eWxlU3BlYzpufSl9fWZ1bmN0aW9uIHduKHQpe3ZhciBlPXQudmFsdWUscj10LnN0eWxlU3BlYyxuPXIubGlnaHQsaT10LnN0eWxlLGE9W10sbz1GcihlKTtpZih2b2lkIDA9PT1lKXJldHVybiBhO2lmKCJvYmplY3QiIT09bylyZXR1cm4gYT1hLmNvbmNhdChbbmV3IEN0KCJsaWdodCIsZSwib2JqZWN0IGV4cGVjdGVkLCAiK28rIiBmb3VuZCIpXSk7Zm9yKHZhciBzIGluIGUpe3ZhciBsPXMubWF0Y2goL14oLiopLXRyYW5zaXRpb24kLyk7YT1sJiZuW2xbMV1dJiZuW2xbMV1dLnRyYW5zaXRpb24/YS5jb25jYXQoa24oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOnIudHJhbnNpdGlvbixzdHlsZTppLHN0eWxlU3BlYzpyfSkpOm5bc10/YS5jb25jYXQoa24oe2tleTpzLHZhbHVlOmVbc10sdmFsdWVTcGVjOm5bc10sc3R5bGU6aSxzdHlsZVNwZWM6cn0pKTphLmNvbmNhdChbbmV3IEN0KHMsZVtzXSwndW5rbm93biBwcm9wZXJ0eSAiJytzKyciJyldKX1yZXR1cm4gYX12YXIgVG49eyIqIjpmdW5jdGlvbigpe3JldHVybltdfSxhcnJheTokcixib29sZWFuOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPUZyKGUpO3JldHVybiJib29sZWFuIiE9PW4/W25ldyBDdChyLGUsImJvb2xlYW4gZXhwZWN0ZWQsICIrbisiIGZvdW5kIildOltdfSxudW1iZXI6dG4sY29sb3I6ZnVuY3Rpb24odCl7dmFyIGU9dC5rZXkscj10LnZhbHVlLG49RnIocik7cmV0dXJuInN0cmluZyIhPT1uP1tuZXcgQ3QoZSxyLCJjb2xvciBleHBlY3RlZCwgIituKyIgZm91bmQiKV06bnVsbD09PSR0KHIpP1tuZXcgQ3QoZSxyLCdjb2xvciBleHBlY3RlZCwgIicrcisnIiBmb3VuZCcpXTpbXX0sY29uc3RhbnRzOlB0LGVudW06bm4sZmlsdGVyOmRuLGZ1bmN0aW9uOmVuLGxheWVyOnluLG9iamVjdDpRcixzb3VyY2U6X24sbGlnaHQ6d24sc3RyaW5nOnhuLGZvcm1hdHRlZDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXhuKHQpLmxlbmd0aD9bXTpybih0KX0scmVzb2x2ZWRJbWFnZTpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXhuKHQpLmxlbmd0aD9bXTpybih0KX19O2Z1bmN0aW9uIGtuKHQpe3ZhciBlPXQudmFsdWUscj10LnZhbHVlU3BlYyxuPXQuc3R5bGVTcGVjO3JldHVybiByLmV4cHJlc3Npb24mJkJyKE90KGUpKT9lbih0KTpyLmV4cHJlc3Npb24mJllyKHp0KGUpKT9ybih0KTpyLnR5cGUmJlRuW3IudHlwZV0/VG5bci50eXBlXSh0KTpRcihJdCh7fSx0LHt2YWx1ZVNwZWM6ci50eXBlP25bci50eXBlXTpyfSkpfWZ1bmN0aW9uIEFuKHQpe3ZhciBlPXQudmFsdWUscj10LmtleSxuPXhuKHQpO3JldHVybiBuLmxlbmd0aHx8KC0xPT09ZS5pbmRleE9mKCJ7Zm9udHN0YWNrfSIpJiZuLnB1c2gobmV3IEN0KHIsZSwnImdseXBocyIgdXJsIG11c3QgaW5jbHVkZSBhICJ7Zm9udHN0YWNrfSIgdG9rZW4nKSksLTE9PT1lLmluZGV4T2YoIntyYW5nZX0iKSYmbi5wdXNoKG5ldyBDdChyLGUsJyJnbHlwaHMiIHVybCBtdXN0IGluY2x1ZGUgYSAie3JhbmdlfSIgdG9rZW4nKSkpLG59ZnVuY3Rpb24gTW4odCxlKXt2b2lkIDA9PT1lJiYoZT1MdCk7dmFyIHI9W107cmV0dXJuIHI9ci5jb25jYXQoa24oe2tleToiIix2YWx1ZTp0LHZhbHVlU3BlYzplLiRyb290LHN0eWxlU3BlYzplLHN0eWxlOnQsb2JqZWN0RWxlbWVudFZhbGlkYXRvcnM6e2dseXBoczpBbiwiKiI6ZnVuY3Rpb24oKXtyZXR1cm5bXX19fSkpLHQuY29uc3RhbnRzJiYocj1yLmNvbmNhdChQdCh7a2V5OiJjb25zdGFudHMiLHZhbHVlOnQuY29uc3RhbnRzLHN0eWxlOnQsc3R5bGVTcGVjOmV9KSkpLFNuKHIpfWZ1bmN0aW9uIFNuKHQpe3JldHVybltdLmNvbmNhdCh0KS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmUtZS5saW5lfSkpfWZ1bmN0aW9uIEVuKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gU24odC5hcHBseSh0aGlzLGUpKX19TW4uc291cmNlPUVuKF9uKSxNbi5saWdodD1Fbih3biksTW4ubGF5ZXI9RW4oeW4pLE1uLmZpbHRlcj1FbihkbiksTW4ucGFpbnRQcm9wZXJ0eT1FbihnbiksTW4ubGF5b3V0UHJvcGVydHk9RW4odm4pO3ZhciBMbj1NbixDbj1Mbi5saWdodCxQbj1Mbi5wYWludFByb3BlcnR5LEluPUxuLmxheW91dFByb3BlcnR5O2Z1bmN0aW9uIE9uKHQsZSl7dmFyIHI9ITE7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciBuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0LmZpcmUobmV3IFN0KG5ldyBFcnJvcihhLm1lc3NhZ2UpKSkscj0hMH1yZXR1cm4gcn12YXIgem49RG47ZnVuY3Rpb24gRG4odCxlLHIpe3ZhciBuPXRoaXMuY2VsbHM9W107aWYodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXt0aGlzLmFycmF5QnVmZmVyPXQ7dmFyIGk9bmV3IEludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcik7dD1pWzBdLGU9aVsxXSxyPWlbMl0sdGhpcy5kPWUrMipyO2Zvcih2YXIgYT0wO2E8dGhpcy5kKnRoaXMuZDthKyspe3ZhciBvPWlbMythXSxzPWlbMythKzFdO24ucHVzaChvPT09cz9udWxsOmkuc3ViYXJyYXkobyxzKSl9dmFyIGw9aVszK24ubGVuZ3RoXSxjPWlbMytuLmxlbmd0aCsxXTt0aGlzLmtleXM9aS5zdWJhcnJheShsLGMpLHRoaXMuYmJveGVzPWkuc3ViYXJyYXkoYyksdGhpcy5pbnNlcnQ9dGhpcy5faW5zZXJ0UmVhZG9ubHl9ZWxzZXt0aGlzLmQ9ZSsyKnI7Zm9yKHZhciB1PTA7dTx0aGlzLmQqdGhpcy5kO3UrKyluLnB1c2goW10pO3RoaXMua2V5cz1bXSx0aGlzLmJib3hlcz1bXX10aGlzLm49ZSx0aGlzLmV4dGVudD10LHRoaXMucGFkZGluZz1yLHRoaXMuc2NhbGU9ZS90LHRoaXMudWlkPTA7dmFyIGY9ci9lKnQ7dGhpcy5taW49LWYsdGhpcy5tYXg9dCtmfURuLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLl9mb3JFYWNoQ2VsbChlLHIsbixpLHRoaXMuX2luc2VydENlbGwsdGhpcy51aWQrKyksdGhpcy5rZXlzLnB1c2godCksdGhpcy5iYm94ZXMucHVzaChlKSx0aGlzLmJib3hlcy5wdXNoKHIpLHRoaXMuYmJveGVzLnB1c2gobiksdGhpcy5iYm94ZXMucHVzaChpKX0sRG4ucHJvdG90eXBlLl9pbnNlcnRSZWFkb25seT1mdW5jdGlvbigpe3Rocm93IkNhbm5vdCBpbnNlcnQgaW50byBhIEdyaWRJbmRleCBjcmVhdGVkIGZyb20gYW4gQXJyYXlCdWZmZXIuIn0sRG4ucHJvdG90eXBlLl9pbnNlcnRDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNlbGxzW2ldLnB1c2goYSl9LERuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXMubWluLG89dGhpcy5tYXg7aWYodDw9YSYmZTw9YSYmbzw9ciYmbzw9biYmIWkpcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMua2V5cyk7dmFyIHM9W107cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKHQsZSxyLG4sdGhpcy5fcXVlcnlDZWxsLHMse30saSksc30sRG4ucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD10aGlzLmNlbGxzW2ldO2lmKG51bGwhPT1sKWZvcih2YXIgYz10aGlzLmtleXMsdT10aGlzLmJib3hlcyxmPTA7ZjxsLmxlbmd0aDtmKyspe3ZhciBoPWxbZl07aWYodm9pZCAwPT09b1toXSl7dmFyIHA9NCpoOyhzP3ModVtwKzBdLHVbcCsxXSx1W3ArMl0sdVtwKzNdKTp0PD11W3ArMl0mJmU8PXVbcCszXSYmcj49dVtwKzBdJiZuPj11W3ArMV0pPyhvW2hdPSEwLGEucHVzaChjW2hdKSk6b1toXT0hMX19fSxEbi5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZCh0KSxjPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChlKSx1PXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChyKSxmPXRoaXMuX2NvbnZlcnRUb0NlbGxDb29yZChuKSxoPWw7aDw9dTtoKyspZm9yKHZhciBwPWM7cDw9ZjtwKyspe3ZhciBkPXRoaXMuZCpwK2g7aWYoKCFzfHxzKHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKGgpLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKHApLHRoaXMuX2NvbnZlcnRGcm9tQ2VsbENvb3JkKGgrMSksdGhpcy5fY29udmVydEZyb21DZWxsQ29vcmQocCsxKSkpJiZpLmNhbGwodGhpcyx0LGUscixuLGQsYSxvLHMpKXJldHVybn19LERuLnByb3RvdHlwZS5fY29udmVydEZyb21DZWxsQ29vcmQ9ZnVuY3Rpb24odCl7cmV0dXJuKHQtdGhpcy5wYWRkaW5nKS90aGlzLnNjYWxlfSxEbi5wcm90b3R5cGUuX2NvbnZlcnRUb0NlbGxDb29yZD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLmQtMSxNYXRoLmZsb29yKHQqdGhpcy5zY2FsZSkrdGhpcy5wYWRkaW5nKSl9LERuLnByb3RvdHlwZS50b0FycmF5QnVmZmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5hcnJheUJ1ZmZlcilyZXR1cm4gdGhpcy5hcnJheUJ1ZmZlcjtmb3IodmFyIHQ9dGhpcy5jZWxscyxlPTMrdGhpcy5jZWxscy5sZW5ndGgrMSsxLHI9MCxuPTA7bjx0aGlzLmNlbGxzLmxlbmd0aDtuKyspcis9dGhpcy5jZWxsc1tuXS5sZW5ndGg7dmFyIGk9bmV3IEludDMyQXJyYXkoZStyK3RoaXMua2V5cy5sZW5ndGgrdGhpcy5iYm94ZXMubGVuZ3RoKTtpWzBdPXRoaXMuZXh0ZW50LGlbMV09dGhpcy5uLGlbMl09dGhpcy5wYWRkaW5nO2Zvcih2YXIgYT1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpWzMrb109YSxpLnNldChzLGEpLGErPXMubGVuZ3RofXJldHVybiBpWzMrdC5sZW5ndGhdPWEsaS5zZXQodGhpcy5rZXlzLGEpLGErPXRoaXMua2V5cy5sZW5ndGgsaVszK3QubGVuZ3RoKzFdPWEsaS5zZXQodGhpcy5iYm94ZXMsYSksYSs9dGhpcy5iYm94ZXMubGVuZ3RoLGkuYnVmZmVyfTt2YXIgUm49c2VsZi5JbWFnZURhdGEsRm49c2VsZi5JbWFnZUJpdG1hcCxCbj17fTtmdW5jdGlvbiBObih0LGUscil7dm9pZCAwPT09ciYmKHI9e30pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfY2xhc3NSZWdpc3RyeUtleSIse3ZhbHVlOnQsd3JpdGVhYmxlOiExfSksQm5bdF09e2tsYXNzOmUsb21pdDpyLm9taXR8fFtdLHNoYWxsb3c6ci5zaGFsbG93fHxbXX19Zm9yKHZhciBqbiBpbiBObigiT2JqZWN0IixPYmplY3QpLHpuLnNlcmlhbGl6ZT1mdW5jdGlvbih0LGUpe3ZhciByPXQudG9BcnJheUJ1ZmZlcigpO3JldHVybiBlJiZlLnB1c2gocikse2J1ZmZlcjpyfX0sem4uZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB6bih0LmJ1ZmZlcil9LE5uKCJHcmlkIix6biksTm4oIkNvbG9yIix0ZSksTm4oIkVycm9yIixFcnJvciksTm4oIlJlc29sdmVkSW1hZ2UiLGllKSxObigiU3R5bGVQcm9wZXJ0eUZ1bmN0aW9uIixLciksTm4oIlN0eWxlRXhwcmVzc2lvbiIsR3Ise29taXQ6WyJfZXZhbHVhdG9yIl19KSxObigiWm9vbURlcGVuZGVudEV4cHJlc3Npb24iLFpyKSxObigiWm9vbUNvbnN0YW50RXhwcmVzc2lvbiIsWHIpLE5uKCJDb21wb3VuZEV4cHJlc3Npb24iLHhlLHtvbWl0OlsiX2V2YWx1YXRlIl19KSxTcilTcltqbl0uX2NsYXNzUmVnaXN0cnlLZXl8fE5uKCJFeHByZXNzaW9uXyIram4sU3Jbam5dKTtmdW5jdGlvbiBVbih0KXtyZXR1cm4gdCYmInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmKHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8dC5jb25zdHJ1Y3RvciYmIkFycmF5QnVmZmVyIj09PXQuY29uc3RydWN0b3IubmFtZSl9ZnVuY3Rpb24gVm4odCl7cmV0dXJuIEZuJiZ0IGluc3RhbmNlb2YgRm59ZnVuY3Rpb24gSG4odCxlKXtpZihudWxsPT10fHwiYm9vbGVhbiI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHR8fCJzdHJpbmciPT10eXBlb2YgdHx8dCBpbnN0YW5jZW9mIEJvb2xlYW58fHQgaW5zdGFuY2VvZiBOdW1iZXJ8fHQgaW5zdGFuY2VvZiBTdHJpbmd8fHQgaW5zdGFuY2VvZiBEYXRlfHx0IGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiB0O2lmKFVuKHQpfHxWbih0KSlyZXR1cm4gZSYmZS5wdXNoKHQpLHQ7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHQpKXt2YXIgcj10O3JldHVybiBlJiZlLnB1c2goci5idWZmZXIpLHJ9aWYodCBpbnN0YW5jZW9mIFJuKXJldHVybiBlJiZlLnB1c2godC5kYXRhLmJ1ZmZlciksdDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIG49W10saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bi5wdXNoKEhuKG8sZSkpfXJldHVybiBufWlmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHM9dC5jb25zdHJ1Y3RvcixsPXMuX2NsYXNzUmVnaXN0cnlLZXk7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzZXJpYWxpemUgb2JqZWN0IG9mIHVucmVnaXN0ZXJlZCBjbGFzcyIpO3ZhciBjPXMuc2VyaWFsaXplP3Muc2VyaWFsaXplKHQsZSk6e307aWYoIXMuc2VyaWFsaXplKXtmb3IodmFyIHUgaW4gdClpZih0Lmhhc093blByb3BlcnR5KHUpJiYhKEJuW2xdLm9taXQuaW5kZXhPZih1KT49MCkpe3ZhciBmPXRbdV07Y1t1XT1CbltsXS5zaGFsbG93LmluZGV4T2YodSk+PTA/ZjpIbihmLGUpfXQgaW5zdGFuY2VvZiBFcnJvciYmKGMubWVzc2FnZT10Lm1lc3NhZ2UpfWlmKGMuJG5hbWUpdGhyb3cgbmV3IEVycm9yKCIkbmFtZSBwcm9wZXJ0eSBpcyByZXNlcnZlZCBmb3Igd29ya2VyIHNlcmlhbGl6YXRpb24gbG9naWMuIik7cmV0dXJuIk9iamVjdCIhPT1sJiYoYy4kbmFtZT1sKSxjfXRocm93IG5ldyBFcnJvcigiY2FuJ3Qgc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfWZ1bmN0aW9uIHFuKHQpe2lmKG51bGw9PXR8fCJib29sZWFuIj09dHlwZW9mIHR8fCJudW1iZXIiPT10eXBlb2YgdHx8InN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQm9vbGVhbnx8dCBpbnN0YW5jZW9mIE51bWJlcnx8dCBpbnN0YW5jZW9mIFN0cmluZ3x8dCBpbnN0YW5jZW9mIERhdGV8fHQgaW5zdGFuY2VvZiBSZWdFeHB8fFVuKHQpfHxWbih0KXx8QXJyYXlCdWZmZXIuaXNWaWV3KHQpfHx0IGluc3RhbmNlb2YgUm4pcmV0dXJuIHQ7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAocW4pO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIGU9dC4kbmFtZXx8Ik9iamVjdCIscj1CbltlXS5rbGFzcztpZighcil0aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIHVucmVnaXN0ZXJlZCBjbGFzcyAiK2UpO2lmKHIuZGVzZXJpYWxpemUpcmV0dXJuIHIuZGVzZXJpYWxpemUodCk7Zm9yKHZhciBuPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLGk9MCxhPU9iamVjdC5rZXlzKHQpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtpZigiJG5hbWUiIT09byl7dmFyIHM9dFtvXTtuW29dPUJuW2VdLnNoYWxsb3cuaW5kZXhPZihvKT49MD9zOnFuKHMpfX1yZXR1cm4gbn10aHJvdyBuZXcgRXJyb3IoImNhbid0IGRlc2VyaWFsaXplIG9iamVjdCBvZiB0eXBlICIrdHlwZW9mIHQpfXZhciBHbj1mdW5jdGlvbigpe3RoaXMuZmlyc3Q9ITB9O0duLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmZsb29yKHQpO3JldHVybiB0aGlzLmZpcnN0Pyh0aGlzLmZpcnN0PSExLHRoaXMubGFzdEludGVnZXJab29tPXIsdGhpcy5sYXN0SW50ZWdlclpvb21UaW1lPTAsdGhpcy5sYXN0Wm9vbT10LHRoaXMubGFzdEZsb29yWm9vbT1yLCEwKToodGhpcy5sYXN0Rmxvb3Jab29tPnI/KHRoaXMubGFzdEludGVnZXJab29tPXIrMSx0aGlzLmxhc3RJbnRlZ2VyWm9vbVRpbWU9ZSk6dGhpcy5sYXN0Rmxvb3Jab29tPHImJih0aGlzLmxhc3RJbnRlZ2VyWm9vbT1yLHRoaXMubGFzdEludGVnZXJab29tVGltZT1lKSx0IT09dGhpcy5sYXN0Wm9vbSYmKHRoaXMubGFzdFpvb209dCx0aGlzLmxhc3RGbG9vclpvb209ciwhMCkpfTt2YXIgWW49eyJMYXRpbi0xIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgmJnQ8PTI1NX0sQXJhYmljOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xNTM2JiZ0PD0xNzkxfSwiQXJhYmljIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xODcyJiZ0PD0xOTE5fSwiQXJhYmljIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMjA4JiZ0PD0yMzAzfSwiSGFuZ3VsIEphbW8iOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzUyJiZ0PD00NjA3fSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTUxMjAmJnQ8PTU3NTl9LEtobWVyOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02MDE2JiZ0PD02MTQzfSwiVW5pZmllZCBDYW5hZGlhbiBBYm9yaWdpbmFsIFN5bGxhYmljcyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTYzMjAmJnQ8PTYzOTl9LCJHZW5lcmFsIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49ODE5MiYmdDw9ODMwM30sIkxldHRlcmxpa2UgU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTg0NDgmJnQ8PTg1Mjd9LCJOdW1iZXIgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04NTI4JiZ0PD04NTkxfSwiTWlzY2VsbGFuZW91cyBUZWNobmljYWwiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj04OTYwJiZ0PD05MjE1fSwiQ29udHJvbCBQaWN0dXJlcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyMTYmJnQ8PTkyNzl9LCJPcHRpY2FsIENoYXJhY3RlciBSZWNvZ25pdGlvbiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTkyODAmJnQ8PTkzMTF9LCJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTMxMiYmdDw9OTQ3MX0sIkdlb21ldHJpYyBTaGFwZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj05NjMyJiZ0PD05NzI3fSwiTWlzY2VsbGFuZW91cyBTeW1ib2xzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49OTcyOCYmdDw9OTk4M30sIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTEwMDgmJnQ8PTExMjYzfSwiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMTkwNCYmdDw9MTIwMzF9LCJLYW5neGkgUmFkaWNhbHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjAzMiYmdDw9MTIyNTV9LCJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyNzImJnQ8PTEyMjg3fSwiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIyODgmJnQ8PTEyMzUxfSxIaXJhZ2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTIzNTImJnQ8PTEyNDQ3fSxLYXRha2FuYTpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI0NDgmJnQ8PTEyNTQzfSxCb3BvbW9mbzpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI1NDQmJnQ8PTEyNTkxfSwiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNTkyJiZ0PD0xMjY4N30sS2FuYnVuOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjY4OCYmdDw9MTI3MDN9LCJCb3BvbW9mbyBFeHRlbmRlZCI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzA0JiZ0PD0xMjczNX0sIkNKSyBTdHJva2VzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49MTI3MzYmJnQ8PTEyNzgzfSwiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEyNzg0JiZ0PD0xMjc5OX0sIkVuY2xvc2VkIENKSyBMZXR0ZXJzIGFuZCBNb250aHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMjgwMCYmdDw9MTMwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEzMDU2JiZ0PD0xMzMxMX0sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMgRXh0ZW5zaW9uIEEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xMzMxMiYmdDw9MTk5MDN9LCJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTE5OTA0JiZ0PD0xOTk2N30sIkNKSyBVbmlmaWVkIElkZW9ncmFwaHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0xOTk2OCYmdDw9NDA5NTl9LCJZaSBTeWxsYWJsZXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MDk2MCYmdDw9NDIxMjd9LCJZaSBSYWRpY2FscyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTQyMTI4JiZ0PD00MjE5MX0sIkhhbmd1bCBKYW1vIEV4dGVuZGVkLUEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj00MzM2MCYmdDw9NDMzOTF9LCJIYW5ndWwgU3lsbGFibGVzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NDQwMzImJnQ8PTU1MjE1fSwiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTU1MjE2JiZ0PD01NTI5NX0sIlByaXZhdGUgVXNlIEFyZWEiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj01NzM0NCYmdDw9NjM3NDN9LCJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjM3NDQmJnQ8PTY0MjU1fSwiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIjpmdW5jdGlvbih0KXtyZXR1cm4gdD49NjQzMzYmJnQ8PTY1MDIzfSwiVmVydGljYWwgRm9ybXMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTA0MCYmdDw9NjUwNTV9LCJDSksgQ29tcGF0aWJpbGl0eSBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MDcyJiZ0PD02NTEwM30sIlNtYWxsIEZvcm0gVmFyaWFudHMiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEwNCYmdDw9NjUxMzV9LCJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUIiOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj02NTEzNiYmdDw9NjUyNzl9LCJIYWxmd2lkdGggYW5kIEZ1bGx3aWR0aCBGb3JtcyI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTY1MjgwJiZ0PD02NTUxOX19O2Z1bmN0aW9uIFduKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKFpuKHJbZV0uY2hhckNvZGVBdCgwKSkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gWG4odCl7cmV0dXJuIVluLkFyYWJpYyh0KSYmKCFZblsiQXJhYmljIFN1cHBsZW1lbnQiXSh0KSYmKCFZblsiQXJhYmljIEV4dGVuZGVkLUEiXSh0KSYmKCFZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1BIl0odCkmJiFZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0odCkpKSl9ZnVuY3Rpb24gWm4odCl7cmV0dXJuIDc0Nj09PXR8fDc0Nz09PXR8fCEodDw0MzUyKSYmKCEhWW5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0odCl8fCghIVluLkJvcG9tb2ZvKHQpfHwoISghWW5bIkNKSyBDb21wYXRpYmlsaXR5IEZvcm1zIl0odCl8fHQ+PTY1MDk3JiZ0PD02NTEwMyl8fCghIVluWyJDSksgQ29tcGF0aWJpbGl0eSBJZGVvZ3JhcGhzIl0odCl8fCghIVluWyJDSksgQ29tcGF0aWJpbGl0eSJdKHQpfHwoISFZblsiQ0pLIFJhZGljYWxzIFN1cHBsZW1lbnQiXSh0KXx8KCEhWW5bIkNKSyBTdHJva2VzIl0odCl8fCghKCFZblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fHQ+PTEyMjk2JiZ0PD0xMjMwNXx8dD49MTIzMDgmJnQ8PTEyMzE5fHwxMjMzNj09PXQpfHwoISFZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHQpfHwoISFZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHQpfHwoISFZblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHQpfHwoISFZblsiSGFuZ3VsIENvbXBhdGliaWxpdHkgSmFtbyJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQSJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8gRXh0ZW5kZWQtQiJdKHQpfHwoISFZblsiSGFuZ3VsIEphbW8iXSh0KXx8KCEhWW5bIkhhbmd1bCBTeWxsYWJsZXMiXSh0KXx8KCEhWW4uSGlyYWdhbmEodCl8fCghIVluWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0odCl8fCghIVluLkthbmJ1bih0KXx8KCEhWW5bIkthbmd4aSBSYWRpY2FscyJdKHQpfHwoISFZblsiS2F0YWthbmEgUGhvbmV0aWMgRXh0ZW5zaW9ucyJdKHQpfHwoISghWW4uS2F0YWthbmEodCl8fDEyNTQwPT09dCl8fCghKCFZblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXSh0KXx8NjUyODg9PT10fHw2NTI4OT09PXR8fDY1MjkzPT09dHx8dD49NjUzMDYmJnQ8PTY1MzEwfHw2NTMzOT09PXR8fDY1MzQxPT09dHx8NjUzNDM9PT10fHx0Pj02NTM3MSYmdDw9NjU1MDN8fDY1NTA3PT09dHx8dD49NjU1MTImJnQ8PTY1NTE5KXx8KCEoIVluWyJTbWFsbCBGb3JtIFZhcmlhbnRzIl0odCl8fHQ+PTY1MTEyJiZ0PD02NTExOHx8dD49NjUxMjMmJnQ8PTY1MTI2KXx8KCEhWW5bIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MiXSh0KXx8KCEhWW5bIlVuaWZpZWQgQ2FuYWRpYW4gQWJvcmlnaW5hbCBTeWxsYWJpY3MgRXh0ZW5kZWQiXSh0KXx8KCEhWW5bIlZlcnRpY2FsIEZvcm1zIl0odCl8fCghIVluWyJZaWppbmcgSGV4YWdyYW0gU3ltYm9scyJdKHQpfHwoISFZblsiWWkgU3lsbGFibGVzIl0odCl8fCEhWW5bIllpIFJhZGljYWxzIl0odCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKX1mdW5jdGlvbiBKbih0KXtyZXR1cm4hKFpuKHQpfHxmdW5jdGlvbih0KXtyZXR1cm4hKCFZblsiTGF0aW4tMSBTdXBwbGVtZW50Il0odCl8fDE2NyE9PXQmJjE2OSE9PXQmJjE3NCE9PXQmJjE3NyE9PXQmJjE4OCE9PXQmJjE4OSE9PXQmJjE5MCE9PXQmJjIxNSE9PXQmJjI0NyE9PXQpfHwoISghWW5bIkdlbmVyYWwgUHVuY3R1YXRpb24iXSh0KXx8ODIxNCE9PXQmJjgyMjQhPT10JiY4MjI1IT09dCYmODI0MCE9PXQmJjgyNDEhPT10JiY4MjUxIT09dCYmODI1MiE9PXQmJjgyNTghPT10JiY4MjYzIT09dCYmODI2NCE9PXQmJjgyNjUhPT10JiY4MjczIT09dCl8fCghIVluWyJMZXR0ZXJsaWtlIFN5bWJvbHMiXSh0KXx8KCEhWW5bIk51bWJlciBGb3JtcyJdKHQpfHwoISghWW5bIk1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIl0odCl8fCEodD49ODk2MCYmdDw9ODk2N3x8dD49ODk3MiYmdDw9ODk5MXx8dD49ODk5NiYmdDw9OWUzfHw5MDAzPT09dHx8dD49OTA4NSYmdDw9OTExNHx8dD49OTE1MCYmdDw9OTE2NXx8OTE2Nz09PXR8fHQ+PTkxNjkmJnQ8PTkxNzl8fHQ+PTkxODYmJnQ8PTkyMTUpKXx8KCEoIVluWyJDb250cm9sIFBpY3R1cmVzIl0odCl8fDkyNTE9PT10KXx8KCEhWW5bIk9wdGljYWwgQ2hhcmFjdGVyIFJlY29nbml0aW9uIl0odCl8fCghIVluWyJFbmNsb3NlZCBBbHBoYW51bWVyaWNzIl0odCl8fCghIVluWyJHZW9tZXRyaWMgU2hhcGVzIl0odCl8fCghKCFZblsiTWlzY2VsbGFuZW91cyBTeW1ib2xzIl0odCl8fHQ+PTk3NTQmJnQ8PTk3NTkpfHwoISghWW5bIk1pc2NlbGxhbmVvdXMgU3ltYm9scyBhbmQgQXJyb3dzIl0odCl8fCEodD49MTEwMjYmJnQ8PTExMDU1fHx0Pj0xMTA4OCYmdDw9MTEwOTd8fHQ+PTExMTkyJiZ0PD0xMTI0MykpfHwoISFZblsiQ0pLIFN5bWJvbHMgYW5kIFB1bmN0dWF0aW9uIl0odCl8fCghIVluLkthdGFrYW5hKHQpfHwoISFZblsiUHJpdmF0ZSBVc2UgQXJlYSJdKHQpfHwoISFZblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXSh0KXx8KCEhWW5bIlNtYWxsIEZvcm0gVmFyaWFudHMiXSh0KXx8KCEhWW5bIkhhbGZ3aWR0aCBhbmQgRnVsbHdpZHRoIEZvcm1zIl0odCl8fCg4NzM0PT09dHx8ODc1Nj09PXR8fDg3NTc9PT10fHx0Pj05OTg0JiZ0PD0xMDA4N3x8dD49MTAxMDImJnQ8PTEwMTMxfHw2NTUzMj09PXR8fDY1NTMzPT09dCkpKSkpKSkpKSkpKSkpKSkpfSh0KSl9ZnVuY3Rpb24gS24odCl7cmV0dXJuIHQ+PTE0MjQmJnQ8PTIzMDN8fFluWyJBcmFiaWMgUHJlc2VudGF0aW9uIEZvcm1zLUEiXSh0KXx8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQiJdKHQpfWZ1bmN0aW9uIFFuKHQsZSl7cmV0dXJuISghZSYmS24odCkpJiYhKHQ+PTIzMDQmJnQ8PTM1ODN8fHQ+PTM4NDAmJnQ8PTQyNTV8fFluLktobWVyKHQpKX1mdW5jdGlvbiAkbih0KXtmb3IodmFyIGU9MCxyPXQ7ZTxyLmxlbmd0aDtlKz0xKXtpZihLbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiEwfXJldHVybiExfXZhciB0aT0iZGVmZXJyZWQiLGVpPSJsb2FkaW5nIixyaT0ibG9hZGVkIixuaT0iZXJyb3IiLGlpPW51bGwsYWk9InVuYXZhaWxhYmxlIixvaT1udWxsLHNpPWZ1bmN0aW9uKHQpe3QmJiJzdHJpbmciPT10eXBlb2YgdCYmdC5pbmRleE9mKCJOZXR3b3JrRXJyb3IiKT4tMSYmKGFpPW5pKSxpaSYmaWkodCl9O2Z1bmN0aW9uIGxpKCl7Y2kuZmlyZShuZXcgTXQoInBsdWdpblN0YXRlQ2hhbmdlIix7cGx1Z2luU3RhdHVzOmFpLHBsdWdpblVSTDpvaX0pKX12YXIgY2k9bmV3IEV0LHVpPWZ1bmN0aW9uKCl7cmV0dXJuIGFpfSxmaT1mdW5jdGlvbigpe2lmKGFpIT09dGl8fCFvaSl0aHJvdyBuZXcgRXJyb3IoInJ0bC10ZXh0LXBsdWdpbiBjYW5ub3QgYmUgZG93bmxvYWRlZCB1bmxlc3MgYSBwbHVnaW5VUkwgaXMgc3BlY2lmaWVkIik7YWk9ZWksbGkoKSxvaSYmeHQoe3VybDpvaX0sKGZ1bmN0aW9uKHQpe3Q/c2kodCk6KGFpPXJpLGxpKCkpfSkpfSxoaT17YXBwbHlBcmFiaWNTaGFwaW5nOm51bGwscHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0Om51bGwscHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0Om51bGwsaXNMb2FkZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gYWk9PT1yaXx8bnVsbCE9aGkuYXBwbHlBcmFiaWNTaGFwaW5nfSxpc0xvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gYWk9PT1laX0sc2V0U3RhdGU6ZnVuY3Rpb24odCl7YWk9dC5wbHVnaW5TdGF0dXMsb2k9dC5wbHVnaW5VUkx9LGlzUGFyc2VkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPWhpLmFwcGx5QXJhYmljU2hhcGluZyYmbnVsbCE9aGkucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0JiZudWxsIT1oaS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9LGdldFBsdWdpblVSTDpmdW5jdGlvbigpe3JldHVybiBvaX19LHBpPWZ1bmN0aW9uKHQsZSl7dGhpcy56b29tPXQsZT8odGhpcy5ub3c9ZS5ub3csdGhpcy5mYWRlRHVyYXRpb249ZS5mYWRlRHVyYXRpb24sdGhpcy56b29tSGlzdG9yeT1lLnpvb21IaXN0b3J5LHRoaXMudHJhbnNpdGlvbj1lLnRyYW5zaXRpb24pOih0aGlzLm5vdz0wLHRoaXMuZmFkZUR1cmF0aW9uPTAsdGhpcy56b29tSGlzdG9yeT1uZXcgR24sdGhpcy50cmFuc2l0aW9uPXt9KX07cGkucHJvdG90eXBlLmlzU3VwcG9ydGVkU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe2lmKCFRbihuW3JdLmNoYXJDb2RlQXQoMCksZSkpcmV0dXJuITF9cmV0dXJuITB9KHQsaGkuaXNMb2FkZWQoKSl9LHBpLnByb3RvdHlwZS5jcm9zc0ZhZGluZ0ZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5mYWRlRHVyYXRpb24/MTpNYXRoLm1pbigodGhpcy5ub3ctdGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb21UaW1lKS90aGlzLmZhZGVEdXJhdGlvbiwxKX0scGkucHJvdG90eXBlLmdldENyb3NzZmFkZVBhcmFtZXRlcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnpvb20sZT10LU1hdGguZmxvb3IodCkscj10aGlzLmNyb3NzRmFkaW5nRmFjdG9yKCk7cmV0dXJuIHQ+dGhpcy56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb21TY2FsZToyLHRvU2NhbGU6MSx0OmUrKDEtZSkqcn06e2Zyb21TY2FsZTouNSx0b1NjYWxlOjEsdDoxLSgxLXIpKmV9fTt2YXIgZGk9ZnVuY3Rpb24odCxlKXt0aGlzLnByb3BlcnR5PXQsdGhpcy52YWx1ZT1lLHRoaXMuZXhwcmVzc2lvbj1mdW5jdGlvbih0LGUpe2lmKEJyKHQpKXJldHVybiBuZXcgS3IodCxlKTtpZihZcih0KSl7dmFyIHI9SnIodCxlKTtpZigiZXJyb3IiPT09ci5yZXN1bHQpdGhyb3cgbmV3IEVycm9yKHIudmFsdWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXkrIjogIit0Lm1lc3NhZ2V9KSkuam9pbigiLCAiKSk7cmV0dXJuIHIudmFsdWV9dmFyIG49dDtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiJjb2xvciI9PT1lLnR5cGUmJihuPXRlLnBhcnNlKHQpKSx7a2luZDoiY29uc3RhbnQiLGV2YWx1YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59fX0odm9pZCAwPT09ZT90LnNwZWNpZmljYXRpb24uZGVmYXVsdDplLHQuc3BlY2lmaWNhdGlvbil9O2RpLnByb3RvdHlwZS5pc0RhdGFEcml2ZW49ZnVuY3Rpb24oKXtyZXR1cm4ic291cmNlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfHwiY29tcG9zaXRlIj09PXRoaXMuZXhwcmVzc2lvbi5raW5kfSxkaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMucHJvcGVydHkucG9zc2libHlFdmFsdWF0ZSh0aGlzLHQsZSxyKX07dmFyIG1pPWZ1bmN0aW9uKHQpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPW5ldyBkaSh0LHZvaWQgMCl9O21pLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IHZpKHRoaXMucHJvcGVydHksdGhpcy52YWx1ZSxlLHUoe30sdC50cmFuc2l0aW9uLHRoaXMudHJhbnNpdGlvbiksdC5ub3cpfSxtaS5wcm90b3R5cGUudW50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHZpKHRoaXMucHJvcGVydHksdGhpcy52YWx1ZSxudWxsLHt9LDApfTt2YXIgZ2k9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXMpfTtnaS5wcm90b3R5cGUuZ2V0VmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIHgodGhpcy5fdmFsdWVzW3RdLnZhbHVlLnZhbHVlKX0sZ2kucHJvdG90eXBlLnNldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsdWVzLmhhc093blByb3BlcnR5KHQpfHwodGhpcy5fdmFsdWVzW3RdPW5ldyBtaSh0aGlzLl92YWx1ZXNbdF0ucHJvcGVydHkpKSx0aGlzLl92YWx1ZXNbdF0udmFsdWU9bmV3IGRpKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSxudWxsPT09ZT92b2lkIDA6eChlKSl9LGdpLnByb3RvdHlwZS5nZXRUcmFuc2l0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS50cmFuc2l0aW9uKX0sZ2kucHJvdG90eXBlLnNldFRyYW5zaXRpb249ZnVuY3Rpb24odCxlKXt0aGlzLl92YWx1ZXMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLl92YWx1ZXNbdF09bmV3IG1pKHRoaXMuX3ZhbHVlc1t0XS5wcm9wZXJ0eSkpLHRoaXMuX3ZhbHVlc1t0XS50cmFuc2l0aW9uPXgoZSl8fHZvaWQgMH0sZ2kucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSk7dmFyIGE9dGhpcy5nZXRUcmFuc2l0aW9uKG4pO3ZvaWQgMCE9PWEmJih0W24rIi10cmFuc2l0aW9uIl09YSl9cmV0dXJuIHR9LGdpLnByb3RvdHlwZS50cmFuc2l0aW9uZWQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IHlpKHRoaXMuX3Byb3BlcnRpZXMpLG49MCxpPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3IuX3ZhbHVlc1thXT10aGlzLl92YWx1ZXNbYV0udHJhbnNpdGlvbmVkKHQsZS5fdmFsdWVzW2FdKX1yZXR1cm4gcn0sZ2kucHJvdG90eXBlLnVudHJhbnNpdGlvbmVkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyB5aSh0aGlzLl9wcm9wZXJ0aWVzKSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXTt0Ll92YWx1ZXNbbl09dGhpcy5fdmFsdWVzW25dLnVudHJhbnNpdGlvbmVkKCl9cmV0dXJuIHR9O3ZhciB2aT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMucHJvcGVydHk9dCx0aGlzLnZhbHVlPWUsdGhpcy5iZWdpbj1pK24uZGVsYXl8fDAsdGhpcy5lbmQ9dGhpcy5iZWdpbituLmR1cmF0aW9ufHwwLHQuc3BlY2lmaWNhdGlvbi50cmFuc2l0aW9uJiYobi5kZWxheXx8bi5kdXJhdGlvbikmJih0aGlzLnByaW9yPXIpfTt2aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5ub3d8fDAsaT10aGlzLnZhbHVlLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpLGE9dGhpcy5wcmlvcjtpZihhKXtpZihuPnRoaXMuZW5kKXJldHVybiB0aGlzLnByaW9yPW51bGwsaTtpZih0aGlzLnZhbHVlLmlzRGF0YURyaXZlbigpKXJldHVybiB0aGlzLnByaW9yPW51bGwsaTtpZihuPHRoaXMuYmVnaW4pcmV0dXJuIGEucG9zc2libHlFdmFsdWF0ZSh0LGUscik7dmFyIG89KG4tdGhpcy5iZWdpbikvKHRoaXMuZW5kLXRoaXMuYmVnaW4pO3JldHVybiB0aGlzLnByb3BlcnR5LmludGVycG9sYXRlKGEucG9zc2libHlFdmFsdWF0ZSh0LGUsciksaSxmdW5jdGlvbih0KXtpZih0PD0wKXJldHVybiAwO2lmKHQ+PTEpcmV0dXJuIDE7dmFyIGU9dCp0LHI9ZSp0O3JldHVybiA0Kih0PC41P3I6MyoodC1lKStyLS43NSl9KG8pKX1yZXR1cm4gaX07dmFyIHlpPWZ1bmN0aW9uKHQpe3RoaXMuX3Byb3BlcnRpZXM9dCx0aGlzLl92YWx1ZXM9T2JqZWN0LmNyZWF0ZSh0LmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXMpfTt5aS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPW5ldyBfaSh0aGlzLl9wcm9wZXJ0aWVzKSxpPTAsYT1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTtuLl92YWx1ZXNbb109dGhpcy5fdmFsdWVzW29dLnBvc3NpYmx5RXZhbHVhdGUodCxlLHIpfXJldHVybiBufSx5aS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9T2JqZWN0LmtleXModGhpcy5fdmFsdWVzKTt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07aWYodGhpcy5fdmFsdWVzW3JdLnByaW9yKXJldHVybiEwfXJldHVybiExfTt2YXIgeGk9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFByb3BlcnR5VmFsdWVzKX07eGkucHJvdG90eXBlLmdldFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB4KHRoaXMuX3ZhbHVlc1t0XS52YWx1ZSl9LHhpLnByb3RvdHlwZS5zZXRWYWx1ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ZhbHVlc1t0XT1uZXcgZGkodGhpcy5fdmFsdWVzW3RdLnByb3BlcnR5LG51bGw9PT1lP3ZvaWQgMDp4KGUpKX0seGkucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe2Zvcih2YXIgdD17fSxlPTAscj1PYmplY3Qua2V5cyh0aGlzLl92YWx1ZXMpO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPXRoaXMuZ2V0VmFsdWUobik7dm9pZCAwIT09aSYmKHRbbl09aSl9cmV0dXJuIHR9LHhpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49bmV3IF9pKHRoaXMuX3Byb3BlcnRpZXMpLGk9MCxhPU9iamVjdC5rZXlzKHRoaXMuX3ZhbHVlcyk7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO24uX3ZhbHVlc1tvXT10aGlzLl92YWx1ZXNbb10ucG9zc2libHlFdmFsdWF0ZSh0LGUscil9cmV0dXJuIG59O3ZhciBiaT1mdW5jdGlvbih0LGUscil7dGhpcy5wcm9wZXJ0eT10LHRoaXMudmFsdWU9ZSx0aGlzLnBhcmFtZXRlcnM9cn07YmkucHJvdG90eXBlLmlzQ29uc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4iY29uc3RhbnQiPT09dGhpcy52YWx1ZS5raW5kfSxiaS5wcm90b3R5cGUuY29uc3RhbnRPcj1mdW5jdGlvbih0KXtyZXR1cm4iY29uc3RhbnQiPT09dGhpcy52YWx1ZS5raW5kP3RoaXMudmFsdWUudmFsdWU6dH0sYmkucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnByb3BlcnR5LmV2YWx1YXRlKHRoaXMudmFsdWUsdGhpcy5wYXJhbWV0ZXJzLHQsZSxyLG4pfTt2YXIgX2k9ZnVuY3Rpb24odCl7dGhpcy5fcHJvcGVydGllcz10LHRoaXMuX3ZhbHVlcz1PYmplY3QuY3JlYXRlKHQuZGVmYXVsdFBvc3NpYmx5RXZhbHVhdGVkVmFsdWVzKX07X2kucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsdWVzW3RdfTt2YXIgd2k9ZnVuY3Rpb24odCl7dGhpcy5zcGVjaWZpY2F0aW9uPXR9O3dpLnByb3RvdHlwZS5wb3NzaWJseUV2YWx1YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlKX0sd2kucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1HZVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bih0LGUscik6dH07dmFyIFRpPWZ1bmN0aW9uKHQsZSl7dGhpcy5zcGVjaWZpY2F0aW9uPXQsdGhpcy5vdmVycmlkZXM9ZX07VGkucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuImNvbnN0YW50Ij09PXQuZXhwcmVzc2lvbi5raW5kfHwiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kP25ldyBiaSh0aGlzLHtraW5kOiJjb25zdGFudCIsdmFsdWU6dC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pfSxlKTpuZXcgYmkodGhpcyx0LmV4cHJlc3Npb24sZSl9LFRpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0LGUscil7aWYoImNvbnN0YW50IiE9PXQudmFsdWUua2luZHx8ImNvbnN0YW50IiE9PWUudmFsdWUua2luZClyZXR1cm4gdDtpZih2b2lkIDA9PT10LnZhbHVlLnZhbHVlfHx2b2lkIDA9PT1lLnZhbHVlLnZhbHVlKXJldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnZvaWQgMH0sdC5wYXJhbWV0ZXJzKTt2YXIgbj1HZVt0aGlzLnNwZWNpZmljYXRpb24udHlwZV07cmV0dXJuIG4/bmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpuKHQudmFsdWUudmFsdWUsZS52YWx1ZS52YWx1ZSxyKX0sdC5wYXJhbWV0ZXJzKTp0fSxUaS5wcm90b3R5cGUuZXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiJjb25zdGFudCI9PT10LmtpbmQ/dC52YWx1ZTp0LmV2YWx1YXRlKGUscixuLGksYSl9O3ZhciBraT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09dC52YWx1ZSlyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTp2b2lkIDB9LGUpO2lmKCJjb25zdGFudCI9PT10LmV4cHJlc3Npb24ua2luZCl7dmFyIGk9dC5leHByZXNzaW9uLmV2YWx1YXRlKGUsbnVsbCx7fSxyLG4pLGE9InJlc29sdmVkSW1hZ2UiPT09dC5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUmJiJzdHJpbmciIT10eXBlb2YgaT9pLm5hbWU6aSxvPXRoaXMuX2NhbGN1bGF0ZShhLGEsYSxlKTtyZXR1cm4gbmV3IGJpKHRoaXMse2tpbmQ6ImNvbnN0YW50Iix2YWx1ZTpvfSxlKX1pZigiY2FtZXJhIj09PXQuZXhwcmVzc2lvbi5raW5kKXt2YXIgcz10aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbS0xfSksdC5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOmUuem9vbX0pLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTplLnpvb20rMX0pLGUpO3JldHVybiBuZXcgYmkodGhpcyx7a2luZDoiY29uc3RhbnQiLHZhbHVlOnN9LGUpfXJldHVybiBuZXcgYmkodGhpcyx0LmV4cHJlc3Npb24sZSl9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtpZigic291cmNlIj09PXQua2luZCl7dmFyIG89dC5ldmFsdWF0ZShlLHIsbixpLGEpO3JldHVybiB0aGlzLl9jYWxjdWxhdGUobyxvLG8sZSl9cmV0dXJuImNvbXBvc2l0ZSI9PT10LmtpbmQ/dGhpcy5fY2FsY3VsYXRlKHQuZXZhbHVhdGUoe3pvb206TWF0aC5mbG9vcihlLnpvb20pLTF9LHIsbiksdC5ldmFsdWF0ZSh7em9vbTpNYXRoLmZsb29yKGUuem9vbSl9LHIsbiksdC5ldmFsdWF0ZSh7em9vbTpNYXRoLmZsb29yKGUuem9vbSkrMX0scixuKSxlKTp0LnZhbHVlfSxlLnByb3RvdHlwZS5fY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuLnpvb20+bi56b29tSGlzdG9yeS5sYXN0SW50ZWdlclpvb20/e2Zyb206dCx0bzplfTp7ZnJvbTpyLHRvOmV9fSxlLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZX0oVGkpLEFpPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtBaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDAhPT10LnZhbHVlKXtpZigiY29uc3RhbnQiPT09dC5leHByZXNzaW9uLmtpbmQpe3ZhciBpPXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKTtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlKGksaSxpLGUpfXJldHVybiB0aGlzLl9jYWxjdWxhdGUodC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaShNYXRoLmZsb29yKGUuem9vbS0xKSxlKSksdC5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaShNYXRoLmZsb29yKGUuem9vbSksZSkpLHQuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoTWF0aC5mbG9vcihlLnpvb20rMSksZSkpLGUpfX0sQWkucHJvdG90eXBlLl9jYWxjdWxhdGU9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG4uem9vbT5uLnpvb21IaXN0b3J5Lmxhc3RJbnRlZ2VyWm9vbT97ZnJvbTp0LHRvOmV9Ontmcm9tOnIsdG86ZX19LEFpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdH07dmFyIE1pPWZ1bmN0aW9uKHQpe3RoaXMuc3BlY2lmaWNhdGlvbj10fTtNaS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXQuZXhwcmVzc2lvbi5ldmFsdWF0ZShlLG51bGwse30scixuKX0sTWkucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKCl7cmV0dXJuITF9O3ZhciBTaT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5wcm9wZXJ0aWVzPXQsdGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0VHJhbnNpdGlvbmFibGVQcm9wZXJ0eVZhbHVlcz17fSx0aGlzLmRlZmF1bHRUcmFuc2l0aW9uaW5nUHJvcGVydHlWYWx1ZXM9e30sdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXM9e30sdGhpcy5vdmVycmlkYWJsZVByb3BlcnRpZXM9W10sdCl7dmFyIHI9dFtlXTtyLnNwZWNpZmljYXRpb24ub3ZlcnJpZGFibGUmJnRoaXMub3ZlcnJpZGFibGVQcm9wZXJ0aWVzLnB1c2goZSk7dmFyIG49dGhpcy5kZWZhdWx0UHJvcGVydHlWYWx1ZXNbZV09bmV3IGRpKHIsdm9pZCAwKSxpPXRoaXMuZGVmYXVsdFRyYW5zaXRpb25hYmxlUHJvcGVydHlWYWx1ZXNbZV09bmV3IG1pKHIpO3RoaXMuZGVmYXVsdFRyYW5zaXRpb25pbmdQcm9wZXJ0eVZhbHVlc1tlXT1pLnVudHJhbnNpdGlvbmVkKCksdGhpcy5kZWZhdWx0UG9zc2libHlFdmFsdWF0ZWRWYWx1ZXNbZV09bi5wb3NzaWJseUV2YWx1YXRlKHt9KX19O05uKCJEYXRhRHJpdmVuUHJvcGVydHkiLFRpKSxObigiRGF0YUNvbnN0YW50UHJvcGVydHkiLHdpKSxObigiQ3Jvc3NGYWRlZERhdGFEcml2ZW5Qcm9wZXJ0eSIsa2kpLE5uKCJDcm9zc0ZhZGVkUHJvcGVydHkiLEFpKSxObigiQ29sb3JSYW1wUHJvcGVydHkiLE1pKTt2YXIgRWk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe2lmKHQuY2FsbCh0aGlzKSx0aGlzLmlkPWUuaWQsdGhpcy50eXBlPWUudHlwZSx0aGlzLl9mZWF0dXJlRmlsdGVyPXtmaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbmVlZEdlb21ldHJ5OiExfSwiY3VzdG9tIiE9PWUudHlwZSYmKGU9ZSx0aGlzLm1ldGFkYXRhPWUubWV0YWRhdGEsdGhpcy5taW56b29tPWUubWluem9vbSx0aGlzLm1heHpvb209ZS5tYXh6b29tLCJiYWNrZ3JvdW5kIiE9PWUudHlwZSYmKHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMuc291cmNlTGF5ZXI9ZVsic291cmNlLWxheWVyIl0sdGhpcy5maWx0ZXI9ZS5maWx0ZXIpLHIubGF5b3V0JiYodGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQ9bmV3IHhpKHIubGF5b3V0KSksci5wYWludCkpe2Zvcih2YXIgbiBpbiB0aGlzLl90cmFuc2l0aW9uYWJsZVBhaW50PW5ldyBnaShyLnBhaW50KSxlLnBhaW50KXRoaXMuc2V0UGFpbnRQcm9wZXJ0eShuLGUucGFpbnRbbl0se3ZhbGlkYXRlOiExfSk7Zm9yKHZhciBpIGluIGUubGF5b3V0KXRoaXMuc2V0TGF5b3V0UHJvcGVydHkoaSxlLmxheW91dFtpXSx7dmFsaWRhdGU6ITF9KTt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC51bnRyYW5zaXRpb25lZCgpLHRoaXMucGFpbnQ9bmV3IF9pKHIucGFpbnQpfX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0Q3Jvc3NmYWRlUGFyYW1ldGVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcm9zc2ZhZGVQYXJhbWV0ZXJzfSxlLnByb3RvdHlwZS5nZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4idmlzaWJpbGl0eSI9PT10P3RoaXMudmlzaWJpbGl0eTp0aGlzLl91bmV2YWx1YXRlZExheW91dC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXImJihyPXt9KSxudWxsIT1lKXt2YXIgbj0ibGF5ZXJzLiIrdGhpcy5pZCsiLmxheW91dC4iK3Q7aWYodGhpcy5fdmFsaWRhdGUoSW4sbix0LGUscikpcmV0dXJufSJ2aXNpYmlsaXR5IiE9PXQ/dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuc2V0VmFsdWUodCxlKTp0aGlzLnZpc2liaWxpdHk9ZX0sZS5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0KXtyZXR1cm4gZyh0LCItdHJhbnNpdGlvbiIpP3RoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuZ2V0VHJhbnNpdGlvbih0LnNsaWNlKDAsLSItdHJhbnNpdGlvbiIubGVuZ3RoKSk6dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5nZXRWYWx1ZSh0KX0sZS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9e30pLG51bGwhPWUpe3ZhciBuPSJsYXllcnMuIit0aGlzLmlkKyIucGFpbnQuIit0O2lmKHRoaXMuX3ZhbGlkYXRlKFBuLG4sdCxlLHIpKXJldHVybiExfWlmKGcodCwiLXRyYW5zaXRpb24iKSlyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRUcmFuc2l0aW9uKHQuc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGV8fHZvaWQgMCksITE7dmFyIGk9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzW3RdLGE9ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWkucHJvcGVydHkuc3BlY2lmaWNhdGlvblsicHJvcGVydHktdHlwZSJdLG89aS52YWx1ZS5pc0RhdGFEcml2ZW4oKSxzPWkudmFsdWU7dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5zZXRWYWx1ZSh0LGUpLHRoaXMuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlKHQpO3ZhciBsPXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1t0XS52YWx1ZTtyZXR1cm4gbC5pc0RhdGFEcml2ZW4oKXx8b3x8YXx8dGhpcy5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlKHQscyxsKX0sZS5wcm90b3R5cGUuX2hhbmRsZVNwZWNpYWxQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQpe30sZS5wcm90b3R5cGUuX2hhbmRsZU92ZXJyaWRhYmxlUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKHQpe3JldHVybiEhKHRoaXMubWluem9vbSYmdDx0aGlzLm1pbnpvb20pfHwoISEodGhpcy5tYXh6b29tJiZ0Pj10aGlzLm1heHpvb20pfHwibm9uZSI9PT10aGlzLnZpc2liaWxpdHkpfSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC50cmFuc2l0aW9uZWQodCx0aGlzLl90cmFuc2l0aW9uaW5nUGFpbnQpfSxlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5oYXNUcmFuc2l0aW9uKCl9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKHQsZSl7dC5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzJiYodGhpcy5fY3Jvc3NmYWRlUGFyYW1ldGVycz10LmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSksdGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJih0aGlzLmxheW91dD10aGlzLl91bmV2YWx1YXRlZExheW91dC5wb3NzaWJseUV2YWx1YXRlKHQsdm9pZCAwLGUpKSx0aGlzLnBhaW50PXRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5wb3NzaWJseUV2YWx1YXRlKHQsdm9pZCAwLGUpfSxlLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXt2YXIgdD17aWQ6dGhpcy5pZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5zb3VyY2UsInNvdXJjZS1sYXllciI6dGhpcy5zb3VyY2VMYXllcixtZXRhZGF0YTp0aGlzLm1ldGFkYXRhLG1pbnpvb206dGhpcy5taW56b29tLG1heHpvb206dGhpcy5tYXh6b29tLGZpbHRlcjp0aGlzLmZpbHRlcixsYXlvdXQ6dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQmJnRoaXMuX3VuZXZhbHVhdGVkTGF5b3V0LnNlcmlhbGl6ZSgpLHBhaW50OnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQmJnRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuc2VyaWFsaXplKCl9O3JldHVybiB0aGlzLnZpc2liaWxpdHkmJih0LmxheW91dD10LmxheW91dHx8e30sdC5sYXlvdXQudmlzaWJpbGl0eT10aGlzLnZpc2liaWxpdHkpLHkodCwoZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMD09PXR8fCJsYXlvdXQiPT09ZSYmIU9iamVjdC5rZXlzKHQpLmxlbmd0aHx8InBhaW50Ij09PWUmJiFPYmplY3Qua2V5cyh0KS5sZW5ndGgpfSkpfSxlLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gdm9pZCAwPT09aSYmKGk9e30pLCghaXx8ITEhPT1pLnZhbGlkYXRlKSYmT24odGhpcyx0LmNhbGwoTG4se2tleTplLGxheWVyVHlwZTp0aGlzLnR5cGUsb2JqZWN0S2V5OnIsdmFsdWU6bixzdHlsZVNwZWM6THQsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9fSkpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLmlzVGlsZUNsaXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt9LGUucHJvdG90eXBlLmlzU3RhdGVEZXBlbmRlbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5wYWludC5fdmFsdWVzKXt2YXIgZT10aGlzLnBhaW50LmdldCh0KTtpZihlIGluc3RhbmNlb2YgYmkmJnpyKGUucHJvcGVydHkuc3BlY2lmaWNhdGlvbikmJigoInNvdXJjZSI9PT1lLnZhbHVlLmtpbmR8fCJjb21wb3NpdGUiPT09ZS52YWx1ZS5raW5kKSYmZS52YWx1ZS5pc1N0YXRlRGVwZW5kZW50KSlyZXR1cm4hMH1yZXR1cm4hMX0sZX0oRXQpLExpPXtJbnQ4OkludDhBcnJheSxVaW50ODpVaW50OEFycmF5LEludDE2OkludDE2QXJyYXksVWludDE2OlVpbnQxNkFycmF5LEludDMyOkludDMyQXJyYXksVWludDMyOlVpbnQzMkFycmF5LEZsb2F0MzI6RmxvYXQzMkFycmF5fSxDaT1mdW5jdGlvbih0LGUpe3RoaXMuX3N0cnVjdEFycmF5PXQsdGhpcy5fcG9zMT1lKnRoaXMuc2l6ZSx0aGlzLl9wb3MyPXRoaXMuX3BvczEvMix0aGlzLl9wb3M0PXRoaXMuX3BvczEvNCx0aGlzLl9wb3M4PXRoaXMuX3BvczEvOH0sUGk9ZnVuY3Rpb24oKXt0aGlzLmlzVHJhbnNmZXJyZWQ9ITEsdGhpcy5jYXBhY2l0eT0tMSx0aGlzLnJlc2l6ZSgwKX07ZnVuY3Rpb24gSWkodCxlKXt2b2lkIDA9PT1lJiYoZT0xKTt2YXIgcj0wLG49MDtyZXR1cm57bWVtYmVyczp0Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGksYT0oaT10LnR5cGUsTGlbaV0uQllURVNfUEVSX0VMRU1FTlQpLG89cj1PaShyLE1hdGgubWF4KGUsYSkpLHM9dC5jb21wb25lbnRzfHwxO3JldHVybiBuPU1hdGgubWF4KG4sYSkscis9YSpzLHtuYW1lOnQubmFtZSx0eXBlOnQudHlwZSxjb21wb25lbnRzOnMsb2Zmc2V0Om99fSkpLHNpemU6T2kocixNYXRoLm1heChuLGUpKSxhbGlnbm1lbnQ6ZX19ZnVuY3Rpb24gT2kodCxlKXtyZXR1cm4gTWF0aC5jZWlsKHQvZSkqZX1QaS5zZXJpYWxpemU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fdHJpbSgpLGUmJih0LmlzVHJhbnNmZXJyZWQ9ITAsZS5wdXNoKHQuYXJyYXlCdWZmZXIpKSx7bGVuZ3RoOnQubGVuZ3RoLGFycmF5QnVmZmVyOnQuYXJyYXlCdWZmZXJ9fSxQaS5kZXNlcmlhbGl6ZT1mdW5jdGlvbih0KXt2YXIgZT1PYmplY3QuY3JlYXRlKHRoaXMucHJvdG90eXBlKTtyZXR1cm4gZS5hcnJheUJ1ZmZlcj10LmFycmF5QnVmZmVyLGUubGVuZ3RoPXQubGVuZ3RoLGUuY2FwYWNpdHk9dC5hcnJheUJ1ZmZlci5ieXRlTGVuZ3RoL2UuYnl0ZXNQZXJFbGVtZW50LGUuX3JlZnJlc2hWaWV3cygpLGV9LFBpLnByb3RvdHlwZS5fdHJpbT1mdW5jdGlvbigpe3RoaXMubGVuZ3RoIT09dGhpcy5jYXBhY2l0eSYmKHRoaXMuY2FwYWNpdHk9dGhpcy5sZW5ndGgsdGhpcy5hcnJheUJ1ZmZlcj10aGlzLmFycmF5QnVmZmVyLnNsaWNlKDAsdGhpcy5sZW5ndGgqdGhpcy5ieXRlc1BlckVsZW1lbnQpLHRoaXMuX3JlZnJlc2hWaWV3cygpKX0sUGkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5sZW5ndGg9MH0sUGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLnJlc2VydmUodCksdGhpcy5sZW5ndGg9dH0sUGkucHJvdG90eXBlLnJlc2VydmU9ZnVuY3Rpb24odCl7aWYodD50aGlzLmNhcGFjaXR5KXt0aGlzLmNhcGFjaXR5PU1hdGgubWF4KHQsTWF0aC5mbG9vcig1KnRoaXMuY2FwYWNpdHkpLDEyOCksdGhpcy5hcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5jYXBhY2l0eSp0aGlzLmJ5dGVzUGVyRWxlbWVudCk7dmFyIGU9dGhpcy51aW50ODt0aGlzLl9yZWZyZXNoVmlld3MoKSxlJiZ0aGlzLnVpbnQ4LnNldChlKX19LFBpLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfcmVmcmVzaFZpZXdzKCkgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIGNvbmNyZXRlIFN0cnVjdEFycmF5IGxheW91dCIpfTt2YXIgemk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy5pbnQxNltuKzBdPWUsdGhpcy5pbnQxNltuKzFdPXIsdH0sZX0oUGkpO3ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQyaTQiLHppKTt2YXIgRGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTQqdDtyZXR1cm4gdGhpcy5pbnQxNlthKzBdPWUsdGhpcy5pbnQxNlthKzFdPXIsdGhpcy5pbnQxNlthKzJdPW4sdGhpcy5pbnQxNlthKzNdPWksdH0sZX0oUGkpO0RpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQ0aTgiLERpKTt2YXIgUmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG8rMSksdGhpcy5lbXBsYWNlKG8sdCxlLHIsbixpLGEpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzPTYqdDtyZXR1cm4gdGhpcy5pbnQxNltzKzBdPWUsdGhpcy5pbnQxNltzKzFdPXIsdGhpcy5pbnQxNltzKzJdPW4sdGhpcy5pbnQxNltzKzNdPWksdGhpcy5pbnQxNltzKzRdPWEsdGhpcy5pbnQxNltzKzVdPW8sdH0sZX0oUGkpO1JpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0aTEyIixSaSk7dmFyIEZpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShvKzEpLHRoaXMuZW1wbGFjZShvLHQsZSxyLG4saSxhKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz00KnQsbD04KnQ7cmV0dXJuIHRoaXMuaW50MTZbcyswXT1lLHRoaXMuaW50MTZbcysxXT1yLHRoaXMudWludDhbbCs0XT1uLHRoaXMudWludDhbbCs1XT1pLHRoaXMudWludDhbbCs2XT1hLHRoaXMudWludDhbbCs3XT1vLHR9LGV9KFBpKTtGaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTgsTm4oIlN0cnVjdEFycmF5TGF5b3V0Mmk0dWI4IixGaSk7dmFyIEJpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUodSsxKSx0aGlzLmVtcGxhY2UodSx0LGUscixuLGksYSxvLHMsbCxjKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPTkqdCxoPTE4KnQ7cmV0dXJuIHRoaXMudWludDE2W2YrMF09ZSx0aGlzLnVpbnQxNltmKzFdPXIsdGhpcy51aW50MTZbZisyXT1uLHRoaXMudWludDE2W2YrM109aSx0aGlzLnVpbnQxNltmKzRdPWEsdGhpcy51aW50MTZbZis1XT1vLHRoaXMudWludDE2W2YrNl09cyx0aGlzLnVpbnQxNltmKzddPWwsdGhpcy51aW50OFtoKzE2XT1jLHRoaXMudWludDhbaCsxN109dSx0fSxlfShQaSk7QmkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xOCxObigiU3RydWN0QXJyYXlMYXlvdXQ4dWkydWIxOCIsQmkpO3ZhciBOaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7dmFyIGg9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGgrMSksdGhpcy5lbXBsYWNlKGgsdCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwPTEyKnQ7cmV0dXJuIHRoaXMuaW50MTZbcCswXT1lLHRoaXMuaW50MTZbcCsxXT1yLHRoaXMuaW50MTZbcCsyXT1uLHRoaXMuaW50MTZbcCszXT1pLHRoaXMudWludDE2W3ArNF09YSx0aGlzLnVpbnQxNltwKzVdPW8sdGhpcy51aW50MTZbcCs2XT1zLHRoaXMudWludDE2W3ArN109bCx0aGlzLmludDE2W3ArOF09Yyx0aGlzLmludDE2W3ArOV09dSx0aGlzLmludDE2W3ArMTBdPWYsdGhpcy5pbnQxNltwKzExXT1oLHR9LGV9KFBpKTtOaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTI0LE5uKCJTdHJ1Y3RBcnJheUxheW91dDRpNHVpNGkyNCIsTmkpO3ZhciBqaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5mbG9hdDMyW2krMF09ZSx0aGlzLmZsb2F0MzJbaSsxXT1yLHRoaXMuZmxvYXQzMltpKzJdPW4sdH0sZX0oUGkpO2ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTIsTm4oIlN0cnVjdEFycmF5TGF5b3V0M2YxMiIsamkpO3ZhciBVaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMudWludDMyW3IrMF09ZSx0fSxlfShQaSk7VWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDF1bDQiLFVpKTt2YXIgVmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDMyPW5ldyBVaW50MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoYysxKSx0aGlzLmVtcGxhY2UoYyx0LGUscixuLGksYSxvLHMsbCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyl7dmFyIHU9MTAqdCxmPTUqdDtyZXR1cm4gdGhpcy5pbnQxNlt1KzBdPWUsdGhpcy5pbnQxNlt1KzFdPXIsdGhpcy5pbnQxNlt1KzJdPW4sdGhpcy5pbnQxNlt1KzNdPWksdGhpcy5pbnQxNlt1KzRdPWEsdGhpcy5pbnQxNlt1KzVdPW8sdGhpcy51aW50MzJbZiszXT1zLHRoaXMudWludDE2W3UrOF09bCx0aGlzLnVpbnQxNlt1KzldPWMsdH0sZX0oUGkpO1ZpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MjAsTm4oIlN0cnVjdEFycmF5TGF5b3V0NmkxdWwydWkyMCIsVmkpO3ZhciBIaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUobysxKSx0aGlzLmVtcGxhY2Uobyx0LGUscixuLGksYSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9Nip0O3JldHVybiB0aGlzLmludDE2W3MrMF09ZSx0aGlzLmludDE2W3MrMV09cix0aGlzLmludDE2W3MrMl09bix0aGlzLmludDE2W3MrM109aSx0aGlzLmludDE2W3MrNF09YSx0aGlzLmludDE2W3MrNV09byx0fSxlfShQaSk7SGkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQyaTJpMmkxMiIsSGkpO3ZhciBxaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuaW50MTY9bmV3IEludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGErMSksdGhpcy5lbXBsYWNlKGEsdCxlLHIsbixpKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89NCp0LHM9OCp0O3JldHVybiB0aGlzLmZsb2F0MzJbbyswXT1lLHRoaXMuZmxvYXQzMltvKzFdPXIsdGhpcy5mbG9hdDMyW28rMl09bix0aGlzLmludDE2W3MrNl09aSx0aGlzLmludDE2W3MrN109YSx0fSxlfShQaSk7cWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xNixObigiU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNiIscWkpO3ZhciBHaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLl9yZWZyZXNoVmlld3M9ZnVuY3Rpb24oKXt0aGlzLnVpbnQ4PW5ldyBVaW50OEFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxlbmd0aDtyZXR1cm4gdGhpcy5yZXNpemUoaSsxKSx0aGlzLmVtcGxhY2UoaSx0LGUscixuKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPTEyKnQsbz0zKnQ7cmV0dXJuIHRoaXMudWludDhbYSswXT1lLHRoaXMudWludDhbYSsxXT1yLHRoaXMuZmxvYXQzMltvKzFdPW4sdGhpcy5mbG9hdDMyW28rMl09aSx0fSxlfShQaSk7R2kucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD0xMixObigiU3RydWN0QXJyYXlMYXlvdXQydWIyZjEyIixHaSk7dmFyIFlpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy51aW50MTZbaSswXT1lLHRoaXMudWludDE2W2krMV09cix0aGlzLnVpbnQxNltpKzJdPW4sdH0sZX0oUGkpO1lpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixObigiU3RydWN0QXJyYXlMYXlvdXQzdWk2IixZaSk7dmFyIFdpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5pbnQxNj1uZXcgSW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MzI9bmV3IFVpbnQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMuZmxvYXQzMj1uZXcgRmxvYXQzMkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtLGcpe3ZhciB2PXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZSh2KzEpLHRoaXMuZW1wbGFjZSh2LHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnLHYpe3ZhciB5PTI0KnQseD0xMip0LGI9NDgqdDtyZXR1cm4gdGhpcy5pbnQxNlt5KzBdPWUsdGhpcy5pbnQxNlt5KzFdPXIsdGhpcy51aW50MTZbeSsyXT1uLHRoaXMudWludDE2W3krM109aSx0aGlzLnVpbnQzMlt4KzJdPWEsdGhpcy51aW50MzJbeCszXT1vLHRoaXMudWludDMyW3grNF09cyx0aGlzLnVpbnQxNlt5KzEwXT1sLHRoaXMudWludDE2W3krMTFdPWMsdGhpcy51aW50MTZbeSsxMl09dSx0aGlzLmZsb2F0MzJbeCs3XT1mLHRoaXMuZmxvYXQzMlt4KzhdPWgsdGhpcy51aW50OFtiKzM2XT1wLHRoaXMudWludDhbYiszN109ZCx0aGlzLnVpbnQ4W2IrMzhdPW0sdGhpcy51aW50MzJbeCsxMF09Zyx0aGlzLmludDE2W3krMjJdPXYsdH0sZX0oUGkpO1dpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NDgsTm4oIlN0cnVjdEFycmF5TGF5b3V0MmkydWkzdWwzdWkyZjN1YjF1bDFpNDgiLFdpKTt2YXIgWGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpLHRoaXMudWludDE2PW5ldyBVaW50MTZBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMpe3ZhciBFPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShFKzEpLHRoaXMuZW1wbGFjZShFLHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRSl7dmFyIEw9MzQqdCxDPTE3KnQ7cmV0dXJuIHRoaXMuaW50MTZbTCswXT1lLHRoaXMuaW50MTZbTCsxXT1yLHRoaXMuaW50MTZbTCsyXT1uLHRoaXMuaW50MTZbTCszXT1pLHRoaXMuaW50MTZbTCs0XT1hLHRoaXMuaW50MTZbTCs1XT1vLHRoaXMuaW50MTZbTCs2XT1zLHRoaXMuaW50MTZbTCs3XT1sLHRoaXMudWludDE2W0wrOF09Yyx0aGlzLnVpbnQxNltMKzldPXUsdGhpcy51aW50MTZbTCsxMF09Zix0aGlzLnVpbnQxNltMKzExXT1oLHRoaXMudWludDE2W0wrMTJdPXAsdGhpcy51aW50MTZbTCsxM109ZCx0aGlzLnVpbnQxNltMKzE0XT1tLHRoaXMudWludDE2W0wrMTVdPWcsdGhpcy51aW50MTZbTCsxNl09dix0aGlzLnVpbnQxNltMKzE3XT15LHRoaXMudWludDE2W0wrMThdPXgsdGhpcy51aW50MTZbTCsxOV09Yix0aGlzLnVpbnQxNltMKzIwXT1fLHRoaXMudWludDE2W0wrMjFdPXcsdGhpcy51aW50MTZbTCsyMl09VCx0aGlzLnVpbnQzMltDKzEyXT1rLHRoaXMuZmxvYXQzMltDKzEzXT1BLHRoaXMuZmxvYXQzMltDKzE0XT1NLHRoaXMuZmxvYXQzMltDKzE1XT1TLHRoaXMuZmxvYXQzMltDKzE2XT1FLHR9LGV9KFBpKTtYaS5wcm90b3R5cGUuYnl0ZXNQZXJFbGVtZW50PTY4LE5uKCJTdHJ1Y3RBcnJheUxheW91dDhpMTV1aTF1bDRmNjgiLFhpKTt2YXIgWmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGUrMSksdGhpcy5lbXBsYWNlKGUsdCl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj0xKnQ7cmV0dXJuIHRoaXMuZmxvYXQzMltyKzBdPWUsdH0sZX0oUGkpO1ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NCxObigiU3RydWN0QXJyYXlMYXlvdXQxZjQiLFppKTt2YXIgSmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmludDE2PW5ldyBJbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTMqdDtyZXR1cm4gdGhpcy5pbnQxNltpKzBdPWUsdGhpcy5pbnQxNltpKzFdPXIsdGhpcy5pbnQxNltpKzJdPW4sdH0sZX0oUGkpO0ppLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9NixObigiU3RydWN0QXJyYXlMYXlvdXQzaTYiLEppKTt2YXIgS2k9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQzMj1uZXcgVWludDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKG4rMSksdGhpcy5lbXBsYWNlKG4sdCxlLHIpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPTIqdCxhPTQqdDtyZXR1cm4gdGhpcy51aW50MzJbaSswXT1lLHRoaXMudWludDE2W2ErMl09cix0aGlzLnVpbnQxNlthKzNdPW4sdH0sZX0oUGkpO0tpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQxdWwydWk4IixLaSk7dmFyIFFpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy51aW50MTY9bmV3IFVpbnQxNkFycmF5KHRoaXMuYXJyYXlCdWZmZXIpfSxlLnByb3RvdHlwZS5lbXBsYWNlQmFjaz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShyKzEpLHRoaXMuZW1wbGFjZShyLHQsZSl9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdDtyZXR1cm4gdGhpcy51aW50MTZbbiswXT1lLHRoaXMudWludDE2W24rMV09cix0fSxlfShQaSk7UWkucHJvdG90eXBlLmJ5dGVzUGVyRWxlbWVudD00LE5uKCJTdHJ1Y3RBcnJheUxheW91dDJ1aTQiLFFpKTt2YXIgJGk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLnVpbnQxNj1uZXcgVWludDE2QXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoO3JldHVybiB0aGlzLnJlc2l6ZShlKzEpLHRoaXMuZW1wbGFjZShlLHQpfSxlLnByb3RvdHlwZS5lbXBsYWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MSp0O3JldHVybiB0aGlzLnVpbnQxNltyKzBdPWUsdH0sZX0oUGkpOyRpLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MixObigiU3RydWN0QXJyYXlMYXlvdXQxdWkyIiwkaSk7dmFyIHRhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX3JlZnJlc2hWaWV3cz1mdW5jdGlvbigpe3RoaXMudWludDg9bmV3IFVpbnQ4QXJyYXkodGhpcy5hcnJheUJ1ZmZlciksdGhpcy5mbG9hdDMyPW5ldyBGbG9hdDMyQXJyYXkodGhpcy5hcnJheUJ1ZmZlcil9LGUucHJvdG90eXBlLmVtcGxhY2VCYWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKHIrMSksdGhpcy5lbXBsYWNlKHIsdCxlKX0sZS5wcm90b3R5cGUuZW1wbGFjZT1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0O3JldHVybiB0aGlzLmZsb2F0MzJbbiswXT1lLHRoaXMuZmxvYXQzMltuKzFdPXIsdH0sZX0oUGkpO3RhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9OCxObigiU3RydWN0QXJyYXlMYXlvdXQyZjgiLHRhKTt2YXIgZWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fcmVmcmVzaFZpZXdzPWZ1bmN0aW9uKCl7dGhpcy51aW50OD1uZXcgVWludDhBcnJheSh0aGlzLmFycmF5QnVmZmVyKSx0aGlzLmZsb2F0MzI9bmV3IEZsb2F0MzJBcnJheSh0aGlzLmFycmF5QnVmZmVyKX0sZS5wcm90b3R5cGUuZW1wbGFjZUJhY2s9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5sZW5ndGg7cmV0dXJuIHRoaXMucmVzaXplKGkrMSksdGhpcy5lbXBsYWNlKGksdCxlLHIsbil9LGUucHJvdG90eXBlLmVtcGxhY2U9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT00KnQ7cmV0dXJuIHRoaXMuZmxvYXQzMlthKzBdPWUsdGhpcy5mbG9hdDMyW2ErMV09cix0aGlzLmZsb2F0MzJbYSsyXT1uLHRoaXMuZmxvYXQzMlthKzNdPWksdH0sZX0oUGkpO2VhLnByb3RvdHlwZS5ieXRlc1BlckVsZW1lbnQ9MTYsTm4oIlN0cnVjdEFycmF5TGF5b3V0NGYxNiIsZWEpO3ZhciByYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWU7dmFyIHI9e2FuY2hvclBvaW50WDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JQb2ludFk6e2NvbmZpZ3VyYWJsZTohMH0seDE6e2NvbmZpZ3VyYWJsZTohMH0seTE6e2NvbmZpZ3VyYWJsZTohMH0seDI6e2NvbmZpZ3VyYWJsZTohMH0seTI6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYW5jaG9yUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmFuY2hvclBvaW50WC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMiswXX0sci5hbmNob3JQb2ludFkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIueDEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIueTEuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrM119LHIueDIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIueTIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5zb3VyY2VMYXllckluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMis4XX0sci5idWNrZXRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOV19LHIuYW5jaG9yUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKHRoaXMuYW5jaG9yUG9pbnRYLHRoaXMuYW5jaG9yUG9pbnRZKX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZS5wcm90b3R5cGUsciksZX0oQ2kpO3JhLnByb3RvdHlwZS5zaXplPTIwO3ZhciBuYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHJhKHRoaXMsdCl9LGV9KFZpKTtObigiQ29sbGlzaW9uQm94QXJyYXkiLG5hKTt2YXIgaWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXthbmNob3JYOntjb25maWd1cmFibGU6ITB9LGFuY2hvclk6e2NvbmZpZ3VyYWJsZTohMH0sZ2x5cGhTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUdseXBoczp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0ZXhTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LGxpbmVTdGFydEluZGV4Ontjb25maWd1cmFibGU6ITB9LGxpbmVMZW5ndGg6e2NvbmZpZ3VyYWJsZTohMH0sc2VnbWVudDp7Y29uZmlndXJhYmxlOiEwfSxsb3dlclNpemU6e2NvbmZpZ3VyYWJsZTohMH0sdXBwZXJTaXplOntjb25maWd1cmFibGU6ITB9LGxpbmVPZmZzZXRYOntjb25maWd1cmFibGU6ITB9LGxpbmVPZmZzZXRZOntjb25maWd1cmFibGU6ITB9LHdyaXRpbmdNb2RlOntjb25maWd1cmFibGU6ITB9LHBsYWNlZE9yaWVudGF0aW9uOntjb25maWd1cmFibGU6ITB9LGhpZGRlbjp7Y29uZmlndXJhYmxlOiEwfSxjcm9zc1RpbGVJRDp7Y29uZmlndXJhYmxlOiEwfSxhc3NvY2lhdGVkSWNvbkluZGV4Ontjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIuZ2x5cGhTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyXX0sci5udW1HbHlwaHMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxyLnZlcnRleFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzJdfSxyLmxpbmVTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCszXX0sci5saW5lTGVuZ3RoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MzJbdGhpcy5fcG9zNCs0XX0sci5zZWdtZW50LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMF19LHIubG93ZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMV19LHIudXBwZXJTaXplLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxMl19LHIubGluZU9mZnNldFguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmZsb2F0MzJbdGhpcy5fcG9zNCs3XX0sci5saW5lT2Zmc2V0WS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuZmxvYXQzMlt0aGlzLl9wb3M0KzhdfSxyLndyaXRpbmdNb2RlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM2XX0sci5wbGFjZWRPcmllbnRhdGlvbi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDhbdGhpcy5fcG9zMSszN119LHIucGxhY2VkT3JpZW50YXRpb24uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzddPXR9LHIuaGlkZGVuLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50OFt0aGlzLl9wb3MxKzM4XX0sci5oaWRkZW4uc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cnVjdEFycmF5LnVpbnQ4W3RoaXMuX3BvczErMzhdPXR9LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEwXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTBdPXR9LHIuYXNzb2NpYXRlZEljb25JbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkuaW50MTZbdGhpcy5fcG9zMisyMl19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KENpKTtpYS5wcm90b3R5cGUuc2l6ZT00ODt2YXIgYWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpYSh0aGlzLHQpfSxlfShXaSk7Tm4oIlBsYWNlZFN5bWJvbEFycmF5IixhYSk7dmFyIG9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17YW5jaG9yWDp7Y29uZmlndXJhYmxlOiEwfSxhbmNob3JZOntjb25maWd1cmFibGU6ITB9LHJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LGNlbnRlckp1c3RpZmllZFRleHRTeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxsZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Ontjb25maWd1cmFibGU6ITB9LHBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSx2ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleDp7Y29uZmlndXJhYmxlOiEwfSxrZXk6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxUZXh0Qm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0saWNvbkJveEVuZEluZGV4Ontjb25maWd1cmFibGU6ITB9LHZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljYWxJY29uQm94RW5kSW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LG51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzOntjb25maWd1cmFibGU6ITB9LG51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlczp7Y29uZmlndXJhYmxlOiEwfSxudW1JY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sbnVtVmVydGljYWxJY29uVmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXM6e2NvbmZpZ3VyYWJsZTohMH0sY3Jvc3NUaWxlSUQ6e2NvbmZpZ3VyYWJsZTohMH0sdGV4dEJveFNjYWxlOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQwOntjb25maWd1cmFibGU6ITB9LHRleHRPZmZzZXQxOntjb25maWd1cmFibGU6ITB9LGNvbGxpc2lvbkNpcmNsZURpYW1ldGVyOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gci5hbmNob3JYLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzBdfSxyLmFuY2hvclkuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMV19LHIucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrMl19LHIuY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzNdfSxyLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNF19LHIudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LmludDE2W3RoaXMuX3BvczIrNV19LHIucGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzZdfSxyLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5pbnQxNlt0aGlzLl9wb3MyKzddfSxyLmtleS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrOF19LHIudGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzldfSxyLnRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTBdfSxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzExXX0sci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTJdfSxyLmljb25Cb3hTdGFydEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxM119LHIuaWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNF19LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMTVdfSxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxNl19LHIuZmVhdHVyZUluZGV4LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisxN119LHIubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE4XX0sci5udW1WZXJ0aWNhbEdseXBoVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzE5XX0sci5udW1JY29uVmVydGljZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzIwXX0sci5udW1WZXJ0aWNhbEljb25WZXJ0aWNlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMjFdfSxyLnVzZVJ1bnRpbWVDb2xsaXNpb25DaXJjbGVzLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS51aW50MTZbdGhpcy5fcG9zMisyMl19LHIuY3Jvc3NUaWxlSUQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQzMlt0aGlzLl9wb3M0KzEyXX0sci5jcm9zc1RpbGVJRC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMTJdPXR9LHIudGV4dEJveFNjYWxlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTNdfSxyLnRleHRPZmZzZXQwLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTRdfSxyLnRleHRPZmZzZXQxLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTVdfSxyLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdHJ1Y3RBcnJheS5mbG9hdDMyW3RoaXMuX3BvczQrMTZdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7b2EucHJvdG90eXBlLnNpemU9Njg7dmFyIHNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgb2EodGhpcyx0KX0sZX0oWGkpO05uKCJTeW1ib2xJbnN0YW5jZUFycmF5IixzYSk7dmFyIGxhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0b2Zmc2V0WD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mbG9hdDMyWzEqdCswXX0sZX0oWmkpO05uKCJHbHlwaE9mZnNldEFycmF5IixsYSk7dmFyIGNhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0eD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMF19LGUucHJvdG90eXBlLmdldHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW50MTZbMyp0KzFdfSxlLnByb3RvdHlwZS5nZXR0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbnQxNlszKnQrMl19LGV9KEppKTtObigiU3ltYm9sTGluZVZlcnRleEFycmF5IixjYSk7dmFyIHVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX10JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZTt2YXIgcj17ZmVhdHVyZUluZGV4Ontjb25maWd1cmFibGU6ITB9LHNvdXJjZUxheWVySW5kZXg6e2NvbmZpZ3VyYWJsZTohMH0sYnVja2V0SW5kZXg6e2NvbmZpZ3VyYWJsZTohMH19O3JldHVybiByLmZlYXR1cmVJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDMyW3RoaXMuX3BvczQrMF19LHIuc291cmNlTGF5ZXJJbmRleC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RydWN0QXJyYXkudWludDE2W3RoaXMuX3BvczIrMl19LHIuYnVja2V0SW5kZXguZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0cnVjdEFycmF5LnVpbnQxNlt0aGlzLl9wb3MyKzNdfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSxyKSxlfShDaSk7dWEucHJvdG90eXBlLnNpemU9ODt2YXIgZmE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1YSh0aGlzLHQpfSxlfShLaSk7Tm4oIkZlYXR1cmVJbmRleEFycmF5IixmYSk7dmFyIGhhPUlpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLHBhPWZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQmJih0PVtdKSx0aGlzLnNlZ21lbnRzPXR9O2Z1bmN0aW9uIGRhKHQsZSl7cmV0dXJuIDI1NioodD1sKE1hdGguZmxvb3IodCksMCwyNTUpKSsoZT1sKE1hdGguZmxvb3IoZSksMCwyNTUpKX1wYS5wcm90b3R5cGUucHJlcGFyZVNlZ21lbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5zZWdtZW50c1t0aGlzLnNlZ21lbnRzLmxlbmd0aC0xXTtyZXR1cm4gdD5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmXygiTWF4IHZlcnRpY2VzIHBlciBzZWdtZW50IGlzICIrcGEuTUFYX1ZFUlRFWF9BUlJBWV9MRU5HVEgrIjogYnVja2V0IHJlcXVlc3RlZCAiK3QpLCghaXx8aS52ZXJ0ZXhMZW5ndGgrdD5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSHx8aS5zb3J0S2V5IT09bikmJihpPXt2ZXJ0ZXhPZmZzZXQ6ZS5sZW5ndGgscHJpbWl0aXZlT2Zmc2V0OnIubGVuZ3RoLHZlcnRleExlbmd0aDowLHByaW1pdGl2ZUxlbmd0aDowfSx2b2lkIDAhPT1uJiYoaS5zb3J0S2V5PW4pLHRoaXMuc2VnbWVudHMucHVzaChpKSksaX0scGEucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlZ21lbnRzfSxwYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9dGhpcy5zZWdtZW50czt0PGUubGVuZ3RoO3QrPTEpe3ZhciByPWVbdF07Zm9yKHZhciBuIGluIHIudmFvcylyLnZhb3Nbbl0uZGVzdHJveSgpfX0scGEuc2ltcGxlU2VnbWVudD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IHBhKFt7dmVydGV4T2Zmc2V0OnQscHJpbWl0aXZlT2Zmc2V0OmUsdmVydGV4TGVuZ3RoOnIscHJpbWl0aXZlTGVuZ3RoOm4sdmFvczp7fSxzb3J0S2V5OjB9XSl9LHBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIPU1hdGgucG93KDIsMTYpLTEsTm4oIlNlZ21lbnRWZWN0b3IiLHBhKTt2YXIgbWE9SWkoW3tuYW1lOiJhX3BhdHRlcm5fZnJvbSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BhdHRlcm5fdG8iLGNvbXBvbmVudHM6NCx0eXBlOiJVaW50MTYifSx7bmFtZToiYV9waXhlbF9yYXRpb19mcm9tIixjb21wb25lbnRzOjEsdHlwZToiVWludDgifSx7bmFtZToiYV9waXhlbF9yYXRpb190byIsY29tcG9uZW50czoxLHR5cGU6IlVpbnQ4In1dKSxnYT1lKChmdW5jdGlvbih0KXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHMsbCxjO2ZvcihyPTMmdC5sZW5ndGgsbj10Lmxlbmd0aC1yLGk9ZSxvPTM0MzI5MTgzNTMscz00NjE4NDU5MDcsYz0wO2M8bjspbD0yNTUmdC5jaGFyQ29kZUF0KGMpfCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDw4fCgyNTUmdC5jaGFyQ29kZUF0KCsrYykpPDwxNnwoMjU1JnQuY2hhckNvZGVBdCgrK2MpKTw8MjQsKytjLGk9Mjc0OTIrKDY1NTM1JihhPTUqKDY1NTM1JihpPShpXj1sPSg2NTUzNSYobD0obD0oNjU1MzUmbCkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTUpPDwxM3xpPj4+MTkpKSsoKDUqKGk+Pj4xNikmNjU1MzUpPDwxNikmNDI5NDk2NzI5NSkpKygoNTg5NjQrKGE+Pj4xNikmNjU1MzUpPDwxNik7c3dpdGNoKGw9MCxyKXtjYXNlIDM6bF49KDI1NSZ0LmNoYXJDb2RlQXQoYysyKSk8PDE2O2Nhc2UgMjpsXj0oMjU1JnQuY2hhckNvZGVBdChjKzEpKTw8ODtjYXNlIDE6aV49bD0oNjU1MzUmKGw9KGw9KDY1NTM1JihsXj0yNTUmdC5jaGFyQ29kZUF0KGMpKSkqbysoKChsPj4+MTYpKm8mNjU1MzUpPDwxNikmNDI5NDk2NzI5NSk8PDE1fGw+Pj4xNykpKnMrKCgobD4+PjE2KSpzJjY1NTM1KTw8MTYpJjQyOTQ5NjcyOTV9cmV0dXJuIGlePXQubGVuZ3RoLGk9MjI0NjgyMjUwNyooNjU1MzUmKGlePWk+Pj4xNikpKygoMjI0NjgyMjUwNyooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LGk9MzI2NjQ4OTkwOSooNjU1MzUmKGlePWk+Pj4xMykpKygoMzI2NjQ4OTkwOSooaT4+PjE2KSY2NTUzNSk8PDE2KSY0Mjk0OTY3Mjk1LChpXj1pPj4+MTYpPj4+MH19KSksdmE9ZSgoZnVuY3Rpb24odCl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1lXm4sYT0wO24+PTQ7KXI9MTU0MDQ4MzQ3NyooNjU1MzUmKHI9MjU1JnQuY2hhckNvZGVBdChhKXwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8OHwoMjU1JnQuY2hhckNvZGVBdCgrK2EpKTw8MTZ8KDI1NSZ0LmNoYXJDb2RlQXQoKythKSk8PDI0KSkrKCgxNTQwNDgzNDc3KihyPj4+MTYpJjY1NTM1KTw8MTYpLGk9MTU0MDQ4MzQ3NyooNjU1MzUmaSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpXihyPTE1NDA0ODM0NzcqKDY1NTM1JihyXj1yPj4+MjQpKSsoKDE1NDA0ODM0NzcqKHI+Pj4xNikmNjU1MzUpPDwxNikpLG4tPTQsKythO3N3aXRjaChuKXtjYXNlIDM6aV49KDI1NSZ0LmNoYXJDb2RlQXQoYSsyKSk8PDE2O2Nhc2UgMjppXj0oMjU1JnQuY2hhckNvZGVBdChhKzEpKTw8ODtjYXNlIDE6aT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49MjU1JnQuY2hhckNvZGVBdChhKSkpKygoMTU0MDQ4MzQ3NyooaT4+PjE2KSY2NTUzNSk8PDE2KX1yZXR1cm4gaT0xNTQwNDgzNDc3Kig2NTUzNSYoaV49aT4+PjEzKSkrKCgxNTQwNDgzNDc3KihpPj4+MTYpJjY1NTM1KTw8MTYpLChpXj1pPj4+MTUpPj4+MH19KSkseWE9Z2EseGE9Z2EsYmE9dmE7eWEubXVybXVyMz14YSx5YS5tdXJtdXIyPWJhO3ZhciBfYT1mdW5jdGlvbigpe3RoaXMuaWRzPVtdLHRoaXMucG9zaXRpb25zPVtdLHRoaXMuaW5kZXhlZD0hMX07X2EucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlkcy5wdXNoKFRhKHQpKSx0aGlzLnBvc2l0aW9ucy5wdXNoKGUscixuKX0sX2EucHJvdG90eXBlLmdldFBvc2l0aW9ucz1mdW5jdGlvbih0KXtmb3IodmFyIGU9VGEodCkscj0wLG49dGhpcy5pZHMubGVuZ3RoLTE7cjxuOyl7dmFyIGk9cituPj4xO3RoaXMuaWRzW2ldPj1lP249aTpyPWkrMX1mb3IodmFyIGE9W107dGhpcy5pZHNbcl09PT1lOyl7dmFyIG89dGhpcy5wb3NpdGlvbnNbMypyXSxzPXRoaXMucG9zaXRpb25zWzMqcisxXSxsPXRoaXMucG9zaXRpb25zWzMqcisyXTthLnB1c2goe2luZGV4Om8sc3RhcnQ6cyxlbmQ6bH0pLHIrK31yZXR1cm4gYX0sX2Euc2VyaWFsaXplPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IEZsb2F0NjRBcnJheSh0Lmlkcyksbj1uZXcgVWludDMyQXJyYXkodC5wb3NpdGlvbnMpO3JldHVybiBmdW5jdGlvbiB0KGUscixuLGkpe2Zvcig7bjxpOyl7Zm9yKHZhciBhPWVbbitpPj4xXSxvPW4tMSxzPWkrMTs7KXtkb3tvKyt9d2hpbGUoZVtvXTxhKTtkb3tzLS19d2hpbGUoZVtzXT5hKTtpZihvPj1zKWJyZWFrO2thKGUsbyxzKSxrYShyLDMqbywzKnMpLGthKHIsMypvKzEsMypzKzEpLGthKHIsMypvKzIsMypzKzIpfXMtbjxpLXM/KHQoZSxyLG4scyksbj1zKzEpOih0KGUscixzKzEsaSksaT1zKX19KHIsbiwwLHIubGVuZ3RoLTEpLGUmJmUucHVzaChyLmJ1ZmZlcixuLmJ1ZmZlcikse2lkczpyLHBvc2l0aW9uczpufX0sX2EuZGVzZXJpYWxpemU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IF9hO3JldHVybiBlLmlkcz10LmlkcyxlLnBvc2l0aW9ucz10LnBvc2l0aW9ucyxlLmluZGV4ZWQ9ITAsZX07dmFyIHdhPU1hdGgucG93KDIsNTMpLTE7ZnVuY3Rpb24gVGEodCl7dmFyIGU9K3Q7cmV0dXJuIWlzTmFOKGUpJiZlPD13YT9lOnlhKFN0cmluZyh0KSl9ZnVuY3Rpb24ga2EodCxlLHIpe3ZhciBuPXRbZV07dFtlXT10W3JdLHRbcl09bn1ObigiRmVhdHVyZVBvc2l0aW9uTWFwIixfYSk7dmFyIEFhPWZ1bmN0aW9uKHQsZSl7dGhpcy5nbD10LmdsLHRoaXMubG9jYXRpb249ZX0sTWE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PTB9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0aGlzLmN1cnJlbnQhPT10JiYodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtMWkodGhpcy5sb2NhdGlvbix0KSl9LGV9KEFhKSxTYT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscil7dC5jYWxsKHRoaXMsZSxyKSx0aGlzLmN1cnJlbnQ9MH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuY3VycmVudCE9PXQmJih0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0xZih0aGlzLmxvY2F0aW9uLHQpKX0sZX0oQWEpLEVhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1bMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV18fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm0yZih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSkpfSxlfShBYSksTGE9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMF19cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt0WzBdPT09dGhpcy5jdXJyZW50WzBdJiZ0WzFdPT09dGhpcy5jdXJyZW50WzFdJiZ0WzJdPT09dGhpcy5jdXJyZW50WzJdfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtM2YodGhpcy5sb2NhdGlvbix0WzBdLHRbMV0sdFsyXSkpfSxlfShBYSksQ2E9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUsciksdGhpcy5jdXJyZW50PVswLDAsMCwwXX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RbMF09PT10aGlzLmN1cnJlbnRbMF0mJnRbMV09PT10aGlzLmN1cnJlbnRbMV0mJnRbMl09PT10aGlzLmN1cnJlbnRbMl0mJnRbM109PT10aGlzLmN1cnJlbnRbM118fCh0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm00Zih0aGlzLmxvY2F0aW9uLHRbMF0sdFsxXSx0WzJdLHRbM10pKX0sZX0oQWEpLFBhPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD10ZS50cmFuc3BhcmVudH1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3Qucj09PXRoaXMuY3VycmVudC5yJiZ0Lmc9PT10aGlzLmN1cnJlbnQuZyYmdC5iPT09dGhpcy5jdXJyZW50LmImJnQuYT09PXRoaXMuY3VycmVudC5hfHwodGhpcy5jdXJyZW50PXQsdGhpcy5nbC51bmlmb3JtNGYodGhpcy5sb2NhdGlvbix0LnIsdC5nLHQuYix0LmEpKX0sZX0oQWEpLElhPW5ldyBGbG9hdDMyQXJyYXkoMTYpLE9hPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxyKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuY3VycmVudD1JYX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHRbMTJdIT09dGhpcy5jdXJyZW50WzEyXXx8dFswXSE9PXRoaXMuY3VycmVudFswXSlyZXR1cm4gdGhpcy5jdXJyZW50PXQsdm9pZCB0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTtmb3IodmFyIGU9MTtlPDE2O2UrKylpZih0W2VdIT09dGhpcy5jdXJyZW50W2VdKXt0aGlzLmN1cnJlbnQ9dCx0aGlzLmdsLnVuaWZvcm1NYXRyaXg0ZnYodGhpcy5sb2NhdGlvbiwhMSx0KTticmVha319LGV9KEFhKTtmdW5jdGlvbiB6YSh0KXtyZXR1cm5bZGEoMjU1KnQuciwyNTUqdC5nKSxkYSgyNTUqdC5iLDI1NSp0LmEpXX12YXIgRGE9ZnVuY3Rpb24odCxlLHIpe3RoaXMudmFsdWU9dCx0aGlzLnVuaWZvcm1OYW1lcz1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInVfIit0fSkpLHRoaXMudHlwZT1yfTtEYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscil7dC5zZXQoci5jb25zdGFudE9yKHRoaXMudmFsdWUpKX0sRGEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJjb2xvciI9PT10aGlzLnR5cGU/bmV3IFBhKHQsZSk6bmV3IFNhKHQsZSl9O3ZhciBSYT1mdW5jdGlvbih0LGUpe3RoaXMudW5pZm9ybU5hbWVzPWUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4idV8iK3R9KSksdGhpcy5wYXR0ZXJuRnJvbT1udWxsLHRoaXMucGF0dGVyblRvPW51bGwsdGhpcy5waXhlbFJhdGlvRnJvbT0xLHRoaXMucGl4ZWxSYXRpb1RvPTF9O1JhLnByb3RvdHlwZS5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlKXt0aGlzLnBpeGVsUmF0aW9Gcm9tPWUucGl4ZWxSYXRpbyx0aGlzLnBpeGVsUmF0aW9Ubz10LnBpeGVsUmF0aW8sdGhpcy5wYXR0ZXJuRnJvbT1lLnRsYnIsdGhpcy5wYXR0ZXJuVG89dC50bGJyfSxSYS5wcm90b3R5cGUuc2V0VW5pZm9ybT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0idV9wYXR0ZXJuX3RvIj09PW4/dGhpcy5wYXR0ZXJuVG86InVfcGF0dGVybl9mcm9tIj09PW4/dGhpcy5wYXR0ZXJuRnJvbToidV9waXhlbF9yYXRpb190byI9PT1uP3RoaXMucGl4ZWxSYXRpb1RvOiJ1X3BpeGVsX3JhdGlvX2Zyb20iPT09bj90aGlzLnBpeGVsUmF0aW9Gcm9tOm51bGw7aSYmdC5zZXQoaSl9LFJhLnByb3RvdHlwZS5nZXRCaW5kaW5nPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4idV9wYXR0ZXJuIj09PXIuc3Vic3RyKDAsOSk/bmV3IENhKHQsZSk6bmV3IFNhKHQsZSl9O3ZhciBGYT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9cix0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzI6MSxvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBufTtGYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wYWludFZlcnRleEFycmF5Lmxlbmd0aCxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkoMCksZSx7fSxuLFtdLGkpO3RoaXMucGFpbnRWZXJ0ZXhBcnJheS5yZXNpemUodCksdGhpcy5fc2V0UGFpbnRWYWx1ZShhLHQsbyl9LEZhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSh7em9vbTowfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGkpfSxGYS5wcm90b3R5cGUuX3NldFBhaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJjb2xvciI9PT10aGlzLnR5cGUpZm9yKHZhciBuPXphKHIpLGk9dDtpPGU7aSsrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKGksblswXSxuWzFdKTtlbHNle2Zvcih2YXIgYT10O2E8ZTthKyspdGhpcy5wYWludFZlcnRleEFycmF5LmVtcGxhY2UoYSxyKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMocikpfX0sRmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEZhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9O3ZhciBCYT1mdW5jdGlvbih0LGUscixuLGksYSl7dGhpcy5leHByZXNzaW9uPXQsdGhpcy51bmlmb3JtTmFtZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiJ1XyIrdCsiX3QifSkpLHRoaXMudHlwZT1yLHRoaXMudXNlSW50ZWdlclpvb209bix0aGlzLnpvb209aSx0aGlzLm1heFZhbHVlPTAsdGhpcy5wYWludFZlcnRleEF0dHJpYnV0ZXM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOiJhXyIrdCx0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOiJjb2xvciI9PT1yPzQ6MixvZmZzZXQ6MH19KSksdGhpcy5wYWludFZlcnRleEFycmF5PW5ldyBhfTtCYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKG5ldyBwaSh0aGlzLnpvb20pLGUse30sbixbXSxpKSxvPXRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZShuZXcgcGkodGhpcy56b29tKzEpLGUse30sbixbXSxpKSxzPXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy5wYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlKHMsdCxhLG8pfSxCYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoe3pvb206dGhpcy56b29tfSxyLG4pLGE9dGhpcy5leHByZXNzaW9uLmV2YWx1YXRlKHt6b29tOnRoaXMuem9vbSsxfSxyLG4pO3RoaXMuX3NldFBhaW50VmFsdWUodCxlLGksYSl9LEJhLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZT1mdW5jdGlvbih0LGUscixuKXtpZigiY29sb3IiPT09dGhpcy50eXBlKWZvcih2YXIgaT16YShyKSxhPXphKG4pLG89dDtvPGU7bysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKG8saVswXSxpWzFdLGFbMF0sYVsxXSk7ZWxzZXtmb3IodmFyIHM9dDtzPGU7cysrKXRoaXMucGFpbnRWZXJ0ZXhBcnJheS5lbXBsYWNlKHMscixuKTt0aGlzLm1heFZhbHVlPU1hdGgubWF4KHRoaXMubWF4VmFsdWUsTWF0aC5hYnMociksTWF0aC5hYnMobikpfX0sQmEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnBhaW50VmVydGV4QXJyYXkmJnRoaXMucGFpbnRWZXJ0ZXhBcnJheS5hcnJheUJ1ZmZlciYmKHRoaXMucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXIuYnVmZmVyP3RoaXMucGFpbnRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YSh0aGlzLnBhaW50VmVydGV4QXJyYXkpOnRoaXMucGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5wYWludFZlcnRleEFycmF5LHRoaXMucGFpbnRWZXJ0ZXhBdHRyaWJ1dGVzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LEJhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5wYWludFZlcnRleEJ1ZmZlciYmdGhpcy5wYWludFZlcnRleEJ1ZmZlci5kZXN0cm95KCl9LEJhLnByb3RvdHlwZS5zZXRVbmlmb3JtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy51c2VJbnRlZ2VyWm9vbT9NYXRoLmZsb29yKGUuem9vbSk6ZS56b29tLG49bCh0aGlzLmV4cHJlc3Npb24uaW50ZXJwb2xhdGlvbkZhY3RvcihyLHRoaXMuem9vbSx0aGlzLnpvb20rMSksMCwxKTt0LnNldChuKX0sQmEucHJvdG90eXBlLmdldEJpbmRpbmc9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgU2EodCxlKX07dmFyIE5hPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmV4cHJlc3Npb249dCx0aGlzLnR5cGU9ZSx0aGlzLnVzZUludGVnZXJab29tPXIsdGhpcy56b29tPW4sdGhpcy5sYXllcklkPWEsdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5PW5ldyBpLHRoaXMuem9vbU91dFBhaW50VmVydGV4QXJyYXk9bmV3IGl9O05hLnByb3RvdHlwZS5wb3B1bGF0ZVBhaW50QXJyYXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheS5sZW5ndGg7dGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LnJlc2l6ZSh0KSx0aGlzLl9zZXRQYWludFZhbHVlcyhuLHQsZS5wYXR0ZXJucyYmZS5wYXR0ZXJuc1t0aGlzLmxheWVySWRdLHIpfSxOYS5wcm90b3R5cGUudXBkYXRlUGFpbnRBcnJheT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX3NldFBhaW50VmFsdWVzKHQsZSxyLnBhdHRlcm5zJiZyLnBhdHRlcm5zW3RoaXMubGF5ZXJJZF0saSl9LE5hLnByb3RvdHlwZS5fc2V0UGFpbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIsbil7aWYobiYmcil7dmFyIGk9ci5taW4sYT1yLm1pZCxvPXIubWF4LHM9bltpXSxsPW5bYV0sYz1uW29dO2lmKHMmJmwmJmMpZm9yKHZhciB1PXQ7dTxlO3UrKyl0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXkuZW1wbGFjZSh1LGwudGxbMF0sbC50bFsxXSxsLmJyWzBdLGwuYnJbMV0scy50bFswXSxzLnRsWzFdLHMuYnJbMF0scy5iclsxXSxsLnBpeGVsUmF0aW8scy5waXhlbFJhdGlvKSx0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmVtcGxhY2UodSxsLnRsWzBdLGwudGxbMV0sbC5iclswXSxsLmJyWzFdLGMudGxbMF0sYy50bFsxXSxjLmJyWzBdLGMuYnJbMV0sbC5waXhlbFJhdGlvLGMucGl4ZWxSYXRpbyl9fSxOYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMuem9vbUluUGFpbnRWZXJ0ZXhBcnJheSYmdGhpcy56b29tSW5QYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5JiZ0aGlzLnpvb21PdXRQYWludFZlcnRleEFycmF5LmFycmF5QnVmZmVyJiYodGhpcy56b29tSW5QYWludFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLnpvb21JblBhaW50VmVydGV4QXJyYXksbWEubWVtYmVycyx0aGlzLmV4cHJlc3Npb24uaXNTdGF0ZURlcGVuZGVudCksdGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhBcnJheSxtYS5tZW1iZXJzLHRoaXMuZXhwcmVzc2lvbi5pc1N0YXRlRGVwZW5kZW50KSl9LE5hLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy56b29tT3V0UGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuem9vbU91dFBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyJiZ0aGlzLnpvb21JblBhaW50VmVydGV4QnVmZmVyLmRlc3Ryb3koKX07dmFyIGphPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYmluZGVycz17fSx0aGlzLmxheW91dEF0dHJpYnV0ZXM9bix0aGlzLl9idWZmZXJzPVtdO3ZhciBpPVtdO2Zvcih2YXIgYSBpbiB0LnBhaW50Ll92YWx1ZXMpaWYocihhKSl7dmFyIG89dC5wYWludC5nZXQoYSk7aWYobyBpbnN0YW5jZW9mIGJpJiZ6cihvLnByb3BlcnR5LnNwZWNpZmljYXRpb24pKXt2YXIgcz1WYShhLHQudHlwZSksbD1vLnZhbHVlLGM9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uLnR5cGUsdT1vLnByb3BlcnR5LnVzZUludGVnZXJab29tLGY9by5wcm9wZXJ0eS5zcGVjaWZpY2F0aW9uWyJwcm9wZXJ0eS10eXBlIl0saD0iY3Jvc3MtZmFkZWQiPT09Znx8ImNyb3NzLWZhZGVkLWRhdGEtZHJpdmVuIj09PWY7aWYoImNvbnN0YW50Ij09PWwua2luZCl0aGlzLmJpbmRlcnNbYV09aD9uZXcgUmEobC52YWx1ZSxzKTpuZXcgRGEobC52YWx1ZSxzLGMpLGkucHVzaCgiL3VfIithKTtlbHNlIGlmKCJzb3VyY2UiPT09bC5raW5kfHxoKXt2YXIgcD1IYShhLGMsInNvdXJjZSIpO3RoaXMuYmluZGVyc1thXT1oP25ldyBOYShsLGMsdSxlLHAsdC5pZCk6bmV3IEZhKGwscyxjLHApLGkucHVzaCgiL2FfIithKX1lbHNle3ZhciBkPUhhKGEsYywiY29tcG9zaXRlIik7dGhpcy5iaW5kZXJzW2FdPW5ldyBCYShsLHMsYyx1LGUsZCksaS5wdXNoKCIvel8iK2EpfX19dGhpcy5jYWNoZUtleT1pLnNvcnQoKS5qb2luKCIiKX07amEucHJvdG90eXBlLmdldE1heFZhbHVlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYmluZGVyc1t0XTtyZXR1cm4gZSBpbnN0YW5jZW9mIEZhfHxlIGluc3RhbmNlb2YgQmE/ZS5tYXhWYWx1ZTowfSxqYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYSBpbiB0aGlzLmJpbmRlcnMpe3ZhciBvPXRoaXMuYmluZGVyc1thXTsobyBpbnN0YW5jZW9mIEZhfHxvIGluc3RhbmNlb2YgQmF8fG8gaW5zdGFuY2VvZiBOYSkmJm8ucG9wdWxhdGVQYWludEFycmF5KHQsZSxyLG4saSl9fSxqYS5wcm90b3R5cGUuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByIGluIHRoaXMuYmluZGVycyl7dmFyIG49dGhpcy5iaW5kZXJzW3JdO24gaW5zdGFuY2VvZiBSYSYmbi5zZXRDb25zdGFudFBhdHRlcm5Qb3NpdGlvbnModCxlKX19LGphLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPSExO2Zvcih2YXIgbyBpbiB0KWZvcih2YXIgcz0wLGw9ZS5nZXRQb3NpdGlvbnMobyk7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdLHU9ci5mZWF0dXJlKGMuaW5kZXgpO2Zvcih2YXIgZiBpbiB0aGlzLmJpbmRlcnMpe3ZhciBoPXRoaXMuYmluZGVyc1tmXTtpZigoaCBpbnN0YW5jZW9mIEZhfHxoIGluc3RhbmNlb2YgQmF8fGggaW5zdGFuY2VvZiBOYSkmJiEwPT09aC5leHByZXNzaW9uLmlzU3RhdGVEZXBlbmRlbnQpe3ZhciBwPW4ucGFpbnQuZ2V0KGYpO2guZXhwcmVzc2lvbj1wLnZhbHVlLGgudXBkYXRlUGFpbnRBcnJheShjLnN0YXJ0LGMuZW5kLHUsdFtvXSxpKSxhPSEwfX19cmV0dXJuIGF9LGphLnByb3RvdHlwZS5kZWZpbmVzPWZ1bmN0aW9uKCl7dmFyIHQ9W107Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgRGF8fHIgaW5zdGFuY2VvZiBSYSkmJnQucHVzaC5hcHBseSh0LHIudW5pZm9ybU5hbWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIiNkZWZpbmUgSEFTX1VOSUZPUk1fIit0fSkpKX1yZXR1cm4gdH0samEucHJvdG90eXBlLmdldFBhaW50VmVydGV4QnVmZmVycz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWZmZXJzfSxqYS5wcm90b3R5cGUuZ2V0VW5pZm9ybXM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gdGhpcy5iaW5kZXJzKXt2YXIgaT10aGlzLmJpbmRlcnNbbl07aWYoaSBpbnN0YW5jZW9mIERhfHxpIGluc3RhbmNlb2YgUmF8fGkgaW5zdGFuY2VvZiBCYSlmb3IodmFyIGE9MCxvPWkudW5pZm9ybU5hbWVzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtpZihlW3NdKXt2YXIgbD1pLmdldEJpbmRpbmcodCxlW3NdLHMpO3IucHVzaCh7bmFtZTpzLHByb3BlcnR5Om4sYmluZGluZzpsfSl9fX1yZXR1cm4gcn0samEucHJvdG90eXBlLnNldFVuaWZvcm1zPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV0scz1vLm5hbWUsbD1vLnByb3BlcnR5LGM9by5iaW5kaW5nO3RoaXMuYmluZGVyc1tsXS5zZXRVbmlmb3JtKGMsbixyLmdldChsKSxzKX19LGphLnByb3RvdHlwZS51cGRhdGVQYWludEJ1ZmZlcnM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuX2J1ZmZlcnM9W10sdGhpcy5iaW5kZXJzKXt2YXIgcj10aGlzLmJpbmRlcnNbZV07aWYodCYmciBpbnN0YW5jZW9mIE5hKXt2YXIgbj0yPT09dC5mcm9tU2NhbGU/ci56b29tSW5QYWludFZlcnRleEJ1ZmZlcjpyLnpvb21PdXRQYWludFZlcnRleEJ1ZmZlcjtuJiZ0aGlzLl9idWZmZXJzLnB1c2gobil9ZWxzZShyIGluc3RhbmNlb2YgRmF8fHIgaW5zdGFuY2VvZiBCYSkmJnIucGFpbnRWZXJ0ZXhCdWZmZXImJnRoaXMuX2J1ZmZlcnMucHVzaChyLnBhaW50VmVydGV4QnVmZmVyKX19LGphLnByb3RvdHlwZS51cGxvYWQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHRoaXMuYmluZGVycyl7dmFyIHI9dGhpcy5iaW5kZXJzW2VdOyhyIGluc3RhbmNlb2YgRmF8fHIgaW5zdGFuY2VvZiBCYXx8ciBpbnN0YW5jZW9mIE5hKSYmci51cGxvYWQodCl9dGhpcy51cGRhdGVQYWludEJ1ZmZlcnMoKX0samEucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5iaW5kZXJzKXt2YXIgZT10aGlzLmJpbmRlcnNbdF07KGUgaW5zdGFuY2VvZiBGYXx8ZSBpbnN0YW5jZW9mIEJhfHxlIGluc3RhbmNlb2YgTmEpJiZlLmRlc3Ryb3koKX19O3ZhciBVYT1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj1mdW5jdGlvbigpe3JldHVybiEwfSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnM9e307Zm9yKHZhciBpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXTt0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tvLmlkXT1uZXcgamEobyxyLG4sdCl9dGhpcy5uZWVkc1VwbG9hZD0hMSx0aGlzLl9mZWF0dXJlTWFwPW5ldyBfYSx0aGlzLl9idWZmZXJPZmZzZXQ9MH07ZnVuY3Rpb24gVmEodCxlKXtyZXR1cm57InRleHQtb3BhY2l0eSI6WyJvcGFjaXR5Il0sImljb24tb3BhY2l0eSI6WyJvcGFjaXR5Il0sInRleHQtY29sb3IiOlsiZmlsbF9jb2xvciJdLCJpY29uLWNvbG9yIjpbImZpbGxfY29sb3IiXSwidGV4dC1oYWxvLWNvbG9yIjpbImhhbG9fY29sb3IiXSwiaWNvbi1oYWxvLWNvbG9yIjpbImhhbG9fY29sb3IiXSwidGV4dC1oYWxvLWJsdXIiOlsiaGFsb19ibHVyIl0sImljb24taGFsby1ibHVyIjpbImhhbG9fYmx1ciJdLCJ0ZXh0LWhhbG8td2lkdGgiOlsiaGFsb193aWR0aCJdLCJpY29uLWhhbG8td2lkdGgiOlsiaGFsb193aWR0aCJdLCJsaW5lLWdhcC13aWR0aCI6WyJnYXB3aWR0aCJdLCJsaW5lLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdLCJmaWxsLXBhdHRlcm4iOlsicGF0dGVybl90byIsInBhdHRlcm5fZnJvbSIsInBpeGVsX3JhdGlvX3RvIiwicGl4ZWxfcmF0aW9fZnJvbSJdLCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjpbInBhdHRlcm5fdG8iLCJwYXR0ZXJuX2Zyb20iLCJwaXhlbF9yYXRpb190byIsInBpeGVsX3JhdGlvX2Zyb20iXX1bdF18fFt0LnJlcGxhY2UoZSsiLSIsIiIpLnJlcGxhY2UoLy0vZywiXyIpXX1mdW5jdGlvbiBIYSh0LGUscil7dmFyIG49e2NvbG9yOntzb3VyY2U6dGEsY29tcG9zaXRlOmVhfSxudW1iZXI6e3NvdXJjZTpaaSxjb21wb3NpdGU6dGF9fSxpPWZ1bmN0aW9uKHQpe3JldHVybnsibGluZS1wYXR0ZXJuIjp7c291cmNlOkJpLGNvbXBvc2l0ZTpCaX0sImZpbGwtcGF0dGVybiI6e3NvdXJjZTpCaSxjb21wb3NpdGU6Qml9LCJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIjp7c291cmNlOkJpLGNvbXBvc2l0ZTpCaX19W3RdfSh0KTtyZXR1cm4gaSYmaVtyXXx8bltlXVtyXX1VYS5wcm90b3R5cGUucG9wdWxhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvIGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW29dLnBvcHVsYXRlUGFpbnRBcnJheXModCxlLG4saSxhKTt2b2lkIDAhPT1lLmlkJiZ0aGlzLl9mZWF0dXJlTWFwLmFkZChlLmlkLHIsdGhpcy5fYnVmZmVyT2Zmc2V0LHQpLHRoaXMuX2J1ZmZlck9mZnNldD10LHRoaXMubmVlZHNVcGxvYWQ9ITB9LFVhLnByb3RvdHlwZS51cGRhdGVQYWludEFycmF5cz1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxhPXI7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMubmVlZHNVcGxvYWQ9dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnNbby5pZF0udXBkYXRlUGFpbnRBcnJheXModCx0aGlzLl9mZWF0dXJlTWFwLGUsbyxuKXx8dGhpcy5uZWVkc1VwbG9hZH19LFVhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3RdfSxVYS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubmVlZHNVcGxvYWQpe2Zvcih2YXIgZSBpbiB0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucyl0aGlzLnByb2dyYW1Db25maWd1cmF0aW9uc1tlXS51cGxvYWQodCk7dGhpcy5uZWVkc1VwbG9hZD0hMX19LFVhLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zKXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zW3RdLmRlc3Ryb3koKX0sTm4oIkNvbnN0YW50QmluZGVyIixEYSksTm4oIkNyb3NzRmFkZWRDb25zdGFudEJpbmRlciIsUmEpLE5uKCJTb3VyY2VFeHByZXNzaW9uQmluZGVyIixGYSksTm4oIkNyb3NzRmFkZWRDb21wb3NpdGVCaW5kZXIiLE5hKSxObigiQ29tcG9zaXRlRXhwcmVzc2lvbkJpbmRlciIsQmEpLE5uKCJQcm9ncmFtQ29uZmlndXJhdGlvbiIsamEse29taXQ6WyJfYnVmZmVycyJdfSksTm4oIlByb2dyYW1Db25maWd1cmF0aW9uU2V0IixVYSk7dmFyIHFhLEdhPShxYT0xNSx7bWluOi0xKk1hdGgucG93KDIscWEtMSksbWF4Ok1hdGgucG93KDIscWEtMSktMX0pO2Z1bmN0aW9uIFlhKHQpe2Zvcih2YXIgZT04MTkyL3QuZXh0ZW50LHI9dC5sb2FkR2VvbWV0cnkoKSxuPTA7bjxyLmxlbmd0aDtuKyspZm9yKHZhciBpPXJbbl0sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO28ueD1NYXRoLnJvdW5kKG8ueCplKSxvLnk9TWF0aC5yb3VuZChvLnkqZSksKG8ueDxHYS5taW58fG8ueD5HYS5tYXh8fG8ueTxHYS5taW58fG8ueT5HYS5tYXgpJiYoXygiR2VvbWV0cnkgZXhjZWVkcyBhbGxvd2VkIGV4dGVudCwgcmVkdWNlIHlvdXIgdmVjdG9yIHRpbGUgYnVmZmVyIHNpemUiKSxvLng9bChvLngsR2EubWluLEdhLm1heCksby55PWwoby55LEdhLm1pbixHYS5tYXgpKX1yZXR1cm4gcn1mdW5jdGlvbiBXYSh0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soMiplKyhuKzEpLzIsMipyKyhpKzEpLzIpfXZhciBYYT1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyB6aSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYShoYSx0LmxheWVycyx0Lnpvb20pLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtmdW5jdGlvbiBaYSh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGlvKGUsdFtyXSkpcmV0dXJuITA7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoaW8odCxlW25dKSlyZXR1cm4hMDtyZXR1cm4hISRhKHQsZSl9ZnVuY3Rpb24gSmEodCxlLHIpe3JldHVybiEhaW8odCxlKXx8ISFlbyhlLHQscil9ZnVuY3Rpb24gS2EodCxlKXtpZigxPT09dC5sZW5ndGgpcmV0dXJuIG5vKGUsdFswXSk7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZm9yKHZhciBuPWVbcl0saT0wO2k8bi5sZW5ndGg7aSsrKWlmKGlvKHQsbltpXSkpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYobm8oZSx0W2FdKSlyZXR1cm4hMDtmb3IodmFyIG89MDtvPGUubGVuZ3RoO28rKylpZigkYSh0LGVbb10pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFFhKHQsZSxyKXtpZih0Lmxlbmd0aD4xKXtpZigkYSh0LGUpKXJldHVybiEwO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWlmKGVvKGVbbl0sdCxyKSlyZXR1cm4hMH1mb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKylpZihlbyh0W2ldLGUscikpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gJGEodCxlKXtpZigwPT09dC5sZW5ndGh8fDA9PT1lLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoLTE7cisrKWZvcih2YXIgbj10W3JdLGk9dFtyKzFdLGE9MDthPGUubGVuZ3RoLTE7YSsrKXtpZih0byhuLGksZVthXSxlW2ErMV0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHRvKHQsZSxyLG4pe3JldHVybiB3KHQscixuKSE9PXcoZSxyLG4pJiZ3KHQsZSxyKSE9PXcodCxlLG4pfWZ1bmN0aW9uIGVvKHQsZSxyKXt2YXIgbj1yKnI7aWYoMT09PWUubGVuZ3RoKXJldHVybiB0LmRpc3RTcXIoZVswXSk8bjtmb3IodmFyIGk9MTtpPGUubGVuZ3RoO2krKyl7aWYocm8odCxlW2ktMV0sZVtpXSk8bilyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBybyh0LGUscil7dmFyIG49ZS5kaXN0U3FyKHIpO2lmKDA9PT1uKXJldHVybiB0LmRpc3RTcXIoZSk7dmFyIGk9KCh0LngtZS54KSooci54LWUueCkrKHQueS1lLnkpKihyLnktZS55KSkvbjtyZXR1cm4gaTwwP3QuZGlzdFNxcihlKTppPjE/dC5kaXN0U3FyKHIpOnQuZGlzdFNxcihyLnN1YihlKS5fbXVsdChpKS5fYWRkKGUpKX1mdW5jdGlvbiBubyh0LGUpe2Zvcih2YXIgcixuLGksYT0hMSxvPTA7bzx0Lmxlbmd0aDtvKyspZm9yKHZhciBzPTAsbD0ocj10W29dKS5sZW5ndGgtMTtzPHIubGVuZ3RoO2w9cysrKW49cltzXSxpPXJbbF0sbi55PmUueSE9aS55PmUueSYmZS54PChpLngtbi54KSooZS55LW4ueSkvKGkueS1uLnkpK24ueCYmKGE9IWEpO3JldHVybiBhfWZ1bmN0aW9uIGlvKHQsZSl7Zm9yKHZhciByPSExLG49MCxpPXQubGVuZ3RoLTE7bjx0Lmxlbmd0aDtpPW4rKyl7dmFyIGE9dFtuXSxvPXRbaV07YS55PmUueSE9by55PmUueSYmZS54PChvLngtYS54KSooZS55LWEueSkvKG8ueS1hLnkpK2EueCYmKHI9IXIpfXJldHVybiByfWZ1bmN0aW9uIGFvKHQsZSxyKXt2YXIgbj1yWzBdLGk9clsyXTtpZih0Lng8bi54JiZlLng8bi54fHx0Lng+aS54JiZlLng+aS54fHx0Lnk8bi55JiZlLnk8bi55fHx0Lnk+aS55JiZlLnk+aS55KXJldHVybiExO3ZhciBhPXcodCxlLHJbMF0pO3JldHVybiBhIT09dyh0LGUsclsxXSl8fGEhPT13KHQsZSxyWzJdKXx8YSE9PXcodCxlLHJbM10pfWZ1bmN0aW9uIG9vKHQsZSxyKXt2YXIgbj1lLnBhaW50LmdldCh0KS52YWx1ZTtyZXR1cm4iY29uc3RhbnQiPT09bi5raW5kP24udmFsdWU6ci5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KGUuaWQpLmdldE1heFZhbHVlKHQpfWZ1bmN0aW9uIHNvKHQpe3JldHVybiBNYXRoLnNxcnQodFswXSp0WzBdK3RbMV0qdFsxXSl9ZnVuY3Rpb24gbG8odCxlLHIsbixhKXtpZighZVswXSYmIWVbMV0pcmV0dXJuIHQ7dmFyIG89aS5jb252ZXJ0KGUpLl9tdWx0KGEpOyJ2aWV3cG9ydCI9PT1yJiZvLl9yb3RhdGUoLW4pO2Zvcih2YXIgcz1bXSxsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBjPXRbbF07cy5wdXNoKGMuc3ViKG8pKX1yZXR1cm4gc31YYS5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJzWzBdLGk9W10sYT1udWxsOyJjaXJjbGUiPT09bi50eXBlJiYoYT1uLmxheW91dC5nZXQoImNpcmNsZS1zb3J0LWtleSIpKTtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dLGM9bC5mZWF0dXJlLHU9bC5pZCxmPWwuaW5kZXgsaD1sLnNvdXJjZUxheWVySW5kZXgscD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksZD17dHlwZTpjLnR5cGUsaWQ6dSxwcm9wZXJ0aWVzOmMucHJvcGVydGllcyxnZW9tZXRyeTpwP1lhKGMpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSksZCxyKSl7cHx8KGQuZ2VvbWV0cnk9WWEoYykpO3ZhciBtPWE/YS5ldmFsdWF0ZShkLHt9LHIpOnZvaWQgMCxnPXtpZDp1LHByb3BlcnRpZXM6Yy5wcm9wZXJ0aWVzLHR5cGU6Yy50eXBlLHNvdXJjZUxheWVySW5kZXg6aCxpbmRleDpmLGdlb21ldHJ5OmQuZ2VvbWV0cnkscGF0dGVybnM6e30sc29ydEtleTptfTtpLnB1c2goZyl9fWEmJmkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIHY9MCx5PWk7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9eCxfPWIuZ2VvbWV0cnksdz1iLmluZGV4LFQ9Yi5zb3VyY2VMYXllckluZGV4LGs9dFt3XS5mZWF0dXJlO3RoaXMuYWRkRmVhdHVyZSh4LF8sdyxyKSxlLmZlYXR1cmVJbmRleC5pbnNlcnQoayxfLHcsVCx0aGlzLmluZGV4KX19LFhhLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiZ0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5zdGF0ZURlcGVuZGVudExheWVycyxyKX0sWGEucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxYYS5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0sWGEucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxoYSksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxYYS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LFhhLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLGE9ZTtpPGEubGVuZ3RoO2krPTEpZm9yKHZhciBvPTAscz1hW2ldO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPWwueCx1PWwueTtpZighKGM8MHx8Yz49ODE5Mnx8dTwwfHx1Pj04MTkyKSl7dmFyIGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5LHQuc29ydEtleSksaD1mLnZlcnRleExlbmd0aDtXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwtMSksV2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwtMSksV2EodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxjLHUsMSwxKSxXYSh0aGlzLmxheW91dFZlcnRleEFycmF5LGMsdSwtMSwxKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzEsaCsyKSx0aGlzLmluZGV4QXJyYXkuZW1wbGFjZUJhY2soaCxoKzMsaCsyKSxmLnZlcnRleExlbmd0aCs9NCxmLnByaW1pdGl2ZUxlbmd0aCs9Mn19dGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMucG9wdWxhdGVQYWludEFycmF5cyh0aGlzLmxheW91dFZlcnRleEFycmF5Lmxlbmd0aCx0LHIse30sbil9LE5uKCJDaXJjbGVCdWNrZXQiLFhhLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgY289bmV3IFNpKHsiY2lyY2xlLXNvcnQta2V5IjpuZXcgVGkoTHQubGF5b3V0X2NpcmNsZVsiY2lyY2xlLXNvcnQta2V5Il0pfSksdW89e3BhaW50Om5ldyBTaSh7ImNpcmNsZS1yYWRpdXMiOm5ldyBUaShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1yYWRpdXMiXSksImNpcmNsZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWNvbG9yIl0pLCJjaXJjbGUtYmx1ciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLWJsdXIiXSksImNpcmNsZS1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtb3BhY2l0eSJdKSwiY2lyY2xlLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXRyYW5zbGF0ZSJdKSwiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS10cmFuc2xhdGUtYW5jaG9yIl0pLCJjaXJjbGUtcGl0Y2gtc2NhbGUiOm5ldyB3aShMdC5wYWludF9jaXJjbGVbImNpcmNsZS1waXRjaC1zY2FsZSJdKSwiY2lyY2xlLXBpdGNoLWFsaWdubWVudCI6bmV3IHdpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXBpdGNoLWFsaWdubWVudCJdKSwiY2lyY2xlLXN0cm9rZS13aWR0aCI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS13aWR0aCJdKSwiY2lyY2xlLXN0cm9rZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2NpcmNsZVsiY2lyY2xlLXN0cm9rZS1jb2xvciJdKSwiY2lyY2xlLXN0cm9rZS1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfY2lyY2xlWyJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiXSl9KSxsYXlvdXQ6Y299LGZvPSJ1bmRlZmluZWQiIT10eXBlb2YgRmxvYXQzMkFycmF5P0Zsb2F0MzJBcnJheTpBcnJheTtmdW5jdGlvbiBobyh0KXtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9ZnVuY3Rpb24gcG8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLG09ZVsxMl0sZz1lWzEzXSx2PWVbMTRdLHk9ZVsxNV0seD1yWzBdLGI9clsxXSxfPXJbMl0sdz1yWzNdO3JldHVybiB0WzBdPXgqbitiKnMrXypmK3cqbSx0WzFdPXgqaStiKmwrXypoK3cqZyx0WzJdPXgqYStiKmMrXypwK3cqdix0WzNdPXgqbytiKnUrXypkK3cqeSx4PXJbNF0sYj1yWzVdLF89cls2XSx3PXJbN10sdFs0XT14Km4rYipzK18qZit3Km0sdFs1XT14KmkrYipsK18qaCt3KmcsdFs2XT14KmErYipjK18qcCt3KnYsdFs3XT14Km8rYip1K18qZCt3KnkseD1yWzhdLGI9cls5XSxfPXJbMTBdLHc9clsxMV0sdFs4XT14Km4rYipzK18qZit3Km0sdFs5XT14KmkrYipsK18qaCt3KmcsdFsxMF09eCphK2IqYytfKnArdyp2LHRbMTFdPXgqbytiKnUrXypkK3cqeSx4PXJbMTJdLGI9clsxM10sXz1yWzE0XSx3PXJbMTVdLHRbMTJdPXgqbitiKnMrXypmK3cqbSx0WzEzXT14KmkrYipsK18qaCt3KmcsdFsxNF09eCphK2IqYytfKnArdyp2LHRbMTVdPXgqbytiKnUrXypkK3cqeSx0fU1hdGguaHlwb3R8fChNYXRoLmh5cG90PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cyxlPTAscj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZSs9dFtyXSp0W3JdO3JldHVybiBNYXRoLnNxcnQoZSl9KTt2YXIgbW89cG87dmFyIGdvLHZvLHlvPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFswXT1lWzBdLXJbMF0sdFsxXT1lWzFdLXJbMV0sdFsyXT1lWzJdLXJbMl0sdH07Z289bmV3IGZvKDMpLGZvIT1GbG9hdDMyQXJyYXkmJihnb1swXT0wLGdvWzFdPTAsZ29bMl09MCksdm89Z287ZnVuY3Rpb24geG8odCxlLHIpe3ZhciBuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM107cmV0dXJuIHRbMF09clswXSpuK3JbNF0qaStyWzhdKmErclsxMl0qbyx0WzFdPXJbMV0qbityWzVdKmkrcls5XSphK3JbMTNdKm8sdFsyXT1yWzJdKm4rcls2XSppK3JbMTBdKmErclsxNF0qbyx0WzNdPXJbM10qbityWzddKmkrclsxMV0qYStyWzE1XSpvLHR9IWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oNCk7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTApLHR9KCl9KCk7dmFyIGJvPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdO3JldHVybiBlKmUrcipyfSxfbz0oZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe3ZhciB0PW5ldyBmbygyKTtyZXR1cm4gZm8hPUZsb2F0MzJBcnJheSYmKHRbMF09MCx0WzFdPTApLHR9KCl9KCksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLHVvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgWGEodCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ7cmV0dXJuIG9vKCJjaXJjbGUtcmFkaXVzIix0aGlzLGUpK29vKCJjaXJjbGUtc3Ryb2tlLXdpZHRoIix0aGlzLGUpK3NvKHRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPWxvKHQsdGhpcy5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSxhLmFuZ2xlLG8pLGM9dGhpcy5wYWludC5nZXQoImNpcmNsZS1yYWRpdXMiKS5ldmFsdWF0ZShlLHIpK3RoaXMucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLXdpZHRoIikuZXZhbHVhdGUoZSxyKSx1PSJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKSxmPXU/bDpmdW5jdGlvbih0LGUpe3JldHVybiB0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHdvKHQsZSl9KSl9KGwscyksaD11P2MqbzpjLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKWZvcih2YXIgbT0wLGc9ZFtwXTttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV0seT11P3Y6d28odixzKSx4PWgsYj14byhbXSxbdi54LHYueSwwLDFdLHMpO2lmKCJ2aWV3cG9ydCI9PT10aGlzLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikmJiJtYXAiPT09dGhpcy5wYWludC5nZXQoImNpcmNsZS1waXRjaC1hbGlnbm1lbnQiKT94Kj1iWzNdL2EuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZToibWFwIj09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtc2NhbGUiKSYmInZpZXdwb3J0Ij09PXRoaXMucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50IikmJih4Kj1hLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UvYlszXSksSmEoZix5LHgpKXJldHVybiEwfXJldHVybiExfSxlfShFaSkpO2Z1bmN0aW9uIHdvKHQsZSl7dmFyIHI9eG8oW10sW3QueCx0LnksMCwxXSxlKTtyZXR1cm4gbmV3IGkoclswXS9yWzNdLHJbMV0vclszXSl9dmFyIFRvPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oWGEpO2Z1bmN0aW9uIGtvKHQsZSxyLG4pe3ZhciBpPWUud2lkdGgsYT1lLmhlaWdodDtpZihuKXtpZihuIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpbj1uZXcgVWludDhBcnJheShuLmJ1ZmZlcik7ZWxzZSBpZihuLmxlbmd0aCE9PWkqYSpyKXRocm93IG5ldyBSYW5nZUVycm9yKCJtaXNtYXRjaGVkIGltYWdlIHNpemUiKX1lbHNlIG49bmV3IFVpbnQ4QXJyYXkoaSphKnIpO3JldHVybiB0LndpZHRoPWksdC5oZWlnaHQ9YSx0LmRhdGE9bix0fWZ1bmN0aW9uIEFvKHQsZSxyKXt2YXIgbj1lLndpZHRoLGk9ZS5oZWlnaHQ7aWYobiE9PXQud2lkdGh8fGkhPT10LmhlaWdodCl7dmFyIGE9a28oe30se3dpZHRoOm4saGVpZ2h0Oml9LHIpO01vKHQsYSx7eDowLHk6MH0se3g6MCx5OjB9LHt3aWR0aDpNYXRoLm1pbih0LndpZHRoLG4pLGhlaWdodDpNYXRoLm1pbih0LmhlaWdodCxpKX0sciksdC53aWR0aD1uLHQuaGVpZ2h0PWksdC5kYXRhPWEuZGF0YX19ZnVuY3Rpb24gTW8odCxlLHIsbixpLGEpe2lmKDA9PT1pLndpZHRofHwwPT09aS5oZWlnaHQpcmV0dXJuIGU7aWYoaS53aWR0aD50LndpZHRofHxpLmhlaWdodD50LmhlaWdodHx8ci54PnQud2lkdGgtaS53aWR0aHx8ci55PnQuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBpbWFnZSBjb3B5Iik7aWYoaS53aWR0aD5lLndpZHRofHxpLmhlaWdodD5lLmhlaWdodHx8bi54PmUud2lkdGgtaS53aWR0aHx8bi55PmUuaGVpZ2h0LWkuaGVpZ2h0KXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgZGVzdGluYXRpb24gY29vcmRpbmF0ZXMgZm9yIGltYWdlIGNvcHkiKTtmb3IodmFyIG89dC5kYXRhLHM9ZS5kYXRhLGw9MDtsPGkuaGVpZ2h0O2wrKylmb3IodmFyIGM9KChyLnkrbCkqdC53aWR0aCtyLngpKmEsdT0oKG4ueStsKSplLndpZHRoK24ueCkqYSxmPTA7ZjxpLndpZHRoKmE7ZisrKXNbdStmXT1vW2MrZl07cmV0dXJuIGV9Tm4oIkhlYXRtYXBCdWNrZXQiLFRvLHtvbWl0OlsibGF5ZXJzIl19KTt2YXIgU289ZnVuY3Rpb24odCxlKXtrbyh0aGlzLHQsMSxlKX07U28ucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbih0KXtBbyh0aGlzLHQsMSl9LFNvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgU28oe3dpZHRoOnRoaXMud2lkdGgsaGVpZ2h0OnRoaXMuaGVpZ2h0fSxuZXcgVWludDhBcnJheSh0aGlzLmRhdGEpKX0sU28uY29weT1mdW5jdGlvbih0LGUscixuLGkpe01vKHQsZSxyLG4saSwxKX07dmFyIEVvPWZ1bmN0aW9uKHQsZSl7a28odGhpcyx0LDQsZSl9O0VvLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24odCl7QW8odGhpcyx0LDQpfSxFby5wcm90b3R5cGUucmVwbGFjZT1mdW5jdGlvbih0LGUpe2U/dGhpcy5kYXRhLnNldCh0KTp0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXk/dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyKTp0aGlzLmRhdGE9dH0sRW8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFbyh7d2lkdGg6dGhpcy53aWR0aCxoZWlnaHQ6dGhpcy5oZWlnaHR9LG5ldyBVaW50OEFycmF5KHRoaXMuZGF0YSkpfSxFby5jb3B5PWZ1bmN0aW9uKHQsZSxyLG4saSl7TW8odCxlLHIsbixpLDQpfSxObigiQWxwaGFJbWFnZSIsU28pLE5uKCJSR0JBSW1hZ2UiLEVvKTt2YXIgTG89e3BhaW50Om5ldyBTaSh7ImhlYXRtYXAtcmFkaXVzIjpuZXcgVGkoTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1yYWRpdXMiXSksImhlYXRtYXAtd2VpZ2h0IjpuZXcgVGkoTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC13ZWlnaHQiXSksImhlYXRtYXAtaW50ZW5zaXR5IjpuZXcgd2koTHQucGFpbnRfaGVhdG1hcFsiaGVhdG1hcC1pbnRlbnNpdHkiXSksImhlYXRtYXAtY29sb3IiOm5ldyBNaShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLWNvbG9yIl0pLCJoZWF0bWFwLW9wYWNpdHkiOm5ldyB3aShMdC5wYWludF9oZWF0bWFwWyJoZWF0bWFwLW9wYWNpdHkiXSl9KX07ZnVuY3Rpb24gQ28odCxlKXtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkoMTAyNCksbj17fSxpPTAsYT0wO2k8MjU2O2krKyxhKz00KXtuW2VdPWkvMjU1O3ZhciBvPXQuZXZhbHVhdGUobik7clthKzBdPU1hdGguZmxvb3IoMjU1Km8uci9vLmEpLHJbYSsxXT1NYXRoLmZsb29yKDI1NSpvLmcvby5hKSxyW2ErMl09TWF0aC5mbG9vcigyNTUqby5iL28uYSksclthKzNdPU1hdGguZmxvb3IoMjU1Km8uYSl9cmV0dXJuIG5ldyBFbyh7d2lkdGg6MjU2LGhlaWdodDoxfSxyKX12YXIgUG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLExvKSx0aGlzLl91cGRhdGVDb2xvclJhbXAoKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgVG8odCl9LGUucHJvdG90eXBlLl9oYW5kbGVTcGVjaWFsUGFpbnRQcm9wZXJ0eVVwZGF0ZT1mdW5jdGlvbih0KXsiaGVhdG1hcC1jb2xvciI9PT10JiZ0aGlzLl91cGRhdGVDb2xvclJhbXAoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUNvbG9yUmFtcD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYW5zaXRpb25hYmxlUGFpbnQuX3ZhbHVlc1siaGVhdG1hcC1jb2xvciJdLnZhbHVlLmV4cHJlc3Npb247dGhpcy5jb2xvclJhbXA9Q28odCwiaGVhdG1hcERlbnNpdHkiKSx0aGlzLmNvbG9yUmFtcFRleHR1cmU9bnVsbH0sZS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5oZWF0bWFwRmJvJiYodGhpcy5oZWF0bWFwRmJvLmRlc3Ryb3koKSx0aGlzLmhlYXRtYXBGYm89bnVsbCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpJiYibm9uZSIhPT10aGlzLnZpc2liaWxpdHl9LGV9KEVpKSxJbz17cGFpbnQ6bmV3IFNpKHsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1kaXJlY3Rpb24iOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIl0pLCJoaWxsc2hhZGUtaWxsdW1pbmF0aW9uLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2hpbGxzaGFkZVsiaGlsbHNoYWRlLWlsbHVtaW5hdGlvbi1hbmNob3IiXSksImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iXSksImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiXSksImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1oaWdobGlnaHQtY29sb3IiXSksImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiOm5ldyB3aShMdC5wYWludF9oaWxsc2hhZGVbImhpbGxzaGFkZS1hY2NlbnQtY29sb3IiXSl9KX0sT289ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLElvKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaGFzT2Zmc2NyZWVuUGFzcz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5wYWludC5nZXQoImhpbGxzaGFkZS1leGFnZ2VyYXRpb24iKSYmIm5vbmUiIT09dGhpcy52aXNpYmlsaXR5fSxlfShFaSksem89SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkludDE2In1dLDQpLm1lbWJlcnMsRG89Rm8sUm89Rm87ZnVuY3Rpb24gRm8odCxlLHIpe3I9cnx8Mjt2YXIgbixpLGEsbyxzLGwsYyx1PWUmJmUubGVuZ3RoLGY9dT9lWzBdKnI6dC5sZW5ndGgsaD1Cbyh0LDAsZixyLCEwKSxwPVtdO2lmKCFofHxoLm5leHQ9PT1oLnByZXYpcmV0dXJuIHA7aWYodSYmKGg9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPVtdO2ZvcihpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKW89ZVtpXSpuLHM9aTxhLTE/ZVtpKzFdKm46dC5sZW5ndGgsKGw9Qm8odCxvLHMsbiwhMSkpPT09bC5uZXh0JiYobC5zdGVpbmVyPSEwKSxjLnB1c2goWm8obCkpO2ZvcihjLnNvcnQoR28pLGk9MDtpPGMubGVuZ3RoO2krKylZbyhjW2ldLHIpLHI9Tm8ocixyLm5leHQpO3JldHVybiByfSh0LGUsaCxyKSksdC5sZW5ndGg+ODAqcil7bj1hPXRbMF0saT1vPXRbMV07Zm9yKHZhciBkPXI7ZDxmO2QrPXIpKHM9dFtkXSk8biYmKG49cyksKGw9dFtkKzFdKTxpJiYoaT1sKSxzPmEmJihhPXMpLGw+byYmKG89bCk7Yz0wIT09KGM9TWF0aC5tYXgoYS1uLG8taSkpPzEvYzowfXJldHVybiBqbyhoLHAscixuLGksYykscH1mdW5jdGlvbiBCbyh0LGUscixuLGkpe3ZhciBhLG87aWYoaT09PWxzKHQsZSxyLG4pPjApZm9yKGE9ZTthPHI7YSs9bilvPWFzKGEsdFthXSx0W2ErMV0sbyk7ZWxzZSBmb3IoYT1yLW47YT49ZTthLT1uKW89YXMoYSx0W2FdLHRbYSsxXSxvKTtyZXR1cm4gbyYmJG8obyxvLm5leHQpJiYob3Mobyksbz1vLm5leHQpLG99ZnVuY3Rpb24gTm8odCxlKXtpZighdClyZXR1cm4gdDtlfHwoZT10KTt2YXIgcixuPXQ7ZG97aWYocj0hMSxuLnN0ZWluZXJ8fCEkbyhuLG4ubmV4dCkmJjAhPT1RbyhuLnByZXYsbixuLm5leHQpKW49bi5uZXh0O2Vsc2V7aWYob3MobiksKG49ZT1uLnByZXYpPT09bi5uZXh0KWJyZWFrO3I9ITB9fXdoaWxlKHJ8fG4hPT1lKTtyZXR1cm4gZX1mdW5jdGlvbiBqbyh0LGUscixuLGksYSxvKXtpZih0KXshbyYmYSYmZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dDtkb3tudWxsPT09aS56JiYoaS56PVhvKGkueCxpLnksZSxyLG4pKSxpLnByZXZaPWkucHJldixpLm5leHRaPWkubmV4dCxpPWkubmV4dH13aGlsZShpIT09dCk7aS5wcmV2Wi5uZXh0Wj1udWxsLGkucHJldlo9bnVsbCxmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scyxsLGM9MTtkb3tmb3Iocj10LHQ9bnVsbCxhPW51bGwsbz0wO3I7KXtmb3IobysrLG49cixzPTAsZT0wO2U8YyYmKHMrKyxuPW4ubmV4dFopO2UrKyk7Zm9yKGw9YztzPjB8fGw+MCYmbjspMCE9PXMmJigwPT09bHx8IW58fHIuejw9bi56KT8oaT1yLHI9ci5uZXh0WixzLS0pOihpPW4sbj1uLm5leHRaLGwtLSksYT9hLm5leHRaPWk6dD1pLGkucHJldlo9YSxhPWk7cj1ufWEubmV4dFo9bnVsbCxjKj0yfXdoaWxlKG8+MSl9KGkpfSh0LG4saSxhKTtmb3IodmFyIHMsbCxjPXQ7dC5wcmV2IT09dC5uZXh0OylpZihzPXQucHJldixsPXQubmV4dCxhP1ZvKHQsbixpLGEpOlVvKHQpKWUucHVzaChzLmkvciksZS5wdXNoKHQuaS9yKSxlLnB1c2gobC5pL3IpLG9zKHQpLHQ9bC5uZXh0LGM9bC5uZXh0O2Vsc2UgaWYoKHQ9bCk9PT1jKXtvPzE9PT1vP2pvKHQ9SG8oTm8odCksZSxyKSxlLHIsbixpLGEsMik6Mj09PW8mJnFvKHQsZSxyLG4saSxhKTpqbyhObyh0KSxlLHIsbixpLGEsMSk7YnJlYWt9fX1mdW5jdGlvbiBVbyh0KXt2YXIgZT10LnByZXYscj10LG49dC5uZXh0O2lmKFFvKGUscixuKT49MClyZXR1cm4hMTtmb3IodmFyIGk9dC5uZXh0Lm5leHQ7aSE9PXQucHJldjspe2lmKEpvKGUueCxlLnksci54LHIueSxuLngsbi55LGkueCxpLnkpJiZRbyhpLnByZXYsaSxpLm5leHQpPj0wKXJldHVybiExO2k9aS5uZXh0fXJldHVybiEwfWZ1bmN0aW9uIFZvKHQsZSxyLG4pe3ZhciBpPXQucHJldixhPXQsbz10Lm5leHQ7aWYoUW8oaSxhLG8pPj0wKXJldHVybiExO2Zvcih2YXIgcz1pLng8YS54P2kueDxvLng/aS54Om8ueDphLng8by54P2EueDpvLngsbD1pLnk8YS55P2kueTxvLnk/aS55Om8ueTphLnk8by55P2EueTpvLnksYz1pLng+YS54P2kueD5vLng/aS54Om8ueDphLng+by54P2EueDpvLngsdT1pLnk+YS55P2kueT5vLnk/aS55Om8ueTphLnk+by55P2EueTpvLnksZj1YbyhzLGwsZSxyLG4pLGg9WG8oYyx1LGUscixuKSxwPXQucHJldlosZD10Lm5leHRaO3AmJnAuej49ZiYmZCYmZC56PD1oOyl7aWYocCE9PXQucHJldiYmcCE9PXQubmV4dCYmSm8oaS54LGkueSxhLngsYS55LG8ueCxvLnkscC54LHAueSkmJlFvKHAucHJldixwLHAubmV4dCk+PTApcmV0dXJuITE7aWYocD1wLnByZXZaLGQhPT10LnByZXYmJmQhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZRbyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1mb3IoO3AmJnAuej49Zjspe2lmKHAhPT10LnByZXYmJnAhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LHAueCxwLnkpJiZRbyhwLnByZXYscCxwLm5leHQpPj0wKXJldHVybiExO3A9cC5wcmV2Wn1mb3IoO2QmJmQuejw9aDspe2lmKGQhPT10LnByZXYmJmQhPT10Lm5leHQmJkpvKGkueCxpLnksYS54LGEueSxvLngsby55LGQueCxkLnkpJiZRbyhkLnByZXYsZCxkLm5leHQpPj0wKXJldHVybiExO2Q9ZC5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBIbyh0LGUscil7dmFyIG49dDtkb3t2YXIgaT1uLnByZXYsYT1uLm5leHQubmV4dDshJG8oaSxhKSYmdHMoaSxuLG4ubmV4dCxhKSYmbnMoaSxhKSYmbnMoYSxpKSYmKGUucHVzaChpLmkvciksZS5wdXNoKG4uaS9yKSxlLnB1c2goYS5pL3IpLG9zKG4pLG9zKG4ubmV4dCksbj10PWEpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gTm8obil9ZnVuY3Rpb24gcW8odCxlLHIsbixpLGEpe3ZhciBvPXQ7ZG97Zm9yKHZhciBzPW8ubmV4dC5uZXh0O3MhPT1vLnByZXY7KXtpZihvLmkhPT1zLmkmJktvKG8scykpe3ZhciBsPWlzKG8scyk7cmV0dXJuIG89Tm8obyxvLm5leHQpLGw9Tm8obCxsLm5leHQpLGpvKG8sZSxyLG4saSxhKSx2b2lkIGpvKGwsZSxyLG4saSxhKX1zPXMubmV4dH1vPW8ubmV4dH13aGlsZShvIT09dCl9ZnVuY3Rpb24gR28odCxlKXtyZXR1cm4gdC54LWUueH1mdW5jdGlvbiBZbyh0LGUpe2lmKGU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUsaT10LngsYT10Lnksbz0tMS8wO2Rve2lmKGE8PW4ueSYmYT49bi5uZXh0LnkmJm4ubmV4dC55IT09bi55KXt2YXIgcz1uLngrKGEtbi55KSoobi5uZXh0Lngtbi54KS8obi5uZXh0Lnktbi55KTtpZihzPD1pJiZzPm8pe2lmKG89cyxzPT09aSl7aWYoYT09PW4ueSlyZXR1cm4gbjtpZihhPT09bi5uZXh0LnkpcmV0dXJuIG4ubmV4dH1yPW4ueDxuLm5leHQueD9uOm4ubmV4dH19bj1uLm5leHR9d2hpbGUobiE9PWUpO2lmKCFyKXJldHVybiBudWxsO2lmKGk9PT1vKXJldHVybiByO3ZhciBsLGM9cix1PXIueCxmPXIueSxoPTEvMDtuPXI7ZG97aT49bi54JiZuLng+PXUmJmkhPT1uLngmJkpvKGE8Zj9pOm8sYSx1LGYsYTxmP286aSxhLG4ueCxuLnkpJiYobD1NYXRoLmFicyhhLW4ueSkvKGktbi54KSxucyhuLHQpJiYobDxofHxsPT09aCYmKG4ueD5yLnh8fG4ueD09PXIueCYmV28ocixuKSkpJiYocj1uLGg9bCkpLG49bi5uZXh0fXdoaWxlKG4hPT1jKTtyZXR1cm4gcn0odCxlKSl7dmFyIHI9aXMoZSx0KTtObyhlLGUubmV4dCksTm8ocixyLm5leHQpfX1mdW5jdGlvbiBXbyh0LGUpe3JldHVybiBRbyh0LnByZXYsdCxlLnByZXYpPDAmJlFvKGUubmV4dCx0LHQubmV4dCk8MH1mdW5jdGlvbiBYbyh0LGUscixuLGkpe3JldHVybih0PTE0MzE2NTU3NjUmKCh0PTg1ODk5MzQ1OSYoKHQ9MjUyNjQ1MTM1JigodD0xNjcxMTkzNSYoKHQ9MzI3NjcqKHQtcikqaSl8dDw8OCkpfHQ8PDQpKXx0PDwyKSl8dDw8MSkpfChlPTE0MzE2NTU3NjUmKChlPTg1ODk5MzQ1OSYoKGU9MjUyNjQ1MTM1JigoZT0xNjcxMTkzNSYoKGU9MzI3NjcqKGUtbikqaSl8ZTw8OCkpfGU8PDQpKXxlPDwyKSl8ZTw8MSkpPDwxfWZ1bmN0aW9uIFpvKHQpe3ZhciBlPXQscj10O2RveyhlLng8ci54fHxlLng9PT1yLngmJmUueTxyLnkpJiYocj1lKSxlPWUubmV4dH13aGlsZShlIT09dCk7cmV0dXJuIHJ9ZnVuY3Rpb24gSm8odCxlLHIsbixpLGEsbyxzKXtyZXR1cm4oaS1vKSooZS1zKS0odC1vKSooYS1zKT49MCYmKHQtbykqKG4tcyktKHItbykqKGUtcyk+PTAmJihyLW8pKihhLXMpLShpLW8pKihuLXMpPj0wfWZ1bmN0aW9uIEtvKHQsZSl7cmV0dXJuIHQubmV4dC5pIT09ZS5pJiZ0LnByZXYuaSE9PWUuaSYmIWZ1bmN0aW9uKHQsZSl7dmFyIHI9dDtkb3tpZihyLmkhPT10LmkmJnIubmV4dC5pIT09dC5pJiZyLmkhPT1lLmkmJnIubmV4dC5pIT09ZS5pJiZ0cyhyLHIubmV4dCx0LGUpKXJldHVybiEwO3I9ci5uZXh0fXdoaWxlKHIhPT10KTtyZXR1cm4hMX0odCxlKSYmKG5zKHQsZSkmJm5zKGUsdCkmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9dCxuPSExLGk9KHQueCtlLngpLzIsYT0odC55K2UueSkvMjtkb3tyLnk+YSE9ci5uZXh0Lnk+YSYmci5uZXh0LnkhPT1yLnkmJmk8KHIubmV4dC54LXIueCkqKGEtci55KS8oci5uZXh0Lnktci55KStyLngmJihuPSFuKSxyPXIubmV4dH13aGlsZShyIT09dCk7cmV0dXJuIG59KHQsZSkmJihRbyh0LnByZXYsdCxlLnByZXYpfHxRbyh0LGUucHJldixlKSl8fCRvKHQsZSkmJlFvKHQucHJldix0LHQubmV4dCk+MCYmUW8oZS5wcmV2LGUsZS5uZXh0KT4wKX1mdW5jdGlvbiBRbyh0LGUscil7cmV0dXJuKGUueS10LnkpKihyLngtZS54KS0oZS54LXQueCkqKHIueS1lLnkpfWZ1bmN0aW9uICRvKHQsZSl7cmV0dXJuIHQueD09PWUueCYmdC55PT09ZS55fWZ1bmN0aW9uIHRzKHQsZSxyLG4pe3ZhciBpPXJzKFFvKHQsZSxyKSksYT1ycyhRbyh0LGUsbikpLG89cnMoUW8ocixuLHQpKSxzPXJzKFFvKHIsbixlKSk7cmV0dXJuIGkhPT1hJiZvIT09c3x8KCEoMCE9PWl8fCFlcyh0LHIsZSkpfHwoISgwIT09YXx8IWVzKHQsbixlKSl8fCghKDAhPT1vfHwhZXMocix0LG4pKXx8ISgwIT09c3x8IWVzKHIsZSxuKSkpKSl9ZnVuY3Rpb24gZXModCxlLHIpe3JldHVybiBlLng8PU1hdGgubWF4KHQueCxyLngpJiZlLng+PU1hdGgubWluKHQueCxyLngpJiZlLnk8PU1hdGgubWF4KHQueSxyLnkpJiZlLnk+PU1hdGgubWluKHQueSxyLnkpfWZ1bmN0aW9uIHJzKHQpe3JldHVybiB0PjA/MTp0PDA/LTE6MH1mdW5jdGlvbiBucyh0LGUpe3JldHVybiBRbyh0LnByZXYsdCx0Lm5leHQpPDA/UW8odCxlLHQubmV4dCk+PTAmJlFvKHQsdC5wcmV2LGUpPj0wOlFvKHQsZSx0LnByZXYpPDB8fFFvKHQsdC5uZXh0LGUpPDB9ZnVuY3Rpb24gaXModCxlKXt2YXIgcj1uZXcgc3ModC5pLHQueCx0LnkpLG49bmV3IHNzKGUuaSxlLngsZS55KSxpPXQubmV4dCxhPWUucHJldjtyZXR1cm4gdC5uZXh0PWUsZS5wcmV2PXQsci5uZXh0PWksaS5wcmV2PXIsbi5uZXh0PXIsci5wcmV2PW4sYS5uZXh0PW4sbi5wcmV2PWEsbn1mdW5jdGlvbiBhcyh0LGUscixuKXt2YXIgaT1uZXcgc3ModCxlLHIpO3JldHVybiBuPyhpLm5leHQ9bi5uZXh0LGkucHJldj1uLG4ubmV4dC5wcmV2PWksbi5uZXh0PWkpOihpLnByZXY9aSxpLm5leHQ9aSksaX1mdW5jdGlvbiBvcyh0KXt0Lm5leHQucHJldj10LnByZXYsdC5wcmV2Lm5leHQ9dC5uZXh0LHQucHJldlomJih0LnByZXZaLm5leHRaPXQubmV4dFopLHQubmV4dFomJih0Lm5leHRaLnByZXZaPXQucHJldlopfWZ1bmN0aW9uIHNzKHQsZSxyKXt0aGlzLmk9dCx0aGlzLng9ZSx0aGlzLnk9cix0aGlzLnByZXY9bnVsbCx0aGlzLm5leHQ9bnVsbCx0aGlzLno9bnVsbCx0aGlzLnByZXZaPW51bGwsdGhpcy5uZXh0Wj1udWxsLHRoaXMuc3RlaW5lcj0hMX1mdW5jdGlvbiBscyh0LGUscixuKXtmb3IodmFyIGk9MCxhPWUsbz1yLW47YTxyO2ErPW4paSs9KHRbb10tdFthXSkqKHRbYSsxXSt0W28rMV0pLG89YTtyZXR1cm4gaX1mdW5jdGlvbiBjcyh0LGUscixuLGkpeyFmdW5jdGlvbiB0KGUscixuLGksYSl7Zm9yKDtpPm47KXtpZihpLW4+NjAwKXt2YXIgbz1pLW4rMSxzPXItbisxLGw9TWF0aC5sb2cobyksYz0uNSpNYXRoLmV4cCgyKmwvMyksdT0uNSpNYXRoLnNxcnQobCpjKihvLWMpL28pKihzLW8vMjwwPy0xOjEpLGY9TWF0aC5tYXgobixNYXRoLmZsb29yKHItcypjL28rdSkpLGg9TWF0aC5taW4oaSxNYXRoLmZsb29yKHIrKG8tcykqYy9vK3UpKTt0KGUscixmLGgsYSl9dmFyIHA9ZVtyXSxkPW4sbT1pO2Zvcih1cyhlLG4sciksYShlW2ldLHApPjAmJnVzKGUsbixpKTtkPG07KXtmb3IodXMoZSxkLG0pLGQrKyxtLS07YShlW2RdLHApPDA7KWQrKztmb3IoO2EoZVttXSxwKT4wOyltLS19MD09PWEoZVtuXSxwKT91cyhlLG4sbSk6KG0rKyx1cyhlLG0saSkpLG08PXImJihuPW0rMSkscjw9bSYmKGk9bS0xKX19KHQsZSxyfHwwLG58fHQubGVuZ3RoLTEsaXx8ZnMpfWZ1bmN0aW9uIHVzKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gZnModCxlKXtyZXR1cm4gdDxlPy0xOnQ+ZT8xOjB9ZnVuY3Rpb24gaHModCxlKXt2YXIgcj10Lmxlbmd0aDtpZihyPD0xKXJldHVyblt0XTtmb3IodmFyIG4saSxhPVtdLG89MDtvPHI7bysrKXt2YXIgcz1UKHRbb10pOzAhPT1zJiYodFtvXS5hcmVhPU1hdGguYWJzKHMpLHZvaWQgMD09PWkmJihpPXM8MCksaT09PXM8MD8obiYmYS5wdXNoKG4pLG49W3Rbb11dKTpuLnB1c2godFtvXSkpfWlmKG4mJmEucHVzaChuKSxlPjEpZm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspYVtsXS5sZW5ndGg8PWV8fChjcyhhW2xdLGUsMSxhW2xdLmxlbmd0aC0xLHBzKSxhW2xdPWFbbF0uc2xpY2UoMCxlKSk7cmV0dXJuIGF9ZnVuY3Rpb24gcHModCxlKXtyZXR1cm4gZS5hcmVhLXQuYXJlYX1mdW5jdGlvbiBkcyh0LGUscil7Zm9yKHZhciBuPXIucGF0dGVybkRlcGVuZGVuY2llcyxpPSExLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLnBhaW50LmdldCh0KyItcGF0dGVybiIpO3MuaXNDb25zdGFudCgpfHwoaT0hMCk7dmFyIGw9cy5jb25zdGFudE9yKG51bGwpO2wmJihpPSEwLG5bbC50b109ITAsbltsLmZyb21dPSEwKX1yZXR1cm4gaX1mdW5jdGlvbiBtcyh0LGUscixuLGkpe2Zvcih2YXIgYT1pLnBhdHRlcm5EZXBlbmRlbmNpZXMsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLnBhaW50LmdldCh0KyItcGF0dGVybiIpLnZhbHVlO2lmKCJjb25zdGFudCIhPT1jLmtpbmQpe3ZhciB1PWMuZXZhbHVhdGUoe3pvb206bi0xfSxyLHt9LGkuYXZhaWxhYmxlSW1hZ2VzKSxmPWMuZXZhbHVhdGUoe3pvb206bn0scix7fSxpLmF2YWlsYWJsZUltYWdlcyksaD1jLmV2YWx1YXRlKHt6b29tOm4rMX0scix7fSxpLmF2YWlsYWJsZUltYWdlcyk7dT11JiZ1Lm5hbWU/dS5uYW1lOnUsZj1mJiZmLm5hbWU/Zi5uYW1lOmYsaD1oJiZoLm5hbWU/aC5uYW1lOmgsYVt1XT0hMCxhW2ZdPSEwLGFbaF09ITAsci5wYXR0ZXJuc1tsLmlkXT17bWluOnUsbWlkOmYsbWF4Omh9fX1yZXR1cm4gcn1Gby5kZXZpYXRpb249ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ZSYmZS5sZW5ndGgsYT1pP2VbMF0qcjp0Lmxlbmd0aCxvPU1hdGguYWJzKGxzKHQsMCxhLHIpKTtpZihpKWZvcih2YXIgcz0wLGw9ZS5sZW5ndGg7czxsO3MrKyl7dmFyIGM9ZVtzXSpyLHU9czxsLTE/ZVtzKzFdKnI6dC5sZW5ndGg7by09TWF0aC5hYnMobHModCxjLHUscikpfXZhciBmPTA7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrPTMpe3ZhciBoPW5bc10qcixwPW5bcysxXSpyLGQ9bltzKzJdKnI7Zis9TWF0aC5hYnMoKHRbaF0tdFtkXSkqKHRbcCsxXS10W2grMV0pLSh0W2hdLXRbcF0pKih0W2QrMV0tdFtoKzFdKSl9cmV0dXJuIDA9PT1vJiYwPT09Zj8wOk1hdGguYWJzKChmLW8pL28pfSxGby5mbGF0dGVuPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdWzBdLmxlbmd0aCxyPXt2ZXJ0aWNlczpbXSxob2xlczpbXSxkaW1lbnNpb25zOmV9LG49MCxpPTA7aTx0Lmxlbmd0aDtpKyspe2Zvcih2YXIgYT0wO2E8dFtpXS5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288ZTtvKyspci52ZXJ0aWNlcy5wdXNoKHRbaV1bYV1bb10pO2k+MCYmKG4rPXRbaS0xXS5sZW5ndGgsci5ob2xlcy5wdXNoKG4pKX1yZXR1cm4gcn0sRG8uZGVmYXVsdD1Sbzt2YXIgZ3M9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5wYXR0ZXJuRmVhdHVyZXM9W10sdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgemksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLmluZGV4QXJyYXkyPW5ldyBRaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoem8sdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnNlZ21lbnRzMj1uZXcgcGEsdGhpcy5zdGF0ZURlcGVuZGVudExheWVySWRzPXRoaXMubGF5ZXJzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNTdGF0ZURlcGVuZGVudCgpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSl9O2dzLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5oYXNQYXR0ZXJuPWRzKCJmaWxsIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49dGhpcy5sYXllcnNbMF0ubGF5b3V0LmdldCgiZmlsbC1zb3J0LWtleSIpLGk9W10sYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLmZlYXR1cmUsYz1zLmlkLHU9cy5pbmRleCxmPXMuc291cmNlTGF5ZXJJbmRleCxoPXRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLm5lZWRHZW9tZXRyeSxwPXt0eXBlOmwudHlwZSxpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLGdlb21ldHJ5Omg/WWEobCk6W119O2lmKHRoaXMubGF5ZXJzWzBdLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihuZXcgcGkodGhpcy56b29tKSxwLHIpKXtofHwocC5nZW9tZXRyeT1ZYShsKSk7dmFyIGQ9bj9uLmV2YWx1YXRlKHAse30scixlLmF2YWlsYWJsZUltYWdlcyk6dm9pZCAwLG09e2lkOmMscHJvcGVydGllczpsLnByb3BlcnRpZXMsdHlwZTpsLnR5cGUsc291cmNlTGF5ZXJJbmRleDpmLGluZGV4OnUsZ2VvbWV0cnk6cC5nZW9tZXRyeSxwYXR0ZXJuczp7fSxzb3J0S2V5OmR9O2kucHVzaChtKX19biYmaS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgZz0wLHY9aTtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ10seD15LGI9eC5nZW9tZXRyeSxfPXguaW5kZXgsdz14LnNvdXJjZUxheWVySW5kZXg7aWYodGhpcy5oYXNQYXR0ZXJuKXt2YXIgVD1tcygiZmlsbCIsdGhpcy5sYXllcnMseSx0aGlzLnpvb20sZSk7dGhpcy5wYXR0ZXJuRmVhdHVyZXMucHVzaChUKX1lbHNlIHRoaXMuYWRkRmVhdHVyZSh5LGIsXyxyLHt9KTt2YXIgaz10W19dLmZlYXR1cmU7ZS5mZWF0dXJlSW5kZXguaW5zZXJ0KGssYixfLHcsdGhpcy5pbmRleCl9fSxncy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLmxlbmd0aCYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBkYXRlUGFpbnRBcnJheXModCxlLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMscil9LGdzLnByb3RvdHlwZS5hZGRGZWF0dXJlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT10aGlzLnBhdHRlcm5GZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5hZGRGZWF0dXJlKGEsYS5nZW9tZXRyeSxhLmluZGV4LGUscil9fSxncy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LGdzLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxncy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LHpvKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmluZGV4QnVmZmVyMj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheTIpKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGxvYWQodCksdGhpcy51cGxvYWRlZD0hMH0sZ3MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyMi5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMyLmRlc3Ryb3koKSl9LGdzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTAsbz1ocyhlLDUwMCk7YTxvLmxlbmd0aDthKz0xKXtmb3IodmFyIHM9b1thXSxsPTAsYz0wLHU9cztjPHUubGVuZ3RoO2MrPTEpe2wrPXVbY10ubGVuZ3RofWZvcih2YXIgZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpLGg9Zi52ZXJ0ZXhMZW5ndGgscD1bXSxkPVtdLG09MCxnPXM7bTxnLmxlbmd0aDttKz0xKXt2YXIgdj1nW21dO2lmKDAhPT12Lmxlbmd0aCl7diE9PXNbMF0mJmQucHVzaChwLmxlbmd0aC8yKTt2YXIgeT10aGlzLnNlZ21lbnRzMi5wcmVwYXJlU2VnbWVudCh2Lmxlbmd0aCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheTIpLHg9eS52ZXJ0ZXhMZW5ndGg7dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5lbXBsYWNlQmFjayh2WzBdLngsdlswXS55KSx0aGlzLmluZGV4QXJyYXkyLmVtcGxhY2VCYWNrKHgrdi5sZW5ndGgtMSx4KSxwLnB1c2godlswXS54KSxwLnB1c2godlswXS55KTtmb3IodmFyIGI9MTtiPHYubGVuZ3RoO2IrKyl0aGlzLmxheW91dFZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHZbYl0ueCx2W2JdLnkpLHRoaXMuaW5kZXhBcnJheTIuZW1wbGFjZUJhY2soeCtiLTEseCtiKSxwLnB1c2godltiXS54KSxwLnB1c2godltiXS55KTt5LnZlcnRleExlbmd0aCs9di5sZW5ndGgseS5wcmltaXRpdmVMZW5ndGgrPXYubGVuZ3RofX1mb3IodmFyIF89RG8ocCxkKSx3PTA7dzxfLmxlbmd0aDt3Kz0zKXRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhoK19bd10saCtfW3crMV0saCtfW3crMl0pO2YudmVydGV4TGVuZ3RoKz1sLGYucHJpbWl0aXZlTGVuZ3RoKz1fLmxlbmd0aC8zfXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLGksbil9LE5uKCJGaWxsQnVja2V0Iixncyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIHZzPW5ldyBTaSh7ImZpbGwtc29ydC1rZXkiOm5ldyBUaShMdC5sYXlvdXRfZmlsbFsiZmlsbC1zb3J0LWtleSJdKX0pLHlzPXtwYWludDpuZXcgU2koeyJmaWxsLWFudGlhbGlhcyI6bmV3IHdpKEx0LnBhaW50X2ZpbGxbImZpbGwtYW50aWFsaWFzIl0pLCJmaWxsLW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLW9wYWNpdHkiXSksImZpbGwtY29sb3IiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLWNvbG9yIl0pLCJmaWxsLW91dGxpbmUtY29sb3IiOm5ldyBUaShMdC5wYWludF9maWxsWyJmaWxsLW91dGxpbmUtY29sb3IiXSksImZpbGwtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfZmlsbFsiZmlsbC10cmFuc2xhdGUiXSksImZpbGwtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2ZpbGxbImZpbGwtdHJhbnNsYXRlLWFuY2hvciJdKSwiZmlsbC1wYXR0ZXJuIjpuZXcga2koTHQucGFpbnRfZmlsbFsiZmlsbC1wYXR0ZXJuIl0pfSksbGF5b3V0OnZzfSx4cz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUseXMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlLnJlY2FsY3VsYXRlLmNhbGwodGhpcyxlLHIpO3ZhciBuPXRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1vdXRsaW5lLWNvbG9yIl07ImNvbnN0YW50Ij09PW4udmFsdWUua2luZCYmdm9pZCAwPT09bi52YWx1ZS52YWx1ZSYmKHRoaXMucGFpbnQuX3ZhbHVlc1siZmlsbC1vdXRsaW5lLWNvbG9yIl09dGhpcy5wYWludC5fdmFsdWVzWyJmaWxsLWNvbG9yIl0pfSxlLnByb3RvdHlwZS5jcmVhdGVCdWNrZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBncyh0KX0sZS5wcm90b3R5cGUucXVlcnlSYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gc28odGhpcy5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5xdWVyeUludGVyc2VjdHNGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3JldHVybiBLYShsbyh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJmaWxsLXRyYW5zbGF0ZS1hbmNob3IiKSxhLmFuZ2xlLG8pLG4pfSxlLnByb3RvdHlwZS5pc1RpbGVDbGlwcGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGV9KEVpKSxicz1JaShbe25hbWU6ImFfcG9zIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9ub3JtYWxfZWQiLGNvbXBvbmVudHM6NCx0eXBlOiJJbnQxNiJ9XSw0KS5tZW1iZXJzLF9zPXdzO2Z1bmN0aW9uIHdzKHQsZSxyLG4saSl7dGhpcy5wcm9wZXJ0aWVzPXt9LHRoaXMuZXh0ZW50PXIsdGhpcy50eXBlPTAsdGhpcy5fcGJmPXQsdGhpcy5fZ2VvbWV0cnk9LTEsdGhpcy5fa2V5cz1uLHRoaXMuX3ZhbHVlcz1pLHQucmVhZEZpZWxkcyhUcyx0aGlzLGUpfWZ1bmN0aW9uIFRzKHQsZSxyKXsxPT10P2UuaWQ9ci5yZWFkVmFyaW50KCk6Mj09dD9mdW5jdGlvbih0LGUpe3ZhciByPXQucmVhZFZhcmludCgpK3QucG9zO2Zvcig7dC5wb3M8cjspe3ZhciBuPWUuX2tleXNbdC5yZWFkVmFyaW50KCldLGk9ZS5fdmFsdWVzW3QucmVhZFZhcmludCgpXTtlLnByb3BlcnRpZXNbbl09aX19KHIsZSk6Mz09dD9lLnR5cGU9ci5yZWFkVmFyaW50KCk6ND09dCYmKGUuX2dlb21ldHJ5PXIucG9zKX1mdW5jdGlvbiBrcyh0KXtmb3IodmFyIGUscixuPTAsaT0wLGE9dC5sZW5ndGgsbz1hLTE7aTxhO289aSsrKWU9dFtpXSxuKz0oKHI9dFtvXSkueC1lLngpKihlLnkrci55KTtyZXR1cm4gbn13cy50eXBlcz1bIlVua25vd24iLCJQb2ludCIsIkxpbmVTdHJpbmciLCJQb2x5Z29uIl0sd3MucHJvdG90eXBlLmxvYWRHZW9tZXRyeT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3BiZjt0LnBvcz10aGlzLl9nZW9tZXRyeTtmb3IodmFyIGUscj10LnJlYWRWYXJpbnQoKSt0LnBvcyxuPTEsYT0wLG89MCxzPTAsbD1bXTt0LnBvczxyOyl7aWYoYTw9MCl7dmFyIGM9dC5yZWFkVmFyaW50KCk7bj03JmMsYT1jPj4zfWlmKGEtLSwxPT09bnx8Mj09PW4pbys9dC5yZWFkU1ZhcmludCgpLHMrPXQucmVhZFNWYXJpbnQoKSwxPT09biYmKGUmJmwucHVzaChlKSxlPVtdKSxlLnB1c2gobmV3IGkobyxzKSk7ZWxzZXtpZig3IT09bil0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY29tbWFuZCAiK24pO2UmJmUucHVzaChlWzBdLmNsb25lKCkpfX1yZXR1cm4gZSYmbC5wdXNoKGUpLGx9LHdzLnByb3RvdHlwZS5iYm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcGJmO3QucG9zPXRoaXMuX2dlb21ldHJ5O2Zvcih2YXIgZT10LnJlYWRWYXJpbnQoKSt0LnBvcyxyPTEsbj0wLGk9MCxhPTAsbz0xLzAscz0tMS8wLGw9MS8wLGM9LTEvMDt0LnBvczxlOyl7aWYobjw9MCl7dmFyIHU9dC5yZWFkVmFyaW50KCk7cj03JnUsbj11Pj4zfWlmKG4tLSwxPT09cnx8Mj09PXIpKGkrPXQucmVhZFNWYXJpbnQoKSk8byYmKG89aSksaT5zJiYocz1pKSwoYSs9dC5yZWFkU1ZhcmludCgpKTxsJiYobD1hKSxhPmMmJihjPWEpO2Vsc2UgaWYoNyE9PXIpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGNvbW1hbmQgIityKX1yZXR1cm5bbyxsLHMsY119LHdzLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT10aGlzLmV4dGVudCpNYXRoLnBvdygyLHIpLG89dGhpcy5leHRlbnQqdCxzPXRoaXMuZXh0ZW50KmUsbD10aGlzLmxvYWRHZW9tZXRyeSgpLGM9d3MudHlwZXNbdGhpcy50eXBlXTtmdW5jdGlvbiB1KHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdLG49MTgwLTM2MCooci55K3MpL2E7dFtlXT1bMzYwKihyLngrbykvYS0xODAsMzYwL01hdGguUEkqTWF0aC5hdGFuKE1hdGguZXhwKG4qTWF0aC5QSS8xODApKS05MF19fXN3aXRjaCh0aGlzLnR5cGUpe2Nhc2UgMTp2YXIgZj1bXTtmb3Iobj0wO248bC5sZW5ndGg7bisrKWZbbl09bFtuXVswXTt1KGw9Zik7YnJlYWs7Y2FzZSAyOmZvcihuPTA7bjxsLmxlbmd0aDtuKyspdShsW25dKTticmVhaztjYXNlIDM6Zm9yKGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9MSlyZXR1cm5bdF07Zm9yKHZhciByLG4saT1bXSxhPTA7YTxlO2ErKyl7dmFyIG89a3ModFthXSk7MCE9PW8mJih2b2lkIDA9PT1uJiYobj1vPDApLG49PT1vPDA/KHImJmkucHVzaChyKSxyPVt0W2FdXSk6ci5wdXNoKHRbYV0pKX1yJiZpLnB1c2gocik7cmV0dXJuIGl9KGwpLG49MDtuPGwubGVuZ3RoO24rKylmb3IoaT0wO2k8bFtuXS5sZW5ndGg7aSsrKXUobFtuXVtpXSl9MT09PWwubGVuZ3RoP2w9bFswXTpjPSJNdWx0aSIrYzt2YXIgaD17dHlwZToiRmVhdHVyZSIsZ2VvbWV0cnk6e3R5cGU6Yyxjb29yZGluYXRlczpsfSxwcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllc307cmV0dXJuImlkImluIHRoaXMmJihoLmlkPXRoaXMuaWQpLGh9O3ZhciBBcz1NcztmdW5jdGlvbiBNcyh0LGUpe3RoaXMudmVyc2lvbj0xLHRoaXMubmFtZT1udWxsLHRoaXMuZXh0ZW50PTQwOTYsdGhpcy5sZW5ndGg9MCx0aGlzLl9wYmY9dCx0aGlzLl9rZXlzPVtdLHRoaXMuX3ZhbHVlcz1bXSx0aGlzLl9mZWF0dXJlcz1bXSx0LnJlYWRGaWVsZHMoU3MsdGhpcyxlKSx0aGlzLmxlbmd0aD10aGlzLl9mZWF0dXJlcy5sZW5ndGh9ZnVuY3Rpb24gU3ModCxlLHIpezE1PT09dD9lLnZlcnNpb249ci5yZWFkVmFyaW50KCk6MT09PXQ/ZS5uYW1lPXIucmVhZFN0cmluZygpOjU9PT10P2UuZXh0ZW50PXIucmVhZFZhcmludCgpOjI9PT10P2UuX2ZlYXR1cmVzLnB1c2goci5wb3MpOjM9PT10P2UuX2tleXMucHVzaChyLnJlYWRTdHJpbmcoKSk6ND09PXQmJmUuX3ZhbHVlcy5wdXNoKGZ1bmN0aW9uKHQpe3ZhciBlPW51bGwscj10LnJlYWRWYXJpbnQoKSt0LnBvcztmb3IoO3QucG9zPHI7KXt2YXIgbj10LnJlYWRWYXJpbnQoKT4+MztlPTE9PT1uP3QucmVhZFN0cmluZygpOjI9PT1uP3QucmVhZEZsb2F0KCk6Mz09PW4/dC5yZWFkRG91YmxlKCk6ND09PW4/dC5yZWFkVmFyaW50NjQoKTo1PT09bj90LnJlYWRWYXJpbnQoKTo2PT09bj90LnJlYWRTVmFyaW50KCk6Nz09PW4/dC5yZWFkQm9vbGVhbigpOm51bGx9cmV0dXJuIGV9KHIpKX1mdW5jdGlvbiBFcyh0LGUscil7aWYoMz09PXQpe3ZhciBuPW5ldyBBcyhyLHIucmVhZFZhcmludCgpK3IucG9zKTtuLmxlbmd0aCYmKGVbbi5uYW1lXT1uKX19TXMucHJvdG90eXBlLmZlYXR1cmU9ZnVuY3Rpb24odCl7aWYodDwwfHx0Pj10aGlzLl9mZWF0dXJlcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJmZWF0dXJlIGluZGV4IG91dCBvZiBib3VuZHMiKTt0aGlzLl9wYmYucG9zPXRoaXMuX2ZlYXR1cmVzW3RdO3ZhciBlPXRoaXMuX3BiZi5yZWFkVmFyaW50KCkrdGhpcy5fcGJmLnBvcztyZXR1cm4gbmV3IF9zKHRoaXMuX3BiZixlLHRoaXMuZXh0ZW50LHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzKX07dmFyIExzPXtWZWN0b3JUaWxlOmZ1bmN0aW9uKHQsZSl7dGhpcy5sYXllcnM9dC5yZWFkRmllbGRzKEVzLHt9LGUpfSxWZWN0b3JUaWxlRmVhdHVyZTpfcyxWZWN0b3JUaWxlTGF5ZXI6QXN9LENzPUxzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLFBzPU1hdGgucG93KDIsMTMpO2Z1bmN0aW9uIElzKHQsZSxyLG4saSxhLG8scyl7dC5lbXBsYWNlQmFjayhlLHIsMipNYXRoLmZsb29yKG4qUHMpK28saSpQcyoyLGEqUHMqMixNYXRoLnJvdW5kKHMpKX12YXIgT3M9ZnVuY3Rpb24odCl7dGhpcy56b29tPXQuem9vbSx0aGlzLm92ZXJzY2FsaW5nPXQub3ZlcnNjYWxpbmcsdGhpcy5sYXllcnM9dC5sYXllcnMsdGhpcy5sYXllcklkcz10aGlzLmxheWVycy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuaW5kZXg9dC5pbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheT1uZXcgUmksdGhpcy5pbmRleEFycmF5PW5ldyBZaSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucz1uZXcgVWEoYnMsdC5sYXllcnMsdC56b29tKSx0aGlzLnNlZ21lbnRzPW5ldyBwYSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJJZHM9dGhpcy5sYXllcnMuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pc1N0YXRlRGVwZW5kZW50KCl9KSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKX07ZnVuY3Rpb24genModCxlKXtyZXR1cm4gdC54PT09ZS54JiYodC54PDB8fHQueD44MTkyKXx8dC55PT09ZS55JiYodC55PDB8fHQueT44MTkyKX1mdW5jdGlvbiBEcyh0KXtyZXR1cm4gdC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueDwwfSkpfHx0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gdC54PjgxOTJ9KSl8fHQuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnk8MH0pKXx8dC5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQueT44MTkyfSkpfU9zLnByb3RvdHlwZS5wb3B1bGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5mZWF0dXJlcz1bXSx0aGlzLmhhc1BhdHRlcm49ZHMoImZpbGwtZXh0cnVzaW9uIix0aGlzLmxheWVycyxlKTtmb3IodmFyIG49MCxpPXQ7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLG89YS5mZWF0dXJlLHM9YS5pZCxsPWEuaW5kZXgsYz1hLnNvdXJjZUxheWVySW5kZXgsdT10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksZj17dHlwZTpvLnR5cGUsaWQ6cyxwcm9wZXJ0aWVzOm8ucHJvcGVydGllcyxnZW9tZXRyeTp1P1lhKG8pOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSksZixyKSl7dmFyIGg9e2lkOnMsc291cmNlTGF5ZXJJbmRleDpjLGluZGV4OmwsZ2VvbWV0cnk6dT9mLmdlb21ldHJ5OllhKG8pLHByb3BlcnRpZXM6by5wcm9wZXJ0aWVzLHR5cGU6by50eXBlLHBhdHRlcm5zOnt9fTt2b2lkIDAhPT1vLmlkJiYoaC5pZD1vLmlkKSx0aGlzLmhhc1BhdHRlcm4/dGhpcy5mZWF0dXJlcy5wdXNoKG1zKCJmaWxsLWV4dHJ1c2lvbiIsdGhpcy5sYXllcnMsaCx0aGlzLnpvb20sZSkpOnRoaXMuYWRkRmVhdHVyZShoLGguZ2VvbWV0cnksbCxyLHt9KSxlLmZlYXR1cmVJbmRleC5pbnNlcnQobyxoLmdlb21ldHJ5LGwsYyx0aGlzLmluZGV4LCEwKX19fSxPcy5wcm90b3R5cGUuYWRkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5mZWF0dXJlcztuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdlb21ldHJ5O3RoaXMuYWRkRmVhdHVyZShhLG8sYS5pbmRleCxlLHIpfX0sT3MucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxPcy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGh9LE9zLnByb3RvdHlwZS51cGxvYWRQZW5kaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMudXBsb2FkZWR8fHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxPcy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMudXBsb2FkZWR8fCh0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LGJzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpLHRoaXMudXBsb2FkZWQ9ITB9LE9zLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5pbmRleEJ1ZmZlci5kZXN0cm95KCksdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpKX0sT3MucHJvdG90eXBlLmFkZEZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9MCxvPWhzKGUsNTAwKTthPG8ubGVuZ3RoO2ErPTEpe2Zvcih2YXIgcz1vW2FdLGw9MCxjPTAsdT1zO2M8dS5sZW5ndGg7Yys9MSl7bCs9dVtjXS5sZW5ndGh9Zm9yKHZhciBmPXRoaXMuc2VnbWVudHMucHJlcGFyZVNlZ21lbnQoNCx0aGlzLmxheW91dFZlcnRleEFycmF5LHRoaXMuaW5kZXhBcnJheSksaD0wLHA9cztoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07aWYoMCE9PWQubGVuZ3RoJiYhRHMoZCkpZm9yKHZhciBtPTAsZz0wO2c8ZC5sZW5ndGg7ZysrKXt2YXIgdj1kW2ddO2lmKGc+PTEpe3ZhciB5PWRbZy0xXTtpZighenModix5KSl7Zi52ZXJ0ZXhMZW5ndGgrND5wYS5NQVhfVkVSVEVYX0FSUkFZX0xFTkdUSCYmKGY9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSk7dmFyIHg9di5zdWIoeSkuX3BlcnAoKS5fdW5pdCgpLGI9eS5kaXN0KHYpO20rYj4zMjc2OCYmKG09MCksSXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx2Lngsdi55LHgueCx4LnksMCwwLG0pLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdi54LHYueSx4LngseC55LDAsMSxtKSxtKz1iLElzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkseS54LHkueSx4LngseC55LDAsMCxtKSxJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LHkueCx5LnkseC54LHgueSwwLDEsbSk7dmFyIF89Zi52ZXJ0ZXhMZW5ndGg7dGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8sXysyLF8rMSksdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKF8rMSxfKzIsXyszKSxmLnZlcnRleExlbmd0aCs9NCxmLnByaW1pdGl2ZUxlbmd0aCs9Mn19fX1pZihmLnZlcnRleExlbmd0aCtsPnBhLk1BWF9WRVJURVhfQVJSQVlfTEVOR1RIJiYoZj10aGlzLnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KGwsdGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSx0aGlzLmluZGV4QXJyYXkpKSwiUG9seWdvbiI9PT1Dc1t0LnR5cGVdKXtmb3IodmFyIHc9W10sVD1bXSxrPWYudmVydGV4TGVuZ3RoLEE9MCxNPXM7QTxNLmxlbmd0aDtBKz0xKXt2YXIgUz1NW0FdO2lmKDAhPT1TLmxlbmd0aCl7UyE9PXNbMF0mJlQucHVzaCh3Lmxlbmd0aC8yKTtmb3IodmFyIEU9MDtFPFMubGVuZ3RoO0UrKyl7dmFyIEw9U1tFXTtJcyh0aGlzLmxheW91dFZlcnRleEFycmF5LEwueCxMLnksMCwwLDEsMSwwKSx3LnB1c2goTC54KSx3LnB1c2goTC55KX19fWZvcih2YXIgQz1Ebyh3LFQpLFA9MDtQPEMubGVuZ3RoO1ArPTMpdGhpcy5pbmRleEFycmF5LmVtcGxhY2VCYWNrKGsrQ1tQXSxrK0NbUCsyXSxrK0NbUCsxXSk7Zi5wcmltaXRpdmVMZW5ndGgrPUMubGVuZ3RoLzMsZi52ZXJ0ZXhMZW5ndGgrPWx9fXRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXModGhpcy5sYXlvdXRWZXJ0ZXhBcnJheS5sZW5ndGgsdCxyLGksbil9LE5uKCJGaWxsRXh0cnVzaW9uQnVja2V0IixPcyx7b21pdDpbImxheWVycyIsImZlYXR1cmVzIl19KTt2YXIgUnM9e3BhaW50Om5ldyBTaSh7ImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tb3BhY2l0eSJdKSwiZmlsbC1leHRydXNpb24tY29sb3IiOm5ldyBUaShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tY29sb3IiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZSI6bmV3IHdpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiXSksImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiOm5ldyB3aShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciJdKSwiZmlsbC1leHRydXNpb24tcGF0dGVybiI6bmV3IGtpKEx0WyJwYWludF9maWxsLWV4dHJ1c2lvbiJdWyJmaWxsLWV4dHJ1c2lvbi1wYXR0ZXJuIl0pLCJmaWxsLWV4dHJ1c2lvbi1oZWlnaHQiOm5ldyBUaShMdFsicGFpbnRfZmlsbC1leHRydXNpb24iXVsiZmlsbC1leHRydXNpb24taGVpZ2h0Il0pLCJmaWxsLWV4dHJ1c2lvbi1iYXNlIjpuZXcgVGkoTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLWJhc2UiXSksImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50IjpuZXcgd2koTHRbInBhaW50X2ZpbGwtZXh0cnVzaW9uIl1bImZpbGwtZXh0cnVzaW9uLXZlcnRpY2FsLWdyYWRpZW50Il0pfSl9LEZzPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxScyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IE9zKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbigpe3JldHVybiBzbyh0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIikpfSxlLnByb3RvdHlwZS5pczNEPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXt2YXIgYz1sbyh0LHRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi10cmFuc2xhdGUiKSx0aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlLWFuY2hvciIpLG8uYW5nbGUscyksdT10aGlzLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24taGVpZ2h0IikuZXZhbHVhdGUoZSxyKSxmPXRoaXMucGFpbnQuZ2V0KCJmaWxsLWV4dHJ1c2lvbi1iYXNlIikuZXZhbHVhdGUoZSxyKSxoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgYT1bXSxvPTAscz10O288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXSxjPVtsLngsbC55LG4sMV07eG8oYyxjLGUpLGEucHVzaChuZXcgaShjWzBdL2NbM10sY1sxXS9jWzNdKSl9cmV0dXJuIGF9KGMsbCwwLDApLHA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBhPVtdLG89W10scz1uWzhdKmUsbD1uWzldKmUsYz1uWzEwXSplLHU9blsxMV0qZSxmPW5bOF0qcixoPW5bOV0qcixwPW5bMTBdKnIsZD1uWzExXSpyLG09MCxnPXQ7bTxnLmxlbmd0aDttKz0xKXtmb3IodmFyIHY9Z1ttXSx5PVtdLHg9W10sYj0wLF89djtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0sVD13Lngsaz13LnksQT1uWzBdKlQrbls0XSprK25bMTJdLE09blsxXSpUK25bNV0qaytuWzEzXSxTPW5bMl0qVCtuWzZdKmsrblsxNF0sRT1uWzNdKlQrbls3XSprK25bMTVdLEw9UytjLEM9RSt1LFA9QStmLEk9TStoLE89UytwLHo9RStkLEQ9bmV3IGkoKEErcykvQywoTStsKS9DKTtELno9TC9DLHkucHVzaChEKTt2YXIgUj1uZXcgaShQL3osSS96KTtSLno9Ty96LHgucHVzaChSKX1hLnB1c2goeSksby5wdXNoKHgpfXJldHVyblthLG9dfShuLGYsdSxsKTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3ZhciBuPTEvMDtLYShyLGUpJiYobj1OcyhyLGVbMF0pKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylmb3IodmFyIGE9ZVtpXSxvPXRbaV0scz0wO3M8YS5sZW5ndGgtMTtzKyspe3ZhciBsPWFbc10sYz1hW3MrMV0sdT1vW3NdLGY9b1tzKzFdLGg9W2wsYyxmLHUsbF07WmEocixoKSYmKG49TWF0aC5taW4obixOcyhyLGgpKSl9cmV0dXJuIG4hPT0xLzAmJm59KHBbMF0scFsxXSxoKX0sZX0oRWkpO2Z1bmN0aW9uIEJzKHQsZSl7cmV0dXJuIHQueCplLngrdC55KmUueX1mdW5jdGlvbiBOcyh0LGUpe2lmKDE9PT10Lmxlbmd0aCl7Zm9yKHZhciByLG49MCxpPWVbbisrXTshcnx8aS5lcXVhbHMocik7KWlmKCEocj1lW24rK10pKXJldHVybiAxLzA7Zm9yKDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPXRbMF0scz1yLnN1YihpKSxsPWEuc3ViKGkpLGM9by5zdWIoaSksdT1CcyhzLHMpLGY9QnMocyxsKSxoPUJzKGwsbCkscD1CcyhjLHMpLGQ9QnMoYyxsKSxtPXUqaC1mKmYsZz0oaCpwLWYqZCkvbSx2PSh1KmQtZipwKS9tLHk9MS1nLXYseD1pLnoqeStyLnoqZythLnoqdjtpZihpc0Zpbml0ZSh4KSlyZXR1cm4geH1yZXR1cm4gMS8wfWZvcih2YXIgYj0xLzAsXz0wLHc9ZTtfPHcubGVuZ3RoO18rPTEpe3ZhciBUPXdbX107Yj1NYXRoLm1pbihiLFQueil9cmV0dXJuIGJ9dmFyIGpzPUlpKFt7bmFtZToiYV9wb3Nfbm9ybWFsIixjb21wb25lbnRzOjIsdHlwZToiSW50MTYifSx7bmFtZToiYV9kYXRhIixjb21wb25lbnRzOjQsdHlwZToiVWludDgifV0sNCkubWVtYmVycyxVcz1Mcy5WZWN0b3JUaWxlRmVhdHVyZS50eXBlcyxWcz1NYXRoLmNvcyhNYXRoLlBJLzE4MCozNy41KSxIcz1NYXRoLnBvdygyLDE0KS8uNSxxcz1mdW5jdGlvbih0KXt0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMuaGFzUGF0dGVybj0hMSx0aGlzLnBhdHRlcm5GZWF0dXJlcz1bXSx0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBGaSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPW5ldyBVYShqcyx0LmxheWVycyx0Lnpvb20pLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpfTtxcy5wcm90b3R5cGUucG9wdWxhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaGFzUGF0dGVybj1kcygibGluZSIsdGhpcy5sYXllcnMsZSk7Zm9yKHZhciBuPXRoaXMubGF5ZXJzWzBdLmxheW91dC5nZXQoImxpbmUtc29ydC1rZXkiKSxpPVtdLGE9MCxvPXQ7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdLGw9cy5mZWF0dXJlLGM9cy5pZCx1PXMuaW5kZXgsZj1zLnNvdXJjZUxheWVySW5kZXgsaD10aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnkscD17dHlwZTpsLnR5cGUsaWQ6Yyxwcm9wZXJ0aWVzOmwucHJvcGVydGllcyxnZW9tZXRyeTpoP1lhKGwpOltdfTtpZih0aGlzLmxheWVyc1swXS5fZmVhdHVyZUZpbHRlci5maWx0ZXIobmV3IHBpKHRoaXMuem9vbSkscCxyKSl7aHx8KHAuZ2VvbWV0cnk9WWEobCkpO3ZhciBkPW4/bi5ldmFsdWF0ZShwLHt9LHIpOnZvaWQgMCxtPXtpZDpjLHByb3BlcnRpZXM6bC5wcm9wZXJ0aWVzLHR5cGU6bC50eXBlLHNvdXJjZUxheWVySW5kZXg6ZixpbmRleDp1LGdlb21ldHJ5OnAuZ2VvbWV0cnkscGF0dGVybnM6e30sc29ydEtleTpkfTtpLnB1c2gobSl9fW4mJmkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKTtmb3IodmFyIGc9MCx2PWk7Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddLHg9eSxiPXguZ2VvbWV0cnksXz14LmluZGV4LHc9eC5zb3VyY2VMYXllckluZGV4O2lmKHRoaXMuaGFzUGF0dGVybil7dmFyIFQ9bXMoImxpbmUiLHRoaXMubGF5ZXJzLHksdGhpcy56b29tLGUpO3RoaXMucGF0dGVybkZlYXR1cmVzLnB1c2goVCl9ZWxzZSB0aGlzLmFkZEZlYXR1cmUoeSxiLF8scix7fSk7dmFyIGs9dFtfXS5mZWF0dXJlO2UuZmVhdHVyZUluZGV4Lmluc2VydChrLGIsXyx3LHRoaXMuaW5kZXgpfX0scXMucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zdGF0ZURlcGVuZGVudExheWVycy5sZW5ndGgmJnRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwZGF0ZVBhaW50QXJyYXlzKHQsZSx0aGlzLnN0YXRlRGVwZW5kZW50TGF5ZXJzLHIpfSxxcy5wcm90b3R5cGUuYWRkRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wLGk9dGhpcy5wYXR0ZXJuRmVhdHVyZXM7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO3RoaXMuYWRkRmVhdHVyZShhLGEuZ2VvbWV0cnksYS5pbmRleCxlLHIpfX0scXMucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RofSxxcy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZH0scXMucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0KXt0aGlzLnVwbG9hZGVkfHwodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXI9dC5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5sYXlvdXRWZXJ0ZXhBcnJheSxqcyksdGhpcy5pbmRleEJ1ZmZlcj10LmNyZWF0ZUluZGV4QnVmZmVyKHRoaXMuaW5kZXhBcnJheSkpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnVwbG9hZCh0KSx0aGlzLnVwbG9hZGVkPSEwfSxxcy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmRlc3Ryb3koKSx0aGlzLnNlZ21lbnRzLmRlc3Ryb3koKSl9LHFzLnByb3RvdHlwZS5hZGRGZWF0dXJlPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPXRoaXMubGF5ZXJzWzBdLmxheW91dCxvPWEuZ2V0KCJsaW5lLWpvaW4iKS5ldmFsdWF0ZSh0LHt9KSxzPWEuZ2V0KCJsaW5lLWNhcCIpLGw9YS5nZXQoImxpbmUtbWl0ZXItbGltaXQiKSxjPWEuZ2V0KCJsaW5lLXJvdW5kLWxpbWl0IiksdT0wLGY9ZTt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07dGhpcy5hZGRMaW5lKGgsdCxvLHMsbCxjKX10aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5wb3B1bGF0ZVBhaW50QXJyYXlzKHRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoLHQscixpLG4pfSxxcy5wcm90b3R5cGUuYWRkTGluZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYodGhpcy5kaXN0YW5jZT0wLHRoaXMuc2NhbGVkRGlzdGFuY2U9MCx0aGlzLnRvdGFsRGlzdGFuY2U9MCxlLnByb3BlcnRpZXMmJmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgibWFwYm94X2NsaXBfc3RhcnQiKSYmZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJtYXBib3hfY2xpcF9lbmQiKSl7dGhpcy5jbGlwU3RhcnQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9zdGFydCx0aGlzLmNsaXBFbmQ9K2UucHJvcGVydGllcy5tYXBib3hfY2xpcF9lbmQ7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aC0xO28rKyl0aGlzLnRvdGFsRGlzdGFuY2UrPXRbb10uZGlzdCh0W28rMV0pO3RoaXMudXBkYXRlU2NhbGVkRGlzdGFuY2UoKX1mb3IodmFyIHM9IlBvbHlnb24iPT09VXNbZS50eXBlXSxsPXQubGVuZ3RoO2w+PTImJnRbbC0xXS5lcXVhbHModFtsLTJdKTspbC0tO2Zvcih2YXIgYz0wO2M8bC0xJiZ0W2NdLmVxdWFscyh0W2MrMV0pOyljKys7aWYoIShsPChzPzM6MikpKXsiYmV2ZWwiPT09ciYmKGk9MS4wNSk7dmFyIHUsZj10aGlzLm92ZXJzY2FsaW5nPD0xNj8xMjI4ODAvKDUxMip0aGlzLm92ZXJzY2FsaW5nKTowLGg9dGhpcy5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCgxMCpsLHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5pbmRleEFycmF5KSxwPXZvaWQgMCxkPXZvaWQgMCxtPXZvaWQgMCxnPXZvaWQgMDt0aGlzLmUxPXRoaXMuZTI9LTEscyYmKHU9dFtsLTJdLGc9dFtjXS5zdWIodSkuX3VuaXQoKS5fcGVycCgpKTtmb3IodmFyIHY9Yzt2PGw7disrKWlmKCEoZD12PT09bC0xP3M/dFtjKzFdOnZvaWQgMDp0W3YrMV0pfHwhdFt2XS5lcXVhbHMoZCkpe2cmJihtPWcpLHUmJihwPXUpLHU9dFt2XSxnPWQ/ZC5zdWIodSkuX3VuaXQoKS5fcGVycCgpOm07dmFyIHk9KG09bXx8ZykuYWRkKGcpOzA9PT15LngmJjA9PT15Lnl8fHkuX3VuaXQoKTt2YXIgeD1tLngqZy54K20ueSpnLnksYj15LngqZy54K3kueSpnLnksXz0wIT09Yj8xL2I6MS8wLHc9MipNYXRoLnNxcnQoMi0yKmIpLFQ9YjxWcyYmcCYmZCxrPW0ueCpnLnktbS55KmcueD4wO2lmKFQmJnY+Yyl7dmFyIEE9dS5kaXN0KHApO2lmKEE+MipmKXt2YXIgTT11LnN1Yih1LnN1YihwKS5fbXVsdChmL0EpLl9yb3VuZCgpKTt0aGlzLnVwZGF0ZURpc3RhbmNlKHAsTSksdGhpcy5hZGRDdXJyZW50VmVydGV4KE0sbSwwLDAsaCkscD1NfX12YXIgUz1wJiZkLEU9Uz9yOnM/ImJ1dHQiOm47aWYoUyYmInJvdW5kIj09PUUmJihfPGE/RT0ibWl0ZXIiOl88PTImJihFPSJmYWtlcm91bmQiKSksIm1pdGVyIj09PUUmJl8+aSYmKEU9ImJldmVsIiksImJldmVsIj09PUUmJihfPjImJihFPSJmbGlwYmV2ZWwiKSxfPGkmJihFPSJtaXRlciIpKSxwJiZ0aGlzLnVwZGF0ZURpc3RhbmNlKHAsdSksIm1pdGVyIj09PUUpeS5fbXVsdChfKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSx5LDAsMCxoKTtlbHNlIGlmKCJmbGlwYmV2ZWwiPT09RSl7aWYoXz4xMDApeT1nLm11bHQoLTEpO2Vsc2V7dmFyIEw9XyptLmFkZChnKS5tYWcoKS9tLnN1YihnKS5tYWcoKTt5Ll9wZXJwKCkuX211bHQoTCooaz8tMToxKSl9dGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSwwLDAsaCksdGhpcy5hZGRDdXJyZW50VmVydGV4KHUseS5tdWx0KC0xKSwwLDAsaCl9ZWxzZSBpZigiYmV2ZWwiPT09RXx8ImZha2Vyb3VuZCI9PT1FKXt2YXIgQz0tTWF0aC5zcXJ0KF8qXy0xKSxQPWs/QzowLEk9az8wOkM7aWYocCYmdGhpcy5hZGRDdXJyZW50VmVydGV4KHUsbSxQLEksaCksImZha2Vyb3VuZCI9PT1FKWZvcih2YXIgTz1NYXRoLnJvdW5kKDE4MCp3L01hdGguUEkvMjApLHo9MTt6PE87eisrKXt2YXIgRD16L087aWYoLjUhPT1EKXt2YXIgUj1ELS41O0QrPUQqUiooRC0xKSooKDEuMDkwNCt4Kih4KigzLjU1NjQ1LTEuNDM1MTkqeCktMy4yNDUyKSkqUipSKyguODQ4MDEzK3gqKC4yMTU2MzgqeC0xLjA2MDIxKSkpfXZhciBGPWcuc3ViKG0pLl9tdWx0KEQpLl9hZGQobSkuX3VuaXQoKS5fbXVsdChrPy0xOjEpO3RoaXMuYWRkSGFsZlZlcnRleCh1LEYueCxGLnksITEsaywwLGgpfWQmJnRoaXMuYWRkQ3VycmVudFZlcnRleCh1LGcsLVAsLUksaCl9ZWxzZSBpZigiYnV0dCI9PT1FKXRoaXMuYWRkQ3VycmVudFZlcnRleCh1LHksMCwwLGgpO2Vsc2UgaWYoInNxdWFyZSI9PT1FKXt2YXIgQj1wPzE6LTE7dGhpcy5hZGRDdXJyZW50VmVydGV4KHUseSxCLEIsaCl9ZWxzZSJyb3VuZCI9PT1FJiYocCYmKHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMCwwLGgpLHRoaXMuYWRkQ3VycmVudFZlcnRleCh1LG0sMSwxLGgsITApKSxkJiYodGhpcy5hZGRDdXJyZW50VmVydGV4KHUsZywtMSwtMSxoLCEwKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgodSxnLDAsMCxoKSkpO2lmKFQmJnY8bC0xKXt2YXIgTj11LmRpc3QoZCk7aWYoTj4yKmYpe3ZhciBqPXUuYWRkKGQuc3ViKHUpLl9tdWx0KGYvTikuX3JvdW5kKCkpO3RoaXMudXBkYXRlRGlzdGFuY2UodSxqKSx0aGlzLmFkZEN1cnJlbnRWZXJ0ZXgoaixnLDAsMCxoKSx1PWp9fX19fSxxcy5wcm90b3R5cGUuYWRkQ3VycmVudFZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSl7dm9pZCAwPT09YSYmKGE9ITEpO3ZhciBvPWUueCtlLnkqcixzPWUueS1lLngqcixsPS1lLngrZS55Km4sYz0tZS55LWUueCpuO3RoaXMuYWRkSGFsZlZlcnRleCh0LG8scyxhLCExLHIsaSksdGhpcy5hZGRIYWxmVmVydGV4KHQsbCxjLGEsITAsLW4saSksdGhpcy5kaXN0YW5jZT5Icy8yJiYwPT09dGhpcy50b3RhbERpc3RhbmNlJiYodGhpcy5kaXN0YW5jZT0wLHRoaXMuYWRkQ3VycmVudFZlcnRleCh0LGUscixuLGksYSkpfSxxcy5wcm90b3R5cGUuYWRkSGFsZlZlcnRleD1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10LngsbD10LnksYz0uNSp0aGlzLnNjYWxlZERpc3RhbmNlO3RoaXMubGF5b3V0VmVydGV4QXJyYXkuZW1wbGFjZUJhY2soKHM8PDEpKyhuPzE6MCksKGw8PDEpKyhpPzE6MCksTWF0aC5yb3VuZCg2MyplKSsxMjgsTWF0aC5yb3VuZCg2MypyKSsxMjgsMSsoMD09PWE/MDphPDA/LTE6MSl8KDYzJmMpPDwyLGM+PjYpO3ZhciB1PW8udmVydGV4TGVuZ3RoKys7dGhpcy5lMT49MCYmdGhpcy5lMj49MCYmKHRoaXMuaW5kZXhBcnJheS5lbXBsYWNlQmFjayh0aGlzLmUxLHRoaXMuZTIsdSksby5wcmltaXRpdmVMZW5ndGgrKyksaT90aGlzLmUyPXU6dGhpcy5lMT11fSxxcy5wcm90b3R5cGUudXBkYXRlU2NhbGVkRGlzdGFuY2U9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlZERpc3RhbmNlPXRoaXMudG90YWxEaXN0YW5jZT4wPyh0aGlzLmNsaXBTdGFydCsodGhpcy5jbGlwRW5kLXRoaXMuY2xpcFN0YXJ0KSp0aGlzLmRpc3RhbmNlL3RoaXMudG90YWxEaXN0YW5jZSkqKEhzLTEpOnRoaXMuZGlzdGFuY2V9LHFzLnByb3RvdHlwZS51cGRhdGVEaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuZGlzdGFuY2UrPXQuZGlzdChlKSx0aGlzLnVwZGF0ZVNjYWxlZERpc3RhbmNlKCl9LE5uKCJMaW5lQnVja2V0Iixxcyx7b21pdDpbImxheWVycyIsInBhdHRlcm5GZWF0dXJlcyJdfSk7dmFyIEdzPW5ldyBTaSh7ImxpbmUtY2FwIjpuZXcgd2koTHQubGF5b3V0X2xpbmVbImxpbmUtY2FwIl0pLCJsaW5lLWpvaW4iOm5ldyBUaShMdC5sYXlvdXRfbGluZVsibGluZS1qb2luIl0pLCJsaW5lLW1pdGVyLWxpbWl0IjpuZXcgd2koTHQubGF5b3V0X2xpbmVbImxpbmUtbWl0ZXItbGltaXQiXSksImxpbmUtcm91bmQtbGltaXQiOm5ldyB3aShMdC5sYXlvdXRfbGluZVsibGluZS1yb3VuZC1saW1pdCJdKSwibGluZS1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9saW5lWyJsaW5lLXNvcnQta2V5Il0pfSksWXM9e3BhaW50Om5ldyBTaSh7ImxpbmUtb3BhY2l0eSI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtb3BhY2l0eSJdKSwibGluZS1jb2xvciI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtY29sb3IiXSksImxpbmUtdHJhbnNsYXRlIjpuZXcgd2koTHQucGFpbnRfbGluZVsibGluZS10cmFuc2xhdGUiXSksImxpbmUtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X2xpbmVbImxpbmUtdHJhbnNsYXRlLWFuY2hvciJdKSwibGluZS13aWR0aCI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtd2lkdGgiXSksImxpbmUtZ2FwLXdpZHRoIjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1nYXAtd2lkdGgiXSksImxpbmUtb2Zmc2V0IjpuZXcgVGkoTHQucGFpbnRfbGluZVsibGluZS1vZmZzZXQiXSksImxpbmUtYmx1ciI6bmV3IFRpKEx0LnBhaW50X2xpbmVbImxpbmUtYmx1ciJdKSwibGluZS1kYXNoYXJyYXkiOm5ldyBBaShMdC5wYWludF9saW5lWyJsaW5lLWRhc2hhcnJheSJdKSwibGluZS1wYXR0ZXJuIjpuZXcga2koTHQucGFpbnRfbGluZVsibGluZS1wYXR0ZXJuIl0pLCJsaW5lLWdyYWRpZW50IjpuZXcgTWkoTHQucGFpbnRfbGluZVsibGluZS1ncmFkaWVudCJdKX0pLGxheW91dDpHc30sV3M9bmV3KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiByPW5ldyBwaShNYXRoLmZsb29yKHIuem9vbSkse25vdzpyLm5vdyxmYWRlRHVyYXRpb246ci5mYWRlRHVyYXRpb24sem9vbUhpc3Rvcnk6ci56b29tSGlzdG9yeSx0cmFuc2l0aW9uOnIudHJhbnNpdGlvbn0pLHQucHJvdG90eXBlLnBvc3NpYmx5RXZhbHVhdGUuY2FsbCh0aGlzLGUscil9LGUucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiByPXUoe30scix7em9vbTpNYXRoLmZsb29yKHIuem9vbSl9KSx0LnByb3RvdHlwZS5ldmFsdWF0ZS5jYWxsKHRoaXMsZSxyLG4saSl9LGV9KFRpKSkoWXMucGFpbnQucHJvcGVydGllc1sibGluZS13aWR0aCJdLnNwZWNpZmljYXRpb24pO1dzLnVzZUludGVnZXJab29tPSEwO3ZhciBYcz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUsWXMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5faGFuZGxlU3BlY2lhbFBhaW50UHJvcGVydHlVcGRhdGU9ZnVuY3Rpb24odCl7ImxpbmUtZ3JhZGllbnQiPT09dCYmdGhpcy5fdXBkYXRlR3JhZGllbnQoKX0sZS5wcm90b3R5cGUuX3VwZGF0ZUdyYWRpZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdHJhbnNpdGlvbmFibGVQYWludC5fdmFsdWVzWyJsaW5lLWdyYWRpZW50Il0udmFsdWUuZXhwcmVzc2lvbjt0aGlzLmdyYWRpZW50PUNvKHQsImxpbmVQcm9ncmVzcyIpLHRoaXMuZ3JhZGllbnRUZXh0dXJlPW51bGx9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKGUscil7dC5wcm90b3R5cGUucmVjYWxjdWxhdGUuY2FsbCh0aGlzLGUsciksdGhpcy5wYWludC5fdmFsdWVzWyJsaW5lLWZsb29yd2lkdGgiXT1Xcy5wb3NzaWJseUV2YWx1YXRlKHRoaXMuX3RyYW5zaXRpb25pbmdQYWludC5fdmFsdWVzWyJsaW5lLXdpZHRoIl0udmFsdWUsZSl9LGUucHJvdG90eXBlLmNyZWF0ZUJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHFzKHQpfSxlLnByb3RvdHlwZS5xdWVyeVJhZGl1cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9WnMob28oImxpbmUtd2lkdGgiLHRoaXMsZSksb28oImxpbmUtZ2FwLXdpZHRoIix0aGlzLGUpKSxuPW9vKCJsaW5lLW9mZnNldCIsdGhpcyxlKTtyZXR1cm4gci8yK01hdGguYWJzKG4pK3NvKHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpKX0sZS5wcm90b3R5cGUucXVlcnlJbnRlcnNlY3RzRmVhdHVyZT1mdW5jdGlvbih0LGUscixuLGEsbyxzKXt2YXIgbD1sbyh0LHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpLHRoaXMucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiKSxvLmFuZ2xlLHMpLGM9cy8yKlpzKHRoaXMucGFpbnQuZ2V0KCJsaW5lLXdpZHRoIikuZXZhbHVhdGUoZSxyKSx0aGlzLnBhaW50LmdldCgibGluZS1nYXAtd2lkdGgiKS5ldmFsdWF0ZShlLHIpKSx1PXRoaXMucGFpbnQuZ2V0KCJsaW5lLW9mZnNldCIpLmV2YWx1YXRlKGUscik7cmV0dXJuIHUmJihuPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49bmV3IGkoMCwwKSxhPTA7YTx0Lmxlbmd0aDthKyspe2Zvcih2YXIgbz10W2FdLHM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYz1vW2wtMV0sdT1vW2xdLGY9b1tsKzFdLGg9MD09PWw/bjp1LnN1YihjKS5fdW5pdCgpLl9wZXJwKCkscD1sPT09by5sZW5ndGgtMT9uOmYuc3ViKHUpLl91bml0KCkuX3BlcnAoKSxkPWguX2FkZChwKS5fdW5pdCgpLG09ZC54KnAueCtkLnkqcC55O2QuX211bHQoMS9tKSxzLnB1c2goZC5fbXVsdChlKS5fYWRkKHUpKX1yLnB1c2gocyl9cmV0dXJuIHJ9KG4sdSpzKSksZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2lmKHQubGVuZ3RoPj0zKWZvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKWlmKGlvKHQsaVthXSkpcmV0dXJuITA7aWYoUWEodCxpLHIpKXJldHVybiEwfXJldHVybiExfShsLG4sYyl9LGUucHJvdG90eXBlLmlzVGlsZUNsaXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZX0oRWkpO2Z1bmN0aW9uIFpzKHQsZSl7cmV0dXJuIGU+MD9lKzIqdDp0fXZhciBKcz1JaShbe25hbWU6ImFfcG9zX29mZnNldCIsY29tcG9uZW50czo0LHR5cGU6IkludDE2In0se25hbWU6ImFfZGF0YSIsY29tcG9uZW50czo0LHR5cGU6IlVpbnQxNiJ9LHtuYW1lOiJhX3BpeGVsb2Zmc2V0Iixjb21wb25lbnRzOjQsdHlwZToiSW50MTYifV0sNCksS3M9SWkoW3tuYW1lOiJhX3Byb2plY3RlZF9wb3MiLGNvbXBvbmVudHM6Myx0eXBlOiJGbG9hdDMyIn1dLDQpLFFzPShJaShbe25hbWU6ImFfZmFkZV9vcGFjaXR5Iixjb21wb25lbnRzOjEsdHlwZToiVWludDMyIn1dLDQpLElpKFt7bmFtZToiYV9wbGFjZWQiLGNvbXBvbmVudHM6Mix0eXBlOiJVaW50OCJ9LHtuYW1lOiJhX3NoaWZ0Iixjb21wb25lbnRzOjIsdHlwZToiRmxvYXQzMiJ9XSkpLCRzPShJaShbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JQb2ludFgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclBvaW50WSJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieDEifSx7dHlwZToiSW50MTYiLG5hbWU6InkxIn0se3R5cGU6IkludDE2IixuYW1lOiJ4MiJ9LHt0eXBlOiJJbnQxNiIsbmFtZToieTIifSx7dHlwZToiVWludDMyIixuYW1lOiJmZWF0dXJlSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJzb3VyY2VMYXllckluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToiYnVja2V0SW5kZXgifV0pLElpKFt7bmFtZToiYV9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2FuY2hvcl9wb3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9LHtuYW1lOiJhX2V4dHJ1ZGUiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KSksdGw9SWkoW3tuYW1lOiJhX3BvcyIsY29tcG9uZW50czoyLHR5cGU6IkZsb2F0MzIifSx7bmFtZToiYV9yYWRpdXMiLGNvbXBvbmVudHM6MSx0eXBlOiJGbG9hdDMyIn0se25hbWU6ImFfZmxhZ3MiLGNvbXBvbmVudHM6Mix0eXBlOiJJbnQxNiJ9XSw0KTtJaShbe25hbWU6InRyaWFuZ2xlIixjb21wb25lbnRzOjMsdHlwZToiVWludDE2In1dKSxJaShbe3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JYIn0se3R5cGU6IkludDE2IixuYW1lOiJhbmNob3JZIn0se3R5cGU6IlVpbnQxNiIsbmFtZToiZ2x5cGhTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtR2x5cGhzIn0se3R5cGU6IlVpbnQzMiIsbmFtZToidmVydGV4U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImxpbmVTdGFydEluZGV4In0se3R5cGU6IlVpbnQzMiIsbmFtZToibGluZUxlbmd0aCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InNlZ21lbnQifSx7dHlwZToiVWludDE2IixuYW1lOiJsb3dlclNpemUifSx7dHlwZToiVWludDE2IixuYW1lOiJ1cHBlclNpemUifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFgifSx7dHlwZToiRmxvYXQzMiIsbmFtZToibGluZU9mZnNldFkifSx7dHlwZToiVWludDgiLG5hbWU6IndyaXRpbmdNb2RlIn0se3R5cGU6IlVpbnQ4IixuYW1lOiJwbGFjZWRPcmllbnRhdGlvbiJ9LHt0eXBlOiJVaW50OCIsbmFtZToiaGlkZGVuIn0se3R5cGU6IlVpbnQzMiIsbmFtZToiY3Jvc3NUaWxlSUQifSx7dHlwZToiSW50MTYiLG5hbWU6ImFzc29jaWF0ZWRJY29uSW5kZXgifV0pLElpKFt7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclgifSx7dHlwZToiSW50MTYiLG5hbWU6ImFuY2hvclkifSx7dHlwZToiSW50MTYiLG5hbWU6InJpZ2h0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJjZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6ImxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4In0se3R5cGU6IkludDE2IixuYW1lOiJwbGFjZWRJY29uU3ltYm9sSW5kZXgifSx7dHlwZToiSW50MTYiLG5hbWU6InZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToia2V5In0se3R5cGU6IlVpbnQxNiIsbmFtZToidGV4dEJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ0ZXh0Qm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4In0se3R5cGU6IlVpbnQxNiIsbmFtZToidmVydGljYWxUZXh0Qm94RW5kSW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJpY29uQm94U3RhcnRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Imljb25Cb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6InZlcnRpY2FsSWNvbkJveFN0YXJ0SW5kZXgifSx7dHlwZToiVWludDE2IixuYW1lOiJ2ZXJ0aWNhbEljb25Cb3hFbmRJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6ImZlYXR1cmVJbmRleCJ9LHt0eXBlOiJVaW50MTYiLG5hbWU6Im51bUhvcml6b250YWxHbHlwaFZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtVmVydGljYWxHbHlwaFZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtSWNvblZlcnRpY2VzIn0se3R5cGU6IlVpbnQxNiIsbmFtZToibnVtVmVydGljYWxJY29uVmVydGljZXMifSx7dHlwZToiVWludDE2IixuYW1lOiJ1c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyJ9LHt0eXBlOiJVaW50MzIiLG5hbWU6ImNyb3NzVGlsZUlEIn0se3R5cGU6IkZsb2F0MzIiLG5hbWU6InRleHRCb3hTY2FsZSJ9LHt0eXBlOiJGbG9hdDMyIixjb21wb25lbnRzOjIsbmFtZToidGV4dE9mZnNldCJ9LHt0eXBlOiJGbG9hdDMyIixuYW1lOiJjb2xsaXNpb25DaXJjbGVEaWFtZXRlciJ9XSksSWkoW3t0eXBlOiJGbG9hdDMyIixuYW1lOiJvZmZzZXRYIn1dKSxJaShbe3R5cGU6IkludDE2IixuYW1lOiJ4In0se3R5cGU6IkludDE2IixuYW1lOiJ5In0se3R5cGU6IkludDE2IixuYW1lOiJ0aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvciJ9XSk7ZnVuY3Rpb24gZWwodCxlLHIpe3JldHVybiB0LnNlY3Rpb25zLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudGV4dD1mdW5jdGlvbih0LGUscil7dmFyIG49ZS5sYXlvdXQuZ2V0KCJ0ZXh0LXRyYW5zZm9ybSIpLmV2YWx1YXRlKHIse30pO3JldHVybiJ1cHBlcmNhc2UiPT09bj90PXQudG9Mb2NhbGVVcHBlckNhc2UoKToibG93ZXJjYXNlIj09PW4mJih0PXQudG9Mb2NhbGVMb3dlckNhc2UoKSksaGkuYXBwbHlBcmFiaWNTaGFwaW5nJiYodD1oaS5hcHBseUFyYWJpY1NoYXBpbmcodCkpLHR9KHQudGV4dCxlLHIpfSkpLHR9dmFyIHJsPXsiISI6Ilx1ZmUxNSIsIiMiOiJcdWZmMDMiLCQ6Ilx1ZmYwNCIsIiUiOiJcdWZmMDUiLCImIjoiXHVmZjA2IiwiKCI6Ilx1ZmUzNSIsIikiOiJcdWZlMzYiLCIqIjoiXHVmZjBhIiwiKyI6Ilx1ZmYwYiIsIiwiOiJcdWZlMTAiLCItIjoiXHVmZTMyIiwiLiI6Ilx1MzBmYiIsIi8iOiJcdWZmMGYiLCI6IjoiXHVmZTEzIiwiOyI6Ilx1ZmUxNCIsIjwiOiJcdWZlM2YiLCI9IjoiXHVmZjFkIiwiPiI6Ilx1ZmU0MCIsIj8iOiJcdWZlMTYiLCJAIjoiXHVmZjIwIiwiWyI6Ilx1ZmU0NyIsIlxcIjoiXHVmZjNjIiwiXSI6Ilx1ZmU0OCIsIl4iOiJcdWZmM2UiLF86Ilx1ZmUzMyIsImAiOiJcdWZmNDAiLCJ7IjoiXHVmZTM3IiwifCI6Ilx1MjAxNSIsIn0iOiJcdWZlMzgiLCJ+IjoiXHVmZjVlIiwiXHhhMiI6Ilx1ZmZlMCIsIlx4YTMiOiJcdWZmZTEiLCJceGE1IjoiXHVmZmU1IiwiXHhhNiI6Ilx1ZmZlNCIsIlx4YWMiOiJcdWZmZTIiLCJceGFmIjoiXHVmZmUzIiwiXHUyMDEzIjoiXHVmZTMyIiwiXHUyMDE0IjoiXHVmZTMxIiwiXHUyMDE4IjoiXHVmZTQzIiwiXHUyMDE5IjoiXHVmZTQ0IiwiXHUyMDFjIjoiXHVmZTQxIiwiXHUyMDFkIjoiXHVmZTQyIiwiXHUyMDI2IjoiXHVmZTE5IiwiXHUyMDI3IjoiXHUzMGZiIiwiXHUyMGE5IjoiXHVmZmU2IiwiXHUzMDAxIjoiXHVmZTExIiwiXHUzMDAyIjoiXHVmZTEyIiwiXHUzMDA4IjoiXHVmZTNmIiwiXHUzMDA5IjoiXHVmZTQwIiwiXHUzMDBhIjoiXHVmZTNkIiwiXHUzMDBiIjoiXHVmZTNlIiwiXHUzMDBjIjoiXHVmZTQxIiwiXHUzMDBkIjoiXHVmZTQyIiwiXHUzMDBlIjoiXHVmZTQzIiwiXHUzMDBmIjoiXHVmZTQ0IiwiXHUzMDEwIjoiXHVmZTNiIiwiXHUzMDExIjoiXHVmZTNjIiwiXHUzMDE0IjoiXHVmZTM5IiwiXHUzMDE1IjoiXHVmZTNhIiwiXHUzMDE2IjoiXHVmZTE3IiwiXHUzMDE3IjoiXHVmZTE4IiwiXHVmZjAxIjoiXHVmZTE1IiwiXHVmZjA4IjoiXHVmZTM1IiwiXHVmZjA5IjoiXHVmZTM2IiwiXHVmZjBjIjoiXHVmZTEwIiwiXHVmZjBkIjoiXHVmZTMyIiwiXHVmZjBlIjoiXHUzMGZiIiwiXHVmZjFhIjoiXHVmZTEzIiwiXHVmZjFiIjoiXHVmZTE0IiwiXHVmZjFjIjoiXHVmZTNmIiwiXHVmZjFlIjoiXHVmZTQwIiwiXHVmZjFmIjoiXHVmZTE2IiwiXHVmZjNiIjoiXHVmZTQ3IiwiXHVmZjNkIjoiXHVmZTQ4IiwiXHVmZjNmIjoiXHVmZTMzIiwiXHVmZjViIjoiXHVmZTM3IiwiXHVmZjVjIjoiXHUyMDE1IiwiXHVmZjVkIjoiXHVmZTM4IiwiXHVmZjVmIjoiXHVmZTM1IiwiXHVmZjYwIjoiXHVmZTM2IiwiXHVmZjYxIjoiXHVmZTEyIiwiXHVmZjYyIjoiXHVmZTQxIiwiXHVmZjYzIjoiXHVmZTQyIn07dmFyIG5sPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbyxzPTgqaS1uLTEsbD0oMTw8cyktMSxjPWw+PjEsdT0tNyxmPXI/aS0xOjAsaD1yPy0xOjEscD10W2UrZl07Zm9yKGYrPWgsYT1wJigxPDwtdSktMSxwPj49LXUsdSs9czt1PjA7YT0yNTYqYSt0W2UrZl0sZis9aCx1LT04KTtmb3Iobz1hJigxPDwtdSktMSxhPj49LXUsdSs9bjt1PjA7bz0yNTYqbyt0W2UrZl0sZis9aCx1LT04KTtpZigwPT09YSlhPTEtYztlbHNle2lmKGE9PT1sKXJldHVybiBvP05hTjoxLzAqKHA/LTE6MSk7bys9TWF0aC5wb3coMixuKSxhLT1jfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixhLW4pfSxpbD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9OCphLWktMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAscD1uPzA6YS0xLGQ9bj8xOi0xLG09ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhzPWlzTmFOKGUpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKGUrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KGUqbC0xKSpNYXRoLnBvdygyLGkpLG8rPWYpOihzPWUqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsaSksbz0wKSk7aT49ODt0W3IrcF09MjU1JnMscCs9ZCxzLz0yNTYsaS09OCk7Zm9yKG89bzw8aXxzLGMrPWk7Yz4wO3RbcitwXT0yNTUmbyxwKz1kLG8vPTI1NixjLT04KTt0W3IrcC1kXXw9MTI4Km19LGFsPW9sO2Z1bmN0aW9uIG9sKHQpe3RoaXMuYnVmPUFycmF5QnVmZmVyLmlzVmlldyYmQXJyYXlCdWZmZXIuaXNWaWV3KHQpP3Q6bmV3IFVpbnQ4QXJyYXkodHx8MCksdGhpcy5wb3M9MCx0aGlzLnR5cGU9MCx0aGlzLmxlbmd0aD10aGlzLmJ1Zi5sZW5ndGh9b2wuVmFyaW50PTAsb2wuRml4ZWQ2ND0xLG9sLkJ5dGVzPTIsb2wuRml4ZWQzMj01O3ZhciBzbD0idW5kZWZpbmVkIj09dHlwZW9mIFRleHREZWNvZGVyP251bGw6bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik7ZnVuY3Rpb24gbGwodCl7cmV0dXJuIHQudHlwZT09PW9sLkJ5dGVzP3QucmVhZFZhcmludCgpK3QucG9zOnQucG9zKzF9ZnVuY3Rpb24gY2wodCxlLHIpe3JldHVybiByPzQyOTQ5NjcyOTYqZSsodD4+PjApOjQyOTQ5NjcyOTYqKGU+Pj4wKSsodD4+PjApfWZ1bmN0aW9uIHVsKHQsZSxyKXt2YXIgbj1lPD0xNjM4Mz8xOmU8PTIwOTcxNTE/MjplPD0yNjg0MzU0NTU/MzpNYXRoLmZsb29yKE1hdGgubG9nKGUpLyg3Kk1hdGguTE4yKSk7ci5yZWFsbG9jKG4pO2Zvcih2YXIgaT1yLnBvcy0xO2k+PXQ7aS0tKXIuYnVmW2krbl09ci5idWZbaV19ZnVuY3Rpb24gZmwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlVmFyaW50KHRbcl0pfWZ1bmN0aW9uIGhsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNWYXJpbnQodFtyXSl9ZnVuY3Rpb24gcGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRmxvYXQodFtyXSl9ZnVuY3Rpb24gZGwodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRG91YmxlKHRbcl0pfWZ1bmN0aW9uIG1sKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZUJvb2xlYW4odFtyXSl9ZnVuY3Rpb24gZ2wodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyllLndyaXRlRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB2bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVTRml4ZWQzMih0W3JdKX1mdW5jdGlvbiB5bCh0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUud3JpdGVGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIHhsKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZS53cml0ZVNGaXhlZDY0KHRbcl0pfWZ1bmN0aW9uIGJsKHQsZSl7cmV0dXJuKHRbZV18dFtlKzFdPDw4fHRbZSsyXTw8MTYpKzE2Nzc3MjE2KnRbZSszXX1mdW5jdGlvbiBfbCh0LGUscil7dFtyXT1lLHRbcisxXT1lPj4+OCx0W3IrMl09ZT4+PjE2LHRbciszXT1lPj4+MjR9ZnVuY3Rpb24gd2wodCxlKXtyZXR1cm4odFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNikrKHRbZSszXTw8MjQpfW9sLnByb3RvdHlwZT17ZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYnVmPW51bGx9LHJlYWRGaWVsZHM6ZnVuY3Rpb24odCxlLHIpe2ZvcihyPXJ8fHRoaXMubGVuZ3RoO3RoaXMucG9zPHI7KXt2YXIgbj10aGlzLnJlYWRWYXJpbnQoKSxpPW4+PjMsYT10aGlzLnBvczt0aGlzLnR5cGU9NyZuLHQoaSxlLHRoaXMpLHRoaXMucG9zPT09YSYmdGhpcy5za2lwKG4pfXJldHVybiBlfSxyZWFkTWVzc2FnZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnJlYWRGaWVsZHModCxlLHRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zKX0scmVhZEZpeGVkMzI6ZnVuY3Rpb24oKXt2YXIgdD1ibCh0aGlzLmJ1Zix0aGlzLnBvcyk7cmV0dXJuIHRoaXMucG9zKz00LHR9LHJlYWRTRml4ZWQzMjpmdW5jdGlvbigpe3ZhciB0PXdsKHRoaXMuYnVmLHRoaXMucG9zKTtyZXR1cm4gdGhpcy5wb3MrPTQsdH0scmVhZEZpeGVkNjQ6ZnVuY3Rpb24oKXt2YXIgdD1ibCh0aGlzLmJ1Zix0aGlzLnBvcykrNDI5NDk2NzI5NipibCh0aGlzLmJ1Zix0aGlzLnBvcys0KTtyZXR1cm4gdGhpcy5wb3MrPTgsdH0scmVhZFNGaXhlZDY0OmZ1bmN0aW9uKCl7dmFyIHQ9YmwodGhpcy5idWYsdGhpcy5wb3MpKzQyOTQ5NjcyOTYqd2wodGhpcy5idWYsdGhpcy5wb3MrNCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRGbG9hdDpmdW5jdGlvbigpe3ZhciB0PW5sKHRoaXMuYnVmLHRoaXMucG9zLCEwLDIzLDQpO3JldHVybiB0aGlzLnBvcys9NCx0fSxyZWFkRG91YmxlOmZ1bmN0aW9uKCl7dmFyIHQ9bmwodGhpcy5idWYsdGhpcy5wb3MsITAsNTIsOCk7cmV0dXJuIHRoaXMucG9zKz04LHR9LHJlYWRWYXJpbnQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuYnVmO3JldHVybiBlPTEyNyYocj1uW3RoaXMucG9zKytdKSxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8NyxyPDEyOD9lOihlfD0oMTI3JihyPW5bdGhpcy5wb3MrK10pKTw8MTQscjwxMjg/ZTooZXw9KDEyNyYocj1uW3RoaXMucG9zKytdKSk8PDIxLHI8MTI4P2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmJ1ZjtpZihpPWFbci5wb3MrK10sbj0oMTEyJmkpPj40LGk8MTI4KXJldHVybiBjbCh0LG4sZSk7aWYoaT1hW3IucG9zKytdLG58PSgxMjcmaSk8PDMsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MTAsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MTcsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEyNyZpKTw8MjQsaTwxMjgpcmV0dXJuIGNsKHQsbixlKTtpZihpPWFbci5wb3MrK10sbnw9KDEmaSk8PDMxLGk8MTI4KXJldHVybiBjbCh0LG4sZSk7dGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB2YXJpbnQgbm90IG1vcmUgdGhhbiAxMCBieXRlcyIpfShlfD0oMTUmKHI9blt0aGlzLnBvc10pKTw8MjgsdCx0aGlzKSkpKX0scmVhZFZhcmludDY0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVhZFZhcmludCghMCl9LHJlYWRTVmFyaW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCk7cmV0dXJuIHQlMj09MT8odCsxKS8tMjp0LzJ9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5yZWFkVmFyaW50KCkpfSxyZWFkU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLnBvcztyZXR1cm4gdGhpcy5wb3M9dCx0LWU+PTEyJiZzbD9mdW5jdGlvbih0LGUscil7cmV0dXJuIHNsLmRlY29kZSh0LnN1YmFycmF5KGUscikpfSh0aGlzLmJ1ZixlLHQpOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iIixpPWU7Zm9yKDtpPHI7KXt2YXIgYSxvLHMsbD10W2ldLGM9bnVsbCx1PWw+MjM5PzQ6bD4yMjM/MzpsPjE5MT8yOjE7aWYoaSt1PnIpYnJlYWs7MT09PXU/bDwxMjgmJihjPWwpOjI9PT11PzEyOD09KDE5MiYoYT10W2krMV0pKSYmKGM9KDMxJmwpPDw2fDYzJmEpPD0xMjcmJihjPW51bGwpOjM9PT11PyhhPXRbaSsxXSxvPXRbaSsyXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmKChjPSgxNSZsKTw8MTJ8KDYzJmEpPDw2fDYzJm8pPD0yMDQ3fHxjPj01NTI5NiYmYzw9NTczNDMpJiYoYz1udWxsKSk6ND09PXUmJihhPXRbaSsxXSxvPXRbaSsyXSxzPXRbaSszXSwxMjg9PSgxOTImYSkmJjEyOD09KDE5MiZvKSYmMTI4PT0oMTkyJnMpJiYoKGM9KDE1JmwpPDwxOHwoNjMmYSk8PDEyfCg2MyZvKTw8Nnw2MyZzKTw9NjU1MzV8fGM+PTExMTQxMTIpJiYoYz1udWxsKSksbnVsbD09PWM/KGM9NjU1MzMsdT0xKTpjPjY1NTM1JiYoYy09NjU1MzYsbis9U3RyaW5nLmZyb21DaGFyQ29kZShjPj4+MTAmMTAyM3w1NTI5NiksYz01NjMyMHwxMDIzJmMpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoYyksaSs9dX1yZXR1cm4gbn0odGhpcy5idWYsZSx0KX0scmVhZEJ5dGVzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yZWFkVmFyaW50KCkrdGhpcy5wb3MsZT10aGlzLmJ1Zi5zdWJhcnJheSh0aGlzLnBvcyx0KTtyZXR1cm4gdGhpcy5wb3M9dCxlfSxyZWFkUGFja2VkVmFyaW50OmZ1bmN0aW9uKHQsZSl7aWYodGhpcy50eXBlIT09b2wuQnl0ZXMpcmV0dXJuIHQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3ZhciByPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPHI7KXQucHVzaCh0aGlzLnJlYWRWYXJpbnQoZSkpO3JldHVybiB0fSxyZWFkUGFja2VkU1ZhcmludDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNWYXJpbnQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRCb29sZWFuOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkQm9vbGVhbigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRmxvYXQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZsb2F0KCkpO3JldHVybiB0fSxyZWFkUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRG91YmxlKCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWREb3VibGUoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTt2YXIgZT1sbCh0aGlzKTtmb3IodD10fHxbXTt0aGlzLnBvczxlOyl0LnB1c2godGhpcy5yZWFkRml4ZWQzMigpKTtyZXR1cm4gdH0scmVhZFBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQpe2lmKHRoaXMudHlwZSE9PW9sLkJ5dGVzKXJldHVybiB0LnB1c2godGhpcy5yZWFkU0ZpeGVkMzIoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZFNGaXhlZDMyKCkpO3JldHVybiB0fSxyZWFkUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7dmFyIGU9bGwodGhpcyk7Zm9yKHQ9dHx8W107dGhpcy5wb3M8ZTspdC5wdXNoKHRoaXMucmVhZEZpeGVkNjQoKSk7cmV0dXJuIHR9LHJlYWRQYWNrZWRTRml4ZWQ2NDpmdW5jdGlvbih0KXtpZih0aGlzLnR5cGUhPT1vbC5CeXRlcylyZXR1cm4gdC5wdXNoKHRoaXMucmVhZFNGaXhlZDY0KCkpO3ZhciBlPWxsKHRoaXMpO2Zvcih0PXR8fFtdO3RoaXMucG9zPGU7KXQucHVzaCh0aGlzLnJlYWRTRml4ZWQ2NCgpKTtyZXR1cm4gdH0sc2tpcDpmdW5jdGlvbih0KXt2YXIgZT03JnQ7aWYoZT09PW9sLlZhcmludClmb3IoO3RoaXMuYnVmW3RoaXMucG9zKytdPjEyNzspO2Vsc2UgaWYoZT09PW9sLkJ5dGVzKXRoaXMucG9zPXRoaXMucmVhZFZhcmludCgpK3RoaXMucG9zO2Vsc2UgaWYoZT09PW9sLkZpeGVkMzIpdGhpcy5wb3MrPTQ7ZWxzZXtpZihlIT09b2wuRml4ZWQ2NCl0aHJvdyBuZXcgRXJyb3IoIlVuaW1wbGVtZW50ZWQgdHlwZTogIitlKTt0aGlzLnBvcys9OH19LHdyaXRlVGFnOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludCh0PDwzfGUpfSxyZWFsbG9jOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmxlbmd0aHx8MTY7ZTx0aGlzLnBvcyt0OyllKj0yO2lmKGUhPT10aGlzLmxlbmd0aCl7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7ci5zZXQodGhpcy5idWYpLHRoaXMuYnVmPXIsdGhpcy5sZW5ndGg9ZX19LGZpbmlzaDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aD10aGlzLnBvcyx0aGlzLnBvcz0wLHRoaXMuYnVmLnN1YmFycmF5KDAsdGhpcy5sZW5ndGgpfSx3cml0ZUZpeGVkMzI6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDQpLF9sKHRoaXMuYnVmLHQsdGhpcy5wb3MpLHRoaXMucG9zKz00fSx3cml0ZVNGaXhlZDMyOmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg0KSxfbCh0aGlzLmJ1Zix0LHRoaXMucG9zKSx0aGlzLnBvcys9NH0sd3JpdGVGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxfbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxfbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVNGaXhlZDY0OmZ1bmN0aW9uKHQpe3RoaXMucmVhbGxvYyg4KSxfbCh0aGlzLmJ1ZiwtMSZ0LHRoaXMucG9zKSxfbCh0aGlzLmJ1ZixNYXRoLmZsb29yKHQqKDEvNDI5NDk2NzI5NikpLHRoaXMucG9zKzQpLHRoaXMucG9zKz04fSx3cml0ZVZhcmludDpmdW5jdGlvbih0KXsodD0rdHx8MCk+MjY4NDM1NDU1fHx0PDA/ZnVuY3Rpb24odCxlKXt2YXIgcixuO3Q+PTA/KHI9dCU0Mjk0OTY3Mjk2fDAsbj10LzQyOTQ5NjcyOTZ8MCk6KG49figtdC80Mjk0OTY3Mjk2KSw0Mjk0OTY3Mjk1XihyPX4oLXQlNDI5NDk2NzI5NikpP3I9cisxfDA6KHI9MCxuPW4rMXwwKSk7aWYodD49MHgxMDAwMDAwMDAwMDAwMDAwMHx8dDwtMHgxMDAwMDAwMDAwMDAwMDAwMCl0aHJvdyBuZXcgRXJyb3IoIkdpdmVuIHZhcmludCBkb2Vzbid0IGZpdCBpbnRvIDEwIGJ5dGVzIik7ZS5yZWFsbG9jKDEwKSxmdW5jdGlvbih0LGUscil7ci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvcysrXT0xMjcmdHwxMjgsdD4+Pj03LHIuYnVmW3IucG9zKytdPTEyNyZ0fDEyOCx0Pj4+PTcsci5idWZbci5wb3MrK109MTI3JnR8MTI4LHQ+Pj49NyxyLmJ1ZltyLnBvc109MTI3JnR9KHIsMCxlKSxmdW5jdGlvbih0LGUpe3ZhciByPSg3JnQpPDw0O2lmKGUuYnVmW2UucG9zKytdfD1yfCgodD4+Pj0zKT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2lmKGUuYnVmW2UucG9zKytdPTEyNyZ0fCgodD4+Pj03KT8xMjg6MCksIXQpcmV0dXJuO2UuYnVmW2UucG9zKytdPTEyNyZ0fShuLGUpfSh0LHRoaXMpOih0aGlzLnJlYWxsb2MoNCksdGhpcy5idWZbdGhpcy5wb3MrK109MTI3JnR8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT0xMjcmKHQ+Pj49Nyl8KHQ+MTI3PzEyODowKSx0PD0xMjd8fCh0aGlzLmJ1Zlt0aGlzLnBvcysrXT10Pj4+NyYxMjcpKSkpfSx3cml0ZVNWYXJpbnQ6ZnVuY3Rpb24odCl7dGhpcy53cml0ZVZhcmludCh0PDA/MiotdC0xOjIqdCl9LHdyaXRlQm9vbGVhbjpmdW5jdGlvbih0KXt0aGlzLndyaXRlVmFyaW50KEJvb2xlYW4odCkpfSx3cml0ZVN0cmluZzpmdW5jdGlvbih0KXt0PVN0cmluZyh0KSx0aGlzLnJlYWxsb2MoNCp0Lmxlbmd0aCksdGhpcy5wb3MrKzt2YXIgZT10aGlzLnBvczt0aGlzLnBvcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksYT0wO2E8ZS5sZW5ndGg7YSsrKXtpZigobj1lLmNoYXJDb2RlQXQoYSkpPjU1Mjk1JiZuPDU3MzQ0KXtpZighaSl7bj41NjMxOXx8YSsxPT09ZS5sZW5ndGg/KHRbcisrXT0yMzksdFtyKytdPTE5MSx0W3IrK109MTg5KTppPW47Y29udGludWV9aWYobjw1NjMyMCl7dFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1uO2NvbnRpbnVlfW49aS01NTI5Njw8MTB8bi01NjMyMHw2NTUzNixpPW51bGx9ZWxzZSBpJiYodFtyKytdPTIzOSx0W3IrK109MTkxLHRbcisrXT0xODksaT1udWxsKTtuPDEyOD90W3IrK109bjoobjwyMDQ4P3RbcisrXT1uPj42fDE5Mjoobjw2NTUzNj90W3IrK109bj4+MTJ8MjI0Oih0W3IrK109bj4+MTh8MjQwLHRbcisrXT1uPj4xMiY2M3wxMjgpLHRbcisrXT1uPj42JjYzfDEyOCksdFtyKytdPTYzJm58MTI4KX1yZXR1cm4gcn0odGhpcy5idWYsdCx0aGlzLnBvcyk7dmFyIHI9dGhpcy5wb3MtZTtyPj0xMjgmJnVsKGUscix0aGlzKSx0aGlzLnBvcz1lLTEsdGhpcy53cml0ZVZhcmludChyKSx0aGlzLnBvcys9cn0sd3JpdGVGbG9hdDpmdW5jdGlvbih0KXt0aGlzLnJlYWxsb2MoNCksaWwodGhpcy5idWYsdCx0aGlzLnBvcywhMCwyMyw0KSx0aGlzLnBvcys9NH0sd3JpdGVEb3VibGU6ZnVuY3Rpb24odCl7dGhpcy5yZWFsbG9jKDgpLGlsKHRoaXMuYnVmLHQsdGhpcy5wb3MsITAsNTIsOCksdGhpcy5wb3MrPTh9LHdyaXRlQnl0ZXM6ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7dGhpcy53cml0ZVZhcmludChlKSx0aGlzLnJlYWxsb2MoZSk7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLmJ1Zlt0aGlzLnBvcysrXT10W3JdfSx3cml0ZVJhd01lc3NhZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLnBvcysrO3ZhciByPXRoaXMucG9zO3QoZSx0aGlzKTt2YXIgbj10aGlzLnBvcy1yO24+PTEyOCYmdWwocixuLHRoaXMpLHRoaXMucG9zPXItMSx0aGlzLndyaXRlVmFyaW50KG4pLHRoaXMucG9zKz1ufSx3cml0ZU1lc3NhZ2U6ZnVuY3Rpb24odCxlLHIpe3RoaXMud3JpdGVUYWcodCxvbC5CeXRlcyksdGhpcy53cml0ZVJhd01lc3NhZ2UoZSxyKX0sd3JpdGVQYWNrZWRWYXJpbnQ6ZnVuY3Rpb24odCxlKXtlLmxlbmd0aCYmdGhpcy53cml0ZU1lc3NhZ2UodCxmbCxlKX0sd3JpdGVQYWNrZWRTVmFyaW50OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsaGwsZSl9LHdyaXRlUGFja2VkQm9vbGVhbjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LG1sLGUpfSx3cml0ZVBhY2tlZEZsb2F0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQscGwsZSl9LHdyaXRlUGFja2VkRG91YmxlOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsZGwsZSl9LHdyaXRlUGFja2VkRml4ZWQzMjpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LGdsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDMyOmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQsdmwsZSl9LHdyaXRlUGFja2VkRml4ZWQ2NDpmdW5jdGlvbih0LGUpe2UubGVuZ3RoJiZ0aGlzLndyaXRlTWVzc2FnZSh0LHlsLGUpfSx3cml0ZVBhY2tlZFNGaXhlZDY0OmZ1bmN0aW9uKHQsZSl7ZS5sZW5ndGgmJnRoaXMud3JpdGVNZXNzYWdlKHQseGwsZSl9LHdyaXRlQnl0ZXNGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5CeXRlcyksdGhpcy53cml0ZUJ5dGVzKGUpfSx3cml0ZUZpeGVkMzJGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDMyKSx0aGlzLndyaXRlRml4ZWQzMihlKX0sd3JpdGVTRml4ZWQzMkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkMzIpLHRoaXMud3JpdGVTRml4ZWQzMihlKX0sd3JpdGVGaXhlZDY0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQ2NCksdGhpcy53cml0ZUZpeGVkNjQoZSl9LHdyaXRlU0ZpeGVkNjRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5GaXhlZDY0KSx0aGlzLndyaXRlU0ZpeGVkNjQoZSl9LHdyaXRlVmFyaW50RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuVmFyaW50KSx0aGlzLndyaXRlVmFyaW50KGUpfSx3cml0ZVNWYXJpbnRGaWVsZDpmdW5jdGlvbih0LGUpe3RoaXMud3JpdGVUYWcodCxvbC5WYXJpbnQpLHRoaXMud3JpdGVTVmFyaW50KGUpfSx3cml0ZVN0cmluZ0ZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkJ5dGVzKSx0aGlzLndyaXRlU3RyaW5nKGUpfSx3cml0ZUZsb2F0RmllbGQ6ZnVuY3Rpb24odCxlKXt0aGlzLndyaXRlVGFnKHQsb2wuRml4ZWQzMiksdGhpcy53cml0ZUZsb2F0KGUpfSx3cml0ZURvdWJsZUZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVRhZyh0LG9sLkZpeGVkNjQpLHRoaXMud3JpdGVEb3VibGUoZSl9LHdyaXRlQm9vbGVhbkZpZWxkOmZ1bmN0aW9uKHQsZSl7dGhpcy53cml0ZVZhcmludEZpZWxkKHQsQm9vbGVhbihlKSl9fTtmdW5jdGlvbiBUbCh0LGUscil7MT09PXQmJnIucmVhZE1lc3NhZ2Uoa2wsZSl9ZnVuY3Rpb24ga2wodCxlLHIpe2lmKDM9PT10KXt2YXIgbj1yLnJlYWRNZXNzYWdlKEFsLHt9KSxpPW4uaWQsYT1uLmJpdG1hcCxvPW4ud2lkdGgscz1uLmhlaWdodCxsPW4ubGVmdCxjPW4udG9wLHU9bi5hZHZhbmNlO2UucHVzaCh7aWQ6aSxiaXRtYXA6bmV3IFNvKHt3aWR0aDpvKzYsaGVpZ2h0OnMrNn0sYSksbWV0cmljczp7d2lkdGg6byxoZWlnaHQ6cyxsZWZ0OmwsdG9wOmMsYWR2YW5jZTp1fX0pfX1mdW5jdGlvbiBBbCh0LGUscil7MT09PXQ/ZS5pZD1yLnJlYWRWYXJpbnQoKToyPT09dD9lLmJpdG1hcD1yLnJlYWRCeXRlcygpOjM9PT10P2Uud2lkdGg9ci5yZWFkVmFyaW50KCk6ND09PXQ/ZS5oZWlnaHQ9ci5yZWFkVmFyaW50KCk6NT09PXQ/ZS5sZWZ0PXIucmVhZFNWYXJpbnQoKTo2PT09dD9lLnRvcD1yLnJlYWRTVmFyaW50KCk6Nz09PXQmJihlLmFkdmFuY2U9ci5yZWFkVmFyaW50KCkpfWZ1bmN0aW9uIE1sKHQpe2Zvcih2YXIgZT0wLHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtlKz1hLncqYS5oLHI9TWF0aC5tYXgocixhLncpfXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5oLXQuaH0pKTtmb3IodmFyIG89W3t4OjAseTowLHc6TWF0aC5tYXgoTWF0aC5jZWlsKE1hdGguc3FydChlLy45NSkpLHIpLGg6MS8wfV0scz0wLGw9MCxjPTAsdT10O2M8dS5sZW5ndGg7Yys9MSlmb3IodmFyIGY9dVtjXSxoPW8ubGVuZ3RoLTE7aD49MDtoLS0pe3ZhciBwPW9baF07aWYoIShmLnc+cC53fHxmLmg+cC5oKSl7aWYoZi54PXAueCxmLnk9cC55LGw9TWF0aC5tYXgobCxmLnkrZi5oKSxzPU1hdGgubWF4KHMsZi54K2YudyksZi53PT09cC53JiZmLmg9PT1wLmgpe3ZhciBkPW8ucG9wKCk7aDxvLmxlbmd0aCYmKG9baF09ZCl9ZWxzZSBmLmg9PT1wLmg/KHAueCs9Zi53LHAudy09Zi53KTpmLnc9PT1wLnc/KHAueSs9Zi5oLHAuaC09Zi5oKTooby5wdXNoKHt4OnAueCtmLncseTpwLnksdzpwLnctZi53LGg6Zi5ofSkscC55Kz1mLmgscC5oLT1mLmgpO2JyZWFrfX1yZXR1cm57dzpzLGg6bCxmaWxsOmUvKHMqbCl8fDB9fXZhciBTbD1mdW5jdGlvbih0LGUpe3ZhciByPWUucGl4ZWxSYXRpbyxuPWUudmVyc2lvbixpPWUuc3RyZXRjaFgsYT1lLnN0cmV0Y2hZLG89ZS5jb250ZW50O3RoaXMucGFkZGVkUmVjdD10LHRoaXMucGl4ZWxSYXRpbz1yLHRoaXMuc3RyZXRjaFg9aSx0aGlzLnN0cmV0Y2hZPWEsdGhpcy5jb250ZW50PW8sdGhpcy52ZXJzaW9uPW59LEVsPXt0bDp7Y29uZmlndXJhYmxlOiEwfSxicjp7Y29uZmlndXJhYmxlOiEwfSx0bGJyOntjb25maWd1cmFibGU6ITB9LGRpc3BsYXlTaXplOntjb25maWd1cmFibGU6ITB9fTtFbC50bC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5wYWRkZWRSZWN0LngrMSx0aGlzLnBhZGRlZFJlY3QueSsxXX0sRWwuYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMucGFkZGVkUmVjdC54K3RoaXMucGFkZGVkUmVjdC53LTEsdGhpcy5wYWRkZWRSZWN0LnkrdGhpcy5wYWRkZWRSZWN0LmgtMV19LEVsLnRsYnIuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGwuY29uY2F0KHRoaXMuYnIpfSxFbC5kaXNwbGF5U2l6ZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bKHRoaXMucGFkZGVkUmVjdC53LTIpL3RoaXMucGl4ZWxSYXRpbywodGhpcy5wYWRkZWRSZWN0LmgtMikvdGhpcy5waXhlbFJhdGlvXX0sT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU2wucHJvdG90eXBlLEVsKTt2YXIgTGw9ZnVuY3Rpb24odCxlKXt2YXIgcj17fSxuPXt9O3RoaXMuaGF2ZVJlbmRlckNhbGxiYWNrcz1bXTt2YXIgaT1bXTt0aGlzLmFkZEltYWdlcyh0LHIsaSksdGhpcy5hZGRJbWFnZXMoZSxuLGkpO3ZhciBhPU1sKGkpLG89YS53LHM9YS5oLGw9bmV3IEVvKHt3aWR0aDpvfHwxLGhlaWdodDpzfHwxfSk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10sZj1yW2NdLnBhZGRlZFJlY3Q7RW8uY29weSh1LmRhdGEsbCx7eDowLHk6MH0se3g6Zi54KzEseTpmLnkrMX0sdS5kYXRhKX1mb3IodmFyIGggaW4gZSl7dmFyIHA9ZVtoXSxkPW5baF0ucGFkZGVkUmVjdCxtPWQueCsxLGc9ZC55KzEsdj1wLmRhdGEud2lkdGgseT1wLmRhdGEuaGVpZ2h0O0VvLmNvcHkocC5kYXRhLGwse3g6MCx5OjB9LHt4Om0seTpnfSxwLmRhdGEpLEVvLmNvcHkocC5kYXRhLGwse3g6MCx5OnktMX0se3g6bSx5OmctMX0se3dpZHRoOnYsaGVpZ2h0OjF9KSxFby5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDptLHk6Zyt5fSx7d2lkdGg6dixoZWlnaHQ6MX0pLEVvLmNvcHkocC5kYXRhLGwse3g6di0xLHk6MH0se3g6bS0xLHk6Z30se3dpZHRoOjEsaGVpZ2h0Onl9KSxFby5jb3B5KHAuZGF0YSxsLHt4OjAseTowfSx7eDptK3YseTpnfSx7d2lkdGg6MSxoZWlnaHQ6eX0pfXRoaXMuaW1hZ2U9bCx0aGlzLmljb25Qb3NpdGlvbnM9cix0aGlzLnBhdHRlcm5Qb3NpdGlvbnM9bn07TGwucHJvdG90eXBlLmFkZEltYWdlcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHQpe3ZhciBpPXRbbl0sYT17eDowLHk6MCx3OmkuZGF0YS53aWR0aCsyLGg6aS5kYXRhLmhlaWdodCsyfTtyLnB1c2goYSksZVtuXT1uZXcgU2woYSxpKSxpLmhhc1JlbmRlckNhbGxiYWNrJiZ0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MucHVzaChuKX19LExsLnByb3RvdHlwZS5wYXRjaFVwZGF0ZWRJbWFnZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdC5kaXNwYXRjaFJlbmRlckNhbGxiYWNrcyh0aGlzLmhhdmVSZW5kZXJDYWxsYmFja3MpLHQudXBkYXRlZEltYWdlcyl0aGlzLnBhdGNoVXBkYXRlZEltYWdlKHRoaXMuaWNvblBvc2l0aW9uc1tyXSx0LmdldEltYWdlKHIpLGUpLHRoaXMucGF0Y2hVcGRhdGVkSW1hZ2UodGhpcy5wYXR0ZXJuUG9zaXRpb25zW3JdLHQuZ2V0SW1hZ2UociksZSl9LExsLnByb3RvdHlwZS5wYXRjaFVwZGF0ZWRJbWFnZT1mdW5jdGlvbih0LGUscil7aWYodCYmZSYmdC52ZXJzaW9uIT09ZS52ZXJzaW9uKXt0LnZlcnNpb249ZS52ZXJzaW9uO3ZhciBuPXQudGwsaT1uWzBdLGE9blsxXTtyLnVwZGF0ZShlLmRhdGEsdm9pZCAwLHt4OmkseTphfSl9fSxObigiSW1hZ2VQb3NpdGlvbiIsU2wpLE5uKCJJbWFnZUF0bGFzIixMbCk7dmFyIENsPXtob3Jpem9udGFsOjEsdmVydGljYWw6Mixob3Jpem9udGFsT25seTozfTt2YXIgUGw9ZnVuY3Rpb24oKXt0aGlzLnNjYWxlPTEsdGhpcy5mb250U3RhY2s9IiIsdGhpcy5pbWFnZU5hbWU9bnVsbH07UGwuZm9yVGV4dD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBQbDtyZXR1cm4gci5zY2FsZT10fHwxLHIuZm9udFN0YWNrPWUscn0sUGwuZm9ySW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFBsO3JldHVybiBlLmltYWdlTmFtZT10LGV9O3ZhciBJbD1mdW5jdGlvbigpe3RoaXMudGV4dD0iIix0aGlzLnNlY3Rpb25JbmRleD1bXSx0aGlzLnNlY3Rpb25zPVtdLHRoaXMuaW1hZ2VTZWN0aW9uSUQ9bnVsbH07ZnVuY3Rpb24gT2wodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSl7dmFyIGcsdj1JbC5mcm9tRmVhdHVyZSh0LGkpO2Y9PT1DbC52ZXJ0aWNhbCYmdi52ZXJ0aWNhbGl6ZVB1bmN0dWF0aW9uKCk7dmFyIHk9aGkucHJvY2Vzc0JpZGlyZWN0aW9uYWxUZXh0LHg9aGkucHJvY2Vzc1N0eWxlZEJpZGlyZWN0aW9uYWxUZXh0O2lmKHkmJjE9PT12LnNlY3Rpb25zLmxlbmd0aCl7Zz1bXTtmb3IodmFyIGI9MCxfPXkodi50b1N0cmluZygpLGpsKHYsYyxhLGUsbixwLGQpKTtiPF8ubGVuZ3RoO2IrPTEpe3ZhciB3PV9bYl0sVD1uZXcgSWw7VC50ZXh0PXcsVC5zZWN0aW9ucz12LnNlY3Rpb25zO2Zvcih2YXIgaz0wO2s8dy5sZW5ndGg7aysrKVQuc2VjdGlvbkluZGV4LnB1c2goMCk7Zy5wdXNoKFQpfX1lbHNlIGlmKHgpe2c9W107Zm9yKHZhciBBPTAsTT14KHYudGV4dCx2LnNlY3Rpb25JbmRleCxqbCh2LGMsYSxlLG4scCxkKSk7QTxNLmxlbmd0aDtBKz0xKXt2YXIgUz1NW0FdLEU9bmV3IElsO0UudGV4dD1TWzBdLEUuc2VjdGlvbkluZGV4PVNbMV0sRS5zZWN0aW9ucz12LnNlY3Rpb25zLGcucHVzaChFKX19ZWxzZSBnPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50ZXh0LGk9MCxhPTAsbz1lO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXTtyLnB1c2godC5zdWJzdHJpbmcoaSxzKSksaT1zfXJldHVybiBpPG4ubGVuZ3RoJiZyLnB1c2godC5zdWJzdHJpbmcoaSxuLmxlbmd0aCkpLHJ9KHYsamwodixjLGEsZSxuLHAsZCkpO3ZhciBMPVtdLEM9e3Bvc2l0aW9uZWRMaW5lczpMLHRleHQ6di50b1N0cmluZygpLHRvcDp1WzFdLGJvdHRvbTp1WzFdLGxlZnQ6dVswXSxyaWdodDp1WzBdLHdyaXRpbmdNb2RlOmYsaWNvbnNJblRleHQ6ITEsdmVydGljYWxpemFibGU6ITF9O3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7Zm9yKHZhciBoPTAscD0tMTcsZD0wLG09MCxnPSJyaWdodCI9PT1zPzE6ImxlZnQiPT09cz8wOi41LHY9MCx5PTAseD1pO3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XTtiLnRyaW0oKTt2YXIgXz1iLmdldE1heFNjYWxlKCksdz0yNCooXy0xKSxUPXtwb3NpdGlvbmVkR2x5cGhzOltdLGxpbmVPZmZzZXQ6MH07dC5wb3NpdGlvbmVkTGluZXNbdl09VDt2YXIgaz1ULnBvc2l0aW9uZWRHbHlwaHMsQT0wO2lmKGIubGVuZ3RoKCkpe2Zvcih2YXIgTT0wO008Yi5sZW5ndGgoKTtNKyspe3ZhciBTPWIuZ2V0U2VjdGlvbihNKSxFPWIuZ2V0U2VjdGlvbkluZGV4KE0pLEw9Yi5nZXRDaGFyQ29kZShNKSxDPTAsUD1udWxsLEk9bnVsbCxPPW51bGwsej0yNCxEPSEobD09PUNsLmhvcml6b250YWx8fCF1JiYhWm4oTCl8fHUmJih6bFtMXXx8KFk9TCxZbi5BcmFiaWMoWSl8fFluWyJBcmFiaWMgU3VwcGxlbWVudCJdKFkpfHxZblsiQXJhYmljIEV4dGVuZGVkLUEiXShZKXx8WW5bIkFyYWJpYyBQcmVzZW50YXRpb24gRm9ybXMtQSJdKFkpfHxZblsiQXJhYmljIFByZXNlbnRhdGlvbiBGb3Jtcy1CIl0oWSkpKSk7aWYoUy5pbWFnZU5hbWUpe3ZhciBSPW5bUy5pbWFnZU5hbWVdO2lmKCFSKWNvbnRpbnVlO089Uy5pbWFnZU5hbWUsdC5pY29uc0luVGV4dD10Lmljb25zSW5UZXh0fHwhMCxJPVIucGFkZGVkUmVjdDt2YXIgRj1SLmRpc3BsYXlTaXplO1Muc2NhbGU9MjQqUy5zY2FsZS9mLFA9e3dpZHRoOkZbMF0saGVpZ2h0OkZbMV0sbGVmdDoxLHRvcDotMyxhZHZhbmNlOkQ/RlsxXTpGWzBdfTt2YXIgQj0yNC1GWzFdKlMuc2NhbGU7Qz13K0Isej1QLmFkdmFuY2U7dmFyIE49RD9GWzBdKlMuc2NhbGUtMjQqXzpGWzFdKlMuc2NhbGUtMjQqXztOPjAmJk4+QSYmKEE9Til9ZWxzZXt2YXIgaj1yW1MuZm9udFN0YWNrXSxVPWomJmpbTF07aWYoVSYmVS5yZWN0KUk9VS5yZWN0LFA9VS5tZXRyaWNzO2Vsc2V7dmFyIFY9ZVtTLmZvbnRTdGFja10sSD1WJiZWW0xdO2lmKCFIKWNvbnRpbnVlO1A9SC5tZXRyaWNzfUM9MjQqKF8tUy5zY2FsZSl9RD8odC52ZXJ0aWNhbGl6YWJsZT0hMCxrLnB1c2goe2dseXBoOkwsaW1hZ2VOYW1lOk8seDpoLHk6cCtDLHZlcnRpY2FsOkQsc2NhbGU6Uy5zY2FsZSxmb250U3RhY2s6Uy5mb250U3RhY2ssc2VjdGlvbkluZGV4OkUsbWV0cmljczpQLHJlY3Q6SX0pLGgrPXoqUy5zY2FsZStjKTooay5wdXNoKHtnbHlwaDpMLGltYWdlTmFtZTpPLHg6aCx5OnArQyx2ZXJ0aWNhbDpELHNjYWxlOlMuc2NhbGUsZm9udFN0YWNrOlMuZm9udFN0YWNrLHNlY3Rpb25JbmRleDpFLG1ldHJpY3M6UCxyZWN0Okl9KSxoKz1QLmFkdmFuY2UqUy5zY2FsZStjKX1pZigwIT09ay5sZW5ndGgpe3ZhciBxPWgtYztkPU1hdGgubWF4KHEsZCksVmwoaywwLGsubGVuZ3RoLTEsZyxBKX1oPTA7dmFyIEc9YSpfK0E7VC5saW5lT2Zmc2V0PU1hdGgubWF4KEEsdykscCs9RyxtPU1hdGgubWF4KEcsbSksKyt2fWVsc2UgcCs9YSwrK3Z9dmFyIFk7dmFyIFc9cC0gLTE3LFg9VWwobyksWj1YLmhvcml6b250YWxBbGlnbixKPVgudmVydGljYWxBbGlnbjsoZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPShlLXIpKmksdT0wO3U9YSE9PW8/LXMqbi0gLTE3OigtbipsKy41KSpvO2Zvcih2YXIgZj0wLGg9dDtmPGgubGVuZ3RoO2YrPTEpZm9yKHZhciBwPWhbZl0sZD0wLG09cC5wb3NpdGlvbmVkR2x5cGhzO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXTtnLngrPWMsZy55Kz11fX0pKHQucG9zaXRpb25lZExpbmVzLGcsWixKLGQsbSxhLFcsaS5sZW5ndGgpLHQudG9wKz0tSipXLHQuYm90dG9tPXQudG9wK1csdC5sZWZ0Kz0tWipkLHQucmlnaHQ9dC5sZWZ0K2R9KEMsZSxyLG4sZyxvLHMsbCxmLGMsaCxtKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10O2U8ci5sZW5ndGg7ZSs9MSl7aWYoMCE9PXJbZV0ucG9zaXRpb25lZEdseXBocy5sZW5ndGgpcmV0dXJuITF9cmV0dXJuITB9KEwpJiZDfUlsLmZyb21GZWF0dXJlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBJbCxuPTA7bjx0LnNlY3Rpb25zLmxlbmd0aDtuKyspe3ZhciBpPXQuc2VjdGlvbnNbbl07aS5pbWFnZT9yLmFkZEltYWdlU2VjdGlvbihpKTpyLmFkZFRleHRTZWN0aW9uKGksZSl9cmV0dXJuIHJ9LElsLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0Lmxlbmd0aH0sSWwucHJvdG90eXBlLmdldFNlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2VjdGlvbnNbdGhpcy5zZWN0aW9uSW5kZXhbdF1dfSxJbC5wcm90b3R5cGUuZ2V0U2VjdGlvbkluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNlY3Rpb25JbmRleFt0XX0sSWwucHJvdG90eXBlLmdldENoYXJDb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRleHQuY2hhckNvZGVBdCh0KX0sSWwucHJvdG90eXBlLnZlcnRpY2FsaXplUHVuY3R1YXRpb249ZnVuY3Rpb24oKXt0aGlzLnRleHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPSIiLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dC5jaGFyQ29kZUF0KHIrMSl8fG51bGwsaT10LmNoYXJDb2RlQXQoci0xKXx8bnVsbDsoIW58fCFKbihuKXx8cmxbdFtyKzFdXSkmJighaXx8IUpuKGkpfHxybFt0W3ItMV1dKSYmcmxbdFtyXV0/ZSs9cmxbdFtyXV06ZSs9dFtyXX1yZXR1cm4gZX0odGhpcy50ZXh0KX0sSWwucHJvdG90eXBlLnRyaW09ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLnRleHQubGVuZ3RoJiZ6bFt0aGlzLnRleHQuY2hhckNvZGVBdChlKV07ZSsrKXQrKztmb3IodmFyIHI9dGhpcy50ZXh0Lmxlbmd0aCxuPXRoaXMudGV4dC5sZW5ndGgtMTtuPj0wJiZuPj10JiZ6bFt0aGlzLnRleHQuY2hhckNvZGVBdChuKV07bi0tKXItLTt0aGlzLnRleHQ9dGhpcy50ZXh0LnN1YnN0cmluZyh0LHIpLHRoaXMuc2VjdGlvbkluZGV4PXRoaXMuc2VjdGlvbkluZGV4LnNsaWNlKHQscil9LElsLnByb3RvdHlwZS5zdWJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgSWw7cmV0dXJuIHIudGV4dD10aGlzLnRleHQuc3Vic3RyaW5nKHQsZSksci5zZWN0aW9uSW5kZXg9dGhpcy5zZWN0aW9uSW5kZXguc2xpY2UodCxlKSxyLnNlY3Rpb25zPXRoaXMuc2VjdGlvbnMscn0sSWwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dH0sSWwucHJvdG90eXBlLmdldE1heFNjYWxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gdGhpcy5zZWN0aW9uSW5kZXgucmVkdWNlKChmdW5jdGlvbihlLHIpe3JldHVybiBNYXRoLm1heChlLHQuc2VjdGlvbnNbcl0uc2NhbGUpfSksMCl9LElsLnByb3RvdHlwZS5hZGRUZXh0U2VjdGlvbj1mdW5jdGlvbih0LGUpe3RoaXMudGV4dCs9dC50ZXh0LHRoaXMuc2VjdGlvbnMucHVzaChQbC5mb3JUZXh0KHQuc2NhbGUsdC5mb250U3RhY2t8fGUpKTtmb3IodmFyIHI9dGhpcy5zZWN0aW9ucy5sZW5ndGgtMSxuPTA7bjx0LnRleHQubGVuZ3RoOysrbil0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHIpfSxJbC5wcm90b3R5cGUuYWRkSW1hZ2VTZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQuaW1hZ2U/dC5pbWFnZS5uYW1lOiIiO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHI9dGhpcy5nZXROZXh0SW1hZ2VTZWN0aW9uQ2hhckNvZGUoKTtyPyh0aGlzLnRleHQrPVN0cmluZy5mcm9tQ2hhckNvZGUociksdGhpcy5zZWN0aW9ucy5wdXNoKFBsLmZvckltYWdlKGUpKSx0aGlzLnNlY3Rpb25JbmRleC5wdXNoKHRoaXMuc2VjdGlvbnMubGVuZ3RoLTEpKTpfKCJSZWFjaGVkIG1heGltdW0gbnVtYmVyIG9mIGltYWdlcyA2NDAxIil9ZWxzZSBfKCJDYW4ndCBhZGQgRm9ybWF0dGVkU2VjdGlvbiB3aXRoIGFuIGVtcHR5IGltYWdlLiIpfSxJbC5wcm90b3R5cGUuZ2V0TmV4dEltYWdlU2VjdGlvbkNoYXJDb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW1hZ2VTZWN0aW9uSUQ/dGhpcy5pbWFnZVNlY3Rpb25JRD49NjM3NDM/bnVsbDorK3RoaXMuaW1hZ2VTZWN0aW9uSUQ6KHRoaXMuaW1hZ2VTZWN0aW9uSUQ9NTczNDQsdGhpcy5pbWFnZVNlY3Rpb25JRCl9O3ZhciB6bD17OTohMCwxMDohMCwxMTohMCwxMjohMCwxMzohMCwzMjohMH0sRGw9e307ZnVuY3Rpb24gUmwodCxlLHIsbixpLGEpe2lmKGUuaW1hZ2VOYW1lKXt2YXIgbz1uW2UuaW1hZ2VOYW1lXTtyZXR1cm4gbz9vLmRpc3BsYXlTaXplWzBdKmUuc2NhbGUqMjQvYStpOjB9dmFyIHM9cltlLmZvbnRTdGFja10sbD1zJiZzW3RdO3JldHVybiBsP2wubWV0cmljcy5hZHZhbmNlKmUuc2NhbGUraTowfWZ1bmN0aW9uIEZsKHQsZSxyLG4pe3ZhciBpPU1hdGgucG93KHQtZSwyKTtyZXR1cm4gbj90PGU/aS8yOjIqaTppK01hdGguYWJzKHIpKnJ9ZnVuY3Rpb24gQmwodCxlLHIpe3ZhciBuPTA7cmV0dXJuIDEwPT09dCYmKG4tPTFlNCksciYmKG4rPTE1MCksNDAhPT10JiY2NTI4OCE9PXR8fChuKz01MCksNDEhPT1lJiY2NTI4OSE9PWV8fChuKz01MCksbn1mdW5jdGlvbiBObCh0LGUscixuLGksYSl7Zm9yKHZhciBvPW51bGwscz1GbChlLHIsaSxhKSxsPTAsYz1uO2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPUZsKGUtdS54LHIsaSxhKSt1LmJhZG5lc3M7Zjw9cyYmKG89dSxzPWYpfXJldHVybntpbmRleDp0LHg6ZSxwcmlvckJyZWFrOm8sYmFkbmVzczpzfX1mdW5jdGlvbiBqbCh0LGUscixuLGksYSxvKXtpZigicG9pbnQiIT09YSlyZXR1cm5bXTtpZighdClyZXR1cm5bXTtmb3IodmFyIHMsbD1bXSxjPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtmb3IodmFyIG89MCxzPTA7czx0Lmxlbmd0aCgpO3MrKyl7dmFyIGw9dC5nZXRTZWN0aW9uKHMpO28rPVJsKHQuZ2V0Q2hhckNvZGUocyksbCxuLGksZSxhKX1yZXR1cm4gby9NYXRoLm1heCgxLE1hdGguY2VpbChvL3IpKX0odCxlLHIsbixpLG8pLHU9dC50ZXh0LmluZGV4T2YoIlx1MjAwYiIpPj0wLGY9MCxoPTA7aDx0Lmxlbmd0aCgpO2grKyl7dmFyIHA9dC5nZXRTZWN0aW9uKGgpLGQ9dC5nZXRDaGFyQ29kZShoKTtpZih6bFtkXXx8KGYrPVJsKGQscCxuLGksZSxvKSksaDx0Lmxlbmd0aCgpLTEpe3ZhciBtPSEhKCEoKHM9ZCk8MTE5MDQpJiYoWW5bIkJvcG9tb2ZvIEV4dGVuZGVkIl0ocyl8fFluLkJvcG9tb2ZvKHMpfHxZblsiQ0pLIENvbXBhdGliaWxpdHkgRm9ybXMiXShzKXx8WW5bIkNKSyBDb21wYXRpYmlsaXR5IElkZW9ncmFwaHMiXShzKXx8WW5bIkNKSyBDb21wYXRpYmlsaXR5Il0ocyl8fFluWyJDSksgUmFkaWNhbHMgU3VwcGxlbWVudCJdKHMpfHxZblsiQ0pLIFN0cm9rZXMiXShzKXx8WW5bIkNKSyBTeW1ib2xzIGFuZCBQdW5jdHVhdGlvbiJdKHMpfHxZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyBFeHRlbnNpb24gQSJdKHMpfHxZblsiQ0pLIFVuaWZpZWQgSWRlb2dyYXBocyJdKHMpfHxZblsiRW5jbG9zZWQgQ0pLIExldHRlcnMgYW5kIE1vbnRocyJdKHMpfHxZblsiSGFsZndpZHRoIGFuZCBGdWxsd2lkdGggRm9ybXMiXShzKXx8WW4uSGlyYWdhbmEocyl8fFluWyJJZGVvZ3JhcGhpYyBEZXNjcmlwdGlvbiBDaGFyYWN0ZXJzIl0ocyl8fFluWyJLYW5neGkgUmFkaWNhbHMiXShzKXx8WW5bIkthdGFrYW5hIFBob25ldGljIEV4dGVuc2lvbnMiXShzKXx8WW4uS2F0YWthbmEocyl8fFluWyJWZXJ0aWNhbCBGb3JtcyJdKHMpfHxZblsiWWkgUmFkaWNhbHMiXShzKXx8WW5bIllpIFN5bGxhYmxlcyJdKHMpKSk7KERsW2RdfHxtfHxwLmltYWdlTmFtZSkmJmwucHVzaChObChoKzEsZixjLGwsQmwoZCx0LmdldENoYXJDb2RlKGgrMSksbSYmdSksITEpKX19cmV0dXJuIGZ1bmN0aW9uIHQoZSl7cmV0dXJuIGU/dChlLnByaW9yQnJlYWspLmNvbmNhdChlLmluZGV4KTpbXX0oTmwodC5sZW5ndGgoKSxmLGMsbCwwLCEwKSl9ZnVuY3Rpb24gVWwodCl7dmFyIGU9LjUscj0uNTtzd2l0Y2godCl7Y2FzZSJyaWdodCI6Y2FzZSJ0b3AtcmlnaHQiOmNhc2UiYm90dG9tLXJpZ2h0IjplPTE7YnJlYWs7Y2FzZSJsZWZ0IjpjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjplPTB9c3dpdGNoKHQpe2Nhc2UiYm90dG9tIjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJib3R0b20tbGVmdCI6cj0xO2JyZWFrO2Nhc2UidG9wIjpjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6cj0wfXJldHVybntob3Jpem9udGFsQWxpZ246ZSx2ZXJ0aWNhbEFsaWduOnJ9fWZ1bmN0aW9uIFZsKHQsZSxyLG4saSl7aWYobnx8aSlmb3IodmFyIGE9dFtyXSxvPWEubWV0cmljcy5hZHZhbmNlKmEuc2NhbGUscz0odFtyXS54K28pKm4sbD1lO2w8PXI7bCsrKXRbbF0ueC09cyx0W2xdLnkrPWl9ZnVuY3Rpb24gSGwodCxlLHIsbixpLGEpe3ZhciBvLHM9dC5pbWFnZTtpZihzLmNvbnRlbnQpe3ZhciBsPXMuY29udGVudCxjPXMucGl4ZWxSYXRpb3x8MTtvPVtsWzBdL2MsbFsxXS9jLHMuZGlzcGxheVNpemVbMF0tbFsyXS9jLHMuZGlzcGxheVNpemVbMV0tbFszXS9jXX12YXIgdSxmLGgscCxkPWUubGVmdCphLG09ZS5yaWdodCphOyJ3aWR0aCI9PT1yfHwiYm90aCI9PT1yPyhwPWlbMF0rZC1uWzNdLGY9aVswXSttK25bMV0pOmY9KHA9aVswXSsoZCttLXMuZGlzcGxheVNpemVbMF0pLzIpK3MuZGlzcGxheVNpemVbMF07dmFyIGc9ZS50b3AqYSx2PWUuYm90dG9tKmE7cmV0dXJuImhlaWdodCI9PT1yfHwiYm90aCI9PT1yPyh1PWlbMV0rZy1uWzBdLGg9aVsxXSt2K25bMl0pOmg9KHU9aVsxXSsoZyt2LXMuZGlzcGxheVNpemVbMV0pLzIpK3MuZGlzcGxheVNpemVbMV0se2ltYWdlOnMsdG9wOnUscmlnaHQ6Zixib3R0b206aCxsZWZ0OnAsY29sbGlzaW9uUGFkZGluZzpvfX1EbFsxMF09ITAsRGxbMzJdPSEwLERsWzM4XT0hMCxEbFs0MF09ITAsRGxbNDFdPSEwLERsWzQzXT0hMCxEbFs0NV09ITAsRGxbNDddPSEwLERsWzE3M109ITAsRGxbMTgzXT0hMCxEbFs4MjAzXT0hMCxEbFs4MjA4XT0hMCxEbFs4MjExXT0hMCxEbFs4MjMxXT0hMDt2YXIgcWw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIsbixpKXt0LmNhbGwodGhpcyxlLHIpLHRoaXMuYW5nbGU9bix2b2lkIDAhPT1pJiYodGhpcy5zZWdtZW50PWkpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLngsdGhpcy55LHRoaXMuYW5nbGUsdGhpcy5zZWdtZW50KX0sZX0oaSk7Tm4oIkFuY2hvciIscWwpO2Z1bmN0aW9uIEdsKHQsZSl7dmFyIHI9ZS5leHByZXNzaW9uO2lmKCJjb25zdGFudCI9PT1yLmtpbmQpcmV0dXJue2tpbmQ6ImNvbnN0YW50IixsYXlvdXRTaXplOnIuZXZhbHVhdGUobmV3IHBpKHQrMSkpfTtpZigic291cmNlIj09PXIua2luZClyZXR1cm57a2luZDoic291cmNlIn07Zm9yKHZhciBuPXIuem9vbVN0b3BzLGk9ci5pbnRlcnBvbGF0aW9uVHlwZSxhPTA7YTxuLmxlbmd0aCYmblthXTw9dDspYSsrO2Zvcih2YXIgbz1hPU1hdGgubWF4KDAsYS0xKTtvPG4ubGVuZ3RoJiZuW29dPHQrMTspbysrO289TWF0aC5taW4obi5sZW5ndGgtMSxvKTt2YXIgcz1uW2FdLGw9bltvXTtyZXR1cm4iY29tcG9zaXRlIj09PXIua2luZD97a2luZDoiY29tcG9zaXRlIixtaW5ab29tOnMsbWF4Wm9vbTpsLGludGVycG9sYXRpb25UeXBlOml9OntraW5kOiJjYW1lcmEiLG1pblpvb206cyxtYXhab29tOmwsbWluU2l6ZTpyLmV2YWx1YXRlKG5ldyBwaShzKSksbWF4U2l6ZTpyLmV2YWx1YXRlKG5ldyBwaShsKSksaW50ZXJwb2xhdGlvblR5cGU6aX19ZnVuY3Rpb24gWWwodCxlLHIpe3ZhciBuPWUudVNpemUsaT1lLnVTaXplVCxhPXIubG93ZXJTaXplLG89ci51cHBlclNpemU7cmV0dXJuInNvdXJjZSI9PT10LmtpbmQ/YS8xMjg6ImNvbXBvc2l0ZSI9PT10LmtpbmQ/cWUoYS8xMjgsby8xMjgsaSk6bn1mdW5jdGlvbiBXbCh0LGUpe3ZhciByPTAsbj0wO2lmKCJjb25zdGFudCI9PT10LmtpbmQpbj10LmxheW91dFNpemU7ZWxzZSBpZigic291cmNlIiE9PXQua2luZCl7dmFyIGk9dC5pbnRlcnBvbGF0aW9uVHlwZSxhPXQubWluWm9vbSxvPXQubWF4Wm9vbSxzPWk/bChvci5pbnRlcnBvbGF0aW9uRmFjdG9yKGksZSxhLG8pLDAsMSk6MDsiY2FtZXJhIj09PXQua2luZD9uPXFlKHQubWluU2l6ZSx0Lm1heFNpemUscyk6cj1zfXJldHVybnt1U2l6ZVQ6cix1U2l6ZTpufX12YXIgWGw9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsZ2V0U2l6ZURhdGE6R2wsZXZhbHVhdGVTaXplRm9yRmVhdHVyZTpZbCxldmFsdWF0ZVNpemVGb3Jab29tOldsLFNJWkVfUEFDS19GQUNUT1I6MTI4fSk7ZnVuY3Rpb24gWmwodCxlLHIsbixpKXtpZih2b2lkIDA9PT1lLnNlZ21lbnQpcmV0dXJuITA7Zm9yKHZhciBhPWUsbz1lLnNlZ21lbnQrMSxzPTA7cz4tci8yOyl7aWYoLS1vPDApcmV0dXJuITE7cy09dFtvXS5kaXN0KGEpLGE9dFtvXX1zKz10W29dLmRpc3QodFtvKzFdKSxvKys7Zm9yKHZhciBsPVtdLGM9MDtzPHIvMjspe3ZhciB1PXRbby0xXSxmPXRbb10saD10W28rMV07aWYoIWgpcmV0dXJuITE7dmFyIHA9dS5hbmdsZVRvKGYpLWYuYW5nbGVUbyhoKTtmb3IocD1NYXRoLmFicygocCszKk1hdGguUEkpJSgyKk1hdGguUEkpLU1hdGguUEkpLGwucHVzaCh7ZGlzdGFuY2U6cyxhbmdsZURlbHRhOnB9KSxjKz1wO3MtbFswXS5kaXN0YW5jZT5uOyljLT1sLnNoaWZ0KCkuYW5nbGVEZWx0YTtpZihjPmkpcmV0dXJuITE7bysrLHMrPWYuZGlzdChoKX1yZXR1cm4hMH1mdW5jdGlvbiBKbCh0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aC0xO3IrKyllKz10W3JdLmRpc3QodFtyKzFdKTtyZXR1cm4gZX1mdW5jdGlvbiBLbCh0LGUscil7cmV0dXJuIHQ/LjYqZSpyOjB9ZnVuY3Rpb24gUWwodCxlKXtyZXR1cm4gTWF0aC5tYXgodD90LnJpZ2h0LXQubGVmdDowLGU/ZS5yaWdodC1lLmxlZnQ6MCl9ZnVuY3Rpb24gJGwodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1LbChyLGksYSkscz1RbChyLG4pKmEsbD0wLGM9SmwodCkvMix1PTA7dTx0Lmxlbmd0aC0xO3UrKyl7dmFyIGY9dFt1XSxoPXRbdSsxXSxwPWYuZGlzdChoKTtpZihsK3A+Yyl7dmFyIGQ9KGMtbCkvcCxtPXFlKGYueCxoLngsZCksZz1xZShmLnksaC55LGQpLHY9bmV3IHFsKG0sZyxoLmFuZ2xlVG8oZiksdSk7cmV0dXJuIHYuX3JvdW5kKCksIW98fFpsKHQsdixzLG8sZSk/djp2b2lkIDB9bCs9cH19ZnVuY3Rpb24gdGModCxlLHIsbixpLGEsbyxzLGwpe3ZhciBjPUtsKG4sYSxvKSx1PVFsKG4saSksZj11Km8saD0wPT09dFswXS54fHx0WzBdLng9PT1sfHwwPT09dFswXS55fHx0WzBdLnk9PT1sO3JldHVybiBlLWY8ZS80JiYoZT1mK2UvNCksZnVuY3Rpb24gdChlLHIsbixpLGEsbyxzLGwsYyl7Zm9yKHZhciB1PW8vMixmPUpsKGUpLGg9MCxwPXItbixkPVtdLG09MDttPGUubGVuZ3RoLTE7bSsrKXtmb3IodmFyIGc9ZVttXSx2PWVbbSsxXSx5PWcuZGlzdCh2KSx4PXYuYW5nbGVUbyhnKTtwK248aCt5Oyl7dmFyIGI9KChwKz1uKS1oKS95LF89cWUoZy54LHYueCxiKSx3PXFlKGcueSx2LnksYik7aWYoXz49MCYmXzxjJiZ3Pj0wJiZ3PGMmJnAtdT49MCYmcCt1PD1mKXt2YXIgVD1uZXcgcWwoXyx3LHgsbSk7VC5fcm91bmQoKSxpJiYhWmwoZSxULG8saSxhKXx8ZC5wdXNoKFQpfX1oKz15fWx8fGQubGVuZ3RofHxzfHwoZD10KGUsaC8yLG4saSxhLG8scywhMCxjKSk7cmV0dXJuIGR9KHQsaD9lLzIqcyVlOih1LzIrMiphKSpvKnMlZSxlLGMscixmLGgsITEsbCl9ZnVuY3Rpb24gZWModCxlLHIsbixhKXtmb3IodmFyIG89W10scz0wO3M8dC5sZW5ndGg7cysrKWZvcih2YXIgbD10W3NdLGM9dm9pZCAwLHU9MDt1PGwubGVuZ3RoLTE7dSsrKXt2YXIgZj1sW3VdLGg9bFt1KzFdO2YueDxlJiZoLng8ZXx8KGYueDxlP2Y9bmV3IGkoZSxmLnkrKGgueS1mLnkpKigoZS1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueDxlJiYoaD1uZXcgaShlLGYueSsoaC55LWYueSkqKChlLWYueCkvKGgueC1mLngpKSkuX3JvdW5kKCkpLGYueTxyJiZoLnk8cnx8KGYueTxyP2Y9bmV3IGkoZi54KyhoLngtZi54KSooKHItZi55KS8oaC55LWYueSkpLHIpLl9yb3VuZCgpOmgueTxyJiYoaD1uZXcgaShmLngrKGgueC1mLngpKigoci1mLnkpLyhoLnktZi55KSkscikuX3JvdW5kKCkpLGYueD49biYmaC54Pj1ufHwoZi54Pj1uP2Y9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpOmgueD49biYmKGg9bmV3IGkobixmLnkrKGgueS1mLnkpKigobi1mLngpLyhoLngtZi54KSkpLl9yb3VuZCgpKSxmLnk+PWEmJmgueT49YXx8KGYueT49YT9mPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKTpoLnk+PWEmJihoPW5ldyBpKGYueCsoaC54LWYueCkqKChhLWYueSkvKGgueS1mLnkpKSxhKS5fcm91bmQoKSksYyYmZi5lcXVhbHMoY1tjLmxlbmd0aC0xXSl8fChjPVtmXSxvLnB1c2goYykpLGMucHVzaChoKSkpKSl9cmV0dXJuIG99ZnVuY3Rpb24gcmModCxlLHIsbil7dmFyIGE9W10sbz10LmltYWdlLHM9by5waXhlbFJhdGlvLGw9by5wYWRkZWRSZWN0LnctMixjPW8ucGFkZGVkUmVjdC5oLTIsdT10LnJpZ2h0LXQubGVmdCxmPXQuYm90dG9tLXQudG9wLGg9by5zdHJldGNoWHx8W1swLGxdXSxwPW8uc3RyZXRjaFl8fFtbMCxjXV0sZD1mdW5jdGlvbih0LGUpe3JldHVybiB0K2VbMV0tZVswXX0sbT1oLnJlZHVjZShkLDApLGc9cC5yZWR1Y2UoZCwwKSx2PWwtbSx5PWMtZyx4PTAsYj1tLF89MCx3PWcsVD0wLGs9dixBPTAsTT15O2lmKG8uY29udGVudCYmbil7dmFyIFM9by5jb250ZW50O3g9bmMoaCwwLFNbMF0pLF89bmMocCwwLFNbMV0pLGI9bmMoaCxTWzBdLFNbMl0pLHc9bmMocCxTWzFdLFNbM10pLFQ9U1swXS14LEE9U1sxXS1fLGs9U1syXS1TWzBdLWIsTT1TWzNdLVNbMV0td312YXIgRT1mdW5jdGlvbihuLGEsbCxjKXt2YXIgaD1hYyhuLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxwPW9jKG4uZml4ZWQtVCxrLG4uc3RyZXRjaCxtKSxkPWFjKGEuc3RyZXRjaC1fLHcsZix0LnRvcCksdj1vYyhhLmZpeGVkLUEsTSxhLnN0cmV0Y2gsZykseT1hYyhsLnN0cmV0Y2gteCxiLHUsdC5sZWZ0KSxTPW9jKGwuZml4ZWQtVCxrLGwuc3RyZXRjaCxtKSxFPWFjKGMuc3RyZXRjaC1fLHcsZix0LnRvcCksTD1vYyhjLmZpeGVkLUEsTSxjLnN0cmV0Y2gsZyksQz1uZXcgaShoLGQpLFA9bmV3IGkoeSxkKSxJPW5ldyBpKHksRSksTz1uZXcgaShoLEUpLHo9bmV3IGkocC9zLHYvcyksRD1uZXcgaShTL3MsTC9zKSxSPWUqTWF0aC5QSS8xODA7aWYoUil7dmFyIEY9TWF0aC5zaW4oUiksQj1NYXRoLmNvcyhSKSxOPVtCLC1GLEYsQl07Qy5fbWF0TXVsdChOKSxQLl9tYXRNdWx0KE4pLE8uX21hdE11bHQoTiksSS5fbWF0TXVsdChOKX12YXIgaj1uLnN0cmV0Y2grbi5maXhlZCxVPWwuc3RyZXRjaCtsLmZpeGVkLFY9YS5zdHJldGNoK2EuZml4ZWQsSD1jLnN0cmV0Y2grYy5maXhlZDtyZXR1cm57dGw6Qyx0cjpQLGJsOk8sYnI6SSx0ZXg6e3g6by5wYWRkZWRSZWN0LngrMStqLHk6by5wYWRkZWRSZWN0LnkrMStWLHc6VS1qLGg6SC1WfSx3cml0aW5nTW9kZTp2b2lkIDAsZ2x5cGhPZmZzZXQ6WzAsMF0sc2VjdGlvbkluZGV4OjAscGl4ZWxPZmZzZXRUTDp6LHBpeGVsT2Zmc2V0QlI6RCxtaW5Gb250U2NhbGVYOmsvcy91LG1pbkZvbnRTY2FsZVk6TS9zL2YsaXNTREY6cn19O2lmKG4mJihvLnN0cmV0Y2hYfHxvLnN0cmV0Y2hZKSlmb3IodmFyIEw9aWMoaCx2LG0pLEM9aWMocCx5LGcpLFA9MDtQPEwubGVuZ3RoLTE7UCsrKWZvcih2YXIgST1MW1BdLE89TFtQKzFdLHo9MDt6PEMubGVuZ3RoLTE7eisrKXt2YXIgRD1DW3pdLFI9Q1t6KzFdO2EucHVzaChFKEksRCxPLFIpKX1lbHNlIGEucHVzaChFKHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6LTF9LHtmaXhlZDowLHN0cmV0Y2g6bCsxfSx7Zml4ZWQ6MCxzdHJldGNoOmMrMX0pKTtyZXR1cm4gYX1mdW5jdGlvbiBuYyh0LGUscil7Zm9yKHZhciBuPTAsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe3ZhciBvPWFbaV07bis9TWF0aC5tYXgoZSxNYXRoLm1pbihyLG9bMV0pKS1NYXRoLm1heChlLE1hdGgubWluKHIsb1swXSkpfXJldHVybiBufWZ1bmN0aW9uIGljKHQsZSxyKXtmb3IodmFyIG49W3tmaXhlZDotMSxzdHJldGNoOjB9XSxpPTAsYT10O2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW9bMF0sbD1vWzFdLGM9bltuLmxlbmd0aC0xXTtuLnB1c2goe2ZpeGVkOnMtYy5zdHJldGNoLHN0cmV0Y2g6Yy5zdHJldGNofSksbi5wdXNoKHtmaXhlZDpzLWMuc3RyZXRjaCxzdHJldGNoOmMuc3RyZXRjaCsobC1zKX0pfXJldHVybiBuLnB1c2goe2ZpeGVkOmUrMSxzdHJldGNoOnJ9KSxufWZ1bmN0aW9uIGFjKHQsZSxyLG4pe3JldHVybiB0L2UqcitufWZ1bmN0aW9uIG9jKHQsZSxyLG4pe3JldHVybiB0LWUqci9ufXZhciBzYz1mdW5jdGlvbih0LGUscixuLGEsbyxzLGwsYyx1KXtpZih0aGlzLmJveFN0YXJ0SW5kZXg9dC5sZW5ndGgsYyl7dmFyIGY9by50b3AsaD1vLmJvdHRvbSxwPW8uY29sbGlzaW9uUGFkZGluZztwJiYoZi09cFsxXSxoKz1wWzNdKTt2YXIgZD1oLWY7ZD4wJiYoZD1NYXRoLm1heCgxMCxkKSx0aGlzLmNpcmNsZURpYW1ldGVyPWQpfWVsc2V7dmFyIG09by50b3Aqcy1sLGc9by5ib3R0b20qcytsLHY9by5sZWZ0KnMtbCx5PW8ucmlnaHQqcytsLHg9by5jb2xsaXNpb25QYWRkaW5nO2lmKHgmJih2LT14WzBdKnMsbS09eFsxXSpzLHkrPXhbMl0qcyxnKz14WzNdKnMpLHUpe3ZhciBiPW5ldyBpKHYsbSksXz1uZXcgaSh5LG0pLHc9bmV3IGkodixnKSxUPW5ldyBpKHksZyksaz11Kk1hdGguUEkvMTgwO2IuX3JvdGF0ZShrKSxfLl9yb3RhdGUoayksdy5fcm90YXRlKGspLFQuX3JvdGF0ZShrKSx2PU1hdGgubWluKGIueCxfLngsdy54LFQueCkseT1NYXRoLm1heChiLngsXy54LHcueCxULngpLG09TWF0aC5taW4oYi55LF8ueSx3LnksVC55KSxnPU1hdGgubWF4KGIueSxfLnksdy55LFQueSl9dC5lbXBsYWNlQmFjayhlLngsZS55LHYsbSx5LGcscixuLGEpfXRoaXMuYm94RW5kSW5kZXg9dC5sZW5ndGh9LGxjPWZ1bmN0aW9uKHQsZSl7aWYodm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPWNjKSx0aGlzLmRhdGE9dCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuY29tcGFyZT1lLHRoaXMubGVuZ3RoPjApZm9yKHZhciByPSh0aGlzLmxlbmd0aD4+MSktMTtyPj0wO3ItLSl0aGlzLl9kb3duKHIpfTtmdW5jdGlvbiBjYyh0LGUpe3JldHVybiB0PGU/LTE6dD5lPzE6MH1mdW5jdGlvbiB1Yyh0LGUscil7dm9pZCAwPT09ZSYmKGU9MSksdm9pZCAwPT09ciYmKHI9ITEpO2Zvcih2YXIgbj0xLzAsYT0xLzAsbz0tMS8wLHM9LTEvMCxsPXRbMF0sYz0wO2M8bC5sZW5ndGg7YysrKXt2YXIgdT1sW2NdOyghY3x8dS54PG4pJiYobj11LngpLCghY3x8dS55PGEpJiYoYT11LnkpLCghY3x8dS54Pm8pJiYobz11LngpLCghY3x8dS55PnMpJiYocz11LnkpfXZhciBmPW8tbixoPXMtYSxwPU1hdGgubWluKGYsaCksZD1wLzIsbT1uZXcgbGMoW10sZmMpO2lmKDA9PT1wKXJldHVybiBuZXcgaShuLGEpO2Zvcih2YXIgZz1uO2c8bztnKz1wKWZvcih2YXIgdj1hO3Y8czt2Kz1wKW0ucHVzaChuZXcgaGMoZytkLHYrZCxkLHQpKTtmb3IodmFyIHk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wLG49MCxpPXRbMF0sYT0wLG89aS5sZW5ndGgscz1vLTE7YTxvO3M9YSsrKXt2YXIgbD1pW2FdLGM9aVtzXSx1PWwueCpjLnktYy54KmwueTtyKz0obC54K2MueCkqdSxuKz0obC55K2MueSkqdSxlKz0zKnV9cmV0dXJuIG5ldyBoYyhyL2Usbi9lLDAsdCl9KHQpLHg9bS5sZW5ndGg7bS5sZW5ndGg7KXt2YXIgYj1tLnBvcCgpOyhiLmQ+eS5kfHwheS5kKSYmKHk9YixyJiZjb25zb2xlLmxvZygiZm91bmQgYmVzdCAlZCBhZnRlciAlZCBwcm9iZXMiLE1hdGgucm91bmQoMWU0KmIuZCkvMWU0LHgpKSxiLm1heC15LmQ8PWV8fChkPWIuaC8yLG0ucHVzaChuZXcgaGMoYi5wLngtZCxiLnAueS1kLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngrZCxiLnAueS1kLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngtZCxiLnAueStkLGQsdCkpLG0ucHVzaChuZXcgaGMoYi5wLngrZCxiLnAueStkLGQsdCkpLHgrPTQpfXJldHVybiByJiYoY29uc29sZS5sb2coIm51bSBwcm9iZXM6ICIreCksY29uc29sZS5sb2coImJlc3QgZGlzdGFuY2U6ICIreS5kKSkseS5wfWZ1bmN0aW9uIGZjKHQsZSl7cmV0dXJuIGUubWF4LXQubWF4fWZ1bmN0aW9uIGhjKHQsZSxyLG4pe3RoaXMucD1uZXcgaSh0LGUpLHRoaXMuaD1yLHRoaXMuZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0hMSxuPTEvMCxpPTA7aTxlLmxlbmd0aDtpKyspZm9yKHZhciBhPWVbaV0sbz0wLHM9YS5sZW5ndGgsbD1zLTE7bzxzO2w9bysrKXt2YXIgYz1hW29dLHU9YVtsXTtjLnk+dC55IT11Lnk+dC55JiZ0Lng8KHUueC1jLngpKih0LnktYy55KS8odS55LWMueSkrYy54JiYocj0hciksbj1NYXRoLm1pbihuLHJvKHQsYyx1KSl9cmV0dXJuKHI/MTotMSkqTWF0aC5zcXJ0KG4pfSh0aGlzLnAsbiksdGhpcy5tYXg9dGhpcy5kK3RoaXMuaCpNYXRoLlNRUlQyfWxjLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQpe3RoaXMuZGF0YS5wdXNoKHQpLHRoaXMubGVuZ3RoKyssdGhpcy5fdXAodGhpcy5sZW5ndGgtMSl9LGxjLnByb3RvdHlwZS5wb3A9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciB0PXRoaXMuZGF0YVswXSxlPXRoaXMuZGF0YS5wb3AoKTtyZXR1cm4gdGhpcy5sZW5ndGgtLSx0aGlzLmxlbmd0aD4wJiYodGhpcy5kYXRhWzBdPWUsdGhpcy5fZG93bigwKSksdH19LGxjLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YVswXX0sbGMucHJvdG90eXBlLl91cD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5kYXRhLHI9dGhpcy5jb21wYXJlLG49ZVt0XTt0PjA7KXt2YXIgaT10LTE+PjEsYT1lW2ldO2lmKHIobixhKT49MClicmVhaztlW3RdPWEsdD1pfWVbdF09bn0sbGMucHJvdG90eXBlLl9kb3duPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmRhdGEscj10aGlzLmNvbXBhcmUsbj10aGlzLmxlbmd0aD4+MSxpPWVbdF07dDxuOyl7dmFyIGE9MSsodDw8MSksbz1lW2FdLHM9YSsxO2lmKHM8dGhpcy5sZW5ndGgmJnIoZVtzXSxvKTwwJiYoYT1zLG89ZVtzXSkscihvLGkpPj0wKWJyZWFrO2VbdF09byx0PWF9ZVt0XT1pfTt2YXIgcGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2Z1bmN0aW9uIGRjKHQsZSl7cmV0dXJuIGVbMV0hPT1wYz9mdW5jdGlvbih0LGUscil7dmFyIG49MCxpPTA7c3dpdGNoKGU9TWF0aC5hYnMoZSkscj1NYXRoLmFicyhyKSx0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJ0b3AiOmk9ci03O2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpjYXNlImJvdHRvbSI6aT03LXJ9c3dpdGNoKHQpe2Nhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6Y2FzZSJyaWdodCI6bj0tZTticmVhaztjYXNlInRvcC1sZWZ0IjpjYXNlImJvdHRvbS1sZWZ0IjpjYXNlImxlZnQiOm49ZX1yZXR1cm5bbixpXX0odCxlWzBdLGVbMV0pOmZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxuPTA7ZTwwJiYoZT0wKTt2YXIgaT1lL01hdGguc3FydCgyKTtzd2l0Y2godCl7Y2FzZSJ0b3AtcmlnaHQiOmNhc2UidG9wLWxlZnQiOm49aS03O2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0IjpjYXNlImJvdHRvbS1sZWZ0IjpuPTctaTticmVhaztjYXNlImJvdHRvbSI6bj03LWU7YnJlYWs7Y2FzZSJ0b3AiOm49ZS03fXN3aXRjaCh0KXtjYXNlInRvcC1yaWdodCI6Y2FzZSJib3R0b20tcmlnaHQiOnI9LWk7YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6Y2FzZSJib3R0b20tbGVmdCI6cj1pO2JyZWFrO2Nhc2UibGVmdCI6cj1lO2JyZWFrO2Nhc2UicmlnaHQiOnI9LWV9cmV0dXJuW3Isbl19KHQsZVswXSl9ZnVuY3Rpb24gbWModCl7c3dpdGNoKHQpe2Nhc2UicmlnaHQiOmNhc2UidG9wLXJpZ2h0IjpjYXNlImJvdHRvbS1yaWdodCI6cmV0dXJuInJpZ2h0IjtjYXNlImxlZnQiOmNhc2UidG9wLWxlZnQiOmNhc2UiYm90dG9tLWxlZnQiOnJldHVybiJsZWZ0In1yZXR1cm4iY2VudGVyIn1mdW5jdGlvbiBnYyh0LGUscixuLGEsbyxzLGwsYyx1LGYsaCxwLGQsbSl7dmFyIGc9ZnVuY3Rpb24odCxlLHIsbixhLG8scyxsKXtmb3IodmFyIGM9bi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKG8se30pKk1hdGguUEkvMTgwLHU9W10sZj0wLGg9ZS5wb3NpdGlvbmVkTGluZXM7ZjxoLmxlbmd0aDtmKz0xKWZvcih2YXIgcD1oW2ZdLGQ9MCxtPXAucG9zaXRpb25lZEdseXBocztkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF07aWYoZy5yZWN0KXt2YXIgdj1nLnJlY3R8fHt9LHk9NCx4PSEwLGI9MSxfPTAsdz0oYXx8bCkmJmcudmVydGljYWwsVD1nLm1ldHJpY3MuYWR2YW5jZSpnLnNjYWxlLzI7aWYobCYmZS52ZXJ0aWNhbGl6YWJsZSl7dmFyIGs9MjQqKGcuc2NhbGUtMSksQT0oMjQtZy5tZXRyaWNzLndpZHRoKmcuc2NhbGUpLzI7Xz1wLmxpbmVPZmZzZXQvMi0oZy5pbWFnZU5hbWU/LUE6ayl9aWYoZy5pbWFnZU5hbWUpe3ZhciBNPXNbZy5pbWFnZU5hbWVdO3g9TS5zZGYseT0xLyhiPU0ucGl4ZWxSYXRpbyl9dmFyIFM9YT9bZy54K1QsZy55XTpbMCwwXSxFPWE/WzAsMF06W2cueCtUK3JbMF0sZy55K3JbMV0tX10sTD1bMCwwXTt3JiYoTD1FLEU9WzAsMF0pO3ZhciBDPShnLm1ldHJpY3MubGVmdC15KSpnLnNjYWxlLVQrRVswXSxQPSgtZy5tZXRyaWNzLnRvcC15KSpnLnNjYWxlK0VbMV0sST1DK3YudypnLnNjYWxlL2IsTz1QK3YuaCpnLnNjYWxlL2Isej1uZXcgaShDLFApLEQ9bmV3IGkoSSxQKSxSPW5ldyBpKEMsTyksRj1uZXcgaShJLE8pO2lmKHcpe3ZhciBCPW5ldyBpKC1ULFQtIC0xNyksTj0tTWF0aC5QSS8yLGo9MTItVCxVPWcuaW1hZ2VOYW1lP2o6MCxWPW5ldyBpKDIyLWosLVUpLEg9bmV3KEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KGksW251bGxdLmNvbmNhdChMKSkpO3ouX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKSxELl9yb3RhdGVBcm91bmQoTixCKS5fYWRkKFYpLl9hZGQoSCksUi5fcm90YXRlQXJvdW5kKE4sQikuX2FkZChWKS5fYWRkKEgpLEYuX3JvdGF0ZUFyb3VuZChOLEIpLl9hZGQoVikuX2FkZChIKX1pZihjKXt2YXIgcT1NYXRoLnNpbihjKSxHPU1hdGguY29zKGMpLFk9W0csLXEscSxHXTt6Ll9tYXRNdWx0KFkpLEQuX21hdE11bHQoWSksUi5fbWF0TXVsdChZKSxGLl9tYXRNdWx0KFkpfXZhciBXPW5ldyBpKDAsMCksWD1uZXcgaSgwLDApO3UucHVzaCh7dGw6eix0cjpELGJsOlIsYnI6Rix0ZXg6dix3cml0aW5nTW9kZTplLndyaXRpbmdNb2RlLGdseXBoT2Zmc2V0OlMsc2VjdGlvbkluZGV4Omcuc2VjdGlvbkluZGV4LGlzU0RGOngscGl4ZWxPZmZzZXRUTDpXLHBpeGVsT2Zmc2V0QlI6WCxtaW5Gb250U2NhbGVYOjAsbWluRm9udFNjYWxlWTowfSl9fXJldHVybiB1fSgwLHIsbCxhLG8scyxuLHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCksdj10LnRleHRTaXplRGF0YSx5PW51bGw7InNvdXJjZSI9PT12LmtpbmQ/KHk9WzEyOCphLmxheW91dC5nZXQoInRleHQtc2l6ZSIpLmV2YWx1YXRlKHMse30pXSlbMF0+MzI2NDAmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgInRleHQtc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAidGV4dC1zaXplIi4nKToiY29tcG9zaXRlIj09PXYua2luZCYmKCh5PVsxMjgqZC5jb21wb3NpdGVUZXh0U2l6ZXNbMF0uZXZhbHVhdGUocyx7fSxtKSwxMjgqZC5jb21wb3NpdGVUZXh0U2l6ZXNbMV0uZXZhbHVhdGUocyx7fSxtKV0pWzBdPjMyNjQwfHx5WzFdPjMyNjQwKSYmXyh0LmxheWVySWRzWzBdKyc6IFZhbHVlIGZvciAidGV4dC1zaXplIiBpcyA+PSAyNTUuIFJlZHVjZSB5b3VyICJ0ZXh0LXNpemUiLicpLHQuYWRkU3ltYm9scyh0LnRleHQsZyx5LGwsbyxzLHUsZSxjLmxpbmVTdGFydEluZGV4LGMubGluZUxlbmd0aCxwLG0pO2Zvcih2YXIgeD0wLGI9Zjt4PGIubGVuZ3RoO3grPTEpe2hbYlt4XV09dC50ZXh0LnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xfXJldHVybiA0KmcubGVuZ3RofWZ1bmN0aW9uIHZjKHQpe2Zvcih2YXIgZSBpbiB0KXJldHVybiB0W2VdO3JldHVybiBudWxsfWZ1bmN0aW9uIHljKHQsZSxyLG4pe3ZhciBpPXQuY29tcGFyZVRleHQ7aWYoZSBpbiBpKXtmb3IodmFyIGE9aVtlXSxvPWEubGVuZ3RoLTE7bz49MDtvLS0paWYobi5kaXN0KGFbb10pPHIpcmV0dXJuITB9ZWxzZSBpW2VdPVtdO3JldHVybiBpW2VdLnB1c2gobiksITF9dmFyIHhjPUxzLlZlY3RvclRpbGVGZWF0dXJlLnR5cGVzLGJjPVt7bmFtZToiYV9mYWRlX29wYWNpdHkiLGNvbXBvbmVudHM6MSx0eXBlOiJVaW50OCIsb2Zmc2V0OjB9XTtmdW5jdGlvbiBfYyh0LGUscixuLGksYSxvLHMsbCxjLHUsZixoKXt2YXIgcD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1swXSkpOjAsZD1zP01hdGgubWluKDMyNjQwLE1hdGgucm91bmQoc1sxXSkpOjA7dC5lbXBsYWNlQmFjayhlLHIsTWF0aC5yb3VuZCgzMipuKSxNYXRoLnJvdW5kKDMyKmkpLGEsbywocDw8MSkrKGw/MTowKSxkLDE2KmMsMTYqdSwyNTYqZiwyNTYqaCl9ZnVuY3Rpb24gd2ModCxlLHIpe3QuZW1wbGFjZUJhY2soZS54LGUueSxyKSx0LmVtcGxhY2VCYWNrKGUueCxlLnksciksdC5lbXBsYWNlQmFjayhlLngsZS55LHIpLHQuZW1wbGFjZUJhY2soZS54LGUueSxyKX1mdW5jdGlvbiBUYyh0KXtmb3IodmFyIGU9MCxyPXQuc2VjdGlvbnM7ZTxyLmxlbmd0aDtlKz0xKXtpZigkbihyW2VdLnRleHQpKXJldHVybiEwfXJldHVybiExfXZhciBrYz1mdW5jdGlvbih0KXt0aGlzLmxheW91dFZlcnRleEFycmF5PW5ldyBOaSx0aGlzLmluZGV4QXJyYXk9bmV3IFlpLHRoaXMucHJvZ3JhbUNvbmZpZ3VyYXRpb25zPXQsdGhpcy5zZWdtZW50cz1uZXcgcGEsdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk9bmV3IGppLHRoaXMub3BhY2l0eVZlcnRleEFycmF5PW5ldyBVaSx0aGlzLnBsYWNlZFN5bWJvbEFycmF5PW5ldyBhYX07a2MucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMubGF5b3V0VmVydGV4QXJyYXkubGVuZ3RoJiYwPT09dGhpcy5pbmRleEFycmF5Lmxlbmd0aCYmMD09PXRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5Lmxlbmd0aCYmMD09PXRoaXMub3BhY2l0eVZlcnRleEFycmF5Lmxlbmd0aH0sa2MucHJvdG90eXBlLnVwbG9hZD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmlzRW1wdHkoKXx8KHImJih0aGlzLmxheW91dFZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmxheW91dFZlcnRleEFycmF5LEpzLm1lbWJlcnMpLHRoaXMuaW5kZXhCdWZmZXI9dC5jcmVhdGVJbmRleEJ1ZmZlcih0aGlzLmluZGV4QXJyYXksZSksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuZHluYW1pY0xheW91dFZlcnRleEFycmF5LEtzLm1lbWJlcnMsITApLHRoaXMub3BhY2l0eVZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLm9wYWNpdHlWZXJ0ZXhBcnJheSxiYywhMCksdGhpcy5vcGFjaXR5VmVydGV4QnVmZmVyLml0ZW1TaXplPTEpLChyfHxuKSYmdGhpcy5wcm9ncmFtQ29uZmlndXJhdGlvbnMudXBsb2FkKHQpKX0sa2MucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmxheW91dFZlcnRleEJ1ZmZlciYmKHRoaXMubGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLmluZGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLnByb2dyYW1Db25maWd1cmF0aW9ucy5kZXN0cm95KCksdGhpcy5zZWdtZW50cy5kZXN0cm95KCksdGhpcy5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLmRlc3Ryb3koKSx0aGlzLm9wYWNpdHlWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpKX0sTm4oIlN5bWJvbEJ1ZmZlcnMiLGtjKTt2YXIgQWM9ZnVuY3Rpb24odCxlLHIpe3RoaXMubGF5b3V0VmVydGV4QXJyYXk9bmV3IHQsdGhpcy5sYXlvdXRBdHRyaWJ1dGVzPWUsdGhpcy5pbmRleEFycmF5PW5ldyByLHRoaXMuc2VnbWVudHM9bmV3IHBhLHRoaXMuY29sbGlzaW9uVmVydGV4QXJyYXk9bmV3IEdpfTtBYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyPXQuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGF5b3V0VmVydGV4QXJyYXksdGhpcy5sYXlvdXRBdHRyaWJ1dGVzKSx0aGlzLmluZGV4QnVmZmVyPXQuY3JlYXRlSW5kZXhCdWZmZXIodGhpcy5pbmRleEFycmF5KSx0aGlzLmNvbGxpc2lvblZlcnRleEJ1ZmZlcj10LmNyZWF0ZVZlcnRleEJ1ZmZlcih0aGlzLmNvbGxpc2lvblZlcnRleEFycmF5LFFzLm1lbWJlcnMsITApfSxBYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMubGF5b3V0VmVydGV4QnVmZmVyJiYodGhpcy5sYXlvdXRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuaW5kZXhCdWZmZXIuZGVzdHJveSgpLHRoaXMuc2VnbWVudHMuZGVzdHJveSgpLHRoaXMuY29sbGlzaW9uVmVydGV4QnVmZmVyLmRlc3Ryb3koKSl9LE5uKCJDb2xsaXNpb25CdWZmZXJzIixBYyk7dmFyIE1jPWZ1bmN0aW9uKHQpe3RoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLnpvb209dC56b29tLHRoaXMub3ZlcnNjYWxpbmc9dC5vdmVyc2NhbGluZyx0aGlzLmxheWVycz10LmxheWVycyx0aGlzLmxheWVySWRzPXRoaXMubGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSksdGhpcy5pbmRleD10LmluZGV4LHRoaXMucGl4ZWxSYXRpbz10LnBpeGVsUmF0aW8sdGhpcy5zb3VyY2VMYXllckluZGV4PXQuc291cmNlTGF5ZXJJbmRleCx0aGlzLmhhc1BhdHRlcm49ITEsdGhpcy5oYXNSVExUZXh0PSExLHRoaXMuc29ydEtleVJhbmdlcz1bXSx0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5PVtdLHRoaXMucGxhY2VtZW50SW52UHJvak1hdHJpeD1obyhbXSksdGhpcy5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeD1obyhbXSk7dmFyIGU9dGhpcy5sYXllcnNbMF0uX3VuZXZhbHVhdGVkTGF5b3V0Ll92YWx1ZXM7dGhpcy50ZXh0U2l6ZURhdGE9R2wodGhpcy56b29tLGVbInRleHQtc2l6ZSJdKSx0aGlzLmljb25TaXplRGF0YT1HbCh0aGlzLnpvb20sZVsiaWNvbi1zaXplIl0pO3ZhciByPXRoaXMubGF5ZXJzWzBdLmxheW91dCxuPXIuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKSxpPXIuZ2V0KCJzeW1ib2wtei1vcmRlciIpO3RoaXMuc29ydEZlYXR1cmVzQnlLZXk9InZpZXdwb3J0LXkiIT09aSYmdm9pZCAwIT09bi5jb25zdGFudE9yKDEpO3ZhciBhPSJ2aWV3cG9ydC15Ij09PWl8fCJhdXRvIj09PWkmJiF0aGlzLnNvcnRGZWF0dXJlc0J5S2V5O3RoaXMuc29ydEZlYXR1cmVzQnlZPWEmJihyLmdldCgidGV4dC1hbGxvdy1vdmVybGFwIil8fHIuZ2V0KCJpY29uLWFsbG93LW92ZXJsYXAiKXx8ci5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpfHxyLmdldCgiaWNvbi1pZ25vcmUtcGxhY2VtZW50IikpLCJwb2ludCI9PT1yLmdldCgic3ltYm9sLXBsYWNlbWVudCIpJiYodGhpcy53cml0aW5nTW9kZXM9ci5nZXQoInRleHQtd3JpdGluZy1tb2RlIikubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gQ2xbdF19KSkpLHRoaXMuc3RhdGVEZXBlbmRlbnRMYXllcklkcz10aGlzLmxheWVycy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlzU3RhdGVEZXBlbmRlbnQoKX0pKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpLHRoaXMuc291cmNlSUQ9dC5zb3VyY2VJRH07TWMucHJvdG90eXBlLmNyZWF0ZUFycmF5cz1mdW5jdGlvbigpe3RoaXMudGV4dD1uZXcga2MobmV3IFVhKEpzLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLChmdW5jdGlvbih0KXtyZXR1cm4vXnRleHQvLnRlc3QodCl9KSkpLHRoaXMuaWNvbj1uZXcga2MobmV3IFVhKEpzLm1lbWJlcnMsdGhpcy5sYXllcnMsdGhpcy56b29tLChmdW5jdGlvbih0KXtyZXR1cm4vXmljb24vLnRlc3QodCl9KSkpLHRoaXMuZ2x5cGhPZmZzZXRBcnJheT1uZXcgbGEsdGhpcy5saW5lVmVydGV4QXJyYXk9bmV3IGNhLHRoaXMuc3ltYm9sSW5zdGFuY2VzPW5ldyBzYX0sTWMucHJvdG90eXBlLmNhbGN1bGF0ZUdseXBoRGVwZW5kZW5jaWVzPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBhPTA7YTx0Lmxlbmd0aDthKyspaWYoZVt0LmNoYXJDb2RlQXQoYSldPSEwLChyfHxuKSYmaSl7dmFyIG89cmxbdC5jaGFyQXQoYSldO28mJihlW28uY2hhckNvZGVBdCgwKV09ITApfX0sTWMucHJvdG90eXBlLnBvcHVsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmxheWVyc1swXSxpPW4ubGF5b3V0LGE9aS5nZXQoInRleHQtZm9udCIpLG89aS5nZXQoInRleHQtZmllbGQiKSxzPWkuZ2V0KCJpY29uLWltYWdlIiksbD0oImNvbnN0YW50IiE9PW8udmFsdWUua2luZHx8by52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIG5lJiYhby52YWx1ZS52YWx1ZS5pc0VtcHR5KCl8fG8udmFsdWUudmFsdWUudG9TdHJpbmcoKS5sZW5ndGg+MCkmJigiY29uc3RhbnQiIT09YS52YWx1ZS5raW5kfHxhLnZhbHVlLnZhbHVlLmxlbmd0aD4wKSxjPSJjb25zdGFudCIhPT1zLnZhbHVlLmtpbmR8fCEhcy52YWx1ZS52YWx1ZXx8T2JqZWN0LmtleXMocy5wYXJhbWV0ZXJzKS5sZW5ndGg+MCx1PWkuZ2V0KCJzeW1ib2wtc29ydC1rZXkiKTtpZih0aGlzLmZlYXR1cmVzPVtdLGx8fGMpe2Zvcih2YXIgZj1lLmljb25EZXBlbmRlbmNpZXMsaD1lLmdseXBoRGVwZW5kZW5jaWVzLHA9ZS5hdmFpbGFibGVJbWFnZXMsZD1uZXcgcGkodGhpcy56b29tKSxtPTAsZz10O208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXSx5PXYuZmVhdHVyZSx4PXYuaWQsYj12LmluZGV4LF89di5zb3VyY2VMYXllckluZGV4LHc9bi5fZmVhdHVyZUZpbHRlci5uZWVkR2VvbWV0cnksVD17dHlwZTp5LnR5cGUsaWQ6eCxwcm9wZXJ0aWVzOnkucHJvcGVydGllcyxnZW9tZXRyeTp3P1lhKHkpOltdfTtpZihuLl9mZWF0dXJlRmlsdGVyLmZpbHRlcihkLFQscikpe3d8fChULmdlb21ldHJ5PVlhKHkpKTt2YXIgaz12b2lkIDA7aWYobCl7dmFyIEE9bi5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoInRleHQtZmllbGQiLFQscixwKSxNPW5lLmZhY3RvcnkoQSk7VGMoTSkmJih0aGlzLmhhc1JUTFRleHQ9ITApLCghdGhpcy5oYXNSVExUZXh0fHwidW5hdmFpbGFibGUiPT09dWkoKXx8dGhpcy5oYXNSVExUZXh0JiZoaS5pc1BhcnNlZCgpKSYmKGs9ZWwoTSxuLFQpKX12YXIgUz12b2lkIDA7aWYoYyl7dmFyIEU9bi5nZXRWYWx1ZUFuZFJlc29sdmVUb2tlbnMoImljb24taW1hZ2UiLFQscixwKTtTPUUgaW5zdGFuY2VvZiBpZT9FOmllLmZyb21TdHJpbmcoRSl9aWYoa3x8Uyl7dmFyIEw9dGhpcy5zb3J0RmVhdHVyZXNCeUtleT91LmV2YWx1YXRlKFQse30scik6dm9pZCAwLEM9e2lkOngsdGV4dDprLGljb246UyxpbmRleDpiLHNvdXJjZUxheWVySW5kZXg6XyxnZW9tZXRyeTpZYSh5KSxwcm9wZXJ0aWVzOnkucHJvcGVydGllcyx0eXBlOnhjW3kudHlwZV0sc29ydEtleTpMfTtpZih0aGlzLmZlYXR1cmVzLnB1c2goQyksUyYmKGZbUy5uYW1lXT0hMCksayl7dmFyIFA9YS5ldmFsdWF0ZShULHt9LHIpLmpvaW4oIiwiKSxJPSJtYXAiPT09aS5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1pLmdldCgic3ltYm9sLXBsYWNlbWVudCIpO3RoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudD10aGlzLndyaXRpbmdNb2RlcyYmdGhpcy53cml0aW5nTW9kZXMuaW5kZXhPZihDbC52ZXJ0aWNhbCk+PTA7Zm9yKHZhciBPPTAsej1rLnNlY3Rpb25zO088ei5sZW5ndGg7Tys9MSl7dmFyIEQ9eltPXTtpZihELmltYWdlKWZbRC5pbWFnZS5uYW1lXT0hMDtlbHNle3ZhciBSPVduKGsudG9TdHJpbmcoKSksRj1ELmZvbnRTdGFja3x8UCxCPWhbRl09aFtGXXx8e307dGhpcy5jYWxjdWxhdGVHbHlwaERlcGVuZGVuY2llcyhELnRleHQsQixJLHRoaXMuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCxSKX19fX19fSJsaW5lIj09PWkuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IikmJih0aGlzLmZlYXR1cmVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9e30sbj1bXSxpPTA7ZnVuY3Rpb24gYShlKXtuLnB1c2godFtlXSksaSsrfWZ1bmN0aW9uIG8odCxlLGkpe3ZhciBhPXJbdF07cmV0dXJuIGRlbGV0ZSByW3RdLHJbZV09YSxuW2FdLmdlb21ldHJ5WzBdLnBvcCgpLG5bYV0uZ2VvbWV0cnlbMF09blthXS5nZW9tZXRyeVswXS5jb25jYXQoaVswXSksYX1mdW5jdGlvbiBzKHQscixpKXt2YXIgYT1lW3JdO3JldHVybiBkZWxldGUgZVtyXSxlW3RdPWEsblthXS5nZW9tZXRyeVswXS5zaGlmdCgpLG5bYV0uZ2VvbWV0cnlbMF09aVswXS5jb25jYXQoblthXS5nZW9tZXRyeVswXSksYX1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj1yP2VbMF1bZVswXS5sZW5ndGgtMV06ZVswXVswXTtyZXR1cm4gdCsiOiIrbi54KyI6IituLnl9Zm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXRbY10sZj11Lmdlb21ldHJ5LGg9dS50ZXh0P3UudGV4dC50b1N0cmluZygpOm51bGw7aWYoaCl7dmFyIHA9bChoLGYpLGQ9bChoLGYsITApO2lmKHAgaW4gciYmZCBpbiBlJiZyW3BdIT09ZVtkXSl7dmFyIG09cyhwLGQsZiksZz1vKHAsZCxuW21dLmdlb21ldHJ5KTtkZWxldGUgZVtwXSxkZWxldGUgcltkXSxyW2woaCxuW2ddLmdlb21ldHJ5LCEwKV09ZyxuW21dLmdlb21ldHJ5PW51bGx9ZWxzZSBwIGluIHI/byhwLGQsZik6ZCBpbiBlP3MocCxkLGYpOihhKGMpLGVbcF09aS0xLHJbZF09aS0xKX1lbHNlIGEoYyl9cmV0dXJuIG4uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nZW9tZXRyeX0pKX0odGhpcy5mZWF0dXJlcykpLHRoaXMuc29ydEZlYXR1cmVzQnlLZXkmJnRoaXMuZmVhdHVyZXMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5zb3J0S2V5LWUuc29ydEtleX0pKX19LE1jLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3RhdGVEZXBlbmRlbnRMYXllcnMubGVuZ3RoJiYodGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5sYXllcnMsciksdGhpcy5pY29uLnByb2dyYW1Db25maWd1cmF0aW9ucy51cGRhdGVQYWludEFycmF5cyh0LGUsdGhpcy5sYXllcnMscikpfSxNYy5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoJiYhdGhpcy5oYXNSVExUZXh0fSxNYy5wcm90b3R5cGUudXBsb2FkUGVuZGluZz1mdW5jdGlvbigpe3JldHVybiF0aGlzLnVwbG9hZGVkfHx0aGlzLnRleHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfHx0aGlzLmljb24ucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLm5lZWRzVXBsb2FkfSxNYy5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpeyF0aGlzLnVwbG9hZGVkJiZ0aGlzLmhhc0RlYnVnRGF0YSgpJiYodGhpcy50ZXh0Q29sbGlzaW9uQm94LnVwbG9hZCh0KSx0aGlzLmljb25Db2xsaXNpb25Cb3gudXBsb2FkKHQpKSx0aGlzLnRleHQudXBsb2FkKHQsdGhpcy5zb3J0RmVhdHVyZXNCeVksIXRoaXMudXBsb2FkZWQsdGhpcy50ZXh0LnByb2dyYW1Db25maWd1cmF0aW9ucy5uZWVkc1VwbG9hZCksdGhpcy5pY29uLnVwbG9hZCh0LHRoaXMuc29ydEZlYXR1cmVzQnlZLCF0aGlzLnVwbG9hZGVkLHRoaXMuaWNvbi5wcm9ncmFtQ29uZmlndXJhdGlvbnMubmVlZHNVcGxvYWQpLHRoaXMudXBsb2FkZWQ9ITB9LE1jLnByb3RvdHlwZS5kZXN0cm95RGVidWdEYXRhPWZ1bmN0aW9uKCl7dGhpcy50ZXh0Q29sbGlzaW9uQm94LmRlc3Ryb3koKSx0aGlzLmljb25Db2xsaXNpb25Cb3guZGVzdHJveSgpfSxNYy5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudGV4dC5kZXN0cm95KCksdGhpcy5pY29uLmRlc3Ryb3koKSx0aGlzLmhhc0RlYnVnRGF0YSgpJiZ0aGlzLmRlc3Ryb3lEZWJ1Z0RhdGEoKX0sTWMucHJvdG90eXBlLmFkZFRvTGluZVZlcnRleEFycmF5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoO2lmKHZvaWQgMCE9PXQuc2VnbWVudCl7Zm9yKHZhciBuPXQuZGlzdChlW3Quc2VnbWVudCsxXSksaT10LmRpc3QoZVt0LnNlZ21lbnRdKSxhPXt9LG89dC5zZWdtZW50KzE7bzxlLmxlbmd0aDtvKyspYVtvXT17eDplW29dLngseTplW29dLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6bn0sbzxlLmxlbmd0aC0xJiYobis9ZVtvKzFdLmRpc3QoZVtvXSkpO2Zvcih2YXIgcz10LnNlZ21lbnR8fDA7cz49MDtzLS0pYVtzXT17eDplW3NdLngseTplW3NdLnksdGlsZVVuaXREaXN0YW5jZUZyb21BbmNob3I6aX0scz4wJiYoaSs9ZVtzLTFdLmRpc3QoZVtzXSkpO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1hW2xdO3RoaXMubGluZVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKGMueCxjLnksYy50aWxlVW5pdERpc3RhbmNlRnJvbUFuY2hvcil9fXJldHVybntsaW5lU3RhcnRJbmRleDpyLGxpbmVMZW5ndGg6dGhpcy5saW5lVmVydGV4QXJyYXkubGVuZ3RoLXJ9fSxNYy5wcm90b3R5cGUuYWRkU3ltYm9scz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZil7Zm9yKHZhciBoPXQuaW5kZXhBcnJheSxwPXQubGF5b3V0VmVydGV4QXJyYXksZD10LnNlZ21lbnRzLnByZXBhcmVTZWdtZW50KDQqZS5sZW5ndGgscCxoLGEuc29ydEtleSksbT10aGlzLmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoLGc9ZC52ZXJ0ZXhMZW5ndGgsdj10aGlzLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJm89PT1DbC52ZXJ0aWNhbD9NYXRoLlBJLzI6MCx5PWEudGV4dCYmYS50ZXh0LnNlY3Rpb25zLHg9MDt4PGUubGVuZ3RoO3grKyl7dmFyIGI9ZVt4XSxfPWIudGwsdz1iLnRyLFQ9Yi5ibCxrPWIuYnIsQT1iLnRleCxNPWIucGl4ZWxPZmZzZXRUTCxTPWIucGl4ZWxPZmZzZXRCUixFPWIubWluRm9udFNjYWxlWCxMPWIubWluRm9udFNjYWxlWSxDPWIuZ2x5cGhPZmZzZXQsUD1iLmlzU0RGLEk9Yi5zZWN0aW9uSW5kZXgsTz1kLnZlcnRleExlbmd0aCx6PUNbMV07X2MocCxzLngscy55LF8ueCx6K18ueSxBLngsQS55LHIsUCxNLngsTS55LEUsTCksX2MocCxzLngscy55LHcueCx6K3cueSxBLngrQS53LEEueSxyLFAsUy54LE0ueSxFLEwpLF9jKHAscy54LHMueSxULngseitULnksQS54LEEueStBLmgscixQLE0ueCxTLnksRSxMKSxfYyhwLHMueCxzLnksay54LHoray55LEEueCtBLncsQS55K0EuaCxyLFAsUy54LFMueSxFLEwpLHdjKHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LHMsdiksaC5lbXBsYWNlQmFjayhPLE8rMSxPKzIpLGguZW1wbGFjZUJhY2soTysxLE8rMixPKzMpLGQudmVydGV4TGVuZ3RoKz00LGQucHJpbWl0aXZlTGVuZ3RoKz0yLHRoaXMuZ2x5cGhPZmZzZXRBcnJheS5lbXBsYWNlQmFjayhDWzBdKSx4IT09ZS5sZW5ndGgtMSYmST09PWVbeCsxXS5zZWN0aW9uSW5kZXh8fHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLnBvcHVsYXRlUGFpbnRBcnJheXMocC5sZW5ndGgsYSxhLmluZGV4LHt9LGYseSYmeVtJXSl9dC5wbGFjZWRTeW1ib2xBcnJheS5lbXBsYWNlQmFjayhzLngscy55LG0sdGhpcy5nbHlwaE9mZnNldEFycmF5Lmxlbmd0aC1tLGcsbCxjLHMuc2VnbWVudCxyP3JbMF06MCxyP3JbMV06MCxuWzBdLG5bMV0sbywwLCExLDAsdSl9LE1jLnByb3RvdHlwZS5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXg9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3JldHVybiBlLmVtcGxhY2VCYWNrKDAsMCksdC5lbXBsYWNlQmFjayhyLngsci55LG4saSxNYXRoLnJvdW5kKGEueCksTWF0aC5yb3VuZChhLnkpKX0sTWMucHJvdG90eXBlLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXM9ZnVuY3Rpb24odCxlLHIsbixhLG8scyl7dmFyIGw9YS5zZWdtZW50cy5wcmVwYXJlU2VnbWVudCg0LGEubGF5b3V0VmVydGV4QXJyYXksYS5pbmRleEFycmF5KSxjPWwudmVydGV4TGVuZ3RoLHU9YS5sYXlvdXRWZXJ0ZXhBcnJheSxmPWEuY29sbGlzaW9uVmVydGV4QXJyYXksaD1zLmFuY2hvclgscD1zLmFuY2hvclk7dGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHQsZSkpLHRoaXMuX2FkZENvbGxpc2lvbkRlYnVnVmVydGV4KHUsZixvLGgscCxuZXcgaShyLGUpKSx0aGlzLl9hZGRDb2xsaXNpb25EZWJ1Z1ZlcnRleCh1LGYsbyxoLHAsbmV3IGkocixuKSksdGhpcy5fYWRkQ29sbGlzaW9uRGVidWdWZXJ0ZXgodSxmLG8saCxwLG5ldyBpKHQsbikpLGwudmVydGV4TGVuZ3RoKz00O3ZhciBkPWEuaW5kZXhBcnJheTtkLmVtcGxhY2VCYWNrKGMsYysxKSxkLmVtcGxhY2VCYWNrKGMrMSxjKzIpLGQuZW1wbGFjZUJhY2soYysyLGMrMyksZC5lbXBsYWNlQmFjayhjKzMsYyksbC5wcmltaXRpdmVMZW5ndGgrPTR9LE1jLnByb3RvdHlwZS5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10O2k8ZTtpKyspe3ZhciBhPXRoaXMuY29sbGlzaW9uQm94QXJyYXkuZ2V0KGkpLG89YS54MSxzPWEueTEsbD1hLngyLGM9YS55Mjt0aGlzLmFkZENvbGxpc2lvbkRlYnVnVmVydGljZXMobyxzLGwsYyxuP3RoaXMudGV4dENvbGxpc2lvbkJveDp0aGlzLmljb25Db2xsaXNpb25Cb3gsYS5hbmNob3JQb2ludCxyKX19LE1jLnByb3RvdHlwZS5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycz1mdW5jdGlvbigpe3RoaXMuaGFzRGVidWdEYXRhKCkmJnRoaXMuZGVzdHJveURlYnVnRGF0YSgpLHRoaXMudGV4dENvbGxpc2lvbkJveD1uZXcgQWMoSGksJHMubWVtYmVycyxRaSksdGhpcy5pY29uQ29sbGlzaW9uQm94PW5ldyBBYyhIaSwkcy5tZW1iZXJzLFFpKTtmb3IodmFyIHQ9MDt0PHRoaXMuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aDt0Kyspe3ZhciBlPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldCh0KTt0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS50ZXh0Qm94U3RhcnRJbmRleCxlLnRleHRCb3hFbmRJbmRleCxlLCEwKSx0aGlzLmFkZERlYnVnQ29sbGlzaW9uQm94ZXMoZS52ZXJ0aWNhbFRleHRCb3hTdGFydEluZGV4LGUudmVydGljYWxUZXh0Qm94RW5kSW5kZXgsZSwhMCksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUuaWNvbkJveFN0YXJ0SW5kZXgsZS5pY29uQm94RW5kSW5kZXgsZSwhMSksdGhpcy5hZGREZWJ1Z0NvbGxpc2lvbkJveGVzKGUudmVydGljYWxJY29uQm94U3RhcnRJbmRleCxlLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4LGUsITEpfX0sTWMucHJvdG90eXBlLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsKXtmb3IodmFyIGM9e30sdT1lO3U8cjt1Kyspe3ZhciBmPXQuZ2V0KHUpO2MudGV4dEJveD17eDE6Zi54MSx5MTpmLnkxLHgyOmYueDIseTI6Zi55MixhbmNob3JQb2ludFg6Zi5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOmYuYW5jaG9yUG9pbnRZfSxjLnRleHRGZWF0dXJlSW5kZXg9Zi5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBoPW47aDxpO2grKyl7dmFyIHA9dC5nZXQoaCk7Yy52ZXJ0aWNhbFRleHRCb3g9e3gxOnAueDEseTE6cC55MSx4MjpwLngyLHkyOnAueTIsYW5jaG9yUG9pbnRYOnAuYW5jaG9yUG9pbnRYLGFuY2hvclBvaW50WTpwLmFuY2hvclBvaW50WX0sYy52ZXJ0aWNhbFRleHRGZWF0dXJlSW5kZXg9cC5mZWF0dXJlSW5kZXg7YnJlYWt9Zm9yKHZhciBkPWE7ZDxvO2QrKyl7dmFyIG09dC5nZXQoZCk7Yy5pY29uQm94PXt4MTptLngxLHkxOm0ueTEseDI6bS54Mix5MjptLnkyLGFuY2hvclBvaW50WDptLmFuY2hvclBvaW50WCxhbmNob3JQb2ludFk6bS5hbmNob3JQb2ludFl9LGMuaWNvbkZlYXR1cmVJbmRleD1tLmZlYXR1cmVJbmRleDticmVha31mb3IodmFyIGc9cztnPGw7ZysrKXt2YXIgdj10LmdldChnKTtjLnZlcnRpY2FsSWNvbkJveD17eDE6di54MSx5MTp2LnkxLHgyOnYueDIseTI6di55MixhbmNob3JQb2ludFg6di5hbmNob3JQb2ludFgsYW5jaG9yUG9pbnRZOnYuYW5jaG9yUG9pbnRZfSxjLnZlcnRpY2FsSWNvbkZlYXR1cmVJbmRleD12LmZlYXR1cmVJbmRleDticmVha31yZXR1cm4gY30sTWMucHJvdG90eXBlLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXM9ZnVuY3Rpb24odCl7dGhpcy5jb2xsaXNpb25BcnJheXM9W107Zm9yKHZhciBlPTA7ZTx0aGlzLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLnN5bWJvbEluc3RhbmNlcy5nZXQoZSk7dGhpcy5jb2xsaXNpb25BcnJheXMucHVzaCh0aGlzLl9kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzRm9yU3ltYm9sKHQsci50ZXh0Qm94U3RhcnRJbmRleCxyLnRleHRCb3hFbmRJbmRleCxyLnZlcnRpY2FsVGV4dEJveFN0YXJ0SW5kZXgsci52ZXJ0aWNhbFRleHRCb3hFbmRJbmRleCxyLmljb25Cb3hTdGFydEluZGV4LHIuaWNvbkJveEVuZEluZGV4LHIudmVydGljYWxJY29uQm94U3RhcnRJbmRleCxyLnZlcnRpY2FsSWNvbkJveEVuZEluZGV4KSl9fSxNYy5wcm90b3R5cGUuaGFzVGV4dERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzSWNvbkRhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pY29uLnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzRGVidWdEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGV4dENvbGxpc2lvbkJveCYmdGhpcy5pY29uQ29sbGlzaW9uQm94fSxNYy5wcm90b3R5cGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy50ZXh0Q29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNEZWJ1Z0RhdGEoKSYmdGhpcy5pY29uQ29sbGlzaW9uQm94LnNlZ21lbnRzLmdldCgpLmxlbmd0aD4wfSxNYy5wcm90b3R5cGUuYWRkSW5kaWNlc0ZvclBsYWNlZFN5bWJvbD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnBsYWNlZFN5bWJvbEFycmF5LmdldChlKSxuPXIudmVydGV4U3RhcnRJbmRleCs0KnIubnVtR2x5cGhzLGk9ci52ZXJ0ZXhTdGFydEluZGV4O2k8bjtpKz00KXQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpLGkrMSxpKzIpLHQuaW5kZXhBcnJheS5lbXBsYWNlQmFjayhpKzEsaSsyLGkrMyl9LE1jLnByb3RvdHlwZS5nZXRTb3J0ZWRTeW1ib2xJbmRleGVzPWZ1bmN0aW9uKHQpe2lmKHRoaXMuc29ydGVkQW5nbGU9PT10JiZ2b2lkIDAhPT10aGlzLnN5bWJvbEluc3RhbmNlSW5kZXhlcylyZXR1cm4gdGhpcy5zeW1ib2xJbnN0YW5jZUluZGV4ZXM7Zm9yKHZhciBlPU1hdGguc2luKHQpLHI9TWF0aC5jb3ModCksbj1bXSxpPVtdLGE9W10sbz0wO288dGhpcy5zeW1ib2xJbnN0YW5jZXMubGVuZ3RoOysrbyl7YS5wdXNoKG8pO3ZhciBzPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChvKTtuLnB1c2goMHxNYXRoLnJvdW5kKGUqcy5hbmNob3JYK3Iqcy5hbmNob3JZKSksaS5wdXNoKHMuZmVhdHVyZUluZGV4KX1yZXR1cm4gYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBuW3RdLW5bZV18fGlbZV0taVt0XX0pKSxhfSxNYy5wcm90b3R5cGUuYWRkVG9Tb3J0S2V5UmFuZ2VzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5zb3J0S2V5UmFuZ2VzW3RoaXMuc29ydEtleVJhbmdlcy5sZW5ndGgtMV07ciYmci5zb3J0S2V5PT09ZT9yLnN5bWJvbEluc3RhbmNlRW5kPXQrMTp0aGlzLnNvcnRLZXlSYW5nZXMucHVzaCh7c29ydEtleTplLHN5bWJvbEluc3RhbmNlU3RhcnQ6dCxzeW1ib2xJbnN0YW5jZUVuZDp0KzF9KX0sTWMucHJvdG90eXBlLnNvcnRGZWF0dXJlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKHRoaXMuc29ydEZlYXR1cmVzQnlZJiZ0aGlzLnNvcnRlZEFuZ2xlIT09dCYmISh0aGlzLnRleHQuc2VnbWVudHMuZ2V0KCkubGVuZ3RoPjF8fHRoaXMuaWNvbi5zZWdtZW50cy5nZXQoKS5sZW5ndGg+MSkpe3RoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzPXRoaXMuZ2V0U29ydGVkU3ltYm9sSW5kZXhlcyh0KSx0aGlzLnNvcnRlZEFuZ2xlPXQsdGhpcy50ZXh0LmluZGV4QXJyYXkuY2xlYXIoKSx0aGlzLmljb24uaW5kZXhBcnJheS5jbGVhcigpLHRoaXMuZmVhdHVyZVNvcnRPcmRlcj1bXTtmb3IodmFyIHI9MCxuPXRoaXMuc3ltYm9sSW5zdGFuY2VJbmRleGVzO3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPXRoaXMuc3ltYm9sSW5zdGFuY2VzLmdldChpKTt0aGlzLmZlYXR1cmVTb3J0T3JkZXIucHVzaChhLmZlYXR1cmVJbmRleCksW2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0LHIsbil7dD49MCYmbi5pbmRleE9mKHQpPT09ciYmZS5hZGRJbmRpY2VzRm9yUGxhY2VkU3ltYm9sKGUudGV4dCx0KX0pKSxhLnZlcnRpY2FsUGxhY2VkVGV4dFN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy50ZXh0LGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLGEucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGEucGxhY2VkSWNvblN5bWJvbEluZGV4KSxhLnZlcnRpY2FsUGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wJiZ0aGlzLmFkZEluZGljZXNGb3JQbGFjZWRTeW1ib2wodGhpcy5pY29uLGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgpfXRoaXMudGV4dC5pbmRleEJ1ZmZlciYmdGhpcy50ZXh0LmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy50ZXh0LmluZGV4QXJyYXkpLHRoaXMuaWNvbi5pbmRleEJ1ZmZlciYmdGhpcy5pY29uLmluZGV4QnVmZmVyLnVwZGF0ZURhdGEodGhpcy5pY29uLmluZGV4QXJyYXkpfX0sTm4oIlN5bWJvbEJ1Y2tldCIsTWMse29taXQ6WyJsYXllcnMiLCJjb2xsaXNpb25Cb3hBcnJheSIsImZlYXR1cmVzIiwiY29tcGFyZVRleHQiXX0pLE1jLk1BWF9HTFlQSFM9NjU1MzUsTWMuYWRkRHluYW1pY0F0dHJpYnV0ZXM9d2M7dmFyIFNjPW5ldyBTaSh7InN5bWJvbC1wbGFjZW1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtcGxhY2VtZW50Il0pLCJzeW1ib2wtc3BhY2luZyI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zcGFjaW5nIl0pLCJzeW1ib2wtYXZvaWQtZWRnZXMiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtYXZvaWQtZWRnZXMiXSksInN5bWJvbC1zb3J0LWtleSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInN5bWJvbC1zb3J0LWtleSJdKSwic3ltYm9sLXotb3JkZXIiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJzeW1ib2wtei1vcmRlciJdKSwiaWNvbi1hbGxvdy1vdmVybGFwIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbGxvdy1vdmVybGFwIl0pLCJpY29uLWlnbm9yZS1wbGFjZW1lbnQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWlnbm9yZS1wbGFjZW1lbnQiXSksImljb24tb3B0aW9uYWwiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLW9wdGlvbmFsIl0pLCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRpb24tYWxpZ25tZW50Il0pLCJpY29uLXNpemUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXNpemUiXSksImljb24tdGV4dC1maXQiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0Il0pLCJpY29uLXRleHQtZml0LXBhZGRpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXRleHQtZml0LXBhZGRpbmciXSksImljb24taW1hZ2UiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLWltYWdlIl0pLCJpY29uLXJvdGF0ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbImljb24tcm90YXRlIl0pLCJpY29uLXBhZGRpbmciOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJpY29uLXBhZGRpbmciXSksImljb24ta2VlcC11cHJpZ2h0IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1rZWVwLXVwcmlnaHQiXSksImljb24tb2Zmc2V0IjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1vZmZzZXQiXSksImljb24tYW5jaG9yIjpuZXcgVGkoTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1hbmNob3IiXSksImljb24tcGl0Y2gtYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsiaWNvbi1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcGl0Y2gtYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1waXRjaC1hbGlnbm1lbnQiXSksInRleHQtcm90YXRpb24tYWxpZ25tZW50IjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiXSksInRleHQtZmllbGQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZpZWxkIl0pLCJ0ZXh0LWZvbnQiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWZvbnQiXSksInRleHQtc2l6ZSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtc2l6ZSJdKSwidGV4dC1tYXgtd2lkdGgiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC13aWR0aCJdKSwidGV4dC1saW5lLWhlaWdodCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtbGluZS1oZWlnaHQiXSksInRleHQtbGV0dGVyLXNwYWNpbmciOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWxldHRlci1zcGFjaW5nIl0pLCJ0ZXh0LWp1c3RpZnkiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWp1c3RpZnkiXSksInRleHQtcmFkaWFsLW9mZnNldCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtcmFkaWFsLW9mZnNldCJdKSwidGV4dC12YXJpYWJsZS1hbmNob3IiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXZhcmlhYmxlLWFuY2hvciJdKSwidGV4dC1hbmNob3IiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFuY2hvciJdKSwidGV4dC1tYXgtYW5nbGUiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LW1heC1hbmdsZSJdKSwidGV4dC13cml0aW5nLW1vZGUiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXdyaXRpbmctbW9kZSJdKSwidGV4dC1yb3RhdGUiOm5ldyBUaShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LXJvdGF0ZSJdKSwidGV4dC1wYWRkaW5nIjpuZXcgd2koTHQubGF5b3V0X3N5bWJvbFsidGV4dC1wYWRkaW5nIl0pLCJ0ZXh0LWtlZXAtdXByaWdodCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQta2VlcC11cHJpZ2h0Il0pLCJ0ZXh0LXRyYW5zZm9ybSI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtdHJhbnNmb3JtIl0pLCJ0ZXh0LW9mZnNldCI6bmV3IFRpKEx0LmxheW91dF9zeW1ib2xbInRleHQtb2Zmc2V0Il0pLCJ0ZXh0LWFsbG93LW92ZXJsYXAiOm5ldyB3aShMdC5sYXlvdXRfc3ltYm9sWyJ0ZXh0LWFsbG93LW92ZXJsYXAiXSksInRleHQtaWdub3JlLXBsYWNlbWVudCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtaWdub3JlLXBsYWNlbWVudCJdKSwidGV4dC1vcHRpb25hbCI6bmV3IHdpKEx0LmxheW91dF9zeW1ib2xbInRleHQtb3B0aW9uYWwiXSl9KSxFYz17cGFpbnQ6bmV3IFNpKHsiaWNvbi1vcGFjaXR5IjpuZXcgVGkoTHQucGFpbnRfc3ltYm9sWyJpY29uLW9wYWNpdHkiXSksImljb24tY29sb3IiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24tY29sb3IiXSksImljb24taGFsby1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi1oYWxvLWNvbG9yIl0pLCJpY29uLWhhbG8td2lkdGgiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24taGFsby13aWR0aCJdKSwiaWNvbi1oYWxvLWJsdXIiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbImljb24taGFsby1ibHVyIl0pLCJpY29uLXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUiXSksImljb24tdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsiaWNvbi10cmFuc2xhdGUtYW5jaG9yIl0pLCJ0ZXh0LW9wYWNpdHkiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtb3BhY2l0eSJdKSwidGV4dC1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1jb2xvciJdLHtydW50aW1lVHlwZTpVdCxnZXRPdmVycmlkZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50ZXh0Q29sb3J9LGhhc092ZXJyaWRlOmZ1bmN0aW9uKHQpe3JldHVybiEhdC50ZXh0Q29sb3J9fSksInRleHQtaGFsby1jb2xvciI6bmV3IFRpKEx0LnBhaW50X3N5bWJvbFsidGV4dC1oYWxvLWNvbG9yIl0pLCJ0ZXh0LWhhbG8td2lkdGgiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtaGFsby13aWR0aCJdKSwidGV4dC1oYWxvLWJsdXIiOm5ldyBUaShMdC5wYWludF9zeW1ib2xbInRleHQtaGFsby1ibHVyIl0pLCJ0ZXh0LXRyYW5zbGF0ZSI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUiXSksInRleHQtdHJhbnNsYXRlLWFuY2hvciI6bmV3IHdpKEx0LnBhaW50X3N5bWJvbFsidGV4dC10cmFuc2xhdGUtYW5jaG9yIl0pfSksbGF5b3V0OlNjfSxMYz1mdW5jdGlvbih0KXt0aGlzLnR5cGU9dC5wcm9wZXJ0eS5vdmVycmlkZXM/dC5wcm9wZXJ0eS5vdmVycmlkZXMucnVudGltZVR5cGU6RnQsdGhpcy5kZWZhdWx0VmFsdWU9dH07TGMucHJvdG90eXBlLmV2YWx1YXRlPWZ1bmN0aW9uKHQpe2lmKHQuZm9ybWF0dGVkU2VjdGlvbil7dmFyIGU9dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkub3ZlcnJpZGVzO2lmKGUmJmUuaGFzT3ZlcnJpZGUodC5mb3JtYXR0ZWRTZWN0aW9uKSlyZXR1cm4gZS5nZXRPdmVycmlkZSh0LmZvcm1hdHRlZFNlY3Rpb24pfXJldHVybiB0LmZlYXR1cmUmJnQuZmVhdHVyZVN0YXRlP3RoaXMuZGVmYXVsdFZhbHVlLmV2YWx1YXRlKHQuZmVhdHVyZSx0LmZlYXR1cmVTdGF0ZSk6dGhpcy5kZWZhdWx0VmFsdWUucHJvcGVydHkuc3BlY2lmaWNhdGlvbi5kZWZhdWx0fSxMYy5wcm90b3R5cGUuZWFjaENoaWxkPWZ1bmN0aW9uKHQpe3RoaXMuZGVmYXVsdFZhbHVlLmlzQ29uc3RhbnQoKXx8dCh0aGlzLmRlZmF1bHRWYWx1ZS52YWx1ZS5fc3R5bGVFeHByZXNzaW9uLmV4cHJlc3Npb24pfSxMYy5wcm90b3R5cGUub3V0cHV0RGVmaW5lZD1mdW5jdGlvbigpe3JldHVybiExfSxMYy5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LE5uKCJGb3JtYXRTZWN0aW9uT3ZlcnJpZGUiLExjLHtvbWl0OlsiZGVmYXVsdFZhbHVlIl19KTt2YXIgQ2M9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLEVjKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVjYWxjdWxhdGU9ZnVuY3Rpb24oZSxyKXtpZih0LnByb3RvdHlwZS5yZWNhbGN1bGF0ZS5jYWxsKHRoaXMsZSxyKSwiYXV0byI9PT10aGlzLmxheW91dC5nZXQoImljb24tcm90YXRpb24tYWxpZ25tZW50IikmJigicG9pbnQiIT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iik/dGhpcy5sYXlvdXQuX3ZhbHVlc1siaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiXT0ibWFwIjp0aGlzLmxheW91dC5fdmFsdWVzWyJpY29uLXJvdGF0aW9uLWFsaWdubWVudCJdPSJ2aWV3cG9ydCIpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmKCJwb2ludCIhPT10aGlzLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKT90aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCJdPSJtYXAiOnRoaXMubGF5b3V0Ll92YWx1ZXNbInRleHQtcm90YXRpb24tYWxpZ25tZW50Il09InZpZXdwb3J0IiksImF1dG8iPT09dGhpcy5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpJiYodGhpcy5sYXlvdXQuX3ZhbHVlc1sidGV4dC1waXRjaC1hbGlnbm1lbnQiXT10aGlzLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikpLCJhdXRvIj09PXRoaXMubGF5b3V0LmdldCgiaWNvbi1waXRjaC1hbGlnbm1lbnQiKSYmKHRoaXMubGF5b3V0Ll92YWx1ZXNbImljb24tcGl0Y2gtYWxpZ25tZW50Il09dGhpcy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCIpKSwicG9pbnQiPT09dGhpcy5sYXlvdXQuZ2V0KCJzeW1ib2wtcGxhY2VtZW50Iikpe3ZhciBuPXRoaXMubGF5b3V0LmdldCgidGV4dC13cml0aW5nLW1vZGUiKTtpZihuKXtmb3IodmFyIGk9W10sYT0wLG89bjthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07aS5pbmRleE9mKHMpPDAmJmkucHVzaChzKX10aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXdyaXRpbmctbW9kZSJdPWl9ZWxzZSB0aGlzLmxheW91dC5fdmFsdWVzWyJ0ZXh0LXdyaXRpbmctbW9kZSJdPVsiaG9yaXpvbnRhbCJdfXRoaXMuX3NldFBhaW50T3ZlcnJpZGVzKCl9LGUucHJvdG90eXBlLmdldFZhbHVlQW5kUmVzb2x2ZVRva2Vucz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLmxheW91dC5nZXQodCkuZXZhbHVhdGUoZSx7fSxyLG4pLGE9dGhpcy5fdW5ldmFsdWF0ZWRMYXlvdXQuX3ZhbHVlc1t0XTtyZXR1cm4gYS5pc0RhdGFEcml2ZW4oKXx8WXIoYS52YWx1ZSl8fCFpP2k6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5yZXBsYWNlKC97KFtee31dKyl9L2csKGZ1bmN0aW9uKGUscil7cmV0dXJuIHIgaW4gdD9TdHJpbmcodFtyXSk6IiJ9KSl9KGUucHJvcGVydGllcyxpKX0sZS5wcm90b3R5cGUuY3JlYXRlQnVja2V0PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTWModCl9LGUucHJvdG90eXBlLnF1ZXJ5UmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnF1ZXJ5SW50ZXJzZWN0c0ZlYXR1cmU9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sZS5wcm90b3R5cGUuX3NldFBhaW50T3ZlcnJpZGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAscj1FYy5wYWludC5vdmVycmlkYWJsZVByb3BlcnRpZXM7dDxyLmxlbmd0aDt0Kz0xKXt2YXIgbj1yW3RdO2lmKGUuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCxuKSl7dmFyIGk9dGhpcy5wYWludC5nZXQobiksYT1uZXcgTGMoaSksbz1uZXcgR3IoYSxpLnByb3BlcnR5LnNwZWNpZmljYXRpb24pLHM9bnVsbDtzPSJjb25zdGFudCI9PT1pLnZhbHVlLmtpbmR8fCJzb3VyY2UiPT09aS52YWx1ZS5raW5kP25ldyBYcigic291cmNlIixvKTpuZXcgWnIoImNvbXBvc2l0ZSIsbyxpLnZhbHVlLnpvb21TdG9wcyxpLnZhbHVlLl9pbnRlcnBvbGF0aW9uVHlwZSksdGhpcy5wYWludC5fdmFsdWVzW25dPW5ldyBiaShpLnByb3BlcnR5LHMsaS5wYXJhbWV0ZXJzKX19fSxlLnByb3RvdHlwZS5faGFuZGxlT3ZlcnJpZGFibGVQYWludFByb3BlcnR5VXBkYXRlPWZ1bmN0aW9uKHQscixuKXtyZXR1cm4hKCF0aGlzLmxheW91dHx8ci5pc0RhdGFEcml2ZW4oKXx8bi5pc0RhdGFEcml2ZW4oKSkmJmUuaGFzUGFpbnRPdmVycmlkZSh0aGlzLmxheW91dCx0KX0sZS5oYXNQYWludE92ZXJyaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nZXQoInRleHQtZmllbGQiKSxuPUVjLnBhaW50LnByb3BlcnRpZXNbZV0saT0hMSxhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBhPXJbZV07aWYobi5vdmVycmlkZXMmJm4ub3ZlcnJpZGVzLmhhc092ZXJyaWRlKGEpKXJldHVybiB2b2lkKGk9ITApfX07aWYoImNvbnN0YW50Ij09PXIudmFsdWUua2luZCYmci52YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIG5lKWEoci52YWx1ZS52YWx1ZS5zZWN0aW9ucyk7ZWxzZSBpZigic291cmNlIj09PXIudmFsdWUua2luZCl7dmFyIG89ZnVuY3Rpb24odCl7aWYoIWkpaWYodCBpbnN0YW5jZW9mIGNlJiZzZSh0LnZhbHVlKT09PUd0KXt2YXIgZT10LnZhbHVlO2EoZS5zZWN0aW9ucyl9ZWxzZSB0IGluc3RhbmNlb2YgcGU/YSh0LnNlY3Rpb25zKTp0LmVhY2hDaGlsZChvKX0scz1yLnZhbHVlO3MuX3N0eWxlRXhwcmVzc2lvbiYmbyhzLl9zdHlsZUV4cHJlc3Npb24uZXhwcmVzc2lvbil9cmV0dXJuIGl9LGV9KEVpKSxQYz17cGFpbnQ6bmV3IFNpKHsiYmFja2dyb3VuZC1jb2xvciI6bmV3IHdpKEx0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtY29sb3IiXSksImJhY2tncm91bmQtcGF0dGVybiI6bmV3IEFpKEx0LnBhaW50X2JhY2tncm91bmRbImJhY2tncm91bmQtcGF0dGVybiJdKSwiYmFja2dyb3VuZC1vcGFjaXR5IjpuZXcgd2koTHQucGFpbnRfYmFja2dyb3VuZFsiYmFja2dyb3VuZC1vcGFjaXR5Il0pfSl9LEljPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSl7dC5jYWxsKHRoaXMsZSxQYyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KEVpKSxPYz17cGFpbnQ6bmV3IFNpKHsicmFzdGVyLW9wYWNpdHkiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1vcGFjaXR5Il0pLCJyYXN0ZXItaHVlLXJvdGF0ZSI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWh1ZS1yb3RhdGUiXSksInJhc3Rlci1icmlnaHRuZXNzLW1pbiI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWJyaWdodG5lc3MtbWluIl0pLCJyYXN0ZXItYnJpZ2h0bmVzcy1tYXgiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1icmlnaHRuZXNzLW1heCJdKSwicmFzdGVyLXNhdHVyYXRpb24iOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1zYXR1cmF0aW9uIl0pLCJyYXN0ZXItY29udHJhc3QiOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1jb250cmFzdCJdKSwicmFzdGVyLXJlc2FtcGxpbmciOm5ldyB3aShMdC5wYWludF9yYXN0ZXJbInJhc3Rlci1yZXNhbXBsaW5nIl0pLCJyYXN0ZXItZmFkZS1kdXJhdGlvbiI6bmV3IHdpKEx0LnBhaW50X3Jhc3RlclsicmFzdGVyLWZhZGUtZHVyYXRpb24iXSl9KX0semM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlLE9jKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZX0oRWkpO3ZhciBEYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUse30pLHRoaXMuaW1wbGVtZW50YXRpb249ZX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuaXMzRD1mdW5jdGlvbigpe3JldHVybiIzZCI9PT10aGlzLmltcGxlbWVudGF0aW9uLnJlbmRlcmluZ01vZGV9LGUucHJvdG90eXBlLmhhc09mZnNjcmVlblBhc3M9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5pbXBsZW1lbnRhdGlvbi5wcmVyZW5kZXJ9LGUucHJvdG90eXBlLnJlY2FsY3VsYXRlPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe30sZS5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7fSxlLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uQWRkKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbih0KXt0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlJiZ0aGlzLmltcGxlbWVudGF0aW9uLm9uUmVtb3ZlKHQsdC5wYWludGVyLmNvbnRleHQuZ2wpfSxlfShFaSksUmM9e2NpcmNsZTpfbyxoZWF0bWFwOlBvLGhpbGxzaGFkZTpPbyxmaWxsOnhzLCJmaWxsLWV4dHJ1c2lvbiI6RnMsbGluZTpYcyxzeW1ib2w6Q2MsYmFja2dyb3VuZDpJYyxyYXN0ZXI6emN9O3ZhciBGYz1zZWxmLkhUTUxJbWFnZUVsZW1lbnQsQmM9c2VsZi5IVE1MQ2FudmFzRWxlbWVudCxOYz1zZWxmLkhUTUxWaWRlb0VsZW1lbnQsamM9c2VsZi5JbWFnZURhdGEsVWM9c2VsZi5JbWFnZUJpdG1hcCxWYz1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLmZvcm1hdD1yLHRoaXMudGV4dHVyZT10LmdsLmNyZWF0ZVRleHR1cmUoKSx0aGlzLnVwZGF0ZShlLG4pfTtWYy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LndpZHRoLGk9dC5oZWlnaHQsYT0hKHRoaXMuc2l6ZSYmdGhpcy5zaXplWzBdPT09biYmdGhpcy5zaXplWzFdPT09aXx8ciksbz10aGlzLmNvbnRleHQscz1vLmdsO2lmKHRoaXMudXNlTWlwbWFwPUJvb2xlYW4oZSYmZS51c2VNaXBtYXApLHMuYmluZFRleHR1cmUocy5URVhUVVJFXzJELHRoaXMudGV4dHVyZSksby5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0KCExKSxvLnBpeGVsU3RvcmVVbnBhY2suc2V0KDEpLG8ucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0KHRoaXMuZm9ybWF0PT09cy5SR0JBJiYoIWV8fCExIT09ZS5wcmVtdWx0aXBseSkpLGEpdGhpcy5zaXplPVtuLGldLHQgaW5zdGFuY2VvZiBGY3x8dCBpbnN0YW5jZW9mIEJjfHx0IGluc3RhbmNlb2YgTmN8fHQgaW5zdGFuY2VvZiBqY3x8VWMmJnQgaW5zdGFuY2VvZiBVYz9zLnRleEltYWdlMkQocy5URVhUVVJFXzJELDAsdGhpcy5mb3JtYXQsdGhpcy5mb3JtYXQscy5VTlNJR05FRF9CWVRFLHQpOnMudGV4SW1hZ2UyRChzLlRFWFRVUkVfMkQsMCx0aGlzLmZvcm1hdCxuLGksMCx0aGlzLmZvcm1hdCxzLlVOU0lHTkVEX0JZVEUsdC5kYXRhKTtlbHNle3ZhciBsPXJ8fHt4OjAseTowfSxjPWwueCx1PWwueTt0IGluc3RhbmNlb2YgRmN8fHQgaW5zdGFuY2VvZiBCY3x8dCBpbnN0YW5jZW9mIE5jfHx0IGluc3RhbmNlb2YgamN8fFVjJiZ0IGluc3RhbmNlb2YgVWM/cy50ZXhTdWJJbWFnZTJEKHMuVEVYVFVSRV8yRCwwLGMsdSxzLlJHQkEscy5VTlNJR05FRF9CWVRFLHQpOnMudGV4U3ViSW1hZ2UyRChzLlRFWFRVUkVfMkQsMCxjLHUsbixpLHMuUkdCQSxzLlVOU0lHTkVEX0JZVEUsdC5kYXRhKX10aGlzLnVzZU1pcG1hcCYmdGhpcy5pc1NpemVQb3dlck9mVHdvKCkmJnMuZ2VuZXJhdGVNaXBtYXAocy5URVhUVVJFXzJEKX0sVmMucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuY29udGV4dC5nbDtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCx0aGlzLnRleHR1cmUpLHIhPT1uLkxJTkVBUl9NSVBNQVBfTkVBUkVTVHx8dGhpcy5pc1NpemVQb3dlck9mVHdvKCl8fChyPW4uTElORUFSKSx0IT09dGhpcy5maWx0ZXImJihuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLHQpLG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX01JTl9GSUxURVIscnx8dCksdGhpcy5maWx0ZXI9dCksZSE9PXRoaXMud3JhcCYmKG4udGV4UGFyYW1ldGVyaShuLlRFWFRVUkVfMkQsbi5URVhUVVJFX1dSQVBfUyxlKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1QsZSksdGhpcy53cmFwPWUpfSxWYy5wcm90b3R5cGUuaXNTaXplUG93ZXJPZlR3bz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemVbMF09PT10aGlzLnNpemVbMV0mJk1hdGgubG9nKHRoaXMuc2l6ZVswXSkvTWF0aC5MTjIlMT09MH0sVmMucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLmNvbnRleHQuZ2wuZGVsZXRlVGV4dHVyZSh0aGlzLnRleHR1cmUpLHRoaXMudGV4dHVyZT1udWxsfTt2YXIgSGM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpczt0aGlzLl9jYWxsYmFjaz10LHRoaXMuX3RyaWdnZXJlZD0hMSwidW5kZWZpbmVkIiE9dHlwZW9mIE1lc3NhZ2VDaGFubmVsJiYodGhpcy5fY2hhbm5lbD1uZXcgTWVzc2FnZUNoYW5uZWwsdGhpcy5fY2hhbm5lbC5wb3J0Mi5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtlLl90cmlnZ2VyZWQ9ITEsZS5fY2FsbGJhY2soKX0pfTtIYy5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5fdHJpZ2dlcmVkfHwodGhpcy5fdHJpZ2dlcmVkPSEwLHRoaXMuX2NoYW5uZWw/dGhpcy5fY2hhbm5lbC5wb3J0MS5wb3N0TWVzc2FnZSghMCk6c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll90cmlnZ2VyZWQ9ITEsdC5fY2FsbGJhY2soKX0pLDApKX0sSGMucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe2RlbGV0ZSB0aGlzLl9jaGFubmVsLHRoaXMuX2NhbGxiYWNrPWZ1bmN0aW9uKCl7fX07dmFyIHFjPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRhcmdldD10LHRoaXMucGFyZW50PWUsdGhpcy5tYXBJZD1yLHRoaXMuY2FsbGJhY2tzPXt9LHRoaXMudGFza3M9e30sdGhpcy50YXNrUXVldWU9W10sdGhpcy5jYW5jZWxDYWxsYmFja3M9e30sbShbInJlY2VpdmUiLCJwcm9jZXNzIl0sdGhpcyksdGhpcy5pbnZva2VyPW5ldyBIYyh0aGlzLnByb2Nlc3MpLHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMucmVjZWl2ZSwhMSksdGhpcy5nbG9iYWxTY29wZT1rKCk/dDpzZWxmfTtmdW5jdGlvbiBHYyh0LGUscil7dmFyIG49MipNYXRoLlBJKjYzNzgxMzcvMjU2L01hdGgucG93KDIscik7cmV0dXJuW3Qqbi0yKk1hdGguUEkqNjM3ODEzNy8yLGUqbi0yKk1hdGguUEkqNjM3ODEzNy8yXX1xYy5wcm90b3R5cGUuc2VuZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRoaXM7dm9pZCAwPT09aSYmKGk9ITEpO3ZhciBvPU1hdGgucm91bmQoMWUxOCpNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDAsMTApO3ImJih0aGlzLmNhbGxiYWNrc1tvXT1yKTt2YXIgcz1TKHRoaXMuZ2xvYmFsU2NvcGUpP3ZvaWQgMDpbXTtyZXR1cm4gdGhpcy50YXJnZXQucG9zdE1lc3NhZ2Uoe2lkOm8sdHlwZTp0LGhhc0NhbGxiYWNrOiEhcix0YXJnZXRNYXBJZDpuLG11c3RRdWV1ZTppLHNvdXJjZU1hcElkOnRoaXMubWFwSWQsZGF0YTpIbihlLHMpfSxzKSx7Y2FuY2VsOmZ1bmN0aW9uKCl7ciYmZGVsZXRlIGEuY2FsbGJhY2tzW29dLGEudGFyZ2V0LnBvc3RNZXNzYWdlKHtpZDpvLHR5cGU6IjxjYW5jZWw+Iix0YXJnZXRNYXBJZDpuLHNvdXJjZU1hcElkOmEubWFwSWR9KX19fSxxYy5wcm90b3R5cGUucmVjZWl2ZT1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGEscj1lLmlkO2lmKHImJighZS50YXJnZXRNYXBJZHx8dGhpcy5tYXBJZD09PWUudGFyZ2V0TWFwSWQpKWlmKCI8Y2FuY2VsPiI9PT1lLnR5cGUpe2RlbGV0ZSB0aGlzLnRhc2tzW3JdO3ZhciBuPXRoaXMuY2FuY2VsQ2FsbGJhY2tzW3JdO2RlbGV0ZSB0aGlzLmNhbmNlbENhbGxiYWNrc1tyXSxuJiZuKCl9ZWxzZSBrKCl8fGUubXVzdFF1ZXVlPyh0aGlzLnRhc2tzW3JdPWUsdGhpcy50YXNrUXVldWUucHVzaChyKSx0aGlzLmludm9rZXIudHJpZ2dlcigpKTp0aGlzLnByb2Nlc3NUYXNrKHIsZSl9LHFjLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7aWYodGhpcy50YXNrUXVldWUubGVuZ3RoKXt2YXIgdD10aGlzLnRhc2tRdWV1ZS5zaGlmdCgpLGU9dGhpcy50YXNrc1t0XTtkZWxldGUgdGhpcy50YXNrc1t0XSx0aGlzLnRhc2tRdWV1ZS5sZW5ndGgmJnRoaXMuaW52b2tlci50cmlnZ2VyKCksZSYmdGhpcy5wcm9jZXNzVGFzayh0LGUpfX0scWMucHJvdG90eXBlLnByb2Nlc3NUYXNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztpZigiPHJlc3BvbnNlPiI9PT1lLnR5cGUpe3ZhciBuPXRoaXMuY2FsbGJhY2tzW3RdO2RlbGV0ZSB0aGlzLmNhbGxiYWNrc1t0XSxuJiYoZS5lcnJvcj9uKHFuKGUuZXJyb3IpKTpuKG51bGwscW4oZS5kYXRhKSkpfWVsc2V7dmFyIGk9ITEsYT1TKHRoaXMuZ2xvYmFsU2NvcGUpP3ZvaWQgMDpbXSxvPWUuaGFzQ2FsbGJhY2s/ZnVuY3Rpb24oZSxuKXtpPSEwLGRlbGV0ZSByLmNhbmNlbENhbGxiYWNrc1t0XSxyLnRhcmdldC5wb3N0TWVzc2FnZSh7aWQ6dCx0eXBlOiI8cmVzcG9uc2U+Iixzb3VyY2VNYXBJZDpyLm1hcElkLGVycm9yOmU/SG4oZSk6bnVsbCxkYXRhOkhuKG4sYSl9LGEpfTpmdW5jdGlvbih0KXtpPSEwfSxzPW51bGwsbD1xbihlLmRhdGEpO2lmKHRoaXMucGFyZW50W2UudHlwZV0pcz10aGlzLnBhcmVudFtlLnR5cGVdKGUuc291cmNlTWFwSWQsbCxvKTtlbHNlIGlmKHRoaXMucGFyZW50LmdldFdvcmtlclNvdXJjZSl7dmFyIGM9ZS50eXBlLnNwbGl0KCIuIik7cz10aGlzLnBhcmVudC5nZXRXb3JrZXJTb3VyY2UoZS5zb3VyY2VNYXBJZCxjWzBdLGwuc291cmNlKVtjWzFdXShsLG8pfWVsc2UgbyhuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uICIrZS50eXBlKSk7IWkmJnMmJnMuY2FuY2VsJiYodGhpcy5jYW5jZWxDYWxsYmFja3NbdF09cy5jYW5jZWwpfX0scWMucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuaW52b2tlci5yZW1vdmUoKSx0aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLnJlY2VpdmUsITEpfTt2YXIgWWM9ZnVuY3Rpb24odCxlKXt0JiYoZT90aGlzLnNldFNvdXRoV2VzdCh0KS5zZXROb3J0aEVhc3QoZSk6ND09PXQubGVuZ3RoP3RoaXMuc2V0U291dGhXZXN0KFt0WzBdLHRbMV1dKS5zZXROb3J0aEVhc3QoW3RbMl0sdFszXV0pOnRoaXMuc2V0U291dGhXZXN0KHRbMF0pLnNldE5vcnRoRWFzdCh0WzFdKSl9O1ljLnByb3RvdHlwZS5zZXROb3J0aEVhc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX25lPXQgaW5zdGFuY2VvZiBXYz9uZXcgV2ModC5sbmcsdC5sYXQpOldjLmNvbnZlcnQodCksdGhpc30sWWMucHJvdG90eXBlLnNldFNvdXRoV2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fc3c9dCBpbnN0YW5jZW9mIFdjP25ldyBXYyh0LmxuZyx0LmxhdCk6V2MuY29udmVydCh0KSx0aGlzfSxZYy5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLl9zdyxpPXRoaXMuX25lO2lmKHQgaW5zdGFuY2VvZiBXYyllPXQscj10O2Vsc2V7aWYoISh0IGluc3RhbmNlb2YgWWMpKXtpZihBcnJheS5pc0FycmF5KHQpKXtpZig0PT09dC5sZW5ndGh8fHQuZXZlcnkoQXJyYXkuaXNBcnJheSkpe3ZhciBhPXQ7cmV0dXJuIHRoaXMuZXh0ZW5kKFljLmNvbnZlcnQoYSkpfXZhciBvPXQ7cmV0dXJuIHRoaXMuZXh0ZW5kKFdjLmNvbnZlcnQobykpfXJldHVybiB0aGlzfWlmKGU9dC5fc3cscj10Ll9uZSwhZXx8IXIpcmV0dXJuIHRoaXN9cmV0dXJuIG58fGk/KG4ubG5nPU1hdGgubWluKGUubG5nLG4ubG5nKSxuLmxhdD1NYXRoLm1pbihlLmxhdCxuLmxhdCksaS5sbmc9TWF0aC5tYXgoci5sbmcsaS5sbmcpLGkubGF0PU1hdGgubWF4KHIubGF0LGkubGF0KSk6KHRoaXMuX3N3PW5ldyBXYyhlLmxuZyxlLmxhdCksdGhpcy5fbmU9bmV3IFdjKHIubG5nLHIubGF0KSksdGhpc30sWWMucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoKHRoaXMuX3N3LmxuZyt0aGlzLl9uZS5sbmcpLzIsKHRoaXMuX3N3LmxhdCt0aGlzLl9uZS5sYXQpLzIpfSxZYy5wcm90b3R5cGUuZ2V0U291dGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N3fSxZYy5wcm90b3R5cGUuZ2V0Tm9ydGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lfSxZYy5wcm90b3R5cGUuZ2V0Tm9ydGhXZXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYyh0aGlzLmdldFdlc3QoKSx0aGlzLmdldE5vcnRoKCkpfSxZYy5wcm90b3R5cGUuZ2V0U291dGhFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBXYyh0aGlzLmdldEVhc3QoKSx0aGlzLmdldFNvdXRoKCkpfSxZYy5wcm90b3R5cGUuZ2V0V2VzdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sbmd9LFljLnByb3RvdHlwZS5nZXRTb3V0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdy5sYXR9LFljLnByb3RvdHlwZS5nZXRFYXN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxuZ30sWWMucHJvdG90eXBlLmdldE5vcnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX25lLmxhdH0sWWMucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5fc3cudG9BcnJheSgpLHRoaXMuX25lLnRvQXJyYXkoKV19LFljLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXRCb3VuZHMoIit0aGlzLl9zdy50b1N0cmluZygpKyIsICIrdGhpcy5fbmUudG9TdHJpbmcoKSsiKSJ9LFljLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLl9zdyYmdGhpcy5fbmUpfSxZYy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7dmFyIGU9V2MuY29udmVydCh0KSxyPWUubG5nLG49ZS5sYXQsaT10aGlzLl9zdy5sYXQ8PW4mJm48PXRoaXMuX25lLmxhdCxhPXRoaXMuX3N3LmxuZzw9ciYmcjw9dGhpcy5fbmUubG5nO3JldHVybiB0aGlzLl9zdy5sbmc+dGhpcy5fbmUubG5nJiYoYT10aGlzLl9zdy5sbmc+PXImJnI+PXRoaXMuX25lLmxuZyksaSYmYX0sWWMuY29udmVydD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8dCBpbnN0YW5jZW9mIFljP3Q6bmV3IFljKHQpfTt2YXIgV2M9ZnVuY3Rpb24odCxlKXtpZihpc05hTih0KXx8aXNOYU4oZSkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIExuZ0xhdCBvYmplY3Q6ICgiK3QrIiwgIitlKyIpIik7aWYodGhpcy5sbmc9K3QsdGhpcy5sYXQ9K2UsdGhpcy5sYXQ+OTB8fHRoaXMubGF0PC05MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgTG5nTGF0IGxhdGl0dWRlIHZhbHVlOiBtdXN0IGJlIGJldHdlZW4gLTkwIGFuZCA5MCIpfTtXYy5wcm90b3R5cGUud3JhcD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoYyh0aGlzLmxuZywtMTgwLDE4MCksdGhpcy5sYXQpfSxXYy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbigpe3JldHVyblt0aGlzLmxuZyx0aGlzLmxhdF19LFdjLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJMbmdMYXQoIit0aGlzLmxuZysiLCAiK3RoaXMubGF0KyIpIn0sV2MucHJvdG90eXBlLmRpc3RhbmNlVG89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5QSS8xODAscj10aGlzLmxhdCplLG49dC5sYXQqZSxpPU1hdGguc2luKHIpKk1hdGguc2luKG4pK01hdGguY29zKHIpKk1hdGguY29zKG4pKk1hdGguY29zKCh0LmxuZy10aGlzLmxuZykqZSk7cmV0dXJuIDYzNzEwMDguOCpNYXRoLmFjb3MoTWF0aC5taW4oaSwxKSl9LFdjLnByb3RvdHlwZS50b0JvdW5kcz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD0wKTt2YXIgZT0zNjAqdC80MDA3NTAxNyxyPWUvTWF0aC5jb3MoTWF0aC5QSS8xODAqdGhpcy5sYXQpO3JldHVybiBuZXcgWWMobmV3IFdjKHRoaXMubG5nLXIsdGhpcy5sYXQtZSksbmV3IFdjKHRoaXMubG5nK3IsdGhpcy5sYXQrZSkpfSxXYy5jb252ZXJ0PWZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBXYylyZXR1cm4gdDtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PXQubGVuZ3RofHwzPT09dC5sZW5ndGgpKXJldHVybiBuZXcgV2MoTnVtYmVyKHRbMF0pLE51bWJlcih0WzFdKSk7aWYoIUFycmF5LmlzQXJyYXkodCkmJiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpcmV0dXJuIG5ldyBXYyhOdW1iZXIoImxuZyJpbiB0P3QubG5nOnQubG9uKSxOdW1iZXIodC5sYXQpKTt0aHJvdyBuZXcgRXJyb3IoImBMbmdMYXRMaWtlYCBhcmd1bWVudCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIExuZ0xhdCBpbnN0YW5jZSwgYW4gb2JqZWN0IHtsbmc6IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgYW4gb2JqZWN0IHtsb246IDxsbmc+LCBsYXQ6IDxsYXQ+fSwgb3IgYW4gYXJyYXkgb2YgWzxsbmc+LCA8bGF0Pl0iKX07dmFyIFhjPTIqTWF0aC5QSSo2MzcxMDA4Ljg7ZnVuY3Rpb24gWmModCl7cmV0dXJuIFhjKk1hdGguY29zKHQqTWF0aC5QSS8xODApfWZ1bmN0aW9uIEpjKHQpe3JldHVybigxODArdCkvMzYwfWZ1bmN0aW9uIEtjKHQpe3JldHVybigxODAtMTgwL01hdGguUEkqTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSS80K3QqTWF0aC5QSS8zNjApKSkvMzYwfWZ1bmN0aW9uIFFjKHQsZSl7cmV0dXJuIHQvWmMoZSl9ZnVuY3Rpb24gJGModCl7dmFyIGU9MTgwLTM2MCp0O3JldHVybiAzNjAvTWF0aC5QSSpNYXRoLmF0YW4oTWF0aC5leHAoZSpNYXRoLlBJLzE4MCkpLTkwfXZhciB0dT1mdW5jdGlvbih0LGUscil7dm9pZCAwPT09ciYmKHI9MCksdGhpcy54PSt0LHRoaXMueT0rZSx0aGlzLno9K3J9O3R1LmZyb21MbmdMYXQ9ZnVuY3Rpb24odCxlKXt2b2lkIDA9PT1lJiYoZT0wKTt2YXIgcj1XYy5jb252ZXJ0KHQpO3JldHVybiBuZXcgdHUoSmMoci5sbmcpLEtjKHIubGF0KSxRYyhlLHIubGF0KSl9LHR1LnByb3RvdHlwZS50b0xuZ0xhdD1mdW5jdGlvbigpe3JldHVybiBuZXcgV2MoMzYwKnRoaXMueC0xODAsJGModGhpcy55KSl9LHR1LnByb3RvdHlwZS50b0FsdGl0dWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHQ9dGhpcy56LGU9dGhpcy55LHQqWmMoJGMoZSkpO3ZhciB0LGV9LHR1LnByb3RvdHlwZS5tZXRlckluTWVyY2F0b3JDb29yZGluYXRlVW5pdHM9ZnVuY3Rpb24oKXtyZXR1cm4gMS9YYyoodD0kYyh0aGlzLnkpLDEvTWF0aC5jb3ModCpNYXRoLlBJLzE4MCkpO3ZhciB0fTt2YXIgZXU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuej10LHRoaXMueD1lLHRoaXMueT1yLHRoaXMua2V5PWl1KDAsdCx0LGUscil9O2V1LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuej09PXQueiYmdGhpcy54PT09dC54JiZ0aGlzLnk9PT10Lnl9LGV1LnByb3RvdHlwZS51cmw9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLHM9KHI9dGhpcy54LG49dGhpcy55LGk9dGhpcy56LGE9R2MoMjU2KnIsMjU2KihuPU1hdGgucG93KDIsaSktbi0xKSxpKSxvPUdjKDI1NioocisxKSwyNTYqKG4rMSksaSksYVswXSsiLCIrYVsxXSsiLCIrb1swXSsiLCIrb1sxXSksbD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9IiIsYT10O2E+MDthLS0paSs9KGUmKG49MTw8YS0xKT8xOjApKyhyJm4/MjowKTtyZXR1cm4gaX0odGhpcy56LHRoaXMueCx0aGlzLnkpO3JldHVybiB0Wyh0aGlzLngrdGhpcy55KSV0Lmxlbmd0aF0ucmVwbGFjZSgie3ByZWZpeH0iLCh0aGlzLnglMTYpLnRvU3RyaW5nKDE2KSsodGhpcy55JTE2KS50b1N0cmluZygxNikpLnJlcGxhY2UoInt6fSIsU3RyaW5nKHRoaXMueikpLnJlcGxhY2UoInt4fSIsU3RyaW5nKHRoaXMueCkpLnJlcGxhY2UoInt5fSIsU3RyaW5nKCJ0bXMiPT09ZT9NYXRoLnBvdygyLHRoaXMueiktdGhpcy55LTE6dGhpcy55KSkucmVwbGFjZSgie3F1YWRrZXl9IixsKS5yZXBsYWNlKCJ7YmJveC1lcHNnLTM4NTd9IixzKX0sZXUucHJvdG90eXBlLmdldFRpbGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnBvdygyLHRoaXMueik7cmV0dXJuIG5ldyBpKDgxOTIqKHQueCplLXRoaXMueCksODE5MioodC55KmUtdGhpcy55KSl9LGV1LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnorIi8iK3RoaXMueCsiLyIrdGhpcy55fTt2YXIgcnU9ZnVuY3Rpb24odCxlKXt0aGlzLndyYXA9dCx0aGlzLmNhbm9uaWNhbD1lLHRoaXMua2V5PWl1KHQsZS56LGUueixlLngsZS55KX0sbnU9ZnVuY3Rpb24odCxlLHIsbixpKXt0aGlzLm92ZXJzY2FsZWRaPXQsdGhpcy53cmFwPWUsdGhpcy5jYW5vbmljYWw9bmV3IGV1KHIsK24sK2kpLHRoaXMua2V5PWl1KGUsdCxyLG4saSl9O2Z1bmN0aW9uIGl1KHQsZSxyLG4saSl7KHQqPTIpPDAmJih0PS0xKnQtMSk7dmFyIGE9MTw8cjtyZXR1cm4oYSphKnQrYSppK24pLnRvU3RyaW5nKDM2KStyLnRvU3RyaW5nKDM2KStlLnRvU3RyaW5nKDM2KX1udS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaPT09dC5vdmVyc2NhbGVkWiYmdGhpcy53cmFwPT09dC53cmFwJiZ0aGlzLmNhbm9uaWNhbC5lcXVhbHModC5jYW5vbmljYWwpfSxudS5wcm90b3R5cGUuc2NhbGVkVG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/bmV3IG51KHQsdGhpcy53cmFwLHRoaXMuY2Fub25pY2FsLnosdGhpcy5jYW5vbmljYWwueCx0aGlzLmNhbm9uaWNhbC55KTpuZXcgbnUodCx0aGlzLndyYXAsdCx0aGlzLmNhbm9uaWNhbC54Pj5lLHRoaXMuY2Fub25pY2FsLnk+PmUpfSxudS5wcm90b3R5cGUuY2FsY3VsYXRlU2NhbGVkS2V5PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW5vbmljYWwuei10O3JldHVybiB0PnRoaXMuY2Fub25pY2FsLno/aXUodGhpcy53cmFwKitlLHQsdGhpcy5jYW5vbmljYWwueix0aGlzLmNhbm9uaWNhbC54LHRoaXMuY2Fub25pY2FsLnkpOml1KHRoaXMud3JhcCorZSx0LHQsdGhpcy5jYW5vbmljYWwueD4+cix0aGlzLmNhbm9uaWNhbC55Pj5yKX0sbnUucHJvdG90eXBlLmlzQ2hpbGRPZj1mdW5jdGlvbih0KXtpZih0LndyYXAhPT10aGlzLndyYXApcmV0dXJuITE7dmFyIGU9dGhpcy5jYW5vbmljYWwuei10LmNhbm9uaWNhbC56O3JldHVybiAwPT09dC5vdmVyc2NhbGVkWnx8dC5vdmVyc2NhbGVkWjx0aGlzLm92ZXJzY2FsZWRaJiZ0LmNhbm9uaWNhbC54PT09dGhpcy5jYW5vbmljYWwueD4+ZSYmdC5jYW5vbmljYWwueT09PXRoaXMuY2Fub25pY2FsLnk+PmV9LG51LnByb3RvdHlwZS5jaGlsZHJlbj1mdW5jdGlvbih0KXtpZih0aGlzLm92ZXJzY2FsZWRaPj10KXJldHVybltuZXcgbnUodGhpcy5vdmVyc2NhbGVkWisxLHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSldO3ZhciBlPXRoaXMuY2Fub25pY2FsLnorMSxyPTIqdGhpcy5jYW5vbmljYWwueCxuPTIqdGhpcy5jYW5vbmljYWwueTtyZXR1cm5bbmV3IG51KGUsdGhpcy53cmFwLGUscixuKSxuZXcgbnUoZSx0aGlzLndyYXAsZSxyKzEsbiksbmV3IG51KGUsdGhpcy53cmFwLGUscixuKzEpLG5ldyBudShlLHRoaXMud3JhcCxlLHIrMSxuKzEpXX0sbnUucHJvdG90eXBlLmlzTGVzc1RoYW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud3JhcDx0LndyYXB8fCEodGhpcy53cmFwPnQud3JhcCkmJih0aGlzLm92ZXJzY2FsZWRaPHQub3ZlcnNjYWxlZFp8fCEodGhpcy5vdmVyc2NhbGVkWj50Lm92ZXJzY2FsZWRaKSYmKHRoaXMuY2Fub25pY2FsLng8dC5jYW5vbmljYWwueHx8ISh0aGlzLmNhbm9uaWNhbC54PnQuY2Fub25pY2FsLngpJiZ0aGlzLmNhbm9uaWNhbC55PHQuY2Fub25pY2FsLnkpKX0sbnUucHJvdG90eXBlLndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG51KHRoaXMub3ZlcnNjYWxlZFosMCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LG51LnByb3RvdHlwZS51bndyYXBUbz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG51KHRoaXMub3ZlcnNjYWxlZFosdCx0aGlzLmNhbm9uaWNhbC56LHRoaXMuY2Fub25pY2FsLngsdGhpcy5jYW5vbmljYWwueSl9LG51LnByb3RvdHlwZS5vdmVyc2NhbGVGYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5wb3coMix0aGlzLm92ZXJzY2FsZWRaLXRoaXMuY2Fub25pY2FsLnopfSxudS5wcm90b3R5cGUudG9VbndyYXBwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHJ1KHRoaXMud3JhcCx0aGlzLmNhbm9uaWNhbCl9LG51LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm92ZXJzY2FsZWRaKyIvIit0aGlzLmNhbm9uaWNhbC54KyIvIit0aGlzLmNhbm9uaWNhbC55fSxudS5wcm90b3R5cGUuZ2V0VGlsZVBvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNhbm9uaWNhbC5nZXRUaWxlUG9pbnQobmV3IHR1KHQueC10aGlzLndyYXAsdC55KSl9LE5uKCJDYW5vbmljYWxUaWxlSUQiLGV1KSxObigiT3ZlcnNjYWxlZFRpbGVJRCIsbnUse29taXQ6WyJwb3NNYXRyaXgiXX0pO3ZhciBhdT1mdW5jdGlvbih0LGUscil7aWYodGhpcy51aWQ9dCxlLmhlaWdodCE9PWUud2lkdGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkRFTSB0aWxlcyBtdXN0IGJlIHNxdWFyZSIpO2lmKHImJiJtYXBib3giIT09ciYmInRlcnJhcml1bSIhPT1yKXJldHVybiBfKCciJytyKyciIGlzIG5vdCBhIHZhbGlkIGVuY29kaW5nIHR5cGUuIFZhbGlkIHR5cGVzIGluY2x1ZGUgIm1hcGJveCIgYW5kICJ0ZXJyYXJpdW0iLicpO3RoaXMuc3RyaWRlPWUuaGVpZ2h0O3ZhciBuPXRoaXMuZGltPWUuaGVpZ2h0LTI7dGhpcy5kYXRhPW5ldyBVaW50MzJBcnJheShlLmRhdGEuYnVmZmVyKSx0aGlzLmVuY29kaW5nPXJ8fCJtYXBib3giO2Zvcih2YXIgaT0wO2k8bjtpKyspdGhpcy5kYXRhW3RoaXMuX2lkeCgtMSxpKV09dGhpcy5kYXRhW3RoaXMuX2lkeCgwLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KG4saSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLGkpXSx0aGlzLmRhdGFbdGhpcy5faWR4KGksLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KGksMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgoaSxuKV09dGhpcy5kYXRhW3RoaXMuX2lkeChpLG4tMSldO3RoaXMuZGF0YVt0aGlzLl9pZHgoLTEsLTEpXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsMCldLHRoaXMuZGF0YVt0aGlzLl9pZHgobiwtMSldPXRoaXMuZGF0YVt0aGlzLl9pZHgobi0xLDApXSx0aGlzLmRhdGFbdGhpcy5faWR4KC0xLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KDAsbi0xKV0sdGhpcy5kYXRhW3RoaXMuX2lkeChuLG4pXT10aGlzLmRhdGFbdGhpcy5faWR4KG4tMSxuLTEpXX07YXUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KHRoaXMuZGF0YS5idWZmZXIpLG49NCp0aGlzLl9pZHgodCxlKTtyZXR1cm4oInRlcnJhcml1bSI9PT10aGlzLmVuY29kaW5nP3RoaXMuX3VucGFja1RlcnJhcml1bTp0aGlzLl91bnBhY2tNYXBib3gpKHJbbl0scltuKzFdLHJbbisyXSl9LGF1LnByb3RvdHlwZS5nZXRVbnBhY2tWZWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4idGVycmFyaXVtIj09PXRoaXMuZW5jb2Rpbmc/WzI1NiwxLDEvMjU2LDMyNzY4XTpbNjU1My42LDI1LjYsLjEsMWU0XX0sYXUucHJvdG90eXBlLl9pZHg9ZnVuY3Rpb24odCxlKXtpZih0PC0xfHx0Pj10aGlzLmRpbSsxfHxlPC0xfHxlPj10aGlzLmRpbSsxKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2Ugc291cmNlIGNvb3JkaW5hdGVzIGZvciBERU0gZGF0YSIpO3JldHVybihlKzEpKnRoaXMuc3RyaWRlKyh0KzEpfSxhdS5wcm90b3R5cGUuX3VucGFja01hcGJveD1mdW5jdGlvbih0LGUscil7cmV0dXJuKDI1Nip0KjI1NisyNTYqZStyKS8xMC0xZTR9LGF1LnByb3RvdHlwZS5fdW5wYWNrVGVycmFyaXVtPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMjU2KnQrZStyLzI1Ni0zMjc2OH0sYXUucHJvdG90eXBlLmdldFBpeGVscz1mdW5jdGlvbigpe3JldHVybiBuZXcgRW8oe3dpZHRoOnRoaXMuc3RyaWRlLGhlaWdodDp0aGlzLnN0cmlkZX0sbmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhLmJ1ZmZlcikpfSxhdS5wcm90b3R5cGUuYmFja2ZpbGxCb3JkZXI9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuZGltIT09dC5kaW0pdGhyb3cgbmV3IEVycm9yKCJkZW0gZGltZW5zaW9uIG1pc21hdGNoIik7dmFyIG49ZSp0aGlzLmRpbSxpPWUqdGhpcy5kaW0rdGhpcy5kaW0sYT1yKnRoaXMuZGltLG89cip0aGlzLmRpbSt0aGlzLmRpbTtzd2l0Y2goZSl7Y2FzZS0xOm49aS0xO2JyZWFrO2Nhc2UgMTppPW4rMX1zd2l0Y2gocil7Y2FzZS0xOmE9by0xO2JyZWFrO2Nhc2UgMTpvPWErMX1mb3IodmFyIHM9LWUqdGhpcy5kaW0sbD0tcip0aGlzLmRpbSxjPWE7YzxvO2MrKylmb3IodmFyIHU9bjt1PGk7dSsrKXRoaXMuZGF0YVt0aGlzLl9pZHgodSxjKV09dC5kYXRhW3RoaXMuX2lkeCh1K3MsYytsKV19LE5uKCJERU1EYXRhIixhdSk7dmFyIG91PWZ1bmN0aW9uKHQpe3RoaXMuX3N0cmluZ1RvTnVtYmVyPXt9LHRoaXMuX251bWJlclRvU3RyaW5nPVtdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgcj10W2VdO3RoaXMuX3N0cmluZ1RvTnVtYmVyW3JdPWUsdGhpcy5fbnVtYmVyVG9TdHJpbmdbZV09cn19O291LnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3N0cmluZ1RvTnVtYmVyW3RdfSxvdS5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJUb1N0cmluZ1t0XX07dmFyIHN1PWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50eXBlPSJGZWF0dXJlIix0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZT10LHQuX3o9ZSx0Ll94PXIsdC5feT1uLHRoaXMucHJvcGVydGllcz10LnByb3BlcnRpZXMsdGhpcy5pZD1pfSxsdT17Z2VvbWV0cnk6e2NvbmZpZ3VyYWJsZTohMH19O2x1Lmdlb21ldHJ5LmdldD1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzLl9nZW9tZXRyeSYmKHRoaXMuX2dlb21ldHJ5PXRoaXMuX3ZlY3RvclRpbGVGZWF0dXJlLnRvR2VvSlNPTih0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feCx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feSx0aGlzLl92ZWN0b3JUaWxlRmVhdHVyZS5feikuZ2VvbWV0cnkpLHRoaXMuX2dlb21ldHJ5fSxsdS5nZW9tZXRyeS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZ2VvbWV0cnk9dH0sc3UucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3ZhciB0PXtnZW9tZXRyeTp0aGlzLmdlb21ldHJ5fTtmb3IodmFyIGUgaW4gdGhpcykiX2dlb21ldHJ5IiE9PWUmJiJfdmVjdG9yVGlsZUZlYXR1cmUiIT09ZSYmKHRbZV09dGhpc1tlXSk7cmV0dXJuIHR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN1LnByb3RvdHlwZSxsdSk7dmFyIGN1PWZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT17fSx0aGlzLnN0YXRlQ2hhbmdlcz17fSx0aGlzLmRlbGV0ZWRTdGF0ZXM9e319O2N1LnByb3RvdHlwZS51cGRhdGVTdGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49U3RyaW5nKGUpO2lmKHRoaXMuc3RhdGVDaGFuZ2VzW3RdPXRoaXMuc3RhdGVDaGFuZ2VzW3RdfHx7fSx0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXT10aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXXx8e30sdSh0aGlzLnN0YXRlQ2hhbmdlc1t0XVtuXSxyKSxudWxsPT09dGhpcy5kZWxldGVkU3RhdGVzW3RdKWZvcih2YXIgaSBpbiB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09e30sdGhpcy5zdGF0ZVt0XSlpIT09biYmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtpXT1udWxsKTtlbHNlIGlmKHRoaXMuZGVsZXRlZFN0YXRlc1t0XSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSlmb3IodmFyIGEgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVbdF1bbl0pclthXXx8KHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVthXT1udWxsKTtlbHNlIGZvcih2YXIgbyBpbiByKXt0aGlzLmRlbGV0ZWRTdGF0ZXNbdF0mJnRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXSYmbnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtvXSYmZGVsZXRlIHRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtvXX19LGN1LnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1t0XSkpe3ZhciBuPVN0cmluZyhlKTtpZih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09dGhpcy5kZWxldGVkU3RhdGVzW3RdfHx7fSxyJiZ2b2lkIDAhPT1lKW51bGwhPT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl0mJih0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl09dGhpcy5kZWxldGVkU3RhdGVzW3RdW25dfHx7fSx0aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bbl1bcl09bnVsbCk7ZWxzZSBpZih2b2lkIDAhPT1lKXtpZih0aGlzLnN0YXRlQ2hhbmdlc1t0XSYmdGhpcy5zdGF0ZUNoYW5nZXNbdF1bbl0pZm9yKHIgaW4gdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPXt9LHRoaXMuc3RhdGVDaGFuZ2VzW3RdW25dKXRoaXMuZGVsZXRlZFN0YXRlc1t0XVtuXVtyXT1udWxsO2Vsc2UgdGhpcy5kZWxldGVkU3RhdGVzW3RdW25dPW51bGx9ZWxzZSB0aGlzLmRlbGV0ZWRTdGF0ZXNbdF09bnVsbH19LGN1LnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPVN0cmluZyhlKSxuPXRoaXMuc3RhdGVbdF18fHt9LGk9dGhpcy5zdGF0ZUNoYW5nZXNbdF18fHt9LGE9dSh7fSxuW3JdLGlbcl0pO2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbdF0pcmV0dXJue307aWYodGhpcy5kZWxldGVkU3RhdGVzW3RdKXt2YXIgbz10aGlzLmRlbGV0ZWRTdGF0ZXNbdF1bZV07aWYobnVsbD09PW8pcmV0dXJue307Zm9yKHZhciBzIGluIG8pZGVsZXRlIGFbc119cmV0dXJuIGF9LGN1LnByb3RvdHlwZS5pbml0aWFsaXplVGlsZVN0YXRlPWZ1bmN0aW9uKHQsZSl7dC5zZXRGZWF0dXJlU3RhdGUodGhpcy5zdGF0ZSxlKX0sY3UucHJvdG90eXBlLmNvYWxlc2NlQ2hhbmdlcz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O2Zvcih2YXIgbiBpbiB0aGlzLnN0YXRlQ2hhbmdlcyl7dGhpcy5zdGF0ZVtuXT10aGlzLnN0YXRlW25dfHx7fTt2YXIgaT17fTtmb3IodmFyIGEgaW4gdGhpcy5zdGF0ZUNoYW5nZXNbbl0pdGhpcy5zdGF0ZVtuXVthXXx8KHRoaXMuc3RhdGVbbl1bYV09e30pLHUodGhpcy5zdGF0ZVtuXVthXSx0aGlzLnN0YXRlQ2hhbmdlc1tuXVthXSksaVthXT10aGlzLnN0YXRlW25dW2FdO3Jbbl09aX1mb3IodmFyIG8gaW4gdGhpcy5kZWxldGVkU3RhdGVzKXt0aGlzLnN0YXRlW29dPXRoaXMuc3RhdGVbb118fHt9O3ZhciBzPXt9O2lmKG51bGw9PT10aGlzLmRlbGV0ZWRTdGF0ZXNbb10pZm9yKHZhciBsIGluIHRoaXMuc3RhdGVbb10pc1tsXT17fSx0aGlzLnN0YXRlW29dW2xdPXt9O2Vsc2UgZm9yKHZhciBjIGluIHRoaXMuZGVsZXRlZFN0YXRlc1tvXSl7aWYobnVsbD09PXRoaXMuZGVsZXRlZFN0YXRlc1tvXVtjXSl0aGlzLnN0YXRlW29dW2NdPXt9O2Vsc2UgZm9yKHZhciBmPTAsaD1PYmplY3Qua2V5cyh0aGlzLmRlbGV0ZWRTdGF0ZXNbb11bY10pO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXTtkZWxldGUgdGhpcy5zdGF0ZVtvXVtjXVtwXX1zW2NdPXRoaXMuc3RhdGVbb11bY119cltvXT1yW29dfHx7fSx1KHJbb10scyl9aWYodGhpcy5zdGF0ZUNoYW5nZXM9e30sdGhpcy5kZWxldGVkU3RhdGVzPXt9LDAhPT1PYmplY3Qua2V5cyhyKS5sZW5ndGgpZm9yKHZhciBkIGluIHQpe3RbZF0uc2V0RmVhdHVyZVN0YXRlKHIsZSl9fTt2YXIgdXU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMueD10LmNhbm9uaWNhbC54LHRoaXMueT10LmNhbm9uaWNhbC55LHRoaXMuej10LmNhbm9uaWNhbC56LHRoaXMuZ3JpZD1uZXcgem4oODE5MiwxNiwwKSx0aGlzLmdyaWQzRD1uZXcgem4oODE5MiwxNiwwKSx0aGlzLmZlYXR1cmVJbmRleEFycmF5PW5ldyBmYSx0aGlzLnByb21vdGVJZD1lfTtmdW5jdGlvbiBmdSh0LGUscixuLGkpe3JldHVybiB2KHQsKGZ1bmN0aW9uKHQsYSl7dmFyIG89ZSBpbnN0YW5jZW9mIF9pP2UuZ2V0KGEpOm51bGw7cmV0dXJuIG8mJm8uZXZhbHVhdGU/by5ldmFsdWF0ZShyLG4saSk6b30pKX1mdW5jdGlvbiBodSh0KXtmb3IodmFyIGU9MS8wLHI9MS8wLG49LTEvMCxpPS0xLzAsYT0wLG89dDthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV07ZT1NYXRoLm1pbihlLHMueCkscj1NYXRoLm1pbihyLHMueSksbj1NYXRoLm1heChuLHMueCksaT1NYXRoLm1heChpLHMueSl9cmV0dXJue21pblg6ZSxtaW5ZOnIsbWF4WDpuLG1heFk6aX19ZnVuY3Rpb24gcHUodCxlKXtyZXR1cm4gZS10fXV1LnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBvPXRoaXMuZmVhdHVyZUluZGV4QXJyYXkubGVuZ3RoO3RoaXMuZmVhdHVyZUluZGV4QXJyYXkuZW1wbGFjZUJhY2socixuLGkpO2Zvcih2YXIgcz1hP3RoaXMuZ3JpZDNEOnRoaXMuZ3JpZCxsPTA7bDxlLmxlbmd0aDtsKyspe2Zvcih2YXIgYz1lW2xdLHU9WzEvMCwxLzAsLTEvMCwtMS8wXSxmPTA7ZjxjLmxlbmd0aDtmKyspe3ZhciBoPWNbZl07dVswXT1NYXRoLm1pbih1WzBdLGgueCksdVsxXT1NYXRoLm1pbih1WzFdLGgueSksdVsyXT1NYXRoLm1heCh1WzJdLGgueCksdVszXT1NYXRoLm1heCh1WzNdLGgueSl9dVswXTw4MTkyJiZ1WzFdPDgxOTImJnVbMl0+PTAmJnVbM10+PTAmJnMuaW5zZXJ0KG8sdVswXSx1WzFdLHVbMl0sdVszXSl9fSx1dS5wcm90b3R5cGUubG9hZFZUTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudnRMYXllcnN8fCh0aGlzLnZ0TGF5ZXJzPW5ldyBMcy5WZWN0b3JUaWxlKG5ldyBhbCh0aGlzLnJhd1RpbGVEYXRhKSkubGF5ZXJzLHRoaXMuc291cmNlTGF5ZXJDb2Rlcj1uZXcgb3UodGhpcy52dExheWVycz9PYmplY3Qua2V5cyh0aGlzLnZ0TGF5ZXJzKS5zb3J0KCk6WyJfZ2VvanNvblRpbGVMYXllciJdKSksdGhpcy52dExheWVyc30sdXUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhPXRoaXM7dGhpcy5sb2FkVlRMYXllcnMoKTtmb3IodmFyIG89dC5wYXJhbXN8fHt9LHM9ODE5Mi90LnRpbGVTaXplL3Quc2NhbGUsbD1zbihvLmZpbHRlciksYz10LnF1ZXJ5R2VvbWV0cnksdT10LnF1ZXJ5UGFkZGluZypzLGY9aHUoYyksaD10aGlzLmdyaWQucXVlcnkoZi5taW5YLXUsZi5taW5ZLXUsZi5tYXhYK3UsZi5tYXhZK3UpLHA9aHUodC5jYW1lcmFRdWVyeUdlb21ldHJ5KSxkPXRoaXMuZ3JpZDNELnF1ZXJ5KHAubWluWC11LHAubWluWS11LHAubWF4WCt1LHAubWF4WSt1LChmdW5jdGlvbihlLHIsbixhKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixhKXtmb3IodmFyIG89MCxzPXQ7bzxzLmxlbmd0aDtvKz0xKXt2YXIgbD1zW29dO2lmKGU8PWwueCYmcjw9bC55JiZuPj1sLngmJmE+PWwueSlyZXR1cm4hMH12YXIgYz1bbmV3IGkoZSxyKSxuZXcgaShlLGEpLG5ldyBpKG4sYSksbmV3IGkobixyKV07aWYodC5sZW5ndGg+Milmb3IodmFyIHU9MCxmPWM7dTxmLmxlbmd0aDt1Kz0xKXtpZihpbyh0LGZbdV0pKXJldHVybiEwfWZvcih2YXIgaD0wO2g8dC5sZW5ndGgtMTtoKyspe2lmKGFvKHRbaF0sdFtoKzFdLGMpKXJldHVybiEwfXJldHVybiExfSh0LmNhbWVyYVF1ZXJ5R2VvbWV0cnksZS11LHItdSxuK3UsYSt1KX0pKSxtPTAsZz1kO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXTtoLnB1c2godil9aC5zb3J0KHB1KTtmb3IodmFyIHkseD17fSxiPWZ1bmN0aW9uKGkpe3ZhciB1PWhbaV07aWYodSE9PXkpe3k9dTt2YXIgZj1hLmZlYXR1cmVJbmRleEFycmF5LmdldCh1KSxwPW51bGw7YS5sb2FkTWF0Y2hpbmdGZWF0dXJlKHgsZi5idWNrZXRJbmRleCxmLnNvdXJjZUxheWVySW5kZXgsZi5mZWF0dXJlSW5kZXgsbCxvLmxheWVycyxvLmF2YWlsYWJsZUltYWdlcyxlLHIsbiwoZnVuY3Rpb24oZSxyLG4pe3JldHVybiBwfHwocD1ZYShlKSksci5xdWVyeUludGVyc2VjdHNGZWF0dXJlKGMsZSxuLHAsYS56LHQudHJhbnNmb3JtLHMsdC5waXhlbFBvc01hdHJpeCl9KSl9fSxfPTA7XzxoLmxlbmd0aDtfKyspYihfKTtyZXR1cm4geH0sdXUucHJvdG90eXBlLmxvYWRNYXRjaGluZ0ZlYXR1cmU9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj10aGlzLmJ1Y2tldExheWVySURzW2VdO2lmKCFhfHxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWlmKGUuaW5kZXhPZih0W3JdKT49MClyZXR1cm4hMDtyZXR1cm4hMX0oYSxmKSl7dmFyIGg9dGhpcy5zb3VyY2VMYXllckNvZGVyLmRlY29kZShyKSxwPXRoaXMudnRMYXllcnNbaF0uZmVhdHVyZShuKTtpZihpLmZpbHRlcihuZXcgcGkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKWZvcih2YXIgZD10aGlzLmdldElkKHAsaCksbT0wO208Zi5sZW5ndGg7bSsrKXt2YXIgZz1mW21dO2lmKCEoYSYmYS5pbmRleE9mKGcpPDApKXt2YXIgdj1zW2ddO2lmKHYpe3ZhciB5PXt9O3ZvaWQgMCE9PWQmJmMmJih5PWMuZ2V0U3RhdGUodi5zb3VyY2VMYXllcnx8Il9nZW9qc29uVGlsZUxheWVyIixkKSk7dmFyIHg9bFtnXTt4LnBhaW50PWZ1KHgucGFpbnQsdi5wYWludCxwLHksbykseC5sYXlvdXQ9ZnUoeC5sYXlvdXQsdi5sYXlvdXQscCx5LG8pO3ZhciBiPSF1fHx1KHAsdix5KTtpZihiKXt2YXIgXz1uZXcgc3UocCx0aGlzLnosdGhpcy54LHRoaXMueSxkKTtfLmxheWVyPXg7dmFyIHc9dFtnXTt2b2lkIDA9PT13JiYodz10W2ddPVtdKSx3LnB1c2goe2ZlYXR1cmVJbmRleDpuLGZlYXR1cmU6XyxpbnRlcnNlY3Rpb25aOmJ9KX19fX19fSx1dS5wcm90b3R5cGUubG9va3VwU3ltYm9sRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD17fTt0aGlzLmxvYWRWVExheWVycygpO2Zvcih2YXIgYz1zbihpKSx1PTAsZj10O3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTt0aGlzLmxvYWRNYXRjaGluZ0ZlYXR1cmUobCxyLG4saCxjLGEsbyxzLGUpfXJldHVybiBsfSx1dS5wcm90b3R5cGUuaGFzTGF5ZXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj10aGlzLmJ1Y2tldExheWVySURzO2U8ci5sZW5ndGg7ZSs9MSlmb3IodmFyIG49MCxpPXJbZV07bjxpLmxlbmd0aDtuKz0xKXtpZih0PT09aVtuXSlyZXR1cm4hMH1yZXR1cm4hMX0sdXUucHJvdG90eXBlLmdldElkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pZDtpZih0aGlzLnByb21vdGVJZCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiB0aGlzLnByb21vdGVJZD90aGlzLnByb21vdGVJZDp0aGlzLnByb21vdGVJZFtlXTsiYm9vbGVhbiI9PXR5cGVvZihyPXQucHJvcGVydGllc1tuXSkmJihyPU51bWJlcihyKSl9cmV0dXJuIHJ9LE5uKCJGZWF0dXJlSW5kZXgiLHV1LHtvbWl0OlsicmF3VGlsZURhdGEiLCJzb3VyY2VMYXllckNvZGVyIl19KTt2YXIgZHU9ZnVuY3Rpb24odCxlKXt0aGlzLnRpbGVJRD10LHRoaXMudWlkPWgoKSx0aGlzLnVzZXM9MCx0aGlzLnRpbGVTaXplPWUsdGhpcy5idWNrZXRzPXt9LHRoaXMuZXhwaXJhdGlvblRpbWU9bnVsbCx0aGlzLnF1ZXJ5UGFkZGluZz0wLHRoaXMuaGFzU3ltYm9sQnVja2V0cz0hMSx0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5kZXBlbmRlbmNpZXM9e30sdGhpcy5leHBpcmVkUmVxdWVzdENvdW50PTAsdGhpcy5zdGF0ZT0ibG9hZGluZyJ9O2R1LnByb3RvdHlwZS5yZWdpc3RlckZhZGVEdXJhdGlvbj1mdW5jdGlvbih0KXt2YXIgZT10K3RoaXMudGltZUFkZGVkO2U8Ui5ub3coKXx8dGhpcy5mYWRlRW5kVGltZSYmZTx0aGlzLmZhZGVFbmRUaW1lfHwodGhpcy5mYWRlRW5kVGltZT1lKX0sZHUucHJvdG90eXBlLndhc1JlcXVlc3RlZD1mdW5jdGlvbigpe3JldHVybiJlcnJvcmVkIj09PXRoaXMuc3RhdGV8fCJsb2FkZWQiPT09dGhpcy5zdGF0ZXx8InJlbG9hZGluZyI9PT10aGlzLnN0YXRlfSxkdS5wcm90b3R5cGUubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaGFzRGF0YSgpJiZ0aGlzLnVubG9hZFZlY3RvckRhdGEoKSx0aGlzLnN0YXRlPSJsb2FkZWQiLHQpe2Zvcih2YXIgbiBpbiB0LmZlYXR1cmVJbmRleCYmKHRoaXMubGF0ZXN0RmVhdHVyZUluZGV4PXQuZmVhdHVyZUluZGV4LHQucmF3VGlsZURhdGE/KHRoaXMubGF0ZXN0UmF3VGlsZURhdGE9dC5yYXdUaWxlRGF0YSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleC5yYXdUaWxlRGF0YT10LnJhd1RpbGVEYXRhKTp0aGlzLmxhdGVzdFJhd1RpbGVEYXRhJiYodGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGE9dGhpcy5sYXRlc3RSYXdUaWxlRGF0YSkpLHRoaXMuY29sbGlzaW9uQm94QXJyYXk9dC5jb2xsaXNpb25Cb3hBcnJheSx0aGlzLmJ1Y2tldHM9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtpZighZSlyZXR1cm4gcjtmb3IodmFyIG49ZnVuY3Rpb24oKXt2YXIgdD1hW2ldLG49dC5sYXllcklkcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLmdldExheWVyKHQpfSkpLmZpbHRlcihCb29sZWFuKTtpZigwIT09bi5sZW5ndGgpe3QubGF5ZXJzPW4sdC5zdGF0ZURlcGVuZGVudExheWVySWRzJiYodC5zdGF0ZURlcGVuZGVudExheWVycz10LnN0YXRlRGVwZW5kZW50TGF5ZXJJZHMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gbi5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09dH0pKVswXX0pKSk7Zm9yKHZhciBvPTAscz1uO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtyW2wuaWRdPXR9fX0saT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpbigpO3JldHVybiByfSh0LmJ1Y2tldHMsZS5zdHlsZSksdGhpcy5oYXNTeW1ib2xCdWNrZXRzPSExLHRoaXMuYnVja2V0cyl7dmFyIGk9dGhpcy5idWNrZXRzW25dO2lmKGkgaW5zdGFuY2VvZiBNYyl7aWYodGhpcy5oYXNTeW1ib2xCdWNrZXRzPSEwLCFyKWJyZWFrO2kuanVzdFJlbG9hZGVkPSEwfX1pZih0aGlzLmhhc1JUTFRleHQ9ITEsdGhpcy5oYXNTeW1ib2xCdWNrZXRzKWZvcih2YXIgYSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciBvPXRoaXMuYnVja2V0c1thXTtpZihvIGluc3RhbmNlb2YgTWMmJm8uaGFzUlRMVGV4dCl7dGhpcy5oYXNSVExUZXh0PSEwLGhpLmlzTG9hZGluZygpfHxoaS5pc0xvYWRlZCgpfHwiZGVmZXJyZWQiIT09dWkoKXx8ZmkoKTticmVha319Zm9yKHZhciBzIGluIHRoaXMucXVlcnlQYWRkaW5nPTAsdGhpcy5idWNrZXRzKXt2YXIgbD10aGlzLmJ1Y2tldHNbc107dGhpcy5xdWVyeVBhZGRpbmc9TWF0aC5tYXgodGhpcy5xdWVyeVBhZGRpbmcsZS5zdHlsZS5nZXRMYXllcihzKS5xdWVyeVJhZGl1cyhsKSl9dC5pbWFnZUF0bGFzJiYodGhpcy5pbWFnZUF0bGFzPXQuaW1hZ2VBdGxhcyksdC5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNJbWFnZT10LmdseXBoQXRsYXNJbWFnZSl9ZWxzZSB0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyBuYX0sZHUucHJvdG90eXBlLnVubG9hZFZlY3RvckRhdGE9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5idWNrZXRzKXRoaXMuYnVja2V0c1t0XS5kZXN0cm95KCk7dGhpcy5idWNrZXRzPXt9LHRoaXMuaW1hZ2VBdGxhc1RleHR1cmUmJnRoaXMuaW1hZ2VBdGxhc1RleHR1cmUuZGVzdHJveSgpLHRoaXMuaW1hZ2VBdGxhcyYmKHRoaXMuaW1hZ2VBdGxhcz1udWxsKSx0aGlzLmdseXBoQXRsYXNUZXh0dXJlJiZ0aGlzLmdseXBoQXRsYXNUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmxhdGVzdEZlYXR1cmVJbmRleD1udWxsLHRoaXMuc3RhdGU9InVubG9hZGVkIn0sZHUucHJvdG90eXBlLmdldEJ1Y2tldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5idWNrZXRzW3QuaWRdfSxkdS5wcm90b3R5cGUudXBsb2FkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSBpbiB0aGlzLmJ1Y2tldHMpe3ZhciByPXRoaXMuYnVja2V0c1tlXTtyLnVwbG9hZFBlbmRpbmcoKSYmci51cGxvYWQodCl9dmFyIG49dC5nbDt0aGlzLmltYWdlQXRsYXMmJiF0aGlzLmltYWdlQXRsYXMudXBsb2FkZWQmJih0aGlzLmltYWdlQXRsYXNUZXh0dXJlPW5ldyBWYyh0LHRoaXMuaW1hZ2VBdGxhcy5pbWFnZSxuLlJHQkEpLHRoaXMuaW1hZ2VBdGxhcy51cGxvYWRlZD0hMCksdGhpcy5nbHlwaEF0bGFzSW1hZ2UmJih0aGlzLmdseXBoQXRsYXNUZXh0dXJlPW5ldyBWYyh0LHRoaXMuZ2x5cGhBdGxhc0ltYWdlLG4uQUxQSEEpLHRoaXMuZ2x5cGhBdGxhc0ltYWdlPW51bGwpfSxkdS5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXt0aGlzLmltYWdlQXRsYXMmJnRoaXMuaW1hZ2VBdGxhcy5wYXRjaFVwZGF0ZWRJbWFnZXModCx0aGlzLmltYWdlQXRsYXNUZXh0dXJlKX0sZHUucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXtyZXR1cm4gdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgmJnRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnJhd1RpbGVEYXRhP3RoaXMubGF0ZXN0RmVhdHVyZUluZGV4LnF1ZXJ5KHtxdWVyeUdlb21ldHJ5Om4sY2FtZXJhUXVlcnlHZW9tZXRyeTppLHNjYWxlOmEsdGlsZVNpemU6dGhpcy50aWxlU2l6ZSxwaXhlbFBvc01hdHJpeDpjLHRyYW5zZm9ybTpzLHBhcmFtczpvLHF1ZXJ5UGFkZGluZzp0aGlzLnF1ZXJ5UGFkZGluZypsfSx0LGUscik6e319LGR1LnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sYXRlc3RGZWF0dXJlSW5kZXg7aWYociYmci5yYXdUaWxlRGF0YSl7dmFyIG49ci5sb2FkVlRMYXllcnMoKSxpPWU/ZS5zb3VyY2VMYXllcjoiIixhPW4uX2dlb2pzb25UaWxlTGF5ZXJ8fG5baV07aWYoYSlmb3IodmFyIG89c24oZSYmZS5maWx0ZXIpLHM9dGhpcy50aWxlSUQuY2Fub25pY2FsLGw9cy56LGM9cy54LHU9cy55LGY9e3o6bCx4OmMseTp1fSxoPTA7aDxhLmxlbmd0aDtoKyspe3ZhciBwPWEuZmVhdHVyZShoKTtpZihvLmZpbHRlcihuZXcgcGkodGhpcy50aWxlSUQub3ZlcnNjYWxlZFopLHApKXt2YXIgZD1yLmdldElkKHAsaSksbT1uZXcgc3UocCxsLGMsdSxkKTttLnRpbGU9Zix0LnB1c2gobSl9fX19LGR1LnByb3RvdHlwZS5oYXNEYXRhPWZ1bmN0aW9uKCl7cmV0dXJuImxvYWRlZCI9PT10aGlzLnN0YXRlfHwicmVsb2FkaW5nIj09PXRoaXMuc3RhdGV8fCJleHBpcmVkIj09PXRoaXMuc3RhdGV9LGR1LnByb3RvdHlwZS5wYXR0ZXJuc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltYWdlQXRsYXMmJiEhT2JqZWN0LmtleXModGhpcy5pbWFnZUF0bGFzLnBhdHRlcm5Qb3NpdGlvbnMpLmxlbmd0aH0sZHUucHJvdG90eXBlLnNldEV4cGlyeURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5leHBpcmF0aW9uVGltZTtpZih0LmNhY2hlQ29udHJvbCl7dmFyIHI9QSh0LmNhY2hlQ29udHJvbCk7clsibWF4LWFnZSJdJiYodGhpcy5leHBpcmF0aW9uVGltZT1EYXRlLm5vdygpKzFlMypyWyJtYXgtYWdlIl0pfWVsc2UgdC5leHBpcmVzJiYodGhpcy5leHBpcmF0aW9uVGltZT1uZXcgRGF0ZSh0LmV4cGlyZXMpLmdldFRpbWUoKSk7aWYodGhpcy5leHBpcmF0aW9uVGltZSl7dmFyIG49RGF0ZS5ub3coKSxpPSExO2lmKHRoaXMuZXhwaXJhdGlvblRpbWU+bilpPSExO2Vsc2UgaWYoZSlpZih0aGlzLmV4cGlyYXRpb25UaW1lPGUpaT0hMDtlbHNle3ZhciBhPXRoaXMuZXhwaXJhdGlvblRpbWUtZTthP3RoaXMuZXhwaXJhdGlvblRpbWU9bitNYXRoLm1heChhLDNlNCk6aT0hMH1lbHNlIGk9ITA7aT8odGhpcy5leHBpcmVkUmVxdWVzdENvdW50KyssdGhpcy5zdGF0ZT0iZXhwaXJlZCIpOnRoaXMuZXhwaXJlZFJlcXVlc3RDb3VudD0wfX0sZHUucHJvdG90eXBlLmdldEV4cGlyeVRpbWVvdXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmV4cGlyYXRpb25UaW1lKXJldHVybiB0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQ/MWUzKigxPDxNYXRoLm1pbih0aGlzLmV4cGlyZWRSZXF1ZXN0Q291bnQtMSwzMSkpOk1hdGgubWluKHRoaXMuZXhwaXJhdGlvblRpbWUtKG5ldyBEYXRlKS5nZXRUaW1lKCksTWF0aC5wb3coMiwzMSktMSl9LGR1LnByb3RvdHlwZS5zZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmxhdGVzdEZlYXR1cmVJbmRleCYmdGhpcy5sYXRlc3RGZWF0dXJlSW5kZXgucmF3VGlsZURhdGEmJjAhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgpe3ZhciByPXRoaXMubGF0ZXN0RmVhdHVyZUluZGV4LmxvYWRWVExheWVycygpO2Zvcih2YXIgbiBpbiB0aGlzLmJ1Y2tldHMpaWYoZS5zdHlsZS5oYXNMYXllcihuKSl7dmFyIGk9dGhpcy5idWNrZXRzW25dLGE9aS5sYXllcnNbMF0uc291cmNlTGF5ZXJ8fCJfZ2VvanNvblRpbGVMYXllciIsbz1yW2FdLHM9dFthXTtpZihvJiZzJiYwIT09T2JqZWN0LmtleXMocykubGVuZ3RoKXtpLnVwZGF0ZShzLG8sdGhpcy5pbWFnZUF0bGFzJiZ0aGlzLmltYWdlQXRsYXMucGF0dGVyblBvc2l0aW9uc3x8e30pO3ZhciBsPWUmJmUuc3R5bGUmJmUuc3R5bGUuZ2V0TGF5ZXIobik7bCYmKHRoaXMucXVlcnlQYWRkaW5nPU1hdGgubWF4KHRoaXMucXVlcnlQYWRkaW5nLGwucXVlcnlSYWRpdXMoaSkpKX19fX0sZHUucHJvdG90eXBlLmhvbGRpbmdGb3JGYWRlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbH0sZHUucHJvdG90eXBlLnN5bWJvbEZhZGVGaW5pc2hlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLnN5bWJvbEZhZGVIb2xkVW50aWx8fHRoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbDxSLm5vdygpfSxkdS5wcm90b3R5cGUuY2xlYXJGYWRlSG9sZD1mdW5jdGlvbigpe3RoaXMuc3ltYm9sRmFkZUhvbGRVbnRpbD12b2lkIDB9LGR1LnByb3RvdHlwZS5zZXRIb2xkRHVyYXRpb249ZnVuY3Rpb24odCl7dGhpcy5zeW1ib2xGYWRlSG9sZFVudGlsPVIubm93KCkrdH0sZHUucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj17fSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7cltpW25dXT0hMH10aGlzLmRlcGVuZGVuY2llc1t0XT1yfSxkdS5wcm90b3R5cGUuaGFzRGVwZW5kZW5jeT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT10aGlzLmRlcGVuZGVuY2llc1tpXTtpZihhKWZvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe2lmKGFbc1tvXV0pcmV0dXJuITB9fXJldHVybiExfTt2YXIgbXU9c2VsZi5wZXJmb3JtYW5jZSxndT1mdW5jdGlvbih0KXt0aGlzLl9tYXJrcz17c3RhcnQ6W3QudXJsLCJzdGFydCJdLmpvaW4oIiMiKSxlbmQ6W3QudXJsLCJlbmQiXS5qb2luKCIjIiksbWVhc3VyZTp0LnVybC50b1N0cmluZygpfSxtdS5tYXJrKHRoaXMuX21hcmtzLnN0YXJ0KX07Z3UucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbigpe211Lm1hcmsodGhpcy5fbWFya3MuZW5kKTt2YXIgdD1tdS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuX21hcmtzLm1lYXN1cmUpO3JldHVybiAwPT09dC5sZW5ndGgmJihtdS5tZWFzdXJlKHRoaXMuX21hcmtzLm1lYXN1cmUsdGhpcy5fbWFya3Muc3RhcnQsdGhpcy5fbWFya3MuZW5kKSx0PW11LmdldEVudHJpZXNCeU5hbWUodGhpcy5fbWFya3MubWVhc3VyZSksbXUuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5zdGFydCksbXUuY2xlYXJNYXJrcyh0aGlzLl9tYXJrcy5lbmQpLG11LmNsZWFyTWVhc3VyZXModGhpcy5fbWFya3MubWVhc3VyZSkpLHR9LHQuQWN0b3I9cWMsdC5BbHBoYUltYWdlPVNvLHQuQ2Fub25pY2FsVGlsZUlEPWV1LHQuQ29sbGlzaW9uQm94QXJyYXk9bmEsdC5Db2xvcj10ZSx0LkRFTURhdGE9YXUsdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eT13aSx0LkRpY3Rpb25hcnlDb2Rlcj1vdSx0LkVYVEVOVD04MTkyLHQuRXJyb3JFdmVudD1TdCx0LkV2YWx1YXRpb25QYXJhbWV0ZXJzPXBpLHQuRXZlbnQ9TXQsdC5FdmVudGVkPUV0LHQuRmVhdHVyZUluZGV4PXV1LHQuRmlsbEJ1Y2tldD1ncyx0LkZpbGxFeHRydXNpb25CdWNrZXQ9T3MsdC5JbWFnZUF0bGFzPUxsLHQuSW1hZ2VQb3NpdGlvbj1TbCx0LkxpbmVCdWNrZXQ9cXMsdC5MbmdMYXQ9V2MsdC5MbmdMYXRCb3VuZHM9WWMsdC5NZXJjYXRvckNvb3JkaW5hdGU9dHUsdC5PTkVfRU09MjQsdC5PdmVyc2NhbGVkVGlsZUlEPW51LHQuUG9pbnQ9aSx0LlBvaW50JDE9aSx0LlByb3BlcnRpZXM9U2ksdC5Qcm90b2J1Zj1hbCx0LlJHQkFJbWFnZT1Fbyx0LlJlcXVlc3RNYW5hZ2VyPUgsdC5SZXF1ZXN0UGVyZm9ybWFuY2U9Z3UsdC5SZXNvdXJjZVR5cGU9ZHQsdC5TZWdtZW50VmVjdG9yPXBhLHQuU291cmNlRmVhdHVyZVN0YXRlPWN1LHQuU3RydWN0QXJyYXlMYXlvdXQxdWkyPSRpLHQuU3RydWN0QXJyYXlMYXlvdXQyZjFmMmkxNj1xaSx0LlN0cnVjdEFycmF5TGF5b3V0Mmk0PXppLHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2PVlpLHQuU3RydWN0QXJyYXlMYXlvdXQ0aTg9RGksdC5TeW1ib2xCdWNrZXQ9TWMsdC5UZXh0dXJlPVZjLHQuVGlsZT1kdSx0LlRyYW5zaXRpb25hYmxlPWdpLHQuVW5pZm9ybTFmPVNhLHQuVW5pZm9ybTFpPU1hLHQuVW5pZm9ybTJmPUVhLHQuVW5pZm9ybTNmPUxhLHQuVW5pZm9ybTRmPUNhLHQuVW5pZm9ybUNvbG9yPVBhLHQuVW5pZm9ybU1hdHJpeDRmPU9hLHQuVW53cmFwcGVkVGlsZUlEPXJ1LHQuVmFsaWRhdGlvbkVycm9yPUN0LHQuV3JpdGluZ01vZGU9Q2wsdC5ab29tSGlzdG9yeT1Hbix0LmFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXStyWzBdLHRbMV09ZVsxXStyWzFdLHRbMl09ZVsyXStyWzJdLHR9LHQuYWRkRHluYW1pY0F0dHJpYnV0ZXM9d2MsdC5hc3luY0FsbD1mdW5jdGlvbih0LGUscil7aWYoIXQubGVuZ3RoKXJldHVybiByKG51bGwsW10pO3ZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KHQubGVuZ3RoKSxhPW51bGw7dC5mb3JFYWNoKChmdW5jdGlvbih0LG8pe2UodCwoZnVuY3Rpb24odCxlKXt0JiYoYT10KSxpW29dPWUsMD09LS1uJiZyKGEsaSl9KSl9KSl9LHQuYmV6aWVyPW8sdC5iaW5kQWxsPW0sdC5icm93c2VyPVIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZD1mdW5jdGlvbih0KXsrK2h0Pm90JiYodC5nZXRBY3RvcigpLnNlbmQoImVuZm9yY2VDYWNoZVNpemVMaW1pdCIsYXQpLGh0PTApfSx0LmNsYW1wPWwsdC5jbGVhclRpbGVDYWNoZT1mdW5jdGlvbih0KXt2YXIgZT1zZWxmLmNhY2hlcy5kZWxldGUoIm1hcGJveC10aWxlcyIpO3QmJmUuY2F0Y2godCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSkpfSx0LmNsaXBMaW5lPWVjLHQuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IGZvKDE2KTtyZXR1cm4gZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGV9LHQuY2xvbmUkMT14LHQuY2xvbmUkMj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgZm8oMyk7cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGV9LHQuY29sbGlzaW9uQ2lyY2xlTGF5b3V0PXRsLHQuY29uZmlnPUYsdC5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oMTYpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wKSx0WzBdPTEsdFs1XT0xLHRbMTBdPTEsdFsxNV09MSx0fSx0LmNyZWF0ZSQxPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGZvKDkpO3JldHVybiBmbyE9RmxvYXQzMkFycmF5JiYodFsxXT0wLHRbMl09MCx0WzNdPTAsdFs1XT0wLHRbNl09MCx0WzddPTApLHRbMF09MSx0WzRdPTEsdFs4XT0xLHR9LHQuY3JlYXRlJDI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZm8oNCk7cmV0dXJuIGZvIT1GbG9hdDMyQXJyYXkmJih0WzFdPTAsdFsyXT0wKSx0WzBdPTEsdFszXT0xLHR9LHQuY3JlYXRlQ29tbW9uanNNb2R1bGU9ZSx0LmNyZWF0ZUV4cHJlc3Npb249V3IsdC5jcmVhdGVMYXlvdXQ9SWksdC5jcmVhdGVTdHlsZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiJjdXN0b20iPT09dC50eXBlP25ldyBEYyh0KTpuZXcgUmNbdC50eXBlXSh0KX0sdC5jcm9zcz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdLG89clswXSxzPXJbMV0sbD1yWzJdO3JldHVybiB0WzBdPWkqbC1hKnMsdFsxXT1hKm8tbipsLHRbMl09bipzLWkqbyx0fSx0LmRlZXBFcXVhbD1mdW5jdGlvbiB0KGUscil7aWYoQXJyYXkuaXNBcnJheShlKSl7aWYoIUFycmF5LmlzQXJyYXkocil8fGUubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspaWYoIXQoZVtuXSxyW25dKSlyZXR1cm4hMTtyZXR1cm4hMH1pZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lJiZudWxsIT09cil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXJldHVybiExO2lmKE9iamVjdC5rZXlzKGUpLmxlbmd0aCE9PU9iamVjdC5rZXlzKHIpLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGkgaW4gZSlpZighdChlW2ldLHJbaV0pKXJldHVybiExO3JldHVybiEwfXJldHVybiBlPT09cn0sdC5kb3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl19LHQuZG90JDE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXSplWzBdK3RbMV0qZVsxXSt0WzJdKmVbMl0rdFszXSplWzNdfSx0LmVhc2U9cyx0LmVtaXRWYWxpZGF0aW9uRXJyb3JzPU9uLHQuZW5kc1dpdGg9Zyx0LmVuZm9yY2VDYWNoZVNpemVMaW1pdD1mdW5jdGlvbih0KXtzdCgpLFEmJlEudGhlbigoZnVuY3Rpb24oZSl7ZS5rZXlzKCkudGhlbigoZnVuY3Rpb24ocil7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aC10O24rKyllLmRlbGV0ZShyW25dKX0pKX0pKX0sdC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlPVlsLHQuZXZhbHVhdGVTaXplRm9yWm9vbT1XbCx0LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQ9ZGMsdC5ldmVudGVkPWNpLHQuZXh0ZW5kPXUsdC5mZWF0dXJlRmlsdGVyPXNuLHQuZmlsdGVyT2JqZWN0PXksdC5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnNpbihlKSxuPU1hdGguY29zKGUpO3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09MCx0WzNdPS1yLHRbNF09bix0WzVdPTAsdFs2XT0wLHRbN109MCx0WzhdPTEsdH0sdC5nZXRBbmNob3JBbGlnbm1lbnQ9VWwsdC5nZXRBbmNob3JKdXN0aWZpY2F0aW9uPW1jLHQuZ2V0QXJyYXlCdWZmZXI9eHQsdC5nZXRJbWFnZT1UdCx0LmdldEpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4geXQodSh0LHt0eXBlOiJqc29uIn0pLGUpfSx0LmdldFJUTFRleHRQbHVnaW5TdGF0dXM9dWksdC5nZXRSZWZlcnJlcj1ndCx0LmdldFZpZGVvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidmlkZW8iKTtpLm11dGVkPSEwLGkub25sb2Fkc3RhcnQ9ZnVuY3Rpb24oKXtlKG51bGwsaSl9O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgbz1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNvdXJjZSIpO3I9dFthXSxuPXZvaWQgMCwobj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSkuaHJlZj1yLChuLnByb3RvY29sIT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbHx8bi5ob3N0IT09c2VsZi5kb2N1bWVudC5sb2NhdGlvbi5ob3N0KSYmKGkuY3Jvc3NPcmlnaW49IkFub255bW91cyIpLG8uc3JjPXRbYV0saS5hcHBlbmRDaGlsZChvKX1yZXR1cm57Y2FuY2VsOmZ1bmN0aW9uKCl7fX19LHQuaWRlbnRpdHk9aG8sdC5pbnZlcnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1lWzNdLG89ZVs0XSxzPWVbNV0sbD1lWzZdLGM9ZVs3XSx1PWVbOF0sZj1lWzldLGg9ZVsxMF0scD1lWzExXSxkPWVbMTJdLG09ZVsxM10sZz1lWzE0XSx2PWVbMTVdLHk9cipzLW4qbyx4PXIqbC1pKm8sYj1yKmMtYSpvLF89bipsLWkqcyx3PW4qYy1hKnMsVD1pKmMtYSpsLGs9dSptLWYqZCxBPXUqZy1oKmQsTT11KnYtcCpkLFM9ZipnLWgqbSxFPWYqdi1wKm0sTD1oKnYtcCpnLEM9eSpMLXgqRStiKlMrXypNLXcqQStUKms7cmV0dXJuIEM/KEM9MS9DLHRbMF09KHMqTC1sKkUrYypTKSpDLHRbMV09KGkqRS1uKkwtYSpTKSpDLHRbMl09KG0qVC1nKncrdipfKSpDLHRbM109KGgqdy1mKlQtcCpfKSpDLHRbNF09KGwqTS1vKkwtYypBKSpDLHRbNV09KHIqTC1pKk0rYSpBKSpDLHRbNl09KGcqYi1kKlQtdip4KSpDLHRbN109KHUqVC1oKmIrcCp4KSpDLHRbOF09KG8qRS1zKk0rYyprKSpDLHRbOV09KG4qTS1yKkUtYSprKSpDLHRbMTBdPShkKnctbSpiK3YqeSkqQyx0WzExXT0oZipiLXUqdy1wKnkpKkMsdFsxMl09KHMqQS1vKlMtbCprKSpDLHRbMTNdPShyKlMtbipBK2kqaykqQyx0WzE0XT0obSp4LWQqXy1nKnkpKkMsdFsxNV09KHUqXy1mKngraCp5KSpDLHQpOm51bGx9LHQuaXNDaGFyPVluLHQuaXNNYXBib3hVUkw9cSx0LmtleXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107Zm9yKHZhciBuIGluIHQpbiBpbiBlfHxyLnB1c2gobik7cmV0dXJuIHJ9LHQubWFrZVJlcXVlc3Q9eXQsdC5tYXBPYmplY3Q9dix0Lm1lcmNhdG9yWGZyb21Mbmc9SmMsdC5tZXJjYXRvcllmcm9tTGF0PUtjLHQubWVyY2F0b3JaZnJvbUFsdGl0dWRlPVFjLHQubXVsPW1vLHQubXVsdGlwbHk9cG8sdC5tdnQ9THMsdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdLG49ZVsxXSxpPWVbMl0sYT1yKnIrbipuK2kqaTtyZXR1cm4gYT4wJiYoYT0xL01hdGguc3FydChhKSksdFswXT1lWzBdKmEsdFsxXT1lWzFdKmEsdFsyXT1lWzJdKmEsdH0sdC5udW1iZXI9cWUsdC5vZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9cHQsdC5vcnRobz1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0xLyhlLXIpLGw9MS8obi1pKSxjPTEvKGEtbyk7cmV0dXJuIHRbMF09LTIqcyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0tMipsLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0yKmMsdFsxMV09MCx0WzEyXT0oZStyKSpzLHRbMTNdPShpK24pKmwsdFsxNF09KG8rYSkqYyx0WzE1XT0xLHR9LHQucGFyc2VHbHlwaFBCRj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGFsKHQpLnJlYWRGaWVsZHMoVGwsW10pfSx0LnBiZj1hbCx0LnBlcmZvcm1TeW1ib2xMYXlvdXQ9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dC5jcmVhdGVBcnJheXMoKTt2YXIgcz01MTIqdC5vdmVyc2NhbGluZzt0LnRpbGVQaXhlbFJhdGlvPTgxOTIvcyx0LmNvbXBhcmVUZXh0PXt9LHQuaWNvbnNOZWVkTGluZWFyPSExO3ZhciBsPXQubGF5ZXJzWzBdLmxheW91dCxjPXQubGF5ZXJzWzBdLl91bmV2YWx1YXRlZExheW91dC5fdmFsdWVzLHU9e307aWYoImNvbXBvc2l0ZSI9PT10LnRleHRTaXplRGF0YS5raW5kKXt2YXIgZj10LnRleHRTaXplRGF0YSxoPWYubWluWm9vbSxwPWYubWF4Wm9vbTt1LmNvbXBvc2l0ZVRleHRTaXplcz1bY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkoaCksbyksY1sidGV4dC1zaXplIl0ucG9zc2libHlFdmFsdWF0ZShuZXcgcGkocCksbyldfWlmKCJjb21wb3NpdGUiPT09dC5pY29uU2l6ZURhdGEua2luZCl7dmFyIGQ9dC5pY29uU2l6ZURhdGEsbT1kLm1pblpvb20sZz1kLm1heFpvb207dS5jb21wb3NpdGVJY29uU2l6ZXM9W2NbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKG0pLG8pLGNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKGcpLG8pXX11LmxheW91dFRleHRTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKHQuem9vbSsxKSxvKSx1LmxheW91dEljb25TaXplPWNbImljb24tc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKHQuem9vbSsxKSxvKSx1LnRleHRNYXhTaXplPWNbInRleHQtc2l6ZSJdLnBvc3NpYmx5RXZhbHVhdGUobmV3IHBpKDE4KSk7Zm9yKHZhciB2PTI0KmwuZ2V0KCJ0ZXh0LWxpbmUtaGVpZ2h0IikseT0ibWFwIj09PWwuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpJiYicG9pbnQiIT09bC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx4PWwuZ2V0KCJ0ZXh0LWtlZXAtdXByaWdodCIpLGI9bC5nZXQoInRleHQtc2l6ZSIpLHc9ZnVuY3Rpb24oKXt2YXIgYT1rW1RdLHM9bC5nZXQoInRleHQtZm9udCIpLmV2YWx1YXRlKGEse30sbykuam9pbigiLCIpLGM9Yi5ldmFsdWF0ZShhLHt9LG8pLGY9dS5sYXlvdXRUZXh0U2l6ZS5ldmFsdWF0ZShhLHt9LG8pLGg9dS5sYXlvdXRJY29uU2l6ZS5ldmFsdWF0ZShhLHt9LG8pLHA9e2hvcml6b250YWw6e30sdmVydGljYWw6dm9pZCAwfSxkPWEudGV4dCxtPVswLDBdO2lmKGQpe3ZhciBnPWQudG9TdHJpbmcoKSx3PTI0KmwuZ2V0KCJ0ZXh0LWxldHRlci1zcGFjaW5nIikuZXZhbHVhdGUoYSx7fSxvKSxBPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe2lmKCFYbihyW2VdLmNoYXJDb2RlQXQoMCkpKXJldHVybiExfXJldHVybiEwfShnKT93OjAsTT1sLmdldCgidGV4dC1hbmNob3IiKS5ldmFsdWF0ZShhLHt9LG8pLFM9bC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIik7aWYoIVMpe3ZhciBFPWwuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShhLHt9LG8pO209RT9kYyhNLFsyNCpFLHBjXSk6bC5nZXQoInRleHQtb2Zmc2V0IikuZXZhbHVhdGUoYSx7fSxvKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiAyNCp0fSkpfXZhciBMPXk/ImNlbnRlciI6bC5nZXQoInRleHQtanVzdGlmeSIpLmV2YWx1YXRlKGEse30sbyksQz1sLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLFA9InBvaW50Ij09PUM/MjQqbC5nZXQoInRleHQtbWF4LXdpZHRoIikuZXZhbHVhdGUoYSx7fSxvKTowLEk9ZnVuY3Rpb24oKXt0LmFsbG93VmVydGljYWxQbGFjZW1lbnQmJlduKGcpJiYocC52ZXJ0aWNhbD1PbChkLGUscixpLHMsUCx2LE0sImxlZnQiLEEsbSxDbC52ZXJ0aWNhbCwhMCxDLGYsYykpfTtpZigheSYmUyl7Zm9yKHZhciBPPSJhdXRvIj09PUw/Uy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBtYyh0KX0pKTpbTF0sej0hMSxEPTA7RDxPLmxlbmd0aDtEKyspe3ZhciBSPU9bRF07aWYoIXAuaG9yaXpvbnRhbFtSXSlpZih6KXAuaG9yaXpvbnRhbFtSXT1wLmhvcml6b250YWxbMF07ZWxzZXt2YXIgRj1PbChkLGUscixpLHMsUCx2LCJjZW50ZXIiLFIsQSxtLENsLmhvcml6b250YWwsITEsQyxmLGMpO0YmJihwLmhvcml6b250YWxbUl09Rix6PTE9PT1GLnBvc2l0aW9uZWRMaW5lcy5sZW5ndGgpfX1JKCl9ZWxzZXsiYXV0byI9PT1MJiYoTD1tYyhNKSk7dmFyIEI9T2woZCxlLHIsaSxzLFAsdixNLEwsQSxtLENsLmhvcml6b250YWwsITEsQyxmLGMpO0ImJihwLmhvcml6b250YWxbTF09QiksSSgpLFduKGcpJiZ5JiZ4JiYocC52ZXJ0aWNhbD1PbChkLGUscixpLHMsUCx2LE0sTCxBLG0sQ2wudmVydGljYWwsITEsQyxmLGMpKX19dmFyIE49dm9pZCAwLGo9ITE7aWYoYS5pY29uJiZhLmljb24ubmFtZSl7dmFyIFU9blthLmljb24ubmFtZV07VSYmKE49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVVsKHIpLGk9bi5ob3Jpem9udGFsQWxpZ24sYT1uLnZlcnRpY2FsQWxpZ24sbz1lWzBdLHM9ZVsxXSxsPW8tdC5kaXNwbGF5U2l6ZVswXSppLGM9bCt0LmRpc3BsYXlTaXplWzBdLHU9cy10LmRpc3BsYXlTaXplWzFdKmE7cmV0dXJue2ltYWdlOnQsdG9wOnUsYm90dG9tOnUrdC5kaXNwbGF5U2l6ZVsxXSxsZWZ0OmwscmlnaHQ6Y319KGlbYS5pY29uLm5hbWVdLGwuZ2V0KCJpY29uLW9mZnNldCIpLmV2YWx1YXRlKGEse30sbyksbC5nZXQoImljb24tYW5jaG9yIikuZXZhbHVhdGUoYSx7fSxvKSksaj1VLnNkZix2b2lkIDA9PT10LnNkZkljb25zP3Quc2RmSWNvbnM9VS5zZGY6dC5zZGZJY29ucyE9PVUuc2RmJiZfKCJTdHlsZSBzaGVldCB3YXJuaW5nOiBDYW5ub3QgbWl4IFNERiBhbmQgbm9uLVNERiBpY29ucyBpbiBvbmUgYnVmZmVyIiksKFUucGl4ZWxSYXRpbyE9PXQucGl4ZWxSYXRpb3x8MCE9PWwuZ2V0KCJpY29uLXJvdGF0ZSIpLmNvbnN0YW50T3IoMSkpJiYodC5pY29uc05lZWRMaW5lYXI9ITApKX12YXIgVj12YyhwLmhvcml6b250YWwpfHxwLnZlcnRpY2FsO3QuaWNvbnNJblRleHQ9ISFWJiZWLmljb25zSW5UZXh0LChWfHxOKSYmZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1KXt2YXIgZj1hLnRleHRNYXhTaXplLmV2YWx1YXRlKGUse30pO3ZvaWQgMD09PWYmJihmPW8pO3ZhciBoLHA9dC5sYXllcnNbMF0ubGF5b3V0LGQ9cC5nZXQoImljb24tb2Zmc2V0IikuZXZhbHVhdGUoZSx7fSx1KSxtPXZjKHIuaG9yaXpvbnRhbCksZz1vLzI0LHY9dC50aWxlUGl4ZWxSYXRpbypnLHk9dC50aWxlUGl4ZWxSYXRpbypmLzI0LHg9dC50aWxlUGl4ZWxSYXRpbypzLGI9dC50aWxlUGl4ZWxSYXRpbypwLmdldCgic3ltYm9sLXNwYWNpbmciKSx3PXAuZ2V0KCJ0ZXh0LXBhZGRpbmciKSp0LnRpbGVQaXhlbFJhdGlvLFQ9cC5nZXQoImljb24tcGFkZGluZyIpKnQudGlsZVBpeGVsUmF0aW8saz1wLmdldCgidGV4dC1tYXgtYW5nbGUiKS8xODAqTWF0aC5QSSxBPSJtYXAiPT09cC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IikmJiJwb2ludCIhPT1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLE09Im1hcCI9PT1wLmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSYmInBvaW50IiE9PXAuZ2V0KCJzeW1ib2wtcGxhY2VtZW50IiksUz1wLmdldCgic3ltYm9sLXBsYWNlbWVudCIpLEU9Yi8yLEw9cC5nZXQoImljb24tdGV4dC1maXQiKTtuJiYibm9uZSIhPT1MJiYodC5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZyLnZlcnRpY2FsJiYoaD1IbChuLHIudmVydGljYWwsTCxwLmdldCgiaWNvbi10ZXh0LWZpdC1wYWRkaW5nIiksZCxnKSksbSYmKG49SGwobixtLEwscC5nZXQoImljb24tdGV4dC1maXQtcGFkZGluZyIpLGQsZykpKTt2YXIgQz1mdW5jdGlvbihzLGYpe2YueDwwfHxmLng+PTgxOTJ8fGYueTwwfHxmLnk+PTgxOTJ8fGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseCxiLHcsVCxrLEEpe3ZhciBNLFMsRSxMLEMsUD10LmFkZFRvTGluZVZlcnRleEFycmF5KGUsciksST0wLE89MCx6PTAsRD0wLFI9LTEsRj0tMSxCPXt9LE49eWEoIiIpLGo9MCxVPTA7dm9pZCAwPT09cy5fdW5ldmFsdWF0ZWRMYXlvdXQuZ2V0VmFsdWUoInRleHQtcmFkaWFsLW9mZnNldCIpPyhNPXMubGF5b3V0LmdldCgidGV4dC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIDI0KnR9KSksaj1NWzBdLFU9TVsxXSk6KGo9MjQqcy5sYXlvdXQuZ2V0KCJ0ZXh0LXJhZGlhbC1vZmZzZXQiKS5ldmFsdWF0ZShiLHt9LGspLFU9cGMpO2lmKHQuYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmbi52ZXJ0aWNhbCl7dmFyIFY9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30saykrOTAsSD1uLnZlcnRpY2FsO0w9bmV3IHNjKGwsZSxjLHUsZixILGgscCxkLFYpLG8mJihDPW5ldyBzYyhsLGUsYyx1LGYsbyxnLHYsZCxWKSl9aWYoaSl7dmFyIHE9cy5sYXlvdXQuZ2V0KCJpY29uLXJvdGF0ZSIpLmV2YWx1YXRlKGIse30pLEc9Im5vbmUiIT09cy5sYXlvdXQuZ2V0KCJpY29uLXRleHQtZml0IiksWT1yYyhpLHEsVCxHKSxXPW8/cmMobyxxLFQsRyk6dm9pZCAwO0U9bmV3IHNjKGwsZSxjLHUsZixpLGcsdiwhMSxxKSxJPTQqWS5sZW5ndGg7dmFyIFg9dC5pY29uU2l6ZURhdGEsWj1udWxsOyJzb3VyY2UiPT09WC5raW5kPyhaPVsxMjgqcy5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5ldmFsdWF0ZShiLHt9KV0pWzBdPjMyNjQwJiZfKHQubGF5ZXJJZHNbMF0rJzogVmFsdWUgZm9yICJpY29uLXNpemUiIGlzID49IDI1NS4gUmVkdWNlIHlvdXIgImljb24tc2l6ZSIuJyk6ImNvbXBvc2l0ZSI9PT1YLmtpbmQmJigoWj1bMTI4KncuY29tcG9zaXRlSWNvblNpemVzWzBdLmV2YWx1YXRlKGIse30sayksMTI4KncuY29tcG9zaXRlSWNvblNpemVzWzFdLmV2YWx1YXRlKGIse30sayldKVswXT4zMjY0MHx8WlsxXT4zMjY0MCkmJl8odC5sYXllcklkc1swXSsnOiBWYWx1ZSBmb3IgImljb24tc2l6ZSIgaXMgPj0gMjU1LiBSZWR1Y2UgeW91ciAiaWNvbi1zaXplIi4nKSx0LmFkZFN5bWJvbHModC5pY29uLFksWix4LHksYiwhMSxlLFAubGluZVN0YXJ0SW5kZXgsUC5saW5lTGVuZ3RoLC0xLGspLFI9dC5pY29uLnBsYWNlZFN5bWJvbEFycmF5Lmxlbmd0aC0xLFcmJihPPTQqVy5sZW5ndGgsdC5hZGRTeW1ib2xzKHQuaWNvbixXLFoseCx5LGIsQ2wudmVydGljYWwsZSxQLmxpbmVTdGFydEluZGV4LFAubGluZUxlbmd0aCwtMSxrKSxGPXQuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5sZW5ndGgtMSl9Zm9yKHZhciBKIGluIG4uaG9yaXpvbnRhbCl7dmFyIEs9bi5ob3Jpem9udGFsW0pdO2lmKCFTKXtOPXlhKEsudGV4dCk7dmFyIFE9cy5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0ZSIpLmV2YWx1YXRlKGIse30sayk7Uz1uZXcgc2MobCxlLGMsdSxmLEssaCxwLGQsUSl9dmFyICQ9MT09PUsucG9zaXRpb25lZExpbmVzLmxlbmd0aDtpZih6Kz1nYyh0LGUsSyxhLHMsZCxiLG0sUCxuLnZlcnRpY2FsP0NsLmhvcml6b250YWw6Q2wuaG9yaXpvbnRhbE9ubHksJD9PYmplY3Qua2V5cyhuLmhvcml6b250YWwpOltKXSxCLFIsdyxrKSwkKWJyZWFrfW4udmVydGljYWwmJihEKz1nYyh0LGUsbi52ZXJ0aWNhbCxhLHMsZCxiLG0sUCxDbC52ZXJ0aWNhbCxbInZlcnRpY2FsIl0sQixGLHcsaykpO3ZhciB0dD1TP1MuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxldD1TP1MuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgscnQ9TD9MLmJveFN0YXJ0SW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsbnQ9TD9MLmJveEVuZEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGl0PUU/RS5ib3hTdGFydEluZGV4OnQuY29sbGlzaW9uQm94QXJyYXkubGVuZ3RoLGF0PUU/RS5ib3hFbmRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxvdD1DP0MuYm94U3RhcnRJbmRleDp0LmNvbGxpc2lvbkJveEFycmF5Lmxlbmd0aCxzdD1DP0MuYm94RW5kSW5kZXg6dC5jb2xsaXNpb25Cb3hBcnJheS5sZW5ndGgsbHQ9LTEsY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5jaXJjbGVEaWFtZXRlcj9NYXRoLm1heCh0LmNpcmNsZURpYW1ldGVyLGUpOmV9O2x0PWN0KFMsbHQpLGx0PWN0KEwsbHQpLGx0PWN0KEUsbHQpO3ZhciB1dD0obHQ9Y3QoQyxsdCkpPi0xPzE6MDt1dCYmKGx0Kj1BLzI0KTt0LmdseXBoT2Zmc2V0QXJyYXkubGVuZ3RoPj1NYy5NQVhfR0xZUEhTJiZfKCJUb28gbWFueSBnbHlwaHMgYmVpbmcgcmVuZGVyZWQgaW4gYSB0aWxlLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9tYXBib3gtZ2wtanMvaXNzdWVzLzI5MDciKTt2b2lkIDAhPT1iLnNvcnRLZXkmJnQuYWRkVG9Tb3J0S2V5UmFuZ2VzKHQuc3ltYm9sSW5zdGFuY2VzLmxlbmd0aCxiLnNvcnRLZXkpO3Quc3ltYm9sSW5zdGFuY2VzLmVtcGxhY2VCYWNrKGUueCxlLnksQi5yaWdodD49MD9CLnJpZ2h0Oi0xLEIuY2VudGVyPj0wP0IuY2VudGVyOi0xLEIubGVmdD49MD9CLmxlZnQ6LTEsQi52ZXJ0aWNhbHx8LTEsUixGLE4sdHQsZXQscnQsbnQsaXQsYXQsb3Qsc3QsYyx6LEQsSSxPLHV0LDAsaCxqLFUsbHQpfSh0LGYscyxyLG4saSxoLHQubGF5ZXJzWzBdLHQuY29sbGlzaW9uQm94QXJyYXksZS5pbmRleCxlLnNvdXJjZUxheWVySW5kZXgsdC5pbmRleCx2LHcsQSxsLHgsVCxNLGQsZSxhLGMsdSxvKX07aWYoImxpbmUiPT09Uylmb3IodmFyIFA9MCxJPWVjKGUuZ2VvbWV0cnksMCwwLDgxOTIsODE5Mik7UDxJLmxlbmd0aDtQKz0xKWZvcih2YXIgTz1JW1BdLHo9dGMoTyxiLGssci52ZXJ0aWNhbHx8bSxuLDI0LHksdC5vdmVyc2NhbGluZyw4MTkyKSxEPTAsUj16O0Q8Ui5sZW5ndGg7RCs9MSl7dmFyIEY9UltEXSxCPW07QiYmeWModCxCLnRleHQsRSxGKXx8QyhPLEYpfWVsc2UgaWYoImxpbmUtY2VudGVyIj09PVMpZm9yKHZhciBOPTAsaj1lLmdlb21ldHJ5O048ai5sZW5ndGg7Tis9MSl7dmFyIFU9altOXTtpZihVLmxlbmd0aD4xKXt2YXIgVj0kbChVLGssci52ZXJ0aWNhbHx8bSxuLDI0LHkpO1YmJkMoVSxWKX19ZWxzZSBpZigiUG9seWdvbiI9PT1lLnR5cGUpZm9yKHZhciBIPTAscT1ocyhlLmdlb21ldHJ5LDApO0g8cS5sZW5ndGg7SCs9MSl7dmFyIEc9cVtIXSxZPXVjKEcsMTYpO0MoR1swXSxuZXcgcWwoWS54LFkueSwwKSl9ZWxzZSBpZigiTGluZVN0cmluZyI9PT1lLnR5cGUpZm9yKHZhciBXPTAsWD1lLmdlb21ldHJ5O1c8WC5sZW5ndGg7Vys9MSl7dmFyIFo9WFtXXTtDKFosbmV3IHFsKFpbMF0ueCxaWzBdLnksMCkpfWVsc2UgaWYoIlBvaW50Ij09PWUudHlwZSlmb3IodmFyIEo9MCxLPWUuZ2VvbWV0cnk7SjxLLmxlbmd0aDtKKz0xKWZvcih2YXIgUT1LW0pdLCQ9MCx0dD1ROyQ8dHQubGVuZ3RoOyQrPTEpe3ZhciBldD10dFskXTtDKFtldF0sbmV3IHFsKGV0LngsZXQueSwwKSl9fSh0LGEscCxOLG4sdSxmLGgsbSxqLG8pfSxUPTAsaz10LmZlYXR1cmVzO1Q8ay5sZW5ndGg7VCs9MSl3KCk7YSYmdC5nZW5lcmF0ZUNvbGxpc2lvbkRlYnVnQnVmZmVycygpfSx0LnBlcnNwZWN0aXZlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGEsbz0xL01hdGgudGFuKGUvMik7cmV0dXJuIHRbMF09by9yLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPW8sdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE1XT0wLG51bGwhPWkmJmkhPT0xLzA/KGE9MS8obi1pKSx0WzEwXT0oaStuKSphLHRbMTRdPTIqaSpuKmEpOih0WzEwXT0tMSx0WzE0XT0tMipuKSx0fSx0LnBpY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kgaW4gdCYmKHJbaV09dFtpXSl9cmV0dXJuIHJ9LHQucGx1Z2luPWhpLHQucG9seWdvbkludGVyc2VjdHNQb2x5Z29uPVphLHQucG9zdE1hcExvYWRFdmVudD1pdCx0LnBvc3RUdXJuc3RpbGVFdmVudD1ydCx0LnBvdHBhY2s9TWwsdC5yZWZQcm9wZXJ0aWVzPVsidHlwZSIsInNvdXJjZSIsInNvdXJjZS1sYXllciIsIm1pbnpvb20iLCJtYXh6b29tIiwiZmlsdGVyIiwibGF5b3V0Il0sdC5yZWdpc3Rlcj1Obix0LnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIHQoe3BsdWdpblN0YXR1czphaSxwbHVnaW5VUkw6b2l9KSxjaS5vbigicGx1Z2luU3RhdGVDaGFuZ2UiLHQpLHR9LHQucm90YXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXSxhPWVbMl0sbz1lWzNdLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1uKmwrYSpzLHRbMV09aSpsK28qcyx0WzJdPW4qLXMrYSpsLHRbM109aSotcytvKmwsdH0sdC5yb3RhdGVYPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1NYXRoLnNpbihyKSxpPU1hdGguY29zKHIpLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs3XSxjPWVbOF0sdT1lWzldLGY9ZVsxMF0saD1lWzExXTtyZXR1cm4gZSE9PXQmJih0WzBdPWVbMF0sdFsxXT1lWzFdLHRbMl09ZVsyXSx0WzNdPWVbM10sdFsxMl09ZVsxMl0sdFsxM109ZVsxM10sdFsxNF09ZVsxNF0sdFsxNV09ZVsxNV0pLHRbNF09YSppK2Mqbix0WzVdPW8qaSt1Km4sdFs2XT1zKmkrZipuLHRbN109bCppK2gqbix0WzhdPWMqaS1hKm4sdFs5XT11KmktbypuLHRbMTBdPWYqaS1zKm4sdFsxMV09aCppLWwqbix0fSx0LnJvdGF0ZVo9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguc2luKHIpLGk9TWF0aC5jb3MociksYT1lWzBdLG89ZVsxXSxzPWVbMl0sbD1lWzNdLGM9ZVs0XSx1PWVbNV0sZj1lWzZdLGg9ZVs3XTtyZXR1cm4gZSE9PXQmJih0WzhdPWVbOF0sdFs5XT1lWzldLHRbMTBdPWVbMTBdLHRbMTFdPWVbMTFdLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdKSx0WzBdPWEqaStjKm4sdFsxXT1vKmkrdSpuLHRbMl09cyppK2Yqbix0WzNdPWwqaStoKm4sdFs0XT1jKmktYSpuLHRbNV09dSppLW8qbix0WzZdPWYqaS1zKm4sdFs3XT1oKmktbCpuLHR9LHQuc2NhbGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0saT1yWzFdLGE9clsyXTtyZXR1cm4gdFswXT1lWzBdKm4sdFsxXT1lWzFdKm4sdFsyXT1lWzJdKm4sdFszXT1lWzNdKm4sdFs0XT1lWzRdKmksdFs1XT1lWzVdKmksdFs2XT1lWzZdKmksdFs3XT1lWzddKmksdFs4XT1lWzhdKmEsdFs5XT1lWzldKmEsdFsxMF09ZVsxMF0qYSx0WzExXT1lWzExXSphLHRbMTJdPWVbMTJdLHRbMTNdPWVbMTNdLHRbMTRdPWVbMTRdLHRbMTVdPWVbMTVdLHR9LHQuc2NhbGUkMT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHRbM109ZVszXSpyLHR9LHQuc2NhbGUkMj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbMF09ZVswXSpyLHRbMV09ZVsxXSpyLHRbMl09ZVsyXSpyLHR9LHQuc2V0Q2FjaGVMaW1pdHM9ZnVuY3Rpb24odCxlKXthdD10LG90PWV9LHQuc2V0UlRMVGV4dFBsdWdpbj1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwPT09ciYmKHI9ITEpLGFpPT09dGl8fGFpPT09ZWl8fGFpPT09cmkpdGhyb3cgbmV3IEVycm9yKCJzZXRSVExUZXh0UGx1Z2luIGNhbm5vdCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIik7b2k9Ui5yZXNvbHZlVVJMKHQpLGFpPXRpLGlpPWUsbGkoKSxyfHxmaSgpfSx0LnNwaGVyaWNhbFRvQ2FydGVzaWFuPWZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0scj10WzFdLG49dFsyXTtyZXR1cm4gcis9OTAscio9TWF0aC5QSS8xODAsbio9TWF0aC5QSS8xODAse3g6ZSpNYXRoLmNvcyhyKSpNYXRoLnNpbihuKSx5OmUqTWF0aC5zaW4ocikqTWF0aC5zaW4obiksejplKk1hdGguY29zKG4pfX0sdC5zcXJMZW49Ym8sdC5zdHlsZVNwZWM9THQsdC5zdWI9eW8sdC5zeW1ib2xTaXplPVhsLHQudHJhbnNmb3JtTWF0Mz1mdW5jdGlvbih0LGUscil7dmFyIG49ZVswXSxpPWVbMV0sYT1lWzJdO3JldHVybiB0WzBdPW4qclswXStpKnJbM10rYSpyWzZdLHRbMV09bipyWzFdK2kqcls0XSthKnJbN10sdFsyXT1uKnJbMl0raSpyWzVdK2Eqcls4XSx0fSx0LnRyYW5zZm9ybU1hdDQ9eG8sdC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHMsbCxjLHUsZixoLHAsZCxtPXJbMF0sZz1yWzFdLHY9clsyXTtyZXR1cm4gZT09PXQ/KHRbMTJdPWVbMF0qbStlWzRdKmcrZVs4XSp2K2VbMTJdLHRbMTNdPWVbMV0qbStlWzVdKmcrZVs5XSp2K2VbMTNdLHRbMTRdPWVbMl0qbStlWzZdKmcrZVsxMF0qditlWzE0XSx0WzE1XT1lWzNdKm0rZVs3XSpnK2VbMTFdKnYrZVsxNV0pOihuPWVbMF0saT1lWzFdLGE9ZVsyXSxvPWVbM10scz1lWzRdLGw9ZVs1XSxjPWVbNl0sdT1lWzddLGY9ZVs4XSxoPWVbOV0scD1lWzEwXSxkPWVbMTFdLHRbMF09bix0WzFdPWksdFsyXT1hLHRbM109byx0WzRdPXMsdFs1XT1sLHRbNl09Yyx0WzddPXUsdFs4XT1mLHRbOV09aCx0WzEwXT1wLHRbMTFdPWQsdFsxMl09biptK3MqZytmKnYrZVsxMl0sdFsxM109aSptK2wqZytoKnYrZVsxM10sdFsxNF09YSptK2MqZytwKnYrZVsxNF0sdFsxNV09byptK3UqZytkKnYrZVsxNV0pLHR9LHQudHJpZ2dlclBsdWdpbkNvbXBsZXRpb25FdmVudD1zaSx0LnVuaXF1ZUlkPWgsdC52YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXI9ZnVuY3Rpb24odCl7dmFyIGU9W10scj10LmlkO3JldHVybiB2b2lkIDA9PT1yJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiaWQiJ30pLHZvaWQgMD09PXQucmVuZGVyJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogbWlzc2luZyByZXF1aXJlZCBtZXRob2QgInJlbmRlciInfSksdC5yZW5kZXJpbmdNb2RlJiYiMmQiIT09dC5yZW5kZXJpbmdNb2RlJiYiM2QiIT09dC5yZW5kZXJpbmdNb2RlJiZlLnB1c2goe21lc3NhZ2U6ImxheWVycy4iK3IrJzogcHJvcGVydHkgInJlbmRlcmluZ01vZGUiIG11c3QgYmUgZWl0aGVyICIyZCIgb3IgIjNkIid9KSxlfSx0LnZhbGlkYXRlTGlnaHQ9Q24sdC52YWxpZGF0ZVN0eWxlPUxuLHQudmFsdWVzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX0sdC52ZWN0b3JUaWxlPUxzLHQudmVyc2lvbj0iMS4xMC4xIix0Lndhcm5PbmNlPV8sdC53ZWJwU3VwcG9ydGVkPUIsdC53aW5kb3c9c2VsZix0LndyYXA9Y30pKSxuKDAsKGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dHlwZW9mIHQ7aWYoIm51bWJlciI9PT1yfHwiYm9vbGVhbiI9PT1yfHwic3RyaW5nIj09PXJ8fG51bGw9PXQpcmV0dXJuIEpTT04uc3RyaW5naWZ5KHQpO2lmKEFycmF5LmlzQXJyYXkodCkpe2Zvcih2YXIgbj0iWyIsaT0wLGE9dDtpPGEubGVuZ3RoO2krPTEpe24rPWUoYVtpXSkrIiwifXJldHVybiBuKyJdIn1mb3IodmFyIG89T2JqZWN0LmtleXModCkuc29ydCgpLHM9InsiLGw9MDtsPG8ubGVuZ3RoO2wrKylzKz1KU09OLnN0cmluZ2lmeShvW2xdKSsiOiIrZSh0W29bbF1dKSsiLCI7cmV0dXJuIHMrIn0ifWZ1bmN0aW9uIHIocil7Zm9yKHZhciBuPSIiLGk9MCxhPXQucmVmUHJvcGVydGllcztpPGEubGVuZ3RoO2krPTEpe24rPSIvIitlKHJbYVtpXV0pfXJldHVybiBufXZhciBuPWZ1bmN0aW9uKHQpe3RoaXMua2V5Q2FjaGU9e30sdCYmdGhpcy5yZXBsYWNlKHQpfTtuLnByb3RvdHlwZS5yZXBsYWNlPWZ1bmN0aW9uKHQpe3RoaXMuX2xheWVyQ29uZmlncz17fSx0aGlzLl9sYXllcnM9e30sdGhpcy51cGRhdGUodCxbXSl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLG4pe2Zvcih2YXIgaT10aGlzLGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xheWVyQ29uZmlnc1tzLmlkXT1zO3ZhciBsPXRoaXMuX2xheWVyc1tzLmlkXT10LmNyZWF0ZVN0eWxlTGF5ZXIocyk7bC5fZmVhdHVyZUZpbHRlcj10LmZlYXR1cmVGaWx0ZXIobC5maWx0ZXIpLHRoaXMua2V5Q2FjaGVbcy5pZF0mJmRlbGV0ZSB0aGlzLmtleUNhY2hlW3MuaWRdfWZvcih2YXIgYz0wLHU9bjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107ZGVsZXRlIHRoaXMua2V5Q2FjaGVbZl0sZGVsZXRlIHRoaXMuX2xheWVyQ29uZmlnc1tmXSxkZWxldGUgdGhpcy5fbGF5ZXJzW2ZdfXRoaXMuZmFtaWxpZXNCeVNvdXJjZT17fTtmb3IodmFyIGg9MCxwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9ZSYmZVt0W2ldLmlkXXx8cih0W2ldKTtlJiYoZVt0W2ldLmlkXT1hKTt2YXIgbz1uW2FdO298fChvPW5bYV09W10pLG8ucHVzaCh0W2ldKX12YXIgcz1bXTtmb3IodmFyIGwgaW4gbilzLnB1c2gobltsXSk7cmV0dXJuIHN9KHQudmFsdWVzKHRoaXMuX2xheWVyQ29uZmlncyksdGhpcy5rZXlDYWNoZSk7aDxwLmxlbmd0aDtoKz0xKXt2YXIgZD1wW2hdLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGkuX2xheWVyc1t0LmlkXX0pKSxtPWRbMF07aWYoIm5vbmUiIT09bS52aXNpYmlsaXR5KXt2YXIgZz1tLnNvdXJjZXx8IiIsdj10aGlzLmZhbWlsaWVzQnlTb3VyY2VbZ107dnx8KHY9dGhpcy5mYW1pbGllc0J5U291cmNlW2ddPXt9KTt2YXIgeT1tLnNvdXJjZUxheWVyfHwiX2dlb2pzb25UaWxlTGF5ZXIiLHg9dlt5XTt4fHwoeD12W3ldPVtdKSx4LnB1c2goZCl9fX07dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHI9e30sbj1bXTtmb3IodmFyIGkgaW4gZSl7dmFyIGE9ZVtpXSxvPXJbaV09e307Zm9yKHZhciBzIGluIGEpe3ZhciBsPWFbK3NdO2lmKGwmJjAhPT1sLmJpdG1hcC53aWR0aCYmMCE9PWwuYml0bWFwLmhlaWdodCl7dmFyIGM9e3g6MCx5OjAsdzpsLmJpdG1hcC53aWR0aCsyLGg6bC5iaXRtYXAuaGVpZ2h0KzJ9O24ucHVzaChjKSxvW3NdPXtyZWN0OmMsbWV0cmljczpsLm1ldHJpY3N9fX19dmFyIHU9dC5wb3RwYWNrKG4pLGY9dS53LGg9dS5oLHA9bmV3IHQuQWxwaGFJbWFnZSh7d2lkdGg6Znx8MSxoZWlnaHQ6aHx8MX0pO2Zvcih2YXIgZCBpbiBlKXt2YXIgbT1lW2RdO2Zvcih2YXIgZyBpbiBtKXt2YXIgdj1tWytnXTtpZih2JiYwIT09di5iaXRtYXAud2lkdGgmJjAhPT12LmJpdG1hcC5oZWlnaHQpe3ZhciB5PXJbZF1bZ10ucmVjdDt0LkFscGhhSW1hZ2UuY29weSh2LmJpdG1hcCxwLHt4OjAseTowfSx7eDp5LngrMSx5OnkueSsxfSx2LmJpdG1hcCl9fX10aGlzLmltYWdlPXAsdGhpcy5wb3NpdGlvbnM9cn07dC5yZWdpc3RlcigiR2x5cGhBdGxhcyIsaSk7dmFyIGE9ZnVuY3Rpb24oZSl7dGhpcy50aWxlSUQ9bmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLnRpbGVJRC5vdmVyc2NhbGVkWixlLnRpbGVJRC53cmFwLGUudGlsZUlELmNhbm9uaWNhbC56LGUudGlsZUlELmNhbm9uaWNhbC54LGUudGlsZUlELmNhbm9uaWNhbC55KSx0aGlzLnVpZD1lLnVpZCx0aGlzLnpvb209ZS56b29tLHRoaXMucGl4ZWxSYXRpbz1lLnBpeGVsUmF0aW8sdGhpcy50aWxlU2l6ZT1lLnRpbGVTaXplLHRoaXMuc291cmNlPWUuc291cmNlLHRoaXMub3ZlcnNjYWxpbmc9dGhpcy50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdGhpcy5zaG93Q29sbGlzaW9uQm94ZXM9ZS5zaG93Q29sbGlzaW9uQm94ZXMsdGhpcy5jb2xsZWN0UmVzb3VyY2VUaW1pbmc9ISFlLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLnJldHVybkRlcGVuZGVuY2llcz0hIWUucmV0dXJuRGVwZW5kZW5jaWVzLHRoaXMucHJvbW90ZUlkPWUucHJvbW90ZUlkfTtmdW5jdGlvbiBvKGUscixuKXtmb3IodmFyIGk9bmV3IHQuRXZhbHVhdGlvblBhcmFtZXRlcnMociksYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe29bYV0ucmVjYWxjdWxhdGUoaSxuKX19ZnVuY3Rpb24gcyhlLHIpe3ZhciBuPXQuZ2V0QXJyYXlCdWZmZXIoZS5yZXF1ZXN0LChmdW5jdGlvbihlLG4saSxhKXtlP3IoZSk6biYmcihudWxsLHt2ZWN0b3JUaWxlOm5ldyB0LnZlY3RvclRpbGUuVmVjdG9yVGlsZShuZXcgdC5wYmYobikpLHJhd0RhdGE6bixjYWNoZUNvbnRyb2w6aSxleHBpcmVzOmF9KX0pKTtyZXR1cm4gZnVuY3Rpb24oKXtuLmNhbmNlbCgpLHIoKX19YS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSxyLG4sYSxzKXt2YXIgbD10aGlzO3RoaXMuc3RhdHVzPSJwYXJzaW5nIix0aGlzLmRhdGE9ZSx0aGlzLmNvbGxpc2lvbkJveEFycmF5PW5ldyB0LkNvbGxpc2lvbkJveEFycmF5O3ZhciBjPW5ldyB0LkRpY3Rpb25hcnlDb2RlcihPYmplY3Qua2V5cyhlLmxheWVycykuc29ydCgpKSx1PW5ldyB0LkZlYXR1cmVJbmRleCh0aGlzLnRpbGVJRCx0aGlzLnByb21vdGVJZCk7dS5idWNrZXRMYXllcklEcz1bXTt2YXIgZixoLHAsZCxtPXt9LGc9e2ZlYXR1cmVJbmRleDp1LGljb25EZXBlbmRlbmNpZXM6e30scGF0dGVybkRlcGVuZGVuY2llczp7fSxnbHlwaERlcGVuZGVuY2llczp7fSxhdmFpbGFibGVJbWFnZXM6bn0sdj1yLmZhbWlsaWVzQnlTb3VyY2VbdGhpcy5zb3VyY2VdO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD1lLmxheWVyc1t5XTtpZih4KXsxPT09eC52ZXJzaW9uJiZ0Lndhcm5PbmNlKCdWZWN0b3IgdGlsZSBzb3VyY2UgIicrdGhpcy5zb3VyY2UrJyIgbGF5ZXIgIicreSsnIiBkb2VzIG5vdCB1c2UgdmVjdG9yIHRpbGUgc3BlYyB2MiBhbmQgdGhlcmVmb3JlIG1heSBoYXZlIHNvbWUgcmVuZGVyaW5nIGVycm9ycy4nKTtmb3IodmFyIGI9Yy5lbmNvZGUoeSksXz1bXSx3PTA7dzx4Lmxlbmd0aDt3Kyspe3ZhciBUPXguZmVhdHVyZSh3KSxrPXUuZ2V0SWQoVCx5KTtfLnB1c2goe2ZlYXR1cmU6VCxpZDprLGluZGV4Oncsc291cmNlTGF5ZXJJbmRleDpifSl9Zm9yKHZhciBBPTAsTT12W3ldO0E8TS5sZW5ndGg7QSs9MSl7dmFyIFM9TVtBXSxFPVNbMF07aWYoIShFLm1pbnpvb20mJnRoaXMuem9vbTxNYXRoLmZsb29yKEUubWluem9vbSkpKWlmKCEoRS5tYXh6b29tJiZ0aGlzLnpvb20+PUUubWF4em9vbSkpaWYoIm5vbmUiIT09RS52aXNpYmlsaXR5KW8oUyx0aGlzLnpvb20sbiksKG1bRS5pZF09RS5jcmVhdGVCdWNrZXQoe2luZGV4OnUuYnVja2V0TGF5ZXJJRHMubGVuZ3RoLGxheWVyczpTLHpvb206dGhpcy56b29tLHBpeGVsUmF0aW86dGhpcy5waXhlbFJhdGlvLG92ZXJzY2FsaW5nOnRoaXMub3ZlcnNjYWxpbmcsY29sbGlzaW9uQm94QXJyYXk6dGhpcy5jb2xsaXNpb25Cb3hBcnJheSxzb3VyY2VMYXllckluZGV4OmIsc291cmNlSUQ6dGhpcy5zb3VyY2V9KSkucG9wdWxhdGUoXyxnLHRoaXMudGlsZUlELmNhbm9uaWNhbCksdS5idWNrZXRMYXllcklEcy5wdXNoKFMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSl9fX12YXIgTD10Lm1hcE9iamVjdChnLmdseXBoRGVwZW5kZW5jaWVzLChmdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubWFwKE51bWJlcil9KSk7T2JqZWN0LmtleXMoTCkubGVuZ3RoP2Euc2VuZCgiZ2V0R2x5cGhzIix7dWlkOnRoaXMudWlkLHN0YWNrczpMfSwoZnVuY3Rpb24odCxlKXtmfHwoZj10LGg9ZSxJLmNhbGwobCkpfSkpOmg9e307dmFyIEM9T2JqZWN0LmtleXMoZy5pY29uRGVwZW5kZW5jaWVzKTtDLmxlbmd0aD9hLnNlbmQoImdldEltYWdlcyIse2ljb25zOkMsc291cmNlOnRoaXMuc291cmNlLHRpbGVJRDp0aGlzLnRpbGVJRCx0eXBlOiJpY29ucyJ9LChmdW5jdGlvbih0LGUpe2Z8fChmPXQscD1lLEkuY2FsbChsKSl9KSk6cD17fTt2YXIgUD1PYmplY3Qua2V5cyhnLnBhdHRlcm5EZXBlbmRlbmNpZXMpO2Z1bmN0aW9uIEkoKXtpZihmKXJldHVybiBzKGYpO2lmKGgmJnAmJmQpe3ZhciBlPW5ldyBpKGgpLHI9bmV3IHQuSW1hZ2VBdGxhcyhwLGQpO2Zvcih2YXIgYSBpbiBtKXt2YXIgbD1tW2FdO2wgaW5zdGFuY2VvZiB0LlN5bWJvbEJ1Y2tldD8obyhsLmxheWVycyx0aGlzLnpvb20sbiksdC5wZXJmb3JtU3ltYm9sTGF5b3V0KGwsaCxlLnBvc2l0aW9ucyxwLHIuaWNvblBvc2l0aW9ucyx0aGlzLnNob3dDb2xsaXNpb25Cb3hlcyx0aGlzLnRpbGVJRC5jYW5vbmljYWwpKTpsLmhhc1BhdHRlcm4mJihsIGluc3RhbmNlb2YgdC5MaW5lQnVja2V0fHxsIGluc3RhbmNlb2YgdC5GaWxsQnVja2V0fHxsIGluc3RhbmNlb2YgdC5GaWxsRXh0cnVzaW9uQnVja2V0KSYmKG8obC5sYXllcnMsdGhpcy56b29tLG4pLGwuYWRkRmVhdHVyZXMoZyx0aGlzLnRpbGVJRC5jYW5vbmljYWwsci5wYXR0ZXJuUG9zaXRpb25zKSl9dGhpcy5zdGF0dXM9ImRvbmUiLHMobnVsbCx7YnVja2V0czp0LnZhbHVlcyhtKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmlzRW1wdHkoKX0pKSxmZWF0dXJlSW5kZXg6dSxjb2xsaXNpb25Cb3hBcnJheTp0aGlzLmNvbGxpc2lvbkJveEFycmF5LGdseXBoQXRsYXNJbWFnZTplLmltYWdlLGltYWdlQXRsYXM6cixnbHlwaE1hcDp0aGlzLnJldHVybkRlcGVuZGVuY2llcz9oOm51bGwsaWNvbk1hcDp0aGlzLnJldHVybkRlcGVuZGVuY2llcz9wOm51bGwsZ2x5cGhQb3NpdGlvbnM6dGhpcy5yZXR1cm5EZXBlbmRlbmNpZXM/ZS5wb3NpdGlvbnM6bnVsbH0pfX1QLmxlbmd0aD9hLnNlbmQoImdldEltYWdlcyIse2ljb25zOlAsc291cmNlOnRoaXMuc291cmNlLHRpbGVJRDp0aGlzLnRpbGVJRCx0eXBlOiJwYXR0ZXJucyJ9LChmdW5jdGlvbih0LGUpe2Z8fChmPXQsZD1lLEkuY2FsbChsKSl9KSk6ZD17fSxJLmNhbGwodGhpcyl9O3ZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuYWN0b3I9dCx0aGlzLmxheWVySW5kZXg9ZSx0aGlzLmF2YWlsYWJsZUltYWdlcz1yLHRoaXMubG9hZFZlY3RvckRhdGE9bnx8cyx0aGlzLmxvYWRpbmc9e30sdGhpcy5sb2FkZWQ9e319O2wucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPWUudWlkO3RoaXMubG9hZGluZ3x8KHRoaXMubG9hZGluZz17fSk7dmFyIG89ISEoZSYmZS5yZXF1ZXN0JiZlLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKGUucmVxdWVzdCkscz10aGlzLmxvYWRpbmdbaV09bmV3IGEoZSk7cy5hYm9ydD10aGlzLmxvYWRWZWN0b3JEYXRhKGUsKGZ1bmN0aW9uKGUsYSl7aWYoZGVsZXRlIG4ubG9hZGluZ1tpXSxlfHwhYSlyZXR1cm4gcy5zdGF0dXM9ImRvbmUiLG4ubG9hZGVkW2ldPXMscihlKTt2YXIgbD1hLnJhd0RhdGEsYz17fTthLmV4cGlyZXMmJihjLmV4cGlyZXM9YS5leHBpcmVzKSxhLmNhY2hlQ29udHJvbCYmKGMuY2FjaGVDb250cm9sPWEuY2FjaGVDb250cm9sKTt2YXIgdT17fTtpZihvKXt2YXIgZj1vLmZpbmlzaCgpO2YmJih1LnJlc291cmNlVGltaW5nPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZikpKX1zLnZlY3RvclRpbGU9YS52ZWN0b3JUaWxlLHMucGFyc2UoYS52ZWN0b3JUaWxlLG4ubGF5ZXJJbmRleCxuLmF2YWlsYWJsZUltYWdlcyxuLmFjdG9yLChmdW5jdGlvbihlLG4pe2lmKGV8fCFuKXJldHVybiByKGUpO3IobnVsbCx0LmV4dGVuZCh7cmF3VGlsZURhdGE6bC5zbGljZSgwKX0sbixjLHUpKX0pKSxuLmxvYWRlZD1uLmxvYWRlZHx8e30sbi5sb2FkZWRbaV09c30pKX0sbC5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj10aGlzLmxvYWRlZCxpPXQudWlkLGE9dGhpcztpZihuJiZuW2ldKXt2YXIgbz1uW2ldO28uc2hvd0NvbGxpc2lvbkJveGVzPXQuc2hvd0NvbGxpc2lvbkJveGVzO3ZhciBzPWZ1bmN0aW9uKHQsbil7dmFyIGk9by5yZWxvYWRDYWxsYmFjaztpJiYoZGVsZXRlIG8ucmVsb2FkQ2FsbGJhY2ssby5wYXJzZShvLnZlY3RvclRpbGUsYS5sYXllckluZGV4LHIuYXZhaWxhYmxlSW1hZ2VzLGEuYWN0b3IsaSkpLGUodCxuKX07InBhcnNpbmciPT09by5zdGF0dXM/by5yZWxvYWRDYWxsYmFjaz1zOiJkb25lIj09PW8uc3RhdHVzJiYoby52ZWN0b3JUaWxlP28ucGFyc2Uoby52ZWN0b3JUaWxlLHRoaXMubGF5ZXJJbmRleCx0aGlzLmF2YWlsYWJsZUltYWdlcyx0aGlzLmFjdG9yLHMpOnMoKSl9fSxsLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRpbmcsbj10LnVpZDtyJiZyW25dJiZyW25dLmFib3J0JiYocltuXS5hYm9ydCgpLGRlbGV0ZSByW25dKSxlKCl9LGwucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxvYWRlZCxuPXQudWlkO3ImJnJbbl0mJmRlbGV0ZSByW25dLGUoKX07dmFyIGM9dC53aW5kb3cuSW1hZ2VCaXRtYXAsdT1mdW5jdGlvbigpe3RoaXMubG9hZGVkPXt9fTt1LnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPWUudWlkLGk9ZS5lbmNvZGluZyxhPWUucmF3SW1hZ2VEYXRhLG89YyYmYSBpbnN0YW5jZW9mIGM/dGhpcy5nZXRJbWFnZURhdGEoYSk6YSxzPW5ldyB0LkRFTURhdGEobixvLGkpO3RoaXMubG9hZGVkPXRoaXMubG9hZGVkfHx7fSx0aGlzLmxvYWRlZFtuXT1zLHIobnVsbCxzKX0sdS5wcm90b3R5cGUuZ2V0SW1hZ2VEYXRhPWZ1bmN0aW9uKGUpe3RoaXMub2Zmc2NyZWVuQ2FudmFzJiZ0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHR8fCh0aGlzLm9mZnNjcmVlbkNhbnZhcz1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUud2lkdGgsZS5oZWlnaHQpLHRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dD10aGlzLm9mZnNjcmVlbkNhbnZhcy5nZXRDb250ZXh0KCIyZCIpKSx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aD1lLndpZHRoLHRoaXMub2Zmc2NyZWVuQ2FudmFzLmhlaWdodD1lLmhlaWdodCx0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuZHJhd0ltYWdlKGUsMCwwLGUud2lkdGgsZS5oZWlnaHQpO3ZhciByPXRoaXMub2Zmc2NyZWVuQ2FudmFzQ29udGV4dC5nZXRJbWFnZURhdGEoLTEsLTEsZS53aWR0aCsyLGUuaGVpZ2h0KzIpO3JldHVybiB0aGlzLm9mZnNjcmVlbkNhbnZhc0NvbnRleHQuY2xlYXJSZWN0KDAsMCx0aGlzLm9mZnNjcmVlbkNhbnZhcy53aWR0aCx0aGlzLm9mZnNjcmVlbkNhbnZhcy5oZWlnaHQpLG5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHR9LHIuZGF0YSl9LHUucHJvdG90eXBlLnJlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sb2FkZWQscj10LnVpZDtlJiZlW3JdJiZkZWxldGUgZVtyXX07dmFyIGY9ZnVuY3Rpb24gdChlLHIpe3ZhciBuLGk9ZSYmZS50eXBlO2lmKCJGZWF0dXJlQ29sbGVjdGlvbiI9PT1pKWZvcihuPTA7bjxlLmZlYXR1cmVzLmxlbmd0aDtuKyspdChlLmZlYXR1cmVzW25dLHIpO2Vsc2UgaWYoIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1pKWZvcihuPTA7bjxlLmdlb21ldHJpZXMubGVuZ3RoO24rKyl0KGUuZ2VvbWV0cmllc1tuXSxyKTtlbHNlIGlmKCJGZWF0dXJlIj09PWkpdChlLmdlb21ldHJ5LHIpO2Vsc2UgaWYoIlBvbHlnb24iPT09aSloKGUuY29vcmRpbmF0ZXMscik7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWkpZm9yKG49MDtuPGUuY29vcmRpbmF0ZXMubGVuZ3RoO24rKyloKGUuY29vcmRpbmF0ZXNbbl0scik7cmV0dXJuIGV9O2Z1bmN0aW9uIGgodCxlKXtpZigwIT09dC5sZW5ndGgpe3AodFswXSxlKTtmb3IodmFyIHI9MTtyPHQubGVuZ3RoO3IrKylwKHRbcl0sIWUpfX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPTAsbj0wLGk9dC5sZW5ndGgsYT1pLTE7bjxpO2E9bisrKXIrPSh0W25dWzBdLXRbYV1bMF0pKih0W2FdWzFdK3Rbbl1bMV0pO3I+PTAhPSEhZSYmdC5yZXZlcnNlKCl9dmFyIGQ9dC52ZWN0b3JUaWxlLlZlY3RvclRpbGVGZWF0dXJlLnByb3RvdHlwZS50b0dlb0pTT04sbT1mdW5jdGlvbihlKXt0aGlzLl9mZWF0dXJlPWUsdGhpcy5leHRlbnQ9dC5FWFRFTlQsdGhpcy50eXBlPWUudHlwZSx0aGlzLnByb3BlcnRpZXM9ZS50YWdzLCJpZCJpbiBlJiYhaXNOYU4oZS5pZCkmJih0aGlzLmlkPXBhcnNlSW50KGUuaWQsMTApKX07bS5wcm90b3R5cGUubG9hZEdlb21ldHJ5PWZ1bmN0aW9uKCl7aWYoMT09PXRoaXMuX2ZlYXR1cmUudHlwZSl7Zm9yKHZhciBlPVtdLHI9MCxuPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2UucHVzaChbbmV3IHQuUG9pbnQkMShpWzBdLGlbMV0pXSl9cmV0dXJuIGV9Zm9yKHZhciBhPVtdLG89MCxzPXRoaXMuX2ZlYXR1cmUuZ2VvbWV0cnk7bzxzLmxlbmd0aDtvKz0xKXtmb3IodmFyIGw9W10sYz0wLHU9c1tvXTtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY107bC5wdXNoKG5ldyB0LlBvaW50JDEoZlswXSxmWzFdKSl9YS5wdXNoKGwpfXJldHVybiBhfSxtLnByb3RvdHlwZS50b0dlb0pTT049ZnVuY3Rpb24odCxlLHIpe3JldHVybiBkLmNhbGwodGhpcyx0LGUscil9O3ZhciBnPWZ1bmN0aW9uKGUpe3RoaXMubGF5ZXJzPXtfZ2VvanNvblRpbGVMYXllcjp0aGlzfSx0aGlzLm5hbWU9Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLmV4dGVudD10LkVYVEVOVCx0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLl9mZWF0dXJlcz1lfTtnLnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0aGlzLl9mZWF0dXJlc1t0XSl9O3ZhciB2PXQudmVjdG9yVGlsZS5WZWN0b3JUaWxlRmVhdHVyZSx5PXg7ZnVuY3Rpb24geCh0LGUpe3RoaXMub3B0aW9ucz1lfHx7fSx0aGlzLmZlYXR1cmVzPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9ZnVuY3Rpb24gYih0LGUpe3RoaXMuaWQ9Im51bWJlciI9PXR5cGVvZiB0LmlkP3QuaWQ6dm9pZCAwLHRoaXMudHlwZT10LnR5cGUsdGhpcy5yYXdHZW9tZXRyeT0xPT09dC50eXBlP1t0Lmdlb21ldHJ5XTp0Lmdlb21ldHJ5LHRoaXMucHJvcGVydGllcz10LnRhZ3MsdGhpcy5leHRlbnQ9ZXx8NDA5Nn14LnByb3RvdHlwZS5mZWF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgYih0aGlzLmZlYXR1cmVzW3RdLHRoaXMub3B0aW9ucy5leHRlbnQpfSxiLnByb3RvdHlwZS5sb2FkR2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJhd0dlb21ldHJ5O3RoaXMuZ2VvbWV0cnk9W107Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe2Zvcih2YXIgbj1lW3JdLGk9W10sYT0wO2E8bi5sZW5ndGg7YSsrKWkucHVzaChuZXcgdC5Qb2ludCQxKG5bYV1bMF0sblthXVsxXSkpO3RoaXMuZ2VvbWV0cnkucHVzaChpKX1yZXR1cm4gdGhpcy5nZW9tZXRyeX0sYi5wcm90b3R5cGUuYmJveD1mdW5jdGlvbigpe3RoaXMuZ2VvbWV0cnl8fHRoaXMubG9hZEdlb21ldHJ5KCk7Zm9yKHZhciB0PXRoaXMuZ2VvbWV0cnksZT0xLzAscj0tMS8wLG49MS8wLGk9LTEvMCxhPTA7YTx0Lmxlbmd0aDthKyspZm9yKHZhciBvPXRbYV0scz0wO3M8by5sZW5ndGg7cysrKXt2YXIgbD1vW3NdO2U9TWF0aC5taW4oZSxsLngpLHI9TWF0aC5tYXgocixsLngpLG49TWF0aC5taW4obixsLnkpLGk9TWF0aC5tYXgoaSxsLnkpfXJldHVybltlLG4scixpXX0sYi5wcm90b3R5cGUudG9HZW9KU09OPXYucHJvdG90eXBlLnRvR2VvSlNPTjt2YXIgXz1BLHc9QSxUPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClyW25dPW5ldyB5KHRbbl0uZmVhdHVyZXMsZSkscltuXS5uYW1lPW4scltuXS52ZXJzaW9uPWUudmVyc2lvbixyW25dLmV4dGVudD1lLmV4dGVudDtyZXR1cm4gQSh7bGF5ZXJzOnJ9KX0saz15O2Z1bmN0aW9uIEEoZSl7dmFyIHI9bmV3IHQucGJmO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiB0LmxheWVycyllLndyaXRlTWVzc2FnZSgzLE0sdC5sYXllcnNbcl0pfShlLHIpLHIuZmluaXNoKCl9ZnVuY3Rpb24gTSh0LGUpe3ZhciByO2Uud3JpdGVWYXJpbnRGaWVsZCgxNSx0LnZlcnNpb258fDEpLGUud3JpdGVTdHJpbmdGaWVsZCgxLHQubmFtZXx8IiIpLGUud3JpdGVWYXJpbnRGaWVsZCg1LHQuZXh0ZW50fHw0MDk2KTt2YXIgbj17a2V5czpbXSx2YWx1ZXM6W10sa2V5Y2FjaGU6e30sdmFsdWVjYWNoZTp7fX07Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyluLmZlYXR1cmU9dC5mZWF0dXJlKHIpLGUud3JpdGVNZXNzYWdlKDIsUyxuKTt2YXIgaT1uLmtleXM7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyllLndyaXRlU3RyaW5nRmllbGQoMyxpW3JdKTt2YXIgYT1uLnZhbHVlcztmb3Iocj0wO3I8YS5sZW5ndGg7cisrKWUud3JpdGVNZXNzYWdlKDQsSSxhW3JdKX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9dC5mZWF0dXJlO3ZvaWQgMCE9PXIuaWQmJmUud3JpdGVWYXJpbnRGaWVsZCgxLHIuaWQpLGUud3JpdGVNZXNzYWdlKDIsRSx0KSxlLndyaXRlVmFyaW50RmllbGQoMyxyLnR5cGUpLGUud3JpdGVNZXNzYWdlKDQsUCxyKX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9dC5mZWF0dXJlLG49dC5rZXlzLGk9dC52YWx1ZXMsYT10LmtleWNhY2hlLG89dC52YWx1ZWNhY2hlO2Zvcih2YXIgcyBpbiByLnByb3BlcnRpZXMpe3ZhciBsPWFbc107dm9pZCAwPT09bCYmKG4ucHVzaChzKSxsPW4ubGVuZ3RoLTEsYVtzXT1sKSxlLndyaXRlVmFyaW50KGwpO3ZhciBjPXIucHJvcGVydGllc1tzXSx1PXR5cGVvZiBjOyJzdHJpbmciIT09dSYmImJvb2xlYW4iIT09dSYmIm51bWJlciIhPT11JiYoYz1KU09OLnN0cmluZ2lmeShjKSk7dmFyIGY9dSsiOiIrYyxoPW9bZl07dm9pZCAwPT09aCYmKGkucHVzaChjKSxoPWkubGVuZ3RoLTEsb1tmXT1oKSxlLndyaXRlVmFyaW50KGgpfX1mdW5jdGlvbiBMKHQsZSl7cmV0dXJuKGU8PDMpKyg3JnQpfWZ1bmN0aW9uIEModCl7cmV0dXJuIHQ8PDFedD4+MzF9ZnVuY3Rpb24gUCh0LGUpe2Zvcih2YXIgcj10LmxvYWRHZW9tZXRyeSgpLG49dC50eXBlLGk9MCxhPTAsbz1yLmxlbmd0aCxzPTA7czxvO3MrKyl7dmFyIGw9cltzXSxjPTE7MT09PW4mJihjPWwubGVuZ3RoKSxlLndyaXRlVmFyaW50KEwoMSxjKSk7Zm9yKHZhciB1PTM9PT1uP2wubGVuZ3RoLTE6bC5sZW5ndGgsZj0wO2Y8dTtmKyspezE9PT1mJiYxIT09biYmZS53cml0ZVZhcmludChMKDIsdS0xKSk7dmFyIGg9bFtmXS54LWkscD1sW2ZdLnktYTtlLndyaXRlVmFyaW50KEMoaCkpLGUud3JpdGVWYXJpbnQoQyhwKSksaSs9aCxhKz1wfTM9PT1uJiZlLndyaXRlVmFyaW50KEwoNywxKSl9fWZ1bmN0aW9uIEkodCxlKXt2YXIgcj10eXBlb2YgdDsic3RyaW5nIj09PXI/ZS53cml0ZVN0cmluZ0ZpZWxkKDEsdCk6ImJvb2xlYW4iPT09cj9lLndyaXRlQm9vbGVhbkZpZWxkKDcsdCk6Im51bWJlciI9PT1yJiYodCUxIT0wP2Uud3JpdGVEb3VibGVGaWVsZCgzLHQpOnQ8MD9lLndyaXRlU1ZhcmludEZpZWxkKDYsdCk6ZS53cml0ZVZhcmludEZpZWxkKDUsdCkpfWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe2lmKCEoaS1uPD1yKSl7dmFyIG89bitpPj4xOyFmdW5jdGlvbiB0KGUscixuLGksYSxvKXtmb3IoO2E+aTspe2lmKGEtaT42MDApe3ZhciBzPWEtaSsxLGw9bi1pKzEsYz1NYXRoLmxvZyhzKSx1PS41Kk1hdGguZXhwKDIqYy8zKSxmPS41Kk1hdGguc3FydChjKnUqKHMtdSkvcykqKGwtcy8yPDA/LTE6MSksaD1NYXRoLm1heChpLE1hdGguZmxvb3Iobi1sKnUvcytmKSkscD1NYXRoLm1pbihhLE1hdGguZmxvb3Iobisocy1sKSp1L3MrZikpO3QoZSxyLG4saCxwLG8pfXZhciBkPXJbMipuK29dLG09aSxnPWE7Zm9yKHooZSxyLGksbiksclsyKmErb10+ZCYmeihlLHIsaSxhKTttPGc7KXtmb3IoeihlLHIsbSxnKSxtKyssZy0tO3JbMiptK29dPGQ7KW0rKztmb3IoO3JbMipnK29dPmQ7KWctLX1yWzIqaStvXT09PWQ/eihlLHIsaSxnKTooZysrLHooZSxyLGcsYSkpLGc8PW4mJihpPWcrMSksbjw9ZyYmKGE9Zy0xKX19KHQsZSxvLG4saSxhJTIpLE8odCxlLHIsbixvLTEsYSsxKSxPKHQsZSxyLG8rMSxpLGErMSl9fWZ1bmN0aW9uIHoodCxlLHIsbil7RCh0LHIsbiksRChlLDIqciwyKm4pLEQoZSwyKnIrMSwyKm4rMSl9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIFIodCxlLHIsbil7dmFyIGk9dC1yLGE9ZS1uO3JldHVybiBpKmkrYSphfV8uZnJvbVZlY3RvclRpbGVKcz13LF8uZnJvbUdlb2pzb25WdD1ULF8uR2VvSlNPTldyYXBwZXI9azt2YXIgRj1mdW5jdGlvbih0KXtyZXR1cm4gdFswXX0sQj1mdW5jdGlvbih0KXtyZXR1cm4gdFsxXX0sTj1mdW5jdGlvbih0LGUscixuLGkpe3ZvaWQgMD09PWUmJihlPUYpLHZvaWQgMD09PXImJihyPUIpLHZvaWQgMD09PW4mJihuPTY0KSx2b2lkIDA9PT1pJiYoaT1GbG9hdDY0QXJyYXkpLHRoaXMubm9kZVNpemU9bix0aGlzLnBvaW50cz10O2Zvcih2YXIgYT10Lmxlbmd0aDw2NTUzNj9VaW50MTZBcnJheTpVaW50MzJBcnJheSxvPXRoaXMuaWRzPW5ldyBhKHQubGVuZ3RoKSxzPXRoaXMuY29vcmRzPW5ldyBpKDIqdC5sZW5ndGgpLGw9MDtsPHQubGVuZ3RoO2wrKylvW2xdPWwsc1syKmxdPWUodFtsXSksc1syKmwrMV09cih0W2xdKTtPKG8scyxuLDAsby5sZW5ndGgtMSwwKX07Ti5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcyxsLGM9WzAsdC5sZW5ndGgtMSwwXSx1PVtdO2MubGVuZ3RoOyl7dmFyIGY9Yy5wb3AoKSxoPWMucG9wKCkscD1jLnBvcCgpO2lmKGgtcDw9bylmb3IodmFyIGQ9cDtkPD1oO2QrKylzPWVbMipkXSxsPWVbMipkKzFdLHM+PXImJnM8PWkmJmw+PW4mJmw8PWEmJnUucHVzaCh0W2RdKTtlbHNle3ZhciBtPU1hdGguZmxvb3IoKHAraCkvMik7cz1lWzIqbV0sbD1lWzIqbSsxXSxzPj1yJiZzPD1pJiZsPj1uJiZsPD1hJiZ1LnB1c2godFttXSk7dmFyIGc9KGYrMSklMjsoMD09PWY/cjw9czpuPD1sKSYmKGMucHVzaChwKSxjLnB1c2gobS0xKSxjLnB1c2goZykpLCgwPT09Zj9pPj1zOmE+PWwpJiYoYy5wdXNoKG0rMSksYy5wdXNoKGgpLGMucHVzaChnKSl9fXJldHVybiB1fSh0aGlzLmlkcyx0aGlzLmNvb3Jkcyx0LGUscixuLHRoaXMubm9kZVNpemUpfSxOLnByb3RvdHlwZS53aXRoaW49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSl7Zm9yKHZhciBvPVswLHQubGVuZ3RoLTEsMF0scz1bXSxsPWkqaTtvLmxlbmd0aDspe3ZhciBjPW8ucG9wKCksdT1vLnBvcCgpLGY9by5wb3AoKTtpZih1LWY8PWEpZm9yKHZhciBoPWY7aDw9dTtoKyspUihlWzIqaF0sZVsyKmgrMV0scixuKTw9bCYmcy5wdXNoKHRbaF0pO2Vsc2V7dmFyIHA9TWF0aC5mbG9vcigoZit1KS8yKSxkPWVbMipwXSxtPWVbMipwKzFdO1IoZCxtLHIsbik8PWwmJnMucHVzaCh0W3BdKTt2YXIgZz0oYysxKSUyOygwPT09Yz9yLWk8PWQ6bi1pPD1tKSYmKG8ucHVzaChmKSxvLnB1c2gocC0xKSxvLnB1c2goZykpLCgwPT09Yz9yK2k+PWQ6bitpPj1tKSYmKG8ucHVzaChwKzEpLG8ucHVzaCh1KSxvLnB1c2goZykpfX1yZXR1cm4gc30odGhpcy5pZHMsdGhpcy5jb29yZHMsdCxlLHIsdGhpcy5ub2RlU2l6ZSl9O3ZhciBqPXttaW5ab29tOjAsbWF4Wm9vbToxNixyYWRpdXM6NDAsZXh0ZW50OjUxMixub2RlU2l6ZTo2NCxsb2c6ITEsZ2VuZXJhdGVJZDohMSxyZWR1Y2U6bnVsbCxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxVPWZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucz1YKE9iamVjdC5jcmVhdGUoaiksdCksdGhpcy50cmVlcz1uZXcgQXJyYXkodGhpcy5vcHRpb25zLm1heFpvb20rMSl9O2Z1bmN0aW9uIFYodCxlLHIsbixpKXtyZXR1cm57eDp0LHk6ZSx6b29tOjEvMCxpZDpyLHBhcmVudElkOi0xLG51bVBvaW50czpuLHByb3BlcnRpZXM6aX19ZnVuY3Rpb24gSCh0LGUpe3ZhciByPXQuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsbj1yWzBdLGk9clsxXTtyZXR1cm57eDpZKG4pLHk6VyhpKSx6b29tOjEvMCxpbmRleDplLHBhcmVudElkOi0xfX1mdW5jdGlvbiBxKHQpe3JldHVybnt0eXBlOiJGZWF0dXJlIixpZDp0LmlkLHByb3BlcnRpZXM6Ryh0KSxnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOlsobj10LngsMzYwKihuLS41KSksKGU9dC55LHI9KDE4MC0zNjAqZSkqTWF0aC5QSS8xODAsMzYwKk1hdGguYXRhbihNYXRoLmV4cChyKSkvTWF0aC5QSS05MCldfX07dmFyIGUscixufWZ1bmN0aW9uIEcodCl7dmFyIGU9dC5udW1Qb2ludHMscj1lPj0xZTQ/TWF0aC5yb3VuZChlLzFlMykrImsiOmU+PTFlMz9NYXRoLnJvdW5kKGUvMTAwKS8xMCsiayI6ZTtyZXR1cm4gWChYKHt9LHQucHJvcGVydGllcykse2NsdXN0ZXI6ITAsY2x1c3Rlcl9pZDp0LmlkLHBvaW50X2NvdW50OmUscG9pbnRfY291bnRfYWJicmV2aWF0ZWQ6cn0pfWZ1bmN0aW9uIFkodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIFcodCl7dmFyIGU9TWF0aC5zaW4odCpNYXRoLlBJLzE4MCkscj0uNS0uMjUqTWF0aC5sb2coKDErZSkvKDEtZSkpL01hdGguUEk7cmV0dXJuIHI8MD8wOnI+MT8xOnJ9ZnVuY3Rpb24gWCh0LGUpe2Zvcih2YXIgciBpbiBlKXRbcl09ZVtyXTtyZXR1cm4gdH1mdW5jdGlvbiBaKHQpe3JldHVybiB0Lnh9ZnVuY3Rpb24gSih0KXtyZXR1cm4gdC55fWZ1bmN0aW9uIEsodCxlLHIsbixpLGEpe3ZhciBvPWktcixzPWEtbjtpZigwIT09b3x8MCE9PXMpe3ZhciBsPSgodC1yKSpvKyhlLW4pKnMpLyhvKm8rcypzKTtsPjE/KHI9aSxuPWEpOmw+MCYmKHIrPW8qbCxuKz1zKmwpfXJldHVybihvPXQtcikqbysocz1lLW4pKnN9ZnVuY3Rpb24gUSh0LGUscixuKXt2YXIgaT17aWQ6dm9pZCAwPT09dD9udWxsOnQsdHlwZTplLGdlb21ldHJ5OnIsdGFnczpuLG1pblg6MS8wLG1pblk6MS8wLG1heFg6LTEvMCxtYXhZOi0xLzB9O3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT10Lmdlb21ldHJ5LHI9dC50eXBlO2lmKCJQb2ludCI9PT1yfHwiTXVsdGlQb2ludCI9PT1yfHwiTGluZVN0cmluZyI9PT1yKSQodCxlKTtlbHNlIGlmKCJQb2x5Z29uIj09PXJ8fCJNdWx0aUxpbmVTdHJpbmciPT09cilmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKykkKHQsZVtuXSk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PXIpZm9yKG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKykkKHQsZVtuXVtpXSl9KGkpLGl9ZnVuY3Rpb24gJCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Myl0Lm1pblg9TWF0aC5taW4odC5taW5YLGVbcl0pLHQubWluWT1NYXRoLm1pbih0Lm1pblksZVtyKzFdKSx0Lm1heFg9TWF0aC5tYXgodC5tYXhYLGVbcl0pLHQubWF4WT1NYXRoLm1heCh0Lm1heFksZVtyKzFdKX1mdW5jdGlvbiB0dCh0LGUscixuKXtpZihlLmdlb21ldHJ5KXt2YXIgaT1lLmdlb21ldHJ5LmNvb3JkaW5hdGVzLGE9ZS5nZW9tZXRyeS50eXBlLG89TWF0aC5wb3coci50b2xlcmFuY2UvKCgxPDxyLm1heFpvb20pKnIuZXh0ZW50KSwyKSxzPVtdLGw9ZS5pZDtpZihyLnByb21vdGVJZD9sPWUucHJvcGVydGllc1tyLnByb21vdGVJZF06ci5nZW5lcmF0ZUlkJiYobD1ufHwwKSwiUG9pbnQiPT09YSlldChpLHMpO2Vsc2UgaWYoIk11bHRpUG9pbnQiPT09YSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylldChpW2NdLHMpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09YSlydChpLHMsbywhMSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWEpe2lmKHIubGluZU1ldHJpY3Mpe2ZvcihjPTA7YzxpLmxlbmd0aDtjKyspcz1bXSxydChpW2NdLHMsbywhMSksdC5wdXNoKFEobCwiTGluZVN0cmluZyIscyxlLnByb3BlcnRpZXMpKTtyZXR1cm59bnQoaSxzLG8sITEpfWVsc2UgaWYoIlBvbHlnb24iPT09YSludChpLHMsbywhMCk7ZWxzZXtpZigiTXVsdGlQb2x5Z29uIiE9PWEpe2lmKCJHZW9tZXRyeUNvbGxlY3Rpb24iPT09YSl7Zm9yKGM9MDtjPGUuZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7YysrKXR0KHQse2lkOmwsZ2VvbWV0cnk6ZS5nZW9tZXRyeS5nZW9tZXRyaWVzW2NdLHByb3BlcnRpZXM6ZS5wcm9wZXJ0aWVzfSxyLG4pO3JldHVybn10aHJvdyBuZXcgRXJyb3IoIklucHV0IGRhdGEgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIil9Zm9yKGM9MDtjPGkubGVuZ3RoO2MrKyl7dmFyIHU9W107bnQoaVtjXSx1LG8sITApLHMucHVzaCh1KX19dC5wdXNoKFEobCxhLHMsZS5wcm9wZXJ0aWVzKSl9fWZ1bmN0aW9uIGV0KHQsZSl7ZS5wdXNoKGl0KHRbMF0pKSxlLnB1c2goYXQodFsxXSkpLGUucHVzaCgwKX1mdW5jdGlvbiBydCh0LGUscixuKXtmb3IodmFyIGksYSxvPTAscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1pdCh0W3NdWzBdKSxjPWF0KHRbc11bMV0pO2UucHVzaChsKSxlLnB1c2goYyksZS5wdXNoKDApLHM+MCYmKG8rPW4/KGkqYy1sKmEpLzI6TWF0aC5zcXJ0KE1hdGgucG93KGwtaSwyKStNYXRoLnBvdyhjLWEsMikpKSxpPWwsYT1jfXZhciB1PWUubGVuZ3RoLTM7ZVsyXT0xLGZ1bmN0aW9uIHQoZSxyLG4saSl7Zm9yKHZhciBhLG89aSxzPW4tcj4+MSxsPW4tcixjPWVbcl0sdT1lW3IrMV0sZj1lW25dLGg9ZVtuKzFdLHA9ciszO3A8bjtwKz0zKXt2YXIgZD1LKGVbcF0sZVtwKzFdLGMsdSxmLGgpO2lmKGQ+bylhPXAsbz1kO2Vsc2UgaWYoZD09PW8pe3ZhciBtPU1hdGguYWJzKHAtcyk7bTxsJiYoYT1wLGw9bSl9fW8+aSYmKGEtcj4zJiZ0KGUscixhLGkpLGVbYSsyXT1vLG4tYT4zJiZ0KGUsYSxuLGkpKX0oZSwwLHUsciksZVt1KzJdPTEsZS5zaXplPU1hdGguYWJzKG8pLGUuc3RhcnQ9MCxlLmVuZD1lLnNpemV9ZnVuY3Rpb24gbnQodCxlLHIsbil7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPVtdO3J0KHRbaV0sYSxyLG4pLGUucHVzaChhKX19ZnVuY3Rpb24gaXQodCl7cmV0dXJuIHQvMzYwKy41fWZ1bmN0aW9uIGF0KHQpe3ZhciBlPU1hdGguc2luKHQqTWF0aC5QSS8xODApLHI9LjUtLjI1Kk1hdGgubG9nKCgxK2UpLygxLWUpKS9NYXRoLlBJO3JldHVybiByPDA/MDpyPjE/MTpyfWZ1bmN0aW9uIG90KHQsZSxyLG4saSxhLG8scyl7aWYobi89ZSxhPj0oci89ZSkmJm88bilyZXR1cm4gdDtpZihvPHJ8fGE+PW4pcmV0dXJuIG51bGw7Zm9yKHZhciBsPVtdLGM9MDtjPHQubGVuZ3RoO2MrKyl7dmFyIHU9dFtjXSxmPXUuZ2VvbWV0cnksaD11LnR5cGUscD0wPT09aT91Lm1pblg6dS5taW5ZLGQ9MD09PWk/dS5tYXhYOnUubWF4WTtpZihwPj1yJiZkPG4pbC5wdXNoKHUpO2Vsc2UgaWYoIShkPHJ8fHA+PW4pKXt2YXIgbT1bXTtpZigiUG9pbnQiPT09aHx8Ik11bHRpUG9pbnQiPT09aClzdChmLG0scixuLGkpO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09aClsdChmLG0scixuLGksITEscy5saW5lTWV0cmljcyk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PWgpdXQoZixtLHIsbixpLCExKTtlbHNlIGlmKCJQb2x5Z29uIj09PWgpdXQoZixtLHIsbixpLCEwKTtlbHNlIGlmKCJNdWx0aVBvbHlnb24iPT09aClmb3IodmFyIGc9MDtnPGYubGVuZ3RoO2crKyl7dmFyIHY9W107dXQoZltnXSx2LHIsbixpLCEwKSx2Lmxlbmd0aCYmbS5wdXNoKHYpfWlmKG0ubGVuZ3RoKXtpZihzLmxpbmVNZXRyaWNzJiYiTGluZVN0cmluZyI9PT1oKXtmb3IoZz0wO2c8bS5sZW5ndGg7ZysrKWwucHVzaChRKHUuaWQsaCxtW2ddLHUudGFncykpO2NvbnRpbnVlfSJMaW5lU3RyaW5nIiE9PWgmJiJNdWx0aUxpbmVTdHJpbmciIT09aHx8KDE9PT1tLmxlbmd0aD8oaD0iTGluZVN0cmluZyIsbT1tWzBdKTpoPSJNdWx0aUxpbmVTdHJpbmciKSwiUG9pbnQiIT09aCYmIk11bHRpUG9pbnQiIT09aHx8KGg9Mz09PW0ubGVuZ3RoPyJQb2ludCI6Ik11bHRpUG9pbnQiKSxsLnB1c2goUSh1LmlkLGgsbSx1LnRhZ3MpKX19fXJldHVybiBsLmxlbmd0aD9sOm51bGx9ZnVuY3Rpb24gc3QodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErPTMpe3ZhciBvPXRbYStpXTtvPj1yJiZvPD1uJiYoZS5wdXNoKHRbYV0pLGUucHVzaCh0W2ErMV0pLGUucHVzaCh0W2ErMl0pKX19ZnVuY3Rpb24gbHQodCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzLGwsYz1jdCh0KSx1PTA9PT1pP2h0OnB0LGY9dC5zdGFydCxoPTA7aDx0Lmxlbmd0aC0zO2grPTMpe3ZhciBwPXRbaF0sZD10W2grMV0sbT10W2grMl0sZz10W2grM10sdj10W2grNF0seT0wPT09aT9wOmQseD0wPT09aT9nOnYsYj0hMTtvJiYocz1NYXRoLnNxcnQoTWF0aC5wb3cocC1nLDIpK01hdGgucG93KGQtdiwyKSkpLHk8cj94PnImJihsPXUoYyxwLGQsZyx2LHIpLG8mJihjLnN0YXJ0PWYrcypsKSk6eT5uP3g8biYmKGw9dShjLHAsZCxnLHYsbiksbyYmKGMuc3RhcnQ9ZitzKmwpKTpmdChjLHAsZCxtKSx4PHImJnk+PXImJihsPXUoYyxwLGQsZyx2LHIpLGI9ITApLHg+biYmeTw9biYmKGw9dShjLHAsZCxnLHYsbiksYj0hMCksIWEmJmImJihvJiYoYy5lbmQ9ZitzKmwpLGUucHVzaChjKSxjPWN0KHQpKSxvJiYoZis9cyl9dmFyIF89dC5sZW5ndGgtMztwPXRbX10sZD10W18rMV0sbT10W18rMl0sKHk9MD09PWk/cDpkKT49ciYmeTw9biYmZnQoYyxwLGQsbSksXz1jLmxlbmd0aC0zLGEmJl8+PTMmJihjW19dIT09Y1swXXx8Y1tfKzFdIT09Y1sxXSkmJmZ0KGMsY1swXSxjWzFdLGNbMl0pLGMubGVuZ3RoJiZlLnB1c2goYyl9ZnVuY3Rpb24gY3QodCl7dmFyIGU9W107cmV0dXJuIGUuc2l6ZT10LnNpemUsZS5zdGFydD10LnN0YXJ0LGUuZW5kPXQuZW5kLGV9ZnVuY3Rpb24gdXQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKWx0KHRbb10sZSxyLG4saSxhLCExKX1mdW5jdGlvbiBmdCh0LGUscixuKXt0LnB1c2goZSksdC5wdXNoKHIpLHQucHVzaChuKX1mdW5jdGlvbiBodCh0LGUscixuLGksYSl7dmFyIG89KGEtZSkvKG4tZSk7cmV0dXJuIHQucHVzaChhKSx0LnB1c2gocisoaS1yKSpvKSx0LnB1c2goMSksb31mdW5jdGlvbiBwdCh0LGUscixuLGksYSl7dmFyIG89KGEtcikvKGktcik7cmV0dXJuIHQucHVzaChlKyhuLWUpKm8pLHQucHVzaChhKSx0LnB1c2goMSksb31mdW5jdGlvbiBkdCh0LGUpe2Zvcih2YXIgcj1bXSxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpLGE9dFtuXSxvPWEudHlwZTtpZigiUG9pbnQiPT09b3x8Ik11bHRpUG9pbnQiPT09b3x8IkxpbmVTdHJpbmciPT09bylpPW10KGEuZ2VvbWV0cnksZSk7ZWxzZSBpZigiTXVsdGlMaW5lU3RyaW5nIj09PW98fCJQb2x5Z29uIj09PW8pe2k9W107Zm9yKHZhciBzPTA7czxhLmdlb21ldHJ5Lmxlbmd0aDtzKyspaS5wdXNoKG10KGEuZ2VvbWV0cnlbc10sZSkpfWVsc2UgaWYoIk11bHRpUG9seWdvbiI9PT1vKWZvcihpPVtdLHM9MDtzPGEuZ2VvbWV0cnkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPVtdLGM9MDtjPGEuZ2VvbWV0cnlbc10ubGVuZ3RoO2MrKylsLnB1c2gobXQoYS5nZW9tZXRyeVtzXVtjXSxlKSk7aS5wdXNoKGwpfXIucHVzaChRKGEuaWQsbyxpLGEudGFncykpfXJldHVybiByfWZ1bmN0aW9uIG10KHQsZSl7dmFyIHI9W107ci5zaXplPXQuc2l6ZSx2b2lkIDAhPT10LnN0YXJ0JiYoci5zdGFydD10LnN0YXJ0LHIuZW5kPXQuZW5kKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTMpci5wdXNoKHRbbl0rZSx0W24rMV0sdFtuKzJdKTtyZXR1cm4gcn1mdW5jdGlvbiBndCh0LGUpe2lmKHQudHJhbnNmb3JtZWQpcmV0dXJuIHQ7dmFyIHIsbixpLGE9MTw8dC56LG89dC54LHM9dC55O2ZvcihyPTA7cjx0LmZlYXR1cmVzLmxlbmd0aDtyKyspe3ZhciBsPXQuZmVhdHVyZXNbcl0sYz1sLmdlb21ldHJ5LHU9bC50eXBlO2lmKGwuZ2VvbWV0cnk9W10sMT09PXUpZm9yKG49MDtuPGMubGVuZ3RoO24rPTIpbC5nZW9tZXRyeS5wdXNoKHZ0KGNbbl0sY1tuKzFdLGUsYSxvLHMpKTtlbHNlIGZvcihuPTA7bjxjLmxlbmd0aDtuKyspe3ZhciBmPVtdO2ZvcihpPTA7aTxjW25dLmxlbmd0aDtpKz0yKWYucHVzaCh2dChjW25dW2ldLGNbbl1baSsxXSxlLGEsbyxzKSk7bC5nZW9tZXRyeS5wdXNoKGYpfX1yZXR1cm4gdC50cmFuc2Zvcm1lZD0hMCx0fWZ1bmN0aW9uIHZ0KHQsZSxyLG4saSxhKXtyZXR1cm5bTWF0aC5yb3VuZChyKih0Km4taSkpLE1hdGgucm91bmQociooZSpuLWEpKV19ZnVuY3Rpb24geXQodCxlLHIsbixpKXtmb3IodmFyIGE9ZT09PWkubWF4Wm9vbT8wOmkudG9sZXJhbmNlLygoMTw8ZSkqaS5leHRlbnQpLG89e2ZlYXR1cmVzOltdLG51bVBvaW50czowLG51bVNpbXBsaWZpZWQ6MCxudW1GZWF0dXJlczowLHNvdXJjZTpudWxsLHg6cix5Om4sejplLHRyYW5zZm9ybWVkOiExLG1pblg6MixtaW5ZOjEsbWF4WDotMSxtYXhZOjB9LHM9MDtzPHQubGVuZ3RoO3MrKyl7by5udW1GZWF0dXJlcysrLHh0KG8sdFtzXSxhLGkpO3ZhciBsPXRbc10ubWluWCxjPXRbc10ubWluWSx1PXRbc10ubWF4WCxmPXRbc10ubWF4WTtsPG8ubWluWCYmKG8ubWluWD1sKSxjPG8ubWluWSYmKG8ubWluWT1jKSx1Pm8ubWF4WCYmKG8ubWF4WD11KSxmPm8ubWF4WSYmKG8ubWF4WT1mKX1yZXR1cm4gb31mdW5jdGlvbiB4dCh0LGUscixuKXt2YXIgaT1lLmdlb21ldHJ5LGE9ZS50eXBlLG89W107aWYoIlBvaW50Ij09PWF8fCJNdWx0aVBvaW50Ij09PWEpZm9yKHZhciBzPTA7czxpLmxlbmd0aDtzKz0zKW8ucHVzaChpW3NdKSxvLnB1c2goaVtzKzFdKSx0Lm51bVBvaW50cysrLHQubnVtU2ltcGxpZmllZCsrO2Vsc2UgaWYoIkxpbmVTdHJpbmciPT09YSlidChvLGksdCxyLCExLCExKTtlbHNlIGlmKCJNdWx0aUxpbmVTdHJpbmciPT09YXx8IlBvbHlnb24iPT09YSlmb3Iocz0wO3M8aS5sZW5ndGg7cysrKWJ0KG8saVtzXSx0LHIsIlBvbHlnb24iPT09YSwwPT09cyk7ZWxzZSBpZigiTXVsdGlQb2x5Z29uIj09PWEpZm9yKHZhciBsPTA7bDxpLmxlbmd0aDtsKyspe3ZhciBjPWlbbF07Zm9yKHM9MDtzPGMubGVuZ3RoO3MrKylidChvLGNbc10sdCxyLCEwLDA9PT1zKX1pZihvLmxlbmd0aCl7dmFyIHU9ZS50YWdzfHxudWxsO2lmKCJMaW5lU3RyaW5nIj09PWEmJm4ubGluZU1ldHJpY3Mpe2Zvcih2YXIgZiBpbiB1PXt9LGUudGFncyl1W2ZdPWUudGFnc1tmXTt1Lm1hcGJveF9jbGlwX3N0YXJ0PWkuc3RhcnQvaS5zaXplLHUubWFwYm94X2NsaXBfZW5kPWkuZW5kL2kuc2l6ZX12YXIgaD17Z2VvbWV0cnk6byx0eXBlOiJQb2x5Z29uIj09PWF8fCJNdWx0aVBvbHlnb24iPT09YT8zOiJMaW5lU3RyaW5nIj09PWF8fCJNdWx0aUxpbmVTdHJpbmciPT09YT8yOjEsdGFnczp1fTtudWxsIT09ZS5pZCYmKGguaWQ9ZS5pZCksdC5mZWF0dXJlcy5wdXNoKGgpfX1mdW5jdGlvbiBidCh0LGUscixuLGksYSl7dmFyIG89bipuO2lmKG4+MCYmZS5zaXplPChpP286bikpci5udW1Qb2ludHMrPWUubGVuZ3RoLzM7ZWxzZXtmb3IodmFyIHM9W10sbD0wO2w8ZS5sZW5ndGg7bCs9MykoMD09PW58fGVbbCsyXT5vKSYmKHIubnVtU2ltcGxpZmllZCsrLHMucHVzaChlW2xdKSxzLnB1c2goZVtsKzFdKSksci5udW1Qb2ludHMrKztpJiZmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoLGE9aS0yO248aTthPW4sbis9MilyKz0odFtuXS10W2FdKSoodFtuKzFdK3RbYSsxXSk7aWYocj4wPT09ZSlmb3Iobj0wLGk9dC5sZW5ndGg7bjxpLzI7bis9Mil7dmFyIG89dFtuXSxzPXRbbisxXTt0W25dPXRbaS0yLW5dLHRbbisxXT10W2ktMS1uXSx0W2ktMi1uXT1vLHRbaS0xLW5dPXN9fShzLGEpLHQucHVzaChzKX19ZnVuY3Rpb24gX3QodCxlKXt2YXIgcj0oZT10aGlzLm9wdGlvbnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gZSl0W3JdPWVbcl07cmV0dXJuIHR9KE9iamVjdC5jcmVhdGUodGhpcy5vcHRpb25zKSxlKSkuZGVidWc7aWYociYmY29uc29sZS50aW1lKCJwcmVwcm9jZXNzIGRhdGEiKSxlLm1heFpvb208MHx8ZS5tYXhab29tPjI0KXRocm93IG5ldyBFcnJvcigibWF4Wm9vbSBzaG91bGQgYmUgaW4gdGhlIDAtMjQgcmFuZ2UiKTtpZihlLnByb21vdGVJZCYmZS5nZW5lcmF0ZUlkKXRocm93IG5ldyBFcnJvcigicHJvbW90ZUlkIGFuZCBnZW5lcmF0ZUlkIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiIpO3ZhciBuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107aWYoIkZlYXR1cmVDb2xsZWN0aW9uIj09PXQudHlwZSlmb3IodmFyIG49MDtuPHQuZmVhdHVyZXMubGVuZ3RoO24rKyl0dChyLHQuZmVhdHVyZXNbbl0sZSxuKTtlbHNlIkZlYXR1cmUiPT09dC50eXBlP3R0KHIsdCxlKTp0dChyLHtnZW9tZXRyeTp0fSxlKTtyZXR1cm4gcn0odCxlKTt0aGlzLnRpbGVzPXt9LHRoaXMudGlsZUNvb3Jkcz1bXSxyJiYoY29uc29sZS50aW1lRW5kKCJwcmVwcm9jZXNzIGRhdGEiKSxjb25zb2xlLmxvZygiaW5kZXg6IG1heFpvb206ICVkLCBtYXhQb2ludHM6ICVkIixlLmluZGV4TWF4Wm9vbSxlLmluZGV4TWF4UG9pbnRzKSxjb25zb2xlLnRpbWUoImdlbmVyYXRlIHRpbGVzIiksdGhpcy5zdGF0cz17fSx0aGlzLnRvdGFsPTApLChuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5idWZmZXIvZS5leHRlbnQsbj10LGk9b3QodCwxLC0xLXIsciwwLC0xLDIsZSksYT1vdCh0LDEsMS1yLDIrciwwLC0xLDIsZSk7cmV0dXJuKGl8fGEpJiYobj1vdCh0LDEsLXIsMStyLDAsLTEsMixlKXx8W10saSYmKG49ZHQoaSwxKS5jb25jYXQobikpLGEmJihuPW4uY29uY2F0KGR0KGEsLTEpKSkpLG59KG4sZSkpLmxlbmd0aCYmdGhpcy5zcGxpdFRpbGUobiwwLDAsMCksciYmKG4ubGVuZ3RoJiZjb25zb2xlLmxvZygiZmVhdHVyZXM6ICVkLCBwb2ludHM6ICVkIix0aGlzLnRpbGVzWzBdLm51bUZlYXR1cmVzLHRoaXMudGlsZXNbMF0ubnVtUG9pbnRzKSxjb25zb2xlLnRpbWVFbmQoImdlbmVyYXRlIHRpbGVzIiksY29uc29sZS5sb2coInRpbGVzIGdlbmVyYXRlZDoiLHRoaXMudG90YWwsSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0cykpKX1mdW5jdGlvbiB3dCh0LGUscil7cmV0dXJuIDMyKigoMTw8dCkqcitlKSt0fWZ1bmN0aW9uIFR0KHQsZSl7dmFyIHI9dC50aWxlSUQuY2Fub25pY2FsO2lmKCF0aGlzLl9nZW9KU09OSW5kZXgpcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgbj10aGlzLl9nZW9KU09OSW5kZXguZ2V0VGlsZShyLnosci54LHIueSk7aWYoIW4pcmV0dXJuIGUobnVsbCxudWxsKTt2YXIgaT1uZXcgZyhuLmZlYXR1cmVzKSxhPV8oaSk7MD09PWEuYnl0ZU9mZnNldCYmYS5ieXRlTGVuZ3RoPT09YS5idWZmZXIuYnl0ZUxlbmd0aHx8KGE9bmV3IFVpbnQ4QXJyYXkoYSkpLGUobnVsbCx7dmVjdG9yVGlsZTppLHJhd0RhdGE6YS5idWZmZXJ9KX1VLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub3B0aW9ucyxyPWUubG9nLG49ZS5taW5ab29tLGk9ZS5tYXhab29tLGE9ZS5ub2RlU2l6ZTtyJiZjb25zb2xlLnRpbWUoInRvdGFsIHRpbWUiKTt2YXIgbz0icHJlcGFyZSAiK3QubGVuZ3RoKyIgcG9pbnRzIjtyJiZjb25zb2xlLnRpbWUobyksdGhpcy5wb2ludHM9dDtmb3IodmFyIHM9W10sbD0wO2w8dC5sZW5ndGg7bCsrKXRbbF0uZ2VvbWV0cnkmJnMucHVzaChIKHRbbF0sbCkpO3RoaXMudHJlZXNbaSsxXT1uZXcgTihzLFosSixhLEZsb2F0MzJBcnJheSksciYmY29uc29sZS50aW1lRW5kKG8pO2Zvcih2YXIgYz1pO2M+PW47Yy0tKXt2YXIgdT0rRGF0ZS5ub3coKTtzPXRoaXMuX2NsdXN0ZXIocyxjKSx0aGlzLnRyZWVzW2NdPW5ldyBOKHMsWixKLGEsRmxvYXQzMkFycmF5KSxyJiZjb25zb2xlLmxvZygieiVkOiAlZCBjbHVzdGVycyBpbiAlZG1zIixjLHMubGVuZ3RoLCtEYXRlLm5vdygpLXUpfXJldHVybiByJiZjb25zb2xlLnRpbWVFbmQoInRvdGFsIHRpbWUiKSx0aGlzfSxVLnByb3RvdHlwZS5nZXRDbHVzdGVycz1mdW5jdGlvbih0LGUpe3ZhciByPSgodFswXSsxODApJTM2MCszNjApJTM2MC0xODAsbj1NYXRoLm1heCgtOTAsTWF0aC5taW4oOTAsdFsxXSkpLGk9MTgwPT09dFsyXT8xODA6KCh0WzJdKzE4MCklMzYwKzM2MCklMzYwLTE4MCxhPU1hdGgubWF4KC05MCxNYXRoLm1pbig5MCx0WzNdKSk7aWYodFsyXS10WzBdPj0zNjApcj0tMTgwLGk9MTgwO2Vsc2UgaWYocj5pKXt2YXIgbz10aGlzLmdldENsdXN0ZXJzKFtyLG4sMTgwLGFdLGUpLHM9dGhpcy5nZXRDbHVzdGVycyhbLTE4MCxuLGksYV0sZSk7cmV0dXJuIG8uY29uY2F0KHMpfWZvcih2YXIgbD10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbShlKV0sYz1bXSx1PTAsZj1sLnJhbmdlKFkociksVyhhKSxZKGkpLFcobikpO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPWwucG9pbnRzW2hdO2MucHVzaChwLm51bVBvaW50cz9xKHApOnRoaXMucG9pbnRzW3AuaW5kZXhdKX1yZXR1cm4gY30sVS5wcm90b3R5cGUuZ2V0Q2hpbGRyZW49ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0T3JpZ2luSWQodCkscj10aGlzLl9nZXRPcmlnaW5ab29tKHQpLG49Ik5vIGNsdXN0ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLiIsaT10aGlzLnRyZWVzW3JdO2lmKCFpKXRocm93IG5ldyBFcnJvcihuKTt2YXIgYT1pLnBvaW50c1tlXTtpZighYSl0aHJvdyBuZXcgRXJyb3Iobik7Zm9yKHZhciBvPXRoaXMub3B0aW9ucy5yYWRpdXMvKHRoaXMub3B0aW9ucy5leHRlbnQqTWF0aC5wb3coMixyLTEpKSxzPVtdLGw9MCxjPWkud2l0aGluKGEueCxhLnksbyk7bDxjLmxlbmd0aDtsKz0xKXt2YXIgdT1jW2xdLGY9aS5wb2ludHNbdV07Zi5wYXJlbnRJZD09PXQmJnMucHVzaChmLm51bVBvaW50cz9xKGYpOnRoaXMucG9pbnRzW2YuaW5kZXhdKX1pZigwPT09cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKG4pO3JldHVybiBzfSxVLnByb3RvdHlwZS5nZXRMZWF2ZXM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8MTAscj1yfHwwO3ZhciBuPVtdO3JldHVybiB0aGlzLl9hcHBlbmRMZWF2ZXMobix0LGUsciwwKSxufSxVLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnRyZWVzW3RoaXMuX2xpbWl0Wm9vbSh0KV0saT1NYXRoLnBvdygyLHQpLGE9dGhpcy5vcHRpb25zLG89YS5leHRlbnQscz1hLnJhZGl1cy9vLGw9KHItcykvaSxjPShyKzErcykvaSx1PXtmZWF0dXJlczpbXX07cmV0dXJuIHRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKChlLXMpL2ksbCwoZSsxK3MpL2ksYyksbi5wb2ludHMsZSxyLGksdSksMD09PWUmJnRoaXMuX2FkZFRpbGVGZWF0dXJlcyhuLnJhbmdlKDEtcy9pLGwsMSxjKSxuLnBvaW50cyxpLHIsaSx1KSxlPT09aS0xJiZ0aGlzLl9hZGRUaWxlRmVhdHVyZXMobi5yYW5nZSgwLGwscy9pLGMpLG4ucG9pbnRzLC0xLHIsaSx1KSx1LmZlYXR1cmVzLmxlbmd0aD91Om51bGx9LFUucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl9nZXRPcmlnaW5ab29tKHQpLTE7ZTw9dGhpcy5vcHRpb25zLm1heFpvb207KXt2YXIgcj10aGlzLmdldENoaWxkcmVuKHQpO2lmKGUrKywxIT09ci5sZW5ndGgpYnJlYWs7dD1yWzBdLnByb3BlcnRpZXMuY2x1c3Rlcl9pZH1yZXR1cm4gZX0sVS5wcm90b3R5cGUuX2FwcGVuZExlYXZlcz1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgYT0wLG89dGhpcy5nZXRDaGlsZHJlbihlKTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zLnByb3BlcnRpZXM7aWYobCYmbC5jbHVzdGVyP2krbC5wb2ludF9jb3VudDw9bj9pKz1sLnBvaW50X2NvdW50Omk9dGhpcy5fYXBwZW5kTGVhdmVzKHQsbC5jbHVzdGVyX2lkLHIsbixpKTppPG4/aSsrOnQucHVzaChzKSx0Lmxlbmd0aD09PXIpYnJlYWt9cmV0dXJuIGl9LFUucHJvdG90eXBlLl9hZGRUaWxlRmVhdHVyZXM9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wLHM9dDtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPWVbc1tvXV0sYz1sLm51bVBvaW50cyx1PXt0eXBlOjEsZ2VvbWV0cnk6W1tNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKGwueCppLXIpKSxNYXRoLnJvdW5kKHRoaXMub3B0aW9ucy5leHRlbnQqKGwueSppLW4pKV1dLHRhZ3M6Yz9HKGwpOnRoaXMucG9pbnRzW2wuaW5kZXhdLnByb3BlcnRpZXN9LGY9dm9pZCAwO2M/Zj1sLmlkOnRoaXMub3B0aW9ucy5nZW5lcmF0ZUlkP2Y9bC5pbmRleDp0aGlzLnBvaW50c1tsLmluZGV4XS5pZCYmKGY9dGhpcy5wb2ludHNbbC5pbmRleF0uaWQpLHZvaWQgMCE9PWYmJih1LmlkPWYpLGEuZmVhdHVyZXMucHVzaCh1KX19LFUucHJvdG90eXBlLl9saW1pdFpvb209ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KHRoaXMub3B0aW9ucy5taW5ab29tLE1hdGgubWluKHQsdGhpcy5vcHRpb25zLm1heFpvb20rMSkpfSxVLnByb3RvdHlwZS5fY2x1c3Rlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPXRoaXMub3B0aW9ucyxpPW4ucmFkaXVzLGE9bi5leHRlbnQsbz1uLnJlZHVjZSxzPWkvKGEqTWF0aC5wb3coMixlKSksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz10W2xdO2lmKCEoYy56b29tPD1lKSl7Yy56b29tPWU7Zm9yKHZhciB1PXRoaXMudHJlZXNbZSsxXSxmPXUud2l0aGluKGMueCxjLnkscyksaD1jLm51bVBvaW50c3x8MSxwPWMueCpoLGQ9Yy55KmgsbT1vJiZoPjE/dGhpcy5fbWFwKGMsITApOm51bGwsZz0obDw8NSkrKGUrMSkrdGhpcy5wb2ludHMubGVuZ3RoLHY9MCx5PWY7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dS5wb2ludHNbeF07aWYoIShiLnpvb208PWUpKXtiLnpvb209ZTt2YXIgXz1iLm51bVBvaW50c3x8MTtwKz1iLngqXyxkKz1iLnkqXyxoKz1fLGIucGFyZW50SWQ9ZyxvJiYobXx8KG09dGhpcy5fbWFwKGMsITApKSxvKG0sdGhpcy5fbWFwKGIpKSl9fTE9PT1oP3IucHVzaChjKTooYy5wYXJlbnRJZD1nLHIucHVzaChWKHAvaCxkL2gsZyxoLG0pKSl9fXJldHVybiByfSxVLnByb3RvdHlwZS5fZ2V0T3JpZ2luSWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy5wb2ludHMubGVuZ3RoPj41fSxVLnByb3RvdHlwZS5fZ2V0T3JpZ2luWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4odC10aGlzLnBvaW50cy5sZW5ndGgpJTMyfSxVLnByb3RvdHlwZS5fbWFwPWZ1bmN0aW9uKHQsZSl7aWYodC5udW1Qb2ludHMpcmV0dXJuIGU/WCh7fSx0LnByb3BlcnRpZXMpOnQucHJvcGVydGllczt2YXIgcj10aGlzLnBvaW50c1t0LmluZGV4XS5wcm9wZXJ0aWVzLG49dGhpcy5vcHRpb25zLm1hcChyKTtyZXR1cm4gZSYmbj09PXI/WCh7fSxuKTpufSxfdC5wcm90b3R5cGUub3B0aW9ucz17bWF4Wm9vbToxNCxpbmRleE1heFpvb206NSxpbmRleE1heFBvaW50czoxZTUsdG9sZXJhbmNlOjMsZXh0ZW50OjQwOTYsYnVmZmVyOjY0LGxpbmVNZXRyaWNzOiExLHByb21vdGVJZDpudWxsLGdlbmVyYXRlSWQ6ITEsZGVidWc6MH0sX3QucHJvdG90eXBlLnNwbGl0VGlsZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9W3QsZSxyLG5dLGw9dGhpcy5vcHRpb25zLGM9bC5kZWJ1ZztzLmxlbmd0aDspe249cy5wb3AoKSxyPXMucG9wKCksZT1zLnBvcCgpLHQ9cy5wb3AoKTt2YXIgdT0xPDxlLGY9d3QoZSxyLG4pLGg9dGhpcy50aWxlc1tmXTtpZighaCYmKGM+MSYmY29uc29sZS50aW1lKCJjcmVhdGlvbiIpLGg9dGhpcy50aWxlc1tmXT15dCh0LGUscixuLGwpLHRoaXMudGlsZUNvb3Jkcy5wdXNoKHt6OmUseDpyLHk6bn0pLGMpKXtjPjEmJihjb25zb2xlLmxvZygidGlsZSB6JWQtJWQtJWQgKGZlYXR1cmVzOiAlZCwgcG9pbnRzOiAlZCwgc2ltcGxpZmllZDogJWQpIixlLHIsbixoLm51bUZlYXR1cmVzLGgubnVtUG9pbnRzLGgubnVtU2ltcGxpZmllZCksY29uc29sZS50aW1lRW5kKCJjcmVhdGlvbiIpKTt2YXIgcD0ieiIrZTt0aGlzLnN0YXRzW3BdPSh0aGlzLnN0YXRzW3BdfHwwKSsxLHRoaXMudG90YWwrK31pZihoLnNvdXJjZT10LGkpe2lmKGU9PT1sLm1heFpvb218fGU9PT1pKWNvbnRpbnVlO3ZhciBkPTE8PGktZTtpZihyIT09TWF0aC5mbG9vcihhL2QpfHxuIT09TWF0aC5mbG9vcihvL2QpKWNvbnRpbnVlfWVsc2UgaWYoZT09PWwuaW5kZXhNYXhab29tfHxoLm51bVBvaW50czw9bC5pbmRleE1heFBvaW50cyljb250aW51ZTtpZihoLnNvdXJjZT1udWxsLDAhPT10Lmxlbmd0aCl7Yz4xJiZjb25zb2xlLnRpbWUoImNsaXBwaW5nIik7dmFyIG0sZyx2LHkseCxiLF89LjUqbC5idWZmZXIvbC5leHRlbnQsdz0uNS1fLFQ9LjUrXyxrPTErXzttPWc9dj15PW51bGwseD1vdCh0LHUsci1fLHIrVCwwLGgubWluWCxoLm1heFgsbCksYj1vdCh0LHUscit3LHIraywwLGgubWluWCxoLm1heFgsbCksdD1udWxsLHgmJihtPW90KHgsdSxuLV8sbitULDEsaC5taW5ZLGgubWF4WSxsKSxnPW90KHgsdSxuK3csbitrLDEsaC5taW5ZLGgubWF4WSxsKSx4PW51bGwpLGImJih2PW90KGIsdSxuLV8sbitULDEsaC5taW5ZLGgubWF4WSxsKSx5PW90KGIsdSxuK3csbitrLDEsaC5taW5ZLGgubWF4WSxsKSxiPW51bGwpLGM+MSYmY29uc29sZS50aW1lRW5kKCJjbGlwcGluZyIpLHMucHVzaChtfHxbXSxlKzEsMipyLDIqbikscy5wdXNoKGd8fFtdLGUrMSwyKnIsMipuKzEpLHMucHVzaCh2fHxbXSxlKzEsMipyKzEsMipuKSxzLnB1c2goeXx8W10sZSsxLDIqcisxLDIqbisxKX19fSxfdC5wcm90b3R5cGUuZ2V0VGlsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5vcHRpb25zLGk9bi5leHRlbnQsYT1uLmRlYnVnO2lmKHQ8MHx8dD4yNClyZXR1cm4gbnVsbDt2YXIgbz0xPDx0LHM9d3QodCxlPShlJW8rbyklbyxyKTtpZih0aGlzLnRpbGVzW3NdKXJldHVybiBndCh0aGlzLnRpbGVzW3NdLGkpO2E+MSYmY29uc29sZS5sb2coImRyaWxsaW5nIGRvd24gdG8geiVkLSVkLSVkIix0LGUscik7Zm9yKHZhciBsLGM9dCx1PWUsZj1yOyFsJiZjPjA7KWMtLSx1PU1hdGguZmxvb3IodS8yKSxmPU1hdGguZmxvb3IoZi8yKSxsPXRoaXMudGlsZXNbd3QoYyx1LGYpXTtyZXR1cm4gbCYmbC5zb3VyY2U/KGE+MSYmY29uc29sZS5sb2coImZvdW5kIHBhcmVudCB0aWxlIHolZC0lZC0lZCIsYyx1LGYpLGE+MSYmY29uc29sZS50aW1lKCJkcmlsbGluZyBkb3duIiksdGhpcy5zcGxpdFRpbGUobC5zb3VyY2UsYyx1LGYsdCxlLHIpLGE+MSYmY29uc29sZS50aW1lRW5kKCJkcmlsbGluZyBkb3duIiksdGhpcy50aWxlc1tzXT9ndCh0aGlzLnRpbGVzW3NdLGkpOm51bGwpOm51bGx9O3ZhciBrdD1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHQscixuLGkpe2UuY2FsbCh0aGlzLHQscixuLFR0KSxpJiYodGhpcy5sb2FkR2VvSlNPTj1pKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUubG9hZERhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSx0aGlzLl9wZW5kaW5nQ2FsbGJhY2s9ZSx0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM9dCx0aGlzLl9zdGF0ZSYmIklkbGUiIT09dGhpcy5fc3RhdGU/dGhpcy5fc3RhdGU9Ik5lZWRzTG9hZERhdGEiOih0aGlzLl9zdGF0ZT0iQ29hbGVzY2luZyIsdGhpcy5fbG9hZERhdGEoKSl9LHIucHJvdG90eXBlLl9sb2FkRGF0YT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fcGVuZGluZ0NhbGxiYWNrJiZ0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXMpe3ZhciByPXRoaXMuX3BlbmRpbmdDYWxsYmFjayxuPXRoaXMuX3BlbmRpbmdMb2FkRGF0YVBhcmFtcztkZWxldGUgdGhpcy5fcGVuZGluZ0NhbGxiYWNrLGRlbGV0ZSB0aGlzLl9wZW5kaW5nTG9hZERhdGFQYXJhbXM7dmFyIGk9ISEobiYmbi5yZXF1ZXN0JiZuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nKSYmbmV3IHQuUmVxdWVzdFBlcmZvcm1hbmNlKG4ucmVxdWVzdCk7dGhpcy5sb2FkR2VvSlNPTihuLChmdW5jdGlvbihhLG8pe2lmKGF8fCFvKXJldHVybiByKGEpO2lmKCJvYmplY3QiIT10eXBlb2YgbylyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrbi5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO2YobywhMCk7dHJ5e2UuX2dlb0pTT05JbmRleD1uLmNsdXN0ZXI/bmV3IFUoZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdXBlcmNsdXN0ZXJPcHRpb25zLG49ZS5jbHVzdGVyUHJvcGVydGllcztpZighbnx8IXIpcmV0dXJuIHI7Zm9yKHZhciBpPXt9LGE9e30sbz17YWNjdW11bGF0ZWQ6bnVsbCx6b29tOjB9LHM9e3Byb3BlcnRpZXM6bnVsbH0sbD1PYmplY3Qua2V5cyhuKSxjPTAsdT1sO2M8dS5sZW5ndGg7Yys9MSl7dmFyIGY9dVtjXSxoPW5bZl0scD1oWzBdLGQ9aFsxXSxtPXQuY3JlYXRlRXhwcmVzc2lvbihkKSxnPXQuY3JlYXRlRXhwcmVzc2lvbigic3RyaW5nIj09dHlwZW9mIHA/W3AsWyJhY2N1bXVsYXRlZCJdLFsiZ2V0IixmXV06cCk7aVtmXT1tLnZhbHVlLGFbZl09Zy52YWx1ZX1yZXR1cm4gci5tYXA9ZnVuY3Rpb24odCl7cy5wcm9wZXJ0aWVzPXQ7Zm9yKHZhciBlPXt9LHI9MCxuPWw7cjxuLmxlbmd0aDtyKz0xKXt2YXIgYT1uW3JdO2VbYV09aVthXS5ldmFsdWF0ZShvLHMpfXJldHVybiBlfSxyLnJlZHVjZT1mdW5jdGlvbih0LGUpe3MucHJvcGVydGllcz1lO2Zvcih2YXIgcj0wLG49bDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl07by5hY2N1bXVsYXRlZD10W2ldLHRbaV09YVtpXS5ldmFsdWF0ZShvLHMpfX0scn0obikpLmxvYWQoby5mZWF0dXJlcyk6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IF90KHQsZSl9KG8sbi5nZW9qc29uVnRPcHRpb25zKX1jYXRjaChhKXtyZXR1cm4gcihhKX1lLmxvYWRlZD17fTt2YXIgcz17fTtpZihpKXt2YXIgbD1pLmZpbmlzaCgpO2wmJihzLnJlc291cmNlVGltaW5nPXt9LHMucmVzb3VyY2VUaW1pbmdbbi5zb3VyY2VdPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobCkpKX1yKG51bGwscyl9KSl9fSxyLnByb3RvdHlwZS5jb2FsZXNjZT1mdW5jdGlvbigpeyJDb2FsZXNjaW5nIj09PXRoaXMuX3N0YXRlP3RoaXMuX3N0YXRlPSJJZGxlIjoiTmVlZHNMb2FkRGF0YSI9PT10aGlzLl9zdGF0ZSYmKHRoaXMuX3N0YXRlPSJDb2FsZXNjaW5nIix0aGlzLl9sb2FkRGF0YSgpKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZT1mdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMubG9hZGVkLGk9dC51aWQ7cmV0dXJuIG4mJm5baV0/ZS5wcm90b3R5cGUucmVsb2FkVGlsZS5jYWxsKHRoaXMsdCxyKTp0aGlzLmxvYWRUaWxlKHQscil9LHIucHJvdG90eXBlLmxvYWRHZW9KU09OPWZ1bmN0aW9uKGUscil7aWYoZS5yZXF1ZXN0KXQuZ2V0SlNPTihlLnJlcXVlc3Qscik7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGUuZGF0YSlyZXR1cm4gcihuZXcgRXJyb3IoIklucHV0IGRhdGEgZ2l2ZW4gdG8gJyIrZS5zb3VyY2UrIicgaXMgbm90IGEgdmFsaWQgR2VvSlNPTiBvYmplY3QuIikpO3RyeXtyZXR1cm4gcihudWxsLEpTT04ucGFyc2UoZS5kYXRhKSl9Y2F0Y2godCl7cmV0dXJuIHIobmV3IEVycm9yKCJJbnB1dCBkYXRhIGdpdmVuIHRvICciK2Uuc291cmNlKyInIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04gb2JqZWN0LiIpKX19fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlKXt0aGlzLl9wZW5kaW5nQ2FsbGJhY2smJnRoaXMuX3BlbmRpbmdDYWxsYmFjayhudWxsLHthYmFuZG9uZWQ6ITB9KSxlKCl9LHIucHJvdG90eXBlLmdldENsdXN0ZXJFeHBhbnNpb25ab29tPWZ1bmN0aW9uKHQsZSl7dHJ5e2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2x1c3RlckV4cGFuc2lvblpvb20odC5jbHVzdGVySWQpKX1jYXRjaCh0KXtlKHQpfX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckNoaWxkcmVuPWZ1bmN0aW9uKHQsZSl7dHJ5e2UobnVsbCx0aGlzLl9nZW9KU09OSW5kZXguZ2V0Q2hpbGRyZW4odC5jbHVzdGVySWQpKX1jYXRjaCh0KXtlKHQpfX0sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckxlYXZlcz1mdW5jdGlvbih0LGUpe3RyeXtlKG51bGwsdGhpcy5fZ2VvSlNPTkluZGV4LmdldExlYXZlcyh0LmNsdXN0ZXJJZCx0LmxpbWl0LHQub2Zmc2V0KSl9Y2F0Y2godCl7ZSh0KX19LHJ9KGwpO3ZhciBBdD1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuc2VsZj1lLHRoaXMuYWN0b3I9bmV3IHQuQWN0b3IoZSx0aGlzKSx0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmF2YWlsYWJsZUltYWdlcz17fSx0aGlzLndvcmtlclNvdXJjZVR5cGVzPXt2ZWN0b3I6bCxnZW9qc29uOmt0fSx0aGlzLndvcmtlclNvdXJjZXM9e30sdGhpcy5kZW1Xb3JrZXJTb3VyY2VzPXt9LHRoaXMuc2VsZi5yZWdpc3RlcldvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe2lmKHIud29ya2VyU291cmNlVHlwZXNbdF0pdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgc291cmNlIHdpdGggbmFtZSAiJyt0KyciIGFscmVhZHkgcmVnaXN0ZXJlZC4nKTtyLndvcmtlclNvdXJjZVR5cGVzW3RdPWV9LHRoaXMuc2VsZi5yZWdpc3RlclJUTFRleHRQbHVnaW49ZnVuY3Rpb24oZSl7aWYodC5wbHVnaW4uaXNQYXJzZWQoKSl0aHJvdyBuZXcgRXJyb3IoIlJUTCB0ZXh0IHBsdWdpbiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7dC5wbHVnaW4uYXBwbHlBcmFiaWNTaGFwaW5nPWUuYXBwbHlBcmFiaWNTaGFwaW5nLHQucGx1Z2luLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dD1lLnByb2Nlc3NCaWRpcmVjdGlvbmFsVGV4dCx0LnBsdWdpbi5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHQ9ZS5wcm9jZXNzU3R5bGVkQmlkaXJlY3Rpb25hbFRleHR9fTtyZXR1cm4gQXQucHJvdG90eXBlLnNldFJlZmVycmVyPWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWZlcnJlcj1lfSxBdC5wcm90b3R5cGUuc2V0SW1hZ2VzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gdGhpcy5hdmFpbGFibGVJbWFnZXNbdF09ZSx0aGlzLndvcmtlclNvdXJjZXNbdF0pe3ZhciBpPXRoaXMud29ya2VyU291cmNlc1t0XVtuXTtmb3IodmFyIGEgaW4gaSlpW2FdLmF2YWlsYWJsZUltYWdlcz1lfXIoKX0sQXQucHJvdG90eXBlLnNldExheWVycz1mdW5jdGlvbih0LGUscil7dGhpcy5nZXRMYXllckluZGV4KHQpLnJlcGxhY2UoZSkscigpfSxBdC5wcm90b3R5cGUudXBkYXRlTGF5ZXJzPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldExheWVySW5kZXgodCkudXBkYXRlKGUubGF5ZXJzLGUucmVtb3ZlZElkcykscigpfSxBdC5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0V29ya2VyU291cmNlKHQsZS50eXBlLGUuc291cmNlKS5sb2FkVGlsZShlLHIpfSxBdC5wcm90b3R5cGUubG9hZERFTVRpbGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLmxvYWRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5yZWxvYWRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVsb2FkVGlsZShlLHIpfSxBdC5wcm90b3R5cGUuYWJvcnRUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkuYWJvcnRUaWxlKGUscil9LEF0LnByb3RvdHlwZS5yZW1vdmVUaWxlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmdldFdvcmtlclNvdXJjZSh0LGUudHlwZSxlLnNvdXJjZSkucmVtb3ZlVGlsZShlLHIpfSxBdC5wcm90b3R5cGUucmVtb3ZlREVNVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMuZ2V0REVNV29ya2VyU291cmNlKHQsZS5zb3VyY2UpLnJlbW92ZVRpbGUoZSl9LEF0LnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMud29ya2VyU291cmNlc1t0XSYmdGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV0mJnRoaXMud29ya2VyU291cmNlc1t0XVtlLnR5cGVdW2Uuc291cmNlXSl7dmFyIG49dGhpcy53b3JrZXJTb3VyY2VzW3RdW2UudHlwZV1bZS5zb3VyY2VdO2RlbGV0ZSB0aGlzLndvcmtlclNvdXJjZXNbdF1bZS50eXBlXVtlLnNvdXJjZV0sdm9pZCAwIT09bi5yZW1vdmVTb3VyY2U/bi5yZW1vdmVTb3VyY2UoZSxyKTpyKCl9fSxBdC5wcm90b3R5cGUubG9hZFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dHJ5e3RoaXMuc2VsZi5pbXBvcnRTY3JpcHRzKGUudXJsKSxyKCl9Y2F0Y2godCl7cih0LnRvU3RyaW5nKCkpfX0sQXQucHJvdG90eXBlLnN5bmNSVExQbHVnaW5TdGF0ZT1mdW5jdGlvbihlLHIsbil7dHJ5e3QucGx1Z2luLnNldFN0YXRlKHIpO3ZhciBpPXQucGx1Z2luLmdldFBsdWdpblVSTCgpO2lmKHQucGx1Z2luLmlzTG9hZGVkKCkmJiF0LnBsdWdpbi5pc1BhcnNlZCgpJiZudWxsIT1pKXt0aGlzLnNlbGYuaW1wb3J0U2NyaXB0cyhpKTt2YXIgYT10LnBsdWdpbi5pc1BhcnNlZCgpO24oYT92b2lkIDA6bmV3IEVycm9yKCJSVEwgVGV4dCBQbHVnaW4gZmFpbGVkIHRvIGltcG9ydCBzY3JpcHRzIGZyb20gIitpKSxhKX19Y2F0Y2godCl7bih0LnRvU3RyaW5nKCkpfX0sQXQucHJvdG90eXBlLmdldEF2YWlsYWJsZUltYWdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmF2YWlsYWJsZUltYWdlc1t0XTtyZXR1cm4gZXx8KGU9W10pLGV9LEF0LnByb3RvdHlwZS5nZXRMYXllckluZGV4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGF5ZXJJbmRleGVzW3RdO3JldHVybiBlfHwoZT10aGlzLmxheWVySW5kZXhlc1t0XT1uZXcgbiksZX0sQXQucHJvdG90eXBlLmdldFdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcztpZih0aGlzLndvcmtlclNvdXJjZXNbdF18fCh0aGlzLndvcmtlclNvdXJjZXNbdF09e30pLHRoaXMud29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMud29ya2VyU291cmNlc1t0XVtlXT17fSksIXRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXSl7dmFyIGk9e3NlbmQ6ZnVuY3Rpb24oZSxyLGkpe24uYWN0b3Iuc2VuZChlLHIsaSx0KX19O3RoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXT1uZXcgdGhpcy53b3JrZXJTb3VyY2VUeXBlc1tlXShpLHRoaXMuZ2V0TGF5ZXJJbmRleCh0KSx0aGlzLmdldEF2YWlsYWJsZUltYWdlcyh0KSl9cmV0dXJuIHRoaXMud29ya2VyU291cmNlc1t0XVtlXVtyXX0sQXQucHJvdG90eXBlLmdldERFTVdvcmtlclNvdXJjZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF18fCh0aGlzLmRlbVdvcmtlclNvdXJjZXNbdF09e30pLHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXXx8KHRoaXMuZGVtV29ya2VyU291cmNlc1t0XVtlXT1uZXcgdSksdGhpcy5kZW1Xb3JrZXJTb3VyY2VzW3RdW2VdfSxBdC5wcm90b3R5cGUuZW5mb3JjZUNhY2hlU2l6ZUxpbWl0PWZ1bmN0aW9uKGUscil7dC5lbmZvcmNlQ2FjaGVTaXplTGltaXQocil9LCJ1bmRlZmluZWQiIT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnZvaWQgMCE9PXQud2luZG93JiZ0LndpbmRvdyBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiYodC53aW5kb3cud29ya2VyPW5ldyBBdCh0LndpbmRvdykpLEF0fSkpLG4oMCwoZnVuY3Rpb24odCl7dmFyIGU9dC5jcmVhdGVDb21tb25qc01vZHVsZSgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4hcih0KX1mdW5jdGlvbiByKHQpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50PyJub3QgYSBicm93c2VyIjpBcnJheS5wcm90b3R5cGUmJkFycmF5LnByb3RvdHlwZS5ldmVyeSYmQXJyYXkucHJvdG90eXBlLmZpbHRlciYmQXJyYXkucHJvdG90eXBlLmZvckVhY2gmJkFycmF5LnByb3RvdHlwZS5pbmRleE9mJiZBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YmJkFycmF5LnByb3RvdHlwZS5tYXAmJkFycmF5LnByb3RvdHlwZS5zb21lJiZBcnJheS5wcm90b3R5cGUucmVkdWNlJiZBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQmJkFycmF5LmlzQXJyYXk/RnVuY3Rpb24ucHJvdG90eXBlJiZGdW5jdGlvbi5wcm90b3R5cGUuYmluZD9PYmplY3Qua2V5cyYmT2JqZWN0LmNyZWF0ZSYmT2JqZWN0LmdldFByb3RvdHlwZU9mJiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmT2JqZWN0LmlzU2VhbGVkJiZPYmplY3QuaXNGcm96ZW4mJk9iamVjdC5pc0V4dGVuc2libGUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmRlZmluZVByb3BlcnRpZXMmJk9iamVjdC5zZWFsJiZPYmplY3QuZnJlZXplJiZPYmplY3QucHJldmVudEV4dGVuc2lvbnM/IkpTT04iaW4gd2luZG93JiYicGFyc2UiaW4gSlNPTiYmInN0cmluZ2lmeSJpbiBKU09OP2Z1bmN0aW9uKCl7aWYoISgiV29ya2VyImluIHdpbmRvdyYmIkJsb2IiaW4gd2luZG93JiYiVVJMImluIHdpbmRvdykpcmV0dXJuITE7dmFyIHQsZSxyPW5ldyBCbG9iKFsiIl0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KSxuPVVSTC5jcmVhdGVPYmplY3RVUkwocik7dHJ5e2U9bmV3IFdvcmtlcihuKSx0PSEwfWNhdGNoKGUpe3Q9ITF9ZSYmZS50ZXJtaW5hdGUoKTtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChuKSx0fSgpPyJVaW50OENsYW1wZWRBcnJheSJpbiB3aW5kb3c/QXJyYXlCdWZmZXIuaXNWaWV3P2Z1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7dC53aWR0aD10LmhlaWdodD0xO3ZhciBlPXQuZ2V0Q29udGV4dCgiMmQiKTtpZighZSlyZXR1cm4hMTt2YXIgcj1lLmdldEltYWdlRGF0YSgwLDAsMSwxKTtyZXR1cm4gciYmci53aWR0aD09PXQud2lkdGh9KCk/ZnVuY3Rpb24odCl7dm9pZCAwPT09blt0XSYmKG5bdF09ZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1PYmplY3QuY3JlYXRlKGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyk7cmV0dXJuIG4uZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD10LHIucHJvYmFibHlTdXBwb3J0c0NvbnRleHQ/ci5wcm9iYWJseVN1cHBvcnRzQ29udGV4dCgid2ViZ2wiLG4pfHxyLnByb2JhYmx5U3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuc3VwcG9ydHNDb250ZXh0P3Iuc3VwcG9ydHNDb250ZXh0KCJ3ZWJnbCIsbil8fHIuc3VwcG9ydHNDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLG4pOnIuZ2V0Q29udGV4dCgid2ViZ2wiLG4pfHxyLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIsbil9KHQpO2lmKCFyKXJldHVybiExO3ZhciBuPXIuY3JlYXRlU2hhZGVyKHIuVkVSVEVYX1NIQURFUik7aWYoIW58fHIuaXNDb250ZXh0TG9zdCgpKXJldHVybiExO3JldHVybiByLnNoYWRlclNvdXJjZShuLCJ2b2lkIG1haW4oKSB7fSIpLHIuY29tcGlsZVNoYWRlcihuKSwhMD09PXIuZ2V0U2hhZGVyUGFyYW1ldGVyKG4sci5DT01QSUxFX1NUQVRVUyl9KHQpKTtyZXR1cm4gblt0XX0odCYmdC5mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0KT92b2lkIDA6Imluc3VmZmljaWVudCBXZWJHTCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IENhbnZhcy9nZXRJbWFnZURhdGEgc3VwcG9ydCI6Imluc3VmZmljaWVudCBBcnJheUJ1ZmZlciBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IFVpbnQ4Q2xhbXBlZEFycmF5IHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgd29ya2VyIHN1cHBvcnQiOiJpbnN1ZmZpY2llbnQgSlNPTiBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IE9iamVjdCBzdXBwb3J0IjoiaW5zdWZmaWNpZW50IEZ1bmN0aW9uIHN1cHBvcnQiOiJpbnN1ZmZpY2VudCBBcnJheSBzdXBwb3J0In10LmV4cG9ydHM/dC5leHBvcnRzPWU6d2luZG93JiYod2luZG93Lm1hcGJveGdsPXdpbmRvdy5tYXBib3hnbHx8e30sd2luZG93Lm1hcGJveGdsLnN1cHBvcnRlZD1lLHdpbmRvdy5tYXBib3hnbC5ub3RTdXBwb3J0ZWRSZWFzb249cik7dmFyIG49e307ZS53ZWJHTENvbnRleHRBdHRyaWJ1dGVzPXthbnRpYWxpYXM6ITEsYWxwaGE6ITAsc3RlbmNpbDohMCxkZXB0aDohMH19KSkscj17Y3JlYXRlOmZ1bmN0aW9uKGUscixuKXt2YXIgaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpO3JldHVybiB2b2lkIDAhPT1yJiYoaS5jbGFzc05hbWU9ciksbiYmbi5hcHBlbmRDaGlsZChpKSxpfSxjcmVhdGVOUzpmdW5jdGlvbihlLHIpe3JldHVybiB0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoZSxyKX19LG49dC53aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO2Z1bmN0aW9uIGkodCl7aWYoIW4pcmV0dXJuIHRbMF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXWluIG4pcmV0dXJuIHRbZV07cmV0dXJuIHRbMF19dmFyIGEsbz1pKFsidXNlclNlbGVjdCIsIk1velVzZXJTZWxlY3QiLCJXZWJraXRVc2VyU2VsZWN0IiwibXNVc2VyU2VsZWN0Il0pO3IuZGlzYWJsZURyYWc9ZnVuY3Rpb24oKXtuJiZvJiYoYT1uW29dLG5bb109Im5vbmUiKX0sci5lbmFibGVEcmFnPWZ1bmN0aW9uKCl7biYmbyYmKG5bb109YSl9O3ZhciBzPWkoWyJ0cmFuc2Zvcm0iLCJXZWJraXRUcmFuc2Zvcm0iXSk7ci5zZXRUcmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt0LnN0eWxlW3NdPWV9O3ZhciBsPSExO3RyeXt2YXIgYz1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6ZnVuY3Rpb24oKXtsPSEwfX0pO3Qud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLGMsYyksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsYyxjKX1jYXRjaCh0KXtsPSExfXIuYWRkRXZlbnRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksInBhc3NpdmUiaW4gbiYmbD90LmFkZEV2ZW50TGlzdGVuZXIoZSxyLG4pOnQuYWRkRXZlbnRMaXN0ZW5lcihlLHIsbi5jYXB0dXJlKX0sci5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZvaWQgMD09PW4mJihuPXt9KSwicGFzc2l2ZSJpbiBuJiZsP3QucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsbik6dC5yZW1vdmVFdmVudExpc3RlbmVyKGUscixuLmNhcHR1cmUpfTt2YXIgdT1mdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9O2Z1bmN0aW9uIGYodCl7dmFyIGU9dC51c2VySW1hZ2U7aWYoZSYmZS5yZW5kZXImJmUucmVuZGVyKCkpcmV0dXJuIHQuZGF0YS5yZXBsYWNlKG5ldyBVaW50OEFycmF5KGUuZGF0YS5idWZmZXIpKSwhMDtyZXR1cm4hMX1yLnN1cHByZXNzQ2xpY2s9ZnVuY3Rpb24oKXt0LndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCksdC53aW5kb3cuc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0LndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdSwhMCl9KSwwKX0sci5tb3VzZVBvcz1mdW5jdGlvbihlLHIpe3ZhciBuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG5ldyB0LlBvaW50KHIuY2xpZW50WC1uLmxlZnQtZS5jbGllbnRMZWZ0LHIuY2xpZW50WS1uLnRvcC1lLmNsaWVudFRvcCl9LHIudG91Y2hQb3M9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylpLnB1c2gobmV3IHQuUG9pbnQoclthXS5jbGllbnRYLW4ubGVmdC1lLmNsaWVudExlZnQsclthXS5jbGllbnRZLW4udG9wLWUuY2xpZW50VG9wKSk7cmV0dXJuIGl9LHIubW91c2VCdXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXQud2luZG93Lkluc3RhbGxUcmlnZ2VyJiYyPT09ZS5idXR0b24mJmUuY3RybEtleSYmdC53aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLnRvVXBwZXJDYXNlKCkuaW5kZXhPZigiTUFDIik+PTA/MDplLmJ1dHRvbn0sci5yZW1vdmU9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9O3ZhciBoPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmNhbGwodGhpcyksdGhpcy5pbWFnZXM9e30sdGhpcy51cGRhdGVkSW1hZ2VzPXt9LHRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lPXt9LHRoaXMubG9hZGVkPSExLHRoaXMucmVxdWVzdG9ycz1bXSx0aGlzLnBhdHRlcm5zPXt9LHRoaXMuYXRsYXNJbWFnZT1uZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOjEsaGVpZ2h0OjF9KSx0aGlzLmRpcnR5PSEwfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5pc0xvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRlZH0sci5wcm90b3R5cGUuc2V0TG9hZGVkPWZ1bmN0aW9uKHQpe2lmKHRoaXMubG9hZGVkIT09dCYmKHRoaXMubG9hZGVkPXQsdCkpe2Zvcih2YXIgZT0wLHI9dGhpcy5yZXF1ZXN0b3JzO2U8ci5sZW5ndGg7ZSs9MSl7dmFyIG49cltlXSxpPW4uaWRzLGE9bi5jYWxsYmFjazt0aGlzLl9ub3RpZnkoaSxhKX10aGlzLnJlcXVlc3RvcnM9W119fSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZXNbdF19LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmFsaWRhdGUodCxlKSYmKHRoaXMuaW1hZ2VzW3RdPWUpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj0hMDtyZXR1cm4gdGhpcy5fdmFsaWRhdGVTdHJldGNoKHIuc3RyZXRjaFgsci5kYXRhJiZyLmRhdGEud2lkdGgpfHwodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdJbWFnZSAiJytlKyciIGhhcyBpbnZhbGlkICJzdHJldGNoWCIgdmFsdWUnKSkpLG49ITEpLHRoaXMuX3ZhbGlkYXRlU3RyZXRjaChyLnN0cmV0Y2hZLHIuZGF0YSYmci5kYXRhLmhlaWdodCl8fCh0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ0ltYWdlICInK2UrJyIgaGFzIGludmFsaWQgInN0cmV0Y2hZIiB2YWx1ZScpKSksbj0hMSksdGhpcy5fdmFsaWRhdGVDb250ZW50KHIuY29udGVudCxyKXx8KHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignSW1hZ2UgIicrZSsnIiBoYXMgaW52YWxpZCAiY29udGVudCIgdmFsdWUnKSkpLG49ITEpLG59LHIucHJvdG90eXBlLl92YWxpZGF0ZVN0cmV0Y2g9ZnVuY3Rpb24odCxlKXtpZighdClyZXR1cm4hMDtmb3IodmFyIHI9MCxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtpZihhWzBdPHJ8fGFbMV08YVswXXx8ZTxhWzFdKXJldHVybiExO3I9YVsxXX1yZXR1cm4hMH0sci5wcm90b3R5cGUuX3ZhbGlkYXRlQ29udGVudD1mdW5jdGlvbih0LGUpe3JldHVybiF0fHw0PT09dC5sZW5ndGgmJighKHRbMF08MHx8ZS5kYXRhLndpZHRoPHRbMF0pJiYoISh0WzFdPDB8fGUuZGF0YS5oZWlnaHQ8dFsxXSkmJighKHRbMl08MHx8ZS5kYXRhLndpZHRoPHRbMl0pJiYoISh0WzNdPDB8fGUuZGF0YS5oZWlnaHQ8dFszXSkmJighKHRbMl08dFswXSkmJiEodFszXTx0WzFdKSkpKSkpfSxyLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuaW1hZ2VzW3RdO2UudmVyc2lvbj1yLnZlcnNpb24rMSx0aGlzLmltYWdlc1t0XT1lLHRoaXMudXBkYXRlZEltYWdlc1t0XT0hMH0sci5wcm90b3R5cGUucmVtb3ZlSW1hZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbWFnZXNbdF07ZGVsZXRlIHRoaXMuaW1hZ2VzW3RdLGRlbGV0ZSB0aGlzLnBhdHRlcm5zW3RdLGUudXNlckltYWdlJiZlLnVzZXJJbWFnZS5vblJlbW92ZSYmZS51c2VySW1hZ2Uub25SZW1vdmUoKX0sci5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmltYWdlcyl9LHIucHJvdG90eXBlLmdldEltYWdlcz1mdW5jdGlvbih0LGUpe3ZhciByPSEwO2lmKCF0aGlzLmlzTG9hZGVkKCkpZm9yKHZhciBuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLmltYWdlc1thXXx8KHI9ITEpfXRoaXMuaXNMb2FkZWQoKXx8cj90aGlzLl9ub3RpZnkodCxlKTp0aGlzLnJlcXVlc3RvcnMucHVzaCh7aWRzOnQsY2FsbGJhY2s6ZX0pfSxyLnByb3RvdHlwZS5fbm90aWZ5PWZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXt9LGk9MCxhPWU7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldO3RoaXMuaW1hZ2VzW29dfHx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlaW1hZ2VtaXNzaW5nIix7aWQ6b30pKTt2YXIgcz10aGlzLmltYWdlc1tvXTtzP25bb109e2RhdGE6cy5kYXRhLmNsb25lKCkscGl4ZWxSYXRpbzpzLnBpeGVsUmF0aW8sc2RmOnMuc2RmLHZlcnNpb246cy52ZXJzaW9uLHN0cmV0Y2hYOnMuc3RyZXRjaFgsc3RyZXRjaFk6cy5zdHJldGNoWSxjb250ZW50OnMuY29udGVudCxoYXNSZW5kZXJDYWxsYmFjazpCb29sZWFuKHMudXNlckltYWdlJiZzLnVzZXJJbWFnZS5yZW5kZXIpfTp0Lndhcm5PbmNlKCdJbWFnZSAiJytvKyciIGNvdWxkIG5vdCBiZSBsb2FkZWQuIFBsZWFzZSBtYWtlIHN1cmUgeW91IGhhdmUgYWRkZWQgdGhlIGltYWdlIHdpdGggbWFwLmFkZEltYWdlKCkgb3IgYSAic3ByaXRlIiBwcm9wZXJ0eSBpbiB5b3VyIHN0eWxlLiBZb3UgY2FuIHByb3ZpZGUgbWlzc2luZyBpbWFnZXMgYnkgbGlzdGVuaW5nIGZvciB0aGUgInN0eWxlaW1hZ2VtaXNzaW5nIiBtYXAgZXZlbnQuJyl9cihudWxsLG4pfSxyLnByb3RvdHlwZS5nZXRQaXhlbFNpemU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmF0bGFzSW1hZ2U7cmV0dXJue3dpZHRoOnQud2lkdGgsaGVpZ2h0OnQuaGVpZ2h0fX0sci5wcm90b3R5cGUuZ2V0UGF0dGVybj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnBhdHRlcm5zW2VdLG49dGhpcy5nZXRJbWFnZShlKTtpZighbilyZXR1cm4gbnVsbDtpZihyJiZyLnBvc2l0aW9uLnZlcnNpb249PT1uLnZlcnNpb24pcmV0dXJuIHIucG9zaXRpb247aWYocilyLnBvc2l0aW9uLnZlcnNpb249bi52ZXJzaW9uO2Vsc2V7dmFyIGk9e3c6bi5kYXRhLndpZHRoKzIsaDpuLmRhdGEuaGVpZ2h0KzIseDowLHk6MH0sYT1uZXcgdC5JbWFnZVBvc2l0aW9uKGksbik7dGhpcy5wYXR0ZXJuc1tlXT17YmluOmkscG9zaXRpb246YX19cmV0dXJuIHRoaXMuX3VwZGF0ZVBhdHRlcm5BdGxhcygpLHRoaXMucGF0dGVybnNbZV0ucG9zaXRpb259LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5nbDt0aGlzLmF0bGFzVGV4dHVyZT90aGlzLmRpcnR5JiYodGhpcy5hdGxhc1RleHR1cmUudXBkYXRlKHRoaXMuYXRsYXNJbWFnZSksdGhpcy5kaXJ0eT0hMSk6dGhpcy5hdGxhc1RleHR1cmU9bmV3IHQuVGV4dHVyZShlLHRoaXMuYXRsYXNJbWFnZSxyLlJHQkEpLHRoaXMuYXRsYXNUZXh0dXJlLmJpbmQoci5MSU5FQVIsci5DTEFNUF9UT19FREdFKX0sci5wcm90b3R5cGUuX3VwZGF0ZVBhdHRlcm5BdGxhcz1mdW5jdGlvbigpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0aGlzLnBhdHRlcm5zKWUucHVzaCh0aGlzLnBhdHRlcm5zW3JdLmJpbik7dmFyIG49dC5wb3RwYWNrKGUpLGk9bi53LGE9bi5oLG89dGhpcy5hdGxhc0ltYWdlO2Zvcih2YXIgcyBpbiBvLnJlc2l6ZSh7d2lkdGg6aXx8MSxoZWlnaHQ6YXx8MX0pLHRoaXMucGF0dGVybnMpe3ZhciBsPXRoaXMucGF0dGVybnNbc10uYmluLGM9bC54KzEsdT1sLnkrMSxmPXRoaXMuaW1hZ2VzW3NdLmRhdGEsaD1mLndpZHRoLHA9Zi5oZWlnaHQ7dC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMseTp1fSx7d2lkdGg6aCxoZWlnaHQ6cH0pLHQuUkdCQUltYWdlLmNvcHkoZixvLHt4OjAseTpwLTF9LHt4OmMseTp1LTF9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6MCx5OjB9LHt4OmMseTp1K3B9LHt3aWR0aDpoLGhlaWdodDoxfSksdC5SR0JBSW1hZ2UuY29weShmLG8se3g6aC0xLHk6MH0se3g6Yy0xLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KSx0LlJHQkFJbWFnZS5jb3B5KGYsbyx7eDowLHk6MH0se3g6YytoLHk6dX0se3dpZHRoOjEsaGVpZ2h0OnB9KX10aGlzLmRpcnR5PSEwfSxyLnByb3RvdHlwZS5iZWdpbkZyYW1lPWZ1bmN0aW9uKCl7dGhpcy5jYWxsYmFja0Rpc3BhdGNoZWRUaGlzRnJhbWU9e319LHIucHJvdG90eXBlLmRpc3BhdGNoUmVuZGVyQ2FsbGJhY2tzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07aWYoIXRoaXMuY2FsbGJhY2tEaXNwYXRjaGVkVGhpc0ZyYW1lW25dKXt0aGlzLmNhbGxiYWNrRGlzcGF0Y2hlZFRoaXNGcmFtZVtuXT0hMDt2YXIgaT10aGlzLmltYWdlc1tuXTtmKGkpJiZ0aGlzLnVwZGF0ZUltYWdlKG4saSl9fX0scn0odC5FdmVudGVkKTt2YXIgcD1nLGQ9ZyxtPTFlMjA7ZnVuY3Rpb24gZyh0LGUscixuLGksYSl7dGhpcy5mb250U2l6ZT10fHwyNCx0aGlzLmJ1ZmZlcj12b2lkIDA9PT1lPzM6ZSx0aGlzLmN1dG9mZj1ufHwuMjUsdGhpcy5mb250RmFtaWx5PWl8fCJzYW5zLXNlcmlmIix0aGlzLmZvbnRXZWlnaHQ9YXx8Im5vcm1hbCIsdGhpcy5yYWRpdXM9cnx8ODt2YXIgbz10aGlzLnNpemU9dGhpcy5mb250U2l6ZSsyKnRoaXMuYnVmZmVyO3RoaXMuY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLHRoaXMuY2FudmFzLndpZHRoPXRoaXMuY2FudmFzLmhlaWdodD1vLHRoaXMuY3R4PXRoaXMuY2FudmFzLmdldENvbnRleHQoIjJkIiksdGhpcy5jdHguZm9udD10aGlzLmZvbnRXZWlnaHQrIiAiK3RoaXMuZm9udFNpemUrInB4ICIrdGhpcy5mb250RmFtaWx5LHRoaXMuY3R4LnRleHRCYXNlbGluZT0ibWlkZGxlIix0aGlzLmN0eC5maWxsU3R5bGU9ImJsYWNrIix0aGlzLmdyaWRPdXRlcj1uZXcgRmxvYXQ2NEFycmF5KG8qbyksdGhpcy5ncmlkSW5uZXI9bmV3IEZsb2F0NjRBcnJheShvKm8pLHRoaXMuZj1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuZD1uZXcgRmxvYXQ2NEFycmF5KG8pLHRoaXMuej1uZXcgRmxvYXQ2NEFycmF5KG8rMSksdGhpcy52PW5ldyBJbnQxNkFycmF5KG8pLHRoaXMubWlkZGxlPU1hdGgucm91bmQoby8yKihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkdlY2tvLyIpPj0wPzEuMjoxKSl9ZnVuY3Rpb24gdih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9MDtzPGU7cysrKXtmb3IodmFyIGw9MDtsPHI7bCsrKW5bbF09dFtsKmUrc107Zm9yKHkobixpLGEsbyxyKSxsPTA7bDxyO2wrKyl0W2wqZStzXT1pW2xdfWZvcihsPTA7bDxyO2wrKyl7Zm9yKHM9MDtzPGU7cysrKW5bc109dFtsKmUrc107Zm9yKHkobixpLGEsbyxlKSxzPTA7czxlO3MrKyl0W2wqZStzXT1NYXRoLnNxcnQoaVtzXSl9fWZ1bmN0aW9uIHkodCxlLHIsbixpKXtyWzBdPTAsblswXT0tbSxuWzFdPSttO2Zvcih2YXIgYT0xLG89MDthPGk7YSsrKXtmb3IodmFyIHM9KHRbYV0rYSphLSh0W3Jbb11dK3Jbb10qcltvXSkpLygyKmEtMipyW29dKTtzPD1uW29dOylvLS0scz0odFthXSthKmEtKHRbcltvXV0rcltvXSpyW29dKSkvKDIqYS0yKnJbb10pO3JbKytvXT1hLG5bb109cyxuW28rMV09K219Zm9yKGE9MCxvPTA7YTxpO2ErKyl7Zm9yKDtuW28rMV08YTspbysrO2VbYV09KGEtcltvXSkqKGEtcltvXSkrdFtyW29dXX19Zy5wcm90b3R5cGUuZHJhdz1mdW5jdGlvbih0KXt0aGlzLmN0eC5jbGVhclJlY3QoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHRoaXMuY3R4LmZpbGxUZXh0KHQsdGhpcy5idWZmZXIsdGhpcy5taWRkbGUpO2Zvcih2YXIgZT10aGlzLmN0eC5nZXRJbWFnZURhdGEoMCwwLHRoaXMuc2l6ZSx0aGlzLnNpemUpLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRoaXMuc2l6ZSp0aGlzLnNpemUpLG49MDtuPHRoaXMuc2l6ZSp0aGlzLnNpemU7bisrKXt2YXIgaT1lLmRhdGFbNCpuKzNdLzI1NTt0aGlzLmdyaWRPdXRlcltuXT0xPT09aT8wOjA9PT1pP206TWF0aC5wb3coTWF0aC5tYXgoMCwuNS1pKSwyKSx0aGlzLmdyaWRJbm5lcltuXT0xPT09aT9tOjA9PT1pPzA6TWF0aC5wb3coTWF0aC5tYXgoMCxpLS41KSwyKX1mb3Iodih0aGlzLmdyaWRPdXRlcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksdih0aGlzLmdyaWRJbm5lcix0aGlzLnNpemUsdGhpcy5zaXplLHRoaXMuZix0aGlzLmQsdGhpcy52LHRoaXMueiksbj0wO248dGhpcy5zaXplKnRoaXMuc2l6ZTtuKyspe3ZhciBhPXRoaXMuZ3JpZE91dGVyW25dLXRoaXMuZ3JpZElubmVyW25dO3Jbbl09TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZCgyNTUtMjU1KihhL3RoaXMucmFkaXVzK3RoaXMuY3V0b2ZmKSkpKX1yZXR1cm4gcn0scC5kZWZhdWx0PWQ7dmFyIHg9ZnVuY3Rpb24odCxlKXt0aGlzLnJlcXVlc3RNYW5hZ2VyPXQsdGhpcy5sb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk9ZSx0aGlzLmVudHJpZXM9e319O3gucHJvdG90eXBlLnNldFVSTD1mdW5jdGlvbih0KXt0aGlzLnVybD10fSx4LnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9W107Zm9yKHZhciBhIGluIGUpZm9yKHZhciBvPTAscz1lW2FdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtpLnB1c2goe3N0YWNrOmEsaWQ6bH0pfXQuYXN5bmNBbGwoaSwoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YWNrLGk9dC5pZCxhPW4uZW50cmllc1tyXTthfHwoYT1uLmVudHJpZXNbcl09e2dseXBoczp7fSxyZXF1ZXN0czp7fSxyYW5nZXM6e319KTt2YXIgbz1hLmdseXBoc1tpXTtpZih2b2lkIDA9PT1vKXtpZihvPW4uX3RpbnlTREYoYSxyLGkpKXJldHVybiBhLmdseXBoc1tpXT1vLHZvaWQgZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO3ZhciBzPU1hdGguZmxvb3IoaS8yNTYpO2lmKDI1NipzPjY1NTM1KWUobmV3IEVycm9yKCJnbHlwaHMgPiA2NTUzNSBub3Qgc3VwcG9ydGVkIikpO2Vsc2UgaWYoYS5yYW5nZXNbc10pZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6b30pO2Vsc2V7dmFyIGw9YS5yZXF1ZXN0c1tzXTtsfHwobD1hLnJlcXVlc3RzW3NdPVtdLHgubG9hZEdseXBoUmFuZ2UocixzLG4udXJsLG4ucmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHQsZSl7aWYoZSl7Zm9yKHZhciByIGluIGUpbi5fZG9lc0NoYXJTdXBwb3J0TG9jYWxHbHlwaCgrcil8fChhLmdseXBoc1srcl09ZVsrcl0pO2EucmFuZ2VzW3NdPSEwfWZvcih2YXIgaT0wLG89bDtpPG8ubGVuZ3RoO2krPTEpeygwLG9baV0pKHQsZSl9ZGVsZXRlIGEucmVxdWVzdHNbc119KSkpLGwucHVzaCgoZnVuY3Rpb24odCxuKXt0P2UodCk6biYmZShudWxsLHtzdGFjazpyLGlkOmksZ2x5cGg6bltpXXx8bnVsbH0pfSkpfX1lbHNlIGUobnVsbCx7c3RhY2s6cixpZDppLGdseXBoOm99KX0pLChmdW5jdGlvbih0LGUpe2lmKHQpcih0KTtlbHNlIGlmKGUpe2Zvcih2YXIgbj17fSxpPTAsYT1lO2k8YS5sZW5ndGg7aSs9MSl7dmFyIG89YVtpXSxzPW8uc3RhY2ssbD1vLmlkLGM9by5nbHlwaDsobltzXXx8KG5bc109e30pKVtsXT1jJiZ7aWQ6Yy5pZCxiaXRtYXA6Yy5iaXRtYXAuY2xvbmUoKSxtZXRyaWNzOmMubWV0cmljc319cihudWxsLG4pfX0pKX0seC5wcm90b3R5cGUuX2RvZXNDaGFyU3VwcG9ydExvY2FsR2x5cGg9ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseSYmKHQuaXNDaGFyWyJDSksgVW5pZmllZCBJZGVvZ3JhcGhzIl0oZSl8fHQuaXNDaGFyWyJIYW5ndWwgU3lsbGFibGVzIl0oZSl8fHQuaXNDaGFyLkhpcmFnYW5hKGUpfHx0LmlzQ2hhci5LYXRha2FuYShlKSl9LHgucHJvdG90eXBlLl90aW55U0RGPWZ1bmN0aW9uKGUscixuKXt2YXIgaT10aGlzLmxvY2FsSWRlb2dyYXBoRm9udEZhbWlseTtpZihpJiZ0aGlzLl9kb2VzQ2hhclN1cHBvcnRMb2NhbEdseXBoKG4pKXt2YXIgYT1lLnRpbnlTREY7aWYoIWEpe3ZhciBvPSI0MDAiOy9ib2xkL2kudGVzdChyKT9vPSI5MDAiOi9tZWRpdW0vaS50ZXN0KHIpP289IjUwMCI6L2xpZ2h0L2kudGVzdChyKSYmKG89IjIwMCIpLGE9ZS50aW55U0RGPW5ldyB4LlRpbnlTREYoMjQsMyw4LC4yNSxpLG8pfXJldHVybntpZDpuLGJpdG1hcDpuZXcgdC5BbHBoYUltYWdlKHt3aWR0aDozMCxoZWlnaHQ6MzB9LGEuZHJhdyhTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKSksbWV0cmljczp7d2lkdGg6MjQsaGVpZ2h0OjI0LGxlZnQ6MCx0b3A6LTgsYWR2YW5jZToyNH19fX0seC5sb2FkR2x5cGhSYW5nZT1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPTI1NipyLHM9bysyNTUsbD1pLnRyYW5zZm9ybVJlcXVlc3QoaS5ub3JtYWxpemVHbHlwaHNVUkwobikucmVwbGFjZSgie2ZvbnRzdGFja30iLGUpLnJlcGxhY2UoIntyYW5nZX0iLG8rIi0iK3MpLHQuUmVzb3VyY2VUeXBlLkdseXBocyk7dC5nZXRBcnJheUJ1ZmZlcihsLChmdW5jdGlvbihlLHIpe2lmKGUpYShlKTtlbHNlIGlmKHIpe2Zvcih2YXIgbj17fSxpPTAsbz10LnBhcnNlR2x5cGhQQkYocik7aTxvLmxlbmd0aDtpKz0xKXt2YXIgcz1vW2ldO25bcy5pZF09c31hKG51bGwsbil9fSkpfSx4LlRpbnlTREY9cDt2YXIgYj1mdW5jdGlvbigpe3RoaXMuc3BlY2lmaWNhdGlvbj10LnN0eWxlU3BlYy5saWdodC5wb3NpdGlvbn07Yi5wcm90b3R5cGUucG9zc2libHlFdmFsdWF0ZT1mdW5jdGlvbihlLHIpe3JldHVybiB0LnNwaGVyaWNhbFRvQ2FydGVzaWFuKGUuZXhwcmVzc2lvbi5ldmFsdWF0ZShyKSl9LGIucHJvdG90eXBlLmludGVycG9sYXRlPWZ1bmN0aW9uKGUscixuKXtyZXR1cm57eDp0Lm51bWJlcihlLngsci54LG4pLHk6dC5udW1iZXIoZS55LHIueSxuKSx6OnQubnVtYmVyKGUueixyLnosbil9fTt2YXIgXz1uZXcgdC5Qcm9wZXJ0aWVzKHthbmNob3I6bmV3IHQuRGF0YUNvbnN0YW50UHJvcGVydHkodC5zdHlsZVNwZWMubGlnaHQuYW5jaG9yKSxwb3NpdGlvbjpuZXcgYixjb2xvcjpuZXcgdC5EYXRhQ29uc3RhbnRQcm9wZXJ0eSh0LnN0eWxlU3BlYy5saWdodC5jb2xvciksaW50ZW5zaXR5Om5ldyB0LkRhdGFDb25zdGFudFByb3BlcnR5KHQuc3R5bGVTcGVjLmxpZ2h0LmludGVuc2l0eSl9KSx3PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocil7ZS5jYWxsKHRoaXMpLHRoaXMuX3RyYW5zaXRpb25hYmxlPW5ldyB0LlRyYW5zaXRpb25hYmxlKF8pLHRoaXMuc2V0TGlnaHQociksdGhpcy5fdHJhbnNpdGlvbmluZz10aGlzLl90cmFuc2l0aW9uYWJsZS51bnRyYW5zaXRpb25lZCgpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXRMaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uYWJsZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUuc2V0TGlnaHQ9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDA9PT1yJiYocj17fSksIXRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVMaWdodCxlLHIpKWZvcih2YXIgbiBpbiBlKXt2YXIgaT1lW25dO3QuZW5kc1dpdGgobiwiLXRyYW5zaXRpb24iKT90aGlzLl90cmFuc2l0aW9uYWJsZS5zZXRUcmFuc2l0aW9uKG4uc2xpY2UoMCwtIi10cmFuc2l0aW9uIi5sZW5ndGgpLGkpOnRoaXMuX3RyYW5zaXRpb25hYmxlLnNldFZhbHVlKG4saSl9fSxyLnByb3RvdHlwZS51cGRhdGVUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXt0aGlzLl90cmFuc2l0aW9uaW5nPXRoaXMuX3RyYW5zaXRpb25hYmxlLnRyYW5zaXRpb25lZCh0LHRoaXMuX3RyYW5zaXRpb25pbmcpfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25pbmcuaGFzVHJhbnNpdGlvbigpfSxyLnByb3RvdHlwZS5yZWNhbGN1bGF0ZT1mdW5jdGlvbih0KXt0aGlzLnByb3BlcnRpZXM9dGhpcy5fdHJhbnNpdGlvbmluZy5wb3NzaWJseUV2YWx1YXRlKHQpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybighbnx8ITEhPT1uLnZhbGlkYXRlKSYmdC5lbWl0VmFsaWRhdGlvbkVycm9ycyh0aGlzLGUuY2FsbCh0LnZhbGlkYXRlU3R5bGUsdC5leHRlbmQoe3ZhbHVlOnIsc3R5bGU6e2dseXBoczohMCxzcHJpdGU6ITB9LHN0eWxlU3BlYzp0LnN0eWxlU3BlY30pKSl9LHJ9KHQuRXZlbnRlZCksVD1mdW5jdGlvbih0LGUpe3RoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMubmV4dFJvdz0wLHRoaXMuZGF0YT1uZXcgVWludDhBcnJheSh0aGlzLndpZHRoKnRoaXMuaGVpZ2h0KSx0aGlzLmRhc2hFbnRyeT17fX07VC5wcm90b3R5cGUuZ2V0RGFzaD1mdW5jdGlvbih0LGUpe3ZhciByPXQuam9pbigiLCIpK1N0cmluZyhlKTtyZXR1cm4gdGhpcy5kYXNoRW50cnlbcl18fCh0aGlzLmRhc2hFbnRyeVtyXT10aGlzLmFkZERhc2godCxlKSksdGhpcy5kYXNoRW50cnlbcl19LFQucHJvdG90eXBlLmdldERhc2hSYW5nZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVtdLGk9dC5sZW5ndGglMj09MT8tdFt0Lmxlbmd0aC0xXSpyOjAsYT10WzBdKnIsbz0hMDtuLnB1c2goe2xlZnQ6aSxyaWdodDphLGlzRGFzaDpvLHplcm9MZW5ndGg6MD09PXRbMF19KTtmb3IodmFyIHM9dFswXSxsPTE7bDx0Lmxlbmd0aDtsKyspe289IW87dmFyIGM9dFtsXTtpPXMqcixhPShzKz1jKSpyLG4ucHVzaCh7bGVmdDppLHJpZ2h0OmEsaXNEYXNoOm8semVyb0xlbmd0aDowPT09Y30pfXJldHVybiBufSxULnByb3RvdHlwZS5hZGRSb3VuZERhc2g9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLzIsaT0tcjtpPD1yO2krKylmb3IodmFyIGE9dGhpcy5uZXh0Um93K3IraSxvPXRoaXMud2lkdGgqYSxzPTAsbD10W3NdLGM9MDtjPHRoaXMud2lkdGg7YysrKXtjL2wucmlnaHQ+MSYmKGw9dFsrK3NdKTt2YXIgdT1NYXRoLmFicyhjLWwubGVmdCksZj1NYXRoLmFicyhjLWwucmlnaHQpLGg9TWF0aC5taW4odSxmKSxwPXZvaWQgMCxkPWkvcioobisxKTtpZihsLmlzRGFzaCl7dmFyIG09bi1NYXRoLmFicyhkKTtwPU1hdGguc3FydChoKmgrbSptKX1lbHNlIHA9bi1NYXRoLnNxcnQoaCpoK2QqZCk7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUscCsxMjgpKX19LFQucHJvdG90eXBlLmFkZFJlZ3VsYXJEYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10W2VdLG49dFtlKzFdO3IuemVyb0xlbmd0aD90LnNwbGljZShlLDEpOm4mJm4uaXNEYXNoPT09ci5pc0Rhc2gmJihuLmxlZnQ9ci5sZWZ0LHQuc3BsaWNlKGUsMSkpfXZhciBpPXRbMF0sYT10W3QubGVuZ3RoLTFdO2kuaXNEYXNoPT09YS5pc0Rhc2gmJihpLmxlZnQ9YS5sZWZ0LXRoaXMud2lkdGgsYS5yaWdodD1pLnJpZ2h0K3RoaXMud2lkdGgpO2Zvcih2YXIgbz10aGlzLndpZHRoKnRoaXMubmV4dFJvdyxzPTAsbD10W3NdLGM9MDtjPHRoaXMud2lkdGg7YysrKXtjL2wucmlnaHQ+MSYmKGw9dFsrK3NdKTt2YXIgdT1NYXRoLmFicyhjLWwubGVmdCksZj1NYXRoLmFicyhjLWwucmlnaHQpLGg9TWF0aC5taW4odSxmKSxwPWwuaXNEYXNoP2g6LWg7dGhpcy5kYXRhW28rY109TWF0aC5tYXgoMCxNYXRoLm1pbigyNTUscCsxMjgpKX19LFQucHJvdG90eXBlLmFkZERhc2g9ZnVuY3Rpb24oZSxyKXt2YXIgbj1yPzc6MCxpPTIqbisxO2lmKHRoaXMubmV4dFJvdytpPnRoaXMuaGVpZ2h0KXJldHVybiB0Lndhcm5PbmNlKCJMaW5lQXRsYXMgb3V0IG9mIHNwYWNlIiksbnVsbDtmb3IodmFyIGE9MCxvPTA7bzxlLmxlbmd0aDtvKyspYSs9ZVtvXTtpZigwIT09YSl7dmFyIHM9dGhpcy53aWR0aC9hLGw9dGhpcy5nZXREYXNoUmFuZ2VzKGUsdGhpcy53aWR0aCxzKTtyP3RoaXMuYWRkUm91bmREYXNoKGwscyxuKTp0aGlzLmFkZFJlZ3VsYXJEYXNoKGwpfXZhciBjPXt5Oih0aGlzLm5leHRSb3crbisuNSkvdGhpcy5oZWlnaHQsaGVpZ2h0OjIqbi90aGlzLmhlaWdodCx3aWR0aDphfTtyZXR1cm4gdGhpcy5uZXh0Um93Kz1pLHRoaXMuZGlydHk9ITAsY30sVC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0KXt2YXIgZT10LmdsO3RoaXMudGV4dHVyZT8oZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSx0aGlzLmRpcnR5JiYodGhpcy5kaXJ0eT0hMSxlLnRleFN1YkltYWdlMkQoZS5URVhUVVJFXzJELDAsMCwwLHRoaXMud2lkdGgsdGhpcy5oZWlnaHQsZS5BTFBIQSxlLlVOU0lHTkVEX0JZVEUsdGhpcy5kYXRhKSkpOih0aGlzLnRleHR1cmU9ZS5jcmVhdGVUZXh0dXJlKCksZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdGhpcy50ZXh0dXJlKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5SRVBFQVQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLlJFUEVBVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUlOX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLkxJTkVBUiksZS50ZXhJbWFnZTJEKGUuVEVYVFVSRV8yRCwwLGUuQUxQSEEsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLGUuQUxQSEEsZS5VTlNJR05FRF9CWVRFLHRoaXMuZGF0YSkpfTt2YXIgaz1mdW5jdGlvbiBlKHIsbil7dGhpcy53b3JrZXJQb29sPXIsdGhpcy5hY3RvcnM9W10sdGhpcy5jdXJyZW50QWN0b3I9MCx0aGlzLmlkPXQudW5pcXVlSWQoKTtmb3IodmFyIGk9dGhpcy53b3JrZXJQb29sLmFjcXVpcmUodGhpcy5pZCksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdLHM9bmV3IGUuQWN0b3IobyxuLHRoaXMuaWQpO3MubmFtZT0iV29ya2VyICIrYSx0aGlzLmFjdG9ycy5wdXNoKHMpfX07ZnVuY3Rpb24gQShlLHIsbil7dmFyIGk9ZnVuY3Rpb24oaSxhKXtpZihpKXJldHVybiBuKGkpO2lmKGEpe3ZhciBvPXQucGljayh0LmV4dGVuZChhLGUpLFsidGlsZXMiLCJtaW56b29tIiwibWF4em9vbSIsImF0dHJpYnV0aW9uIiwibWFwYm94X2xvZ28iLCJib3VuZHMiLCJzY2hlbWUiLCJ0aWxlU2l6ZSIsImVuY29kaW5nIl0pO2EudmVjdG9yX2xheWVycyYmKG8udmVjdG9yTGF5ZXJzPWEudmVjdG9yX2xheWVycyxvLnZlY3RvckxheWVySWRzPW8udmVjdG9yTGF5ZXJzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkpLG8udGlsZXM9ci5jYW5vbmljYWxpemVUaWxlc2V0KG8sZS51cmwpLG4obnVsbCxvKX19O3JldHVybiBlLnVybD90LmdldEpTT04oci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU291cmNlVVJMKGUudXJsKSx0LlJlc291cmNlVHlwZS5Tb3VyY2UpLGkpOnQuYnJvd3Nlci5mcmFtZSgoZnVuY3Rpb24oKXtyZXR1cm4gaShudWxsLGUpfSkpfWsucHJvdG90eXBlLmJyb2FkY2FzdD1mdW5jdGlvbihlLHIsbil7bj1ufHxmdW5jdGlvbigpe30sdC5hc3luY0FsbCh0aGlzLmFjdG9ycywoZnVuY3Rpb24odCxuKXt0LnNlbmQoZSxyLG4pfSksbil9LGsucHJvdG90eXBlLmdldEFjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudEFjdG9yPSh0aGlzLmN1cnJlbnRBY3RvcisxKSV0aGlzLmFjdG9ycy5sZW5ndGgsdGhpcy5hY3RvcnNbdGhpcy5jdXJyZW50QWN0b3JdfSxrLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLmFjdG9ycy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnJlbW92ZSgpfSkpLHRoaXMuYWN0b3JzPVtdLHRoaXMud29ya2VyUG9vbC5yZWxlYXNlKHRoaXMuaWQpfSxrLkFjdG9yPXQuQWN0b3I7dmFyIE09ZnVuY3Rpb24oZSxyLG4pe3RoaXMuYm91bmRzPXQuTG5nTGF0Qm91bmRzLmNvbnZlcnQodGhpcy52YWxpZGF0ZUJvdW5kcyhlKSksdGhpcy5taW56b29tPXJ8fDAsdGhpcy5tYXh6b29tPW58fDI0fTtNLnByb3RvdHlwZS52YWxpZGF0ZUJvdW5kcz1mdW5jdGlvbih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoP1tNYXRoLm1heCgtMTgwLHRbMF0pLE1hdGgubWF4KC05MCx0WzFdKSxNYXRoLm1pbigxODAsdFsyXSksTWF0aC5taW4oOTAsdFszXSldOlstMTgwLC05MCwxODAsOTBdfSxNLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihlKXt2YXIgcj1NYXRoLnBvdygyLGUueiksbj1NYXRoLmZsb29yKHQubWVyY2F0b3JYZnJvbUxuZyh0aGlzLmJvdW5kcy5nZXRXZXN0KCkpKnIpLGk9TWF0aC5mbG9vcih0Lm1lcmNhdG9yWWZyb21MYXQodGhpcy5ib3VuZHMuZ2V0Tm9ydGgoKSkqciksYT1NYXRoLmNlaWwodC5tZXJjYXRvclhmcm9tTG5nKHRoaXMuYm91bmRzLmdldEVhc3QoKSkqciksbz1NYXRoLmNlaWwodC5tZXJjYXRvcllmcm9tTGF0KHRoaXMuYm91bmRzLmdldFNvdXRoKCkpKnIpO3JldHVybiBlLng+PW4mJmUueDxhJiZlLnk+PWkmJmUueTxvfTt2YXIgUz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2lmKGUuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy50eXBlPSJ2ZWN0b3IiLHRoaXMubWluem9vbT0wLHRoaXMubWF4em9vbT0yMix0aGlzLnNjaGVtZT0ieHl6Iix0aGlzLnRpbGVTaXplPTUxMix0aGlzLnJlcGFyc2VPdmVyc2NhbGVkPSEwLHRoaXMuaXNUaWxlQ2xpcHBlZD0hMCx0aGlzLl9sb2FkZWQ9ITEsdC5leHRlbmQodGhpcyx0LnBpY2sobixbInVybCIsInNjaGVtZSIsInRpbGVTaXplIiwicHJvbW90ZUlkIl0pKSx0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJ2ZWN0b3IifSxuKSx0aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmc9bi5jb2xsZWN0UmVzb3VyY2VUaW1pbmcsNTEyIT09dGhpcy50aWxlU2l6ZSl0aHJvdyBuZXcgRXJyb3IoInZlY3RvciB0aWxlIHNvdXJjZXMgbXVzdCBoYXZlIGEgdGlsZVNpemUgb2YgNTEyIik7dGhpcy5zZXRFdmVudGVkUGFyZW50KGEpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1BKHRoaXMuX29wdGlvbnMsdGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLChmdW5jdGlvbihyLG4pe2UuX3RpbGVKU09OUmVxdWVzdD1udWxsLGUuX2xvYWRlZD0hMCxyP2UuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTpuJiYodC5leHRlbmQoZSxuKSxuLmJvdW5kcyYmKGUudGlsZUJvdW5kcz1uZXcgTShuLmJvdW5kcyxlLm1pbnpvb20sZS5tYXh6b29tKSksdC5wb3N0VHVybnN0aWxlRXZlbnQobi50aWxlcyxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX2N1c3RvbUFjY2Vzc1Rva2VuKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuLGUubWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW4pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSksZS5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InNvdXJjZSIsc291cmNlRGF0YVR5cGU6ImNvbnRlbnQifSkpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUuaGFzVGlsZT1mdW5jdGlvbih0KXtyZXR1cm4hdGhpcy50aWxlQm91bmRzfHx0aGlzLnRpbGVCb3VuZHMuY29udGFpbnModC5jYW5vbmljYWwpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3RpbGVKU09OUmVxdWVzdCYmKHRoaXMuX3RpbGVKU09OUmVxdWVzdC5jYW5jZWwoKSx0aGlzLl90aWxlSlNPTlJlcXVlc3Q9bnVsbCl9LHIucHJvdG90eXBlLnNlcmlhbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7fSx0aGlzLl9vcHRpb25zKX0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplVGlsZVVSTChlLnRpbGVJRC5jYW5vbmljYWwudXJsKHRoaXMudGlsZXMsdGhpcy5zY2hlbWUpKSxpPXtyZXF1ZXN0OnRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksdWlkOmUudWlkLHRpbGVJRDplLnRpbGVJRCx6b29tOmUudGlsZUlELm92ZXJzY2FsZWRaLHRpbGVTaXplOnRoaXMudGlsZVNpemUqZS50aWxlSUQub3ZlcnNjYWxlRmFjdG9yKCksdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWQscGl4ZWxSYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxzaG93Q29sbGlzaW9uQm94ZXM6dGhpcy5tYXAuc2hvd0NvbGxpc2lvbkJveGVzLHByb21vdGVJZDp0aGlzLnByb21vdGVJZH07ZnVuY3Rpb24gYShuLGkpe3JldHVybiBkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZD9yKG51bGwpOm4mJjQwNCE9PW4uc3RhdHVzP3Iobik6KGkmJmkucmVzb3VyY2VUaW1pbmcmJihlLnJlc291cmNlVGltaW5nPWkucmVzb3VyY2VUaW1pbmcpLHRoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZpJiZlLnNldEV4cGlyeURhdGEoaSksZS5sb2FkVmVjdG9yRGF0YShpLHRoaXMubWFwLnBhaW50ZXIpLHQuY2FjaGVFbnRyeVBvc3NpYmx5QWRkZWQodGhpcy5kaXNwYXRjaGVyKSxyKG51bGwpLHZvaWQoZS5yZWxvYWRDYWxsYmFjayYmKHRoaXMubG9hZFRpbGUoZSxlLnJlbG9hZENhbGxiYWNrKSxlLnJlbG9hZENhbGxiYWNrPW51bGwpKSl9aS5yZXF1ZXN0LmNvbGxlY3RSZXNvdXJjZVRpbWluZz10aGlzLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcsZS5hY3RvciYmImV4cGlyZWQiIT09ZS5zdGF0ZT8ibG9hZGluZyI9PT1lLnN0YXRlP2UucmVsb2FkQ2FsbGJhY2s9cjplLnJlcXVlc3Q9ZS5hY3Rvci5zZW5kKCJyZWxvYWRUaWxlIixpLGEuYmluZCh0aGlzKSk6KGUuYWN0b3I9dGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCksZS5yZXF1ZXN0PWUuYWN0b3Iuc2VuZCgibG9hZFRpbGUiLGksYS5iaW5kKHRoaXMpKSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksdC5hY3RvciYmdC5hY3Rvci5zZW5kKCJhYm9ydFRpbGUiLHt1aWQ6dC51aWQsdHlwZTp0aGlzLnR5cGUsc291cmNlOnRoaXMuaWR9LHZvaWQgMCl9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC51bmxvYWRWZWN0b3JEYXRhKCksdC5hY3RvciYmdC5hY3Rvci5zZW5kKCJyZW1vdmVUaWxlIix7dWlkOnQudWlkLHR5cGU6dGhpcy50eXBlLHNvdXJjZTp0aGlzLmlkfSx2b2lkIDApfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHJ9KHQuRXZlbnRlZCksRT1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy5kaXNwYXRjaGVyPWksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMudHlwZT0icmFzdGVyIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy5yb3VuZFpvb209ITAsdGhpcy5zY2hlbWU9Inh5eiIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5fbG9hZGVkPSExLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe3R5cGU6InJhc3RlciJ9LG4pLHQuZXh0ZW5kKHRoaXMsdC5waWNrKG4sWyJ1cmwiLCJzY2hlbWUiLCJ0aWxlU2l6ZSJdKSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InNvdXJjZSJ9KSksdGhpcy5fdGlsZUpTT05SZXF1ZXN0PUEodGhpcy5fb3B0aW9ucyx0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIsKGZ1bmN0aW9uKHIsbil7ZS5fdGlsZUpTT05SZXF1ZXN0PW51bGwsZS5fbG9hZGVkPSEwLHI/ZS5maXJlKG5ldyB0LkVycm9yRXZlbnQocikpOm4mJih0LmV4dGVuZChlLG4pLG4uYm91bmRzJiYoZS50aWxlQm91bmRzPW5ldyBNKG4uYm91bmRzLGUubWluem9vbSxlLm1heHpvb20pKSx0LnBvc3RUdXJuc3RpbGVFdmVudChuLnRpbGVzKSx0LnBvc3RNYXBMb2FkRXZlbnQobi50aWxlcyxlLm1hcC5fZ2V0TWFwSWQoKSxlLm1hcC5fcmVxdWVzdE1hbmFnZXIuX3NrdVRva2VuKSxlLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifSkpLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In0pKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3RoaXMubWFwPXQsdGhpcy5sb2FkKCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fdGlsZUpTT05SZXF1ZXN0JiYodGhpcy5fdGlsZUpTT05SZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3RpbGVKU09OUmVxdWVzdD1udWxsKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHQuZXh0ZW5kKHt9LHRoaXMuX29wdGlvbnMpfSxyLnByb3RvdHlwZS5oYXNUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiF0aGlzLnRpbGVCb3VuZHN8fHRoaXMudGlsZUJvdW5kcy5jb250YWlucyh0LmNhbm9uaWNhbCl9LHIucHJvdG90eXBlLmxvYWRUaWxlPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcyxpPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZS5yZXF1ZXN0PXQuZ2V0SW1hZ2UodGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5UaWxlKSwoZnVuY3Rpb24oaSxhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKGkpZS5zdGF0ZT0iZXJyb3JlZCIscihpKTtlbHNlIGlmKGEpe24ubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89bi5tYXAucGFpbnRlci5jb250ZXh0LHM9by5nbDtlLnRleHR1cmU9bi5tYXAucGFpbnRlci5nZXRUaWxlVGV4dHVyZShhLndpZHRoKSxlLnRleHR1cmU/ZS50ZXh0dXJlLnVwZGF0ZShhLHt1c2VNaXBtYXA6ITB9KTooZS50ZXh0dXJlPW5ldyB0LlRleHR1cmUobyxhLHMuUkdCQSx7dXNlTWlwbWFwOiEwfSksZS50ZXh0dXJlLmJpbmQocy5MSU5FQVIscy5DTEFNUF9UT19FREdFLHMuTElORUFSX01JUE1BUF9ORUFSRVNUKSxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyYmcy50ZXhQYXJhbWV0ZXJmKHMuVEVYVFVSRV8yRCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCxvLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heCkpLGUuc3RhdGU9ImxvYWRlZCIsdC5jYWNoZUVudHJ5UG9zc2libHlBZGRlZChuLmRpc3BhdGNoZXIpLHIobnVsbCl9fSkpfSxyLnByb3RvdHlwZS5hYm9ydFRpbGU9ZnVuY3Rpb24odCxlKXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksZSgpfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7dC50ZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LnRleHR1cmUpLGUoKX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSxhKXtlLmNhbGwodGhpcyxyLG4saSxhKSx0aGlzLnR5cGU9InJhc3Rlci1kZW0iLHRoaXMubWF4em9vbT0yMix0aGlzLl9vcHRpb25zPXQuZXh0ZW5kKHt0eXBlOiJyYXN0ZXItZGVtIn0sbiksdGhpcy5lbmNvZGluZz1uLmVuY29kaW5nfHwibWFwYm94In1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6InJhc3Rlci1kZW0iLHVybDp0aGlzLnVybCx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHRpbGVzOnRoaXMudGlsZXMsYm91bmRzOnRoaXMuYm91bmRzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVUaWxlVVJMKGUudGlsZUlELmNhbm9uaWNhbC51cmwodGhpcy50aWxlcyx0aGlzLnNjaGVtZSksdGhpcy50aWxlU2l6ZSk7ZnVuY3Rpb24gaSh0LG4pe3QmJihlLnN0YXRlPSJlcnJvcmVkIixyKHQpKSxuJiYoZS5kZW09bixlLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMCxlLnN0YXRlPSJsb2FkZWQiLHIobnVsbCkpfWUucmVxdWVzdD10LmdldEltYWdlKHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlci50cmFuc2Zvcm1SZXF1ZXN0KG4sdC5SZXNvdXJjZVR5cGUuVGlsZSksZnVuY3Rpb24obixhKXtpZihkZWxldGUgZS5yZXF1ZXN0LGUuYWJvcnRlZCllLnN0YXRlPSJ1bmxvYWRlZCIscihudWxsKTtlbHNlIGlmKG4pZS5zdGF0ZT0iZXJyb3JlZCIscihuKTtlbHNlIGlmKGEpe3RoaXMubWFwLl9yZWZyZXNoRXhwaXJlZFRpbGVzJiZlLnNldEV4cGlyeURhdGEoYSksZGVsZXRlIGEuY2FjaGVDb250cm9sLGRlbGV0ZSBhLmV4cGlyZXM7dmFyIG89dC53aW5kb3cuSW1hZ2VCaXRtYXAmJmEgaW5zdGFuY2VvZiB0LndpbmRvdy5JbWFnZUJpdG1hcCYmdC5vZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKT9hOnQuYnJvd3Nlci5nZXRJbWFnZURhdGEoYSwxKSxzPXt1aWQ6ZS51aWQsY29vcmQ6ZS50aWxlSUQsc291cmNlOnRoaXMuaWQscmF3SW1hZ2VEYXRhOm8sZW5jb2Rpbmc6dGhpcy5lbmNvZGluZ307ZS5hY3RvciYmImV4cGlyZWQiIT09ZS5zdGF0ZXx8KGUuYWN0b3I9dGhpcy5kaXNwYXRjaGVyLmdldEFjdG9yKCksZS5hY3Rvci5zZW5kKCJsb2FkREVNVGlsZSIscyxpLmJpbmQodGhpcykpKX19LmJpbmQodGhpcykpLGUubmVpZ2hib3JpbmdUaWxlcz10aGlzLl9nZXROZWlnaGJvcmluZ1RpbGVzKGUudGlsZUlEKX0sci5wcm90b3R5cGUuX2dldE5laWdoYm9yaW5nVGlsZXM9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5jYW5vbmljYWwsbj1NYXRoLnBvdygyLHIueiksaT0oci54LTErbiklbixhPTA9PT1yLng/ZS53cmFwLTE6ZS53cmFwLG89KHIueCsxK24pJW4scz1yLngrMT09PW4/ZS53cmFwKzE6ZS53cmFwLGw9e307cmV0dXJuIGxbbmV3IHQuT3ZlcnNjYWxlZFRpbGVJRChlLm92ZXJzY2FsZWRaLGEsci56LGksci55KS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixzLHIueixvLHIueSkua2V5XT17YmFja2ZpbGxlZDohMX0sci55PjAmJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueS0xKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnktMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLHIueSsxPG4mJihsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixhLHIueixpLHIueSsxKS5rZXldPXtiYWNrZmlsbGVkOiExfSxsW25ldyB0Lk92ZXJzY2FsZWRUaWxlSUQoZS5vdmVyc2NhbGVkWixlLndyYXAsci56LHIueCxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0sbFtuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUub3ZlcnNjYWxlZFoscyxyLnosbyxyLnkrMSkua2V5XT17YmFja2ZpbGxlZDohMX0pLGx9LHIucHJvdG90eXBlLnVubG9hZFRpbGU9ZnVuY3Rpb24odCl7dC5kZW1UZXh0dXJlJiZ0aGlzLm1hcC5wYWludGVyLnNhdmVUaWxlVGV4dHVyZSh0LmRlbVRleHR1cmUpLHQuZmJvJiYodC5mYm8uZGVzdHJveSgpLGRlbGV0ZSB0LmZibyksdC5kZW0mJmRlbGV0ZSB0LmRlbSxkZWxldGUgdC5uZWlnaGJvcmluZ1RpbGVzLHQuc3RhdGU9InVubG9hZGVkIix0LmFjdG9yJiZ0LmFjdG9yLnNlbmQoInJlbW92ZURFTVRpbGUiLHt1aWQ6dC51aWQsc291cmNlOnRoaXMuaWR9KX0scn0oRSksQz1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzKSx0aGlzLmlkPXIsdGhpcy50eXBlPSJnZW9qc29uIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MTgsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy5pc1RpbGVDbGlwcGVkPSEwLHRoaXMucmVwYXJzZU92ZXJzY2FsZWQ9ITAsdGhpcy5fcmVtb3ZlZD0hMSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5hY3Rvcj1pLmdldEFjdG9yKCksdGhpcy5zZXRFdmVudGVkUGFyZW50KGEpLHRoaXMuX2RhdGE9bi5kYXRhLHRoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sbiksdGhpcy5fY29sbGVjdFJlc291cmNlVGltaW5nPW4uY29sbGVjdFJlc291cmNlVGltaW5nLHRoaXMuX3Jlc291cmNlVGltaW5nPVtdLHZvaWQgMCE9PW4ubWF4em9vbSYmKHRoaXMubWF4em9vbT1uLm1heHpvb20pLG4udHlwZSYmKHRoaXMudHlwZT1uLnR5cGUpLG4uYXR0cmlidXRpb24mJih0aGlzLmF0dHJpYnV0aW9uPW4uYXR0cmlidXRpb24pLHRoaXMucHJvbW90ZUlkPW4ucHJvbW90ZUlkO3ZhciBvPXQuRVhURU5UL3RoaXMudGlsZVNpemU7dGhpcy53b3JrZXJPcHRpb25zPXQuZXh0ZW5kKHtzb3VyY2U6dGhpcy5pZCxjbHVzdGVyOm4uY2x1c3Rlcnx8ITEsZ2VvanNvblZ0T3B0aW9uczp7YnVmZmVyOih2b2lkIDAhPT1uLmJ1ZmZlcj9uLmJ1ZmZlcjoxMjgpKm8sdG9sZXJhbmNlOih2b2lkIDAhPT1uLnRvbGVyYW5jZT9uLnRvbGVyYW5jZTouMzc1KSpvLGV4dGVudDp0LkVYVEVOVCxtYXhab29tOnRoaXMubWF4em9vbSxsaW5lTWV0cmljczpuLmxpbmVNZXRyaWNzfHwhMSxnZW5lcmF0ZUlkOm4uZ2VuZXJhdGVJZHx8ITF9LHN1cGVyY2x1c3Rlck9wdGlvbnM6e21heFpvb206dm9pZCAwIT09bi5jbHVzdGVyTWF4Wm9vbT9NYXRoLm1pbihuLmNsdXN0ZXJNYXhab29tLHRoaXMubWF4em9vbS0xKTp0aGlzLm1heHpvb20tMSxleHRlbnQ6dC5FWFRFTlQscmFkaXVzOihuLmNsdXN0ZXJSYWRpdXN8fDUwKSpvLGxvZzohMSxnZW5lcmF0ZUlkOm4uZ2VuZXJhdGVJZHx8ITF9LGNsdXN0ZXJQcm9wZXJ0aWVzOm4uY2x1c3RlclByb3BlcnRpZXN9LG4ud29ya2VyT3B0aW9ucyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHtkYXRhVHlwZToic291cmNlIn0pKSx0aGlzLl91cGRhdGVXb3JrZXJEYXRhKChmdW5jdGlvbihyKXtpZihyKWUuZmlyZShuZXcgdC5FcnJvckV2ZW50KHIpKTtlbHNle3ZhciBuPXtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToibWV0YWRhdGEifTtlLl9jb2xsZWN0UmVzb3VyY2VUaW1pbmcmJmUuX3Jlc291cmNlVGltaW5nJiZlLl9yZXNvdXJjZVRpbWluZy5sZW5ndGg+MCYmKG4ucmVzb3VyY2VUaW1pbmc9ZS5fcmVzb3VyY2VUaW1pbmcsZS5fcmVzb3VyY2VUaW1pbmc9W10pLGUuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIsbikpfX0pKX0sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKX0sci5wcm90b3R5cGUuc2V0RGF0YT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3JldHVybiB0aGlzLl9kYXRhPWUsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMuX3VwZGF0ZVdvcmtlckRhdGEoKGZ1bmN0aW9uKGUpe2lmKGUpci5maXJlKG5ldyB0LkVycm9yRXZlbnQoZSkpO2Vsc2V7dmFyIG49e2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJjb250ZW50In07ci5fY29sbGVjdFJlc291cmNlVGltaW5nJiZyLl9yZXNvdXJjZVRpbWluZyYmci5fcmVzb3VyY2VUaW1pbmcubGVuZ3RoPjAmJihuLnJlc291cmNlVGltaW5nPXIuX3Jlc291cmNlVGltaW5nLHIuX3Jlc291cmNlVGltaW5nPVtdKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLG4pKX19KSksdGhpc30sci5wcm90b3R5cGUuZ2V0Q2x1c3RlckV4cGFuc2lvblpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hY3Rvci5zZW5kKCJnZW9qc29uLmdldENsdXN0ZXJFeHBhbnNpb25ab29tIix7Y2x1c3RlcklkOnQsc291cmNlOnRoaXMuaWR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmFjdG9yLnNlbmQoImdlb2pzb24uZ2V0Q2x1c3RlckNoaWxkcmVuIix7Y2x1c3RlcklkOnQsc291cmNlOnRoaXMuaWR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldENsdXN0ZXJMZWF2ZXM9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMuYWN0b3Iuc2VuZCgiZ2VvanNvbi5nZXRDbHVzdGVyTGVhdmVzIix7c291cmNlOnRoaXMuaWQsY2x1c3RlcklkOnQsbGltaXQ6ZSxvZmZzZXQ6cn0sbiksdGhpc30sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckRhdGE9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpczt0aGlzLl9sb2FkZWQ9ITE7dmFyIG49dC5leHRlbmQoe30sdGhpcy53b3JrZXJPcHRpb25zKSxpPXRoaXMuX2RhdGE7InN0cmluZyI9PXR5cGVvZiBpPyhuLnJlcXVlc3Q9dGhpcy5tYXAuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QodC5icm93c2VyLnJlc29sdmVVUkwoaSksdC5SZXNvdXJjZVR5cGUuU291cmNlKSxuLnJlcXVlc3QuY29sbGVjdFJlc291cmNlVGltaW5nPXRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyk6bi5kYXRhPUpTT04uc3RyaW5naWZ5KGkpLHRoaXMuYWN0b3Iuc2VuZCh0aGlzLnR5cGUrIi5sb2FkRGF0YSIsbiwoZnVuY3Rpb24odCxpKXtyLl9yZW1vdmVkfHxpJiZpLmFiYW5kb25lZHx8KHIuX2xvYWRlZD0hMCxpJiZpLnJlc291cmNlVGltaW5nJiZpLnJlc291cmNlVGltaW5nW3IuaWRdJiYoci5fcmVzb3VyY2VUaW1pbmc9aS5yZXNvdXJjZVRpbWluZ1tyLmlkXS5zbGljZSgwKSksci5hY3Rvci5zZW5kKHIudHlwZSsiLmNvYWxlc2NlIix7c291cmNlOm4uc291cmNlfSxudWxsKSxlKHQpKX0pKX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZH0sci5wcm90b3R5cGUubG9hZFRpbGU9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9ZS5hY3Rvcj8icmVsb2FkVGlsZSI6ImxvYWRUaWxlIjtlLmFjdG9yPXRoaXMuYWN0b3I7dmFyIGE9e3R5cGU6dGhpcy50eXBlLHVpZDplLnVpZCx0aWxlSUQ6ZS50aWxlSUQsem9vbTplLnRpbGVJRC5vdmVyc2NhbGVkWixtYXhab29tOnRoaXMubWF4em9vbSx0aWxlU2l6ZTp0aGlzLnRpbGVTaXplLHNvdXJjZTp0aGlzLmlkLHBpeGVsUmF0aW86dC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sc2hvd0NvbGxpc2lvbkJveGVzOnRoaXMubWFwLnNob3dDb2xsaXNpb25Cb3hlcyxwcm9tb3RlSWQ6dGhpcy5wcm9tb3RlSWR9O2UucmVxdWVzdD10aGlzLmFjdG9yLnNlbmQoaSxhLChmdW5jdGlvbih0LGEpe3JldHVybiBkZWxldGUgZS5yZXF1ZXN0LGUudW5sb2FkVmVjdG9yRGF0YSgpLGUuYWJvcnRlZD9yKG51bGwpOnQ/cih0KTooZS5sb2FkVmVjdG9yRGF0YShhLG4ubWFwLnBhaW50ZXIsInJlbG9hZFRpbGUiPT09aSkscihudWxsKSl9KSl9LHIucHJvdG90eXBlLmFib3J0VGlsZT1mdW5jdGlvbih0KXt0LnJlcXVlc3QmJih0LnJlcXVlc3QuY2FuY2VsKCksZGVsZXRlIHQucmVxdWVzdCksdC5hYm9ydGVkPSEwfSxyLnByb3RvdHlwZS51bmxvYWRUaWxlPWZ1bmN0aW9uKHQpe3QudW5sb2FkVmVjdG9yRGF0YSgpLHRoaXMuYWN0b3Iuc2VuZCgicmVtb3ZlVGlsZSIse3VpZDp0LnVpZCx0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0pfSxyLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3JlbW92ZWQ9ITAsdGhpcy5hY3Rvci5zZW5kKCJyZW1vdmVTb3VyY2UiLHt0eXBlOnRoaXMudHlwZSxzb3VyY2U6dGhpcy5pZH0pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5leHRlbmQoe30sdGhpcy5fb3B0aW9ucyx7dHlwZTp0aGlzLnR5cGUsZGF0YTp0aGlzLl9kYXRhfSl9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtyZXR1cm4hMX0scn0odC5FdmVudGVkKSxQPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9LHtuYW1lOiJhX3RleHR1cmVfcG9zIix0eXBlOiJJbnQxNiIsY29tcG9uZW50czoyfV0pLEk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtlLmNhbGwodGhpcyksdGhpcy5pZD10LHRoaXMuZGlzcGF0Y2hlcj1uLHRoaXMuY29vcmRpbmF0ZXM9ci5jb29yZGluYXRlcyx0aGlzLnR5cGU9ImltYWdlIix0aGlzLm1pbnpvb209MCx0aGlzLm1heHpvb209MjIsdGhpcy50aWxlU2l6ZT01MTIsdGhpcy50aWxlcz17fSx0aGlzLl9sb2FkZWQ9ITEsdGhpcy5zZXRFdmVudGVkUGFyZW50KGkpLHRoaXMub3B0aW9ucz1yfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5sb2FkPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLl9sb2FkZWQ9ITEsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzb3VyY2UifSkpLHRoaXMudXJsPXRoaXMub3B0aW9ucy51cmwsdC5nZXRJbWFnZSh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdCh0aGlzLnVybCx0LlJlc291cmNlVHlwZS5JbWFnZSksKGZ1bmN0aW9uKGksYSl7bi5fbG9hZGVkPSEwLGk/bi5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSkpOmEmJihuLmltYWdlPWEsZSYmKG4uY29vcmRpbmF0ZXM9ZSksciYmcigpLG4uX2ZpbmlzaExvYWRpbmcoKSl9KSl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZWR9LHIucHJvdG90eXBlLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuaW1hZ2UmJnQudXJsPyh0aGlzLm9wdGlvbnMudXJsPXQudXJsLHRoaXMubG9hZCh0LmNvb3JkaW5hdGVzLChmdW5jdGlvbigpe2UudGV4dHVyZT1udWxsfSkpLHRoaXMpOnRoaXN9LHIucHJvdG90eXBlLl9maW5pc2hMb2FkaW5nPWZ1bmN0aW9uKCl7dGhpcy5tYXAmJih0aGlzLnNldENvb3JkaW5hdGVzKHRoaXMuY29vcmRpbmF0ZXMpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHNvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSJ9KSkpfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcD10LHRoaXMubG9hZCgpfSxyLnByb3RvdHlwZS5zZXRDb29yZGluYXRlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuY29vcmRpbmF0ZXM9ZTt2YXIgbj1lLm1hcCh0Lk1lcmNhdG9yQ29vcmRpbmF0ZS5mcm9tTG5nTGF0KTt0aGlzLnRpbGVJRD1mdW5jdGlvbihlKXtmb3IodmFyIHI9MS8wLG49MS8wLGk9LTEvMCxhPS0xLzAsbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb107cj1NYXRoLm1pbihyLGwueCksbj1NYXRoLm1pbihuLGwueSksaT1NYXRoLm1heChpLGwueCksYT1NYXRoLm1heChhLGwueSl9dmFyIGM9aS1yLHU9YS1uLGY9TWF0aC5tYXgoYyx1KSxoPU1hdGgubWF4KDAsTWF0aC5mbG9vcigtTWF0aC5sb2coZikvTWF0aC5MTjIpKSxwPU1hdGgucG93KDIsaCk7cmV0dXJuIG5ldyB0LkNhbm9uaWNhbFRpbGVJRChoLE1hdGguZmxvb3IoKHIraSkvMipwKSxNYXRoLmZsb29yKChuK2EpLzIqcCkpfShuKSx0aGlzLm1pbnpvb209dGhpcy5tYXh6b29tPXRoaXMudGlsZUlELno7dmFyIGk9bi5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiByLnRpbGVJRC5nZXRUaWxlUG9pbnQodCkuX3JvdW5kKCl9KSk7cmV0dXJuIHRoaXMuX2JvdW5kc0FycmF5PW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0NGk4LHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbMF0ueCxpWzBdLnksMCwwKSx0aGlzLl9ib3VuZHNBcnJheS5lbXBsYWNlQmFjayhpWzFdLngsaVsxXS55LHQuRVhURU5ULDApLHRoaXMuX2JvdW5kc0FycmF5LmVtcGxhY2VCYWNrKGlbM10ueCxpWzNdLnksMCx0LkVYVEVOVCksdGhpcy5fYm91bmRzQXJyYXkuZW1wbGFjZUJhY2soaVsyXS54LGlbMl0ueSx0LkVYVEVOVCx0LkVYVEVOVCksdGhpcy5ib3VuZHNCdWZmZXImJih0aGlzLmJvdW5kc0J1ZmZlci5kZXN0cm95KCksZGVsZXRlIHRoaXMuYm91bmRzQnVmZmVyKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic291cmNlIixzb3VyY2VEYXRhVHlwZToiY29udGVudCJ9KSksdGhpc30sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKDAhPT1PYmplY3Qua2V5cyh0aGlzLnRpbGVzKS5sZW5ndGgmJnRoaXMuaW1hZ2Upe3ZhciBlPXRoaXMubWFwLnBhaW50ZXIuY29udGV4dCxyPWUuZ2w7Zm9yKHZhciBuIGluIHRoaXMuYm91bmRzQnVmZmVyfHwodGhpcy5ib3VuZHNCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIodGhpcy5fYm91bmRzQXJyYXksUC5tZW1iZXJzKSksdGhpcy5ib3VuZHNTZWdtZW50c3x8KHRoaXMuYm91bmRzU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsMikpLHRoaXMudGV4dHVyZXx8KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy5pbWFnZSxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5sb2FkVGlsZT1mdW5jdGlvbih0LGUpe3RoaXMudGlsZUlEJiZ0aGlzLnRpbGVJRC5lcXVhbHModC50aWxlSUQuY2Fub25pY2FsKT8odGhpcy50aWxlc1tTdHJpbmcodC50aWxlSUQud3JhcCldPXQsdC5idWNrZXRzPXt9LGUobnVsbCkpOih0LnN0YXRlPSJlcnJvcmVkIixlKG51bGwpKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6ImltYWdlIix1cmw6dGhpcy5vcHRpb25zLnVybCxjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiExfSxyfSh0LkV2ZW50ZWQpO3ZhciBPPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7ZS5jYWxsKHRoaXMsdCxyLG4saSksdGhpcy5yb3VuZFpvb209ITAsdGhpcy50eXBlPSJ2aWRlbyIsdGhpcy5vcHRpb25zPXJ9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2xvYWRlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7dGhpcy51cmxzPVtdO2Zvcih2YXIgbj0wLGk9ci51cmxzO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0aGlzLnVybHMucHVzaCh0aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChhLHQuUmVzb3VyY2VUeXBlLlNvdXJjZSkudXJsKX10LmdldFZpZGVvKHRoaXMudXJscywoZnVuY3Rpb24ocixuKXtlLl9sb2FkZWQ9ITAscj9lLmZpcmUobmV3IHQuRXJyb3JFdmVudChyKSk6biYmKGUudmlkZW89bixlLnZpZGVvLmxvb3A9ITAsZS52aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5aW5nIiwoZnVuY3Rpb24oKXtlLm1hcC50cmlnZ2VyUmVwYWludCgpfSkpLGUubWFwJiZlLnZpZGVvLnBsYXkoKSxlLl9maW5pc2hMb2FkaW5nKCkpfSkpfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGF1c2UoKX0sci5wcm90b3R5cGUucGxheT1mdW5jdGlvbigpe3RoaXMudmlkZW8mJnRoaXMudmlkZW8ucGxheSgpfSxyLnByb3RvdHlwZS5zZWVrPWZ1bmN0aW9uKGUpe2lmKHRoaXMudmlkZW8pe3ZhciByPXRoaXMudmlkZW8uc2Vla2FibGU7ZTxyLnN0YXJ0KDApfHxlPnIuZW5kKDApP3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3RoaXMuaWQsbnVsbCwiUGxheWJhY2sgZm9yIHRoaXMgdmlkZW8gY2FuIGJlIHNldCBvbmx5IGJldHdlZW4gdGhlICIrci5zdGFydCgwKSsiIGFuZCAiK3IuZW5kKDApKyItc2Vjb25kIG1hcmsuIikpKTp0aGlzLnZpZGVvLmN1cnJlbnRUaW1lPWV9fSxyLnByb3RvdHlwZS5nZXRWaWRlbz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZGVvfSxyLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt0aGlzLm1hcHx8KHRoaXMubWFwPXQsdGhpcy5sb2FkKCksdGhpcy52aWRlbyYmKHRoaXMudmlkZW8ucGxheSgpLHRoaXMuc2V0Q29vcmRpbmF0ZXModGhpcy5jb29yZGluYXRlcykpKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2lmKCEoMD09PU9iamVjdC5rZXlzKHRoaXMudGlsZXMpLmxlbmd0aHx8dGhpcy52aWRlby5yZWFkeVN0YXRlPDIpKXt2YXIgZT10aGlzLm1hcC5wYWludGVyLmNvbnRleHQscj1lLmdsO2Zvcih2YXIgbiBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/dGhpcy52aWRlby5wYXVzZWR8fCh0aGlzLnRleHR1cmUuYmluZChyLkxJTkVBUixyLkNMQU1QX1RPX0VER0UpLHIudGV4U3ViSW1hZ2UyRChyLlRFWFRVUkVfMkQsMCwwLDAsci5SR0JBLHIuVU5TSUdORURfQllURSx0aGlzLnZpZGVvKSk6KHRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKGUsdGhpcy52aWRlbyxyLlJHQkEpLHRoaXMudGV4dHVyZS5iaW5kKHIuTElORUFSLHIuQ0xBTVBfVE9fRURHRSkpLHRoaXMudGlsZXMpe3ZhciBpPXRoaXMudGlsZXNbbl07ImxvYWRlZCIhPT1pLnN0YXRlJiYoaS5zdGF0ZT0ibG9hZGVkIixpLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToidmlkZW8iLHVybHM6dGhpcy51cmxzLGNvb3JkaW5hdGVzOnRoaXMuY29vcmRpbmF0ZXN9fSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlkZW8mJiF0aGlzLnZpZGVvLnBhdXNlZH0scn0oSSksej1mdW5jdGlvbihlKXtmdW5jdGlvbiByKHIsbixpLGEpe2UuY2FsbCh0aGlzLHIsbixpLGEpLG4uY29vcmRpbmF0ZXM/QXJyYXkuaXNBcnJheShuLmNvb3JkaW5hdGVzKSYmND09PW4uY29vcmRpbmF0ZXMubGVuZ3RoJiYhbi5jb29yZGluYXRlcy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4hQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RofHx0LnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdH0pKX0pKXx8dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCciY29vcmRpbmF0ZXMiIHByb3BlcnR5IG11c3QgYmUgYW4gYXJyYXkgb2YgNCBsb25naXR1ZGUvbGF0aXR1ZGUgYXJyYXkgcGFpcnMnKSkpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnbWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eSAiY29vcmRpbmF0ZXMiJykpKSxuLmFuaW1hdGUmJiJib29sZWFuIiE9dHlwZW9mIG4uYW5pbWF0ZSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdvcHRpb25hbCAiYW5pbWF0ZSIgcHJvcGVydHkgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUnKSkpLG4uY2FudmFzPyJzdHJpbmciPT10eXBlb2Ygbi5jYW52YXN8fG4uY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnR8fHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyB0LlZhbGlkYXRpb25FcnJvcigic291cmNlcy4iK3IsbnVsbCwnImNhbnZhcyIgbXVzdCBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBJRCBvZiB0aGUgY2FudmFzIGVsZW1lbnQgZnJvbSB3aGljaCB0byByZWFkLCBvciBhbiBIVE1MQ2FudmFzRWxlbWVudCBpbnN0YW5jZScpKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IHQuVmFsaWRhdGlvbkVycm9yKCJzb3VyY2VzLiIrcixudWxsLCdtaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5ICJjYW52YXMiJykpKSx0aGlzLm9wdGlvbnM9bix0aGlzLmFuaW1hdGU9dm9pZCAwPT09bi5hbmltYXRlfHxuLmFuaW1hdGV9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWQ9ZnVuY3Rpb24oKXt0aGlzLl9sb2FkZWQ9ITAsdGhpcy5jYW52YXN8fCh0aGlzLmNhbnZhcz10aGlzLm9wdGlvbnMuY2FudmFzIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTENhbnZhc0VsZW1lbnQ/dGhpcy5vcHRpb25zLmNhbnZhczp0LndpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuY2FudmFzKSksdGhpcy53aWR0aD10aGlzLmNhbnZhcy53aWR0aCx0aGlzLmhlaWdodD10aGlzLmNhbnZhcy5oZWlnaHQsdGhpcy5faGFzSW52YWxpZERpbWVuc2lvbnMoKT90aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkNhbnZhcyBkaW1lbnNpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKSkpOih0aGlzLnBsYXk9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nPSEwLHRoaXMubWFwLnRyaWdnZXJSZXBhaW50KCl9LHRoaXMucGF1c2U9ZnVuY3Rpb24oKXt0aGlzLl9wbGF5aW5nJiYodGhpcy5wcmVwYXJlKCksdGhpcy5fcGxheWluZz0hMSl9LHRoaXMuX2ZpbmlzaExvYWRpbmcoKSl9LHIucHJvdG90eXBlLmdldENhbnZhcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNhbnZhc30sci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLmxvYWQoKSx0aGlzLmNhbnZhcyYmdGhpcy5hbmltYXRlJiZ0aGlzLnBsYXkoKX0sci5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLnBhdXNlKCl9LHIucHJvdG90eXBlLnByZXBhcmU9ZnVuY3Rpb24oKXt2YXIgZT0hMTtpZih0aGlzLmNhbnZhcy53aWR0aCE9PXRoaXMud2lkdGgmJih0aGlzLndpZHRoPXRoaXMuY2FudmFzLndpZHRoLGU9ITApLHRoaXMuY2FudmFzLmhlaWdodCE9PXRoaXMuaGVpZ2h0JiYodGhpcy5oZWlnaHQ9dGhpcy5jYW52YXMuaGVpZ2h0LGU9ITApLCF0aGlzLl9oYXNJbnZhbGlkRGltZW5zaW9ucygpJiYwIT09T2JqZWN0LmtleXModGhpcy50aWxlcykubGVuZ3RoKXt2YXIgcj10aGlzLm1hcC5wYWludGVyLmNvbnRleHQsbj1yLmdsO2Zvcih2YXIgaSBpbiB0aGlzLmJvdW5kc0J1ZmZlcnx8KHRoaXMuYm91bmRzQnVmZmVyPXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMuX2JvdW5kc0FycmF5LFAubWVtYmVycykpLHRoaXMuYm91bmRzU2VnbWVudHN8fCh0aGlzLmJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpKSx0aGlzLnRleHR1cmU/KGV8fHRoaXMuX3BsYXlpbmcpJiZ0aGlzLnRleHR1cmUudXBkYXRlKHRoaXMuY2FudmFzLHtwcmVtdWx0aXBseTohMH0pOnRoaXMudGV4dHVyZT1uZXcgdC5UZXh0dXJlKHIsdGhpcy5jYW52YXMsbi5SR0JBLHtwcmVtdWx0aXBseTohMH0pLHRoaXMudGlsZXMpe3ZhciBhPXRoaXMudGlsZXNbaV07ImxvYWRlZCIhPT1hLnN0YXRlJiYoYS5zdGF0ZT0ibG9hZGVkIixhLnRleHR1cmU9dGhpcy50ZXh0dXJlKX19fSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiY2FudmFzIixjb29yZGluYXRlczp0aGlzLmNvb3JkaW5hdGVzfX0sci5wcm90b3R5cGUuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wbGF5aW5nfSxyLnByb3RvdHlwZS5faGFzSW52YWxpZERpbWVuc2lvbnM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPVt0aGlzLmNhbnZhcy53aWR0aCx0aGlzLmNhbnZhcy5oZWlnaHRdO3Q8ZS5sZW5ndGg7dCs9MSl7dmFyIHI9ZVt0XTtpZihpc05hTihyKXx8cjw9MClyZXR1cm4hMH1yZXR1cm4hMX0scn0oSSksRD17dmVjdG9yOlMscmFzdGVyOkUsInJhc3Rlci1kZW0iOkwsZ2VvanNvbjpDLHZpZGVvOk8saW1hZ2U6SSxjYW52YXM6en07ZnVuY3Rpb24gUihlLHIpe3ZhciBuPXQuaWRlbnRpdHkoW10pO3JldHVybiB0LnRyYW5zbGF0ZShuLG4sWzEsMSwwXSksdC5zY2FsZShuLG4sWy41KmUud2lkdGgsLjUqZS5oZWlnaHQsMV0pLHQubXVsdGlwbHkobixuLGUuY2FsY3VsYXRlUG9zTWF0cml4KHIudG9VbndyYXBwZWQoKSkpfWZ1bmN0aW9uIEYodCxlLHIsbixpLGEpe3ZhciBvPWZ1bmN0aW9uKHQsZSxyKXtpZih0KWZvcih2YXIgbj0wLGk9dDtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWVbaVtuXV07aWYoYSYmYS5zb3VyY2U9PT1yJiYiZmlsbC1leHRydXNpb24iPT09YS50eXBlKXJldHVybiEwfWVsc2UgZm9yKHZhciBvIGluIGUpe3ZhciBzPWVbb107aWYocy5zb3VyY2U9PT1yJiYiZmlsbC1leHRydXNpb24iPT09cy50eXBlKXJldHVybiEwfXJldHVybiExfShpJiZpLmxheWVycyxlLHQuaWQpLHM9YS5tYXhQaXRjaFNjYWxlRmFjdG9yKCksbD10LnRpbGVzSW4obixzLG8pO2wuc29ydChCKTtmb3IodmFyIGM9W10sdT0wLGY9bDt1PGYubGVuZ3RoO3UrPTEpe3ZhciBoPWZbdV07Yy5wdXNoKHt3cmFwcGVkVGlsZUlEOmgudGlsZUlELndyYXBwZWQoKS5rZXkscXVlcnlSZXN1bHRzOmgudGlsZS5xdWVyeVJlbmRlcmVkRmVhdHVyZXMoZSxyLHQuX3N0YXRlLGgucXVlcnlHZW9tZXRyeSxoLmNhbWVyYVF1ZXJ5R2VvbWV0cnksaC5zY2FsZSxpLGEscyxSKHQudHJhbnNmb3JtLGgudGlsZUlEKSl9KX12YXIgcD1mdW5jdGlvbih0KXtmb3IodmFyIGU9e30scj17fSxuPTAsaT10O248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXSxvPWEucXVlcnlSZXN1bHRzLHM9YS53cmFwcGVkVGlsZUlELGw9cltzXT1yW3NdfHx7fTtmb3IodmFyIGMgaW4gbylmb3IodmFyIHU9b1tjXSxmPWxbY109bFtjXXx8e30saD1lW2NdPWVbY118fFtdLHA9MCxkPXU7cDxkLmxlbmd0aDtwKz0xKXt2YXIgbT1kW3BdO2ZbbS5mZWF0dXJlSW5kZXhdfHwoZlttLmZlYXR1cmVJbmRleF09ITAsaC5wdXNoKG0pKX19cmV0dXJuIGV9KGMpO2Zvcih2YXIgZCBpbiBwKXBbZF0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9ZS5mZWF0dXJlLG49dC5nZXRGZWF0dXJlU3RhdGUoci5sYXllclsic291cmNlLWxheWVyIl0sci5pZCk7ci5zb3VyY2U9ci5sYXllci5zb3VyY2Usci5sYXllclsic291cmNlLWxheWVyIl0mJihyLnNvdXJjZUxheWVyPXIubGF5ZXJbInNvdXJjZS1sYXllciJdKSxyLnN0YXRlPW59KSk7cmV0dXJuIHB9ZnVuY3Rpb24gQih0LGUpe3ZhciByPXQudGlsZUlELG49ZS50aWxlSUQ7cmV0dXJuIHIub3ZlcnNjYWxlZFotbi5vdmVyc2NhbGVkWnx8ci5jYW5vbmljYWwueS1uLmNhbm9uaWNhbC55fHxyLndyYXAtbi53cmFwfHxyLmNhbm9uaWNhbC54LW4uY2Fub25pY2FsLnh9dmFyIE49ZnVuY3Rpb24odCxlKXt0aGlzLm1heD10LHRoaXMub25SZW1vdmU9ZSx0aGlzLnJlc2V0KCl9O04ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSlmb3IodmFyIGU9MCxyPXRoaXMuZGF0YVt0XTtlPHIubGVuZ3RoO2UrPTEpe3ZhciBuPXJbZV07bi50aW1lb3V0JiZjbGVhclRpbWVvdXQobi50aW1lb3V0KSx0aGlzLm9uUmVtb3ZlKG4udmFsdWUpfXJldHVybiB0aGlzLmRhdGE9e30sdGhpcy5vcmRlcj1bXSx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10LndyYXBwZWQoKS5rZXk7dm9pZCAwPT09dGhpcy5kYXRhW2ldJiYodGhpcy5kYXRhW2ldPVtdKTt2YXIgYT17dmFsdWU6ZSx0aW1lb3V0OnZvaWQgMH07aWYodm9pZCAwIT09ciYmKGEudGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe24ucmVtb3ZlKHQsYSl9KSxyKSksdGhpcy5kYXRhW2ldLnB1c2goYSksdGhpcy5vcmRlci5wdXNoKGkpLHRoaXMub3JkZXIubGVuZ3RoPnRoaXMubWF4KXt2YXIgbz10aGlzLl9nZXRBbmRSZW1vdmVCeUtleSh0aGlzLm9yZGVyWzBdKTtvJiZ0aGlzLm9uUmVtb3ZlKG8pfXJldHVybiB0aGlzfSxOLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud3JhcHBlZCgpLmtleSBpbiB0aGlzLmRhdGF9LE4ucHJvdG90eXBlLmdldEFuZFJlbW92ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5fZ2V0QW5kUmVtb3ZlQnlLZXkodC53cmFwcGVkKCkua2V5KTpudWxsfSxOLnByb3RvdHlwZS5fZ2V0QW5kUmVtb3ZlQnlLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kYXRhW3RdLnNoaWZ0KCk7cmV0dXJuIGUudGltZW91dCYmY2xlYXJUaW1lb3V0KGUudGltZW91dCksMD09PXRoaXMuZGF0YVt0XS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbdF0sdGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKHQpLDEpLGUudmFsdWV9LE4ucHJvdG90eXBlLmdldEJ5S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF0YVt0XTtyZXR1cm4gZT9lWzBdLnZhbHVlOm51bGx9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5oYXModCk/dGhpcy5kYXRhW3Qud3JhcHBlZCgpLmtleV1bMF0udmFsdWU6bnVsbH0sTi5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuaGFzKHQpKXJldHVybiB0aGlzO3ZhciByPXQud3JhcHBlZCgpLmtleSxuPXZvaWQgMD09PWU/MDp0aGlzLmRhdGFbcl0uaW5kZXhPZihlKSxpPXRoaXMuZGF0YVtyXVtuXTtyZXR1cm4gdGhpcy5kYXRhW3JdLnNwbGljZShuLDEpLGkudGltZW91dCYmY2xlYXJUaW1lb3V0KGkudGltZW91dCksMD09PXRoaXMuZGF0YVtyXS5sZW5ndGgmJmRlbGV0ZSB0aGlzLmRhdGFbcl0sdGhpcy5vblJlbW92ZShpLnZhbHVlKSx0aGlzLm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YociksMSksdGhpc30sTi5wcm90b3R5cGUuc2V0TWF4U2l6ZT1mdW5jdGlvbih0KXtmb3IodGhpcy5tYXg9dDt0aGlzLm9yZGVyLmxlbmd0aD50aGlzLm1heDspe3ZhciBlPXRoaXMuX2dldEFuZFJlbW92ZUJ5S2V5KHRoaXMub3JkZXJbMF0pO2UmJnRoaXMub25SZW1vdmUoZSl9cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLmZpbHRlcj1mdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdGhpcy5kYXRhKWZvcih2YXIgbj0wLGk9dGhpcy5kYXRhW3JdO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTt0KGEudmFsdWUpfHxlLnB1c2goYSl9Zm9yKHZhciBvPTAscz1lO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTt0aGlzLnJlbW92ZShsLnZhbHVlLnRpbGVJRCxsKX19O3ZhciBqPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmNvbnRleHQ9dDt2YXIgbj10LmdsO3RoaXMuYnVmZmVyPW4uY3JlYXRlQnVmZmVyKCksdGhpcy5keW5hbWljRHJhdz1Cb29sZWFuKHIpLHRoaXMuY29udGV4dC51bmJpbmRWQU8oKSx0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlciksbi5idWZmZXJEYXRhKG4uRUxFTUVOVF9BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P24uRFlOQU1JQ19EUkFXOm4uU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtqLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRFbGVtZW50QnVmZmVyLnNldCh0aGlzLmJ1ZmZlcil9LGoucHJvdG90eXBlLnVwZGF0ZURhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC51bmJpbmRWQU8oKSx0aGlzLmJpbmQoKSxlLmJ1ZmZlclN1YkRhdGEoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUiwwLHQuYXJyYXlCdWZmZXIpfSxqLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBVPXtJbnQ4OiJCWVRFIixVaW50ODoiVU5TSUdORURfQllURSIsSW50MTY6IlNIT1JUIixVaW50MTY6IlVOU0lHTkVEX1NIT1JUIixJbnQzMjoiSU5UIixVaW50MzI6IlVOU0lHTkVEX0lOVCIsRmxvYXQzMjoiRkxPQVQifSxWPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuYXR0cmlidXRlcz1yLHRoaXMuaXRlbVNpemU9ZS5ieXRlc1BlckVsZW1lbnQsdGhpcy5keW5hbWljRHJhdz1uLHRoaXMuY29udGV4dD10O3ZhciBpPXQuZ2w7dGhpcy5idWZmZXI9aS5jcmVhdGVCdWZmZXIoKSx0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKSxpLmJ1ZmZlckRhdGEoaS5BUlJBWV9CVUZGRVIsZS5hcnJheUJ1ZmZlcix0aGlzLmR5bmFtaWNEcmF3P2kuRFlOQU1JQ19EUkFXOmkuU1RBVElDX0RSQVcpLHRoaXMuZHluYW1pY0RyYXd8fGRlbGV0ZSBlLmFycmF5QnVmZmVyfTtWLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LmJpbmRWZXJ0ZXhCdWZmZXIuc2V0KHRoaXMuYnVmZmVyKX0sVi5wcm90b3R5cGUudXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5iaW5kKCksZS5idWZmZXJTdWJEYXRhKGUuQVJSQVlfQlVGRkVSLDAsdC5hcnJheUJ1ZmZlcil9LFYucHJvdG90eXBlLmVuYWJsZUF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHRoaXMuYXR0cmlidXRlcy5sZW5ndGg7cisrKXt2YXIgbj10aGlzLmF0dHJpYnV0ZXNbcl0saT1lLmF0dHJpYnV0ZXNbbi5uYW1lXTt2b2lkIDAhPT1pJiZ0LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGkpfX0sVi5wcm90b3R5cGUuc2V0VmVydGV4QXR0cmliUG9pbnRlcnM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dGhpcy5hdHRyaWJ1dGVzLmxlbmd0aDtuKyspe3ZhciBpPXRoaXMuYXR0cmlidXRlc1tuXSxhPWUuYXR0cmlidXRlc1tpLm5hbWVdO3ZvaWQgMCE9PWEmJnQudmVydGV4QXR0cmliUG9pbnRlcihhLGkuY29tcG9uZW50cyx0W1VbaS50eXBlXV0sITEsdGhpcy5pdGVtU2l6ZSxpLm9mZnNldCt0aGlzLml0ZW1TaXplKihyfHwwKSl9fSxWLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuYnVmZmVyJiYodC5kZWxldGVCdWZmZXIodGhpcy5idWZmZXIpLGRlbGV0ZSB0aGlzLmJ1ZmZlcil9O3ZhciBIPWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dC5nbCx0aGlzLmRlZmF1bHQ9dGhpcy5nZXREZWZhdWx0KCksdGhpcy5jdXJyZW50PXRoaXMuZGVmYXVsdCx0aGlzLmRpcnR5PSExfTtILnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50fSxILnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7fSxILnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdH0sSC5wcm90b3R5cGUuc2V0RGVmYXVsdD1mdW5jdGlvbigpe3RoaXMuc2V0KHRoaXMuZGVmYXVsdCl9O3ZhciBxPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIoKXtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0LkNvbG9yLnRyYW5zcGFyZW50fSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0LnIhPT1lLnJ8fHQuZyE9PWUuZ3x8dC5iIT09ZS5ifHx0LmEhPT1lLmF8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jbGVhckNvbG9yKHQucix0LmcsdC5iLHQuYSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LHJ9KEgpLEc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyRGVwdGgodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLFk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIDB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNsZWFyU3RlbmNpbCh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksVz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm5bITAsITAsITAsITBdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRbMl0hPT1lWzJdfHx0WzNdIT09ZVszXXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmNvbG9yTWFzayh0WzBdLHRbMV0sdFsyXSx0WzNdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksWD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuZGVwdGhNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxaPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiAyNTV9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLnN0ZW5jaWxNYXNrKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxKPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybntmdW5jOnRoaXMuZ2wuQUxXQVlTLHJlZjowLG1hc2s6MjU1fX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VycmVudDsodC5mdW5jIT09ZS5mdW5jfHx0LnJlZiE9PWUucmVmfHx0Lm1hc2shPT1lLm1hc2t8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5zdGVuY2lsRnVuYyh0LmZ1bmMsdC5yZWYsdC5tYXNrKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksSz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblt0LktFRVAsdC5LRUVQLHQuS0VFUF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5zdGVuY2lsT3AodFswXSx0WzFdLHRbMl0pLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSxRPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuU1RFTkNJTF9URVNUKTplLmRpc2FibGUoZS5TVEVOQ0lMX1RFU1QpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSwkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVyblswLDFdfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5kZXB0aFJhbmdlKHRbMF0sdFsxXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuREVQVEhfVEVTVCk6ZS5kaXNhYmxlKGUuREVQVEhfVEVTVCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGV0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdsLkxFU1N9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmRlcHRoRnVuYyh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCkscnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO3Q/ZS5lbmFibGUoZS5CTEVORCk6ZS5kaXNhYmxlKGUuQkxFTkQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxudD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdsO3JldHVyblt0Lk9ORSx0LlpFUk9dfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJyZW50Oyh0WzBdIT09ZVswXXx8dFsxXSE9PWVbMV18fHRoaXMuZGlydHkpJiYodGhpcy5nbC5ibGVuZEZ1bmModFswXSx0WzFdKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksaXQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcigpe2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiBlJiYoci5fX3Byb3RvX189ZSksci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuQ29sb3IudHJhbnNwYXJlbnR9LHIucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHQuciE9PWUucnx8dC5nIT09ZS5nfHx0LmIhPT1lLmJ8fHQuYSE9PWUuYXx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kQ29sb3IodC5yLHQuZyx0LmIsdC5hKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0scn0oSCksYXQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuRlVOQ19BRER9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXsodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLmdsLmJsZW5kRXF1YXRpb24odCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLG90PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDt0P2UuZW5hYmxlKGUuQ1VMTF9GQUNFKTplLmRpc2FibGUoZS5DVUxMX0ZBQ0UpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxzdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5CQUNLfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5jdWxsRmFjZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksbHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2wuQ0NXfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC5mcm9udEZhY2UodCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGN0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7KHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpJiYodGhpcy5nbC51c2VQcm9ncmFtKHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITEpfSxlfShIKSx1dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nbC5URVhUVVJFMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpeyh0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wuYWN0aXZlVGV4dHVyZSh0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExKX0sZX0oSCksZnQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nbDtyZXR1cm5bMCwwLHQuZHJhd2luZ0J1ZmZlcldpZHRoLHQuZHJhd2luZ0J1ZmZlckhlaWdodF19LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnJlbnQ7KHRbMF0hPT1lWzBdfHx0WzFdIT09ZVsxXXx8dFsyXSE9PWVbMl18fHRbM10hPT1lWzNdfHx0aGlzLmRpcnR5KSYmKHRoaXMuZ2wudmlld3BvcnQodFswXSx0WzFdLHRbMl0sdFszXSksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLGh0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRGcmFtZWJ1ZmZlcihlLkZSQU1FQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxwdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kUmVuZGVyYnVmZmVyKGUuUkVOREVSQlVGRkVSLHQpLHRoaXMuY3VycmVudD10LHRoaXMuZGlydHk9ITF9fSxlfShIKSxkdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3ZhciBlPXRoaXMuZ2w7ZS5iaW5kVGV4dHVyZShlLlRFWFRVUkVfMkQsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5BUlJBWV9CVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGd0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiBudWxsfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5nbDtlLmJpbmRCdWZmZXIoZS5FTEVNRU5UX0FSUkFZX0JVRkZFUix0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfSxlfShIKSx2dD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMudmFvPWUuZXh0VmVydGV4QXJyYXlPYmplY3R9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe3RoaXMudmFvJiYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSkmJih0aGlzLnZhby5iaW5kVmVydGV4QXJyYXlPRVModCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMSl9LGV9KEgpLHl0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiA0fSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLnBpeGVsU3RvcmVpKGUuVU5QQUNLX0FMSUdOTUVOVCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCkseHQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5nZXREZWZhdWx0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt2YXIgZT10aGlzLmdsO2UucGl4ZWxTdG9yZWkoZS5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KEgpLGJ0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuZ2V0RGVmYXVsdD1mdW5jdGlvbigpe3JldHVybiExfSxlLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24odCl7aWYodCE9PXRoaXMuY3VycmVudHx8dGhpcy5kaXJ0eSl7dmFyIGU9dGhpcy5nbDtlLnBpeGVsU3RvcmVpKGUuVU5QQUNLX0ZMSVBfWV9XRUJHTCx0KSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oSCksX3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLHIpe3QuY2FsbCh0aGlzLGUpLHRoaXMuY29udGV4dD1lLHRoaXMucGFyZW50PXJ9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZX0oSCksd3Q9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5zZXREaXJ0eT1mdW5jdGlvbigpe3RoaXMuZGlydHk9ITB9LGUucHJvdG90eXBlLnNldD1mdW5jdGlvbih0KXtpZih0IT09dGhpcy5jdXJyZW50fHx0aGlzLmRpcnR5KXt0aGlzLmNvbnRleHQuYmluZEZyYW1lYnVmZmVyLnNldCh0aGlzLnBhcmVudCk7dmFyIGU9dGhpcy5nbDtlLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGUuRlJBTUVCVUZGRVIsZS5DT0xPUl9BVFRBQ0hNRU5UMCxlLlRFWFRVUkVfMkQsdCwwKSx0aGlzLmN1cnJlbnQ9dCx0aGlzLmRpcnR5PSExfX0sZX0oX3QpLFR0PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKHQpe2lmKHQhPT10aGlzLmN1cnJlbnR8fHRoaXMuZGlydHkpe3RoaXMuY29udGV4dC5iaW5kRnJhbWVidWZmZXIuc2V0KHRoaXMucGFyZW50KTt2YXIgZT10aGlzLmdsO2UuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZS5GUkFNRUJVRkZFUixlLkRFUFRIX0FUVEFDSE1FTlQsZS5SRU5ERVJCVUZGRVIsdCksdGhpcy5jdXJyZW50PXQsdGhpcy5kaXJ0eT0hMX19LGV9KF90KSxrdD1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNvbnRleHQ9dCx0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9cjt2YXIgaT10LmdsLGE9dGhpcy5mcmFtZWJ1ZmZlcj1pLmNyZWF0ZUZyYW1lYnVmZmVyKCk7dGhpcy5jb2xvckF0dGFjaG1lbnQ9bmV3IHd0KHQsYSksbiYmKHRoaXMuZGVwdGhBdHRhY2htZW50PW5ldyBUdCh0LGEpKX07a3QucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNvbnRleHQuZ2wsZT10aGlzLmNvbG9yQXR0YWNobWVudC5nZXQoKTtpZihlJiZ0LmRlbGV0ZVRleHR1cmUoZSksdGhpcy5kZXB0aEF0dGFjaG1lbnQpe3ZhciByPXRoaXMuZGVwdGhBdHRhY2htZW50LmdldCgpO3ImJnQuZGVsZXRlUmVuZGVyYnVmZmVyKHIpfXQuZGVsZXRlRnJhbWVidWZmZXIodGhpcy5mcmFtZWJ1ZmZlcil9O3ZhciBBdD1mdW5jdGlvbih0LGUscil7dGhpcy5mdW5jPXQsdGhpcy5tYXNrPWUsdGhpcy5yYW5nZT1yfTtBdC5SZWFkT25seT0hMSxBdC5SZWFkV3JpdGU9ITAsQXQuZGlzYWJsZWQ9bmV3IEF0KDUxOSxBdC5SZWFkT25seSxbMCwxXSk7dmFyIE10PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLnRlc3Q9dCx0aGlzLnJlZj1lLHRoaXMubWFzaz1yLHRoaXMuZmFpbD1uLHRoaXMuZGVwdGhGYWlsPWksdGhpcy5wYXNzPWF9O010LmRpc2FibGVkPW5ldyBNdCh7ZnVuYzo1MTksbWFzazowfSwwLDAsNzY4MCw3NjgwLDc2ODApO3ZhciBTdD1mdW5jdGlvbih0LGUscil7dGhpcy5ibGVuZEZ1bmN0aW9uPXQsdGhpcy5ibGVuZENvbG9yPWUsdGhpcy5tYXNrPXJ9O1N0LmRpc2FibGVkPW5ldyBTdChTdC5SZXBsYWNlPVsxLDBdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyExLCExLCExLCExXSksU3QudW5ibGVuZGVkPW5ldyBTdChTdC5SZXBsYWNlLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSksU3QuYWxwaGFCbGVuZGVkPW5ldyBTdChbMSw3NzFdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7dmFyIEV0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLmVuYWJsZT10LHRoaXMubW9kZT1lLHRoaXMuZnJvbnRGYWNlPXJ9O0V0LmRpc2FibGVkPW5ldyBFdCghMSwxMDI5LDIzMDUpLEV0LmJhY2tDQ1c9bmV3IEV0KCEwLDEwMjksMjMwNSk7dmFyIEx0PWZ1bmN0aW9uKHQpe3RoaXMuZ2w9dCx0aGlzLmV4dFZlcnRleEFycmF5T2JqZWN0PXRoaXMuZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpLHRoaXMuY2xlYXJDb2xvcj1uZXcgcSh0aGlzKSx0aGlzLmNsZWFyRGVwdGg9bmV3IEcodGhpcyksdGhpcy5jbGVhclN0ZW5jaWw9bmV3IFkodGhpcyksdGhpcy5jb2xvck1hc2s9bmV3IFcodGhpcyksdGhpcy5kZXB0aE1hc2s9bmV3IFgodGhpcyksdGhpcy5zdGVuY2lsTWFzaz1uZXcgWih0aGlzKSx0aGlzLnN0ZW5jaWxGdW5jPW5ldyBKKHRoaXMpLHRoaXMuc3RlbmNpbE9wPW5ldyBLKHRoaXMpLHRoaXMuc3RlbmNpbFRlc3Q9bmV3IFEodGhpcyksdGhpcy5kZXB0aFJhbmdlPW5ldyAkKHRoaXMpLHRoaXMuZGVwdGhUZXN0PW5ldyB0dCh0aGlzKSx0aGlzLmRlcHRoRnVuYz1uZXcgZXQodGhpcyksdGhpcy5ibGVuZD1uZXcgcnQodGhpcyksdGhpcy5ibGVuZEZ1bmM9bmV3IG50KHRoaXMpLHRoaXMuYmxlbmRDb2xvcj1uZXcgaXQodGhpcyksdGhpcy5ibGVuZEVxdWF0aW9uPW5ldyBhdCh0aGlzKSx0aGlzLmN1bGxGYWNlPW5ldyBvdCh0aGlzKSx0aGlzLmN1bGxGYWNlU2lkZT1uZXcgc3QodGhpcyksdGhpcy5mcm9udEZhY2U9bmV3IGx0KHRoaXMpLHRoaXMucHJvZ3JhbT1uZXcgY3QodGhpcyksdGhpcy5hY3RpdmVUZXh0dXJlPW5ldyB1dCh0aGlzKSx0aGlzLnZpZXdwb3J0PW5ldyBmdCh0aGlzKSx0aGlzLmJpbmRGcmFtZWJ1ZmZlcj1uZXcgaHQodGhpcyksdGhpcy5iaW5kUmVuZGVyYnVmZmVyPW5ldyBwdCh0aGlzKSx0aGlzLmJpbmRUZXh0dXJlPW5ldyBkdCh0aGlzKSx0aGlzLmJpbmRWZXJ0ZXhCdWZmZXI9bmV3IG10KHRoaXMpLHRoaXMuYmluZEVsZW1lbnRCdWZmZXI9bmV3IGd0KHRoaXMpLHRoaXMuYmluZFZlcnRleEFycmF5T0VTPXRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJm5ldyB2dCh0aGlzKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2s9bmV3IHl0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGE9bmV3IHh0KHRoaXMpLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZPW5ldyBidCh0aGlzKSx0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz10LmdldEV4dGVuc2lvbigiRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJNT1pfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIil8fHQuZ2V0RXh0ZW5zaW9uKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIiksdGhpcy5leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMmJih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY01heD10LmdldFBhcmFtZXRlcih0aGlzLmV4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5NQVhfVEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQpKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQ9dC5nZXRFeHRlbnNpb24oIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSx0aGlzLmV4dFRleHR1cmVIYWxmRmxvYXQmJih0LmdldEV4dGVuc2lvbigiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSx0aGlzLmV4dFJlbmRlclRvVGV4dHVyZUhhbGZGbG9hdD10LmdldEV4dGVuc2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IikpLHRoaXMuZXh0VGltZXJRdWVyeT10LmdldEV4dGVuc2lvbigiRVhUX2Rpc2pvaW50X3RpbWVyX3F1ZXJ5Iil9O0x0LnByb3RvdHlwZS5zZXREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy51bmJpbmRWQU8oKSx0aGlzLmNsZWFyQ29sb3Iuc2V0RGVmYXVsdCgpLHRoaXMuY2xlYXJEZXB0aC5zZXREZWZhdWx0KCksdGhpcy5jbGVhclN0ZW5jaWwuc2V0RGVmYXVsdCgpLHRoaXMuY29sb3JNYXNrLnNldERlZmF1bHQoKSx0aGlzLmRlcHRoTWFzay5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsTWFzay5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsRnVuYy5zZXREZWZhdWx0KCksdGhpcy5zdGVuY2lsT3Auc2V0RGVmYXVsdCgpLHRoaXMuc3RlbmNpbFRlc3Quc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhSYW5nZS5zZXREZWZhdWx0KCksdGhpcy5kZXB0aFRlc3Quc2V0RGVmYXVsdCgpLHRoaXMuZGVwdGhGdW5jLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kRnVuYy5zZXREZWZhdWx0KCksdGhpcy5ibGVuZENvbG9yLnNldERlZmF1bHQoKSx0aGlzLmJsZW5kRXF1YXRpb24uc2V0RGVmYXVsdCgpLHRoaXMuY3VsbEZhY2Uuc2V0RGVmYXVsdCgpLHRoaXMuY3VsbEZhY2VTaWRlLnNldERlZmF1bHQoKSx0aGlzLmZyb250RmFjZS5zZXREZWZhdWx0KCksdGhpcy5wcm9ncmFtLnNldERlZmF1bHQoKSx0aGlzLmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuYmluZEZyYW1lYnVmZmVyLnNldERlZmF1bHQoKSx0aGlzLnBpeGVsU3RvcmVVbnBhY2suc2V0RGVmYXVsdCgpLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMucGl4ZWxTdG9yZVVucGFja0ZsaXBZLnNldERlZmF1bHQoKX0sTHQucHJvdG90eXBlLnNldERpcnR5PWZ1bmN0aW9uKCl7dGhpcy5jbGVhckNvbG9yLmRpcnR5PSEwLHRoaXMuY2xlYXJEZXB0aC5kaXJ0eT0hMCx0aGlzLmNsZWFyU3RlbmNpbC5kaXJ0eT0hMCx0aGlzLmNvbG9yTWFzay5kaXJ0eT0hMCx0aGlzLmRlcHRoTWFzay5kaXJ0eT0hMCx0aGlzLnN0ZW5jaWxNYXNrLmRpcnR5PSEwLHRoaXMuc3RlbmNpbEZ1bmMuZGlydHk9ITAsdGhpcy5zdGVuY2lsT3AuZGlydHk9ITAsdGhpcy5zdGVuY2lsVGVzdC5kaXJ0eT0hMCx0aGlzLmRlcHRoUmFuZ2UuZGlydHk9ITAsdGhpcy5kZXB0aFRlc3QuZGlydHk9ITAsdGhpcy5kZXB0aEZ1bmMuZGlydHk9ITAsdGhpcy5ibGVuZC5kaXJ0eT0hMCx0aGlzLmJsZW5kRnVuYy5kaXJ0eT0hMCx0aGlzLmJsZW5kQ29sb3IuZGlydHk9ITAsdGhpcy5ibGVuZEVxdWF0aW9uLmRpcnR5PSEwLHRoaXMuY3VsbEZhY2UuZGlydHk9ITAsdGhpcy5jdWxsRmFjZVNpZGUuZGlydHk9ITAsdGhpcy5mcm9udEZhY2UuZGlydHk9ITAsdGhpcy5wcm9ncmFtLmRpcnR5PSEwLHRoaXMuYWN0aXZlVGV4dHVyZS5kaXJ0eT0hMCx0aGlzLnZpZXdwb3J0LmRpcnR5PSEwLHRoaXMuYmluZEZyYW1lYnVmZmVyLmRpcnR5PSEwLHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRUZXh0dXJlLmRpcnR5PSEwLHRoaXMuYmluZFZlcnRleEJ1ZmZlci5kaXJ0eT0hMCx0aGlzLmJpbmRFbGVtZW50QnVmZmVyLmRpcnR5PSEwLHRoaXMuZXh0VmVydGV4QXJyYXlPYmplY3QmJih0aGlzLmJpbmRWZXJ0ZXhBcnJheU9FUy5kaXJ0eT0hMCksdGhpcy5waXhlbFN0b3JlVW5wYWNrLmRpcnR5PSEwLHRoaXMucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuZGlydHk9ITAsdGhpcy5waXhlbFN0b3JlVW5wYWNrRmxpcFkuZGlydHk9ITB9LEx0LnByb3RvdHlwZS5jcmVhdGVJbmRleEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaih0aGlzLHQsZSl9LEx0LnByb3RvdHlwZS5jcmVhdGVWZXJ0ZXhCdWZmZXI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgVih0aGlzLHQsZSxyKX0sTHQucHJvdG90eXBlLmNyZWF0ZVJlbmRlcmJ1ZmZlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nbCxpPW4uY3JlYXRlUmVuZGVyYnVmZmVyKCk7cmV0dXJuIHRoaXMuYmluZFJlbmRlcmJ1ZmZlci5zZXQoaSksbi5yZW5kZXJidWZmZXJTdG9yYWdlKG4uUkVOREVSQlVGRkVSLHQsZSxyKSx0aGlzLmJpbmRSZW5kZXJidWZmZXIuc2V0KG51bGwpLGl9LEx0LnByb3RvdHlwZS5jcmVhdGVGcmFtZWJ1ZmZlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBrdCh0aGlzLHQsZSxyKX0sTHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29sb3Iscj10LmRlcHRoLG49dGhpcy5nbCxpPTA7ZSYmKGl8PW4uQ09MT1JfQlVGRkVSX0JJVCx0aGlzLmNsZWFyQ29sb3Iuc2V0KGUpLHRoaXMuY29sb3JNYXNrLnNldChbITAsITAsITAsITBdKSksdm9pZCAwIT09ciYmKGl8PW4uREVQVEhfQlVGRkVSX0JJVCx0aGlzLmRlcHRoUmFuZ2Uuc2V0KFswLDFdKSx0aGlzLmNsZWFyRGVwdGguc2V0KHIpLHRoaXMuZGVwdGhNYXNrLnNldCghMCkpLG4uY2xlYXIoaSl9LEx0LnByb3RvdHlwZS5zZXRDdWxsRmFjZT1mdW5jdGlvbih0KXshMT09PXQuZW5hYmxlP3RoaXMuY3VsbEZhY2Uuc2V0KCExKToodGhpcy5jdWxsRmFjZS5zZXQoITApLHRoaXMuY3VsbEZhY2VTaWRlLnNldCh0Lm1vZGUpLHRoaXMuZnJvbnRGYWNlLnNldCh0LmZyb250RmFjZSkpfSxMdC5wcm90b3R5cGUuc2V0RGVwdGhNb2RlPWZ1bmN0aW9uKHQpe3QuZnVuYyE9PXRoaXMuZ2wuQUxXQVlTfHx0Lm1hc2s/KHRoaXMuZGVwdGhUZXN0LnNldCghMCksdGhpcy5kZXB0aEZ1bmMuc2V0KHQuZnVuYyksdGhpcy5kZXB0aE1hc2suc2V0KHQubWFzayksdGhpcy5kZXB0aFJhbmdlLnNldCh0LnJhbmdlKSk6dGhpcy5kZXB0aFRlc3Quc2V0KCExKX0sTHQucHJvdG90eXBlLnNldFN0ZW5jaWxNb2RlPWZ1bmN0aW9uKHQpe3QudGVzdC5mdW5jIT09dGhpcy5nbC5BTFdBWVN8fHQubWFzaz8odGhpcy5zdGVuY2lsVGVzdC5zZXQoITApLHRoaXMuc3RlbmNpbE1hc2suc2V0KHQubWFzayksdGhpcy5zdGVuY2lsT3Auc2V0KFt0LmZhaWwsdC5kZXB0aEZhaWwsdC5wYXNzXSksdGhpcy5zdGVuY2lsRnVuYy5zZXQoe2Z1bmM6dC50ZXN0LmZ1bmMscmVmOnQucmVmLG1hc2s6dC50ZXN0Lm1hc2t9KSk6dGhpcy5zdGVuY2lsVGVzdC5zZXQoITEpfSxMdC5wcm90b3R5cGUuc2V0Q29sb3JNb2RlPWZ1bmN0aW9uKGUpe3QuZGVlcEVxdWFsKGUuYmxlbmRGdW5jdGlvbixTdC5SZXBsYWNlKT90aGlzLmJsZW5kLnNldCghMSk6KHRoaXMuYmxlbmQuc2V0KCEwKSx0aGlzLmJsZW5kRnVuYy5zZXQoZS5ibGVuZEZ1bmN0aW9uKSx0aGlzLmJsZW5kQ29sb3Iuc2V0KGUuYmxlbmRDb2xvcikpLHRoaXMuY29sb3JNYXNrLnNldChlLm1hc2spfSxMdC5wcm90b3R5cGUudW5iaW5kVkFPPWZ1bmN0aW9uKCl7dGhpcy5leHRWZXJ0ZXhBcnJheU9iamVjdCYmdGhpcy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KG51bGwpfTt2YXIgQ3Q9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcihyLG4saSl7dmFyIGE9dGhpcztlLmNhbGwodGhpcyksdGhpcy5pZD1yLHRoaXMuZGlzcGF0Y2hlcj1pLHRoaXMub24oImRhdGEiLChmdW5jdGlvbih0KXsic291cmNlIj09PXQuZGF0YVR5cGUmJiJtZXRhZGF0YSI9PT10LnNvdXJjZURhdGFUeXBlJiYoYS5fc291cmNlTG9hZGVkPSEwKSxhLl9zb3VyY2VMb2FkZWQmJiFhLl9wYXVzZWQmJiJzb3VyY2UiPT09dC5kYXRhVHlwZSYmImNvbnRlbnQiPT09dC5zb3VyY2VEYXRhVHlwZSYmKGEucmVsb2FkKCksYS50cmFuc2Zvcm0mJmEudXBkYXRlKGEudHJhbnNmb3JtKSl9KSksdGhpcy5vbigiZXJyb3IiLChmdW5jdGlvbigpe2EuX3NvdXJjZUVycm9yZWQ9ITB9KSksdGhpcy5fc291cmNlPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPW5ldyBEW3IudHlwZV0oZSxyLG4saSk7aWYoYS5pZCE9PWUpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBTb3VyY2UgaWQgdG8gYmUgIitlKyIgaW5zdGVhZCBvZiAiK2EuaWQpO3JldHVybiB0LmJpbmRBbGwoWyJsb2FkIiwiYWJvcnQiLCJ1bmxvYWQiLCJzZXJpYWxpemUiLCJwcmVwYXJlIl0sYSksYX0ocixuLGksdGhpcyksdGhpcy5fdGlsZXM9e30sdGhpcy5fY2FjaGU9bmV3IE4oMCx0aGlzLl91bmxvYWRUaWxlLmJpbmQodGhpcykpLHRoaXMuX3RpbWVycz17fSx0aGlzLl9jYWNoZVRpbWVycz17fSx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPW51bGwsdGhpcy5fbG9hZGVkUGFyZW50VGlsZXM9e30sdGhpcy5fY292ZXJlZFRpbGVzPXt9LHRoaXMuX3N0YXRlPW5ldyB0LlNvdXJjZUZlYXR1cmVTdGF0ZX1yZXR1cm4gZSYmKHIuX19wcm90b19fPWUpLHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLHIucHJvdG90eXBlLmNvbnN0cnVjdG9yPXIsci5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5tYXA9dCx0aGlzLl9tYXhUaWxlQ2FjaGVTaXplPXQ/dC5fbWF4VGlsZUNhY2hlU2l6ZTpudWxsLHRoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uQWRkJiZ0aGlzLl9zb3VyY2Uub25BZGQodCl9LHIucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3NvdXJjZSYmdGhpcy5fc291cmNlLm9uUmVtb3ZlJiZ0aGlzLl9zb3VyY2Uub25SZW1vdmUodCl9LHIucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe2lmKHRoaXMuX3NvdXJjZUVycm9yZWQpcmV0dXJuITA7aWYoIXRoaXMuX3NvdXJjZUxvYWRlZClyZXR1cm4hMTtpZighdGhpcy5fc291cmNlLmxvYWRlZCgpKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLl90aWxlcyl7dmFyIGU9dGhpcy5fdGlsZXNbdF07aWYoImxvYWRlZCIhPT1lLnN0YXRlJiYiZXJyb3JlZCIhPT1lLnN0YXRlKXJldHVybiExfXJldHVybiEwfSxyLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc291cmNlfSxyLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3RoaXMuX3BhdXNlZD0hMH0sci5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7aWYodGhpcy5fcGF1c2VkKXt2YXIgdD10aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZTt0aGlzLl9wYXVzZWQ9ITEsdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdCYmdGhpcy5yZWxvYWQoKSx0aGlzLnRyYW5zZm9ybSYmdGhpcy51cGRhdGUodGhpcy50cmFuc2Zvcm0pfX0sci5wcm90b3R5cGUuX2xvYWRUaWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3NvdXJjZS5sb2FkVGlsZSh0LGUpfSxyLnByb3RvdHlwZS5fdW5sb2FkVGlsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zb3VyY2UudW5sb2FkVGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLnVubG9hZFRpbGUodCwoZnVuY3Rpb24oKXt9KSl9LHIucHJvdG90eXBlLl9hYm9ydFRpbGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc291cmNlLmFib3J0VGlsZSlyZXR1cm4gdGhpcy5fc291cmNlLmFib3J0VGlsZSh0LChmdW5jdGlvbigpe30pKX0sci5wcm90b3R5cGUuc2VyaWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvdXJjZS5zZXJpYWxpemUoKX0sci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5fc291cmNlLnByZXBhcmUmJnRoaXMuX3NvdXJjZS5wcmVwYXJlKCksdGhpcy5fc3RhdGUuY29hbGVzY2VDaGFuZ2VzKHRoaXMuX3RpbGVzLHRoaXMubWFwP3RoaXMubWFwLnBhaW50ZXI6bnVsbCksdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO3IudXBsb2FkKHQpLHIucHJlcGFyZSh0aGlzLm1hcC5zdHlsZS5pbWFnZU1hbmFnZXIpfX0sci5wcm90b3R5cGUuZ2V0SWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHQudmFsdWVzKHRoaXMuX3RpbGVzKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbGVJRH0pKS5zb3J0KFB0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKX0sci5wcm90b3R5cGUuZ2V0UmVuZGVyYWJsZUlkcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLG49W107Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXRoaXMuX2lzSWRSZW5kZXJhYmxlKGksZSkmJm4ucHVzaCh0aGlzLl90aWxlc1tpXSk7cmV0dXJuIGU/bi5zb3J0KChmdW5jdGlvbihlLG4pe3ZhciBpPWUudGlsZUlELGE9bi50aWxlSUQsbz1uZXcgdC5Qb2ludChpLmNhbm9uaWNhbC54LGkuY2Fub25pY2FsLnkpLl9yb3RhdGUoci50cmFuc2Zvcm0uYW5nbGUpLHM9bmV3IHQuUG9pbnQoYS5jYW5vbmljYWwueCxhLmNhbm9uaWNhbC55KS5fcm90YXRlKHIudHJhbnNmb3JtLmFuZ2xlKTtyZXR1cm4gaS5vdmVyc2NhbGVkWi1hLm92ZXJzY2FsZWRafHxzLnktby55fHxzLngtby54fSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlELmtleX0pKTpuLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpLnNvcnQoUHQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpfSxyLnByb3RvdHlwZS5oYXNSZW5kZXJhYmxlUGFyZW50PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZmluZExvYWRlZFBhcmVudCh0LDApO3JldHVybiEhZSYmdGhpcy5faXNJZFJlbmRlcmFibGUoZS50aWxlSUQua2V5KX0sci5wcm90b3R5cGUuX2lzSWRSZW5kZXJhYmxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdJiZ0aGlzLl90aWxlc1t0XS5oYXNEYXRhKCkmJiF0aGlzLl9jb3ZlcmVkVGlsZXNbdF0mJihlfHwhdGhpcy5fdGlsZXNbdF0uaG9sZGluZ0ZvckZhZGUoKSl9LHIucHJvdG90eXBlLnJlbG9hZD1mdW5jdGlvbigpe2lmKHRoaXMuX3BhdXNlZCl0aGlzLl9zaG91bGRSZWxvYWRPblJlc3VtZT0hMDtlbHNlIGZvcih2YXIgdCBpbiB0aGlzLl9jYWNoZS5yZXNldCgpLHRoaXMuX3RpbGVzKSJlcnJvcmVkIiE9PXRoaXMuX3RpbGVzW3RdLnN0YXRlJiZ0aGlzLl9yZWxvYWRUaWxlKHQsInJlbG9hZGluZyIpfSxyLnByb3RvdHlwZS5fcmVsb2FkVGlsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3RpbGVzW3RdO3ImJigibG9hZGluZyIhPT1yLnN0YXRlJiYoci5zdGF0ZT1lKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsdCxlKSkpfSxyLnByb3RvdHlwZS5fdGlsZUxvYWRlZD1mdW5jdGlvbihlLHIsbixpKXtpZihpKXJldHVybiBlLnN0YXRlPSJlcnJvcmVkIix2b2lkKDQwNCE9PWkuc3RhdHVzP3RoaXMuX3NvdXJjZS5maXJlKG5ldyB0LkVycm9yRXZlbnQoaSx7dGlsZTplfSkpOnRoaXMudXBkYXRlKHRoaXMudHJhbnNmb3JtKSk7ZS50aW1lQWRkZWQ9dC5icm93c2VyLm5vdygpLCJleHBpcmVkIj09PW4mJihlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uPSEwKSx0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocixlKSwicmFzdGVyLWRlbSI9PT10aGlzLmdldFNvdXJjZSgpLnR5cGUmJmUuZGVtJiZ0aGlzLl9iYWNrZmlsbERFTShlKSx0aGlzLl9zdGF0ZS5pbml0aWFsaXplVGlsZVN0YXRlKGUsdGhpcy5tYXA/dGhpcy5tYXAucGFpbnRlcjpudWxsKSx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzb3VyY2UiLHRpbGU6ZSxjb29yZDplLnRpbGVJRH0pKX0sci5wcm90b3R5cGUuX2JhY2tmaWxsREVNPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmdldFJlbmRlcmFibGVJZHMoKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07aWYodC5uZWlnaGJvcmluZ1RpbGVzJiZ0Lm5laWdoYm9yaW5nVGlsZXNbbl0pe3ZhciBpPXRoaXMuZ2V0VGlsZUJ5SUQobik7YSh0LGkpLGEoaSx0KX19ZnVuY3Rpb24gYSh0LGUpe3QubmVlZHNIaWxsc2hhZGVQcmVwYXJlPSEwO3ZhciByPWUudGlsZUlELmNhbm9uaWNhbC54LXQudGlsZUlELmNhbm9uaWNhbC54LG49ZS50aWxlSUQuY2Fub25pY2FsLnktdC50aWxlSUQuY2Fub25pY2FsLnksaT1NYXRoLnBvdygyLHQudGlsZUlELmNhbm9uaWNhbC56KSxhPWUudGlsZUlELmtleTswPT09ciYmMD09PW58fE1hdGguYWJzKG4pPjF8fChNYXRoLmFicyhyKT4xJiYoMT09PU1hdGguYWJzKHIraSk/cis9aToxPT09TWF0aC5hYnMoci1pKSYmKHItPWkpKSxlLmRlbSYmdC5kZW0mJih0LmRlbS5iYWNrZmlsbEJvcmRlcihlLmRlbSxyLG4pLHQubmVpZ2hib3JpbmdUaWxlcyYmdC5uZWlnaGJvcmluZ1RpbGVzW2FdJiYodC5uZWlnaGJvcmluZ1RpbGVzW2FdLmJhY2tmaWxsZWQ9ITApKSl9fSxyLnByb3RvdHlwZS5nZXRUaWxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmdldFRpbGVCeUlEKHQua2V5KX0sci5wcm90b3R5cGUuZ2V0VGlsZUJ5SUQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3RpbGVzW3RdfSxyLnByb3RvdHlwZS5fcmV0YWluTG9hZGVkQ2hpbGRyZW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpIGluIHRoaXMuX3RpbGVzKXt2YXIgYT10aGlzLl90aWxlc1tpXTtpZighKG5baV18fCFhLmhhc0RhdGEoKXx8YS50aWxlSUQub3ZlcnNjYWxlZFo8PWV8fGEudGlsZUlELm92ZXJzY2FsZWRaPnIpKXtmb3IodmFyIG89YS50aWxlSUQ7YSYmYS50aWxlSUQub3ZlcnNjYWxlZFo+ZSsxOyl7dmFyIHM9YS50aWxlSUQuc2NhbGVkVG8oYS50aWxlSUQub3ZlcnNjYWxlZFotMSk7KGE9dGhpcy5fdGlsZXNbcy5rZXldKSYmYS5oYXNEYXRhKCkmJihvPXMpfWZvcih2YXIgbD1vO2wub3ZlcnNjYWxlZFo+ZTspaWYodFsobD1sLnNjYWxlZFRvKGwub3ZlcnNjYWxlZFotMSkpLmtleV0pe25bby5rZXldPW87YnJlYWt9fX19LHIucHJvdG90eXBlLmZpbmRMb2FkZWRQYXJlbnQ9ZnVuY3Rpb24odCxlKXtpZih0LmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7dmFyIHI9dGhpcy5fbG9hZGVkUGFyZW50VGlsZXNbdC5rZXldO3JldHVybiByJiZyLnRpbGVJRC5vdmVyc2NhbGVkWj49ZT9yOm51bGx9Zm9yKHZhciBuPXQub3ZlcnNjYWxlZFotMTtuPj1lO24tLSl7dmFyIGk9dC5zY2FsZWRUbyhuKSxhPXRoaXMuX2dldExvYWRlZFRpbGUoaSk7aWYoYSlyZXR1cm4gYX19LHIucHJvdG90eXBlLl9nZXRMb2FkZWRUaWxlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RpbGVzW3Qua2V5XTtyZXR1cm4gZSYmZS5oYXNEYXRhKCk/ZTp0aGlzLl9jYWNoZS5nZXRCeUtleSh0LndyYXBwZWQoKS5rZXkpfSxyLnByb3RvdHlwZS51cGRhdGVDYWNoZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9KE1hdGguY2VpbCh0LndpZHRoL3RoaXMuX3NvdXJjZS50aWxlU2l6ZSkrMSkqKE1hdGguY2VpbCh0LmhlaWdodC90aGlzLl9zb3VyY2UudGlsZVNpemUpKzEpLHI9TWF0aC5mbG9vcig1KmUpLG49Im51bWJlciI9PXR5cGVvZiB0aGlzLl9tYXhUaWxlQ2FjaGVTaXplP01hdGgubWluKHRoaXMuX21heFRpbGVDYWNoZVNpemUscik6cjt0aGlzLl9jYWNoZS5zZXRNYXhTaXplKG4pfSxyLnByb3RvdHlwZS5oYW5kbGVXcmFwSnVtcD1mdW5jdGlvbih0KXt2YXIgZT0odC0odm9pZCAwPT09dGhpcy5fcHJldkxuZz90OnRoaXMuX3ByZXZMbmcpKS8zNjAscj1NYXRoLnJvdW5kKGUpO2lmKHRoaXMuX3ByZXZMbmc9dCxyKXt2YXIgbj17fTtmb3IodmFyIGkgaW4gdGhpcy5fdGlsZXMpe3ZhciBhPXRoaXMuX3RpbGVzW2ldO2EudGlsZUlEPWEudGlsZUlELnVud3JhcFRvKGEudGlsZUlELndyYXArciksblthLnRpbGVJRC5rZXldPWF9Zm9yKHZhciBvIGluIHRoaXMuX3RpbGVzPW4sdGhpcy5fdGltZXJzKWNsZWFyVGltZW91dCh0aGlzLl90aW1lcnNbb10pLGRlbGV0ZSB0aGlzLl90aW1lcnNbb107Zm9yKHZhciBzIGluIHRoaXMuX3RpbGVzKXt2YXIgbD10aGlzLl90aWxlc1tzXTt0aGlzLl9zZXRUaWxlUmVsb2FkVGltZXIocyxsKX19fSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih0aGlzLnRyYW5zZm9ybT1lLHRoaXMuX3NvdXJjZUxvYWRlZCYmIXRoaXMuX3BhdXNlZCl7dmFyIGk7dGhpcy51cGRhdGVDYWNoZVNpemUoZSksdGhpcy5oYW5kbGVXcmFwSnVtcCh0aGlzLnRyYW5zZm9ybS5jZW50ZXIubG5nKSx0aGlzLl9jb3ZlcmVkVGlsZXM9e30sdGhpcy51c2VkP3RoaXMuX3NvdXJjZS50aWxlSUQ/aT1lLmdldFZpc2libGVVbndyYXBwZWRDb29yZGluYXRlcyh0aGlzLl9zb3VyY2UudGlsZUlEKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdC5PdmVyc2NhbGVkVGlsZUlEKGUuY2Fub25pY2FsLnosZS53cmFwLGUuY2Fub25pY2FsLnosZS5jYW5vbmljYWwueCxlLmNhbm9uaWNhbC55KX0pKTooaT1lLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOnRoaXMuX3NvdXJjZS50aWxlU2l6ZSxtaW56b29tOnRoaXMuX3NvdXJjZS5taW56b29tLG1heHpvb206dGhpcy5fc291cmNlLm1heHpvb20scm91bmRab29tOnRoaXMuX3NvdXJjZS5yb3VuZFpvb20scmVwYXJzZU92ZXJzY2FsZWQ6dGhpcy5fc291cmNlLnJlcGFyc2VPdmVyc2NhbGVkfSksdGhpcy5fc291cmNlLmhhc1RpbGUmJihpPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fc291cmNlLmhhc1RpbGUodCl9KSkpKTppPVtdO3ZhciBhPWUuY292ZXJpbmdab29tTGV2ZWwodGhpcy5fc291cmNlKSxvPU1hdGgubWF4KGEtci5tYXhPdmVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz1NYXRoLm1heChhK3IubWF4VW5kZXJ6b29taW5nLHRoaXMuX3NvdXJjZS5taW56b29tKSxsPXRoaXMuX3VwZGF0ZVJldGFpbmVkVGlsZXMoaSxhKTtpZihJdCh0aGlzLl9zb3VyY2UudHlwZSkpe2Zvcih2YXIgYz17fSx1PXt9LGY9MCxoPU9iamVjdC5rZXlzKGwpO2Y8aC5sZW5ndGg7Zis9MSl7dmFyIHA9aFtmXSxkPWxbcF0sbT10aGlzLl90aWxlc1twXTtpZihtJiYhKG0uZmFkZUVuZFRpbWUmJm0uZmFkZUVuZFRpbWU8PXQuYnJvd3Nlci5ub3coKSkpe3ZhciBnPXRoaXMuZmluZExvYWRlZFBhcmVudChkLG8pO2cmJih0aGlzLl9hZGRUaWxlKGcudGlsZUlEKSxjW2cudGlsZUlELmtleV09Zy50aWxlSUQpLHVbcF09ZH19Zm9yKHZhciB2IGluIHRoaXMuX3JldGFpbkxvYWRlZENoaWxkcmVuKHUsYSxzLGwpLGMpbFt2XXx8KHRoaXMuX2NvdmVyZWRUaWxlc1t2XT0hMCxsW3ZdPWNbdl0pfWZvcih2YXIgeSBpbiBsKXRoaXMuX3RpbGVzW3ldLmNsZWFyRmFkZUhvbGQoKTtmb3IodmFyIHg9MCxiPXQua2V5c0RpZmZlcmVuY2UodGhpcy5fdGlsZXMsbCk7eDxiLmxlbmd0aDt4Kz0xKXt2YXIgXz1iW3hdLHc9dGhpcy5fdGlsZXNbX107dy5oYXNTeW1ib2xCdWNrZXRzJiYhdy5ob2xkaW5nRm9yRmFkZSgpP3cuc2V0SG9sZER1cmF0aW9uKHRoaXMubWFwLl9mYWRlRHVyYXRpb24pOncuaGFzU3ltYm9sQnVja2V0cyYmIXcuc3ltYm9sRmFkZUZpbmlzaGVkKCl8fHRoaXMuX3JlbW92ZVRpbGUoXyl9dGhpcy5fdXBkYXRlTG9hZGVkUGFyZW50VGlsZUNhY2hlKCl9fSxyLnByb3RvdHlwZS5yZWxlYXNlU3ltYm9sRmFkZVRpbGVzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuX3RpbGVzKXRoaXMuX3RpbGVzW3RdLmhvbGRpbmdGb3JGYWRlKCkmJnRoaXMuX3JlbW92ZVRpbGUodCl9LHIucHJvdG90eXBlLl91cGRhdGVSZXRhaW5lZFRpbGVzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPXt9LGk9e30sYT1NYXRoLm1heChlLXIubWF4T3Zlcnpvb21pbmcsdGhpcy5fc291cmNlLm1pbnpvb20pLG89TWF0aC5tYXgoZStyLm1heFVuZGVyem9vbWluZyx0aGlzLl9zb3VyY2UubWluem9vbSkscz17fSxsPTAsYz10O2w8Yy5sZW5ndGg7bCs9MSl7dmFyIHU9Y1tsXSxmPXRoaXMuX2FkZFRpbGUodSk7blt1LmtleV09dSxmLmhhc0RhdGEoKXx8ZTx0aGlzLl9zb3VyY2UubWF4em9vbSYmKHNbdS5rZXldPXUpfXRoaXMuX3JldGFpbkxvYWRlZENoaWxkcmVuKHMsZSxvLG4pO2Zvcih2YXIgaD0wLHA9dDtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF0sbT10aGlzLl90aWxlc1tkLmtleV07aWYoIW0uaGFzRGF0YSgpKXtpZihlKzE+dGhpcy5fc291cmNlLm1heHpvb20pe3ZhciBnPWQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pWzBdLHY9dGhpcy5nZXRUaWxlKGcpO2lmKHYmJnYuaGFzRGF0YSgpKXtuW2cua2V5XT1nO2NvbnRpbnVlfX1lbHNle3ZhciB5PWQuY2hpbGRyZW4odGhpcy5fc291cmNlLm1heHpvb20pO2lmKG5beVswXS5rZXldJiZuW3lbMV0ua2V5XSYmblt5WzJdLmtleV0mJm5beVszXS5rZXldKWNvbnRpbnVlfWZvcih2YXIgeD1tLndhc1JlcXVlc3RlZCgpLGI9ZC5vdmVyc2NhbGVkWi0xO2I+PWE7LS1iKXt2YXIgXz1kLnNjYWxlZFRvKGIpO2lmKGlbXy5rZXldKWJyZWFrO2lmKGlbXy5rZXldPSEwLCEobT10aGlzLmdldFRpbGUoXykpJiZ4JiYobT10aGlzLl9hZGRUaWxlKF8pKSxtJiYobltfLmtleV09Xyx4PW0ud2FzUmVxdWVzdGVkKCksbS5oYXNEYXRhKCkpKWJyZWFrfX19cmV0dXJuIG59LHIucHJvdG90eXBlLl91cGRhdGVMb2FkZWRQYXJlbnRUaWxlQ2FjaGU9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fbG9hZGVkUGFyZW50VGlsZXM9e30sdGhpcy5fdGlsZXMpe2Zvcih2YXIgZT1bXSxyPXZvaWQgMCxuPXRoaXMuX3RpbGVzW3RdLnRpbGVJRDtuLm92ZXJzY2FsZWRaPjA7KXtpZihuLmtleSBpbiB0aGlzLl9sb2FkZWRQYXJlbnRUaWxlcyl7cj10aGlzLl9sb2FkZWRQYXJlbnRUaWxlc1tuLmtleV07YnJlYWt9ZS5wdXNoKG4ua2V5KTt2YXIgaT1uLnNjYWxlZFRvKG4ub3ZlcnNjYWxlZFotMSk7aWYocj10aGlzLl9nZXRMb2FkZWRUaWxlKGkpKWJyZWFrO249aX1mb3IodmFyIGE9MCxvPWU7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdO3RoaXMuX2xvYWRlZFBhcmVudFRpbGVzW3NdPXJ9fX0sci5wcm90b3R5cGUuX2FkZFRpbGU9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5fdGlsZXNbZS5rZXldO2lmKHIpcmV0dXJuIHI7KHI9dGhpcy5fY2FjaGUuZ2V0QW5kUmVtb3ZlKGUpKSYmKHRoaXMuX3NldFRpbGVSZWxvYWRUaW1lcihlLmtleSxyKSxyLnRpbGVJRD1lLHRoaXMuX3N0YXRlLmluaXRpYWxpemVUaWxlU3RhdGUocix0aGlzLm1hcD90aGlzLm1hcC5wYWludGVyOm51bGwpLHRoaXMuX2NhY2hlVGltZXJzW2Uua2V5XSYmKGNsZWFyVGltZW91dCh0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0pLGRlbGV0ZSB0aGlzLl9jYWNoZVRpbWVyc1tlLmtleV0sdGhpcy5fc2V0VGlsZVJlbG9hZFRpbWVyKGUua2V5LHIpKSk7dmFyIG49Qm9vbGVhbihyKTtyZXR1cm4gbnx8KHI9bmV3IHQuVGlsZShlLHRoaXMuX3NvdXJjZS50aWxlU2l6ZSplLm92ZXJzY2FsZUZhY3RvcigpKSx0aGlzLl9sb2FkVGlsZShyLHRoaXMuX3RpbGVMb2FkZWQuYmluZCh0aGlzLHIsZS5rZXksci5zdGF0ZSkpKSxyPyhyLnVzZXMrKyx0aGlzLl90aWxlc1tlLmtleV09cixufHx0aGlzLl9zb3VyY2UuZmlyZShuZXcgdC5FdmVudCgiZGF0YWxvYWRpbmciLHt0aWxlOnIsY29vcmQ6ci50aWxlSUQsZGF0YVR5cGU6InNvdXJjZSJ9KSkscik6bnVsbH0sci5wcm90b3R5cGUuX3NldFRpbGVSZWxvYWRUaW1lcj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXM7dCBpbiB0aGlzLl90aW1lcnMmJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKTt2YXIgbj1lLmdldEV4cGlyeVRpbWVvdXQoKTtuJiYodGhpcy5fdGltZXJzW3RdPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ci5fcmVsb2FkVGlsZSh0LCJleHBpcmVkIiksZGVsZXRlIHIuX3RpbWVyc1t0XX0pLG4pKX0sci5wcm90b3R5cGUuX3JlbW92ZVRpbGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZXNbdF07ZSYmKGUudXNlcy0tLGRlbGV0ZSB0aGlzLl90aWxlc1t0XSx0aGlzLl90aW1lcnNbdF0mJihjbGVhclRpbWVvdXQodGhpcy5fdGltZXJzW3RdKSxkZWxldGUgdGhpcy5fdGltZXJzW3RdKSxlLnVzZXM+MHx8KGUuaGFzRGF0YSgpJiYicmVsb2FkaW5nIiE9PWUuc3RhdGU/dGhpcy5fY2FjaGUuYWRkKGUudGlsZUlELGUsZS5nZXRFeHBpcnlUaW1lb3V0KCkpOihlLmFib3J0ZWQ9ITAsdGhpcy5fYWJvcnRUaWxlKGUpLHRoaXMuX3VubG9hZFRpbGUoZSkpKSl9LHIucHJvdG90eXBlLmNsZWFyVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fc2hvdWxkUmVsb2FkT25SZXN1bWU9ITEsdGhpcy5fcGF1c2VkPSExLHRoaXMuX3RpbGVzKXRoaXMuX3JlbW92ZVRpbGUodCk7dGhpcy5fY2FjaGUucmVzZXQoKX0sci5wcm90b3R5cGUudGlsZXNJbj1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPVtdLG89dGhpcy50cmFuc2Zvcm07aWYoIW8pcmV0dXJuIGE7Zm9yKHZhciBzPW4/by5nZXRDYW1lcmFRdWVyeUdlb21ldHJ5KGUpOmUsbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIG8ucG9pbnRDb29yZGluYXRlKHQpfSkpLGM9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBvLnBvaW50Q29vcmRpbmF0ZSh0KX0pKSx1PXRoaXMuZ2V0SWRzKCksZj0xLzAsaD0xLzAscD0tMS8wLGQ9LTEvMCxtPTAsZz1jO208Zy5sZW5ndGg7bSs9MSl7dmFyIHY9Z1ttXTtmPU1hdGgubWluKGYsdi54KSxoPU1hdGgubWluKGgsdi55KSxwPU1hdGgubWF4KHAsdi54KSxkPU1hdGgubWF4KGQsdi55KX1mb3IodmFyIHk9ZnVuY3Rpb24oZSl7dmFyIG49aS5fdGlsZXNbdVtlXV07aWYoIW4uaG9sZGluZ0ZvckZhZGUoKSl7dmFyIHM9bi50aWxlSUQsbT1NYXRoLnBvdygyLG8uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksZz1yKm4ucXVlcnlQYWRkaW5nKnQuRVhURU5UL24udGlsZVNpemUvbSx2PVtzLmdldFRpbGVQb2ludChuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoZixoKSkscy5nZXRUaWxlUG9pbnQobmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHAsZCkpXTtpZih2WzBdLngtZzx0LkVYVEVOVCYmdlswXS55LWc8dC5FWFRFTlQmJnZbMV0ueCtnPj0wJiZ2WzFdLnkrZz49MCl7dmFyIHk9bC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmdldFRpbGVQb2ludCh0KX0pKSx4PWMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcy5nZXRUaWxlUG9pbnQodCl9KSk7YS5wdXNoKHt0aWxlOm4sdGlsZUlEOnMscXVlcnlHZW9tZXRyeTp5LGNhbWVyYVF1ZXJ5R2VvbWV0cnk6eCxzY2FsZTptfSl9fX0seD0wO3g8dS5sZW5ndGg7eCsrKXkoeCk7cmV0dXJuIGF9LHIucHJvdG90eXBlLmdldFZpc2libGVDb29yZGluYXRlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPXRoaXMuZ2V0UmVuZGVyYWJsZUlkcyh0KS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlLl90aWxlc1t0XS50aWxlSUR9KSksbj0wLGk9cjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07YS5wb3NNYXRyaXg9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KGEudG9VbndyYXBwZWQoKSl9cmV0dXJuIHJ9LHIucHJvdG90eXBlLmhhc1RyYW5zaXRpb249ZnVuY3Rpb24oKXtpZih0aGlzLl9zb3VyY2UuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2lmKEl0KHRoaXMuX3NvdXJjZS50eXBlKSlmb3IodmFyIGUgaW4gdGhpcy5fdGlsZXMpe3ZhciByPXRoaXMuX3RpbGVzW2VdO2lmKHZvaWQgMCE9PXIuZmFkZUVuZFRpbWUmJnIuZmFkZUVuZFRpbWU+PXQuYnJvd3Nlci5ub3coKSlyZXR1cm4hMH1yZXR1cm4hMX0sci5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSxyKXt0PXR8fCJfZ2VvanNvblRpbGVMYXllciIsdGhpcy5fc3RhdGUudXBkYXRlU3RhdGUodCxlLHIpfSxyLnByb3RvdHlwZS5yZW1vdmVGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlLHIpe3Q9dHx8Il9nZW9qc29uVGlsZUxheWVyIix0aGlzLl9zdGF0ZS5yZW1vdmVGZWF0dXJlU3RhdGUodCxlLHIpfSxyLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10fHwiX2dlb2pzb25UaWxlTGF5ZXIiLHRoaXMuX3N0YXRlLmdldFN0YXRlKHQsZSl9LHIucHJvdG90eXBlLnNldERlcGVuZGVuY2llcz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdGlsZXNbdF07biYmbi5zZXREZXBlbmRlbmNpZXMoZSxyKX0sci5wcm90b3R5cGUucmVsb2FkVGlsZXNGb3JEZXBlbmRlbmNpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIgaW4gdGhpcy5fdGlsZXMpe3RoaXMuX3RpbGVzW3JdLmhhc0RlcGVuZGVuY3kodCxlKSYmdGhpcy5fcmVsb2FkVGlsZShyLCJyZWxvYWRpbmciKX10aGlzLl9jYWNoZS5maWx0ZXIoKGZ1bmN0aW9uKHIpe3JldHVybiFyLmhhc0RlcGVuZGVuY3kodCxlKX0pKX0scn0odC5FdmVudGVkKTtmdW5jdGlvbiBQdCh0LGUpe3ZhciByPU1hdGguYWJzKDIqdC53cmFwKS0rKHQud3JhcDwwKSxuPU1hdGguYWJzKDIqZS53cmFwKS0rKGUud3JhcDwwKTtyZXR1cm4gdC5vdmVyc2NhbGVkWi1lLm92ZXJzY2FsZWRafHxuLXJ8fGUuY2Fub25pY2FsLnktdC5jYW5vbmljYWwueXx8ZS5jYW5vbmljYWwueC10LmNhbm9uaWNhbC54fWZ1bmN0aW9uIEl0KHQpe3JldHVybiJyYXN0ZXIiPT09dHx8ImltYWdlIj09PXR8fCJ2aWRlbyI9PT10fWZ1bmN0aW9uIE90KCl7cmV0dXJuIG5ldyB0LndpbmRvdy5Xb3JrZXIoWmkud29ya2VyVXJsKX1DdC5tYXhPdmVyem9vbWluZz0xMCxDdC5tYXhVbmRlcnpvb21pbmc9Mzt2YXIgenQ9Im1hcGJveGdsX3ByZWxvYWRlZF93b3JrZXJfcG9vbCIsRHQ9ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZT17fX07RHQucHJvdG90eXBlLmFjcXVpcmU9ZnVuY3Rpb24odCl7aWYoIXRoaXMud29ya2Vycylmb3IodGhpcy53b3JrZXJzPVtdO3RoaXMud29ya2Vycy5sZW5ndGg8RHQud29ya2VyQ291bnQ7KXRoaXMud29ya2Vycy5wdXNoKG5ldyBPdCk7cmV0dXJuIHRoaXMuYWN0aXZlW3RdPSEwLHRoaXMud29ya2Vycy5zbGljZSgpfSxEdC5wcm90b3R5cGUucmVsZWFzZT1mdW5jdGlvbih0KXtkZWxldGUgdGhpcy5hY3RpdmVbdF0sMD09PXRoaXMubnVtQWN0aXZlKCkmJih0aGlzLndvcmtlcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50ZXJtaW5hdGUoKX0pKSx0aGlzLndvcmtlcnM9bnVsbCl9LER0LnByb3RvdHlwZS5pc1ByZWxvYWRlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmVbenRdfSxEdC5wcm90b3R5cGUubnVtQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZlKS5sZW5ndGh9O3ZhciBSdCxGdD1NYXRoLmZsb29yKHQuYnJvd3Nlci5oYXJkd2FyZUNvbmN1cnJlbmN5LzIpO2Z1bmN0aW9uIEJ0KCl7cmV0dXJuIFJ0fHwoUnQ9bmV3IER0KSxSdH1mdW5jdGlvbiBOdChlLHIpe3ZhciBuPXt9O2Zvcih2YXIgaSBpbiBlKSJyZWYiIT09aSYmKG5baV09ZVtpXSk7cmV0dXJuIHQucmVmUHJvcGVydGllcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0IGluIHImJihuW3RdPXJbdF0pfSkpLG59ZnVuY3Rpb24ganQodCl7dD10LnNsaWNlKCk7Zm9yKHZhciBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0wO3I8dC5sZW5ndGg7cisrKWVbdFtyXS5pZF09dFtyXTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKykicmVmImluIHRbbl0mJih0W25dPU50KHRbbl0sZVt0W25dLnJlZl0pKTtyZXR1cm4gdH1EdC53b3JrZXJDb3VudD1NYXRoLm1heChNYXRoLm1pbihGdCw2KSwxKTt2YXIgVXQ9e3NldFN0eWxlOiJzZXRTdHlsZSIsYWRkTGF5ZXI6ImFkZExheWVyIixyZW1vdmVMYXllcjoicmVtb3ZlTGF5ZXIiLHNldFBhaW50UHJvcGVydHk6InNldFBhaW50UHJvcGVydHkiLHNldExheW91dFByb3BlcnR5OiJzZXRMYXlvdXRQcm9wZXJ0eSIsc2V0RmlsdGVyOiJzZXRGaWx0ZXIiLGFkZFNvdXJjZToiYWRkU291cmNlIixyZW1vdmVTb3VyY2U6InJlbW92ZVNvdXJjZSIsc2V0R2VvSlNPTlNvdXJjZURhdGE6InNldEdlb0pTT05Tb3VyY2VEYXRhIixzZXRMYXllclpvb21SYW5nZToic2V0TGF5ZXJab29tUmFuZ2UiLHNldExheWVyUHJvcGVydHk6InNldExheWVyUHJvcGVydHkiLHNldENlbnRlcjoic2V0Q2VudGVyIixzZXRab29tOiJzZXRab29tIixzZXRCZWFyaW5nOiJzZXRCZWFyaW5nIixzZXRQaXRjaDoic2V0UGl0Y2giLHNldFNwcml0ZToic2V0U3ByaXRlIixzZXRHbHlwaHM6InNldEdseXBocyIsc2V0VHJhbnNpdGlvbjoic2V0VHJhbnNpdGlvbiIsc2V0TGlnaHQ6InNldExpZ2h0In07ZnVuY3Rpb24gVnQodCxlLHIpe3IucHVzaCh7Y29tbWFuZDpVdC5hZGRTb3VyY2UsYXJnczpbdCxlW3RdXX0pfWZ1bmN0aW9uIEh0KHQsZSxyKXtlLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlU291cmNlLGFyZ3M6W3RdfSksclt0XT0hMH1mdW5jdGlvbiBxdCh0LGUscixuKXtIdCh0LHIsbiksVnQodCxlLHIpfWZ1bmN0aW9uIEd0KGUscixuKXt2YXIgaTtmb3IoaSBpbiBlW25dKWlmKGVbbl0uaGFzT3duUHJvcGVydHkoaSkmJiJkYXRhIiE9PWkmJiF0LmRlZXBFcXVhbChlW25dW2ldLHJbbl1baV0pKXJldHVybiExO2ZvcihpIGluIHJbbl0paWYocltuXS5oYXNPd25Qcm9wZXJ0eShpKSYmImRhdGEiIT09aSYmIXQuZGVlcEVxdWFsKGVbbl1baV0scltuXVtpXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gWXQoZSxyLG4saSxhLG8pe3ZhciBzO2ZvcihzIGluIHI9cnx8e30sZT1lfHx7fSllLmhhc093blByb3BlcnR5KHMpJiYodC5kZWVwRXF1YWwoZVtzXSxyW3NdKXx8bi5wdXNoKHtjb21tYW5kOm8sYXJnczpbaSxzLHJbc10sYV19KSk7Zm9yKHMgaW4gcilyLmhhc093blByb3BlcnR5KHMpJiYhZS5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZGVlcEVxdWFsKGVbc10scltzXSl8fG4ucHVzaCh7Y29tbWFuZDpvLGFyZ3M6W2kscyxyW3NdLGFdfSkpfWZ1bmN0aW9uIFd0KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuIHRbZS5pZF09ZSx0fWZ1bmN0aW9uIFp0KGUscil7aWYoIWUpcmV0dXJuW3tjb21tYW5kOlV0LnNldFN0eWxlLGFyZ3M6W3JdfV07dmFyIG49W107dHJ5e2lmKCF0LmRlZXBFcXVhbChlLnZlcnNpb24sci52ZXJzaW9uKSlyZXR1cm5be2NvbW1hbmQ6VXQuc2V0U3R5bGUsYXJnczpbcl19XTt0LmRlZXBFcXVhbChlLmNlbnRlcixyLmNlbnRlcil8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRDZW50ZXIsYXJnczpbci5jZW50ZXJdfSksdC5kZWVwRXF1YWwoZS56b29tLHIuem9vbSl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRab29tLGFyZ3M6W3Iuem9vbV19KSx0LmRlZXBFcXVhbChlLmJlYXJpbmcsci5iZWFyaW5nKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEJlYXJpbmcsYXJnczpbci5iZWFyaW5nXX0pLHQuZGVlcEVxdWFsKGUucGl0Y2gsci5waXRjaCl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRQaXRjaCxhcmdzOltyLnBpdGNoXX0pLHQuZGVlcEVxdWFsKGUuc3ByaXRlLHIuc3ByaXRlKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldFNwcml0ZSxhcmdzOltyLnNwcml0ZV19KSx0LmRlZXBFcXVhbChlLmdseXBocyxyLmdseXBocyl8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRHbHlwaHMsYXJnczpbci5nbHlwaHNdfSksdC5kZWVwRXF1YWwoZS50cmFuc2l0aW9uLHIudHJhbnNpdGlvbil8fG4ucHVzaCh7Y29tbWFuZDpVdC5zZXRUcmFuc2l0aW9uLGFyZ3M6W3IudHJhbnNpdGlvbl19KSx0LmRlZXBFcXVhbChlLmxpZ2h0LHIubGlnaHQpfHxuLnB1c2goe2NvbW1hbmQ6VXQuc2V0TGlnaHQsYXJnczpbci5saWdodF19KTt2YXIgaT17fSxhPVtdOyFmdW5jdGlvbihlLHIsbixpKXt2YXIgYTtmb3IoYSBpbiByPXJ8fHt9LGU9ZXx8e30pZS5oYXNPd25Qcm9wZXJ0eShhKSYmKHIuaGFzT3duUHJvcGVydHkoYSl8fEh0KGEsbixpKSk7Zm9yKGEgaW4gcilyLmhhc093blByb3BlcnR5KGEpJiYoZS5oYXNPd25Qcm9wZXJ0eShhKT90LmRlZXBFcXVhbChlW2FdLHJbYV0pfHwoImdlb2pzb24iPT09ZVthXS50eXBlJiYiZ2VvanNvbiI9PT1yW2FdLnR5cGUmJkd0KGUscixhKT9uLnB1c2goe2NvbW1hbmQ6VXQuc2V0R2VvSlNPTlNvdXJjZURhdGEsYXJnczpbYSxyW2FdLmRhdGFdfSk6cXQoYSxyLG4saSkpOlZ0KGEscixuKSl9KGUuc291cmNlcyxyLnNvdXJjZXMsYSxpKTt2YXIgbz1bXTtlLmxheWVycyYmZS5sYXllcnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7aVt0LnNvdXJjZV0/bi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W3QuaWRdfSk6by5wdXNoKHQpfSkpLG49bi5jb25jYXQoYSksZnVuY3Rpb24oZSxyLG4pe3I9cnx8W107dmFyIGksYSxvLHMsbCxjLHUsZj0oZT1lfHxbXSkubWFwKFd0KSxoPXIubWFwKFd0KSxwPWUucmVkdWNlKFh0LHt9KSxkPXIucmVkdWNlKFh0LHt9KSxtPWYuc2xpY2UoKSxnPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGk9MCxhPTA7aTxmLmxlbmd0aDtpKyspbz1mW2ldLGQuaGFzT3duUHJvcGVydHkobyk/YSsrOihuLnB1c2goe2NvbW1hbmQ6VXQucmVtb3ZlTGF5ZXIsYXJnczpbb119KSxtLnNwbGljZShtLmluZGV4T2YobyxhKSwxKSk7Zm9yKGk9MCxhPTA7aTxoLmxlbmd0aDtpKyspbz1oW2gubGVuZ3RoLTEtaV0sbVttLmxlbmd0aC0xLWldIT09byYmKHAuaGFzT3duUHJvcGVydHkobyk/KG4ucHVzaCh7Y29tbWFuZDpVdC5yZW1vdmVMYXllcixhcmdzOltvXX0pLG0uc3BsaWNlKG0ubGFzdEluZGV4T2YobyxtLmxlbmd0aC1hKSwxKSk6YSsrLGM9bVttLmxlbmd0aC1pXSxuLnB1c2goe2NvbW1hbmQ6VXQuYWRkTGF5ZXIsYXJnczpbZFtvXSxjXX0pLG0uc3BsaWNlKG0ubGVuZ3RoLWksMCxvKSxnW29dPSEwKTtmb3IoaT0wO2k8aC5sZW5ndGg7aSsrKWlmKHM9cFtvPWhbaV1dLGw9ZFtvXSwhZ1tvXSYmIXQuZGVlcEVxdWFsKHMsbCkpaWYodC5kZWVwRXF1YWwocy5zb3VyY2UsbC5zb3VyY2UpJiZ0LmRlZXBFcXVhbChzWyJzb3VyY2UtbGF5ZXIiXSxsWyJzb3VyY2UtbGF5ZXIiXSkmJnQuZGVlcEVxdWFsKHMudHlwZSxsLnR5cGUpKXtmb3IodSBpbiBZdChzLmxheW91dCxsLmxheW91dCxuLG8sbnVsbCxVdC5zZXRMYXlvdXRQcm9wZXJ0eSksWXQocy5wYWludCxsLnBhaW50LG4sbyxudWxsLFV0LnNldFBhaW50UHJvcGVydHkpLHQuZGVlcEVxdWFsKHMuZmlsdGVyLGwuZmlsdGVyKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldEZpbHRlcixhcmdzOltvLGwuZmlsdGVyXX0pLHQuZGVlcEVxdWFsKHMubWluem9vbSxsLm1pbnpvb20pJiZ0LmRlZXBFcXVhbChzLm1heHpvb20sbC5tYXh6b29tKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyWm9vbVJhbmdlLGFyZ3M6W28sbC5taW56b29tLGwubWF4em9vbV19KSxzKXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmIXMuaGFzT3duUHJvcGVydHkodSkmJiJsYXlvdXQiIT09dSYmInBhaW50IiE9PXUmJiJmaWx0ZXIiIT09dSYmIm1ldGFkYXRhIiE9PXUmJiJtaW56b29tIiE9PXUmJiJtYXh6b29tIiE9PXUmJigwPT09dS5pbmRleE9mKCJwYWludC4iKT9ZdChzW3VdLGxbdV0sbixvLHUuc2xpY2UoNiksVXQuc2V0UGFpbnRQcm9wZXJ0eSk6dC5kZWVwRXF1YWwoc1t1XSxsW3VdKXx8bi5wdXNoKHtjb21tYW5kOlV0LnNldExheWVyUHJvcGVydHksYXJnczpbbyx1LGxbdV1dfSkpfWVsc2Ugbi5wdXNoKHtjb21tYW5kOlV0LnJlbW92ZUxheWVyLGFyZ3M6W29dfSksYz1tW20ubGFzdEluZGV4T2YobykrMV0sbi5wdXNoKHtjb21tYW5kOlV0LmFkZExheWVyLGFyZ3M6W2wsY119KX0obyxyLmxheWVycyxuKX1jYXRjaCh0KXtjb25zb2xlLndhcm4oIlVuYWJsZSB0byBjb21wdXRlIHN0eWxlIGRpZmY6Iix0KSxuPVt7Y29tbWFuZDpVdC5zZXRTdHlsZSxhcmdzOltyXX1dfXJldHVybiBufXZhciBKdD1mdW5jdGlvbih0LGUpe3RoaXMucmVzZXQodCxlKX07SnQucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKHQsZSl7dGhpcy5wb2ludHM9dHx8W10sdGhpcy5fZGlzdGFuY2VzPVswXTtmb3IodmFyIHI9MTtyPHRoaXMucG9pbnRzLmxlbmd0aDtyKyspdGhpcy5fZGlzdGFuY2VzW3JdPXRoaXMuX2Rpc3RhbmNlc1tyLTFdK3RoaXMucG9pbnRzW3JdLmRpc3QodGhpcy5wb2ludHNbci0xXSk7dGhpcy5sZW5ndGg9dGhpcy5fZGlzdGFuY2VzW3RoaXMuX2Rpc3RhbmNlcy5sZW5ndGgtMV0sdGhpcy5wYWRkaW5nPU1hdGgubWluKGV8fDAsLjUqdGhpcy5sZW5ndGgpLHRoaXMucGFkZGVkTGVuZ3RoPXRoaXMubGVuZ3RoLTIqdGhpcy5wYWRkaW5nfSxKdC5wcm90b3R5cGUubGVycD1mdW5jdGlvbihlKXtpZigxPT09dGhpcy5wb2ludHMubGVuZ3RoKXJldHVybiB0aGlzLnBvaW50c1swXTtlPXQuY2xhbXAoZSwwLDEpO2Zvcih2YXIgcj0xLG49dGhpcy5fZGlzdGFuY2VzW3JdLGk9ZSp0aGlzLnBhZGRlZExlbmd0aCt0aGlzLnBhZGRpbmc7bjxpJiZyPHRoaXMuX2Rpc3RhbmNlcy5sZW5ndGg7KW49dGhpcy5fZGlzdGFuY2VzWysrcl07dmFyIGE9ci0xLG89dGhpcy5fZGlzdGFuY2VzW2FdLHM9bi1vLGw9cz4wPyhpLW8pL3M6MDtyZXR1cm4gdGhpcy5wb2ludHNbYV0ubXVsdCgxLWwpLmFkZCh0aGlzLnBvaW50c1tyXS5tdWx0KGwpKX07dmFyIEt0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLmJveENlbGxzPVtdLGk9dGhpcy5jaXJjbGVDZWxscz1bXTt0aGlzLnhDZWxsQ291bnQ9TWF0aC5jZWlsKHQvciksdGhpcy55Q2VsbENvdW50PU1hdGguY2VpbChlL3IpO2Zvcih2YXIgYT0wO2E8dGhpcy54Q2VsbENvdW50KnRoaXMueUNlbGxDb3VudDthKyspbi5wdXNoKFtdKSxpLnB1c2goW10pO3RoaXMuY2lyY2xlS2V5cz1bXSx0aGlzLmJveEtleXM9W10sdGhpcy5iYm94ZXM9W10sdGhpcy5jaXJjbGVzPVtdLHRoaXMud2lkdGg9dCx0aGlzLmhlaWdodD1lLHRoaXMueFNjYWxlPXRoaXMueENlbGxDb3VudC90LHRoaXMueVNjYWxlPXRoaXMueUNlbGxDb3VudC9lLHRoaXMuYm94VWlkPTAsdGhpcy5jaXJjbGVVaWQ9MH07ZnVuY3Rpb24gUXQoZSxyLG4saSxhKXt2YXIgbz10LmNyZWF0ZSgpO3JldHVybiByPyh0LnNjYWxlKG8sbyxbMS9hLDEvYSwxXSksbnx8dC5yb3RhdGVaKG8sbyxpLmFuZ2xlKSk6dC5tdWx0aXBseShvLGkubGFiZWxQbGFuZU1hdHJpeCxlKSxvfWZ1bmN0aW9uICR0KGUscixuLGksYSl7aWYocil7dmFyIG89dC5jbG9uZShlKTtyZXR1cm4gdC5zY2FsZShvLG8sW2EsYSwxXSksbnx8dC5yb3RhdGVaKG8sbywtaS5hbmdsZSksb31yZXR1cm4gaS5nbENvb3JkTWF0cml4fWZ1bmN0aW9uIHRlKGUscil7dmFyIG49W2UueCxlLnksMCwxXTtmZShuLG4scik7dmFyIGk9blszXTtyZXR1cm57cG9pbnQ6bmV3IHQuUG9pbnQoblswXS9pLG5bMV0vaSksc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhOml9fWZ1bmN0aW9uIGVlKHQsZSl7cmV0dXJuLjUrdC9lKi41fWZ1bmN0aW9uIHJlKHQsZSl7dmFyIHI9dFswXS90WzNdLG49dFsxXS90WzNdO3JldHVybiByPj0tZVswXSYmcjw9ZVswXSYmbj49LWVbMV0mJm48PWVbMV19ZnVuY3Rpb24gbmUoZSxyLG4saSxhLG8scyxsKXt2YXIgYz1pP2UudGV4dFNpemVEYXRhOmUuaWNvblNpemVEYXRhLHU9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGMsbi50cmFuc2Zvcm0uem9vbSksZj1bMjU2L24ud2lkdGgqMisxLDI1Ni9uLmhlaWdodCoyKzFdLGg9aT9lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5OmUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QXJyYXk7aC5jbGVhcigpO2Zvcih2YXIgcD1lLmxpbmVWZXJ0ZXhBcnJheSxkPWk/ZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5OmUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheSxtPW4udHJhbnNmb3JtLndpZHRoL24udHJhbnNmb3JtLmhlaWdodCxnPSExLHY9MDt2PGQubGVuZ3RoO3YrKyl7dmFyIHk9ZC5nZXQodik7aWYoeS5oaWRkZW58fHkud3JpdGluZ01vZGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsJiYhZyl1ZSh5Lm51bUdseXBocyxoKTtlbHNle2c9ITE7dmFyIHg9W3kuYW5jaG9yWCx5LmFuY2hvclksMCwxXTtpZih0LnRyYW5zZm9ybU1hdDQoeCx4LHIpLHJlKHgsZikpe3ZhciBiPXhbM10sXz1lZShuLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGIpLHc9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKGMsdSx5KSxUPXM/dy9fOncqXyxrPW5ldyB0LlBvaW50KHkuYW5jaG9yWCx5LmFuY2hvclkpLEE9dGUoayxhKS5wb2ludCxNPXt9LFM9b2UoeSxULCExLGwscixhLG8sZS5nbHlwaE9mZnNldEFycmF5LHAsaCxBLGssTSxtKTtnPVMudXNlVmVydGljYWwsKFMubm90RW5vdWdoUm9vbXx8Z3x8Uy5uZWVkc0ZsaXBwaW5nJiZvZSh5LFQsITAsbCxyLGEsbyxlLmdseXBoT2Zmc2V0QXJyYXkscCxoLEEsayxNLG0pLm5vdEVub3VnaFJvb20pJiZ1ZSh5Lm51bUdseXBocyxoKX1lbHNlIHVlKHkubnVtR2x5cGhzLGgpfX1pP2UudGV4dC5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoaCk6ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShoKX1mdW5jdGlvbiBpZSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPXMuZ2x5cGhTdGFydEluZGV4K3MubnVtR2x5cGhzLGg9cy5saW5lU3RhcnRJbmRleCxwPXMubGluZVN0YXJ0SW5kZXgrcy5saW5lTGVuZ3RoLGQ9ZS5nZXRvZmZzZXRYKHMuZ2x5cGhTdGFydEluZGV4KSxtPWUuZ2V0b2Zmc2V0WChmLTEpLGc9bGUodCpkLHIsbixpLGEsbyxzLnNlZ21lbnQsaCxwLGwsYyx1KTtpZighZylyZXR1cm4gbnVsbDt2YXIgdj1sZSh0Km0scixuLGksYSxvLHMuc2VnbWVudCxoLHAsbCxjLHUpO3JldHVybiB2P3tmaXJzdDpnLGxhc3Q6dn06bnVsbH1mdW5jdGlvbiBhZShlLHIsbixpKXtpZihlPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsJiZNYXRoLmFicyhuLnktci55KT5NYXRoLmFicyhuLngtci54KSppKXJldHVybnt1c2VWZXJ0aWNhbDohMH07cmV0dXJuKGU9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3IueTxuLnk6ci54Pm4ueCk/e25lZWRzRmxpcHBpbmc6ITB9Om51bGx9ZnVuY3Rpb24gb2UoZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkKXt2YXIgbSxnPXIvMjQsdj1lLmxpbmVPZmZzZXRYKmcseT1lLmxpbmVPZmZzZXRZKmc7aWYoZS5udW1HbHlwaHM+MSl7dmFyIHg9ZS5nbHlwaFN0YXJ0SW5kZXgrZS5udW1HbHlwaHMsYj1lLmxpbmVTdGFydEluZGV4LF89ZS5saW5lU3RhcnRJbmRleCtlLmxpbmVMZW5ndGgsdz1pZShnLGwsdix5LG4sZixoLGUsYyxvLHApO2lmKCF3KXJldHVybntub3RFbm91Z2hSb29tOiEwfTt2YXIgVD10ZSh3LmZpcnN0LnBvaW50LHMpLnBvaW50LGs9dGUody5sYXN0LnBvaW50LHMpLnBvaW50O2lmKGkmJiFuKXt2YXIgQT1hZShlLndyaXRpbmdNb2RlLFQsayxkKTtpZihBKXJldHVybiBBfW09W3cuZmlyc3RdO2Zvcih2YXIgTT1lLmdseXBoU3RhcnRJbmRleCsxO008eC0xO00rKyltLnB1c2gobGUoZypsLmdldG9mZnNldFgoTSksdix5LG4sZixoLGUuc2VnbWVudCxiLF8sYyxvLHApKTttLnB1c2gody5sYXN0KX1lbHNle2lmKGkmJiFuKXt2YXIgUz10ZShoLGEpLnBvaW50LEU9ZS5saW5lU3RhcnRJbmRleCtlLnNlZ21lbnQrMSxMPW5ldyB0LlBvaW50KGMuZ2V0eChFKSxjLmdldHkoRSkpLEM9dGUoTCxhKSxQPUMuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPjA/Qy5wb2ludDpzZShoLEwsUywxLGEpLEk9YWUoZS53cml0aW5nTW9kZSxTLFAsZCk7aWYoSSlyZXR1cm4gSX12YXIgTz1sZShnKmwuZ2V0b2Zmc2V0WChlLmdseXBoU3RhcnRJbmRleCksdix5LG4sZixoLGUuc2VnbWVudCxlLmxpbmVTdGFydEluZGV4LGUubGluZVN0YXJ0SW5kZXgrZS5saW5lTGVuZ3RoLGMsbyxwKTtpZighTylyZXR1cm57bm90RW5vdWdoUm9vbTohMH07bT1bT119Zm9yKHZhciB6PTAsRD1tO3o8RC5sZW5ndGg7eis9MSl7dmFyIFI9RFt6XTt0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKHUsUi5wb2ludCxSLmFuZ2xlKX1yZXR1cm57fX1mdW5jdGlvbiBzZSh0LGUscixuLGkpe3ZhciBhPXRlKHQuYWRkKHQuc3ViKGUpLl91bml0KCkpLGkpLnBvaW50LG89ci5zdWIoYSk7cmV0dXJuIHIuYWRkKG8uX211bHQobi9vLm1hZygpKSl9ZnVuY3Rpb24gbGUoZSxyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwPWk/ZS1yOmUrcixkPXA+MD8xOi0xLG09MDtpJiYoZCo9LTEsbT1NYXRoLlBJKSxkPDAmJihtKz1NYXRoLlBJKTtmb3IodmFyIGc9ZD4wP2wrczpsK3MrMSx2PWEseT1hLHg9MCxiPTAsXz1NYXRoLmFicyhwKSx3PVtdO3grYjw9Xzspe2lmKChnKz1kKTxsfHxnPj1jKXJldHVybiBudWxsO2lmKHk9dix3LnB1c2godiksdm9pZCAwPT09KHY9aFtnXSkpe3ZhciBUPW5ldyB0LlBvaW50KHUuZ2V0eChnKSx1LmdldHkoZykpLGs9dGUoVCxmKTtpZihrLnNpZ25lZERpc3RhbmNlRnJvbUNhbWVyYT4wKXY9aFtnXT1rLnBvaW50O2Vsc2V7dmFyIEE9Zy1kO3Y9c2UoMD09PXg/bzpuZXcgdC5Qb2ludCh1LmdldHgoQSksdS5nZXR5KEEpKSxULHksXy14KzEsZil9fXgrPWIsYj15LmRpc3Qodil9dmFyIE09KF8teCkvYixTPXYuc3ViKHkpLEU9Uy5tdWx0KE0pLl9hZGQoeSk7RS5fYWRkKFMuX3VuaXQoKS5fcGVycCgpLl9tdWx0KG4qZCkpO3ZhciBMPW0rTWF0aC5hdGFuMih2LnkteS55LHYueC15LngpO3JldHVybiB3LnB1c2goRSkse3BvaW50OkUsYW5nbGU6TCxwYXRoOnd9fUt0LnByb3RvdHlwZS5rZXlzTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYm94S2V5cy5sZW5ndGgrdGhpcy5jaXJjbGVLZXlzLmxlbmd0aH0sS3QucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuX2ZvckVhY2hDZWxsKGUscixuLGksdGhpcy5faW5zZXJ0Qm94Q2VsbCx0aGlzLmJveFVpZCsrKSx0aGlzLmJveEtleXMucHVzaCh0KSx0aGlzLmJib3hlcy5wdXNoKGUpLHRoaXMuYmJveGVzLnB1c2gociksdGhpcy5iYm94ZXMucHVzaChuKSx0aGlzLmJib3hlcy5wdXNoKGkpfSxLdC5wcm90b3R5cGUuaW5zZXJ0Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2ZvckVhY2hDZWxsKGUtbixyLW4sZStuLHIrbix0aGlzLl9pbnNlcnRDaXJjbGVDZWxsLHRoaXMuY2lyY2xlVWlkKyspLHRoaXMuY2lyY2xlS2V5cy5wdXNoKHQpLHRoaXMuY2lyY2xlcy5wdXNoKGUpLHRoaXMuY2lyY2xlcy5wdXNoKHIpLHRoaXMuY2lyY2xlcy5wdXNoKG4pfSxLdC5wcm90b3R5cGUuX2luc2VydEJveENlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEpe3RoaXMuYm94Q2VsbHNbaV0ucHVzaChhKX0sS3QucHJvdG90eXBlLl9pbnNlcnRDaXJjbGVDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt0aGlzLmNpcmNsZUNlbGxzW2ldLnB1c2goYSl9LEt0LnByb3RvdHlwZS5fcXVlcnk9ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKHI8MHx8dD50aGlzLndpZHRofHxuPDB8fGU+dGhpcy5oZWlnaHQpcmV0dXJuIWkmJltdO3ZhciBvPVtdO2lmKHQ8PTAmJmU8PTAmJnRoaXMud2lkdGg8PXImJnRoaXMuaGVpZ2h0PD1uKXtpZihpKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8dGhpcy5ib3hLZXlzLmxlbmd0aDtzKyspby5wdXNoKHtrZXk6dGhpcy5ib3hLZXlzW3NdLHgxOnRoaXMuYmJveGVzWzQqc10seTE6dGhpcy5iYm94ZXNbNCpzKzFdLHgyOnRoaXMuYmJveGVzWzQqcysyXSx5Mjp0aGlzLmJib3hlc1s0KnMrM119KTtmb3IodmFyIGw9MDtsPHRoaXMuY2lyY2xlS2V5cy5sZW5ndGg7bCsrKXt2YXIgYz10aGlzLmNpcmNsZXNbMypsXSx1PXRoaXMuY2lyY2xlc1szKmwrMV0sZj10aGlzLmNpcmNsZXNbMypsKzJdO28ucHVzaCh7a2V5OnRoaXMuY2lyY2xlS2V5c1tsXSx4MTpjLWYseTE6dS1mLHgyOmMrZix5Mjp1K2Z9KX1yZXR1cm4gYT9vLmZpbHRlcihhKTpvfXZhciBoPXtoaXRUZXN0Omksc2VlblVpZHM6e2JveDp7fSxjaXJjbGU6e319fTtyZXR1cm4gdGhpcy5fZm9yRWFjaENlbGwodCxlLHIsbix0aGlzLl9xdWVyeUNlbGwsbyxoLGEpLGk/by5sZW5ndGg+MDpvfSxLdC5wcm90b3R5cGUuX3F1ZXJ5Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC1yLG89dCtyLHM9ZS1yLGw9ZStyO2lmKG88MHx8YT50aGlzLndpZHRofHxsPDB8fHM+dGhpcy5oZWlnaHQpcmV0dXJuIW4mJltdO3ZhciBjPVtdLHU9e2hpdFRlc3Q6bixjaXJjbGU6e3g6dCx5OmUscmFkaXVzOnJ9LHNlZW5VaWRzOntib3g6e30sY2lyY2xlOnt9fX07cmV0dXJuIHRoaXMuX2ZvckVhY2hDZWxsKGEscyxvLGwsdGhpcy5fcXVlcnlDZWxsQ2lyY2xlLGMsdSxpKSxuP2MubGVuZ3RoPjA6Y30sS3QucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITEsaSl9LEt0LnByb3RvdHlwZS5oaXRUZXN0PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMuX3F1ZXJ5KHQsZSxyLG4sITAsaSl9LEt0LnByb3RvdHlwZS5oaXRUZXN0Q2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLl9xdWVyeUNpcmNsZSh0LGUsciwhMCxuKX0sS3QucHJvdG90eXBlLl9xdWVyeUNlbGw9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzKXt2YXIgbD1vLnNlZW5VaWRzLGM9dGhpcy5ib3hDZWxsc1tpXTtpZihudWxsIT09Yylmb3IodmFyIHU9dGhpcy5iYm94ZXMsZj0wLGg9YztmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl07aWYoIWwuYm94W3BdKXtsLmJveFtwXT0hMDt2YXIgZD00KnA7aWYodDw9dVtkKzJdJiZlPD11W2QrM10mJnI+PXVbZCswXSYmbj49dVtkKzFdJiYoIXN8fHModGhpcy5ib3hLZXlzW3BdKSkpe2lmKG8uaGl0VGVzdClyZXR1cm4gYS5wdXNoKCEwKSwhMDthLnB1c2goe2tleTp0aGlzLmJveEtleXNbcF0seDE6dVtkXSx5MTp1W2QrMV0seDI6dVtkKzJdLHkyOnVbZCszXX0pfX19dmFyIG09dGhpcy5jaXJjbGVDZWxsc1tpXTtpZihudWxsIT09bSlmb3IodmFyIGc9dGhpcy5jaXJjbGVzLHY9MCx5PW07djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdO2lmKCFsLmNpcmNsZVt4XSl7bC5jaXJjbGVbeF09ITA7dmFyIGI9Myp4O2lmKHRoaXMuX2NpcmNsZUFuZFJlY3RDb2xsaWRlKGdbYl0sZ1tiKzFdLGdbYisyXSx0LGUscixuKSYmKCFzfHxzKHRoaXMuY2lyY2xlS2V5c1t4XSkpKXtpZihvLmhpdFRlc3QpcmV0dXJuIGEucHVzaCghMCksITA7dmFyIF89Z1tiXSx3PWdbYisxXSxUPWdbYisyXTthLnB1c2goe2tleTp0aGlzLmNpcmNsZUtleXNbeF0seDE6Xy1ULHkxOnctVCx4MjpfK1QseTI6dytUfSl9fX19LEt0LnByb3RvdHlwZS5fcXVlcnlDZWxsQ2lyY2xlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9by5jaXJjbGUsYz1vLnNlZW5VaWRzLHU9dGhpcy5ib3hDZWxsc1tpXTtpZihudWxsIT09dSlmb3IodmFyIGY9dGhpcy5iYm94ZXMsaD0wLHA9dTtoPHAubGVuZ3RoO2grPTEpe3ZhciBkPXBbaF07aWYoIWMuYm94W2RdKXtjLmJveFtkXT0hMDt2YXIgbT00KmQ7aWYodGhpcy5fY2lyY2xlQW5kUmVjdENvbGxpZGUobC54LGwueSxsLnJhZGl1cyxmW20rMF0sZlttKzFdLGZbbSsyXSxmW20rM10pJiYoIXN8fHModGhpcy5ib3hLZXlzW2RdKSkpcmV0dXJuIGEucHVzaCghMCksITB9fXZhciBnPXRoaXMuY2lyY2xlQ2VsbHNbaV07aWYobnVsbCE9PWcpZm9yKHZhciB2PXRoaXMuY2lyY2xlcyx5PTAseD1nO3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XTtpZighYy5jaXJjbGVbYl0pe2MuY2lyY2xlW2JdPSEwO3ZhciBfPTMqYjtpZih0aGlzLl9jaXJjbGVzQ29sbGlkZSh2W19dLHZbXysxXSx2W18rMl0sbC54LGwueSxsLnJhZGl1cykmJighc3x8cyh0aGlzLmNpcmNsZUtleXNbYl0pKSlyZXR1cm4gYS5wdXNoKCEwKSwhMH19fSxLdC5wcm90b3R5cGUuX2ZvckVhY2hDZWxsPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPXRoaXMuX2NvbnZlcnRUb1hDZWxsQ29vcmQodCksYz10aGlzLl9jb252ZXJ0VG9ZQ2VsbENvb3JkKGUpLHU9dGhpcy5fY29udmVydFRvWENlbGxDb29yZChyKSxmPXRoaXMuX2NvbnZlcnRUb1lDZWxsQ29vcmQobiksaD1sO2g8PXU7aCsrKWZvcih2YXIgcD1jO3A8PWY7cCsrKXt2YXIgZD10aGlzLnhDZWxsQ291bnQqcCtoO2lmKGkuY2FsbCh0aGlzLHQsZSxyLG4sZCxhLG8scykpcmV0dXJufX0sS3QucHJvdG90eXBlLl9jb252ZXJ0VG9YQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueENlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnhTY2FsZSkpKX0sS3QucHJvdG90eXBlLl9jb252ZXJ0VG9ZQ2VsbENvb3JkPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKHRoaXMueUNlbGxDb3VudC0xLE1hdGguZmxvb3IodCp0aGlzLnlTY2FsZSkpKX0sS3QucHJvdG90eXBlLl9jaXJjbGVzQ29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi10LHM9aS1lLGw9cithO3JldHVybiBsKmw+bypvK3Mqc30sS3QucHJvdG90eXBlLl9jaXJjbGVBbmRSZWN0Q29sbGlkZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz0oYS1uKS8yLGw9TWF0aC5hYnModC0obitzKSk7aWYobD5zK3IpcmV0dXJuITE7dmFyIGM9KG8taSkvMix1PU1hdGguYWJzKGUtKGkrYykpO2lmKHU+YytyKXJldHVybiExO2lmKGw8PXN8fHU8PWMpcmV0dXJuITA7dmFyIGY9bC1zLGg9dS1jO3JldHVybiBmKmYraCpoPD1yKnJ9O3ZhciBjZT1uZXcgRmxvYXQzMkFycmF5KFstMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMCwtMS8wLC0xLzAsMF0pO2Z1bmN0aW9uIHVlKHQsZSl7Zm9yKHZhciByPTA7cjx0O3IrKyl7dmFyIG49ZS5sZW5ndGg7ZS5yZXNpemUobis0KSxlLmZsb2F0MzIuc2V0KGNlLDMqbil9fWZ1bmN0aW9uIGZlKHQsZSxyKXt2YXIgbj1lWzBdLGk9ZVsxXTtyZXR1cm4gdFswXT1yWzBdKm4rcls0XSppK3JbMTJdLHRbMV09clsxXSpuK3JbNV0qaStyWzEzXSx0WzNdPXJbM10qbityWzddKmkrclsxNV0sdH12YXIgaGU9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PWUmJihlPW5ldyBLdCh0LndpZHRoKzIwMCx0LmhlaWdodCsyMDAsMjUpKSx2b2lkIDA9PT1yJiYocj1uZXcgS3QodC53aWR0aCsyMDAsdC5oZWlnaHQrMjAwLDI1KSksdGhpcy50cmFuc2Zvcm09dCx0aGlzLmdyaWQ9ZSx0aGlzLmlnbm9yZWRHcmlkPXIsdGhpcy5waXRjaGZhY3Rvcj1NYXRoLmNvcyh0Ll9waXRjaCkqdC5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeT10LndpZHRoKzEwMCx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzEwMCx0aGlzLmdyaWRSaWdodEJvdW5kYXJ5PXQud2lkdGgrMjAwLHRoaXMuZ3JpZEJvdHRvbUJvdW5kYXJ5PXQuaGVpZ2h0KzIwMH07ZnVuY3Rpb24gcGUoZSxyLG4pe3JldHVybiByKih0LkVYVEVOVC8oZS50aWxlU2l6ZSpNYXRoLnBvdygyLG4tZS50aWxlSUQub3ZlcnNjYWxlZFopKSl9aGUucHJvdG90eXBlLnBsYWNlQ29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dGhpcy5wcm9qZWN0QW5kR2V0UGVyc3BlY3RpdmVSYXRpbyhuLHQuYW5jaG9yUG9pbnRYLHQuYW5jaG9yUG9pbnRZKSxvPXIqYS5wZXJzcGVjdGl2ZVJhdGlvLHM9dC54MSpvK2EucG9pbnQueCxsPXQueTEqbythLnBvaW50LnksYz10LngyKm8rYS5wb2ludC54LHU9dC55MipvK2EucG9pbnQueTtyZXR1cm4hdGhpcy5pc0luc2lkZUdyaWQocyxsLGMsdSl8fCFlJiZ0aGlzLmdyaWQuaGl0VGVzdChzLGwsYyx1LGkpP3tib3g6W10sb2Zmc2NyZWVuOiExfTp7Ym94OltzLGwsYyx1XSxvZmZzY3JlZW46dGhpcy5pc09mZnNjcmVlbihzLGwsYyx1KX19LGhlLnByb3RvdHlwZS5wbGFjZUNvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCl7dmFyIGQ9W10sbT1uZXcgdC5Qb2ludChyLmFuY2hvclgsci5hbmNob3JZKSxnPXRlKG0sbyksdj1lZSh0aGlzLnRyYW5zZm9ybS5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLGcuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSx5PSh1P2EvdjphKnYpL3QuT05FX0VNLHg9dGUobSxzKS5wb2ludCxiPWllKHksaSxyLmxpbmVPZmZzZXRYKnksci5saW5lT2Zmc2V0WSp5LCExLHgsbSxyLG4scyx7fSksXz0hMSx3PSExLFQ9ITA7aWYoYil7Zm9yKHZhciBrPS41KmgqditwLEE9bmV3IHQuUG9pbnQoLTEwMCwtMTAwKSxNPW5ldyB0LlBvaW50KHRoaXMuc2NyZWVuUmlnaHRCb3VuZGFyeSx0aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5KSxTPW5ldyBKdCxFPWIuZmlyc3QsTD1iLmxhc3QsQz1bXSxQPUUucGF0aC5sZW5ndGgtMTtQPj0xO1AtLSlDLnB1c2goRS5wYXRoW1BdKTtmb3IodmFyIEk9MTtJPEwucGF0aC5sZW5ndGg7SSsrKUMucHVzaChMLnBhdGhbSV0pO3ZhciBPPTIuNSprO2lmKGwpe3ZhciB6PUMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdGUodCxsKX0pKTtDPXouc29tZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhPD0wfSkpP1tdOnoubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wb2ludH0pKX12YXIgRD1bXTtpZihDLmxlbmd0aD4wKXtmb3IodmFyIFI9Q1swXS5jbG9uZSgpLEY9Q1swXS5jbG9uZSgpLEI9MTtCPEMubGVuZ3RoO0IrKylSLng9TWF0aC5taW4oUi54LENbQl0ueCksUi55PU1hdGgubWluKFIueSxDW0JdLnkpLEYueD1NYXRoLm1heChGLngsQ1tCXS54KSxGLnk9TWF0aC5tYXgoRi55LENbQl0ueSk7RD1SLng+PUEueCYmRi54PD1NLngmJlIueT49QS55JiZGLnk8PU0ueT9bQ106Ri54PEEueHx8Ui54Pk0ueHx8Ri55PEEueXx8Ui55Pk0ueT9bXTp0LmNsaXBMaW5lKFtDXSxBLngsQS55LE0ueCxNLnkpfWZvcih2YXIgTj0wLGo9RDtOPGoubGVuZ3RoO04rPTEpe3ZhciBVPWpbTl07Uy5yZXNldChVLC4yNSprKTt2YXIgVj0wO1Y9Uy5sZW5ndGg8PS41Kms/MTpNYXRoLmNlaWwoUy5wYWRkZWRMZW5ndGgvTykrMTtmb3IodmFyIEg9MDtIPFY7SCsrKXt2YXIgcT1IL01hdGgubWF4KFYtMSwxKSxHPVMubGVycChxKSxZPUcueCsxMDAsVz1HLnkrMTAwO2QucHVzaChZLFcsaywwKTt2YXIgWD1ZLWssWj1XLWssSj1ZK2ssSz1XK2s7aWYoVD1UJiZ0aGlzLmlzT2Zmc2NyZWVuKFgsWixKLEspLHc9d3x8dGhpcy5pc0luc2lkZUdyaWQoWCxaLEosSyksIWUmJnRoaXMuZ3JpZC5oaXRUZXN0Q2lyY2xlKFksVyxrLGYpJiYoXz0hMCwhYykpcmV0dXJue2NpcmNsZXM6W10sb2Zmc2NyZWVuOiExLGNvbGxpc2lvbkRldGVjdGVkOl99fX19cmV0dXJue2NpcmNsZXM6IWMmJl98fCF3P1tdOmQsb2Zmc2NyZWVuOlQsY29sbGlzaW9uRGV0ZWN0ZWQ6X319LGhlLnByb3RvdHlwZS5xdWVyeVJlbmRlcmVkU3ltYm9scz1mdW5jdGlvbihlKXtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmdyaWQua2V5c0xlbmd0aCgpJiYwPT09dGhpcy5pZ25vcmVkR3JpZC5rZXlzTGVuZ3RoKCkpcmV0dXJue307Zm9yKHZhciByPVtdLG49MS8wLGk9MS8wLGE9LTEvMCxvPS0xLzAscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc10sdT1uZXcgdC5Qb2ludChjLngrMTAwLGMueSsxMDApO249TWF0aC5taW4obix1LngpLGk9TWF0aC5taW4oaSx1LnkpLGE9TWF0aC5tYXgoYSx1LngpLG89TWF0aC5tYXgobyx1LnkpLHIucHVzaCh1KX1mb3IodmFyIGY9e30saD17fSxwPTAsZD10aGlzLmdyaWQucXVlcnkobixpLGEsbykuY29uY2F0KHRoaXMuaWdub3JlZEdyaWQucXVlcnkobixpLGEsbykpO3A8ZC5sZW5ndGg7cCs9MSl7dmFyIG09ZFtwXSxnPW0ua2V5O2lmKHZvaWQgMD09PWZbZy5idWNrZXRJbnN0YW5jZUlkXSYmKGZbZy5idWNrZXRJbnN0YW5jZUlkXT17fSksIWZbZy5idWNrZXRJbnN0YW5jZUlkXVtnLmZlYXR1cmVJbmRleF0pe3ZhciB2PVtuZXcgdC5Qb2ludChtLngxLG0ueTEpLG5ldyB0LlBvaW50KG0ueDIsbS55MSksbmV3IHQuUG9pbnQobS54MixtLnkyKSxuZXcgdC5Qb2ludChtLngxLG0ueTIpXTt0LnBvbHlnb25JbnRlcnNlY3RzUG9seWdvbihyLHYpJiYoZltnLmJ1Y2tldEluc3RhbmNlSWRdW2cuZmVhdHVyZUluZGV4XT0hMCx2b2lkIDA9PT1oW2cuYnVja2V0SW5zdGFuY2VJZF0mJihoW2cuYnVja2V0SW5zdGFuY2VJZF09W10pLGhbZy5idWNrZXRJbnN0YW5jZUlkXS5wdXNoKGcuZmVhdHVyZUluZGV4KSl9fXJldHVybiBofSxoZS5wcm90b3R5cGUuaW5zZXJ0Q29sbGlzaW9uQm94PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9e2J1Y2tldEluc3RhbmNlSWQ6cixmZWF0dXJlSW5kZXg6bixjb2xsaXNpb25Hcm91cElEOml9OyhlP3RoaXMuaWdub3JlZEdyaWQ6dGhpcy5ncmlkKS5pbnNlcnQoYSx0WzBdLHRbMV0sdFsyXSx0WzNdKX0saGUucHJvdG90eXBlLmluc2VydENvbGxpc2lvbkNpcmNsZXM9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9ZT90aGlzLmlnbm9yZWRHcmlkOnRoaXMuZ3JpZCxvPXtidWNrZXRJbnN0YW5jZUlkOnIsZmVhdHVyZUluZGV4Om4sY29sbGlzaW9uR3JvdXBJRDppfSxzPTA7czx0Lmxlbmd0aDtzKz00KWEuaW5zZXJ0Q2lyY2xlKG8sdFtzXSx0W3MrMV0sdFtzKzJdKX0saGUucHJvdG90eXBlLnByb2plY3RBbmRHZXRQZXJzcGVjdGl2ZVJhdGlvPWZ1bmN0aW9uKGUscixuKXt2YXIgaT1bcixuLDAsMV07cmV0dXJuIGZlKGksaSxlKSx7cG9pbnQ6bmV3IHQuUG9pbnQoKGlbMF0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLndpZHRoKzEwMCwoLWlbMV0vaVszXSsxKS8yKnRoaXMudHJhbnNmb3JtLmhlaWdodCsxMDApLHBlcnNwZWN0aXZlUmF0aW86LjUrdGhpcy50cmFuc2Zvcm0uY2FtZXJhVG9DZW50ZXJEaXN0YW5jZS9pWzNdKi41fX0saGUucHJvdG90eXBlLmlzT2Zmc2NyZWVuPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPDEwMHx8dD49dGhpcy5zY3JlZW5SaWdodEJvdW5kYXJ5fHxuPDEwMHx8ZT50aGlzLnNjcmVlbkJvdHRvbUJvdW5kYXJ5fSxoZS5wcm90b3R5cGUuaXNJbnNpZGVHcmlkPWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiByPj0wJiZ0PHRoaXMuZ3JpZFJpZ2h0Qm91bmRhcnkmJm4+PTAmJmU8dGhpcy5ncmlkQm90dG9tQm91bmRhcnl9LGhlLnByb3RvdHlwZS5nZXRWaWV3cG9ydE1hdHJpeD1mdW5jdGlvbigpe3ZhciBlPXQuaWRlbnRpdHkoW10pO3JldHVybiB0LnRyYW5zbGF0ZShlLGUsWy0xMDAsLTEwMCwwXSksZX07dmFyIGRlPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMub3BhY2l0eT10P01hdGgubWF4KDAsTWF0aC5taW4oMSx0Lm9wYWNpdHkrKHQucGxhY2VkP2U6LWUpKSk6biYmcj8xOjAsdGhpcy5wbGFjZWQ9cn07ZGUucHJvdG90eXBlLmlzSGlkZGVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLm9wYWNpdHkmJiF0aGlzLnBsYWNlZH07dmFyIG1lPWZ1bmN0aW9uKHQsZSxyLG4saSl7dGhpcy50ZXh0PW5ldyBkZSh0P3QudGV4dDpudWxsLGUscixpKSx0aGlzLmljb249bmV3IGRlKHQ/dC5pY29uOm51bGwsZSxuLGkpfTttZS5wcm90b3R5cGUuaXNIaWRkZW49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50ZXh0LmlzSGlkZGVuKCkmJnRoaXMuaWNvbi5pc0hpZGRlbigpfTt2YXIgZ2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMudGV4dD10LHRoaXMuaWNvbj1lLHRoaXMuc2tpcEZhZGU9cn0sdmU9ZnVuY3Rpb24oKXt0aGlzLmludlByb2pNYXRyaXg9dC5jcmVhdGUoKSx0aGlzLnZpZXdwb3J0TWF0cml4PXQuY3JlYXRlKCksdGhpcy5jaXJjbGVzPVtdfSx5ZT1mdW5jdGlvbih0LGUscixuLGkpe3RoaXMuYnVja2V0SW5zdGFuY2VJZD10LHRoaXMuZmVhdHVyZUluZGV4PWUsdGhpcy5zb3VyY2VMYXllckluZGV4PXIsdGhpcy5idWNrZXRJbmRleD1uLHRoaXMudGlsZUlEPWl9LHhlPWZ1bmN0aW9uKHQpe3RoaXMuY3Jvc3NTb3VyY2VDb2xsaXNpb25zPXQsdGhpcy5tYXhHcm91cElEPTAsdGhpcy5jb2xsaXNpb25Hcm91cHM9e319O2Z1bmN0aW9uIGJlKGUscixuLGksYSl7dmFyIG89dC5nZXRBbmNob3JBbGlnbm1lbnQoZSkscz0tKG8uaG9yaXpvbnRhbEFsaWduLS41KSpyLGw9LShvLnZlcnRpY2FsQWxpZ24tLjUpKm4sYz10LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQoZSxpKTtyZXR1cm4gbmV3IHQuUG9pbnQocytjWzBdKmEsbCtjWzFdKmEpfWZ1bmN0aW9uIF9lKGUscixuLGksYSxvKXt2YXIgcz1lLngxLGw9ZS54MixjPWUueTEsdT1lLnkyLGY9ZS5hbmNob3JQb2ludFgsaD1lLmFuY2hvclBvaW50WSxwPW5ldyB0LlBvaW50KHIsbik7cmV0dXJuIGkmJnAuX3JvdGF0ZShhP286LW8pLHt4MTpzK3AueCx5MTpjK3AueSx4MjpsK3AueCx5Mjp1K3AueSxhbmNob3JQb2ludFg6ZixhbmNob3JQb2ludFk6aH19eGUucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXtpZih0aGlzLmNyb3NzU291cmNlQ29sbGlzaW9ucylyZXR1cm57SUQ6MCxwcmVkaWNhdGU6bnVsbH07aWYoIXRoaXMuY29sbGlzaW9uR3JvdXBzW3RdKXt2YXIgZT0rK3RoaXMubWF4R3JvdXBJRDt0aGlzLmNvbGxpc2lvbkdyb3Vwc1t0XT17SUQ6ZSxwcmVkaWNhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sbGlzaW9uR3JvdXBJRD09PWV9fX1yZXR1cm4gdGhpcy5jb2xsaXNpb25Hcm91cHNbdF19O3ZhciB3ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnRyYW5zZm9ybT10LmNsb25lKCksdGhpcy5jb2xsaXNpb25JbmRleD1uZXcgaGUodGhpcy50cmFuc2Zvcm0pLHRoaXMucGxhY2VtZW50cz17fSx0aGlzLm9wYWNpdGllcz17fSx0aGlzLnZhcmlhYmxlT2Zmc2V0cz17fSx0aGlzLnN0YWxlPSExLHRoaXMuY29tbWl0VGltZT0wLHRoaXMuZmFkZUR1cmF0aW9uPWUsdGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YT17fSx0aGlzLmNvbGxpc2lvbkdyb3Vwcz1uZXcgeGUociksdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXM9e30sdGhpcy5wcmV2UGxhY2VtZW50PW4sbiYmKG4ucHJldlBsYWNlbWVudD12b2lkIDApLHRoaXMucGxhY2VkT3JpZW50YXRpb25zPXt9fTtmdW5jdGlvbiBUZSh0LGUscixuLGkpe3QuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKSx0LmVtcGxhY2VCYWNrKGU/MTowLHI/MTowLG58fDAsaXx8MCksdC5lbXBsYWNlQmFjayhlPzE6MCxyPzE6MCxufHwwLGl8fDApLHQuZW1wbGFjZUJhY2soZT8xOjAscj8xOjAsbnx8MCxpfHwwKX13ZS5wcm90b3R5cGUuZ2V0QnVja2V0UGFydHM9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9bi5nZXRCdWNrZXQociksbz1uLmxhdGVzdEZlYXR1cmVJbmRleDtpZihhJiZvJiZyLmlkPT09YS5sYXllcklkc1swXSl7dmFyIHM9bi5jb2xsaXNpb25Cb3hBcnJheSxsPWEubGF5ZXJzWzBdLmxheW91dCxjPU1hdGgucG93KDIsdGhpcy50cmFuc2Zvcm0uem9vbS1uLnRpbGVJRC5vdmVyc2NhbGVkWiksdT1uLnRpbGVTaXplL3QuRVhURU5ULGY9dGhpcy50cmFuc2Zvcm0uY2FsY3VsYXRlUG9zTWF0cml4KG4udGlsZUlELnRvVW53cmFwcGVkKCkpLGg9Im1hcCI9PT1sLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxwPSJtYXAiPT09bC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50IiksZD1wZShuLDEsdGhpcy50cmFuc2Zvcm0uem9vbSksbT1RdChmLGgscCx0aGlzLnRyYW5zZm9ybSxkKSxnPW51bGw7aWYoaCl7dmFyIHY9JHQoZixoLHAsdGhpcy50cmFuc2Zvcm0sZCk7Zz10Lm11bHRpcGx5KFtdLHRoaXMudHJhbnNmb3JtLmxhYmVsUGxhbmVNYXRyaXgsdil9dGhpcy5yZXRhaW5lZFF1ZXJ5RGF0YVthLmJ1Y2tldEluc3RhbmNlSWRdPW5ldyB5ZShhLmJ1Y2tldEluc3RhbmNlSWQsbyxhLnNvdXJjZUxheWVySW5kZXgsYS5pbmRleCxuLnRpbGVJRCk7dmFyIHk9e2J1Y2tldDphLGxheW91dDpsLHBvc01hdHJpeDpmLHRleHRMYWJlbFBsYW5lTWF0cml4Om0sbGFiZWxUb1NjcmVlbk1hdHJpeDpnLHNjYWxlOmMsdGV4dFBpeGVsUmF0aW86dSxob2xkaW5nRm9yRmFkZTpuLmhvbGRpbmdGb3JGYWRlKCksY29sbGlzaW9uQm94QXJyYXk6cyxwYXJ0aWFsbHlFdmFsdWF0ZWRUZXh0U2l6ZTp0LmV2YWx1YXRlU2l6ZUZvclpvb20oYS50ZXh0U2l6ZURhdGEsdGhpcy50cmFuc2Zvcm0uem9vbSksY29sbGlzaW9uR3JvdXA6dGhpcy5jb2xsaXNpb25Hcm91cHMuZ2V0KGEuc291cmNlSUQpfTtpZihpKWZvcih2YXIgeD0wLGI9YS5zb3J0S2V5UmFuZ2VzO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PV8uc29ydEtleSxUPV8uc3ltYm9sSW5zdGFuY2VTdGFydCxrPV8uc3ltYm9sSW5zdGFuY2VFbmQ7ZS5wdXNoKHtzb3J0S2V5Oncsc3ltYm9sSW5zdGFuY2VTdGFydDpULHN5bWJvbEluc3RhbmNlRW5kOmsscGFyYW1ldGVyczp5fSl9ZWxzZSBlLnB1c2goe3N5bWJvbEluc3RhbmNlU3RhcnQ6MCxzeW1ib2xJbnN0YW5jZUVuZDphLnN5bWJvbEluc3RhbmNlcy5sZW5ndGgscGFyYW1ldGVyczp5fSl9fSx3ZS5wcm90b3R5cGUuYXR0ZW1wdEFuY2hvclBsYWNlbWVudD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIG0sZz1bZi50ZXh0T2Zmc2V0MCxmLnRleHRPZmZzZXQxXSx2PWJlKHQscixuLGcsaSkseT10aGlzLmNvbGxpc2lvbkluZGV4LnBsYWNlQ29sbGlzaW9uQm94KF9lKGUsdi54LHYueSxhLG8sdGhpcy50cmFuc2Zvcm0uYW5nbGUpLHUscyxsLGMucHJlZGljYXRlKTtpZihkJiYwPT09dGhpcy5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChfZShkLHYueCx2LnksYSxvLHRoaXMudHJhbnNmb3JtLmFuZ2xlKSx1LHMsbCxjLnByZWRpY2F0ZSkuYm94Lmxlbmd0aClyZXR1cm47aWYoeS5ib3gubGVuZ3RoPjApcmV0dXJuIHRoaXMucHJldlBsYWNlbWVudCYmdGhpcy5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXSYmdGhpcy5wcmV2UGxhY2VtZW50LnBsYWNlbWVudHNbZi5jcm9zc1RpbGVJRF0mJnRoaXMucHJldlBsYWNlbWVudC5wbGFjZW1lbnRzW2YuY3Jvc3NUaWxlSURdLnRleHQmJihtPXRoaXMucHJldlBsYWNlbWVudC52YXJpYWJsZU9mZnNldHNbZi5jcm9zc1RpbGVJRF0uYW5jaG9yKSx0aGlzLnZhcmlhYmxlT2Zmc2V0c1tmLmNyb3NzVGlsZUlEXT17dGV4dE9mZnNldDpnLHdpZHRoOnIsaGVpZ2h0Om4sYW5jaG9yOnQsdGV4dEJveFNjYWxlOmkscHJldkFuY2hvcjptfSx0aGlzLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihoLHQsZixwKSxoLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJih0aGlzLm1hcmtVc2VkT3JpZW50YXRpb24oaCxwLGYpLHRoaXMucGxhY2VkT3JpZW50YXRpb25zW2YuY3Jvc3NUaWxlSURdPXApLHtzaGlmdDp2LHBsYWNlZEdseXBoQm94ZXM6eX19LHdlLnByb3RvdHlwZS5wbGFjZUxheWVyQnVja2V0UGFydD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcyxhPWUucGFyYW1ldGVycyxvPWEuYnVja2V0LHM9YS5sYXlvdXQsbD1hLnBvc01hdHJpeCxjPWEudGV4dExhYmVsUGxhbmVNYXRyaXgsdT1hLmxhYmVsVG9TY3JlZW5NYXRyaXgsZj1hLnRleHRQaXhlbFJhdGlvLGg9YS5ob2xkaW5nRm9yRmFkZSxwPWEuY29sbGlzaW9uQm94QXJyYXksZD1hLnBhcnRpYWxseUV2YWx1YXRlZFRleHRTaXplLG09YS5jb2xsaXNpb25Hcm91cCxnPXMuZ2V0KCJ0ZXh0LW9wdGlvbmFsIiksdj1zLmdldCgiaWNvbi1vcHRpb25hbCIpLHk9cy5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLHg9cy5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLGI9Im1hcCI9PT1zLmdldCgidGV4dC1yb3RhdGlvbi1hbGlnbm1lbnQiKSxfPSJtYXAiPT09cy5nZXQoInRleHQtcGl0Y2gtYWxpZ25tZW50Iiksdz0ibm9uZSIhPT1zLmdldCgiaWNvbi10ZXh0LWZpdCIpLFQ9InZpZXdwb3J0LXkiPT09cy5nZXQoInN5bWJvbC16LW9yZGVyIiksaz15JiYoeHx8IW8uaGFzSWNvbkRhdGEoKXx8diksQT14JiYoeXx8IW8uaGFzVGV4dERhdGEoKXx8Zyk7IW8uY29sbGlzaW9uQXJyYXlzJiZwJiZvLmRlc2VyaWFsaXplQ29sbGlzaW9uQm94ZXMocCk7dmFyIE09ZnVuY3Rpb24oZSxhKXtpZighcltlLmNyb3NzVGlsZUlEXSlpZihoKWkucGxhY2VtZW50c1tlLmNyb3NzVGlsZUlEXT1uZXcgZ2UoITEsITEsITEpO2Vsc2V7dmFyIHAsVD0hMSxNPSExLFM9ITAsRT1udWxsLEw9e2JveDpudWxsLG9mZnNjcmVlbjpudWxsfSxDPXtib3g6bnVsbCxvZmZzY3JlZW46bnVsbH0sUD1udWxsLEk9bnVsbCxPPTAsej0wLEQ9MDthLnRleHRGZWF0dXJlSW5kZXg/Tz1hLnRleHRGZWF0dXJlSW5kZXg6ZS51c2VSdW50aW1lQ29sbGlzaW9uQ2lyY2xlcyYmKE89ZS5mZWF0dXJlSW5kZXgpLGEudmVydGljYWxUZXh0RmVhdHVyZUluZGV4JiYoej1hLnZlcnRpY2FsVGV4dEZlYXR1cmVJbmRleCk7dmFyIFI9YS50ZXh0Qm94O2lmKFIpe3ZhciBGPWZ1bmN0aW9uKHIpe3ZhciBuPXQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbDtpZihvLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiFyJiZpLnByZXZQbGFjZW1lbnQpe3ZhciBhPWkucHJldlBsYWNlbWVudC5wbGFjZWRPcmllbnRhdGlvbnNbZS5jcm9zc1RpbGVJRF07YSYmKGkucGxhY2VkT3JpZW50YXRpb25zW2UuY3Jvc3NUaWxlSURdPWEsbj1hLGkubWFya1VzZWRPcmllbnRhdGlvbihvLG4sZSkpfXJldHVybiBufSxCPWZ1bmN0aW9uKHIsbil7aWYoby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZhLnZlcnRpY2FsVGV4dEJveClmb3IodmFyIGk9MCxzPW8ud3JpdGluZ01vZGVzO2k8cy5sZW5ndGg7aSs9MSl7aWYoc1tpXT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/KEw9bigpLEM9TCk6TD1yKCksTCYmTC5ib3gmJkwuYm94Lmxlbmd0aClicmVha31lbHNlIEw9cigpfTtpZihzLmdldCgidGV4dC12YXJpYWJsZS1hbmNob3IiKSl7dmFyIE49cy5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIik7aWYoaS5wcmV2UGxhY2VtZW50JiZpLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdKXt2YXIgaj1pLnByZXZQbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzW2UuY3Jvc3NUaWxlSURdO04uaW5kZXhPZihqLmFuY2hvcik+MCYmKE49Ti5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ai5hbmNob3J9KSkpLnVuc2hpZnQoai5hbmNob3IpfXZhciBVPWZ1bmN0aW9uKHQscixuKXtmb3IodmFyIGE9dC54Mi10LngxLHM9dC55Mi10LnkxLGM9ZS50ZXh0Qm94U2NhbGUsdT13JiYheD9yOm51bGwsaD17Ym94OltdLG9mZnNjcmVlbjohMX0scD15PzIqTi5sZW5ndGg6Ti5sZW5ndGgsZD0wO2Q8cDsrK2Qpe3ZhciBnPU5bZCVOLmxlbmd0aF0sdj1kPj1OLmxlbmd0aCxrPWkuYXR0ZW1wdEFuY2hvclBsYWNlbWVudChnLHQsYSxzLGMsYixfLGYsbCxtLHYsZSxvLG4sdSk7aWYoayYmKGg9ay5wbGFjZWRHbHlwaEJveGVzKSYmaC5ib3gmJmguYm94Lmxlbmd0aCl7VD0hMCxFPWsuc2hpZnQ7YnJlYWt9fXJldHVybiBofTtCKChmdW5jdGlvbigpe3JldHVybiBVKFIsYS5pY29uQm94LHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveCxuPUwmJkwuYm94JiZMLmJveC5sZW5ndGg7cmV0dXJuIG8uYWxsb3dWZXJ0aWNhbFBsYWNlbWVudCYmIW4mJmUubnVtVmVydGljYWxHbHlwaFZlcnRpY2VzPjAmJnI/VShyLGEudmVydGljYWxJY29uQm94LHQuV3JpdGluZ01vZGUudmVydGljYWwpOntib3g6bnVsbCxvZmZzY3JlZW46bnVsbH19KSksTCYmKFQ9TC5ib3gsUz1MLm9mZnNjcmVlbik7dmFyIFY9RihMJiZMLmJveCk7aWYoIVQmJmkucHJldlBsYWNlbWVudCl7dmFyIEg9aS5wcmV2UGxhY2VtZW50LnZhcmlhYmxlT2Zmc2V0c1tlLmNyb3NzVGlsZUlEXTtIJiYoaS52YXJpYWJsZU9mZnNldHNbZS5jcm9zc1RpbGVJRF09SCxpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihvLEguYW5jaG9yLGUsVikpfX1lbHNle3ZhciBxPWZ1bmN0aW9uKHQscil7dmFyIG49aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveCh0LHksZixsLG0ucHJlZGljYXRlKTtyZXR1cm4gbiYmbi5ib3gmJm4uYm94Lmxlbmd0aCYmKGkubWFya1VzZWRPcmllbnRhdGlvbihvLHIsZSksaS5wbGFjZWRPcmllbnRhdGlvbnNbZS5jcm9zc1RpbGVJRF09ciksbn07QigoZnVuY3Rpb24oKXtyZXR1cm4gcShSLHQuV3JpdGluZ01vZGUuaG9yaXpvbnRhbCl9KSwoZnVuY3Rpb24oKXt2YXIgcj1hLnZlcnRpY2FsVGV4dEJveDtyZXR1cm4gby5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZlLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcz4wJiZyP3Eocix0LldyaXRpbmdNb2RlLnZlcnRpY2FsKTp7Ym94Om51bGwsb2Zmc2NyZWVuOm51bGx9fSkpLEYoTCYmTC5ib3gmJkwuYm94Lmxlbmd0aCl9fWlmKFQ9KHA9TCkmJnAuYm94JiZwLmJveC5sZW5ndGg+MCxTPXAmJnAub2Zmc2NyZWVuLGUudXNlUnVudGltZUNvbGxpc2lvbkNpcmNsZXMpe3ZhciBHPW8udGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQoZS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgpLFk9dC5ldmFsdWF0ZVNpemVGb3JGZWF0dXJlKG8udGV4dFNpemVEYXRhLGQsRyksVz1zLmdldCgidGV4dC1wYWRkaW5nIiksWD1lLmNvbGxpc2lvbkNpcmNsZURpYW1ldGVyO1A9aS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkNpcmNsZXMoeSxHLG8ubGluZVZlcnRleEFycmF5LG8uZ2x5cGhPZmZzZXRBcnJheSxZLGwsYyx1LG4sXyxtLnByZWRpY2F0ZSxYLFcpLFQ9eXx8UC5jaXJjbGVzLmxlbmd0aD4wJiYhUC5jb2xsaXNpb25EZXRlY3RlZCxTPVMmJlAub2Zmc2NyZWVufWlmKGEuaWNvbkZlYXR1cmVJbmRleCYmKEQ9YS5pY29uRmVhdHVyZUluZGV4KSxhLmljb25Cb3gpe3ZhciBaPWZ1bmN0aW9uKHQpe3ZhciBlPXcmJkU/X2UodCxFLngsRS55LGIsXyxpLnRyYW5zZm9ybS5hbmdsZSk6dDtyZXR1cm4gaS5jb2xsaXNpb25JbmRleC5wbGFjZUNvbGxpc2lvbkJveChlLHgsZixsLG0ucHJlZGljYXRlKX07TT1DJiZDLmJveCYmQy5ib3gubGVuZ3RoJiZhLnZlcnRpY2FsSWNvbkJveD8oST1aKGEudmVydGljYWxJY29uQm94KSkuYm94Lmxlbmd0aD4wOihJPVooYS5pY29uQm94KSkuYm94Lmxlbmd0aD4wLFM9UyYmSS5vZmZzY3JlZW59dmFyIEo9Z3x8MD09PWUubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMmJjA9PT1lLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxLPXZ8fDA9PT1lLm51bUljb25WZXJ0aWNlcztpZihKfHxLP0s/Snx8KE09TSYmVCk6VD1NJiZUOk09VD1NJiZULFQmJnAmJnAuYm94JiYoQyYmQy5ib3gmJno/aS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3gocC5ib3gscy5nZXQoInRleHQtaWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCx6LG0uSUQpOmkuY29sbGlzaW9uSW5kZXguaW5zZXJ0Q29sbGlzaW9uQm94KHAuYm94LHMuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQsTyxtLklEKSksTSYmSSYmaS5jb2xsaXNpb25JbmRleC5pbnNlcnRDb2xsaXNpb25Cb3goSS5ib3gscy5nZXQoImljb24taWdub3JlLXBsYWNlbWVudCIpLG8uYnVja2V0SW5zdGFuY2VJZCxELG0uSUQpLFAmJihUJiZpLmNvbGxpc2lvbkluZGV4Lmluc2VydENvbGxpc2lvbkNpcmNsZXMoUC5jaXJjbGVzLHMuZ2V0KCJ0ZXh0LWlnbm9yZS1wbGFjZW1lbnQiKSxvLmJ1Y2tldEluc3RhbmNlSWQsTyxtLklEKSxuKSl7dmFyIFE9by5idWNrZXRJbnN0YW5jZUlkLCQ9aS5jb2xsaXNpb25DaXJjbGVBcnJheXNbUV07dm9pZCAwPT09JCYmKCQ9aS5jb2xsaXNpb25DaXJjbGVBcnJheXNbUV09bmV3IHZlKTtmb3IodmFyIHR0PTA7dHQ8UC5jaXJjbGVzLmxlbmd0aDt0dCs9NCkkLmNpcmNsZXMucHVzaChQLmNpcmNsZXNbdHQrMF0pLCQuY2lyY2xlcy5wdXNoKFAuY2lyY2xlc1t0dCsxXSksJC5jaXJjbGVzLnB1c2goUC5jaXJjbGVzW3R0KzJdKSwkLmNpcmNsZXMucHVzaChQLmNvbGxpc2lvbkRldGVjdGVkPzE6MCl9aS5wbGFjZW1lbnRzW2UuY3Jvc3NUaWxlSURdPW5ldyBnZShUfHxrLE18fEEsU3x8by5qdXN0UmVsb2FkZWQpLHJbZS5jcm9zc1RpbGVJRF09ITB9fTtpZihUKWZvcih2YXIgUz1vLmdldFNvcnRlZFN5bWJvbEluZGV4ZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLEU9Uy5sZW5ndGgtMTtFPj0wOy0tRSl7dmFyIEw9U1tFXTtNKG8uc3ltYm9sSW5zdGFuY2VzLmdldChMKSxvLmNvbGxpc2lvbkFycmF5c1tMXSl9ZWxzZSBmb3IodmFyIEM9ZS5zeW1ib2xJbnN0YW5jZVN0YXJ0O0M8ZS5zeW1ib2xJbnN0YW5jZUVuZDtDKyspTShvLnN5bWJvbEluc3RhbmNlcy5nZXQoQyksby5jb2xsaXNpb25BcnJheXNbQ10pO2lmKG4mJm8uYnVja2V0SW5zdGFuY2VJZCBpbiB0aGlzLmNvbGxpc2lvbkNpcmNsZUFycmF5cyl7dmFyIFA9dGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXNbby5idWNrZXRJbnN0YW5jZUlkXTt0LmludmVydChQLmludlByb2pNYXRyaXgsbCksUC52aWV3cG9ydE1hdHJpeD10aGlzLmNvbGxpc2lvbkluZGV4LmdldFZpZXdwb3J0TWF0cml4KCl9by5qdXN0UmVsb2FkZWQ9ITF9LHdlLnByb3RvdHlwZS5tYXJrVXNlZEp1c3RpZmljYXRpb249ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGEsbz17bGVmdDpuLmxlZnRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsY2VudGVyOm4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LHJpZ2h0Om4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXh9O2E9aT09PXQuV3JpdGluZ01vZGUudmVydGljYWw/bi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleDpvW3QuZ2V0QW5jaG9ySnVzdGlmaWNhdGlvbihyKV07Zm9yKHZhciBzPTAsbD1bbi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsbi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleF07czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdO2M+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGMpLmNyb3NzVGlsZUlEPWE+PTAmJmMhPT1hPzA6bi5jcm9zc1RpbGVJRCl9fSx3ZS5wcm90b3R5cGUubWFya1VzZWRPcmllbnRhdGlvbj1mdW5jdGlvbihlLHIsbil7Zm9yKHZhciBpPXI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWx8fHI9PT10LldyaXRpbmdNb2RlLmhvcml6b250YWxPbmx5P3I6MCxhPXI9PT10LldyaXRpbmdNb2RlLnZlcnRpY2FsP3I6MCxvPTAscz1bbi5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4uY2VudGVySnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4LG4ucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXhdO288cy5sZW5ndGg7bys9MSl7dmFyIGw9c1tvXTtlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGwpLnBsYWNlZE9yaWVudGF0aW9uPWl9bi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCYmKGUudGV4dC5wbGFjZWRTeW1ib2xBcnJheS5nZXQobi52ZXJ0aWNhbFBsYWNlZFRleHRTeW1ib2xJbmRleCkucGxhY2VkT3JpZW50YXRpb249YSl9LHdlLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCl7dGhpcy5jb21taXRUaW1lPXQsdGhpcy56b29tQXRMYXN0UmVjZW5jeUNoZWNrPXRoaXMudHJhbnNmb3JtLnpvb207dmFyIGU9dGhpcy5wcmV2UGxhY2VtZW50LHI9ITE7dGhpcy5wcmV2Wm9vbUFkanVzdG1lbnQ9ZT9lLnpvb21BZGp1c3RtZW50KHRoaXMudHJhbnNmb3JtLnpvb20pOjA7dmFyIG49ZT9lLnN5bWJvbEZhZGVDaGFuZ2UodCk6MSxpPWU/ZS5vcGFjaXRpZXM6e30sYT1lP2UudmFyaWFibGVPZmZzZXRzOnt9LG89ZT9lLnBsYWNlZE9yaWVudGF0aW9uczp7fTtmb3IodmFyIHMgaW4gdGhpcy5wbGFjZW1lbnRzKXt2YXIgbD10aGlzLnBsYWNlbWVudHNbc10sYz1pW3NdO2M/KHRoaXMub3BhY2l0aWVzW3NdPW5ldyBtZShjLG4sbC50ZXh0LGwuaWNvbikscj1yfHxsLnRleHQhPT1jLnRleHQucGxhY2VkfHxsLmljb24hPT1jLmljb24ucGxhY2VkKToodGhpcy5vcGFjaXRpZXNbc109bmV3IG1lKG51bGwsbixsLnRleHQsbC5pY29uLGwuc2tpcEZhZGUpLHI9cnx8bC50ZXh0fHxsLmljb24pfWZvcih2YXIgdSBpbiBpKXt2YXIgZj1pW3VdO2lmKCF0aGlzLm9wYWNpdGllc1t1XSl7dmFyIGg9bmV3IG1lKGYsbiwhMSwhMSk7aC5pc0hpZGRlbigpfHwodGhpcy5vcGFjaXRpZXNbdV09aCxyPXJ8fGYudGV4dC5wbGFjZWR8fGYuaWNvbi5wbGFjZWQpfX1mb3IodmFyIHAgaW4gYSl0aGlzLnZhcmlhYmxlT2Zmc2V0c1twXXx8IXRoaXMub3BhY2l0aWVzW3BdfHx0aGlzLm9wYWNpdGllc1twXS5pc0hpZGRlbigpfHwodGhpcy52YXJpYWJsZU9mZnNldHNbcF09YVtwXSk7Zm9yKHZhciBkIGluIG8pdGhpcy5wbGFjZWRPcmllbnRhdGlvbnNbZF18fCF0aGlzLm9wYWNpdGllc1tkXXx8dGhpcy5vcGFjaXRpZXNbZF0uaXNIaWRkZW4oKXx8KHRoaXMucGxhY2VkT3JpZW50YXRpb25zW2RdPW9bZF0pO3I/dGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZT10OiJudW1iZXIiIT10eXBlb2YgdGhpcy5sYXN0UGxhY2VtZW50Q2hhbmdlVGltZSYmKHRoaXMubGFzdFBsYWNlbWVudENoYW5nZVRpbWU9ZT9lLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lOnQpfSx3ZS5wcm90b3R5cGUudXBkYXRlTGF5ZXJPcGFjaXRpZXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9e30sbj0wLGk9ZTtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl0sbz1hLmdldEJ1Y2tldCh0KTtvJiZhLmxhdGVzdEZlYXR1cmVJbmRleCYmdC5pZD09PW8ubGF5ZXJJZHNbMF0mJnRoaXMudXBkYXRlQnVja2V0T3BhY2l0aWVzKG8scixhLmNvbGxpc2lvbkJveEFycmF5KX19LHdlLnByb3RvdHlwZS51cGRhdGVCdWNrZXRPcGFjaXRpZXM9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXRoaXM7ZS5oYXNUZXh0RGF0YSgpJiZlLnRleHQub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNJY29uRGF0YSgpJiZlLmljb24ub3BhY2l0eVZlcnRleEFycmF5LmNsZWFyKCksZS5oYXNJY29uQ29sbGlzaW9uQm94RGF0YSgpJiZlLmljb25Db2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QXJyYXkuY2xlYXIoKSxlLmhhc1RleHRDb2xsaXNpb25Cb3hEYXRhKCkmJmUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheS5jbGVhcigpO3ZhciBhPWUubGF5ZXJzWzBdLmxheW91dCxvPW5ldyBtZShudWxsLDAsITEsITEsITApLHM9YS5nZXQoInRleHQtYWxsb3ctb3ZlcmxhcCIpLGw9YS5nZXQoImljb24tYWxsb3ctb3ZlcmxhcCIpLGM9YS5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksdT0ibWFwIj09PWEuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLGY9Im1hcCI9PT1hLmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxoPSJub25lIiE9PWEuZ2V0KCJpY29uLXRleHQtZml0IikscD1uZXcgbWUobnVsbCwwLHMmJihsfHwhZS5oYXNJY29uRGF0YSgpfHxhLmdldCgiaWNvbi1vcHRpb25hbCIpKSxsJiYoc3x8IWUuaGFzVGV4dERhdGEoKXx8YS5nZXQoInRleHQtb3B0aW9uYWwiKSksITApOyFlLmNvbGxpc2lvbkFycmF5cyYmbiYmKGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKXx8ZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpKSYmZS5kZXNlcmlhbGl6ZUNvbGxpc2lvbkJveGVzKG4pO2Zvcih2YXIgZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTA7bjxlLzQ7bisrKXQub3BhY2l0eVZlcnRleEFycmF5LmVtcGxhY2VCYWNrKHIpfSxtPWZ1bmN0aW9uKG4pe3ZhciBhPWUuc3ltYm9sSW5zdGFuY2VzLmdldChuKSxzPWEubnVtSG9yaXpvbnRhbEdseXBoVmVydGljZXMsbD1hLm51bVZlcnRpY2FsR2x5cGhWZXJ0aWNlcyxtPWEuY3Jvc3NUaWxlSUQsZz1yW21dLHY9aS5vcGFjaXRpZXNbbV07Zz92PW86dnx8KHY9cCxpLm9wYWNpdGllc1ttXT12KSxyW21dPSEwO3ZhciB5PXM+MHx8bD4wLHg9YS5udW1JY29uVmVydGljZXM+MCxiPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdLF89Yj09PXQuV3JpdGluZ01vZGUudmVydGljYWwsdz1iPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsfHxiPT09dC5Xcml0aW5nTW9kZS5ob3Jpem9udGFsT25seTtpZih5KXt2YXIgVD1QZSh2LnRleHQpLGs9Xz9JZTpUO2QoZS50ZXh0LHMsayk7dmFyIEE9dz9JZTpUO2QoZS50ZXh0LGwsQSk7dmFyIE09di50ZXh0LmlzSGlkZGVuKCk7W2EucmlnaHRKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5jZW50ZXJKdXN0aWZpZWRUZXh0U3ltYm9sSW5kZXgsYS5sZWZ0SnVzdGlmaWVkVGV4dFN5bWJvbEluZGV4XS5mb3JFYWNoKChmdW5jdGlvbih0KXt0Pj0wJiYoZS50ZXh0LnBsYWNlZFN5bWJvbEFycmF5LmdldCh0KS5oaWRkZW49TXx8Xz8xOjApfSkpLGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXg+PTAmJihlLnRleHQucGxhY2VkU3ltYm9sQXJyYXkuZ2V0KGEudmVydGljYWxQbGFjZWRUZXh0U3ltYm9sSW5kZXgpLmhpZGRlbj1NfHx3PzE6MCk7dmFyIFM9aS52YXJpYWJsZU9mZnNldHNbYS5jcm9zc1RpbGVJRF07UyYmaS5tYXJrVXNlZEp1c3RpZmljYXRpb24oZSxTLmFuY2hvcixhLGIpO3ZhciBFPWkucGxhY2VkT3JpZW50YXRpb25zW2EuY3Jvc3NUaWxlSURdO0UmJihpLm1hcmtVc2VkSnVzdGlmaWNhdGlvbihlLCJsZWZ0IixhLEUpLGkubWFya1VzZWRPcmllbnRhdGlvbihlLEUsYSkpfWlmKHgpe3ZhciBMPVBlKHYuaWNvbiksQz0hKGgmJmEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXgmJl8pO2lmKGEucGxhY2VkSWNvblN5bWJvbEluZGV4Pj0wKXt2YXIgUD1DP0w6SWU7ZChlLmljb24sYS5udW1JY29uVmVydGljZXMsUCksZS5pY29uLnBsYWNlZFN5bWJvbEFycmF5LmdldChhLnBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuPXYuaWNvbi5pc0hpZGRlbigpfWlmKGEudmVydGljYWxQbGFjZWRJY29uU3ltYm9sSW5kZXg+PTApe3ZhciBJPUM/SWU6TDtkKGUuaWNvbixhLm51bVZlcnRpY2FsSWNvblZlcnRpY2VzLEkpLGUuaWNvbi5wbGFjZWRTeW1ib2xBcnJheS5nZXQoYS52ZXJ0aWNhbFBsYWNlZEljb25TeW1ib2xJbmRleCkuaGlkZGVuPXYuaWNvbi5pc0hpZGRlbigpfX1pZihlLmhhc0ljb25Db2xsaXNpb25Cb3hEYXRhKCl8fGUuaGFzVGV4dENvbGxpc2lvbkJveERhdGEoKSl7dmFyIE89ZS5jb2xsaXNpb25BcnJheXNbbl07aWYoTyl7dmFyIHo9bmV3IHQuUG9pbnQoMCwwKTtpZihPLnRleHRCb3h8fE8udmVydGljYWxUZXh0Qm94KXt2YXIgRD0hMDtpZihjKXt2YXIgUj1pLnZhcmlhYmxlT2Zmc2V0c1ttXTtSPyh6PWJlKFIuYW5jaG9yLFIud2lkdGgsUi5oZWlnaHQsUi50ZXh0T2Zmc2V0LFIudGV4dEJveFNjYWxlKSx1JiZ6Ll9yb3RhdGUoZj9pLnRyYW5zZm9ybS5hbmdsZTotaS50cmFuc2Zvcm0uYW5nbGUpKTpEPSExfU8udGV4dEJveCYmVGUoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYudGV4dC5wbGFjZWQsIUR8fF8sei54LHoueSksTy52ZXJ0aWNhbFRleHRCb3gmJlRlKGUudGV4dENvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2LnRleHQucGxhY2VkLCFEfHx3LHoueCx6LnkpfXZhciBGPUJvb2xlYW4oIXcmJk8udmVydGljYWxJY29uQm94KTtPLmljb25Cb3gmJlRlKGUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSx2Lmljb24ucGxhY2VkLEYsaD96Lng6MCxoP3oueTowKSxPLnZlcnRpY2FsSWNvbkJveCYmVGUoZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5LHYuaWNvbi5wbGFjZWQsIUYsaD96Lng6MCxoP3oueTowKX19fSxnPTA7ZzxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7ZysrKW0oZyk7aWYoZS5zb3J0RmVhdHVyZXModGhpcy50cmFuc2Zvcm0uYW5nbGUpLHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXSYmKHRoaXMucmV0YWluZWRRdWVyeURhdGFbZS5idWNrZXRJbnN0YW5jZUlkXS5mZWF0dXJlU29ydE9yZGVyPWUuZmVhdHVyZVNvcnRPcmRlciksZS5oYXNUZXh0RGF0YSgpJiZlLnRleHQub3BhY2l0eVZlcnRleEJ1ZmZlciYmZS50ZXh0Lm9wYWNpdHlWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShlLnRleHQub3BhY2l0eVZlcnRleEFycmF5KSxlLmhhc0ljb25EYXRhKCkmJmUuaWNvbi5vcGFjaXR5VmVydGV4QnVmZmVyJiZlLmljb24ub3BhY2l0eVZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuaWNvbi5vcGFjaXR5VmVydGV4QXJyYXkpLGUuaGFzSWNvbkNvbGxpc2lvbkJveERhdGEoKSYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlciYmZS5pY29uQ29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEJ1ZmZlci51cGRhdGVEYXRhKGUuaWNvbkNvbGxpc2lvbkJveC5jb2xsaXNpb25WZXJ0ZXhBcnJheSksZS5oYXNUZXh0Q29sbGlzaW9uQm94RGF0YSgpJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyJiZlLnRleHRDb2xsaXNpb25Cb3guY29sbGlzaW9uVmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZS50ZXh0Q29sbGlzaW9uQm94LmNvbGxpc2lvblZlcnRleEFycmF5KSxlLmJ1Y2tldEluc3RhbmNlSWQgaW4gdGhpcy5jb2xsaXNpb25DaXJjbGVBcnJheXMpe3ZhciB2PXRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2UuYnVja2V0SW5zdGFuY2VJZF07ZS5wbGFjZW1lbnRJbnZQcm9qTWF0cml4PXYuaW52UHJvak1hdHJpeCxlLnBsYWNlbWVudFZpZXdwb3J0TWF0cml4PXYudmlld3BvcnRNYXRyaXgsZS5jb2xsaXNpb25DaXJjbGVBcnJheT12LmNpcmNsZXMsZGVsZXRlIHRoaXMuY29sbGlzaW9uQ2lyY2xlQXJyYXlzW2UuYnVja2V0SW5zdGFuY2VJZF19fSx3ZS5wcm90b3R5cGUuc3ltYm9sRmFkZUNoYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZmFkZUR1cmF0aW9uPzE6KHQtdGhpcy5jb21taXRUaW1lKS90aGlzLmZhZGVEdXJhdGlvbit0aGlzLnByZXZab29tQWRqdXN0bWVudH0sd2UucHJvdG90eXBlLnpvb21BZGp1c3RtZW50PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLCh0aGlzLnRyYW5zZm9ybS56b29tLXQpLzEuNSl9LHdlLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFsZXx8dC10aGlzLmxhc3RQbGFjZW1lbnRDaGFuZ2VUaW1lPHRoaXMuZmFkZUR1cmF0aW9ufSx3ZS5wcm90b3R5cGUuc3RpbGxSZWNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2s9PT1lPzEtdGhpcy56b29tQWRqdXN0bWVudChlKToxO3JldHVybiB0aGlzLnpvb21BdExhc3RSZWNlbmN5Q2hlY2s9ZSx0aGlzLmNvbW1pdFRpbWUrdGhpcy5mYWRlRHVyYXRpb24qcj50fSx3ZS5wcm90b3R5cGUuc2V0U3RhbGU9ZnVuY3Rpb24oKXt0aGlzLnN0YWxlPSEwfTt2YXIga2U9TWF0aC5wb3coMiwyNSksQWU9TWF0aC5wb3coMiwyNCksTWU9TWF0aC5wb3coMiwxNyksU2U9TWF0aC5wb3coMiwxNiksRWU9TWF0aC5wb3coMiw5KSxMZT1NYXRoLnBvdygyLDgpLENlPU1hdGgucG93KDIsMSk7ZnVuY3Rpb24gUGUodCl7aWYoMD09PXQub3BhY2l0eSYmIXQucGxhY2VkKXJldHVybiAwO2lmKDE9PT10Lm9wYWNpdHkmJnQucGxhY2VkKXJldHVybiA0Mjk0OTY3Mjk1O3ZhciBlPXQucGxhY2VkPzE6MCxyPU1hdGguZmxvb3IoMTI3KnQub3BhY2l0eSk7cmV0dXJuIHIqa2UrZSpBZStyKk1lK2UqU2UrcipFZStlKkxlK3IqQ2UrZX12YXIgSWU9MCxPZT1mdW5jdGlvbih0KXt0aGlzLl9zb3J0QWNyb3NzVGlsZXM9InZpZXdwb3J0LXkiIT09dC5sYXlvdXQuZ2V0KCJzeW1ib2wtei1vcmRlciIpJiZ2b2lkIDAhPT10LmxheW91dC5nZXQoInN5bWJvbC1zb3J0LWtleSIpLmNvbnN0YW50T3IoMSksdGhpcy5fY3VycmVudFRpbGVJbmRleD0wLHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXg9MCx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzPXt9LHRoaXMuX2J1Y2tldFBhcnRzPVtdfTtPZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dGhpcy5fYnVja2V0UGFydHM7dGhpcy5fY3VycmVudFRpbGVJbmRleDx0Lmxlbmd0aDspe3ZhciBvPXRbdGhpcy5fY3VycmVudFRpbGVJbmRleF07aWYoZS5nZXRCdWNrZXRQYXJ0cyhhLG4sbyx0aGlzLl9zb3J0QWNyb3NzVGlsZXMpLHRoaXMuX2N1cnJlbnRUaWxlSW5kZXgrKyxpKCkpcmV0dXJuITB9Zm9yKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcyYmKHRoaXMuX3NvcnRBY3Jvc3NUaWxlcz0hMSxhLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSkpO3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXg8YS5sZW5ndGg7KXt2YXIgcz1hW3RoaXMuX2N1cnJlbnRQYXJ0SW5kZXhdO2lmKGUucGxhY2VMYXllckJ1Y2tldFBhcnQocyx0aGlzLl9zZWVuQ3Jvc3NUaWxlSURzLHIpLHRoaXMuX2N1cnJlbnRQYXJ0SW5kZXgrKyxpKCkpcmV0dXJuITB9cmV0dXJuITF9O3ZhciB6ZT1mdW5jdGlvbih0LGUscixuLGksYSxvKXt0aGlzLnBsYWNlbWVudD1uZXcgd2UodCxpLGEsbyksdGhpcy5fY3VycmVudFBsYWNlbWVudEluZGV4PWUubGVuZ3RoLTEsdGhpcy5fZm9yY2VGdWxsUGxhY2VtZW50PXIsdGhpcy5fc2hvd0NvbGxpc2lvbkJveGVzPW4sdGhpcy5fZG9uZT0hMX07emUucHJvdG90eXBlLmlzRG9uZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb25lfSx6ZS5wcm90b3R5cGUuY29udGludWVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4pe2Zvcih2YXIgaT10aGlzLGE9dC5icm93c2VyLm5vdygpLG89ZnVuY3Rpb24oKXt2YXIgZT10LmJyb3dzZXIubm93KCktYTtyZXR1cm4haS5fZm9yY2VGdWxsUGxhY2VtZW50JiZlPjJ9O3RoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleD49MDspe3ZhciBzPXJbZVt0aGlzLl9jdXJyZW50UGxhY2VtZW50SW5kZXhdXSxsPXRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LnRyYW5zZm9ybS56b29tO2lmKCJzeW1ib2wiPT09cy50eXBlJiYoIXMubWluem9vbXx8cy5taW56b29tPD1sKSYmKCFzLm1heHpvb218fHMubWF4em9vbT5sKSl7aWYodGhpcy5faW5Qcm9ncmVzc0xheWVyfHwodGhpcy5faW5Qcm9ncmVzc0xheWVyPW5ldyBPZShzKSksdGhpcy5faW5Qcm9ncmVzc0xheWVyLmNvbnRpbnVlUGxhY2VtZW50KG5bcy5zb3VyY2VdLHRoaXMucGxhY2VtZW50LHRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyxzLG8pKXJldHVybjtkZWxldGUgdGhpcy5faW5Qcm9ncmVzc0xheWVyfXRoaXMuX2N1cnJlbnRQbGFjZW1lbnRJbmRleC0tfXRoaXMuX2RvbmU9ITB9LHplLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGxhY2VtZW50LmNvbW1pdCh0KSx0aGlzLnBsYWNlbWVudH07dmFyIERlPTUxMi90LkVYVEVOVC8yLFJlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnRpbGVJRD10LHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlcz17fSx0aGlzLmJ1Y2tldEluc3RhbmNlSWQ9cjtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5nZXQobiksYT1pLmtleTt0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYV18fCh0aGlzLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbYV09W10pLHRoaXMuaW5kZXhlZFN5bWJvbEluc3RhbmNlc1thXS5wdXNoKHtjcm9zc1RpbGVJRDppLmNyb3NzVGlsZUlELGNvb3JkOnRoaXMuZ2V0U2NhbGVkQ29vcmRpbmF0ZXMoaSx0KX0pfX07UmUucHJvdG90eXBlLmdldFNjYWxlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUscil7dmFyIG49ci5jYW5vbmljYWwuei10aGlzLnRpbGVJRC5jYW5vbmljYWwueixpPURlL01hdGgucG93KDIsbik7cmV0dXJue3g6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueCp0LkVYVEVOVCtlLmFuY2hvclgpKmkpLHk6TWF0aC5mbG9vcigoci5jYW5vbmljYWwueSp0LkVYVEVOVCtlLmFuY2hvclkpKmkpfX0sUmUucHJvdG90eXBlLmZpbmRNYXRjaGVzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy50aWxlSUQuY2Fub25pY2FsLno8ZS5jYW5vbmljYWwuej8xOk1hdGgucG93KDIsdGhpcy50aWxlSUQuY2Fub25pY2FsLnotZS5jYW5vbmljYWwueiksaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10LmdldChpKTtpZighYS5jcm9zc1RpbGVJRCl7dmFyIG89dGhpcy5pbmRleGVkU3ltYm9sSW5zdGFuY2VzW2Eua2V5XTtpZihvKWZvcih2YXIgcz10aGlzLmdldFNjYWxlZENvb3JkaW5hdGVzKGEsZSksbD0wLGM9bztsPGMubGVuZ3RoO2wrPTEpe3ZhciB1PWNbbF07aWYoTWF0aC5hYnModS5jb29yZC54LXMueCk8PW4mJk1hdGguYWJzKHUuY29vcmQueS1zLnkpPD1uJiYhclt1LmNyb3NzVGlsZUlEXSl7clt1LmNyb3NzVGlsZUlEXT0hMCxhLmNyb3NzVGlsZUlEPXUuY3Jvc3NUaWxlSUQ7YnJlYWt9fX19fTt2YXIgRmU9ZnVuY3Rpb24oKXt0aGlzLm1heENyb3NzVGlsZUlEPTB9O0ZlLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbigpe3JldHVybisrdGhpcy5tYXhDcm9zc1RpbGVJRH07dmFyIEJlPWZ1bmN0aW9uKCl7dGhpcy5pbmRleGVzPXt9LHRoaXMudXNlZENyb3NzVGlsZUlEcz17fSx0aGlzLmxuZz0wfTtCZS5wcm90b3R5cGUuaGFuZGxlV3JhcEp1bXA9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5yb3VuZCgodC10aGlzLmxuZykvMzYwKTtpZigwIT09ZSlmb3IodmFyIHIgaW4gdGhpcy5pbmRleGVzKXt2YXIgbj10aGlzLmluZGV4ZXNbcl0saT17fTtmb3IodmFyIGEgaW4gbil7dmFyIG89blthXTtvLnRpbGVJRD1vLnRpbGVJRC51bndyYXBUbyhvLnRpbGVJRC53cmFwK2UpLGlbby50aWxlSUQua2V5XT1vfXRoaXMuaW5kZXhlc1tyXT1pfXRoaXMubG5nPXR9LEJlLnByb3RvdHlwZS5hZGRCdWNrZXQ9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXSYmdGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XSl7aWYodGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XS5idWNrZXRJbnN0YW5jZUlkPT09ZS5idWNrZXRJbnN0YW5jZUlkKXJldHVybiExO3RoaXMucmVtb3ZlQnVja2V0Q3Jvc3NUaWxlSURzKHQub3ZlcnNjYWxlZFosdGhpcy5pbmRleGVzW3Qub3ZlcnNjYWxlZFpdW3Qua2V5XSl9Zm9yKHZhciBuPTA7bjxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7bisrKXtlLnN5bWJvbEluc3RhbmNlcy5nZXQobikuY3Jvc3NUaWxlSUQ9MH10aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl18fCh0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdC5vdmVyc2NhbGVkWl09e30pO3ZhciBpPXRoaXMudXNlZENyb3NzVGlsZUlEc1t0Lm92ZXJzY2FsZWRaXTtmb3IodmFyIGEgaW4gdGhpcy5pbmRleGVzKXt2YXIgbz10aGlzLmluZGV4ZXNbYV07aWYoTnVtYmVyKGEpPnQub3ZlcnNjYWxlZFopZm9yKHZhciBzIGluIG8pe3ZhciBsPW9bc107bC50aWxlSUQuaXNDaGlsZE9mKHQpJiZsLmZpbmRNYXRjaGVzKGUuc3ltYm9sSW5zdGFuY2VzLHQsaSl9ZWxzZXt2YXIgYz1vW3Quc2NhbGVkVG8oTnVtYmVyKGEpKS5rZXldO2MmJmMuZmluZE1hdGNoZXMoZS5zeW1ib2xJbnN0YW5jZXMsdCxpKX19Zm9yKHZhciB1PTA7dTxlLnN5bWJvbEluc3RhbmNlcy5sZW5ndGg7dSsrKXt2YXIgZj1lLnN5bWJvbEluc3RhbmNlcy5nZXQodSk7Zi5jcm9zc1RpbGVJRHx8KGYuY3Jvc3NUaWxlSUQ9ci5nZW5lcmF0ZSgpLGlbZi5jcm9zc1RpbGVJRF09ITApfXJldHVybiB2b2lkIDA9PT10aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl0mJih0aGlzLmluZGV4ZXNbdC5vdmVyc2NhbGVkWl09e30pLHRoaXMuaW5kZXhlc1t0Lm92ZXJzY2FsZWRaXVt0LmtleV09bmV3IFJlKHQsZS5zeW1ib2xJbnN0YW5jZXMsZS5idWNrZXRJbnN0YW5jZUlkKSwhMH0sQmUucHJvdG90eXBlLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgciBpbiBlLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXMpZm9yKHZhciBuPTAsaT1lLmluZGV4ZWRTeW1ib2xJbnN0YW5jZXNbcl07bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dO2RlbGV0ZSB0aGlzLnVzZWRDcm9zc1RpbGVJRHNbdF1bYS5jcm9zc1RpbGVJRF19fSxCZS5wcm90b3R5cGUucmVtb3ZlU3RhbGVCdWNrZXRzPWZ1bmN0aW9uKHQpe3ZhciBlPSExO2Zvcih2YXIgciBpbiB0aGlzLmluZGV4ZXMpe3ZhciBuPXRoaXMuaW5kZXhlc1tyXTtmb3IodmFyIGkgaW4gbil0W25baV0uYnVja2V0SW5zdGFuY2VJZF18fCh0aGlzLnJlbW92ZUJ1Y2tldENyb3NzVGlsZUlEcyhyLG5baV0pLGRlbGV0ZSBuW2ldLGU9ITApfXJldHVybiBlfTt2YXIgTmU9ZnVuY3Rpb24oKXt0aGlzLmxheWVySW5kZXhlcz17fSx0aGlzLmNyb3NzVGlsZUlEcz1uZXcgRmUsdGhpcy5tYXhCdWNrZXRJbnN0YW5jZUlkPTAsdGhpcy5idWNrZXRzSW5DdXJyZW50UGxhY2VtZW50PXt9fTtOZS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdO3ZvaWQgMD09PW4mJihuPXRoaXMubGF5ZXJJbmRleGVzW3QuaWRdPW5ldyBCZSk7dmFyIGk9ITEsYT17fTtuLmhhbmRsZVdyYXBKdW1wKHIpO2Zvcih2YXIgbz0wLHM9ZTtvPHMubGVuZ3RoO28rPTEpe3ZhciBsPXNbb10sYz1sLmdldEJ1Y2tldCh0KTtjJiZ0LmlkPT09Yy5sYXllcklkc1swXSYmKGMuYnVja2V0SW5zdGFuY2VJZHx8KGMuYnVja2V0SW5zdGFuY2VJZD0rK3RoaXMubWF4QnVja2V0SW5zdGFuY2VJZCksbi5hZGRCdWNrZXQobC50aWxlSUQsYyx0aGlzLmNyb3NzVGlsZUlEcykmJihpPSEwKSxhW2MuYnVja2V0SW5zdGFuY2VJZF09ITApfXJldHVybiBuLnJlbW92ZVN0YWxlQnVja2V0cyhhKSYmKGk9ITApLGl9LE5lLnByb3RvdHlwZS5wcnVuZVVudXNlZExheWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPSEwfSkpLHRoaXMubGF5ZXJJbmRleGVzKWVbcl18fGRlbGV0ZSB0aGlzLmxheWVySW5kZXhlc1tyXX07dmFyIGplPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZW1pdFZhbGlkYXRpb25FcnJvcnMoZSxyJiZyLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuInNvdXJjZS5jYW52YXMiIT09dC5pZGVudGlmaWVyfSkpKX0sVWU9dC5waWNrKFV0LFsiYWRkTGF5ZXIiLCJyZW1vdmVMYXllciIsInNldFBhaW50UHJvcGVydHkiLCJzZXRMYXlvdXRQcm9wZXJ0eSIsInNldEZpbHRlciIsImFkZFNvdXJjZSIsInJlbW92ZVNvdXJjZSIsInNldExheWVyWm9vbVJhbmdlIiwic2V0TGlnaHQiLCJzZXRUcmFuc2l0aW9uIiwic2V0R2VvSlNPTlNvdXJjZURhdGEiXSksVmU9dC5waWNrKFV0LFsic2V0Q2VudGVyIiwic2V0Wm9vbSIsInNldEJlYXJpbmciLCJzZXRQaXRjaCJdKSxIZT1mdW5jdGlvbigpe3ZhciBlPXt9LHI9dC5zdHlsZVNwZWMuJHZlcnNpb247Zm9yKHZhciBuIGluIHQuc3R5bGVTcGVjLiRyb290KXt2YXIgaT10LnN0eWxlU3BlYy4kcm9vdFtuXTtpZihpLnJlcXVpcmVkKXt2YXIgYT1udWxsO251bGwhPShhPSJ2ZXJzaW9uIj09PW4/cjoiYXJyYXkiPT09aS50eXBlP1tdOnt9KSYmKGVbbl09YSl9fXJldHVybiBlfSgpLHFlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIobixpKXt2YXIgYT10aGlzO3ZvaWQgMD09PWkmJihpPXt9KSxlLmNhbGwodGhpcyksdGhpcy5tYXA9bix0aGlzLmRpc3BhdGNoZXI9bmV3IGsoQnQoKSx0aGlzKSx0aGlzLmltYWdlTWFuYWdlcj1uZXcgaCx0aGlzLmltYWdlTWFuYWdlci5zZXRFdmVudGVkUGFyZW50KHRoaXMpLHRoaXMuZ2x5cGhNYW5hZ2VyPW5ldyB4KG4uX3JlcXVlc3RNYW5hZ2VyLGkubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5KSx0aGlzLmxpbmVBdGxhcz1uZXcgVCgyNTYsNTEyKSx0aGlzLmNyb3NzVGlsZVN5bWJvbEluZGV4PW5ldyBOZSx0aGlzLl9sYXllcnM9e30sdGhpcy5fc2VyaWFsaXplZExheWVycz17fSx0aGlzLl9vcmRlcj1bXSx0aGlzLnNvdXJjZUNhY2hlcz17fSx0aGlzLnpvb21IaXN0b3J5PW5ldyB0Llpvb21IaXN0b3J5LHRoaXMuX2xvYWRlZD0hMSx0aGlzLl9hdmFpbGFibGVJbWFnZXM9W10sdGhpcy5fcmVzZXRVcGRhdGVzKCksdGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0UmVmZXJyZXIiLHQuZ2V0UmVmZXJyZXIoKSk7dmFyIG89dGhpczt0aGlzLl9ydGxUZXh0UGx1Z2luQ2FsbGJhY2s9ci5yZWdpc3RlckZvclBsdWdpblN0YXRlQ2hhbmdlKChmdW5jdGlvbihlKXt2YXIgcj17cGx1Z2luU3RhdHVzOmUucGx1Z2luU3RhdHVzLHBsdWdpblVSTDplLnBsdWdpblVSTH07by5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic3luY1JUTFBsdWdpblN0YXRlIixyLChmdW5jdGlvbihlLHIpe2lmKCh0LnRyaWdnZXJQbHVnaW5Db21wbGV0aW9uRXZlbnQoZSkscikmJnIuZXZlcnkoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpKWZvcih2YXIgbiBpbiBvLnNvdXJjZUNhY2hlcylvLnNvdXJjZUNhY2hlc1tuXS5yZWxvYWQoKX0pKX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24odCl7aWYoInNvdXJjZSI9PT10LmRhdGFUeXBlJiYibWV0YWRhdGEiPT09dC5zb3VyY2VEYXRhVHlwZSl7dmFyIGU9YS5zb3VyY2VDYWNoZXNbdC5zb3VyY2VJZF07aWYoZSl7dmFyIHI9ZS5nZXRTb3VyY2UoKTtpZihyJiZyLnZlY3RvckxheWVySWRzKWZvcih2YXIgbiBpbiBhLl9sYXllcnMpe3ZhciBpPWEuX2xheWVyc1tuXTtpLnNvdXJjZT09PXIuaWQmJmEuX3ZhbGlkYXRlTGF5ZXIoaSl9fX19KSl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmxvYWRVUkw9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzO3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKTt2YXIgaT0iYm9vbGVhbiI9PXR5cGVvZiByLnZhbGlkYXRlP3IudmFsaWRhdGU6IXQuaXNNYXBib3hVUkwoZSk7ZT10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIubm9ybWFsaXplU3R5bGVVUkwoZSxyLmFjY2Vzc1Rva2VuKTt2YXIgYT10aGlzLm1hcC5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLlN0eWxlKTt0aGlzLl9yZXF1ZXN0PXQuZ2V0SlNPTihhLChmdW5jdGlvbihlLHIpe24uX3JlcXVlc3Q9bnVsbCxlP24uZmlyZShuZXcgdC5FcnJvckV2ZW50KGUpKTpyJiZuLl9sb2FkKHIsaSl9KSl9LHIucHJvdG90eXBlLmxvYWRKU09OPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt2b2lkIDA9PT1yJiYocj17fSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhbG9hZGluZyIse2RhdGFUeXBlOiJzdHlsZSJ9KSksdGhpcy5fcmVxdWVzdD10LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKCl7bi5fcmVxdWVzdD1udWxsLG4uX2xvYWQoZSwhMSE9PXIudmFsaWRhdGUpfSkpfSxyLnByb3RvdHlwZS5sb2FkRW1wdHk9ZnVuY3Rpb24oKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoImRhdGFsb2FkaW5nIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLl9sb2FkKEhlLCExKX0sci5wcm90b3R5cGUuX2xvYWQ9ZnVuY3Rpb24oZSxyKXtpZighcnx8IWplKHRoaXMsdC52YWxpZGF0ZVN0eWxlKGUpKSl7Zm9yKHZhciBuIGluIHRoaXMuX2xvYWRlZD0hMCx0aGlzLnN0eWxlc2hlZXQ9ZSxlLnNvdXJjZXMpdGhpcy5hZGRTb3VyY2UobixlLnNvdXJjZXNbbl0se3ZhbGlkYXRlOiExfSk7ZS5zcHJpdGU/dGhpcy5fbG9hZFNwcml0ZShlLnNwcml0ZSk6dGhpcy5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSx0aGlzLmdseXBoTWFuYWdlci5zZXRVUkwoZS5nbHlwaHMpO3ZhciBpPWp0KHRoaXMuc3R5bGVzaGVldC5sYXllcnMpO3RoaXMuX29yZGVyPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5pZH0pKSx0aGlzLl9sYXllcnM9e30sdGhpcy5fc2VyaWFsaXplZExheWVycz17fTtmb3IodmFyIGE9MCxvPWk7YTxvLmxlbmd0aDthKz0xKXt2YXIgcz1vW2FdOyhzPXQuY3JlYXRlU3R5bGVMYXllcihzKSkuc2V0RXZlbnRlZFBhcmVudCh0aGlzLHtsYXllcjp7aWQ6cy5pZH19KSx0aGlzLl9sYXllcnNbcy5pZF09cyx0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW3MuaWRdPXMuc2VyaWFsaXplKCl9dGhpcy5kaXNwYXRjaGVyLmJyb2FkY2FzdCgic2V0TGF5ZXJzIix0aGlzLl9zZXJpYWxpemVMYXllcnModGhpcy5fb3JkZXIpKSx0aGlzLmxpZ2h0PW5ldyB3KHRoaXMuc3R5bGVzaGVldC5saWdodCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInN0eWxlLmxvYWQiKSl9fSxyLnByb3RvdHlwZS5fbG9hZFNwcml0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO3RoaXMuX3Nwcml0ZVJlcXVlc3Q9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpLGEsbyxzPXQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvPjE/IkAyeCI6IiIsbD10LmdldEpTT04oci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU3ByaXRlVVJMKGUscywiLmpzb24iKSx0LlJlc291cmNlVHlwZS5TcHJpdGVKU09OKSwoZnVuY3Rpb24odCxlKXtsPW51bGwsb3x8KG89dCxpPWUsdSgpKX0pKSxjPXQuZ2V0SW1hZ2Uoci50cmFuc2Zvcm1SZXF1ZXN0KHIubm9ybWFsaXplU3ByaXRlVVJMKGUscywiLnBuZyIpLHQuUmVzb3VyY2VUeXBlLlNwcml0ZUltYWdlKSwoZnVuY3Rpb24odCxlKXtjPW51bGwsb3x8KG89dCxhPWUsdSgpKX0pKTtmdW5jdGlvbiB1KCl7aWYobyluKG8pO2Vsc2UgaWYoaSYmYSl7dmFyIGU9dC5icm93c2VyLmdldEltYWdlRGF0YShhKSxyPXt9O2Zvcih2YXIgcyBpbiBpKXt2YXIgbD1pW3NdLGM9bC53aWR0aCx1PWwuaGVpZ2h0LGY9bC54LGg9bC55LHA9bC5zZGYsZD1sLnBpeGVsUmF0aW8sbT1sLnN0cmV0Y2hYLGc9bC5zdHJldGNoWSx2PWwuY29udGVudCx5PW5ldyB0LlJHQkFJbWFnZSh7d2lkdGg6YyxoZWlnaHQ6dX0pO3QuUkdCQUltYWdlLmNvcHkoZSx5LHt4OmYseTpofSx7eDowLHk6MH0se3dpZHRoOmMsaGVpZ2h0OnV9KSxyW3NdPXtkYXRhOnkscGl4ZWxSYXRpbzpkLHNkZjpwLHN0cmV0Y2hYOm0sc3RyZXRjaFk6Zyxjb250ZW50OnZ9fW4obnVsbCxyKX19cmV0dXJue2NhbmNlbDpmdW5jdGlvbigpe2wmJihsLmNhbmNlbCgpLGw9bnVsbCksYyYmKGMuY2FuY2VsKCksYz1udWxsKX19fShlLHRoaXMubWFwLl9yZXF1ZXN0TWFuYWdlciwoZnVuY3Rpb24oZSxuKXtpZihyLl9zcHJpdGVSZXF1ZXN0PW51bGwsZSlyLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk7ZWxzZSBpZihuKWZvcih2YXIgaSBpbiBuKXIuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGksbltpXSk7ci5pbWFnZU1hbmFnZXIuc2V0TG9hZGVkKCEwKSxyLl9hdmFpbGFibGVJbWFnZXM9ci5pbWFnZU1hbmFnZXIubGlzdEltYWdlcygpLHIuZGlzcGF0Y2hlci5icm9hZGNhc3QoInNldEltYWdlcyIsci5fYXZhaWxhYmxlSW1hZ2VzKSxyLmZpcmUobmV3IHQuRXZlbnQoImRhdGEiLHtkYXRhVHlwZToic3R5bGUifSkpfSkpfSxyLnByb3RvdHlwZS5fdmFsaWRhdGVMYXllcj1mdW5jdGlvbihlKXt2YXIgcj10aGlzLnNvdXJjZUNhY2hlc1tlLnNvdXJjZV07aWYocil7dmFyIG49ZS5zb3VyY2VMYXllcjtpZihuKXt2YXIgaT1yLmdldFNvdXJjZSgpOygiZ2VvanNvbiI9PT1pLnR5cGV8fGkudmVjdG9yTGF5ZXJJZHMmJi0xPT09aS52ZWN0b3JMYXllcklkcy5pbmRleE9mKG4pKSYmdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdTb3VyY2UgbGF5ZXIgIicrbisnIiBkb2VzIG5vdCBleGlzdCBvbiBzb3VyY2UgIicraS5pZCsnIiBhcyBzcGVjaWZpZWQgYnkgc3R5bGUgbGF5ZXIgIicrZS5pZCsnIicpKSl9fX0sci5wcm90b3R5cGUubG9hZGVkPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2xvYWRlZClyZXR1cm4hMTtpZihPYmplY3Qua2V5cyh0aGlzLl91cGRhdGVkU291cmNlcykubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZighdGhpcy5zb3VyY2VDYWNoZXNbdF0ubG9hZGVkKCkpcmV0dXJuITE7cmV0dXJuISF0aGlzLmltYWdlTWFuYWdlci5pc0xvYWRlZCgpfSxyLnByb3RvdHlwZS5fc2VyaWFsaXplTGF5ZXJzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10O3I8bi5sZW5ndGg7cis9MSl7dmFyIGk9bltyXSxhPXRoaXMuX2xheWVyc1tpXTsiY3VzdG9tIiE9PWEudHlwZSYmZS5wdXNoKGEuc2VyaWFsaXplKCkpfXJldHVybiBlfSxyLnByb3RvdHlwZS5oYXNUcmFuc2l0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMubGlnaHQmJnRoaXMubGlnaHQuaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcylpZih0aGlzLnNvdXJjZUNhY2hlc1t0XS5oYXNUcmFuc2l0aW9uKCkpcmV0dXJuITA7Zm9yKHZhciBlIGluIHRoaXMuX2xheWVycylpZih0aGlzLl9sYXllcnNbZV0uaGFzVHJhbnNpdGlvbigpKXJldHVybiEwO3JldHVybiExfSxyLnByb3RvdHlwZS5fY2hlY2tMb2FkZWQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fbG9hZGVkKXRocm93IG5ldyBFcnJvcigiU3R5bGUgaXMgbm90IGRvbmUgbG9hZGluZyIpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbG9hZGVkKXt2YXIgcj10aGlzLl9jaGFuZ2VkO2lmKHRoaXMuX2NoYW5nZWQpe3ZhciBuPU9iamVjdC5rZXlzKHRoaXMuX3VwZGF0ZWRMYXllcnMpLGk9T2JqZWN0LmtleXModGhpcy5fcmVtb3ZlZExheWVycyk7Zm9yKHZhciBhIGluKG4ubGVuZ3RofHxpLmxlbmd0aCkmJnRoaXMuX3VwZGF0ZVdvcmtlckxheWVycyhuLGkpLHRoaXMuX3VwZGF0ZWRTb3VyY2VzKXt2YXIgbz10aGlzLl91cGRhdGVkU291cmNlc1thXTsicmVsb2FkIj09PW8/dGhpcy5fcmVsb2FkU291cmNlKGEpOiJjbGVhciI9PT1vJiZ0aGlzLl9jbGVhclNvdXJjZShhKX1mb3IodmFyIHMgaW4gdGhpcy5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzKCksdGhpcy5fdXBkYXRlZFBhaW50UHJvcHMpdGhpcy5fbGF5ZXJzW3NdLnVwZGF0ZVRyYW5zaXRpb25zKGUpO3RoaXMubGlnaHQudXBkYXRlVHJhbnNpdGlvbnMoZSksdGhpcy5fcmVzZXRVcGRhdGVzKCl9Zm9yKHZhciBsIGluIHRoaXMuc291cmNlQ2FjaGVzKXRoaXMuc291cmNlQ2FjaGVzW2xdLnVzZWQ9ITE7Zm9yKHZhciBjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD10aGlzLl9sYXllcnNbZl07aC5yZWNhbGN1bGF0ZShlLHRoaXMuX2F2YWlsYWJsZUltYWdlcyksIWguaXNIaWRkZW4oZS56b29tKSYmaC5zb3VyY2UmJih0aGlzLnNvdXJjZUNhY2hlc1toLnNvdXJjZV0udXNlZD0hMCl9dGhpcy5saWdodC5yZWNhbGN1bGF0ZShlKSx0aGlzLno9ZS56b29tLHImJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9fSxyLnByb3RvdHlwZS5fdXBkYXRlVGlsZXNGb3JDaGFuZ2VkSW1hZ2VzPWZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmtleXModGhpcy5fY2hhbmdlZEltYWdlcyk7aWYodC5sZW5ndGgpe2Zvcih2YXIgZSBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLnNvdXJjZUNhY2hlc1tlXS5yZWxvYWRUaWxlc0ZvckRlcGVuZGVuY2llcyhbImljb25zIiwicGF0dGVybnMiXSx0KTt0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fX0sci5wcm90b3R5cGUuX3VwZGF0ZVdvcmtlckxheWVycz1mdW5jdGlvbih0LGUpe3RoaXMuZGlzcGF0Y2hlci5icm9hZGNhc3QoInVwZGF0ZUxheWVycyIse2xheWVyczp0aGlzLl9zZXJpYWxpemVMYXllcnModCkscmVtb3ZlZElkczplfSl9LHIucHJvdG90eXBlLl9yZXNldFVwZGF0ZXM9ZnVuY3Rpb24oKXt0aGlzLl9jaGFuZ2VkPSExLHRoaXMuX3VwZGF0ZWRMYXllcnM9e30sdGhpcy5fcmVtb3ZlZExheWVycz17fSx0aGlzLl91cGRhdGVkU291cmNlcz17fSx0aGlzLl91cGRhdGVkUGFpbnRQcm9wcz17fSx0aGlzLl9jaGFuZ2VkSW1hZ2VzPXt9fSxyLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX2NoZWNrTG9hZGVkKCksamUodGhpcyx0LnZhbGlkYXRlU3R5bGUoZSkpKXJldHVybiExOyhlPXQuY2xvbmUkMShlKSkubGF5ZXJzPWp0KGUubGF5ZXJzKTt2YXIgbj1adCh0aGlzLnNlcmlhbGl6ZSgpLGUpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVmUpfSkpO2lmKDA9PT1uLmxlbmd0aClyZXR1cm4hMTt2YXIgaT1uLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuISh0LmNvbW1hbmQgaW4gVWUpfSkpO2lmKGkubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCJVbmltcGxlbWVudGVkOiAiK2kubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb21tYW5kfSkpLmpvaW4oIiwgIikrIi4iKTtyZXR1cm4gbi5mb3JFYWNoKChmdW5jdGlvbih0KXsic2V0VHJhbnNpdGlvbiIhPT10LmNvbW1hbmQmJnJbdC5jb21tYW5kXS5hcHBseShyLHQuYXJncyl9KSksdGhpcy5zdHlsZXNoZWV0PWUsITB9LHIucHJvdG90eXBlLmFkZEltYWdlPWZ1bmN0aW9uKGUscil7aWYodGhpcy5nZXRJbWFnZShlKSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBbiBpbWFnZSB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLmFkZEltYWdlKGUsciksdGhpcy5fYXZhaWxhYmxlSW1hZ2VzPXRoaXMuaW1hZ2VNYW5hZ2VyLmxpc3RJbWFnZXMoKSx0aGlzLl9jaGFuZ2VkSW1hZ2VzW2VdPSEwLHRoaXMuX2NoYW5nZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkYXRhIix7ZGF0YVR5cGU6InN0eWxlIn0pKX0sci5wcm90b3R5cGUudXBkYXRlSW1hZ2U9ZnVuY3Rpb24odCxlKXt0aGlzLmltYWdlTWFuYWdlci51cGRhdGVJbWFnZSh0LGUpfSxyLnByb3RvdHlwZS5nZXRJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbWFnZU1hbmFnZXIuZ2V0SW1hZ2UodCl9LHIucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmdldEltYWdlKGUpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIk5vIGltYWdlIHdpdGggdGhpcyBuYW1lIGV4aXN0cy4iKSkpO3RoaXMuaW1hZ2VNYW5hZ2VyLnJlbW92ZUltYWdlKGUpLHRoaXMuX2F2YWlsYWJsZUltYWdlcz10aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCksdGhpcy5fY2hhbmdlZEltYWdlc1tlXT0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse2RhdGFUeXBlOiJzdHlsZSJ9KSl9LHIucHJvdG90eXBlLmxpc3RJbWFnZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLmltYWdlTWFuYWdlci5saXN0SW1hZ2VzKCl9LHIucHJvdG90eXBlLmFkZFNvdXJjZT1mdW5jdGlvbihlLHIsbil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDAhPT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIGFscmVhZHkgYSBzb3VyY2Ugd2l0aCB0aGlzIElEIik7aWYoIXIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSB0eXBlIHByb3BlcnR5IG11c3QgYmUgZGVmaW5lZCwgYnV0IHRoZSBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyB3ZXJlIGdpdmVuOiAiK09iamVjdC5rZXlzKHIpLmpvaW4oIiwgIikrIi4iKTtpZighKFsidmVjdG9yIiwicmFzdGVyIiwiZ2VvanNvbiIsInZpZGVvIiwiaW1hZ2UiXS5pbmRleE9mKHIudHlwZSk+PTApfHwhdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLnNvdXJjZSwic291cmNlcy4iK2UscixudWxsLG4pKXt0aGlzLm1hcCYmdGhpcy5tYXAuX2NvbGxlY3RSZXNvdXJjZVRpbWluZyYmKHIuY29sbGVjdFJlc291cmNlVGltaW5nPSEwKTt2YXIgYT10aGlzLnNvdXJjZUNhY2hlc1tlXT1uZXcgQ3QoZSxyLHRoaXMuZGlzcGF0Y2hlcik7YS5zdHlsZT10aGlzLGEuc2V0RXZlbnRlZFBhcmVudCh0aGlzLChmdW5jdGlvbigpe3JldHVybntpc1NvdXJjZUxvYWRlZDppLmxvYWRlZCgpLHNvdXJjZTphLnNlcmlhbGl6ZSgpLHNvdXJjZUlkOmV9fSkpLGEub25BZGQodGhpcy5tYXApLHRoaXMuX2NoYW5nZWQ9ITB9fSxyLnByb3RvdHlwZS5yZW1vdmVTb3VyY2U9ZnVuY3Rpb24oZSl7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx2b2lkIDA9PT10aGlzLnNvdXJjZUNhY2hlc1tlXSl0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIHRoaXMgSUQiKTtmb3IodmFyIHIgaW4gdGhpcy5fbGF5ZXJzKWlmKHRoaXMuX2xheWVyc1tyXS5zb3VyY2U9PT1lKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoJ1NvdXJjZSAiJytlKyciIGNhbm5vdCBiZSByZW1vdmVkIHdoaWxlIGxheWVyICInK3IrJyIgaXMgdXNpbmcgaXQuJykpKTt2YXIgbj10aGlzLnNvdXJjZUNhY2hlc1tlXTtkZWxldGUgdGhpcy5zb3VyY2VDYWNoZXNbZV0sZGVsZXRlIHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2VdLG4uZmlyZShuZXcgdC5FdmVudCgiZGF0YSIse3NvdXJjZURhdGFUeXBlOiJtZXRhZGF0YSIsZGF0YVR5cGU6InNvdXJjZSIsc291cmNlSWQ6ZX0pKSxuLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksbi5jbGVhclRpbGVzKCksbi5vblJlbW92ZSYmbi5vblJlbW92ZSh0aGlzLm1hcCksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuc2V0R2VvSlNPTlNvdXJjZURhdGE9ZnVuY3Rpb24odCxlKXt0aGlzLl9jaGVja0xvYWRlZCgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLmdldFNvdXJjZSgpLnNldERhdGEoZSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuZ2V0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnNvdXJjZUNhY2hlc1t0XSYmdGhpcy5zb3VyY2VDYWNoZXNbdF0uZ2V0U291cmNlKCl9LHIucHJvdG90eXBlLmFkZExheWVyPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT1lLmlkO2lmKHRoaXMuZ2V0TGF5ZXIoaSkpdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK2krJyIgYWxyZWFkeSBleGlzdHMgb24gdGhpcyBtYXAnKSkpO2Vsc2V7dmFyIGE7aWYoImN1c3RvbSI9PT1lLnR5cGUpe2lmKGplKHRoaXMsdC52YWxpZGF0ZUN1c3RvbVN0eWxlTGF5ZXIoZSkpKXJldHVybjthPXQuY3JlYXRlU3R5bGVMYXllcihlKX1lbHNle2lmKCJvYmplY3QiPT10eXBlb2YgZS5zb3VyY2UmJih0aGlzLmFkZFNvdXJjZShpLGUuc291cmNlKSxlPXQuY2xvbmUkMShlKSxlPXQuZXh0ZW5kKGUse3NvdXJjZTppfSkpLHRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5sYXllciwibGF5ZXJzLiIraSxlLHthcnJheUluZGV4Oi0xfSxuKSlyZXR1cm47YT10LmNyZWF0ZVN0eWxlTGF5ZXIoZSksdGhpcy5fdmFsaWRhdGVMYXllcihhKSxhLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7bGF5ZXI6e2lkOml9fSksdGhpcy5fc2VyaWFsaXplZExheWVyc1thLmlkXT1hLnNlcmlhbGl6ZSgpfXZhciBvPXI/dGhpcy5fb3JkZXIuaW5kZXhPZihyKTp0aGlzLl9vcmRlci5sZW5ndGg7aWYociYmLTE9PT1vKXRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcignTGF5ZXIgd2l0aCBpZCAiJytyKyciIGRvZXMgbm90IGV4aXN0IG9uIHRoaXMgbWFwLicpKSk7ZWxzZXtpZih0aGlzLl9vcmRlci5zcGxpY2UobywwLGkpLHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tpXT1hLHRoaXMuX3JlbW92ZWRMYXllcnNbaV0mJmEuc291cmNlJiYiY3VzdG9tIiE9PWEudHlwZSl7dmFyIHM9dGhpcy5fcmVtb3ZlZExheWVyc1tpXTtkZWxldGUgdGhpcy5fcmVtb3ZlZExheWVyc1tpXSxzLnR5cGUhPT1hLnR5cGU/dGhpcy5fdXBkYXRlZFNvdXJjZXNbYS5zb3VyY2VdPSJjbGVhciI6KHRoaXMuX3VwZGF0ZWRTb3VyY2VzW2Euc291cmNlXT0icmVsb2FkIix0aGlzLnNvdXJjZUNhY2hlc1thLnNvdXJjZV0ucGF1c2UoKSl9dGhpcy5fdXBkYXRlTGF5ZXIoYSksYS5vbkFkZCYmYS5vbkFkZCh0aGlzLm1hcCl9fX0sci5wcm90b3R5cGUubW92ZUxheWVyPWZ1bmN0aW9uKGUscil7aWYodGhpcy5fY2hlY2tMb2FkZWQoKSx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX2xheWVyc1tlXSl7aWYoZSE9PXIpe3ZhciBuPXRoaXMuX29yZGVyLmluZGV4T2YoZSk7dGhpcy5fb3JkZXIuc3BsaWNlKG4sMSk7dmFyIGk9cj90aGlzLl9vcmRlci5pbmRleE9mKHIpOnRoaXMuX29yZGVyLmxlbmd0aDtyJiYtMT09PWk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCdMYXllciB3aXRoIGlkICInK3IrJyIgZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBtYXAuJykpKToodGhpcy5fb3JkZXIuc3BsaWNlKGksMCxlKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCl9fWVsc2UgdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBtb3ZlZC4iKSkpfSxyLnByb3RvdHlwZS5yZW1vdmVMYXllcj1mdW5jdGlvbihlKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciByPXRoaXMuX2xheWVyc1tlXTtpZihyKXtyLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dmFyIG49dGhpcy5fb3JkZXIuaW5kZXhPZihlKTt0aGlzLl9vcmRlci5zcGxpY2UobiwxKSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMCx0aGlzLl9jaGFuZ2VkPSEwLHRoaXMuX3JlbW92ZWRMYXllcnNbZV09cixkZWxldGUgdGhpcy5fbGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl9zZXJpYWxpemVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkTGF5ZXJzW2VdLGRlbGV0ZSB0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXSxyLm9uUmVtb3ZlJiZyLm9uUmVtb3ZlKHRoaXMubWFwKX1lbHNlIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGxheWVyICciK2UrIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG1hcCdzIHN0eWxlIGFuZCBjYW5ub3QgYmUgcmVtb3ZlZC4iKSkpfSxyLnByb3RvdHlwZS5nZXRMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbGF5ZXJzW3RdfSxyLnByb3RvdHlwZS5oYXNMYXllcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbiB0aGlzLl9sYXllcnN9LHIucHJvdG90eXBlLnNldExheWVyWm9vbVJhbmdlPWZ1bmN0aW9uKGUscixuKXt0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBpPXRoaXMuZ2V0TGF5ZXIoZSk7aT9pLm1pbnpvb209PT1yJiZpLm1heHpvb209PT1ufHwobnVsbCE9ciYmKGkubWluem9vbT1yKSxudWxsIT1uJiYoaS5tYXh6b29tPW4pLHRoaXMuX3VwZGF0ZUxheWVyKGkpKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGhhdmUgem9vbSBleHRlbnQuIikpKX0sci5wcm90b3R5cGUuc2V0RmlsdGVyPWZ1bmN0aW9uKGUscixuKXt2b2lkIDA9PT1uJiYobj17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgaT10aGlzLmdldExheWVyKGUpO2lmKGkpe2lmKCF0LmRlZXBFcXVhbChpLmZpbHRlcixyKSlyZXR1cm4gbnVsbD09cj8oaS5maWx0ZXI9dm9pZCAwLHZvaWQgdGhpcy5fdXBkYXRlTGF5ZXIoaSkpOnZvaWQodGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwibGF5ZXJzLiIraS5pZCsiLmZpbHRlciIscixudWxsLG4pfHwoaS5maWx0ZXI9dC5jbG9uZSQxKHIpLHRoaXMuX3VwZGF0ZUxheWVyKGkpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBsYXllciAnIitlKyInIGRvZXMgbm90IGV4aXN0IGluIHRoZSBtYXAncyBzdHlsZSBhbmQgY2Fubm90IGJlIGZpbHRlcmVkLiIpKSl9LHIucHJvdG90eXBlLmdldEZpbHRlcj1mdW5jdGlvbihlKXtyZXR1cm4gdC5jbG9uZSQxKHRoaXMuZ2V0TGF5ZXIoZSkuZmlsdGVyKX0sci5wcm90b3R5cGUuc2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24oZSxyLG4saSl7dm9pZCAwPT09aSYmKGk9e30pLHRoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIGE9dGhpcy5nZXRMYXllcihlKTthP3QuZGVlcEVxdWFsKGEuZ2V0TGF5b3V0UHJvcGVydHkociksbil8fChhLnNldExheW91dFByb3BlcnR5KHIsbixpKSx0aGlzLl91cGRhdGVMYXllcihhKSk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmdldExheWVyKGUpO2lmKG4pcmV0dXJuIG4uZ2V0TGF5b3V0UHJvcGVydHkocik7dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbixpKXt2b2lkIDA9PT1pJiYoaT17fSksdGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgYT10aGlzLmdldExheWVyKGUpO2E/dC5kZWVwRXF1YWwoYS5nZXRQYWludFByb3BlcnR5KHIpLG4pfHwoYS5zZXRQYWludFByb3BlcnR5KHIsbixpKSYmdGhpcy5fdXBkYXRlTGF5ZXIoYSksdGhpcy5fY2hhbmdlZD0hMCx0aGlzLl91cGRhdGVkUGFpbnRQcm9wc1tlXT0hMCk6dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrZSsiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBzdHlsZWQuIikpKX0sci5wcm90b3R5cGUuZ2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldExheWVyKHQpLmdldFBhaW50UHJvcGVydHkoZSl9LHIucHJvdG90eXBlLnNldEZlYXR1cmVTdGF0ZT1mdW5jdGlvbihlLHIpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIG49ZS5zb3VyY2UsaT1lLnNvdXJjZUxheWVyLGE9dGhpcy5zb3VyY2VDYWNoZXNbbl07aWYodm9pZCAwIT09YSl7dmFyIG89YS5nZXRTb3VyY2UoKS50eXBlOyJnZW9qc29uIj09PW8mJmk/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJHZW9KU09OIHNvdXJjZXMgY2Fubm90IGhhdmUgYSBzb3VyY2VMYXllciBwYXJhbWV0ZXIuIikpKToidmVjdG9yIiE9PW98fGk/KHZvaWQgMD09PWUuaWQmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuIikpKSxhLnNldEZlYXR1cmVTdGF0ZShpLGUuaWQscikpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUucmVtb3ZlRmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUscil7dGhpcy5fY2hlY2tMb2FkZWQoKTt2YXIgbj1lLnNvdXJjZSxpPXRoaXMuc291cmNlQ2FjaGVzW25dO2lmKHZvaWQgMCE9PWkpe3ZhciBhPWkuZ2V0U291cmNlKCkudHlwZSxvPSJ2ZWN0b3IiPT09YT9lLnNvdXJjZUxheWVyOnZvaWQgMDsidmVjdG9yIiE9PWF8fG8/ciYmInN0cmluZyIhPXR5cGVvZiBlLmlkJiYibnVtYmVyIiE9dHlwZW9mIGUuaWQ/dGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJBIGZlYXR1cmUgaWQgaXMgcmVxdXJlZCB0byByZW1vdmUgaXRzIHNwZWNpZmljIHN0YXRlIHByb3BlcnR5LiIpKSk6aS5yZW1vdmVGZWF0dXJlU3RhdGUobyxlLmlkLHIpOnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrbisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuZ2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrTG9hZGVkKCk7dmFyIHI9ZS5zb3VyY2Usbj1lLnNvdXJjZUxheWVyLGk9dGhpcy5zb3VyY2VDYWNoZXNbcl07aWYodm9pZCAwIT09aSl7aWYoInZlY3RvciIhPT1pLmdldFNvdXJjZSgpLnR5cGV8fG4pcmV0dXJuIHZvaWQgMD09PWUuaWQmJnRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIGZlYXR1cmUgaWQgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWQuIikpKSxpLmdldEZlYXR1cmVTdGF0ZShuLGUuaWQpO3RoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHNvdXJjZUxheWVyIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkIGZvciB2ZWN0b3Igc291cmNlIHR5cGVzLiIpKSl9ZWxzZSB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZSBzb3VyY2UgJyIrcisiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUuIikpKX0sci5wcm90b3R5cGUuZ2V0VHJhbnNpdGlvbj1mdW5jdGlvbigpe3JldHVybiB0LmV4dGVuZCh7ZHVyYXRpb246MzAwLGRlbGF5OjB9LHRoaXMuc3R5bGVzaGVldCYmdGhpcy5zdHlsZXNoZWV0LnRyYW5zaXRpb24pfSxyLnByb3RvdHlwZS5zZXJpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdC5maWx0ZXJPYmplY3Qoe3ZlcnNpb246dGhpcy5zdHlsZXNoZWV0LnZlcnNpb24sbmFtZTp0aGlzLnN0eWxlc2hlZXQubmFtZSxtZXRhZGF0YTp0aGlzLnN0eWxlc2hlZXQubWV0YWRhdGEsbGlnaHQ6dGhpcy5zdHlsZXNoZWV0LmxpZ2h0LGNlbnRlcjp0aGlzLnN0eWxlc2hlZXQuY2VudGVyLHpvb206dGhpcy5zdHlsZXNoZWV0Lnpvb20sYmVhcmluZzp0aGlzLnN0eWxlc2hlZXQuYmVhcmluZyxwaXRjaDp0aGlzLnN0eWxlc2hlZXQucGl0Y2gsc3ByaXRlOnRoaXMuc3R5bGVzaGVldC5zcHJpdGUsZ2x5cGhzOnRoaXMuc3R5bGVzaGVldC5nbHlwaHMsdHJhbnNpdGlvbjp0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbixzb3VyY2VzOnQubWFwT2JqZWN0KHRoaXMuc291cmNlQ2FjaGVzLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zZXJpYWxpemUoKX0pKSxsYXllcnM6dGhpcy5fc2VyaWFsaXplTGF5ZXJzKHRoaXMuX29yZGVyKX0sKGZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10fSkpfSxyLnByb3RvdHlwZS5fdXBkYXRlTGF5ZXI9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlZExheWVyc1t0LmlkXT0hMCx0LnNvdXJjZSYmIXRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXSYmInJhc3RlciIhPT10aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0uZ2V0U291cmNlKCkudHlwZSYmKHRoaXMuX3VwZGF0ZWRTb3VyY2VzW3Quc291cmNlXT0icmVsb2FkIix0aGlzLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0ucGF1c2UoKSksdGhpcy5fY2hhbmdlZD0hMH0sci5wcm90b3R5cGUuX2ZsYXR0ZW5BbmRTb3J0UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPWZ1bmN0aW9uKHQpe3JldHVybiJmaWxsLWV4dHJ1c2lvbiI9PT1lLl9sYXllcnNbdF0udHlwZX0sbj17fSxpPVtdLGE9dGhpcy5fb3JkZXIubGVuZ3RoLTE7YT49MDthLS0pe3ZhciBvPXRoaXMuX29yZGVyW2FdO2lmKHIobykpe25bb109YTtmb3IodmFyIHM9MCxsPXQ7czxsLmxlbmd0aDtzKz0xKXt2YXIgYz1sW3NdW29dO2lmKGMpZm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtpLnB1c2goaCl9fX19aS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLmludGVyc2VjdGlvblotdC5pbnRlcnNlY3Rpb25afSkpO2Zvcih2YXIgcD1bXSxkPXRoaXMuX29yZGVyLmxlbmd0aC0xO2Q+PTA7ZC0tKXt2YXIgbT10aGlzLl9vcmRlcltkXTtpZihyKG0pKWZvcih2YXIgZz1pLmxlbmd0aC0xO2c+PTA7Zy0tKXt2YXIgdj1pW2ddLmZlYXR1cmU7aWYoblt2LmxheWVyLmlkXTxkKWJyZWFrO3AucHVzaCh2KSxpLnBvcCgpfWVsc2UgZm9yKHZhciB5PTAseD10O3k8eC5sZW5ndGg7eSs9MSl7dmFyIGI9eFt5XVttXTtpZihiKWZvcih2YXIgXz0wLHc9YjtfPHcubGVuZ3RoO18rPTEpe3ZhciBUPXdbX107cC5wdXNoKFQuZmVhdHVyZSl9fX1yZXR1cm4gcH0sci5wcm90b3R5cGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzPWZ1bmN0aW9uKGUscixuKXtyJiZyLmZpbHRlciYmdGhpcy5fdmFsaWRhdGUodC52YWxpZGF0ZVN0eWxlLmZpbHRlciwicXVlcnlSZW5kZXJlZEZlYXR1cmVzLmZpbHRlciIsci5maWx0ZXIsbnVsbCxyKTt2YXIgaT17fTtpZihyJiZyLmxheWVycyl7aWYoIUFycmF5LmlzQXJyYXkoci5sYXllcnMpKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoInBhcmFtZXRlcnMubGF5ZXJzIG11c3QgYmUgYW4gQXJyYXkuIikpKSxbXTtmb3IodmFyIGE9MCxvPXIubGF5ZXJzO2E8by5sZW5ndGg7YSs9MSl7dmFyIHM9b1thXSxsPXRoaXMuX2xheWVyc1tzXTtpZighbClyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJUaGUgbGF5ZXIgJyIrcysiJyBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbWFwJ3Mgc3R5bGUgYW5kIGNhbm5vdCBiZSBxdWVyaWVkIGZvciBmZWF0dXJlcy4iKSkpLFtdO2lbbC5zb3VyY2VdPSEwfX12YXIgYz1bXTtmb3IodmFyIHUgaW4gci5hdmFpbGFibGVJbWFnZXM9dGhpcy5fYXZhaWxhYmxlSW1hZ2VzLHRoaXMuc291cmNlQ2FjaGVzKXIubGF5ZXJzJiYhaVt1XXx8Yy5wdXNoKEYodGhpcy5zb3VyY2VDYWNoZXNbdV0sdGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsZSxyLG4pKTtyZXR1cm4gdGhpcy5wbGFjZW1lbnQmJmMucHVzaChmdW5jdGlvbih0LGUscixuLGksYSxvKXtmb3IodmFyIHM9e30sbD1hLnF1ZXJ5UmVuZGVyZWRTeW1ib2xzKG4pLGM9W10sdT0wLGY9T2JqZWN0LmtleXMobCkubWFwKE51bWJlcik7dTxmLmxlbmd0aDt1Kz0xKXt2YXIgaD1mW3VdO2MucHVzaChvW2hdKX1jLnNvcnQoQik7Zm9yKHZhciBwPWZ1bmN0aW9uKCl7dmFyIHI9bVtkXSxuPXIuZmVhdHVyZUluZGV4Lmxvb2t1cFN5bWJvbEZlYXR1cmVzKGxbci5idWNrZXRJbnN0YW5jZUlkXSxlLHIuYnVja2V0SW5kZXgsci5zb3VyY2VMYXllckluZGV4LGkuZmlsdGVyLGkubGF5ZXJzLGkuYXZhaWxhYmxlSW1hZ2VzLHQpO2Zvcih2YXIgYSBpbiBuKXt2YXIgbz1zW2FdPXNbYV18fFtdLGM9blthXTtjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIG49ci5mZWF0dXJlU29ydE9yZGVyO2lmKG4pe3ZhciBpPW4uaW5kZXhPZih0LmZlYXR1cmVJbmRleCk7cmV0dXJuIG4uaW5kZXhPZihlLmZlYXR1cmVJbmRleCktaX1yZXR1cm4gZS5mZWF0dXJlSW5kZXgtdC5mZWF0dXJlSW5kZXh9KSk7Zm9yKHZhciB1PTAsZj1jO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XTtvLnB1c2goaCl9fX0sZD0wLG09YztkPG0ubGVuZ3RoO2QrPTEpcCgpO3ZhciBnPWZ1bmN0aW9uKGUpe3NbZV0uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIGk9bi5mZWF0dXJlLGE9dFtlXSxvPXJbYS5zb3VyY2VdLmdldEZlYXR1cmVTdGF0ZShpLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSxpLmlkKTtpLnNvdXJjZT1pLmxheWVyLnNvdXJjZSxpLmxheWVyWyJzb3VyY2UtbGF5ZXIiXSYmKGkuc291cmNlTGF5ZXI9aS5sYXllclsic291cmNlLWxheWVyIl0pLGkuc3RhdGU9b30pKX07Zm9yKHZhciB2IGluIHMpZyh2KTtyZXR1cm4gc30odGhpcy5fbGF5ZXJzLHRoaXMuX3NlcmlhbGl6ZWRMYXllcnMsdGhpcy5zb3VyY2VDYWNoZXMsZSxyLHRoaXMucGxhY2VtZW50LmNvbGxpc2lvbkluZGV4LHRoaXMucGxhY2VtZW50LnJldGFpbmVkUXVlcnlEYXRhKSksdGhpcy5fZmxhdHRlbkFuZFNvcnRSZW5kZXJlZEZlYXR1cmVzKGMpfSxyLnByb3RvdHlwZS5xdWVyeVNvdXJjZUZlYXR1cmVzPWZ1bmN0aW9uKGUscil7ciYmci5maWx0ZXImJnRoaXMuX3ZhbGlkYXRlKHQudmFsaWRhdGVTdHlsZS5maWx0ZXIsInF1ZXJ5U291cmNlRmVhdHVyZXMuZmlsdGVyIixyLmZpbHRlcixudWxsLHIpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2VdO3JldHVybiBuP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuZ2V0UmVuZGVyYWJsZUlkcygpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZ2V0VGlsZUJ5SUQoZSl9KSksbj1bXSxpPXt9LGE9MDthPHIubGVuZ3RoO2ErKyl7dmFyIG89clthXSxzPW8udGlsZUlELmNhbm9uaWNhbC5rZXk7aVtzXXx8KGlbc109ITAsby5xdWVyeVNvdXJjZUZlYXR1cmVzKG4sZSkpfXJldHVybiBufShuLHIpOltdfSxyLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gci5nZXRTb3VyY2VUeXBlKHQpP24obmV3IEVycm9yKCdBIHNvdXJjZSB0eXBlIGNhbGxlZCAiJyt0KyciIGFscmVhZHkgZXhpc3RzLicpKTooci5zZXRTb3VyY2VUeXBlKHQsZSksZS53b3JrZXJTb3VyY2VVUkw/dm9pZCB0aGlzLmRpc3BhdGNoZXIuYnJvYWRjYXN0KCJsb2FkV29ya2VyU291cmNlIix7bmFtZTp0LHVybDplLndvcmtlclNvdXJjZVVSTH0sbik6bihudWxsLG51bGwpKX0sci5wcm90b3R5cGUuZ2V0TGlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5saWdodC5nZXRMaWdodCgpfSxyLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPXt9KSx0aGlzLl9jaGVja0xvYWRlZCgpO3ZhciBuPXRoaXMubGlnaHQuZ2V0TGlnaHQoKSxpPSExO2Zvcih2YXIgYSBpbiBlKWlmKCF0LmRlZXBFcXVhbChlW2FdLG5bYV0pKXtpPSEwO2JyZWFrfWlmKGkpe3ZhciBvPXtub3c6dC5icm93c2VyLm5vdygpLHRyYW5zaXRpb246dC5leHRlbmQoe2R1cmF0aW9uOjMwMCxkZWxheTowfSx0aGlzLnN0eWxlc2hlZXQudHJhbnNpdGlvbil9O3RoaXMubGlnaHQuc2V0TGlnaHQoZSxyKSx0aGlzLmxpZ2h0LnVwZGF0ZVRyYW5zaXRpb25zKG8pfX0sci5wcm90b3R5cGUuX3ZhbGlkYXRlPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIHZvaWQgMD09PWEmJihhPXt9KSwoIWF8fCExIT09YS52YWxpZGF0ZSkmJmplKHRoaXMsZS5jYWxsKHQudmFsaWRhdGVTdHlsZSx0LmV4dGVuZCh7a2V5OnIsc3R5bGU6dGhpcy5zZXJpYWxpemUoKSx2YWx1ZTpuLHN0eWxlU3BlYzp0LnN0eWxlU3BlY30saSkpKX0sci5wcm90b3R5cGUuX3JlbW92ZT1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLl9yZXF1ZXN0JiYodGhpcy5fcmVxdWVzdC5jYW5jZWwoKSx0aGlzLl9yZXF1ZXN0PW51bGwpLHRoaXMuX3Nwcml0ZVJlcXVlc3QmJih0aGlzLl9zcHJpdGVSZXF1ZXN0LmNhbmNlbCgpLHRoaXMuX3Nwcml0ZVJlcXVlc3Q9bnVsbCksdC5ldmVudGVkLm9mZigicGx1Z2luU3RhdGVDaGFuZ2UiLHRoaXMuX3J0bFRleHRQbHVnaW5DYWxsYmFjayksdGhpcy5fbGF5ZXJzKXt0aGlzLl9sYXllcnNbZV0uc2V0RXZlbnRlZFBhcmVudChudWxsKX1mb3IodmFyIHIgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbcl0uY2xlYXJUaWxlcygpLHRoaXMuc291cmNlQ2FjaGVzW3JdLnNldEV2ZW50ZWRQYXJlbnQobnVsbCk7dGhpcy5pbWFnZU1hbmFnZXIuc2V0RXZlbnRlZFBhcmVudChudWxsKSx0aGlzLnNldEV2ZW50ZWRQYXJlbnQobnVsbCksdGhpcy5kaXNwYXRjaGVyLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5fY2xlYXJTb3VyY2U9ZnVuY3Rpb24odCl7dGhpcy5zb3VyY2VDYWNoZXNbdF0uY2xlYXJUaWxlcygpfSxyLnByb3RvdHlwZS5fcmVsb2FkU291cmNlPWZ1bmN0aW9uKHQpe3RoaXMuc291cmNlQ2FjaGVzW3RdLnJlc3VtZSgpLHRoaXMuc291cmNlQ2FjaGVzW3RdLnJlbG9hZCgpfSxyLnByb3RvdHlwZS5fdXBkYXRlU291cmNlcz1mdW5jdGlvbih0KXtmb3IodmFyIGUgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbZV0udXBkYXRlKHQpfSxyLnByb3RvdHlwZS5fZ2VuZXJhdGVDb2xsaXNpb25Cb3hlcz1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLnNvdXJjZUNhY2hlcyl0aGlzLl9yZWxvYWRTb3VyY2UodCl9LHIucHJvdG90eXBlLl91cGRhdGVQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxyLG4saSxhKXt2b2lkIDA9PT1hJiYoYT0hMSk7Zm9yKHZhciBvPSExLHM9ITEsbD17fSxjPTAsdT10aGlzLl9vcmRlcjtjPHUubGVuZ3RoO2MrPTEpe3ZhciBmPXVbY10saD10aGlzLl9sYXllcnNbZl07aWYoInN5bWJvbCI9PT1oLnR5cGUpe2lmKCFsW2guc291cmNlXSl7dmFyIHA9dGhpcy5zb3VyY2VDYWNoZXNbaC5zb3VyY2VdO2xbaC5zb3VyY2VdPXAuZ2V0UmVuZGVyYWJsZUlkcyghMCkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gcC5nZXRUaWxlQnlJRCh0KX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnRpbGVJRC5vdmVyc2NhbGVkWi10LnRpbGVJRC5vdmVyc2NhbGVkWnx8KHQudGlsZUlELmlzTGVzc1RoYW4oZS50aWxlSUQpPy0xOjEpfSkpfXZhciBkPXRoaXMuY3Jvc3NUaWxlU3ltYm9sSW5kZXguYWRkTGF5ZXIoaCxsW2guc291cmNlXSxlLmNlbnRlci5sbmcpO289b3x8ZH19aWYodGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleC5wcnVuZVVudXNlZExheWVycyh0aGlzLl9vcmRlciksKChhPWF8fHRoaXMuX2xheWVyT3JkZXJDaGFuZ2VkfHwwPT09bil8fCF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudHx8dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCkmJiF0aGlzLnBsYWNlbWVudC5zdGlsbFJlY2VudCh0LmJyb3dzZXIubm93KCksZS56b29tKSkmJih0aGlzLnBhdXNlYWJsZVBsYWNlbWVudD1uZXcgemUoZSx0aGlzLl9vcmRlcixhLHIsbixpLHRoaXMucGxhY2VtZW50KSx0aGlzLl9sYXllck9yZGVyQ2hhbmdlZD0hMSksdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuaXNEb25lKCk/dGhpcy5wbGFjZW1lbnQuc2V0U3RhbGUoKToodGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29udGludWVQbGFjZW1lbnQodGhpcy5fb3JkZXIsdGhpcy5fbGF5ZXJzLGwpLHRoaXMucGF1c2VhYmxlUGxhY2VtZW50LmlzRG9uZSgpJiYodGhpcy5wbGFjZW1lbnQ9dGhpcy5wYXVzZWFibGVQbGFjZW1lbnQuY29tbWl0KHQuYnJvd3Nlci5ub3coKSkscz0hMCksbyYmdGhpcy5wYXVzZWFibGVQbGFjZW1lbnQucGxhY2VtZW50LnNldFN0YWxlKCkpLHN8fG8pZm9yKHZhciBtPTAsZz10aGlzLl9vcmRlcjttPGcubGVuZ3RoO20rPTEpe3ZhciB2PWdbbV0seT10aGlzLl9sYXllcnNbdl07InN5bWJvbCI9PT15LnR5cGUmJnRoaXMucGxhY2VtZW50LnVwZGF0ZUxheWVyT3BhY2l0aWVzKHksbFt5LnNvdXJjZV0pfXJldHVybiF0aGlzLnBhdXNlYWJsZVBsYWNlbWVudC5pc0RvbmUoKXx8dGhpcy5wbGFjZW1lbnQuaGFzVHJhbnNpdGlvbnModC5icm93c2VyLm5vdygpKX0sci5wcm90b3R5cGUuX3JlbGVhc2VTeW1ib2xGYWRlVGlsZXM9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5zb3VyY2VDYWNoZXMpdGhpcy5zb3VyY2VDYWNoZXNbdF0ucmVsZWFzZVN5bWJvbEZhZGVUaWxlcygpfSxyLnByb3RvdHlwZS5nZXRJbWFnZXM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuaW1hZ2VNYW5hZ2VyLmdldEltYWdlcyhlLmljb25zLHIpLHRoaXMuX3VwZGF0ZVRpbGVzRm9yQ2hhbmdlZEltYWdlcygpO3ZhciBuPXRoaXMuc291cmNlQ2FjaGVzW2Uuc291cmNlXTtuJiZuLnNldERlcGVuZGVuY2llcyhlLnRpbGVJRC5rZXksZS50eXBlLGUuaWNvbnMpfSxyLnByb3RvdHlwZS5nZXRHbHlwaHM9ZnVuY3Rpb24odCxlLHIpe3RoaXMuZ2x5cGhNYW5hZ2VyLmdldEdseXBocyhlLnN0YWNrcyxyKX0sci5wcm90b3R5cGUuZ2V0UmVzb3VyY2U9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0Lm1ha2VSZXF1ZXN0KHIsbil9LHJ9KHQuRXZlbnRlZCk7cWUuZ2V0U291cmNlVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gRFt0XX0scWUuc2V0U291cmNlVHlwZT1mdW5jdGlvbih0LGUpe0RbdF09ZX0scWUucmVnaXN0ZXJGb3JQbHVnaW5TdGF0ZUNoYW5nZT10LnJlZ2lzdGVyRm9yUGx1Z2luU3RhdGVDaGFuZ2U7dmFyIEdlPXQuY3JlYXRlTGF5b3V0KFt7bmFtZToiYV9wb3MiLHR5cGU6IkludDE2Iixjb21wb25lbnRzOjJ9XSksWWU9eXIoIiNpZmRlZiBHTF9FU1xucHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4jZWxzZVxuI2lmICFkZWZpbmVkKGxvd3ApXG4jZGVmaW5lIGxvd3BcbiNlbmRpZlxuI2lmICFkZWZpbmVkKG1lZGl1bXApXG4jZGVmaW5lIG1lZGl1bXBcbiNlbmRpZlxuI2lmICFkZWZpbmVkKGhpZ2hwKVxuI2RlZmluZSBoaWdocFxuI2VuZGlmXG4jZW5kaWYiLCIjaWZkZWYgR0xfRVNcbnByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNlbHNlXG4jaWYgIWRlZmluZWQobG93cClcbiNkZWZpbmUgbG93cFxuI2VuZGlmXG4jaWYgIWRlZmluZWQobWVkaXVtcClcbiNkZWZpbmUgbWVkaXVtcFxuI2VuZGlmXG4jaWYgIWRlZmluZWQoaGlnaHApXG4jZGVmaW5lIGhpZ2hwXG4jZW5kaWZcbiNlbmRpZlxudmVjMiB1bnBhY2tfZmxvYXQoY29uc3QgZmxvYXQgcGFja2VkVmFsdWUpIHtpbnQgcGFja2VkSW50VmFsdWU9aW50KHBhY2tlZFZhbHVlKTtpbnQgdjA9cGFja2VkSW50VmFsdWUvMjU2O3JldHVybiB2ZWMyKHYwLHBhY2tlZEludFZhbHVlLXYwKjI1Nik7fXZlYzIgdW5wYWNrX29wYWNpdHkoY29uc3QgZmxvYXQgcGFja2VkT3BhY2l0eSkge2ludCBpbnRPcGFjaXR5PWludChwYWNrZWRPcGFjaXR5KS8yO3JldHVybiB2ZWMyKGZsb2F0KGludE9wYWNpdHkpLzEyNy4wLG1vZChwYWNrZWRPcGFjaXR5LDIuMCkpO312ZWM0IGRlY29kZV9jb2xvcihjb25zdCB2ZWMyIGVuY29kZWRDb2xvcikge3JldHVybiB2ZWM0KHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMF0pLzI1NS4wLHVucGFja19mbG9hdChlbmNvZGVkQ29sb3JbMV0pLzI1NS4wXG4pO31mbG9hdCB1bnBhY2tfbWl4X3ZlYzIoY29uc3QgdmVjMiBwYWNrZWRWYWx1ZSxjb25zdCBmbG9hdCB0KSB7cmV0dXJuIG1peChwYWNrZWRWYWx1ZVswXSxwYWNrZWRWYWx1ZVsxXSx0KTt9dmVjNCB1bnBhY2tfbWl4X2NvbG9yKGNvbnN0IHZlYzQgcGFja2VkQ29sb3JzLGNvbnN0IGZsb2F0IHQpIHt2ZWM0IG1pbkNvbG9yPWRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1swXSxwYWNrZWRDb2xvcnNbMV0pKTt2ZWM0IG1heENvbG9yPWRlY29kZV9jb2xvcih2ZWMyKHBhY2tlZENvbG9yc1syXSxwYWNrZWRDb2xvcnNbM10pKTtyZXR1cm4gbWl4KG1pbkNvbG9yLG1heENvbG9yLHQpO312ZWMyIGdldF9wYXR0ZXJuX3Bvcyhjb25zdCB2ZWMyIHBpeGVsX2Nvb3JkX3VwcGVyLGNvbnN0IHZlYzIgcGl4ZWxfY29vcmRfbG93ZXIsY29uc3QgdmVjMiBwYXR0ZXJuX3NpemUsY29uc3QgZmxvYXQgdGlsZV91bml0c190b19waXhlbHMsY29uc3QgdmVjMiBwb3MpIHt2ZWMyIG9mZnNldD1tb2QobW9kKG1vZChwaXhlbF9jb29yZF91cHBlcixwYXR0ZXJuX3NpemUpKjI1Ni4wLHBhdHRlcm5fc2l6ZSkqMjU2LjArcGl4ZWxfY29vcmRfbG93ZXIscGF0dGVybl9zaXplKTtyZXR1cm4gKHRpbGVfdW5pdHNfdG9fcGl4ZWxzKnBvcytvZmZzZXQpL3BhdHRlcm5fc2l6ZTt9IiksV2U9eXIoInVuaWZvcm0gdmVjNCB1X2NvbG9yO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3ZvaWQgbWFpbigpIHtnbF9GcmFnQ29sb3I9dV9jb2xvcip1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLFhlPXlyKCJ1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX3RsX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9icl9hO3VuaWZvcm0gdmVjMiB1X3BhdHRlcm5fdGxfYjt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuX2JyX2I7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfbWl4O3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zX2E7dmFyeWluZyB2ZWMyIHZfcG9zX2I7dm9pZCBtYWluKCkge3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peCh1X3BhdHRlcm5fdGxfYS91X3RleHNpemUsdV9wYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHVfcGF0dGVybl90bF9iL3VfdGV4c2l6ZSx1X3BhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9taXgpKnVfb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2E7dW5pZm9ybSB2ZWMyIHVfcGF0dGVybl9zaXplX2I7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX2E7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX2I7dW5pZm9ybSBmbG9hdCB1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3NfYT1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHVfc2NhbGVfYSp1X3BhdHRlcm5fc2l6ZV9hLHVfdGlsZV91bml0c190b19waXhlbHMsYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix1X3NjYWxlX2IqdV9wYXR0ZXJuX3NpemVfYix1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzLGFfcG9zKTt9IiksWmU9eXIoInZhcnlpbmcgdmVjMyB2X2RhdGE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCByYWRpdXNcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IHN0cm9rZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHN0cm9rZV9vcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudmVjMiBleHRydWRlPXZfZGF0YS54eTtmbG9hdCBleHRydWRlX2xlbmd0aD1sZW5ndGgoZXh0cnVkZSk7bG93cCBmbG9hdCBhbnRpYWxpYXNibHVyPXZfZGF0YS56O2Zsb2F0IGFudGlhbGlhc2VkX2JsdXI9LW1heChibHVyLGFudGlhbGlhc2JsdXIpO2Zsb2F0IG9wYWNpdHlfdD1zbW9vdGhzdGVwKDAuMCxhbnRpYWxpYXNlZF9ibHVyLGV4dHJ1ZGVfbGVuZ3RoLTEuMCk7ZmxvYXQgY29sb3JfdD1zdHJva2Vfd2lkdGggPCAwLjAxID8gMC4wIDogc21vb3Roc3RlcChhbnRpYWxpYXNlZF9ibHVyLDAuMCxleHRydWRlX2xlbmd0aC1yYWRpdXMvKHJhZGl1cytzdHJva2Vfd2lkdGgpKTtnbF9GcmFnQ29sb3I9b3BhY2l0eV90Km1peChjb2xvcipvcGFjaXR5LHN0cm9rZV9jb2xvcipzdHJva2Vfb3BhY2l0eSxjb2xvcl90KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSBib29sIHVfc2NhbGVfd2l0aF9tYXA7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSBoaWdocCBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7YXR0cmlidXRlIHZlYzIgYV9wb3M7dmFyeWluZyB2ZWMzIHZfZGF0YTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgc3Ryb2tlX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgc3Ryb2tlX29wYWNpdHlcbnZvaWQgbWFpbih2b2lkKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgc3Ryb2tlX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHN0cm9rZV93aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBzdHJva2Vfb3BhY2l0eVxudmVjMiBleHRydWRlPXZlYzIobW9kKGFfcG9zLDIuMCkqMi4wLTEuMCk7dmVjMiBjaXJjbGVfY2VudGVyPWZsb29yKGFfcG9zKjAuNSk7aWYgKHVfcGl0Y2hfd2l0aF9tYXApIHt2ZWMyIGNvcm5lcl9wb3NpdGlvbj1jaXJjbGVfY2VudGVyO2lmICh1X3NjYWxlX3dpdGhfbWFwKSB7Y29ybmVyX3Bvc2l0aW9uKz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGU7fSBlbHNlIHt2ZWM0IHByb2plY3RlZF9jZW50ZXI9dV9tYXRyaXgqdmVjNChjaXJjbGVfY2VudGVyLDAsMSk7Y29ybmVyX3Bvc2l0aW9uKz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqKHByb2plY3RlZF9jZW50ZXIudy91X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UpO31nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGNvcm5lcl9wb3NpdGlvbiwwLDEpO30gZWxzZSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChjaXJjbGVfY2VudGVyLDAsMSk7aWYgKHVfc2NhbGVfd2l0aF9tYXApIHtnbF9Qb3NpdGlvbi54eSs9ZXh0cnVkZSoocmFkaXVzK3N0cm9rZV93aWR0aCkqdV9leHRydWRlX3NjYWxlKnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt9IGVsc2Uge2dsX1Bvc2l0aW9uLnh5Kz1leHRydWRlKihyYWRpdXMrc3Ryb2tlX3dpZHRoKSp1X2V4dHJ1ZGVfc2NhbGUqZ2xfUG9zaXRpb24udzt9fWxvd3AgZmxvYXQgYW50aWFsaWFzYmx1cj0xLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8vKHJhZGl1cytzdHJva2Vfd2lkdGgpO3ZfZGF0YT12ZWMzKGV4dHJ1ZGUueCxleHRydWRlLnksYW50aWFsaWFzYmx1cik7fSIpLEplPXlyKCJ2b2lkIG1haW4oKSB7Z2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTt9IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLEtlPXlyKCJ1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfaW50ZW5zaXR5O3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI2RlZmluZSBHQVVTU19DT0VGIDAuMzk4OTQyMjgwNDAxNDMyN1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgZmxvYXQgd2VpZ2h0XG5mbG9hdCBkPS0wLjUqMy4wKjMuMCpkb3Qodl9leHRydWRlLHZfZXh0cnVkZSk7ZmxvYXQgdmFsPXdlaWdodCp1X2ludGVuc2l0eSpHQVVTU19DT0VGKmV4cChkKTtnbF9GcmFnQ29sb3I9dmVjNCh2YWwsMS4wLDEuMCwxLjApO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGZsb2F0IHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTt1bmlmb3JtIGZsb2F0IHVfaW50ZW5zaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X2V4dHJ1ZGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IHdlaWdodFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHJhZGl1c1xuY29uc3QgaGlnaHAgZmxvYXQgWkVSTz0xLjAvMjU1LjAvMTYuMDtcbiNkZWZpbmUgR0FVU1NfQ09FRiAwLjM5ODk0MjI4MDQwMTQzMjdcbnZvaWQgbWFpbih2b2lkKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCBmbG9hdCB3ZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgcmFkaXVzXG52ZWMyIHVuc2NhbGVkX2V4dHJ1ZGU9dmVjMihtb2QoYV9wb3MsMi4wKSoyLjAtMS4wKTtmbG9hdCBTPXNxcnQoLTIuMCpsb2coWkVSTy93ZWlnaHQvdV9pbnRlbnNpdHkvR0FVU1NfQ09FRikpLzMuMDt2X2V4dHJ1ZGU9Uyp1bnNjYWxlZF9leHRydWRlO3ZlYzIgZXh0cnVkZT12X2V4dHJ1ZGUqcmFkaXVzKnVfZXh0cnVkZV9zY2FsZTt2ZWM0IHBvcz12ZWM0KGZsb29yKGFfcG9zKjAuNSkrZXh0cnVkZSwwLDEpO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnBvczt9IiksUWU9eXIoInVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dW5pZm9ybSBzYW1wbGVyMkQgdV9jb2xvcl9yYW1wO3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7ZmxvYXQgdD10ZXh0dXJlMkQodV9pbWFnZSx2X3Bvcykucjt2ZWM0IGNvbG9yPXRleHR1cmUyRCh1X2NvbG9yX3JhbXAsdmVjMih0LDAuNSkpO2dsX0ZyYWdDb2xvcj1jb2xvcip1X29wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgwLjApO1xuI2VuZGlmXG59IiwidW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3dvcmxkO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyp1X3dvcmxkLDAsMSk7dl9wb3MueD1hX3Bvcy54O3ZfcG9zLnk9MS4wLWFfcG9zLnk7fSIpLCRlPXlyKCJ2YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO3ZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO3ZvaWQgbWFpbigpIHtmbG9hdCBhbHBoYT0wLjU7Z2xfRnJhZ0NvbG9yPXZlYzQoMS4wLDAuMCwwLjAsMS4wKSphbHBoYTtpZiAodl9wbGFjZWQgPiAwLjUpIHtnbF9GcmFnQ29sb3I9dmVjNCgwLjAsMC4wLDEuMCwwLjUpKmFscGhhO31pZiAodl9ub3RVc2VkID4gMC41KSB7Z2xfRnJhZ0NvbG9yKj0uMTt9fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfYW5jaG9yX3BvczthdHRyaWJ1dGUgdmVjMiBhX2V4dHJ1ZGU7YXR0cmlidXRlIHZlYzIgYV9wbGFjZWQ7YXR0cmlidXRlIHZlYzIgYV9zaGlmdDt1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfZXh0cnVkZV9zY2FsZTt1bmlmb3JtIGZsb2F0IHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTt2YXJ5aW5nIGZsb2F0IHZfcGxhY2VkO3ZhcnlpbmcgZmxvYXQgdl9ub3RVc2VkO3ZvaWQgbWFpbigpIHt2ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9hbmNob3JfcG9zLDAsMSk7aGlnaHAgZmxvYXQgY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZT1wcm9qZWN0ZWRQb2ludC53O2hpZ2hwIGZsb2F0IGNvbGxpc2lvbl9wZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41Kih1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZSksMC4wLDQuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLjAsMS4wKTtnbF9Qb3NpdGlvbi54eSs9KGFfZXh0cnVkZSthX3NoaWZ0KSp1X2V4dHJ1ZGVfc2NhbGUqZ2xfUG9zaXRpb24udypjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87dl9wbGFjZWQ9YV9wbGFjZWQueDt2X25vdFVzZWQ9YV9wbGFjZWQueTt9IiksdHI9eXIoInZhcnlpbmcgZmxvYXQgdl9yYWRpdXM7dmFyeWluZyB2ZWMyIHZfZXh0cnVkZTt2YXJ5aW5nIGZsb2F0IHZfcGVyc3BlY3RpdmVfcmF0aW87dmFyeWluZyBmbG9hdCB2X2NvbGxpc2lvbjt2b2lkIG1haW4oKSB7ZmxvYXQgYWxwaGE9MC41Km1pbih2X3BlcnNwZWN0aXZlX3JhdGlvLDEuMCk7ZmxvYXQgc3Ryb2tlX3JhZGl1cz0wLjkqbWF4KHZfcGVyc3BlY3RpdmVfcmF0aW8sMS4wKTtmbG9hdCBkaXN0YW5jZV90b19jZW50ZXI9bGVuZ3RoKHZfZXh0cnVkZSk7ZmxvYXQgZGlzdGFuY2VfdG9fZWRnZT1hYnMoZGlzdGFuY2VfdG9fY2VudGVyLXZfcmFkaXVzKTtmbG9hdCBvcGFjaXR5X3Q9c21vb3Roc3RlcCgtc3Ryb2tlX3JhZGl1cywwLjAsLWRpc3RhbmNlX3RvX2VkZ2UpO3ZlYzQgY29sb3I9bWl4KHZlYzQoMC4wLDAuMCwxLjAsMC41KSx2ZWM0KDEuMCwwLjAsMC4wLDEuMCksdl9jb2xsaXNpb24pO2dsX0ZyYWdDb2xvcj1jb2xvciphbHBoYSpvcGFjaXR5X3Q7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX3JhZGl1czthdHRyaWJ1dGUgdmVjMiBhX2ZsYWdzO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9pbnZfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3ZpZXdwb3J0X3NpemU7dW5pZm9ybSBmbG9hdCB1X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2U7dmFyeWluZyBmbG9hdCB2X3JhZGl1czt2YXJ5aW5nIHZlYzIgdl9leHRydWRlO3ZhcnlpbmcgZmxvYXQgdl9wZXJzcGVjdGl2ZV9yYXRpbzt2YXJ5aW5nIGZsb2F0IHZfY29sbGlzaW9uO3ZlYzMgdG9UaWxlUG9zaXRpb24odmVjMiBzY3JlZW5Qb3MpIHt2ZWM0IHJheVN0YXJ0PXVfaW52X21hdHJpeCp2ZWM0KHNjcmVlblBvcywtMS4wLDEuMCk7dmVjNCByYXlFbmQgID11X2ludl9tYXRyaXgqdmVjNChzY3JlZW5Qb3MsIDEuMCwxLjApO3JheVN0YXJ0Lnh5ei89cmF5U3RhcnQudztyYXlFbmQueHl6ICAvPXJheUVuZC53O2hpZ2hwIGZsb2F0IHQ9KDAuMC1yYXlTdGFydC56KS8ocmF5RW5kLnotcmF5U3RhcnQueik7cmV0dXJuIG1peChyYXlTdGFydC54eXoscmF5RW5kLnh5eix0KTt9dm9pZCBtYWluKCkge3ZlYzIgcXVhZENlbnRlclBvcz1hX3BvcztmbG9hdCByYWRpdXM9YV9yYWRpdXM7ZmxvYXQgY29sbGlzaW9uPWFfZmxhZ3MueDtmbG9hdCB2ZXJ0ZXhJZHg9YV9mbGFncy55O3ZlYzIgcXVhZFZlcnRleE9mZnNldD12ZWMyKG1peCgtMS4wLDEuMCxmbG9hdCh2ZXJ0ZXhJZHggPj0yLjApKSxtaXgoLTEuMCwxLjAsZmxvYXQodmVydGV4SWR4ID49MS4wICYmIHZlcnRleElkeCA8PTIuMCkpKTt2ZWMyIHF1YWRWZXJ0ZXhFeHRlbnQ9cXVhZFZlcnRleE9mZnNldCpyYWRpdXM7dmVjMyB0aWxlUG9zPXRvVGlsZVBvc2l0aW9uKHF1YWRDZW50ZXJQb3MpO3ZlYzQgY2xpcFBvcz11X21hdHJpeCp2ZWM0KHRpbGVQb3MsMS4wKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPWNsaXBQb3MudztoaWdocCBmbG9hdCBjb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW89Y2xhbXAoMC41KzAuNSoodV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlL2NhbWVyYV90b19hbmNob3JfZGlzdGFuY2UpLDAuMCw0LjApO2Zsb2F0IHBhZGRpbmdfZmFjdG9yPTEuMjt2X3JhZGl1cz1yYWRpdXM7dl9leHRydWRlPXF1YWRWZXJ0ZXhFeHRlbnQqcGFkZGluZ19mYWN0b3I7dl9wZXJzcGVjdGl2ZV9yYXRpbz1jb2xsaXNpb25fcGVyc3BlY3RpdmVfcmF0aW87dl9jb2xsaXNpb249Y29sbGlzaW9uO2dsX1Bvc2l0aW9uPXZlYzQoY2xpcFBvcy54eXovY2xpcFBvcy53LDEuMCkrdmVjNChxdWFkVmVydGV4RXh0ZW50KnBhZGRpbmdfZmFjdG9yL3Vfdmlld3BvcnRfc2l6ZSoyLjAsMC4wLDAuMCk7fSIpLGVyPXlyKCJ1bmlmb3JtIGhpZ2hwIHZlYzQgdV9jb2xvcjt1bmlmb3JtIHNhbXBsZXIyRCB1X292ZXJsYXk7dmFyeWluZyB2ZWMyIHZfdXY7dm9pZCBtYWluKCkge3ZlYzQgb3ZlcmxheV9jb2xvcj10ZXh0dXJlMkQodV9vdmVybGF5LHZfdXYpO2dsX0ZyYWdDb2xvcj1taXgodV9jb2xvcixvdmVybGF5X2NvbG9yLG92ZXJsYXlfY29sb3IuYSk7fSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3ZhcnlpbmcgdmVjMiB2X3V2O3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIGZsb2F0IHVfb3ZlcmxheV9zY2FsZTt2b2lkIG1haW4oKSB7dl91dj1hX3Bvcy84MTkyLjA7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyp1X292ZXJsYXlfc2NhbGUsMCwxKTt9IikscnI9eXIoIiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuZ2xfRnJhZ0NvbG9yPWNvbG9yKm9wYWNpdHk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiYXR0cmlidXRlIHZlYzIgYV9wb3M7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7fSIpLG5yPXlyKCJ2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X3Bvcy1nbF9GcmFnQ29vcmQueHkpO2Zsb2F0IGFscGhhPTEuMC1zbW9vdGhzdGVwKDAuMCwxLjAsZGlzdCk7Z2xfRnJhZ0NvbG9yPW91dGxpbmVfY29sb3IqKGFscGhhKm9wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImF0dHJpYnV0ZSB2ZWMyIGFfcG9zO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgb3V0bGluZV9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5nbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3M9KGdsX1Bvc2l0aW9uLnh5L2dsX1Bvc2l0aW9uLncrMS4wKS8yLjAqdV93b3JsZDt9IiksaXI9eXIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG52ZWMyIHBhdHRlcm5fdGxfYT1wYXR0ZXJuX2Zyb20ueHk7dmVjMiBwYXR0ZXJuX2JyX2E9cGF0dGVybl9mcm9tLnp3O3ZlYzIgcGF0dGVybl90bF9iPXBhdHRlcm5fdG8ueHk7dmVjMiBwYXR0ZXJuX2JyX2I9cGF0dGVybl90by56dzt2ZWMyIGltYWdlY29vcmQ9bW9kKHZfcG9zX2EsMS4wKTt2ZWMyIHBvcz1taXgocGF0dGVybl90bF9hL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2EvdV90ZXhzaXplLGltYWdlY29vcmQpO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlLHBvcyk7dmVjMiBpbWFnZWNvb3JkX2I9bW9kKHZfcG9zX2IsMS4wKTt2ZWMyIHBvczI9bWl4KHBhdHRlcm5fdGxfYi91X3RleHNpemUscGF0dGVybl9icl9iL3VfdGV4c2l6ZSxpbWFnZWNvb3JkX2IpO3ZlYzQgY29sb3IyPXRleHR1cmUyRCh1X2ltYWdlLHBvczIpO2Zsb2F0IGRpc3Q9bGVuZ3RoKHZfcG9zLWdsX0ZyYWdDb29yZC54eSk7ZmxvYXQgYWxwaGE9MS4wLXNtb290aHN0ZXAoMC4wLDEuMCxkaXN0KTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKSphbHBoYSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV93b3JsZDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIHZlYzMgdV9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzIgdl9wb3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVSYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bzt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxhX3Bvcyk7dl9wb3NfYj1nZXRfcGF0dGVybl9wb3ModV9waXhlbF9jb29yZF91cHBlcix1X3BpeGVsX2Nvb3JkX2xvd2VyLHRvU2NhbGUqZGlzcGxheV9zaXplX2IsdGlsZVJhdGlvLGFfcG9zKTt2X3Bvcz0oZ2xfUG9zaXRpb24ueHkvZ2xfUG9zaXRpb24udysxLjApLzIuMCp1X3dvcmxkO30iKSxhcj15cigidW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIHZlYzQgcGF0dGVybl90b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7dmVjMiBpbWFnZWNvb3JkPW1vZCh2X3Bvc19hLDEuMCk7dmVjMiBwb3M9bWl4KHBhdHRlcm5fdGxfYS91X3RleHNpemUscGF0dGVybl9icl9hL3VfdGV4c2l6ZSxpbWFnZWNvb3JkKTt2ZWM0IGNvbG9yMT10ZXh0dXJlMkQodV9pbWFnZSxwb3MpO3ZlYzIgaW1hZ2Vjb29yZF9iPW1vZCh2X3Bvc19iLDEuMCk7dmVjMiBwb3MyPW1peChwYXR0ZXJuX3RsX2IvdV90ZXhzaXplLHBhdHRlcm5fYnJfYi91X3RleHNpemUsaW1hZ2Vjb29yZF9iKTt2ZWM0IGNvbG9yMj10ZXh0dXJlMkQodV9pbWFnZSxwb3MyKTtnbF9GcmFnQ29sb3I9bWl4KGNvbG9yMSxjb2xvcjIsdV9mYWRlKSpvcGFjaXR5O1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF91cHBlcjt1bmlmb3JtIHZlYzIgdV9waXhlbF9jb29yZF9sb3dlcjt1bmlmb3JtIHZlYzMgdV9zY2FsZTthdHRyaWJ1dGUgdmVjMiBhX3Bvczt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVpvb21SYXRpbz11X3NjYWxlLng7ZmxvYXQgZnJvbVNjYWxlPXVfc2NhbGUueTtmbG9hdCB0b1NjYWxlPXVfc2NhbGUuejt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVab29tUmF0aW8sYV9wb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVab29tUmF0aW8sYV9wb3MpO30iKSxvcj15cigidmFyeWluZyB2ZWM0IHZfY29sb3I7dm9pZCBtYWluKCkge2dsX0ZyYWdDb2xvcj12X2NvbG9yO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzMgdV9saWdodGNvbG9yO3VuaWZvcm0gbG93cCB2ZWMzIHVfbGlnaHRwb3M7dW5pZm9ybSBsb3dwIGZsb2F0IHVfbGlnaHRpbnRlbnNpdHk7dW5pZm9ybSBmbG9hdCB1X3ZlcnRpY2FsX2dyYWRpZW50O3VuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7YXR0cmlidXRlIHZlYzIgYV9wb3M7YXR0cmlidXRlIHZlYzQgYV9ub3JtYWxfZWQ7dmFyeWluZyB2ZWM0IHZfY29sb3I7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxudmVjMyBub3JtYWw9YV9ub3JtYWxfZWQueHl6O2Jhc2U9bWF4KDAuMCxiYXNlKTtoZWlnaHQ9bWF4KDAuMCxoZWlnaHQpO2Zsb2F0IHQ9bW9kKG5vcm1hbC54LDIuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3Bvcyx0ID4gMC4wID8gaGVpZ2h0IDogYmFzZSwxKTtmbG9hdCBjb2xvcnZhbHVlPWNvbG9yLnIqMC4yMTI2K2NvbG9yLmcqMC43MTUyK2NvbG9yLmIqMC4wNzIyO3ZfY29sb3I9dmVjNCgwLjAsMC4wLDAuMCwxLjApO3ZlYzQgYW1iaWVudGxpZ2h0PXZlYzQoMC4wMywwLjAzLDAuMDMsMS4wKTtjb2xvcis9YW1iaWVudGxpZ2h0O2Zsb2F0IGRpcmVjdGlvbmFsPWNsYW1wKGRvdChub3JtYWwvMTYzODQuMCx1X2xpZ2h0cG9zKSwwLjAsMS4wKTtkaXJlY3Rpb25hbD1taXgoKDEuMC11X2xpZ2h0aW50ZW5zaXR5KSxtYXgoKDEuMC1jb2xvcnZhbHVlK3VfbGlnaHRpbnRlbnNpdHkpLDEuMCksZGlyZWN0aW9uYWwpO2lmIChub3JtYWwueSAhPTAuMCkge2RpcmVjdGlvbmFsKj0oKDEuMC11X3ZlcnRpY2FsX2dyYWRpZW50KSsodV92ZXJ0aWNhbF9ncmFkaWVudCpjbGFtcCgodCtiYXNlKSpwb3coaGVpZ2h0LzE1MC4wLDAuNSksbWl4KDAuNywwLjk4LDEuMC11X2xpZ2h0aW50ZW5zaXR5KSwxLjApKSk7fXZfY29sb3Iucis9Y2xhbXAoY29sb3IucipkaXJlY3Rpb25hbCp1X2xpZ2h0Y29sb3IucixtaXgoMC4wLDAuMywxLjAtdV9saWdodGNvbG9yLnIpLDEuMCk7dl9jb2xvci5nKz1jbGFtcChjb2xvci5nKmRpcmVjdGlvbmFsKnVfbGlnaHRjb2xvci5nLG1peCgwLjAsMC4zLDEuMC11X2xpZ2h0Y29sb3IuZyksMS4wKTt2X2NvbG9yLmIrPWNsYW1wKGNvbG9yLmIqZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLmIsbWl4KDAuMCwwLjMsMS4wLXVfbGlnaHRjb2xvci5iKSwxLjApO3ZfY29sb3IqPXVfb3BhY2l0eTt9Iiksc3I9eXIoInVuaWZvcm0gdmVjMiB1X3RleHNpemU7dW5pZm9ybSBmbG9hdCB1X2ZhZGU7dW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3NfYTt2YXJ5aW5nIHZlYzIgdl9wb3NfYjt2YXJ5aW5nIHZlYzQgdl9saWdodGluZztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGVpZ2h0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmFzZVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O3ZlYzIgaW1hZ2Vjb29yZD1tb2Qodl9wb3NfYSwxLjApO3ZlYzIgcG9zPW1peChwYXR0ZXJuX3RsX2EvdV90ZXhzaXplLHBhdHRlcm5fYnJfYS91X3RleHNpemUsaW1hZ2Vjb29yZCk7dmVjNCBjb2xvcjE9dGV4dHVyZTJEKHVfaW1hZ2UscG9zKTt2ZWMyIGltYWdlY29vcmRfYj1tb2Qodl9wb3NfYiwxLjApO3ZlYzIgcG9zMj1taXgocGF0dGVybl90bF9iL3VfdGV4c2l6ZSxwYXR0ZXJuX2JyX2IvdV90ZXhzaXplLGltYWdlY29vcmRfYik7dmVjNCBjb2xvcjI9dGV4dHVyZTJEKHVfaW1hZ2UscG9zMik7dmVjNCBtaXhlZENvbG9yPW1peChjb2xvcjEsY29sb3IyLHVfZmFkZSk7Z2xfRnJhZ0NvbG9yPW1peGVkQ29sb3Iqdl9saWdodGluZztcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfdXBwZXI7dW5pZm9ybSB2ZWMyIHVfcGl4ZWxfY29vcmRfbG93ZXI7dW5pZm9ybSBmbG9hdCB1X2hlaWdodF9mYWN0b3I7dW5pZm9ybSB2ZWMzIHVfc2NhbGU7dW5pZm9ybSBmbG9hdCB1X3ZlcnRpY2FsX2dyYWRpZW50O3VuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7dW5pZm9ybSB2ZWMzIHVfbGlnaHRjb2xvcjt1bmlmb3JtIGxvd3AgdmVjMyB1X2xpZ2h0cG9zO3VuaWZvcm0gbG93cCBmbG9hdCB1X2xpZ2h0aW50ZW5zaXR5O2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWM0IGFfbm9ybWFsX2VkO3ZhcnlpbmcgdmVjMiB2X3Bvc19hO3ZhcnlpbmcgdmVjMiB2X3Bvc19iO3ZhcnlpbmcgdmVjNCB2X2xpZ2h0aW5nO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJhc2VcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoZWlnaHRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl90b1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBiYXNlXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhlaWdodFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xudmVjMiBwYXR0ZXJuX3RsX2E9cGF0dGVybl9mcm9tLnh5O3ZlYzIgcGF0dGVybl9icl9hPXBhdHRlcm5fZnJvbS56dzt2ZWMyIHBhdHRlcm5fdGxfYj1wYXR0ZXJuX3RvLnh5O3ZlYzIgcGF0dGVybl9icl9iPXBhdHRlcm5fdG8uenc7ZmxvYXQgdGlsZVJhdGlvPXVfc2NhbGUueDtmbG9hdCBmcm9tU2NhbGU9dV9zY2FsZS55O2Zsb2F0IHRvU2NhbGU9dV9zY2FsZS56O3ZlYzMgbm9ybWFsPWFfbm9ybWFsX2VkLnh5ejtmbG9hdCBlZGdlZGlzdGFuY2U9YV9ub3JtYWxfZWQudzt2ZWMyIGRpc3BsYXlfc2l6ZV9hPShwYXR0ZXJuX2JyX2EtcGF0dGVybl90bF9hKS9waXhlbF9yYXRpb19mcm9tO3ZlYzIgZGlzcGxheV9zaXplX2I9KHBhdHRlcm5fYnJfYi1wYXR0ZXJuX3RsX2IpL3BpeGVsX3JhdGlvX3RvO2Jhc2U9bWF4KDAuMCxiYXNlKTtoZWlnaHQ9bWF4KDAuMCxoZWlnaHQpO2Zsb2F0IHQ9bW9kKG5vcm1hbC54LDIuMCk7ZmxvYXQgej10ID4gMC4wID8gaGVpZ2h0IDogYmFzZTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLHosMSk7dmVjMiBwb3M9bm9ybWFsLng9PTEuMCAmJiBub3JtYWwueT09MC4wICYmIG5vcm1hbC56PT0xNjM4NC4wXG4/IGFfcG9zXG46IHZlYzIoZWRnZWRpc3RhbmNlLHoqdV9oZWlnaHRfZmFjdG9yKTt2X3Bvc19hPWdldF9wYXR0ZXJuX3Bvcyh1X3BpeGVsX2Nvb3JkX3VwcGVyLHVfcGl4ZWxfY29vcmRfbG93ZXIsZnJvbVNjYWxlKmRpc3BsYXlfc2l6ZV9hLHRpbGVSYXRpbyxwb3MpO3ZfcG9zX2I9Z2V0X3BhdHRlcm5fcG9zKHVfcGl4ZWxfY29vcmRfdXBwZXIsdV9waXhlbF9jb29yZF9sb3dlcix0b1NjYWxlKmRpc3BsYXlfc2l6ZV9iLHRpbGVSYXRpbyxwb3MpO3ZfbGlnaHRpbmc9dmVjNCgwLjAsMC4wLDAuMCwxLjApO2Zsb2F0IGRpcmVjdGlvbmFsPWNsYW1wKGRvdChub3JtYWwvMTYzODMuMCx1X2xpZ2h0cG9zKSwwLjAsMS4wKTtkaXJlY3Rpb25hbD1taXgoKDEuMC11X2xpZ2h0aW50ZW5zaXR5KSxtYXgoKDAuNSt1X2xpZ2h0aW50ZW5zaXR5KSwxLjApLGRpcmVjdGlvbmFsKTtpZiAobm9ybWFsLnkgIT0wLjApIHtkaXJlY3Rpb25hbCo9KCgxLjAtdV92ZXJ0aWNhbF9ncmFkaWVudCkrKHVfdmVydGljYWxfZ3JhZGllbnQqY2xhbXAoKHQrYmFzZSkqcG93KGhlaWdodC8xNTAuMCwwLjUpLG1peCgwLjcsMC45OCwxLjAtdV9saWdodGludGVuc2l0eSksMS4wKSkpO312X2xpZ2h0aW5nLnJnYis9Y2xhbXAoZGlyZWN0aW9uYWwqdV9saWdodGNvbG9yLG1peCh2ZWMzKDAuMCksdmVjMygwLjMpLDEuMC11X2xpZ2h0Y29sb3IpLHZlYzMoMS4wKSk7dl9saWdodGluZyo9dV9vcGFjaXR5O30iKSxscj15cigiI2lmZGVmIEdMX0VTXG5wcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZW5kaWZcbnVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfcG9zO3VuaWZvcm0gdmVjMiB1X2RpbWVuc2lvbjt1bmlmb3JtIGZsb2F0IHVfem9vbTt1bmlmb3JtIGZsb2F0IHVfbWF4em9vbTt1bmlmb3JtIHZlYzQgdV91bnBhY2s7ZmxvYXQgZ2V0RWxldmF0aW9uKHZlYzIgY29vcmQsZmxvYXQgYmlhcykge3ZlYzQgZGF0YT10ZXh0dXJlMkQodV9pbWFnZSxjb29yZCkqMjU1LjA7ZGF0YS5hPS0xLjA7cmV0dXJuIGRvdChkYXRhLHVfdW5wYWNrKS80LjA7fXZvaWQgbWFpbigpIHt2ZWMyIGVwc2lsb249MS4wL3VfZGltZW5zaW9uO2Zsb2F0IGE9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGI9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoMCwtZXBzaWxvbi55KSwwLjApO2Zsb2F0IGM9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoZXBzaWxvbi54LC1lcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigtZXBzaWxvbi54LDApLDAuMCk7ZmxvYXQgZT1nZXRFbGV2YXRpb24odl9wb3MsMC4wKTtmbG9hdCBmPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCwwKSwwLjApO2Zsb2F0IGc9Z2V0RWxldmF0aW9uKHZfcG9zK3ZlYzIoLWVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgaD1nZXRFbGV2YXRpb24odl9wb3MrdmVjMigwLGVwc2lsb24ueSksMC4wKTtmbG9hdCBpPWdldEVsZXZhdGlvbih2X3Bvcyt2ZWMyKGVwc2lsb24ueCxlcHNpbG9uLnkpLDAuMCk7ZmxvYXQgZXhhZ2dlcmF0aW9uPXVfem9vbSA8IDIuMCA/IDAuNCA6IHVfem9vbSA8IDQuNSA/IDAuMzUgOiAwLjM7dmVjMiBkZXJpdj12ZWMyKChjK2YrZitpKS0oYStkK2QrZyksKGcraCtoK2kpLShhK2IrYitjKSkvIHBvdygyLjAsKHVfem9vbS11X21heHpvb20pKmV4YWdnZXJhdGlvbisxOS4yNTYyLXVfem9vbSk7Z2xfRnJhZ0NvbG9yPWNsYW1wKHZlYzQoZGVyaXYueC8yLjArMC41LGRlcml2LnkvMi4wKzAuNSwxLjAsMS4wKSwwLjAsMS4wKTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJ1bmlmb3JtIG1hdDQgdV9tYXRyaXg7dW5pZm9ybSB2ZWMyIHVfZGltZW5zaW9uO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7aGlnaHAgdmVjMiBlcHNpbG9uPTEuMC91X2RpbWVuc2lvbjtmbG9hdCBzY2FsZT0odV9kaW1lbnNpb24ueC0yLjApL3VfZGltZW5zaW9uLng7dl9wb3M9KGFfdGV4dHVyZV9wb3MvODE5Mi4wKSpzY2FsZStlcHNpbG9uO30iKSxjcj15cigidW5pZm9ybSBzYW1wbGVyMkQgdV9pbWFnZTt2YXJ5aW5nIHZlYzIgdl9wb3M7dW5pZm9ybSB2ZWMyIHVfbGF0cmFuZ2U7dW5pZm9ybSB2ZWMyIHVfbGlnaHQ7dW5pZm9ybSB2ZWM0IHVfc2hhZG93O3VuaWZvcm0gdmVjNCB1X2hpZ2hsaWdodDt1bmlmb3JtIHZlYzQgdV9hY2NlbnQ7XG4jZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzXG52b2lkIG1haW4oKSB7dmVjNCBwaXhlbD10ZXh0dXJlMkQodV9pbWFnZSx2X3Bvcyk7dmVjMiBkZXJpdj0oKHBpeGVsLnJnKjIuMCktMS4wKTtmbG9hdCBzY2FsZUZhY3Rvcj1jb3MocmFkaWFucygodV9sYXRyYW5nZVswXS11X2xhdHJhbmdlWzFdKSooMS4wLXZfcG9zLnkpK3VfbGF0cmFuZ2VbMV0pKTtmbG9hdCBzbG9wZT1hdGFuKDEuMjUqbGVuZ3RoKGRlcml2KS9zY2FsZUZhY3Rvcik7ZmxvYXQgYXNwZWN0PWRlcml2LnggIT0wLjAgPyBhdGFuKGRlcml2LnksLWRlcml2LngpIDogUEkvMi4wKihkZXJpdi55ID4gMC4wID8gMS4wIDotMS4wKTtmbG9hdCBpbnRlbnNpdHk9dV9saWdodC54O2Zsb2F0IGF6aW11dGg9dV9saWdodC55K1BJO2Zsb2F0IGJhc2U9MS44NzUtaW50ZW5zaXR5KjEuNzU7ZmxvYXQgbWF4VmFsdWU9MC41KlBJO2Zsb2F0IHNjYWxlZFNsb3BlPWludGVuc2l0eSAhPTAuNSA/ICgocG93KGJhc2Usc2xvcGUpLTEuMCkvKHBvdyhiYXNlLG1heFZhbHVlKS0xLjApKSptYXhWYWx1ZSA6IHNsb3BlO2Zsb2F0IGFjY2VudD1jb3Moc2NhbGVkU2xvcGUpO3ZlYzQgYWNjZW50X2NvbG9yPSgxLjAtYWNjZW50KSp1X2FjY2VudCpjbGFtcChpbnRlbnNpdHkqMi4wLDAuMCwxLjApO2Zsb2F0IHNoYWRlPWFicyhtb2QoKGFzcGVjdCthemltdXRoKS9QSSswLjUsMi4wKS0xLjApO3ZlYzQgc2hhZGVfY29sb3I9bWl4KHVfc2hhZG93LHVfaGlnaGxpZ2h0LHNoYWRlKSpzaW4oc2NhbGVkU2xvcGUpKmNsYW1wKGludGVuc2l0eSoyLjAsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWFjY2VudF9jb2xvciooMS4wLXNoYWRlX2NvbG9yLmEpK3NoYWRlX2NvbG9yO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDthdHRyaWJ1dGUgdmVjMiBhX3BvczthdHRyaWJ1dGUgdmVjMiBhX3RleHR1cmVfcG9zO3ZhcnlpbmcgdmVjMiB2X3Bvczt2b2lkIG1haW4oKSB7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO3ZfcG9zPWFfdGV4dHVyZV9wb3MvODE5Mi4wO30iKSx1cj15cigidW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVzb2ZhcjtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBjb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG5mbG9hdCBBTlRJQUxJQVNJTkc9MS4wL3VfZGV2aWNlX3BpeGVsX3JhdGlvLzIuMDt2ZWMyIGFfZXh0cnVkZT1hX2RhdGEueHktMTI4LjA7ZmxvYXQgYV9kaXJlY3Rpb249bW9kKGFfZGF0YS56LDQuMCktMS4wO3ZfbGluZXNvZmFyPShmbG9vcihhX2RhdGEuei80LjApK2FfZGF0YS53KjY0LjApKjIuMDt2ZWMyIHBvcz1mbG9vcihhX3Bvc19ub3JtYWwqMC41KTttZWRpdW1wIHZlYzIgbm9ybWFsPWFfcG9zX25vcm1hbC0yLjAqcG9zO25vcm1hbC55PW5vcm1hbC55KjIuMC0xLjA7dl9ub3JtYWw9bm9ybWFsO2dhcHdpZHRoPWdhcHdpZHRoLzIuMDtmbG9hdCBoYWxmd2lkdGg9d2lkdGgvMi4wO29mZnNldD0tMS4wKm9mZnNldDtmbG9hdCBpbnNldD1nYXB3aWR0aCsoZ2Fwd2lkdGggPiAwLjAgPyBBTlRJQUxJQVNJTkcgOiAwLjApO2Zsb2F0IG91dHNldD1nYXB3aWR0aCtoYWxmd2lkdGgqKGdhcHdpZHRoID4gMC4wID8gMi4wIDogMS4wKSsoaGFsZndpZHRoPT0wLjAgPyAwLjAgOiBBTlRJQUxJQVNJTkcpO21lZGl1bXAgdmVjMiBkaXN0PW91dHNldCphX2V4dHJ1ZGUqc2NhbGU7bWVkaXVtcCBmbG9hdCB1PTAuNSphX2RpcmVjdGlvbjttZWRpdW1wIGZsb2F0IHQ9MS4wLWFicyh1KTttZWRpdW1wIHZlYzIgb2Zmc2V0Mj1vZmZzZXQqYV9leHRydWRlKnNjYWxlKm5vcm1hbC55Km1hdDIodCwtdSx1LHQpO3ZlYzQgcHJvamVjdGVkX2V4dHJ1ZGU9dV9tYXRyaXgqdmVjNChkaXN0L3VfcmF0aW8sMC4wLDAuMCk7Z2xfUG9zaXRpb249dV9tYXRyaXgqdmVjNChwb3Mrb2Zmc2V0Mi91X3JhdGlvLDAuMCwxLjApK3Byb2plY3RlZF9leHRydWRlO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmU9bGVuZ3RoKGRpc3QpO2Zsb2F0IGV4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU9bGVuZ3RoKHByb2plY3RlZF9leHRydWRlLnh5L2dsX1Bvc2l0aW9uLncqdV91bml0c190b19waXhlbHMpO3ZfZ2FtbWFfc2NhbGU9ZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZS9leHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlO3Zfd2lkdGgyPXZlYzIob3V0c2V0LGluc2V0KTt9IiksZnI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl9ub3JtYWw7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO3ZhcnlpbmcgaGlnaHAgZmxvYXQgdl9saW5lcHJvZ3Jlc3M7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG5mbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7dmVjNCBjb2xvcj10ZXh0dXJlMkQodV9pbWFnZSx2ZWMyKHZfbGluZXByb2dyZXNzLDAuNSkpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSk7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiXG4jZGVmaW5lIE1BWF9MSU5FX0RJU1RBTkNFIDMyNzY3LjBcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7dmFyeWluZyBoaWdocCBmbG9hdCB2X2xpbmVwcm9ncmVzcztcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9mZnNldFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDt2X2xpbmVwcm9ncmVzcz0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSoyLjAvTUFYX0xJTkVfRElTVEFOQ0U7dmVjMiBwb3M9Zmxvb3IoYV9wb3Nfbm9ybWFsKjAuNSk7bWVkaXVtcCB2ZWMyIG5vcm1hbD1hX3Bvc19ub3JtYWwtMi4wKnBvcztub3JtYWwueT1ub3JtYWwueSoyLjAtMS4wO3Zfbm9ybWFsPW5vcm1hbDtnYXB3aWR0aD1nYXB3aWR0aC8yLjA7ZmxvYXQgaGFsZndpZHRoPXdpZHRoLzIuMDtvZmZzZXQ9LTEuMCpvZmZzZXQ7ZmxvYXQgaW5zZXQ9Z2Fwd2lkdGgrKGdhcHdpZHRoID4gMC4wID8gQU5USUFMSUFTSU5HIDogMC4wKTtmbG9hdCBvdXRzZXQ9Z2Fwd2lkdGgraGFsZndpZHRoKihnYXB3aWR0aCA+IDAuMCA/IDIuMCA6IDEuMCkrKGhhbGZ3aWR0aD09MC4wID8gMC4wIDogQU5USUFMSUFTSU5HKTttZWRpdW1wIHZlYzIgZGlzdD1vdXRzZXQqYV9leHRydWRlKnNjYWxlO21lZGl1bXAgZmxvYXQgdT0wLjUqYV9kaXJlY3Rpb247bWVkaXVtcCBmbG9hdCB0PTEuMC1hYnModSk7bWVkaXVtcCB2ZWMyIG9mZnNldDI9b2Zmc2V0KmFfZXh0cnVkZSpzY2FsZSpub3JtYWwueSptYXQyKHQsLXUsdSx0KTt2ZWM0IHByb2plY3RlZF9leHRydWRlPXVfbWF0cml4KnZlYzQoZGlzdC91X3JhdGlvLDAuMCwwLjApO2dsX1Bvc2l0aW9uPXVfbWF0cml4KnZlYzQocG9zK29mZnNldDIvdV9yYXRpbywwLjAsMS4wKStwcm9qZWN0ZWRfZXh0cnVkZTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlPWxlbmd0aChkaXN0KTtmbG9hdCBleHRydWRlX2xlbmd0aF93aXRoX3BlcnNwZWN0aXZlPWxlbmd0aChwcm9qZWN0ZWRfZXh0cnVkZS54eS9nbF9Qb3NpdGlvbi53KnVfdW5pdHNfdG9fcGl4ZWxzKTt2X2dhbW1hX3NjYWxlPWV4dHJ1ZGVfbGVuZ3RoX3dpdGhvdXRfcGVyc3BlY3RpdmUvZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGhyPXlyKCJ1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt1bmlmb3JtIGZsb2F0IHVfZmFkZTt1bmlmb3JtIG1lZGl1bXAgdmVjMyB1X3NjYWxlO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGZsb2F0IHZfd2lkdGg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX2Zyb21cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb19mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fdG9cbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZlYzIgcGF0dGVybl90bF9hPXBhdHRlcm5fZnJvbS54eTt2ZWMyIHBhdHRlcm5fYnJfYT1wYXR0ZXJuX2Zyb20uenc7dmVjMiBwYXR0ZXJuX3RsX2I9cGF0dGVybl90by54eTt2ZWMyIHBhdHRlcm5fYnJfYj1wYXR0ZXJuX3RvLnp3O2Zsb2F0IHRpbGVab29tUmF0aW89dV9zY2FsZS54O2Zsb2F0IGZyb21TY2FsZT11X3NjYWxlLnk7ZmxvYXQgdG9TY2FsZT11X3NjYWxlLno7dmVjMiBkaXNwbGF5X3NpemVfYT0ocGF0dGVybl9icl9hLXBhdHRlcm5fdGxfYSkvcGl4ZWxfcmF0aW9fZnJvbTt2ZWMyIGRpc3BsYXlfc2l6ZV9iPShwYXR0ZXJuX2JyX2ItcGF0dGVybl90bF9iKS9waXhlbF9yYXRpb190bzt2ZWMyIHBhdHRlcm5fc2l6ZV9hPXZlYzIoZGlzcGxheV9zaXplX2EueCpmcm9tU2NhbGUvdGlsZVpvb21SYXRpbyxkaXNwbGF5X3NpemVfYS55KTt2ZWMyIHBhdHRlcm5fc2l6ZV9iPXZlYzIoZGlzcGxheV9zaXplX2IueCp0b1NjYWxlL3RpbGVab29tUmF0aW8sZGlzcGxheV9zaXplX2IueSk7ZmxvYXQgYXNwZWN0X2E9ZGlzcGxheV9zaXplX2EueS92X3dpZHRoO2Zsb2F0IGFzcGVjdF9iPWRpc3BsYXlfc2l6ZV9iLnkvdl93aWR0aDtmbG9hdCBkaXN0PWxlbmd0aCh2X25vcm1hbCkqdl93aWR0aDIucztmbG9hdCBibHVyMj0oYmx1cisxLjAvdV9kZXZpY2VfcGl4ZWxfcmF0aW8pKnZfZ2FtbWFfc2NhbGU7ZmxvYXQgYWxwaGE9Y2xhbXAobWluKGRpc3QtKHZfd2lkdGgyLnQtYmx1cjIpLHZfd2lkdGgyLnMtZGlzdCkvYmx1cjIsMC4wLDEuMCk7ZmxvYXQgeF9hPW1vZCh2X2xpbmVzb2Zhci9wYXR0ZXJuX3NpemVfYS54KmFzcGVjdF9hLDEuMCk7ZmxvYXQgeF9iPW1vZCh2X2xpbmVzb2Zhci9wYXR0ZXJuX3NpemVfYi54KmFzcGVjdF9iLDEuMCk7ZmxvYXQgeT0wLjUqdl9ub3JtYWwueSswLjU7dmVjMiB0ZXhlbF9zaXplPTEuMC91X3RleHNpemU7dmVjMiBwb3NfYT1taXgocGF0dGVybl90bF9hKnRleGVsX3NpemUtdGV4ZWxfc2l6ZSxwYXR0ZXJuX2JyX2EqdGV4ZWxfc2l6ZSt0ZXhlbF9zaXplLHZlYzIoeF9hLHkpKTt2ZWMyIHBvc19iPW1peChwYXR0ZXJuX3RsX2IqdGV4ZWxfc2l6ZS10ZXhlbF9zaXplLHBhdHRlcm5fYnJfYip0ZXhlbF9zaXplK3RleGVsX3NpemUsdmVjMih4X2IseSkpO3ZlYzQgY29sb3I9bWl4KHRleHR1cmUyRCh1X2ltYWdlLHBvc19hKSx0ZXh0dXJlMkQodV9pbWFnZSxwb3NfYiksdV9mYWRlKTtnbF9GcmFnQ29sb3I9Y29sb3IqYWxwaGEqb3BhY2l0eTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gdmVjMiB1X3VuaXRzX3RvX3BpeGVsczt1bmlmb3JtIG1lZGl1bXAgZmxvYXQgdV9yYXRpbzt1bmlmb3JtIGxvd3AgZmxvYXQgdV9kZXZpY2VfcGl4ZWxfcmF0aW87dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIGZsb2F0IHZfbGluZXNvZmFyO3ZhcnlpbmcgZmxvYXQgdl9nYW1tYV9zY2FsZTt2YXJ5aW5nIGZsb2F0IHZfd2lkdGg7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIHZlYzQgcGF0dGVybl9mcm9tXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgdmVjNCBwYXR0ZXJuX3RvXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IHBpeGVsX3JhdGlvX3RvXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgZ2Fwd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCB2ZWM0IHBhdHRlcm5fdG9cbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgcGl4ZWxfcmF0aW9fZnJvbVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBwaXhlbF9yYXRpb190b1xuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDtmbG9hdCBhX2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSpMSU5FX0RJU1RBTkNFX1NDQUxFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl9saW5lc29mYXI9YV9saW5lc29mYXI7dl93aWR0aDI9dmVjMihvdXRzZXQsaW5zZXQpO3Zfd2lkdGg9Zmxvb3J3aWR0aDt9IikscHI9eXIoInVuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlO3VuaWZvcm0gZmxvYXQgdV9zZGZnYW1tYTt1bmlmb3JtIGZsb2F0IHVfbWl4O3ZhcnlpbmcgdmVjMiB2X25vcm1hbDt2YXJ5aW5nIHZlYzIgdl93aWR0aDI7dmFyeWluZyB2ZWMyIHZfdGV4X2E7dmFyeWluZyB2ZWMyIHZfdGV4X2I7dmFyeWluZyBmbG9hdCB2X2dhbW1hX3NjYWxlO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbWVkaXVtcCBmbG9hdCB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgYmx1clxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBtZWRpdW1wIGZsb2F0IHdpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGZsb29yd2lkdGhcbmZsb2F0IGRpc3Q9bGVuZ3RoKHZfbm9ybWFsKSp2X3dpZHRoMi5zO2Zsb2F0IGJsdXIyPShibHVyKzEuMC91X2RldmljZV9waXhlbF9yYXRpbykqdl9nYW1tYV9zY2FsZTtmbG9hdCBhbHBoYT1jbGFtcChtaW4oZGlzdC0odl93aWR0aDIudC1ibHVyMiksdl93aWR0aDIucy1kaXN0KS9ibHVyMiwwLjAsMS4wKTtmbG9hdCBzZGZkaXN0X2E9dGV4dHVyZTJEKHVfaW1hZ2Usdl90ZXhfYSkuYTtmbG9hdCBzZGZkaXN0X2I9dGV4dHVyZTJEKHVfaW1hZ2Usdl90ZXhfYikuYTtmbG9hdCBzZGZkaXN0PW1peChzZGZkaXN0X2Esc2RmZGlzdF9iLHVfbWl4KTthbHBoYSo9c21vb3Roc3RlcCgwLjUtdV9zZGZnYW1tYS9mbG9vcndpZHRoLDAuNSt1X3NkZmdhbW1hL2Zsb29yd2lkdGgsc2RmZGlzdCk7Z2xfRnJhZ0NvbG9yPWNvbG9yKihhbHBoYSpvcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJcbiNkZWZpbmUgc2NhbGUgMC4wMTU4NzMwMTZcbiNkZWZpbmUgTElORV9ESVNUQU5DRV9TQ0FMRSAyLjBcbmF0dHJpYnV0ZSB2ZWMyIGFfcG9zX25vcm1hbDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWVkaXVtcCBmbG9hdCB1X3JhdGlvO3VuaWZvcm0gbG93cCBmbG9hdCB1X2RldmljZV9waXhlbF9yYXRpbzt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYTt1bmlmb3JtIGZsb2F0IHVfdGV4X3lfYTt1bmlmb3JtIHZlYzIgdV9wYXR0ZXJuc2NhbGVfYjt1bmlmb3JtIGZsb2F0IHVfdGV4X3lfYjt1bmlmb3JtIHZlYzIgdV91bml0c190b19waXhlbHM7dmFyeWluZyB2ZWMyIHZfbm9ybWFsO3ZhcnlpbmcgdmVjMiB2X3dpZHRoMjt2YXJ5aW5nIHZlYzIgdl90ZXhfYTt2YXJ5aW5nIHZlYzIgdl90ZXhfYjt2YXJ5aW5nIGZsb2F0IHZfZ2FtbWFfc2NhbGU7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBibHVyXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBtZWRpdW1wIGZsb2F0IGdhcHdpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb2Zmc2V0XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBmbG9vcndpZHRoXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGNvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGJsdXJcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbWVkaXVtcCBmbG9hdCBnYXB3aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvZmZzZXRcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIG1lZGl1bXAgZmxvYXQgd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgZmxvb3J3aWR0aFxuZmxvYXQgQU5USUFMSUFTSU5HPTEuMC91X2RldmljZV9waXhlbF9yYXRpby8yLjA7dmVjMiBhX2V4dHJ1ZGU9YV9kYXRhLnh5LTEyOC4wO2Zsb2F0IGFfZGlyZWN0aW9uPW1vZChhX2RhdGEueiw0LjApLTEuMDtmbG9hdCBhX2xpbmVzb2Zhcj0oZmxvb3IoYV9kYXRhLnovNC4wKSthX2RhdGEudyo2NC4wKSpMSU5FX0RJU1RBTkNFX1NDQUxFO3ZlYzIgcG9zPWZsb29yKGFfcG9zX25vcm1hbCowLjUpO21lZGl1bXAgdmVjMiBub3JtYWw9YV9wb3Nfbm9ybWFsLTIuMCpwb3M7bm9ybWFsLnk9bm9ybWFsLnkqMi4wLTEuMDt2X25vcm1hbD1ub3JtYWw7Z2Fwd2lkdGg9Z2Fwd2lkdGgvMi4wO2Zsb2F0IGhhbGZ3aWR0aD13aWR0aC8yLjA7b2Zmc2V0PS0xLjAqb2Zmc2V0O2Zsb2F0IGluc2V0PWdhcHdpZHRoKyhnYXB3aWR0aCA+IDAuMCA/IEFOVElBTElBU0lORyA6IDAuMCk7ZmxvYXQgb3V0c2V0PWdhcHdpZHRoK2hhbGZ3aWR0aCooZ2Fwd2lkdGggPiAwLjAgPyAyLjAgOiAxLjApKyhoYWxmd2lkdGg9PTAuMCA/IDAuMCA6IEFOVElBTElBU0lORyk7bWVkaXVtcCB2ZWMyIGRpc3Q9b3V0c2V0KmFfZXh0cnVkZSpzY2FsZTttZWRpdW1wIGZsb2F0IHU9MC41KmFfZGlyZWN0aW9uO21lZGl1bXAgZmxvYXQgdD0xLjAtYWJzKHUpO21lZGl1bXAgdmVjMiBvZmZzZXQyPW9mZnNldCphX2V4dHJ1ZGUqc2NhbGUqbm9ybWFsLnkqbWF0Mih0LC11LHUsdCk7dmVjNCBwcm9qZWN0ZWRfZXh0cnVkZT11X21hdHJpeCp2ZWM0KGRpc3QvdV9yYXRpbywwLjAsMC4wKTtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KHBvcytvZmZzZXQyL3VfcmF0aW8sMC4wLDEuMCkrcHJvamVjdGVkX2V4dHJ1ZGU7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aG91dF9wZXJzcGVjdGl2ZT1sZW5ndGgoZGlzdCk7ZmxvYXQgZXh0cnVkZV9sZW5ndGhfd2l0aF9wZXJzcGVjdGl2ZT1sZW5ndGgocHJvamVjdGVkX2V4dHJ1ZGUueHkvZ2xfUG9zaXRpb24udyp1X3VuaXRzX3RvX3BpeGVscyk7dl9nYW1tYV9zY2FsZT1leHRydWRlX2xlbmd0aF93aXRob3V0X3BlcnNwZWN0aXZlL2V4dHJ1ZGVfbGVuZ3RoX3dpdGhfcGVyc3BlY3RpdmU7dl90ZXhfYT12ZWMyKGFfbGluZXNvZmFyKnVfcGF0dGVybnNjYWxlX2EueC9mbG9vcndpZHRoLG5vcm1hbC55KnVfcGF0dGVybnNjYWxlX2EueSt1X3RleF95X2EpO3ZfdGV4X2I9dmVjMihhX2xpbmVzb2Zhcip1X3BhdHRlcm5zY2FsZV9iLngvZmxvb3J3aWR0aCxub3JtYWwueSp1X3BhdHRlcm5zY2FsZV9iLnkrdV90ZXhfeV9iKTt2X3dpZHRoMj12ZWMyKG91dHNldCxpbnNldCk7fSIpLGRyPXlyKCJ1bmlmb3JtIGZsb2F0IHVfZmFkZV90O3VuaWZvcm0gZmxvYXQgdV9vcGFjaXR5O3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UwO3VuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2UxO3ZhcnlpbmcgdmVjMiB2X3BvczA7dmFyeWluZyB2ZWMyIHZfcG9zMTt1bmlmb3JtIGZsb2F0IHVfYnJpZ2h0bmVzc19sb3c7dW5pZm9ybSBmbG9hdCB1X2JyaWdodG5lc3NfaGlnaDt1bmlmb3JtIGZsb2F0IHVfc2F0dXJhdGlvbl9mYWN0b3I7dW5pZm9ybSBmbG9hdCB1X2NvbnRyYXN0X2ZhY3Rvcjt1bmlmb3JtIHZlYzMgdV9zcGluX3dlaWdodHM7dm9pZCBtYWluKCkge3ZlYzQgY29sb3IwPXRleHR1cmUyRCh1X2ltYWdlMCx2X3BvczApO3ZlYzQgY29sb3IxPXRleHR1cmUyRCh1X2ltYWdlMSx2X3BvczEpO2lmIChjb2xvcjAuYSA+IDAuMCkge2NvbG9yMC5yZ2I9Y29sb3IwLnJnYi9jb2xvcjAuYTt9aWYgKGNvbG9yMS5hID4gMC4wKSB7Y29sb3IxLnJnYj1jb2xvcjEucmdiL2NvbG9yMS5hO312ZWM0IGNvbG9yPW1peChjb2xvcjAsY29sb3IxLHVfZmFkZV90KTtjb2xvci5hKj11X29wYWNpdHk7dmVjMyByZ2I9Y29sb3IucmdiO3JnYj12ZWMzKGRvdChyZ2IsdV9zcGluX3dlaWdodHMueHl6KSxkb3QocmdiLHVfc3Bpbl93ZWlnaHRzLnp4eSksZG90KHJnYix1X3NwaW5fd2VpZ2h0cy55engpKTtmbG9hdCBhdmVyYWdlPShjb2xvci5yK2NvbG9yLmcrY29sb3IuYikvMy4wO3JnYis9KGF2ZXJhZ2UtcmdiKSp1X3NhdHVyYXRpb25fZmFjdG9yO3JnYj0ocmdiLTAuNSkqdV9jb250cmFzdF9mYWN0b3IrMC41O3ZlYzMgdV9oaWdoX3ZlYz12ZWMzKHVfYnJpZ2h0bmVzc19sb3csdV9icmlnaHRuZXNzX2xvdyx1X2JyaWdodG5lc3NfbG93KTt2ZWMzIHVfbG93X3ZlYz12ZWMzKHVfYnJpZ2h0bmVzc19oaWdoLHVfYnJpZ2h0bmVzc19oaWdoLHVfYnJpZ2h0bmVzc19oaWdoKTtnbF9GcmFnQ29sb3I9dmVjNChtaXgodV9oaWdoX3ZlYyx1X2xvd192ZWMscmdiKSpjb2xvci5hLGNvbG9yLmEpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsInVuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIHZlYzIgdV90bF9wYXJlbnQ7dW5pZm9ybSBmbG9hdCB1X3NjYWxlX3BhcmVudDt1bmlmb3JtIGZsb2F0IHVfYnVmZmVyX3NjYWxlO2F0dHJpYnV0ZSB2ZWMyIGFfcG9zO2F0dHJpYnV0ZSB2ZWMyIGFfdGV4dHVyZV9wb3M7dmFyeWluZyB2ZWMyIHZfcG9zMDt2YXJ5aW5nIHZlYzIgdl9wb3MxO3ZvaWQgbWFpbigpIHtnbF9Qb3NpdGlvbj11X21hdHJpeCp2ZWM0KGFfcG9zLDAsMSk7dl9wb3MwPSgoKGFfdGV4dHVyZV9wb3MvODE5Mi4wKS0wLjUpL3VfYnVmZmVyX3NjYWxlICkrMC41O3ZfcG9zMT0odl9wb3MwKnVfc2NhbGVfcGFyZW50KSt1X3RsX3BhcmVudDt9IiksbXI9eXIoInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt2YXJ5aW5nIHZlYzIgdl90ZXg7dmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbmxvd3AgZmxvYXQgYWxwaGE9b3BhY2l0eSp2X2ZhZGVfb3BhY2l0eTtnbF9GcmFnQ29sb3I9dGV4dHVyZTJEKHVfdGV4dHVyZSx2X3RleCkqYWxwaGE7XG4jaWZkZWYgT1ZFUkRSQVdfSU5TUEVDVE9SXG5nbF9GcmFnQ29sb3I9dmVjNCgxLjApO1xuI2VuZGlmXG59IiwiY29uc3QgZmxvYXQgUEk9My4xNDE1OTI2NTM1ODk3OTM7YXR0cmlidXRlIHZlYzQgYV9wb3Nfb2Zmc2V0O2F0dHJpYnV0ZSB2ZWM0IGFfZGF0YTthdHRyaWJ1dGUgdmVjNCBhX3BpeGVsb2Zmc2V0O2F0dHJpYnV0ZSB2ZWMzIGFfcHJvamVjdGVkX3BvczthdHRyaWJ1dGUgZmxvYXQgYV9mYWRlX29wYWNpdHk7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV96b29tX2NvbnN0YW50O3VuaWZvcm0gYm9vbCB1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfc2l6ZV90O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9waXRjaDt1bmlmb3JtIGJvb2wgdV9yb3RhdGVfc3ltYm9sO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9hc3BlY3RfcmF0aW87dW5pZm9ybSBmbG9hdCB1X2ZhZGVfY2hhbmdlO3VuaWZvcm0gbWF0NCB1X21hdHJpeDt1bmlmb3JtIG1hdDQgdV9sYWJlbF9wbGFuZV9tYXRyaXg7dW5pZm9ybSBtYXQ0IHVfY29vcmRfbWF0cml4O3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dW5pZm9ybSBib29sIHVfcGl0Y2hfd2l0aF9tYXA7dW5pZm9ybSB2ZWMyIHVfdGV4c2l6ZTt2YXJ5aW5nIHZlYzIgdl90ZXg7dmFyeWluZyBmbG9hdCB2X2ZhZGVfb3BhY2l0eTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztmbG9hdCBhX3NpemVfbWluPWZsb29yKGFfc2l6ZVswXSowLjUpO3ZlYzIgYV9weG9mZnNldD1hX3BpeGVsb2Zmc2V0Lnh5O3ZlYzIgYV9taW5Gb250U2NhbGU9YV9waXhlbG9mZnNldC56dy8yNTYuMDtoaWdocCBmbG9hdCBzZWdtZW50X2FuZ2xlPS1hX3Byb2plY3RlZF9wb3NbMl07ZmxvYXQgc2l6ZTtpZiAoIXVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9bWl4KGFfc2l6ZV9taW4sYV9zaXplWzFdLHVfc2l6ZV90KS8xMjguMDt9IGVsc2UgaWYgKHVfaXNfc2l6ZV96b29tX2NvbnN0YW50ICYmICF1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudCkge3NpemU9YV9zaXplX21pbi8xMjguMDt9IGVsc2Uge3NpemU9dV9zaXplO312ZWM0IHByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MsMCwxKTtoaWdocCBmbG9hdCBjYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlPXByb2plY3RlZFBvaW50Lnc7aGlnaHAgZmxvYXQgZGlzdGFuY2VfcmF0aW89dV9waXRjaF93aXRoX21hcCA/XG5jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlL3VfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSA6XG51X2NhbWVyYV90b19jZW50ZXJfZGlzdGFuY2UvY2FtZXJhX3RvX2FuY2hvcl9kaXN0YW5jZTtoaWdocCBmbG9hdCBwZXJzcGVjdGl2ZV9yYXRpbz1jbGFtcCgwLjUrMC41KmRpc3RhbmNlX3JhdGlvLDAuMCw0LjApO3NpemUqPXBlcnNwZWN0aXZlX3JhdGlvO2Zsb2F0IGZvbnRTY2FsZT11X2lzX3RleHQgPyBzaXplLzI0LjAgOiBzaXplO2hpZ2hwIGZsb2F0IHN5bWJvbF9yb3RhdGlvbj0wLjA7aWYgKHVfcm90YXRlX3N5bWJvbCkge3ZlYzQgb2Zmc2V0UHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3Bvcyt2ZWMyKDEsMCksMCwxKTt2ZWMyIGE9cHJvamVjdGVkUG9pbnQueHkvcHJvamVjdGVkUG9pbnQudzt2ZWMyIGI9b2Zmc2V0UHJvamVjdGVkUG9pbnQueHkvb2Zmc2V0UHJvamVjdGVkUG9pbnQudztzeW1ib2xfcm90YXRpb249YXRhbigoYi55LWEueSkvdV9hc3BlY3RfcmF0aW8sYi54LWEueCk7fWhpZ2hwIGZsb2F0IGFuZ2xlX3Npbj1zaW4oc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO2hpZ2hwIGZsb2F0IGFuZ2xlX2Nvcz1jb3Moc2VnbWVudF9hbmdsZStzeW1ib2xfcm90YXRpb24pO21hdDIgcm90YXRpb25fbWF0cml4PW1hdDIoYW5nbGVfY29zLC0xLjAqYW5nbGVfc2luLGFuZ2xlX3NpbixhbmdsZV9jb3MpO3ZlYzQgcHJvamVjdGVkX3Bvcz11X2xhYmVsX3BsYW5lX21hdHJpeCp2ZWM0KGFfcHJvamVjdGVkX3Bvcy54eSwwLjAsMS4wKTtnbF9Qb3NpdGlvbj11X2Nvb3JkX21hdHJpeCp2ZWM0KHByb2plY3RlZF9wb3MueHkvcHJvamVjdGVkX3Bvcy53K3JvdGF0aW9uX21hdHJpeCooYV9vZmZzZXQvMzIuMCptYXgoYV9taW5Gb250U2NhbGUsZm9udFNjYWxlKSthX3B4b2Zmc2V0LzE2LjApLDAuMCwxLjApO3ZfdGV4PWFfdGV4L3VfdGV4c2l6ZTt2ZWMyIGZhZGVfb3BhY2l0eT11bnBhY2tfb3BhY2l0eShhX2ZhZGVfb3BhY2l0eSk7ZmxvYXQgZmFkZV9jaGFuZ2U9ZmFkZV9vcGFjaXR5WzFdID4gMC41ID8gdV9mYWRlX2NoYW5nZSA6LXVfZmFkZV9jaGFuZ2U7dl9mYWRlX29wYWNpdHk9bWF4KDAuMCxtaW4oMS4wLGZhZGVfb3BhY2l0eVswXStmYWRlX2NoYW5nZSkpO30iKSxncj15cigiI2RlZmluZSBTREZfUFggOC4wXG51bmlmb3JtIGJvb2wgdV9pc19oYWxvO3VuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3VuaWZvcm0gYm9vbCB1X2lzX3RleHQ7dmFyeWluZyB2ZWMyIHZfZGF0YTA7dmFyeWluZyB2ZWMzIHZfZGF0YTE7XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxudm9pZCBtYWluKCkge1xuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGhhbG9fY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fYmx1clxuZmxvYXQgRURHRV9HQU1NQT0wLjEwNS91X2RldmljZV9waXhlbF9yYXRpbzt2ZWMyIHRleD12X2RhdGEwLnh5O2Zsb2F0IGdhbW1hX3NjYWxlPXZfZGF0YTEueDtmbG9hdCBzaXplPXZfZGF0YTEueTtmbG9hdCBmYWRlX29wYWNpdHk9dl9kYXRhMVsyXTtmbG9hdCBmb250U2NhbGU9dV9pc190ZXh0ID8gc2l6ZS8yNC4wIDogc2l6ZTtsb3dwIHZlYzQgY29sb3I9ZmlsbF9jb2xvcjtoaWdocCBmbG9hdCBnYW1tYT1FREdFX0dBTU1BLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7bG93cCBmbG9hdCBidWZmPSgyNTYuMC02NC4wKS8yNTYuMDtpZiAodV9pc19oYWxvKSB7Y29sb3I9aGFsb19jb2xvcjtnYW1tYT0oaGFsb19ibHVyKjEuMTkvU0RGX1BYK0VER0VfR0FNTUEpLyhmb250U2NhbGUqdV9nYW1tYV9zY2FsZSk7YnVmZj0oNi4wLWhhbG9fd2lkdGgvZm9udFNjYWxlKS9TREZfUFg7fWxvd3AgZmxvYXQgZGlzdD10ZXh0dXJlMkQodV90ZXh0dXJlLHRleCkuYTtoaWdocCBmbG9hdCBnYW1tYV9zY2FsZWQ9Z2FtbWEqZ2FtbWFfc2NhbGU7aGlnaHAgZmxvYXQgYWxwaGE9c21vb3Roc3RlcChidWZmLWdhbW1hX3NjYWxlZCxidWZmK2dhbW1hX3NjYWxlZCxkaXN0KTtnbF9GcmFnQ29sb3I9Y29sb3IqKGFscGhhKm9wYWNpdHkqZmFkZV9vcGFjaXR5KTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbn0iLCJjb25zdCBmbG9hdCBQST0zLjE0MTU5MjY1MzU4OTc5MzthdHRyaWJ1dGUgdmVjNCBhX3Bvc19vZmZzZXQ7YXR0cmlidXRlIHZlYzQgYV9kYXRhO2F0dHJpYnV0ZSB2ZWM0IGFfcGl4ZWxvZmZzZXQ7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3ZhcnlpbmcgdmVjMiB2X2RhdGEwO3ZhcnlpbmcgdmVjMyB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZlYzIgYV9wb3M9YV9wb3Nfb2Zmc2V0Lnh5O3ZlYzIgYV9vZmZzZXQ9YV9wb3Nfb2Zmc2V0Lnp3O3ZlYzIgYV90ZXg9YV9kYXRhLnh5O3ZlYzIgYV9zaXplPWFfZGF0YS56dztmbG9hdCBhX3NpemVfbWluPWZsb29yKGFfc2l6ZVswXSowLjUpO3ZlYzIgYV9weG9mZnNldD1hX3BpeGVsb2Zmc2V0Lnh5O2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplX21pbixhX3NpemVbMV0sdV9zaXplX3QpLzEyOC4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVfbWluLzEyOC4wO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXVfaXNfdGV4dCA/IHNpemUvMjQuMCA6IHNpemU7aGlnaHAgZmxvYXQgc3ltYm9sX3JvdGF0aW9uPTAuMDtpZiAodV9yb3RhdGVfc3ltYm9sKSB7dmVjNCBvZmZzZXRQcm9qZWN0ZWRQb2ludD11X21hdHJpeCp2ZWM0KGFfcG9zK3ZlYzIoMSwwKSwwLDEpO3ZlYzIgYT1wcm9qZWN0ZWRQb2ludC54eS9wcm9qZWN0ZWRQb2ludC53O3ZlYzIgYj1vZmZzZXRQcm9qZWN0ZWRQb2ludC54eS9vZmZzZXRQcm9qZWN0ZWRQb2ludC53O3N5bWJvbF9yb3RhdGlvbj1hdGFuKChiLnktYS55KS91X2FzcGVjdF9yYXRpbyxiLngtYS54KTt9aGlnaHAgZmxvYXQgYW5nbGVfc2luPXNpbihzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7aGlnaHAgZmxvYXQgYW5nbGVfY29zPWNvcyhzZWdtZW50X2FuZ2xlK3N5bWJvbF9yb3RhdGlvbik7bWF0MiByb3RhdGlvbl9tYXRyaXg9bWF0MihhbmdsZV9jb3MsLTEuMCphbmdsZV9zaW4sYW5nbGVfc2luLGFuZ2xlX2Nvcyk7dmVjNCBwcm9qZWN0ZWRfcG9zPXVfbGFiZWxfcGxhbmVfbWF0cml4KnZlYzQoYV9wcm9qZWN0ZWRfcG9zLnh5LDAuMCwxLjApO2dsX1Bvc2l0aW9uPXVfY29vcmRfbWF0cml4KnZlYzQocHJvamVjdGVkX3Bvcy54eS9wcm9qZWN0ZWRfcG9zLncrcm90YXRpb25fbWF0cml4KihhX29mZnNldC8zMi4wKmZvbnRTY2FsZSthX3B4b2Zmc2V0KSwwLjAsMS4wKTtmbG9hdCBnYW1tYV9zY2FsZT1nbF9Qb3NpdGlvbi53O3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTtmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt2X2RhdGEwPWFfdGV4L3VfdGV4c2l6ZTt2X2RhdGExPXZlYzMoZ2FtbWFfc2NhbGUsc2l6ZSxpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5KTt9IiksdnI9eXIoIiNkZWZpbmUgU0RGX1BYIDguMFxuI2RlZmluZSBTREYgMS4wXG4jZGVmaW5lIElDT04gMC4wXG51bmlmb3JtIGJvb2wgdV9pc19oYWxvO3VuaWZvcm0gc2FtcGxlcjJEIHVfdGV4dHVyZTt1bmlmb3JtIHNhbXBsZXIyRCB1X3RleHR1cmVfaWNvbjt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfZ2FtbWFfc2NhbGU7dW5pZm9ybSBsb3dwIGZsb2F0IHVfZGV2aWNlX3BpeGVsX3JhdGlvO3ZhcnlpbmcgdmVjNCB2X2RhdGEwO3ZhcnlpbmcgdmVjNCB2X2RhdGExO1xuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgb3BhY2l0eVxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbnZvaWQgbWFpbigpIHtcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgZmlsbF9jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgaGlnaHAgdmVjNCBoYWxvX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb193aWR0aFxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBoYWxvX2JsdXJcbmZsb2F0IGZhZGVfb3BhY2l0eT12X2RhdGExWzJdO2lmICh2X2RhdGExLnc9PUlDT04pIHt2ZWMyIHRleF9pY29uPXZfZGF0YTAuenc7bG93cCBmbG9hdCBhbHBoYT1vcGFjaXR5KmZhZGVfb3BhY2l0eTtnbF9GcmFnQ29sb3I9dGV4dHVyZTJEKHVfdGV4dHVyZV9pY29uLHRleF9pY29uKSphbHBoYTtcbiNpZmRlZiBPVkVSRFJBV19JTlNQRUNUT1JcbmdsX0ZyYWdDb2xvcj12ZWM0KDEuMCk7XG4jZW5kaWZcbnJldHVybjt9dmVjMiB0ZXg9dl9kYXRhMC54eTtmbG9hdCBFREdFX0dBTU1BPTAuMTA1L3VfZGV2aWNlX3BpeGVsX3JhdGlvO2Zsb2F0IGdhbW1hX3NjYWxlPXZfZGF0YTEueDtmbG9hdCBzaXplPXZfZGF0YTEueTtmbG9hdCBmb250U2NhbGU9c2l6ZS8yNC4wO2xvd3AgdmVjNCBjb2xvcj1maWxsX2NvbG9yO2hpZ2hwIGZsb2F0IGdhbW1hPUVER0VfR0FNTUEvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtsb3dwIGZsb2F0IGJ1ZmY9KDI1Ni4wLTY0LjApLzI1Ni4wO2lmICh1X2lzX2hhbG8pIHtjb2xvcj1oYWxvX2NvbG9yO2dhbW1hPShoYWxvX2JsdXIqMS4xOS9TREZfUFgrRURHRV9HQU1NQSkvKGZvbnRTY2FsZSp1X2dhbW1hX3NjYWxlKTtidWZmPSg2LjAtaGFsb193aWR0aC9mb250U2NhbGUpL1NERl9QWDt9bG93cCBmbG9hdCBkaXN0PXRleHR1cmUyRCh1X3RleHR1cmUsdGV4KS5hO2hpZ2hwIGZsb2F0IGdhbW1hX3NjYWxlZD1nYW1tYSpnYW1tYV9zY2FsZTtoaWdocCBmbG9hdCBhbHBoYT1zbW9vdGhzdGVwKGJ1ZmYtZ2FtbWFfc2NhbGVkLGJ1ZmYrZ2FtbWFfc2NhbGVkLGRpc3QpO2dsX0ZyYWdDb2xvcj1jb2xvciooYWxwaGEqb3BhY2l0eSpmYWRlX29wYWNpdHkpO1xuI2lmZGVmIE9WRVJEUkFXX0lOU1BFQ1RPUlxuZ2xfRnJhZ0NvbG9yPXZlYzQoMS4wKTtcbiNlbmRpZlxufSIsImNvbnN0IGZsb2F0IFBJPTMuMTQxNTkyNjUzNTg5NzkzO2F0dHJpYnV0ZSB2ZWM0IGFfcG9zX29mZnNldDthdHRyaWJ1dGUgdmVjNCBhX2RhdGE7YXR0cmlidXRlIHZlYzMgYV9wcm9qZWN0ZWRfcG9zO2F0dHJpYnV0ZSBmbG9hdCBhX2ZhZGVfb3BhY2l0eTt1bmlmb3JtIGJvb2wgdV9pc19zaXplX3pvb21fY29uc3RhbnQ7dW5pZm9ybSBib29sIHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50O3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9zaXplX3Q7dW5pZm9ybSBoaWdocCBmbG9hdCB1X3NpemU7dW5pZm9ybSBtYXQ0IHVfbWF0cml4O3VuaWZvcm0gbWF0NCB1X2xhYmVsX3BsYW5lX21hdHJpeDt1bmlmb3JtIG1hdDQgdV9jb29yZF9tYXRyaXg7dW5pZm9ybSBib29sIHVfaXNfdGV4dDt1bmlmb3JtIGJvb2wgdV9waXRjaF93aXRoX21hcDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfcGl0Y2g7dW5pZm9ybSBib29sIHVfcm90YXRlX3N5bWJvbDt1bmlmb3JtIGhpZ2hwIGZsb2F0IHVfYXNwZWN0X3JhdGlvO3VuaWZvcm0gaGlnaHAgZmxvYXQgdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlO3VuaWZvcm0gZmxvYXQgdV9mYWRlX2NoYW5nZTt1bmlmb3JtIHZlYzIgdV90ZXhzaXplO3VuaWZvcm0gdmVjMiB1X3RleHNpemVfaWNvbjt2YXJ5aW5nIHZlYzQgdl9kYXRhMDt2YXJ5aW5nIHZlYzQgdl9kYXRhMTtcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgaGlnaHAgdmVjNCBmaWxsX2NvbG9yXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGRlZmluZSBsb3dwIGZsb2F0IG9wYWNpdHlcbiNwcmFnbWEgbWFwYm94OiBkZWZpbmUgbG93cCBmbG9hdCBoYWxvX3dpZHRoXG4jcHJhZ21hIG1hcGJveDogZGVmaW5lIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52b2lkIG1haW4oKSB7XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBoaWdocCB2ZWM0IGZpbGxfY29sb3JcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGhpZ2hwIHZlYzQgaGFsb19jb2xvclxuI3ByYWdtYSBtYXBib3g6IGluaXRpYWxpemUgbG93cCBmbG9hdCBvcGFjaXR5XG4jcHJhZ21hIG1hcGJveDogaW5pdGlhbGl6ZSBsb3dwIGZsb2F0IGhhbG9fd2lkdGhcbiNwcmFnbWEgbWFwYm94OiBpbml0aWFsaXplIGxvd3AgZmxvYXQgaGFsb19ibHVyXG52ZWMyIGFfcG9zPWFfcG9zX29mZnNldC54eTt2ZWMyIGFfb2Zmc2V0PWFfcG9zX29mZnNldC56dzt2ZWMyIGFfdGV4PWFfZGF0YS54eTt2ZWMyIGFfc2l6ZT1hX2RhdGEuenc7ZmxvYXQgYV9zaXplX21pbj1mbG9vcihhX3NpemVbMF0qMC41KTtmbG9hdCBpc19zZGY9YV9zaXplWzBdLTIuMCphX3NpemVfbWluO2hpZ2hwIGZsb2F0IHNlZ21lbnRfYW5nbGU9LWFfcHJvamVjdGVkX3Bvc1syXTtmbG9hdCBzaXplO2lmICghdV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1taXgoYV9zaXplX21pbixhX3NpemVbMV0sdV9zaXplX3QpLzEyOC4wO30gZWxzZSBpZiAodV9pc19zaXplX3pvb21fY29uc3RhbnQgJiYgIXVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSB7c2l6ZT1hX3NpemVfbWluLzEyOC4wO30gZWxzZSB7c2l6ZT11X3NpemU7fXZlYzQgcHJvamVjdGVkUG9pbnQ9dV9tYXRyaXgqdmVjNChhX3BvcywwLDEpO2hpZ2hwIGZsb2F0IGNhbWVyYV90b19hbmNob3JfZGlzdGFuY2U9cHJvamVjdGVkUG9pbnQudztoaWdocCBmbG9hdCBkaXN0YW5jZV9yYXRpbz11X3BpdGNoX3dpdGhfbWFwID9cbmNhbWVyYV90b19hbmNob3JfZGlzdGFuY2UvdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlIDpcbnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZS9jYW1lcmFfdG9fYW5jaG9yX2Rpc3RhbmNlO2hpZ2hwIGZsb2F0IHBlcnNwZWN0aXZlX3JhdGlvPWNsYW1wKDAuNSswLjUqZGlzdGFuY2VfcmF0aW8sMC4wLDQuMCk7c2l6ZSo9cGVyc3BlY3RpdmVfcmF0aW87ZmxvYXQgZm9udFNjYWxlPXNpemUvMjQuMDtoaWdocCBmbG9hdCBzeW1ib2xfcm90YXRpb249MC4wO2lmICh1X3JvdGF0ZV9zeW1ib2wpIHt2ZWM0IG9mZnNldFByb2plY3RlZFBvaW50PXVfbWF0cml4KnZlYzQoYV9wb3MrdmVjMigxLDApLDAsMSk7dmVjMiBhPXByb2plY3RlZFBvaW50Lnh5L3Byb2plY3RlZFBvaW50Lnc7dmVjMiBiPW9mZnNldFByb2plY3RlZFBvaW50Lnh5L29mZnNldFByb2plY3RlZFBvaW50Lnc7c3ltYm9sX3JvdGF0aW9uPWF0YW4oKGIueS1hLnkpL3VfYXNwZWN0X3JhdGlvLGIueC1hLngpO31oaWdocCBmbG9hdCBhbmdsZV9zaW49c2luKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTtoaWdocCBmbG9hdCBhbmdsZV9jb3M9Y29zKHNlZ21lbnRfYW5nbGUrc3ltYm9sX3JvdGF0aW9uKTttYXQyIHJvdGF0aW9uX21hdHJpeD1tYXQyKGFuZ2xlX2NvcywtMS4wKmFuZ2xlX3NpbixhbmdsZV9zaW4sYW5nbGVfY29zKTt2ZWM0IHByb2plY3RlZF9wb3M9dV9sYWJlbF9wbGFuZV9tYXRyaXgqdmVjNChhX3Byb2plY3RlZF9wb3MueHksMC4wLDEuMCk7Z2xfUG9zaXRpb249dV9jb29yZF9tYXRyaXgqdmVjNChwcm9qZWN0ZWRfcG9zLnh5L3Byb2plY3RlZF9wb3Mudytyb3RhdGlvbl9tYXRyaXgqKGFfb2Zmc2V0LzMyLjAqZm9udFNjYWxlKSwwLjAsMS4wKTtmbG9hdCBnYW1tYV9zY2FsZT1nbF9Qb3NpdGlvbi53O3ZlYzIgZmFkZV9vcGFjaXR5PXVucGFja19vcGFjaXR5KGFfZmFkZV9vcGFjaXR5KTtmbG9hdCBmYWRlX2NoYW5nZT1mYWRlX29wYWNpdHlbMV0gPiAwLjUgPyB1X2ZhZGVfY2hhbmdlIDotdV9mYWRlX2NoYW5nZTtmbG9hdCBpbnRlcnBvbGF0ZWRfZmFkZV9vcGFjaXR5PW1heCgwLjAsbWluKDEuMCxmYWRlX29wYWNpdHlbMF0rZmFkZV9jaGFuZ2UpKTt2X2RhdGEwLnh5PWFfdGV4L3VfdGV4c2l6ZTt2X2RhdGEwLnp3PWFfdGV4L3VfdGV4c2l6ZV9pY29uO3ZfZGF0YTE9dmVjNChnYW1tYV9zY2FsZSxzaXplLGludGVycG9sYXRlZF9mYWRlX29wYWNpdHksaXNfc2RmKTt9Iik7ZnVuY3Rpb24geXIodCxlKXt2YXIgcj0vI3ByYWdtYSBtYXBib3g6IChbXHddKykgKFtcd10rKSAoW1x3XSspIChbXHddKykvZyxuPXt9O3JldHVybntmcmFnbWVudFNvdXJjZTp0PXQucmVwbGFjZShyLChmdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBuW2FdPSEwLCJkZWZpbmUiPT09ZT8iXG4jaWZuZGVmIEhBU19VTklGT1JNX3VfIithKyJcbnZhcnlpbmcgIityKyIgIitpKyIgIithKyI7XG4jZWxzZVxudW5pZm9ybSAiK3IrIiAiK2krIiB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4ifSkpLHZlcnRleFNvdXJjZTplPWUucmVwbGFjZShyLChmdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPSJmbG9hdCI9PT1pPyJ2ZWMyIjoidmVjNCIscz1hLm1hdGNoKC9jb2xvci8pPyJjb2xvciI6bztyZXR1cm4gblthXT8iZGVmaW5lIj09PWU/IlxuI2lmbmRlZiBIQVNfVU5JRk9STV91XyIrYSsiXG51bmlmb3JtIGxvd3AgZmxvYXQgdV8iK2ErIl90O1xuYXR0cmlidXRlICIrcisiICIrbysiIGFfIithKyI7XG52YXJ5aW5nICIrcisiICIraSsiICIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoidmVjNCI9PT1zPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrYSsiID0gYV8iK2ErIjtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrYSsiID0gdW5wYWNrX21peF8iK3MrIihhXyIrYSsiLCB1XyIrYSsiX3QpO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiI6ImRlZmluZSI9PT1lPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxudW5pZm9ybSBsb3dwIGZsb2F0IHVfIithKyJfdDtcbmF0dHJpYnV0ZSAiK3IrIiAiK28rIiBhXyIrYSsiO1xuI2Vsc2VcbnVuaWZvcm0gIityKyIgIitpKyIgdV8iK2ErIjtcbiNlbmRpZlxuIjoidmVjNCI9PT1zPyJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gYV8iK2ErIjtcbiNlbHNlXG4gICAgIityKyIgIitpKyIgIithKyIgPSB1XyIrYSsiO1xuI2VuZGlmXG4iOiJcbiNpZm5kZWYgSEFTX1VOSUZPUk1fdV8iK2ErIlxuICAgICIrcisiICIraSsiICIrYSsiID0gdW5wYWNrX21peF8iK3MrIihhXyIrYSsiLCB1XyIrYSsiX3QpO1xuI2Vsc2VcbiAgICAiK3IrIiAiK2krIiAiK2ErIiA9IHVfIithKyI7XG4jZW5kaWZcbiJ9KSl9fXZhciB4cj1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxwcmVsdWRlOlllLGJhY2tncm91bmQ6V2UsYmFja2dyb3VuZFBhdHRlcm46WGUsY2lyY2xlOlplLGNsaXBwaW5nTWFzazpKZSxoZWF0bWFwOktlLGhlYXRtYXBUZXh0dXJlOlFlLGNvbGxpc2lvbkJveDokZSxjb2xsaXNpb25DaXJjbGU6dHIsZGVidWc6ZXIsZmlsbDpycixmaWxsT3V0bGluZTpucixmaWxsT3V0bGluZVBhdHRlcm46aXIsZmlsbFBhdHRlcm46YXIsZmlsbEV4dHJ1c2lvbjpvcixmaWxsRXh0cnVzaW9uUGF0dGVybjpzcixoaWxsc2hhZGVQcmVwYXJlOmxyLGhpbGxzaGFkZTpjcixsaW5lOnVyLGxpbmVHcmFkaWVudDpmcixsaW5lUGF0dGVybjpocixsaW5lU0RGOnByLHJhc3RlcjpkcixzeW1ib2xJY29uOm1yLHN5bWJvbFNERjpncixzeW1ib2xUZXh0QW5kSWNvbjp2cn0pLGJyPWZ1bmN0aW9uKCl7dGhpcy5ib3VuZFByb2dyYW09bnVsbCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPW51bGwsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1bXSx0aGlzLmJvdW5kSW5kZXhCdWZmZXI9bnVsbCx0aGlzLmJvdW5kVmVydGV4T2Zmc2V0PW51bGwsdGhpcy5ib3VuZER5bmFtaWNWZXJ0ZXhCdWZmZXI9bnVsbCx0aGlzLnZhbz1udWxsfTtici5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUscixuLGksYSxvLHMpe3RoaXMuY29udGV4dD10O2Zvcih2YXIgbD10aGlzLmJvdW5kUGFpbnRWZXJ0ZXhCdWZmZXJzLmxlbmd0aCE9PW4ubGVuZ3RoLGM9MDshbCYmYzxuLmxlbmd0aDtjKyspdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVyc1tjXSE9PW5bY10mJihsPSEwKTt2YXIgdT0hdGhpcy52YW98fHRoaXMuYm91bmRQcm9ncmFtIT09ZXx8dGhpcy5ib3VuZExheW91dFZlcnRleEJ1ZmZlciE9PXJ8fGx8fHRoaXMuYm91bmRJbmRleEJ1ZmZlciE9PWl8fHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQhPT1hfHx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlciE9PW98fHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMiE9PXM7IXQuZXh0VmVydGV4QXJyYXlPYmplY3R8fHU/dGhpcy5mcmVzaEJpbmQoZSxyLG4saSxhLG8scyk6KHQuYmluZFZlcnRleEFycmF5T0VTLnNldCh0aGlzLnZhbyksbyYmby5iaW5kKCksaSYmaS5keW5hbWljRHJhdyYmaS5iaW5kKCkscyYmcy5iaW5kKCkpfSxici5wcm90b3R5cGUuZnJlc2hCaW5kPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw9dC5udW1BdHRyaWJ1dGVzLGM9dGhpcy5jb250ZXh0LHU9Yy5nbDtpZihjLmV4dFZlcnRleEFycmF5T2JqZWN0KXRoaXMudmFvJiZ0aGlzLmRlc3Ryb3koKSx0aGlzLnZhbz1jLmV4dFZlcnRleEFycmF5T2JqZWN0LmNyZWF0ZVZlcnRleEFycmF5T0VTKCksYy5iaW5kVmVydGV4QXJyYXlPRVMuc2V0KHRoaXMudmFvKSxzPTAsdGhpcy5ib3VuZFByb2dyYW09dCx0aGlzLmJvdW5kTGF5b3V0VmVydGV4QnVmZmVyPWUsdGhpcy5ib3VuZFBhaW50VmVydGV4QnVmZmVycz1yLHRoaXMuYm91bmRJbmRleEJ1ZmZlcj1uLHRoaXMuYm91bmRWZXJ0ZXhPZmZzZXQ9aSx0aGlzLmJvdW5kRHluYW1pY1ZlcnRleEJ1ZmZlcj1hLHRoaXMuYm91bmREeW5hbWljVmVydGV4QnVmZmVyMj1vO2Vsc2V7cz1jLmN1cnJlbnROdW1BdHRyaWJ1dGVzfHwwO2Zvcih2YXIgZj1sO2Y8cztmKyspdS5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoZil9ZS5lbmFibGVBdHRyaWJ1dGVzKHUsdCk7Zm9yKHZhciBoPTAscD1yO2g8cC5sZW5ndGg7aCs9MSl7cFtoXS5lbmFibGVBdHRyaWJ1dGVzKHUsdCl9YSYmYS5lbmFibGVBdHRyaWJ1dGVzKHUsdCksbyYmby5lbmFibGVBdHRyaWJ1dGVzKHUsdCksZS5iaW5kKCksZS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSk7Zm9yKHZhciBkPTAsbT1yO2Q8bS5sZW5ndGg7ZCs9MSl7dmFyIGc9bVtkXTtnLmJpbmQoKSxnLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKX1hJiYoYS5iaW5kKCksYS5zZXRWZXJ0ZXhBdHRyaWJQb2ludGVycyh1LHQsaSkpLG4mJm4uYmluZCgpLG8mJihvLmJpbmQoKSxvLnNldFZlcnRleEF0dHJpYlBvaW50ZXJzKHUsdCxpKSksYy5jdXJyZW50TnVtQXR0cmlidXRlcz1sfSxici5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMudmFvJiYodGhpcy5jb250ZXh0LmV4dFZlcnRleEFycmF5T2JqZWN0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsKX07dmFyIF9yPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dC5nbDt0aGlzLnByb2dyYW09YS5jcmVhdGVQcm9ncmFtKCk7dmFyIG89cj9yLmRlZmluZXMoKTpbXTtpJiZvLnB1c2goIiNkZWZpbmUgT1ZFUkRSQVdfSU5TUEVDVE9SOyIpO3ZhciBzPW8uY29uY2F0KFllLmZyYWdtZW50U291cmNlLGUuZnJhZ21lbnRTb3VyY2UpLmpvaW4oIlxuIiksbD1vLmNvbmNhdChZZS52ZXJ0ZXhTb3VyY2UsZS52ZXJ0ZXhTb3VyY2UpLmpvaW4oIlxuIiksYz1hLmNyZWF0ZVNoYWRlcihhLkZSQUdNRU5UX1NIQURFUik7aWYoYS5pc0NvbnRleHRMb3N0KCkpdGhpcy5mYWlsZWRUb0NyZWF0ZT0hMDtlbHNle2Euc2hhZGVyU291cmNlKGMscyksYS5jb21waWxlU2hhZGVyKGMpLGEuYXR0YWNoU2hhZGVyKHRoaXMucHJvZ3JhbSxjKTt2YXIgdT1hLmNyZWF0ZVNoYWRlcihhLlZFUlRFWF9TSEFERVIpO2lmKGEuaXNDb250ZXh0TG9zdCgpKXRoaXMuZmFpbGVkVG9DcmVhdGU9ITA7ZWxzZXthLnNoYWRlclNvdXJjZSh1LGwpLGEuY29tcGlsZVNoYWRlcih1KSxhLmF0dGFjaFNoYWRlcih0aGlzLnByb2dyYW0sdSk7Zm9yKHZhciBmPXI/ci5sYXlvdXRBdHRyaWJ1dGVzOltdLGg9MDtoPGYubGVuZ3RoO2grKylhLmJpbmRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0saCxmW2hdLm5hbWUpO2EubGlua1Byb2dyYW0odGhpcy5wcm9ncmFtKSxhLmRlbGV0ZVNoYWRlcih1KSxhLmRlbGV0ZVNoYWRlcihjKSx0aGlzLm51bUF0dHJpYnV0ZXM9YS5nZXRQcm9ncmFtUGFyYW1ldGVyKHRoaXMucHJvZ3JhbSxhLkFDVElWRV9BVFRSSUJVVEVTKSx0aGlzLmF0dHJpYnV0ZXM9e307Zm9yKHZhciBwPXt9LGQ9MDtkPHRoaXMubnVtQXR0cmlidXRlcztkKyspe3ZhciBtPWEuZ2V0QWN0aXZlQXR0cmliKHRoaXMucHJvZ3JhbSxkKTttJiYodGhpcy5hdHRyaWJ1dGVzW20ubmFtZV09YS5nZXRBdHRyaWJMb2NhdGlvbih0aGlzLnByb2dyYW0sbS5uYW1lKSl9Zm9yKHZhciBnPWEuZ2V0UHJvZ3JhbVBhcmFtZXRlcih0aGlzLnByb2dyYW0sYS5BQ1RJVkVfVU5JRk9STVMpLHY9MDt2PGc7disrKXt2YXIgeT1hLmdldEFjdGl2ZVVuaWZvcm0odGhpcy5wcm9ncmFtLHYpO3kmJihwW3kubmFtZV09YS5nZXRVbmlmb3JtTG9jYXRpb24odGhpcy5wcm9ncmFtLHkubmFtZSkpfXRoaXMuZml4ZWRVbmlmb3Jtcz1uKHQscCksdGhpcy5iaW5kZXJVbmlmb3Jtcz1yP3IuZ2V0VW5pZm9ybXModCxwKTpbXX19fTtmdW5jdGlvbiB3cih0LGUscil7dmFyIG49MS9wZShyLDEsZS50cmFuc2Zvcm0udGlsZVpvb20pLGk9TWF0aC5wb3coMixyLnRpbGVJRC5vdmVyc2NhbGVkWiksYT1yLnRpbGVTaXplKk1hdGgucG93KDIsZS50cmFuc2Zvcm0udGlsZVpvb20pL2ksbz1hKihyLnRpbGVJRC5jYW5vbmljYWwueCtyLnRpbGVJRC53cmFwKmkpLHM9YSpyLnRpbGVJRC5jYW5vbmljYWwueTtyZXR1cm57dV9pbWFnZTowLHVfdGV4c2l6ZTpyLmltYWdlQXRsYXNUZXh0dXJlLnNpemUsdV9zY2FsZTpbbix0LmZyb21TY2FsZSx0LnRvU2NhbGVdLHVfZmFkZTp0LnQsdV9waXhlbF9jb29yZF91cHBlcjpbbz4+MTYscz4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1Jm8sNjU1MzUmc119fV9yLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMsdSxmLGgscCxkLG0pe3ZhciBnLHY9dC5nbDtpZighdGhpcy5mYWlsZWRUb0NyZWF0ZSl7Zm9yKHZhciB5IGluIHQucHJvZ3JhbS5zZXQodGhpcy5wcm9ncmFtKSx0LnNldERlcHRoTW9kZShyKSx0LnNldFN0ZW5jaWxNb2RlKG4pLHQuc2V0Q29sb3JNb2RlKGkpLHQuc2V0Q3VsbEZhY2UoYSksdGhpcy5maXhlZFVuaWZvcm1zKXRoaXMuZml4ZWRVbmlmb3Jtc1t5XS5zZXQob1t5XSk7cCYmcC5zZXRVbmlmb3Jtcyh0LHRoaXMuYmluZGVyVW5pZm9ybXMsZix7em9vbTpofSk7Zm9yKHZhciB4PShnPXt9LGdbdi5MSU5FU109MixnW3YuVFJJQU5HTEVTXT0zLGdbdi5MSU5FX1NUUklQXT0xLGcpW2VdLGI9MCxfPXUuZ2V0KCk7YjxfLmxlbmd0aDtiKz0xKXt2YXIgdz1fW2JdLFQ9dy52YW9zfHwody52YW9zPXt9KTsoVFtzXXx8KFRbc109bmV3IGJyKSkuYmluZCh0LHRoaXMsbCxwP3AuZ2V0UGFpbnRWZXJ0ZXhCdWZmZXJzKCk6W10sYyx3LnZlcnRleE9mZnNldCxkLG0pLHYuZHJhd0VsZW1lbnRzKGUsdy5wcmltaXRpdmVMZW5ndGgqeCx2LlVOU0lHTkVEX1NIT1JULHcucHJpbWl0aXZlT2Zmc2V0KngqMil9fX07dmFyIFRyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXIuc3R5bGUubGlnaHQsbz1hLnByb3BlcnRpZXMuZ2V0KCJwb3NpdGlvbiIpLHM9W28ueCxvLnksby56XSxsPXQuY3JlYXRlJDEoKTsidmlld3BvcnQiPT09YS5wcm9wZXJ0aWVzLmdldCgiYW5jaG9yIikmJnQuZnJvbVJvdGF0aW9uKGwsLXIudHJhbnNmb3JtLmFuZ2xlKSx0LnRyYW5zZm9ybU1hdDMocyxzLGwpO3ZhciBjPWEucHJvcGVydGllcy5nZXQoImNvbG9yIik7cmV0dXJue3VfbWF0cml4OmUsdV9saWdodHBvczpzLHVfbGlnaHRpbnRlbnNpdHk6YS5wcm9wZXJ0aWVzLmdldCgiaW50ZW5zaXR5IiksdV9saWdodGNvbG9yOltjLnIsYy5nLGMuYl0sdV92ZXJ0aWNhbF9ncmFkaWVudDorbix1X29wYWNpdHk6aX19LGtyPWZ1bmN0aW9uKGUscixuLGksYSxvLHMpe3JldHVybiB0LmV4dGVuZChUcihlLHIsbixpKSx3cihvLHIscykse3VfaGVpZ2h0X2ZhY3RvcjotTWF0aC5wb3coMixhLm92ZXJzY2FsZWRaKS9zLnRpbGVTaXplLzh9KX0sQXI9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSxNcj1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4gdC5leHRlbmQoQXIoZSksd3IobixyLGkpKX0sU3I9ZnVuY3Rpb24odCxlKXtyZXR1cm57dV9tYXRyaXg6dCx1X3dvcmxkOmV9fSxFcj1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiB0LmV4dGVuZChNcihlLHIsbixpKSx7dV93b3JsZDphfSl9LExyPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhLG8scz1lLnRyYW5zZm9ybTtpZigibWFwIj09PWkucGFpbnQuZ2V0KCJjaXJjbGUtcGl0Y2gtYWxpZ25tZW50Iikpe3ZhciBsPXBlKG4sMSxzLnpvb20pO2E9ITAsbz1bbCxsXX1lbHNlIGE9ITEsbz1zLnBpeGVsc1RvR0xVbml0cztyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3NjYWxlX3dpdGhfbWFwOisoIm1hcCI9PT1pLnBhaW50LmdldCgiY2lyY2xlLXBpdGNoLXNjYWxlIikpLHVfbWF0cml4OmUudHJhbnNsYXRlUG9zTWF0cml4KHIucG9zTWF0cml4LG4saS5wYWludC5nZXQoImNpcmNsZS10cmFuc2xhdGUiKSxpLnBhaW50LmdldCgiY2lyY2xlLXRyYW5zbGF0ZS1hbmNob3IiKSksdV9waXRjaF93aXRoX21hcDorYSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2V4dHJ1ZGVfc2NhbGU6b319LENyPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1wZShyLDEsZS56b29tKSxpPU1hdGgucG93KDIsZS56b29tLXIudGlsZUlELm92ZXJzY2FsZWRaKSxhPXIudGlsZUlELm92ZXJzY2FsZUZhY3RvcigpO3JldHVybnt1X21hdHJpeDp0LHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTplLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV9waXhlbHNfdG9fdGlsZV91bml0czpuLHVfZXh0cnVkZV9zY2FsZTpbZS5waXhlbHNUb0dMVW5pdHNbMF0vKG4qaSksZS5waXhlbHNUb0dMVW5pdHNbMV0vKG4qaSldLHVfb3ZlcnNjYWxlX2ZhY3RvcjphfX0sUHI9ZnVuY3Rpb24odCxlLHIpe3JldHVybnt1X21hdHJpeDp0LHVfaW52X21hdHJpeDplLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpyLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2UsdV92aWV3cG9ydF9zaXplOltyLndpZHRoLHIuaGVpZ2h0XX19LElyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdm9pZCAwPT09ciYmKHI9MSkse3VfbWF0cml4OnQsdV9jb2xvcjplLHVfb3ZlcmxheTowLHVfb3ZlcmxheV9zY2FsZTpyfX0sT3I9ZnVuY3Rpb24odCl7cmV0dXJue3VfbWF0cml4OnR9fSx6cj1mdW5jdGlvbih0LGUscixuKXtyZXR1cm57dV9tYXRyaXg6dCx1X2V4dHJ1ZGVfc2NhbGU6cGUoZSwxLHIpLHVfaW50ZW5zaXR5Om59fTtmdW5jdGlvbiBEcihlLHIpe3ZhciBuPU1hdGgucG93KDIsci5jYW5vbmljYWwueiksaT1yLmNhbm9uaWNhbC55O3JldHVybltuZXcgdC5NZXJjYXRvckNvb3JkaW5hdGUoMCxpL24pLnRvTG5nTGF0KCkubGF0LG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZSgwLChpKzEpL24pLnRvTG5nTGF0KCkubGF0XX12YXIgUnI9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPWUudHJhbnNmb3JtO3JldHVybnt1X21hdHJpeDpVcihlLHIsbiksdV9yYXRpbzoxL3BlKHIsMSxpLnpvb20pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLHVfdW5pdHNfdG9fcGl4ZWxzOlsxL2kucGl4ZWxzVG9HTFVuaXRzWzBdLDEvaS5waXhlbHNUb0dMVW5pdHNbMV1dfX0sRnI9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmV4dGVuZChScihlLHIsbikse3VfaW1hZ2U6MH0pfSxCcj1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT1lLnRyYW5zZm9ybSxvPWpyKHIsYSk7cmV0dXJue3VfbWF0cml4OlVyKGUscixuKSx1X3RleHNpemU6ci5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLHVfcmF0aW86MS9wZShyLDEsYS56b29tKSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2ltYWdlOjAsdV9zY2FsZTpbbyxpLmZyb21TY2FsZSxpLnRvU2NhbGVdLHVfZmFkZTppLnQsdV91bml0c190b19waXhlbHM6WzEvYS5waXhlbHNUb0dMVW5pdHNbMF0sMS9hLnBpeGVsc1RvR0xVbml0c1sxXV19fSxOcj1mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvPWUudHJhbnNmb3JtLHM9ZS5saW5lQXRsYXMsbD1qcihyLG8pLGM9InJvdW5kIj09PW4ubGF5b3V0LmdldCgibGluZS1jYXAiKSx1PXMuZ2V0RGFzaChpLmZyb20sYyksZj1zLmdldERhc2goaS50byxjKSxoPXUud2lkdGgqYS5mcm9tU2NhbGUscD1mLndpZHRoKmEudG9TY2FsZTtyZXR1cm4gdC5leHRlbmQoUnIoZSxyLG4pLHt1X3BhdHRlcm5zY2FsZV9hOltsL2gsLXUuaGVpZ2h0LzJdLHVfcGF0dGVybnNjYWxlX2I6W2wvcCwtZi5oZWlnaHQvMl0sdV9zZGZnYW1tYTpzLndpZHRoLygyNTYqTWF0aC5taW4oaCxwKSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykvMix1X2ltYWdlOjAsdV90ZXhfeV9hOnUueSx1X3RleF95X2I6Zi55LHVfbWl4OmEudH0pfTtmdW5jdGlvbiBqcih0LGUpe3JldHVybiAxL3BlKHQsMSxlLnRpbGVab29tKX1mdW5jdGlvbiBVcih0LGUscil7cmV0dXJuIHQudHJhbnNsYXRlUG9zTWF0cml4KGUudGlsZUlELnBvc01hdHJpeCxlLHIucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZSIpLHIucGFpbnQuZ2V0KCJsaW5lLXRyYW5zbGF0ZS1hbmNob3IiKSl9dmFyIFZyPWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue3VfbWF0cml4OnQsdV90bF9wYXJlbnQ6ZSx1X3NjYWxlX3BhcmVudDpyLHVfYnVmZmVyX3NjYWxlOjEsdV9mYWRlX3Q6bi5taXgsdV9vcGFjaXR5Om4ub3BhY2l0eSppLnBhaW50LmdldCgicmFzdGVyLW9wYWNpdHkiKSx1X2ltYWdlMDowLHVfaW1hZ2UxOjEsdV9icmlnaHRuZXNzX2xvdzppLnBhaW50LmdldCgicmFzdGVyLWJyaWdodG5lc3MtbWluIiksdV9icmlnaHRuZXNzX2hpZ2g6aS5wYWludC5nZXQoInJhc3Rlci1icmlnaHRuZXNzLW1heCIpLHVfc2F0dXJhdGlvbl9mYWN0b3I6KG89aS5wYWludC5nZXQoInJhc3Rlci1zYXR1cmF0aW9uIiksbz4wPzEtMS8oMS4wMDEtbyk6LW8pLHVfY29udHJhc3RfZmFjdG9yOihhPWkucGFpbnQuZ2V0KCJyYXN0ZXItY29udHJhc3QiKSxhPjA/MS8oMS1hKToxK2EpLHVfc3Bpbl93ZWlnaHRzOkhyKGkucGFpbnQuZ2V0KCJyYXN0ZXItaHVlLXJvdGF0ZSIpKX07dmFyIGEsb307ZnVuY3Rpb24gSHIodCl7dCo9TWF0aC5QSS8xODA7dmFyIGU9TWF0aC5zaW4odCkscj1NYXRoLmNvcyh0KTtyZXR1cm5bKDIqcisxKS8zLCgtTWF0aC5zcXJ0KDMpKmUtcisxKS8zLChNYXRoLnNxcnQoMykqZS1yKzEpLzNdfXZhciBxcixHcj1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1pLnRyYW5zZm9ybTtyZXR1cm57dV9pc19zaXplX3pvb21fY29uc3RhbnQ6KygiY29uc3RhbnQiPT09dHx8InNvdXJjZSI9PT10KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDorKCJjb25zdGFudCI9PT10fHwiY2FtZXJhIj09PXQpLHVfc2l6ZV90OmU/ZS51U2l6ZVQ6MCx1X3NpemU6ZT9lLnVTaXplOjAsdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOnUuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSx1X3BpdGNoOnUucGl0Y2gvMzYwKjIqTWF0aC5QSSx1X3JvdGF0ZV9zeW1ib2w6K3IsdV9hc3BlY3RfcmF0aW86dS53aWR0aC91LmhlaWdodCx1X2ZhZGVfY2hhbmdlOmkub3B0aW9ucy5mYWRlRHVyYXRpb24/aS5zeW1ib2xGYWRlQ2hhbmdlOjEsdV9tYXRyaXg6YSx1X2xhYmVsX3BsYW5lX21hdHJpeDpvLHVfY29vcmRfbWF0cml4OnMsdV9pc190ZXh0OitsLHVfcGl0Y2hfd2l0aF9tYXA6K24sdV90ZXhzaXplOmMsdV90ZXh0dXJlOjB9fSxZcj1mdW5jdGlvbihlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPWEudHJhbnNmb3JtO3JldHVybiB0LmV4dGVuZChHcihlLHIsbixpLGEsbyxzLGwsYyx1KSx7dV9nYW1tYV9zY2FsZTppP01hdGguY29zKGguX3BpdGNoKSpoLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U6MSx1X2RldmljZV9waXhlbF9yYXRpbzp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx1X2lzX2hhbG86K2Z9KX0sV3I9ZnVuY3Rpb24oZSxyLG4saSxhLG8scyxsLGMsdSl7cmV0dXJuIHQuZXh0ZW5kKFlyKGUscixuLGksYSxvLHMsbCwhMCxjLCEwKSx7dV90ZXhzaXplX2ljb246dSx1X3RleHR1cmVfaWNvbjoxfSl9LFhyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57dV9tYXRyaXg6dCx1X29wYWNpdHk6ZSx1X2NvbG9yOnJ9fSxacj1mdW5jdGlvbihlLHIsbixpLGEsbyl7cmV0dXJuIHQuZXh0ZW5kKGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuaW1hZ2VNYW5hZ2VyLmdldFBhdHRlcm4odC5mcm9tLnRvU3RyaW5nKCkpLGE9ci5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LnRvLnRvU3RyaW5nKCkpLG89ci5pbWFnZU1hbmFnZXIuZ2V0UGl4ZWxTaXplKCkscz1vLndpZHRoLGw9by5oZWlnaHQsYz1NYXRoLnBvdygyLG4udGlsZUlELm92ZXJzY2FsZWRaKSx1PW4udGlsZVNpemUqTWF0aC5wb3coMixyLnRyYW5zZm9ybS50aWxlWm9vbSkvYyxmPXUqKG4udGlsZUlELmNhbm9uaWNhbC54K24udGlsZUlELndyYXAqYyksaD11Km4udGlsZUlELmNhbm9uaWNhbC55O3JldHVybnt1X2ltYWdlOjAsdV9wYXR0ZXJuX3RsX2E6aS50bCx1X3BhdHRlcm5fYnJfYTppLmJyLHVfcGF0dGVybl90bF9iOmEudGwsdV9wYXR0ZXJuX2JyX2I6YS5icix1X3RleHNpemU6W3MsbF0sdV9taXg6ZS50LHVfcGF0dGVybl9zaXplX2E6aS5kaXNwbGF5U2l6ZSx1X3BhdHRlcm5fc2l6ZV9iOmEuZGlzcGxheVNpemUsdV9zY2FsZV9hOmUuZnJvbVNjYWxlLHVfc2NhbGVfYjplLnRvU2NhbGUsdV90aWxlX3VuaXRzX3RvX3BpeGVsczoxL3BlKG4sMSxyLnRyYW5zZm9ybS50aWxlWm9vbSksdV9waXhlbF9jb29yZF91cHBlcjpbZj4+MTYsaD4+MTZdLHVfcGl4ZWxfY29vcmRfbG93ZXI6WzY1NTM1JmYsNjU1MzUmaF19fShpLG8sbixhKSx7dV9tYXRyaXg6ZSx1X29wYWNpdHk6cn0pfSxKcj17ZmlsbEV4dHJ1c2lvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSl9fSxmaWxsRXh0cnVzaW9uUGF0dGVybjpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2xpZ2h0cG9zOm5ldyB0LlVuaWZvcm0zZihlLHIudV9saWdodHBvcyksdV9saWdodGludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfbGlnaHRpbnRlbnNpdHkpLHVfbGlnaHRjb2xvcjpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfbGlnaHRjb2xvciksdV92ZXJ0aWNhbF9ncmFkaWVudDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdmVydGljYWxfZ3JhZGllbnQpLHVfaGVpZ2h0X2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaGVpZ2h0X2ZhY3RvciksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0sZmlsbDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGZpbGxQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxmaWxsT3V0bGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3dvcmxkOm5ldyB0LlVuaWZvcm0yZihlLHIudV93b3JsZCl9fSxmaWxsT3V0bGluZVBhdHRlcm46ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV93b3JsZDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfd29ybGQpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleHNpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RleHNpemUpLHVfcGl4ZWxfY29vcmRfdXBwZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX3VwcGVyKSx1X3BpeGVsX2Nvb3JkX2xvd2VyOm5ldyB0LlVuaWZvcm0yZihlLHIudV9waXhlbF9jb29yZF9sb3dlciksdV9zY2FsZTpuZXcgdC5Vbmlmb3JtM2YoZSxyLnVfc2NhbGUpLHVfZmFkZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZSl9fSxjaXJjbGU6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3NjYWxlX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9zY2FsZV93aXRoX21hcCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfZXh0cnVkZV9zY2FsZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfZXh0cnVkZV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCl9fSxjb2xsaXNpb25Cb3g6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpeGVsc190b190aWxlX3VuaXRzOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXhlbHNfdG9fdGlsZV91bml0cyksdV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9leHRydWRlX3NjYWxlKSx1X292ZXJzY2FsZV9mYWN0b3I6bmV3IHQuVW5pZm9ybTFmKGUsci51X292ZXJzY2FsZV9mYWN0b3IpfX0sY29sbGlzaW9uQ2lyY2xlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW52X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfaW52X21hdHJpeCksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3ZpZXdwb3J0X3NpemU6bmV3IHQuVW5pZm9ybTJmKGUsci51X3ZpZXdwb3J0X3NpemUpfX0sZGVidWc6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9jb2xvcjpuZXcgdC5Vbmlmb3JtQ29sb3IoZSxyLnVfY29sb3IpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfb3ZlcmxheTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfb3ZlcmxheSksdV9vdmVybGF5X3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9vdmVybGF5X3NjYWxlKX19LGNsaXBwaW5nTWFzazpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXA6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9leHRydWRlX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9leHRydWRlX3NjYWxlKSx1X2ludGVuc2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfaW50ZW5zaXR5KSx1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KX19LGhlYXRtYXBUZXh0dXJlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfd29ybGQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3dvcmxkKSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9jb2xvcl9yYW1wOm5ldyB0LlVuaWZvcm0xaShlLHIudV9jb2xvcl9yYW1wKSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpfX0saGlsbHNoYWRlOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X2xhdHJhbmdlOm5ldyB0LlVuaWZvcm0yZihlLHIudV9sYXRyYW5nZSksdV9saWdodDpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfbGlnaHQpLHVfc2hhZG93Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9zaGFkb3cpLHVfaGlnaGxpZ2h0Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9oaWdobGlnaHQpLHVfYWNjZW50Om5ldyB0LlVuaWZvcm1Db2xvcihlLHIudV9hY2NlbnQpfX0saGlsbHNoYWRlUHJlcGFyZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X2ltYWdlOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pbWFnZSksdV9kaW1lbnNpb246bmV3IHQuVW5pZm9ybTJmKGUsci51X2RpbWVuc2lvbiksdV96b29tOm5ldyB0LlVuaWZvcm0xZihlLHIudV96b29tKSx1X21heHpvb206bmV3IHQuVW5pZm9ybTFmKGUsci51X21heHpvb20pLHVfdW5wYWNrOm5ldyB0LlVuaWZvcm00ZihlLHIudV91bnBhY2spfX0sbGluZTpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9yYXRpbyksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV91bml0c190b19waXhlbHM6bmV3IHQuVW5pZm9ybTJmKGUsci51X3VuaXRzX3RvX3BpeGVscyl9fSxsaW5lR3JhZGllbnQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKX19LGxpbmVQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3VuaXRzX3RvX3BpeGVsczpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdW5pdHNfdG9fcGl4ZWxzKSx1X3NjYWxlOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zY2FsZSksdV9mYWRlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlKX19LGxpbmVTREY6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcmF0aW8pLHVfZGV2aWNlX3BpeGVsX3JhdGlvOm5ldyB0LlVuaWZvcm0xZihlLHIudV9kZXZpY2VfcGl4ZWxfcmF0aW8pLHVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0yZihlLHIudV91bml0c190b19waXhlbHMpLHVfcGF0dGVybnNjYWxlX2E6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5zY2FsZV9hKSx1X3BhdHRlcm5zY2FsZV9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuc2NhbGVfYiksdV9zZGZnYW1tYTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2RmZ2FtbWEpLHVfaW1hZ2U6bmV3IHQuVW5pZm9ybTFpKGUsci51X2ltYWdlKSx1X3RleF95X2E6bmV3IHQuVW5pZm9ybTFmKGUsci51X3RleF95X2EpLHVfdGV4X3lfYjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfdGV4X3lfYiksdV9taXg6bmV3IHQuVW5pZm9ybTFmKGUsci51X21peCl9fSxyYXN0ZXI6ZnVuY3Rpb24oZSxyKXtyZXR1cm57dV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV90bF9wYXJlbnQ6bmV3IHQuVW5pZm9ybTJmKGUsci51X3RsX3BhcmVudCksdV9zY2FsZV9wYXJlbnQ6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX3BhcmVudCksdV9idWZmZXJfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2J1ZmZlcl9zY2FsZSksdV9mYWRlX3Q6bmV3IHQuVW5pZm9ybTFmKGUsci51X2ZhZGVfdCksdV9vcGFjaXR5Om5ldyB0LlVuaWZvcm0xZihlLHIudV9vcGFjaXR5KSx1X2ltYWdlMDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UwKSx1X2ltYWdlMTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UxKSx1X2JyaWdodG5lc3NfbG93Om5ldyB0LlVuaWZvcm0xZihlLHIudV9icmlnaHRuZXNzX2xvdyksdV9icmlnaHRuZXNzX2hpZ2g6bmV3IHQuVW5pZm9ybTFmKGUsci51X2JyaWdodG5lc3NfaGlnaCksdV9zYXR1cmF0aW9uX2ZhY3RvcjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2F0dXJhdGlvbl9mYWN0b3IpLHVfY29udHJhc3RfZmFjdG9yOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jb250cmFzdF9mYWN0b3IpLHVfc3Bpbl93ZWlnaHRzOm5ldyB0LlVuaWZvcm0zZihlLHIudV9zcGluX3dlaWdodHMpfX0sc3ltYm9sSWNvbjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKX19LHN5bWJvbFNERjpmdW5jdGlvbihlLHIpe3JldHVybnt1X2lzX3NpemVfem9vbV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV96b29tX2NvbnN0YW50KSx1X2lzX3NpemVfZmVhdHVyZV9jb25zdGFudDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50KSx1X3NpemVfdDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZV90KSx1X3NpemU6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NpemUpLHVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfY2FtZXJhX3RvX2NlbnRlcl9kaXN0YW5jZSksdV9waXRjaDpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfcGl0Y2gpLHVfcm90YXRlX3N5bWJvbDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcm90YXRlX3N5bWJvbCksdV9hc3BlY3RfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2FzcGVjdF9yYXRpbyksdV9mYWRlX2NoYW5nZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZmFkZV9jaGFuZ2UpLHVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfbGFiZWxfcGxhbmVfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9sYWJlbF9wbGFuZV9tYXRyaXgpLHVfY29vcmRfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9jb29yZF9tYXRyaXgpLHVfaXNfdGV4dDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaXNfdGV4dCksdV9waXRjaF93aXRoX21hcDpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfcGl0Y2hfd2l0aF9tYXApLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV90ZXh0dXJlOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlKSx1X2dhbW1hX3NjYWxlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9nYW1tYV9zY2FsZSksdV9kZXZpY2VfcGl4ZWxfcmF0aW86bmV3IHQuVW5pZm9ybTFmKGUsci51X2RldmljZV9waXhlbF9yYXRpbyksdV9pc19oYWxvOm5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19oYWxvKX19LHN5bWJvbFRleHRBbmRJY29uOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfaXNfc2l6ZV96b29tX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX3pvb21fY29uc3RhbnQpLHVfaXNfc2l6ZV9mZWF0dXJlX2NvbnN0YW50Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc19zaXplX2ZlYXR1cmVfY29uc3RhbnQpLHVfc2l6ZV90Om5ldyB0LlVuaWZvcm0xZihlLHIudV9zaXplX3QpLHVfc2l6ZTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2l6ZSksdV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9jYW1lcmFfdG9fY2VudGVyX2Rpc3RhbmNlKSx1X3BpdGNoOm5ldyB0LlVuaWZvcm0xZihlLHIudV9waXRjaCksdV9yb3RhdGVfc3ltYm9sOm5ldyB0LlVuaWZvcm0xaShlLHIudV9yb3RhdGVfc3ltYm9sKSx1X2FzcGVjdF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfYXNwZWN0X3JhdGlvKSx1X2ZhZGVfY2hhbmdlOm5ldyB0LlVuaWZvcm0xZihlLHIudV9mYWRlX2NoYW5nZSksdV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X21hdHJpeCksdV9sYWJlbF9wbGFuZV9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2xhYmVsX3BsYW5lX21hdHJpeCksdV9jb29yZF9tYXRyaXg6bmV3IHQuVW5pZm9ybU1hdHJpeDRmKGUsci51X2Nvb3JkX21hdHJpeCksdV9pc190ZXh0Om5ldyB0LlVuaWZvcm0xaShlLHIudV9pc190ZXh0KSx1X3BpdGNoX3dpdGhfbWFwOm5ldyB0LlVuaWZvcm0xaShlLHIudV9waXRjaF93aXRoX21hcCksdV90ZXhzaXplOm5ldyB0LlVuaWZvcm0yZihlLHIudV90ZXhzaXplKSx1X3RleHNpemVfaWNvbjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZV9pY29uKSx1X3RleHR1cmU6bmV3IHQuVW5pZm9ybTFpKGUsci51X3RleHR1cmUpLHVfdGV4dHVyZV9pY29uOm5ldyB0LlVuaWZvcm0xaShlLHIudV90ZXh0dXJlX2ljb24pLHVfZ2FtbWFfc2NhbGU6bmV3IHQuVW5pZm9ybTFmKGUsci51X2dhbW1hX3NjYWxlKSx1X2RldmljZV9waXhlbF9yYXRpbzpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfZGV2aWNlX3BpeGVsX3JhdGlvKSx1X2lzX2hhbG86bmV3IHQuVW5pZm9ybTFpKGUsci51X2lzX2hhbG8pfX0sYmFja2dyb3VuZDpmdW5jdGlvbihlLHIpe3JldHVybnt1X21hdHJpeDpuZXcgdC5Vbmlmb3JtTWF0cml4NGYoZSxyLnVfbWF0cml4KSx1X29wYWNpdHk6bmV3IHQuVW5pZm9ybTFmKGUsci51X29wYWNpdHkpLHVfY29sb3I6bmV3IHQuVW5pZm9ybUNvbG9yKGUsci51X2NvbG9yKX19LGJhY2tncm91bmRQYXR0ZXJuOmZ1bmN0aW9uKGUscil7cmV0dXJue3VfbWF0cml4Om5ldyB0LlVuaWZvcm1NYXRyaXg0ZihlLHIudV9tYXRyaXgpLHVfb3BhY2l0eTpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfb3BhY2l0eSksdV9pbWFnZTpuZXcgdC5Vbmlmb3JtMWkoZSxyLnVfaW1hZ2UpLHVfcGF0dGVybl90bF9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3RsX2EpLHVfcGF0dGVybl9icl9hOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX2JyX2EpLHVfcGF0dGVybl90bF9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX3RsX2IpLHVfcGF0dGVybl9icl9iOm5ldyB0LlVuaWZvcm0yZihlLHIudV9wYXR0ZXJuX2JyX2IpLHVfdGV4c2l6ZTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfdGV4c2l6ZSksdV9taXg6bmV3IHQuVW5pZm9ybTFmKGUsci51X21peCksdV9wYXR0ZXJuX3NpemVfYTpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGF0dGVybl9zaXplX2EpLHVfcGF0dGVybl9zaXplX2I6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BhdHRlcm5fc2l6ZV9iKSx1X3NjYWxlX2E6bmV3IHQuVW5pZm9ybTFmKGUsci51X3NjYWxlX2EpLHVfc2NhbGVfYjpuZXcgdC5Vbmlmb3JtMWYoZSxyLnVfc2NhbGVfYiksdV9waXhlbF9jb29yZF91cHBlcjpuZXcgdC5Vbmlmb3JtMmYoZSxyLnVfcGl4ZWxfY29vcmRfdXBwZXIpLHVfcGl4ZWxfY29vcmRfbG93ZXI6bmV3IHQuVW5pZm9ybTJmKGUsci51X3BpeGVsX2Nvb3JkX2xvd2VyKSx1X3RpbGVfdW5pdHNfdG9fcGl4ZWxzOm5ldyB0LlVuaWZvcm0xZihlLHIudV90aWxlX3VuaXRzX3RvX3BpeGVscyl9fX07ZnVuY3Rpb24gS3IoZSxyLG4saSxhLG8scyl7Zm9yKHZhciBsPWUuY29udGV4dCxjPWwuZ2wsdT1lLnVzZVByb2dyYW0oImNvbGxpc2lvbkJveCIpLGY9W10saD0wLHA9MCxkPTA7ZDxpLmxlbmd0aDtkKyspe3ZhciBtPWlbZF0sZz1yLmdldFRpbGUobSksdj1nLmdldEJ1Y2tldChuKTtpZih2KXt2YXIgeT1tLnBvc01hdHJpeDswPT09YVswXSYmMD09PWFbMV18fCh5PWUudHJhbnNsYXRlUG9zTWF0cml4KG0ucG9zTWF0cml4LGcsYSxvKSk7dmFyIHg9cz92LnRleHRDb2xsaXNpb25Cb3g6di5pY29uQ29sbGlzaW9uQm94LGI9di5jb2xsaXNpb25DaXJjbGVBcnJheTtpZihiLmxlbmd0aD4wKXt2YXIgXz10LmNyZWF0ZSgpLHc9eTt0Lm11bChfLHYucGxhY2VtZW50SW52UHJvak1hdHJpeCxlLnRyYW5zZm9ybS5nbENvb3JkTWF0cml4KSx0Lm11bChfLF8sdi5wbGFjZW1lbnRWaWV3cG9ydE1hdHJpeCksZi5wdXNoKHtjaXJjbGVBcnJheTpiLGNpcmNsZU9mZnNldDpwLHRyYW5zZm9ybTp3LGludlRyYW5zZm9ybTpffSkscD1oKz1iLmxlbmd0aC80fXgmJnUuZHJhdyhsLGMuTElORVMsQXQuZGlzYWJsZWQsTXQuZGlzYWJsZWQsZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksRXQuZGlzYWJsZWQsQ3IoeSxlLnRyYW5zZm9ybSxnKSxuLmlkLHgubGF5b3V0VmVydGV4QnVmZmVyLHguaW5kZXhCdWZmZXIseC5zZWdtZW50cyxudWxsLGUudHJhbnNmb3JtLnpvb20sbnVsbCxudWxsLHguY29sbGlzaW9uVmVydGV4QnVmZmVyKX19aWYocyYmZi5sZW5ndGgpe3ZhciBUPWUudXNlUHJvZ3JhbSgiY29sbGlzaW9uQ2lyY2xlIiksaz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJmMWYyaTE2O2sucmVzaXplKDQqaCksay5fdHJpbSgpO2Zvcih2YXIgQT0wLE09MCxTPWY7TTxTLmxlbmd0aDtNKz0xKWZvcih2YXIgRT1TW01dLEw9MDtMPEUuY2lyY2xlQXJyYXkubGVuZ3RoLzQ7TCsrKXt2YXIgQz00KkwsUD1FLmNpcmNsZUFycmF5W0MrMF0sST1FLmNpcmNsZUFycmF5W0MrMV0sTz1FLmNpcmNsZUFycmF5W0MrMl0sej1FLmNpcmNsZUFycmF5W0MrM107ay5lbXBsYWNlKEErKyxQLEksTyx6LDApLGsuZW1wbGFjZShBKyssUCxJLE8seiwxKSxrLmVtcGxhY2UoQSsrLFAsSSxPLHosMiksay5lbXBsYWNlKEErKyxQLEksTyx6LDMpfSghcXJ8fHFyLmxlbmd0aDwyKmgpJiYocXI9ZnVuY3Rpb24oZSl7dmFyIHI9MiplLG49bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQzdWk2O24ucmVzaXplKHIpLG4uX3RyaW0oKTtmb3IodmFyIGk9MDtpPHI7aSsrKXt2YXIgYT02Kmk7bi51aW50MTZbYSswXT00KmkrMCxuLnVpbnQxNlthKzFdPTQqaSsxLG4udWludDE2W2ErMl09NCppKzIsbi51aW50MTZbYSszXT00KmkrMixuLnVpbnQxNlthKzRdPTQqaSszLG4udWludDE2W2ErNV09NCppKzB9cmV0dXJuIG59KGgpKTtmb3IodmFyIEQ9bC5jcmVhdGVJbmRleEJ1ZmZlcihxciwhMCksUj1sLmNyZWF0ZVZlcnRleEJ1ZmZlcihrLHQuY29sbGlzaW9uQ2lyY2xlTGF5b3V0Lm1lbWJlcnMsITApLEY9MCxCPWY7RjxCLmxlbmd0aDtGKz0xKXt2YXIgTj1CW0ZdLGo9UHIoTi50cmFuc2Zvcm0sTi5pbnZUcmFuc2Zvcm0sZS50cmFuc2Zvcm0pO1QuZHJhdyhsLGMuVFJJQU5HTEVTLEF0LmRpc2FibGVkLE10LmRpc2FibGVkLGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLEV0LmRpc2FibGVkLGosbi5pZCxSLEQsdC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwyKk4uY2lyY2xlT2Zmc2V0LE4uY2lyY2xlQXJyYXkubGVuZ3RoLE4uY2lyY2xlQXJyYXkubGVuZ3RoLzIpLG51bGwsZS50cmFuc2Zvcm0uem9vbSxudWxsLG51bGwsbnVsbCl9Ui5kZXN0cm95KCksRC5kZXN0cm95KCl9fXZhciBRcj10LmlkZW50aXR5KG5ldyBGbG9hdDMyQXJyYXkoMTYpKTtmdW5jdGlvbiAkcihlLHIsbixpLGEsbyl7dmFyIHM9dC5nZXRBbmNob3JBbGlnbm1lbnQoZSksbD0tKHMuaG9yaXpvbnRhbEFsaWduLS41KSpyLGM9LShzLnZlcnRpY2FsQWxpZ24tLjUpKm4sdT10LmV2YWx1YXRlVmFyaWFibGVPZmZzZXQoZSxpKTtyZXR1cm4gbmV3IHQuUG9pbnQoKGwvYSt1WzBdKSpvLChjL2ErdVsxXSkqbyl9ZnVuY3Rpb24gdG4oZSxyLG4saSxhLG8scyxsLGMsdSxmKXt2YXIgaD1lLnRleHQucGxhY2VkU3ltYm9sQXJyYXkscD1lLnRleHQuZHluYW1pY0xheW91dFZlcnRleEFycmF5LGQ9ZS5pY29uLmR5bmFtaWNMYXlvdXRWZXJ0ZXhBcnJheSxtPXt9O3AuY2xlYXIoKTtmb3IodmFyIGc9MDtnPGgubGVuZ3RoO2crKyl7dmFyIHY9aC5nZXQoZykseT1lLmFsbG93VmVydGljYWxQbGFjZW1lbnQmJiF2LnBsYWNlZE9yaWVudGF0aW9uLHg9di5oaWRkZW58fCF2LmNyb3NzVGlsZUlEfHx5P251bGw6aVt2LmNyb3NzVGlsZUlEXTtpZih4KXt2YXIgYj1uZXcgdC5Qb2ludCh2LmFuY2hvclgsdi5hbmNob3JZKSxfPXRlKGIsbj9sOnMpLHc9ZWUoby5jYW1lcmFUb0NlbnRlckRpc3RhbmNlLF8uc2lnbmVkRGlzdGFuY2VGcm9tQ2FtZXJhKSxUPWEuZXZhbHVhdGVTaXplRm9yRmVhdHVyZShlLnRleHRTaXplRGF0YSx1LHYpKncvdC5PTkVfRU07biYmKFQqPWUudGlsZVBpeGVsUmF0aW8vYyk7Zm9yKHZhciBrPXgud2lkdGgsQT14LmhlaWdodCxNPSRyKHguYW5jaG9yLGssQSx4LnRleHRPZmZzZXQseC50ZXh0Qm94U2NhbGUsVCksUz1uP3RlKGIuYWRkKE0pLHMpLnBvaW50Ol8ucG9pbnQuYWRkKHI/TS5yb3RhdGUoLW8uYW5nbGUpOk0pLEU9ZS5hbGxvd1ZlcnRpY2FsUGxhY2VtZW50JiZ2LnBsYWNlZE9yaWVudGF0aW9uPT09dC5Xcml0aW5nTW9kZS52ZXJ0aWNhbD9NYXRoLlBJLzI6MCxMPTA7TDx2Lm51bUdseXBocztMKyspdC5hZGREeW5hbWljQXR0cmlidXRlcyhwLFMsRSk7ZiYmdi5hc3NvY2lhdGVkSWNvbkluZGV4Pj0wJiYobVt2LmFzc29jaWF0ZWRJY29uSW5kZXhdPXtzaGlmdGVkQW5jaG9yOlMsYW5nbGU6RX0pfWVsc2UgdWUodi5udW1HbHlwaHMscCl9aWYoZil7ZC5jbGVhcigpO2Zvcih2YXIgQz1lLmljb24ucGxhY2VkU3ltYm9sQXJyYXksUD0wO1A8Qy5sZW5ndGg7UCsrKXt2YXIgST1DLmdldChQKTtpZihJLmhpZGRlbil1ZShJLm51bUdseXBocyxkKTtlbHNle3ZhciBPPW1bUF07aWYoTylmb3IodmFyIHo9MDt6PEkubnVtR2x5cGhzO3orKyl0LmFkZER5bmFtaWNBdHRyaWJ1dGVzKGQsTy5zaGlmdGVkQW5jaG9yLE8uYW5nbGUpO2Vsc2UgdWUoSS5udW1HbHlwaHMsZCl9fWUuaWNvbi5keW5hbWljTGF5b3V0VmVydGV4QnVmZmVyLnVwZGF0ZURhdGEoZCl9ZS50ZXh0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIudXBkYXRlRGF0YShwKX1mdW5jdGlvbiBlbih0LGUscil7cmV0dXJuIHIuaWNvbnNJblRleHQmJmU/InN5bWJvbFRleHRBbmRJY29uIjp0PyJzeW1ib2xTREYiOiJzeW1ib2xJY29uIn1mdW5jdGlvbiBybihlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7Zm9yKHZhciBwPWUuY29udGV4dCxkPXAuZ2wsbT1lLnRyYW5zZm9ybSxnPSJtYXAiPT09bCx2PSJtYXAiPT09Yyx5PWcmJiJwb2ludCIhPT1uLmxheW91dC5nZXQoInN5bWJvbC1wbGFjZW1lbnQiKSx4PWcmJiF2JiYheSxiPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgic3ltYm9sLXNvcnQta2V5IikuY29uc3RhbnRPcigxKSxfPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSksdz1uLmxheW91dC5nZXQoInRleHQtdmFyaWFibGUtYW5jaG9yIiksVD1bXSxrPTAsQT1pO2s8QS5sZW5ndGg7ays9MSl7dmFyIE09QVtrXSxTPXIuZ2V0VGlsZShNKSxFPVMuZ2V0QnVja2V0KG4pO2lmKEUpe3ZhciBMPWE/RS50ZXh0OkUuaWNvbjtpZihMJiZMLnNlZ21lbnRzLmdldCgpLmxlbmd0aCl7dmFyIEM9TC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLFA9YXx8RS5zZGZJY29ucyxJPWE/RS50ZXh0U2l6ZURhdGE6RS5pY29uU2l6ZURhdGEsTz12fHwwIT09bS5waXRjaCx6PWUudXNlUHJvZ3JhbShlbihQLGEsRSksQyksRD10LmV2YWx1YXRlU2l6ZUZvclpvb20oSSxtLnpvb20pLFI9dm9pZCAwLEY9WzAsMF0sQj12b2lkIDAsTj12b2lkIDAsaj1udWxsLFU9dm9pZCAwO2lmKGEpe2lmKEI9Uy5nbHlwaEF0bGFzVGV4dHVyZSxOPWQuTElORUFSLFI9Uy5nbHlwaEF0bGFzVGV4dHVyZS5zaXplLEUuaWNvbnNJblRleHQpe0Y9Uy5pbWFnZUF0bGFzVGV4dHVyZS5zaXplLGo9Uy5pbWFnZUF0bGFzVGV4dHVyZTt2YXIgVj0iY29tcG9zaXRlIj09PUkua2luZHx8ImNhbWVyYSI9PT1JLmtpbmQ7VT1PfHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHxWP2QuTElORUFSOmQuTkVBUkVTVH19ZWxzZXt2YXIgSD0xIT09bi5sYXlvdXQuZ2V0KCJpY29uLXNpemUiKS5jb25zdGFudE9yKDApfHxFLmljb25zTmVlZExpbmVhcjtCPVMuaW1hZ2VBdGxhc1RleHR1cmUsTj1QfHxlLm9wdGlvbnMucm90YXRpbmd8fGUub3B0aW9ucy56b29taW5nfHxIfHxPP2QuTElORUFSOmQuTkVBUkVTVCxSPVMuaW1hZ2VBdGxhc1RleHR1cmUuc2l6ZX12YXIgcT1wZShTLDEsZS50cmFuc2Zvcm0uem9vbSksRz1RdChNLnBvc01hdHJpeCx2LGcsZS50cmFuc2Zvcm0scSksWT0kdChNLnBvc01hdHJpeCx2LGcsZS50cmFuc2Zvcm0scSksVz13JiZFLmhhc1RleHREYXRhKCksWD0ibm9uZSIhPT1uLmxheW91dC5nZXQoImljb24tdGV4dC1maXQiKSYmVyYmRS5oYXNJY29uRGF0YSgpO3kmJm5lKEUsTS5wb3NNYXRyaXgsZSxhLEcsWSx2LHUpO3ZhciBaPWUudHJhbnNsYXRlUG9zTWF0cml4KE0ucG9zTWF0cml4LFMsbyxzKSxKPXl8fGEmJnd8fFg/UXI6RyxLPWUudHJhbnNsYXRlUG9zTWF0cml4KFksUyxvLHMsITApLFE9UCYmMCE9PW4ucGFpbnQuZ2V0KGE/InRleHQtaGFsby13aWR0aCI6Imljb24taGFsby13aWR0aCIpLmNvbnN0YW50T3IoMSksJD17cHJvZ3JhbTp6LGJ1ZmZlcnM6TCx1bmlmb3JtVmFsdWVzOlA/RS5pY29uc0luVGV4dD9XcihJLmtpbmQsRCx4LHYsZSxaLEosSyxSLEYpOllyKEkua2luZCxELHgsdixlLFosSixLLGEsUiwhMCk6R3IoSS5raW5kLEQseCx2LGUsWixKLEssYSxSKSxhdGxhc1RleHR1cmU6QixhdGxhc1RleHR1cmVJY29uOmosYXRsYXNJbnRlcnBvbGF0aW9uOk4sYXRsYXNJbnRlcnBvbGF0aW9uSWNvbjpVLGlzU0RGOlAsaGFzSGFsbzpRfTtpZihiKWZvcih2YXIgdHQ9MCxldD1MLnNlZ21lbnRzLmdldCgpO3R0PGV0Lmxlbmd0aDt0dCs9MSl7dmFyIHJ0PWV0W3R0XTtULnB1c2goe3NlZ21lbnRzOm5ldyB0LlNlZ21lbnRWZWN0b3IoW3J0XSksc29ydEtleTpydC5zb3J0S2V5LHN0YXRlOiR9KX1lbHNlIFQucHVzaCh7c2VnbWVudHM6TC5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6JH0pfX19YiYmVC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LnNvcnRLZXktZS5zb3J0S2V5fSkpO2Zvcih2YXIgbnQ9MCxpdD1UO250PGl0Lmxlbmd0aDtudCs9MSl7dmFyIGF0PWl0W250XSxvdD1hdC5zdGF0ZTtpZihwLmFjdGl2ZVRleHR1cmUuc2V0KGQuVEVYVFVSRTApLG90LmF0bGFzVGV4dHVyZS5iaW5kKG90LmF0bGFzSW50ZXJwb2xhdGlvbixkLkNMQU1QX1RPX0VER0UpLG90LmF0bGFzVGV4dHVyZUljb24mJihwLmFjdGl2ZVRleHR1cmUuc2V0KGQuVEVYVFVSRTEpLG90LmF0bGFzVGV4dHVyZUljb24mJm90LmF0bGFzVGV4dHVyZUljb24uYmluZChvdC5hdGxhc0ludGVycG9sYXRpb25JY29uLGQuQ0xBTVBfVE9fRURHRSkpLG90LmlzU0RGKXt2YXIgc3Q9b3QudW5pZm9ybVZhbHVlcztvdC5oYXNIYWxvJiYoc3QudV9pc19oYWxvPTEsbm4ob3QuYnVmZmVycyxhdC5zZWdtZW50cyxuLGUsb3QucHJvZ3JhbSxfLGYsaCxzdCkpLHN0LnVfaXNfaGFsbz0wfW5uKG90LmJ1ZmZlcnMsYXQuc2VnbWVudHMsbixlLG90LnByb2dyYW0sXyxmLGgsb3QudW5pZm9ybVZhbHVlcyl9fWZ1bmN0aW9uIG5uKHQsZSxyLG4saSxhLG8scyxsKXt2YXIgYz1uLmNvbnRleHQsdT1jLmdsO2kuZHJhdyhjLHUuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGwsci5pZCx0LmxheW91dFZlcnRleEJ1ZmZlcix0LmluZGV4QnVmZmVyLGUsci5wYWludCxuLnRyYW5zZm9ybS56b29tLHQucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx0LmR5bmFtaWNMYXlvdXRWZXJ0ZXhCdWZmZXIsdC5vcGFjaXR5VmVydGV4QnVmZmVyKX1mdW5jdGlvbiBhbih0LGUscixuLGksYSxvKXt2YXIgcyxsLGMsdSxmLGg9dC5jb250ZXh0LmdsLHA9ci5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGQ9cCYmcC5jb25zdGFudE9yKDEpLG09ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCk7bz8obD1kJiYhci5nZXRQYWludFByb3BlcnR5KCJmaWxsLW91dGxpbmUtY29sb3IiKT8iZmlsbE91dGxpbmVQYXR0ZXJuIjoiZmlsbE91dGxpbmUiLHM9aC5MSU5FUyk6KGw9ZD8iZmlsbFBhdHRlcm4iOiJmaWxsIixzPWguVFJJQU5HTEVTKTtmb3IodmFyIGc9MCx2PW47Zzx2Lmxlbmd0aDtnKz0xKXt2YXIgeT12W2ddLHg9ZS5nZXRUaWxlKHkpO2lmKCFkfHx4LnBhdHRlcm5zTG9hZGVkKCkpe3ZhciBiPXguZ2V0QnVja2V0KHIpO2lmKGIpe3ZhciBfPWIucHJvZ3JhbUNvbmZpZ3VyYXRpb25zLmdldChyLmlkKSx3PXQudXNlUHJvZ3JhbShsLF8pO2QmJih0LmNvbnRleHQuYWN0aXZlVGV4dHVyZS5zZXQoaC5URVhUVVJFMCkseC5pbWFnZUF0bGFzVGV4dHVyZS5iaW5kKGguTElORUFSLGguQ0xBTVBfVE9fRURHRSksXy51cGRhdGVQYWludEJ1ZmZlcnMobSkpO3ZhciBUPXAuY29uc3RhbnRPcihudWxsKTtpZihUJiZ4LmltYWdlQXRsYXMpe3ZhciBrPXguaW1hZ2VBdGxhcyxBPWsucGF0dGVyblBvc2l0aW9uc1tULnRvLnRvU3RyaW5nKCldLE09ay5wYXR0ZXJuUG9zaXRpb25zW1QuZnJvbS50b1N0cmluZygpXTtBJiZNJiZfLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhBLE0pfXZhciBTPXQudHJhbnNsYXRlUG9zTWF0cml4KHkucG9zTWF0cml4LHgsci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtdHJhbnNsYXRlLWFuY2hvciIpKTtpZihvKXt1PWIuaW5kZXhCdWZmZXIyLGY9Yi5zZWdtZW50czI7dmFyIEU9W2guZHJhd2luZ0J1ZmZlcldpZHRoLGguZHJhd2luZ0J1ZmZlckhlaWdodF07Yz0iZmlsbE91dGxpbmVQYXR0ZXJuIj09PWwmJmQ/RXIoUyx0LG0seCxFKTpTcihTLEUpfWVsc2UgdT1iLmluZGV4QnVmZmVyLGY9Yi5zZWdtZW50cyxjPWQ/TXIoUyx0LG0seCk6QXIoUyk7dy5kcmF3KHQuY29udGV4dCxzLGksdC5zdGVuY2lsTW9kZUZvckNsaXBwaW5nKHkpLGEsRXQuZGlzYWJsZWQsYyxyLmlkLGIubGF5b3V0VmVydGV4QnVmZmVyLHUsZixyLnBhaW50LHQudHJhbnNmb3JtLnpvb20sXyl9fX19ZnVuY3Rpb24gb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXQuY29udGV4dCxsPXMuZ2wsYz1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tcGF0dGVybiIpLHU9Yy5jb25zdGFudE9yKDEpLGY9ci5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksaD1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tb3BhY2l0eSIpLHA9MCxkPW47cDxkLmxlbmd0aDtwKz0xKXt2YXIgbT1kW3BdLGc9ZS5nZXRUaWxlKG0pLHY9Zy5nZXRCdWNrZXQocik7aWYodil7dmFyIHk9di5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KHIuaWQpLHg9dC51c2VQcm9ncmFtKHU/ImZpbGxFeHRydXNpb25QYXR0ZXJuIjoiZmlsbEV4dHJ1c2lvbiIseSk7dSYmKHQuY29udGV4dC5hY3RpdmVUZXh0dXJlLnNldChsLlRFWFRVUkUwKSxnLmltYWdlQXRsYXNUZXh0dXJlLmJpbmQobC5MSU5FQVIsbC5DTEFNUF9UT19FREdFKSx5LnVwZGF0ZVBhaW50QnVmZmVycyhmKSk7dmFyIGI9Yy5jb25zdGFudE9yKG51bGwpO2lmKGImJmcuaW1hZ2VBdGxhcyl7dmFyIF89Zy5pbWFnZUF0bGFzLHc9Xy5wYXR0ZXJuUG9zaXRpb25zW2IudG8udG9TdHJpbmcoKV0sVD1fLnBhdHRlcm5Qb3NpdGlvbnNbYi5mcm9tLnRvU3RyaW5nKCldO3cmJlQmJnkuc2V0Q29uc3RhbnRQYXR0ZXJuUG9zaXRpb25zKHcsVCl9dmFyIGs9dC50cmFuc2xhdGVQb3NNYXRyaXgobS5wb3NNYXRyaXgsZyxyLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdHJhbnNsYXRlIiksci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXRyYW5zbGF0ZS1hbmNob3IiKSksQT1yLnBhaW50LmdldCgiZmlsbC1leHRydXNpb24tdmVydGljYWwtZ3JhZGllbnQiKSxNPXU/a3Ioayx0LEEsaCxtLGYsZyk6VHIoayx0LEEsaCk7eC5kcmF3KHMscy5nbC5UUklBTkdMRVMsaSxhLG8sRXQuYmFja0NDVyxNLHIuaWQsdi5sYXlvdXRWZXJ0ZXhCdWZmZXIsdi5pbmRleEJ1ZmZlcix2LnNlZ21lbnRzLHIucGFpbnQsdC50cmFuc2Zvcm0uem9vbSx5KX19fWZ1bmN0aW9uIHNuKHQsZSxyLG4saSxhKXt2YXIgbz10LmNvbnRleHQscz1vLmdsLGw9ZS5mYm87aWYobCl7dmFyIGM9dC51c2VQcm9ncmFtKCJoaWxsc2hhZGUiKTtvLmFjdGl2ZVRleHR1cmUuc2V0KHMuVEVYVFVSRTApLHMuYmluZFRleHR1cmUocy5URVhUVVJFXzJELGwuY29sb3JBdHRhY2htZW50LmdldCgpKTt2YXIgdT1mdW5jdGlvbih0LGUscil7dmFyIG49ci5wYWludC5nZXQoImhpbGxzaGFkZS1zaGFkb3ctY29sb3IiKSxpPXIucGFpbnQuZ2V0KCJoaWxsc2hhZGUtaGlnaGxpZ2h0LWNvbG9yIiksYT1yLnBhaW50LmdldCgiaGlsbHNoYWRlLWFjY2VudC1jb2xvciIpLG89ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tZGlyZWN0aW9uIikqKE1hdGguUEkvMTgwKTsidmlld3BvcnQiPT09ci5wYWludC5nZXQoImhpbGxzaGFkZS1pbGx1bWluYXRpb24tYW5jaG9yIikmJihvLT10LnRyYW5zZm9ybS5hbmdsZSk7dmFyIHM9IXQub3B0aW9ucy5tb3Zpbmc7cmV0dXJue3VfbWF0cml4OnQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeChlLnRpbGVJRC50b1Vud3JhcHBlZCgpLHMpLHVfaW1hZ2U6MCx1X2xhdHJhbmdlOkRyKHQsZS50aWxlSUQpLHVfbGlnaHQ6W3IucGFpbnQuZ2V0KCJoaWxsc2hhZGUtZXhhZ2dlcmF0aW9uIiksb10sdV9zaGFkb3c6bix1X2hpZ2hsaWdodDppLHVfYWNjZW50OmF9fSh0LGUscik7Yy5kcmF3KG8scy5UUklBTkdMRVMsbixpLGEsRXQuZGlzYWJsZWQsdSxyLmlkLHQucmFzdGVyQm91bmRzQnVmZmVyLHQucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsdC5yYXN0ZXJCb3VuZHNTZWdtZW50cyl9fWZ1bmN0aW9uIGxuKGUscixuLGksYSxvLHMpe3ZhciBsPWUuY29udGV4dCxjPWwuZ2wsdT1yLmRlbTtpZih1JiZ1LmRhdGEpe3ZhciBmPXUuZGltLGg9dS5zdHJpZGUscD11LmdldFBpeGVscygpO2lmKGwuYWN0aXZlVGV4dHVyZS5zZXQoYy5URVhUVVJFMSksbC5waXhlbFN0b3JlVW5wYWNrUHJlbXVsdGlwbHlBbHBoYS5zZXQoITEpLHIuZGVtVGV4dHVyZT1yLmRlbVRleHR1cmV8fGUuZ2V0VGlsZVRleHR1cmUoaCksci5kZW1UZXh0dXJlKXt2YXIgZD1yLmRlbVRleHR1cmU7ZC51cGRhdGUocCx7cHJlbXVsdGlwbHk6ITF9KSxkLmJpbmQoYy5ORUFSRVNULGMuQ0xBTVBfVE9fRURHRSl9ZWxzZSByLmRlbVRleHR1cmU9bmV3IHQuVGV4dHVyZShsLHAsYy5SR0JBLHtwcmVtdWx0aXBseTohMX0pLHIuZGVtVGV4dHVyZS5iaW5kKGMuTkVBUkVTVCxjLkNMQU1QX1RPX0VER0UpO2wuYWN0aXZlVGV4dHVyZS5zZXQoYy5URVhUVVJFMCk7dmFyIG09ci5mYm87aWYoIW0pe3ZhciBnPW5ldyB0LlRleHR1cmUobCx7d2lkdGg6ZixoZWlnaHQ6ZixkYXRhOm51bGx9LGMuUkdCQSk7Zy5iaW5kKGMuTElORUFSLGMuQ0xBTVBfVE9fRURHRSksKG09ci5mYm89bC5jcmVhdGVGcmFtZWJ1ZmZlcihmLGYsITApKS5jb2xvckF0dGFjaG1lbnQuc2V0KGcudGV4dHVyZSl9bC5iaW5kRnJhbWVidWZmZXIuc2V0KG0uZnJhbWVidWZmZXIpLGwudmlld3BvcnQuc2V0KFswLDAsZixmXSksZS51c2VQcm9ncmFtKCJoaWxsc2hhZGVQcmVwYXJlIikuZHJhdyhsLGMuVFJJQU5HTEVTLGEsbyxzLEV0LmRpc2FibGVkLGZ1bmN0aW9uKGUscixuKXt2YXIgaT1yLnN0cmlkZSxhPXQuY3JlYXRlKCk7cmV0dXJuIHQub3J0aG8oYSwwLHQuRVhURU5ULC10LkVYVEVOVCwwLDAsMSksdC50cmFuc2xhdGUoYSxhLFswLC10LkVYVEVOVCwwXSkse3VfbWF0cml4OmEsdV9pbWFnZToxLHVfZGltZW5zaW9uOltpLGldLHVfem9vbTplLm92ZXJzY2FsZWRaLHVfbWF4em9vbTpuLHVfdW5wYWNrOnIuZ2V0VW5wYWNrVmVjdG9yKCl9fShyLnRpbGVJRCx1LGkpLG4uaWQsZS5yYXN0ZXJCb3VuZHNCdWZmZXIsZS5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixlLnJhc3RlckJvdW5kc1NlZ21lbnRzKSxyLm5lZWRzSGlsbHNoYWRlUHJlcGFyZT0hMX19ZnVuY3Rpb24gY24oZSxyLG4saSxhKXt2YXIgbz1pLnBhaW50LmdldCgicmFzdGVyLWZhZGUtZHVyYXRpb24iKTtpZihvPjApe3ZhciBzPXQuYnJvd3Nlci5ub3coKSxsPShzLWUudGltZUFkZGVkKS9vLGM9cj8ocy1yLnRpbWVBZGRlZCkvbzotMSx1PW4uZ2V0U291cmNlKCksZj1hLmNvdmVyaW5nWm9vbUxldmVsKHt0aWxlU2l6ZTp1LnRpbGVTaXplLHJvdW5kWm9vbTp1LnJvdW5kWm9vbX0pLGg9IXJ8fE1hdGguYWJzKHIudGlsZUlELm92ZXJzY2FsZWRaLWYpPk1hdGguYWJzKGUudGlsZUlELm92ZXJzY2FsZWRaLWYpLHA9aCYmZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj8xOnQuY2xhbXAoaD9sOjEtYywwLDEpO3JldHVybiBlLnJlZnJlc2hlZFVwb25FeHBpcmF0aW9uJiZsPj0xJiYoZS5yZWZyZXNoZWRVcG9uRXhwaXJhdGlvbj0hMSkscj97b3BhY2l0eToxLG1peDoxLXB9OntvcGFjaXR5OnAsbWl4OjB9fXJldHVybntvcGFjaXR5OjEsbWl4OjB9fXZhciB1bj1uZXcgdC5Db2xvcigxLDAsMCwxKSxmbj1uZXcgdC5Db2xvcigwLDEsMCwxKSxobj1uZXcgdC5Db2xvcigwLDAsMSwxKSxwbj1uZXcgdC5Db2xvcigxLDAsMSwxKSxkbj1uZXcgdC5Db2xvcigwLDEsMSwxKTtmdW5jdGlvbiBtbih0KXt2YXIgZT10LnRyYW5zZm9ybS5wYWRkaW5nO2duKHQsdC50cmFuc2Zvcm0uaGVpZ2h0LShlLnRvcHx8MCksMyx1biksZ24odCxlLmJvdHRvbXx8MCwzLGZuKSx2bih0LGUubGVmdHx8MCwzLGhuKSx2bih0LHQudHJhbnNmb3JtLndpZHRoLShlLnJpZ2h0fHwwKSwzLHBuKTt2YXIgcj10LnRyYW5zZm9ybS5jZW50ZXJQb2ludDshZnVuY3Rpb24odCxlLHIsbil7eW4odCxlLTEsci0xMCwyLDIwLG4pLHluKHQsZS0xMCxyLTEsMjAsMixuKX0odCxyLngsdC50cmFuc2Zvcm0uaGVpZ2h0LXIueSxkbil9ZnVuY3Rpb24gZ24odCxlLHIsbil7eW4odCwwLGUrci8yLHQudHJhbnNmb3JtLndpZHRoLHIsbil9ZnVuY3Rpb24gdm4odCxlLHIsbil7eW4odCxlLXIvMiwwLHIsdC50cmFuc2Zvcm0uaGVpZ2h0LG4pfWZ1bmN0aW9uIHluKGUscixuLGksYSxvKXt2YXIgcz1lLmNvbnRleHQsbD1zLmdsO2wuZW5hYmxlKGwuU0NJU1NPUl9URVNUKSxsLnNjaXNzb3Iocip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyxuKnQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvLGkqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sYSp0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbykscy5jbGVhcih7Y29sb3I6b30pLGwuZGlzYWJsZShsLlNDSVNTT1JfVEVTVCl9ZnVuY3Rpb24geG4oZSxyLG4pe3ZhciBpPWUuY29udGV4dCxhPWkuZ2wsbz1uLnBvc01hdHJpeCxzPWUudXNlUHJvZ3JhbSgiZGVidWciKSxsPUF0LmRpc2FibGVkLGM9TXQuZGlzYWJsZWQsdT1lLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKTtpLmFjdGl2ZVRleHR1cmUuc2V0KGEuVEVYVFVSRTApLGUuZW1wdHlUZXh0dXJlLmJpbmQoYS5MSU5FQVIsYS5DTEFNUF9UT19FREdFKSxzLmRyYXcoaSxhLkxJTkVfU1RSSVAsbCxjLHUsRXQuZGlzYWJsZWQsSXIobyx0LkNvbG9yLnJlZCksIiRkZWJ1ZyIsZS5kZWJ1Z0J1ZmZlcixlLnRpbGVCb3JkZXJJbmRleEJ1ZmZlcixlLmRlYnVnU2VnbWVudHMpO3ZhciBmPXIuZ2V0VGlsZUJ5SUQobi5rZXkpLmxhdGVzdFJhd1RpbGVEYXRhLGg9ZiYmZi5ieXRlTGVuZ3RofHwwLHA9TWF0aC5mbG9vcihoLzEwMjQpLGQ9ci5nZXRUaWxlKG4pLnRpbGVTaXplLG09NTEyL01hdGgubWluKGQsNTEyKSoobi5vdmVyc2NhbGVkWi9lLnRyYW5zZm9ybS56b29tKSouNSxnPW4uY2Fub25pY2FsLnRvU3RyaW5nKCk7bi5vdmVyc2NhbGVkWiE9PW4uY2Fub25pY2FsLnomJihnKz0iID0+ICIrbi5vdmVyc2NhbGVkWiksZnVuY3Rpb24odCxlKXt0LmluaXREZWJ1Z092ZXJsYXlDYW52YXMoKTt2YXIgcj10LmRlYnVnT3ZlcmxheUNhbnZhcyxuPXQuY29udGV4dC5nbCxpPXQuZGVidWdPdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7aS5jbGVhclJlY3QoMCwwLHIud2lkdGgsci5oZWlnaHQpLGkuc2hhZG93Q29sb3I9IndoaXRlIixpLnNoYWRvd0JsdXI9MixpLmxpbmVXaWR0aD0xLjUsaS5zdHJva2VTdHlsZT0id2hpdGUiLGkudGV4dEJhc2VsaW5lPSJ0b3AiLGkuZm9udD0iYm9sZCAzNnB4IE9wZW4gU2Fucywgc2Fucy1zZXJpZiIsaS5maWxsVGV4dChlLDUsNSksaS5zdHJva2VUZXh0KGUsNSw1KSx0LmRlYnVnT3ZlcmxheVRleHR1cmUudXBkYXRlKHIpLHQuZGVidWdPdmVybGF5VGV4dHVyZS5iaW5kKG4uTElORUFSLG4uQ0xBTVBfVE9fRURHRSl9KGUsZysiICIrcCsia2IiKSxzLmRyYXcoaSxhLlRSSUFOR0xFUyxsLGMsU3QuYWxwaGFCbGVuZGVkLEV0LmRpc2FibGVkLElyKG8sdC5Db2xvci50cmFuc3BhcmVudCxtKSwiJGRlYnVnIixlLmRlYnVnQnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS5kZWJ1Z1NlZ21lbnRzKX12YXIgYm49e3N5bWJvbDpmdW5jdGlvbihlLHIsbixpLGEpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBvPU10LmRpc2FibGVkLHM9ZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCk7bi5sYXlvdXQuZ2V0KCJ0ZXh0LXZhcmlhYmxlLWFuY2hvciIpJiZmdW5jdGlvbihlLHIsbixpLGEsbyxzKXtmb3IodmFyIGw9ci50cmFuc2Zvcm0sYz0ibWFwIj09PWEsdT0ibWFwIj09PW8sZj0wLGg9ZTtmPGgubGVuZ3RoO2YrPTEpe3ZhciBwPWhbZl0sZD1pLmdldFRpbGUocCksbT1kLmdldEJ1Y2tldChuKTtpZihtJiZtLnRleHQmJm0udGV4dC5zZWdtZW50cy5nZXQoKS5sZW5ndGgpe3ZhciBnPW0udGV4dFNpemVEYXRhLHY9dC5ldmFsdWF0ZVNpemVGb3Jab29tKGcsbC56b29tKSx5PXBlKGQsMSxyLnRyYW5zZm9ybS56b29tKSx4PVF0KHAucG9zTWF0cml4LHUsYyxyLnRyYW5zZm9ybSx5KSxiPSJub25lIiE9PW4ubGF5b3V0LmdldCgiaWNvbi10ZXh0LWZpdCIpJiZtLmhhc0ljb25EYXRhKCk7aWYodil7dmFyIF89TWF0aC5wb3coMixsLnpvb20tZC50aWxlSUQub3ZlcnNjYWxlZFopO3RuKG0sYyx1LHMsdC5zeW1ib2xTaXplLGwseCxwLnBvc01hdHJpeCxfLHYsYil9fX19KGksZSxuLHIsbi5sYXlvdXQuZ2V0KCJ0ZXh0LXJvdGF0aW9uLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1waXRjaC1hbGlnbm1lbnQiKSxhKSwwIT09bi5wYWludC5nZXQoImljb24tb3BhY2l0eSIpLmNvbnN0YW50T3IoMSkmJnJuKGUscixuLGksITEsbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlIiksbi5wYWludC5nZXQoImljb24tdHJhbnNsYXRlLWFuY2hvciIpLG4ubGF5b3V0LmdldCgiaWNvbi1yb3RhdGlvbi1hbGlnbm1lbnQiKSxuLmxheW91dC5nZXQoImljb24tcGl0Y2gtYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJpY29uLWtlZXAtdXByaWdodCIpLG8scyksMCE9PW4ucGFpbnQuZ2V0KCJ0ZXh0LW9wYWNpdHkiKS5jb25zdGFudE9yKDEpJiZybihlLHIsbixpLCEwLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJ0ZXh0LXRyYW5zbGF0ZS1hbmNob3IiKSxuLmxheW91dC5nZXQoInRleHQtcm90YXRpb24tYWxpZ25tZW50Iiksbi5sYXlvdXQuZ2V0KCJ0ZXh0LXBpdGNoLWFsaWdubWVudCIpLG4ubGF5b3V0LmdldCgidGV4dC1rZWVwLXVwcmlnaHQiKSxvLHMpLHIubWFwLnNob3dDb2xsaXNpb25Cb3hlcyYmKEtyKGUscixuLGksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlIiksbi5wYWludC5nZXQoInRleHQtdHJhbnNsYXRlLWFuY2hvciIpLCEwKSxLcihlLHIsbixpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZSIpLG4ucGFpbnQuZ2V0KCJpY29uLXRyYW5zbGF0ZS1hbmNob3IiKSwhMSkpfX0sY2lyY2xlOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJjaXJjbGUtb3BhY2l0eSIpLG89bi5wYWludC5nZXQoImNpcmNsZS1zdHJva2Utd2lkdGgiKSxzPW4ucGFpbnQuZ2V0KCJjaXJjbGUtc3Ryb2tlLW9wYWNpdHkiKSxsPXZvaWQgMCE9PW4ubGF5b3V0LmdldCgiY2lyY2xlLXNvcnQta2V5IikuY29uc3RhbnRPcigxKTtpZigwIT09YS5jb25zdGFudE9yKDEpfHwwIT09by5jb25zdGFudE9yKDEpJiYwIT09cy5jb25zdGFudE9yKDEpKXtmb3IodmFyIGM9ZS5jb250ZXh0LHU9Yy5nbCxmPWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMCxBdC5SZWFkT25seSksaD1NdC5kaXNhYmxlZCxwPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGQ9W10sbT0wO208aS5sZW5ndGg7bSsrKXt2YXIgZz1pW21dLHY9ci5nZXRUaWxlKGcpLHk9di5nZXRCdWNrZXQobik7aWYoeSl7dmFyIHg9eS5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGI9e3Byb2dyYW1Db25maWd1cmF0aW9uOngscHJvZ3JhbTplLnVzZVByb2dyYW0oImNpcmNsZSIseCksbGF5b3V0VmVydGV4QnVmZmVyOnkubGF5b3V0VmVydGV4QnVmZmVyLGluZGV4QnVmZmVyOnkuaW5kZXhCdWZmZXIsdW5pZm9ybVZhbHVlczpMcihlLGcsdixuKX07aWYobClmb3IodmFyIF89MCx3PXkuc2VnbWVudHMuZ2V0KCk7Xzx3Lmxlbmd0aDtfKz0xKXt2YXIgVD13W19dO2QucHVzaCh7c2VnbWVudHM6bmV3IHQuU2VnbWVudFZlY3RvcihbVF0pLHNvcnRLZXk6VC5zb3J0S2V5LHN0YXRlOmJ9KX1lbHNlIGQucHVzaCh7c2VnbWVudHM6eS5zZWdtZW50cyxzb3J0S2V5OjAsc3RhdGU6Yn0pfX1sJiZkLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuc29ydEtleS1lLnNvcnRLZXl9KSk7Zm9yKHZhciBrPTAsQT1kO2s8QS5sZW5ndGg7ays9MSl7dmFyIE09QVtrXSxTPU0uc3RhdGUsRT1TLnByb2dyYW1Db25maWd1cmF0aW9uLEw9Uy5wcm9ncmFtLEM9Uy5sYXlvdXRWZXJ0ZXhCdWZmZXIsUD1TLmluZGV4QnVmZmVyLEk9Uy51bmlmb3JtVmFsdWVzLE89TS5zZWdtZW50cztMLmRyYXcoYyx1LlRSSUFOR0xFUyxmLGgscCxFdC5kaXNhYmxlZCxJLG4uaWQsQyxQLE8sbi5wYWludCxlLnRyYW5zZm9ybS56b29tLEUpfX19fSxoZWF0bWFwOmZ1bmN0aW9uKGUscixuLGkpe2lmKDAhPT1uLnBhaW50LmdldCgiaGVhdG1hcC1vcGFjaXR5IikpaWYoIm9mZnNjcmVlbiI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPWUuY29udGV4dCxvPWEuZ2wscz1NdC5kaXNhYmxlZCxsPW5ldyBTdChbby5PTkUsby5PTkVdLHQuQ29sb3IudHJhbnNwYXJlbnQsWyEwLCEwLCEwLCEwXSk7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmdsO3QuYWN0aXZlVGV4dHVyZS5zZXQobi5URVhUVVJFMSksdC52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLzQsZS5oZWlnaHQvNF0pO3ZhciBpPXIuaGVhdG1hcEZibztpZihpKW4uYmluZFRleHR1cmUobi5URVhUVVJFXzJELGkuY29sb3JBdHRhY2htZW50LmdldCgpKSx0LmJpbmRGcmFtZWJ1ZmZlci5zZXQoaS5mcmFtZWJ1ZmZlcik7ZWxzZXt2YXIgYT1uLmNyZWF0ZVRleHR1cmUoKTtuLmJpbmRUZXh0dXJlKG4uVEVYVFVSRV8yRCxhKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Msbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9XUkFQX1Qsbi5DTEFNUF9UT19FREdFKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NSU5fRklMVEVSLG4uTElORUFSKSxuLnRleFBhcmFtZXRlcmkobi5URVhUVVJFXzJELG4uVEVYVFVSRV9NQUdfRklMVEVSLG4uTElORUFSKSxpPXIuaGVhdG1hcEZibz10LmNyZWF0ZUZyYW1lYnVmZmVyKGUud2lkdGgvNCxlLmhlaWdodC80LCExKSxmdW5jdGlvbih0LGUscixuKXt2YXIgaT10LmdsLGE9dC5leHRSZW5kZXJUb1RleHR1cmVIYWxmRmxvYXQ/dC5leHRUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTOmkuVU5TSUdORURfQllURTtpLnRleEltYWdlMkQoaS5URVhUVVJFXzJELDAsaS5SR0JBLGUud2lkdGgvNCxlLmhlaWdodC80LDAsaS5SR0JBLGEsbnVsbCksbi5jb2xvckF0dGFjaG1lbnQuc2V0KHIpfSh0LGUsYSxpKX19KGEsZSxuKSxhLmNsZWFyKHtjb2xvcjp0LkNvbG9yLnRyYW5zcGFyZW50fSk7Zm9yKHZhciBjPTA7YzxpLmxlbmd0aDtjKyspe3ZhciB1PWlbY107aWYoIXIuaGFzUmVuZGVyYWJsZVBhcmVudCh1KSl7dmFyIGY9ci5nZXRUaWxlKHUpLGg9Zi5nZXRCdWNrZXQobik7aWYoaCl7dmFyIHA9aC5wcm9ncmFtQ29uZmlndXJhdGlvbnMuZ2V0KG4uaWQpLGQ9ZS51c2VQcm9ncmFtKCJoZWF0bWFwIixwKSxtPWUudHJhbnNmb3JtLnpvb207ZC5kcmF3KGEsby5UUklBTkdMRVMsQXQuZGlzYWJsZWQscyxsLEV0LmRpc2FibGVkLHpyKHUucG9zTWF0cml4LGYsbSxuLnBhaW50LmdldCgiaGVhdG1hcC1pbnRlbnNpdHkiKSksbi5pZCxoLmxheW91dFZlcnRleEJ1ZmZlcixoLmluZGV4QnVmZmVyLGguc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLHApfX19YS52aWV3cG9ydC5zZXQoWzAsMCxlLndpZHRoLGUuaGVpZ2h0XSl9ZWxzZSJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3MmJihlLmNvbnRleHQuc2V0Q29sb3JNb2RlKGUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxmdW5jdGlvbihlLHIpe3ZhciBuPWUuY29udGV4dCxpPW4uZ2wsYT1yLmhlYXRtYXBGYm87aWYoIWEpcmV0dXJuO24uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMCksaS5iaW5kVGV4dHVyZShpLlRFWFRVUkVfMkQsYS5jb2xvckF0dGFjaG1lbnQuZ2V0KCkpLG4uYWN0aXZlVGV4dHVyZS5zZXQoaS5URVhUVVJFMSk7dmFyIG89ci5jb2xvclJhbXBUZXh0dXJlO298fChvPXIuY29sb3JSYW1wVGV4dHVyZT1uZXcgdC5UZXh0dXJlKG4sci5jb2xvclJhbXAsaS5SR0JBKSk7by5iaW5kKGkuTElORUFSLGkuQ0xBTVBfVE9fRURHRSksZS51c2VQcm9ncmFtKCJoZWF0bWFwVGV4dHVyZSIpLmRyYXcobixpLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxNdC5kaXNhYmxlZCxlLmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxFdC5kaXNhYmxlZCxmdW5jdGlvbihlLHIsbixpKXt2YXIgYT10LmNyZWF0ZSgpO3Qub3J0aG8oYSwwLGUud2lkdGgsZS5oZWlnaHQsMCwwLDEpO3ZhciBvPWUuY29udGV4dC5nbDtyZXR1cm57dV9tYXRyaXg6YSx1X3dvcmxkOltvLmRyYXdpbmdCdWZmZXJXaWR0aCxvLmRyYXdpbmdCdWZmZXJIZWlnaHRdLHVfaW1hZ2U6bix1X2NvbG9yX3JhbXA6aSx1X29wYWNpdHk6ci5wYWludC5nZXQoImhlYXRtYXAtb3BhY2l0eSIpfX0oZSxyLDAsMSksci5pZCxlLnZpZXdwb3J0QnVmZmVyLGUucXVhZFRyaWFuZ2xlSW5kZXhCdWZmZXIsZS52aWV3cG9ydFNlZ21lbnRzLHIucGFpbnQsZS50cmFuc2Zvcm0uem9vbSl9KGUsbikpfSxsaW5lOmZ1bmN0aW9uKGUscixuLGkpe2lmKCJ0cmFuc2x1Y2VudCI9PT1lLnJlbmRlclBhc3Mpe3ZhciBhPW4ucGFpbnQuZ2V0KCJsaW5lLW9wYWNpdHkiKSxvPW4ucGFpbnQuZ2V0KCJsaW5lLXdpZHRoIik7aWYoMCE9PWEuY29uc3RhbnRPcigxKSYmMCE9PW8uY29uc3RhbnRPcigxKSl7dmFyIHM9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KSxsPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGM9bi5wYWludC5nZXQoImxpbmUtZGFzaGFycmF5IiksdT1uLnBhaW50LmdldCgibGluZS1wYXR0ZXJuIiksZj11LmNvbnN0YW50T3IoMSksaD1uLnBhaW50LmdldCgibGluZS1ncmFkaWVudCIpLHA9bi5nZXRDcm9zc2ZhZGVQYXJhbWV0ZXJzKCksZD1mPyJsaW5lUGF0dGVybiI6Yz8ibGluZVNERiI6aD8ibGluZUdyYWRpZW50IjoibGluZSIsbT1lLmNvbnRleHQsZz1tLmdsLHY9ITA7aWYoaCl7bS5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKTt2YXIgeT1uLmdyYWRpZW50VGV4dHVyZTtpZighbi5ncmFkaWVudClyZXR1cm47eXx8KHk9bi5ncmFkaWVudFRleHR1cmU9bmV3IHQuVGV4dHVyZShtLG4uZ3JhZGllbnQsZy5SR0JBKSkseS5iaW5kKGcuTElORUFSLGcuQ0xBTVBfVE9fRURHRSl9Zm9yKHZhciB4PTAsYj1pO3g8Yi5sZW5ndGg7eCs9MSl7dmFyIF89Ylt4XSx3PXIuZ2V0VGlsZShfKTtpZighZnx8dy5wYXR0ZXJuc0xvYWRlZCgpKXt2YXIgVD13LmdldEJ1Y2tldChuKTtpZihUKXt2YXIgaz1ULnByb2dyYW1Db25maWd1cmF0aW9ucy5nZXQobi5pZCksQT1lLmNvbnRleHQucHJvZ3JhbS5nZXQoKSxNPWUudXNlUHJvZ3JhbShkLGspLFM9dnx8TS5wcm9ncmFtIT09QSxFPXUuY29uc3RhbnRPcihudWxsKTtpZihFJiZ3LmltYWdlQXRsYXMpe3ZhciBMPXcuaW1hZ2VBdGxhcyxDPUwucGF0dGVyblBvc2l0aW9uc1tFLnRvLnRvU3RyaW5nKCldLFA9TC5wYXR0ZXJuUG9zaXRpb25zW0UuZnJvbS50b1N0cmluZygpXTtDJiZQJiZrLnNldENvbnN0YW50UGF0dGVyblBvc2l0aW9ucyhDLFApfXZhciBJPWY/QnIoZSx3LG4scCk6Yz9OcihlLHcsbixjLHApOmg/RnIoZSx3LG4pOlJyKGUsdyxuKTtmPyhtLmFjdGl2ZVRleHR1cmUuc2V0KGcuVEVYVFVSRTApLHcuaW1hZ2VBdGxhc1RleHR1cmUuYmluZChnLkxJTkVBUixnLkNMQU1QX1RPX0VER0UpLGsudXBkYXRlUGFpbnRCdWZmZXJzKHApKTpjJiYoU3x8ZS5saW5lQXRsYXMuZGlydHkpJiYobS5hY3RpdmVUZXh0dXJlLnNldChnLlRFWFRVUkUwKSxlLmxpbmVBdGxhcy5iaW5kKG0pKSxNLmRyYXcobSxnLlRSSUFOR0xFUyxzLGUuc3RlbmNpbE1vZGVGb3JDbGlwcGluZyhfKSxsLEV0LmRpc2FibGVkLEksbi5pZCxULmxheW91dFZlcnRleEJ1ZmZlcixULmluZGV4QnVmZmVyLFQuc2VnbWVudHMsbi5wYWludCxlLnRyYW5zZm9ybS56b29tLGspLHY9ITF9fX19fX0sZmlsbDpmdW5jdGlvbihlLHIsbixpKXt2YXIgYT1uLnBhaW50LmdldCgiZmlsbC1jb2xvciIpLG89bi5wYWludC5nZXQoImZpbGwtb3BhY2l0eSIpO2lmKDAhPT1vLmNvbnN0YW50T3IoMSkpe3ZhciBzPWUuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpLGw9bi5wYWludC5nZXQoImZpbGwtcGF0dGVybiIpLGM9ZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkmJiFsLmNvbnN0YW50T3IoMSkmJjE9PT1hLmNvbnN0YW50T3IodC5Db2xvci50cmFuc3BhcmVudCkuYSYmMT09PW8uY29uc3RhbnRPcigwKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKGUucmVuZGVyUGFzcz09PWMpe3ZhciB1PWUuZGVwdGhNb2RlRm9yU3VibGF5ZXIoMSwib3BhcXVlIj09PWUucmVuZGVyUGFzcz9BdC5SZWFkV3JpdGU6QXQuUmVhZE9ubHkpO2FuKGUscixuLGksdSxzLCExKX1pZigidHJhbnNsdWNlbnQiPT09ZS5yZW5kZXJQYXNzJiZuLnBhaW50LmdldCgiZmlsbC1hbnRpYWxpYXMiKSl7dmFyIGY9ZS5kZXB0aE1vZGVGb3JTdWJsYXllcihuLmdldFBhaW50UHJvcGVydHkoImZpbGwtb3V0bGluZS1jb2xvciIpPzI6MCxBdC5SZWFkT25seSk7YW4oZSxyLG4saSxmLHMsITApfX19LCJmaWxsLWV4dHJ1c2lvbiI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLW9wYWNpdHkiKTtpZigwIT09aSYmInRyYW5zbHVjZW50Ij09PXQucmVuZGVyUGFzcyl7dmFyIGE9bmV3IEF0KHQuY29udGV4dC5nbC5MRVFVQUwsQXQuUmVhZFdyaXRlLHQuZGVwdGhSYW5nZUZvcjNEKTtpZigxIT09aXx8ci5wYWludC5nZXQoImZpbGwtZXh0cnVzaW9uLXBhdHRlcm4iKS5jb25zdGFudE9yKDEpKW9uKHQsZSxyLG4sYSxNdC5kaXNhYmxlZCxTdC5kaXNhYmxlZCksb24odCxlLHIsbixhLHQuc3RlbmNpbE1vZGVGb3IzRCgpLHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKTtlbHNle3ZhciBvPXQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpO29uKHQsZSxyLG4sYSxNdC5kaXNhYmxlZCxvKX19fSxoaWxsc2hhZGU6ZnVuY3Rpb24odCxlLHIsbil7aWYoIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3N8fCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe2Zvcih2YXIgaT10LmNvbnRleHQsYT1lLmdldFNvdXJjZSgpLm1heHpvb20sbz10LmRlcHRoTW9kZUZvclN1YmxheWVyKDAsQXQuUmVhZE9ubHkpLHM9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksbD0idHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzP3Quc3RlbmNpbENvbmZpZ0Zvck92ZXJsYXAobik6W3t9LG5dLGM9bFswXSx1PTAsZj1sWzFdO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPWUuZ2V0VGlsZShoKTtwLm5lZWRzSGlsbHNoYWRlUHJlcGFyZSYmIm9mZnNjcmVlbiI9PT10LnJlbmRlclBhc3M/bG4odCxwLHIsYSxvLE10LmRpc2FibGVkLHMpOiJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3MmJnNuKHQscCxyLG8sY1toLm92ZXJzY2FsZWRaXSxzKX1pLnZpZXdwb3J0LnNldChbMCwwLHQud2lkdGgsdC5oZWlnaHRdKX19LHJhc3RlcjpmdW5jdGlvbih0LGUscixuKXtpZigidHJhbnNsdWNlbnQiPT09dC5yZW5kZXJQYXNzJiYwIT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5IikmJm4ubGVuZ3RoKWZvcih2YXIgaT10LmNvbnRleHQsYT1pLmdsLG89ZS5nZXRTb3VyY2UoKSxzPXQudXNlUHJvZ3JhbSgicmFzdGVyIiksbD10LmNvbG9yTW9kZUZvclJlbmRlclBhc3MoKSxjPW8gaW5zdGFuY2VvZiBJP1t7fSxuXTp0LnN0ZW5jaWxDb25maWdGb3JPdmVybGFwKG4pLHU9Y1swXSxmPWNbMV0saD1mW2YubGVuZ3RoLTFdLm92ZXJzY2FsZWRaLHA9IXQub3B0aW9ucy5tb3ZpbmcsZD0wLG09ZjtkPG0ubGVuZ3RoO2QrPTEpe3ZhciBnPW1bZF0sdj10LmRlcHRoTW9kZUZvclN1YmxheWVyKGcub3ZlcnNjYWxlZFotaCwxPT09ci5wYWludC5nZXQoInJhc3Rlci1vcGFjaXR5Iik/QXQuUmVhZFdyaXRlOkF0LlJlYWRPbmx5LGEuTEVTUykseT1lLmdldFRpbGUoZykseD10LnRyYW5zZm9ybS5jYWxjdWxhdGVQb3NNYXRyaXgoZy50b1Vud3JhcHBlZCgpLHApO3kucmVnaXN0ZXJGYWRlRHVyYXRpb24oci5wYWludC5nZXQoInJhc3Rlci1mYWRlLWR1cmF0aW9uIikpO3ZhciBiPWUuZmluZExvYWRlZFBhcmVudChnLDApLF89Y24oeSxiLGUscix0LnRyYW5zZm9ybSksdz12b2lkIDAsVD12b2lkIDAsaz0ibmVhcmVzdCI9PT1yLnBhaW50LmdldCgicmFzdGVyLXJlc2FtcGxpbmciKT9hLk5FQVJFU1Q6YS5MSU5FQVI7aS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUwKSx5LnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksaS5hY3RpdmVUZXh0dXJlLnNldChhLlRFWFRVUkUxKSxiPyhiLnRleHR1cmUuYmluZChrLGEuQ0xBTVBfVE9fRURHRSxhLkxJTkVBUl9NSVBNQVBfTkVBUkVTVCksdz1NYXRoLnBvdygyLGIudGlsZUlELm92ZXJzY2FsZWRaLXkudGlsZUlELm92ZXJzY2FsZWRaKSxUPVt5LnRpbGVJRC5jYW5vbmljYWwueCp3JTEseS50aWxlSUQuY2Fub25pY2FsLnkqdyUxXSk6eS50ZXh0dXJlLmJpbmQoayxhLkNMQU1QX1RPX0VER0UsYS5MSU5FQVJfTUlQTUFQX05FQVJFU1QpO3ZhciBBPVZyKHgsVHx8WzAsMF0sd3x8MSxfLHIpO28gaW5zdGFuY2VvZiBJP3MuZHJhdyhpLGEuVFJJQU5HTEVTLHYsTXQuZGlzYWJsZWQsbCxFdC5kaXNhYmxlZCxBLHIuaWQsby5ib3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcixvLmJvdW5kc1NlZ21lbnRzKTpzLmRyYXcoaSxhLlRSSUFOR0xFUyx2LHVbZy5vdmVyc2NhbGVkWl0sbCxFdC5kaXNhYmxlZCxBLHIuaWQsdC5yYXN0ZXJCb3VuZHNCdWZmZXIsdC5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0LnJhc3RlckJvdW5kc1NlZ21lbnRzKX19LGJhY2tncm91bmQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIucGFpbnQuZ2V0KCJiYWNrZ3JvdW5kLWNvbG9yIiksaT1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1vcGFjaXR5Iik7aWYoMCE9PWkpe3ZhciBhPXQuY29udGV4dCxvPWEuZ2wscz10LnRyYW5zZm9ybSxsPXMudGlsZVNpemUsYz1yLnBhaW50LmdldCgiYmFja2dyb3VuZC1wYXR0ZXJuIik7aWYoIXQuaXNQYXR0ZXJuTWlzc2luZyhjKSl7dmFyIHU9IWMmJjE9PT1uLmEmJjE9PT1pJiZ0Lm9wYXF1ZVBhc3NFbmFibGVkRm9yTGF5ZXIoKT8ib3BhcXVlIjoidHJhbnNsdWNlbnQiO2lmKHQucmVuZGVyUGFzcz09PXUpe3ZhciBmPU10LmRpc2FibGVkLGg9dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLCJvcGFxdWUiPT09dT9BdC5SZWFkV3JpdGU6QXQuUmVhZE9ubHkpLHA9dC5jb2xvck1vZGVGb3JSZW5kZXJQYXNzKCksZD10LnVzZVByb2dyYW0oYz8iYmFja2dyb3VuZFBhdHRlcm4iOiJiYWNrZ3JvdW5kIiksbT1zLmNvdmVyaW5nVGlsZXMoe3RpbGVTaXplOmx9KTtjJiYoYS5hY3RpdmVUZXh0dXJlLnNldChvLlRFWFRVUkUwKSx0LmltYWdlTWFuYWdlci5iaW5kKHQuY29udGV4dCkpO2Zvcih2YXIgZz1yLmdldENyb3NzZmFkZVBhcmFtZXRlcnMoKSx2PTAseT1tO3Y8eS5sZW5ndGg7dis9MSl7dmFyIHg9eVt2XSxiPXQudHJhbnNmb3JtLmNhbGN1bGF0ZVBvc01hdHJpeCh4LnRvVW53cmFwcGVkKCkpLF89Yz9acihiLGksdCxjLHt0aWxlSUQ6eCx0aWxlU2l6ZTpsfSxnKTpYcihiLGksbik7ZC5kcmF3KGEsby5UUklBTkdMRVMsaCxmLHAsRXQuZGlzYWJsZWQsXyxyLmlkLHQudGlsZUV4dGVudEJ1ZmZlcix0LnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHQudGlsZUV4dGVudFNlZ21lbnRzKX19fX19LGRlYnVnOmZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl4bih0LGUscltuXSl9LGN1c3RvbTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5jb250ZXh0LGk9ci5pbXBsZW1lbnRhdGlvbjtpZigib2Zmc2NyZWVuIj09PXQucmVuZGVyUGFzcyl7dmFyIGE9aS5wcmVyZW5kZXI7YSYmKHQuc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxhLmNhbGwoaSxuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpKX1lbHNlIGlmKCJ0cmFuc2x1Y2VudCI9PT10LnJlbmRlclBhc3Mpe3Quc2V0Q3VzdG9tTGF5ZXJEZWZhdWx0cygpLG4uc2V0Q29sb3JNb2RlKHQuY29sb3JNb2RlRm9yUmVuZGVyUGFzcygpKSxuLnNldFN0ZW5jaWxNb2RlKE10LmRpc2FibGVkKTt2YXIgbz0iM2QiPT09aS5yZW5kZXJpbmdNb2RlP25ldyBBdCh0LmNvbnRleHQuZ2wuTEVRVUFMLEF0LlJlYWRXcml0ZSx0LmRlcHRoUmFuZ2VGb3IzRCk6dC5kZXB0aE1vZGVGb3JTdWJsYXllcigwLEF0LlJlYWRPbmx5KTtuLnNldERlcHRoTW9kZShvKSxpLnJlbmRlcihuLmdsLHQudHJhbnNmb3JtLmN1c3RvbUxheWVyTWF0cml4KCkpLG4uc2V0RGlydHkoKSx0LnNldEJhc2VTdGF0ZSgpLG4uYmluZEZyYW1lYnVmZmVyLnNldChudWxsKX19fSxfbj1mdW5jdGlvbih0LGUpe3RoaXMuY29udGV4dD1uZXcgTHQodCksdGhpcy50cmFuc2Zvcm09ZSx0aGlzLl90aWxlVGV4dHVyZXM9e30sdGhpcy5zZXR1cCgpLHRoaXMubnVtU3VibGF5ZXJzPUN0Lm1heFVuZGVyem9vbWluZytDdC5tYXhPdmVyem9vbWluZysxLHRoaXMuZGVwdGhFcHNpbG9uPTEvTWF0aC5wb3coMiwxNiksdGhpcy5jcm9zc1RpbGVTeW1ib2xJbmRleD1uZXcgTmUsdGhpcy5ncHVUaW1lcnM9e319O19uLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oZSxyKXtpZih0aGlzLndpZHRoPWUqdC5icm93c2VyLmRldmljZVBpeGVsUmF0aW8sdGhpcy5oZWlnaHQ9cip0LmJyb3dzZXIuZGV2aWNlUGl4ZWxSYXRpbyx0aGlzLmNvbnRleHQudmlld3BvcnQuc2V0KFswLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodF0pLHRoaXMuc3R5bGUpZm9yKHZhciBuPTAsaT10aGlzLnN0eWxlLl9vcmRlcjtuPGkubGVuZ3RoO24rPTEpe3ZhciBhPWlbbl07dGhpcy5zdHlsZS5fbGF5ZXJzW2FdLnJlc2l6ZSgpfX0sX24ucHJvdG90eXBlLnNldHVwPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LHI9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQyaTQ7ci5lbXBsYWNlQmFjaygwLDApLHIuZW1wbGFjZUJhY2sodC5FWFRFTlQsMCksci5lbXBsYWNlQmFjaygwLHQuRVhURU5UKSxyLmVtcGxhY2VCYWNrKHQuRVhURU5ULHQuRVhURU5UKSx0aGlzLnRpbGVFeHRlbnRCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIocixHZS5tZW1iZXJzKSx0aGlzLnRpbGVFeHRlbnRTZWdtZW50cz10LlNlZ21lbnRWZWN0b3Iuc2ltcGxlU2VnbWVudCgwLDAsNCwyKTt2YXIgbj1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDJpNDtuLmVtcGxhY2VCYWNrKDAsMCksbi5lbXBsYWNlQmFjayh0LkVYVEVOVCwwKSxuLmVtcGxhY2VCYWNrKDAsdC5FWFRFTlQpLG4uZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMuZGVidWdCdWZmZXI9ZS5jcmVhdGVWZXJ0ZXhCdWZmZXIobixHZS5tZW1iZXJzKSx0aGlzLmRlYnVnU2VnbWVudHM9dC5TZWdtZW50VmVjdG9yLnNpbXBsZVNlZ21lbnQoMCwwLDQsNSk7dmFyIGk9bmV3IHQuU3RydWN0QXJyYXlMYXlvdXQ0aTg7aS5lbXBsYWNlQmFjaygwLDAsMCwwKSxpLmVtcGxhY2VCYWNrKHQuRVhURU5ULDAsdC5FWFRFTlQsMCksaS5lbXBsYWNlQmFjaygwLHQuRVhURU5ULDAsdC5FWFRFTlQpLGkuZW1wbGFjZUJhY2sodC5FWFRFTlQsdC5FWFRFTlQsdC5FWFRFTlQsdC5FWFRFTlQpLHRoaXMucmFzdGVyQm91bmRzQnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGksUC5tZW1iZXJzKSx0aGlzLnJhc3RlckJvdW5kc1NlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBhPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0Mmk0O2EuZW1wbGFjZUJhY2soMCwwKSxhLmVtcGxhY2VCYWNrKDEsMCksYS5lbXBsYWNlQmFjaygwLDEpLGEuZW1wbGFjZUJhY2soMSwxKSx0aGlzLnZpZXdwb3J0QnVmZmVyPWUuY3JlYXRlVmVydGV4QnVmZmVyKGEsR2UubWVtYmVycyksdGhpcy52aWV3cG9ydFNlZ21lbnRzPXQuU2VnbWVudFZlY3Rvci5zaW1wbGVTZWdtZW50KDAsMCw0LDIpO3ZhciBvPW5ldyB0LlN0cnVjdEFycmF5TGF5b3V0MXVpMjtvLmVtcGxhY2VCYWNrKDApLG8uZW1wbGFjZUJhY2soMSksby5lbXBsYWNlQmFjaygzKSxvLmVtcGxhY2VCYWNrKDIpLG8uZW1wbGFjZUJhY2soMCksdGhpcy50aWxlQm9yZGVySW5kZXhCdWZmZXI9ZS5jcmVhdGVJbmRleEJ1ZmZlcihvKTt2YXIgcz1uZXcgdC5TdHJ1Y3RBcnJheUxheW91dDN1aTY7cy5lbXBsYWNlQmFjaygwLDEsMikscy5lbXBsYWNlQmFjaygyLDEsMyksdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcj1lLmNyZWF0ZUluZGV4QnVmZmVyKHMpLHRoaXMuZW1wdHlUZXh0dXJlPW5ldyB0LlRleHR1cmUoZSx7d2lkdGg6MSxoZWlnaHQ6MSxkYXRhOm5ldyBVaW50OEFycmF5KFswLDAsMCwwXSl9LGUuZ2wuUkdCQSk7dmFyIGw9dGhpcy5jb250ZXh0LmdsO3RoaXMuc3RlbmNpbENsZWFyTW9kZT1uZXcgTXQoe2Z1bmM6bC5BTFdBWVMsbWFzazowfSwwLDI1NSxsLlpFUk8sbC5aRVJPLGwuWkVSTyl9LF9uLnByb3RvdHlwZS5jbGVhclN0ZW5jaWw9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQscj1lLmdsO3RoaXMubmV4dFN0ZW5jaWxJRD0xLHRoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwO3ZhciBuPXQuY3JlYXRlKCk7dC5vcnRobyhuLDAsdGhpcy53aWR0aCx0aGlzLmhlaWdodCwwLDAsMSksdC5zY2FsZShuLG4sW3IuZHJhd2luZ0J1ZmZlcldpZHRoLHIuZHJhd2luZ0J1ZmZlckhlaWdodCwwXSksdGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKS5kcmF3KGUsci5UUklBTkdMRVMsQXQuZGlzYWJsZWQsdGhpcy5zdGVuY2lsQ2xlYXJNb2RlLFN0LmRpc2FibGVkLEV0LmRpc2FibGVkLE9yKG4pLCIkY2xpcHBpbmciLHRoaXMudmlld3BvcnRCdWZmZXIsdGhpcy5xdWFkVHJpYW5nbGVJbmRleEJ1ZmZlcix0aGlzLnZpZXdwb3J0U2VnbWVudHMpfSxfbi5wcm90b3R5cGUuX3JlbmRlclRpbGVDbGlwcGluZ01hc2tzPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZSE9PXQuc291cmNlJiZ0LmlzVGlsZUNsaXBwZWQoKSYmZSYmZS5sZW5ndGgpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dC5zb3VyY2U7dmFyIHI9dGhpcy5jb250ZXh0LG49ci5nbDt0aGlzLm5leHRTdGVuY2lsSUQrZS5sZW5ndGg+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpLHIuc2V0Q29sb3JNb2RlKFN0LmRpc2FibGVkKSxyLnNldERlcHRoTW9kZShBdC5kaXNhYmxlZCk7dmFyIGk9dGhpcy51c2VQcm9ncmFtKCJjbGlwcGluZ01hc2siKTt0aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzPXt9O2Zvcih2YXIgYT0wLG89ZTthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD10aGlzLl90aWxlQ2xpcHBpbmdNYXNrSURzW3Mua2V5XT10aGlzLm5leHRTdGVuY2lsSUQrKztpLmRyYXcocixuLlRSSUFOR0xFUyxBdC5kaXNhYmxlZCxuZXcgTXQoe2Z1bmM6bi5BTFdBWVMsbWFzazowfSxsLDI1NSxuLktFRVAsbi5LRUVQLG4uUkVQTEFDRSksU3QuZGlzYWJsZWQsRXQuZGlzYWJsZWQsT3Iocy5wb3NNYXRyaXgpLCIkY2xpcHBpbmciLHRoaXMudGlsZUV4dGVudEJ1ZmZlcix0aGlzLnF1YWRUcmlhbmdsZUluZGV4QnVmZmVyLHRoaXMudGlsZUV4dGVudFNlZ21lbnRzKX19fSxfbi5wcm90b3R5cGUuc3RlbmNpbE1vZGVGb3IzRD1mdW5jdGlvbigpe3RoaXMuY3VycmVudFN0ZW5jaWxTb3VyY2U9dm9pZCAwLHRoaXMubmV4dFN0ZW5jaWxJRCsxPjI1NiYmdGhpcy5jbGVhclN0ZW5jaWwoKTt2YXIgdD10aGlzLm5leHRTdGVuY2lsSUQrKyxlPXRoaXMuY29udGV4dC5nbDtyZXR1cm4gbmV3IE10KHtmdW5jOmUuTk9URVFVQUwsbWFzazoyNTV9LHQsMjU1LGUuS0VFUCxlLktFRVAsZS5SRVBMQUNFKX0sX24ucHJvdG90eXBlLnN0ZW5jaWxNb2RlRm9yQ2xpcHBpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO3JldHVybiBuZXcgTXQoe2Z1bmM6ZS5FUVVBTCxtYXNrOjI1NX0sdGhpcy5fdGlsZUNsaXBwaW5nTWFza0lEc1t0LmtleV0sMCxlLktFRVAsZS5LRUVQLGUuUkVQTEFDRSl9LF9uLnByb3RvdHlwZS5zdGVuY2lsQ29uZmlnRm9yT3ZlcmxhcD1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuY29udGV4dC5nbCxuPXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5vdmVyc2NhbGVkWi10Lm92ZXJzY2FsZWRafSkpLGk9bltuLmxlbmd0aC0xXS5vdmVyc2NhbGVkWixhPW5bMF0ub3ZlcnNjYWxlZFotaSsxO2lmKGE+MSl7dGhpcy5jdXJyZW50U3RlbmNpbFNvdXJjZT12b2lkIDAsdGhpcy5uZXh0U3RlbmNpbElEK2E+MjU2JiZ0aGlzLmNsZWFyU3RlbmNpbCgpO2Zvcih2YXIgbz17fSxzPTA7czxhO3MrKylvW3MraV09bmV3IE10KHtmdW5jOnIuR0VRVUFMLG1hc2s6MjU1fSxzK3RoaXMubmV4dFN0ZW5jaWxJRCwyNTUsci5LRUVQLHIuS0VFUCxyLlJFUExBQ0UpO3JldHVybiB0aGlzLm5leHRTdGVuY2lsSUQrPWEsW28sbl19cmV0dXJuWyhlPXt9LGVbaV09TXQuZGlzYWJsZWQsZSksbl19LF9uLnByb3RvdHlwZS5jb2xvck1vZGVGb3JSZW5kZXJQYXNzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmdsO2lmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcil7cmV0dXJuIG5ldyBTdChbZS5DT05TVEFOVF9DT0xPUixlLk9ORV0sbmV3IHQuQ29sb3IoMS84LDEvOCwxLzgsMCksWyEwLCEwLCEwLCEwXSl9cmV0dXJuIm9wYXF1ZSI9PT10aGlzLnJlbmRlclBhc3M/U3QudW5ibGVuZGVkOlN0LmFscGhhQmxlbmRlZH0sX24ucHJvdG90eXBlLmRlcHRoTW9kZUZvclN1YmxheWVyPWZ1bmN0aW9uKHQsZSxyKXtpZighdGhpcy5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyKCkpcmV0dXJuIEF0LmRpc2FibGVkO3ZhciBuPTEtKCgxK3RoaXMuY3VycmVudExheWVyKSp0aGlzLm51bVN1YmxheWVycyt0KSp0aGlzLmRlcHRoRXBzaWxvbjtyZXR1cm4gbmV3IEF0KHJ8fHRoaXMuY29udGV4dC5nbC5MRVFVQUwsZSxbbixuXSl9LF9uLnByb3RvdHlwZS5vcGFxdWVQYXNzRW5hYmxlZEZvckxheWVyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudExheWVyPHRoaXMub3BhcXVlUGFzc0N1dG9mZn0sX24ucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7dGhpcy5zdHlsZT1lLHRoaXMub3B0aW9ucz1yLHRoaXMubGluZUF0bGFzPWUubGluZUF0bGFzLHRoaXMuaW1hZ2VNYW5hZ2VyPWUuaW1hZ2VNYW5hZ2VyLHRoaXMuZ2x5cGhNYW5hZ2VyPWUuZ2x5cGhNYW5hZ2VyLHRoaXMuc3ltYm9sRmFkZUNoYW5nZT1lLnBsYWNlbWVudC5zeW1ib2xGYWRlQ2hhbmdlKHQuYnJvd3Nlci5ub3coKSksdGhpcy5pbWFnZU1hbmFnZXIuYmVnaW5GcmFtZSgpO3ZhciBpPXRoaXMuc3R5bGUuX29yZGVyLGE9dGhpcy5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBvIGluIGEpe3ZhciBzPWFbb107cy51c2VkJiZzLnByZXBhcmUodGhpcy5jb250ZXh0KX12YXIgbCxjLHU9e30sZj17fSxoPXt9O2Zvcih2YXIgcCBpbiBhKXt2YXIgZD1hW3BdO3VbcF09ZC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSxmW3BdPXVbcF0uc2xpY2UoKS5yZXZlcnNlKCksaFtwXT1kLmdldFZpc2libGVDb29yZGluYXRlcyghMCkucmV2ZXJzZSgpfXRoaXMub3BhcXVlUGFzc0N1dG9mZj0xLzA7Zm9yKHZhciBtPTA7bTxpLmxlbmd0aDttKyspe3ZhciBnPWlbbV07aWYodGhpcy5zdHlsZS5fbGF5ZXJzW2ddLmlzM0QoKSl7dGhpcy5vcGFxdWVQYXNzQ3V0b2ZmPW07YnJlYWt9fXRoaXMucmVuZGVyUGFzcz0ib2Zmc2NyZWVuIjtmb3IodmFyIHY9MCx5PWk7djx5Lmxlbmd0aDt2Kz0xKXt2YXIgeD15W3ZdLGI9dGhpcy5zdHlsZS5fbGF5ZXJzW3hdO2lmKGIuaGFzT2Zmc2NyZWVuUGFzcygpJiYhYi5pc0hpZGRlbih0aGlzLnRyYW5zZm9ybS56b29tKSl7dmFyIF89ZltiLnNvdXJjZV07KCJjdXN0b20iPT09Yi50eXBlfHxfLmxlbmd0aCkmJnRoaXMucmVuZGVyTGF5ZXIodGhpcyxhW2Iuc291cmNlXSxiLF8pfX1mb3IodGhpcy5jb250ZXh0LmJpbmRGcmFtZWJ1ZmZlci5zZXQobnVsbCksdGhpcy5jb250ZXh0LmNsZWFyKHtjb2xvcjpyLnNob3dPdmVyZHJhd0luc3BlY3Rvcj90LkNvbG9yLmJsYWNrOnQuQ29sb3IudHJhbnNwYXJlbnQsZGVwdGg6MX0pLHRoaXMuY2xlYXJTdGVuY2lsKCksdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPXIuc2hvd092ZXJkcmF3SW5zcGVjdG9yLHRoaXMuZGVwdGhSYW5nZUZvcjNEPVswLDEtKGUuX29yZGVyLmxlbmd0aCsyKSp0aGlzLm51bVN1YmxheWVycyp0aGlzLmRlcHRoRXBzaWxvbl0sdGhpcy5yZW5kZXJQYXNzPSJvcGFxdWUiLHRoaXMuY3VycmVudExheWVyPWkubGVuZ3RoLTE7dGhpcy5jdXJyZW50TGF5ZXI+PTA7dGhpcy5jdXJyZW50TGF5ZXItLSl7dmFyIHc9dGhpcy5zdHlsZS5fbGF5ZXJzW2lbdGhpcy5jdXJyZW50TGF5ZXJdXSxUPWFbdy5zb3VyY2VdLGs9dVt3LnNvdXJjZV07dGhpcy5fcmVuZGVyVGlsZUNsaXBwaW5nTWFza3ModyxrKSx0aGlzLnJlbmRlckxheWVyKHRoaXMsVCx3LGspfWZvcih0aGlzLnJlbmRlclBhc3M9InRyYW5zbHVjZW50Iix0aGlzLmN1cnJlbnRMYXllcj0wO3RoaXMuY3VycmVudExheWVyPGkubGVuZ3RoO3RoaXMuY3VycmVudExheWVyKyspe3ZhciBBPXRoaXMuc3R5bGUuX2xheWVyc1tpW3RoaXMuY3VycmVudExheWVyXV0sTT1hW0Euc291cmNlXSxTPSgic3ltYm9sIj09PUEudHlwZT9oOmYpW0Euc291cmNlXTt0aGlzLl9yZW5kZXJUaWxlQ2xpcHBpbmdNYXNrcyhBLHVbQS5zb3VyY2VdKSx0aGlzLnJlbmRlckxheWVyKHRoaXMsTSxBLFMpfXRoaXMub3B0aW9ucy5zaG93VGlsZUJvdW5kYXJpZXMmJih0LnZhbHVlcyh0aGlzLnN0eWxlLl9sYXllcnMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc291cmNlJiYhdC5pc0hpZGRlbihuLnRyYW5zZm9ybS56b29tKSYmKHQuc291cmNlIT09KGMmJmMuaWQpJiYoYz1uLnN0eWxlLnNvdXJjZUNhY2hlc1t0LnNvdXJjZV0pLCghbHx8bC5nZXRTb3VyY2UoKS5tYXh6b29tPGMuZ2V0U291cmNlKCkubWF4em9vbSkmJihsPWMpKX0pKSxsJiZibi5kZWJ1Zyh0aGlzLGwsbC5nZXRWaXNpYmxlQ29vcmRpbmF0ZXMoKSkpO3RoaXMub3B0aW9ucy5zaG93UGFkZGluZyYmbW4odGhpcyksdGhpcy5jb250ZXh0LnNldERlZmF1bHQoKX0sX24ucHJvdG90eXBlLnJlbmRlckxheWVyPWZ1bmN0aW9uKHQsZSxyLG4pe3IuaXNIaWRkZW4odGhpcy50cmFuc2Zvcm0uem9vbSl8fCgiYmFja2dyb3VuZCI9PT1yLnR5cGV8fCJjdXN0b20iPT09ci50eXBlfHxuLmxlbmd0aCkmJih0aGlzLmlkPXIuaWQsdGhpcy5ncHVUaW1pbmdTdGFydChyKSxibltyLnR5cGVdKHQsZSxyLG4sdGhpcy5zdHlsZS5wbGFjZW1lbnQudmFyaWFibGVPZmZzZXRzKSx0aGlzLmdwdVRpbWluZ0VuZCgpKX0sX24ucHJvdG90eXBlLmdwdVRpbWluZ1N0YXJ0PWZ1bmN0aW9uKHQpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciBlPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LHI9dGhpcy5ncHVUaW1lcnNbdC5pZF07cnx8KHI9dGhpcy5ncHVUaW1lcnNbdC5pZF09e2NhbGxzOjAsY3B1VGltZTowLHF1ZXJ5OmUuY3JlYXRlUXVlcnlFWFQoKX0pLHIuY2FsbHMrKyxlLmJlZ2luUXVlcnlFWFQoZS5USU1FX0VMQVBTRURfRVhULHIucXVlcnkpfX0sX24ucHJvdG90eXBlLmdwdVRpbWluZ0VuZD1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5ncHVUaW1pbmcpe3ZhciB0PXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5O3QuZW5kUXVlcnlFWFQodC5USU1FX0VMQVBTRURfRVhUKX19LF9uLnByb3RvdHlwZS5jb2xsZWN0R3B1VGltZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncHVUaW1lcnM7cmV0dXJuIHRoaXMuZ3B1VGltZXJzPXt9LHR9LF9uLnByb3RvdHlwZS5xdWVyeUdwdVRpbWVycz1mdW5jdGlvbih0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdCl7dmFyIG49dFtyXSxpPXRoaXMuY29udGV4dC5leHRUaW1lclF1ZXJ5LGE9aS5nZXRRdWVyeU9iamVjdEVYVChuLnF1ZXJ5LGkuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2kuZGVsZXRlUXVlcnlFWFQobi5xdWVyeSksZVtyXT1hfXJldHVybiBlfSxfbi5wcm90b3R5cGUudHJhbnNsYXRlUG9zTWF0cml4PWZ1bmN0aW9uKGUscixuLGksYSl7aWYoIW5bMF0mJiFuWzFdKXJldHVybiBlO3ZhciBvPWE/Im1hcCI9PT1pP3RoaXMudHJhbnNmb3JtLmFuZ2xlOjA6InZpZXdwb3J0Ij09PWk/LXRoaXMudHJhbnNmb3JtLmFuZ2xlOjA7aWYobyl7dmFyIHM9TWF0aC5zaW4obyksbD1NYXRoLmNvcyhvKTtuPVtuWzBdKmwtblsxXSpzLG5bMF0qcytuWzFdKmxdfXZhciBjPVthP25bMF06cGUocixuWzBdLHRoaXMudHJhbnNmb3JtLnpvb20pLGE/blsxXTpwZShyLG5bMV0sdGhpcy50cmFuc2Zvcm0uem9vbSksMF0sdT1uZXcgRmxvYXQzMkFycmF5KDE2KTtyZXR1cm4gdC50cmFuc2xhdGUodSxlLGMpLHV9LF9uLnByb3RvdHlwZS5zYXZlVGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV07ZT9lLnB1c2godCk6dGhpcy5fdGlsZVRleHR1cmVzW3Quc2l6ZVswXV09W3RdfSxfbi5wcm90b3R5cGUuZ2V0VGlsZVRleHR1cmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdGlsZVRleHR1cmVzW3RdO3JldHVybiBlJiZlLmxlbmd0aD4wP2UucG9wKCk6bnVsbH0sX24ucHJvdG90eXBlLmlzUGF0dGVybk1pc3Npbmc9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7aWYoIXQuZnJvbXx8IXQudG8pcmV0dXJuITA7dmFyIGU9dGhpcy5pbWFnZU1hbmFnZXIuZ2V0UGF0dGVybih0LmZyb20udG9TdHJpbmcoKSkscj10aGlzLmltYWdlTWFuYWdlci5nZXRQYXR0ZXJuKHQudG8udG9TdHJpbmcoKSk7cmV0dXJuIWV8fCFyfSxfbi5wcm90b3R5cGUudXNlUHJvZ3JhbT1mdW5jdGlvbih0LGUpe3RoaXMuY2FjaGU9dGhpcy5jYWNoZXx8e307dmFyIHI9IiIrdCsoZT9lLmNhY2hlS2V5OiIiKSsodGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yPyIvb3ZlcmRyYXciOiIiKTtyZXR1cm4gdGhpcy5jYWNoZVtyXXx8KHRoaXMuY2FjaGVbcl09bmV3IF9yKHRoaXMuY29udGV4dCx4clt0XSxlLEpyW3RdLHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3RvcikpLHRoaXMuY2FjaGVbcl19LF9uLnByb3RvdHlwZS5zZXRDdXN0b21MYXllckRlZmF1bHRzPWZ1bmN0aW9uKCl7dGhpcy5jb250ZXh0LnVuYmluZFZBTygpLHRoaXMuY29udGV4dC5jdWxsRmFjZS5zZXREZWZhdWx0KCksdGhpcy5jb250ZXh0LmFjdGl2ZVRleHR1cmUuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrLnNldERlZmF1bHQoKSx0aGlzLmNvbnRleHQucGl4ZWxTdG9yZVVucGFja1ByZW11bHRpcGx5QWxwaGEuc2V0RGVmYXVsdCgpLHRoaXMuY29udGV4dC5waXhlbFN0b3JlVW5wYWNrRmxpcFkuc2V0RGVmYXVsdCgpfSxfbi5wcm90b3R5cGUuc2V0QmFzZVN0YXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb250ZXh0LmdsO3RoaXMuY29udGV4dC5jdWxsRmFjZS5zZXQoITEpLHRoaXMuY29udGV4dC52aWV3cG9ydC5zZXQoWzAsMCx0aGlzLndpZHRoLHRoaXMuaGVpZ2h0XSksdGhpcy5jb250ZXh0LmJsZW5kRXF1YXRpb24uc2V0KHQuRlVOQ19BREQpfSxfbi5wcm90b3R5cGUuaW5pdERlYnVnT3ZlcmxheUNhbnZhcz1mdW5jdGlvbigpe2lmKG51bGw9PXRoaXMuZGVidWdPdmVybGF5Q2FudmFzKXt0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcz10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSx0aGlzLmRlYnVnT3ZlcmxheUNhbnZhcy53aWR0aD01MTIsdGhpcy5kZWJ1Z092ZXJsYXlDYW52YXMuaGVpZ2h0PTUxMjt2YXIgZT10aGlzLmNvbnRleHQuZ2w7dGhpcy5kZWJ1Z092ZXJsYXlUZXh0dXJlPW5ldyB0LlRleHR1cmUodGhpcy5jb250ZXh0LHRoaXMuZGVidWdPdmVybGF5Q2FudmFzLGUuUkdCQSl9fSxfbi5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZW1wdHlUZXh0dXJlLmRlc3Ryb3koKSx0aGlzLmRlYnVnT3ZlcmxheVRleHR1cmUmJnRoaXMuZGVidWdPdmVybGF5VGV4dHVyZS5kZXN0cm95KCl9O3ZhciB3bj1mdW5jdGlvbih0LGUpe3RoaXMucG9pbnRzPXQsdGhpcy5wbGFuZXM9ZX07d24uZnJvbUludlByb2plY3Rpb25NYXRyaXg9ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPU1hdGgucG93KDIsbiksYT1bWy0xLDEsLTEsMV0sWzEsMSwtMSwxXSxbMSwtMSwtMSwxXSxbLTEsLTEsLTEsMV0sWy0xLDEsMSwxXSxbMSwxLDEsMV0sWzEsLTEsMSwxXSxbLTEsLTEsMSwxXV0ubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KFtdLHIsZSl9KSkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5zY2FsZSQxKFtdLGUsMS9lWzNdL3IqaSl9KSksbz1bWzAsMSwyXSxbNiw1LDRdLFswLDMsN10sWzIsMSw1XSxbMywyLDZdLFswLDQsNV1dLm1hcCgoZnVuY3Rpb24oZSl7dmFyIHI9dC5zdWIoW10sYVtlWzBdXSxhW2VbMV1dKSxuPXQuc3ViKFtdLGFbZVsyXV0sYVtlWzFdXSksaT10Lm5vcm1hbGl6ZShbXSx0LmNyb3NzKFtdLHIsbikpLG89LXQuZG90KGksYVtlWzFdXSk7cmV0dXJuIGkuY29uY2F0KG8pfSkpO3JldHVybiBuZXcgd24oYSxvKX07dmFyIFRuPWZ1bmN0aW9uKGUscil7dGhpcy5taW49ZSx0aGlzLm1heD1yLHRoaXMuY2VudGVyPXQuc2NhbGUkMihbXSx0LmFkZChbXSx0aGlzLm1pbix0aGlzLm1heCksLjUpfTtUbi5wcm90b3R5cGUucXVhZHJhbnQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciByPVtlJTI9PTAsZTwyXSxuPXQuY2xvbmUkMih0aGlzLm1pbiksaT10LmNsb25lJDIodGhpcy5tYXgpLGE9MDthPHIubGVuZ3RoO2ErKyluW2FdPXJbYV0/dGhpcy5taW5bYV06dGhpcy5jZW50ZXJbYV0saVthXT1yW2FdP3RoaXMuY2VudGVyW2FdOnRoaXMubWF4W2FdO3JldHVybiBpWzJdPXRoaXMubWF4WzJdLG5ldyBUbihuLGkpfSxUbi5wcm90b3R5cGUuZGlzdGFuY2VYPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLm1pbih0aGlzLm1heFswXSx0WzBdKSx0aGlzLm1pblswXSktdFswXX0sVG4ucHJvdG90eXBlLmRpc3RhbmNlWT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5tYXhbMV0sdFsxXSksdGhpcy5taW5bMV0pLXRbMV19LFRuLnByb3RvdHlwZS5pbnRlcnNlY3RzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bW3RoaXMubWluWzBdLHRoaXMubWluWzFdLDAsMV0sW3RoaXMubWF4WzBdLHRoaXMubWluWzFdLDAsMV0sW3RoaXMubWF4WzBdLHRoaXMubWF4WzFdLDAsMV0sW3RoaXMubWluWzBdLHRoaXMubWF4WzFdLDAsMV1dLG49ITAsaT0wO2k8ZS5wbGFuZXMubGVuZ3RoO2krKyl7Zm9yKHZhciBhPWUucGxhbmVzW2ldLG89MCxzPTA7czxyLmxlbmd0aDtzKyspbys9dC5kb3QkMShhLHJbc10pPj0wO2lmKDA9PT1vKXJldHVybiAwO28hPT1yLmxlbmd0aCYmKG49ITEpfWlmKG4pcmV0dXJuIDI7Zm9yKHZhciBsPTA7bDwzO2wrKyl7Zm9yKHZhciBjPU51bWJlci5NQVhfVkFMVUUsdT0tTnVtYmVyLk1BWF9WQUxVRSxmPTA7ZjxlLnBvaW50cy5sZW5ndGg7ZisrKXt2YXIgaD1lLnBvaW50c1tmXVtsXS10aGlzLm1pbltsXTtjPU1hdGgubWluKGMsaCksdT1NYXRoLm1heCh1LGgpfWlmKHU8MHx8Yz50aGlzLm1heFtsXS10aGlzLm1pbltsXSlyZXR1cm4gMH1yZXR1cm4gMX07dmFyIGtuPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PWUmJihlPTApLHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW4mJihuPTApLGlzTmFOKHQpfHx0PDB8fGlzTmFOKGUpfHxlPDB8fGlzTmFOKHIpfHxyPDB8fGlzTmFOKG4pfHxuPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIGZvciBlZGdlLWluc2V0cywgdG9wLCBib3R0b20sIGxlZnQgYW5kIHJpZ2h0IG11c3QgYWxsIGJlIG51bWJlcnMiKTt0aGlzLnRvcD10LHRoaXMuYm90dG9tPWUsdGhpcy5sZWZ0PXIsdGhpcy5yaWdodD1ufTtrbi5wcm90b3R5cGUuaW50ZXJwb2xhdGU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBudWxsIT1yLnRvcCYmbnVsbCE9ZS50b3AmJih0aGlzLnRvcD10Lm51bWJlcihlLnRvcCxyLnRvcCxuKSksbnVsbCE9ci5ib3R0b20mJm51bGwhPWUuYm90dG9tJiYodGhpcy5ib3R0b209dC5udW1iZXIoZS5ib3R0b20sci5ib3R0b20sbikpLG51bGwhPXIubGVmdCYmbnVsbCE9ZS5sZWZ0JiYodGhpcy5sZWZ0PXQubnVtYmVyKGUubGVmdCxyLmxlZnQsbikpLG51bGwhPXIucmlnaHQmJm51bGwhPWUucmlnaHQmJih0aGlzLnJpZ2h0PXQubnVtYmVyKGUucmlnaHQsci5yaWdodCxuKSksdGhpc30sa24ucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbihlLHIpe3ZhciBuPXQuY2xhbXAoKHRoaXMubGVmdCtlLXRoaXMucmlnaHQpLzIsMCxlKSxpPXQuY2xhbXAoKHRoaXMudG9wK3ItdGhpcy5ib3R0b20pLzIsMCxyKTtyZXR1cm4gbmV3IHQuUG9pbnQobixpKX0sa24ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5sZWZ0PT09dC5sZWZ0JiZ0aGlzLnJpZ2h0PT09dC5yaWdodH0sa24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBrbih0aGlzLnRvcCx0aGlzLmJvdHRvbSx0aGlzLmxlZnQsdGhpcy5yaWdodCl9LGtuLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dG9wOnRoaXMudG9wLGJvdHRvbTp0aGlzLmJvdHRvbSxsZWZ0OnRoaXMubGVmdCxyaWdodDp0aGlzLnJpZ2h0fX07dmFyIEFuPWZ1bmN0aW9uKGUscixuLGksYSl7dGhpcy50aWxlU2l6ZT01MTIsdGhpcy5tYXhWYWxpZExhdGl0dWRlPTg1LjA1MTEyOSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz12b2lkIDA9PT1hfHxhLHRoaXMuX21pblpvb209ZXx8MCx0aGlzLl9tYXhab29tPXJ8fDIyLHRoaXMuX21pblBpdGNoPW51bGw9PW4/MDpuLHRoaXMuX21heFBpdGNoPW51bGw9PWk/NjA6aSx0aGlzLnNldE1heEJvdW5kcygpLHRoaXMud2lkdGg9MCx0aGlzLmhlaWdodD0wLHRoaXMuX2NlbnRlcj1uZXcgdC5MbmdMYXQoMCwwKSx0aGlzLnpvb209MCx0aGlzLmFuZ2xlPTAsdGhpcy5fZm92PS42NDM1MDExMDg3OTMyODQ0LHRoaXMuX3BpdGNoPTAsdGhpcy5fdW5tb2RpZmllZD0hMCx0aGlzLl9lZGdlSW5zZXRzPW5ldyBrbix0aGlzLl9wb3NNYXRyaXhDYWNoZT17fSx0aGlzLl9hbGlnbmVkUG9zTWF0cml4Q2FjaGU9e319LE1uPXttaW5ab29tOntjb25maWd1cmFibGU6ITB9LG1heFpvb206e2NvbmZpZ3VyYWJsZTohMH0sbWluUGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0sbWF4UGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0scmVuZGVyV29ybGRDb3BpZXM6e2NvbmZpZ3VyYWJsZTohMH0sd29ybGRTaXplOntjb25maWd1cmFibGU6ITB9LGNlbnRlck9mZnNldDp7Y29uZmlndXJhYmxlOiEwfSxzaXplOntjb25maWd1cmFibGU6ITB9LGJlYXJpbmc6e2NvbmZpZ3VyYWJsZTohMH0scGl0Y2g6e2NvbmZpZ3VyYWJsZTohMH0sZm92Ontjb25maWd1cmFibGU6ITB9LHpvb206e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyOntjb25maWd1cmFibGU6ITB9LHBhZGRpbmc6e2NvbmZpZ3VyYWJsZTohMH0sY2VudGVyUG9pbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdW5tb2RpZmllZDp7Y29uZmlndXJhYmxlOiEwfSxwb2ludDp7Y29uZmlndXJhYmxlOiEwfX07QW4ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEFuKHRoaXMuX21pblpvb20sdGhpcy5fbWF4Wm9vbSx0aGlzLl9taW5QaXRjaCx0aGlzLm1heFBpdGNoLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKTtyZXR1cm4gdC50aWxlU2l6ZT10aGlzLnRpbGVTaXplLHQubGF0UmFuZ2U9dGhpcy5sYXRSYW5nZSx0LndpZHRoPXRoaXMud2lkdGgsdC5oZWlnaHQ9dGhpcy5oZWlnaHQsdC5fY2VudGVyPXRoaXMuX2NlbnRlcix0Lnpvb209dGhpcy56b29tLHQuYW5nbGU9dGhpcy5hbmdsZSx0Ll9mb3Y9dGhpcy5fZm92LHQuX3BpdGNoPXRoaXMuX3BpdGNoLHQuX3VubW9kaWZpZWQ9dGhpcy5fdW5tb2RpZmllZCx0Ll9lZGdlSW5zZXRzPXRoaXMuX2VkZ2VJbnNldHMuY2xvbmUoKSx0Ll9jYWxjTWF0cmljZXMoKSx0fSxNbi5taW5ab29tLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5ab29tfSxNbi5taW5ab29tLnNldD1mdW5jdGlvbih0KXt0aGlzLl9taW5ab29tIT09dCYmKHRoaXMuX21pblpvb209dCx0aGlzLnpvb209TWF0aC5tYXgodGhpcy56b29tLHQpKX0sTW4ubWF4Wm9vbS5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF4Wm9vbX0sTW4ubWF4Wm9vbS5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4Wm9vbSE9PXQmJih0aGlzLl9tYXhab29tPXQsdGhpcy56b29tPU1hdGgubWluKHRoaXMuem9vbSx0KSl9LE1uLm1pblBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5QaXRjaH0sTW4ubWluUGl0Y2guc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX21pblBpdGNoIT09dCYmKHRoaXMuX21pblBpdGNoPXQsdGhpcy5waXRjaD1NYXRoLm1heCh0aGlzLnBpdGNoLHQpKX0sTW4ubWF4UGl0Y2guZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heFBpdGNofSxNbi5tYXhQaXRjaC5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fbWF4UGl0Y2ghPT10JiYodGhpcy5fbWF4UGl0Y2g9dCx0aGlzLnBpdGNoPU1hdGgubWluKHRoaXMucGl0Y2gsdCkpfSxNbi5yZW5kZXJXb3JsZENvcGllcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVuZGVyV29ybGRDb3BpZXN9LE1uLnJlbmRlcldvcmxkQ29waWVzLnNldD1mdW5jdGlvbih0KXt2b2lkIDA9PT10P3Q9ITA6bnVsbD09PXQmJih0PSExKSx0aGlzLl9yZW5kZXJXb3JsZENvcGllcz10fSxNbi53b3JsZFNpemUuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlsZVNpemUqdGhpcy5zY2FsZX0sTW4uY2VudGVyT2Zmc2V0LmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNlbnRlclBvaW50Ll9zdWIodGhpcy5zaXplLl9kaXYoMikpfSxNbi5zaXplLmdldD1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5Qb2ludCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KX0sTW4uYmVhcmluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4tdGhpcy5hbmdsZS9NYXRoLlBJKjE4MH0sTW4uYmVhcmluZy5zZXQ9ZnVuY3Rpb24oZSl7dmFyIHI9LXQud3JhcChlLC0xODAsMTgwKSpNYXRoLlBJLzE4MDt0aGlzLmFuZ2xlIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5hbmdsZT1yLHRoaXMuX2NhbGNNYXRyaWNlcygpLHRoaXMucm90YXRpb25NYXRyaXg9dC5jcmVhdGUkMigpLHQucm90YXRlKHRoaXMucm90YXRpb25NYXRyaXgsdGhpcy5yb3RhdGlvbk1hdHJpeCx0aGlzLmFuZ2xlKSl9LE1uLnBpdGNoLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9waXRjaC9NYXRoLlBJKjE4MH0sTW4ucGl0Y2guc2V0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZSx0aGlzLm1pblBpdGNoLHRoaXMubWF4UGl0Y2gpLzE4MCpNYXRoLlBJO3RoaXMuX3BpdGNoIT09ciYmKHRoaXMuX3VubW9kaWZpZWQ9ITEsdGhpcy5fcGl0Y2g9cix0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLmZvdi5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZm92L01hdGguUEkqMTgwfSxNbi5mb3Yuc2V0PWZ1bmN0aW9uKHQpe3Q9TWF0aC5tYXgoLjAxLE1hdGgubWluKDYwLHQpKSx0aGlzLl9mb3YhPT10JiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl9mb3Y9dC8xODAqTWF0aC5QSSx0aGlzLl9jYWxjTWF0cmljZXMoKSl9LE1uLnpvb20uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3pvb219LE1uLnpvb20uc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWluKE1hdGgubWF4KHQsdGhpcy5taW5ab29tKSx0aGlzLm1heFpvb20pO3RoaXMuX3pvb20hPT1lJiYodGhpcy5fdW5tb2RpZmllZD0hMSx0aGlzLl96b29tPWUsdGhpcy5zY2FsZT10aGlzLnpvb21TY2FsZShlKSx0aGlzLnRpbGVab29tPU1hdGguZmxvb3IoZSksdGhpcy56b29tRnJhY3Rpb249ZS10aGlzLnRpbGVab29tLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uY2VudGVyLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jZW50ZXJ9LE1uLmNlbnRlci5zZXQ9ZnVuY3Rpb24odCl7dC5sYXQ9PT10aGlzLl9jZW50ZXIubGF0JiZ0LmxuZz09PXRoaXMuX2NlbnRlci5sbmd8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2NlbnRlcj10LHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4ucGFkZGluZy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWRnZUluc2V0cy50b0pTT04oKX0sTW4ucGFkZGluZy5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fZWRnZUluc2V0cy5lcXVhbHModCl8fCh0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodGhpcy5fZWRnZUluc2V0cyx0LDEpLHRoaXMuX2NhbGNNYXRyaWNlcygpKX0sTW4uY2VudGVyUG9pbnQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMuZ2V0Q2VudGVyKHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpfSxBbi5wcm90b3R5cGUuaXNQYWRkaW5nRXF1YWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2VkZ2VJbnNldHMuZXF1YWxzKHQpfSxBbi5wcm90b3R5cGUuaW50ZXJwb2xhdGVQYWRkaW5nPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl91bm1vZGlmaWVkPSExLHRoaXMuX2VkZ2VJbnNldHMuaW50ZXJwb2xhdGUodCxlLHIpLHRoaXMuX2NvbnN0cmFpbigpLHRoaXMuX2NhbGNNYXRyaWNlcygpfSxBbi5wcm90b3R5cGUuY292ZXJpbmdab29tTGV2ZWw9ZnVuY3Rpb24odCl7dmFyIGU9KHQucm91bmRab29tP01hdGgucm91bmQ6TWF0aC5mbG9vcikodGhpcy56b29tK3RoaXMuc2NhbGVab29tKHRoaXMudGlsZVNpemUvdC50aWxlU2l6ZSkpO3JldHVybiBNYXRoLm1heCgwLGUpfSxBbi5wcm90b3R5cGUuZ2V0VmlzaWJsZVVud3JhcHBlZENvb3JkaW5hdGVzPWZ1bmN0aW9uKGUpe3ZhciByPVtuZXcgdC5VbndyYXBwZWRUaWxlSUQoMCxlKV07aWYodGhpcy5fcmVuZGVyV29ybGRDb3BpZXMpZm9yKHZhciBuPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsMCkpLGk9dGhpcy5wb2ludENvb3JkaW5hdGUobmV3IHQuUG9pbnQodGhpcy53aWR0aCwwKSksYT10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCh0aGlzLndpZHRoLHRoaXMuaGVpZ2h0KSksbz10aGlzLnBvaW50Q29vcmRpbmF0ZShuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSkscz1NYXRoLmZsb29yKE1hdGgubWluKG4ueCxpLngsYS54LG8ueCkpLGw9TWF0aC5mbG9vcihNYXRoLm1heChuLngsaS54LGEueCxvLngpKSxjPXMtMTtjPD1sKzE7YysrKTAhPT1jJiZyLnB1c2gobmV3IHQuVW53cmFwcGVkVGlsZUlEKGMsZSkpO3JldHVybiByfSxBbi5wcm90b3R5cGUuY292ZXJpbmdUaWxlcz1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmNvdmVyaW5nWm9vbUxldmVsKGUpLG49cjtpZih2b2lkIDAhPT1lLm1pbnpvb20mJnI8ZS5taW56b29tKXJldHVybltdO3ZvaWQgMCE9PWUubWF4em9vbSYmcj5lLm1heHpvb20mJihyPWUubWF4em9vbSk7dmFyIGk9dC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdCh0aGlzLmNlbnRlciksYT1NYXRoLnBvdygyLHIpLG89W2EqaS54LGEqaS55LDBdLHM9d24uZnJvbUludlByb2plY3Rpb25NYXRyaXgodGhpcy5pbnZQcm9qTWF0cml4LHRoaXMud29ybGRTaXplLHIpLGw9ZS5taW56b29tfHwwO3RoaXMucGl0Y2g8PTYwJiZ0aGlzLl9lZGdlSW5zZXRzLnRvcDwuMSYmKGw9cik7dmFyIGM9ZnVuY3Rpb24odCl7cmV0dXJue2FhYmI6bmV3IFRuKFt0KmEsMCwwXSxbKHQrMSkqYSxhLDBdKSx6b29tOjAseDowLHk6MCx3cmFwOnQsZnVsbHlWaXNpYmxlOiExfX0sdT1bXSxmPVtdLGg9cixwPWUucmVwYXJzZU92ZXJzY2FsZWQ/bjpyO2lmKHRoaXMuX3JlbmRlcldvcmxkQ29waWVzKWZvcih2YXIgZD0xO2Q8PTM7ZCsrKXUucHVzaChjKC1kKSksdS5wdXNoKGMoZCkpO2Zvcih1LnB1c2goYygwKSk7dS5sZW5ndGg+MDspe3ZhciBtPXUucG9wKCksZz1tLngsdj1tLnkseT1tLmZ1bGx5VmlzaWJsZTtpZigheSl7dmFyIHg9bS5hYWJiLmludGVyc2VjdHMocyk7aWYoMD09PXgpY29udGludWU7eT0yPT09eH12YXIgYj1tLmFhYmIuZGlzdGFuY2VYKG8pLF89bS5hYWJiLmRpc3RhbmNlWShvKSx3PU1hdGgubWF4KE1hdGguYWJzKGIpLE1hdGguYWJzKF8pKSxUPTMrKDE8PGgtbS56b29tKS0yO2lmKG0uem9vbT09PWh8fHc+VCYmbS56b29tPj1sKWYucHVzaCh7dGlsZUlEOm5ldyB0Lk92ZXJzY2FsZWRUaWxlSUQobS56b29tPT09aD9wOm0uem9vbSxtLndyYXAsbS56b29tLGcsdiksZGlzdGFuY2VTcTp0LnNxckxlbihbb1swXS0uNS1nLG9bMV0tLjUtdl0pfSk7ZWxzZSBmb3IodmFyIGs9MDtrPDQ7aysrKXt2YXIgQT0oZzw8MSkrayUyLE09KHY8PDEpKyhrPj4xKTt1LnB1c2goe2FhYmI6bS5hYWJiLnF1YWRyYW50KGspLHpvb206bS56b29tKzEseDpBLHk6TSx3cmFwOm0ud3JhcCxmdWxseVZpc2libGU6eX0pfX1yZXR1cm4gZi5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3RhbmNlU3EtZS5kaXN0YW5jZVNxfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlsZUlEfSkpfSxBbi5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKHQsZSl7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWUsdGhpcy5waXhlbHNUb0dMVW5pdHM9WzIvdCwtMi9lXSx0aGlzLl9jb25zdHJhaW4oKSx0aGlzLl9jYWxjTWF0cmljZXMoKX0sTW4udW5tb2RpZmllZC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdW5tb2RpZmllZH0sQW4ucHJvdG90eXBlLnpvb21TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5wb3coMix0KX0sQW4ucHJvdG90eXBlLnNjYWxlWm9vbT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9LEFuLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKGUpe3ZhciByPXQuY2xhbXAoZS5sYXQsLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGUpO3JldHVybiBuZXcgdC5Qb2ludCh0Lm1lcmNhdG9yWGZyb21MbmcoZS5sbmcpKnRoaXMud29ybGRTaXplLHQubWVyY2F0b3JZZnJvbUxhdChyKSp0aGlzLndvcmxkU2l6ZSl9LEFuLnByb3RvdHlwZS51bnByb2plY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShlLngvdGhpcy53b3JsZFNpemUsZS55L3RoaXMud29ybGRTaXplKS50b0xuZ0xhdCgpfSxNbi5wb2ludC5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcm9qZWN0KHRoaXMuY2VudGVyKX0sQW4ucHJvdG90eXBlLnNldExvY2F0aW9uQXRQb2ludD1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMucG9pbnRDb29yZGluYXRlKHIpLGk9dGhpcy5wb2ludENvb3JkaW5hdGUodGhpcy5jZW50ZXJQb2ludCksYT10aGlzLmxvY2F0aW9uQ29vcmRpbmF0ZShlKSxvPW5ldyB0Lk1lcmNhdG9yQ29vcmRpbmF0ZShhLngtKG4ueC1pLngpLGEueS0obi55LWkueSkpO3RoaXMuY2VudGVyPXRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKG8pLHRoaXMuX3JlbmRlcldvcmxkQ29waWVzJiYodGhpcy5jZW50ZXI9dGhpcy5jZW50ZXIud3JhcCgpKX0sQW4ucHJvdG90eXBlLmxvY2F0aW9uUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZVBvaW50KHRoaXMubG9jYXRpb25Db29yZGluYXRlKHQpKX0sQW4ucHJvdG90eXBlLnBvaW50TG9jYXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY29vcmRpbmF0ZUxvY2F0aW9uKHRoaXMucG9pbnRDb29yZGluYXRlKHQpKX0sQW4ucHJvdG90eXBlLmxvY2F0aW9uQ29vcmRpbmF0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdC5NZXJjYXRvckNvb3JkaW5hdGUuZnJvbUxuZ0xhdChlKX0sQW4ucHJvdG90eXBlLmNvb3JkaW5hdGVMb2NhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0xuZ0xhdCgpfSxBbi5wcm90b3R5cGUucG9pbnRDb29yZGluYXRlPWZ1bmN0aW9uKGUpe3ZhciByPVtlLngsZS55LDAsMV0sbj1bZS54LGUueSwxLDFdO3QudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeEludmVyc2UpLHQudHJhbnNmb3JtTWF0NChuLG4sdGhpcy5waXhlbE1hdHJpeEludmVyc2UpO3ZhciBpPXJbM10sYT1uWzNdLG89clswXS9pLHM9blswXS9hLGw9clsxXS9pLGM9blsxXS9hLHU9clsyXS9pLGY9blsyXS9hLGg9dT09PWY/MDooMC11KS8oZi11KTtyZXR1cm4gbmV3IHQuTWVyY2F0b3JDb29yZGluYXRlKHQubnVtYmVyKG8scyxoKS90aGlzLndvcmxkU2l6ZSx0Lm51bWJlcihsLGMsaCkvdGhpcy53b3JsZFNpemUpfSxBbi5wcm90b3R5cGUuY29vcmRpbmF0ZVBvaW50PWZ1bmN0aW9uKGUpe3ZhciByPVtlLngqdGhpcy53b3JsZFNpemUsZS55KnRoaXMud29ybGRTaXplLDAsMV07cmV0dXJuIHQudHJhbnNmb3JtTWF0NChyLHIsdGhpcy5waXhlbE1hdHJpeCksbmV3IHQuUG9pbnQoclswXS9yWzNdLHJbMV0vclszXSl9LEFuLnByb3RvdHlwZS5nZXRCb3VuZHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IHQuTG5nTGF0Qm91bmRzKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KDAsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsMCkpKS5leHRlbmQodGhpcy5wb2ludExvY2F0aW9uKG5ldyB0LlBvaW50KHRoaXMud2lkdGgsdGhpcy5oZWlnaHQpKSkuZXh0ZW5kKHRoaXMucG9pbnRMb2NhdGlvbihuZXcgdC5Qb2ludCgwLHRoaXMuaGVpZ2h0KSkpfSxBbi5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGF0UmFuZ2UmJjI9PT10aGlzLmxhdFJhbmdlLmxlbmd0aCYmdGhpcy5sbmdSYW5nZSYmMj09PXRoaXMubG5nUmFuZ2UubGVuZ3RoP25ldyB0LkxuZ0xhdEJvdW5kcyhbdGhpcy5sbmdSYW5nZVswXSx0aGlzLmxhdFJhbmdlWzBdXSxbdGhpcy5sbmdSYW5nZVsxXSx0aGlzLmxhdFJhbmdlWzFdXSk6bnVsbH0sQW4ucHJvdG90eXBlLnNldE1heEJvdW5kcz1mdW5jdGlvbih0KXt0Pyh0aGlzLmxuZ1JhbmdlPVt0LmdldFdlc3QoKSx0LmdldEVhc3QoKV0sdGhpcy5sYXRSYW5nZT1bdC5nZXRTb3V0aCgpLHQuZ2V0Tm9ydGgoKV0sdGhpcy5fY29uc3RyYWluKCkpOih0aGlzLmxuZ1JhbmdlPW51bGwsdGhpcy5sYXRSYW5nZT1bLXRoaXMubWF4VmFsaWRMYXRpdHVkZSx0aGlzLm1heFZhbGlkTGF0aXR1ZGVdKX0sQW4ucHJvdG90eXBlLmNhbGN1bGF0ZVBvc01hdHJpeD1mdW5jdGlvbihlLHIpe3ZvaWQgMD09PXImJihyPSExKTt2YXIgbj1lLmtleSxpPXI/dGhpcy5fYWxpZ25lZFBvc01hdHJpeENhY2hlOnRoaXMuX3Bvc01hdHJpeENhY2hlO2lmKGlbbl0pcmV0dXJuIGlbbl07dmFyIGE9ZS5jYW5vbmljYWwsbz10aGlzLndvcmxkU2l6ZS90aGlzLnpvb21TY2FsZShhLnopLHM9YS54K01hdGgucG93KDIsYS56KSplLndyYXAsbD10LmlkZW50aXR5KG5ldyBGbG9hdDY0QXJyYXkoMTYpKTtyZXR1cm4gdC50cmFuc2xhdGUobCxsLFtzKm8sYS55Km8sMF0pLHQuc2NhbGUobCxsLFtvL3QuRVhURU5ULG8vdC5FWFRFTlQsMV0pLHQubXVsdGlwbHkobCxyP3RoaXMuYWxpZ25lZFByb2pNYXRyaXg6dGhpcy5wcm9qTWF0cml4LGwpLGlbbl09bmV3IEZsb2F0MzJBcnJheShsKSxpW25dfSxBbi5wcm90b3R5cGUuY3VzdG9tTGF5ZXJNYXRyaXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXJjYXRvck1hdHJpeC5zbGljZSgpfSxBbi5wcm90b3R5cGUuX2NvbnN0cmFpbj1mdW5jdGlvbigpe2lmKHRoaXMuY2VudGVyJiZ0aGlzLndpZHRoJiZ0aGlzLmhlaWdodCYmIXRoaXMuX2NvbnN0cmFpbmluZyl7dGhpcy5fY29uc3RyYWluaW5nPSEwO3ZhciBlLHIsbixpLGE9LTkwLG89OTAscz0tMTgwLGw9MTgwLGM9dGhpcy5zaXplLHU9dGhpcy5fdW5tb2RpZmllZDtpZih0aGlzLmxhdFJhbmdlKXt2YXIgZj10aGlzLmxhdFJhbmdlO2E9dC5tZXJjYXRvcllmcm9tTGF0KGZbMV0pKnRoaXMud29ybGRTaXplLGU9KG89dC5tZXJjYXRvcllmcm9tTGF0KGZbMF0pKnRoaXMud29ybGRTaXplKS1hPGMueT9jLnkvKG8tYSk6MH1pZih0aGlzLmxuZ1JhbmdlKXt2YXIgaD10aGlzLmxuZ1JhbmdlO3M9dC5tZXJjYXRvclhmcm9tTG5nKGhbMF0pKnRoaXMud29ybGRTaXplLHI9KGw9dC5tZXJjYXRvclhmcm9tTG5nKGhbMV0pKnRoaXMud29ybGRTaXplKS1zPGMueD9jLngvKGwtcyk6MH12YXIgcD10aGlzLnBvaW50LGQ9TWF0aC5tYXgocnx8MCxlfHwwKTtpZihkKXJldHVybiB0aGlzLmNlbnRlcj10aGlzLnVucHJvamVjdChuZXcgdC5Qb2ludChyPyhsK3MpLzI6cC54LGU/KG8rYSkvMjpwLnkpKSx0aGlzLnpvb20rPXRoaXMuc2NhbGVab29tKGQpLHRoaXMuX3VubW9kaWZpZWQ9dSx2b2lkKHRoaXMuX2NvbnN0cmFpbmluZz0hMSk7aWYodGhpcy5sYXRSYW5nZSl7dmFyIG09cC55LGc9Yy55LzI7bS1nPGEmJihpPWErZyksbStnPm8mJihpPW8tZyl9aWYodGhpcy5sbmdSYW5nZSl7dmFyIHY9cC54LHk9Yy54LzI7di15PHMmJihuPXMreSksdit5PmwmJihuPWwteSl9dm9pZCAwPT09biYmdm9pZCAwPT09aXx8KHRoaXMuY2VudGVyPXRoaXMudW5wcm9qZWN0KG5ldyB0LlBvaW50KHZvaWQgMCE9PW4/bjpwLngsdm9pZCAwIT09aT9pOnAueSkpKSx0aGlzLl91bm1vZGlmaWVkPXUsdGhpcy5fY29uc3RyYWluaW5nPSExfX0sQW4ucHJvdG90eXBlLl9jYWxjTWF0cmljZXM9ZnVuY3Rpb24oKXtpZih0aGlzLmhlaWdodCl7dmFyIGU9dGhpcy5fZm92LzIscj10aGlzLmNlbnRlck9mZnNldDt0aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2U9LjUvTWF0aC50YW4oZSkqdGhpcy5oZWlnaHQ7dmFyIG49TWF0aC5QSS8yK3RoaXMuX3BpdGNoLGk9dGhpcy5fZm92KiguNStyLnkvdGhpcy5oZWlnaHQpLGE9TWF0aC5zaW4oaSkqdGhpcy5jYW1lcmFUb0NlbnRlckRpc3RhbmNlL01hdGguc2luKHQuY2xhbXAoTWF0aC5QSS1uLWksLjAxLE1hdGguUEktLjAxKSksbz10aGlzLnBvaW50LHM9by54LGw9by55LGM9MS4wMSooTWF0aC5jb3MoTWF0aC5QSS8yLXRoaXMuX3BpdGNoKSphK3RoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZSksdT10aGlzLmhlaWdodC81MCxmPW5ldyBGbG9hdDY0QXJyYXkoMTYpO3QucGVyc3BlY3RpdmUoZix0aGlzLl9mb3YsdGhpcy53aWR0aC90aGlzLmhlaWdodCx1LGMpLGZbOF09Miotci54L3RoaXMud2lkdGgsZls5XT0yKnIueS90aGlzLmhlaWdodCx0LnNjYWxlKGYsZixbMSwtMSwxXSksdC50cmFuc2xhdGUoZixmLFswLDAsLXRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZV0pLHQucm90YXRlWChmLGYsdGhpcy5fcGl0Y2gpLHQucm90YXRlWihmLGYsdGhpcy5hbmdsZSksdC50cmFuc2xhdGUoZixmLFstcywtbCwwXSksdGhpcy5tZXJjYXRvck1hdHJpeD10LnNjYWxlKFtdLGYsW3RoaXMud29ybGRTaXplLHRoaXMud29ybGRTaXplLHRoaXMud29ybGRTaXplXSksdC5zY2FsZShmLGYsWzEsMSx0Lm1lcmNhdG9yWmZyb21BbHRpdHVkZSgxLHRoaXMuY2VudGVyLmxhdCkqdGhpcy53b3JsZFNpemUsMV0pLHRoaXMucHJvak1hdHJpeD1mLHRoaXMuaW52UHJvak1hdHJpeD10LmludmVydChbXSx0aGlzLnByb2pNYXRyaXgpO3ZhciBoPXRoaXMud2lkdGglMi8yLHA9dGhpcy5oZWlnaHQlMi8yLGQ9TWF0aC5jb3ModGhpcy5hbmdsZSksbT1NYXRoLnNpbih0aGlzLmFuZ2xlKSxnPXMtTWF0aC5yb3VuZChzKStkKmgrbSpwLHY9bC1NYXRoLnJvdW5kKGwpK2QqcCttKmgseT1uZXcgRmxvYXQ2NEFycmF5KGYpO2lmKHQudHJhbnNsYXRlKHkseSxbZz4uNT9nLTE6Zyx2Pi41P3YtMTp2LDBdKSx0aGlzLmFsaWduZWRQcm9qTWF0cml4PXksZj10LmNyZWF0ZSgpLHQuc2NhbGUoZixmLFt0aGlzLndpZHRoLzIsLXRoaXMuaGVpZ2h0LzIsMV0pLHQudHJhbnNsYXRlKGYsZixbMSwtMSwwXSksdGhpcy5sYWJlbFBsYW5lTWF0cml4PWYsZj10LmNyZWF0ZSgpLHQuc2NhbGUoZixmLFsxLC0xLDFdKSx0LnRyYW5zbGF0ZShmLGYsWy0xLC0xLDBdKSx0LnNjYWxlKGYsZixbMi90aGlzLndpZHRoLDIvdGhpcy5oZWlnaHQsMV0pLHRoaXMuZ2xDb29yZE1hdHJpeD1mLHRoaXMucGl4ZWxNYXRyaXg9dC5tdWx0aXBseShuZXcgRmxvYXQ2NEFycmF5KDE2KSx0aGlzLmxhYmVsUGxhbmVNYXRyaXgsdGhpcy5wcm9qTWF0cml4KSwhKGY9dC5pbnZlcnQobmV3IEZsb2F0NjRBcnJheSgxNiksdGhpcy5waXhlbE1hdHJpeCkpKXRocm93IG5ldyBFcnJvcigiZmFpbGVkIHRvIGludmVydCBtYXRyaXgiKTt0aGlzLnBpeGVsTWF0cml4SW52ZXJzZT1mLHRoaXMuX3Bvc01hdHJpeENhY2hlPXt9LHRoaXMuX2FsaWduZWRQb3NNYXRyaXhDYWNoZT17fX19LEFuLnByb3RvdHlwZS5tYXhQaXRjaFNjYWxlRmFjdG9yPWZ1bmN0aW9uKCl7aWYoIXRoaXMucGl4ZWxNYXRyaXhJbnZlcnNlKXJldHVybiAxO3ZhciBlPXRoaXMucG9pbnRDb29yZGluYXRlKG5ldyB0LlBvaW50KDAsMCkpLHI9W2UueCp0aGlzLndvcmxkU2l6ZSxlLnkqdGhpcy53b3JsZFNpemUsMCwxXTtyZXR1cm4gdC50cmFuc2Zvcm1NYXQ0KHIscix0aGlzLnBpeGVsTWF0cml4KVszXS90aGlzLmNhbWVyYVRvQ2VudGVyRGlzdGFuY2V9LEFuLnByb3RvdHlwZS5nZXRDYW1lcmFQb2ludD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX3BpdGNoLHI9TWF0aC50YW4oZSkqKHRoaXMuY2FtZXJhVG9DZW50ZXJEaXN0YW5jZXx8MSk7cmV0dXJuIHRoaXMuY2VudGVyUG9pbnQuYWRkKG5ldyB0LlBvaW50KDAscikpfSxBbi5wcm90b3R5cGUuZ2V0Q2FtZXJhUXVlcnlHZW9tZXRyeT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLmdldENhbWVyYVBvaW50KCk7aWYoMT09PWUubGVuZ3RoKXJldHVybltlWzBdLHJdO2Zvcih2YXIgbj1yLngsaT1yLnksYT1yLngsbz1yLnkscz0wLGw9ZTtzPGwubGVuZ3RoO3MrPTEpe3ZhciBjPWxbc107bj1NYXRoLm1pbihuLGMueCksaT1NYXRoLm1pbihpLGMueSksYT1NYXRoLm1heChhLGMueCksbz1NYXRoLm1heChvLGMueSl9cmV0dXJuW25ldyB0LlBvaW50KG4saSksbmV3IHQuUG9pbnQoYSxpKSxuZXcgdC5Qb2ludChhLG8pLG5ldyB0LlBvaW50KG4sbyksbmV3IHQuUG9pbnQobixpKV19LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEFuLnByb3RvdHlwZSxNbik7dmFyIFNuPWZ1bmN0aW9uKGUpe3ZhciByLG4saSxhLG87dGhpcy5faGFzaE5hbWU9ZSYmZW5jb2RlVVJJQ29tcG9uZW50KGUpLHQuYmluZEFsbChbIl9nZXRDdXJyZW50SGFzaCIsIl9vbkhhc2hDaGFuZ2UiLCJfdXBkYXRlSGFzaCJdLHRoaXMpLHRoaXMuX3VwZGF0ZUhhc2g9KHI9dGhpcy5fdXBkYXRlSGFzaFVudGhyb3R0bGVkLmJpbmQodGhpcyksbj0zMDAsaT0hMSxhPW51bGwsbz1mdW5jdGlvbigpe2E9bnVsbCxpJiYocigpLGE9c2V0VGltZW91dChvLG4pLGk9ITEpfSxmdW5jdGlvbigpe3JldHVybiBpPSEwLGF8fG8oKSxhfSl9O1NuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdC53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub24oIm1vdmVlbmQiLHRoaXMuX3VwZGF0ZUhhc2gpLHRoaXN9LFNuLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsdGhpcy5fb25IYXNoQ2hhbmdlLCExKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVIYXNoKSxjbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlSGFzaCgpKSxkZWxldGUgdGhpcy5fbWFwLHRoaXN9LFNuLnByb3RvdHlwZS5nZXRIYXNoU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuX21hcC5nZXRDZW50ZXIoKSxuPU1hdGgucm91bmQoMTAwKnRoaXMuX21hcC5nZXRab29tKCkpLzEwMCxpPU1hdGguY2VpbCgobipNYXRoLkxOMitNYXRoLmxvZyg1MTIvMzYwLy41KSkvTWF0aC5MTjEwKSxhPU1hdGgucG93KDEwLGkpLG89TWF0aC5yb3VuZChyLmxuZyphKS9hLHM9TWF0aC5yb3VuZChyLmxhdCphKS9hLGw9dGhpcy5fbWFwLmdldEJlYXJpbmcoKSxjPXRoaXMuX21hcC5nZXRQaXRjaCgpLHU9IiI7aWYodSs9ZT8iLyIrbysiLyIrcysiLyIrbjpuKyIvIitzKyIvIitvLChsfHxjKSYmKHUrPSIvIitNYXRoLnJvdW5kKDEwKmwpLzEwKSxjJiYodSs9Ii8iK01hdGgucm91bmQoYykpLHRoaXMuX2hhc2hOYW1lKXt2YXIgZj10aGlzLl9oYXNoTmFtZSxoPSExLHA9dC53aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKS5zcGxpdCgiJiIpLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dC5zcGxpdCgiPSIpWzBdO3JldHVybiBlPT09Zj8oaD0hMCxlKyI9Iit1KTp0fSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSk7cmV0dXJuIGh8fHAucHVzaChmKyI9Iit1KSwiIyIrcC5qb2luKCImIil9cmV0dXJuIiMiK3V9LFNuLnByb3RvdHlwZS5fZ2V0Q3VycmVudEhhc2g9ZnVuY3Rpb24oKXt2YXIgZSxyPXRoaXMsbj10LndpbmRvdy5sb2NhdGlvbi5oYXNoLnJlcGxhY2UoIiMiLCIiKTtyZXR1cm4gdGhpcy5faGFzaE5hbWU/KG4uc3BsaXQoIiYiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwbGl0KCI9Iil9KSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dFswXT09PXIuX2hhc2hOYW1lJiYoZT10KX0pKSwoZSYmZVsxXXx8IiIpLnNwbGl0KCIvIikpOm4uc3BsaXQoIi8iKX0sU24ucHJvdG90eXBlLl9vbkhhc2hDaGFuZ2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRDdXJyZW50SGFzaCgpO2lmKHQubGVuZ3RoPj0zJiYhdC5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odCl9KSkpe3ZhciBlPXRoaXMuX21hcC5kcmFnUm90YXRlLmlzRW5hYmxlZCgpJiZ0aGlzLl9tYXAudG91Y2hab29tUm90YXRlLmlzRW5hYmxlZCgpPysodFszXXx8MCk6dGhpcy5fbWFwLmdldEJlYXJpbmcoKTtyZXR1cm4gdGhpcy5fbWFwLmp1bXBUbyh7Y2VudGVyOlsrdFsyXSwrdFsxXV0sem9vbTordFswXSxiZWFyaW5nOmUscGl0Y2g6Kyh0WzRdfHwwKX0pLCEwfXJldHVybiExfSxTbi5wcm90b3R5cGUuX3VwZGF0ZUhhc2hVbnRocm90dGxlZD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGFzaFN0cmluZygpO3RyeXt0LndpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSh0LndpbmRvdy5oaXN0b3J5LnN0YXRlLCIiLGUpfWNhdGNoKHQpe319O3ZhciBFbj17bGluZWFyaXR5Oi4zLGVhc2luZzp0LmJlemllcigwLDAsLjMsMSl9LExuPXQuZXh0ZW5kKHtkZWNlbGVyYXRpb246MjUwMCxtYXhTcGVlZDoxNDAwfSxFbiksQ249dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoyMCxtYXhTcGVlZDoxNDAwfSxFbiksUG49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6MzYwfSxFbiksSW49dC5leHRlbmQoe2RlY2VsZXJhdGlvbjoxZTMsbWF4U3BlZWQ6OTB9LEVuKSxPbj1mdW5jdGlvbih0KXt0aGlzLl9tYXA9dCx0aGlzLmNsZWFyKCl9O2Z1bmN0aW9uIHpuKHQsZSl7KCF0LmR1cmF0aW9ufHx0LmR1cmF0aW9uPGUuZHVyYXRpb24pJiYodC5kdXJhdGlvbj1lLmR1cmF0aW9uLHQuZWFzaW5nPWUuZWFzaW5nKX1mdW5jdGlvbiBEbihlLHIsbil7dmFyIGk9bi5tYXhTcGVlZCxhPW4ubGluZWFyaXR5LG89bi5kZWNlbGVyYXRpb24scz10LmNsYW1wKGUqYS8oci8xZTMpLC1pLGkpLGw9TWF0aC5hYnMocykvKG8qYSk7cmV0dXJue2Vhc2luZzpuLmVhc2luZyxkdXJhdGlvbjoxZTMqbCxhbW91bnQ6cyoobC8yKX19T24ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5faW5lcnRpYUJ1ZmZlcj1bXX0sT24ucHJvdG90eXBlLnJlY29yZD1mdW5jdGlvbihlKXt0aGlzLl9kcmFpbkluZXJ0aWFCdWZmZXIoKSx0aGlzLl9pbmVydGlhQnVmZmVyLnB1c2goe3RpbWU6dC5icm93c2VyLm5vdygpLHNldHRpbmdzOmV9KX0sT24ucHJvdG90eXBlLl9kcmFpbkluZXJ0aWFCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5faW5lcnRpYUJ1ZmZlcixyPXQuYnJvd3Nlci5ub3coKTtlLmxlbmd0aD4wJiZyLWVbMF0udGltZT4xNjA7KWUuc2hpZnQoKX0sT24ucHJvdG90eXBlLl9vbk1vdmVFbmQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZHJhaW5JbmVydGlhQnVmZmVyKCksISh0aGlzLl9pbmVydGlhQnVmZmVyLmxlbmd0aDwyKSl7Zm9yKHZhciByPXt6b29tOjAsYmVhcmluZzowLHBpdGNoOjAscGFuOm5ldyB0LlBvaW50KDAsMCkscGluY2hBcm91bmQ6dm9pZCAwLGFyb3VuZDp2b2lkIDB9LG49MCxpPXRoaXMuX2luZXJ0aWFCdWZmZXI7bjxpLmxlbmd0aDtuKz0xKXt2YXIgYT1pW25dLnNldHRpbmdzO3Iuem9vbSs9YS56b29tRGVsdGF8fDAsci5iZWFyaW5nKz1hLmJlYXJpbmdEZWx0YXx8MCxyLnBpdGNoKz1hLnBpdGNoRGVsdGF8fDAsYS5wYW5EZWx0YSYmci5wYW4uX2FkZChhLnBhbkRlbHRhKSxhLmFyb3VuZCYmKHIuYXJvdW5kPWEuYXJvdW5kKSxhLnBpbmNoQXJvdW5kJiYoci5waW5jaEFyb3VuZD1hLnBpbmNoQXJvdW5kKX12YXIgbz10aGlzLl9pbmVydGlhQnVmZmVyW3RoaXMuX2luZXJ0aWFCdWZmZXIubGVuZ3RoLTFdLnRpbWUtdGhpcy5faW5lcnRpYUJ1ZmZlclswXS50aW1lLHM9e307aWYoci5wYW4ubWFnKCkpe3ZhciBsPURuKHIucGFuLm1hZygpLG8sdC5leHRlbmQoe30sTG4sZXx8e30pKTtzLm9mZnNldD1yLnBhbi5tdWx0KGwuYW1vdW50L3IucGFuLm1hZygpKSxzLmNlbnRlcj10aGlzLl9tYXAudHJhbnNmb3JtLmNlbnRlcix6bihzLGwpfWlmKHIuem9vbSl7dmFyIGM9RG4oci56b29tLG8sQ24pO3Muem9vbT10aGlzLl9tYXAudHJhbnNmb3JtLnpvb20rYy5hbW91bnQsem4ocyxjKX1pZihyLmJlYXJpbmcpe3ZhciB1PURuKHIuYmVhcmluZyxvLFBuKTtzLmJlYXJpbmc9dGhpcy5fbWFwLnRyYW5zZm9ybS5iZWFyaW5nK3QuY2xhbXAodS5hbW91bnQsLTE3OSwxNzkpLHpuKHMsdSl9aWYoci5waXRjaCl7dmFyIGY9RG4oci5waXRjaCxvLEluKTtzLnBpdGNoPXRoaXMuX21hcC50cmFuc2Zvcm0ucGl0Y2grZi5hbW91bnQsem4ocyxmKX1pZihzLnpvb218fHMuYmVhcmluZyl7dmFyIGg9dm9pZCAwPT09ci5waW5jaEFyb3VuZD9yLmFyb3VuZDpyLnBpbmNoQXJvdW5kO3MuYXJvdW5kPWg/dGhpcy5fbWFwLnVucHJvamVjdChoKTp0aGlzLl9tYXAuZ2V0Q2VudGVyKCl9cmV0dXJuIHRoaXMuY2xlYXIoKSx0LmV4dGVuZChzLHtub01vdmVTdGFydDohMH0pfX07dmFyIFJuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEsbyl7dm9pZCAwPT09byYmKG89e30pO3ZhciBzPXIubW91c2VQb3MoaS5nZXRDYW52YXNDb250YWluZXIoKSxhKSxsPWkudW5wcm9qZWN0KHMpO2UuY2FsbCh0aGlzLG4sdC5leHRlbmQoe3BvaW50OnMsbG5nTGF0Omwsb3JpZ2luYWxFdmVudDphfSxvKSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMSx0aGlzLnRhcmdldD1pfWUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uO3ZhciBpPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gbi5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxpLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4ucHJvdG90eXBlLGkpLG59KHQuRXZlbnQpLEZuPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4obixpLGEpe3ZhciBvPSJ0b3VjaGVuZCI9PT1uP2EuY2hhbmdlZFRvdWNoZXM6YS50b3VjaGVzLHM9ci50b3VjaFBvcyhpLmdldENhbnZhc0NvbnRhaW5lcigpLG8pLGw9cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBpLnVucHJvamVjdCh0KX0pKSxjPXMucmVkdWNlKChmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdC5hZGQoZS5kaXYobi5sZW5ndGgpKX0pLG5ldyB0LlBvaW50KDAsMCkpLHU9aS51bnByb2plY3QoYyk7ZS5jYWxsKHRoaXMsbix7cG9pbnRzOnMscG9pbnQ6YyxsbmdMYXRzOmwsbG5nTGF0OnUsb3JpZ2luYWxFdmVudDphfSksdGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMX1lJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bjt2YXIgaT17ZGVmYXVsdFByZXZlbnRlZDp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIG4ucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5fZGVmYXVsdFByZXZlbnRlZD0hMH0saS5kZWZhdWx0UHJldmVudGVkLmdldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kZWZhdWx0UHJldmVudGVkfSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLnByb3RvdHlwZSxpKSxufSh0LkV2ZW50KSxCbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUscixuKXt0LmNhbGwodGhpcyxlLHtvcmlnaW5hbEV2ZW50Om59KSx0aGlzLl9kZWZhdWx0UHJldmVudGVkPSExfXQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lO3ZhciByPXtkZWZhdWx0UHJldmVudGVkOntjb25maWd1cmFibGU6ITB9fTtyZXR1cm4gZS5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLl9kZWZhdWx0UHJldmVudGVkPSEwfSxyLmRlZmF1bHRQcmV2ZW50ZWQuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlZmF1bHRQcmV2ZW50ZWR9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUucHJvdG90eXBlLHIpLGV9KHQuRXZlbnQpLE5uPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fY2xpY2tUb2xlcmFuY2U9ZS5jbGlja1RvbGVyYW5jZX07Tm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuX21vdXNlZG93blBvc30sTm4ucHJvdG90eXBlLndoZWVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IEJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX21vdXNlZG93blBvcz1lLHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgUm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS5tb3VzZXVwPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLmNsaWNrPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbW91c2Vkb3duUG9zJiZ0aGlzLl9tb3VzZWRvd25Qb3MuZGlzdChlKT49dGhpcy5fY2xpY2tUb2xlcmFuY2V8fHRoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLmRibGNsaWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9maXJlUHJldmVudGFibGUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUubW91c2VvdmVyPWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLm1vdXNlb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKX0sTm4ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ZpcmVQcmV2ZW50YWJsZShuZXcgRm4odC50eXBlLHRoaXMuX21hcCx0KSl9LE5uLnByb3RvdHlwZS50b3VjaG1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IEZuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxObi5wcm90b3R5cGUuX2ZpcmVQcmV2ZW50YWJsZT1mdW5jdGlvbih0KXtpZih0aGlzLl9tYXAuZmlyZSh0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJue319LE5uLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMH0sTm4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuITF9LE5uLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt9LE5uLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7fTt2YXIgam49ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXR9O2puLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU9ITEsZGVsZXRlIHRoaXMuX2NvbnRleHRNZW51RXZlbnR9LGpuLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5fbWFwLmZpcmUobmV3IFJuKHQudHlwZSx0aGlzLl9tYXAsdCkpfSxqbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKCl7dGhpcy5fZGVsYXlDb250ZXh0TWVudT0hMH0sam4ucHJvdG90eXBlLm1vdXNldXA9ZnVuY3Rpb24oKXt0aGlzLl9kZWxheUNvbnRleHRNZW51PSExLHRoaXMuX2NvbnRleHRNZW51RXZlbnQmJih0aGlzLl9tYXAuZmlyZShuZXcgUm4oImNvbnRleHRtZW51Iix0aGlzLl9tYXAsdGhpcy5fY29udGV4dE1lbnVFdmVudCkpLGRlbGV0ZSB0aGlzLl9jb250ZXh0TWVudUV2ZW50KX0sam4ucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3RoaXMuX2RlbGF5Q29udGV4dE1lbnU/dGhpcy5fY29udGV4dE1lbnVFdmVudD10OnRoaXMuX21hcC5maXJlKG5ldyBSbih0LnR5cGUsdGhpcy5fbWFwLHQpKSx0aGlzLl9tYXAubGlzdGVucygiY29udGV4dG1lbnUiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxqbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuITB9LGpuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiExfSxqbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7fSxqbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe307dmFyIFVuPWZ1bmN0aW9uKHQsZSl7dGhpcy5fbWFwPXQsdGhpcy5fZWw9dC5nZXRDYW52YXNDb250YWluZXIoKSx0aGlzLl9jb250YWluZXI9dC5nZXRDb250YWluZXIoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT1lLmNsaWNrVG9sZXJhbmNlfHwxfTtmdW5jdGlvbiBWbih0LGUpe2Zvcih2YXIgcj17fSxuPTA7bjx0Lmxlbmd0aDtuKyspclt0W25dLmlkZW50aWZpZXJdPWVbbl07cmV0dXJuIHJ9VW4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fZW5hYmxlZH0sVW4ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9hY3RpdmV9LFVuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpfHwodGhpcy5fZW5hYmxlZD0hMCl9LFVuLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5pc0VuYWJsZWQoKSYmKHRoaXMuX2VuYWJsZWQ9ITEpfSxVbi5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5pc0VuYWJsZWQoKSYmdC5zaGlmdEtleSYmMD09PXQuYnV0dG9uJiYoci5kaXNhYmxlRHJhZygpLHRoaXMuX3N0YXJ0UG9zPXRoaXMuX2xhc3RQb3M9ZSx0aGlzLl9hY3RpdmU9ITApfSxVbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5fYWN0aXZlKXt2YXIgbj1lO2lmKCEodGhpcy5fbGFzdFBvcy5lcXVhbHMobil8fCF0aGlzLl9ib3gmJm4uZGlzdCh0aGlzLl9zdGFydFBvcyk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXt2YXIgaT10aGlzLl9zdGFydFBvczt0aGlzLl9sYXN0UG9zPW4sdGhpcy5fYm94fHwodGhpcy5fYm94PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1ib3h6b29tIix0aGlzLl9jb250YWluZXIpLHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jcm9zc2hhaXIiKSx0aGlzLl9maXJlRXZlbnQoImJveHpvb21zdGFydCIsdCkpO3ZhciBhPU1hdGgubWluKGkueCxuLngpLG89TWF0aC5tYXgoaS54LG4ueCkscz1NYXRoLm1pbihpLnksbi55KSxsPU1hdGgubWF4KGkueSxuLnkpO3Iuc2V0VHJhbnNmb3JtKHRoaXMuX2JveCwidHJhbnNsYXRlKCIrYSsicHgsIitzKyJweCkiKSx0aGlzLl9ib3guc3R5bGUud2lkdGg9by1hKyJweCIsdGhpcy5fYm94LnN0eWxlLmhlaWdodD1sLXMrInB4In19fSxVbi5wcm90b3R5cGUubW91c2V1cFdpbmRvdz1mdW5jdGlvbihlLG4pe3ZhciBpPXRoaXM7aWYodGhpcy5fYWN0aXZlJiYwPT09ZS5idXR0b24pe3ZhciBhPXRoaXMuX3N0YXJ0UG9zLG89bjtpZih0aGlzLnJlc2V0KCksci5zdXBwcmVzc0NsaWNrKCksYS54IT09by54fHxhLnkhPT1vLnkpcmV0dXJuIHRoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KCJib3h6b29tZW5kIix7b3JpZ2luYWxFdmVudDplfSkpLHtjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24odCl7cmV0dXJuIHQuZml0U2NyZWVuQ29vcmRpbmF0ZXMoYSxvLGkuX21hcC5nZXRCZWFyaW5nKCkse2xpbmVhcjohMH0pfX07dGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIixlKX19LFVuLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe3RoaXMuX2FjdGl2ZSYmMjc9PT10LmtleUNvZGUmJih0aGlzLnJlc2V0KCksdGhpcy5fZmlyZUV2ZW50KCJib3h6b29tY2FuY2VsIix0KSl9LFVuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3Jvc3NoYWlyIiksdGhpcy5fYm94JiYoci5yZW1vdmUodGhpcy5fYm94KSx0aGlzLl9ib3g9bnVsbCksci5lbmFibGVEcmFnKCksZGVsZXRlIHRoaXMuX3N0YXJ0UG9zLGRlbGV0ZSB0aGlzLl9sYXN0UG9zfSxVbi5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3JldHVybiB0aGlzLl9tYXAuZmlyZShuZXcgdC5FdmVudChlLHtvcmlnaW5hbEV2ZW50OnJ9KSl9O3ZhciBIbj1mdW5jdGlvbih0KXt0aGlzLnJlc2V0KCksdGhpcy5udW1Ub3VjaGVzPXQubnVtVG91Y2hlc307SG4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2VudHJvaWQsZGVsZXRlIHRoaXMuc3RhcnRUaW1lLGRlbGV0ZSB0aGlzLnRvdWNoZXMsdGhpcy5hYm9ydGVkPSExfSxIbi5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbihlLHIsbil7KHRoaXMuY2VudHJvaWR8fG4ubGVuZ3RoPnRoaXMubnVtVG91Y2hlcykmJih0aGlzLmFib3J0ZWQ9ITApLHRoaXMuYWJvcnRlZHx8KHZvaWQgMD09PXRoaXMuc3RhcnRUaW1lJiYodGhpcy5zdGFydFRpbWU9ZS50aW1lU3RhbXApLG4ubGVuZ3RoPT09dGhpcy5udW1Ub3VjaGVzJiYodGhpcy5jZW50cm9pZD1mdW5jdGlvbihlKXtmb3IodmFyIHI9bmV3IHQuUG9pbnQoMCwwKSxuPTAsaT1lO248aS5sZW5ndGg7bis9MSl7dmFyIGE9aVtuXTtyLl9hZGQoYSl9cmV0dXJuIHIuZGl2KGUubGVuZ3RoKX0ociksdGhpcy50b3VjaGVzPVZuKG4scikpKX0sSG4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYoIXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZCl7dmFyIG49Vm4ocixlKTtmb3IodmFyIGkgaW4gdGhpcy50b3VjaGVzKXt2YXIgYT10aGlzLnRvdWNoZXNbaV0sbz1uW2ldOyghb3x8by5kaXN0KGEpPjMwKSYmKHRoaXMuYWJvcnRlZD0hMCl9fX0sSG4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXtpZigoIXRoaXMuY2VudHJvaWR8fHQudGltZVN0YW1wLXRoaXMuc3RhcnRUaW1lPjUwMCkmJih0aGlzLmFib3J0ZWQ9ITApLDA9PT1yLmxlbmd0aCl7dmFyIG49IXRoaXMuYWJvcnRlZCYmdGhpcy5jZW50cm9pZDtpZih0aGlzLnJlc2V0KCksbilyZXR1cm4gbn19O3ZhciBxbj1mdW5jdGlvbih0KXt0aGlzLnNpbmdsZVRhcD1uZXcgSG4odCksdGhpcy5udW1UYXBzPXQubnVtVGFwcyx0aGlzLnJlc2V0KCl9O3FuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMubGFzdFRpbWU9MS8wLGRlbGV0ZSB0aGlzLmxhc3RUYXAsdGhpcy5jb3VudD0wLHRoaXMuc2luZ2xlVGFwLnJlc2V0KCl9LHFuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLnNpbmdsZVRhcC50b3VjaHN0YXJ0KHQsZSxyKX0scW4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7dGhpcy5zaW5nbGVUYXAudG91Y2htb3ZlKHQsZSxyKX0scW4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLnNpbmdsZVRhcC50b3VjaGVuZCh0LGUscik7aWYobil7dmFyIGk9dC50aW1lU3RhbXAtdGhpcy5sYXN0VGltZTw1MDAsYT0hdGhpcy5sYXN0VGFwfHx0aGlzLmxhc3RUYXAuZGlzdChuKTwzMDtpZihpJiZhfHx0aGlzLnJlc2V0KCksdGhpcy5jb3VudCsrLHRoaXMubGFzdFRpbWU9dC50aW1lU3RhbXAsdGhpcy5sYXN0VGFwPW4sdGhpcy5jb3VudD09PXRoaXMubnVtVGFwcylyZXR1cm4gdGhpcy5yZXNldCgpLG59fTt2YXIgR249ZnVuY3Rpb24oKXt0aGlzLl96b29tSW49bmV3IHFuKHtudW1Ub3VjaGVzOjEsbnVtVGFwczoyfSksdGhpcy5fem9vbU91dD1uZXcgcW4oe251bVRvdWNoZXM6MixudW1UYXBzOjF9KSx0aGlzLnJlc2V0KCl9O0duLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSx0aGlzLl96b29tSW4ucmVzZXQoKSx0aGlzLl96b29tT3V0LnJlc2V0KCl9LEduLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl96b29tSW4udG91Y2hzdGFydCh0LGUsciksdGhpcy5fem9vbU91dC50b3VjaHN0YXJ0KHQsZSxyKX0sR24ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7dGhpcy5fem9vbUluLnRvdWNobW92ZSh0LGUsciksdGhpcy5fem9vbU91dC50b3VjaG1vdmUodCxlLHIpfSxHbi5wcm90b3R5cGUudG91Y2hlbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT10aGlzLl96b29tSW4udG91Y2hlbmQodCxlLHIpLGE9dGhpcy5fem9vbU91dC50b3VjaGVuZCh0LGUscik7cmV0dXJuIGk/KHRoaXMuX2FjdGl2ZT0hMCx0LnByZXZlbnREZWZhdWx0KCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtyZXR1cm4gbi5yZXNldCgpfSksMCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS5lYXNlVG8oe2R1cmF0aW9uOjMwMCx6b29tOmUuZ2V0Wm9vbSgpKzEsYXJvdW5kOmUudW5wcm9qZWN0KGkpfSx7b3JpZ2luYWxFdmVudDp0fSl9fSk6YT8odGhpcy5fYWN0aXZlPSEwLHQucHJldmVudERlZmF1bHQoKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBuLnJlc2V0KCl9KSwwKSx7Y2FtZXJhQW5pbWF0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ZS5nZXRab29tKCktMSxhcm91bmQ6ZS51bnByb2plY3QoYSl9LHtvcmlnaW5hbEV2ZW50OnR9KX19KTp2b2lkIDB9LEduLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sR24ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LEduLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LEduLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sR24ucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIFluPWZ1bmN0aW9uKHQpe3RoaXMucmVzZXQoKSx0aGlzLl9jbGlja1RvbGVyYW5jZT10LmNsaWNrVG9sZXJhbmNlfHwxfTtZbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITEsdGhpcy5fbW92ZWQ9ITEsZGVsZXRlIHRoaXMuX2xhc3RQb2ludCxkZWxldGUgdGhpcy5fZXZlbnRCdXR0b259LFluLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiExfSxZbi5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm57fX0sWW4ucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9sYXN0UG9pbnQpe3ZhciBuPXIubW91c2VCdXR0b24odCk7dGhpcy5fY29ycmVjdEJ1dHRvbih0LG4pJiYodGhpcy5fbGFzdFBvaW50PWUsdGhpcy5fZXZlbnRCdXR0b249bil9fSxZbi5wcm90b3R5cGUubW91c2Vtb3ZlV2luZG93PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fbGFzdFBvaW50O2lmKHImJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fbW92ZWR8fCEoZS5kaXN0KHIpPHRoaXMuX2NsaWNrVG9sZXJhbmNlKSkpcmV0dXJuIHRoaXMuX21vdmVkPSEwLHRoaXMuX2xhc3RQb2ludD1lLHRoaXMuX21vdmUocixlKX0sWW4ucHJvdG90eXBlLm1vdXNldXBXaW5kb3c9ZnVuY3Rpb24odCl7ci5tb3VzZUJ1dHRvbih0KT09PXRoaXMuX2V2ZW50QnV0dG9uJiYodGhpcy5fbW92ZWQmJnIuc3VwcHJlc3NDbGljaygpLHRoaXMucmVzZXQoKSl9LFluLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxZbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxZbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LFluLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBXbj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLm1vdXNlZG93bj1mdW5jdGlvbihlLHIpe3QucHJvdG90eXBlLm1vdXNlZG93bi5jYWxsKHRoaXMsZSxyKSx0aGlzLl9sYXN0UG9pbnQmJih0aGlzLl9hY3RpdmU9ITApfSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmIXQuY3RybEtleX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXtyZXR1cm57YXJvdW5kOmUscGFuRGVsdGE6ZS5zdWIodCl9fSxlfShZbiksWG49ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5fY29ycmVjdEJ1dHRvbj1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZSYmdC5jdHJsS2V5fHwyPT09ZX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj0uOCooZS54LXQueCk7aWYocilyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0oWW4pLFpuPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUuX2NvcnJlY3RCdXR0b249ZnVuY3Rpb24odCxlKXtyZXR1cm4gMD09PWUmJnQuY3RybEtleXx8Mj09PWV9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9LS41KihlLnktdC55KTtpZihyKXJldHVybiB0aGlzLl9hY3RpdmU9ITAse3BpdGNoRGVsdGE6cn19LGUucHJvdG90eXBlLmNvbnRleHRtZW51PWZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sZX0oWW4pLEpuPWZ1bmN0aW9uKHQpe3RoaXMuX21pblRvdWNoZXM9MSx0aGlzLl9jbGlja1RvbGVyYW5jZT10LmNsaWNrVG9sZXJhbmNlfHwxLHRoaXMucmVzZXQoKX07Sm4ucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLHRoaXMuX3RvdWNoZXM9e30sdGhpcy5fc3VtPW5ldyB0LlBvaW50KDAsMCl9LEpuLnByb3RvdHlwZS50b3VjaHN0YXJ0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKHQsZSxyKX0sSm4ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fYWN0aXZlKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fY2FsY3VsYXRlVHJhbnNmb3JtKHQsZSxyKX0sSm4ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9jYWxjdWxhdGVUcmFuc2Zvcm0odCxlLHIpLHRoaXMuX2FjdGl2ZSYmci5sZW5ndGg8dGhpcy5fbWluVG91Y2hlcyYmdGhpcy5yZXNldCgpfSxKbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LEpuLnByb3RvdHlwZS5fY2FsY3VsYXRlVHJhbnNmb3JtPWZ1bmN0aW9uKGUscixuKXtuLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlPSEwKTt2YXIgaT1WbihuLHIpLGE9bmV3IHQuUG9pbnQoMCwwKSxvPW5ldyB0LlBvaW50KDAsMCkscz0wO2Zvcih2YXIgbCBpbiBpKXt2YXIgYz1pW2xdLHU9dGhpcy5fdG91Y2hlc1tsXTt1JiYoYS5fYWRkKGMpLG8uX2FkZChjLnN1Yih1KSkscysrLGlbbF09Yyl9aWYodGhpcy5fdG91Y2hlcz1pLCEoczx0aGlzLl9taW5Ub3VjaGVzKSYmby5tYWcoKSl7dmFyIGY9by5kaXYocyk7aWYodGhpcy5fc3VtLl9hZGQoZiksISh0aGlzLl9zdW0ubWFnKCk8dGhpcy5fY2xpY2tUb2xlcmFuY2UpKXJldHVybnthcm91bmQ6YS5kaXYocykscGFuRGVsdGE6Zn19fSxKbi5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMH0sSm4ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSExLHRoaXMucmVzZXQoKX0sSm4ucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmFibGVkfSxKbi5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWN0aXZlfTt2YXIgS249ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9O2Z1bmN0aW9uIFFuKHQsZSxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmlkZW50aWZpZXI9PT1yKXJldHVybiBlW25dfUtuLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMSxkZWxldGUgdGhpcy5fZmlyc3RUd29Ub3VjaGVzfSxLbi5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe30sS24ucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm57fX0sS24ucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2ZpcnN0VHdvVG91Y2hlc3x8ci5sZW5ndGg8Mnx8KHRoaXMuX2ZpcnN0VHdvVG91Y2hlcz1bclswXS5pZGVudGlmaWVyLHJbMV0uaWRlbnRpZmllcl0sdGhpcy5fc3RhcnQoW2VbMF0sZVsxXV0pKX0sS24ucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZmlyc3RUd29Ub3VjaGVzKXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIG49dGhpcy5fZmlyc3RUd29Ub3VjaGVzLGk9blswXSxhPW5bMV0sbz1RbihyLGUsaSkscz1RbihyLGUsYSk7aWYobyYmcyl7dmFyIGw9dGhpcy5fYXJvdW5kQ2VudGVyP251bGw6by5hZGQocykuZGl2KDIpO3JldHVybiB0aGlzLl9tb3ZlKFtvLHNdLGwsdCl9fX0sS24ucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQsZSxuKXtpZih0aGlzLl9maXJzdFR3b1RvdWNoZXMpe3ZhciBpPXRoaXMuX2ZpcnN0VHdvVG91Y2hlcyxhPWlbMF0sbz1pWzFdLHM9UW4obixlLGEpLGw9UW4obixlLG8pO3MmJmx8fCh0aGlzLl9hY3RpdmUmJnIuc3VwcHJlc3NDbGljaygpLHRoaXMucmVzZXQoKSl9fSxLbi5wcm90b3R5cGUudG91Y2hjYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLnJlc2V0KCl9LEtuLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24odCl7dGhpcy5fZW5hYmxlZD0hMCx0aGlzLl9hcm91bmRDZW50ZXI9ISF0JiYiY2VudGVyIj09PXQuYXJvdW5kfSxLbi5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxLbi5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LEtuLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O2Z1bmN0aW9uICRuKHQsZSl7cmV0dXJuIE1hdGgubG9nKHQvZSkvTWF0aC5MTjJ9dmFyIHRpPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gdCYmKGUuX19wcm90b19fPXQpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0LnByb3RvdHlwZS5yZXNldC5jYWxsKHRoaXMpLGRlbGV0ZSB0aGlzLl9kaXN0YW5jZSxkZWxldGUgdGhpcy5fc3RhcnREaXN0YW5jZX0sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0RGlzdGFuY2U9dGhpcy5fZGlzdGFuY2U9dFswXS5kaXN0KHRbMV0pfSxlLnByb3RvdHlwZS5fbW92ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Rpc3RhbmNlO2lmKHRoaXMuX2Rpc3RhbmNlPXRbMF0uZGlzdCh0WzFdKSx0aGlzLl9hY3RpdmV8fCEoTWF0aC5hYnMoJG4odGhpcy5fZGlzdGFuY2UsdGhpcy5fc3RhcnREaXN0YW5jZSkpPC4xKSlyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHt6b29tRGVsdGE6JG4odGhpcy5fZGlzdGFuY2UscikscGluY2hBcm91bmQ6ZX19LGV9KEtuKTtmdW5jdGlvbiBlaSh0LGUpe3JldHVybiAxODAqdC5hbmdsZVdpdGgoZSkvTWF0aC5QSX12YXIgcmk9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0JiYoZS5fX3Byb3RvX189dCksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxlLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3QucHJvdG90eXBlLnJlc2V0LmNhbGwodGhpcyksZGVsZXRlIHRoaXMuX21pbkRpYW1ldGVyLGRlbGV0ZSB0aGlzLl9zdGFydFZlY3RvcixkZWxldGUgdGhpcy5fdmVjdG9yfSxlLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnRWZWN0b3I9dGhpcy5fdmVjdG9yPXRbMF0uc3ViKHRbMV0pLHRoaXMuX21pbkRpYW1ldGVyPXRbMF0uZGlzdCh0WzFdKX0sZS5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92ZWN0b3I7aWYodGhpcy5fdmVjdG9yPXRbMF0uc3ViKHRbMV0pLHRoaXMuX2FjdGl2ZXx8IXRoaXMuX2lzQmVsb3dUaHJlc2hvbGQodGhpcy5fdmVjdG9yKSlyZXR1cm4gdGhpcy5fYWN0aXZlPSEwLHtiZWFyaW5nRGVsdGE6ZWkodGhpcy5fdmVjdG9yLHIpLHBpbmNoQXJvdW5kOmV9fSxlLnByb3RvdHlwZS5faXNCZWxvd1RocmVzaG9sZD1mdW5jdGlvbih0KXt0aGlzLl9taW5EaWFtZXRlcj1NYXRoLm1pbih0aGlzLl9taW5EaWFtZXRlcix0Lm1hZygpKTt2YXIgZT0yNS8oTWF0aC5QSSp0aGlzLl9taW5EaWFtZXRlcikqMzYwLHI9ZWkodCx0aGlzLl9zdGFydFZlY3Rvcik7cmV0dXJuIE1hdGguYWJzKHIpPGV9LGV9KEtuKTtmdW5jdGlvbiBuaSh0KXtyZXR1cm4gTWF0aC5hYnModC55KT5NYXRoLmFicyh0LngpfXZhciBpaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dC5wcm90b3R5cGUucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl92YWxpZD12b2lkIDAsZGVsZXRlIHRoaXMuX2ZpcnN0TW92ZSxkZWxldGUgdGhpcy5fbGFzdFBvaW50c30sZS5wcm90b3R5cGUuX3N0YXJ0PWZ1bmN0aW9uKHQpe3RoaXMuX2xhc3RQb2ludHM9dCxuaSh0WzBdLnN1Yih0WzFdKSkmJih0aGlzLl92YWxpZD0hMSl9LGUucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10WzBdLnN1Yih0aGlzLl9sYXN0UG9pbnRzWzBdKSxpPXRbMV0uc3ViKHRoaXMuX2xhc3RQb2ludHNbMV0pO2lmKHRoaXMuX3ZhbGlkPXRoaXMuZ2VzdHVyZUJlZ2luc1ZlcnRpY2FsbHkobixpLHIudGltZVN0YW1wKSx0aGlzLl92YWxpZCl7dGhpcy5fbGFzdFBvaW50cz10LHRoaXMuX2FjdGl2ZT0hMDtyZXR1cm57cGl0Y2hEZWx0YTotLjUqKChuLnkraS55KS8yKX19fSxlLnByb3RvdHlwZS5nZXN0dXJlQmVnaW5zVmVydGljYWxseT1mdW5jdGlvbih0LGUscil7aWYodm9pZCAwIT09dGhpcy5fdmFsaWQpcmV0dXJuIHRoaXMuX3ZhbGlkO3ZhciBuPXQubWFnKCk+PTIsaT1lLm1hZygpPj0yO2lmKG58fGkpe2lmKCFufHwhaSlyZXR1cm4gdm9pZCAwPT09dGhpcy5fZmlyc3RNb3ZlJiYodGhpcy5fZmlyc3RNb3ZlPXIpLHItdGhpcy5fZmlyc3RNb3ZlPDEwMCYmdm9pZCAwO3ZhciBhPXQueT4wPT1lLnk+MDtyZXR1cm4gbmkodCkmJm5pKGUpJiZhfX0sZX0oS24pLGFpPXtwYW5TdGVwOjEwMCxiZWFyaW5nU3RlcDoxNSxwaXRjaFN0ZXA6MTB9LG9pPWZ1bmN0aW9uKCl7dmFyIHQ9YWk7dGhpcy5fcGFuU3RlcD10LnBhblN0ZXAsdGhpcy5fYmVhcmluZ1N0ZXA9dC5iZWFyaW5nU3RlcCx0aGlzLl9waXRjaFN0ZXA9dC5waXRjaFN0ZXB9O2Z1bmN0aW9uIHNpKHQpe3JldHVybiB0KigyLXQpfW9pLnByb3RvdHlwZS5yZXNldD1mdW5jdGlvbigpe3RoaXMuX2FjdGl2ZT0hMX0sb2kucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighKHQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleSkpe3ZhciByPTAsbj0wLGk9MCxhPTAsbz0wO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgNjE6Y2FzZSAxMDc6Y2FzZSAxNzE6Y2FzZSAxODc6cj0xO2JyZWFrO2Nhc2UgMTg5OmNhc2UgMTA5OmNhc2UgMTczOnI9LTE7YnJlYWs7Y2FzZSAzNzp0LnNoaWZ0S2V5P249LTE6KHQucHJldmVudERlZmF1bHQoKSxhPS0xKTticmVhaztjYXNlIDM5OnQuc2hpZnRLZXk/bj0xOih0LnByZXZlbnREZWZhdWx0KCksYT0xKTticmVhaztjYXNlIDM4OnQuc2hpZnRLZXk/aT0xOih0LnByZXZlbnREZWZhdWx0KCksbz0tMSk7YnJlYWs7Y2FzZSA0MDp0LnNoaWZ0S2V5P2k9LTE6KHQucHJldmVudERlZmF1bHQoKSxvPTEpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXJldHVybntjYW1lcmFBbmltYXRpb246ZnVuY3Rpb24ocyl7dmFyIGw9cy5nZXRab29tKCk7cy5lYXNlVG8oe2R1cmF0aW9uOjMwMCxlYXNlSWQ6ImtleWJvYXJkSGFuZGxlciIsZWFzaW5nOnNpLHpvb206cj9NYXRoLnJvdW5kKGwpK3IqKHQuc2hpZnRLZXk/MjoxKTpsLGJlYXJpbmc6cy5nZXRCZWFyaW5nKCkrbiplLl9iZWFyaW5nU3RlcCxwaXRjaDpzLmdldFBpdGNoKCkraSplLl9waXRjaFN0ZXAsb2Zmc2V0OlstYSplLl9wYW5TdGVwLC1vKmUuX3BhblN0ZXBdLGNlbnRlcjpzLmdldENlbnRlcigpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX19LG9pLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9lbmFibGVkPSEwfSxvaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITEsdGhpcy5yZXNldCgpfSxvaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9LG9pLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hY3RpdmV9O3ZhciBsaT1mdW5jdGlvbihlLHIpe3RoaXMuX21hcD1lLHRoaXMuX2VsPWUuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcj1yLHRoaXMuX2RlbHRhPTAsdGhpcy5fZGVmYXVsdFpvb21SYXRlPS4wMSx0aGlzLl93aGVlbFpvb21SYXRlPTEvNDUwLHQuYmluZEFsbChbIl9vbldoZWVsIiwiX29uVGltZW91dCIsIl9vblNjcm9sbEZyYW1lIiwiX29uU2Nyb2xsRmluaXNoZWQiXSx0aGlzKX07bGkucHJvdG90eXBlLnNldFpvb21SYXRlPWZ1bmN0aW9uKHQpe3RoaXMuX2RlZmF1bHRab29tUmF0ZT10fSxsaS5wcm90b3R5cGUuc2V0V2hlZWxab29tUmF0ZT1mdW5jdGlvbih0KXt0aGlzLl93aGVlbFpvb21SYXRlPXR9LGxpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2VuYWJsZWR9LGxpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fYWN0aXZlfHx2b2lkIDAhPT10aGlzLl9maW5pc2hUaW1lb3V0fSxsaS5wcm90b3R5cGUuaXNab29taW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl96b29taW5nfSxsaS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQpe3RoaXMuaXNFbmFibGVkKCl8fCh0aGlzLl9lbmFibGVkPSEwLHRoaXMuX2Fyb3VuZENlbnRlcj10JiYiY2VudGVyIj09PXQuYXJvdW5kKX0sbGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmlzRW5hYmxlZCgpJiYodGhpcy5fZW5hYmxlZD0hMSl9LGxpLnByb3RvdHlwZS53aGVlbD1mdW5jdGlvbihlKXtpZih0aGlzLmlzRW5hYmxlZCgpKXt2YXIgcj1lLmRlbHRhTW9kZT09PXQud2luZG93LldoZWVsRXZlbnQuRE9NX0RFTFRBX0xJTkU/NDAqZS5kZWx0YVk6ZS5kZWx0YVksbj10LmJyb3dzZXIubm93KCksaT1uLSh0aGlzLl9sYXN0V2hlZWxFdmVudFRpbWV8fDApO3RoaXMuX2xhc3RXaGVlbEV2ZW50VGltZT1uLDAhPT1yJiZyJTQuMDAwMjQ0MTQwNjI1PT0wP3RoaXMuX3R5cGU9IndoZWVsIjowIT09ciYmTWF0aC5hYnMocik8ND90aGlzLl90eXBlPSJ0cmFja3BhZCI6aT40MDA/KHRoaXMuX3R5cGU9bnVsbCx0aGlzLl9sYXN0VmFsdWU9cix0aGlzLl90aW1lb3V0PXNldFRpbWVvdXQodGhpcy5fb25UaW1lb3V0LDQwLGUpKTp0aGlzLl90eXBlfHwodGhpcy5fdHlwZT1NYXRoLmFicyhpKnIpPDIwMD8idHJhY2twYWQiOiJ3aGVlbCIsdGhpcy5fdGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGwscis9dGhpcy5fbGFzdFZhbHVlKSksZS5zaGlmdEtleSYmciYmKHIvPTQpLHRoaXMuX3R5cGUmJih0aGlzLl9sYXN0V2hlZWxFdmVudD1lLHRoaXMuX2RlbHRhLT1yLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQoZSkpLGUucHJldmVudERlZmF1bHQoKX19LGxpLnByb3RvdHlwZS5fb25UaW1lb3V0PWZ1bmN0aW9uKHQpe3RoaXMuX3R5cGU9IndoZWVsIix0aGlzLl9kZWx0YS09dGhpcy5fbGFzdFZhbHVlLHRoaXMuX2FjdGl2ZXx8dGhpcy5fc3RhcnQodCl9LGxpLnByb3RvdHlwZS5fc3RhcnQ9ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGVsdGEpe3RoaXMuX2ZyYW1lSWQmJih0aGlzLl9mcmFtZUlkPW51bGwpLHRoaXMuX2FjdGl2ZT0hMCx0aGlzLmlzWm9vbWluZygpfHwodGhpcy5fem9vbWluZz0hMCksdGhpcy5fZmluaXNoVGltZW91dCYmKGNsZWFyVGltZW91dCh0aGlzLl9maW5pc2hUaW1lb3V0KSxkZWxldGUgdGhpcy5fZmluaXNoVGltZW91dCk7dmFyIG49ci5tb3VzZVBvcyh0aGlzLl9lbCxlKTt0aGlzLl9hcm91bmQ9dC5MbmdMYXQuY29udmVydCh0aGlzLl9hcm91bmRDZW50ZXI/dGhpcy5fbWFwLmdldENlbnRlcigpOnRoaXMuX21hcC51bnByb2plY3QobikpLHRoaXMuX2Fyb3VuZFBvaW50PXRoaXMuX21hcC50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0aGlzLl9hcm91bmQpLHRoaXMuX2ZyYW1lSWR8fCh0aGlzLl9mcmFtZUlkPSEwLHRoaXMuX2hhbmRsZXIuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKX19LGxpLnByb3RvdHlwZS5yZW5kZXJGcmFtZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblNjcm9sbEZyYW1lKCl9LGxpLnByb3RvdHlwZS5fb25TY3JvbGxGcmFtZT1mdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9bnVsbCx0aGlzLmlzQWN0aXZlKCkpKXt2YXIgcj10aGlzLl9tYXAudHJhbnNmb3JtO2lmKDAhPT10aGlzLl9kZWx0YSl7dmFyIG49IndoZWVsIj09PXRoaXMuX3R5cGUmJk1hdGguYWJzKHRoaXMuX2RlbHRhKT40LjAwMDI0NDE0MDYyNT90aGlzLl93aGVlbFpvb21SYXRlOnRoaXMuX2RlZmF1bHRab29tUmF0ZSxpPTIvKDErTWF0aC5leHAoLU1hdGguYWJzKHRoaXMuX2RlbHRhKm4pKSk7dGhpcy5fZGVsdGE8MCYmMCE9PWkmJihpPTEvaSk7dmFyIGE9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3Iuem9vbVNjYWxlKHRoaXMuX3RhcmdldFpvb20pOnIuc2NhbGU7dGhpcy5fdGFyZ2V0Wm9vbT1NYXRoLm1pbihyLm1heFpvb20sTWF0aC5tYXgoci5taW5ab29tLHIuc2NhbGVab29tKGEqaSkpKSwid2hlZWwiPT09dGhpcy5fdHlwZSYmKHRoaXMuX3N0YXJ0Wm9vbT1yLnpvb20sdGhpcy5fZWFzaW5nPXRoaXMuX3Ntb290aE91dEVhc2luZygyMDApKSx0aGlzLl9kZWx0YT0wfXZhciBvLHM9Im51bWJlciI9PXR5cGVvZiB0aGlzLl90YXJnZXRab29tP3RoaXMuX3RhcmdldFpvb206ci56b29tLGw9dGhpcy5fc3RhcnRab29tLGM9dGhpcy5fZWFzaW5nLHU9ITE7aWYoIndoZWVsIj09PXRoaXMuX3R5cGUmJmwmJmMpe3ZhciBmPU1hdGgubWluKCh0LmJyb3dzZXIubm93KCktdGhpcy5fbGFzdFdoZWVsRXZlbnRUaW1lKS8yMDAsMSksaD1jKGYpO289dC5udW1iZXIobCxzLGgpLGY8MT90aGlzLl9mcmFtZUlkfHwodGhpcy5fZnJhbWVJZD0hMCk6dT0hMH1lbHNlIG89cyx1PSEwO3JldHVybiB0aGlzLl9hY3RpdmU9ITAsdSYmKHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9maW5pc2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fem9vbWluZz0hMSxlLl9oYW5kbGVyLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSxkZWxldGUgZS5fdGFyZ2V0Wm9vbSxkZWxldGUgZS5fZmluaXNoVGltZW91dH0pLDIwMCkpLHtub0luZXJ0aWE6ITAsbmVlZHNSZW5kZXJGcmFtZTohdSx6b29tRGVsdGE6by1yLnpvb20sYXJvdW5kOnRoaXMuX2Fyb3VuZFBvaW50LG9yaWdpbmFsRXZlbnQ6dGhpcy5fbGFzdFdoZWVsRXZlbnR9fX0sbGkucHJvdG90eXBlLl9zbW9vdGhPdXRFYXNpbmc9ZnVuY3Rpb24oZSl7dmFyIHI9dC5lYXNlO2lmKHRoaXMuX3ByZXZFYXNlKXt2YXIgbj10aGlzLl9wcmV2RWFzZSxpPSh0LmJyb3dzZXIubm93KCktbi5zdGFydCkvbi5kdXJhdGlvbixhPW4uZWFzaW5nKGkrLjAxKS1uLmVhc2luZyhpKSxvPS4yNy9NYXRoLnNxcnQoYSphKzFlLTQpKi4wMSxzPU1hdGguc3FydCguMDcyOS1vKm8pO3I9dC5iZXppZXIobyxzLC4yNSwxKX1yZXR1cm4gdGhpcy5fcHJldkVhc2U9e3N0YXJ0OnQuYnJvd3Nlci5ub3coKSxkdXJhdGlvbjplLGVhc2luZzpyfSxyfSxsaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9O3ZhciBjaT1mdW5jdGlvbih0LGUpe3RoaXMuX2NsaWNrWm9vbT10LHRoaXMuX3RhcFpvb209ZX07Y2kucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5lbmFibGUoKSx0aGlzLl90YXBab29tLmVuYWJsZSgpfSxjaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2NsaWNrWm9vbS5kaXNhYmxlKCksdGhpcy5fdGFwWm9vbS5kaXNhYmxlKCl9LGNpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzRW5hYmxlZCgpJiZ0aGlzLl90YXBab29tLmlzRW5hYmxlZCgpfSxjaS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2xpY2tab29tLmlzQWN0aXZlKCl8fHRoaXMuX3RhcFpvb20uaXNBY3RpdmUoKX07dmFyIHVpPWZ1bmN0aW9uKCl7dGhpcy5yZXNldCgpfTt1aS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLl9hY3RpdmU9ITF9LHVpLnByb3RvdHlwZS5kYmxjbGljaz1mdW5jdGlvbih0LGUpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCkse2NhbWVyYUFuaW1hdGlvbjpmdW5jdGlvbihyKXtyLmVhc2VUbyh7ZHVyYXRpb246MzAwLHpvb206ci5nZXRab29tKCkrKHQuc2hpZnRLZXk/LTE6MSksYXJvdW5kOnIudW5wcm9qZWN0KGUpfSx7b3JpZ2luYWxFdmVudDp0fSl9fX0sdWkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LHVpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LHVpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sdWkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGZpPWZ1bmN0aW9uKCl7dGhpcy5fdGFwPW5ldyBxbih7bnVtVG91Y2hlczoxLG51bVRhcHM6MX0pLHRoaXMucmVzZXQoKX07ZmkucHJvdG90eXBlLnJlc2V0PWZ1bmN0aW9uKCl7dGhpcy5fYWN0aXZlPSExLGRlbGV0ZSB0aGlzLl9zd2lwZVBvaW50LGRlbGV0ZSB0aGlzLl9zd2lwZVRvdWNoLGRlbGV0ZSB0aGlzLl90YXBUaW1lLHRoaXMuX3RhcC5yZXNldCgpfSxmaS5wcm90b3R5cGUudG91Y2hzdGFydD1mdW5jdGlvbih0LGUscil7dGhpcy5fc3dpcGVQb2ludHx8KHRoaXMuX3RhcFRpbWUmJnQudGltZVN0YW1wLXRoaXMuX3RhcFRpbWU+NTAwJiZ0aGlzLnJlc2V0KCksdGhpcy5fdGFwVGltZT9yLmxlbmd0aD4wJiYodGhpcy5fc3dpcGVQb2ludD1lWzBdLHRoaXMuX3N3aXBlVG91Y2g9clswXS5pZGVudGlmaWVyKTp0aGlzLl90YXAudG91Y2hzdGFydCh0LGUscikpfSxmaS5wcm90b3R5cGUudG91Y2htb3ZlPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl90YXBUaW1lKXtpZih0aGlzLl9zd2lwZVBvaW50KXtpZihyWzBdLmlkZW50aWZpZXIhPT10aGlzLl9zd2lwZVRvdWNoKXJldHVybjt2YXIgbj1lWzBdLGk9bi55LXRoaXMuX3N3aXBlUG9pbnQueTtyZXR1cm4gdGhpcy5fc3dpcGVQb2ludD1uLHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9hY3RpdmU9ITAse3pvb21EZWx0YTppLzEyOH19fWVsc2UgdGhpcy5fdGFwLnRvdWNobW92ZSh0LGUscil9LGZpLnByb3RvdHlwZS50b3VjaGVuZD1mdW5jdGlvbih0LGUscil7dGhpcy5fdGFwVGltZT90aGlzLl9zd2lwZVBvaW50JiYwPT09ci5sZW5ndGgmJnRoaXMucmVzZXQoKTp0aGlzLl90YXAudG91Y2hlbmQodCxlLHIpJiYodGhpcy5fdGFwVGltZT10LnRpbWVTdGFtcCl9LGZpLnByb3RvdHlwZS50b3VjaGNhbmNlbD1mdW5jdGlvbigpe3RoaXMucmVzZXQoKX0sZmkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX2VuYWJsZWQ9ITB9LGZpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5fZW5hYmxlZD0hMSx0aGlzLnJlc2V0KCl9LGZpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH0sZmkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZX07dmFyIGhpPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9lbD10LHRoaXMuX21vdXNlUGFuPWUsdGhpcy5fdG91Y2hQYW49cn07aGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl9pbmVydGlhT3B0aW9ucz10fHx7fSx0aGlzLl9tb3VzZVBhbi5lbmFibGUoKSx0aGlzLl90b3VjaFBhbi5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC1kcmFnLXBhbiIpfSxoaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUGFuLmRpc2FibGUoKSx0aGlzLl90b3VjaFBhbi5kaXNhYmxlKCksdGhpcy5fZWwuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdG91Y2gtZHJhZy1wYW4iKX0saGkucHJvdG90eXBlLmlzRW5hYmxlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hQYW4uaXNFbmFibGVkKCl9LGhpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tb3VzZVBhbi5pc0FjdGl2ZSgpfHx0aGlzLl90b3VjaFBhbi5pc0FjdGl2ZSgpfTt2YXIgcGk9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3BpdGNoV2l0aFJvdGF0ZT10LnBpdGNoV2l0aFJvdGF0ZSx0aGlzLl9tb3VzZVJvdGF0ZT1lLHRoaXMuX21vdXNlUGl0Y2g9cn07cGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuX21vdXNlUm90YXRlLmVuYWJsZSgpLHRoaXMuX3BpdGNoV2l0aFJvdGF0ZSYmdGhpcy5fbW91c2VQaXRjaC5lbmFibGUoKX0scGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZVJvdGF0ZS5kaXNhYmxlKCksdGhpcy5fbW91c2VQaXRjaC5kaXNhYmxlKCl9LHBpLnByb3RvdHlwZS5pc0VuYWJsZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbW91c2VSb3RhdGUuaXNFbmFibGVkKCkmJighdGhpcy5fcGl0Y2hXaXRoUm90YXRlfHx0aGlzLl9tb3VzZVBpdGNoLmlzRW5hYmxlZCgpKX0scGkucHJvdG90eXBlLmlzQWN0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdXNlUm90YXRlLmlzQWN0aXZlKCl8fHRoaXMuX21vdXNlUGl0Y2guaXNBY3RpdmUoKX07dmFyIGRpPWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMuX2VsPXQsdGhpcy5fdG91Y2hab29tPWUsdGhpcy5fdG91Y2hSb3RhdGU9cix0aGlzLl90YXBEcmFnWm9vbT1uLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITEsdGhpcy5fZW5hYmxlZD0hMH07ZGkucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbih0KXt0aGlzLl90b3VjaFpvb20uZW5hYmxlKHQpLHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmVuYWJsZSh0KSx0aGlzLl90YXBEcmFnWm9vbS5lbmFibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxkaS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX3RvdWNoWm9vbS5kaXNhYmxlKCksdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpLHRoaXMuX3RhcERyYWdab29tLmRpc2FibGUoKSx0aGlzLl9lbC5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC10b3VjaC16b29tLXJvdGF0ZSIpfSxkaS5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmKHRoaXMuX3JvdGF0aW9uRGlzYWJsZWR8fHRoaXMuX3RvdWNoUm90YXRlLmlzRW5hYmxlZCgpKSYmdGhpcy5fdGFwRHJhZ1pvb20uaXNFbmFibGVkKCl9LGRpLnByb3RvdHlwZS5pc0FjdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b3VjaFpvb20uaXNBY3RpdmUoKXx8dGhpcy5fdG91Y2hSb3RhdGUuaXNBY3RpdmUoKXx8dGhpcy5fdGFwRHJhZ1pvb20uaXNBY3RpdmUoKX0sZGkucHJvdG90eXBlLmRpc2FibGVSb3RhdGlvbj1mdW5jdGlvbigpe3RoaXMuX3JvdGF0aW9uRGlzYWJsZWQ9ITAsdGhpcy5fdG91Y2hSb3RhdGUuZGlzYWJsZSgpfSxkaS5wcm90b3R5cGUuZW5hYmxlUm90YXRpb249ZnVuY3Rpb24oKXt0aGlzLl9yb3RhdGlvbkRpc2FibGVkPSExLHRoaXMuX3RvdWNoWm9vbS5pc0VuYWJsZWQoKSYmdGhpcy5fdG91Y2hSb3RhdGUuZW5hYmxlKCl9O3ZhciBtaT1mdW5jdGlvbih0KXtyZXR1cm4gdC56b29tfHx0LmRyYWd8fHQucGl0Y2h8fHQucm90YXRlfSxnaT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHQmJihlLl9fcHJvdG9fXz10KSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGV9KHQuRXZlbnQpO2Z1bmN0aW9uIHZpKHQpe3JldHVybiB0LnBhbkRlbHRhJiZ0LnBhbkRlbHRhLm1hZygpfHx0Lnpvb21EZWx0YXx8dC5iZWFyaW5nRGVsdGF8fHQucGl0Y2hEZWx0YX12YXIgeWk9ZnVuY3Rpb24oZSxuKXt0aGlzLl9tYXA9ZSx0aGlzLl9lbD10aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCksdGhpcy5faGFuZGxlcnM9W10sdGhpcy5faGFuZGxlcnNCeUlkPXt9LHRoaXMuX2NoYW5nZXM9W10sdGhpcy5faW5lcnRpYT1uZXcgT24oZSksdGhpcy5fYmVhcmluZ1NuYXA9bi5iZWFyaW5nU25hcCx0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzPXt9LHRoaXMuX2V2ZW50c0luUHJvZ3Jlc3M9e30sdGhpcy5fYWRkRGVmYXVsdEhhbmRsZXJzKG4pLHQuYmluZEFsbChbImhhbmRsZUV2ZW50IiwiaGFuZGxlV2luZG93RXZlbnQiXSx0aGlzKTt2YXIgaT10aGlzLl9lbDt0aGlzLl9saXN0ZW5lcnM9W1tpLCJ0b3VjaHN0YXJ0Iix7cGFzc2l2ZTohMX1dLFtpLCJ0b3VjaG1vdmUiLHtwYXNzaXZlOiExfV0sW2ksInRvdWNoZW5kIix2b2lkIDBdLFtpLCJ0b3VjaGNhbmNlbCIsdm9pZCAwXSxbaSwibW91c2Vkb3duIix2b2lkIDBdLFtpLCJtb3VzZW1vdmUiLHZvaWQgMF0sW2ksIm1vdXNldXAiLHZvaWQgMF0sW3Qud2luZG93LmRvY3VtZW50LCJtb3VzZW1vdmUiLHtjYXB0dXJlOiEwfV0sW3Qud2luZG93LmRvY3VtZW50LCJtb3VzZXVwIix2b2lkIDBdLFtpLCJtb3VzZW92ZXIiLHZvaWQgMF0sW2ksIm1vdXNlb3V0Iix2b2lkIDBdLFtpLCJkYmxjbGljayIsdm9pZCAwXSxbaSwiY2xpY2siLHZvaWQgMF0sW2ksImtleWRvd24iLHtjYXB0dXJlOiExfV0sW2ksImtleXVwIix2b2lkIDBdLFtpLCJ3aGVlbCIse3Bhc3NpdmU6ITF9XSxbaSwiY29udGV4dG1lbnUiLHZvaWQgMF0sW3Qud2luZG93LCJibHVyIix2b2lkIDBdXTtmb3IodmFyIGE9MCxvPXRoaXMuX2xpc3RlbmVyczthPG8ubGVuZ3RoO2ErPTEpe3ZhciBzPW9bYV0sbD1zWzBdLGM9c1sxXSx1PXNbMl07ci5hZGRFdmVudExpc3RlbmVyKGwsYyxsPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHUpfX07eWkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCxuPXRoaXMuX2xpc3RlbmVycztlPG4ubGVuZ3RoO2UrPTEpe3ZhciBpPW5bZV0sYT1pWzBdLG89aVsxXSxzPWlbMl07ci5yZW1vdmVFdmVudExpc3RlbmVyKGEsbyxhPT09dC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5oYW5kbGVXaW5kb3dFdmVudDp0aGlzLmhhbmRsZUV2ZW50LHMpfX0seWkucHJvdG90eXBlLl9hZGREZWZhdWx0SGFuZGxlcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbWFwLHI9ZS5nZXRDYW52YXNDb250YWluZXIoKTt0aGlzLl9hZGQoIm1hcEV2ZW50IixuZXcgTm4oZSx0KSk7dmFyIG49ZS5ib3hab29tPW5ldyBVbihlLHQpO3RoaXMuX2FkZCgiYm94Wm9vbSIsbik7dmFyIGk9bmV3IEduLGE9bmV3IHVpO2UuZG91YmxlQ2xpY2tab29tPW5ldyBjaShhLGkpLHRoaXMuX2FkZCgidGFwWm9vbSIsaSksdGhpcy5fYWRkKCJjbGlja1pvb20iLGEpO3ZhciBvPW5ldyBmaTt0aGlzLl9hZGQoInRhcERyYWdab29tIixvKTt2YXIgcz1lLnRvdWNoUGl0Y2g9bmV3IGlpO3RoaXMuX2FkZCgidG91Y2hQaXRjaCIscyk7dmFyIGw9bmV3IFhuKHQpLGM9bmV3IFpuKHQpO2UuZHJhZ1JvdGF0ZT1uZXcgcGkodCxsLGMpLHRoaXMuX2FkZCgibW91c2VSb3RhdGUiLGwsWyJtb3VzZVBpdGNoIl0pLHRoaXMuX2FkZCgibW91c2VQaXRjaCIsYyxbIm1vdXNlUm90YXRlIl0pO3ZhciB1PW5ldyBXbih0KSxmPW5ldyBKbih0KTtlLmRyYWdQYW49bmV3IGhpKHIsdSxmKSx0aGlzLl9hZGQoIm1vdXNlUGFuIix1KSx0aGlzLl9hZGQoInRvdWNoUGFuIixmLFsidG91Y2hab29tIiwidG91Y2hSb3RhdGUiXSk7dmFyIGg9bmV3IHJpLHA9bmV3IHRpO2UudG91Y2hab29tUm90YXRlPW5ldyBkaShyLHAsaCxvKSx0aGlzLl9hZGQoInRvdWNoUm90YXRlIixoLFsidG91Y2hQYW4iLCJ0b3VjaFpvb20iXSksdGhpcy5fYWRkKCJ0b3VjaFpvb20iLHAsWyJ0b3VjaFBhbiIsInRvdWNoUm90YXRlIl0pO3ZhciBkPWUuc2Nyb2xsWm9vbT1uZXcgbGkoZSx0aGlzKTt0aGlzLl9hZGQoInNjcm9sbFpvb20iLGQsWyJtb3VzZVBhbiJdKTt2YXIgbT1lLmtleWJvYXJkPW5ldyBvaTt0aGlzLl9hZGQoImtleWJvYXJkIixtKSx0aGlzLl9hZGQoImJsb2NrYWJsZU1hcEV2ZW50IixuZXcgam4oZSkpO2Zvcih2YXIgZz0wLHY9WyJib3hab29tIiwiZG91YmxlQ2xpY2tab29tIiwidGFwRHJhZ1pvb20iLCJ0b3VjaFBpdGNoIiwiZHJhZ1JvdGF0ZSIsImRyYWdQYW4iLCJ0b3VjaFpvb21Sb3RhdGUiLCJzY3JvbGxab29tIiwia2V5Ym9hcmQiXTtnPHYubGVuZ3RoO2crPTEpe3ZhciB5PXZbZ107dC5pbnRlcmFjdGl2ZSYmdFt5XSYmZVt5XS5lbmFibGUodFt5XSl9fSx5aS5wcm90b3R5cGUuX2FkZD1mdW5jdGlvbih0LGUscil7dGhpcy5faGFuZGxlcnMucHVzaCh7aGFuZGxlck5hbWU6dCxoYW5kbGVyOmUsYWxsb3dlZDpyfSksdGhpcy5faGFuZGxlcnNCeUlkW3RdPWV9LHlpLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3VwZGF0aW5nQ2FtZXJhKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSl7ZVt0XS5oYW5kbGVyLnJlc2V0KCl9dGhpcy5faW5lcnRpYS5jbGVhcigpLHRoaXMuX2ZpcmVFdmVudHMoe30se30pLHRoaXMuX2NoYW5nZXM9W119fSx5aS5wcm90b3R5cGUuaXNBY3RpdmU9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPXRoaXMuX2hhbmRsZXJzO3Q8ZS5sZW5ndGg7dCs9MSl7aWYoZVt0XS5oYW5kbGVyLmlzQWN0aXZlKCkpcmV0dXJuITB9cmV0dXJuITF9LHlpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2V2ZW50c0luUHJvZ3Jlc3Muem9vbXx8dGhpcy5fbWFwLnNjcm9sbFpvb20uaXNab29taW5nKCl9LHlpLnByb3RvdHlwZS5pc1JvdGF0aW5nPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9ldmVudHNJblByb2dyZXNzLnJvdGF0ZX0seWkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4obWkodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcykpfHx0aGlzLmlzWm9vbWluZygpfSx5aS5wcm90b3R5cGUuX2Jsb2NrZWRCeUFjdGl2ZT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuIGluIHQpaWYobiE9PXImJighZXx8ZS5pbmRleE9mKG4pPDApKXJldHVybiEwO3JldHVybiExfSx5aS5wcm90b3R5cGUuaGFuZGxlV2luZG93RXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5oYW5kbGVFdmVudCh0LHQudHlwZSsiV2luZG93Iil9LHlpLnByb3RvdHlwZS5fZ2V0TWFwVG91Y2hlcz1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dDtyPG4ubGVuZ3RoO3IrPTEpe3ZhciBpPW5bcl0sYT1pLnRhcmdldDt0aGlzLl9lbC5jb250YWlucyhhKSYmZS5wdXNoKGkpfXJldHVybiBlfSx5aS5wcm90b3R5cGUuaGFuZGxlRXZlbnQ9ZnVuY3Rpb24odCxlKXtpZigiYmx1ciIhPT10LnR5cGUpe3RoaXMuX3VwZGF0aW5nQ2FtZXJhPSEwO2Zvcih2YXIgbj0icmVuZGVyRnJhbWUiPT09dC50eXBlP3ZvaWQgMDp0LGk9e25lZWRzUmVuZGVyRnJhbWU6ITF9LGE9e30sbz17fSxzPXQudG91Y2hlcz90aGlzLl9nZXRNYXBUb3VjaGVzKHQudG91Y2hlcyk6dm9pZCAwLGw9cz9yLnRvdWNoUG9zKHRoaXMuX2VsLHMpOnIubW91c2VQb3ModGhpcy5fZWwsdCksYz0wLHU9dGhpcy5faGFuZGxlcnM7Yzx1Lmxlbmd0aDtjKz0xKXt2YXIgZj11W2NdLGg9Zi5oYW5kbGVyTmFtZSxwPWYuaGFuZGxlcixkPWYuYWxsb3dlZDtpZihwLmlzRW5hYmxlZCgpKXt2YXIgbT12b2lkIDA7dGhpcy5fYmxvY2tlZEJ5QWN0aXZlKG8sZCxoKT9wLnJlc2V0KCk6cFtlfHx0LnR5cGVdJiYobT1wW2V8fHQudHlwZV0odCxsLHMpLHRoaXMubWVyZ2VIYW5kbGVyUmVzdWx0KGksYSxtLGgsbiksbSYmbS5uZWVkc1JlbmRlckZyYW1lJiZ0aGlzLl90cmlnZ2VyUmVuZGVyRnJhbWUoKSksKG18fHAuaXNBY3RpdmUoKSkmJihvW2hdPXApfX12YXIgZz17fTtmb3IodmFyIHYgaW4gdGhpcy5fcHJldmlvdXNBY3RpdmVIYW5kbGVycylvW3ZdfHwoZ1t2XT1uKTt0aGlzLl9wcmV2aW91c0FjdGl2ZUhhbmRsZXJzPW8sKE9iamVjdC5rZXlzKGcpLmxlbmd0aHx8dmkoaSkpJiYodGhpcy5fY2hhbmdlcy5wdXNoKFtpLGEsZ10pLHRoaXMuX3RyaWdnZXJSZW5kZXJGcmFtZSgpKSwoT2JqZWN0LmtleXMobykubGVuZ3RofHx2aShpKSkmJnRoaXMuX21hcC5fc3RvcCghMCksdGhpcy5fdXBkYXRpbmdDYW1lcmE9ITE7dmFyIHk9aS5jYW1lcmFBbmltYXRpb247eSYmKHRoaXMuX2luZXJ0aWEuY2xlYXIoKSx0aGlzLl9maXJlRXZlbnRzKHt9LHt9KSx0aGlzLl9jaGFuZ2VzPVtdLHkodGhpcy5fbWFwKSl9ZWxzZSB0aGlzLnN0b3AoKX0seWkucHJvdG90eXBlLm1lcmdlSGFuZGxlclJlc3VsdD1mdW5jdGlvbihlLHIsbixpLGEpe2lmKG4pe3QuZXh0ZW5kKGUsbik7dmFyIG89e2hhbmRsZXJOYW1lOmksb3JpZ2luYWxFdmVudDpuLm9yaWdpbmFsRXZlbnR8fGF9O3ZvaWQgMCE9PW4uem9vbURlbHRhJiYoci56b29tPW8pLHZvaWQgMCE9PW4ucGFuRGVsdGEmJihyLmRyYWc9byksdm9pZCAwIT09bi5waXRjaERlbHRhJiYoci5waXRjaD1vKSx2b2lkIDAhPT1uLmJlYXJpbmdEZWx0YSYmKHIucm90YXRlPW8pfX0seWkucHJvdG90eXBlLl9hcHBseUNoYW5nZXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9e30scj17fSxuPXt9LGk9MCxhPXRoaXMuX2NoYW5nZXM7aTxhLmxlbmd0aDtpKz0xKXt2YXIgbz1hW2ldLHM9b1swXSxsPW9bMV0sYz1vWzJdO3MucGFuRGVsdGEmJihlLnBhbkRlbHRhPShlLnBhbkRlbHRhfHxuZXcgdC5Qb2ludCgwLDApKS5fYWRkKHMucGFuRGVsdGEpKSxzLnpvb21EZWx0YSYmKGUuem9vbURlbHRhPShlLnpvb21EZWx0YXx8MCkrcy56b29tRGVsdGEpLHMuYmVhcmluZ0RlbHRhJiYoZS5iZWFyaW5nRGVsdGE9KGUuYmVhcmluZ0RlbHRhfHwwKStzLmJlYXJpbmdEZWx0YSkscy5waXRjaERlbHRhJiYoZS5waXRjaERlbHRhPShlLnBpdGNoRGVsdGF8fDApK3MucGl0Y2hEZWx0YSksdm9pZCAwIT09cy5hcm91bmQmJihlLmFyb3VuZD1zLmFyb3VuZCksdm9pZCAwIT09cy5waW5jaEFyb3VuZCYmKGUucGluY2hBcm91bmQ9cy5waW5jaEFyb3VuZCkscy5ub0luZXJ0aWEmJihlLm5vSW5lcnRpYT1zLm5vSW5lcnRpYSksdC5leHRlbmQocixsKSx0LmV4dGVuZChuLGMpfXRoaXMuX3VwZGF0ZU1hcFRyYW5zZm9ybShlLHIsbiksdGhpcy5fY2hhbmdlcz1bXX0seWkucHJvdG90eXBlLl91cGRhdGVNYXBUcmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX21hcCxpPW4udHJhbnNmb3JtO2lmKCF2aSh0KSlyZXR1cm4gdGhpcy5fZmlyZUV2ZW50cyhlLHIpO3ZhciBhPXQucGFuRGVsdGEsbz10Lnpvb21EZWx0YSxzPXQuYmVhcmluZ0RlbHRhLGw9dC5waXRjaERlbHRhLGM9dC5hcm91bmQsdT10LnBpbmNoQXJvdW5kO3ZvaWQgMCE9PXUmJihjPXUpLG4uX3N0b3AoITApLGM9Y3x8bi50cmFuc2Zvcm0uY2VudGVyUG9pbnQ7dmFyIGY9aS5wb2ludExvY2F0aW9uKGE/Yy5zdWIoYSk6Yyk7cyYmKGkuYmVhcmluZys9cyksbCYmKGkucGl0Y2grPWwpLG8mJihpLnpvb20rPW8pLGkuc2V0TG9jYXRpb25BdFBvaW50KGYsYyksdGhpcy5fbWFwLl91cGRhdGUoKSx0Lm5vSW5lcnRpYXx8dGhpcy5faW5lcnRpYS5yZWNvcmQodCksdGhpcy5fZmlyZUV2ZW50cyhlLHIpfSx5aS5wcm90b3R5cGUuX2ZpcmVFdmVudHM9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLGk9bWkodGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyksYT1taShlKSxvPXt9O2Zvcih2YXIgcyBpbiBlKXt2YXIgbD1lW3NdLm9yaWdpbmFsRXZlbnQ7dGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tzXXx8KG9bcysic3RhcnQiXT1sKSx0aGlzLl9ldmVudHNJblByb2dyZXNzW3NdPWVbc119Zm9yKHZhciBjIGluIWkmJmEmJnRoaXMuX2ZpcmVFdmVudCgibW92ZXN0YXJ0IixhLm9yaWdpbmFsRXZlbnQpLG8pdGhpcy5fZmlyZUV2ZW50KGMsb1tjXSk7Zm9yKHZhciB1IGluIGUucm90YXRlJiYodGhpcy5fYmVhcmluZ0NoYW5nZWQ9ITApLGEmJnRoaXMuX2ZpcmVFdmVudCgibW92ZSIsYS5vcmlnaW5hbEV2ZW50KSxlKXt2YXIgZj1lW3VdLm9yaWdpbmFsRXZlbnQ7dGhpcy5fZmlyZUV2ZW50KHUsZil9dmFyIGgscD17fTtmb3IodmFyIGQgaW4gdGhpcy5fZXZlbnRzSW5Qcm9ncmVzcyl7dmFyIG09dGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tkXSxnPW0uaGFuZGxlck5hbWUsdj1tLm9yaWdpbmFsRXZlbnQ7dGhpcy5faGFuZGxlcnNCeUlkW2ddLmlzQWN0aXZlKCl8fChkZWxldGUgdGhpcy5fZXZlbnRzSW5Qcm9ncmVzc1tkXSxoPXJbZ118fHYscFtkKyJlbmQiXT1oKX1mb3IodmFyIHkgaW4gcCl0aGlzLl9maXJlRXZlbnQoeSxwW3ldKTt2YXIgeD1taSh0aGlzLl9ldmVudHNJblByb2dyZXNzKTtpZigoaXx8YSkmJiF4KXt0aGlzLl91cGRhdGluZ0NhbWVyYT0hMDt2YXIgYj10aGlzLl9pbmVydGlhLl9vbk1vdmVFbmQodGhpcy5fbWFwLmRyYWdQYW4uX2luZXJ0aWFPcHRpb25zKSxfPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dCYmLW4uX2JlYXJpbmdTbmFwPHQmJnQ8bi5fYmVhcmluZ1NuYXB9O2I/KF8oYi5iZWFyaW5nfHx0aGlzLl9tYXAuZ2V0QmVhcmluZygpKSYmKGIuYmVhcmluZz0wKSx0aGlzLl9tYXAuZWFzZVRvKGIse29yaWdpbmFsRXZlbnQ6aH0pKToodGhpcy5fbWFwLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHtvcmlnaW5hbEV2ZW50Omh9KSksXyh0aGlzLl9tYXAuZ2V0QmVhcmluZygpKSYmdGhpcy5fbWFwLnJlc2V0Tm9ydGgoKSksdGhpcy5fYmVhcmluZ0NoYW5nZWQ9ITEsdGhpcy5fdXBkYXRpbmdDYW1lcmE9ITF9fSx5aS5wcm90b3R5cGUuX2ZpcmVFdmVudD1mdW5jdGlvbihlLHIpe3RoaXMuX21hcC5maXJlKG5ldyB0LkV2ZW50KGUscj97b3JpZ2luYWxFdmVudDpyfTp7fSkpfSx5aS5wcm90b3R5cGUuX3RyaWdnZXJSZW5kZXJGcmFtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dm9pZCAwPT09dGhpcy5fZnJhbWVJZCYmKHRoaXMuX2ZyYW1lSWQ9dGhpcy5fbWFwLl9yZXF1ZXN0UmVuZGVyRnJhbWUoKGZ1bmN0aW9uKGUpe2RlbGV0ZSB0Ll9mcmFtZUlkLHQuaGFuZGxlRXZlbnQobmV3IGdpKCJyZW5kZXJGcmFtZSIse3RpbWVTdGFtcDplfSkpLHQuX2FwcGx5Q2hhbmdlcygpfSkpKX07dmFyIHhpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIocixuKXtlLmNhbGwodGhpcyksdGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy50cmFuc2Zvcm09cix0aGlzLl9iZWFyaW5nU25hcD1uLmJlYXJpbmdTbmFwLHQuYmluZEFsbChbIl9yZW5kZXJGcmFtZUNhbGxiYWNrIl0sdGhpcyl9cmV0dXJuIGUmJihyLl9fcHJvdG9fXz1lKSxyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLHIucHJvdG90eXBlLmdldENlbnRlcj1mdW5jdGlvbigpe3JldHVybiBuZXcgdC5MbmdMYXQodGhpcy50cmFuc2Zvcm0uY2VudGVyLmxuZyx0aGlzLnRyYW5zZm9ybS5jZW50ZXIubGF0KX0sci5wcm90b3R5cGUuc2V0Q2VudGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtjZW50ZXI6dH0sZSl9LHIucHJvdG90eXBlLnBhbkJ5PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT10LlBvaW50LmNvbnZlcnQoZSkubXVsdCgtMSksdGhpcy5wYW5Ubyh0aGlzLnRyYW5zZm9ybS5jZW50ZXIsdC5leHRlbmQoe29mZnNldDplfSxyKSxuKX0sci5wcm90b3R5cGUucGFuVG89ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0aGlzLmVhc2VUbyh0LmV4dGVuZCh7Y2VudGVyOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5nZXRab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnpvb219LHIucHJvdG90eXBlLnNldFpvb209ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5qdW1wVG8oe3pvb206dH0sZSksdGhpc30sci5wcm90b3R5cGUuem9vbVRvPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe3pvb206ZX0sciksbil9LHIucHJvdG90eXBlLnpvb21Jbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKSsxLHQsZSksdGhpc30sci5wcm90b3R5cGUuem9vbU91dD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnpvb21Ubyh0aGlzLmdldFpvb20oKS0xLHQsZSksdGhpc30sci5wcm90b3R5cGUuZ2V0QmVhcmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5iZWFyaW5nfSxyLnByb3RvdHlwZS5zZXRCZWFyaW5nPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuanVtcFRvKHtiZWFyaW5nOnR9LGUpLHRoaXN9LHIucHJvdG90eXBlLmdldFBhZGRpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucGFkZGluZ30sci5wcm90b3R5cGUuc2V0UGFkZGluZz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGFkZGluZzp0fSxlKSx0aGlzfSxyLnByb3RvdHlwZS5yb3RhdGVUbz1mdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZWFzZVRvKHQuZXh0ZW5kKHtiZWFyaW5nOmV9LHIpLG4pfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRoaXMucm90YXRlVG8oMCx0LmV4dGVuZCh7ZHVyYXRpb246MWUzfSxlKSxyKSx0aGlzfSxyLnByb3RvdHlwZS5yZXNldE5vcnRoUGl0Y2g9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdGhpcy5lYXNlVG8odC5leHRlbmQoe2JlYXJpbmc6MCxwaXRjaDowLGR1cmF0aW9uOjFlM30sZSksciksdGhpc30sci5wcm90b3R5cGUuc25hcFRvTm9ydGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnModGhpcy5nZXRCZWFyaW5nKCkpPHRoaXMuX2JlYXJpbmdTbmFwP3RoaXMucmVzZXROb3J0aCh0LGUpOnRoaXN9LHIucHJvdG90eXBlLmdldFBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnBpdGNofSxyLnByb3RvdHlwZS5zZXRQaXRjaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmp1bXBUbyh7cGl0Y2g6dH0sZSksdGhpc30sci5wcm90b3R5cGUuY2FtZXJhRm9yQm91bmRzPWZ1bmN0aW9uKGUscil7cmV0dXJuIGU9dC5MbmdMYXRCb3VuZHMuY29udmVydChlKSx0aGlzLl9jYW1lcmFGb3JCb3hBbmRCZWFyaW5nKGUuZ2V0Tm9ydGhXZXN0KCksZS5nZXRTb3V0aEVhc3QoKSwwLHIpfSxyLnByb3RvdHlwZS5fY2FtZXJhRm9yQm94QW5kQmVhcmluZz1mdW5jdGlvbihlLHIsbixpKXt2YXIgYT17dG9wOjAsYm90dG9tOjAscmlnaHQ6MCxsZWZ0OjB9O2lmKCJudW1iZXIiPT10eXBlb2YoaT10LmV4dGVuZCh7cGFkZGluZzphLG9mZnNldDpbMCwwXSxtYXhab29tOnRoaXMudHJhbnNmb3JtLm1heFpvb219LGkpKS5wYWRkaW5nKXt2YXIgbz1pLnBhZGRpbmc7aS5wYWRkaW5nPXt0b3A6byxib3R0b206byxyaWdodDpvLGxlZnQ6b319aS5wYWRkaW5nPXQuZXh0ZW5kKGEsaS5wYWRkaW5nKTt2YXIgcz10aGlzLnRyYW5zZm9ybSxsPXMucGFkZGluZyxjPXMucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KGUpKSx1PXMucHJvamVjdCh0LkxuZ0xhdC5jb252ZXJ0KHIpKSxmPWMucm90YXRlKC1uKk1hdGguUEkvMTgwKSxoPXUucm90YXRlKC1uKk1hdGguUEkvMTgwKSxwPW5ldyB0LlBvaW50KE1hdGgubWF4KGYueCxoLngpLE1hdGgubWF4KGYueSxoLnkpKSxkPW5ldyB0LlBvaW50KE1hdGgubWluKGYueCxoLngpLE1hdGgubWluKGYueSxoLnkpKSxtPXAuc3ViKGQpLGc9KHMud2lkdGgtKGwubGVmdCtsLnJpZ2h0K2kucGFkZGluZy5sZWZ0K2kucGFkZGluZy5yaWdodCkpL20ueCx2PShzLmhlaWdodC0obC50b3ArbC5ib3R0b20raS5wYWRkaW5nLnRvcCtpLnBhZGRpbmcuYm90dG9tKSkvbS55O2lmKCEodjwwfHxnPDApKXt2YXIgeT1NYXRoLm1pbihzLnNjYWxlWm9vbShzLnNjYWxlKk1hdGgubWluKGcsdikpLGkubWF4Wm9vbSkseD10LlBvaW50LmNvbnZlcnQoaS5vZmZzZXQpLGI9KGkucGFkZGluZy5sZWZ0LWkucGFkZGluZy5yaWdodCkvMixfPShpLnBhZGRpbmcudG9wLWkucGFkZGluZy5ib3R0b20pLzIsdz1uZXcgdC5Qb2ludCh4LngrYix4LnkrXykubXVsdChzLnNjYWxlL3Muem9vbVNjYWxlKHkpKTtyZXR1cm57Y2VudGVyOnMudW5wcm9qZWN0KGMuYWRkKHUpLmRpdigyKS5zdWIodykpLHpvb206eSxiZWFyaW5nOm59fXQud2Fybk9uY2UoIk1hcCBjYW5ub3QgZml0IHdpdGhpbiBjYW52YXMgd2l0aCB0aGUgZ2l2ZW4gYm91bmRzLCBwYWRkaW5nLCBhbmQvb3Igb2Zmc2V0LiIpfSxyLnByb3RvdHlwZS5maXRCb3VuZHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9maXRJbnRlcm5hbCh0aGlzLmNhbWVyYUZvckJvdW5kcyh0LGUpLGUscil9LHIucHJvdG90eXBlLmZpdFNjcmVlbkNvb3JkaW5hdGVzPWZ1bmN0aW9uKGUscixuLGksYSl7cmV0dXJuIHRoaXMuX2ZpdEludGVybmFsKHRoaXMuX2NhbWVyYUZvckJveEFuZEJlYXJpbmcodGhpcy50cmFuc2Zvcm0ucG9pbnRMb2NhdGlvbih0LlBvaW50LmNvbnZlcnQoZSkpLHRoaXMudHJhbnNmb3JtLnBvaW50TG9jYXRpb24odC5Qb2ludC5jb252ZXJ0KHIpKSxuLGkpLGksYSl9LHIucHJvdG90eXBlLl9maXRJbnRlcm5hbD1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU/KGRlbGV0ZShyPXQuZXh0ZW5kKGUscikpLnBhZGRpbmcsci5saW5lYXI/dGhpcy5lYXNlVG8ocixuKTp0aGlzLmZseVRvKHIsbikpOnRoaXN9LHIucHJvdG90eXBlLmp1bXBUbz1mdW5jdGlvbihlLHIpe3RoaXMuc3RvcCgpO3ZhciBuPXRoaXMudHJhbnNmb3JtLGk9ITEsYT0hMSxvPSExO3JldHVybiJ6b29tImluIGUmJm4uem9vbSE9PStlLnpvb20mJihpPSEwLG4uem9vbT0rZS56b29tKSx2b2lkIDAhPT1lLmNlbnRlciYmKG4uY2VudGVyPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXIpKSwiYmVhcmluZyJpbiBlJiZuLmJlYXJpbmchPT0rZS5iZWFyaW5nJiYoYT0hMCxuLmJlYXJpbmc9K2UuYmVhcmluZyksInBpdGNoImluIGUmJm4ucGl0Y2ghPT0rZS5waXRjaCYmKG89ITAsbi5waXRjaD0rZS5waXRjaCksbnVsbD09ZS5wYWRkaW5nfHxuLmlzUGFkZGluZ0VxdWFsKGUucGFkZGluZyl8fChuLnBhZGRpbmc9ZS5wYWRkaW5nKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLHIpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLHIpKS5maXJlKG5ldyB0LkV2ZW50KCJ6b29tZW5kIixyKSksYSYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZSIscikpLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZWVuZCIscikpLG8mJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hzdGFydCIscikpLmZpcmUobmV3IHQuRXZlbnQoInBpdGNoIixyKSkuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hlbmQiLHIpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLHIpKX0sci5wcm90b3R5cGUuZWFzZVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpczt0aGlzLl9zdG9wKCExLGUuZWFzZUlkKSwoITE9PT0oZT10LmV4dGVuZCh7b2Zmc2V0OlswLDBdLGR1cmF0aW9uOjUwMCxlYXNpbmc6dC5lYXNlfSxlKSkuYW5pbWF0ZXx8IWUuZXNzZW50aWFsJiZ0LmJyb3dzZXIucHJlZmVyc1JlZHVjZWRNb3Rpb24pJiYoZS5kdXJhdGlvbj0wKTt2YXIgaT10aGlzLnRyYW5zZm9ybSxhPXRoaXMuZ2V0Wm9vbSgpLG89dGhpcy5nZXRCZWFyaW5nKCkscz10aGlzLmdldFBpdGNoKCksbD10aGlzLmdldFBhZGRpbmcoKSxjPSJ6b29tImluIGU/K2Uuem9vbTphLHU9ImJlYXJpbmciaW4gZT90aGlzLl9ub3JtYWxpemVCZWFyaW5nKGUuYmVhcmluZyxvKTpvLGY9InBpdGNoImluIGU/K2UucGl0Y2g6cyxoPSJwYWRkaW5nImluIGU/ZS5wYWRkaW5nOmkucGFkZGluZyxwPXQuUG9pbnQuY29udmVydChlLm9mZnNldCksZD1pLmNlbnRlclBvaW50LmFkZChwKSxtPWkucG9pbnRMb2NhdGlvbihkKSxnPXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXJ8fG0pO3RoaXMuX25vcm1hbGl6ZUNlbnRlcihnKTt2YXIgdix5LHg9aS5wcm9qZWN0KG0pLGI9aS5wcm9qZWN0KGcpLnN1Yih4KSxfPWkuem9vbVNjYWxlKGMtYSk7ZS5hcm91bmQmJih2PXQuTG5nTGF0LmNvbnZlcnQoZS5hcm91bmQpLHk9aS5sb2NhdGlvblBvaW50KHYpKTt2YXIgdz17bW92aW5nOnRoaXMuX21vdmluZyx6b29taW5nOnRoaXMuX3pvb21pbmcscm90YXRpbmc6dGhpcy5fcm90YXRpbmcscGl0Y2hpbmc6dGhpcy5fcGl0Y2hpbmd9O3JldHVybiB0aGlzLl96b29taW5nPXRoaXMuX3pvb21pbmd8fGMhPT1hLHRoaXMuX3JvdGF0aW5nPXRoaXMuX3JvdGF0aW5nfHxvIT09dSx0aGlzLl9waXRjaGluZz10aGlzLl9waXRjaGluZ3x8ZiE9PXMsdGhpcy5fcGFkZGluZz0haS5pc1BhZGRpbmdFcXVhbChoKSx0aGlzLl9lYXNlSWQ9ZS5lYXNlSWQsdGhpcy5fcHJlcGFyZUVhc2UocixlLm5vTW92ZVN0YXJ0LHcpLGNsZWFyVGltZW91dCh0aGlzLl9lYXNlRW5kVGltZW91dElEKSx0aGlzLl9lYXNlKChmdW5jdGlvbihlKXtpZihuLl96b29taW5nJiYoaS56b29tPXQubnVtYmVyKGEsYyxlKSksbi5fcm90YXRpbmcmJihpLmJlYXJpbmc9dC5udW1iZXIobyx1LGUpKSxuLl9waXRjaGluZyYmKGkucGl0Y2g9dC5udW1iZXIocyxmLGUpKSxuLl9wYWRkaW5nJiYoaS5pbnRlcnBvbGF0ZVBhZGRpbmcobCxoLGUpLGQ9aS5jZW50ZXJQb2ludC5hZGQocCkpLHYpaS5zZXRMb2NhdGlvbkF0UG9pbnQodix5KTtlbHNle3ZhciBtPWkuem9vbVNjYWxlKGkuem9vbS1hKSxnPWM+YT9NYXRoLm1pbigyLF8pOk1hdGgubWF4KC41LF8pLHc9TWF0aC5wb3coZywxLWUpLFQ9aS51bnByb2plY3QoeC5hZGQoYi5tdWx0KGUqdykpLm11bHQobSkpO2kuc2V0TG9jYXRpb25BdFBvaW50KGkucmVuZGVyV29ybGRDb3BpZXM/VC53cmFwKCk6VCxkKX1uLl9maXJlTW92ZUV2ZW50cyhyKX0pLChmdW5jdGlvbih0KXtuLl9hZnRlckVhc2Uocix0KX0pLGUpLHRoaXN9LHIucHJvdG90eXBlLl9wcmVwYXJlRWFzZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pLHRoaXMuX21vdmluZz0hMCxyfHxuLm1vdmluZ3x8dGhpcy5maXJlKG5ldyB0LkV2ZW50KCJtb3Zlc3RhcnQiLGUpKSx0aGlzLl96b29taW5nJiYhbi56b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21zdGFydCIsZSkpLHRoaXMuX3JvdGF0aW5nJiYhbi5yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGVzdGFydCIsZSkpLHRoaXMuX3BpdGNoaW5nJiYhbi5waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaHN0YXJ0IixlKSl9LHIucHJvdG90eXBlLl9maXJlTW92ZUV2ZW50cz1mdW5jdGlvbihlKXt0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmUiLGUpKSx0aGlzLl96b29taW5nJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb20iLGUpKSx0aGlzLl9yb3RhdGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyb3RhdGUiLGUpKSx0aGlzLl9waXRjaGluZyYmdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJwaXRjaCIsZSkpfSxyLnByb3RvdHlwZS5fYWZ0ZXJFYXNlPWZ1bmN0aW9uKGUscil7aWYoIXRoaXMuX2Vhc2VJZHx8IXJ8fHRoaXMuX2Vhc2VJZCE9PXIpe2RlbGV0ZSB0aGlzLl9lYXNlSWQ7dmFyIG49dGhpcy5fem9vbWluZyxpPXRoaXMuX3JvdGF0aW5nLGE9dGhpcy5fcGl0Y2hpbmc7dGhpcy5fbW92aW5nPSExLHRoaXMuX3pvb21pbmc9ITEsdGhpcy5fcm90YXRpbmc9ITEsdGhpcy5fcGl0Y2hpbmc9ITEsdGhpcy5fcGFkZGluZz0hMSxuJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInpvb21lbmQiLGUpKSxpJiZ0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJvdGF0ZWVuZCIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgicGl0Y2hlbmQiLGUpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm1vdmVlbmQiLGUpKX19LHIucHJvdG90eXBlLmZseVRvPWZ1bmN0aW9uKGUscil7dmFyIG49dGhpcztpZighZS5lc3NlbnRpYWwmJnQuYnJvd3Nlci5wcmVmZXJzUmVkdWNlZE1vdGlvbil7dmFyIGk9dC5waWNrKGUsWyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIiwiYXJvdW5kIl0pO3JldHVybiB0aGlzLmp1bXBUbyhpLHIpfXRoaXMuc3RvcCgpLGU9dC5leHRlbmQoe29mZnNldDpbMCwwXSxzcGVlZDoxLjIsY3VydmU6MS40MixlYXNpbmc6dC5lYXNlfSxlKTt2YXIgYT10aGlzLnRyYW5zZm9ybSxvPXRoaXMuZ2V0Wm9vbSgpLHM9dGhpcy5nZXRCZWFyaW5nKCksbD10aGlzLmdldFBpdGNoKCksYz10aGlzLmdldFBhZGRpbmcoKSx1PSJ6b29tImluIGU/dC5jbGFtcCgrZS56b29tLGEubWluWm9vbSxhLm1heFpvb20pOm8sZj0iYmVhcmluZyJpbiBlP3RoaXMuX25vcm1hbGl6ZUJlYXJpbmcoZS5iZWFyaW5nLHMpOnMsaD0icGl0Y2giaW4gZT8rZS5waXRjaDpsLHA9InBhZGRpbmciaW4gZT9lLnBhZGRpbmc6YS5wYWRkaW5nLGQ9YS56b29tU2NhbGUodS1vKSxtPXQuUG9pbnQuY29udmVydChlLm9mZnNldCksZz1hLmNlbnRlclBvaW50LmFkZChtKSx2PWEucG9pbnRMb2NhdGlvbihnKSx5PXQuTG5nTGF0LmNvbnZlcnQoZS5jZW50ZXJ8fHYpO3RoaXMuX25vcm1hbGl6ZUNlbnRlcih5KTt2YXIgeD1hLnByb2plY3QodiksYj1hLnByb2plY3QoeSkuc3ViKHgpLF89ZS5jdXJ2ZSx3PU1hdGgubWF4KGEud2lkdGgsYS5oZWlnaHQpLFQ9dy9kLGs9Yi5tYWcoKTtpZigibWluWm9vbSJpbiBlKXt2YXIgQT10LmNsYW1wKE1hdGgubWluKGUubWluWm9vbSxvLHUpLGEubWluWm9vbSxhLm1heFpvb20pLE09dy9hLnpvb21TY2FsZShBLW8pO189TWF0aC5zcXJ0KE0vayoyKX12YXIgUz1fKl87ZnVuY3Rpb24gRSh0KXt2YXIgZT0oVCpULXcqdysodD8tMToxKSpTKlMqayprKS8oMioodD9UOncpKlMqayk7cmV0dXJuIE1hdGgubG9nKE1hdGguc3FydChlKmUrMSktZSl9ZnVuY3Rpb24gTCh0KXtyZXR1cm4oTWF0aC5leHAodCktTWF0aC5leHAoLXQpKS8yfWZ1bmN0aW9uIEModCl7cmV0dXJuKE1hdGguZXhwKHQpK01hdGguZXhwKC10KSkvMn12YXIgUD1FKDApLEk9ZnVuY3Rpb24odCl7cmV0dXJuIEMoUCkvQyhQK18qdCl9LE89ZnVuY3Rpb24odCl7cmV0dXJuIHcqKChDKFApKihMKGU9UCtfKnQpL0MoZSkpLUwoUCkpL1MpL2s7dmFyIGV9LHo9KEUoMSktUCkvXztpZihNYXRoLmFicyhrKTwxZS02fHwhaXNGaW5pdGUoeikpe2lmKE1hdGguYWJzKHctVCk8MWUtNilyZXR1cm4gdGhpcy5lYXNlVG8oZSxyKTt2YXIgRD1UPHc/LTE6MTt6PU1hdGguYWJzKE1hdGgubG9nKFQvdykpL18sTz1mdW5jdGlvbigpe3JldHVybiAwfSxJPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmV4cChEKl8qdCl9fWlmKCJkdXJhdGlvbiJpbiBlKWUuZHVyYXRpb249K2UuZHVyYXRpb247ZWxzZXt2YXIgUj0ic2NyZWVuU3BlZWQiaW4gZT8rZS5zY3JlZW5TcGVlZC9fOitlLnNwZWVkO2UuZHVyYXRpb249MWUzKnovUn1yZXR1cm4gZS5tYXhEdXJhdGlvbiYmZS5kdXJhdGlvbj5lLm1heER1cmF0aW9uJiYoZS5kdXJhdGlvbj0wKSx0aGlzLl96b29taW5nPSEwLHRoaXMuX3JvdGF0aW5nPXMhPT1mLHRoaXMuX3BpdGNoaW5nPWghPT1sLHRoaXMuX3BhZGRpbmc9IWEuaXNQYWRkaW5nRXF1YWwocCksdGhpcy5fcHJlcGFyZUVhc2UociwhMSksdGhpcy5fZWFzZSgoZnVuY3Rpb24oZSl7dmFyIGk9ZSp6LGQ9MS9JKGkpO2Euem9vbT0xPT09ZT91Om8rYS5zY2FsZVpvb20oZCksbi5fcm90YXRpbmcmJihhLmJlYXJpbmc9dC5udW1iZXIocyxmLGUpKSxuLl9waXRjaGluZyYmKGEucGl0Y2g9dC5udW1iZXIobCxoLGUpKSxuLl9wYWRkaW5nJiYoYS5pbnRlcnBvbGF0ZVBhZGRpbmcoYyxwLGUpLGc9YS5jZW50ZXJQb2ludC5hZGQobSkpO3ZhciB2PTE9PT1lP3k6YS51bnByb2plY3QoeC5hZGQoYi5tdWx0KE8oaSkpKS5tdWx0KGQpKTthLnNldExvY2F0aW9uQXRQb2ludChhLnJlbmRlcldvcmxkQ29waWVzP3Yud3JhcCgpOnYsZyksbi5fZmlyZU1vdmVFdmVudHMocil9KSwoZnVuY3Rpb24oKXtyZXR1cm4gbi5fYWZ0ZXJFYXNlKHIpfSksZSksdGhpc30sci5wcm90b3R5cGUuaXNFYXNpbmc9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX2Vhc2VGcmFtZUlkfSxyLnByb3RvdHlwZS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0b3AoKX0sci5wcm90b3R5cGUuX3N0b3A9ZnVuY3Rpb24odCxlKXtpZih0aGlzLl9lYXNlRnJhbWVJZCYmKHRoaXMuX2NhbmNlbFJlbmRlckZyYW1lKHRoaXMuX2Vhc2VGcmFtZUlkKSxkZWxldGUgdGhpcy5fZWFzZUZyYW1lSWQsZGVsZXRlIHRoaXMuX29uRWFzZUZyYW1lKSx0aGlzLl9vbkVhc2VFbmQpe3ZhciByPXRoaXMuX29uRWFzZUVuZDtkZWxldGUgdGhpcy5fb25FYXNlRW5kLHIuY2FsbCh0aGlzLGUpfWlmKCF0KXt2YXIgbj10aGlzLmhhbmRsZXJzO24mJm4uc3RvcCgpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5fZWFzZT1mdW5jdGlvbihlLHIsbil7ITE9PT1uLmFuaW1hdGV8fDA9PT1uLmR1cmF0aW9uPyhlKDEpLHIoKSk6KHRoaXMuX2Vhc2VTdGFydD10LmJyb3dzZXIubm93KCksdGhpcy5fZWFzZU9wdGlvbnM9bix0aGlzLl9vbkVhc2VGcmFtZT1lLHRoaXMuX29uRWFzZUVuZD1yLHRoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKSl9LHIucHJvdG90eXBlLl9yZW5kZXJGcmFtZUNhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIGU9TWF0aC5taW4oKHQuYnJvd3Nlci5ub3coKS10aGlzLl9lYXNlU3RhcnQpL3RoaXMuX2Vhc2VPcHRpb25zLmR1cmF0aW9uLDEpO3RoaXMuX29uRWFzZUZyYW1lKHRoaXMuX2Vhc2VPcHRpb25zLmVhc2luZyhlKSksZTwxP3RoaXMuX2Vhc2VGcmFtZUlkPXRoaXMuX3JlcXVlc3RSZW5kZXJGcmFtZSh0aGlzLl9yZW5kZXJGcmFtZUNhbGxiYWNrKTp0aGlzLnN0b3AoKX0sci5wcm90b3R5cGUuX25vcm1hbGl6ZUJlYXJpbmc9ZnVuY3Rpb24oZSxyKXtlPXQud3JhcChlLC0xODAsMTgwKTt2YXIgbj1NYXRoLmFicyhlLXIpO3JldHVybiBNYXRoLmFicyhlLTM2MC1yKTxuJiYoZS09MzYwKSxNYXRoLmFicyhlKzM2MC1yKTxuJiYoZSs9MzYwKSxlfSxyLnByb3RvdHlwZS5fbm9ybWFsaXplQ2VudGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMudHJhbnNmb3JtO2lmKGUucmVuZGVyV29ybGRDb3BpZXMmJiFlLmxuZ1JhbmdlKXt2YXIgcj10LmxuZy1lLmNlbnRlci5sbmc7dC5sbmcrPXI+MTgwPy0zNjA6cjwtMTgwPzM2MDowfX0scn0odC5FdmVudGVkKSxiaT1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5vcHRpb25zPWUsdC5iaW5kQWxsKFsiX3VwZGF0ZUVkaXRMaW5rIiwiX3VwZGF0ZURhdGEiLCJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtiaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1yaWdodCJ9LGJpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5jb21wYWN0O3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1hdHRyaWIiKSx0aGlzLl9pbm5lckNvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybC1hdHRyaWItaW5uZXIiLHRoaXMuX2NvbnRhaW5lciksZSYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWNvbXBhY3QiKSx0aGlzLl91cGRhdGVBdHRyaWJ1dGlvbnMoKSx0aGlzLl91cGRhdGVFZGl0TGluaygpLHRoaXMuX21hcC5vbigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZURhdGEpLHRoaXMuX21hcC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlRWRpdExpbmspLHZvaWQgMD09PWUmJih0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpKSx0aGlzLl9jb250YWluZXJ9LGJpLnByb3RvdHlwZS5vblJlbW92ZT1mdW5jdGlvbigpe3IucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigic3R5bGVkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVEYXRhKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGVFZGl0TGluayksdGhpcy5fbWFwLm9mZigicmVzaXplIix0aGlzLl91cGRhdGVDb21wYWN0KSx0aGlzLl9tYXA9dm9pZCAwLHRoaXMuX2F0dHJpYkhUTUw9dm9pZCAwfSxiaS5wcm90b3R5cGUuX3VwZGF0ZUVkaXRMaW5rPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZWRpdExpbms7ZXx8KGU9dGhpcy5fZWRpdExpbms9dGhpcy5fY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tYXBib3gtaW1wcm92ZS1tYXAiKSk7dmFyIHI9W3trZXk6Im93bmVyIix2YWx1ZTp0aGlzLnN0eWxlT3duZXJ9LHtrZXk6ImlkIix2YWx1ZTp0aGlzLnN0eWxlSWR9LHtrZXk6ImFjY2Vzc190b2tlbiIsdmFsdWU6dGhpcy5fbWFwLl9yZXF1ZXN0TWFuYWdlci5fY3VzdG9tQWNjZXNzVG9rZW58fHQuY29uZmlnLkFDQ0VTU19UT0tFTn1dO2lmKGUpe3ZhciBuPXIucmVkdWNlKChmdW5jdGlvbih0LGUsbil7cmV0dXJuIGUudmFsdWUmJih0Kz1lLmtleSsiPSIrZS52YWx1ZSsobjxyLmxlbmd0aC0xPyImIjoiIikpLHR9KSwiPyIpO2UuaHJlZj10LmNvbmZpZy5GRUVEQkFDS19VUkwrIi8iK24rKHRoaXMuX21hcC5faGFzaD90aGlzLl9tYXAuX2hhc2guZ2V0SGFzaFN0cmluZyghMCk6IiIpLGUucmVsPSJub29wZW5lciBub2ZvbGxvdyJ9fSxiaS5wcm90b3R5cGUuX3VwZGF0ZURhdGE9ZnVuY3Rpb24odCl7IXR8fCJtZXRhZGF0YSIhPT10LnNvdXJjZURhdGFUeXBlJiYic3R5bGUiIT09dC5kYXRhVHlwZXx8KHRoaXMuX3VwZGF0ZUF0dHJpYnV0aW9ucygpLHRoaXMuX3VwZGF0ZUVkaXRMaW5rKCkpfSxiaS5wcm90b3R5cGUuX3VwZGF0ZUF0dHJpYnV0aW9ucz1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9W107aWYodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uJiYoQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuY3VzdG9tQXR0cmlidXRpb24pP3Q9dC5jb25jYXQodGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0PyIiOnR9KSkpOiJzdHJpbmciPT10eXBlb2YgdGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uJiZ0LnB1c2godGhpcy5vcHRpb25zLmN1c3RvbUF0dHJpYnV0aW9uKSksdGhpcy5fbWFwLnN0eWxlLnN0eWxlc2hlZXQpe3ZhciBlPXRoaXMuX21hcC5zdHlsZS5zdHlsZXNoZWV0O3RoaXMuc3R5bGVPd25lcj1lLm93bmVyLHRoaXMuc3R5bGVJZD1lLmlkfXZhciByPXRoaXMuX21hcC5zdHlsZS5zb3VyY2VDYWNoZXM7Zm9yKHZhciBuIGluIHIpe3ZhciBpPXJbbl07aWYoaS51c2VkKXt2YXIgYT1pLmdldFNvdXJjZSgpO2EuYXR0cmlidXRpb24mJnQuaW5kZXhPZihhLmF0dHJpYnV0aW9uKTwwJiZ0LnB1c2goYS5hdHRyaWJ1dGlvbil9fXQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGgtZS5sZW5ndGh9KSk7dmFyIG89KHQ9dC5maWx0ZXIoKGZ1bmN0aW9uKGUscil7Zm9yKHZhciBuPXIrMTtuPHQubGVuZ3RoO24rKylpZih0W25dLmluZGV4T2YoZSk+PTApcmV0dXJuITE7cmV0dXJuITB9KSkpLmpvaW4oIiB8ICIpO28hPT10aGlzLl9hdHRyaWJIVE1MJiYodGhpcy5fYXR0cmliSFRNTD1vLHQubGVuZ3RoPyh0aGlzLl9pbm5lckNvbnRhaW5lci5pbm5lckhUTUw9byx0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtYXR0cmliLWVtcHR5IikpOnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1hdHRyaWItZW1wdHkiKSx0aGlzLl9lZGl0TGluaz1udWxsKX19LGJpLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3RoaXMuX21hcC5nZXRDYW52YXNDb250YWluZXIoKS5vZmZzZXRXaWR0aDw9NjQwP3RoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jb21wYWN0Iik6dGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWNvbXBhY3QiKX07dmFyIF9pPWZ1bmN0aW9uKCl7dC5iaW5kQWxsKFsiX3VwZGF0ZUxvZ28iXSx0aGlzKSx0LmJpbmRBbGwoWyJfdXBkYXRlQ29tcGFjdCJdLHRoaXMpfTtfaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7dGhpcy5fbWFwPXQsdGhpcy5fY29udGFpbmVyPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsIik7dmFyIGU9ci5jcmVhdGUoImEiLCJtYXBib3hnbC1jdHJsLWxvZ28iKTtyZXR1cm4gZS50YXJnZXQ9Il9ibGFuayIsZS5yZWw9Im5vb3BlbmVyIG5vZm9sbG93IixlLmhyZWY9Imh0dHBzOi8vd3d3Lm1hcGJveC5jb20vIixlLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIsdGhpcy5fbWFwLl9nZXRVSVN0cmluZygiTG9nb0NvbnRyb2wuVGl0bGUiKSksZS5zZXRBdHRyaWJ1dGUoInJlbCIsIm5vb3BlbmVyIG5vZm9sbG93IiksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuX2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLl9tYXAub24oInNvdXJjZWRhdGEiLHRoaXMuX3VwZGF0ZUxvZ28pLHRoaXMuX3VwZGF0ZUxvZ28oKSx0aGlzLl9tYXAub24oInJlc2l6ZSIsdGhpcy5fdXBkYXRlQ29tcGFjdCksdGhpcy5fdXBkYXRlQ29tcGFjdCgpLHRoaXMuX2NvbnRhaW5lcn0sX2kucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udGFpbmVyKSx0aGlzLl9tYXAub2ZmKCJzb3VyY2VkYXRhIix0aGlzLl91cGRhdGVMb2dvKSx0aGlzLl9tYXAub2ZmKCJyZXNpemUiLHRoaXMuX3VwZGF0ZUNvbXBhY3QpfSxfaS5wcm90b3R5cGUuZ2V0RGVmYXVsdFBvc2l0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuImJvdHRvbS1sZWZ0In0sX2kucHJvdG90eXBlLl91cGRhdGVMb2dvPWZ1bmN0aW9uKHQpe3QmJiJtZXRhZGF0YSIhPT10LnNvdXJjZURhdGFUeXBlfHwodGhpcy5fY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9dGhpcy5fbG9nb1JlcXVpcmVkKCk/ImJsb2NrIjoibm9uZSIpfSxfaS5wcm90b3R5cGUuX2xvZ29SZXF1aXJlZD1mdW5jdGlvbigpe2lmKHRoaXMuX21hcC5zdHlsZSl7dmFyIHQ9dGhpcy5fbWFwLnN0eWxlLnNvdXJjZUNhY2hlcztmb3IodmFyIGUgaW4gdCl7aWYodFtlXS5nZXRTb3VyY2UoKS5tYXBib3hfbG9nbylyZXR1cm4hMH1yZXR1cm4hMX19LF9pLnByb3RvdHlwZS5fdXBkYXRlQ29tcGFjdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lci5jaGlsZHJlbjtpZih0Lmxlbmd0aCl7dmFyIGU9dFswXTt0aGlzLl9tYXAuZ2V0Q2FudmFzQ29udGFpbmVyKCkub2Zmc2V0V2lkdGg8MjUwP2UuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY29tcGFjdCIpOmUuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY29tcGFjdCIpfX07dmFyIHdpPWZ1bmN0aW9uKCl7dGhpcy5fcXVldWU9W10sdGhpcy5faWQ9MCx0aGlzLl9jbGVhcmVkPSExLHRoaXMuX2N1cnJlbnRseVJ1bm5pbmc9ITF9O3dpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU9Kyt0aGlzLl9pZDtyZXR1cm4gdGhpcy5fcXVldWUucHVzaCh7Y2FsbGJhY2s6dCxpZDplLGNhbmNlbGxlZDohMX0pLGV9LHdpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX2N1cnJlbnRseVJ1bm5pbmcscj0wLG49ZT90aGlzLl9xdWV1ZS5jb25jYXQoZSk6dGhpcy5fcXVldWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKGkuaWQ9PT10KXJldHVybiB2b2lkKGkuY2FuY2VsbGVkPSEwKX19LHdpLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9MCk7dmFyIGU9dGhpcy5fY3VycmVudGx5UnVubmluZz10aGlzLl9xdWV1ZTt0aGlzLl9xdWV1ZT1bXTtmb3IodmFyIHI9MCxuPWU7cjxuLmxlbmd0aDtyKz0xKXt2YXIgaT1uW3JdO2lmKCFpLmNhbmNlbGxlZCYmKGkuY2FsbGJhY2sodCksdGhpcy5fY2xlYXJlZCkpYnJlYWt9dGhpcy5fY2xlYXJlZD0hMSx0aGlzLl9jdXJyZW50bHlSdW5uaW5nPSExfSx3aS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9jdXJyZW50bHlSdW5uaW5nJiYodGhpcy5fY2xlYXJlZD0hMCksdGhpcy5fcXVldWU9W119O3ZhciBUaT17IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIjoiRW50ZXIgZnVsbHNjcmVlbiIsIkZ1bGxzY3JlZW5Db250cm9sLkV4aXQiOiJFeGl0IGZ1bGxzY3JlZW4iLCJHZW9sb2NhdGVDb250cm9sLkZpbmRNeUxvY2F0aW9uIjoiRmluZCBteSBsb2NhdGlvbiIsIkdlb2xvY2F0ZUNvbnRyb2wuTG9jYXRpb25Ob3RBdmFpbGFibGUiOiJMb2NhdGlvbiBub3QgYXZhaWxhYmxlIiwiTG9nb0NvbnRyb2wuVGl0bGUiOiJNYXBib3ggbG9nbyIsIk5hdmlnYXRpb25Db250cm9sLlJlc2V0QmVhcmluZyI6IlJlc2V0IGJlYXJpbmcgdG8gbm9ydGgiLCJOYXZpZ2F0aW9uQ29udHJvbC5ab29tSW4iOiJab29tIGluIiwiTmF2aWdhdGlvbkNvbnRyb2wuWm9vbU91dCI6Ilpvb20gb3V0IiwiU2NhbGVDb250cm9sLkZlZXQiOiJmdCIsIlNjYWxlQ29udHJvbC5NZXRlcnMiOiJtIiwiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiOiJrbSIsIlNjYWxlQ29udHJvbC5NaWxlcyI6Im1pIiwiU2NhbGVDb250cm9sLk5hdXRpY2FsTWlsZXMiOiJubSJ9LGtpPXQud2luZG93LkhUTUxJbWFnZUVsZW1lbnQsQWk9dC53aW5kb3cuSFRNTEVsZW1lbnQsTWk9dC53aW5kb3cuSW1hZ2VCaXRtYXAsU2k9e2NlbnRlcjpbMCwwXSx6b29tOjAsYmVhcmluZzowLHBpdGNoOjAsbWluWm9vbTotMixtYXhab29tOjIyLG1pblBpdGNoOjAsbWF4UGl0Y2g6NjAsaW50ZXJhY3RpdmU6ITAsc2Nyb2xsWm9vbTohMCxib3hab29tOiEwLGRyYWdSb3RhdGU6ITAsZHJhZ1BhbjohMCxrZXlib2FyZDohMCxkb3VibGVDbGlja1pvb206ITAsdG91Y2hab29tUm90YXRlOiEwLHRvdWNoUGl0Y2g6ITAsYmVhcmluZ1NuYXA6NyxjbGlja1RvbGVyYW5jZTozLHBpdGNoV2l0aFJvdGF0ZTohMCxoYXNoOiExLGF0dHJpYnV0aW9uQ29udHJvbDohMCxmYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0OiExLHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMSx0cmFja1Jlc2l6ZTohMCxyZW5kZXJXb3JsZENvcGllczohMCxyZWZyZXNoRXhwaXJlZFRpbGVzOiEwLG1heFRpbGVDYWNoZVNpemU6bnVsbCxsb2NhbElkZW9ncmFwaEZvbnRGYW1pbHk6InNhbnMtc2VyaWYiLHRyYW5zZm9ybVJlcXVlc3Q6bnVsbCxhY2Nlc3NUb2tlbjpudWxsLGZhZGVEdXJhdGlvbjozMDAsY3Jvc3NTb3VyY2VDb2xsaXNpb25zOiEwfSxFaT1mdW5jdGlvbihuKXtmdW5jdGlvbiBpKGUpe3ZhciByPXRoaXM7aWYobnVsbCE9KGU9dC5leHRlbmQoe30sU2ksZSkpLm1pblpvb20mJm51bGwhPWUubWF4Wm9vbSYmZS5taW5ab29tPmUubWF4Wm9vbSl0aHJvdyBuZXcgRXJyb3IoIm1heFpvb20gbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWluWm9vbSIpO2lmKG51bGwhPWUubWluUGl0Y2gmJm51bGwhPWUubWF4UGl0Y2gmJmUubWluUGl0Y2g+ZS5tYXhQaXRjaCl0aHJvdyBuZXcgRXJyb3IoIm1heFBpdGNoIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIG1pblBpdGNoIik7aWYobnVsbCE9ZS5taW5QaXRjaCYmZS5taW5QaXRjaDwwKXRocm93IG5ldyBFcnJvcigibWluUGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCIpO2lmKG51bGwhPWUubWF4UGl0Y2gmJmUubWF4UGl0Y2g+NjApdGhyb3cgbmV3IEVycm9yKCJtYXhQaXRjaCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA2MCIpO3ZhciBpPW5ldyBBbihlLm1pblpvb20sZS5tYXhab29tLGUubWluUGl0Y2gsZS5tYXhQaXRjaCxlLnJlbmRlcldvcmxkQ29waWVzKTtpZihuLmNhbGwodGhpcyxpLGUpLHRoaXMuX2ludGVyYWN0aXZlPWUuaW50ZXJhY3RpdmUsdGhpcy5fbWF4VGlsZUNhY2hlU2l6ZT1lLm1heFRpbGVDYWNoZVNpemUsdGhpcy5fZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdD1lLmZhaWxJZk1ham9yUGVyZm9ybWFuY2VDYXZlYXQsdGhpcy5fcHJlc2VydmVEcmF3aW5nQnVmZmVyPWUucHJlc2VydmVEcmF3aW5nQnVmZmVyLHRoaXMuX2FudGlhbGlhcz1lLmFudGlhbGlhcyx0aGlzLl90cmFja1Jlc2l6ZT1lLnRyYWNrUmVzaXplLHRoaXMuX2JlYXJpbmdTbmFwPWUuYmVhcmluZ1NuYXAsdGhpcy5fcmVmcmVzaEV4cGlyZWRUaWxlcz1lLnJlZnJlc2hFeHBpcmVkVGlsZXMsdGhpcy5fZmFkZUR1cmF0aW9uPWUuZmFkZUR1cmF0aW9uLHRoaXMuX2Nyb3NzU291cmNlQ29sbGlzaW9ucz1lLmNyb3NzU291cmNlQ29sbGlzaW9ucyx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj0xLHRoaXMuX2NvbGxlY3RSZXNvdXJjZVRpbWluZz1lLmNvbGxlY3RSZXNvdXJjZVRpbWluZyx0aGlzLl9yZW5kZXJUYXNrUXVldWU9bmV3IHdpLHRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX21hcElkPXQudW5pcXVlSWQoKSx0aGlzLl9sb2NhbGU9dC5leHRlbmQoe30sVGksZS5sb2NhbGUpLHRoaXMuX3JlcXVlc3RNYW5hZ2VyPW5ldyB0LlJlcXVlc3RNYW5hZ2VyKGUudHJhbnNmb3JtUmVxdWVzdCxlLmFjY2Vzc1Rva2VuKSwic3RyaW5nIj09dHlwZW9mIGUuY29udGFpbmVyKXtpZih0aGlzLl9jb250YWluZXI9dC53aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5jb250YWluZXIpLCF0aGlzLl9jb250YWluZXIpdGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgJyIrZS5jb250YWluZXIrIicgbm90IGZvdW5kLiIpfWVsc2V7aWYoIShlLmNvbnRhaW5lciBpbnN0YW5jZW9mIEFpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdHlwZTogJ2NvbnRhaW5lcicgbXVzdCBiZSBhIFN0cmluZyBvciBIVE1MRWxlbWVudC4iKTt0aGlzLl9jb250YWluZXI9ZS5jb250YWluZXJ9aWYoZS5tYXhCb3VuZHMmJnRoaXMuc2V0TWF4Qm91bmRzKGUubWF4Qm91bmRzKSx0LmJpbmRBbGwoWyJfb25XaW5kb3dPbmxpbmUiLCJfb25XaW5kb3dSZXNpemUiLCJfY29udGV4dExvc3QiLCJfY29udGV4dFJlc3RvcmVkIl0sdGhpcyksdGhpcy5fc2V0dXBDb250YWluZXIoKSx0aGlzLl9zZXR1cFBhaW50ZXIoKSx2b2lkIDA9PT10aGlzLnBhaW50ZXIpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBXZWJHTC4iKTt0aGlzLm9uKCJtb3ZlIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCExKX0pKSx0aGlzLm9uKCJ6b29tIiwoZnVuY3Rpb24oKXtyZXR1cm4gci5fdXBkYXRlKCEwKX0pKSx2b2lkIDAhPT10LndpbmRvdyYmKHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm9ubGluZSIsdGhpcy5fb25XaW5kb3dPbmxpbmUsITEpLHQud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fb25XaW5kb3dSZXNpemUsITEpKSx0aGlzLmhhbmRsZXJzPW5ldyB5aSh0aGlzLGUpO3ZhciBhPSJzdHJpbmciPT10eXBlb2YgZS5oYXNoJiZlLmhhc2h8fHZvaWQgMDt0aGlzLl9oYXNoPWUuaGFzaCYmbmV3IFNuKGEpLmFkZFRvKHRoaXMpLHRoaXMuX2hhc2gmJnRoaXMuX2hhc2guX29uSGFzaENoYW5nZSgpfHwodGhpcy5qdW1wVG8oe2NlbnRlcjplLmNlbnRlcix6b29tOmUuem9vbSxiZWFyaW5nOmUuYmVhcmluZyxwaXRjaDplLnBpdGNofSksZS5ib3VuZHMmJih0aGlzLnJlc2l6ZSgpLHRoaXMuZml0Qm91bmRzKGUuYm91bmRzLHQuZXh0ZW5kKHt9LGUuZml0Qm91bmRzT3B0aW9ucyx7ZHVyYXRpb246MH0pKSkpLHRoaXMucmVzaXplKCksdGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PWUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5LGUuc3R5bGUmJnRoaXMuc2V0U3R5bGUoZS5zdHlsZSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OmUubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5fSksZS5hdHRyaWJ1dGlvbkNvbnRyb2wmJnRoaXMuYWRkQ29udHJvbChuZXcgYmkoe2N1c3RvbUF0dHJpYnV0aW9uOmUuY3VzdG9tQXR0cmlidXRpb259KSksdGhpcy5hZGRDb250cm9sKG5ldyBfaSxlLmxvZ29Qb3NpdGlvbiksdGhpcy5vbigic3R5bGUubG9hZCIsKGZ1bmN0aW9uKCl7ci50cmFuc2Zvcm0udW5tb2RpZmllZCYmci5qdW1wVG8oci5zdHlsZS5zdHlsZXNoZWV0KX0pKSx0aGlzLm9uKCJkYXRhIiwoZnVuY3Rpb24oZSl7ci5fdXBkYXRlKCJzdHlsZSI9PT1lLmRhdGFUeXBlKSxyLmZpcmUobmV3IHQuRXZlbnQoZS5kYXRhVHlwZSsiZGF0YSIsZSkpfSkpLHRoaXMub24oImRhdGFsb2FkaW5nIiwoZnVuY3Rpb24oZSl7ci5maXJlKG5ldyB0LkV2ZW50KGUuZGF0YVR5cGUrImRhdGFsb2FkaW5nIixlKSl9KSl9biYmKGkuX19wcm90b19fPW4pLGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobiYmbi5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWk7dmFyIGE9e3Nob3dUaWxlQm91bmRhcmllczp7Y29uZmlndXJhYmxlOiEwfSxzaG93UGFkZGluZzp7Y29uZmlndXJhYmxlOiEwfSxzaG93Q29sbGlzaW9uQm94ZXM6e2NvbmZpZ3VyYWJsZTohMH0sc2hvd092ZXJkcmF3SW5zcGVjdG9yOntjb25maWd1cmFibGU6ITB9LHJlcGFpbnQ6e2NvbmZpZ3VyYWJsZTohMH0sdmVydGljZXM6e2NvbmZpZ3VyYWJsZTohMH0sdmVyc2lvbjp7Y29uZmlndXJhYmxlOiEwfX07cmV0dXJuIGkucHJvdG90eXBlLl9nZXRNYXBJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXBJZH0saS5wcm90b3R5cGUuYWRkQ29udHJvbD1mdW5jdGlvbihlLHIpe2lmKHZvaWQgMD09PXImJmUuZ2V0RGVmYXVsdFBvc2l0aW9uJiYocj1lLmdldERlZmF1bHRQb3NpdGlvbigpKSx2b2lkIDA9PT1yJiYocj0idG9wLXJpZ2h0IiksIWV8fCFlLm9uQWRkKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnQgdG8gbWFwLmFkZENvbnRyb2woKS4gQXJndW1lbnQgbXVzdCBiZSBhIGNvbnRyb2wgd2l0aCBvbkFkZCBhbmQgb25SZW1vdmUgbWV0aG9kcy4iKSkpO3ZhciBuPWUub25BZGQodGhpcyk7dGhpcy5fY29udHJvbHMucHVzaChlKTt2YXIgaT10aGlzLl9jb250cm9sUG9zaXRpb25zW3JdO3JldHVybi0xIT09ci5pbmRleE9mKCJib3R0b20iKT9pLmluc2VydEJlZm9yZShuLGkuZmlyc3RDaGlsZCk6aS5hcHBlbmRDaGlsZChuKSx0aGlzfSxpLnByb3RvdHlwZS5yZW1vdmVDb250cm9sPWZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5vblJlbW92ZSlyZXR1cm4gdGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50IHRvIG1hcC5yZW1vdmVDb250cm9sKCkuIEFyZ3VtZW50IG11c3QgYmUgYSBjb250cm9sIHdpdGggb25BZGQgYW5kIG9uUmVtb3ZlIG1ldGhvZHMuIikpKTt2YXIgcj10aGlzLl9jb250cm9scy5pbmRleE9mKGUpO3JldHVybiByPi0xJiZ0aGlzLl9jb250cm9scy5zcGxpY2UociwxKSxlLm9uUmVtb3ZlKHRoaXMpLHRoaXN9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbihlKXt2YXIgcj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCksbj1yWzBdLGk9clsxXTt0aGlzLl9yZXNpemVDYW52YXMobixpKSx0aGlzLnRyYW5zZm9ybS5yZXNpemUobixpKSx0aGlzLnBhaW50ZXIucmVzaXplKG4saSk7dmFyIGE9IXRoaXMuX21vdmluZztyZXR1cm4gYSYmKHRoaXMuc3RvcCgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZXN0YXJ0IixlKSkuZmlyZShuZXcgdC5FdmVudCgibW92ZSIsZSkpKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInJlc2l6ZSIsZSkpLGEmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgibW92ZWVuZCIsZSkpLHRoaXN9LGkucHJvdG90eXBlLmdldEJvdW5kcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5nZXRCb3VuZHMoKX0saS5wcm90b3R5cGUuZ2V0TWF4Qm91bmRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLmdldE1heEJvdW5kcygpfSxpLnByb3RvdHlwZS5zZXRNYXhCb3VuZHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnNldE1heEJvdW5kcyh0LkxuZ0xhdEJvdW5kcy5jb252ZXJ0KGUpKSx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUuc2V0TWluWm9vbT1mdW5jdGlvbih0KXtpZigodD1udWxsPT10Py0yOnQpPj0tMiYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4Wm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWluWm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPHQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWluWm9vbSBtdXN0IGJlIGJldHdlZW4gLTIgYW5kIHRoZSBjdXJyZW50IG1heFpvb20sIGluY2x1c2l2ZSIpfSxpLnByb3RvdHlwZS5nZXRNaW5ab29tPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblpvb219LGkucHJvdG90eXBlLnNldE1heFpvb209ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8yMjp0KT49dGhpcy50cmFuc2Zvcm0ubWluWm9vbSlyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbT10LHRoaXMuX3VwZGF0ZSgpLHRoaXMuZ2V0Wm9vbSgpPnQmJnRoaXMuc2V0Wm9vbSh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4Wm9vbSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtaW5ab29tIil9LGkucHJvdG90eXBlLmdldE1heFpvb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4Wm9vbX0saS5wcm90b3R5cGUuc2V0TWluUGl0Y2g9ZnVuY3Rpb24odCl7aWYoKHQ9bnVsbD09dD8wOnQpPDApdGhyb3cgbmV3IEVycm9yKCJtaW5QaXRjaCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAwIik7aWYodD49MCYmdDw9dGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2gpcmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNoPXQsdGhpcy5fdXBkYXRlKCksdGhpcy5nZXRQaXRjaCgpPHQmJnRoaXMuc2V0UGl0Y2godCksdGhpczt0aHJvdyBuZXcgRXJyb3IoIm1pblBpdGNoIG11c3QgYmUgYmV0d2VlbiAwIGFuZCB0aGUgY3VycmVudCBtYXhQaXRjaCwgaW5jbHVzaXZlIil9LGkucHJvdG90eXBlLmdldE1pblBpdGNoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLm1pblBpdGNofSxpLnByb3RvdHlwZS5zZXRNYXhQaXRjaD1mdW5jdGlvbih0KXtpZigodD1udWxsPT10PzYwOnQpPjYwKXRocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gNjAiKTtpZih0Pj10aGlzLnRyYW5zZm9ybS5taW5QaXRjaClyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2g9dCx0aGlzLl91cGRhdGUoKSx0aGlzLmdldFBpdGNoKCk+dCYmdGhpcy5zZXRQaXRjaCh0KSx0aGlzO3Rocm93IG5ldyBFcnJvcigibWF4UGl0Y2ggbXVzdCBiZSBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgbWluUGl0Y2giKX0saS5wcm90b3R5cGUuZ2V0TWF4UGl0Y2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubWF4UGl0Y2h9LGkucHJvdG90eXBlLmdldFJlbmRlcldvcmxkQ29waWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlbmRlcldvcmxkQ29waWVzfSxpLnByb3RvdHlwZS5zZXRSZW5kZXJXb3JsZENvcGllcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXM9dCx0aGlzLl91cGRhdGUoKX0saS5wcm90b3R5cGUucHJvamVjdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cmFuc2Zvcm0ubG9jYXRpb25Qb2ludCh0LkxuZ0xhdC5jb252ZXJ0KGUpKX0saS5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRyYW5zZm9ybS5wb2ludExvY2F0aW9uKHQuUG9pbnQuY29udmVydChlKSl9LGkucHJvdG90eXBlLmlzTW92aW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21vdmluZ3x8dGhpcy5oYW5kbGVycy5pc01vdmluZygpfSxpLnByb3RvdHlwZS5pc1pvb21pbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fem9vbWluZ3x8dGhpcy5oYW5kbGVycy5pc1pvb21pbmcoKX0saS5wcm90b3R5cGUuaXNSb3RhdGluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3RhdGluZ3x8dGhpcy5oYW5kbGVycy5pc1JvdGF0aW5nKCl9LGkucHJvdG90eXBlLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcj1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzO2lmKCJtb3VzZWVudGVyIj09PXR8fCJtb3VzZW92ZXIiPT09dCl7dmFyIGE9ITE7cmV0dXJue2xheWVyOmUsbGlzdGVuZXI6cixkZWxlZ2F0ZXM6e21vdXNlbW92ZTpmdW5jdGlvbihuKXt2YXIgbz1pLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXTtvLmxlbmd0aD9hfHwoYT0hMCxyLmNhbGwoaSxuZXcgUm4odCxpLG4ub3JpZ2luYWxFdmVudCx7ZmVhdHVyZXM6b30pKSk6YT0hMX0sbW91c2VvdXQ6ZnVuY3Rpb24oKXthPSExfX19fWlmKCJtb3VzZWxlYXZlIj09PXR8fCJtb3VzZW91dCI9PT10KXt2YXIgbz0hMTtyZXR1cm57bGF5ZXI6ZSxsaXN0ZW5lcjpyLGRlbGVnYXRlczp7bW91c2Vtb3ZlOmZ1bmN0aW9uKG4peyhpLmdldExheWVyKGUpP2kucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4ucG9pbnQse2xheWVyczpbZV19KTpbXSkubGVuZ3RoP289ITA6byYmKG89ITEsci5jYWxsKGksbmV3IFJuKHQsaSxuLm9yaWdpbmFsRXZlbnQpKSl9LG1vdXNlb3V0OmZ1bmN0aW9uKGUpe28mJihvPSExLHIuY2FsbChpLG5ldyBSbih0LGksZS5vcmlnaW5hbEV2ZW50KSkpfX19fXJldHVybntsYXllcjplLGxpc3RlbmVyOnIsZGVsZWdhdGVzOihuPXt9LG5bdF09ZnVuY3Rpb24odCl7dmFyIG49aS5nZXRMYXllcihlKT9pLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcyh0LnBvaW50LHtsYXllcnM6W2VdfSk6W107bi5sZW5ndGgmJih0LmZlYXR1cmVzPW4sci5jYWxsKGksdCksZGVsZXRlIHQuZmVhdHVyZXMpfSxuKX19LGkucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSxyKXtpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTt2YXIgaT10aGlzLl9jcmVhdGVEZWxlZ2F0ZWRMaXN0ZW5lcih0LGUscik7Zm9yKHZhciBhIGluIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycz10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnN8fHt9LHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XT10aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnNbdF18fFtdLHRoaXMuX2RlbGVnYXRlZExpc3RlbmVyc1t0XS5wdXNoKGkpLGkuZGVsZWdhdGVzKXRoaXMub24oYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlLHIpe2lmKHZvaWQgMD09PXIpcmV0dXJuIG4ucHJvdG90eXBlLm9uY2UuY2FsbCh0aGlzLHQsZSk7dmFyIGk9dGhpcy5fY3JlYXRlRGVsZWdhdGVkTGlzdGVuZXIodCxlLHIpO2Zvcih2YXIgYSBpbiBpLmRlbGVnYXRlcyl0aGlzLm9uY2UoYSxpLmRlbGVnYXRlc1thXSk7cmV0dXJuIHRoaXN9LGkucHJvdG90eXBlLm9mZj1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcztpZih2b2lkIDA9PT1yKXJldHVybiBuLnByb3RvdHlwZS5vZmYuY2FsbCh0aGlzLHQsZSk7cmV0dXJuIHRoaXMuX2RlbGVnYXRlZExpc3RlbmVycyYmdGhpcy5fZGVsZWdhdGVkTGlzdGVuZXJzW3RdJiZmdW5jdGlvbihuKXtmb3IodmFyIGE9blt0XSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107aWYocy5sYXllcj09PWUmJnMubGlzdGVuZXI9PT1yKXtmb3IodmFyIGwgaW4gcy5kZWxlZ2F0ZXMpaS5vZmYobCxzLmRlbGVnYXRlc1tsXSk7cmV0dXJuIGEuc3BsaWNlKG8sMSksaX19fSh0aGlzLl9kZWxlZ2F0ZWRMaXN0ZW5lcnMpLHRoaXN9LGkucHJvdG90eXBlLnF1ZXJ5UmVuZGVyZWRGZWF0dXJlcz1mdW5jdGlvbihlLHIpe2lmKCF0aGlzLnN0eWxlKXJldHVybltdO3ZhciBuO2lmKHZvaWQgMCE9PXJ8fHZvaWQgMD09PWV8fGUgaW5zdGFuY2VvZiB0LlBvaW50fHxBcnJheS5pc0FycmF5KGUpfHwocj1lLGU9dm9pZCAwKSxyPXJ8fHt9LChlPWV8fFtbMCwwXSxbdGhpcy50cmFuc2Zvcm0ud2lkdGgsdGhpcy50cmFuc2Zvcm0uaGVpZ2h0XV0paW5zdGFuY2VvZiB0LlBvaW50fHwibnVtYmVyIj09dHlwZW9mIGVbMF0pbj1bdC5Qb2ludC5jb252ZXJ0KGUpXTtlbHNle3ZhciBpPXQuUG9pbnQuY29udmVydChlWzBdKSxhPXQuUG9pbnQuY29udmVydChlWzFdKTtuPVtpLG5ldyB0LlBvaW50KGEueCxpLnkpLGEsbmV3IHQuUG9pbnQoaS54LGEueSksaV19cmV0dXJuIHRoaXMuc3R5bGUucXVlcnlSZW5kZXJlZEZlYXR1cmVzKG4scix0aGlzLnRyYW5zZm9ybSl9LGkucHJvdG90eXBlLnF1ZXJ5U291cmNlRmVhdHVyZXM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5xdWVyeVNvdXJjZUZlYXR1cmVzKHQsZSl9LGkucHJvdG90eXBlLnNldFN0eWxlPWZ1bmN0aW9uKGUscil7cmV0dXJuITEhPT0ocj10LmV4dGVuZCh7fSx7bG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5OnRoaXMuX2xvY2FsSWRlb2dyYXBoRm9udEZhbWlseX0scikpLmRpZmYmJnIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PT09dGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5JiZ0aGlzLnN0eWxlJiZlPyh0aGlzLl9kaWZmU3R5bGUoZSxyKSx0aGlzKToodGhpcy5fbG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5PXIubG9jYWxJZGVvZ3JhcGhGb250RmFtaWx5LHRoaXMuX3VwZGF0ZVN0eWxlKGUscikpfSxpLnByb3RvdHlwZS5fZ2V0VUlTdHJpbmc9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fbG9jYWxlW3RdO2lmKG51bGw9PWUpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIFVJIHN0cmluZyAnIit0KyInIik7cmV0dXJuIGV9LGkucHJvdG90eXBlLl91cGRhdGVTdHlsZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlJiYodGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KG51bGwpLHRoaXMuc3R5bGUuX3JlbW92ZSgpKSx0Pyh0aGlzLnN0eWxlPW5ldyBxZSh0aGlzLGV8fHt9KSx0aGlzLnN0eWxlLnNldEV2ZW50ZWRQYXJlbnQodGhpcyx7c3R5bGU6dGhpcy5zdHlsZX0pLCJzdHJpbmciPT10eXBlb2YgdD90aGlzLnN0eWxlLmxvYWRVUkwodCk6dGhpcy5zdHlsZS5sb2FkSlNPTih0KSx0aGlzKTooZGVsZXRlIHRoaXMuc3R5bGUsdGhpcyl9LGkucHJvdG90eXBlLl9sYXp5SW5pdEVtcHR5U3R5bGU9ZnVuY3Rpb24oKXt0aGlzLnN0eWxlfHwodGhpcy5zdHlsZT1uZXcgcWUodGhpcyx7fSksdGhpcy5zdHlsZS5zZXRFdmVudGVkUGFyZW50KHRoaXMse3N0eWxlOnRoaXMuc3R5bGV9KSx0aGlzLnN0eWxlLmxvYWRFbXB0eSgpKX0saS5wcm90b3R5cGUuX2RpZmZTdHlsZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXt2YXIgaT10aGlzLl9yZXF1ZXN0TWFuYWdlci5ub3JtYWxpemVTdHlsZVVSTChlKSxhPXRoaXMuX3JlcXVlc3RNYW5hZ2VyLnRyYW5zZm9ybVJlcXVlc3QoaSx0LlJlc291cmNlVHlwZS5TdHlsZSk7dC5nZXRKU09OKGEsKGZ1bmN0aW9uKGUsaSl7ZT9uLmZpcmUobmV3IHQuRXJyb3JFdmVudChlKSk6aSYmbi5fdXBkYXRlRGlmZihpLHIpfSkpfWVsc2Uib2JqZWN0Ij09dHlwZW9mIGUmJnRoaXMuX3VwZGF0ZURpZmYoZSxyKX0saS5wcm90b3R5cGUuX3VwZGF0ZURpZmY9ZnVuY3Rpb24oZSxyKXt0cnl7dGhpcy5zdHlsZS5zZXRTdGF0ZShlKSYmdGhpcy5fdXBkYXRlKCEwKX1jYXRjaChuKXt0Lndhcm5PbmNlKCJVbmFibGUgdG8gcGVyZm9ybSBzdHlsZSBkaWZmOiAiKyhuLm1lc3NhZ2V8fG4uZXJyb3J8fG4pKyIuICBSZWJ1aWxkaW5nIHRoZSBzdHlsZSBmcm9tIHNjcmF0Y2guIiksdGhpcy5fdXBkYXRlU3R5bGUoZSxyKX19LGkucHJvdG90eXBlLmdldFN0eWxlPWZ1bmN0aW9uKCl7aWYodGhpcy5zdHlsZSlyZXR1cm4gdGhpcy5zdHlsZS5zZXJpYWxpemUoKX0saS5wcm90b3R5cGUuaXNTdHlsZUxvYWRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlP3RoaXMuc3R5bGUubG9hZGVkKCk6dC53YXJuT25jZSgiVGhlcmUgaXMgbm8gc3R5bGUgYWRkZWQgdG8gdGhlIG1hcC4iKX0saS5wcm90b3R5cGUuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2xhenlJbml0RW1wdHlTdHlsZSgpLHRoaXMuc3R5bGUuYWRkU291cmNlKHQsZSksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuaXNTb3VyY2VMb2FkZWQ9ZnVuY3Rpb24oZSl7dmFyIHI9dGhpcy5zdHlsZSYmdGhpcy5zdHlsZS5zb3VyY2VDYWNoZXNbZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5sb2FkZWQoKTt0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIlRoZXJlIGlzIG5vIHNvdXJjZSB3aXRoIElEICciK2UrIiciKSkpfSxpLnByb3RvdHlwZS5hcmVUaWxlc0xvYWRlZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuc291cmNlQ2FjaGVzO2Zvcih2YXIgZSBpbiB0KXt2YXIgcj10W2VdLl90aWxlcztmb3IodmFyIG4gaW4gcil7dmFyIGk9cltuXTtpZigibG9hZGVkIiE9PWkuc3RhdGUmJiJlcnJvcmVkIiE9PWkuc3RhdGUpcmV0dXJuITF9fXJldHVybiEwfSxpLnByb3RvdHlwZS5hZGRTb3VyY2VUeXBlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5hZGRTb3VyY2VUeXBlKHQsZSxyKX0saS5wcm90b3R5cGUucmVtb3ZlU291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZVNvdXJjZSh0KSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0U291cmNlKHQpfSxpLnByb3RvdHlwZS5hZGRJbWFnZT1mdW5jdGlvbihlLHIsbil7dm9pZCAwPT09biYmKG49e30pO3ZhciBpPW4ucGl4ZWxSYXRpbzt2b2lkIDA9PT1pJiYoaT0xKTt2YXIgYT1uLnNkZjt2b2lkIDA9PT1hJiYoYT0hMSk7dmFyIG89bi5zdHJldGNoWCxzPW4uc3RyZXRjaFksbD1uLmNvbnRlbnQ7dGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCk7aWYociBpbnN0YW5jZW9mIGtpfHxNaSYmciBpbnN0YW5jZW9mIE1pKXt2YXIgYz10LmJyb3dzZXIuZ2V0SW1hZ2VEYXRhKHIpLHU9Yy53aWR0aCxmPWMuaGVpZ2h0LGg9Yy5kYXRhO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnUsaGVpZ2h0OmZ9LGgpLHBpeGVsUmF0aW86aSxzdHJldGNoWDpvLHN0cmV0Y2hZOnMsY29udGVudDpsLHNkZjphLHZlcnNpb246MH0pfWVsc2V7aWYodm9pZCAwPT09ci53aWR0aHx8dm9pZCAwPT09ci5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbWFwLmFkZEltYWdlKCkuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhbiBgSFRNTEltYWdlRWxlbWVudGAsIGBJbWFnZURhdGFgLCBgSW1hZ2VCaXRtYXBgLCBvciBvYmplY3Qgd2l0aCBgd2lkdGhgLCBgaGVpZ2h0YCwgYW5kIGBkYXRhYCBwcm9wZXJ0aWVzIHdpdGggdGhlIHNhbWUgZm9ybWF0IGFzIGBJbWFnZURhdGFgIikpKTt2YXIgcD1yLndpZHRoLGQ9ci5oZWlnaHQsbT1yLmRhdGEsZz1yO3RoaXMuc3R5bGUuYWRkSW1hZ2UoZSx7ZGF0YTpuZXcgdC5SR0JBSW1hZ2Uoe3dpZHRoOnAsaGVpZ2h0OmR9LG5ldyBVaW50OEFycmF5KG0pKSxwaXhlbFJhdGlvOmksc3RyZXRjaFg6byxzdHJldGNoWTpzLGNvbnRlbnQ6bCxzZGY6YSx2ZXJzaW9uOjAsdXNlckltYWdlOmd9KSxnLm9uQWRkJiZnLm9uQWRkKHRoaXMsZSl9fSxpLnByb3RvdHlwZS51cGRhdGVJbWFnZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMuc3R5bGUuZ2V0SW1hZ2UoZSk7aWYoIW4pcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIG1hcCBoYXMgbm8gaW1hZ2Ugd2l0aCB0aGF0IGlkLiBJZiB5b3UgYXJlIGFkZGluZyBhIG5ldyBpbWFnZSB1c2UgYG1hcC5hZGRJbWFnZSguLi4pYCBpbnN0ZWFkLiIpKSk7dmFyIGk9ciBpbnN0YW5jZW9mIGtpfHxNaSYmciBpbnN0YW5jZW9mIE1pP3QuYnJvd3Nlci5nZXRJbWFnZURhdGEocik6cixhPWkud2lkdGgsbz1pLmhlaWdodCxzPWkuZGF0YTtpZih2b2lkIDA9PT1hfHx2b2lkIDA9PT1vKXJldHVybiB0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIG1hcC51cGRhdGVJbWFnZSgpLiBUaGUgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYW4gYEhUTUxJbWFnZUVsZW1lbnRgLCBgSW1hZ2VEYXRhYCwgYEltYWdlQml0bWFwYCwgb3Igb2JqZWN0IHdpdGggYHdpZHRoYCwgYGhlaWdodGAsIGFuZCBgZGF0YWAgcHJvcGVydGllcyB3aXRoIHRoZSBzYW1lIGZvcm1hdCBhcyBgSW1hZ2VEYXRhYCIpKSk7aWYoYSE9PW4uZGF0YS53aWR0aHx8byE9PW4uZGF0YS5oZWlnaHQpcmV0dXJuIHRoaXMuZmlyZShuZXcgdC5FcnJvckV2ZW50KG5ldyBFcnJvcigiVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YgdGhlIHVwZGF0ZWQgaW1hZ2UgbXVzdCBiZSB0aGF0IHNhbWUgYXMgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGltYWdlIikpKTt2YXIgbD0hKHIgaW5zdGFuY2VvZiBraXx8TWkmJnIgaW5zdGFuY2VvZiBNaSk7bi5kYXRhLnJlcGxhY2UocyxsKSx0aGlzLnN0eWxlLnVwZGF0ZUltYWdlKGUsbil9LGkucHJvdG90eXBlLmhhc0ltYWdlPWZ1bmN0aW9uKGUpe3JldHVybiBlPyEhdGhpcy5zdHlsZS5nZXRJbWFnZShlKToodGhpcy5maXJlKG5ldyB0LkVycm9yRXZlbnQobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVpcmVkIGltYWdlIGlkIikpKSwhMSl9LGkucHJvdG90eXBlLnJlbW92ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUucmVtb3ZlSW1hZ2UodCl9LGkucHJvdG90eXBlLmxvYWRJbWFnZT1mdW5jdGlvbihlLHIpe3QuZ2V0SW1hZ2UodGhpcy5fcmVxdWVzdE1hbmFnZXIudHJhbnNmb3JtUmVxdWVzdChlLHQuUmVzb3VyY2VUeXBlLkltYWdlKSxyKX0saS5wcm90b3R5cGUubGlzdEltYWdlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0eWxlLmxpc3RJbWFnZXMoKX0saS5wcm90b3R5cGUuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5hZGRMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLm1vdmVMYXllcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLm1vdmVMYXllcih0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLnJlbW92ZUxheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUxheWVyKHQpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldExheWVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldExheWVyKHQpfSxpLnByb3RvdHlwZS5zZXRMYXllclpvb21SYW5nZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuc3R5bGUuc2V0TGF5ZXJab29tUmFuZ2UodCxlLHIpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLnNldEZpbHRlcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHZvaWQgMD09PXImJihyPXt9KSx0aGlzLnN0eWxlLnNldEZpbHRlcih0LGUsciksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0RmlsdGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnN0eWxlLmdldEZpbHRlcih0KX0saS5wcm90b3R5cGUuc2V0UGFpbnRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0UGFpbnRQcm9wZXJ0eSh0LGUscixuKSx0aGlzLl91cGRhdGUoITApfSxpLnByb3RvdHlwZS5nZXRQYWludFByb3BlcnR5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0UGFpbnRQcm9wZXJ0eSh0LGUpfSxpLnByb3RvdHlwZS5zZXRMYXlvdXRQcm9wZXJ0eT1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdm9pZCAwPT09biYmKG49e30pLHRoaXMuc3R5bGUuc2V0TGF5b3V0UHJvcGVydHkodCxlLHIsbiksdGhpcy5fdXBkYXRlKCEwKX0saS5wcm90b3R5cGUuZ2V0TGF5b3V0UHJvcGVydHk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zdHlsZS5nZXRMYXlvdXRQcm9wZXJ0eSh0LGUpfSxpLnByb3RvdHlwZS5zZXRMaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT17fSksdGhpcy5fbGF6eUluaXRFbXB0eVN0eWxlKCksdGhpcy5zdHlsZS5zZXRMaWdodCh0LGUpLHRoaXMuX3VwZGF0ZSghMCl9LGkucHJvdG90eXBlLmdldExpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0TGlnaHQoKX0saS5wcm90b3R5cGUuc2V0RmVhdHVyZVN0YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuc3R5bGUuc2V0RmVhdHVyZVN0YXRlKHQsZSksdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLnJlbW92ZUZlYXR1cmVTdGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnN0eWxlLnJlbW92ZUZlYXR1cmVTdGF0ZSh0LGUpLHRoaXMuX3VwZGF0ZSgpfSxpLnByb3RvdHlwZS5nZXRGZWF0dXJlU3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGUuZ2V0RmVhdHVyZVN0YXRlKHQpfSxpLnByb3RvdHlwZS5nZXRDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfSxpLnByb3RvdHlwZS5nZXRDYW52YXNDb250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzQ29udGFpbmVyfSxpLnByb3RvdHlwZS5nZXRDYW52YXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FudmFzfSxpLnByb3RvdHlwZS5fY29udGFpbmVyRGltZW5zaW9ucz1mdW5jdGlvbigpe3ZhciB0PTAsZT0wO3JldHVybiB0aGlzLl9jb250YWluZXImJih0PXRoaXMuX2NvbnRhaW5lci5jbGllbnRXaWR0aHx8NDAwLGU9dGhpcy5fY29udGFpbmVyLmNsaWVudEhlaWdodHx8MzAwKSxbdCxlXX0saS5wcm90b3R5cGUuX2RldGVjdE1pc3NpbmdDU1M9ZnVuY3Rpb24oKXsicmdiKDI1MCwgMTI4LCAxMTQpIiE9PXQud2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSkuZ2V0UHJvcGVydHlWYWx1ZSgiYmFja2dyb3VuZC1jb2xvciIpJiZ0Lndhcm5PbmNlKCJUaGlzIHBhZ2UgYXBwZWFycyB0byBiZSBtaXNzaW5nIENTUyBkZWNsYXJhdGlvbnMgZm9yIE1hcGJveCBHTCBKUywgd2hpY2ggbWF5IGNhdXNlIHRoZSBtYXAgdG8gZGlzcGxheSBpbmNvcnJlY3RseS4gUGxlYXNlIGVuc3VyZSB5b3VyIHBhZ2UgaW5jbHVkZXMgbWFwYm94LWdsLmNzcywgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vd3d3Lm1hcGJveC5jb20vbWFwYm94LWdsLWpzL2FwaS8uIil9LGkucHJvdG90eXBlLl9zZXR1cENvbnRhaW5lcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NvbnRhaW5lcjt0LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcCIpLCh0aGlzLl9taXNzaW5nQ1NTQ2FuYXJ5PXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jYW5hcnkiLHQpKS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iLHRoaXMuX2RldGVjdE1pc3NpbmdDU1MoKTt2YXIgZT10aGlzLl9jYW52YXNDb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWNhbnZhcy1jb250YWluZXIiLHQpO3RoaXMuX2ludGVyYWN0aXZlJiZlLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWludGVyYWN0aXZlIiksdGhpcy5fY2FudmFzPXIuY3JlYXRlKCJjYW52YXMiLCJtYXBib3hnbC1jYW52YXMiLGUpLHRoaXMuX2NhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0Iix0aGlzLl9jb250ZXh0TG9zdCwhMSksdGhpcy5fY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIix0aGlzLl9jb250ZXh0UmVzdG9yZWQsITEpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2NhbnZhcy5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJNYXAiKTt2YXIgbj10aGlzLl9jb250YWluZXJEaW1lbnNpb25zKCk7dGhpcy5fcmVzaXplQ2FudmFzKG5bMF0sblsxXSk7dmFyIGk9dGhpcy5fY29udHJvbENvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY29udHJvbC1jb250YWluZXIiLHQpLGE9dGhpcy5fY29udHJvbFBvc2l0aW9ucz17fTtbInRvcC1sZWZ0IiwidG9wLXJpZ2h0IiwiYm90dG9tLWxlZnQiLCJib3R0b20tcmlnaHQiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthW3RdPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1jdHJsLSIrdCxpKX0pKX0saS5wcm90b3R5cGUuX3Jlc2l6ZUNhbnZhcz1mdW5jdGlvbihlLHIpe3ZhciBuPXQuYnJvd3Nlci5kZXZpY2VQaXhlbFJhdGlvfHwxO3RoaXMuX2NhbnZhcy53aWR0aD1uKmUsdGhpcy5fY2FudmFzLmhlaWdodD1uKnIsdGhpcy5fY2FudmFzLnN0eWxlLndpZHRoPWUrInB4Iix0aGlzLl9jYW52YXMuc3R5bGUuaGVpZ2h0PXIrInB4In0saS5wcm90b3R5cGUuX3NldHVwUGFpbnRlcj1mdW5jdGlvbigpe3ZhciByPXQuZXh0ZW5kKHt9LGUud2ViR0xDb250ZXh0QXR0cmlidXRlcyx7ZmFpbElmTWFqb3JQZXJmb3JtYW5jZUNhdmVhdDp0aGlzLl9mYWlsSWZNYWpvclBlcmZvcm1hbmNlQ2F2ZWF0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjp0aGlzLl9wcmVzZXJ2ZURyYXdpbmdCdWZmZXIsYW50aWFsaWFzOnRoaXMuX2FudGlhbGlhc3x8ITF9KSxuPXRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJ3ZWJnbCIscil8fHRoaXMuX2NhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiLHIpO24/KHRoaXMucGFpbnRlcj1uZXcgX24obix0aGlzLnRyYW5zZm9ybSksdC53ZWJwU3VwcG9ydGVkLnRlc3RTdXBwb3J0KG4pKTp0aGlzLmZpcmUobmV3IHQuRXJyb3JFdmVudChuZXcgRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIFdlYkdMIikpKX0saS5wcm90b3R5cGUuX2NvbnRleHRMb3N0PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9mcmFtZSYmKHRoaXMuX2ZyYW1lLmNhbmNlbCgpLHRoaXMuX2ZyYW1lPW51bGwpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0bG9zdCIse29yaWdpbmFsRXZlbnQ6ZX0pKX0saS5wcm90b3R5cGUuX2NvbnRleHRSZXN0b3JlZD1mdW5jdGlvbihlKXt0aGlzLl9zZXR1cFBhaW50ZXIoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgid2ViZ2xjb250ZXh0cmVzdG9yZWQiLHtvcmlnaW5hbEV2ZW50OmV9KSl9LGkucHJvdG90eXBlLmxvYWRlZD1mdW5jdGlvbigpe3JldHVybiF0aGlzLl9zdHlsZURpcnR5JiYhdGhpcy5fc291cmNlc0RpcnR5JiYhIXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUubG9hZGVkKCl9LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3R5bGU/KHRoaXMuX3N0eWxlRGlydHk9dGhpcy5fc3R5bGVEaXJ0eXx8dCx0aGlzLl9zb3VyY2VzRGlydHk9ITAsdGhpcy50cmlnZ2VyUmVwYWludCgpLHRoaXMpOnRoaXN9LGkucHJvdG90eXBlLl9yZXF1ZXN0UmVuZGVyRnJhbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3VwZGF0ZSgpLHRoaXMuX3JlbmRlclRhc2tRdWV1ZS5hZGQodCl9LGkucHJvdG90eXBlLl9jYW5jZWxSZW5kZXJGcmFtZT1mdW5jdGlvbih0KXt0aGlzLl9yZW5kZXJUYXNrUXVldWUucmVtb3ZlKHQpfSxpLnByb3RvdHlwZS5fcmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciByLG49dGhpcyxpPTAsYT10aGlzLnBhaW50ZXIuY29udGV4dC5leHRUaW1lclF1ZXJ5O2lmKHRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1mcmFtZSIpJiYocj1hLmNyZWF0ZVF1ZXJ5RVhUKCksYS5iZWdpblF1ZXJ5RVhUKGEuVElNRV9FTEFQU0VEX0VYVCxyKSxpPXQuYnJvd3Nlci5ub3coKSksdGhpcy5wYWludGVyLmNvbnRleHQuc2V0RGlydHkoKSx0aGlzLnBhaW50ZXIuc2V0QmFzZVN0YXRlKCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLnJ1bihlKSwhdGhpcy5fcmVtb3ZlZCl7dmFyIG89ITE7aWYodGhpcy5zdHlsZSYmdGhpcy5fc3R5bGVEaXJ0eSl7dGhpcy5fc3R5bGVEaXJ0eT0hMTt2YXIgcz10aGlzLnRyYW5zZm9ybS56b29tLGw9dC5icm93c2VyLm5vdygpO3RoaXMuc3R5bGUuem9vbUhpc3RvcnkudXBkYXRlKHMsbCk7dmFyIGM9bmV3IHQuRXZhbHVhdGlvblBhcmFtZXRlcnMocyx7bm93OmwsZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbix6b29tSGlzdG9yeTp0aGlzLnN0eWxlLnpvb21IaXN0b3J5LHRyYW5zaXRpb246dGhpcy5zdHlsZS5nZXRUcmFuc2l0aW9uKCl9KSx1PWMuY3Jvc3NGYWRpbmdGYWN0b3IoKTsxPT09dSYmdT09PXRoaXMuX2Nyb3NzRmFkaW5nRmFjdG9yfHwobz0hMCx0aGlzLl9jcm9zc0ZhZGluZ0ZhY3Rvcj11KSx0aGlzLnN0eWxlLnVwZGF0ZShjKX1pZih0aGlzLnN0eWxlJiZ0aGlzLl9zb3VyY2VzRGlydHkmJih0aGlzLl9zb3VyY2VzRGlydHk9ITEsdGhpcy5zdHlsZS5fdXBkYXRlU291cmNlcyh0aGlzLnRyYW5zZm9ybSkpLHRoaXMuX3BsYWNlbWVudERpcnR5PXRoaXMuc3R5bGUmJnRoaXMuc3R5bGUuX3VwZGF0ZVBsYWNlbWVudCh0aGlzLnBhaW50ZXIudHJhbnNmb3JtLHRoaXMuc2hvd0NvbGxpc2lvbkJveGVzLHRoaXMuX2ZhZGVEdXJhdGlvbix0aGlzLl9jcm9zc1NvdXJjZUNvbGxpc2lvbnMpLHRoaXMucGFpbnRlci5yZW5kZXIodGhpcy5zdHlsZSx7c2hvd1RpbGVCb3VuZGFyaWVzOnRoaXMuc2hvd1RpbGVCb3VuZGFyaWVzLHNob3dPdmVyZHJhd0luc3BlY3Rvcjp0aGlzLl9zaG93T3ZlcmRyYXdJbnNwZWN0b3Iscm90YXRpbmc6dGhpcy5pc1JvdGF0aW5nKCksem9vbWluZzp0aGlzLmlzWm9vbWluZygpLG1vdmluZzp0aGlzLmlzTW92aW5nKCksZmFkZUR1cmF0aW9uOnRoaXMuX2ZhZGVEdXJhdGlvbixzaG93UGFkZGluZzp0aGlzLnNob3dQYWRkaW5nLGdwdVRpbWluZzohIXRoaXMubGlzdGVucygiZ3B1LXRpbWluZy1sYXllciIpfSksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW5kZXIiKSksdGhpcy5sb2FkZWQoKSYmIXRoaXMuX2xvYWRlZCYmKHRoaXMuX2xvYWRlZD0hMCx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImxvYWQiKSkpLHRoaXMuc3R5bGUmJih0aGlzLnN0eWxlLmhhc1RyYW5zaXRpb25zKCl8fG8pJiYodGhpcy5fc3R5bGVEaXJ0eT0hMCksdGhpcy5zdHlsZSYmIXRoaXMuX3BsYWNlbWVudERpcnR5JiZ0aGlzLnN0eWxlLl9yZWxlYXNlU3ltYm9sRmFkZVRpbGVzKCksdGhpcy5saXN0ZW5zKCJncHUtdGltaW5nLWZyYW1lIikpe3ZhciBmPXQuYnJvd3Nlci5ub3coKS1pO2EuZW5kUXVlcnlFWFQoYS5USU1FX0VMQVBTRURfRVhULHIpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9YS5nZXRRdWVyeU9iamVjdEVYVChyLGEuUVVFUllfUkVTVUxUX0VYVCkvMWU2O2EuZGVsZXRlUXVlcnlFWFQociksbi5maXJlKG5ldyB0LkV2ZW50KCJncHUtdGltaW5nLWZyYW1lIix7Y3B1VGltZTpmLGdwdVRpbWU6ZX0pKX0pLDUwKX1pZih0aGlzLmxpc3RlbnMoImdwdS10aW1pbmctbGF5ZXIiKSl7dmFyIGg9dGhpcy5wYWludGVyLmNvbGxlY3RHcHVUaW1lcnMoKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBlPW4ucGFpbnRlci5xdWVyeUdwdVRpbWVycyhoKTtuLmZpcmUobmV3IHQuRXZlbnQoImdwdS10aW1pbmctbGF5ZXIiLHtsYXllclRpbWVzOmV9KSl9KSw1MCl9cmV0dXJuIHRoaXMuX3NvdXJjZXNEaXJ0eXx8dGhpcy5fc3R5bGVEaXJ0eXx8dGhpcy5fcGxhY2VtZW50RGlydHl8fHRoaXMuX3JlcGFpbnQ/dGhpcy50cmlnZ2VyUmVwYWludCgpOiF0aGlzLmlzTW92aW5nKCkmJnRoaXMubG9hZGVkKCkmJih0aGlzLl9mdWxseUxvYWRlZHx8KHRoaXMuX2Z1bGx5TG9hZGVkPSEwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImlkbGUiKSkpLHRoaXN9fSxpLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9oYXNoJiZ0aGlzLl9oYXNoLnJlbW92ZSgpO2Zvcih2YXIgZT0wLHI9dGhpcy5fY29udHJvbHM7ZTxyLmxlbmd0aDtlKz0xKXtyW2VdLm9uUmVtb3ZlKHRoaXMpfXRoaXMuX2NvbnRyb2xzPVtdLHRoaXMuX2ZyYW1lJiYodGhpcy5fZnJhbWUuY2FuY2VsKCksdGhpcy5fZnJhbWU9bnVsbCksdGhpcy5fcmVuZGVyVGFza1F1ZXVlLmNsZWFyKCksdGhpcy5wYWludGVyLmRlc3Ryb3koKSx0aGlzLmhhbmRsZXJzLmRlc3Ryb3koKSxkZWxldGUgdGhpcy5oYW5kbGVycyx0aGlzLnNldFN0eWxlKG51bGwpLHZvaWQgMCE9PXQud2luZG93JiYodC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9vbldpbmRvd1Jlc2l6ZSwhMSksdC53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigib25saW5lIix0aGlzLl9vbldpbmRvd09ubGluZSwhMSkpO3ZhciBuPXRoaXMucGFpbnRlci5jb250ZXh0LmdsLmdldEV4dGVuc2lvbigiV0VCR0xfbG9zZV9jb250ZXh0Iik7biYmbi5sb3NlQ29udGV4dCgpLExpKHRoaXMuX2NhbnZhc0NvbnRhaW5lciksTGkodGhpcy5fY29udHJvbENvbnRhaW5lciksTGkodGhpcy5fbWlzc2luZ0NTU0NhbmFyeSksdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLW1hcCIpLHRoaXMuX3JlbW92ZWQ9ITAsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJyZW1vdmUiKSl9LGkucHJvdG90eXBlLnRyaWdnZXJSZXBhaW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnN0eWxlJiYhdGhpcy5fZnJhbWUmJih0aGlzLl9mcmFtZT10LmJyb3dzZXIuZnJhbWUoKGZ1bmN0aW9uKHQpe2UuX2ZyYW1lPW51bGwsZS5fcmVuZGVyKHQpfSkpKX0saS5wcm90b3R5cGUuX29uV2luZG93T25saW5lPWZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLl9vbldpbmRvd1Jlc2l6ZT1mdW5jdGlvbih0KXt0aGlzLl90cmFja1Jlc2l6ZSYmdGhpcy5yZXNpemUoe29yaWdpbmFsRXZlbnQ6dH0pLl91cGRhdGUoKX0sYS5zaG93VGlsZUJvdW5kYXJpZXMuZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXN9LGEuc2hvd1RpbGVCb3VuZGFyaWVzLnNldD1mdW5jdGlvbih0KXt0aGlzLl9zaG93VGlsZUJvdW5kYXJpZXMhPT10JiYodGhpcy5fc2hvd1RpbGVCb3VuZGFyaWVzPXQsdGhpcy5fdXBkYXRlKCkpfSxhLnNob3dQYWRkaW5nLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd1BhZGRpbmd9LGEuc2hvd1BhZGRpbmcuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dQYWRkaW5nIT09dCYmKHRoaXMuX3Nob3dQYWRkaW5nPXQsdGhpcy5fdXBkYXRlKCkpfSxhLnNob3dDb2xsaXNpb25Cb3hlcy5nZXQ9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuX3Nob3dDb2xsaXNpb25Cb3hlc30sYS5zaG93Q29sbGlzaW9uQm94ZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3Nob3dDb2xsaXNpb25Cb3hlcyE9PXQmJih0aGlzLl9zaG93Q29sbGlzaW9uQm94ZXM9dCx0P3RoaXMuc3R5bGUuX2dlbmVyYXRlQ29sbGlzaW9uQm94ZXMoKTp0aGlzLl91cGRhdGUoKSl9LGEuc2hvd092ZXJkcmF3SW5zcGVjdG9yLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yfSxhLnNob3dPdmVyZHJhd0luc3BlY3Rvci5zZXQ9ZnVuY3Rpb24odCl7dGhpcy5fc2hvd092ZXJkcmF3SW5zcGVjdG9yIT09dCYmKHRoaXMuX3Nob3dPdmVyZHJhd0luc3BlY3Rvcj10LHRoaXMuX3VwZGF0ZSgpKX0sYS5yZXBhaW50LmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fcmVwYWludH0sYS5yZXBhaW50LnNldD1mdW5jdGlvbih0KXt0aGlzLl9yZXBhaW50IT09dCYmKHRoaXMuX3JlcGFpbnQ9dCx0aGlzLnRyaWdnZXJSZXBhaW50KCkpfSxhLnZlcnRpY2VzLmdldD1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5fdmVydGljZXN9LGEudmVydGljZXMuc2V0PWZ1bmN0aW9uKHQpe3RoaXMuX3ZlcnRpY2VzPXQsdGhpcy5fdXBkYXRlKCl9LGkucHJvdG90eXBlLl9zZXRDYWNoZUxpbWl0cz1mdW5jdGlvbihlLHIpe3Quc2V0Q2FjaGVMaW1pdHMoZSxyKX0sYS52ZXJzaW9uLmdldD1mdW5jdGlvbigpe3JldHVybiB0LnZlcnNpb259LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGkucHJvdG90eXBlLGEpLGl9KHhpKTtmdW5jdGlvbiBMaSh0KXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KX12YXIgQ2k9e3Nob3dDb21wYXNzOiEwLHNob3dab29tOiEwLHZpc3VhbGl6ZVBpdGNoOiExfSxQaT1mdW5jdGlvbihlKXt2YXIgbj10aGlzO3RoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxDaSxlKSx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLHRoaXMuX2NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnByZXZlbnREZWZhdWx0KCl9KSksdGhpcy5vcHRpb25zLnNob3dab29tJiYodC5iaW5kQWxsKFsiX3NldEJ1dHRvblRpdGxlIiwiX3VwZGF0ZVpvb21CdXR0b25zIl0sdGhpcyksdGhpcy5fem9vbUluQnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC16b29tLWluIiwoZnVuY3Rpb24odCl7cmV0dXJuIG4uX21hcC56b29tSW4oe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl96b29tSW5CdXR0b24pLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSx0aGlzLl96b29tT3V0QnV0dG9uPXRoaXMuX2NyZWF0ZUJ1dHRvbigibWFwYm94Z2wtY3RybC16b29tLW91dCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9tYXAuem9vbU91dCh7fSx7b3JpZ2luYWxFdmVudDp0fSl9KSksci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX3pvb21PdXRCdXR0b24pLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCEwKSksdGhpcy5vcHRpb25zLnNob3dDb21wYXNzJiYodC5iaW5kQWxsKFsiX3JvdGF0ZUNvbXBhc3NBcnJvdyJdLHRoaXMpLHRoaXMuX2NvbXBhc3M9dGhpcy5fY3JlYXRlQnV0dG9uKCJtYXBib3hnbC1jdHJsLWNvbXBhc3MiLChmdW5jdGlvbih0KXtuLm9wdGlvbnMudmlzdWFsaXplUGl0Y2g/bi5fbWFwLnJlc2V0Tm9ydGhQaXRjaCh7fSx7b3JpZ2luYWxFdmVudDp0fSk6bi5fbWFwLnJlc2V0Tm9ydGgoe30se29yaWdpbmFsRXZlbnQ6dH0pfSkpLHRoaXMuX2NvbXBhc3NJY29uPXIuY3JlYXRlKCJzcGFuIiwibWFwYm94Z2wtY3RybC1pY29uIix0aGlzLl9jb21wYXNzKSx0aGlzLl9jb21wYXNzSWNvbi5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwhMCkpfTtQaS5wcm90b3R5cGUuX3VwZGF0ZVpvb21CdXR0b25zPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fbWFwLmdldFpvb20oKTt0aGlzLl96b29tSW5CdXR0b24uZGlzYWJsZWQ9dD09PXRoaXMuX21hcC5nZXRNYXhab29tKCksdGhpcy5fem9vbU91dEJ1dHRvbi5kaXNhYmxlZD10PT09dGhpcy5fbWFwLmdldE1pblpvb20oKX0sUGkucHJvdG90eXBlLl9yb3RhdGVDb21wYXNzQXJyb3c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2g/InNjYWxlKCIrMS9NYXRoLnBvdyhNYXRoLmNvcyh0aGlzLl9tYXAudHJhbnNmb3JtLnBpdGNoKihNYXRoLlBJLzE4MCkpLC41KSsiKSByb3RhdGVYKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5waXRjaCsiZGVnKSByb3RhdGVaKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjoicm90YXRlKCIrdGhpcy5fbWFwLnRyYW5zZm9ybS5hbmdsZSooMTgwL01hdGguUEkpKyJkZWcpIjt0aGlzLl9jb21wYXNzSWNvbi5zdHlsZS50cmFuc2Zvcm09dH0sUGkucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tYXA9dCx0aGlzLm9wdGlvbnMuc2hvd1pvb20mJih0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl96b29tSW5CdXR0b24sIlpvb21JbiIpLHRoaXMuX3NldEJ1dHRvblRpdGxlKHRoaXMuX3pvb21PdXRCdXR0b24sIlpvb21PdXQiKSx0aGlzLl9tYXAub24oInpvb20iLHRoaXMuX3VwZGF0ZVpvb21CdXR0b25zKSx0aGlzLl91cGRhdGVab29tQnV0dG9ucygpKSx0aGlzLm9wdGlvbnMuc2hvd0NvbXBhc3MmJih0aGlzLl9zZXRCdXR0b25UaXRsZSh0aGlzLl9jb21wYXNzLCJSZXNldEJlYXJpbmciKSx0aGlzLm9wdGlvbnMudmlzdWFsaXplUGl0Y2gmJnRoaXMuX21hcC5vbigicGl0Y2giLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fbWFwLm9uKCJyb3RhdGUiLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fcm90YXRlQ29tcGFzc0Fycm93KCksdGhpcy5faGFuZGxlcj1uZXcgSWkodGhpcy5fbWFwLHRoaXMuX2NvbXBhc3MsdGhpcy5vcHRpb25zLnZpc3VhbGl6ZVBpdGNoKSksdGhpcy5fY29udGFpbmVyfSxQaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMub3B0aW9ucy5zaG93Wm9vbSYmdGhpcy5fbWFwLm9mZigiem9vbSIsdGhpcy5fdXBkYXRlWm9vbUJ1dHRvbnMpLHRoaXMub3B0aW9ucy5zaG93Q29tcGFzcyYmKHRoaXMub3B0aW9ucy52aXN1YWxpemVQaXRjaCYmdGhpcy5fbWFwLm9mZigicGl0Y2giLHRoaXMuX3JvdGF0ZUNvbXBhc3NBcnJvdyksdGhpcy5fbWFwLm9mZigicm90YXRlIix0aGlzLl9yb3RhdGVDb21wYXNzQXJyb3cpLHRoaXMuX2hhbmRsZXIub2ZmKCksZGVsZXRlIHRoaXMuX2hhbmRsZXIpLGRlbGV0ZSB0aGlzLl9tYXB9LFBpLnByb3RvdHlwZS5fY3JlYXRlQnV0dG9uPWZ1bmN0aW9uKHQsZSl7dmFyIG49ci5jcmVhdGUoImJ1dHRvbiIsdCx0aGlzLl9jb250YWluZXIpO3JldHVybiBuLnR5cGU9ImJ1dHRvbiIsbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZSksbn0sUGkucHJvdG90eXBlLl9zZXRCdXR0b25UaXRsZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIk5hdmlnYXRpb25Db250cm9sLiIrZSk7dC50aXRsZT1yLHQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixyKX07dmFyIElpPWZ1bmN0aW9uKGUsbixpKXt2b2lkIDA9PT1pJiYoaT0hMSksdGhpcy5fY2xpY2tUb2xlcmFuY2U9MTAsdGhpcy5lbGVtZW50PW4sdGhpcy5tb3VzZVJvdGF0ZT1uZXcgWG4oe2NsaWNrVG9sZXJhbmNlOmUuZHJhZ1JvdGF0ZS5fbW91c2VSb3RhdGUuX2NsaWNrVG9sZXJhbmNlfSksdGhpcy5tYXA9ZSxpJiYodGhpcy5tb3VzZVBpdGNoPW5ldyBabih7Y2xpY2tUb2xlcmFuY2U6ZS5kcmFnUm90YXRlLl9tb3VzZVBpdGNoLl9jbGlja1RvbGVyYW5jZX0pKSx0LmJpbmRBbGwoWyJtb3VzZWRvd24iLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwicmVzZXQiXSx0aGlzKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwibW91c2Vkb3duIix0aGlzLm1vdXNlZG93biksci5hZGRFdmVudExpc3RlbmVyKG4sInRvdWNoc3RhcnQiLHRoaXMudG91Y2hzdGFydCx7cGFzc2l2ZTohMX0pLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaG1vdmUiLHRoaXMudG91Y2htb3ZlKSxyLmFkZEV2ZW50TGlzdGVuZXIobiwidG91Y2hlbmQiLHRoaXMudG91Y2hlbmQpLHIuYWRkRXZlbnRMaXN0ZW5lcihuLCJ0b3VjaGNhbmNlbCIsdGhpcy5yZXNldCl9O2Z1bmN0aW9uIE9pKGUscixuKXtpZihlPW5ldyB0LkxuZ0xhdChlLmxuZyxlLmxhdCkscil7dmFyIGk9bmV3IHQuTG5nTGF0KGUubG5nLTM2MCxlLmxhdCksYT1uZXcgdC5MbmdMYXQoZS5sbmcrMzYwLGUubGF0KSxvPW4ubG9jYXRpb25Qb2ludChlKS5kaXN0U3FyKHIpO24ubG9jYXRpb25Qb2ludChpKS5kaXN0U3FyKHIpPG8/ZT1pOm4ubG9jYXRpb25Qb2ludChhKS5kaXN0U3FyKHIpPG8mJihlPWEpfWZvcig7TWF0aC5hYnMoZS5sbmctbi5jZW50ZXIubG5nKT4xODA7KXt2YXIgcz1uLmxvY2F0aW9uUG9pbnQoZSk7aWYocy54Pj0wJiZzLnk+PTAmJnMueDw9bi53aWR0aCYmcy55PD1uLmhlaWdodClicmVhaztlLmxuZz5uLmNlbnRlci5sbmc/ZS5sbmctPTM2MDplLmxuZys9MzYwfXJldHVybiBlfUlpLnByb3RvdHlwZS5kb3duPWZ1bmN0aW9uKHQsZSl7dGhpcy5tb3VzZVJvdGF0ZS5tb3VzZWRvd24odCxlKSx0aGlzLm1vdXNlUGl0Y2gmJnRoaXMubW91c2VQaXRjaC5tb3VzZWRvd24odCxlKSxyLmRpc2FibGVEcmFnKCl9LElpLnByb3RvdHlwZS5tb3ZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5tYXAsbj10aGlzLm1vdXNlUm90YXRlLm1vdXNlbW92ZVdpbmRvdyh0LGUpO2lmKG4mJm4uYmVhcmluZ0RlbHRhJiZyLnNldEJlYXJpbmcoci5nZXRCZWFyaW5nKCkrbi5iZWFyaW5nRGVsdGEpLHRoaXMubW91c2VQaXRjaCl7dmFyIGk9dGhpcy5tb3VzZVBpdGNoLm1vdXNlbW92ZVdpbmRvdyh0LGUpO2kmJmkucGl0Y2hEZWx0YSYmci5zZXRQaXRjaChyLmdldFBpdGNoKCkraS5waXRjaERlbHRhKX19LElpLnByb3RvdHlwZS5vZmY9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQ7ci5yZW1vdmVFdmVudExpc3RlbmVyKHQsIm1vdXNlZG93biIsdGhpcy5tb3VzZWRvd24pLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LCJ0b3VjaHN0YXJ0Iix0aGlzLnRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2htb3ZlIix0aGlzLnRvdWNobW92ZSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQsInRvdWNoZW5kIix0aGlzLnRvdWNoZW5kKSxyLnJlbW92ZUV2ZW50TGlzdGVuZXIodCwidG91Y2hjYW5jZWwiLHRoaXMucmVzZXQpLHRoaXMub2ZmVGVtcCgpfSxJaS5wcm90b3R5cGUub2ZmVGVtcD1mdW5jdGlvbigpe3IuZW5hYmxlRHJhZygpLHIucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LndpbmRvdywibW91c2Vtb3ZlIix0aGlzLm1vdXNlbW92ZSksci5yZW1vdmVFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZXVwIix0aGlzLm1vdXNldXApfSxJaS5wcm90b3R5cGUubW91c2Vkb3duPWZ1bmN0aW9uKGUpe3RoaXMuZG93bih0LmV4dGVuZCh7fSxlLHtjdHJsS2V5OiEwLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIGUucHJldmVudERlZmF1bHQoKX19KSxyLm1vdXNlUG9zKHRoaXMuZWxlbWVudCxlKSksci5hZGRFdmVudExpc3RlbmVyKHQud2luZG93LCJtb3VzZW1vdmUiLHRoaXMubW91c2Vtb3ZlKSxyLmFkZEV2ZW50TGlzdGVuZXIodC53aW5kb3csIm1vdXNldXAiLHRoaXMubW91c2V1cCl9LElpLnByb3RvdHlwZS5tb3VzZW1vdmU9ZnVuY3Rpb24odCl7dGhpcy5tb3ZlKHQsci5tb3VzZVBvcyh0aGlzLmVsZW1lbnQsdCkpfSxJaS5wcm90b3R5cGUubW91c2V1cD1mdW5jdGlvbih0KXt0aGlzLm1vdXNlUm90YXRlLm1vdXNldXBXaW5kb3codCksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gubW91c2V1cFdpbmRvdyh0KSx0aGlzLm9mZlRlbXAoKX0sSWkucHJvdG90eXBlLnRvdWNoc3RhcnQ9ZnVuY3Rpb24odCl7MSE9PXQudGFyZ2V0VG91Y2hlcy5sZW5ndGg/dGhpcy5yZXNldCgpOih0aGlzLl9zdGFydFBvcz10aGlzLl9sYXN0UG9zPXIudG91Y2hQb3ModGhpcy5lbGVtZW50LHQudGFyZ2V0VG91Y2hlcylbMF0sdGhpcy5kb3duKHt0eXBlOiJtb3VzZWRvd24iLGJ1dHRvbjowLGN0cmxLZXk6ITAscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfX0sdGhpcy5fc3RhcnRQb3MpKX0sSWkucHJvdG90eXBlLnRvdWNobW92ZT1mdW5jdGlvbih0KXsxIT09dC50YXJnZXRUb3VjaGVzLmxlbmd0aD90aGlzLnJlc2V0KCk6KHRoaXMuX2xhc3RQb3M9ci50b3VjaFBvcyh0aGlzLmVsZW1lbnQsdC50YXJnZXRUb3VjaGVzKVswXSx0aGlzLm1vdmUoe3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuIHQucHJldmVudERlZmF1bHQoKX19LHRoaXMuX2xhc3RQb3MpKX0sSWkucHJvdG90eXBlLnRvdWNoZW5kPWZ1bmN0aW9uKHQpezA9PT10LnRhcmdldFRvdWNoZXMubGVuZ3RoJiZ0aGlzLl9zdGFydFBvcyYmdGhpcy5fbGFzdFBvcyYmdGhpcy5fc3RhcnRQb3MuZGlzdCh0aGlzLl9sYXN0UG9zKTx0aGlzLl9jbGlja1RvbGVyYW5jZSYmdGhpcy5lbGVtZW50LmNsaWNrKCksdGhpcy5yZXNldCgpfSxJaS5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXt0aGlzLm1vdXNlUm90YXRlLnJlc2V0KCksdGhpcy5tb3VzZVBpdGNoJiZ0aGlzLm1vdXNlUGl0Y2gucmVzZXQoKSxkZWxldGUgdGhpcy5fc3RhcnRQb3MsZGVsZXRlIHRoaXMuX2xhc3RQb3MsdGhpcy5vZmZUZW1wKCl9O3ZhciB6aT17Y2VudGVyOiJ0cmFuc2xhdGUoLTUwJSwtNTAlKSIsdG9wOiJ0cmFuc2xhdGUoLTUwJSwwKSIsInRvcC1sZWZ0IjoidHJhbnNsYXRlKDAsMCkiLCJ0b3AtcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsMCkiLGJvdHRvbToidHJhbnNsYXRlKC01MCUsLTEwMCUpIiwiYm90dG9tLWxlZnQiOiJ0cmFuc2xhdGUoMCwtMTAwJSkiLCJib3R0b20tcmlnaHQiOiJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIixsZWZ0OiJ0cmFuc2xhdGUoMCwtNTAlKSIscmlnaHQ6InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSJ9O2Z1bmN0aW9uIERpKHQsZSxyKXt2YXIgbj10LmNsYXNzTGlzdDtmb3IodmFyIGkgaW4gemkpbi5yZW1vdmUoIm1hcGJveGdsLSIrcisiLWFuY2hvci0iK2kpO24uYWRkKCJtYXBib3hnbC0iK3IrIi1hbmNob3ItIitlKX12YXIgUmksRmk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihuLGkpe3ZhciBhPXRoaXM7aWYoZS5jYWxsKHRoaXMpLChuIGluc3RhbmNlb2YgdC53aW5kb3cuSFRNTEVsZW1lbnR8fGkpJiYobj10LmV4dGVuZCh7ZWxlbWVudDpufSxpKSksdC5iaW5kQWxsKFsiX3VwZGF0ZSIsIl9vbk1vdmUiLCJfb25VcCIsIl9hZGREcmFnSGFuZGxlciIsIl9vbk1hcENsaWNrIiwiX29uS2V5UHJlc3MiXSx0aGlzKSx0aGlzLl9hbmNob3I9biYmbi5hbmNob3J8fCJjZW50ZXIiLHRoaXMuX2NvbG9yPW4mJm4uY29sb3J8fCIjM0ZCMUNFIix0aGlzLl9kcmFnZ2FibGU9biYmbi5kcmFnZ2FibGV8fCExLHRoaXMuX3N0YXRlPSJpbmFjdGl2ZSIsdGhpcy5fcm90YXRpb249biYmbi5yb3RhdGlvbnx8MCx0aGlzLl9yb3RhdGlvbkFsaWdubWVudD1uJiZuLnJvdGF0aW9uQWxpZ25tZW50fHwiYXV0byIsdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9biYmbi5waXRjaEFsaWdubWVudCYmImF1dG8iIT09bi5waXRjaEFsaWdubWVudD9uLnBpdGNoQWxpZ25tZW50OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LG4mJm4uZWxlbWVudCl0aGlzLl9lbGVtZW50PW4uZWxlbWVudCx0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KG4mJm4ub2Zmc2V0fHxbMCwwXSk7ZWxzZXt0aGlzLl9kZWZhdWx0TWFya2VyPSEwLHRoaXMuX2VsZW1lbnQ9ci5jcmVhdGUoImRpdiIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIiwiTWFwIG1hcmtlciIpO3ZhciBvPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwic3ZnIik7by5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkaXNwbGF5IiwiYmxvY2siKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsIjQxcHgiKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIiwiMjdweCIpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwidmlld0JveCIsIjAgMCAyNyA0MSIpO3ZhciBzPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpO3Muc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlIiwibm9uZSIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLXdpZHRoIiwiMSIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKTt2YXIgbD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtsLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsIm5vbnplcm8iKTt2YXIgYz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtjLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgzLjAsIDI5LjApIiksYy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO2Zvcih2YXIgdT0wLGY9W3tyeDoiMTAuNSIscnk6IjUuMjUwMDIyNzMifSx7cng6IjEwLjUiLHJ5OiI1LjI1MDAyMjczIn0se3J4OiI5LjUiLHJ5OiI0Ljc3Mjc1MDA3In0se3J4OiI4LjUiLHJ5OiI0LjI5NTQ5OTM2In0se3J4OiI3LjUiLHJ5OiIzLjgxODIyMzA4In0se3J4OiI2LjUiLHJ5OiIzLjM0MDk0Njc5In0se3J4OiI1LjUiLHJ5OiIyLjg2MzY3MDUxIn0se3J4OiI0LjUiLHJ5OiIyLjM4NjM2ODY0In1dO3U8Zi5sZW5ndGg7dSs9MSl7dmFyIGg9Zlt1XSxwPXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZWxsaXBzZSIpO3Auc2V0QXR0cmlidXRlTlMobnVsbCwib3BhY2l0eSIsIjAuMDQiKSxwLnNldEF0dHJpYnV0ZU5TKG51bGwsImN4IiwiMTAuNSIpLHAuc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjgwMDI5MDA4IikscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeCIsaC5yeCkscC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyeSIsaC5yeSksYy5hcHBlbmRDaGlsZChwKX12YXIgZD1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtkLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLHRoaXMuX2NvbG9yKTt2YXIgbT1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInBhdGgiKTttLnNldEF0dHJpYnV0ZU5TKG51bGwsImQiLCJNMjcsMTMuNSBDMjcsMTkuMDc0NjQ0IDIwLjI1MDAwMSwyNy4wMDAwMDIgMTQuNzUsMzQuNTAwMDAyIEMxNC4wMTY2NjUsMzUuNTAwMDA0IDEyLjk4MzMzNSwzNS41MDAwMDQgMTIuMjUsMzQuNTAwMDAyIEM2Ljc0OTk5OTMsMjcuMDAwMDAyIDAsMTkuMjIyNTYyIDAsMTMuNSBDMCw2LjA0NDE1NTkgNi4wNDQxNTU5LDAgMTMuNSwwIEMyMC45NTU4NDQsMCAyNyw2LjA0NDE1NTkgMjcsMTMuNSBaIiksZC5hcHBlbmRDaGlsZChtKTt2YXIgZz1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTtnLnNldEF0dHJpYnV0ZU5TKG51bGwsIm9wYWNpdHkiLCIwLjI1IiksZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwiIzAwMDAwMCIpO3ZhciB2PXIuY3JlYXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwicGF0aCIpO3Yuc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsIk0xMy41LDAgQzYuMDQ0MTU1OSwwIDAsNi4wNDQxNTU5IDAsMTMuNSBDMCwxOS4yMjI1NjIgNi43NDk5OTkzLDI3IDEyLjI1LDM0LjUgQzEzLDM1LjUyMjcyNyAxNC4wMTY2NjQsMzUuNTAwMDA0IDE0Ljc1LDM0LjUgQzIwLjI1MDAwMSwyNyAyNywxOS4wNzQ2NDQgMjcsMTMuNSBDMjcsNi4wNDQxNTU5IDIwLjk1NTg0NCwwIDEzLjUsMCBaIE0xMy41LDEgQzIwLjQxNTQwNCwxIDI2LDYuNTg0NTk2IDI2LDEzLjUgQzI2LDE1Ljg5ODY1NyAyNC40OTU1ODQsMTkuMTgxNDMxIDIyLjIyMDcwMywyMi43MzgyODEgQzE5Ljk0NTgyMywyNi4yOTUxMzIgMTYuNzA1MTE5LDMwLjE0MjE2NyAxMy45NDMzNTksMzMuOTA4MjAzIEMxMy43NDM0NDUsMzQuMTgwODE0IDEzLjYxMjcxNSwzNC4zMjI3MzggMTMuNSwzNC40NDE0MDYgQzEzLjM4NzI4NSwzNC4zMjI3MzggMTMuMjU2NTU1LDM0LjE4MDgxNCAxMy4wNTY2NDEsMzMuOTA4MjAzIEMxMC4yODQ0ODEsMzAuMTI3OTg1IDcuNDE0ODY4NCwyNi4zMTQxNTkgNS4wMTU2MjUsMjIuNzczNDM4IEMyLjYxNjM4MTYsMTkuMjMyNzE1IDEsMTUuOTUzNTM4IDEsMTMuNSBDMSw2LjU4NDU5NiA2LjU4NDU5NiwxIDEzLjUsMSBaIiksZy5hcHBlbmRDaGlsZCh2KTt2YXIgeT1yLmNyZWF0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImciKTt5LnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZSg2LjAsIDcuMCkiKSx5LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIik7dmFyIHg9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIik7eC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoOC4wLCA4LjApIik7dmFyIGI9ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtiLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjMDAwMDAwIiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJvcGFjaXR5IiwiMC4yNSIpLGIuc2V0QXR0cmlidXRlTlMobnVsbCwiY3giLCI1LjUiKSxiLnNldEF0dHJpYnV0ZU5TKG51bGwsImN5IiwiNS41IiksYi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJyIiwiNS40OTk5OTYyIik7dmFyIF89ci5jcmVhdGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJjaXJjbGUiKTtfLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCIjRkZGRkZGIiksXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjeCIsIjUuNSIpLF8uc2V0QXR0cmlidXRlTlMobnVsbCwiY3kiLCI1LjUiKSxfLnNldEF0dHJpYnV0ZU5TKG51bGwsInIiLCI1LjQ5OTk5NjIiKSx4LmFwcGVuZENoaWxkKGIpLHguYXBwZW5kQ2hpbGQoXyksbC5hcHBlbmRDaGlsZChjKSxsLmFwcGVuZENoaWxkKGQpLGwuYXBwZW5kQ2hpbGQoZyksbC5hcHBlbmRDaGlsZCh5KSxsLmFwcGVuZENoaWxkKHgpLG8uYXBwZW5kQ2hpbGQobCksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChvKSx0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KG4mJm4ub2Zmc2V0fHxbMCwtMTRdKX10aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLW1hcmtlciIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLChmdW5jdGlvbigpe3ZhciB0PWEuX21hcC5nZXRDb250YWluZXIoKTt0LnNjcm9sbFRvcD0wLHQuc2Nyb2xsTGVmdD0wfSkpLERpKHRoaXMuX2VsZW1lbnQsdGhpcy5fYW5jaG9yLCJtYXJrZXIiKSx0aGlzLl9wb3B1cD1udWxsfXJldHVybiBlJiYobi5fX3Byb3RvX189ZSksbi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixuLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9dCx0LmdldENhbnZhc0NvbnRhaW5lcigpLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHQub24oIm1vdmUiLHRoaXMuX3VwZGF0ZSksdC5vbigibW92ZWVuZCIsdGhpcy5fdXBkYXRlKSx0aGlzLnNldERyYWdnYWJsZSh0aGlzLl9kcmFnZ2FibGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcC5vbigiY2xpY2siLHRoaXMuX29uTWFwQ2xpY2spLHRoaXN9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAmJih0aGlzLl9tYXAub2ZmKCJjbGljayIsdGhpcy5fb25NYXBDbGljayksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3ZlZW5kIix0aGlzLl91cGRhdGUpLHRoaXMuX21hcC5vZmYoIm1vdXNlZG93biIsdGhpcy5fYWRkRHJhZ0hhbmRsZXIpLHRoaXMuX21hcC5vZmYoInRvdWNoc3RhcnQiLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaGVuZCIsdGhpcy5fb25VcCksdGhpcy5fbWFwLm9mZigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vZmYoInRvdWNobW92ZSIsdGhpcy5fb25Nb3ZlKSxkZWxldGUgdGhpcy5fbWFwKSxyLnJlbW92ZSh0aGlzLl9lbGVtZW50KSx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAucmVtb3ZlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0TG5nTGF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xuZ0xhdH0sbi5wcm90b3R5cGUuc2V0TG5nTGF0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9sbmdMYXQ9dC5MbmdMYXQuY29udmVydChlKSx0aGlzLl9wb3M9bnVsbCx0aGlzLl9wb3B1cCYmdGhpcy5fcG9wdXAuc2V0TG5nTGF0KHRoaXMuX2xuZ0xhdCksdGhpcy5fdXBkYXRlKCksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGVtZW50fSxuLnByb3RvdHlwZS5zZXRQb3B1cD1mdW5jdGlvbih0KXtpZih0aGlzLl9wb3B1cCYmKHRoaXMuX3BvcHVwLnJlbW92ZSgpLHRoaXMuX3BvcHVwPW51bGwsdGhpcy5fZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsdGhpcy5fb25LZXlQcmVzcyksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4IikpLHQpe2lmKCEoIm9mZnNldCJpbiB0Lm9wdGlvbnMpKXt2YXIgZT1NYXRoLnNxcnQoTWF0aC5wb3coMTMuNSwyKS8yKTt0Lm9wdGlvbnMub2Zmc2V0PXRoaXMuX2RlZmF1bHRNYXJrZXI/e3RvcDpbMCwwXSwidG9wLWxlZnQiOlswLDBdLCJ0b3AtcmlnaHQiOlswLDBdLGJvdHRvbTpbMCwtMzguMV0sImJvdHRvbS1sZWZ0IjpbZSwtMSooMjQuNitlKV0sImJvdHRvbS1yaWdodCI6Wy1lLC0xKigyNC42K2UpXSxsZWZ0OlsxMy41LC0yNC42XSxyaWdodDpbLTEzLjUsLTI0LjZdfTp0aGlzLl9vZmZzZXR9dGhpcy5fcG9wdXA9dCx0aGlzLl9sbmdMYXQmJnRoaXMuX3BvcHVwLnNldExuZ0xhdCh0aGlzLl9sbmdMYXQpLHRoaXMuX29yaWdpbmFsVGFiSW5kZXg9dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IiksdGhpcy5fb3JpZ2luYWxUYWJJbmRleHx8dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpLHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLHRoaXMuX29uS2V5UHJlc3MpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5fb25LZXlQcmVzcz1mdW5jdGlvbih0KXt2YXIgZT10LmNvZGUscj10LmNoYXJDb2RlfHx0LmtleUNvZGU7IlNwYWNlIiE9PWUmJiJFbnRlciIhPT1lJiYzMiE9PXImJjEzIT09cnx8dGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5fb25NYXBDbGljaz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudGFyZ2V0LHI9dGhpcy5fZWxlbWVudDt0aGlzLl9wb3B1cCYmKGU9PT1yfHxyLmNvbnRhaW5zKGUpKSYmdGhpcy50b2dnbGVQb3B1cCgpfSxuLnByb3RvdHlwZS5nZXRQb3B1cD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3B1cH0sbi5wcm90b3R5cGUudG9nZ2xlUG9wdXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wb3B1cDtyZXR1cm4gdD8odC5pc09wZW4oKT90LnJlbW92ZSgpOnQuYWRkVG8odGhpcy5fbWFwKSx0aGlzKTp0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX21hcCl7dGhpcy5fbWFwLnRyYW5zZm9ybS5yZW5kZXJXb3JsZENvcGllcyYmKHRoaXMuX2xuZ0xhdD1PaSh0aGlzLl9sbmdMYXQsdGhpcy5fcG9zLHRoaXMuX21hcC50cmFuc2Zvcm0pKSx0aGlzLl9wb3M9dGhpcy5fbWFwLnByb2plY3QodGhpcy5fbG5nTGF0KS5fYWRkKHRoaXMuX29mZnNldCk7dmFyIGU9IiI7InZpZXdwb3J0Ij09PXRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9yb3RhdGlvbkFsaWdubWVudD9lPSJyb3RhdGVaKCIrdGhpcy5fcm90YXRpb24rImRlZykiOiJtYXAiPT09dGhpcy5fcm90YXRpb25BbGlnbm1lbnQmJihlPSJyb3RhdGVaKCIrKHRoaXMuX3JvdGF0aW9uLXRoaXMuX21hcC5nZXRCZWFyaW5nKCkpKyJkZWcpIik7dmFyIG49IiI7InZpZXdwb3J0Ij09PXRoaXMuX3BpdGNoQWxpZ25tZW50fHwiYXV0byI9PT10aGlzLl9waXRjaEFsaWdubWVudD9uPSJyb3RhdGVYKDBkZWcpIjoibWFwIj09PXRoaXMuX3BpdGNoQWxpZ25tZW50JiYobj0icm90YXRlWCgiK3RoaXMuX21hcC5nZXRQaXRjaCgpKyJkZWcpIiksdCYmIm1vdmVlbmQiIT09dC50eXBlfHwodGhpcy5fcG9zPXRoaXMuX3Bvcy5yb3VuZCgpKSxyLnNldFRyYW5zZm9ybSh0aGlzLl9lbGVtZW50LHppW3RoaXMuX2FuY2hvcl0rIiB0cmFuc2xhdGUoIit0aGlzLl9wb3MueCsicHgsICIrdGhpcy5fcG9zLnkrInB4KSAiK24rIiAiK2UpfX0sbi5wcm90b3R5cGUuZ2V0T2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH0sbi5wcm90b3R5cGUuc2V0T2Zmc2V0PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vZmZzZXQ9dC5Qb2ludC5jb252ZXJ0KGUpLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLl9vbk1vdmU9ZnVuY3Rpb24oZSl7dGhpcy5fcG9zPWUucG9pbnQuc3ViKHRoaXMuX3Bvc2l0aW9uRGVsdGEpLHRoaXMuX2xuZ0xhdD10aGlzLl9tYXAudW5wcm9qZWN0KHRoaXMuX3BvcyksdGhpcy5zZXRMbmdMYXQodGhpcy5fbG5nTGF0KSx0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLCJwZW5kaW5nIj09PXRoaXMuX3N0YXRlJiYodGhpcy5fc3RhdGU9ImFjdGl2ZSIsdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJkcmFnc3RhcnQiKSkpLHRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZyIpKX0sbi5wcm90b3R5cGUuX29uVXA9ZnVuY3Rpb24oKXt0aGlzLl9lbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHM9ImF1dG8iLHRoaXMuX3Bvc2l0aW9uRGVsdGE9bnVsbCx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwLm9mZigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLCJhY3RpdmUiPT09dGhpcy5fc3RhdGUmJnRoaXMuZmlyZShuZXcgdC5FdmVudCgiZHJhZ2VuZCIpKSx0aGlzLl9zdGF0ZT0iaW5hY3RpdmUifSxuLnByb3RvdHlwZS5fYWRkRHJhZ0hhbmRsZXI9ZnVuY3Rpb24odCl7dGhpcy5fZWxlbWVudC5jb250YWlucyh0Lm9yaWdpbmFsRXZlbnQudGFyZ2V0KSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLl9wb3NpdGlvbkRlbHRhPXQucG9pbnQuc3ViKHRoaXMuX3BvcykuYWRkKHRoaXMuX29mZnNldCksdGhpcy5fc3RhdGU9InBlbmRpbmciLHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbigidG91Y2htb3ZlIix0aGlzLl9vbk1vdmUpLHRoaXMuX21hcC5vbmNlKCJtb3VzZXVwIix0aGlzLl9vblVwKSx0aGlzLl9tYXAub25jZSgidG91Y2hlbmQiLHRoaXMuX29uVXApKX0sbi5wcm90b3R5cGUuc2V0RHJhZ2dhYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9kcmFnZ2FibGU9ISF0LHRoaXMuX21hcCYmKHQ/KHRoaXMuX21hcC5vbigibW91c2Vkb3duIix0aGlzLl9hZGREcmFnSGFuZGxlciksdGhpcy5fbWFwLm9uKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpOih0aGlzLl9tYXAub2ZmKCJtb3VzZWRvd24iLHRoaXMuX2FkZERyYWdIYW5kbGVyKSx0aGlzLl9tYXAub2ZmKCJ0b3VjaHN0YXJ0Iix0aGlzLl9hZGREcmFnSGFuZGxlcikpKSx0aGlzfSxuLnByb3RvdHlwZS5pc0RyYWdnYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9kcmFnZ2FibGV9LG4ucHJvdG90eXBlLnNldFJvdGF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yb3RhdGlvbj10fHwwLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9ufSxuLnByb3RvdHlwZS5zZXRSb3RhdGlvbkFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcm90YXRpb25BbGlnbm1lbnQ9dHx8ImF1dG8iLHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFJvdGF0aW9uQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdGF0aW9uQWxpZ25tZW50fSxuLnByb3RvdHlwZS5zZXRQaXRjaEFsaWdubWVudD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcGl0Y2hBbGlnbm1lbnQ9dCYmImF1dG8iIT09dD90OnRoaXMuX3JvdGF0aW9uQWxpZ25tZW50LHRoaXMuX3VwZGF0ZSgpLHRoaXN9LG4ucHJvdG90eXBlLmdldFBpdGNoQWxpZ25tZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BpdGNoQWxpZ25tZW50fSxufSh0LkV2ZW50ZWQpLEJpPXtwb3NpdGlvbk9wdGlvbnM6e2VuYWJsZUhpZ2hBY2N1cmFjeTohMSxtYXhpbXVtQWdlOjAsdGltZW91dDo2ZTN9LGZpdEJvdW5kc09wdGlvbnM6e21heFpvb206MTV9LHRyYWNrVXNlckxvY2F0aW9uOiExLHNob3dBY2N1cmFjeUNpcmNsZTohMCxzaG93VXNlckxvY2F0aW9uOiEwfTt2YXIgTmk9MCxqaT0hMSxVaT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sQmksciksdC5iaW5kQWxsKFsiX29uU3VjY2VzcyIsIl9vbkVycm9yIiwiX29uWm9vbSIsIl9maW5pc2giLCJfc2V0dXBVSSIsIl91cGRhdGVDYW1lcmEiLCJfdXBkYXRlTWFya2VyIl0sdGhpcyl9cmV0dXJuIGUmJihuLl9fcHJvdG9fXz1lKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlKSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4ucHJvdG90eXBlLm9uQWRkPWZ1bmN0aW9uKGUpe3ZhciBuO3JldHVybiB0aGlzLl9tYXA9ZSx0aGlzLl9jb250YWluZXI9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLWN0cmwgbWFwYm94Z2wtY3RybC1ncm91cCIpLG49dGhpcy5fc2V0dXBVSSx2b2lkIDAhPT1SaT9uKFJpKTp2b2lkIDAhPT10LndpbmRvdy5uYXZpZ2F0b3IucGVybWlzc2lvbnM/dC53aW5kb3cubmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHtuYW1lOiJnZW9sb2NhdGlvbiJ9KS50aGVuKChmdW5jdGlvbih0KXtSaT0iZGVuaWVkIiE9PXQuc3RhdGUsbihSaSl9KSk6KFJpPSEhdC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLG4oUmkpKSx0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEJiYodC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXNlckxvY2F0aW9uRG90TWFya2VyJiZ0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCksdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXImJnRoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnJlbW92ZSgpLHIucmVtb3ZlKHRoaXMuX2NvbnRhaW5lciksdGhpcy5fbWFwLm9mZigiem9vbSIsdGhpcy5fb25ab29tKSx0aGlzLl9tYXA9dm9pZCAwLE5pPTAsamk9ITF9LG4ucHJvdG90eXBlLl9pc091dE9mTWFwTWF4Qm91bmRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX21hcC5nZXRNYXhCb3VuZHMoKSxyPXQuY29vcmRzO3JldHVybiBlJiYoci5sb25naXR1ZGU8ZS5nZXRXZXN0KCl8fHIubG9uZ2l0dWRlPmUuZ2V0RWFzdCgpfHxyLmxhdGl0dWRlPGUuZ2V0U291dGgoKXx8ci5sYXRpdHVkZT5lLmdldE5vcnRoKCkpfSxuLnByb3RvdHlwZS5fc2V0RXJyb3JTdGF0ZT1mdW5jdGlvbigpe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfRVJST1IiLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIik7YnJlYWs7Y2FzZSJBQ1RJVkVfTE9DSyI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIik7YnJlYWs7Y2FzZSJCQUNLR1JPVU5EIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EX0VSUk9SIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYmFja2dyb3VuZCIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKX19LG4ucHJvdG90eXBlLl9vblN1Y2Nlc3M9ZnVuY3Rpb24oZSl7aWYodGhpcy5fbWFwKXtpZih0aGlzLl9pc091dE9mTWFwTWF4Qm91bmRzKGUpKXJldHVybiB0aGlzLl9zZXRFcnJvclN0YXRlKCksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJvdXRvZm1heGJvdW5kcyIsZSkpLHRoaXMuX3VwZGF0ZU1hcmtlcigpLHZvaWQgdGhpcy5fZmluaXNoKCk7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKXN3aXRjaCh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbj1lLHRoaXMuX3dhdGNoU3RhdGUpe2Nhc2UiV0FJVElOR19BQ1RJVkUiOmNhc2UiQUNUSVZFX0xPQ0siOmNhc2UiQUNUSVZFX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJBQ1RJVkVfTE9DSyIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZSIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjp0aGlzLl93YXRjaFN0YXRlPSJCQUNLR1JPVU5EIix0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kLWVycm9yIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKX10aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmIk9GRiIhPT10aGlzLl93YXRjaFN0YXRlJiZ0aGlzLl91cGRhdGVNYXJrZXIoZSksdGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uJiYiQUNUSVZFX0xPQ0siIT09dGhpcy5fd2F0Y2hTdGF0ZXx8dGhpcy5fdXBkYXRlQ2FtZXJhKGUpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJnZW9sb2NhdGUiLGUpKSx0aGlzLl9maW5pc2goKX19LG4ucHJvdG90eXBlLl91cGRhdGVDYW1lcmE9ZnVuY3Rpb24oZSl7dmFyIHI9bmV3IHQuTG5nTGF0KGUuY29vcmRzLmxvbmdpdHVkZSxlLmNvb3Jkcy5sYXRpdHVkZSksbj1lLmNvb3Jkcy5hY2N1cmFjeSxpPXRoaXMuX21hcC5nZXRCZWFyaW5nKCksYT10LmV4dGVuZCh7YmVhcmluZzppfSx0aGlzLm9wdGlvbnMuZml0Qm91bmRzT3B0aW9ucyk7dGhpcy5fbWFwLmZpdEJvdW5kcyhyLnRvQm91bmRzKG4pLGEse2dlb2xvY2F0ZVNvdXJjZTohMH0pfSxuLnByb3RvdHlwZS5fdXBkYXRlTWFya2VyPWZ1bmN0aW9uKGUpe2lmKGUpe3ZhciByPW5ldyB0LkxuZ0xhdChlLmNvb3Jkcy5sb25naXR1ZGUsZS5jb29yZHMubGF0aXR1ZGUpO3RoaXMuX2FjY3VyYWN5Q2lyY2xlTWFya2VyLnNldExuZ0xhdChyKS5hZGRUbyh0aGlzLl9tYXApLHRoaXMuX3VzZXJMb2NhdGlvbkRvdE1hcmtlci5zZXRMbmdMYXQocikuYWRkVG8odGhpcy5fbWFwKSx0aGlzLl9hY2N1cmFjeT1lLmNvb3Jkcy5hY2N1cmFjeSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCl9ZWxzZSB0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXIucmVtb3ZlKCksdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXIucmVtb3ZlKCl9LG4ucHJvdG90eXBlLl91cGRhdGVDaXJjbGVSYWRpdXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9tYXAuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQvMixlPXRoaXMuX21hcC51bnByb2plY3QoWzAsdF0pLHI9dGhpcy5fbWFwLnVucHJvamVjdChbMSx0XSksbj1lLmRpc3RhbmNlVG8ociksaT1NYXRoLmNlaWwoMip0aGlzLl9hY2N1cmFjeS9uKTt0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLndpZHRoPWkrInB4Iix0aGlzLl9jaXJjbGVFbGVtZW50LnN0eWxlLmhlaWdodD1pKyJweCJ9LG4ucHJvdG90eXBlLl9vblpvb209ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5vcHRpb25zLnNob3dBY2N1cmFjeUNpcmNsZSYmdGhpcy5fdXBkYXRlQ2lyY2xlUmFkaXVzKCl9LG4ucHJvdG90eXBlLl9vbkVycm9yPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX21hcCl7aWYodGhpcy5vcHRpb25zLnRyYWNrVXNlckxvY2F0aW9uKWlmKDE9PT1lLmNvZGUpe3RoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uZGlzYWJsZWQ9ITA7dmFyIHI9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50aXRsZT1yLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLHIpLHZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCYmdGhpcy5fY2xlYXJXYXRjaCgpfWVsc2V7aWYoMz09PWUuY29kZSYmamkpcmV0dXJuO3RoaXMuX3NldEVycm9yU3RhdGUoKX0iT0ZGIiE9PXRoaXMuX3dhdGNoU3RhdGUmJnRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiZ0aGlzLl9kb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXVzZXItbG9jYXRpb24tZG90LXN0YWxlIiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJlcnJvciIsZSkpLHRoaXMuX2ZpbmlzaCgpfX0sbi5wcm90b3R5cGUuX2ZpbmlzaD1mdW5jdGlvbigpe3RoaXMuX3RpbWVvdXRJZCYmY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXRJZCksdGhpcy5fdGltZW91dElkPXZvaWQgMH0sbi5wcm90b3R5cGUuX3NldHVwVUk9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcztpZih0aGlzLl9jb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUiLHRoaXMuX2NvbnRhaW5lciksci5jcmVhdGUoInNwYW4iLCJtYXBib3hnbC1jdHJsLWljb24iLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbikuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi50eXBlPSJidXR0b24iLCExPT09ZSl7dC53YXJuT25jZSgiR2VvbG9jYXRpb24gc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIHNvIHRoZSBHZW9sb2NhdGVDb250cm9sIHdpbGwgYmUgZGlzYWJsZWQuIik7dmFyIGk9dGhpcy5fbWFwLl9nZXRVSVN0cmluZygiR2VvbG9jYXRlQ29udHJvbC5Mb2NhdGlvbk5vdEF2YWlsYWJsZSIpO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5kaXNhYmxlZD0hMCx0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGU9aSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixpKX1lbHNle3ZhciBhPXRoaXMuX21hcC5fZ2V0VUlTdHJpbmcoIkdlb2xvY2F0ZUNvbnRyb2wuRmluZE15TG9jYXRpb24iKTt0aGlzLl9nZW9sb2NhdGVCdXR0b24udGl0bGU9YSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixhKX10aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl9nZW9sb2NhdGVCdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIpLHRoaXMub3B0aW9ucy5zaG93VXNlckxvY2F0aW9uJiYodGhpcy5fZG90RWxlbWVudD1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtdXNlci1sb2NhdGlvbi1kb3QiKSx0aGlzLl91c2VyTG9jYXRpb25Eb3RNYXJrZXI9bmV3IEZpKHRoaXMuX2RvdEVsZW1lbnQpLHRoaXMuX2NpcmNsZUVsZW1lbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXVzZXItbG9jYXRpb24tYWNjdXJhY3ktY2lyY2xlIiksdGhpcy5fYWNjdXJhY3lDaXJjbGVNYXJrZXI9bmV3IEZpKHtlbGVtZW50OnRoaXMuX2NpcmNsZUVsZW1lbnQscGl0Y2hBbGlnbm1lbnQ6Im1hcCJ9KSx0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24mJih0aGlzLl93YXRjaFN0YXRlPSJPRkYiKSx0aGlzLl9tYXAub24oInpvb20iLHRoaXMuX29uWm9vbSkpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyLmJpbmQodGhpcykpLHRoaXMuX3NldHVwPSEwLHRoaXMub3B0aW9ucy50cmFja1VzZXJMb2NhdGlvbiYmdGhpcy5fbWFwLm9uKCJtb3Zlc3RhcnQiLChmdW5jdGlvbihlKXt2YXIgcj1lLm9yaWdpbmFsRXZlbnQmJiJyZXNpemUiPT09ZS5vcmlnaW5hbEV2ZW50LnR5cGU7ZS5nZW9sb2NhdGVTb3VyY2V8fCJBQ1RJVkVfTE9DSyIhPT1uLl93YXRjaFN0YXRlfHxyfHwobi5fd2F0Y2hTdGF0ZT0iQkFDS0dST1VORCIsbi5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKSxuLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksbi5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbmVuZCIpKSl9KSl9LG4ucHJvdG90eXBlLnRyaWdnZXI9ZnVuY3Rpb24oKXtpZighdGhpcy5fc2V0dXApcmV0dXJuIHQud2Fybk9uY2UoIkdlb2xvY2F0ZSBjb250cm9sIHRyaWdnZXJlZCBiZWZvcmUgYWRkZWQgdG8gYSBtYXAiKSwhMTtpZih0aGlzLm9wdGlvbnMudHJhY2tVc2VyTG9jYXRpb24pe3N3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIk9GRiI6dGhpcy5fd2F0Y2hTdGF0ZT0iV0FJVElOR19BQ1RJVkUiLHRoaXMuZmlyZShuZXcgdC5FdmVudCgidHJhY2t1c2VybG9jYXRpb25zdGFydCIpKTticmVhaztjYXNlIldBSVRJTkdfQUNUSVZFIjpjYXNlIkFDVElWRV9MT0NLIjpjYXNlIkFDVElWRV9FUlJPUiI6Y2FzZSJCQUNLR1JPVU5EX0VSUk9SIjpOaS0tLGppPSExLHRoaXMuX3dhdGNoU3RhdGU9Ik9GRiIsdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLXdhaXRpbmciKSx0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoInRyYWNrdXNlcmxvY2F0aW9uZW5kIikpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fd2F0Y2hTdGF0ZT0iQUNUSVZFX0xPQ0siLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1iYWNrZ3JvdW5kIiksdGhpcy5fbGFzdEtub3duUG9zaXRpb24mJnRoaXMuX3VwZGF0ZUNhbWVyYSh0aGlzLl9sYXN0S25vd25Qb3NpdGlvbiksdGhpcy5maXJlKG5ldyB0LkV2ZW50KCJ0cmFja3VzZXJsb2NhdGlvbnN0YXJ0IikpfXN3aXRjaCh0aGlzLl93YXRjaFN0YXRlKXtjYXNlIldBSVRJTkdfQUNUSVZFIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtd2FpdGluZyIpLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS1hY3RpdmUiKTticmVhaztjYXNlIkFDVElWRV9MT0NLIjp0aGlzLl9nZW9sb2NhdGVCdXR0b24uY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtY3RybC1nZW9sb2NhdGUtYWN0aXZlIik7YnJlYWs7Y2FzZSJBQ1RJVkVfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWFjdGl2ZS1lcnJvciIpO2JyZWFrO2Nhc2UiQkFDS0dST1VORCI6dGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQiKTticmVhaztjYXNlIkJBQ0tHUk9VTkRfRVJST1IiOnRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLWN0cmwtZ2VvbG9jYXRlLWJhY2tncm91bmQtZXJyb3IiKX1pZigiT0ZGIj09PXRoaXMuX3dhdGNoU3RhdGUmJnZvaWQgMCE9PXRoaXMuX2dlb2xvY2F0aW9uV2F0Y2hJRCl0aGlzLl9jbGVhcldhdGNoKCk7ZWxzZSBpZih2b2lkIDA9PT10aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQpe3ZhciBlO3RoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpLCsrTmk+MT8oZT17bWF4aW11bUFnZTo2ZTUsdGltZW91dDowfSxqaT0hMCk6KGU9dGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyxqaT0hMSksdGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEPXQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKHRoaXMuX29uU3VjY2Vzcyx0aGlzLl9vbkVycm9yLGUpfX1lbHNlIHQud2luZG93Lm5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24odGhpcy5fb25TdWNjZXNzLHRoaXMuX29uRXJyb3IsdGhpcy5vcHRpb25zLnBvc2l0aW9uT3B0aW9ucyksdGhpcy5fdGltZW91dElkPXNldFRpbWVvdXQodGhpcy5fZmluaXNoLDFlNCk7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9jbGVhcldhdGNoPWZ1bmN0aW9uKCl7dC53aW5kb3cubmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2godGhpcy5fZ2VvbG9jYXRpb25XYXRjaElEKSx0aGlzLl9nZW9sb2NhdGlvbldhdGNoSUQ9dm9pZCAwLHRoaXMuX2dlb2xvY2F0ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1jdHJsLWdlb2xvY2F0ZS13YWl0aW5nIiksdGhpcy5fZ2VvbG9jYXRlQnV0dG9uLnNldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSx0aGlzLm9wdGlvbnMuc2hvd1VzZXJMb2NhdGlvbiYmdGhpcy5fdXBkYXRlTWFya2VyKG51bGwpfSxufSh0LkV2ZW50ZWQpLFZpPXttYXhXaWR0aDoxMDAsdW5pdDoibWV0cmljIn0sSGk9ZnVuY3Rpb24oZSl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LFZpLGUpLHQuYmluZEFsbChbIl9vbk1vdmUiLCJzZXRVbml0Il0sdGhpcyl9O2Z1bmN0aW9uIHFpKHQsZSxyKXt2YXIgbj1yJiZyLm1heFdpZHRofHwxMDAsaT10Ll9jb250YWluZXIuY2xpZW50SGVpZ2h0LzIsYT10LnVucHJvamVjdChbMCxpXSksbz10LnVucHJvamVjdChbbixpXSkscz1hLmRpc3RhbmNlVG8obyk7aWYociYmImltcGVyaWFsIj09PXIudW5pdCl7dmFyIGw9My4yODA4KnM7aWYobD41MjgwKUdpKGUsbixsLzUyODAsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NaWxlcyIpKTtlbHNlIEdpKGUsbixsLHQuX2dldFVJU3RyaW5nKCJTY2FsZUNvbnRyb2wuRmVldCIpKX1lbHNlIGlmKHImJiJuYXV0aWNhbCI9PT1yLnVuaXQpe0dpKGUsbixzLzE4NTIsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5OYXV0aWNhbE1pbGVzIikpfWVsc2Ugcz49MWUzP0dpKGUsbixzLzFlMyx0Ll9nZXRVSVN0cmluZygiU2NhbGVDb250cm9sLktpbG9tZXRlcnMiKSk6R2koZSxuLHMsdC5fZ2V0VUlTdHJpbmcoIlNjYWxlQ29udHJvbC5NZXRlcnMiKSl9ZnVuY3Rpb24gR2kodCxlLHIsbil7dmFyIGksYSxvLHM9KGk9cixhPU1hdGgucG93KDEwLCgiIitNYXRoLmZsb29yKGkpKS5sZW5ndGgtMSksbz0obz1pL2EpPj0xMD8xMDpvPj01PzU6bz49Mz8zOm8+PTI/MjpvPj0xPzE6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5wb3coMTAsTWF0aC5jZWlsKC1NYXRoLmxvZyh0KS9NYXRoLkxOMTApKTtyZXR1cm4gTWF0aC5yb3VuZCh0KmUpL2V9KG8pLGEqbyksbD1zL3I7dC5zdHlsZS53aWR0aD1lKmwrInB4Iix0LmlubmVySFRNTD1zKyImbmJzcDsiK259SGkucHJvdG90eXBlLmdldERlZmF1bHRQb3NpdGlvbj1mdW5jdGlvbigpe3JldHVybiJib3R0b20tbGVmdCJ9LEhpLnByb3RvdHlwZS5fb25Nb3ZlPWZ1bmN0aW9uKCl7cWkodGhpcy5fbWFwLHRoaXMuX2NvbnRhaW5lcix0aGlzLm9wdGlvbnMpfSxIaS5wcm90b3R5cGUub25BZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21hcD10LHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLXNjYWxlIix0LmdldENvbnRhaW5lcigpKSx0aGlzLl9tYXAub24oIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fb25Nb3ZlKCksdGhpcy5fY29udGFpbmVyfSxIaS5wcm90b3R5cGUub25SZW1vdmU9ZnVuY3Rpb24oKXtyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX29uTW92ZSksdGhpcy5fbWFwPXZvaWQgMH0sSGkucHJvdG90eXBlLnNldFVuaXQ9ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnVuaXQ9dCxxaSh0aGlzLl9tYXAsdGhpcy5fY29udGFpbmVyLHRoaXMub3B0aW9ucyl9O3ZhciBZaT1mdW5jdGlvbihlKXt0aGlzLl9mdWxsc2NyZWVuPSExLGUmJmUuY29udGFpbmVyJiYoZS5jb250YWluZXIgaW5zdGFuY2VvZiB0LndpbmRvdy5IVE1MRWxlbWVudD90aGlzLl9jb250YWluZXI9ZS5jb250YWluZXI6dC53YXJuT25jZSgiRnVsbCBzY3JlZW4gY29udHJvbCAnY29udGFpbmVyJyBtdXN0IGJlIGEgRE9NIGVsZW1lbnQuIikpLHQuYmluZEFsbChbIl9vbkNsaWNrRnVsbHNjcmVlbiIsIl9jaGFuZ2VJY29uIl0sdGhpcyksIm9uZnVsbHNjcmVlbmNoYW5nZSJpbiB0LndpbmRvdy5kb2N1bWVudD90aGlzLl9mdWxsc2NyZWVuY2hhbmdlPSJmdWxsc2NyZWVuY2hhbmdlIjoib25tb3pmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50P3RoaXMuX2Z1bGxzY3JlZW5jaGFuZ2U9Im1vemZ1bGxzY3JlZW5jaGFuZ2UiOiJvbndlYmtpdGZ1bGxzY3JlZW5jaGFuZ2UiaW4gdC53aW5kb3cuZG9jdW1lbnQ/dGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0id2Via2l0ZnVsbHNjcmVlbmNoYW5nZSI6Im9ubXNmdWxsc2NyZWVuY2hhbmdlImluIHQud2luZG93LmRvY3VtZW50JiYodGhpcy5fZnVsbHNjcmVlbmNoYW5nZT0iTVNGdWxsc2NyZWVuQ2hhbmdlIil9O1lpLnByb3RvdHlwZS5vbkFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwPWUsdGhpcy5fY29udGFpbmVyfHwodGhpcy5fY29udGFpbmVyPXRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fY29udHJvbENvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtY3RybCBtYXBib3hnbC1jdHJsLWdyb3VwIiksdGhpcy5fY2hlY2tGdWxsc2NyZWVuU3VwcG9ydCgpP3RoaXMuX3NldHVwVUkoKToodGhpcy5fY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSJub25lIix0Lndhcm5PbmNlKCJUaGlzIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGZ1bGxzY3JlZW4gbW9kZS4iKSksdGhpcy5fY29udHJvbENvbnRhaW5lcn0sWWkucHJvdG90eXBlLm9uUmVtb3ZlPWZ1bmN0aW9uKCl7ci5yZW1vdmUodGhpcy5fY29udHJvbENvbnRhaW5lciksdGhpcy5fbWFwPW51bGwsdC53aW5kb3cuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLl9mdWxsc2NyZWVuY2hhbmdlLHRoaXMuX2NoYW5nZUljb24pfSxZaS5wcm90b3R5cGUuX2NoZWNrRnVsbHNjcmVlblN1cHBvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4hISh0LndpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8dC53aW5kb3cuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fHQud2luZG93LmRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fHQud2luZG93LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbmFibGVkKX0sWWkucHJvdG90eXBlLl9zZXR1cFVJPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZnVsbHNjcmVlbkJ1dHRvbj1yLmNyZWF0ZSgiYnV0dG9uIiwibWFwYm94Z2wtY3RybC1mdWxsc2NyZWVuIix0aGlzLl9jb250cm9sQ29udGFpbmVyKTtyLmNyZWF0ZSgic3BhbiIsIm1hcGJveGdsLWN0cmwtaWNvbiIsZSkuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsITApLGUudHlwZT0iYnV0dG9uIix0aGlzLl91cGRhdGVUaXRsZSgpLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX29uQ2xpY2tGdWxsc2NyZWVuKSx0LndpbmRvdy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMuX2Z1bGxzY3JlZW5jaGFuZ2UsdGhpcy5fY2hhbmdlSWNvbil9LFlpLnByb3RvdHlwZS5fdXBkYXRlVGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9nZXRUaXRsZSgpO3RoaXMuX2Z1bGxzY3JlZW5CdXR0b24uc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIix0KSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLnRpdGxlPXR9LFlpLnByb3RvdHlwZS5fZ2V0VGl0bGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLl9nZXRVSVN0cmluZyh0aGlzLl9pc0Z1bGxzY3JlZW4oKT8iRnVsbHNjcmVlbkNvbnRyb2wuRXhpdCI6IkZ1bGxzY3JlZW5Db250cm9sLkVudGVyIil9LFlpLnByb3RvdHlwZS5faXNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Z1bGxzY3JlZW59LFlpLnByb3RvdHlwZS5fY2hhbmdlSWNvbj1mdW5jdGlvbigpeyh0LndpbmRvdy5kb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8dC53aW5kb3cuZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fHQud2luZG93LmRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHx0LndpbmRvdy5kb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50KT09PXRoaXMuX2NvbnRhaW5lciE9PXRoaXMuX2Z1bGxzY3JlZW4mJih0aGlzLl9mdWxsc2NyZWVuPSF0aGlzLl9mdWxsc2NyZWVuLHRoaXMuX2Z1bGxzY3JlZW5CdXR0b24uY2xhc3NMaXN0LnRvZ2dsZSgibWFwYm94Z2wtY3RybC1zaHJpbmsiKSx0aGlzLl9mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC50b2dnbGUoIm1hcGJveGdsLWN0cmwtZnVsbHNjcmVlbiIpLHRoaXMuX3VwZGF0ZVRpdGxlKCkpfSxZaS5wcm90b3R5cGUuX29uQ2xpY2tGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7dGhpcy5faXNGdWxsc2NyZWVuKCk/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/dC53aW5kb3cuZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVuP3Qud2luZG93LmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKTp0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuJiZ0LndpbmRvdy5kb2N1bWVudC53ZWJraXRDYW5jZWxGdWxsU2NyZWVuKCk6dGhpcy5fY29udGFpbmVyLnJlcXVlc3RGdWxsc2NyZWVuP3RoaXMuX2NvbnRhaW5lci5yZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci5tb3pSZXF1ZXN0RnVsbFNjcmVlbj90aGlzLl9jb250YWluZXIubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbj90aGlzLl9jb250YWluZXIubXNSZXF1ZXN0RnVsbHNjcmVlbigpOnRoaXMuX2NvbnRhaW5lci53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbiYmdGhpcy5fY29udGFpbmVyLndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCl9O3ZhciBXaT17Y2xvc2VCdXR0b246ITAsY2xvc2VPbkNsaWNrOiEwLGNsYXNzTmFtZToiIixtYXhXaWR0aDoiMjQwcHgifSxYaT1mdW5jdGlvbihlKXtmdW5jdGlvbiBuKHIpe2UuY2FsbCh0aGlzKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoT2JqZWN0LmNyZWF0ZShXaSksciksdC5iaW5kQWxsKFsiX3VwZGF0ZSIsIl9vbkNsb3NlIiwicmVtb3ZlIiwiX29uTW91c2VNb3ZlIiwiX29uTW91c2VVcCIsIl9vbkRyYWciXSx0aGlzKX1yZXR1cm4gZSYmKG4uX19wcm90b19fPWUpLG4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUpLG4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPW4sbi5wcm90b3R5cGUuYWRkVG89ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcCYmdGhpcy5yZW1vdmUoKSx0aGlzLl9tYXA9ZSx0aGlzLm9wdGlvbnMuY2xvc2VPbkNsaWNrJiZ0aGlzLl9tYXAub24oImNsaWNrIix0aGlzLl9vbkNsb3NlKSx0aGlzLm9wdGlvbnMuY2xvc2VPbk1vdmUmJnRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fb25DbG9zZSksdGhpcy5fbWFwLm9uKCJyZW1vdmUiLHRoaXMucmVtb3ZlKSx0aGlzLl91cGRhdGUoKSx0aGlzLl90cmFja1BvaW50ZXI/KHRoaXMuX21hcC5vbigibW91c2Vtb3ZlIix0aGlzLl9vbk1vdXNlTW92ZSksdGhpcy5fbWFwLm9uKCJtb3VzZXVwIix0aGlzLl9vbk1vdXNlVXApLHRoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXBvcHVwLXRyYWNrLXBvaW50ZXIiKSx0aGlzLl9tYXAuX2NhbnZhc0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJtYXBib3hnbC10cmFjay1wb2ludGVyIikpOnRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoIm9wZW4iKSksdGhpc30sbi5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLl9tYXB9LG4ucHJvdG90eXBlLnJlbW92ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250ZW50JiZyLnJlbW92ZSh0aGlzLl9jb250ZW50KSx0aGlzLl9jb250YWluZXImJihyLnJlbW92ZSh0aGlzLl9jb250YWluZXIpLGRlbGV0ZSB0aGlzLl9jb250YWluZXIpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9mZigibW92ZSIsdGhpcy5fb25DbG9zZSksdGhpcy5fbWFwLm9mZigiY2xpY2siLHRoaXMuX29uQ2xvc2UpLHRoaXMuX21hcC5vZmYoInJlbW92ZSIsdGhpcy5yZW1vdmUpLHRoaXMuX21hcC5vZmYoIm1vdXNlbW92ZSIsdGhpcy5fb25Nb3VzZU1vdmUpLHRoaXMuX21hcC5vZmYoIm1vdXNldXAiLHRoaXMuX29uTW91c2VVcCksdGhpcy5fbWFwLm9mZigiZHJhZyIsdGhpcy5fb25EcmFnKSxkZWxldGUgdGhpcy5fbWFwKSx0aGlzLmZpcmUobmV3IHQuRXZlbnQoImNsb3NlIikpLHRoaXN9LG4ucHJvdG90eXBlLmdldExuZ0xhdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9sbmdMYXR9LG4ucHJvdG90eXBlLnNldExuZ0xhdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbG5nTGF0PXQuTG5nTGF0LmNvbnZlcnQoZSksdGhpcy5fcG9zPW51bGwsdGhpcy5fdHJhY2tQb2ludGVyPSExLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vbigibW92ZSIsdGhpcy5fdXBkYXRlKSx0aGlzLl9tYXAub2ZmKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9jb250YWluZXImJnRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJtYXBib3hnbC1wb3B1cC10cmFjay1wb2ludGVyIiksdGhpcy5fbWFwLl9jYW52YXNDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibWFwYm94Z2wtdHJhY2stcG9pbnRlciIpKSx0aGlzfSxuLnByb3RvdHlwZS50cmFja1BvaW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhY2tQb2ludGVyPSEwLHRoaXMuX3Bvcz1udWxsLHRoaXMuX3VwZGF0ZSgpLHRoaXMuX21hcCYmKHRoaXMuX21hcC5vZmYoIm1vdmUiLHRoaXMuX3VwZGF0ZSksdGhpcy5fbWFwLm9uKCJtb3VzZW1vdmUiLHRoaXMuX29uTW91c2VNb3ZlKSx0aGlzLl9tYXAub24oImRyYWciLHRoaXMuX29uRHJhZyksdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpLHRoaXMuX21hcC5fY2FudmFzQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoIm1hcGJveGdsLXRyYWNrLXBvaW50ZXIiKSksdGhpc30sbi5wcm90b3R5cGUuZ2V0RWxlbWVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb250YWluZXJ9LG4ucHJvdG90eXBlLnNldFRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudCh0LndpbmRvdy5kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShlKSl9LG4ucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oZSl7dmFyIHIsbj10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT10LndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJib2R5Iik7Zm9yKGkuaW5uZXJIVE1MPWU7cj1pLmZpcnN0Q2hpbGQ7KW4uYXBwZW5kQ2hpbGQocik7cmV0dXJuIHRoaXMuc2V0RE9NQ29udGVudChuKX0sbi5wcm90b3R5cGUuZ2V0TWF4V2lkdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuc3R5bGUubWF4V2lkdGh9LG4ucHJvdG90eXBlLnNldE1heFdpZHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4V2lkdGg9dCx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5zZXRET01Db250ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVDb250ZW50KCksdGhpcy5fY29udGVudC5hcHBlbmRDaGlsZCh0KSx0aGlzLl91cGRhdGUoKSx0aGlzfSxuLnByb3RvdHlwZS5hZGRDbGFzc05hbWU9ZnVuY3Rpb24odCl7dGhpcy5fY29udGFpbmVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCh0KX0sbi5wcm90b3R5cGUucmVtb3ZlQ2xhc3NOYW1lPWZ1bmN0aW9uKHQpe3RoaXMuX2NvbnRhaW5lciYmdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUodCl9LG4ucHJvdG90eXBlLnRvZ2dsZUNsYXNzTmFtZT1mdW5jdGlvbih0KXtpZih0aGlzLl9jb250YWluZXIpcmV0dXJuIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QudG9nZ2xlKHQpfSxuLnByb3RvdHlwZS5fY3JlYXRlQ29udGVudD1mdW5jdGlvbigpe3RoaXMuX2NvbnRlbnQmJnIucmVtb3ZlKHRoaXMuX2NvbnRlbnQpLHRoaXMuX2NvbnRlbnQ9ci5jcmVhdGUoImRpdiIsIm1hcGJveGdsLXBvcHVwLWNvbnRlbnQiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5vcHRpb25zLmNsb3NlQnV0dG9uJiYodGhpcy5fY2xvc2VCdXR0b249ci5jcmVhdGUoImJ1dHRvbiIsIm1hcGJveGdsLXBvcHVwLWNsb3NlLWJ1dHRvbiIsdGhpcy5fY29udGVudCksdGhpcy5fY2xvc2VCdXR0b24udHlwZT0iYnV0dG9uIix0aGlzLl9jbG9zZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLCJDbG9zZSBwb3B1cCIpLHRoaXMuX2Nsb3NlQnV0dG9uLmlubmVySFRNTD0iJiMyMTU7Iix0aGlzLl9jbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5fb25DbG9zZSkpfSxuLnByb3RvdHlwZS5fb25Nb3VzZVVwPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZSh0LnBvaW50KX0sbi5wcm90b3R5cGUuX29uTW91c2VNb3ZlPWZ1bmN0aW9uKHQpe3RoaXMuX3VwZGF0ZSh0LnBvaW50KX0sbi5wcm90b3R5cGUuX29uRHJhZz1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUodC5wb2ludCl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxpPXRoaXMuX2xuZ0xhdHx8dGhpcy5fdHJhY2tQb2ludGVyO2lmKHRoaXMuX21hcCYmaSYmdGhpcy5fY29udGVudCYmKHRoaXMuX2NvbnRhaW5lcnx8KHRoaXMuX2NvbnRhaW5lcj1yLmNyZWF0ZSgiZGl2IiwibWFwYm94Z2wtcG9wdXAiLHRoaXMuX21hcC5nZXRDb250YWluZXIoKSksdGhpcy5fdGlwPXIuY3JlYXRlKCJkaXYiLCJtYXBib3hnbC1wb3B1cC10aXAiLHRoaXMuX2NvbnRhaW5lciksdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRlbnQpLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJnRoaXMub3B0aW9ucy5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gbi5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCl9KSksdGhpcy5fdHJhY2tQb2ludGVyJiZ0aGlzLl9jb250YWluZXIuY2xhc3NMaXN0LmFkZCgibWFwYm94Z2wtcG9wdXAtdHJhY2stcG9pbnRlciIpKSx0aGlzLm9wdGlvbnMubWF4V2lkdGgmJnRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aCE9PXRoaXMub3B0aW9ucy5tYXhXaWR0aCYmKHRoaXMuX2NvbnRhaW5lci5zdHlsZS5tYXhXaWR0aD10aGlzLm9wdGlvbnMubWF4V2lkdGgpLHRoaXMuX21hcC50cmFuc2Zvcm0ucmVuZGVyV29ybGRDb3BpZXMmJiF0aGlzLl90cmFja1BvaW50ZXImJih0aGlzLl9sbmdMYXQ9T2kodGhpcy5fbG5nTGF0LHRoaXMuX3Bvcyx0aGlzLl9tYXAudHJhbnNmb3JtKSksIXRoaXMuX3RyYWNrUG9pbnRlcnx8ZSkpe3ZhciBhPXRoaXMuX3Bvcz10aGlzLl90cmFja1BvaW50ZXImJmU/ZTp0aGlzLl9tYXAucHJvamVjdCh0aGlzLl9sbmdMYXQpLG89dGhpcy5vcHRpb25zLmFuY2hvcixzPWZ1bmN0aW9uIGUocil7aWYocil7aWYoIm51bWJlciI9PXR5cGVvZiByKXt2YXIgbj1NYXRoLnJvdW5kKE1hdGguc3FydCguNSpNYXRoLnBvdyhyLDIpKSk7cmV0dXJue2NlbnRlcjpuZXcgdC5Qb2ludCgwLDApLHRvcDpuZXcgdC5Qb2ludCgwLHIpLCJ0b3AtbGVmdCI6bmV3IHQuUG9pbnQobixuKSwidG9wLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbixuKSxib3R0b206bmV3IHQuUG9pbnQoMCwtciksImJvdHRvbS1sZWZ0IjpuZXcgdC5Qb2ludChuLC1uKSwiYm90dG9tLXJpZ2h0IjpuZXcgdC5Qb2ludCgtbiwtbiksbGVmdDpuZXcgdC5Qb2ludChyLDApLHJpZ2h0Om5ldyB0LlBvaW50KC1yLDApfX1pZihyIGluc3RhbmNlb2YgdC5Qb2ludHx8QXJyYXkuaXNBcnJheShyKSl7dmFyIGk9dC5Qb2ludC5jb252ZXJ0KHIpO3JldHVybntjZW50ZXI6aSx0b3A6aSwidG9wLWxlZnQiOmksInRvcC1yaWdodCI6aSxib3R0b206aSwiYm90dG9tLWxlZnQiOmksImJvdHRvbS1yaWdodCI6aSxsZWZ0OmkscmlnaHQ6aX19cmV0dXJue2NlbnRlcjp0LlBvaW50LmNvbnZlcnQoci5jZW50ZXJ8fFswLDBdKSx0b3A6dC5Qb2ludC5jb252ZXJ0KHIudG9wfHxbMCwwXSksInRvcC1sZWZ0Ijp0LlBvaW50LmNvbnZlcnQoclsidG9wLWxlZnQiXXx8WzAsMF0pLCJ0b3AtcmlnaHQiOnQuUG9pbnQuY29udmVydChyWyJ0b3AtcmlnaHQiXXx8WzAsMF0pLGJvdHRvbTp0LlBvaW50LmNvbnZlcnQoci5ib3R0b218fFswLDBdKSwiYm90dG9tLWxlZnQiOnQuUG9pbnQuY29udmVydChyWyJib3R0b20tbGVmdCJdfHxbMCwwXSksImJvdHRvbS1yaWdodCI6dC5Qb2ludC5jb252ZXJ0KHJbImJvdHRvbS1yaWdodCJdfHxbMCwwXSksbGVmdDp0LlBvaW50LmNvbnZlcnQoci5sZWZ0fHxbMCwwXSkscmlnaHQ6dC5Qb2ludC5jb252ZXJ0KHIucmlnaHR8fFswLDBdKX19cmV0dXJuIGUobmV3IHQuUG9pbnQoMCwwKSl9KHRoaXMub3B0aW9ucy5vZmZzZXQpO2lmKCFvKXt2YXIgbCxjPXRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aCx1PXRoaXMuX2NvbnRhaW5lci5vZmZzZXRIZWlnaHQ7bD1hLnkrcy5ib3R0b20ueTx1P1sidG9wIl06YS55PnRoaXMuX21hcC50cmFuc2Zvcm0uaGVpZ2h0LXU/WyJib3R0b20iXTpbXSxhLng8Yy8yP2wucHVzaCgibGVmdCIpOmEueD50aGlzLl9tYXAudHJhbnNmb3JtLndpZHRoLWMvMiYmbC5wdXNoKCJyaWdodCIpLG89MD09PWwubGVuZ3RoPyJib3R0b20iOmwuam9pbigiLSIpfXZhciBmPWEuYWRkKHNbb10pLnJvdW5kKCk7ci5zZXRUcmFuc2Zvcm0odGhpcy5fY29udGFpbmVyLHppW29dKyIgdHJhbnNsYXRlKCIrZi54KyJweCwiK2YueSsicHgpIiksRGkodGhpcy5fY29udGFpbmVyLG8sInBvcHVwIil9fSxuLnByb3RvdHlwZS5fb25DbG9zZT1mdW5jdGlvbigpe3RoaXMucmVtb3ZlKCl9LG59KHQuRXZlbnRlZCk7dmFyIFppPXt2ZXJzaW9uOnQudmVyc2lvbixzdXBwb3J0ZWQ6ZSxzZXRSVExUZXh0UGx1Z2luOnQuc2V0UlRMVGV4dFBsdWdpbixnZXRSVExUZXh0UGx1Z2luU3RhdHVzOnQuZ2V0UlRMVGV4dFBsdWdpblN0YXR1cyxNYXA6RWksTmF2aWdhdGlvbkNvbnRyb2w6UGksR2VvbG9jYXRlQ29udHJvbDpVaSxBdHRyaWJ1dGlvbkNvbnRyb2w6YmksU2NhbGVDb250cm9sOkhpLEZ1bGxzY3JlZW5Db250cm9sOllpLFBvcHVwOlhpLE1hcmtlcjpGaSxTdHlsZTpxZSxMbmdMYXQ6dC5MbmdMYXQsTG5nTGF0Qm91bmRzOnQuTG5nTGF0Qm91bmRzLFBvaW50OnQuUG9pbnQsTWVyY2F0b3JDb29yZGluYXRlOnQuTWVyY2F0b3JDb29yZGluYXRlLEV2ZW50ZWQ6dC5FdmVudGVkLGNvbmZpZzp0LmNvbmZpZyxwcmV3YXJtOmZ1bmN0aW9uKCl7QnQoKS5hY3F1aXJlKHp0KX0sY2xlYXJQcmV3YXJtZWRSZXNvdXJjZXM6ZnVuY3Rpb24oKXt2YXIgdD1SdDt0JiYodC5pc1ByZWxvYWRlZCgpJiYxPT09dC5udW1BY3RpdmUoKT8odC5yZWxlYXNlKHp0KSxSdD1udWxsKTpjb25zb2xlLndhcm4oIkNvdWxkIG5vdCBjbGVhciBXZWJXb3JrZXJzIHNpbmNlIHRoZXJlIGFyZSBhY3RpdmUgTWFwIGluc3RhbmNlcyB0aGF0IHN0aWxsIHJlZmVyZW5jZSBpdC4gVGhlIHByZS13YXJtZWQgV2ViV29ya2VyIHBvb2wgY2FuIG9ubHkgYmUgY2xlYXJlZCB3aGVuIGFsbCBtYXAgaW5zdGFuY2VzIGhhdmUgYmVlbiByZW1vdmVkIHdpdGggbWFwLnJlbW92ZSgpIikpfSxnZXQgYWNjZXNzVG9rZW4oKXtyZXR1cm4gdC5jb25maWcuQUNDRVNTX1RPS0VOfSxzZXQgYWNjZXNzVG9rZW4oZSl7dC5jb25maWcuQUNDRVNTX1RPS0VOPWV9LGdldCBiYXNlQXBpVXJsKCl7cmV0dXJuIHQuY29uZmlnLkFQSV9VUkx9LHNldCBiYXNlQXBpVXJsKGUpe3QuY29uZmlnLkFQSV9VUkw9ZX0sZ2V0IHdvcmtlckNvdW50KCl7cmV0dXJuIER0LndvcmtlckNvdW50fSxzZXQgd29ya2VyQ291bnQodCl7RHQud29ya2VyQ291bnQ9dH0sZ2V0IG1heFBhcmFsbGVsSW1hZ2VSZXF1ZXN0cygpe3JldHVybiB0LmNvbmZpZy5NQVhfUEFSQUxMRUxfSU1BR0VfUkVRVUVTVFN9LHNldCBtYXhQYXJhbGxlbEltYWdlUmVxdWVzdHMoZSl7dC5jb25maWcuTUFYX1BBUkFMTEVMX0lNQUdFX1JFUVVFU1RTPWV9LGNsZWFyU3RvcmFnZTpmdW5jdGlvbihlKXt0LmNsZWFyVGlsZUNhY2hlKGUpfSx3b3JrZXJVcmw6IiJ9O3JldHVybiBaaX0pKSxyfSkpfSx7fV0sNDQyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9ub3JtYWxpemUiKSxpPXQoImdsLW1hdDQvY3JlYXRlIiksYT10KCJnbC1tYXQ0L2Nsb25lIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJnbC1tYXQ0L2ludmVydCIpLGw9dCgiZ2wtbWF0NC90cmFuc3Bvc2UiKSxjPXtsZW5ndGg6dCgiZ2wtdmVjMy9sZW5ndGgiKSxub3JtYWxpemU6dCgiZ2wtdmVjMy9ub3JtYWxpemUiKSxkb3Q6dCgiZ2wtdmVjMy9kb3QiKSxjcm9zczp0KCJnbC12ZWMzL2Nyb3NzIil9LHU9aSgpLGY9aSgpLGg9WzAsMCwwLDBdLHA9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxkPVswLDAsMF07ZnVuY3Rpb24gbSh0LGUscixuLGkpe3RbMF09ZVswXSpuK3JbMF0qaSx0WzFdPWVbMV0qbityWzFdKmksdFsyXT1lWzJdKm4rclsyXSppfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGcsdil7aWYoZXx8KGU9WzAsMCwwXSkscnx8KHI9WzAsMCwwXSksaXx8KGk9WzAsMCwwXSksZ3x8KGc9WzAsMCwwLDFdKSx2fHwodj1bMCwwLDAsMV0pLCFuKHUsdCkpcmV0dXJuITE7aWYoYShmLHUpLGZbM109MCxmWzddPTAsZlsxMV09MCxmWzE1XT0xLE1hdGguYWJzKG8oZik8MWUtOCkpcmV0dXJuITE7dmFyIHkseCxiLF8sdyxULGssQT11WzNdLE09dVs3XSxTPXVbMTFdLEU9dVsxMl0sTD11WzEzXSxDPXVbMTRdLFA9dVsxNV07aWYoMCE9PUF8fDAhPT1NfHwwIT09Uyl7aWYoaFswXT1BLGhbMV09TSxoWzJdPVMsaFszXT1QLCFzKGYsZikpcmV0dXJuITE7bChmLGYpLHk9ZyxiPWYsXz0oeD1oKVswXSx3PXhbMV0sVD14WzJdLGs9eFszXSx5WzBdPWJbMF0qXytiWzRdKncrYls4XSpUK2JbMTJdKmsseVsxXT1iWzFdKl8rYls1XSp3K2JbOV0qVCtiWzEzXSprLHlbMl09YlsyXSpfK2JbNl0qdytiWzEwXSpUK2JbMTRdKmsseVszXT1iWzNdKl8rYls3XSp3K2JbMTFdKlQrYlsxNV0qa31lbHNlIGdbMF09Z1sxXT1nWzJdPTAsZ1szXT0xO2lmKGVbMF09RSxlWzFdPUwsZVsyXT1DLGZ1bmN0aW9uKHQsZSl7dFswXVswXT1lWzBdLHRbMF1bMV09ZVsxXSx0WzBdWzJdPWVbMl0sdFsxXVswXT1lWzRdLHRbMV1bMV09ZVs1XSx0WzFdWzJdPWVbNl0sdFsyXVswXT1lWzhdLHRbMl1bMV09ZVs5XSx0WzJdWzJdPWVbMTBdfShwLHUpLHJbMF09Yy5sZW5ndGgocFswXSksYy5ub3JtYWxpemUocFswXSxwWzBdKSxpWzBdPWMuZG90KHBbMF0scFsxXSksbShwWzFdLHBbMV0scFswXSwxLC1pWzBdKSxyWzFdPWMubGVuZ3RoKHBbMV0pLGMubm9ybWFsaXplKHBbMV0scFsxXSksaVswXS89clsxXSxpWzFdPWMuZG90KHBbMF0scFsyXSksbShwWzJdLHBbMl0scFswXSwxLC1pWzFdKSxpWzJdPWMuZG90KHBbMV0scFsyXSksbShwWzJdLHBbMl0scFsxXSwxLC1pWzJdKSxyWzJdPWMubGVuZ3RoKHBbMl0pLGMubm9ybWFsaXplKHBbMl0scFsyXSksaVsxXS89clsyXSxpWzJdLz1yWzJdLGMuY3Jvc3MoZCxwWzFdLHBbMl0pLGMuZG90KHBbMF0sZCk8MClmb3IodmFyIEk9MDtJPDM7SSsrKXJbSV0qPS0xLHBbSV1bMF0qPS0xLHBbSV1bMV0qPS0xLHBbSV1bMl0qPS0xO3JldHVybiB2WzBdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0tcFsxXVsxXS1wWzJdWzJdLDApKSx2WzFdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0rcFsxXVsxXS1wWzJdWzJdLDApKSx2WzJdPS41Kk1hdGguc3FydChNYXRoLm1heCgxLXBbMF1bMF0tcFsxXVsxXStwWzJdWzJdLDApKSx2WzNdPS41Kk1hdGguc3FydChNYXRoLm1heCgxK3BbMF1bMF0rcFsxXVsxXStwWzJdWzJdLDApKSxwWzJdWzFdPnBbMV1bMl0mJih2WzBdPS12WzBdKSxwWzBdWzJdPnBbMl1bMF0mJih2WzFdPS12WzFdKSxwWzFdWzBdPnBbMF1bMV0mJih2WzJdPS12WzJdKSwhMH19LHsiLi9ub3JtYWxpemUiOjQ0MywiZ2wtbWF0NC9jbG9uZSI6MjcyLCJnbC1tYXQ0L2NyZWF0ZSI6Mjc0LCJnbC1tYXQ0L2RldGVybWluYW50IjoyNzUsImdsLW1hdDQvaW52ZXJ0IjoyODcsImdsLW1hdDQvdHJhbnNwb3NlIjozMDAsImdsLXZlYzMvY3Jvc3MiOjM1MCwiZ2wtdmVjMy9kb3QiOjM1NSwiZ2wtdmVjMy9sZW5ndGgiOjM2NSwiZ2wtdmVjMy9ub3JtYWxpemUiOjM3Mn1dLDQ0MzpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMTVdO2lmKDA9PT1yKXJldHVybiExO2Zvcih2YXIgbj0xL3IsaT0wO2k8MTY7aSsrKXRbaV09ZVtpXSpuO3JldHVybiEwfX0se31dLDQ0NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoImdsLXZlYzMvbGVycCIpLGk9dCgibWF0NC1yZWNvbXBvc2UiKSxhPXQoIm1hdDQtZGVjb21wb3NlIiksbz10KCJnbC1tYXQ0L2RldGVybWluYW50Iikscz10KCJxdWF0LXNsZXJwIiksbD1mKCksYz1mKCksdT1mKCk7ZnVuY3Rpb24gZigpe3JldHVybnt0cmFuc2xhdGU6aCgpLHNjYWxlOmgoMSksc2tldzpoKCkscGVyc3BlY3RpdmU6WzAsMCwwLDFdLHF1YXRlcm5pb246WzAsMCwwLDFdfX1mdW5jdGlvbiBoKHQpe3JldHVyblt0fHwwLHR8fDAsdHx8MF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2lmKDA9PT1vKGUpfHwwPT09byhyKSlyZXR1cm4hMTt2YXIgaD1hKGUsbC50cmFuc2xhdGUsbC5zY2FsZSxsLnNrZXcsbC5wZXJzcGVjdGl2ZSxsLnF1YXRlcm5pb24pLHA9YShyLGMudHJhbnNsYXRlLGMuc2NhbGUsYy5za2V3LGMucGVyc3BlY3RpdmUsYy5xdWF0ZXJuaW9uKTtyZXR1cm4hKCFofHwhcCkmJihuKHUudHJhbnNsYXRlLGwudHJhbnNsYXRlLGMudHJhbnNsYXRlLGYpLG4odS5za2V3LGwuc2tldyxjLnNrZXcsZiksbih1LnNjYWxlLGwuc2NhbGUsYy5zY2FsZSxmKSxuKHUucGVyc3BlY3RpdmUsbC5wZXJzcGVjdGl2ZSxjLnBlcnNwZWN0aXZlLGYpLHModS5xdWF0ZXJuaW9uLGwucXVhdGVybmlvbixjLnF1YXRlcm5pb24sZiksaSh0LHUudHJhbnNsYXRlLHUuc2NhbGUsdS5za2V3LHUucGVyc3BlY3RpdmUsdS5xdWF0ZXJuaW9uKSwhMCl9fSx7ImdsLW1hdDQvZGV0ZXJtaW5hbnQiOjI3NSwiZ2wtdmVjMy9sZXJwIjozNjYsIm1hdDQtZGVjb21wb3NlIjo0NDIsIm1hdDQtcmVjb21wb3NlIjo0NDUsInF1YXQtc2xlcnAiOjUwNX1dLDQ0NTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXtpZGVudGl0eTp0KCJnbC1tYXQ0L2lkZW50aXR5IiksdHJhbnNsYXRlOnQoImdsLW1hdDQvdHJhbnNsYXRlIiksbXVsdGlwbHk6dCgiZ2wtbWF0NC9tdWx0aXBseSIpLGNyZWF0ZTp0KCJnbC1tYXQ0L2NyZWF0ZSIpLHNjYWxlOnQoImdsLW1hdDQvc2NhbGUiKSxmcm9tUm90YXRpb25UcmFuc2xhdGlvbjp0KCJnbC1tYXQ0L2Zyb21Sb3RhdGlvblRyYW5zbGF0aW9uIil9LGk9KG4uY3JlYXRlKCksbi5jcmVhdGUoKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyxzKXtyZXR1cm4gbi5pZGVudGl0eSh0KSxuLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHQscyxlKSx0WzNdPW9bMF0sdFs3XT1vWzFdLHRbMTFdPW9bMl0sdFsxNV09b1szXSxuLmlkZW50aXR5KGkpLDAhPT1hWzJdJiYoaVs5XT1hWzJdLG4ubXVsdGlwbHkodCx0LGkpKSwwIT09YVsxXSYmKGlbOV09MCxpWzhdPWFbMV0sbi5tdWx0aXBseSh0LHQsaSkpLDAhPT1hWzBdJiYoaVs4XT0wLGlbNF09YVswXSxuLm11bHRpcGx5KHQsdCxpKSksbi5zY2FsZSh0LHQsciksdH19LHsiZ2wtbWF0NC9jcmVhdGUiOjI3NCwiZ2wtbWF0NC9mcm9tUm90YXRpb25UcmFuc2xhdGlvbiI6Mjc4LCJnbC1tYXQ0L2lkZW50aXR5IjoyODUsImdsLW1hdDQvbXVsdGlwbHkiOjI4OSwiZ2wtbWF0NC9zY2FsZSI6Mjk3LCJnbC1tYXQ0L3RyYW5zbGF0ZSI6Mjk5fV0sNDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1NYXRoLmxvZzJ8fGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KSpNYXRoLkxPRzJFfX0se31dLDQ0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaW5hcnktc2VhcmNoLWJvdW5kcyIpLGk9dCgibWF0NC1pbnRlcnBvbGF0ZSIpLGE9dCgiZ2wtbWF0NC9pbnZlcnQiKSxvPXQoImdsLW1hdDQvcm90YXRlWCIpLHM9dCgiZ2wtbWF0NC9yb3RhdGVZIiksbD10KCJnbC1tYXQ0L3JvdGF0ZVoiKSxjPXQoImdsLW1hdDQvbG9va0F0IiksdT10KCJnbC1tYXQ0L3RyYW5zbGF0ZSIpLGY9KHQoImdsLW1hdDQvc2NhbGUiKSx0KCJnbC12ZWMzL25vcm1hbGl6ZSIpKSxoPVswLDAsMF07ZnVuY3Rpb24gcCh0KXt0aGlzLl9jb21wb25lbnRzPXQuc2xpY2UoKSx0aGlzLl90aW1lPVswXSx0aGlzLnByZXZNYXRyaXg9dC5zbGljZSgpLHRoaXMubmV4dE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZE1hdHJpeD10LnNsaWNlKCksdGhpcy5jb21wdXRlZEludmVyc2U9dC5zbGljZSgpLHRoaXMuY29tcHV0ZWRFeWU9WzAsMCwwXSx0aGlzLmNvbXB1dGVkVXA9WzAsMCwwXSx0aGlzLmNvbXB1dGVkQ2VudGVyPVswLDAsMF0sdGhpcy5jb21wdXRlZFJhZGl1cz1bMF0sdGhpcy5fbGltaXRzPVstMS8wLDEvMF19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcCgodD10fHx7fSkubWF0cml4fHxbMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMV0pfTt2YXIgZD1wLnByb3RvdHlwZTtkLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90aW1lLHI9bi5sZShlLHQpLG89dGhpcy5jb21wdXRlZE1hdHJpeDtpZighKHI8MCkpe3ZhciBzPXRoaXMuX2NvbXBvbmVudHM7aWYocj09PWUubGVuZ3RoLTEpZm9yKHZhciBsPTE2KnIsYz0wO2M8MTY7KytjKW9bY109c1tsKytdO2Vsc2V7dmFyIHU9ZVtyKzFdLWVbcl0saD0obD0xNipyLHRoaXMucHJldk1hdHJpeCkscD0hMDtmb3IoYz0wO2M8MTY7KytjKWhbY109c1tsKytdO3ZhciBkPXRoaXMubmV4dE1hdHJpeDtmb3IoYz0wO2M8MTY7KytjKWRbY109c1tsKytdLHA9cCYmaFtjXT09PWRbY107aWYodTwxZS02fHxwKWZvcihjPTA7YzwxNjsrK2Mpb1tjXT1oW2NdO2Vsc2UgaShvLGgsZCwodC1lW3JdKS91KX12YXIgbT10aGlzLmNvbXB1dGVkVXA7bVswXT1vWzFdLG1bMV09b1s1XSxtWzJdPW9bOV0sZihtLG0pO3ZhciBnPXRoaXMuY29tcHV0ZWRJbnZlcnNlO2EoZyxvKTt2YXIgdj10aGlzLmNvbXB1dGVkRXllLHk9Z1sxNV07dlswXT1nWzEyXS95LHZbMV09Z1sxM10veSx2WzJdPWdbMTRdL3k7dmFyIHg9dGhpcy5jb21wdXRlZENlbnRlcixiPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO2ZvcihjPTA7YzwzOysrYyl4W2NdPXZbY10tb1syKzQqY10qYn19LGQuaWRsZT1mdW5jdGlvbih0KXtpZighKHQ8dGhpcy5sYXN0VCgpKSl7Zm9yKHZhciBlPXRoaXMuX2NvbXBvbmVudHMscj1lLmxlbmd0aC0xNixuPTA7bjwxNjsrK24pZS5wdXNoKGVbcisrXSk7dGhpcy5fdGltZS5wdXNoKHQpfX0sZC5mbHVzaD1mdW5jdGlvbih0KXt2YXIgZT1uLmd0KHRoaXMuX3RpbWUsdCktMjtlPDB8fCh0aGlzLl90aW1lLnNwbGljZSgwLGUpLHRoaXMuX2NvbXBvbmVudHMuc3BsaWNlKDAsMTYqZSkpfSxkLmxhc3RUPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RpbWVbdGhpcy5fdGltZS5sZW5ndGgtMV19LGQubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fGgsbj1ufHx0aGlzLmNvbXB1dGVkVXAsdGhpcy5zZXRNYXRyaXgodCxjKHRoaXMuY29tcHV0ZWRNYXRyaXgsZSxyLG4pKTtmb3IodmFyIGk9MCxhPTA7YTwzOysrYSlpKz1NYXRoLnBvdyhyW2FdLWVbYV0sMik7aT1NYXRoLmxvZyhNYXRoLnNxcnQoaSkpLHRoaXMuY29tcHV0ZWRSYWRpdXNbMF09aX0sZC5yb3RhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZEludmVyc2U7ZSYmcyhpLGksZSksciYmbyhpLGksciksbiYmbChpLGksbiksdGhpcy5zZXRNYXRyaXgodCxhKHRoaXMuY29tcHV0ZWRNYXRyaXgsaSkpfTt2YXIgbT1bMCwwLDBdO2QucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe21bMF09LShlfHwwKSxtWzFdPS0ocnx8MCksbVsyXT0tKG58fDApLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRJbnZlcnNlO3UoaSxpLG0pLHRoaXMuc2V0TWF0cml4KHQsYShpLGkpKX0sZC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7bVswXT1lfHwwLG1bMV09cnx8MCxtWzJdPW58fDAsdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDt1KGksaSxtKSx0aGlzLnNldE1hdHJpeCh0LGkpfSxkLnNldE1hdHJpeD1mdW5jdGlvbih0LGUpe2lmKCEodDx0aGlzLmxhc3RUKCkpKXt0aGlzLl90aW1lLnB1c2godCk7Zm9yKHZhciByPTA7cjwxNjsrK3IpdGhpcy5fY29tcG9uZW50cy5wdXNoKGVbcl0pfX0sZC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe3RoaXMuY29tcHV0ZWRSYWRpdXNbMF09ZX0sZC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2xpbWl0cztyWzBdPXQsclsxXT1lfSxkLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2xpbWl0cztyZXR1cm4gdD8odFswXT1lWzBdLHRbMV09ZVsxXSx0KTplfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L2xvb2tBdCI6Mjg4LCJnbC1tYXQ0L3JvdGF0ZVgiOjI5NCwiZ2wtbWF0NC9yb3RhdGVZIjoyOTUsImdsLW1hdDQvcm90YXRlWiI6Mjk2LCJnbC1tYXQ0L3NjYWxlIjoyOTcsImdsLW1hdDQvdHJhbnNsYXRlIjoyOTksImdsLXZlYzMvbm9ybWFsaXplIjozNzIsIm1hdDQtaW50ZXJwb2xhdGUiOjQ0NH1dLDQ0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTwzKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKXJbaV09aTtyZXR1cm4gMj09PWUmJnRbMF1bMF09PT10WzFdWzBdJiZ0WzBdWzFdPT09dFsxXVsxXT9bMF06cn12YXIgYT1uZXcgQXJyYXkoZSk7Zm9yKGk9MDtpPGU7KytpKWFbaV09aTthLnNvcnQoKGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXVswXS10W3JdWzBdO3JldHVybiBufHx0W2VdWzFdLXRbcl1bMV19KSk7dmFyIG89W2FbMF0sYVsxXV0scz1bYVswXSxhWzFdXTtmb3IoaT0yO2k8ZTsrK2kpe2Zvcih2YXIgbD1hW2ldLGM9dFtsXSx1PW8ubGVuZ3RoO3U+MSYmbih0W29bdS0yXV0sdFtvW3UtMV1dLGMpPD0wOyl1LT0xLG8ucG9wKCk7Zm9yKG8ucHVzaChsKSx1PXMubGVuZ3RoO3U+MSYmbih0W3NbdS0yXV0sdFtzW3UtMV1dLGMpPj0wOyl1LT0xLHMucG9wKCk7cy5wdXNoKGwpfXI9bmV3IEFycmF5KHMubGVuZ3RoK28ubGVuZ3RoLTIpO2Zvcih2YXIgZj0wLGg9KGk9MCxvLmxlbmd0aCk7aTxoOysraSlyW2YrK109b1tpXTtmb3IodmFyIHA9cy5sZW5ndGgtMjtwPjA7LS1wKXJbZisrXT1zW3BdO3JldHVybiByfTt2YXIgbj10KCJyb2J1c3Qtb3JpZW50YXRpb24iKVszXX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNH1dLDQ0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT10LHQ9d2luZG93KTt2YXIgcj0wLGk9MCxhPTAsbz17c2hpZnQ6ITEsYWx0OiExLGNvbnRyb2w6ITEsbWV0YTohMX0scz0hMTtmdW5jdGlvbiBsKHQpe3ZhciBlPSExO3JldHVybiJhbHRLZXkiaW4gdCYmKGU9ZXx8dC5hbHRLZXkhPT1vLmFsdCxvLmFsdD0hIXQuYWx0S2V5KSwic2hpZnRLZXkiaW4gdCYmKGU9ZXx8dC5zaGlmdEtleSE9PW8uc2hpZnQsby5zaGlmdD0hIXQuc2hpZnRLZXkpLCJjdHJsS2V5ImluIHQmJihlPWV8fHQuY3RybEtleSE9PW8uY29udHJvbCxvLmNvbnRyb2w9ISF0LmN0cmxLZXkpLCJtZXRhS2V5ImluIHQmJihlPWV8fHQubWV0YUtleSE9PW8ubWV0YSxvLm1ldGE9ISF0Lm1ldGFLZXkpLGV9ZnVuY3Rpb24gYyh0LHMpe3ZhciBjPW4ueChzKSx1PW4ueShzKTsiYnV0dG9ucyJpbiBzJiYodD0wfHMuYnV0dG9ucyksKHQhPT1yfHxjIT09aXx8dSE9PWF8fGwocykpJiYocj0wfHQsaT1jfHwwLGE9dXx8MCxlJiZlKHIsaSxhLG8pKX1mdW5jdGlvbiB1KHQpe2MoMCx0KX1mdW5jdGlvbiBmKCl7KHJ8fGl8fGF8fG8uc2hpZnR8fG8uYWx0fHxvLm1ldGF8fG8uY29udHJvbCkmJihpPWE9MCxyPTAsby5zaGlmdD1vLmFsdD1vLmNvbnRyb2w9by5tZXRhPSExLGUmJmUoMCwwLDAsbykpfWZ1bmN0aW9uIGgodCl7bCh0KSYmZSYmZShyLGksYSxvKX1mdW5jdGlvbiBwKHQpezA9PT1uLmJ1dHRvbnModCk/YygwLHQpOmMocix0KX1mdW5jdGlvbiBkKHQpe2MocnxuLmJ1dHRvbnModCksdCl9ZnVuY3Rpb24gbSh0KXtjKHImfm4uYnV0dG9ucyh0KSx0KX1mdW5jdGlvbiBnKCl7c3x8KHM9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHApLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixkKSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLG0pLHQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VsZWF2ZSIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWVudGVyIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdSksdC5hZGRFdmVudExpc3RlbmVyKCJibHVyIixmKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLGgpLHQhPT13aW5kb3cmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsaCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSkpfWcoKTt2YXIgdj17ZWxlbWVudDp0fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModix7ZW5hYmxlZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlKXtlP2coKTpmdW5jdGlvbigpe2lmKCFzKXJldHVybjtzPSExLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIixwKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsZCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixtKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsZiksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksdC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixoKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIixoKSx0IT09d2luZG93JiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLGYpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsaCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLGgpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsaCkpfSgpfSxlbnVtZXJhYmxlOiEwfSxidXR0b25zOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcn0sZW51bWVyYWJsZTohMH0seDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl9LGVudW1lcmFibGU6ITB9LHk6e2dldDpmdW5jdGlvbigpe3JldHVybiBhfSxlbnVtZXJhYmxlOiEwfSxtb2RzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gb30sZW51bWVyYWJsZTohMH19KSx2fTt2YXIgbj10KCJtb3VzZS1ldmVudCIpfSx7Im1vdXNlLWV2ZW50Ijo0NTF9XSw0NTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj17bGVmdDowLHRvcDowfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2U9ZXx8dC5jdXJyZW50VGFyZ2V0fHx0LnNyY0VsZW1lbnQsQXJyYXkuaXNBcnJheShyKXx8KHI9WzAsMF0pO3ZhciBpPXQuY2xpZW50WHx8MCxhPXQuY2xpZW50WXx8MCxvPShzPWUscz09PXdpbmRvd3x8cz09PWRvY3VtZW50fHxzPT09ZG9jdW1lbnQuYm9keT9uOnMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO3ZhciBzO3JldHVybiByWzBdPWktby5sZWZ0LHJbMV09YS1vLnRvcCxyfX0se31dLDQ1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3JldHVybiB0LnRhcmdldHx8dC5zcmNFbGVtZW50fHx3aW5kb3d9ci5idXR0b25zPWZ1bmN0aW9uKHQpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7aWYoImJ1dHRvbnMiaW4gdClyZXR1cm4gdC5idXR0b25zO2lmKCJ3aGljaCJpbiB0KXtpZigyPT09KGU9dC53aGljaCkpcmV0dXJuIDQ7aWYoMz09PWUpcmV0dXJuIDI7aWYoZT4wKXJldHVybiAxPDxlLTF9ZWxzZSBpZigiYnV0dG9uImluIHQpe3ZhciBlO2lmKDE9PT0oZT10LmJ1dHRvbikpcmV0dXJuIDQ7aWYoMj09PWUpcmV0dXJuIDI7aWYoZT49MClyZXR1cm4gMTw8ZX19cmV0dXJuIDB9LHIuZWxlbWVudD1uLHIueD1mdW5jdGlvbih0KXtpZigib2JqZWN0Ij09dHlwZW9mIHQpe2lmKCJvZmZzZXRYImluIHQpcmV0dXJuIHQub2Zmc2V0WDt2YXIgZT1uKHQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiB0LmNsaWVudFgtZS5sZWZ0fXJldHVybiAwfSxyLnk9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtpZigib2Zmc2V0WSJpbiB0KXJldHVybiB0Lm9mZnNldFk7dmFyIGU9bih0KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4gdC5jbGllbnRZLWUudG9wfXJldHVybiAwfX0se31dLDQ1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0by1weCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ImZ1bmN0aW9uIj09dHlwZW9mIHQmJihyPSEhZSxlPXQsdD13aW5kb3cpO3ZhciBpPW4oImV4Iix0KSxhPWZ1bmN0aW9uKHQpe3ImJnQucHJldmVudERlZmF1bHQoKTt2YXIgbj10LmRlbHRhWHx8MCxhPXQuZGVsdGFZfHwwLG89dC5kZWx0YVp8fDAscz0xO3N3aXRjaCh0LmRlbHRhTW9kZSl7Y2FzZSAxOnM9aTticmVhaztjYXNlIDI6cz13aW5kb3cuaW5uZXJIZWlnaHR9aWYoYSo9cyxvKj1zLChuKj1zKXx8YXx8bylyZXR1cm4gZShuLGEsbyx0KX07cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLGEpLGF9fSx7InRvLXB4Ijo1NzR9XSw0NTM6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxyKXsoZnVuY3Rpb24oKXsKLyohIE5hdGl2ZSBQcm9taXNlIE9ubHkKICAgIHYwLjguMSAoYykgS3lsZSBTaW1wc29uCiAgICBNSVQgTGljZW5zZTogaHR0cDovL2dldGlmeS5taXQtbGljZW5zZS5vcmcKKi8KIWZ1bmN0aW9uKHQscixuKXtyW3RdPXJbdF18fG4oKSx2b2lkIDAhPT1lJiZlLmV4cG9ydHMmJihlLmV4cG9ydHM9clt0XSl9KCJQcm9taXNlIix2b2lkIDAhPT10P3Q6dGhpcywoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHQsZSxuLGk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxhPXZvaWQgMCE9PXI/ZnVuY3Rpb24odCl7cmV0dXJuIHIodCl9OnNldFRpbWVvdXQ7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwieCIse30pLHQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3ZhbHVlOnIsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExIT09bn0pfX1jYXRjaChlKXt0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fWZ1bmN0aW9uIG8odCxyKXtuLmFkZCh0LHIpLGV8fChlPWEobi5kcmFpbikpfWZ1bmN0aW9uIHModCl7dmFyIGUscj10eXBlb2YgdDtyZXR1cm4gbnVsbD09dHx8Im9iamVjdCIhPXImJiJmdW5jdGlvbiIhPXJ8fChlPXQudGhlbiksImZ1bmN0aW9uIj09dHlwZW9mIGUmJmV9ZnVuY3Rpb24gbCgpe2Zvcih2YXIgdD0wO3Q8dGhpcy5jaGFpbi5sZW5ndGg7dCsrKWModGhpcywxPT09dGhpcy5zdGF0ZT90aGlzLmNoYWluW3RdLnN1Y2Nlc3M6dGhpcy5jaGFpblt0XS5mYWlsdXJlLHRoaXMuY2hhaW5bdF0pO3RoaXMuY2hhaW4ubGVuZ3RoPTB9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG4saTt0cnl7ITE9PT1lP3IucmVqZWN0KHQubXNnKToobj0hMD09PWU/dC5tc2c6ZS5jYWxsKHZvaWQgMCx0Lm1zZykpPT09ci5wcm9taXNlP3IucmVqZWN0KFR5cGVFcnJvcigiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooaT1zKG4pKT9pLmNhbGwobixyLnJlc29sdmUsci5yZWplY3QpOnIucmVzb2x2ZShuKX1jYXRjaCh0KXtyLnJlamVjdCh0KX19ZnVuY3Rpb24gdSh0KXt2YXIgZSxyPXRoaXM7aWYoIXIudHJpZ2dlcmVkKXtyLnRyaWdnZXJlZD0hMCxyLmRlZiYmKHI9ci5kZWYpO3RyeXsoZT1zKHQpKT9vKChmdW5jdGlvbigpe3ZhciBuPW5ldyBwKHIpO3RyeXtlLmNhbGwodCwoZnVuY3Rpb24oKXt1LmFwcGx5KG4sYXJndW1lbnRzKX0pLChmdW5jdGlvbigpe2YuYXBwbHkobixhcmd1bWVudHMpfSkpfWNhdGNoKHQpe2YuY2FsbChuLHQpfX0pKTooci5tc2c9dCxyLnN0YXRlPTEsci5jaGFpbi5sZW5ndGg+MCYmbyhsLHIpKX1jYXRjaCh0KXtmLmNhbGwobmV3IHAociksdCl9fX1mdW5jdGlvbiBmKHQpe3ZhciBlPXRoaXM7ZS50cmlnZ2VyZWR8fChlLnRyaWdnZXJlZD0hMCxlLmRlZiYmKGU9ZS5kZWYpLGUubXNnPXQsZS5zdGF0ZT0yLGUuY2hhaW4ubGVuZ3RoPjAmJm8obCxlKSl9ZnVuY3Rpb24gaCh0LGUscixuKXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKykhZnVuY3Rpb24oaSl7dC5yZXNvbHZlKGVbaV0pLnRoZW4oKGZ1bmN0aW9uKHQpe3IoaSx0KX0pLG4pfShpKX1mdW5jdGlvbiBwKHQpe3RoaXMuZGVmPXQsdGhpcy50cmlnZ2VyZWQ9ITF9ZnVuY3Rpb24gZCh0KXt0aGlzLnByb21pc2U9dCx0aGlzLnN0YXRlPTAsdGhpcy50cmlnZ2VyZWQ9ITEsdGhpcy5jaGFpbj1bXSx0aGlzLm1zZz12b2lkIDB9ZnVuY3Rpb24gbSh0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7aWYoMCE9PXRoaXMuX19OUE9fXyl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIHByb21pc2UiKTt0aGlzLl9fTlBPX189MTt2YXIgZT1uZXcgZCh0aGlzKTt0aGlzLnRoZW49ZnVuY3Rpb24odCxyKXt2YXIgbj17c3VjY2VzczoiZnVuY3Rpb24iIT10eXBlb2YgdHx8dCxmYWlsdXJlOiJmdW5jdGlvbiI9PXR5cGVvZiByJiZyfTtyZXR1cm4gbi5wcm9taXNlPW5ldyB0aGlzLmNvbnN0cnVjdG9yKChmdW5jdGlvbih0LGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0fHwiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7bi5yZXNvbHZlPXQsbi5yZWplY3Q9ZX0pKSxlLmNoYWluLnB1c2gobiksMCE9PWUuc3RhdGUmJm8obCxlKSxuLnByb21pc2V9LHRoaXMuY2F0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9O3RyeXt0LmNhbGwodm9pZCAwLChmdW5jdGlvbih0KXt1LmNhbGwoZSx0KX0pLChmdW5jdGlvbih0KXtmLmNhbGwoZSx0KX0pKX1jYXRjaCh0KXtmLmNhbGwoZSx0KX19bj1mdW5jdGlvbigpe3ZhciB0LHIsbjtmdW5jdGlvbiBpKHQsZSl7dGhpcy5mbj10LHRoaXMuc2VsZj1lLHRoaXMubmV4dD12b2lkIDB9cmV0dXJue2FkZDpmdW5jdGlvbihlLGEpe249bmV3IGkoZSxhKSxyP3IubmV4dD1uOnQ9bixyPW4sbj12b2lkIDB9LGRyYWluOmZ1bmN0aW9uKCl7dmFyIG49dDtmb3IodD1yPWU9dm9pZCAwO247KW4uZm4uY2FsbChuLnNlbGYpLG49bi5uZXh0fX19KCk7dmFyIGc9dCh7fSwiY29uc3RydWN0b3IiLG0sITEpO3JldHVybiBtLnByb3RvdHlwZT1nLHQoZywiX19OUE9fXyIsMCwhMSksdChtLCJyZXNvbHZlIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJvYmplY3QiPT10eXBlb2YgdCYmMT09PXQuX19OUE9fXz90Om5ldyB0aGlzKChmdW5jdGlvbihlLHIpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHwiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBUeXBlRXJyb3IoIk5vdCBhIGZ1bmN0aW9uIik7ZSh0KX0pKX0pKSx0KG0sInJlamVjdCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdGhpcygoZnVuY3Rpb24oZSxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO3IodCl9KSl9KSksdChtLCJhbGwiLChmdW5jdGlvbih0KXt2YXIgZT10aGlzO3JldHVybiJbb2JqZWN0IEFycmF5XSIhPWkuY2FsbCh0KT9lLnJlamVjdChUeXBlRXJyb3IoIk5vdCBhbiBhcnJheSIpKTowPT09dC5sZW5ndGg/ZS5yZXNvbHZlKFtdKTpuZXcgZSgoZnVuY3Rpb24ocixuKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG4pdGhyb3cgVHlwZUVycm9yKCJOb3QgYSBmdW5jdGlvbiIpO3ZhciBpPXQubGVuZ3RoLGE9QXJyYXkoaSksbz0wO2goZSx0LChmdW5jdGlvbih0LGUpe2FbdF09ZSwrK289PT1pJiZyKGEpfSksbil9KSl9KSksdChtLCJyYWNlIiwoZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4iW29iamVjdCBBcnJheV0iIT1pLmNhbGwodCk/ZS5yZWplY3QoVHlwZUVycm9yKCJOb3QgYW4gYXJyYXkiKSk6bmV3IGUoKGZ1bmN0aW9uKHIsbil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJ8fCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IFR5cGVFcnJvcigiTm90IGEgZnVuY3Rpb24iKTtoKGUsdCwoZnVuY3Rpb24odCxlKXtyKGUpfSksbil9KSl9KSksbX0pKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSx0KCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUpfSx7dGltZXJzOjU3MX1dLDQ1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXt0aHJvdyBuZXcgRXJyb3IoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyOiAiK3QpfSJvYmplY3QiIT10eXBlb2YgdCYmZSgiTXVzdCBzcGVjaWZ5IGFyZ3VtZW50cyIpO3ZhciByPXQub3JkZXI7QXJyYXkuaXNBcnJheShyKXx8ZSgiTXVzdCBzcGVjaWZ5IG9yZGVyIik7dmFyIGE9dC5hcnJheUFyZ3VtZW50c3x8MTthPDEmJmUoIk11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgYXJyYXkgYXJndW1lbnQiKTt2YXIgbz10LnNjYWxhckFyZ3VtZW50c3x8MDtvPDAmJmUoIlNjYWxhciBhcmcgY291bnQgbXVzdCBiZSA+IDAiKTsiZnVuY3Rpb24iIT10eXBlb2YgdC52ZXJ0ZXgmJmUoIk11c3Qgc3BlY2lmeSB2ZXJ0ZXggY3JlYXRpb24gZnVuY3Rpb24iKTsiZnVuY3Rpb24iIT10eXBlb2YgdC5jZWxsJiZlKCJNdXN0IHNwZWNpZnkgY2VsbCBjcmVhdGlvbiBmdW5jdGlvbiIpOyJmdW5jdGlvbiIhPXR5cGVvZiB0LnBoYXNlJiZlKCJNdXN0IHNwZWNpZnkgcGhhc2UgZnVuY3Rpb24iKTtmb3IodmFyIHM9dC5nZXR0ZXJzfHxbXSxsPW5ldyBBcnJheShhKSxjPTA7YzxhOysrYylzLmluZGV4T2YoYyk+PTA/bFtjXT0hMDpsW2NdPSExO3JldHVybiBmdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGw9W3Msb10uam9pbigiLCIpO3JldHVybigwLGlbbF0pKHQsZSxyLG4ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMil9KHQudmVydGV4LHQuY2VsbCx0LnBoYXNlLDAscixsKX07dmFyIGk9eyJmYWxzZSwwLDEiOmZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIGZ1bmN0aW9uKGEsbyxzLGwpe3ZhciBjLHU9MHxhLnNoYXBlWzBdLGY9MHxhLnNoYXBlWzFdLGg9YS5kYXRhLHA9MHxhLm9mZnNldCxkPTB8YS5zdHJpZGVbMF0sbT0wfGEuc3RyaWRlWzFdLGc9cCx2PTB8LWQseT0wLHg9MHwtbSxiPTAsXz0tZC1tfDAsdz0wLFQ9MHxkLGs9bS1kKnV8MCxBPTAsTT0wLFM9MCxFPTIqdXwwLEw9bihFKSxDPW4oRSksUD0wLEk9MCxPPS0xLHo9LTEsRD0wLFI9MHwtdSxGPTB8dSxCPTAsTj0tdS0xfDAsaj11LTF8MCxVPTAsVj0wLEg9MDtmb3IoQT0wO0E8dTsrK0EpTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VDtpZihnKz1rLGY+MCl7aWYoTT0xLExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsdT4wKWZvcihBPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEQ9TFtQK09dLEI9TFtQK1JdLFU9TFtQK05dLEk9PT1EJiZJPT09QiYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksRCxCLFUsbyxzLGwpLFY9Q1tQXT1TKyspLFArPTEsZys9VCxBPTI7QTx1OysrQSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVix3LHksVSxELG8scyxsKSksUCs9MSxnKz1UO2ZvcihnKz1rLFA9MCxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxNPTI7TTxmOysrTSl7aWYoTFtQKytdPXIoaFtnXSxvLHMsbCksZys9VCx1PjApZm9yKEE9MSxjPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksRD1MW1ArT10sQj1MW1ArUl0sVT1MW1ArTl0sST09PUQmJkk9PT1CJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxELEIsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09QiYmZShDW1ArUl0sVixiLHcsQixVLG8scyxsKSksUCs9MSxnKz1ULEE9MjtBPHU7KytBKWM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxEPUxbUCtPXSxCPUxbUCtSXSxVPUxbUCtOXSxJPT09RCYmST09PUImJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEQsQixVLG8scyxsKSxWPUNbUF09UysrLFUhPT1CJiZlKENbUCtSXSxWLGIsdyxCLFUsbyxzLGwpLFUhPT1EJiZlKENbUCtPXSxWLHcseSxVLEQsbyxzLGwpKSxQKz0xLGcrPVQ7MSZNJiYoUD0wKSxIPU8sTz16LHo9SCxIPVIsUj1GLEY9SCxIPU4sTj1qLGo9SCxnKz1rfX1pKEMpLGkoTCl9fSwiZmFsc2UsMSwwIjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmdW5jdGlvbihhLG8scyxsKXt2YXIgYyx1PTB8YS5zaGFwZVswXSxmPTB8YS5zaGFwZVsxXSxoPWEuZGF0YSxwPTB8YS5vZmZzZXQsZD0wfGEuc3RyaWRlWzBdLG09MHxhLnN0cmlkZVsxXSxnPXAsdj0wfC1kLHk9MCx4PTB8LW0sYj0wLF89LWQtbXwwLHc9MCxUPTB8bSxrPWQtbSpmfDAsQT0wLE09MCxTPTAsRT0yKmZ8MCxMPW4oRSksQz1uKEUpLFA9MCxJPTAsTz0tMSx6PS0xLEQ9MCxSPTB8LWYsRj0wfGYsQj0wLE49LWYtMXwwLGo9Zi0xfDAsVT0wLFY9MCxIPTA7Zm9yKE09MDtNPGY7KytNKUxbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQ7aWYoZys9ayx1PjApe2lmKEE9MSxMW1ArK109cihoW2ddLG8scyxsKSxnKz1ULGY+MClmb3IoTT0xLGM9aFtnXSxJPUxbUF09cihjLG8scyxsKSxCPUxbUCtSXSxEPUxbUCtPXSxVPUxbUCtOXSxJPT09QiYmST09PUQmJkk9PT1VfHwoeT1oW2crdl0sYj1oW2creF0sdz1oW2crX10sdChBLE0sYyx5LGIsdyxJLEIsRCxVLG8scyxsKSxWPUNbUF09UysrKSxQKz0xLGcrPVQsTT0yO008ZjsrK00pYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUQmJmUoQ1tQK09dLFYsYix3LEQsVSxvLHMsbCkpLFArPTEsZys9VDtmb3IoZys9ayxQPTAsSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsQT0yO0E8dTsrK0Epe2lmKExbUCsrXT1yKGhbZ10sbyxzLGwpLGcrPVQsZj4wKWZvcihNPTEsYz1oW2ddLEk9TFtQXT1yKGMsbyxzLGwpLEI9TFtQK1JdLEQ9TFtQK09dLFU9TFtQK05dLEk9PT1CJiZJPT09RCYmST09PVV8fCh5PWhbZyt2XSxiPWhbZyt4XSx3PWhbZytfXSx0KEEsTSxjLHksYix3LEksQixELFUsbyxzLGwpLFY9Q1tQXT1TKyssVSE9PUImJmUoQ1tQK1JdLFYsdyx5LFUsQixvLHMsbCkpLFArPTEsZys9VCxNPTI7TTxmOysrTSljPWhbZ10sST1MW1BdPXIoYyxvLHMsbCksQj1MW1ArUl0sRD1MW1ArT10sVT1MW1ArTl0sST09PUImJkk9PT1EJiZJPT09VXx8KHk9aFtnK3ZdLGI9aFtnK3hdLHc9aFtnK19dLHQoQSxNLGMseSxiLHcsSSxCLEQsVSxvLHMsbCksVj1DW1BdPVMrKyxVIT09RCYmZShDW1ArT10sVixiLHcsRCxVLG8scyxsKSxVIT09QiYmZShDW1ArUl0sVix3LHksVSxCLG8scyxsKSksUCs9MSxnKz1UOzEmQSYmKFA9MCksSD1SLFI9RixGPUgsSD1PLE89eix6PUgsSD1OLE49aixqPUgsZys9a319aShDKSxpKEwpfX19fSx7InR5cGVkYXJyYXktcG9vbCI6NTkwfV0sNDU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImR1cCIpLGk9e3plcm86ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXTtufD0wO3ZhciBhPTAsbz1yWzBdO2ZvcihhPTA7YTxpOysrYSllW25dPTAsbis9b30sZmRUZW1wbGF0ZTE6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dFswXSxsPXJbMF0sYz0tMSpsLHU9bDtufD0wLG98PTA7dmFyIGY9MCxoPWwscD1hWzBdO2ZvcihmPTA7ZjxzOysrZilpW29dPS41KihlW24rY10tZVtuK3VdKSxuKz1oLG8rPXB9LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8scyxsLGMpe3ZhciB1PXRbMF0sZj10WzFdLGg9clswXSxwPXJbMV0sZD1hWzBdLG09YVsxXSxnPWxbMF0sdj1sWzFdLHk9LTEqaCx4PWgsYj0tMSpwLF89cDtufD0wLG98PTAsY3w9MDt2YXIgdz0wLFQ9MCxrPXAsQT1oLWYqcCxNPW0sUz1kLWYqbSxFPXYsTD1nLWYqdjtmb3IoVD0wO1Q8dTsrK1Qpe2Zvcih3PTA7dzxmOysrdylpW29dPS41KihlW24reV0tZVtuK3hdKSxzW2NdPS41KihlW24rYl0tZVtuK19dKSxuKz1rLG8rPU0sYys9RTtuKz1BLG8rPVMsYys9TH19fSxhPXtjZGlmZjpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9bi5kdHlwZSxsPW4ub3JkZXIsYz1pLmR0eXBlLHU9aS5vcmRlcixmPVthLG8uam9pbigpLHMsbC5qb2luKCksYyx1LmpvaW4oKV0uam9pbigpLGg9ZVtmXTtyZXR1cm4gaHx8KGVbZl09aD10KFthLG8scyxsLGMsdV0pKSxoKHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaS5kYXRhLGkuc3RyaWRlLDB8aS5vZmZzZXQpfX0semVybzpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIG49ci5kdHlwZSxpPXIub3JkZXIsYT1bbixpLmpvaW4oKV0uam9pbigpLG89ZVthXTtyZXR1cm4gb3x8KGVbYV09bz10KFtuLGldKSksbyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0KX19LGZkVGVtcGxhdGUxOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89bi5kdHlwZSxzPW4ub3JkZXIsbD1baSxhLmpvaW4oKSxvLHMuam9pbigpXS5qb2luKCksYz1lW2xdO3JldHVybiBjfHwoZVtsXT1jPXQoW2ksYSxvLHNdKSksYyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0KX19LGZkVGVtcGxhdGUyOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4oMCxhW3QuZnVuY05hbWVdKShzLmJpbmQodm9pZCAwLHQpKX1mdW5jdGlvbiBzKHQpe3JldHVybiBpW3QuZnVuY05hbWVdfWZ1bmN0aW9uIGwodCl7cmV0dXJuIG8oe2Z1bmNOYW1lOnQuZnVuY05hbWV9KX12YXIgYz17fSx1PXt9LGY9bCh7ZnVuY05hbWU6ImNkaWZmIn0pLGg9bCh7ZnVuY05hbWU6Inplcm8ifSk7ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCBpbiBjP2NbdF06Y1t0XT1sKHtmdW5jTmFtZToiZmRUZW1wbGF0ZSIrdH0pfWZ1bmN0aW9uIGQodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKHQsaSl7dmFyIGE9aS5zaGFwZS5zbGljZSgpO3JldHVybiBhWzBdPjImJmFbMV0+MiYmbihpLnBpY2soLTEsLTEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDApLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMiksdC5waWNrKC0xLC0xLDEpLmxvKDEsMSkuaGkoYVswXS0yLGFbMV0tMikpLGFbMV0+MiYmKHIoaS5waWNrKDAsLTEpLmxvKDEpLmhpKGFbMV0tMiksdC5waWNrKDAsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soMCwtMSwwKS5sbygxKS5oaShhWzFdLTIpKSksYVsxXT4yJiYocihpLnBpY2soYVswXS0xLC0xKS5sbygxKS5oaShhWzFdLTIpLHQucGljayhhWzBdLTEsLTEsMSkubG8oMSkuaGkoYVsxXS0yKSksZSh0LnBpY2soYVswXS0xLC0xLDApLmxvKDEpLmhpKGFbMV0tMikpKSxhWzBdPjImJihyKGkucGljaygtMSwwKS5sbygxKS5oaShhWzBdLTIpLHQucGljaygtMSwwLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLDAsMSkubG8oMSkuaGkoYVswXS0yKSkpLGFbMF0+MiYmKHIoaS5waWNrKC0xLGFbMV0tMSkubG8oMSkuaGkoYVswXS0yKSx0LnBpY2soLTEsYVsxXS0xLDApLmxvKDEpLmhpKGFbMF0tMikpLGUodC5waWNrKC0xLGFbMV0tMSwxKS5sbygxKS5oaShhWzBdLTIpKSksdC5zZXQoMCwwLDAsMCksdC5zZXQoMCwwLDEsMCksdC5zZXQoYVswXS0xLDAsMCwwKSx0LnNldChhWzBdLTEsMCwxLDApLHQuc2V0KDAsYVsxXS0xLDAsMCksdC5zZXQoMCxhWzFdLTEsMSwwKSx0LnNldChhWzBdLTEsYVsxXS0xLDAsMCksdC5zZXQoYVswXS0xLGFbMV0tMSwxLDApLHR9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIEFycmF5LmlzQXJyYXkocil8fChyPW4oZS5kaW1lbnNpb24sInN0cmluZyI9PXR5cGVvZiByP3I6ImNsYW1wIikpLDA9PT1lLnNpemU/dDowPT09ZS5kaW1lbnNpb24/KHQuc2V0KDApLHQpOmZ1bmN0aW9uKHQpe3ZhciBlPXQuam9pbigpO2lmKGE9dVtlXSlyZXR1cm4gYTtmb3IodmFyIHI9dC5sZW5ndGgsbj1bZixoXSxpPTE7aTw9cjsrK2kpbi5wdXNoKHAoaSkpO3ZhciBhPWQuYXBwbHkodm9pZCAwLG4pO3JldHVybiB1W2VdPWEsYX0ocikodCxlKX19LHtkdXA6MTc3fV0sNDU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1NYXRoLmZsb29yKGUpLG49ZS1yLGk9MDw9ciYmcjx0LnNoYXBlWzBdLGE9MDw9cisxJiZyKzE8dC5zaGFwZVswXTtyZXR1cm4oMS1uKSooaT8rdC5nZXQocik6MCkrbiooYT8rdC5nZXQocisxKTowKX1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1NYXRoLmZsb29yKGUpLGk9ZS1uLGE9MDw9biYmbjx0LnNoYXBlWzBdLG89MDw9bisxJiZuKzE8dC5zaGFwZVswXSxzPU1hdGguZmxvb3IociksbD1yLXMsYz0wPD1zJiZzPHQuc2hhcGVbMV0sdT0wPD1zKzEmJnMrMTx0LnNoYXBlWzFdLGY9YSYmYz90LmdldChuLHMpOjAsaD1hJiZ1P3QuZ2V0KG4scysxKTowO3JldHVybigxLWwpKigoMS1pKSpmK2kqKG8mJmM/dC5nZXQobisxLHMpOjApKStsKigoMS1pKSpoK2kqKG8mJnU/dC5nZXQobisxLHMrMSk6MCkpfWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk9TWF0aC5mbG9vcihlKSxhPWUtaSxvPTA8PWkmJmk8dC5zaGFwZVswXSxzPTA8PWkrMSYmaSsxPHQuc2hhcGVbMF0sbD1NYXRoLmZsb29yKHIpLGM9ci1sLHU9MDw9bCYmbDx0LnNoYXBlWzFdLGY9MDw9bCsxJiZsKzE8dC5zaGFwZVsxXSxoPU1hdGguZmxvb3IobikscD1uLWgsZD0wPD1oJiZoPHQuc2hhcGVbMl0sbT0wPD1oKzEmJmgrMTx0LnNoYXBlWzJdLGc9byYmdSYmZD90LmdldChpLGwsaCk6MCx2PW8mJmYmJmQ/dC5nZXQoaSxsKzEsaCk6MCx5PXMmJnUmJmQ/dC5nZXQoaSsxLGwsaCk6MCx4PXMmJmYmJmQ/dC5nZXQoaSsxLGwrMSxoKTowLGI9byYmdSYmbT90LmdldChpLGwsaCsxKTowLF89byYmZiYmbT90LmdldChpLGwrMSxoKzEpOjA7cmV0dXJuKDEtcCkqKCgxLWMpKigoMS1hKSpnK2EqeSkrYyooKDEtYSkqdithKngpKStwKigoMS1jKSooKDEtYSkqYithKihzJiZ1JiZtP3QuZ2V0KGkrMSxsLGgrMSk6MCkpK2MqKCgxLWEpKl8rYSoocyYmZiYmbT90LmdldChpKzEsbCsxLGgrMSk6MCkpKX1mdW5jdGlvbiBvKHQpe3ZhciBlLHIsbj0wfHQuc2hhcGUubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9bmV3IEFycmF5KG4pLG89bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihlPTA7ZTxuOysrZSlyPSthcmd1bWVudHNbZSsxXSxpW2VdPU1hdGguZmxvb3IociksYVtlXT1yLWlbZV0sb1tlXT0wPD1pW2VdJiZpW2VdPHQuc2hhcGVbZV0sc1tlXT0wPD1pW2VdKzEmJmlbZV0rMTx0LnNoYXBlW2VdO3ZhciBsLGMsdSxmPTA7dDpmb3IoZT0wO2U8MTw8bjsrK2Upe2ZvcihjPTEsdT10Lm9mZnNldCxsPTA7bDxuOysrbClpZihlJjE8PGwpe2lmKCFzW2xdKWNvbnRpbnVlIHQ7Yyo9YVtsXSx1Kz10LnN0cmlkZVtsXSooaVtsXSsxKX1lbHNle2lmKCFvW2xdKWNvbnRpbnVlIHQ7Yyo9MS1hW2xdLHUrPXQuc3RyaWRlW2xdKmlbbF19Zis9Yyp0LmRhdGFbdV19cmV0dXJuIGZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3N3aXRjaCh0LnNoYXBlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiAwO2Nhc2UgMTpyZXR1cm4gbih0LGUpO2Nhc2UgMjpyZXR1cm4gaSh0LGUscik7Y2FzZSAzOnJldHVybiBhKHQsZSxyLHMpO2RlZmF1bHQ6cmV0dXJuIG8uYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSxlLmV4cG9ydHMuZDE9bixlLmV4cG9ydHMuZDI9aSxlLmV4cG9ydHMuZDM9YX0se31dLDQ1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17ImZsb2F0NjQsMiwxLDAiOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9dFswXSxvPXRbMV0scz10WzJdLGw9clswXSxjPXJbMV0sdT1yWzJdO258PTA7dmFyIGY9MCxoPTAscD0wLGQ9dSxtPWMtcyp1LGc9bC1vKmM7Zm9yKHA9MDtwPGE7KytwKXtmb3IoaD0wO2g8bzsrK2gpe2ZvcihmPTA7ZjxzOysrZillW25dLz1pLG4rPWQ7bis9bX1uKz1nfX19LCJ1aW50OCwyLDAsMSxmbG9hdDY0LDIsMSwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvLHMpe2Zvcih2YXIgbD10WzBdLGM9dFsxXSx1PXRbMl0sZj1yWzBdLGg9clsxXSxwPXJbMl0sZD1hWzBdLG09YVsxXSxnPWFbMl0sdj1ufD0wLHk9b3w9MCx4PTB8dFswXTt4PjA7KXt4PDY0PyhsPXgseD0wKToobD02NCx4LT02NCk7Zm9yKHZhciBiPTB8dFsxXTtiPjA7KXtiPDY0PyhjPWIsYj0wKTooYz02NCxiLT02NCksbj12K3gqZitiKmgsbz15K3gqZCtiKm07dmFyIF89MCx3PTAsVD0wLGs9cCxBPWYtdSpwLE09aC1sKmYsUz1nLEU9ZC11KmcsTD1tLWwqZDtmb3IoVD0wO1Q8YzsrK1Qpe2Zvcih3PTA7dzxsOysrdyl7Zm9yKF89MDtfPHU7KytfKWVbbl09aVtvXSpzLG4rPWssbys9UztuKz1BLG8rPUV9bis9TSxvKz1MfX19fX0sImZsb2F0MzIsMSwwLGZsb2F0MzIsMSwwIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10WzBdLGw9dFsxXSxjPXJbMF0sdT1yWzFdLGY9YVswXSxoPWFbMV07bnw9MCxvfD0wO3ZhciBwPTAsZD0wLG09dSxnPWMtbCp1LHY9aCx5PWYtbCpoO2ZvcihkPTA7ZDxzOysrZCl7Zm9yKHA9MDtwPGw7KytwKWVbbl09aVtvXSxuKz1tLG8rPXY7bis9ZyxvKz15fX19LCJmbG9hdDMyLDEsMCxmbG9hdDMyLDAsMSI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRbMF0sbD10WzFdLGM9clswXSx1PXJbMV0sZj1hWzBdLGg9YVsxXSxwPW58PTAsZD1vfD0wLG09MHx0WzFdO20+MDspe208NjQ/KGw9bSxtPTApOihsPTY0LG0tPTY0KTtmb3IodmFyIGc9MHx0WzBdO2c+MDspe2c8NjQ/KHM9ZyxnPTApOihzPTY0LGctPTY0KSxuPXArbSp1K2cqYyxvPWQrbSpoK2cqZjt2YXIgdj0wLHk9MCx4PXUsYj1jLWwqdSxfPWgsdz1mLWwqaDtmb3IoeT0wO3k8czsrK3kpe2Zvcih2PTA7djxsOysrdillW25dPWlbb10sbis9eCxvKz1fO24rPWIsbys9d319fX19LCJ1aW50OCwyLDAsMSx1aW50OCwxLDIsMCI6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7Zm9yKHZhciBzPXRbMF0sbD10WzFdLGM9dFsyXSx1PXJbMF0sZj1yWzFdLGg9clsyXSxwPWFbMF0sZD1hWzFdLG09YVsyXSxnPW58PTAsdj1vfD0wLHk9MHx0WzJdO3k+MDspe3k8NjQ/KGM9eSx5PTApOihjPTY0LHktPTY0KTtmb3IodmFyIHg9MHx0WzBdO3g+MDspe3g8NjQ/KHM9eCx4PTApOihzPTY0LHgtPTY0KTtmb3IodmFyIGI9MHx0WzFdO2I+MDspe2I8NjQ/KGw9YixiPTApOihsPTY0LGItPTY0KSxuPWcreSpoK3gqdStiKmYsbz12K3kqbSt4KnArYipkO3ZhciBfPTAsdz0wLFQ9MCxrPWgsQT11LWMqaCxNPWYtcyp1LFM9bSxFPXAtYyptLEw9ZC1zKnA7Zm9yKFQ9MDtUPGw7KytUKXtmb3Iodz0wO3c8czsrK3cpe2ZvcihfPTA7XzxjOysrXyllW25dPWlbb10sbis9ayxvKz1TO24rPUEsbys9RX1uKz1NLG8rPUx9fX19fX0sInVpbnQ4LDIsMCwxLGFycmF5LDIsMCwxIjpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGksYSxvKXt2YXIgcz10WzBdLGw9dFsxXSxjPXRbMl0sdT1yWzBdLGY9clsxXSxoPXJbMl0scD1hWzBdLGQ9YVsxXSxtPWFbMl07bnw9MCxvfD0wO3ZhciBnPTAsdj0wLHk9MCx4PWgsYj11LWMqaCxfPWYtcyp1LHc9bSxUPXAtYyptLGs9ZC1zKnA7Zm9yKHk9MDt5PGw7Kyt5KXtmb3Iodj0wO3Y8czsrK3Ype2ZvcihnPTA7ZzxjOysrZyllW25dPWlbb10sbis9eCxvKz13O24rPWIsbys9VH1uKz1fLG8rPWt9fX19O3ZhciBpPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5qb2luKCIsIik7cmV0dXJuKDAsbltyXSkoKX0sYT17bXVsOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fSxtdWxzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPVthLG8uam9pbigpLHMsbC5qb2luKCldLmpvaW4oKSx1PWVbY107cmV0dXJuIHV8fChlW2NdPXU9dChbYSxvLHMsbF0pKSx1KHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaSl9fSxtdWxzZXE6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1baSxhLmpvaW4oKV0uam9pbigpLHM9ZVtvXTtyZXR1cm4gc3x8KGVbb109cz10KFtpLGFdKSkscyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4pfX0sZGl2OmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPWkuZHR5cGUsdT1pLm9yZGVyLGY9W2Esby5qb2luKCkscyxsLmpvaW4oKSxjLHUuam9pbigpXS5qb2luKCksaD1lW2ZdO3JldHVybiBofHwoZVtmXT1oPXQoW2EsbyxzLGwsYyx1XSkpLGgoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLmRhdGEsbi5zdHJpZGUsMHxuLm9mZnNldCxpLmRhdGEsaS5zdHJpZGUsMHxpLm9mZnNldCl9fSxkaXZzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4saSl7dmFyIGE9ci5kdHlwZSxvPXIub3JkZXIscz1uLmR0eXBlLGw9bi5vcmRlcixjPVthLG8uam9pbigpLHMsbC5qb2luKCldLmpvaW4oKSx1PWVbY107cmV0dXJuIHV8fChlW2NdPXU9dChbYSxvLHMsbF0pKSx1KHIuc2hhcGUuc2xpY2UoMCksci5kYXRhLHIuc3RyaWRlLDB8ci5vZmZzZXQsbi5kYXRhLG4uc3RyaWRlLDB8bi5vZmZzZXQsaSl9fSxkaXZzZXE6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIsbil7dmFyIGk9ci5kdHlwZSxhPXIub3JkZXIsbz1baSxhLmpvaW4oKV0uam9pbigpLHM9ZVtvXTtyZXR1cm4gc3x8KGVbb109cz10KFtpLGFdKSkscyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4pfX0sYXNzaWduOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89bi5kdHlwZSxzPW4ub3JkZXIsbD1baSxhLmpvaW4oKSxvLHMuam9pbigpXS5qb2luKCksYz1lW2xdO3JldHVybiBjfHwoZVtsXT1jPXQoW2ksYSxvLHNdKSksYyhyLnNoYXBlLnNsaWNlKDApLHIuZGF0YSxyLnN0cmlkZSwwfHIub2Zmc2V0LG4uZGF0YSxuLnN0cmlkZSwwfG4ub2Zmc2V0KX19fTtmdW5jdGlvbiBvKHQpe3JldHVybiBlPXtmdW5jTmFtZTp0LmZ1bmNOYW1lfSwoMCxhW2UuZnVuY05hbWVdKShpLmJpbmQodm9pZCAwLGUpKTt2YXIgZX12YXIgcz17bXVsOiIqIixkaXY6Ii8ifTshZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gcylyW3RdPW8oe2Z1bmNOYW1lOnR9KSxyW3QrInMiXT1vKHtmdW5jTmFtZTp0KyJzIn0pLHJbdCsic2VxIl09byh7ZnVuY05hbWU6dCsic2VxIn0pfSgpLHIuYXNzaWduPW8oe2Z1bmNOYW1lOiJhc3NpZ24ifSl9LHt9XSw0NTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgibmRhcnJheSIpLGk9dCgiLi9kb0NvbnZlcnQuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sYT10LG89MTtBcnJheS5pc0FycmF5KGEpOylyLnB1c2goYS5sZW5ndGgpLG8qPWEubGVuZ3RoLGE9YVswXTtyZXR1cm4gMD09PXIubGVuZ3RoP24oKTooZXx8KGU9bihuZXcgRmxvYXQ2NEFycmF5KG8pLHIpKSxpKGUsdCksZSl9fSx7Ii4vZG9Db252ZXJ0LmpzIjo0NTksbmRhcnJheTo0NjJ9XSw0NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXRbMF0sbz10WzFdLHM9dFsyXSxsPXJbMF0sYz1yWzFdLHU9clsyXSxmPVswLDAsMF07bnw9MDt2YXIgaD0wLHA9MCxkPTAsbT11LGc9Yy1zKnUsdj1sLW8qYztmb3IoZD0wO2Q8YTsrK2Qpe2ZvcihwPTA7cDxvOysrcCl7Zm9yKGg9MDtoPHM7KytoKXt2YXIgeSx4PWk7Zm9yKHk9MDt5PGYubGVuZ3RoLTE7Kyt5KXg9eFtmW3ldXTtlW25dPXhbZltmLmxlbmd0aC0xXV0sbis9bSwrK2ZbMl19bis9ZyxmWzJdLT1zLCsrZlsxXX1uKz12LGZbMV0tPW8sKytmWzBdfX19O2UuZXhwb3J0cz0obj17ZnVuY05hbWU6e2Z1bmNOYW1lOiJjb252ZXJ0In0uZnVuY05hbWV9LGZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdW5jdGlvbihyLG4pe3ZhciBpPXIuZHR5cGUsYT1yLm9yZGVyLG89W2ksYS5qb2luKCldLmpvaW4oKSxzPWVbb107cmV0dXJuIHN8fChlW29dPXM9dChbaSxhXSkpLHMoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuKX19KGkuYmluZCh2b2lkIDAsbikpKX0se31dLDQ2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0eXBlZGFycmF5LXBvb2wiKTtmdW5jdGlvbiBpKHQpe3N3aXRjaCh0KXtjYXNlInVpbnQzMiI6cmV0dXJuW24ubWFsbG9jVWludDMyLG4uZnJlZVVpbnQzMl07ZGVmYXVsdDpyZXR1cm4gbnVsbH19dmFyIGE9eyJ1aW50MzIsMSwwIjpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4saSxhLG8scyxsLGMsdSxmLGgpe3ZhciBwLGQsbSxnLHYseSx4LGIsXz1yKm8rYSx3PXQoYyk7Zm9yKHA9cisxO3A8PW47KytwKXtmb3IoZD1wLG09Xys9byx2PTAseT1fLGc9MDtnPGM7KytnKXdbdisrXT1pW3ldLHkrPXU7dDpmb3IoO2QtLSA+cjspe3Y9MCx5PW0tbztlOmZvcihnPTA7ZzxjOysrZyl7aWYoKHg9aVt5XSk8KGI9d1t2XSkpYnJlYWsgdDtpZih4PmIpYnJlYWsgZTt5Kz1mLHYrPWh9Zm9yKHY9bSx5PW0tbyxnPTA7ZzxjOysrZylpW3ZdPWlbeV0sdis9dSx5Kz11O20tPW99Zm9yKHY9bSx5PTAsZz0wO2c8YzsrK2cpaVt2XT13W3krK10sdis9dX1lKHcpfX19O3ZhciBvPXsidWludDMyLDEsMCI6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbiBuKGksYSxvLHMsbCxjLHUsZixoLHAsZCl7dmFyIG0sZyx2LHkseCxiLF8sdyxULGssQSxNLFMsRSxMLEMsUCxJLE8seixELFIsRixCLE4saj0oYS1pKzEpLzZ8MCxVPWkraixWPWEtaixIPWkrYT4+MSxxPUgtaixHPUgraixZPVUsVz1xLFg9SCxaPUcsSj1WLEs9aSsxLFE9YS0xLCQ9ITAsdHQ9MCxldD0wLHJ0PTAsbnQ9ZixpdD1lKG50KSxhdD1lKG50KTtBPWwqWSxNPWwqVyxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVksWT1XLFc9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpaLE09bCpKLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WixaPUosSj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlksTT1sKlgsTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1ZLFk9WCxYPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqVyxNPWwqWCxOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVcsVz1YLFg9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpZLE09bCpaLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9WSxZPVosWj1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlgsTT1sKlosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1YLFg9WixaPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1BPWwqVyxNPWwqSixOPXM7dDpmb3Ioaz0wO2s8ZjsrK2spe2lmKHc9TStOLChydD1vW189QStOXS1vW3ddKT4wKXtnPVcsVz1KLEo9ZzticmVhayB0fWlmKHJ0PDApYnJlYWsgdDtOKz1wfUE9bCpXLE09bCpYLE49czt0OmZvcihrPTA7azxmOysrayl7aWYodz1NK04sKHJ0PW9bXz1BK05dLW9bd10pPjApe2c9VyxXPVgsWD1nO2JyZWFrIHR9aWYocnQ8MClicmVhayB0O04rPXB9QT1sKlosTT1sKkosTj1zO3Q6Zm9yKGs9MDtrPGY7KytrKXtpZih3PU0rTiwocnQ9b1tfPUErTl0tb1t3XSk+MCl7Zz1aLFo9SixKPWc7YnJlYWsgdH1pZihydDwwKWJyZWFrIHQ7Tis9cH1mb3IoQT1sKlksTT1sKlcsUz1sKlgsRT1sKlosTD1sKkosQz1sKlUsUD1sKkgsST1sKlYsQj0wLE49cyxrPTA7azxmOysraylfPUErTix3PU0rTixUPVMrTixPPUUrTix6PUwrTixEPUMrTixSPVArTixGPUkrTixpdFtCXT1vW3ddLGF0W0JdPW9bT10sJD0kJiZpdFtCXT09PWF0W0JdLHY9b1tfXSx5PW9bVF0seD1vW3pdLG9bRF09dixvW1JdPXksb1tGXT14LCsrQixOKz1oO2ZvcihBPWwqcSxNPWwqaSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxOKz1oO2ZvcihBPWwqRyxNPWwqYSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxOKz1oO2lmKCQpZm9yKGI9SztiPD1ROysrYil7Xz1zK2IqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKDAhPT1ydClpZihydDwwKXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNlIGZvcig7Oyl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWl0W0JdKTsrK2spQis9ZCxfKz1wO2lmKCEocnQ+MCkpe2lmKHJ0PDApe2ZvcihBPWwqYixNPWwqSyxTPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sVD1TK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1vW1RdLG9bVF09bSxOKz1oOysrSywtLVE7YnJlYWt9Zm9yKEE9bCpiLE09bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDstLVE7YnJlYWt9US0tfX1lbHNlIGZvcihiPUs7Yjw9UTsrK2Ipe189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0odHQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZih0dDwwKXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNle189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0oZXQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZihldD4wKWZvcig7Oyl7Xz1zK1EqbCxCPTA7dDpmb3Ioaz0wO2s8ZiYmMD09PShydD1vW19dLWF0W0JdKTsrK2spQis9ZCxfKz1wO2lmKCEocnQ+MCkpe189cytRKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0ocnQ9b1tfXS1pdFtCXSk7KytrKUIrPWQsXys9cDtpZihydDwwKXtmb3IoQT1sKmIsTT1sKkssUz1sKlEsTj1zLGs9MDtrPGY7KytrKXc9TStOLFQ9UytOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109b1tUXSxvW1RdPW0sTis9aDsrK0ssLS1RfWVsc2V7Zm9yKEE9bCpiLE09bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW0sTis9aDstLVF9YnJlYWt9aWYoLS1RPGIpYnJlYWt9fX1mb3IoQT1sKmksTT1sKihLLTEpLEI9MCxOPXMsaz0wO2s8ZjsrK2spdz1NK04sb1tfPUErTl09b1t3XSxvW3ddPWl0W0JdLCsrQixOKz1oO2ZvcihBPWwqYSxNPWwqKFErMSksQj0wLE49cyxrPTA7azxmOysrayl3PU0rTixvW189QStOXT1vW3ddLG9bd109YXRbQl0sKytCLE4rPWg7aWYoSy0yLWk8PTMyP3QoaSxLLTIsbyxzLGwsYyx1LGYsaCxwLGQpOm4oaSxLLTIsbyxzLGwsYyx1LGYsaCxwLGQpLGEtKFErMik8PTMyP3QoUSsyLGEsbyxzLGwsYyx1LGYsaCxwLGQpOm4oUSsyLGEsbyxzLGwsYyx1LGYsaCxwLGQpLCQpcmV0dXJuIHIoaXQpLHZvaWQgcihhdCk7aWYoSzxVJiZRPlYpe3Q6Zm9yKDs7KXtmb3IoXz1zK0sqbCxCPTAsTj1zLGs9MDtrPGY7KytrKXtpZihvW19dIT09aXRbQl0pYnJlYWsgdDsrK0IsXys9aH0rK0t9dDpmb3IoOzspe2ZvcihfPXMrUSpsLEI9MCxOPXMsaz0wO2s8ZjsrK2spe2lmKG9bX10hPT1hdFtCXSlicmVhayB0OysrQixfKz1ofS0tUX1mb3IoYj1LO2I8PVE7KytiKXtfPXMrYipsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHR0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYoMD09PXR0KXtpZihiIT09Sylmb3IoQT1sKmIsTT1sKkssTj1zLGs9MDtrPGY7KytrKXc9TStOLG09b1tfPUErTl0sb1tfXT1vW3ddLG9bd109bSxOKz1oOysrS31lbHNle189cytiKmwsQj0wO3Q6Zm9yKGs9MDtrPGYmJjA9PT0oZXQ9b1tfXS1hdFtCXSk7KytrKUIrPWQsXys9cDtpZigwPT09ZXQpZm9yKDs7KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10tYXRbQl0pOysraylCKz1kLF8rPXA7aWYoMCE9PXJ0KXtfPXMrUSpsLEI9MDt0OmZvcihrPTA7azxmJiYwPT09KHJ0PW9bX10taXRbQl0pOysraylCKz1kLF8rPXA7aWYocnQ8MCl7Zm9yKEE9bCpiLE09bCpLLFM9bCpRLE49cyxrPTA7azxmOysrayl3PU0rTixUPVMrTixtPW9bXz1BK05dLG9bX109b1t3XSxvW3ddPW9bVF0sb1tUXT1tLE4rPWg7KytLLC0tUX1lbHNle2ZvcihBPWwqYixNPWwqUSxOPXMsaz0wO2s8ZjsrK2spdz1NK04sbT1vW189QStOXSxvW19dPW9bd10sb1t3XT1tLE4rPWg7LS1RfWJyZWFrfWlmKC0tUTxiKWJyZWFrfX19fXIoaXQpLHIoYXQpLFEtSzw9MzI/dChLLFEsbyxzLGwsYyx1LGYsaCxwLGQpOm4oSyxRLG8scyxsLGMsdSxmLGgscCxkKX19fTt2YXIgcz17InVpbnQzMiwxLDAiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBuPXIuZGF0YSxpPTB8ci5vZmZzZXQsYT1yLnNoYXBlLG89ci5zdHJpZGUscz0wfG9bMF0sbD0wfGFbMF0sYz0wfG9bMV0sdT0wfGFbMV0sZj1jLGg9YztsPD0zMj90KDAsbC0xLG4saSxzLGMsbCx1LGYsaCwxKTplKDAsbC0xLG4saSxzLGMsbCx1LGYsaCwxKX19fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1bZSx0XS5qb2luKCIsIiksbj1zW3JdLGw9ZnVuY3Rpb24odCxlKXt2YXIgcj1pKGUpLG49W2UsdF0uam9pbigiLCIpLG89YVtuXTtyZXR1cm4gcj9vKHJbMF0sclsxXSk6bygpfSh0LGUpLGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkoZSksYT1bZSx0XS5qb2luKCIsIikscz1vW2FdO3JldHVybiB0Lmxlbmd0aD4xJiZuP3MocixuWzBdLG5bMV0pOnMocil9KHQsZSxsKTtyZXR1cm4gbihsLGMpfX0seyJ0eXBlZGFycmF5LXBvb2wiOjU5MH1dLDQ2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2xpYi9jb21waWxlX3NvcnQuanMiKSxpPXt9O2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Lm9yZGVyLHI9dC5kdHlwZSxhPVtlLHJdLmpvaW4oIjoiKSxvPWlbYV07cmV0dXJuIG98fChpW2FdPW89bihlLHIpKSxvKHQpLHR9fSx7Ii4vbGliL2NvbXBpbGVfc29ydC5qcyI6NDYwfV0sNDYyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiaXMtYnVmZmVyIiksaT0idW5kZWZpbmVkIiE9dHlwZW9mIEZsb2F0NjRBcnJheTtmdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHRbMF0tZVswXX1mdW5jdGlvbiBvKCl7dmFyIHQsZT10aGlzLnN0cmlkZSxyPW5ldyBBcnJheShlLmxlbmd0aCk7Zm9yKHQ9MDt0PHIubGVuZ3RoOysrdClyW3RdPVtNYXRoLmFicyhlW3RdKSx0XTtyLnNvcnQoYSk7dmFyIG49bmV3IEFycmF5KHIubGVuZ3RoKTtmb3IodD0wO3Q8bi5sZW5ndGg7Kyt0KW5bdF09clt0XVsxXTtyZXR1cm4gbn12YXIgcz17VDpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3RoaXMuZGF0YT10fXZhciByPWUucHJvdG90eXBlO3JldHVybiByLmR0eXBlPXQsci5pbmRleD1mdW5jdGlvbigpe3JldHVybi0xfSxyLnNpemU9MCxyLmRpbWVuc2lvbj0tMSxyLnNoYXBlPXIuc3RyaWRlPXIub3JkZXI9W10sci5sbz1yLmhpPXIudHJhbnNwb3NlPXIuc3RlcD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLmRhdGEpfSxyLmdldD1yLnNldD1mdW5jdGlvbigpe30sci5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0KX19LDA6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7dGhpcy5kYXRhPXQsdGhpcy5vZmZzZXQ9ZX12YXIgbj1yLnByb3RvdHlwZTtyZXR1cm4gbi5kdHlwZT10LG4uaW5kZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXR9LG4uZGltZW5zaW9uPTAsbi5zaXplPTEsbi5zaGFwZT1uLnN0cmlkZT1uLm9yZGVyPVtdLG4ubG89bi5oaT1uLnRyYW5zcG9zZT1uLnN0ZXA9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcy5kYXRhLHRoaXMub2Zmc2V0KX0sbi5waWNrPWZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcy5kYXRhKX0sbi52YWx1ZU9mPW4uZ2V0PWZ1bmN0aW9uKCl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuZ2V0KHRoaXMub2Zmc2V0KTp0aGlzLmRhdGFbdGhpcy5vZmZzZXRdfSxuLnNldD1mdW5jdGlvbihlKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5zZXQodGhpcy5vZmZzZXQsZSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0XT1lfSxmdW5jdGlvbih0LGUsbixpKXtyZXR1cm4gbmV3IHIodCxpKX19LDE6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbil7dGhpcy5kYXRhPXQsdGhpcy5zaGFwZT1bZV0sdGhpcy5zdHJpZGU9W3JdLHRoaXMub2Zmc2V0PTB8bn12YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTEsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXX19KSxpLm9yZGVyPVswXSxpLnNldD1mdW5jdGlvbihlLHIpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplLHIpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplXT1yfSxpLmdldD1mdW5jdGlvbihlKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmVdfSxpLmluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0fSxpLmhpPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsdGhpcy5zdHJpZGVbMF0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMub2Zmc2V0LHI9MCxpPXRoaXMuc2hhcGVbMF0sYT10aGlzLnN0cmlkZVswXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihlKz1hKihyPTB8dCksaS09ciksbmV3IG4odGhpcy5kYXRhLGksYSxlKX0saS5zdGVwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2hhcGVbMF0scj10aGlzLnN0cmlkZVswXSxpPXRoaXMub2Zmc2V0LGE9MCxvPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigoYT0wfHQpPDA/KGkrPXIqKGUtMSksZT1vKC1lL2EpKTplPW8oZS9hKSxyKj1hKSxuZXcgbih0aGlzLmRhdGEsZSxyLGkpfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0KXt0PXZvaWQgMD09PXQ/MDowfHQ7dmFyIGU9dGhpcy5zaGFwZSxyPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsZVt0XSxyW3RdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQpe3ZhciByPVtdLG49W10saT10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/aT1pK3RoaXMuc3RyaWRlWzBdKnR8MDooci5wdXNoKHRoaXMuc2hhcGVbMF0pLG4ucHVzaCh0aGlzLnN0cmlkZVswXSkpLCgwLGVbci5sZW5ndGgrMV0pKHRoaXMuZGF0YSxyLG4saSl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sclswXSxpKX19LDI6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2Uscl0sdGhpcy5zdHJpZGU9W24saV0sdGhpcy5vZmZzZXQ9MHxhfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249MixPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKHRoaXMuc3RyaWRlWzBdKT5NYXRoLmFicyh0aGlzLnN0cmlkZVsxXSk/WzEsMF06WzAsMV19fSksaS5zZXQ9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIsbik6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcl09bn0saS5nZXQ9ZnVuY3Rpb24oZSxyKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyXX0saS5pbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmV9LGkuaGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLCJudW1iZXIiIT10eXBlb2YgdHx8dDwwP3RoaXMuc2hhcGVbMF06MHx0LCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwP3RoaXMuc2hhcGVbMV06MHxlLHRoaXMuc3RyaWRlWzBdLHRoaXMuc3RyaWRlWzFdLHRoaXMub2Zmc2V0KX0saS5sbz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMub2Zmc2V0LGk9MCxhPXRoaXMuc2hhcGVbMF0sbz10aGlzLnNoYXBlWzFdLHM9dGhpcy5zdHJpZGVbMF0sbD10aGlzLnN0cmlkZVsxXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihyKz1zKihpPTB8dCksYS09aSksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYocis9bCooaT0wfGUpLG8tPWkpLG5ldyBuKHRoaXMuZGF0YSxhLG8scyxsLHIpfSxpLnN0ZXA9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLnNoYXBlWzBdLGk9dGhpcy5zaGFwZVsxXSxhPXRoaXMuc3RyaWRlWzBdLG89dGhpcy5zdHJpZGVbMV0scz10aGlzLm9mZnNldCxsPTAsYz1NYXRoLmNlaWw7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiYoKGw9MHx0KTwwPyhzKz1hKihyLTEpLHI9Yygtci9sKSk6cj1jKHIvbCksYSo9bCksIm51bWJlciI9PXR5cGVvZiBlJiYoKGw9MHxlKTwwPyhzKz1vKihpLTEpLGk9YygtaS9sKSk6aT1jKGkvbCksbyo9bCksbmV3IG4odGhpcy5kYXRhLHIsaSxhLG8scyl9LGkudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7dD12b2lkIDA9PT10PzA6MHx0LGU9dm9pZCAwPT09ZT8xOjB8ZTt2YXIgcj10aGlzLnNoYXBlLGk9dGhpcy5zdHJpZGU7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSxyW3RdLHJbZV0saVt0XSxpW2VdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscil7dmFyIG49W10saT1bXSxhPXRoaXMub2Zmc2V0O3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MD9hPWErdGhpcy5zdHJpZGVbMF0qdHwwOihuLnB1c2godGhpcy5zaGFwZVswXSksaS5wdXNoKHRoaXMuc3RyaWRlWzBdKSksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wP2E9YSt0aGlzLnN0cmlkZVsxXSpyfDA6KG4ucHVzaCh0aGlzLnNoYXBlWzFdKSxpLnB1c2godGhpcy5zdHJpZGVbMV0pKSwoMCxlW24ubGVuZ3RoKzFdKSh0aGlzLmRhdGEsbixpLGEpfSxmdW5jdGlvbih0LGUscixpKXtyZXR1cm4gbmV3IG4odCxlWzBdLGVbMV0sclswXSxyWzFdLGkpfX0sMzpmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscixuLGksYSxvLHMpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuXSx0aGlzLnN0cmlkZT1baSxhLG9dLHRoaXMub2Zmc2V0PTB8c312YXIgaT1uLnByb3RvdHlwZTtyZXR1cm4gaS5kdHlwZT10LGkuZGltZW5zaW9uPTMsT2JqZWN0LmRlZmluZVByb3BlcnR5KGksInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaGFwZVswXSp0aGlzLnNoYXBlWzFdKnRoaXMuc2hhcGVbMl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIHQ9TWF0aC5hYnModGhpcy5zdHJpZGVbMF0pLGU9TWF0aC5hYnModGhpcy5zdHJpZGVbMV0pLHI9TWF0aC5hYnModGhpcy5zdHJpZGVbMl0pO3JldHVybiB0PmU/ZT5yP1syLDEsMF06dD5yP1sxLDIsMF06WzEsMCwyXTp0PnI/WzIsMCwxXTpyPmU/WzAsMSwyXTpbMCwyLDFdfX0pLGkuc2V0PWZ1bmN0aW9uKGUscixuLGkpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbixpKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm5dPWl9LGkuZ2V0PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4pOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbl19LGkuaW5kZXg9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmUrdGhpcy5zdHJpZGVbMl0qcn0saS5oaT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBuKHRoaXMuZGF0YSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MD90aGlzLnNoYXBlWzBdOjB8dCwibnVtYmVyIiE9dHlwZW9mIGV8fGU8MD90aGlzLnNoYXBlWzFdOjB8ZSwibnVtYmVyIiE9dHlwZW9mIHJ8fHI8MD90aGlzLnNoYXBlWzJdOjB8cix0aGlzLnN0cmlkZVswXSx0aGlzLnN0cmlkZVsxXSx0aGlzLnN0cmlkZVsyXSx0aGlzLm9mZnNldCl9LGkubG89ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMub2Zmc2V0LGE9MCxvPXRoaXMuc2hhcGVbMF0scz10aGlzLnNoYXBlWzFdLGw9dGhpcy5zaGFwZVsyXSxjPXRoaXMuc3RyaWRlWzBdLHU9dGhpcy5zdHJpZGVbMV0sZj10aGlzLnN0cmlkZVsyXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihpKz1jKihhPTB8dCksby09YSksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYoaSs9dSooYT0wfGUpLHMtPWEpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmKGkrPWYqKGE9MHxyKSxsLT1hKSxuZXcgbih0aGlzLmRhdGEsbyxzLGwsYyx1LGYsaSl9LGkuc3RlcD1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5zaGFwZVswXSxhPXRoaXMuc2hhcGVbMV0sbz10aGlzLnNoYXBlWzJdLHM9dGhpcy5zdHJpZGVbMF0sbD10aGlzLnN0cmlkZVsxXSxjPXRoaXMuc3RyaWRlWzJdLHU9dGhpcy5vZmZzZXQsZj0wLGg9TWF0aC5jZWlsO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmKChmPTB8dCk8MD8odSs9cyooaS0xKSxpPWgoLWkvZikpOmk9aChpL2YpLHMqPWYpLCJudW1iZXIiPT10eXBlb2YgZSYmKChmPTB8ZSk8MD8odSs9bCooYS0xKSxhPWgoLWEvZikpOmE9aChhL2YpLGwqPWYpLCJudW1iZXIiPT10eXBlb2YgciYmKChmPTB8cik8MD8odSs9Yyooby0xKSxvPWgoLW8vZikpOm89aChvL2YpLGMqPWYpLG5ldyBuKHRoaXMuZGF0YSxpLGEsbyxzLGwsYyx1KX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlLHIpe3Q9dm9pZCAwPT09dD8wOjB8dCxlPXZvaWQgMD09PWU/MTowfGUscj12b2lkIDA9PT1yPzI6MHxyO3ZhciBpPXRoaXMuc2hhcGUsYT10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLGlbdF0saVtlXSxpW3JdLGFbdF0sYVtlXSxhW3JdLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscixuKXt2YXIgaT1bXSxhPVtdLG89dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP289byt0aGlzLnN0cmlkZVswXSp0fDA6KGkucHVzaCh0aGlzLnNoYXBlWzBdKSxhLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/bz1vK3RoaXMuc3RyaWRlWzFdKnJ8MDooaS5wdXNoKHRoaXMuc2hhcGVbMV0pLGEucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCJudW1iZXIiPT10eXBlb2YgbiYmbj49MD9vPW8rdGhpcy5zdHJpZGVbMl0qbnwwOihpLnB1c2godGhpcy5zaGFwZVsyXSksYS5wdXNoKHRoaXMuc3RyaWRlWzJdKSksKDAsZVtpLmxlbmd0aCsxXSkodGhpcy5kYXRhLGksYSxvKX0sZnVuY3Rpb24odCxlLHIsaSl7cmV0dXJuIG5ldyBuKHQsZVswXSxlWzFdLGVbMl0sclswXSxyWzFdLHJbMl0saSl9fSw0OmZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyLG4saSxhLG8scyxsLGMpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuLGldLHRoaXMuc3RyaWRlPVthLG8scyxsXSx0aGlzLm9mZnNldD0wfGN9dmFyIGk9bi5wcm90b3R5cGU7cmV0dXJuIGkuZHR5cGU9dCxpLmRpbWVuc2lvbj00LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2hhcGVbMF0qdGhpcy5zaGFwZVsxXSp0aGlzLnNoYXBlWzJdKnRoaXMuc2hhcGVbM119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OnJ9KSxpLnNldD1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLnNldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppLGEpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppXT1hfSxpLmdldD1mdW5jdGlvbihlLHIsbixpKXtyZXR1cm4iZ2VuZXJpYyI9PT10P3RoaXMuZGF0YS5nZXQodGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSk6dGhpcy5kYXRhW3RoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmldfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSp0K3RoaXMuc3RyaWRlWzFdKmUrdGhpcy5zdHJpZGVbMl0qcit0aGlzLnN0cmlkZVszXSpufSxpLmhpPWZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsIm51bWJlciIhPXR5cGVvZiByfHxyPDA/dGhpcy5zaGFwZVsyXTowfHIsIm51bWJlciIhPXR5cGVvZiBpfHxpPDA/dGhpcy5zaGFwZVszXTowfGksdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5zdHJpZGVbMl0sdGhpcy5zdHJpZGVbM10sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRoaXMub2Zmc2V0LG89MCxzPXRoaXMuc2hhcGVbMF0sbD10aGlzLnNoYXBlWzFdLGM9dGhpcy5zaGFwZVsyXSx1PXRoaXMuc2hhcGVbM10sZj10aGlzLnN0cmlkZVswXSxoPXRoaXMuc3RyaWRlWzFdLHA9dGhpcy5zdHJpZGVbMl0sZD10aGlzLnN0cmlkZVszXTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTAmJihhKz1mKihvPTB8dCkscy09byksIm51bWJlciI9PXR5cGVvZiBlJiZlPj0wJiYoYSs9aCoobz0wfGUpLGwtPW8pLCJudW1iZXIiPT10eXBlb2YgciYmcj49MCYmKGErPXAqKG89MHxyKSxjLT1vKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTAmJihhKz1kKihvPTB8aSksdS09byksbmV3IG4odGhpcy5kYXRhLHMsbCxjLHUsZixoLHAsZCxhKX0saS5zdGVwPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPXRoaXMuc2hhcGVbMF0sbz10aGlzLnNoYXBlWzFdLHM9dGhpcy5zaGFwZVsyXSxsPXRoaXMuc2hhcGVbM10sYz10aGlzLnN0cmlkZVswXSx1PXRoaXMuc3RyaWRlWzFdLGY9dGhpcy5zdHJpZGVbMl0saD10aGlzLnN0cmlkZVszXSxwPXRoaXMub2Zmc2V0LGQ9MCxtPU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigoZD0wfHQpPDA/KHArPWMqKGEtMSksYT1tKC1hL2QpKTphPW0oYS9kKSxjKj1kKSwibnVtYmVyIj09dHlwZW9mIGUmJigoZD0wfGUpPDA/KHArPXUqKG8tMSksbz1tKC1vL2QpKTpvPW0oby9kKSx1Kj1kKSwibnVtYmVyIj09dHlwZW9mIHImJigoZD0wfHIpPDA/KHArPWYqKHMtMSkscz1tKC1zL2QpKTpzPW0ocy9kKSxmKj1kKSwibnVtYmVyIj09dHlwZW9mIGkmJigoZD0wfGkpPDA/KHArPWgqKGwtMSksbD1tKC1sL2QpKTpsPW0obC9kKSxoKj1kKSxuZXcgbih0aGlzLmRhdGEsYSxvLHMsbCxjLHUsZixoLHApfSxpLnRyYW5zcG9zZT1mdW5jdGlvbih0LGUscixpKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlLHI9dm9pZCAwPT09cj8yOjB8cixpPXZvaWQgMD09PWk/MzowfGk7dmFyIGE9dGhpcy5zaGFwZSxvPXRoaXMuc3RyaWRlO3JldHVybiBuZXcgbih0aGlzLmRhdGEsYVt0XSxhW2VdLGFbcl0sYVtpXSxvW3RdLG9bZV0sb1tyXSxvW2ldLHRoaXMub2Zmc2V0KX0saS5waWNrPWZ1bmN0aW9uKHQscixuLGkpe3ZhciBhPVtdLG89W10scz10aGlzLm9mZnNldDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+PTA/cz1zK3RoaXMuc3RyaWRlWzBdKnR8MDooYS5wdXNoKHRoaXMuc2hhcGVbMF0pLG8ucHVzaCh0aGlzLnN0cmlkZVswXSkpLCJudW1iZXIiPT10eXBlb2YgciYmcj49MD9zPXMrdGhpcy5zdHJpZGVbMV0qcnwwOihhLnB1c2godGhpcy5zaGFwZVsxXSksby5wdXNoKHRoaXMuc3RyaWRlWzFdKSksIm51bWJlciI9PXR5cGVvZiBuJiZuPj0wP3M9cyt0aGlzLnN0cmlkZVsyXSpufDA6KGEucHVzaCh0aGlzLnNoYXBlWzJdKSxvLnB1c2godGhpcy5zdHJpZGVbMl0pKSwibnVtYmVyIj09dHlwZW9mIGkmJmk+PTA/cz1zK3RoaXMuc3RyaWRlWzNdKml8MDooYS5wdXNoKHRoaXMuc2hhcGVbM10pLG8ucHVzaCh0aGlzLnN0cmlkZVszXSkpLCgwLGVbYS5sZW5ndGgrMV0pKHRoaXMuZGF0YSxhLG8scyl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxlWzJdLGVbM10sclswXSxyWzFdLHJbMl0sclszXSxpKX19LDU6ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3RoaXMuZGF0YT10LHRoaXMuc2hhcGU9W2UscixuLGksYV0sdGhpcy5zdHJpZGU9W28scyxsLGMsdV0sdGhpcy5vZmZzZXQ9MHxmfXZhciBpPW4ucHJvdG90eXBlO3JldHVybiBpLmR0eXBlPXQsaS5kaW1lbnNpb249NSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNoYXBlWzBdKnRoaXMuc2hhcGVbMV0qdGhpcy5zaGFwZVsyXSp0aGlzLnNoYXBlWzNdKnRoaXMuc2hhcGVbNF19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIm9yZGVyIix7Z2V0OnJ9KSxpLnNldD1mdW5jdGlvbihlLHIsbixpLGEsbyl7cmV0dXJuImdlbmVyaWMiPT09dD90aGlzLmRhdGEuc2V0KHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKmUrdGhpcy5zdHJpZGVbMV0qcit0aGlzLnN0cmlkZVsyXSpuK3RoaXMuc3RyaWRlWzNdKmkrdGhpcy5zdHJpZGVbNF0qYSxvKTp0aGlzLmRhdGFbdGhpcy5vZmZzZXQrdGhpcy5zdHJpZGVbMF0qZSt0aGlzLnN0cmlkZVsxXSpyK3RoaXMuc3RyaWRlWzJdKm4rdGhpcy5zdHJpZGVbM10qaSt0aGlzLnN0cmlkZVs0XSphXT1vfSxpLmdldD1mdW5jdGlvbihlLHIsbixpLGEpe3JldHVybiJnZW5lcmljIj09PXQ/dGhpcy5kYXRhLmdldCh0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmEpOnRoaXMuZGF0YVt0aGlzLm9mZnNldCt0aGlzLnN0cmlkZVswXSplK3RoaXMuc3RyaWRlWzFdKnIrdGhpcy5zdHJpZGVbMl0qbit0aGlzLnN0cmlkZVszXSppK3RoaXMuc3RyaWRlWzRdKmFdfSxpLmluZGV4PWZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJuIHRoaXMub2Zmc2V0K3RoaXMuc3RyaWRlWzBdKnQrdGhpcy5zdHJpZGVbMV0qZSt0aGlzLnN0cmlkZVsyXSpyK3RoaXMuc3RyaWRlWzNdKm4rdGhpcy5zdHJpZGVbNF0qaX0saS5oaT1mdW5jdGlvbih0LGUscixpLGEpe3JldHVybiBuZXcgbih0aGlzLmRhdGEsIm51bWJlciIhPXR5cGVvZiB0fHx0PDA/dGhpcy5zaGFwZVswXTowfHQsIm51bWJlciIhPXR5cGVvZiBlfHxlPDA/dGhpcy5zaGFwZVsxXTowfGUsIm51bWJlciIhPXR5cGVvZiByfHxyPDA/dGhpcy5zaGFwZVsyXTowfHIsIm51bWJlciIhPXR5cGVvZiBpfHxpPDA/dGhpcy5zaGFwZVszXTowfGksIm51bWJlciIhPXR5cGVvZiBhfHxhPDA/dGhpcy5zaGFwZVs0XTowfGEsdGhpcy5zdHJpZGVbMF0sdGhpcy5zdHJpZGVbMV0sdGhpcy5zdHJpZGVbMl0sdGhpcy5zdHJpZGVbM10sdGhpcy5zdHJpZGVbNF0sdGhpcy5vZmZzZXQpfSxpLmxvPWZ1bmN0aW9uKHQsZSxyLGksYSl7dmFyIG89dGhpcy5vZmZzZXQscz0wLGw9dGhpcy5zaGFwZVswXSxjPXRoaXMuc2hhcGVbMV0sdT10aGlzLnNoYXBlWzJdLGY9dGhpcy5zaGFwZVszXSxoPXRoaXMuc2hhcGVbNF0scD10aGlzLnN0cmlkZVswXSxkPXRoaXMuc3RyaWRlWzFdLG09dGhpcy5zdHJpZGVbMl0sZz10aGlzLnN0cmlkZVszXSx2PXRoaXMuc3RyaWRlWzRdO3JldHVybiJudW1iZXIiPT10eXBlb2YgdCYmdD49MCYmKG8rPXAqKHM9MHx0KSxsLT1zKSwibnVtYmVyIj09dHlwZW9mIGUmJmU+PTAmJihvKz1kKihzPTB8ZSksYy09cyksIm51bWJlciI9PXR5cGVvZiByJiZyPj0wJiYobys9bSoocz0wfHIpLHUtPXMpLCJudW1iZXIiPT10eXBlb2YgaSYmaT49MCYmKG8rPWcqKHM9MHxpKSxmLT1zKSwibnVtYmVyIj09dHlwZW9mIGEmJmE+PTAmJihvKz12KihzPTB8YSksaC09cyksbmV3IG4odGhpcy5kYXRhLGwsYyx1LGYsaCxwLGQsbSxnLHYsbyl9LGkuc3RlcD1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPXRoaXMuc2hhcGVbMF0scz10aGlzLnNoYXBlWzFdLGw9dGhpcy5zaGFwZVsyXSxjPXRoaXMuc2hhcGVbM10sdT10aGlzLnNoYXBlWzRdLGY9dGhpcy5zdHJpZGVbMF0saD10aGlzLnN0cmlkZVsxXSxwPXRoaXMuc3RyaWRlWzJdLGQ9dGhpcy5zdHJpZGVbM10sbT10aGlzLnN0cmlkZVs0XSxnPXRoaXMub2Zmc2V0LHY9MCx5PU1hdGguY2VpbDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJigodj0wfHQpPDA/KGcrPWYqKG8tMSksbz15KC1vL3YpKTpvPXkoby92KSxmKj12KSwibnVtYmVyIj09dHlwZW9mIGUmJigodj0wfGUpPDA/KGcrPWgqKHMtMSkscz15KC1zL3YpKTpzPXkocy92KSxoKj12KSwibnVtYmVyIj09dHlwZW9mIHImJigodj0wfHIpPDA/KGcrPXAqKGwtMSksbD15KC1sL3YpKTpsPXkobC92KSxwKj12KSwibnVtYmVyIj09dHlwZW9mIGkmJigodj0wfGkpPDA/KGcrPWQqKGMtMSksYz15KC1jL3YpKTpjPXkoYy92KSxkKj12KSwibnVtYmVyIj09dHlwZW9mIGEmJigodj0wfGEpPDA/KGcrPW0qKHUtMSksdT15KC11L3YpKTp1PXkodS92KSxtKj12KSxuZXcgbih0aGlzLmRhdGEsbyxzLGwsYyx1LGYsaCxwLGQsbSxnKX0saS50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlLHIsaSxhKXt0PXZvaWQgMD09PXQ/MDowfHQsZT12b2lkIDA9PT1lPzE6MHxlLHI9dm9pZCAwPT09cj8yOjB8cixpPXZvaWQgMD09PWk/MzowfGksYT12b2lkIDA9PT1hPzQ6MHxhO3ZhciBvPXRoaXMuc2hhcGUscz10aGlzLnN0cmlkZTtyZXR1cm4gbmV3IG4odGhpcy5kYXRhLG9bdF0sb1tlXSxvW3JdLG9baV0sb1thXSxzW3RdLHNbZV0sc1tyXSxzW2ldLHNbYV0sdGhpcy5vZmZzZXQpfSxpLnBpY2s9ZnVuY3Rpb24odCxyLG4saSxhKXt2YXIgbz1bXSxzPVtdLGw9dGhpcy5vZmZzZXQ7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZ0Pj0wP2w9bCt0aGlzLnN0cmlkZVswXSp0fDA6KG8ucHVzaCh0aGlzLnNoYXBlWzBdKSxzLnB1c2godGhpcy5zdHJpZGVbMF0pKSwibnVtYmVyIj09dHlwZW9mIHImJnI+PTA/bD1sK3RoaXMuc3RyaWRlWzFdKnJ8MDooby5wdXNoKHRoaXMuc2hhcGVbMV0pLHMucHVzaCh0aGlzLnN0cmlkZVsxXSkpLCJudW1iZXIiPT10eXBlb2YgbiYmbj49MD9sPWwrdGhpcy5zdHJpZGVbMl0qbnwwOihvLnB1c2godGhpcy5zaGFwZVsyXSkscy5wdXNoKHRoaXMuc3RyaWRlWzJdKSksIm51bWJlciI9PXR5cGVvZiBpJiZpPj0wP2w9bCt0aGlzLnN0cmlkZVszXSppfDA6KG8ucHVzaCh0aGlzLnNoYXBlWzNdKSxzLnB1c2godGhpcy5zdHJpZGVbM10pKSwibnVtYmVyIj09dHlwZW9mIGEmJmE+PTA/bD1sK3RoaXMuc3RyaWRlWzRdKmF8MDooby5wdXNoKHRoaXMuc2hhcGVbNF0pLHMucHVzaCh0aGlzLnN0cmlkZVs0XSkpLCgwLGVbby5sZW5ndGgrMV0pKHRoaXMuZGF0YSxvLHMsbCl9LGZ1bmN0aW9uKHQsZSxyLGkpe3JldHVybiBuZXcgbih0LGVbMF0sZVsxXSxlWzJdLGVbM10sZVs0XSxyWzBdLHJbMV0sclsyXSxyWzNdLHJbNF0saSl9fX07ZnVuY3Rpb24gbCh0LGUpe3ZhciByPS0xPT09ZT8iVCI6U3RyaW5nKGUpLG49c1tyXTtyZXR1cm4tMT09PWU/bih0KTowPT09ZT9uKHQsY1t0XVswXSk6bih0LGNbdF0sbyl9dmFyIGM9e2dlbmVyaWM6W10sYnVmZmVyOltdLGFycmF5OltdLGZsb2F0MzI6W10sZmxvYXQ2NDpbXSxpbnQ4OltdLGludDE2OltdLGludDMyOltdLHVpbnQ4X2NsYW1wZWQ6W10sdWludDg6W10sdWludDE2OltdLHVpbnQzMjpbXSxiaWdpbnQ2NDpbXSxiaWd1aW50NjQ6W119O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXtpZih2b2lkIDA9PT10KXJldHVybigwLGMuYXJyYXlbMF0pKFtdKTsibnVtYmVyIj09dHlwZW9mIHQmJih0PVt0XSksdm9pZCAwPT09ZSYmKGU9W3QubGVuZ3RoXSk7dmFyIG89ZS5sZW5ndGg7aWYodm9pZCAwPT09cil7cj1uZXcgQXJyYXkobyk7Zm9yKHZhciBzPW8tMSx1PTE7cz49MDstLXMpcltzXT11LHUqPWVbc119aWYodm9pZCAwPT09YSl7YT0wO2ZvcihzPTA7czxvOysrcylyW3NdPDAmJihhLT0oZVtzXS0xKSpyW3NdKX1mb3IodmFyIGY9ZnVuY3Rpb24odCl7aWYobih0KSlyZXR1cm4iYnVmZmVyIjtpZihpKXN3aXRjaChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkpe2Nhc2UiW29iamVjdCBGbG9hdDY0QXJyYXldIjpyZXR1cm4iZmxvYXQ2NCI7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOnJldHVybiJmbG9hdDMyIjtjYXNlIltvYmplY3QgSW50OEFycmF5XSI6cmV0dXJuImludDgiO2Nhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6cmV0dXJuImludDE2IjtjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOnJldHVybiJpbnQzMiI7Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6cmV0dXJuInVpbnQ4X2NsYW1wZWQiO2Nhc2UiW29iamVjdCBVaW50OEFycmF5XSI6cmV0dXJuInVpbnQ4IjtjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpyZXR1cm4idWludDE2IjtjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4idWludDMyIjtjYXNlIltvYmplY3QgQmlnSW50NjRBcnJheV0iOnJldHVybiJiaWdpbnQ2NCI7Y2FzZSJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI6cmV0dXJuImJpZ3VpbnQ2NCJ9cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ImFycmF5IjoiZ2VuZXJpYyJ9KHQpLGg9Y1tmXTtoLmxlbmd0aDw9bysxOyloLnB1c2gobChmLGgubGVuZ3RoLTEpKTtyZXR1cm4oMCxoW28rMV0pKHQsZSxyLGEpfX0seyJpcy1idWZmZXIiOjQzM31dLDQ2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkb3VibGUtYml0cyIpLGk9TWF0aC5wb3coMiwtMTA3NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoaXNOYU4odCl8fGlzTmFOKGUpKXJldHVybiBOYU47aWYodD09PWUpcmV0dXJuIHQ7aWYoMD09PXQpcmV0dXJuIGU8MD8taTppO3ZhciByPW4uaGkodCksYT1uLmxvKHQpO2U+dD09dD4wP2E9PT0tMT4+PjA/KHIrPTEsYT0wKTphKz0xOjA9PT1hPyhhPS0xPj4+MCxyLT0xKTphLT0xO3JldHVybiBuLnBhY2soYSxyKX19LHsiZG91YmxlLWJpdHMiOjE3NH1dLDQ2NDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGguUEksaT1jKDEyMCk7ZnVuY3Rpb24gYSh0LGUscixuKXtyZXR1cm5bIkMiLHQsZSxyLG4scixuXX1mdW5jdGlvbiBvKHQsZSxyLG4saSxhKXtyZXR1cm5bIkMiLHQvMysyLzMqcixlLzMrMi8zKm4saS8zKzIvMypyLGEvMysyLzMqbixpLGFdfWZ1bmN0aW9uIHModCxlLHIsYSxvLGMsdSxmLGgscCl7aWYocClUPXBbMF0saz1wWzFdLF89cFsyXSx3PXBbM107ZWxzZXt2YXIgZD1sKHQsZSwtbyk7dD1kLngsZT1kLnk7dmFyIG09KHQtKGY9KGQ9bChmLGgsLW8pKS54KSkvMixnPShlLShoPWQueSkpLzIsdj1tKm0vKHIqcikrZypnLyhhKmEpO3Y+MSYmKHIqPXY9TWF0aC5zcXJ0KHYpLGEqPXYpO3ZhciB5PXIqcix4PWEqYSxiPShjPT11Py0xOjEpKk1hdGguc3FydChNYXRoLmFicygoeSp4LXkqZypnLXgqbSptKS8oeSpnKmcreCptKm0pKSk7Yj09MS8wJiYoYj0xKTt2YXIgXz1iKnIqZy9hKyh0K2YpLzIsdz1iKi1hKm0vcisoZStoKS8yLFQ9TWF0aC5hc2luKCgoZS13KS9hKS50b0ZpeGVkKDkpKSxrPU1hdGguYXNpbigoKGgtdykvYSkudG9GaXhlZCg5KSk7KFQ9dDxfP24tVDpUKTwwJiYoVD0yKm4rVCksKGs9ZjxfP24tazprKTwwJiYoaz0yKm4rayksdSYmVD5rJiYoVC09MipuKSwhdSYmaz5UJiYoay09MipuKX1pZihNYXRoLmFicyhrLVQpPmkpe3ZhciBBPWssTT1mLFM9aDtrPVQraSoodSYmaz5UPzE6LTEpO3ZhciBFPXMoZj1fK3IqTWF0aC5jb3MoayksaD13K2EqTWF0aC5zaW4oaykscixhLG8sMCx1LE0sUyxbayxBLF8sd10pfXZhciBMPU1hdGgudGFuKChrLVQpLzQpLEM9NC8zKnIqTCxQPTQvMyphKkwsST1bMip0LSh0K0MqTWF0aC5zaW4oVCkpLDIqZS0oZS1QKk1hdGguY29zKFQpKSxmK0MqTWF0aC5zaW4oayksaC1QKk1hdGguY29zKGspLGYsaF07aWYocClyZXR1cm4gSTtFJiYoST1JLmNvbmNhdChFKSk7Zm9yKHZhciBPPTA7TzxJLmxlbmd0aDspe3ZhciB6PWwoSVtPXSxJW08rMV0sbyk7SVtPKytdPXoueCxJW08rK109ei55fXJldHVybiBJfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybnt4OnQqTWF0aC5jb3MociktZSpNYXRoLnNpbihyKSx5OnQqTWF0aC5zaW4ocikrZSpNYXRoLmNvcyhyKX19ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdCoobi8xODApfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPTAsaT0wLGw9MCx1PTAsZj1udWxsLGg9bnVsbCxwPTAsZD0wLG09MCxnPXQubGVuZ3RoO208ZzttKyspe3ZhciB2PXRbbV0seT12WzBdO3N3aXRjaCh5KXtjYXNlIk0iOmw9dlsxXSx1PXZbMl07YnJlYWs7Y2FzZSJBIjoodj1zKHAsZCx2WzFdLHZbMl0sYyh2WzNdKSx2WzRdLHZbNV0sdls2XSx2WzddKSkudW5zaGlmdCgiQyIpLHYubGVuZ3RoPjcmJihyLnB1c2godi5zcGxpY2UoMCw3KSksdi51bnNoaWZ0KCJDIikpO2JyZWFrO2Nhc2UiUyI6dmFyIHg9cCxiPWQ7IkMiIT1lJiYiUyIhPWV8fCh4Kz14LW4sYis9Yi1pKSx2PVsiQyIseCxiLHZbMV0sdlsyXSx2WzNdLHZbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KGY9MipwLWYsaD0yKmQtaCk6KGY9cCxoPWQpLHY9byhwLGQsZixoLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJRIjpmPXZbMV0saD12WzJdLHY9byhwLGQsdlsxXSx2WzJdLHZbM10sdls0XSk7YnJlYWs7Y2FzZSJMIjp2PWEocCxkLHZbMV0sdlsyXSk7YnJlYWs7Y2FzZSJIIjp2PWEocCxkLHZbMV0sZCk7YnJlYWs7Y2FzZSJWIjp2PWEocCxkLHAsdlsxXSk7YnJlYWs7Y2FzZSJaIjp2PWEocCxkLGwsdSl9ZT15LHA9dlt2Lmxlbmd0aC0yXSxkPXZbdi5sZW5ndGgtMV0sdi5sZW5ndGg+ND8obj12W3YubGVuZ3RoLTRdLGk9dlt2Lmxlbmd0aC0zXSk6KG49cCxpPWQpLHIucHVzaCh2KX1yZXR1cm4gcn19LHt9XSw0NjU6W2Z1bmN0aW9uKHQsZSxyKXtyLnZlcnRleE5vcm1hbHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPXZvaWQgMD09PXI/MWUtNjpyLG89MDtvPG47KytvKWlbb109WzAsMCwwXTtmb3Iobz0wO288dC5sZW5ndGg7KytvKWZvcih2YXIgcz10W29dLGw9MCxjPXNbcy5sZW5ndGgtMV0sdT1zWzBdLGY9MDtmPHMubGVuZ3RoOysrZil7bD1jLGM9dSx1PXNbKGYrMSklcy5sZW5ndGhdO2Zvcih2YXIgaD1lW2xdLHA9ZVtjXSxkPWVbdV0sbT1uZXcgQXJyYXkoMyksZz0wLHY9bmV3IEFycmF5KDMpLHk9MCx4PTA7eDwzOysreCltW3hdPWhbeF0tcFt4XSxnKz1tW3hdKm1beF0sdlt4XT1kW3hdLXBbeF0seSs9dlt4XSp2W3hdO2lmKGcqeT5hKXt2YXIgYj1pW2NdLF89MS9NYXRoLnNxcnQoZyp5KTtmb3IoeD0wO3g8MzsrK3gpe3ZhciB3PSh4KzEpJTMsVD0oeCsyKSUzO2JbeF0rPV8qKHZbd10qbVtUXS12W1RdKm1bd10pfX19Zm9yKG89MDtvPG47KytvKXtiPWlbb107dmFyIGs9MDtmb3IoeD0wO3g8MzsrK3gpays9Ylt4XSpiW3hdO2lmKGs+YSlmb3IoXz0xL01hdGguc3FydChrKSx4PTA7eDwzOysreCliW3hdKj1fO2Vsc2UgZm9yKHg9MDt4PDM7Kyt4KWJbeF09MH1yZXR1cm4gaX0sci5mYWNlTm9ybWFscz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQubGVuZ3RoLGk9bmV3IEFycmF5KG4pLGE9dm9pZCAwPT09cj8xZS02OnIsbz0wO288bjsrK28pe2Zvcih2YXIgcz10W29dLGw9bmV3IEFycmF5KDMpLGM9MDtjPDM7KytjKWxbY109ZVtzW2NdXTt2YXIgdT1uZXcgQXJyYXkoMyksZj1uZXcgQXJyYXkoMyk7Zm9yKGM9MDtjPDM7KytjKXVbY109bFsxXVtjXS1sWzBdW2NdLGZbY109bFsyXVtjXS1sWzBdW2NdO3ZhciBoPW5ldyBBcnJheSgzKSxwPTA7Zm9yKGM9MDtjPDM7KytjKXt2YXIgZD0oYysxKSUzLG09KGMrMiklMztoW2NdPXVbZF0qZlttXS11W21dKmZbZF0scCs9aFtjXSpoW2NdfXA9cD5hPzEvTWF0aC5zcXJ0KHApOjA7Zm9yKGM9MDtjPDM7KytjKWhbY10qPXA7aVtvXT1ofXJldHVybiBpfX0se31dLDQ2NjpbZnVuY3Rpb24odCxlLHIpewovKgpvYmplY3QtYXNzaWduCihjKSBTaW5kcmUgU29yaHVzCkBsaWNlbnNlIE1JVAoqLwoidXNlIHN0cmljdCI7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8odCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QodCl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciB0PW5ldyBTdHJpbmcoImFiYyIpO2lmKHRbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KVswXSlyZXR1cm4hMTtmb3IodmFyIGU9e30scj0wO3I8MTA7cisrKWVbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbih0KXtuW3RdPXR9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKHQpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLHMsbD1vKHQpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlpLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWEuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSx7fV0sNDY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSxvLHMsbCxjKXt2YXIgdT1lK2ErYztpZihmPjApe3ZhciBmPU1hdGguc3FydCh1KzEpO3RbMF09LjUqKG8tbCkvZix0WzFdPS41KihzLW4pL2YsdFsyXT0uNSooci1hKS9mLHRbM109LjUqZn1lbHNle3ZhciBoPU1hdGgubWF4KGUsYSxjKTtmPU1hdGguc3FydCgyKmgtdSsxKTtlPj1oPyh0WzBdPS41KmYsdFsxXT0uNSooaStyKS9mLHRbMl09LjUqKHMrbikvZix0WzNdPS41KihvLWwpL2YpOmE+PWg/KHRbMF09LjUqKHIraSkvZix0WzFdPS41KmYsdFsyXT0uNSoobCtvKS9mLHRbM109LjUqKHMtbikvZik6KHRbMF09LjUqKG4rcykvZix0WzFdPS41KihvK2wpL2YsdFsyXT0uNSpmLHRbM109LjUqKHItaSkvZil9cmV0dXJuIHR9fSx7fV0sNDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0odD10fHx7fSkuY2VudGVyfHxbMCwwLDBdLHI9dC5yb3RhdGlvbnx8WzAsMCwwLDFdLG49dC5yYWRpdXN8fDE7ZT1bXS5zbGljZS5jYWxsKGUsMCwzKSx1KHI9W10uc2xpY2UuY2FsbChyLDAsNCkscik7dmFyIGk9bmV3IGYocixlLE1hdGgubG9nKG4pKTtpLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpLCgiZXllImluIHR8fCJ1cCJpbiB0KSYmaS5sb29rQXQoMCx0LmV5ZSx0LmNlbnRlcix0LnVwKTtyZXR1cm4gaX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2xvb2tBdCIpLGE9dCgiZ2wtbWF0NC9mcm9tUXVhdCIpLG89dCgiZ2wtbWF0NC9pbnZlcnQiKSxzPXQoIi4vbGliL3F1YXRGcm9tRnJhbWUiKTtmdW5jdGlvbiBsKHQsZSxyKXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHQsMikrTWF0aC5wb3coZSwyKStNYXRoLnBvdyhyLDIpKX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikrTWF0aC5wb3cobiwyKSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWVbMF0sbj1lWzFdLGk9ZVsyXSxhPWVbM10sbz1jKHIsbixpLGEpO28+MWUtNj8odFswXT1yL28sdFsxXT1uL28sdFsyXT1pL28sdFszXT1hL28pOih0WzBdPXRbMV09dFsyXT0wLHRbM109MSl9ZnVuY3Rpb24gZih0LGUscil7dGhpcy5yYWRpdXM9bihbcl0pLHRoaXMuY2VudGVyPW4oZSksdGhpcy5yb3RhdGlvbj1uKHQpLHRoaXMuY29tcHV0ZWRSYWRpdXM9dGhpcy5yYWRpdXMuY3VydmUoMCksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUm90YXRpb249dGhpcy5yb3RhdGlvbi5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9Wy4xLDAsMF0sdGhpcy5jb21wdXRlZEV5ZT1bLjEsMCwwXSx0aGlzLmNvbXB1dGVkTWF0cml4PVsuMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sdGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIGg9Zi5wcm90b3R5cGU7aC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLnJhZGl1cy5sYXN0VCgpLHRoaXMuY2VudGVyLmxhc3RUKCksdGhpcy5yb3RhdGlvbi5sYXN0VCgpKX0saC5yZWNhbGNNYXRyaXg9ZnVuY3Rpb24odCl7dGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5jZW50ZXIuY3VydmUodCksdGhpcy5yb3RhdGlvbi5jdXJ2ZSh0KTt2YXIgZT10aGlzLmNvbXB1dGVkUm90YXRpb247dShlLGUpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7YShyLGUpO3ZhciBuPXRoaXMuY29tcHV0ZWRDZW50ZXIsaT10aGlzLmNvbXB1dGVkRXllLG89dGhpcy5jb21wdXRlZFVwLHM9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7aVswXT1uWzBdK3MqclsyXSxpWzFdPW5bMV0rcypyWzZdLGlbMl09blsyXStzKnJbMTBdLG9bMF09clsxXSxvWzFdPXJbNV0sb1syXT1yWzldO2Zvcih2YXIgbD0wO2w8MzsrK2wpe2Zvcih2YXIgYz0wLGY9MDtmPDM7KytmKWMrPXJbbCs0KmZdKmlbZl07clsxMitsXT0tY319LGguZ2V0TWF0cml4PWZ1bmN0aW9uKHQsZSl7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIHI9dGhpcy5jb21wdXRlZE1hdHJpeDtpZihlKXtmb3IodmFyIG49MDtuPDE2OysrbillW25dPXJbbl07cmV0dXJuIGV9cmV0dXJuIHJ9LGguaWRsZT1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5yb3RhdGlvbi5pZGxlKHQpfSxoLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMucmFkaXVzLmZsdXNoKHQpLHRoaXMucm90YXRpb24uZmx1c2godCl9LGgucGFuPWZ1bmN0aW9uKHQsZSxyLG4pe2U9ZXx8MCxyPXJ8fDAsbj1ufHwwLHRoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzFdLG89aVs1XSxzPWlbOV0sYz1sKGEsbyxzKTthLz1jLG8vPWMscy89Yzt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWwodS09YSpwLGYtPW8qcCxoLT1zKnApO3UvPWQsZi89ZCxoLz1kO3ZhciBtPWlbMl0sZz1pWzZdLHY9aVsxMF0seT1tKmErZypvK3Yqcyx4PW0qdStnKmYrdipoLGI9bChtLT15KmEreCp1LGctPXkqbyt4KmYsdi09eSpzK3gqaCk7bS89YixnLz1iLHYvPWI7dmFyIF89dSplK2Eqcix3PWYqZStvKnIsVD1oKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxfLHcsVCk7dmFyIGs9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7az1NYXRoLm1heCgxZS00LGsrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coaykpfSxoLnJvdGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLnJlY2FsY01hdHJpeCh0KSxlPWV8fDAscj1yfHwwO3ZhciBpPXRoaXMuY29tcHV0ZWRNYXRyaXgsYT1pWzBdLG89aVs0XSxzPWlbOF0sdT1pWzFdLGY9aVs1XSxoPWlbOV0scD1pWzJdLGQ9aVs2XSxtPWlbMTBdLGc9ZSphK3IqdSx2PWUqbytyKmYseT1lKnMrcipoLHg9LShkKnktbSp2KSxiPS0obSpnLXAqeSksXz0tKHAqdi1kKmcpLHc9TWF0aC5zcXJ0KE1hdGgubWF4KDAsMS1NYXRoLnBvdyh4LDIpLU1hdGgucG93KGIsMiktTWF0aC5wb3coXywyKSkpLFQ9Yyh4LGIsXyx3KTtUPjFlLTY/KHgvPVQsYi89VCxfLz1ULHcvPVQpOih4PWI9Xz0wLHc9MSk7dmFyIGs9dGhpcy5jb21wdXRlZFJvdGF0aW9uLEE9a1swXSxNPWtbMV0sUz1rWzJdLEU9a1szXSxMPUEqdytFKngrTSpfLVMqYixDPU0qdytFKmIrUyp4LUEqXyxQPVMqdytFKl8rQSpiLU0qeCxJPUUqdy1BKngtTSpiLVMqXztpZihuKXt4PXAsYj1kLF89bTt2YXIgTz1NYXRoLnNpbihuKS9sKHgsYixfKTt4Kj1PLGIqPU8sXyo9TyxJPUkqKHc9TWF0aC5jb3MoZSkpLShMPUwqdytJKngrQypfLVAqYikqeC0oQz1DKncrSSpiK1AqeC1MKl8pKmItKFA9UCp3K0kqXytMKmItQyp4KSpffXZhciB6PWMoTCxDLFAsSSk7ej4xZS02PyhMLz16LEMvPXosUC89eixJLz16KTooTD1DPVA9MCxJPTEpLHRoaXMucm90YXRpb24uc2V0KHQsTCxDLFAsSSl9LGgubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLHI9cnx8dGhpcy5jb21wdXRlZENlbnRlcixlPWV8fHRoaXMuY29tcHV0ZWRFeWUsbj1ufHx0aGlzLmNvbXB1dGVkVXA7dmFyIGE9dGhpcy5jb21wdXRlZE1hdHJpeDtpKGEsZSxyLG4pO3ZhciBvPXRoaXMuY29tcHV0ZWRSb3RhdGlvbjtzKG8sYVswXSxhWzFdLGFbMl0sYVs0XSxhWzVdLGFbNl0sYVs4XSxhWzldLGFbMTBdKSx1KG8sbyksdGhpcy5yb3RhdGlvbi5zZXQodCxvWzBdLG9bMV0sb1syXSxvWzNdKTtmb3IodmFyIGw9MCxjPTA7YzwzOysrYylsKz1NYXRoLnBvdyhyW2NdLWVbY10sMik7dGhpcy5yYWRpdXMuc2V0KHQsLjUqTWF0aC5sb2coTWF0aC5tYXgobCwxZS02KSkpLHRoaXMuY2VudGVyLnNldCh0LHJbMF0sclsxXSxyWzJdKX0saC50cmFuc2xhdGU9ZnVuY3Rpb24odCxlLHIsbil7dGhpcy5jZW50ZXIubW92ZSh0LGV8fDAscnx8MCxufHwwKX0saC5zZXRNYXRyaXg9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmNvbXB1dGVkUm90YXRpb247cyhyLGVbMF0sZVsxXSxlWzJdLGVbNF0sZVs1XSxlWzZdLGVbOF0sZVs5XSxlWzEwXSksdShyLHIpLHRoaXMucm90YXRpb24uc2V0KHQsclswXSxyWzFdLHJbMl0sclszXSk7dmFyIG49dGhpcy5jb21wdXRlZE1hdHJpeDtvKG4sZSk7dmFyIGk9blsxNV07aWYoTWF0aC5hYnMoaSk+MWUtNil7dmFyIGE9blsxMl0vaSxsPW5bMTNdL2ksYz1uWzE0XS9pO3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciBmPU1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pO3RoaXMuY2VudGVyLnNldCh0LGEtblsyXSpmLGwtbls2XSpmLGMtblsxMF0qZiksdGhpcy5yYWRpdXMuaWRsZSh0KX1lbHNlIHRoaXMuY2VudGVyLmlkbGUodCksdGhpcy5yYWRpdXMuaWRsZSh0KX0saC5zZXREaXN0YW5jZT1mdW5jdGlvbih0LGUpe2U+MCYmdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coZSkpfSxoLnNldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQsZSl7dD10PjA/TWF0aC5sb2codCk6LTEvMCxlPWU+MD9NYXRoLmxvZyhlKToxLzAsZT1NYXRoLm1heChlLHQpLHRoaXMucmFkaXVzLmJvdW5kc1swXVswXT10LHRoaXMucmFkaXVzLmJvdW5kc1sxXVswXT1lfSxoLmdldERpc3RhbmNlTGltaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucmFkaXVzLmJvdW5kcztyZXR1cm4gdD8odFswXT1NYXRoLmV4cChlWzBdWzBdKSx0WzFdPU1hdGguZXhwKGVbMV1bMF0pLHQpOltNYXRoLmV4cChlWzBdWzBdKSxNYXRoLmV4cChlWzFdWzBdKV19LGgudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVjYWxjTWF0cml4KHRoaXMubGFzdFQoKSkse2NlbnRlcjp0aGlzLmNvbXB1dGVkQ2VudGVyLnNsaWNlKCkscm90YXRpb246dGhpcy5jb21wdXRlZFJvdGF0aW9uLnNsaWNlKCksZGlzdGFuY2U6TWF0aC5sb2codGhpcy5jb21wdXRlZFJhZGl1c1swXSksem9vbU1pbjp0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF0sem9vbU1heDp0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF19fSxoLmZyb21KU09OPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGFzdFQoKSxyPXQuY2VudGVyO3ImJnRoaXMuY2VudGVyLnNldChlLHJbMF0sclsxXSxyWzJdKTt2YXIgbj10LnJvdGF0aW9uO24mJnRoaXMucm90YXRpb24uc2V0KGUsblswXSxuWzFdLG5bMl0sblszXSk7dmFyIGk9dC5kaXN0YW5jZTtpJiZpPjAmJnRoaXMucmFkaXVzLnNldChlLE1hdGgubG9nKGkpKSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQuem9vbU1pbix0Lnpvb21NYXgpfX0seyIuL2xpYi9xdWF0RnJvbUZyYW1lIjo0NjcsImZpbHRlcmVkLXZlY3RvciI6MjQzLCJnbC1tYXQ0L2Zyb21RdWF0IjoyNzYsImdsLW1hdDQvaW52ZXJ0IjoyODcsImdsLW1hdDQvbG9va0F0IjoyODh9XSw0Njk6W2Z1bmN0aW9uKHQsZSxyKXsKLyohCiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD4KICoKICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwoidXNlIHN0cmljdCI7dmFyIG49dCgicmVwZWF0LXN0cmluZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4ocj12b2lkIDAhPT1yP3IrIiI6IiAiLGUpK3R9fSx7InJlcGVhdC1zdHJpbmciOjUxN31dLDQ3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7aWYoInN0cmluZyIhPXR5cGVvZiB0KXJldHVyblt0XTt2YXIgcj1bdF07InN0cmluZyI9PXR5cGVvZiBlfHxBcnJheS5pc0FycmF5KGUpP2U9e2JyYWNrZXRzOmV9OmV8fChlPXt9KTt2YXIgbj1lLmJyYWNrZXRzP0FycmF5LmlzQXJyYXkoZS5icmFja2V0cyk/ZS5icmFja2V0czpbZS5icmFja2V0c106WyJ7fSIsIltdIiwiKCkiXSxpPWUuZXNjYXBlfHwiX19fIixhPSEhZS5mbGF0O24uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bmV3IFJlZ0V4cChbIlxcIix0WzBdLCJbXlxcIix0WzBdLCJcXCIsdFsxXSwiXSpcXCIsdFsxXV0uam9pbigiIikpLG49W107ZnVuY3Rpb24gYShlLGEsbyl7dmFyIHM9ci5wdXNoKGUuc2xpY2UodFswXS5sZW5ndGgsLXRbMV0ubGVuZ3RoKSktMTtyZXR1cm4gbi5wdXNoKHMpLGkrcytpfXIuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtmb3IodmFyIGksbz0wO3QhPWk7KWlmKGk9dCx0PXQucmVwbGFjZShlLGEpLG8rKz4xZTQpdGhyb3cgRXJyb3IoIlJlZmVyZW5jZXMgaGF2ZSBjaXJjdWxhciBkZXBlbmRlbmN5LiBQbGVhc2UsIGNoZWNrIHRoZW0uIik7cltuXT10fSkpLG49bi5yZXZlcnNlKCkscj1yLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIG4uZm9yRWFjaCgoZnVuY3Rpb24ocil7ZT1lLnJlcGxhY2UobmV3IFJlZ0V4cCgiKFxcIitpK3IrIlxcIitpKyIpIiwiZyIpLHRbMF0rIiQxIit0WzFdKX0pKSxlfSkpfSkpO3ZhciBvPW5ldyBSZWdFeHAoIlxcIitpKyIoWzAtOV0rKVxcIitpKTtyZXR1cm4gYT9yOmZ1bmN0aW9uIHQoZSxyLG4pe2Zvcih2YXIgaSxhPVtdLHM9MDtpPW8uZXhlYyhlKTspe2lmKHMrKz4xZTQpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gcGFyZW50aGVzaXMiKTthLnB1c2goZS5zbGljZSgwLGkuaW5kZXgpKSxhLnB1c2godChyW2lbMV1dLHIpKSxlPWUuc2xpY2UoaS5pbmRleCtpWzBdLmxlbmd0aCl9cmV0dXJuIGEucHVzaChlKSxhfShyWzBdLHIpfWZ1bmN0aW9uIGkodCxlKXtpZihlJiZlLmZsYXQpe3ZhciByLG49ZSYmZS5lc2NhcGV8fCJfX18iLGk9dFswXTtpZighaSlyZXR1cm4iIjtmb3IodmFyIGE9bmV3IFJlZ0V4cCgiXFwiK24rIihbMC05XSspXFwiK24pLG89MDtpIT1yOyl7aWYobysrPjFlNCl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlcyBpbiAiK3QpO3I9aSxpPWkucmVwbGFjZShhLHMpfXJldHVybiBpfXJldHVybiB0LnJlZHVjZSgoZnVuY3Rpb24gdChlLHIpe3JldHVybiBBcnJheS5pc0FycmF5KHIpJiYocj1yLnJlZHVjZSh0LCIiKSksZStyfSksIiIpO2Z1bmN0aW9uIHMoZSxyKXtpZihudWxsPT10W3JdKXRocm93IEVycm9yKCJSZWZlcmVuY2UgIityKyJpcyB1bmRlZmluZWQiKTtyZXR1cm4gdFtyXX19ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KHQpP2kodCxlKTpuKHQsZSl9YS5wYXJzZT1uLGEuc3RyaW5naWZ5PWksZS5leHBvcnRzPWF9LHt9XSw0NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGljay1ieS1hbGlhcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTthcmd1bWVudHMubGVuZ3RoPjEmJih0PWFyZ3VtZW50cyk7InN0cmluZyI9PXR5cGVvZiB0P3Q9dC5zcGxpdCgvXHMvKS5tYXAocGFyc2VGbG9hdCk6Im51bWJlciI9PXR5cGVvZiB0JiYodD1bdF0pO3QubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHRbMF0/ZT0xPT09dC5sZW5ndGg/e3dpZHRoOnRbMF0saGVpZ2h0OnRbMF0seDowLHk6MH06Mj09PXQubGVuZ3RoP3t3aWR0aDp0WzBdLGhlaWdodDp0WzFdLHg6MCx5OjB9Ont4OnRbMF0seTp0WzFdLHdpZHRoOnRbMl0tdFswXXx8MCxoZWlnaHQ6dFszXS10WzFdfHwwfTp0JiYodD1uKHQse2xlZnQ6InggbCBsZWZ0IExlZnQiLHRvcDoieSB0IHRvcCBUb3AiLHdpZHRoOiJ3IHdpZHRoIFcgV2lkdGgiLGhlaWdodDoiaCBoZWlnaHQgVyBXaWR0aCIsYm90dG9tOiJiIGJvdHRvbSBCb3R0b20iLHJpZ2h0OiJyIHJpZ2h0IFJpZ2h0In0pLGU9e3g6dC5sZWZ0fHwwLHk6dC50b3B8fDB9LG51bGw9PXQud2lkdGg/dC5yaWdodD9lLndpZHRoPXQucmlnaHQtZS54OmUud2lkdGg9MDplLndpZHRoPXQud2lkdGgsbnVsbD09dC5oZWlnaHQ/dC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PTA6ZS5oZWlnaHQ9dC5oZWlnaHQpO3JldHVybiBlfX0seyJwaWNrLWJ5LWFsaWFzIjo0NzV9XSw0NzI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9W107cmV0dXJuIHQucmVwbGFjZShpLChmdW5jdGlvbih0LHIsaSl7dmFyIG89ci50b0xvd2VyQ2FzZSgpO2ZvcihpPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goYSk7cmV0dXJuIGU/ZS5tYXAoTnVtYmVyKTpbXX0oaSksIm0iPT1vJiZpLmxlbmd0aD4yJiYoZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCwyKSkpLG89ImwiLHI9Im0iPT1yPyJsIjoiTCIpOzspe2lmKGkubGVuZ3RoPT1uW29dKXJldHVybiBpLnVuc2hpZnQociksZS5wdXNoKGkpO2lmKGkubGVuZ3RoPG5bb10pdGhyb3cgbmV3IEVycm9yKCJtYWxmb3JtZWQgcGF0aCBkYXRhIik7ZS5wdXNoKFtyXS5jb25jYXQoaS5zcGxpY2UoMCxuW29dKSkpfX0pKSxlfTt2YXIgbj17YTo3LGM6NixoOjEsbDoyLG06MixxOjQsczo0LHQ6Mix2OjEsejowfSxpPS8oW2FzdHZ6cW1obGNdKShbXmFzdHZ6cW1obGNdKikvZ2k7dmFyIGE9Ly0/WzAtOV0qXC4/WzAtOV0rKD86ZVstK10/XGQrKT8vZ2l9LHt9XSw0NzM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT1bMCwiIl0pLHQ9U3RyaW5nKHQpO3ZhciByPXBhcnNlRmxvYXQodCwxMCk7cmV0dXJuIGVbMF09cixlWzFdPXQubWF0Y2goL1tcZC5cLVwrXSpccyooLiopLylbMV18fCIiLGV9fSx7fV0sNDc0OltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpeyhmdW5jdGlvbigpe3ZhciByLG4saSxhLG8sczsidW5kZWZpbmVkIiE9dHlwZW9mIHBlcmZvcm1hbmNlJiZudWxsIT09cGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9lLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCl9Om51bGwhPXQmJnQuaHJ0aW1lPyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4ocigpLW8pLzFlNn0sbj10LmhydGltZSxhPShyPWZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIDFlOSoodD1uKCkpWzBdK3RbMV19KSgpLHM9MWU5KnQudXB0aW1lKCksbz1hLXMpOkRhdGUubm93PyhlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS1pfSxpPURhdGUubm93KCkpOihlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKS1pfSxpPShuZXcgRGF0ZSkuZ2V0VGltZSgpKX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7X3Byb2Nlc3M6NTA0fV0sNDc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG4sYSxvPXt9O2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGU9aShlKSksQXJyYXkuaXNBcnJheShlKSl7dmFyIHM9e307Zm9yKGE9MDthPGUubGVuZ3RoO2ErKylzW2VbYV1dPSEwO2U9c31mb3IobiBpbiBlKWVbbl09aShlW25dKTt2YXIgbD17fTtmb3IobiBpbiBlKXt2YXIgYz1lW25dO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGE9MDthPGMubGVuZ3RoO2ErKyl7dmFyIHU9Y1thXTtpZihyJiYobFt1XT0hMCksdSBpbiB0KXtpZihvW25dPXRbdV0scilmb3IodmFyIGY9YTtmPGMubGVuZ3RoO2YrKylsW2NbZl1dPSEwO2JyZWFrfX1lbHNlIG4gaW4gdCYmKGVbbl0mJihvW25dPXRbbl0pLHImJihsW25dPSEwKSl9aWYocilmb3IobiBpbiB0KWxbbl18fChvW25dPXRbbl0pO3JldHVybiBvfTt2YXIgbj17fTtmdW5jdGlvbiBpKHQpe3JldHVybiBuW3RdP25bdF06KCJzdHJpbmciPT10eXBlb2YgdCYmKHQ9blt0XT10LnNwbGl0KC9ccyosXHMqfFxzKy8pKSx0KX19LHt9XSw0NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTB8ZS5sZW5ndGgsaT10Lmxlbmd0aCxhPVtuZXcgQXJyYXkociksbmV3IEFycmF5KHIpXSxvPTA7bzxyOysrbylhWzBdW29dPVtdLGFbMV1bb109W107Zm9yKG89MDtvPGk7KytvKXt2YXIgcz10W29dO2FbMF1bc1swXV0ucHVzaChzKSxhWzFdW3NbMV1dLnB1c2gocyl9dmFyIGw9W107Zm9yKG89MDtvPHI7KytvKWFbMF1bb10ubGVuZ3RoK2FbMV1bb10ubGVuZ3RoPT09MCYmbC5wdXNoKFtvXSk7ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWFbZV1bdFtlXV07ci5zcGxpY2Uoci5pbmRleE9mKHQpLDEpfWZ1bmN0aW9uIHUodCxyLGkpe2Zvcih2YXIgbyxzLGwsdT0wO3U8MjsrK3UpaWYoYVt1XVtyXS5sZW5ndGg+MCl7bz1hW3VdW3JdWzBdLGw9dTticmVha31zPW9bMV5sXTtmb3IodmFyIGY9MDtmPDI7KytmKWZvcih2YXIgaD1hW2ZdW3JdLHA9MDtwPGgubGVuZ3RoOysrcCl7dmFyIGQ9aFtwXSxtPWRbMV5mXTtuKGVbdF0sZVtyXSxlW3NdLGVbbV0pPjAmJihvPWQscz1tLGw9Zil9cmV0dXJuIGl8fG8mJmMobyxsKSxzfWZ1bmN0aW9uIGYodCxyKXt2YXIgaT1hW3JdW3RdWzBdLG89W3RdO2MoaSxyKTtmb3IodmFyIHM9aVsxXnJdOzspe2Zvcig7cyE9PXQ7KW8ucHVzaChzKSxzPXUob1tvLmxlbmd0aC0yXSxzLCExKTtpZihhWzBdW3RdLmxlbmd0aCthWzFdW3RdLmxlbmd0aD09PTApYnJlYWs7dmFyIGw9b1tvLmxlbmd0aC0xXSxmPXQsaD1vWzFdLHA9dShsLGYsITApO2lmKG4oZVtsXSxlW2ZdLGVbaF0sZVtwXSk8MClicmVhaztvLnB1c2godCkscz11KGwsZil9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe3JldHVybiBlWzFdPT09ZVtlLmxlbmd0aC0xXX1mb3Iobz0wO288cjsrK28pZm9yKHZhciBwPTA7cDwyOysrcCl7Zm9yKHZhciBkPVtdO2FbcF1bb10ubGVuZ3RoPjA7KXthWzBdW29dLmxlbmd0aDt2YXIgbT1mKG8scCk7aCgwLG0pP2QucHVzaC5hcHBseShkLG0pOihkLmxlbmd0aD4wJiZsLnB1c2goZCksZD1tKX1kLmxlbmd0aD4wJiZsLnB1c2goZCl9cmV0dXJuIGx9O3ZhciBuPXQoImNvbXBhcmUtYW5nbGUiKX0seyJjb21wYXJlLWFuZ2xlIjoxMzN9XSw0Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odCxlLmxlbmd0aCksaT1uZXcgQXJyYXkoZS5sZW5ndGgpLGE9bmV3IEFycmF5KGUubGVuZ3RoKSxvPVtdLHM9MDtzPGUubGVuZ3RoOysrcyl7dmFyIGw9cltzXS5sZW5ndGg7YVtzXT1sLGlbc109ITAsbDw9MSYmby5wdXNoKHMpfWZvcig7by5sZW5ndGg+MDspe3ZhciBjPW8ucG9wKCk7aVtjXT0hMTt2YXIgdT1yW2NdO2ZvcihzPTA7czx1Lmxlbmd0aDsrK3Mpe3ZhciBmPXVbc107MD09LS1hW2ZdJiZvLnB1c2goZil9fXZhciBoPW5ldyBBcnJheShlLmxlbmd0aCkscD1bXTtmb3Iocz0wO3M8ZS5sZW5ndGg7KytzKWlmKGlbc10pe2M9cC5sZW5ndGg7aFtzXT1jLHAucHVzaChlW3NdKX1lbHNlIGhbc109LTE7dmFyIGQ9W107Zm9yKHM9MDtzPHQubGVuZ3RoOysrcyl7dmFyIG09dFtzXTtpW21bMF1dJiZpW21bMV1dJiZkLnB1c2goW2hbbVswXV0saFttWzFdXV0pfXJldHVybltkLHBdfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpfSx7ImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzl9XSw0Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Yyh0LGUpO3Q9clswXTtmb3IodmFyIGY9KGU9clsxXSkubGVuZ3RoLGg9KHQubGVuZ3RoLG4odCxlLmxlbmd0aCkpLHA9MDtwPGY7KytwKWlmKGhbcF0ubGVuZ3RoJTI9PTEpdGhyb3cgbmV3IEVycm9yKCJwbGFuYXItZ3JhcGgtdG8tcG9seWxpbmU6IGdyYXBoIG11c3QgYmUgbWFuaWZvbGQiKTt2YXIgZD1pKHQsZSk7dmFyIG09KGQ9ZC5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPVswXSxpPTA7aTxyOysraSl7dmFyIGE9ZVt0W2ldXSxsPWVbdFsoaSsxKSVyXV0sYz1vKC1hWzBdLGFbMV0pLHU9bygtYVswXSxsWzFdKSxmPW8obFswXSxhWzFdKSxoPW8obFswXSxsWzFdKTtuPXMobixzKHMoYyx1KSxzKGYsaCkpKX1yZXR1cm4gbltuLmxlbmd0aC0xXT4wfSkpKS5sZW5ndGgsZz1uZXcgQXJyYXkobSksdj1uZXcgQXJyYXkobSk7Zm9yKHA9MDtwPG07KytwKXtnW3BdPXA7dmFyIHk9bmV3IEFycmF5KG0pLHg9ZFtwXS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSkpLGI9YShbeF0pLF89MDt0OmZvcih2YXIgdz0wO3c8bTsrK3cpaWYoeVt3XT0wLHAhPT13KXtmb3IodmFyIFQ9KEg9ZFt3XSkubGVuZ3RoLGs9MDtrPFQ7KytrKXt2YXIgQT1iKGVbSFtrXV0pO2lmKDAhPT1BKXtBPDAmJih5W3ddPTEsXys9MSk7Y29udGludWUgdH19eVt3XT0xLF8rPTF9dltwXT1bXyxwLHldfXYuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZVswXS10WzBdfSkpO2ZvcihwPTA7cDxtOysrcCl7dmFyIE09KHk9dltwXSlbMV0sUz15WzJdO2Zvcih3PTA7dzxtOysrdylTW3ddJiYoZ1t3XT1NKX12YXIgRT1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7KytyKWVbcl09W107cmV0dXJuIGV9KG0pO2ZvcihwPTA7cDxtOysrcClFW3BdLnB1c2goZ1twXSksRVtnW3BdXS5wdXNoKHApO3ZhciBMPXt9LEM9dShmLCExKTtmb3IocD0wO3A8bTsrK3ApZm9yKFQ9KEg9ZFtwXSkubGVuZ3RoLHc9MDt3PFQ7Kyt3KXt2YXIgUD1IW3ddLEk9SFsodysxKSVUXSxPPU1hdGgubWluKFAsSSkrIjoiK01hdGgubWF4KFAsSSk7aWYoTyBpbiBMKXt2YXIgej1MW09dO0Vbel0ucHVzaChwKSxFW3BdLnB1c2goeiksQ1tQXT1DW0ldPSEwfWVsc2UgTFtPXT1wfWZ1bmN0aW9uIEQodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9MDtyPGU7KytyKWlmKCFDW3Rbcl1dKXJldHVybiExO3JldHVybiEwfXZhciBSPVtdLEY9dShtLC0xKTtmb3IocD0wO3A8bTsrK3ApZ1twXSE9PXB8fEQoZFtwXSk/RltwXT0tMTooUi5wdXNoKHApLEZbcF09MCk7cj1bXTtmb3IoO1IubGVuZ3RoPjA7KXt2YXIgQj1SLnBvcCgpLE49RVtCXTtsKE4sKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKTt2YXIgaixVPU4ubGVuZ3RoLFY9RltCXTtpZigwPT09Vil7dmFyIEg9ZFtCXTtqPVtIXX1mb3IocD0wO3A8VTsrK3Ape3ZhciBxPU5bcF07aWYoIShGW3FdPj0wKSlpZihGW3FdPTFeVixSLnB1c2gocSksMD09PVYpRChIPWRbcV0pfHwoSC5yZXZlcnNlKCksai5wdXNoKEgpKX0wPT09ViYmci5wdXNoKGopfXJldHVybiByfTt2YXIgbj10KCJlZGdlcy10by1hZGphY2VuY3ktbGlzdCIpLGk9dCgicGxhbmFyLWR1YWwiKSxhPXQoInBvaW50LWluLWJpZy1wb2x5Z29uIiksbz10KCJ0d28tcHJvZHVjdCIpLHM9dCgicm9idXN0LXN1bSIpLGw9dCgidW5pcSIpLGM9dCgiLi9saWIvdHJpbS1sZWF2ZXMiKTtmdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPWU7cmV0dXJuIHJ9fSx7Ii4vbGliL3RyaW0tbGVhdmVzIjo0NzcsImVkZ2VzLXRvLWFkamFjZW5jeS1saXN0IjoxNzksInBsYW5hci1kdWFsIjo0NzYsInBvaW50LWluLWJpZy1wb2x5Z29uIjo0NzksInJvYnVzdC1zdW0iOjUyOSwidHdvLXByb2R1Y3QiOjU3Nyx1bmlxOjU5Mn1dLDQ3OTpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj1bXSxhPVtdLHM9MDtzPGU7KytzKWZvcih2YXIgdT10W3NdLGY9dS5sZW5ndGgsaD1mLTEscD0wO3A8ZjtoPXArKyl7dmFyIGQ9dVtoXSxtPXVbcF07ZFswXT09PW1bMF0/YS5wdXNoKFtkLG1dKTpyLnB1c2goW2QsbV0pfWlmKDA9PT1yLmxlbmd0aClyZXR1cm4gMD09PWEubGVuZ3RoP2M6KGc9bChhKSxmdW5jdGlvbih0KXtyZXR1cm4gZyh0WzBdLHRbMV0pPzA6MX0pO3ZhciBnO3ZhciB2PWkocikseT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vLmxlKGUsclswXSk7aWYoaTwwKXJldHVybiAxO3ZhciBhPXRbaV07aWYoIWEpe2lmKCEoaT4wJiZlW2ldPT09clswXSkpcmV0dXJuIDE7YT10W2ktMV19Zm9yKHZhciBzPTE7YTspe3ZhciBsPWEua2V5LGM9bihyLGxbMF0sbFsxXSk7aWYobFswXVswXTxsWzFdWzBdKWlmKGM8MClhPWEubGVmdDtlbHNle2lmKCEoYz4wKSlyZXR1cm4gMDtzPS0xLGE9YS5yaWdodH1lbHNlIGlmKGM+MClhPWEubGVmdDtlbHNle2lmKCEoYzwwKSlyZXR1cm4gMDtzPTEsYT1hLnJpZ2h0fX1yZXR1cm4gc319KHYuc2xhYnMsdi5jb29yZGluYXRlcyk7cmV0dXJuIDA9PT1hLmxlbmd0aD95OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHJbMF0sclsxXSk/MDplKHIpfX0obChhKSx5KX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIilbM10saT10KCJzbGFiLWRlY29tcG9zaXRpb24iKSxhPXQoImludGVydmFsLXRyZWUtMWQiKSxvPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIik7ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGwodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXSxpPW5bMF1bMF0sbz1uWzBdWzFdLGw9blsxXVsxXSxjPVtNYXRoLm1pbihvLGwpLE1hdGgubWF4KG8sbCldO2kgaW4gZT9lW2ldLnB1c2goYyk6ZVtpXT1bY119dmFyIHU9e30sZj1PYmplY3Qua2V5cyhlKTtmb3Iocj0wO3I8Zi5sZW5ndGg7KytyKXt2YXIgaD1lW2Zbcl1dO3VbZltyXV09YShoKX1yZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49dFtlXTtyZXR1cm4hIW4mJiEhbi5xdWVyeVBvaW50KHIscyl9fSh1KX1mdW5jdGlvbiBjKHQpe3JldHVybiAxfX0seyJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJpbnRlcnZhbC10cmVlLTFkIjo0MzAsInJvYnVzdC1vcmllbnRhdGlvbiI6NTI0LCJzbGFiLWRlY29tcG9zaXRpb24iOjU0MH1dLDQ4MDpbZnVuY3Rpb24odCxlLHIpewovKgogKiBAY29weXJpZ2h0IDIwMTYgU2VhbiBDb25uZWxseSAoQHZvaWRxayksIGh0dHA6Ly9zeW50aGV0aS5jYwogKiBAbGljZW5zZSBNSVQKICogQHByZXNlcnZlIFByb2plY3QgSG9tZTogaHR0cHM6Ly9naXRodWIuY29tL3ZvaWRxay9wb2x5Ym9vbGpzCiAqLwp2YXIgbixpPXQoIi4vbGliL2J1aWxkLWxvZyIpLGE9dCgiLi9saWIvZXBzaWxvbiIpLG89dCgiLi9saWIvaW50ZXJzZWN0ZXIiKSxzPXQoIi4vbGliL3NlZ21lbnQtY2hhaW5lciIpLGw9dCgiLi9saWIvc2VnbWVudC1zZWxlY3RvciIpLGM9dCgiLi9saWIvZ2VvanNvbiIpLHU9ITEsZj1hKCk7ZnVuY3Rpb24gaCh0LGUscil7dmFyIGk9bi5zZWdtZW50cyh0KSxhPW4uc2VnbWVudHMoZSksbz1yKG4uY29tYmluZShpLGEpKTtyZXR1cm4gbi5wb2x5Z29uKG8pfW49e2J1aWxkTG9nOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09dD91PWkoKTohMT09PXQmJih1PSExKSwhMSE9PXUmJnUubGlzdH0sZXBzaWxvbjpmdW5jdGlvbih0KXtyZXR1cm4gZi5lcHNpbG9uKHQpfSxzZWdtZW50czpmdW5jdGlvbih0KXt2YXIgZT1vKCEwLGYsdSk7cmV0dXJuIHQucmVnaW9ucy5mb3JFYWNoKGUuYWRkUmVnaW9uKSx7c2VnbWVudHM6ZS5jYWxjdWxhdGUodC5pbnZlcnRlZCksaW52ZXJ0ZWQ6dC5pbnZlcnRlZH19LGNvbWJpbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm57Y29tYmluZWQ6byghMSxmLHUpLmNhbGN1bGF0ZSh0LnNlZ21lbnRzLHQuaW52ZXJ0ZWQsZS5zZWdtZW50cyxlLmludmVydGVkKSxpbnZlcnRlZDE6dC5pbnZlcnRlZCxpbnZlcnRlZDI6ZS5pbnZlcnRlZH19LHNlbGVjdFVuaW9uOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnVuaW9uKHQuY29tYmluZWQsdSksaW52ZXJ0ZWQ6dC5pbnZlcnRlZDF8fHQuaW52ZXJ0ZWQyfX0sc2VsZWN0SW50ZXJzZWN0OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmludGVyc2VjdCh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiZ0LmludmVydGVkMn19LHNlbGVjdERpZmZlcmVuY2U6ZnVuY3Rpb24odCl7cmV0dXJue3NlZ21lbnRzOmwuZGlmZmVyZW5jZSh0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxJiYhdC5pbnZlcnRlZDJ9fSxzZWxlY3REaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLmRpZmZlcmVuY2VSZXYodC5jb21iaW5lZCx1KSxpbnZlcnRlZDohdC5pbnZlcnRlZDEmJnQuaW52ZXJ0ZWQyfX0sc2VsZWN0WG9yOmZ1bmN0aW9uKHQpe3JldHVybntzZWdtZW50czpsLnhvcih0LmNvbWJpbmVkLHUpLGludmVydGVkOnQuaW52ZXJ0ZWQxIT09dC5pbnZlcnRlZDJ9fSxwb2x5Z29uOmZ1bmN0aW9uKHQpe3JldHVybntyZWdpb25zOnModC5zZWdtZW50cyxmLHUpLGludmVydGVkOnQuaW52ZXJ0ZWR9fSxwb2x5Z29uRnJvbUdlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMudG9Qb2x5Z29uKG4sdCl9LHBvbHlnb25Ub0dlb0pTT046ZnVuY3Rpb24odCl7cmV0dXJuIGMuZnJvbVBvbHlnb24obixmLHQpfSx1bmlvbjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFVuaW9uKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0SW50ZXJzZWN0KX0sZGlmZmVyZW5jZTpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdERpZmZlcmVuY2UpfSxkaWZmZXJlbmNlUmV2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgodCxlLG4uc2VsZWN0RGlmZmVyZW5jZVJldil9LHhvcjpmdW5jdGlvbih0LGUpe3JldHVybiBoKHQsZSxuLnNlbGVjdFhvcil9fSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5Qb2x5Qm9vbD1uKSxlLmV4cG9ydHM9bn0seyIuL2xpYi9idWlsZC1sb2ciOjQ4MSwiLi9saWIvZXBzaWxvbiI6NDgyLCIuL2xpYi9nZW9qc29uIjo0ODMsIi4vbGliL2ludGVyc2VjdGVyIjo0ODQsIi4vbGliL3NlZ21lbnQtY2hhaW5lciI6NDg2LCIuL2xpYi9zZWdtZW50LXNlbGVjdG9yIjo0ODd9XSw0ODE6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlPTAscj0hMTtmdW5jdGlvbiBuKGUscil7cmV0dXJuIHQubGlzdC5wdXNoKHt0eXBlOmUsZGF0YTpyP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocikpOnZvaWQgMH0pLHR9cmV0dXJuIHQ9e2xpc3Q6W10sc2VnbWVudElkOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK30sY2hlY2tJbnRlcnNlY3Rpb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hlY2siLHtzZWcxOnQsc2VnMjplfSl9LHNlZ21lbnRDaG9wOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImRpdl9zZWciLHtzZWc6dCxwdDplfSksbigiY2hvcCIse3NlZzp0LHB0OmV9KX0sc3RhdHVzUmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJwb3Bfc2VnIix7c2VnOnR9KX0sc2VnbWVudFVwZGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VnX3VwZGF0ZSIse3NlZzp0fSl9LHNlZ21lbnROZXc6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigibmV3X3NlZyIse3NlZzp0LHByaW1hcnk6ZX0pfSxzZWdtZW50UmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJyZW1fc2VnIix7c2VnOnR9KX0sdGVtcFN0YXR1czpmdW5jdGlvbih0LGUscil7cmV0dXJuIG4oInRlbXBfc3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHJld2luZDpmdW5jdGlvbih0KXtyZXR1cm4gbigicmV3aW5kIix7c2VnOnR9KX0sc3RhdHVzOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigic3RhdHVzIix7c2VnOnQsYWJvdmU6ZSxiZWxvdzpyfSl9LHZlcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1yP3Q6KHI9ZSxuKCJ2ZXJ0Iix7eDplfSkpfSxsb2c6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0JiYodD1KU09OLnN0cmluZ2lmeSh0LCExLCIgICIpKSxuKCJsb2ciLHt0eHQ6dH0pfSxyZXNldDpmdW5jdGlvbigpe3JldHVybiBuKCJyZXNldCIpfSxzZWxlY3RlZDpmdW5jdGlvbih0KXtyZXR1cm4gbigic2VsZWN0ZWQiLHtzZWdzOnR9KX0sY2hhaW5TdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gbigiY2hhaW5fc3RhcnQiLHtzZWc6dH0pfSxjaGFpblJlbW92ZUhlYWQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fcmVtX2hlYWQiLHtpbmRleDp0LHB0OmV9KX0sY2hhaW5SZW1vdmVUYWlsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX3JlbV90YWlsIix7aW5kZXg6dCxwdDplfSl9LGNoYWluTmV3OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX25ldyIse3B0MTp0LHB0MjplfSl9LGNoYWluTWF0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIG4oImNoYWluX21hdGNoIix7aW5kZXg6dH0pfSxjaGFpbkNsb3NlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9jbG9zZSIse2luZGV4OnR9KX0sY2hhaW5BZGRIZWFkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oImNoYWluX2FkZF9oZWFkIix7aW5kZXg6dCxwdDplfSl9LGNoYWluQWRkVGFpbDpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9hZGRfdGFpbCIse2luZGV4OnQscHQ6ZX0pfSxjaGFpbkNvbm5lY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbigiY2hhaW5fY29uIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sY2hhaW5SZXZlcnNlOmZ1bmN0aW9uKHQpe3JldHVybiBuKCJjaGFpbl9yZXYiLHtpbmRleDp0fSl9LGNoYWluSm9pbjpmdW5jdGlvbih0LGUpe3JldHVybiBuKCJjaGFpbl9qb2luIix7aW5kZXgxOnQsaW5kZXgyOmV9KX0sZG9uZTpmdW5jdGlvbigpe3JldHVybiBuKCJkb25lIil9fX19LHt9XSw0ODI6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Im51bWJlciIhPXR5cGVvZiB0JiYodD0xZS0xMCk7dmFyIGU9e2Vwc2lsb246ZnVuY3Rpb24oZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBlJiYodD1lKSx0fSxwb2ludEFib3ZlT3JPbkxpbmU6ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXJbMF0sYT1yWzFdLG89blswXSxzPW5bMV0sbD1lWzBdO3JldHVybihvLWkpKihlWzFdLWEpLShzLWEpKihsLWkpPj0tdH0scG9pbnRCZXR3ZWVuOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzFdLXJbMV0sYT1uWzBdLXJbMF0sbz1lWzBdLXJbMF0scz1uWzFdLXJbMV0sbD1vKmEraSpzO3JldHVybiEobDx0KSYmIShsLShhKmErcypzKT4tdCl9LHBvaW50c1NhbWVYOmZ1bmN0aW9uKGUscil7cmV0dXJuIE1hdGguYWJzKGVbMF0tclswXSk8dH0scG9pbnRzU2FtZVk6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gTWF0aC5hYnMoZVsxXS1yWzFdKTx0fSxwb2ludHNTYW1lOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKSYmZS5wb2ludHNTYW1lWSh0LHIpfSxwb2ludHNDb21wYXJlOmZ1bmN0aW9uKHQscil7cmV0dXJuIGUucG9pbnRzU2FtZVgodCxyKT9lLnBvaW50c1NhbWVZKHQscik/MDp0WzFdPHJbMV0/LTE6MTp0WzBdPHJbMF0/LTE6MX0scG9pbnRzQ29sbGluZWFyOmZ1bmN0aW9uKGUscixuKXt2YXIgaT1lWzBdLXJbMF0sYT1lWzFdLXJbMV0sbz1yWzBdLW5bMF0scz1yWzFdLW5bMV07cmV0dXJuIE1hdGguYWJzKGkqcy1vKmEpPHR9LGxpbmVzSW50ZXJzZWN0OmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXJbMF0tZVswXSxvPXJbMV0tZVsxXSxzPWlbMF0tblswXSxsPWlbMV0tblsxXSxjPWEqbC1vKnM7aWYoTWF0aC5hYnMoYyk8dClyZXR1cm4hMTt2YXIgdT1lWzBdLW5bMF0sZj1lWzFdLW5bMV0saD0ocypmLWwqdSkvYyxwPShhKmYtbyp1KS9jLGQ9e2Fsb25nQTowLGFsb25nQjowLHB0OltlWzBdK2gqYSxlWzFdK2gqb119O3JldHVybiBkLmFsb25nQT1oPD0tdD8tMjpoPHQ/LTE6aC0xPD0tdD8wOmgtMTx0PzE6MixkLmFsb25nQj1wPD0tdD8tMjpwPHQ/LTE6cC0xPD0tdD8wOnAtMTx0PzE6MixkfSxwb2ludEluc2lkZVJlZ2lvbjpmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1lWzBdLGk9ZVsxXSxhPXJbci5sZW5ndGgtMV1bMF0sbz1yW3IubGVuZ3RoLTFdWzFdLHM9ITEsbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1yW2xdWzBdLHU9cltsXVsxXTt1LWk+dCE9by1pPnQmJihhLWMpKihpLXUpLyhvLXUpK2Mtbj50JiYocz0hcyksYT1jLG89dX1yZXR1cm4gc319O3JldHVybiBlfX0se31dLDQ4MzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt0b1BvbHlnb246ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe2lmKGUubGVuZ3RoPD0wKXJldHVybiB0LnNlZ21lbnRzKHtpbnZlcnRlZDohMSxyZWdpb25zOltdfSk7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIHQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W3JdfSl9Zm9yKHZhciBuPXIoZVswXSksaT0xO2k8ZS5sZW5ndGg7aSsrKW49dC5zZWxlY3REaWZmZXJlbmNlKHQuY29tYmluZShuLHIoZVtpXSkpKTtyZXR1cm4gbn1pZigiUG9seWdvbiI9PT1lLnR5cGUpcmV0dXJuIHQucG9seWdvbihyKGUuY29vcmRpbmF0ZXMpKTtpZigiTXVsdGlQb2x5Z29uIj09PWUudHlwZSl7Zm9yKHZhciBuPXQuc2VnbWVudHMoe2ludmVydGVkOiExLHJlZ2lvbnM6W119KSxpPTA7aTxlLmNvb3JkaW5hdGVzLmxlbmd0aDtpKyspbj10LnNlbGVjdFVuaW9uKHQuY29tYmluZShuLHIoZS5jb29yZGluYXRlc1tpXSkpKTtyZXR1cm4gdC5wb2x5Z29uKG4pfXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IENhbm5vdCBjb252ZXJ0IEdlb0pTT04gb2JqZWN0IHRvIFBvbHlCb29sIHBvbHlnb24iKX0sZnJvbVBvbHlnb246ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gZS5wb2ludEluc2lkZVJlZ2lvbihbLjUqKHRbMF1bMF0rdFsxXVswXSksLjUqKHRbMF1bMV0rdFsxXVsxXSldLHIpfWZ1bmN0aW9uIGkodCl7cmV0dXJue3JlZ2lvbjp0LGNoaWxkcmVuOltdfX1yPXQucG9seWdvbih0LnNlZ21lbnRzKHIpKTt2YXIgYT1pKG51bGwpO2Z1bmN0aW9uIG8odCxlKXtmb3IodmFyIHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7aWYobihlLChzPXQuY2hpbGRyZW5bcl0pLnJlZ2lvbikpcmV0dXJuIHZvaWQgbyhzLGUpfXZhciBhPWkoZSk7Zm9yKHI9MDtyPHQuY2hpbGRyZW4ubGVuZ3RoO3IrKyl7dmFyIHM7bigocz10LmNoaWxkcmVuW3JdKS5yZWdpb24sZSkmJihhLmNoaWxkcmVuLnB1c2gocyksdC5jaGlsZHJlbi5zcGxpY2UociwxKSxyLS0pfXQuY2hpbGRyZW4ucHVzaChhKX1mb3IodmFyIHM9MDtzPHIucmVnaW9ucy5sZW5ndGg7cysrKXt2YXIgbD1yLnJlZ2lvbnNbc107bC5sZW5ndGg8M3x8byhhLGwpfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9MCxuPXRbdC5sZW5ndGgtMV1bMF0saT10W3QubGVuZ3RoLTFdWzFdLGE9W10sbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dWzBdLGw9dFtvXVsxXTthLnB1c2goW3MsbF0pLHIrPWwqbi1zKmksbj1zLGk9bH1yZXR1cm4gcjwwIT09ZSYmYS5yZXZlcnNlKCksYS5wdXNoKFthWzBdWzBdLGFbMF1bMV1dKSxhfXZhciB1PVtdO2Z1bmN0aW9uIGYodCl7dmFyIGU9W2ModC5yZWdpb24sITEpXTt1LnB1c2goZSk7Zm9yKHZhciByPTA7cjx0LmNoaWxkcmVuLmxlbmd0aDtyKyspZS5wdXNoKGgodC5jaGlsZHJlbltyXSkpfWZ1bmN0aW9uIGgodCl7Zm9yKHZhciBlPTA7ZTx0LmNoaWxkcmVuLmxlbmd0aDtlKyspZih0LmNoaWxkcmVuW2VdKTtyZXR1cm4gYyh0LnJlZ2lvbiwhMCl9Zm9yKHM9MDtzPGEuY2hpbGRyZW4ubGVuZ3RoO3MrKylmKGEuY2hpbGRyZW5bc10pO3JldHVybiB1Lmxlbmd0aDw9MD97dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W119OjE9PXUubGVuZ3RoP3t0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp1WzBdfTp7dHlwZToiTXVsdGlQb2x5Z29uIixjb29yZGluYXRlczp1fX19O2UuZXhwb3J0cz1ufSx7fV0sNDg0OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9saW5rZWQtbGlzdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gaSh0LGUsbil7cmV0dXJue2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LGVuZDplLG15RmlsbDp7YWJvdmU6bi5teUZpbGwuYWJvdmUsYmVsb3c6bi5teUZpbGwuYmVsb3d9LG90aGVyRmlsbDpudWxsfX12YXIgYT1uLmNyZWF0ZSgpO2Z1bmN0aW9uIG8odCxyKXthLmluc2VydEJlZm9yZSh0LChmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4saSxhLG8pe3ZhciBzPWUucG9pbnRzQ29tcGFyZShyLGEpO3JldHVybiAwIT09cz9zOmUucG9pbnRzU2FtZShuLG8pPzA6dCE9PWk/dD8xOi0xOmUucG9pbnRBYm92ZU9yT25MaW5lKG4saT9hOm8saT9vOmEpPzE6LTF9KHQuaXNTdGFydCx0LnB0LHIsbi5pc1N0YXJ0LG4ucHQsbi5vdGhlci5wdCk8MH0pKX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLm5vZGUoe2lzU3RhcnQ6ITAscHQ6dC5zdGFydCxzZWc6dCxwcmltYXJ5OmUsb3RoZXI6bnVsbCxzdGF0dXM6bnVsbH0pO3JldHVybiBvKHIsdC5lbmQpLHJ9KHQsZSk7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uLm5vZGUoe2lzU3RhcnQ6ITEscHQ6ZS5lbmQsc2VnOmUscHJpbWFyeTpyLG90aGVyOnQsc3RhdHVzOm51bGx9KTt0Lm90aGVyPWksbyhpLHQucHQpfShyLHQsZSkscn1mdW5jdGlvbiBsKHQsZSl7dmFyIG49aShlLHQuc2VnLmVuZCx0LnNlZyk7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ciYmci5zZWdtZW50Q2hvcCh0LnNlZyxlKSx0Lm90aGVyLnJlbW92ZSgpLHQuc2VnLmVuZD1lLHQub3RoZXIucHQ9ZSxvKHQub3RoZXIsdC5wdCl9KHQsZSkscyhuLHQucHJpbWFyeSl9ZnVuY3Rpb24gYyhpLG8pe3ZhciBzPW4uY3JlYXRlKCk7ZnVuY3Rpb24gYyh0KXtyZXR1cm4gcy5maW5kVHJhbnNpdGlvbigoZnVuY3Rpb24ocil7dmFyIG4saSxhLG8scyxsO3JldHVybihuPXQsaT1yLmV2LGE9bi5zZWcuc3RhcnQsbz1uLnNlZy5lbmQscz1pLnNlZy5zdGFydCxsPWkuc2VnLmVuZCxlLnBvaW50c0NvbGxpbmVhcihhLHMsbCk/ZS5wb2ludHNDb2xsaW5lYXIobyxzLGwpfHxlLnBvaW50QWJvdmVPck9uTGluZShvLHMsbCk/MTotMTplLnBvaW50QWJvdmVPck9uTGluZShhLHMsbCk/MTotMSk+MH0pKX1mdW5jdGlvbiB1KHQsbil7dmFyIGk9dC5zZWcsYT1uLnNlZyxvPWkuc3RhcnQscz1pLmVuZCxjPWEuc3RhcnQsdT1hLmVuZDtyJiZyLmNoZWNrSW50ZXJzZWN0aW9uKGksYSk7dmFyIGY9ZS5saW5lc0ludGVyc2VjdChvLHMsYyx1KTtpZighMT09PWYpe2lmKCFlLnBvaW50c0NvbGxpbmVhcihvLHMsYykpcmV0dXJuITE7aWYoZS5wb2ludHNTYW1lKG8sdSl8fGUucG9pbnRzU2FtZShzLGMpKXJldHVybiExO3ZhciBoPWUucG9pbnRzU2FtZShvLGMpLHA9ZS5wb2ludHNTYW1lKHMsdSk7aWYoaCYmcClyZXR1cm4gbjt2YXIgZD0haCYmZS5wb2ludEJldHdlZW4obyxjLHUpLG09IXAmJmUucG9pbnRCZXR3ZWVuKHMsYyx1KTtpZihoKXJldHVybiBtP2wobixzKTpsKHQsdSksbjtkJiYocHx8KG0/bChuLHMpOmwodCx1KSksbChuLG8pKX1lbHNlIDA9PT1mLmFsb25nQSYmKC0xPT09Zi5hbG9uZ0I/bCh0LGMpOjA9PT1mLmFsb25nQj9sKHQsZi5wdCk6MT09PWYuYWxvbmdCJiZsKHQsdSkpLDA9PT1mLmFsb25nQiYmKC0xPT09Zi5hbG9uZ0E/bChuLG8pOjA9PT1mLmFsb25nQT9sKG4sZi5wdCk6MT09PWYuYWxvbmdBJiZsKG4scykpO3JldHVybiExfWZvcih2YXIgZj1bXTshYS5pc0VtcHR5KCk7KXt2YXIgaD1hLmdldEhlYWQoKTtpZihyJiZyLnZlcnQoaC5wdFswXSksaC5pc1N0YXJ0KXtyJiZyLnNlZ21lbnROZXcoaC5zZWcsaC5wcmltYXJ5KTt2YXIgcD1jKGgpLGQ9cC5iZWZvcmU/cC5iZWZvcmUuZXY6bnVsbCxtPXAuYWZ0ZXI/cC5hZnRlci5ldjpudWxsO2Z1bmN0aW9uIGcoKXtpZihkKXt2YXIgdD11KGgsZCk7aWYodClyZXR1cm4gdH1yZXR1cm4hIW0mJnUoaCxtKX1yJiZyLnRlbXBTdGF0dXMoaC5zZWcsISFkJiZkLnNlZywhIW0mJm0uc2VnKTt2YXIgdix5PWcoKTtpZih5KXt2YXIgeDtpZih0KSh4PW51bGw9PT1oLnNlZy5teUZpbGwuYmVsb3d8fGguc2VnLm15RmlsbC5hYm92ZSE9PWguc2VnLm15RmlsbC5iZWxvdykmJih5LnNlZy5teUZpbGwuYWJvdmU9IXkuc2VnLm15RmlsbC5hYm92ZSk7ZWxzZSB5LnNlZy5vdGhlckZpbGw9aC5zZWcubXlGaWxsO3ImJnIuc2VnbWVudFVwZGF0ZSh5LnNlZyksaC5vdGhlci5yZW1vdmUoKSxoLnJlbW92ZSgpfWlmKGEuZ2V0SGVhZCgpIT09aCl7ciYmci5yZXdpbmQoaC5zZWcpO2NvbnRpbnVlfWlmKHQpeD1udWxsPT09aC5zZWcubXlGaWxsLmJlbG93fHxoLnNlZy5teUZpbGwuYWJvdmUhPT1oLnNlZy5teUZpbGwuYmVsb3csaC5zZWcubXlGaWxsLmJlbG93PW0/bS5zZWcubXlGaWxsLmFib3ZlOmksaC5zZWcubXlGaWxsLmFib3ZlPXg/IWguc2VnLm15RmlsbC5iZWxvdzpoLnNlZy5teUZpbGwuYmVsb3c7ZWxzZSBpZihudWxsPT09aC5zZWcub3RoZXJGaWxsKXY9bT9oLnByaW1hcnk9PT1tLnByaW1hcnk/bS5zZWcub3RoZXJGaWxsLmFib3ZlOm0uc2VnLm15RmlsbC5hYm92ZTpoLnByaW1hcnk/bzppLGguc2VnLm90aGVyRmlsbD17YWJvdmU6dixiZWxvdzp2fTtyJiZyLnN0YXR1cyhoLnNlZywhIWQmJmQuc2VnLCEhbSYmbS5zZWcpLGgub3RoZXIuc3RhdHVzPXAuaW5zZXJ0KG4ubm9kZSh7ZXY6aH0pKX1lbHNle3ZhciBiPWguc3RhdHVzO2lmKG51bGw9PT1iKXRocm93IG5ldyBFcnJvcigiUG9seUJvb2w6IFplcm8tbGVuZ3RoIHNlZ21lbnQgZGV0ZWN0ZWQ7IHlvdXIgZXBzaWxvbiBpcyBwcm9iYWJseSB0b28gc21hbGwgb3IgdG9vIGxhcmdlIik7aWYocy5leGlzdHMoYi5wcmV2KSYmcy5leGlzdHMoYi5uZXh0KSYmdShiLnByZXYuZXYsYi5uZXh0LmV2KSxyJiZyLnN0YXR1c1JlbW92ZShiLmV2LnNlZyksYi5yZW1vdmUoKSwhaC5wcmltYXJ5KXt2YXIgXz1oLnNlZy5teUZpbGw7aC5zZWcubXlGaWxsPWguc2VnLm90aGVyRmlsbCxoLnNlZy5vdGhlckZpbGw9X31mLnB1c2goaC5zZWcpfWEuZ2V0SGVhZCgpLnJlbW92ZSgpfXJldHVybiByJiZyLmRvbmUoKSxmfXJldHVybiB0P3thZGRSZWdpb246ZnVuY3Rpb24odCl7Zm9yKHZhciBuLGksYSxvPXRbdC5sZW5ndGgtMV0sbD0wO2w8dC5sZW5ndGg7bCsrKXtuPW8sbz10W2xdO3ZhciBjPWUucG9pbnRzQ29tcGFyZShuLG8pOzAhPT1jJiZzKChpPWM8MD9uOm8sYT1jPDA/bzpuLHtpZDpyP3Iuc2VnbWVudElkKCk6LTEsc3RhcnQ6aSxlbmQ6YSxteUZpbGw6e2Fib3ZlOm51bGwsYmVsb3c6bnVsbH0sb3RoZXJGaWxsOm51bGx9KSwhMCl9fSxjYWxjdWxhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwhMSl9fTp7Y2FsY3VsYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCEwKX0pKSxyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3MoaSh0LnN0YXJ0LHQuZW5kLHQpLCExKX0pKSxjKGUsbil9fX19LHsiLi9saW5rZWQtbGlzdCI6NDg1fV0sNDg1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXtjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD17cm9vdDp7cm9vdDohMCxuZXh0Om51bGx9LGV4aXN0czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9PWUmJmUhPT10LnJvb3R9LGlzRW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXQucm9vdC5uZXh0fSxnZXRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHQucm9vdC5uZXh0fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5yb290LGk9dC5yb290Lm5leHQ7bnVsbCE9PWk7KXtpZihyKGkpKXJldHVybiBlLnByZXY9aS5wcmV2LGUubmV4dD1pLGkucHJldi5uZXh0PWUsdm9pZChpLnByZXY9ZSk7bj1pLGk9aS5uZXh0fW4ubmV4dD1lLGUucHJldj1uLGUubmV4dD1udWxsfSxmaW5kVHJhbnNpdGlvbjpmdW5jdGlvbihlKXtmb3IodmFyIHI9dC5yb290LG49dC5yb290Lm5leHQ7bnVsbCE9PW4mJiFlKG4pOylyPW4sbj1uLm5leHQ7cmV0dXJue2JlZm9yZTpyPT09dC5yb290P251bGw6cixhZnRlcjpuLGluc2VydDpmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2PXIsdC5uZXh0PW4sci5uZXh0PXQsbnVsbCE9PW4mJihuLnByZXY9dCksdH19fX07cmV0dXJuIHR9LG5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuIHQucHJldj1udWxsLHQubmV4dD1udWxsLHQucmVtb3ZlPWZ1bmN0aW9uKCl7dC5wcmV2Lm5leHQ9dC5uZXh0LHQubmV4dCYmKHQubmV4dC5wcmV2PXQucHJldiksdC5wcmV2PW51bGwsdC5uZXh0PW51bGx9LHR9fX0se31dLDQ4NjpbZnVuY3Rpb24odCxlLHIpe2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49W10saT1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgYT10LnN0YXJ0LG89dC5lbmQ7aWYoZS5wb2ludHNTYW1lKGEsbykpY29uc29sZS53YXJuKCJQb2x5Qm9vbDogV2FybmluZzogWmVyby1sZW5ndGggc2VnbWVudCBkZXRlY3RlZDsgeW91ciBlcHNpbG9uIGlzIHByb2JhYmx5IHRvbyBzbWFsbCBvciB0b28gbGFyZ2UiKTtlbHNle3ImJnIuY2hhaW5TdGFydCh0KTtmb3IodmFyIHM9e2luZGV4OjAsbWF0Y2hlc19oZWFkOiExLG1hdGNoZXNfcHQxOiExfSxsPXtpbmRleDowLG1hdGNoZXNfaGVhZDohMSxtYXRjaGVzX3B0MTohMX0sYz1zLHU9MDt1PG4ubGVuZ3RoO3UrKyl7dmFyIGY9KGc9blt1XSlbMF0saD0oZ1sxXSxnW2cubGVuZ3RoLTFdKTtnW2cubGVuZ3RoLTJdO2lmKGUucG9pbnRzU2FtZShmLGEpKXtpZihrKHUsITAsITApKWJyZWFrfWVsc2UgaWYoZS5wb2ludHNTYW1lKGYsbykpe2lmKGsodSwhMCwhMSkpYnJlYWt9ZWxzZSBpZihlLnBvaW50c1NhbWUoaCxhKSl7aWYoayh1LCExLCEwKSlicmVha31lbHNlIGlmKGUucG9pbnRzU2FtZShoLG8pJiZrKHUsITEsITEpKWJyZWFrfWlmKGM9PT1zKXJldHVybiBuLnB1c2goW2Esb10pLHZvaWQociYmci5jaGFpbk5ldyhhLG8pKTtpZihjPT09bCl7ciYmci5jaGFpbk1hdGNoKHMuaW5kZXgpO3ZhciBwPXMuaW5kZXgsZD1zLm1hdGNoZXNfcHQxP286YSxtPXMubWF0Y2hlc19oZWFkLGc9bltwXSx2PW0/Z1swXTpnW2cubGVuZ3RoLTFdLHk9bT9nWzFdOmdbZy5sZW5ndGgtMl0seD1tP2dbZy5sZW5ndGgtMV06Z1swXSxiPW0/Z1tnLmxlbmd0aC0yXTpnWzFdO3JldHVybiBlLnBvaW50c0NvbGxpbmVhcih5LHYsZCkmJihtPyhyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LGQpLGcuc2hpZnQoKSk6KHImJnIuY2hhaW5SZW1vdmVUYWlsKHMuaW5kZXgsZCksZy5wb3AoKSksdj15KSxlLnBvaW50c1NhbWUoeCxkKT8obi5zcGxpY2UocCwxKSxlLnBvaW50c0NvbGxpbmVhcihiLHgsdikmJihtPyhyJiZyLmNoYWluUmVtb3ZlVGFpbChzLmluZGV4LHYpLGcucG9wKCkpOihyJiZyLmNoYWluUmVtb3ZlSGVhZChzLmluZGV4LHYpLGcuc2hpZnQoKSkpLHImJnIuY2hhaW5DbG9zZShzLmluZGV4KSx2b2lkIGkucHVzaChnKSk6dm9pZChtPyhyJiZyLmNoYWluQWRkSGVhZChzLmluZGV4LGQpLGcudW5zaGlmdChkKSk6KHImJnIuY2hhaW5BZGRUYWlsKHMuaW5kZXgsZCksZy5wdXNoKGQpKSl9dmFyIF89cy5pbmRleCx3PWwuaW5kZXg7ciYmci5jaGFpbkNvbm5lY3QoXyx3KTt2YXIgVD1uW19dLmxlbmd0aDxuW3ddLmxlbmd0aDtzLm1hdGNoZXNfaGVhZD9sLm1hdGNoZXNfaGVhZD9UPyhBKF8pLE0oXyx3KSk6KEEodyksTSh3LF8pKTpNKHcsXyk6bC5tYXRjaGVzX2hlYWQ/TShfLHcpOlQ/KEEoXyksTSh3LF8pKTooQSh3KSxNKF8sdykpfWZ1bmN0aW9uIGsodCxlLHIpe3JldHVybiBjLmluZGV4PXQsYy5tYXRjaGVzX2hlYWQ9ZSxjLm1hdGNoZXNfcHQxPXIsYz09PXM/KGM9bCwhMSk6KGM9bnVsbCwhMCl9ZnVuY3Rpb24gQSh0KXtyJiZyLmNoYWluUmV2ZXJzZSh0KSxuW3RdLnJldmVyc2UoKX1mdW5jdGlvbiBNKHQsaSl7dmFyIGE9blt0XSxvPW5baV0scz1hW2EubGVuZ3RoLTFdLGw9YVthLmxlbmd0aC0yXSxjPW9bMF0sdT1vWzFdO2UucG9pbnRzQ29sbGluZWFyKGwscyxjKSYmKHImJnIuY2hhaW5SZW1vdmVUYWlsKHQscyksYS5wb3AoKSxzPWwpLGUucG9pbnRzQ29sbGluZWFyKHMsYyx1KSYmKHImJnIuY2hhaW5SZW1vdmVIZWFkKGksYyksby5zaGlmdCgpKSxyJiZyLmNoYWluSm9pbih0LGkpLG5bdF09YS5jb25jYXQobyksbi5zcGxpY2UoaSwxKX19KSksaX19LHt9XSw0ODc6W2Z1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgbj1bXTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgaT0odC5teUZpbGwuYWJvdmU/ODowKSsodC5teUZpbGwuYmVsb3c/NDowKSsodC5vdGhlckZpbGwmJnQub3RoZXJGaWxsLmFib3ZlPzI6MCkrKHQub3RoZXJGaWxsJiZ0Lm90aGVyRmlsbC5iZWxvdz8xOjApOzAhPT1lW2ldJiZuLnB1c2goe2lkOnI/ci5zZWdtZW50SWQoKTotMSxzdGFydDp0LnN0YXJ0LGVuZDp0LmVuZCxteUZpbGw6e2Fib3ZlOjE9PT1lW2ldLGJlbG93OjI9PT1lW2ldfSxvdGhlckZpbGw6bnVsbH0pfSkpLHImJnIuc2VsZWN0ZWQobiksbn12YXIgaT17dW5pb246ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMiwwLDAsMSwwLDEsMCwwLDAsMCwwXSxlKX0saW50ZXJzZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCxbMCwwLDAsMCwwLDIsMCwyLDAsMCwxLDEsMCwyLDEsMF0sZSl9LGRpZmZlcmVuY2U6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDAsMCwwLDIsMCwyLDAsMSwxLDAsMCwwLDEsMiwwXSxlKX0sZGlmZmVyZW5jZVJldjpmdW5jdGlvbih0LGUpe3JldHVybiBuKHQsWzAsMiwxLDAsMCwwLDEsMSwwLDIsMCwyLDAsMCwwLDBdLGUpfSx4b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbih0LFswLDIsMSwwLDIsMCwwLDEsMSwwLDAsMiwwLDEsMiwwXSxlKX19O2UuZXhwb3J0cz1pfSx7fV0sNDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPW5ldyBGbG9hdDY0QXJyYXkoNCksaT1uZXcgRmxvYXQ2NEFycmF5KDQpLGE9bmV3IEZsb2F0NjRBcnJheSg0KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzKXtuLmxlbmd0aDxvLmxlbmd0aCYmKG49bmV3IEZsb2F0NjRBcnJheShvLmxlbmd0aCksaT1uZXcgRmxvYXQ2NEFycmF5KG8ubGVuZ3RoKSxhPW5ldyBGbG9hdDY0QXJyYXkoby5sZW5ndGgpKTtmb3IodmFyIGw9MDtsPG8ubGVuZ3RoOysrbCluW2xdPXRbbF0tb1tsXSxpW2xdPWVbbF0tdFtsXSxhW2xdPXJbbF0tdFtsXTt2YXIgYz0wLHU9MCxmPTAsaD0wLHA9MCxkPTA7Zm9yKGw9MDtsPG8ubGVuZ3RoOysrbCl7dmFyIG09aVtsXSxnPWFbbF0sdj1uW2xdO2MrPW0qbSx1Kz1tKmcsZis9ZypnLGgrPXYqbSxwKz12KmcsZCs9dip2fXZhciB5LHgsYixfLHcsVD1NYXRoLmFicyhjKmYtdSp1KSxrPXUqcC1mKmgsQT11KmgtYypwO2lmKGsrQTw9VClpZihrPDApQTwwJiZoPDA/KEE9MCwtaD49Yz8oaz0xLHk9YysyKmgrZCk6eT1oKihrPS1oL2MpK2QpOihrPTAscD49MD8oQT0wLHk9ZCk6LXA+PWY/KEE9MSx5PWYrMipwK2QpOnk9cCooQT0tcC9mKStkKTtlbHNlIGlmKEE8MClBPTAsaD49MD8oaz0wLHk9ZCk6LWg+PWM/KGs9MSx5PWMrMipoK2QpOnk9aCooaz0taC9jKStkO2Vsc2V7dmFyIE09MS9UO3k9KGsqPU0pKihjKmsrdSooQSo9TSkrMipoKStBKih1KmsrZipBKzIqcCkrZH1lbHNlIGs8MD8oYj1mK3ApPih4PXUraCk/KF89Yi14KT49KHc9Yy0yKnUrZik/KGs9MSxBPTAseT1jKzIqaCtkKTp5PShrPV8vdykqKGMqayt1KihBPTEtaykrMipoKStBKih1KmsrZipBKzIqcCkrZDooaz0wLGI8PTA/KEE9MSx5PWYrMipwK2QpOnA+PTA/KEE9MCx5PWQpOnk9cCooQT0tcC9mKStkKTpBPDA/KGI9YytoKT4oeD11K3ApPyhfPWIteCk+PSh3PWMtMip1K2YpPyhBPTEsaz0wLHk9ZisyKnArZCk6eT0oaz0xLShBPV8vdykpKihjKmsrdSpBKzIqaCkrQSoodSprK2YqQSsyKnApK2Q6KEE9MCxiPD0wPyhrPTEseT1jKzIqaCtkKTpoPj0wPyhrPTAseT1kKTp5PWgqKGs9LWgvYykrZCk6KF89ZitwLXUtaCk8PTA/KGs9MCxBPTEseT1mKzIqcCtkKTpfPj0odz1jLTIqdStmKT8oaz0xLEE9MCx5PWMrMipoK2QpOnk9KGs9Xy93KSooYyprK3UqKEE9MS1rKSsyKmgpK0EqKHUqaytmKkErMipwKStkO3ZhciBTPTEtay1BO2ZvcihsPTA7bDxvLmxlbmd0aDsrK2wpc1tsXT1TKnRbbF0rayplW2xdK0EqcltsXTtyZXR1cm4geTwwPzA6eX19LHt9XSw0ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3RyZWFtIikuVHJhbnNmb3JtLGk9dCgic3RyZWFtLXBhcnNlciIpO2Z1bmN0aW9uIGEoKXtuLmNhbGwodGhpcyx7cmVhZGFibGVPYmplY3RNb2RlOiEwfSl9ZnVuY3Rpb24gbyh0LGUscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpLHRoaXMubmFtZT10aGlzLmNvbnN0cnVjdG9yLm5hbWUsdGhpcy5tZXNzYWdlPXQsZSYmKHRoaXMuY29kZT1lKSxyJiYodGhpcy5zdGF0dXNDb2RlPXIpfWEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGEucHJvdG90eXBlLmNvbnN0cnVjdG9yPWEsaShhLnByb3RvdHlwZSksci5QYXJzZXJTdHJlYW09YSxyLnNsaWNlRXE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1lLGk9MDtpPHIubGVuZ3RoOylpZih0W24rK10hPT1yW2krK10pcmV0dXJuITE7cmV0dXJuITB9LHIuc3RyMmFycj1mdW5jdGlvbih0LGUpe3ZhciByPVtdLG49MDtpZihlJiYiaGV4Ij09PWUpZm9yKDtuPHQubGVuZ3RoOylyLnB1c2gocGFyc2VJbnQodC5zbGljZShuLG4rMiksMTYpKSxuKz0yO2Vsc2UgZm9yKDtuPHQubGVuZ3RoO24rKylyLnB1c2goMjU1JnQuY2hhckNvZGVBdChuKSk7cmV0dXJuIHJ9LHIucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZV18dFtlKzFdPDw4fSxyLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiB0W2UrMV18dFtlXTw8OH0sci5yZWFkVUludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXXx0W2UrMV08PDh8dFtlKzJdPDwxNnwxNjc3NzIxNip0W2UrM119LHIucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbZSszXXx0W2UrMl08PDh8dFtlKzFdPDwxNnwxNjc3NzIxNip0W2VdfSxvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksby5wcm90b3R5cGUuY29uc3RydWN0b3I9byxyLlByb2JlRXJyb3I9b30se3N0cmVhbTo1NDMsInN0cmVhbS1wYXJzZXIiOjU1OH1dLDQ5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9bmV3IEVycm9yKHQpO3JldHVybiByLmNvZGU9ZSxyfWZ1bmN0aW9uIGkodCl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHQpKX1jYXRjaChlKXtyZXR1cm4gdH19ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5pbnB1dD10LnN1YmFycmF5KGUsciksdGhpcy5zdGFydD1lO3ZhciBpPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0aGlzLmlucHV0LnN1YmFycmF5KDAsNCkpO2lmKCJJSSpcMCIhPT1pJiYiTU1cMCoiIT09aSl0aHJvdyBuKCJpbnZhbGlkIFRJRkYgc2lnbmF0dXJlIiwiRUJBRERBVEEiKTt0aGlzLmJpZ19lbmRpYW49Ik0iPT09aVswXX1hLnByb3RvdHlwZS5lYWNoPWZ1bmN0aW9uKHQpe3RoaXMuYWJvcnRlZD0hMTt2YXIgZT10aGlzLnJlYWRfdWludDMyKDQpO2Zvcih0aGlzLmlmZHNfdG9fcmVhZD1be2lkOjAsb2Zmc2V0OmV9XTt0aGlzLmlmZHNfdG9fcmVhZC5sZW5ndGg+MCYmIXRoaXMuYWJvcnRlZDspe3ZhciByPXRoaXMuaWZkc190b19yZWFkLnNoaWZ0KCk7ci5vZmZzZXQmJnRoaXMuc2Nhbl9pZmQoci5pZCxyLm9mZnNldCx0KX19LGEucHJvdG90eXBlLnJlYWRfdWludDE2PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCsyPmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzI1NiplW3RdK2VbdCsxXTplW3RdKzI1NiplW3QrMV19LGEucHJvdG90eXBlLnJlYWRfdWludDMyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW5wdXQ7aWYodCs0PmUubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtyZXR1cm4gdGhpcy5iaWdfZW5kaWFuPzE2Nzc3MjE2KmVbdF0rNjU1MzYqZVt0KzFdKzI1NiplW3QrMl0rZVt0KzNdOmVbdF0rMjU2KmVbdCsxXSs2NTUzNiplW3QrMl0rMTY3NzcyMTYqZVt0KzNdfSxhLnByb3RvdHlwZS5pc19zdWJpZmRfbGluaz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dCYmMzQ2NjU9PT1lfHwwPT09dCYmMzQ4NTM9PT1lfHwzNDY2NT09PXQmJjQwOTY1PT09ZX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfbGVuZ3RoPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOmNhc2UgNjpjYXNlIDc6cmV0dXJuIDE7Y2FzZSAzOmNhc2UgODpyZXR1cm4gMjtjYXNlIDQ6Y2FzZSA5OmNhc2UgMTE6cmV0dXJuIDQ7Y2FzZSA1OmNhc2UgMTA6Y2FzZSAxMjpyZXR1cm4gODtkZWZhdWx0OnJldHVybiAwfX0sYS5wcm90b3R5cGUuZXhpZl9mb3JtYXRfcmVhZD1mdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlIDE6Y2FzZSAyOnJldHVybiByPXRoaXMuaW5wdXRbZV07Y2FzZSA2OnJldHVybihyPXRoaXMuaW5wdXRbZV0pfDMzNTU0NDMwKigxMjgmcik7Y2FzZSAzOnJldHVybiByPXRoaXMucmVhZF91aW50MTYoZSk7Y2FzZSA4OnJldHVybihyPXRoaXMucmVhZF91aW50MTYoZSkpfDEzMTA3MCooMzI3Njgmcik7Y2FzZSA0OnJldHVybiByPXRoaXMucmVhZF91aW50MzIoZSk7Y2FzZSA5OnJldHVybiAwfChyPXRoaXMucmVhZF91aW50MzIoZSkpO2Nhc2UgNTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDc6ZGVmYXVsdDpyZXR1cm4gbnVsbH19LGEucHJvdG90eXBlLnNjYW5faWZkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT10aGlzLnJlYWRfdWludDE2KGUpO2UrPTI7Zm9yKHZhciBvPTA7bzxhO28rKyl7dmFyIHM9dGhpcy5yZWFkX3VpbnQxNihlKSxsPXRoaXMucmVhZF91aW50MTYoZSsyKSxjPXRoaXMucmVhZF91aW50MzIoZSs0KSx1PXRoaXMuZXhpZl9mb3JtYXRfbGVuZ3RoKGwpLGY9Yyp1LGg9Zjw9ND9lKzg6dGhpcy5yZWFkX3VpbnQzMihlKzgpLHA9ITE7aWYoaCtmPnRoaXMuaW5wdXQubGVuZ3RoKXRocm93IG4oInVuZXhwZWN0ZWQgRU9GIiwiRUJBRERBVEEiKTtmb3IodmFyIGQ9W10sbT1oLGc9MDtnPGM7ZysrLG0rPXUpe3ZhciB2PXRoaXMuZXhpZl9mb3JtYXRfcmVhZChsLG0pO2lmKG51bGw9PT12KXtkPW51bGw7YnJlYWt9ZC5wdXNoKHYpfWlmKEFycmF5LmlzQXJyYXkoZCkmJjI9PT1sJiYoZD1pKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxkKSkpJiYiXDAiPT09ZFtkLmxlbmd0aC0xXSYmKGQ9ZC5zbGljZSgwLC0xKSksdGhpcy5pc19zdWJpZmRfbGluayh0LHMpJiZBcnJheS5pc0FycmF5KGQpJiZOdW1iZXIuaXNJbnRlZ2VyKGRbMF0pJiZkWzBdPjAmJih0aGlzLmlmZHNfdG9fcmVhZC5wdXNoKHtpZDpzLG9mZnNldDpkWzBdfSkscD0hMCksITE9PT1yKHtpc19iaWdfZW5kaWFuOnRoaXMuYmlnX2VuZGlhbixpZmQ6dCx0YWc6cyxmb3JtYXQ6bCxjb3VudDpjLGVudHJ5X29mZnNldDplK3RoaXMuc3RhcnQsZGF0YV9sZW5ndGg6ZixkYXRhX29mZnNldDpoK3RoaXMuc3RhcnQsdmFsdWU6ZCxpc19zdWJpZmRfbGluazpwfSkpcmV0dXJuIHZvaWQodGhpcy5hYm9ydGVkPSEwKTtlKz0xMn0wPT09dCYmdGhpcy5pZmRzX3RvX3JlYWQucHVzaCh7aWQ6MSxvZmZzZXQ6dGhpcy5yZWFkX3VpbnQzMihlKX0pfSxlLmV4cG9ydHMuRXhpZlBhcnNlcj1hLGUuZXhwb3J0cy5nZXRfb3JpZW50YXRpb249ZnVuY3Rpb24odCl7dmFyIGU9MDt0cnl7cmV0dXJuIG5ldyBhKHQsMCx0Lmxlbmd0aCkuZWFjaCgoZnVuY3Rpb24odCl7aWYoMD09PXQuaWZkJiYyNzQ9PT10LnRhZyYmQXJyYXkuaXNBcnJheSh0LnZhbHVlKSlyZXR1cm4gZT10LnZhbHVlWzBdLCExfSkpLGV9Y2F0Y2godCl7cmV0dXJuLTF9fX0se31dLDQ5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbW1vbiIpLnJlYWRVSW50MTZCRSxpPXQoIi4vY29tbW9uIikucmVhZFVJbnQzMkJFO2Z1bmN0aW9uIGEodCxlKXtpZih0Lmxlbmd0aDw0K2UpcmV0dXJuIG51bGw7dmFyIHI9aSh0LGUpO3JldHVybiB0Lmxlbmd0aDxyK2V8fHI8OD9udWxsOntib3h0eXBlOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKGUrNCxlKzgpKSxkYXRhOnQuc2xpY2UoZSs4LGUrciksZW5kOmUrcn19ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgcj0wOzspe3ZhciBuPWEodCxyKTtpZighbilicmVhaztzd2l0Y2gobi5ib3h0eXBlKXtjYXNlImlzcGUiOmUuc2l6ZXMucHVzaCh7d2lkdGg6aShuLmRhdGEsNCksaGVpZ2h0Omkobi5kYXRhLDgpfSk7YnJlYWs7Y2FzZSJpcm90IjplLnRyYW5zZm9ybXMucHVzaCh7dHlwZToiaXJvdCIsdmFsdWU6MyZuLmRhdGFbMF19KTticmVhaztjYXNlImltaXIiOmUudHJhbnNmb3Jtcy5wdXNoKHt0eXBlOiJpbWlyIix2YWx1ZToxJm4uZGF0YVswXX0pfXI9bi5lbmR9fWZ1bmN0aW9uIHModCxlLHIpe2Zvcih2YXIgbj0wLGk9MDtpPHI7aSsrKW49MjU2Km4rKHRbZStpXXx8MCk7cmV0dXJuIG59ZnVuY3Rpb24gbCh0LGUpe2Zvcih2YXIgcj10WzRdPj40JjE1LGk9MTUmdFs0XSxhPXRbNV0+PjQmMTUsbz1uKHQsNiksbD04LGM9MDtjPG87YysrKXt2YXIgdT1uKHQsbCksZj1uKHQsbCs9MiksaD1zKHQsbCs9MixhKSxwPW4odCxsKz1hKTtpZihsKz0yLDA9PT1mJiYxPT09cCl7dmFyIGQ9cyh0LGwsciksbT1zKHQsbCtyLGkpO2UuaXRlbV9sb2NbdV09e2xlbmd0aDptLG9mZnNldDpkK2h9fWwrPXAqKHIraSl9fWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bih0LDQpLGk9NixvPTA7bzxyO28rKyl7dmFyIHM9YSh0LGkpO2lmKCFzKWJyZWFrO2lmKCJpbmZlIj09PXMuYm94dHlwZSl7Zm9yKHZhciBsPW4ocy5kYXRhLDQpLGM9IiIsdT04O3U8cy5kYXRhLmxlbmd0aCYmcy5kYXRhW3VdO3UrKyljKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHMuZGF0YVt1XSk7ZS5pdGVtX2luZltjXT1sfWk9cy5lbmR9fWZ1bmN0aW9uIHUodCxlKXtmb3IodmFyIHI9MDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwY28iPT09bi5ib3h0eXBlJiZvKG4uZGF0YSxlKSxyPW4uZW5kfX1lLmV4cG9ydHMudW5ib3g9YSxlLmV4cG9ydHMucmVhZFNpemVGcm9tTWV0YT1mdW5jdGlvbih0KXt2YXIgZT17c2l6ZXM6W10sdHJhbnNmb3JtczpbXSxpdGVtX2luZjp7fSxpdGVtX2xvYzp7fX07aWYoZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDs7KXt2YXIgbj1hKHQscik7aWYoIW4pYnJlYWs7ImlwcnAiPT09bi5ib3h0eXBlJiZ1KG4uZGF0YSxlKSwiaWxvYyI9PT1uLmJveHR5cGUmJmwobi5kYXRhLGUpLCJpaW5mIj09PW4uYm94dHlwZSYmYyhuLmRhdGEsZSkscj1uLmVuZH19KHQsZSksZS5zaXplcy5sZW5ndGgpe3ZhciByLG4saSxvPShyPWUuc2l6ZXMsbj1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC53aWR0aD5lLndpZHRofHx0LndpZHRoPT09ZS53aWR0aCYmdC5oZWlnaHQ+ZS5oZWlnaHQ/dDplfSkpLGk9ci5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaGVpZ2h0PmUuaGVpZ2h0fHx0LmhlaWdodD09PWUuaGVpZ2h0JiZ0LndpZHRoPmUud2lkdGg/dDplfSkpLG4ud2lkdGg+aS5oZWlnaHR8fG4ud2lkdGg9PT1pLmhlaWdodCYmbi5oZWlnaHQ+aS53aWR0aD9uOmkpLHM9MTtlLnRyYW5zZm9ybXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ezE6NiwyOjUsMzo4LDQ6Nyw1OjQsNjozLDc6Miw4OjF9LHI9ezE6NCwyOjMsMzoyLDQ6MSw1OjYsNjo1LDc6OCw4Ojd9O2lmKCJpbWlyIj09PXQudHlwZSYmKHM9MD09PXQudmFsdWU/cltzXTplW3M9ZVtzPXJbc11dXSksImlyb3QiPT09dC50eXBlKWZvcih2YXIgbj0wO248dC52YWx1ZTtuKyspcz1lW3NdfSkpO3ZhciBmPW51bGw7cmV0dXJuIGUuaXRlbV9pbmYuRXhpZiYmKGY9ZS5pdGVtX2xvY1tlLml0ZW1faW5mLkV4aWZdKSx7d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsb3JpZW50YXRpb246ZS50cmFuc2Zvcm1zLmxlbmd0aD9zOm51bGwsdmFyaWFudHM6ZS5zaXplcyxleGlmX2xvY2F0aW9uOmZ9fX0sZS5leHBvcnRzLmdldE1pbWVUeXBlPWZ1bmN0aW9uKHQpe3ZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0LnNsaWNlKDAsNCkpLHI9e307cltlXT0hMDtmb3IodmFyIG49ODtuPHQubGVuZ3RoO24rPTQpcltTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShuLG4rNCkpXT0hMDtpZihyLm1pZjF8fHIubXNmMXx8ci5taWFmKXJldHVybiJhdmlmIj09PWV8fCJhdmlzIj09PWV8fCJhdmlvIj09PWU/e3R5cGU6ImF2aWYiLG1pbWU6ImltYWdlL2F2aWYifToiaGVpYyI9PT1lfHwiaGVpeCI9PT1lP3t0eXBlOiJoZWljIixtaW1lOiJpbWFnZS9oZWljIn06ImhldmMiPT09ZXx8ImhldngiPT09ZT97dHlwZToiaGVpYyIsbWltZToiaW1hZ2UvaGVpYy1zZXF1ZW5jZSJ9OnIuYXZpZnx8ci5hdmlzP3t0eXBlOiJhdmlmIixtaW1lOiJpbWFnZS9hdmlmIn06ci5oZWljfHxyLmhlaXh8fHIuaGV2Y3x8ci5oZXZ4fHxyLmhlaXM/ci5tc2YxP3t0eXBlOiJoZWlmIixtaW1lOiJpbWFnZS9oZWlmLXNlcXVlbmNlIn06e3R5cGU6ImhlaWYiLG1pbWU6ImltYWdlL2hlaWYifTp7dHlwZToiYXZpZiIsbWltZToiaW1hZ2UvYXZpZiJ9fX0seyIuL2NvbW1vbiI6NDg5fV0sNDkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89dCgiLi4vbWlhZl91dGlscyIpLHM9dCgiLi4vZXhpZl91dGlscyIpLGw9bigiZnR5cCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihpKHQsNCxsKSl7dmFyIGU9by51bmJveCh0LDApO2lmKGUpe3ZhciByPW8uZ2V0TWltZVR5cGUoZS5kYXRhKTtpZihyKXtmb3IodmFyIG4sYz1lLmVuZDs7KXt2YXIgdT1vLnVuYm94KHQsYyk7aWYoIXUpYnJlYWs7aWYoYz11LmVuZCwibWRhdCI9PT11LmJveHR5cGUpcmV0dXJuO2lmKCJtZXRhIj09PXUuYm94dHlwZSl7bj11LmRhdGE7YnJlYWt9fWlmKG4pe3ZhciBmPW8ucmVhZFNpemVGcm9tTWV0YShuKTtpZihmKXt2YXIgaD17d2lkdGg6Zi53aWR0aCxoZWlnaHQ6Zi5oZWlnaHQsdHlwZTpyLnR5cGUsbWltZTpyLm1pbWUsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9O2lmKGYudmFyaWFudHMubGVuZ3RoPjEmJihoLnZhcmlhbnRzPWYudmFyaWFudHMpLGYub3JpZW50YXRpb24mJihoLm9yaWVudGF0aW9uPWYub3JpZW50YXRpb24pLGYuZXhpZl9sb2NhdGlvbiYmZi5leGlmX2xvY2F0aW9uLm9mZnNldCtmLmV4aWZfbG9jYXRpb24ubGVuZ3RoPD10Lmxlbmd0aCl7dmFyIHA9YSh0LGYuZXhpZl9sb2NhdGlvbi5vZmZzZXQpLGQ9dC5zbGljZShmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K3ArNCxmLmV4aWZfbG9jYXRpb24ub2Zmc2V0K2YuZXhpZl9sb2NhdGlvbi5sZW5ndGgpLG09cy5nZXRfb3JpZW50YXRpb24oZCk7bT4wJiYoaC5vcmllbnRhdGlvbj1tKX1yZXR1cm4gaH19fX19fX0seyIuLi9jb21tb24iOjQ4OSwiLi4vZXhpZl91dGlscyI6NDkwLCIuLi9taWFmX3V0aWxzIjo0OTF9XSw0OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJCTSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDI2KSYmaSh0LDAsbykpcmV0dXJue3dpZHRoOmEodCwxOCksaGVpZ2h0OmEodCwyMiksdHlwZToiYm1wIixtaW1lOiJpbWFnZS9ibXAiLHdVbml0czoicHgiLGhVbml0czoicHgifX19LHsiLi4vY29tbW9uIjo0ODl9XSw0OTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz1uKCJHSUY4N2EiKSxzPW4oIkdJRjg5YSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDEwKSYmKGkodCwwLG8pfHxpKHQsMCxzKSkpcmV0dXJue3dpZHRoOmEodCw2KSxoZWlnaHQ6YSh0LDgpLHR5cGU6ImdpZiIsbWltZToiaW1hZ2UvZ2lmIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MTZMRTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0LDApLHI9bih0LDIpLGk9bih0LDQpO2lmKDA9PT1lJiYxPT09ciYmaSl7Zm9yKHZhciBhPVtdLG89e3dpZHRoOjAsaGVpZ2h0OjB9LHM9MDtzPGk7cysrKXt2YXIgbD10WzYrMTYqc118fDI1NixjPXRbNisxNipzKzFdfHwyNTYsdT17d2lkdGg6bCxoZWlnaHQ6Y307YS5wdXNoKHUpLChsPm8ud2lkdGh8fGM+by5oZWlnaHQpJiYobz11KX1yZXR1cm57d2lkdGg6by53aWR0aCxoZWlnaHQ6by5oZWlnaHQsdmFyaWFudHM6YSx0eXBlOiJpY28iLG1pbWU6ImltYWdlL3gtaWNvbiIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX19LHsiLi4vY29tbW9uIjo0ODl9XSw0OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikucmVhZFVJbnQxNkJFLGk9dCgiLi4vY29tbW9uIikuc3RyMmFycixhPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsbz10KCIuLi9leGlmX3V0aWxzIikscz1pKCJFeGlmXDBcMCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDIpJiYyNTU9PT10WzBdJiYyMTY9PT10WzFdKWZvcih2YXIgZT0yOzspe2lmKHQubGVuZ3RoLWU8MilyZXR1cm47aWYoMjU1IT09dFtlKytdKXJldHVybjtmb3IodmFyIHIsaSxsPXRbZSsrXTsyNTU9PT1sOylsPXRbZSsrXTtpZigyMDg8PWwmJmw8PTIxN3x8MT09PWwpcj0wO2Vsc2V7aWYoISgxOTI8PWwmJmw8PTI1NCkpcmV0dXJuO2lmKHQubGVuZ3RoLWU8MilyZXR1cm47cj1uKHQsZSktMixlKz0yfWlmKDIxNz09PWx8fDIxOD09PWwpcmV0dXJuO2lmKDIyNT09PWwmJnI+PTEwJiZhKHQsZSxzKSYmKGk9by5nZXRfb3JpZW50YXRpb24odC5zbGljZShlKzYsZStyKSkpLHI+PTUmJjE5Mjw9bCYmbDw9MjA3JiYxOTYhPT1sJiYyMDAhPT1sJiYyMDQhPT1sKXtpZih0Lmxlbmd0aC1lPHIpcmV0dXJuO3ZhciBjPXt3aWR0aDpuKHQsZSszKSxoZWlnaHQ6bih0LGUrMSksdHlwZToianBnIixtaW1lOiJpbWFnZS9qcGVnIix3VW5pdHM6InB4IixoVW5pdHM6InB4In07cmV0dXJuIGk+MCYmKGMub3JpZW50YXRpb249aSksY31lKz1yfX19LHsiLi4vY29tbW9uIjo0ODksIi4uL2V4aWZfdXRpbHMiOjQ5MH1dLDQ5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb21tb24iKS5zdHIyYXJyLGk9dCgiLi4vY29tbW9uIikuc2xpY2VFcSxhPXQoIi4uL2NvbW1vbiIpLnJlYWRVSW50MzJCRSxvPW4oIlx4ODlQTkdcclxuXHgxYVxuIikscz1uKCJJSERSIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MjQpJiZpKHQsMCxvKSYmaSh0LDEyLHMpKXJldHVybnt3aWR0aDphKHQsMTYpLGhlaWdodDphKHQsMjApLHR5cGU6InBuZyIsbWltZToiaW1hZ2UvcG5nIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbW1vbiIpLnN0cjJhcnIsaT10KCIuLi9jb21tb24iKS5zbGljZUVxLGE9dCgiLi4vY29tbW9uIikucmVhZFVJbnQzMkJFLG89bigiOEJQU1wwXHgwMSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighKHQubGVuZ3RoPDIyKSYmaSh0LDAsbykpcmV0dXJue3dpZHRoOmEodCwxOCksaGVpZ2h0OmEodCwxNCksdHlwZToicHNkIixtaW1lOiJpbWFnZS92bmQuYWRvYmUucGhvdG9zaG9wIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19fSx7Ii4uL2NvbW1vbiI6NDg5fV0sNDk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0JiZpc0Zpbml0ZSh0KSYmdD4wfXZhciBpPS88Wy1fLjphLXpBLVowLTldW14+XSo+LyxhPS9ePChbLV8uOmEtekEtWjAtOV0rOik/c3ZnXHMvLG89L1teLV1cYndpZHRoPSIoW14lXSs/KSJ8W14tXVxid2lkdGg9JyhbXiVdKz8pJy8scz0vXGJoZWlnaHQ9IihbXiVdKz8pInxcYmhlaWdodD0nKFteJV0rPyknLyxsPS9cYnZpZXdbYkJdb3g9IiguKz8pInxcYnZpZXdbYkJdb3g9JyguKz8pJy8sYz0vaW4kfG1tJHxjbSR8cHQkfHBjJHxweCR8ZW0kfGV4JC87ZnVuY3Rpb24gdSh0KXtyZXR1cm4gYy50ZXN0KHQpP3QubWF0Y2goYylbMF06InB4In1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoZnVuY3Rpb24odCl7dmFyIGUscj0wLG49dC5sZW5ndGg7Zm9yKDIzOT09PXRbMF0mJjE4Nz09PXRbMV0mJjE5MT09PXRbMl0mJihyPTMpO3I8biYmKDMyPT09KGU9dFtyXSl8fDk9PT1lfHwxMz09PWV8fDEwPT09ZSk7KXIrKztyZXR1cm4gciE9PW4mJjYwPT09dFtyXX0odCkpe2Zvcih2YXIgZT0iIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W3JdKTt2YXIgYz0oZS5tYXRjaChpKXx8WyIiXSlbMF07aWYoYS50ZXN0KGMpKXt2YXIgZj1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKG8pLHI9dC5tYXRjaChzKSxuPXQubWF0Y2gobCk7cmV0dXJue3dpZHRoOmUmJihlWzFdfHxlWzJdKSxoZWlnaHQ6ciYmKHJbMV18fHJbMl0pLHZpZXdib3g6biYmKG5bMV18fG5bMl0pfX0oYyksaD1wYXJzZUZsb2F0KGYud2lkdGgpLHA9cGFyc2VGbG9hdChmLmhlaWdodCk7aWYoZi53aWR0aCYmZi5oZWlnaHQpe2lmKCFuKGgpfHwhbihwKSlyZXR1cm47cmV0dXJue3dpZHRoOmgsaGVpZ2h0OnAsdHlwZToic3ZnIixtaW1lOiJpbWFnZS9zdmcreG1sIix3VW5pdHM6dShmLndpZHRoKSxoVW5pdHM6dShmLmhlaWdodCl9fXZhciBkPShmLnZpZXdib3h8fCIiKS5zcGxpdCgiICIpLG09e3dpZHRoOmRbMl0saGVpZ2h0OmRbM119LGc9cGFyc2VGbG9hdChtLndpZHRoKSx2PXBhcnNlRmxvYXQobS5oZWlnaHQpO2lmKG4oZykmJm4odikmJnUobS53aWR0aCk9PT11KG0uaGVpZ2h0KSl7dmFyIHk9Zy92O2lmKGYud2lkdGgpe2lmKCFuKGgpKXJldHVybjtyZXR1cm57d2lkdGg6aCxoZWlnaHQ6aC95LHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUoZi53aWR0aCksaFVuaXRzOnUoZi53aWR0aCl9fWlmKGYuaGVpZ2h0KXtpZighbihwKSlyZXR1cm47cmV0dXJue3dpZHRoOnAqeSxoZWlnaHQ6cCx0eXBlOiJzdmciLG1pbWU6ImltYWdlL3N2Zyt4bWwiLHdVbml0czp1KGYuaGVpZ2h0KSxoVW5pdHM6dShmLmhlaWdodCl9fXJldHVybnt3aWR0aDpnLGhlaWdodDp2LHR5cGU6InN2ZyIsbWltZToiaW1hZ2Uvc3ZnK3htbCIsd1VuaXRzOnUobS53aWR0aCksaFVuaXRzOnUobS5oZWlnaHQpfX19fX19LHt9XSw1MDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz10KCIuLi9jb21tb24iKS5yZWFkVUludDE2QkUscz10KCIuLi9jb21tb24iKS5yZWFkVUludDMyTEUsbD10KCIuLi9jb21tb24iKS5yZWFkVUludDMyQkUsYz1uKCJJSSpcMCIpLHU9bigiTU1cMCoiKTtmdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4gcj9vKHQsZSk6YSh0LGUpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiByP2wodCxlKTpzKHQsZSl9ZnVuY3Rpb24gcCh0LGUscil7dmFyIG49Zih0LGUrMixyKTtyZXR1cm4gMSE9PWgodCxlKzQscil8fDMhPT1uJiY0IT09bj9udWxsOjM9PT1uP2YodCxlKzgscik6aCh0LGUrOCxyKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoISh0Lmxlbmd0aDw4KSYmKGkodCwwLGMpfHxpKHQsMCx1KSkpe3ZhciBlPTc3PT09dFswXSxyPWgodCw0LGUpLTg7aWYoIShyPDApKXt2YXIgbj1yKzg7aWYoISh0Lmxlbmd0aC1uPDIpKXt2YXIgYT0xMipmKHQsbiswLGUpO2lmKCEoYTw9MHx8KG4rPTIsdC5sZW5ndGgtbjxhKSkpe3ZhciBvLHMsbCxkO2ZvcihvPTA7bzxhO28rPTEyKTI1Nj09PShkPWYodCxuK28sZSkpP3M9cCh0LG4rbyxlKToyNTc9PT1kJiYobD1wKHQsbitvLGUpKTtyZXR1cm4gcyYmbD97d2lkdGg6cyxoZWlnaHQ6bCx0eXBlOiJ0aWZmIixtaW1lOiJpbWFnZS90aWZmIix3VW5pdHM6InB4IixoVW5pdHM6InB4In06dm9pZCAwfX19fX19LHsiLi4vY29tbW9uIjo0ODl9XSw1MDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vY29tbW9uIikuc3RyMmFycixpPXQoIi4uL2NvbW1vbiIpLnNsaWNlRXEsYT10KCIuLi9jb21tb24iKS5yZWFkVUludDE2TEUsbz10KCIuLi9jb21tb24iKS5yZWFkVUludDMyTEUscz10KCIuLi9leGlmX3V0aWxzIiksbD1uKCJSSUZGIiksYz1uKCJXRUJQIik7ZnVuY3Rpb24gdSh0LGUpe2lmKDE1Nz09PXRbZSszXSYmMT09PXRbZSs0XSYmNDI9PT10W2UrNV0pcmV0dXJue3dpZHRoOjE2MzgzJmEodCxlKzYpLGhlaWdodDoxNjM4MyZhKHQsZSs4KSx0eXBlOiJ3ZWJwIixtaW1lOiJpbWFnZS93ZWJwIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19ZnVuY3Rpb24gZih0LGUpe2lmKDQ3PT09dFtlXSl7dmFyIHI9byh0LGUrMSk7cmV0dXJue3dpZHRoOjErKDE2MzgzJnIpLGhlaWdodDoxKyhyPj4xNCYxNjM4MyksdHlwZToid2VicCIsbWltZToiaW1hZ2Uvd2VicCIsd1VuaXRzOiJweCIsaFVuaXRzOiJweCJ9fX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJue3dpZHRoOjErKHRbZSs2XTw8MTZ8dFtlKzVdPDw4fHRbZSs0XSksaGVpZ2h0OjErKHRbZSs5XTw8ZXx0W2UrOF08PDh8dFtlKzddKSx0eXBlOiJ3ZWJwIixtaW1lOiJpbWFnZS93ZWJwIix3VW5pdHM6InB4IixoVW5pdHM6InB4In19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCEodC5sZW5ndGg8MTYpJiYoaSh0LDAsbCl8fGkodCw4LGMpKSl7dmFyIGU9MTIscj1udWxsLG49MCxhPW8odCw0KSs4O2lmKCEoYT50Lmxlbmd0aCkpe2Zvcig7ZSs4PGE7KWlmKDAhPT10W2VdKXt2YXIgcD1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdC5zbGljZShlLGUrNCkpLGQ9byh0LGUrNCk7IlZQOCAiPT09cCYmZD49MTA/cj1yfHx1KHQsZSs4KToiVlA4TCI9PT1wJiZkPj05P3I9cnx8Zih0LGUrOCk6IlZQOFgiPT09cCYmZD49MTA/cj1yfHxoKHQsZSs4KToiRVhJRiI9PT1wJiYobj1zLmdldF9vcmllbnRhdGlvbih0LnNsaWNlKGUrOCxlKzgrZCkpLGU9MS8wKSxlKz04K2R9ZWxzZSBlKys7aWYocilyZXR1cm4gbj4wJiYoci5vcmllbnRhdGlvbj1uKSxyfX19fSx7Ii4uL2NvbW1vbiI6NDg5LCIuLi9leGlmX3V0aWxzIjo0OTB9XSw1MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdmlmOnQoIi4vcGFyc2Vfc3luYy9hdmlmIiksYm1wOnQoIi4vcGFyc2Vfc3luYy9ibXAiKSxnaWY6dCgiLi9wYXJzZV9zeW5jL2dpZiIpLGljbzp0KCIuL3BhcnNlX3N5bmMvaWNvIiksanBlZzp0KCIuL3BhcnNlX3N5bmMvanBlZyIpLHBuZzp0KCIuL3BhcnNlX3N5bmMvcG5nIikscHNkOnQoIi4vcGFyc2Vfc3luYy9wc2QiKSxzdmc6dCgiLi9wYXJzZV9zeW5jL3N2ZyIpLHRpZmY6dCgiLi9wYXJzZV9zeW5jL3RpZmYiKSx3ZWJwOnQoIi4vcGFyc2Vfc3luYy93ZWJwIil9fSx7Ii4vcGFyc2Vfc3luYy9hdmlmIjo0OTIsIi4vcGFyc2Vfc3luYy9ibXAiOjQ5MywiLi9wYXJzZV9zeW5jL2dpZiI6NDk0LCIuL3BhcnNlX3N5bmMvaWNvIjo0OTUsIi4vcGFyc2Vfc3luYy9qcGVnIjo0OTYsIi4vcGFyc2Vfc3luYy9wbmciOjQ5NywiLi9wYXJzZV9zeW5jL3BzZCI6NDk4LCIuL3BhcnNlX3N5bmMvc3ZnIjo0OTksIi4vcGFyc2Vfc3luYy90aWZmIjo1MDAsIi4vcGFyc2Vfc3luYy93ZWJwIjo1MDF9XSw1MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9saWIvcGFyc2Vyc19zeW5jIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9T2JqZWN0LmtleXMobikscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1uW2Vbcl1dKHQpO2lmKGkpcmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfSxlLmV4cG9ydHMucGFyc2Vycz1ufSx7Ii4vbGliL3BhcnNlcnNfc3luYyI6NTAyfV0sNTA0OltmdW5jdGlvbih0LGUscil7dmFyIG4saSxhPWUuZXhwb3J0cz17fTtmdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gbCh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09b3x8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6b31jYXRjaCh0KXtuPW99dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6c31jYXRjaCh0KXtpPXN9fSgpO3ZhciBjLHU9W10sZj0hMSxoPS0xO2Z1bmN0aW9uIHAoKXtmJiZjJiYoZj0hMSxjLmxlbmd0aD91PWMuY29uY2F0KHUpOmg9LTEsdS5sZW5ndGgmJmQoKSl9ZnVuY3Rpb24gZCgpe2lmKCFmKXt2YXIgdD1sKHApO2Y9ITA7Zm9yKHZhciBlPXUubGVuZ3RoO2U7KXtmb3IoYz11LHU9W107KytoPGU7KWMmJmNbaF0ucnVuKCk7aD0tMSxlPXUubGVuZ3RofWM9bnVsbCxmPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PXN8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0odCl9fWZ1bmN0aW9uIG0odCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiBnKCl7fWEubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTt1LnB1c2gobmV3IG0odCxlKSksMSE9PXUubGVuZ3RofHxmfHxsKGQpfSxtLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxhLnRpdGxlPSJicm93c2VyIixhLmJyb3dzZXI9ITAsYS5lbnY9e30sYS5hcmd2PVtdLGEudmVyc2lvbj0iIixhLnZlcnNpb25zPXt9LGEub249ZyxhLmFkZExpc3RlbmVyPWcsYS5vbmNlPWcsYS5vZmY9ZyxhLnJlbW92ZUxpc3RlbmVyPWcsYS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZyxhLmVtaXQ9ZyxhLnByZXBlbmRMaXN0ZW5lcj1nLGEucHJlcGVuZE9uY2VMaXN0ZW5lcj1nLGEubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3JldHVybltdfSxhLmJpbmRpbmc9ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxhLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sYS5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxhLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7fV0sNTA1OltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPXQoImdsLXF1YXQvc2xlcnAiKX0seyJnbC1xdWF0L3NsZXJwIjozMTV9XSw1MDY6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQoInBlcmZvcm1hbmNlLW5vdyIpLGk9InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/cjp3aW5kb3csYT1bIm1veiIsIndlYmtpdCJdLG89IkFuaW1hdGlvbkZyYW1lIixzPWlbInJlcXVlc3QiK29dLGw9aVsiY2FuY2VsIitvXXx8aVsiY2FuY2VsUmVxdWVzdCIrb10sYz0wOyFzJiZjPGEubGVuZ3RoO2MrKylzPWlbYVtjXSsiUmVxdWVzdCIrb10sbD1pW2FbY10rIkNhbmNlbCIrb118fGlbYVtjXSsiQ2FuY2VsUmVxdWVzdCIrb107aWYoIXN8fCFsKXt2YXIgdT0wLGY9MCxoPVtdO3M9ZnVuY3Rpb24odCl7aWYoMD09PWgubGVuZ3RoKXt2YXIgZT1uKCkscj1NYXRoLm1heCgwLDFlMy82MC0oZS11KSk7dT1yK2Usc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgdD1oLnNsaWNlKDApO2gubGVuZ3RoPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIXRbZV0uY2FuY2VsbGVkKXRyeXt0W2VdLmNhbGxiYWNrKHUpfWNhdGNoKHQpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dGhyb3cgdH0pLDApfX0pLE1hdGgucm91bmQocikpfXJldHVybiBoLnB1c2goe2hhbmRsZTorK2YsY2FsbGJhY2s6dCxjYW5jZWxsZWQ6ITF9KSxmfSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aC5sZW5ndGg7ZSsrKWhbZV0uaGFuZGxlPT09dCYmKGhbZV0uY2FuY2VsbGVkPSEwKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwoaSx0KX0sZS5leHBvcnRzLmNhbmNlbD1mdW5jdGlvbigpe2wuYXBwbHkoaSxhcmd1bWVudHMpfSxlLmV4cG9ydHMucG9seWZpbGw9ZnVuY3Rpb24odCl7dHx8KHQ9aSksdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9cyx0LmNhbmNlbEFuaW1hdGlvbkZyYW1lPWx9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJwZXJmb3JtYW5jZS1ub3ciOjQ3NH1dLDUwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJiaWctcmF0L2FkZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxpPW5ldyBBcnJheShyKSxhPTA7YTxyOysrYSlpW2FdPW4odFthXSxlW2FdKTtyZXR1cm4gaX19LHsiYmlnLXJhdC9hZGQiOjgzfV0sNTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpZVtyXT1uKHRbcl0pO3JldHVybiBlfTt2YXIgbj10KCJiaWctcmF0Iil9LHsiYmlnLXJhdCI6ODZ9XSw1MDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYmlnLXJhdCIpLGk9dCgiYmlnLXJhdC9tdWwiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bihlKSxhPXQubGVuZ3RoLG89bmV3IEFycmF5KGEpLHM9MDtzPGE7KytzKW9bc109aSh0W3NdLHIpO3JldHVybiBvfX0seyJiaWctcmF0Ijo4NiwiYmlnLXJhdC9tdWwiOjk1fV0sNTEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpZy1yYXQvc3ViIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9bmV3IEFycmF5KHIpLGE9MDthPHI7KythKWlbYV09bih0W2FdLGVbYV0pO3JldHVybiBpfX0seyJiaWctcmF0L3N1YiI6OTh9XSw1MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29tcGFyZS1jZWxsIiksaT10KCJjb21wYXJlLW9yaWVudGVkLWNlbGwiKSxhPXQoImNlbGwtb3JpZW50YXRpb24iKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5zb3J0KGkpO2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbz0wO288ZTsrK28pe3ZhciBzPXRbb10sbD1hKHMpO2lmKDAhPT1sKXtpZihyPjApe3ZhciBjPXRbci0xXTtpZigwPT09bihzLGMpJiZhKGMpIT09bCl7ci09MTtjb250aW51ZX19dFtyKytdPXN9fXJldHVybiB0Lmxlbmd0aD1yLHR9fSx7ImNlbGwtb3JpZW50YXRpb24iOjExOCwiY29tcGFyZS1jZWxsIjoxMzUsImNvbXBhcmUtb3JpZW50ZWQtY2VsbCI6MTM2fV0sNTEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImFycmF5LWJvdW5kcyIpLGk9dCgiY29sb3Itbm9ybWFsaXplIiksYT10KCJ1cGRhdGUtZGlmZiIpLG89dCgicGljay1ieS1hbGlhcyIpLHM9dCgib2JqZWN0LWFzc2lnbiIpLGw9dCgiZmxhdHRlbi12ZXJ0ZXgtZGF0YSIpLGM9dCgidG8tZmxvYXQzMiIpLHU9Yy5mbG9hdDMyLGY9Yy5mcmFjdDMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlfHwoZT17fSksZS5yZWdsPXQpOmU9dDtlLmxlbmd0aCYmKGUucG9zaXRpb25zPWUpO2lmKCEodD1lLnJlZ2wpLmhhc0V4dGVuc2lvbigiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpKXRocm93IEVycm9yKCJyZWdsLWVycm9yMmQ6IGBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzYCBleHRlbnNpb24gc2hvdWxkIGJlIGVuYWJsZWQiKTt2YXIgcixjLHAsZCxtLGcsdj10Ll9nbCx5PXtjb2xvcjoiYmxhY2siLGNhcFNpemU6NSxsaW5lV2lkdGg6MSxvcGFjaXR5OjEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLG9mZnNldDowLGNvdW50OjAsYm91bmRzOm51bGwscG9zaXRpb25zOltdLGVycm9yczpbXX0seD1bXTtyZXR1cm4gZD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6InVpbnQ4IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksYz10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSkscD10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksbT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSksZz10LmJ1ZmZlcih7dXNhZ2U6InN0YXRpYyIsdHlwZToiZmxvYXQiLGRhdGE6aH0pLFQoZSkscj10KHt2ZXJ0OiJcblx0XHRwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG5cblx0XHRhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblx0XHRhdHRyaWJ1dGUgdmVjNCBlcnJvcjtcblx0XHRhdHRyaWJ1dGUgdmVjNCBjb2xvcjtcblxuXHRcdGF0dHJpYnV0ZSB2ZWMyIGRpcmVjdGlvbiwgbGluZU9mZnNldCwgY2FwT2Zmc2V0O1xuXG5cdFx0dW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xuXHRcdHVuaWZvcm0gZmxvYXQgbGluZVdpZHRoLCBjYXBTaXplO1xuXHRcdHVuaWZvcm0gdmVjMiBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cblx0XHRcdHZlYzIgcGl4ZWxPZmZzZXQgPSBsaW5lV2lkdGggKiBsaW5lT2Zmc2V0ICsgKGNhcFNpemUgKyBsaW5lV2lkdGgpICogY2FwT2Zmc2V0O1xuXG5cdFx0XHR2ZWMyIGR4eSA9IC1zdGVwKC41LCBkaXJlY3Rpb24ueHkpICogZXJyb3IueHogKyBzdGVwKGRpcmVjdGlvbi54eSwgdmVjMigtLjUpKSAqIGVycm9yLnl3O1xuXG5cdFx0XHR2ZWMyIHBvc2l0aW9uID0gcG9zaXRpb24gKyBkeHk7XG5cblx0XHRcdHZlYzIgcG9zID0gKHBvc2l0aW9uICsgdHJhbnNsYXRlKSAqIHNjYWxlXG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuXHRcdFx0XHQrIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG5cdFx0XHRcdCsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZUZyYWN0O1xuXG5cdFx0XHRwb3MgKz0gcGl4ZWxPZmZzZXQgLyB2aWV3cG9ydC56dztcblxuXHRcdFx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAsIDEpO1xuXHRcdH1cblx0XHQiLGZyYWc6IlxuXHRcdHByZWNpc2lvbiBoaWdocCBmbG9hdDtcblxuXHRcdHZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cblx0XHR1bmlmb3JtIGZsb2F0IG9wYWNpdHk7XG5cblx0XHR2b2lkIG1haW4oKSB7XG5cdFx0XHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdFx0XHRnbF9GcmFnQ29sb3IuYSAqPSBvcGFjaXR5O1xuXHRcdH1cblx0XHQiLHVuaWZvcm1zOntyYW5nZTp0LnByb3AoInJhbmdlIiksbGluZVdpZHRoOnQucHJvcCgibGluZVdpZHRoIiksY2FwU2l6ZTp0LnByb3AoImNhcFNpemUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHNjYWxlOnQucHJvcCgic2NhbGUiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx2aWV3cG9ydDpmdW5jdGlvbih0LGUpe3JldHVybltlLnZpZXdwb3J0LngsZS52aWV3cG9ydC55LHQudmlld3BvcnRXaWR0aCx0LnZpZXdwb3J0SGVpZ2h0XX19LGF0dHJpYnV0ZXM6e2NvbG9yOntidWZmZXI6ZCxvZmZzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gNCplLm9mZnNldH0sZGl2aXNvcjoxfSxwb3NpdGlvbjp7YnVmZmVyOmMsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0scG9zaXRpb25GcmFjdDp7YnVmZmVyOnAsb2Zmc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDgqZS5vZmZzZXR9LGRpdmlzb3I6MX0sZXJyb3I6e2J1ZmZlcjptLG9mZnNldDpmdW5jdGlvbih0LGUpe3JldHVybiAxNiplLm9mZnNldH0sZGl2aXNvcjoxfSxkaXJlY3Rpb246e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MH0sbGluZU9mZnNldDp7YnVmZmVyOmcsc3RyaWRlOjI0LG9mZnNldDo4fSxjYXBPZmZzZXQ6e2J1ZmZlcjpnLHN0cmlkZToyNCxvZmZzZXQ6MTZ9fSxwcmltaXRpdmU6InRyaWFuZ2xlcyIsYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTohMX0sc2Npc3Nvcjp7ZW5hYmxlOiEwLGJveDp0LnByb3AoInZpZXdwb3J0Iil9LHZpZXdwb3J0OnQucHJvcCgidmlld3BvcnQiKSxzdGVuY2lsOiExLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6aC5sZW5ndGh9KSxzKGIse3VwZGF0ZTpULGRyYXc6XyxkZXN0cm95OmsscmVnbDp0LGdsOnYsY2FudmFzOnYuY2FudmFzLGdyb3Vwczp4fSksYjtmdW5jdGlvbiBiKHQpe3Q/VCh0KTpudWxsPT09dCYmaygpLF8oKX1mdW5jdGlvbiBfKGUpe2lmKCJudW1iZXIiPT10eXBlb2YgZSlyZXR1cm4gdyhlKTtlJiYhQXJyYXkuaXNBcnJheShlKSYmKGU9W2VdKSx0Ll9yZWZyZXNoKCkseC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe3QmJihlJiYoZVtyXT90LmRyYXc9ITA6dC5kcmF3PSExKSx0LmRyYXc/dyhyKTp0LmRyYXc9ITApfSkpfWZ1bmN0aW9uIHcodCl7Im51bWJlciI9PXR5cGVvZiB0JiYodD14W3RdKSxudWxsIT10JiZ0JiZ0LmNvdW50JiZ0LmNvbG9yJiZ0Lm9wYWNpdHkmJnQucG9zaXRpb25zJiZ0LnBvc2l0aW9ucy5sZW5ndGg+MSYmKHQuc2NhbGVSYXRpbz1bdC5zY2FsZVswXSp0LnZpZXdwb3J0LndpZHRoLHQuc2NhbGVbMV0qdC52aWV3cG9ydC5oZWlnaHRdLHIodCksdC5hZnRlciYmdC5hZnRlcih0KSl9ZnVuY3Rpb24gVCh0KXtpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgZT0wLHI9MDtpZihiLmdyb3Vwcz14PXQubWFwKChmdW5jdGlvbih0LGMpe3ZhciB1PXhbY107cmV0dXJuIHQ/KCJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q9e2FmdGVyOnR9OiJudW1iZXIiPT10eXBlb2YgdFswXSYmKHQ9e3Bvc2l0aW9uczp0fSksdD1vKHQse2NvbG9yOiJjb2xvciBjb2xvcnMgZmlsbCIsY2FwU2l6ZToiY2FwU2l6ZSBjYXAgY2Fwc2l6ZSBjYXAtc2l6ZSIsbGluZVdpZHRoOiJsaW5lV2lkdGggbGluZS13aWR0aCB3aWR0aCBsaW5lIHRoaWNrbmVzcyIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSIscmFuZ2U6InJhbmdlIGRhdGFCb3giLHZpZXdwb3J0OiJ2aWV3cG9ydCB2aWV3Qm94IixlcnJvcnM6ImVycm9ycyBlcnJvciIscG9zaXRpb25zOiJwb3NpdGlvbnMgcG9zaXRpb24gZGF0YSBwb2ludHMifSksdXx8KHhbY109dT17aWQ6YyxzY2FsZTpudWxsLHRyYW5zbGF0ZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGRyYXc6ITB9LHQ9cyh7fSx5LHQpKSxhKHUsdCxbe2xpbmVXaWR0aDpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sY2FwU2l6ZTpmdW5jdGlvbih0KXtyZXR1cm4uNSordH0sb3BhY2l0eTpwYXJzZUZsb2F0LGVycm9yczpmdW5jdGlvbih0KXtyZXR1cm4gdD1sKHQpLHIrPXQubGVuZ3RoLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LHIpe3JldHVybiB0PWwodCwiZmxvYXQ2NCIpLHIuY291bnQ9TWF0aC5mbG9vcih0Lmxlbmd0aC8yKSxyLmJvdW5kcz1uKHQsMiksci5vZmZzZXQ9ZSxlKz1yLmNvdW50LHR9fSx7Y29sb3I6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmNvdW50O2lmKHR8fCh0PSJ0cmFuc3BhcmVudCIpLCFBcnJheS5pc0FycmF5KHQpfHwibnVtYmVyIj09dHlwZW9mIHRbMF0pe3ZhciBuPXQ7dD1BcnJheShyKTtmb3IodmFyIGE9MDthPHI7YSsrKXRbYV09bn1pZih0Lmxlbmd0aDxyKXRocm93IEVycm9yKCJOb3QgZW5vdWdoIGNvbG9ycyIpO2Zvcih2YXIgbz1uZXcgVWludDhBcnJheSg0KnIpLHM9MDtzPHI7cysrKXt2YXIgbD1pKHRbc10sInVpbnQ4Iik7by5zZXQobCw0KnMpfXJldHVybiBvfSxyYW5nZTpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5ib3VuZHM7cmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9ZihlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PWYoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBBcnJheS5pc0FycmF5KHQpP2U9e3g6dFswXSx5OnRbMV0sd2lkdGg6dFsyXS10WzBdLGhlaWdodDp0WzNdLXRbMV19OnQ/KGU9e3g6dC54fHx0LmxlZnR8fDAseTp0Lnl8fHQudG9wfHwwfSx0LnJpZ2h0P2Uud2lkdGg9dC5yaWdodC1lLng6ZS53aWR0aD10Lnd8fHQud2lkdGh8fDAsdC5ib3R0b20/ZS5oZWlnaHQ9dC5ib3R0b20tZS55OmUuaGVpZ2h0PXQuaHx8dC5oZWlnaHR8fDApOmU9e3g6MCx5OjAsd2lkdGg6di5kcmF3aW5nQnVmZmVyV2lkdGgsaGVpZ2h0OnYuZHJhd2luZ0J1ZmZlckhlaWdodH0sZX19XSksdSk6dX0pKSxlfHxyKXt2YXIgaD14LnJlZHVjZSgoZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KyhlP2UuY291bnQ6MCl9KSwwKSxnPW5ldyBGbG9hdDY0QXJyYXkoMipoKSxfPW5ldyBVaW50OEFycmF5KDQqaCksdz1uZXcgRmxvYXQzMkFycmF5KDQqaCk7eC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2lmKHQpe3ZhciByPXQucG9zaXRpb25zLG49dC5jb3VudCxpPXQub2Zmc2V0LGE9dC5jb2xvcixvPXQuZXJyb3JzO24mJihfLnNldChhLDQqaSksdy5zZXQobyw0KmkpLGcuc2V0KHIsMippKSl9fSkpO3ZhciBUPXUoZyk7YyhUKTt2YXIgaz1mKGcsVCk7cChrKSxkKF8pLG0odyl9fX1mdW5jdGlvbiBrKCl7Yy5kZXN0cm95KCkscC5kZXN0cm95KCksZC5kZXN0cm95KCksbS5kZXN0cm95KCksZy5kZXN0cm95KCl9fTt2YXIgaD1bWzEsMCwwLDEsMCwwXSxbMSwwLDAsLTEsMCwwXSxbLTEsMCwwLC0xLDAsMF0sWy0xLDAsMCwtMSwwLDBdLFstMSwwLDAsMSwwLDBdLFsxLDAsMCwxLDAsMF0sWzEsMCwtMSwwLDAsMV0sWzEsMCwtMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsLTFdLFsxLDAsMSwwLDAsMV0sWzEsMCwtMSwwLDAsMV0sWy0xLDAsLTEsMCwwLDFdLFstMSwwLC0xLDAsMCwtMV0sWy0xLDAsMSwwLDAsLTFdLFstMSwwLDEsMCwwLC0xXSxbLTEsMCwxLDAsMCwxXSxbLTEsMCwtMSwwLDAsMV0sWzAsMSwxLDAsMCwwXSxbMCwxLC0xLDAsMCwwXSxbMCwtMSwtMSwwLDAsMF0sWzAsLTEsLTEsMCwwLDBdLFswLDEsMSwwLDAsMF0sWzAsLTEsMSwwLDAsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLC0xLC0xLDBdLFswLDEsMCwxLC0xLDBdLFswLDEsMCwxLDEsMF0sWzAsMSwwLC0xLDEsMF0sWzAsMSwwLDEsLTEsMF0sWzAsLTEsMCwtMSwxLDBdLFswLC0xLDAsLTEsLTEsMF0sWzAsLTEsMCwxLC0xLDBdLFswLC0xLDAsMSwxLDBdLFswLC0xLDAsLTEsMSwwXSxbMCwtMSwwLDEsLTEsMF1dfSx7ImFycmF5LWJvdW5kcyI6NzIsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGljay1ieS1hbGlhcyI6NDc1LCJ0by1mbG9hdDMyIjo1NzMsInVwZGF0ZS1kaWZmIjo1OTR9XSw1MTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiY29sb3Itbm9ybWFsaXplIiksaT10KCJhcnJheS1ib3VuZHMiKSxhPXQoIm9iamVjdC1hc3NpZ24iKSxvPXQoImdsc2xpZnkiKSxzPXQoInBpY2stYnktYWxpYXMiKSxsPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxjPXQoImVhcmN1dCIpLHU9dCgiYXJyYXktbm9ybWFsaXplIiksZj10KCJ0by1mbG9hdDMyIiksaD1mLmZsb2F0MzIscD1mLmZyYWN0MzIsZD10KCJlczYtd2Vhay1tYXAiKSxtPXQoInBhcnNlLXJlY3QiKSxnPXQoImFycmF5LWZpbmQtaW5kZXgiKTtmdW5jdGlvbiB2KHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdikpcmV0dXJuIG5ldyB2KHQsZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQ/KGV8fChlPXt9KSxlLnJlZ2w9dCk6ZT10LGUubGVuZ3RoJiYoZS5wb3NpdGlvbnM9ZSksISh0PWUucmVnbCkuaGFzRXh0ZW5zaW9uKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikpdGhyb3cgRXJyb3IoInJlZ2wtZXJyb3IyZDogYEFOR0xFX2luc3RhbmNlZF9hcnJheXNgIGV4dGVuc2lvbiBzaG91bGQgYmUgZW5hYmxlZCIpO3RoaXMuZ2w9dC5fZ2wsdGhpcy5yZWdsPXQsdGhpcy5wYXNzZXM9W10sdGhpcy5zaGFkZXJzPXYuc2hhZGVycy5oYXModCk/di5zaGFkZXJzLmdldCh0KTp2LnNoYWRlcnMuc2V0KHQsdi5jcmVhdGVTaGFkZXJzKHQpKS5nZXQodCksdGhpcy51cGRhdGUoZSl9ZS5leHBvcnRzPXYsdi5kYXNoTXVsdD0yLHYubWF4UGF0dGVybkxlbmd0aD0yNTYsdi5wcmVjaXNpb25UaHJlc2hvbGQ9M2U2LHYubWF4UG9pbnRzPTFlNCx2Lm1heExpbmVzPTIwNDgsdi5zaGFkZXJzPW5ldyBkLHYuY3JlYXRlU2hhZGVycz1mdW5jdGlvbih0KXt2YXIgZSxyPXQuYnVmZmVyKHt1c2FnZToic3RhdGljIix0eXBlOiJmbG9hdCIsZGF0YTpbMCwxLDAsMCwxLDEsMSwwXX0pLG49e3ByaW1pdGl2ZToidHJpYW5nbGUgc3RyaXAiLGluc3RhbmNlczp0LnByb3AoImNvdW50IiksY291bnQ6NCxvZmZzZXQ6MCx1bmlmb3Jtczp7bWl0ZXJNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInJvdW5kIj09PWUuam9pbj8yOjF9LG1pdGVyTGltaXQ6dC5wcm9wKCJtaXRlckxpbWl0Iiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLHRyYW5zbGF0ZTp0LnByb3AoInRyYW5zbGF0ZSIpLHRoaWNrbmVzczp0LnByb3AoInRoaWNrbmVzcyIpLGRhc2hUZXh0dXJlOnQucHJvcCgiZGFzaFRleHR1cmUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLGRhc2hMZW5ndGg6dC5wcm9wKCJkYXNoTGVuZ3RoIiksdmlld3BvcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm5bZS52aWV3cG9ydC54LGUudmlld3BvcnQueSx0LnZpZXdwb3J0V2lkdGgsdC52aWV3cG9ydEhlaWdodF19LGRlcHRoOnQucHJvcCgiZGVwdGgiKX0sYmxlbmQ6e2VuYWJsZTohMCxjb2xvcjpbMCwwLDAsMF0sZXF1YXRpb246e3JnYjoiYWRkIixhbHBoYToiYWRkIn0sZnVuYzp7c3JjUkdCOiJzcmMgYWxwaGEiLGRzdFJHQjoib25lIG1pbnVzIHNyYyBhbHBoYSIsc3JjQWxwaGE6Im9uZSBtaW51cyBkc3QgYWxwaGEiLGRzdEFscGhhOiJvbmUifX0sZGVwdGg6e2VuYWJsZTpmdW5jdGlvbih0LGUpe3JldHVybiFlLm92ZXJsYXl9fSxzdGVuY2lsOntlbmFibGU6ITF9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iil9LGk9dChhKHt2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBhQ29vcmQsIGJDb29yZCwgYUNvb3JkRnJhY3QsIGJDb29yZEZyYWN0O1xuYXR0cmlidXRlIHZlYzQgY29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCB0aGlja25lc3MsIHBpeGVsUmF0aW8sIGlkLCBkZXB0aDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52ZWMyIHByb2plY3QodmVjMiBwb3NpdGlvbiwgdmVjMiBwb3NpdGlvbkZyYWN0LCB2ZWMyIHNjYWxlLCB2ZWMyIHNjYWxlRnJhY3QsIHZlYzIgdHJhbnNsYXRlLCB2ZWMyIHRyYW5zbGF0ZUZyYWN0KSB7XG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnRcblx0cmV0dXJuIHBvc2l0aW9uICogc2NhbGUgKyB0cmFuc2xhdGVcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZSArIHRyYW5zbGF0ZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbiAqIHNjYWxlRnJhY3RcbiAgICAgICArIHBvc2l0aW9uRnJhY3QgKiBzY2FsZUZyYWN0O1xufVxuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZU9mZnNldCA9IGxpbmVUb3AgKiAyLiAtIDEuO1xuXG5cdHZlYzIgZGlmZiA9IChiQ29vcmQgKyBiQ29vcmRGcmFjdCAtIGFDb29yZCAtIGFDb29yZEZyYWN0KTtcblx0dGFuZ2VudCA9IG5vcm1hbGl6ZShkaWZmICogc2NhbGUgKiB2aWV3cG9ydC56dyk7XG5cdHZlYzIgbm9ybWFsID0gdmVjMigtdGFuZ2VudC55LCB0YW5nZW50LngpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwcm9qZWN0KGFDb29yZCwgYUNvb3JkRnJhY3QsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0KSAqIGxpbmVTdGFydFxuXHRcdCsgcHJvamVjdChiQ29vcmQsIGJDb29yZEZyYWN0LCBzY2FsZSwgc2NhbGVGcmFjdCwgdHJhbnNsYXRlLCB0cmFuc2xhdGVGcmFjdCkgKiBsaW5lRW5kXG5cblx0XHQrIHRoaWNrbmVzcyAqIG5vcm1hbCAqIC41ICogbGluZU9mZnNldCAvIHZpZXdwb3J0Lnp3O1xuXG5cdGdsX1Bvc2l0aW9uID0gdmVjNChwb3NpdGlvbiAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGZyYWdDb2xvciA9IGNvbG9yIC8gMjU1Ljtcbn1cbiJdKSxmcmFnOm8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG51bmlmb3JtIGZsb2F0IGRhc2hMZW5ndGgsIHBpeGVsUmF0aW8sIHRoaWNrbmVzcywgb3BhY2l0eSwgaWQ7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xuXG52b2lkIG1haW4oKSB7XG5cdGZsb2F0IGFscGhhID0gMS47XG5cblx0ZmxvYXQgdCA9IGZyYWN0KGRvdCh0YW5nZW50LCBnbF9GcmFnQ29vcmQueHkpIC8gZGFzaExlbmd0aCkgKiAuNSArIC4yNTtcblx0ZmxvYXQgZGFzaCA9IHRleHR1cmUyRChkYXNoVGV4dHVyZSwgdmVjMih0LCAuNSkpLnI7XG5cblx0Z2xfRnJhZ0NvbG9yID0gZnJhZ0NvbG9yO1xuXHRnbF9GcmFnQ29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHkgKiBkYXNoO1xufVxuIl0pLGF0dHJpYnV0ZXM6e2xpbmVFbmQ6e2J1ZmZlcjpyLGRpdmlzb3I6MCxzdHJpZGU6OCxvZmZzZXQ6MH0sbGluZVRvcDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDo0fSxhQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjgsZGl2aXNvcjoxfSxiQ29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sYUNvb3JkRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZEZyYWN0OntidWZmZXI6dC5wcm9wKCJwb3NpdGlvbkZyYWN0QnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjE2LGRpdmlzb3I6MX0sY29sb3I6e2J1ZmZlcjp0LnByb3AoImNvbG9yQnVmZmVyIiksc3RyaWRlOjQsb2Zmc2V0OjAsZGl2aXNvcjoxfX19LG4pKTt0cnl7ZT10KGEoe2N1bGw6e2VuYWJsZTohMCxmYWNlOiJiYWNrIn0sdmVydDpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIHZlYzIgYUNvb3JkLCBiQ29vcmQsIG5leHRDb29yZCwgcHJldkNvb3JkO1xuYXR0cmlidXRlIHZlYzQgYUNvbG9yLCBiQ29sb3I7XG5hdHRyaWJ1dGUgZmxvYXQgbGluZUVuZCwgbGluZVRvcDtcblxudW5pZm9ybSB2ZWMyIHNjYWxlLCB0cmFuc2xhdGU7XG51bmlmb3JtIGZsb2F0IHRoaWNrbmVzcywgcGl4ZWxSYXRpbywgaWQsIGRlcHRoO1xudW5pZm9ybSB2ZWM0IHZpZXdwb3J0O1xudW5pZm9ybSBmbG9hdCBtaXRlckxpbWl0LCBtaXRlck1vZGU7XG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG52YXJ5aW5nIHZlYzQgc3RhcnRDdXRvZmYsIGVuZEN1dG9mZjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWMyIHN0YXJ0Q29vcmQsIGVuZENvb3JkO1xudmFyeWluZyBmbG9hdCBlbmFibGVTdGFydE1pdGVyLCBlbmFibGVFbmRNaXRlcjtcblxuY29uc3QgZmxvYXQgUkVWRVJTRV9USFJFU0hPTEQgPSAtLjg3NTtcbmNvbnN0IGZsb2F0IE1JTl9ESUZGID0gMWUtNjtcblxuLy8gVE9ETzogcG9zc2libGUgb3B0aW1pemF0aW9uczogYXZvaWQgb3ZlcmNhbGN1bGF0aW5nIGFsbCBmb3IgdmVydGljZXMgYW5kIGNhbGMganVzdCBvbmUgaW5zdGVhZFxuLy8gVE9ETzogcHJlY2FsY3VsYXRlIGRvdCBwcm9kdWN0cywgbm9ybWFsaXplIHRoaW5ncyBiZWZvcmVoZWFkIGV0Yy5cbi8vIFRPRE86IHJlZmFjdG9yIHRvIHJlY3Rhbmd1bGFyIGFsZ29yaXRobVxuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxuYm9vbCBpc05hTiggZmxvYXQgdmFsICl7XG4gIHJldHVybiAoIHZhbCA8IDAuMCB8fCAwLjAgPCB2YWwgfHwgdmFsID09IDAuMCApID8gZmFsc2UgOiB0cnVlO1xufVxuXG52b2lkIG1haW4oKSB7XG5cdHZlYzIgYUNvb3JkID0gYUNvb3JkLCBiQ29vcmQgPSBiQ29vcmQsIHByZXZDb29yZCA9IHByZXZDb29yZCwgbmV4dENvb3JkID0gbmV4dENvb3JkO1xuXG4gIHZlYzIgYWRqdXN0ZWRTY2FsZTtcbiAgYWRqdXN0ZWRTY2FsZS54ID0gKGFicyhzY2FsZS54KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueDtcbiAgYWRqdXN0ZWRTY2FsZS55ID0gKGFicyhzY2FsZS55KSA8IE1JTl9ESUZGKSA/IE1JTl9ESUZGIDogc2NhbGUueTtcblxuICB2ZWMyIHNjYWxlUmF0aW8gPSBhZGp1c3RlZFNjYWxlICogdmlld3BvcnQuenc7XG5cdHZlYzIgbm9ybWFsV2lkdGggPSB0aGlja25lc3MgLyBzY2FsZVJhdGlvO1xuXG5cdGZsb2F0IGxpbmVTdGFydCA9IDEuIC0gbGluZUVuZDtcblx0ZmxvYXQgbGluZUJvdCA9IDEuIC0gbGluZVRvcDtcblxuXHRmcmFnQ29sb3IgPSAobGluZVN0YXJ0ICogYUNvbG9yICsgbGluZUVuZCAqIGJDb2xvcikgLyAyNTUuO1xuXG5cdGlmIChpc05hTihhQ29vcmQueCkgfHwgaXNOYU4oYUNvb3JkLnkpIHx8IGlzTmFOKGJDb29yZC54KSB8fCBpc05hTihiQ29vcmQueSkpIHJldHVybjtcblxuXHRpZiAoYUNvb3JkID09IHByZXZDb29yZCkgcHJldkNvb3JkID0gYUNvb3JkICsgbm9ybWFsaXplKGJDb29yZCAtIGFDb29yZCk7XG5cdGlmIChiQ29vcmQgPT0gbmV4dENvb3JkKSBuZXh0Q29vcmQgPSBiQ29vcmQgLSBub3JtYWxpemUoYkNvb3JkIC0gYUNvb3JkKTtcblxuXHR2ZWMyIHByZXZEaWZmID0gYUNvb3JkIC0gcHJldkNvb3JkO1xuXHR2ZWMyIGN1cnJEaWZmID0gYkNvb3JkIC0gYUNvb3JkO1xuXHR2ZWMyIG5leHREaWZmID0gbmV4dENvb3JkIC0gYkNvb3JkO1xuXG5cdHZlYzIgcHJldlRhbmdlbnQgPSBub3JtYWxpemUocHJldkRpZmYgKiBzY2FsZVJhdGlvKTtcblx0dmVjMiBjdXJyVGFuZ2VudCA9IG5vcm1hbGl6ZShjdXJyRGlmZiAqIHNjYWxlUmF0aW8pO1xuXHR2ZWMyIG5leHRUYW5nZW50ID0gbm9ybWFsaXplKG5leHREaWZmICogc2NhbGVSYXRpbyk7XG5cblx0dmVjMiBwcmV2Tm9ybWFsID0gdmVjMigtcHJldlRhbmdlbnQueSwgcHJldlRhbmdlbnQueCk7XG5cdHZlYzIgY3Vyck5vcm1hbCA9IHZlYzIoLWN1cnJUYW5nZW50LnksIGN1cnJUYW5nZW50LngpO1xuXHR2ZWMyIG5leHROb3JtYWwgPSB2ZWMyKC1uZXh0VGFuZ2VudC55LCBuZXh0VGFuZ2VudC54KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IG5vcm1hbGl6ZShwcmV2VGFuZ2VudCAtIGN1cnJUYW5nZW50KTtcblx0dmVjMiBlbmRKb2luRGlyZWN0aW9uID0gbm9ybWFsaXplKGN1cnJUYW5nZW50IC0gbmV4dFRhbmdlbnQpO1xuXG5cdC8vIGNvbGxhcHNlZC91bmlkaXJlY3Rpb25hbCBzZWdtZW50IGNhc2VzXG5cdC8vIEZJWE1FOiB0aGVyZSBzaG91bGQgYmUgbW9yZSBlbGVnYW50IHNvbHV0aW9uXG5cdHZlYzIgcHJldlRhbkRpZmYgPSBhYnMocHJldlRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdHZlYzIgbmV4dFRhbkRpZmYgPSBhYnMobmV4dFRhbmdlbnQgLSBjdXJyVGFuZ2VudCk7XG5cdGlmIChtYXgocHJldlRhbkRpZmYueCwgcHJldlRhbkRpZmYueSkgPCBNSU5fRElGRikge1xuXHRcdHN0YXJ0Sm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKG1heChuZXh0VGFuRGlmZi54LCBuZXh0VGFuRGlmZi55KSA8IE1JTl9ESUZGKSB7XG5cdFx0ZW5kSm9pbkRpcmVjdGlvbiA9IGN1cnJOb3JtYWw7XG5cdH1cblx0aWYgKGFDb29yZCA9PSBiQ29vcmQpIHtcblx0XHRlbmRKb2luRGlyZWN0aW9uID0gc3RhcnRKb2luRGlyZWN0aW9uO1xuXHRcdGN1cnJOb3JtYWwgPSBwcmV2Tm9ybWFsO1xuXHRcdGN1cnJUYW5nZW50ID0gcHJldlRhbmdlbnQ7XG5cdH1cblxuXHR0YW5nZW50ID0gY3VyclRhbmdlbnQ7XG5cblx0Ly9jYWxjdWxhdGUgam9pbiBzaGlmdHMgcmVsYXRpdmUgdG8gbm9ybWFsc1xuXHRmbG9hdCBzdGFydEpvaW5TaGlmdCA9IGRvdChjdXJyTm9ybWFsLCBzdGFydEpvaW5EaXJlY3Rpb24pO1xuXHRmbG9hdCBlbmRKb2luU2hpZnQgPSBkb3QoY3Vyck5vcm1hbCwgZW5kSm9pbkRpcmVjdGlvbik7XG5cblx0ZmxvYXQgc3RhcnRNaXRlclJhdGlvID0gYWJzKDEuIC8gc3RhcnRKb2luU2hpZnQpO1xuXHRmbG9hdCBlbmRNaXRlclJhdGlvID0gYWJzKDEuIC8gZW5kSm9pblNoaWZ0KTtcblxuXHR2ZWMyIHN0YXJ0Sm9pbiA9IHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIHN0YXJ0TWl0ZXJSYXRpbztcblx0dmVjMiBlbmRKb2luID0gZW5kSm9pbkRpcmVjdGlvbiAqIGVuZE1pdGVyUmF0aW87XG5cblx0dmVjMiBzdGFydFRvcEpvaW4sIHN0YXJ0Qm90Sm9pbiwgZW5kVG9wSm9pbiwgZW5kQm90Sm9pbjtcblx0c3RhcnRUb3BKb2luID0gc2lnbihzdGFydEpvaW5TaGlmdCkgKiBzdGFydEpvaW4gKiAuNTtcblx0c3RhcnRCb3RKb2luID0gLXN0YXJ0VG9wSm9pbjtcblxuXHRlbmRUb3BKb2luID0gc2lnbihlbmRKb2luU2hpZnQpICogZW5kSm9pbiAqIC41O1xuXHRlbmRCb3RKb2luID0gLWVuZFRvcEpvaW47XG5cblx0dmVjMiBhVG9wQ29vcmQgPSBhQ29vcmQgKyBub3JtYWxXaWR0aCAqIHN0YXJ0VG9wSm9pbjtcblx0dmVjMiBiVG9wQ29vcmQgPSBiQ29vcmQgKyBub3JtYWxXaWR0aCAqIGVuZFRvcEpvaW47XG5cdHZlYzIgYUJvdENvb3JkID0gYUNvb3JkICsgbm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW47XG5cdHZlYzIgYkJvdENvb3JkID0gYkNvb3JkICsgbm9ybWFsV2lkdGggKiBlbmRCb3RKb2luO1xuXG5cdC8vbWl0ZXIgYW50aS1jbGlwcGluZ1xuXHRmbG9hdCBiYUNsaXBwaW5nID0gZGlzdFRvTGluZShiQ29vcmQsIGFDb29yZCwgYUJvdENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSwgbm9ybWFsaXplKG5vcm1hbFdpZHRoLnl4ICogdmVjMigtc3RhcnRCb3RKb2luLnksIHN0YXJ0Qm90Sm9pbi54KSkpO1xuXHRmbG9hdCBhYkNsaXBwaW5nID0gZGlzdFRvTGluZShhQ29vcmQsIGJDb29yZCwgYlRvcENvb3JkKSAvIGRvdChub3JtYWxpemUobm9ybWFsV2lkdGggKiBzdGFydEJvdEpvaW4pLCBub3JtYWxpemUobm9ybWFsV2lkdGgueXggKiB2ZWMyKC1lbmRCb3RKb2luLnksIGVuZEJvdEpvaW4ueCkpKTtcblxuXHQvL3ByZXZlbnQgY2xvc2UgdG8gcmV2ZXJzZSBkaXJlY3Rpb24gc3dpdGNoXG5cdGJvb2wgcHJldlJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIHByZXZUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBwcmV2Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKHByZXZEaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cdGJvb2wgbmV4dFJldmVyc2UgPSBkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSA8PSBSRVZFUlNFX1RIUkVTSE9MRCAmJiBhYnMoZG90KGN1cnJUYW5nZW50LCBuZXh0Tm9ybWFsKSkgKiBtaW4obGVuZ3RoKG5leHREaWZmKSwgbGVuZ3RoKGN1cnJEaWZmKSkgPCAgbGVuZ3RoKG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCk7XG5cblx0aWYgKHByZXZSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIHN0YXJ0Sm9pbkRpcmVjdGlvbiAqIG1pdGVyTGltaXQgKiAuNTtcblx0XHRmbG9hdCBub3JtYWxBZGp1c3QgPSAxLiAtIG1pbihtaXRlckxpbWl0IC8gc3RhcnRNaXRlclJhdGlvLCAxLik7XG5cdFx0YUJvdENvb3JkID0gYUNvb3JkICsgbWl0ZXJTaGlmdCAtIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHRcdGFUb3BDb29yZCA9IGFDb29yZCArIG1pdGVyU2hpZnQgKyBub3JtYWxBZGp1c3QgKiBub3JtYWxXaWR0aCAqIGN1cnJOb3JtYWwgKiAuNTtcblx0fVxuXHRlbHNlIGlmICghbmV4dFJldmVyc2UgJiYgYmFDbGlwcGluZyA+IDAuICYmIGJhQ2xpcHBpbmcgPCBsZW5ndGgobm9ybWFsV2lkdGggKiBlbmRCb3RKb2luKSkge1xuXHRcdC8vaGFuZGxlIG1pdGVyIGNsaXBwaW5nXG5cdFx0YlRvcENvb3JkIC09IG5vcm1hbFdpZHRoICogZW5kVG9wSm9pbjtcblx0XHRiVG9wQ29vcmQgKz0gbm9ybWFsaXplKGVuZFRvcEpvaW4gKiBub3JtYWxXaWR0aCkgKiBiYUNsaXBwaW5nO1xuXHR9XG5cblx0aWYgKG5leHRSZXZlcnNlKSB7XG5cdFx0Ly9tYWtlIGpvaW4gcmVjdGFuZ3VsYXJcblx0XHR2ZWMyIG1pdGVyU2hpZnQgPSBub3JtYWxXaWR0aCAqIGVuZEpvaW5EaXJlY3Rpb24gKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0ZmxvYXQgbm9ybWFsQWRqdXN0ID0gMS4gLSBtaW4obWl0ZXJMaW1pdCAvIGVuZE1pdGVyUmF0aW8sIDEuKTtcblx0XHRiQm90Q29vcmQgPSBiQ29vcmQgKyBtaXRlclNoaWZ0IC0gbm9ybWFsQWRqdXN0ICogbm9ybWFsV2lkdGggKiBjdXJyTm9ybWFsICogLjU7XG5cdFx0YlRvcENvb3JkID0gYkNvb3JkICsgbWl0ZXJTaGlmdCArIG5vcm1hbEFkanVzdCAqIG5vcm1hbFdpZHRoICogY3Vyck5vcm1hbCAqIC41O1xuXHR9XG5cdGVsc2UgaWYgKCFwcmV2UmV2ZXJzZSAmJiBhYkNsaXBwaW5nID4gMC4gJiYgYWJDbGlwcGluZyA8IGxlbmd0aChub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbikpIHtcblx0XHQvL2hhbmRsZSBtaXRlciBjbGlwcGluZ1xuXHRcdGFCb3RDb29yZCAtPSBub3JtYWxXaWR0aCAqIHN0YXJ0Qm90Sm9pbjtcblx0XHRhQm90Q29vcmQgKz0gbm9ybWFsaXplKHN0YXJ0Qm90Sm9pbiAqIG5vcm1hbFdpZHRoKSAqIGFiQ2xpcHBpbmc7XG5cdH1cblxuXHR2ZWMyIGFUb3BQb3NpdGlvbiA9IChhVG9wQ29vcmQpICogYWRqdXN0ZWRTY2FsZSArIHRyYW5zbGF0ZTtcblx0dmVjMiBhQm90UG9zaXRpb24gPSAoYUJvdENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cblx0dmVjMiBiVG9wUG9zaXRpb24gPSAoYlRvcENvb3JkKSAqIGFkanVzdGVkU2NhbGUgKyB0cmFuc2xhdGU7XG5cdHZlYzIgYkJvdFBvc2l0aW9uID0gKGJCb3RDb29yZCkgKiBhZGp1c3RlZFNjYWxlICsgdHJhbnNsYXRlO1xuXG5cdC8vcG9zaXRpb24gaXMgbm9ybWFsaXplZCAwLi4xIGNvb3JkIG9uIHRoZSBzY3JlZW5cblx0dmVjMiBwb3NpdGlvbiA9IChhVG9wUG9zaXRpb24gKiBsaW5lVG9wICsgYUJvdFBvc2l0aW9uICogbGluZUJvdCkgKiBsaW5lU3RhcnQgKyAoYlRvcFBvc2l0aW9uICogbGluZVRvcCArIGJCb3RQb3NpdGlvbiAqIGxpbmVCb3QpICogbGluZUVuZDtcblxuXHRzdGFydENvb3JkID0gYUNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cdGVuZENvb3JkID0gYkNvb3JkICogc2NhbGVSYXRpbyArIHRyYW5zbGF0ZSAqIHZpZXdwb3J0Lnp3ICsgdmlld3BvcnQueHk7XG5cblx0Z2xfUG9zaXRpb24gPSB2ZWM0KHBvc2l0aW9uICAqIDIuMCAtIDEuMCwgZGVwdGgsIDEpO1xuXG5cdGVuYWJsZVN0YXJ0TWl0ZXIgPSBzdGVwKGRvdChjdXJyVGFuZ2VudCwgcHJldlRhbmdlbnQpLCAuNSk7XG5cdGVuYWJsZUVuZE1pdGVyID0gc3RlcChkb3QoY3VyclRhbmdlbnQsIG5leHRUYW5nZW50KSwgLjUpO1xuXG5cdC8vYmV2ZWwgbWl0ZXIgY3V0b2Zmc1xuXHRpZiAobWl0ZXJNb2RlID09IDEuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogbWl0ZXJMaW1pdCAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBtaXRlckxpbWl0ICogLjU7XG5cdFx0XHRlbmRDdXRvZmYgPSB2ZWM0KGJDb29yZCwgYkNvb3JkKTtcblx0XHRcdGVuZEN1dG9mZi56dyArPSB2ZWMyKC1lbmRKb2luRGlyZWN0aW9uLnksIGVuZEpvaW5EaXJlY3Rpb24ueCkgIC8gc2NhbGVSYXRpbztcblx0XHRcdGVuZEN1dG9mZiA9IGVuZEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdGVuZEN1dG9mZiArPSB2aWV3cG9ydC54eXh5O1xuXHRcdFx0ZW5kQ3V0b2ZmICs9IGVuZE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cdH1cblxuXHQvL3JvdW5kIG1pdGVyIGN1dG9mZnNcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgc3RhcnRNaXRlcldpZHRoID0gdmVjMihzdGFydEpvaW5EaXJlY3Rpb24pICogdGhpY2tuZXNzICogYWJzKGRvdChzdGFydEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0c3RhcnRDdXRvZmYgPSB2ZWM0KGFDb29yZCwgYUNvb3JkKTtcblx0XHRcdHN0YXJ0Q3V0b2ZmLnp3ICs9IHZlYzIoLXN0YXJ0Sm9pbkRpcmVjdGlvbi55LCBzdGFydEpvaW5EaXJlY3Rpb24ueCkgLyBzY2FsZVJhdGlvO1xuXHRcdFx0c3RhcnRDdXRvZmYgPSBzdGFydEN1dG9mZiAqIHNjYWxlUmF0aW8ueHl4eSArIHRyYW5zbGF0ZS54eXh5ICogdmlld3BvcnQuend6dztcblx0XHRcdHN0YXJ0Q3V0b2ZmICs9IHZpZXdwb3J0Lnh5eHk7XG5cdFx0XHRzdGFydEN1dG9mZiArPSBzdGFydE1pdGVyV2lkdGgueHl4eTtcblx0XHR9XG5cblx0XHRpZiAoZW5hYmxlRW5kTWl0ZXIgPT0gMS4pIHtcblx0XHRcdHZlYzIgZW5kTWl0ZXJXaWR0aCA9IHZlYzIoZW5kSm9pbkRpcmVjdGlvbikgKiB0aGlja25lc3MgKiBhYnMoZG90KGVuZEpvaW5EaXJlY3Rpb24sIGN1cnJOb3JtYWwpKSAqIC41O1xuXHRcdFx0ZW5kQ3V0b2ZmID0gdmVjNChiQ29vcmQsIGJDb29yZCk7XG5cdFx0XHRlbmRDdXRvZmYuencgKz0gdmVjMigtZW5kSm9pbkRpcmVjdGlvbi55LCBlbmRKb2luRGlyZWN0aW9uLngpICAvIHNjYWxlUmF0aW87XG5cdFx0XHRlbmRDdXRvZmYgPSBlbmRDdXRvZmYgKiBzY2FsZVJhdGlvLnh5eHkgKyB0cmFuc2xhdGUueHl4eSAqIHZpZXdwb3J0Lnp3enc7XG5cdFx0XHRlbmRDdXRvZmYgKz0gdmlld3BvcnQueHl4eTtcblx0XHRcdGVuZEN1dG9mZiArPSBlbmRNaXRlcldpZHRoLnh5eHk7XG5cdFx0fVxuXHR9XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBmbG9hdCBkYXNoTGVuZ3RoLCBwaXhlbFJhdGlvLCB0aGlja25lc3MsIG9wYWNpdHksIGlkLCBtaXRlck1vZGU7XG51bmlmb3JtIHNhbXBsZXIyRCBkYXNoVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcbnZhcnlpbmcgdmVjMiB0YW5nZW50O1xudmFyeWluZyB2ZWM0IHN0YXJ0Q3V0b2ZmLCBlbmRDdXRvZmY7XG52YXJ5aW5nIHZlYzIgc3RhcnRDb29yZCwgZW5kQ29vcmQ7XG52YXJ5aW5nIGZsb2F0IGVuYWJsZVN0YXJ0TWl0ZXIsIGVuYWJsZUVuZE1pdGVyO1xuXG5mbG9hdCBkaXN0VG9MaW5lKHZlYzIgcCwgdmVjMiBhLCB2ZWMyIGIpIHtcblx0dmVjMiBkaWZmID0gYiAtIGE7XG5cdHZlYzIgcGVycCA9IG5vcm1hbGl6ZSh2ZWMyKC1kaWZmLnksIGRpZmYueCkpO1xuXHRyZXR1cm4gZG90KHAgLSBhLCBwZXJwKTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBhbHBoYSA9IDEuLCBkaXN0VG9TdGFydCwgZGlzdFRvRW5kO1xuXHRmbG9hdCBjdXRvZmYgPSB0aGlja25lc3MgKiAuNTtcblxuXHQvL2JldmVsIG1pdGVyXG5cdGlmIChtaXRlck1vZGUgPT0gMS4pIHtcblx0XHRpZiAoZW5hYmxlU3RhcnRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvU3RhcnQgPSBkaXN0VG9MaW5lKGdsX0ZyYWdDb29yZC54eSwgc3RhcnRDdXRvZmYueHksIHN0YXJ0Q3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9TdGFydCA8IC0xLikge1xuXHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhbHBoYSAqPSBtaW4obWF4KGRpc3RUb1N0YXJ0ICsgMS4sIDAuKSwgMS4pO1xuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAtMS4pIHtcblx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0YWxwaGEgKj0gbWluKG1heChkaXN0VG9FbmQgKyAxLiwgMC4pLCAxLik7XG5cdFx0fVxuXHR9XG5cblx0Ly8gcm91bmQgbWl0ZXJcblx0ZWxzZSBpZiAobWl0ZXJNb2RlID09IDIuKSB7XG5cdFx0aWYgKGVuYWJsZVN0YXJ0TWl0ZXIgPT0gMS4pIHtcblx0XHRcdGRpc3RUb1N0YXJ0ID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIHN0YXJ0Q3V0b2ZmLnh5LCBzdGFydEN1dG9mZi56dyk7XG5cdFx0XHRpZiAoZGlzdFRvU3RhcnQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gc3RhcnRDb29yZCk7XG5cblx0XHRcdFx0aWYocmFkaXVzID4gY3V0b2ZmICsgLjUpIHtcblx0XHRcdFx0XHRkaXNjYXJkO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFscGhhIC09IHNtb290aHN0ZXAoY3V0b2ZmIC0gLjUsIGN1dG9mZiArIC41LCByYWRpdXMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbmFibGVFbmRNaXRlciA9PSAxLikge1xuXHRcdFx0ZGlzdFRvRW5kID0gZGlzdFRvTGluZShnbF9GcmFnQ29vcmQueHksIGVuZEN1dG9mZi54eSwgZW5kQ3V0b2ZmLnp3KTtcblx0XHRcdGlmIChkaXN0VG9FbmQgPCAwLikge1xuXHRcdFx0XHRmbG9hdCByYWRpdXMgPSBsZW5ndGgoZ2xfRnJhZ0Nvb3JkLnh5IC0gZW5kQ29vcmQpO1xuXG5cdFx0XHRcdGlmKHJhZGl1cyA+IGN1dG9mZiArIC41KSB7XG5cdFx0XHRcdFx0ZGlzY2FyZDtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhbHBoYSAtPSBzbW9vdGhzdGVwKGN1dG9mZiAtIC41LCBjdXRvZmYgKyAuNSwgcmFkaXVzKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmbG9hdCB0ID0gZnJhY3QoZG90KHRhbmdlbnQsIGdsX0ZyYWdDb29yZC54eSkgLyBkYXNoTGVuZ3RoKSAqIC41ICsgLjI1O1xuXHRmbG9hdCBkYXNoID0gdGV4dHVyZTJEKGRhc2hUZXh0dXJlLCB2ZWMyKHQsIC41KSkucjtcblxuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG5cdGdsX0ZyYWdDb2xvci5hICo9IGFscGhhICogb3BhY2l0eSAqIGRhc2g7XG59XG4iXSksYXR0cmlidXRlczp7bGluZUVuZDp7YnVmZmVyOnIsZGl2aXNvcjowLHN0cmlkZTo4LG9mZnNldDowfSxsaW5lVG9wOntidWZmZXI6cixkaXZpc29yOjAsc3RyaWRlOjgsb2Zmc2V0OjR9LGFDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6MCxkaXZpc29yOjF9LGJDb2xvcjp7YnVmZmVyOnQucHJvcCgiY29sb3JCdWZmZXIiKSxzdHJpZGU6NCxvZmZzZXQ6NCxkaXZpc29yOjF9LHByZXZDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MCxkaXZpc29yOjF9LGFDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OCxkaXZpc29yOjF9LGJDb29yZDp7YnVmZmVyOnQucHJvcCgicG9zaXRpb25CdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6MTYsZGl2aXNvcjoxfSxuZXh0Q29vcmQ6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0OjI0LGRpdmlzb3I6MX19fSxuKSl9Y2F0Y2godCl7ZT1pfXJldHVybntmaWxsOnQoe3ByaW1pdGl2ZToidHJpYW5nbGUiLGVsZW1lbnRzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudHJpYW5nbGVzfSxvZmZzZXQ6MCx2ZXJ0Om8oWyJwcmVjaXNpb24gaGlnaHAgZmxvYXQ7XG4jZGVmaW5lIEdMU0xJRlkgMVxuXG5hdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbiwgcG9zaXRpb25GcmFjdDtcblxudW5pZm9ybSB2ZWM0IGNvbG9yO1xudW5pZm9ybSB2ZWMyIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBmbG9hdCBwaXhlbFJhdGlvLCBpZDtcbnVuaWZvcm0gdmVjNCB2aWV3cG9ydDtcbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxuY29uc3QgZmxvYXQgTUFYX0xJTkVTID0gMjU2Ljtcblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCBkZXB0aCA9IChNQVhfTElORVMgLSA0LiAtIGlkKSAvIChNQVhfTElORVMpO1xuXG5cdHZlYzIgcG9zaXRpb24gPSBwb3NpdGlvbiAqIHNjYWxlICsgdHJhbnNsYXRlXG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGUgKyB0cmFuc2xhdGVGcmFjdFxuICAgICAgICsgcG9zaXRpb24gKiBzY2FsZUZyYWN0XG4gICAgICAgKyBwb3NpdGlvbkZyYWN0ICogc2NhbGVGcmFjdDtcblxuXHRnbF9Qb3NpdGlvbiA9IHZlYzQocG9zaXRpb24gKiAyLjAgLSAxLjAsIGRlcHRoLCAxKTtcblxuXHRmcmFnQ29sb3IgPSBjb2xvciAvIDI1NS47XG5cdGZyYWdDb2xvci5hICo9IG9wYWNpdHk7XG59XG4iXSksZnJhZzpvKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuXHRnbF9GcmFnQ29sb3IgPSBmcmFnQ29sb3I7XG59XG4iXSksdW5pZm9ybXM6e3NjYWxlOnQucHJvcCgic2NhbGUiKSxjb2xvcjp0LnByb3AoImZpbGwiKSxzY2FsZUZyYWN0OnQucHJvcCgic2NhbGVGcmFjdCIpLHRyYW5zbGF0ZUZyYWN0OnQucHJvcCgidHJhbnNsYXRlRnJhY3QiKSx0cmFuc2xhdGU6dC5wcm9wKCJ0cmFuc2xhdGUiKSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksaWQ6dC5wcm9wKCJpZCIpLHZpZXdwb3J0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuW2Uudmlld3BvcnQueCxlLnZpZXdwb3J0LnksdC52aWV3cG9ydFdpZHRoLHQudmlld3BvcnRIZWlnaHRdfX0sYXR0cmlidXRlczp7cG9zaXRpb246e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uQnVmZmVyIiksc3RyaWRlOjgsb2Zmc2V0Ojh9LHBvc2l0aW9uRnJhY3Q6e2J1ZmZlcjp0LnByb3AoInBvc2l0aW9uRnJhY3RCdWZmZXIiKSxzdHJpZGU6OCxvZmZzZXQ6OH19LGJsZW5kOm4uYmxlbmQsZGVwdGg6e2VuYWJsZTohMX0sc2Npc3NvcjpuLnNjaXNzb3Isc3RlbmNpbDpuLnN0ZW5jaWwsdmlld3BvcnQ6bi52aWV3cG9ydH0pLHJlY3Q6aSxtaXRlcjplfX0sdi5kZWZhdWx0cz17ZGFzaGVzOm51bGwsam9pbjoibWl0ZXIiLG1pdGVyTGltaXQ6MSx0aGlja25lc3M6MTAsY2FwOiJzcXVhcmUiLGNvbG9yOiJibGFjayIsb3BhY2l0eToxLG92ZXJsYXk6ITEsdmlld3BvcnQ6bnVsbCxyYW5nZTpudWxsLGNsb3NlOiExLGZpbGw6bnVsbH0sdi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07ZS5sZW5ndGgmJih0PXRoaXMpLnVwZGF0ZS5hcHBseSh0LGUpLHRoaXMuZHJhdygpfSx2LnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4oZS5sZW5ndGg/ZTp0aGlzLnBhc3NlcykuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXt2YXIgbjtpZihlJiZBcnJheS5pc0FycmF5KGUpKXJldHVybihuPXQpLmRyYXcuYXBwbHkobixlKTsibnVtYmVyIj09dHlwZW9mIGUmJihlPXQucGFzc2VzW2VdKSxlJiZlLmNvdW50PjEmJmUub3BhY2l0eSYmKHQucmVnbC5fcmVmcmVzaCgpLGUuZmlsbCYmZS50cmlhbmdsZXMmJmUudHJpYW5nbGVzLmxlbmd0aD4yJiZ0LnNoYWRlcnMuZmlsbChlKSxlLnRoaWNrbmVzcyYmKGUuc2NhbGVbMF0qZS52aWV3cG9ydC53aWR0aD52LnByZWNpc2lvblRocmVzaG9sZHx8ZS5zY2FsZVsxXSplLnZpZXdwb3J0LmhlaWdodD52LnByZWNpc2lvblRocmVzaG9sZHx8InJlY3QiPT09ZS5qb2lufHwhZS5qb2luJiYoZS50aGlja25lc3M8PTJ8fGUuY291bnQ+PXYubWF4UG9pbnRzKT90LnNoYWRlcnMucmVjdChlKTp0LnNoYWRlcnMubWl0ZXIoZSkpKX0pKSx0aGlzfSx2LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZih0KXtudWxsIT10Lmxlbmd0aD8ibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PVt7cG9zaXRpb25zOnR9XSk6QXJyYXkuaXNBcnJheSh0KXx8KHQ9W3RdKTt2YXIgcj10aGlzLnJlZ2wsbz10aGlzLmdsO2lmKHQuZm9yRWFjaCgoZnVuY3Rpb24odCxmKXt2YXIgZD1lLnBhc3Nlc1tmXTtpZih2b2lkIDAhPT10KWlmKG51bGwhPT10KXtpZigibnVtYmVyIj09dHlwZW9mIHRbMF0mJih0PXtwb3NpdGlvbnM6dH0pLHQ9cyh0LHtwb3NpdGlvbnM6InBvc2l0aW9ucyBwb2ludHMgZGF0YSBjb29yZHMiLHRoaWNrbmVzczoidGhpY2tuZXNzIGxpbmVXaWR0aCBsaW5lV2lkdGhzIGxpbmUtd2lkdGggbGluZXdpZHRoIHdpZHRoIHN0cm9rZS13aWR0aCBzdHJva2V3aWR0aCBzdHJva2VXaWR0aCIsam9pbjoibGluZUpvaW4gbGluZWpvaW4gam9pbiB0eXBlIG1vZGUiLG1pdGVyTGltaXQ6Im1pdGVybGltaXQgbWl0ZXJMaW1pdCIsZGFzaGVzOiJkYXNoIGRhc2hlcyBkYXNoYXJyYXkgZGFzaC1hcnJheSBkYXNoQXJyYXkiLGNvbG9yOiJjb2xvciBjb2xvdXIgc3Ryb2tlIGNvbG9ycyBjb2xvdXJzIHN0cm9rZS1jb2xvciBzdHJva2VDb2xvciIsZmlsbDoiZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToiYWxwaGEgb3BhY2l0eSIsb3ZlcmxheToib3ZlcmxheSBjcmVhc2Ugb3ZlcmxhcCBpbnRlcnNlY3QiLGNsb3NlOiJjbG9zZWQgY2xvc2UgY2xvc2VkLXBhdGggY2xvc2VQYXRoIixyYW5nZToicmFuZ2UgZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3giLGhvbGU6ImhvbGVzIGhvbGUgaG9sbG93IixzcGxpdE51bGw6InNwbGl0TnVsbCJ9KSxkfHwoZS5wYXNzZXNbZl09ZD17aWQ6ZixzY2FsZTpudWxsLHNjYWxlRnJhY3Q6bnVsbCx0cmFuc2xhdGU6bnVsbCx0cmFuc2xhdGVGcmFjdDpudWxsLGNvdW50OjAsaG9sZTpbXSxkZXB0aDowLGRhc2hMZW5ndGg6MSxkYXNoVGV4dHVyZTpyLnRleHR1cmUoe2NoYW5uZWxzOjEsZGF0YTpuZXcgVWludDhBcnJheShbMjU1XSksd2lkdGg6MSxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSksY29sb3JCdWZmZXI6ci5idWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTpuZXcgVWludDhBcnJheX0pLHBvc2l0aW9uQnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KSxwb3NpdGlvbkZyYWN0QnVmZmVyOnIuYnVmZmVyKHt1c2FnZToiZHluYW1pYyIsdHlwZToiZmxvYXQiLGRhdGE6bmV3IFVpbnQ4QXJyYXl9KX0sdD1hKHt9LHYuZGVmYXVsdHMsdCkpLG51bGwhPXQudGhpY2tuZXNzJiYoZC50aGlja25lc3M9cGFyc2VGbG9hdCh0LnRoaWNrbmVzcykpLG51bGwhPXQub3BhY2l0eSYmKGQub3BhY2l0eT1wYXJzZUZsb2F0KHQub3BhY2l0eSkpLG51bGwhPXQubWl0ZXJMaW1pdCYmKGQubWl0ZXJMaW1pdD1wYXJzZUZsb2F0KHQubWl0ZXJMaW1pdCkpLG51bGwhPXQub3ZlcmxheSYmKGQub3ZlcmxheT0hIXQub3ZlcmxheSxmPHYubWF4TGluZXMmJihkLmRlcHRoPTIqKHYubWF4TGluZXMtMS1mJXYubWF4TGluZXMpL3YubWF4TGluZXMtMSkpLG51bGwhPXQuam9pbiYmKGQuam9pbj10LmpvaW4pLG51bGwhPXQuaG9sZSYmKGQuaG9sZT10LmhvbGUpLG51bGwhPXQuZmlsbCYmKGQuZmlsbD10LmZpbGw/bih0LmZpbGwsInVpbnQ4Iik6bnVsbCksbnVsbCE9dC52aWV3cG9ydCYmKGQudmlld3BvcnQ9bSh0LnZpZXdwb3J0KSksZC52aWV3cG9ydHx8KGQudmlld3BvcnQ9bShbby5kcmF3aW5nQnVmZmVyV2lkdGgsby5kcmF3aW5nQnVmZmVySGVpZ2h0XSkpLG51bGwhPXQuY2xvc2UmJihkLmNsb3NlPXQuY2xvc2UpLG51bGw9PT10LnBvc2l0aW9ucyYmKHQucG9zaXRpb25zPVtdKSx0LnBvc2l0aW9ucyl7dmFyIHkseDtpZih0LnBvc2l0aW9ucy54JiZ0LnBvc2l0aW9ucy55KXt2YXIgYj10LnBvc2l0aW9ucy54LF89dC5wb3NpdGlvbnMueTt4PWQuY291bnQ9TWF0aC5tYXgoYi5sZW5ndGgsXy5sZW5ndGgpLHk9bmV3IEZsb2F0NjRBcnJheSgyKngpO2Zvcih2YXIgdz0wO3c8eDt3KyspeVsyKnddPWJbd10seVsyKncrMV09X1t3XX1lbHNlIHk9bCh0LnBvc2l0aW9ucywiZmxvYXQ2NCIpLHg9ZC5jb3VudD1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO3ZhciBUPWQuYm91bmRzPWkoeSwyKTtpZihkLmZpbGwpe2Zvcih2YXIgaz1bXSxBPXt9LE09MCxTPTAsRT0wLEw9ZC5jb3VudDtTPEw7UysrKXt2YXIgQz15WzIqU10sUD15WzIqUysxXTtpc05hTihDKXx8aXNOYU4oUCl8fG51bGw9PUN8fG51bGw9PVA/KEM9eVsyKk1dLFA9eVsyKk0rMV0sQVtTXT1NKTpNPVMsa1tFKytdPUMsa1tFKytdPVB9aWYodC5zcGxpdE51bGwpe2QuY291bnQtMSBpbiBBfHwoQVtkLmNvdW50XT1kLmNvdW50LTEpO3ZhciBJPU9iamVjdC5rZXlzKEEpLm1hcChOdW1iZXIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxPPVtdLHo9MCxEPW51bGwhPWQuaG9sZT9kLmhvbGVbMF06bnVsbDtpZihudWxsIT1EKXt2YXIgUj1nKEksKGZ1bmN0aW9uKHQpe3JldHVybiB0Pj1EfSkpOyhJPUkuc2xpY2UoMCxSKSkucHVzaChEKX1mb3IodmFyIEY9ZnVuY3Rpb24odCl7dmFyIGU9ay5zbGljZSgyKnosMipJW3RdKS5jb25jYXQoRD9rLnNsaWNlKDIqRCk6W10pLHI9KGQuaG9sZXx8W10pLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUtRCsoSVt0XS16KX0pKSxuPWMoZSxyKTtuPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSt6KyhlK3o8SVt0XT8wOkQtSVt0XSl9KSksTy5wdXNoLmFwcGx5KE8sbiksej1JW3RdKzF9LEI9MDtCPEkubGVuZ3RoO0IrKylGKEIpO2Zvcih2YXIgTj0wLGo9Ty5sZW5ndGg7TjxqO04rKyludWxsIT1BW09bTl1dJiYoT1tOXT1BW09bTl1dKTtkLnRyaWFuZ2xlcz1PfWVsc2V7Zm9yKHZhciBVPWMoayxkLmhvbGV8fFtdKSxWPTAsSD1VLmxlbmd0aDtWPEg7VisrKW51bGwhPUFbVVtWXV0mJihVW1ZdPUFbVVtWXV0pO2QudHJpYW5nbGVzPVV9fXZhciBxPW5ldyBGbG9hdDY0QXJyYXkoeSk7dShxLDIsVCk7dmFyIEc9bmV3IEZsb2F0NjRBcnJheSgyKngrNik7ZC5jbG9zZT95WzBdPT09eVsyKngtMl0mJnlbMV09PT15WzIqeC0xXT8oR1swXT1xWzIqeC00XSxHWzFdPXFbMip4LTNdKTooR1swXT1xWzIqeC0yXSxHWzFdPXFbMip4LTFdKTooR1swXT1xWzBdLEdbMV09cVsxXSksRy5zZXQocSwyKSxkLmNsb3NlP3lbMF09PT15WzIqeC0yXSYmeVsxXT09PXlbMip4LTFdPyhHWzIqeCsyXT1xWzJdLEdbMip4KzNdPXFbM10sZC5jb3VudC09MSk6KEdbMip4KzJdPXFbMF0sR1syKngrM109cVsxXSxHWzIqeCs0XT1xWzJdLEdbMip4KzVdPXFbM10pOihHWzIqeCsyXT1xWzIqeC0yXSxHWzIqeCszXT1xWzIqeC0xXSxHWzIqeCs0XT1xWzIqeC0yXSxHWzIqeCs1XT1xWzIqeC0xXSk7dmFyIFk9aChHKTtkLnBvc2l0aW9uQnVmZmVyKFkpO3ZhciBXPXAoRyxZKTtkLnBvc2l0aW9uRnJhY3RCdWZmZXIoVyl9aWYodC5yYW5nZT9kLnJhbmdlPXQucmFuZ2U6ZC5yYW5nZXx8KGQucmFuZ2U9ZC5ib3VuZHMpLCh0LnJhbmdlfHx0LnBvc2l0aW9ucykmJmQuY291bnQpe3ZhciBYPWQuYm91bmRzLFo9WFsyXS1YWzBdLEo9WFszXS1YWzFdLEs9ZC5yYW5nZVsyXS1kLnJhbmdlWzBdLFE9ZC5yYW5nZVszXS1kLnJhbmdlWzFdO2Quc2NhbGU9W1ovSyxKL1FdLGQudHJhbnNsYXRlPVstZC5yYW5nZVswXS9LK1hbMF0vS3x8MCwtZC5yYW5nZVsxXS9RK1hbMV0vUXx8MF0sZC5zY2FsZUZyYWN0PXAoZC5zY2FsZSksZC50cmFuc2xhdGVGcmFjdD1wKGQudHJhbnNsYXRlKX1pZih0LmRhc2hlcyl7dmFyICQsdHQ9MDtpZighdC5kYXNoZXN8fHQuZGFzaGVzLmxlbmd0aDwyKXR0PTEsJD1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NV0pO2Vsc2V7dHQ9MDtmb3IodmFyIGV0PTA7ZXQ8dC5kYXNoZXMubGVuZ3RoOysrZXQpdHQrPXQuZGFzaGVzW2V0XTskPW5ldyBVaW50OEFycmF5KHR0KnYuZGFzaE11bHQpO2Zvcih2YXIgcnQ9MCxudD0yNTUsaXQ9MDtpdDwyO2l0KyspZm9yKHZhciBhdD0wO2F0PHQuZGFzaGVzLmxlbmd0aDsrK2F0KXtmb3IodmFyIG90PTAsc3Q9dC5kYXNoZXNbYXRdKnYuZGFzaE11bHQqLjU7b3Q8c3Q7KytvdCkkW3J0KytdPW50O250Xj0yNTV9fWQuZGFzaExlbmd0aD10dCxkLmRhc2hUZXh0dXJlKHtjaGFubmVsczoxLGRhdGE6JCx3aWR0aDokLmxlbmd0aCxoZWlnaHQ6MSxtYWc6ImxpbmVhciIsbWluOiJsaW5lYXIifSwwLDApfWlmKHQuY29sb3Ipe3ZhciBsdD1kLmNvdW50LGN0PXQuY29sb3I7Y3R8fChjdD0idHJhbnNwYXJlbnQiKTt2YXIgdXQ9bmV3IFVpbnQ4QXJyYXkoNCpsdCs0KTtpZihBcnJheS5pc0FycmF5KGN0KSYmIm51bWJlciIhPXR5cGVvZiBjdFswXSl7Zm9yKHZhciBmdD0wO2Z0PGx0O2Z0Kyspe3ZhciBodD1uKGN0W2Z0XSwidWludDgiKTt1dC5zZXQoaHQsNCpmdCl9dXQuc2V0KG4oY3RbMF0sInVpbnQ4IiksNCpsdCl9ZWxzZSBmb3IodmFyIHB0PW4oY3QsInVpbnQ4IiksZHQ9MDtkdDxsdCsxO2R0KyspdXQuc2V0KHB0LDQqZHQpO2QuY29sb3JCdWZmZXIoe3VzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCIsZGF0YTp1dH0pfX1lbHNlIGUucGFzc2VzW2ZdPW51bGx9KSksdC5sZW5ndGg8dGhpcy5wYXNzZXMubGVuZ3RoKXtmb3IodmFyIGY9dC5sZW5ndGg7Zjx0aGlzLnBhc3Nlcy5sZW5ndGg7ZisrKXt2YXIgZD10aGlzLnBhc3Nlc1tmXTtkJiYoZC5jb2xvckJ1ZmZlci5kZXN0cm95KCksZC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksZC5kYXNoVGV4dHVyZS5kZXN0cm95KCkpfXRoaXMucGFzc2VzLmxlbmd0aD10Lmxlbmd0aH1mb3IodmFyIHk9W10seD0wO3g8dGhpcy5wYXNzZXMubGVuZ3RoO3grKyludWxsIT09dGhpcy5wYXNzZXNbeF0mJnkucHVzaCh0aGlzLnBhc3Nlc1t4XSk7cmV0dXJuIHRoaXMucGFzc2VzPXksdGhpc319LHYucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXNzZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jb2xvckJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5kYXNoVGV4dHVyZS5kZXN0cm95KCl9KSksdGhpcy5wYXNzZXMubGVuZ3RoPTAsdGhpc319LHsiYXJyYXktYm91bmRzIjo3MiwiYXJyYXktZmluZC1pbmRleCI6NzMsImFycmF5LW5vcm1hbGl6ZSI6NzQsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LGVhcmN1dDoxNzgsImVzNi13ZWFrLW1hcCI6MjMzLCJmbGF0dGVuLXZlcnRleC1kYXRhIjoyNDQsZ2xzbGlmeTo0MjQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGFyc2UtcmVjdCI6NDcxLCJwaWNrLWJ5LWFsaWFzIjo0NzUsInRvLWZsb2F0MzIiOjU3M31dLDUxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHR9KHQpfHxmdW5jdGlvbih0LGUpe3ZhciByPW51bGw9PXQ/bnVsbDoidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmdFtTeW1ib2wuaXRlcmF0b3JdfHx0WyJAQGl0ZXJhdG9yIl07aWYobnVsbD09cilyZXR1cm47dmFyIG4saSxhPVtdLG89ITAscz0hMTt0cnl7Zm9yKHI9ci5jYWxsKHQpOyEobz0obj1yLm5leHQoKSkuZG9uZSkmJihhLnB1c2gobi52YWx1ZSksIWV8fGEubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKHQpe3M9ITAsaT10fWZpbmFsbHl7dHJ5e298fG51bGw9PXIucmV0dXJufHxyLnJldHVybigpfWZpbmFsbHl7aWYocyl0aHJvdyBpfX1yZXR1cm4gYX0odCxlKXx8YSh0LGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZnVuY3Rpb24odCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gbyh0KX0odCl8fGZ1bmN0aW9uKHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZudWxsIT10W1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPXRbIkBAaXRlcmF0b3IiXSlyZXR1cm4gQXJyYXkuZnJvbSh0KX0odCl8fGEodCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdClyZXR1cm4gbyh0LGUpO3ZhciByPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KS5zbGljZSg4LC0xKTtyZXR1cm4iT2JqZWN0Ij09PXImJnQuY29uc3RydWN0b3ImJihyPXQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT1yfHwiU2V0Ij09PXI/QXJyYXkuZnJvbSh0KToiQXJndW1lbnRzIj09PXJ8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHIpP28odCxlKTp2b2lkIDB9fWZ1bmN0aW9uIG8odCxlKXsobnVsbD09ZXx8ZT50Lmxlbmd0aCkmJihlPXQubGVuZ3RoKTtmb3IodmFyIHI9MCxuPW5ldyBBcnJheShlKTtyPGU7cisrKW5bcl09dFtyXTtyZXR1cm4gbn12YXIgcz10KCJjb2xvci1ub3JtYWxpemUiKSxsPXQoImFycmF5LWJvdW5kcyIpLGM9dCgiY29sb3ItaWQiKSx1PXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGY9dCgib2JqZWN0LWFzc2lnbiIpLGg9dCgiZ2xzbGlmeSIpLHA9dCgicGljay1ieS1hbGlhcyIpLGQ9dCgidXBkYXRlLWRpZmYiKSxtPXQoImZsYXR0ZW4tdmVydGV4LWRhdGEiKSxnPXQoImlzLWlleHBsb3JlciIpLHY9dCgidG8tZmxvYXQzMiIpLHk9dCgicGFyc2UtcmVjdCIpLHg9YjtmdW5jdGlvbiBiKHQsZSl7dmFyIHI9dGhpcztpZighKHRoaXMgaW5zdGFuY2VvZiBiKSlyZXR1cm4gbmV3IGIodCxlKTsiZnVuY3Rpb24iPT10eXBlb2YgdD8oZXx8KGU9e30pLGUucmVnbD10KTooZT10LHQ9bnVsbCksZSYmZS5sZW5ndGgmJihlLnBvc2l0aW9ucz1lKTt2YXIgbixpPSh0PWUucmVnbCkuX2dsLGE9W107dGhpcy50b29NYW55Q29sb3JzPWcsbj10LnRleHR1cmUoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMTAyMCksd2lkdGg6MjU1LGhlaWdodDoxLHR5cGU6InVpbnQ4Iixmb3JtYXQ6InJnYmEiLHdyYXBTOiJjbGFtcCIsd3JhcFQ6ImNsYW1wIixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9KSxmKHRoaXMse3JlZ2w6dCxnbDppLGdyb3VwczpbXSxtYXJrZXJDYWNoZTpbbnVsbF0sbWFya2VyVGV4dHVyZXM6W251bGxdLHBhbGV0dGU6YSxwYWxldHRlSWRzOnt9LHBhbGV0dGVUZXh0dXJlOm4sbWF4Q29sb3JzOjI1NSxtYXhTaXplOjEwMCxjYW52YXM6aS5jYW52YXN9KSx0aGlzLnVwZGF0ZShlKTt2YXIgbz17dW5pZm9ybXM6e2NvbnN0UG9pbnRTaXplOiEhZS5jb25zdFBvaW50U2l6ZSxvcGFjaXR5OnQucHJvcCgib3BhY2l0eSIpLHBhbGV0dGVTaXplOmZ1bmN0aW9uKHQsZSl7cmV0dXJuW3IudG9vTWFueUNvbG9ycz8wOjI1NSxuLmhlaWdodF19LHBpeGVsUmF0aW86dC5jb250ZXh0KCJwaXhlbFJhdGlvIiksc2NhbGU6dC5wcm9wKCJzY2FsZSIpLHNjYWxlRnJhY3Q6dC5wcm9wKCJzY2FsZUZyYWN0IiksdHJhbnNsYXRlOnQucHJvcCgidHJhbnNsYXRlIiksdHJhbnNsYXRlRnJhY3Q6dC5wcm9wKCJ0cmFuc2xhdGVGcmFjdCIpLG1hcmtlclRleHR1cmU6dC5wcm9wKCJtYXJrZXJUZXh0dXJlIikscGFsZXR0ZVRleHR1cmU6bn0sYXR0cmlidXRlczp7eDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyfHx7YnVmZmVyOmUucG9zaXRpb25CdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUueUF0dHJ8fHtidWZmZXI6ZS5wb3NpdGlvbkJ1ZmZlcixzdHJpZGU6OCxvZmZzZXQ6NH19LHhGcmFjdDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnhBdHRyP3tjb25zdGFudDpbMCwwXX06e2J1ZmZlcjplLnBvc2l0aW9uRnJhY3RCdWZmZXIsc3RyaWRlOjgsb2Zmc2V0OjB9fSx5RnJhY3Q6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS55QXR0cj97Y29uc3RhbnQ6WzAsMF19OntidWZmZXI6ZS5wb3NpdGlvbkZyYWN0QnVmZmVyLHN0cmlkZTo4LG9mZnNldDo0fX0sc2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBlLnNpemUubGVuZ3RoP3tidWZmZXI6ZS5zaXplQnVmZmVyLHN0cmlkZToyLG9mZnNldDowfTp7Y29uc3RhbnQ6W01hdGgucm91bmQoMjU1KmUuc2l6ZS9yLm1heFNpemUpXX19LGJvcmRlclNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ib3JkZXJTaXplLmxlbmd0aD97YnVmZmVyOmUuc2l6ZUJ1ZmZlcixzdHJpZGU6MixvZmZzZXQ6MX06e2NvbnN0YW50OltNYXRoLnJvdW5kKDI1NSplLmJvcmRlclNpemUvci5tYXhTaXplKV19fSxjb2xvcklkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuY29sb3IubGVuZ3RoP3tidWZmZXI6ZS5jb2xvckJ1ZmZlcixzdHJpZGU6ci50b29NYW55Q29sb3JzPzg6NCxvZmZzZXQ6MH06e2NvbnN0YW50OnIudG9vTWFueUNvbG9ycz9hLnNsaWNlKDQqZS5jb2xvciw0KmUuY29sb3IrNCk6W2UuY29sb3JdfX0sYm9yZGVyQ29sb3JJZDpmdW5jdGlvbih0LGUpe3JldHVybiBlLmJvcmRlckNvbG9yLmxlbmd0aD97YnVmZmVyOmUuY29sb3JCdWZmZXIsc3RyaWRlOnIudG9vTWFueUNvbG9ycz84OjQsb2Zmc2V0OnIudG9vTWFueUNvbG9ycz80OjJ9Ontjb25zdGFudDpyLnRvb01hbnlDb2xvcnM/YS5zbGljZSg0KmUuYm9yZGVyQ29sb3IsNCplLmJvcmRlckNvbG9yKzQpOltlLmJvcmRlckNvbG9yXX19LGlzQWN0aXZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuITA9PT1lLmFjdGl2YXRpb24/e2NvbnN0YW50OlsxXX06ZS5hY3RpdmF0aW9uP2UuYWN0aXZhdGlvbjp7Y29uc3RhbnQ6WzBdfX19LGJsZW5kOntlbmFibGU6ITAsY29sb3I6WzAsMCwwLDFdLGZ1bmM6e3NyY1JHQjoic3JjIGFscGhhIixkc3RSR0I6Im9uZSBtaW51cyBzcmMgYWxwaGEiLHNyY0FscGhhOiJvbmUgbWludXMgZHN0IGFscGhhIixkc3RBbHBoYToib25lIn19LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6dC5wcm9wKCJ2aWV3cG9ydCIpfSx2aWV3cG9ydDp0LnByb3AoInZpZXdwb3J0Iiksc3RlbmNpbDp7ZW5hYmxlOiExfSxkZXB0aDp7ZW5hYmxlOiExfSxlbGVtZW50czp0LnByb3AoImVsZW1lbnRzIiksY291bnQ6dC5wcm9wKCJjb3VudCIpLG9mZnNldDp0LnByb3AoIm9mZnNldCIpLHByaW1pdGl2ZToicG9pbnRzIn0scz1mKHt9LG8pO3MuZnJhZz1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xudW5pZm9ybSBzYW1wbGVyMkQgbWFya2VyVGV4dHVyZTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCB4LCBmbG9hdCB5KSB7XG4gIHJldHVybiAxLjAgLyAoMS4wICsgZXhwKDUwLjAqKHggLSB5KSkpO1xufVxuXG52b2lkIG1haW4oKSB7XG4gIGZsb2F0IGRpc3QgPSB0ZXh0dXJlMkQobWFya2VyVGV4dHVyZSwgZ2xfUG9pbnRDb29yZCkuciwgZGVsdGEgPSBmcmFnV2lkdGg7XG5cbiAgLy8gbWF4LWRpc3RhbmNlIGFscGhhXG4gIGlmIChkaXN0IDwgMC4wMDMpIGRpc2NhcmQ7XG5cbiAgLy8gbnVsbC1ib3JkZXIgY2FzZVxuICBpZiAoZnJhZ0JvcmRlckNvbG9yTGV2ZWwgPT0gZnJhZ0NvbG9yTGV2ZWwgfHwgZnJhZ0JvcmRlckNvbG9yLmEgPT0gMC4pIHtcbiAgICBmbG9hdCBjb2xvckFtdCA9IHNtb290aHN0ZXAoLjUgLSBkZWx0YSwgLjUgKyBkZWx0YSwgZGlzdCk7XG4gICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChmcmFnQ29sb3IucmdiLCBjb2xvckFtdCAqIGZyYWdDb2xvci5hICogb3BhY2l0eSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmxvYXQgYm9yZGVyQ29sb3JBbXQgPSBzbW9vdGhzdGVwKGZyYWdCb3JkZXJDb2xvckxldmVsIC0gZGVsdGEsIGZyYWdCb3JkZXJDb2xvckxldmVsICsgZGVsdGEsIGRpc3QpO1xuICAgIGZsb2F0IGNvbG9yQW10ID0gc21vb3Roc3RlcChmcmFnQ29sb3JMZXZlbCAtIGRlbHRhLCBmcmFnQ29sb3JMZXZlbCArIGRlbHRhLCBkaXN0KTtcblxuICAgIHZlYzQgY29sb3IgPSBmcmFnQm9yZGVyQ29sb3I7XG4gICAgY29sb3IuYSAqPSBib3JkZXJDb2xvckFtdDtcbiAgICBjb2xvciA9IG1peChjb2xvciwgZnJhZ0NvbG9yLCBjb2xvckFtdCk7XG4gICAgY29sb3IuYSAqPSBvcGFjaXR5O1xuXG4gICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7XG4gIH1cblxufVxuIl0pLHMudmVydD1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzIgc2NhbGUsIHNjYWxlRnJhY3QsIHRyYW5zbGF0ZSwgdHJhbnNsYXRlRnJhY3QsIHBhbGV0dGVTaXplO1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZVRleHR1cmU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuY29uc3QgZmxvYXQgYm9yZGVyTGV2ZWwgPSAuNTtcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnUG9pbnRTaXplLCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGgsIGZyYWdCb3JkZXJDb2xvckxldmVsLCBmcmFnQ29sb3JMZXZlbDtcblxuZmxvYXQgcG9pbnRTaXplU2NhbGUgPSAoY29uc3RQb2ludFNpemUpID8gMi4gOiBwaXhlbFJhdGlvO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZVRleHR1cmUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IDIuICogc2l6ZSAqIHBvaW50U2l6ZVNjYWxlO1xuICBmcmFnUG9pbnRTaXplID0gc2l6ZSAqIHBpeGVsUmF0aW87XG5cbiAgdmVjMiBwb3MgPSAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVcbiAgICAgICsgKHBvc2l0aW9uRnJhY3QgKyB0cmFuc2xhdGVGcmFjdCkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb24gKyB0cmFuc2xhdGUpICogc2NhbGVGcmFjdFxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlRnJhY3Q7XG5cbiAgZ2xfUG9zaXRpb24gPSB2ZWM0KHBvcyAqIDIuIC0gMS4sIDAuLCAxLik7XG5cbiAgZnJhZ0NvbG9yID0gY29sb3I7XG4gIGZyYWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcblxuICBmcmFnQm9yZGVyQ29sb3JMZXZlbCA9IGNsYW1wKGJvcmRlckxldmVsIC0gYm9yZGVyTGV2ZWwgKiBib3JkZXJTaXplIC8gc2l6ZSwgMC4sIDEuKTtcbiAgZnJhZ0NvbG9yTGV2ZWwgPSBjbGFtcChib3JkZXJMZXZlbCArICgxLiAtIGJvcmRlckxldmVsKSAqIGJvcmRlclNpemUgLyBzaXplLCAwLiwgMS4pO1xufSJdKSx0aGlzLmRyYXdNYXJrZXI9dChzKTt2YXIgbD1mKHt9LG8pO2wuZnJhZz1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvciwgZnJhZ0JvcmRlckNvbG9yO1xudmFyeWluZyBmbG9hdCBmcmFnQm9yZGVyUmFkaXVzLCBmcmFnV2lkdGg7XG5cbnVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcblxuZmxvYXQgc21vb3RoU3RlcChmbG9hdCBlZGdlMCwgZmxvYXQgZWRnZTEsIGZsb2F0IHgpIHtcblx0ZmxvYXQgdDtcblx0dCA9IGNsYW1wKCh4IC0gZWRnZTApIC8gKGVkZ2UxIC0gZWRnZTApLCAwLjAsIDEuMCk7XG5cdHJldHVybiB0ICogdCAqICgzLjAgLSAyLjAgKiB0KTtcbn1cblxudm9pZCBtYWluKCkge1xuXHRmbG9hdCByYWRpdXMsIGFscGhhID0gMS4wLCBkZWx0YSA9IGZyYWdXaWR0aDtcblxuXHRyYWRpdXMgPSBsZW5ndGgoMi4wICogZ2xfUG9pbnRDb29yZC54eSAtIDEuMCk7XG5cblx0aWYgKHJhZGl1cyA+IDEuMCArIGRlbHRhKSB7XG5cdFx0ZGlzY2FyZDtcblx0fVxuXG5cdGFscGhhIC09IHNtb290aHN0ZXAoMS4wIC0gZGVsdGEsIDEuMCArIGRlbHRhLCByYWRpdXMpO1xuXG5cdGZsb2F0IGJvcmRlclJhZGl1cyA9IGZyYWdCb3JkZXJSYWRpdXM7XG5cdGZsb2F0IHJhdGlvID0gc21vb3Roc3RlcChib3JkZXJSYWRpdXMgLSBkZWx0YSwgYm9yZGVyUmFkaXVzICsgZGVsdGEsIHJhZGl1cyk7XG5cdHZlYzQgY29sb3IgPSBtaXgoZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3IsIHJhdGlvKTtcblx0Y29sb3IuYSAqPSBhbHBoYSAqIG9wYWNpdHk7XG5cdGdsX0ZyYWdDb2xvciA9IGNvbG9yO1xufVxuIl0pLGwudmVydD1oKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxuYXR0cmlidXRlIGZsb2F0IHgsIHksIHhGcmFjdCwgeUZyYWN0O1xuYXR0cmlidXRlIGZsb2F0IHNpemUsIGJvcmRlclNpemU7XG5hdHRyaWJ1dGUgdmVjNCBjb2xvcklkLCBib3JkZXJDb2xvcklkO1xuYXR0cmlidXRlIGZsb2F0IGlzQWN0aXZlO1xuXG51bmlmb3JtIGJvb2wgY29uc3RQb2ludFNpemU7XG51bmlmb3JtIGZsb2F0IHBpeGVsUmF0aW87XG51bmlmb3JtIHZlYzIgcGFsZXR0ZVNpemUsIHNjYWxlLCBzY2FsZUZyYWN0LCB0cmFuc2xhdGUsIHRyYW5zbGF0ZUZyYWN0O1xudW5pZm9ybSBzYW1wbGVyMkQgcGFsZXR0ZVRleHR1cmU7XG5cbmNvbnN0IGZsb2F0IG1heFNpemUgPSAxMDAuO1xuXG52YXJ5aW5nIHZlYzQgZnJhZ0NvbG9yLCBmcmFnQm9yZGVyQ29sb3I7XG52YXJ5aW5nIGZsb2F0IGZyYWdCb3JkZXJSYWRpdXMsIGZyYWdXaWR0aDtcblxuZmxvYXQgcG9pbnRTaXplU2NhbGUgPSAoY29uc3RQb2ludFNpemUpID8gMi4gOiBwaXhlbFJhdGlvO1xuXG5ib29sIGlzRGlyZWN0ID0gKHBhbGV0dGVTaXplLnggPCAxLik7XG5cbnZlYzQgZ2V0Q29sb3IodmVjNCBpZCkge1xuICByZXR1cm4gaXNEaXJlY3QgPyBpZCAvIDI1NS4gOiB0ZXh0dXJlMkQocGFsZXR0ZVRleHR1cmUsXG4gICAgdmVjMihcbiAgICAgIChpZC54ICsgLjUpIC8gcGFsZXR0ZVNpemUueCxcbiAgICAgIChpZC55ICsgLjUpIC8gcGFsZXR0ZVNpemUueVxuICAgIClcbiAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAvLyBpZ25vcmUgaW5hY3RpdmUgcG9pbnRzXG4gIGlmIChpc0FjdGl2ZSA9PSAwLikgcmV0dXJuO1xuXG4gIHZlYzIgcG9zaXRpb24gPSB2ZWMyKHgsIHkpO1xuICB2ZWMyIHBvc2l0aW9uRnJhY3QgPSB2ZWMyKHhGcmFjdCwgeUZyYWN0KTtcblxuICB2ZWM0IGNvbG9yID0gZ2V0Q29sb3IoY29sb3JJZCk7XG4gIHZlYzQgYm9yZGVyQ29sb3IgPSBnZXRDb2xvcihib3JkZXJDb2xvcklkKTtcblxuICBmbG9hdCBzaXplID0gc2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuICBmbG9hdCBib3JkZXJTaXplID0gYm9yZGVyU2l6ZSAqIG1heFNpemUgLyAyNTUuO1xuXG4gIGdsX1BvaW50U2l6ZSA9IChzaXplICsgYm9yZGVyU2l6ZSkgKiBwb2ludFNpemVTY2FsZTtcblxuICB2ZWMyIHBvcyA9IChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZVxuICAgICAgKyAocG9zaXRpb25GcmFjdCArIHRyYW5zbGF0ZUZyYWN0KSAqIHNjYWxlXG4gICAgICArIChwb3NpdGlvbiArIHRyYW5zbGF0ZSkgKiBzY2FsZUZyYWN0XG4gICAgICArIChwb3NpdGlvbkZyYWN0ICsgdHJhbnNsYXRlRnJhY3QpICogc2NhbGVGcmFjdDtcblxuICBnbF9Qb3NpdGlvbiA9IHZlYzQocG9zICogMi4gLSAxLiwgMC4sIDEuKTtcblxuICBmcmFnQm9yZGVyUmFkaXVzID0gMS4gLSAyLiAqIGJvcmRlclNpemUgLyAoc2l6ZSArIGJvcmRlclNpemUpO1xuICBmcmFnQ29sb3IgPSBjb2xvcjtcbiAgZnJhZ0JvcmRlckNvbG9yID0gYm9yZGVyQ29sb3IuYSA9PSAwLiB8fCBib3JkZXJTaXplID09IDAuID8gdmVjNChjb2xvci5yZ2IsIDAuKSA6IGJvcmRlckNvbG9yO1xuICBmcmFnV2lkdGggPSAxLiAvIGdsX1BvaW50U2l6ZTtcbn1cbiJdKSxnJiYobC5mcmFnPWwuZnJhZy5yZXBsYWNlKCJzbW9vdGhzdGVwIiwic21vb3RoU3RlcCIpLHMuZnJhZz1zLmZyYWcucmVwbGFjZSgic21vb3Roc3RlcCIsInNtb290aFN0ZXAiKSksdGhpcy5kcmF3Q2lyY2xlPXQobCl9Yi5kZWZhdWx0cz17Y29sb3I6ImJsYWNrIixib3JkZXJDb2xvcjoidHJhbnNwYXJlbnQiLGJvcmRlclNpemU6MCxzaXplOjEyLG9wYWNpdHk6MSxtYXJrZXI6dm9pZCAwLHZpZXdwb3J0Om51bGwscmFuZ2U6bnVsbCxwaXhlbFNpemU6bnVsbCxjb3VudDowLG9mZnNldDowLGJvdW5kczpudWxsLHBvc2l0aW9uczpbXSxzbmFwOjFlNH0sYi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMudXBkYXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLmRyYXcoKSx0aGlzfSxiLnByb3RvdHlwZS5kcmF3PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO3ZhciBpPXRoaXMuZ3JvdXBzO2lmKDE9PT1yLmxlbmd0aCYmQXJyYXkuaXNBcnJheShyWzBdKSYmKG51bGw9PT1yWzBdWzBdfHxBcnJheS5pc0FycmF5KHJbMF1bMF0pKSYmKHI9clswXSksdGhpcy5yZWdsLl9yZWZyZXNoKCksci5sZW5ndGgpZm9yKHZhciBhPTA7YTxyLmxlbmd0aDthKyspdGhpcy5kcmF3SXRlbShhLHJbYV0pO2Vsc2UgaS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe3QuZHJhd0l0ZW0ocil9KSk7cmV0dXJuIHRoaXN9LGIucHJvdG90eXBlLmRyYXdJdGVtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncm91cHMsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2YgZSYmKHQ9ZSxuPXJbZV0sZT1udWxsKSxuJiZuLmNvdW50JiZuLm9wYWNpdHkpe24uYWN0aXZhdGlvblswXSYmdGhpcy5kcmF3Q2lyY2xlKHRoaXMuZ2V0TWFya2VyRHJhd09wdGlvbnMoMCxuLGUpKTtmb3IodmFyIGE9W10sbz0xO288bi5hY3RpdmF0aW9uLmxlbmd0aDtvKyspbi5hY3RpdmF0aW9uW29dJiYoITA9PT1uLmFjdGl2YXRpb25bb118fG4uYWN0aXZhdGlvbltvXS5kYXRhLmxlbmd0aCkmJmEucHVzaC5hcHBseShhLGkodGhpcy5nZXRNYXJrZXJEcmF3T3B0aW9ucyhvLG4sZSkpKTthLmxlbmd0aCYmdGhpcy5kcmF3TWFya2VyKGEpfX0sYi5wcm90b3R5cGUuZ2V0TWFya2VyRHJhd09wdGlvbnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUucmFuZ2UsYT1lLnRyZWUsbz1lLnZpZXdwb3J0LHM9ZS5hY3RpdmF0aW9uLGw9ZS5zZWxlY3Rpb25CdWZmZXIsYz1lLmNvdW50O3RoaXMucmVnbDtpZighYSlyZXR1cm4gcj9bZih7fSxlLHttYXJrZXJUZXh0dXJlOnRoaXMubWFya2VyVGV4dHVyZXNbdF0sYWN0aXZhdGlvbjpzW3RdLGNvdW50OnIubGVuZ3RoLGVsZW1lbnRzOnIsb2Zmc2V0OjB9KV06W2Yoe30sZSx7bWFya2VyVGV4dHVyZTp0aGlzLm1hcmtlclRleHR1cmVzW3RdLGFjdGl2YXRpb246c1t0XSxvZmZzZXQ6MH0pXTt2YXIgdT1bXSxoPWEucmFuZ2UoaSx7bG9kOiEwLHB4OlsoaVsyXS1pWzBdKS9vLndpZHRoLChpWzNdLWlbMV0pL28uaGVpZ2h0XX0pO2lmKHIpe2Zvcih2YXIgcD1zW3RdLmRhdGEsZD1uZXcgVWludDhBcnJheShjKSxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV07ZFtnXT1wP3BbZ106MX1sLnN1YmRhdGEoZCl9Zm9yKHZhciB2PWgubGVuZ3RoO3YtLTspe3ZhciB5PW4oaFt2XSwyKSx4PXlbMF0sYj15WzFdO3UucHVzaChmKHt9LGUse21hcmtlclRleHR1cmU6dGhpcy5tYXJrZXJUZXh0dXJlc1t0XSxhY3RpdmF0aW9uOnI/bDpzW3RdLG9mZnNldDp4LGNvdW50OmIteH0pKX1yZXR1cm4gdX0sYi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2lmKHIubGVuZ3RoKXsxPT09ci5sZW5ndGgmJkFycmF5LmlzQXJyYXkoclswXSkmJihyPXJbMF0pO3ZhciBpPXRoaXMuZ3JvdXBzLGE9dGhpcy5nbCxvPXRoaXMucmVnbCxzPXRoaXMubWF4U2l6ZSxjPXRoaXMubWF4Q29sb3JzLGg9dGhpcy5wYWxldHRlO3RoaXMuZ3JvdXBzPWk9ci5tYXAoKGZ1bmN0aW9uKGUscil7dmFyIG49aVtyXTtpZih2b2lkIDA9PT1lKXJldHVybiBuO251bGw9PT1lP2U9e3Bvc2l0aW9uczpudWxsfToiZnVuY3Rpb24iPT10eXBlb2YgZT9lPXtvbmRyYXc6ZX06Im51bWJlciI9PXR5cGVvZiBlWzBdJiYoZT17cG9zaXRpb25zOmV9KSxudWxsPT09KGU9cChlLHtwb3NpdGlvbnM6InBvc2l0aW9ucyBkYXRhIHBvaW50cyIsc25hcDoic25hcCBjbHVzdGVyIGxvZCB0cmVlIixzaXplOiJzaXplcyBzaXplIHJhZGl1cyIsYm9yZGVyU2l6ZToiYm9yZGVyU2l6ZXMgYm9yZGVyU2l6ZSBib3JkZXItc2l6ZSBib3JkZXJzaXplIGJvcmRlcldpZHRoIGJvcmRlcldpZHRocyBib3JkZXItd2lkdGggYm9yZGVyd2lkdGggc3Ryb2tlLXdpZHRoIHN0cm9rZVdpZHRoIHN0cm9rZXdpZHRoIG91dGxpbmUiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgZGF0YUJveCBkYXRhYm94Iix2aWV3cG9ydDoidmlld3BvcnQgdmlld1BvcnQgdmlld0JveCB2aWV3Ym94IixvcGFjaXR5OiJvcGFjaXR5IGFscGhhIHRyYW5zcGFyZW5jeSIsYm91bmRzOiJib3VuZCBib3VuZHMgYm91bmRhcmllcyBsaW1pdHMiLHRvb01hbnlDb2xvcnM6InRvb01hbnlDb2xvcnMgcGFsZXR0ZSBwYWxldHRlTW9kZSBvcHRpbWl6ZVBhbGV0dGUgZW5hYmxlUGFsZXR0ZSJ9KSkucG9zaXRpb25zJiYoZS5wb3NpdGlvbnM9W10pLG51bGwhPWUudG9vTWFueUNvbG9ycyYmKHQudG9vTWFueUNvbG9ycz1lLnRvb01hbnlDb2xvcnMpLG58fChpW3JdPW49e2lkOnIsc2NhbGU6bnVsbCx0cmFuc2xhdGU6bnVsbCxzY2FsZUZyYWN0Om51bGwsdHJhbnNsYXRlRnJhY3Q6bnVsbCxhY3RpdmF0aW9uOltdLHNlbGVjdGlvbkJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToic3RyZWFtIix0eXBlOiJ1aW50OCJ9KSxzaXplQnVmZmVyOm8uYnVmZmVyKHtkYXRhOm5ldyBVaW50OEFycmF5KDApLHVzYWdlOiJkeW5hbWljIix0eXBlOiJ1aW50OCJ9KSxjb2xvckJ1ZmZlcjpvLmJ1ZmZlcih7ZGF0YTpuZXcgVWludDhBcnJheSgwKSx1c2FnZToiZHluYW1pYyIsdHlwZToidWludDgifSkscG9zaXRpb25CdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pLHBvc2l0aW9uRnJhY3RCdWZmZXI6by5idWZmZXIoe2RhdGE6bmV3IFVpbnQ4QXJyYXkoMCksdXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0In0pfSxlPWYoe30sYi5kZWZhdWx0cyxlKSksZS5wb3NpdGlvbnMmJiEoIm1hcmtlciJpbiBlKSYmKGUubWFya2VyPW4ubWFya2VyLGRlbGV0ZSBuLm1hcmtlciksZS5tYXJrZXImJiEoInBvc2l0aW9ucyJpbiBlKSYmKGUucG9zaXRpb25zPW4ucG9zaXRpb25zLGRlbGV0ZSBuLnBvc2l0aW9ucyk7dmFyIGc9MCx4PTA7aWYoZChuLGUsW3tzbmFwOiEwLHNpemU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9Yi5kZWZhdWx0cy5zaXplKSxnKz10JiZ0Lmxlbmd0aD8xOjAsdH0sYm9yZGVyU2l6ZTpmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD1iLmRlZmF1bHRzLmJvcmRlclNpemUpLGcrPXQmJnQubGVuZ3RoPzE6MCx0fSxvcGFjaXR5OnBhcnNlRmxvYXQsY29sb3I6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gbnVsbD09ZSYmKGU9Yi5kZWZhdWx0cy5jb2xvciksZT10LnVwZGF0ZUNvbG9yKGUpLHgrKyxlfSxib3JkZXJDb2xvcjpmdW5jdGlvbihlLHIpe3JldHVybiBudWxsPT1lJiYoZT1iLmRlZmF1bHRzLmJvcmRlckNvbG9yKSxlPXQudXBkYXRlQ29sb3IoZSkseCsrLGV9LGJvdW5kczpmdW5jdGlvbih0LGUscil7cmV0dXJuInJhbmdlImluIHJ8fChyLnJhbmdlPW51bGwpLHR9LHBvc2l0aW9uczpmdW5jdGlvbih0LGUscil7dmFyIG49ZS5zbmFwLGk9ZS5wb3NpdGlvbkJ1ZmZlcixhPWUucG9zaXRpb25GcmFjdEJ1ZmZlcixzPWUuc2VsZWN0aW9uQnVmZmVyO2lmKHQueHx8dC55KXJldHVybiB0LngubGVuZ3RoP2UueEF0dHI9e2J1ZmZlcjpvLmJ1ZmZlcih0LngpLG9mZnNldDowLHN0cmlkZTo0LGNvdW50OnQueC5sZW5ndGh9OmUueEF0dHI9e2J1ZmZlcjp0LnguYnVmZmVyLG9mZnNldDo0KnQueC5vZmZzZXR8fDAsc3RyaWRlOjQqKHQueC5zdHJpZGV8fDEpLGNvdW50OnQueC5jb3VudH0sdC55Lmxlbmd0aD9lLnlBdHRyPXtidWZmZXI6by5idWZmZXIodC55KSxvZmZzZXQ6MCxzdHJpZGU6NCxjb3VudDp0LnkubGVuZ3RofTplLnlBdHRyPXtidWZmZXI6dC55LmJ1ZmZlcixvZmZzZXQ6NCp0Lnkub2Zmc2V0fHwwLHN0cmlkZTo0Kih0Lnkuc3RyaWRlfHwxKSxjb3VudDp0LnkuY291bnR9LGUuY291bnQ9TWF0aC5tYXgoZS54QXR0ci5jb3VudCxlLnlBdHRyLmNvdW50KSx0O3Q9bSh0LCJmbG9hdDY0Iik7dmFyIGM9ZS5jb3VudD1NYXRoLmZsb29yKHQubGVuZ3RoLzIpLGY9ZS5ib3VuZHM9Yz9sKHQsMik6bnVsbDtpZihyLnJhbmdlfHxlLnJhbmdlfHwoZGVsZXRlIGUucmFuZ2Usci5yYW5nZT1mKSxyLm1hcmtlcnx8ZS5tYXJrZXJ8fChkZWxldGUgZS5tYXJrZXIsci5tYXJrZXI9bnVsbCksbiYmKCEwPT09bnx8Yz5uKT9lLnRyZWU9dSh0LHtib3VuZHM6Zn0pOm4mJm4ubGVuZ3RoJiYoZS50cmVlPW4pLGUudHJlZSl7dmFyIGg9e3ByaW1pdGl2ZToicG9pbnRzIix1c2FnZToic3RhdGljIixkYXRhOmUudHJlZSx0eXBlOiJ1aW50MzIifTtlLmVsZW1lbnRzP2UuZWxlbWVudHMoaCk6ZS5lbGVtZW50cz1vLmVsZW1lbnRzKGgpfXZhciBwPXYuZmxvYXQzMih0KTtyZXR1cm4gaSh7ZGF0YTpwLHVzYWdlOiJkeW5hbWljIn0pLGEoe2RhdGE6di5mcmFjdDMyKHQscCksdXNhZ2U6ImR5bmFtaWMifSkscyh7ZGF0YTpuZXcgVWludDhBcnJheShjKSx0eXBlOiJ1aW50OCIsdXNhZ2U6InN0cmVhbSJ9KSx0fX0se21hcmtlcjpmdW5jdGlvbihlLHIsbil7dmFyIGk9ci5hY3RpdmF0aW9uO2lmKGkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksaS5sZW5ndGg9MCxlJiYibnVtYmVyIiE9dHlwZW9mIGVbMF0pe2Zvcih2YXIgYT1bXSxzPTAsbD1NYXRoLm1pbihlLmxlbmd0aCxyLmNvdW50KTtzPGw7cysrKXt2YXIgYz10LmFkZE1hcmtlcihlW3NdKTthW2NdfHwoYVtjXT1uZXcgVWludDhBcnJheShyLmNvdW50KSksYVtjXVtzXT0xfWZvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSsrKWlmKGFbdV0pe3ZhciBmPXtkYXRhOmFbdV0sdHlwZToidWludDgiLHVzYWdlOiJzdGF0aWMifTtpW3VdP2lbdV0oZik6aVt1XT1vLmJ1ZmZlcihmKSxpW3VdLmRhdGE9YVt1XX19ZWxzZXtpW3QuYWRkTWFya2VyKGUpXT0hMH1yZXR1cm4gZX0scmFuZ2U6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuYm91bmRzO2lmKG4pcmV0dXJuIHR8fCh0PW4pLGUuc2NhbGU9WzEvKHRbMl0tdFswXSksMS8odFszXS10WzFdKV0sZS50cmFuc2xhdGU9Wy10WzBdLC10WzFdXSxlLnNjYWxlRnJhY3Q9di5mcmFjdChlLnNjYWxlKSxlLnRyYW5zbGF0ZUZyYWN0PXYuZnJhY3QoZS50cmFuc2xhdGUpLHR9LHZpZXdwb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB5KHR8fFthLmRyYXdpbmdCdWZmZXJXaWR0aCxhLmRyYXdpbmdCdWZmZXJIZWlnaHRdKX19XSksZyl7dmFyIF89bix3PV8uY291bnQsVD1fLnNpemUsaz1fLmJvcmRlclNpemUsQT1fLnNpemVCdWZmZXIsTT1uZXcgVWludDhBcnJheSgyKncpO2lmKFQubGVuZ3RofHxrLmxlbmd0aClmb3IodmFyIFM9MDtTPHc7UysrKU1bMipTXT1NYXRoLnJvdW5kKDI1NSoobnVsbD09VFtTXT9UOlRbU10pL3MpLE1bMipTKzFdPU1hdGgucm91bmQoMjU1KihudWxsPT1rW1NdP2s6a1tTXSkvcyk7QSh7ZGF0YTpNLHVzYWdlOiJkeW5hbWljIn0pfWlmKHgpe3ZhciBFLEw9bixDPUwuY291bnQsUD1MLmNvbG9yLEk9TC5ib3JkZXJDb2xvcixPPUwuY29sb3JCdWZmZXI7aWYodC50b29NYW55Q29sb3JzKXtpZihQLmxlbmd0aHx8SS5sZW5ndGgpe0U9bmV3IFVpbnQ4QXJyYXkoOCpDKTtmb3IodmFyIHo9MDt6PEM7eisrKXt2YXIgRD1QW3pdO0VbOCp6XT1oWzQqRF0sRVs4KnorMV09aFs0KkQrMV0sRVs4KnorMl09aFs0KkQrMl0sRVs4KnorM109aFs0KkQrM107dmFyIFI9SVt6XTtFWzgqeis0XT1oWzQqUl0sRVs4KnorNV09aFs0KlIrMV0sRVs4KnorNl09aFs0KlIrMl0sRVs4KnorN109aFs0KlIrM119fX1lbHNlIGlmKFAubGVuZ3RofHxJLmxlbmd0aCl7RT1uZXcgVWludDhBcnJheSg0KkMrMik7Zm9yKHZhciBGPTA7RjxDO0YrKyludWxsIT1QW0ZdJiYoRVs0KkZdPVBbRl0lYyxFWzQqRisxXT1NYXRoLmZsb29yKFBbRl0vYykpLG51bGwhPUlbRl0mJihFWzQqRisyXT1JW0ZdJWMsRVs0KkYrM109TWF0aC5mbG9vcihJW0ZdL2MpKX1PKHtkYXRhOkV8fG5ldyBVaW50OEFycmF5KDApLHR5cGU6InVpbnQ4Iix1c2FnZToiZHluYW1pYyJ9KX1yZXR1cm4gbn0pKX19LGIucHJvdG90eXBlLmFkZE1hcmtlcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMubWFya2VyVGV4dHVyZXMsbj10aGlzLnJlZ2wsaT10aGlzLm1hcmtlckNhY2hlLGE9bnVsbD09dD8wOmkuaW5kZXhPZih0KTtpZihhPj0wKXJldHVybiBhO2lmKHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpZT10O2Vsc2V7ZT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCk7Zm9yKHZhciBvPTAscz10Lmxlbmd0aDtvPHM7bysrKWVbb109MjU1KnRbb119dmFyIGw9TWF0aC5mbG9vcihNYXRoLnNxcnQoZS5sZW5ndGgpKTtyZXR1cm4gYT1yLmxlbmd0aCxpLnB1c2godCksci5wdXNoKG4udGV4dHVyZSh7Y2hhbm5lbHM6MSxkYXRhOmUscmFkaXVzOmwsbWFnOiJsaW5lYXIiLG1pbjoibGluZWFyIn0pKSxhfSxiLnByb3RvdHlwZS51cGRhdGVDb2xvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnBhbGV0dGVJZHMscj10aGlzLnBhbGV0dGUsbj10aGlzLm1heENvbG9ycztBcnJheS5pc0FycmF5KHQpfHwodD1bdF0pO3ZhciBpPVtdO2lmKCJudW1iZXIiPT10eXBlb2YgdFswXSl7dmFyIGE9W107aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rPTQpYS5wdXNoKHQuc2xpY2UobyxvKzQpKTtlbHNlIGZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCs9NClhLnB1c2godC5zdWJhcnJheShsLGwrNCkpO3Q9YX1mb3IodmFyIHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGY9dFt1XTtmPXMoZiwidWludDgiKTt2YXIgaD1jKGYsITEpO2lmKG51bGw9PWVbaF0pe3ZhciBwPXIubGVuZ3RoO2VbaF09TWF0aC5mbG9vcihwLzQpLHJbcF09ZlswXSxyW3ArMV09ZlsxXSxyW3ArMl09ZlsyXSxyW3ArM109ZlszXX1pW3VdPWVbaF19cmV0dXJuIXRoaXMudG9vTWFueUNvbG9ycyYmci5sZW5ndGg+NCpuJiYodGhpcy50b29NYW55Q29sb3JzPSEwKSx0aGlzLnVwZGF0ZVBhbGV0dGUociksMT09PWkubGVuZ3RoP2lbMF06aX0sYi5wcm90b3R5cGUudXBkYXRlUGFsZXR0ZT1mdW5jdGlvbih0KXtpZighdGhpcy50b29NYW55Q29sb3JzKXt2YXIgZT10aGlzLm1heENvbG9ycyxyPXRoaXMucGFsZXR0ZVRleHR1cmUsbj1NYXRoLmNlaWwoLjI1KnQubGVuZ3RoL2UpO2lmKG4+MSlmb3IodmFyIGk9LjI1Kih0PXQuc2xpY2UoKSkubGVuZ3RoJWU7aTxuKmU7aSsrKXQucHVzaCgwLDAsMCwwKTtyLmhlaWdodDxuJiZyLnJlc2l6ZShlLG4pLHIuc3ViaW1hZ2Uoe3dpZHRoOk1hdGgubWluKC4yNSp0Lmxlbmd0aCxlKSxoZWlnaHQ6bixkYXRhOnR9LDAsMCl9fSxiLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ3JvdXBzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3Quc2l6ZUJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkJ1ZmZlci5kZXN0cm95KCksdC5wb3NpdGlvbkZyYWN0QnVmZmVyLmRlc3Ryb3koKSx0LmNvbG9yQnVmZmVyLmRlc3Ryb3koKSx0LmFjdGl2YXRpb24uZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksdC5zZWxlY3Rpb25CdWZmZXIuZGVzdHJveSgpLHQuZWxlbWVudHMmJnQuZWxlbWVudHMuZGVzdHJveSgpfSkpLHRoaXMuZ3JvdXBzLmxlbmd0aD0wLHRoaXMucGFsZXR0ZVRleHR1cmUuZGVzdHJveSgpLHRoaXMubWFya2VyVGV4dHVyZXMuZm9yRWFjaCgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuZGVzdHJveSYmdC5kZXN0cm95KCl9KSksdGhpc307dmFyIF89dCgib2JqZWN0LWFzc2lnbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyB4KHQsZSksbj1yLnJlbmRlci5iaW5kKHIpO3JldHVybiBfKG4se3JlbmRlcjpuLHVwZGF0ZTpyLnVwZGF0ZS5iaW5kKHIpLGRyYXc6ci5kcmF3LmJpbmQociksZGVzdHJveTpyLmRlc3Ryb3kuYmluZChyKSxyZWdsOnIucmVnbCxnbDpyLmdsLGNhbnZhczpyLmdsLmNhbnZhcyxncm91cHM6ci5ncm91cHMsbWFya2VyczpyLm1hcmtlckNhY2hlLHBhbGV0dGU6ci5wYWxldHRlfSksbn19LHsiQHBsb3RseS9wb2ludC1jbHVzdGVyIjo1OSwiYXJyYXktYm91bmRzIjo3MiwiY29sb3ItaWQiOjEyNCwiY29sb3Itbm9ybWFsaXplIjoxMjYsImZsYXR0ZW4tdmVydGV4LWRhdGEiOjI0NCxnbHNsaWZ5OjQyNCwiaXMtaWV4cGxvcmVyIjo0MzQsIm9iamVjdC1hc3NpZ24iOjQ2NiwicGFyc2UtcmVjdCI6NDcxLCJwaWNrLWJ5LWFsaWFzIjo0NzUsInRvLWZsb2F0MzIiOjU3MywidXBkYXRlLWRpZmYiOjU5NH1dLDUxNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyZWdsLXNjYXR0ZXIyZCIpLGk9dCgicGljay1ieS1hbGlhcyIpLGE9dCgiYXJyYXktYm91bmRzIiksbz10KCJyYWYiKSxzPXQoImFycmF5LXJhbmdlIiksbD10KCJwYXJzZS1yZWN0IiksYz10KCJmbGF0dGVuLXZlcnRleC1kYXRhIik7ZnVuY3Rpb24gdSh0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0LGUpO3RoaXMudHJhY2VzPVtdLHRoaXMucGFzc2VzPXt9LHRoaXMucmVnbD10LHRoaXMuc2NhdHRlcj1uKHQpLHRoaXMuY2FudmFzPXRoaXMuc2NhdHRlci5jYW52YXN9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKG51bGwhPXQuaWQ/dC5pZDp0KTw8MTZ8KDI1NSZlKTw8OHwyNTUmcn1mdW5jdGlvbiBoKHQsZSxyKXt2YXIgbixpLGEsbyxzPXRbZV0sbD10W3JdO3JldHVybiBzLmxlbmd0aD4yPyhzWzBdLHNbMl0sbj1zWzFdLGk9c1szXSk6cy5sZW5ndGg/KG49c1swXSxpPXNbMV0pOihzLngsbj1zLnkscy54K3Mud2lkdGgsaT1zLnkrcy5oZWlnaHQpLGwubGVuZ3RoPjI/KGE9bFswXSxvPWxbMl0sbFsxXSxsWzNdKTpsLmxlbmd0aD8oYT1sWzBdLG89bFsxXSk6KGE9bC54LGwueSxvPWwueCtsLndpZHRoLGwueStsLmhlaWdodCksW2EsbixvLGldfWZ1bmN0aW9uIHAodCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXJldHVyblt0LHQsdCx0XTtpZigyPT09dC5sZW5ndGgpcmV0dXJuW3RbMF0sdFsxXSx0WzBdLHRbMV1dO3ZhciBlPWwodCk7cmV0dXJuW2UueCxlLnksZS54K2Uud2lkdGgsZS55K2UuaGVpZ2h0XX1lLmV4cG9ydHM9dSx1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9W10sbj1hcmd1bWVudHMubGVuZ3RoO24tLTspcltuXT1hcmd1bWVudHNbbl07cmV0dXJuIHIubGVuZ3RoJiYodD10aGlzKS51cGRhdGUuYXBwbHkodCxyKSx0aGlzLnJlZ2wuYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI/dGhpcy5kcmF3KCk6KHRoaXMuZGlydHk/bnVsbD09dGhpcy5wbGFubmVkJiYodGhpcy5wbGFubmVkPW8oKGZ1bmN0aW9uKCl7ZS5kcmF3KCksZS5kaXJ0eT0hMCxlLnBsYW5uZWQ9bnVsbH0pKSk6KHRoaXMuZHJhdygpLHRoaXMuZGlydHk9ITAsbygoZnVuY3Rpb24oKXtlLmRpcnR5PSExfSkpKSx0aGlzKX0sdS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10scj1hcmd1bWVudHMubGVuZ3RoO3ItLTspZVtyXT1hcmd1bWVudHNbcl07aWYoZS5sZW5ndGgpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXRoaXMudXBkYXRlSXRlbShuLGVbbl0pO3RoaXMudHJhY2VzPXRoaXMudHJhY2VzLmZpbHRlcihCb29sZWFuKTtmb3IodmFyIGk9W10sYT0wLG89MDtvPHRoaXMudHJhY2VzLmxlbmd0aDtvKyspe2Zvcih2YXIgcz10aGlzLnRyYWNlc1tvXSxsPXRoaXMudHJhY2VzW29dLnBhc3NlcyxjPTA7YzxsLmxlbmd0aDtjKyspaS5wdXNoKHRoaXMucGFzc2VzW2xbY11dKTtzLnBhc3NPZmZzZXQ9YSxhKz1zLnBhc3Nlcy5sZW5ndGh9cmV0dXJuKHQ9dGhpcy5zY2F0dGVyKS51cGRhdGUuYXBwbHkodCxpKSx0aGlzfX0sdS5wcm90b3R5cGUudXBkYXRlSXRlbT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucmVnbDtpZihudWxsPT09ZSlyZXR1cm4gdGhpcy50cmFjZXNbdF09bnVsbCx0aGlzO2lmKCFlKXJldHVybiB0aGlzO3ZhciBuLG89aShlLHtkYXRhOiJkYXRhIGl0ZW1zIGNvbHVtbnMgcm93cyB2YWx1ZXMgZGltZW5zaW9ucyBzYW1wbGVzIHgiLHNuYXA6InNuYXAgY2x1c3RlciIsc2l6ZToic2l6ZXMgc2l6ZSByYWRpdXMiLGNvbG9yOiJjb2xvcnMgY29sb3IgZmlsbCBmaWxsLWNvbG9yIGZpbGxDb2xvciIsb3BhY2l0eToib3BhY2l0eSBhbHBoYSB0cmFuc3BhcmVuY3kgb3BhcXVlIixib3JkZXJTaXplOiJib3JkZXJTaXplcyBib3JkZXJTaXplIGJvcmRlci1zaXplIGJvcmRlcnNpemUgYm9yZGVyV2lkdGggYm9yZGVyV2lkdGhzIGJvcmRlci13aWR0aCBib3JkZXJ3aWR0aCBzdHJva2Utd2lkdGggc3Ryb2tlV2lkdGggc3Ryb2tld2lkdGggb3V0bGluZSIsYm9yZGVyQ29sb3I6ImJvcmRlckNvbG9ycyBib3JkZXJDb2xvciBib3JkZXJjb2xvciBzdHJva2Ugc3Ryb2tlLWNvbG9yIHN0cm9rZUNvbG9yIixtYXJrZXI6Im1hcmtlcnMgbWFya2VyIHNoYXBlIixyYW5nZToicmFuZ2UgcmFuZ2VzIGRhdGFib3ggZGF0YUJveCIsdmlld3BvcnQ6InZpZXdwb3J0IHZpZXdCb3ggdmlld2JveCIsZG9tYWluOiJkb21haW4gZG9tYWlucyBhcmVhIGFyZWFzIixwYWRkaW5nOiJwYWQgcGFkZGluZyBwYWRkaW5ncyBwYWRzIG1hcmdpbiBtYXJnaW5zIix0cmFuc3Bvc2U6InRyYW5zcG9zZSB0cmFuc3Bvc2VkIixkaWFnb25hbDoiZGlhZ29uYWwgZGlhZyBzaG93RGlhZ29uYWwiLHVwcGVyOiJ1cHBlciB1cCB0b3AgdXBwZXJoYWxmIHVwcGVySGFsZiBzaG93dXBwZXJoYWxmIHNob3dVcHBlciBzaG93VXBwZXJIYWxmIixsb3dlcjoibG93ZXIgbG93IGJvdHRvbSBsb3dlcmhhbGYgbG93ZXJIYWxmIHNob3dsb3dlcmhhbGYgc2hvd0xvd2VySGFsZiBzaG93TG93ZXIifSkscz10aGlzLnRyYWNlc1t0XXx8KHRoaXMudHJhY2VzW3RdPXtpZDp0LGJ1ZmZlcjpyLmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5fSksY29sb3I6ImJsYWNrIixtYXJrZXI6bnVsbCxzaXplOjEyLGJvcmRlckNvbG9yOiJ0cmFuc3BhcmVudCIsYm9yZGVyU2l6ZToxLHZpZXdwb3J0OmwoW3IuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aCxyLl9nbC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkscGFkZGluZzpbMCwwLDAsMF0sb3BhY2l0eToxLGRpYWdvbmFsOiEwLHVwcGVyOiEwLGxvd2VyOiEwfSk7aWYobnVsbCE9by5jb2xvciYmKHMuY29sb3I9by5jb2xvciksbnVsbCE9by5zaXplJiYocy5zaXplPW8uc2l6ZSksbnVsbCE9by5tYXJrZXImJihzLm1hcmtlcj1vLm1hcmtlciksbnVsbCE9by5ib3JkZXJDb2xvciYmKHMuYm9yZGVyQ29sb3I9by5ib3JkZXJDb2xvciksbnVsbCE9by5ib3JkZXJTaXplJiYocy5ib3JkZXJTaXplPW8uYm9yZGVyU2l6ZSksbnVsbCE9by5vcGFjaXR5JiYocy5vcGFjaXR5PW8ub3BhY2l0eSksby52aWV3cG9ydCYmKHMudmlld3BvcnQ9bChvLnZpZXdwb3J0KSksbnVsbCE9by5kaWFnb25hbCYmKHMuZGlhZ29uYWw9by5kaWFnb25hbCksbnVsbCE9by51cHBlciYmKHMudXBwZXI9by51cHBlciksbnVsbCE9by5sb3dlciYmKHMubG93ZXI9by5sb3dlciksby5kYXRhKXtzLmJ1ZmZlcihjKG8uZGF0YSkpLHMuY29sdW1ucz1vLmRhdGEubGVuZ3RoLHMuY291bnQ9by5kYXRhWzBdLmxlbmd0aCxzLmJvdW5kcz1bXTtmb3IodmFyIHU9MDt1PHMuY29sdW1uczt1Kyspcy5ib3VuZHNbdV09YShvLmRhdGFbdV0sMSl9by5yYW5nZSYmKHMucmFuZ2U9by5yYW5nZSxuPXMucmFuZ2UmJiJudW1iZXIiIT10eXBlb2Ygcy5yYW5nZVswXSksby5kb21haW4mJihzLmRvbWFpbj1vLmRvbWFpbik7dmFyIGQ9ITE7bnVsbCE9by5wYWRkaW5nJiYoQXJyYXkuaXNBcnJheShvLnBhZGRpbmcpJiZvLnBhZGRpbmcubGVuZ3RoPT09cy5jb2x1bW5zJiYibnVtYmVyIj09dHlwZW9mIG8ucGFkZGluZ1tvLnBhZGRpbmcubGVuZ3RoLTFdPyhzLnBhZGRpbmc9by5wYWRkaW5nLm1hcChwKSxkPSEwKTpzLnBhZGRpbmc9cChvLnBhZGRpbmcpKTt2YXIgbT1zLmNvbHVtbnMsZz1zLmNvdW50LHY9cy52aWV3cG9ydC53aWR0aCx5PXMudmlld3BvcnQuaGVpZ2h0LHg9cy52aWV3cG9ydC54LGI9cy52aWV3cG9ydC55LF89di9tLHc9eS9tO3MucGFzc2VzPVtdO2Zvcih2YXIgVD0wO1Q8bTtUKyspZm9yKHZhciBrPTA7azxtO2srKylpZigocy5kaWFnb25hbHx8ayE9PVQpJiYocy51cHBlcnx8IShUPmspKSYmKHMubG93ZXJ8fCEoVDxrKSkpe3ZhciBBPWYocy5pZCxULGspLE09dGhpcy5wYXNzZXNbQV18fCh0aGlzLnBhc3Nlc1tBXT17fSk7aWYoby5kYXRhJiYoby50cmFuc3Bvc2U/TS5wb3NpdGlvbnM9e3g6e2J1ZmZlcjpzLmJ1ZmZlcixvZmZzZXQ6ayxjb3VudDpnLHN0cmlkZTptfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQsY291bnQ6ZyxzdHJpZGU6bX19Ok0ucG9zaXRpb25zPXt4OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OmsqZyxjb3VudDpnfSx5OntidWZmZXI6cy5idWZmZXIsb2Zmc2V0OlQqZyxjb3VudDpnfX0sTS5ib3VuZHM9aChzLmJvdW5kcyxULGspKSxvLmRvbWFpbnx8by52aWV3cG9ydHx8by5kYXRhKXt2YXIgUz1kP2gocy5wYWRkaW5nLFQsayk6cy5wYWRkaW5nO2lmKHMuZG9tYWluKXt2YXIgRT1oKHMuZG9tYWluLFQsayksTD1FWzBdLEM9RVsxXSxQPUVbMl0sST1FWzNdO00udmlld3BvcnQ9W3grTCp2K1NbMF0sYitDKnkrU1sxXSx4K1Aqdi1TWzJdLGIrSSp5LVNbM11dfWVsc2UgTS52aWV3cG9ydD1beCtrKl8rXypTWzBdLGIrVCp3K3cqU1sxXSx4KyhrKzEpKl8tXypTWzJdLGIrKFQrMSkqdy13KlNbM11dfW8uY29sb3ImJihNLmNvbG9yPXMuY29sb3IpLG8uc2l6ZSYmKE0uc2l6ZT1zLnNpemUpLG8ubWFya2VyJiYoTS5tYXJrZXI9cy5tYXJrZXIpLG8uYm9yZGVyU2l6ZSYmKE0uYm9yZGVyU2l6ZT1zLmJvcmRlclNpemUpLG8uYm9yZGVyQ29sb3ImJihNLmJvcmRlckNvbG9yPXMuYm9yZGVyQ29sb3IpLG8ub3BhY2l0eSYmKE0ub3BhY2l0eT1zLm9wYWNpdHkpLG8ucmFuZ2UmJihNLnJhbmdlPW4/aChzLnJhbmdlLFQsayk6cy5yYW5nZXx8TS5ib3VuZHMpLHMucGFzc2VzLnB1c2goQSl9cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLmRyYXc9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bXSxyPWFyZ3VtZW50cy5sZW5ndGg7ci0tOyllW3JdPWFyZ3VtZW50c1tyXTtpZihlLmxlbmd0aCl7Zm9yKHZhciBuPVtdLGk9MDtpPGUubGVuZ3RoO2krKylpZigibnVtYmVyIj09dHlwZW9mIGVbaV0pe3ZhciBhPXRoaXMudHJhY2VzW2VbaV1dLG89YS5wYXNzZXMsbD1hLnBhc3NPZmZzZXQ7bi5wdXNoLmFwcGx5KG4scyhsLGwrby5sZW5ndGgpKX1lbHNlIGlmKGVbaV0ubGVuZ3RoKXt2YXIgYz1lW2ldLHU9dGhpcy50cmFjZXNbaV0sZj11LnBhc3NlcyxoPXUucGFzc09mZnNldDtmPWYubWFwKChmdW5jdGlvbih0LGUpe25baCtlXT1jfSkpfSh0PXRoaXMuc2NhdHRlcikuZHJhdy5hcHBseSh0LG4pfWVsc2UgdGhpcy5zY2F0dGVyLmRyYXcoKTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRyYWNlcy5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmJ1ZmZlciYmdC5idWZmZXIuZGVzdHJveSYmdC5idWZmZXIuZGVzdHJveSgpfSkpLHRoaXMudHJhY2VzPW51bGwsdGhpcy5wYXNzZXM9bnVsbCx0aGlzLnNjYXR0ZXIuZGVzdHJveSgpLHRoaXN9fSx7ImFycmF5LWJvdW5kcyI6NzIsImFycmF5LXJhbmdlIjo3NSwiZmxhdHRlbi12ZXJ0ZXgtZGF0YSI6MjQ0LCJwYXJzZS1yZWN0Ijo0NzEsInBpY2stYnktYWxpYXMiOjQ3NSxyYWY6NTA2LCJyZWdsLXNjYXR0ZXIyZCI6NTE0fV0sNTE2OltmdW5jdGlvbih0LGUscil7IWZ1bmN0aW9uKHQsbil7Im9iamVjdCI9PXR5cGVvZiByJiZ2b2lkIDAhPT1lP2UuZXhwb3J0cz1uKCk6dC5jcmVhdGVSRUdMPW4oKX0odGhpcywoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7dGhpcy5pZD1VKyssdGhpcy50eXBlPXQsdGhpcy5kYXRhPWV9ZnVuY3Rpb24gZSh0KXtyZXR1cm4iWyIrZnVuY3Rpb24gdChlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuW107dmFyIHI9ZS5jaGFyQXQoMCksbj1lLmNoYXJBdChlLmxlbmd0aC0xKTtpZigxPGUubGVuZ3RoJiZyPT09biYmKCciJz09PXJ8fCInIj09PXIpKXJldHVyblsnIicrZS5zdWJzdHIoMSxlLmxlbmd0aC0yKS5yZXBsYWNlKC9cXC9nLCJcXFxcIikucmVwbGFjZSgvIi9nLCdcXCInKSsnIiddO2lmKHI9L1xbKGZhbHNlfHRydWV8bnVsbHxcZCt8J1teJ10qJ3wiW14iXSoiKVxdLy5leGVjKGUpKXJldHVybiB0KGUuc3Vic3RyKDAsci5pbmRleCkpLmNvbmNhdCh0KHJbMV0pKS5jb25jYXQodChlLnN1YnN0cihyLmluZGV4K3JbMF0ubGVuZ3RoKSkpO2lmKDE9PT0ocj1lLnNwbGl0KCIuIikpLmxlbmd0aClyZXR1cm5bJyInK2UucmVwbGFjZSgvXFwvZywiXFxcXCIpLnJlcGxhY2UoLyIvZywnXFwiJykrJyInXTtmb3IoZT1bXSxuPTA7bjxyLmxlbmd0aDsrK24pZT1lLmNvbmNhdCh0KHJbbl0pKTtyZXR1cm4gZX0odCkuam9pbigiXVsiKSsiXSJ9ZnVuY3Rpb24gcih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/dC5zcGxpdCgpOnR9ZnVuY3Rpb24gbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTp0fWZ1bmN0aW9uIGkodCl7dmFyIGUsaSxhLG8scz10fHx7fTt0PXt9O3ZhciBsPVtdLGM9W10sdT0idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdz8xOndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLGY9ITEsaD1mdW5jdGlvbih0KXt9LHA9ZnVuY3Rpb24oKXt9O2lmKCJzdHJpbmciPT10eXBlb2Ygcz9lPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iocyk6Im9iamVjdCI9PXR5cGVvZiBzJiYoInN0cmluZyI9PXR5cGVvZiBzLm5vZGVOYW1lJiYiZnVuY3Rpb24iPT10eXBlb2Ygcy5hcHBlbmRDaGlsZCYmImZ1bmN0aW9uIj09dHlwZW9mIHMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0P2U9czoiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3QXJyYXlzfHwiZnVuY3Rpb24iPT10eXBlb2Ygcy5kcmF3RWxlbWVudHM/YT0obz1zKS5jYW52YXM6KCJnbCJpbiBzP289cy5nbDoiY2FudmFzImluIHM/YT1uKHMuY2FudmFzKToiY29udGFpbmVyImluIHMmJihpPW4ocy5jb250YWluZXIpKSwiYXR0cmlidXRlcyJpbiBzJiYodD1zLmF0dHJpYnV0ZXMpLCJleHRlbnNpb25zImluIHMmJihsPXIocy5leHRlbnNpb25zKSksIm9wdGlvbmFsRXh0ZW5zaW9ucyJpbiBzJiYoYz1yKHMub3B0aW9uYWxFeHRlbnNpb25zKSksIm9uRG9uZSJpbiBzJiYoaD1zLm9uRG9uZSksInByb2ZpbGUiaW4gcyYmKGY9ISFzLnByb2ZpbGUpLCJwaXhlbFJhdGlvImluIHMmJih1PStzLnBpeGVsUmF0aW8pKSksZSYmKCJjYW52YXMiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP2E9ZTppPWUpLCFvKXtpZighYSl7aWYoIShlPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dmFyIGU9d2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQ7dCE9PWRvY3VtZW50LmJvZHkmJihlPShuPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLnJpZ2h0LW4ubGVmdCxuPW4uYm90dG9tLW4udG9wKSxhLndpZHRoPXIqZSxhLmhlaWdodD1yKm59dmFyIGksYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gaihhLnN0eWxlLHtib3JkZXI6MCxtYXJnaW46MCxwYWRkaW5nOjAsdG9wOjAsbGVmdDowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifSksdC5hcHBlbmRDaGlsZChhKSx0PT09ZG9jdW1lbnQuYm9keSYmKGEuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixqKHQuc3R5bGUse21hcmdpbjowLHBhZGRpbmc6MH0pKSx0IT09ZG9jdW1lbnQuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIFJlc2l6ZU9ic2VydmVyPyhpPW5ldyBSZXNpemVPYnNlcnZlcigoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KG4pfSkpKS5vYnNlcnZlKHQpOndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLG4sITEpLG4oKSx7Y2FudmFzOmEsb25EZXN0cm95OmZ1bmN0aW9uKCl7aT9pLmRpc2Nvbm5lY3QoKTp3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIixuKSx0LnJlbW92ZUNoaWxkKGEpfX19KGl8fGRvY3VtZW50LmJvZHksMCx1KSkpcmV0dXJuIG51bGw7YT1lLmNhbnZhcyxwPWUub25EZXN0cm95fXZvaWQgMD09PXQucHJlbXVsdGlwbGllZEFscGhhJiYodC5wcmVtdWx0aXBsaWVkQWxwaGE9ITApLG89ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIpe3RyeXtyZXR1cm4gdC5nZXRDb250ZXh0KHIsZSl9Y2F0Y2godCl7cmV0dXJuIG51bGx9fXJldHVybiByKCJ3ZWJnbCIpfHxyKCJleHBlcmltZW50YWwtd2ViZ2wiKXx8cigid2ViZ2wtZXhwZXJpbWVudGFsIil9KGEsdCl9cmV0dXJuIG8/e2dsOm8sY2FudmFzOmEsY29udGFpbmVyOmksZXh0ZW5zaW9uczpsLG9wdGlvbmFsRXh0ZW5zaW9uczpjLHBpeGVsUmF0aW86dSxwcm9maWxlOmYsb25Eb25lOmgsb25EZXN0cm95OnB9OihwKCksaCgid2ViZ2wgbm90IHN1cHBvcnRlZCwgdHJ5IHVwZ3JhZGluZyB5b3VyIGJyb3dzZXIgb3IgZ3JhcGhpY3MgZHJpdmVycyBodHRwOi8vZ2V0LndlYmdsLm9yZyIpLG51bGwpfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9QXJyYXkodCksbj0wO248dDsrK24pcltuXT1lKG4pO3JldHVybiByfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT0oNjU1MzU8dCk8PDQsZXw9cj0oMjU1PCh0Pj4+PWUpKTw8MywoZXw9cj0oMTU8KHQ+Pj49cikpPDwyKXwocj0oMzwodD4+Pj1yKSk8PDEpfHQ+Pj5yPj4xfWZ1bmN0aW9uIHMoKXtmdW5jdGlvbiB0KHQpe3Q6e2Zvcih2YXIgZT0xNjsyNjg0MzU0NTY+PWU7ZSo9MTYpaWYodDw9ZSl7dD1lO2JyZWFrIHR9dD0wfXJldHVybiAwPChlPXJbbyh0KT4+Ml0pLmxlbmd0aD9lLnBvcCgpOm5ldyBBcnJheUJ1ZmZlcih0KX1mdW5jdGlvbiBlKHQpe3Jbbyh0LmJ5dGVMZW5ndGgpPj4yXS5wdXNoKHQpfXZhciByPWEoOCwoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtyZXR1cm57YWxsb2M6dCxmcmVlOmUsYWxsb2NUeXBlOmZ1bmN0aW9uKGUscil7dmFyIG49bnVsbDtzd2l0Y2goZSl7Y2FzZSA1MTIwOm49bmV3IEludDhBcnJheSh0KHIpLDAscik7YnJlYWs7Y2FzZSA1MTIxOm49bmV3IFVpbnQ4QXJyYXkodChyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMjpuPW5ldyBJbnQxNkFycmF5KHQoMipyKSwwLHIpO2JyZWFrO2Nhc2UgNTEyMzpuPW5ldyBVaW50MTZBcnJheSh0KDIqciksMCxyKTticmVhaztjYXNlIDUxMjQ6bj1uZXcgSW50MzJBcnJheSh0KDQqciksMCxyKTticmVhaztjYXNlIDUxMjU6bj1uZXcgVWludDMyQXJyYXkodCg0KnIpLDAscik7YnJlYWs7Y2FzZSA1MTI2Om49bmV3IEZsb2F0MzJBcnJheSh0KDQqciksMCxyKTticmVhaztkZWZhdWx0OnJldHVybiBudWxsfXJldHVybiBuLmxlbmd0aCE9PXI/bi5zdWJhcnJheSgwLHIpOm59LGZyZWVUeXBlOmZ1bmN0aW9uKHQpe2UodC5idWZmZXIpfX19ZnVuY3Rpb24gbCh0KXtyZXR1cm4hIXQmJiJvYmplY3QiPT10eXBlb2YgdCYmQXJyYXkuaXNBcnJheSh0LnNoYXBlKSYmQXJyYXkuaXNBcnJheSh0LnN0cmlkZSkmJiJudW1iZXIiPT10eXBlb2YgdC5vZmZzZXQmJnQuc2hhcGUubGVuZ3RoPT09dC5zdHJpZGUubGVuZ3RoJiYoQXJyYXkuaXNBcnJheSh0LmRhdGEpfHxXKHQuZGF0YSkpfWZ1bmN0aW9uIGModCxlLHIsbixpLGEpe2Zvcih2YXIgbz0wO288ZTsrK28pZm9yKHZhciBzPXRbb10sbD0wO2w8cjsrK2wpZm9yKHZhciBjPXNbbF0sdT0wO3U8bjsrK3UpaVthKytdPWNbdV19ZnVuY3Rpb24gdSh0KXtyZXR1cm4gMHxKW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KV19ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhLG8pe2Zvcih2YXIgcz0wLGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8bjsrK2MpdFtzKytdPWVbaSpsK2EqYytvXX1mdW5jdGlvbiBwKHQsZSxyLG4pe2Z1bmN0aW9uIGkoZSl7dGhpcy5pZD1jKyssdGhpcy5idWZmZXI9dC5jcmVhdGVCdWZmZXIoKSx0aGlzLnR5cGU9ZSx0aGlzLnVzYWdlPTM1MDQ0LHRoaXMuYnl0ZUxlbmd0aD0wLHRoaXMuZGltZW5zaW9uPTEsdGhpcy5kdHlwZT01MTIxLHRoaXMucGVyc2lzdGVudERhdGE9bnVsbCxyLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBhKGUscixuKXtlLmJ5dGVMZW5ndGg9ci5ieXRlTGVuZ3RoLHQuYnVmZmVyRGF0YShlLnR5cGUscixuKX1mdW5jdGlvbiBvKHQsZSxyLG4saSxvKXtpZih0LnVzYWdlPXIsQXJyYXkuaXNBcnJheShlKSl7aWYodC5kdHlwZT1ufHw1MTI2LDA8ZS5sZW5ndGgpaWYoQXJyYXkuaXNBcnJheShlWzBdKSl7aT10dChlKTtmb3IodmFyIHM9bj0xO3M8aS5sZW5ndGg7KytzKW4qPWlbc107dC5kaW1lbnNpb249bixhKHQsZT0kKGUsaSx0LmR0eXBlKSxyKSxvP3QucGVyc2lzdGVudERhdGE9ZTpHLmZyZWVUeXBlKGUpfWVsc2UibnVtYmVyIj09dHlwZW9mIGVbMF0/KHQuZGltZW5zaW9uPWksZihpPUcuYWxsb2NUeXBlKHQuZHR5cGUsZS5sZW5ndGgpLGUpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSkpOlcoZVswXSkmJih0LmRpbWVuc2lvbj1lWzBdLmxlbmd0aCx0LmR0eXBlPW58fHUoZVswXSl8fDUxMjYsYSh0LGU9JChlLFtlLmxlbmd0aCxlWzBdLmxlbmd0aF0sdC5kdHlwZSksciksbz90LnBlcnNpc3RlbnREYXRhPWU6Ry5mcmVlVHlwZShlKSl9ZWxzZSBpZihXKGUpKXQuZHR5cGU9bnx8dShlKSx0LmRpbWVuc2lvbj1pLGEodCxlLHIpLG8mJih0LnBlcnNpc3RlbnREYXRhPW5ldyBVaW50OEFycmF5KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSkpO2Vsc2UgaWYobChlKSl7aT1lLnNoYXBlO3ZhciBjPWUuc3RyaWRlLHA9KHM9ZS5vZmZzZXQsMCksZD0wLG09MCxnPTA7MT09PWkubGVuZ3RoPyhwPWlbMF0sZD0xLG09Y1swXSxnPTApOjI9PT1pLmxlbmd0aCYmKHA9aVswXSxkPWlbMV0sbT1jWzBdLGc9Y1sxXSksdC5kdHlwZT1ufHx1KGUuZGF0YSl8fDUxMjYsdC5kaW1lbnNpb249ZCxoKGk9Ry5hbGxvY1R5cGUodC5kdHlwZSxwKmQpLGUuZGF0YSxwLGQsbSxnLHMpLGEodCxpLHIpLG8/dC5wZXJzaXN0ZW50RGF0YT1pOkcuZnJlZVR5cGUoaSl9ZWxzZSBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJih0LmR0eXBlPTUxMjEsdC5kaW1lbnNpb249aSxhKHQsZSxyKSxvJiYodC5wZXJzaXN0ZW50RGF0YT1uZXcgVWludDhBcnJheShuZXcgVWludDhBcnJheShlKSkpKX1mdW5jdGlvbiBzKHIpe2UuYnVmZmVyQ291bnQtLSxuKHIpLHQuZGVsZXRlQnVmZmVyKHIuYnVmZmVyKSxyLmJ1ZmZlcj1udWxsLGRlbGV0ZSBwW3IuaWRdfXZhciBjPTAscD17fTtpLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKCl7dC5iaW5kQnVmZmVyKHRoaXMudHlwZSx0aGlzLmJ1ZmZlcil9LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKHRoaXMpfTt2YXIgZD1bXTtyZXR1cm4gci5wcm9maWxlJiYoZS5nZXRUb3RhbEJ1ZmZlclNpemU9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhwKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz1wW2VdLnN0YXRzLnNpemV9KSksdH0pLHtjcmVhdGU6ZnVuY3Rpb24obixhLGMsZCl7ZnVuY3Rpb24gbShlKXt2YXIgbj0zNTA0NCxpPW51bGwsYT0wLHM9MCxjPTE7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSl8fFcoZSl8fGwoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9pPWU6Im51bWJlciI9PXR5cGVvZiBlP2E9MHxlOmUmJigiZGF0YSJpbiBlJiYoaT1lLmRhdGEpLCJ1c2FnZSJpbiBlJiYobj1RW2UudXNhZ2VdKSwidHlwZSJpbiBlJiYocz1LW2UudHlwZV0pLCJkaW1lbnNpb24iaW4gZSYmKGM9MHxlLmRpbWVuc2lvbiksImxlbmd0aCJpbiBlJiYoYT0wfGUubGVuZ3RoKSksZy5iaW5kKCksaT9vKGcsaSxuLHMsYyxkKTooYSYmdC5idWZmZXJEYXRhKGcudHlwZSxhLG4pLGcuZHR5cGU9c3x8NTEyMSxnLnVzYWdlPW4sZy5kaW1lbnNpb249YyxnLmJ5dGVMZW5ndGg9YSksci5wcm9maWxlJiYoZy5zdGF0cy5zaXplPWcuYnl0ZUxlbmd0aCpldFtnLmR0eXBlXSksbX1lLmJ1ZmZlckNvdW50Kys7dmFyIGc9bmV3IGkoYSk7cmV0dXJuIHBbZy5pZF09ZyxjfHxtKG4pLG0uX3JlZ2xUeXBlPSJidWZmZXIiLG0uX2J1ZmZlcj1nLG0uc3ViZGF0YT1mdW5jdGlvbihlLHIpe3ZhciBuLGk9MHwocnx8MCk7aWYoZy5iaW5kKCksVyhlKXx8ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXQuYnVmZmVyU3ViRGF0YShnLnR5cGUsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoZSkpe2lmKDA8ZS5sZW5ndGgpaWYoIm51bWJlciI9PXR5cGVvZiBlWzBdKXt2YXIgYT1HLmFsbG9jVHlwZShnLmR0eXBlLGUubGVuZ3RoKTtmKGEsZSksdC5idWZmZXJTdWJEYXRhKGcudHlwZSxpLGEpLEcuZnJlZVR5cGUoYSl9ZWxzZShBcnJheS5pc0FycmF5KGVbMF0pfHxXKGVbMF0pKSYmKG49dHQoZSksYT0kKGUsbixnLmR0eXBlKSx0LmJ1ZmZlclN1YkRhdGEoZy50eXBlLGksYSksRy5mcmVlVHlwZShhKSl9ZWxzZSBpZihsKGUpKXtuPWUuc2hhcGU7dmFyIG89ZS5zdHJpZGUscz1hPTAsYz0wLHA9MDsxPT09bi5sZW5ndGg/KGE9blswXSxzPTEsYz1vWzBdLHA9MCk6Mj09PW4ubGVuZ3RoJiYoYT1uWzBdLHM9blsxXSxjPW9bMF0scD1vWzFdKSxuPUFycmF5LmlzQXJyYXkoZS5kYXRhKT9nLmR0eXBlOnUoZS5kYXRhKSxoKG49Ry5hbGxvY1R5cGUobixhKnMpLGUuZGF0YSxhLHMsYyxwLGUub2Zmc2V0KSx0LmJ1ZmZlclN1YkRhdGEoZy50eXBlLGksbiksRy5mcmVlVHlwZShuKX1yZXR1cm4gbX0sci5wcm9maWxlJiYobS5zdGF0cz1nLnN0YXRzKSxtLmRlc3Ryb3k9ZnVuY3Rpb24oKXtzKGcpfSxtfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCxlKXt2YXIgcj1kLnBvcCgpO3JldHVybiByfHwocj1uZXcgaSh0KSksci5iaW5kKCksbyhyLGUsMzUwNDAsMCwxLCExKSxyfSxkZXN0cm95U3RyZWFtOmZ1bmN0aW9uKHQpe2QucHVzaCh0KX0sY2xlYXI6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2gocyksZC5mb3JFYWNoKHMpfSxnZXRCdWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuX2J1ZmZlciBpbnN0YW5jZW9mIGk/dC5fYnVmZmVyOm51bGx9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuYnVmZmVyPXQuY3JlYXRlQnVmZmVyKCksdC5iaW5kQnVmZmVyKGUudHlwZSxlLmJ1ZmZlciksdC5idWZmZXJEYXRhKGUudHlwZSxlLnBlcnNpc3RlbnREYXRhfHxlLmJ5dGVMZW5ndGgsZS51c2FnZSl9KSl9LF9pbml0QnVmZmVyOm99fWZ1bmN0aW9uIGQodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXt0aGlzLmlkPWMrKyxzW3RoaXMuaWRdPXRoaXMsdGhpcy5idWZmZXI9dCx0aGlzLnByaW1UeXBlPTQsdGhpcy50eXBlPXRoaXMudmVydENvdW50PTB9ZnVuY3Rpb24gYShuLGksYSxvLHMsYyx1KXt2YXIgZjtpZihuLmJ1ZmZlci5iaW5kKCksaT8oKGY9dSl8fFcoaSkmJighbChpKXx8VyhpLmRhdGEpKXx8KGY9ZS5vZXNfZWxlbWVudF9pbmRleF91aW50PzUxMjU6NTEyMyksci5faW5pdEJ1ZmZlcihuLmJ1ZmZlcixpLGEsZiwzKSk6KHQuYnVmZmVyRGF0YSgzNDk2MyxjLGEpLG4uYnVmZmVyLmR0eXBlPWZ8fDUxMjEsbi5idWZmZXIudXNhZ2U9YSxuLmJ1ZmZlci5kaW1lbnNpb249MyxuLmJ1ZmZlci5ieXRlTGVuZ3RoPWMpLGY9dSwhdSl7c3dpdGNoKG4uYnVmZmVyLmR0eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIwOmY9NTEyMTticmVhaztjYXNlIDUxMjM6Y2FzZSA1MTIyOmY9NTEyMzticmVhaztjYXNlIDUxMjU6Y2FzZSA1MTI0OmY9NTEyNX1uLmJ1ZmZlci5kdHlwZT1mfW4udHlwZT1mLDA+KGk9cykmJihpPW4uYnVmZmVyLmJ5dGVMZW5ndGgsNTEyMz09PWY/aT4+PTE6NTEyNT09PWYmJihpPj49MikpLG4udmVydENvdW50PWksaT1vLDA+byYmKGk9NCwxPT09KG89bi5idWZmZXIuZGltZW5zaW9uKSYmKGk9MCksMj09PW8mJihpPTEpLDM9PT1vJiYoaT00KSksbi5wcmltVHlwZT1pfWZ1bmN0aW9uIG8odCl7bi5lbGVtZW50c0NvdW50LS0sZGVsZXRlIHNbdC5pZF0sdC5idWZmZXIuZGVzdHJveSgpLHQuYnVmZmVyPW51bGx9dmFyIHM9e30sYz0wLHU9e3VpbnQ4OjUxMjEsdWludDE2OjUxMjN9O2Uub2VzX2VsZW1lbnRfaW5kZXhfdWludCYmKHUudWludDMyPTUxMjUpLGkucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt0aGlzLmJ1ZmZlci5iaW5kKCl9O3ZhciBmPVtdO3JldHVybntjcmVhdGU6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBzKHQpe2lmKHQpaWYoIm51bWJlciI9PXR5cGVvZiB0KWModCksZi5wcmltVHlwZT00LGYudmVydENvdW50PTB8dCxmLnR5cGU9NTEyMTtlbHNle3ZhciBlPW51bGwscj0zNTA0NCxuPS0xLGk9LTEsbz0wLGg9MDtBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpP2U9dDooImRhdGEiaW4gdCYmKGU9dC5kYXRhKSwidXNhZ2UiaW4gdCYmKHI9UVt0LnVzYWdlXSksInByaW1pdGl2ZSJpbiB0JiYobj1ydFt0LnByaW1pdGl2ZV0pLCJjb3VudCJpbiB0JiYoaT0wfHQuY291bnQpLCJ0eXBlImluIHQmJihoPXVbdC50eXBlXSksImxlbmd0aCJpbiB0P289MHx0Lmxlbmd0aDoobz1pLDUxMjM9PT1ofHw1MTIyPT09aD9vKj0yOjUxMjUhPT1oJiY1MTI0IT09aHx8KG8qPTQpKSksYShmLGUscixuLGksbyxoKX1lbHNlIGMoKSxmLnByaW1UeXBlPTQsZi52ZXJ0Q291bnQ9MCxmLnR5cGU9NTEyMTtyZXR1cm4gc312YXIgYz1yLmNyZWF0ZShudWxsLDM0OTYzLCEwKSxmPW5ldyBpKGMuX2J1ZmZlcik7cmV0dXJuIG4uZWxlbWVudHNDb3VudCsrLHModCkscy5fcmVnbFR5cGU9ImVsZW1lbnRzIixzLl9lbGVtZW50cz1mLHMuc3ViZGF0YT1mdW5jdGlvbih0LGUpe3JldHVybiBjLnN1YmRhdGEodCxlKSxzfSxzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtvKGYpfSxzfSxjcmVhdGVTdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9Zi5wb3AoKTtyZXR1cm4gZXx8KGU9bmV3IGkoci5jcmVhdGUobnVsbCwzNDk2MywhMCwhMSkuX2J1ZmZlcikpLGEoZSx0LDM1MDQwLC0xLC0xLDAsMCksZX0sZGVzdHJveVN0cmVhbTpmdW5jdGlvbih0KXtmLnB1c2godCl9LGdldEVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll9lbGVtZW50cyBpbnN0YW5jZW9mIGk/dC5fZWxlbWVudHM6bnVsbH0sY2xlYXI6ZnVuY3Rpb24oKXtYKHMpLmZvckVhY2gobyl9fX1mdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1HLmFsbG9jVHlwZSg1MTIzLHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDsrK3IpaWYoaXNOYU4odFtyXSkpZVtyXT02NTUzNTtlbHNlIGlmKDEvMD09PXRbcl0pZVtyXT0zMTc0NDtlbHNlIGlmKC0xLzA9PT10W3JdKWVbcl09NjQ1MTI7ZWxzZXtudFswXT10W3JdO3ZhciBuPShhPWl0WzBdKT4+PjMxPDwxNSxpPShhPDwxPj4+MjQpLTEyNyxhPWE+PjEzJjEwMjM7ZVtyXT0tMjQ+aT9uOi0xND5pP24rKGErMTAyND4+LTE0LWkpOjE1PGk/biszMTc0NDpuKyhpKzE1PDwxMCkrYX1yZXR1cm4gZX1mdW5jdGlvbiBnKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIltvYmplY3QgIit0KyJdIn1mdW5jdGlvbiB5KHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpJiYoMD09PXQubGVuZ3RofHwibnVtYmVyIj09dHlwZW9mIHRbMF0pfWZ1bmN0aW9uIHgodCl7cmV0dXJuISghQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RofHwhZyh0WzBdKSl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIF8odCl7aWYoIXQpcmV0dXJuITE7dmFyIGU9Yih0KTtyZXR1cm4gMDw9ZHQuaW5kZXhPZihlKXx8KHkodCl8fHgodCl8fGwodCkpfWZ1bmN0aW9uIHcodCxlKXszNjE5Mz09PXQudHlwZT8odC5kYXRhPW0oZSksRy5mcmVlVHlwZShlKSk6dC5kYXRhPWV9ZnVuY3Rpb24gVCh0LGUscixuLGksYSl7aWYodD12b2lkIDAhPT1ndFt0XT9ndFt0XTpzdFt0XSptdFtlXSxhJiYodCo9NiksaSl7Zm9yKG49MDsxPD1yOyluKz10KnIqcixyLz0yO3JldHVybiBufXJldHVybiB0KnIqbn1mdW5jdGlvbiBrKHQsZSxyLG4saSxhLG8pe2Z1bmN0aW9uIHMoKXt0aGlzLmZvcm1hdD10aGlzLmludGVybmFsZm9ybWF0PTY0MDgsdGhpcy50eXBlPTUxMjEsdGhpcy5mbGlwWT10aGlzLnByZW11bHRpcGx5QWxwaGE9dGhpcy5jb21wcmVzc2VkPSExLHRoaXMudW5wYWNrQWxpZ25tZW50PTEsdGhpcy5jb2xvclNwYWNlPTM3NDQ0LHRoaXMuY2hhbm5lbHM9dGhpcy5oZWlnaHQ9dGhpcy53aWR0aD0wfWZ1bmN0aW9uIGModCxlKXt0LmludGVybmFsZm9ybWF0PWUuaW50ZXJuYWxmb3JtYXQsdC5mb3JtYXQ9ZS5mb3JtYXQsdC50eXBlPWUudHlwZSx0LmNvbXByZXNzZWQ9ZS5jb21wcmVzc2VkLHQucHJlbXVsdGlwbHlBbHBoYT1lLnByZW11bHRpcGx5QWxwaGEsdC5mbGlwWT1lLmZsaXBZLHQudW5wYWNrQWxpZ25tZW50PWUudW5wYWNrQWxpZ25tZW50LHQuY29sb3JTcGFjZT1lLmNvbG9yU3BhY2UsdC53aWR0aD1lLndpZHRoLHQuaGVpZ2h0PWUuaGVpZ2h0LHQuY2hhbm5lbHM9ZS5jaGFubmVsc31mdW5jdGlvbiB1KHQsZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXsicHJlbXVsdGlwbHlBbHBoYSJpbiBlJiYodC5wcmVtdWx0aXBseUFscGhhPWUucHJlbXVsdGlwbHlBbHBoYSksImZsaXBZImluIGUmJih0LmZsaXBZPWUuZmxpcFkpLCJhbGlnbm1lbnQiaW4gZSYmKHQudW5wYWNrQWxpZ25tZW50PWUuYWxpZ25tZW50KSwiY29sb3JTcGFjZSJpbiBlJiYodC5jb2xvclNwYWNlPUhbZS5jb2xvclNwYWNlXSksInR5cGUiaW4gZSYmKHQudHlwZT1xW2UudHlwZV0pO3ZhciByPXQud2lkdGgsbj10LmhlaWdodCxpPXQuY2hhbm5lbHMsYT0hMTsic2hhcGUiaW4gZT8ocj1lLnNoYXBlWzBdLG49ZS5zaGFwZVsxXSwzPT09ZS5zaGFwZS5sZW5ndGgmJihpPWUuc2hhcGVbMl0sYT0hMCkpOigicmFkaXVzImluIGUmJihyPW49ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYocj1lLndpZHRoKSwiaGVpZ2h0ImluIGUmJihuPWUuaGVpZ2h0KSwiY2hhbm5lbHMiaW4gZSYmKGk9ZS5jaGFubmVscyxhPSEwKSksdC53aWR0aD0wfHIsdC5oZWlnaHQ9MHxuLHQuY2hhbm5lbHM9MHxpLHI9ITEsImZvcm1hdCJpbiBlJiYocj1lLmZvcm1hdCxuPXQuaW50ZXJuYWxmb3JtYXQ9WVtyXSx0LmZvcm1hdD1kdFtuXSxyIGluIHEmJiEoInR5cGUiaW4gZSkmJih0LnR5cGU9cVtyXSksciBpbiBLJiYodC5jb21wcmVzc2VkPSEwKSxyPSEwKSwhYSYmcj90LmNoYW5uZWxzPXN0W3QuZm9ybWF0XTphJiYhciYmdC5jaGFubmVscyE9PW90W3QuZm9ybWF0XSYmKHQuZm9ybWF0PXQuaW50ZXJuYWxmb3JtYXQ9b3RbdC5jaGFubmVsc10pfX1mdW5jdGlvbiBmKGUpe3QucGl4ZWxTdG9yZWkoMzc0NDAsZS5mbGlwWSksdC5waXhlbFN0b3JlaSgzNzQ0MSxlLnByZW11bHRpcGx5QWxwaGEpLHQucGl4ZWxTdG9yZWkoMzc0NDMsZS5jb2xvclNwYWNlKSx0LnBpeGVsU3RvcmVpKDMzMTcsZS51bnBhY2tBbGlnbm1lbnQpfWZ1bmN0aW9uIGgoKXtzLmNhbGwodGhpcyksdGhpcy55T2Zmc2V0PXRoaXMueE9mZnNldD0wLHRoaXMuZGF0YT1udWxsLHRoaXMubmVlZHNGcmVlPSExLHRoaXMuZWxlbWVudD1udWxsLHRoaXMubmVlZHNDb3B5PSExfWZ1bmN0aW9uIHAodCxlKXt2YXIgcj1udWxsO2lmKF8oZSk/cj1lOmUmJih1KHQsZSksIngiaW4gZSYmKHQueE9mZnNldD0wfGUueCksInkiaW4gZSYmKHQueU9mZnNldD0wfGUueSksXyhlLmRhdGEpJiYocj1lLmRhdGEpKSxlLmNvcHkpe3ZhciBuPWkudmlld3BvcnRXaWR0aCxhPWkudmlld3BvcnRIZWlnaHQ7dC53aWR0aD10LndpZHRofHxuLXQueE9mZnNldCx0LmhlaWdodD10LmhlaWdodHx8YS10LnlPZmZzZXQsdC5uZWVkc0NvcHk9ITB9ZWxzZSBpZihyKXtpZihXKHIpKXQuY2hhbm5lbHM9dC5jaGFubmVsc3x8NCx0LmRhdGE9ciwidHlwZSJpbiBlfHw1MTIxIT09dC50eXBlfHwodC50eXBlPTB8SltPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocildKTtlbHNlIGlmKHkocikpe3N3aXRjaCh0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDQsYT0obj1yKS5sZW5ndGgsdC50eXBlKXtjYXNlIDUxMjE6Y2FzZSA1MTIzOmNhc2UgNTEyNTpjYXNlIDUxMjY6KGE9Ry5hbGxvY1R5cGUodC50eXBlLGEpKS5zZXQobiksdC5kYXRhPWE7YnJlYWs7Y2FzZSAzNjE5Mzp0LmRhdGE9bShuKX10LmFsaWdubWVudD0xLHQubmVlZHNGcmVlPSEwfWVsc2UgaWYobChyKSl7bj1yLmRhdGEsQXJyYXkuaXNBcnJheShuKXx8NTEyMSE9PXQudHlwZXx8KHQudHlwZT0wfEpbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pXSk7YT1yLnNoYXBlO3ZhciBvLHMsYyxmLGg9ci5zdHJpZGU7Mz09PWEubGVuZ3RoPyhjPWFbMl0sZj1oWzJdKTpmPWM9MSxvPWFbMF0scz1hWzFdLGE9aFswXSxoPWhbMV0sdC5hbGlnbm1lbnQ9MSx0LndpZHRoPW8sdC5oZWlnaHQ9cyx0LmNoYW5uZWxzPWMsdC5mb3JtYXQ9dC5pbnRlcm5hbGZvcm1hdD1vdFtjXSx0Lm5lZWRzRnJlZT0hMCxvPWYscj1yLm9mZnNldCxjPXQud2lkdGgsZj10LmhlaWdodCxzPXQuY2hhbm5lbHM7Zm9yKHZhciBwPUcuYWxsb2NUeXBlKDM2MTkzPT09dC50eXBlPzUxMjY6dC50eXBlLGMqZipzKSxkPTAsdj0wO3Y8ZjsrK3YpZm9yKHZhciBUPTA7VDxjOysrVClmb3IodmFyIGs9MDtrPHM7KytrKXBbZCsrXT1uW2EqVCtoKnYrbyprK3JdO3codCxwKX1lbHNlIGlmKGIocik9PT1sdHx8YihyKT09PWN0fHxiKHIpPT09dXQpYihyKT09PWx0fHxiKHIpPT09Y3Q/dC5lbGVtZW50PXI6dC5lbGVtZW50PXIuY2FudmFzLHQud2lkdGg9dC5lbGVtZW50LndpZHRoLHQuaGVpZ2h0PXQuZWxlbWVudC5oZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PWZ0KXQuZWxlbWVudD1yLHQud2lkdGg9ci53aWR0aCx0LmhlaWdodD1yLmhlaWdodCx0LmNoYW5uZWxzPTQ7ZWxzZSBpZihiKHIpPT09aHQpdC5lbGVtZW50PXIsdC53aWR0aD1yLm5hdHVyYWxXaWR0aCx0LmhlaWdodD1yLm5hdHVyYWxIZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoYihyKT09PXB0KXQuZWxlbWVudD1yLHQud2lkdGg9ci52aWRlb1dpZHRoLHQuaGVpZ2h0PXIudmlkZW9IZWlnaHQsdC5jaGFubmVscz00O2Vsc2UgaWYoeChyKSl7Zm9yKG49dC53aWR0aHx8clswXS5sZW5ndGgsYT10LmhlaWdodHx8ci5sZW5ndGgsaD10LmNoYW5uZWxzLGg9ZyhyWzBdWzBdKT9ofHxyWzBdWzBdLmxlbmd0aDpofHwxLG89Wi5zaGFwZShyKSxjPTEsZj0wO2Y8by5sZW5ndGg7KytmKWMqPW9bZl07Yz1HLmFsbG9jVHlwZSgzNjE5Mz09PXQudHlwZT81MTI2OnQudHlwZSxjKSxaLmZsYXR0ZW4ocixvLCIiLGMpLHcodCxjKSx0LmFsaWdubWVudD0xLHQud2lkdGg9bix0LmhlaWdodD1hLHQuY2hhbm5lbHM9aCx0LmZvcm1hdD10LmludGVybmFsZm9ybWF0PW90W2hdLHQubmVlZHNGcmVlPSEwfX1lbHNlIHQud2lkdGg9dC53aWR0aHx8MSx0LmhlaWdodD10LmhlaWdodHx8MSx0LmNoYW5uZWxzPXQuY2hhbm5lbHN8fDR9ZnVuY3Rpb24gZChlLHIsaSxhLG8pe3ZhciBzPWUuZWxlbWVudCxsPWUuZGF0YSxjPWUuaW50ZXJuYWxmb3JtYXQsdT1lLmZvcm1hdCxoPWUudHlwZSxwPWUud2lkdGgsZD1lLmhlaWdodDtmKGUpLHM/dC50ZXhTdWJJbWFnZTJEKHIsbyxpLGEsdSxoLHMpOmUuY29tcHJlc3NlZD90LmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHIsbyxpLGEsYyxwLGQsbCk6ZS5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhTdWJJbWFnZTJEKHIsbyxpLGEsZS54T2Zmc2V0LGUueU9mZnNldCxwLGQpKTp0LnRleFN1YkltYWdlMkQocixvLGksYSxwLGQsdSxoLGwpfWZ1bmN0aW9uIHYoKXtyZXR1cm4gbXQucG9wKCl8fG5ldyBofWZ1bmN0aW9uIGsodCl7dC5uZWVkc0ZyZWUmJkcuZnJlZVR5cGUodC5kYXRhKSxoLmNhbGwodCksbXQucHVzaCh0KX1mdW5jdGlvbiBBKCl7cy5jYWxsKHRoaXMpLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mix0aGlzLm1pcG1hc2s9MCx0aGlzLmltYWdlcz1BcnJheSgxNil9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5pbWFnZXNbMF09digpO3QubWlwbWFzaz0xLG4ud2lkdGg9dC53aWR0aD1lLG4uaGVpZ2h0PXQuaGVpZ2h0PXIsbi5jaGFubmVscz10LmNoYW5uZWxzPTR9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPW51bGw7aWYoXyhlKSljKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtlbHNlIGlmKHUodCxlKSxBcnJheS5pc0FycmF5KGUubWlwbWFwKSlmb3IodmFyIG49ZS5taXBtYXAsaT0wO2k8bi5sZW5ndGg7KytpKWMocj10LmltYWdlc1tpXT12KCksdCksci53aWR0aD4+PWksci5oZWlnaHQ+Pj1pLHAocixuW2ldKSx0Lm1pcG1hc2t8PTE8PGk7ZWxzZSBjKHI9dC5pbWFnZXNbMF09digpLHQpLHAocixlKSx0Lm1pcG1hc2s9MTtjKHQsdC5pbWFnZXNbMF0pfWZ1bmN0aW9uIEUoZSxyKXtmb3IodmFyIGk9ZS5pbWFnZXMsYT0wO2E8aS5sZW5ndGgmJmlbYV07KythKXt2YXIgbz1pW2FdLHM9cixsPWEsYz1vLmVsZW1lbnQsdT1vLmRhdGEsaD1vLmludGVybmFsZm9ybWF0LHA9by5mb3JtYXQsZD1vLnR5cGUsbT1vLndpZHRoLGc9by5oZWlnaHQ7ZihvKSxjP3QudGV4SW1hZ2UyRChzLGwscCxwLGQsYyk6by5jb21wcmVzc2VkP3QuY29tcHJlc3NlZFRleEltYWdlMkQocyxsLGgsbSxnLDAsdSk6by5uZWVkc0NvcHk/KG4oKSx0LmNvcHlUZXhJbWFnZTJEKHMsbCxwLG8ueE9mZnNldCxvLnlPZmZzZXQsbSxnLDApKTp0LnRleEltYWdlMkQocyxsLHAsbSxnLDAscCxkLHV8fG51bGwpfX1mdW5jdGlvbiBMKCl7dmFyIHQ9Z3QucG9wKCl8fG5ldyBBO3MuY2FsbCh0KTtmb3IodmFyIGU9dC5taXBtYXNrPTA7MTY+ZTsrK2UpdC5pbWFnZXNbZV09bnVsbDtyZXR1cm4gdH1mdW5jdGlvbiBDKHQpe2Zvcih2YXIgZT10LmltYWdlcyxyPTA7cjxlLmxlbmd0aDsrK3IpZVtyXSYmayhlW3JdKSxlW3JdPW51bGw7Z3QucHVzaCh0KX1mdW5jdGlvbiBQKCl7dGhpcy5tYWdGaWx0ZXI9dGhpcy5taW5GaWx0ZXI9OTcyOCx0aGlzLndyYXBUPXRoaXMud3JhcFM9MzMwNzEsdGhpcy5hbmlzb3Ryb3BpYz0xLHRoaXMuZ2VuTWlwbWFwcz0hMSx0aGlzLm1pcG1hcEhpbnQ9NDM1Mn1mdW5jdGlvbiBJKHQsZSl7Im1pbiJpbiBlJiYodC5taW5GaWx0ZXI9VltlLm1pbl0sMDw9YXQuaW5kZXhPZih0Lm1pbkZpbHRlcikmJiEoImZhY2VzImluIGUpJiYodC5nZW5NaXBtYXBzPSEwKSksIm1hZyJpbiBlJiYodC5tYWdGaWx0ZXI9VVtlLm1hZ10pO3ZhciByPXQud3JhcFMsbj10LndyYXBUO2lmKCJ3cmFwImluIGUpe3ZhciBpPWUud3JhcDsic3RyaW5nIj09dHlwZW9mIGk/cj1uPU5baV06QXJyYXkuaXNBcnJheShpKSYmKHI9TltpWzBdXSxuPU5baVsxXV0pfWVsc2Uid3JhcFMiaW4gZSYmKHI9TltlLndyYXBTXSksIndyYXBUImluIGUmJihuPU5bZS53cmFwVF0pO2lmKHQud3JhcFM9cix0LndyYXBUPW4sImFuaXNvdHJvcGljImluIGUmJih0LmFuaXNvdHJvcGljPWUuYW5pc290cm9waWMpLCJtaXBtYXAiaW4gZSl7c3dpdGNoKHI9ITEsdHlwZW9mIGUubWlwbWFwKXtjYXNlInN0cmluZyI6dC5taXBtYXBIaW50PUJbZS5taXBtYXBdLHI9dC5nZW5NaXBtYXBzPSEwO2JyZWFrO2Nhc2UiYm9vbGVhbiI6cj10Lmdlbk1pcG1hcHM9ZS5taXBtYXA7YnJlYWs7Y2FzZSJvYmplY3QiOnQuZ2VuTWlwbWFwcz0hMSxyPSEwfSFyfHwibWluImluIGV8fCh0Lm1pbkZpbHRlcj05OTg0KX19ZnVuY3Rpb24gTyhyLG4pe3QudGV4UGFyYW1ldGVyaShuLDEwMjQxLHIubWluRmlsdGVyKSx0LnRleFBhcmFtZXRlcmkobiwxMDI0MCxyLm1hZ0ZpbHRlciksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDIsci53cmFwUyksdC50ZXhQYXJhbWV0ZXJpKG4sMTAyNDMsci53cmFwVCksZS5leHRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMmJnQudGV4UGFyYW1ldGVyaShuLDM0MDQ2LHIuYW5pc290cm9waWMpLHIuZ2VuTWlwbWFwcyYmKHQuaGludCgzMzE3MCxyLm1pcG1hcEhpbnQpLHQuZ2VuZXJhdGVNaXBtYXAobikpfWZ1bmN0aW9uIHooZSl7cy5jYWxsKHRoaXMpLHRoaXMubWlwbWFzaz0wLHRoaXMuaW50ZXJuYWxmb3JtYXQ9NjQwOCx0aGlzLmlkPXZ0KyssdGhpcy5yZWZDb3VudD0xLHRoaXMudGFyZ2V0PWUsdGhpcy50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHRoaXMudW5pdD0tMSx0aGlzLmJpbmRDb3VudD0wLHRoaXMudGV4SW5mbz1uZXcgUCxvLnByb2ZpbGUmJih0aGlzLnN0YXRzPXtzaXplOjB9KX1mdW5jdGlvbiBEKGUpe3QuYWN0aXZlVGV4dHVyZSgzMzk4NCksdC5iaW5kVGV4dHVyZShlLnRhcmdldCxlLnRleHR1cmUpfWZ1bmN0aW9uIFIoKXt2YXIgZT1idFswXTtlP3QuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTp0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCl9ZnVuY3Rpb24gRihlKXt2YXIgcj1lLnRleHR1cmUsbj1lLnVuaXQsaT1lLnRhcmdldDswPD1uJiYodC5hY3RpdmVUZXh0dXJlKDMzOTg0K24pLHQuYmluZFRleHR1cmUoaSxudWxsKSxidFtuXT1udWxsKSx0LmRlbGV0ZVRleHR1cmUociksZS50ZXh0dXJlPW51bGwsZS5wYXJhbXM9bnVsbCxlLnBpeGVscz1udWxsLGUucmVmQ291bnQ9MCxkZWxldGUgeXRbZS5pZF0sYS50ZXh0dXJlQ291bnQtLX12YXIgQj17ImRvbid0IGNhcmUiOjQzNTIsImRvbnQgY2FyZSI6NDM1MixuaWNlOjQzNTQsZmFzdDo0MzUzfSxOPXtyZXBlYXQ6MTA0OTcsY2xhbXA6MzMwNzEsbWlycm9yOjMzNjQ4fSxVPXtuZWFyZXN0Ojk3MjgsbGluZWFyOjk3Mjl9LFY9aih7bWlwbWFwOjk5ODcsIm5lYXJlc3QgbWlwbWFwIG5lYXJlc3QiOjk5ODQsImxpbmVhciBtaXBtYXAgbmVhcmVzdCI6OTk4NSwibmVhcmVzdCBtaXBtYXAgbGluZWFyIjo5OTg2LCJsaW5lYXIgbWlwbWFwIGxpbmVhciI6OTk4N30sVSksSD17bm9uZTowLGJyb3dzZXI6Mzc0NDR9LHE9e3VpbnQ4OjUxMjEscmdiYTQ6MzI4MTkscmdiNTY1OjMzNjM1LCJyZ2I1IGExIjozMjgyMH0sWT17YWxwaGE6NjQwNixsdW1pbmFuY2U6NjQwOSwibHVtaW5hbmNlIGFscGhhIjo2NDEwLHJnYjo2NDA3LHJnYmE6NjQwOCxyZ2JhNDozMjg1NCwicmdiNSBhMSI6MzI4NTUscmdiNTY1OjM2MTk0fSxLPXt9O2UuZXh0X3NyZ2ImJihZLnNyZ2I9MzU5MDQsWS5zcmdiYT0zNTkwNiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmKHEuZmxvYXQzMj1xLmZsb2F0PTUxMjYpLGUub2VzX3RleHR1cmVfaGFsZl9mbG9hdCYmKHEuZmxvYXQxNj1xWyJoYWxmIGZsb2F0Il09MzYxOTMpLGUud2ViZ2xfZGVwdGhfdGV4dHVyZSYmKGooWSx7ZGVwdGg6NjQwMiwiZGVwdGggc3RlbmNpbCI6MzQwNDF9KSxqKHEse3VpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LCJkZXB0aCBzdGVuY2lsIjozNDA0Mn0pKSxlLndlYmdsX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjJiZqKEsseyJyZ2IgczN0YyBkeHQxIjozMzc3NiwicmdiYSBzM3RjIGR4dDEiOjMzNzc3LCJyZ2JhIHMzdGMgZHh0MyI6MzM3NzgsInJnYmEgczN0YyBkeHQ1IjozMzc3OX0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyYmaihLLHsicmdiIGF0YyI6MzU5ODYsInJnYmEgYXRjIGV4cGxpY2l0IGFscGhhIjozNTk4NywicmdiYSBhdGMgaW50ZXJwb2xhdGVkIGFscGhhIjozNDc5OH0pLGUud2ViZ2xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjJiZqKEsseyJyZ2IgcHZydGMgNGJwcHYxIjozNTg0MCwicmdiIHB2cnRjIDJicHB2MSI6MzU4NDEsInJnYmEgcHZydGMgNGJwcHYxIjozNTg0MiwicmdiYSBwdnJ0YyAyYnBwdjEiOjM1ODQzfSksZS53ZWJnbF9jb21wcmVzc2VkX3RleHR1cmVfZXRjMSYmKEtbInJnYiBldGMxIl09MzYxOTYpO3ZhciBRPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQuZ2V0UGFyYW1ldGVyKDM0NDY3KSk7T2JqZWN0LmtleXMoSykuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9S1t0XTswPD1RLmluZGV4T2YoZSkmJihZW3RdPWUpfSkpO3ZhciAkPU9iamVjdC5rZXlzKFkpO3IudGV4dHVyZUZvcm1hdHM9JDt2YXIgdHQ9W107T2JqZWN0LmtleXMoWSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7dHRbWVt0XV09dH0pKTt2YXIgZXQ9W107T2JqZWN0LmtleXMocSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZXRbcVt0XV09dH0pKTt2YXIgcnQ9W107T2JqZWN0LmtleXMoVSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7cnRbVVt0XV09dH0pKTt2YXIgbnQ9W107T2JqZWN0LmtleXMoVikuZm9yRWFjaCgoZnVuY3Rpb24odCl7bnRbVlt0XV09dH0pKTt2YXIgaXQ9W107T2JqZWN0LmtleXMoTikuZm9yRWFjaCgoZnVuY3Rpb24odCl7aXRbTlt0XV09dH0pKTt2YXIgZHQ9JC5yZWR1Y2UoKGZ1bmN0aW9uKHQscil7dmFyIG49WVtyXTtyZXR1cm4gNjQwOT09PW58fDY0MDY9PT1ufHw2NDA5PT09bnx8NjQxMD09PW58fDY0MDI9PT1ufHwzNDA0MT09PW58fGUuZXh0X3NyZ2ImJigzNTkwND09PW58fDM1OTA2PT09bik/dFtuXT1uOjMyODU1PT09bnx8MDw9ci5pbmRleE9mKCJyZ2JhIik/dFtuXT02NDA4OnRbbl09NjQwNyx0fSkse30pLG10PVtdLGd0PVtdLHZ0PTAseXQ9e30seHQ9ci5tYXhUZXh0dXJlVW5pdHMsYnQ9QXJyYXkoeHQpLm1hcCgoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pKTtyZXR1cm4gaih6LnByb3RvdHlwZSx7YmluZDpmdW5jdGlvbigpe3RoaXMuYmluZENvdW50Kz0xO3ZhciBlPXRoaXMudW5pdDtpZigwPmUpe2Zvcih2YXIgcj0wO3I8eHQ7KytyKXt2YXIgbj1idFtyXTtpZihuKXtpZigwPG4uYmluZENvdW50KWNvbnRpbnVlO24udW5pdD0tMX1idFtyXT10aGlzLGU9cjticmVha31vLnByb2ZpbGUmJmEubWF4VGV4dHVyZVVuaXRzPGUrMSYmKGEubWF4VGV4dHVyZVVuaXRzPWUrMSksdGhpcy51bml0PWUsdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUodGhpcy50YXJnZXQsdGhpcy50ZXh0dXJlKX1yZXR1cm4gZX0sdW5iaW5kOmZ1bmN0aW9uKCl7LS10aGlzLmJpbmRDb3VudH0sZGVjUmVmOmZ1bmN0aW9uKCl7MD49LS10aGlzLnJlZkNvdW50JiZGKHRoaXMpfX0pLG8ucHJvZmlsZSYmKGEuZ2V0VG90YWxUZXh0dXJlU2l6ZT1mdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIE9iamVjdC5rZXlzKHl0KS5mb3JFYWNoKChmdW5jdGlvbihlKXt0Kz15dFtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlMkQ6ZnVuY3Rpb24oZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHI9aS50ZXhJbmZvO1AuY2FsbChyKTt2YXIgYT1MKCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P00oYSwwfHQsIm51bWJlciI9PXR5cGVvZiBlPzB8ZTowfHQpOnQ/KEkocix0KSxTKGEsdCkpOk0oYSwxLDEpLHIuZ2VuTWlwbWFwcyYmKGEubWlwbWFzaz0oYS53aWR0aDw8MSktMSksaS5taXBtYXNrPWEubWlwbWFzayxjKGksYSksaS5pbnRlcm5hbGZvcm1hdD1hLmludGVybmFsZm9ybWF0LG4ud2lkdGg9YS53aWR0aCxuLmhlaWdodD1hLmhlaWdodCxEKGkpLEUoYSwzNTUzKSxPKHIsMzU1MyksUigpLEMoYSksby5wcm9maWxlJiYoaS5zdGF0cy5zaXplPVQoaS5pbnRlcm5hbGZvcm1hdCxpLnR5cGUsYS53aWR0aCxhLmhlaWdodCxyLmdlbk1pcG1hcHMsITEpKSxuLmZvcm1hdD10dFtpLmludGVybmFsZm9ybWF0XSxuLnR5cGU9ZXRbaS50eXBlXSxuLm1hZz1ydFtyLm1hZ0ZpbHRlcl0sbi5taW49bnRbci5taW5GaWx0ZXJdLG4ud3JhcFM9aXRbci53cmFwU10sbi53cmFwVD1pdFtyLndyYXBUXSxufXZhciBpPW5ldyB6KDM1NTMpO3JldHVybiB5dFtpLmlkXT1pLGEudGV4dHVyZUNvdW50KyssbihlLHIpLG4uc3ViaW1hZ2U9ZnVuY3Rpb24odCxlLHIsYSl7ZXw9MCxyfD0wLGF8PTA7dmFyIG89digpO3JldHVybiBjKG8saSksby53aWR0aD0wLG8uaGVpZ2h0PTAscChvLHQpLG8ud2lkdGg9by53aWR0aHx8KGkud2lkdGg+PmEpLWUsby5oZWlnaHQ9by5oZWlnaHR8fChpLmhlaWdodD4+YSktcixEKGkpLGQobywzNTUzLGUscixhKSxSKCksayhvKSxufSxuLnJlc2l6ZT1mdW5jdGlvbihlLHIpe3ZhciBhPTB8ZSxzPTB8cnx8YTtpZihhPT09aS53aWR0aCYmcz09PWkuaGVpZ2h0KXJldHVybiBuO24ud2lkdGg9aS53aWR0aD1hLG4uaGVpZ2h0PWkuaGVpZ2h0PXMsRChpKTtmb3IodmFyIGw9MDtpLm1pcG1hc2s+Pmw7KytsKXt2YXIgYz1hPj5sLHU9cz4+bDtpZighY3x8IXUpYnJlYWs7dC50ZXhJbWFnZTJEKDM1NTMsbCxpLmZvcm1hdCxjLHUsMCxpLmZvcm1hdCxpLnR5cGUsbnVsbCl9cmV0dXJuIFIoKSxvLnByb2ZpbGUmJihpLnN0YXRzLnNpemU9VChpLmludGVybmFsZm9ybWF0LGkudHlwZSxhLHMsITEsITEpKSxufSxuLl9yZWdsVHlwZT0idGV4dHVyZTJkIixuLl90ZXh0dXJlPWksby5wcm9maWxlJiYobi5zdGF0cz1pLnN0YXRzKSxuLmRlc3Ryb3k9ZnVuY3Rpb24oKXtpLmRlY1JlZigpfSxufSxjcmVhdGVDdWJlOmZ1bmN0aW9uKGUscixuLGkscyxsKXtmdW5jdGlvbiBmKHQsZSxyLG4saSxhKXt2YXIgcyxsPWgudGV4SW5mbztmb3IoUC5jYWxsKGwpLHM9MDs2PnM7KytzKW1bc109TCgpO2lmKCJudW1iZXIiIT10eXBlb2YgdCYmdCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0KWlmKGUpUyhtWzBdLHQpLFMobVsxXSxlKSxTKG1bMl0sciksUyhtWzNdLG4pLFMobVs0XSxpKSxTKG1bNV0sYSk7ZWxzZSBpZihJKGwsdCksdShoLHQpLCJmYWNlcyJpbiB0KWZvcih0PXQuZmFjZXMscz0wOzY+czsrK3MpYyhtW3NdLGgpLFMobVtzXSx0W3NdKTtlbHNlIGZvcihzPTA7Nj5zOysrcylTKG1bc10sdCl9ZWxzZSBmb3IodD0wfHR8fDEscz0wOzY+czsrK3MpTShtW3NdLHQsdCk7Zm9yKGMoaCxtWzBdKSxoLm1pcG1hc2s9bC5nZW5NaXBtYXBzPyhtWzBdLndpZHRoPDwxKS0xOm1bMF0ubWlwbWFzayxoLmludGVybmFsZm9ybWF0PW1bMF0uaW50ZXJuYWxmb3JtYXQsZi53aWR0aD1tWzBdLndpZHRoLGYuaGVpZ2h0PW1bMF0uaGVpZ2h0LEQoaCkscz0wOzY+czsrK3MpRShtW3NdLDM0MDY5K3MpO2ZvcihPKGwsMzQwNjcpLFIoKSxvLnByb2ZpbGUmJihoLnN0YXRzLnNpemU9VChoLmludGVybmFsZm9ybWF0LGgudHlwZSxmLndpZHRoLGYuaGVpZ2h0LGwuZ2VuTWlwbWFwcywhMCkpLGYuZm9ybWF0PXR0W2guaW50ZXJuYWxmb3JtYXRdLGYudHlwZT1ldFtoLnR5cGVdLGYubWFnPXJ0W2wubWFnRmlsdGVyXSxmLm1pbj1udFtsLm1pbkZpbHRlcl0sZi53cmFwUz1pdFtsLndyYXBTXSxmLndyYXBUPWl0W2wud3JhcFRdLHM9MDs2PnM7KytzKUMobVtzXSk7cmV0dXJuIGZ9dmFyIGg9bmV3IHooMzQwNjcpO3l0W2guaWRdPWgsYS5jdWJlQ291bnQrKzt2YXIgbT1BcnJheSg2KTtyZXR1cm4gZihlLHIsbixpLHMsbCksZi5zdWJpbWFnZT1mdW5jdGlvbih0LGUscixuLGkpe3J8PTAsbnw9MCxpfD0wO3ZhciBhPXYoKTtyZXR1cm4gYyhhLGgpLGEud2lkdGg9MCxhLmhlaWdodD0wLHAoYSxlKSxhLndpZHRoPWEud2lkdGh8fChoLndpZHRoPj5pKS1yLGEuaGVpZ2h0PWEuaGVpZ2h0fHwoaC5oZWlnaHQ+PmkpLW4sRChoKSxkKGEsMzQwNjkrdCxyLG4saSksUigpLGsoYSksZn0sZi5yZXNpemU9ZnVuY3Rpb24oZSl7aWYoKGV8PTApIT09aC53aWR0aCl7Zi53aWR0aD1oLndpZHRoPWUsZi5oZWlnaHQ9aC5oZWlnaHQ9ZSxEKGgpO2Zvcih2YXIgcj0wOzY+cjsrK3IpZm9yKHZhciBuPTA7aC5taXBtYXNrPj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrcixuLGguZm9ybWF0LGU+Pm4sZT4+biwwLGguZm9ybWF0LGgudHlwZSxudWxsKTtyZXR1cm4gUigpLG8ucHJvZmlsZSYmKGguc3RhdHMuc2l6ZT1UKGguaW50ZXJuYWxmb3JtYXQsaC50eXBlLGYud2lkdGgsZi5oZWlnaHQsITEsITApKSxmfX0sZi5fcmVnbFR5cGU9InRleHR1cmVDdWJlIixmLl90ZXh0dXJlPWgsby5wcm9maWxlJiYoZi5zdGF0cz1oLnN0YXRzKSxmLmRlc3Ryb3k9ZnVuY3Rpb24oKXtoLmRlY1JlZigpfSxmfSxjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXQuYWN0aXZlVGV4dHVyZSgzMzk4NCtlKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksYnRbZV09bnVsbDtYKHl0KS5mb3JFYWNoKEYpLGEuY3ViZUNvdW50PTAsYS50ZXh0dXJlQ291bnQ9MH0sZ2V0VGV4dHVyZTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXt2YXIgcj1idFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEsYnRbZV09bnVsbCl9WCh5dCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS50ZXh0dXJlPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoZS50YXJnZXQsZS50ZXh0dXJlKTtmb3IodmFyIHI9MDszMj5yOysrcilpZigwIT0oZS5taXBtYXNrJjE8PHIpKWlmKDM1NTM9PT1lLnRhcmdldCl0LnRleEltYWdlMkQoMzU1MyxyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO2Vsc2UgZm9yKHZhciBuPTA7Nj5uOysrbil0LnRleEltYWdlMkQoMzQwNjkrbixyLGUuaW50ZXJuYWxmb3JtYXQsZS53aWR0aD4+cixlLmhlaWdodD4+ciwwLGUuaW50ZXJuYWxmb3JtYXQsZS50eXBlLG51bGwpO08oZS50ZXhJbmZvLGUudGFyZ2V0KX0pKX0scmVmcmVzaDpmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8eHQ7KytlKXt2YXIgcj1idFtlXTtyJiYoci5iaW5kQ291bnQ9MCxyLnVuaXQ9LTEsYnRbZV09bnVsbCksdC5hY3RpdmVUZXh0dXJlKDMzOTg0K2UpLHQuYmluZFRleHR1cmUoMzU1MyxudWxsKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpfX19fWZ1bmN0aW9uIEEodCxlLHIsbixpLGEpe2Z1bmN0aW9uIG8odCxlLHIpe3RoaXMudGFyZ2V0PXQsdGhpcy50ZXh0dXJlPWUsdGhpcy5yZW5kZXJidWZmZXI9cjt2YXIgbj10PTA7ZT8odD1lLndpZHRoLG49ZS5oZWlnaHQpOnImJih0PXIud2lkdGgsbj1yLmhlaWdodCksdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW59ZnVuY3Rpb24gcyh0KXt0JiYodC50ZXh0dXJlJiZ0LnRleHR1cmUuX3RleHR1cmUuZGVjUmVmKCksdC5yZW5kZXJidWZmZXImJnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIuZGVjUmVmKCkpfWZ1bmN0aW9uIGwodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLl90ZXh0dXJlLnJlZkNvdW50Kz0xOnQucmVuZGVyYnVmZmVyLl9yZW5kZXJidWZmZXIucmVmQ291bnQrPTEpfWZ1bmN0aW9uIGMoZSxyKXtyJiYoci50ZXh0dXJlP3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsZSxyLnRhcmdldCxyLnRleHR1cmUuX3RleHR1cmUudGV4dHVyZSwwKTp0LmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKDM2MTYwLGUsMzYxNjEsci5yZW5kZXJidWZmZXIuX3JlbmRlcmJ1ZmZlci5yZW5kZXJidWZmZXIpKX1mdW5jdGlvbiB1KHQpe3ZhciBlPTM1NTMscj1udWxsLG49bnVsbCxpPXQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYoaT10LmRhdGEsInRhcmdldCJpbiB0JiYoZT0wfHQudGFyZ2V0KSksInRleHR1cmUyZCI9PT0odD1pLl9yZWdsVHlwZSl8fCJ0ZXh0dXJlQ3ViZSI9PT10P3I9aToicmVuZGVyYnVmZmVyIj09PXQmJihuPWksZT0zNjE2MSksbmV3IG8oZSxyLG4pfWZ1bmN0aW9uIGYodCxlLHIsYSxzKXtyZXR1cm4gcj8oKHQ9bi5jcmVhdGUyRCh7d2lkdGg6dCxoZWlnaHQ6ZSxmb3JtYXQ6YSx0eXBlOnN9KSkuX3RleHR1cmUucmVmQ291bnQ9MCxuZXcgbygzNTUzLHQsbnVsbCkpOigodD1pLmNyZWF0ZSh7d2lkdGg6dCxoZWlnaHQ6ZSxmb3JtYXQ6YX0pKS5fcmVuZGVyYnVmZmVyLnJlZkNvdW50PTAsbmV3IG8oMzYxNjEsbnVsbCx0KSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCYmKHQudGV4dHVyZXx8dC5yZW5kZXJidWZmZXIpfWZ1bmN0aW9uIHAodCxlLHIpe3QmJih0LnRleHR1cmU/dC50ZXh0dXJlLnJlc2l6ZShlLHIpOnQucmVuZGVyYnVmZmVyJiZ0LnJlbmRlcmJ1ZmZlci5yZXNpemUoZSxyKSx0LndpZHRoPWUsdC5oZWlnaHQ9cil9ZnVuY3Rpb24gZCgpe3RoaXMuaWQ9VCsrLGtbdGhpcy5pZF09dGhpcyx0aGlzLmZyYW1lYnVmZmVyPXQuY3JlYXRlRnJhbWVidWZmZXIoKSx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsdGhpcy5jb2xvckF0dGFjaG1lbnRzPVtdLHRoaXMuZGVwdGhTdGVuY2lsQXR0YWNobWVudD10aGlzLnN0ZW5jaWxBdHRhY2htZW50PXRoaXMuZGVwdGhBdHRhY2htZW50PW51bGx9ZnVuY3Rpb24gbSh0KXt0LmNvbG9yQXR0YWNobWVudHMuZm9yRWFjaChzKSxzKHQuZGVwdGhBdHRhY2htZW50KSxzKHQuc3RlbmNpbEF0dGFjaG1lbnQpLHModC5kZXB0aFN0ZW5jaWxBdHRhY2htZW50KX1mdW5jdGlvbiBnKGUpe3QuZGVsZXRlRnJhbWVidWZmZXIoZS5mcmFtZWJ1ZmZlciksZS5mcmFtZWJ1ZmZlcj1udWxsLGEuZnJhbWVidWZmZXJDb3VudC0tLGRlbGV0ZSBrW2UuaWRdfWZ1bmN0aW9uIHYoZSl7dmFyIG47dC5iaW5kRnJhbWVidWZmZXIoMzYxNjAsZS5mcmFtZWJ1ZmZlcik7dmFyIGk9ZS5jb2xvckF0dGFjaG1lbnRzO2ZvcihuPTA7bjxpLmxlbmd0aDsrK24pYygzNjA2NCtuLGlbbl0pO2ZvcihuPWkubGVuZ3RoO248ci5tYXhDb2xvckF0dGFjaG1lbnRzOysrbil0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0K24sMzU1MyxudWxsLDApO3QuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzMzMDYsMzU1MyxudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYwOTYsMzU1MyxudWxsLDApLHQuZnJhbWVidWZmZXJUZXh0dXJlMkQoMzYxNjAsMzYxMjgsMzU1MyxudWxsLDApLGMoMzYwOTYsZS5kZXB0aEF0dGFjaG1lbnQpLGMoMzYxMjgsZS5zdGVuY2lsQXR0YWNobWVudCksYygzMzMwNixlLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQpLHQuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cygzNjE2MCksdC5pc0NvbnRleHRMb3N0KCksdC5iaW5kRnJhbWVidWZmZXIoMzYxNjAseC5uZXh0P3gubmV4dC5mcmFtZWJ1ZmZlcjpudWxsKSx4LmN1cj14Lm5leHQsdC5nZXRFcnJvcigpfWZ1bmN0aW9uIHkodCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIGksYT0wLG89MCxzPSEwLGM9ITA7aT1udWxsO3ZhciBwPSEwLGQ9InJnYmEiLGc9InVpbnQ4Iix5PTEseD1udWxsLHc9bnVsbCxUPW51bGwsaz0hMTsibnVtYmVyIj09dHlwZW9mIHQ/KGE9MHx0LG89MHxlfHxhKTp0Pygic2hhcGUiaW4gdD8oYT0obz10LnNoYXBlKVswXSxvPW9bMV0pOigicmFkaXVzImluIHQmJihhPW89dC5yYWRpdXMpLCJ3aWR0aCJpbiB0JiYoYT10LndpZHRoKSwiaGVpZ2h0ImluIHQmJihvPXQuaGVpZ2h0KSksKCJjb2xvciJpbiB0fHwiY29sb3JzImluIHQpJiYoaT10LmNvbG9yfHx0LmNvbG9ycyxBcnJheS5pc0FycmF5KGkpKSxpfHwoImNvbG9yQ291bnQiaW4gdCYmKHk9MHx0LmNvbG9yQ291bnQpLCJjb2xvclRleHR1cmUiaW4gdCYmKHA9ISF0LmNvbG9yVGV4dHVyZSxkPSJyZ2JhNCIpLCJjb2xvclR5cGUiaW4gdCYmKGc9dC5jb2xvclR5cGUsIXApJiYoImhhbGYgZmxvYXQiPT09Z3x8ImZsb2F0MTYiPT09Zz9kPSJyZ2JhMTZmIjoiZmxvYXQiIT09ZyYmImZsb2F0MzIiIT09Z3x8KGQ9InJnYmEzMmYiKSksImNvbG9yRm9ybWF0ImluIHQmJihkPXQuY29sb3JGb3JtYXQsMDw9Yi5pbmRleE9mKGQpP3A9ITA6MDw9Xy5pbmRleE9mKGQpJiYocD0hMSkpKSwoImRlcHRoVGV4dHVyZSJpbiB0fHwiZGVwdGhTdGVuY2lsVGV4dHVyZSJpbiB0KSYmKGs9ISghdC5kZXB0aFRleHR1cmUmJiF0LmRlcHRoU3RlbmNpbFRleHR1cmUpKSwiZGVwdGgiaW4gdCYmKCJib29sZWFuIj09dHlwZW9mIHQuZGVwdGg/cz10LmRlcHRoOih4PXQuZGVwdGgsYz0hMSkpLCJzdGVuY2lsImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LnN0ZW5jaWw/Yz10LnN0ZW5jaWw6KHc9dC5zdGVuY2lsLHM9ITEpKSwiZGVwdGhTdGVuY2lsImluIHQmJigiYm9vbGVhbiI9PXR5cGVvZiB0LmRlcHRoU3RlbmNpbD9zPWM9dC5kZXB0aFN0ZW5jaWw6KFQ9dC5kZXB0aFN0ZW5jaWwsYz1zPSExKSkpOmE9bz0xO3ZhciBBPW51bGwsTT1udWxsLFM9bnVsbCxFPW51bGw7aWYoQXJyYXkuaXNBcnJheShpKSlBPWkubWFwKHUpO2Vsc2UgaWYoaSlBPVt1KGkpXTtlbHNlIGZvcihBPUFycmF5KHkpLGk9MDtpPHk7KytpKUFbaV09ZihhLG8scCxkLGcpO2ZvcihhPWF8fEFbMF0ud2lkdGgsbz1vfHxBWzBdLmhlaWdodCx4P009dSh4KTpzJiYhYyYmKE09ZihhLG8saywiZGVwdGgiLCJ1aW50MzIiKSksdz9TPXUodyk6YyYmIXMmJihTPWYoYSxvLCExLCJzdGVuY2lsIiwidWludDgiKSksVD9FPXUoVCk6IXgmJiF3JiZjJiZzJiYoRT1mKGEsbyxrLCJkZXB0aCBzdGVuY2lsIiwiZGVwdGggc3RlbmNpbCIpKSxzPW51bGwsaT0wO2k8QS5sZW5ndGg7KytpKWwoQVtpXSksQVtpXSYmQVtpXS50ZXh0dXJlJiYoYz14dFtBW2ldLnRleHR1cmUuX3RleHR1cmUuZm9ybWF0XSpidFtBW2ldLnRleHR1cmUuX3RleHR1cmUudHlwZV0sbnVsbD09PXMmJihzPWMpKTtyZXR1cm4gbChNKSxsKFMpLGwoRSksbShuKSxuLndpZHRoPWEsbi5oZWlnaHQ9byxuLmNvbG9yQXR0YWNobWVudHM9QSxuLmRlcHRoQXR0YWNobWVudD1NLG4uc3RlbmNpbEF0dGFjaG1lbnQ9UyxuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQ9RSxyLmNvbG9yPUEubWFwKGgpLHIuZGVwdGg9aChNKSxyLnN0ZW5jaWw9aChTKSxyLmRlcHRoU3RlbmNpbD1oKEUpLHIud2lkdGg9bi53aWR0aCxyLmhlaWdodD1uLmhlaWdodCx2KG4pLHJ9dmFyIG49bmV3IGQ7cmV0dXJuIGEuZnJhbWVidWZmZXJDb3VudCsrLHIodCxlKSxqKHIse3Jlc2l6ZTpmdW5jdGlvbih0LGUpe3ZhciBpPU1hdGgubWF4KDB8dCwxKSxhPU1hdGgubWF4KDB8ZXx8aSwxKTtpZihpPT09bi53aWR0aCYmYT09PW4uaGVpZ2h0KXJldHVybiByO2Zvcih2YXIgbz1uLmNvbG9yQXR0YWNobWVudHMscz0wO3M8by5sZW5ndGg7KytzKXAob1tzXSxpLGEpO3JldHVybiBwKG4uZGVwdGhBdHRhY2htZW50LGksYSkscChuLnN0ZW5jaWxBdHRhY2htZW50LGksYSkscChuLmRlcHRoU3RlbmNpbEF0dGFjaG1lbnQsaSxhKSxuLndpZHRoPXIud2lkdGg9aSxuLmhlaWdodD1yLmhlaWdodD1hLHYobikscn0sX3JlZ2xUeXBlOiJmcmFtZWJ1ZmZlciIsX2ZyYW1lYnVmZmVyOm4sZGVzdHJveTpmdW5jdGlvbigpe2cobiksbShuKX0sdXNlOmZ1bmN0aW9uKHQpe3guc2V0RkJPKHtmcmFtZWJ1ZmZlcjpyfSx0KX19KX12YXIgeD17Y3VyOm51bGwsbmV4dDpudWxsLGRpcnR5OiExLHNldEZCTzpudWxsfSxiPVsicmdiYSJdLF89WyJyZ2JhNCIsInJnYjU2NSIsInJnYjUgYTEiXTtlLmV4dF9zcmdiJiZfLnB1c2goInNyZ2JhIiksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJl8ucHVzaCgicmdiYTE2ZiIsInJnYjE2ZiIpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiZfLnB1c2goInJnYmEzMmYiKTt2YXIgdz1bInVpbnQ4Il07ZS5vZXNfdGV4dHVyZV9oYWxmX2Zsb2F0JiZ3LnB1c2goImhhbGYgZmxvYXQiLCJmbG9hdDE2IiksZS5vZXNfdGV4dHVyZV9mbG9hdCYmdy5wdXNoKCJmbG9hdCIsImZsb2F0MzIiKTt2YXIgVD0wLGs9e307cmV0dXJuIGooeCx7Z2V0RnJhbWVidWZmZXI6ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmcmFtZWJ1ZmZlciI9PT10Ll9yZWdsVHlwZSYmKHQ9dC5fZnJhbWVidWZmZXIpaW5zdGFuY2VvZiBkP3Q6bnVsbH0sY3JlYXRlOnksY3JlYXRlQ3ViZTpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBpLGE9e2NvbG9yOm51bGx9LG89MCxzPW51bGw7aT0icmdiYSI7dmFyIGw9InVpbnQ4IixjPTE7aWYoIm51bWJlciI9PXR5cGVvZiB0P289MHx0OnQ/KCJzaGFwZSJpbiB0P289dC5zaGFwZVswXTooInJhZGl1cyJpbiB0JiYobz0wfHQucmFkaXVzKSwid2lkdGgiaW4gdD9vPTB8dC53aWR0aDoiaGVpZ2h0ImluIHQmJihvPTB8dC5oZWlnaHQpKSwoImNvbG9yImluIHR8fCJjb2xvcnMiaW4gdCkmJihzPXQuY29sb3J8fHQuY29sb3JzLEFycmF5LmlzQXJyYXkocykpLHN8fCgiY29sb3JDb3VudCJpbiB0JiYoYz0wfHQuY29sb3JDb3VudCksImNvbG9yVHlwZSJpbiB0JiYobD10LmNvbG9yVHlwZSksImNvbG9yRm9ybWF0ImluIHQmJihpPXQuY29sb3JGb3JtYXQpKSwiZGVwdGgiaW4gdCYmKGEuZGVwdGg9dC5kZXB0aCksInN0ZW5jaWwiaW4gdCYmKGEuc3RlbmNpbD10LnN0ZW5jaWwpLCJkZXB0aFN0ZW5jaWwiaW4gdCYmKGEuZGVwdGhTdGVuY2lsPXQuZGVwdGhTdGVuY2lsKSk6bz0xLHMpaWYoQXJyYXkuaXNBcnJheShzKSlmb3IodD1bXSxpPTA7aTxzLmxlbmd0aDsrK2kpdFtpXT1zW2ldO2Vsc2UgdD1bc107ZWxzZSBmb3IodD1BcnJheShjKSxzPXtyYWRpdXM6byxmb3JtYXQ6aSx0eXBlOmx9LGk9MDtpPGM7KytpKXRbaV09bi5jcmVhdGVDdWJlKHMpO2ZvcihhLmNvbG9yPUFycmF5KHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDsrK2kpYz10W2ldLG89b3x8Yy53aWR0aCxhLmNvbG9yW2ldPXt0YXJnZXQ6MzQwNjksZGF0YTp0W2ldfTtmb3IoaT0wOzY+aTsrK2kpe2ZvcihjPTA7Yzx0Lmxlbmd0aDsrK2MpYS5jb2xvcltjXS50YXJnZXQ9MzQwNjkraTswPGkmJihhLmRlcHRoPXJbMF0uZGVwdGgsYS5zdGVuY2lsPXJbMF0uc3RlbmNpbCxhLmRlcHRoU3RlbmNpbD1yWzBdLmRlcHRoU3RlbmNpbCkscltpXT9yW2ldKGEpOnJbaV09eShhKX1yZXR1cm4gaihlLHt3aWR0aDpvLGhlaWdodDpvLGNvbG9yOnR9KX12YXIgcj1BcnJheSg2KTtyZXR1cm4gZSh0KSxqKGUse2ZhY2VzOnIscmVzaXplOmZ1bmN0aW9uKHQpe3ZhciBuPTB8dDtpZihuPT09ZS53aWR0aClyZXR1cm4gZTt2YXIgaT1lLmNvbG9yO2Zvcih0PTA7dDxpLmxlbmd0aDsrK3QpaVt0XS5yZXNpemUobik7Zm9yKHQ9MDs2PnQ7Kyt0KXJbdF0ucmVzaXplKG4pO3JldHVybiBlLndpZHRoPWUuaGVpZ2h0PW4sZX0sX3JlZ2xUeXBlOiJmcmFtZWJ1ZmZlckN1YmUiLGRlc3Ryb3k6ZnVuY3Rpb24oKXtyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfX0pfSxjbGVhcjpmdW5jdGlvbigpe1goaykuZm9yRWFjaChnKX0scmVzdG9yZTpmdW5jdGlvbigpe3guY3VyPW51bGwseC5uZXh0PW51bGwseC5kaXJ0eT0hMCxYKGspLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuZnJhbWVidWZmZXI9dC5jcmVhdGVGcmFtZWJ1ZmZlcigpLHYoZSl9KSl9fSl9ZnVuY3Rpb24gTSgpe3RoaXMudz10aGlzLno9dGhpcy55PXRoaXMueD10aGlzLnN0YXRlPTAsdGhpcy5idWZmZXI9bnVsbCx0aGlzLnNpemU9MCx0aGlzLm5vcm1hbGl6ZWQ9ITEsdGhpcy50eXBlPTUxMjYsdGhpcy5kaXZpc29yPXRoaXMuc3RyaWRlPXRoaXMub2Zmc2V0PTB9ZnVuY3Rpb24gUyh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKCl7dGhpcy5pZD0rK2YsdGhpcy5hdHRyaWJ1dGVzPVtdLHRoaXMuZWxlbWVudHM9bnVsbCx0aGlzLm93bnNFbGVtZW50cz0hMSx0aGlzLm9mZnNldD10aGlzLmNvdW50PTAsdGhpcy5pbnN0YW5jZXM9LTEsdGhpcy5wcmltaXRpdmU9NDt2YXIgdD1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3RoaXMudmFvPXQ/dC5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOm51bGwsaFt0aGlzLmlkXT10aGlzLHRoaXMuYnVmZmVycz1bXX12YXIgYz1yLm1heEF0dHJpYnV0ZXMsdT1BcnJheShjKTtmb3Iocj0wO3I8YzsrK3IpdVtyXT1uZXcgTTt2YXIgZj0wLGg9e30scD17UmVjb3JkOk0sc2NvcGU6e30sc3RhdGU6dSxjdXJyZW50VkFPOm51bGwsdGFyZ2V0VkFPOm51bGwscmVzdG9yZTplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKCl7ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdCYmWChoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LnJlZnJlc2goKX0pKX06ZnVuY3Rpb24oKXt9LGNyZWF0ZVZBTzpmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3ZhciBuO0FycmF5LmlzQXJyYXkodCk/KG49dCxyLmVsZW1lbnRzJiZyLm93bnNFbGVtZW50cyYmci5lbGVtZW50cy5kZXN0cm95KCksci5lbGVtZW50cz1udWxsLHIub3duc0VsZW1lbnRzPSExLHIub2Zmc2V0PTAsci5jb3VudD0wLHIuaW5zdGFuY2VzPS0xLHIucHJpbWl0aXZlPTQpOih0LmVsZW1lbnRzPyhuPXQuZWxlbWVudHMsci5vd25zRWxlbWVudHM/KCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYiZWxlbWVudHMiPT09bi5fcmVnbFR5cGU/ci5lbGVtZW50cy5kZXN0cm95KCk6ci5lbGVtZW50cyhuKSxyLm93bnNFbGVtZW50cz0hMSk6YS5nZXRFbGVtZW50cyh0LmVsZW1lbnRzKT8oci5lbGVtZW50cz10LmVsZW1lbnRzLHIub3duc0VsZW1lbnRzPSExKTooci5lbGVtZW50cz1hLmNyZWF0ZSh0LmVsZW1lbnRzKSxyLm93bnNFbGVtZW50cz0hMCkpOihyLmVsZW1lbnRzPW51bGwsci5vd25zRWxlbWVudHM9ITEpLG49dC5hdHRyaWJ1dGVzLHIub2Zmc2V0PTAsci5jb3VudD0tMSxyLmluc3RhbmNlcz0tMSxyLnByaW1pdGl2ZT00LHIuZWxlbWVudHMmJihyLmNvdW50PXIuZWxlbWVudHMuX2VsZW1lbnRzLnZlcnRDb3VudCxyLnByaW1pdGl2ZT1yLmVsZW1lbnRzLl9lbGVtZW50cy5wcmltVHlwZSksIm9mZnNldCJpbiB0JiYoci5vZmZzZXQ9MHx0Lm9mZnNldCksImNvdW50ImluIHQmJihyLmNvdW50PTB8dC5jb3VudCksImluc3RhbmNlcyJpbiB0JiYoci5pbnN0YW5jZXM9MHx0Lmluc3RhbmNlcyksInByaW1pdGl2ZSJpbiB0JiYoci5wcmltaXRpdmU9cnRbdC5wcmltaXRpdmVdKSksdD17fTt2YXIgbz1yLmF0dHJpYnV0ZXM7by5sZW5ndGg9bi5sZW5ndGg7Zm9yKHZhciBzPTA7czxuLmxlbmd0aDsrK3Mpe3ZhciBjLHU9bltzXSxmPW9bc109bmV3IE0saD11LmRhdGF8fHU7aWYoQXJyYXkuaXNBcnJheShoKXx8VyhoKXx8bChoKSlyLmJ1ZmZlcnNbc10mJihjPXIuYnVmZmVyc1tzXSxXKGgpJiZjLl9idWZmZXIuYnl0ZUxlbmd0aD49aC5ieXRlTGVuZ3RoP2Muc3ViZGF0YShoKTooYy5kZXN0cm95KCksci5idWZmZXJzW3NdPW51bGwpKSxyLmJ1ZmZlcnNbc118fChjPXIuYnVmZmVyc1tzXT1pLmNyZWF0ZSh1LDM0OTYyLCExLCEwKSksZi5idWZmZXI9aS5nZXRCdWZmZXIoYyksZi5zaXplPTB8Zi5idWZmZXIuZGltZW5zaW9uLGYubm9ybWFsaXplZD0hMSxmLnR5cGU9Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MCxmLnN0cmlkZT0wLGYuZGl2aXNvcj0wLGYuc3RhdGU9MSx0W3NdPTE7ZWxzZSBpLmdldEJ1ZmZlcih1KT8oZi5idWZmZXI9aS5nZXRCdWZmZXIodSksZi5zaXplPTB8Zi5idWZmZXIuZGltZW5zaW9uLGYubm9ybWFsaXplZD0hMSxmLnR5cGU9Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MCxmLnN0cmlkZT0wLGYuZGl2aXNvcj0wLGYuc3RhdGU9MSk6aS5nZXRCdWZmZXIodS5idWZmZXIpPyhmLmJ1ZmZlcj1pLmdldEJ1ZmZlcih1LmJ1ZmZlciksZi5zaXplPTB8KCt1LnNpemV8fGYuYnVmZmVyLmRpbWVuc2lvbiksZi5ub3JtYWxpemVkPSEhdS5ub3JtYWxpemVkfHwhMSxmLnR5cGU9InR5cGUiaW4gdT9LW3UudHlwZV06Zi5idWZmZXIuZHR5cGUsZi5vZmZzZXQ9MHwodS5vZmZzZXR8fDApLGYuc3RyaWRlPTB8KHUuc3RyaWRlfHwwKSxmLmRpdmlzb3I9MHwodS5kaXZpc29yfHwwKSxmLnN0YXRlPTEpOiJ4ImluIHUmJihmLng9K3UueHx8MCxmLnk9K3UueXx8MCxmLno9K3Uuenx8MCxmLnc9K3Uud3x8MCxmLnN0YXRlPTIpfWZvcihjPTA7YzxyLmJ1ZmZlcnMubGVuZ3RoOysrYykhdFtjXSYmci5idWZmZXJzW2NdJiYoci5idWZmZXJzW2NdLmRlc3Ryb3koKSxyLmJ1ZmZlcnNbY109bnVsbCk7cmV0dXJuIHIucmVmcmVzaCgpLGV9dmFyIHI9bmV3IHM7cmV0dXJuIG4udmFvQ291bnQrPTEsZS5kZXN0cm95PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDxyLmJ1ZmZlcnMubGVuZ3RoOysrdClyLmJ1ZmZlcnNbdF0mJnIuYnVmZmVyc1t0XS5kZXN0cm95KCk7ci5idWZmZXJzLmxlbmd0aD0wLHIub3duc0VsZW1lbnRzJiYoci5lbGVtZW50cy5kZXN0cm95KCksci5lbGVtZW50cz1udWxsLHIub3duc0VsZW1lbnRzPSExKSxyLmRlc3Ryb3koKX0sZS5fdmFvPXIsZS5fcmVnbFR5cGU9InZhbyIsZSh0KX0sZ2V0VkFPOmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0Ll92YW8/dC5fdmFvOm51bGx9LGRlc3Ryb3lCdWZmZXI6ZnVuY3Rpb24oZSl7Zm9yKHZhciByPTA7cjx1Lmxlbmd0aDsrK3Ipe3ZhciBuPXVbcl07bi5idWZmZXI9PT1lJiYodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkociksbi5idWZmZXI9bnVsbCl9fSxzZXRWQU86ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdD9mdW5jdGlvbih0KXtpZih0IT09cC5jdXJyZW50VkFPKXt2YXIgcj1lLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0O3Q/ci5iaW5kVmVydGV4QXJyYXlPRVModC52YW8pOnIuYmluZFZlcnRleEFycmF5T0VTKG51bGwpLHAuY3VycmVudFZBTz10fX06ZnVuY3Rpb24ocil7aWYociE9PXAuY3VycmVudFZBTyl7aWYocilyLmJpbmRBdHRycygpO2Vsc2V7Zm9yKHZhciBuPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxpPTA7aTx1Lmxlbmd0aDsrK2kpe3ZhciBhPXVbaV07YS5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksYS5idWZmZXIuYmluZCgpLHQudmVydGV4QXR0cmliUG9pbnRlcihpLGEuc2l6ZSxhLnR5cGUsYS5ub3JtYWxpemVkLGEuc3RyaWRlLGEub2ZmZnNldCksbiYmYS5kaXZpc29yJiZuLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRShpLGEuZGl2aXNvcikpOih0LmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpKSx0LnZlcnRleEF0dHJpYjRmKGksYS54LGEueSxhLnosYS53KSl9by5lbGVtZW50cz90LmJpbmRCdWZmZXIoMzQ5NjMsby5lbGVtZW50cy5idWZmZXIuYnVmZmVyKTp0LmJpbmRCdWZmZXIoMzQ5NjMsbnVsbCl9cC5jdXJyZW50VkFPPXJ9fSxjbGVhcjplLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0P2Z1bmN0aW9uKCl7WChoKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmRlc3Ryb3koKX0pKX06ZnVuY3Rpb24oKXt9fTtyZXR1cm4gcy5wcm90b3R5cGUuYmluZEF0dHJzPWZ1bmN0aW9uKCl7Zm9yKHZhciByPWUuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyxuPXRoaXMuYXR0cmlidXRlcyxpPTA7aTxuLmxlbmd0aDsrK2kpe3ZhciBvPW5baV07by5idWZmZXI/KHQuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC5iaW5kQnVmZmVyKDM0OTYyLG8uYnVmZmVyLmJ1ZmZlciksdC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGksby5zaXplLG8udHlwZSxvLm5vcm1hbGl6ZWQsby5zdHJpZGUsby5vZmZzZXQpLHImJm8uZGl2aXNvciYmci52ZXJ0ZXhBdHRyaWJEaXZpc29yQU5HTEUoaSxvLmRpdmlzb3IpKToodC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoaSksdC52ZXJ0ZXhBdHRyaWI0ZihpLG8ueCxvLnksby56LG8udykpfWZvcihyPW4ubGVuZ3RoO3I8YzsrK3IpdC5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocik7KHI9YS5nZXRFbGVtZW50cyh0aGlzLmVsZW1lbnRzKSk/dC5iaW5kQnVmZmVyKDM0OTYzLHIuYnVmZmVyLmJ1ZmZlcik6dC5iaW5kQnVmZmVyKDM0OTYzLG51bGwpfSxzLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5vZXNfdmVydGV4X2FycmF5X29iamVjdDt0JiYodC5iaW5kVmVydGV4QXJyYXlPRVModGhpcy52YW8pLHRoaXMuYmluZEF0dHJzKCkscC5jdXJyZW50VkFPPW51bGwsdC5iaW5kVmVydGV4QXJyYXlPRVMobnVsbCkpfSxzLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy52YW8pe3ZhciB0PWUub2VzX3ZlcnRleF9hcnJheV9vYmplY3Q7dGhpcz09PXAuY3VycmVudFZBTyYmKHAuY3VycmVudFZBTz1udWxsLHQuYmluZFZlcnRleEFycmF5T0VTKG51bGwpKSx0LmRlbGV0ZVZlcnRleEFycmF5T0VTKHRoaXMudmFvKSx0aGlzLnZhbz1udWxsfXRoaXMub3duc0VsZW1lbnRzJiYodGhpcy5lbGVtZW50cy5kZXN0cm95KCksdGhpcy5lbGVtZW50cz1udWxsLHRoaXMub3duc0VsZW1lbnRzPSExKSxoW3RoaXMuaWRdJiYoZGVsZXRlIGhbdGhpcy5pZF0sLS1uLnZhb0NvdW50KX0scH1mdW5jdGlvbiBFKHQsZSxyLG4pe2Z1bmN0aW9uIGkodCxlLHIsbil7dGhpcy5uYW1lPXQsdGhpcy5pZD1lLHRoaXMubG9jYXRpb249cix0aGlzLmluZm89bn1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpaWYodFtyXS5pZD09PWUuaWQpcmV0dXJuIHZvaWQodFtyXS5sb2NhdGlvbj1lLmxvY2F0aW9uKTt0LnB1c2goZSl9ZnVuY3Rpb24gbyhyLG4saSl7aWYoIShvPShpPTM1NjMyPT09cj9jOnUpW25dKSl7dmFyIGE9ZS5zdHIobiksbz10LmNyZWF0ZVNoYWRlcihyKTt0LnNoYWRlclNvdXJjZShvLGEpLHQuY29tcGlsZVNoYWRlcihvKSxpW25dPW99cmV0dXJuIG99ZnVuY3Rpb24gcyh0LGUpe3RoaXMuaWQ9cCsrLHRoaXMuZnJhZ0lkPXQsdGhpcy52ZXJ0SWQ9ZSx0aGlzLnByb2dyYW09bnVsbCx0aGlzLnVuaWZvcm1zPVtdLHRoaXMuYXR0cmlidXRlcz1bXSx0aGlzLnJlZkNvdW50PTEsbi5wcm9maWxlJiYodGhpcy5zdGF0cz17dW5pZm9ybXNDb3VudDowLGF0dHJpYnV0ZXNDb3VudDowfSl9ZnVuY3Rpb24gbChyLHMsbCl7dmFyIGM7Yz1vKDM1NjMyLHIuZnJhZ0lkKTt2YXIgdT1vKDM1NjMzLHIudmVydElkKTtpZihzPXIucHJvZ3JhbT10LmNyZWF0ZVByb2dyYW0oKSx0LmF0dGFjaFNoYWRlcihzLGMpLHQuYXR0YWNoU2hhZGVyKHMsdSksbClmb3IoYz0wO2M8bC5sZW5ndGg7KytjKXU9bFtjXSx0LmJpbmRBdHRyaWJMb2NhdGlvbihzLHVbMF0sdVsxXSk7dC5saW5rUHJvZ3JhbShzKSx1PXQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihzLDM1NzE4KSxuLnByb2ZpbGUmJihyLnN0YXRzLnVuaWZvcm1zQ291bnQ9dSk7dmFyIGY9ci51bmlmb3Jtcztmb3IoYz0wO2M8dTsrK2MpaWYobD10LmdldEFjdGl2ZVVuaWZvcm0ocyxjKSl7aWYoMTxsLnNpemUpZm9yKHZhciBoPTA7aDxsLnNpemU7KytoKXt2YXIgcD1sLm5hbWUucmVwbGFjZSgiWzBdIiwiWyIraCsiXSIpO2EoZixuZXcgaShwLGUuaWQocCksdC5nZXRVbmlmb3JtTG9jYXRpb24ocyxwKSxsKSl9aD1sLm5hbWUsMTxsLnNpemUmJihoPWgucmVwbGFjZSgiWzBdIiwiIikpLGEoZixuZXcgaShoLGUuaWQoaCksdC5nZXRVbmlmb3JtTG9jYXRpb24ocyxoKSxsKSl9Zm9yKHU9dC5nZXRQcm9ncmFtUGFyYW1ldGVyKHMsMzU3MjEpLG4ucHJvZmlsZSYmKHIuc3RhdHMuYXR0cmlidXRlc0NvdW50PXUpLHI9ci5hdHRyaWJ1dGVzLGM9MDtjPHU7KytjKShsPXQuZ2V0QWN0aXZlQXR0cmliKHMsYykpJiZhKHIsbmV3IGkobC5uYW1lLGUuaWQobC5uYW1lKSx0LmdldEF0dHJpYkxvY2F0aW9uKHMsbC5uYW1lKSxsKSl9dmFyIGM9e30sdT17fSxmPXt9LGg9W10scD0wO3JldHVybiBuLnByb2ZpbGUmJihyLmdldE1heFVuaWZvcm1zQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Uuc3RhdHMudW5pZm9ybXNDb3VudD50JiYodD1lLnN0YXRzLnVuaWZvcm1zQ291bnQpfSkpLHR9LHIuZ2V0TWF4QXR0cmlidXRlc0NvdW50PWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gaC5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnN0YXRzLmF0dHJpYnV0ZXNDb3VudD50JiYodD1lLnN0YXRzLmF0dHJpYnV0ZXNDb3VudCl9KSksdH0pLHtjbGVhcjpmdW5jdGlvbigpe3ZhciBlPXQuZGVsZXRlU2hhZGVyLmJpbmQodCk7WChjKS5mb3JFYWNoKGUpLGM9e30sWCh1KS5mb3JFYWNoKGUpLHU9e30saC5mb3JFYWNoKChmdW5jdGlvbihlKXt0LmRlbGV0ZVByb2dyYW0oZS5wcm9ncmFtKX0pKSxoLmxlbmd0aD0wLGY9e30sci5zaGFkZXJDb3VudD0wfSxwcm9ncmFtOmZ1bmN0aW9uKGUsbixpLGEpe3ZhciBvPWZbbl07b3x8KG89ZltuXT17fSk7dmFyIHA9b1tlXTtpZihwJiYocC5yZWZDb3VudCsrLCFhKSlyZXR1cm4gcDt2YXIgZD1uZXcgcyhuLGUpO3JldHVybiByLnNoYWRlckNvdW50KyssbChkLGksYSkscHx8KG9bZV09ZCksaC5wdXNoKGQpLGooZCx7ZGVzdHJveTpmdW5jdGlvbigpe2lmKGQucmVmQ291bnQtLSwwPj1kLnJlZkNvdW50KXt0LmRlbGV0ZVByb2dyYW0oZC5wcm9ncmFtKTt2YXIgZT1oLmluZGV4T2YoZCk7aC5zcGxpY2UoZSwxKSxyLnNoYWRlckNvdW50LS19MD49b1tkLnZlcnRJZF0ucmVmQ291bnQmJih0LmRlbGV0ZVNoYWRlcih1W2QudmVydElkXSksZGVsZXRlIHVbZC52ZXJ0SWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXVtkLnZlcnRJZF0pLE9iamVjdC5rZXlzKGZbZC5mcmFnSWRdKS5sZW5ndGh8fCh0LmRlbGV0ZVNoYWRlcihjW2QuZnJhZ0lkXSksZGVsZXRlIGNbZC5mcmFnSWRdLGRlbGV0ZSBmW2QuZnJhZ0lkXSl9fSl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtjPXt9LHU9e307Zm9yKHZhciB0PTA7dDxoLmxlbmd0aDsrK3QpbChoW3RdLG51bGwsaFt0XS5hdHRyaWJ1dGVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuW3QubG9jYXRpb24sdC5uYW1lXX0pKSl9LHNoYWRlcjpvLGZyYWc6LTEsdmVydDotMX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSxvKXtmdW5jdGlvbiBzKGkpe3ZhciBhO2E9bnVsbD09PWUubmV4dD81MTIxOmUubmV4dC5jb2xvckF0dGFjaG1lbnRzWzBdLnRleHR1cmUuX3RleHR1cmUudHlwZTt2YXIgbz0wLHM9MCxsPW4uZnJhbWVidWZmZXJXaWR0aCxjPW4uZnJhbWVidWZmZXJIZWlnaHQsdT1udWxsO3JldHVybiBXKGkpP3U9aTppJiYobz0wfGkueCxzPTB8aS55LGw9MHwoaS53aWR0aHx8bi5mcmFtZWJ1ZmZlcldpZHRoLW8pLGM9MHwoaS5oZWlnaHR8fG4uZnJhbWVidWZmZXJIZWlnaHQtcyksdT1pLmRhdGF8fG51bGwpLHIoKSxpPWwqYyo0LHV8fCg1MTIxPT09YT91PW5ldyBVaW50OEFycmF5KGkpOjUxMjY9PT1hJiYodT11fHxuZXcgRmxvYXQzMkFycmF5KGkpKSksdC5waXhlbFN0b3JlaSgzMzMzLDQpLHQucmVhZFBpeGVscyhvLHMsbCxjLDY0MDgsYSx1KSx1fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZyYW1lYnVmZmVyImluIHQ/ZnVuY3Rpb24odCl7dmFyIHI7cmV0dXJuIGUuc2V0RkJPKHtmcmFtZWJ1ZmZlcjp0LmZyYW1lYnVmZmVyfSwoZnVuY3Rpb24oKXtyPXModCl9KSkscn0odCk6cyh0KX19ZnVuY3Rpb24gQyh0KXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCl9ZnVuY3Rpb24gUCh0KXtyZXR1cm4gQyh0KS5qb2luKCIiKX1mdW5jdGlvbiBJKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHxXKHQpfHxsKHQpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4idmlld3BvcnQiPT09dD8tMToidmlld3BvcnQiPT09ZT8xOnQ8ZT8tMToxfSkpfWZ1bmN0aW9uIHoodCxlLHIsbil7dGhpcy50aGlzRGVwPXQsdGhpcy5jb250ZXh0RGVwPWUsdGhpcy5wcm9wRGVwPXIsdGhpcy5hcHBlbmQ9bn1mdW5jdGlvbiBEKHQpe3JldHVybiB0JiYhKHQudGhpc0RlcHx8dC5jb250ZXh0RGVwfHx0LnByb3BEZXApfWZ1bmN0aW9uIFIodCl7cmV0dXJuIG5ldyB6KCExLCExLCExLHQpfWZ1bmN0aW9uIEYodCxlKXt2YXIgcj10LnR5cGU7aWYoMD09PXIpcmV0dXJuIG5ldyB6KCEwLDE8PShyPXQuZGF0YS5sZW5ndGgpLDI8PXIsZSk7aWYoND09PXIpcmV0dXJuIG5ldyB6KChyPXQuZGF0YSkudGhpc0RlcCxyLmNvbnRleHREZXAsci5wcm9wRGVwLGUpO2lmKDU9PT1yKXJldHVybiBuZXcgeighMSwhMSwhMSxlKTtpZig2PT09cil7Zm9yKHZhciBuPXI9ITEsaT0hMSxhPTA7YTx0LmRhdGEubGVuZ3RoOysrYSl7dmFyIG89dC5kYXRhW2FdOzE9PT1vLnR5cGU/aT0hMDoyPT09by50eXBlP249ITA6Mz09PW8udHlwZT9yPSEwOjA9PT1vLnR5cGU/KHI9ITAsMTw9KG89by5kYXRhKSYmKG49ITApLDI8PW8mJihpPSEwKSk6ND09PW8udHlwZSYmKHI9cnx8by5kYXRhLnRoaXNEZXAsbj1ufHxvLmRhdGEuY29udGV4dERlcCxpPWl8fG8uZGF0YS5wcm9wRGVwKX1yZXR1cm4gbmV3IHoocixuLGksZSl9cmV0dXJuIG5ldyB6KDM9PT1yLDI9PT1yLDE9PT1yLGUpfWZ1bmN0aW9uIEIodCxlLHIsbixpLG8scyxsLGMsdSxmLGgscCxkLG0pe2Z1bmN0aW9uIHYodCl7cmV0dXJuIHQucmVwbGFjZSgiLiIsIl8iKX1mdW5jdGlvbiB5KHQsZSxyKXt2YXIgbj12KHQpO290LnB1c2godCksYXRbbl09aXRbbl09ISFyLHN0W25dPWV9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0KTtvdC5wdXNoKHQpLEFycmF5LmlzQXJyYXkocik/KGl0W25dPXIuc2xpY2UoKSxhdFtuXT1yLnNsaWNlKCkpOml0W25dPWF0W25dPXIsbHRbbl09ZX1mdW5jdGlvbiBiKCl7dmFyIHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dmFyIHQ9W10sZT1bXTtyZXR1cm4gaigoZnVuY3Rpb24oKXt0LnB1c2guYXBwbHkodCxDKGFyZ3VtZW50cykpfSkse2RlZjpmdW5jdGlvbigpe3ZhciBuPSJ2IityKys7cmV0dXJuIGUucHVzaChuKSwwPGFyZ3VtZW50cy5sZW5ndGgmJih0LnB1c2gobiwiPSIpLHQucHVzaC5hcHBseSh0LEMoYXJndW1lbnRzKSksdC5wdXNoKCI7IikpLG59LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFAoWzA8ZS5sZW5ndGg/InZhciAiK2Uuam9pbigiLCIpKyI7IjoiIixQKHQpXSl9fSl9ZnVuY3Rpb24gZSgpe2Z1bmN0aW9uIGUodCxlKXtuKHQsZSwiPSIsci5kZWYodCxlKSwiOyIpfXZhciByPXQoKSxuPXQoKSxpPXIudG9TdHJpbmcsYT1uLnRvU3RyaW5nO3JldHVybiBqKChmdW5jdGlvbigpe3IuYXBwbHkocixDKGFyZ3VtZW50cykpfSkse2RlZjpyLmRlZixlbnRyeTpyLGV4aXQ6bixzYXZlOmUsc2V0OmZ1bmN0aW9uKHQsbixpKXtlKHQsbikscih0LG4sIj0iLGksIjsiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gaSgpK2EoKX19KX12YXIgcj0wLG49W10saT1bXSxhPXQoKSxvPXt9O3JldHVybntnbG9iYWw6YSxsaW5rOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8aS5sZW5ndGg7KytlKWlmKGlbZV09PT10KXJldHVybiBuW2VdO3JldHVybiBlPSJnIityKyssbi5wdXNoKGUpLGkucHVzaCh0KSxlfSxibG9jazp0LHByb2M6ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKCl7dmFyIHQ9ImEiK2kubGVuZ3RoO3JldHVybiBpLnB1c2godCksdH12YXIgaT1bXTtyPXJ8fDA7Zm9yKHZhciBhPTA7YTxyOysrYSluKCk7dmFyIHM9KGE9ZSgpKS50b1N0cmluZztyZXR1cm4gb1t0XT1qKGEse2FyZzpuLHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIFAoWyJmdW5jdGlvbigiLGkuam9pbigpLCIpeyIscygpLCJ9Il0pfX0pfSxzY29wZTplLGNvbmQ6ZnVuY3Rpb24oKXt2YXIgdD1QKGFyZ3VtZW50cykscj1lKCksbj1lKCksaT1yLnRvU3RyaW5nLGE9bi50b1N0cmluZztyZXR1cm4gaihyLHt0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkocixDKGFyZ3VtZW50cykpLHRoaXN9LGVsc2U6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShuLEMoYXJndW1lbnRzKSksdGhpc30sdG9TdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1hKCk7cmV0dXJuIGUmJihlPSJlbHNleyIrZSsifSIpLFAoWyJpZigiLHQsIil7IixpKCksIn0iLGVdKX19KX0sY29tcGlsZTpmdW5jdGlvbigpe3ZhciB0PVsnInVzZSBzdHJpY3QiOycsYSwicmV0dXJuIHsiXTtPYmplY3Qua2V5cyhvKS5mb3JFYWNoKChmdW5jdGlvbihlKXt0LnB1c2goJyInLGUsJyI6JyxvW2VdLnRvU3RyaW5nKCksIiwiKX0pKSx0LnB1c2goIn0iKTt2YXIgZT1QKHQpLnJlcGxhY2UoLzsvZywiO1xuIikucmVwbGFjZSgvfS9nLCJ9XG4iKS5yZXBsYWNlKC97L2csIntcbiIpO3JldHVybiBGdW5jdGlvbi5hcHBseShudWxsLG4uY29uY2F0KGUpKS5hcHBseShudWxsLGkpfX19KCkscj10Lmxpbmssbj10Lmdsb2JhbDt0LmlkPWZ0KyssdC5iYXRjaElkPSIwIjt2YXIgaT1yKGN0KSxhPXQuc2hhcmVkPXtwcm9wczoiYTAifTtPYmplY3Qua2V5cyhjdCkuZm9yRWFjaCgoZnVuY3Rpb24odCl7YVt0XT1uLmRlZihpLCIuIix0KX0pKTt2YXIgbz10Lm5leHQ9e30scz10LmN1cnJlbnQ9e307T2JqZWN0LmtleXMobHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkoaXRbdF0pJiYob1t0XT1uLmRlZihhLm5leHQsIi4iLHQpLHNbdF09bi5kZWYoYS5jdXJyZW50LCIuIix0KSl9KSk7dmFyIGw9dC5jb25zdGFudHM9e307T2JqZWN0LmtleXModXQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09bi5kZWYoSlNPTi5zdHJpbmdpZnkodXRbdF0pKX0pKSx0Lmludm9rZT1mdW5jdGlvbihlLG4pe3N3aXRjaChuLnR5cGUpe2Nhc2UgMDp2YXIgaT1bInRoaXMiLGEuY29udGV4dCxhLnByb3BzLHQuYmF0Y2hJZF07cmV0dXJuIGUuZGVmKHIobi5kYXRhKSwiLmNhbGwoIixpLnNsaWNlKDAsTWF0aC5tYXgobi5kYXRhLmxlbmd0aCsxLDQpKSwiKSIpO2Nhc2UgMTpyZXR1cm4gZS5kZWYoYS5wcm9wcyxuLmRhdGEpO2Nhc2UgMjpyZXR1cm4gZS5kZWYoYS5jb250ZXh0LG4uZGF0YSk7Y2FzZSAzOnJldHVybiBlLmRlZigidGhpcyIsbi5kYXRhKTtjYXNlIDQ6cmV0dXJuIG4uZGF0YS5hcHBlbmQodCxlKSxuLmRhdGEucmVmO2Nhc2UgNTpyZXR1cm4gbi5kYXRhLnRvU3RyaW5nKCk7Y2FzZSA2OnJldHVybiBuLmRhdGEubWFwKChmdW5jdGlvbihyKXtyZXR1cm4gdC5pbnZva2UoZSxyKX0pKX19LHQuYXR0cmliQ2FjaGU9e307dmFyIGM9e307cmV0dXJuIHQuc2NvcGVBdHRyaWI9ZnVuY3Rpb24odCl7aWYoKHQ9ZS5pZCh0KSlpbiBjKXJldHVybiBjW3RdO3ZhciBuPXUuc2NvcGVbdF07cmV0dXJuIG58fChuPXUuc2NvcGVbdF09bmV3IFEpLGNbdF09cihuKX0sdH1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWM7aWYoImZyYW1lYnVmZmVyImluIHIpe3ZhciBpPXIuZnJhbWVidWZmZXI7cmV0dXJuIGk/KGk9bC5nZXRGcmFtZWJ1ZmZlcihpKSxSKChmdW5jdGlvbih0LGUpe3ZhciByPXQubGluayhpKSxuPXQuc2hhcmVkO3JldHVybiBlLnNldChuLmZyYW1lYnVmZmVyLCIubmV4dCIsciksbj1uLmNvbnRleHQsZS5zZXQobiwiLmZyYW1lYnVmZmVyV2lkdGgiLHIrIi53aWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiLmhlaWdodCIpLHJ9KSkpOlIoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zaGFyZWQ7cmV0dXJuIGUuc2V0KHIuZnJhbWVidWZmZXIsIi5uZXh0IiwibnVsbCIpLHI9ci5jb250ZXh0LGUuc2V0KHIsIi5mcmFtZWJ1ZmZlcldpZHRoIixyKyIuZHJhd2luZ0J1ZmZlcldpZHRoIiksZS5zZXQociwiLmZyYW1lYnVmZmVySGVpZ2h0IixyKyIuZHJhd2luZ0J1ZmZlckhlaWdodCIpLCJudWxsIn0pKX1pZigiZnJhbWVidWZmZXIiaW4gbil7dmFyIGE9bi5mcmFtZWJ1ZmZlcjtyZXR1cm4gRihhLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYSksbj10LnNoYXJlZCxpPW4uZnJhbWVidWZmZXI7cj1lLmRlZihpLCIuZ2V0RnJhbWVidWZmZXIoIixyLCIpIik7cmV0dXJuIGUuc2V0KGksIi5uZXh0IixyKSxuPW4uY29udGV4dCxlLnNldChuLCIuZnJhbWVidWZmZXJXaWR0aCIscisiPyIrcisiLndpZHRoOiIrbisiLmRyYXdpbmdCdWZmZXJXaWR0aCIpLGUuc2V0KG4sIi5mcmFtZWJ1ZmZlckhlaWdodCIscisiPyIrcisiLmhlaWdodDoiK24rIi5kcmF3aW5nQnVmZmVySGVpZ2h0Iikscn0pKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB3KHQscixuKXtmdW5jdGlvbiBpKHQpe2lmKHQgaW4gYSl7dmFyIHI9ZS5pZChhW3RdKTtyZXR1cm4odD1SKChmdW5jdGlvbigpe3JldHVybiByfSkpKS5pZD1yLHR9aWYodCBpbiBvKXt2YXIgbj1vW3RdO3JldHVybiBGKG4sKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5pbnZva2UoZSxuKTtyZXR1cm4gZS5kZWYodC5zaGFyZWQuc3RyaW5ncywiLmlkKCIsciwiKSIpfSkpfXJldHVybiBudWxsfXZhciBhPXQuc3RhdGljLG89dC5keW5hbWljLHM9aSgiZnJhZyIpLGw9aSgidmVydCIpLGM9bnVsbDtyZXR1cm4gRChzKSYmRChsKT8oYz1mLnByb2dyYW0obC5pZCxzLmlkLG51bGwsbiksdD1SKChmdW5jdGlvbih0LGUpe3JldHVybiB0LmxpbmsoYyl9KSkpOnQ9bmV3IHoocyYmcy50aGlzRGVwfHxsJiZsLnRoaXNEZXAscyYmcy5jb250ZXh0RGVwfHxsJiZsLmNvbnRleHREZXAscyYmcy5wcm9wRGVwfHxsJiZsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXQuc2hhcmVkLnNoYWRlcjtyZXR1cm4gcj1zP3MuYXBwZW5kKHQsZSk6ZS5kZWYoaSwiLiIsImZyYWciKSxuPWw/bC5hcHBlbmQodCxlKTplLmRlZihpLCIuIiwidmVydCIpLGUuZGVmKGkrIi5wcm9ncmFtKCIrbisiLCIrcisiKSIpfSkpLHtmcmFnOnMsdmVydDpsLHByb2dWYXI6dCxwcm9ncmFtOmN9fWZ1bmN0aW9uIFQodCxlKXtmdW5jdGlvbiByKHQsZSl7aWYodCBpbiBuKXt2YXIgcj0wfG5bdF07cmV0dXJuIGU/YS5vZmZzZXQ9cjphLmluc3RhbmNlcz1yLFIoKGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUmJih0Lk9GRlNFVD1yKSxyfSkpfWlmKHQgaW4gaSl7dmFyIG89aVt0XTtyZXR1cm4gRihvLChmdW5jdGlvbih0LHIpe3ZhciBuPXQuaW52b2tlKHIsbyk7cmV0dXJuIGUmJih0Lk9GRlNFVD1uKSxufSkpfWlmKGUpe2lmKGMpcmV0dXJuIFIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuT0ZGU0VUPTB9KSk7aWYocylyZXR1cm4gbmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLm9mZnNldDowIil9KSl9ZWxzZSBpZihzKXJldHVybiBuZXcgeihsLnRoaXNEZXAsbC5jb250ZXh0RGVwLGwucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5zaGFyZWQudmFvKyIuY3VycmVudFZBTz8iK3Quc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8uaW5zdGFuY2VzOi0xIil9KSk7cmV0dXJuIG51bGx9dmFyIG49dC5zdGF0aWMsaT10LmR5bmFtaWMsYT17fSxzPSExLGw9ZnVuY3Rpb24oKXtpZigidmFvImluIG4pe3ZhciB0PW4udmFvO3JldHVybiBudWxsIT09dCYmbnVsbD09PXUuZ2V0VkFPKHQpJiYodD11LmNyZWF0ZVZBTyh0KSkscz0hMCxhLnZhbz10LFIoKGZ1bmN0aW9uKGUpe3ZhciByPXUuZ2V0VkFPKHQpO3JldHVybiByP2UubGluayhyKToibnVsbCJ9KSl9aWYoInZhbyJpbiBpKXtzPSEwO3ZhciBlPWkudmFvO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYodC5zaGFyZWQudmFvKyIuZ2V0VkFPKCIrbisiKSIpfSkpfXJldHVybiBudWxsfSgpLGM9ITEsZj1mdW5jdGlvbigpe2lmKCJlbGVtZW50cyJpbiBuKXt2YXIgdD1uLmVsZW1lbnRzO2lmKGEuZWxlbWVudHM9dCxJKHQpKXt2YXIgZT1hLmVsZW1lbnRzPW8uY3JlYXRlKHQsITApO3Q9by5nZXRFbGVtZW50cyhlKTtjPSEwfWVsc2UgdCYmKHQ9by5nZXRFbGVtZW50cyh0KSxjPSEwKTtyZXR1cm4oZT1SKChmdW5jdGlvbihlLHIpe2lmKHQpe3ZhciBuPWUubGluayh0KTtyZXR1cm4gZS5FTEVNRU5UUz1ufXJldHVybiBlLkVMRU1FTlRTPW51bGx9KSkpLnZhbHVlPXQsZX1pZigiZWxlbWVudHMiaW4gaSl7Yz0hMDt2YXIgcj1pLmVsZW1lbnRzO3JldHVybiBGKHIsKGZ1bmN0aW9uKHQsZSl7dmFyIG49KGk9dC5zaGFyZWQpLmlzQnVmZmVyQXJncyxpPWkuZWxlbWVudHMsYT10Lmludm9rZShlLHIpLG89ZS5kZWYoIm51bGwiKTtuPWUuZGVmKG4sIigiLGEsIikiKSxhPXQuY29uZChuKS50aGVuKG8sIj0iLGksIi5jcmVhdGVTdHJlYW0oIixhLCIpOyIpLmVsc2UobywiPSIsaSwiLmdldEVsZW1lbnRzKCIsYSwiKTsiKTtyZXR1cm4gZS5lbnRyeShhKSxlLmV4aXQodC5jb25kKG4pLnRoZW4oaSwiLmRlc3Ryb3lTdHJlYW0oIixvLCIpOyIpKSx0LkVMRU1FTlRTPW99KSl9cmV0dXJuIHM/bmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC5lbGVtZW50cysiLmdldEVsZW1lbnRzKCIrdC5zaGFyZWQudmFvKyIuY3VycmVudFZBTy5lbGVtZW50cyk6bnVsbCIpfSkpOm51bGx9KCksaD1yKCJvZmZzZXQiLCEwKSxwPWZ1bmN0aW9uKCl7aWYoInByaW1pdGl2ZSJpbiBuKXt2YXIgdD1uLnByaW1pdGl2ZTtyZXR1cm4gYS5wcmltaXRpdmU9dCxSKChmdW5jdGlvbihlLHIpe3JldHVybiBydFt0XX0pKX1pZigicHJpbWl0aXZlImluIGkpe3ZhciBlPWkucHJpbWl0aXZlO3JldHVybiBGKGUsKGZ1bmN0aW9uKHQscil7dmFyIG49dC5jb25zdGFudHMucHJpbVR5cGVzLGk9dC5pbnZva2UocixlKTtyZXR1cm4gci5kZWYobiwiWyIsaSwiXSIpfSkpfXJldHVybiBjP0QoZik/Zi52YWx1ZT9SKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIucHJpbVR5cGUiKX0pKTpSKChmdW5jdGlvbigpe3JldHVybiA0fSkpOm5ldyB6KGYudGhpc0RlcCxmLmNvbnRleHREZXAsZi5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciByPXQuRUxFTUVOVFM7cmV0dXJuIGUuZGVmKHIsIj8iLHIsIi5wcmltVHlwZToiLDQpfSkpOnM/bmV3IHoobC50aGlzRGVwLGwuY29udGV4dERlcCxsLnByb3BEZXAsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuZGVmKHQuc2hhcmVkLnZhbysiLmN1cnJlbnRWQU8/Iit0LnNoYXJlZC52YW8rIi5jdXJyZW50VkFPLnByaW1pdGl2ZTo0Iil9KSk6bnVsbH0oKSxkPWZ1bmN0aW9uKCl7aWYoImNvdW50ImluIG4pe3ZhciB0PTB8bi5jb3VudDtyZXR1cm4gYS5jb3VudD10LFIoKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9aWYoImNvdW50ImluIGkpe3ZhciBlPWkuY291bnQ7cmV0dXJuIEYoZSwoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5pbnZva2UocixlKX0pKX1yZXR1cm4gYz9EKGYpP2Y/aD9uZXcgeihoLnRoaXNEZXAsaC5jb250ZXh0RGVwLGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5kZWYodC5FTEVNRU5UUywiLnZlcnRDb3VudC0iLHQuT0ZGU0VUKX0pKTpSKChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LkVMRU1FTlRTLCIudmVydENvdW50Iil9KSk6UigoZnVuY3Rpb24oKXtyZXR1cm4tMX0pKTpuZXcgeihmLnRoaXNEZXB8fGgudGhpc0RlcCxmLmNvbnRleHREZXB8fGguY29udGV4dERlcCxmLnByb3BEZXB8fGgucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LkVMRU1FTlRTO3JldHVybiB0Lk9GRlNFVD9lLmRlZihyLCI/IixyLCIudmVydENvdW50LSIsdC5PRkZTRVQsIjotMSIpOmUuZGVmKHIsIj8iLHIsIi52ZXJ0Q291bnQ6LTEiKX0pKTpzP25ldyB6KGwudGhpc0RlcCxsLmNvbnRleHREZXAsbC5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3JldHVybiBlLmRlZih0LnNoYXJlZC52YW8sIi5jdXJyZW50VkFPPyIsdC5zaGFyZWQudmFvLCIuY3VycmVudFZBTy5jb3VudDotMSIpfSkpOm51bGx9KCksbT1yKCJpbnN0YW5jZXMiLCExKTtyZXR1cm57ZWxlbWVudHM6ZixwcmltaXRpdmU6cCxjb3VudDpkLGluc3RhbmNlczptLG9mZnNldDpoLHZhbzpsLHZhb0FjdGl2ZTpzLGVsZW1lbnRzQWN0aXZlOmMsc3RhdGljOmF9fWZ1bmN0aW9uIGsodCxyKXt2YXIgbj10LnN0YXRpYyxhPXQuZHluYW1pYyxvPXt9O3JldHVybiBPYmplY3Qua2V5cyhuKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uW3RdLGE9ZS5pZCh0KSxzPW5ldyBRO2lmKEkocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWkuZ2V0QnVmZmVyKGkuY3JlYXRlKHIsMzQ5NjIsITEsITApKSxzLnR5cGU9MDtlbHNlIGlmKGM9aS5nZXRCdWZmZXIocikpcy5zdGF0ZT0xLHMuYnVmZmVyPWMscy50eXBlPTA7ZWxzZSBpZigiY29uc3RhbnQiaW4gcil7dmFyIGw9ci5jb25zdGFudDtzLmJ1ZmZlcj0ibnVsbCIscy5zdGF0ZT0yLCJudW1iZXIiPT10eXBlb2YgbD9zLng9bDpfdC5mb3JFYWNoKChmdW5jdGlvbih0LGUpe2U8bC5sZW5ndGgmJihzW3RdPWxbZV0pfSkpfWVsc2V7dmFyIGM9SShyLmJ1ZmZlcik/aS5nZXRCdWZmZXIoaS5jcmVhdGUoci5idWZmZXIsMzQ5NjIsITEsITApKTppLmdldEJ1ZmZlcihyLmJ1ZmZlciksdT0wfHIub2Zmc2V0LGY9MHxyLnN0cmlkZSxoPTB8ci5zaXplLHA9ISFyLm5vcm1hbGl6ZWQsZD0wOyJ0eXBlImluIHImJihkPUtbci50eXBlXSkscj0wfHIuZGl2aXNvcixzLmJ1ZmZlcj1jLHMuc3RhdGU9MSxzLnNpemU9aCxzLm5vcm1hbGl6ZWQ9cCxzLnR5cGU9ZHx8Yy5kdHlwZSxzLm9mZnNldD11LHMuc3RyaWRlPWYscy5kaXZpc29yPXJ9b1t0XT1SKChmdW5jdGlvbih0LGUpe3ZhciByPXQuYXR0cmliQ2FjaGU7aWYoYSBpbiByKXJldHVybiByW2FdO3ZhciBuPXtpc1N0cmVhbTohMX07cmV0dXJuIE9iamVjdC5rZXlzKHMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe25bdF09c1t0XX0pKSxzLmJ1ZmZlciYmKG4uYnVmZmVyPXQubGluayhzLmJ1ZmZlciksbi50eXBlPW4udHlwZXx8bi5idWZmZXIrIi5kdHlwZSIpLHJbYV09bn0pKX0pKSxPYmplY3Qua2V5cyhhKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1hW3RdO29bdF09RihlLChmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7cihsW3RdLCI9IixpLCIuIix0LCJ8MDsiKX12YXIgaT10Lmludm9rZShyLGUpLGE9dC5zaGFyZWQsbz10LmNvbnN0YW50cyxzPWEuaXNCdWZmZXJBcmdzLGw9KGE9YS5idWZmZXIse2lzU3RyZWFtOnIuZGVmKCExKX0pLGM9bmV3IFE7Yy5zdGF0ZT0xLE9iamVjdC5rZXlzKGMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2xbdF09ci5kZWYoIiIrY1t0XSl9KSk7dmFyIHU9bC5idWZmZXIsZj1sLnR5cGU7cmV0dXJuIHIoImlmKCIscywiKCIsaSwiKSl7IixsLmlzU3RyZWFtLCI9dHJ1ZTsiLHUsIj0iLGEsIi5jcmVhdGVTdHJlYW0oIiwzNDk2MiwiLCIsaSwiKTsiLGYsIj0iLHUsIi5kdHlwZTsiLCJ9ZWxzZXsiLHUsIj0iLGEsIi5nZXRCdWZmZXIoIixpLCIpOyIsImlmKCIsdSwiKXsiLGYsIj0iLHUsIi5kdHlwZTsiLCd9ZWxzZSBpZigiY29uc3RhbnQiIGluICcsaSwiKXsiLGwuc3RhdGUsIj0iLDIsIjsiLCJpZih0eXBlb2YgIitpKycuY29uc3RhbnQgPT09ICJudW1iZXIiKXsnLGxbX3RbMF1dLCI9IixpLCIuY29uc3RhbnQ7IixfdC5zbGljZSgxKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBsW3RdfSkpLmpvaW4oIj0iKSwiPTA7IiwifWVsc2V7IixfdC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGxbdF0rIj0iK2krIi5jb25zdGFudC5sZW5ndGg+IitlKyI/IitpKyIuY29uc3RhbnRbIitlKyJdOjA7In0pKS5qb2luKCIiKSwifX1lbHNleyIsImlmKCIscywiKCIsaSwiLmJ1ZmZlcikpeyIsdSwiPSIsYSwiLmNyZWF0ZVN0cmVhbSgiLDM0OTYyLCIsIixpLCIuYnVmZmVyKTsiLCJ9ZWxzZXsiLHUsIj0iLGEsIi5nZXRCdWZmZXIoIixpLCIuYnVmZmVyKTsiLCJ9IixmLCc9InR5cGUiIGluICcsaSwiPyIsby5nbFR5cGVzLCJbIixpLCIudHlwZV06Iix1LCIuZHR5cGU7IixsLm5vcm1hbGl6ZWQsIj0hISIsaSwiLm5vcm1hbGl6ZWQ7Iiksbigic2l6ZSIpLG4oIm9mZnNldCIpLG4oInN0cmlkZSIpLG4oImRpdmlzb3IiKSxyKCJ9fSIpLHIuZXhpdCgiaWYoIixsLmlzU3RyZWFtLCIpeyIsYSwiLmRlc3Ryb3lTdHJlYW0oIix1LCIpOyIsIn0iKSxsfSkpfSkpLG99ZnVuY3Rpb24gQSh0LGUsbixpLG8pe2Z1bmN0aW9uIHModCl7dmFyIGU9Y1t0XTtlJiYoaFt0XT1lKX12YXIgbD1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciPT10eXBlb2Yocj10LnN0YXRpYykuZnJhZyYmInN0cmluZyI9PXR5cGVvZiByLnZlcnQpe2lmKDA8T2JqZWN0LmtleXMoZS5keW5hbWljKS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI9ZS5zdGF0aWMsbj1PYmplY3Qua2V5cyhyKTtpZigwPG4ubGVuZ3RoJiYibnVtYmVyIj09dHlwZW9mIHJbblswXV0pe2Zvcih2YXIgaT1bXSxhPTA7YTxuLmxlbmd0aDsrK2EpaS5wdXNoKFswfHJbblthXV0sblthXV0pO3JldHVybiBpfX1yZXR1cm4gbnVsbH0odCxlKSxjPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2lmKHQgaW4gaSl7dmFyIHI9aVt0XTt0PSEwO3ZhciBuLG8scz0wfHIueCxsPTB8ci55O3JldHVybiJ3aWR0aCJpbiByP249MHxyLndpZHRoOnQ9ITEsImhlaWdodCJpbiByP289MHxyLmhlaWdodDp0PSExLG5ldyB6KCF0JiZlJiZlLnRoaXNEZXAsIXQmJmUmJmUuY29udGV4dERlcCwhdCYmZSYmZS5wcm9wRGVwLChmdW5jdGlvbih0LGUpe3ZhciBpPXQuc2hhcmVkLmNvbnRleHQsYT1uOyJ3aWR0aCJpbiByfHwoYT1lLmRlZihpLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLHMpKTt2YXIgYz1vO3JldHVybiJoZWlnaHQiaW4gcnx8KGM9ZS5kZWYoaSwiLiIsImZyYW1lYnVmZmVySGVpZ2h0IiwiLSIsbCkpLFtzLGwsYSxjXX0pKX1pZih0IGluIGEpe3ZhciBjPWFbdF07cmV0dXJuIHQ9RihjLChmdW5jdGlvbih0LGUpe3ZhciByPXQuaW52b2tlKGUsYyksbj10LnNoYXJlZC5jb250ZXh0LGk9ZS5kZWYociwiLnh8MCIpLGE9ZS5kZWYociwiLnl8MCIpO3JldHVybltpLGEsZS5kZWYoJyJ3aWR0aCIgaW4gJyxyLCI/IixyLCIud2lkdGh8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJXaWR0aCIsIi0iLGksIikiKSxyPWUuZGVmKCciaGVpZ2h0IiBpbiAnLHIsIj8iLHIsIi5oZWlnaHR8MDoiLCIoIixuLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiLCItIixhLCIpIildfSkpLGUmJih0LnRoaXNEZXA9dC50aGlzRGVwfHxlLnRoaXNEZXAsdC5jb250ZXh0RGVwPXQuY29udGV4dERlcHx8ZS5jb250ZXh0RGVwLHQucHJvcERlcD10LnByb3BEZXB8fGUucHJvcERlcCksdH1yZXR1cm4gZT9uZXcgeihlLnRoaXNEZXAsZS5jb250ZXh0RGVwLGUucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj10LnNoYXJlZC5jb250ZXh0O3JldHVyblswLDAsZS5kZWYociwiLiIsImZyYW1lYnVmZmVyV2lkdGgiKSxlLmRlZihyLCIuIiwiZnJhbWVidWZmZXJIZWlnaHQiKV19KSk6bnVsbH12YXIgaT10LnN0YXRpYyxhPXQuZHluYW1pYztpZih0PW4oInZpZXdwb3J0Iikpe3ZhciBvPXQ7dD1uZXcgeih0LnRoaXNEZXAsdC5jb250ZXh0RGVwLHQucHJvcERlcCwoZnVuY3Rpb24odCxlKXt2YXIgcj1vLmFwcGVuZCh0LGUpLG49dC5zaGFyZWQuY29udGV4dDtyZXR1cm4gZS5zZXQobiwiLnZpZXdwb3J0V2lkdGgiLHJbMl0pLGUuc2V0KG4sIi52aWV3cG9ydEhlaWdodCIsclszXSkscn0pKX1yZXR1cm57dmlld3BvcnQ6dCxzY2lzc29yX2JveDpuKCJzY2lzc29yLmJveCIpfX0odCxkPV8odCkpLGY9VCh0KSxoPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gb3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGEpe2lmKHQgaW4gcil7dmFyIHM9ZShyW3RdKTtpW29dPVIoKGZ1bmN0aW9uKCl7cmV0dXJuIHN9KSl9ZWxzZSBpZih0IGluIG4pe3ZhciBsPW5bdF07aVtvXT1GKGwsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEodCxlLHQuaW52b2tlKGUsbCkpfSkpfX12YXIgbz12KHQpO3N3aXRjaCh0KXtjYXNlImN1bGwuZW5hYmxlIjpjYXNlImJsZW5kLmVuYWJsZSI6Y2FzZSJkaXRoZXIiOmNhc2Uic3RlbmNpbC5lbmFibGUiOmNhc2UiZGVwdGguZW5hYmxlIjpjYXNlInNjaXNzb3IuZW5hYmxlIjpjYXNlInBvbHlnb25PZmZzZXQuZW5hYmxlIjpjYXNlInNhbXBsZS5hbHBoYSI6Y2FzZSJzYW1wbGUuZW5hYmxlIjpjYXNlImRlcHRoLm1hc2siOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KSk7Y2FzZSJkZXB0aC5mdW5jIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIGt0W3RdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYodC5jb25zdGFudHMuY29tcGFyZUZ1bmNzLCJbIixyLCJdIil9KSk7Y2FzZSJkZXB0aC5yYW5nZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoIisiLHIsIlswXSIpLGU9ZS5kZWYoIisiLHIsIlsxXSIpXX0pKTtjYXNlImJsZW5kLmZ1bmMiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bVHRbInNyY1JHQiJpbiB0P3Quc3JjUkdCOnQuc3JjXSxUdFsiZHN0UkdCImluIHQ/dC5kc3RSR0I6dC5kc3RdLFR0WyJzcmNBbHBoYSJpbiB0P3Quc3JjQWxwaGE6dC5zcmNdLFR0WyJkc3RBbHBoYSJpbiB0P3QuZHN0QWxwaGE6dC5kc3RdXX0pLChmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LG4pe3JldHVybiBlLmRlZignIicsdCxuLCciIGluICcsciwiPyIsciwiLiIsdCxuLCI6IixyLCIuIix0KX10PXQuY29uc3RhbnRzLmJsZW5kRnVuY3M7dmFyIGk9bigic3JjIiwiUkdCIiksYT1uKCJkc3QiLCJSR0IiKSxvPShpPWUuZGVmKHQsIlsiLGksIl0iKSxlLmRlZih0LCJbIixuKCJzcmMiLCJBbHBoYSIpLCJdIikpO3JldHVybltpLGE9ZS5kZWYodCwiWyIsYSwiXSIpLG8sdD1lLmRlZih0LCJbIixuKCJkc3QiLCJBbHBoYSIpLCJdIildfSkpO2Nhc2UiYmxlbmQuZXF1YXRpb24iOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/WyRbdF0sJFt0XV06Im9iamVjdCI9PXR5cGVvZiB0P1skW3QucmdiXSwkW3QuYWxwaGFdXTp2b2lkIDB9KSwoZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uc3RhbnRzLmJsZW5kRXF1YXRpb25zLGk9ZS5kZWYoKSxhPWUuZGVmKCk7cmV0dXJuKHQ9dC5jb25kKCJ0eXBlb2YgIixyLCc9PT0ic3RyaW5nIicpKS50aGVuKGksIj0iLGEsIj0iLG4sIlsiLHIsIl07IiksdC5lbHNlKGksIj0iLG4sIlsiLHIsIi5yZ2JdOyIsYSwiPSIsbiwiWyIsciwiLmFscGhhXTsiKSxlKHQpLFtpLGFdfSkpO2Nhc2UiYmxlbmQuY29sb3IiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gYSg0LChmdW5jdGlvbihlKXtyZXR1cm4rdFtlXX0pKX0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIGEoNCwoZnVuY3Rpb24odCl7cmV0dXJuIGUuZGVmKCIrIixyLCJbIix0LCJdIil9KSl9KSk7Y2FzZSJzdGVuY2lsLm1hc2siOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gMHx0fSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZS5kZWYociwifDAiKX0pKTtjYXNlInN0ZW5jaWwuZnVuYyI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3JldHVybltrdFt0LmNtcHx8ImtlZXAiXSx0LnJlZnx8MCwibWFzayJpbiB0P3QubWFzazotMV19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVyblt0PWUuZGVmKCciY21wIiBpbiAnLHIsIj8iLHQuY29uc3RhbnRzLmNvbXBhcmVGdW5jcywiWyIsciwiLmNtcF0iLCI6Iiw3NjgwKSxlLmRlZihyLCIucmVmfDAiKSxlPWUuZGVmKCcibWFzayIgaW4gJyxyLCI/IixyLCIubWFza3wwOi0xIildfSkpO2Nhc2Uic3RlbmNpbC5vcEZyb250IjpjYXNlInN0ZW5jaWwub3BCYWNrIjpyZXR1cm4gZSgoZnVuY3Rpb24oZSl7cmV0dXJuWyJzdGVuY2lsLm9wQmFjayI9PT10PzEwMjk6MTAyOCxBdFtlLmZhaWx8fCJrZWVwIl0sQXRbZS56ZmFpbHx8ImtlZXAiXSxBdFtlLnpwYXNzfHwia2VlcCJdXX0pLChmdW5jdGlvbihlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gci5kZWYoJyInLHQsJyIgaW4gJyxuLCI/IixhLCJbIixuLCIuIix0LCJdOiIsNzY4MCl9dmFyIGE9ZS5jb25zdGFudHMuc3RlbmNpbE9wcztyZXR1cm5bInN0ZW5jaWwub3BCYWNrIj09PXQ/MTAyOToxMDI4LGkoImZhaWwiKSxpKCJ6ZmFpbCIpLGkoInpwYXNzIildfSkpO2Nhc2UicG9seWdvbk9mZnNldC5vZmZzZXQiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bMHx0LmZhY3RvciwwfHQudW5pdHNdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYociwiLmZhY3RvcnwwIiksZT1lLmRlZihyLCIudW5pdHN8MCIpXX0pKTtjYXNlImN1bGwuZmFjZSI6cmV0dXJuIGUoKGZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuImZyb250Ij09PXQ/ZT0xMDI4OiJiYWNrIj09PXQmJihlPTEwMjkpLGV9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyLCc9PT0iZnJvbnQiPycsMTAyOCwiOiIsMTAyOSl9KSk7Y2FzZSJsaW5lV2lkdGgiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pLChmdW5jdGlvbih0LGUscil7cmV0dXJuIHJ9KSk7Y2FzZSJmcm9udEZhY2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm4gTXRbdF19KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBlLmRlZihyKyc9PT0iY3ciPzIzMDQ6MjMwNScpfSkpO2Nhc2UiY29sb3JNYXNrIjpyZXR1cm4gZSgoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSl9KSwoZnVuY3Rpb24odCxlLHIpe3JldHVybiBhKDQsKGZ1bmN0aW9uKHQpe3JldHVybiIhISIrcisiWyIrdCsiXSJ9KSl9KSk7Y2FzZSJzYW1wbGUuY292ZXJhZ2UiOnJldHVybiBlKChmdW5jdGlvbih0KXtyZXR1cm5bInZhbHVlImluIHQ/dC52YWx1ZToxLCEhdC5pbnZlcnRdfSksKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5kZWYoJyJ2YWx1ZSIgaW4gJyxyLCI/KyIsciwiLnZhbHVlOjEiKSxlPWUuZGVmKCIhISIsciwiLmludmVydCIpXX0pKX19KSksaX0odCkscD13KHQsMCxsKTtzKCJ2aWV3cG9ydCIpLHModigic2Npc3Nvci5ib3giKSk7dmFyIGQsbT0wPE9iamVjdC5rZXlzKGgpLmxlbmd0aDtpZigoZD17ZnJhbWVidWZmZXI6ZCxkcmF3OmYsc2hhZGVyOnAsc3RhdGU6aCxkaXJ0eTptLHNjb3BlVkFPOm51bGwsZHJhd1ZBTzpudWxsLHVzZVZBTzohMSxhdHRyaWJ1dGVzOnt9fSkucHJvZmlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuc3RhdGljO2lmKHQ9dC5keW5hbWljLCJwcm9maWxlImluIHIpe3ZhciBuPSEhci5wcm9maWxlOyhlPVIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG59KSkpLmVuYWJsZT1ufWVsc2UgaWYoInByb2ZpbGUiaW4gdCl7dmFyIGk9dC5wcm9maWxlO2U9RihpLChmdW5jdGlvbih0LGUpe3JldHVybiB0Lmludm9rZShlLGkpfSkpfXJldHVybiBlfSh0KSxkLnVuaWZvcm1zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdGF0aWMsbj10LmR5bmFtaWMsaT17fTtyZXR1cm4gT2JqZWN0LmtleXMocikuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUsbj1yW3RdO2lmKCJudW1iZXIiPT10eXBlb2Ygbnx8ImJvb2xlYW4iPT10eXBlb2YgbillPVIoKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2Ygbil7dmFyIG89bi5fcmVnbFR5cGU7InRleHR1cmUyZCI9PT1vfHwidGV4dHVyZUN1YmUiPT09bz9lPVIoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxpbmsobil9KSk6ImZyYW1lYnVmZmVyIiE9PW8mJiJmcmFtZWJ1ZmZlckN1YmUiIT09b3x8KGU9UigoZnVuY3Rpb24odCl7cmV0dXJuIHQubGluayhuLmNvbG9yWzBdKX0pKSl9ZWxzZSBnKG4pJiYoZT1SKChmdW5jdGlvbih0KXtyZXR1cm4gdC5nbG9iYWwuZGVmKCJbIixhKG4ubGVuZ3RoLChmdW5jdGlvbih0KXtyZXR1cm4gblt0XX0pKSwiXSIpfSkpKTtlLnZhbHVlPW4saVt0XT1lfSkpLE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07aVt0XT1GKGUsKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaW52b2tlKHIsZSl9KSl9KSksaX0obiksZC5kcmF3VkFPPWQuc2NvcGVWQU89Zi52YW8sIWQuZHJhd1ZBTyYmcC5wcm9ncmFtJiYhbCYmci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzJiZmLnN0YXRpYy5lbGVtZW50cyl7dmFyIHk9ITA7aWYodD1wLnByb2dyYW0uYXR0cmlidXRlcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0PWUuc3RhdGljW3RdLHk9eSYmISF0LHR9KSkseSYmMDx0Lmxlbmd0aCl7dmFyIHg9dS5nZXRWQU8odS5jcmVhdGVWQU8oe2F0dHJpYnV0ZXM6dCxlbGVtZW50czpmLnN0YXRpYy5lbGVtZW50c30pKTtkLmRyYXdWQU89bmV3IHoobnVsbCxudWxsLG51bGwsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGluayh4KX0pKSxkLnVzZVZBTz0hMH19cmV0dXJuIGw/ZC51c2VWQU89ITA6ZC5hdHRyaWJ1dGVzPWsoZSksZC5jb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPXQuc3RhdGljLHI9dC5keW5hbWljLG49e307cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPWVbdF07blt0XT1SKChmdW5jdGlvbih0LGUpe3JldHVybiJudW1iZXIiPT10eXBlb2Ygcnx8ImJvb2xlYW4iPT10eXBlb2Ygcj8iIityOnQubGluayhyKX0pKX0pKSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdO25bdF09RihlLChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmludm9rZShyLGUpfSkpfSkpLG59KGkpLGR9ZnVuY3Rpb24gTSh0LGUscil7dmFyIG49dC5zaGFyZWQuY29udGV4dCxpPXQuc2NvcGUoKTtPYmplY3Qua2V5cyhyKS5mb3JFYWNoKChmdW5jdGlvbihhKXtlLnNhdmUobiwiLiIrYSk7dmFyIG89clthXS5hcHBlbmQodCxlKTtBcnJheS5pc0FycmF5KG8pP2kobiwiLiIsYSwiPVsiLG8uam9pbigpLCJdOyIpOmkobiwiLiIsYSwiPSIsbywiOyIpfSkpLGUoaSl9ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaSxhPShzPXQuc2hhcmVkKS5nbCxvPXMuZnJhbWVidWZmZXI7ZXQmJihpPWUuZGVmKHMuZXh0ZW5zaW9ucywiLndlYmdsX2RyYXdfYnVmZmVycyIpKTt2YXIgcz0obD10LmNvbnN0YW50cykuZHJhd0J1ZmZlcixsPWwuYmFja0J1ZmZlcjt0PXI/ci5hcHBlbmQodCxlKTplLmRlZihvLCIubmV4dCIpLG58fGUoImlmKCIsdCwiIT09IixvLCIuY3VyKXsiKSxlKCJpZigiLHQsIil7IixhLCIuYmluZEZyYW1lYnVmZmVyKCIsMzYxNjAsIiwiLHQsIi5mcmFtZWJ1ZmZlcik7IiksZXQmJmUoaSwiLmRyYXdCdWZmZXJzV0VCR0woIixzLCJbIix0LCIuY29sb3JBdHRhY2htZW50cy5sZW5ndGhdKTsiKSxlKCJ9ZWxzZXsiLGEsIi5iaW5kRnJhbWVidWZmZXIoIiwzNjE2MCwiLG51bGwpOyIpLGV0JiZlKGksIi5kcmF3QnVmZmVyc1dFQkdMKCIsbCwiKTsiKSxlKCJ9IixvLCIuY3VyPSIsdCwiOyIpLG58fGUoIn0iKX1mdW5jdGlvbiBFKHQsZSxyKXt2YXIgbj10LnNoYXJlZCxpPW4uZ2wsbz10LmN1cnJlbnQscz10Lm5leHQsbD1uLmN1cnJlbnQsYz1uLm5leHQsdT10LmNvbmQobCwiLmRpcnR5Iik7b3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIG4sZjtpZighKChlPXYoZSkpaW4gci5zdGF0ZSkpaWYoZSBpbiBzKXtuPXNbZV0sZj1vW2VdO3ZhciBoPWEoaXRbZV0ubGVuZ3RoLChmdW5jdGlvbih0KXtyZXR1cm4gdS5kZWYobiwiWyIsdCwiXSIpfSkpO3UodC5jb25kKGgubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB0KyIhPT0iK2YrIlsiK2UrIl0ifSkpLmpvaW4oInx8IikpLnRoZW4oaSwiLiIsbHRbZV0sIigiLGgsIik7IixoLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZisiWyIrZSsiXT0iK3R9KSkuam9pbigiOyIpLCI7IikpfWVsc2Ugbj11LmRlZihjLCIuIixlKSxoPXQuY29uZChuLCIhPT0iLGwsIi4iLGUpLHUoaCksZSBpbiBzdD9oKHQuY29uZChuKS50aGVuKGksIi5lbmFibGUoIixzdFtlXSwiKTsiKS5lbHNlKGksIi5kaXNhYmxlKCIsc3RbZV0sIik7IiksbCwiLiIsZSwiPSIsbiwiOyIpOmgoaSwiLiIsbHRbZV0sIigiLG4sIik7IixsLCIuIixlLCI9IixuLCI7Iil9KSksMD09PU9iamVjdC5rZXlzKHIuc3RhdGUpLmxlbmd0aCYmdShsLCIuZGlydHk9ZmFsc2U7IiksZSh1KX1mdW5jdGlvbiBMKHQsZSxyLG4pe3ZhciBpPXQuc2hhcmVkLGE9dC5jdXJyZW50LG89aS5jdXJyZW50LHM9aS5nbDtPKE9iamVjdC5rZXlzKHIpKS5mb3JFYWNoKChmdW5jdGlvbihpKXt2YXIgbD1yW2ldO2lmKCFufHxuKGwpKXt2YXIgYz1sLmFwcGVuZCh0LGUpO2lmKHN0W2ldKXt2YXIgdT1zdFtpXTtEKGwpP2UocyxjPyIuZW5hYmxlKCI6Ii5kaXNhYmxlKCIsdSwiKTsiKTplKHQuY29uZChjKS50aGVuKHMsIi5lbmFibGUoIix1LCIpOyIpLmVsc2UocywiLmRpc2FibGUoIix1LCIpOyIpKSxlKG8sIi4iLGksIj0iLGMsIjsiKX1lbHNlIGlmKGcoYykpe3ZhciBmPWFbaV07ZShzLCIuIixsdFtpXSwiKCIsYywiKTsiLGMubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBmKyJbIitlKyJdPSIrdH0pKS5qb2luKCI7IiksIjsiKX1lbHNlIGUocywiLiIsbHRbaV0sIigiLGMsIik7IixvLCIuIixpLCI9IixjLCI7Iil9fSkpfWZ1bmN0aW9uIEIodCxlKXt0dCYmKHQuaW5zdGFuY2luZz1lLmRlZih0LnNoYXJlZC5leHRlbnNpb25zLCIuYW5nbGVfaW5zdGFuY2VkX2FycmF5cyIpKX1mdW5jdGlvbiBOKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgcGVyZm9ybWFuY2U/IkRhdGUubm93KCkiOiJwZXJmb3JtYW5jZS5ub3coKSJ9ZnVuY3Rpb24gbyh0KXt0KGM9ZS5kZWYoKSwiPSIsYSgpLCI7IiksInN0cmluZyI9PXR5cGVvZiBpP3QoaCwiLmNvdW50Kz0iLGksIjsiKTp0KGgsIi5jb3VudCsrOyIpLGQmJihuP3QodT1lLmRlZigpLCI9IixtLCIuZ2V0TnVtUGVuZGluZ1F1ZXJpZXMoKTsiKTp0KG0sIi5iZWdpblF1ZXJ5KCIsaCwiKTsiKSl9ZnVuY3Rpb24gcyh0KXt0KGgsIi5jcHVUaW1lKz0iLGEoKSwiLSIsYywiOyIpLGQmJihuP3QobSwiLnB1c2hTY29wZVN0YXRzKCIsdSwiLCIsbSwiLmdldE51bVBlbmRpbmdRdWVyaWVzKCksIixoLCIpOyIpOnQobSwiLmVuZFF1ZXJ5KCk7IikpfWZ1bmN0aW9uIGwodCl7dmFyIHI9ZS5kZWYocCwiLnByb2ZpbGUiKTtlKHAsIi5wcm9maWxlPSIsdCwiOyIpLGUuZXhpdChwLCIucHJvZmlsZT0iLHIsIjsiKX12YXIgYyx1LGY9dC5zaGFyZWQsaD10LnN0YXRzLHA9Zi5jdXJyZW50LG09Zi50aW1lcjtpZihyPXIucHJvZmlsZSl7aWYoRChyKSlyZXR1cm4gdm9pZChyLmVuYWJsZT8obyhlKSxzKGUuZXhpdCksbCgidHJ1ZSIpKTpsKCJmYWxzZSIpKTtsKHI9ci5hcHBlbmQodCxlKSl9ZWxzZSByPWUuZGVmKHAsIi5wcm9maWxlIik7byhmPXQuYmxvY2soKSksZSgiaWYoIixyLCIpeyIsZiwifSIpLHModD10LmJsb2NrKCkpLGUuZXhpdCgiaWYoIixyLCIpeyIsdCwifSIpfWZ1bmN0aW9uIFUodCxlLHIsbixpKXtmdW5jdGlvbiBhKHIsbixpKXtmdW5jdGlvbiBhKCl7ZSgiaWYoISIsdSwiLmJ1ZmZlcil7IixsLCIuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpO30iKTt2YXIgcixhPWkudHlwZTtyPWkuc2l6ZT9lLmRlZihpLnNpemUsInx8IixuKTpuLGUoImlmKCIsdSwiLnR5cGUhPT0iLGEsInx8Iix1LCIuc2l6ZSE9PSIsciwifHwiLHAubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdSsiLiIrdCsiIT09IitpW3RdfSkpLmpvaW4oInx8IiksIil7IixsLCIuYmluZEJ1ZmZlcigiLDM0OTYyLCIsIixmLCIuYnVmZmVyKTsiLGwsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsW2MscixhLGkubm9ybWFsaXplZCxpLnN0cmlkZSxpLm9mZnNldF0sIik7Iix1LCIudHlwZT0iLGEsIjsiLHUsIi5zaXplPSIsciwiOyIscC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB1KyIuIit0KyI9IitpW3RdKyI7In0pKS5qb2luKCIiKSwifSIpLHR0JiYoYT1pLmRpdmlzb3IsZSgiaWYoIix1LCIuZGl2aXNvciE9PSIsYSwiKXsiLHQuaW5zdGFuY2luZywiLnZlcnRleEF0dHJpYkRpdmlzb3JBTkdMRSgiLFtjLGFdLCIpOyIsdSwiLmRpdmlzb3I9IixhLCI7fSIpKX1mdW5jdGlvbiBzKCl7ZSgiaWYoIix1LCIuYnVmZmVyKXsiLGwsIi5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoIixjLCIpOyIsdSwiLmJ1ZmZlcj1udWxsOyIsIn1pZigiLF90Lm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdSsiLiIrdCsiIT09IitoW2VdfSkpLmpvaW4oInx8IiksIil7IixsLCIudmVydGV4QXR0cmliNGYoIixjLCIsIixoLCIpOyIsX3QubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiB1KyIuIit0KyI9IitoW2VdKyI7In0pKS5qb2luKCIiKSwifSIpfXZhciBsPW8uZ2wsYz1lLmRlZihyLCIubG9jYXRpb24iKSx1PWUuZGVmKG8uYXR0cmlidXRlcywiWyIsYywiXSIpO3I9aS5zdGF0ZTt2YXIgZj1pLmJ1ZmZlcixoPVtpLngsaS55LGkueixpLnddLHA9WyJidWZmZXIiLCJub3JtYWxpemVkIiwib2Zmc2V0Iiwic3RyaWRlIl07MT09PXI/YSgpOjI9PT1yP3MoKTooZSgiaWYoIixyLCI9PT0iLDEsIil7IiksYSgpLGUoIn1lbHNleyIpLHMoKSxlKCJ9IikpfXZhciBvPXQuc2hhcmVkO24uZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG8scz1uLm5hbWUsbD1yLmF0dHJpYnV0ZXNbc107aWYobCl7aWYoIWkobCkpcmV0dXJuO289bC5hcHBlbmQodCxlKX1lbHNle2lmKCFpKFN0KSlyZXR1cm47dmFyIGM9dC5zY29wZUF0dHJpYihzKTtvPXt9LE9iamVjdC5rZXlzKG5ldyBRKS5mb3JFYWNoKChmdW5jdGlvbih0KXtvW3RdPWUuZGVmKGMsIi4iLHQpfSkpfWEodC5saW5rKG4pLGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIDM1NjY0OmNhc2UgMzU2Njc6Y2FzZSAzNTY3MTpyZXR1cm4gMjtjYXNlIDM1NjY1OmNhc2UgMzU2Njg6Y2FzZSAzNTY3MjpyZXR1cm4gMztjYXNlIDM1NjY2OmNhc2UgMzU2Njk6Y2FzZSAzNTY3MzpyZXR1cm4gNDtkZWZhdWx0OnJldHVybiAxfX0obi5pbmZvLnR5cGUpLG8pfSkpfWZ1bmN0aW9uIEgodCxyLG4saSxvLHMpe2Zvcih2YXIgbCxjPXQuc2hhcmVkLHU9Yy5nbCxmPXt9LGg9MDtoPGkubGVuZ3RoOysraCl7dmFyIHA9KGI9aVtoXSkubmFtZSxkPWIuaW5mby50eXBlLG09Yi5pbmZvLnNpemUsdj1uLnVuaWZvcm1zW3BdO2lmKDE8bSl7aWYoIXYpY29udGludWU7dmFyIHk9cC5yZXBsYWNlKCJbMF0iLCIiKTtpZihmW3ldKWNvbnRpbnVlO2ZbeV09MX12YXIgeCxiPXQubGluayhiKSsiLmxvY2F0aW9uIjtpZih2KXtpZighbyh2KSljb250aW51ZTtpZihEKHYpKXtpZihwPXYudmFsdWUsMzU2Nzg9PT1kfHwzNTY4MD09PWQpcih1LCIudW5pZm9ybTFpKCIsYiwiLCIsKGQ9dC5saW5rKHAuX3RleHR1cmV8fHAuY29sb3JbMF0uX3RleHR1cmUpKSsiLmJpbmQoKSk7Iiksci5leGl0KGQsIi51bmJpbmQoKTsiKTtlbHNlIGlmKDM1Njc0PT09ZHx8MzU2NzU9PT1kfHwzNTY3Nj09PWQpbT10Lmdsb2JhbC5kZWYoIm5ldyBGbG9hdDMyQXJyYXkoWyIrQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCkrIl0pIikscD0yLDM1Njc1PT09ZD9wPTM6MzU2NzY9PT1kJiYocD00KSxyKHUsIi51bmlmb3JtTWF0cml4IixwLCJmdigiLGIsIixmYWxzZSwiLG0sIik7Iik7ZWxzZXtzd2l0Y2goZCl7Y2FzZSA1MTI2Omw9IjFmIjticmVhaztjYXNlIDM1NjY0Omw9IjJmIjticmVhaztjYXNlIDM1NjY1Omw9IjNmIjticmVhaztjYXNlIDM1NjY2Omw9IjRmIjticmVhaztjYXNlIDM1NjcwOmNhc2UgNTEyNDpsPSIxaSI7YnJlYWs7Y2FzZSAzNTY3MTpjYXNlIDM1NjY3Omw9IjJpIjticmVhaztjYXNlIDM1NjcyOmNhc2UgMzU2Njg6bD0iM2kiO2JyZWFrO2Nhc2UgMzU2NzM6bD0iNGkiO2JyZWFrO2Nhc2UgMzU2Njk6bD0iNGkifTE8bT8obCs9InYiLHA9dC5nbG9iYWwuZGVmKCJbIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwKSsiXSIpKTpwPWcocCk/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocCk6cCxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIixwLCIpOyIpfWNvbnRpbnVlfXg9di5hcHBlbmQodCxyKX1lbHNle2lmKCFvKFN0KSljb250aW51ZTt4PXIuZGVmKGMudW5pZm9ybXMsIlsiLGUuaWQocCksIl0iKX1zd2l0Y2goMzU2Nzg9PT1kP3IoImlmKCIseCwiJiYiLHgsJy5fcmVnbFR5cGU9PT0iZnJhbWVidWZmZXIiKXsnLHgsIj0iLHgsIi5jb2xvclswXTsiLCJ9Iik6MzU2ODA9PT1kJiZyKCJpZigiLHgsIiYmIix4LCcuX3JlZ2xUeXBlPT09ImZyYW1lYnVmZmVyQ3ViZSIpeycseCwiPSIseCwiLmNvbG9yWzBdOyIsIn0iKSxwPTEsZCl7Y2FzZSAzNTY3ODpjYXNlIDM1NjgwOmQ9ci5kZWYoeCwiLl90ZXh0dXJlIikscih1LCIudW5pZm9ybTFpKCIsYiwiLCIsZCwiLmJpbmQoKSk7Iiksci5leGl0KGQsIi51bmJpbmQoKTsiKTtjb250aW51ZTtjYXNlIDUxMjQ6Y2FzZSAzNTY3MDpsPSIxaSI7YnJlYWs7Y2FzZSAzNTY2NzpjYXNlIDM1NjcxOmw9IjJpIixwPTI7YnJlYWs7Y2FzZSAzNTY2ODpjYXNlIDM1NjcyOmw9IjNpIixwPTM7YnJlYWs7Y2FzZSAzNTY2OTpjYXNlIDM1NjczOmw9IjRpIixwPTQ7YnJlYWs7Y2FzZSA1MTI2Omw9IjFmIjticmVhaztjYXNlIDM1NjY0Omw9IjJmIixwPTI7YnJlYWs7Y2FzZSAzNTY2NTpsPSIzZiIscD0zO2JyZWFrO2Nhc2UgMzU2NjY6bD0iNGYiLHA9NDticmVhaztjYXNlIDM1Njc0Omw9Ik1hdHJpeDJmdiI7YnJlYWs7Y2FzZSAzNTY3NTpsPSJNYXRyaXgzZnYiO2JyZWFrO2Nhc2UgMzU2NzY6bD0iTWF0cml4NGZ2In1pZigtMT09PWwuaW5kZXhPZigiTWF0cml4IikmJjE8bSYmKGwrPSJ2IixwPTEpLCJNIj09PWwuY2hhckF0KDApKXtyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIik7Yj1NYXRoLnBvdyhkLTM1Njc0KzIsMik7dmFyIF89dC5nbG9iYWwuZGVmKCJuZXcgRmxvYXQzMkFycmF5KCIsYiwiKSIpO0FycmF5LmlzQXJyYXkoeCk/cigiZmFsc2UsKCIsYShiLChmdW5jdGlvbih0KXtyZXR1cm4gXysiWyIrdCsiXT0iK3hbdF19KSksIiwiLF8sIikiKTpyKCJmYWxzZSwoQXJyYXkuaXNBcnJheSgiLHgsIil8fCIseCwiIGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KT8iLHgsIjooIixhKGIsKGZ1bmN0aW9uKHQpe3JldHVybiBfKyJbIit0KyJdPSIreCsiWyIrdCsiXSJ9KSksIiwiLF8sIikiKSxyKCIpOyIpfWVsc2V7aWYoMTxwKXtkPVtdO3ZhciB3PVtdO2ZvcihtPTA7bTxwOysrbSlBcnJheS5pc0FycmF5KHgpP3cucHVzaCh4W21dKTp3LnB1c2goci5kZWYoeCsiWyIrbSsiXSIpKSxzJiZkLnB1c2goci5kZWYoKSk7cyYmcigiaWYoISIsdC5iYXRjaElkLCJ8fCIsZC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIiE9PSIrd1tlXX0pKS5qb2luKCJ8fCIpLCIpeyIsZC5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrIj0iK3dbZV0rIjsifSkpLmpvaW4oIiIpKSxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIix3LmpvaW4oIiwiKSwiKTsiKX1lbHNlIHMmJihkPXIuZGVmKCkscigiaWYoISIsdC5iYXRjaElkLCJ8fCIsZCwiIT09Iix4LCIpeyIsZCwiPSIseCwiOyIpKSxyKHUsIi51bmlmb3JtIixsLCIoIixiLCIsIix4LCIpOyIpO3MmJnIoIn0iKX19fWZ1bmN0aW9uIHEodCxlLHIsbil7ZnVuY3Rpb24gaShpKXt2YXIgYT1oW2ldO3JldHVybiBhP2EuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8YS5wcm9wRGVwP2EuYXBwZW5kKHQscik6YS5hcHBlbmQodCxlKTplLmRlZihmLCIuIixpKX1mdW5jdGlvbiBhKCl7ZnVuY3Rpb24gdCgpe3IobCwiLmRyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKCIsW2QsZyx2LG0rIjw8KCgiK3YrIi01MTIxKT4+MSkiLHNdLCIpOyIpfWZ1bmN0aW9uIGUoKXtyKGwsIi5kcmF3QXJyYXlzSW5zdGFuY2VkQU5HTEUoIixbZCxtLGcsc10sIik7Iil9cCYmIm51bGwiIT09cD95P3QoKToocigiaWYoIixwLCIpeyIpLHQoKSxyKCJ9ZWxzZXsiKSxlKCkscigifSIpKTplKCl9ZnVuY3Rpb24gbygpe2Z1bmN0aW9uIHQoKXtyKHUrIi5kcmF3RWxlbWVudHMoIitbZCxnLHYsbSsiPDwoKCIrdisiLTUxMjEpPj4xKSJdKyIpOyIpfWZ1bmN0aW9uIGUoKXtyKHUrIi5kcmF3QXJyYXlzKCIrW2QsbSxnXSsiKTsiKX1wJiYibnVsbCIhPT1wP3k/dCgpOihyKCJpZigiLHAsIil7IiksdCgpLHIoIn1lbHNleyIpLGUoKSxyKCJ9IikpOmUoKX12YXIgcyxsLGM9dC5zaGFyZWQsdT1jLmdsLGY9Yy5kcmF3LGg9bi5kcmF3LHA9ZnVuY3Rpb24oKXt2YXIgaT1oLmVsZW1lbnRzLGE9ZTtyZXR1cm4gaT8oKGkuY29udGV4dERlcCYmbi5jb250ZXh0RHluYW1pY3x8aS5wcm9wRGVwKSYmKGE9ciksaT1pLmFwcGVuZCh0LGEpLGguZWxlbWVudHNBY3RpdmUmJmEoImlmKCIraSsiKSIrdSsiLmJpbmRCdWZmZXIoMzQ5NjMsIitpKyIuYnVmZmVyLmJ1ZmZlcik7IikpOihpPWEuZGVmKCksYShpLCI9IixmLCIuIiwiZWxlbWVudHMiLCI7IiwiaWYoIixpLCIpeyIsdSwiLmJpbmRCdWZmZXIoIiwzNDk2MywiLCIsaSwiLmJ1ZmZlci5idWZmZXIpO30iLCJlbHNlIGlmKCIsYy52YW8sIi5jdXJyZW50VkFPKXsiLGksIj0iLHQuc2hhcmVkLmVsZW1lbnRzKyIuZ2V0RWxlbWVudHMoIitjLnZhbywiLmN1cnJlbnRWQU8uZWxlbWVudHMpOyIsbnQ/IiI6ImlmKCIraSsiKSIrdSsiLmJpbmRCdWZmZXIoMzQ5NjMsIitpKyIuYnVmZmVyLmJ1ZmZlcik7IiwifSIpKSxpfSgpLGQ9aSgicHJpbWl0aXZlIiksbT1pKCJvZmZzZXQiKSxnPWZ1bmN0aW9uKCl7dmFyIGk9aC5jb3VudCxhPWU7cmV0dXJuIGk/KChpLmNvbnRleHREZXAmJm4uY29udGV4dER5bmFtaWN8fGkucHJvcERlcCkmJihhPXIpLGk9aS5hcHBlbmQodCxhKSk6aT1hLmRlZihmLCIuIiwiY291bnQiKSxpfSgpO2lmKCJudW1iZXIiPT10eXBlb2YgZyl7aWYoMD09PWcpcmV0dXJufWVsc2UgcigiaWYoIixnLCIpeyIpLHIuZXhpdCgifSIpO3R0JiYocz1pKCJpbnN0YW5jZXMiKSxsPXQuaW5zdGFuY2luZyk7dmFyIHY9cCsiLnR5cGUiLHk9aC5lbGVtZW50cyYmRChoLmVsZW1lbnRzKSYmIWgudmFvQWN0aXZlO3R0JiYoIm51bWJlciIhPXR5cGVvZiBzfHwwPD1zKT8ic3RyaW5nIj09dHlwZW9mIHM/KHIoImlmKCIscywiPjApeyIpLGEoKSxyKCJ9ZWxzZSBpZigiLHMsIjwwKXsiKSxvKCkscigifSIpKTphKCk6bygpfWZ1bmN0aW9uIEcodCxlLHIsbixpKXtyZXR1cm4gaT0oZT1iKCkpLnByb2MoImJvZHkiLGkpLHR0JiYoZS5pbnN0YW5jaW5nPWkuZGVmKGUuc2hhcmVkLmV4dGVuc2lvbnMsIi5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzIikpLHQoZSxpLHIsbiksZS5jb21waWxlKCkuYm9keX1mdW5jdGlvbiBZKHQsZSxyLG4pe0IodCxlKSxyLnVzZVZBTz9yLmRyYXdWQU8/ZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIixyLmRyYXdWQU8uYXBwZW5kKHQsZSksIik7Iik6ZSh0LnNoYXJlZC52YW8sIi5zZXRWQU8oIix0LnNoYXJlZC52YW8sIi50YXJnZXRWQU8pOyIpOihlKHQuc2hhcmVkLnZhbywiLnNldFZBTyhudWxsKTsiKSxVKHQsZSxyLG4uYXR0cmlidXRlcywoZnVuY3Rpb24oKXtyZXR1cm4hMH0pKSksSCh0LGUscixuLnVuaWZvcm1zLChmdW5jdGlvbigpe3JldHVybiEwfSksITEpLHEodCxlLGUscil9ZnVuY3Rpb24gVyh0LGUscixuKXtmdW5jdGlvbiBpKCl7cmV0dXJuITB9dC5iYXRjaElkPSJhMSIsQih0LGUpLFUodCxlLHIsbi5hdHRyaWJ1dGVzLGkpLEgodCxlLHIsbi51bmlmb3JtcyxpLCExKSxxKHQsZSxlLHIpfWZ1bmN0aW9uIFgodCxlLHIsbil7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZvfHx0LnByb3BEZXB9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KX1CKHQsZSk7dmFyIG89ci5jb250ZXh0RGVwLHM9ZS5kZWYoKSxsPWUuZGVmKCk7dC5zaGFyZWQucHJvcHM9bCx0LmJhdGNoSWQ9czt2YXIgYz10LnNjb3BlKCksdT10LnNjb3BlKCk7ZShjLmVudHJ5LCJmb3IoIixzLCI9MDsiLHMsIjwiLCJhMSIsIjsrKyIscywiKXsiLGwsIj0iLCJhMCIsIlsiLHMsIl07Iix1LCJ9IixjLmV4aXQpLHIubmVlZHNDb250ZXh0JiZNKHQsdSxyLmNvbnRleHQpLHIubmVlZHNGcmFtZWJ1ZmZlciYmUyh0LHUsci5mcmFtZWJ1ZmZlciksTCh0LHUsci5zdGF0ZSxpKSxyLnByb2ZpbGUmJmkoci5wcm9maWxlKSYmTih0LHUsciwhMSwhMCksbj8oci51c2VWQU8/ci5kcmF3VkFPP2koci5kcmF3VkFPKT91KHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHIuZHJhd1ZBTy5hcHBlbmQodCx1KSwiKTsiKTpjKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHIuZHJhd1ZBTy5hcHBlbmQodCxjKSwiKTsiKTpjKHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7Iik6KGModC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpLFUodCxjLHIsbi5hdHRyaWJ1dGVzLGEpLFUodCx1LHIsbi5hdHRyaWJ1dGVzLGkpKSxIKHQsYyxyLG4udW5pZm9ybXMsYSwhMSksSCh0LHUscixuLnVuaWZvcm1zLGksITApLHEodCxjLHUscikpOihlPXQuZ2xvYmFsLmRlZigie30iKSxuPXIuc2hhZGVyLnByb2dWYXIuYXBwZW5kKHQsdSksbD11LmRlZihuLCIuaWQiKSxjPXUuZGVmKGUsIlsiLGwsIl0iKSx1KHQuc2hhcmVkLmdsLCIudXNlUHJvZ3JhbSgiLG4sIi5wcm9ncmFtKTsiLCJpZighIixjLCIpeyIsYywiPSIsZSwiWyIsbCwiXT0iLHQubGluaygoZnVuY3Rpb24oZSl7cmV0dXJuIEcoVyx0LHIsZSwyKX0pKSwiKCIsbiwiKTt9IixjLCIuY2FsbCh0aGlzLGEwWyIscywiXSwiLHMsIik7IikpfWZ1bmN0aW9uIFoodCxyKXtmdW5jdGlvbiBuKGUpe3ZhciBuPXIuc2hhZGVyW2VdO24mJmkuc2V0KGEuc2hhZGVyLCIuIitlLG4uYXBwZW5kKHQsaSkpfXZhciBpPXQucHJvYygic2NvcGUiLDMpO3QuYmF0Y2hJZD0iYTIiO3ZhciBhPXQuc2hhcmVkLG89YS5jdXJyZW50O00odCxpLHIuY29udGV4dCksci5mcmFtZWJ1ZmZlciYmci5mcmFtZWJ1ZmZlci5hcHBlbmQodCxpKSxPKE9iamVjdC5rZXlzKHIuc3RhdGUpKS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgbj1yLnN0YXRlW2VdLmFwcGVuZCh0LGkpO2cobik/bi5mb3JFYWNoKChmdW5jdGlvbihyLG4pe2kuc2V0KHQubmV4dFtlXSwiWyIrbisiXSIscil9KSk6aS5zZXQoYS5uZXh0LCIuIitlLG4pfSkpLE4odCxpLHIsITAsITApLFsiZWxlbWVudHMiLCJvZmZzZXQiLCJjb3VudCIsImluc3RhbmNlcyIsInByaW1pdGl2ZSJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXIuZHJhd1tlXTtuJiZpLnNldChhLmRyYXcsIi4iK2UsIiIrbi5hcHBlbmQodCxpKSl9KSksT2JqZWN0LmtleXMoci51bmlmb3JtcykuZm9yRWFjaCgoZnVuY3Rpb24obil7dmFyIG89ci51bmlmb3Jtc1tuXS5hcHBlbmQodCxpKTtBcnJheS5pc0FycmF5KG8pJiYobz0iWyIrby5qb2luKCkrIl0iKSxpLnNldChhLnVuaWZvcm1zLCJbIitlLmlkKG4pKyJdIixvKX0pKSxPYmplY3Qua2V5cyhyLmF0dHJpYnV0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciBuPXIuYXR0cmlidXRlc1tlXS5hcHBlbmQodCxpKSxhPXQuc2NvcGVBdHRyaWIoZSk7T2JqZWN0LmtleXMobmV3IFEpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2kuc2V0KGEsIi4iK3Qsblt0XSl9KSl9KSksci5zY29wZVZBTyYmaS5zZXQoYS52YW8sIi50YXJnZXRWQU8iLHIuc2NvcGVWQU8uYXBwZW5kKHQsaSkpLG4oInZlcnQiKSxuKCJmcmFnIiksMDxPYmplY3Qua2V5cyhyLnN0YXRlKS5sZW5ndGgmJihpKG8sIi5kaXJ0eT10cnVlOyIpLGkuZXhpdChvLCIuZGlydHk9dHJ1ZTsiKSksaSgiYTEoIix0LnNoYXJlZC5jb250ZXh0LCIsYTAsIix0LmJhdGNoSWQsIik7Iil9ZnVuY3Rpb24gSih0LGUscil7dmFyIG49ZS5zdGF0aWNbcl07aWYobiYmZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhZyh0KSl7Zm9yKHZhciBlPU9iamVjdC5rZXlzKHQpLHI9MDtyPGUubGVuZ3RoOysrcilpZihWLmlzRHluYW1pYyh0W2Vbcl1dKSlyZXR1cm4hMDtyZXR1cm4hMX19KG4pKXt2YXIgaT10Lmdsb2JhbCxhPU9iamVjdC5rZXlzKG4pLG89ITEscz0hMSxsPSExLGM9dC5nbG9iYWwuZGVmKCJ7fSIpO2EuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bltlXTtpZihWLmlzRHluYW1pYyhyKSkiZnVuY3Rpb24iPT10eXBlb2YgciYmKHI9bltlXT1WLnVuYm94KHIpKSxlPUYocixudWxsKSxvPW98fGUudGhpc0RlcCxsPWx8fGUucHJvcERlcCxzPXN8fGUuY29udGV4dERlcDtlbHNle3N3aXRjaChpKGMsIi4iLGUsIj0iKSx0eXBlb2Ygcil7Y2FzZSJudW1iZXIiOmkocik7YnJlYWs7Y2FzZSJzdHJpbmciOmkoJyInLHIsJyInKTticmVhaztjYXNlIm9iamVjdCI6QXJyYXkuaXNBcnJheShyKSYmaSgiWyIsci5qb2luKCksIl0iKTticmVhaztkZWZhdWx0OmkodC5saW5rKHIpKX1pKCI7Iil9fSkpLGUuZHluYW1pY1tyXT1uZXcgVi5EeW5hbWljVmFyaWFibGUoNCx7dGhpc0RlcDpvLGNvbnRleHREZXA6cyxwcm9wRGVwOmwscmVmOmMsYXBwZW5kOmZ1bmN0aW9uKHQsZSl7YS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgaT1uW3JdO1YuaXNEeW5hbWljKGkpJiYoaT10Lmludm9rZShlLGkpLGUoYywiLiIsciwiPSIsaSwiOyIpKX0pKX19KSxkZWxldGUgZS5zdGF0aWNbcl19fXZhciBRPXUuUmVjb3JkLCQ9e2FkZDozMjc3NCxzdWJ0cmFjdDozMjc3OCwicmV2ZXJzZSBzdWJ0cmFjdCI6MzI3Nzl9O3IuZXh0X2JsZW5kX21pbm1heCYmKCQubWluPTMyNzc1LCQubWF4PTMyNzc2KTt2YXIgdHQ9ci5hbmdsZV9pbnN0YW5jZWRfYXJyYXlzLGV0PXIud2ViZ2xfZHJhd19idWZmZXJzLG50PXIub2VzX3ZlcnRleF9hcnJheV9vYmplY3QsaXQ9e2RpcnR5OiEwLHByb2ZpbGU6bS5wcm9maWxlfSxhdD17fSxvdD1bXSxzdD17fSxsdD17fTt5KCJkaXRoZXIiLDMwMjQpLHkoImJsZW5kLmVuYWJsZSIsMzA0MikseCgiYmxlbmQuY29sb3IiLCJibGVuZENvbG9yIixbMCwwLDAsMF0pLHgoImJsZW5kLmVxdWF0aW9uIiwiYmxlbmRFcXVhdGlvblNlcGFyYXRlIixbMzI3NzQsMzI3NzRdKSx4KCJibGVuZC5mdW5jIiwiYmxlbmRGdW5jU2VwYXJhdGUiLFsxLDAsMSwwXSkseSgiZGVwdGguZW5hYmxlIiwyOTI5LCEwKSx4KCJkZXB0aC5mdW5jIiwiZGVwdGhGdW5jIiw1MTMpLHgoImRlcHRoLnJhbmdlIiwiZGVwdGhSYW5nZSIsWzAsMV0pLHgoImRlcHRoLm1hc2siLCJkZXB0aE1hc2siLCEwKSx4KCJjb2xvck1hc2siLCJjb2xvck1hc2siLFshMCwhMCwhMCwhMF0pLHkoImN1bGwuZW5hYmxlIiwyODg0KSx4KCJjdWxsLmZhY2UiLCJjdWxsRmFjZSIsMTAyOSkseCgiZnJvbnRGYWNlIiwiZnJvbnRGYWNlIiwyMzA1KSx4KCJsaW5lV2lkdGgiLCJsaW5lV2lkdGgiLDEpLHkoInBvbHlnb25PZmZzZXQuZW5hYmxlIiwzMjgyMykseCgicG9seWdvbk9mZnNldC5vZmZzZXQiLCJwb2x5Z29uT2Zmc2V0IixbMCwwXSkseSgic2FtcGxlLmFscGhhIiwzMjkyNikseSgic2FtcGxlLmVuYWJsZSIsMzI5MjgpLHgoInNhbXBsZS5jb3ZlcmFnZSIsInNhbXBsZUNvdmVyYWdlIixbMSwhMV0pLHkoInN0ZW5jaWwuZW5hYmxlIiwyOTYwKSx4KCJzdGVuY2lsLm1hc2siLCJzdGVuY2lsTWFzayIsLTEpLHgoInN0ZW5jaWwuZnVuYyIsInN0ZW5jaWxGdW5jIixbNTE5LDAsLTFdKSx4KCJzdGVuY2lsLm9wRnJvbnQiLCJzdGVuY2lsT3BTZXBhcmF0ZSIsWzEwMjgsNzY4MCw3NjgwLDc2ODBdKSx4KCJzdGVuY2lsLm9wQmFjayIsInN0ZW5jaWxPcFNlcGFyYXRlIixbMTAyOSw3NjgwLDc2ODAsNzY4MF0pLHkoInNjaXNzb3IuZW5hYmxlIiwzMDg5KSx4KCJzY2lzc29yLmJveCIsInNjaXNzb3IiLFswLDAsdC5kcmF3aW5nQnVmZmVyV2lkdGgsdC5kcmF3aW5nQnVmZmVySGVpZ2h0XSkseCgidmlld3BvcnQiLCJ2aWV3cG9ydCIsWzAsMCx0LmRyYXdpbmdCdWZmZXJXaWR0aCx0LmRyYXdpbmdCdWZmZXJIZWlnaHRdKTt2YXIgY3Q9e2dsOnQsY29udGV4dDpwLHN0cmluZ3M6ZSxuZXh0OmF0LGN1cnJlbnQ6aXQsZHJhdzpoLGVsZW1lbnRzOm8sYnVmZmVyOmksc2hhZGVyOmYsYXR0cmlidXRlczp1LnN0YXRlLHZhbzp1LHVuaWZvcm1zOmMsZnJhbWVidWZmZXI6bCxleHRlbnNpb25zOnIsdGltZXI6ZCxpc0J1ZmZlckFyZ3M6SX0sdXQ9e3ByaW1UeXBlczpydCxjb21wYXJlRnVuY3M6a3QsYmxlbmRGdW5jczpUdCxibGVuZEVxdWF0aW9uczokLHN0ZW5jaWxPcHM6QXQsZ2xUeXBlczpLLG9yaWVudGF0aW9uVHlwZTpNdH07ZXQmJih1dC5iYWNrQnVmZmVyPVsxMDI5XSx1dC5kcmF3QnVmZmVyPWEobi5tYXhEcmF3YnVmZmVycywoZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10P1swXTphKHQsKGZ1bmN0aW9uKHQpe3JldHVybiAzNjA2NCt0fSkpfSkpKTt2YXIgZnQ9MDtyZXR1cm57bmV4dDphdCxjdXJyZW50Oml0LHByb2NzOmZ1bmN0aW9uKCl7dmFyIHQ9YigpLGU9dC5wcm9jKCJwb2xsIiksaT10LnByb2MoInJlZnJlc2giKSxvPXQuYmxvY2soKTtlKG8pLGkobyk7dmFyIHMsbD10LnNoYXJlZCxjPWwuZ2wsdT1sLm5leHQsZj1sLmN1cnJlbnQ7byhmLCIuZGlydHk9ZmFsc2U7IiksUyh0LGUpLFModCxpLG51bGwsITApLHR0JiYocz10LmxpbmsodHQpKSxyLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0JiZpKHQubGluayhyLm9lc192ZXJ0ZXhfYXJyYXlfb2JqZWN0KSwiLmJpbmRWZXJ0ZXhBcnJheU9FUyhudWxsKTsiKTtmb3IodmFyIGg9MDtoPG4ubWF4QXR0cmlidXRlczsrK2gpe3ZhciBwPWkuZGVmKGwuYXR0cmlidXRlcywiWyIsaCwiXSIpLGQ9dC5jb25kKHAsIi5idWZmZXIiKTtkLnRoZW4oYywiLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KCIsaCwiKTsiLGMsIi5iaW5kQnVmZmVyKCIsMzQ5NjIsIiwiLHAsIi5idWZmZXIuYnVmZmVyKTsiLGMsIi52ZXJ0ZXhBdHRyaWJQb2ludGVyKCIsaCwiLCIscCwiLnNpemUsIixwLCIudHlwZSwiLHAsIi5ub3JtYWxpemVkLCIscCwiLnN0cmlkZSwiLHAsIi5vZmZzZXQpOyIpLmVsc2UoYywiLmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgiLGgsIik7IixjLCIudmVydGV4QXR0cmliNGYoIixoLCIsIixwLCIueCwiLHAsIi55LCIscCwiLnosIixwLCIudyk7IixwLCIuYnVmZmVyPW51bGw7IiksaShkKSx0dCYmaShzLCIudmVydGV4QXR0cmliRGl2aXNvckFOR0xFKCIsaCwiLCIscCwiLmRpdmlzb3IpOyIpfXJldHVybiBpKHQuc2hhcmVkLnZhbywiLmN1cnJlbnRWQU89bnVsbDsiLHQuc2hhcmVkLnZhbywiLnNldFZBTygiLHQuc2hhcmVkLnZhbywiLnRhcmdldFZBTyk7IiksT2JqZWN0LmtleXMoc3QpLmZvckVhY2goKGZ1bmN0aW9uKHIpe3ZhciBuPXN0W3JdLGE9by5kZWYodSwiLiIscikscz10LmJsb2NrKCk7cygiaWYoIixhLCIpeyIsYywiLmVuYWJsZSgiLG4sIil9ZWxzZXsiLGMsIi5kaXNhYmxlKCIsbiwiKX0iLGYsIi4iLHIsIj0iLGEsIjsiKSxpKHMpLGUoImlmKCIsYSwiIT09IixmLCIuIixyLCIpeyIscywifSIpfSkpLE9iamVjdC5rZXlzKGx0KS5mb3JFYWNoKChmdW5jdGlvbihyKXt2YXIgbixzLGw9bHRbcl0saD1pdFtyXSxwPXQuYmxvY2soKTtwKGMsIi4iLGwsIigiKSxnKGgpPyhsPWgubGVuZ3RoLG49dC5nbG9iYWwuZGVmKHUsIi4iLHIpLHM9dC5nbG9iYWwuZGVmKGYsIi4iLHIpLHAoYShsLChmdW5jdGlvbih0KXtyZXR1cm4gbisiWyIrdCsiXSJ9KSksIik7IixhKGwsKGZ1bmN0aW9uKHQpe3JldHVybiBzKyJbIit0KyJdPSIrbisiWyIrdCsiXTsifSkpLmpvaW4oIiIpKSxlKCJpZigiLGEobCwoZnVuY3Rpb24odCl7cmV0dXJuIG4rIlsiK3QrIl0hPT0iK3MrIlsiK3QrIl0ifSkpLmpvaW4oInx8IiksIil7IixwLCJ9IikpOihuPW8uZGVmKHUsIi4iLHIpLHM9by5kZWYoZiwiLiIscikscChuLCIpOyIsZiwiLiIsciwiPSIsbiwiOyIpLGUoImlmKCIsbiwiIT09IixzLCIpeyIscCwifSIpKSxpKHApfSkpLHQuY29tcGlsZSgpfSgpLGNvbXBpbGU6ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1iKCk7YS5zdGF0cz1hLmxpbmsoaSksT2JqZWN0LmtleXMoZS5zdGF0aWMpLmZvckVhY2goKGZ1bmN0aW9uKHQpe0ooYSxlLHQpfSkpLHd0LmZvckVhY2goKGZ1bmN0aW9uKGUpe0ooYSx0LGUpfSkpO3ZhciBvPUEodCxlLHIsbik7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5wcm9jKCJkcmF3IiwxKTtCKHQsciksTSh0LHIsZS5jb250ZXh0KSxTKHQscixlLmZyYW1lYnVmZmVyKSxFKHQscixlKSxMKHQscixlLnN0YXRlKSxOKHQscixlLCExLCEwKTt2YXIgbj1lLnNoYWRlci5wcm9nVmFyLmFwcGVuZCh0LHIpO2lmKHIodC5zaGFyZWQuZ2wsIi51c2VQcm9ncmFtKCIsbiwiLnByb2dyYW0pOyIpLGUuc2hhZGVyLnByb2dyYW0pWSh0LHIsZSxlLnNoYWRlci5wcm9ncmFtKTtlbHNle3IodC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpO3ZhciBpPXQuZ2xvYmFsLmRlZigie30iKSxhPXIuZGVmKG4sIi5pZCIpLG89ci5kZWYoaSwiWyIsYSwiXSIpO3IodC5jb25kKG8pLnRoZW4obywiLmNhbGwodGhpcyxhMCk7IikuZWxzZShvLCI9IixpLCJbIixhLCJdPSIsdC5saW5rKChmdW5jdGlvbihyKXtyZXR1cm4gRyhZLHQsZSxyLDEpfSkpLCIoIixuLCIpOyIsbywiLmNhbGwodGhpcyxhMCk7IikpfTA8T2JqZWN0LmtleXMoZS5zdGF0ZSkubGVuZ3RoJiZyKHQuc2hhcmVkLmN1cnJlbnQsIi5kaXJ0eT10cnVlOyIpLHQuc2hhcmVkLnZhbyYmcih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iil9KGEsbyksWihhLG8pLGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gdC5jb250ZXh0RGVwJiZpfHx0LnByb3BEZXB9dmFyIG49dC5wcm9jKCJiYXRjaCIsMik7dC5iYXRjaElkPSIwIixCKHQsbik7dmFyIGk9ITEsYT0hMDtPYmplY3Qua2V5cyhlLmNvbnRleHQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe2k9aXx8ZS5jb250ZXh0W3RdLnByb3BEZXB9KSksaXx8KE0odCxuLGUuY29udGV4dCksYT0hMSk7dmFyIG89ITE7aWYoKHM9ZS5mcmFtZWJ1ZmZlcik/KHMucHJvcERlcD9pPW89ITA6cy5jb250ZXh0RGVwJiZpJiYobz0hMCksb3x8Uyh0LG4scykpOlModCxuLG51bGwpLGUuc3RhdGUudmlld3BvcnQmJmUuc3RhdGUudmlld3BvcnQucHJvcERlcCYmKGk9ITApLEUodCxuLGUpLEwodCxuLGUuc3RhdGUsKGZ1bmN0aW9uKHQpe3JldHVybiFyKHQpfSkpLGUucHJvZmlsZSYmcihlLnByb2ZpbGUpfHxOKHQsbixlLCExLCJhMSIpLGUuY29udGV4dERlcD1pLGUubmVlZHNDb250ZXh0PWEsZS5uZWVkc0ZyYW1lYnVmZmVyPW8sKGE9ZS5zaGFkZXIucHJvZ1ZhcikuY29udGV4dERlcCYmaXx8YS5wcm9wRGVwKVgodCxuLGUsbnVsbCk7ZWxzZSBpZihhPWEuYXBwZW5kKHQsbiksbih0LnNoYXJlZC5nbCwiLnVzZVByb2dyYW0oIixhLCIucHJvZ3JhbSk7IiksZS5zaGFkZXIucHJvZ3JhbSlYKHQsbixlLGUuc2hhZGVyLnByb2dyYW0pO2Vsc2V7bih0LnNoYXJlZC52YW8sIi5zZXRWQU8obnVsbCk7Iik7dmFyIHM9dC5nbG9iYWwuZGVmKCJ7fSIpLGw9KG89bi5kZWYoYSwiLmlkIiksbi5kZWYocywiWyIsbywiXSIpKTtuKHQuY29uZChsKS50aGVuKGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpLmVsc2UobCwiPSIscywiWyIsbywiXT0iLHQubGluaygoZnVuY3Rpb24ocil7cmV0dXJuIEcoWCx0LGUsciwyKX0pKSwiKCIsYSwiKTsiLGwsIi5jYWxsKHRoaXMsYTAsYTEpOyIpKX0wPE9iamVjdC5rZXlzKGUuc3RhdGUpLmxlbmd0aCYmbih0LnNoYXJlZC5jdXJyZW50LCIuZGlydHk9dHJ1ZTsiKSx0LnNoYXJlZC52YW8mJm4odC5zaGFyZWQudmFvLCIuc2V0VkFPKG51bGwpOyIpfShhLG8pLGooYS5jb21waWxlKCkse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtvLnNoYWRlci5wcm9ncmFtLmRlc3Ryb3koKX19KX19fWZ1bmN0aW9uIE4odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcilpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX12YXIgaj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1PYmplY3Qua2V5cyhlKSxuPTA7bjxyLmxlbmd0aDsrK24pdFtyW25dXT1lW3Jbbl1dO3JldHVybiB0fSxVPTAsVj17RHluYW1pY1ZhcmlhYmxlOnQsZGVmaW5lOmZ1bmN0aW9uKHIsbil7cmV0dXJuIG5ldyB0KHIsZShuKyIiKSl9LGlzRHluYW1pYzpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIWUuX3JlZ2xUeXBlfHxlIGluc3RhbmNlb2YgdH0sdW5ib3g6ZnVuY3Rpb24gZShyLG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiByP25ldyB0KDAscik6Im51bWJlciI9PXR5cGVvZiByfHwiYm9vbGVhbiI9PXR5cGVvZiByP25ldyB0KDUscik6QXJyYXkuaXNBcnJheShyKT9uZXcgdCg2LHIubWFwKChmdW5jdGlvbih0LHIpe3JldHVybiBlKHQsbisiWyIrcisiXSIpfSkpKTpyIGluc3RhbmNlb2YgdD9yOnZvaWQgMH0sYWNjZXNzb3I6ZX0sSD17bmV4dDoiZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodCl9OmZ1bmN0aW9uKHQpe3JldHVybiBzZXRUaW1lb3V0KHQsMTYpfSxjYW5jZWw6ImZ1bmN0aW9uIj09dHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lP2Z1bmN0aW9uKHQpe3JldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZSh0KX06Y2xlYXJUaW1lb3V0fSxxPSJ1bmRlZmluZWQiIT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9mdW5jdGlvbigpe3JldHVybiBwZXJmb3JtYW5jZS5ub3coKX06ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9LEc9cygpO0cuemVybz1zKCk7dmFyIFk9ZnVuY3Rpb24odCxlKXt2YXIgcj0xO2UuZXh0X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljJiYocj10LmdldFBhcmFtZXRlcigzNDA0NykpO3ZhciBuPTEsaT0xO2Uud2ViZ2xfZHJhd19idWZmZXJzJiYobj10LmdldFBhcmFtZXRlcigzNDg1MiksaT10LmdldFBhcmFtZXRlcigzNjA2MykpO3ZhciBhPSEhZS5vZXNfdGV4dHVyZV9mbG9hdDtpZihhKXthPXQuY3JlYXRlVGV4dHVyZSgpLHQuYmluZFRleHR1cmUoMzU1MyxhKSx0LnRleEltYWdlMkQoMzU1MywwLDY0MDgsMSwxLDAsNjQwOCw1MTI2LG51bGwpO3ZhciBvPXQuY3JlYXRlRnJhbWVidWZmZXIoKTtpZih0LmJpbmRGcmFtZWJ1ZmZlcigzNjE2MCxvKSx0LmZyYW1lYnVmZmVyVGV4dHVyZTJEKDM2MTYwLDM2MDY0LDM1NTMsYSwwKSx0LmJpbmRUZXh0dXJlKDM1NTMsbnVsbCksMzYwNTMhPT10LmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoMzYxNjApKWE9ITE7ZWxzZXt0LnZpZXdwb3J0KDAsMCwxLDEpLHQuY2xlYXJDb2xvcigxLDAsMCwxKSx0LmNsZWFyKDE2Mzg0KTt2YXIgcz1HLmFsbG9jVHlwZSg1MTI2LDQpO3QucmVhZFBpeGVscygwLDAsMSwxLDY0MDgsNTEyNixzKSx0LmdldEVycm9yKCk/YT0hMToodC5kZWxldGVGcmFtZWJ1ZmZlcihvKSx0LmRlbGV0ZVRleHR1cmUoYSksYT0xPT09c1swXSksRy5mcmVlVHlwZShzKX19cmV0dXJuIHM9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L1RyaWRlbnRcLy8udGVzdChuYXZpZ2F0b3IuYXBwVmVyc2lvbil8fC9FZGdlLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXx8KHM9dC5jcmVhdGVUZXh0dXJlKCksbz1HLmFsbG9jVHlwZSg1MTIxLDM2KSx0LmFjdGl2ZVRleHR1cmUoMzM5ODQpLHQuYmluZFRleHR1cmUoMzQwNjcscyksdC50ZXhJbWFnZTJEKDM0MDY5LDAsNjQwOCwzLDMsMCw2NDA4LDUxMjEsbyksRy5mcmVlVHlwZShvKSx0LmJpbmRUZXh0dXJlKDM0MDY3LG51bGwpLHQuZGVsZXRlVGV4dHVyZShzKSxzPSF0LmdldEVycm9yKCkpLHtjb2xvckJpdHM6W3QuZ2V0UGFyYW1ldGVyKDM0MTApLHQuZ2V0UGFyYW1ldGVyKDM0MTEpLHQuZ2V0UGFyYW1ldGVyKDM0MTIpLHQuZ2V0UGFyYW1ldGVyKDM0MTMpXSxkZXB0aEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNCksc3RlbmNpbEJpdHM6dC5nZXRQYXJhbWV0ZXIoMzQxNSksc3VicGl4ZWxCaXRzOnQuZ2V0UGFyYW1ldGVyKDM0MDgpLGV4dGVuc2lvbnM6T2JqZWN0LmtleXMoZSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hIWVbdF19KSksbWF4QW5pc290cm9waWM6cixtYXhEcmF3YnVmZmVyczpuLG1heENvbG9yQXR0YWNobWVudHM6aSxwb2ludFNpemVEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAxKSxsaW5lV2lkdGhEaW1zOnQuZ2V0UGFyYW1ldGVyKDMzOTAyKSxtYXhWaWV3cG9ydERpbXM6dC5nZXRQYXJhbWV0ZXIoMzM4NiksbWF4Q29tYmluZWRUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjEpLG1heEN1YmVNYXBTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDc2KSxtYXhSZW5kZXJidWZmZXJTaXplOnQuZ2V0UGFyYW1ldGVyKDM0MDI0KSxtYXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzQ5MzApLG1heFRleHR1cmVTaXplOnQuZ2V0UGFyYW1ldGVyKDMzNzkpLG1heEF0dHJpYnV0ZXM6dC5nZXRQYXJhbWV0ZXIoMzQ5MjEpLG1heFZlcnRleFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ3KSxtYXhWZXJ0ZXhUZXh0dXJlVW5pdHM6dC5nZXRQYXJhbWV0ZXIoMzU2NjApLG1heFZhcnlpbmdWZWN0b3JzOnQuZ2V0UGFyYW1ldGVyKDM2MzQ4KSxtYXhGcmFnbWVudFVuaWZvcm1zOnQuZ2V0UGFyYW1ldGVyKDM2MzQ5KSxnbHNsOnQuZ2V0UGFyYW1ldGVyKDM1NzI0KSxyZW5kZXJlcjp0LmdldFBhcmFtZXRlcig3OTM3KSx2ZW5kb3I6dC5nZXRQYXJhbWV0ZXIoNzkzNiksdmVyc2lvbjp0LmdldFBhcmFtZXRlcig3OTM4KSxyZWFkRmxvYXQ6YSxucG90VGV4dHVyZUN1YmU6c319LFc9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0IGluc3RhbmNlb2YgVWludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheXx8dCBpbnN0YW5jZW9mIEludDhBcnJheXx8dCBpbnN0YW5jZW9mIEludDE2QXJyYXl8fHQgaW5zdGFuY2VvZiBJbnQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5fHx0IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXl9LFg9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9LFo9e3NoYXBlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXTt0Lmxlbmd0aDt0PXRbMF0pZS5wdXNoKHQubGVuZ3RoKTtyZXR1cm4gZX0sZmxhdHRlbjpmdW5jdGlvbih0LGUscixuKXt2YXIgaT0xO2lmKGUubGVuZ3RoKWZvcih2YXIgYT0wO2E8ZS5sZW5ndGg7KythKWkqPWVbYV07ZWxzZSBpPTA7c3dpdGNoKHI9bnx8Ry5hbGxvY1R5cGUocixpKSxlLmxlbmd0aCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpmb3Iobj1lWzBdLGU9MDtlPG47KytlKXJbZV09dFtlXTticmVhaztjYXNlIDI6Zm9yKG49ZVswXSxlPWVbMV0sYT1pPTA7YTxuOysrYSlmb3IodmFyIG89dFthXSxzPTA7czxlOysrcylyW2krK109b1tzXTticmVhaztjYXNlIDM6Yyh0LGVbMF0sZVsxXSxlWzJdLHIsMCk7YnJlYWs7ZGVmYXVsdDohZnVuY3Rpb24gdChlLHIsbixpLGEpe2Zvcih2YXIgbz0xLHM9bisxO3M8ci5sZW5ndGg7KytzKW8qPXJbc107dmFyIGw9cltuXTtpZig0PT1yLmxlbmd0aC1uKXt2YXIgdT1yW24rMV0sZj1yW24rMl07Zm9yKHI9cltuKzNdLHM9MDtzPGw7KytzKWMoZVtzXSx1LGYscixpLGEpLGErPW99ZWxzZSBmb3Iocz0wO3M8bDsrK3MpdChlW3NdLHIsbisxLGksYSksYSs9b30odCxlLDAsciwwKX1yZXR1cm4gcn19LEo9eyJbb2JqZWN0IEludDhBcnJheV0iOjUxMjAsIltvYmplY3QgSW50MTZBcnJheV0iOjUxMjIsIltvYmplY3QgSW50MzJBcnJheV0iOjUxMjQsIltvYmplY3QgVWludDhBcnJheV0iOjUxMjEsIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjo1MTIxLCJbb2JqZWN0IFVpbnQxNkFycmF5XSI6NTEyMywiW29iamVjdCBVaW50MzJBcnJheV0iOjUxMjUsIltvYmplY3QgRmxvYXQzMkFycmF5XSI6NTEyNiwiW29iamVjdCBGbG9hdDY0QXJyYXldIjo1MTIxLCJbb2JqZWN0IEFycmF5QnVmZmVyXSI6NTEyMX0sSz17aW50ODo1MTIwLGludDE2OjUxMjIsaW50MzI6NTEyNCx1aW50ODo1MTIxLHVpbnQxNjo1MTIzLHVpbnQzMjo1MTI1LGZsb2F0OjUxMjYsZmxvYXQzMjo1MTI2fSxRPXtkeW5hbWljOjM1MDQ4LHN0cmVhbTozNTA0MCxzdGF0aWM6MzUwNDR9LCQ9Wi5mbGF0dGVuLHR0PVouc2hhcGUsZXQ9W107ZXRbNTEyMF09MSxldFs1MTIyXT0yLGV0WzUxMjRdPTQsZXRbNTEyMV09MSxldFs1MTIzXT0yLGV0WzUxMjVdPTQsZXRbNTEyNl09NDt2YXIgcnQ9e3BvaW50czowLHBvaW50OjAsbGluZXM6MSxsaW5lOjEsdHJpYW5nbGVzOjQsdHJpYW5nbGU6NCwibGluZSBsb29wIjoyLCJsaW5lIHN0cmlwIjozLCJ0cmlhbmdsZSBzdHJpcCI6NSwidHJpYW5nbGUgZmFuIjo2fSxudD1uZXcgRmxvYXQzMkFycmF5KDEpLGl0PW5ldyBVaW50MzJBcnJheShudC5idWZmZXIpLGF0PVs5OTg0LDk5ODYsOTk4NSw5OTg3XSxvdD1bMCw2NDA5LDY0MTAsNjQwNyw2NDA4XSxzdD17fTtzdFs2NDA5XT1zdFs2NDA2XT1zdFs2NDAyXT0xLHN0WzM0MDQxXT1zdFs2NDEwXT0yLHN0WzY0MDddPXN0WzM1OTA0XT0zLHN0WzY0MDhdPXN0WzM1OTA2XT00O3ZhciBsdD12KCJIVE1MQ2FudmFzRWxlbWVudCIpLGN0PXYoIk9mZnNjcmVlbkNhbnZhcyIpLHV0PXYoIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCIpLGZ0PXYoIkltYWdlQml0bWFwIiksaHQ9digiSFRNTEltYWdlRWxlbWVudCIpLHB0PXYoIkhUTUxWaWRlb0VsZW1lbnQiKSxkdD1PYmplY3Qua2V5cyhKKS5jb25jYXQoW2x0LGN0LHV0LGZ0LGh0LHB0XSksbXQ9W107bXRbNTEyMV09MSxtdFs1MTI2XT00LG10WzM2MTkzXT0yLG10WzUxMjNdPTIsbXRbNTEyNV09NDt2YXIgZ3Q9W107Z3RbMzI4NTRdPTIsZ3RbMzI4NTVdPTIsZ3RbMzYxOTRdPTIsZ3RbMzQwNDFdPTQsZ3RbMzM3NzZdPS41LGd0WzMzNzc3XT0uNSxndFszMzc3OF09MSxndFszMzc3OV09MSxndFszNTk4Nl09LjUsZ3RbMzU5ODddPTEsZ3RbMzQ3OThdPTEsZ3RbMzU4NDBdPS41LGd0WzM1ODQxXT0uMjUsZ3RbMzU4NDJdPS41LGd0WzM1ODQzXT0uMjUsZ3RbMzYxOTZdPS41O3ZhciB2dD1bXTt2dFszMjg1NF09Mix2dFszMjg1NV09Mix2dFszNjE5NF09Mix2dFszMzE4OV09Mix2dFszNjE2OF09MSx2dFszNDA0MV09NCx2dFszNTkwN109NCx2dFszNDgzNl09MTYsdnRbMzQ4NDJdPTgsdnRbMzQ4NDNdPTY7dmFyIHl0PWZ1bmN0aW9uKHQsZSxyLG4saSl7ZnVuY3Rpb24gYSh0KXt0aGlzLmlkPWMrKyx0aGlzLnJlZkNvdW50PTEsdGhpcy5yZW5kZXJidWZmZXI9dCx0aGlzLmZvcm1hdD0zMjg1NCx0aGlzLmhlaWdodD10aGlzLndpZHRoPTAsaS5wcm9maWxlJiYodGhpcy5zdGF0cz17c2l6ZTowfSl9ZnVuY3Rpb24gbyhlKXt2YXIgcj1lLnJlbmRlcmJ1ZmZlcjt0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsbnVsbCksdC5kZWxldGVSZW5kZXJidWZmZXIociksZS5yZW5kZXJidWZmZXI9bnVsbCxlLnJlZkNvdW50PTAsZGVsZXRlIHVbZS5pZF0sbi5yZW5kZXJidWZmZXJDb3VudC0tfXZhciBzPXtyZ2JhNDozMjg1NCxyZ2I1NjU6MzYxOTQsInJnYjUgYTEiOjMyODU1LGRlcHRoOjMzMTg5LHN0ZW5jaWw6MzYxNjgsImRlcHRoIHN0ZW5jaWwiOjM0MDQxfTtlLmV4dF9zcmdiJiYocy5zcmdiYT0zNTkwNyksZS5leHRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQmJihzLnJnYmExNmY9MzQ4NDIscy5yZ2IxNmY9MzQ4NDMpLGUud2ViZ2xfY29sb3JfYnVmZmVyX2Zsb2F0JiYocy5yZ2JhMzJmPTM0ODM2KTt2YXIgbD1bXTtPYmplY3Qua2V5cyhzKS5mb3JFYWNoKChmdW5jdGlvbih0KXtsW3NbdF1dPXR9KSk7dmFyIGM9MCx1PXt9O3JldHVybiBhLnByb3RvdHlwZS5kZWNSZWY9ZnVuY3Rpb24oKXswPj0tLXRoaXMucmVmQ291bnQmJm8odGhpcyl9LGkucHJvZmlsZSYmKG4uZ2V0VG90YWxSZW5kZXJidWZmZXJTaXplPWZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXModSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dCs9dVtlXS5zdGF0cy5zaXplfSkpLHR9KSx7Y3JlYXRlOmZ1bmN0aW9uKGUscil7ZnVuY3Rpb24gbyhlLHIpe3ZhciBuPTAsYT0wLHU9MzI4NTQ7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZlPygic2hhcGUiaW4gZT8obj0wfChhPWUuc2hhcGUpWzBdLGE9MHxhWzFdKTooInJhZGl1cyJpbiBlJiYobj1hPTB8ZS5yYWRpdXMpLCJ3aWR0aCJpbiBlJiYobj0wfGUud2lkdGgpLCJoZWlnaHQiaW4gZSYmKGE9MHxlLmhlaWdodCkpLCJmb3JtYXQiaW4gZSYmKHU9c1tlLmZvcm1hdF0pKToibnVtYmVyIj09dHlwZW9mIGU/KG49MHxlLGE9Im51bWJlciI9PXR5cGVvZiByPzB8cjpuKTplfHwobj1hPTEpLG4hPT1jLndpZHRofHxhIT09Yy5oZWlnaHR8fHUhPT1jLmZvcm1hdClyZXR1cm4gby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSxjLmZvcm1hdD11LHQuYmluZFJlbmRlcmJ1ZmZlcigzNjE2MSxjLnJlbmRlcmJ1ZmZlciksdC5yZW5kZXJidWZmZXJTdG9yYWdlKDM2MTYxLHUsbixhKSxpLnByb2ZpbGUmJihjLnN0YXRzLnNpemU9dnRbYy5mb3JtYXRdKmMud2lkdGgqYy5oZWlnaHQpLG8uZm9ybWF0PWxbYy5mb3JtYXRdLG99dmFyIGM9bmV3IGEodC5jcmVhdGVSZW5kZXJidWZmZXIoKSk7cmV0dXJuIHVbYy5pZF09YyxuLnJlbmRlcmJ1ZmZlckNvdW50KyssbyhlLHIpLG8ucmVzaXplPWZ1bmN0aW9uKGUscil7dmFyIG49MHxlLGE9MHxyfHxuO3JldHVybiBuPT09Yy53aWR0aCYmYT09PWMuaGVpZ2h0fHwoby53aWR0aD1jLndpZHRoPW4sby5oZWlnaHQ9Yy5oZWlnaHQ9YSx0LmJpbmRSZW5kZXJidWZmZXIoMzYxNjEsYy5yZW5kZXJidWZmZXIpLHQucmVuZGVyYnVmZmVyU3RvcmFnZSgzNjE2MSxjLmZvcm1hdCxuLGEpLGkucHJvZmlsZSYmKGMuc3RhdHMuc2l6ZT12dFtjLmZvcm1hdF0qYy53aWR0aCpjLmhlaWdodCkpLG99LG8uX3JlZ2xUeXBlPSJyZW5kZXJidWZmZXIiLG8uX3JlbmRlcmJ1ZmZlcj1jLGkucHJvZmlsZSYmKG8uc3RhdHM9Yy5zdGF0cyksby5kZXN0cm95PWZ1bmN0aW9uKCl7Yy5kZWNSZWYoKX0sb30sY2xlYXI6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2gobyl9LHJlc3RvcmU6ZnVuY3Rpb24oKXtYKHUpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UucmVuZGVyYnVmZmVyPXQuY3JlYXRlUmVuZGVyYnVmZmVyKCksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLGUucmVuZGVyYnVmZmVyKSx0LnJlbmRlcmJ1ZmZlclN0b3JhZ2UoMzYxNjEsZS5mb3JtYXQsZS53aWR0aCxlLmhlaWdodCl9KSksdC5iaW5kUmVuZGVyYnVmZmVyKDM2MTYxLG51bGwpfX19LHh0PVtdO3h0WzY0MDhdPTQseHRbNjQwN109Mzt2YXIgYnQ9W107YnRbNTEyMV09MSxidFs1MTI2XT00LGJ0WzM2MTkzXT0yO3ZhciBfdD1bIngiLCJ5IiwieiIsInciXSx3dD0iYmxlbmQuZnVuYyBibGVuZC5lcXVhdGlvbiBzdGVuY2lsLmZ1bmMgc3RlbmNpbC5vcEZyb250IHN0ZW5jaWwub3BCYWNrIHNhbXBsZS5jb3ZlcmFnZSB2aWV3cG9ydCBzY2lzc29yLmJveCBwb2x5Z29uT2Zmc2V0Lm9mZnNldCIuc3BsaXQoIiAiKSxUdD17MDowLDE6MSx6ZXJvOjAsb25lOjEsInNyYyBjb2xvciI6NzY4LCJvbmUgbWludXMgc3JjIGNvbG9yIjo3NjksInNyYyBhbHBoYSI6NzcwLCJvbmUgbWludXMgc3JjIGFscGhhIjo3NzEsImRzdCBjb2xvciI6Nzc0LCJvbmUgbWludXMgZHN0IGNvbG9yIjo3NzUsImRzdCBhbHBoYSI6NzcyLCJvbmUgbWludXMgZHN0IGFscGhhIjo3NzMsImNvbnN0YW50IGNvbG9yIjozMjc2OSwib25lIG1pbnVzIGNvbnN0YW50IGNvbG9yIjozMjc3MCwiY29uc3RhbnQgYWxwaGEiOjMyNzcxLCJvbmUgbWludXMgY29uc3RhbnQgYWxwaGEiOjMyNzcyLCJzcmMgYWxwaGEgc2F0dXJhdGUiOjc3Nn0sa3Q9e25ldmVyOjUxMixsZXNzOjUxMywiPCI6NTEzLGVxdWFsOjUxNCwiPSI6NTE0LCI9PSI6NTE0LCI9PT0iOjUxNCxsZXF1YWw6NTE1LCI8PSI6NTE1LGdyZWF0ZXI6NTE2LCI+Ijo1MTYsbm90ZXF1YWw6NTE3LCIhPSI6NTE3LCIhPT0iOjUxNyxnZXF1YWw6NTE4LCI+PSI6NTE4LGFsd2F5czo1MTl9LEF0PXswOjAsemVybzowLGtlZXA6NzY4MCxyZXBsYWNlOjc2ODEsaW5jcmVtZW50Ojc2ODIsZGVjcmVtZW50Ojc2ODMsImluY3JlbWVudCB3cmFwIjozNDA1NSwiZGVjcmVtZW50IHdyYXAiOjM0MDU2LGludmVydDo1Mzg2fSxNdD17Y3c6MjMwNCxjY3c6MjMwNX0sU3Q9bmV3IHooITEsITEsITEsKGZ1bmN0aW9uKCl7fSkpO3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7aWYoMD09PUoubGVuZ3RoKXcmJncudXBkYXRlKCksdHQ9bnVsbDtlbHNle3R0PUgubmV4dChlKSxmKCk7Zm9yKHZhciB0PUoubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciByPUpbdF07ciYmcihQLG51bGwsMCl9Zy5mbHVzaCgpLHcmJncudXBkYXRlKCl9fWZ1bmN0aW9uIHIoKXshdHQmJjA8Si5sZW5ndGgmJih0dD1ILm5leHQoZSkpfWZ1bmN0aW9uIG4oKXt0dCYmKEguY2FuY2VsKGUpLHR0PW51bGwpfWZ1bmN0aW9uIGEodCl7dC5wcmV2ZW50RGVmYXVsdCgpLG4oKSxLLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX1mdW5jdGlvbiBvKHQpe2cuZ2V0RXJyb3IoKSx5LnJlc3RvcmUoKSxSLnJlc3RvcmUoKSxPLnJlc3RvcmUoKSxGLnJlc3RvcmUoKSxVLnJlc3RvcmUoKSxHLnJlc3RvcmUoKSxELnJlc3RvcmUoKSx3JiZ3LnJlc3RvcmUoKSxXLnByb2NzLnJlZnJlc2goKSxyKCksUS5mb3JFYWNoKChmdW5jdGlvbih0KXt0KCl9KSl9ZnVuY3Rpb24gcyh0KXtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9e30sbj17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oaSl7dmFyIGE9dFtpXTtpZihWLmlzRHluYW1pYyhhKSluW2ldPVYudW5ib3goYSxpKTtlbHNle2lmKGUmJkFycmF5LmlzQXJyYXkoYSkpZm9yKHZhciBvPTA7bzxhLmxlbmd0aDsrK28paWYoVi5pc0R5bmFtaWMoYVtvXSkpcmV0dXJuIHZvaWQobltpXT1WLnVuYm94KGEsaSkpO3JbaV09YX19KSkse2R5bmFtaWM6bixzdGF0aWM6cn19dmFyIHI9ZSh0LmNvbnRleHR8fHt9LCEwKSxuPWUodC51bmlmb3Jtc3x8e30sITApLGk9ZSh0LmF0dHJpYnV0ZXN8fHt9LCExKTt0PWUoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtpZih0IGluIHIpe3ZhciBlPXJbdF07ZGVsZXRlIHJbdF0sT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24obil7clt0KyIuIituXT1lW25dfSkpfX12YXIgcj1qKHt9LHQpO3JldHVybiBkZWxldGUgci51bmlmb3JtcyxkZWxldGUgci5hdHRyaWJ1dGVzLGRlbGV0ZSByLmNvbnRleHQsZGVsZXRlIHIudmFvLCJzdGVuY2lsImluIHImJnIuc3RlbmNpbC5vcCYmKHIuc3RlbmNpbC5vcEJhY2s9ci5zdGVuY2lsLm9wRnJvbnQ9ci5zdGVuY2lsLm9wLGRlbGV0ZSByLnN0ZW5jaWwub3ApLGUoImJsZW5kIiksZSgiZGVwdGgiKSxlKCJjdWxsIiksZSgic3RlbmNpbCIpLGUoInBvbHlnb25PZmZzZXQiKSxlKCJzY2lzc29yIiksZSgic2FtcGxlIiksInZhbyJpbiB0JiYoci52YW89dC52YW8pLHJ9KHQpLCExKTt2YXIgYT17Z3B1VGltZTowLGNwdVRpbWU6MCxjb3VudDowfSxvPVcuY29tcGlsZSh0LGksbixyLGEpLHM9by5kcmF3LGw9by5iYXRjaCxjPW8uc2NvcGUsdT1bXTtyZXR1cm4gaigoZnVuY3Rpb24odCxlKXt2YXIgcjtpZigiZnVuY3Rpb24iPT10eXBlb2YgdClyZXR1cm4gYy5jYWxsKHRoaXMsbnVsbCx0LDApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKWlmKCJudW1iZXIiPT10eXBlb2YgdClmb3Iocj0wO3I8dDsrK3IpYy5jYWxsKHRoaXMsbnVsbCxlLHIpO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGMuY2FsbCh0aGlzLHQsZSwwKTtmb3Iocj0wO3I8dC5sZW5ndGg7KytyKWMuY2FsbCh0aGlzLHRbcl0sZSxyKX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCl7aWYoMDx0KXJldHVybiBsLmNhbGwodGhpcyxmdW5jdGlvbih0KXtmb3IoO3UubGVuZ3RoPHQ7KXUucHVzaChudWxsKTtyZXR1cm4gdX0oMHx0KSwwfHQpfWVsc2V7aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHMuY2FsbCh0aGlzLHQpO2lmKHQubGVuZ3RoKXJldHVybiBsLmNhbGwodGhpcyx0LHQubGVuZ3RoKX19KSx7c3RhdHM6YSxkZXN0cm95OmZ1bmN0aW9uKCl7by5kZXN0cm95KCl9fSl9ZnVuY3Rpb24gbCh0LGUpe3ZhciByPTA7Vy5wcm9jcy5wb2xsKCk7dmFyIG49ZS5jb2xvcjtuJiYoZy5jbGVhckNvbG9yKCtuWzBdfHwwLCtuWzFdfHwwLCtuWzJdfHwwLCtuWzNdfHwwKSxyfD0xNjM4NCksImRlcHRoImluIGUmJihnLmNsZWFyRGVwdGgoK2UuZGVwdGgpLHJ8PTI1NiksInN0ZW5jaWwiaW4gZSYmKGcuY2xlYXJTdGVuY2lsKDB8ZS5zdGVuY2lsKSxyfD0xMDI0KSxnLmNsZWFyKHIpfWZ1bmN0aW9uIGModCl7cmV0dXJuIEoucHVzaCh0KSxyKCkse2NhbmNlbDpmdW5jdGlvbigpe3ZhciBlPU4oSix0KTtKW2VdPWZ1bmN0aW9uIHQoKXt2YXIgZT1OKEosdCk7SltlXT1KW0oubGVuZ3RoLTFdLC0tSi5sZW5ndGgsMD49Si5sZW5ndGgmJm4oKX19fX1mdW5jdGlvbiB1KCl7dmFyIHQ9WC52aWV3cG9ydCxlPVguc2Npc3Nvcl9ib3g7dFswXT10WzFdPWVbMF09ZVsxXT0wLFAudmlld3BvcnRXaWR0aD1QLmZyYW1lYnVmZmVyV2lkdGg9UC5kcmF3aW5nQnVmZmVyV2lkdGg9dFsyXT1lWzJdPWcuZHJhd2luZ0J1ZmZlcldpZHRoLFAudmlld3BvcnRIZWlnaHQ9UC5mcmFtZWJ1ZmZlckhlaWdodD1QLmRyYXdpbmdCdWZmZXJIZWlnaHQ9dFszXT1lWzNdPWcuZHJhd2luZ0J1ZmZlckhlaWdodH1mdW5jdGlvbiBmKCl7UC50aWNrKz0xLFAudGltZT1tKCksdSgpLFcucHJvY3MucG9sbCgpfWZ1bmN0aW9uIGgoKXtGLnJlZnJlc2goKSx1KCksVy5wcm9jcy5yZWZyZXNoKCksdyYmdy51cGRhdGUoKX1mdW5jdGlvbiBtKCl7cmV0dXJuKHEoKS1UKS8xZTN9aWYoISh0PWkodCkpKXJldHVybiBudWxsO3ZhciBnPXQuZ2wsdj1nLmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Zy5pc0NvbnRleHRMb3N0KCk7dmFyIHk9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3ZhciByO2U9ZS50b0xvd2VyQ2FzZSgpO3RyeXtyPW5bZV09dC5nZXRFeHRlbnNpb24oZSl9Y2F0Y2godCl7fXJldHVybiEhcn1mb3IodmFyIG49e30saT0wO2k8ZS5leHRlbnNpb25zLmxlbmd0aDsrK2kpe3ZhciBhPWUuZXh0ZW5zaW9uc1tpXTtpZighcihhKSlyZXR1cm4gZS5vbkRlc3Ryb3koKSxlLm9uRG9uZSgnIicrYSsnIiBleHRlbnNpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBXZWJHTCBjb250ZXh0LCB0cnkgdXBncmFkaW5nIHlvdXIgc3lzdGVtIG9yIGEgZGlmZmVyZW50IGJyb3dzZXInKSxudWxsfXJldHVybiBlLm9wdGlvbmFsRXh0ZW5zaW9ucy5mb3JFYWNoKHIpLHtleHRlbnNpb25zOm4scmVzdG9yZTpmdW5jdGlvbigpe09iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKHQpe2lmKG5bdF0mJiFyKHQpKXRocm93IEVycm9yKCIocmVnbCk6IGVycm9yIHJlc3RvcmluZyBleHRlbnNpb24gIit0KX0pKX19fShnLHQpO2lmKCF5KXJldHVybiBudWxsO3ZhciB4PWZ1bmN0aW9uKCl7dmFyIHQ9eyIiOjB9LGU9WyIiXTtyZXR1cm57aWQ6ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KG49dFtyXT1lLmxlbmd0aCxlLnB1c2gociksbil9LHN0cjpmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX19fSgpLGI9e3Zhb0NvdW50OjAsYnVmZmVyQ291bnQ6MCxlbGVtZW50c0NvdW50OjAsZnJhbWVidWZmZXJDb3VudDowLHNoYWRlckNvdW50OjAsdGV4dHVyZUNvdW50OjAsY3ViZUNvdW50OjAscmVuZGVyYnVmZmVyQ291bnQ6MCxtYXhUZXh0dXJlVW5pdHM6MH0sXz15LmV4dGVuc2lvbnMsdz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLmVuZFF1ZXJ5SW5kZXg9dGhpcy5zdGFydFF1ZXJ5SW5kZXg9LTEsdGhpcy5zdW09MCx0aGlzLnN0YXRzPW51bGx9ZnVuY3Rpb24gbih0LGUsbil7dmFyIGk9by5wb3AoKXx8bmV3IHI7aS5zdGFydFF1ZXJ5SW5kZXg9dCxpLmVuZFF1ZXJ5SW5kZXg9ZSxpLnN1bT0wLGkuc3RhdHM9bixzLnB1c2goaSl9aWYoIWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5KXJldHVybiBudWxsO3ZhciBpPVtdLGE9W10sbz1bXSxzPVtdLGw9W10sYz1bXTtyZXR1cm57YmVnaW5RdWVyeTpmdW5jdGlvbih0KXt2YXIgcj1pLnBvcCgpfHxlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5jcmVhdGVRdWVyeUVYVCgpO2UuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmJlZ2luUXVlcnlFWFQoMzUwMDcsciksYS5wdXNoKHIpLG4oYS5sZW5ndGgtMSxhLmxlbmd0aCx0KX0sZW5kUXVlcnk6ZnVuY3Rpb24oKXtlLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5lbmRRdWVyeUVYVCgzNTAwNyl9LHB1c2hTY29wZVN0YXRzOm4sdXBkYXRlOmZ1bmN0aW9uKCl7dmFyIHQscjtpZigwIT09KHQ9YS5sZW5ndGgpKXtjLmxlbmd0aD1NYXRoLm1heChjLmxlbmd0aCx0KzEpLGwubGVuZ3RoPU1hdGgubWF4KGwubGVuZ3RoLHQrMSksbFswXT0wO3ZhciBuPWNbMF09MDtmb3Iocj10PTA7cjxhLmxlbmd0aDsrK3Ipe3ZhciB1PWFbcl07ZS5leHRfZGlzam9pbnRfdGltZXJfcXVlcnkuZ2V0UXVlcnlPYmplY3RFWFQodSwzNDkxOSk/KG4rPWUuZXh0X2Rpc2pvaW50X3RpbWVyX3F1ZXJ5LmdldFF1ZXJ5T2JqZWN0RVhUKHUsMzQ5MTgpLGkucHVzaCh1KSk6YVt0KytdPXUsbFtyKzFdPW4sY1tyKzFdPXR9Zm9yKGEubGVuZ3RoPXQscj10PTA7cjxzLmxlbmd0aDsrK3Ipe3ZhciBmPShuPXNbcl0pLnN0YXJ0UXVlcnlJbmRleDt1PW4uZW5kUXVlcnlJbmRleDtuLnN1bSs9bFt1XS1sW2ZdLGY9Y1tmXSwodT1jW3VdKT09PWY/KG4uc3RhdHMuZ3B1VGltZSs9bi5zdW0vMWU2LG8ucHVzaChuKSk6KG4uc3RhcnRRdWVyeUluZGV4PWYsbi5lbmRRdWVyeUluZGV4PXUsc1t0KytdPW4pfXMubGVuZ3RoPXR9fSxnZXROdW1QZW5kaW5nUXVlcmllczpmdW5jdGlvbigpe3JldHVybiBhLmxlbmd0aH0sY2xlYXI6ZnVuY3Rpb24oKXtpLnB1c2guYXBwbHkoaSxhKTtmb3IodmFyIHQ9MDt0PGkubGVuZ3RoO3QrKyllLmV4dF9kaXNqb2ludF90aW1lcl9xdWVyeS5kZWxldGVRdWVyeUVYVChpW3RdKTthLmxlbmd0aD0wLGkubGVuZ3RoPTB9LHJlc3RvcmU6ZnVuY3Rpb24oKXthLmxlbmd0aD0wLGkubGVuZ3RoPTB9fX0oMCxfKSxUPXEoKSxNPWcuZHJhd2luZ0J1ZmZlcldpZHRoLEM9Zy5kcmF3aW5nQnVmZmVySGVpZ2h0LFA9e3RpY2s6MCx0aW1lOjAsdmlld3BvcnRXaWR0aDpNLHZpZXdwb3J0SGVpZ2h0OkMsZnJhbWVidWZmZXJXaWR0aDpNLGZyYW1lYnVmZmVySGVpZ2h0OkMsZHJhd2luZ0J1ZmZlcldpZHRoOk0sZHJhd2luZ0J1ZmZlckhlaWdodDpDLHBpeGVsUmF0aW86dC5waXhlbFJhdGlvfSxJPShNPXtlbGVtZW50czpudWxsLHByaW1pdGl2ZTo0LGNvdW50Oi0xLG9mZnNldDowLGluc3RhbmNlczotMX0sWShnLF8pKSxPPXAoZyxiLHQsKGZ1bmN0aW9uKHQpe3JldHVybiBELmRlc3Ryb3lCdWZmZXIodCl9KSksej1kKGcsXyxPLGIpLEQ9UyhnLF8sSSxiLE8seixNKSxSPUUoZyx4LGIsdCksRj1rKGcsXyxJLChmdW5jdGlvbigpe1cucHJvY3MucG9sbCgpfSksUCxiLHQpLFU9eXQoZyxfLDAsYix0KSxHPUEoZyxfLEksRixVLGIpLFc9QihnLHgsXyxJLE8seiwwLEcse30sRCxSLE0sUCx3LHQpLFg9KHg9TChnLEcsVy5wcm9jcy5wb2xsLFApLFcubmV4dCksWj1nLmNhbnZhcyxKPVtdLEs9W10sUT1bXSwkPVt0Lm9uRGVzdHJveV0sdHQ9bnVsbDtaJiYoWi5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhLCExKSxaLmFkZEV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvLCExKSk7dmFyIGV0PUcuc2V0RkJPPXMoe2ZyYW1lYnVmZmVyOlYuZGVmaW5lLmNhbGwobnVsbCwxLCJmcmFtZWJ1ZmZlciIpfSk7cmV0dXJuIGgoKSx2PWoocyx7Y2xlYXI6ZnVuY3Rpb24odCl7aWYoImZyYW1lYnVmZmVyImluIHQpaWYodC5mcmFtZWJ1ZmZlciYmImZyYW1lYnVmZmVyQ3ViZSI9PT10LmZyYW1lYnVmZmVyX3JlZ2xUeXBlKWZvcih2YXIgZT0wOzY+ZTsrK2UpZXQoaih7ZnJhbWVidWZmZXI6dC5mcmFtZWJ1ZmZlci5mYWNlc1tlXX0sdCksbCk7ZWxzZSBldCh0LGwpO2Vsc2UgbCgwLHQpfSxwcm9wOlYuZGVmaW5lLmJpbmQobnVsbCwxKSxjb250ZXh0OlYuZGVmaW5lLmJpbmQobnVsbCwyKSx0aGlzOlYuZGVmaW5lLmJpbmQobnVsbCwzKSxkcmF3OnMoe30pLGJ1ZmZlcjpmdW5jdGlvbih0KXtyZXR1cm4gTy5jcmVhdGUodCwzNDk2MiwhMSwhMSl9LGVsZW1lbnRzOmZ1bmN0aW9uKHQpe3JldHVybiB6LmNyZWF0ZSh0LCExKX0sdGV4dHVyZTpGLmNyZWF0ZTJELGN1YmU6Ri5jcmVhdGVDdWJlLHJlbmRlcmJ1ZmZlcjpVLmNyZWF0ZSxmcmFtZWJ1ZmZlcjpHLmNyZWF0ZSxmcmFtZWJ1ZmZlckN1YmU6Ry5jcmVhdGVDdWJlLHZhbzpELmNyZWF0ZVZBTyxhdHRyaWJ1dGVzOnYsZnJhbWU6YyxvbjpmdW5jdGlvbih0LGUpe3ZhciByO3N3aXRjaCh0KXtjYXNlImZyYW1lIjpyZXR1cm4gYyhlKTtjYXNlImxvc3QiOnI9SzticmVhaztjYXNlInJlc3RvcmUiOnI9UTticmVhaztjYXNlImRlc3Ryb3kiOnI9JH1yZXR1cm4gci5wdXNoKGUpLHtjYW5jZWw6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoOysrdClpZihyW3RdPT09ZSl7clt0XT1yW3IubGVuZ3RoLTFdLHIucG9wKCk7YnJlYWt9fX19LGxpbWl0czpJLGhhc0V4dGVuc2lvbjpmdW5jdGlvbih0KXtyZXR1cm4gMDw9SS5leHRlbnNpb25zLmluZGV4T2YodC50b0xvd2VyQ2FzZSgpKX0scmVhZDp4LGRlc3Ryb3k6ZnVuY3Rpb24oKXtKLmxlbmd0aD0wLG4oKSxaJiYoWi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IixhKSxaLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndlYmdsY29udGV4dHJlc3RvcmVkIixvKSksUi5jbGVhcigpLEcuY2xlYXIoKSxVLmNsZWFyKCksRC5jbGVhcigpLEYuY2xlYXIoKSx6LmNsZWFyKCksTy5jbGVhcigpLHcmJncuY2xlYXIoKSwkLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QoKX0pKX0sX2dsOmcsX3JlZnJlc2g6aCxwb2xsOmZ1bmN0aW9uKCl7ZigpLHcmJncudXBkYXRlKCl9LG5vdzptLHN0YXRzOmJ9KSx0Lm9uRG9uZShudWxsLHYpLHZ9fSkpfSx7fV0sNTE3OltmdW5jdGlvbih0LGUscil7Ci8qIQogKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPgogKgogKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuCiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4KICovCiJ1c2Ugc3RyaWN0Ijt2YXIgbixpPSIiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCJzdHJpbmciIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJleHBlY3RlZCBhIHN0cmluZyIpO2lmKDE9PT1lKXJldHVybiB0O2lmKDI9PT1lKXJldHVybiB0K3Q7dmFyIHI9dC5sZW5ndGgqZTtpZihuIT09dHx8dm9pZCAwPT09biluPXQsaT0iIjtlbHNlIGlmKGkubGVuZ3RoPj1yKXJldHVybiBpLnN1YnN0cigwLHIpO2Zvcig7cj5pLmxlbmd0aCYmZT4xOykxJmUmJihpKz10KSxlPj49MSx0Kz10O3JldHVybiBpPShpKz10KS5zdWJzdHIoMCxyKX19LHt9XSw1MTg6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKCl7ZS5leHBvcnRzPXQucGVyZm9ybWFuY2UmJnQucGVyZm9ybWFuY2Uubm93P2Z1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpEYXRlLm5vd3x8ZnVuY3Rpb24oKXtyZXR1cm4rbmV3IERhdGV9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0se31dLDUxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9dFt0Lmxlbmd0aC0xXSxuPWUsaT1lLTI7aT49MDstLWkpe3ZhciBhPXIsbz10W2ldOyhsPW8tKChyPWErbyktYSkpJiYodFstLW5dPXIscj1sKX12YXIgcz0wO2ZvcihpPW47aTxlOysraSl7dmFyIGw7YT10W2ldOyhsPShvPXIpLSgocj1hK28pLWEpKSYmKHRbcysrXT1sKX1yZXR1cm4gdFtzKytdPXIsdC5sZW5ndGg9cyx0fX0se31dLDUyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3QtY29tcHJlc3MiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbih0KHIoZVswXVswXSxlWzFdWzFdKSxyKC1lWzBdWzFdLGVbMV1bMF0pKSl9fWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBuKHQoZSh0KHIoaVsxXVsxXSxpWzJdWzJdKSxyKC1pWzFdWzJdLGlbMl1bMV0pKSxpWzBdWzBdKSx0KGUodChyKGlbMV1bMF0saVsyXVsyXSkscigtaVsxXVsyXSxpWzJdWzBdKSksLWlbMF1bMV0pLGUodChyKGlbMV1bMF0saVsyXVsxXSkscigtaVsxXVsxXSxpWzJdWzBdKSksaVswXVsyXSkpKSl9fWZ1bmN0aW9uIGModCl7cmV0dXJuKDI9PT10P3M6Mz09PXQ/bDp2b2lkIDApKGksYSxuLG8pfXZhciB1PVtmdW5jdGlvbigpe3JldHVyblswXX0sZnVuY3Rpb24odCl7cmV0dXJuW3RbMF1bMF1dfV07ZnVuY3Rpb24gZih0LGUscixuLGksYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0KG8pO2Nhc2UgMTpyZXR1cm4gZShvKTtjYXNlIDI6cmV0dXJuIHIobyk7Y2FzZSAzOnJldHVybiBuKG8pfXZhciBzPWlbby5sZW5ndGhdO3JldHVybiBzfHwocz1pW28ubGVuZ3RoXT1hKG8ubGVuZ3RoKSkscyhvKX19IWZ1bmN0aW9uKCl7Zm9yKDt1Lmxlbmd0aDw0Oyl1LnB1c2goYyh1Lmxlbmd0aCkpO2UuZXhwb3J0cz1mLmFwcGx5KHZvaWQgMCx1LmNvbmNhdChbdSxjXSkpO2Zvcih2YXIgdD0wO3Q8dS5sZW5ndGg7Kyt0KWUuZXhwb3J0c1t0XT11W3RdfSgpfSx7InJvYnVzdC1jb21wcmVzcyI6NTE5LCJyb2J1c3Qtc2NhbGUiOjUyNiwicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW4odFswXSxlWzBdKSxhPTE7YTx0Lmxlbmd0aDsrK2Epcj1pKHIsbih0W2FdLGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInR3by1wcm9kdWN0IiksaT10KCJyb2J1c3Qtc3VtIiksYT10KCJyb2J1c3Qtc3VidHJhY3QiKSxvPXQoInJvYnVzdC1zY2FsZSIpO2Z1bmN0aW9uIHModCl7cmV0dXJuKDM9PT10P2w6ND09PXQ/Yzo1PT09dD91OmYpKGksYSxuLG8pfWZ1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvKXt2YXIgcz1yKGlbMF0saVswXSksbD1uKHMsYVswXSksYz1uKHMsb1swXSksdT1yKGFbMF0sYVswXSksZj1uKHUsaVswXSksaD1uKHUsb1swXSkscD1yKG9bMF0sb1swXSksZD1uKHAsaVswXSksbT1uKHAsYVswXSksZz10KGUobSxoKSxlKGYsbCkpLHY9ZShkLGMpLHk9ZShnLHYpO3JldHVybiB5W3kubGVuZ3RoLTFdfX1mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyxzKXt2YXIgbD10KHIoaVswXSxpWzBdKSxyKGlbMV0saVsxXSkpLGM9bihsLGFbMF0pLHU9bihsLG9bMF0pLGY9bihsLHNbMF0pLGg9dChyKGFbMF0sYVswXSkscihhWzFdLGFbMV0pKSxwPW4oaCxpWzBdKSxkPW4oaCxvWzBdKSxtPW4oaCxzWzBdKSxnPXQocihvWzBdLG9bMF0pLHIob1sxXSxvWzFdKSksdj1uKGcsaVswXSkseT1uKGcsYVswXSkseD1uKGcsc1swXSksYj10KHIoc1swXSxzWzBdKSxyKHNbMV0sc1sxXSkpLF89bihiLGlbMF0pLHc9bihiLGFbMF0pLFQ9bihiLG9bMF0pLGs9dCh0KG4oZShULHgpLGFbMV0pLHQobihlKHcsbSksLW9bMV0pLG4oZSh5LGQpLHNbMV0pKSksdChuKGUodyxtKSxpWzFdKSx0KG4oZShfLGYpLC1hWzFdKSxuKGUocCxjKSxzWzFdKSkpKSxBPXQodChuKGUoVCx4KSxpWzFdKSx0KG4oZShfLGYpLC1vWzFdKSxuKGUodix1KSxzWzFdKSkpLHQobihlKHksZCksaVsxXSksdChuKGUodix1KSwtYVsxXSksbihlKHAsYyksb1sxXSkpKSksTT1lKGssQSk7cmV0dXJuIE1bTS5sZW5ndGgtMV19fWZ1bmN0aW9uIHUodCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCl7dmFyIGM9dChyKGlbMF0saVswXSksdChyKGlbMV0saVsxXSkscihpWzJdLGlbMl0pKSksdT1uKGMsYVswXSksZj1uKGMsb1swXSksaD1uKGMsc1swXSkscD1uKGMsbFswXSksZD10KHIoYVswXSxhWzBdKSx0KHIoYVsxXSxhWzFdKSxyKGFbMl0sYVsyXSkpKSxtPW4oZCxpWzBdKSxnPW4oZCxvWzBdKSx2PW4oZCxzWzBdKSx5PW4oZCxsWzBdKSx4PXQocihvWzBdLG9bMF0pLHQocihvWzFdLG9bMV0pLHIob1syXSxvWzJdKSkpLGI9bih4LGlbMF0pLF89bih4LGFbMF0pLHc9bih4LHNbMF0pLFQ9bih4LGxbMF0pLGs9dChyKHNbMF0sc1swXSksdChyKHNbMV0sc1sxXSkscihzWzJdLHNbMl0pKSksQT1uKGssaVswXSksTT1uKGssYVswXSksUz1uKGssb1swXSksRT1uKGssbFswXSksTD10KHIobFswXSxsWzBdKSx0KHIobFsxXSxsWzFdKSxyKGxbMl0sbFsyXSkpKSxDPW4oTCxpWzBdKSxQPW4oTCxhWzBdKSxJPW4oTCxvWzBdKSxPPW4oTCxzWzBdKSx6PXQodCh0KG4odChuKGUoTyxFKSxvWzFdKSx0KG4oZShJLFQpLC1zWzFdKSxuKGUoUyx3KSxsWzFdKSkpLGFbMl0pLHQobih0KG4oZShPLEUpLGFbMV0pLHQobihlKFAseSksLXNbMV0pLG4oZShNLHYpLGxbMV0pKSksLW9bMl0pLG4odChuKGUoSSxUKSxhWzFdKSx0KG4oZShQLHkpLC1vWzFdKSxuKGUoXyxnKSxsWzFdKSkpLHNbMl0pKSksdChuKHQobihlKFMsdyksYVsxXSksdChuKGUoTSx2KSwtb1sxXSksbihlKF8sZyksc1sxXSkpKSwtbFsyXSksdChuKHQobihlKE8sRSksYVsxXSksdChuKGUoUCx5KSwtc1sxXSksbihlKE0sdiksbFsxXSkpKSxpWzJdKSxuKHQobihlKE8sRSksaVsxXSksdChuKGUoQyxwKSwtc1sxXSksbihlKEEsaCksbFsxXSkpKSwtYVsyXSkpKSksdCh0KG4odChuKGUoUCx5KSxpWzFdKSx0KG4oZShDLHApLC1hWzFdKSxuKGUobSx1KSxsWzFdKSkpLHNbMl0pLHQobih0KG4oZShNLHYpLGlbMV0pLHQobihlKEEsaCksLWFbMV0pLG4oZShtLHUpLHNbMV0pKSksLWxbMl0pLG4odChuKGUoUyx3KSxhWzFdKSx0KG4oZShNLHYpLC1vWzFdKSxuKGUoXyxnKSxzWzFdKSkpLGlbMl0pKSksdChuKHQobihlKFMsdyksaVsxXSksdChuKGUoQSxoKSwtb1sxXSksbihlKGIsZiksc1sxXSkpKSwtYVsyXSksdChuKHQobihlKE0sdiksaVsxXSksdChuKGUoQSxoKSwtYVsxXSksbihlKG0sdSksc1sxXSkpKSxvWzJdKSxuKHQobihlKF8sZyksaVsxXSksdChuKGUoYixmKSwtYVsxXSksbihlKG0sdSksb1sxXSkpKSwtc1syXSkpKSkpLEQ9dCh0KHQobih0KG4oZShPLEUpLG9bMV0pLHQobihlKEksVCksLXNbMV0pLG4oZShTLHcpLGxbMV0pKSksaVsyXSksbih0KG4oZShPLEUpLGlbMV0pLHQobihlKEMscCksLXNbMV0pLG4oZShBLGgpLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSSxUKSxpWzFdKSx0KG4oZShDLHApLC1vWzFdKSxuKGUoYixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUyx3KSxpWzFdKSx0KG4oZShBLGgpLC1vWzFdKSxuKGUoYixmKSxzWzFdKSkpLC1sWzJdKSkpLHQodChuKHQobihlKEksVCksYVsxXSksdChuKGUoUCx5KSwtb1sxXSksbihlKF8sZyksbFsxXSkpKSxpWzJdKSxuKHQobihlKEksVCksaVsxXSksdChuKGUoQyxwKSwtb1sxXSksbihlKGIsZiksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShQLHkpLGlbMV0pLHQobihlKEMscCksLWFbMV0pLG4oZShtLHUpLGxbMV0pKSksb1syXSksbih0KG4oZShfLGcpLGlbMV0pLHQobihlKGIsZiksLWFbMV0pLG4oZShtLHUpLG9bMV0pKSksLWxbMl0pKSkpLFI9ZSh6LEQpO3JldHVybiBSW1IubGVuZ3RoLTFdfX1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihpLGEsbyxzLGwsYyl7dmFyIHU9dCh0KHIoaVswXSxpWzBdKSxyKGlbMV0saVsxXSkpLHQocihpWzJdLGlbMl0pLHIoaVszXSxpWzNdKSkpLGY9bih1LGFbMF0pLGg9bih1LG9bMF0pLHA9bih1LHNbMF0pLGQ9bih1LGxbMF0pLG09bih1LGNbMF0pLGc9dCh0KHIoYVswXSxhWzBdKSxyKGFbMV0sYVsxXSkpLHQocihhWzJdLGFbMl0pLHIoYVszXSxhWzNdKSkpLHY9bihnLGlbMF0pLHk9bihnLG9bMF0pLHg9bihnLHNbMF0pLGI9bihnLGxbMF0pLF89bihnLGNbMF0pLHc9dCh0KHIob1swXSxvWzBdKSxyKG9bMV0sb1sxXSkpLHQocihvWzJdLG9bMl0pLHIob1szXSxvWzNdKSkpLFQ9bih3LGlbMF0pLGs9bih3LGFbMF0pLEE9bih3LHNbMF0pLE09bih3LGxbMF0pLFM9bih3LGNbMF0pLEU9dCh0KHIoc1swXSxzWzBdKSxyKHNbMV0sc1sxXSkpLHQocihzWzJdLHNbMl0pLHIoc1szXSxzWzNdKSkpLEw9bihFLGlbMF0pLEM9bihFLGFbMF0pLFA9bihFLG9bMF0pLEk9bihFLGxbMF0pLE89bihFLGNbMF0pLHo9dCh0KHIobFswXSxsWzBdKSxyKGxbMV0sbFsxXSkpLHQocihsWzJdLGxbMl0pLHIobFszXSxsWzNdKSkpLEQ9bih6LGlbMF0pLFI9bih6LGFbMF0pLEY9bih6LG9bMF0pLEI9bih6LHNbMF0pLE49bih6LGNbMF0pLGo9dCh0KHIoY1swXSxjWzBdKSxyKGNbMV0sY1sxXSkpLHQocihjWzJdLGNbMl0pLHIoY1szXSxjWzNdKSkpLFU9bihqLGlbMF0pLFY9bihqLGFbMF0pLEg9bihqLG9bMF0pLHE9bihqLHNbMF0pLEc9bihqLGxbMF0pLFk9dCh0KHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksb1syXSksbih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLC1jWzJdKSkpLGFbM10pLHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksYVsyXSksbih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1jWzJdKSkpLC1vWzNdKSxuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksLWNbMl0pKSksc1szXSkpKSx0KHQobih0KHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksYVsyXSksbih0KG4oZShxLE8pLGFbMV0pLHQobihlKFYsXyksLXNbMV0pLG4oZShDLHgpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxhWzFdKSx0KG4oZShWLF8pLC1vWzFdKSxuKGUoayx5KSxjWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSxuKHQodChuKHQobihlKEIsSSksb1sxXSksdChuKGUoRixNKSwtc1sxXSksbihlKFAsQSksbFsxXSkpKSxhWzJdKSxuKHQobihlKEIsSSksYVsxXSksdChuKGUoUixiKSwtc1sxXSksbihlKEMseCksbFsxXSkpKSwtb1syXSkpLHQobih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksLWxbMl0pKSksY1szXSkpLHQobih0KHQobih0KG4oZShHLE4pLHNbMV0pLHQobihlKHEsTyksLWxbMV0pLG4oZShCLEkpLGNbMV0pKSksYVsyXSksbih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksLXNbMl0pKSx0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGxbMl0pLG4odChuKGUoQixJKSxhWzFdKSx0KG4oZShSLGIpLC1zWzFdKSxuKGUoQyx4KSxsWzFdKSkpLC1jWzJdKSkpLGlbM10pLG4odCh0KG4odChuKGUoRyxOKSxzWzFdKSx0KG4oZShxLE8pLC1sWzFdKSxuKGUoQixJKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1zWzJdKSksdChuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEIsSSksaVsxXSksdChuKGUoRCxkKSwtc1sxXSksbihlKEwscCksbFsxXSkpKSwtY1syXSkpKSwtYVszXSkpKSksdCh0KHQobih0KHQobih0KG4oZShHLE4pLGFbMV0pLHQobihlKFYsXyksLWxbMV0pLG4oZShSLGIpLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLC1jWzJdKSkpLHNbM10pLG4odCh0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxzWzJdKSxuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSwtY1syXSkpKSwtbFszXSkpLHQobih0KHQobih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1sWzJdKSkpLGNbM10pLG4odCh0KG4odChuKGUocSxPKSxvWzFdKSx0KG4oZShILFMpLC1zWzFdKSxuKGUoUCxBKSxjWzFdKSkpLGFbMl0pLG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksYVsxXSksdChuKGUoQyx4KSwtb1sxXSksbihlKGsseSksc1sxXSkpKSwtY1syXSkpKSxpWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxpWzJdKSxuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWNbMl0pKSksLWFbM10pLG4odCh0KG4odChuKGUocSxPKSxhWzFdKSx0KG4oZShWLF8pLC1zWzFdKSxuKGUoQyx4KSxjWzFdKSkpLGlbMl0pLG4odChuKGUocSxPKSxpWzFdKSx0KG4oZShVLG0pLC1zWzFdKSxuKGUoTCxwKSxjWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFYsXyksaVsxXSksdChuKGUoVSxtKSwtYVsxXSksbihlKHYsZiksY1sxXSkpKSxzWzJdKSxuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSwtY1syXSkpKSxvWzNdKSksdChuKHQodChuKHQobihlKEgsUyksYVsxXSksdChuKGUoVixfKSwtb1sxXSksbihlKGsseSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWNbMl0pKSksLXNbM10pLG4odCh0KG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLGlbMl0pLG4odChuKGUoUCxBKSxpWzFdKSx0KG4oZShMLHApLC1vWzFdKSxuKGUoVCxoKSxzWzFdKSkpLC1hWzJdKSksdChuKHQobihlKEMseCksaVsxXSksdChuKGUoTCxwKSwtYVsxXSksbihlKHYsZiksc1sxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtc1syXSkpKSxjWzNdKSkpKSksVz10KHQodChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxvWzJdKSxuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLG9bMV0pLHQobihlKEgsUyksLXNbMV0pLG4oZShQLEEpLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksLWNbMl0pKSksaVszXSksdChuKHQodChuKHQobihlKEcsTiksc1sxXSksdChuKGUocSxPKSwtbFsxXSksbihlKEIsSSksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtc1syXSkpLHQobih0KG4oZShxLE8pLGlbMV0pLHQobihlKFUsbSksLXNbMV0pLG4oZShMLHApLGNbMV0pKSksbFsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWNbMl0pKSksLW9bM10pLG4odCh0KG4odChuKGUoRyxOKSxvWzFdKSx0KG4oZShILFMpLC1sWzFdKSxuKGUoRixNKSxjWzFdKSkpLGlbMl0pLG4odChuKGUoRyxOKSxpWzFdKSx0KG4oZShVLG0pLC1sWzFdKSxuKGUoRCxkKSxjWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEgsUyksaVsxXSksdChuKGUoVSxtKSwtb1sxXSksbihlKFQsaCksY1sxXSkpKSxsWzJdKSxuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSwtY1syXSkpKSxzWzNdKSkpLHQodChuKHQodChuKHQobihlKHEsTyksb1sxXSksdChuKGUoSCxTKSwtc1sxXSksbihlKFAsQSksY1sxXSkpKSxpWzJdKSxuKHQobihlKHEsTyksaVsxXSksdChuKGUoVSxtKSwtc1sxXSksbihlKEwscCksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksc1syXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWNbMl0pKSksLWxbM10pLG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtbFsyXSkpKSxjWzNdKSksdChuKHQodChuKHQobihlKEcsTiksb1sxXSksdChuKGUoSCxTKSwtbFsxXSksbihlKEYsTSksY1sxXSkpKSxhWzJdKSxuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSwtb1syXSkpLHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksbFsyXSksbih0KG4oZShGLE0pLGFbMV0pLHQobihlKFIsYiksLW9bMV0pLG4oZShrLHkpLGxbMV0pKSksLWNbMl0pKSksaVszXSksbih0KHQobih0KG4oZShHLE4pLG9bMV0pLHQobihlKEgsUyksLWxbMV0pLG4oZShGLE0pLGNbMV0pKSksaVsyXSksbih0KG4oZShHLE4pLGlbMV0pLHQobihlKFUsbSksLWxbMV0pLG4oZShELGQpLGNbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoSCxTKSxpWzFdKSx0KG4oZShVLG0pLC1vWzFdKSxuKGUoVCxoKSxjWzFdKSkpLGxbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1jWzJdKSkpLC1hWzNdKSkpKSx0KHQodChuKHQodChuKHQobihlKEcsTiksYVsxXSksdChuKGUoVixfKSwtbFsxXSksbihlKFIsYiksY1sxXSkpKSxpWzJdKSxuKHQobihlKEcsTiksaVsxXSksdChuKGUoVSxtKSwtbFsxXSksbihlKEQsZCksY1sxXSkpKSwtYVsyXSkpLHQobih0KG4oZShWLF8pLGlbMV0pLHQobihlKFUsbSksLWFbMV0pLG4oZSh2LGYpLGNbMV0pKSksbFsyXSksbih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksLWNbMl0pKSksb1szXSksbih0KHQobih0KG4oZShILFMpLGFbMV0pLHQobihlKFYsXyksLW9bMV0pLG4oZShrLHkpLGNbMV0pKSksaVsyXSksbih0KG4oZShILFMpLGlbMV0pLHQobihlKFUsbSksLW9bMV0pLG4oZShULGgpLGNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoVixfKSxpWzFdKSx0KG4oZShVLG0pLC1hWzFdKSxuKGUodixmKSxjWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1jWzJdKSkpLC1sWzNdKSksdChuKHQodChuKHQobihlKEYsTSksYVsxXSksdChuKGUoUixiKSwtb1sxXSksbihlKGsseSksbFsxXSkpKSxpWzJdKSxuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSwtYVsyXSkpLHQobih0KG4oZShSLGIpLGlbMV0pLHQobihlKEQsZCksLWFbMV0pLG4oZSh2LGYpLGxbMV0pKSksb1syXSksbih0KG4oZShrLHkpLGlbMV0pLHQobihlKFQsaCksLWFbMV0pLG4oZSh2LGYpLG9bMV0pKSksLWxbMl0pKSksY1szXSksbih0KHQobih0KG4oZShCLEkpLG9bMV0pLHQobihlKEYsTSksLXNbMV0pLG4oZShQLEEpLGxbMV0pKSksYVsyXSksbih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksLW9bMl0pKSx0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLHNbMl0pLG4odChuKGUoUCxBKSxhWzFdKSx0KG4oZShDLHgpLC1vWzFdKSxuKGUoayx5KSxzWzFdKSkpLC1sWzJdKSkpLGlbM10pKSksdCh0KG4odCh0KG4odChuKGUoQixJKSxvWzFdKSx0KG4oZShGLE0pLC1zWzFdKSxuKGUoUCxBKSxsWzFdKSkpLGlbMl0pLG4odChuKGUoQixJKSxpWzFdKSx0KG4oZShELGQpLC1zWzFdKSxuKGUoTCxwKSxsWzFdKSkpLC1vWzJdKSksdChuKHQobihlKEYsTSksaVsxXSksdChuKGUoRCxkKSwtb1sxXSksbihlKFQsaCksbFsxXSkpKSxzWzJdKSxuKHQobihlKFAsQSksaVsxXSksdChuKGUoTCxwKSwtb1sxXSksbihlKFQsaCksc1sxXSkpKSwtbFsyXSkpKSwtYVszXSksbih0KHQobih0KG4oZShCLEkpLGFbMV0pLHQobihlKFIsYiksLXNbMV0pLG4oZShDLHgpLGxbMV0pKSksaVsyXSksbih0KG4oZShCLEkpLGlbMV0pLHQobihlKEQsZCksLXNbMV0pLG4oZShMLHApLGxbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoUixiKSxpWzFdKSx0KG4oZShELGQpLC1hWzFdKSxuKGUodixmKSxsWzFdKSkpLHNbMl0pLG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLC1sWzJdKSkpLG9bM10pKSx0KG4odCh0KG4odChuKGUoRixNKSxhWzFdKSx0KG4oZShSLGIpLC1vWzFdKSxuKGUoayx5KSxsWzFdKSkpLGlbMl0pLG4odChuKGUoRixNKSxpWzFdKSx0KG4oZShELGQpLC1vWzFdKSxuKGUoVCxoKSxsWzFdKSkpLC1hWzJdKSksdChuKHQobihlKFIsYiksaVsxXSksdChuKGUoRCxkKSwtYVsxXSksbihlKHYsZiksbFsxXSkpKSxvWzJdKSxuKHQobihlKGsseSksaVsxXSksdChuKGUoVCxoKSwtYVsxXSksbihlKHYsZiksb1sxXSkpKSwtbFsyXSkpKSwtc1szXSksbih0KHQobih0KG4oZShQLEEpLGFbMV0pLHQobihlKEMseCksLW9bMV0pLG4oZShrLHkpLHNbMV0pKSksaVsyXSksbih0KG4oZShQLEEpLGlbMV0pLHQobihlKEwscCksLW9bMV0pLG4oZShULGgpLHNbMV0pKSksLWFbMl0pKSx0KG4odChuKGUoQyx4KSxpWzFdKSx0KG4oZShMLHApLC1hWzFdKSxuKGUodixmKSxzWzFdKSkpLG9bMl0pLG4odChuKGUoayx5KSxpWzFdKSx0KG4oZShULGgpLC1hWzFdKSxuKGUodixmKSxvWzFdKSkpLC1zWzJdKSkpLGxbM10pKSkpKSxYPWUoWSxXKTtyZXR1cm4gWFtYLmxlbmd0aC0xXX19dmFyIGg9W2Z1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9LGZ1bmN0aW9uKCl7cmV0dXJuIDB9XTtmdW5jdGlvbiBwKHQpe3ZhciBlPWhbdC5sZW5ndGhdO3JldHVybiBlfHwoZT1oW3QubGVuZ3RoXT1zKHQubGVuZ3RoKSksZS5hcHBseSh2b2lkIDAsdCl9ZnVuY3Rpb24gZCh0LGUscixuLGksYSxvLHMpe3JldHVybiBmdW5jdGlvbihlLHIsbCxjLHUsZil7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiBuKGUscik7Y2FzZSAzOnJldHVybiBpKGUscixsKTtjYXNlIDQ6cmV0dXJuIGEoZSxyLGwsYyk7Y2FzZSA1OnJldHVybiBvKGUscixsLGMsdSk7Y2FzZSA2OnJldHVybiBzKGUscixsLGMsdSxmKX1mb3IodmFyIGg9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLHA9MDtwPGFyZ3VtZW50cy5sZW5ndGg7KytwKWhbcF09YXJndW1lbnRzW3BdO3JldHVybiB0KGgpfX0hZnVuY3Rpb24oKXtmb3IoO2gubGVuZ3RoPD02OyloLnB1c2gocyhoLmxlbmd0aCkpO2UuZXhwb3J0cz1kLmFwcGx5KHZvaWQgMCxbcF0uY29uY2F0KGgpKTtmb3IodmFyIHQ9MDt0PD02OysrdCllLmV4cG9ydHNbdF09aFt0XX0oKX0seyJyb2J1c3Qtc2NhbGUiOjUyNiwicm9idXN0LXN1YnRyYWN0Ijo1MjgsInJvYnVzdC1zdW0iOjUyOSwidHdvLXByb2R1Y3QiOjU3N31dLDUyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJyb2J1c3QtZGV0ZXJtaW5hbnQiKTtmdW5jdGlvbiBpKHQpe3ZhciBlPTI9PT10P2E6bztyZXR1cm4gZSh0PDM/blt0XTpuKX1mdW5jdGlvbiBhKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3JldHVyblt0KFtbK3JbMF0sK2VbMF1bMV1dLFsrclsxXSwrZVsxXVsxXV1dKSx0KFtbK2VbMF1bMF0sK3JbMF1dLFsrZVsxXVswXSwrclsxXV1dKSx0KGUpXX19ZnVuY3Rpb24gbyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm5bdChbWytyWzBdLCtlWzBdWzFdLCtlWzBdWzJdXSxbK3JbMV0sK2VbMV1bMV0sK2VbMV1bMl1dLFsrclsyXSwrZVsyXVsxXSwrZVsyXVsyXV1dKSx0KFtbK2VbMF1bMF0sK3JbMF0sK2VbMF1bMl1dLFsrZVsxXVswXSwrclsxXSwrZVsxXVsyXV0sWytlWzJdWzBdLCtyWzJdLCtlWzJdWzJdXV0pLHQoW1srZVswXVswXSwrZVswXVsxXSwrclswXV0sWytlWzFdWzBdLCtlWzFdWzFdLCtyWzFdXSxbK2VbMl1bMF0sK2VbMl1bMV0sK3JbMl1dXSksdChlKV19fXZhciBzPVtmdW5jdGlvbigpe3JldHVybltbMF1dfSxmdW5jdGlvbih0LGUpe3JldHVybltbZVswXV0sW3RbMF1bMF1dXX1dO2Z1bmN0aW9uIGwodCxlLHIsbixpLGEpe3JldHVybiBmdW5jdGlvbihvLHMpe3N3aXRjaChvLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0KG8scyk7Y2FzZSAxOnJldHVybiBlKG8scyk7Y2FzZSAyOnJldHVybiByKG8scyk7Y2FzZSAzOnJldHVybiBuKG8scyl9dmFyIGw9aVtvLmxlbmd0aF07cmV0dXJuIGx8fChsPWlbby5sZW5ndGhdPWEoby5sZW5ndGgpKSxsKG8scyl9fSFmdW5jdGlvbigpe2Zvcig7cy5sZW5ndGg8PTM7KXMucHVzaChpKHMubGVuZ3RoKSk7ZS5leHBvcnRzPWwuYXBwbHkodm9pZCAwLHMuY29uY2F0KFtzLGldKSk7Zm9yKHZhciB0PTA7dDwzOysrdCllLmV4cG9ydHNbdF09c1t0XX0oKX0seyJyb2J1c3QtZGV0ZXJtaW5hbnQiOjUyMH1dLDUyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpLGE9dCgicm9idXN0LXNjYWxlIiksbz10KCJyb2J1c3Qtc3VidHJhY3QiKTtmdW5jdGlvbiBzKHQsZSxyLG4pe3JldHVybiBmdW5jdGlvbihyLGksYSl7dmFyIG89dCh0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSx0KGUoclsxXSxpWzBdKSxlKC1pWzFdLHJbMF0pKSkscz10KGUoclsxXSxhWzBdKSxlKC1hWzFdLHJbMF0pKSxsPW4obyxzKTtyZXR1cm4gbFtsLmxlbmd0aC0xXX19ZnVuY3Rpb24gbCh0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oaSxhLG8scyl7dmFyIGw9dCh0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpKSxjPXQodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSksdT1uKGwsYyk7cmV0dXJuIHVbdS5sZW5ndGgtMV19fWZ1bmN0aW9uIGModCxlLHIsbil7cmV0dXJuIGZ1bmN0aW9uKGksYSxvLHMsbCl7dmFyIGM9dCh0KHQocih0KHIodChlKHNbMV0sbFswXSksZSgtbFsxXSxzWzBdKSksb1syXSksdChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLC1zWzJdKSxyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGxbMl0pKSksYVszXSksdChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxhWzJdKSx0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksLXNbMl0pLHIodChlKGFbMV0sc1swXSksZSgtc1sxXSxhWzBdKSksbFsyXSkpKSwtb1szXSkscih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLGxbMF0pLGUoLWxbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGxbMl0pKSksc1szXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxzWzJdKSkpLC1sWzNdKSx0KHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtc1syXSkscih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShzWzFdLGxbMF0pLGUoLWxbMV0sc1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtc1syXSkscih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSkpKSx0KHQocih0KHIodChlKGFbMV0sbFswXSksZSgtbFsxXSxhWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1hWzJdKSxyKHQoZShpWzFdLGFbMF0pLGUoLWFbMV0saVswXSkpLGxbMl0pKSksc1szXSksdChyKHQocih0KGUoYVsxXSxzWzBdKSxlKC1zWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksc1syXSkpKSwtbFszXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksYVsyXSksdChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLC1vWzJdKSxyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLHNbMl0pKSksaVszXSkpKSx0KHIodChyKHQoZShvWzFdLHNbMF0pLGUoLXNbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxzWzJdKSkpLC1hWzNdKSx0KHIodChyKHQoZShhWzFdLHNbMF0pLGUoLXNbMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxzWzBdKSxlKC1zWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxzWzJdKSkpLG9bM10pLHIodChyKHQoZShhWzFdLG9bMF0pLGUoLW9bMV0sYVswXSkpLGlbMl0pLHQocih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSwtYVsyXSkscih0KGUoaVsxXSxhWzBdKSxlKC1hWzFdLGlbMF0pKSxvWzJdKSkpLC1zWzNdKSkpKSksdT10KHQodChyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxvWzJdKSx0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksLXNbMl0pLHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksbFsyXSkpKSxpWzNdKSxyKHQocih0KGUoc1sxXSxsWzBdKSxlKC1sWzFdLHNbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLXNbMl0pLHIodChlKGlbMV0sc1swXSksZSgtc1sxXSxpWzBdKSksbFsyXSkpKSwtb1szXSkpLHQocih0KHIodChlKG9bMV0sbFswXSksZSgtbFsxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLGxbMF0pLGUoLWxbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLGxbMl0pKSksc1szXSkscih0KHIodChlKG9bMV0sc1swXSksZSgtc1sxXSxvWzBdKSksaVsyXSksdChyKHQoZShpWzFdLHNbMF0pLGUoLXNbMV0saVswXSkpLC1vWzJdKSxyKHQoZShpWzFdLG9bMF0pLGUoLW9bMV0saVswXSkpLHNbMl0pKSksLWxbM10pKSksdCh0KHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGFbMl0pLHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSwtb1syXSkscih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxsWzJdKSkpLGlbM10pLHIodChyKHQoZShvWzFdLGxbMF0pLGUoLWxbMV0sb1swXSkpLGlbMl0pLHQocih0KGUoaVsxXSxsWzBdKSxlKC1sWzFdLGlbMF0pKSwtb1syXSkscih0KGUoaVsxXSxvWzBdKSxlKC1vWzFdLGlbMF0pKSxsWzJdKSkpLC1hWzNdKSksdChyKHQocih0KGUoYVsxXSxsWzBdKSxlKC1sWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sbFswXSksZSgtbFsxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksbFsyXSkpKSxvWzNdKSxyKHQocih0KGUoYVsxXSxvWzBdKSxlKC1vWzFdLGFbMF0pKSxpWzJdKSx0KHIodChlKGlbMV0sb1swXSksZSgtb1sxXSxpWzBdKSksLWFbMl0pLHIodChlKGlbMV0sYVswXSksZSgtYVsxXSxpWzBdKSksb1syXSkpKSwtbFszXSkpKSksZj1uKGMsdSk7cmV0dXJuIGZbZi5sZW5ndGgtMV19fWZ1bmN0aW9uIHUodCl7cmV0dXJuKDM9PT10P3M6ND09PXQ/bDpjKShpLG4sYSxvKX12YXIgZj11KDMpLGg9dSg0KSxwPVtmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbigpe3JldHVybiAwfSxmdW5jdGlvbih0LGUpe3JldHVybiBlWzBdLXRbMF19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPSh0WzFdLXJbMV0pKihlWzBdLXJbMF0pLGE9KHRbMF0tclswXSkqKGVbMV0tclsxXSksbz1pLWE7aWYoaT4wKXtpZihhPD0wKXJldHVybiBvO249aSthfWVsc2V7aWYoIShpPDApKXJldHVybiBvO2lmKGE+PTApcmV0dXJuIG87bj0tKGkrYSl9dmFyIHM9MzMzMDY2OTA3Mzg3NTQ3MTZlLTMyKm47cmV0dXJuIG8+PXN8fG88PS1zP286Zih0LGUscil9LGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0tblswXSxhPWVbMF0tblswXSxvPXJbMF0tblswXSxzPXRbMV0tblsxXSxsPWVbMV0tblsxXSxjPXJbMV0tblsxXSx1PXRbMl0tblsyXSxmPWVbMl0tblsyXSxwPXJbMl0tblsyXSxkPWEqYyxtPW8qbCxnPW8qcyx2PWkqYyx5PWkqbCx4PWEqcyxiPXUqKGQtbSkrZiooZy12KStwKih5LXgpLF89Nzc3MTU2MTE3MjM3NjEwM2UtMzEqKChNYXRoLmFicyhkKStNYXRoLmFicyhtKSkqTWF0aC5hYnModSkrKE1hdGguYWJzKGcpK01hdGguYWJzKHYpKSpNYXRoLmFicyhmKSsoTWF0aC5hYnMoeSkrTWF0aC5hYnMoeCkpKk1hdGguYWJzKHApKTtyZXR1cm4gYj5ffHwtYj5fP2I6aCh0LGUscixuKX1dO2Z1bmN0aW9uIGQodCl7dmFyIGU9cFt0Lmxlbmd0aF07cmV0dXJuIGV8fChlPXBbdC5sZW5ndGhdPXUodC5sZW5ndGgpKSxlLmFwcGx5KHZvaWQgMCx0KX1mdW5jdGlvbiBtKHQsZSxyLG4saSxhLG8pe3JldHVybiBmdW5jdGlvbihlLHIscyxsLGMpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gbihlLHIpO2Nhc2UgMzpyZXR1cm4gaShlLHIscyk7Y2FzZSA0OnJldHVybiBhKGUscixzLGwpO2Nhc2UgNTpyZXR1cm4gbyhlLHIscyxsLGMpfWZvcih2YXIgdT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksZj0wO2Y8YXJndW1lbnRzLmxlbmd0aDsrK2YpdVtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHQodSl9fSFmdW5jdGlvbigpe2Zvcig7cC5sZW5ndGg8PTU7KXAucHVzaCh1KHAubGVuZ3RoKSk7ZS5leHBvcnRzPW0uYXBwbHkodm9pZCAwLFtkXS5jb25jYXQocCkpO2Zvcih2YXIgdD0wO3Q8PTU7Kyt0KWUuZXhwb3J0c1t0XT1wW3RdfSgpfSx7InJvYnVzdC1zY2FsZSI6NTI2LCJyb2J1c3Qtc3VidHJhY3QiOjUyOCwicm9idXN0LXN1bSI6NTI5LCJ0d28tcHJvZHVjdCI6NTc3fV0sNTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1zdW0iKSxpPXQoInJvYnVzdC1zY2FsZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKDE9PT10Lmxlbmd0aClyZXR1cm4gaShlLHRbMF0pO2lmKDE9PT1lLmxlbmd0aClyZXR1cm4gaSh0LGVbMF0pO2lmKDA9PT10Lmxlbmd0aHx8MD09PWUubGVuZ3RoKXJldHVyblswXTt2YXIgcj1bMF07aWYodC5sZW5ndGg8ZS5sZW5ndGgpZm9yKHZhciBhPTA7YTx0Lmxlbmd0aDsrK2Epcj1uKHIsaShlLHRbYV0pKTtlbHNlIGZvcihhPTA7YTxlLmxlbmd0aDsrK2Epcj1uKHIsaSh0LGVbYV0pKTtyZXR1cm4gcn19LHsicm9idXN0LXNjYWxlIjo1MjYsInJvYnVzdC1zdW0iOjUyOX1dLDUyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJ0d28tcHJvZHVjdCIpLGk9dCgidHdvLXN1bSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoO2lmKDE9PT1yKXt2YXIgYT1uKHRbMF0sZSk7cmV0dXJuIGFbMF0/YTpbYVsxXV19dmFyIG89bmV3IEFycmF5KDIqcikscz1bLjEsLjFdLGw9Wy4xLC4xXSxjPTA7bih0WzBdLGUscyksc1swXSYmKG9bYysrXT1zWzBdKTtmb3IodmFyIHU9MTt1PHI7Kyt1KXtuKHRbdV0sZSxsKTt2YXIgZj1zWzFdO2koZixsWzBdLHMpLHNbMF0mJihvW2MrK109c1swXSk7dmFyIGg9bFsxXSxwPXNbMV0sZD1oK3AsbT1wLShkLWgpO3NbMV09ZCxtJiYob1tjKytdPW0pfXNbMV0mJihvW2MrK109c1sxXSk7MD09PWMmJihvW2MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPWMsb319LHsidHdvLXByb2R1Y3QiOjU3NywidHdvLXN1bSI6NTc4fV0sNTI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1uKHQscixpKSxvPW4oZSxyLGkpO2lmKGE+MCYmbz4wfHxhPDAmJm88MClyZXR1cm4hMTt2YXIgcz1uKHIsdCxlKSxsPW4oaSx0LGUpO2lmKHM+MCYmbD4wfHxzPDAmJmw8MClyZXR1cm4hMTtpZigwPT09YSYmMD09PW8mJjA9PT1zJiYwPT09bClyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTA7aTwyOysraSl7dmFyIGE9dFtpXSxvPWVbaV0scz1NYXRoLm1pbihhLG8pLGw9TWF0aC5tYXgoYSxvKSxjPXJbaV0sdT1uW2ldLGY9TWF0aC5taW4oYyx1KTtpZihNYXRoLm1heChjLHUpPHN8fGw8ZilyZXR1cm4hMX1yZXR1cm4hMH0odCxlLHIsaSk7cmV0dXJuITB9O3ZhciBuPXQoInJvYnVzdC1vcmllbnRhdGlvbiIpWzNdfSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTB8dC5sZW5ndGgsbj0wfGUubGVuZ3RoO2lmKDE9PT1yJiYxPT09bilyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj10K2Usbj1yLXQsaT10LShyLW4pKyhlLW4pO2lmKGkpcmV0dXJuW2kscl07cmV0dXJuW3JdfSh0WzBdLC1lWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9LWVbY10sZD11KHApO2g8ZD8oYT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihhPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpO2w8ciYmaDxkfHxjPj1uPyhpPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGk9cCwoYys9MSk8biYmKHA9LWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPS1lW2NdLGQ9dShwKSkpLCh4PShhPWIpLSh5PSh2PWkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW07Zm9yKDtsPHI7KSh4PShhPWIpLSh5PSh2PShpPWYpK2EpLWkpKSYmKG9bcysrXT14KSxiPV8tKChtPV8rdiktKGc9bS1fKSkrKHYtZyksXz1tLChsKz0xKTxyJiYoZj10W2xdKTtmb3IoO2M8bjspKHg9KGE9YiktKHk9KHY9KGk9cCkrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGMrPTEpPG4mJihwPS1lW2NdKTtiJiYob1tzKytdPWIpO18mJihvW3MrK109Xyk7c3x8KG9bcysrXT0wKTtyZXR1cm4gby5sZW5ndGg9cyxvfX0se31dLDUyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0wfHQubGVuZ3RoLG49MHxlLmxlbmd0aDtpZigxPT09ciYmMT09PW4pcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9dCtlLG49ci10LGk9dC0oci1uKSsoZS1uKTtpZihpKXJldHVybltpLHJdO3JldHVybltyXX0odFswXSxlWzBdKTt2YXIgaSxhLG89bmV3IEFycmF5KHIrbikscz0wLGw9MCxjPTAsdT1NYXRoLmFicyxmPXRbbF0saD11KGYpLHA9ZVtjXSxkPXUocCk7aDxkPyhhPWYsKGwrPTEpPHImJihmPXRbbF0saD11KGYpKSk6KGE9cCwoYys9MSk8biYmKHA9ZVtjXSxkPXUocCkpKTtsPHImJmg8ZHx8Yz49bj8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSk7dmFyIG0sZyx2PWkrYSx5PXYtaSx4PWEteSxiPXgsXz12O2Zvcig7bDxyJiZjPG47KWg8ZD8oaT1mLChsKz0xKTxyJiYoZj10W2xdLGg9dShmKSkpOihpPXAsKGMrPTEpPG4mJihwPWVbY10sZD11KHApKSksKHg9KGE9YiktKHk9KHY9aSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bTtmb3IoO2w8cjspKHg9KGE9YiktKHk9KHY9KGk9ZikrYSktaSkpJiYob1tzKytdPXgpLGI9Xy0oKG09Xyt2KS0oZz1tLV8pKSsodi1nKSxfPW0sKGwrPTEpPHImJihmPXRbbF0pO2Zvcig7YzxuOykoeD0oYT1iKS0oeT0odj0oaT1wKSthKS1pKSkmJihvW3MrK109eCksYj1fLSgobT1fK3YpLShnPW0tXykpKyh2LWcpLF89bSwoYys9MSk8biYmKHA9ZVtjXSk7YiYmKG9bcysrXT1iKTtfJiYob1tzKytdPV8pO3N8fChvW3MrK109MCk7cmV0dXJuIG8ubGVuZ3RoPXMsb319LHt9XSw1MzA6W2Z1bmN0aW9uKHQsZSxyKXsKLyohIHNhZmUtYnVmZmVyLiBNSVQgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovCnZhciBuPXQoImJ1ZmZlciIpLGk9bi5CdWZmZXI7ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gaSh0LGUscil9aS5mcm9tJiZpLmFsbG9jJiZpLmFsbG9jVW5zYWZlJiZpLmFsbG9jVW5zYWZlU2xvdz9lLmV4cG9ydHM9bjooYShuLHIpLHIuQnVmZmVyPW8pLG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaS5wcm90b3R5cGUpLGEoaSxvKSxvLmZyb209ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiBpKHQsZSxyKX0sby5hbGxvYz1mdW5jdGlvbih0LGUscil7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgbj1pKHQpO3JldHVybiB2b2lkIDAhPT1lPyJzdHJpbmciPT10eXBlb2Ygcj9uLmZpbGwoZSxyKTpuLmZpbGwoZSk6bi5maWxsKDApLG59LG8uYWxsb2NVbnNhZmU9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gaSh0KX0sby5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoIm51bWJlciIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gbi5TbG93QnVmZmVyKHQpfX0se2J1ZmZlcjoxMTJ9XSw1MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfTt2YXIgbj10KCJib3VuZGFyeS1jZWxscyIpLGk9dCgicmVkdWNlLXNpbXBsaWNpYWwtY29tcGxleCIpfSx7ImJvdW5kYXJ5LWNlbGxzIjoxMDMsInJlZHVjZS1zaW1wbGljaWFsLWNvbXBsZXgiOjUxMX1dLDUzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cj1yfHwwLHZvaWQgMD09PXMmJihzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPTAsbj0wO248ZTsrK24pcj0wfE1hdGgubWF4KHIsdFtuXS5sZW5ndGgpO3JldHVybiByLTF9KHQpKTtpZigwPT09dC5sZW5ndGh8fHM8MSlyZXR1cm57Y2VsbHM6W10sdmVydGV4SWRzOltdLHZlcnRleFdlaWdodHM6W119O3ZhciBsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49aS5tYWxsb2NVaW50OChyKSxhPTA7YTxyOysrYSluW2FdPXRbYV08ZXwwO3JldHVybiBufShlLCtyKSxjPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG89ZSooZSsxKS8yKnJ8MCxzPWkubWFsbG9jVWludDMyKDIqbyksbD0wLGM9MDtjPHI7KytjKWZvcih2YXIgdT10W2NdLGY9KGU9dS5sZW5ndGgsMCk7ZjxlOysrZilmb3IodmFyIGg9MDtoPGY7KytoKXt2YXIgcD11W2hdLGQ9dVtmXTtzW2wrK109MHxNYXRoLm1pbihwLGQpLHNbbCsrXT0wfE1hdGgubWF4KHAsZCl9YShuKHMsW2wvMnwwLDJdKSk7dmFyIG09Mjtmb3IoYz0yO2M8bDtjKz0yKXNbYy0yXT09PXNbY10mJnNbYy0xXT09PXNbYysxXXx8KHNbbSsrXT1zW2NdLHNbbSsrXT1zW2MrMV0pO3JldHVybiBuKHMsW20vMnwwLDJdKX0odCxzKSx1PWZ1bmN0aW9uKHQsZSxyLGEpe2Zvcih2YXIgbz10LmRhdGEscz10LnNoYXBlWzBdLGw9aS5tYWxsb2NEb3VibGUocyksYz0wLHU9MDt1PHM7Kyt1KXt2YXIgZj1vWzIqdV0saD1vWzIqdSsxXTtpZihyW2ZdIT09cltoXSl7dmFyIHA9ZVtmXSxkPWVbaF07b1syKmNdPWYsb1syKmMrMV09aCxsW2MrK109KGQtYSkvKGQtcCl9fXJldHVybiB0LnNoYXBlWzBdPWMsbihsLFtjXSl9KGMsZSxsLCtyKSxmPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aS5tYWxsb2NJbnQzMigyKmUpLG49dC5zaGFwZVswXSxhPXQuZGF0YTtyWzBdPTA7Zm9yKHZhciBvPTAscz0wO3M8bjsrK3Mpe3ZhciBsPWFbMipzXTtpZihsIT09byl7Zm9yKHJbMipvKzFdPXM7KytvPGw7KXJbMipvXT1zLHJbMipvKzFdPXM7clsyKm9dPXN9fXJbMipvKzFdPW47Zm9yKDsrK288ZTspclsyKm9dPXJbMipvKzFdPW47cmV0dXJuIHJ9KGMsMHxlLmxlbmd0aCksaD1vKHMpKHQsYy5kYXRhLGYsbCkscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MHx0LnNoYXBlWzBdLHI9dC5kYXRhLG49bmV3IEFycmF5KGUpLGk9MDtpPGU7KytpKW5baV09W3JbMippXSxyWzIqaSsxXV07cmV0dXJuIG59KGMpLGQ9W10uc2xpY2UuY2FsbCh1LmRhdGEsMCx1LnNoYXBlWzBdKTtyZXR1cm4gaS5mcmVlKGwpLGkuZnJlZShjLmRhdGEpLGkuZnJlZSh1LmRhdGEpLGkuZnJlZShmKSx7Y2VsbHM6aCx2ZXJ0ZXhJZHM6cCx2ZXJ0ZXhXZWlnaHRzOmR9fTt2YXIgbj10KCJuZGFycmF5IiksaT10KCJ0eXBlZGFycmF5LXBvb2wiKSxhPXQoIm5kYXJyYXktc29ydCIpLG89dCgiLi9saWIvY29kZWdlbiIpfSx7Ii4vbGliL2NvZGVnZW4iOjUzMyxuZGFycmF5OjQ2MiwibmRhcnJheS1zb3J0Ijo0NjEsInR5cGVkYXJyYXktcG9vbCI6NTkwfV0sNTMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XSgpfTt2YXIgbj1bZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPXQubGVuZ3RoLGE9MDthPGk7KythKXRbYV0ubGVuZ3RoO3JldHVybltdfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXTtpZigyPT09bC5sZW5ndGgpe3ZhciBjPShpW2xbMF1dPDwwKSsoaVtsWzFdXTw8MSk7aWYoMD09PWN8fDM9PT1jKWNvbnRpbnVlO3N3aXRjaChjKXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSldKX19fXJldHVybiBvfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXSxjPWwubGVuZ3RoO2lmKDM9PT1jKXtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSsoaVtsWzJdXTw8MikpfHw3PT09dSljb250aW51ZTtzd2l0Y2godSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMzpvLnB1c2goW3QobixyLGxbMF0sbFsyXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgNDpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzBdKV0pO2JyZWFrO2Nhc2UgNTpvLnB1c2goW3QobixyLGxbMl0sbFsxXSksdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgNjpvLnB1c2goW3QobixyLGxbMV0sbFswXSksdChuLHIsbFsyXSxsWzBdKV0pfX1lbHNlIGlmKDI9PT1jKXt2YXIgdTtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSl8fDM9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKV0pO2JyZWFrO2Nhc2UgMjpvLnB1c2goW3QobixyLGxbMV0sbFswXSldKX19fXJldHVybiBvfX0sZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxyLG4pe2Zvcih2YXIgaT0wfE1hdGgubWluKHIsbiksYT0wfE1hdGgubWF4KHIsbiksbz10WzIqaV0scz10WzIqaSsxXTtvPHM7KXt2YXIgbD1vK3M+PjEsYz1lWzIqbCsxXTtpZihjPT09YSlyZXR1cm4gbDthPGM/cz1sOm89bCsxfXJldHVybiBvfXJldHVybiBmdW5jdGlvbihlLHIsbixpKXtmb3IodmFyIGE9ZS5sZW5ndGgsbz1bXSxzPTA7czxhOysrcyl7dmFyIGw9ZVtzXSxjPWwubGVuZ3RoO2lmKDQ9PT1jKXtpZigwPT09KHU9KGlbbFswXV08PDApKyhpW2xbMV1dPDwxKSsoaVtsWzJdXTw8MikrKGlbbFszXV08PDMpKXx8MTU9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzBdLGxbMl0pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDI6by5wdXNoKFt0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzNdKV0pO2JyZWFrO2Nhc2UgMzpvLnB1c2goW3QobixyLGxbMV0sbFsyXSksdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbM10pXSxbdChuLHIsbFsxXSxsWzNdKSx0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDQ6by5wdXNoKFt0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMl0sbFsxXSksdChuLHIsbFsyXSxsWzNdKV0pO2JyZWFrO2Nhc2UgNTpvLnB1c2goW3QobixyLGxbMF0sbFsxXSksdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzBdLGxbM10pXSxbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbM10pLHQobixyLGxbMF0sbFszXSldKTticmVhaztjYXNlIDY6by5wdXNoKFt0KG4scixsWzJdLGxbMF0pLHQobixyLGxbMV0sbFswXSksdChuLHIsbFsxXSxsWzNdKV0sW3QobixyLGxbMl0sbFszXSksdChuLHIsbFsyXSxsWzBdKSx0KG4scixsWzFdLGxbM10pXSk7YnJlYWs7Y2FzZSA3Om8ucHVzaChbdChuLHIsbFswXSxsWzNdKSx0KG4scixsWzFdLGxbM10pLHQobixyLGxbMl0sbFszXSldKTticmVhaztjYXNlIDg6by5wdXNoKFt0KG4scixsWzNdLGxbMV0pLHQobixyLGxbM10sbFswXSksdChuLHIsbFszXSxsWzJdKV0pO2JyZWFrO2Nhc2UgOTpvLnB1c2goW3QobixyLGxbM10sbFsxXSksdChuLHIsbFswXSxsWzFdKSx0KG4scixsWzBdLGxbMl0pXSxbdChuLHIsbFszXSxsWzJdKSx0KG4scixsWzNdLGxbMV0pLHQobixyLGxbMF0sbFsyXSldKTticmVhaztjYXNlIDEwOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzNdLGxbMF0pLHQobixyLGxbMV0sbFsyXSldLFt0KG4scixsWzNdLGxbMF0pLHQobixyLGxbM10sbFsyXSksdChuLHIsbFsxXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMTE6by5wdXNoKFt0KG4scixsWzFdLGxbMl0pLHQobixyLGxbMF0sbFsyXSksdChuLHIsbFszXSxsWzJdKV0pO2JyZWFrO2Nhc2UgMTI6by5wdXNoKFt0KG4scixsWzNdLGxbMF0pLHQobixyLGxbMl0sbFswXSksdChuLHIsbFsyXSxsWzFdKV0sW3QobixyLGxbM10sbFsxXSksdChuLHIsbFszXSxsWzBdKSx0KG4scixsWzJdLGxbMV0pXSk7YnJlYWs7Y2FzZSAxMzpvLnB1c2goW3QobixyLGxbMF0sbFsxXSksdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzNdLGxbMV0pXSk7YnJlYWs7Y2FzZSAxNDpvLnB1c2goW3QobixyLGxbMl0sbFswXSksdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzNdLGxbMF0pXSl9fWVsc2UgaWYoMz09PWMpe2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKyhpW2xbMl1dPDwyKSl8fDc9PT11KWNvbnRpbnVlO3N3aXRjaCh1KXtjYXNlIDA6YnJlYWs7Y2FzZSAxOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSAzOm8ucHVzaChbdChuLHIsbFswXSxsWzJdKSx0KG4scixsWzFdLGxbMl0pXSk7YnJlYWs7Y2FzZSA0Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzJdLGxbMF0pXSk7YnJlYWs7Y2FzZSA1Om8ucHVzaChbdChuLHIsbFsyXSxsWzFdKSx0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSA2Om8ucHVzaChbdChuLHIsbFsxXSxsWzBdKSx0KG4scixsWzJdLGxbMF0pXSl9fWVsc2UgaWYoMj09PWMpe3ZhciB1O2lmKDA9PT0odT0oaVtsWzBdXTw8MCkrKGlbbFsxXV08PDEpKXx8Mz09PXUpY29udGludWU7c3dpdGNoKHUpe2Nhc2UgMDpicmVhaztjYXNlIDE6by5wdXNoKFt0KG4scixsWzBdLGxbMV0pXSk7YnJlYWs7Y2FzZSAyOm8ucHVzaChbdChuLHIsbFsxXSxsWzBdKV0pfX19cmV0dXJuIG99fV19LHt9XSw1MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiYml0LXR3aWRkbGUiKSxpPXQoInVuaW9uLWZpbmQiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHI9dC5sZW5ndGgsbj10Lmxlbmd0aC1lLmxlbmd0aCxpPU1hdGgubWluO2lmKG4pcmV0dXJuIG47c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gMDtjYXNlIDE6cmV0dXJuIHRbMF0tZVswXTtjYXNlIDI6cmV0dXJuKHM9dFswXSt0WzFdLWVbMF0tZVsxXSl8fGkodFswXSx0WzFdKS1pKGVbMF0sZVsxXSk7Y2FzZSAzOnZhciBhPXRbMF0rdFsxXSxvPWVbMF0rZVsxXTtpZihzPWErdFsyXS0obytlWzJdKSlyZXR1cm4gczt2YXIgcyxsPWkodFswXSx0WzFdKSxjPWkoZVswXSxlWzFdKTtyZXR1cm4ocz1pKGwsdFsyXSktaShjLGVbMl0pKXx8aShsK3RbMl0sYSktaShjK2VbMl0sbyk7ZGVmYXVsdDp2YXIgdT10LnNsaWNlKDApO3Uuc29ydCgpO3ZhciBmPWUuc2xpY2UoMCk7Zi5zb3J0KCk7Zm9yKHZhciBoPTA7aDxyOysraClpZihuPXVbaF0tZltoXSlyZXR1cm4gbjtyZXR1cm4gMH19ZnVuY3Rpb24gbyh0LGUpe3JldHVybiBhKHRbMF0sZVswXSl9ZnVuY3Rpb24gcyh0LGUpe2lmKGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPW5ldyBBcnJheShyKSxpPTA7aTxyOysraSluW2ldPVt0W2ldLGVbaV1dO24uc29ydChvKTtmb3IoaT0wO2k8cjsrK2kpdFtpXT1uW2ldWzBdLGVbaV09bltpXVsxXTtyZXR1cm4gdH1yZXR1cm4gdC5zb3J0KGEpLHR9ZnVuY3Rpb24gbCh0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuW107Zm9yKHZhciBlPTEscj10Lmxlbmd0aCxuPTE7bjxyOysrbil7dmFyIGk9dFtuXTtpZihhKGksdFtuLTFdKSl7aWYobj09PWUpe2UrKztjb250aW51ZX10W2UrK109aX19cmV0dXJuIHQubGVuZ3RoPWUsdH1mdW5jdGlvbiBjKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xLGk9LTE7cjw9bjspe3ZhciBvPXIrbj4+MSxzPWEodFtvXSxlKTtzPD0wPygwPT09cyYmKGk9bykscj1vKzEpOnM+MCYmKG49by0xKX1yZXR1cm4gaX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0Lmxlbmd0aCksaT0wLG89ci5sZW5ndGg7aTxvOysraSlyW2ldPVtdO2Zvcih2YXIgcz1bXSxsPShpPTAsZS5sZW5ndGgpO2k8bDsrK2kpZm9yKHZhciB1PWVbaV0sZj11Lmxlbmd0aCxoPTEscD0xPDxmO2g8cDsrK2gpe3MubGVuZ3RoPW4ucG9wQ291bnQoaCk7Zm9yKHZhciBkPTAsbT0wO208ZjsrK20paCYxPDxtJiYoc1tkKytdPXVbbV0pO3ZhciBnPWModCxzKTtpZighKGc8MCkpZm9yKDtyW2crK10ucHVzaChpKSwhKGc+PXQubGVuZ3RofHwwIT09YSh0W2ddLHMpKTspO31yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7aWYoZTwwKXJldHVybltdO2Zvcih2YXIgcj1bXSxpPSgxPDxlKzEpLTEsYT0wO2E8dC5sZW5ndGg7KythKWZvcih2YXIgbz10W2FdLGw9aTtsPDE8PG8ubGVuZ3RoO2w9bi5uZXh0Q29tYmluYXRpb24obCkpe2Zvcih2YXIgYz1uZXcgQXJyYXkoZSsxKSx1PTAsZj0wO2Y8by5sZW5ndGg7KytmKWwmMTw8ZiYmKGNbdSsrXT1vW2ZdKTtyLnB1c2goYyl9cmV0dXJuIHMocil9ci5kaW1lbnNpb249ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj1NYXRoLm1heCxuPTAsaT10Lmxlbmd0aDtuPGk7KytuKWU9cihlLHRbbl0ubGVuZ3RoKTtyZXR1cm4gZS0xfSxyLmNvdW50VmVydGljZXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xLHI9TWF0aC5tYXgsbj0wLGk9dC5sZW5ndGg7bjxpOysrbilmb3IodmFyIGE9dFtuXSxvPTAscz1hLmxlbmd0aDtvPHM7KytvKWU9cihlLGFbb10pO3JldHVybiBlKzF9LHIuY2xvbmVDZWxscz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWVbcl09dFtyXS5zbGljZSgwKTtyZXR1cm4gZX0sci5jb21wYXJlQ2VsbHM9YSxyLm5vcm1hbGl6ZT1zLHIudW5pcXVlPWwsci5maW5kQ2VsbD1jLHIuaW5jaWRlbmNlPXUsci5kdWFsPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHUobChmKHQsMCkpLHQpO2Zvcih2YXIgcj1uZXcgQXJyYXkoZSksbj0wO248ZTsrK24pcltuXT1bXTtuPTA7Zm9yKHZhciBpPXQubGVuZ3RoO248aTsrK24pZm9yKHZhciBhPXRbbl0sbz0wLHM9YS5sZW5ndGg7bzxzOysrbylyW2Fbb11dLnB1c2gobik7cmV0dXJuIHJ9LHIuZXhwbG9kZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0wLG49dC5sZW5ndGg7cjxuOysrcilmb3IodmFyIGk9dFtyXSxhPTB8aS5sZW5ndGgsbz0xLGw9MTw8YTtvPGw7KytvKXtmb3IodmFyIGM9W10sdT0wO3U8YTsrK3Upbz4+PnUmMSYmYy5wdXNoKGlbdV0pO2UucHVzaChjKX1yZXR1cm4gcyhlKX0sci5za2VsZXRvbj1mLHIuYm91bmRhcnk9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVtdLHI9MCxuPXQubGVuZ3RoO3I8bjsrK3IpZm9yKHZhciBpPXRbcl0sYT0wLG89aS5sZW5ndGg7YTxvOysrYSl7Zm9yKHZhciBsPW5ldyBBcnJheShpLmxlbmd0aC0xKSxjPTAsdT0wO2M8bzsrK2MpYyE9PWEmJihsW3UrK109aVtjXSk7ZS5wdXNoKGwpfXJldHVybiBzKGUpfSxyLmNvbm5lY3RlZENvbXBvbmVudHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgaShlKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgcz1vKzE7czxhLmxlbmd0aDsrK3Mpci5saW5rKGFbb10sYVtzXSk7dmFyIGw9W10sYz1yLnJhbmtzO2ZvcihuPTA7bjxjLmxlbmd0aDsrK24pY1tuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgdT1yLmZpbmQodFtuXVswXSk7Y1t1XTwwPyhjW3VdPWwubGVuZ3RoLGwucHVzaChbdFtuXS5zbGljZSgwKV0pKTpsW2NbdV1dLnB1c2godFtuXS5zbGljZSgwKSl9cmV0dXJuIGx9KHQsZSk6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWwocyhmKHQsMCkpKSxyPW5ldyBpKGUubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDsrK24pZm9yKHZhciBhPXRbbl0sbz0wO288YS5sZW5ndGg7KytvKWZvcih2YXIgdT1jKGUsW2Fbb11dKSxoPW8rMTtoPGEubGVuZ3RoOysraClyLmxpbmsodSxjKGUsW2FbaF1dKSk7dmFyIHA9W10sZD1yLnJhbmtzO2ZvcihuPTA7bjxkLmxlbmd0aDsrK24pZFtuXT0tMTtmb3Iobj0wO248dC5sZW5ndGg7KytuKXt2YXIgbT1yLmZpbmQoYyhlLFt0W25dWzBdXSkpO2RbbV08MD8oZFttXT1wLmxlbmd0aCxwLnB1c2goW3Rbbl0uc2xpY2UoMCldKSk6cFtkW21dXS5wdXNoKHRbbl0uc2xpY2UoMCkpfXJldHVybiBwfSh0KX19LHsiYml0LXR3aWRkbGUiOjEwMSwidW5pb24tZmluZCI6NTkxfV0sNTM1OltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzEwMV1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7ZHVwOjEwMX1dLDUzNjpbZnVuY3Rpb24odCxlLHIpe2FyZ3VtZW50c1s0XVs1MzRdWzBdLmFwcGx5KHIsYXJndW1lbnRzKX0seyJiaXQtdHdpZGRsZSI6NTM1LGR1cDo1MzQsInVuaW9uLWZpbmQiOjUzN31dLDUzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bixuLnByb3RvdHlwZS5sZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290cy5sZW5ndGh9LG4ucHJvdG90eXBlLm1ha2VTZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJvb3RzLmxlbmd0aDtyZXR1cm4gdGhpcy5yb290cy5wdXNoKHQpLHRoaXMucmFua3MucHVzaCgwKSx0fSxuLnByb3RvdHlwZS5maW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnJvb3RzO2VbdF0hPT10Oyl7dmFyIHI9ZVt0XTtlW3RdPWVbcl0sdD1yfXJldHVybiB0fSxuLnByb3RvdHlwZS5saW5rPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5maW5kKHQpLG49dGhpcy5maW5kKGUpO2lmKHIhPT1uKXt2YXIgaT10aGlzLnJhbmtzLGE9dGhpcy5yb290cyxvPWlbcl0scz1pW25dO288cz9hW3JdPW46czxvP2Fbbl09cjooYVtuXT1yLCsraVtyXSl9fX0se31dLDUzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1lLmxlbmd0aCxvPXQubGVuZ3RoLHM9bmV3IEFycmF5KGEpLGw9bmV3IEFycmF5KGEpLGM9bmV3IEFycmF5KGEpLHU9bmV3IEFycmF5KGEpLGY9MDtmPGE7KytmKXNbZl09bFtmXT0tMSxjW2ZdPTEvMCx1W2ZdPSExO2ZvcihmPTA7ZjxvOysrZil7dmFyIGg9dFtmXTtpZigyIT09aC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnB1dCBtdXN0IGJlIGEgZ3JhcGgiKTt2YXIgcD1oWzFdLGQ9aFswXTstMSE9PWxbZF0/bFtkXT0tMjpsW2RdPXAsLTEhPT1zW3BdP3NbcF09LTI6c1twXT1kfWZ1bmN0aW9uIG0odCl7aWYodVt0XSlyZXR1cm4gMS8wO3ZhciByLGksYSxvLGMsZj1zW3RdLGg9bFt0XTtyZXR1cm4gZjwwfHxoPDA/MS8wOihyPWVbdF0saT1lW2ZdLGE9ZVtoXSxvPU1hdGguYWJzKG4ocixpLGEpKSxjPU1hdGguc3FydChNYXRoLnBvdyhpWzBdLWFbMF0sMikrTWF0aC5wb3coaVsxXS1hWzFdLDIpKSxvL2MpfWZ1bmN0aW9uIGcodCxlKXt2YXIgcj1rW3RdLG49a1tlXTtrW3RdPW4sa1tlXT1yLEFbcl09ZSxBW25dPXR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gY1trW3RdXX1mdW5jdGlvbiB5KHQpe3JldHVybiAxJnQ/dC0xPj4xOih0Pj4xKS0xfWZ1bmN0aW9uIHgodCl7Zm9yKHZhciBlPXYodCk7Oyl7dmFyIHI9ZSxuPTIqdCsxLGk9MioodCsxKSxhPXQ7aWYobjxNKXt2YXIgbz12KG4pO288ciYmKGE9bixyPW8pfWlmKGk8TSl2KGkpPHImJihhPWkpO2lmKGE9PT10KXJldHVybiB0O2codCxhKSx0PWF9fWZ1bmN0aW9uIGIodCl7Zm9yKHZhciBlPXYodCk7dD4wOyl7dmFyIHI9eSh0KTtpZihyPj0wKWlmKGU8dihyKSl7Zyh0LHIpLHQ9cjtjb250aW51ZX1yZXR1cm4gdH19ZnVuY3Rpb24gXygpe2lmKE0+MCl7dmFyIHQ9a1swXTtyZXR1cm4gZygwLE0tMSksTS09MSx4KDApLHR9cmV0dXJuLTF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPWtbdF07cmV0dXJuIGNbcl09PT1lP3Q6KGNbcl09LTEvMCxiKHQpLF8oKSxjW3JdPWUsYigoTSs9MSktMSkpfWZ1bmN0aW9uIFQodCl7aWYoIXVbdF0pe3VbdF09ITA7dmFyIGU9c1t0XSxyPWxbdF07c1tyXT49MCYmKHNbcl09ZSksbFtlXT49MCYmKGxbZV09ciksQVtlXT49MCYmdyhBW2VdLG0oZSkpLEFbcl0+PTAmJncoQVtyXSxtKHIpKX19dmFyIGs9W10sQT1uZXcgQXJyYXkoYSk7Zm9yKGY9MDtmPGE7KytmKXsoY1tmXT1tKGYpKTwxLzA/KEFbZl09ay5sZW5ndGgsay5wdXNoKGYpKTpBW2ZdPS0xfXZhciBNPWsubGVuZ3RoO2ZvcihmPU0+PjE7Zj49MDstLWYpeChmKTtmb3IoOzspe3ZhciBTPV8oKTtpZihTPDB8fGNbU10+cilicmVhaztUKFMpfXZhciBFPVtdO2ZvcihmPTA7ZjxhOysrZil1W2ZdfHwoQVtmXT1FLmxlbmd0aCxFLnB1c2goZVtmXS5zbGljZSgpKSk7RS5sZW5ndGg7ZnVuY3Rpb24gTCh0LGUpe2lmKHRbZV08MClyZXR1cm4gZTt2YXIgcj1lLG49ZTtkb3t2YXIgaT10W25dO2lmKCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO2lmKGk9dFtuPWldLCF1W25dfHxpPDB8fGk9PT1uKWJyZWFrO249aSxyPXRbcl19d2hpbGUociE9PW4pO2Zvcih2YXIgYT1lO2EhPT1uO2E9dFthXSl0W2FdPW47cmV0dXJuIG59dmFyIEM9W107cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9TChzLHRbMF0pLHI9TChsLHRbMV0pO2lmKGU+PTAmJnI+PTAmJmUhPT1yKXt2YXIgbj1BW2VdLGk9QVtyXTtuIT09aSYmQy5wdXNoKFtuLGldKX19KSksaS51bmlxdWUoaS5ub3JtYWxpemUoQykpLHtwb3NpdGlvbnM6RSxlZGdlczpDfX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIiksaT10KCJzaW1wbGljaWFsLWNvbXBsZXgiKX0seyJyb2J1c3Qtb3JpZW50YXRpb24iOjUyNCwic2ltcGxpY2lhbC1jb21wbGV4Ijo1MzZ9XSw1Mzk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM7aWYoZVswXVswXTxlWzFdWzBdKXI9ZVswXSxhPWVbMV07ZWxzZXtpZighKGVbMF1bMF0+ZVsxXVswXSkpcmV0dXJuIGkoZSx0KTtyPWVbMV0sYT1lWzBdfWlmKHRbMF1bMF08dFsxXVswXSlvPXRbMF0scz10WzFdO2Vsc2V7aWYoISh0WzBdWzBdPnRbMV1bMF0pKXJldHVybi1pKHQsZSk7bz10WzFdLHM9dFswXX12YXIgbD1uKHIsYSxzKSxjPW4ocixhLG8pO2lmKGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7aWYobD1uKHMsbyxhKSxjPW4ocyxvLHIpLGw8MCl7aWYoYzw9MClyZXR1cm4gbH1lbHNlIGlmKGw+MCl7aWYoYz49MClyZXR1cm4gbH1lbHNlIGlmKGMpcmV0dXJuIGM7cmV0dXJuIGFbMF0tc1swXX07dmFyIG49dCgicm9idXN0LW9yaWVudGF0aW9uIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByLGksYSxvO2lmKGVbMF1bMF08ZVsxXVswXSlyPWVbMF0saT1lWzFdO2Vsc2V7aWYoIShlWzBdWzBdPmVbMV1bMF0pKXt2YXIgcz1NYXRoLm1pbih0WzBdWzFdLHRbMV1bMV0pLGw9TWF0aC5tYXgodFswXVsxXSx0WzFdWzFdKSxjPU1hdGgubWluKGVbMF1bMV0sZVsxXVsxXSksdT1NYXRoLm1heChlWzBdWzFdLGVbMV1bMV0pO3JldHVybiBsPGM/bC1jOnM+dT9zLXU6bC11fXI9ZVsxXSxpPWVbMF19dFswXVsxXTx0WzFdWzFdPyhhPXRbMF0sbz10WzFdKTooYT10WzFdLG89dFswXSk7dmFyIGY9bihpLHIsYSk7cmV0dXJuIGZ8fCgoZj1uKGkscixvKSl8fG8taSl9fSx7InJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5sZW5ndGgscj0yKmUsbj1uZXcgQXJyYXkociksYT0wO2E8ZTsrK2Epe3ZhciBsPXRbYV0sYz1sWzBdWzBdPGxbMV1bMF07blsyKmFdPW5ldyBmKGxbMF1bMF0sbCxjLGEpLG5bMiphKzFdPW5ldyBmKGxbMV1bMF0sbCwhYyxhKX1uLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC54LWUueDtyZXR1cm4gcnx8KChyPXQuY3JlYXRlLWUuY3JlYXRlKXx8TWF0aC5taW4odC5zZWdtZW50WzBdWzFdLHQuc2VnbWVudFsxXVsxXSktTWF0aC5taW4oZS5zZWdtZW50WzBdWzFdLGUuc2VnbWVudFsxXVsxXSkpfSkpO3ZhciBoPWkobykscD1bXSxkPVtdLG09W107Zm9yKGE9MDthPHI7KXtmb3IodmFyIGc9blthXS54LHY9W107YTxyOyl7dmFyIHk9blthXTtpZih5LnghPT1nKWJyZWFrO2ErPTEseS5zZWdtZW50WzBdWzBdPT09eS54JiZ5LnNlZ21lbnRbMV1bMF09PT15Lng/eS5jcmVhdGUmJih5LnNlZ21lbnRbMF1bMV08eS5zZWdtZW50WzFdWzFdPyh2LnB1c2gobmV3IHUoeS5zZWdtZW50WzBdWzFdLHkuaW5kZXgsITAsITApKSx2LnB1c2gobmV3IHUoeS5zZWdtZW50WzFdWzFdLHkuaW5kZXgsITEsITEpKSk6KHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMV1bMV0seS5pbmRleCwhMCwhMSkpLHYucHVzaChuZXcgdSh5LnNlZ21lbnRbMF1bMV0seS5pbmRleCwhMSwhMCkpKSk6aD15LmNyZWF0ZT9oLmluc2VydCh5LnNlZ21lbnQseS5pbmRleCk6aC5yZW1vdmUoeS5zZWdtZW50KX1wLnB1c2goaC5yb290KSxkLnB1c2goZyksbS5wdXNoKHYpfXJldHVybiBuZXcgcyhwLGQsbSl9O3ZhciBuPXQoImJpbmFyeS1zZWFyY2gtYm91bmRzIiksaT10KCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIiksYT10KCJyb2J1c3Qtb3JpZW50YXRpb24iKSxvPXQoIi4vbGliL29yZGVyLXNlZ21lbnRzIik7ZnVuY3Rpb24gcyh0LGUscil7dGhpcy5zbGFicz10LHRoaXMuY29vcmRpbmF0ZXM9ZSx0aGlzLmhvcml6b250YWw9cn1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQueS1lfWZ1bmN0aW9uIGModCxlKXtmb3IodmFyIHI9bnVsbDt0Oyl7dmFyIG4saSxvPXQua2V5O29bMF1bMF08b1sxXVswXT8obj1vWzBdLGk9b1sxXSk6KG49b1sxXSxpPW9bMF0pO3ZhciBzPWEobixpLGUpO2lmKHM8MCl0PXQubGVmdDtlbHNlIGlmKHM+MClpZihlWzBdIT09b1sxXVswXSlyPXQsdD10LnJpZ2h0O2Vsc2V7aWYobD1jKHQucmlnaHQsZSkpcmV0dXJuIGw7dD10LmxlZnR9ZWxzZXtpZihlWzBdIT09b1sxXVswXSlyZXR1cm4gdDt2YXIgbDtpZihsPWModC5yaWdodCxlKSlyZXR1cm4gbDt0PXQubGVmdH19cmV0dXJuIHJ9ZnVuY3Rpb24gdSh0LGUscixuKXt0aGlzLnk9dCx0aGlzLmluZGV4PWUsdGhpcy5zdGFydD1yLHRoaXMuY2xvc2VkPW59ZnVuY3Rpb24gZih0LGUscixuKXt0aGlzLng9dCx0aGlzLnNlZ21lbnQ9ZSx0aGlzLmNyZWF0ZT1yLHRoaXMuaW5kZXg9bn1zLnByb3RvdHlwZS5jYXN0VXA9ZnVuY3Rpb24odCl7dmFyIGU9bi5sZSh0aGlzLmNvb3JkaW5hdGVzLHRbMF0pO2lmKGU8MClyZXR1cm4tMTt0aGlzLnNsYWJzW2VdO3ZhciByPWModGhpcy5zbGFic1tlXSx0KSxpPS0xO2lmKHImJihpPXIudmFsdWUpLHRoaXMuY29vcmRpbmF0ZXNbZV09PT10WzBdKXt2YXIgcz1udWxsO2lmKHImJihzPXIua2V5KSxlPjApe3ZhciB1PWModGhpcy5zbGFic1tlLTFdLHQpO3UmJihzP28odS5rZXkscyk+MCYmKHM9dS5rZXksaT11LnZhbHVlKTooaT11LnZhbHVlLHM9dS5rZXkpKX12YXIgZj10aGlzLmhvcml6b250YWxbZV07aWYoZi5sZW5ndGg+MCl7dmFyIGg9bi5nZShmLHRbMV0sbCk7aWYoaDxmLmxlbmd0aCl7dmFyIHA9ZltoXTtpZih0WzFdPT09cC55KXtpZihwLmNsb3NlZClyZXR1cm4gcC5pbmRleDtmb3IoO2g8Zi5sZW5ndGgtMSYmZltoKzFdLnk9PT10WzFdOylpZigocD1mW2grPTFdKS5jbG9zZWQpcmV0dXJuIHAuaW5kZXg7aWYocC55PT09dFsxXSYmIXAuc3RhcnQpe2lmKChoKz0xKT49Zi5sZW5ndGgpcmV0dXJuIGk7cD1mW2hdfX1pZihwLnN0YXJ0KWlmKHMpe3ZhciBkPWEoc1swXSxzWzFdLFt0WzBdLHAueV0pO3NbMF1bMF0+c1sxXVswXSYmKGQ9LWQpLGQ+MCYmKGk9cC5pbmRleCl9ZWxzZSBpPXAuaW5kZXg7ZWxzZSBwLnkhPT10WzFdJiYoaT1wLmluZGV4KX19fXJldHVybiBpfX0seyIuL2xpYi9vcmRlci1zZWdtZW50cyI6NTM5LCJiaW5hcnktc2VhcmNoLWJvdW5kcyI6MTAwLCJmdW5jdGlvbmFsLXJlZC1ibGFjay10cmVlIjoyNDcsInJvYnVzdC1vcmllbnRhdGlvbiI6NTI0fV0sNTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJvYnVzdC1kb3QtcHJvZHVjdCIpLGk9dCgicm9idXN0LXN1bSIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1pKG4odCxlKSxbZVtlLmxlbmd0aC0xXV0pO3JldHVybiByW3IubGVuZ3RoLTFdfWZ1bmN0aW9uIG8odCxlLHIsbil7dmFyIGk9LWUvKG4tZSk7aTwwP2k9MDppPjEmJihpPTEpO2Zvcih2YXIgYT0xLWksbz10Lmxlbmd0aCxzPW5ldyBBcnJheShvKSxsPTA7bDxvOysrbClzW2xdPWkqdFtsXSthKnJbbF07cmV0dXJuIHN9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT1hKHRbdC5sZW5ndGgtMV0sZSkscz10W3QubGVuZ3RoLTFdLGw9dFswXSxjPTA7Yzx0Lmxlbmd0aDsrK2Mscz1sKXt2YXIgdT1hKGw9dFtjXSxlKTtpZihpPDAmJnU+MHx8aT4wJiZ1PDApe3ZhciBmPW8ocyx1LGwsaSk7ci5wdXNoKGYpLG4ucHVzaChmLnNsaWNlKCkpfXU8MD9uLnB1c2gobC5zbGljZSgpKTp1PjA/ci5wdXNoKGwuc2xpY2UoKSk6KHIucHVzaChsLnNsaWNlKCkpLG4ucHVzaChsLnNsaWNlKCkpKSxpPXV9cmV0dXJue3Bvc2l0aXZlOnIsbmVnYXRpdmU6bn19LGUuZXhwb3J0cy5wb3NpdGl2ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1bXSxuPWEodFt0Lmxlbmd0aC0xXSxlKSxpPXRbdC5sZW5ndGgtMV0scz10WzBdLGw9MDtsPHQubGVuZ3RoOysrbCxpPXMpe3ZhciBjPWEocz10W2xdLGUpOyhuPDAmJmM+MHx8bj4wJiZjPDApJiZyLnB1c2gobyhpLGMscyxuKSksYz49MCYmci5wdXNoKHMuc2xpY2UoKSksbj1jfXJldHVybiByfSxlLmV4cG9ydHMubmVnYXRpdmU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9W10sbj1hKHRbdC5sZW5ndGgtMV0sZSksaT10W3QubGVuZ3RoLTFdLHM9dFswXSxsPTA7bDx0Lmxlbmd0aDsrK2wsaT1zKXt2YXIgYz1hKHM9dFtsXSxlKTsobjwwJiZjPjB8fG4+MCYmYzwwKSYmci5wdXNoKG8oaSxjLHMsbikpLGM8PTAmJnIucHVzaChzLnNsaWNlKCkpLG49Y31yZXR1cm4gcn19LHsicm9idXN0LWRvdC1wcm9kdWN0Ijo1MjEsInJvYnVzdC1zdW0iOjUyOX1dLDU0MjpbZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD17bm90X3N0cmluZzovW15zXS8sbm90X2Jvb2w6L1tedF0vLG5vdF90eXBlOi9bXlRdLyxub3RfcHJpbWl0aXZlOi9bXnZdLyxudW1iZXI6L1tkaWVmZ10vLG51bWVyaWNfYXJnOi9bYmNkaWVmZ3V4WF0vLGpzb246L1tqXS8sbm90X2pzb246L1teal0vLHRleHQ6L15bXlx4MjVdKy8sbW9kdWxvOi9eXHgyNXsyfS8scGxhY2Vob2xkZXI6L15ceDI1KD86KFsxLTldXGQqKVwkfFwoKFteKV0rKVwpKT8oXCspPygwfCdbXiRdKT8oLSk/KFxkKyk/KD86XC4oXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLGtleTovXihbYS16X11bYS16X1xkXSopL2ksa2V5X2FjY2VzczovXlwuKFthLXpfXVthLXpfXGRdKikvaSxpbmRleF9hY2Nlc3M6L15cWyhcZCspXF0vLHNpZ246L15bKy1dL307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gaShvKHQpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0LHIpe3JldHVybiBlLmFwcGx5KG51bGwsW3RdLmNvbmNhdChyfHxbXSkpfWZ1bmN0aW9uIGkocixuKXt2YXIgaSxhLG8scyxsLGMsdSxmLGgscD0xLGQ9ci5sZW5ndGgsbT0iIjtmb3IoYT0wO2E8ZDthKyspaWYoInN0cmluZyI9PXR5cGVvZiByW2FdKW0rPXJbYV07ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHJbYV0pe2lmKChzPXJbYV0pLmtleXMpZm9yKGk9bltwXSxvPTA7bzxzLmtleXMubGVuZ3RoO28rKyl7aWYobnVsbD09aSl0aHJvdyBuZXcgRXJyb3IoZSgnW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgIiVzIiBvZiB1bmRlZmluZWQgdmFsdWUgIiVzIicscy5rZXlzW29dLHMua2V5c1tvLTFdKSk7aT1pW3Mua2V5c1tvXV19ZWxzZSBpPXMucGFyYW1fbm8/bltzLnBhcmFtX25vXTpuW3ArK107aWYodC5ub3RfdHlwZS50ZXN0KHMudHlwZSkmJnQubm90X3ByaW1pdGl2ZS50ZXN0KHMudHlwZSkmJmkgaW5zdGFuY2VvZiBGdW5jdGlvbiYmKGk9aSgpKSx0Lm51bWVyaWNfYXJnLnRlc3Qocy50eXBlKSYmIm51bWJlciIhPXR5cGVvZiBpJiZpc05hTihpKSl0aHJvdyBuZXcgVHlwZUVycm9yKGUoIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlVCIsaSkpO3N3aXRjaCh0Lm51bWJlci50ZXN0KHMudHlwZSkmJihmPWk+PTApLHMudHlwZSl7Y2FzZSJiIjppPXBhcnNlSW50KGksMTApLnRvU3RyaW5nKDIpO2JyZWFrO2Nhc2UiYyI6aT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGksMTApKTticmVhaztjYXNlImQiOmNhc2UiaSI6aT1wYXJzZUludChpLDEwKTticmVhaztjYXNlImoiOmk9SlNPTi5zdHJpbmdpZnkoaSxudWxsLHMud2lkdGg/cGFyc2VJbnQocy53aWR0aCk6MCk7YnJlYWs7Y2FzZSJlIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9FeHBvbmVudGlhbChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKS50b0V4cG9uZW50aWFsKCk7YnJlYWs7Y2FzZSJmIjppPXMucHJlY2lzaW9uP3BhcnNlRmxvYXQoaSkudG9GaXhlZChzLnByZWNpc2lvbik6cGFyc2VGbG9hdChpKTticmVhaztjYXNlImciOmk9cy5wcmVjaXNpb24/U3RyaW5nKE51bWJlcihpLnRvUHJlY2lzaW9uKHMucHJlY2lzaW9uKSkpOnBhcnNlRmxvYXQoaSk7YnJlYWs7Y2FzZSJvIjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2UicyI6aT1TdHJpbmcoaSksaT1zLnByZWNpc2lvbj9pLnN1YnN0cmluZygwLHMucHJlY2lzaW9uKTppO2JyZWFrO2Nhc2UidCI6aT1TdHJpbmcoISFpKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJUIjppPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpKS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpLGk9cy5wcmVjaXNpb24/aS5zdWJzdHJpbmcoMCxzLnByZWNpc2lvbik6aTticmVhaztjYXNlInUiOmk9cGFyc2VJbnQoaSwxMCk+Pj4wO2JyZWFrO2Nhc2UidiI6aT1pLnZhbHVlT2YoKSxpPXMucHJlY2lzaW9uP2kuc3Vic3RyaW5nKDAscy5wcmVjaXNpb24pOmk7YnJlYWs7Y2FzZSJ4IjppPShwYXJzZUludChpLDEwKT4+PjApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlIlgiOmk9KHBhcnNlSW50KGksMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9dC5qc29uLnRlc3Qocy50eXBlKT9tKz1pOighdC5udW1iZXIudGVzdChzLnR5cGUpfHxmJiYhcy5zaWduP2g9IiI6KGg9Zj8iKyI6Ii0iLGk9aS50b1N0cmluZygpLnJlcGxhY2UodC5zaWduLCIiKSksYz1zLnBhZF9jaGFyPyIwIj09PXMucGFkX2NoYXI/IjAiOnMucGFkX2NoYXIuY2hhckF0KDEpOiIgIix1PXMud2lkdGgtKGgraSkubGVuZ3RoLGw9cy53aWR0aCYmdT4wP2MucmVwZWF0KHUpOiIiLG0rPXMuYWxpZ24/aCtpK2w6IjAiPT09Yz9oK2wraTpsK2graSl9cmV0dXJuIG19dmFyIGE9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBvKGUpe2lmKGFbZV0pcmV0dXJuIGFbZV07Zm9yKHZhciByLG49ZSxpPVtdLG89MDtuOyl7aWYobnVsbCE9PShyPXQudGV4dC5leGVjKG4pKSlpLnB1c2goclswXSk7ZWxzZSBpZihudWxsIT09KHI9dC5tb2R1bG8uZXhlYyhuKSkpaS5wdXNoKCIlIik7ZWxzZXtpZihudWxsPT09KHI9dC5wbGFjZWhvbGRlci5leGVjKG4pKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyIik7aWYoclsyXSl7b3w9MTt2YXIgcz1bXSxsPXJbMl0sYz1bXTtpZihudWxsPT09KGM9dC5rZXkuZXhlYyhsKSkpdGhyb3cgbmV3IFN5bnRheEVycm9yKCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleSIpO2ZvcihzLnB1c2goY1sxXSk7IiIhPT0obD1sLnN1YnN0cmluZyhjWzBdLmxlbmd0aCkpOylpZihudWxsIT09KGM9dC5rZXlfYWNjZXNzLmV4ZWMobCkpKXMucHVzaChjWzFdKTtlbHNle2lmKG51bGw9PT0oYz10LmluZGV4X2FjY2Vzcy5leGVjKGwpKSl0aHJvdyBuZXcgU3ludGF4RXJyb3IoIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5Iik7cy5wdXNoKGNbMV0pfXJbMl09c31lbHNlIG98PTI7aWYoMz09PW8pdGhyb3cgbmV3IEVycm9yKCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkIik7aS5wdXNoKHtwbGFjZWhvbGRlcjpyWzBdLHBhcmFtX25vOnJbMV0sa2V5czpyWzJdLHNpZ246clszXSxwYWRfY2hhcjpyWzRdLGFsaWduOnJbNV0sd2lkdGg6cls2XSxwcmVjaXNpb246cls3XSx0eXBlOnJbOF19KX1uPW4uc3Vic3RyaW5nKHJbMF0ubGVuZ3RoKX1yZXR1cm4gYVtlXT1pfXZvaWQgMCE9PXImJihyLnNwcmludGY9ZSxyLnZzcHJpbnRmPW4pLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LnNwcmludGY9ZSx3aW5kb3cudnNwcmludGY9bil9KCl9LHt9XSw1NDM6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9aTt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gaSgpe24uY2FsbCh0aGlzKX10KCJpbmhlcml0cyIpKGksbiksaS5SZWFkYWJsZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcmVhZGFibGUuanMiKSxpLldyaXRhYmxlPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV93cml0YWJsZS5qcyIpLGkuRHVwbGV4PXQoInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV9kdXBsZXguanMiKSxpLlRyYW5zZm9ybT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fdHJhbnNmb3JtLmpzIiksaS5QYXNzVGhyb3VnaD10KCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiKSxpLmZpbmlzaGVkPXQoInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIiksaS5waXBlbGluZT10KCJyZWFkYWJsZS1zdHJlYW0vbGliL2ludGVybmFsL3N0cmVhbXMvcGlwZWxpbmUuanMiKSxpLlN0cmVhbT1pLGkucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzO2Z1bmN0aW9uIGkoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZyLnBhdXNlJiZyLnBhdXNlKCl9ZnVuY3Rpb24gYSgpe3IucmVhZGFibGUmJnIucmVzdW1lJiZyLnJlc3VtZSgpfXIub24oImRhdGEiLGkpLHQub24oImRyYWluIixhKSx0Ll9pc1N0ZGlvfHxlJiYhMT09PWUuZW5kfHwoci5vbigiZW5kIixzKSxyLm9uKCJjbG9zZSIsbCkpO3ZhciBvPSExO2Z1bmN0aW9uIHMoKXtvfHwobz0hMCx0LmVuZCgpKX1mdW5jdGlvbiBsKCl7b3x8KG89ITAsImZ1bmN0aW9uIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGModCl7aWYodSgpLDA9PT1uLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyB0fWZ1bmN0aW9uIHUoKXtyLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixpKSx0LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsYSksci5yZW1vdmVMaXN0ZW5lcigiZW5kIixzKSxyLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsbCksci5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGMpLHQucmVtb3ZlTGlzdGVuZXIoImVycm9yIixjKSxyLnJlbW92ZUxpc3RlbmVyKCJlbmQiLHUpLHIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsdSl9cmV0dXJuIHIub24oImVycm9yIixjKSx0Lm9uKCJlcnJvciIsYyksci5vbigiZW5kIix1KSxyLm9uKCJjbG9zZSIsdSksdC5vbigiY2xvc2UiLHUpLHQuZW1pdCgicGlwZSIsciksdH19LHtldmVudHM6MjM3LGluaGVyaXRzOjQyOSwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX2R1cGxleC5qcyI6NTQ1LCJyZWFkYWJsZS1zdHJlYW0vbGliL19zdHJlYW1fcGFzc3Rocm91Z2guanMiOjU0NiwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3JlYWRhYmxlLmpzIjo1NDcsInJlYWRhYmxlLXN0cmVhbS9saWIvX3N0cmVhbV90cmFuc2Zvcm0uanMiOjU0OCwicmVhZGFibGUtc3RyZWFtL2xpYi9fc3RyZWFtX3dyaXRhYmxlLmpzIjo1NDksInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9lbmQtb2Ytc3RyZWFtLmpzIjo1NTMsInJlYWRhYmxlLXN0cmVhbS9saWIvaW50ZXJuYWwvc3RyZWFtcy9waXBlbGluZS5qcyI6NTU1fV0sNTQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXt9O2Z1bmN0aW9uIGkodCxlLHIpe3J8fChyPUVycm9yKTt2YXIgaT1mdW5jdGlvbih0KXt2YXIgcixuO2Z1bmN0aW9uIGkocixuLGkpe3JldHVybiB0LmNhbGwodGhpcyxmdW5jdGlvbih0LHIsbil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlP2U6ZSh0LHIsbil9KHIsbixpKSl8fHRoaXN9cmV0dXJuIG49dCwocj1pKS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLl9fcHJvdG9fXz1uLGl9KHIpO2kucHJvdG90eXBlLm5hbWU9ci5uYW1lLGkucHJvdG90eXBlLmNvZGU9dCxuW3RdPWl9ZnVuY3Rpb24gYSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXQubGVuZ3RoO3JldHVybiB0PXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHQpfSkpLHI+Mj8ib25lIG9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodC5zbGljZSgwLHItMSkuam9pbigiLCAiKSwiLCBvciAiKSt0W3ItMV06Mj09PXI/Im9uZSBvZiAiLmNvbmNhdChlLCIgIikuY29uY2F0KHRbMF0sIiBvciAiKS5jb25jYXQodFsxXSk6Im9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQodFswXSl9cmV0dXJuIm9mICIuY29uY2F0KGUsIiAiKS5jb25jYXQoU3RyaW5nKHQpKX1pKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLChmdW5jdGlvbih0LGUpe3JldHVybidUaGUgdmFsdWUgIicrZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gIicrdCsnIid9KSxUeXBlRXJyb3IpLGkoIkVSUl9JTlZBTElEX0FSR19UWVBFIiwoZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxzO2lmKCJzdHJpbmciPT10eXBlb2YgZSYmKGk9Im5vdCAiLGUuc3Vic3RyKCFvfHxvPDA/MDorbyxpLmxlbmd0aCk9PT1pKT8obj0ibXVzdCBub3QgYmUiLGU9ZS5yZXBsYWNlKC9ebm90IC8sIiIpKTpuPSJtdXN0IGJlIixmdW5jdGlvbih0LGUscil7cmV0dXJuKHZvaWQgMD09PXJ8fHI+dC5sZW5ndGgpJiYocj10Lmxlbmd0aCksdC5zdWJzdHJpbmcoci1lLmxlbmd0aCxyKT09PWV9KHQsIiBhcmd1bWVudCIpKXM9IlRoZSAiLmNvbmNhdCh0LCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoYShlLCJ0eXBlIikpO2Vsc2V7dmFyIGw9ZnVuY3Rpb24odCxlLHIpe3JldHVybiJudW1iZXIiIT10eXBlb2YgciYmKHI9MCksIShyK2UubGVuZ3RoPnQubGVuZ3RoKSYmLTEhPT10LmluZGV4T2YoZSxyKX0odCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzPSdUaGUgIicuY29uY2F0KHQsJyIgJykuY29uY2F0KGwsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChhKGUsInR5cGUiKSl9cmV0dXJuIHMrPSIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIHIpfSksVHlwZUVycm9yKSxpKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxpKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJUaGUgIit0KyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSksaSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxpKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsKGZ1bmN0aW9uKHQpe3JldHVybiJDYW5ub3QgY2FsbCAiK3QrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pKSxpKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxpKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLGkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksaSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLGkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIiwoZnVuY3Rpb24odCl7cmV0dXJuIlVua25vd24gZW5jb2Rpbmc6ICIrdH0pLFR5cGVFcnJvciksaSgiRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IiksZS5leHBvcnRzLmNvZGVzPW59LHt9XSw1NDU6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9O2UuZXhwb3J0cz1jO3ZhciBpPXQoIi4vX3N0cmVhbV9yZWFkYWJsZSIpLGE9dCgiLi9fc3RyZWFtX3dyaXRhYmxlIik7dCgiaW5oZXJpdHMiKShjLGkpO2Zvcih2YXIgbz1uKGEucHJvdG90eXBlKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Yy5wcm90b3R5cGVbbF18fChjLnByb3RvdHlwZVtsXT1hLnByb3RvdHlwZVtsXSl9ZnVuY3Rpb24gYyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBjKSlyZXR1cm4gbmV3IGModCk7aS5jYWxsKHRoaXMsdCksYS5jYWxsKHRoaXMsdCksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLHQmJighMT09PXQucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PXQud3JpdGFibGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PXQuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIsdSkpKX1mdW5jdGlvbiB1KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8ci5uZXh0VGljayhmLHRoaXMpfWZ1bmN0aW9uIGYodCl7dC5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkKX0sc2V0OmZ1bmN0aW9uKHQpe3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pfSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0seyIuL19zdHJlYW1fcmVhZGFibGUiOjU0NywiLi9fc3RyZWFtX3dyaXRhYmxlIjo1NDksX3Byb2Nlc3M6NTA0LGluaGVyaXRzOjQyOX1dLDU0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aTt2YXIgbj10KCIuL19zdHJlYW1fdHJhbnNmb3JtIik7ZnVuY3Rpb24gaSh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4gbmV3IGkodCk7bi5jYWxsKHRoaXMsdCl9dCgiaW5oZXJpdHMiKShpLG4pLGkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KX19LHsiLi9fc3RyZWFtX3RyYW5zZm9ybSI6NTQ4LGluaGVyaXRzOjQyOX1dLDU0NzpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgaTtlLmV4cG9ydHM9QSxBLlJlYWRhYmxlU3RhdGU9azt0KCJldmVudHMiKS5FdmVudEVtaXR0ZXI7dmFyIGE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lcnMoZSkubGVuZ3RofSxvPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9zdHJlYW0iKSxzPXQoImJ1ZmZlciIpLkJ1ZmZlcixsPW4uVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9O3ZhciBjLHU9dCgidXRpbCIpO2M9dSYmdS5kZWJ1Z2xvZz91LmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGYsaCxwLGQ9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL2J1ZmZlcl9saXN0IiksbT10KCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSIpLGc9dCgiLi9pbnRlcm5hbC9zdHJlYW1zL3N0YXRlIikuZ2V0SGlnaFdhdGVyTWFyayx2PXQoIi4uL2Vycm9ycyIpLmNvZGVzLHk9di5FUlJfSU5WQUxJRF9BUkdfVFlQRSx4PXYuRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixiPXYuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsXz12LkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7dCgiaW5oZXJpdHMiKShBLG8pO3ZhciB3PW0uZXJyb3JPckRlc3Ryb3ksVD1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiBrKGUscixuKXtpPWl8fHQoIi4vX3N0cmVhbV9kdXBsZXgiKSxlPWV8fHt9LCJib29sZWFuIiE9dHlwZW9mIG4mJihuPXIgaW5zdGFuY2VvZiBpKSx0aGlzLm9iamVjdE1vZGU9ISFlLm9iamVjdE1vZGUsbiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1nKHRoaXMsZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixuKSx0aGlzLmJ1ZmZlcj1uZXcgZCx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLGUuZW5jb2RpbmcmJihmfHwoZj10KCJzdHJpbmdfZGVjb2Rlci8iKS5TdHJpbmdEZWNvZGVyKSx0aGlzLmRlY29kZXI9bmV3IGYoZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz1lLmVuY29kaW5nKX1mdW5jdGlvbiBBKGUpe2lmKGk9aXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLCEodGhpcyBpbnN0YW5jZW9mIEEpKXJldHVybiBuZXcgQShlKTt2YXIgcj10aGlzIGluc3RhbmNlb2YgaTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBrKGUsdGhpcyxyKSx0aGlzLnJlYWRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5yZWFkJiYodGhpcy5fcmVhZD1lLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PWUuZGVzdHJveSkpLG8uY2FsbCh0aGlzKX1mdW5jdGlvbiBNKHQsZSxyLG4saSl7YygicmVhZGFibGVBZGRDaHVuayIsZSk7dmFyIGEsbz10Ll9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1lKW8ucmVhZGluZz0hMSxmdW5jdGlvbih0LGUpe2lmKGMoIm9uRW9mQ2h1bmsiKSxlLmVuZGVkKXJldHVybjtpZihlLmRlY29kZXIpe3ZhciByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX1lLmVuZGVkPSEwLGUuc3luYz9MKHQpOihlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGUuZW1pdHRlZFJlYWRhYmxlPSEwLEModCkpKX0odCxvKTtlbHNlIGlmKGl8fChhPWZ1bmN0aW9uKHQsZSl7dmFyIHI7bj1lLHMuaXNCdWZmZXIobil8fG4gaW5zdGFuY2VvZiBsfHwic3RyaW5nIj09dHlwZW9mIGV8fHZvaWQgMD09PWV8fHQub2JqZWN0TW9kZXx8KHI9bmV3IHkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxlKSk7dmFyIG47cmV0dXJuIHJ9KG8sZSkpLGEpdyh0LGEpO2Vsc2UgaWYoby5vYmplY3RNb2RlfHxlJiZlLmxlbmd0aD4wKWlmKCJzdHJpbmciPT10eXBlb2YgZXx8by5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1zLnByb3RvdHlwZXx8KGU9ZnVuY3Rpb24odCl7cmV0dXJuIHMuZnJvbSh0KX0oZSkpLG4pby5lbmRFbWl0dGVkP3codCxuZXcgXyk6Uyh0LG8sZSwhMCk7ZWxzZSBpZihvLmVuZGVkKXcodCxuZXcgeCk7ZWxzZXtpZihvLmRlc3Ryb3llZClyZXR1cm4hMTtvLnJlYWRpbmc9ITEsby5kZWNvZGVyJiYhcj8oZT1vLmRlY29kZXIud3JpdGUoZSksby5vYmplY3RNb2RlfHwwIT09ZS5sZW5ndGg/Uyh0LG8sZSwhMSk6UCh0LG8pKTpTKHQsbyxlLCExKX1lbHNlIG58fChvLnJlYWRpbmc9ITEsUCh0LG8pKTtyZXR1cm4hby5lbmRlZCYmKG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFya3x8MD09PW8ubGVuZ3RoKX1mdW5jdGlvbiBTKHQsZSxyLG4pe2UuZmxvd2luZyYmMD09PWUubGVuZ3RoJiYhZS5zeW5jPyhlLmF3YWl0RHJhaW49MCx0LmVtaXQoImRhdGEiLHIpKTooZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoLG4/ZS5idWZmZXIudW5zaGlmdChyKTplLmJ1ZmZlci5wdXNoKHIpLGUubmVlZFJlYWRhYmxlJiZMKHQpKSxQKHQsZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD10KX19KSxBLnByb3RvdHlwZS5kZXN0cm95PW0uZGVzdHJveSxBLnByb3RvdHlwZS5fdW5kZXN0cm95PW0udW5kZXN0cm95LEEucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHQsZSl7ZSh0KX0sQS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbi5vYmplY3RNb2RlP3I9ITA6InN0cmluZyI9PXR5cGVvZiB0JiYoKGU9ZXx8bi5kZWZhdWx0RW5jb2RpbmcpIT09bi5lbmNvZGluZyYmKHQ9cy5mcm9tKHQsZSksZT0iIikscj0hMCksTSh0aGlzLHQsZSwhMSxyKX0sQS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXtyZXR1cm4gTSh0aGlzLHQsbnVsbCwhMCwhMSl9LEEucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LEEucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKGUpe2Z8fChmPXQoInN0cmluZ19kZWNvZGVyLyIpLlN0cmluZ0RlY29kZXIpO3ZhciByPW5ldyBmKGUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1yLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLGk9IiI7bnVsbCE9PW47KWkrPXIud3JpdGUobi5kYXRhKSxuPW4ubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9PWkmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goaSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9aS5sZW5ndGgsdGhpc307ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0PD0wfHwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp0IT10P2UuZmxvd2luZyYmZS5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDplLmxlbmd0aDoodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTEwNzM3NDE4MjQ/dD0xMDczNzQxODI0Oih0LS0sdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsdHw9dD4+PjE2LHQrKyksdH0odCkpLHQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDooZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIEwodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGUiLGUubmVlZFJlYWRhYmxlLGUuZW1pdHRlZFJlYWRhYmxlKSxlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KGMoImVtaXRSZWFkYWJsZSIsZS5mbG93aW5nKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMCxyLm5leHRUaWNrKEMsdCkpfWZ1bmN0aW9uIEModCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtjKCJlbWl0UmVhZGFibGVfIixlLmRlc3Ryb3llZCxlLmxlbmd0aCxlLmVuZGVkKSxlLmRlc3Ryb3llZHx8IWUubGVuZ3RoJiYhZS5lbmRlZHx8KHQuZW1pdCgicmVhZGFibGUiKSxlLmVtaXR0ZWRSZWFkYWJsZT0hMSksZS5uZWVkUmVhZGFibGU9IWUuZmxvd2luZyYmIWUuZW5kZWQmJmUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssUih0KX1mdW5jdGlvbiBQKHQsZSl7ZS5yZWFkaW5nTW9yZXx8KGUucmVhZGluZ01vcmU9ITAsci5uZXh0VGljayhJLHQsZSkpfWZ1bmN0aW9uIEkodCxlKXtmb3IoOyFlLnJlYWRpbmcmJiFlLmVuZGVkJiYoZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrfHxlLmZsb3dpbmcmJjA9PT1lLmxlbmd0aCk7KXt2YXIgcj1lLmxlbmd0aDtpZihjKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLHQucmVhZCgwKSxyPT09ZS5sZW5ndGgpYnJlYWt9ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBPKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7ZS5yZWFkYWJsZUxpc3RlbmluZz10Lmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxlLnJlc3VtZVNjaGVkdWxlZCYmIWUucGF1c2VkP2UuZmxvd2luZz0hMDp0Lmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZ0LnJlc3VtZSgpfWZ1bmN0aW9uIHoodCl7YygicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksdC5yZWFkKDApfWZ1bmN0aW9uIEQodCxlKXtjKCJyZXN1bWUiLGUucmVhZGluZyksZS5yZWFkaW5nfHx0LnJlYWQoMCksZS5yZXN1bWVTY2hlZHVsZWQ9ITEsdC5lbWl0KCJyZXN1bWUiKSxSKHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApfWZ1bmN0aW9uIFIodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtmb3IoYygiZmxvdyIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJm51bGwhPT10LnJlYWQoKTspO31mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIDA9PT1lLmxlbmd0aD9udWxsOihlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8ocj1lLmRlY29kZXI/ZS5idWZmZXIuam9pbigiIik6MT09PWUuYnVmZmVyLmxlbmd0aD9lLmJ1ZmZlci5maXJzdCgpOmUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1lLmJ1ZmZlci5jb25zdW1lKHQsZS5kZWNvZGVyKSxyKTt2YXIgcn1mdW5jdGlvbiBCKHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7YygiZW5kUmVhZGFibGUiLGUuZW5kRW1pdHRlZCksZS5lbmRFbWl0dGVkfHwoZS5lbmRlZD0hMCxyLm5leHRUaWNrKE4sZSx0KSl9ZnVuY3Rpb24gTih0LGUpe2lmKGMoImVuZFJlYWRhYmxlTlQiLHQuZW5kRW1pdHRlZCx0Lmxlbmd0aCksIXQuZW5kRW1pdHRlZCYmMD09PXQubGVuZ3RoJiYodC5lbmRFbWl0dGVkPSEwLGUucmVhZGFibGU9ITEsZS5lbWl0KCJlbmQiKSx0LmF1dG9EZXN0cm95KSl7dmFyIHI9ZS5fd3JpdGFibGVTdGF0ZTsoIXJ8fHIuYXV0b0Rlc3Ryb3kmJnIuZmluaXNoZWQpJiZlLmRlc3Ryb3koKX19ZnVuY3Rpb24gaih0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX1BLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe2MoInJlYWQiLHQpLHQ9cGFyc2VJbnQodCwxMCk7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPXQ7aWYoMCE9PXQmJihlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXQmJmUubmVlZFJlYWRhYmxlJiYoKDAhPT1lLmhpZ2hXYXRlck1hcms/ZS5sZW5ndGg+PWUuaGlnaFdhdGVyTWFyazplLmxlbmd0aD4wKXx8ZS5lbmRlZCkpcmV0dXJuIGMoInJlYWQ6IGVtaXRSZWFkYWJsZSIsZS5sZW5ndGgsZS5lbmRlZCksMD09PWUubGVuZ3RoJiZlLmVuZGVkP0IodGhpcyk6TCh0aGlzKSxudWxsO2lmKDA9PT0odD1FKHQsZSkpJiZlLmVuZGVkKXJldHVybiAwPT09ZS5sZW5ndGgmJkIodGhpcyksbnVsbDt2YXIgbixpPWUubmVlZFJlYWRhYmxlO3JldHVybiBjKCJuZWVkIHJlYWRhYmxlIixpKSwoMD09PWUubGVuZ3RofHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJmMoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixpPSEwKSxlLmVuZGVkfHxlLnJlYWRpbmc/YygicmVhZGluZyBvciBlbmRlZCIsaT0hMSk6aSYmKGMoImRvIHJlYWQiKSxlLnJlYWRpbmc9ITAsZS5zeW5jPSEwLDA9PT1lLmxlbmd0aCYmKGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKGUuaGlnaFdhdGVyTWFyayksZS5zeW5jPSExLGUucmVhZGluZ3x8KHQ9RShyLGUpKSksbnVsbD09PShuPXQ+MD9GKHQsZSk6bnVsbCk/KGUubmVlZFJlYWRhYmxlPWUubGVuZ3RoPD1lLmhpZ2hXYXRlck1hcmssdD0wKTooZS5sZW5ndGgtPXQsZS5hd2FpdERyYWluPTApLDA9PT1lLmxlbmd0aCYmKGUuZW5kZWR8fChlLm5lZWRSZWFkYWJsZT0hMCksciE9PXQmJmUuZW5kZWQmJkIodGhpcykpLG51bGwhPT1uJiZ0aGlzLmVtaXQoImRhdGEiLG4pLG59LEEucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3codGhpcyxuZXcgYigiX3JlYWQoKSIpKX0sQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMsaT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChpLnBpcGVzQ291bnQpe2Nhc2UgMDppLnBpcGVzPXQ7YnJlYWs7Y2FzZSAxOmkucGlwZXM9W2kucGlwZXMsdF07YnJlYWs7ZGVmYXVsdDppLnBpcGVzLnB1c2godCl9aS5waXBlc0NvdW50Kz0xLGMoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsaS5waXBlc0NvdW50LGUpO3ZhciBvPSghZXx8ITEhPT1lLmVuZCkmJnQhPT1yLnN0ZG91dCYmdCE9PXIuc3RkZXJyP2w6ZztmdW5jdGlvbiBzKGUscil7Yygib251bnBpcGUiKSxlPT09biYmciYmITE9PT1yLmhhc1VucGlwZWQmJihyLmhhc1VucGlwZWQ9ITAsYygiY2xlYW51cCIpLHQucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixkKSx0LnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLG0pLHQucmVtb3ZlTGlzdGVuZXIoImRyYWluIix1KSx0LnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksdC5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixzKSxuLnJlbW92ZUxpc3RlbmVyKCJlbmQiLGwpLG4ucmVtb3ZlTGlzdGVuZXIoImVuZCIsZyksbi5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsaCksZj0hMCwhaS5hd2FpdERyYWlufHx0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHUoKSl9ZnVuY3Rpb24gbCgpe2MoIm9uZW5kIiksdC5lbmQoKX1pLmVuZEVtaXR0ZWQ/ci5uZXh0VGljayhvKTpuLm9uY2UoImVuZCIsbyksdC5vbigidW5waXBlIixzKTt2YXIgdT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2MoInBpcGVPbkRyYWluIixlLmF3YWl0RHJhaW4pLGUuYXdhaXREcmFpbiYmZS5hd2FpdERyYWluLS0sMD09PWUuYXdhaXREcmFpbiYmYSh0LCJkYXRhIikmJihlLmZsb3dpbmc9ITAsUih0KSl9fShuKTt0Lm9uKCJkcmFpbiIsdSk7dmFyIGY9ITE7ZnVuY3Rpb24gaChlKXtjKCJvbmRhdGEiKTt2YXIgcj10LndyaXRlKGUpO2MoImRlc3Qud3JpdGUiLHIpLCExPT09ciYmKCgxPT09aS5waXBlc0NvdW50JiZpLnBpcGVzPT09dHx8aS5waXBlc0NvdW50PjEmJi0xIT09aihpLnBpcGVzLHQpKSYmIWYmJihjKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGkuYXdhaXREcmFpbiksaS5hd2FpdERyYWluKyspLG4ucGF1c2UoKSl9ZnVuY3Rpb24gcChlKXtjKCJvbmVycm9yIixlKSxnKCksdC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHApLDA9PT1hKHQsImVycm9yIikmJncodCxlKX1mdW5jdGlvbiBkKCl7dC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixtKSxnKCl9ZnVuY3Rpb24gbSgpe2MoIm9uZmluaXNoIiksdC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpLGcoKX1mdW5jdGlvbiBnKCl7YygidW5waXBlIiksbi51bnBpcGUodCl9cmV0dXJuIG4ub24oImRhdGEiLGgpLGZ1bmN0aW9uKHQsZSxyKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIHQucHJlcGVuZExpc3RlbmVyKGUscik7dC5fZXZlbnRzJiZ0Ll9ldmVudHNbZV0/QXJyYXkuaXNBcnJheSh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dOnQub24oZSxyKX0odCwiZXJyb3IiLHApLHQub25jZSgiY2xvc2UiLGQpLHQub25jZSgiZmluaXNoIixtKSx0LmVtaXQoInBpcGUiLG4pLGkuZmxvd2luZ3x8KGMoInBpcGUgcmVzdW1lIiksbi5yZXN1bWUoKSksdH0sQS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj17aGFzVW5waXBlZDohMX07aWYoMD09PWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09ZS5waXBlc0NvdW50KXJldHVybiB0JiZ0IT09ZS5waXBlc3x8KHR8fCh0PWUucGlwZXMpLGUucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITEsdCYmdC5lbWl0KCJ1bnBpcGUiLHRoaXMscikpLHRoaXM7aWYoIXQpe3ZhciBuPWUucGlwZXMsaT1lLnBpcGVzQ291bnQ7ZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMTtmb3IodmFyIGE9MDthPGk7YSsrKW5bYV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIG89aihlLnBpcGVzLHQpO3JldHVybi0xPT09b3x8KGUucGlwZXMuc3BsaWNlKG8sMSksZS5waXBlc0NvdW50LT0xLDE9PT1lLnBpcGVzQ291bnQmJihlLnBpcGVzPWUucGlwZXNbMF0pLHQuZW1pdCgidW5waXBlIix0aGlzLHIpKSx0aGlzfSxBLnByb3RvdHlwZS5vbj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLm9uLmNhbGwodGhpcyx0LGUpLGk9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT10PyhpLnJlYWRhYmxlTGlzdGVuaW5nPXRoaXMubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLCExIT09aS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09dCYmKGkuZW5kRW1pdHRlZHx8aS5yZWFkYWJsZUxpc3RlbmluZ3x8KGkucmVhZGFibGVMaXN0ZW5pbmc9aS5uZWVkUmVhZGFibGU9ITAsaS5mbG93aW5nPSExLGkuZW1pdHRlZFJlYWRhYmxlPSExLGMoIm9uIHJlYWRhYmxlIixpLmxlbmd0aCxpLnJlYWRpbmcpLGkubGVuZ3RoP0wodGhpcyk6aS5yZWFkaW5nfHxyLm5leHRUaWNrKHosdGhpcykpKSxufSxBLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1BLnByb3RvdHlwZS5vbixBLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbih0LGUpe3ZhciBuPW8ucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyx0LGUpO3JldHVybiJyZWFkYWJsZSI9PT10JiZyLm5leHRUaWNrKE8sdGhpcyksbn0sQS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlPW8ucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuInJlYWRhYmxlIiE9PXQmJnZvaWQgMCE9PXR8fHIubmV4dFRpY2soTyx0aGlzKSxlfSxBLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB0LmZsb3dpbmd8fChjKCJyZXN1bWUiKSx0LmZsb3dpbmc9IXQucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLHIubmV4dFRpY2soRCx0LGUpKX0odGhpcyx0KSksdC5wYXVzZWQ9ITEsdGhpc30sQS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gYygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoYygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxBLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj10aGlzLl9yZWFkYWJsZVN0YXRlLG49ITE7Zm9yKHZhciBpIGluIHQub24oImVuZCIsKGZ1bmN0aW9uKCl7aWYoYygid3JhcHBlZCBlbmQiKSxyLmRlY29kZXImJiFyLmVuZGVkKXt2YXIgdD1yLmRlY29kZXIuZW5kKCk7dCYmdC5sZW5ndGgmJmUucHVzaCh0KX1lLnB1c2gobnVsbCl9KSksdC5vbigiZGF0YSIsKGZ1bmN0aW9uKGkpeyhjKCJ3cmFwcGVkIGRhdGEiKSxyLmRlY29kZXImJihpPXIuZGVjb2Rlci53cml0ZShpKSksci5vYmplY3RNb2RlJiZudWxsPT1pKXx8KHIub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpJiYoZS5wdXNoKGkpfHwobj0hMCx0LnBhdXNlKCkpKX0pKSx0KXZvaWQgMD09PXRoaXNbaV0mJiJmdW5jdGlvbiI9PXR5cGVvZiB0W2ldJiYodGhpc1tpXT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fShpKSk7Zm9yKHZhciBhPTA7YTxULmxlbmd0aDthKyspdC5vbihUW2FdLHRoaXMuZW1pdC5iaW5kKHRoaXMsVFthXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKGUpe2MoIndyYXBwZWQgX3JlYWQiLGUpLG4mJihuPSExLHQucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PWgmJihoPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9hc3luY19pdGVyYXRvciIpKSxoKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz10KX19KSxBLl9mcm9tTGlzdD1GLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoQS5mcm9tPWZ1bmN0aW9uKGUscil7cmV0dXJuIHZvaWQgMD09PXAmJihwPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9mcm9tIikpLHAoQSxlLHIpfSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIiksInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHsiLi4vZXJyb3JzIjo1NDQsIi4vX3N0cmVhbV9kdXBsZXgiOjU0NSwiLi9pbnRlcm5hbC9zdHJlYW1zL2FzeW5jX2l0ZXJhdG9yIjo1NTAsIi4vaW50ZXJuYWwvc3RyZWFtcy9idWZmZXJfbGlzdCI6NTUxLCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTUyLCIuL2ludGVybmFsL3N0cmVhbXMvZnJvbSI6NTU0LCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjU1NiwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NTU3LF9wcm9jZXNzOjUwNCxidWZmZXI6MTEyLGV2ZW50czoyMzcsaW5oZXJpdHM6NDI5LCJzdHJpbmdfZGVjb2Rlci8iOjU2Myx1dGlsOjExMX1dLDU0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9dTt2YXIgbj10KCIuLi9lcnJvcnMiKS5jb2RlcyxpPW4uRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsYT1uLkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxvPW4uRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyxzPW4uRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLGw9dCgiLi9fc3RyZWFtX2R1cGxleCIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtyLnRyYW5zZm9ybWluZz0hMTt2YXIgbj1yLndyaXRlY2I7aWYobnVsbD09PW4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBhKTtyLndyaXRlY2h1bms9bnVsbCxyLndyaXRlY2I9bnVsbCxudWxsIT1lJiZ0aGlzLnB1c2goZSksbih0KTt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlO2kucmVhZGluZz0hMSwoaS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiB1KHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdSh0KTtsLmNhbGwodGhpcyx0KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Yy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT10LnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZmx1c2gmJih0aGlzLl9mbHVzaD10LmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIixmKX1mdW5jdGlvbiBmKCl7dmFyIHQ9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP2godGhpcyxudWxsLG51bGwpOnRoaXMuX2ZsdXNoKChmdW5jdGlvbihlLHIpe2godCxlLHIpfSkpfWZ1bmN0aW9uIGgodCxlLHIpe2lmKGUpcmV0dXJuIHQuZW1pdCgiZXJyb3IiLGUpO2lmKG51bGwhPXImJnQucHVzaChyKSx0Ll93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgcztpZih0Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IG87cmV0dXJuIHQucHVzaChudWxsKX10KCJpbmhlcml0cyIpKHUsbCksdS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLGwucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLHQsZSl9LHUucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobmV3IGkoIl90cmFuc2Zvcm0oKSIpKX0sdS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihuLndyaXRlY2I9cixuLndyaXRlY2h1bms9dCxuLndyaXRlZW5jb2Rpbmc9ZSwhbi50cmFuc2Zvcm1pbmcpe3ZhciBpPXRoaXMuX3JlYWRhYmxlU3RhdGU7KG4ubmVlZFRyYW5zZm9ybXx8aS5uZWVkUmVhZGFibGV8fGkubGVuZ3RoPGkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoaS5oaWdoV2F0ZXJNYXJrKX19LHUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1lLndyaXRlY2h1bmt8fGUudHJhbnNmb3JtaW5nP2UubmVlZFRyYW5zZm9ybT0hMDooZS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKGUud3JpdGVjaHVuayxlLndyaXRlZW5jb2RpbmcsZS5hZnRlclRyYW5zZm9ybSkpfSx1LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih0LGUpe2wucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyx0LChmdW5jdGlvbih0KXtlKHQpfSkpfX0seyIuLi9lcnJvcnMiOjU0NCwiLi9fc3RyZWFtX2R1cGxleCI6NTQ1LGluaGVyaXRzOjQyOX1dLDU0OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3ZhciBlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmVudHJ5O3QuZW50cnk9bnVsbDtmb3IoO247KXt2YXIgaT1uLmNhbGxiYWNrO2UucGVuZGluZ2NiLS0saShyKSxuPW4ubmV4dH1lLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PXR9KGUsdCl9fXZhciBhO2UuZXhwb3J0cz1BLEEuV3JpdGFibGVTdGF0ZT1rO3ZhciBvPXtkZXByZWNhdGU6dCgidXRpbC1kZXByZWNhdGUiKX0scz10KCIuL2ludGVybmFsL3N0cmVhbXMvc3RyZWFtIiksbD10KCJidWZmZXIiKS5CdWZmZXIsYz1uLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fTt2YXIgdSxmPXQoIi4vaW50ZXJuYWwvc3RyZWFtcy9kZXN0cm95IiksaD10KCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiKS5nZXRIaWdoV2F0ZXJNYXJrLHA9dCgiLi4vZXJyb3JzIikuY29kZXMsZD1wLkVSUl9JTlZBTElEX0FSR19UWVBFLG09cC5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPXAuRVJSX01VTFRJUExFX0NBTExCQUNLLHY9cC5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHk9cC5FUlJfU1RSRUFNX0RFU1RST1lFRCx4PXAuRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyxiPXAuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsXz1wLkVSUl9VTktOT1dOX0VOQ09ESU5HLHc9Zi5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiBUKCl7fWZ1bmN0aW9uIGsoZSxuLG8pe2E9YXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpLGU9ZXx8e30sImJvb2xlYW4iIT10eXBlb2YgbyYmKG89biBpbnN0YW5jZW9mIGEpLHRoaXMub2JqZWN0TW9kZT0hIWUub2JqZWN0TW9kZSxvJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFlLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPWgodGhpcyxlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLG8pLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExO3ZhciBzPSExPT09ZS5kZWNvZGVTdHJpbmdzO3RoaXMuZGVjb2RlU3RyaW5ncz0hcyx0aGlzLmRlZmF1bHRFbmNvZGluZz1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5fd3JpdGFibGVTdGF0ZSxpPW4uc3luYyxhPW4ud3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgZztpZihmdW5jdGlvbih0KXt0LndyaXRpbmc9ITEsdC53cml0ZWNiPW51bGwsdC5sZW5ndGgtPXQud3JpdGVsZW4sdC53cml0ZWxlbj0wfShuKSxlKSFmdW5jdGlvbih0LGUsbixpLGEpey0tZS5wZW5kaW5nY2Isbj8oci5uZXh0VGljayhhLGkpLHIubmV4dFRpY2soUCx0LGUpLHQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHcodCxpKSk6KGEoaSksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdyh0LGkpLFAodCxlKSl9KHQsbixpLGUsYSk7ZWxzZXt2YXIgbz1MKG4pfHx0LmRlc3Ryb3llZDtvfHxuLmNvcmtlZHx8bi5idWZmZXJQcm9jZXNzaW5nfHwhbi5idWZmZXJlZFJlcXVlc3R8fEUodCxuKSxpP3IubmV4dFRpY2soUyx0LG4sbyxhKTpTKHQsbixvLGEpfX0obix0KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWUuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKHRoaXMpfWZ1bmN0aW9uIEEoZSl7dmFyIHI9dGhpcyBpbnN0YW5jZW9mKGE9YXx8dCgiLi9fc3RyZWFtX2R1cGxleCIpKTtpZighciYmIXUuY2FsbChBLHRoaXMpKXJldHVybiBuZXcgQShlKTt0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBrKGUsdGhpcyxyKSx0aGlzLndyaXRhYmxlPSEwLGUmJigiZnVuY3Rpb24iPT10eXBlb2YgZS53cml0ZSYmKHRoaXMuX3dyaXRlPWUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBlLndyaXRldiYmKHRoaXMuX3dyaXRldj1lLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIGUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9ZS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgZS5maW5hbCYmKHRoaXMuX2ZpbmFsPWUuZmluYWwpKSxzLmNhbGwodGhpcyl9ZnVuY3Rpb24gTSh0LGUscixuLGksYSxvKXtlLndyaXRlbGVuPW4sZS53cml0ZWNiPW8sZS53cml0aW5nPSEwLGUuc3luYz0hMCxlLmRlc3Ryb3llZD9lLm9ud3JpdGUobmV3IHkoIndyaXRlIikpOnI/dC5fd3JpdGV2KGksZS5vbndyaXRlKTp0Ll93cml0ZShpLGEsZS5vbndyaXRlKSxlLnN5bmM9ITF9ZnVuY3Rpb24gUyh0LGUscixuKXtyfHxmdW5jdGlvbih0LGUpezA9PT1lLmxlbmd0aCYmZS5uZWVkRHJhaW4mJihlLm5lZWREcmFpbj0hMSx0LmVtaXQoImRyYWluIikpfSh0LGUpLGUucGVuZGluZ2NiLS0sbigpLFAodCxlKX1mdW5jdGlvbiBFKHQsZSl7ZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciByPWUuYnVmZmVyZWRSZXF1ZXN0O2lmKHQuX3dyaXRldiYmciYmci5uZXh0KXt2YXIgbj1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50LGE9bmV3IEFycmF5KG4pLG89ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7by5lbnRyeT1yO2Zvcih2YXIgcz0wLGw9ITA7cjspYVtzXT1yLHIuaXNCdWZ8fChsPSExKSxyPXIubmV4dCxzKz0xO2EuYWxsQnVmZmVycz1sLE0odCxlLCEwLGUubGVuZ3RoLGEsIiIsby5maW5pc2gpLGUucGVuZGluZ2NiKyssZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsby5uZXh0PyhlLmNvcmtlZFJlcXVlc3RzRnJlZT1vLm5leHQsby5uZXh0PW51bGwpOmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBpKGUpLGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7cjspe3ZhciBjPXIuY2h1bmssdT1yLmVuY29kaW5nLGY9ci5jYWxsYmFjaztpZihNKHQsZSwhMSxlLm9iamVjdE1vZGU/MTpjLmxlbmd0aCxjLHUsZikscj1yLm5leHQsZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLGUud3JpdGluZylicmVha31udWxsPT09ciYmKGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1lLmJ1ZmZlcmVkUmVxdWVzdD1yLGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBMKHQpe3JldHVybiB0LmVuZGluZyYmMD09PXQubGVuZ3RoJiZudWxsPT09dC5idWZmZXJlZFJlcXVlc3QmJiF0LmZpbmlzaGVkJiYhdC53cml0aW5nfWZ1bmN0aW9uIEModCxlKXt0Ll9maW5hbCgoZnVuY3Rpb24ocil7ZS5wZW5kaW5nY2ItLSxyJiZ3KHQsciksZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpLFAodCxlKX0pKX1mdW5jdGlvbiBQKHQsZSl7dmFyIG49TChlKTtpZihuJiYoZnVuY3Rpb24odCxlKXtlLnByZWZpbmlzaGVkfHxlLmZpbmFsQ2FsbGVkfHwoImZ1bmN0aW9uIiE9dHlwZW9mIHQuX2ZpbmFsfHxlLmRlc3Ryb3llZD8oZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoInByZWZpbmlzaCIpKTooZS5wZW5kaW5nY2IrKyxlLmZpbmFsQ2FsbGVkPSEwLHIubmV4dFRpY2soQyx0LGUpKSl9KHQsZSksMD09PWUucGVuZGluZ2NiJiYoZS5maW5pc2hlZD0hMCx0LmVtaXQoImZpbmlzaCIpLGUuYXV0b0Rlc3Ryb3kpKSl7dmFyIGk9dC5fcmVhZGFibGVTdGF0ZTsoIWl8fGkuYXV0b0Rlc3Ryb3kmJmkuZW5kRW1pdHRlZCkmJnQuZGVzdHJveSgpfXJldHVybiBufXQoImluaGVyaXRzIikoQSxzKSxrLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5idWZmZXJlZFJlcXVlc3QsZT1bXTt0OyllLnB1c2godCksdD10Lm5leHQ7cmV0dXJuIGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShrLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0Om8uZGVwcmVjYXRlKChmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSksIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2godCl7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8odT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEhdS5jYWxsKHRoaXMsdCl8fHRoaXM9PT1BJiYodCYmdC5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIGspfX0pKTp1PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpc30sQS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3codGhpcyxuZXcgdil9LEEucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaSxhPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz0hMSxzPSFhLm9iamVjdE1vZGUmJihpPXQsbC5pc0J1ZmZlcihpKXx8aSBpbnN0YW5jZW9mIGMpO3JldHVybiBzJiYhbC5pc0J1ZmZlcih0KSYmKHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwuZnJvbSh0KX0odCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiYobj1lLGU9bnVsbCkscz9lPSJidWZmZXIiOmV8fChlPWEuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49VCksYS5lbmRpbmc/ZnVuY3Rpb24odCxlKXt2YXIgbj1uZXcgYjt3KHQsbiksci5uZXh0VGljayhlLG4pfSh0aGlzLG4pOihzfHxmdW5jdGlvbih0LGUsbixpKXt2YXIgYTtyZXR1cm4gbnVsbD09PW4/YT1uZXcgeDoic3RyaW5nIj09dHlwZW9mIG58fGUub2JqZWN0TW9kZXx8KGE9bmV3IGQoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLG4pKSwhYXx8KHcodCxhKSxyLm5leHRUaWNrKGksYSksITEpfSh0aGlzLGEsdCxuKSkmJihhLnBlbmRpbmdjYisrLG89ZnVuY3Rpb24odCxlLHIsbixpLGEpe2lmKCFyKXt2YXIgbz1mdW5jdGlvbih0LGUscil7dC5vYmplY3RNb2RlfHwhMT09PXQuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBlfHwoZT1sLmZyb20oZSxyKSk7cmV0dXJuIGV9KGUsbixpKTtuIT09byYmKHI9ITAsaT0iYnVmZmVyIixuPW8pfXZhciBzPWUub2JqZWN0TW9kZT8xOm4ubGVuZ3RoO2UubGVuZ3RoKz1zO3ZhciBjPWUubGVuZ3RoPGUuaGlnaFdhdGVyTWFyaztjfHwoZS5uZWVkRHJhaW49ITApO2lmKGUud3JpdGluZ3x8ZS5jb3JrZWQpe3ZhciB1PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdDtlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOm4sZW5jb2Rpbmc6aSxpc0J1ZjpyLGNhbGxiYWNrOmEsbmV4dDpudWxsfSx1P3UubmV4dD1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6ZS5idWZmZXJlZFJlcXVlc3Q9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBNKHQsZSwhMSxzLG4saSxhKTtyZXR1cm4gY30odGhpcyxhLHMsdCxlLG4pKSxvfSxBLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sQS5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCYmKHQuY29ya2VkLS0sdC53cml0aW5nfHx0LmNvcmtlZHx8dC5idWZmZXJQcm9jZXNzaW5nfHwhdC5idWZmZXJlZFJlcXVlc3R8fEUodGhpcyx0KSl9LEEucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHQmJih0PXQudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodCsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBfKHQpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz10LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLEEucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7cihuZXcgbSgiX3dyaXRlKCkiKSl9LEEucHJvdG90eXBlLl93cml0ZXY9bnVsbCxBLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCxlLG4pe3ZhciBpPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/KG49dCx0PW51bGwsZT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgZSYmKG49ZSxlPW51bGwpLG51bGwhPXQmJnRoaXMud3JpdGUodCxlKSxpLmNvcmtlZCYmKGkuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksaS5lbmRpbmd8fGZ1bmN0aW9uKHQsZSxuKXtlLmVuZGluZz0hMCxQKHQsZSksbiYmKGUuZmluaXNoZWQ/ci5uZXh0VGljayhuKTp0Lm9uY2UoImZpbmlzaCIsbikpO2UuZW5kZWQ9ITAsdC53cml0YWJsZT0hMX0odGhpcyxpLG4pLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odCl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXQpfX0pLEEucHJvdG90eXBlLmRlc3Ryb3k9Zi5kZXN0cm95LEEucHJvdG90eXBlLl91bmRlc3Ryb3k9Zi51bmRlc3Ryb3ksQS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odCxlKXtlKHQpfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSwidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyIuLi9lcnJvcnMiOjU0NCwiLi9fc3RyZWFtX2R1cGxleCI6NTQ1LCIuL2ludGVybmFsL3N0cmVhbXMvZGVzdHJveSI6NTUyLCIuL2ludGVybmFsL3N0cmVhbXMvc3RhdGUiOjU1NiwiLi9pbnRlcm5hbC9zdHJlYW1zL3N0cmVhbSI6NTU3LF9wcm9jZXNzOjUwNCxidWZmZXI6MTEyLGluaGVyaXRzOjQyOSwidXRpbC1kZXByZWNhdGUiOjU5NX1dLDU1MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIG47ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIGUgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtlXT1yLHR9dmFyIGE9dCgiLi9lbmQtb2Ytc3RyZWFtIiksbz1TeW1ib2woImxhc3RSZXNvbHZlIikscz1TeW1ib2woImxhc3RSZWplY3QiKSxsPVN5bWJvbCgiZXJyb3IiKSxjPVN5bWJvbCgiZW5kZWQiKSx1PVN5bWJvbCgibGFzdFByb21pc2UiKSxmPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLGg9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBwKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX1mdW5jdGlvbiBkKHQpe3ZhciBlPXRbb107aWYobnVsbCE9PWUpe3ZhciByPXRbaF0ucmVhZCgpO251bGwhPT1yJiYodFt1XT1udWxsLHRbb109bnVsbCx0W3NdPW51bGwsZShwKHIsITEpKSl9fWZ1bmN0aW9uIG0odCl7ci5uZXh0VGljayhkLHQpfXZhciBnPU9iamVjdC5nZXRQcm90b3R5cGVPZigoZnVuY3Rpb24oKXt9KSksdj1PYmplY3Quc2V0UHJvdG90eXBlT2YoKGkobj17Z2V0IHN0cmVhbSgpe3JldHVybiB0aGlzW2hdfSxuZXh0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXNbbF07aWYobnVsbCE9PWUpcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO2lmKHRoaXNbY10pcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKHZvaWQgMCwhMCkpO2lmKHRoaXNbaF0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxuKXtyLm5leHRUaWNrKChmdW5jdGlvbigpe3RbbF0/bih0W2xdKTplKHAodm9pZCAwLCEwKSl9KSl9KSk7dmFyIG4saT10aGlzW3VdO2lmKGkpbj1uZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyLG4pe3QudGhlbigoZnVuY3Rpb24oKXtlW2NdP3IocCh2b2lkIDAsITApKTplW2ZdKHIsbil9KSxuKX19KGksdGhpcykpO2Vsc2V7dmFyIGE9dGhpc1toXS5yZWFkKCk7aWYobnVsbCE9PWEpcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKGEsITEpKTtuPW5ldyBQcm9taXNlKHRoaXNbZl0pfXJldHVybiB0aGlzW3VdPW4sbn19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGkobiwicmV0dXJuIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXt0W2hdLmRlc3Ryb3kobnVsbCwoZnVuY3Rpb24odCl7dD9yKHQpOmUocCh2b2lkIDAsITApKX0pKX0pKX0pKSxuKSxnKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscj1PYmplY3QuY3JlYXRlKHYsKGkoZT17fSxoLHt2YWx1ZTp0LHdyaXRhYmxlOiEwfSksaShlLG8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxpKGUscyx7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGkoZSxsLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksaShlLGMse3ZhbHVlOnQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGkoZSxmLHt2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBuPXJbaF0ucmVhZCgpO24/KHJbdV09bnVsbCxyW29dPW51bGwscltzXT1udWxsLHQocChuLCExKSkpOihyW29dPXQscltzXT1lKX0sd3JpdGFibGU6ITB9KSxlKSk7cmV0dXJuIHJbdV09bnVsbCxhKHQsKGZ1bmN0aW9uKHQpe2lmKHQmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT10LmNvZGUpe3ZhciBlPXJbc107cmV0dXJuIG51bGwhPT1lJiYoclt1XT1udWxsLHJbb109bnVsbCxyW3NdPW51bGwsZSh0KSksdm9pZChyW2xdPXQpfXZhciBuPXJbb107bnVsbCE9PW4mJihyW3VdPW51bGwscltvXT1udWxsLHJbc109bnVsbCxuKHAodm9pZCAwLCEwKSkpLHJbY109ITB9KSksdC5vbigicmVhZGFibGUiLG0uYmluZChudWxsLHIpKSxyfX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHsiLi9lbmQtb2Ytc3RyZWFtIjo1NTMsX3Byb2Nlc3M6NTA0fV0sNTUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCxlKXt2YXIgcj1PYmplY3Qua2V5cyh0KTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHQpO2UmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LGUpLmVudW1lcmFibGV9KSkpLHIucHVzaC5hcHBseShyLG4pfXJldHVybiByfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiBlIGluIHQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOnRbZV09cix0fWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX12YXIgbz10KCJidWZmZXIiKS5CdWZmZXIscz10KCJ1dGlsIikuaW5zcGVjdCxsPXMmJnMuY3VzdG9tfHwiaW5zcGVjdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyFmdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGUscixjO3JldHVybiBlPXQsKHI9W3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWUsKyt0aGlzLmxlbmd0aH19LHtrZXk6InVuc2hpZnQiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1lKSx0aGlzLmhlYWQ9ZSwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfX0se2tleToiam9pbiIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgZT10aGlzLmhlYWQscj0iIitlLmRhdGE7ZT1lLm5leHQ7KXIrPXQrZS5kYXRhO3JldHVybiByfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIG8uYWxsb2MoMCk7Zm9yKHZhciBlLHIsbixpPW8uYWxsb2NVbnNhZmUodD4+PjApLGE9dGhpcy5oZWFkLHM9MDthOyllPWEuZGF0YSxyPWksbj1zLG8ucHJvdG90eXBlLmNvcHkuY2FsbChlLHIsbikscys9YS5kYXRhLmxlbmd0aCxhPWEubmV4dDtyZXR1cm4gaX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIHQ8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsdCksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UodCkpOnI9dD09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6ZT90aGlzLl9nZXRTdHJpbmcodCk6dGhpcy5fZ2V0QnVmZmVyKHQpLHJ9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmhlYWQscj0xLG49ZS5kYXRhO2Zvcih0LT1uLmxlbmd0aDtlPWUubmV4dDspe3ZhciBpPWUuZGF0YSxhPXQ+aS5sZW5ndGg/aS5sZW5ndGg6dDtpZihhPT09aS5sZW5ndGg/bis9aTpuKz1pLnNsaWNlKDAsdCksMD09KHQtPWEpKXthPT09aS5sZW5ndGg/KCsrcixlLm5leHQ/dGhpcy5oZWFkPWUubmV4dDp0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9ZSxlLmRhdGE9aS5zbGljZShhKSk7YnJlYWt9KytyfXJldHVybiB0aGlzLmxlbmd0aC09cixufX0se2tleToiX2dldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9by5hbGxvY1Vuc2FmZSh0KSxyPXRoaXMuaGVhZCxuPTE7Zm9yKHIuZGF0YS5jb3B5KGUpLHQtPXIuZGF0YS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgaT1yLmRhdGEsYT10PmkubGVuZ3RoP2kubGVuZ3RoOnQ7aWYoaS5jb3B5KGUsZS5sZW5ndGgtdCwwLGEpLDA9PSh0LT1hKSl7YT09PWkubGVuZ3RoPygrK24sci5uZXh0P3RoaXMuaGVhZD1yLm5leHQ6dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXIsci5kYXRhPWkuc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gdGhpcy5sZW5ndGgtPW4sZX19LHtrZXk6bCx2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiBzKHRoaXMsZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIHI9bnVsbCE9YXJndW1lbnRzW2VdP2FyZ3VtZW50c1tlXTp7fTtlJTI/bihPYmplY3QociksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe2kodCxlLHJbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHQsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocikpOm4oT2JqZWN0KHIpKS5mb3JFYWNoKChmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixlKSl9KSl9cmV0dXJuIHR9KHt9LGUse2RlcHRoOjAsY3VzdG9tSW5zcGVjdDohMX0pKX19XSkmJmEoZS5wcm90b3R5cGUsciksYyYmYShlLGMpLHR9KCl9LHtidWZmZXI6MTEyLHV0aWw6MTExfV0sNTUyOltmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKHQsZSl7aSh0LGUpLG4odCl9ZnVuY3Rpb24gbih0KXt0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHQuX3JlYWRhYmxlU3RhdGUmJiF0Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dC5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIGkodCxlKXt0LmVtaXQoImVycm9yIixlKX1lLmV4cG9ydHM9e2Rlc3Ryb3k6ZnVuY3Rpb24oZSxhKXt2YXIgbz10aGlzLHM9dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQsbD10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZDtyZXR1cm4gc3x8bD8oYT9hKGUpOmUmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5uZXh0VGljayhpLHRoaXMsZSkpOnQubmV4dFRpY2soaSx0aGlzLGUpKSx0aGlzKToodGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koZXx8bnVsbCwoZnVuY3Rpb24oZSl7IWEmJmU/by5fd3JpdGFibGVTdGF0ZT9vLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD90Lm5leHRUaWNrKG4sbyk6KG8uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHQubmV4dFRpY2socixvLGUpKTp0Lm5leHRUaWNrKHIsbyxlKTphPyh0Lm5leHRUaWNrKG4sbyksYShlKSk6dC5uZXh0VGljayhuLG8pfSkpLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5yZWFkaW5nPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkPSExKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGluZz0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmFsQ2FsbGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUucHJlZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMSl9LGVycm9yT3JEZXN0cm95OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcmVhZGFibGVTdGF0ZSxuPXQuX3dyaXRhYmxlU3RhdGU7ciYmci5hdXRvRGVzdHJveXx8biYmbi5hdXRvRGVzdHJveT90LmRlc3Ryb3koZSk6dC5lbWl0KCJlcnJvciIsZSl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSl9LHtfcHJvY2Vzczo1MDR9XSw1NTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gaSgpe31lLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpcmV0dXJuIHQoZSxudWxsLHIpO3J8fChyPXt9KSxhPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFlKXtlPSEwO2Zvcih2YXIgcj1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KHIpLGk9MDtpPHI7aSsrKW5baV09YXJndW1lbnRzW2ldO3QuYXBwbHkodGhpcyxuKX19fShhfHxpKTt2YXIgbz1yLnJlYWRhYmxlfHwhMSE9PXIucmVhZGFibGUmJmUucmVhZGFibGUscz1yLndyaXRhYmxlfHwhMSE9PXIud3JpdGFibGUmJmUud3JpdGFibGUsbD1mdW5jdGlvbigpe2Uud3JpdGFibGV8fHUoKX0sYz1lLl93cml0YWJsZVN0YXRlJiZlLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLHU9ZnVuY3Rpb24oKXtzPSExLGM9ITAsb3x8YS5jYWxsKGUpfSxmPWUuX3JlYWRhYmxlU3RhdGUmJmUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxoPWZ1bmN0aW9uKCl7bz0hMSxmPSEwLHN8fGEuY2FsbChlKX0scD1mdW5jdGlvbih0KXthLmNhbGwoZSx0KX0sZD1mdW5jdGlvbigpe3ZhciB0O3JldHVybiBvJiYhZj8oZS5fcmVhZGFibGVTdGF0ZSYmZS5fcmVhZGFibGVTdGF0ZS5lbmRlZHx8KHQ9bmV3IG4pLGEuY2FsbChlLHQpKTpzJiYhYz8oZS5fd3JpdGFibGVTdGF0ZSYmZS5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KHQ9bmV3IG4pLGEuY2FsbChlLHQpKTp2b2lkIDB9LG09ZnVuY3Rpb24oKXtlLnJlcS5vbigiZmluaXNoIix1KX07cmV0dXJuIWZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWJvcnR9KGUpP3MmJiFlLl93cml0YWJsZVN0YXRlJiYoZS5vbigiZW5kIixsKSxlLm9uKCJjbG9zZSIsbCkpOihlLm9uKCJjb21wbGV0ZSIsdSksZS5vbigiYWJvcnQiLGQpLGUucmVxP20oKTplLm9uKCJyZXF1ZXN0IixtKSksZS5vbigiZW5kIixoKSxlLm9uKCJmaW5pc2giLHUpLCExIT09ci5lcnJvciYmZS5vbigiZXJyb3IiLHApLGUub24oImNsb3NlIixkKSxmdW5jdGlvbigpe2UucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIix1KSxlLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZCksZS5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsbSksZS5yZXEmJmUucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHUpLGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsbCksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGwpLGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsdSksZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixoKSxlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIscCksZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGQpfX19LHsiLi4vLi4vLi4vZXJyb3JzIjo1NDR9XSw1NTQ6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0se31dLDU1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbjt2YXIgaT10KCIuLi8uLi8uLi9lcnJvcnMiKS5jb2RlcyxhPWkuRVJSX01JU1NJTkdfQVJHUyxvPWkuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gcyh0KXtpZih0KXRocm93IHR9ZnVuY3Rpb24gbChlLHIsaSxhKXthPWZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBmdW5jdGlvbigpe2V8fChlPSEwLHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cykpfX0oYSk7dmFyIHM9ITE7ZS5vbigiY2xvc2UiLChmdW5jdGlvbigpe3M9ITB9KSksdm9pZCAwPT09biYmKG49dCgiLi9lbmQtb2Ytc3RyZWFtIikpLG4oZSx7cmVhZGFibGU6cix3cml0YWJsZTppfSwoZnVuY3Rpb24odCl7aWYodClyZXR1cm4gYSh0KTtzPSEwLGEoKX0pKTt2YXIgbD0hMTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoIXMmJiFsKXJldHVybiBsPSEwLGZ1bmN0aW9uKHQpe3JldHVybiB0LnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIHQuYWJvcnR9KGUpP2UuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgZS5kZXN0cm95P2UuZGVzdHJveSgpOnZvaWQgYSh0fHxuZXcgbygicGlwZSIpKX19ZnVuY3Rpb24gYyh0KXt0KCl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0LnBpcGUoZSl9ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5sZW5ndGg/ImZ1bmN0aW9uIiE9dHlwZW9mIHRbdC5sZW5ndGgtMV0/czp0LnBvcCgpOnN9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgsZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1hcmd1bWVudHNbcl07dmFyIG4saT1mKGUpO2lmKEFycmF5LmlzQXJyYXkoZVswXSkmJihlPWVbMF0pLGUubGVuZ3RoPDIpdGhyb3cgbmV3IGEoInN0cmVhbXMiKTt2YXIgbz1lLm1hcCgoZnVuY3Rpb24odCxyKXt2YXIgYT1yPGUubGVuZ3RoLTE7cmV0dXJuIGwodCxhLHI+MCwoZnVuY3Rpb24odCl7bnx8KG49dCksdCYmby5mb3JFYWNoKGMpLGF8fChvLmZvckVhY2goYyksaShuKSl9KSl9KSk7cmV0dXJuIGUucmVkdWNlKHUpfX0seyIuLi8uLi8uLi9lcnJvcnMiOjU0NCwiLi9lbmQtb2Ytc3RyZWFtIjo1NTN9XSw1NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vZXJyb3JzIikuY29kZXMuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO2UuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1mdW5jdGlvbih0LGUscil7cmV0dXJuIG51bGwhPXQuaGlnaFdhdGVyTWFyaz90LmhpZ2hXYXRlck1hcms6ZT90W3JdOm51bGx9KGUsaSxyKTtpZihudWxsIT1hKXtpZighaXNGaW5pdGUoYSl8fE1hdGguZmxvb3IoYSkhPT1hfHxhPDApdGhyb3cgbmV3IG4oaT9yOiJoaWdoV2F0ZXJNYXJrIixhKTtyZXR1cm4gTWF0aC5mbG9vcihhKX1yZXR1cm4gdC5vYmplY3RNb2RlPzE2OjE2Mzg0fX19LHsiLi4vLi4vLi4vZXJyb3JzIjo1NDR9XSw1NTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyfSx7ZXZlbnRzOjIzN31dLDU1ODpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyLG4peyhmdW5jdGlvbigpe3ZhciByPXQoImFzc2VydCIpLGk9dCgiZGVidWciKSgic3RyZWFtLXBhcnNlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10JiYiZnVuY3Rpb24iPT10eXBlb2YgdC5fdHJhbnNmb3JtLHI9dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuX3dyaXRlO2lmKCFlJiYhcil0aHJvdyBuZXcgRXJyb3IoIm11c3QgcGFzcyBhIFdyaXRhYmxlIG9yIFRyYW5zZm9ybSBzdHJlYW0gaW4iKTtpKCJleHRlbmRpbmcgUGFyc2VyIGludG8gc3RyZWFtIiksdC5fYnl0ZXM9byx0Ll9za2lwQnl0ZXM9cyxlJiYodC5fcGFzc3Rocm91Z2g9bCk7ZT90Ll90cmFuc2Zvcm09dTp0Ll93cml0ZT1jfTtmdW5jdGlvbiBhKHQpe2koImluaXRpYWxpemluZyBwYXJzZXIgc3RyZWFtIiksdC5fcGFyc2VyQnl0ZXNMZWZ0PTAsdC5fcGFyc2VyQnVmZmVycz1bXSx0Ll9wYXJzZXJCdWZmZXJlZD0wLHQuX3BhcnNlclN0YXRlPS0xLHQuX3BhcnNlckNhbGxiYWNrPW51bGwsImZ1bmN0aW9uIj09dHlwZW9mIHQucHVzaCYmKHQuX3BhcnNlck91dHB1dD10LnB1c2guYmluZCh0KSksdC5fcGFyc2VySW5pdD0hMH1mdW5jdGlvbiBvKHQsZSl7cighdGhpcy5fcGFyc2VyQ2FsbGJhY2ssJ3RoZXJlIGlzIGFscmVhZHkgYSAiY2FsbGJhY2siIHNldCEnKSxyKGlzRmluaXRlKHQpJiZ0PjAsJ2NhbiBvbmx5IGJ1ZmZlciBhIGZpbml0ZSBudW1iZXIgb2YgYnl0ZXMgPiAwLCBnb3QgIicrdCsnIicpLHRoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgiYnVmZmVyaW5nICVvIGJ5dGVzIix0KSx0aGlzLl9wYXJzZXJCeXRlc0xlZnQ9dCx0aGlzLl9wYXJzZXJDYWxsYmFjaz1lLHRoaXMuX3BhcnNlclN0YXRlPTB9ZnVuY3Rpb24gcyh0LGUpe3IoIXRoaXMuX3BhcnNlckNhbGxiYWNrLCd0aGVyZSBpcyBhbHJlYWR5IGEgImNhbGxiYWNrIiBzZXQhJykscih0PjAsJ2NhbiBvbmx5IHNraXAgPiAwIGJ5dGVzLCBnb3QgIicrdCsnIicpLHRoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgic2tpcHBpbmcgJW8gYnl0ZXMiLHQpLHRoaXMuX3BhcnNlckJ5dGVzTGVmdD10LHRoaXMuX3BhcnNlckNhbGxiYWNrPWUsdGhpcy5fcGFyc2VyU3RhdGU9MX1mdW5jdGlvbiBsKHQsZSl7cighdGhpcy5fcGFyc2VyQ2FsbGJhY2ssJ1RoZXJlIGlzIGFscmVhZHkgYSAiY2FsbGJhY2siIHNldCEnKSxyKHQ+MCwnY2FuIG9ubHkgcGFzcyB0aHJvdWdoID4gMCBieXRlcywgZ290ICInK3QrJyInKSx0aGlzLl9wYXJzZXJJbml0fHxhKHRoaXMpLGkoInBhc3NpbmcgdGhyb3VnaCAlbyBieXRlcyIsdCksdGhpcy5fcGFyc2VyQnl0ZXNMZWZ0PXQsdGhpcy5fcGFyc2VyQ2FsbGJhY2s9ZSx0aGlzLl9wYXJzZXJTdGF0ZT0yfWZ1bmN0aW9uIGModCxlLHIpe3RoaXMuX3BhcnNlckluaXR8fGEodGhpcyksaSgid3JpdGUoJW8gYnl0ZXMpIix0Lmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIGUmJihyPWUpLGgodGhpcyx0LG51bGwscil9ZnVuY3Rpb24gdSh0LGUscil7dGhpcy5fcGFyc2VySW5pdHx8YSh0aGlzKSxpKCJ0cmFuc2Zvcm0oJW8gYnl0ZXMpIix0Lmxlbmd0aCksImZ1bmN0aW9uIiE9dHlwZW9mIGUmJihlPXRoaXMuX3BhcnNlck91dHB1dCksaCh0aGlzLHQsZSxyKX1mdW5jdGlvbiBmKHQsZSxyLGEpe2lmKHQuX3BhcnNlckJ5dGVzTGVmdC09ZS5sZW5ndGgsaSgiJW8gYnl0ZXMgbGVmdCBmb3Igc3RyZWFtIHBpZWNlIix0Ll9wYXJzZXJCeXRlc0xlZnQpLDA9PT10Ll9wYXJzZXJTdGF0ZT8odC5fcGFyc2VyQnVmZmVycy5wdXNoKGUpLHQuX3BhcnNlckJ1ZmZlcmVkKz1lLmxlbmd0aCk6Mj09PXQuX3BhcnNlclN0YXRlJiZyKGUpLDAhPT10Ll9wYXJzZXJCeXRlc0xlZnQpcmV0dXJuIGE7dmFyIG89dC5fcGFyc2VyQ2FsbGJhY2s7aWYobyYmMD09PXQuX3BhcnNlclN0YXRlJiZ0Ll9wYXJzZXJCdWZmZXJzLmxlbmd0aD4xJiYoZT1uLmNvbmNhdCh0Ll9wYXJzZXJCdWZmZXJzLHQuX3BhcnNlckJ1ZmZlcmVkKSksMCE9PXQuX3BhcnNlclN0YXRlJiYoZT1udWxsKSx0Ll9wYXJzZXJDYWxsYmFjaz1udWxsLHQuX3BhcnNlckJ1ZmZlcmVkPTAsdC5fcGFyc2VyU3RhdGU9LTEsdC5fcGFyc2VyQnVmZmVycy5zcGxpY2UoMCksbyl7dmFyIHM9W107ZSYmcy5wdXNoKGUpLHImJnMucHVzaChyKTt2YXIgbD1vLmxlbmd0aD5zLmxlbmd0aDtsJiZzLnB1c2gocChhKSk7dmFyIGM9by5hcHBseSh0LHMpO2lmKCFsfHxhPT09YylyZXR1cm4gYX19dmFyIGg9cCgoZnVuY3Rpb24gdChlLHIsbixpKXtyZXR1cm4gZS5fcGFyc2VyQnl0ZXNMZWZ0PD0wP2kobmV3IEVycm9yKCJnb3QgZGF0YSBidXQgbm90IGN1cnJlbnRseSBwYXJzaW5nIGFueXRoaW5nIikpOnIubGVuZ3RoPD1lLl9wYXJzZXJCeXRlc0xlZnQ/ZnVuY3Rpb24oKXtyZXR1cm4gZihlLHIsbixpKX06ZnVuY3Rpb24oKXt2YXIgYT1yLnNsaWNlKDAsZS5fcGFyc2VyQnl0ZXNMZWZ0KTtyZXR1cm4gZihlLGEsbiwoZnVuY3Rpb24obyl7cmV0dXJuIG8/aShvKTpyLmxlbmd0aD5hLmxlbmd0aD9mdW5jdGlvbigpe3JldHVybiB0KGUsci5zbGljZShhLmxlbmd0aCksbixpKX06dm9pZCAwfSkpfX0pKTtmdW5jdGlvbiBwKHQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsiZnVuY3Rpb24iPT10eXBlb2YgZTspZT1lKCk7cmV0dXJuIGV9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsdCgiX3Byb2Nlc3MiKSx0KCJidWZmZXIiKS5CdWZmZXIpfSx7X3Byb2Nlc3M6NTA0LGFzc2VydDo3NixidWZmZXI6MTEyLGRlYnVnOjU1OX1dLDU1OTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXsoZnVuY3Rpb24oKXtmdW5jdGlvbiBpKCl7dmFyIHQ7dHJ5e3Q9ci5zdG9yYWdlLmRlYnVnfWNhdGNoKHQpe31yZXR1cm4hdCYmdm9pZCAwIT09biYmImVudiJpbiBuJiYodD1uLmVudi5ERUJVRyksdH0ocj1lLmV4cG9ydHM9dCgiLi9kZWJ1ZyIpKS5sb2c9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUubG9nJiZGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlLmxvZyxjb25zb2xlLGFyZ3VtZW50cyl9LHIuZm9ybWF0QXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnVzZUNvbG9ycztpZih0WzBdPShlPyIlYyI6IiIpK3RoaXMubmFtZXNwYWNlKyhlPyIgJWMiOiIgIikrdFswXSsoZT8iJWMgIjoiICIpKyIrIityLmh1bWFuaXplKHRoaXMuZGlmZiksIWUpcmV0dXJuO3ZhciBuPSJjb2xvcjogIit0aGlzLmNvbG9yO3Quc3BsaWNlKDEsMCxuLCJjb2xvcjogaW5oZXJpdCIpO3ZhciBpPTAsYT0wO3RbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLChmdW5jdGlvbih0KXsiJSUiIT09dCYmKGkrKywiJWMiPT09dCYmKGE9aSkpfSkpLHQuc3BsaWNlKGEsMCxuKX0sci5zYXZlPWZ1bmN0aW9uKHQpe3RyeXtudWxsPT10P3Iuc3RvcmFnZS5yZW1vdmVJdGVtKCJkZWJ1ZyIpOnIuc3RvcmFnZS5kZWJ1Zz10fWNhdGNoKHQpe319LHIubG9hZD1pLHIudXNlQ29sb3JzPWZ1bmN0aW9uKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5wcm9jZXNzJiYicmVuZGVyZXIiPT09d2luZG93LnByb2Nlc3MudHlwZSlyZXR1cm4hMDtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2V8fCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuY29uc29sZSYmKHdpbmRvdy5jb25zb2xlLmZpcmVidWd8fHdpbmRvdy5jb25zb2xlLmV4Y2VwdGlvbiYmd2luZG93LmNvbnNvbGUudGFibGUpfHwidW5kZWZpbmVkIiE9dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XC8oXGQrKS8pJiZwYXJzZUludChSZWdFeHAuJDEsMTApPj0zMXx8InVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci51c2VyQWdlbnQmJm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcLyhcZCspLyl9LHIuc3RvcmFnZT0idW5kZWZpbmVkIiE9dHlwZW9mIGNocm9tZSYmdm9pZCAwIT09Y2hyb21lLnN0b3JhZ2U/Y2hyb21lLnN0b3JhZ2UubG9jYWw6ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2V9Y2F0Y2godCl7fX0oKSxyLmNvbG9ycz1bImxpZ2h0c2VhZ3JlZW4iLCJmb3Jlc3RncmVlbiIsImdvbGRlbnJvZCIsImRvZGdlcmJsdWUiLCJkYXJrb3JjaGlkIiwiY3JpbXNvbiJdLHIuZm9ybWF0dGVycy5qPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2godCl7cmV0dXJuIltVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAiK3QubWVzc2FnZX19LHIuZW5hYmxlKGkoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHQoIl9wcm9jZXNzIikpfSx7Ii4vZGVidWciOjU2MCxfcHJvY2Vzczo1MDR9XSw1NjA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbjtmdW5jdGlvbiBpKHQpe2Z1bmN0aW9uIGUoKXtpZihlLmVuYWJsZWQpe3ZhciB0PWUsaT0rbmV3IERhdGUsYT1pLShufHxpKTt0LmRpZmY9YSx0LnByZXY9bix0LmN1cnI9aSxuPWk7Zm9yKHZhciBvPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxzPTA7czxvLmxlbmd0aDtzKyspb1tzXT1hcmd1bWVudHNbc107b1swXT1yLmNvZXJjZShvWzBdKSwic3RyaW5nIiE9dHlwZW9mIG9bMF0mJm8udW5zaGlmdCgiJU8iKTt2YXIgbD0wO29bMF09b1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywoZnVuY3Rpb24oZSxuKXtpZigiJSUiPT09ZSlyZXR1cm4gZTtsKys7dmFyIGk9ci5mb3JtYXR0ZXJzW25dO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBpKXt2YXIgYT1vW2xdO2U9aS5jYWxsKHQsYSksby5zcGxpY2UobCwxKSxsLS19cmV0dXJuIGV9KSksci5mb3JtYXRBcmdzLmNhbGwodCxvKTt2YXIgYz1lLmxvZ3x8ci5sb2d8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSk7Yy5hcHBseSh0LG8pfX1yZXR1cm4gZS5uYW1lc3BhY2U9dCxlLmVuYWJsZWQ9ci5lbmFibGVkKHQpLGUudXNlQ29sb3JzPXIudXNlQ29sb3JzKCksZS5jb2xvcj1mdW5jdGlvbih0KXt2YXIgZSxuPTA7Zm9yKGUgaW4gdCluPShuPDw1KS1uK3QuY2hhckNvZGVBdChlKSxufD0wO3JldHVybiByLmNvbG9yc1tNYXRoLmFicyhuKSVyLmNvbG9ycy5sZW5ndGhdfSh0KSwiZnVuY3Rpb24iPT10eXBlb2Ygci5pbml0JiZyLmluaXQoZSksZX0ocj1lLmV4cG9ydHM9aS5kZWJ1Zz1pLmRlZmF1bHQ9aSkuY29lcmNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgRXJyb3I/dC5zdGFja3x8dC5tZXNzYWdlOnR9LHIuZGlzYWJsZT1mdW5jdGlvbigpe3IuZW5hYmxlKCIiKX0sci5lbmFibGU9ZnVuY3Rpb24odCl7ci5zYXZlKHQpLHIubmFtZXM9W10sci5za2lwcz1bXTtmb3IodmFyIGU9KCJzdHJpbmciPT10eXBlb2YgdD90OiIiKS5zcGxpdCgvW1xzLF0rLyksbj1lLmxlbmd0aCxpPTA7aTxuO2krKyllW2ldJiYoIi0iPT09KHQ9ZVtpXS5yZXBsYWNlKC9cKi9nLCIuKj8iKSlbMF0/ci5za2lwcy5wdXNoKG5ldyBSZWdFeHAoIl4iK3Quc3Vic3RyKDEpKyIkIikpOnIubmFtZXMucHVzaChuZXcgUmVnRXhwKCJeIit0KyIkIikpKX0sci5lbmFibGVkPWZ1bmN0aW9uKHQpe3ZhciBlLG47Zm9yKGU9MCxuPXIuc2tpcHMubGVuZ3RoO2U8bjtlKyspaWYoci5za2lwc1tlXS50ZXN0KHQpKXJldHVybiExO2ZvcihlPTAsbj1yLm5hbWVzLmxlbmd0aDtlPG47ZSsrKWlmKHIubmFtZXNbZV0udGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX0sci5odW1hbml6ZT10KCJtcyIpLHIubmFtZXM9W10sci5za2lwcz1bXSxyLmZvcm1hdHRlcnM9e319LHttczo1NjF9XSw1NjE6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj0xZTMsaT02ZTQsYT02MCppLG89MjQqYTtmdW5jdGlvbiBzKHQsZSxyKXtpZighKHQ8ZSkpcmV0dXJuIHQ8MS41KmU/TWF0aC5mbG9vcih0L2UpKyIgIityOk1hdGguY2VpbCh0L2UpKyIgIityKyJzIn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByLGw9dHlwZW9mIHQ7aWYoInN0cmluZyI9PT1sJiZ0Lmxlbmd0aD4wKXJldHVybiBmdW5jdGlvbih0KXtpZigodD1TdHJpbmcodCkpLmxlbmd0aD4xMDApcmV0dXJuO3ZhciBlPS9eKCg/OlxkKyk/XC4/XGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWModCk7aWYoIWUpcmV0dXJuO3ZhciByPXBhcnNlRmxvYXQoZVsxXSk7c3dpdGNoKChlWzJdfHwibXMiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInllYXJzIjpjYXNlInllYXIiOmNhc2UieXJzIjpjYXNlInlyIjpjYXNlInkiOnJldHVybiAzMTU1NzZlNSpyO2Nhc2UiZGF5cyI6Y2FzZSJkYXkiOmNhc2UiZCI6cmV0dXJuIHIqbztjYXNlImhvdXJzIjpjYXNlImhvdXIiOmNhc2UiaHJzIjpjYXNlImhyIjpjYXNlImgiOnJldHVybiByKmE7Y2FzZSJtaW51dGVzIjpjYXNlIm1pbnV0ZSI6Y2FzZSJtaW5zIjpjYXNlIm1pbiI6Y2FzZSJtIjpyZXR1cm4gcippO2Nhc2Uic2Vjb25kcyI6Y2FzZSJzZWNvbmQiOmNhc2Uic2VjcyI6Y2FzZSJzZWMiOmNhc2UicyI6cmV0dXJuIHIqbjtjYXNlIm1pbGxpc2Vjb25kcyI6Y2FzZSJtaWxsaXNlY29uZCI6Y2FzZSJtc2VjcyI6Y2FzZSJtc2VjIjpjYXNlIm1zIjpyZXR1cm4gcjtkZWZhdWx0OnJldHVybn19KHQpO2lmKCJudW1iZXIiPT09bCYmITE9PT1pc05hTih0KSlyZXR1cm4gZS5sb25nP3Mocj10LG8sImRheSIpfHxzKHIsYSwiaG91ciIpfHxzKHIsaSwibWludXRlIil8fHMocixuLCJzZWNvbmQiKXx8cisiIG1zIjpmdW5jdGlvbih0KXtpZih0Pj1vKXJldHVybiBNYXRoLnJvdW5kKHQvbykrImQiO2lmKHQ+PWEpcmV0dXJuIE1hdGgucm91bmQodC9hKSsiaCI7aWYodD49aSlyZXR1cm4gTWF0aC5yb3VuZCh0L2kpKyJtIjtpZih0Pj1uKXJldHVybiBNYXRoLnJvdW5kKHQvbikrInMiO3JldHVybiB0KyJtcyJ9KHQpO3Rocm93IG5ldyBFcnJvcigidmFsIGlzIG5vdCBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBudW1iZXIuIHZhbD0iK0pTT04uc3RyaW5naWZ5KHQpKX19LHt9XSw1NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyZW50aGVzaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSBhIHN0cmluZyIpO2lmKG51bGw9PWUpdGhyb3cgRXJyb3IoIlNlcGFyYXRvciBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYSBSZWdFeHAiKTtyPygic3RyaW5nIj09dHlwZW9mIHJ8fEFycmF5LmlzQXJyYXkocikpJiYocj17aWdub3JlOnJ9KTpyPXt9LG51bGw9PXIuZXNjYXBlJiYoci5lc2NhcGU9ITApLG51bGw9PXIuaWdub3JlP3IuaWdub3JlPVsiW10iLCIoKSIsInt9IiwiPD4iLCciIicsIicnIiwiYGAiLCJcdTIwMWNcdTIwMWQiLCJceGFiXHhiYiJdOigic3RyaW5nIj09dHlwZW9mIHIuaWdub3JlJiYoci5pZ25vcmU9W3IuaWdub3JlXSksci5pZ25vcmU9ci5pZ25vcmUubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gMT09PXQubGVuZ3RoJiYodCs9dCksdH0pKSk7dmFyIGk9bi5wYXJzZSh0LHtmbGF0OiEwLGJyYWNrZXRzOnIuaWdub3JlfSksYT1pWzBdLnNwbGl0KGUpO2lmKHIuZXNjYXBlKXtmb3IodmFyIG89W10scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9YVtzKzFdOyJcXCI9PT1sW2wubGVuZ3RoLTFdJiYiXFwiIT09bFtsLmxlbmd0aC0yXT8oby5wdXNoKGwrZStjKSxzKyspOm8ucHVzaChsKX1hPW99Zm9yKHM9MDtzPGEubGVuZ3RoO3MrKylpWzBdPWFbc10sYVtzXT1uLnN0cmluZ2lmeShpLHtmbGF0OiEwfSk7cmV0dXJuIGF9fSx7cGFyZW50aGVzaXM6NDcwfV0sNTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInNhZmUtYnVmZmVyIikuQnVmZmVyLGk9bi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2goKHQ9IiIrdCkmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiBhKHQpe3ZhciBlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiJ1dGY4Ijtmb3IodmFyIGU7Oylzd2l0Y2godCl7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIHQ7ZGVmYXVsdDppZihlKXJldHVybjt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLGU9ITB9fSh0KTtpZigic3RyaW5nIiE9dHlwZW9mIGUmJihuLmlzRW5jb2Rpbmc9PT1pfHwhaSh0KSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3QpO3JldHVybiBlfHx0fSh0KSx0aGlzLmVuY29kaW5nKXtjYXNlInV0ZjE2bGUiOnRoaXMudGV4dD1sLHRoaXMuZW5kPWMsZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD1zLGU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PXUsdGhpcy5lbmQ9ZixlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1oLHZvaWQodGhpcy5lbmQ9cCl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1uLmFsbG9jVW5zYWZlKGUpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTEyNz8wOnQ+PjU9PTY/Mjp0Pj40PT0xND8zOnQ+PjM9PTMwPzQ6dD4+Nj09Mj8tMTotMn1mdW5jdGlvbiBzKHQpe3ZhciBlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQscj1mdW5jdGlvbih0LGUscil7aWYoMTI4IT0oMTkyJmVbMF0pKXJldHVybiB0Lmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYodC5sYXN0TmVlZD4xJiZlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImZVsxXSkpcmV0dXJuIHQubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZih0Lmxhc3ROZWVkPjImJmUubGVuZ3RoPjImJjEyOCE9KDE5MiZlWzJdKSlyZXR1cm4gdC5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyx0KTtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMubGFzdE5lZWQ8PXQubGVuZ3RoPyh0LmNvcHkodGhpcy5sYXN0Q2hhcixlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKToodC5jb3B5KHRoaXMubGFzdENoYXIsZSwwLHQubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPXQubGVuZ3RoKSl9ZnVuY3Rpb24gbCh0LGUpe2lmKCh0Lmxlbmd0aC1lKSUyPT0wKXt2YXIgcj10LnRvU3RyaW5nKCJ1dGYxNmxlIixlKTtpZihyKXt2YXIgbj1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXRbdC5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT10W3QubGVuZ3RoLTFdLHIuc2xpY2UoMCwtMSl9cmV0dXJuIHJ9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXSx0LnRvU3RyaW5nKCJ1dGYxNmxlIixlLHQubGVuZ3RoLTEpfWZ1bmN0aW9uIGModCl7dmFyIGU9dCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIjtpZih0aGlzLmxhc3ROZWVkKXt2YXIgcj10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkO3JldHVybiBlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAscil9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSh0Lmxlbmd0aC1lKSUzO3JldHVybiAwPT09cj90LnRvU3RyaW5nKCJiYXNlNjQiLGUpOih0aGlzLmxhc3ROZWVkPTMtcix0aGlzLmxhc3RUb3RhbD0zLDE9PT1yP3RoaXMubGFzdENoYXJbMF09dFt0Lmxlbmd0aC0xXToodGhpcy5sYXN0Q2hhclswXT10W3QubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09dFt0Lmxlbmd0aC0xXSksdC50b1N0cmluZygiYmFzZTY0IixlLHQubGVuZ3RoLXIpKX1mdW5jdGlvbiBmKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTplfWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCYmdC5sZW5ndGg/dGhpcy53cml0ZSh0KToiIn1yLlN0cmluZ0RlY29kZXI9YSxhLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0KXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIiI7dmFyIGUscjtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0oZT10aGlzLmZpbGxMYXN0KHQpKSlyZXR1cm4iIjtyPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2Ugcj0wO3JldHVybiByPHQubGVuZ3RoP2U/ZSt0aGlzLnRleHQodCxyKTp0aGlzLnRleHQodCxyKTplfHwiIn0sYS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJnQubGVuZ3RoP3RoaXMud3JpdGUodCk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/ZSsiXHVmZmZkIjplfSxhLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUubGVuZ3RoLTE7aWYobjxyKXJldHVybiAwO3ZhciBpPW8oZVtuXSk7aWYoaT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTEpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYodC5sYXN0TmVlZD1pLTIpLGk7aWYoLS1uPHJ8fC0yPT09aSlyZXR1cm4gMDtpZigoaT1vKGVbbl0pKT49MClyZXR1cm4gaT4wJiYoMj09PWk/aT0wOnQubGFzdE5lZWQ9aS0zKSxpO3JldHVybiAwfSh0aGlzLHQsZSk7aWYoIXRoaXMubGFzdE5lZWQpcmV0dXJuIHQudG9TdHJpbmcoInV0ZjgiLGUpO3RoaXMubGFzdFRvdGFsPXI7dmFyIG49dC5sZW5ndGgtKHItdGhpcy5sYXN0TmVlZCk7cmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLDAsbiksdC50b1N0cmluZygidXRmOCIsZSxuKX0sYS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24odCl7aWYodGhpcy5sYXN0TmVlZDw9dC5sZW5ndGgpcmV0dXJuIHQuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7dC5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHQubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT10Lmxlbmd0aH19LHsic2FmZS1idWZmZXIiOjUzMH1dLDU2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49bmV3IEFycmF5KGUpLGk9bmV3IEFycmF5KGUpLGE9bmV3IEFycmF5KGUpLG89bmV3IEFycmF5KGUpLHM9bmV3IEFycmF5KGUpLGw9MDtsPGU7KytsKXJbbF09LTEsbltsXT0wLGlbbF09ITEsYVtsXT0wLG9bbF09LTEsc1tsXT1bXTt2YXIgYyx1PTAsZj1bXSxoPVtdO2Z1bmN0aW9uIHAoZSl7dmFyIGw9W2VdLGM9W2VdO2ZvcihyW2VdPW5bZV09dSxpW2VdPSEwLHUrPTE7Yy5sZW5ndGg+MDspe2U9Y1tjLmxlbmd0aC0xXTt2YXIgcD10W2VdO2lmKGFbZV08cC5sZW5ndGgpe2Zvcih2YXIgZD1hW2VdO2Q8cC5sZW5ndGg7KytkKXt2YXIgbT1wW2RdO2lmKHJbbV08MCl7clttXT1uW21dPXUsaVttXT0hMCx1Kz0xLGwucHVzaChtKSxjLnB1c2gobSk7YnJlYWt9aVttXSYmKG5bZV09MHxNYXRoLm1pbihuW2VdLG5bbV0pKSxvW21dPj0wJiZzW2VdLnB1c2gob1ttXSl9YVtlXT1kfWVsc2V7aWYobltlXT09PXJbZV0pe3ZhciBnPVtdLHY9W10seT0wO2ZvcihkPWwubGVuZ3RoLTE7ZD49MDstLWQpe3ZhciB4PWxbZF07aWYoaVt4XT0hMSxnLnB1c2goeCksdi5wdXNoKHNbeF0pLHkrPXNbeF0ubGVuZ3RoLG9beF09Zi5sZW5ndGgseD09PWUpe2wubGVuZ3RoPWQ7YnJlYWt9fWYucHVzaChnKTt2YXIgYj1uZXcgQXJyYXkoeSk7Zm9yKGQ9MDtkPHYubGVuZ3RoO2QrKylmb3IodmFyIF89MDtfPHZbZF0ubGVuZ3RoO18rKyliWy0teV09dltkXVtfXTtoLnB1c2goYil9Yy5wb3AoKX19fWZvcihsPTA7bDxlOysrbClyW2xdPDAmJnAobCk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7dmFyIGQ9aFtsXTtpZigwIT09ZC5sZW5ndGgpe2Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGM9W2RbMF1dO2Zvcih2YXIgbT0xO208ZC5sZW5ndGg7bSsrKWRbbV0hPT1kW20tMV0mJmMucHVzaChkW21dKTtoW2xdPWN9fXJldHVybntjb21wb25lbnRzOmYsYWRqYWNlbmN5TGlzdDpofX19LHt9XSw1NjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYodC5kaW1lbnNpb248PTApcmV0dXJue3Bvc2l0aW9uczpbXSxjZWxsczpbXX07aWYoMT09PXQuZGltZW5zaW9uKXJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1pKHQsZSksbj1yLmxlbmd0aCxhPW5ldyBBcnJheShuKSxvPW5ldyBBcnJheShuKSxzPTA7czxuOysrcylhW3NdPVtyW3NdXSxvW3NdPVtzXTtyZXR1cm57cG9zaXRpb25zOmEsY2VsbHM6b319KHQsZSk7dmFyIHI9dC5vcmRlci5qb2luKCkrIi0iK3QuZHR5cGUscz1vW3JdO2U9K2V8fDA7c3x8KHM9b1tyXT1mdW5jdGlvbih0LGUpe3ZhciByPXQubGVuZ3RoKyJkIixpPWFbcl07aWYoaSlyZXR1cm4gaShuLHQsZSl9KHQub3JkZXIsdC5kdHlwZSkpO3JldHVybiBzKHQsZSl9O3ZhciBuPXQoIm5kYXJyYXktZXh0cmFjdC1jb250b3VyIiksaT10KCJ6ZXJvLWNyb3NzaW5ncyIpLGE9eyIyZCI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoe29yZGVyOmUsc2NhbGFyQXJndW1lbnRzOjMsZ2V0dGVyczoiZ2VuZXJpYyI9PT1yP1swXTp2b2lkIDAscGhhc2U6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQ+bnwwfSx2ZXJ0ZXg6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwsYyx1LGYsaCl7dmFyIHA9KG88PDApKyhzPDwxKSsobDw8MikrKGM8PDMpfDA7aWYoMCE9PXAmJjE1IT09cClzd2l0Y2gocCl7Y2FzZSAwOnUucHVzaChbdC0uNSxlLS41XSk7YnJlYWs7Y2FzZSAxOnUucHVzaChbdC0uMjUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAyOnUucHVzaChbdC0uNzUtLjI1Kigtbi1yKzIqaCkvKG4tciksZS0uMjUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgMzp1LnB1c2goW3QtLjUsZS0uNS0uNSooaStyK2Erbi00KmgpLyhyLWkrbi1hKV0pO2JyZWFrO2Nhc2UgNDp1LnB1c2goW3QtLjI1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KigtaS1yKzIqaCkvKGktcildKTticmVhaztjYXNlIDU6dS5wdXNoKFt0LS41LS41KihuK3IrYStpLTQqaCkvKHItbitpLWEpLGUtLjVdKTticmVhaztjYXNlIDY6dS5wdXNoKFt0LS41LS4yNSooLW4tcithK2kpLyhuLXIraS1hKSxlLS41LS4yNSooLWktcithK24pLyhpLXIrbi1hKV0pO2JyZWFrO2Nhc2UgNzp1LnB1c2goW3QtLjc1LS4yNSooYStpLTIqaCkvKGktYSksZS0uNzUtLjI1KihhK24tMipoKS8obi1hKV0pO2JyZWFrO2Nhc2UgODp1LnB1c2goW3QtLjc1LS4yNSooLWEtaSsyKmgpLyhhLWkpLGUtLjc1LS4yNSooLWEtbisyKmgpLyhhLW4pXSk7YnJlYWs7Y2FzZSA5OnUucHVzaChbdC0uNS0uMjUqKG4rcistYS1pKS8oci1uK2EtaSksZS0uNS0uMjUqKGkrcistYS1uKS8oci1pK2EtbildKTticmVhaztjYXNlIDEwOnUucHVzaChbdC0uNS0uNSooLW4tci1hLWkrNCpoKS8obi1yK2EtaSksZS0uNV0pO2JyZWFrO2Nhc2UgMTE6dS5wdXNoKFt0LS4yNS0uMjUqKC1hLWkrMipoKS8oYS1pKSxlLS43NS0uMjUqKGkrci0yKmgpLyhyLWkpXSk7YnJlYWs7Y2FzZSAxMjp1LnB1c2goW3QtLjUsZS0uNS0uNSooLWktci1hLW4rNCpoKS8oaS1yK2EtbildKTticmVhaztjYXNlIDEzOnUucHVzaChbdC0uNzUtLjI1KihuK3ItMipoKS8oci1uKSxlLS4yNS0uMjUqKC1hLW4rMipoKS8oYS1uKV0pO2JyZWFrO2Nhc2UgMTQ6dS5wdXNoKFt0LS4yNS0uMjUqKC1uLXIrMipoKS8obi1yKSxlLS4yNS0uMjUqKC1pLXIrMipoKS8oaS1yKV0pO2JyZWFrO2Nhc2UgMTU6dS5wdXNoKFt0LS41LGUtLjVdKX19LGNlbGw6ZnVuY3Rpb24odCxlLHIsbixpLGEsbyxzLGwpe2k/cy5wdXNoKFt0LGVdKTpzLnB1c2goW2UsdF0pfX0pO3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLGk9W107cmV0dXJuIG4odCxyLGksZSkse3Bvc2l0aW9uczpyLGNlbGxzOml9fX19O3ZhciBvPXt9fSx7Im5kYXJyYXktZXh0cmFjdC1jb250b3VyIjo0NTQsInplcm8tY3Jvc3NpbmdzIjo2MjB9XSw1NjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdDtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KHQpKXJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ITAsaT0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhZXx8ci5sZW5ndGghPT1lKTtuPSEwKTt9Y2F0Y2godCl7aT0hMCxhPXR9ZmluYWxseXt0cnl7IW4mJnMucmV0dXJuJiZzLnJldHVybigpfWZpbmFsbHl7aWYoaSl0aHJvdyBhfX1yZXR1cm4gcn0odCxlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9LGk9MipNYXRoLlBJLGE9ZnVuY3Rpb24odCxlLHIsbixpLGEsbyl7dmFyIHM9dC54LGw9dC55O3JldHVybnt4Om4qKHMqPWUpLWkqKGwqPXIpK2EseTppKnMrbipsK299fSxvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MS41NzA3OTYzMjY3OTQ4OTY2PT09ZT8uNTUxOTE1MDI0NDk0Oi0xLjU3MDc5NjMyNjc5NDg5NjY9PT1lPy0uNTUxOTE1MDI0NDk0OjQvMypNYXRoLnRhbihlLzQpLG49TWF0aC5jb3ModCksaT1NYXRoLnNpbih0KSxhPU1hdGguY29zKHQrZSksbz1NYXRoLnNpbih0K2UpO3JldHVyblt7eDpuLWkqcix5OmkrbipyfSx7eDphK28qcix5Om8tYSpyfSx7eDphLHk6b31dfSxzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQqcitlKm47cmV0dXJuIGk+MSYmKGk9MSksaTwtMSYmKGk9LTEpLCh0Km4tZSpyPDA/LTE6MSkqTWF0aC5hY29zKGkpfTtyLmRlZmF1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5weCxyPXQucHksbD10LmN4LGM9dC5jeSx1PXQucngsZj10LnJ5LGg9dC54QXhpc1JvdGF0aW9uLHA9dm9pZCAwPT09aD8wOmgsZD10LmxhcmdlQXJjRmxhZyxtPXZvaWQgMD09PWQ/MDpkLGc9dC5zd2VlcEZsYWcsdj12b2lkIDA9PT1nPzA6Zyx5PVtdO2lmKDA9PT11fHwwPT09ZilyZXR1cm5bXTt2YXIgeD1NYXRoLnNpbihwKmkvMzYwKSxiPU1hdGguY29zKHAqaS8zNjApLF89YiooZS1sKS8yK3gqKHItYykvMix3PS14KihlLWwpLzIrYiooci1jKS8yO2lmKDA9PT1fJiYwPT09dylyZXR1cm5bXTt1PU1hdGguYWJzKHUpLGY9TWF0aC5hYnMoZik7dmFyIFQ9TWF0aC5wb3coXywyKS9NYXRoLnBvdyh1LDIpK01hdGgucG93KHcsMikvTWF0aC5wb3coZiwyKTtUPjEmJih1Kj1NYXRoLnNxcnQoVCksZio9TWF0aC5zcXJ0KFQpKTt2YXIgaz1mdW5jdGlvbih0LGUscixuLGEsbyxsLGMsdSxmLGgscCl7dmFyIGQ9TWF0aC5wb3coYSwyKSxtPU1hdGgucG93KG8sMiksZz1NYXRoLnBvdyhoLDIpLHY9TWF0aC5wb3cocCwyKSx5PWQqbS1kKnYtbSpnO3k8MCYmKHk9MCkseS89ZCp2K20qZzt2YXIgeD0oeT1NYXRoLnNxcnQoeSkqKGw9PT1jPy0xOjEpKSphL28qcCxiPXkqLW8vYSpoLF89Zip4LXUqYisodCtyKS8yLHc9dSp4K2YqYisoZStuKS8yLFQ9KGgteCkvYSxrPShwLWIpL28sQT0oLWgteCkvYSxNPSgtcC1iKS9vLFM9cygxLDAsVCxrKSxFPXMoVCxrLEEsTSk7cmV0dXJuIDA9PT1jJiZFPjAmJihFLT1pKSwxPT09YyYmRTwwJiYoRSs9aSksW18sdyxTLEVdfShlLHIsbCxjLHUsZixtLHYseCxiLF8sdyksQT1uKGssNCksTT1BWzBdLFM9QVsxXSxFPUFbMl0sTD1BWzNdLEM9TWF0aC5hYnMoTCkvKGkvNCk7TWF0aC5hYnMoMS1DKTwxZS03JiYoQz0xKTt2YXIgUD1NYXRoLm1heChNYXRoLmNlaWwoQyksMSk7TC89UDtmb3IodmFyIEk9MDtJPFA7SSsrKXkucHVzaChvKEUsTCkpLEUrPUw7cmV0dXJuIHkubWFwKChmdW5jdGlvbih0KXt2YXIgZT1hKHRbMF0sdSxmLGIseCxNLFMpLHI9ZS54LG49ZS55LGk9YSh0WzFdLHUsZixiLHgsTSxTKSxvPWkueCxzPWkueSxsPWEodFsyXSx1LGYsYix4LE0sUyk7cmV0dXJue3gxOnIseTE6bix4MjpvLHkyOnMseDpsLngseTpsLnl9fSkpfSxlLmV4cG9ydHM9ci5kZWZhdWx0fSx7fV0sNTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCJhYnMtc3ZnLXBhdGgiKSxhPXQoIm5vcm1hbGl6ZS1zdmctcGF0aCIpLG89dCgiaXMtc3ZnLXBhdGgiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7QXJyYXkuaXNBcnJheSh0KSYmMT09PXQubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJih0PXRbMF0pO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYoIW8odCkpdGhyb3cgRXJyb3IoIlN0cmluZyBpcyBub3QgYW4gU1ZHIHBhdGguIik7dD1uKHQpfWlmKCFBcnJheS5pc0FycmF5KHQpKXRocm93IEVycm9yKCJBcmd1bWVudCBzaG91bGQgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2YgcGF0aCBzZWdtZW50cy4iKTtpZih0PWkodCksISh0PWEodCkpLmxlbmd0aClyZXR1cm5bMCwwLDAsMF07Zm9yKHZhciBlPVsxLzAsMS8wLC0xLzAsLTEvMF0scj0wLHM9dC5sZW5ndGg7cjxzO3IrKylmb3IodmFyIGw9dFtyXS5zbGljZSgxKSxjPTA7YzxsLmxlbmd0aDtjKz0yKWxbYyswXTxlWzBdJiYoZVswXT1sW2MrMF0pLGxbYysxXTxlWzFdJiYoZVsxXT1sW2MrMV0pLGxbYyswXT5lWzJdJiYoZVsyXT1sW2MrMF0pLGxbYysxXT5lWzNdJiYoZVszXT1sW2MrMV0pO3JldHVybiBlfX0seyJhYnMtc3ZnLXBhdGgiOjY3LCJpcy1zdmctcGF0aCI6NDM5LCJub3JtYWxpemUtc3ZnLXBhdGgiOjU2OCwicGFyc2Utc3ZnLXBhdGgiOjQ3Mn1dLDU2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9W10sbz0wLHM9MCxsPTAsYz0wLHU9bnVsbCxmPW51bGwsaD0wLHA9MCxkPTAsbT10Lmxlbmd0aDtkPG07ZCsrKXt2YXIgZz10W2RdLHY9Z1swXTtzd2l0Y2godil7Y2FzZSJNIjpsPWdbMV0sYz1nWzJdO2JyZWFrO2Nhc2UiQSI6dmFyIHk9bih7cHg6aCxweTpwLGN4OmdbNl0sY3k6Z1s3XSxyeDpnWzFdLHJ5OmdbMl0seEF4aXNSb3RhdGlvbjpnWzNdLGxhcmdlQXJjRmxhZzpnWzRdLHN3ZWVwRmxhZzpnWzVdfSk7aWYoIXkubGVuZ3RoKWNvbnRpbnVlO2Zvcih2YXIgeCxiPTA7Yjx5Lmxlbmd0aDtiKyspeD15W2JdLGc9WyJDIix4LngxLHgueTEseC54Mix4LnkyLHgueCx4LnldLGI8eS5sZW5ndGgtMSYmci5wdXNoKGcpO2JyZWFrO2Nhc2UiUyI6dmFyIF89aCx3PXA7IkMiIT1lJiYiUyIhPWV8fChfKz1fLW8sdys9dy1zKSxnPVsiQyIsXyx3LGdbMV0sZ1syXSxnWzNdLGdbNF1dO2JyZWFrO2Nhc2UiVCI6IlEiPT1lfHwiVCI9PWU/KHU9MipoLXUsZj0yKnAtZik6KHU9aCxmPXApLGc9YShoLHAsdSxmLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJRIjp1PWdbMV0sZj1nWzJdLGc9YShoLHAsZ1sxXSxnWzJdLGdbM10sZ1s0XSk7YnJlYWs7Y2FzZSJMIjpnPWkoaCxwLGdbMV0sZ1syXSk7YnJlYWs7Y2FzZSJIIjpnPWkoaCxwLGdbMV0scCk7YnJlYWs7Y2FzZSJWIjpnPWkoaCxwLGgsZ1sxXSk7YnJlYWs7Y2FzZSJaIjpnPWkoaCxwLGwsYyl9ZT12LGg9Z1tnLmxlbmd0aC0yXSxwPWdbZy5sZW5ndGgtMV0sZy5sZW5ndGg+ND8obz1nW2cubGVuZ3RoLTRdLHM9Z1tnLmxlbmd0aC0zXSk6KG89aCxzPXApLHIucHVzaChnKX1yZXR1cm4gcn07dmFyIG49dCgic3ZnLWFyYy10by1jdWJpYy1iZXppZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVyblsiQyIsdCxlLHIsbixyLG5dfWZ1bmN0aW9uIGEodCxlLHIsbixpLGEpe3JldHVyblsiQyIsdC8zKzIvMypyLGUvMysyLzMqbixpLzMrMi8zKnIsYS8zKzIvMypuLGksYV19fSx7InN2Zy1hcmMtdG8tY3ViaWMtYmV6aWVyIjo1NjZ9XSw1Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCJzdmctcGF0aC1ib3VuZHMiKSxhPXQoInBhcnNlLXN2Zy1wYXRoIiksbz10KCJkcmF3LXN2Zy1wYXRoIikscz10KCJpcy1zdmctcGF0aCIpLGw9dCgiYml0bWFwLXNkZiIpLGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksdT1jLmdldENvbnRleHQoIjJkIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIXModCkpdGhyb3cgRXJyb3IoIkFyZ3VtZW50IHNob3VsZCBiZSB2YWxpZCBzdmcgcGF0aCBzdHJpbmciKTtlfHwoZT17fSk7dmFyIHIsZjtlLnNoYXBlPyhyPWUuc2hhcGVbMF0sZj1lLnNoYXBlWzFdKToocj1jLndpZHRoPWUud3x8ZS53aWR0aHx8MjAwLGY9Yy5oZWlnaHQ9ZS5ofHxlLmhlaWdodHx8MjAwKTt2YXIgaD1NYXRoLm1pbihyLGYpLHA9ZS5zdHJva2V8fDAsZD1lLnZpZXdib3h8fGUudmlld0JveHx8aSh0KSxtPVtyLyhkWzJdLWRbMF0pLGYvKGRbM10tZFsxXSldLGc9TWF0aC5taW4obVswXXx8MCxtWzFdfHwwKS8yO3UuZmlsbFN0eWxlPSJibGFjayIsdS5maWxsUmVjdCgwLDAscixmKSx1LmZpbGxTdHlsZT0id2hpdGUiLHAmJigibnVtYmVyIiE9dHlwZW9mIHAmJihwPTEpLHUuc3Ryb2tlU3R5bGU9cD4wPyJ3aGl0ZSI6ImJsYWNrIix1LmxpbmVXaWR0aD1NYXRoLmFicyhwKSk7aWYodS50cmFuc2xhdGUoLjUqciwuNSpmKSx1LnNjYWxlKGcsZyksZnVuY3Rpb24oKXtpZihudWxsIT1uKXJldHVybiBuO3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIik7aWYodC5jYW52YXMud2lkdGg9dC5jYW52YXMuaGVpZ2h0PTEsIXdpbmRvdy5QYXRoMkQpcmV0dXJuIG49ITE7dmFyIGU9bmV3IFBhdGgyRCgiTTAsMGgxdjFoLTF2LTFaIik7dC5maWxsU3R5bGU9ImJsYWNrIix0LmZpbGwoZSk7dmFyIHI9dC5nZXRJbWFnZURhdGEoMCwwLDEsMSk7cmV0dXJuIG49ciYmci5kYXRhJiYyNTU9PT1yLmRhdGFbM119KCkpe3ZhciB2PW5ldyBQYXRoMkQodCk7dS5maWxsKHYpLHAmJnUuc3Ryb2tlKHYpfWVsc2V7dmFyIHk9YSh0KTtvKHUseSksdS5maWxsKCkscCYmdS5zdHJva2UoKX1yZXR1cm4gdS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLGwodSx7Y3V0b2ZmOm51bGwhPWUuY3V0b2ZmP2UuY3V0b2ZmOi41LHJhZGl1czpudWxsIT1lLnJhZGl1cz9lLnJhZGl1czouNSpofSl9fSx7ImJpdG1hcC1zZGYiOjEwMiwiZHJhdy1zdmctcGF0aCI6MTc1LCJpcy1zdmctcGF0aCI6NDM5LCJwYXJzZS1zdmctcGF0aCI6NDcyLCJzdmctcGF0aC1ib3VuZHMiOjU2N31dLDU3MDpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihyKXsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uIHQoZSxyLGkpe2k9aXx8e307dmFyIG89YVtlXTtvfHwobz1hW2VdPXsiICI6e2RhdGE6bmV3IEZsb2F0MzJBcnJheSgwKSxzaGFwZTouMn19KTt2YXIgcz1vW3JdO2lmKCFzKWlmKHIubGVuZ3RoPD0xfHwhL1xkLy50ZXN0KHIpKXM9b1tyXT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jZWxscyxyPXQucG9zaXRpb25zLG49bmV3IEZsb2F0MzJBcnJheSg2KmUubGVuZ3RoKSxpPTAsYT0wLG89MDtvPGUubGVuZ3RoOysrbylmb3IodmFyIHM9ZVtvXSxsPTA7bDwzOysrbCl7dmFyIGM9cltzW2xdXTtuW2krK109Y1swXSxuW2krK109Y1sxXSsxLjQsYT1NYXRoLm1heChjWzBdLGEpfXJldHVybntkYXRhOm4sc2hhcGU6YX19KG4ocix7dHJpYW5nbGVzOiEwLGZvbnQ6ZSx0ZXh0QWxpZ246aS50ZXh0QWxpZ258fCJsZWZ0Iix0ZXh0QmFzZWxpbmU6ImFscGhhYmV0aWMiLHN0eWxldGFnczp7YnJlYWtsaW5lczohMCxib2xkczohMCxpdGFsaWNzOiEwLHN1YnNjcmlwdHM6ITAsc3VwZXJzY3JpcHRzOiEwfX0pKTtlbHNle2Zvcih2YXIgbD1yLnNwbGl0KC8oXGR8XHMpLyksYz1uZXcgQXJyYXkobC5sZW5ndGgpLHU9MCxmPTAsaD0wO2g8bC5sZW5ndGg7KytoKWNbaF09dChlLGxbaF0pLHUrPWNbaF0uZGF0YS5sZW5ndGgsZis9Y1toXS5zaGFwZSxoPjAmJihmKz0uMDIpO3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkodSksZD0wLG09LS41KmY7Zm9yKGg9MDtoPGMubGVuZ3RoOysraCl7Zm9yKHZhciBnPWNbaF0uZGF0YSx2PTA7djxnLmxlbmd0aDt2Kz0yKXBbZCsrXT1nW3ZdK20scFtkKytdPWdbdisxXTttKz1jW2hdLnNoYXBlKy4wMn1zPW9bcl09e2RhdGE6cCxzaGFwZTpmfX1yZXR1cm4gc307dmFyIG49dCgidmVjdG9yaXplLXRleHQiKSxpPXdpbmRvd3x8ci5nbG9iYWx8fHt9LGE9aS5fX1RFWFRfQ0FDSEV8fHt9O2kuX19URVhUX0NBQ0hFPXt9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJfcHJvY2VzcyIpKX0se19wcm9jZXNzOjUwNCwidmVjdG9yaXplLXRleHQiOjU5Nn1dLDU3MTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlLG4peyhmdW5jdGlvbigpe3ZhciBpPXQoInByb2Nlc3MvYnJvd3Nlci5qcyIpLm5leHRUaWNrLGE9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LG89QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9e30sbD0wO2Z1bmN0aW9uIGModCxlKXt0aGlzLl9pZD10LHRoaXMuX2NsZWFyRm49ZX1yLnNldFRpbWVvdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGMoYS5jYWxsKHNldFRpbWVvdXQsd2luZG93LGFyZ3VtZW50cyksY2xlYXJUaW1lb3V0KX0sci5zZXRJbnRlcnZhbD1mdW5jdGlvbigpe3JldHVybiBuZXcgYyhhLmNhbGwoc2V0SW50ZXJ2YWwsd2luZG93LGFyZ3VtZW50cyksY2xlYXJJbnRlcnZhbCl9LHIuY2xlYXJUaW1lb3V0PXIuY2xlYXJJbnRlcnZhbD1mdW5jdGlvbih0KXt0LmNsb3NlKCl9LGMucHJvdG90eXBlLnVucmVmPWMucHJvdG90eXBlLnJlZj1mdW5jdGlvbigpe30sYy5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oKXt0aGlzLl9jbGVhckZuLmNhbGwod2luZG93LHRoaXMuX2lkKX0sci5lbnJvbGw9ZnVuY3Rpb24odCxlKXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9ZX0sci51bmVucm9sbD1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCksdC5faWRsZVRpbWVvdXQ9LTF9LHIuX3VucmVmQWN0aXZlPXIuYWN0aXZlPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKTt2YXIgZT10Ll9pZGxlVGltZW91dDtlPj0wJiYodC5faWRsZVRpbWVvdXRJZD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX29uVGltZW91dCYmdC5fb25UaW1lb3V0KCl9KSxlKSl9LHIuc2V0SW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6ZnVuY3Rpb24odCl7dmFyIGU9bCsrLG49IShhcmd1bWVudHMubGVuZ3RoPDIpJiZvLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBzW2VdPSEwLGkoKGZ1bmN0aW9uKCl7c1tlXSYmKG4/dC5hcHBseShudWxsLG4pOnQuY2FsbChudWxsKSxyLmNsZWFySW1tZWRpYXRlKGUpKX0pKSxlfSxyLmNsZWFySW1tZWRpYXRlPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24odCl7ZGVsZXRlIHNbdF19fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcyx0KCJ0aW1lcnMiKS5zZXRJbW1lZGlhdGUsdCgidGltZXJzIikuY2xlYXJJbW1lZGlhdGUpfSx7InByb2Nlc3MvYnJvd3Nlci5qcyI6NTA0LHRpbWVyczo1NzF9XSw1NzI6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7dmFyIHI9L15ccysvLG49L1xzKyQvLGk9MCxhPXQucm91bmQsbz10Lm1pbixzPXQubWF4LGw9dC5yYW5kb207ZnVuY3Rpb24gYyhlLGwpe2lmKGw9bHx8e30sKGU9ZXx8IiIpaW5zdGFuY2VvZiBjKXJldHVybiBlO2lmKCEodGhpcyBpbnN0YW5jZW9mIGMpKXJldHVybiBuZXcgYyhlLGwpO3ZhciB1PWZ1bmN0aW9uKGUpe3ZhciBpPXtyOjAsZzowLGI6MH0sYT0xLGw9bnVsbCxjPW51bGwsdT1udWxsLGY9ITEsaD0hMTsic3RyaW5nIj09dHlwZW9mIGUmJihlPWZ1bmN0aW9uKHQpe3Q9dC5yZXBsYWNlKHIsIiIpLnJlcGxhY2UobiwiIikudG9Mb3dlckNhc2UoKTt2YXIgZSxpPSExO2lmKFNbdF0pdD1TW3RdLGk9ITA7ZWxzZSBpZigidHJhbnNwYXJlbnQiPT10KXJldHVybntyOjAsZzowLGI6MCxhOjAsZm9ybWF0OiJuYW1lIn07aWYoZT1qLnJnYi5leGVjKHQpKXJldHVybntyOmVbMV0sZzplWzJdLGI6ZVszXX07aWYoZT1qLnJnYmEuZXhlYyh0KSlyZXR1cm57cjplWzFdLGc6ZVsyXSxiOmVbM10sYTplWzRdfTtpZihlPWouaHNsLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sbDplWzNdfTtpZihlPWouaHNsYS5leGVjKHQpKXJldHVybntoOmVbMV0sczplWzJdLGw6ZVszXSxhOmVbNF19O2lmKGU9ai5oc3YuZXhlYyh0KSlyZXR1cm57aDplWzFdLHM6ZVsyXSx2OmVbM119O2lmKGU9ai5oc3ZhLmV4ZWModCkpcmV0dXJue2g6ZVsxXSxzOmVbMl0sdjplWzNdLGE6ZVs0XX07aWYoZT1qLmhleDguZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0pLGc6SShlWzJdKSxiOkkoZVszXSksYTpSKGVbNF0pLGZvcm1hdDppPyJuYW1lIjoiaGV4OCJ9O2lmKGU9ai5oZXg2LmV4ZWModCkpcmV0dXJue3I6SShlWzFdKSxnOkkoZVsyXSksYjpJKGVbM10pLGZvcm1hdDppPyJuYW1lIjoiaGV4In07aWYoZT1qLmhleDQuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksYTpSKGVbNF0rIiIrZVs0XSksZm9ybWF0Omk/Im5hbWUiOiJoZXg4In07aWYoZT1qLmhleDMuZXhlYyh0KSlyZXR1cm57cjpJKGVbMV0rIiIrZVsxXSksZzpJKGVbMl0rIiIrZVsyXSksYjpJKGVbM10rIiIrZVszXSksZm9ybWF0Omk/Im5hbWUiOiJoZXgifTtyZXR1cm4hMX0oZSkpOyJvYmplY3QiPT10eXBlb2YgZSYmKFUoZS5yKSYmVShlLmcpJiZVKGUuYik/KHA9ZS5yLGQ9ZS5nLG09ZS5iLGk9e3I6MjU1KkMocCwyNTUpLGc6MjU1KkMoZCwyNTUpLGI6MjU1KkMobSwyNTUpfSxmPSEwLGg9IiUiPT09U3RyaW5nKGUucikuc3Vic3RyKC0xKT8icHJnYiI6InJnYiIpOlUoZS5oKSYmVShlLnMpJiZVKGUudik/KGw9eihlLnMpLGM9eihlLnYpLGk9ZnVuY3Rpb24oZSxyLG4pe2U9NipDKGUsMzYwKSxyPUMociwxMDApLG49QyhuLDEwMCk7dmFyIGk9dC5mbG9vcihlKSxhPWUtaSxvPW4qKDEtcikscz1uKigxLWEqciksbD1uKigxLSgxLWEpKnIpLGM9aSU2O3JldHVybntyOjI1NSpbbixzLG8sbyxsLG5dW2NdLGc6MjU1KltsLG4sbixzLG8sb11bY10sYjoyNTUqW28sbyxsLG4sbixzXVtjXX19KGUuaCxsLGMpLGY9ITAsaD0iaHN2Iik6VShlLmgpJiZVKGUucykmJlUoZS5sKSYmKGw9eihlLnMpLHU9eihlLmwpLGk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gcjwwJiYocis9MSkscj4xJiYoci09MSkscjwxLzY/dCs2KihlLXQpKnI6cjwuNT9lOnI8Mi8zP3QrKGUtdCkqKDIvMy1yKSo2OnR9aWYodD1DKHQsMzYwKSxlPUMoZSwxMDApLHI9QyhyLDEwMCksMD09PWUpbj1pPWE9cjtlbHNle3ZhciBzPXI8LjU/ciooMStlKTpyK2UtciplLGw9MipyLXM7bj1vKGwscyx0KzEvMyksaT1vKGwscyx0KSxhPW8obCxzLHQtMS8zKX1yZXR1cm57cjoyNTUqbixnOjI1NSppLGI6MjU1KmF9fShlLmgsbCx1KSxmPSEwLGg9ImhzbCIpLGUuaGFzT3duUHJvcGVydHkoImEiKSYmKGE9ZS5hKSk7dmFyIHAsZCxtO3JldHVybiBhPUwoYSkse29rOmYsZm9ybWF0OmUuZm9ybWF0fHxoLHI6bygyNTUscyhpLnIsMCkpLGc6bygyNTUscyhpLmcsMCkpLGI6bygyNTUscyhpLmIsMCkpLGE6YX19KGUpO3RoaXMuX29yaWdpbmFsSW5wdXQ9ZSx0aGlzLl9yPXUucix0aGlzLl9nPXUuZyx0aGlzLl9iPXUuYix0aGlzLl9hPXUuYSx0aGlzLl9yb3VuZEE9YSgxMDAqdGhpcy5fYSkvMTAwLHRoaXMuX2Zvcm1hdD1sLmZvcm1hdHx8dS5mb3JtYXQsdGhpcy5fZ3JhZGllbnRUeXBlPWwuZ3JhZGllbnRUeXBlLHRoaXMuX3I8MSYmKHRoaXMuX3I9YSh0aGlzLl9yKSksdGhpcy5fZzwxJiYodGhpcy5fZz1hKHRoaXMuX2cpKSx0aGlzLl9iPDEmJih0aGlzLl9iPWEodGhpcy5fYikpLHRoaXMuX29rPXUub2ssdGhpcy5fdGNfaWQ9aSsrfWZ1bmN0aW9uIHUodCxlLHIpe3Q9Qyh0LDI1NSksZT1DKGUsMjU1KSxyPUMociwyNTUpO3ZhciBuLGksYT1zKHQsZSxyKSxsPW8odCxlLHIpLGM9KGErbCkvMjtpZihhPT1sKW49aT0wO2Vsc2V7dmFyIHU9YS1sO3N3aXRjaChpPWM+LjU/dS8oMi1hLWwpOnUvKGErbCksYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLGw6Y319ZnVuY3Rpb24gZih0LGUscil7dD1DKHQsMjU1KSxlPUMoZSwyNTUpLHI9QyhyLDI1NSk7dmFyIG4saSxhPXModCxlLHIpLGw9byh0LGUsciksYz1hLHU9YS1sO2lmKGk9MD09PWE/MDp1L2EsYT09bCluPTA7ZWxzZXtzd2l0Y2goYSl7Y2FzZSB0Om49KGUtcikvdSsoZTxyPzY6MCk7YnJlYWs7Y2FzZSBlOm49KHItdCkvdSsyO2JyZWFrO2Nhc2UgcjpuPSh0LWUpL3UrNH1uLz02fXJldHVybntoOm4sczppLHY6Y319ZnVuY3Rpb24gaCh0LGUscixuKXt2YXIgaT1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSldO3JldHVybiBuJiZpWzBdLmNoYXJBdCgwKT09aVswXS5jaGFyQXQoMSkmJmlbMV0uY2hhckF0KDApPT1pWzFdLmNoYXJBdCgxKSYmaVsyXS5jaGFyQXQoMCk9PWlbMl0uY2hhckF0KDEpP2lbMF0uY2hhckF0KDApK2lbMV0uY2hhckF0KDApK2lbMl0uY2hhckF0KDApOmkuam9pbigiIil9ZnVuY3Rpb24gcCh0LGUscixuKXtyZXR1cm5bTyhEKG4pKSxPKGEodCkudG9TdHJpbmcoMTYpKSxPKGEoZSkudG9TdHJpbmcoMTYpKSxPKGEocikudG9TdHJpbmcoMTYpKV0uam9pbigiIil9ZnVuY3Rpb24gZCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIucy09ZS8xMDAsci5zPVAoci5zKSxjKHIpfWZ1bmN0aW9uIG0odCxlKXtlPTA9PT1lPzA6ZXx8MTA7dmFyIHI9Yyh0KS50b0hzbCgpO3JldHVybiByLnMrPWUvMTAwLHIucz1QKHIucyksYyhyKX1mdW5jdGlvbiBnKHQpe3JldHVybiBjKHQpLmRlc2F0dXJhdGUoMTAwKX1mdW5jdGlvbiB2KHQsZSl7ZT0wPT09ZT8wOmV8fDEwO3ZhciByPWModCkudG9Ic2woKTtyZXR1cm4gci5sKz1lLzEwMCxyLmw9UChyLmwpLGMocil9ZnVuY3Rpb24geSh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvUmdiKCk7cmV0dXJuIHIucj1zKDAsbygyNTUsci5yLWEoLWUvMTAwKjI1NSkpKSxyLmc9cygwLG8oMjU1LHIuZy1hKC1lLzEwMCoyNTUpKSksci5iPXMoMCxvKDI1NSxyLmItYSgtZS8xMDAqMjU1KSkpLGMocil9ZnVuY3Rpb24geCh0LGUpe2U9MD09PWU/MDplfHwxMDt2YXIgcj1jKHQpLnRvSHNsKCk7cmV0dXJuIHIubC09ZS8xMDAsci5sPVAoci5sKSxjKHIpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1jKHQpLnRvSHNsKCksbj0oci5oK2UpJTM2MDtyZXR1cm4gci5oPW48MD8zNjArbjpuLGMocil9ZnVuY3Rpb24gXyh0KXt2YXIgZT1jKHQpLnRvSHNsKCk7cmV0dXJuIGUuaD0oZS5oKzE4MCklMzYwLGMoZSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocisxMjApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjQwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gVCh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis5MCklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisxODApJTM2MCxzOmUucyxsOmUubH0pLGMoe2g6KHIrMjcwKSUzNjAsczplLnMsbDplLmx9KV19ZnVuY3Rpb24gayh0KXt2YXIgZT1jKHQpLnRvSHNsKCkscj1lLmg7cmV0dXJuW2ModCksYyh7aDoocis3MiklMzYwLHM6ZS5zLGw6ZS5sfSksYyh7aDoocisyMTYpJTM2MCxzOmUucyxsOmUubH0pXX1mdW5jdGlvbiBBKHQsZSxyKXtlPWV8fDYscj1yfHwzMDt2YXIgbj1jKHQpLnRvSHNsKCksaT0zNjAvcixhPVtjKHQpXTtmb3Iobi5oPShuLmgtKGkqZT4+MSkrNzIwKSUzNjA7LS1lOyluLmg9KG4uaCtpKSUzNjAsYS5wdXNoKGMobikpO3JldHVybiBhfWZ1bmN0aW9uIE0odCxlKXtlPWV8fDY7Zm9yKHZhciByPWModCkudG9Ic3YoKSxuPXIuaCxpPXIucyxhPXIudixvPVtdLHM9MS9lO2UtLTspby5wdXNoKGMoe2g6bixzOmksdjphfSkpLGE9KGErcyklMTtyZXR1cm4gb31jLnByb3RvdHlwZT17aXNEYXJrOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnJpZ2h0bmVzcygpPDEyOH0saXNMaWdodDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmlzRGFyaygpfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29rfSxnZXRPcmlnaW5hbElucHV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWdpbmFsSW5wdXR9LGdldEZvcm1hdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9mb3JtYXR9LGdldEFscGhhOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F9LGdldEJyaWdodG5lc3M6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRvUmdiKCk7cmV0dXJuKDI5OSp0LnIrNTg3KnQuZysxMTQqdC5iKS8xZTN9LGdldEx1bWluYW5jZTpmdW5jdGlvbigpe3ZhciBlLHIsbixpPXRoaXMudG9SZ2IoKTtyZXR1cm4gZT1pLnIvMjU1LHI9aS5nLzI1NSxuPWkuYi8yNTUsLjIxMjYqKGU8PS4wMzkyOD9lLzEyLjkyOnQucG93KChlKy4wNTUpLzEuMDU1LDIuNCkpKy43MTUyKihyPD0uMDM5Mjg/ci8xMi45Mjp0LnBvdygocisuMDU1KS8xLjA1NSwyLjQpKSsuMDcyMioobjw9LjAzOTI4P24vMTIuOTI6dC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KSl9LHNldEFscGhhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hPUwodCksdGhpcy5fcm91bmRBPWEoMTAwKnRoaXMuX2EpLzEwMCx0aGlzfSx0b0hzdjpmdW5jdGlvbigpe3ZhciB0PWYodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsdjp0LnYsYTp0aGlzLl9hfX0sdG9Ic3ZTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD1mKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC52KTtyZXR1cm4gMT09dGhpcy5fYT8iaHN2KCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc3ZhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hzbDpmdW5jdGlvbigpe3ZhciB0PXUodGhpcy5fcix0aGlzLl9nLHRoaXMuX2IpO3JldHVybntoOjM2MCp0Lmgsczp0LnMsbDp0LmwsYTp0aGlzLl9hfX0sdG9Ic2xTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgdD11KHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iKSxlPWEoMzYwKnQuaCkscj1hKDEwMCp0LnMpLG49YSgxMDAqdC5sKTtyZXR1cm4gMT09dGhpcy5fYT8iaHNsKCIrZSsiLCAiK3IrIiUsICIrbisiJSkiOiJoc2xhKCIrZSsiLCAiK3IrIiUsICIrbisiJSwgIit0aGlzLl9yb3VuZEErIikifSx0b0hleDpmdW5jdGlvbih0KXtyZXR1cm4gaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYix0KX0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24odCl7cmV0dXJuIiMiK3RoaXMudG9IZXgodCl9LHRvSGV4ODpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1bTyhhKHQpLnRvU3RyaW5nKDE2KSksTyhhKGUpLnRvU3RyaW5nKDE2KSksTyhhKHIpLnRvU3RyaW5nKDE2KSksTyhEKG4pKV07aWYoaSYmb1swXS5jaGFyQXQoMCk9PW9bMF0uY2hhckF0KDEpJiZvWzFdLmNoYXJBdCgwKT09b1sxXS5jaGFyQXQoMSkmJm9bMl0uY2hhckF0KDApPT1vWzJdLmNoYXJBdCgxKSYmb1szXS5jaGFyQXQoMCk9PW9bM10uY2hhckF0KDEpKXJldHVybiBvWzBdLmNoYXJBdCgwKStvWzFdLmNoYXJBdCgwKStvWzJdLmNoYXJBdCgwKStvWzNdLmNoYXJBdCgwKTtyZXR1cm4gby5qb2luKCIiKX0odGhpcy5fcix0aGlzLl9nLHRoaXMuX2IsdGhpcy5fYSx0KX0sdG9IZXg4U3RyaW5nOmZ1bmN0aW9uKHQpe3JldHVybiIjIit0aGlzLnRvSGV4OCh0KX0sdG9SZ2I6ZnVuY3Rpb24oKXtyZXR1cm57cjphKHRoaXMuX3IpLGc6YSh0aGlzLl9nKSxiOmEodGhpcy5fYiksYTp0aGlzLl9hfX0sdG9SZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSh0aGlzLl9yKSsiLCAiK2EodGhpcy5fZykrIiwgIithKHRoaXMuX2IpKyIpIjoicmdiYSgiK2EodGhpcy5fcikrIiwgIithKHRoaXMuX2cpKyIsICIrYSh0aGlzLl9iKSsiLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvUGVyY2VudGFnZVJnYjpmdW5jdGlvbigpe3JldHVybntyOmEoMTAwKkModGhpcy5fciwyNTUpKSsiJSIsZzphKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUiLGI6YSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlIixhOnRoaXMuX2F9fSx0b1BlcmNlbnRhZ2VSZ2JTdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5fYT8icmdiKCIrYSgxMDAqQyh0aGlzLl9yLDI1NSkpKyIlLCAiK2EoMTAwKkModGhpcy5fZywyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2IsMjU1KSkrIiUpIjoicmdiYSgiK2EoMTAwKkModGhpcy5fciwyNTUpKSsiJSwgIithKDEwMCpDKHRoaXMuX2csMjU1KSkrIiUsICIrYSgxMDAqQyh0aGlzLl9iLDI1NSkpKyIlLCAiK3RoaXMuX3JvdW5kQSsiKSJ9LHRvTmFtZTpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fYT8idHJhbnNwYXJlbnQiOiEodGhpcy5fYTwxKSYmKEVbaCh0aGlzLl9yLHRoaXMuX2csdGhpcy5fYiwhMCldfHwhMSl9LHRvRmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPSIjIitwKHRoaXMuX3IsdGhpcy5fZyx0aGlzLl9iLHRoaXMuX2EpLHI9ZSxuPXRoaXMuX2dyYWRpZW50VHlwZT8iR3JhZGllbnRUeXBlID0gMSwgIjoiIjtpZih0KXt2YXIgaT1jKHQpO3I9IiMiK3AoaS5fcixpLl9nLGkuX2IsaS5fYSl9cmV0dXJuInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudCgiK24rInN0YXJ0Q29sb3JzdHI9IitlKyIsZW5kQ29sb3JzdHI9IityKyIpIn0sdG9TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9ISF0O3Q9dHx8dGhpcy5fZm9ybWF0O3ZhciByPSExLG49dGhpcy5fYTwxJiZ0aGlzLl9hPj0wO3JldHVybiBlfHwhbnx8ImhleCIhPT10JiYiaGV4NiIhPT10JiYiaGV4MyIhPT10JiYiaGV4NCIhPT10JiYiaGV4OCIhPT10JiYibmFtZSIhPT10PygicmdiIj09PXQmJihyPXRoaXMudG9SZ2JTdHJpbmcoKSksInByZ2IiPT09dCYmKHI9dGhpcy50b1BlcmNlbnRhZ2VSZ2JTdHJpbmcoKSksImhleCIhPT10JiYiaGV4NiIhPT10fHwocj10aGlzLnRvSGV4U3RyaW5nKCkpLCJoZXgzIj09PXQmJihyPXRoaXMudG9IZXhTdHJpbmcoITApKSwiaGV4NCI9PT10JiYocj10aGlzLnRvSGV4OFN0cmluZyghMCkpLCJoZXg4Ij09PXQmJihyPXRoaXMudG9IZXg4U3RyaW5nKCkpLCJuYW1lIj09PXQmJihyPXRoaXMudG9OYW1lKCkpLCJoc2wiPT09dCYmKHI9dGhpcy50b0hzbFN0cmluZygpKSwiaHN2Ij09PXQmJihyPXRoaXMudG9Ic3ZTdHJpbmcoKSkscnx8dGhpcy50b0hleFN0cmluZygpKToibmFtZSI9PT10JiYwPT09dGhpcy5fYT90aGlzLnRvTmFtZSgpOnRoaXMudG9SZ2JTdHJpbmcoKX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLnRvU3RyaW5nKCkpfSxfYXBwbHlNb2RpZmljYXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcj10LmFwcGx5KG51bGwsW3RoaXNdLmNvbmNhdChbXS5zbGljZS5jYWxsKGUpKSk7cmV0dXJuIHRoaXMuX3I9ci5fcix0aGlzLl9nPXIuX2csdGhpcy5fYj1yLl9iLHRoaXMuc2V0QWxwaGEoci5fYSksdGhpc30sbGlnaHRlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbih2LGFyZ3VtZW50cyl9LGJyaWdodGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHksYXJndW1lbnRzKX0sZGFya2VuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKHgsYXJndW1lbnRzKX0sZGVzYXR1cmF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihkLGFyZ3VtZW50cyl9LHNhdHVyYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKG0sYXJndW1lbnRzKX0sZ3JleXNjYWxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5TW9kaWZpY2F0aW9uKGcsYXJndW1lbnRzKX0sc3BpbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcHBseU1vZGlmaWNhdGlvbihiLGFyZ3VtZW50cyl9LF9hcHBseUNvbWJpbmF0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuYXBwbHkobnVsbCxbdGhpc10uY29uY2F0KFtdLnNsaWNlLmNhbGwoZSkpKX0sYW5hbG9nb3VzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oQSxhcmd1bWVudHMpfSxjb21wbGVtZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oXyxhcmd1bWVudHMpfSxtb25vY2hyb21hdGljOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24oTSxhcmd1bWVudHMpfSxzcGxpdGNvbXBsZW1lbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihrLGFyZ3VtZW50cyl9LHRyaWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FwcGx5Q29tYmluYXRpb24odyxhcmd1bWVudHMpfSx0ZXRyYWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYXBwbHlDb21iaW5hdGlvbihULGFyZ3VtZW50cyl9fSxjLmZyb21SYXRpbz1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiPT10eXBlb2YgdCl7dmFyIHI9e307Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKHJbbl09ImEiPT09bj90W25dOnoodFtuXSkpO3Q9cn1yZXR1cm4gYyh0LGUpfSxjLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiEoIXR8fCFlKSYmYyh0KS50b1JnYlN0cmluZygpPT1jKGUpLnRvUmdiU3RyaW5nKCl9LGMucmFuZG9tPWZ1bmN0aW9uKCl7cmV0dXJuIGMuZnJvbVJhdGlvKHtyOmwoKSxnOmwoKSxiOmwoKX0pfSxjLm1peD1mdW5jdGlvbih0LGUscil7cj0wPT09cj8wOnJ8fDUwO3ZhciBuPWModCkudG9SZ2IoKSxpPWMoZSkudG9SZ2IoKSxhPXIvMTAwO3JldHVybiBjKHtyOihpLnItbi5yKSphK24ucixnOihpLmctbi5nKSphK24uZyxiOihpLmItbi5iKSphK24uYixhOihpLmEtbi5hKSphK24uYX0pfSxjLnJlYWRhYmlsaXR5PWZ1bmN0aW9uKGUscil7dmFyIG49YyhlKSxpPWMocik7cmV0dXJuKHQubWF4KG4uZ2V0THVtaW5hbmNlKCksaS5nZXRMdW1pbmFuY2UoKSkrLjA1KS8odC5taW4obi5nZXRMdW1pbmFuY2UoKSxpLmdldEx1bWluYW5jZSgpKSsuMDUpfSxjLmlzUmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1jLnJlYWRhYmlsaXR5KHQsZSk7c3dpdGNoKGk9ITEsKG49ZnVuY3Rpb24odCl7dmFyIGUscjtlPSgodD10fHx7bGV2ZWw6IkFBIixzaXplOiJzbWFsbCJ9KS5sZXZlbHx8IkFBIikudG9VcHBlckNhc2UoKSxyPSh0LnNpemV8fCJzbWFsbCIpLnRvTG93ZXJDYXNlKCksIkFBIiE9PWUmJiJBQUEiIT09ZSYmKGU9IkFBIik7InNtYWxsIiE9PXImJiJsYXJnZSIhPT1yJiYocj0ic21hbGwiKTtyZXR1cm57bGV2ZWw6ZSxzaXplOnJ9fShyKSkubGV2ZWwrbi5zaXplKXtjYXNlIkFBc21hbGwiOmNhc2UiQUFBbGFyZ2UiOmk9YT49NC41O2JyZWFrO2Nhc2UiQUFsYXJnZSI6aT1hPj0zO2JyZWFrO2Nhc2UiQUFBc21hbGwiOmk9YT49N31yZXR1cm4gaX0sYy5tb3N0UmVhZGFibGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvLHM9bnVsbCxsPTA7aT0ocj1yfHx7fSkuaW5jbHVkZUZhbGxiYWNrQ29sb3JzLGE9ci5sZXZlbCxvPXIuc2l6ZTtmb3IodmFyIHU9MDt1PGUubGVuZ3RoO3UrKykobj1jLnJlYWRhYmlsaXR5KHQsZVt1XSkpPmwmJihsPW4scz1jKGVbdV0pKTtyZXR1cm4gYy5pc1JlYWRhYmxlKHQscyx7bGV2ZWw6YSxzaXplOm99KXx8IWk/czooci5pbmNsdWRlRmFsbGJhY2tDb2xvcnM9ITEsYy5tb3N0UmVhZGFibGUodCxbIiNmZmYiLCIjMDAwIl0scikpfTt2YXIgUz1jLm5hbWVzPXthbGljZWJsdWU6ImYwZjhmZiIsYW50aXF1ZXdoaXRlOiJmYWViZDciLGFxdWE6IjBmZiIsYXF1YW1hcmluZToiN2ZmZmQ0IixhenVyZToiZjBmZmZmIixiZWlnZToiZjVmNWRjIixiaXNxdWU6ImZmZTRjNCIsYmxhY2s6IjAwMCIsYmxhbmNoZWRhbG1vbmQ6ImZmZWJjZCIsYmx1ZToiMDBmIixibHVldmlvbGV0OiI4YTJiZTIiLGJyb3duOiJhNTJhMmEiLGJ1cmx5d29vZDoiZGViODg3IixidXJudHNpZW5uYToiZWE3ZTVkIixjYWRldGJsdWU6IjVmOWVhMCIsY2hhcnRyZXVzZToiN2ZmZjAwIixjaG9jb2xhdGU6ImQyNjkxZSIsY29yYWw6ImZmN2Y1MCIsY29ybmZsb3dlcmJsdWU6IjY0OTVlZCIsY29ybnNpbGs6ImZmZjhkYyIsY3JpbXNvbjoiZGMxNDNjIixjeWFuOiIwZmYiLGRhcmtibHVlOiIwMDAwOGIiLGRhcmtjeWFuOiIwMDhiOGIiLGRhcmtnb2xkZW5yb2Q6ImI4ODYwYiIsZGFya2dyYXk6ImE5YTlhOSIsZGFya2dyZWVuOiIwMDY0MDAiLGRhcmtncmV5OiJhOWE5YTkiLGRhcmtraGFraToiYmRiNzZiIixkYXJrbWFnZW50YToiOGIwMDhiIixkYXJrb2xpdmVncmVlbjoiNTU2YjJmIixkYXJrb3JhbmdlOiJmZjhjMDAiLGRhcmtvcmNoaWQ6Ijk5MzJjYyIsZGFya3JlZDoiOGIwMDAwIixkYXJrc2FsbW9uOiJlOTk2N2EiLGRhcmtzZWFncmVlbjoiOGZiYzhmIixkYXJrc2xhdGVibHVlOiI0ODNkOGIiLGRhcmtzbGF0ZWdyYXk6IjJmNGY0ZiIsZGFya3NsYXRlZ3JleToiMmY0ZjRmIixkYXJrdHVycXVvaXNlOiIwMGNlZDEiLGRhcmt2aW9sZXQ6Ijk0MDBkMyIsZGVlcHBpbms6ImZmMTQ5MyIsZGVlcHNreWJsdWU6IjAwYmZmZiIsZGltZ3JheToiNjk2OTY5IixkaW1ncmV5OiI2OTY5NjkiLGRvZGdlcmJsdWU6IjFlOTBmZiIsZmlyZWJyaWNrOiJiMjIyMjIiLGZsb3JhbHdoaXRlOiJmZmZhZjAiLGZvcmVzdGdyZWVuOiIyMjhiMjIiLGZ1Y2hzaWE6ImYwZiIsZ2FpbnNib3JvOiJkY2RjZGMiLGdob3N0d2hpdGU6ImY4ZjhmZiIsZ29sZDoiZmZkNzAwIixnb2xkZW5yb2Q6ImRhYTUyMCIsZ3JheToiODA4MDgwIixncmVlbjoiMDA4MDAwIixncmVlbnllbGxvdzoiYWRmZjJmIixncmV5OiI4MDgwODAiLGhvbmV5ZGV3OiJmMGZmZjAiLGhvdHBpbms6ImZmNjliNCIsaW5kaWFucmVkOiJjZDVjNWMiLGluZGlnbzoiNGIwMDgyIixpdm9yeToiZmZmZmYwIixraGFraToiZjBlNjhjIixsYXZlbmRlcjoiZTZlNmZhIixsYXZlbmRlcmJsdXNoOiJmZmYwZjUiLGxhd25ncmVlbjoiN2NmYzAwIixsZW1vbmNoaWZmb246ImZmZmFjZCIsbGlnaHRibHVlOiJhZGQ4ZTYiLGxpZ2h0Y29yYWw6ImYwODA4MCIsbGlnaHRjeWFuOiJlMGZmZmYiLGxpZ2h0Z29sZGVucm9keWVsbG93OiJmYWZhZDIiLGxpZ2h0Z3JheToiZDNkM2QzIixsaWdodGdyZWVuOiI5MGVlOTAiLGxpZ2h0Z3JleToiZDNkM2QzIixsaWdodHBpbms6ImZmYjZjMSIsbGlnaHRzYWxtb246ImZmYTA3YSIsbGlnaHRzZWFncmVlbjoiMjBiMmFhIixsaWdodHNreWJsdWU6Ijg3Y2VmYSIsbGlnaHRzbGF0ZWdyYXk6Ijc4OSIsbGlnaHRzbGF0ZWdyZXk6Ijc4OSIsbGlnaHRzdGVlbGJsdWU6ImIwYzRkZSIsbGlnaHR5ZWxsb3c6ImZmZmZlMCIsbGltZToiMGYwIixsaW1lZ3JlZW46IjMyY2QzMiIsbGluZW46ImZhZjBlNiIsbWFnZW50YToiZjBmIixtYXJvb246IjgwMDAwMCIsbWVkaXVtYXF1YW1hcmluZToiNjZjZGFhIixtZWRpdW1ibHVlOiIwMDAwY2QiLG1lZGl1bW9yY2hpZDoiYmE1NWQzIixtZWRpdW1wdXJwbGU6IjkzNzBkYiIsbWVkaXVtc2VhZ3JlZW46IjNjYjM3MSIsbWVkaXVtc2xhdGVibHVlOiI3YjY4ZWUiLG1lZGl1bXNwcmluZ2dyZWVuOiIwMGZhOWEiLG1lZGl1bXR1cnF1b2lzZToiNDhkMWNjIixtZWRpdW12aW9sZXRyZWQ6ImM3MTU4NSIsbWlkbmlnaHRibHVlOiIxOTE5NzAiLG1pbnRjcmVhbToiZjVmZmZhIixtaXN0eXJvc2U6ImZmZTRlMSIsbW9jY2FzaW46ImZmZTRiNSIsbmF2YWpvd2hpdGU6ImZmZGVhZCIsbmF2eToiMDAwMDgwIixvbGRsYWNlOiJmZGY1ZTYiLG9saXZlOiI4MDgwMDAiLG9saXZlZHJhYjoiNmI4ZTIzIixvcmFuZ2U6ImZmYTUwMCIsb3JhbmdlcmVkOiJmZjQ1MDAiLG9yY2hpZDoiZGE3MGQ2IixwYWxlZ29sZGVucm9kOiJlZWU4YWEiLHBhbGVncmVlbjoiOThmYjk4IixwYWxldHVycXVvaXNlOiJhZmVlZWUiLHBhbGV2aW9sZXRyZWQ6ImRiNzA5MyIscGFwYXlhd2hpcDoiZmZlZmQ1IixwZWFjaHB1ZmY6ImZmZGFiOSIscGVydToiY2Q4NTNmIixwaW5rOiJmZmMwY2IiLHBsdW06ImRkYTBkZCIscG93ZGVyYmx1ZToiYjBlMGU2IixwdXJwbGU6IjgwMDA4MCIscmViZWNjYXB1cnBsZToiNjYzMzk5IixyZWQ6ImYwMCIscm9zeWJyb3duOiJiYzhmOGYiLHJveWFsYmx1ZToiNDE2OWUxIixzYWRkbGVicm93bjoiOGI0NTEzIixzYWxtb246ImZhODA3MiIsc2FuZHlicm93bjoiZjRhNDYwIixzZWFncmVlbjoiMmU4YjU3IixzZWFzaGVsbDoiZmZmNWVlIixzaWVubmE6ImEwNTIyZCIsc2lsdmVyOiJjMGMwYzAiLHNreWJsdWU6Ijg3Y2VlYiIsc2xhdGVibHVlOiI2YTVhY2QiLHNsYXRlZ3JheToiNzA4MDkwIixzbGF0ZWdyZXk6IjcwODA5MCIsc25vdzoiZmZmYWZhIixzcHJpbmdncmVlbjoiMDBmZjdmIixzdGVlbGJsdWU6IjQ2ODJiNCIsdGFuOiJkMmI0OGMiLHRlYWw6IjAwODA4MCIsdGhpc3RsZToiZDhiZmQ4Iix0b21hdG86ImZmNjM0NyIsdHVycXVvaXNlOiI0MGUwZDAiLHZpb2xldDoiZWU4MmVlIix3aGVhdDoiZjVkZWIzIix3aGl0ZToiZmZmIix3aGl0ZXNtb2tlOiJmNWY1ZjUiLHllbGxvdzoiZmYwIix5ZWxsb3dncmVlbjoiOWFjZDMyIn0sRT1jLmhleE5hbWVzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Zvcih2YXIgciBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJihlW3Rbcl1dPXIpO3JldHVybiBlfShTKTtmdW5jdGlvbiBMKHQpe3JldHVybiB0PXBhcnNlRmxvYXQodCksKGlzTmFOKHQpfHx0PDB8fHQ+MSkmJih0PTEpLHR9ZnVuY3Rpb24gQyhlLHIpeyhmdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIi4iKSYmMT09PXBhcnNlRmxvYXQodCl9KShlKSYmKGU9IjEwMCUiKTt2YXIgbj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJi0xIT10LmluZGV4T2YoIiUiKX0oZSk7cmV0dXJuIGU9byhyLHMoMCxwYXJzZUZsb2F0KGUpKSksbiYmKGU9cGFyc2VJbnQoZSpyLDEwKS8xMDApLHQuYWJzKGUtcik8MWUtNj8xOmUlci9wYXJzZUZsb2F0KHIpfWZ1bmN0aW9uIFAodCl7cmV0dXJuIG8oMSxzKDAsdCkpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIHBhcnNlSW50KHQsMTYpfWZ1bmN0aW9uIE8odCl7cmV0dXJuIDE9PXQubGVuZ3RoPyIwIit0OiIiK3R9ZnVuY3Rpb24geih0KXtyZXR1cm4gdDw9MSYmKHQ9MTAwKnQrIiUiKSx0fWZ1bmN0aW9uIEQoZSl7cmV0dXJuIHQucm91bmQoMjU1KnBhcnNlRmxvYXQoZSkpLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBSKHQpe3JldHVybiBJKHQpLzI1NX12YXIgRixCLE4saj0oQj0iW1xcc3xcXChdKygiKyhGPSIoPzpbLVxcK10/XFxkKlxcLlxcZCslPyl8KD86Wy1cXCtdP1xcZCslPykiKSsiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/IixOPSJbXFxzfFxcKF0rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVssfFxcc10rKCIrRisiKVxccypcXCk/Iix7Q1NTX1VOSVQ6bmV3IFJlZ0V4cChGKSxyZ2I6bmV3IFJlZ0V4cCgicmdiIitCKSxyZ2JhOm5ldyBSZWdFeHAoInJnYmEiK04pLGhzbDpuZXcgUmVnRXhwKCJoc2wiK0IpLGhzbGE6bmV3IFJlZ0V4cCgiaHNsYSIrTiksaHN2Om5ldyBSZWdFeHAoImhzdiIrQiksaHN2YTpuZXcgUmVnRXhwKCJoc3ZhIitOKSxoZXgzOi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkkLyxoZXg2Oi9eIz8oWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkkLyxoZXg0Oi9eIz8oWzAtOWEtZkEtRl17MX0pKFswLTlhLWZBLUZdezF9KShbMC05YS1mQS1GXXsxfSkoWzAtOWEtZkEtRl17MX0pJC8saGV4ODovXiM/KFswLTlhLWZBLUZdezJ9KShbMC05YS1mQS1GXXsyfSkoWzAtOWEtZkEtRl17Mn0pKFswLTlhLWZBLUZdezJ9KSQvfSk7ZnVuY3Rpb24gVSh0KXtyZXR1cm4hIWouQ1NTX1VOSVQuZXhlYyh0KX12b2lkIDAhPT1lJiZlLmV4cG9ydHM/ZS5leHBvcnRzPWM6d2luZG93LnRpbnljb2xvcj1jfShNYXRoKX0se31dLDU3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9aSxlLmV4cG9ydHMuZmxvYXQzMj1lLmV4cG9ydHMuZmxvYXQ9aSxlLmV4cG9ydHMuZnJhY3QzMj1lLmV4cG9ydHMuZnJhY3Q9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7aWYodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheSlyZXR1cm4gbmV3IEZsb2F0MzJBcnJheSh0Lmxlbmd0aCk7ZSBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8KGU9aSh0KSk7Zm9yKHZhciByPTAsbj1lLmxlbmd0aDtyPG47cisrKWVbcl09dFtyXS1lW3JdO3JldHVybiBlfXJldHVybiBpKHQtaSh0KSl9O3ZhciBuPW5ldyBGbG9hdDMyQXJyYXkoMSk7ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC5sZW5ndGg/dCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheT90Om5ldyBGbG9hdDMyQXJyYXkodCk6KG5bMF09dCxuWzBdKX19LHt9XSw1NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicGFyc2UtdW5pdCIpO2UuZXhwb3J0cz1hO2Z1bmN0aW9uIGkodCxlKXt2YXIgcj1uKGdldENvbXB1dGVkU3R5bGUodCkuZ2V0UHJvcGVydHlWYWx1ZShlKSk7cmV0dXJuIHJbMF0qYShyWzFdLHQpfWZ1bmN0aW9uIGEodCxlKXtzd2l0Y2goZT1lfHxkb2N1bWVudC5ib2R5LHQ9KHR8fCJweCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGUhPT13aW5kb3cmJmUhPT1kb2N1bWVudHx8KGU9ZG9jdW1lbnQuYm9keSksdCl7Y2FzZSIlIjpyZXR1cm4gZS5jbGllbnRIZWlnaHQvMTAwO2Nhc2UiY2giOmNhc2UiZXgiOnJldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Iuc3R5bGVbImZvbnQtc2l6ZSJdPSIxMjgiK3QsZS5hcHBlbmRDaGlsZChyKTt2YXIgbj1pKHIsImZvbnQtc2l6ZSIpLzEyODtyZXR1cm4gZS5yZW1vdmVDaGlsZChyKSxufSh0LGUpO2Nhc2UiZW0iOnJldHVybiBpKGUsImZvbnQtc2l6ZSIpO2Nhc2UicmVtIjpyZXR1cm4gaShkb2N1bWVudC5ib2R5LCJmb250LXNpemUiKTtjYXNlInZ3IjpyZXR1cm4gd2luZG93LmlubmVyV2lkdGgvMTAwO2Nhc2UidmgiOnJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQvMTAwO2Nhc2Uidm1pbiI6cmV0dXJuIE1hdGgubWluKHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2Uidm1heCI6cmV0dXJuIE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoLHdpbmRvdy5pbm5lckhlaWdodCkvMTAwO2Nhc2UiaW4iOnJldHVybiA5NjtjYXNlImNtIjpyZXR1cm4gOTYvMi41NDtjYXNlIm1tIjpyZXR1cm4gOTYvMjUuNDtjYXNlInB0IjpyZXR1cm4gOTYvNzI7Y2FzZSJwYyI6cmV0dXJuIDE2fXJldHVybiAxfX0seyJwYXJzZS11bml0Ijo0NzN9XSw1NzU6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCxuKXsib2JqZWN0Ij09dHlwZW9mIHImJnZvaWQgMCE9PWU/bihyKTpuKCh0PXR8fHNlbGYpLnRvcG9qc29uPXQudG9wb2pzb258fHt9KX0odGhpcywoZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGUodCl7cmV0dXJuIHR9ZnVuY3Rpb24gcih0KXtpZihudWxsPT10KXJldHVybiBlO3ZhciByLG4saT10LnNjYWxlWzBdLGE9dC5zY2FsZVsxXSxvPXQudHJhbnNsYXRlWzBdLHM9dC50cmFuc2xhdGVbMV07cmV0dXJuIGZ1bmN0aW9uKHQsZSl7ZXx8KHI9bj0wKTt2YXIgbD0yLGM9dC5sZW5ndGgsdT1uZXcgQXJyYXkoYyk7Zm9yKHVbMF09KHIrPXRbMF0pKmkrbyx1WzFdPShuKz10WzFdKSphK3M7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX1mdW5jdGlvbiBuKHQpe3ZhciBlLG49cih0LnRyYW5zZm9ybSksaT0xLzAsYT1pLG89LWkscz0taTtmdW5jdGlvbiBsKHQpeyh0PW4odCkpWzBdPGkmJihpPXRbMF0pLHRbMF0+byYmKG89dFswXSksdFsxXTxhJiYoYT10WzFdKSx0WzFdPnMmJihzPXRbMV0pfWZ1bmN0aW9uIGModCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOnQuZ2VvbWV0cmllcy5mb3JFYWNoKGMpO2JyZWFrO2Nhc2UiUG9pbnQiOmwodC5jb29yZGluYXRlcyk7YnJlYWs7Y2FzZSJNdWx0aVBvaW50Ijp0LmNvb3JkaW5hdGVzLmZvckVhY2gobCl9fWZvcihlIGluIHQuYXJjcy5mb3JFYWNoKChmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxsPXQubGVuZ3RoOysrcjxsOykoZT1uKHRbcl0scikpWzBdPGkmJihpPWVbMF0pLGVbMF0+byYmKG89ZVswXSksZVsxXTxhJiYoYT1lWzFdKSxlWzFdPnMmJihzPWVbMV0pfSkpLHQub2JqZWN0cyljKHQub2JqZWN0c1tlXSk7cmV0dXJuW2ksYSxvLHNdfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj1lLmlkLG49ZS5iYm94LGk9bnVsbD09ZS5wcm9wZXJ0aWVzP3t9OmUucHJvcGVydGllcyxvPWEodCxlKTtyZXR1cm4gbnVsbD09ciYmbnVsbD09bj97dHlwZToiRmVhdHVyZSIscHJvcGVydGllczppLGdlb21ldHJ5Om99Om51bGw9PW4/e3R5cGU6IkZlYXR1cmUiLGlkOnIscHJvcGVydGllczppLGdlb21ldHJ5Om99Ont0eXBlOiJGZWF0dXJlIixpZDpyLGJib3g6bixwcm9wZXJ0aWVzOmksZ2VvbWV0cnk6b319ZnVuY3Rpb24gYSh0LGUpe3ZhciBuPXIodC50cmFuc2Zvcm0pLGk9dC5hcmNzO2Z1bmN0aW9uIGEodCxlKXtlLmxlbmd0aCYmZS5wb3AoKTtmb3IodmFyIHI9aVt0PDA/fnQ6dF0sYT0wLG89ci5sZW5ndGg7YTxvOysrYSllLnB1c2gobihyW2FdLGEpKTt0PDAmJmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1uLWU7aTwtLW47KXI9dFtpXSx0W2krK109dFtuXSx0W25dPXJ9KGUsbyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih0KX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj10Lmxlbmd0aDtyPG47KytyKWEodFtyXSxlKTtyZXR1cm4gZS5sZW5ndGg8MiYmZS5wdXNoKGVbMF0pLGV9ZnVuY3Rpb24gbCh0KXtmb3IodmFyIGU9cyh0KTtlLmxlbmd0aDw0OyllLnB1c2goZVswXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gdC5tYXAobCl9cmV0dXJuIGZ1bmN0aW9uIHQoZSl7dmFyIHIsbj1lLnR5cGU7c3dpdGNoKG4pe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjpyZXR1cm57dHlwZTpuLGdlb21ldHJpZXM6ZS5nZW9tZXRyaWVzLm1hcCh0KX07Y2FzZSJQb2ludCI6cj1vKGUuY29vcmRpbmF0ZXMpO2JyZWFrO2Nhc2UiTXVsdGlQb2ludCI6cj1lLmNvb3JkaW5hdGVzLm1hcChvKTticmVhaztjYXNlIkxpbmVTdHJpbmciOnI9cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpyPWUuYXJjcy5tYXAocyk7YnJlYWs7Y2FzZSJQb2x5Z29uIjpyPWMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6cj1lLmFyY3MubWFwKGMpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9cmV0dXJue3R5cGU6bixjb29yZGluYXRlczpyfX0oZSl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXt9LG49e30saT17fSxhPVtdLG89LTE7ZnVuY3Rpb24gcyh0LGUpe2Zvcih2YXIgbiBpbiB0KXt2YXIgaT10W25dO2RlbGV0ZSBlW2kuc3RhcnRdLGRlbGV0ZSBpLnN0YXJ0LGRlbGV0ZSBpLmVuZCxpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3JbdDwwP350OnRdPTF9KSksYS5wdXNoKGkpfX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbihyLG4pe3ZhciBpLGE9dC5hcmNzW3I8MD9+cjpyXTthLmxlbmd0aDwzJiYhYVsxXVswXSYmIWFbMV1bMV0mJihpPWVbKytvXSxlW29dPXIsZVtuXT1pKX0pKSxlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByLGEsbz1mdW5jdGlvbihlKXt2YXIgcixuPXQuYXJjc1tlPDA/fmU6ZV0saT1uWzBdO3QudHJhbnNmb3JtPyhyPVswLDBdLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7clswXSs9dFswXSxyWzFdKz10WzFdfSkpKTpyPW5bbi5sZW5ndGgtMV07cmV0dXJuIGU8MD9bcixpXTpbaSxyXX0oZSkscz1vWzBdLGw9b1sxXTtpZihyPWlbc10paWYoZGVsZXRlIGlbci5lbmRdLHIucHVzaChlKSxyLmVuZD1sLGE9bltsXSl7ZGVsZXRlIG5bYS5zdGFydF07dmFyIGM9YT09PXI/cjpyLmNvbmNhdChhKTtuW2Muc3RhcnQ9ci5zdGFydF09aVtjLmVuZD1hLmVuZF09Y31lbHNlIG5bci5zdGFydF09aVtyLmVuZF09cjtlbHNlIGlmKHI9bltsXSlpZihkZWxldGUgbltyLnN0YXJ0XSxyLnVuc2hpZnQoZSksci5zdGFydD1zLGE9aVtzXSl7ZGVsZXRlIGlbYS5lbmRdO3ZhciB1PWE9PT1yP3I6YS5jb25jYXQocik7blt1LnN0YXJ0PWEuc3RhcnRdPWlbdS5lbmQ9ci5lbmRdPXV9ZWxzZSBuW3Iuc3RhcnRdPWlbci5lbmRdPXI7ZWxzZSBuWyhyPVtlXSkuc3RhcnQ9c109aVtyLmVuZD1sXT1yfSkpLHMoaSxuKSxzKG4saSksZS5mb3JFYWNoKChmdW5jdGlvbih0KXtyW3Q8MD9+dDp0XXx8YS5wdXNoKFt0XSl9KSksYX1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbixpLGE7aWYoYXJndW1lbnRzLmxlbmd0aD4xKW49bCh0LGUscik7ZWxzZSBmb3IoaT0wLG49bmV3IEFycmF5KGE9dC5hcmNzLmxlbmd0aCk7aTxhOysraSluW2ldPWk7cmV0dXJue3R5cGU6Ik11bHRpTGluZVN0cmluZyIsYXJjczpvKHQsbil9fWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuLGk9W10sYT1bXTtmdW5jdGlvbiBvKHQpe3ZhciBlPXQ8MD9+dDp0OyhhW2VdfHwoYVtlXT1bXSkpLnB1c2goe2k6dCxnOm59KX1mdW5jdGlvbiBzKHQpe3QuZm9yRWFjaChvKX1mdW5jdGlvbiBsKHQpe3QuZm9yRWFjaChzKX1yZXR1cm4gZnVuY3Rpb24gdChlKXtzd2l0Y2gobj1lLGUudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmUuZ2VvbWV0cmllcy5mb3JFYWNoKHQpO2JyZWFrO2Nhc2UiTGluZVN0cmluZyI6cyhlLmFyY3MpO2JyZWFrO2Nhc2UiTXVsdGlMaW5lU3RyaW5nIjpjYXNlIlBvbHlnb24iOmwoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6IWZ1bmN0aW9uKHQpe3QuZm9yRWFjaChsKX0oZS5hcmNzKX19KGUpLGEuZm9yRWFjaChudWxsPT1yP2Z1bmN0aW9uKHQpe2kucHVzaCh0WzBdLmkpfTpmdW5jdGlvbih0KXtyKHRbMF0uZyx0W3QubGVuZ3RoLTFdLmcpJiZpLnB1c2godFswXS5pKX0pLGl9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPXt9LG49W10saT1bXTtmdW5jdGlvbiBzKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5mb3JFYWNoKChmdW5jdGlvbihlKXsocltlPWU8MD9+ZTplXXx8KHJbZV09W10pKS5wdXNoKHQpfSkpfSkpLG4ucHVzaCh0KX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGUscj0tMSxuPXQubGVuZ3RoLGk9dFtuLTFdLGE9MDsrK3I8bjspZT1pLGk9dFtyXSxhKz1lWzBdKmlbMV0tZVsxXSppWzBdO3JldHVybiBNYXRoLmFicyhhKX0oYSh0LHt0eXBlOiJQb2x5Z29uIixhcmNzOltlXX0pLmNvb3JkaW5hdGVzWzBdKX1yZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbiB0KGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiR2VvbWV0cnlDb2xsZWN0aW9uIjplLmdlb21ldHJpZXMuZm9yRWFjaCh0KTticmVhaztjYXNlIlBvbHlnb24iOnMoZS5hcmNzKTticmVhaztjYXNlIk11bHRpUG9seWdvbiI6ZS5hcmNzLmZvckVhY2gocyl9fSkpLG4uZm9yRWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuXyl7dmFyIGU9W10sbj1bdF07Zm9yKHQuXz0xLGkucHVzaChlKTt0PW4ucG9wKCk7KWUucHVzaCh0KSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0uZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5ffHwodC5fPTEsbi5wdXNoKHQpKX0pKX0pKX0pKX19KSksbi5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC5ffSkpLHt0eXBlOiJNdWx0aVBvbHlnb24iLGFyY3M6aS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciBuLGk9W107aWYoZS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7clt0PDA/fnQ6dF0ubGVuZ3RoPDImJmkucHVzaCh0KX0pKX0pKX0pKSwobj0oaT1vKHQsaSkpLmxlbmd0aCk+MSlmb3IodmFyIGEscyxjPTEsdT1sKGlbMF0pO2M8bjsrK2MpKGE9bChpW2NdKSk+dSYmKHM9aVswXSxpWzBdPWlbY10saVtjXT1zLHU9YSk7cmV0dXJuIGl9KSkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGg+MH0pKX19ZnVuY3Rpb24gdSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuOyl7dmFyIGk9cituPj4+MTt0W2ldPGU/cj1pKzE6bj1pfXJldHVybiByfWZ1bmN0aW9uIGYodCl7aWYobnVsbD09dClyZXR1cm4gZTt2YXIgcixuLGk9dC5zY2FsZVswXSxhPXQuc2NhbGVbMV0sbz10LnRyYW5zbGF0ZVswXSxzPXQudHJhbnNsYXRlWzFdO3JldHVybiBmdW5jdGlvbih0LGUpe2V8fChyPW49MCk7dmFyIGw9MixjPXQubGVuZ3RoLHU9bmV3IEFycmF5KGMpLGY9TWF0aC5yb3VuZCgodFswXS1vKS9pKSxoPU1hdGgucm91bmQoKHRbMV0tcykvYSk7Zm9yKHVbMF09Zi1yLHI9Zix1WzFdPWgtbixuPWg7bDxjOyl1W2xdPXRbbF0sKytsO3JldHVybiB1fX10LmJib3g9bix0LmZlYXR1cmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXQub2JqZWN0c1tlXSksIkdlb21ldHJ5Q29sbGVjdGlvbiI9PT1lLnR5cGU/e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczplLmdlb21ldHJpZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gaSh0LGUpfSkpfTppKHQsZSl9LHQubWVyZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIGEodCxjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LHQubWVyZ2VBcmNzPWMsdC5tZXNoPWZ1bmN0aW9uKHQpe3JldHVybiBhKHQscy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSx0Lm1lc2hBcmNzPXMsdC5uZWlnaGJvcnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcCgoZnVuY3Rpb24oKXtyZXR1cm5bXX0pKTtmdW5jdGlvbiBuKHQscil7dC5mb3JFYWNoKChmdW5jdGlvbih0KXt0PDAmJih0PX50KTt2YXIgbj1lW3RdO24/bi5wdXNoKHIpOmVbdF09W3JdfSkpfWZ1bmN0aW9uIGkodCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe24odCxlKX0pKX12YXIgYT17TGluZVN0cmluZzpuLE11bHRpTGluZVN0cmluZzppLFBvbHlnb246aSxNdWx0aVBvbHlnb246ZnVuY3Rpb24odCxlKXt0LmZvckVhY2goKGZ1bmN0aW9uKHQpe2kodCxlKX0pKX19O2Zvcih2YXIgbyBpbiB0LmZvckVhY2goKGZ1bmN0aW9uIHQoZSxyKXsiR2VvbWV0cnlDb2xsZWN0aW9uIj09PWUudHlwZT9lLmdlb21ldHJpZXMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dChlLHIpfSkpOmUudHlwZSBpbiBhJiZhW2UudHlwZV0oZS5hcmNzLHIpfSkpLGUpZm9yKHZhciBzPWVbb10sbD1zLmxlbmd0aCxjPTA7YzxsOysrYylmb3IodmFyIGY9YysxO2Y8bDsrK2Ype3ZhciBoLHA9c1tjXSxkPXNbZl07KGg9cltwXSlbbz11KGgsZCldIT09ZCYmaC5zcGxpY2UobywwLGQpLChoPXJbZF0pW289dShoLHApXSE9PXAmJmguc3BsaWNlKG8sMCxwKX1yZXR1cm4gcn0sdC5xdWFudGl6ZT1mdW5jdGlvbih0LGUpe2lmKHQudHJhbnNmb3JtKXRocm93IG5ldyBFcnJvcigiYWxyZWFkeSBxdWFudGl6ZWQiKTtpZihlJiZlLnNjYWxlKWw9dC5iYm94O2Vsc2V7aWYoISgocj1NYXRoLmZsb29yKGUpKT49MikpdGhyb3cgbmV3IEVycm9yKCJuIG11c3QgYmUgXHUyMjY1MiIpO3ZhciByLGk9KGw9dC5iYm94fHxuKHQpKVswXSxhPWxbMV0sbz1sWzJdLHM9bFszXTtlPXtzY2FsZTpbby1pPyhvLWkpLyhyLTEpOjEscy1hPyhzLWEpLyhyLTEpOjFdLHRyYW5zbGF0ZTpbaSxhXX19dmFyIGwsYyx1PWYoZSksaD10Lm9iamVjdHMscD17fTtmdW5jdGlvbiBkKHQpe3JldHVybiB1KHQpfWZ1bmN0aW9uIG0odCl7dmFyIGU7c3dpdGNoKHQudHlwZSl7Y2FzZSJHZW9tZXRyeUNvbGxlY3Rpb24iOmU9e3R5cGU6Ikdlb21ldHJ5Q29sbGVjdGlvbiIsZ2VvbWV0cmllczp0Lmdlb21ldHJpZXMubWFwKG0pfTticmVhaztjYXNlIlBvaW50IjplPXt0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6ZCh0LmNvb3JkaW5hdGVzKX07YnJlYWs7Y2FzZSJNdWx0aVBvaW50IjplPXt0eXBlOiJNdWx0aVBvaW50Iixjb29yZGluYXRlczp0LmNvb3JkaW5hdGVzLm1hcChkKX07YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdH1yZXR1cm4gbnVsbCE9dC5pZCYmKGUuaWQ9dC5pZCksbnVsbCE9dC5iYm94JiYoZS5iYm94PXQuYmJveCksbnVsbCE9dC5wcm9wZXJ0aWVzJiYoZS5wcm9wZXJ0aWVzPXQucHJvcGVydGllcyksZX1mb3IoYyBpbiBoKXBbY109bShoW2NdKTtyZXR1cm57dHlwZToiVG9wb2xvZ3kiLGJib3g6bCx0cmFuc2Zvcm06ZSxvYmplY3RzOnAsYXJjczp0LmFyY3MubWFwKChmdW5jdGlvbih0KXt2YXIgZSxyPTAsbj0xLGk9dC5sZW5ndGgsYT1uZXcgQXJyYXkoaSk7Zm9yKGFbMF09dSh0WzBdLDApOysrcjxpOykoKGU9dSh0W3JdLHIpKVswXXx8ZVsxXSkmJihhW24rK109ZSk7cmV0dXJuIDE9PT1uJiYoYVtuKytdPVswLDBdKSxhLmxlbmd0aD1uLGF9KSl9fSx0LnRyYW5zZm9ybT1yLHQudW50cmFuc2Zvcm09ZixPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9KSl9LHt9XSw1NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PXR8fHt9KS5jZW50ZXJ8fFswLDAsMF0scj10LnVwfHxbMCwxLDBdLG49dC5yaWdodHx8ZihyKSxpPXQucmFkaXVzfHwxLGE9dC50aGV0YXx8MCx1PXQucGhpfHwwO2lmKGU9W10uc2xpY2UuY2FsbChlLDAsMykscj1bXS5zbGljZS5jYWxsKHIsMCwzKSxzKHIsciksbj1bXS5zbGljZS5jYWxsKG4sMCwzKSxzKG4sbiksImV5ZSJpbiB0KXt2YXIgcD10LmV5ZSxkPVtwWzBdLWVbMF0scFsxXS1lWzFdLHBbMl0tZVsyXV07byhuLGQsciksYyhuWzBdLG5bMV0sblsyXSk8MWUtNj9uPWYocik6cyhuLG4pLGk9YyhkWzBdLGRbMV0sZFsyXSk7dmFyIG09bChyLGQpL2ksZz1sKG4sZCkvaTt1PU1hdGguYWNvcyhtKSxhPU1hdGguYWNvcyhnKX1yZXR1cm4gaT1NYXRoLmxvZyhpKSxuZXcgaCh0Lnpvb21NaW4sdC56b29tTWF4LGUscixuLGksYSx1KX07dmFyIG49dCgiZmlsdGVyZWQtdmVjdG9yIiksaT10KCJnbC1tYXQ0L2ludmVydCIpLGE9dCgiZ2wtbWF0NC9yb3RhdGUiKSxvPXQoImdsLXZlYzMvY3Jvc3MiKSxzPXQoImdsLXZlYzMvbm9ybWFsaXplIiksbD10KCJnbC12ZWMzL2RvdCIpO2Z1bmN0aW9uIGModCxlLHIpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codCwyKStNYXRoLnBvdyhlLDIpK01hdGgucG93KHIsMikpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIE1hdGgubWluKDEsTWF0aC5tYXgoLTEsdCkpfWZ1bmN0aW9uIGYodCl7dmFyIGU9TWF0aC5hYnModFswXSkscj1NYXRoLmFicyh0WzFdKSxuPU1hdGguYWJzKHRbMl0pLGk9WzAsMCwwXTtlPk1hdGgubWF4KHIsbik/aVsyXT0xOnI+TWF0aC5tYXgoZSxuKT9pWzBdPTE6aVsxXT0xO2Zvcih2YXIgYT0wLG89MCxsPTA7bDwzOysrbClhKz10W2xdKnRbbF0sbys9aVtsXSp0W2xdO2ZvcihsPTA7bDwzOysrbClpW2xdLT1vL2EqdFtsXTtyZXR1cm4gcyhpLGkpLGl9ZnVuY3Rpb24gaCh0LGUscixpLGEsbyxzLGwpe3RoaXMuY2VudGVyPW4ociksdGhpcy51cD1uKGkpLHRoaXMucmlnaHQ9bihhKSx0aGlzLnJhZGl1cz1uKFtvXSksdGhpcy5hbmdsZT1uKFtzLGxdKSx0aGlzLmFuZ2xlLmJvdW5kcz1bWy0xLzAsLU1hdGguUEkvMl0sWzEvMCxNYXRoLlBJLzJdXSx0aGlzLnNldERpc3RhbmNlTGltaXRzKHQsZSksdGhpcy5jb21wdXRlZENlbnRlcj10aGlzLmNlbnRlci5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkVXA9dGhpcy51cC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmlnaHQ9dGhpcy5yaWdodC5jdXJ2ZSgwKSx0aGlzLmNvbXB1dGVkUmFkaXVzPXRoaXMucmFkaXVzLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRBbmdsZT10aGlzLmFuZ2xlLmN1cnZlKDApLHRoaXMuY29tcHV0ZWRUb3dhcmQ9WzAsMCwwXSx0aGlzLmNvbXB1dGVkRXllPVswLDAsMF0sdGhpcy5jb21wdXRlZE1hdHJpeD1uZXcgQXJyYXkoMTYpO2Zvcih2YXIgYz0wO2M8MTY7KytjKXRoaXMuY29tcHV0ZWRNYXRyaXhbY109LjU7dGhpcy5yZWNhbGNNYXRyaXgoMCl9dmFyIHA9aC5wcm90b3R5cGU7cC5zZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0LGUpe3Q9dD4wP01hdGgubG9nKHQpOi0xLzAsZT1lPjA/TWF0aC5sb2coZSk6MS8wLGU9TWF0aC5tYXgoZSx0KSx0aGlzLnJhZGl1cy5ib3VuZHNbMF1bMF09dCx0aGlzLnJhZGl1cy5ib3VuZHNbMV1bMF09ZX0scC5nZXREaXN0YW5jZUxpbWl0cz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnJhZGl1cy5ib3VuZHNbMF07cmV0dXJuIHQ/KHRbMF09TWF0aC5leHAoZVswXVswXSksdFsxXT1NYXRoLmV4cChlWzFdWzBdKSx0KTpbTWF0aC5leHAoZVswXVswXSksTWF0aC5leHAoZVsxXVswXSldfSxwLnJlY2FsY01hdHJpeD1mdW5jdGlvbih0KXt0aGlzLmNlbnRlci5jdXJ2ZSh0KSx0aGlzLnVwLmN1cnZlKHQpLHRoaXMucmlnaHQuY3VydmUodCksdGhpcy5yYWRpdXMuY3VydmUodCksdGhpcy5hbmdsZS5jdXJ2ZSh0KTtmb3IodmFyIGU9dGhpcy5jb21wdXRlZFVwLHI9dGhpcy5jb21wdXRlZFJpZ2h0LG49MCxpPTAsYT0wO2E8MzsrK2EpaSs9ZVthXSpyW2FdLG4rPWVbYV0qZVthXTt2YXIgbD1NYXRoLnNxcnQobiksdT0wO2ZvcihhPTA7YTwzOysrYSlyW2FdLT1lW2FdKmkvbix1Kz1yW2FdKnJbYV0sZVthXS89bDt2YXIgZj1NYXRoLnNxcnQodSk7Zm9yKGE9MDthPDM7KythKXJbYV0vPWY7dmFyIGg9dGhpcy5jb21wdXRlZFRvd2FyZDtvKGgsZSxyKSxzKGgsaCk7dmFyIHA9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSksZD10aGlzLmNvbXB1dGVkQW5nbGVbMF0sbT10aGlzLmNvbXB1dGVkQW5nbGVbMV0sZz1NYXRoLmNvcyhkKSx2PU1hdGguc2luKGQpLHk9TWF0aC5jb3MobSkseD1NYXRoLnNpbihtKSxiPXRoaXMuY29tcHV0ZWRDZW50ZXIsXz1nKnksdz12KnksVD14LGs9LWcqeCxBPS12KngsTT15LFM9dGhpcy5jb21wdXRlZEV5ZSxFPXRoaXMuY29tcHV0ZWRNYXRyaXg7Zm9yKGE9MDthPDM7KythKXt2YXIgTD1fKnJbYV0rdypoW2FdK1QqZVthXTtFWzQqYSsxXT1rKnJbYV0rQSpoW2FdK00qZVthXSxFWzQqYSsyXT1MLEVbNCphKzNdPTB9dmFyIEM9RVsxXSxQPUVbNV0sST1FWzldLE89RVsyXSx6PUVbNl0sRD1FWzEwXSxSPVAqRC1JKnosRj1JKk8tQypELEI9Qyp6LVAqTyxOPWMoUixGLEIpO1IvPU4sRi89TixCLz1OLEVbMF09UixFWzRdPUYsRVs4XT1CO2ZvcihhPTA7YTwzOysrYSlTW2FdPWJbYV0rRVsyKzQqYV0qcDtmb3IoYT0wO2E8MzsrK2Epe3U9MDtmb3IodmFyIGo9MDtqPDM7KytqKXUrPUVbYSs0KmpdKlNbal07RVsxMithXT0tdX1FWzE1XT0xfSxwLmdldE1hdHJpeD1mdW5jdGlvbih0LGUpe3RoaXMucmVjYWxjTWF0cml4KHQpO3ZhciByPXRoaXMuY29tcHV0ZWRNYXRyaXg7aWYoZSl7Zm9yKHZhciBuPTA7bjwxNjsrK24pZVtuXT1yW25dO3JldHVybiBlfXJldHVybiByfTt2YXIgZD1bMCwwLDBdO3Aucm90YXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMuYW5nbGUubW92ZSh0LGUsciksbil7dGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIGk9dGhpcy5jb21wdXRlZE1hdHJpeDtkWzBdPWlbMl0sZFsxXT1pWzZdLGRbMl09aVsxMF07Zm9yKHZhciBvPXRoaXMuY29tcHV0ZWRVcCxzPXRoaXMuY29tcHV0ZWRSaWdodCxsPXRoaXMuY29tcHV0ZWRUb3dhcmQsYz0wO2M8MzsrK2MpaVs0KmNdPW9bY10saVs0KmMrMV09c1tjXSxpWzQqYysyXT1sW2NdO2EoaSxpLG4sZCk7Zm9yKGM9MDtjPDM7KytjKW9bY109aVs0KmNdLHNbY109aVs0KmMrMV07dGhpcy51cC5zZXQodCxvWzBdLG9bMV0sb1syXSksdGhpcy5yaWdodC5zZXQodCxzWzBdLHNbMV0sc1syXSl9fSxwLnBhbj1mdW5jdGlvbih0LGUscixuKXtlPWV8fDAscj1yfHwwLG49bnx8MCx0aGlzLnJlY2FsY01hdHJpeCh0KTt2YXIgaT10aGlzLmNvbXB1dGVkTWF0cml4LGE9KE1hdGguZXhwKHRoaXMuY29tcHV0ZWRSYWRpdXNbMF0pLGlbMV0pLG89aVs1XSxzPWlbOV0sbD1jKGEsbyxzKTthLz1sLG8vPWwscy89bDt2YXIgdT1pWzBdLGY9aVs0XSxoPWlbOF0scD11KmErZipvK2gqcyxkPWModS09YSpwLGYtPW8qcCxoLT1zKnApLG09KHUvPWQpKmUrYSpyLGc9KGYvPWQpKmUrbypyLHY9KGgvPWQpKmUrcypyO3RoaXMuY2VudGVyLm1vdmUodCxtLGcsdik7dmFyIHk9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7eT1NYXRoLm1heCgxZS00LHkrbiksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2coeSkpfSxwLnRyYW5zbGF0ZT1mdW5jdGlvbih0LGUscixuKXt0aGlzLmNlbnRlci5tb3ZlKHQsZXx8MCxyfHwwLG58fDApfSxwLnNldE1hdHJpeD1mdW5jdGlvbih0LGUscixuKXt2YXIgYT0xOyJudW1iZXIiPT10eXBlb2YgciYmKGE9MHxyKSwoYTwwfHxhPjMpJiYoYT0xKTt2YXIgbz0oYSsyKSUzO2V8fCh0aGlzLnJlY2FsY01hdHJpeCh0KSxlPXRoaXMuY29tcHV0ZWRNYXRyaXgpO3ZhciBzPWVbYV0sbD1lW2ErNF0sZj1lW2ErOF07aWYobil7dmFyIGg9TWF0aC5hYnMocykscD1NYXRoLmFicyhsKSxkPU1hdGguYWJzKGYpLG09TWF0aC5tYXgoaCxwLGQpO2g9PT1tPyhzPXM8MD8tMToxLGw9Zj0wKTpkPT09bT8oZj1mPDA/LTE6MSxzPWw9MCk6KGw9bDwwPy0xOjEscz1mPTApfWVsc2V7dmFyIGc9YyhzLGwsZik7cy89ZyxsLz1nLGYvPWd9dmFyIHYseSx4PWVbb10sYj1lW28rNF0sXz1lW28rOF0sdz14KnMrYipsK18qZixUPWMoeC09cyp3LGItPWwqdyxfLT1mKncpLGs9bCooXy89VCktZiooYi89VCksQT1mKih4Lz1UKS1zKl8sTT1zKmItbCp4LFM9YyhrLEEsTSk7aWYoay89UyxBLz1TLE0vPVMsdGhpcy5jZW50ZXIuanVtcCh0LHEsRyxZKSx0aGlzLnJhZGl1cy5pZGxlKHQpLHRoaXMudXAuanVtcCh0LHMsbCxmKSx0aGlzLnJpZ2h0Lmp1bXAodCx4LGIsXyksMj09PWEpe3ZhciBFPWVbMV0sTD1lWzVdLEM9ZVs5XSxQPUUqeCtMKmIrQypfLEk9RSprK0wqQStDKk07dj1SPDA/LU1hdGguUEkvMjpNYXRoLlBJLzIseT1NYXRoLmF0YW4yKEksUCl9ZWxzZXt2YXIgTz1lWzJdLHo9ZVs2XSxEPWVbMTBdLFI9TypzK3oqbCtEKmYsRj1PKngreipiK0QqXyxCPU8qayt6KkErRCpNO3Y9TWF0aC5hc2luKHUoUikpLHk9TWF0aC5hdGFuMihCLEYpfXRoaXMuYW5nbGUuanVtcCh0LHksdiksdGhpcy5yZWNhbGNNYXRyaXgodCk7dmFyIE49ZVsyXSxqPWVbNl0sVT1lWzEwXSxWPXRoaXMuY29tcHV0ZWRNYXRyaXg7aShWLGUpO3ZhciBIPVZbMTVdLHE9VlsxMl0vSCxHPVZbMTNdL0gsWT1WWzE0XS9ILFc9TWF0aC5leHAodGhpcy5jb21wdXRlZFJhZGl1c1swXSk7dGhpcy5jZW50ZXIuanVtcCh0LHEtTipXLEctaipXLFktVSpXKX0scC5sYXN0VD1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heCh0aGlzLmNlbnRlci5sYXN0VCgpLHRoaXMudXAubGFzdFQoKSx0aGlzLnJpZ2h0Lmxhc3RUKCksdGhpcy5yYWRpdXMubGFzdFQoKSx0aGlzLmFuZ2xlLmxhc3RUKCkpfSxwLmlkbGU9ZnVuY3Rpb24odCl7dGhpcy5jZW50ZXIuaWRsZSh0KSx0aGlzLnVwLmlkbGUodCksdGhpcy5yaWdodC5pZGxlKHQpLHRoaXMucmFkaXVzLmlkbGUodCksdGhpcy5hbmdsZS5pZGxlKHQpfSxwLmZsdXNoPWZ1bmN0aW9uKHQpe3RoaXMuY2VudGVyLmZsdXNoKHQpLHRoaXMudXAuZmx1c2godCksdGhpcy5yaWdodC5mbHVzaCh0KSx0aGlzLnJhZGl1cy5mbHVzaCh0KSx0aGlzLmFuZ2xlLmZsdXNoKHQpfSxwLnNldERpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7ZT4wJiZ0aGlzLnJhZGl1cy5zZXQodCxNYXRoLmxvZyhlKSl9LHAubG9va0F0PWZ1bmN0aW9uKHQsZSxyLG4pe3RoaXMucmVjYWxjTWF0cml4KHQpLGU9ZXx8dGhpcy5jb21wdXRlZEV5ZSxyPXJ8fHRoaXMuY29tcHV0ZWRDZW50ZXI7dmFyIGk9KG49bnx8dGhpcy5jb21wdXRlZFVwKVswXSxhPW5bMV0sbz1uWzJdLHM9YyhpLGEsbyk7aWYoIShzPDFlLTYpKXtpLz1zLGEvPXMsby89czt2YXIgbD1lWzBdLXJbMF0sZj1lWzFdLXJbMV0saD1lWzJdLXJbMl0scD1jKGwsZixoKTtpZighKHA8MWUtNikpe2wvPXAsZi89cCxoLz1wO3ZhciBkPXRoaXMuY29tcHV0ZWRSaWdodCxtPWRbMF0sZz1kWzFdLHY9ZFsyXSx5PWkqbSthKmcrbyp2LHg9YyhtLT15KmksZy09eSphLHYtPXkqbyk7aWYoISh4PC4wMSYmKHg9YyhtPWEqaC1vKmYsZz1vKmwtaSpoLHY9aSpmLWEqbCkpPDFlLTYpKXttLz14LGcvPXgsdi89eCx0aGlzLnVwLnNldCh0LGksYSxvKSx0aGlzLnJpZ2h0LnNldCh0LG0sZyx2KSx0aGlzLmNlbnRlci5zZXQodCxyWzBdLHJbMV0sclsyXSksdGhpcy5yYWRpdXMuc2V0KHQsTWF0aC5sb2cocCkpO3ZhciBiPWEqdi1vKmcsXz1vKm0taSp2LHc9aSpnLWEqbSxUPWMoYixfLHcpLGs9aSpsK2EqZitvKmgsQT1tKmwrZypmK3YqaCxNPShiLz1UKSpsKyhfLz1UKSpmKyh3Lz1UKSpoLFM9TWF0aC5hc2luKHUoaykpLEU9TWF0aC5hdGFuMihNLEEpLEw9dGhpcy5hbmdsZS5fc3RhdGUsQz1MW0wubGVuZ3RoLTFdLFA9TFtMLmxlbmd0aC0yXTtDJT0yKk1hdGguUEk7dmFyIEk9TWF0aC5hYnMoQysyKk1hdGguUEktRSksTz1NYXRoLmFicyhDLUUpLHo9TWF0aC5hYnMoQy0yKk1hdGguUEktRSk7STxPJiYoQys9MipNYXRoLlBJKSx6PE8mJihDLT0yKk1hdGguUEkpLHRoaXMuYW5nbGUuanVtcCh0aGlzLmFuZ2xlLmxhc3RUKCksQyxQKSx0aGlzLmFuZ2xlLnNldCh0LEUsUyl9fX19fSx7ImZpbHRlcmVkLXZlY3RvciI6MjQzLCJnbC1tYXQ0L2ludmVydCI6Mjg3LCJnbC1tYXQ0L3JvdGF0ZSI6MjkzLCJnbC12ZWMzL2Nyb3NzIjozNTAsImdsLXZlYzMvZG90IjozNTUsImdsLXZlYzMvbm9ybWFsaXplIjozNzJ9XSw1Nzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10KmUsYT1uKnQsbz1hLShhLXQpLHM9dC1vLGw9biplLGM9bC0obC1lKSx1PWUtYyxmPXMqdS0oaS1vKmMtcypjLW8qdSk7aWYocilyZXR1cm4gclswXT1mLHJbMV09aSxyO3JldHVybltmLGldfTt2YXIgbj0rKE1hdGgucG93KDIsMjcpKzEpfSx7fV0sNTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dCtlLGk9bi10LGE9ZS1pLG89dC0obi1pKTtpZihyKXJldHVybiByWzBdPW8rYSxyWzFdPW4scjtyZXR1cm5bbythLG5dfX0se31dLDU3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wcm90b3R5cGUvaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQpcmV0dXJuITE7aWYoIWhhc093blByb3BlcnR5LmNhbGwodCwibGVuZ3RoIikpcmV0dXJuITE7dHJ5e2lmKCJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGgpcmV0dXJuITE7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQuY2FsbClyZXR1cm4hMTtpZigiZnVuY3Rpb24iIT10eXBlb2YgdC5hcHBseSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX1yZXR1cm4hbih0KX19LHsiLi4vcHJvdG90eXBlL2lzIjo1ODZ9XSw1ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vdmFsdWUvaXMiKSxpPXQoIi4uL29iamVjdC9pcyIpLGE9dCgiLi4vc3RyaW5nL2NvZXJjZSIpLG89dCgiLi90by1zaG9ydC1zdHJpbmciKSxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucmVwbGFjZSgiJXYiLG8oZSkpfTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKCFpKHIpKXRocm93IG5ldyBUeXBlRXJyb3IocyhlLHQpKTtpZighbih0KSl7aWYoImRlZmF1bHQiaW4gcilyZXR1cm4gci5kZWZhdWx0O2lmKHIuaXNPcHRpb25hbClyZXR1cm4gbnVsbH12YXIgbz1hKHIuZXJyb3JNZXNzYWdlKTt0aHJvdyBuKG8pfHwobz1lKSxuZXcgVHlwZUVycm9yKHMobyx0KSl9fSx7Ii4uL29iamVjdC9pcyI6NTgzLCIuLi9zdHJpbmcvY29lcmNlIjo1ODcsIi4uL3ZhbHVlL2lzIjo1ODksIi4vdG8tc2hvcnQtc3RyaW5nIjo1ODJ9XSw1ODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdC50b1N0cmluZygpfWNhdGNoKGUpe3RyeXtyZXR1cm4gU3RyaW5nKHQpfWNhdGNoKHQpe3JldHVybiBudWxsfX19fSx7fV0sNTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2FmZS10by1zdHJpbmciKSxpPS9bXG5cclx1MjAyOFx1MjAyOV0vZztlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KTtyZXR1cm4gbnVsbD09PWU/IjxOb24tY29lcmNpYmxlIHRvIHN0cmluZyB2YWx1ZT4iOihlLmxlbmd0aD4xMDAmJihlPWUuc2xpY2UoMCw5OSkrIlx1MjAyNiIpLGU9ZS5yZXBsYWNlKGksKGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIlxuIjpyZXR1cm4iXFxuIjtjYXNlIlxyIjpyZXR1cm4iXFxyIjtjYXNlIlx1MjAyOCI6cmV0dXJuIlxcdTIwMjgiO2Nhc2UiXHUyMDI5IjpyZXR1cm4iXFx1MjAyOSI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgY2hhcmFjdGVyIil9fSkpKX19LHsiLi9zYWZlLXRvLXN0cmluZyI6NTgxfV0sNTgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3ZhbHVlL2lzIiksaT17b2JqZWN0OiEwLGZ1bmN0aW9uOiEwLHVuZGVmaW5lZDohMH07ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmaGFzT3duUHJvcGVydHkuY2FsbChpLHR5cGVvZiB0KX19LHsiLi4vdmFsdWUvaXMiOjU4OX1dLDU4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iKSxpPXQoIi4vaXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGkodCk/dDpuKHQsIiV2IGlzIG5vdCBhIHBsYWluIGZ1bmN0aW9uIixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjU4MCwiLi9pcyI6NTg1fV0sNTg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Z1bmN0aW9uL2lzIiksaT0vXlxzKmNsYXNzW1xzey99XS8sYT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiEhbih0KSYmIWkudGVzdChhLmNhbGwodCkpfX0seyIuLi9mdW5jdGlvbi9pcyI6NTc5fV0sNTg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL29iamVjdC9pcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuISF0LmNvbnN0cnVjdG9yJiZ0LmNvbnN0cnVjdG9yLnByb3RvdHlwZT09PXR9Y2F0Y2godCl7cmV0dXJuITF9fX0seyIuLi9vYmplY3QvaXMiOjU4M31dLDU4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi92YWx1ZS9pcyIpLGk9dCgiLi4vb2JqZWN0L2lzIiksYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSlyZXR1cm4gbnVsbDtpZihpKHQpKXt2YXIgZT10LnRvU3RyaW5nO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiBudWxsO2lmKGU9PT1hKXJldHVybiBudWxsfXRyeXtyZXR1cm4iIit0fWNhdGNoKHQpe3JldHVybiBudWxsfX19LHsiLi4vb2JqZWN0L2lzIjo1ODMsIi4uL3ZhbHVlL2lzIjo1ODl9XSw1ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliL3Jlc29sdmUtZXhjZXB0aW9uIiksaT10KCIuL2lzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQpP3Q6bih0LCJDYW5ub3QgdXNlICV2Iixhcmd1bWVudHNbMV0pfX0seyIuLi9saWIvcmVzb2x2ZS1leGNlcHRpb24iOjU4MCwiLi9pcyI6NTg5fV0sNTg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dH19LHt9XSw1OTA6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoImJpdC10d2lkZGxlIiksaT10KCJkdXAiKSxhPXQoImJ1ZmZlciIpLkJ1ZmZlcjtlLl9fVFlQRURBUlJBWV9QT09MfHwoZS5fX1RZUEVEQVJSQVlfUE9PTD17VUlOVDg6aShbMzIsMF0pLFVJTlQxNjppKFszMiwwXSksVUlOVDMyOmkoWzMyLDBdKSxCSUdVSU5UNjQ6aShbMzIsMF0pLElOVDg6aShbMzIsMF0pLElOVDE2OmkoWzMyLDBdKSxJTlQzMjppKFszMiwwXSksQklHSU5UNjQ6aShbMzIsMF0pLEZMT0FUOmkoWzMyLDBdKSxET1VCTEU6aShbMzIsMF0pLERBVEE6aShbMzIsMF0pLFVJTlQ4QzppKFszMiwwXSksQlVGRkVSOmkoWzMyLDBdKX0pO3ZhciBvPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhDbGFtcGVkQXJyYXkscz0idW5kZWZpbmVkIiE9dHlwZW9mIEJpZ1VpbnQ2NEFycmF5LGw9InVuZGVmaW5lZCIhPXR5cGVvZiBCaWdJbnQ2NEFycmF5LGM9ZS5fX1RZUEVEQVJSQVlfUE9PTDtjLlVJTlQ4Q3x8KGMuVUlOVDhDPWkoWzMyLDBdKSksYy5CSUdVSU5UNjR8fChjLkJJR1VJTlQ2ND1pKFszMiwwXSkpLGMuQklHSU5UNjR8fChjLkJJR0lOVDY0PWkoWzMyLDBdKSksYy5CVUZGRVJ8fChjLkJVRkZFUj1pKFszMiwwXSkpO3ZhciB1PWMuREFUQSxmPWMuQlVGRkVSO2Z1bmN0aW9uIGgodCl7aWYodCl7dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPW4ubG9nMihlKTt1W3JdLnB1c2godCl9fWZ1bmN0aW9uIHAodCl7dD1uLm5leHRQb3cyKHQpO3ZhciBlPW4ubG9nMih0KSxyPXVbZV07cmV0dXJuIHIubGVuZ3RoPjA/ci5wb3AoKTpuZXcgQXJyYXlCdWZmZXIodCl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkocCh0KSwwLHQpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIG5ldyBVaW50MTZBcnJheShwKDIqdCksMCx0KX1mdW5jdGlvbiBnKHQpe3JldHVybiBuZXcgVWludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbmV3IEludDhBcnJheShwKHQpLDAsdCl9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbmV3IEludDE2QXJyYXkocCgyKnQpLDAsdCl9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbmV3IEludDMyQXJyYXkocCg0KnQpLDAsdCl9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShwKDQqdCksMCx0KX1mdW5jdGlvbiBfKHQpe3JldHVybiBuZXcgRmxvYXQ2NEFycmF5KHAoOCp0KSwwLHQpfWZ1bmN0aW9uIHcodCl7cmV0dXJuIG8/bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHAodCksMCx0KTpkKHQpfWZ1bmN0aW9uIFQodCl7cmV0dXJuIHM/bmV3IEJpZ1VpbnQ2NEFycmF5KHAoOCp0KSwwLHQpOm51bGx9ZnVuY3Rpb24gayh0KXtyZXR1cm4gbD9uZXcgQmlnSW50NjRBcnJheShwKDgqdCksMCx0KTpudWxsfWZ1bmN0aW9uIEEodCl7cmV0dXJuIG5ldyBEYXRhVmlldyhwKHQpLDAsdCl9ZnVuY3Rpb24gTSh0KXt0PW4ubmV4dFBvdzIodCk7dmFyIGU9bi5sb2cyKHQpLHI9ZltlXTtyZXR1cm4gci5sZW5ndGg+MD9yLnBvcCgpOm5ldyBhKHQpfXIuZnJlZT1mdW5jdGlvbih0KXtpZihhLmlzQnVmZmVyKHQpKWZbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KTtlbHNle2lmKCJbb2JqZWN0IEFycmF5QnVmZmVyXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJih0PXQuYnVmZmVyKSwhdClyZXR1cm47dmFyIGU9dC5sZW5ndGh8fHQuYnl0ZUxlbmd0aCxyPTB8bi5sb2cyKGUpO3Vbcl0ucHVzaCh0KX19LHIuZnJlZVVpbnQ4PXIuZnJlZVVpbnQxNj1yLmZyZWVVaW50MzI9ci5mcmVlQmlnVWludDY0PXIuZnJlZUludDg9ci5mcmVlSW50MTY9ci5mcmVlSW50MzI9ci5mcmVlQmlnSW50NjQ9ci5mcmVlRmxvYXQzMj1yLmZyZWVGbG9hdD1yLmZyZWVGbG9hdDY0PXIuZnJlZURvdWJsZT1yLmZyZWVVaW50OENsYW1wZWQ9ci5mcmVlRGF0YVZpZXc9ZnVuY3Rpb24odCl7aCh0LmJ1ZmZlcil9LHIuZnJlZUFycmF5QnVmZmVyPWgsci5mcmVlQnVmZmVyPWZ1bmN0aW9uKHQpe2Zbbi5sb2cyKHQubGVuZ3RoKV0ucHVzaCh0KX0sci5tYWxsb2M9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT1lfHwiYXJyYXlidWZmZXIiPT09ZSlyZXR1cm4gcCh0KTtzd2l0Y2goZSl7Y2FzZSJ1aW50OCI6cmV0dXJuIGQodCk7Y2FzZSJ1aW50MTYiOnJldHVybiBtKHQpO2Nhc2UidWludDMyIjpyZXR1cm4gZyh0KTtjYXNlImludDgiOnJldHVybiB2KHQpO2Nhc2UiaW50MTYiOnJldHVybiB5KHQpO2Nhc2UiaW50MzIiOnJldHVybiB4KHQpO2Nhc2UiZmxvYXQiOmNhc2UiZmxvYXQzMiI6cmV0dXJuIGIodCk7Y2FzZSJkb3VibGUiOmNhc2UiZmxvYXQ2NCI6cmV0dXJuIF8odCk7Y2FzZSJ1aW50OF9jbGFtcGVkIjpyZXR1cm4gdyh0KTtjYXNlImJpZ2ludDY0IjpyZXR1cm4gayh0KTtjYXNlImJpZ3VpbnQ2NCI6cmV0dXJuIFQodCk7Y2FzZSJidWZmZXIiOnJldHVybiBNKHQpO2Nhc2UiZGF0YSI6Y2FzZSJkYXRhdmlldyI6cmV0dXJuIEEodCk7ZGVmYXVsdDpyZXR1cm4gbnVsbH1yZXR1cm4gbnVsbH0sci5tYWxsb2NBcnJheUJ1ZmZlcj1wLHIubWFsbG9jVWludDg9ZCxyLm1hbGxvY1VpbnQxNj1tLHIubWFsbG9jVWludDMyPWcsci5tYWxsb2NJbnQ4PXYsci5tYWxsb2NJbnQxNj15LHIubWFsbG9jSW50MzI9eCxyLm1hbGxvY0Zsb2F0MzI9ci5tYWxsb2NGbG9hdD1iLHIubWFsbG9jRmxvYXQ2ND1yLm1hbGxvY0RvdWJsZT1fLHIubWFsbG9jVWludDhDbGFtcGVkPXcsci5tYWxsb2NCaWdVaW50NjQ9VCxyLm1hbGxvY0JpZ0ludDY0PWssci5tYWxsb2NEYXRhVmlldz1BLHIubWFsbG9jQnVmZmVyPU0sci5jbGVhckNhY2hlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTA7dDwzMjsrK3QpYy5VSU5UOFt0XS5sZW5ndGg9MCxjLlVJTlQxNlt0XS5sZW5ndGg9MCxjLlVJTlQzMlt0XS5sZW5ndGg9MCxjLklOVDhbdF0ubGVuZ3RoPTAsYy5JTlQxNlt0XS5sZW5ndGg9MCxjLklOVDMyW3RdLmxlbmd0aD0wLGMuRkxPQVRbdF0ubGVuZ3RoPTAsYy5ET1VCTEVbdF0ubGVuZ3RoPTAsYy5CSUdVSU5UNjRbdF0ubGVuZ3RoPTAsYy5CSUdJTlQ2NFt0XS5sZW5ndGg9MCxjLlVJTlQ4Q1t0XS5sZW5ndGg9MCx1W3RdLmxlbmd0aD0wLGZbdF0ubGVuZ3RoPTB9fSkuY2FsbCh0aGlzKX0pLmNhbGwodGhpcywidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93Ont9KX0seyJiaXQtdHdpZGRsZSI6MTAxLGJ1ZmZlcjoxMTIsZHVwOjE3N31dLDU5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQpe3RoaXMucm9vdHM9bmV3IEFycmF5KHQpLHRoaXMucmFua3M9bmV3IEFycmF5KHQpO2Zvcih2YXIgZT0wO2U8dDsrK2UpdGhpcy5yb290c1tlXT1lLHRoaXMucmFua3NbZV09MH1lLmV4cG9ydHM9bjt2YXIgaT1uLnByb3RvdHlwZTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSwibGVuZ3RoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucm9vdHMubGVuZ3RofX0pLGkubWFrZVNldD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucm9vdHMubGVuZ3RoO3JldHVybiB0aGlzLnJvb3RzLnB1c2godCksdGhpcy5yYW5rcy5wdXNoKDApLHR9LGkuZmluZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dCxyPXRoaXMucm9vdHM7clt0XSE9PXQ7KXQ9clt0XTtmb3IoO3JbZV0hPT10Oyl7dmFyIG49cltlXTtyW2VdPXQsZT1ufXJldHVybiB0fSxpLmxpbms9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmZpbmQodCksbj10aGlzLmZpbmQoZSk7aWYociE9PW4pe3ZhciBpPXRoaXMucmFua3MsYT10aGlzLnJvb3RzLG89aVtyXSxzPWlbbl07bzxzP2Fbcl09bjpzPG8/YVtuXT1yOihhW25dPXIsKytpW3JdKX19fSx7fV0sNTkyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT10Lmxlbmd0aD90OmU/KHJ8fHQuc29ydChlKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xLG49dC5sZW5ndGgsaT10WzBdLGE9dFswXSxvPTE7bzxuOysrbylpZihhPWksZShpPXRbb10sYSkpe2lmKG89PT1yKXtyKys7Y29udGludWV9dFtyKytdPWl9cmV0dXJuIHQubGVuZ3RoPXIsdH0odCxlKSk6KHJ8fHQuc29ydCgpLGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0xLHI9dC5sZW5ndGgsbj10WzBdLGk9dFswXSxhPTE7YTxyOysrYSxpPW4paWYoaT1uLChuPXRbYV0pIT09aSl7aWYoYT09PWUpe2UrKztjb250aW51ZX10W2UrK109bn1yZXR1cm4gdC5sZW5ndGg9ZSx0fSh0KSl9fSx7fV0sNTkzOltmdW5jdGlvbih0LGUscil7dmFyIG49L1tcJ1wiXS87ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuLnRlc3QodC5jaGFyQXQoMCkpJiYodD10LnN1YnN0cigxKSksbi50ZXN0KHQuY2hhckF0KHQubGVuZ3RoLTEpKSYmKHQ9dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKSksdCk6IiJ9fSx7fV0sNTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7QXJyYXkuaXNBcnJheShyKXx8KHI9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMikpO2Zvcih2YXIgbj0wLGk9ci5sZW5ndGg7bjxpO24rKyl7dmFyIGE9cltuXTtmb3IodmFyIG8gaW4gYSlpZigodm9pZCAwPT09ZVtvXXx8QXJyYXkuaXNBcnJheShlW29dKXx8dFtvXSE9PWVbb10pJiZvIGluIGUpe3ZhciBzO2lmKCEwPT09YVtvXSlzPWVbb107ZWxzZXtpZighMT09PWFbb10pY29udGludWU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGFbb10mJnZvaWQgMD09PShzPWFbb10oZVtvXSx0LGUpKSljb250aW51ZX10W29dPXN9fXJldHVybiB0fX0se31dLDU5NTpbZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3RyeXtpZighdC5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9dmFyIHI9dC5sb2NhbFN0b3JhZ2VbZV07cmV0dXJuIG51bGwhPXImJiJ0cnVlIj09PVN0cmluZyhyKS50b0xvd2VyQ2FzZSgpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gdDt2YXIgbj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighbil7aWYocigidGhyb3dEZXByZWNhdGlvbiIpKXRocm93IG5ldyBFcnJvcihlKTtyKCJ0cmFjZURlcHJlY2F0aW9uIik/Y29uc29sZS50cmFjZShlKTpjb25zb2xlLndhcm4oZSksbj0hMH1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0pLmNhbGwodGhpcyl9KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp7fSl9LHt9XSw1OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8KGU9e30pO3JldHVybiBuKHQsZS5jYW52YXN8fGksZS5jb250ZXh0fHxhLGUpfTt2YXIgbj10KCIuL2xpYi92dGV4dCIpLGk9bnVsbCxhPW51bGw7InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudCYmKChpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpKS53aWR0aD04MTkyLGkuaGVpZ2h0PTEwMjQsYT1pLmdldENvbnRleHQoIjJkIikpfSx7Ii4vbGliL3Z0ZXh0Ijo1OTd9XSw1OTc6W2Z1bmN0aW9uKHQsZSxyKXtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9NjQsbz0xLjI1LHM9e2JyZWFrbGluZXM6ITEsYm9sZHM6ITEsaXRhbGljczohMSxzdWJzY3JpcHRzOiExLHN1cGVyc2NyaXB0czohMX07biYmKG4uc2l6ZSYmbi5zaXplPjAmJihhPW4uc2l6ZSksbi5saW5lU3BhY2luZyYmbi5saW5lU3BhY2luZz4wJiYobz1uLmxpbmVTcGFjaW5nKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3MuYnJlYWtsaW5lcyYmKHMuYnJlYWtsaW5lcz0hIW4uc3R5bGV0YWdzLmJyZWFrbGluZXMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5ib2xkcyYmKHMuYm9sZHM9ISFuLnN0eWxldGFncy5ib2xkcyksbi5zdHlsZXRhZ3MmJm4uc3R5bGV0YWdzLml0YWxpY3MmJihzLml0YWxpY3M9ISFuLnN0eWxldGFncy5pdGFsaWNzKSxuLnN0eWxldGFncyYmbi5zdHlsZXRhZ3Muc3Vic2NyaXB0cyYmKHMuc3Vic2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1YnNjcmlwdHMpLG4uc3R5bGV0YWdzJiZuLnN0eWxldGFncy5zdXBlcnNjcmlwdHMmJihzLnN1cGVyc2NyaXB0cz0hIW4uc3R5bGV0YWdzLnN1cGVyc2NyaXB0cykpO3JldHVybiByLmZvbnQ9W24uZm9udFN0eWxlLG4uZm9udFZhcmlhbnQsbi5mb250V2VpZ2h0LGErInB4IixuLmZvbnRdLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuam9pbigiICIpLHIudGV4dEFsaWduPSJzdGFydCIsci50ZXh0QmFzZWxpbmU9ImFscGhhYmV0aWMiLHIuZGlyZWN0aW9uPSJsdHIiLGgoZnVuY3Rpb24odCxlLHIsbixhLG8pe3I9ci5yZXBsYWNlKC9cbi9nLCIiKSxyPSEwPT09by5icmVha2xpbmVzP3IucmVwbGFjZSgvXDxiclw+L2csIlxuIik6ci5yZXBsYWNlKC9cPGJyXD4vZywiICIpO3ZhciBzPSIiLGw9W107Zm9yKHA9MDtwPHIubGVuZ3RoOysrcClsW3BdPXM7ITA9PT1vLmJvbGRzJiYobD1jKCJiIiwiYnwiLHIsbCkpOyEwPT09by5pdGFsaWNzJiYobD1jKCJpIiwiaXwiLHIsbCkpOyEwPT09by5zdXBlcnNjcmlwdHMmJihsPWMoInN1cCIsIisxIixyLGwpKTshMD09PW8uc3Vic2NyaXB0cyYmKGw9Yygic3ViIiwiLTEiLHIsbCkpO3ZhciB1PVtdLGY9IiI7Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCludWxsIT09bFtwXSYmKGYrPXJbcF0sdS5wdXNoKGxbcF0pKTt2YXIgaCxwLGQsbSxnLHY9Zi5zcGxpdCgiXG4iKSx5PXYubGVuZ3RoLHg9TWF0aC5yb3VuZChhKm4pLGI9bixfPTIqbix3PTAsVD15KngrXzt0LmhlaWdodDxUJiYodC5oZWlnaHQ9VCk7ZS5maWxsU3R5bGU9IiMwMDAiLGUuZmlsbFJlY3QoMCwwLHQud2lkdGgsdC5oZWlnaHQpLGUuZmlsbFN0eWxlPSIjZmZmIjt2YXIgaz0wLEE9IiI7ZnVuY3Rpb24gTSgpe2lmKCIiIT09QSl7dmFyIHQ9ZS5tZWFzdXJlVGV4dChBKS53aWR0aDtlLmZpbGxUZXh0KEEsYitkLF8rbSksZCs9dH19ZnVuY3Rpb24gUygpe3JldHVybiBNYXRoLnJvdW5kKGcpKyJweCAifWZ1bmN0aW9uIEUodCxyKXt2YXIgbj0iIitlLmZvbnQ7aWYoITA9PT1vLnN1YnNjcmlwdHMpe3ZhciBpPXQuaW5kZXhPZigiLSIpLGE9ci5pbmRleE9mKCItIikscz1pPi0xP3BhcnNlSW50KHRbMStpXSk6MCxsPWE+LTE/cGFyc2VJbnQoclsxK2FdKTowO3MhPT1sJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGwtcyksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0rPS4yNSp4KihsLXMpfWlmKCEwPT09by5zdXBlcnNjcmlwdHMpe3ZhciBjPXQuaW5kZXhPZigiKyIpLHU9ci5pbmRleE9mKCIrIiksZj1jPi0xP3BhcnNlSW50KHRbMStjXSk6MCxoPXU+LTE/cGFyc2VJbnQoclsxK3VdKTowO2YhPT1oJiYobj1uLnJlcGxhY2UoUygpLCI/cHggIiksZyo9TWF0aC5wb3coLjc1LGgtZiksbj1uLnJlcGxhY2UoIj9weCAiLFMoKSkpLG0tPS4yNSp4KihoLWYpfWlmKCEwPT09by5ib2xkcyl7dmFyIHA9dC5pbmRleE9mKCJifCIpPi0xLGQ9ci5pbmRleE9mKCJifCIpPi0xOyFwJiZkJiYobj12P24ucmVwbGFjZSgiaXRhbGljICIsIml0YWxpYyBib2xkICIpOiJib2xkICIrbikscCYmIWQmJihuPW4ucmVwbGFjZSgiYm9sZCAiLCIiKSl9aWYoITA9PT1vLml0YWxpY3Mpe3ZhciB2PXQuaW5kZXhPZigiaXwiKT4tMSx5PXIuaW5kZXhPZigiaXwiKT4tMTshdiYmeSYmKG49Iml0YWxpYyAiK24pLHYmJiF5JiYobj1uLnJlcGxhY2UoIml0YWxpYyAiLCIiKSl9ZS5mb250PW59Zm9yKGg9MDtoPHk7KytoKXt2YXIgTD12W2hdKyJcbiI7Zm9yKGQ9MCxtPWgqeCxnPW4sQT0iIixwPTA7cDxMLmxlbmd0aDsrK3Ape3ZhciBDPXArazx1Lmxlbmd0aD91W3Ara106dVt1Lmxlbmd0aC0xXTtzPT09Qz9BKz1MW3BdOihNKCksQT1MW3BdLHZvaWQgMCE9PUMmJihFKHMsQykscz1DKSl9TSgpLGsrPUwubGVuZ3RoO3ZhciBQPTB8TWF0aC5yb3VuZChkKzIqYik7dzxQJiYodz1QKX12YXIgST13LE89Xyt4Knk7cmV0dXJuIGkoZS5nZXRJbWFnZURhdGEoMCwwLEksTykuZGF0YSxbTyxJLDRdKS5waWNrKC0xLC0xLDApLnRyYW5zcG9zZSgxLDApfShlLHIsdCxhLG8scyksbixhKX0sZS5leHBvcnRzLnByb2Nlc3NQaXhlbHM9aDt2YXIgbj10KCJzdXJmYWNlLW5ldHMiKSxpPXQoIm5kYXJyYXkiKSxhPXQoInNpbXBsaWZ5LXBsYW5hci1ncmFwaCIpLG89dCgiY2xlYW4tcHNsZyIpLHM9dCgiY2R0MmQiKSxsPXQoInBsYW5hci1ncmFwaC10by1wb2x5bGluZSIpO2Z1bmN0aW9uIGModCxlLHIsbil7Zm9yKHZhciBpPSI8Iit0KyI+IixhPSI8LyIrdCsiPiIsbz1pLmxlbmd0aCxzPWEubGVuZ3RoLGw9IisiPT09ZVswXXx8Ii0iPT09ZVswXSxjPTAsdT0tcztjPi0xJiYtMSE9PShjPXIuaW5kZXhPZihpLGMpKSYmLTEhPT0odT1yLmluZGV4T2YoYSxjK28pKSYmISh1PD1jKTspe2Zvcih2YXIgZj1jO2Y8dStzOysrZilpZihmPGMrb3x8Zj49dSluW2ZdPW51bGwscj1yLnN1YnN0cigwLGYpKyIgIityLnN1YnN0cihmKzEpO2Vsc2UgaWYobnVsbCE9PW5bZl0pe3ZhciBoPW5bZl0uaW5kZXhPZihlWzBdKTstMT09PWg/bltmXSs9ZTpsJiYobltmXT1uW2ZdLnN1YnN0cigwLGgrMSkrKDErcGFyc2VJbnQobltmXVtoKzFdKSkrbltmXS5zdWJzdHIoaCsyKSl9dmFyIHA9YytvLGQ9ci5zdWJzdHIocCx1LXApLmluZGV4T2YoaSk7Yz0tMSE9PWQ/ZDp1K3N9cmV0dXJuIG59ZnVuY3Rpb24gdSh0LGUpe3ZhciByPW4odCwxMjgpO3JldHVybiBlP2Eoci5jZWxscyxyLnBvc2l0aW9ucywuMjUpOntlZGdlczpyLmNlbGxzLHBvc2l0aW9uczpyLnBvc2l0aW9uc319ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT11KHQsbiksYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPWUudGV4dEFsaWdufHwic3RhcnQiLGk9ZS50ZXh0QmFzZWxpbmV8fCJhbHBoYWJldGljIixhPVsxPDwzMCwxPDwzMF0sbz1bMCwwXSxzPXQubGVuZ3RoLGw9MDtsPHM7KytsKWZvcih2YXIgYz10W2xdLHU9MDt1PDI7Kyt1KWFbdV09MHxNYXRoLm1pbihhW3VdLGNbdV0pLG9bdV09MHxNYXRoLm1heChvW3VdLGNbdV0pO3ZhciBmPTA7c3dpdGNoKG4pe2Nhc2UiY2VudGVyIjpmPS0uNSooYVswXStvWzBdKTticmVhaztjYXNlInJpZ2h0IjpjYXNlImVuZCI6Zj0tb1swXTticmVhaztjYXNlImxlZnQiOmNhc2Uic3RhcnQiOmY9LWFbMF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29nbml6ZWQgdGV4dEFsaWduOiAnIituKyInIil9dmFyIGg9MDtzd2l0Y2goaSl7Y2FzZSJoYW5naW5nIjpjYXNlInRvcCI6aD0tYVsxXTticmVhaztjYXNlIm1pZGRsZSI6aD0tLjUqKGFbMV0rb1sxXSk7YnJlYWs7Y2FzZSJhbHBoYWJldGljIjpjYXNlImlkZW9ncmFwaGljIjpoPS0zKnI7YnJlYWs7Y2FzZSJib3R0b20iOmg9LW9bMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInZlY3Rvcml6ZS10ZXh0OiBVbnJlY29naW5pemVkIHRleHRCYXNlbGluZTogJyIraSsiJyIpfXZhciBwPTEvcjtyZXR1cm4ibGluZUhlaWdodCJpbiBlP3AqPStlLmxpbmVIZWlnaHQ6IndpZHRoImluIGU/cD1lLndpZHRoLyhvWzBdLWFbMF0pOiJoZWlnaHQiaW4gZSYmKHA9ZS5oZWlnaHQvKG9bMV0tYVsxXSkpLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm5bcCoodFswXStmKSxwKih0WzFdK2gpXX0pKX0oaS5wb3NpdGlvbnMsZSxyKSxjPWkuZWRnZXMsZj0iY2N3Ij09PWUub3JpZW50YXRpb247aWYobyhhLGMpLGUucG9seWdvbnN8fGUucG9seWdvbnx8ZS5wb2x5bGluZSl7Zm9yKHZhciBoPWwoYyxhKSxwPW5ldyBBcnJheShoLmxlbmd0aCksZD0wO2Q8aC5sZW5ndGg7KytkKXtmb3IodmFyIG09aFtkXSxnPW5ldyBBcnJheShtLmxlbmd0aCksdj0wO3Y8bS5sZW5ndGg7Kyt2KXtmb3IodmFyIHk9bVt2XSx4PW5ldyBBcnJheSh5Lmxlbmd0aCksYj0wO2I8eS5sZW5ndGg7KytiKXhbYl09YVt5W2JdXS5zbGljZSgpO2YmJngucmV2ZXJzZSgpLGdbdl09eH1wW2RdPWd9cmV0dXJuIHB9cmV0dXJuIGUudHJpYW5nbGVzfHxlLnRyaWFuZ3VsYXRlfHxlLnRyaWFuZ2xlP3tjZWxsczpzKGEsYyx7ZGVsYXVuYXk6ITEsZXh0ZXJpb3I6ITEsaW50ZXJpb3I6ITB9KSxwb3NpdGlvbnM6YX06e2VkZ2VzOmMscG9zaXRpb25zOmF9fWZ1bmN0aW9uIGgodCxlLHIpe3RyeXtyZXR1cm4gZih0LGUsciwhMCl9Y2F0Y2godCl7fXRyeXtyZXR1cm4gZih0LGUsciwhMSl9Y2F0Y2godCl7fXJldHVybiBlLnBvbHlnb25zfHxlLnBvbHlsaW5lfHxlLnBvbHlnb24/W106ZS50cmlhbmdsZXN8fGUudHJpYW5ndWxhdGV8fGUudHJpYW5nbGU/e2NlbGxzOltdLHBvc2l0aW9uczpbXX06e2VkZ2VzOltdLHBvc2l0aW9uczpbXX19fSx7Y2R0MmQ6MTEzLCJjbGVhbi1wc2xnIjoxMjIsbmRhcnJheTo0NjIsInBsYW5hci1ncmFwaC10by1wb2x5bGluZSI6NDc4LCJzaW1wbGlmeS1wbGFuYXItZ3JhcGgiOjUzOCwic3VyZmFjZS1uZXRzIjo1NjV9XSw1OTg6W2Z1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBzZXN8fCFzZXMub2t8fHNlcy5vaygpKXsidW5kZWZpbmVkIiE9dHlwZW9mIHNlcyYmKHNlcy53ZWFrTWFwUGVybWl0SG9zdE9iamVjdHM9bSk7dmFyIHQ9ITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXApe3ZhciByPVdlYWtNYXA7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3ImJi9GaXJlZm94Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKTtlbHNle3ZhciBuPW5ldyByLGk9T2JqZWN0LmZyZWV6ZSh7fSk7aWYobi5zZXQoaSwxKSwxPT09bi5nZXQoaSkpcmV0dXJuIHZvaWQoZS5leHBvcnRzPVdlYWtNYXApO3Q9ITB9fU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsbz1PYmplY3QuZGVmaW5lUHJvcGVydHkscz1PYmplY3QuaXNFeHRlbnNpYmxlLGw9IndlYWttYXA6aWRlbnQ6IitNYXRoLnJhbmRvbSgpKyJfX18iO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSl7dmFyIGM9bmV3IEFycmF5QnVmZmVyKDI1KSx1PW5ldyBVaW50OEFycmF5KGMpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModSksbD0id2Vha21hcDpyYW5kOiIrQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHUsKGZ1bmN0aW9uKHQpe3JldHVybih0JTM2KS50b1N0cmluZygzNil9KSkuam9pbigiIikrIl9fXyJ9aWYobyhPYmplY3QsImdldE93blByb3BlcnR5TmFtZXMiLHt2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYSh0KS5maWx0ZXIoZyl9fSksImdldFByb3BlcnR5TmFtZXMiaW4gT2JqZWN0KXt2YXIgZj1PYmplY3QuZ2V0UHJvcGVydHlOYW1lcztvKE9iamVjdCwiZ2V0UHJvcGVydHlOYW1lcyIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBmKHQpLmZpbHRlcihnKX19KX0hZnVuY3Rpb24oKXt2YXIgdD1PYmplY3QuZnJlZXplO28oT2JqZWN0LCJmcmVlemUiLHt2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdihlKSx0KGUpfX0pO3ZhciBlPU9iamVjdC5zZWFsO28oT2JqZWN0LCJzZWFsIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHYodCksZSh0KX19KTt2YXIgcj1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7byhPYmplY3QsInByZXZlbnRFeHRlbnNpb25zIix7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHYodCkscih0KX19KX0oKTt2YXIgaD0hMSxwPTAsZD1mdW5jdGlvbigpe3RoaXMgaW5zdGFuY2VvZiBkfHx4KCk7dmFyIHQ9W10sZT1bXSxyPXArKztyZXR1cm4gT2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSx7Z2V0X19fOnt2YWx1ZTp5KChmdW5jdGlvbihuLGkpe3ZhciBhLG89dihuKTtyZXR1cm4gbz9yIGluIG8/b1tyXTppOihhPXQuaW5kZXhPZihuKSk+PTA/ZVthXTppfSkpfSxoYXNfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKGUpe3ZhciBuPXYoZSk7cmV0dXJuIG4/ciBpbiBuOnQuaW5kZXhPZihlKT49MH0pKX0sc2V0X19fOnt2YWx1ZTp5KChmdW5jdGlvbihuLGkpe3ZhciBhLG89dihuKTtyZXR1cm4gbz9vW3JdPWk6KGE9dC5pbmRleE9mKG4pKT49MD9lW2FdPWk6KGE9dC5sZW5ndGgsZVthXT1pLHRbYV09biksdGhpc30pKX0sZGVsZXRlX19fOnt2YWx1ZTp5KChmdW5jdGlvbihuKXt2YXIgaSxhLG89dihuKTtyZXR1cm4gbz9yIGluIG8mJmRlbGV0ZSBvW3JdOiEoKGk9dC5pbmRleE9mKG4pKTwwKSYmKGE9dC5sZW5ndGgtMSx0W2ldPXZvaWQgMCxlW2ldPWVbYV0sdFtpXT10W2FdLHQubGVuZ3RoPWEsZS5sZW5ndGg9YSwhMCl9KSl9fSl9O2QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSx7Z2V0Ont2YWx1ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmdldF9fXyh0LGUpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LGhhczp7dmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaGFzX19fKHQpfSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9LHNldDp7dmFsdWU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5zZXRfX18odCxlKX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxkZWxldGU6e3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRlbGV0ZV9fXyh0KX0sd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLCJmdW5jdGlvbiI9PXR5cGVvZiByP2Z1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMgaW5zdGFuY2VvZiBkfHx4KCk7dmFyIGUsbj1uZXcgcixpPXZvaWQgMCxhPSExO3JldHVybiBlPXQ/ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zZXQodCxlKSxuLmhhcyh0KXx8KGl8fChpPW5ldyBkKSxpLnNldCh0LGUpKSx0aGlzfTpmdW5jdGlvbih0LGUpe2lmKGEpdHJ5e24uc2V0KHQsZSl9Y2F0Y2gocil7aXx8KGk9bmV3IGQpLGkuc2V0X19fKHQsZSl9ZWxzZSBuLnNldCh0LGUpO3JldHVybiB0aGlzfSxPYmplY3QuY3JlYXRlKGQucHJvdG90eXBlLHtnZXRfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGk/bi5oYXModCk/bi5nZXQodCk6aS5nZXRfX18odCxlKTpuLmdldCh0LGUpfSkpfSxoYXNfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQpe3JldHVybiBuLmhhcyh0KXx8ISFpJiZpLmhhc19fXyh0KX0pKX0sc2V0X19fOnt2YWx1ZTp5KGUpfSxkZWxldGVfX186e3ZhbHVlOnkoKGZ1bmN0aW9uKHQpe3ZhciBlPSEhbi5kZWxldGUodCk7cmV0dXJuIGkmJmkuZGVsZXRlX19fKHQpfHxlfSkpfSxwZXJtaXRIb3N0T2JqZWN0c19fXzp7dmFsdWU6eSgoZnVuY3Rpb24odCl7aWYodCE9PW0pdGhyb3cgbmV3IEVycm9yKCJib2d1cyBjYWxsIHRvIHBlcm1pdEhvc3RPYmplY3RzX19fIik7YT0hMH0pKX19KX10JiYidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxuLnByb3RvdHlwZT1kLnByb3RvdHlwZSxlLmV4cG9ydHM9bixPYmplY3QuZGVmaW5lUHJvcGVydHkoV2Vha01hcC5wcm90b3R5cGUsImNvbnN0cnVjdG9yIix7dmFsdWU6V2Vha01hcCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfSgpOigidW5kZWZpbmVkIiE9dHlwZW9mIFByb3h5JiYoUHJveHk9dm9pZCAwKSxlLmV4cG9ydHM9ZCl9ZnVuY3Rpb24gbSh0KXt0LnBlcm1pdEhvc3RPYmplY3RzX19fJiZ0LnBlcm1pdEhvc3RPYmplY3RzX19fKG0pfWZ1bmN0aW9uIGcodCl7cmV0dXJuISgid2Vha21hcDoiPT10LnN1YnN0cigwLCJ3ZWFrbWFwOiIubGVuZ3RoKSYmIl9fXyI9PT10LnN1YnN0cih0Lmxlbmd0aC0zKSl9ZnVuY3Rpb24gdih0KXtpZih0IT09T2JqZWN0KHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIk5vdCBhbiBvYmplY3Q6ICIrdCk7dmFyIGU9dFtsXTtpZihlJiZlLmtleT09PXQpcmV0dXJuIGU7aWYocyh0KSl7ZT17a2V5OnR9O3RyeXtyZXR1cm4gbyh0LGwse3ZhbHVlOmUsd3JpdGFibGU6ITEsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITF9KSxlfWNhdGNoKHQpe3JldHVybn19fWZ1bmN0aW9uIHkodCl7cmV0dXJuIHQucHJvdG90eXBlPW51bGwsT2JqZWN0LmZyZWV6ZSh0KX1mdW5jdGlvbiB4KCl7aHx8InVuZGVmaW5lZCI9PXR5cGVvZiBjb25zb2xlfHwoaD0hMCxjb25zb2xlLndhcm4oIldlYWtNYXAgc2hvdWxkIGJlIGludm9rZWQgYXMgbmV3IFdlYWtNYXAoKSwgbm90IFdlYWtNYXAoKS4gVGhpcyB3aWxsIGJlIGFuIGVycm9yIGluIHRoZSBmdXR1cmUuIikpfX0oKX0se31dLDU5OTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4vaGlkZGVuLXN0b3JlLmpzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKCgib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCJXZWFrbWFwLXNoaW06IEtleSBtdXN0IGJlIG9iamVjdCIpO3ZhciByPWUudmFsdWVPZih0KTtyZXR1cm4gciYmci5pZGVudGl0eT09PXQ/cjpuKGUsdCl9fX0seyIuL2hpZGRlbi1zdG9yZS5qcyI6NjAwfV0sNjAwOltmdW5jdGlvbih0LGUscil7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2lkZW50aXR5OmV9LG49dC52YWx1ZU9mO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwidmFsdWVPZiIse3ZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyfSx3cml0YWJsZTohMH0pLHJ9fSx7fV0sNjAxOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi9jcmVhdGUtc3RvcmUuanMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdD1uKCk7cmV0dXJue2dldDpmdW5jdGlvbihlLHIpe3ZhciBuPXQoZSk7cmV0dXJuIG4uaGFzT3duUHJvcGVydHkoInZhbHVlIik/bi52YWx1ZTpyfSxzZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdChlKS52YWx1ZT1yLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4idmFsdWUiaW4gdChlKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdChlKS52YWx1ZX19fX0seyIuL2NyZWF0ZS1zdG9yZS5qcyI6NTk5fV0sNjAyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiZ2V0LWNhbnZhcy1jb250ZXh0Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKCJ3ZWJnbCIsdCl9fSx7ImdldC1jYW52YXMtY29udGV4dCI6MjQ4fV0sNjAzOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiQ2hpbmVzZSIsamRFcG9jaDoxNzIxNDI1LjUsaGFzWWVhclplcm86ITEsbWluTW9udGg6MCxmaXJzdE1vbnRoOjAsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiQ2hpbmVzZSIsZXBvY2hzOlsiQkVDIiwiRUMiXSxtb250aE51bWJlcnM6ZnVuY3Rpb24odCxlKXtpZigic3RyaW5nIj09dHlwZW9mIHQpe3ZhciByPXQubWF0Y2gobCk7cmV0dXJuIHI/clswXToiIn12YXIgbj10aGlzLl92YWxpZGF0ZVllYXIodCksaT10Lm1vbnRoKCksYT0iIit0aGlzLnRvQ2hpbmVzZU1vbnRoKG4saSk7cmV0dXJuIGUmJmEubGVuZ3RoPDImJihhPSIwIithKSx0aGlzLmlzSW50ZXJjYWxhcnlNb250aChuLGkpJiYoYSs9ImkiKSxhfSxtb250aE5hbWVzOmZ1bmN0aW9uKHQpe2lmKCJzdHJpbmciPT10eXBlb2YgdCl7dmFyIGU9dC5tYXRjaChjKTtyZXR1cm4gZT9lWzBdOiIifXZhciByPXRoaXMuX3ZhbGlkYXRlWWVhcih0KSxuPXQubW9udGgoKSxpPVsiXHU0ZTAwXHU2NzA4IiwiXHU0ZThjXHU2NzA4IiwiXHU0ZTA5XHU2NzA4IiwiXHU1NmRiXHU2NzA4IiwiXHU0ZTk0XHU2NzA4IiwiXHU1MTZkXHU2NzA4IiwiXHU0ZTAzXHU2NzA4IiwiXHU1MTZiXHU2NzA4IiwiXHU0ZTVkXHU2NzA4IiwiXHU1MzQxXHU2NzA4IiwiXHU1MzQxXHU0ZTAwXHU2NzA4IiwiXHU1MzQxXHU0ZThjXHU2NzA4Il1bdGhpcy50b0NoaW5lc2VNb250aChyLG4pLTFdO3JldHVybiB0aGlzLmlzSW50ZXJjYWxhcnlNb250aChyLG4pJiYoaT0iXHU5NWYwIitpKSxpfSxtb250aE5hbWVzU2hvcnQ6ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT10Lm1hdGNoKHUpO3JldHVybiBlP2VbMF06IiJ9dmFyIHI9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLG49dC5tb250aCgpLGk9WyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXVt0aGlzLnRvQ2hpbmVzZU1vbnRoKHIsbiktMV07cmV0dXJuIHRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHIsbikmJihpPSJcdTk1ZjAiK2kpLGl9LHBhcnNlTW9udGg6ZnVuY3Rpb24odCxlKXt0PXRoaXMuX3ZhbGlkYXRlWWVhcih0KTt2YXIgcixuPXBhcnNlSW50KGUpO2lmKGlzTmFOKG4pKSJcdTk1ZjAiPT09ZVswXSYmKHI9ITAsZT1lLnN1YnN0cmluZygxKSksIlx1NjcwOCI9PT1lW2UubGVuZ3RoLTFdJiYoZT1lLnN1YnN0cmluZygwLGUubGVuZ3RoLTEpKSxuPTErWyJcdTRlMDAiLCJcdTRlOGMiLCJcdTRlMDkiLCJcdTU2ZGIiLCJcdTRlOTQiLCJcdTUxNmQiLCJcdTRlMDMiLCJcdTUxNmIiLCJcdTRlNWQiLCJcdTUzNDEiLCJcdTUzNDFcdTRlMDAiLCJcdTUzNDFcdTRlOGMiXS5pbmRleE9mKGUpO2Vsc2V7dmFyIGk9ZVtlLmxlbmd0aC0xXTtyPSJpIj09PWl8fCJJIj09PWl9cmV0dXJuIHRoaXMudG9Nb250aEluZGV4KHQsbixyKX0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LF92YWxpZGF0ZVllYXI6ZnVuY3Rpb24odCxlKXtpZih0LnllYXImJih0PXQueWVhcigpKSwibnVtYmVyIiE9dHlwZW9mIHR8fHQ8MTg4OHx8dD4yMTExKXRocm93IGUucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIHR9LHRvTW9udGhJbmRleDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5pbnRlcmNhbGFyeU1vbnRoKHQpO2lmKHImJmUhPT1pfHxlPDF8fGU+MTIpdGhyb3cgbi5sb2NhbC5pbnZhbGlkTW9udGgucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7cmV0dXJuIGk/IXImJmU8PWk/ZS0xOmU6ZS0xfSx0b0NoaW5lc2VNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtpZihlPDB8fGU+KHI/MTI6MTEpKXRocm93IG4ubG9jYWwuaW52YWxpZE1vbnRoLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiByP2U8cj9lKzE6ZTplKzF9LGludGVyY2FsYXJ5TW9udGg6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGVZZWFyKHQpLGZbdC1mWzBdXT4+MTN9LGlzSW50ZXJjYWxhcnlNb250aDpmdW5jdGlvbih0LGUpe3QueWVhciYmKGU9KHQ9dC55ZWFyKCkpLm1vbnRoKCkpO3ZhciByPXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KTtyZXR1cm4hIXImJnI9PT1lfSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMuaW50ZXJjYWxhcnlNb250aCh0KX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIGksbz10aGlzLl92YWxpZGF0ZVllYXIodCxuLmxvY2FsLmludmFsaWR5ZWFyKSxzPWhbby1oWzBdXSxsPXM+PjkmNDA5NSxjPXM+PjUmMTUsdT0zMSZzOyhpPWEubmV3RGF0ZShsLGMsdSkpLmFkZCg0LShpLmRheU9mV2VlaygpfHw3KSwiZCIpO3ZhciBmPXRoaXMudG9KRCh0LGUsciktaS50b0pEKCk7cmV0dXJuIDErTWF0aC5mbG9vcihmLzcpfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVhcFllYXIodCk/MTM6MTJ9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdD10aGlzLl92YWxpZGF0ZVllYXIodCk7dmFyIHI9Zlt0LWZbMF1dO2lmKGU+KHI+PjEzPzEyOjExKSl0aHJvdyBuLmxvY2FsLmludmFsaWRNb250aC5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKTtyZXR1cm4gciYxPDwxMi1lPzMwOjI5fSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHMscixuLmxvY2FsLmludmFsaWREYXRlKTt0PXRoaXMuX3ZhbGlkYXRlWWVhcihpLnllYXIoKSksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBvPXRoaXMuaXNJbnRlcmNhbGFyeU1vbnRoKHQsZSkscz10aGlzLnRvQ2hpbmVzZU1vbnRoKHQsZSksbD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhLG8scztpZigib2JqZWN0Ij09dHlwZW9mIHQpbz10LGE9ZXx8e307ZWxzZXt2YXIgbDtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJMdW5hciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMwKSl0aHJvdyBuZXcgRXJyb3IoIkx1bmFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMCIpOyJvYmplY3QiPT10eXBlb2Ygbj8obD0hMSxhPW4pOihsPSEhbixhPWl8fHt9KSxvPXt5ZWFyOnQsbW9udGg6ZSxkYXk6cixpc0ludGVyY2FsYXJ5Omx9fXM9by5kYXktMTt2YXIgYyx1PWZbby55ZWFyLWZbMF1dLHA9dT4+MTM7Yz1wJiYoby5tb250aD5wfHxvLmlzSW50ZXJjYWxhcnkpP28ubW9udGg6by5tb250aC0xO2Zvcih2YXIgZD0wO2Q8YztkKyspe3MrPXUmMTw8MTItZD8zMDoyOX12YXIgbT1oW28ueWVhci1oWzBdXSxnPW5ldyBEYXRlKG0+PjkmNDA5NSwobT4+NSYxNSktMSwoMzEmbSkrcyk7cmV0dXJuIGEueWVhcj1nLmdldEZ1bGxZZWFyKCksYS5tb250aD0xK2cuZ2V0TW9udGgoKSxhLmRheT1nLmdldERhdGUoKSxhfSh0LHMscixvKTtyZXR1cm4gYS50b0pEKGwueWVhcixsLm1vbnRoLGwuZGF5KX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPWEuZnJvbUpEKHQpLHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYTtpZigib2JqZWN0Ij09dHlwZW9mIHQpaT10LGE9ZXx8e307ZWxzZXtpZighKCJudW1iZXIiPT10eXBlb2YgdCYmdD49MTg4OCYmdDw9MjExMSkpdGhyb3cgbmV3IEVycm9yKCJTb2xhciB5ZWFyIG91dHNpZGUgcmFuZ2UgMTg4OC0yMTExIik7aWYoISgibnVtYmVyIj09dHlwZW9mIGUmJmU+PTEmJmU8PTEyKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIG1vbnRoIG91dHNpZGUgcmFuZ2UgMSAtIDEyIik7aWYoISgibnVtYmVyIj09dHlwZW9mIHImJnI+PTEmJnI8PTMxKSl0aHJvdyBuZXcgRXJyb3IoIlNvbGFyIGRheSBvdXRzaWRlIHJhbmdlIDEgLSAzMSIpO2k9e3llYXI6dCxtb250aDplLGRheTpyfSxhPW58fHt9fXZhciBvPWhbaS55ZWFyLWhbMF1dLHM9aS55ZWFyPDw5fGkubW9udGg8PDV8aS5kYXk7YS55ZWFyPXM+PW8/aS55ZWFyOmkueWVhci0xLG89aFthLnllYXItaFswXV07dmFyIGwsYz1uZXcgRGF0ZShvPj45JjQwOTUsKG8+PjUmMTUpLTEsMzEmbyksdT1uZXcgRGF0ZShpLnllYXIsaS5tb250aC0xLGkuZGF5KTtsPU1hdGgucm91bmQoKHUtYykvODY0ZTUpO3ZhciBwLGQ9ZlthLnllYXItZlswXV07Zm9yKHA9MDtwPDEzO3ArKyl7dmFyIG09ZCYxPDwxMi1wPzMwOjI5O2lmKGw8bSlicmVhaztsLT1tfXZhciBnPWQ+PjEzOyFnfHxwPGc/KGEuaXNJbnRlcmNhbGFyeT0hMSxhLm1vbnRoPTErcCk6cD09PWc/KGEuaXNJbnRlcmNhbGFyeT0hMCxhLm1vbnRoPXApOihhLmlzSW50ZXJjYWxhcnk9ITEsYS5tb250aD1wKTtyZXR1cm4gYS5kYXk9MStsLGF9KGUueWVhcigpLGUubW9udGgoKSxlLmRheSgpKSxuPXRoaXMudG9Nb250aEluZGV4KHIueWVhcixyLm1vbnRoLHIuaXNJbnRlcmNhbGFyeSk7cmV0dXJuIHRoaXMubmV3RGF0ZShyLnllYXIsbixyLmRheSl9LGZyb21TdHJpbmc6ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaChzKSxyPXRoaXMuX3ZhbGlkYXRlWWVhcigrZVsxXSksbj0rZVsyXSxpPSEhZVszXSxhPXRoaXMudG9Nb250aEluZGV4KHIsbixpKSxvPStlWzRdO3JldHVybiB0aGlzLm5ld0RhdGUocixhLG8pfSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQueWVhcigpLGk9dC5tb250aCgpLGE9dGhpcy5pc0ludGVyY2FsYXJ5TW9udGgobixpKSxzPXRoaXMudG9DaGluZXNlTW9udGgobixpKSxsPU9iamVjdC5nZXRQcm90b3R5cGVPZihvLnByb3RvdHlwZSkuYWRkLmNhbGwodGhpcyx0LGUscik7aWYoInkiPT09cil7dmFyIGM9bC55ZWFyKCksdT1sLm1vbnRoKCksZj10aGlzLmlzSW50ZXJjYWxhcnlNb250aChjLHMpLGg9YSYmZj90aGlzLnRvTW9udGhJbmRleChjLHMsITApOnRoaXMudG9Nb250aEluZGV4KGMscywhMSk7aCE9PXUmJmwubW9udGgoaCl9cmV0dXJuIGx9fSk7dmFyIHM9L15ccyooLT9cZFxkXGRcZHxcZFxkKVstL10oXGQ/XGQpKFtpSV0/KVstL10oXGQ/XGQpL20sbD0vXlxkP1xkW2lJXT8vbSxjPS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT9cdTY3MDgvbSx1PS9eXHU5NWYwP1x1NTM0MT9bXHU0ZTAwXHU0ZThjXHU0ZTA5XHU1NmRiXHU0ZTk0XHU1MTZkXHU0ZTAzXHU1MTZiXHU0ZTVkXT8vbTtuLmNhbGVuZGFycy5jaGluZXNlPW87dmFyIGY9WzE4ODcsNTc4MCw1ODAyLDE5MTU3LDI3NDIsNTAzNTksMTE5OCwyNjQ2LDQ2Mzc4LDc0NjYsMzQxMiwzMDEyMiw1NDgyLDY3OTQ5LDIzOTYsNTI5NCw0MzU5Nyw2NzMyLDY5NTQsMzYxODEsMjc3Miw0OTU0LDE4NzgxLDIzOTYsNTQ0MjcsNTI3NCw2NzMwLDQ3NzgxLDU4MDAsNjg2OCwyMTIxMCw0NzkwLDU5NzAzLDIzNTAsNTI3MCw0NjY2NywzNDAyLDM0OTYsMzgzMjUsMTM4OCw0NzgyLDE4NzM1LDIzNTAsNTIzNzQsNjgwNCw3NDk4LDQ0NDU3LDI5MDYsMTM4OCwyOTI5NCw0NzAwLDYzNzg5LDY0NDIsNjgwNCw1NjEzOCw1ODAyLDI3NzIsMzgyMzUsMTIxMCw0Njk4LDIyODI3LDU0MTgsNjMxMjUsMzQ3Niw1ODAyLDQzNzAxLDI0ODQsNTMwMiwyNzIyMywyNjQ2LDcwOTU0LDc0NjYsMzQxMiw1NDY5OCw1NDgyLDI0MTIsMzgwNjIsNTI5NCwyNjM2LDMyMDM4LDY5NTQsNjAyNDUsMjc3Miw0ODI2LDQzMzU3LDIzOTQsNTI3NCwzOTUwMSw2NzMwLDcyMzU3LDU4MDAsNTg0NCw1Mzk3OCw0NzkwLDIzNTgsMzgwMzksNTI3MCw4NzYyNywzNDAyLDM0OTYsNTQ3MDgsNTQ4NCw0NzgyLDQzMzExLDIzNTAsMzIyMiwyNzk3OCw3NDk4LDY4OTY1LDI5MDQsNTQ4NCw0NTY3Nyw0NzAwLDY0NDQsMzk1NzMsNjgwNCw2OTg2LDE5Mjg1LDI3NzIsNjI4MTEsMTIxMCw0Njk4LDQ3NDAzLDU0MTgsNTc4MCwzODU3MCw1NTQ2LDc2NDY5LDI0MjAsNTMwMiw1MTc5OSwyNjQ2LDU0MTQsMzY1MDEsMzQxMiw1NTQ2LDE4ODY5LDI0MTIsNTQ0NDYsNTI3Niw2NzMyLDQ4NDIyLDY4MjIsMjkwMCwyODAxMCw0ODI2LDkyNTA5LDIzOTQsNTI3NCw1NTg4Myw2NzMwLDY4MjAsNDc5NTYsNTgxMiwyNzc4LDE4Nzc5LDIzNTgsNjI2MTUsNTI3MCw1NDUwLDQ2NzU3LDM0OTIsNTU1NiwyNzMxOCw0NzE4LDY3ODg3LDIzNTAsMzIyMiw1MjU1NCw3NDk4LDM0MjgsMzgyNTIsNTQ2OCw0NzAwLDMxMDIyLDY0NDQsNjQxNDksNjgwNCw2OTg2LDQzODYxLDI3NzIsNTMzOCwzNTQyMSwyNjUwLDcwOTU1LDU0MTgsNTc4MCw1NDk1NCw1NTQ2LDI3NDAsMzgwNzQsNTMwMiwyNjQ2LDI5OTkxLDMzNjYsNjEwMTEsMzQxMiw1NTQ2LDQzNDQ1LDI0MTIsNTI5NCwzNTQwNiw2NzMyLDcyOTk4LDY4MjAsNjk5Niw1MjU4NiwyNzc4LDIzOTYsMzgwNDUsNTI3NCw2Njk4LDIzMzMzLDY4MjAsNjQzMzgsNTgxMiwyNzQ2LDQzMzU1LDIzNTgsNTI3MCwzOTQ5OSw1NDUwLDc5NTI1LDM0OTIsNTU0OF0saD1bMTg4Nyw5NjY3MzIsOTY3MjMxLDk2NzczMyw5NjgyNjUsOTY4NzY2LDk2OTI5Nyw5Njk3OTgsOTcwMjk4LDk3MDgyOSw5NzEzMzAsOTcxODMwLDk3MjM2Miw5NzI4NjMsOTczMzk1LDk3Mzg5Niw5NzQzOTcsOTc0OTI4LDk3NTQyOCw5NzU5MjksOTc2NDYxLDk3Njk2Miw5Nzc0NjIsOTc3OTk0LDk3ODQ5NCw5NzkwMjYsOTc5NTI2LDk4MDAyNiw5ODA1NTgsOTgxMDU5LDk4MTU1OSw5ODIwOTEsOTgyNTkzLDk4MzEyNCw5ODM2MjQsOTg0MTI0LDk4NDY1Niw5ODUxNTcsOTg1NjU2LDk4NjE4OSw5ODY2OTAsOTg3MTkxLDk4NzcyMiw5ODgyMjIsOTg4NzUzLDk4OTI1NCw5ODk3NTQsOTkwMjg2LDk5MDc4OCw5OTEyODgsOTkxODE5LDk5MjMxOSw5OTI4NTEsOTkzMzUyLDk5Mzg1MSw5OTQzODMsOTk0ODg1LDk5NTM4NSw5OTU5MTcsOTk2NDE4LDk5NjkxOCw5OTc0NTAsOTk3OTQ5LDk5ODQ4MSw5OTg5ODIsOTk5NDgzLDEwMDAwMTQsMTAwMDUxNSwxMDAxMDE2LDEwMDE1NDgsMTAwMjA0NywxMDAyNTc4LDEwMDMwODAsMTAwMzU4MCwxMDA0MTExLDEwMDQ2MTMsMTAwNTExMywxMDA1NjQ1LDEwMDYxNDYsMTAwNjY0NSwxMDA3MTc3LDEwMDc2NzgsMTAwODIwOSwxMDA4NzEwLDEwMDkyMTEsMTAwOTc0MywxMDEwMjQzLDEwMTA3NDMsMTAxMTI3NSwxMDExNzc1LDEwMTIzMDYsMTAxMjgwNywxMDEzMzA4LDEwMTM4NDAsMTAxNDM0MSwxMDE0ODQxLDEwMTUzNzMsMTAxNTg3NCwxMDE2NDA0LDEwMTY5MDUsMTAxNzQwNSwxMDE3OTM3LDEwMTg0MzgsMTAxODkzOSwxMDE5NDcxLDEwMTk5NzIsMTAyMDQ3MSwxMDIxMDAyLDEwMjE1MDMsMTAyMjAzNSwxMDIyNTM1LDEwMjMwMzYsMTAyMzU2OCwxMDI0MDY5LDEwMjQ1NjgsMTAyNTEwMCwxMDI1NjAxLDEwMjYxMDIsMTAyNjYzMywxMDI3MTMzLDEwMjc2NjYsMTAyODE2NywxMDI4NjY2LDEwMjkxOTgsMTAyOTY5OSwxMDMwMTk5LDEwMzA3MzAsMTAzMTIzMSwxMDMxNzYzLDEwMzIyNjQsMTAzMjc2NCwxMDMzMjk2LDEwMzM3OTcsMTAzNDI5NywxMDM0ODI4LDEwMzUzMjksMTAzNTgzMCwxMDM2MzYyLDEwMzY4NjEsMTAzNzM5MywxMDM3ODk0LDEwMzgzOTQsMTAzODkyNSwxMDM5NDI3LDEwMzk5MjcsMTA0MDQ1OSwxMDQwOTU5LDEwNDE0OTEsMTA0MTk5MiwxMDQyNDkyLDEwNDMwMjMsMTA0MzUyNCwxMDQ0MDI0LDEwNDQ1NTYsMTA0NTA1NywxMDQ1NTU4LDEwNDYwOTAsMTA0NjU5MCwxMDQ3MTIxLDEwNDc2MjIsMTA0ODEyMiwxMDQ4NjU0LDEwNDkxNTQsMTA0OTY1NSwxMDUwMTg3LDEwNTA2ODksMTA1MTIxOSwxMDUxNzIwLDEwNTIyMjAsMTA1Mjc1MSwxMDUzMjUyLDEwNTM3NTIsMTA1NDI4NCwxMDU0Nzg2LDEwNTUyODUsMTA1NTgxNywxMDU2MzE3LDEwNTY4NDksMTA1NzM0OSwxMDU3ODUwLDEwNTgzODIsMTA1ODg4MywxMDU5MzgzLDEwNTk5MTUsMTA2MDQxNSwxMDYwOTQ3LDEwNjE0NDcsMTA2MTk0NywxMDYyNDc5LDEwNjI5ODEsMTA2MzQ4MCwxMDY0MDEyLDEwNjQ1MTQsMTA2NTAxNCwxMDY1NTQ1LDEwNjYwNDUsMTA2NjU3NywxMDY3MDc4LDEwNjc1NzgsMTA2ODExMCwxMDY4NjExLDEwNjkxMTIsMTA2OTY0MiwxMDcwMTQyLDEwNzA2NzQsMTA3MTE3NSwxMDcxNjc1LDEwNzIyMDcsMTA3MjcwOSwxMDczMjA5LDEwNzM3NDAsMTA3NDI0MSwxMDc0NzQxLDEwNzUyNzMsMTA3NTc3MywxMDc2MzA1LDEwNzY4MDcsMTA3NzMwOCwxMDc3ODM5LDEwNzgzNDAsMTA3ODg0MCwxMDc5MzcyLDEwNzk4NzEsMTA4MDQwMywxMDgwOTA0XX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwNDpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkNvcHRpYyIsamRFcG9jaDoxODI1MDI5LjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJDb3B0aWMiLGVwb2NoczpbIkJBTSIsIkFNIl0sbW9udGhOYW1lczpbIlRob3V0IiwiUGFvcGkiLCJIYXRob3IiLCJLb2lhayIsIlRvYmkiLCJNZXNoaXIiLCJQYXJlbWhhdCIsIlBhcmVtb3VkZSIsIlBhc2hvbnMiLCJQYW9uaSIsIkVwaXAiLCJNZXNvcmkiLCJQaSBLb2dpIEVuYXZvdCJdLG1vbnRoTmFtZXNTaG9ydDpbIlRobyIsIlBhbyIsIkhhdGgiLCJLb2kiLCJUb2IiLCJNZXNoIiwiUGF0IiwiUGFkIiwiUGFzaCIsIlBhbyIsIkVwaSIsIk1lc28iLCJQaUsiXSxkYXlOYW1lczpbIlRreXJpYWthIiwiUGVzbmF1IiwiUHNob21lbnQiLCJQZWZ0b291IiwiUHRpb3UiLCJQc29vdSIsIlBzYWJiYXRvbiJdLGRheU5hbWVzU2hvcnQ6WyJUa3kiLCJQZXMiLCJQc2giLCJQZWYiLCJQdGkiLCJQc28iLCJQc2EiXSxkYXlOYW1lc01pbjpbIlRrIiwiUGVzIiwiUHNoIiwiUGVmIiwiUHQiLCJQc28iLCJQc2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheTowLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpO3JldHVybih0PWUueWVhcigpKyhlLnllYXIoKTwwPzE6MCkpJTQ9PTN8fHQlND09LTF9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXJ8fG4ucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhciksMTN9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTM9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybih0aGlzLmRheU9mV2Vlayh0LGUscil8fDcpPDZ9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybih0PWkueWVhcigpKTwwJiZ0KyssaS5kYXkoKSszMCooaS5tb250aCgpLTEpKzM2NSoodC0xKStNYXRoLmZsb29yKHQvNCkrdGhpcy5qZEVwb2NoLTF9LGZyb21KRDpmdW5jdGlvbih0KXt2YXIgZT1NYXRoLmZsb29yKHQpKy41LXRoaXMuamRFcG9jaCxyPU1hdGguZmxvb3IoKGUtTWF0aC5mbG9vcigoZSszNjYpLzE0NjEpKS8zNjUpKzE7cjw9MCYmci0tLGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLm5ld0RhdGUociwxLDEpLnRvSkQoKTt2YXIgbj1NYXRoLmZsb29yKGUvMzApKzEsaT1lLTMwKihuLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShyLG4saSl9fSksbi5jYWxlbmRhcnMuY29wdGljPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MDU6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWEucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKGEucHJvdG90eXBlLHtuYW1lOiJEaXNjd29ybGQiLGpkRXBvY2g6MTcyMTQyNS41LGRheXNQZXJNb250aDpbMTYsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IkRpc2N3b3JsZCIsZXBvY2hzOlsiQlVDIiwiVUMiXSxtb250aE5hbWVzOlsiSWNrIiwiT2ZmbGUiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiR3J1bmUiLCJBdWd1c3QiLCJTcHVuZSIsIlNla3RvYmVyIiwiRW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkljayIsIk9mZiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkdydSIsIkF1ZyIsIlNwdSIsIlNlayIsIkVtYiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiT2N0ZWRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk9jdCIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJPYyIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjIsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLCExfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKSwxM30sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDQwMH0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzgpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDh9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLmRheSgpKzEpJTh9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZGF5T2ZXZWVrKHQsZSxyKTtyZXR1cm4gbj49MiYmbjw9Nn0sZXh0cmFJbmZvOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm57Y2VudHVyeTpvW01hdGguZmxvb3IoKGkueWVhcigpLTEpLzEwMCkrMV18fCIifX0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCkrKGkueWVhcigpPDA/MTowKSxlPWkubW9udGgoKSwocj1pLmRheSgpKSsoZT4xPzE2OjApKyhlPjI/MzIqKGUtMik6MCkrNDAwKih0LTEpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dD1NYXRoLmZsb29yKHQrLjUpLU1hdGguZmxvb3IodGhpcy5qZEVwb2NoKS0xO3ZhciBlPU1hdGguZmxvb3IodC80MDApKzE7dC09NDAwKihlLTEpLHQrPXQ+MTU/MTY6MDt2YXIgcj1NYXRoLmZsb29yKHQvMzIpKzEsbj10LTMyKihyLTEpKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShlPD0wP2UtMTplLHIsbil9fSk7dmFyIG89ezIwOiJGcnVpdGJhdCIsMjE6IkFuY2hvdnkifTtuLmNhbGVuZGFycy5kaXNjd29ybGQ9YX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkV0aGlvcGlhbiIsamRFcG9jaDoxNzI0MjIwLjUsZGF5c1Blck1vbnRoOlszMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCwzMCw1XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJFdGhpb3BpYW4iLGVwb2NoczpbIkJFRSIsIkVFIl0sbW9udGhOYW1lczpbIk1lc2tlcmVtIiwiVGlrZW1ldCIsIkhpZGFyIiwiVGFoZXNhcyIsIlRpciIsIllla2F0aXQiLCJNZWdhYml0IiwiTWlhemlhIiwiR2VuYm90IiwiU2VuZSIsIkhhbWxlIiwiTmVoYXNlIiwiUGFndW1lIl0sbW9udGhOYW1lc1Nob3J0OlsiTWVzIiwiVGlrIiwiSGlkIiwiVGFoIiwiVGlyIiwiWWVrIiwiTWVnIiwiTWlhIiwiR2VuIiwiU2VuIiwiSGFtIiwiTmVoIiwiUGFnIl0sZGF5TmFtZXM6WyJFaHVkIiwiU2Vnbm8iLCJNYWtzZWdubyIsIklyb2IiLCJIYW11cyIsIkFyYiIsIktpZGFtZSJdLGRheU5hbWVzU2hvcnQ6WyJFaHUiLCJTZWciLCJNYWsiLCJJcm8iLCJIYW0iLCJBcmIiLCJLaWQiXSxkYXlOYW1lc01pbjpbIkVoIiwiU2UiLCJNYSIsIklyIiwiSGEiLCJBciIsIktpIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0zfHx0JTQ9PS0xfSxtb250aHNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyfHxuLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZFllYXIpLDEzfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEzPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4odD1pLnllYXIoKSk8MCYmdCsrLGkuZGF5KCkrMzAqKGkubW9udGgoKS0xKSszNjUqKHQtMSkrTWF0aC5mbG9vcih0LzQpK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2gscj1NYXRoLmZsb29yKChlLU1hdGguZmxvb3IoKGUrMzY2KS8xNDYxKSkvMzY1KSsxO3I8PTAmJnItLSxlPU1hdGguZmxvb3IodCkrLjUtdGhpcy5uZXdEYXRlKHIsMSwxKS50b0pEKCk7dmFyIG49TWF0aC5mbG9vcihlLzMwKSsxLGk9ZS0zMCoobi0xKSsxO3JldHVybiB0aGlzLm5ld0RhdGUocixuLGkpfX0pLG4uY2FsZW5kYXJzLmV0aGlvcGlhbj1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjA3OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIHQtZSpNYXRoLmZsb29yKHQvZSl9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IkhlYnJldyIsamRFcG9jaDozNDc5OTUuNSxkYXlzUGVyTW9udGg6WzMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDMwLDI5LDI5XSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6NyxtaW5EYXk6MSxyZWdpb25hbE9wdGlvbnM6eyIiOntuYW1lOiJIZWJyZXciLGVwb2NoczpbIkJBTSIsIkFNIl0sbW9udGhOYW1lczpbIk5pc2FuIiwiSXlhciIsIlNpdmFuIiwiVGFtbXV6IiwiQXYiLCJFbHVsIiwiVGlzaHJlaSIsIkNoZXNodmFuIiwiS2lzbGV2IiwiVGV2ZXQiLCJTaGV2YXQiLCJBZGFyIiwiQWRhciBJSSJdLG1vbnRoTmFtZXNTaG9ydDpbIk5pcyIsIkl5YSIsIlNpdiIsIlRhbSIsIkF2IiwiRWx1IiwiVGlzIiwiQ2hlIiwiS2lzIiwiVGV2IiwiU2hlIiwiQWRhIiwiQWQyIl0sZGF5TmFtZXM6WyJZb20gUmlzaG9uIiwiWW9tIFNoZW5pIiwiWW9tIFNobGlzaGkiLCJZb20gUmV2aSdpIiwiWW9tIENoYW1pc2hpIiwiWW9tIFNoaXNoaSIsIllvbSBTaGFiYmF0Il0sZGF5TmFtZXNTaG9ydDpbIlJpcyIsIlNoZSIsIlNobCIsIlJldiIsIkNoYSIsIlNoaSIsIlNoYSJdLGRheU5hbWVzTWluOlsiUmkiLCJTaGUiLCJTaGwiLCJSZSIsIkNoIiwiU2hpIiwiU2hhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gdGhpcy5fbGVhcFllYXIoZS55ZWFyKCkpfSxfbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIG8oNyoodD10PDA/dCsxOnQpKzEsMTkpPDd9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLHRoaXMuX2xlYXBZZWFyKHQueWVhcj90LnllYXIoKTp0KT8xMzoxMn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLW4uZGF5T2ZXZWVrKCksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx0aGlzLnRvSkQoLTE9PT10PzE6dCsxLDcsMSktdGhpcy50b0pEKHQsNywxKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwxMj09PWUmJnRoaXMubGVhcFllYXIodCl8fDg9PT1lJiY1PT09byh0aGlzLmRheXNJblllYXIodCksMTApPzMwOjk9PT1lJiYzPT09byh0aGlzLmRheXNJblllYXIodCksMTApPzI5OnRoaXMuZGF5c1Blck1vbnRoW2UtMV19LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA2IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3JldHVybnt5ZWFyVHlwZToodGhpcy5sZWFwWWVhcihpKT8iZW1ib2xpc21pYyI6ImNvbW1vbiIpKyIgIitbImRlZmljaWVudCIsInJlZ3VsYXIiLCJjb21wbGV0ZSJdW3RoaXMuZGF5c0luWWVhcihpKSUxMC0zXX19LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQ8PTA/dCsxOnQsbz10aGlzLmpkRXBvY2grdGhpcy5fZGVsYXkxKGEpK3RoaXMuX2RlbGF5MihhKStyKzE7aWYoZTw3KXtmb3IodmFyIHM9NztzPD10aGlzLm1vbnRoc0luWWVhcih0KTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO2ZvcihzPTE7czxlO3MrKylvKz10aGlzLmRheXNJbk1vbnRoKHQscyl9ZWxzZSBmb3Iocz03O3M8ZTtzKyspbys9dGhpcy5kYXlzSW5Nb250aCh0LHMpO3JldHVybiBvfSxfZGVsYXkxOmZ1bmN0aW9uKHQpe3ZhciBlPU1hdGguZmxvb3IoKDIzNSp0LTIzNCkvMTkpLHI9MTIwODQrMTM3NTMqZSxuPTI5KmUrTWF0aC5mbG9vcihyLzI1OTIwKTtyZXR1cm4gbygzKihuKzEpLDcpPDMmJm4rKyxufSxfZGVsYXkyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2RlbGF5MSh0LTEpLHI9dGhpcy5fZGVsYXkxKHQpO3JldHVybiB0aGlzLl9kZWxheTEodCsxKS1yPT0zNTY/MjpyLWU9PTM4Mj8xOjB9LGZyb21KRDpmdW5jdGlvbih0KXt0PU1hdGguZmxvb3IodCkrLjU7Zm9yKHZhciBlPU1hdGguZmxvb3IoOTg0OTYqKHQtdGhpcy5qZEVwb2NoKS8zNTk3NTM1MSktMTt0Pj10aGlzLnRvSkQoLTE9PT1lPzE6ZSsxLDcsMSk7KWUrKztmb3IodmFyIHI9dDx0aGlzLnRvSkQoZSwxLDEpPzc6MTt0PnRoaXMudG9KRChlLHIsdGhpcy5kYXlzSW5Nb250aChlLHIpKTspcisrO3ZhciBuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmhlYnJldz1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjA4OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiSXNsYW1pYyIsamRFcG9jaDoxOTQ4NDM5LjUsZGF5c1Blck1vbnRoOlszMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOSwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSXNsYW1pYyIsZXBvY2hzOlsiQkgiLCJBSCJdLG1vbnRoTmFtZXM6WyJNdWhhcnJhbSIsIlNhZmFyIiwiUmFiaScgYWwtYXd3YWwiLCJSYWJpJyBhbC10aGFuaSIsIkp1bWFkYSBhbC1hd3dhbCIsIkp1bWFkYSBhbC10aGFuaSIsIlJhamFiIiwiU2hhJ2FiYW4iLCJSYW1hZGFuIiwiU2hhd3dhbCIsIkRodSBhbC1RaSdkYWgiLCJEaHUgYWwtSGlqamFoIl0sbW9udGhOYW1lc1Nob3J0OlsiTXVoIiwiU2FmIiwiUmFiMSIsIlJhYjIiLCJKdW0xIiwiSnVtMiIsIlJhaiIsIlNoYSciLCJSYW0iLCJTaGF3IiwiRGh1USIsIkRodUgiXSxkYXlOYW1lczpbIllhd20gYWwtYWhhZCIsIllhd20gYWwtaXRobmF5biIsIllhd20gYXRoLXRodWxhYXRoYWEnIiwiWWF3bSBhbC1hcmJpJ2FhJyIsIllhd20gYWwta2hhbVx1MDEyYnMiLCJZYXdtIGFsLWp1bSdhIiwiWWF3bSBhcy1zYWJ0Il0sZGF5TmFtZXNTaG9ydDpbIkFoYSIsIkl0aCIsIlRodSIsIkFyYiIsIktoYSIsIkp1bSIsIlNhYiJdLGRheU5hbWVzTWluOlsiQWgiLCJJdCIsIlRoIiwiQXIiLCJLaCIsIkp1IiwiU2EiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJ5eXl5L21tL2RkIixmaXJzdERheTo2LGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuKDExKnRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKS55ZWFyKCkrMTQpJTMwPDExfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgtbi5kYXlPZldlZWsoKSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZWFwWWVhcih0KT8zNTU6MzU0fSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMTI9PT1yLm1vbnRoKCkmJnRoaXMubGVhcFllYXIoci55ZWFyKCkpPzE6MCl9LHdlZWtEYXk6ZnVuY3Rpb24odCxlLHIpe3JldHVybiA1IT09dGhpcy5kYXlPZldlZWsodCxlLHIpfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gdD1pLnllYXIoKSxlPWkubW9udGgoKSx0PXQ8PTA/dCsxOnQsKHI9aS5kYXkoKSkrTWF0aC5jZWlsKDI5LjUqKGUtMSkpKzM1NCoodC0xKStNYXRoLmZsb29yKCgzKzExKnQpLzMwKSt0aGlzLmpkRXBvY2gtMX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNTt2YXIgZT1NYXRoLmZsb29yKCgzMCoodC10aGlzLmpkRXBvY2gpKzEwNjQ2KS8xMDYzMSk7ZT1lPD0wP2UtMTplO3ZhciByPU1hdGgubWluKDEyLE1hdGguY2VpbCgodC0yOS10aGlzLnRvSkQoZSwxLDEpKS8yOS41KSsxKSxuPXQtdGhpcy50b0pEKGUsciwxKSsxO3JldHVybiB0aGlzLm5ld0RhdGUoZSxyLG4pfX0pLG4uY2FsZW5kYXJzLmlzbGFtaWM9YX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYwOTpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ikp1bGlhbiIsamRFcG9jaDoxNzIxNDIzLjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiSnVsaWFuIixlcG9jaHM6WyJCQyIsIkFEIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoibW0vZGQveXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKTwwP2UueWVhcigpKzE6ZS55ZWFyKCkpJTQ9PTB9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKDQtKG4uZGF5T2ZXZWVrKCl8fDcpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7cmV0dXJuIHQ9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpLHQ8MCYmdCsrLGU8PTImJih0LS0sZSs9MTIpLE1hdGguZmxvb3IoMzY1LjI1Kih0KzQ3MTYpKStNYXRoLmZsb29yKDMwLjYwMDEqKGUrMSkpK3ItMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSsxNTI0LHI9TWF0aC5mbG9vcigoZS0xMjIuMSkvMzY1LjI1KSxuPU1hdGguZmxvb3IoMzY1LjI1KnIpLGk9TWF0aC5mbG9vcigoZS1uKS8zMC42MDAxKSxhPWktTWF0aC5mbG9vcihpPDE0PzE6MTMpLG89ci1NYXRoLmZsb29yKGE+Mj80NzE2OjQ3MTUpLHM9ZS1uLU1hdGguZmxvb3IoMzAuNjAwMSppKTtyZXR1cm4gbzw9MCYmby0tLHRoaXMubmV3RGF0ZShvLGEscyl9fSksbi5jYWxlbmRhcnMuanVsaWFuPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTA6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuIG8odC0xLGUpKzF9YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6Ik1heWFuIixqZEVwb2NoOjU4NDI4Mi41LGhhc1llYXJaZXJvOiEwLG1pbk1vbnRoOjAsZmlyc3RNb250aDowLG1pbkRheTowLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6Ik1heWFuIixlcG9jaHM6WyIiLCIiXSxtb250aE5hbWVzOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciXSxtb250aE5hbWVzU2hvcnQ6WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyJdLGRheU5hbWVzOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGF5TmFtZXNTaG9ydDpbIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSJdLGRheU5hbWVzTWluOlsiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5Il0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiWVlZWS5tLmQiLGZpcnN0RGF5OjAsaXNSVEw6ITEsaGFhYk1vbnRoczpbIlBvcCIsIlVvIiwiWmlwIiwiWm90eiIsIlR6ZWMiLCJYdWwiLCJZYXhraW4iLCJNb2wiLCJDaGVuIiwiWWF4IiwiWmFjIiwiQ2VoIiwiTWFjIiwiS2Fua2luIiwiTXVhbiIsIlBheCIsIktheWFiIiwiQ3Vta3UiLCJVYXllYiJdLHR6b2xraW5Nb250aHM6WyJJbWl4IiwiSWsiLCJBa2JhbCIsIkthbiIsIkNoaWNjaGFuIiwiQ2ltaSIsIk1hbmlrIiwiTGFtYXQiLCJNdWx1YyIsIk9jIiwiQ2h1ZW4iLCJFYiIsIkJlbiIsIkl4IiwiTWVuIiwiQ2liIiwiQ2FiYW4iLCJFdHpuYWIiLCJDYXVhYyIsIkFoYXUiXX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhciksITF9LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dD10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcikueWVhcigpO3ZhciBlPU1hdGguZmxvb3IodC80MDApO3JldHVybiB0JT00MDAsdCs9dDwwPzQwMDowLGUrIi4iK01hdGguZmxvb3IodC8yMCkrIi4iK3QlMjB9LGZvclllYXI6ZnVuY3Rpb24odCl7aWYoKHQ9dC5zcGxpdCgiLiIpKS5sZW5ndGg8Myl0aHJvdyJJbnZhbGlkIE1heWFuIHllYXIiO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49cGFyc2VJbnQodFtyXSwxMCk7aWYoTWF0aC5hYnMobik+MTl8fHI+MCYmbjwwKXRocm93IkludmFsaWQgTWF5YW4geWVhciI7ZT0yMCplK259cmV0dXJuIGV9LG1vbnRoc0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDE4fSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSksMH0sZGF5c0luWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLDM2MH0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSwyMH0sZGF5c0luV2VlazpmdW5jdGlvbigpe3JldHVybiA1fSxkYXlPZldlZWs6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKS5kYXkoKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLCEwfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLnRvSkQoKSxhPXRoaXMuX3RvSGFhYihpKSxvPXRoaXMuX3RvVHpvbGtpbihpKTtyZXR1cm57aGFhYk1vbnRoTmFtZTp0aGlzLmxvY2FsLmhhYWJNb250aHNbYVswXS0xXSxoYWFiTW9udGg6YVswXSxoYWFiRGF5OmFbMV0sdHpvbGtpbkRheU5hbWU6dGhpcy5sb2NhbC50em9sa2luTW9udGhzW29bMF0tMV0sdHpvbGtpbkRheTpvWzBdLHR6b2xraW5UcmVjZW5hOm9bMV19fSxfdG9IYWFiOmZ1bmN0aW9uKHQpe3ZhciBlPW8oKHQtPXRoaXMuamRFcG9jaCkrOCszNDAsMzY1KTtyZXR1cm5bTWF0aC5mbG9vcihlLzIwKSsxLG8oZSwyMCldfSxfdG9Uem9sa2luOmZ1bmN0aW9uKHQpe3JldHVybltzKCh0LT10aGlzLmpkRXBvY2gpKzIwLDIwKSxzKHQrNCwxMyldfSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWREYXRlKTtyZXR1cm4gaS5kYXkoKSsyMCppLm1vbnRoKCkrMzYwKmkueWVhcigpK3RoaXMuamRFcG9jaH0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0KSsuNS10aGlzLmpkRXBvY2g7dmFyIGU9TWF0aC5mbG9vcih0LzM2MCk7dCU9MzYwLHQrPXQ8MD8zNjA6MDt2YXIgcj1NYXRoLmZsb29yKHQvMjApLG49dCUyMDtyZXR1cm4gdGhpcy5uZXdEYXRlKGUscixuKX19KSxuLmNhbGVuZGFycy5tYXlhbj1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjExOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXI7dmFyIG89bi5pbnN0YW5jZSgiZ3JlZ29yaWFuIik7aShhLnByb3RvdHlwZSx7bmFtZToiTmFuYWtzaGFoaSIsamRFcG9jaDoyMjU3NjczLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwzMCwzMF0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTmFuYWtzaGFoaSIsZXBvY2hzOlsiQk4iLCJBTiJdLG1vbnRoTmFtZXM6WyJDaGV0IiwiVmFpc2FraCIsIkpldGgiLCJIYXJoIiwiU2F3YW4iLCJCaGFkb24iLCJBc3N1IiwiS2F0YWsiLCJNYWdoYXIiLCJQb2giLCJNYWdoIiwiUGhhZ3VuIl0sbW9udGhOYW1lc1Nob3J0OlsiQ2hlIiwiVmFpIiwiSmV0IiwiSGFyIiwiU2F3IiwiQmhhIiwiQXNzIiwiS2F0IiwiTWdyIiwiUG9oIiwiTWdoIiwiUGhhIl0sZGF5TmFtZXM6WyJTb212YWFyIiwiTWFuZ2FsdmFyIiwiQnVkaHZhYXIiLCJWZWVydmFhciIsIlNodWthcnZhYXIiLCJTYW5pY2hhcnZhYXIiLCJFdHZhYXIiXSxkYXlOYW1lc1Nob3J0OlsiU29tIiwiTWFuZ2FsIiwiQnVkaCIsIlZlZXIiLCJTaHVrYXIiLCJTYW5pY2hhciIsIkV0Il0sZGF5TmFtZXNNaW46WyJTbyIsIk1hIiwiQnUiLCJWZSIsIlNoIiwiU2EiLCJFdCJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6ImRkLW1tLXl5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcnx8bi5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4gby5sZWFwWWVhcihlLnllYXIoKSsoZS55ZWFyKCk8MT8xOjApKzE0NjkpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLm5ld0RhdGUodCxlLHIpO3JldHVybiBuLmFkZCgxLShuLmRheU9mV2VlaygpfHw3KSwiZCIpLE1hdGguZmxvb3IoKG4uZGF5T2ZZZWFyKCktMSkvNykrMX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpO3JldHVybiB0aGlzLmRheXNQZXJNb250aFtyLm1vbnRoKCktMV0rKDEyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LGUscixuLmxvY2FsLmludmFsaWRNb250aCk7KHQ9aS55ZWFyKCkpPDAmJnQrKztmb3IodmFyIGE9aS5kYXkoKSxzPTE7czxpLm1vbnRoKCk7cysrKWErPXRoaXMuZGF5c1Blck1vbnRoW3MtMV07cmV0dXJuIGErby50b0pEKHQrMTQ2OCwzLDEzKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3Q9TWF0aC5mbG9vcih0Ky41KTtmb3IodmFyIGU9TWF0aC5mbG9vcigodC0odGhpcy5qZEVwb2NoLTEpKS8zNjYpO3Q+PXRoaXMudG9KRChlKzEsMSwxKTspZSsrO2Zvcih2YXIgcj10LU1hdGguZmxvb3IodGhpcy50b0pEKGUsMSwxKSsuNSkrMSxuPTE7cj50aGlzLmRheXNJbk1vbnRoKGUsbik7KXItPXRoaXMuZGF5c0luTW9udGgoZSxuKSxuKys7cmV0dXJuIHRoaXMubmV3RGF0ZShlLG4scil9fSksbi5jYWxlbmRhcnMubmFuYWtzaGFoaT1hfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjEyOltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpO2Z1bmN0aW9uIGEodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiTmVwYWxpIixqZEVwb2NoOjE3MDA3MDkuNSxkYXlzUGVyTW9udGg6WzMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSxoYXNZZWFyWmVybzohMSxtaW5Nb250aDoxLGZpcnN0TW9udGg6MSxtaW5EYXk6MSxkYXlzUGVyWWVhcjozNjUscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiTmVwYWxpIixlcG9jaHM6WyJCQlMiLCJBQlMiXSxtb250aE5hbWVzOlsiQmFpc2FraCIsIkplc3RoYSIsIkFzaGFkaCIsIlNocmF3YW4iLCJCaGFkcmEiLCJBc2h3aW4iLCJLYXJ0aWsiLCJNYW5nc2lyIiwiUGF1c2giLCJNYW5naCIsIkZhbGd1biIsIkNoYWl0cmEiXSxtb250aE5hbWVzU2hvcnQ6WyJCYWkiLCJKZSIsIkFzIiwiU2hyYSIsIkJoYSIsIkFzaCIsIkthciIsIk1hbmciLCJQYXUiLCJNYSIsIkZhbCIsIkNoYWkiXSxkYXlOYW1lczpbIkFhaXRhYmFhciIsIlNvbWJhYXIiLCJNYW5nbGJhYXIiLCJCdWRoYWJhYXIiLCJCaWhpYmFhciIsIlNodWtyYWJhYXIiLCJTaGFuaWJhYXIiXSxkYXlOYW1lc1Nob3J0OlsiQWFpdGEiLCJTb20iLCJNYW5nbCIsIkJ1ZGhhIiwiQmloaSIsIlNodWtyYSIsIlNoYW5pIl0sZGF5TmFtZXNNaW46WyJBYWkiLCJTbyIsIk1hbiIsIkJ1IiwiQmkiLCJTaHUiLCJTaGEiXSxkaWdpdHM6bnVsbCxkYXRlRm9ybWF0OiJkZC9tbS95eXl5IixmaXJzdERheToxLGlzUlRMOiExfX0sbGVhcFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGF5c0luWWVhcih0KSE9PXRoaXMuZGF5c1BlclllYXJ9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe2lmKHQ9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZFllYXIpLnllYXIoKSx2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdKXJldHVybiB0aGlzLmRheXNQZXJZZWFyO2Zvcih2YXIgZT0wLHI9dGhpcy5taW5Nb250aDtyPD0xMjtyKyspZSs9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtyXTtyZXR1cm4gZX0sZGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55ZWFyJiYoZT10Lm1vbnRoKCksdD10LnllYXIoKSksdGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKSx2b2lkIDA9PT10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW3RdP3RoaXMuZGF5c1Blck1vbnRoW2UtMV06dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVt0XVtlXX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDYhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPW4uaW5zdGFuY2UoKSxvPTAscz1lLGw9dDt0aGlzLl9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhKHQpO3ZhciBjPXQtKHM+OXx8OT09PXMmJnI+PXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0/NTY6NTcpO2Zvcig5IT09ZSYmKG89cixzLS0pOzkhPT1zOylzPD0wJiYocz0xMixsLS0pLG8rPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bc10scy0tO3JldHVybiA5PT09ZT8obys9ci10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzBdKTwwJiYobys9YS5kYXlzSW5ZZWFyKGMpKTpvKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2xdWzldLXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbbF1bMF0sYS5uZXdEYXRlKGMsMSwxKS5hZGQobywiZCIpLnRvSkQoKX0sZnJvbUpEOmZ1bmN0aW9uKHQpe3ZhciBlPW4uaW5zdGFuY2UoKS5mcm9tSkQodCkscj1lLnllYXIoKSxpPWUuZGF5T2ZZZWFyKCksYT1yKzU2O3RoaXMuX2NyZWF0ZU1pc3NpbmdDYWxlbmRhckRhdGEoYSk7Zm9yKHZhciBvPTkscz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdWzBdLGw9dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVthXVtvXS1zKzE7aT5sOykrK28+MTImJihvPTEsYSsrKSxsKz10aGlzLk5FUEFMSV9DQUxFTkRBUl9EQVRBW2FdW29dO3ZhciBjPXRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbYV1bb10tKGwtaSk7cmV0dXJuIHRoaXMubmV3RGF0ZShhLG8sYyl9LF9jcmVhdGVNaXNzaW5nQ2FsZW5kYXJEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGF5c1Blck1vbnRoLnNsaWNlKDApO2UudW5zaGlmdCgxNyk7Zm9yKHZhciByPXQtMTtyPHQrMjtyKyspdm9pZCAwPT09dGhpcy5ORVBBTElfQ0FMRU5EQVJfREFUQVtyXSYmKHRoaXMuTkVQQUxJX0NBTEVOREFSX0RBVEFbcl09ZSl9LE5FUEFMSV9DQUxFTkRBUl9EQVRBOnsxOTcwOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk3MTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5NzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMwXSwxOTczOlsxOSwzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMTk3NDpbMTksMzEsMzEsMzIsMzAsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5NzU6WzE4LDMxLDMxLDMyLDMyLDMwLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk3NzpbMTgsMzEsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDE5Nzg6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTc5OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDE5ODE6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwxOTgyOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk4MzpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDE5ODQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwxOTg1OlsxOCwzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMTk4NjpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5ODc6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTg4OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMTk4OTpbMTgsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTA6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTkxOlsxOCwzMSwzMiwzMSwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5MjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDE5OTM6WzE4LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwxOTk0OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDE5OTY6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwxOTk3OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMTk5ODpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDE5OTk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyZTM6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDAxOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAwMjpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMDM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDA0OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAwNTpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMDY6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDA3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAwODpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwMDk6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDEwOlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxMTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMTI6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDEzOlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAxNDpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMTU6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDE2OlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjAxNzpbMTgsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMTg6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDE5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjAyMDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwMjE6WzE4LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDIyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjAyMzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwMjQ6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDI1OlsxOCwzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyNjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMjc6WzE3LDMwLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDI4OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjAyOTpbMTgsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwMzA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDMwLDMwLDMwLDMxXSwyMDMxOlsxNywzMSwzMiwzMSwzMiwzMSwzMSwzMSwzMSwzMSwzMSwzMSwzMV0sMjAzMjpbMTcsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzJdLDIwMzM6WzE4LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM0OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjAzNTpbMTcsMzAsMzIsMzEsMzIsMzEsMzEsMjksMzAsMzAsMjksMjksMzFdLDIwMzY6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDM3OlsxOCwzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjAzODpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwMzk6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDMwLDMwXSwyMDQwOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA0MTpbMTgsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNDI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDQzOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA0NDpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDU6WzE4LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ2OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA0NzpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNDg6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDQ5OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA1MDpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNTE6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDUyOlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA1MzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwNTQ6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDI5LDMxXSwyMDU1OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwzMCwyOSwzMF0sMjA1NjpbMTcsMzEsMzEsMzIsMzEsMzIsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNTc6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDU4OlsxNywzMCwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwyOSwzMV0sMjA1OTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNjA6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDYxOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA2MjpbMTcsMzAsMzIsMzEsMzIsMzEsMzEsMjksMzAsMjksMzAsMjksMzFdLDIwNjM6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDY0OlsxNywzMSwzMSwzMiwzMiwzMSwzMCwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2NTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzFdLDIwNjY6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDI5LDMwLDMwLDI5LDI5LDMxXSwyMDY3OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA2ODpbMTcsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMjksMzAsMjksMzAsMzBdLDIwNjk6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDI5LDMwLDMxXSwyMDcwOlsxNywzMSwzMSwzMSwzMiwzMSwzMSwyOSwzMCwzMCwyOSwzMCwzMF0sMjA3MTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzI6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDczOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMV0sMjA3NDpbMTcsMzEsMzEsMzEsMzIsMzEsMzEsMzAsMjksMzAsMjksMzAsMzBdLDIwNzU6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc2OlsxNiwzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwyOSwzMCwzMF0sMjA3NzpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMjksMzFdLDIwNzg6WzE3LDMxLDMxLDMxLDMyLDMxLDMxLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDc5OlsxNywzMSwzMSwzMiwzMSwzMSwzMSwzMCwyOSwzMCwyOSwzMCwzMF0sMjA4MDpbMTYsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMjksMzAsMzBdLDIwODE6WzE3LDMxLDMxLDMyLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDgyOlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4MzpbMTcsMzEsMzEsMzIsMzEsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODQ6WzE3LDMxLDMxLDMyLDMxLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg1OlsxNywzMSwzMiwzMSwzMiwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4NjpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwODc6WzE2LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDg4OlsxNiwzMCwzMSwzMiwzMiwzMCwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA4OTpbMTcsMzEsMzIsMzEsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTA6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDkxOlsxNiwzMSwzMSwzMiwzMSwzMSwzMSwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5MjpbMTYsMzEsMzEsMzIsMzIsMzEsMzAsMzAsMzAsMjksMzAsMzAsMzBdLDIwOTM6WzE3LDMxLDMyLDMxLDMyLDMxLDMwLDMwLDMwLDI5LDMwLDMwLDMwXSwyMDk0OlsxNywzMSwzMSwzMiwzMSwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5NTpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMzAsMjksMzAsMzAsMzAsMzBdLDIwOTY6WzE3LDMwLDMxLDMyLDMyLDMxLDMwLDMwLDI5LDMwLDI5LDMwLDMwXSwyMDk3OlsxNywzMSwzMiwzMSwzMiwzMSwzMCwzMCwzMCwyOSwzMCwzMCwzMF0sMjA5ODpbMTcsMzEsMzEsMzIsMzEsMzEsMzEsMjksMzAsMjksMzAsMzAsMzFdLDIwOTk6WzE3LDMxLDMxLDMyLDMxLDMxLDMxLDMwLDI5LDI5LDMwLDMwLDMwXSwyMTAwOlsxNywzMSwzMiwzMSwzMiwzMCwzMSwzMCwyOSwzMCwyOSwzMCwzMF19fSksbi5jYWxlbmRhcnMubmVwYWxpPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTM6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIik7ZnVuY3Rpb24gYSh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC1lKk1hdGguZmxvb3IodC9lKX1hLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShhLnByb3RvdHlwZSx7bmFtZToiUGVyc2lhbiIsamRFcG9jaDoxOTQ4MzIwLjUsZGF5c1Blck1vbnRoOlszMSwzMSwzMSwzMSwzMSwzMSwzMCwzMCwzMCwzMCwzMCwyOV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiUGVyc2lhbiIsZXBvY2hzOlsiQlAiLCJBUCJdLG1vbnRoTmFtZXM6WyJGYXJ2YXJkaW4iLCJPcmRpYmVoZXNodCIsIktob3JkYWQiLCJUaXIiLCJNb3JkYWQiLCJTaGFocml2YXIiLCJNZWhyIiwiQWJhbiIsIkF6YXIiLCJEYXkiLCJCYWhtYW4iLCJFc2ZhbmQiXSxtb250aE5hbWVzU2hvcnQ6WyJGYXIiLCJPcmQiLCJLaG8iLCJUaXIiLCJNb3IiLCJTaGEiLCJNZWgiLCJBYmEiLCJBemEiLCJEYXkiLCJCYWgiLCJFc2YiXSxkYXlOYW1lczpbIllla3NoYW1iZSIsIkRvc2hhbWJlIiwiU2VzaGFtYmUiLCJDaFx4ZTZoYXJzaGFtYmUiLCJQYW5qc2hhbWJlIiwiSm9tJ2UiLCJTaGFtYmUiXSxkYXlOYW1lc1Nob3J0OlsiWWVrIiwiRG8iLCJTZSIsIkNoXHhlNiIsIlBhbmoiLCJKb20iLCJTaGEiXSxkYXlOYW1lc01pbjpbIlllIiwiRG8iLCJTZSIsIkNoIiwiUGEiLCJKbyIsIlNoIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6Nixpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTtyZXR1cm4gNjgyKigoZS55ZWFyKCktKGUueWVhcigpPjA/NDc0OjQ3MykpJTI4MjArNDc0KzM4KSUyODE2PDY4Mn0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoLShuLmRheU9mV2VlaygpKzEpJTcsImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LG4ubG9jYWwuaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygxMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpO3Q9aS55ZWFyKCksZT1pLm1vbnRoKCkscj1pLmRheSgpO3ZhciBhPXQtKHQ+PTA/NDc0OjQ3Mykscz00NzQrbyhhLDI4MjApO3JldHVybiByKyhlPD03PzMxKihlLTEpOjMwKihlLTEpKzYpK01hdGguZmxvb3IoKDY4MipzLTExMCkvMjgxNikrMzY1KihzLTEpKzEwMjk5ODMqTWF0aC5mbG9vcihhLzI4MjApK3RoaXMuamRFcG9jaC0xfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9KHQ9TWF0aC5mbG9vcih0KSsuNSktdGhpcy50b0pEKDQ3NSwxLDEpLHI9TWF0aC5mbG9vcihlLzEwMjk5ODMpLG49byhlLDEwMjk5ODMpLGk9MjgyMDtpZigxMDI5OTgyIT09bil7dmFyIGE9TWF0aC5mbG9vcihuLzM2Nikscz1vKG4sMzY2KTtpPU1hdGguZmxvb3IoKDIxMzQqYSsyODE2KnMrMjgxNSkvMTAyODUyMikrYSsxfXZhciBsPWkrMjgyMCpyKzQ3NDtsPWw8PTA/bC0xOmw7dmFyIGM9dC10aGlzLnRvSkQobCwxLDEpKzEsdT1jPD0xODY/TWF0aC5jZWlsKGMvMzEpOk1hdGguY2VpbCgoYy02KS8zMCksZj10LXRoaXMudG9KRChsLHUsMSkrMTtyZXR1cm4gdGhpcy5uZXdEYXRlKGwsdSxmKX19KSxuLmNhbGVuZGFycy5wZXJzaWFuPWEsbi5jYWxlbmRhcnMuamFsYWxpPWF9LHsiLi4vbWFpbiI6NjE3LCJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTQ6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCIuLi9tYWluIiksaT10KCJvYmplY3QtYXNzaWduIiksYT1uLmluc3RhbmNlKCk7ZnVuY3Rpb24gbyh0KXt0aGlzLmxvY2FsPXRoaXMucmVnaW9uYWxPcHRpb25zW3R8fCIiXXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW8ucHJvdG90eXBlPW5ldyBuLmJhc2VDYWxlbmRhcixpKG8ucHJvdG90eXBlLHtuYW1lOiJUYWl3YW4iLGpkRXBvY2g6MjQxOTQwMi41LHllYXJzT2Zmc2V0OjE5MTEsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVGFpd2FuIixlcG9jaHM6WyJCUk9DIiwiUk9DIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoieXl5eS9tbS9kZCIsZmlyc3REYXk6MSxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdCt0aGlzLnllYXJzT2Zmc2V0Kyh0Pj0tdGhpcy55ZWFyc09mZnNldCYmdDw9LTE/MTowKX0sX2cydFllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHQtdGhpcy55ZWFyc09mZnNldC0odD49MSYmdDw9dGhpcy55ZWFyc09mZnNldD8xOjApfX0pLG4uY2FsZW5kYXJzLnRhaXdhbj1vfSx7Ii4uL21haW4iOjYxNywib2JqZWN0LWFzc2lnbiI6NDY2fV0sNjE1OltmdW5jdGlvbih0LGUscil7dmFyIG49dCgiLi4vbWFpbiIpLGk9dCgib2JqZWN0LWFzc2lnbiIpLGE9bi5pbnN0YW5jZSgpO2Z1bmN0aW9uIG8odCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0fHwiIl18fHRoaXMucmVnaW9uYWxPcHRpb25zWyIiXX1vLnByb3RvdHlwZT1uZXcgbi5iYXNlQ2FsZW5kYXIsaShvLnByb3RvdHlwZSx7bmFtZToiVGhhaSIsamRFcG9jaDoxNTIzMDk4LjUseWVhcnNPZmZzZXQ6NTQzLGRheXNQZXJNb250aDpbMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGhhc1llYXJaZXJvOiExLG1pbk1vbnRoOjEsZmlyc3RNb250aDoxLG1pbkRheToxLHJlZ2lvbmFsT3B0aW9uczp7IiI6e25hbWU6IlRoYWkiLGVwb2NoczpbIkJCRSIsIkJFIl0sbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sZGlnaXRzOm51bGwsZGF0ZUZvcm1hdDoiZGQvbW0veXl5eSIsZmlyc3REYXk6MCxpc1JUTDohMX19LGxlYXBZZWFyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRZZWFyKTt0PXRoaXMuX3QyZ1llYXIoZS55ZWFyKCkpO3JldHVybiBhLmxlYXBZZWFyKHQpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS53ZWVrT2ZZZWFyKHQsaS5tb250aCgpLGkuZGF5KCkpfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3ZhbGlkYXRlKHQsZSx0aGlzLm1pbkRheSxuLmxvY2FsLmludmFsaWRNb250aCk7cmV0dXJuIHRoaXMuZGF5c1Blck1vbnRoW3IubW9udGgoKS0xXSsoMj09PXIubW9udGgoKSYmdGhpcy5sZWFwWWVhcihyLnllYXIoKSk/MTowKX0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuKHRoaXMuZGF5T2ZXZWVrKHQsZSxyKXx8Nyk8Nn0sdG9KRDpmdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5fdmFsaWRhdGUodCxlLHIsbi5sb2NhbC5pbnZhbGlkRGF0ZSk7dD10aGlzLl90MmdZZWFyKGkueWVhcigpKTtyZXR1cm4gYS50b0pEKHQsaS5tb250aCgpLGkuZGF5KCkpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9YS5mcm9tSkQodCkscj10aGlzLl9nMnRZZWFyKGUueWVhcigpKTtyZXR1cm4gdGhpcy5uZXdEYXRlKHIsZS5tb250aCgpLGUuZGF5KCkpfSxfdDJnWWVhcjpmdW5jdGlvbih0KXtyZXR1cm4gdC10aGlzLnllYXJzT2Zmc2V0LSh0Pj0xJiZ0PD10aGlzLnllYXJzT2Zmc2V0PzE6MCl9LF9nMnRZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0K3RoaXMueWVhcnNPZmZzZXQrKHQ+PS10aGlzLnllYXJzT2Zmc2V0JiZ0PD0tMT8xOjApfX0pLG4uY2FsZW5kYXJzLnRoYWk9b30seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxNjpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIi4uL21haW4iKSxpPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBhKHQpe3RoaXMubG9jYWw9dGhpcy5yZWdpb25hbE9wdGlvbnNbdHx8IiJdfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl19YS5wcm90b3R5cGU9bmV3IG4uYmFzZUNhbGVuZGFyLGkoYS5wcm90b3R5cGUse25hbWU6IlVtbUFsUXVyYSIsaGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiVW1tIGFsLVF1cmEiLGVwb2NoczpbIkJIIiwiQUgiXSxtb250aE5hbWVzOlsiQWwtTXVoYXJyYW0iLCJTYWZhciIsIlJhYmknIGFsLWF3d2FsIiwiUmFiaScgQWwtVGhhbmkiLCJKdW1hZGEgQWwtQXd3YWwiLCJKdW1hZGEgQWwtVGhhbmkiLCJSYWphYiIsIlNoYSdhYmFuIiwiUmFtYWRhbiIsIlNoYXd3YWwiLCJEaHUgYWwtUWknZGFoIiwiRGh1IGFsLUhpamphaCJdLG1vbnRoTmFtZXNTaG9ydDpbIk11aCIsIlNhZiIsIlJhYjEiLCJSYWIyIiwiSnVtMSIsIkp1bTIiLCJSYWoiLCJTaGEnIiwiUmFtIiwiU2hhdyIsIkRodVEiLCJEaHVIIl0sZGF5TmFtZXM6WyJZYXdtIGFsLUFoYWQiLCJZYXdtIGFsLUl0aG5haW4iLCJZYXdtIGFsLVRoYWxcdTAxMDF0aFx1MDEwMVx1MjAxOSIsIllhd20gYWwtQXJiYVx1MjAxOFx1MDEwMVx1MjAxOSIsIllhd20gYWwtS2hhbVx1MDEyYnMiLCJZYXdtIGFsLUp1bVx1MjAxOGEiLCJZYXdtIGFsLVNhYnQiXSxkYXlOYW1lc01pbjpbIkFoIiwiSXRoIiwiVGgiLCJBciIsIktoIiwiSnUiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Inl5eXkvbW0vZGQiLGZpcnN0RGF5OjYsaXNSVEw6ITB9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkWWVhcik7cmV0dXJuIDM1NT09PXRoaXMuZGF5c0luWWVhcihlLnllYXIoKSl9LHdlZWtPZlllYXI6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMubmV3RGF0ZSh0LGUscik7cmV0dXJuIG4uYWRkKC1uLmRheU9mV2VlaygpLCJkIiksTWF0aC5mbG9vcigobi5kYXlPZlllYXIoKS0xKS83KSsxfSxkYXlzSW5ZZWFyOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MTtyPD0xMjtyKyspZSs9dGhpcy5kYXlzSW5Nb250aCh0LHIpO3JldHVybiBlfSxkYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksbi5sb2NhbC5pbnZhbGlkTW9udGgpLnRvSkQoKS0yNGU1Ky41LGk9MCxhPTA7YTxvLmxlbmd0aDthKyspe2lmKG9bYV0+cilyZXR1cm4gb1tpXS1vW2ktMV07aSsrfXJldHVybiAzMH0sd2Vla0RheTpmdW5jdGlvbih0LGUscil7cmV0dXJuIDUhPT10aGlzLmRheU9mV2Vlayh0LGUscil9LHRvSkQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLG4ubG9jYWwuaW52YWxpZERhdGUpLGE9MTIqKGkueWVhcigpLTEpK2kubW9udGgoKS0xNTI5MjtyZXR1cm4gaS5kYXkoKStvW2EtMV0tMSsyNGU1LS41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQtMjRlNSsuNSxyPTAsbj0wO248by5sZW5ndGgmJiEob1tuXT5lKTtuKyspcisrO3ZhciBpPXIrMTUyOTIsYT1NYXRoLmZsb29yKChpLTEpLzEyKSxzPWErMSxsPWktMTIqYSxjPWUtb1tyLTFdKzE7cmV0dXJuIHRoaXMubmV3RGF0ZShzLGwsYyl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPW4uYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5pc1ZhbGlkLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaSYmKGk9KHQ9bnVsbCE9dC55ZWFyP3QueWVhcjp0KT49MTI3NiYmdDw9MTUwMCksaX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4uYmFzZUNhbGVuZGFyLnByb3RvdHlwZS5fdmFsaWRhdGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGEueWVhcjwxMjc2fHxhLnllYXI+MTUwMCl0aHJvdyBpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLmxvY2FsLm5hbWUpO3JldHVybiBhfX0pLG4uY2FsZW5kYXJzLnVtbWFscXVyYT1hO3ZhciBvPVsyMCw1MCw3OSwxMDksMTM4LDE2OCwxOTcsMjI3LDI1NiwyODYsMzE1LDM0NSwzNzQsNDA0LDQzMyw0NjMsNDkyLDUyMiw1NTEsNTgxLDYxMSw2NDEsNjcwLDcwMCw3MjksNzU5LDc4OCw4MTgsODQ3LDg3Nyw5MDYsOTM2LDk2NSw5OTUsMTAyNCwxMDU0LDEwODMsMTExMywxMTQyLDExNzIsMTIwMSwxMjMxLDEyNjAsMTI5MCwxMzIwLDEzNTAsMTM3OSwxNDA5LDE0MzgsMTQ2OCwxNDk3LDE1MjcsMTU1NiwxNTg2LDE2MTUsMTY0NSwxNjc0LDE3MDQsMTczMywxNzYzLDE3OTIsMTgyMiwxODUxLDE4ODEsMTkxMCwxOTQwLDE5NjksMTk5OSwyMDI4LDIwNTgsMjA4NywyMTE3LDIxNDYsMjE3NiwyMjA1LDIyMzUsMjI2NCwyMjk0LDIzMjMsMjM1MywyMzgzLDI0MTMsMjQ0MiwyNDcyLDI1MDEsMjUzMSwyNTYwLDI1OTAsMjYxOSwyNjQ5LDI2NzgsMjcwOCwyNzM3LDI3NjcsMjc5NiwyODI2LDI4NTUsMjg4NSwyOTE0LDI5NDQsMjk3MywzMDAzLDMwMzIsMzA2MiwzMDkxLDMxMjEsMzE1MCwzMTgwLDMyMDksMzIzOSwzMjY4LDMyOTgsMzMyNywzMzU3LDMzODYsMzQxNiwzNDQ2LDM0NzYsMzUwNSwzNTM1LDM1NjQsMzU5NCwzNjIzLDM2NTMsMzY4MiwzNzEyLDM3NDEsMzc3MSwzODAwLDM4MzAsMzg1OSwzODg5LDM5MTgsMzk0OCwzOTc3LDQwMDcsNDAzNiw0MDY2LDQwOTUsNDEyNSw0MTU1LDQxODUsNDIxNCw0MjQ0LDQyNzMsNDMwMyw0MzMyLDQzNjIsNDM5MSw0NDIxLDQ0NTAsNDQ4MCw0NTA5LDQ1MzksNDU2OCw0NTk4LDQ2MjcsNDY1Nyw0Njg2LDQ3MTYsNDc0NSw0Nzc1LDQ4MDQsNDgzNCw0ODYzLDQ4OTMsNDkyMiw0OTUyLDQ5ODEsNTAxMSw1MDQwLDUwNzAsNTA5OSw1MTI5LDUxNTgsNTE4OCw1MjE4LDUyNDgsNTI3Nyw1MzA3LDUzMzYsNTM2Niw1Mzk1LDU0MjUsNTQ1NCw1NDg0LDU1MTMsNTU0Myw1NTcyLDU2MDIsNTYzMSw1NjYxLDU2OTAsNTcyMCw1NzQ5LDU3NzksNTgwOCw1ODM4LDU4NjcsNTg5Nyw1OTI2LDU5NTYsNTk4NSw2MDE1LDYwNDQsNjA3NCw2MTAzLDYxMzMsNjE2Miw2MTkyLDYyMjEsNjI1MSw2MjgxLDYzMTEsNjM0MCw2MzcwLDYzOTksNjQyOSw2NDU4LDY0ODgsNjUxNyw2NTQ3LDY1NzYsNjYwNiw2NjM1LDY2NjUsNjY5NCw2NzI0LDY3NTMsNjc4Myw2ODEyLDY4NDIsNjg3MSw2OTAxLDY5MzAsNjk2MCw2OTg5LDcwMTksNzA0OCw3MDc4LDcxMDcsNzEzNyw3MTY2LDcxOTYsNzIyNSw3MjU1LDcyODQsNzMxNCw3MzQ0LDczNzQsNzQwMyw3NDMzLDc0NjIsNzQ5Miw3NTIxLDc1NTEsNzU4MCw3NjEwLDc2MzksNzY2OSw3Njk4LDc3MjgsNzc1Nyw3Nzg3LDc4MTYsNzg0Niw3ODc1LDc5MDUsNzkzNCw3OTY0LDc5OTMsODAyMyw4MDUzLDgwODMsODExMiw4MTQyLDgxNzEsODIwMSw4MjMwLDgyNjAsODI4OSw4MzE5LDgzNDgsODM3OCw4NDA3LDg0MzcsODQ2Niw4NDk2LDg1MjUsODU1NSw4NTg0LDg2MTQsODY0Myw4NjczLDg3MDIsODczMiw4NzYxLDg3OTEsODgyMSw4ODUwLDg4ODAsODkwOSw4OTM4LDg5NjgsODk5Nyw5MDI3LDkwNTYsOTA4Niw5MTE1LDkxNDUsOTE3NSw5MjA1LDkyMzQsOTI2NCw5MjkzLDkzMjIsOTM1Miw5MzgxLDk0MTAsOTQ0MCw5NDcwLDk0OTksOTUyOSw5NTU5LDk1ODksOTYxOCw5NjQ4LDk2NzcsOTcwNiw5NzM2LDk3NjUsOTc5NCw5ODI0LDk4NTMsOTg4Myw5OTEzLDk5NDMsOTk3MiwxMDAwMiwxMDAzMiwxMDA2MSwxMDA5MCwxMDEyMCwxMDE0OSwxMDE3OCwxMDIwOCwxMDIzNywxMDI2NywxMDI5NywxMDMyNiwxMDM1NiwxMDM4NiwxMDQxNSwxMDQ0NSwxMDQ3NCwxMDUwNCwxMDUzMywxMDU2MiwxMDU5MiwxMDYyMSwxMDY1MSwxMDY4MCwxMDcxMCwxMDc0MCwxMDc3MCwxMDc5OSwxMDgyOSwxMDg1OCwxMDg4OCwxMDkxNywxMDk0NywxMDk3NiwxMTAwNSwxMTAzNSwxMTA2NCwxMTA5NCwxMTEyNCwxMTE1MywxMTE4MywxMTIxMywxMTI0MiwxMTI3MiwxMTMwMSwxMTMzMSwxMTM2MCwxMTM4OSwxMTQxOSwxMTQ0OCwxMTQ3OCwxMTUwNywxMTUzNywxMTU2NywxMTU5NiwxMTYyNiwxMTY1NSwxMTY4NSwxMTcxNSwxMTc0NCwxMTc3NCwxMTgwMywxMTgzMiwxMTg2MiwxMTg5MSwxMTkyMSwxMTk1MCwxMTk4MCwxMjAxMCwxMjAzOSwxMjA2OSwxMjA5OSwxMjEyOCwxMjE1OCwxMjE4NywxMjIxNiwxMjI0NiwxMjI3NSwxMjMwNCwxMjMzNCwxMjM2NCwxMjM5MywxMjQyMywxMjQ1MywxMjQ4MywxMjUxMiwxMjU0MiwxMjU3MSwxMjYwMCwxMjYzMCwxMjY1OSwxMjY4OCwxMjcxOCwxMjc0NywxMjc3NywxMjgwNywxMjgzNywxMjg2NiwxMjg5NiwxMjkyNiwxMjk1NSwxMjk4NCwxMzAxNCwxMzA0MywxMzA3MiwxMzEwMiwxMzEzMSwxMzE2MSwxMzE5MSwxMzIyMCwxMzI1MCwxMzI4MCwxMzMxMCwxMzMzOSwxMzM2OCwxMzM5OCwxMzQyNywxMzQ1NiwxMzQ4NiwxMzUxNSwxMzU0NSwxMzU3NCwxMzYwNCwxMzYzNCwxMzY2NCwxMzY5MywxMzcyMywxMzc1MiwxMzc4MiwxMzgxMSwxMzg0MCwxMzg3MCwxMzg5OSwxMzkyOSwxMzk1OCwxMzk4OCwxNDAxOCwxNDA0NywxNDA3NywxNDEwNywxNDEzNiwxNDE2NiwxNDE5NSwxNDIyNCwxNDI1NCwxNDI4MywxNDMxMywxNDM0MiwxNDM3MiwxNDQwMSwxNDQzMSwxNDQ2MSwxNDQ5MCwxNDUyMCwxNDU1MCwxNDU3OSwxNDYwOSwxNDYzOCwxNDY2NywxNDY5NywxNDcyNiwxNDc1NiwxNDc4NSwxNDgxNSwxNDg0NCwxNDg3NCwxNDkwNCwxNDkzMywxNDk2MywxNDk5MywxNTAyMSwxNTA1MSwxNTA4MSwxNTExMCwxNTE0MCwxNTE2OSwxNTE5OSwxNTIyOCwxNTI1OCwxNTI4NywxNTMxNywxNTM0NywxNTM3NywxNTQwNiwxNTQzNiwxNTQ2NSwxNTQ5NCwxNTUyNCwxNTU1MywxNTU4MiwxNTYxMiwxNTY0MSwxNTY3MSwxNTcwMSwxNTczMSwxNTc2MCwxNTc5MCwxNTgyMCwxNTg0OSwxNTg3OCwxNTkwOCwxNTkzNywxNTk2NiwxNTk5NiwxNjAyNSwxNjA1NSwxNjA4NSwxNjExNCwxNjE0NCwxNjE3NCwxNjIwNCwxNjIzMywxNjI2MiwxNjI5MiwxNjMyMSwxNjM1MCwxNjM4MCwxNjQwOSwxNjQzOSwxNjQ2OCwxNjQ5OCwxNjUyOCwxNjU1OCwxNjU4NywxNjYxNywxNjY0NiwxNjY3NiwxNjcwNSwxNjczNCwxNjc2NCwxNjc5MywxNjgyMywxNjg1MiwxNjg4MiwxNjkxMiwxNjk0MSwxNjk3MSwxNzAwMSwxNzAzMCwxNzA2MCwxNzA4OSwxNzExOCwxNzE0OCwxNzE3NywxNzIwNywxNzIzNiwxNzI2NiwxNzI5NSwxNzMyNSwxNzM1NSwxNzM4NCwxNzQxNCwxNzQ0NCwxNzQ3MywxNzUwMiwxNzUzMiwxNzU2MSwxNzU5MSwxNzYyMCwxNzY1MCwxNzY3OSwxNzcwOSwxNzczOCwxNzc2OCwxNzc5OCwxNzgyNywxNzg1NywxNzg4NiwxNzkxNiwxNzk0NSwxNzk3NSwxODAwNCwxODAzNCwxODA2MywxODA5MywxODEyMiwxODE1MiwxODE4MSwxODIxMSwxODI0MSwxODI3MCwxODMwMCwxODMzMCwxODM1OSwxODM4OCwxODQxOCwxODQ0NywxODQ3NiwxODUwNiwxODUzNSwxODU2NSwxODU5NSwxODYyNSwxODY1NCwxODY4NCwxODcxNCwxODc0MywxODc3MiwxODgwMiwxODgzMSwxODg2MCwxODg5MCwxODkxOSwxODk0OSwxODk3OSwxOTAwOCwxOTAzOCwxOTA2OCwxOTA5OCwxOTEyNywxOTE1NiwxOTE4NiwxOTIxNSwxOTI0NCwxOTI3NCwxOTMwMywxOTMzMywxOTM2MiwxOTM5MiwxOTQyMiwxOTQ1MiwxOTQ4MSwxOTUxMSwxOTU0MCwxOTU3MCwxOTU5OSwxOTYyOCwxOTY1OCwxOTY4NywxOTcxNywxOTc0NiwxOTc3NiwxOTgwNiwxOTgzNiwxOTg2NSwxOTg5NSwxOTkyNCwxOTk1NCwxOTk4MywyMDAxMiwyMDA0MiwyMDA3MSwyMDEwMSwyMDEzMCwyMDE2MCwyMDE5MCwyMDIxOSwyMDI0OSwyMDI3OSwyMDMwOCwyMDMzOCwyMDM2NywyMDM5NiwyMDQyNiwyMDQ1NSwyMDQ4NSwyMDUxNCwyMDU0NCwyMDU3MywyMDYwMywyMDYzMywyMDY2MiwyMDY5MiwyMDcyMSwyMDc1MSwyMDc4MCwyMDgxMCwyMDgzOSwyMDg2OSwyMDg5OCwyMDkyOCwyMDk1NywyMDk4NywyMTAxNiwyMTA0NiwyMTA3NiwyMTEwNSwyMTEzNSwyMTE2NCwyMTE5NCwyMTIyMywyMTI1MywyMTI4MiwyMTMxMiwyMTM0MSwyMTM3MSwyMTQwMCwyMTQzMCwyMTQ1OSwyMTQ4OSwyMTUxOSwyMTU0OCwyMTU3OCwyMTYwNywyMTYzNywyMTY2NiwyMTY5NiwyMTcyNSwyMTc1NCwyMTc4NCwyMTgxMywyMTg0MywyMTg3MywyMTkwMiwyMTkzMiwyMTk2MiwyMTk5MSwyMjAyMSwyMjA1MCwyMjA4MCwyMjEwOSwyMjEzOCwyMjE2OCwyMjE5NywyMjIyNywyMjI1NiwyMjI4NiwyMjMxNiwyMjM0NiwyMjM3NSwyMjQwNSwyMjQzNCwyMjQ2NCwyMjQ5MywyMjUyMiwyMjU1MiwyMjU4MSwyMjYxMSwyMjY0MCwyMjY3MCwyMjcwMCwyMjczMCwyMjc1OSwyMjc4OSwyMjgxOCwyMjg0OCwyMjg3NywyMjkwNiwyMjkzNiwyMjk2NSwyMjk5NCwyMzAyNCwyMzA1NCwyMzA4MywyMzExMywyMzE0MywyMzE3MywyMzIwMiwyMzIzMiwyMzI2MSwyMzI5MCwyMzMyMCwyMzM0OSwyMzM3OSwyMzQwOCwyMzQzOCwyMzQ2NywyMzQ5NywyMzUyNywyMzU1NiwyMzU4NiwyMzYxNiwyMzY0NSwyMzY3NCwyMzcwNCwyMzczMywyMzc2MywyMzc5MiwyMzgyMiwyMzg1MSwyMzg4MSwyMzkxMCwyMzk0MCwyMzk3MCwyMzk5OSwyNDAyOSwyNDA1OCwyNDA4OCwyNDExNywyNDE0NywyNDE3NiwyNDIwNiwyNDIzNSwyNDI2NSwyNDI5NCwyNDMyNCwyNDM1MywyNDM4MywyNDQxMywyNDQ0MiwyNDQ3MiwyNDUwMSwyNDUzMSwyNDU2MCwyNDU5MCwyNDYxOSwyNDY0OCwyNDY3OCwyNDcwNywyNDczNywyNDc2NywyNDc5NiwyNDgyNiwyNDg1NiwyNDg4NSwyNDkxNSwyNDk0NCwyNDk3NCwyNTAwMywyNTAzMiwyNTA2MiwyNTA5MSwyNTEyMSwyNTE1MCwyNTE4MCwyNTIxMCwyNTI0MCwyNTI2OSwyNTI5OSwyNTMyOCwyNTM1OCwyNTM4NywyNTQxNiwyNTQ0NiwyNTQ3NSwyNTUwNSwyNTUzNCwyNTU2NCwyNTU5NCwyNTYyNCwyNTY1MywyNTY4MywyNTcxMiwyNTc0MiwyNTc3MSwyNTgwMCwyNTgzMCwyNTg1OSwyNTg4OCwyNTkxOCwyNTk0OCwyNTk3NywyNjAwNywyNjAzNywyNjA2NywyNjA5NiwyNjEyNiwyNjE1NSwyNjE4NCwyNjIxNCwyNjI0MywyNjI3MiwyNjMwMiwyNjMzMiwyNjM2MSwyNjM5MSwyNjQyMSwyNjQ1MSwyNjQ4MCwyNjUxMCwyNjUzOSwyNjU2OCwyNjU5OCwyNjYyNywyNjY1NiwyNjY4NiwyNjcxNSwyNjc0NSwyNjc3NSwyNjgwNSwyNjgzNCwyNjg2NCwyNjg5MywyNjkyMywyNjk1MiwyNjk4MiwyNzAxMSwyNzA0MSwyNzA3MCwyNzA5OSwyNzEyOSwyNzE1OSwyNzE4OCwyNzIxOCwyNzI0OCwyNzI3NywyNzMwNywyNzMzNiwyNzM2NiwyNzM5NSwyNzQyNSwyNzQ1NCwyNzQ4NCwyNzUxMywyNzU0MiwyNzU3MiwyNzYwMiwyNzYzMSwyNzY2MSwyNzY5MSwyNzcyMCwyNzc1MCwyNzc3OSwyNzgwOSwyNzgzOCwyNzg2OCwyNzg5NywyNzkyNiwyNzk1NiwyNzk4NSwyODAxNSwyODA0NSwyODA3NCwyODEwNCwyODEzNCwyODE2MywyODE5MywyODIyMiwyODI1MiwyODI4MSwyODMxMCwyODM0MCwyODM2OSwyODM5OSwyODQyOCwyODQ1OCwyODQ4OCwyODUxNywyODU0NywyODU3NywyODYwNywyODYzNiwyODY2NSwyODY5NSwyODcyNCwyODc1NCwyODc4MywyODgxMywyODg0MywyODg3MiwyODkwMSwyODkzMSwyODk2MCwyODk5MCwyOTAxOSwyOTA0OSwyOTA3OCwyOTEwOCwyOTEzNywyOTE2NywyOTE5NiwyOTIyNiwyOTI1NSwyOTI4NSwyOTMxNSwyOTM0NSwyOTM3NSwyOTQwNCwyOTQzNCwyOTQ2MywyOTQ5MiwyOTUyMiwyOTU1MSwyOTU4MCwyOTYxMCwyOTY0MCwyOTY2OSwyOTY5OSwyOTcyOSwyOTc1OSwyOTc4OCwyOTgxOCwyOTg0NywyOTg3NiwyOTkwNiwyOTkzNSwyOTk2NCwyOTk5NCwzMDAyMywzMDA1MywzMDA4MiwzMDExMiwzMDE0MSwzMDE3MSwzMDIwMCwzMDIzMCwzMDI1OSwzMDI4OSwzMDMxOCwzMDM0OCwzMDM3OCwzMDQwOCwzMDQzNywzMDQ2NywzMDQ5NiwzMDUyNiwzMDU1NSwzMDU4NSwzMDYxNCwzMDY0NCwzMDY3MywzMDcwMywzMDczMiwzMDc2MiwzMDc5MSwzMDgyMSwzMDg1MCwzMDg4MCwzMDkwOSwzMDkzOSwzMDk2OCwzMDk5OCwzMTAyNywzMTA1NywzMTA4NiwzMTExNiwzMTE0NSwzMTE3NSwzMTIwNCwzMTIzNCwzMTI2MywzMTI5MywzMTMyMiwzMTM1MiwzMTM4MSwzMTQxMSwzMTQ0MSwzMTQ3MSwzMTUwMCwzMTUzMCwzMTU1OSwzMTU4OSwzMTYxOCwzMTY0OCwzMTY3NiwzMTcwNiwzMTczNiwzMTc2NiwzMTc5NSwzMTgyNSwzMTg1NCwzMTg4NCwzMTkxMywzMTk0MywzMTk3MiwzMjAwMiwzMjAzMSwzMjA2MSwzMjA5MCwzMjEyMCwzMjE1MCwzMjE4MCwzMjIwOSwzMjIzOSwzMjI2OCwzMjI5OCwzMjMyNywzMjM1NywzMjM4NiwzMjQxNiwzMjQ0NSwzMjQ3NSwzMjUwNCwzMjUzNCwzMjU2MywzMjU5MywzMjYyMiwzMjY1MiwzMjY4MSwzMjcxMSwzMjc0MCwzMjc3MCwzMjc5OSwzMjgyOSwzMjg1OCwzMjg4OCwzMjkxNywzMjk0NywzMjk3NiwzMzAwNiwzMzAzNSwzMzA2NSwzMzA5NCwzMzEyNCwzMzE1MywzMzE4MywzMzIxMywzMzI0MywzMzI3MiwzMzMwMiwzMzMzMSwzMzM2MSwzMzM5MCwzMzQyMCwzMzQ1MCwzMzQ3OSwzMzUwOSwzMzUzOSwzMzU2OCwzMzU5OCwzMzYyNywzMzY1NywzMzY4NiwzMzcxNiwzMzc0NSwzMzc3NSwzMzgwNCwzMzgzNCwzMzg2MywzMzg5MywzMzkyMiwzMzk1MiwzMzk4MSwzNDAxMSwzNDA0MCwzNDA2OSwzNDA5OSwzNDEyOCwzNDE1OCwzNDE4NywzNDIxNywzNDI0NywzNDI3NywzNDMwNiwzNDMzNiwzNDM2NSwzNDM5NSwzNDQyNCwzNDQ1NCwzNDQ4MywzNDUxMiwzNDU0MiwzNDU3MSwzNDYwMSwzNDYzMSwzNDY2MCwzNDY5MCwzNDcxOSwzNDc0OSwzNDc3OCwzNDgwOCwzNDgzNywzNDg2NywzNDg5NiwzNDkyNiwzNDk1NSwzNDk4NSwzNTAxNSwzNTA0NCwzNTA3NCwzNTEwMywzNTEzMywzNTE2MiwzNTE5MiwzNTIyMiwzNTI1MSwzNTI4MCwzNTMxMCwzNTM0MCwzNTM3MCwzNTM5OSwzNTQyOSwzNTQ1OCwzNTQ4OCwzNTUxNywzNTU0NywzNTU3NiwzNTYwNSwzNTYzNSwzNTY2NSwzNTY5NCwzNTcyMywzNTc1MywzNTc4MiwzNTgxMSwzNTg0MSwzNTg3MSwzNTkwMSwzNTkzMCwzNTk2MCwzNTk4OSwzNjAxOSwzNjA0OCwzNjA3OCwzNjEwNywzNjEzNiwzNjE2NiwzNjE5NSwzNjIyNSwzNjI1NCwzNjI4NCwzNjMxNCwzNjM0MywzNjM3MywzNjQwMywzNjQzMywzNjQ2MiwzNjQ5MiwzNjUyMSwzNjU1MSwzNjU4MCwzNjYxMCwzNjYzOSwzNjY2OSwzNjY5OCwzNjcyOCwzNjc1NywzNjc4NiwzNjgxNiwzNjg0NSwzNjg3NSwzNjkwNCwzNjkzNCwzNjk2MywzNjk5MywzNzAyMiwzNzA1MiwzNzA4MSwzNzExMSwzNzE0MSwzNzE3MCwzNzIwMCwzNzIyOSwzNzI1OSwzNzI4OCwzNzMxOCwzNzM0NywzNzM3NywzNzQwNiwzNzQzNiwzNzQ2NSwzNzQ5NSwzNzUyNCwzNzU1NCwzNzU4NCwzNzYxMywzNzY0MywzNzY3MiwzNzcwMSwzNzczMSwzNzc2MCwzNzc5MCwzNzgxOSwzNzg0OSwzNzg3OCwzNzkwOCwzNzkzOCwzNzk2NywzNzk5NywzODAyNywzODA1NiwzODA4NSwzODExNSwzODE0NCwzODE3NCwzODIwMywzODIzMywzODI2MiwzODI5MiwzODMyMiwzODM1MSwzODM4MSwzODQxMCwzODQ0MCwzODQ2OSwzODQ5OSwzODUyOCwzODU1OCwzODU4NywzODYxNywzODY0NiwzODY3NiwzODcwNSwzODczNSwzODc2NCwzODc5NCwzODgyMywzODg1MywzODg4MiwzODkxMiwzODk0MSwzODk3MSwzOTAwMSwzOTAzMCwzOTA1OSwzOTA4OSwzOTExOCwzOTE0OCwzOTE3OCwzOTIwOCwzOTIzNywzOTI2NywzOTI5NywzOTMyNiwzOTM1NSwzOTM4NSwzOTQxNCwzOTQ0NCwzOTQ3MywzOTUwMywzOTUzMiwzOTU2MiwzOTU5MiwzOTYyMSwzOTY1MCwzOTY4MCwzOTcwOSwzOTczOSwzOTc2OCwzOTc5OCwzOTgyNywzOTg1NywzOTg4NiwzOTkxNiwzOTk0NiwzOTk3NSw0MDAwNSw0MDAzNSw0MDA2NCw0MDA5NCw0MDEyMyw0MDE1Myw0MDE4Miw0MDIxMiw0MDI0MSw0MDI3MSw0MDMwMCw0MDMzMCw0MDM1OSw0MDM4OSw0MDQxOCw0MDQ0OCw0MDQ3Nyw0MDUwNyw0MDUzNiw0MDU2Niw0MDU5NSw0MDYyNSw0MDY1NSw0MDY4NSw0MDcxNCw0MDc0NCw0MDc3Myw0MDgwMyw0MDgzMiw0MDg2Miw0MDg5Miw0MDkyMSw0MDk1MSw0MDk4MCw0MTAwOSw0MTAzOSw0MTA2OCw0MTA5OCw0MTEyNyw0MTE1Nyw0MTE4Niw0MTIxNiw0MTI0NSw0MTI3NSw0MTMwNCw0MTMzNCw0MTM2NCw0MTM5Myw0MTQyMiw0MTQ1Miw0MTQ4MSw0MTUxMSw0MTU0MCw0MTU3MCw0MTU5OSw0MTYyOSw0MTY1OCw0MTY4OCw0MTcxOCw0MTc0OCw0MTc3Nyw0MTgwNyw0MTgzNiw0MTg2NSw0MTg5NCw0MTkyNCw0MTk1Myw0MTk4Myw0MjAxMiw0MjA0Miw0MjA3Miw0MjEwMiw0MjEzMSw0MjE2MSw0MjE5MCw0MjIyMCw0MjI0OSw0MjI3OSw0MjMwOCw0MjMzNyw0MjM2Nyw0MjM5Nyw0MjQyNiw0MjQ1Niw0MjQ4NSw0MjUxNSw0MjU0NSw0MjU3NCw0MjYwNCw0MjYzMyw0MjY2Miw0MjY5Miw0MjcyMSw0Mjc1MSw0Mjc4MCw0MjgxMCw0MjgzOSw0Mjg2OSw0Mjg5OSw0MjkyOSw0Mjk1OCw0Mjk4OCw0MzAxNyw0MzA0Niw0MzA3Niw0MzEwNSw0MzEzNSw0MzE2NCw0MzE5NCw0MzIyMyw0MzI1Myw0MzI4Myw0MzMxMiw0MzM0Miw0MzM3MSw0MzQwMSw0MzQzMCw0MzQ2MCw0MzQ4OSw0MzUxOSw0MzU0OCw0MzU3OCw0MzYwNyw0MzYzNyw0MzY2Niw0MzY5Niw0MzcyNiw0Mzc1NSw0Mzc4NSw0MzgxNCw0Mzg0NCw0Mzg3Myw0MzkwMyw0MzkzMiw0Mzk2Miw0Mzk5MSw0NDAyMSw0NDA1MCw0NDA4MCw0NDEwOSw0NDEzOSw0NDE2OSw0NDE5OCw0NDIyOCw0NDI1OCw0NDI4Nyw0NDMxNyw0NDM0Niw0NDM3NSw0NDQwNSw0NDQzNCw0NDQ2NCw0NDQ5Myw0NDUyMyw0NDU1Myw0NDU4Miw0NDYxMiw0NDY0MSw0NDY3MSw0NDcwMCw0NDczMCw0NDc1OSw0NDc4OCw0NDgxOCw0NDg0Nyw0NDg3Nyw0NDkwNiw0NDkzNiw0NDk2Niw0NDk5Niw0NTAyNSw0NTA1NSw0NTA4NCw0NTExNCw0NTE0Myw0NTE3Miw0NTIwMiw0NTIzMSw0NTI2MSw0NTI5MCw0NTMyMCw0NTM1MCw0NTM4MCw0NTQwOSw0NTQzOSw0NTQ2OCw0NTQ5OCw0NTUyNyw0NTU1Niw0NTU4Niw0NTYxNSw0NTY0NCw0NTY3NCw0NTcwNCw0NTczMyw0NTc2Myw0NTc5Myw0NTgyMyw0NTg1Miw0NTg4Miw0NTkxMSw0NTk0MCw0NTk3MCw0NTk5OSw0NjAyOCw0NjA1OCw0NjA4OCw0NjExNyw0NjE0Nyw0NjE3Nyw0NjIwNiw0NjIzNiw0NjI2NSw0NjI5NSw0NjMyNCw0NjM1NCw0NjM4Myw0NjQxMyw0NjQ0Miw0NjQ3Miw0NjUwMSw0NjUzMSw0NjU2MCw0NjU5MCw0NjYyMCw0NjY0OSw0NjY3OSw0NjcwOCw0NjczOCw0Njc2Nyw0Njc5Nyw0NjgyNiw0Njg1Niw0Njg4NSw0NjkxNSw0Njk0NCw0Njk3NCw0NzAwMyw0NzAzMyw0NzA2Myw0NzA5Miw0NzEyMiw0NzE1MSw0NzE4MSw0NzIxMCw0NzI0MCw0NzI2OSw0NzI5OCw0NzMyOCw0NzM1Nyw0NzM4Nyw0NzQxNyw0NzQ0Niw0NzQ3Niw0NzUwNiw0NzUzNSw0NzU2NSw0NzU5NCw0NzYyNCw0NzY1Myw0NzY4Miw0NzcxMiw0Nzc0MSw0Nzc3MSw0NzgwMCw0NzgzMCw0Nzg2MCw0Nzg5MCw0NzkxOSw0Nzk0OSw0Nzk3OCw0ODAwOCw0ODAzNyw0ODA2Niw0ODA5Niw0ODEyNSw0ODE1NSw0ODE4NCw0ODIxNCw0ODI0NCw0ODI3Myw0ODMwMyw0ODMzMyw0ODM2Miw0ODM5Miw0ODQyMSw0ODQ1MCw0ODQ4MCw0ODUwOSw0ODUzOCw0ODU2OCw0ODU5OCw0ODYyNyw0ODY1Nyw0ODY4Nyw0ODcxNyw0ODc0Niw0ODc3Niw0ODgwNSw0ODgzNCw0ODg2NCw0ODg5Myw0ODkyMiw0ODk1Miw0ODk4Miw0OTAxMSw0OTA0MSw0OTA3MSw0OTEwMCw0OTEzMCw0OTE2MCw0OTE4OSw0OTIxOCw0OTI0OCw0OTI3Nyw0OTMwNiw0OTMzNiw0OTM2NSw0OTM5NSw0OTQyNSw0OTQ1NSw0OTQ4NCw0OTUxNCw0OTU0Myw0OTU3Myw0OTYwMiw0OTYzMiw0OTY2MSw0OTY5MCw0OTcyMCw0OTc0OSw0OTc3OSw0OTgwOSw0OTgzOCw0OTg2OCw0OTg5OCw0OTkyNyw0OTk1Nyw0OTk4Niw1MDAxNiw1MDA0NSw1MDA3NSw1MDEwNCw1MDEzMyw1MDE2Myw1MDE5Miw1MDIyMiw1MDI1Miw1MDI4MSw1MDMxMSw1MDM0MCw1MDM3MCw1MDQwMCw1MDQyOSw1MDQ1OSw1MDQ4OCw1MDUxOCw1MDU0Nyw1MDU3Niw1MDYwNiw1MDYzNSw1MDY2NSw1MDY5NCw1MDcyNCw1MDc1NCw1MDc4NCw1MDgxMyw1MDg0Myw1MDg3Miw1MDkwMiw1MDkzMSw1MDk2MCw1MDk5MCw1MTAxOSw1MTA0OSw1MTA3OCw1MTEwOCw1MTEzOCw1MTE2Nyw1MTE5Nyw1MTIyNyw1MTI1Niw1MTI4Niw1MTMxNSw1MTM0NSw1MTM3NCw1MTQwMyw1MTQzMyw1MTQ2Miw1MTQ5Miw1MTUyMiw1MTU1Miw1MTU4Miw1MTYxMSw1MTY0MSw1MTY3MCw1MTY5OSw1MTcyOSw1MTc1OCw1MTc4Nyw1MTgxNiw1MTg0Niw1MTg3Niw1MTkwNiw1MTkzNiw1MTk2NSw1MTk5NSw1MjAyNSw1MjA1NCw1MjA4Myw1MjExMyw1MjE0Miw1MjE3MSw1MjIwMCw1MjIzMCw1MjI2MCw1MjI5MCw1MjMxOSw1MjM0OSw1MjM3OSw1MjQwOCw1MjQzOCw1MjQ2Nyw1MjQ5Nyw1MjUyNiw1MjU1NSw1MjU4NSw1MjYxNCw1MjY0NCw1MjY3Myw1MjcwMyw1MjczMyw1Mjc2Miw1Mjc5Miw1MjgyMiw1Mjg1MSw1Mjg4MSw1MjkxMCw1MjkzOSw1Mjk2OSw1Mjk5OCw1MzAyOCw1MzA1Nyw1MzA4Nyw1MzExNiw1MzE0Niw1MzE3Niw1MzIwNSw1MzIzNSw1MzI2NCw1MzI5NCw1MzMyNCw1MzM1Myw1MzM4Myw1MzQxMiw1MzQ0MSw1MzQ3MSw1MzUwMCw1MzUzMCw1MzU1OSw1MzU4OSw1MzYxOSw1MzY0OCw1MzY3OCw1MzcwOCw1MzczNyw1Mzc2Nyw1Mzc5Niw1MzgyNSw1Mzg1NSw1Mzg4NCw1MzkxMyw1Mzk0Myw1Mzk3Myw1NDAwMyw1NDAzMiw1NDA2Miw1NDA5Miw1NDEyMSw1NDE1MSw1NDE4MCw1NDIwOSw1NDIzOSw1NDI2OCw1NDI5Nyw1NDMyNyw1NDM1Nyw1NDM4Nyw1NDQxNiw1NDQ0Niw1NDQ3Niw1NDUwNSw1NDUzNSw1NDU2NCw1NDU5Myw1NDYyMyw1NDY1Miw1NDY4MSw1NDcxMSw1NDc0MSw1NDc3MCw1NDgwMCw1NDgzMCw1NDg1OSw1NDg4OSw1NDkxOSw1NDk0OCw1NDk3Nyw1NTAwNyw1NTAzNiw1NTA2Niw1NTA5NSw1NTEyNSw1NTE1NCw1NTE4NCw1NTIxMyw1NTI0Myw1NTI3Myw1NTMwMiw1NTMzMiw1NTM2MSw1NTM5MSw1NTQyMCw1NTQ1MCw1NTQ3OSw1NTUwOCw1NTUzOCw1NTU2Nyw1NTU5Nyw1NTYyNyw1NTY1Nyw1NTY4Niw1NTcxNiw1NTc0NSw1NTc3NSw1NTgwNCw1NTgzNCw1NTg2Myw1NTg5Miw1NTkyMiw1NTk1MSw1NTk4MSw1NjAxMSw1NjA0MCw1NjA3MCw1NjEwMCw1NjEyOSw1NjE1OSw1NjE4OCw1NjIxOCw1NjI0Nyw1NjI3Niw1NjMwNiw1NjMzNSw1NjM2NSw1NjM5NCw1NjQyNCw1NjQ1NCw1NjQ4Myw1NjUxMyw1NjU0Myw1NjU3Miw1NjYwMSw1NjYzMSw1NjY2MCw1NjY5MCw1NjcxOSw1Njc0OSw1Njc3OCw1NjgwOCw1NjgzNyw1Njg2Nyw1Njg5Nyw1NjkyNiw1Njk1Niw1Njk4NSw1NzAxNSw1NzA0NCw1NzA3NCw1NzEwMyw1NzEzMyw1NzE2Miw1NzE5Miw1NzIyMSw1NzI1MSw1NzI4MCw1NzMxMCw1NzM0MCw1NzM2OSw1NzM5OSw1NzQyOSw1NzQ1OCw1NzQ4Nyw1NzUxNyw1NzU0Niw1NzU3Niw1NzYwNSw1NzYzNCw1NzY2NCw1NzY5NCw1NzcyMyw1Nzc1Myw1Nzc4Myw1NzgxMyw1Nzg0Miw1Nzg3MSw1NzkwMSw1NzkzMCw1Nzk1OSw1Nzk4OSw1ODAxOCw1ODA0OCw1ODA3Nyw1ODEwNyw1ODEzNyw1ODE2Nyw1ODE5Niw1ODIyNiw1ODI1NSw1ODI4NSw1ODMxNCw1ODM0Myw1ODM3Myw1ODQwMiw1ODQzMiw1ODQ2MSw1ODQ5MSw1ODUyMSw1ODU1MSw1ODU4MCw1ODYxMCw1ODYzOSw1ODY2OSw1ODY5OCw1ODcyNyw1ODc1Nyw1ODc4Niw1ODgxNiw1ODg0NSw1ODg3NSw1ODkwNSw1ODkzNCw1ODk2NCw1ODk5NCw1OTAyMyw1OTA1Myw1OTA4Miw1OTExMSw1OTE0MSw1OTE3MCw1OTIwMCw1OTIyOSw1OTI1OSw1OTI4OCw1OTMxOCw1OTM0OCw1OTM3Nyw1OTQwNyw1OTQzNiw1OTQ2Niw1OTQ5NSw1OTUyNSw1OTU1NCw1OTU4NCw1OTYxMyw1OTY0Myw1OTY3Miw1OTcwMiw1OTczMSw1OTc2MSw1OTc5MSw1OTgyMCw1OTg1MCw1OTg3OSw1OTkwOSw1OTkzOSw1OTk2OCw1OTk5Nyw2MDAyNyw2MDA1Niw2MDA4Niw2MDExNSw2MDE0NSw2MDE3NCw2MDIwNCw2MDIzNCw2MDI2NCw2MDI5Myw2MDMyMyw2MDM1Miw2MDM4MSw2MDQxMSw2MDQ0MCw2MDQ2OSw2MDQ5OSw2MDUyOCw2MDU1OCw2MDU4OCw2MDYxOCw2MDY0OCw2MDY3Nyw2MDcwNyw2MDczNiw2MDc2NSw2MDc5NSw2MDgyNCw2MDg1Myw2MDg4Myw2MDkxMiw2MDk0Miw2MDk3Miw2MTAwMiw2MTAzMSw2MTA2MSw2MTA5MCw2MTEyMCw2MTE0OSw2MTE3OSw2MTIwOCw2MTIzNyw2MTI2Nyw2MTI5Niw2MTMyNiw2MTM1Niw2MTM4NSw2MTQxNSw2MTQ0NSw2MTQ3NCw2MTUwNCw2MTUzMyw2MTU2Myw2MTU5Miw2MTYyMSw2MTY1MSw2MTY4MCw2MTcxMCw2MTczOSw2MTc2OSw2MTc5OSw2MTgyOCw2MTg1OCw2MTg4OCw2MTkxNyw2MTk0Nyw2MTk3Niw2MjAwNiw2MjAzNSw2MjA2NCw2MjA5NCw2MjEyMyw2MjE1Myw2MjE4Miw2MjIxMiw2MjI0Miw2MjI3MSw2MjMwMSw2MjMzMSw2MjM2MCw2MjM5MCw2MjQxOSw2MjQ0OCw2MjQ3OCw2MjUwNyw2MjUzNyw2MjU2Niw2MjU5Niw2MjYyNSw2MjY1NSw2MjY4NSw2MjcxNSw2Mjc0NCw2Mjc3NCw2MjgwMyw2MjgzMiw2Mjg2Miw2Mjg5MSw2MjkyMSw2Mjk1MCw2Mjk4MCw2MzAwOSw2MzAzOSw2MzA2OSw2MzA5OSw2MzEyOCw2MzE1Nyw2MzE4Nyw2MzIxNiw2MzI0Niw2MzI3NSw2MzMwNSw2MzMzNCw2MzM2Myw2MzM5Myw2MzQyMyw2MzQ1Myw2MzQ4Miw2MzUxMiw2MzU0MSw2MzU3MSw2MzYwMCw2MzYzMCw2MzY1OSw2MzY4OSw2MzcxOCw2Mzc0Nyw2Mzc3Nyw2MzgwNyw2MzgzNiw2Mzg2Niw2Mzg5NSw2MzkyNSw2Mzk1NSw2Mzk4NCw2NDAxNCw2NDA0Myw2NDA3Myw2NDEwMiw2NDEzMSw2NDE2MSw2NDE5MCw2NDIyMCw2NDI0OSw2NDI3OSw2NDMwOSw2NDMzOSw2NDM2OCw2NDM5OCw2NDQyNyw2NDQ1Nyw2NDQ4Niw2NDUxNSw2NDU0NSw2NDU3NCw2NDYwMyw2NDYzMyw2NDY2Myw2NDY5Miw2NDcyMiw2NDc1Miw2NDc4Miw2NDgxMSw2NDg0MSw2NDg3MCw2NDg5OSw2NDkyOSw2NDk1OCw2NDk4Nyw2NTAxNyw2NTA0Nyw2NTA3Niw2NTEwNiw2NTEzNiw2NTE2Niw2NTE5NSw2NTIyNSw2NTI1NCw2NTI4Myw2NTMxMyw2NTM0Miw2NTM3MSw2NTQwMSw2NTQzMSw2NTQ2MCw2NTQ5MCw2NTUyMCw2NTU0OSw2NTU3OSw2NTYwOCw2NTYzOCw2NTY2Nyw2NTY5Nyw2NTcyNiw2NTc1NSw2NTc4NSw2NTgxNSw2NTg0NCw2NTg3NCw2NTkwMyw2NTkzMyw2NTk2Myw2NTk5Miw2NjAyMiw2NjA1MSw2NjA4MSw2NjExMCw2NjE0MCw2NjE2OSw2NjE5OSw2NjIyOCw2NjI1OCw2NjI4Nyw2NjMxNyw2NjM0Niw2NjM3Niw2NjQwNSw2NjQzNSw2NjQ2NSw2NjQ5NCw2NjUyNCw2NjU1Myw2NjU4Myw2NjYxMiw2NjY0MSw2NjY3MSw2NjcwMCw2NjczMCw2Njc2MCw2Njc4OSw2NjgxOSw2Njg0OSw2Njg3OCw2NjkwOCw2NjkzNyw2Njk2Nyw2Njk5Niw2NzAyNSw2NzA1NSw2NzA4NCw2NzExNCw2NzE0Myw2NzE3Myw2NzIwMyw2NzIzMyw2NzI2Miw2NzI5Miw2NzMyMSw2NzM1MSw2NzM4MCw2NzQwOSw2NzQzOSw2NzQ2OCw2NzQ5Nyw2NzUyNyw2NzU1Nyw2NzU4Nyw2NzYxNyw2NzY0Niw2NzY3Niw2NzcwNSw2NzczNSw2Nzc2NCw2Nzc5Myw2NzgyMyw2Nzg1Miw2Nzg4Miw2NzkxMSw2Nzk0MSw2Nzk3MSw2OGUzLDY4MDMwLDY4MDYwLDY4MDg5LDY4MTE5LDY4MTQ4LDY4MTc3LDY4MjA3LDY4MjM2LDY4MjY2LDY4Mjk1LDY4MzI1LDY4MzU0LDY4Mzg0LDY4NDE0LDY4NDQzLDY4NDczLDY4NTAyLDY4NTMyLDY4NTYxLDY4NTkxLDY4NjIwLDY4NjUwLDY4Njc5LDY4NzA4LDY4NzM4LDY4NzY4LDY4Nzk3LDY4ODI3LDY4ODU3LDY4ODg2LDY4OTE2LDY4OTQ2LDY4OTc1LDY5MDA0LDY5MDM0LDY5MDYzLDY5MDkyLDY5MTIyLDY5MTUyLDY5MTgxLDY5MjExLDY5MjQwLDY5MjcwLDY5MzAwLDY5MzMwLDY5MzU5LDY5Mzg4LDY5NDE4LDY5NDQ3LDY5NDc2LDY5NTA2LDY5NTM1LDY5NTY1LDY5NTk1LDY5NjI0LDY5NjU0LDY5Njg0LDY5NzEzLDY5NzQzLDY5NzcyLDY5ODAyLDY5ODMxLDY5ODYxLDY5ODkwLDY5OTE5LDY5OTQ5LDY5OTc4LDcwMDA4LDcwMDM4LDcwMDY3LDcwMDk3LDcwMTI2LDcwMTU2LDcwMTg2LDcwMjE1LDcwMjQ1LDcwMjc0LDcwMzAzLDcwMzMzLDcwMzYyLDcwMzkyLDcwNDIxLDcwNDUxLDcwNDgxLDcwNTEwLDcwNTQwLDcwNTcwLDcwNTk5LDcwNjI5LDcwNjU4LDcwNjg3LDcwNzE3LDcwNzQ2LDcwNzc2LDcwODA1LDcwODM1LDcwODY0LDcwODk0LDcwOTI0LDcwOTU0LDcwOTgzLDcxMDEzLDcxMDQyLDcxMDcxLDcxMTAxLDcxMTMwLDcxMTU5LDcxMTg5LDcxMjE4LDcxMjQ4LDcxMjc4LDcxMzA4LDcxMzM3LDcxMzY3LDcxMzk3LDcxNDI2LDcxNDU1LDcxNDg1LDcxNTE0LDcxNTQzLDcxNTczLDcxNjAyLDcxNjMyLDcxNjYyLDcxNjkxLDcxNzIxLDcxNzUxLDcxNzgxLDcxODEwLDcxODM5LDcxODY5LDcxODk4LDcxOTI3LDcxOTU3LDcxOTg2LDcyMDE2LDcyMDQ2LDcyMDc1LDcyMTA1LDcyMTM1LDcyMTY0LDcyMTk0LDcyMjIzLDcyMjUzLDcyMjgyLDcyMzExLDcyMzQxLDcyMzcwLDcyNDAwLDcyNDI5LDcyNDU5LDcyNDg5LDcyNTE4LDcyNTQ4LDcyNTc3LDcyNjA3LDcyNjM3LDcyNjY2LDcyNjk1LDcyNzI1LDcyNzU0LDcyNzg0LDcyODEzLDcyODQzLDcyODcyLDcyOTAyLDcyOTMxLDcyOTYxLDcyOTkxLDczMDIwLDczMDUwLDczMDgwLDczMTA5LDczMTM5LDczMTY4LDczMTk3LDczMjI3LDczMjU2LDczMjg2LDczMzE1LDczMzQ1LDczMzc1LDczNDA0LDczNDM0LDczNDY0LDczNDkzLDczNTIzLDczNTUyLDczNTgxLDczNjExLDczNjQwLDczNjY5LDczNjk5LDczNzI5LDczNzU4LDczNzg4LDczODE4LDczODQ4LDczODc3LDczOTA3LDczOTM2LDczOTY1LDczOTk1LDc0MDI0LDc0MDUzLDc0MDgzLDc0MTEzLDc0MTQyLDc0MTcyLDc0MjAyLDc0MjMxLDc0MjYxLDc0MjkxLDc0MzIwLDc0MzQ5LDc0Mzc5LDc0NDA4LDc0NDM3LDc0NDY3LDc0NDk3LDc0NTI2LDc0NTU2LDc0NTg2LDc0NjE1LDc0NjQ1LDc0Njc1LDc0NzA0LDc0NzMzLDc0NzYzLDc0NzkyLDc0ODIyLDc0ODUxLDc0ODgxLDc0OTEwLDc0OTQwLDc0OTY5LDc0OTk5LDc1MDI5LDc1MDU4LDc1MDg4LDc1MTE3LDc1MTQ3LDc1MTc2LDc1MjA2LDc1MjM1LDc1MjY0LDc1Mjk0LDc1MzIzLDc1MzUzLDc1MzgzLDc1NDEyLDc1NDQyLDc1NDcyLDc1NTAxLDc1NTMxLDc1NTYwLDc1NTkwLDc1NjE5LDc1NjQ4LDc1Njc4LDc1NzA3LDc1NzM3LDc1NzY2LDc1Nzk2LDc1ODI2LDc1ODU2LDc1ODg1LDc1OTE1LDc1OTQ0LDc1OTc0LDc2MDAzLDc2MDMyLDc2MDYyLDc2MDkxLDc2MTIxLDc2MTUwLDc2MTgwLDc2MjEwLDc2MjM5LDc2MjY5LDc2Mjk5LDc2MzI4LDc2MzU4LDc2Mzg3LDc2NDE2LDc2NDQ2LDc2NDc1LDc2NTA1LDc2NTM0LDc2NTY0LDc2NTkzLDc2NjIzLDc2NjUzLDc2NjgyLDc2NzEyLDc2NzQxLDc2NzcxLDc2ODAxLDc2ODMwLDc2ODU5LDc2ODg5LDc2OTE4LDc2OTQ4LDc2OTc3LDc3MDA3LDc3MDM2LDc3MDY2LDc3MDk2LDc3MTI1LDc3MTU1LDc3MTg1LDc3MjE0LDc3MjQzLDc3MjczLDc3MzAyLDc3MzMyLDc3MzYxLDc3MzkwLDc3NDIwLDc3NDUwLDc3NDc5LDc3NTA5LDc3NTM5LDc3NTY5LDc3NTk4LDc3NjI3LDc3NjU3LDc3Njg2LDc3NzE1LDc3NzQ1LDc3Nzc0LDc3ODA0LDc3ODMzLDc3ODYzLDc3ODkzLDc3OTIzLDc3OTUyLDc3OTgyLDc4MDExLDc4MDQxLDc4MDcwLDc4MDk5LDc4MTI5LDc4MTU4LDc4MTg4LDc4MjE3LDc4MjQ3LDc4Mjc3LDc4MzA3LDc4MzM2LDc4MzY2LDc4Mzk1LDc4NDI1LDc4NDU0LDc4NDgzLDc4NTEzLDc4NTQyLDc4NTcyLDc4NjAxLDc4NjMxLDc4NjYxLDc4NjkwLDc4NzIwLDc4NzUwLDc4Nzc5LDc4ODA4LDc4ODM4LDc4ODY3LDc4ODk3LDc4OTI2LDc4OTU2LDc4OTg1LDc5MDE1LDc5MDQ0LDc5MDc0LDc5MTA0LDc5MTMzLDc5MTYzLDc5MTkyLDc5MjIyLDc5MjUxLDc5MjgxLDc5MzEwLDc5MzQwLDc5MzY5LDc5Mzk5LDc5NDI4LDc5NDU4LDc5NDg3LDc5NTE3LDc5NTQ2LDc5NTc2LDc5NjA2LDc5NjM1LDc5NjY1LDc5Njk1LDc5NzI0LDc5NzUzLDc5NzgzLDc5ODEyLDc5ODQxLDc5ODcxLDc5OTAwLDc5OTMwLDc5OTYwLDc5OTkwXX0seyIuLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxNzpbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQoIm9iamVjdC1hc3NpZ24iKTtmdW5jdGlvbiBpKCl7dGhpcy5yZWdpb25hbE9wdGlvbnM9W10sdGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdPXtpbnZhbGlkQ2FsZW5kYXI6IkNhbGVuZGFyIHswfSBub3QgZm91bmQiLGludmFsaWREYXRlOiJJbnZhbGlkIHswfSBkYXRlIixpbnZhbGlkTW9udGg6IkludmFsaWQgezB9IG1vbnRoIixpbnZhbGlkWWVhcjoiSW52YWxpZCB7MH0geWVhciIsZGlmZmVyZW50Q2FsZW5kYXJzOiJDYW5ub3QgbWl4IHswfSBhbmQgezF9IGRhdGVzIn0sdGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl0sdGhpcy5jYWxlbmRhcnM9e30sdGhpcy5fbG9jYWxDYWxzPXt9fWZ1bmN0aW9uIGEodCxlLHIsbil7aWYodGhpcy5fY2FsZW5kYXI9dCx0aGlzLl95ZWFyPWUsdGhpcy5fbW9udGg9cix0aGlzLl9kYXk9biwwPT09dGhpcy5fY2FsZW5kYXIuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHRoaXMuX3llYXIsdGhpcy5fbW9udGgsdGhpcy5fZGF5KSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIjAwMDAwMCIuc3Vic3RyaW5nKDAsZS0odD0iIit0KS5sZW5ndGgpK3R9ZnVuY3Rpb24gcygpe3RoaXMuc2hvcnRZZWFyQ3V0b2ZmPSIrMTAifWZ1bmN0aW9uIGwodCl7dGhpcy5sb2NhbD10aGlzLnJlZ2lvbmFsT3B0aW9uc1t0XXx8dGhpcy5yZWdpb25hbE9wdGlvbnNbIiJdfW4oaS5wcm90b3R5cGUse2luc3RhbmNlOmZ1bmN0aW9uKHQsZSl7dD0odHx8ImdyZWdvcmlhbiIpLnRvTG93ZXJDYXNlKCksZT1lfHwiIjt2YXIgcj10aGlzLl9sb2NhbENhbHNbdCsiLSIrZV07aWYoIXImJnRoaXMuY2FsZW5kYXJzW3RdJiYocj1uZXcgdGhpcy5jYWxlbmRhcnNbdF0oZSksdGhpcy5fbG9jYWxDYWxzW3QrIi0iK2VdPXIpLCFyKXRocm93KHRoaXMubG9jYWwuaW52YWxpZENhbGVuZGFyfHx0aGlzLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZENhbGVuZGFyKS5yZXBsYWNlKC9cezBcfS8sdCk7cmV0dXJuIHJ9LG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4obj0obnVsbCE9dCYmdC55ZWFyP3QuY2FsZW5kYXIoKToic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5pbnN0YW5jZShuLGkpOm4pfHx0aGlzLmluc3RhbmNlKCkpLm5ld0RhdGUodCxlLHIpfSxzdWJzdGl0dXRlRGlnaXRzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZSgvWzAtOV0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9fSxzdWJzdGl0dXRlQ2hpbmVzZURpZ2l0czpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIG49IiIsaT0wO3I+MDspe3ZhciBhPXIlMTA7bj0oMD09PWE/IiI6dFthXStlW2ldKStuLGkrKyxyPU1hdGguZmxvb3Ioci8xMCl9cmV0dXJuIDA9PT1uLmluZGV4T2YodFsxXStlWzFdKSYmKG49bi5zdWJzdHIoMSkpLG58fHRbMF19fX0pLG4oYS5wcm90b3R5cGUse25ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9jYWxlbmRhci5uZXdEYXRlKG51bGw9PXQ/dGhpczp0LGUscil9LHllYXI6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX3llYXI6dGhpcy5zZXQodCwieSIpfSxtb250aDpmdW5jdGlvbih0KXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5fbW9udGg6dGhpcy5zZXQodCwibSIpfSxkYXk6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2RheTp0aGlzLnNldCh0LCJkIil9LGRhdGU6ZnVuY3Rpb24odCxlLHIpe2lmKCF0aGlzLl9jYWxlbmRhci5pc1ZhbGlkKHQsZSxyKSl0aHJvdyhjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKTtyZXR1cm4gdGhpcy5feWVhcj10LHRoaXMuX21vbnRoPWUsdGhpcy5fZGF5PXIsdGhpc30sbGVhcFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIubGVhcFllYXIodGhpcyl9LGVwb2NoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVwb2NoKHRoaXMpfSxmb3JtYXRZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZvcm1hdFllYXIodGhpcyl9LG1vbnRoT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMpfSx3ZWVrT2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLndlZWtPZlllYXIodGhpcyl9LGRheXNJblllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luWWVhcih0aGlzKX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzKX0sZGF5c0luTW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5c0luTW9udGgodGhpcyl9LGRheU9mV2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcyl9LHdlZWtEYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla0RheSh0aGlzKX0sZXh0cmFJbmZvOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmV4dHJhSW5mbyh0aGlzKX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLHQsZSl9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcyx0LGUpfSxjb21wYXJlVG86ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsZW5kYXIubmFtZSE9PXQuX2NhbGVuZGFyLm5hbWUpdGhyb3coYy5sb2NhbC5kaWZmZXJlbnRDYWxlbmRhcnN8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5kaWZmZXJlbnRDYWxlbmRhcnMpLnJlcGxhY2UoL1x7MFx9Lyx0aGlzLl9jYWxlbmRhci5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5fY2FsZW5kYXIubG9jYWwubmFtZSk7dmFyIGU9dGhpcy5feWVhciE9PXQuX3llYXI/dGhpcy5feWVhci10Ll95ZWFyOnRoaXMuX21vbnRoIT09dC5fbW9udGg/dGhpcy5tb250aE9mWWVhcigpLXQubW9udGhPZlllYXIoKTp0aGlzLl9kYXktdC5fZGF5O3JldHVybiAwPT09ZT8wOmU8MD8tMToxfSxjYWxlbmRhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhcn0sdG9KRDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYWxlbmRhci50b0pEKHRoaXMpfSxmcm9tSkQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KRCh0KX0sdG9KU0RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY2FsZW5kYXIudG9KU0RhdGUodGhpcyl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyLmZyb21KU0RhdGUodCl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKHRoaXMueWVhcigpKSw0KSsiLSIrbyh0aGlzLm1vbnRoKCksMikrIi0iK28odGhpcy5kYXkoKSwyKX19KSxuKHMucHJvdG90eXBlLHtfdmFsaWRhdGVMZXZlbDowLG5ld0RhdGU6ZnVuY3Rpb24odCxlLHIpe3JldHVybiBudWxsPT10P3RoaXMudG9kYXkoKToodC55ZWFyJiYodGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSxyPXQuZGF5KCksZT10Lm1vbnRoKCksdD10LnllYXIoKSksbmV3IGEodGhpcyx0LGUscikpfSx0b2RheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmZyb21KU0RhdGUobmV3IERhdGUpfSxlcG9jaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcikueWVhcigpPDA/dGhpcy5sb2NhbC5lcG9jaHNbMF06dGhpcy5sb2NhbC5lcG9jaHNbMV19LGZvcm1hdFllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuKGUueWVhcigpPDA/Ii0iOiIiKStvKE1hdGguYWJzKGUueWVhcigpKSw0KX0sbW9udGhzSW5ZZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKSwxMn0sbW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl92YWxpZGF0ZSh0LGUsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpO3JldHVybihyLm1vbnRoKCkrdGhpcy5tb250aHNJblllYXIociktdGhpcy5maXJzdE1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcihyKSt0aGlzLm1pbk1vbnRofSxmcm9tTW9udGhPZlllYXI6ZnVuY3Rpb24odCxlKXt2YXIgcj0oZSt0aGlzLmZpcnN0TW9udGgtMip0aGlzLm1pbk1vbnRoKSV0aGlzLm1vbnRoc0luWWVhcih0KSt0aGlzLm1pbk1vbnRoO3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHIsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkTW9udGh8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkTW9udGgpLHJ9LGRheXNJblllYXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdmFsaWRhdGUodCx0aGlzLm1pbk1vbnRoLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZFllYXJ8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkWWVhcik7cmV0dXJuIHRoaXMubGVhcFllYXIoZSk/MzY2OjM2NX0sZGF5T2ZZZWFyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBuLnRvSkQoKS10aGlzLm5ld0RhdGUobi55ZWFyKCksdGhpcy5mcm9tTW9udGhPZlllYXIobi55ZWFyKCksdGhpcy5taW5Nb250aCksdGhpcy5taW5EYXkpLnRvSkQoKSsxfSxkYXlzSW5XZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDd9LGRheU9mV2VlazpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdmFsaWRhdGUodCxlLHIsYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKTtyZXR1cm4oTWF0aC5mbG9vcih0aGlzLnRvSkQobikpKzIpJXRoaXMuZGF5c0luV2VlaygpfSxleHRyYUluZm86ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpLHt9fSxhZGQ6ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkRGF0ZXx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWREYXRlKSx0aGlzLl9jb3JyZWN0QWRkKHQsdGhpcy5fYWRkKHQsZSxyKSxlLHIpfSxfYWRkOmZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssImQiPT09cnx8InciPT09cil7dmFyIG49dC50b0pEKCkrZSooInciPT09cj90aGlzLmRheXNJbldlZWsoKToxKSxpPXQuY2FsZW5kYXIoKS5mcm9tSkQobik7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlTGV2ZWwtLSxbaS55ZWFyKCksaS5tb250aCgpLGkuZGF5KCldfXRyeXt2YXIgYT10LnllYXIoKSsoInkiPT09cj9lOjApLG89dC5tb250aE9mWWVhcigpKygibSI9PT1yP2U6MCk7aT10LmRheSgpOyJ5Ij09PXI/KHQubW9udGgoKSE9PXRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykmJihvPXRoaXMubmV3RGF0ZShhLHQubW9udGgoKSx0aGlzLm1pbkRheSkubW9udGhPZlllYXIoKSksbz1NYXRoLm1pbihvLHRoaXMubW9udGhzSW5ZZWFyKGEpKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk6Im0iPT09ciYmKCFmdW5jdGlvbih0KXtmb3IoO288dC5taW5Nb250aDspYS0tLG8rPXQubW9udGhzSW5ZZWFyKGEpO2Zvcih2YXIgZT10Lm1vbnRoc0luWWVhcihhKTtvPmUtMSt0Lm1pbk1vbnRoOylhKyssby09ZSxlPXQubW9udGhzSW5ZZWFyKGEpfSh0aGlzKSxpPU1hdGgubWluKGksdGhpcy5kYXlzSW5Nb250aChhLHRoaXMuZnJvbU1vbnRoT2ZZZWFyKGEsbykpKSk7dmFyIHM9W2EsdGhpcy5mcm9tTW9udGhPZlllYXIoYSxvKSxpXTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHN9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fSxfY29ycmVjdEFkZDpmdW5jdGlvbih0LGUscixuKXtpZighKHRoaXMuaGFzWWVhclplcm98fCJ5IiE9PW4mJiJtIiE9PW58fDAhPT1lWzBdJiZ0LnllYXIoKT4wPT1lWzBdPjApKXt2YXIgaT17eTpbMSwxLCJ5Il0sbTpbMSx0aGlzLm1vbnRoc0luWWVhcigtMSksIm0iXSx3Olt0aGlzLmRheXNJbldlZWsoKSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl0sZDpbMSx0aGlzLmRheXNJblllYXIoLTEpLCJkIl19W25dLGE9cjwwPy0xOjE7ZT10aGlzLl9hZGQodCxyKmlbMF0rYSppWzFdLGlbMl0pfXJldHVybiB0LmRhdGUoZVswXSxlWzFdLGVbMl0pfSxzZXQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlKHQsdGhpcy5taW5Nb250aCx0aGlzLm1pbkRheSxjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3ZhciBuPSJ5Ij09PXI/ZTp0LnllYXIoKSxpPSJtIj09PXI/ZTp0Lm1vbnRoKCksYT0iZCI9PT1yP2U6dC5kYXkoKTtyZXR1cm4ieSIhPT1yJiYibSIhPT1yfHwoYT1NYXRoLm1pbihhLHRoaXMuZGF5c0luTW9udGgobixpKSkpLHQuZGF0ZShuLGksYSl9LGlzVmFsaWQ6ZnVuY3Rpb24odCxlLHIpe3RoaXMuX3ZhbGlkYXRlTGV2ZWwrKzt2YXIgbj10aGlzLmhhc1llYXJaZXJvfHwwIT09dDtpZihuKXt2YXIgaT10aGlzLm5ld0RhdGUodCxlLHRoaXMubWluRGF5KTtuPWU+PXRoaXMubWluTW9udGgmJmUtdGhpcy5taW5Nb250aDx0aGlzLm1vbnRoc0luWWVhcihpKSYmcj49dGhpcy5taW5EYXkmJnItdGhpcy5taW5EYXk8dGhpcy5kYXlzSW5Nb250aChpKX1yZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLG59LHRvSlNEYXRlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3JldHVybiBjLmluc3RhbmNlKCkuZnJvbUpEKHRoaXMudG9KRChuKSkudG9KU0RhdGUoKX0sZnJvbUpTRGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5mcm9tSkQoYy5pbnN0YW5jZSgpLmZyb21KU0RhdGUodCkudG9KRCgpKX0sX3ZhbGlkYXRlOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQueWVhcil7aWYoMD09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJnRoaXMubmFtZSE9PXQuY2FsZW5kYXIoKS5uYW1lKXRocm93KGMubG9jYWwuZGlmZmVyZW50Q2FsZW5kYXJzfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uZGlmZmVyZW50Q2FsZW5kYXJzKS5yZXBsYWNlKC9cezBcfS8sdGhpcy5sb2NhbC5uYW1lKS5yZXBsYWNlKC9cezFcfS8sdC5jYWxlbmRhcigpLmxvY2FsLm5hbWUpO3JldHVybiB0fXRyeXtpZih0aGlzLl92YWxpZGF0ZUxldmVsKyssMT09PXRoaXMuX3ZhbGlkYXRlTGV2ZWwmJiF0aGlzLmlzVmFsaWQodCxlLHIpKXRocm93IG4ucmVwbGFjZSgvXHswXH0vLHRoaXMubG9jYWwubmFtZSk7dmFyIGk9dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gdGhpcy5fdmFsaWRhdGVMZXZlbC0tLGl9Y2F0Y2godCl7dGhyb3cgdGhpcy5fdmFsaWRhdGVMZXZlbC0tLHR9fX0pLGwucHJvdG90eXBlPW5ldyBzLG4obC5wcm90b3R5cGUse25hbWU6IkdyZWdvcmlhbiIsamRFcG9jaDoxNzIxNDI1LjUsZGF5c1Blck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0saGFzWWVhclplcm86ITEsbWluTW9udGg6MSxmaXJzdE1vbnRoOjEsbWluRGF5OjEscmVnaW9uYWxPcHRpb25zOnsiIjp7bmFtZToiR3JlZ29yaWFuIixlcG9jaHM6WyJCQ0UiLCJDRSJdLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLGRpZ2l0czpudWxsLGRhdGVGb3JtYXQ6Im1tL2RkL3l5eXkiLGZpcnN0RGF5OjAsaXNSVEw6ITF9fSxsZWFwWWVhcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92YWxpZGF0ZSh0LHRoaXMubWluTW9udGgsdGhpcy5taW5EYXksYy5sb2NhbC5pbnZhbGlkWWVhcnx8Yy5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRZZWFyKTtyZXR1cm4odD1lLnllYXIoKSsoZS55ZWFyKCk8MD8xOjApKSU0PT0wJiYodCUxMDAhPTB8fHQlNDAwPT0wKX0sd2Vla09mWWVhcjpmdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5uZXdEYXRlKHQsZSxyKTtyZXR1cm4gbi5hZGQoNC0obi5kYXlPZldlZWsoKXx8NyksImQiKSxNYXRoLmZsb29yKChuLmRheU9mWWVhcigpLTEpLzcpKzF9LGRheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fdmFsaWRhdGUodCxlLHRoaXMubWluRGF5LGMubG9jYWwuaW52YWxpZE1vbnRofHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZE1vbnRoKTtyZXR1cm4gdGhpcy5kYXlzUGVyTW9udGhbci5tb250aCgpLTFdKygyPT09ci5tb250aCgpJiZ0aGlzLmxlYXBZZWFyKHIueWVhcigpKT8xOjApfSx3ZWVrRGF5OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4odGhpcy5kYXlPZldlZWsodCxlLHIpfHw3KTw2fSx0b0pEOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl92YWxpZGF0ZSh0LGUscixjLmxvY2FsLmludmFsaWREYXRlfHxjLnJlZ2lvbmFsT3B0aW9uc1siIl0uaW52YWxpZERhdGUpO3Q9bi55ZWFyKCksZT1uLm1vbnRoKCkscj1uLmRheSgpLHQ8MCYmdCsrLGU8MyYmKGUrPTEyLHQtLSk7dmFyIGk9TWF0aC5mbG9vcih0LzEwMCksYT0yLWkrTWF0aC5mbG9vcihpLzQpO3JldHVybiBNYXRoLmZsb29yKDM2NS4yNSoodCs0NzE2KSkrTWF0aC5mbG9vcigzMC42MDAxKihlKzEpKStyK2EtMTUyNC41fSxmcm9tSkQ6ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5mbG9vcih0Ky41KSxyPU1hdGguZmxvb3IoKGUtMTg2NzIxNi4yNSkvMzY1MjQuMjUpLG49KHI9ZSsxK3ItTWF0aC5mbG9vcihyLzQpKSsxNTI0LGk9TWF0aC5mbG9vcigobi0xMjIuMSkvMzY1LjI1KSxhPU1hdGguZmxvb3IoMzY1LjI1KmkpLG89TWF0aC5mbG9vcigobi1hKS8zMC42MDAxKSxzPW4tYS1NYXRoLmZsb29yKDMwLjYwMDEqbyksbD1vLShvPjEzLjU/MTM6MSksYz1pLShsPjIuNT80NzE2OjQ3MTUpO3JldHVybiBjPD0wJiZjLS0sdGhpcy5uZXdEYXRlKGMsbCxzKX0sdG9KU0RhdGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3ZhbGlkYXRlKHQsZSxyLGMubG9jYWwuaW52YWxpZERhdGV8fGMucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkRGF0ZSksaT1uZXcgRGF0ZShuLnllYXIoKSxuLm1vbnRoKCktMSxuLmRheSgpKTtyZXR1cm4gaS5zZXRIb3VycygwKSxpLnNldE1pbnV0ZXMoMCksaS5zZXRTZWNvbmRzKDApLGkuc2V0TWlsbGlzZWNvbmRzKDApLGkuc2V0SG91cnMoaS5nZXRIb3VycygpPjEyP2kuZ2V0SG91cnMoKSsyOjApLGl9LGZyb21KU0RhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubmV3RGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpKzEsdC5nZXREYXRlKCkpfX0pO3ZhciBjPWUuZXhwb3J0cz1uZXcgaTtjLmNkYXRlPWEsYy5iYXNlQ2FsZW5kYXI9cyxjLmNhbGVuZGFycy5ncmVnb3JpYW49bH0seyJvYmplY3QtYXNzaWduIjo0NjZ9XSw2MTg6W2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj10KCJvYmplY3QtYXNzaWduIiksaT10KCIuL21haW4iKTtuKGkucmVnaW9uYWxPcHRpb25zWyIiXSx7aW52YWxpZEFyZ3VtZW50czoiSW52YWxpZCBhcmd1bWVudHMiLGludmFsaWRGb3JtYXQ6IkNhbm5vdCBmb3JtYXQgYSBkYXRlIGZyb20gYW5vdGhlciBjYWxlbmRhciIsbWlzc2luZ051bWJlckF0OiJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiB7MH0iLHVua25vd25OYW1lQXQ6IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRMaXRlcmFsQXQ6IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiB7MH0iLHVuZXhwZWN0ZWRUZXh0OiJBZGRpdGlvbmFsIHRleHQgZm91bmQgYXQgZW5kIn0pLGkubG9jYWw9aS5yZWdpb25hbE9wdGlvbnNbIiJdLG4oaS5jZGF0ZS5wcm90b3R5cGUse2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQmJihlPXQsdD0iIiksdGhpcy5fY2FsZW5kYXIuZm9ybWF0RGF0ZSh0fHwiIix0aGlzLGUpfX0pLG4oaS5iYXNlQ2FsZW5kYXIucHJvdG90eXBlLHtVTklYX0VQT0NIOmkuaW5zdGFuY2UoKS5uZXdEYXRlKDE5NzAsMSwxKS50b0pEKCksU0VDU19QRVJfREFZOjg2NDAwLFRJQ0tTX0VQT0NIOmkuaW5zdGFuY2UoKS5qZEVwb2NoLFRJQ0tTX1BFUl9EQVk6ODY0ZTksQVRPTToieXl5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5eXkiLEZVTEw6IkRELCBNTSBkLCB5eXl5IixJU09fODYwMToieXl5eS1tbS1kZCIsSlVMSUFOOiJKIixSRkNfODIyOiJELCBkIE0geXkiLFJGQ184NTA6IkRELCBkZC1NLXl5IixSRkNfMTAzNjoiRCwgZCBNIHl5IixSRkNfMTEyMzoiRCwgZCBNIHl5eXkiLFJGQ18yODIyOiJELCBkIE0geXl5eSIsUlNTOiJELCBkIE0geXkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXl5eS1tbS1kZCIsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUscil7aWYoInN0cmluZyIhPXR5cGVvZiB0JiYocj1lLGU9dCx0PSIiKSwhZSlyZXR1cm4iIjtpZihlLmNhbGVuZGFyKCkhPT10aGlzKXRocm93IGkubG9jYWwuaW52YWxpZEZvcm1hdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLmludmFsaWRGb3JtYXQ7dD10fHx0aGlzLmxvY2FsLmRhdGVGb3JtYXQ7Zm9yKHZhciBuLGEsbyxzLGw9KHI9cnx8e30pLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxjPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMsdT1yLm1vbnRoTnVtYmVyc3x8dGhpcy5sb2NhbC5tb250aE51bWJlcnMsZj1yLm1vbnRoTmFtZXNTaG9ydHx8dGhpcy5sb2NhbC5tb250aE5hbWVzU2hvcnQsaD1yLm1vbnRoTmFtZXN8fHRoaXMubG9jYWwubW9udGhOYW1lcyxwPShyLmNhbGN1bGF0ZVdlZWt8fHRoaXMubG9jYWwuY2FsY3VsYXRlV2VlayxmdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO3crbjx0Lmxlbmd0aCYmdC5jaGFyQXQodytuKT09PWU7KW4rKztyZXR1cm4gdys9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9KSxkPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPSIiK2U7aWYocCh0LG4pKWZvcig7aS5sZW5ndGg8cjspaT0iMCIraTtyZXR1cm4gaX0sbT10aGlzLGc9ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5jYWxsKG0sdCxwKCJtIikpOngoZCgibSIsdC5tb250aCgpLDIpKX0sdj1mdW5jdGlvbih0LGUpe3JldHVybiBlPyJmdW5jdGlvbiI9PXR5cGVvZiBoP2guY2FsbChtLHQpOmhbdC5tb250aCgpLW0ubWluTW9udGhdOiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YuY2FsbChtLHQpOmZbdC5tb250aCgpLW0ubWluTW9udGhdfSx5PXRoaXMubG9jYWwuZGlnaXRzLHg9ZnVuY3Rpb24odCl7cmV0dXJuIHIubG9jYWxOdW1iZXJzJiZ5P3kodCk6dH0sYj0iIixfPSExLHc9MDt3PHQubGVuZ3RoO3crKylpZihfKSInIiE9PXQuY2hhckF0KHcpfHxwKCInIik/Yis9dC5jaGFyQXQodyk6Xz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdCh3KSl7Y2FzZSJkIjpiKz14KGQoImQiLGUuZGF5KCksMikpO2JyZWFrO2Nhc2UiRCI6Yis9KG49IkQiLGE9ZS5kYXlPZldlZWsoKSxvPWwscz1jLHAobik/c1thXTpvW2FdKTticmVhaztjYXNlIm8iOmIrPWQoIm8iLGUuZGF5T2ZZZWFyKCksMyk7YnJlYWs7Y2FzZSJ3IjpiKz1kKCJ3IixlLndlZWtPZlllYXIoKSwyKTticmVhaztjYXNlIm0iOmIrPWcoZSk7YnJlYWs7Y2FzZSJNIjpiKz12KGUscCgiTSIpKTticmVhaztjYXNlInkiOmIrPXAoInkiLDIpP2UueWVhcigpOihlLnllYXIoKSUxMDA8MTA/IjAiOiIiKStlLnllYXIoKSUxMDA7YnJlYWs7Y2FzZSJZIjpwKCJZIiwyKSxiKz1lLmZvcm1hdFllYXIoKTticmVhaztjYXNlIkoiOmIrPWUudG9KRCgpO2JyZWFrO2Nhc2UiQCI6Yis9KGUudG9KRCgpLXRoaXMuVU5JWF9FUE9DSCkqdGhpcy5TRUNTX1BFUl9EQVk7YnJlYWs7Y2FzZSIhIjpiKz0oZS50b0pEKCktdGhpcy5USUNLU19FUE9DSCkqdGhpcy5USUNLU19QRVJfREFZO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP2IrPSInIjpfPSEwO2JyZWFrO2RlZmF1bHQ6Yis9dC5jaGFyQXQodyl9cmV0dXJuIGJ9LHBhcnNlRGF0ZTpmdW5jdGlvbih0LGUscil7aWYobnVsbD09ZSl0aHJvdyBpLmxvY2FsLmludmFsaWRBcmd1bWVudHN8fGkucmVnaW9uYWxPcHRpb25zWyIiXS5pbnZhbGlkQXJndW1lbnRzO2lmKCIiPT09KGU9Im9iamVjdCI9PXR5cGVvZiBlP2UudG9TdHJpbmcoKTplKyIiKSlyZXR1cm4gbnVsbDt0PXR8fHRoaXMubG9jYWwuZGF0ZUZvcm1hdDt2YXIgbj0ocj1yfHx7fSkuc2hvcnRZZWFyQ3V0b2ZmfHx0aGlzLnNob3J0WWVhckN1dG9mZjtuPSJzdHJpbmciIT10eXBlb2Ygbj9uOnRoaXMudG9kYXkoKS55ZWFyKCklMTAwK3BhcnNlSW50KG4sMTApO2Zvcih2YXIgYT1yLmRheU5hbWVzU2hvcnR8fHRoaXMubG9jYWwuZGF5TmFtZXNTaG9ydCxvPXIuZGF5TmFtZXN8fHRoaXMubG9jYWwuZGF5TmFtZXMscz1yLnBhcnNlTW9udGh8fHRoaXMubG9jYWwucGFyc2VNb250aCxsPXIubW9udGhOdW1iZXJzfHx0aGlzLmxvY2FsLm1vbnRoTnVtYmVycyxjPXIubW9udGhOYW1lc1Nob3J0fHx0aGlzLmxvY2FsLm1vbnRoTmFtZXNTaG9ydCx1PXIubW9udGhOYW1lc3x8dGhpcy5sb2NhbC5tb250aE5hbWVzLGY9LTEsaD0tMSxwPS0xLGQ9LTEsbT0tMSxnPSExLHY9ITEseT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj0xO00rbjx0Lmxlbmd0aCYmdC5jaGFyQXQoTStuKT09PWU7KW4rKztyZXR1cm4gTSs9bi0xLE1hdGguZmxvb3Iobi8ocnx8MSkpPjF9LHg9ZnVuY3Rpb24odCxyKXt2YXIgbj15KHQsciksYT1bMiwzLG4/NDoyLG4/NDoyLDEwLDExLDIwXVsib3lZSkAhIi5pbmRleE9mKHQpKzFdLG89bmV3IFJlZ0V4cCgiXi0/XFxkezEsIithKyJ9Iikscz1lLnN1YnN0cmluZyhBKS5tYXRjaChvKTtpZighcyl0aHJvdyhpLmxvY2FsLm1pc3NpbmdOdW1iZXJBdHx8aS5yZWdpb25hbE9wdGlvbnNbIiJdLm1pc3NpbmdOdW1iZXJBdCkucmVwbGFjZSgvXHswXH0vLEEpO3JldHVybiBBKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sYj10aGlzLF89ZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbCl7eSgibSIpO3ZhciB0PWwuY2FsbChiLGUuc3Vic3RyaW5nKEEpKTtyZXR1cm4gQSs9dC5sZW5ndGgsdH1yZXR1cm4geCgibSIpfSx3PWZ1bmN0aW9uKHQscixuLGEpe2Zvcih2YXIgbz15KHQsYSk/bjpyLHM9MDtzPG8ubGVuZ3RoO3MrKylpZihlLnN1YnN0cihBLG9bc10ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09b1tzXS50b0xvd2VyQ2FzZSgpKXJldHVybiBBKz1vW3NdLmxlbmd0aCxzK2IubWluTW9udGg7dGhyb3coaS5sb2NhbC51bmtub3duTmFtZUF0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5rbm93bk5hbWVBdCkucmVwbGFjZSgvXHswXH0vLEEpfSxUPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHUpe3ZhciB0PXkoIk0iKT91LmNhbGwoYixlLnN1YnN0cmluZyhBKSk6Yy5jYWxsKGIsZS5zdWJzdHJpbmcoQSkpO3JldHVybiBBKz10Lmxlbmd0aCx0fXJldHVybiB3KCJNIixjLHUpfSxrPWZ1bmN0aW9uKCl7aWYoZS5jaGFyQXQoQSkhPT10LmNoYXJBdChNKSl0aHJvdyhpLmxvY2FsLnVuZXhwZWN0ZWRMaXRlcmFsQXR8fGkucmVnaW9uYWxPcHRpb25zWyIiXS51bmV4cGVjdGVkTGl0ZXJhbEF0KS5yZXBsYWNlKC9cezBcfS8sQSk7QSsrfSxBPTAsTT0wO008dC5sZW5ndGg7TSsrKWlmKHYpIiciIT09dC5jaGFyQXQoTSl8fHkoIiciKT9rKCk6dj0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChNKSl7Y2FzZSJkIjpkPXgoImQiKTticmVhaztjYXNlIkQiOncoIkQiLGEsbyk7YnJlYWs7Y2FzZSJvIjptPXgoIm8iKTticmVhaztjYXNlInciOngoInciKTticmVhaztjYXNlIm0iOnA9XygpO2JyZWFrO2Nhc2UiTSI6cD1UKCk7YnJlYWs7Y2FzZSJ5Ijp2YXIgUz1NO2c9IXkoInkiLDIpLE09UyxoPXgoInkiLDIpO2JyZWFrO2Nhc2UiWSI6aD14KCJZIiwyKTticmVhaztjYXNlIkoiOmY9eCgiSiIpKy41LCIuIj09PWUuY2hhckF0KEEpJiYoQSsrLHgoIkoiKSk7YnJlYWs7Y2FzZSJAIjpmPXgoIkAiKS90aGlzLlNFQ1NfUEVSX0RBWSt0aGlzLlVOSVhfRVBPQ0g7YnJlYWs7Y2FzZSIhIjpmPXgoIiEiKS90aGlzLlRJQ0tTX1BFUl9EQVkrdGhpcy5USUNLU19FUE9DSDticmVhaztjYXNlIioiOkE9ZS5sZW5ndGg7YnJlYWs7Y2FzZSInIjp5KCInIik/aygpOnY9ITA7YnJlYWs7ZGVmYXVsdDprKCl9aWYoQTxlLmxlbmd0aCl0aHJvdyBpLmxvY2FsLnVuZXhwZWN0ZWRUZXh0fHxpLnJlZ2lvbmFsT3B0aW9uc1siIl0udW5leHBlY3RlZFRleHQ7aWYoLTE9PT1oP2g9dGhpcy50b2RheSgpLnllYXIoKTpoPDEwMCYmZyYmKGgrPS0xPT09bj8xOTAwOnRoaXMudG9kYXkoKS55ZWFyKCktdGhpcy50b2RheSgpLnllYXIoKSUxMDAtKGg8PW4/MDoxMDApKSwic3RyaW5nIj09dHlwZW9mIHAmJihwPXMuY2FsbCh0aGlzLGgscCkpLG0+LTEpe3A9MSxkPW07Zm9yKHZhciBFPXRoaXMuZGF5c0luTW9udGgoaCxwKTtkPkU7RT10aGlzLmRheXNJbk1vbnRoKGgscCkpcCsrLGQtPUV9cmV0dXJuIGY+LTE/dGhpcy5mcm9tSkQoZik6dGhpcy5uZXdEYXRlKGgscCxkKX0sZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbih0LGUscixuLGkpe3ImJiJvYmplY3QiIT10eXBlb2YgciYmKGk9bixuPXIscj1udWxsKSwic3RyaW5nIiE9dHlwZW9mIG4mJihpPW4sbj0iIik7dmFyIGE9dGhpcztyZXR1cm4gZT1lP2UubmV3RGF0ZSgpOm51bGwsdD1udWxsPT10P2U6InN0cmluZyI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3RyeXtyZXR1cm4gYS5wYXJzZURhdGUobix0LGkpfWNhdGNoKHQpe31mb3IodmFyIGU9KCh0PXQudG9Mb3dlckNhc2UoKSkubWF0Y2goL15jLykmJnI/ci5uZXdEYXRlKCk6bnVsbCl8fGEudG9kYXkoKSxvPS8oWystXT9bMC05XSspXHMqKGR8d3xtfHkpPy9nLHM9by5leGVjKHQpO3M7KWUuYWRkKHBhcnNlSW50KHNbMV0sMTApLHNbMl18fCJkIikscz1vLmV4ZWModCk7cmV0dXJuIGV9KHQpOiJudW1iZXIiPT10eXBlb2YgdD9pc05hTih0KXx8dD09PTEvMHx8dD09PS0xLzA/ZTphLnRvZGF5KCkuYWRkKHQsImQiKTphLm5ld0RhdGUodCl9fSl9LHsiLi9tYWluIjo2MTcsIm9iamVjdC1hc3NpZ24iOjQ2Nn1dLDYxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz10WzBdLHM9clswXSxsPVswXSxjPXM7bnw9MDt2YXIgdT0wLGY9cztmb3IodT0wO3U8bzsrK3Upe3ZhciBoPWVbbl0tYSxwPWVbbitjXS1hO2g+PTAhPXA+PTAmJmkucHVzaChsWzBdKy41Ky41KihoK3ApLyhoLXApKSxuKz1mLCsrbFswXX19fTtlLmV4cG9ydHM9KG49e2Z1bmNOYW1lOntmdW5jTmFtZToiemVyb0Nyb3NzaW5ncyJ9LmZ1bmNOYW1lfSxmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3ZhciBhPXIuZHR5cGUsbz1yLm9yZGVyLHM9W2Esby5qb2luKCldLmpvaW4oKSxsPWVbc107cmV0dXJuIGx8fChlW3NdPWw9dChbYSxvXSkpLGwoci5zaGFwZS5zbGljZSgwKSxyLmRhdGEsci5zdHJpZGUsMHxyLm9mZnNldCxuLGkpfX0oaS5iaW5kKHZvaWQgMCxuKSkpfSx7fV0sNjIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBlPStlfHwwLG4odC5oaSh0LnNoYXBlWzBdLTEpLHIsZSkscn07dmFyIG49dCgiLi9saWIvemMtY29yZSIpfSx7Ii4vbGliL3pjLWNvcmUiOjYxOX1dLDYyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9W3twYXRoOiIiLGJhY2tvZmY6MH0se3BhdGg6Ik0tMi40LC0zVjNMMC42LDBaIixiYWNrb2ZmOi42fSx7cGF0aDoiTS0zLjcsLTIuNVYyLjVMMS4zLDBaIixiYWNrb2ZmOjEuM30se3BhdGg6Ik0tNC40NSwtM0wtMS42NSwtMC4yVjAuMkwtNC40NSwzTDEuNTUsMFoiLGJhY2tvZmY6MS41NX0se3BhdGg6Ik0tMi4yLC0yLjJMLTAuMiwtMC4yVjAuMkwtMi4yLDIuMkwtMS40LDNMMS42LDBMLTEuNCwtM1oiLGJhY2tvZmY6MS42fSx7cGF0aDoiTS00LjQsLTIuMUwtMC42LC0wLjJWMC4yTC00LjQsMi4xTC00LDNMMiwwTC00LC0zWiIsYmFja29mZjoyfSx7cGF0aDoiTTIsMEEyLDIgMCAxLDEgMCwtMkEyLDIgMCAwLDEgMiwwWiIsYmFja29mZjowLG5vUm90YXRlOiEwfSx7cGF0aDoiTTIsMlYtMkgtMlYyWiIsYmFja29mZjowLG5vUm90YXRlOiEwfV19LHt9XSw2MjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJvd19wYXRocyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9bygiYW5ub3RhdGlvbiIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0ZXh0YW5nbGU6e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sZm9udDppKHtlZGl0VHlwZToiY2FsYythcnJheWRyYXciLGNvbG9yRWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxkZmx0Om51bGwsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6ImNlbnRlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHZhbGlnbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIixlZGl0VHlwZToiYXJyYXlkcmF3In0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxib3JkZXJwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxzaG93YXJyb3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXJyb3djb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd2hlYWQ6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLG1heDpuLmxlbmd0aCxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHN0YXJ0YXJyb3doZWFkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6bi5sZW5ndGgsZGZsdDoxLGVkaXRUeXBlOiJhcnJheWRyYXcifSxhcnJvd3NpZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImVuZCIsInN0YXJ0Il0sZXh0cmFzOlsibm9uZSJdLGRmbHQ6ImVuZCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGFycm93c2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46LjMsZGZsdDoxLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YXJ0YXJyb3dzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjouMyxkZmx0OjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sYXJyb3d3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46LjEsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sc3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHN0YXJ0c3RhbmRvZmY6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF5Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGF4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJwaXhlbCIsdmFsdWVzOlsicGl4ZWwiLGEuaWRSZWdleC54LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0sYXlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6InBpeGVsIix2YWx1ZXM6WyJwaXhlbCIsYS5pZFJlZ2V4LnkudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJwYXBlciIsYS5pZFJlZ2V4LngudG9TdHJpbmcoKV0sZWRpdFR5cGU6ImNhbGMifSx4Ont2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJhdXRvIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4c2hpZnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixhLmlkUmVnZXgueS50b1N0cmluZygpXSxlZGl0VHlwZToiY2FsYyJ9LHk6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHlzaGlmdDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sY2xpY2t0b3Nob3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITEsIm9ub2ZmIiwib25vdXQiXSxkZmx0OiExLGVkaXRUeXBlOiJhcnJheWRyYXcifSx4Y2xpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHljbGljazp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXJyYXlkcmF3In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJhcnJheWRyYXcifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGZvbnQ6aSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiYXJyYXlkcmF3In0sY2FwdHVyZWV2ZW50czp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7cmVmOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn19fSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2Fycm93X3BhdGhzIjo2MjF9XSw2MjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9kcmF3IikuZHJhdztmdW5jdGlvbiBvKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7bi5maWx0ZXJWaXNpYmxlKGUuYW5ub3RhdGlvbnMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPWkuZ2V0RnJvbUlkKHQsZS54cmVmKSxuPWkuZ2V0RnJvbUlkKHQsZS55cmVmKSxhPWkuZ2V0UmVmVHlwZShlLnhyZWYpLG89aS5nZXRSZWZUeXBlKGUueXJlZik7ZS5fZXh0cmVtZXM9e30sInJhbmdlIj09PWEmJnMoZSxyKSwicmFuZ2UiPT09byYmcyhlLG4pfSkpfWZ1bmN0aW9uIHModCxlKXt2YXIgcixuPWUuX2lkLGE9bi5jaGFyQXQoMCksbz10W2FdLHM9dFsiYSIrYV0sbD10W2ErInJlZiJdLGM9dFsiYSIrYSsicmVmIl0sdT10WyJfIithKyJwYWRwbHVzIl0sZj10WyJfIithKyJwYWRtaW51cyJdLGg9e3g6MSx5Oi0xfVthXSp0W2ErInNoaWZ0Il0scD0zKnQuYXJyb3dzaXplKnQuYXJyb3d3aWR0aHx8MCxkPXAraCxtPXAtaCxnPTMqdC5zdGFydGFycm93c2l6ZSp0LmFycm93d2lkdGh8fDAsdj1nK2gseT1nLWg7aWYoYz09PWwpe3ZhciB4PWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKG8pXSx7cHBhZHBsdXM6ZCxwcGFkbWludXM6bX0pLGI9aS5maW5kRXh0cmVtZXMoZSxbZS5yMmMocyldLHtwcGFkcGx1czpNYXRoLm1heCh1LHYpLHBwYWRtaW51czpNYXRoLm1heChmLHkpfSk7cj17bWluOlt4Lm1pblswXSxiLm1pblswXV0sbWF4Olt4Lm1heFswXSxiLm1heFswXV19fWVsc2Ugdj1zP3Yrczp2LHk9cz95LXM6eSxyPWkuZmluZEV4dHJlbWVzKGUsW2UucjJjKG8pXSx7cHBhZHBsdXM6TWF0aC5tYXgodSxkLHYpLHBwYWRtaW51czpNYXRoLm1heChmLG0seSl9KTt0Ll9leHRyZW1lc1tuXT1yfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2lmKG4uZmlsdGVyVmlzaWJsZShlLmFubm90YXRpb25zKS5sZW5ndGgmJnQuX2Z1bGxEYXRhLmxlbmd0aClyZXR1cm4gbi5zeW5jT3JBc3luYyhbYSxvXSx0KX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vZHJhdyI6NjI4fV0sNjI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcjtmdW5jdGlvbiBvKHQsZSl7dmFyIHIsbixpLGEsbyxsLGMsdT10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zLGY9W10saD1bXSxwPVtdLGQ9KGV8fFtdKS5sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylpZihhPShpPXVbcl0pLmNsaWNrdG9zaG93KXtmb3Iobj0wO248ZDtuKyspaWYobD0obz1lW25dKS54YXhpcyxjPW8ueWF4aXMsbC5faWQ9PT1pLnhyZWYmJmMuX2lkPT09aS55cmVmJiZsLmQycihvLngpPT09cyhpLl94Y2xpY2ssbCkmJmMuZDJyKG8ueSk9PT1zKGkuX3ljbGljayxjKSl7KGkudmlzaWJsZT8ib25vdXQiPT09YT9oOnA6ZikucHVzaChyKTticmVha31uPT09ZCYmaS52aXNpYmxlJiYib25vdXQiPT09YSYmaC5wdXNoKHIpfXJldHVybntvbjpmLG9mZjpoLGV4cGxpY2l0T2ZmOnB9fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4ibG9nIj09PWUudHlwZT9lLmwycih0KTplLmQycih0KX1lLmV4cG9ydHM9e2hhc0NsaWNrVG9TaG93OmZ1bmN0aW9uKHQsZSl7dmFyIHI9byh0LGUpO3JldHVybiByLm9uLmxlbmd0aD4wfHxyLmV4cGxpY2l0T2ZmLmxlbmd0aD4wfSxvbkNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHIscyxsPW8odCxlKSxjPWwub24sdT1sLm9mZi5jb25jYXQobC5leHBsaWNpdE9mZiksZj17fSxoPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnM7aWYoIWMubGVuZ3RoJiYhdS5sZW5ndGgpcmV0dXJuO2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspKHM9YSh0LmxheW91dCwiYW5ub3RhdGlvbnMiLGhbY1tyXV0pKS5tb2RpZnlJdGVtKCJ2aXNpYmxlIiwhMCksbi5leHRlbmRGbGF0KGYscy5nZXRVcGRhdGVPYmooKSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKykocz1hKHQubGF5b3V0LCJhbm5vdGF0aW9ucyIsaFt1W3JdXSkpLm1vZGlmeUl0ZW0oInZpc2libGUiLCExKSxuLmV4dGVuZEZsYXQoZixzLmdldFVwZGF0ZU9iaigpKTtyZXR1cm4gaS5jYWxsKCJ1cGRhdGUiLHQse30sZil9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9yZWdpc3RyeSI6OTA0fV0sNjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7YSgib3BhY2l0eSIpO3ZhciBvPWEoImJnY29sb3IiKSxzPWEoImJvcmRlcmNvbG9yIiksbD1pLm9wYWNpdHkocyk7YSgiYm9yZGVycGFkIik7dmFyIGM9YSgiYm9yZGVyd2lkdGgiKSx1PWEoInNob3dhcnJvdyIpO2lmKGEoInRleHQiLHU/IiAiOnIuX2RmbHRUaXRsZS5hbm5vdGF0aW9uKSxhKCJ0ZXh0YW5nbGUiKSxuLmNvZXJjZUZvbnQoYSwiZm9udCIsci5mb250KSxhKCJ3aWR0aCIpLGEoImFsaWduIiksYSgiaGVpZ2h0IikmJmEoInZhbGlnbiIpLHUpe3ZhciBmLGgscD1hKCJhcnJvd3NpZGUiKTstMSE9PXAuaW5kZXhPZigiZW5kIikmJihmPWEoImFycm93aGVhZCIpLGg9YSgiYXJyb3dzaXplIikpLC0xIT09cC5pbmRleE9mKCJzdGFydCIpJiYoYSgic3RhcnRhcnJvd2hlYWQiLGYpLGEoInN0YXJ0YXJyb3dzaXplIixoKSksYSgiYXJyb3djb2xvciIsbD9lLmJvcmRlcmNvbG9yOmkuZGVmYXVsdExpbmUpLGEoImFycm93d2lkdGgiLDIqKGwmJmN8fDEpKSxhKCJzdGFuZG9mZiIpLGEoInN0YXJ0c3RhbmRvZmYiKX12YXIgZD1hKCJob3ZlcnRleHQiKSxtPXIuaG92ZXJsYWJlbHx8e307aWYoZCl7dmFyIGc9YSgiaG92ZXJsYWJlbC5iZ2NvbG9yIixtLmJnY29sb3J8fChpLm9wYWNpdHkobyk/aS5yZ2Iobyk6aS5kZWZhdWx0TGluZSkpLHY9YSgiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsbS5ib3JkZXJjb2xvcnx8aS5jb250cmFzdChnKSk7bi5jb2VyY2VGb250KGEsImhvdmVybGFiZWwuZm9udCIse2ZhbWlseTptLmZvbnQuZmFtaWx5LHNpemU6bS5mb250LnNpemUsY29sb3I6bS5mb250LmNvbG9yfHx2fSl9YSgiY2FwdHVyZWV2ZW50cyIsISFkKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NvbG9yIjo2Mzl9XSw2MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucyxmPWUuX2lkLmNoYXJBdCgwKSxoPTA7aDx1Lmxlbmd0aDtoKyspbD11W2hdLGM9ImFubm90YXRpb25zWyIraCsiXS4iLGxbZisicmVmIl09PT1lLl9pZCYmcChmKSxsWyJhIitmKyJyZWYiXT09PWUuX2lkJiZwKCJhIitmKTtmdW5jdGlvbiBwKHQpe3ZhciByPWxbdF0scz1udWxsO3M9bz9pKHIsZS5yYW5nZSk6TWF0aC5wb3coMTAsciksbihzKXx8KHM9bnVsbCksYShjK3Qscyl9fX0seyIuLi8uLi9saWIvdG9fbG9nX3JhbmdlIjo4MDQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw2Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2NvbW1vbl9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfXZhciBsPWEoInZpc2libGUiKSxjPWEoImNsaWNrdG9zaG93Iik7aWYobHx8Yyl7byh0LGUscixhKTtmb3IodmFyIHU9ZS5zaG93YXJyb3csZj1bIngiLCJ5Il0saD1bLTEwLC0zMF0scD17X2Z1bGxMYXlvdXQ6cn0sZD0wO2Q8MjtkKyspe3ZhciBtPWZbZF0sZz1pLmNvZXJjZVJlZih0LGUscCxtLCIiLCJwYXBlciIpO2lmKCJwYXBlciIhPT1nKWkuZ2V0RnJvbUlkKHAsZykuX2FubkluZGljZXMucHVzaChlLl9pbmRleCk7aWYoaS5jb2VyY2VQb3NpdGlvbihlLHAsYSxnLG0sLjUpLHUpe3ZhciB2PSJhIittLHk9aS5jb2VyY2VSZWYodCxlLHAsdiwicGl4ZWwiLFsicGl4ZWwiLCJwYXBlciJdKTsicGl4ZWwiIT09eSYmeSE9PWcmJih5PWVbdl09InBpeGVsIik7dmFyIHg9InBpeGVsIj09PXk/aFtkXTouNDtpLmNvZXJjZVBvc2l0aW9uKGUscCxhLHksdix4KX1hKG0rImFuY2hvciIpLGEobSsic2hpZnQiKX1pZihuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSJdKSx1JiZuLm5vbmVPckFsbCh0LGUsWyJheCIsImF5Il0pLGMpe3ZhciBiPWEoInhjbGljayIpLF89YSgieWNsaWNrIik7ZS5feGNsaWNrPXZvaWQgMD09PWI/ZS54OmkuY2xlYW5Qb3NpdGlvbihiLHAsZS54cmVmKSxlLl95Y2xpY2s9dm9pZCAwPT09Xz9lLnk6aS5jbGVhblBvc2l0aW9uKF8scCxlLnlyZWYpfX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6NjIyLCIuL2NvbW1vbl9kZWZhdWx0cyI6NjI1fV0sNjI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vZngiKSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGQ9dCgiLi4vZHJhZ2VsZW1lbnQiKSxtPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS5hcnJheUVkaXRvcixnPXQoIi4vZHJhd19hcnJvd19oZWFkIik7ZnVuY3Rpb24gdih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQuYW5ub3RhdGlvbnNbZV18fHt9LG49bC5nZXRGcm9tSWQodCxyLnhyZWYpLGk9bC5nZXRGcm9tSWQodCxyLnlyZWYpO24mJm4uc2V0U2NhbGUoKSxpJiZpLnNldFNjYWxlKCkseCh0LHIsZSwhMSxuLGkpfWZ1bmN0aW9uIHkodCxlLHIsbixpKXt2YXIgYT1pW3JdLG89aVtyKyJyZWYiXSxzPS0xIT09ci5pbmRleE9mKCJ5IiksYz0iZG9tYWluIj09PWwuZ2V0UmVmVHlwZShvKSx1PXM/bi5oOm4udztyZXR1cm4gdD9jP2ErKHM/LWU6ZSkvdC5fbGVuZ3RoOnQucDJyKHQucjJwKGEpK2UpOmErKHM/LWU6ZSkvdX1mdW5jdGlvbiB4KHQsZSxyLGEsdix4KXt2YXIgYixfLHc9dC5fZnVsbExheW91dCxUPXQuX2Z1bGxMYXlvdXQuX3NpemUsaz10Ll9jb250ZXh0LmVkaXRzO2E/KGI9ImFubm90YXRpb24tIithLF89YSsiLmFubm90YXRpb25zIik6KGI9ImFubm90YXRpb24iLF89ImFubm90YXRpb25zIik7dmFyIEE9bSh0LmxheW91dCxfLGUpLE09QS5tb2RpZnlCYXNlLFM9QS5tb2RpZnlJdGVtLEU9QS5nZXRVcGRhdGVPYmo7dy5faW5mb2xheWVyLnNlbGVjdEFsbCgiLiIrYisnW2RhdGEtaW5kZXg9IicrcisnIl0nKS5yZW1vdmUoKTt2YXIgTD0iY2xpcCIrdy5fdWlkKyJfYW5uIityO2lmKGUuX2lucHV0JiYhMSE9PWUudmlzaWJsZSl7dmFyIEM9e3g6e30seTp7fX0sUD0rZS50ZXh0YW5nbGV8fDAsST13Ll9pbmZvbGF5ZXIuYXBwZW5kKCJnIikuY2xhc3NlZChiLCEwKS5hdHRyKCJkYXRhLWluZGV4IixTdHJpbmcocikpLnN0eWxlKCJvcGFjaXR5IixlLm9wYWNpdHkpLE89SS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbm5vdGF0aW9uLXRleHQtZyIsITApLHo9a1tlLnNob3dhcnJvdz8iYW5ub3RhdGlvblRhaWwiOiJhbm5vdGF0aW9uUG9zaXRpb24iXSxEPWUuY2FwdHVyZWV2ZW50c3x8ay5hbm5vdGF0aW9uVGV4dHx8eixSPU8uYXBwZW5kKCJnIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIixEPyJhbGwiOm51bGwpLmNhbGwocCwicG9pbnRlciIpLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dpbmc9ITEsdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4uZXZlbnQpKX0pKTtlLmhvdmVydGV4dCYmUi5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXt2YXIgcj1lLmhvdmVybGFiZWwsbj1yLmZvbnQsaT10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGE9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmLmxvbmVIb3Zlcih7eDA6aS5sZWZ0LWEubGVmdCx4MTppLnJpZ2h0LWEubGVmdCx5OihpLnRvcCtpLmJvdHRvbSkvMi1hLnRvcCx0ZXh0OmUuaG92ZXJ0ZXh0LGNvbG9yOnIuYmdjb2xvcixib3JkZXJDb2xvcjpyLmJvcmRlcmNvbG9yLGZvbnRGYW1pbHk6bi5mYW1pbHksZm9udFNpemU6bi5zaXplLGZvbnRDb2xvcjpuLmNvbG9yfSx7Y29udGFpbmVyOncuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOncuX3BhcGVyLm5vZGUoKSxnZDp0fSl9KSkub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24oKXtmLmxvbmVVbmhvdmVyKHcuX2hvdmVybGF5ZXIubm9kZSgpKX0pKTt2YXIgRj1lLmJvcmRlcndpZHRoLEI9ZS5ib3JkZXJwYWQsTj1GK0Isaj1SLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmciKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixGKyJweCIpLmNhbGwoYy5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChjLmZpbGwsZS5iZ2NvbG9yKSxVPWUud2lkdGh8fGUuaGVpZ2h0LFY9dy5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitMKS5kYXRhKFU/WzBdOltdKTtWLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmNsYXNzZWQoImFubmNsaXAiLCEwKS5hdHRyKCJpZCIsTCkuYXBwZW5kKCJyZWN0IiksVi5leGl0KCkucmVtb3ZlKCk7dmFyIEg9ZS5mb250LHE9dy5fbWV0YT9vLnRlbXBsYXRlU3RyaW5nKGUudGV4dCx3Ll9tZXRhKTplLnRleHQsRz1SLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoImFubm90YXRpb24tdGV4dCIsITApLnRleHQocSk7ay5hbm5vdGF0aW9uVGV4dD9HLmNhbGwoaC5tYWtlRWRpdGFibGUse2RlbGVnYXRlOlIsZ2Q6dH0pLmNhbGwoVykub24oImVkaXQiLChmdW5jdGlvbihyKXtlLnRleHQ9cix0aGlzLmNhbGwoVyksUygidGV4dCIsciksdiYmdi5hdXRvcmFuZ2UmJk0odi5fbmFtZSsiLmF1dG9yYW5nZSIsITApLHgmJnguYXV0b3JhbmdlJiZNKHguX25hbWUrIi5hdXRvcmFuZ2UiLCEwKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpfSkpOkcuY2FsbChXKX1lbHNlIG4uc2VsZWN0QWxsKCIjIitMKS5yZW1vdmUoKTtmdW5jdGlvbiBZKHQpe3ZhciBuPXtpbmRleDpyLGFubm90YXRpb246ZS5faW5wdXQsZnVsbEFubm90YXRpb246ZSxldmVudDp0fTtyZXR1cm4gYSYmKG4uc3VicGxvdElkPWEpLG59ZnVuY3Rpb24gVyhyKXtyZXR1cm4gci5jYWxsKHUuZm9udCxIKS5hdHRyKHsidGV4dC1hbmNob3IiOntsZWZ0OiJzdGFydCIscmlnaHQ6ImVuZCJ9W2UuYWxpZ25dfHwibWlkZGxlIn0pLGguY29udmVydFRvVHNwYW5zKHIsdCxYKSxyfWZ1bmN0aW9uIFgoKXt2YXIgcj1HLnNlbGVjdEFsbCgiYSIpOzE9PT1yLnNpemUoKSYmci50ZXh0KCk9PT1HLnRleHQoKSYmUi5pbnNlcnQoImEiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHsieGxpbms6eGxpbms6aHJlZiI6ci5hdHRyKCJ4bGluazpocmVmIiksInhsaW5rOnhsaW5rOnNob3ciOnIuYXR0cigieGxpbms6c2hvdyIpfSkuc3R5bGUoe2N1cnNvcjoicG9pbnRlciJ9KS5ub2RlKCkuYXBwZW5kQ2hpbGQoai5ub2RlKCkpO3ZhciBuPVIuc2VsZWN0KCIuYW5ub3RhdGlvbi10ZXh0LW1hdGgtZ3JvdXAiKSxmPSFuLmVtcHR5KCksbT11LmJCb3goKGY/bjpHKS5ub2RlKCkpLGI9bS53aWR0aCxfPW0uaGVpZ2h0LEE9ZS53aWR0aHx8YixEPWUuaGVpZ2h0fHxfLEI9TWF0aC5yb3VuZChBKzIqTiksSD1NYXRoLnJvdW5kKEQrMipOKTtmdW5jdGlvbiBxKHQsZSl7cmV0dXJuImF1dG8iPT09ZSYmKGU9dDwxLzM/ImxlZnQiOnQ+Mi8zPyJyaWdodCI6ImNlbnRlciIpLHtjZW50ZXI6MCxtaWRkbGU6MCxsZWZ0Oi41LGJvdHRvbTotLjUscmlnaHQ6LS41LHRvcDouNX1bZV19Zm9yKHZhciBXPSExLFg9WyJ4IiwieSJdLFo9MDtaPFgubGVuZ3RoO1orKyl7dmFyIEosSyxRLCQsdHQsZXQ9WFtaXSxydD1lW2V0KyJyZWYiXXx8ZXQsbnQ9ZVsiYSIrZXQrInJlZiJdLGl0PXt4OnYseTp4fVtldF0sYXQ9KFArKCJ4Ij09PWV0PzA6LTkwKSkqTWF0aC5QSS8xODAsb3Q9QipNYXRoLmNvcyhhdCksc3Q9SCpNYXRoLnNpbihhdCksbHQ9TWF0aC5hYnMob3QpK01hdGguYWJzKHN0KSxjdD1lW2V0KyJhbmNob3IiXSx1dD1lW2V0KyJzaGlmdCJdKigieCI9PT1ldD8xOi0xKSxmdD1DW2V0XSxodD1sLmdldFJlZlR5cGUocnQpO2lmKGl0JiYiZG9tYWluIiE9PWh0KXt2YXIgcHQ9aXQucjJmcmFjdGlvbihlW2V0XSk7KHB0PDB8fHB0PjEpJiYobnQ9PT1ydD8oKHB0PWl0LnIyZnJhY3Rpb24oZVsiYSIrZXRdKSk8MHx8cHQ+MSkmJihXPSEwKTpXPSEwKSxKPWl0Ll9vZmZzZXQraXQucjJwKGVbZXRdKSwkPS41fWVsc2V7dmFyIGR0PSJkb21haW4iPT09aHQ7IngiPT09ZXQ/KFE9ZVtldF0sSj1kdD9pdC5fb2Zmc2V0K2l0Ll9sZW5ndGgqUTpKPVQubCtULncqUSk6KFE9MS1lW2V0XSxKPWR0P2l0Ll9vZmZzZXQraXQuX2xlbmd0aCpROko9VC50K1QuaCpRKSwkPWUuc2hvd2Fycm93Py41OlF9aWYoZS5zaG93YXJyb3cpe2Z0LmhlYWQ9Sjt2YXIgbXQ9ZVsiYSIrZXRdO2lmKHR0PW90KnEoLjUsZS54YW5jaG9yKS1zdCpxKC41LGUueWFuY2hvciksbnQ9PT1ydCl7dmFyIGd0PWwuZ2V0UmVmVHlwZShudCk7ImRvbWFpbiI9PT1ndD8oInkiPT09ZXQmJihtdD0xLW10KSxmdC50YWlsPWl0Ll9vZmZzZXQraXQuX2xlbmd0aCptdCk6InBhcGVyIj09PWd0PyJ5Ij09PWV0PyhtdD0xLW10LGZ0LnRhaWw9VC50K1QuaCptdCk6ZnQudGFpbD1ULmwrVC53Km10OmZ0LnRhaWw9aXQuX29mZnNldCtpdC5yMnAobXQpLEs9dHR9ZWxzZSBmdC50YWlsPUorbXQsSz10dCttdDtmdC50ZXh0PWZ0LnRhaWwrdHQ7dmFyIHZ0PXdbIngiPT09ZXQ/IndpZHRoIjoiaGVpZ2h0Il07aWYoInBhcGVyIj09PXJ0JiYoZnQuaGVhZD1vLmNvbnN0cmFpbihmdC5oZWFkLDEsdnQtMSkpLCJwaXhlbCI9PT1udCl7dmFyIHl0PS1NYXRoLm1heChmdC50YWlsLTMsZnQudGV4dCkseHQ9TWF0aC5taW4oZnQudGFpbCszLGZ0LnRleHQpLXZ0O3l0PjA/KGZ0LnRhaWwrPXl0LGZ0LnRleHQrPXl0KTp4dD4wJiYoZnQudGFpbC09eHQsZnQudGV4dC09eHQpfWZ0LnRhaWwrPXV0LGZ0LmhlYWQrPXV0fWVsc2UgSz10dD1sdCpxKCQsY3QpLGZ0LnRleHQ9Sit0dDtmdC50ZXh0Kz11dCx0dCs9dXQsSys9dXQsZVsiXyIrZXQrInBhZHBsdXMiXT1sdC8yK0ssZVsiXyIrZXQrInBhZG1pbnVzIl09bHQvMi1LLGVbIl8iK2V0KyJzaXplIl09bHQsZVsiXyIrZXQrInNoaWZ0Il09dHR9aWYoVylSLnJlbW92ZSgpO2Vsc2V7dmFyIGJ0PTAsX3Q9MDtpZigibGVmdCIhPT1lLmFsaWduJiYoYnQ9KEEtYikqKCJjZW50ZXIiPT09ZS5hbGlnbj8uNToxKSksInRvcCIhPT1lLnZhbGlnbiYmKF90PShELV8pKigibWlkZGxlIj09PWUudmFsaWduPy41OjEpKSxmKW4uc2VsZWN0KCJzdmciKS5hdHRyKHt4Ok4rYnQtMSx5Ok4rX3R9KS5jYWxsKHUuc2V0Q2xpcFVybCxVP0w6bnVsbCx0KTtlbHNle3ZhciB3dD1OK190LW0udG9wLFR0PU4rYnQtbS5sZWZ0O0cuY2FsbChoLnBvc2l0aW9uVGV4dCxUdCx3dCkuY2FsbCh1LnNldENsaXBVcmwsVT9MOm51bGwsdCl9Vi5zZWxlY3QoInJlY3QiKS5jYWxsKHUuc2V0UmVjdCxOLE4sQSxEKSxqLmNhbGwodS5zZXRSZWN0LEYvMixGLzIsQi1GLEgtRiksUi5jYWxsKHUuc2V0VHJhbnNsYXRlLE1hdGgucm91bmQoQy54LnRleHQtQi8yKSxNYXRoLnJvdW5kKEMueS50ZXh0LUgvMikpLE8uYXR0cih7dHJhbnNmb3JtOiJyb3RhdGUoIitQKyIsIitDLngudGV4dCsiLCIrQy55LnRleHQrIikifSk7dmFyIGt0LEF0PWZ1bmN0aW9uKHIsbil7SS5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLWFycm93LWciKS5yZW1vdmUoKTt2YXIgbD1DLnguaGVhZCxmPUMueS5oZWFkLGg9Qy54LnRhaWwrcixwPUMueS50YWlsK24sbT1DLngudGV4dCtyLGI9Qy55LnRleHQrbixfPW8ucm90YXRpb25YWU1hdHJpeChQLG0sYiksdz1vLmFwcGx5MkRUcmFuc2Zvcm0oXyksQT1vLmFwcGx5MkRUcmFuc2Zvcm0yKF8pLEw9K2ouYXR0cigid2lkdGgiKSx6PStqLmF0dHIoImhlaWdodCIpLEQ9bS0uNSpMLEY9RCtMLEI9Yi0uNSp6LE49Qit6LFU9W1tELEIsRCxOXSxbRCxOLEYsTl0sW0YsTixGLEJdLFtGLEIsRCxCXV0ubWFwKEEpO2lmKCFVLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdF4hIW8uc2VnbWVudHNJbnRlcnNlY3QobCxmLGwrMWU2LGYrMWU2LGVbMF0sZVsxXSxlWzJdLGVbM10pfSksITEpKXtVLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW8uc2VnbWVudHNJbnRlcnNlY3QoaCxwLGwsZix0WzBdLHRbMV0sdFsyXSx0WzNdKTtlJiYoaD1lLngscD1lLnkpfSkpO3ZhciBWPWUuYXJyb3d3aWR0aCxIPWUuYXJyb3djb2xvcixxPWUuYXJyb3dzaWRlLEc9SS5hcHBlbmQoImciKS5zdHlsZSh7b3BhY2l0eTpjLm9wYWNpdHkoSCl9KS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93LWciLCEwKSxZPUcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0iK2grIiwiK3ArIkwiK2wrIiwiK2YpLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrInB4IikuY2FsbChjLnN0cm9rZSxjLnJnYihIKSk7aWYoZyhZLHEsZSksay5hbm5vdGF0aW9uUG9zaXRpb24mJlkubm9kZSgpLnBhcmVudE5vZGUmJiFhKXt2YXIgVz1sLFg9ZjtpZihlLnN0YW5kb2ZmKXt2YXIgWj1NYXRoLnNxcnQoTWF0aC5wb3cobC1oLDIpK01hdGgucG93KGYtcCwyKSk7Vys9ZS5zdGFuZG9mZiooaC1sKS9aLFgrPWUuc3RhbmRvZmYqKHAtZikvWn12YXIgSixLLFE9Ry5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJhbm5vdGF0aW9uLWFycm93IiwhMCkuY2xhc3NlZCgiYW5uZHJhZyIsITApLmNsYXNzZWQoImN1cnNvci1tb3ZlIiwhMCkuYXR0cih7ZDoiTTMsM0gtM1YtM0gzWk0wLDBMIisoaC1XKSsiLCIrKHAtWCksdHJhbnNmb3JtOnMoVyxYKX0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLFYrNisicHgiKS5jYWxsKGMuc3Ryb2tlLCJyZ2JhKDAsMCwwLDApIikuY2FsbChjLmZpbGwsInJnYmEoMCwwLDAsMCkiKTtkLmluaXQoe2VsZW1lbnQ6US5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD11LmdldFRyYW5zbGF0ZShSKTtKPXQueCxLPXQueSx2JiZ2LmF1dG9yYW5nZSYmTSh2Ll9uYW1lKyIuYXV0b3JhbmdlIiwhMCkseCYmeC5hdXRvcmFuZ2UmJk0oeC5fbmFtZSsiLmF1dG9yYW5nZSIsITApfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj13KEosSyksaT1uWzBdK3QsYT1uWzFdK3I7Ui5jYWxsKHUuc2V0VHJhbnNsYXRlLGksYSksUygieCIseSh2LHQsIngiLFQsZSkpLFMoInkiLHkoeCxyLCJ5IixULGUpKSxlLmF4cmVmPT09ZS54cmVmJiZTKCJheCIseSh2LHQsImF4IixULGUpKSxlLmF5cmVmPT09ZS55cmVmJiZTKCJheSIseSh4LHIsImF5IixULGUpKSxHLmF0dHIoInRyYW5zZm9ybSIscyh0LHIpKSxPLmF0dHIoe3RyYW5zZm9ybToicm90YXRlKCIrUCsiLCIraSsiLCIrYSsiKSJ9KX0sZG9uZUZuOmZ1bmN0aW9uKCl7aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsRSgpKTt2YXIgZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuanMtbm90ZXMtYm94LXBhbmVsIik7ZSYmZS5yZWRyYXcoZS5zZWxlY3RlZE9iail9fSl9fX07aWYoZS5zaG93YXJyb3cmJkF0KDAsMCkseilkLmluaXQoe2VsZW1lbnQ6Ui5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXtrdD1PLmF0dHIoInRyYW5zZm9ybSIpfSxtb3ZlRm46ZnVuY3Rpb24odCxyKXt2YXIgbj0icG9pbnRlciI7aWYoZS5zaG93YXJyb3cpZS5heHJlZj09PWUueHJlZj9TKCJheCIseSh2LHQsImF4IixULGUpKTpTKCJheCIsZS5heCt0KSxlLmF5cmVmPT09ZS55cmVmP1MoImF5Iix5KHgsciwiYXkiLFQudyxlKSk6UygiYXkiLGUuYXkrciksQXQodCxyKTtlbHNle2lmKGEpcmV0dXJuO3ZhciBpLG87aWYodilpPXkodix0LCJ4IixULGUpO2Vsc2V7dmFyIGw9ZS5feHNpemUvVC53LGM9ZS54KyhlLl94c2hpZnQtZS54c2hpZnQpL1Qudy1sLzI7aT1kLmFsaWduKGMrdC9ULncsbCwwLDEsZS54YW5jaG9yKX1pZih4KW89eSh4LHIsInkiLFQsZSk7ZWxzZXt2YXIgdT1lLl95c2l6ZS9ULmgsZj1lLnktKGUuX3lzaGlmdCtlLnlzaGlmdCkvVC5oLXUvMjtvPWQuYWxpZ24oZi1yL1QuaCx1LDAsMSxlLnlhbmNob3IpfVMoIngiLGkpLFMoInkiLG8pLHYmJnh8fChuPWQuZ2V0Q3Vyc29yKHY/LjU6aSx4Py41Om8sZS54YW5jaG9yLGUueWFuY2hvcikpfU8uYXR0cih7dHJhbnNmb3JtOnModCxyKStrdH0pLHAoUixuKX0sY2xpY2tGbjpmdW5jdGlvbihyLG4pe2UuY2FwdHVyZWV2ZW50cyYmdC5lbWl0KCJwbG90bHlfY2xpY2thbm5vdGF0aW9uIixZKG4pKX0sZG9uZUZuOmZ1bmN0aW9uKCl7cChSKSxpLmNhbGwoIl9ndWlSZWxheW91dCIsdCxFKCkpO3ZhciBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5qcy1ub3Rlcy1ib3gtcGFuZWwiKTtlJiZlLnJlZHJhdyhlLnNlbGVjdGVkT2JqKX19KX19fWUuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uIikucmVtb3ZlKCk7Zm9yKHZhciByPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZS5hbm5vdGF0aW9uc1tyXS52aXNpYmxlJiZ2KHQscik7cmV0dXJuIGEucHJldmlvdXNQcm9taXNlcyh0KX0sZHJhd09uZTp2LGRyYXdSYXc6eH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi9meCI6Njc5LCIuL2RyYXdfYXJyb3dfaGVhZCI6NjI5LCJAcGxvdGx5L2QzIjo1OH1dLDYyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi9hcnJvd19wYXRocyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clNjYWxlLGw9by5zdHJSb3RhdGUsYz1vLnN0clRyYW5zbGF0ZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLHUsZixoLHA9dC5ub2RlKCksZD1hW3IuYXJyb3doZWFkfHwwXSxtPWFbci5zdGFydGFycm93aGVhZHx8MF0sZz0oci5hcnJvd3dpZHRofHwxKSooci5hcnJvd3NpemV8fDEpLHY9KHIuYXJyb3d3aWR0aHx8MSkqKHIuc3RhcnRhcnJvd3NpemV8fDEpLHk9ZS5pbmRleE9mKCJzdGFydCIpPj0wLHg9ZS5pbmRleE9mKCJlbmQiKT49MCxiPWQuYmFja29mZipnK3Iuc3RhbmRvZmYsXz1tLmJhY2tvZmYqdityLnN0YXJ0c3RhbmRvZmY7aWYoImxpbmUiPT09cC5ub2RlTmFtZSl7bz17eDordC5hdHRyKCJ4MSIpLHk6K3QuYXR0cigieTEiKX0sdT17eDordC5hdHRyKCJ4MiIpLHk6K3QuYXR0cigieTIiKX07dmFyIHc9by54LXUueCxUPW8ueS11Lnk7aWYoaD0oZj1NYXRoLmF0YW4yKFQsdykpK01hdGguUEksYiYmXyYmYitfPk1hdGguc3FydCh3KncrVCpUKSlyZXR1cm4gdm9pZCB6KCk7aWYoYil7aWYoYipiPncqdytUKlQpcmV0dXJuIHZvaWQgeigpO3ZhciBrPWIqTWF0aC5jb3MoZiksQT1iKk1hdGguc2luKGYpO3UueCs9ayx1LnkrPUEsdC5hdHRyKHt4Mjp1LngseTI6dS55fSl9aWYoXyl7aWYoXypfPncqdytUKlQpcmV0dXJuIHZvaWQgeigpO3ZhciBNPV8qTWF0aC5jb3MoZiksUz1fKk1hdGguc2luKGYpO28ueC09TSxvLnktPVMsdC5hdHRyKHt4MTpvLngseTE6by55fSl9fWVsc2UgaWYoInBhdGgiPT09cC5ub2RlTmFtZSl7dmFyIEU9cC5nZXRUb3RhbExlbmd0aCgpLEw9IiI7aWYoRTxiK18pcmV0dXJuIHZvaWQgeigpO3ZhciBDPXAuZ2V0UG9pbnRBdExlbmd0aCgwKSxQPXAuZ2V0UG9pbnRBdExlbmd0aCguMSk7Zj1NYXRoLmF0YW4yKEMueS1QLnksQy54LVAueCksbz1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5taW4oXyxFKSksTD0iMHB4LCIrXysicHgsIjt2YXIgST1wLmdldFBvaW50QXRMZW5ndGgoRSksTz1wLmdldFBvaW50QXRMZW5ndGgoRS0uMSk7aD1NYXRoLmF0YW4yKEkueS1PLnksSS54LU8ueCksdT1wLmdldFBvaW50QXRMZW5ndGgoTWF0aC5tYXgoMCxFLWIpKSxMKz1FLShMP18rYjpiKSsicHgsIitFKyJweCIsdC5zdHlsZSgic3Ryb2tlLWRhc2hhcnJheSIsTCl9ZnVuY3Rpb24geigpe3Quc3R5bGUoInN0cm9rZS1kYXNoYXJyYXkiLCIwcHgsMTAwcHgiKX1mdW5jdGlvbiBEKGUsYSxvLHUpe2UucGF0aCYmKGUubm9Sb3RhdGUmJihvPTApLG4uc2VsZWN0KHAucGFyZW50Tm9kZSkuYXBwZW5kKCJwYXRoIikuYXR0cih7Y2xhc3M6dC5hdHRyKCJjbGFzcyIpLGQ6ZS5wYXRoLHRyYW5zZm9ybTpjKGEueCxhLnkpK2woMTgwKm8vTWF0aC5QSSkrcyh1KX0pLnN0eWxlKHtmaWxsOmkucmdiKHIuYXJyb3djb2xvciksInN0cm9rZS13aWR0aCI6MH0pKX15JiZEKG0sbyxmLHYpLHgmJkQoZCx1LGgsZyl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb2xvciI6NjM5LCIuL2Fycm93X3BhdGhzIjo2MjEsIkBwbG90bHkvZDMiOjU4fV0sNjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZHJhdyIpLGk9dCgiLi9jbGljayIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9ucyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgiYW5ub3RhdGlvbnMiKSxjYWxjQXV0b3JhbmdlOnQoIi4vY2FsY19hdXRvcmFuZ2UiKSxkcmF3Om4uZHJhdyxkcmF3T25lOm4uZHJhd09uZSxkcmF3UmF3Om4uZHJhd1JhdyxoYXNDbGlja1RvU2hvdzppLmhhc0NsaWNrVG9TaG93LG9uQ2xpY2s6aS5vbkNsaWNrLGNvbnZlcnRDb29yZHM6dCgiLi9jb252ZXJ0X2Nvb3JkcyIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIjo4NDAsIi4vYXR0cmlidXRlcyI6NjIyLCIuL2NhbGNfYXV0b3JhbmdlIjo2MjMsIi4vY2xpY2siOjYyNCwiLi9jb252ZXJ0X2Nvb3JkcyI6NjI2LCIuL2RlZmF1bHRzIjo2MjcsIi4vZHJhdyI6NjI4fV0sNjMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheTtlLmV4cG9ydHM9aShhKCJhbm5vdGF0aW9uIix7dmlzaWJsZTpuLnZpc2libGUseDp7dmFsVHlwZToiYW55In0seTp7dmFsVHlwZToiYW55In0sejp7dmFsVHlwZToiYW55In0sYXg6e3ZhbFR5cGU6Im51bWJlciJ9LGF5Ont2YWxUeXBlOiJudW1iZXIifSx4YW5jaG9yOm4ueGFuY2hvcix4c2hpZnQ6bi54c2hpZnQseWFuY2hvcjpuLnlhbmNob3IseXNoaWZ0Om4ueXNoaWZ0LHRleHQ6bi50ZXh0LHRleHRhbmdsZTpuLnRleHRhbmdsZSxmb250Om4uZm9udCx3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodCxvcGFjaXR5Om4ub3BhY2l0eSxhbGlnbjpuLmFsaWduLHZhbGlnbjpuLnZhbGlnbixiZ2NvbG9yOm4uYmdjb2xvcixib3JkZXJjb2xvcjpuLmJvcmRlcmNvbG9yLGJvcmRlcnBhZDpuLmJvcmRlcnBhZCxib3JkZXJ3aWR0aDpuLmJvcmRlcndpZHRoLHNob3dhcnJvdzpuLnNob3dhcnJvdyxhcnJvd2NvbG9yOm4uYXJyb3djb2xvcixhcnJvd2hlYWQ6bi5hcnJvd2hlYWQsc3RhcnRhcnJvd2hlYWQ6bi5zdGFydGFycm93aGVhZCxhcnJvd3NpZGU6bi5hcnJvd3NpZGUsYXJyb3dzaXplOm4uYXJyb3dzaXplLHN0YXJ0YXJyb3dzaXplOm4uc3RhcnRhcnJvd3NpemUsYXJyb3d3aWR0aDpuLmFycm93d2lkdGgsc3RhbmRvZmY6bi5zdGFuZG9mZixzdGFydHN0YW5kb2ZmOm4uc3RhcnRzdGFuZG9mZixob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJsYWJlbDpuLmhvdmVybGFiZWwsY2FwdHVyZWV2ZW50czpuLmNhcHR1cmVldmVudHN9KSwiY2FsYyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MjJ9XSw2MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2Z1bmN0aW9uIGEodCxlKXt2YXIgcj1lLmZ1bGxTY2VuZUxheW91dC5kb21haW4sYT1lLmZ1bGxMYXlvdXQuX3NpemUsbz17cGRhdGE6bnVsbCx0eXBlOiJsaW5lYXIiLGF1dG9yYW5nZTohMSxyYW5nZTpbLTEvMCwxLzBdfTt0Ll94YT17fSxuLmV4dGVuZEZsYXQodC5feGEsbyksaS5zZXRDb252ZXJ0KHQuX3hhKSx0Ll94YS5fb2Zmc2V0PWEubCtyLnhbMF0qYS53LHQuX3hhLmwycD1mdW5jdGlvbigpe3JldHVybi41KigxK3QuX3BkYXRhWzBdL3QuX3BkYXRhWzNdKSphLncqKHIueFsxXS1yLnhbMF0pfSx0Ll95YT17fSxuLmV4dGVuZEZsYXQodC5feWEsbyksaS5zZXRDb252ZXJ0KHQuX3lhKSx0Ll95YS5fb2Zmc2V0PWEudCsoMS1yLnlbMV0pKmEuaCx0Ll95YS5sMnA9ZnVuY3Rpb24oKXtyZXR1cm4uNSooMS10Ll9wZGF0YVsxXS90Ll9wZGF0YVszXSkqYS5oKihyLnlbMV0tci55WzBdKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmZ1bGxTY2VuZUxheW91dC5hbm5vdGF0aW9ucyxyPTA7cjxlLmxlbmd0aDtyKyspYShlW3JdLHQpO3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmFubm90YXRpb24tIit0LmlkKS5yZW1vdmUoKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw2MzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuLi9hbm5vdGF0aW9ucy9jb21tb25fZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIGwodCxlLHIsYSl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUscyxyLGkpfWZ1bmN0aW9uIGModCl7dmFyIG49dCsiYXhpcyIsYT17X2Z1bGxMYXlvdXQ6e319O3JldHVybiBhLl9mdWxsTGF5b3V0W25dPXJbbl0saS5jb2VyY2VQb3NpdGlvbihlLGEsbCx0LHQsLjUpfWwoInZpc2libGUiKSYmKG8odCxlLGEuZnVsbExheW91dCxsKSxjKCJ4IiksYygieSIpLGMoInoiKSxuLm5vbmVPckFsbCh0LGUsWyJ4IiwieSIsInoiXSksZS54cmVmPSJ4IixlLnlyZWY9InkiLGUuenJlZj0ieiIsbCgieGFuY2hvciIpLGwoInlhbmNob3IiKSxsKCJ4c2hpZnQiKSxsKCJ5c2hpZnQiKSxlLnNob3dhcnJvdyYmKGUuYXhyZWY9InBpeGVsIixlLmF5cmVmPSJwaXhlbCIsbCgiYXgiLC0xMCksbCgiYXkiLC0zMCksbi5ub25lT3JBbGwodCxlLFsiYXgiLCJheSJdKSkpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7YSh0LGUse25hbWU6ImFubm90YXRpb25zIixoYW5kbGVJdGVtRGVmYXVsdHM6bCxmdWxsTGF5b3V0OnIuZnVsbExheW91dH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2Fubm90YXRpb25zL2NvbW1vbl9kZWZhdWx0cyI6NjI1LCIuL2F0dHJpYnV0ZXMiOjYzMX1dLDYzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9hbm5vdGF0aW9ucy9kcmF3IikuZHJhd1JhdyxpPXQoIi4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCIpLGE9WyJ4IiwieSIsInoiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuZnVsbFNjZW5lTGF5b3V0LHI9dC5kYXRhU2NhbGUsbz1lLmFubm90YXRpb25zLHM9MDtzPG8ubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPW9bc10sYz0hMSx1PTA7dTwzO3UrKyl7dmFyIGY9YVt1XSxoPWxbZl0scD1lW2YrImF4aXMiXS5yMmZyYWN0aW9uKGgpO2lmKHA8MHx8cD4xKXtjPSEwO2JyZWFrfX1jP3QuZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdCgiLmFubm90YXRpb24tIit0LmlkKydbZGF0YS1pbmRleD0iJytzKyciXScpLnJlbW92ZSgpOihsLl9wZGF0YT1pKHQuZ2xwbG90LmNhbWVyYVBhcmFtcyxbZS54YXhpcy5yMmwobC54KSpyWzBdLGUueWF4aXMucjJsKGwueSkqclsxXSxlLnpheGlzLnIybChsLnopKnJbMl1dKSxuKHQuZ3JhcGhEaXYsbCxzLHQuaWQsbC5feGEsbC5feWEpKX19fSx7Ii4uLy4uL3Bsb3RzL2dsM2QvcHJvamVjdCI6ODc4LCIuLi9hbm5vdGF0aW9ucy9kcmF3Ijo2Mjh9XSw2MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJhbm5vdGF0aW9uczNkIixzY2hlbWE6e3N1YnBsb3RzOntzY2VuZTp7YW5ub3RhdGlvbnM6dCgiLi9hdHRyaWJ1dGVzIil9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OmZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5zdWJwbG90c1JlZ2lzdHJ5LmdsM2Q7aWYoIXIpcmV0dXJuO2Zvcih2YXIgYT1yLmF0dHJSZWdleCxvPU9iamVjdC5rZXlzKHQpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTthLnRlc3QobCkmJih0W2xdLmFubm90YXRpb25zfHxbXSkubGVuZ3RoJiYoaS5wdXNoVW5pcXVlKGUuX2Jhc2VQbG90TW9kdWxlcyxyKSxpLnB1c2hVbmlxdWUoZS5fc3VicGxvdHMuZ2wzZCxsKSl9fSxjb252ZXJ0OnQoIi4vY29udmVydCIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjYzMSwiLi9jb252ZXJ0Ijo2MzIsIi4vZGVmYXVsdHMiOjYzMywiLi9kcmF3Ijo2MzR9XSw2MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXQoIndvcmxkLWNhbGVuZGFycy9kaXN0L21haW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9wbHVzIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvY29wdGljIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2Rpc2N3b3JsZCIpLHQoIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaGVicmV3IiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2lzbGFtaWMiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL21heWFuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL25hbmFrc2hhaGkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3BlcnNpYW4iKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdGFpd2FuIiksdCgid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiKSx0KCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvdW1tYWxxdXJhIil9LHsid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NoaW5lc2UiOjYwMywid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2NvcHRpYyI6NjA0LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvZGlzY3dvcmxkIjo2MDUsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9ldGhpb3BpYW4iOjYwNiwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL2hlYnJldyI6NjA3LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvaXNsYW1pYyI6NjA4LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvanVsaWFuIjo2MDksIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9tYXlhbiI6NjEwLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmFuYWtzaGFoaSI6NjExLCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9jYWxlbmRhcnMvbmVwYWxpIjo2MTIsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy9wZXJzaWFuIjo2MTMsIndvcmxkLWNhbGVuZGFycy9kaXN0L2NhbGVuZGFycy90YWl3YW4iOjYxNCwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3RoYWkiOjYxNSwid29ybGQtY2FsZW5kYXJzL2Rpc3QvY2FsZW5kYXJzL3VtbWFscXVyYSI6NjE2LCJ3b3JsZC1jYWxlbmRhcnMvZGlzdC9tYWluIjo2MTcsIndvcmxkLWNhbGVuZGFycy9kaXN0L3BsdXMiOjYxOH1dLDYzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGVuZGFycyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLkVQT0NISkQscz1hLk9ORURBWSxsPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6aS5zb3J0T2JqZWN0S2V5cyhuLmNhbGVuZGFycyksZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ImdyZWdvcmlhbiJ9LGM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9e307cmV0dXJuIGFbcl09bCxpLmNvZXJjZSh0LGUsYSxyLG4pfSx1PXtkOnswOiJkZCIsIi0iOiJkIn0sZTp7MDoiZCIsIi0iOiJkIn0sYTp7MDoiRCIsIi0iOiJEIn0sQTp7MDoiREQiLCItIjoiREQifSxqOnswOiJvbyIsIi0iOiJvIn0sVzp7MDoid3ciLCItIjoidyJ9LG06ezA6Im1tIiwiLSI6Im0ifSxiOnswOiJNIiwiLSI6Ik0ifSxCOnswOiJNTSIsIi0iOiJNTSJ9LHk6ezA6Inl5IiwiLSI6Inl5In0sWTp7MDoieXl5eSIsIi0iOiJ5eXl5In0sVToiIyMiLHc6IiMjIixjOnswOiJEIE0gZCAlWCB5eXl5IiwiLSI6IkQgTSBkICVYIHl5eXkifSx4OnswOiJtbS9kZC95eXl5IiwiLSI6Im1tL2RkL3l5eXkifX07dmFyIGY9e307ZnVuY3Rpb24gaCh0KXt2YXIgZT1mW3RdO3JldHVybiBlfHwoZT1mW3RdPW4uaW5zdGFuY2UodCkpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxsLHtkZXNjcmlwdGlvbjp0fSl9ZnVuY3Rpb24gZCh0KXtyZXR1cm4iU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSB3aXRoIGAiK3QrImAgZGF0ZSBkYXRhLiJ9dmFyIG09e3hjYWxlbmRhcjpwKGQoIngiKSl9LGc9aS5leHRlbmRGbGF0KHt9LG0se3ljYWxlbmRhcjpwKGQoInkiKSl9KSx2PWkuZXh0ZW5kRmxhdCh7fSxnLHt6Y2FsZW5kYXI6cChkKCJ6IikpfSkseT1wKFsiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHJhbmdlYCBhbmQgYHRpY2swYCIsImlmIHRoaXMgaXMgYSBkYXRlIGF4aXMuIFRoaXMgZG9lcyBub3Qgc2V0IHRoZSBjYWxlbmRhciBmb3IiLCJpbnRlcnByZXRpbmcgZGF0YSBvbiB0aGlzIGF4aXMsIHRoYXQncyBzcGVjaWZpZWQgaW4gdGhlIHRyYWNlIiwib3IgdmlhIHRoZSBnbG9iYWwgYGxheW91dC5jYWxlbmRhcmAiXS5qb2luKCIgIikpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjYWxlbmRhcnMiLHNjaGVtYTp7dHJhY2VzOntzY2F0dGVyOmcsYmFyOmcsYm94OmcsaGVhdG1hcDpnLGNvbnRvdXI6ZyxoaXN0b2dyYW06ZyxoaXN0b2dyYW0yZDpnLGhpc3RvZ3JhbTJkY29udG91cjpnLHNjYXR0ZXIzZDp2LHN1cmZhY2U6dixtZXNoM2Q6dixzY2F0dGVyZ2w6ZyxvaGxjOm0sY2FuZGxlc3RpY2s6bX0sbGF5b3V0OntjYWxlbmRhcjpwKFsiU2V0cyB0aGUgZGVmYXVsdCBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBpbnRlcnByZXRpbmcgYW5kIiwiZGlzcGxheWluZyBkYXRlcyB0aHJvdWdob3V0IHRoZSBwbG90LiJdLmpvaW4oIiAiKSl9LHN1YnBsb3RzOnt4YXhpczp7Y2FsZW5kYXI6eX0seWF4aXM6e2NhbGVuZGFyOnl9LHNjZW5lOnt4YXhpczp7Y2FsZW5kYXI6eX0seWF4aXM6e2NhbGVuZGFyOnl9LHpheGlzOntjYWxlbmRhcjp5fX0scG9sYXI6e3JhZGlhbGF4aXM6e2NhbGVuZGFyOnl9fX0sdHJhbnNmb3Jtczp7ZmlsdGVyOnt2YWx1ZWNhbGVuZGFyOnAoWyJXQVJOSU5HOiBBbGwgdHJhbnNmb3JtcyBhcmUgZGVwcmVjYXRlZCBhbmQgbWF5IGJlIHJlbW92ZWQgZnJvbSB0aGUgQVBJIGluIG5leHQgbWFqb3IgdmVyc2lvbi4iLCJTZXRzIHRoZSBjYWxlbmRhciBzeXN0ZW0gdG8gdXNlIGZvciBgdmFsdWVgLCBpZiBpdCBpcyBhIGRhdGUuIl0uam9pbigiICIpKSx0YXJnZXRjYWxlbmRhcjpwKFsiV0FSTklORzogQWxsIHRyYW5zZm9ybXMgYXJlIGRlcHJlY2F0ZWQgYW5kIG1heSBiZSByZW1vdmVkIGZyb20gdGhlIEFQSSBpbiBuZXh0IG1ham9yIHZlcnNpb24uIiwiU2V0cyB0aGUgY2FsZW5kYXIgc3lzdGVtIHRvIHVzZSBmb3IgYHRhcmdldGAsIGlmIGl0IGlzIGFuIiwiYXJyYXkgb2YgZGF0ZXMuIElmIGB0YXJnZXRgIGlzIGEgc3RyaW5nIChlZyAqeCopIHdlIHVzZSB0aGUiLCJjb3JyZXNwb25kaW5nIHRyYWNlIGF0dHJpYnV0ZSAoZWcgYHhjYWxlbmRhcmApIGlmIGl0IGV4aXN0cywiLCJldmVuIGlmIGB0YXJnZXRjYWxlbmRhcmAgaXMgcHJvdmlkZWQuIl0uam9pbigiICIpKX19fSxsYXlvdXRBdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6YyxoYW5kbGVUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKWModCxlLHJbaV0rImNhbGVuZGFyIixuLmNhbGVuZGFyKX0sQ0FOT05JQ0FMX1NVTkRBWTp7Y2hpbmVzZToiMjAwMC0wMS0wMiIsY29wdGljOiIyMDAwLTAxLTAzIixkaXNjd29ybGQ6IjIwMDAtMDEtMDMiLGV0aGlvcGlhbjoiMjAwMC0wMS0wNSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAyIixqdWxpYW46IjIwMDAtMDEtMDMiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTA1IixuZXBhbGk6IjIwMDAtMDEtMDUiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTA0Iix0aGFpOiIyMDAwLTAxLTA0Iix1bW1hbHF1cmE6IjE0MDAtMDEtMDYifSxDQU5PTklDQUxfVElDSzp7Y2hpbmVzZToiMjAwMC0wMS0wMSIsY29wdGljOiIyMDAwLTAxLTAxIixkaXNjd29ybGQ6IjIwMDAtMDEtMDEiLGV0aGlvcGlhbjoiMjAwMC0wMS0wMSIsaGVicmV3OiI1MDAwLTAxLTAxIixpc2xhbWljOiIxMDAwLTAxLTAxIixqdWxpYW46IjIwMDAtMDEtMDEiLG1heWFuOiI1MDAwLTAxLTAxIixuYW5ha3NoYWhpOiIxMDAwLTAxLTAxIixuZXBhbGk6IjIwMDAtMDEtMDEiLHBlcnNpYW46IjEwMDAtMDEtMDEiLGphbGFsaToiMTAwMC0wMS0wMSIsdGFpd2FuOiIxMDAwLTAxLTAxIix0aGFpOiIyMDAwLTAxLTAxIix1bW1hbHF1cmE6IjE0MDAtMDEtMDEifSxERkxUUkFOR0U6e2NoaW5lc2U6WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLGNvcHRpYzpbIjE3MDAtMDEtMDEiLCIxNzAxLTAxLTAxIl0sZGlzY3dvcmxkOlsiMTgwMC0wMS0wMSIsIjE4MDEtMDEtMDEiXSxldGhpb3BpYW46WyIyMDAwLTAxLTAxIiwiMjAwMS0wMS0wMSJdLGhlYnJldzpbIjU3MDAtMDEtMDEiLCI1NzAxLTAxLTAxIl0saXNsYW1pYzpbIjE0MDAtMDEtMDEiLCIxNDAxLTAxLTAxIl0sanVsaWFuOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxtYXlhbjpbIjUyMDAtMDEtMDEiLCI1MjAxLTAxLTAxIl0sbmFuYWtzaGFoaTpbIjA1MDAtMDEtMDEiLCIwNTAxLTAxLTAxIl0sbmVwYWxpOlsiMjAwMC0wMS0wMSIsIjIwMDEtMDEtMDEiXSxwZXJzaWFuOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXSxqYWxhbGk6WyIxNDAwLTAxLTAxIiwiMTQwMS0wMS0wMSJdLHRhaXdhbjpbIjAxMDAtMDEtMDEiLCIwMTAxLTAxLTAxIl0sdGhhaTpbIjI1MDAtMDEtMDEiLCIyNTAxLTAxLTAxIl0sdW1tYWxxdXJhOlsiMTQwMC0wMS0wMSIsIjE0MDEtMDEtMDEiXX0sZ2V0Q2FsOmgsd29ybGRDYWxGbXQ6ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpLGEsbCxjLGY9TWF0aC5mbG9vcigoZSsuMDUpL3MpK28scD1oKHIpLmZyb21KRChmKSxkPTA7LTEhPT0oZD10LmluZGV4T2YoIiUiLGQpKTspIjAiPT09KG49dC5jaGFyQXQoZCsxKSl8fCItIj09PW58fCJfIj09PW4/KGE9MyxpPXQuY2hhckF0KGQrMiksIl8iPT09biYmKG49Ii0iKSk6KGk9bixuPSIwIixhPTIpLChsPXVbaV0pPyhjPSIjIyI9PT1sPyIjIyI6cC5mb3JtYXREYXRlKGxbbl0pLHQ9dC5zdWJzdHIoMCxkKStjK3Quc3Vic3RyKGQrYSksZCs9Yy5sZW5ndGgpOmQrPWE7cmV0dXJuIHR9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuL2NhbGVuZGFycyI6NjM2fV0sNjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuZGVmYXVsdHM9WyIjMWY3N2I0IiwiI2ZmN2YwZSIsIiMyY2EwMmMiLCIjZDYyNzI4IiwiIzk0NjdiZCIsIiM4YzU2NGIiLCIjZTM3N2MyIiwiIzdmN2Y3ZiIsIiNiY2JkMjIiLCIjMTdiZWNmIl0sci5kZWZhdWx0TGluZT0iIzQ0NCIsci5saWdodExpbmU9IiNlZWUiLHIuYmFja2dyb3VuZD0iI2ZmZiIsci5ib3JkZXJMaW5lPSIjQkVDOEQ5IixyLmxpZ2h0RnJhY3Rpb249MWUzLzExfSx7fV0sNjM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIvYXJyYXkiKS5pc1R5cGVkQXJyYXksbz1lLmV4cG9ydHM9e30scz10KCIuL2F0dHJpYnV0ZXMiKTtvLmRlZmF1bHRzPXMuZGVmYXVsdHM7dmFyIGw9by5kZWZhdWx0TGluZT1zLmRlZmF1bHRMaW5lO28ubGlnaHRMaW5lPXMubGlnaHRMaW5lO3ZhciBjPW8uYmFja2dyb3VuZD1zLmJhY2tncm91bmQ7ZnVuY3Rpb24gdSh0KXtpZihpKHQpfHwic3RyaW5nIiE9dHlwZW9mIHQpcmV0dXJuIHQ7dmFyIGU9dC50cmltKCk7aWYoInJnYiIhPT1lLnN1YnN0cigwLDMpKXJldHVybiB0O3ZhciByPWUubWF0Y2goL15yZ2JhP1xzKlwoKFteKCldKilcKSQvKTtpZighcilyZXR1cm4gdDt2YXIgbj1yWzFdLnRyaW0oKS5zcGxpdCgvXHMqW1xzLF1ccyovKSxhPSJhIj09PWUuY2hhckF0KDMpJiY0PT09bi5sZW5ndGg7aWYoIWEmJjMhPT1uLmxlbmd0aClyZXR1cm4gdDtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl7aWYoIW5bb10ubGVuZ3RoKXJldHVybiB0O2lmKG5bb109TnVtYmVyKG5bb10pLCEobltvXT49MCkpcmV0dXJuIHQ7aWYoMz09PW8pbltvXT4xJiYobltvXT0xKTtlbHNlIGlmKG5bb10+PTEpcmV0dXJuIHR9dmFyIHM9TWF0aC5yb3VuZCgyNTUqblswXSkrIiwgIitNYXRoLnJvdW5kKDI1NSpuWzFdKSsiLCAiK01hdGgucm91bmQoMjU1Km5bMl0pO3JldHVybiBhPyJyZ2JhKCIrcysiLCAiK25bM10rIikiOiJyZ2IoIitzKyIpIn1vLnRpbnlSR0I9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JnYigpO3JldHVybiJyZ2IoIitNYXRoLnJvdW5kKGUucikrIiwgIitNYXRoLnJvdW5kKGUuZykrIiwgIitNYXRoLnJvdW5kKGUuYikrIikifSxvLnJnYj1mdW5jdGlvbih0KXtyZXR1cm4gby50aW55UkdCKG4odCkpfSxvLm9wYWNpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/bih0KS5nZXRBbHBoYSgpOjB9LG8uYWRkT3BhY2l0eT1mdW5jdGlvbih0LGUpe3ZhciByPW4odCkudG9SZ2IoKTtyZXR1cm4icmdiYSgiK01hdGgucm91bmQoci5yKSsiLCAiK01hdGgucm91bmQoci5nKSsiLCAiK01hdGgucm91bmQoci5iKSsiLCAiK2UrIikifSxvLmNvbWJpbmU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHQpLnRvUmdiKCk7aWYoMT09PXIuYSlyZXR1cm4gbih0KS50b1JnYlN0cmluZygpO3ZhciBpPW4oZXx8YykudG9SZ2IoKSxhPTE9PT1pLmE/aTp7cjoyNTUqKDEtaS5hKStpLnIqaS5hLGc6MjU1KigxLWkuYSkraS5nKmkuYSxiOjI1NSooMS1pLmEpK2kuYippLmF9LG89e3I6YS5yKigxLXIuYSkrci5yKnIuYSxnOmEuZyooMS1yLmEpK3IuZypyLmEsYjphLmIqKDEtci5hKStyLmIqci5hfTtyZXR1cm4gbihvKS50b1JnYlN0cmluZygpfSxvLmNvbnRyYXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1uKHQpO3JldHVybiAxIT09aS5nZXRBbHBoYSgpJiYoaT1uKG8uY29tYmluZSh0LGMpKSksKGkuaXNEYXJrKCk/ZT9pLmxpZ2h0ZW4oZSk6YzpyP2kuZGFya2VuKHIpOmwpLnRvU3RyaW5nKCl9LG8uc3Ryb2tlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlKTt0LnN0eWxlKHtzdHJva2U6by50aW55UkdCKHIpLCJzdHJva2Utb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LG8uZmlsbD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSk7dC5zdHlsZSh7ZmlsbDpvLnRpbnlSR0IociksImZpbGwtb3BhY2l0eSI6ci5nZXRBbHBoYSgpfSl9LG8uY2xlYW49ZnVuY3Rpb24odCl7aWYodCYmIm9iamVjdCI9PXR5cGVvZiB0KXt2YXIgZSxyLG4saSxzPU9iamVjdC5rZXlzKHQpO2ZvcihlPTA7ZTxzLmxlbmd0aDtlKyspaWYoaT10W249c1tlXV0sImNvbG9yIj09PW4uc3Vic3RyKG4ubGVuZ3RoLTUpKWlmKEFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylpW3JdPXUoaVtyXSk7ZWxzZSB0W25dPXUoaSk7ZWxzZSBpZigiY29sb3JzY2FsZSI9PT1uLnN1YnN0cihuLmxlbmd0aC0xMCkmJkFycmF5LmlzQXJyYXkoaSkpZm9yKHI9MDtyPGkubGVuZ3RoO3IrKylBcnJheS5pc0FycmF5KGlbcl0pJiYoaVtyXVsxXT11KGlbcl1bMV0pKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoaSkpe3ZhciBsPWlbMF07aWYoIUFycmF5LmlzQXJyYXkobCkmJmwmJiJvYmplY3QiPT10eXBlb2YgbClmb3Iocj0wO3I8aS5sZW5ndGg7cisrKW8uY2xlYW4oaVtyXSl9ZWxzZSBpJiYib2JqZWN0Ij09dHlwZW9mIGkmJiFhKGkpJiZvLmNsZWFuKGkpfX19LHsiLi4vLi4vbGliL2FycmF5Ijo3NTgsIi4vYXR0cmlidXRlcyI6NjM4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dGhpY2tuZXNzbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJwaXhlbHMifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDozMH0sbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLjAyLG1pbjotMixtYXg6M30seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHhwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi41LG1pbjotMixtYXg6M30seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoibWlkZGxlIn0seXBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwfSxvdXRsaW5lY29sb3I6bi5saW5lY29sb3Isb3V0bGluZXdpZHRoOm4ubGluZXdpZHRoLGJvcmRlcmNvbG9yOm4ubGluZWNvbG9yLGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MH0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwwLDAsMCkifSx0aWNrbW9kZTpuLnRpY2ttb2RlLG50aWNrczpuLm50aWNrcyx0aWNrMDpuLnRpY2swLGR0aWNrOm4uZHRpY2ssdGlja3ZhbHM6bi50aWNrdmFscyx0aWNrdGV4dDpuLnRpY2t0ZXh0LHRpY2tzOmEoe30sbi50aWNrcyx7ZGZsdDoiIn0pLHRpY2tsYWJlbG92ZXJmbG93OmEoe30sbi50aWNrbGFiZWxvdmVyZmxvdyx7fSksdGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXSxkZmx0OiJvdXRzaWRlIn0sdGlja2xlbjpuLnRpY2tsZW4sdGlja3dpZHRoOm4udGlja3dpZHRoLHRpY2tjb2xvcjpuLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczpuLnNob3d0aWNrbGFiZWxzLHRpY2tmb250Omkoe30pLHRpY2thbmdsZTpuLnRpY2thbmdsZSx0aWNrZm9ybWF0Om4udGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6bi50aWNrZm9ybWF0c3RvcHMsdGlja3ByZWZpeDpuLnRpY2twcmVmaXgsc2hvd3RpY2twcmVmaXg6bi5zaG93dGlja3ByZWZpeCx0aWNrc3VmZml4Om4udGlja3N1ZmZpeCxzaG93dGlja3N1ZmZpeDpuLnNob3d0aWNrc3VmZml4LHNlcGFyYXRldGhvdXNhbmRzOm4uc2VwYXJhdGV0aG91c2FuZHMsZXhwb25lbnRmb3JtYXQ6bi5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDpuLm1pbmV4cG9uZW50LHNob3dleHBvbmVudDpuLnNob3dleHBvbmVudCx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIn0sZm9udDppKHt9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyaWdodCIsInRvcCIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9fSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyJ9LHRpdGxlZm9udDppKHt9KSx0aXRsZXNpZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJpZ2h0IiwidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIn19fSwiY29sb3JiYXJzIiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDY0MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2NuOntjb2xvcmJhcjoiY29sb3JiYXIiLGNiYmc6ImNiYmciLGNiZmlsbDoiY2JmaWxsIixjYmZpbGxzOiJjYmZpbGxzIixjYmxpbmU6ImNibGluZSIsY2JsaW5lczoiY2JsaW5lcyIsY2JheGlzOiJjYmF4aXMiLGNidGl0bGV1bnNoaWZ0OiJjYnRpdGxldW5zaGlmdCIsY2J0aXRsZToiY2J0aXRsZSIsY2JvdXRsaW5lOiJjYm91dGxpbmUiLGNyaXNwOiJjcmlzcCIsanNQbGFjZWhvbGRlcjoianMtcGxhY2Vob2xkZXIifX19LHt9XSw2NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9aS5uZXdDb250YWluZXIoZSwiY29sb3JiYXIiKSx1PXQuY29sb3JiYXJ8fHt9O2Z1bmN0aW9uIGYodCxlKXtyZXR1cm4gbi5jb2VyY2UodSxjLGwsdCxlKX12YXIgaD1mKCJ0aGlja25lc3Ntb2RlIik7ZigidGhpY2tuZXNzIiwiZnJhY3Rpb24iPT09aD8zMC8oci53aWR0aC1yLm1hcmdpbi5sLXIubWFyZ2luLnIpOjMwKTt2YXIgcD1mKCJsZW5tb2RlIik7ZigibGVuIiwiZnJhY3Rpb24iPT09cD8xOnIuaGVpZ2h0LXIubWFyZ2luLnQtci5tYXJnaW4uYiksZigieCIpLGYoInhhbmNob3IiKSxmKCJ4cGFkIiksZigieSIpLGYoInlhbmNob3IiKSxmKCJ5cGFkIiksbi5ub25lT3JBbGwodSxjLFsieCIsInkiXSksZigib3V0bGluZWNvbG9yIiksZigib3V0bGluZXdpZHRoIiksZigiYm9yZGVyY29sb3IiKSxmKCJib3JkZXJ3aWR0aCIpLGYoImJnY29sb3IiKTt2YXIgZD1mKCJ0aWNrbGFiZWxwb3NpdGlvbiIpO2YoInRpY2tsYWJlbG92ZXJmbG93IiwtMSE9PWQuaW5kZXhPZigiaW5zaWRlIik/ImhpZGUgcGFzdCBkb21haW4iOiJoaWRlIHBhc3QgZGl2IiksYSh1LGMsZiwibGluZWFyIik7dmFyIG09ci5mb250LGc9e291dGVyVGlja3M6ITEsZm9udDptfTstMSE9PWQuaW5kZXhPZigiaW5zaWRlIikmJihnLmJnQ29sb3I9ImJsYWNrIikscyh1LGMsZiwibGluZWFyIixnKSxvKHUsYyxmLCJsaW5lYXIiLGcpLGYoInRpdGxlLnRleHQiLHIuX2RmbHRUaXRsZS5jb2xvcmJhcik7dmFyIHY9Yy50aWNrZm9udCx5PW4uZXh0ZW5kRmxhdCh7fSx2LHtjb2xvcjptLmNvbG9yLHNpemU6bi5iaWdGb250KHYuc2l6ZSl9KTtuLmNvZXJjZUZvbnQoZiwidGl0bGUuZm9udCIseSksZigidGl0bGUuc2lkZSIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo4NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsIi4vYXR0cmlidXRlcyI6NjQwfV0sNjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPXQoIi4uL2RyYWdlbGVtZW50IiksYz10KCIuLi8uLi9saWIiKSx1PWMuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIikscD10KCIuLi9kcmF3aW5nIiksZD10KCIuLi9jb2xvciIpLG09dCgiLi4vdGl0bGVzIiksZz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx2PXQoIi4uL2NvbG9yc2NhbGUvaGVscGVycyIpLmZsaXBTY2FsZSx5PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIikseD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSxiPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLF89dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLHc9Xy5MSU5FX1NQQUNJTkcsVD1fLkZST01fVEwsaz1fLkZST01fQlIsQT10KCIuL2NvbnN0YW50cyIpLmNuO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrQS5jb2xvcmJhcikuZGF0YShmdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXQuX2Z1bGxMYXlvdXQsbz10LmNhbGNkYXRhLHM9W107ZnVuY3Rpb24gbCh0KXtyZXR1cm4gZih0LHtfZmlsbGNvbG9yOm51bGwsX2xpbmU6e2NvbG9yOm51bGwsd2lkdGg6bnVsbCxkYXNoOm51bGx9LF9sZXZlbHM6e3N0YXJ0Om51bGwsZW5kOm51bGwsc2l6ZTpudWxsfSxfZmlsbGxldmVsczpudWxsLF9maWxsZ3JhZGllbnQ6bnVsbCxfenJhbmdlOm51bGx9KX1mdW5jdGlvbiBjKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGkuY2FsYz9pLmNhbGModCxuLGUpOihlLl9maWxsZ3JhZGllbnQ9ci5yZXZlcnNlc2NhbGU/dihyLmNvbG9yc2NhbGUpOnIuY29sb3JzY2FsZSxlLl96cmFuZ2U9W3JbaS5taW5dLHJbaS5tYXhdXSl9Zm9yKHZhciB1PTA7dTxvLmxlbmd0aDt1Kyspe3ZhciBoPW9bdV0scD0obj1oWzBdLnRyYWNlKS5fbW9kdWxlLmNvbG9yYmFyO2lmKCEwPT09bi52aXNpYmxlJiZwKWZvcih2YXIgZD1BcnJheS5pc0FycmF5KHApLG09ZD9wOltwXSxnPTA7ZzxtLmxlbmd0aDtnKyspe3ZhciB5PShpPW1bZ10pLmNvbnRhaW5lcjsocj15P25beV06bikmJnIuc2hvd3NjYWxlJiYoKGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIrbi51aWQrKGQmJnk/Ii0iK3k6IiIpLGUuX3RyYWNlSW5kZXg9bi5pbmRleCxlLl9wcm9wUHJlZml4PSh5P3krIi4iOiIiKSsiY29sb3JiYXIuIixlLl9tZXRhPW4uX21ldGEsYygpLHMucHVzaChlKSl9fWZvcih2YXIgeCBpbiBhLl9jb2xvckF4ZXMpaWYoKHI9YVt4XSkuc2hvd3NjYWxlKXt2YXIgYj1hLl9jb2xvckF4ZXNbeF07KGU9bChyLmNvbG9yYmFyKSkuX2lkPSJjYiIreCxlLl9wcm9wUHJlZml4PXgrIi5jb2xvcmJhci4iLGUuX21ldGE9YS5fbWV0YSxpPXttaW46ImNtaW4iLG1heDoiY21heCJ9LCJoZWF0bWFwIiE9PWJbMF0mJihuPWJbMV0saS5jYWxjPW4uX21vZHVsZS5jb2xvcmJhci5jYWxjKSxjKCkscy5wdXNoKGUpfXJldHVybiBzfSh0KSwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpO2UuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKS5jbGFzc2VkKEEuY29sb3JiYXIsITApLGUuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyk7Yy5lbnN1cmVTaW5nbGUociwicmVjdCIsQS5jYmJnKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNiZmlsbHMpLGMuZW5zdXJlU2luZ2xlKHIsImciLEEuY2JsaW5lcyksYy5lbnN1cmVTaW5nbGUociwiZyIsQS5jYmF4aXMsKGZ1bmN0aW9uKHQpe3QuY2xhc3NlZChBLmNyaXNwLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJnIixBLmNidGl0bGV1bnNoaWZ0LChmdW5jdGlvbih0KXt0LmFwcGVuZCgiZyIpLmNsYXNzZWQoQS5jYnRpdGxlLCEwKX0pKSxjLmVuc3VyZVNpbmdsZShyLCJyZWN0IixBLmNib3V0bGluZSk7dmFyIHY9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPXIuX2Z1bGxMYXlvdXQsbD1vLl9zaXplLGg9ZS5fZmlsbGNvbG9yLHY9ZS5fbGluZSxfPWUudGl0bGUsTT1fLnNpZGUsUz1lLl96cmFuZ2V8fG4uZXh0ZW50KCgiZnVuY3Rpb24iPT10eXBlb2YgaD9oOnYuY29sb3IpLmRvbWFpbigpKSxFPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbG9yP3YuY29sb3I6ZnVuY3Rpb24oKXtyZXR1cm4gdi5jb2xvcn0sTD0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmZ1bmN0aW9uKCl7cmV0dXJuIGh9LEM9ZS5fbGV2ZWxzLFA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1lLl9sZXZlbHMsbz1bXSxzPVtdLGw9YS5lbmQrYS5zaXplLzEwMCxjPWEuc2l6ZSx1PTEuMDAxKnJbMF0tLjAwMSpyWzFdLGY9MS4wMDEqclsxXS0uMDAxKnJbMF07Zm9yKGk9MDtpPDFlNSYmKG49YS5zdGFydCtpKmMsIShjPjA/bj49bDpuPD1sKSk7aSsrKW4+dSYmbjxmJiZvLnB1c2gobik7aWYoZS5fZmlsbGdyYWRpZW50KXM9WzBdO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIGUuX2ZpbGxjb2xvcil7dmFyIGg9ZS5fZmlsbGxldmVscztpZihoKWZvcihsPWguZW5kK2guc2l6ZS8xMDAsYz1oLnNpemUsaT0wO2k8MWU1JiYobj1oLnN0YXJ0K2kqYywhKGM+MD9uPj1sOm48PWwpKTtpKyspbj5yWzBdJiZuPHJbMV0mJnMucHVzaChuKTtlbHNlKHM9by5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LWEuc2l6ZS8yfSkpKS5wdXNoKHNbcy5sZW5ndGgtMV0rYS5zaXplKX1lbHNlIGUuX2ZpbGxjb2xvciYmInN0cmluZyI9PXR5cGVvZiBlLl9maWxsY29sb3ImJihzPVswXSk7YS5zaXplPDAmJihvLnJldmVyc2UoKSxzLnJldmVyc2UoKSk7cmV0dXJue2xpbmU6byxmaWxsOnN9fSgwLGUsUyksST1QLmZpbGwsTz1QLmxpbmUsej1NYXRoLnJvdW5kKGUudGhpY2tuZXNzKigiZnJhY3Rpb24iPT09ZS50aGlja25lc3Ntb2RlP2wudzoxKSksRD16L2wudyxSPU1hdGgucm91bmQoZS5sZW4qKCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/bC5oOjEpKSxGPVIvbC5oLEI9ZS54cGFkL2wudyxOPShlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoKS8yLGo9ZS55cGFkL2wuaCxVPU1hdGgucm91bmQoZS54KmwudytlLnhwYWQpLFY9ZS54LUQqKHttaWRkbGU6LjUscmlnaHQ6MX1bZS54YW5jaG9yXXx8MCksSD1lLnkrRiooKHt0b3A6LS41LGJvdHRvbTouNX1bZS55YW5jaG9yXXx8MCktLjUpLHE9TWF0aC5yb3VuZChsLmgqKDEtSCkpLEc9cS1SO2UuX2xlbkZyYWM9RixlLl90aGlja0ZyYWM9RCxlLl94TGVmdEZyYWM9VixlLl95Qm90dG9tRnJhYz1IO3ZhciBZPWUuX2F4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT17dHlwZToibGluZWFyIixyYW5nZTpyLHRpY2ttb2RlOmUudGlja21vZGUsbnRpY2tzOmUubnRpY2tzLHRpY2swOmUudGljazAsZHRpY2s6ZS5kdGljayx0aWNrdmFsczplLnRpY2t2YWxzLHRpY2t0ZXh0OmUudGlja3RleHQsdGlja3M6ZS50aWNrcyx0aWNrbGVuOmUudGlja2xlbix0aWNrd2lkdGg6ZS50aWNrd2lkdGgsdGlja2NvbG9yOmUudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmUuc2hvd3RpY2tsYWJlbHMsdGlja2xhYmVscG9zaXRpb246ZS50aWNrbGFiZWxwb3NpdGlvbix0aWNrbGFiZWxvdmVyZmxvdzplLnRpY2tsYWJlbG92ZXJmbG93LHRpY2tmb250OmUudGlja2ZvbnQsdGlja2FuZ2xlOmUudGlja2FuZ2xlLHRpY2tmb3JtYXQ6ZS50aWNrZm9ybWF0LGV4cG9uZW50Zm9ybWF0OmUuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6ZS5taW5leHBvbmVudCxzZXBhcmF0ZXRob3VzYW5kczplLnNlcGFyYXRldGhvdXNhbmRzLHNob3dleHBvbmVudDplLnNob3dleHBvbmVudCxzaG93dGlja3ByZWZpeDplLnNob3d0aWNrcHJlZml4LHRpY2twcmVmaXg6ZS50aWNrcHJlZml4LHNob3d0aWNrc3VmZml4OmUuc2hvd3RpY2tzdWZmaXgsdGlja3N1ZmZpeDplLnRpY2tzdWZmaXgsdGl0bGU6ZS50aXRsZSxzaG93bGluZTohMCxhbmNob3I6ImZyZWUiLHNpZGU6InJpZ2h0Iixwb3NpdGlvbjoxfSxhPXt0eXBlOiJsaW5lYXIiLF9pZDoieSIrZS5faWR9LG89e2xldHRlcjoieSIsZm9udDpuLmZvbnQsbm9Ib3ZlcjohMCxub1RpY2tzb246ITAsbm9UaWNrbGFiZWxtb2RlOiEwLGNhbGVuZGFyOm4uY2FsZW5kYXJ9O2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gYy5jb2VyY2UoaSxhLGIsdCxlKX1yZXR1cm4geShpLGEscyxvLG4pLHgoaSxhLHMsbyksYX0ocixlLFMpO1kucG9zaXRpb249ZS54K0IrRCwtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSYmKFkudGl0bGUuc2lkZT1NLFkudGl0bGV4PWUueCtCLFkudGl0bGV5PUgrKCJ0b3AiPT09Xy5zaWRlP0YtajpqKSk7aWYodi5jb2xvciYmImF1dG8iPT09ZS50aWNrbW9kZSl7WS50aWNrbW9kZT0ibGluZWFyIixZLnRpY2swPUMuc3RhcnQ7dmFyIFc9Qy5zaXplLFg9Yy5jb25zdHJhaW4oKHEtRykvNTAsNCwxNSkrMSxaPShTWzFdLVNbMF0pLygoZS5udGlja3N8fFgpKlcpO2lmKFo+MSl7dmFyIEo9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhaKS9NYXRoLkxOMTApKTtXKj1KKmMucm91bmRVcChaL0osWzIsNSwxMF0pLChNYXRoLmFicyhDLnN0YXJ0KS9DLnNpemUrMWUtNiklMTwyZS02JiYoWS50aWNrMD0wKX1ZLmR0aWNrPVd9WS5kb21haW49W0graixIK0Ytal0sWS5zZXRTY2FsZSgpLHQuYXR0cigidHJhbnNmb3JtIix1KE1hdGgucm91bmQobC5sKSxNYXRoLnJvdW5kKGwudCkpKTt2YXIgSyxRPXQuc2VsZWN0KCIuIitBLmNidGl0bGV1bnNoaWZ0KS5hdHRyKCJ0cmFuc2Zvcm0iLHUoLU1hdGgucm91bmQobC5sKSwtTWF0aC5yb3VuZChsLnQpKSksJD10LnNlbGVjdCgiLiIrQS5jYmF4aXMpLHR0PTA7ZnVuY3Rpb24gZXQobixpKXt2YXIgYT17cHJvcENvbnRhaW5lcjpZLHByb3BOYW1lOmUuX3Byb3BQcmVmaXgrInRpdGxlIix0cmFjZUluZGV4OmUuX3RyYWNlSW5kZXgsX21ldGE6ZS5fbWV0YSxwbGFjZWhvbGRlcjpvLl9kZmx0VGl0bGUuY29sb3JiYXIsY29udGFpbmVyR3JvdXA6dC5zZWxlY3QoIi4iK0EuY2J0aXRsZSl9LHM9ImgiPT09bi5jaGFyQXQoMCk/bi5zdWJzdHIoMSk6ImgiK247dC5zZWxlY3RBbGwoIi4iK3MrIiwuIitzKyItbWF0aC1ncm91cCIpLnJlbW92ZSgpLG0uZHJhdyhyLG4sZihhLGl8fHt9KSl9cmV0dXJuIGMuc3luY09yQXN5bmMoW2EucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe2lmKC0xIT09WyJ0b3AiLCJib3R0b20iXS5pbmRleE9mKE0pKXt2YXIgdCxyPWwubCsoZS54K0IpKmwudyxuPVkudGl0bGUuZm9udC5zaXplO3Q9InRvcCI9PT1NPygxLShIK0YtaikpKmwuaCtsLnQrMysuNzUqbjooMS0oSCtqKSkqbC5oK2wudC0zLS4yNSpuLGV0KFkuX2lkKyJ0aXRsZSIse2F0dHJpYnV0ZXM6e3g6cix5OnQsInRleHQtYW5jaG9yIjoic3RhcnQifX0pfX0sZnVuY3Rpb24oKXtpZigtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIGE9dC5zZWxlY3QoIi4iK0EuY2J0aXRsZSksbz1hLnNlbGVjdCgidGV4dCIpLGY9Wy1lLm91dGxpbmV3aWR0aC8yLGUub3V0bGluZXdpZHRoLzJdLGg9YS5zZWxlY3QoIi5oIitZLl9pZCsidGl0bGUtbWF0aC1ncm91cCIpLm5vZGUoKSxkPTE1LjY7aWYoby5ub2RlKCkmJihkPXBhcnNlSW50KG8ubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSp3KSxoPyh0dD1wLmJCb3goaCkuaGVpZ2h0KT5kJiYoZlsxXS09KHR0LWQpLzIpOm8ubm9kZSgpJiYhby5jbGFzc2VkKEEuanNQbGFjZWhvbGRlcikmJih0dD1wLmJCb3goby5ub2RlKCkpLmhlaWdodCksdHQpe2lmKHR0Kz01LCJ0b3AiPT09TSlZLmRvbWFpblsxXS09dHQvbC5oLGZbMV0qPS0xO2Vsc2V7WS5kb21haW5bMF0rPXR0L2wuaDt2YXIgbT1nLmxpbmVDb3VudChvKTtmWzFdKz0oMS1tKSpkfWEuYXR0cigidHJhbnNmb3JtIix1KGZbMF0sZlsxXSkpLFkuc2V0U2NhbGUoKX19dC5zZWxlY3RBbGwoIi4iK0EuY2JmaWxscysiLC4iK0EuY2JsaW5lcykuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZChsLmgqKDEtWS5kb21haW5bMV0pKSkpLCQuYXR0cigidHJhbnNmb3JtIix1KDAsTWF0aC5yb3VuZCgtbC50KSkpO3ZhciB5PXQuc2VsZWN0KCIuIitBLmNiZmlsbHMpLnNlbGVjdEFsbCgicmVjdC4iK0EuY2JmaWxsKS5hdHRyKCJzdHlsZSIsIiIpLmRhdGEoSSk7eS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoQS5jYmZpbGwsITApLnN0eWxlKCJzdHJva2UiLCJub25lIikseS5leGl0KCkucmVtb3ZlKCk7dmFyIHg9Uy5tYXAoWS5jMnApLm1hcChNYXRoLnJvdW5kKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LWV9KSk7eS5lYWNoKChmdW5jdGlvbih0LGEpe3ZhciBvPVswPT09YT9TWzBdOihJW2FdK0lbYS0xXSkvMixhPT09SS5sZW5ndGgtMT9TWzFdOihJW2FdK0lbYSsxXSkvMl0ubWFwKFkuYzJwKS5tYXAoTWF0aC5yb3VuZCk7b1sxXT1jLmNvbnN0cmFpbihvWzFdKyhvWzFdPm9bMF0pPzE6LTEseFswXSx4WzFdKTt2YXIgcz1uLnNlbGVjdCh0aGlzKS5hdHRyKHt4OlUsd2lkdGg6TWF0aC5tYXgoeiwyKSx5Om4ubWluKG8pLGhlaWdodDpNYXRoLm1heChuLm1heChvKS1uLm1pbihvKSwyKX0pO2lmKGUuX2ZpbGxncmFkaWVudClwLmdyYWRpZW50KHMscixlLl9pZCwidmVydGljYWwiLGUuX2ZpbGxncmFkaWVudCwiZmlsbCIpO2Vsc2V7dmFyIGw9TCh0KS5yZXBsYWNlKCJlLSIsIiIpO3MuYXR0cigiZmlsbCIsaShsKS50b0hleFN0cmluZygpKX19KSk7dmFyIGI9dC5zZWxlY3QoIi4iK0EuY2JsaW5lcykuc2VsZWN0QWxsKCJwYXRoLiIrQS5jYmxpbmUpLmRhdGEodi5jb2xvciYmdi53aWR0aD9POltdKTtiLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChBLmNibGluZSwhMCksYi5leGl0KCkucmVtb3ZlKCksYi5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIrVSsiLCIrKE1hdGgucm91bmQoWS5jMnAodCkpK3Yud2lkdGgvMiUxKSsiaCIreikuY2FsbChwLmxpbmVHcm91cFN0eWxlLHYud2lkdGgsRSh0KSx2LmRhc2gpfSkpLCQuc2VsZWN0QWxsKCJnLiIrWS5faWQrInRpY2sscGF0aCIpLnJlbW92ZSgpO3ZhciBfPVUreisoZS5vdXRsaW5ld2lkdGh8fDApLzItKCJvdXRzaWRlIj09PWUudGlja3M/MTowKSxUPXMuY2FsY1RpY2tzKFkpLGs9cy5nZXRUaWNrU2lnbnMoWSlbMl07cmV0dXJuIHMuZHJhd1RpY2tzKHIsWSx7dmFsczoiaW5zaWRlIj09PVkudGlja3M/cy5jbGlwRW5kcyhZLFQpOlQsbGF5ZXI6JCxwYXRoOnMubWFrZVRpY2tQYXRoKFksXyxrKSx0cmFuc0ZuOnMubWFrZVRyYW5zVGlja0ZuKFkpfSkscy5kcmF3TGFiZWxzKHIsWSx7dmFsczpULGxheWVyOiQsdHJhbnNGbjpzLm1ha2VUcmFuc1RpY2tMYWJlbEZuKFkpLGxhYmVsRm5zOnMubWFrZUxhYmVsRm5zKFksXyl9KX0sZnVuY3Rpb24oKXtpZigtMT09PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKSl7dmFyIHQ9WS50aXRsZS5mb250LnNpemUsZT1ZLl9vZmZzZXQrWS5fbGVuZ3RoLzIsaT1sLmwrKFkucG9zaXRpb258fDApKmwudysoInJpZ2h0Ij09PVkuc2lkZT8xMCt0KihZLnNob3d0aWNrbGFiZWxzPzE6LjUpOi0xMC10KihZLnNob3d0aWNrbGFiZWxzPy41OjApKTtldCgiaCIrWS5faWQrInRpdGxlIix7YXZvaWQ6e3NlbGVjdGlvbjpuLnNlbGVjdChyKS5zZWxlY3RBbGwoImcuIitZLl9pZCsidGljayIpLHNpZGU6TSxvZmZzZXRMZWZ0OmwubCxvZmZzZXRUb3A6MCxtYXhTaGlmdDpvLndpZHRofSxhdHRyaWJ1dGVzOnt4OmkseTplLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOiItOTAiLG9mZnNldDowfX0pfX0sYS5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7dmFyIG49eitlLm91dGxpbmV3aWR0aC8yO2lmKC0xPT09WS50aWNrbGFiZWxwb3NpdGlvbi5pbmRleE9mKCJpbnNpZGUiKSYmKG4rPXAuYkJveCgkLm5vZGUoKSkud2lkdGgpLChLPVEuc2VsZWN0KCJ0ZXh0IikpLm5vZGUoKSYmIUsuY2xhc3NlZChBLmpzUGxhY2Vob2xkZXIpKXt2YXIgaSxvPVEuc2VsZWN0KCIuaCIrWS5faWQrInRpdGxlLW1hdGgtZ3JvdXAiKS5ub2RlKCk7aT1vJiYtMSE9PVsidG9wIiwiYm90dG9tIl0uaW5kZXhPZihNKT9wLmJCb3gobykud2lkdGg6cC5iQm94KFEubm9kZSgpKS5yaWdodC1VLWwubCxuPU1hdGgubWF4KG4saSl9dmFyIHM9MiplLnhwYWQrbitlLmJvcmRlcndpZHRoK2Uub3V0bGluZXdpZHRoLzIsYz1xLUc7dC5zZWxlY3QoIi4iK0EuY2JiZykuYXR0cih7eDpVLWUueHBhZC0oZS5ib3JkZXJ3aWR0aCtlLm91dGxpbmV3aWR0aCkvMix5OkctTix3aWR0aDpNYXRoLm1heChzLDIpLGhlaWdodDpNYXRoLm1heChjKzIqTiwyKX0pLmNhbGwoZC5maWxsLGUuYmdjb2xvcikuY2FsbChkLnN0cm9rZSxlLmJvcmRlcmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKSx0LnNlbGVjdEFsbCgiLiIrQS5jYm91dGxpbmUpLmF0dHIoe3g6VSx5OkcrZS55cGFkKygidG9wIj09PU0/dHQ6MCksd2lkdGg6TWF0aC5tYXgoeiwyKSxoZWlnaHQ6TWF0aC5tYXgoYy0yKmUueXBhZC10dCwyKX0pLmNhbGwoZC5zdHJva2UsZS5vdXRsaW5lY29sb3IpLnN0eWxlKHtmaWxsOiJub25lIiwic3Ryb2tlLXdpZHRoIjplLm91dGxpbmV3aWR0aH0pO3ZhciBmPSh7Y2VudGVyOi41LHJpZ2h0OjF9W2UueGFuY2hvcl18fDApKnM7dC5hdHRyKCJ0cmFuc2Zvcm0iLHUobC5sLWYsbC50KSk7dmFyIGg9e30sbT1UW2UueWFuY2hvcl0sZz1rW2UueWFuY2hvcl07InBpeGVscyI9PT1lLmxlbm1vZGU/KGgueT1lLnksaC50PWMqbSxoLmI9YypnKTooaC50PWguYj0wLGgueXQ9ZS55K2UubGVuKm0saC55Yj1lLnktZS5sZW4qZyk7dmFyIHY9VFtlLnhhbmNob3JdLHk9a1tlLnhhbmNob3JdO2lmKCJwaXhlbHMiPT09ZS50aGlja25lc3Ntb2RlKWgueD1lLngsaC5sPXMqdixoLnI9cyp5O2Vsc2V7dmFyIHg9cy16O2gubD14KnYsaC5yPXgqeSxoLnhsPWUueC1lLnRoaWNrbmVzcyp2LGgueHI9ZS54K2UudGhpY2tuZXNzKnl9YS5hdXRvTWFyZ2luKHIsZS5faWQsaCl9XSxyKX0ocixlLHQpO3YmJnYudGhlbiYmKHQuX3Byb21pc2VzfHxbXSkucHVzaCh2KSx0Ll9jb250ZXh0LmVkaXRzLmNvbG9yYmFyUG9zaXRpb24mJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEscz1yLl9mdWxsTGF5b3V0Ll9zaXplO2wuaW5pdCh7ZWxlbWVudDp0Lm5vZGUoKSxnZDpyLHByZXBGbjpmdW5jdGlvbigpe249dC5hdHRyKCJ0cmFuc2Zvcm0iKSxoKHQpfSxtb3ZlRm46ZnVuY3Rpb24ocixvKXt0LmF0dHIoInRyYW5zZm9ybSIsbit1KHIsbykpLGk9bC5hbGlnbihlLl94TGVmdEZyYWMrci9zLncsZS5fdGhpY2tGcmFjLDAsMSxlLnhhbmNob3IpLGE9bC5hbGlnbihlLl95Qm90dG9tRnJhYy1vL3MuaCxlLl9sZW5GcmFjLDAsMSxlLnlhbmNob3IpO3ZhciBjPWwuZ2V0Q3Vyc29yKGksYSxlLnhhbmNob3IsZS55YW5jaG9yKTtoKHQsYyl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKGgodCksdm9pZCAwIT09aSYmdm9pZCAwIT09YSl7dmFyIG49e307bltlLl9wcm9wUHJlZml4KyJ4Il09aSxuW2UuX3Byb3BQcmVmaXgrInkiXT1hLHZvaWQgMCE9PWUuX3RyYWNlSW5kZXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIscixuLGUuX3RyYWNlSW5kZXgpOm8uY2FsbCgiX2d1aVJlbGF5b3V0IixyLG4pfX19KX0ocixlLHQpfSkpLGUuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKGUpe2EuYXV0b01hcmdpbih0LGUuX2lkKX0pKS5yZW1vdmUoKSxlLm9yZGVyKCl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo4MjksIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiOjg0NSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4uL2RyYWdlbGVtZW50Ijo2NTgsIi4uL2RyYXdpbmciOjY2MSwiLi4vdGl0bGVzIjo3MzcsIi4vY29uc3RhbnRzIjo2NDEsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sNjQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbi5pc1BsYWluT2JqZWN0KHQuY29sb3JiYXIpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDY0NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiY29sb3JiYXIiLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3IikuZHJhdyxoYXNDb2xvcmJhcjp0KCIuL2hhc19jb2xvcmJhciIpfX0seyIuL2F0dHJpYnV0ZXMiOjY0MCwiLi9kZWZhdWx0cyI6NjQyLCIuL2RyYXciOjY0MywiLi9oYXNfY29sb3JiYXIiOjY0NH1dLDY0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvcmJhci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIvcmVnZXgiKS5jb3VudGVyLGE9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxvPXQoIi4vc2NhbGVzLmpzIikuc2NhbGVzO2Eobyk7ZnVuY3Rpb24gcyh0KXtyZXR1cm4iYCIrdCsiYCJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dD10fHwiIjt2YXIgcixhPShlPWV8fHt9KS5jTGV0dGVyfHwiYyIsbD0oIm9ubHlJZk51bWVyaWNhbCJpbiBlP2Uub25seUlmTnVtZXJpY2FsOkJvb2xlYW4odCksIm5vU2NhbGUiaW4gZT9lLm5vU2NhbGU6Im1hcmtlci5saW5lIj09PXQpLGM9InNob3dTY2FsZURmbHQiaW4gZT9lLnNob3dTY2FsZURmbHQ6InoiPT09YSx1PSJzdHJpbmciPT10eXBlb2YgZS5jb2xvcnNjYWxlRGZsdD9vW2UuY29sb3JzY2FsZURmbHRdOm51bGwsZj1lLmVkaXRUeXBlT3ZlcnJpZGV8fCIiLGg9dD90KyIuIjoiIjsiY29sb3JBdHRyImluIGU/KHI9ZS5jb2xvckF0dHIsZS5jb2xvckF0dHIpOnMoaCsocj17ejoieiIsYzoiY29sb3IifVthXSkpO3ZhciBwPWErImF1dG8iLGQ9YSsibWluIixtPWErIm1heCIsZz1hKyJtaWQiLHY9KHMoaCtwKSxzKGgrZCkscyhoK20pLHt9KTt2W2RdPXZbbV09dm9pZCAwO3ZhciB5PXt9O3lbcF09ITE7dmFyIHg9e307cmV0dXJuImNvbG9yIj09PXImJih4LmNvbG9yPXt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZTpmfHwic3R5bGUifSxlLmFuaW0mJih4LmNvbG9yLmFuaW09ITApKSx4W3BdPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seFtkXT17dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6Znx8InBsb3QiLGltcGxpZWRFZGl0czp5fSx4W21dPXt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZTpmfHwicGxvdCIsaW1wbGllZEVkaXRzOnl9LHhbZ109e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6dn0seC5jb2xvcnNjYWxlPXt2YWxUeXBlOiJjb2xvcnNjYWxlIixlZGl0VHlwZToiY2FsYyIsZGZsdDp1LGltcGxpZWRFZGl0czp7YXV0b2NvbG9yc2NhbGU6ITF9fSx4LmF1dG9jb2xvcnNjYWxlPXt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExIT09ZS5hdXRvQ29sb3JEZmx0LGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6e2NvbG9yc2NhbGU6dm9pZCAwfX0seC5yZXZlcnNlc2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxsfHwoeC5zaG93c2NhbGU9e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6YyxlZGl0VHlwZToiY2FsYyJ9LHguY29sb3JiYXI9biksZS5ub0NvbG9yQXhpc3x8KHguY29sb3JheGlzPXt2YWxUeXBlOiJzdWJwbG90aWQiLHJlZ2V4OmkoImNvbG9yYXhpcyIpLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9KSx4fX0seyIuLi8uLi9saWIvcmVnZXgiOjc5MywiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjc5OSwiLi4vY29sb3JiYXIvYXR0cmlidXRlcyI6NjQwLCIuL3NjYWxlcy5qcyI6NjU0fV0sNjQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4vaGVscGVycyIpLmV4dHJhY3RPcHRzO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8scz10Ll9mdWxsTGF5b3V0LGw9ci52YWxzLGM9ci5jb250YWluZXJTdHIsdT1jP2kubmVzdGVkUHJvcGVydHkoZSxjKS5nZXQoKTplLGY9YSh1KSxoPSExIT09Zi5hdXRvLHA9Zi5taW4sZD1mLm1heCxtPWYubWlkLGc9ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWluLG51bGwsbCl9LHY9ZnVuY3Rpb24oKXtyZXR1cm4gaS5hZ2dOdW1zKE1hdGgubWF4LG51bGwsbCl9Oyh2b2lkIDA9PT1wP3A9ZygpOmgmJihwPXUuX2NvbG9yQXgmJm4ocCk/TWF0aC5taW4ocCxnKCkpOmcoKSksdm9pZCAwPT09ZD9kPXYoKTpoJiYoZD11Ll9jb2xvckF4JiZuKGQpP01hdGgubWF4KGQsdigpKTp2KCkpLGgmJnZvaWQgMCE9PW0mJihkLW0+bS1wP3A9bS0oZC1tKTpkLW08bS1wJiYoZD1tKyhtLXApKSkscD09PWQmJihwLT0uNSxkKz0uNSksZi5fc3luYygibWluIixwKSxmLl9zeW5jKCJtYXgiLGQpLGYuYXV0b2NvbG9yc2NhbGUpJiYobz1wKmQ8MD9zLmNvbG9yc2NhbGUuZGl2ZXJnaW5nOnA+PTA/cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWw6cy5jb2xvcnNjYWxlLnNlcXVlbnRpYWxtaW51cyxmLl9zeW5jKCJjb2xvcnNjYWxlIixvKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hlbHBlcnMiOjY1MCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY0ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuL2hlbHBlcnMiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7dmFyIHI9dFsiXyIrZV07dm9pZCAwIT09ciYmKHRbZV09cil9ZnVuY3Rpb24gbyh0LGkpe3ZhciBvPWkuY29udGFpbmVyP24ubmVzdGVkUHJvcGVydHkodCxpLmNvbnRhaW5lcikuZ2V0KCk6dDtpZihvKWlmKG8uY29sb3JheGlzKW8uX2NvbG9yQXg9ZVtvLmNvbG9yYXhpc107ZWxzZXt2YXIgcz1hKG8pLGw9cy5hdXRvOyhsfHx2b2lkIDA9PT1zLm1pbikmJnIobyxpLm1pbiksKGx8fHZvaWQgMD09PXMubWF4KSYmcihvLGkubWF4KSxzLmF1dG9jb2xvcnNjYWxlJiZyKG8sImNvbG9yc2NhbGUiKX19Zm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc10sYz1sLl9tb2R1bGUuY29sb3JiYXI7aWYoYylpZihBcnJheS5pc0FycmF5KGMpKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKW8obCxjW3VdKTtlbHNlIG8obCxjKTtpKGwsIm1hcmtlci5saW5lIikmJm8obCx7Y29udGFpbmVyOiJtYXJrZXIubGluZSIsbWluOiJjbWluIixtYXg6ImNtYXgifSl9Zm9yKHZhciBmIGluIGUuX2NvbG9yQXhlcylvKGVbZl0se21pbjoiY21pbiIsbWF4OiJjbWF4In0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi9oZWxwZXJzIjo2NTB9XSw2NDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vY29sb3JiYXIvaGFzX2NvbG9yYmFyIiksbz10KCIuLi9jb2xvcmJhci9kZWZhdWx0cyIpLHM9dCgiLi9zY2FsZXMiKS5pc1ZhbGlkLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLnNsaWNlKDAsZS5sZW5ndGgtMSk7cmV0dXJuIGU/aS5uZXN0ZWRQcm9wZXJ0eSh0LHIpLmdldCgpfHx7fTp0fWUuZXhwb3J0cz1mdW5jdGlvbiB0KGUscix1LGYsaCl7dmFyIHA9aC5wcmVmaXgsZD1oLmNMZXR0ZXIsbT0iX21vZHVsZSJpbiByLGc9YyhlLHApLHY9YyhyLHApLHk9YyhyLl90ZW1wbGF0ZXx8e30scCl8fHt9LHg9ZnVuY3Rpb24oKXtyZXR1cm4gZGVsZXRlIGUuY29sb3JheGlzLGRlbGV0ZSByLmNvbG9yYXhpcyx0KGUscix1LGYsaCl9O2lmKG0pe3ZhciBiPXUuX2NvbG9yQXhlc3x8e30sXz1mKHArImNvbG9yYXhpcyIpO2lmKF8pe3ZhciB3PWwociwiY29udG91ciIpJiZpLm5lc3RlZFByb3BlcnR5KHIsImNvbnRvdXJzLmNvbG9yaW5nIikuZ2V0KCl8fCJoZWF0bWFwIixUPWJbX107cmV0dXJuIHZvaWQoVD8oVFsyXS5wdXNoKHgpLFRbMF0hPT13JiYoVFswXT0hMSxpLndhcm4oWyJJZ25vcmluZyBjb2xvcmF4aXM6IixfLCJzZXR0aW5nIiwiYXMgaXQgaXMgbGlua2VkIHRvIGluY29tcGF0aWJsZSBjb2xvcnNjYWxlcy4iXS5qb2luKCIgIikpKSk6YltfXT1bdyxyLFt4XV0pfX12YXIgaz1nW2QrIm1pbiJdLEE9Z1tkKyJtYXgiXSxNPW4oaykmJm4oQSkmJms8QTtmKHArZCsiYXV0byIsIU0pP2YocCtkKyJtaWQiKTooZihwK2QrIm1pbiIpLGYocCtkKyJtYXgiKSk7dmFyIFMsRSxMPWcuY29sb3JzY2FsZSxDPXkuY29sb3JzY2FsZTsodm9pZCAwIT09TCYmKFM9IXMoTCkpLHZvaWQgMCE9PUMmJihTPSFzKEMpKSxmKHArImF1dG9jb2xvcnNjYWxlIixTKSxmKHArImNvbG9yc2NhbGUiKSxmKHArInJldmVyc2VzY2FsZSIpLCJtYXJrZXIubGluZS4iIT09cCkmJihwJiZtJiYoRT1hKGcpKSxmKHArInNob3dzY2FsZSIsRSkmJihwJiZ5JiYodi5fdGVtcGxhdGU9eSksbyhnLHYsdSkpKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yYmFyL2RlZmF1bHRzIjo2NDIsIi4uL2NvbG9yYmFyL2hhc19jb2xvcmJhciI6NjQ0LCIuL3NjYWxlcyI6NjU0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoInRpbnljb2xvcjIiKSxhPXQoImZhc3QtaXNudW1lcmljIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2NvbG9yIiksbD10KCIuL3NjYWxlcyIpLmlzVmFsaWQ7dmFyIGM9WyJzaG93c2NhbGUiLCJhdXRvY29sb3JzY2FsZSIsImNvbG9yc2NhbGUiLCJyZXZlcnNlc2NhbGUiLCJjb2xvcmJhciJdLHU9WyJtaW4iLCJtYXgiLCJtaWQiLCJhdXRvIl07ZnVuY3Rpb24gZih0KXt2YXIgZSxyLG4saT10Ll9jb2xvckF4LGE9aXx8dCxvPXt9O2ZvcihyPTA7cjxjLmxlbmd0aDtyKyspb1tuPWNbcl1dPWFbbl07aWYoaSlmb3IoZT0iYyIscj0wO3I8dS5sZW5ndGg7cisrKW9bbj11W3JdXT1hWyJjIituXTtlbHNle3ZhciBzO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspKChzPSJjIisobj11W3JdKSlpbiBhfHwocz0ieiIrbilpbiBhKSYmKG9bbl09YVtzXSk7ZT1zLmNoYXJBdCgwKX1yZXR1cm4gby5fc3luYz1mdW5jdGlvbih0LHIpe3ZhciBuPS0xIT09dS5pbmRleE9mKHQpP2UrdDp0O2Fbbl09YVsiXyIrbl09cn0sb31mdW5jdGlvbiBoKHQpe2Zvcih2YXIgZT1mKHQpLHI9ZS5taW4sbj1lLm1heCxpPWUucmV2ZXJzZXNjYWxlP3AoZS5jb2xvcnNjYWxlKTplLmNvbG9yc2NhbGUsYT1pLmxlbmd0aCxvPW5ldyBBcnJheShhKSxzPW5ldyBBcnJheShhKSxsPTA7bDxhO2wrKyl7dmFyIGM9aVtsXTtvW2xdPXIrY1swXSoobi1yKSxzW2xdPWNbMV19cmV0dXJue2RvbWFpbjpvLHJhbmdlOnN9fWZ1bmN0aW9uIHAodCl7Zm9yKHZhciBlPXQubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49ZS0xLGk9MDtuPj0wO24tLSxpKyspe3ZhciBhPXRbbl07cltpXT1bMS1hWzBdLGFbMV1dfXJldHVybiByfWZ1bmN0aW9uIGQodCxlKXtlPWV8fHt9O2Zvcih2YXIgcj10LmRvbWFpbixvPXQucmFuZ2UsbD1vLmxlbmd0aCxjPW5ldyBBcnJheShsKSx1PTA7dTxsO3UrKyl7dmFyIGY9aShvW3VdKS50b1JnYigpO2NbdV09W2YucixmLmcsZi5iLGYuYV19dmFyIGgscD1uLnNjYWxlLmxpbmVhcigpLmRvbWFpbihyKS5yYW5nZShjKS5jbGFtcCghMCksZD1lLm5vTnVtZXJpY0NoZWNrLGc9ZS5yZXR1cm5BcnJheTtyZXR1cm4oaD1kJiZnP3A6ZD9mdW5jdGlvbih0KXtyZXR1cm4gbShwKHQpKX06Zz9mdW5jdGlvbih0KXtyZXR1cm4gYSh0KT9wKHQpOmkodCkuaXNWYWxpZCgpP3Q6cy5kZWZhdWx0TGluZX06ZnVuY3Rpb24odCl7cmV0dXJuIGEodCk/bShwKHQpKTppKHQpLmlzVmFsaWQoKT90OnMuZGVmYXVsdExpbmV9KS5kb21haW49cC5kb21haW4saC5yYW5nZT1mdW5jdGlvbigpe3JldHVybiBvfSxofWZ1bmN0aW9uIG0odCl7dmFyIGU9e3I6dFswXSxnOnRbMV0sYjp0WzJdLGE6dFszXX07cmV0dXJuIGkoZSkudG9SZ2JTdHJpbmcoKX1lLmV4cG9ydHM9e2hhc0NvbG9yc2NhbGU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU/by5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHx7fTp0LGk9bltyfHwiY29sb3IiXSxzPSExO2lmKG8uaXNBcnJheU9yVHlwZWRBcnJheShpKSlmb3IodmFyIGM9MDtjPGkubGVuZ3RoO2MrKylpZihhKGlbY10pKXtzPSEwO2JyZWFrfXJldHVybiBvLmlzUGxhaW5PYmplY3QobikmJihzfHwhMD09PW4uc2hvd3NjYWxlfHxhKG4uY21pbikmJmEobi5jbWF4KXx8bChuLmNvbG9yc2NhbGUpfHxvLmlzUGxhaW5PYmplY3Qobi5jb2xvcmJhcikpfSxleHRyYWN0T3B0czpmLGV4dHJhY3RTY2FsZTpoLGZsaXBTY2FsZTpwLG1ha2VDb2xvclNjYWxlRnVuYzpkLG1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZTpmdW5jdGlvbih0LGUpe3JldHVybiBkKGgodCksZSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vY29sb3IiOjYzOSwiLi9zY2FsZXMiOjY1NCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDIsdGlueWNvbG9yMjo1NzJ9XSw2NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zY2FsZXMiKSxpPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJjb2xvcnNjYWxlIixhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksaGFuZGxlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxzY2FsZXM6bi5zY2FsZXMsZGVmYXVsdFNjYWxlOm4uZGVmYXVsdFNjYWxlLGdldFNjYWxlOm4uZ2V0LGlzVmFsaWRTY2FsZTpuLmlzVmFsaWQsaGFzQ29sb3JzY2FsZTppLmhhc0NvbG9yc2NhbGUsZXh0cmFjdE9wdHM6aS5leHRyYWN0T3B0cyxleHRyYWN0U2NhbGU6aS5leHRyYWN0U2NhbGUsZmxpcFNjYWxlOmkuZmxpcFNjYWxlLG1ha2VDb2xvclNjYWxlRnVuYzppLm1ha2VDb2xvclNjYWxlRnVuYyxtYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2U6aS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2V9fSx7Ii4vYXR0cmlidXRlcyI6NjQ2LCIuL2NhbGMiOjY0NywiLi9jcm9zc190cmFjZV9kZWZhdWx0cyI6NjQ4LCIuL2RlZmF1bHRzIjo2NDksIi4vaGVscGVycyI6NjUwLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTIsIi4vbGF5b3V0X2RlZmF1bHRzIjo2NTMsIi4vc2NhbGVzIjo2NTR9XSw2NTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vc2NhbGVzIikuc2NhbGVzO2UuZXhwb3J0cz17ZWRpdFR5cGU6ImNhbGMiLGNvbG9yc2NhbGU6e2VkaXRUeXBlOiJjYWxjIixzZXF1ZW50aWFsOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuUmVkcyxlZGl0VHlwZToiY2FsYyJ9LHNlcXVlbnRpYWxtaW51czp7dmFsVHlwZToiY29sb3JzY2FsZSIsZGZsdDphLkJsdWVzLGVkaXRUeXBlOiJjYWxjIn0sZGl2ZXJnaW5nOnt2YWxUeXBlOiJjb2xvcnNjYWxlIixkZmx0OmEuUmRCdSxlZGl0VHlwZToiY2FsYyJ9fSxjb2xvcmF4aXM6bih7X2lzU3VicGxvdE9iajohMCxlZGl0VHlwZToiY2FsYyJ9LGkoIiIse2NvbG9yQXR0cjoiY29ycmVzcG9uZGluZyB0cmFjZSBjb2xvciBhcnJheShzKSIsbm9Db2xvckF4aXM6ITAsc2hvd1NjYWxlRGZsdDohMH0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuL2F0dHJpYnV0ZXMiOjY0NiwiLi9zY2FsZXMiOjY1NH1dLDY1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4vZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9cigiY29sb3JzY2FsZS5zZXF1ZW50aWFsIikscigiY29sb3JzY2FsZS5zZXF1ZW50aWFsbWludXMiKSxyKCJjb2xvcnNjYWxlLmRpdmVyZ2luZyIpO3ZhciBzLGwsYz1lLl9jb2xvckF4ZXM7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBuLmNvZXJjZShzLGwsYS5jb2xvcmF4aXMsdCxlKX1mb3IodmFyIGYgaW4gYyl7dmFyIGg9Y1tmXTtpZihoWzBdKXM9dFtmXXx8e30sKGw9aS5uZXdDb250YWluZXIoZSxmLCJjb2xvcmF4aXMiKSkuX25hbWU9ZixvKHMsbCxlLHUse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pO2Vsc2V7Zm9yKHZhciBwPTA7cDxoWzJdLmxlbmd0aDtwKyspaFsyXVtwXSgpO2RlbGV0ZSBlLl9jb2xvckF4ZXNbZl19fX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi9kZWZhdWx0cyI6NjQ5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo2NTJ9XSw2NTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLGk9e0dyZXlzOltbMCwicmdiKDAsMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLFlsR25CdTpbWzAsInJnYig4LDI5LDg4KSJdLFsuMTI1LCJyZ2IoMzcsNTIsMTQ4KSJdLFsuMjUsInJnYigzNCw5NCwxNjgpIl0sWy4zNzUsInJnYigyOSwxNDUsMTkyKSJdLFsuNSwicmdiKDY1LDE4MiwxOTYpIl0sWy42MjUsInJnYigxMjcsMjA1LDE4NykiXSxbLjc1LCJyZ2IoMTk5LDIzMywxODApIl0sWy44NzUsInJnYigyMzcsMjQ4LDIxNykiXSxbMSwicmdiKDI1NSwyNTUsMjE3KSJdXSxHcmVlbnM6W1swLCJyZ2IoMCw2OCwyNykiXSxbLjEyNSwicmdiKDAsMTA5LDQ0KSJdLFsuMjUsInJnYigzNSwxMzksNjkpIl0sWy4zNzUsInJnYig2NSwxNzEsOTMpIl0sWy41LCJyZ2IoMTE2LDE5NiwxMTgpIl0sWy42MjUsInJnYigxNjEsMjE3LDE1NSkiXSxbLjc1LCJyZ2IoMTk5LDIzMywxOTIpIl0sWy44NzUsInJnYigyMjksMjQ1LDIyNCkiXSxbMSwicmdiKDI0NywyNTIsMjQ1KSJdXSxZbE9yUmQ6W1swLCJyZ2IoMTI4LDAsMzgpIl0sWy4xMjUsInJnYigxODksMCwzOCkiXSxbLjI1LCJyZ2IoMjI3LDI2LDI4KSJdLFsuMzc1LCJyZ2IoMjUyLDc4LDQyKSJdLFsuNSwicmdiKDI1MywxNDEsNjApIl0sWy42MjUsInJnYigyNTQsMTc4LDc2KSJdLFsuNzUsInJnYigyNTQsMjE3LDExOCkiXSxbLjg3NSwicmdiKDI1NSwyMzcsMTYwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyMDQpIl1dLEJsdWVyZWQ6W1swLCJyZ2IoMCwwLDI1NSkiXSxbMSwicmdiKDI1NSwwLDApIl1dLFJkQnU6W1swLCJyZ2IoNSwxMCwxNzIpIl0sWy4zNSwicmdiKDEwNiwxMzcsMjQ3KSJdLFsuNSwicmdiKDE5MCwxOTAsMTkwKSJdLFsuNiwicmdiKDIyMCwxNzAsMTMyKSJdLFsuNywicmdiKDIzMCwxNDUsOTApIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLFJlZHM6W1swLCJyZ2IoMjIwLDIyMCwyMjApIl0sWy4yLCJyZ2IoMjQ1LDE5NSwxNTcpIl0sWy40LCJyZ2IoMjQ1LDE2MCwxMDUpIl0sWzEsInJnYigxNzgsMTAsMjgpIl1dLEJsdWVzOltbMCwicmdiKDUsMTAsMTcyKSJdLFsuMzUsInJnYig0MCw2MCwxOTApIl0sWy41LCJyZ2IoNzAsMTAwLDI0NSkiXSxbLjYsInJnYig5MCwxMjAsMjQ1KSJdLFsuNywicmdiKDEwNiwxMzcsMjQ3KSJdLFsxLCJyZ2IoMjIwLDIyMCwyMjApIl1dLFBpY25pYzpbWzAsInJnYigwLDAsMjU1KSJdLFsuMSwicmdiKDUxLDE1MywyNTUpIl0sWy4yLCJyZ2IoMTAyLDIwNCwyNTUpIl0sWy4zLCJyZ2IoMTUzLDIwNCwyNTUpIl0sWy40LCJyZ2IoMjA0LDIwNCwyNTUpIl0sWy41LCJyZ2IoMjU1LDI1NSwyNTUpIl0sWy42LCJyZ2IoMjU1LDIwNCwyNTUpIl0sWy43LCJyZ2IoMjU1LDE1MywyNTUpIl0sWy44LCJyZ2IoMjU1LDEwMiwyMDQpIl0sWy45LCJyZ2IoMjU1LDEwMiwxMDIpIl0sWzEsInJnYigyNTUsMCwwKSJdXSxSYWluYm93OltbMCwicmdiKDE1MCwwLDkwKSJdLFsuMTI1LCJyZ2IoMCwwLDIwMCkiXSxbLjI1LCJyZ2IoMCwyNSwyNTUpIl0sWy4zNzUsInJnYigwLDE1MiwyNTUpIl0sWy41LCJyZ2IoNDQsMjU1LDE1MCkiXSxbLjYyNSwicmdiKDE1MSwyNTUsMCkiXSxbLjc1LCJyZ2IoMjU1LDIzNCwwKSJdLFsuODc1LCJyZ2IoMjU1LDExMSwwKSJdLFsxLCJyZ2IoMjU1LDAsMCkiXV0sUG9ydGxhbmQ6W1swLCJyZ2IoMTIsNTEsMTMxKSJdLFsuMjUsInJnYigxMCwxMzYsMTg2KSJdLFsuNSwicmdiKDI0MiwyMTEsNTYpIl0sWy43NSwicmdiKDI0MiwxNDMsNTYpIl0sWzEsInJnYigyMTcsMzAsMzApIl1dLEpldDpbWzAsInJnYigwLDAsMTMxKSJdLFsuMTI1LCJyZ2IoMCw2MCwxNzApIl0sWy4zNzUsInJnYig1LDI1NSwyNTUpIl0sWy42MjUsInJnYigyNTUsMjU1LDApIl0sWy44NzUsInJnYigyNTAsMCwwKSJdLFsxLCJyZ2IoMTI4LDAsMCkiXV0sSG90OltbMCwicmdiKDAsMCwwKSJdLFsuMywicmdiKDIzMCwwLDApIl0sWy42LCJyZ2IoMjU1LDIxMCwwKSJdLFsxLCJyZ2IoMjU1LDI1NSwyNTUpIl1dLEJsYWNrYm9keTpbWzAsInJnYigwLDAsMCkiXSxbLjIsInJnYigyMzAsMCwwKSJdLFsuNCwicmdiKDIzMCwyMTAsMCkiXSxbLjcsInJnYigyNTUsMjU1LDI1NSkiXSxbMSwicmdiKDE2MCwyMDAsMjU1KSJdXSxFYXJ0aDpbWzAsInJnYigwLDAsMTMwKSJdLFsuMSwicmdiKDAsMTgwLDE4MCkiXSxbLjIsInJnYig0MCwyMTAsNDApIl0sWy40LCJyZ2IoMjMwLDIzMCw1MCkiXSxbLjYsInJnYigxMjAsNzAsMjApIl0sWzEsInJnYigyNTUsMjU1LDI1NSkiXV0sRWxlY3RyaWM6W1swLCJyZ2IoMCwwLDApIl0sWy4xNSwicmdiKDMwLDAsMTAwKSJdLFsuNCwicmdiKDEyMCwwLDEwMCkiXSxbLjYsInJnYigxNjAsOTAsMCkiXSxbLjgsInJnYigyMzAsMjAwLDApIl0sWzEsInJnYigyNTUsMjUwLDIyMCkiXV0sVmlyaWRpczpbWzAsIiM0NDAxNTQiXSxbLjA2Mjc0NTA5ODAzOTIxNTY5LCIjNDgxODZhIl0sWy4xMjU0OTAxOTYwNzg0MzEzNywiIzQ3MmQ3YiJdLFsuMTg4MjM1Mjk0MTE3NjQ3MDYsIiM0MjQwODYiXSxbLjI1MDk4MDM5MjE1Njg2Mjc0LCIjM2I1MjhiIl0sWy4zMTM3MjU0OTAxOTYwNzg0LCIjMzM2MzhkIl0sWy4zNzY0NzA1ODgyMzUyOTQxLCIjMmM3MjhlIl0sWy40MzkyMTU2ODYyNzQ1MDk4LCIjMjY4MjhlIl0sWy41MDE5NjA3ODQzMTM3MjU1LCIjMjE5MThjIl0sWy41NjQ3MDU4ODIzNTI5NDEyLCIjMWZhMDg4Il0sWy42Mjc0NTA5ODAzOTIxNTY5LCIjMjhhZTgwIl0sWy42OTAxOTYwNzg0MzEzNzI1LCIjM2ZiYzczIl0sWy43NTI5NDExNzY0NzA1ODgyLCIjNWVjOTYyIl0sWy44MTU2ODYyNzQ1MDk4MDM5LCIjODRkNDRiIl0sWy44Nzg0MzEzNzI1NDkwMTk2LCIjYWRkYzMwIl0sWy45NDExNzY0NzA1ODgyMzUzLCIjZDhlMjE5Il0sWzEsIiNmZGU3MjUiXV0sQ2l2aWRpczpbWzAsInJnYigwLDMyLDc2KSJdLFsuMDU4ODI0LCJyZ2IoMCw0MiwxMDIpIl0sWy4xMTc2NDcsInJnYigwLDUyLDExMCkiXSxbLjE3NjQ3MSwicmdiKDM5LDYzLDEwOCkiXSxbLjIzNTI5NCwicmdiKDYwLDc0LDEwNykiXSxbLjI5NDExOCwicmdiKDc2LDg1LDEwNykiXSxbLjM1Mjk0MSwicmdiKDkxLDk1LDEwOSkiXSxbLjQxMTc2NSwicmdiKDEwNCwxMDYsMTEyKSJdLFsuNDcwNTg4LCJyZ2IoMTE3LDExNywxMTcpIl0sWy41Mjk0MTIsInJnYigxMzEsMTI5LDEyMCkiXSxbLjU4ODIzNSwicmdiKDE0NiwxNDAsMTIwKSJdLFsuNjQ3MDU5LCJyZ2IoMTYxLDE1MiwxMTgpIl0sWy43MDU4ODIsInJnYigxNzYsMTY1LDExNCkiXSxbLjc2NDcwNiwicmdiKDE5MiwxNzcsMTA5KSJdLFsuODIzNTI5LCJyZ2IoMjA5LDE5MSwxMDIpIl0sWy44ODIzNTMsInJnYigyMjUsMjA0LDkyKSJdLFsuOTQxMTc2LCJyZ2IoMjQzLDIxOSw3OSkiXSxbMSwicmdiKDI1NSwyMzMsNjkpIl1dfSxhPWkuUmRCdTtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7aWYoIUFycmF5LmlzQXJyYXkodCl8fHQubGVuZ3RoPDIpcmV0dXJuITE7aWYoIXRbMF18fCF0W3QubGVuZ3RoLTFdKXJldHVybiExO2lmKDAhPSt0WzBdWzBdfHwxIT0rdFt0Lmxlbmd0aC0xXVswXSlyZXR1cm4hMTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIGk9dFtyXTtpZigyIT09aS5sZW5ndGh8fCtpWzBdPGV8fCFuKGlbMV0pLmlzVmFsaWQoKSlyZXR1cm4hMTtlPStpWzBdfXJldHVybiEwfWUuZXhwb3J0cz17c2NhbGVzOmksZGVmYXVsdFNjYWxlOmEsZ2V0OmZ1bmN0aW9uKHQsZSl7aWYoZXx8KGU9YSksIXQpcmV0dXJuIGU7ZnVuY3Rpb24gcigpe3RyeXt0PWlbdF18fEpTT04ucGFyc2UodCl9Y2F0Y2gocil7dD1lfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihyKCksInN0cmluZyI9PXR5cGVvZiB0JiZyKCkpLG8odCk/dDplfSxpc1ZhbGlkOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT1pW3RdfHxvKHQpfX19LHt0aW55Y29sb3IyOjU3Mn1dLDY1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT0odC1yKS8obi1yKSxvPWErZS8obi1yKSxzPShhK28pLzI7cmV0dXJuImxlZnQiPT09aXx8ImJvdHRvbSI9PT1pP2E6ImNlbnRlciI9PT1pfHwibWlkZGxlIj09PWk/czoicmlnaHQiPT09aXx8InRvcCI9PT1pP286YTwyLzMtcz9hOm8+NC8zLXM/bzpzfX0se31dLDY1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPVtbInN3LXJlc2l6ZSIsInMtcmVzaXplIiwic2UtcmVzaXplIl0sWyJ3LXJlc2l6ZSIsIm1vdmUiLCJlLXJlc2l6ZSJdLFsibnctcmVzaXplIiwibi1yZXNpemUiLCJuZS1yZXNpemUiXV07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiB0PSJsZWZ0Ij09PXI/MDoiY2VudGVyIj09PXI/MToicmlnaHQiPT09cj8yOm4uY29uc3RyYWluKE1hdGguZmxvb3IoMyp0KSwwLDIpLGU9ImJvdHRvbSI9PT1hPzA6Im1pZGRsZSI9PT1hPzE6InRvcCI9PT1hPzI6bi5jb25zdHJhaW4oTWF0aC5mbG9vcigzKmUpLDAsMiksaVtlXVt0XX19LHsiLi4vLi4vbGliIjo3NzZ9XSw2NTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5zZWxlY3RNb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJsYXNzbyI9PT10fHwic2VsZWN0Ij09PXR9LHIuZHJhd01vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImRyYXdjbG9zZWRwYXRoIj09PXR8fCJkcmF3b3BlbnBhdGgiPT09dHx8ImRyYXdsaW5lIj09PXR8fCJkcmF3cmVjdCI9PT10fHwiZHJhd2NpcmNsZSI9PT10fSxyLm9wZW5Nb2RlPWZ1bmN0aW9uKHQpe3JldHVybiJkcmF3bGluZSI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR9LHIucmVjdE1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdCI9PT10fHwiZHJhd2xpbmUiPT09dHx8ImRyYXdyZWN0Ij09PXR8fCJkcmF3Y2lyY2xlIj09PXR9LHIuZnJlZU1vZGU9ZnVuY3Rpb24odCl7cmV0dXJuImxhc3NvIj09PXR8fCJkcmF3Y2xvc2VkcGF0aCI9PT10fHwiZHJhd29wZW5wYXRoIj09PXR9LHIuc2VsZWN0aW5nT3JEcmF3aW5nPWZ1bmN0aW9uKHQpe3JldHVybiByLmZyZWVNb2RlKHQpfHxyLnJlY3RNb2RlKHQpfX0se31dLDY1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJtb3VzZS1ldmVudC1vZmZzZXQiKSxpPXQoImhhcy1ob3ZlciIpLGE9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIiksbz10KCIuLi8uLi9saWIiKS5yZW1vdmVFbGVtZW50LHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLGw9ZS5leHBvcnRzPXt9O2wuYWxpZ249dCgiLi9hbGlnbiIpLGwuZ2V0Q3Vyc29yPXQoIi4vY3Vyc29yIik7dmFyIGM9dCgiLi91bmhvdmVyIik7ZnVuY3Rpb24gdSgpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJkcmFnY292ZXIiO3ZhciBlPXQuc3R5bGU7cmV0dXJuIGUucG9zaXRpb249ImZpeGVkIixlLmxlZnQ9MCxlLnJpZ2h0PTAsZS50b3A9MCxlLmJvdHRvbT0wLGUuekluZGV4PTk5OTk5OTk5OSxlLmJhY2tncm91bmQ9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksdH1mdW5jdGlvbiBmKHQpe3JldHVybiBuKHQuY2hhbmdlZFRvdWNoZXM/dC5jaGFuZ2VkVG91Y2hlc1swXTp0LGRvY3VtZW50LmJvZHkpfWwudW5ob3Zlcj1jLndyYXBwZWQsbC51bmhvdmVyUmF3PWMucmF3LGwuaW5pdD1mdW5jdGlvbih0KXt2YXIgZSxyLG4sYyxoLHAsZCxtLGc9dC5nZCx2PTEseT1nLl9jb250ZXh0LmRvdWJsZUNsaWNrRGVsYXkseD10LmVsZW1lbnQ7Zy5fbW91c2VEb3duVGltZXx8KGcuX21vdXNlRG93blRpbWU9MCkseC5zdHlsZS5wb2ludGVyRXZlbnRzPSJhbGwiLHgub25tb3VzZWRvd249XyxhPyh4Ll9vbnRvdWNoc3RhcnQmJngucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIseC5fb250b3VjaHN0YXJ0KSx4Ll9vbnRvdWNoc3RhcnQ9Xyx4LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLF8se3Bhc3NpdmU6ITF9KSk6eC5vbnRvdWNoc3RhcnQ9Xzt2YXIgYj10LmNsYW1wRm58fGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gTWF0aC5hYnModCk8ciYmKHQ9MCksTWF0aC5hYnMoZSk8ciYmKGU9MCksW3QsZV19O2Z1bmN0aW9uIF8oYSl7Zy5fZHJhZ2dlZD0hMSxnLl9kcmFnZ2luZz0hMDt2YXIgbz1mKGEpO2U9b1swXSxyPW9bMV0sZD1hLnRhcmdldCxwPWEsbT0yPT09YS5idXR0b25zfHxhLmN0cmxLZXksdm9pZCAwPT09YS5jbGllbnRYJiZ2b2lkIDA9PT1hLmNsaWVudFkmJihhLmNsaWVudFg9ZSxhLmNsaWVudFk9ciksKG49KG5ldyBEYXRlKS5nZXRUaW1lKCkpLWcuX21vdXNlRG93blRpbWU8eT92Kz0xOih2PTEsZy5fbW91c2VEb3duVGltZT1uKSx0LnByZXBGbiYmdC5wcmVwRm4oYSxlLHIpLGkmJiFtPyhoPXUoKSkuc3R5bGUuY3Vyc29yPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHgpLmN1cnNvcjppfHwoaD1kb2N1bWVudCxjPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY3Vyc29yLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9d2luZG93LmdldENvbXB1dGVkU3R5bGUoeCkuY3Vyc29yKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksITEhPT10LmRyYWdtb2RlJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsdyksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix3LHtwYXNzaXZlOiExfSkpfWZ1bmN0aW9uIHcobil7bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBpPWYobiksYT10Lm1pbkRyYWd8fHMuTUlORFJBRyxvPWIoaVswXS1lLGlbMV0tcixhKSxjPW9bMF0sdT1vWzFdOyhjfHx1KSYmKGcuX2RyYWdnZWQ9ITAsbC51bmhvdmVyKGcsbikpLGcuX2RyYWdnZWQmJnQubW92ZUZuJiYhbSYmKGcuX2RyYWdkYXRhPXtlbGVtZW50OngsZHg6YyxkeTp1fSx0Lm1vdmVGbihjLHUpKX1mdW5jdGlvbiBUKGUpe2lmKGRlbGV0ZSBnLl9kcmFnZGF0YSwhMSE9PXQuZHJhZ21vZGUmJihlLnByZXZlbnREZWZhdWx0KCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIix3KSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHcpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIixUKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsVCksaT9vKGgpOmMmJihoLmRvY3VtZW50RWxlbWVudC5zdHlsZS5jdXJzb3I9YyxjPW51bGwpLGcuX2RyYWdnaW5nKXtpZihnLl9kcmFnZ2luZz0hMSwobmV3IERhdGUpLmdldFRpbWUoKS1nLl9tb3VzZURvd25UaW1lPnkmJih2PU1hdGgubWF4KHYtMSwxKSksZy5fZHJhZ2dlZCl0LmRvbmVGbiYmdC5kb25lRm4oKTtlbHNlIGlmKHQuY2xpY2tGbiYmdC5jbGlja0ZuKHYscCksIW0pe3ZhciByO3RyeXtyPW5ldyBNb3VzZUV2ZW50KCJjbGljayIsZSl9Y2F0Y2godCl7dmFyIG49ZihlKTsocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSkuaW5pdE1vdXNlRXZlbnQoImNsaWNrIixlLmJ1YmJsZXMsZS5jYW5jZWxhYmxlLGUudmlldyxlLmRldGFpbCxlLnNjcmVlblgsZS5zY3JlZW5ZLG5bMF0sblsxXSxlLmN0cmxLZXksZS5hbHRLZXksZS5zaGlmdEtleSxlLm1ldGFLZXksZS5idXR0b24sZS5yZWxhdGVkVGFyZ2V0KX1kLmRpc3BhdGNoRXZlbnQocil9Zy5fZHJhZ2dpbmc9ITEsZy5fZHJhZ2dlZD0hMX1lbHNlIGcuX2RyYWdnZWQ9ITF9fSxsLmNvdmVyU2xpcD11fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4vYWxpZ24iOjY1NSwiLi9jdXJzb3IiOjY1NiwiLi91bmhvdmVyIjo2NTksImhhcy1ob3ZlciI6NDI1LCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQyNiwibW91c2UtZXZlbnQtb2Zmc2V0Ijo0NTB9XSw2NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V2ZW50cyIpLGk9dCgiLi4vLi4vbGliL3Rocm90dGxlIiksYT10KCIuLi8uLi9saWIvZG9tIikuZ2V0R3JhcGhEaXYsbz10KCIuLi9meC9jb25zdGFudHMiKSxzPWUuZXhwb3J0cz17fTtzLndyYXBwZWQ9ZnVuY3Rpb24odCxlLHIpeyh0PWEodCkpLl9mdWxsTGF5b3V0JiZpLmNsZWFyKHQuX2Z1bGxMYXlvdXQuX3VpZCtvLkhPVkVSSUQpLHMucmF3KHQsZSxyKX0scy5yYXc9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9dC5faG92ZXJkYXRhO2V8fChlPXt9KSxlLnRhcmdldCYmIXQuX2RyYWdnZWQmJiExPT09bi50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpfHwoci5faG92ZXJsYXllci5zZWxlY3RBbGwoImciKS5yZW1vdmUoKSxyLl9ob3ZlcmxheWVyLnNlbGVjdEFsbCgibGluZSIpLnJlbW92ZSgpLHIuX2hvdmVybGF5ZXIuc2VsZWN0QWxsKCJjaXJjbGUiKS5yZW1vdmUoKSx0Ll9ob3ZlcmRhdGE9dm9pZCAwLGUudGFyZ2V0JiZpJiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6aX0pKX19LHsiLi4vLi4vbGliL2RvbSI6NzY0LCIuLi8uLi9saWIvZXZlbnRzIjo3NjUsIi4uLy4uL2xpYi90aHJvdHRsZSI6ODAzLCIuLi9meC9jb25zdGFudHMiOjY3M31dLDY2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmRhc2g9e3ZhbFR5cGU6InN0cmluZyIsdmFsdWVzOlsic29saWQiLCJkb3QiLCJkYXNoIiwibG9uZ2Rhc2giLCJkYXNoZG90IiwibG9uZ2Rhc2hkb3QiXSxkZmx0OiJzb2xpZCIsZWRpdFR5cGU6InN0eWxlIn0sci5wYXR0ZXJuPXtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwiLyIsIlxcIiwieCIsIi0iLCJ8IiwiKyIsIi4iXSxkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmlsbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlcGxhY2UiLCJvdmVybGF5Il0sZGZsdDoicmVwbGFjZSIsZWRpdFR5cGU6InN0eWxlIn0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZmdvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSIsbWluOjAsbWF4OjF9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4LGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sc29saWRpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fSx7fV0sNjYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5udW1iZXJGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgidGlueWNvbG9yMiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi9jb2xvcnNjYWxlIiksZj1pLnN0clRyYW5zbGF0ZSxoPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxkPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKS5MSU5FX1NQQUNJTkcsbT10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0sZz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLHY9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIikseT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUseD1lLmV4cG9ydHM9e307eC5mb250PWZ1bmN0aW9uKHQsZSxyLG4pe2kuaXNQbGFpbk9iamVjdChlKSYmKG49ZS5jb2xvcixyPWUuc2l6ZSxlPWUuZmFtaWx5KSxlJiZ0LnN0eWxlKCJmb250LWZhbWlseSIsZSkscisxJiZ0LnN0eWxlKCJmb250LXNpemUiLHIrInB4IiksbiYmdC5jYWxsKGMuZmlsbCxuKX0seC5zZXRQb3NpdGlvbj1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJ4IixlKS5hdHRyKCJ5IixyKX0seC5zZXRTaXplPWZ1bmN0aW9uKHQsZSxyKXt0LmF0dHIoIndpZHRoIixlKS5hdHRyKCJoZWlnaHQiLHIpfSx4LnNldFJlY3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmNhbGwoeC5zZXRQb3NpdGlvbixlLHIpLmNhbGwoeC5zZXRTaXplLG4saSl9LHgudHJhbnNsYXRlUG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ci5jMnAodC54KSxhPW4uYzJwKHQueSk7cmV0dXJuISEobyhpKSYmbyhhKSYmZS5ub2RlKCkpJiYoInRleHQiPT09ZS5ub2RlKCkubm9kZU5hbWU/ZS5hdHRyKCJ4IixpKS5hdHRyKCJ5IixhKTplLmF0dHIoInRyYW5zZm9ybSIsZihpLGEpKSwhMCl9LHgudHJhbnNsYXRlUG9pbnRzPWZ1bmN0aW9uKHQsZSxyKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpO3gudHJhbnNsYXRlUG9pbnQodCxpLGUscil9KSl9LHguaGlkZU91dHNpZGVSYW5nZVBvaW50PWZ1bmN0aW9uKHQsZSxyLG4saSxhKXtlLmF0dHIoImRpc3BsYXkiLHIuaXNQdFdpdGhpblJhbmdlKHQsaSkmJm4uaXNQdFdpdGhpblJhbmdlKHQsYSk/bnVsbDoibm9uZSIpfSx4LmhpZGVPdXRzaWRlUmFuZ2VQb2ludHM9ZnVuY3Rpb24odCxlKXtpZihlLl9oYXNDbGlwT25BeGlzRmFsc2Upe3ZhciByPWUueGF4aXMsaT1lLnlheGlzO3QuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGE9ZVswXS50cmFjZSxvPWEueGNhbGVuZGFyLHM9YS55Y2FsZW5kYXIsYz1sLnRyYWNlSXMoYSwiYmFyLWxpa2UiKT8iLmJhcnRleHQiOiIucG9pbnQsLnRleHRwb2ludCI7dC5zZWxlY3RBbGwoYykuZWFjaCgoZnVuY3Rpb24odCl7eC5oaWRlT3V0c2lkZVJhbmdlUG9pbnQodCxuLnNlbGVjdCh0aGlzKSxyLGksbyxzKX0pKX0pKX19LHguY3Jpc3BSb3VuZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUmJm8oZSk/dC5fY29udGV4dC5zdGF0aWNQbG90P2U6ZTwxPzE6TWF0aC5yb3VuZChlKTpyfHwwfSx4LnNpbmdsZUxpbmVTdHlsZT1mdW5jdGlvbih0LGUscixuLGkpe2Uuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIGE9KCgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5saW5lfHx7fSxvPXJ8fGEud2lkdGh8fDAscz1pfHxhLmRhc2h8fCIiO2Muc3Ryb2tlKGUsbnx8YS5jb2xvcikseC5kYXNoTGluZShlLHMsbyl9LHgubGluZUdyb3VwU3R5bGU9ZnVuY3Rpb24odCxlLHIsaSl7dC5zdHlsZSgiZmlsbCIsIm5vbmUiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgYT0oKCh0fHxbXSlbMF18fHt9KS50cmFjZXx8e30pLmxpbmV8fHt9LG89ZXx8YS53aWR0aHx8MCxzPWl8fGEuZGFzaHx8IiI7bi5zZWxlY3QodGhpcykuY2FsbChjLnN0cm9rZSxyfHxhLmNvbG9yKS5jYWxsKHguZGFzaExpbmUscyxvKX0pKX0seC5kYXNoTGluZT1mdW5jdGlvbih0LGUscil7cj0rcnx8MCxlPXguZGFzaFN0eWxlKGUsciksdC5zdHlsZSh7InN0cm9rZS1kYXNoYXJyYXkiOmUsInN0cm9rZS13aWR0aCI6cisicHgifSl9LHguZGFzaFN0eWxlPWZ1bmN0aW9uKHQsZSl7ZT0rZXx8MTt2YXIgcj1NYXRoLm1heChlLDMpO3JldHVybiJzb2xpZCI9PT10P3Q9IiI6ImRvdCI9PT10P3Q9cisicHgsIityKyJweCI6ImRhc2giPT09dD90PTMqcisicHgsIiszKnIrInB4IjoibG9uZ2Rhc2giPT09dD90PTUqcisicHgsIis1KnIrInB4IjoiZGFzaGRvdCI9PT10P3Q9MypyKyJweCwiK3IrInB4LCIrcisicHgsIityKyJweCI6ImxvbmdkYXNoZG90Ij09PXQmJih0PTUqcisicHgsIisyKnIrInB4LCIrcisicHgsIisyKnIrInB4IiksdH0seC5zaW5nbGVGaWxsU3R5bGU9ZnVuY3Rpb24odCl7dmFyIGU9KCgobi5zZWxlY3QodC5ub2RlKCkpLmRhdGEoKVswXXx8W10pWzBdfHx7fSkudHJhY2V8fHt9KS5maWxsY29sb3I7ZSYmdC5jYWxsKGMuZmlsbCxlKX0seC5maWxsR3JvdXBTdHlsZT1mdW5jdGlvbih0KXt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLDApLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3RbMF0udHJhY2UmJmUuY2FsbChjLmZpbGwsdFswXS50cmFjZS5maWxsY29sb3IpfSkpfTt2YXIgYj10KCIuL3N5bWJvbF9kZWZzIik7eC5zeW1ib2xOYW1lcz1bXSx4LnN5bWJvbEZ1bmNzPVtdLHguc3ltYm9sTmVlZExpbmVzPXt9LHguc3ltYm9sTm9Eb3Q9e30seC5zeW1ib2xOb0ZpbGw9e30seC5zeW1ib2xMaXN0PVtdLE9iamVjdC5rZXlzKGIpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWJbdF0scj1lLm47eC5zeW1ib2xMaXN0LnB1c2gocixTdHJpbmcociksdCxyKzEwMCxTdHJpbmcocisxMDApLHQrIi1vcGVuIikseC5zeW1ib2xOYW1lc1tyXT10LHguc3ltYm9sRnVuY3Nbcl09ZS5mLGUubmVlZExpbmUmJih4LnN5bWJvbE5lZWRMaW5lc1tyXT0hMCksZS5ub0RvdD94LnN5bWJvbE5vRG90W3JdPSEwOnguc3ltYm9sTGlzdC5wdXNoKHIrMjAwLFN0cmluZyhyKzIwMCksdCsiLWRvdCIsciszMDAsU3RyaW5nKHIrMzAwKSx0KyItb3Blbi1kb3QiKSxlLm5vRmlsbCYmKHguc3ltYm9sTm9GaWxsW3JdPSEwKX0pKTt2YXIgXz14LnN5bWJvbE5hbWVzLmxlbmd0aDtmdW5jdGlvbiB3KHQsZSl7dmFyIHI9dCUxMDA7cmV0dXJuIHguc3ltYm9sRnVuY3Nbcl0oZSkrKHQ+PTIwMD8iTTAsMC41TDAuNSwwTDAsLTAuNUwtMC41LDBaIjoiIil9eC5zeW1ib2xOdW1iZXI9ZnVuY3Rpb24odCl7aWYobyh0KSl0PSt0O2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB0KXt2YXIgZT0wO3QuaW5kZXhPZigiLW9wZW4iKT4wJiYoZT0xMDAsdD10LnJlcGxhY2UoIi1vcGVuIiwiIikpLHQuaW5kZXhPZigiLWRvdCIpPjAmJihlKz0yMDAsdD10LnJlcGxhY2UoIi1kb3QiLCIiKSksKHQ9eC5zeW1ib2xOYW1lcy5pbmRleE9mKHQpKT49MCYmKHQrPWUpfXJldHVybiB0JTEwMD49X3x8dD49NDAwPzA6TWF0aC5mbG9vcihNYXRoLm1heCh0LDApKX07dmFyIFQ9e3gxOjEseDI6MCx5MTowLHkyOjB9LGs9e3gxOjAseDI6MCx5MToxLHkyOjB9LEE9YSgifmYiKSxNPXtyYWRpYWw6e25vZGU6InJhZGlhbEdyYWRpZW50In0scmFkaWFscmV2ZXJzZWQ6e25vZGU6InJhZGlhbEdyYWRpZW50IixyZXZlcnNlZDohMH0saG9yaXpvbnRhbDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlR9LGhvcml6b250YWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOlQscmV2ZXJzZWQ6ITB9LHZlcnRpY2FsOntub2RlOiJsaW5lYXJHcmFkaWVudCIsYXR0cnM6a30sdmVydGljYWxyZXZlcnNlZDp7bm9kZToibGluZWFyR3JhZGllbnQiLGF0dHJzOmsscmV2ZXJzZWQ6ITB9fTt4LmdyYWRpZW50PWZ1bmN0aW9uKHQsZSxyLGEsbyxsKXtmb3IodmFyIHU9by5sZW5ndGgsZj1NW2FdLGg9bmV3IEFycmF5KHUpLHA9MDtwPHU7cCsrKWYucmV2ZXJzZWQ/aFt1LTEtcF09W0EoMTAwKigxLW9bcF1bMF0pKSxvW3BdWzFdXTpoW3BdPVtBKDEwMCpvW3BdWzBdKSxvW3BdWzFdXTt2YXIgZD1lLl9mdWxsTGF5b3V0LG09ImciK2QuX3VpZCsiLSIrcixnPWQuX2RlZnMuc2VsZWN0KCIuZ3JhZGllbnRzIikuc2VsZWN0QWxsKCIjIittKS5kYXRhKFthK2guam9pbigiOyIpXSxpLmlkZW50aXR5KTtnLmV4aXQoKS5yZW1vdmUoKSxnLmVudGVyKCkuYXBwZW5kKGYubm9kZSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtmLmF0dHJzJiZ0LmF0dHIoZi5hdHRycyksdC5hdHRyKCJpZCIsbSk7dmFyIGU9dC5zZWxlY3RBbGwoInN0b3AiKS5kYXRhKGgpO2UuZXhpdCgpLnJlbW92ZSgpLGUuZW50ZXIoKS5hcHBlbmQoInN0b3AiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXModFsxXSk7bi5zZWxlY3QodGhpcykuYXR0cih7b2Zmc2V0OnRbMF0rIiUiLCJzdG9wLWNvbG9yIjpjLnRpbnlSR0IoZSksInN0b3Atb3BhY2l0eSI6ZS5nZXRBbHBoYSgpfSl9KSl9KSksdC5zdHlsZShsLEQobSxlKSkuc3R5bGUobCsiLW9wYWNpdHkiLG51bGwpO3ZhciB2PWZ1bmN0aW9uKHQpe3JldHVybiIuIit0LmF0dHIoImNsYXNzIikucmVwbGFjZSgvXHMvZywiLiIpfSx5PXYobi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkpKyI+Iit2KHQpO2QuX2dyYWRpZW50VXJsUXVlcnlQYXJ0c1t5XT0xfSx4LnBhdHRlcm49ZnVuY3Rpb24odCxlLHIsYSxvLHMsbCx1LGYsaCxwLGQpe3ZhciBtPSJsZWdlbmQiPT09ZTt1JiYoIm92ZXJsYXkiPT09Zj8oaD11LHA9Yy5jb250cmFzdChoKSk6KGg9dm9pZCAwLHA9dSkpO3ZhciBnLHYseSx4LGIsXyx3LFQsayxBLE0sUz1yLl9mdWxsTGF5b3V0LEU9InAiK1MuX3VpZCsiLSIrYSxMPXt9O3N3aXRjaChvKXtjYXNlIi8iOmc9cypNYXRoLnNxcnQoMiksdj1zKk1hdGguc3FydCgyKSxfPSJwYXRoIixMPXtkOnk9Ik0tIitnLzQrIiwiK3YvNCsibCIrZy8yKyIsLSIrdi8yKyJNMCwiK3YrIkwiK2crIiwwTSIrZy80KjMrIiwiK3YvNCo1KyJsIitnLzIrIiwtIit2LzIsb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOih4PWwqcykrInB4In07YnJlYWs7Y2FzZSJcXCI6Zz1zKk1hdGguc3FydCgyKSx2PXMqTWF0aC5zcXJ0KDIpLF89InBhdGgiLEw9e2Q6eT0iTSIrZy80KjMrIiwtIit2LzQrImwiK2cvMisiLCIrdi8yKyJNMCwwTCIrZysiLCIrdisiTS0iK2cvNCsiLCIrdi80KjMrImwiK2cvMisiLCIrdi8yLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UieCI6Zz1zKk1hdGguc3FydCgyKSx2PXMqTWF0aC5zcXJ0KDIpLHk9Ik0tIitnLzQrIiwiK3YvNCsibCIrZy8yKyIsLSIrdi8yKyJNMCwiK3YrIkwiK2crIiwwTSIrZy80KjMrIiwiK3YvNCo1KyJsIitnLzIrIiwtIit2LzIrIk0iK2cvNCozKyIsLSIrdi80KyJsIitnLzIrIiwiK3YvMisiTTAsMEwiK2crIiwiK3YrIk0tIitnLzQrIiwiK3YvNCozKyJsIitnLzIrIiwiK3YvMix4PXMtcypNYXRoLnNxcnQoMS1sKSxfPSJwYXRoIixMPXtkOnksb3BhY2l0eTpkLHN0cm9rZTpwLCJzdHJva2Utd2lkdGgiOngrInB4In07YnJlYWs7Y2FzZSJ8IjpfPSJwYXRoIixfPSJwYXRoIixMPXtkOnk9Ik0iKyhnPXMpLzIrIiwwTCIrZy8yKyIsIisodj1zKSxvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6KHg9bCpzKSsicHgifTticmVhaztjYXNlIi0iOl89InBhdGgiLF89InBhdGgiLEw9e2Q6eT0iTTAsIisodj1zKS8yKyJMIisoZz1zKSsiLCIrdi8yLG9wYWNpdHk6ZCxzdHJva2U6cCwic3Ryb2tlLXdpZHRoIjooeD1sKnMpKyJweCJ9O2JyZWFrO2Nhc2UiKyI6Xz0icGF0aCIseT0iTSIrKGc9cykvMisiLDBMIitnLzIrIiwiKyh2PXMpKyJNMCwiK3YvMisiTCIrZysiLCIrdi8yLHg9cy1zKk1hdGguc3FydCgxLWwpLF89InBhdGgiLEw9e2Q6eSxvcGFjaXR5OmQsc3Ryb2tlOnAsInN0cm9rZS13aWR0aCI6eCsicHgifTticmVhaztjYXNlIi4iOmc9cyx2PXMsbDxNYXRoLlBJLzQ/Yj1NYXRoLnNxcnQobCpzKnMvTWF0aC5QSSk6KHc9bCxUPU1hdGguUEkvNCxrPTEsQT1zLzIsTT1zL01hdGguc3FydCgyKSxiPUErKE0tQSkqKHctVCkvKGstVCkpLF89ImNpcmNsZSIsTD17Y3g6Zy8yLGN5OnYvMixyOmIsb3BhY2l0eTpkLGZpbGw6cH19dmFyIEM9W298fCJub1NoIixofHwibm9CZyIscHx8Im5vRmciLHMsbF0uam9pbigiOyIpLFA9Uy5fZGVmcy5zZWxlY3QoIi5wYXR0ZXJucyIpLnNlbGVjdEFsbCgiIyIrRSkuZGF0YShbQ10saS5pZGVudGl0eSk7UC5leGl0KCkucmVtb3ZlKCksUC5lbnRlcigpLmFwcGVuZCgicGF0dGVybiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7aWYodC5hdHRyKHtpZDpFLHdpZHRoOmcrInB4IixoZWlnaHQ6disicHgiLHBhdHRlcm5Vbml0czoidXNlclNwYWNlT25Vc2UiLHBhdHRlcm5UcmFuc2Zvcm06bT8ic2NhbGUoMC44KSI6IiJ9KSxoKXt2YXIgZT10LnNlbGVjdEFsbCgicmVjdCIpLmRhdGEoWzBdKTtlLmV4aXQoKS5yZW1vdmUoKSxlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cih7d2lkdGg6ZysicHgiLGhlaWdodDp2KyJweCIsZmlsbDpofSl9dmFyIHI9dC5zZWxlY3RBbGwoXykuZGF0YShbMF0pO3IuZXhpdCgpLnJlbW92ZSgpLHIuZW50ZXIoKS5hcHBlbmQoXykuYXR0cihMKX0pKSx0LnN0eWxlKCJmaWxsIixEKEUscikpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLG51bGwpLHQuY2xhc3NlZCgicGF0dGVybl9maWxsZWQiLCEwKTt2YXIgST0iLiIrbi5zZWxlY3QodC5ub2RlKCkucGFyZW50Tm9kZSkuYXR0cigiY2xhc3MiKS5yZXBsYWNlKC9ccy9nLCIuIikrIj4ucGF0dGVybl9maWxsZWQiO1MuX3BhdHRlcm5VcmxRdWVyeVBhcnRzW0ldPTF9LHguaW5pdEdyYWRpZW50cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJncmFkaWVudHMiKS5zZWxlY3RBbGwoImxpbmVhckdyYWRpZW50LHJhZGlhbEdyYWRpZW50IikucmVtb3ZlKCksZS5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzPXt9fSx4LmluaXRQYXR0ZXJucz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2kuZW5zdXJlU2luZ2xlKGUuX2RlZnMsImciLCJwYXR0ZXJucyIpLnNlbGVjdEFsbCgicGF0dGVybiIpLnJlbW92ZSgpLGUuX3BhdHRlcm5VcmxRdWVyeVBhcnRzPXt9fSx4LmdldFBhdHRlcm5BdHRyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdCYmaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U8dC5sZW5ndGg/dFtlXTpyOnR9LHgucG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBpPXgubWFrZVBvaW50U3R5bGVGbnMoZSk7dC5lYWNoKChmdW5jdGlvbih0KXt4LnNpbmdsZVBvaW50U3R5bGUodCxuLnNlbGVjdCh0aGlzKSxlLGkscil9KSl9fSx4LnNpbmdsZVBvaW50U3R5bGU9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz1yLm1hcmtlcixzPW8ubGluZTtpZihlLnN0eWxlKCJvcGFjaXR5IixuLnNlbGVjdGVkT3BhY2l0eUZuP24uc2VsZWN0ZWRPcGFjaXR5Rm4odCk6dm9pZCAwPT09dC5tbz9vLm9wYWNpdHk6dC5tbyksbi5tczJtcmMpe3ZhciBsO2w9InZhcmlvdXMiPT09dC5tc3x8InZhcmlvdXMiPT09by5zaXplPzM6bi5tczJtcmModC5tcyksdC5tcmM9bCxuLnNlbGVjdGVkU2l6ZUZuJiYobD10Lm1yYz1uLnNlbGVjdGVkU2l6ZUZuKHQpKTt2YXIgdT14LnN5bWJvbE51bWJlcih0Lm14fHxvLnN5bWJvbCl8fDA7dC5vbT11JTIwMD49MTAwLGUuYXR0cigiZCIsdyh1LGwpKX12YXIgZixoLHAsZD0hMTtpZih0LnNvKXA9cy5vdXRsaWVyd2lkdGgsaD1zLm91dGxpZXJjb2xvcixmPW8ub3V0bGllcmNvbG9yO2Vsc2V7dmFyIG09KHN8fHt9KS53aWR0aDtwPSh0Lm1sdysxfHxtKzF8fCh0LnRyYWNlPyh0LnRyYWNlLm1hcmtlci5saW5lfHx7fSkud2lkdGg6MCkrMSktMXx8MCxoPSJtbGMiaW4gdD90Lm1sY2M9bi5saW5lU2NhbGUodC5tbGMpOmkuaXNBcnJheU9yVHlwZWRBcnJheShzLmNvbG9yKT9jLmRlZmF1bHRMaW5lOnMuY29sb3IsaS5pc0FycmF5T3JUeXBlZEFycmF5KG8uY29sb3IpJiYoZj1jLmRlZmF1bHRMaW5lLGQ9ITApLGY9Im1jImluIHQ/dC5tY2M9bi5tYXJrZXJTY2FsZSh0Lm1jKTpvLmNvbG9yfHwicmdiYSgwLDAsMCwwKSIsbi5zZWxlY3RlZENvbG9yRm4mJihmPW4uc2VsZWN0ZWRDb2xvckZuKHQpKX1pZih0Lm9tKWUuY2FsbChjLnN0cm9rZSxmKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6KHB8fDEpKyJweCIsZmlsbDoibm9uZSJ9KTtlbHNle2Uuc3R5bGUoInN0cm9rZS13aWR0aCIsKHQuaXNCbGFuaz8wOnApKyJweCIpO3ZhciBnPW8uZ3JhZGllbnQsdj10Lm1ndDt2P2Q9ITA6dj1nJiZnLnR5cGUsaS5pc0FycmF5T3JUeXBlZEFycmF5KHYpJiYodj12WzBdLE1bdl18fCh2PTApKTt2YXIgeT1vLnBhdHRlcm4sYj15JiZ4LmdldFBhdHRlcm5BdHRyKHkuc2hhcGUsdC5pLCIiKTtpZih2JiYibm9uZSIhPT12KXt2YXIgXz10Lm1nYztfP2Q9ITA6Xz1nLmNvbG9yO3ZhciBUPXIudWlkO2QmJihUKz0iLSIrdC5pKSx4LmdyYWRpZW50KGUsYSxULHYsW1swLF9dLFsxLGZdXSwiZmlsbCIpfWVsc2UgaWYoYil7dmFyIGs9eC5nZXRQYXR0ZXJuQXR0cih5LmJnY29sb3IsdC5pLG51bGwpLEE9eC5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsdC5pLG51bGwpLFM9eS5mZ29wYWNpdHksRT14LmdldFBhdHRlcm5BdHRyKHkuc2l6ZSx0LmksOCksTD14LmdldFBhdHRlcm5BdHRyKHkuc29saWRpdHksdC5pLC4zKSxDPXQubWNjfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaGFwZSl8fGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LmJnY29sb3IpfHxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5zaXplKXx8aS5pc0FycmF5T3JUeXBlZEFycmF5KHkuc29saWRpdHkpLFA9ci51aWQ7QyYmKFArPSItIit0LmkpLHgucGF0dGVybihlLCJwb2ludCIsYSxQLGIsRSxMLHQubWNjLHkuZmlsbG1vZGUsayxBLFMpfWVsc2UgYy5maWxsKGUsZik7cCYmYy5zdHJva2UoZSxoKX19LHgubWFrZVBvaW50U3R5bGVGbnM9ZnVuY3Rpb24odCl7dmFyIGU9e30scj10Lm1hcmtlcjtyZXR1cm4gZS5tYXJrZXJTY2FsZT14LnRyeUNvbG9yc2NhbGUociwiIiksZS5saW5lU2NhbGU9eC50cnlDb2xvcnNjYWxlKHIsImxpbmUiKSxsLnRyYWNlSXModCwic3ltYm9scyIpJiYoZS5tczJtcmM9Zy5pc0J1YmJsZSh0KT92KHQpOmZ1bmN0aW9uKCl7cmV0dXJuKHIuc2l6ZXx8NikvMn0pLHQuc2VsZWN0ZWRwb2ludHMmJmkuZXh0ZW5kRmxhdChlLHgubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh0KSksZX0seC5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGE9dC5tYXJrZXJ8fHt9LG89ci5tYXJrZXJ8fHt9LHM9bi5tYXJrZXJ8fHt9LGM9YS5vcGFjaXR5LHU9by5vcGFjaXR5LGY9cy5vcGFjaXR5LGg9dm9pZCAwIT09dSxwPXZvaWQgMCE9PWY7KGkuaXNBcnJheU9yVHlwZWRBcnJheShjKXx8aHx8cCkmJihlLnNlbGVjdGVkT3BhY2l0eUZuPWZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQubW8/YS5vcGFjaXR5OnQubW87cmV0dXJuIHQuc2VsZWN0ZWQ/aD91OmU6cD9mOm0qZX0pO3ZhciBkPWEuY29sb3IsZz1vLmNvbG9yLHY9cy5jb2xvcjsoZ3x8dikmJihlLnNlbGVjdGVkQ29sb3JGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1jY3x8ZDtyZXR1cm4gdC5zZWxlY3RlZD9nfHxlOnZ8fGV9KTt2YXIgeT1hLnNpemUseD1vLnNpemUsYj1zLnNpemUsXz12b2lkIDAhPT14LHc9dm9pZCAwIT09YjtyZXR1cm4gbC50cmFjZUlzKHQsInN5bWJvbHMiKSYmKF98fHcpJiYoZS5zZWxlY3RlZFNpemVGbj1mdW5jdGlvbih0KXt2YXIgZT10Lm1yY3x8eS8yO3JldHVybiB0LnNlbGVjdGVkP18/eC8yOmU6dz9iLzI6ZX0pLGV9LHgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zPWZ1bmN0aW9uKHQpe3ZhciBlPXt9LHI9dC5zZWxlY3RlZHx8e30sbj10LnVuc2VsZWN0ZWR8fHt9LGk9dC50ZXh0Zm9udHx8e30sYT1yLnRleHRmb250fHx7fSxvPW4udGV4dGZvbnR8fHt9LHM9aS5jb2xvcixsPWEuY29sb3IsdT1vLmNvbG9yO3JldHVybiBlLnNlbGVjdGVkVGV4dENvbG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9dC50Y3x8cztyZXR1cm4gdC5zZWxlY3RlZD9sfHxlOnV8fChsP2U6Yy5hZGRPcGFjaXR5KGUsbSkpfSxlfSx4LnNlbGVjdGVkUG9pbnRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj14Lm1ha2VTZWxlY3RlZFBvaW50U3R5bGVGbnMoZSksaT1lLm1hcmtlcnx8e30sYT1bXTtyLnNlbGVjdGVkT3BhY2l0eUZuJiZhLnB1c2goKGZ1bmN0aW9uKHQsZSl7dC5zdHlsZSgib3BhY2l0eSIsci5zZWxlY3RlZE9wYWNpdHlGbihlKSl9KSksci5zZWxlY3RlZENvbG9yRm4mJmEucHVzaCgoZnVuY3Rpb24odCxlKXtjLmZpbGwodCxyLnNlbGVjdGVkQ29sb3JGbihlKSl9KSksci5zZWxlY3RlZFNpemVGbiYmYS5wdXNoKChmdW5jdGlvbih0LGUpe3ZhciBuPWUubXh8fGkuc3ltYm9sfHwwLGE9ci5zZWxlY3RlZFNpemVGbihlKTt0LmF0dHIoImQiLHcoeC5zeW1ib2xOdW1iZXIobiksYSkpLGUubXJjMj1hfSkpLGEubGVuZ3RoJiZ0LmVhY2goKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPTA7cjxhLmxlbmd0aDtyKyspYVtyXShlLHQpfSkpfX0seC50cnlDb2xvcnNjYWxlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT9pLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk6dDtpZihyKXt2YXIgbj1yLmNvbG9yO2lmKChyLmNvbG9yc2NhbGV8fHIuX2NvbG9yQXgpJiZpLmlzQXJyYXlPclR5cGVkQXJyYXkobikpcmV0dXJuIHUubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpfXJldHVybiBpLmlkZW50aXR5fTt2YXIgUz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjAsYm90dG9tOjEsdG9wOi0xfTtmdW5jdGlvbiBFKHQsZSxyLGkpe3ZhciBhPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLG89LTEhPT1lLmluZGV4T2YoInRvcCIpPyJ0b3AiOi0xIT09ZS5pbmRleE9mKCJib3R0b20iKT8iYm90dG9tIjoibWlkZGxlIixzPS0xIT09ZS5pbmRleE9mKCJsZWZ0Iik/ImVuZCI6LTEhPT1lLmluZGV4T2YoInJpZ2h0Iik/InN0YXJ0IjoibWlkZGxlIixsPWk/aS8uOCsxOjAsYz0oaC5saW5lQ291bnQodCktMSkqZCsxLHU9U1tzXSpsLHA9Ljc1KnIrU1tvXSpsKyhTW29dLTEpKmMqci8yO3QuYXR0cigidGV4dC1hbmNob3IiLHMpLGEuYXR0cigidHJhbnNmb3JtIixmKHUscCkpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj10LnRzfHxlLnRleHRmb250LnNpemU7cmV0dXJuIG8ocikmJnI+MD9yOjB9eC50ZXh0UG9pbnRTdHlsZT1mdW5jdGlvbih0LGUscil7aWYodC5zaXplKCkpe3ZhciBhO2lmKGUuc2VsZWN0ZWRwb2ludHMpe3ZhciBvPXgubWFrZVNlbGVjdGVkVGV4dFN0eWxlRm5zKGUpO2E9by5zZWxlY3RlZFRleHRDb2xvckZufXZhciBzPWUudGV4dHRlbXBsYXRlLGw9ci5fZnVsbExheW91dDt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLGM9cz9pLmV4dHJhY3RPcHRpb24odCxlLCJ0eHQiLCJ0ZXh0dGVtcGxhdGUiKTppLmV4dHJhY3RPcHRpb24odCxlLCJ0eCIsInRleHQiKTtpZihjfHwwPT09Yyl7aWYocyl7dmFyIHU9ZS5fbW9kdWxlLmZvcm1hdExhYmVscyxmPXU/dSh0LGUsbCk6e30scD17fTt5KHAsZSx0LmkpO3ZhciBkPWUuX21ldGF8fHt9O2M9aS50ZXh0dGVtcGxhdGVTdHJpbmcoYyxmLGwuX2QzbG9jYWxlLHAsdCxkKX12YXIgbT10LnRwfHxlLnRleHRwb3NpdGlvbixnPUwodCxlKSx2PWE/YSh0KTp0LnRjfHxlLnRleHRmb250LmNvbG9yO28uY2FsbCh4LmZvbnQsdC50Znx8ZS50ZXh0Zm9udC5mYW1pbHksZyx2KS50ZXh0KGMpLmNhbGwoaC5jb252ZXJ0VG9Uc3BhbnMscikuY2FsbChFLG0sZyx0Lm1yYyl9ZWxzZSBvLnJlbW92ZSgpfSkpfX0seC5zZWxlY3RlZFRleHRTdHlsZT1mdW5jdGlvbih0LGUpe2lmKHQuc2l6ZSgpJiZlLnNlbGVjdGVkcG9pbnRzKXt2YXIgcj14Lm1ha2VTZWxlY3RlZFRleHRTdHlsZUZucyhlKTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9ci5zZWxlY3RlZFRleHRDb2xvckZuKHQpLG89dC50cHx8ZS50ZXh0cG9zaXRpb24scz1MKHQsZSk7Yy5maWxsKGksYSksRShpLG8scyx0Lm1yYzJ8fHQubXJjKX0pKX19O2Z1bmN0aW9uIEModCxlLHIsaSl7dmFyIGE9dFswXS1lWzBdLG89dFsxXS1lWzFdLHM9clswXS1lWzBdLGw9clsxXS1lWzFdLGM9TWF0aC5wb3coYSphK28qbywuMjUpLHU9TWF0aC5wb3cocypzK2wqbCwuMjUpLGY9KHUqdSphLWMqYypzKSppLGg9KHUqdSpvLWMqYypsKSppLHA9Myp1KihjK3UpLGQ9MypjKihjK3UpO3JldHVybltbbi5yb3VuZChlWzBdKyhwJiZmL3ApLDIpLG4ucm91bmQoZVsxXSsocCYmaC9wKSwyKV0sW24ucm91bmQoZVswXS0oZCYmZi9kKSwyKSxuLnJvdW5kKGVbMV0tKGQmJmgvZCksMildXX14LnNtb290aG9wZW49ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aDwzKXJldHVybiJNIit0LmpvaW4oIkwiKTt2YXIgcixuPSJNIit0WzBdLGk9W107Zm9yKHI9MTtyPHQubGVuZ3RoLTE7cisrKWkucHVzaChDKHRbci0xXSx0W3JdLHRbcisxXSxlKSk7Zm9yKG4rPSJRIitpWzBdWzBdKyIgIit0WzFdLHI9MjtyPHQubGVuZ3RoLTE7cisrKW4rPSJDIitpW3ItMl1bMV0rIiAiK2lbci0xXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IlEiK2lbdC5sZW5ndGgtM11bMV0rIiAiK3RbdC5sZW5ndGgtMV19LHguc21vb3RoY2xvc2VkPWZ1bmN0aW9uKHQsZSl7aWYodC5sZW5ndGg8MylyZXR1cm4iTSIrdC5qb2luKCJMIikrIloiO3ZhciByLG49Ik0iK3RbMF0saT10Lmxlbmd0aC0xLGE9W0ModFtpXSx0WzBdLHRbMV0sZSldO2ZvcihyPTE7cjxpO3IrKylhLnB1c2goQyh0W3ItMV0sdFtyXSx0W3IrMV0sZSkpO2ZvcihhLnB1c2goQyh0W2ktMV0sdFtpXSx0WzBdLGUpKSxyPTE7cjw9aTtyKyspbis9IkMiK2Fbci0xXVsxXSsiICIrYVtyXVswXSsiICIrdFtyXTtyZXR1cm4gbis9IkMiK2FbaV1bMV0rIiAiK2FbMF1bMF0rIiAiK3RbMF0rIloifTt2YXIgUD17aHY6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9LHZoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoZVsxXSwyKSsiSCIrbi5yb3VuZChlWzBdLDIpfSxodmg6ZnVuY3Rpb24odCxlKXtyZXR1cm4iSCIrbi5yb3VuZCgodFswXStlWzBdKS8yLDIpKyJWIituLnJvdW5kKGVbMV0sMikrIkgiK24ucm91bmQoZVswXSwyKX0sdmh2OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIlYiK24ucm91bmQoKHRbMV0rZVsxXSkvMiwyKSsiSCIrbi5yb3VuZChlWzBdLDIpKyJWIituLnJvdW5kKGVbMV0sMil9fSxJPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIkwiK24ucm91bmQoZVswXSwyKSsiLCIrbi5yb3VuZChlWzFdLDIpfTt4LnN0ZXBzPWZ1bmN0aW9uKHQpe3ZhciBlPVBbdF18fEk7cmV0dXJuIGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0iTSIrbi5yb3VuZCh0WzBdWzBdLDIpKyIsIituLnJvdW5kKHRbMF1bMV0sMiksaT0xO2k8dC5sZW5ndGg7aSsrKXIrPWUodFtpLTFdLHRbaV0pO3JldHVybiByfX0seC5tYWtlVGVzdGVyPWZ1bmN0aW9uKCl7dmFyIHQ9aS5lbnN1cmVTaW5nbGVCeUlkKG4uc2VsZWN0KCJib2R5IiksInN2ZyIsImpzLXBsb3RseS10ZXN0ZXIiLChmdW5jdGlvbih0KXt0LmF0dHIocC5zdmdBdHRycykuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDAwcHgiLHRvcDoiLTEwMDAwcHgiLHdpZHRoOiI5MDAwcHgiLGhlaWdodDoiOTAwMHB4Iiwiei1pbmRleCI6IjEifSl9KSksZT1pLmVuc3VyZVNpbmdsZSh0LCJwYXRoIiwianMtcmVmZXJlbmNlLXBvaW50IiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkIiwiTTAsMEgxVjFIMFoiKS5zdHlsZSh7InN0cm9rZS13aWR0aCI6MCxmaWxsOiJibGFjayJ9KX0pKTt4LnRlc3Rlcj10LHgudGVzdHJlZj1lfSx4LnNhdmVkQkJveGVzPXt9O3ZhciBPPTA7ZnVuY3Rpb24geih0KXt2YXIgZT10LmdldEF0dHJpYnV0ZSgiZGF0YS11bmZvcm1hdHRlZCIpO2lmKG51bGwhPT1lKXJldHVybiBlK3QuZ2V0QXR0cmlidXRlKCJkYXRhLW1hdGgiKSt0LmdldEF0dHJpYnV0ZSgidGV4dC1hbmNob3IiKSt0LmdldEF0dHJpYnV0ZSgic3R5bGUiKX1mdW5jdGlvbiBEKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9ZS5fY29udGV4dCxuPXIuX2V4cG9ydGVkUGxvdD8iIjpyLl9iYXNlVXJsfHwiIjtyZXR1cm4gbj8idXJsKCciK24rIiMiK3QrIicpIjoidXJsKCMiK3QrIikifXguYkJveD1mdW5jdGlvbih0LGUscil7dmFyIGEsbyxzO2lmKHJ8fChyPXoodCkpLHIpe2lmKGE9eC5zYXZlZEJCb3hlc1tyXSlyZXR1cm4gaS5leHRlbmRGbGF0KHt9LGEpfWVsc2UgaWYoMT09PXQuY2hpbGROb2Rlcy5sZW5ndGgpe3ZhciBsPXQuY2hpbGROb2Rlc1swXTtpZihyPXoobCkpe3ZhciBjPStsLmdldEF0dHJpYnV0ZSgieCIpfHwwLHU9K2wuZ2V0QXR0cmlidXRlKCJ5Iil8fDAsZj1sLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7aWYoIWYpe3ZhciBwPXguYkJveChsLCExLHIpO3JldHVybiBjJiYocC5sZWZ0Kz1jLHAucmlnaHQrPWMpLHUmJihwLnRvcCs9dSxwLmJvdHRvbSs9dSkscH1pZihyKz0ifiIrYysifiIrdSsifiIrZixhPXguc2F2ZWRCQm94ZXNbcl0pcmV0dXJuIGkuZXh0ZW5kRmxhdCh7fSxhKX19ZT9vPXQ6KHM9eC50ZXN0ZXIubm9kZSgpLG89dC5jbG9uZU5vZGUoITApLHMuYXBwZW5kQ2hpbGQobykpLG4uc2VsZWN0KG8pLmF0dHIoInRyYW5zZm9ybSIsbnVsbCkuY2FsbChoLnBvc2l0aW9uVGV4dCwwLDApO3ZhciBkPW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT14LnRlc3RyZWYubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V8fHMucmVtb3ZlQ2hpbGQobyk7dmFyIGc9e2hlaWdodDpkLmhlaWdodCx3aWR0aDpkLndpZHRoLGxlZnQ6ZC5sZWZ0LW0ubGVmdCx0b3A6ZC50b3AtbS50b3AscmlnaHQ6ZC5yaWdodC1tLmxlZnQsYm90dG9tOmQuYm90dG9tLW0udG9wfTtyZXR1cm4gTz49MWU0JiYoeC5zYXZlZEJCb3hlcz17fSxPPTApLHImJih4LnNhdmVkQkJveGVzW3JdPWcpLE8rKyxpLmV4dGVuZEZsYXQoe30sZyl9LHguc2V0Q2xpcFVybD1mdW5jdGlvbih0LGUscil7dC5hdHRyKCJjbGlwLXBhdGgiLEQoZSxyKSl9LHguZ2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0W3QuYXR0cj8iYXR0ciI6ImdldEF0dHJpYnV0ZSJdKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoLy4qXGJ0cmFuc2xhdGVcKCgtP1xkKlwuP1xkKilbXi1cZF0qKC0/XGQqXC4/XGQqKVteXGRdLiovLChmdW5jdGlvbih0LGUscil7cmV0dXJuW2Uscl0uam9pbigiICIpfSkpLnNwbGl0KCIgIik7cmV0dXJue3g6K2VbMF18fDAseTorZVsxXXx8MH19LHguc2V0VHJhbnNsYXRlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmF0dHI/ImF0dHIiOiJnZXRBdHRyaWJ1dGUiLGk9dC5hdHRyPyJhdHRyIjoic2V0QXR0cmlidXRlIixhPXRbbl0oInRyYW5zZm9ybSIpfHwiIjtyZXR1cm4gZT1lfHwwLHI9cnx8MCxhPWEucmVwbGFjZSgvKFxidHJhbnNsYXRlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz1mKGUscikpLnRyaW0oKSx0W2ldKCJ0cmFuc2Zvcm0iLGEpLGF9LHguZ2V0U2NhbGU9ZnVuY3Rpb24odCl7dmFyIGU9KHRbdC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIl0oInRyYW5zZm9ybSIpfHwiIikucmVwbGFjZSgvLipcYnNjYWxlXCgoXGQqXC4/XGQqKVteXGRdKihcZCpcLj9cZCopW15cZF0uKi8sKGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZSxyXS5qb2luKCIgIil9KSkuc3BsaXQoIiAiKTtyZXR1cm57eDorZVswXXx8MSx5OitlWzFdfHwxfX0seC5zZXRTY2FsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5hdHRyPyJhdHRyIjoiZ2V0QXR0cmlidXRlIixpPXQuYXR0cj8iYXR0ciI6InNldEF0dHJpYnV0ZSIsYT10W25dKCJ0cmFuc2Zvcm0iKXx8IiI7cmV0dXJuIGU9ZXx8MSxyPXJ8fDEsYT1hLnJlcGxhY2UoLyhcYnNjYWxlXCguKj9cKTs/KS8sIiIpLnRyaW0oKSxhPShhKz0ic2NhbGUoIitlKyIsIityKyIpIikudHJpbSgpLHRbaV0oInRyYW5zZm9ybSIsYSksYX07dmFyIFI9L1xzKnNjLiovO3guc2V0UG9pbnRHcm91cFNjYWxlPWZ1bmN0aW9uKHQsZSxyKXtpZihlPWV8fDEscj1yfHwxLHQpe3ZhciBuPTE9PT1lJiYxPT09cj8iIjoic2NhbGUoIitlKyIsIityKyIpIjt0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9KHRoaXMuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKXx8IiIpLnJlcGxhY2UoUiwiIik7dD0odCs9bikudHJpbSgpLHRoaXMuc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLHQpfSkpfX07dmFyIEY9L3RyYW5zbGF0ZVwoW14pXSpcKVxzKiQvO3guc2V0VGV4dFBvaW50c1NjYWxlPWZ1bmN0aW9uKHQsZSxyKXt0JiZ0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQsaT1uLnNlbGVjdCh0aGlzKSxhPWkuc2VsZWN0KCJ0ZXh0Iik7aWYoYS5ub2RlKCkpe3ZhciBvPXBhcnNlRmxvYXQoYS5hdHRyKCJ4Iil8fDApLHM9cGFyc2VGbG9hdChhLmF0dHIoInkiKXx8MCksbD0oaS5hdHRyKCJ0cmFuc2Zvcm0iKXx8IiIpLm1hdGNoKEYpO3Q9MT09PWUmJjE9PT1yP1tdOltmKG8scyksInNjYWxlKCIrZSsiLCIrcisiKSIsZigtbywtcyldLGwmJnQucHVzaChsKSxpLmF0dHIoInRyYW5zZm9ybSIsdC5qb2luKCIiKSl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvbWFrZV9idWJibGVfc2l6ZV9mdW5jIjoxMjA4LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZSI6NjUxLCIuL3N5bWJvbF9kZWZzIjo2NjIsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9e2NpcmNsZTp7bjowLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsMEEiK2UrIiwiK2UrIiAwIDEsMSAwLC0iK2UrIkEiK2UrIiwiK2UrIiAwIDAsMSAiK2UrIiwwWiJ9fSxzcXVhcmU6e246MSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn19LGRpYW1vbmQ6e246MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaIn19LGNyb3NzOntuOjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC40KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIityKyIsIitlKyJIIitlKyJWIityKyJILSIrZSsiViIrZSsiSC0iK3IrIlYtIitlKyJILSIrZSsiVi0iK3IrIkgiK2UrIlYtIitlKyJIIityKyJaIn19LHg6e246NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjgqdC9NYXRoLnNxcnQoMiksMikscj0ibCIrZSsiLCIrZSxpPSJsIitlKyIsLSIrZSxhPSJsLSIrZSsiLC0iK2Usbz0ibC0iK2UrIiwiK2U7cmV0dXJuIk0wLCIrZStyK2krYStpK2ErbythK28rcitvK3IrIloifX0sInRyaWFuZ2xlLXVwIjp7bjo1LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQvTWF0aC5zcXJ0KDMpLDIpO3JldHVybiJNLSIrZSsiLCIrbi5yb3VuZCh0LzIsMikrIkgiK2UrIkwwLC0iK24ucm91bmQodCwyKSsiWiJ9fSwidHJpYW5nbGUtZG93biI6e246NixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK2UrIiwtIituLnJvdW5kKHQvMiwyKSsiSCIrZSsiTDAsIituLnJvdW5kKHQsMikrIloifX0sInRyaWFuZ2xlLWxlZnQiOntuOjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdC9NYXRoLnNxcnQoMyksMik7cmV0dXJuIk0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTC0iK24ucm91bmQodCwyKSsiLDBaIn19LCJ0cmlhbmdsZS1yaWdodCI6e246OCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0L01hdGguc3FydCgzKSwyKTtyZXR1cm4iTS0iK24ucm91bmQodC8yLDIpKyIsLSIrZSsiViIrZSsiTCIrbi5yb3VuZCh0LDIpKyIsMFoifX0sInRyaWFuZ2xlLW5lIjp7bjo5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK3IrIiwtIitlKyJIIitlKyJWIityKyJaIn19LCJ0cmlhbmdsZS1zZSI6e246MTAsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC42KnQsMikscj1uLnJvdW5kKDEuMip0LDIpO3JldHVybiJNIitlKyIsLSIrcisiViIrZSsiSC0iK3IrIloifX0sInRyaWFuZ2xlLXN3Ijp7bjoxMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjYqdCwyKSxyPW4ucm91bmQoMS4yKnQsMik7cmV0dXJuIk0iK3IrIiwiK2UrIkgtIitlKyJWLSIrcisiWiJ9fSwidHJpYW5nbGUtbnciOntuOjEyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguNip0LDIpLHI9bi5yb3VuZCgxLjIqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK3IrIlYtIitlKyJIIityKyJaIn19LHBlbnRhZ29uOntuOjEzLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCguOTUxKnQsMikscj1uLnJvdW5kKC41ODgqdCwyKSxpPW4ucm91bmQoLXQsMiksYT1uLnJvdW5kKC0uMzA5KnQsMik7cmV0dXJuIk0iK2UrIiwiK2ErIkwiK3IrIiwiK24ucm91bmQoLjgwOSp0LDIpKyJILSIrcisiTC0iK2UrIiwiK2ErIkwwLCIraSsiWiJ9fSxoZXhhZ29uOntuOjE0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpLHI9bi5yb3VuZCh0LzIsMiksaT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpLzIsMik7cmV0dXJuIk0iK2krIiwtIityKyJWIityKyJMMCwiK2UrIkwtIitpKyIsIityKyJWLSIrcisiTDAsLSIrZSsiWiJ9fSxoZXhhZ29uMjp7bjoxNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKSxyPW4ucm91bmQodC8yLDIpLGk9bi5yb3VuZCh0Kk1hdGguc3FydCgzKS8yLDIpO3JldHVybiJNLSIrcisiLCIraSsiSCIrcisiTCIrZSsiLDBMIityKyIsLSIraSsiSC0iK3IrIkwtIitlKyIsMFoifX0sb2N0YWdvbjp7bjoxNixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjkyNCp0LDIpLHI9bi5yb3VuZCguMzgzKnQsMik7cmV0dXJuIk0tIityKyIsLSIrZSsiSCIrcisiTCIrZSsiLC0iK3IrIlYiK3IrIkwiK3IrIiwiK2UrIkgtIityKyJMLSIrZSsiLCIrcisiVi0iK3IrIloifX0sc3Rhcjp7bjoxNyxmOmZ1bmN0aW9uKHQpe3ZhciBlPTEuNCp0LHI9bi5yb3VuZCguMjI1KmUsMiksaT1uLnJvdW5kKC45NTEqZSwyKSxhPW4ucm91bmQoLjM2MyplLDIpLG89bi5yb3VuZCguNTg4KmUsMikscz1uLnJvdW5kKC1lLDIpLGw9bi5yb3VuZCgtLjMwOSplLDIpLGM9bi5yb3VuZCguMTE4KmUsMiksdT1uLnJvdW5kKC44MDkqZSwyKTtyZXR1cm4iTSIrcisiLCIrbCsiSCIraSsiTCIrYSsiLCIrYysiTCIrbysiLCIrdSsiTDAsIituLnJvdW5kKC4zODIqZSwyKSsiTC0iK28rIiwiK3UrIkwtIithKyIsIitjKyJMLSIraSsiLCIrbCsiSC0iK3IrIkwwLCIrcysiWiJ9fSxoZXhhZ3JhbTp7bjoxOCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoLjY2KnQsMikscj1uLnJvdW5kKC4zOCp0LDIpLGk9bi5yb3VuZCguNzYqdCwyKTtyZXR1cm4iTS0iK2krIiwwbC0iK3IrIiwtIitlKyJoIitpKyJsIityKyIsLSIrZSsibCIrcisiLCIrZSsiaCIraSsibC0iK3IrIiwiK2UrImwiK3IrIiwiK2UrImgtIitpKyJsLSIrcisiLCIrZSsibC0iK3IrIiwtIitlKyJoLSIraSsiWiJ9fSwic3Rhci10cmlhbmdsZS11cCI6e246MTksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQqTWF0aC5zcXJ0KDMpKi44LDIpLHI9bi5yb3VuZCguOCp0LDIpLGk9bi5yb3VuZCgxLjYqdCwyKSxhPW4ucm91bmQoNCp0LDIpLG89IkEgIithKyIsIithKyIgMCAwIDEgIjtyZXR1cm4iTS0iK2UrIiwiK3IrbytlKyIsIityK28rIjAsLSIraStvKyItIitlKyIsIityKyJaIn19LCJzdGFyLXRyaWFuZ2xlLWRvd24iOntuOjIwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0Kk1hdGguc3FydCgzKSouOCwyKSxyPW4ucm91bmQoLjgqdCwyKSxpPW4ucm91bmQoMS42KnQsMiksYT1uLnJvdW5kKDQqdCwyKSxvPSJBICIrYSsiLCIrYSsiIDAgMCAxICI7cmV0dXJuIk0iK2UrIiwtIityK28rIi0iK2UrIiwtIityK28rIjAsIitpK28rZSsiLC0iK3IrIloifX0sInN0YXItc3F1YXJlIjp7bjoyMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4xKnQsMikscj1uLnJvdW5kKDIqdCwyKSxpPSJBICIrcisiLCIrcisiIDAgMCAxICI7cmV0dXJuIk0tIitlKyIsLSIrZStpKyItIitlKyIsIitlK2krZSsiLCIrZStpK2UrIiwtIitlK2krIi0iK2UrIiwtIitlKyJaIn19LCJzdGFyLWRpYW1vbmQiOntuOjIyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKSxyPW4ucm91bmQoMS45KnQsMiksaT0iQSAiK3IrIiwiK3IrIiAwIDAgMSAiO3JldHVybiJNLSIrZSsiLDAiK2krIjAsIitlK2krZSsiLDAiK2krIjAsLSIrZStpKyItIitlKyIsMFoifX0sImRpYW1vbmQtdGFsbCI6e246MjMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKC43KnQsMikscj1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK3IrIkwiK2UrIiwwTDAsLSIrcisiTC0iK2UrIiwwWiJ9fSwiZGlhbW9uZC13aWRlIjp7bjoyNCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS40KnQsMikscj1uLnJvdW5kKC43KnQsMik7cmV0dXJuIk0wLCIrcisiTCIrZSsiLDBMMCwtIityKyJMLSIrZSsiLDBaIn19LGhvdXJnbGFzczp7bjoyNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiSC0iK2UrIkwiK2UrIiwtIitlKyJILSIrZSsiWiJ9LG5vRG90OiEwfSxib3d0aWU6e246MjYsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK2UrIlYtIitlKyJMLSIrZSsiLCIrZSsiVi0iK2UrIloifSxub0RvdDohMH0sImNpcmNsZS1jcm9zcyI6e246MjcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwwQSIrZSsiLCIrZSsiIDAgMSwxIDAsLSIrZSsiQSIrZSsiLCIrZSsiIDAgMCwxICIrZSsiLDBaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJjaXJjbGUteCI6e246MjgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMikscj1uLnJvdW5kKHQvTWF0aC5zcXJ0KDIpLDIpO3JldHVybiJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcisiTSIrZSsiLDBBIitlKyIsIitlKyIgMCAxLDEgMCwtIitlKyJBIitlKyIsIitlKyIgMCAwLDEgIitlKyIsMFoifSxuZWVkTGluZTohMCxub0RvdDohMH0sInNxdWFyZS1jcm9zcyI6e246MjksZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLCIrZSsiVi0iK2UrIk0iK2UrIiwwSC0iK2UrIk0iK2UrIiwiK2UrIkgtIitlKyJWLSIrZSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwic3F1YXJlLXgiOntuOjMwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZSsiTSIrZSsiLCIrZSsiSC0iK2UrIlYtIitlKyJIIitlKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLWNyb3NzIjp7bjozMSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4zKnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTTAsLSIrZSsiViIrZSsiTS0iK2UrIiwwSCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9LCJkaWFtb25kLXgiOntuOjMyLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjMqdCwyKSxyPW4ucm91bmQoLjY1KnQsMik7cmV0dXJuIk0iK2UrIiwwTDAsIitlKyJMLSIrZSsiLDBMMCwtIitlKyJaTS0iK3IrIiwtIityKyJMIityKyIsIityKyJNLSIrcisiLCIrcisiTCIrcisiLC0iK3J9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiY3Jvc3MtdGhpbiI6e246MzMsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ4LXRoaW4iOntuOjM0LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNIitlKyIsIitlKyJMLSIrZSsiLC0iK2UrIk0iK2UrIiwtIitlKyJMLSIrZSsiLCIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxhc3Rlcmlzazp7bjozNSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKC44NSp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlKyJNIitlKyIsMEgtIitlKyJNIityKyIsIityKyJMLSIrcisiLC0iK3IrIk0iK3IrIiwtIityKyJMLSIrcisiLCIrcn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSxoYXNoOntuOjM2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LzIsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0iK2UrIiwiK3IrIlYtIityKyJtLSIrcisiLDBWIityKyJNIityKyIsIitlKyJILSIrcisibTAsLSIrcisiSCIrcn0sbmVlZExpbmU6ITAsbm9GaWxsOiEwfSwieS11cCI6e246MzcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwiK2krIkwwLDBNIitlKyIsIitpKyJMMCwwTTAsLSIrcisiTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sInktZG93biI6e246MzgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuMip0LDIpLHI9bi5yb3VuZCgxLjYqdCwyKSxpPW4ucm91bmQoLjgqdCwyKTtyZXR1cm4iTS0iK2UrIiwtIitpKyJMMCwwTSIrZSsiLC0iK2krIkwwLDBNMCwiK3IrIkwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LWxlZnQiOntuOjM5LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjIqdCwyKSxyPW4ucm91bmQoMS42KnQsMiksaT1uLnJvdW5kKC44KnQsMik7cmV0dXJuIk0iK2krIiwiK2UrIkwwLDBNIitpKyIsLSIrZSsiTDAsME0tIityKyIsMEwwLDAifSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJ5LXJpZ2h0Ijp7bjo0MCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMS4yKnQsMikscj1uLnJvdW5kKDEuNip0LDIpLGk9bi5yb3VuZCguOCp0LDIpO3JldHVybiJNLSIraSsiLCIrZSsiTDAsME0tIitpKyIsLSIrZSsiTDAsME0iK3IrIiwwTDAsMCJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwLG5vRmlsbDohMH0sImxpbmUtZXciOntuOjQxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgxLjQqdCwyKTtyZXR1cm4iTSIrZSsiLDBILSIrZX0sbmVlZExpbmU6ITAsbm9Eb3Q6ITAsbm9GaWxsOiEwfSwibGluZS1ucyI6e246NDIsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDEuNCp0LDIpO3JldHVybiJNMCwiK2UrIlYtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW5lIjp7bjo0MyxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLC0iK2UrIkwtIitlKyIsIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJsaW5lLW53Ijp7bjo0NCxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTSIrZSsiLCIrZSsiTC0iK2UrIiwtIitlfSxuZWVkTGluZTohMCxub0RvdDohMCxub0ZpbGw6ITB9LCJhcnJvdy11cCI6e246NDUsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLDBMLSIrZSsiLCIrbi5yb3VuZCgyKnQsMikrIkgiK2UrIloifSxub0RvdDohMH0sImFycm93LWRvd24iOntuOjQ2LGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwwTC0iK2UrIiwtIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5vRG90OiEwfSwiYXJyb3ctbGVmdCI6e246NDcsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwiK2UrIiwtIityKyJWIityKyJaIn0sbm9Eb3Q6ITB9LCJhcnJvdy1yaWdodCI6e246NDgsZjpmdW5jdGlvbih0KXt2YXIgZT1uLnJvdW5kKDIqdCwyKSxyPW4ucm91bmQodCwyKTtyZXR1cm4iTTAsMEwtIitlKyIsLSIrcisiViIrcisiWiJ9LG5vRG90OiEwfSwiYXJyb3ctYmFyLXVwIjp7bjo0OSxmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQodCwyKTtyZXR1cm4iTS0iK2UrIiwwSCIrZSsiTTAsMEwtIitlKyIsIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLWRvd24iOntuOjUwLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCh0LDIpO3JldHVybiJNLSIrZSsiLDBIIitlKyJNMCwwTC0iK2UrIiwtIituLnJvdW5kKDIqdCwyKSsiSCIrZSsiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLWxlZnQiOntuOjUxLGY6ZnVuY3Rpb24odCl7dmFyIGU9bi5yb3VuZCgyKnQsMikscj1uLnJvdW5kKHQsMik7cmV0dXJuIk0wLC0iK3IrIlYiK3IrIk0wLDBMIitlKyIsLSIrcisiViIrcisiWiJ9LG5lZWRMaW5lOiEwLG5vRG90OiEwfSwiYXJyb3ctYmFyLXJpZ2h0Ijp7bjo1MixmOmZ1bmN0aW9uKHQpe3ZhciBlPW4ucm91bmQoMip0LDIpLHI9bi5yb3VuZCh0LDIpO3JldHVybiJNMCwtIityKyJWIityKyJNMCwwTC0iK2UrIiwtIityKyJWIityKyJaIn0sbmVlZExpbmU6ITAsbm9Eb3Q6ITB9fX0seyJAcGxvdGx5L2QzIjo1OH1dLDY2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJjYWxjIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyY2VudCIsImNvbnN0YW50Iiwic3FydCIsImRhdGEiXSxlZGl0VHlwZToiY2FsYyJ9LHN5bW1ldHJpYzp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxhcnJheTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxhcnJheW1pbnVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx2YWx1ZW1pbnVzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSx0cmFjZXJlZjp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJzdHlsZSJ9LHRyYWNlcmVmbWludXM6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSxjb3B5X3lzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InBsb3QifSxjb3B5X3pzdHlsZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMiLF9kZXByZWNhdGVkOntvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJzdHlsZSJ9fX19LHt9XSw2NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vbGliIikscz10KCIuL2NvbXB1dGVfZXJyb3IiKTtmdW5jdGlvbiBsKHQsZSxyLGkpe3ZhciBsPWVbImVycm9yXyIraV18fHt9LGM9W107aWYobC52aXNpYmxlJiYtMSE9PVsibGluZWFyIiwibG9nIl0uaW5kZXhPZihyLnR5cGUpKXtmb3IodmFyIHU9cyhsKSxmPTA7Zjx0Lmxlbmd0aDtmKyspe3ZhciBoPXRbZl0scD1oLmk7aWYodm9pZCAwPT09cClwPWY7ZWxzZSBpZihudWxsPT09cCljb250aW51ZTt2YXIgZD1oW2ldO2lmKG4oci5jMmwoZCkpKXt2YXIgbT11KGQscCk7aWYobihtWzBdKSYmbihtWzFdKSl7dmFyIGc9aFtpKyJzIl09ZC1tWzBdLHY9aFtpKyJoIl09ZCttWzFdO2MucHVzaChnLHYpfX19dmFyIHk9ci5faWQseD1lLl9leHRyZW1lc1t5XSxiPWEuZmluZEV4dHJlbWVzKHIsYyxvLmV4dGVuZEZsYXQoe3RvemVybzp4Lm9wdHMudG96ZXJvfSx7cGFkZGVkOiEwfSkpO3gubWluPXgubWluLmNvbmNhdChiLm1pbikseC5tYXg9eC5tYXguY29uY2F0KGIubWF4KX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNhbGNkYXRhLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxvPW5bMF0udHJhY2U7aWYoITA9PT1vLnZpc2libGUmJmkudHJhY2VJcyhvLCJlcnJvckJhcnNPSyIpKXt2YXIgcz1hLmdldEZyb21JZCh0LG8ueGF4aXMpLGM9YS5nZXRGcm9tSWQodCxvLnlheGlzKTtsKG4sbyxzLCJ4IiksbChuLG8sYywieSIpfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2NvbXB1dGVfZXJyb3IiOjY2NSwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuInBlcmNlbnQiPT09dD9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModCplLzEwMCl9OiJjb25zdGFudCI9PT10P2Z1bmN0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGUpfToic3FydCI9PT10P2Z1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5hYnModCkpfTp2b2lkIDB9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZSxyPXQuc3ltbWV0cmljO2lmKCJkYXRhIj09PWUpe3ZhciBpPXQuYXJyYXl8fFtdO2lmKHIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2lbZV07cmV0dXJuW3Iscl19O3ZhciBhPXQuYXJyYXltaW51c3x8W107cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9K2lbZV0sbj0rYVtlXTtyZXR1cm4gaXNOYU4ocikmJmlzTmFOKG4pP1tOYU4sTmFOXTpbbnx8MCxyfHwwXX19dmFyIG89bihlLHQudmFsdWUpLHM9bihlLHQudmFsdWVtaW51cyk7cmV0dXJuIHJ8fHZvaWQgMD09PXQudmFsdWVtaW51cz9mdW5jdGlvbih0KXt2YXIgZT1vKHQpO3JldHVybltlLGVdfTpmdW5jdGlvbih0KXtyZXR1cm5bcyh0KSxvKHQpXX19fSx7fV0sNjY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7dmFyIGM9ImVycm9yXyIrbC5heGlzLHU9by5uZXdDb250YWluZXIoZSxjKSxmPXRbY118fHt9O2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gYS5jb2VyY2UoZix1LHMsdCxlKX1pZighMSE9PWgoInZpc2libGUiLHZvaWQgMCE9PWYuYXJyYXl8fHZvaWQgMCE9PWYudmFsdWV8fCJzcXJ0Ij09PWYudHlwZSkpe3ZhciBwPWgoInR5cGUiLCJhcnJheSJpbiBmPyJkYXRhIjoicGVyY2VudCIpLGQ9ITA7InNxcnQiIT09cCYmKGQ9aCgic3ltbWV0cmljIiwhKCgiZGF0YSI9PT1wPyJhcnJheW1pbnVzIjoidmFsdWVtaW51cyIpaW4gZikpKSwiZGF0YSI9PT1wPyhoKCJhcnJheSIpLGgoInRyYWNlcmVmIiksZHx8KGgoImFycmF5bWludXMiKSxoKCJ0cmFjZXJlZm1pbnVzIikpKToicGVyY2VudCIhPT1wJiYiY29uc3RhbnQiIT09cHx8KGgoInZhbHVlIiksZHx8aCgidmFsdWVtaW51cyIpKTt2YXIgbT0iY29weV8iK2wuaW5oZXJpdCsic3R5bGUiO2lmKGwuaW5oZXJpdCkoZVsiZXJyb3JfIitsLmluaGVyaXRdfHx7fSkudmlzaWJsZSYmaChtLCEoZi5jb2xvcnx8bihmLnRoaWNrbmVzcyl8fG4oZi53aWR0aCkpKTtsLmluaGVyaXQmJnVbbV18fChoKCJjb2xvciIsciksaCgidGhpY2tuZXNzIiksaCgid2lkdGgiLGkudHJhY2VJcyhlLCJnbDNkIik/MDo0KSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjY2MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxhPXQoIi4vYXR0cmlidXRlcyIpLG89e2Vycm9yX3g6bi5leHRlbmRGbGF0KHt9LGEpLGVycm9yX3k6bi5leHRlbmRGbGF0KHt9LGEpfTtkZWxldGUgby5lcnJvcl94LmNvcHlfenN0eWxlLGRlbGV0ZSBvLmVycm9yX3kuY29weV96c3R5bGUsZGVsZXRlIG8uZXJyb3JfeS5jb3B5X3lzdHlsZTt2YXIgcz17ZXJyb3JfeDpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfeTpuLmV4dGVuZEZsYXQoe30sYSksZXJyb3JfejpuLmV4dGVuZEZsYXQoe30sYSl9O2RlbGV0ZSBzLmVycm9yX3guY29weV95c3R5bGUsZGVsZXRlIHMuZXJyb3JfeS5jb3B5X3lzdHlsZSxkZWxldGUgcy5lcnJvcl96LmNvcHlfeXN0eWxlLGRlbGV0ZSBzLmVycm9yX3ouY29weV96c3R5bGUsZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImVycm9yYmFycyIsc2NoZW1hOnt0cmFjZXM6e3NjYXR0ZXI6byxiYXI6byxoaXN0b2dyYW06byxzY2F0dGVyM2Q6aShzLCJjYWxjIiwibmVzdGVkIiksc2NhdHRlcmdsOmkobywiY2FsYyIsIm5lc3RlZCIpfX0sc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksbWFrZUNvbXB1dGVFcnJvcjp0KCIuL2NvbXB1dGVfZXJyb3IiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlckluZm86ZnVuY3Rpb24odCxlLHIpeyhlLmVycm9yX3l8fHt9KS52aXNpYmxlJiYoci55ZXJyPXQueWgtdC55LGUuZXJyb3JfeS5zeW1tZXRyaWN8fChyLnllcnJuZWc9dC55LXQueXMpKTsoZS5lcnJvcl94fHx7fSkudmlzaWJsZSYmKHIueGVycj10LnhoLXQueCxlLmVycm9yX3guc3ltbWV0cmljfHwoci54ZXJybmVnPXQueC10LnhzKSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuL2F0dHJpYnV0ZXMiOjY2MywiLi9jYWxjIjo2NjQsIi4vY29tcHV0ZV9lcnJvciI6NjY1LCIuL2RlZmF1bHRzIjo2NjYsIi4vcGxvdCI6NjY4LCIuL3N0eWxlIjo2Njl9XSw2Njg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3ZhciBsPXIueGF4aXMsYz1yLnlheGlzLHU9cyYmcy5kdXJhdGlvbj4wO2UuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIGYsaD1lWzBdLnRyYWNlLHA9aC5lcnJvcl94fHx7fSxkPWguZXJyb3JfeXx8e307aC5pZHMmJihmPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSk7dmFyIG09by5oYXNNYXJrZXJzKGgpJiZoLm1hcmtlci5tYXhkaXNwbGF5ZWQ+MDtkLnZpc2libGV8fHAudmlzaWJsZXx8KGU9W10pO3ZhciBnPW4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy5lcnJvcmJhciIpLmRhdGEoZSxmKTtpZihnLmV4aXQoKS5yZW1vdmUoKSxlLmxlbmd0aCl7cC52aXNpYmxlfHxnLnNlbGVjdEFsbCgicGF0aC54ZXJyb3IiKS5yZW1vdmUoKSxkLnZpc2libGV8fGcuc2VsZWN0QWxsKCJwYXRoLnllcnJvciIpLnJlbW92ZSgpLGcuc3R5bGUoIm9wYWNpdHkiLDEpO3ZhciB2PWcuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJlcnJvcmJhciIsITApO3UmJnYuc3R5bGUoIm9wYWNpdHkiLDApLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5zdHlsZSgib3BhY2l0eSIsMSksYS5zZXRDbGlwVXJsKGcsci5sYXllckNsaXBJZCx0KSxnLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt4OmUuYzJwKHQueCkseTpyLmMycCh0LnkpfTt2b2lkIDAhPT10LnloJiYobi55aD1yLmMycCh0LnloKSxuLnlzPXIuYzJwKHQueXMpLGkobi55cyl8fChuLm5vWVM9ITAsbi55cz1yLmMycCh0LnlzLCEwKSkpO3ZvaWQgMCE9PXQueGgmJihuLnhoPWUuYzJwKHQueGgpLG4ueHM9ZS5jMnAodC54cyksaShuLnhzKXx8KG4ubm9YUz0hMCxuLnhzPWUuYzJwKHQueHMsITApKSk7cmV0dXJuIG59KHQsbCxjKTtpZighbXx8dC52aXMpe3ZhciBhLG89ZS5zZWxlY3QoInBhdGgueWVycm9yIik7aWYoZC52aXNpYmxlJiZpKHIueCkmJmkoci55aCkmJmkoci55cykpe3ZhciBmPWQud2lkdGg7YT0iTSIrKHIueC1mKSsiLCIrci55aCsiaCIrMipmKyJtLSIrZisiLDBWIityLnlzLHIubm9ZU3x8KGErPSJtLSIrZisiLDBoIisyKmYpLCFvLnNpemUoKT9vPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ5ZXJyb3IiLCEwKTp1JiYobz1vLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksby5hdHRyKCJkIixhKX1lbHNlIG8ucmVtb3ZlKCk7dmFyIGg9ZS5zZWxlY3QoInBhdGgueGVycm9yIik7aWYocC52aXNpYmxlJiZpKHIueSkmJmkoci54aCkmJmkoci54cykpe3ZhciBnPShwLmNvcHlfeXN0eWxlP2Q6cCkud2lkdGg7YT0iTSIrci54aCsiLCIrKHIueS1nKSsidiIrMipnKyJtMCwtIitnKyJIIityLnhzLHIubm9YU3x8KGErPSJtMCwtIitnKyJ2IisyKmcpLCFoLnNpemUoKT9oPWUuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5jbGFzc2VkKCJ4ZXJyb3IiLCEwKTp1JiYoaD1oLnRyYW5zaXRpb24oKS5kdXJhdGlvbihzLmR1cmF0aW9uKS5lYXNlKHMuZWFzaW5nKSksaC5hdHRyKCJkIixhKX1lbHNlIGgucmVtb3ZlKCl9fSkpfX0pKX19LHsiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw2Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ZS5lcnJvcl95fHx7fSxhPWUuZXJyb3JfeHx8e30sbz1uLnNlbGVjdCh0aGlzKTtvLnNlbGVjdEFsbCgicGF0aC55ZXJyb3IiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLnRoaWNrbmVzcysicHgiKS5jYWxsKGkuc3Ryb2tlLHIuY29sb3IpLGEuY29weV95c3R5bGUmJihhPXIpLG8uc2VsZWN0QWxsKCJwYXRoLnhlcnJvciIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGEudGhpY2tuZXNzKyJweCIpLmNhbGwoaS5zdHJva2UsYS5jb2xvcil9KSl9fSx7Ii4uL2NvbG9yIjo2MzksIkBwbG90bHkvZDMiOjU4fV0sNjcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLmhvdmVybGFiZWwsYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2hvdmVybGFiZWw6e2JnY29sb3I6YSh7fSxpLmJnY29sb3Ise2FycmF5T2s6ITB9KSxib3JkZXJjb2xvcjphKHt9LGkuYm9yZGVyY29sb3Ise2FycmF5T2s6ITB9KSxmb250Om4oe2FycmF5T2s6ITAsZWRpdFR5cGU6Im5vbmUifSksYWxpZ246YSh7fSxpLmFsaWduLHthcnJheU9rOiEwfSksbmFtZWxlbmd0aDphKHt9LGkubmFtZWxlbmd0aCx7YXJyYXlPazohMH0pLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MH1dLDY3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gYSh0LGUscixpKXtpPWl8fG4uaWRlbnRpdHksQXJyYXkuaXNBcnJheSh0KSYmKGVbMF1bcl09aSh0KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2FsY2RhdGEscj10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBuLmNvZXJjZUhvdmVyaW5mbyh7aG92ZXJpbmZvOmV9LHtfbW9kdWxlOnQuX21vZHVsZX0scil9fWZvcih2YXIgcz0wO3M8ZS5sZW5ndGg7cysrKXt2YXIgbD1lW3NdLGM9bFswXS50cmFjZTtpZighaS50cmFjZUlzKGMsInBpZS1saWtlIikpe3ZhciB1PWkudHJhY2VJcyhjLCIyZE1hcCIpP2E6bi5maWxsQXJyYXk7dShjLmhvdmVyaW5mbyxsLCJoaSIsbyhjKSksYy5ob3ZlcnRlbXBsYXRlJiZ1KGMuaG92ZXJ0ZW1wbGF0ZSxsLCJodCIpLGMuaG92ZXJsYWJlbCYmKHUoYy5ob3ZlcmxhYmVsLmJnY29sb3IsbCwiaGJnIiksdShjLmhvdmVybGFiZWwuYm9yZGVyY29sb3IsbCwiaGJjIiksdShjLmhvdmVybGFiZWwuZm9udC5zaXplLGwsImh0cyIpLHUoYy5ob3ZlcmxhYmVsLmZvbnQuY29sb3IsbCwiaHRjIiksdShjLmhvdmVybGFiZWwuZm9udC5mYW1pbHksbCwiaHRmIiksdShjLmhvdmVybGFiZWwubmFtZWxlbmd0aCxsLCJobmwiKSx1KGMuaG92ZXJsYWJlbC5hbGlnbixsLCJodGEiKSl9fX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDR9XSw2NzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4vaG92ZXIiKS5ob3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW4uZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsIm9uQ2xpY2siKSh0LHQuX2hvdmVyZGF0YSk7ZnVuY3Rpb24gbygpe3QuZW1pdCgicGxvdGx5X2NsaWNrIix7cG9pbnRzOnQuX2hvdmVyZGF0YSxldmVudDplfSl9dm9pZCAwIT09ciYmaSh0LGUsciwhMCksdC5faG92ZXJkYXRhJiZlJiZlLnRhcmdldCYmKGEmJmEudGhlbj9hLnRoZW4obyk6bygpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX19LHsiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9ob3ZlciI6Njc2fV0sNjczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17WUFOR0xFOjYwLEhPVkVSQVJST1dTSVpFOjYsSE9WRVJURVhUUEFEOjMsSE9WRVJGT05UU0laRToxMyxIT1ZFUkZPTlQ6IkFyaWFsLCBzYW5zLXNlcmlmIixIT1ZFUk1JTlRJTUU6NTAsSE9WRVJJRDoiLWhvdmVyIn19LHt9XSw2NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2F0dHJpYnV0ZXMiKSxhPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXt2YXIgcz1uLmV4dGVuZEZsYXQoe30sby5ob3ZlcmxhYmVsKTtlLmhvdmVydGVtcGxhdGUmJihzLm5hbWVsZW5ndGg9LTEpLGEodCxlLChmdW5jdGlvbihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfSkscyl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjY3MCwiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIjo2Nzd9XSw2NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ci5nZXRTdWJwbG90PWZ1bmN0aW9uKHQpe3JldHVybiB0LnN1YnBsb3R8fHQueGF4aXMrdC55YXhpc3x8dC5nZW99LHIuaXNUcmFjZUluU3VicGxvdHM9ZnVuY3Rpb24odCxlKXtpZigic3Bsb20iPT09dC50eXBlKXtmb3IodmFyIG49dC54YXhlc3x8W10saT10LnlheGVzfHxbXSxhPTA7YTxuLmxlbmd0aDthKyspZm9yKHZhciBvPTA7bzxpLmxlbmd0aDtvKyspaWYoLTEhPT1lLmluZGV4T2YoblthXStpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4tMSE9PWUuaW5kZXhPZihyLmdldFN1YnBsb3QodCkpfSxyLmZsYXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KHQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT1lO3JldHVybiByfSxyLnAyYz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyW25dPXRbbl0ucDJjKGUpO3JldHVybiByfSxyLmdldERpc3RhbmNlRnVuY3Rpb249ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuImNsb3Nlc3QiPT09dD9pfHxyLnF1YWRyYXR1cmUoZSxuKToieCI9PT10LmNoYXJBdCgwKT9lOm59LHIuZ2V0Q2xvc2VzdD1mdW5jdGlvbih0LGUscil7aWYoITEhPT1yLmluZGV4KXIuaW5kZXg+PTAmJnIuaW5kZXg8dC5sZW5ndGg/ci5kaXN0YW5jZT0wOnIuaW5kZXg9ITE7ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9ZSh0W25dKTtpPD1yLmRpc3RhbmNlJiYoci5pbmRleD1uLHIuZGlzdGFuY2U9aSl9cmV0dXJuIHJ9LHIuaW5ib3g9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0KmU8MHx8MD09PXQ/cjoxLzB9LHIucXVhZHJhdHVyZT1mdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbj10KHIpLGk9ZShyKTtyZXR1cm4gTWF0aC5zcXJ0KG4qbitpKmkpfX0sci5tYWtlRXZlbnREYXRhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT0iaW5kZXgiaW4gdD90LmluZGV4OnQucG9pbnROdW1iZXIsYT17ZGF0YTplLl9pbnB1dCxmdWxsRGF0YTplLGN1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXI6aX07aWYoZS5faW5kZXhUb1BvaW50cyl7dmFyIG89ZS5faW5kZXhUb1BvaW50c1tpXTsxPT09by5sZW5ndGg/YS5wb2ludEluZGV4PW9bMF06YS5wb2ludEluZGljZXM9b31lbHNlIGEucG9pbnRJbmRleD1pO3JldHVybiBlLl9tb2R1bGUuZXZlbnREYXRhP2E9ZS5fbW9kdWxlLmV2ZW50RGF0YShhLHQsZSxuLGkpOigieFZhbCJpbiB0P2EueD10LnhWYWw6IngiaW4gdCYmKGEueD10LngpLCJ5VmFsImluIHQ/YS55PXQueVZhbDoieSJpbiB0JiYoYS55PXQueSksdC54YSYmKGEueGF4aXM9dC54YSksdC55YSYmKGEueWF4aXM9dC55YSksdm9pZCAwIT09dC56TGFiZWxWYWwmJihhLno9dC56TGFiZWxWYWwpKSxyLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShhLGUsaSksYX0sci5hcHBlbmRBcnJheVBvaW50VmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7dmFyIHU9byhuLm5lc3RlZFByb3BlcnR5KGUsbCkuZ2V0KCkscik7dm9pZCAwIT09dSYmKHRbY109dSl9fX0sci5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2FycmF5QXR0cnM7aWYoaSlmb3IodmFyIHM9MDtzPGkubGVuZ3RoO3MrKyl7dmFyIGw9aVtzXSxjPWEobCk7aWYodm9pZCAwPT09dFtjXSl7Zm9yKHZhciB1PW4ubmVzdGVkUHJvcGVydHkoZSxsKS5nZXQoKSxmPW5ldyBBcnJheShyLmxlbmd0aCksaD0wO2g8ci5sZW5ndGg7aCsrKWZbaF09byh1LHJbaF0pO3RbY109Zn19fTt2YXIgaT17aWRzOiJpZCIsbG9jYXRpb25zOiJsb2NhdGlvbiIsbGFiZWxzOiJsYWJlbCIsdmFsdWVzOiJ2YWx1ZSIsIm1hcmtlci5jb2xvcnMiOiJjb2xvciIscGFyZW50czoicGFyZW50In07ZnVuY3Rpb24gYSh0KXtyZXR1cm4gaVt0XXx8dH1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KSYmQXJyYXkuaXNBcnJheSh0W2VbMF1dKT90W2VbMF1dW2VbMV1dOnZvaWQgMDp0W2VdfXZhciBzPXt4OiEwLHk6ITB9LGw9eyJ4IHVuaWZpZWQiOiEwLCJ5IHVuaWZpZWQiOiEwfTtyLmlzVW5pZmllZEhvdmVyPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmISFsW3RdfSxyLmlzWFlob3Zlcj1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiEhc1t0XX19LHsiLi4vLi4vbGliIjo3NzZ9XSw2NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoInRpbnljb2xvcjIiKSxvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJUcmFuc2xhdGUsbD1vLnN0clJvdGF0ZSxjPXQoIi4uLy4uL2xpYi9ldmVudHMiKSx1PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGY9dCgiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciIpLGg9dCgiLi4vZHJhd2luZyIpLHA9dCgiLi4vY29sb3IiKSxkPXQoIi4uL2RyYWdlbGVtZW50IiksbT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGc9dCgiLi4vLi4vcmVnaXN0cnkiKSx2PXQoIi4vaGVscGVycyIpLHk9dCgiLi9jb25zdGFudHMiKSx4PXQoIi4uL2xlZ2VuZC9kZWZhdWx0cyIpLGI9dCgiLi4vbGVnZW5kL2RyYXciKSxfPXkuWUFOR0xFLHc9TWF0aC5QSSpfLzE4MCxUPTEvTWF0aC5zaW4odyksaz1NYXRoLmNvcyh3KSxBPU1hdGguc2luKHcpLE09eS5IT1ZFUkFSUk9XU0laRSxTPXkuSE9WRVJURVhUUEFELEU9e2JveDohMCxvaGxjOiEwLHZpb2xpbjohMCxjYW5kbGVzdGljazohMH0sTD17c2NhdHRlcjohMCxzY2F0dGVyZ2w6ITAsc3Bsb206ITB9O2Z1bmN0aW9uIEModCl7cmV0dXJuW3QudHJhY2UuaW5kZXgsdC5pbmRleCx0LngwLHQueTAsdC5uYW1lLHQuYXR0cix0LnhhP3QueGEuX2lkOiIiLHQueWE/dC55YS5faWQ6IiJdLmpvaW4oIiwiKX1yLmhvdmVyPWZ1bmN0aW9uKHQsZSxyLGEpe3Q9by5nZXRHcmFwaERpdih0KSxvLnRocm90dGxlKHQuX2Z1bGxMYXlvdXQuX3VpZCt5LkhPVkVSSUQseS5IT1ZFUk1JTlRJTUUsKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKHQsZSxyLGEpe3J8fChyPSJ4eSIpO3ZhciBzPUFycmF5LmlzQXJyYXkocik/cjpbcl0sbD10Ll9mdWxsTGF5b3V0LHU9bC5fcGxvdHN8fFtdLGg9dVtyXSxtPWwuX2hhcygiY2FydGVzaWFuIik7aWYoaCl7dmFyIHk9aC5vdmVybGF5cy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlkfSkpO3M9cy5jb25jYXQoeSl9Zm9yKHZhciB4PXMubGVuZ3RoLGI9bmV3IEFycmF5KHgpLF89bmV3IEFycmF5KHgpLHc9ITEsaz0wO2s8eDtrKyspe3ZhciBBPXNba107aWYodVtBXSl3PSEwLGJba109dVtBXS54YXhpcyxfW2tdPXVbQV0ueWF4aXM7ZWxzZXtpZighbFtBXXx8IWxbQV0uX3N1YnBsb3QpcmV0dXJuIHZvaWQgby53YXJuKCJVbnJlY29nbml6ZWQgc3VicGxvdDogIitBKTt2YXIgTT1sW0FdLl9zdWJwbG90O2Jba109TS54YXhpcyxfW2tdPU0ueWF4aXN9fXZhciBTPWUuaG92ZXJtb2RlfHxsLmhvdmVybW9kZTtTJiYhdyYmKFM9ImNsb3Nlc3QiKTtpZigtMT09PVsieCIsInkiLCJjbG9zZXN0IiwieCB1bmlmaWVkIiwieSB1bmlmaWVkIl0uaW5kZXhPZihTKXx8IXQuY2FsY2RhdGF8fHQucXVlcnlTZWxlY3RvcigiLnpvb21ib3giKXx8dC5fZHJhZ2dpbmcpcmV0dXJuIGQudW5ob3ZlclJhdyh0LGUpO3ZhciBQPWwuaG92ZXJkaXN0YW5jZTstMT09PVAmJihQPTEvMCk7dmFyIE89bC5zcGlrZWRpc3RhbmNlOy0xPT09TyYmKE89MS8wKTt2YXIgQixWLEgscSxHLFksVyxYLFosSixLLFEsJCx0dD1bXSxldD1bXSxydD17aExpbmVQb2ludDpudWxsLHZMaW5lUG9pbnQ6bnVsbH0sbnQ9ITE7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoUz0iYXJyYXkiLEg9MDtIPGUubGVuZ3RoO0grKykoRz10LmNhbGNkYXRhW2VbSF0uY3VydmVOdW1iZXJ8fDBdKSYmKFk9R1swXS50cmFjZSwic2tpcCIhPT1HWzBdLnRyYWNlLmhvdmVyaW5mbyYmKGV0LnB1c2goRyksImgiPT09WS5vcmllbnRhdGlvbiYmKG50PSEwKSkpO2Vsc2V7Zm9yKHE9MDtxPHQuY2FsY2RhdGEubGVuZ3RoO3ErKylHPXQuY2FsY2RhdGFbcV0sInNraXAiIT09KFk9R1swXS50cmFjZSkuaG92ZXJpbmZvJiZ2LmlzVHJhY2VJblN1YnBsb3RzKFkscykmJihldC5wdXNoKEcpLCJoIj09PVkub3JpZW50YXRpb24mJihudD0hMCkpO3ZhciBpdCxhdDtpZighZS50YXJnZXQpaXQ9InhweCJpbiBlP2UueHB4OmJbMF0uX2xlbmd0aC8yLGF0PSJ5cHgiaW4gZT9lLnlweDpfWzBdLl9sZW5ndGgvMjtlbHNle2lmKCExPT09Yy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfYmVmb3JlaG92ZXIiLGUpKXJldHVybjt2YXIgb3Q9ZS5jb21wb3NlZFBhdGgmJmUuY29tcG9zZWRQYXRoKClbMF07b3R8fChvdD1lLnRhcmdldCk7dmFyIHN0PW90LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2l0PWUuY2xpZW50WC1zdC5sZWZ0LGF0PWUuY2xpZW50WS1zdC50b3AsbC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGx0PW8uYXBwbHkzRFRyYW5zZm9ybShsLl9pbnZUcmFuc2Zvcm0pKGl0LGF0KTtpZihpdD1sdFswXSxhdD1sdFsxXSxpdDwwfHxpdD5iWzBdLl9sZW5ndGh8fGF0PDB8fGF0Pl9bMF0uX2xlbmd0aClyZXR1cm4gZC51bmhvdmVyUmF3KHQsZSl9aWYoZS5wb2ludGVyWD1pdCtiWzBdLl9vZmZzZXQsZS5wb2ludGVyWT1hdCtfWzBdLl9vZmZzZXQsQj0ieHZhbCJpbiBlP3YuZmxhdChzLGUueHZhbCk6di5wMmMoYixpdCksVj0ieXZhbCJpbiBlP3YuZmxhdChzLGUueXZhbCk6di5wMmMoXyxhdCksIWkoQlswXSl8fCFpKFZbMF0pKXJldHVybiBvLndhcm4oIkZ4LmhvdmVyIGZhaWxlZCIsZSx0KSxkLnVuaG92ZXJSYXcodCxlKX12YXIgY3Q9MS8wO2Z1bmN0aW9uIHV0KHQscil7Zm9yKHE9MDtxPGV0Lmxlbmd0aDtxKyspaWYoKEc9ZXRbcV0pJiZHWzBdJiZHWzBdLnRyYWNlJiYhMD09PShZPUdbMF0udHJhY2UpLnZpc2libGUmJjAhPT1ZLl9sZW5ndGgmJi0xPT09WyJjYXJwZXQiLCJjb250b3VyY2FycGV0Il0uaW5kZXhPZihZLl9tb2R1bGUubmFtZSkpe2lmKCJzcGxvbSI9PT1ZLnR5cGU/Vz1zW1g9MF06KFc9di5nZXRTdWJwbG90KFkpLFg9cy5pbmRleE9mKFcpKSxaPVMsdi5pc1VuaWZpZWRIb3ZlcihaKSYmKFo9Wi5jaGFyQXQoMCkpLFE9e2NkOkcsdHJhY2U6WSx4YTpiW1hdLHlhOl9bWF0sbWF4SG92ZXJEaXN0YW5jZTpQLG1heFNwaWtlRGlzdGFuY2U6TyxpbmRleDohMSxkaXN0YW5jZTpNYXRoLm1pbihjdCxQKSxzcGlrZURpc3RhbmNlOjEvMCx4U3Bpa2U6dm9pZCAwLHlTcGlrZTp2b2lkIDAsY29sb3I6cC5kZWZhdWx0TGluZSxuYW1lOlkubmFtZSx4MDp2b2lkIDAseDE6dm9pZCAwLHkwOnZvaWQgMCx5MTp2b2lkIDAseExhYmVsVmFsOnZvaWQgMCx5TGFiZWxWYWw6dm9pZCAwLHpMYWJlbFZhbDp2b2lkIDAsdGV4dDp2b2lkIDB9LGxbV10mJihRLnN1YnBsb3Q9bFtXXS5fc3VicGxvdCksbC5fc3Bsb21TY2VuZXMmJmwuX3NwbG9tU2NlbmVzW1kudWlkXSYmKFEuc2NlbmU9bC5fc3Bsb21TY2VuZXNbWS51aWRdKSwkPXR0Lmxlbmd0aCwiYXJyYXkiPT09Wil7dmFyIG49ZVtxXTsicG9pbnROdW1iZXIiaW4gbj8oUS5pbmRleD1uLnBvaW50TnVtYmVyLFo9ImNsb3Nlc3QiKTooWj0iIiwieHZhbCJpbiBuJiYoSj1uLnh2YWwsWj0ieCIpLCJ5dmFsImluIG4mJihLPW4ueXZhbCxaPVo/ImNsb3Nlc3QiOiJ5IikpfWVsc2Ugdm9pZCAwIT09dCYmdm9pZCAwIT09cj8oSj10LEs9cik6KEo9QltYXSxLPVZbWF0pO2lmKDAhPT1QKWlmKFkuX21vZHVsZSYmWS5fbW9kdWxlLmhvdmVyUG9pbnRzKXt2YXIgYT1ZLl9tb2R1bGUuaG92ZXJQb2ludHMoUSxKLEssWix7ZmluaXRlUmFuZ2U6ITAsaG92ZXJMYXllcjpsLl9ob3ZlcmxheWVyfSk7aWYoYSlmb3IodmFyIGMsdT0wO3U8YS5sZW5ndGg7dSsrKWM9YVt1XSxpKGMueDApJiZpKGMueTApJiZ0dC5wdXNoKEQoYyxTKSl9ZWxzZSBvLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgaW4gaG92ZXI6IixZKTtpZigiY2xvc2VzdCI9PT1TJiZ0dC5sZW5ndGg+JCYmKHR0LnNwbGljZSgwLCQpLGN0PXR0WzBdLmRpc3RhbmNlKSxtJiYwIT09TyYmMD09PXR0Lmxlbmd0aCl7US5kaXN0YW5jZT1PLFEuaW5kZXg9ITE7dmFyIGY9WS5fbW9kdWxlLmhvdmVyUG9pbnRzKFEsSixLLCJjbG9zZXN0Iix7aG92ZXJMYXllcjpsLl9ob3ZlcmxheWVyfSk7aWYoZiYmKGY9Zi5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnNwaWtlRGlzdGFuY2U8PU99KSkpLGYmJmYubGVuZ3RoKXt2YXIgaCxkPWYuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54YS5zaG93c3Bpa2VzJiYiaG92ZXJlZCBkYXRhIiE9PXQueGEuc3Bpa2VzbmFwfSkpO2lmKGQubGVuZ3RoKXt2YXIgZz1kWzBdO2koZy54MCkmJmkoZy55MCkmJihoPWh0KGcpLCghcnQudkxpbmVQb2ludHx8cnQudkxpbmVQb2ludC5zcGlrZURpc3RhbmNlPmguc3Bpa2VEaXN0YW5jZSkmJihydC52TGluZVBvaW50PWgpKX12YXIgeT1mLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQueWEuc2hvd3NwaWtlcyYmImhvdmVyZWQgZGF0YSIhPT10LnlhLnNwaWtlc25hcH0pKTtpZih5Lmxlbmd0aCl7dmFyIHg9eVswXTtpKHgueDApJiZpKHgueTApJiYoaD1odCh4KSwoIXJ0LmhMaW5lUG9pbnR8fHJ0LmhMaW5lUG9pbnQuc3Bpa2VEaXN0YW5jZT5oLnNwaWtlRGlzdGFuY2UpJiYocnQuaExpbmVQb2ludD1oKSl9fX19fWZ1bmN0aW9uIGZ0KHQsZSxyKXtmb3IodmFyIG4saT1udWxsLGE9MS8wLG89MDtvPHQubGVuZ3RoO28rKyluPXRbb10uc3Bpa2VEaXN0YW5jZSxyJiYwPT09byYmKG49LTEvMCksbjw9YSYmbjw9ZSYmKGk9dFtvXSxhPW4pO3JldHVybiBpfWZ1bmN0aW9uIGh0KHQpe3JldHVybiB0P3t4YTp0LnhhLHlhOnQueWEseDp2b2lkIDAhPT10LnhTcGlrZT90LnhTcGlrZToodC54MCt0LngxKS8yLHk6dm9pZCAwIT09dC55U3Bpa2U/dC55U3Bpa2U6KHQueTArdC55MSkvMixkaXN0YW5jZTp0LmRpc3RhbmNlLHNwaWtlRGlzdGFuY2U6dC5zcGlrZURpc3RhbmNlLGN1cnZlTnVtYmVyOnQudHJhY2UuaW5kZXgsY29sb3I6dC5jb2xvcixwb2ludE51bWJlcjp0LmluZGV4fTpudWxsfXV0KCk7dmFyIHB0PXtmdWxsTGF5b3V0OmwsY29udGFpbmVyOmwuX2hvdmVybGF5ZXIsZXZlbnQ6ZX0sZHQ9dC5fc3Bpa2Vwb2ludHMsbXQ9e3ZMaW5lUG9pbnQ6cnQudkxpbmVQb2ludCxoTGluZVBvaW50OnJ0LmhMaW5lUG9pbnR9O3QuX3NwaWtlcG9pbnRzPW10O3ZhciBndD1mdW5jdGlvbigpe3R0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzdGFuY2UtZS5kaXN0YW5jZX0pKSx0dD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmNoYXJBdCgwKSxuPVtdLGk9W10sYT1bXSxvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBzPXRbb107Zy50cmFjZUlzKHMudHJhY2UsImJhci1saWtlIil8fGcudHJhY2VJcyhzLnRyYWNlLCJib3gtdmlvbGluIik/YS5wdXNoKHMpOnMudHJhY2VbcisicGVyaW9kIl0/aS5wdXNoKHMpOm4ucHVzaChzKX1yZXR1cm4gbi5jb25jYXQoaSkuY29uY2F0KGEpfSh0dCxTKX07Z3QoKTt2YXIgdnQ9Uy5jaGFyQXQoMCkseXQ9KCJ4Ij09PXZ0fHwieSI9PT12dCkmJnR0WzBdJiZMW3R0WzBdLnRyYWNlLnR5cGVdO2lmKG0mJjAhPT1PJiYwIT09dHQubGVuZ3RoKXt2YXIgeHQ9ZnQodHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC55YS5zaG93c3Bpa2VzfSkpLE8seXQpO3J0LmhMaW5lUG9pbnQ9aHQoeHQpO3ZhciBidD1mdCh0dC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnhhLnNob3dzcGlrZXN9KSksTyx5dCk7cnQudkxpbmVQb2ludD1odChidCl9aWYoMD09PXR0Lmxlbmd0aCl7dmFyIF90PWQudW5ob3ZlclJhdyh0LGUpO3JldHVybiFtfHxudWxsPT09cnQuaExpbmVQb2ludCYmbnVsbD09PXJ0LnZMaW5lUG9pbnR8fEYoZHQpJiZSKHQscnQscHQpLF90fW0mJkYoZHQpJiZSKHQscnQscHQpO2lmKHYuaXNYWWhvdmVyKFopJiYwIT09dHRbMF0ubGVuZ3RoJiYic3Bsb20iIT09dHRbMF0udHJhY2UudHlwZSl7dmFyIHd0PXR0WzBdLFR0PSh0dD1FW3d0LnRyYWNlLnR5cGVdP3R0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhY2UuaW5kZXg9PT13dC50cmFjZS5pbmRleH0pKTpbd3RdKS5sZW5ndGgsa3Q9TigieCIsd3QsbCksQXQ9TigieSIsd3QsbCk7dXQoa3QsQXQpO3ZhciBNdCxTdD1bXSxFdD17fSxMdD0wLEN0PWZ1bmN0aW9uKHQpe3ZhciBlPUVbdC50cmFjZS50eXBlXT9DKHQpOnQudHJhY2UuaW5kZXg7aWYoRXRbZV0pe3ZhciByPUV0W2VdLTEsbj1TdFtyXTtyPjAmJk1hdGguYWJzKHQuZGlzdGFuY2UpPE1hdGguYWJzKG4uZGlzdGFuY2UpJiYoU3Rbcl09dCl9ZWxzZSBMdCsrLEV0W2VdPUx0LFN0LnB1c2godCl9O2ZvcihNdD0wO010PFR0O010KyspQ3QodHRbTXRdKTtmb3IoTXQ9dHQubGVuZ3RoLTE7TXQ+VHQtMTtNdC0tKUN0KHR0W010XSk7dHQ9U3QsZ3QoKX12YXIgUHQ9dC5faG92ZXJkYXRhLEl0PVtdLE90PWoodCksenQ9VSh0KTtmb3IoSD0wO0g8dHQubGVuZ3RoO0grKyl7dmFyIER0PXR0W0hdLFJ0PXYubWFrZUV2ZW50RGF0YShEdCxEdC50cmFjZSxEdC5jZCk7aWYoITEhPT1EdC5ob3ZlcnRlbXBsYXRlKXt2YXIgRnQ9ITE7RHQuY2RbRHQuaW5kZXhdJiZEdC5jZFtEdC5pbmRleF0uaHQmJihGdD1EdC5jZFtEdC5pbmRleF0uaHQpLER0LmhvdmVydGVtcGxhdGU9RnR8fER0LnRyYWNlLmhvdmVydGVtcGxhdGV8fCExfWlmKER0LnhhJiZEdC55YSl7dmFyIEJ0PUR0LngwK0R0LnhhLl9vZmZzZXQsTnQ9RHQueDErRHQueGEuX29mZnNldCxqdD1EdC55MCtEdC55YS5fb2Zmc2V0LFV0PUR0LnkxK0R0LnlhLl9vZmZzZXQsVnQ9TWF0aC5taW4oQnQsTnQpLEh0PU1hdGgubWF4KEJ0LE50KSxxdD1NYXRoLm1pbihqdCxVdCksR3Q9TWF0aC5tYXgoanQsVXQpO1J0LmJib3g9e3gwOlZ0K3p0LHgxOkh0K3p0LHkwOnF0K090LHkxOkd0K090fX1EdC5ldmVudERhdGE9W1J0XSxJdC5wdXNoKFJ0KX10Ll9ob3ZlcmRhdGE9SXQ7dmFyIFl0PSJ5Ij09PVMmJihldC5sZW5ndGg+MXx8dHQubGVuZ3RoPjEpfHwiY2xvc2VzdCI9PT1TJiZudCYmdHQubGVuZ3RoPjEsV3Q9cC5jb21iaW5lKGwucGxvdF9iZ2NvbG9yfHxwLmJhY2tncm91bmQsbC5wYXBlcl9iZ2NvbG9yKSxYdD1JKHR0LHtnZDp0LGhvdmVybW9kZTpTLHJvdGF0ZUxhYmVsczpZdCxiZ0NvbG9yOld0LGNvbnRhaW5lcjpsLl9ob3ZlcmxheWVyLG91dGVyQ29udGFpbmVyOmwuX3BhcGVyLm5vZGUoKSxjb21tb25MYWJlbE9wdHM6bC5ob3ZlcmxhYmVsLGhvdmVyZGlzdGFuY2U6bC5ob3ZlcmRpc3RhbmNlfSk7di5pc1VuaWZpZWRIb3ZlcihTKXx8KCFmdW5jdGlvbih0LGUscil7dmFyIG4saSxhLG8scyxsLGMsdT0wLGY9MSxoPXQuc2l6ZSgpLHA9bmV3IEFycmF5KGgpLGQ9MDtmdW5jdGlvbiBtKHQpe3ZhciBlPXRbMF0scj10W3QubGVuZ3RoLTFdO2lmKGk9ZS5wbWluLWUucG9zLWUuZHArZS5zaXplLGE9ci5wb3Mrci5kcCtyLnNpemUtZS5wbWF4LGk+LjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHArPWk7bj0hMX1pZighKGE8LjAxKSl7aWYoaTwtLjAxKXtmb3Iocz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7bj0hMX1pZihuKXt2YXIgYz0wO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKyspKGw9dFtvXSkucG9zK2wuZHArbC5zaXplPmUucG1heCYmYysrO2ZvcihvPXQubGVuZ3RoLTE7bz49MCYmIShjPD0wKTtvLS0pKGw9dFtvXSkucG9zPmUucG1heC0xJiYobC5kZWw9ITAsYy0tKTtmb3Iobz0wO288dC5sZW5ndGgmJiEoYzw9MCk7bysrKWlmKChsPXRbb10pLnBvczxlLnBtaW4rMSlmb3IobC5kZWw9ITAsYy0tLGE9MipsLnNpemUscz10Lmxlbmd0aC0xO3M+PTA7cy0tKXRbc10uZHAtPWE7Zm9yKG89dC5sZW5ndGgtMTtvPj0wJiYhKGM8PTApO28tLSkobD10W29dKS5wb3MrbC5kcCtsLnNpemU+ZS5wbWF4JiYobC5kZWw9ITAsYy0tKX19fXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dFtlXSxpPSJ4Ij09PW4uX2lkLmNoYXJBdCgwKSxhPW4ucmFuZ2U7MD09PWQmJmEmJmFbMF0+YVsxXSE9PWkmJihmPS0xKSxwW2QrK109W3tkYXR1bTp0LHRyYWNlSW5kZXg6dC50cmFjZS5pbmRleCxkcDowLHBvczp0LnBvcyxwb3NyZWY6dC5wb3NyZWYsc2l6ZTp0LmJ5KihpP1Q6MSkvMixwbWluOjAscG1heDppP3Iud2lkdGg6ci5oZWlnaHR9XX0pKSxwLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0ucG9zcmVmLWVbMF0ucG9zcmVmfHxmKihlWzBdLnRyYWNlSW5kZXgtdFswXS50cmFjZUluZGV4KX0pKTtmb3IoOyFuJiZ1PD1oOyl7Zm9yKHUrKyxuPSEwLG89MDtvPHAubGVuZ3RoLTE7KXt2YXIgZz1wW29dLHY9cFtvKzFdLHk9Z1tnLmxlbmd0aC0xXSx4PXZbMF07aWYoKGk9eS5wb3MreS5kcCt5LnNpemUteC5wb3MteC5kcCt4LnNpemUpPi4wMSYmeS5wbWluPT09eC5wbWluJiZ5LnBtYXg9PT14LnBtYXgpe2ZvcihzPXYubGVuZ3RoLTE7cz49MDtzLS0pdltzXS5kcCs9aTtmb3IoZy5wdXNoLmFwcGx5KGcsdikscC5zcGxpY2UobysxLDEpLGM9MCxzPWcubGVuZ3RoLTE7cz49MDtzLS0pYys9Z1tzXS5kcDtmb3IoYT1jL2cubGVuZ3RoLHM9Zy5sZW5ndGgtMTtzPj0wO3MtLSlnW3NdLmRwLT1hO249ITF9ZWxzZSBvKyt9cC5mb3JFYWNoKG0pfWZvcihvPXAubGVuZ3RoLTE7bz49MDtvLS0pe3ZhciBiPXBbb107Zm9yKHM9Yi5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIF89YltzXSx3PV8uZGF0dW07dy5vZmZzZXQ9Xy5kcCx3LmRlbD1fLmRlbH19fShYdCxZdD8ieGEiOiJ5YSIsbCkseihYdCxZdCxsLl9pbnZTY2FsZVgsbC5faW52U2NhbGVZKSk7aWYoZS50YXJnZXQmJmUudGFyZ2V0LnRhZ05hbWUpe3ZhciBadD1nLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJoYXNDbGlja1RvU2hvdyIpKHQsSXQpO2Yobi5zZWxlY3QoZS50YXJnZXQpLFp0PyJwb2ludGVyIjoiIil9aWYoIWUudGFyZ2V0fHxhfHwhZnVuY3Rpb24odCxlLHIpe2lmKCFyfHxyLmxlbmd0aCE9PXQuX2hvdmVyZGF0YS5sZW5ndGgpcmV0dXJuITA7Zm9yKHZhciBuPXIubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXJbbl0sYT10Ll9ob3ZlcmRhdGFbbl07aWYoaS5jdXJ2ZU51bWJlciE9PWEuY3VydmVOdW1iZXJ8fFN0cmluZyhpLnBvaW50TnVtYmVyKSE9PVN0cmluZyhhLnBvaW50TnVtYmVyKXx8U3RyaW5nKGkucG9pbnROdW1iZXJzKSE9PVN0cmluZyhhLnBvaW50TnVtYmVycykpcmV0dXJuITB9cmV0dXJuITF9KHQsMCxQdCkpcmV0dXJuO1B0JiZ0LmVtaXQoInBsb3RseV91bmhvdmVyIix7ZXZlbnQ6ZSxwb2ludHM6UHR9KTt0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50OmUscG9pbnRzOnQuX2hvdmVyZGF0YSx4YXhlczpiLHlheGVzOl8seHZhbHM6Qix5dmFsczpWfSl9KHQsZSxyLGEpfSkpfSxyLmxvbmVIb3Zlcj1mdW5jdGlvbih0LGUpe3ZhciByPSEwO0FycmF5LmlzQXJyYXkodCl8fChyPSExLHQ9W3RdKTt2YXIgaT1lLmdkLGE9aihpKSxvPVUoaSkscz1JKHQubWFwKChmdW5jdGlvbih0KXt2YXIgcj10Ll94MHx8dC54MHx8dC54fHwwLG49dC5feDF8fHQueDF8fHQueHx8MCxzPXQuX3kwfHx0LnkwfHx0Lnl8fDAsbD10Ll95MXx8dC55MXx8dC55fHwwLGM9dC5ldmVudERhdGE7aWYoYyl7dmFyIHU9TWF0aC5taW4ocixuKSxmPU1hdGgubWF4KHIsbiksaD1NYXRoLm1pbihzLGwpLGQ9TWF0aC5tYXgocyxsKSxtPXQudHJhY2U7aWYoZy50cmFjZUlzKG0sImdsM2QiKSl7dmFyIHY9aS5fZnVsbExheW91dFttLnNjZW5lXS5fc2NlbmUuY29udGFpbmVyLHk9di5vZmZzZXRMZWZ0LHg9di5vZmZzZXRUb3A7dSs9eSxmKz15LGgrPXgsZCs9eH1jLmJib3g9e3gwOnUrbyx4MTpmK28seTA6aCthLHkxOmQrYX0sZS5pbk91dF9iYm94JiZlLmluT3V0X2Jib3gucHVzaChjLmJib3gpfWVsc2UgYz0hMTtyZXR1cm57Y29sb3I6dC5jb2xvcnx8cC5kZWZhdWx0TGluZSx4MDp0LngwfHx0Lnh8fDAseDE6dC54MXx8dC54fHwwLHkwOnQueTB8fHQueXx8MCx5MTp0LnkxfHx0Lnl8fDAseExhYmVsOnQueExhYmVsLHlMYWJlbDp0LnlMYWJlbCx6TGFiZWw6dC56TGFiZWwsdGV4dDp0LnRleHQsbmFtZTp0Lm5hbWUsaWRlYWxBbGlnbjp0LmlkZWFsQWxpZ24sYm9yZGVyQ29sb3I6dC5ib3JkZXJDb2xvcixmb250RmFtaWx5OnQuZm9udEZhbWlseSxmb250U2l6ZTp0LmZvbnRTaXplLGZvbnRDb2xvcjp0LmZvbnRDb2xvcixuYW1lTGVuZ3RoOnQubmFtZUxlbmd0aCx0ZXh0QWxpZ246dC50ZXh0QWxpZ24sdHJhY2U6dC50cmFjZXx8e2luZGV4OjAsaG92ZXJpbmZvOiIifSx4YTp7X29mZnNldDowfSx5YTp7X29mZnNldDowfSxpbmRleDowLGhvdmVydGVtcGxhdGU6dC5ob3ZlcnRlbXBsYXRlfHwhMSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQuaG92ZXJ0ZW1wbGF0ZUxhYmVsc3x8ITEsZXZlbnREYXRhOmN9fSkpLHtnZDppLGhvdmVybW9kZToiY2xvc2VzdCIscm90YXRlTGFiZWxzOiExLGJnQ29sb3I6ZS5iZ0NvbG9yfHxwLmJhY2tncm91bmQsY29udGFpbmVyOm4uc2VsZWN0KGUuY29udGFpbmVyKSxvdXRlckNvbnRhaW5lcjplLm91dGVyQ29udGFpbmVyfHxlLmNvbnRhaW5lcn0pLGw9MCxjPTA7cmV0dXJuIHMuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC55MC1lLnkwfSkpLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49dC55MC10LmJ5LzI7dC5vZmZzZXQ9bi01PGw/bC1uKzU6MCxsPW4rdC5ieSt0Lm9mZnNldCxyPT09ZS5hbmNob3JJbmRleCYmKGM9dC5vZmZzZXQpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3Qub2Zmc2V0LT1jfSkpLHoocywhMSxpLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsaS5fZnVsbExheW91dC5faW52U2NhbGVZKSxyP3M6cy5ub2RlKCl9O3ZhciBQPS88ZXh0cmE+KFtcc1xTXSopPFwvZXh0cmE+LztmdW5jdGlvbiBJKHQsZSl7dmFyIHI9ZS5nZCxpPXIuX2Z1bGxMYXlvdXQsYT1lLmhvdmVybW9kZSxjPWUucm90YXRlTGFiZWxzLGY9ZS5iZ0NvbG9yLGQ9ZS5jb250YWluZXIsbT1lLm91dGVyQ29udGFpbmVyLHc9ZS5jb21tb25MYWJlbE9wdHN8fHt9LFQ9ZS5mb250RmFtaWx5fHx5LkhPVkVSRk9OVCxrPWUuZm9udFNpemV8fHkuSE9WRVJGT05UU0laRSxBPXRbMF0sRT1BLnhhLEw9QS55YSxQPWEuY2hhckF0KDApLEk9QVtQKyJMYWJlbCJdLHo9VihyLG0pLEQ9ei50b3AsUj16LndpZHRoLEY9ei5oZWlnaHQsQj12b2lkIDAhPT1JJiZBLmRpc3RhbmNlPD1lLmhvdmVyZGlzdGFuY2UmJigieCI9PT1hfHwieSI9PT1hKTtpZihCKXt2YXIgTixqLFU9ITA7Zm9yKE49MDtOPHQubGVuZ3RoO04rKylpZihVJiZ2b2lkIDA9PT10W05dLnpMYWJlbCYmKFU9ITEpLGo9dFtOXS5ob3ZlcmluZm98fHRbTl0udHJhY2UuaG92ZXJpbmZvKXt2YXIgSD1BcnJheS5pc0FycmF5KGopP2o6ai5zcGxpdCgiKyIpO2lmKC0xPT09SC5pbmRleE9mKCJhbGwiKSYmLTE9PT1ILmluZGV4T2YoYSkpe0I9ITE7YnJlYWt9fVUmJihCPSExKX12YXIgcT1kLnNlbGVjdEFsbCgiZy5heGlzdGV4dCIpLmRhdGEoQj9bMF06W10pO2lmKHEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJheGlzdGV4dCIsITApLHEuZXhpdCgpLnJlbW92ZSgpLHEuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKSxlPW8uZW5zdXJlU2luZ2xlKHQsInBhdGgiLCIiLChmdW5jdGlvbih0KXt0LnN0eWxlKHsic3Ryb2tlLXdpZHRoIjoiMXB4In0pfSkpLGw9by5lbnN1cmVTaW5nbGUodCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz13LmJnY29sb3J8fHAuZGVmYXVsdExpbmUsZj13LmJvcmRlcmNvbG9yfHxwLmNvbnRyYXN0KGMpLGQ9cC5jb250cmFzdChjKSxtPXtmYW1pbHk6dy5mb250LmZhbWlseXx8VCxzaXplOncuZm9udC5zaXplfHxrLGNvbG9yOncuZm9udC5jb2xvcnx8ZH07ZS5zdHlsZSh7ZmlsbDpjLHN0cm9rZTpmfSksbC50ZXh0KEkpLmNhbGwoaC5mb250LG0pLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpLHQuYXR0cigidHJhbnNmb3JtIiwiIik7dmFyIGcsdix5PVYocixsLm5vZGUoKSk7aWYoIngiPT09YSl7dmFyIHg9InRvcCI9PT1FLnNpZGU/Ii0iOiIiO2wuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKHUucG9zaXRpb25UZXh0LDAsInRvcCI9PT1FLnNpZGU/RC15LmJvdHRvbS1NLVM6RC15LnRvcCtNK1MpLGc9RS5fb2Zmc2V0KyhBLngwK0EueDEpLzIsdj1MLl9vZmZzZXQrKCJ0b3AiPT09RS5zaWRlPzA6TC5fbGVuZ3RoKTt2YXIgYj15LndpZHRoLzIrUztnPGI/KGc9YixlLmF0dHIoImQiLCJNLSIrKGItTSkrIiwwTC0iKyhiLTIqTSkrIiwiK3grTSsiSCIrKFMreS53aWR0aC8yKSsidiIreCsoMipTK3kuaGVpZ2h0KSsiSC0iK2IrIlYiK3grTSsiWiIpKTpnPmkud2lkdGgtYj8oZz1pLndpZHRoLWIsZS5hdHRyKCJkIiwiTSIrKGItTSkrIiwwTCIrYisiLCIreCtNKyJ2Iit4KygyKlMreS5oZWlnaHQpKyJILSIrYisiViIreCtNKyJIIisoYi0yKk0pKyJaIikpOmUuYXR0cigiZCIsIk0wLDBMIitNKyIsIit4K00rIkgiKyhTK3kud2lkdGgvMikrInYiK3grKDIqUyt5LmhlaWdodCkrIkgtIisoUyt5LndpZHRoLzIpKyJWIit4K00rIkgtIitNKyJaIil9ZWxzZXt2YXIgXyxDLFA7InJpZ2h0Ij09PUwuc2lkZT8oXz0ic3RhcnQiLEM9MSxQPSIiLGc9RS5fb2Zmc2V0K0UuX2xlbmd0aCk6KF89ImVuZCIsQz0tMSxQPSItIixnPUUuX29mZnNldCksdj1MLl9vZmZzZXQrKEEueTArQS55MSkvMixsLmF0dHIoInRleHQtYW5jaG9yIixfKSxlLmF0dHIoImQiLCJNMCwwTCIrUCtNKyIsIitNKyJWIisoUyt5LmhlaWdodC8yKSsiaCIrUCsoMipTK3kud2lkdGgpKyJWLSIrKFMreS5oZWlnaHQvMikrIkgiK1ArTSsiVi0iK00rIloiKTt2YXIgTyx6PXkuaGVpZ2h0LzIsUj1ELXkudG9wLXosRj0iY2xpcCIraS5fdWlkKyJjb21tb25sYWJlbCIrTC5faWQ7aWYoZzx5LndpZHRoKzIqUytNKXtPPSJNLSIrKE0rUykrIi0iK3orImgtIisoeS53aWR0aC1TKSsiViIreisiaCIrKHkud2lkdGgtUykrIloiO3ZhciBCPXkud2lkdGgtZytTO3UucG9zaXRpb25UZXh0KGwsQixSKSwiZW5kIj09PV8mJmwuc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1oLnRlc3Rlci5hcHBlbmQoInRleHQiKS50ZXh0KHQudGV4dCgpKS5jYWxsKGguZm9udCxtKSxpPVYocixlLm5vZGUoKSk7TWF0aC5yb3VuZChpLndpZHRoKTxNYXRoLnJvdW5kKHkud2lkdGgpJiZ0LmF0dHIoIngiLEItaS53aWR0aCksZS5yZW1vdmUoKX0pKX1lbHNlIHUucG9zaXRpb25UZXh0KGwsQyooUytNKSxSKSxPPW51bGw7dmFyIE49aS5fdG9wY2xpcHMuc2VsZWN0QWxsKCIjIitGKS5kYXRhKE8/WzBdOltdKTtOLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixGKS5hcHBlbmQoInBhdGgiKSxOLmV4aXQoKS5yZW1vdmUoKSxOLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE8pLGguc2V0Q2xpcFVybChsLE8/RjpudWxsLHIpfXQuYXR0cigidHJhbnNmb3JtIixzKGcsdikpfSkpLHYuaXNVbmlmaWVkSG92ZXIoYSkpe2lmKGQuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLnJlbW92ZSgpLDA9PT10Lmxlbmd0aClyZXR1cm47dmFyIEc9aS5ob3ZlcmxhYmVsLFk9Ry5mb250LFc9e3Nob3dsZWdlbmQ6ITAsbGVnZW5kOnt0aXRsZTp7dGV4dDpJLGZvbnQ6WX0sZm9udDpZLGJnY29sb3I6Ry5iZ2NvbG9yLGJvcmRlcmNvbG9yOkcuYm9yZGVyY29sb3IsYm9yZGVyd2lkdGg6MSx0cmFjZWdyb3VwZ2FwOjcsdHJhY2VvcmRlcjppLmxlZ2VuZD9pLmxlZ2VuZC50cmFjZW9yZGVyOnZvaWQgMCxvcmllbnRhdGlvbjoidiJ9fSxYPXt9O3goVyxYLHIuX2Z1bGxEYXRhKTt2YXIgWj1YLmxlZ2VuZDtaLmVudHJpZXM9W107Zm9yKHZhciBKPTA7Sjx0Lmxlbmd0aDtKKyspe3ZhciBLPU8odFtKXSwhMCxhLGksSSksUT1LWzBdLCQ9S1sxXSx0dD10W0pdO3R0Lm5hbWU9JCx0dC50ZXh0PSIiIT09JD8kKyIgOiAiK1E6UTt2YXIgZXQ9dHQuY2RbdHQuaW5kZXhdO2V0JiYoZXQubWMmJih0dC5tYz1ldC5tYyksZXQubWNjJiYodHQubWM9ZXQubWNjKSxldC5tbGMmJih0dC5tbGM9ZXQubWxjKSxldC5tbGNjJiYodHQubWxjPWV0Lm1sY2MpLGV0Lm1sdyYmKHR0Lm1sdz1ldC5tbHcpLGV0Lm1yYyYmKHR0Lm1yYz1ldC5tcmMpLGV0LmRpciYmKHR0LmRpcj1ldC5kaXIpKSx0dC5fZGlzdGluY3Q9ITAsWi5lbnRyaWVzLnB1c2goW3R0XSl9Wi5lbnRyaWVzLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0udHJhY2UuaW5kZXgtZVswXS50cmFjZS5pbmRleH0pKSxaLmxheWVyPWQsWi5faW5Ib3Zlcj0hMCxaLl9ncm91cFRpdGxlRm9udD1ZLGIocixaKTt2YXIgcnQsbnQsaXQsYXQsb3Q9ZC5zZWxlY3QoImcubGVnZW5kIiksc3Q9VihyLG90Lm5vZGUoKSksbHQ9c3Qud2lkdGgrMipTLGN0PXN0LmhlaWdodCsyKlMsdXQ9dFswXSxmdD0odXQueDArdXQueDEpLzIsaHQ9KHV0LnkwK3V0LnkxKS8yLHB0PSEoZy50cmFjZUlzKHV0LnRyYWNlLCJiYXItbGlrZSIpfHxnLnRyYWNlSXModXQudHJhY2UsImJveC12aW9saW4iKSk7InkiPT09UD9wdD8obnQ9aHQtUyxydD1odCtTKToobnQ9TWF0aC5taW4uYXBwbHkobnVsbCx0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKHQueTAsdC55MSl9KSkpLHJ0PU1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LnkwLHQueTEpfSkpKSk6bnQ9cnQ9by5tZWFuKHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4odC55MCt0LnkxKS8yfSkpKS1jdC8yLCJ4Ij09PVA/cHQ/KGl0PWZ0K1MsYXQ9ZnQtUyk6KGl0PU1hdGgubWF4LmFwcGx5KG51bGwsdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCh0LngwLHQueDEpfSkpKSxhdD1NYXRoLm1pbi5hcHBseShudWxsLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4odC54MCx0LngxKX0pKSkpOml0PWF0PW8ubWVhbih0Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuKHQueDArdC54MSkvMn0pKSktbHQvMjt2YXIgZHQsbXQsZ3Q9RS5fb2Zmc2V0LHZ0PUwuX29mZnNldDtyZXR1cm4gYXQrPWd0LWx0LG50Kz12dC1jdCxkdD0oaXQrPWd0KStsdDxSJiZpdD49MD9pdDphdCtsdDxSJiZhdD49MD9hdDpndCtsdDxSP2d0Oml0LWZ0PGZ0LWF0K2x0P1ItbHQ6MCxkdCs9UyxtdD0ocnQrPXZ0KStjdDxGJiZydD49MD9ydDpudCtjdDxGJiZudD49MD9udDp2dCtjdDxGP3Z0OnJ0LWh0PGh0LW50K2N0P0YtY3Q6MCxtdCs9UyxvdC5hdHRyKCJ0cmFuc2Zvcm0iLHMoZHQtMSxtdC0xKSksb3R9dmFyIHl0PWQuc2VsZWN0QWxsKCJnLmhvdmVydGV4dCIpLmRhdGEodCwoZnVuY3Rpb24odCl7cmV0dXJuIEModCl9KSk7cmV0dXJuIHl0LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiaG92ZXJ0ZXh0IiwhMCkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTt0LmFwcGVuZCgicmVjdCIpLmNhbGwocC5maWxsLHAuYWRkT3BhY2l0eShmLC44KSksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJuYW1lIiwhMCksdC5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwiMXB4IiksdC5hcHBlbmQoInRleHQiKS5jbGFzc2VkKCJudW1zIiwhMCkuY2FsbChoLmZvbnQsVCxrKX0pKSx5dC5leGl0KCkucmVtb3ZlKCkseXQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuYXR0cigidHJhbnNmb3JtIiwiIiksbz10LmNvbG9yO0FycmF5LmlzQXJyYXkobykmJihvPW9bdC5ldmVudERhdGFbMF0ucG9pbnROdW1iZXJdKTt2YXIgZD10LmJnY29sb3J8fG8sbT1wLmNvbWJpbmUocC5vcGFjaXR5KGQpP2Q6cC5kZWZhdWx0TGluZSxmKSxnPXAuY29tYmluZShwLm9wYWNpdHkobyk/bzpwLmRlZmF1bHRMaW5lLGYpLHY9dC5ib3JkZXJDb2xvcnx8cC5jb250cmFzdChtKSx5PU8odCxCLGEsaSxJLGUpLHg9eVswXSxiPXlbMV0sdz1lLnNlbGVjdCgidGV4dC5udW1zIikuY2FsbChoLmZvbnQsdC5mb250RmFtaWx5fHxULHQuZm9udFNpemV8fGssdC5mb250Q29sb3J8fHYpLnRleHQoeCkuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbCh1LnBvc2l0aW9uVGV4dCwwLDApLmNhbGwodS5jb252ZXJ0VG9Uc3BhbnMsciksQT1lLnNlbGVjdCgidGV4dC5uYW1lIiksRT0wLEw9MDtpZihiJiZiIT09eCl7QS5jYWxsKGguZm9udCx0LmZvbnRGYW1pbHl8fFQsdC5mb250U2l6ZXx8ayxnKS50ZXh0KGIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwodS5wb3NpdGlvblRleHQsMCwwKS5jYWxsKHUuY29udmVydFRvVHNwYW5zLHIpO3ZhciBDPVYocixBLm5vZGUoKSk7RT1DLndpZHRoKzIqUyxMPUMuaGVpZ2h0KzIqU31lbHNlIEEucmVtb3ZlKCksZS5zZWxlY3QoInJlY3QiKS5yZW1vdmUoKTtlLnNlbGVjdCgicGF0aCIpLnN0eWxlKHtmaWxsOm0sc3Ryb2tlOnZ9KTt2YXIgUD10LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMix6PXQueWEuX29mZnNldCsodC55MCt0LnkxKS8yLE49TWF0aC5hYnModC54MS10LngwKSxqPU1hdGguYWJzKHQueTEtdC55MCksVT1WKHIsdy5ub2RlKCkpLEg9VS53aWR0aC9pLl9pbnZTY2FsZVgscT1VLmhlaWdodC9pLl9pbnZTY2FsZVk7dC50eTA9KEQtVS50b3ApL2kuX2ludlNjYWxlWSx0LmJ4PUgrMipTLHQuYnk9TWF0aC5tYXgocSsyKlMsTCksdC5hbmNob3I9InN0YXJ0Iix0LnR4d2lkdGg9SCx0LnR4MndpZHRoPUUsdC5vZmZzZXQ9MDt2YXIgRyxZLFc9KEgrTStTK0UpKmkuX2ludlNjYWxlWDtpZihjKXQucG9zPVAsRz16K2ovMitXPD1GLFk9ei1qLzItVz49MCwidG9wIiE9PXQuaWRlYWxBbGlnbiYmR3x8IVk/Rz8oeis9ai8yLHQuYW5jaG9yPSJzdGFydCIpOnQuYW5jaG9yPSJtaWRkbGUiOih6LT1qLzIsdC5hbmNob3I9ImVuZCIpO2Vsc2UgaWYodC5wb3M9eixHPVArTi8yK1c8PVIsWT1QLU4vMi1XPj0wLCJsZWZ0IiE9PXQuaWRlYWxBbGlnbiYmR3x8IVkpaWYoRylQKz1OLzIsdC5hbmNob3I9InN0YXJ0IjtlbHNle3QuYW5jaG9yPSJtaWRkbGUiO3ZhciBYPVcvMixaPVArWC1SLEo9UC1YO1o+MCYmKFAtPVopLEo8MCYmKFArPS1KKX1lbHNlIFAtPU4vMix0LmFuY2hvcj0iZW5kIjt3LmF0dHIoInRleHQtYW5jaG9yIix0LmFuY2hvciksRSYmQS5hdHRyKCJ0ZXh0LWFuY2hvciIsdC5hbmNob3IpLGUuYXR0cigidHJhbnNmb3JtIixzKFAseikrKGM/bChfKToiIikpfSkpLHl0fWZ1bmN0aW9uIE8odCxlLHIsbixpLGEpe3ZhciBzPSIiLGw9IiI7dm9pZCAwIT09dC5uYW1lT3ZlcnJpZGUmJih0Lm5hbWU9dC5uYW1lT3ZlcnJpZGUpLHQubmFtZSYmKHQudHJhY2UuX21ldGEmJih0Lm5hbWU9by50ZW1wbGF0ZVN0cmluZyh0Lm5hbWUsdC50cmFjZS5fbWV0YSkpLHM9Qih0Lm5hbWUsdC5uYW1lTGVuZ3RoKSk7dmFyIGM9ci5jaGFyQXQoMCksdT0ieCI9PT1jPyJ5IjoieCI7dm9pZCAwIT09dC56TGFiZWw/KHZvaWQgMCE9PXQueExhYmVsJiYobCs9Ing6ICIrdC54TGFiZWwrIjxicj4iKSx2b2lkIDAhPT10LnlMYWJlbCYmKGwrPSJ5OiAiK3QueUxhYmVsKyI8YnI+IiksImNob3JvcGxldGgiIT09dC50cmFjZS50eXBlJiYiY2hvcm9wbGV0aG1hcGJveCIhPT10LnRyYWNlLnR5cGUmJihsKz0obD8iejogIjoiIikrdC56TGFiZWwpKTplJiZ0W2MrIkxhYmVsIl09PT1pP2w9dFt1KyJMYWJlbCJdfHwiIjp2b2lkIDA9PT10LnhMYWJlbD92b2lkIDAhPT10LnlMYWJlbCYmInNjYXR0ZXJjYXJwZXQiIT09dC50cmFjZS50eXBlJiYobD10LnlMYWJlbCk6bD12b2lkIDA9PT10LnlMYWJlbD90LnhMYWJlbDoiKCIrdC54TGFiZWwrIiwgIit0LnlMYWJlbCsiKSIsIXQudGV4dCYmMCE9PXQudGV4dHx8QXJyYXkuaXNBcnJheSh0LnRleHQpfHwobCs9KGw/Ijxicj4iOiIiKSt0LnRleHQpLHZvaWQgMCE9PXQuZXh0cmFUZXh0JiYobCs9KGw/Ijxicj4iOiIiKSt0LmV4dHJhVGV4dCksYSYmIiI9PT1sJiYhdC5ob3ZlcnRlbXBsYXRlJiYoIiI9PT1zJiZhLnJlbW92ZSgpLGw9cyk7dmFyIGY9dC5ob3ZlcnRlbXBsYXRlfHwhMTtpZihmKXt2YXIgaD10LmhvdmVydGVtcGxhdGVMYWJlbHN8fHQ7dFtjKyJMYWJlbCJdIT09aSYmKGhbYysib3RoZXIiXT1oW2MrIlZhbCJdLGhbYysib3RoZXJMYWJlbCJdPWhbYysiTGFiZWwiXSksbD0obD1vLmhvdmVydGVtcGxhdGVTdHJpbmcoZixoLG4uX2QzbG9jYWxlLHQuZXZlbnREYXRhWzBdfHx7fSx0LnRyYWNlLl9tZXRhKSkucmVwbGFjZShQLChmdW5jdGlvbihlLHIpe3JldHVybiBzPUIocix0Lm5hbWVMZW5ndGgpLCIifSkpfXJldHVybltsLHNdfWZ1bmN0aW9uIHoodCxlLHIsaSl7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQqcn0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdCppfTt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHQuZGVsKXJldHVybiByLnJlbW92ZSgpO3ZhciBpPXIuc2VsZWN0KCJ0ZXh0Lm51bXMiKSxzPXQuYW5jaG9yLGw9ImVuZCI9PT1zPy0xOjEsYz17c3RhcnQ6MSxlbmQ6LTEsbWlkZGxlOjB9W3NdLGY9YyooTStTKSxwPWYrYyoodC50eHdpZHRoK1MpLGQ9MCxtPXQub2Zmc2V0LGc9Im1pZGRsZSI9PT1zO2cmJihmLT10LnR4MndpZHRoLzIscCs9dC50eHdpZHRoLzIrUyksZSYmKG0qPS1BLGQ9dC5vZmZzZXQqayksci5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixnPyJNLSIrYSh0LmJ4LzIrdC50eDJ3aWR0aC8yKSsiLCIrbyhtLXQuYnkvMikrImgiK2EodC5ieCkrInYiK28odC5ieSkrImgtIithKHQuYngpKyJaIjoiTTAsMEwiK2EobCpNK2QpKyIsIitvKE0rbSkrInYiK28odC5ieS8yLU0pKyJoIithKGwqdC5ieCkrInYtIitvKHQuYnkpKyJIIithKGwqTStkKSsiViIrbyhtLU0pKyJaIik7dmFyIHY9ZCtmLHk9bSt0LnR5MC10LmJ5LzIrUyx4PXQudGV4dEFsaWdufHwiYXV0byI7ImF1dG8iIT09eCYmKCJsZWZ0Ij09PXgmJiJzdGFydCIhPT1zPyhpLmF0dHIoInRleHQtYW5jaG9yIiwic3RhcnQiKSx2PWc/LXQuYngvMi10LnR4MndpZHRoLzIrUzotdC5ieC1TKToicmlnaHQiPT09eCYmImVuZCIhPT1zJiYoaS5hdHRyKCJ0ZXh0LWFuY2hvciIsImVuZCIpLHY9Zz90LmJ4LzItdC50eDJ3aWR0aC8yLVM6dC5ieCtTKSksaS5jYWxsKHUucG9zaXRpb25UZXh0LGEodiksbyh5KSksdC50eDJ3aWR0aCYmKHIuc2VsZWN0KCJ0ZXh0Lm5hbWUiKS5jYWxsKHUucG9zaXRpb25UZXh0LGEocCtjKlMrZCksbyhtK3QudHkwLXQuYnkvMitTKSksci5zZWxlY3QoInJlY3QiKS5jYWxsKGguc2V0UmVjdCxhKHArKGMtMSkqdC50eDJ3aWR0aC8yK2QpLG8obS10LmJ5LzItMSksYSh0LnR4MndpZHRoKSxvKHQuYnkrMikpKX0pKX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI9dC5pbmRleCxuPXQudHJhY2V8fHt9LGE9dC5jZFswXSxzPXQuY2Rbcl18fHt9O2Z1bmN0aW9uIGwodCl7cmV0dXJuIHR8fGkodCkmJjA9PT10fXZhciBjPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCxlKXt2YXIgaT1vLmNhc3RPcHRpb24oYSxyLHQpO3JldHVybiBsKGkpP2k6by5leHRyYWN0T3B0aW9uKHt9LG4sIiIsZSl9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8uZXh0cmFjdE9wdGlvbihzLG4sdCxlKX07ZnVuY3Rpb24gdShlLHIsbil7dmFyIGk9YyhyLG4pO2woaSkmJih0W2VdPWkpfWlmKHUoImhvdmVyaW5mbyIsImhpIiwiaG92ZXJpbmZvIiksdSgiYmdjb2xvciIsImhiZyIsImhvdmVybGFiZWwuYmdjb2xvciIpLHUoImJvcmRlckNvbG9yIiwiaGJjIiwiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLHUoImZvbnRGYW1pbHkiLCJodGYiLCJob3ZlcmxhYmVsLmZvbnQuZmFtaWx5IiksdSgiZm9udFNpemUiLCJodHMiLCJob3ZlcmxhYmVsLmZvbnQuc2l6ZSIpLHUoImZvbnRDb2xvciIsImh0YyIsImhvdmVybGFiZWwuZm9udC5jb2xvciIpLHUoIm5hbWVMZW5ndGgiLCJobmwiLCJob3ZlcmxhYmVsLm5hbWVsZW5ndGgiKSx1KCJ0ZXh0QWxpZ24iLCJodGEiLCJob3ZlcmxhYmVsLmFsaWduIiksdC5wb3NyZWY9InkiPT09ZXx8ImNsb3Nlc3QiPT09ZSYmImgiPT09bi5vcmllbnRhdGlvbj90LnhhLl9vZmZzZXQrKHQueDArdC54MSkvMjp0LnlhLl9vZmZzZXQrKHQueTArdC55MSkvMix0LngwPW8uY29uc3RyYWluKHQueDAsMCx0LnhhLl9sZW5ndGgpLHQueDE9by5jb25zdHJhaW4odC54MSwwLHQueGEuX2xlbmd0aCksdC55MD1vLmNvbnN0cmFpbih0LnkwLDAsdC55YS5fbGVuZ3RoKSx0LnkxPW8uY29uc3RyYWluKHQueTEsMCx0LnlhLl9sZW5ndGgpLHZvaWQgMCE9PXQueExhYmVsVmFsJiYodC54TGFiZWw9InhMYWJlbCJpbiB0P3QueExhYmVsOm0uaG92ZXJMYWJlbFRleHQodC54YSx0LnhMYWJlbFZhbCxuLnhob3ZlcmZvcm1hdCksdC54VmFsPXQueGEuYzJkKHQueExhYmVsVmFsKSksdm9pZCAwIT09dC55TGFiZWxWYWwmJih0LnlMYWJlbD0ieUxhYmVsImluIHQ/dC55TGFiZWw6bS5ob3ZlckxhYmVsVGV4dCh0LnlhLHQueUxhYmVsVmFsLG4ueWhvdmVyZm9ybWF0KSx0LnlWYWw9dC55YS5jMmQodC55TGFiZWxWYWwpKSx2b2lkIDAhPT10LnpMYWJlbFZhbCYmdm9pZCAwPT09dC56TGFiZWwmJih0LnpMYWJlbD1TdHJpbmcodC56TGFiZWxWYWwpKSwhKGlzTmFOKHQueGVycil8fCJsb2ciPT09dC54YS50eXBlJiZ0LnhlcnI8PTApKXt2YXIgZj1tLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueGVycm5lZz90LnhMYWJlbCs9IiArIitmKyIgLyAtIittLnRpY2tUZXh0KHQueGEsdC54YS5jMmwodC54ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueExhYmVsKz0iIFx4YjEgIitmLCJ4Ij09PWUmJih0LmRpc3RhbmNlKz0xKX1pZighKGlzTmFOKHQueWVycil8fCJsb2ciPT09dC55YS50eXBlJiZ0LnllcnI8PTApKXt2YXIgaD1tLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJyKSwiaG92ZXIiKS50ZXh0O3ZvaWQgMCE9PXQueWVycm5lZz90LnlMYWJlbCs9IiArIitoKyIgLyAtIittLnRpY2tUZXh0KHQueWEsdC55YS5jMmwodC55ZXJybmVnKSwiaG92ZXIiKS50ZXh0OnQueUxhYmVsKz0iIFx4YjEgIitoLCJ5Ij09PWUmJih0LmRpc3RhbmNlKz0xKX12YXIgcD10LmhvdmVyaW5mb3x8dC50cmFjZS5ob3ZlcmluZm87cmV0dXJuIHAmJiJhbGwiIT09cCYmKC0xPT09KHA9QXJyYXkuaXNBcnJheShwKT9wOnAuc3BsaXQoIisiKSkuaW5kZXhPZigieCIpJiYodC54TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieSIpJiYodC55TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigieiIpJiYodC56TGFiZWw9dm9pZCAwKSwtMT09PXAuaW5kZXhPZigidGV4dCIpJiYodC50ZXh0PXZvaWQgMCksLTE9PT1wLmluZGV4T2YoIm5hbWUiKSYmKHQubmFtZT12b2lkIDApKSx0fWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuLGksbz1yLmNvbnRhaW5lcixzPXIuZnVsbExheW91dCxsPXMuX3NpemUsYz1yLmV2ZW50LHU9ISFlLmhMaW5lUG9pbnQsZj0hIWUudkxpbmVQb2ludDtpZihvLnNlbGVjdEFsbCgiLnNwaWtlbGluZSIpLnJlbW92ZSgpLGZ8fHUpe3ZhciBkPXAuY29tYmluZShzLnBsb3RfYmdjb2xvcixzLnBhcGVyX2JnY29sb3IpO2lmKHUpe3ZhciBnLHYseT1lLmhMaW5lUG9pbnQ7bj15JiZ5LnhhLCJjdXJzb3IiPT09KGk9eSYmeS55YSkuc3Bpa2VzbmFwPyhnPWMucG9pbnRlclgsdj1jLnBvaW50ZXJZKTooZz1uLl9vZmZzZXQreS54LHY9aS5fb2Zmc2V0K3kueSk7dmFyIHgsYixfPWEucmVhZGFiaWxpdHkoeS5jb2xvcixkKTwxLjU/cC5jb250cmFzdChkKTp5LmNvbG9yLHc9aS5zcGlrZW1vZGUsVD1pLnNwaWtldGhpY2tuZXNzLGs9aS5zcGlrZWNvbG9yfHxfLEE9bS5nZXRQeFBvc2l0aW9uKHQsaSk7aWYoLTEhPT13LmluZGV4T2YoInRvYXhpcyIpfHwtMSE9PXcuaW5kZXhPZigiYWNyb3NzIikpe2lmKC0xIT09dy5pbmRleE9mKCJ0b2F4aXMiKSYmKHg9QSxiPWcpLC0xIT09dy5pbmRleE9mKCJhY3Jvc3MiKSl7dmFyIE09aS5fY291bnRlckRvbWFpbk1pbixTPWkuX2NvdW50ZXJEb21haW5NYXg7ImZyZWUiPT09aS5hbmNob3ImJihNPU1hdGgubWluKE0saS5wb3NpdGlvbiksUz1NYXRoLm1heChTLGkucG9zaXRpb24pKSx4PWwubCtNKmwudyxiPWwubCtTKmwud31vLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOngseDI6Yix5MTp2LHkyOnYsInN0cm9rZS13aWR0aCI6VCxzdHJva2U6aywic3Ryb2tlLWRhc2hhcnJheSI6aC5kYXNoU3R5bGUoaS5zcGlrZWRhc2gsVCl9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApLG8uaW5zZXJ0KCJsaW5lIiwiOmZpcnN0LWNoaWxkIikuYXR0cih7eDE6eCx4MjpiLHkxOnYseTI6diwic3Ryb2tlLXdpZHRoIjpUKzIsc3Ryb2tlOmR9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKS5jbGFzc2VkKCJjcmlzcCIsITApfS0xIT09dy5pbmRleE9mKCJtYXJrZXIiKSYmby5pbnNlcnQoImNpcmNsZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe2N4OkErKCJyaWdodCIhPT1pLnNpZGU/VDotVCksY3k6dixyOlQsZmlsbDprfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCl9aWYoZil7dmFyIEUsTCxDPWUudkxpbmVQb2ludDtuPUMmJkMueGEsaT1DJiZDLnlhLCJjdXJzb3IiPT09bi5zcGlrZXNuYXA/KEU9Yy5wb2ludGVyWCxMPWMucG9pbnRlclkpOihFPW4uX29mZnNldCtDLngsTD1pLl9vZmZzZXQrQy55KTt2YXIgUCxJLE89YS5yZWFkYWJpbGl0eShDLmNvbG9yLGQpPDEuNT9wLmNvbnRyYXN0KGQpOkMuY29sb3Isej1uLnNwaWtlbW9kZSxEPW4uc3Bpa2V0aGlja25lc3MsUj1uLnNwaWtlY29sb3J8fE8sRj1tLmdldFB4UG9zaXRpb24odCxuKTtpZigtMSE9PXouaW5kZXhPZigidG9heGlzIil8fC0xIT09ei5pbmRleE9mKCJhY3Jvc3MiKSl7aWYoLTEhPT16LmluZGV4T2YoInRvYXhpcyIpJiYoUD1GLEk9TCksLTEhPT16LmluZGV4T2YoImFjcm9zcyIpKXt2YXIgQj1uLl9jb3VudGVyRG9tYWluTWluLE49bi5fY291bnRlckRvbWFpbk1heDsiZnJlZSI9PT1uLmFuY2hvciYmKEI9TWF0aC5taW4oQixuLnBvc2l0aW9uKSxOPU1hdGgubWF4KE4sbi5wb3NpdGlvbikpLFA9bC50KygxLU4pKmwuaCxJPWwudCsoMS1CKSpsLmh9by5pbnNlcnQoImxpbmUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHt4MTpFLHgyOkUseTE6UCx5MjpJLCJzdHJva2Utd2lkdGgiOkQsc3Ryb2tlOlIsInN0cm9rZS1kYXNoYXJyYXkiOmguZGFzaFN0eWxlKG4uc3Bpa2VkYXNoLEQpfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxvLmluc2VydCgibGluZSIsIjpmaXJzdC1jaGlsZCIpLmF0dHIoe3gxOkUseDI6RSx5MTpQLHkyOkksInN0cm9rZS13aWR0aCI6RCsyLHN0cm9rZTpkfSkuY2xhc3NlZCgic3Bpa2VsaW5lIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKX0tMSE9PXouaW5kZXhPZigibWFya2VyIikmJm8uaW5zZXJ0KCJjaXJjbGUiLCI6Zmlyc3QtY2hpbGQiKS5hdHRyKHtjeDpFLGN5OkYtKCJ0b3AiIT09bi5zaWRlP0Q6LUQpLHI6RCxmaWxsOlJ9KS5jbGFzc2VkKCJzcGlrZWxpbmUiLCEwKX19fWZ1bmN0aW9uIEYodCxlKXtyZXR1cm4hZXx8KGUudkxpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLnZMaW5lUG9pbnR8fGUuaExpbmVQb2ludCE9PXQuX3NwaWtlcG9pbnRzLmhMaW5lUG9pbnQpfWZ1bmN0aW9uIEIodCxlKXtyZXR1cm4gdS5wbGFpblRleHQodHx8IiIse2xlbjplLGFsbG93ZWRUYWdzOlsiYnIiLCJzdWIiLCJzdXAiLCJiIiwiaSIsImVtIl19KX1mdW5jdGlvbiBOKHQsZSxyKXt2YXIgbj1lW3QrImEiXSxpPWVbdCsiVmFsIl0sYT1lLmNkWzBdO2lmKCJjYXRlZ29yeSI9PT1uLnR5cGUpaT1uLl9jYXRlZ29yaWVzTWFwW2ldO2Vsc2UgaWYoImRhdGUiPT09bi50eXBlKXt2YXIgbz1lLnRyYWNlW3QrInBlcmlvZGFsaWdubWVudCJdO2lmKG8pe3ZhciBzPWUuY2RbZS5pbmRleF0sbD1zW3QrIlN0YXJ0Il07dm9pZCAwPT09bCYmKGw9c1t0XSk7dmFyIGM9c1t0KyJFbmQiXTt2b2lkIDA9PT1jJiYoYz1zW3RdKTt2YXIgdT1jLWw7ImVuZCI9PT1vP2krPXU6Im1pZGRsZSI9PT1vJiYoaSs9dS8yKX1pPW4uZDJjKGkpfXJldHVybiBhJiZhLnQmJmEudC5wb3NMZXR0ZXI9PT1uLl9pZCYmKCJncm91cCIhPT1yLmJveG1vZGUmJiJncm91cCIhPT1yLnZpb2xpbm1vZGV8fChpKz1hLnQuZFBvcykpLGl9ZnVuY3Rpb24gaih0KXtyZXR1cm4gdC5vZmZzZXRUb3ArdC5jbGllbnRUb3B9ZnVuY3Rpb24gVSh0KXtyZXR1cm4gdC5vZmZzZXRMZWZ0K3QuY2xpZW50TGVmdH1mdW5jdGlvbiBWKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaT1uLngsYT1uLnkscz1pK24ud2lkdGgsbD1hK24uaGVpZ2h0LGM9by5hcHBseTNEVHJhbnNmb3JtKHIuX2ludlRyYW5zZm9ybSkoaSxhKSx1PW8uYXBwbHkzRFRyYW5zZm9ybShyLl9pbnZUcmFuc2Zvcm0pKHMsbCksZj1jWzBdLGg9Y1sxXSxwPXVbMF0sZD11WzFdO3JldHVybnt4OmYseTpoLHdpZHRoOnAtZixoZWlnaHQ6ZC1oLHRvcDpNYXRoLm1pbihoLGQpLGxlZnQ6TWF0aC5taW4oZixwKSxyaWdodDpNYXRoLm1heChmLHApLGJvdHRvbTpNYXRoLm1heChoLGQpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ldmVudHMiOjc2NSwiLi4vLi4vbGliL292ZXJyaWRlX2N1cnNvciI6Nzg3LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi9sZWdlbmQvZGVmYXVsdHMiOjY5MSwiLi4vbGVnZW5kL2RyYXciOjY5MiwiLi9jb25zdGFudHMiOjY3MywiLi9oZWxwZXJzIjo2NzUsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4vaGVscGVycyIpLmlzVW5pZmllZEhvdmVyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHQpe28uZm9udFt0XXx8KG8uZm9udFt0XT1lLmxlZ2VuZD9lLmxlZ2VuZC5mb250W3RdOmUuZm9udFt0XSl9bz1vfHx7fSxlJiZhKGUuaG92ZXJtb2RlKSYmKG8uZm9udHx8KG8uZm9udD17fSkscygic2l6ZSIpLHMoImZhbWlseSIpLHMoImNvbG9yIiksZS5sZWdlbmQ/KG8uYmdjb2xvcnx8KG8uYmdjb2xvcj1pLmNvbWJpbmUoZS5sZWdlbmQuYmdjb2xvcixlLnBhcGVyX2JnY29sb3IpKSxvLmJvcmRlcmNvbG9yfHwoby5ib3JkZXJjb2xvcj1lLmxlZ2VuZC5ib3JkZXJjb2xvcikpOm8uYmdjb2xvcnx8KG8uYmdjb2xvcj1lLnBhcGVyX2JnY29sb3IpKSxyKCJob3ZlcmxhYmVsLmJnY29sb3IiLG8uYmdjb2xvcikscigiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIsby5ib3JkZXJjb2xvcikscigiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIixvLm5hbWVsZW5ndGgpLG4uY29lcmNlRm9udChyLCJob3ZlcmxhYmVsLmZvbnQiLG8uZm9udCkscigiaG92ZXJsYWJlbC5hbGlnbiIsby5hbGlnbil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb2xvciI6NjM5LCIuL2hlbHBlcnMiOjY3NX1dLDY3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIHZvaWQgMCE9PWVbcl0/ZVtyXTpuLmNvZXJjZSh0LGUsaSxyLGEpfXJldHVybiByKCJjbGlja21vZGUiKSxyKCJob3Zlcm1vZGUiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MH1dLDY3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2RyYWdlbGVtZW50Iiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaG92ZXIiKTtlLmV4cG9ydHM9e21vZHVsZVR5cGU6ImNvbXBvbmVudCIsbmFtZToiZngiLGNvbnN0YW50czp0KCIuL2NvbnN0YW50cyIpLHNjaGVtYTp7bGF5b3V0OnN9LGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczpzLHN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzOnQoIi4vbGF5b3V0X2dsb2JhbF9kZWZhdWx0cyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksZ2V0RGlzdGFuY2VGdW5jdGlvbjpvLmdldERpc3RhbmNlRnVuY3Rpb24sZ2V0Q2xvc2VzdDpvLmdldENsb3Nlc3QsaW5ib3g6by5pbmJveCxxdWFkcmF0dXJlOm8ucXVhZHJhdHVyZSxhcHBlbmRBcnJheVBvaW50VmFsdWU6by5hcHBlbmRBcnJheVBvaW50VmFsdWUsY2FzdEhvdmVyT3B0aW9uOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsZSwiaG92ZXJsYWJlbC4iK3IpfSxjYXN0SG92ZXJpbmZvOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaS5jYXN0T3B0aW9uKHQsciwiaG92ZXJpbmZvIiwoZnVuY3Rpb24ocil7cmV0dXJuIGkuY29lcmNlSG92ZXJpbmZvKHtob3ZlcmluZm86cn0se19tb2R1bGU6dC5fbW9kdWxlfSxlKX0pKX0saG92ZXI6bC5ob3Zlcix1bmhvdmVyOmEudW5ob3Zlcixsb25lSG92ZXI6bC5sb25lSG92ZXIsbG9uZVVuaG92ZXI6ZnVuY3Rpb24odCl7dmFyIGU9aS5pc0QzU2VsZWN0aW9uKHQpP3Q6bi5zZWxlY3QodCk7ZS5zZWxlY3RBbGwoImcuaG92ZXJ0ZXh0IikucmVtb3ZlKCksZS5zZWxlY3RBbGwoIi5zcGlrZWxpbmUiKS5yZW1vdmUoKX0sY2xpY2s6dCgiLi9jbGljayIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi9hdHRyaWJ1dGVzIjo2NzAsIi4vY2FsYyI6NjcxLCIuL2NsaWNrIjo2NzIsIi4vY29uc3RhbnRzIjo2NzMsIi4vZGVmYXVsdHMiOjY3NCwiLi9oZWxwZXJzIjo2NzUsIi4vaG92ZXIiOjY3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwLCIuL2xheW91dF9kZWZhdWx0cyI6NjgxLCIuL2xheW91dF9nbG9iYWxfZGVmYXVsdHMiOjY4MiwiQHBsb3RseS9kMyI6NTh9XSw2ODA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpKHtlZGl0VHlwZToibm9uZSJ9KTtpLmZhbWlseS5kZmx0PW4uSE9WRVJGT05ULGkuc2l6ZS5kZmx0PW4uSE9WRVJGT05UU0laRSxlLmV4cG9ydHM9e2NsaWNrbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiZXZlbnQiLCJzZWxlY3QiXSxkZmx0OiJldmVudCIsZWRpdFR5cGU6InBsb3QiLGV4dHJhczpbIm5vbmUiXX0sZHJhZ21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInpvb20iLCJwYW4iLCJzZWxlY3QiLCJsYXNzbyIsImRyYXdjbG9zZWRwYXRoIiwiZHJhd29wZW5wYXRoIiwiZHJhd2xpbmUiLCJkcmF3cmVjdCIsImRyYXdjaXJjbGUiLCJvcmJpdCIsInR1cm50YWJsZSIsITFdLGRmbHQ6Inpvb20iLGVkaXRUeXBlOiJtb2RlYmFyIn0saG92ZXJtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsImNsb3Nlc3QiLCExLCJ4IHVuaWZpZWQiLCJ5IHVuaWZpZWQiXSxkZmx0OiJjbG9zZXN0IixlZGl0VHlwZToibW9kZWJhciJ9LGhvdmVyZGlzdGFuY2U6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjotMSxkZmx0OjIwLGVkaXRUeXBlOiJub25lIn0sc3Bpa2VkaXN0YW5jZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6LTEsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOntiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJub25lIn0sZm9udDppLGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwicmlnaHQiLCJhdXRvIl0sZGZsdDoiYXV0byIsZWRpdFR5cGU6Im5vbmUifSxuYW1lbGVuZ3RoOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46LTEsZGZsdDoxNSxlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJub25lIn0sc2VsZWN0ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJoIiwidiIsImQiLCJhbnkiXSxkZmx0OiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2NvbnN0YW50cyI6NjczfV0sNjgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiKSxvPXQoIi4vaG92ZXJsYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSkmJihyKCJob3ZlcmRpc3RhbmNlIikscigic3Bpa2VkaXN0YW5jZSIpKSwic2VsZWN0Ij09PXIoImRyYWdtb2RlIikmJnIoInNlbGVjdGRpcmVjdGlvbiIpO3ZhciBzPWUuX2hhcygibWFwYm94IiksbD1lLl9oYXMoImdlbyIpLGM9ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDsiem9vbSI9PT1lLmRyYWdtb2RlJiYoKHN8fGwpJiYxPT09Y3x8cyYmbCYmMj09PWMpJiYoZS5kcmFnbW9kZT0icGFuIiksbyh0LGUscil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY3NywiLi9ob3Zlcm1vZGVfZGVmYXVsdHMiOjY3OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sNjgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9ob3ZlcmxhYmVsX2RlZmF1bHRzIiksYT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUsKGZ1bmN0aW9uKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2hvdmVybGFiZWxfZGVmYXVsdHMiOjY3NywiLi9sYXlvdXRfYXR0cmlidXRlcyI6NjgwfV0sNjgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcixhPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuaWRSZWdleCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxsPXtyb3dzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MSxlZGl0VHlwZToicGxvdCJ9LHJvd29yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgdG8gYm90dG9tIiwiYm90dG9tIHRvIHRvcCJdLGRmbHQ6InRvcCB0byBib3R0b20iLGVkaXRUeXBlOiJwbG90In0sY29sdW1uczp7dmFsVHlwZToiaW50ZWdlciIsbWluOjEsZWRpdFR5cGU6InBsb3QifSxzdWJwbG90czp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxkaW1lbnNpb25zOjIsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbaSgieHkiKS50b1N0cmluZygpLCIiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0seGF4ZXM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbby54LnRvU3RyaW5nKCksIiJdLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx5YXhlczp7dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxpdGVtczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltvLnkudG9TdHJpbmcoKSwiIl0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LHBhdHRlcm46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZGVwZW5kZW50IiwiY291cGxlZCJdLGRmbHQ6ImNvdXBsZWQiLGVkaXRUeXBlOiJwbG90In0seGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHlnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSxkb21haW46YSh7bmFtZToiZ3JpZCIsZWRpdFR5cGU6InBsb3QiLG5vR3JpZENlbGw6ITB9LHt9KSx4c2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90dG9tIiwiYm90dG9tIHBsb3QiLCJ0b3AgcGxvdCIsInRvcCJdLGRmbHQ6ImJvdHRvbSBwbG90IixlZGl0VHlwZToicGxvdCJ9LHlzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwibGVmdCBwbG90IiwicmlnaHQgcGxvdCIsInJpZ2h0Il0sZGZsdDoibGVmdCBwbG90IixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In07ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49ZVtyKyJheGVzIl0saT1PYmplY3Qua2V5cygodC5fc3Bsb21BeGVzfHx7fSlbcl18fHt9KTtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOmkubGVuZ3RoP2k6dm9pZCAwfWZ1bmN0aW9uIHUodCxlLHIsbixpLGEpe3ZhciBvPWUodCsiZ2FwIixyKSxzPWUoImRvbWFpbi4iK3QpO2UodCsic2lkZSIsbik7Zm9yKHZhciBsPW5ldyBBcnJheShpKSxjPXNbMF0sdT0oc1sxXS1jKS8oaS1vKSxmPXUqKDEtbyksaD0wO2g8aTtoKyspe3ZhciBwPWMrdSpoO2xbYT9pLTEtaDpoXT1bcCxwK2ZdfXJldHVybiBsfWZ1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYSxvPW5ldyBBcnJheShyKTtmdW5jdGlvbiBzKHQscil7LTEhPT1lLmluZGV4T2YocikmJnZvaWQgMD09PW5bcl0/KG9bdF09cixuW3JdPXQpOm9bdF09IiJ9aWYoQXJyYXkuaXNBcnJheSh0KSlmb3IoYT0wO2E8cjthKyspcyhhLHRbYV0pO2Vsc2UgZm9yKHMoMCxpKSxhPTE7YTxyO2ErKylzKGEsaSsoYSsxKSk7cmV0dXJuIG99ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImdyaWQiLHNjaGVtYTp7bGF5b3V0OntncmlkOmx9fSxsYXlvdXRBdHRyaWJ1dGVzOmwsc2l6ZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5ncmlkfHx7fSxpPWMoZSxyLCJ4IiksYT1jKGUsciwieSIpO2lmKHQuZ3JpZHx8aXx8YSl7dmFyIG8sZixoPUFycmF5LmlzQXJyYXkoci5zdWJwbG90cykmJkFycmF5LmlzQXJyYXkoci5zdWJwbG90c1swXSkscD1BcnJheS5pc0FycmF5KGkpLGQ9QXJyYXkuaXNBcnJheShhKSxtPXAmJmkhPT1yLnhheGVzJiZkJiZhIT09ci55YXhlcztoPyhvPXIuc3VicGxvdHMubGVuZ3RoLGY9ci5zdWJwbG90c1swXS5sZW5ndGgpOihkJiYobz1hLmxlbmd0aCkscCYmKGY9aS5sZW5ndGgpKTt2YXIgZz1zLm5ld0NvbnRhaW5lcihlLCJncmlkIiksdj1rKCJyb3dzIixvKSx5PWsoImNvbHVtbnMiLGYpO2lmKHYqeT4xKXtpZighaCYmIXAmJiFkKSJpbmRlcGVuZGVudCI9PT1rKCJwYXR0ZXJuIikmJihoPSEwKTtnLl9oYXNTdWJwbG90R3JpZD1oO3ZhciB4LGIsXz0idG9wIHRvIGJvdHRvbSI9PT1rKCJyb3dvcmRlciIpLHc9aD8uMjouMSxUPWg/LjM6LjE7bSYmZS5fc3Bsb21HcmlkRGZsdCYmKHg9ZS5fc3Bsb21HcmlkRGZsdC54c2lkZSxiPWUuX3NwbG9tR3JpZERmbHQueXNpZGUpLGcuX2RvbWFpbnM9e3g6dSgieCIsayx3LHgseSkseTp1KCJ5IixrLFQsYix2LF8pfX1lbHNlIGRlbGV0ZSBlLmdyaWR9ZnVuY3Rpb24gayh0LGUpe3JldHVybiBuLmNvZXJjZShyLGcsbCx0LGUpfX0sY29udGVudERlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5ncmlkO2lmKHImJnIuX2RvbWFpbnMpe3ZhciBuLGksYSxvLHMsbCx1LGg9dC5ncmlkfHx7fSxwPWUuX3N1YnBsb3RzLGQ9ci5faGFzU3VicGxvdEdyaWQsbT1yLnJvd3MsZz1yLmNvbHVtbnMsdj0iaW5kZXBlbmRlbnQiPT09ci5wYXR0ZXJuLHk9ci5fYXhpc01hcD17fTtpZihkKXt2YXIgeD1oLnN1YnBsb3RzfHxbXTtsPXIuc3VicGxvdHM9bmV3IEFycmF5KG0pO3ZhciBiPTE7Zm9yKG49MDtuPG07bisrKXt2YXIgXz1sW25dPW5ldyBBcnJheShnKSx3PXhbbl18fFtdO2ZvcihpPTA7aTxnO2krKylpZih2PyhzPTE9PT1iPyJ4eSI6IngiK2IrInkiK2IsYisrKTpzPXdbaV0sX1tpXT0iIiwtMSE9PXAuY2FydGVzaWFuLmluZGV4T2Yocykpe2lmKHU9cy5pbmRleE9mKCJ5IiksYT1zLnNsaWNlKDAsdSksbz1zLnNsaWNlKHUpLHZvaWQgMCE9PXlbYV0mJnlbYV0hPT1pfHx2b2lkIDAhPT15W29dJiZ5W29dIT09biljb250aW51ZTtfW2ldPXMseVthXT1pLHlbb109bn19fWVsc2V7dmFyIFQ9YyhlLGgsIngiKSxrPWMoZSxoLCJ5Iik7ci54YXhlcz1mKFQscC54YXhpcyxnLHksIngiKSxyLnlheGVzPWYoayxwLnlheGlzLG0seSwieSIpfXZhciBBPXIuX2FuY2hvcnM9e30sTT0idG9wIHRvIGJvdHRvbSI9PT1yLnJvd29yZGVyO2Zvcih2YXIgUyBpbiB5KXt2YXIgRSxMLEMsUD1TLmNoYXJBdCgwKSxJPXJbUCsic2lkZSJdO2lmKEkubGVuZ3RoPDgpQVtTXT0iZnJlZSI7ZWxzZSBpZigieCI9PT1QKXtpZigidCI9PT1JLmNoYXJBdCgwKT09PU0/KEU9MCxMPTEsQz1tKTooRT1tLTEsTD0tMSxDPS0xKSxkKXt2YXIgTz15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW25dW09dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSgwLHUpPT09Uykpe0FbU109cy5zbGljZSh1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYobz1yLnlheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihTK28pKXtBW1NdPW87YnJlYWt9fWVsc2UgaWYoImwiPT09SS5jaGFyQXQoMCk/KEU9MCxMPTEsQz1nKTooRT1nLTEsTD0tMSxDPS0xKSxkKXt2YXIgej15W1NdO2ZvcihuPUU7biE9PUM7bis9TClpZigocz1sW3pdW25dKSYmKHU9cy5pbmRleE9mKCJ5Iikscy5zbGljZSh1KT09PVMpKXtBW1NdPXMuc2xpY2UoMCx1KTticmVha319ZWxzZSBmb3Iobj1FO24hPT1DO24rPUwpaWYoYT1yLnhheGVzW25dLC0xIT09cC5jYXJ0ZXNpYW4uaW5kZXhPZihhK1MpKXtBW1NdPWE7YnJlYWt9fX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3JlZ2V4Ijo3OTMsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NX1dLDY4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXk7dCgiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiKTtlLmV4cG9ydHM9aSgiaW1hZ2UiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzb3VyY2U6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxheWVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiZWxvdyIsImFib3ZlIl0sZGZsdDoiYWJvdmUiLGVkaXRUeXBlOiJhcnJheWRyYXcifSxzaXpleDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHNpemV5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0sc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiY29udGFpbiIsInN0cmV0Y2giXSxkZmx0OiJjb250YWluIixlZGl0VHlwZToiYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHg6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJhcnJheWRyYXcifSx5Ont2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHhyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueC50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LHlyZWY6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBhcGVyIixuLmlkUmVnZXgueS50b1N0cmluZygpXSxkZmx0OiJwYXBlciIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzR9XSw2ODU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYi90b19sb2dfcmFuZ2UiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZT1lfHx7fTt2YXIgbz0ibG9nIj09PXImJiJsaW5lYXIiPT09ZS50eXBlLHM9ImxpbmVhciI9PT1yJiYibG9nIj09PWUudHlwZTtpZihvfHxzKWZvcih2YXIgbCxjLHU9dC5fZnVsbExheW91dC5pbWFnZXMsZj1lLl9pZC5jaGFyQXQoMCksaD0wO2g8dS5sZW5ndGg7aCsrKWlmKGM9ImltYWdlc1siK2grIl0uIiwobD11W2hdKVtmKyJyZWYiXT09PWUuX2lkKXt2YXIgcD1sW2ZdLGQ9bFsic2l6ZSIrZl0sbT1udWxsLGc9bnVsbDtpZihvKXttPWkocCxlLnJhbmdlKTt2YXIgdj1kL01hdGgucG93KDEwLG0pLzI7Zz0yKk1hdGgubG9nKHYrTWF0aC5zcXJ0KDErdip2KSkvTWF0aC5MTjEwfWVsc2UgZz0obT1NYXRoLnBvdygxMCxwKSkqKE1hdGgucG93KDEwLGQvMiktTWF0aC5wb3coMTAsLWQvMikpO24obSk/bihnKXx8KGc9bnVsbCk6KG09bnVsbCxnPW51bGwpLGEoYytmLG0pLGEoYysic2l6ZSIrZixnKX19fSx7Ii4uLy4uL2xpYi90b19sb2dfcmFuZ2UiOjgwNCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDY4NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIpe2Z1bmN0aW9uIGEocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgcz1hKCJzb3VyY2UiKTtpZighYSgidmlzaWJsZSIsISFzKSlyZXR1cm4gZTthKCJsYXllciIpLGEoInhhbmNob3IiKSxhKCJ5YW5jaG9yIiksYSgic2l6ZXgiKSxhKCJzaXpleSIpLGEoInNpemluZyIpLGEoIm9wYWNpdHkiKTtmb3IodmFyIGw9e19mdWxsTGF5b3V0OnJ9LGM9WyJ4IiwieSJdLHU9MDt1PDI7dSsrKXt2YXIgZj1jW3VdLGg9aS5jb2VyY2VSZWYodCxlLGwsZiwicGFwZXIiLHZvaWQgMCk7aWYoInBhcGVyIiE9PWgpaS5nZXRGcm9tSWQobCxoKS5faW1nSW5kaWNlcy5wdXNoKGUuX2luZGV4KTtpLmNvZXJjZVBvc2l0aW9uKGUsbCxhLGgsZiwwKX1yZXR1cm4gZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToiaW1hZ2VzIixoYW5kbGVJdGVtRGVmYXVsdHM6c30pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6Njg0fV0sNjg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL2RyYXdpbmciKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbD10Ll9mdWxsTGF5b3V0LGM9W10sdT17fSxmPVtdO2ZvcihyPTA7cjxsLmltYWdlcy5sZW5ndGg7cisrKXt2YXIgaD1sLmltYWdlc1tyXTtpZihoLnZpc2libGUpaWYoImJlbG93Ij09PWgubGF5ZXImJiJwYXBlciIhPT1oLnhyZWYmJiJwYXBlciIhPT1oLnlyZWYpe2U9by5yZWYyaWQoaC54cmVmKStvLnJlZjJpZChoLnlyZWYpO3ZhciBwPWwuX3Bsb3RzW2VdO2lmKCFwKXtmLnB1c2goaCk7Y29udGludWV9cC5tYWlucGxvdCYmKGU9cC5tYWlucGxvdC5pZCksdVtlXXx8KHVbZV09W10pLHVbZV0ucHVzaChoKX1lbHNlImFib3ZlIj09PWgubGF5ZXI/Yy5wdXNoKGgpOmYucHVzaChoKX12YXIgZD17bGVmdDp7c2l6aW5nOiJ4TWluIixvZmZzZXQ6MH0sY2VudGVyOntzaXppbmc6InhNaWQiLG9mZnNldDotLjV9LHJpZ2h0OntzaXppbmc6InhNYXgiLG9mZnNldDotMX19LG09e3RvcDp7c2l6aW5nOiJZTWluIixvZmZzZXQ6MH0sbWlkZGxlOntzaXppbmc6IllNaWQiLG9mZnNldDotLjV9LGJvdHRvbTp7c2l6aW5nOiJZTWF4IixvZmZzZXQ6LTF9fTtmdW5jdGlvbiBnKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHRoaXMuX2ltZ1NyYyE9PWUuc291cmNlKWlmKHIuYXR0cigieG1sbnMiLHMuc3ZnKSxlLnNvdXJjZSYmImRhdGE6Ij09PWUuc291cmNlLnNsaWNlKDAsNSkpci5hdHRyKCJ4bGluazpocmVmIixlLnNvdXJjZSksdGhpcy5faW1nU3JjPWUuc291cmNlO2Vsc2V7dmFyIGk9bmV3IFByb21pc2UoZnVuY3Rpb24odCl7dmFyIG49bmV3IEltYWdlO2Z1bmN0aW9uIGkoKXtyLnJlbW92ZSgpLHQoKX10aGlzLmltZz1uLG4uc2V0QXR0cmlidXRlKCJjcm9zc09yaWdpbiIsImFub255bW91cyIpLG4ub25lcnJvcj1pLG4ub25sb2FkPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD10aGlzLndpZHRoLGUuaGVpZ2h0PXRoaXMuaGVpZ2h0LGUuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UodGhpcywwLDApO3ZhciBuPWUudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtyLmF0dHIoInhsaW5rOmhyZWYiLG4pLHQoKX0sci5vbigiZXJyb3IiLGkpLG4uc3JjPWUuc291cmNlLHRoaXMuX2ltZ1NyYz1lLnNvdXJjZX0uYmluZCh0aGlzKSk7dC5fcHJvbWlzZXMucHVzaChpKX19ZnVuY3Rpb24gdihlKXt2YXIgcixvLHM9bi5zZWxlY3QodGhpcyksYz1hLmdldEZyb21JZCh0LGUueHJlZiksdT1hLmdldEZyb21JZCh0LGUueXJlZiksZj0iZG9tYWluIj09PWEuZ2V0UmVmVHlwZShlLnhyZWYpLGg9ImRvbWFpbiI9PT1hLmdldFJlZlR5cGUoZS55cmVmKSxwPWwuX3NpemU7cj12b2lkIDAhPT1jPyJzdHJpbmciPT10eXBlb2YgZS54cmVmJiZmP2MuX2xlbmd0aCplLnNpemV4Ok1hdGguYWJzKGMubDJwKGUuc2l6ZXgpLWMubDJwKDApKTplLnNpemV4KnAudyxvPXZvaWQgMCE9PXU/InN0cmluZyI9PXR5cGVvZiBlLnlyZWYmJmg/dS5fbGVuZ3RoKmUuc2l6ZXk6TWF0aC5hYnModS5sMnAoZS5zaXpleSktdS5sMnAoMCkpOmUuc2l6ZXkqcC5oO3ZhciBnLHYseT1yKmRbZS54YW5jaG9yXS5vZmZzZXQseD1vKm1bZS55YW5jaG9yXS5vZmZzZXQsYj1kW2UueGFuY2hvcl0uc2l6aW5nK21bZS55YW5jaG9yXS5zaXppbmc7c3dpdGNoKGc9dm9pZCAwIT09Yz8ic3RyaW5nIj09dHlwZW9mIGUueHJlZiYmZj9jLl9sZW5ndGgqZS54K2MuX29mZnNldDpjLnIycChlLngpK2MuX29mZnNldDplLngqcC53K3AubCxnKz15LHY9dm9pZCAwIT09dT8ic3RyaW5nIj09dHlwZW9mIGUueXJlZiYmaD91Ll9sZW5ndGgqKDEtZS55KSt1Ll9vZmZzZXQ6dS5yMnAoZS55KSt1Ll9vZmZzZXQ6cC5oLWUueSpwLmgrcC50LHYrPXgsZS5zaXppbmcpe2Nhc2UiZmlsbCI6Yis9IiBzbGljZSI7YnJlYWs7Y2FzZSJzdHJldGNoIjpiPSJub25lIn1zLmF0dHIoe3g6Zyx5OnYsd2lkdGg6cixoZWlnaHQ6byxwcmVzZXJ2ZUFzcGVjdFJhdGlvOmIsb3BhY2l0eTplLm9wYWNpdHl9KTt2YXIgXz0oYyYmImRvbWFpbiIhPT1hLmdldFJlZlR5cGUoZS54cmVmKT9jLl9pZDoiIikrKHUmJiJkb21haW4iIT09YS5nZXRSZWZUeXBlKGUueXJlZik/dS5faWQ6IiIpO2kuc2V0Q2xpcFVybChzLF8/ImNsaXAiK2wuX3VpZCtfOm51bGwsdCl9dmFyIHk9bC5faW1hZ2VMb3dlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGYpLHg9bC5faW1hZ2VVcHBlckxheWVyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKGMpO3kuZW50ZXIoKS5hcHBlbmQoImltYWdlIikseC5lbnRlcigpLmFwcGVuZCgiaW1hZ2UiKSx5LmV4aXQoKS5yZW1vdmUoKSx4LmV4aXQoKS5yZW1vdmUoKSx5LmVhY2goKGZ1bmN0aW9uKHQpe2cuYmluZCh0aGlzKSh0KSx2LmJpbmQodGhpcykodCl9KSkseC5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpO3ZhciBiPU9iamVjdC5rZXlzKGwuX3Bsb3RzKTtmb3Iocj0wO3I8Yi5sZW5ndGg7cisrKXtlPWJbcl07dmFyIF89bC5fcGxvdHNbZV07aWYoXy5pbWFnZWxheWVyKXt2YXIgdz1fLmltYWdlbGF5ZXIuc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEodVtlXXx8W10pO3cuZW50ZXIoKS5hcHBlbmQoImltYWdlIiksdy5leGl0KCkucmVtb3ZlKCksdy5lYWNoKChmdW5jdGlvbih0KXtnLmJpbmQodGhpcykodCksdi5iaW5kKHRoaXMpKHQpfSkpfX19fSx7Ii4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi9kcmF3aW5nIjo2NjEsIkBwbG90bHkvZDMiOjU4fV0sNjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJpbWFnZXMiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGluY2x1ZGVCYXNlUGxvdDp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaW5jbHVkZV9jb21wb25lbnRzIikoImltYWdlcyIpLGRyYXc6dCgiLi9kcmF3IiksY29udmVydENvb3Jkczp0KCIuL2NvbnZlcnRfY29vcmRzIil9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjg0MCwiLi9hdHRyaWJ1dGVzIjo2ODQsIi4vY29udmVydF9jb29yZHMiOjY4NSwiLi9kZWZhdWx0cyI6Njg2LCIuL2RyYXciOjY4N31dLDY4OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibGVnZW5kIn0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImxlZ2VuZCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToibGVnZW5kIn0sZm9udDpuKHtlZGl0VHlwZToibGVnZW5kIn0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6InYiLGVkaXRUeXBlOiJsZWdlbmQifSx0cmFjZW9yZGVyOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJyZXZlcnNlZCIsImdyb3VwZWQiXSxleHRyYXM6WyJub3JtYWwiXSxlZGl0VHlwZToibGVnZW5kIn0sdHJhY2Vncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtc2l6aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNvbnN0YW50Il0sZGZsdDoidHJhY2UiLGVkaXRUeXBlOiJsZWdlbmQifSxpdGVtd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjMwLGRmbHQ6MzAsZWRpdFR5cGU6ImxlZ2VuZCJ9LGl0ZW1jbGljazp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9nZ2xlIiwidG9nZ2xlb3RoZXJzIiwhMV0sZGZsdDoidG9nZ2xlIixlZGl0VHlwZToibGVnZW5kIn0saXRlbWRvdWJsZWNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGUiLCJ0b2dnbGVvdGhlcnMiLCExXSxkZmx0OiJ0b2dnbGVvdGhlcnMiLGVkaXRUeXBlOiJsZWdlbmQifSxncm91cGNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b2dnbGVpdGVtIiwidG9nZ2xlZ3JvdXAiXSxkZmx0OiJ0b2dnbGVncm91cCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJsZWdlbmQifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxlZ2VuZCJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSx2YWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImxlZ2VuZCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImxlZ2VuZCJ9KSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJsZWZ0IiwidG9wIGxlZnQiXSxlZGl0VHlwZToibGVnZW5kIn0sZWRpdFR5cGU6ImxlZ2VuZCJ9LGVkaXRUeXBlOiJsZWdlbmQifX0seyIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vY29sb3IvYXR0cmlidXRlcyI6NjM4fV0sNjkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c2Nyb2xsQmFyV2lkdGg6NixzY3JvbGxCYXJNaW5IZWlnaHQ6MjAsc2Nyb2xsQmFyQ29sb3I6IiM4MDhCQTQiLHNjcm9sbEJhck1hcmdpbjo0LHNjcm9sbEJhckVudGVyQXR0cnM6e3J4OjIwLHJ5OjMsd2lkdGg6MCxoZWlnaHQ6MH0sdGl0bGVQYWQ6MixpdGVtR2FwOjV9fSx7fV0sNjkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBjPXQubGVnZW5kfHx7fSx1PTAsZj0hMSxoPSJub3JtYWwiLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtkLnZpc2libGUmJigoZC5zaG93bGVnZW5kfHxkLl9kZmx0U2hvd0xlZ2VuZCYmIShkLl9tb2R1bGUmJmQuX21vZHVsZS5hdHRyaWJ1dGVzJiZkLl9tb2R1bGUuYXR0cmlidXRlcy5zaG93bGVnZW5kJiYhMT09PWQuX21vZHVsZS5hdHRyaWJ1dGVzLnNob3dsZWdlbmQuZGZsdCkpJiYodSsrLGQuc2hvd2xlZ2VuZCYmKGY9ITAsKG4udHJhY2VJcyhkLCJwaWUtbGlrZSIpfHwhMD09PWQuX2lucHV0LnNob3dsZWdlbmQpJiZ1KyspKSwobi50cmFjZUlzKGQsImJhciIpJiYic3RhY2siPT09ZS5iYXJtb2RlfHwtMSE9PVsidG9uZXh0eCIsInRvbmV4dHkiXS5pbmRleE9mKGQuZmlsbCkpJiYoaD1sLmlzR3JvdXBlZCh7dHJhY2VvcmRlcjpofSk/Imdyb3VwZWQrcmV2ZXJzZWQiOiJyZXZlcnNlZCIpLHZvaWQgMCE9PWQubGVnZW5kZ3JvdXAmJiIiIT09ZC5sZWdlbmRncm91cCYmKGg9bC5pc1JldmVyc2VkKHt0cmFjZW9yZGVyOmh9KT8icmV2ZXJzZWQrZ3JvdXBlZCI6Imdyb3VwZWQiKSl9dmFyIG09aS5jb2VyY2UodCxlLHMsInNob3dsZWdlbmQiLGYmJnU+MSk7aWYoITEhPT1tfHxjLnVpcmV2aXNpb24pe3ZhciBnPWEubmV3Q29udGFpbmVyKGUsImxlZ2VuZCIpO2lmKFQoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksITEhPT1tKXtUKCJiZ2NvbG9yIixlLnBhcGVyX2JnY29sb3IpLFQoImJvcmRlcmNvbG9yIiksVCgiYm9yZGVyd2lkdGgiKTt2YXIgdix5LHgsYj1pLmNvZXJjZUZvbnQoVCwiZm9udCIsZS5mb250KSxfPSJoIj09PVQoIm9yaWVudGF0aW9uIik7aWYoXz8odj0wLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNsaWRlciIsImlzVmlzaWJsZSIpKHQueGF4aXMpPyh5PTEuMSx4PSJib3R0b20iKTooeT0tLjEseD0idG9wIikpOih2PTEuMDIseT0xLHg9ImF1dG8iKSxUKCJ0cmFjZW9yZGVyIixoKSxsLmlzR3JvdXBlZChlLmxlZ2VuZCkmJlQoInRyYWNlZ3JvdXBnYXAiKSxUKCJpdGVtc2l6aW5nIiksVCgiaXRlbXdpZHRoIiksVCgiaXRlbWNsaWNrIiksVCgiaXRlbWRvdWJsZWNsaWNrIiksVCgiZ3JvdXBjbGljayIpLFQoIngiLHYpLFQoInhhbmNob3IiKSxUKCJ5Iix5KSxUKCJ5YW5jaG9yIix4KSxUKCJ2YWxpZ24iKSxpLm5vbmVPckFsbChjLGcsWyJ4IiwieSJdKSxUKCJ0aXRsZS50ZXh0Iikpe1QoInRpdGxlLnNpZGUiLF8/ImxlZnQiOiJ0b3AiKTt2YXIgdz1pLmV4dGVuZEZsYXQoe30sYix7c2l6ZTppLmJpZ0ZvbnQoYi5zaXplKX0pO2kuY29lcmNlRm9udChULCJ0aXRsZS5mb250Iix3KX19fWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gaS5jb2VyY2UoYyxnLG8sdCxlKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vYXR0cmlidXRlcyI6Njg5LCIuL2hlbHBlcnMiOjY5NX1dLDY5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGw9dCgiLi4vZHJhZ2VsZW1lbnQiKSxjPXQoIi4uL2RyYXdpbmciKSx1PXQoIi4uL2NvbG9yIiksZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4vaGFuZGxlX2NsaWNrIikscD10KCIuL2NvbnN0YW50cyIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLG09ZC5MSU5FX1NQQUNJTkcsZz1kLkZST01fVEwsdj1kLkZST01fQlIseT10KCIuL2dldF9sZWdlbmRfZGF0YSIpLHg9dCgiLi9zdHlsZSIpLGI9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gXyh0LGUscixuLGkpe3ZhciBhPXIuZGF0YSgpWzBdWzBdLnRyYWNlLGw9e2V2ZW50Omksbm9kZTpyLm5vZGUoKSxjdXJ2ZU51bWJlcjphLmluZGV4LGV4cGFuZGVkSW5kZXg6YS5fZXhwYW5kZWRJbmRleCxkYXRhOnQuZGF0YSxsYXlvdXQ6dC5sYXlvdXQsZnJhbWVzOnQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsY29uZmlnOnQuX2NvbnRleHQsZnVsbERhdGE6dC5fZnVsbERhdGEsZnVsbExheW91dDp0Ll9mdWxsTGF5b3V0fTtpZihhLl9ncm91cCYmKGwuZ3JvdXA9YS5fZ3JvdXApLG8udHJhY2VJcyhhLCJwaWUtbGlrZSIpJiYobC5sYWJlbD1yLmRhdHVtKClbMF0ubGFiZWwpLCExIT09cy50cmlnZ2VySGFuZGxlcih0LCJwbG90bHlfbGVnZW5kY2xpY2siLGwpKWlmKDE9PT1uKWUuX2NsaWNrVGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQmJmgocix0LG4pfSksdC5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5KTtlbHNlIGlmKDI9PT1uKXtlLl9jbGlja1RpbWVvdXQmJmNsZWFyVGltZW91dChlLl9jbGlja1RpbWVvdXQpLHQuX2xlZ2VuZE1vdXNlRG93blRpbWU9MCwhMSE9PXMudHJpZ2dlckhhbmRsZXIodCwicGxvdGx5X2xlZ2VuZGRvdWJsZWNsaWNrIixsKSYmaChyLHQsbil9fWZ1bmN0aW9uIHcodCxlLHIpe3ZhciBuLGEscz10LmRhdGEoKVswXVswXSxsPXMudHJhY2UsdT1vLnRyYWNlSXMobCwicGllLWxpa2UiKSxoPSFyLl9pbkhvdmVyJiZlLl9jb250ZXh0LmVkaXRzLmxlZ2VuZFRleHQmJiF1LGQ9ci5fbWF4TmFtZUxlbmd0aDtzLmdyb3VwVGl0bGU/KG49cy5ncm91cFRpdGxlLnRleHQsYT1zLmdyb3VwVGl0bGUuZm9udCk6KGE9ci5mb250LHIuZW50cmllcz9uPXMudGV4dDoobj11P3MubGFiZWw6bC5uYW1lLGwuX21ldGEmJihuPWkudGVtcGxhdGVTdHJpbmcobixsLl9tZXRhKSkpKTt2YXIgbT1pLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0IiwibGVnZW5kdGV4dCIpO20uYXR0cigidGV4dC1hbmNob3IiLCJzdGFydCIpLmNhbGwoYy5mb250LGEpLnRleHQoaD9UKG4sZCk6bik7dmFyIGc9ci5pdGVtd2lkdGgrMipwLml0ZW1HYXA7Zi5wb3NpdGlvblRleHQobSxnLDApLGg/bS5jYWxsKGYubWFrZUVkaXRhYmxlLHtnZDplLHRleHQ6bn0pLmNhbGwoQSx0LGUscikub24oImVkaXQiLChmdW5jdGlvbihuKXt0aGlzLnRleHQoVChuLGQpKS5jYWxsKEEsdCxlLHIpO3ZhciBhPXMudHJhY2UuX2Z1bGxJbnB1dHx8e30sYz17fTtpZihvLmhhc1RyYW5zZm9ybShhLCJncm91cGJ5Iikpe3ZhciB1PW8uZ2V0VHJhbnNmb3JtSW5kaWNlcyhhLCJncm91cGJ5IiksZj11W3UubGVuZ3RoLTFdLGg9aS5rZXllZENvbnRhaW5lcihhLCJ0cmFuc2Zvcm1zWyIrZisiXS5zdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIik7aC5zZXQocy50cmFjZS5fZ3JvdXAsbiksYz1oLmNvbnN0cnVjdFVwZGF0ZSgpfWVsc2UgYy5uYW1lPW47cmV0dXJuIG8uY2FsbCgiX2d1aVJlc3R5bGUiLGUsYyxsLmluZGV4KX0pKTpBKG0sdCxlLHIpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1NYXRoLm1heCg0LGUpO2lmKHQmJnQudHJpbSgpLmxlbmd0aD49ci8yKXJldHVybiB0O2Zvcih2YXIgbj1yLSh0PXR8fCIiKS5sZW5ndGg7bj4wO24tLSl0Kz0iICI7cmV0dXJuIHR9ZnVuY3Rpb24gayh0LGUpe3ZhciByLGE9ZS5fY29udGV4dC5kb3VibGVDbGlja0RlbGF5LG89MSxzPWkuZW5zdXJlU2luZ2xlKHQsInJlY3QiLCJsZWdlbmR0b2dnbGUiLChmdW5jdGlvbih0KXtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fHQuc3R5bGUoImN1cnNvciIsInBvaW50ZXIiKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHQuY2FsbCh1LmZpbGwsInJnYmEoMCwwLDAsMCkiKX0pKTtlLl9jb250ZXh0LnN0YXRpY1Bsb3R8fChzLm9uKCJtb3VzZWRvd24iLChmdW5jdGlvbigpeyhyPShuZXcgRGF0ZSkuZ2V0VGltZSgpKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPGE/bys9MToobz0xLGUuX2xlZ2VuZE1vdXNlRG93blRpbWU9cil9KSkscy5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcj1lLl9mdWxsTGF5b3V0LmxlZ2VuZDsobmV3IERhdGUpLmdldFRpbWUoKS1lLl9sZWdlbmRNb3VzZURvd25UaW1lPmEmJihvPU1hdGgubWF4KG8tMSwxKSksXyhlLHIsdCxvLG4uZXZlbnQpfX0pKSl9ZnVuY3Rpb24gQSh0LGUscixuLGkpe24uX2luSG92ZXImJnQuYXR0cigiZGF0YS1ub3RleCIsITApLGYuY29udmVydFRvVHNwYW5zKHQsciwoZnVuY3Rpb24oKXshZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5kYXRhKClbMF1bMF07aWYoIXIuX2luSG92ZXImJmkmJiFpLnRyYWNlLnNob3dsZWdlbmQpcmV0dXJuIHZvaWQgdC5yZW1vdmUoKTt2YXIgYT10LnNlbGVjdCgiZ1tjbGFzcyo9bWF0aC1ncm91cF0iKSxvPWEubm9kZSgpO3J8fChyPWUuX2Z1bGxMYXlvdXQubGVnZW5kKTt2YXIgcyxsPXIuYm9yZGVyd2lkdGg7cz0xPT09bj9yLnRpdGxlLmZvbnQ6aS5ncm91cFRpdGxlP2kuZ3JvdXBUaXRsZS5mb250OnIuZm9udDt2YXIgdSxoLGQ9cy5zaXplKm07aWYobyl7dmFyIGc9Yy5iQm94KG8pO3U9Zy5oZWlnaHQsaD1nLndpZHRoLDE9PT1uP2Muc2V0VHJhbnNsYXRlKGEsbCxsKy43NSp1KTpjLnNldFRyYW5zbGF0ZShhLDAsLjI1KnUpfWVsc2V7dmFyIHY9dC5zZWxlY3QoMT09PW4/Ii5sZWdlbmR0aXRsZXRleHQiOiIubGVnZW5kdGV4dCIpLHk9Zi5saW5lQ291bnQodikseD12Lm5vZGUoKTtpZih1PWQqeSxoPXg/Yy5iQm94KHgpLndpZHRoOjAsMT09PW4pImxlZnQiPT09ci50aXRsZS5zaWRlJiYoaCs9MipwLml0ZW1HYXApLGYucG9zaXRpb25UZXh0KHYsbCtwLnRpdGxlUGFkLGwrZCk7ZWxzZXt2YXIgYj0yKnAuaXRlbUdhcCtyLml0ZW13aWR0aDtpLmdyb3VwVGl0bGUmJihiPXAuaXRlbUdhcCxoLT1yLml0ZW13aWR0aCksZi5wb3NpdGlvblRleHQodixiLC1kKigoeS0xKS8yLS4zKSl9fTE9PT1uPyhyLl90aXRsZVdpZHRoPWgsci5fdGl0bGVIZWlnaHQ9dSk6KGkubGluZUhlaWdodD1kLGkuaGVpZ2h0PU1hdGgubWF4KHUsMTYpKzMsaS53aWR0aD1oKX0oZSxyLG4saSl9KSl9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gaS5pc1JpZ2h0QW5jaG9yKHQpPyJyaWdodCI6aS5pc0NlbnRlckFuY2hvcih0KT8iY2VudGVyIjoibGVmdCJ9ZnVuY3Rpb24gUyh0KXtyZXR1cm4gaS5pc0JvdHRvbUFuY2hvcih0KT8iYm90dG9tIjppLmlzTWlkZGxlQW5jaG9yKHQpPyJtaWRkbGUiOiJ0b3AifWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBlfHwoZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZHx8e30pLGZ1bmN0aW9uKHQsZSl7dmFyIHIscyxmPXQuX2Z1bGxMYXlvdXQsaD0ibGVnZW5kIitmLl91aWQsZD1lLl9pbkhvdmVyO2Q/KHI9ZS5sYXllcixoKz0iLWhvdmVyIik6cj1mLl9pbmZvbGF5ZXI7aWYoIXIpcmV0dXJuO3QuX2xlZ2VuZE1vdXNlRG93blRpbWV8fCh0Ll9sZWdlbmRNb3VzZURvd25UaW1lPTApO2lmKGQpe2lmKCFlLmVudHJpZXMpcmV0dXJuO3M9eShlLmVudHJpZXMsZSl9ZWxzZXtpZighdC5jYWxjZGF0YSlyZXR1cm47cz1mLnNob3dsZWdlbmQmJnkodC5jYWxjZGF0YSxlKX12YXIgbT1mLmhpZGRlbmxhYmVsc3x8W107aWYoIShkfHxmLnNob3dsZWdlbmQmJnMubGVuZ3RoKSlyZXR1cm4gci5zZWxlY3RBbGwoIi5sZWdlbmQiKS5yZW1vdmUoKSxmLl90b3BkZWZzLnNlbGVjdCgiIyIraCkucmVtb3ZlKCksYS5hdXRvTWFyZ2luKHQsImxlZ2VuZCIpO3ZhciBUPWkuZW5zdXJlU2luZ2xlKHIsImciLCJsZWdlbmQiLChmdW5jdGlvbih0KXtkfHx0LmF0dHIoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSksRT1pLmVuc3VyZVNpbmdsZUJ5SWQoZi5fdG9wZGVmcywiY2xpcFBhdGgiLGgsKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJyZWN0Iil9KSksTD1pLmVuc3VyZVNpbmdsZShULCJyZWN0IiwiYmciLChmdW5jdGlvbih0KXt0LmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKTtMLmNhbGwodS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbCh1LmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpO3ZhciBDPWkuZW5zdXJlU2luZ2xlKFQsImciLCJzY3JvbGxib3giKSxQPWUudGl0bGU7aWYoZS5fdGl0bGVXaWR0aD0wLGUuX3RpdGxlSGVpZ2h0PTAsUC50ZXh0KXt2YXIgST1pLmVuc3VyZVNpbmdsZShDLCJ0ZXh0IiwibGVnZW5kdGl0bGV0ZXh0Iik7SS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChjLmZvbnQsUC5mb250KS50ZXh0KFAudGV4dCksQShJLEMsdCxlLDEpfWVsc2UgQy5zZWxlY3RBbGwoIi5sZWdlbmR0aXRsZXRleHQiKS5yZW1vdmUoKTt2YXIgTz1pLmVuc3VyZVNpbmdsZShULCJyZWN0Iiwic2Nyb2xsYmFyIiwoZnVuY3Rpb24odCl7dC5hdHRyKHAuc2Nyb2xsQmFyRW50ZXJBdHRycykuY2FsbCh1LmZpbGwscC5zY3JvbGxCYXJDb2xvcil9KSksej1DLnNlbGVjdEFsbCgiZy5ncm91cHMiKS5kYXRhKHMpO3ouZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsImdyb3VwcyIpLHouZXhpdCgpLnJlbW92ZSgpO3ZhciBEPXouc2VsZWN0QWxsKCJnLnRyYWNlcyIpLmRhdGEoaS5pZGVudGl0eSk7RC5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwidHJhY2VzIiksRC5leGl0KCkucmVtb3ZlKCksRC5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2U7cmV0dXJuIG8udHJhY2VJcyhlLCJwaWUtbGlrZSIpPy0xIT09bS5pbmRleE9mKHRbMF0ubGFiZWwpPy41OjE6ImxlZ2VuZG9ubHkiPT09ZS52aXNpYmxlPy41OjF9KSkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5jYWxsKHcsdCxlKX0pKS5jYWxsKHgsdCxlKS5lYWNoKChmdW5jdGlvbigpe2R8fG4uc2VsZWN0KHRoaXMpLmNhbGwoayx0KX0pKSxpLnN5bmNPckFzeW5jKFthLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9dC5fZnVsbExheW91dDtpfHwoaT1hLmxlZ2VuZCk7dmFyIG89YS5fc2l6ZSxzPWIuaXNWZXJ0aWNhbChpKSxsPWIuaXNHcm91cGVkKGkpLHU9aS5ib3JkZXJ3aWR0aCxmPTIqdSxoPXAuaXRlbUdhcCxkPWkuaXRlbXdpZHRoKzIqaCxtPTIqKHUraCksZz1TKGkpLHY9aS55PDB8fDA9PT1pLnkmJiJ0b3AiPT09Zyx5PWkueT4xfHwxPT09aS55JiYiYm90dG9tIj09PWcseD1pLnRyYWNlZ3JvdXBnYXA7aS5fbWF4SGVpZ2h0PU1hdGgubWF4KHZ8fHk/YS5oZWlnaHQvMjpvLmgsMzApO3ZhciBfPTA7aS5fd2lkdGg9MCxpLl9oZWlnaHQ9MDt2YXIgdz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPXQudGl0bGUuc2lkZTtuJiYoLTEhPT1uLmluZGV4T2YoImxlZnQiKSYmKGU9dC5fdGl0bGVXaWR0aCksLTEhPT1uLmluZGV4T2YoInRvcCIpJiYocj10Ll90aXRsZUhlaWdodCkpO3JldHVybltlLHJdfShpKTtpZihzKXIuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx1K3dbMF0sdSt3WzFdK2kuX2hlaWdodCtlLzIraCksaS5faGVpZ2h0Kz1lLGkuX3dpZHRoPU1hdGgubWF4KGkuX3dpZHRoLHRbMF0ud2lkdGgpfSkpLF89ZCtpLl93aWR0aCxpLl93aWR0aCs9aCtkK2YsaS5faGVpZ2h0Kz1tLGwmJihlLmVhY2goKGZ1bmN0aW9uKHQsZSl7Yy5zZXRUcmFuc2xhdGUodGhpcywwLGUqaS50cmFjZWdyb3VwZ2FwKX0pKSxpLl9oZWlnaHQrPShpLl9sZ3JvdXBzTGVuZ3RoLTEpKmkudHJhY2Vncm91cGdhcCk7ZWxzZXt2YXIgVD1NKGkpLGs9aS54PDB8fDA9PT1pLngmJiJyaWdodCI9PT1ULEE9aS54PjF8fDE9PT1pLngmJiJsZWZ0Ij09PVQsRT15fHx2LEw9YS53aWR0aC8yO2kuX21heFdpZHRoPU1hdGgubWF4KGs/RSYmImxlZnQiPT09VD9vLmwrby53Okw6QT9FJiYicmlnaHQiPT09VD9vLnIrby53Okw6by53LDIqZCk7dmFyIEM9MCxQPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLndpZHRoK2Q7Qz1NYXRoLm1heChDLGUpLFArPWV9KSksXz1udWxsO3ZhciBJPTA7aWYobCl7dmFyIE89MCx6PTAsRD0wO2UuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD0wLGU9MDtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudHJhY2VzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG49clswXS5oZWlnaHQ7Yy5zZXRUcmFuc2xhdGUodGhpcyx3WzBdLHdbMV0rdStoK24vMitlKSxlKz1uLHQ9TWF0aC5tYXgodCxkK3JbMF0ud2lkdGgpfSkpLE89TWF0aC5tYXgoTyxlKTt2YXIgcj10K2g7cit1K3o+aS5fbWF4V2lkdGgmJihJPU1hdGgubWF4KEkseiksej0wLEQrPU8reCxPPWUpLGMuc2V0VHJhbnNsYXRlKHRoaXMseixEKSx6Kz1yfSkpLGkuX3dpZHRoPU1hdGgubWF4KEkseikrdSxpLl9oZWlnaHQ9RCtPK219ZWxzZXt2YXIgUj1yLnNpemUoKSxGPVArZisoUi0xKSpoPGkuX21heFdpZHRoLEI9MCxOPTAsaj0wLFU9MDtyLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0uaGVpZ2h0LHI9ZCt0WzBdLndpZHRoLG49KEY/cjpDKStoO24rdStOLWg+PWkuX21heFdpZHRoJiYoST1NYXRoLm1heChJLFUpLE49MCxqKz1CLGkuX2hlaWdodCs9QixCPTApLGMuc2V0VHJhbnNsYXRlKHRoaXMsd1swXSt1K04sd1sxXSt1K2orZS8yK2gpLFU9TityK2gsTis9bixCPU1hdGgubWF4KEIsZSl9KSksRj8oaS5fd2lkdGg9TitmLGkuX2hlaWdodD1CK20pOihpLl93aWR0aD1NYXRoLm1heChJLFUpK2YsaS5faGVpZ2h0Kz1CK20pfX1pLl93aWR0aD1NYXRoLmNlaWwoTWF0aC5tYXgoaS5fd2lkdGgrd1swXSxpLl90aXRsZVdpZHRoKzIqKHUrcC50aXRsZVBhZCkpKSxpLl9oZWlnaHQ9TWF0aC5jZWlsKE1hdGgubWF4KGkuX2hlaWdodCt3WzFdLGkuX3RpdGxlSGVpZ2h0KzIqKHUrcC5pdGVtR2FwKSkpLGkuX2VmZkhlaWdodD1NYXRoLm1pbihpLl9oZWlnaHQsaS5fbWF4SGVpZ2h0KTt2YXIgVj10Ll9jb250ZXh0LmVkaXRzLEg9Vi5sZWdlbmRUZXh0fHxWLmxlZ2VuZFBvc2l0aW9uO3IuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCIubGVnZW5kdG9nZ2xlIikscj10WzBdLmhlaWdodCxpPUg/ZDpffHxkK3RbMF0ud2lkdGg7c3x8KGkrPWgvMiksYy5zZXRSZWN0KGUsMCwtci8yLGkscil9KSl9KHQseixELGUpfSxmdW5jdGlvbigpe2lmKGR8fCFmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LmxlZ2VuZCxyPU0oZSksbj1TKGUpO3JldHVybiBhLmF1dG9NYXJnaW4odCwibGVnZW5kIix7eDplLngseTplLnksbDplLl93aWR0aCpnW3JdLHI6ZS5fd2lkdGgqdltyXSxiOmUuX2VmZkhlaWdodCp2W25dLHQ6ZS5fZWZmSGVpZ2h0Kmdbbl19KX0odCkpe3ZhciBzLHUsbSx5LHg9Zi5fc2l6ZSxiPWUuYm9yZGVyd2lkdGgsdz14LmwreC53KmUueC1nW00oZSldKmUuX3dpZHRoLGs9eC50K3guaCooMS1lLnkpLWdbUyhlKV0qZS5fZWZmSGVpZ2h0O2lmKCFkJiZmLm1hcmdpbi5hdXRvZXhwYW5kKXt2YXIgQT13LFA9azt3PWkuY29uc3RyYWluKHcsMCxmLndpZHRoLWUuX3dpZHRoKSxrPWkuY29uc3RyYWluKGssMCxmLmhlaWdodC1lLl9lZmZIZWlnaHQpLHchPT1BJiZpLmxvZygiQ29uc3RyYWluIGxlZ2VuZC54IHRvIG1ha2UgbGVnZW5kIGZpdCBpbnNpZGUgZ3JhcGgiKSxrIT09UCYmaS5sb2coIkNvbnN0cmFpbiBsZWdlbmQueSB0byBtYWtlIGxlZ2VuZCBmaXQgaW5zaWRlIGdyYXBoIil9aWYoZHx8Yy5zZXRUcmFuc2xhdGUoVCx3LGspLE8ub24oIi5kcmFnIixudWxsKSxULm9uKCJ3aGVlbCIsbnVsbCksZHx8ZS5faGVpZ2h0PD1lLl9tYXhIZWlnaHR8fHQuX2NvbnRleHQuc3RhdGljUGxvdCl7dmFyIEk9ZS5fZWZmSGVpZ2h0O2QmJihJPWUuX2hlaWdodCksTC5hdHRyKHt3aWR0aDplLl93aWR0aC1iLGhlaWdodDpJLWIseDpiLzIseTpiLzJ9KSxjLnNldFRyYW5zbGF0ZShDLDAsMCksRS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIsaGVpZ2h0OkktMipiLHg6Yix5OmJ9KSxjLnNldENsaXBVcmwoQyxoLHQpLGMuc2V0UmVjdChPLDAsMCwwLDApLGRlbGV0ZSBlLl9zY3JvbGxZfWVsc2V7dmFyIHosRCxSLEY9TWF0aC5tYXgocC5zY3JvbGxCYXJNaW5IZWlnaHQsZS5fZWZmSGVpZ2h0KmUuX2VmZkhlaWdodC9lLl9oZWlnaHQpLEI9ZS5fZWZmSGVpZ2h0LUYtMipwLnNjcm9sbEJhck1hcmdpbixOPWUuX2hlaWdodC1lLl9lZmZIZWlnaHQsaj1CL04sVT1NYXRoLm1pbihlLl9zY3JvbGxZfHwwLE4pO0wuYXR0cih7d2lkdGg6ZS5fd2lkdGgtMipiK3Auc2Nyb2xsQmFyV2lkdGgrcC5zY3JvbGxCYXJNYXJnaW4saGVpZ2h0OmUuX2VmZkhlaWdodC1iLHg6Yi8yLHk6Yi8yfSksRS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDplLl93aWR0aC0yKmIrcC5zY3JvbGxCYXJXaWR0aCtwLnNjcm9sbEJhck1hcmdpbixoZWlnaHQ6ZS5fZWZmSGVpZ2h0LTIqYix4OmIseTpiK1V9KSxjLnNldENsaXBVcmwoQyxoLHQpLHEoVSxGLGopLFQub24oIndoZWVsIiwoZnVuY3Rpb24oKXtxKFU9aS5jb25zdHJhaW4oZS5fc2Nyb2xsWStuLmV2ZW50LmRlbHRhWS9CKk4sMCxOKSxGLGopLDAhPT1VJiZVIT09TiYmbi5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpO3ZhciBWPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7ej0idG91Y2hzdGFydCI9PT10LnR5cGU/dC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRZOnQuY2xpZW50WSxSPVV9KSkub24oImRyYWciLChmdW5jdGlvbigpe3ZhciB0PW4uZXZlbnQuc291cmNlRXZlbnQ7Mj09PXQuYnV0dG9uc3x8dC5jdHJsS2V5fHwoRD0idG91Y2htb3ZlIj09PXQudHlwZT90LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFk6dC5jbGllbnRZLHEoVT1mdW5jdGlvbih0LGUscil7dmFyIG49KHItZSkvait0O3JldHVybiBpLmNvbnN0cmFpbihuLDAsTil9KFIseixEKSxGLGopKX0pKTtPLmNhbGwoVik7dmFyIEg9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5ldmVudC5zb3VyY2VFdmVudDsidG91Y2hzdGFydCI9PT10LnR5cGUmJih6PXQuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WSxSPVUpfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24oKXt2YXIgdD1uLmV2ZW50LnNvdXJjZUV2ZW50OyJ0b3VjaG1vdmUiPT09dC50eXBlJiYoRD10LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFkscShVPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0oZS1yKS9qK3Q7cmV0dXJuIGkuY29uc3RyYWluKG4sMCxOKX0oUix6LEQpLEYsaikpfSkpO0MuY2FsbChIKX1pZih0Ll9jb250ZXh0LmVkaXRzLmxlZ2VuZFBvc2l0aW9uKVQuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEwKSxsLmluaXQoe2VsZW1lbnQ6VC5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24oKXt2YXIgdD1jLmdldFRyYW5zbGF0ZShUKTttPXQueCx5PXQueX0sbW92ZUZuOmZ1bmN0aW9uKHQscil7dmFyIG49bSt0LGk9eStyO2Muc2V0VHJhbnNsYXRlKFQsbixpKSxzPWwuYWxpZ24obiwwLHgubCx4LmwreC53LGUueGFuY2hvciksdT1sLmFsaWduKGksMCx4LnQreC5oLHgudCxlLnlhbmNob3IpfSxkb25lRm46ZnVuY3Rpb24oKXt2b2lkIDAhPT1zJiZ2b2lkIDAhPT11JiZvLmNhbGwoIl9ndWlSZWxheW91dCIsdCx7ImxlZ2VuZC54IjpzLCJsZWdlbmQueSI6dX0pfSxjbGlja0ZuOmZ1bmN0aW9uKGUsbil7dmFyIGk9ci5zZWxlY3RBbGwoImcudHJhY2VzIikuZmlsdGVyKChmdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIG4uY2xpZW50WD49dC5sZWZ0JiZuLmNsaWVudFg8PXQucmlnaHQmJm4uY2xpZW50WT49dC50b3AmJm4uY2xpZW50WTw9dC5ib3R0b219KSk7aS5zaXplKCk+MCYmXyh0LFQsaSxlLG4pfX0pfWZ1bmN0aW9uIHEocixuLGkpe2UuX3Njcm9sbFk9dC5fZnVsbExheW91dC5sZWdlbmQuX3Njcm9sbFk9cixjLnNldFRyYW5zbGF0ZShDLDAsLXIpLGMuc2V0UmVjdChPLGUuX3dpZHRoLHAuc2Nyb2xsQmFyTWFyZ2luK3IqaSxwLnNjcm9sbEJhcldpZHRoLG4pLEUuc2VsZWN0KCJyZWN0IikuYXR0cigieSIsYityKX19XSx0KX0odCxlKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V2ZW50cyI6NzY1LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuL2NvbnN0YW50cyI6NjkwLCIuL2dldF9sZWdlbmRfZGF0YSI6NjkzLCIuL2hhbmRsZV9jbGljayI6Njk0LCIuL2hlbHBlcnMiOjY5NSwiLi9zdHlsZSI6Njk3LCJAcGxvdGx5L2QzIjo1OH1dLDY5MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvPWUuX2luSG92ZXIscz1pLmlzR3JvdXBlZChlKSxsPWkuaXNSZXZlcnNlZChlKSxjPXt9LHU9W10sZj0hMSxoPXt9LHA9MCxkPTA7ZnVuY3Rpb24gbSh0LHIpe2lmKCIiIT09dCYmaS5pc0dyb3VwZWQoZSkpLTE9PT11LmluZGV4T2YodCk/KHUucHVzaCh0KSxmPSEwLGNbdF09W3JdKTpjW3RdLnB1c2gocik7ZWxzZXt2YXIgbj0ifn5pIitwO3UucHVzaChuKSxjW25dPVtyXSxwKyt9fWZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBnPXRbcl0sdj1nWzBdLHk9di50cmFjZSx4PXkubGVnZW5kZ3JvdXA7aWYob3x8eS52aXNpYmxlJiZ5LnNob3dsZWdlbmQpaWYobi50cmFjZUlzKHksInBpZS1saWtlIikpZm9yKGhbeF18fChoW3hdPXt9KSxhPTA7YTxnLmxlbmd0aDthKyspe3ZhciBiPWdbYV0ubGFiZWw7aFt4XVtiXXx8KG0oeCx7bGFiZWw6Yixjb2xvcjpnW2FdLmNvbG9yLGk6Z1thXS5pLHRyYWNlOnkscHRzOmdbYV0ucHRzfSksaFt4XVtiXT0hMCxkPU1hdGgubWF4KGQsKGJ8fCIiKS5sZW5ndGgpKX1lbHNlIG0oeCx2KSxkPU1hdGgubWF4KGQsKHkubmFtZXx8IiIpLmxlbmd0aCl9aWYoIXUubGVuZ3RoKXJldHVybltdO3ZhciBfPSFmfHwhcyx3PVtdO2ZvcihyPTA7cjx1Lmxlbmd0aDtyKyspe3ZhciBUPWNbdVtyXV07Xz93LnB1c2goVFswXSk6dy5wdXNoKFQpfWZvcihfJiYodz1bd10pLHI9MDtyPHcubGVuZ3RoO3IrKyl7dmFyIGs9MS8wO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspe3ZhciBBPXdbcl1bYV0udHJhY2UubGVnZW5kcmFuaztrPkEmJihrPUEpfXdbcl1bMF0uX2dyb3VwTWluUmFuaz1rLHdbcl1bMF0uX3ByZUdyb3VwU29ydD1yfXZhciBNPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHJhY2UubGVnZW5kcmFuay1lLnRyYWNlLmxlZ2VuZHJhbmt8fHQuX3ByZVNvcnQtZS5fcHJlU29ydH07Zm9yKHcuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXt0WzBdLl9wcmVHcm91cFNvcnQ9ZX0pKSx3LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0uX2dyb3VwTWluUmFuay1lWzBdLl9ncm91cE1pblJhbmt8fHRbMF0uX3ByZUdyb3VwU29ydC1lWzBdLl9wcmVHcm91cFNvcnR9KSkscj0wO3I8dy5sZW5ndGg7cisrKXt3W3JdLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7dC5fcHJlU29ydD1lfSkpLHdbcl0uc29ydChNKTt2YXIgUz13W3JdWzBdLnRyYWNlLEU9bnVsbDtmb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXt2YXIgTD13W3JdW2FdLnRyYWNlLmxlZ2VuZGdyb3VwdGl0bGU7aWYoTCYmTC50ZXh0KXtFPUwsbyYmKEwuZm9udD1lLl9ncm91cFRpdGxlRm9udCk7YnJlYWt9fWlmKGwmJndbcl0ucmV2ZXJzZSgpLEUpe3ZhciBDPSExO2ZvcihhPTA7YTx3W3JdLmxlbmd0aDthKyspaWYobi50cmFjZUlzKHdbcl1bYV0udHJhY2UsInBpZS1saWtlIikpe0M9ITA7YnJlYWt9d1tyXS51bnNoaWZ0KHtpOi0xLGdyb3VwVGl0bGU6RSxub0NsaWNrOkMsdHJhY2U6e3Nob3dsZWdlbmQ6Uy5zaG93bGVnZW5kLGxlZ2VuZGdyb3VwOlMubGVnZW5kZ3JvdXAsdmlzaWJsZToidG9nZ2xlaXRlbSI9PT1lLmdyb3VwY2xpY2t8fFMudmlzaWJsZX19KX1mb3IoYT0wO2E8d1tyXS5sZW5ndGg7YSsrKXdbcl1bYV09W3dbcl1bYV1dfXJldHVybiBlLl9sZ3JvdXBzTGVuZ3RoPXcubGVuZ3RoLGUuX21heE5hbWVMZW5ndGg9ZCx3fX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2hlbHBlcnMiOjY5NX1dLDY5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT0hMDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuX2Z1bGxMYXlvdXQ7aWYoIWUuX2RyYWdnZWQmJiFlLl9lZGl0aW5nKXt2YXIgcyxsPW8ubGVnZW5kLml0ZW1jbGljayxjPW8ubGVnZW5kLml0ZW1kb3VibGVjbGljayx1PW8ubGVnZW5kLmdyb3VwY2xpY2s7aWYoMT09PXImJiJ0b2dnbGUiPT09bCYmInRvZ2dsZW90aGVycyI9PT1jJiZhJiZlLmRhdGEmJmUuX2NvbnRleHQuc2hvd1RpcHM/KG4ubm90aWZpZXIobi5fKGUsIkRvdWJsZS1jbGljayBvbiBsZWdlbmQgdG8gaXNvbGF0ZSBvbmUgdHJhY2UiKSwibG9uZyIpLGE9ITEpOmE9ITEsMT09PXI/cz1sOjI9PT1yJiYocz1jKSxzKXt2YXIgZj0idG9nZ2xlZ3JvdXAiPT09dSxoPW8uaGlkZGVubGFiZWxzP28uaGlkZGVubGFiZWxzLnNsaWNlKCk6W10scD10LmRhdGEoKVswXVswXTtpZighcC5ncm91cFRpdGxlfHwhcC5ub0NsaWNrKXt2YXIgZCxtLGcsdix5LHg9ZS5fZnVsbERhdGEsYj1wLnRyYWNlLF89Yi5sZWdlbmRncm91cCx3PXt9LFQ9W10saz1bXSxBPVtdO2lmKGkudHJhY2VJcyhiLCJwaWUtbGlrZSIpKXt2YXIgTT1wLmxhYmVsLFM9aC5pbmRleE9mKE0pOyJ0b2dnbGUiPT09cz8tMT09PVM/aC5wdXNoKE0pOmguc3BsaWNlKFMsMSk6InRvZ2dsZW90aGVycyI9PT1zJiYoaD1bXSxlLmNhbGNkYXRhWzBdLmZvckVhY2goKGZ1bmN0aW9uKHQpe00hPT10LmxhYmVsJiZoLnB1c2godC5sYWJlbCl9KSksZS5fZnVsbExheW91dC5oaWRkZW5sYWJlbHMmJmUuX2Z1bGxMYXlvdXQuaGlkZGVubGFiZWxzLmxlbmd0aD09PWgubGVuZ3RoJiYtMT09PVMmJihoPVtdKSksaS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGUsImhpZGRlbmxhYmVscyIsaCl9ZWxzZXt2YXIgRSxMPV8mJl8ubGVuZ3RoLEM9W107aWYoTClmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKShFPXhbZF0pLnZpc2libGUmJkUubGVnZW5kZ3JvdXA9PT1fJiZDLnB1c2goZCk7aWYoInRvZ2dsZSI9PT1zKXt2YXIgUDtzd2l0Y2goYi52aXNpYmxlKXtjYXNlITA6UD0ibGVnZW5kb25seSI7YnJlYWs7Y2FzZSExOlA9ITE7YnJlYWs7Y2FzZSJsZWdlbmRvbmx5IjpQPSEwfWlmKEwpaWYoZilmb3IoZD0wO2Q8eC5sZW5ndGg7ZCsrKSExIT09eFtkXS52aXNpYmxlJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyYmaih4W2RdLFApO2Vsc2UgaihiLFApO2Vsc2UgaihiLFApfWVsc2UgaWYoInRvZ2dsZW90aGVycyI9PT1zKXt2YXIgSSxPLHosRCxSPSEwO2ZvcihkPTA7ZDx4Lmxlbmd0aDtkKyspaWYoST14W2RdPT09Yix6PSEwIT09eFtkXS5zaG93bGVnZW5kLCEoSXx8enx8KE89TCYmeFtkXS5sZWdlbmRncm91cD09PV8pfHwhMCE9PXhbZF0udmlzaWJsZXx8aS50cmFjZUlzKHhbZF0sIm5vdExlZ2VuZElzb2xhdGFibGUiKSkpe1I9ITE7YnJlYWt9Zm9yKGQ9MDtkPHgubGVuZ3RoO2QrKylpZighMSE9PXhbZF0udmlzaWJsZSYmIWkudHJhY2VJcyh4W2RdLCJub3RMZWdlbmRJc29sYXRhYmxlIikpc3dpdGNoKGIudmlzaWJsZSl7Y2FzZSJsZWdlbmRvbmx5IjpqKHhbZF0sITApO2JyZWFrO2Nhc2UhMDpEPSEhUnx8ImxlZ2VuZG9ubHkiLEk9eFtkXT09PWIsej0hMCE9PXhbZF0uc2hvd2xlZ2VuZCYmIXhbZF0ubGVnZW5kZ3JvdXAsTz1JfHxMJiZ4W2RdLmxlZ2VuZGdyb3VwPT09XyxqKHhbZF0sISghTyYmIXopfHxEKX19Zm9yKGQ9MDtkPGsubGVuZ3RoO2QrKylpZihnPWtbZF0pe3ZhciBGPWcuY29uc3RydWN0VXBkYXRlKCksQj1PYmplY3Qua2V5cyhGKTtmb3IobT0wO208Qi5sZW5ndGg7bSsrKXY9QlttXSwod1t2XT13W3ZdfHxbXSlbQVtkXV09Rlt2XX1mb3IoeT1PYmplY3Qua2V5cyh3KSxkPTA7ZDx5Lmxlbmd0aDtkKyspZm9yKHY9eVtkXSxtPTA7bTxULmxlbmd0aDttKyspd1t2XS5oYXNPd25Qcm9wZXJ0eShtKXx8KHdbdl1bbV09dm9pZCAwKTtpLmNhbGwoIl9ndWlSZXN0eWxlIixlLHcsVCl9fX19ZnVuY3Rpb24gTih0LGUscil7dmFyIG49VC5pbmRleE9mKHQpLGk9d1tlXTtyZXR1cm4gaXx8KGk9d1tlXT1bXSksLTE9PT1ULmluZGV4T2YodCkmJihULnB1c2godCksbj1ULmxlbmd0aC0xKSxpW25dPXIsbn1mdW5jdGlvbiBqKHQsZSl7aWYoIXAuZ3JvdXBUaXRsZXx8Zil7dmFyIHI9dC5fZnVsbElucHV0O2lmKGkuaGFzVHJhbnNmb3JtKHIsImdyb3VwYnkiKSl7dmFyIGE9a1tyLmluZGV4XTtpZighYSl7dmFyIG89aS5nZXRUcmFuc2Zvcm1JbmRpY2VzKHIsImdyb3VwYnkiKSxzPW9bby5sZW5ndGgtMV07YT1uLmtleWVkQ29udGFpbmVyKHIsInRyYW5zZm9ybXNbIitzKyJdLnN0eWxlcyIsInRhcmdldCIsInZhbHVlLnZpc2libGUiKSxrW3IuaW5kZXhdPWF9dmFyIGw9YS5nZXQodC5fZ3JvdXApO3ZvaWQgMD09PWwmJihsPSEwKSwhMSE9PWwmJmEuc2V0KHQuX2dyb3VwLGUpLEFbci5pbmRleF09TihyLmluZGV4LCJ2aXNpYmxlIiwhMSE9PXIudmlzaWJsZSl9ZWxzZXt2YXIgYz0hMSE9PXIudmlzaWJsZSYmZTtOKHIuaW5kZXgsInZpc2libGUiLGMpfX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDY5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmlzR3JvdXBlZD1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PSh0LnRyYWNlb3JkZXJ8fCIiKS5pbmRleE9mKCJncm91cGVkIil9LHIuaXNWZXJ0aWNhbD1mdW5jdGlvbih0KXtyZXR1cm4iaCIhPT10Lm9yaWVudGF0aW9ufSxyLmlzUmV2ZXJzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT0odC50cmFjZW9yZGVyfHwiIikuaW5kZXhPZigicmV2ZXJzZWQiKX19LHt9XSw2OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6ImxlZ2VuZCIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksZHJhdzp0KCIuL2RyYXciKSxzdHlsZTp0KCIuL3N0eWxlIil9fSx7Ii4vYXR0cmlidXRlcyI6Njg5LCIuL2RlZmF1bHRzIjo2OTEsIi4vZHJhdyI6NjkyLCIuL3N0eWxlIjo2OTd9XSw2OTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5zdHJUcmFuc2xhdGUscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi9jb2xvciIpLGM9dCgiLi4vY29sb3JzY2FsZS9oZWxwZXJzIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vdHJhY2VzL3BpZS9zdHlsZV9vbmUiKSxoPXQoIi4uLy4uL3RyYWNlcy9waWUvaGVscGVycyIpLmNhc3RPcHRpb24scD10KCIuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIGQodCxlKXtyZXR1cm4oZT8icmFkaWFsIjoiaG9yaXpvbnRhbCIpKyh0PyIiOiJyZXZlcnNlZCIpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dFswXS50cmFjZSxyPWUuY29udG91cnMsbj11Lmhhc0xpbmVzKGUpLGk9dS5oYXNNYXJrZXJzKGUpLGE9ZS52aXNpYmxlJiZlLmZpbGwmJiJub25lIiE9PWUuZmlsbCxvPSExLHM9ITE7aWYocil7dmFyIGw9ci5jb2xvcmluZzsibGluZXMiPT09bD9vPSEwOm49Im5vbmUiPT09bHx8ImhlYXRtYXAiPT09bHx8ci5zaG93bGluZXMsImNvbnN0cmFpbnQiPT09ci50eXBlP2E9Ij0iIT09ci5fb3BlcmF0aW9uOiJmaWxsIiE9PWwmJiJoZWF0bWFwIiE9PWx8fChzPSEwKX1yZXR1cm57c2hvd01hcmtlcjppLHNob3dMaW5lOm4sc2hvd0ZpbGw6YSxzaG93R3JhZGllbnRMaW5lOm8sc2hvd0dyYWRpZW50RmlsbDpzLGFueUxpbmU6bnx8byxhbnlGaWxsOmF8fHN9fWZ1bmN0aW9uIGcodCxlLHIpe3JldHVybiB0JiZhLmlzQXJyYXlPclR5cGVkQXJyYXkodCk/ZTp0PnI/cjp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHY9ZS5fZnVsbExheW91dDtyfHwocj12LmxlZ2VuZCk7dmFyIHk9ImNvbnN0YW50Ij09PXIuaXRlbXNpemluZyx4PXIuaXRlbXdpZHRoLGI9KHgrMipwLml0ZW1HYXApLzIsXz1vKGIsMCksdz1mdW5jdGlvbih0LGUscixuKXt2YXIgaTtpZih0KzEpaT10O2Vsc2V7aWYoIShlJiZlLndpZHRoPjApKXJldHVybiAwO2k9ZS53aWR0aH1yZXR1cm4geT9uOk1hdGgubWluKGkscil9O2Z1bmN0aW9uIFQodCxhLG8pe3ZhciB1PXRbMF0udHJhY2UsZj11Lm1hcmtlcnx8e30saD1mLmxpbmV8fHt9LHA9bz91LnZpc2libGUmJnUudHlwZT09PW86aS50cmFjZUlzKHUsImJhciIpLGQ9bi5zZWxlY3QoYSkuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQiK28pLmRhdGEocD9bdF06W10pO2QuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQiK28sITApLmF0dHIoImQiLCJNNiw2SC02Vi02SDZaIikuYXR0cigidHJhbnNmb3JtIixfKSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxvPXcoYS5tbHcsZi5saW5lLDUsMik7aS5zdHlsZSgic3Ryb2tlLXdpZHRoIixvKyJweCIpO3ZhciBwPWEubWNjO2lmKCFyLl9pbkhvdmVyJiYibWMiaW4gYSl7dmFyIGQ9YyhmKSxtPWQubWlkO3ZvaWQgMD09PW0mJihtPShkLm1heCtkLm1pbikvMikscD1zLnRyeUNvbG9yc2NhbGUoZiwiIikobSl9dmFyIHY9cHx8YS5tY3x8Zi5jb2xvcix5PWYucGF0dGVybix4PXkmJnMuZ2V0UGF0dGVybkF0dHIoeS5zaGFwZSwwLCIiKTtpZih4KXt2YXIgYj1zLmdldFBhdHRlcm5BdHRyKHkuYmdjb2xvciwwLG51bGwpLF89cy5nZXRQYXR0ZXJuQXR0cih5LmZnY29sb3IsMCxudWxsKSxUPXkuZmdvcGFjaXR5LGs9Zyh5LnNpemUsOCwxMCksQT1nKHkuc29saWRpdHksLjUsMSksTT0ibGVnZW5kLSIrdS51aWQ7aS5jYWxsKHMucGF0dGVybiwibGVnZW5kIixlLE0seCxrLEEscCx5LmZpbGxtb2RlLGIsXyxUKX1lbHNlIGkuY2FsbChsLmZpbGwsdik7byYmbC5zdHJva2UoaSxhLm1sY3x8aC5jb2xvcil9KSl9ZnVuY3Rpb24gayh0LGUscil7dmFyIG89dFswXSxzPW8udHJhY2UsbD1yP3MudmlzaWJsZSYmcy50eXBlPT09cjppLnRyYWNlSXMocyxyKSxjPW4uc2VsZWN0KGUpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kIityKS5kYXRhKGw/W3RdOltdKTtpZihjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgibGVnZW5kIityLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksYy5leGl0KCkucmVtb3ZlKCksYy5zaXplKCkpe3ZhciB1PShzLm1hcmtlcnx8e30pLmxpbmUscD13KGgodS53aWR0aCxvLnB0cyksdSw1LDIpLGQ9YS5taW5FeHRlbmQocyx7bWFya2VyOntsaW5lOnt3aWR0aDpwfX19KTtkLm1hcmtlci5saW5lLmNvbG9yPXUuY29sb3I7dmFyIG09YS5taW5FeHRlbmQobyx7dHJhY2U6ZH0pO2YoYyxtLGQpfX10LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9YS5lbnN1cmVTaW5nbGUoZSwiZyIsImxheWVycyIpO2kuc3R5bGUoIm9wYWNpdHkiLHRbMF0udHJhY2Uub3BhY2l0eSk7dmFyIHM9ci52YWxpZ24sbD10WzBdLmxpbmVIZWlnaHQsYz10WzBdLmhlaWdodDtpZigibWlkZGxlIiE9PXMmJmwmJmMpe3ZhciB1PXt0b3A6MSxib3R0b206LTF9W3NdKiguNSoobC1jKzMpKTtpLmF0dHIoInRyYW5zZm9ybSIsbygwLHUpKX1lbHNlIGkuYXR0cigidHJhbnNmb3JtIixudWxsKTtpLnNlbGVjdEFsbCgiZy5sZWdlbmRmaWxsIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kZmlsbCIsITApLGkuc2VsZWN0QWxsKCJnLmxlZ2VuZGxpbmVzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kbGluZXMiLCEwKTt2YXIgZj1pLnNlbGVjdEFsbCgiZy5sZWdlbmRzeW1ib2xzIikuZGF0YShbdF0pO2YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJsZWdlbmRzeW1ib2xzIiwhMCksZi5zZWxlY3RBbGwoImcubGVnZW5kcG9pbnRzIikuZGF0YShbdF0pLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGVnZW5kcG9pbnRzIiwhMCl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaT10WzBdLnRyYWNlLG89W107aWYoaS52aXNpYmxlKXN3aXRjaChpLnR5cGUpe2Nhc2UiaGlzdG9ncmFtMmQiOmNhc2UiaGVhdG1hcCI6bz1bWyJNLTE1LC0yVjRIMTVWLTJaIl1dLHI9ITA7YnJlYWs7Y2FzZSJjaG9yb3BsZXRoIjpjYXNlImNob3JvcGxldGhtYXBib3giOm89W1siTS02LC02VjZINlYtNloiXV0scj0hMDticmVhaztjYXNlImRlbnNpdHltYXBib3giOm89W1siTS02LDAgYTYsNiAwIDEsMCAxMiwwIGEgNiw2IDAgMSwwIC0xMiwwIl1dLHI9InJhZGlhbCI7YnJlYWs7Y2FzZSJjb25lIjpvPVtbIk0tNiwyIEEyLDIgMCAwLDAgLTYsNiBWNkw2LDRaIl0sWyJNLTYsLTYgQTIsMiAwIDAsMCAtNiwtMiBMNiwtNFoiXSxbIk0tNiwtMiBBMiwyIDAgMCwwIC02LDIgTDYsMFoiXV0scj0hMTticmVhaztjYXNlInN0cmVhbXR1YmUiOm89W1siTS02LDIgQTIsMiAwIDAsMCAtNiw2IEg2IEEyLDIgMCAwLDEgNiwyIFoiXSxbIk0tNiwtNiBBMiwyIDAgMCwwIC02LC0yIEg2IEEyLDIgMCAwLDEgNiwtNiBaIl0sWyJNLTYsLTIgQTIsMiAwIDAsMCAtNiwyIEg2IEEyLDIgMCAwLDEgNiwtMiBaIl1dLHI9ITE7YnJlYWs7Y2FzZSJzdXJmYWNlIjpvPVtbIk0tNiwtNiBBMiwzIDAgMCwwIC02LDAgSDYgQTIsMyAwIDAsMSA2LC02IFoiXSxbIk0tNiwxIEEyLDMgMCAwLDEgLTYsNiBINiBBMiwzIDAgMCwwIDYsMCBaIl1dLHI9ITA7YnJlYWs7Y2FzZSJtZXNoM2QiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02SDZMMCw2WiJdXSxyPSExO2JyZWFrO2Nhc2Uidm9sdW1lIjpvPVtbIk0tNiw2SDBMLTYsLTZaIl0sWyJNNiw2SDBMNiwtNloiXSxbIk0tNiwtNkg2TDAsNloiXV0scj0hMDticmVhaztjYXNlImlzb3N1cmZhY2UiOm89W1siTS02LDZIMEwtNiwtNloiXSxbIk02LDZIMEw2LC02WiJdLFsiTS02LC02IEExMiwyNCAwIDAsMCA2LC02IEwwLDZaIl1dLHI9ITF9dmFyIHU9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmQzZGFuZGZyaWVuZHMiKS5kYXRhKG8pO3UuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmQzZGFuZGZyaWVuZHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSksdS5leGl0KCkucmVtb3ZlKCksdS5lYWNoKChmdW5jdGlvbih0LG8pe3ZhciB1LGY9bi5zZWxlY3QodGhpcyksaD1jKGkpLHA9aC5jb2xvcnNjYWxlLG09aC5yZXZlcnNlc2NhbGU7aWYocCl7aWYoIXIpe3ZhciBnPXAubGVuZ3RoO3U9MD09PW8/cFttP2ctMTowXVsxXToxPT09bz9wW20/MDpnLTFdWzFdOnBbTWF0aC5mbG9vcigoZy0xKS8yKV1bMV19fWVsc2V7dmFyIHY9aS52ZXJ0ZXhjb2xvcnx8aS5mYWNlY29sb3J8fGkuY29sb3I7dT1hLmlzQXJyYXlPclR5cGVkQXJyYXkodik/dltvXXx8dlswXTp2fWYuYXR0cigiZCIsdFswXSksdT9mLmNhbGwobC5maWxsLHUpOmYuY2FsbCgoZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciBuPSJsZWdlbmRmaWxsLSIraS51aWQ7cy5ncmFkaWVudCh0LGUsbixkKG0sInJhZGlhbCI9PT1yKSxwLCJmaWxsIil9fSkpfSkpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj0id2F0ZXJmYWxsIj09PWUudHlwZTtpZih0WzBdLl9kaXN0aW5jdCYmcil7dmFyIGk9dFswXS50cmFjZVt0WzBdLmRpcl0ubWFya2VyO3JldHVybiB0WzBdLm1jPWkuY29sb3IsdFswXS5tbHc9aS5saW5lLndpZHRoLHRbMF0ubWxjPWkubGluZS5jb2xvcixUKHQsdGhpcywid2F0ZXJmYWxsIil9dmFyIGE9W107ZS52aXNpYmxlJiZyJiYoYT10WzBdLmhhc1RvdGFscz9bWyJpbmNyZWFzaW5nIiwiTS02LC02VjZIMFoiXSxbInRvdGFscyIsIk02LDZIMEwtNiwtNkgtMFoiXSxbImRlY3JlYXNpbmciLCJNNiw2Vi02SDBaIl1dOltbImluY3JlYXNpbmciLCJNLTYsLTZWNkg2WiJdLFsiZGVjcmVhc2luZyIsIk02LDZWLTZILTZaIl1dKTt2YXIgbz1uLnNlbGVjdCh0aGlzKS5zZWxlY3QoImcubGVnZW5kcG9pbnRzIikuc2VsZWN0QWxsKCJwYXRoLmxlZ2VuZHdhdGVyZmFsbCIpLmRhdGEoYSk7by5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZHdhdGVyZmFsbCIsITApLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxvLmV4aXQoKS5yZW1vdmUoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGk9ZVt0WzBdXS5tYXJrZXIsYT13KHZvaWQgMCxpLmxpbmUsNSwyKTtyLmF0dHIoImQiLHRbMV0pLnN0eWxlKCJzdHJva2Utd2lkdGgiLGErInB4IikuY2FsbChsLmZpbGwsaS5jb2xvciksYSYmci5jYWxsKGwuc3Ryb2tlLGkubGluZS5jb2xvcil9KSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7VCh0LHRoaXMsImZ1bm5lbCIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe1QodCx0aGlzKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10WzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRib3giKS5kYXRhKHIudmlzaWJsZSYmaS50cmFjZUlzKHIsImJveC12aW9saW4iKT9bdF06W10pO28uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRib3giLCEwKS5hdHRyKCJkIiwiTTYsNkgtNlYtNkg2WiIpLmF0dHIoInRyYW5zZm9ybSIsXyksby5leGl0KCkucmVtb3ZlKCksby5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO2lmKCJhbGwiIT09ci5ib3hwb2ludHMmJiJhbGwiIT09ci5wb2ludHN8fDAhPT1sLm9wYWNpdHkoci5maWxsY29sb3IpfHwwIT09bC5vcGFjaXR5KChyLmxpbmV8fHt9KS5jb2xvcikpe3ZhciBpPXcodm9pZCAwLHIubGluZSw1LDIpO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsaSsicHgiKS5jYWxsKGwuZmlsbCxyLmZpbGxjb2xvciksaSYmbC5zdHJva2UodCxyLmxpbmUuY29sb3IpfWVsc2V7dmFyIGM9YS5taW5FeHRlbmQocix7bWFya2VyOntzaXplOnk/MTI6YS5jb25zdHJhaW4oci5tYXJrZXIuc2l6ZSwyLDE2KSxzaXplcmVmOjEsc2l6ZW1pbjoxLHNpemVtb2RlOiJkaWFtZXRlciJ9fSk7by5jYWxsKHMucG9pbnRTdHlsZSxjLGUpfX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXtrKHQsdGhpcywiZnVubmVsYXJlYSIpfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2sodCx0aGlzLCJwaWUiKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcixpLG89bSh0KSxsPW8uc2hvd0ZpbGwsZj1vLnNob3dMaW5lLGg9by5zaG93R3JhZGllbnRMaW5lLHA9by5zaG93R3JhZGllbnRGaWxsLGc9by5hbnlGaWxsLHY9by5hbnlMaW5lLHk9dFswXSxiPXkudHJhY2UsXz1jKGIpLFQ9Xy5jb2xvcnNjYWxlLGs9Xy5yZXZlcnNlc2NhbGUsQT11Lmhhc01hcmtlcnMoYil8fCFnPyJNNSwwIjp2PyJNNSwtMiI6Ik01LC0zIixNPW4uc2VsZWN0KHRoaXMpLFM9TS5zZWxlY3QoIi5sZWdlbmRmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShsfHxwP1t0XTpbXSk7aWYoUy5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWZpbGwiLCEwKSxTLmV4aXQoKS5yZW1vdmUoKSxTLmF0dHIoImQiLEErImgiK3grInY2aC0iK3grInoiKS5jYWxsKGw/cy5maWxsR3JvdXBTdHlsZTpmdW5jdGlvbih0KXtpZih0LnNpemUoKSl7dmFyIHI9ImxlZ2VuZGZpbGwtIitiLnVpZDtzLmdyYWRpZW50KHQsZSxyLGQoayksVCwiZmlsbCIpfX0pLGZ8fGgpe3ZhciBFPXcodm9pZCAwLGIubGluZSwxMCw1KTtpPWEubWluRXh0ZW5kKGIse2xpbmU6e3dpZHRoOkV9fSkscj1bYS5taW5FeHRlbmQoeSx7dHJhY2U6aX0pXX12YXIgTD1NLnNlbGVjdCgiLmxlZ2VuZGxpbmVzIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShmfHxoP1tyXTpbXSk7TC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImpzLWxpbmUiLCEwKSxMLmV4aXQoKS5yZW1vdmUoKSxMLmF0dHIoImQiLEErKGg/ImwiK3grIiwwLjAwMDEiOiJoIit4KSkuY2FsbChmP3MubGluZUdyb3VwU3R5bGU6ZnVuY3Rpb24odCl7aWYodC5zaXplKCkpe3ZhciByPSJsZWdlbmRsaW5lLSIrYi51aWQ7cy5saW5lR3JvdXBTdHlsZSh0KSxzLmdyYWRpZW50KHQsZSxyLGQoayksVCwic3Ryb2tlIil9fSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHIsaSxvPW0odCksbD1vLmFueUZpbGwsYz1vLmFueUxpbmUsZj1vLnNob3dMaW5lLGg9by5zaG93TWFya2VyLHA9dFswXSxkPXAudHJhY2UsZz0haCYmIWMmJiFsJiZ1Lmhhc1RleHQoZCk7ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1hLm5lc3RlZFByb3BlcnR5KGQsdCkuZ2V0KCksbz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoaSkmJmU/ZShpKTppO2lmKHkmJm8mJnZvaWQgMCE9PW4mJihvPW4pLHIpe2lmKG88clswXSlyZXR1cm4gclswXTtpZihvPnJbMV0pcmV0dXJuIHJbMV19cmV0dXJuIG99ZnVuY3Rpb24geCh0KXtyZXR1cm4gcC5fZGlzdGluY3QmJnAuaW5kZXgmJnRbcC5pbmRleF0/dFtwLmluZGV4XTp0WzBdfWlmKGh8fGd8fGYpe3ZhciBiPXt9LHc9e307aWYoaCl7Yi5tYz12KCJtYXJrZXIuY29sb3IiLHgpLGIubXg9digibWFya2VyLnN5bWJvbCIseCksYi5tbz12KCJtYXJrZXIub3BhY2l0eSIsYS5tZWFuLFsuMiwxXSksYi5tbGM9digibWFya2VyLmxpbmUuY29sb3IiLHgpLGIubWx3PXYoIm1hcmtlci5saW5lLndpZHRoIixhLm1lYW4sWzAsNV0sMiksdy5tYXJrZXI9e3NpemVyZWY6MSxzaXplbWluOjEsc2l6ZW1vZGU6ImRpYW1ldGVyIn07dmFyIFQ9digibWFya2VyLnNpemUiLGEubWVhbixbMiwxNl0sMTIpO2IubXM9VCx3Lm1hcmtlci5zaXplPVR9ZiYmKHcubGluZT17d2lkdGg6digibGluZS53aWR0aCIseCxbMCwxMF0sNSl9KSxnJiYoYi50eD0iQWEiLGIudHA9digidGV4dHBvc2l0aW9uIix4KSxiLnRzPTEwLGIudGM9digidGV4dGZvbnQuY29sb3IiLHgpLGIudGY9digidGV4dGZvbnQuZmFtaWx5Iix4KSkscj1bYS5taW5FeHRlbmQocCxiKV0sKGk9YS5taW5FeHRlbmQoZCx3KSkuc2VsZWN0ZWRwb2ludHM9bnVsbCxpLnRleHR0ZW1wbGF0ZT1udWxsfXZhciBrPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKSxBPWsuc2VsZWN0QWxsKCJwYXRoLnNjYXR0ZXJwdHMiKS5kYXRhKGg/cjpbXSk7QS5lbnRlcigpLmluc2VydCgicGF0aCIsIjpmaXJzdC1jaGlsZCIpLmNsYXNzZWQoInNjYXR0ZXJwdHMiLCEwKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLEEuZXhpdCgpLnJlbW92ZSgpLEEuY2FsbChzLnBvaW50U3R5bGUsaSxlKSxoJiYoclswXS5tcmM9Myk7dmFyIE09ay5zZWxlY3RBbGwoImcucG9pbnR0ZXh0IikuZGF0YShnP3I6W10pO00uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludHRleHQiLCEwKS5hcHBlbmQoInRleHQiKS5hdHRyKCJ0cmFuc2Zvcm0iLF8pLE0uZXhpdCgpLnJlbW92ZSgpLE0uc2VsZWN0QWxsKCJ0ZXh0IikuY2FsbChzLnRleHRQb2ludFN0eWxlLGksZSl9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZSxyPW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiZy5sZWdlbmRwb2ludHMiKS5zZWxlY3RBbGwoInBhdGgubGVnZW5kY2FuZGxlIikuZGF0YShlLnZpc2libGUmJiJjYW5kbGVzdGljayI9PT1lLnR5cGU/W3QsdF06W10pO3IuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJsZWdlbmRjYW5kbGUiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSC04TS04LDZWLTZIOFoiOiJNMTUsMEg4TTgsLTZWNkgtOFoifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJzdHJva2Utd2lkdGgiLG8rInB4IikuY2FsbChsLmZpbGwsYS5maWxsY29sb3IpLG8mJmwuc3Ryb2tlKGksYS5saW5lLmNvbG9yKX0pKX0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcykuc2VsZWN0KCJnLmxlZ2VuZHBvaW50cyIpLnNlbGVjdEFsbCgicGF0aC5sZWdlbmRvaGxjIikuZGF0YShlLnZpc2libGUmJiJvaGxjIj09PWUudHlwZT9bdCx0XTpbXSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImxlZ2VuZG9obGMiLCEwKS5hdHRyKCJkIiwoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT8iTS0xNSwwSDBNLTgsLTZWMCI6Ik0xNSwwSDBNOCw2VjAifSkpLmF0dHIoInRyYW5zZm9ybSIsXykuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwxKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmVhY2goKGZ1bmN0aW9uKHQscil7dmFyIGk9bi5zZWxlY3QodGhpcyksYT1lW3I/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIl0sbz13KHZvaWQgMCxhLmxpbmUsNSwyKTtpLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNhbGwocy5kYXNoTGluZSxhLmxpbmUuZGFzaCxvKSxvJiZsLnN0cm9rZShpLGEubGluZS5jb2xvcil9KSl9KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi8uLi90cmFjZXMvcGllL2hlbHBlcnMiOjExNzAsIi4uLy4uL3RyYWNlcy9waWUvc3R5bGVfb25lIjoxMTc2LCIuLi8uLi90cmFjZXMvc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vY29sb3IiOjYzOSwiLi4vY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4uL2RyYXdpbmciOjY2MSwiLi9jb25zdGFudHMiOjY5MCwiQHBsb3RseS9kMyI6NTh9XSw2OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dCgiLi9jb25zdGFudHMiKTtlLmV4cG9ydHM9e2VkaXRUeXBlOiJtb2RlYmFyIixvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToibW9kZWJhciJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToibW9kZWJhciJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im1vZGViYXIifSxhY3RpdmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJtb2RlYmFyIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGFkZDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6IiIsZWRpdFR5cGU6Im1vZGViYXIifSxyZW1vdmU6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0OiIiLGVkaXRUeXBlOiJtb2RlYmFyIn19fSx7Ii4vY29uc3RhbnRzIjo3MDB9XSw2OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxvPXQoIi4uLy4uL2ZvbnRzL3Bsb3RpY29uIikscz10KCIuLi9zaGFwZXMvZHJhdyIpLmVyYXNlQWN0aXZlU2hhcGUsbD10KCIuLi8uLi9saWIiKSxjPWwuXyx1PWUuZXhwb3J0cz17fTtmdW5jdGlvbiBmKHQsZSl7dmFyIHIsaSxvPWUuY3VycmVudFRhcmdldCxzPW8uZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxsPW8uZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxjPXQuX2Z1bGxMYXlvdXQsdT17fSxmPWEubGlzdCh0LG51bGwsITApLGg9Yy5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtpZigiem9vbSI9PT1zKXt2YXIgcCxkPSJpbiI9PT1sPy41OjIsbT0oMStkKS8yLGc9KDEtZCkvMjtmb3IoaT0wO2k8Zi5sZW5ndGg7aSsrKWlmKCEocj1mW2ldKS5maXhlZHJhbmdlKWlmKHA9ci5fbmFtZSwiYXV0byI9PT1sKXVbcCsiLmF1dG9yYW5nZSJdPSEwO2Vsc2UgaWYoInJlc2V0Ij09PWwpe2lmKHZvaWQgMD09PXIuX3JhbmdlSW5pdGlhbCl1W3ArIi5hdXRvcmFuZ2UiXT0hMDtlbHNle3ZhciB2PXIuX3JhbmdlSW5pdGlhbC5zbGljZSgpO3VbcCsiLnJhbmdlWzBdIl09dlswXSx1W3ArIi5yYW5nZVsxXSJdPXZbMV19dm9pZCAwIT09ci5fc2hvd1NwaWtlSW5pdGlhbCYmKHVbcCsiLnNob3dzcGlrZXMiXT1yLl9zaG93U3Bpa2VJbml0aWFsLCJvbiIhPT1ofHxyLl9zaG93U3Bpa2VJbml0aWFsfHwoaD0ib2ZmIikpfWVsc2V7dmFyIHk9W3IucjJsKHIucmFuZ2VbMF0pLHIucjJsKHIucmFuZ2VbMV0pXSx4PVttKnlbMF0rZyp5WzFdLG0qeVsxXStnKnlbMF1dO3VbcCsiLnJhbmdlWzBdIl09ci5sMnIoeFswXSksdVtwKyIucmFuZ2VbMV0iXT1yLmwycih4WzFdKX19ZWxzZSJob3Zlcm1vZGUiIT09c3x8IngiIT09bCYmInkiIT09bHx8KGw9Yy5faXNIb3Jpej8ieSI6IngiLG8uc2V0QXR0cmlidXRlKCJkYXRhLXZhbCIsbCkpLHVbc109bDtjLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPWgsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0Ll9zdWJwbG90cy5nbDNkfHxbXSxzPXt9LGw9aS5zcGxpdCgiLiIpLGM9MDtjPG8ubGVuZ3RoO2MrKylzW29bY10rIi4iK2xbMV1dPWE7dmFyIHU9InBhbiI9PT1hP2E6Inpvb20iO3MuZHJhZ21vZGU9dSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxzKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPWUuY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIpLGk9InJlc2V0TGFzdFNhdmUiPT09cixhPSJyZXNldERlZmF1bHQiPT09cixvPXQuX2Z1bGxMYXlvdXQscz1vLl9zdWJwbG90cy5nbDNkfHxbXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHUsZj1zW2NdLGg9ZisiLmNhbWVyYSIscD1mKyIuYXNwZWN0cmF0aW8iLGQ9ZisiLmFzcGVjdG1vZGUiLG09b1tmXS5fc2NlbmU7aT8obFtoKyIudXAiXT1tLnZpZXdJbml0aWFsLnVwLGxbaCsiLmV5ZSJdPW0udmlld0luaXRpYWwuZXllLGxbaCsiLmNlbnRlciJdPW0udmlld0luaXRpYWwuY2VudGVyLHU9ITApOmEmJihsW2grIi51cCJdPW51bGwsbFtoKyIuZXllIl09bnVsbCxsW2grIi5jZW50ZXIiXT1udWxsLHU9ITApLHUmJihsW3ArIi54Il09bS52aWV3SW5pdGlhbC5hc3BlY3RyYXRpby54LGxbcCsiLnkiXT1tLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvLnksbFtwKyIueiJdPW0udmlld0luaXRpYWwuYXNwZWN0cmF0aW8ueixsW2RdPW0udmlld0luaXRpYWwuYXNwZWN0bW9kZSl9bi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbCl9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUuY3VycmVudFRhcmdldCxuPXIuX3ByZXZpb3VzVmFsLGk9dC5fZnVsbExheW91dCxhPWkuX3N1YnBsb3RzLmdsM2R8fFtdLG89WyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXSxzPXt9LGw9e307aWYobilsPW4sci5fcHJldmlvdXNWYWw9bnVsbDtlbHNle2Zvcih2YXIgYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9aVt1XSxoPXUrIi5ob3Zlcm1vZGUiO3NbaF09Zi5ob3Zlcm1vZGUsbFtoXT0hMTtmb3IodmFyIHA9MDtwPDM7cCsrKXt2YXIgZD1vW3BdLG09dSsiLiIrZCsiLnNob3dzcGlrZXMiO2xbbV09ITEsc1ttXT1mW2RdLnNob3dzcGlrZXN9fXIuX3ByZXZpb3VzVmFsPXN9cmV0dXJuIGx9ZnVuY3Rpb24gbSh0LGUpe2Zvcih2YXIgcj1lLmN1cnJlbnRUYXJnZXQsaT1yLmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiksYT1yLmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKXx8ITAsbz10Ll9mdWxsTGF5b3V0LHM9by5fc3VicGxvdHMuZ2VvfHxbXSxsPTA7bDxzLmxlbmd0aDtsKyspe3ZhciBjPXNbbF0sdT1vW2NdO2lmKCJ6b29tIj09PWkpe3ZhciBmPXUucHJvamVjdGlvbi5zY2FsZSxoPSJpbiI9PT1hPzIqZjouNSpmO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LGMrIi5wcm9qZWN0aW9uLnNjYWxlIixoKX19InJlc2V0Ij09PWkmJngodCwiZ2VvIil9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O3JldHVybiFlLmhvdmVybW9kZSYmKGUuX2hhcygiY2FydGVzaWFuIik/ZS5faXNIb3Jpej8ieSI6IngiOiJjbG9zZXN0Iil9ZnVuY3Rpb24gdih0KXt2YXIgZT1nKHQpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LCJob3Zlcm1vZGUiLGUpfWZ1bmN0aW9uIHkodCxlKXtmb3IodmFyIHI9ZS5jdXJyZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS12YWwiKSxpPXQuX2Z1bGxMYXlvdXQsYT1pLl9zdWJwbG90cy5tYXBib3h8fFtdLG89e30scz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbD1hW3NdLGM9aVtsXS56b29tLHU9ImluIj09PXI/MS4wNSpjOmMvMS4wNTtvW2wrIi56b29tIl09dX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxvKX1mdW5jdGlvbiB4KHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9zdWJwbG90c1tlXXx8W10sYT17fSxvPTA7bzxpLmxlbmd0aDtvKyspZm9yKHZhciBzPWlbb10sbD1yW3NdLl9zdWJwbG90LnZpZXdJbml0aWFsLGM9T2JqZWN0LmtleXMobCksdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2FbcysiLiIrZl09bFtmXX1uLmNhbGwoIl9ndWlSZWxheW91dCIsdCxhKX11LnRvSW1hZ2U9e25hbWU6InRvSW1hZ2UiLHRpdGxlOmZ1bmN0aW9uKHQpe3ZhciBlPSh0Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zfHx7fSkuZm9ybWF0fHwicG5nIjtyZXR1cm4gYyh0LCJwbmciPT09ZT8iRG93bmxvYWQgcGxvdCBhcyBhIHBuZyI6IkRvd25sb2FkIHBsb3QiKX0saWNvbjpvLmNhbWVyYSxjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9jb250ZXh0LnRvSW1hZ2VCdXR0b25PcHRpb25zLHI9e2Zvcm1hdDplLmZvcm1hdHx8InBuZyJ9O2wubm90aWZpZXIoYyh0LCJUYWtpbmcgc25hcHNob3QgLSB0aGlzIG1heSB0YWtlIGEgZmV3IHNlY29uZHMiKSwibG9uZyIpLCJzdmciIT09ci5mb3JtYXQmJmwuaXNJRSgpJiYobC5ub3RpZmllcihjKHQsIklFIG9ubHkgc3VwcG9ydHMgc3ZnLiAgQ2hhbmdpbmcgZm9ybWF0IHRvIHN2Zy4iKSwibG9uZyIpLHIuZm9ybWF0PSJzdmciKSxbImZpbGVuYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJzY2FsZSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QgaW4gZSYmKHJbdF09ZVt0XSl9KSksbi5jYWxsKCJkb3dubG9hZEltYWdlIix0LHIpLnRoZW4oKGZ1bmN0aW9uKGUpe2wubm90aWZpZXIoYyh0LCJTbmFwc2hvdCBzdWNjZWVkZWQiKSsiIC0gIitlLCJsb25nIil9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7bC5ub3RpZmllcihjKHQsIlNvcnJ5LCB0aGVyZSB3YXMgYSBwcm9ibGVtIGRvd25sb2FkaW5nIHlvdXIgc25hcHNob3QhIiksImxvbmciKX0pKX19LHUuc2VuZERhdGFUb0Nsb3VkPXtuYW1lOiJzZW5kRGF0YVRvQ2xvdWQiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5kaXNrLGNsaWNrOmZ1bmN0aW9uKHQpe2kuc2VuZERhdGFUb0Nsb3VkKHQpfX0sdS5lZGl0SW5DaGFydFN0dWRpbz17bmFtZToiZWRpdEluQ2hhcnRTdHVkaW8iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVkaXQgaW4gQ2hhcnQgU3R1ZGlvIil9LGljb246by5wZW5jaWwsY2xpY2s6ZnVuY3Rpb24odCl7aS5zZW5kRGF0YVRvQ2xvdWQodCl9fSx1Lnpvb20yZD17bmFtZToiem9vbTJkIixfY2F0OiJ6b29tIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Inpvb20iLGljb246by56b29tYm94LGNsaWNrOmZ9LHUucGFuMmQ9e25hbWU6InBhbjJkIixfY2F0OiJwYW4iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlBhbiIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJwYW4iLGljb246by5wYW4sY2xpY2s6Zn0sdS5zZWxlY3QyZD17bmFtZToic2VsZWN0MmQiLF9jYXQ6InNlbGVjdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiQm94IFNlbGVjdCIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJzZWxlY3QiLGljb246by5zZWxlY3Rib3gsY2xpY2s6Zn0sdS5sYXNzbzJkPXtuYW1lOiJsYXNzbzJkIixfY2F0OiJsYXNzbyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiTGFzc28gU2VsZWN0Iil9LGF0dHI6ImRyYWdtb2RlIix2YWw6Imxhc3NvIixpY29uOm8ubGFzc28sY2xpY2s6Zn0sdS5kcmF3Y2xvc2VkcGF0aD17bmFtZToiZHJhd2Nsb3NlZHBhdGgiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgY2xvc2VkIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdjbG9zZWRwYXRoIixpY29uOm8uZHJhd2Nsb3NlZHBhdGgsY2xpY2s6Zn0sdS5kcmF3b3BlbnBhdGg9e25hbWU6ImRyYXdvcGVucGF0aCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBvcGVuIGZyZWVmb3JtIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdvcGVucGF0aCIsaWNvbjpvLmRyYXdvcGVucGF0aCxjbGljazpmfSx1LmRyYXdsaW5lPXtuYW1lOiJkcmF3bGluZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiRHJhdyBsaW5lIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdsaW5lIixpY29uOm8uZHJhd2xpbmUsY2xpY2s6Zn0sdS5kcmF3cmVjdD17bmFtZToiZHJhd3JlY3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkRyYXcgcmVjdGFuZ2xlIil9LGF0dHI6ImRyYWdtb2RlIix2YWw6ImRyYXdyZWN0IixpY29uOm8uZHJhd3JlY3QsY2xpY2s6Zn0sdS5kcmF3Y2lyY2xlPXtuYW1lOiJkcmF3Y2lyY2xlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJEcmF3IGNpcmNsZSIpfSxhdHRyOiJkcmFnbW9kZSIsdmFsOiJkcmF3Y2lyY2xlIixpY29uOm8uZHJhd2NpcmNsZSxjbGljazpmfSx1LmVyYXNlc2hhcGU9e25hbWU6ImVyYXNlc2hhcGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkVyYXNlIGFjdGl2ZSBzaGFwZSIpfSxpY29uOm8uZXJhc2VzaGFwZSxjbGljazpzfSx1Lnpvb21JbjJkPXtuYW1lOiJ6b29tSW4yZCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6Zn0sdS56b29tT3V0MmQ9e25hbWU6Inpvb21PdXQyZCIsX2NhdDoiem9vbW91dCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSBvdXQiKX0sYXR0cjoiem9vbSIsdmFsOiJvdXQiLGljb246by56b29tX21pbnVzLGNsaWNrOmZ9LHUuYXV0b1NjYWxlMmQ9e25hbWU6ImF1dG9TY2FsZTJkIixfY2F0OiJhdXRvc2NhbGUiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIkF1dG9zY2FsZSIpfSxhdHRyOiJ6b29tIix2YWw6ImF1dG8iLGljb246by5hdXRvc2NhbGUsY2xpY2s6Zn0sdS5yZXNldFNjYWxlMmQ9e25hbWU6InJlc2V0U2NhbGUyZCIsX2NhdDoicmVzZXRzY2FsZSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgYXhlcyIpfSxhdHRyOiJ6b29tIix2YWw6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmfSx1LmhvdmVyQ2xvc2VzdENhcnRlc2lhbj17bmFtZToiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlNob3cgY2xvc2VzdCBkYXRhIG9uIGhvdmVyIil9LGF0dHI6ImhvdmVybW9kZSIsdmFsOiJjbG9zZXN0IixpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS5ob3ZlckNvbXBhcmVDYXJ0ZXNpYW49e25hbWU6ImhvdmVyQ29tcGFyZUNhcnRlc2lhbiIsX2NhdDoiaG92ZXJDb21wYXJlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJDb21wYXJlIGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2lzSG9yaXo/InkiOiJ4In0saWNvbjpvLnRvb2x0aXBfY29tcGFyZSxncmF2aXR5OiJuZSIsY2xpY2s6Zn0sdS56b29tM2Q9e25hbWU6Inpvb20zZCIsX2NhdDoiem9vbSIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiWm9vbSIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ6b29tIixpY29uOm8uem9vbWJveCxjbGljazpofSx1LnBhbjNkPXtuYW1lOiJwYW4zZCIsX2NhdDoicGFuIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJQYW4iKX0sYXR0cjoic2NlbmUuZHJhZ21vZGUiLHZhbDoicGFuIixpY29uOm8ucGFuLGNsaWNrOmh9LHUub3JiaXRSb3RhdGlvbj17bmFtZToib3JiaXRSb3RhdGlvbiIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiT3JiaXRhbCByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJvcmJpdCIsaWNvbjpvWyIzZF9yb3RhdGUiXSxjbGljazpofSx1LnRhYmxlUm90YXRpb249e25hbWU6InRhYmxlUm90YXRpb24iLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlR1cm50YWJsZSByb3RhdGlvbiIpfSxhdHRyOiJzY2VuZS5kcmFnbW9kZSIsdmFsOiJ0dXJudGFibGUiLGljb246b1siei1heGlzIl0sY2xpY2s6aH0sdS5yZXNldENhbWVyYURlZmF1bHQzZD17bmFtZToicmVzZXRDYW1lcmFEZWZhdWx0M2QiLF9jYXQ6InJlc2V0Q2FtZXJhRGVmYXVsdCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgY2FtZXJhIHRvIGRlZmF1bHQiKX0sYXR0cjoicmVzZXREZWZhdWx0IixpY29uOm8uaG9tZSxjbGljazpwfSx1LnJlc2V0Q2FtZXJhTGFzdFNhdmUzZD17bmFtZToicmVzZXRDYW1lcmFMYXN0U2F2ZTNkIixfY2F0OiJyZXNldENhbWVyYUxhc3RTYXZlIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCBjYW1lcmEgdG8gbGFzdCBzYXZlIil9LGF0dHI6InJlc2V0TGFzdFNhdmUiLGljb246by5tb3ZpZSxjbGljazpwfSx1LmhvdmVyQ2xvc2VzdDNkPXtuYW1lOiJob3ZlckNsb3Nlc3QzZCIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6bnVsbCx0b2dnbGU6ITAsaWNvbjpvLnRvb2x0aXBfYmFzaWMsZ3Jhdml0eToibmUiLGNsaWNrOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZCh0LGUpO24uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHIpfX0sdS56b29tSW5HZW89e25hbWU6Inpvb21JbkdlbyIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6bX0sdS56b29tT3V0R2VvPXtuYW1lOiJ6b29tT3V0R2VvIixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6bX0sdS5yZXNldEdlbz17bmFtZToicmVzZXRHZW8iLF9jYXQ6InJlc2V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCIpfSxhdHRyOiJyZXNldCIsdmFsOm51bGwsaWNvbjpvLmF1dG9zY2FsZSxjbGljazptfSx1LmhvdmVyQ2xvc2VzdEdlbz17bmFtZToiaG92ZXJDbG9zZXN0R2VvIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RHbDJkPXtuYW1lOiJob3ZlckNsb3Nlc3RHbDJkIixfY2F0OiJob3ZlcmNsb3Nlc3QiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6dn0sdS5ob3ZlckNsb3Nlc3RQaWU9e25hbWU6ImhvdmVyQ2xvc2VzdFBpZSIsX2NhdDoiaG92ZXJjbG9zZXN0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJUb2dnbGUgc2hvdyBjbG9zZXN0IGRhdGEgb24gaG92ZXIiKX0sYXR0cjoiaG92ZXJtb2RlIix2YWw6ImNsb3Nlc3QiLGljb246by50b29sdGlwX2Jhc2ljLGdyYXZpdHk6Im5lIixjbGljazp2fSx1LnJlc2V0Vmlld1NhbmtleT17bmFtZToicmVzZXRTYW5rZXlHcm91cCIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlldyIpfSxpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXtmb3IodmFyIGU9eyJub2RlLmdyb3VwcyI6W10sIm5vZGUueCI6W10sIm5vZGUueSI6W119LHI9MDtyPHQuX2Z1bGxEYXRhLmxlbmd0aDtyKyspe3ZhciBpPXQuX2Z1bGxEYXRhW3JdLl92aWV3SW5pdGlhbDtlWyJub2RlLmdyb3VwcyJdLnB1c2goaS5ub2RlLmdyb3Vwcy5zbGljZSgpKSxlWyJub2RlLngiXS5wdXNoKGkubm9kZS54LnNsaWNlKCkpLGVbIm5vZGUueSJdLnB1c2goaS5ub2RlLnkuc2xpY2UoKSl9bi5jYWxsKCJyZXN0eWxlIix0LGUpfX0sdS50b2dnbGVIb3Zlcj17bmFtZToidG9nZ2xlSG92ZXIiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBzaG93IGNsb3Nlc3QgZGF0YSBvbiBob3ZlciIpfSxhdHRyOiJob3Zlcm1vZGUiLHZhbDpudWxsLHRvZ2dsZTohMCxpY29uOm8udG9vbHRpcF9iYXNpYyxncmF2aXR5OiJuZSIsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1kKHQsZSk7ci5ob3Zlcm1vZGU9Zyh0KSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxyKX19LHUucmVzZXRWaWV3cz17bmFtZToicmVzZXRWaWV3cyIsdGl0bGU6ZnVuY3Rpb24odCl7cmV0dXJuIGModCwiUmVzZXQgdmlld3MiKX0saWNvbjpvLmhvbWUsY2xpY2s6ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmN1cnJlbnRUYXJnZXQ7ci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsInpvb20iKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLCJyZXNldCIpLGYodCxlKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIiwicmVzZXRMYXN0U2F2ZSIpLHAodCxlKSx4KHQsImdlbyIpLHgodCwibWFwYm94Iil9fSx1LnRvZ2dsZVNwaWtlbGluZXM9e25hbWU6InRvZ2dsZVNwaWtlbGluZXMiLHRpdGxlOmZ1bmN0aW9uKHQpe3JldHVybiBjKHQsIlRvZ2dsZSBTcGlrZSBMaW5lcyIpfSxpY29uOm8uc3Bpa2VsaW5lLGF0dHI6Il9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkIix2YWw6Im9uIixjbGljazpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fY2FydGVzaWFuU3Bpa2VzRW5hYmxlZDtlLl9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkPSJvbiI9PT1yPyJvZmYiOiJvbiIsbi5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsZnVuY3Rpb24odCl7Zm9yKHZhciBlPSJvbiI9PT10Ll9mdWxsTGF5b3V0Ll9jYXJ0ZXNpYW5TcGlrZXNFbmFibGVkLHI9YS5saXN0KHQsbnVsbCwhMCksbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBvPXJbaV07bltvLl9uYW1lKyIuc2hvd3NwaWtlcyJdPSEhZXx8by5fc2hvd1NwaWtlSW5pdGlhbH1yZXR1cm4gbn0odCkpfX0sdS5yZXNldFZpZXdNYXBib3g9e25hbWU6InJlc2V0Vmlld01hcGJveCIsX2NhdDoicmVzZXRWaWV3Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJSZXNldCB2aWV3Iil9LGF0dHI6InJlc2V0IixpY29uOm8uaG9tZSxjbGljazpmdW5jdGlvbih0KXt4KHQsIm1hcGJveCIpfX0sdS56b29tSW5NYXBib3g9e25hbWU6Inpvb21Jbk1hcGJveCIsX2NhdDoiem9vbWluIix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIGluIil9LGF0dHI6Inpvb20iLHZhbDoiaW4iLGljb246by56b29tX3BsdXMsY2xpY2s6eX0sdS56b29tT3V0TWFwYm94PXtuYW1lOiJ6b29tT3V0TWFwYm94IixfY2F0OiJ6b29tb3V0Iix0aXRsZTpmdW5jdGlvbih0KXtyZXR1cm4gYyh0LCJab29tIG91dCIpfSxhdHRyOiJ6b29tIix2YWw6Im91dCIsaWNvbjpvLnpvb21fbWludXMsY2xpY2s6eX19LHsiLi4vLi4vZm9udHMvcGxvdGljb24iOjc1NSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zaGFwZXMvZHJhdyI6NzIzfV0sNzAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYnV0dG9ucyIpLGk9T2JqZWN0LmtleXMobiksYT1bImRyYXdsaW5lIiwiZHJhd29wZW5wYXRoIiwiZHJhd2Nsb3NlZHBhdGgiLCJkcmF3Y2lyY2xlIiwiZHJhd3JlY3QiLCJlcmFzZXNoYXBlIl0sbz1bInYxaG92ZXJtb2RlIiwiaG92ZXJjbG9zZXN0IiwiaG92ZXJjb21wYXJlIiwidG9nZ2xlaG92ZXIiLCJ0b2dnbGVzcGlrZWxpbmVzIl0uY29uY2F0KGEpLHM9W107aS5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCl7aWYoLTE9PT1vLmluZGV4T2YodC5fY2F0fHx0Lm5hbWUpKXt2YXIgZT10Lm5hbWUscj0odC5fY2F0fHx0Lm5hbWUpLnRvTG93ZXJDYXNlKCk7LTE9PT1zLmluZGV4T2YoZSkmJnMucHVzaChlKSwtMT09PXMuaW5kZXhPZihyKSYmcy5wdXNoKHIpfX0oblt0XSl9KSkscy5zb3J0KCksZS5leHBvcnRzPXtEUkFXX01PREVTOmEsYmFja0J1dHRvbnM6byxmb3JlQnV0dG9uczpzfX0seyIuL2J1dHRvbnMiOjY5OX1dLDcwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2NvbG9yIiksYT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1vZGViYXJ8fHt9LHM9YS5uZXdDb250YWluZXIoZSwibW9kZWJhciIpO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gbi5jb2VyY2UocixzLG8sdCxlKX1sKCJvcmllbnRhdGlvbiIpLGwoImJnY29sb3IiLGkuYWRkT3BhY2l0eShlLnBhcGVyX2JnY29sb3IsLjUpKTt2YXIgYz1pLmNvbnRyYXN0KGkucmdiKGUubW9kZWJhci5iZ2NvbG9yKSk7bCgiY29sb3IiLGkuYWRkT3BhY2l0eShjLC4zKSksbCgiYWN0aXZlY29sb3IiLGkuYWRkT3BhY2l0eShjLC43KSksbCgidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSxsKCJhZGQiKSxsKCJyZW1vdmUiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vY29sb3IiOjYzOSwiLi9hdHRyaWJ1dGVzIjo2OTh9XSw3MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6Im1vZGViYXIiLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLG1hbmFnZTp0KCIuL21hbmFnZSIpfX0seyIuL2F0dHJpYnV0ZXMiOjY5OCwiLi9kZWZhdWx0cyI6NzAxLCIuL21hbmFnZSI6NzAzfV0sNzAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLGk9dCgiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi9meC9oZWxwZXJzIikuaXNVbmlmaWVkSG92ZXIscz10KCIuL21vZGViYXIiKSxsPXQoIi4vYnV0dG9ucyIpLGM9dCgiLi9jb25zdGFudHMiKS5EUkFXX01PREVTO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fY29udGV4dCx1PWUuX21vZGVCYXI7aWYoci5kaXNwbGF5TW9kZUJhcnx8ci53YXRlcm1hcmspe2lmKCFBcnJheS5pc0FycmF5KHIubW9kZUJhckJ1dHRvbnNUb1JlbW92ZSkpdGhyb3cgbmV3IEVycm9yKFsiKm1vZGVCYXJCdXR0b25zVG9SZW1vdmUqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsIm11c3QgYmUgYW4gYXJyYXkuIl0uam9pbigiICIpKTtpZighQXJyYXkuaXNBcnJheShyLm1vZGVCYXJCdXR0b25zVG9BZGQpKXRocm93IG5ldyBFcnJvcihbIiptb2RlQmFyQnV0dG9uc1RvQWRkKiBjb25maWd1cmF0aW9uIG9wdGlvbnMiLCJtdXN0IGJlIGFuIGFycmF5LiJdLmpvaW4oIiAiKSk7dmFyIGYsaD1yLm1vZGVCYXJCdXR0b25zO2Y9QXJyYXkuaXNBcnJheShoKSYmaC5sZW5ndGg/ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspZm9yKHZhciByPXRbZV0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dO2lmKCJzdHJpbmciPT10eXBlb2YgaSl7aWYodm9pZCAwPT09bFtpXSl0aHJvdyBuZXcgRXJyb3IoWyIqbW9kZUJhckJ1dHRvbnMqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyIsImludmFsaWQgYnV0dG9uIG5hbWUiXS5qb2luKCIgIikpO3RbZV1bbl09bFtpXX19cmV0dXJuIHR9KGgpOiFyLmRpc3BsYXlNb2RlQmFyJiZyLndhdGVybWFyaz9bXTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEscz10Ll9jb250ZXh0O2Z1bmN0aW9uIHUodCxlKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKSlyZXR1cm4hMH1lbHNle3ZhciByPWUubmFtZSxuPWUuX2NhdHx8ZS5uYW1lO2lmKHI9PT10fHxuPT09dC50b0xvd2VyQ2FzZSgpKXJldHVybiEwfXJldHVybiExfXZhciBmPWUubW9kZWJhci5hZGQ7InN0cmluZyI9PXR5cGVvZiBmJiYoZj1bZl0pO3ZhciBoPWUubW9kZWJhci5yZW1vdmU7InN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pO3ZhciBwPXMubW9kZUJhckJ1dHRvbnNUb0FkZC5jb25jYXQoZi5maWx0ZXIoKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmxlbmd0aDtlKyspaWYodSh0LHMubW9kZUJhckJ1dHRvbnNUb1JlbW92ZVtlXSkpcmV0dXJuITE7cmV0dXJuITB9KSkpLGQ9cy5tb2RlQmFyQnV0dG9uc1RvUmVtb3ZlLmNvbmNhdChoLmZpbHRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTxzLm1vZGVCYXJCdXR0b25zVG9BZGQubGVuZ3RoO2UrKylpZih1KHQscy5tb2RlQmFyQnV0dG9uc1RvQWRkW2VdKSlyZXR1cm4hMTtyZXR1cm4hMH0pKSksbT1lLl9oYXMoImNhcnRlc2lhbiIpLGc9ZS5faGFzKCJnbDNkIiksdj1lLl9oYXMoImdlbyIpLHk9ZS5faGFzKCJwaWUiKSx4PWUuX2hhcygiZnVubmVsYXJlYSIpLGI9ZS5faGFzKCJnbDJkIiksXz1lLl9oYXMoInRlcm5hcnkiKSx3PWUuX2hhcygibWFwYm94IiksVD1lLl9oYXMoInBvbGFyIiksaz1lLl9oYXMoInNhbmtleSIpLEE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4ubGlzdCh7X2Z1bGxMYXlvdXQ6dH0sbnVsbCwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKWlmKCFlW3JdLmZpeGVkcmFuZ2UpcmV0dXJuITE7cmV0dXJuITB9KGUpLE09byhlLmhvdmVybW9kZSksUz1bXTtmdW5jdGlvbiBFKHQpe2lmKHQubGVuZ3RoKXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7cisrKXtmb3IodmFyIG49dFtyXSxpPWxbbl0sYT1pLm5hbWUudG9Mb3dlckNhc2UoKSxvPShpLl9jYXR8fGkubmFtZSkudG9Mb3dlckNhc2UoKSxzPSExLGM9MDtjPGQubGVuZ3RoO2MrKyl7dmFyIHU9ZFtjXS50b0xvd2VyQ2FzZSgpO2lmKHU9PT1hfHx1PT09byl7cz0hMDticmVha319c3x8ZS5wdXNoKGxbbl0pfVMucHVzaChlKX19dmFyIEw9WyJ0b0ltYWdlIl07cy5zaG93RWRpdEluQ2hhcnRTdHVkaW8/TC5wdXNoKCJlZGl0SW5DaGFydFN0dWRpbyIpOnMuc2hvd1NlbmRUb0Nsb3VkJiZMLnB1c2goInNlbmREYXRhVG9DbG91ZCIpO0UoTCk7dmFyIEM9W10sUD1bXSxJPVtdLE89W107KG18fGJ8fHl8fHh8fF8pK3YrZyt3K1Q+MT8oUD1bInRvZ2dsZUhvdmVyIl0sST1bInJlc2V0Vmlld3MiXSk6dj8oQz1bInpvb21JbkdlbyIsInpvb21PdXRHZW8iXSxQPVsiaG92ZXJDbG9zZXN0R2VvIl0sST1bInJlc2V0R2VvIl0pOmc/KFA9WyJob3ZlckNsb3Nlc3QzZCJdLEk9WyJyZXNldENhbWVyYURlZmF1bHQzZCIsInJlc2V0Q2FtZXJhTGFzdFNhdmUzZCJdKTp3PyhDPVsiem9vbUluTWFwYm94Iiwiem9vbU91dE1hcGJveCJdLFA9WyJ0b2dnbGVIb3ZlciJdLEk9WyJyZXNldFZpZXdNYXBib3giXSk6Yj9QPVsiaG92ZXJDbG9zZXN0R2wyZCJdOnk/UD1bImhvdmVyQ2xvc2VzdFBpZSJdOms/KFA9WyJob3ZlckNsb3Nlc3RDYXJ0ZXNpYW4iLCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iXSxJPVsicmVzZXRWaWV3U2Fua2V5Il0pOlA9WyJ0b2dnbGVIb3ZlciJdO20mJihQPVsidG9nZ2xlU3Bpa2VsaW5lcyIsImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIsImhvdmVyQ29tcGFyZUNhcnRlc2lhbiJdKTsoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYoIWEudHJhY2VJcyh0W2VdLCJub0hvdmVyIikpcmV0dXJuITE7cmV0dXJuITB9KHIpfHxNKSYmKFA9W10pOyFtJiYhYnx8QXx8KEM9WyJ6b29tSW4yZCIsInpvb21PdXQyZCIsImF1dG9TY2FsZTJkIl0sInJlc2V0Vmlld3MiIT09SVswXSYmKEk9WyJyZXNldFNjYWxlMmQiXSkpO2c/Tz1bInpvb20zZCIsInBhbjNkIiwib3JiaXRSb3RhdGlvbiIsInRhYmxlUm90YXRpb24iXToobXx8YikmJiFBfHxfP089WyJ6b29tMmQiLCJwYW4yZCJdOnd8fHY/Tz1bInBhbjJkIl06VCYmKE89WyJ6b29tMmQiXSk7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0hMSxyPTA7cjx0Lmxlbmd0aCYmIWU7cisrKXt2YXIgbj10W3JdO24uX21vZHVsZSYmbi5fbW9kdWxlLnNlbGVjdFBvaW50cyYmKGEudHJhY2VJcyhuLCJzY2F0dGVyLWxpa2UiKT8oaS5oYXNNYXJrZXJzKG4pfHxpLmhhc1RleHQobikpJiYoZT0hMCk6YS50cmFjZUlzKG4sImJveC12aW9saW4iKSYmImFsbCIhPT1uLmJveHBvaW50cyYmImFsbCIhPT1uLnBvaW50c3x8KGU9ITApKX1yZXR1cm4gZX0pKHIpJiZPLnB1c2goInNlbGVjdDJkIiwibGFzc28yZCIpO3ZhciB6PVtdLEQ9ZnVuY3Rpb24odCl7LTE9PT16LmluZGV4T2YodCkmJi0xIT09UC5pbmRleE9mKHQpJiZ6LnB1c2godCl9O2lmKEFycmF5LmlzQXJyYXkocCkpe2Zvcih2YXIgUj1bXSxGPTA7RjxwLmxlbmd0aDtGKyspe3ZhciBCPXBbRl07InN0cmluZyI9PXR5cGVvZiBCPyhCPUIudG9Mb3dlckNhc2UoKSwtMSE9PWMuaW5kZXhPZihCKT8oZS5faGFzKCJtYXBib3giKXx8ZS5faGFzKCJjYXJ0ZXNpYW4iKSkmJk8ucHVzaChCKToidG9nZ2xlc3Bpa2VsaW5lcyI9PT1CP0QoInRvZ2dsZVNwaWtlbGluZXMiKToidG9nZ2xlaG92ZXIiPT09Qj9EKCJ0b2dnbGVIb3ZlciIpOiJob3ZlcmNvbXBhcmUiPT09Qj9EKCJob3ZlckNvbXBhcmVDYXJ0ZXNpYW4iKToiaG92ZXJjbG9zZXN0Ij09PUI/KEQoImhvdmVyQ2xvc2VzdENhcnRlc2lhbiIpLEQoImhvdmVyQ2xvc2VzdEdlbyIpLEQoImhvdmVyQ2xvc2VzdDNkIiksRCgiaG92ZXJDbG9zZXN0R2wyZCIpLEQoImhvdmVyQ2xvc2VzdFBpZSIpKToidjFob3Zlcm1vZGUiPT09QiYmKEQoInRvZ2dsZUhvdmVyIiksRCgiaG92ZXJDbG9zZXN0Q2FydGVzaWFuIiksRCgiaG92ZXJDb21wYXJlQ2FydGVzaWFuIiksRCgiaG92ZXJDbG9zZXN0R2VvIiksRCgiaG92ZXJDbG9zZXN0M2QiKSxEKCJob3ZlckNsb3Nlc3RHbDJkIiksRCgiaG92ZXJDbG9zZXN0UGllIikpKTpSLnB1c2goQil9cD1SfXJldHVybiBFKE8pLEUoQy5jb25jYXQoSSkpLEUoeiksZnVuY3Rpb24odCxlKXtpZihlLmxlbmd0aClpZihBcnJheS5pc0FycmF5KGVbMF0pKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXQucHVzaChlW3JdKTtlbHNlIHQucHVzaChlKTtyZXR1cm4gdH0oUyxwKX0odCksdT91LnVwZGF0ZSh0LGYpOmUuX21vZGVCYXI9cyh0LGYpfWVsc2UgdSYmKHUuZGVzdHJveSgpLGRlbGV0ZSBlLl9tb2RlQmFyKX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9meC9oZWxwZXJzIjo2NzUsIi4vYnV0dG9ucyI6Njk5LCIuL2NvbnN0YW50cyI6NzAwLCIuL21vZGViYXIiOjcwNH1dLDcwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9mb250cy9wbG90aWNvbiIpLHM9bmV3IERPTVBhcnNlcjtmdW5jdGlvbiBsKHQpe3RoaXMuY29udGFpbmVyPXQuY29udGFpbmVyLHRoaXMuZWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnVwZGF0ZSh0LmdyYXBoSW5mbyx0LmJ1dHRvbnMpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCl9dmFyIGM9bC5wcm90b3R5cGU7Yy51cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLmdyYXBoSW5mbz10O3ZhciByPXRoaXMuZ3JhcGhJbmZvLl9jb250ZXh0LG49dGhpcy5ncmFwaEluZm8uX2Z1bGxMYXlvdXQsaT0ibW9kZWJhci0iK24uX3VpZDt0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKCJpZCIsaSksdGhpcy5fdWlkPWksdGhpcy5lbGVtZW50LmNsYXNzTmFtZT0ibW9kZWJhciIsImhvdmVyIj09PXIuZGlzcGxheU1vZGVCYXImJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz0iIG1vZGViYXItLWhvdmVyIGVhc2UtYmciKSwidiI9PT1uLm1vZGViYXIub3JpZW50YXRpb24mJih0aGlzLmVsZW1lbnQuY2xhc3NOYW1lKz0iIHZlcnRpY2FsIixlPWUucmV2ZXJzZSgpKTt2YXIgbz1uLm1vZGViYXIscz0iaG92ZXIiPT09ci5kaXNwbGF5TW9kZUJhcj8iLmpzLXBsb3RseS1wbG90IC5wbG90bHk6aG92ZXIgIjoiIjthLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUoaSksYS5hZGRSZWxhdGVkU3R5bGVSdWxlKGkscysiIyIraSsiIC5tb2RlYmFyLWdyb3VwIiwiYmFja2dyb3VuZC1jb2xvcjogIitvLmJnY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuOmhvdmVyIC5pY29uIHBhdGgiLCJmaWxsOiAiK28uYWN0aXZlY29sb3IpLGEuYWRkUmVsYXRlZFN0eWxlUnVsZShpLCIjIitpKyIgLm1vZGViYXItYnRuLmFjdGl2ZSAuaWNvbiBwYXRoIiwiZmlsbDogIitvLmFjdGl2ZWNvbG9yKTt2YXIgbD0hdGhpcy5oYXNCdXR0b25zKGUpLGM9dGhpcy5oYXNMb2dvIT09ci5kaXNwbGF5bG9nbyx1PXRoaXMubG9jYWxlIT09ci5sb2NhbGU7aWYodGhpcy5sb2NhbGU9ci5sb2NhbGUsKGx8fGN8fHUpJiYodGhpcy5yZW1vdmVBbGxCdXR0b25zKCksdGhpcy51cGRhdGVCdXR0b25zKGUpLHIud2F0ZXJtYXJrfHxyLmRpc3BsYXlsb2dvKSl7dmFyIGY9dGhpcy5nZXRMb2dvKCk7ci53YXRlcm1hcmsmJihmLmNsYXNzTmFtZT1mLmNsYXNzTmFtZSsiIHdhdGVybWFyayIpLCJ2Ij09PW4ubW9kZWJhci5vcmllbnRhdGlvbj90aGlzLmVsZW1lbnQuaW5zZXJ0QmVmb3JlKGYsdGhpcy5lbGVtZW50LmNoaWxkTm9kZXNbMF0pOnRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChmKSx0aGlzLmhhc0xvZ289ITB9dGhpcy51cGRhdGVBY3RpdmVCdXR0b24oKX0sYy51cGRhdGVCdXR0b25zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5idXR0b25zPXQsdGhpcy5idXR0b25FbGVtZW50cz1bXSx0aGlzLmJ1dHRvbnNOYW1lcz1bXSx0aGlzLmJ1dHRvbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9ZS5jcmVhdGVHcm91cCgpO3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIG49dC5uYW1lO2lmKCFuKXRocm93IG5ldyBFcnJvcigibXVzdCBwcm92aWRlIGJ1dHRvbiAnbmFtZScgaW4gYnV0dG9uIGNvbmZpZyIpO2lmKC0xIT09ZS5idXR0b25zTmFtZXMuaW5kZXhPZihuKSl0aHJvdyBuZXcgRXJyb3IoImJ1dHRvbiBuYW1lICciK24rIicgaXMgdGFrZW4iKTtlLmJ1dHRvbnNOYW1lcy5wdXNoKG4pO3ZhciBpPWUuY3JlYXRlQnV0dG9uKHQpO2UuYnV0dG9uRWxlbWVudHMucHVzaChpKSxyLmFwcGVuZENoaWxkKGkpfSkpLGUuZWxlbWVudC5hcHBlbmRDaGlsZChyKX0pKX0sYy5jcmVhdGVHcm91cD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0LmNsYXNzTmFtZT0ibW9kZWJhci1ncm91cCIsdH0sYy5jcmVhdGVCdXR0b249ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtyLnNldEF0dHJpYnV0ZSgicmVsIiwidG9vbHRpcCIpLHIuY2xhc3NOYW1lPSJtb2RlYmFyLWJ0biI7dmFyIGk9dC50aXRsZTt2b2lkIDA9PT1pP2k9dC5uYW1lOiJmdW5jdGlvbiI9PXR5cGVvZiBpJiYoaT1pKHRoaXMuZ3JhcGhJbmZvKSksKGl8fDA9PT1pKSYmci5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGkpLHZvaWQgMCE9PXQuYXR0ciYmci5zZXRBdHRyaWJ1dGUoImRhdGEtYXR0ciIsdC5hdHRyKTt2YXIgYT10LnZhbDtpZih2b2lkIDAhPT1hJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJihhPWEodGhpcy5ncmFwaEluZm8pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS12YWwiLGEpKSwiZnVuY3Rpb24iIT10eXBlb2YgdC5jbGljayl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBidXR0b24gJ2NsaWNrJyBmdW5jdGlvbiBpbiBidXR0b24gY29uZmlnIik7ci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKHIpe3QuY2xpY2soZS5ncmFwaEluZm8sciksZS51cGRhdGVBY3RpdmVCdXR0b24oci5jdXJyZW50VGFyZ2V0KX0pKSxyLnNldEF0dHJpYnV0ZSgiZGF0YS10b2dnbGUiLHQudG9nZ2xlfHwhMSksdC50b2dnbGUmJm4uc2VsZWN0KHIpLmNsYXNzZWQoImFjdGl2ZSIsITApO3ZhciBzPXQuaWNvbjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcz9yLmFwcGVuZENoaWxkKHMoKSk6ci5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oc3x8by5xdWVzdGlvbikpLHIuc2V0QXR0cmlidXRlKCJkYXRhLWdyYXZpdHkiLHQuZ3Jhdml0eXx8Im4iKSxyfSxjLmNyZWF0ZUljb249ZnVuY3Rpb24odCl7dmFyIGUscj1pKHQuaGVpZ2h0KT9OdW1iZXIodC5oZWlnaHQpOnQuYXNjZW50LXQuZGVzY2VudCxuPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7aWYodC5wYXRoKXsoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobiwic3ZnIikpLnNldEF0dHJpYnV0ZSgidmlld0JveCIsWzAsMCx0LndpZHRoLHJdLmpvaW4oIiAiKSksZS5zZXRBdHRyaWJ1dGUoImNsYXNzIiwiaWNvbiIpO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLCJwYXRoIik7YS5zZXRBdHRyaWJ1dGUoImQiLHQucGF0aCksdC50cmFuc2Zvcm0/YS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdC50cmFuc2Zvcm0pOnZvaWQgMCE9PXQuYXNjZW50JiZhLnNldEF0dHJpYnV0ZSgidHJhbnNmb3JtIiwibWF0cml4KDEgMCAwIC0xIDAgIit0LmFzY2VudCsiKSIpLGUuYXBwZW5kQ2hpbGQoYSl9dC5zdmcmJihlPXMucGFyc2VGcm9tU3RyaW5nKHQuc3ZnLCJhcHBsaWNhdGlvbi94bWwiKS5jaGlsZE5vZGVzWzBdKTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIjFlbSIpLGUuc2V0QXR0cmlidXRlKCJ3aWR0aCIsIjFlbSIpLGV9LGMudXBkYXRlQWN0aXZlQnV0dG9uPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ3JhcGhJbmZvLl9mdWxsTGF5b3V0LHI9dm9pZCAwIT09dD90LmdldEF0dHJpYnV0ZSgiZGF0YS1hdHRyIik6bnVsbDt0aGlzLmJ1dHRvbkVsZW1lbnRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpfHwhMCxvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWF0dHIiKSxzPSJ0cnVlIj09PXQuZ2V0QXR0cmlidXRlKCJkYXRhLXRvZ2dsZSIpLGw9bi5zZWxlY3QodCk7aWYocylvPT09ciYmbC5jbGFzc2VkKCJhY3RpdmUiLCFsLmNsYXNzZWQoImFjdGl2ZSIpKTtlbHNle3ZhciBjPW51bGw9PT1vP286YS5uZXN0ZWRQcm9wZXJ0eShlLG8pLmdldCgpO2wuY2xhc3NlZCgiYWN0aXZlIixjPT09aSl9fSkpfSxjLmhhc0J1dHRvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5idXR0b25zO2lmKCFlKXJldHVybiExO2lmKHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3Ipe2lmKHRbcl0ubGVuZ3RoIT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBuPTA7bjx0W3JdLmxlbmd0aDtuKyspaWYodFtyXVtuXS5uYW1lIT09ZVtyXVtuXS5uYW1lKXJldHVybiExfXJldHVybiEwfSxjLmdldExvZ289ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNyZWF0ZUdyb3VwKCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuIGUuaHJlZj0iaHR0cHM6Ly9wbG90bHkuY29tLyIsZS50YXJnZXQ9Il9ibGFuayIsZS5zZXRBdHRyaWJ1dGUoImRhdGEtdGl0bGUiLGEuXyh0aGlzLmdyYXBoSW5mbywiUHJvZHVjZWQgd2l0aCBQbG90bHkiKSksZS5jbGFzc05hbWU9Im1vZGViYXItYnRuIHBsb3RseWpzaWNvbiBtb2RlYmFyLWJ0bi0tbG9nbyIsZS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUljb24oby5uZXdwbG90bHlsb2dvKSksdC5hcHBlbmRDaGlsZChlKSx0fSxjLnJlbW92ZUFsbEJ1dHRvbnM9ZnVuY3Rpb24oKXtmb3IoO3RoaXMuZWxlbWVudC5maXJzdENoaWxkOyl0aGlzLmVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LmZpcnN0Q2hpbGQpO3RoaXMuaGFzTG9nbz0hMX0sYy5kZXN0cm95PWZ1bmN0aW9uKCl7YS5yZW1vdmVFbGVtZW50KHRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5tb2RlYmFyIikpLGEuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZSh0aGlzLl91aWQpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9bmV3IGwoe2dyYXBoSW5mbzp0LGNvbnRhaW5lcjpyLl9tb2RlYmFyZGl2Lm5vZGUoKSxidXR0b25zOmV9KTtyZXR1cm4gci5fcHJpdmF0ZXBsb3QmJm4uc2VsZWN0KGkuZWxlbWVudCkuYXBwZW5kKCJzcGFuIikuY2xhc3NlZCgiYmFkZ2UtcHJpdmF0ZSBmbG9hdC0tbGVmdCIsITApLnRleHQoIlBSSVZBVEUiKSxpfX0seyIuLi8uLi9mb250cy9wbG90aWNvbiI6NzU1LCIuLi8uLi9saWIiOjc3NiwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3MDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT0oMCx0KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXkpKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc3RlcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibW9udGgiLCJ5ZWFyIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsImFsbCJdLGRmbHQ6Im1vbnRoIixlZGl0VHlwZToicGxvdCJ9LHN0ZXBtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJiYWNrd2FyZCIsInRvZGF0ZSJdLGRmbHQ6ImJhY2t3YXJkIixlZGl0VHlwZToicGxvdCJ9LGNvdW50Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSk7ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGJ1dHRvbnM6YSx4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MyxlZGl0VHlwZToicGxvdCJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0IixlZGl0VHlwZToicGxvdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGVkaXRUeXBlOiJwbG90In0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6ImJvdHRvbSIsZWRpdFR5cGU6InBsb3QifSxmb250Om4oe2VkaXRUeXBlOiJwbG90In0pLGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYWN0aXZlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX0seyIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2Mzh9XSw3MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXt5UGFkOi4wMixtaW5CdXR0b25XaWR0aDozMCxyeDozLHJ5OjMsbGlnaHRBbW91bnQ6MjUsZGFya0Ftb3VudDoxMH19LHt9XSw3MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2F0dHJpYnV0ZXMiKSxsPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gYyh0LGUscixpKXt2YXIgYT1pLmNhbGVuZGFyO2Z1bmN0aW9uIG8ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMuYnV0dG9ucyxyLGkpfWlmKG8oInZpc2libGUiKSl7dmFyIGw9bygic3RlcCIpOyJhbGwiIT09bCYmKCFhfHwiZ3JlZ29yaWFuIj09PWF8fCJtb250aCIhPT1sJiYieWVhciIhPT1sP28oInN0ZXBtb2RlIik6ZS5zdGVwbW9kZT0iYmFja3dhcmQiLG8oImNvdW50IikpLG8oImxhYmVsIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1LGYpe3ZhciBoPXQucmFuZ2VzZWxlY3Rvcnx8e30scD1hLm5ld0NvbnRhaW5lcihlLCJyYW5nZXNlbGVjdG9yIik7ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBuLmNvZXJjZShoLHAscyx0LGUpfWlmKGQoInZpc2libGUiLG8oaCxwLHtuYW1lOiJidXR0b25zIixoYW5kbGVJdGVtRGVmYXVsdHM6YyxjYWxlbmRhcjpmfSkubGVuZ3RoPjApKXt2YXIgbT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIuZmlsdGVyKChmdW5jdGlvbihyKXtyZXR1cm4gZVtyXS5hbmNob3I9PT10Ll9pZH0pKSxpPTAsYT0wO2E8bi5sZW5ndGg7YSsrKXt2YXIgbz1lW25bYV1dLmRvbWFpbjtvJiYoaT1NYXRoLm1heChvWzFdLGkpKX1yZXR1cm5bdC5kb21haW5bMF0saStsLnlQYWRdfShlLHIsdSk7ZCgieCIsbVswXSksZCgieSIsbVsxXSksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksZCgieGFuY2hvciIpLGQoInlhbmNob3IiKSxuLmNvZXJjZUZvbnQoZCwiZm9udCIsci5mb250KTt2YXIgZz1kKCJiZ2NvbG9yIik7ZCgiYWN0aXZlY29sb3IiLGkuY29udHJhc3QoZyxsLmxpZ2h0QW1vdW50LGwuZGFya0Ftb3VudCkpLGQoImJvcmRlcmNvbG9yIiksZCgiYm9yZGVyd2lkdGgiKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi9jb2xvciI6NjM5LCIuL2F0dHJpYnV0ZXMiOjcwNSwiLi9jb25zdGFudHMiOjcwNn1dLDcwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2NvbG9yIikscz10KCIuLi9kcmF3aW5nIiksbD10KCIuLi8uLi9saWIiKSxjPWwuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWguTElORV9TUEFDSU5HLGQ9aC5GUk9NX1RMLG09aC5GUk9NX0JSLGc9dCgiLi9jb25zdGFudHMiKSx2PXQoIi4vZ2V0X3VwZGF0ZV9vYmplY3QiKTtmdW5jdGlvbiB5KHQpe3JldHVybiB0Ll9pZH1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbj1sLmVuc3VyZVNpbmdsZSh0LCJyZWN0Iiwic2VsZWN0b3ItcmVjdCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpfSkpO24uYXR0cih7cng6Zy5yeCxyeTpnLnJ5fSksbi5jYWxsKG8uc3Ryb2tlLGUuYm9yZGVyY29sb3IpLmNhbGwoby5maWxsLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzQWN0aXZlfHxlLl9pc0hvdmVyZWQ/dC5hY3RpdmVjb2xvcjp0LmJnY29sb3J9KGUscikpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyd2lkdGgrInB4Iil9ZnVuY3Rpb24gYih0LGUscixuKXtsLmVuc3VyZVNpbmdsZSh0LCJ0ZXh0Iiwic2VsZWN0b3ItdGV4dCIsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKX0pKS5jYWxsKHMuZm9udCxlLmZvbnQpLnRleHQoZnVuY3Rpb24odCxlKXtpZih0LmxhYmVsKXJldHVybiBlP2wudGVtcGxhdGVTdHJpbmcodC5sYWJlbCxlKTp0LmxhYmVsO3JldHVybiJhbGwiPT09dC5zdGVwPyJhbGwiOnQuY291bnQrdC5zdGVwLmNoYXJBdCgwKX0ocixuLl9mdWxsTGF5b3V0Ll9tZXRhKSkuY2FsbCgoZnVuY3Rpb24odCl7dS5jb252ZXJ0VG9Uc3BhbnModCxuKX0pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5faW5mb2xheWVyLnNlbGVjdEFsbCgiLnJhbmdlc2VsZWN0b3IiKS5kYXRhKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1mLmxpc3QodCwieCIsITApLHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgaT1lW25dO2kucmFuZ2VzZWxlY3RvciYmaS5yYW5nZXNlbGVjdG9yLnZpc2libGUmJnIucHVzaChpKX1yZXR1cm4gcn0odCkseSk7ZS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInJhbmdlc2VsZWN0b3IiLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlLnN0eWxlKHtjdXJzb3I6InBvaW50ZXIiLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSxlLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZSxmPW8ucmFuZ2VzZWxlY3RvcixoPXIuc2VsZWN0QWxsKCJnLmJ1dHRvbiIpLmRhdGEobC5maWx0ZXJWaXNpYmxlKGYuYnV0dG9ucykpO2guZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidXR0b24iLCEwKSxoLmV4aXQoKS5yZW1vdmUoKSxoLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGE9dihvLGUpO2UuX2lzQWN0aXZlPWZ1bmN0aW9uKHQsZSxyKXtpZigiYWxsIj09PWUuc3RlcClyZXR1cm4hMD09PXQuYXV0b3JhbmdlO3ZhciBuPU9iamVjdC5rZXlzKHIpO3JldHVybiB0LnJhbmdlWzBdPT09cltuWzBdXSYmdC5yYW5nZVsxXT09PXJbblsxXV19KG8sZSxhKSxyLmNhbGwoeCxmLGUpLHIuY2FsbChiLGYsZSx0KSxyLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7dC5fZHJhZ2dlZHx8aS5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsYSl9KSksci5vbigibW91c2VvdmVyIiwoZnVuY3Rpb24oKXtlLl9pc0hvdmVyZWQ9ITAsci5jYWxsKHgsZixlKX0pKSxyLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7ZS5faXNIb3ZlcmVkPSExLHIuY2FsbCh4LGYsZSl9KSl9KSksZnVuY3Rpb24odCxlLHIsaSxvKXt2YXIgZj0wLGg9MCx2PXIuYm9yZGVyd2lkdGg7ZS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLnNlbGVjdCgiLnNlbGVjdG9yLXRleHQiKSxlPXIuZm9udC5zaXplKnAsaT1NYXRoLm1heChlKnUubGluZUNvdW50KHQpLDE2KSszO2g9TWF0aC5tYXgoaCxpKX0pKSxlLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgiLnNlbGVjdG9yLXJlY3QiKSxpPXQuc2VsZWN0KCIuc2VsZWN0b3ItdGV4dCIpLGE9aS5ub2RlKCkmJnMuYkJveChpLm5vZGUoKSkud2lkdGgsbz1yLmZvbnQuc2l6ZSpwLGw9dS5saW5lQ291bnQoaSksZD1NYXRoLm1heChhKzEwLGcubWluQnV0dG9uV2lkdGgpO3QuYXR0cigidHJhbnNmb3JtIixjKHYrZix2KSksZS5hdHRyKHt4OjAseTowLHdpZHRoOmQsaGVpZ2h0Omh9KSx1LnBvc2l0aW9uVGV4dChpLGQvMixoLzItKGwtMSkqby8yKzMpLGYrPWQrNX0pKTt2YXIgeT10Ll9mdWxsTGF5b3V0Ll9zaXplLHg9eS5sK3kudypyLngsYj15LnQreS5oKigxLXIueSksXz0ibGVmdCI7bC5pc1JpZ2h0QW5jaG9yKHIpJiYoeC09ZixfPSJyaWdodCIpO2wuaXNDZW50ZXJBbmNob3IocikmJih4LT1mLzIsXz0iY2VudGVyIik7dmFyIHc9InRvcCI7bC5pc0JvdHRvbUFuY2hvcihyKSYmKGItPWgsdz0iYm90dG9tIik7bC5pc01pZGRsZUFuY2hvcihyKSYmKGItPWgvMix3PSJtaWRkbGUiKTtmPU1hdGguY2VpbChmKSxoPU1hdGguY2VpbChoKSx4PU1hdGgucm91bmQoeCksYj1NYXRoLnJvdW5kKGIpLGEuYXV0b01hcmdpbih0LGkrIi1yYW5nZS1zZWxlY3RvciIse3g6ci54LHk6ci55LGw6ZipkW19dLHI6ZiptW19dLGI6aCptW3ddLHQ6aCpkW3ddfSksby5hdHRyKCJ0cmFuc2Zvcm0iLGMoeCxiKSl9KHQsaCxmLG8uX25hbWUscil9KSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhd2luZyI6NjYxLCIuL2NvbnN0YW50cyI6NzA2LCIuL2dldF91cGRhdGVfb2JqZWN0Ijo3MDksIkBwbG90bHkvZDMiOjU4fV0sNzA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLXRpbWUiKSxpPXQoIi4uLy4uL2xpYiIpLnRpdGxlQ2FzZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9uYW1lLGE9e307aWYoImFsbCI9PT1lLnN0ZXApYVtyKyIuYXV0b3JhbmdlIl09ITA7ZWxzZXt2YXIgbz1mdW5jdGlvbih0LGUpe3ZhciByLGE9dC5yYW5nZSxvPW5ldyBEYXRlKHQucjJsKGFbMV0pKSxzPWUuc3RlcCxsPW5bInV0YyIraShzKV0sYz1lLmNvdW50O3N3aXRjaChlLnN0ZXBtb2RlKXtjYXNlImJhY2t3YXJkIjpyPXQubDJyKCtsLm9mZnNldChvLC1jKSk7YnJlYWs7Y2FzZSJ0b2RhdGUiOnZhciB1PWwub2Zmc2V0KG8sLWMpO3I9dC5sMnIoK2wuY2VpbCh1KSl9dmFyIGY9YVsxXTtyZXR1cm5bcixmXX0odCxlKTthW3IrIi5yYW5nZVswXSJdPW9bMF0sYVtyKyIucmFuZ2VbMV0iXT1vWzFdfXJldHVybiBhfX0seyIuLi8uLi9saWIiOjc3NiwiZDMtdGltZSI6MTY5fV0sNzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNlbGVjdG9yIixzY2hlbWE6e3N1YnBsb3RzOnt4YXhpczp7cmFuZ2VzZWxlY3Rvcjp0KCIuL2F0dHJpYnV0ZXMiKX19fSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGhhbmRsZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxkcmF3OnQoIi4vZHJhdyIpfX0seyIuL2F0dHJpYnV0ZXMiOjcwNSwiLi9kZWZhdWx0cyI6NzA3LCIuL2RyYXciOjcwOH1dLDcxMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPXtiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmJhY2tncm91bmQsZWRpdFR5cGU6InBsb3QifSxib3JkZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9fSx0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDouMTUsbWluOjAsbWF4OjEsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi9jb2xvci9hdHRyaWJ1dGVzIjo2Mzh9XSw3MTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikubGlzdCxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2UsYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9bih0LCJ4IiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbz1lW3JdLHM9b1thLm5hbWVdO3MmJnMudmlzaWJsZSYmcy5hdXRvcmFuZ2UmJihzLl9pbnB1dC5hdXRvcmFuZ2U9ITAscy5faW5wdXQucmFuZ2U9cy5yYW5nZT1pKHQsbykpfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjcxM31dLDcxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InJhbmdlc2xpZGVyIixjb250YWluZXJDbGFzc05hbWU6InJhbmdlc2xpZGVyLWNvbnRhaW5lciIsYmdDbGFzc05hbWU6InJhbmdlc2xpZGVyLWJnIixyYW5nZVBsb3RDbGFzc05hbWU6InJhbmdlc2xpZGVyLXJhbmdlcGxvdCIsbWFza01pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItbWFzay1taW4iLG1hc2tNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4IixzbGlkZUJveENsYXNzTmFtZToicmFuZ2VzbGlkZXItc2xpZGVib3giLGdyYWJiZXJNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWluIixncmFiQXJlYU1pbkNsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWluIixoYW5kbGVNaW5DbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1taW4iLGdyYWJiZXJNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWdyYWJiZXItbWF4IixncmFiQXJlYU1heENsYXNzTmFtZToicmFuZ2VzbGlkZXItZ3JhYmFyZWEtbWF4IixoYW5kbGVNYXhDbGFzc05hbWU6InJhbmdlc2xpZGVyLWhhbmRsZS1tYXgiLG1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lOiJyYW5nZXNsaWRlci1tYXNrLW1pbi1vcHAtYXhpcyIsbWFza01heE9wcEF4aXNDbGFzc05hbWU6InJhbmdlc2xpZGVyLW1hc2stbWF4LW9wcC1heGlzIixtYXNrQ29sb3I6InJnYmEoMCwwLDAsMC40KSIsbWFza09wcEF4aXNDb2xvcjoicmdiYSgwLDAsMCwwLjIpIixzbGlkZUJveEZpbGw6InRyYW5zcGFyZW50IixzbGlkZUJveEN1cnNvcjoiZXctcmVzaXplIixncmFiQXJlYUZpbGw6InRyYW5zcGFyZW50IixncmFiQXJlYUN1cnNvcjoiY29sLXJlc2l6ZSIsZ3JhYkFyZWFXaWR0aDoxMCxoYW5kbGVXaWR0aDo0LGhhbmRsZVJhZGl1czoxLGhhbmRsZVN0cm9rZVdpZHRoOjEsZXh0cmFQYWQ6MTV9fSx7fV0sNzE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKSxzPXQoIi4vb3BwYXhpc19hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD10W3JdLGM9ZVtyXTtpZihsLnJhbmdlc2xpZGVyfHxlLl9yZXF1ZXN0UmFuZ2VzbGlkZXJbYy5faWRdKXtuLmlzUGxhaW5PYmplY3QobC5yYW5nZXNsaWRlcil8fChsLnJhbmdlc2xpZGVyPXt9KTt2YXIgdSxmLGg9bC5yYW5nZXNsaWRlcixwPWkubmV3Q29udGFpbmVyKGMsInJhbmdlc2xpZGVyIik7aWYoXygidmlzaWJsZSIpKXtfKCJiZ2NvbG9yIixlLnBsb3RfYmdjb2xvciksXygiYm9yZGVyY29sb3IiKSxfKCJib3JkZXJ3aWR0aCIpLF8oInRoaWNrbmVzcyIpLF8oImF1dG9yYW5nZSIsIWMuaXNWYWxpZFJhbmdlKGgucmFuZ2UpKSxfKCJyYW5nZSIpO3ZhciBkPWUuX3N1YnBsb3RzO2lmKGQpZm9yKHZhciBtPWQuY2FydGVzaWFuLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKDAsdC5pbmRleE9mKCJ5IikpPT09YS5uYW1lMmlkKHIpfSkpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc3Vic3RyKHQuaW5kZXhPZigieSIpLHQubGVuZ3RoKX0pKSxnPW4uc2ltcGxlTWFwKG0sYS5pZDJuYW1lKSx2PTA7djxnLmxlbmd0aDt2Kyspe3ZhciB5PWdbdl07dT1oW3ldfHx7fSxmPWkubmV3Q29udGFpbmVyKHAseSwieWF4aXMiKTt2YXIgeCxiPWVbeV07dS5yYW5nZSYmYi5pc1ZhbGlkUmFuZ2UodS5yYW5nZSkmJih4PSJmaXhlZCIpLCJtYXRjaCIhPT13KCJyYW5nZW1vZGUiLHgpJiZ3KCJyYW5nZSIsYi5yYW5nZS5zbGljZSgpKX1wLl9pbnB1dD1ofX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKGgscCxvLHQsZSl9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBuLmNvZXJjZSh1LGYscyx0LGUpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4vYXR0cmlidXRlcyI6NzExLCIuL29wcGF4aXNfYXR0cmlidXRlcyI6NzE4fV0sNzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPXQoIi4uL2RyYXdpbmciKSxjPXQoIi4uL2NvbG9yIiksdT10KCIuLi90aXRsZXMiKSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikscD10KCIuLi9kcmFnZWxlbWVudCIpLGQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLG09dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPW8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0uYmdDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7eDowLHk6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKSxhPW4uYm9yZGVyd2lkdGglMj09MD9uLmJvcmRlcndpZHRoOm4uYm9yZGVyd2lkdGgtMSxjPS1uLl9vZmZzZXRTaGlmdCx1PWwuY3Jpc3BSb3VuZChlLG4uYm9yZGVyd2lkdGgpO2kuYXR0cih7d2lkdGg6bi5fd2lkdGgrYSxoZWlnaHQ6bi5faGVpZ2h0K2EsdHJhbnNmb3JtOnMoYyxjKSxmaWxsOm4uYmdjb2xvcixzdHJva2U6bi5ib3JkZXJjb2xvciwic3Ryb2tlLXdpZHRoIjp1fSl9ZnVuY3Rpb24gdih0LGUscixuKXt2YXIgaT1lLl9mdWxsTGF5b3V0O28uZW5zdXJlU2luZ2xlQnlJZChpLl90b3BkZWZzLCJjbGlwUGF0aCIsbi5fY2xpcElkLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicmVjdCIpLmF0dHIoe3g6MCx5OjB9KX0pKS5zZWxlY3QoInJlY3QiKS5hdHRyKHt3aWR0aDpuLl93aWR0aCxoZWlnaHQ6bi5faGVpZ2h0fSl9ZnVuY3Rpb24geSh0LGUscixpKXt2YXIgcyxjPWUuY2FsY2RhdGEsdT10LnNlbGVjdEFsbCgiZy4iK20ucmFuZ2VQbG90Q2xhc3NOYW1lKS5kYXRhKHIuX3N1YnBsb3RzV2l0aCxvLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4gbS5yYW5nZVBsb3RDbGFzc05hbWUrIiAiK3R9KSkuY2FsbChsLnNldENsaXBVcmwsaS5fY2xpcElkLGUpLHUub3JkZXIoKSx1LmV4aXQoKS5yZW1vdmUoKSx1LmVhY2goKGZ1bmN0aW9uKHQsbyl7dmFyIGw9bi5zZWxlY3QodGhpcyksdT0wPT09byxwPWguZ2V0RnJvbUlkKGUsdCwieSIpLGQ9cC5fbmFtZSxtPWlbZF0sZz17ZGF0YTpbXSxsYXlvdXQ6e3hheGlzOnt0eXBlOnIudHlwZSxkb21haW46WzAsMV0scmFuZ2U6aS5yYW5nZS5zbGljZSgpLGNhbGVuZGFyOnIuY2FsZW5kYXJ9LHdpZHRoOmkuX3dpZHRoLGhlaWdodDppLl9oZWlnaHQsbWFyZ2luOnt0OjAsYjowLGw6MCxyOjB9fSxfY29udGV4dDplLl9jb250ZXh0fTtyLnJhbmdlYnJlYWtzJiYoZy5sYXlvdXQueGF4aXMucmFuZ2VicmVha3M9ci5yYW5nZWJyZWFrcyksZy5sYXlvdXRbZF09e3R5cGU6cC50eXBlLGRvbWFpbjpbMCwxXSxyYW5nZToibWF0Y2giIT09bS5yYW5nZW1vZGU/bS5yYW5nZS5zbGljZSgpOnAucmFuZ2Uuc2xpY2UoKSxjYWxlbmRhcjpwLmNhbGVuZGFyfSxwLnJhbmdlYnJlYWtzJiYoZy5sYXlvdXRbZF0ucmFuZ2VicmVha3M9cC5yYW5nZWJyZWFrcyksYS5zdXBwbHlEZWZhdWx0cyhnKTt2YXIgdj1nLl9mdWxsTGF5b3V0LnhheGlzLHk9Zy5fZnVsbExheW91dFtkXTt2LmNsZWFyQ2FsYygpLHYuc2V0U2NhbGUoKSx5LmNsZWFyQ2FsYygpLHkuc2V0U2NhbGUoKTt2YXIgeD17aWQ6dCxwbG90Z3JvdXA6bCx4YXhpczp2LHlheGlzOnksaXNSYW5nZVBsb3Q6ITB9O3U/cz14Oih4Lm1haW5wbG90PSJ4eSIseC5tYWlucGxvdGluZm89cyksZi5yYW5nZVBsb3QoZSx4LGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWlbMF0udHJhY2U7YS54YXhpcythLnlheGlzPT09ZSYmci5wdXNoKGkpfXJldHVybiByfShjLHQpKX0pKX1mdW5jdGlvbiB4KHQsZSxyLG4saSl7KG8uZW5zdXJlU2luZ2xlKHQsInJlY3QiLG0ubWFza01pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt4OjAseTowLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KS5jYWxsKGMuZmlsbCxtLm1hc2tDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodCkuY2FsbChjLmZpbGwsbS5tYXNrQ29sb3IpLCJtYXRjaCIhPT1pLnJhbmdlbW9kZSkmJihvLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixtLm1hc2tNaW5PcHBBeGlzQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIoe3k6MCwic2hhcGUtcmVuZGVyaW5nIjoiY3Jpc3BFZGdlcyJ9KX0pKS5hdHRyKCJ3aWR0aCIsbi5fd2lkdGgpLmNhbGwoYy5maWxsLG0ubWFza09wcEF4aXNDb2xvciksby5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5tYXNrTWF4T3BwQXhpc0NsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cigid2lkdGgiLG4uX3dpZHRoKS5zdHlsZSgiYm9yZGVyLXRvcCIsbS5tYXNrT3BwQm9yZGVyKS5jYWxsKGMuZmlsbCxtLm1hc2tPcHBBeGlzQ29sb3IpKX1mdW5jdGlvbiBiKHQsZSxyLG4pe2UuX2NvbnRleHQuc3RhdGljUGxvdHx8by5lbnN1cmVTaW5nbGUodCwicmVjdCIsbS5zbGlkZUJveENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHt5OjAsY3Vyc29yOm0uc2xpZGVCb3hDdXJzb3IsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSl9KSkuYXR0cih7aGVpZ2h0Om4uX2hlaWdodCxmaWxsOm0uc2xpZGVCb3hGaWxsfSl9ZnVuY3Rpb24gXyh0LGUscixuKXt2YXIgaT1vLmVuc3VyZVNpbmdsZSh0LCJnIixtLmdyYWJiZXJNaW5DbGFzc05hbWUpLGE9by5lbnN1cmVTaW5nbGUodCwiZyIsbS5ncmFiYmVyTWF4Q2xhc3NOYW1lKSxzPXt4OjAsd2lkdGg6bS5oYW5kbGVXaWR0aCxyeDptLmhhbmRsZVJhZGl1cyxmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjptLmhhbmRsZVN0cm9rZVdpZHRoLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0sbD17eTpNYXRoLnJvdW5kKG4uX2hlaWdodC80KSxoZWlnaHQ6TWF0aC5yb3VuZChuLl9oZWlnaHQvMil9O28uZW5zdXJlU2luZ2xlKGksInJlY3QiLG0uaGFuZGxlTWluQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIocyl9KSkuYXR0cihsKSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixtLmhhbmRsZU1heENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHMpfSkpLmF0dHIobCk7dmFyIHU9e3dpZHRoOm0uZ3JhYkFyZWFXaWR0aCx4OjAseTowLGZpbGw6bS5ncmFiQXJlYUZpbGwsY3Vyc29yOmUuX2NvbnRleHQuc3RhdGljUGxvdD92b2lkIDA6bS5ncmFiQXJlYUN1cnNvcn07by5lbnN1cmVTaW5nbGUoaSwicmVjdCIsbS5ncmFiQXJlYU1pbkNsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHUpfSkpLmF0dHIoImhlaWdodCIsbi5faGVpZ2h0KSxvLmVuc3VyZVNpbmdsZShhLCJyZWN0IixtLmdyYWJBcmVhTWF4Q2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LmF0dHIodSl9KSkuYXR0cigiaGVpZ2h0IixuLl9oZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3JhbmdlU2xpZGVyRGF0YSxhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBsPXJbYV1bbS5uYW1lXTtsLl9jbGlwSWQ9bC5faWQrIi0iK2UuX3VpZH12YXIgYz1lLl9pbmZvbGF5ZXIuc2VsZWN0QWxsKCJnLiIrbS5jb250YWluZXJDbGFzc05hbWUpLmRhdGEociwoZnVuY3Rpb24odCl7cmV0dXJuIHQuX25hbWV9KSk7Yy5leGl0KCkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dFttLm5hbWVdO2UuX3RvcGRlZnMuc2VsZWN0KCIjIityLl9jbGlwSWQpLnJlbW92ZSgpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCYmKGMuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG0uY29udGFpbmVyQ2xhc3NOYW1lLCEwKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLGMuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGE9bi5zZWxlY3QodGhpcyksbD1yW20ubmFtZV0sYz1lW2guaWQybmFtZShyLmFuY2hvcildLGY9bFtoLmlkMm5hbWUoci5hbmNob3IpXTtpZihsLnJhbmdlKXt2YXIgdyxUPW8uc2ltcGxlTWFwKGwucmFuZ2Usci5yMmwpLGs9by5zaW1wbGVNYXAoci5yYW5nZSxyLnIybCk7dz1rWzBdPGtbMV0/W01hdGgubWluKFRbMF0sa1swXSksTWF0aC5tYXgoVFsxXSxrWzFdKV06W01hdGgubWF4KFRbMF0sa1swXSksTWF0aC5taW4oVFsxXSxrWzFdKV0sbC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1vLnNpbXBsZU1hcCh3LHIubDJyKX1yLmNsZWFuUmFuZ2UoInJhbmdlc2xpZGVyLnJhbmdlIik7dmFyIEE9ZS5fc2l6ZSxNPXIuZG9tYWluO2wuX3dpZHRoPUEudyooTVsxXS1NWzBdKTt2YXIgUz1NYXRoLnJvdW5kKEEubCtBLncqTVswXSksRT1NYXRoLnJvdW5kKEEudCtBLmgqKDEtci5fY291bnRlckRvbWFpbk1pbikrKCJib3R0b20iPT09ci5zaWRlP3IuX2RlcHRoOjApK2wuX29mZnNldFNoaWZ0K20uZXh0cmFQYWQpO2EuYXR0cigidHJhbnNmb3JtIixzKFMsRSkpLGwuX3JsPW8uc2ltcGxlTWFwKGwucmFuZ2Usci5yMmwpO3ZhciBMPWwuX3JsWzBdLEM9bC5fcmxbMV0sUD1DLUw7aWYobC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQvbC5fd2lkdGgqUCtMfSxsLmQycD1mdW5jdGlvbih0KXtyZXR1cm4odC1MKS9QKmwuX3dpZHRofSxyLnJhbmdlYnJlYWtzKXt2YXIgST1yLmxvY2F0ZUJyZWFrcyhMLEMpO2lmKEkubGVuZ3RoKXt2YXIgTyx6LEQ9MDtmb3IoTz0wO088SS5sZW5ndGg7TysrKUQrPSh6PUlbT10pLm1heC16Lm1pbjt2YXIgUj1sLl93aWR0aC8oQy1MLUQpLEY9Wy1SKkxdO2ZvcihPPTA7TzxJLmxlbmd0aDtPKyspej1JW09dLEYucHVzaChGW0YubGVuZ3RoLTFdLVIqKHoubWF4LXoubWluKSk7Zm9yKGwuZDJwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1GWzBdLHI9MDtyPEkubGVuZ3RoO3IrKyl7dmFyIG49SVtyXTtpZih0Pj1uLm1heCllPUZbcisxXTtlbHNlIGlmKHQ8bi5taW4pYnJlYWt9cmV0dXJuIGUrUip0fSxPPTA7TzxJLmxlbmd0aDtPKyspKHo9SVtPXSkucG1pbj1sLmQycCh6Lm1pbiksei5wbWF4PWwuZDJwKHoubWF4KTtsLnAyZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9RlswXSxyPTA7cjxJLmxlbmd0aDtyKyspe3ZhciBuPUlbcl07aWYodD49bi5wbWF4KWU9RltyKzFdO2Vsc2UgaWYodDxuLnBtaW4pYnJlYWt9cmV0dXJuKHQtZSkvUn19fWlmKCJtYXRjaCIhPT1mLnJhbmdlbW9kZSl7dmFyIEI9Yy5yMmwoZi5yYW5nZVswXSksTj1jLnIybChmLnJhbmdlWzFdKS1CO2wuZDJwT3BwQXhpcz1mdW5jdGlvbih0KXtyZXR1cm4odC1CKS9OKmwuX2hlaWdodH19YS5jYWxsKGcsdCxyLGwpLmNhbGwodix0LHIsbCkuY2FsbCh5LHQscixsKS5jYWxsKHgsdCxyLGwsZikuY2FsbChiLHQscixsKS5jYWxsKF8sdCxyLGwpLGZ1bmN0aW9uKHQsZSxyLGEpe2lmKGUuX2NvbnRleHQuc3RhdGljUGxvdClyZXR1cm47dmFyIHM9dC5zZWxlY3QoInJlY3QuIittLnNsaWRlQm94Q2xhc3NOYW1lKS5ub2RlKCksbD10LnNlbGVjdCgicmVjdC4iK20uZ3JhYkFyZWFNaW5DbGFzc05hbWUpLm5vZGUoKSxjPXQuc2VsZWN0KCJyZWN0LiIrbS5ncmFiQXJlYU1heENsYXNzTmFtZSkubm9kZSgpO2Z1bmN0aW9uIHUoKXt2YXIgdT1uLmV2ZW50LGY9dS50YXJnZXQsaD11LmNsaWVudFh8fHUudG91Y2hlc1swXS5jbGllbnRYLG09aC10Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LGc9YS5kMnAoci5fcmxbMF0pLHY9YS5kMnAoci5fcmxbMV0pLHk9cC5jb3ZlclNsaXAoKTtmdW5jdGlvbiB4KHQpe3ZhciB1LHAseCxiPSsodC5jbGllbnRYfHx0LnRvdWNoZXNbMF0uY2xpZW50WCktaDtzd2l0Y2goZil7Y2FzZSBzOng9ImV3LXJlc2l6ZSIsdT1nK2IscD12K2I7YnJlYWs7Y2FzZSBsOng9ImNvbC1yZXNpemUiLHU9ZytiLHA9djticmVhaztjYXNlIGM6eD0iY29sLXJlc2l6ZSIsdT1nLHA9ditiO2JyZWFrO2RlZmF1bHQ6eD0iZXctcmVzaXplIix1PW0scD1tK2J9aWYocDx1KXt2YXIgXz1wO3A9dSx1PV99YS5fcGl4ZWxNaW49dSxhLl9waXhlbE1heD1wLGQobi5zZWxlY3QoeSkseCksZnVuY3Rpb24odCxlLHIsbil7ZnVuY3Rpb24gYSh0KXtyZXR1cm4gci5sMnIoby5jb25zdHJhaW4odCxuLl9ybFswXSxuLl9ybFsxXSkpfXZhciBzPWEobi5wMmQobi5fcGl4ZWxNaW4pKSxsPWEobi5wMmQobi5fcGl4ZWxNYXgpKTt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2kuY2FsbCgiX2d1aVJlbGF5b3V0IixlLHIuX25hbWUrIi5yYW5nZSIsW3MsbF0pfSkpfSgwLGUscixhKX1mdW5jdGlvbiBiKCl7eS5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYiksdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHgpLHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLGIpLG8ucmVtb3ZlRWxlbWVudCh5KX10aGlzLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIseCksdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsYikseS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLHgpLHkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsYil9dC5vbigibW91c2Vkb3duIix1KSx0Lm9uKCJ0b3VjaHN0YXJ0Iix1KX0oYSx0LHIsbCksZnVuY3Rpb24odCxlLHIsbixpLGEpe3ZhciBsPW0uaGFuZGxlV2lkdGgvMjtmdW5jdGlvbiBjKHQpe3JldHVybiBvLmNvbnN0cmFpbih0LDAsbi5fd2lkdGgpfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsMCxuLl9oZWlnaHQpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIG8uY29uc3RyYWluKHQsLWwsbi5fd2lkdGgrbCl9dmFyIGg9YyhuLmQycChyLl9ybFswXSkpLHA9YyhuLmQycChyLl9ybFsxXSkpO2lmKHQuc2VsZWN0KCJyZWN0LiIrbS5zbGlkZUJveENsYXNzTmFtZSkuYXR0cigieCIsaCkuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIittLm1hc2tNaW5DbGFzc05hbWUpLmF0dHIoIndpZHRoIixoKSx0LnNlbGVjdCgicmVjdC4iK20ubWFza01heENsYXNzTmFtZSkuYXR0cigieCIscCkuYXR0cigid2lkdGgiLG4uX3dpZHRoLXApLCJtYXRjaCIhPT1hLnJhbmdlbW9kZSl7dmFyIGQ9bi5faGVpZ2h0LXUobi5kMnBPcHBBeGlzKGkuX3JsWzFdKSksZz1uLl9oZWlnaHQtdShuLmQycE9wcEF4aXMoaS5fcmxbMF0pKTt0LnNlbGVjdCgicmVjdC4iK20ubWFza01pbk9wcEF4aXNDbGFzc05hbWUpLmF0dHIoIngiLGgpLmF0dHIoImhlaWdodCIsZCkuYXR0cigid2lkdGgiLHAtaCksdC5zZWxlY3QoInJlY3QuIittLm1hc2tNYXhPcHBBeGlzQ2xhc3NOYW1lKS5hdHRyKCJ4IixoKS5hdHRyKCJ5IixnKS5hdHRyKCJoZWlnaHQiLG4uX2hlaWdodC1nKS5hdHRyKCJ3aWR0aCIscC1oKSx0LnNlbGVjdCgicmVjdC4iK20uc2xpZGVCb3hDbGFzc05hbWUpLmF0dHIoInkiLGQpLmF0dHIoImhlaWdodCIsZy1kKX12YXIgdj1NYXRoLnJvdW5kKGYoaC1sKSktLjUseT1NYXRoLnJvdW5kKGYocC1sKSkrLjU7dC5zZWxlY3QoImcuIittLmdyYWJiZXJNaW5DbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIscyh2LC41KSksdC5zZWxlY3QoImcuIittLmdyYWJiZXJNYXhDbGFzc05hbWUpLmF0dHIoInRyYW5zZm9ybSIscyh5LC41KSl9KGEsMCxyLGwsYyxmKSwiYm90dG9tIj09PXIuc2lkZSYmdS5kcmF3KHQsci5faWQrInRpdGxlIix7cHJvcENvbnRhaW5lcjpyLHByb3BOYW1lOnIuX25hbWUrIi50aXRsZSIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLngsYXR0cmlidXRlczp7eDpyLl9vZmZzZXQrci5fbGVuZ3RoLzIseTpFK2wuX2hlaWdodCtsLl9vZmZzZXRTaGlmdCsxMCsxLjUqci50aXRsZS5mb250LnNpemUsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KX0pKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY29sb3IiOjYzOSwiLi4vZHJhZ2VsZW1lbnQiOjY1OCwiLi4vZHJhd2luZyI6NjYxLCIuLi90aXRsZXMiOjczNywiLi9jb25zdGFudHMiOjcxMywiQHBsb3RseS9kMyI6NTh9XSw3MTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksaT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxhPXQoIi4vY29uc3RhbnRzIiksbz10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HLHM9YS5uYW1lO2Z1bmN0aW9uIGwodCl7dmFyIGU9dCYmdFtzXTtyZXR1cm4gZSYmZS52aXNpYmxlfXIuaXNWaXNpYmxlPWwsci5tYWtlRGF0YT1mdW5jdGlvbih0KXt2YXIgZT1uLmxpc3Qoe19mdWxsTGF5b3V0OnR9LCJ4IiwhMCkscj10Lm1hcmdpbixpPVtdO2lmKCF0Ll9oYXMoImdsMmQiKSlmb3IodmFyIGE9MDthPGUubGVuZ3RoO2ErKyl7dmFyIG89ZVthXTtpZihsKG8pKXtpLnB1c2gobyk7dmFyIGM9b1tzXTtjLl9pZD1zK28uX2lkLGMuX2hlaWdodD0odC5oZWlnaHQtci5iLXIudCkqYy50aGlja25lc3MsYy5fb2Zmc2V0U2hpZnQ9TWF0aC5mbG9vcihjLmJvcmRlcndpZHRoLzIpfX10Ll9yYW5nZVNsaWRlckRhdGE9aX0sci5hdXRvTWFyZ2luT3B0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbj1lW3NdLGw9ZS5faWQuY2hhckF0KDApLGM9MCx1PTA7ImJvdHRvbSI9PT1lLnNpZGUmJihjPWUuX2RlcHRoLGUudGl0bGUudGV4dCE9PXIuX2RmbHRUaXRsZVtsXSYmKHU9MS41KmUudGl0bGUuZm9udC5zaXplKzEwK24uX29mZnNldFNoaWZ0LHUrPShlLnRpdGxlLnRleHQubWF0Y2goaS5CUl9UQUdfQUxMKXx8W10pLmxlbmd0aCplLnRpdGxlLmZvbnQuc2l6ZSpvKSk7cmV0dXJue3g6MCx5OmUuX2NvdW50ZXJEb21haW5NaW4sbDowLHI6MCx0OjAsYjpuLl9oZWlnaHQrYytNYXRoLm1heChyLm1hcmdpbi5iLHUpLHBhZDphLmV4dHJhUGFkKzIqbi5fb2Zmc2V0U2hpZnR9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjcxM31dLDcxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9vcHBheGlzX2F0dHJpYnV0ZXMiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToiY29tcG9uZW50IixuYW1lOiJyYW5nZXNsaWRlciIsc2NoZW1hOntzdWJwbG90czp7eGF4aXM6e3Jhbmdlc2xpZGVyOm4uZXh0ZW5kRmxhdCh7fSxpLHt5YXhpczphfSl9fX0sbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxoYW5kbGVEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzp0KCIuL2RyYXciKSxpc1Zpc2libGU6by5pc1Zpc2libGUsbWFrZURhdGE6by5tYWtlRGF0YSxhdXRvTWFyZ2luT3B0czpvLmF1dG9NYXJnaW5PcHRzfX0seyIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjo3MTEsIi4vY2FsY19hdXRvcmFuZ2UiOjcxMiwiLi9kZWZhdWx0cyI6NzE0LCIuL2RyYXciOjcxNSwiLi9oZWxwZXJzIjo3MTYsIi4vb3BwYXhpc19hdHRyaWJ1dGVzIjo3MTh9XSw3MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtfaXNTdWJwbG90T2JqOiEwLHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImZpeGVkIiwibWF0Y2giXSxkZmx0OiJtYXRjaCIsZWRpdFR5cGU6ImNhbGMifSxyYW5nZTp7dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9fSx7fV0sNzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiKS5saW5lLGE9dCgiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxvPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O3QoIi4uLy4uL2NvbnN0YW50cy9heGlzX3BsYWNlYWJsZV9vYmplY3RzIik7ZS5leHBvcnRzPXMoInNoYXBlIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjaXJjbGUiLCJyZWN0IiwicGF0aCIsImxpbmUiXSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxsYXllcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYmVsb3ciLCJhYm92ZSJdLGRmbHQ6ImFib3ZlIixlZGl0VHlwZToiYXJyYXlkcmF3In0seHJlZjpvKHt9LG4ueHJlZix7fSkseHNpemVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzY2FsZWQiLCJwaXhlbCJdLGRmbHQ6InNjYWxlZCIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0seGFuY2hvcjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx4MTp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5cmVmOm8oe30sbi55cmVmLHt9KSx5c2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNjYWxlZCIsInBpeGVsIl0sZGZsdDoic2NhbGVkIixlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSx5YW5jaG9yOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHkxOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LHBhdGg6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMrYXJyYXlkcmF3In0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGxpbmU6e2NvbG9yOm8oe30saS5jb2xvcix7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx3aWR0aDpvKHt9LGkud2lkdGgse2VkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9KSxkYXNoOm8oe30sYSx7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSxlZGl0VHlwZToiY2FsYythcnJheWRyYXcifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OiJyZ2JhKDAsMCwwLDApIixlZGl0VHlwZToiYXJyYXlkcmF3In0sZmlsbHJ1bGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImV2ZW5vZGQiLCJub256ZXJvIl0sZGZsdDoiZXZlbm9kZCIsZWRpdFR5cGU6ImFycmF5ZHJhdyJ9LGVkaXRhYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjK2FycmF5ZHJhdyJ9LGVkaXRUeXBlOiJhcnJheWRyYXcifSl9LHsiLi4vLi4vY29uc3RhbnRzL2F4aXNfcGxhY2VhYmxlX29iamVjdHMiOjc0NSwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3RyYWNlcy9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4uL2Fubm90YXRpb25zL2F0dHJpYnV0ZXMiOjYyMiwiLi4vZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjB9XSw3MjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueHNpemVtb2RlLHQueDAsdC54MSx0LnBhdGgsITEpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIGModC5saW5lLndpZHRoLHQueXNpemVtb2RlLHQueTAsdC55MSx0LnBhdGgsITApfWZ1bmN0aW9uIGModCxlLHIsaSxzLGwpe3ZhciBjPXQvMix1PWw7aWYoInBpeGVsIj09PWUpe3ZhciBmPXM/by5leHRyYWN0UGF0aENvb3JkcyhzLGw/YS5wYXJhbUlzWTphLnBhcmFtSXNYKTpbcixpXSxoPW4uYWdnTnVtcyhNYXRoLm1heCxudWxsLGYpLHA9bi5hZ2dOdW1zKE1hdGgubWluLG51bGwsZiksZD1wPDA/TWF0aC5hYnMocCkrYzpjLG09aD4wP2grYzpjO3JldHVybntwcGFkOmMscHBhZHBsdXM6dT9kOm0scHBhZG1pbnVzOnU/bTpkfX1yZXR1cm57cHBhZDpjfX1mdW5jdGlvbiB1KHQsZSxyLG4saSl7dmFyIHM9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP3QucjJjOnQuZDJjO2lmKHZvaWQgMCE9PWUpcmV0dXJuW3MoZSkscyhyKV07aWYobil7dmFyIGwsYyx1LGYsaD0xLzAscD0tMS8wLGQ9bi5tYXRjaChhLnNlZ21lbnRSRSk7Zm9yKCJkYXRlIj09PXQudHlwZSYmKHM9by5kZWNvZGVEYXRlKHMpKSxsPTA7bDxkLmxlbmd0aDtsKyspdm9pZCAwIT09KGM9aVtkW2xdLmNoYXJBdCgwKV0uZHJhd24pJiYoISh1PWRbbF0uc3Vic3RyKDEpLm1hdGNoKGEucGFyYW1SRSkpfHx1Lmxlbmd0aDxjfHwoKGY9cyh1W2NdKSk8aCYmKGg9ZiksZj5wJiYocD1mKSkpO3JldHVybiBwPj1oP1toLHBdOnZvaWQgMH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1uLmZpbHRlclZpc2libGUoZS5zaGFwZXMpO2lmKHIubGVuZ3RoJiZ0Ll9mdWxsRGF0YS5sZW5ndGgpZm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe3ZhciBjLGYsaD1yW29dO2guX2V4dHJlbWVzPXt9O3ZhciBwPWkuZ2V0UmVmVHlwZShoLnhyZWYpLGQ9aS5nZXRSZWZUeXBlKGgueXJlZik7aWYoInBhcGVyIiE9PWgueHJlZiYmImRvbWFpbiIhPT1wKXt2YXIgbT0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDAsZz0icGl4ZWwiPT09aC54c2l6ZW1vZGU/aC54YW5jaG9yOmgueDE7KGY9dShjPWkuZ2V0RnJvbUlkKHQsaC54cmVmKSxtLGcsaC5wYXRoLGEucGFyYW1Jc1gpKSYmKGguX2V4dHJlbWVzW2MuX2lkXT1pLmZpbmRFeHRyZW1lcyhjLGYscyhoKSkpfWlmKCJwYXBlciIhPT1oLnlyZWYmJiJkb21haW4iIT09ZCl7dmFyIHY9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkwLHk9InBpeGVsIj09PWgueXNpemVtb2RlP2gueWFuY2hvcjpoLnkxOyhmPXUoYz1pLmdldEZyb21JZCh0LGgueXJlZiksdix5LGgucGF0aCxhLnBhcmFtSXNZKSkmJihoLl9leHRyZW1lc1tjLl9pZF09aS5maW5kRXh0cmVtZXMoYyxmLGwoaCkpKX19fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9jb25zdGFudHMiOjcyMSwiLi9oZWxwZXJzIjo3MzB9XSw3MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzZWdtZW50UkU6L1tNTEhWUUNUU1pdW15NTEhWUUNUU1pdKi9nLHBhcmFtUkU6L1teXHMsXSsvZyxwYXJhbUlzWDp7TTp7MDohMCxkcmF3bjowfSxMOnswOiEwLGRyYXduOjB9LEg6ezA6ITAsZHJhd246MH0sVjp7fSxROnswOiEwLDI6ITAsZHJhd246Mn0sQzp7MDohMCwyOiEwLDQ6ITAsZHJhd246NH0sVDp7MDohMCxkcmF3bjowfSxTOnswOiEwLDI6ITAsZHJhd246Mn0sWjp7fX0scGFyYW1Jc1k6e006ezE6ITAsZHJhd246MX0sTDp7MTohMCxkcmF3bjoxfSxIOnt9LFY6ezA6ITAsZHJhd246MH0sUTp7MTohMCwzOiEwLGRyYXduOjN9LEM6ezE6ITAsMzohMCw1OiEwLGRyYXduOjV9LFQ6ezE6ITAsZHJhd246MX0sUzp7MTohMCwzOiEwLGRyYXduOjV9LFo6e319LG51bVBhcmFtczp7TToyLEw6MixIOjEsVjoxLFE6NCxDOjYsVDoyLFM6NCxaOjB9fX0se31dLDcyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi9oZWxwZXJzIik7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWlmKGEoInZpc2libGUiKSl7dmFyIGw9YSgicGF0aCIpLGM9YSgidHlwZSIsbD8icGF0aCI6InJlY3QiKTsicGF0aCIhPT1lLnR5cGUmJmRlbGV0ZSBlLnBhdGgsYSgiZWRpdGFibGUiKSxhKCJsYXllciIpLGEoIm9wYWNpdHkiKSxhKCJmaWxsY29sb3IiKSxhKCJmaWxscnVsZSIpLGEoImxpbmUud2lkdGgiKSYmKGEoImxpbmUuY29sb3IiKSxhKCJsaW5lLmRhc2giKSk7Zm9yKHZhciB1PWEoInhzaXplbW9kZSIpLGY9YSgieXNpemVtb2RlIiksaD1bIngiLCJ5Il0scD0wO3A8MjtwKyspe3ZhciBkLG0sZyx2PWhbcF0seT12KyJhbmNob3IiLHg9IngiPT09dj91OmYsYj17X2Z1bGxMYXlvdXQ6cn0sXz1pLmNvZXJjZVJlZih0LGUsYix2LHZvaWQgMCwicGFwZXIiKTtpZigicmFuZ2UiPT09aS5nZXRSZWZUeXBlKF8pPygoZD1pLmdldEZyb21JZChiLF8pKS5fc2hhcGVJbmRpY2VzLnB1c2goZS5faW5kZXgpLGc9cy5yYW5nZVRvU2hhcGVQb3NpdGlvbihkKSxtPXMuc2hhcGVQb3NpdGlvblRvUmFuZ2UoZCkpOm09Zz1uLmlkZW50aXR5LCJwYXRoIiE9PWMpe3ZhciB3PXYrIjAiLFQ9disiMSIsaz10W3ddLEE9dFtUXTt0W3ddPW0odFt3XSwhMCksdFtUXT1tKHRbVF0sITApLCJwaXhlbCI9PT14PyhhKHcsMCksYShULDEwKSk6KGkuY29lcmNlUG9zaXRpb24oZSxiLGEsXyx3LC4yNSksaS5jb2VyY2VQb3NpdGlvbihlLGIsYSxfLFQsLjc1KSksZVt3XT1nKGVbd10pLGVbVF09ZyhlW1RdKSx0W3ddPWssdFtUXT1BfWlmKCJwaXhlbCI9PT14KXt2YXIgTT10W3ldO3RbeV09bSh0W3ldLCEwKSxpLmNvZXJjZVBvc2l0aW9uKGUsYixhLF8seSwuMjUpLGVbeV09ZyhlW3ldKSx0W3ldPU19fSJwYXRoIj09PWM/YSgicGF0aCIpOm4ubm9uZU9yQWxsKHQsZSxbIngwIiwieDEiLCJ5MCIsInkxIl0pfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthKHQsZSx7bmFtZToic2hhcGVzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXR0cmlidXRlcyI6NzE5LCIuL2hlbHBlcnMiOjczMH1dLDcyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5yZWFkUGF0aHMscz10KCIuL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJPdXRsaW5lQ29udHJvbGxlcnMsYz10KCIuLi9jb2xvciIpLHU9dCgiLi4vZHJhd2luZyIpLGY9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGg9dCgiLi4vZHJhZ2VsZW1lbnQiKSxwPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxkPXQoIi4vY29uc3RhbnRzIiksbT10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBnKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7Zm9yKHZhciByIGluIGUuX3NoYXBlVXBwZXJMYXllci5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKSxlLl9zaGFwZUxvd2VyTGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksZS5fcGxvdHMpe3ZhciBuPWUuX3Bsb3RzW3JdLnNoYXBlbGF5ZXI7biYmbi5zZWxlY3RBbGwoInBhdGgiKS5yZW1vdmUoKX1mb3IodmFyIGk9MDtpPGUuc2hhcGVzLmxlbmd0aDtpKyspZS5zaGFwZXNbaV0udmlzaWJsZSYmeCh0LGkpfWZ1bmN0aW9uIHYodCl7cmV0dXJuISF0Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nfWZ1bmN0aW9uIHkodCl7cmV0dXJuIXQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbn1mdW5jdGlvbiB4KHQsZSl7dC5fZnVsbExheW91dC5fcGFwZXJkaXYuc2VsZWN0QWxsKCcuc2hhcGVsYXllciBbZGF0YS1pbmRleD0iJytlKyciXScpLnJlbW92ZSgpO3ZhciByPW0ubWFrZU9wdGlvbnNBbmRQbG90aW5mbyh0LGUpLGw9ci5vcHRpb25zLHg9ci5wbG90aW5mbztpZihsLl9pbnB1dCYmITEhPT1sLnZpc2libGUpaWYoImJlbG93IiE9PWwubGF5ZXIpayh0Ll9mdWxsTGF5b3V0Ll9zaGFwZVVwcGVyTGF5ZXIpO2Vsc2UgaWYoInBhcGVyIj09PWwueHJlZnx8InBhcGVyIj09PWwueXJlZilrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcik7ZWxzZXtpZih4Ll9oYWRQbG90aW5mbylrKCh4Lm1haW5wbG90aW5mb3x8eCkuc2hhcGVsYXllcik7ZWxzZSBrKHQuX2Z1bGxMYXlvdXQuX3NoYXBlTG93ZXJMYXllcil9ZnVuY3Rpb24gayhyKXt2YXIgaz1fKHQsbCksQT17ImRhdGEtaW5kZXgiOmUsImZpbGwtcnVsZSI6bC5maWxscnVsZSxkOmt9LE09bC5vcGFjaXR5LFM9bC5maWxsY29sb3IsRT1sLmxpbmUud2lkdGg/bC5saW5lLmNvbG9yOiJyZ2JhKDAsMCwwLDApIixMPWwubGluZS53aWR0aCxDPWwubGluZS5kYXNoO0x8fCEwIT09bC5lZGl0YWJsZXx8KEw9NSxDPSJzb2xpZCIpO3ZhciBQPSJaIiE9PWtbay5sZW5ndGgtMV0sST15KHQpJiZsLmVkaXRhYmxlJiZ0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4PT09ZTtJJiYoUz1QPyJyZ2JhKDAsMCwwLDApIjp0Ll9mdWxsTGF5b3V0LmFjdGl2ZXNoYXBlLmZpbGxjb2xvcixNPXQuX2Z1bGxMYXlvdXQuYWN0aXZlc2hhcGUub3BhY2l0eSk7dmFyIE8sej1yLmFwcGVuZCgicGF0aCIpLmF0dHIoQSkuc3R5bGUoIm9wYWNpdHkiLE0pLmNhbGwoYy5zdHJva2UsRSkuY2FsbChjLmZpbGwsUykuY2FsbCh1LmRhc2hMaW5lLEMsTCk7aWYoYih6LHQsbCksKEl8fHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbikmJihPPWYodC5sYXlvdXQsInNoYXBlcyIsbCkpLEkpe3ouc3R5bGUoe2N1cnNvcjoibW92ZSJ9KTt2YXIgRD17ZWxlbWVudDp6Lm5vZGUoKSxwbG90aW5mbzp4LGdkOnQsZWRpdEhlbHBlcnM6Tyxpc0FjdGl2ZVNoYXBlOiEwfSxSPW8oayx0KTtzKFIseixEKX1lbHNlIHQuX2NvbnRleHQuZWRpdHMuc2hhcGVQb3NpdGlvbj9mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsZixnLHkseCxULGssQSxNLFMsRSxMLEMsUCxJLE8sej0icGl4ZWwiPT09ci54c2l6ZW1vZGUsRD0icGl4ZWwiPT09ci55c2l6ZW1vZGUsUj0ibGluZSI9PT1yLnR5cGUsRj0icGF0aCI9PT1yLnR5cGUsQj1sLm1vZGlmeUl0ZW0sTj1hLmdldEZyb21JZCh0LHIueHJlZiksaj1hLmdldFJlZlR5cGUoci54cmVmKSxVPWEuZ2V0RnJvbUlkKHQsci55cmVmKSxWPWEuZ2V0UmVmVHlwZShyLnlyZWYpLEg9bS5nZXREYXRhVG9QaXhlbCh0LE4sITEsaikscT1tLmdldERhdGFUb1BpeGVsKHQsVSwhMCxWKSxHPW0uZ2V0UGl4ZWxUb0RhdGEodCxOLCExLGopLFk9bS5nZXRQaXhlbFRvRGF0YSh0LFUsITAsViksVz1SP2Z1bmN0aW9uKCl7dmFyIHQ9TWF0aC5tYXgoci5saW5lLndpZHRoLDEwKSxuPXMuYXBwZW5kKCJnIikuYXR0cigiZGF0YS1pbmRleCIsbyk7bi5hcHBlbmQoInBhdGgiKS5hdHRyKCJkIixlLmF0dHIoImQiKSkuc3R5bGUoe2N1cnNvcjoibW92ZSIsInN0cm9rZS13aWR0aCI6dCwic3Ryb2tlLW9wYWNpdHkiOiIwIn0pO3ZhciBpPXsiZmlsbC1vcGFjaXR5IjoiMCJ9LGE9TWF0aC5tYXgodC8yLDEwKTtyZXR1cm4gbi5hcHBlbmQoImNpcmNsZSIpLmF0dHIoeyJkYXRhLWxpbmUtcG9pbnQiOiJzdGFydC1wb2ludCIsY3g6ej9IKHIueGFuY2hvcikrci54MDpIKHIueDApLGN5OkQ/cShyLnlhbmNob3IpLXIueTA6cShyLnkwKSxyOmF9KS5zdHlsZShpKS5jbGFzc2VkKCJjdXJzb3ItZ3JhYiIsITApLG4uYXBwZW5kKCJjaXJjbGUiKS5hdHRyKHsiZGF0YS1saW5lLXBvaW50IjoiZW5kLXBvaW50IixjeDp6P0goci54YW5jaG9yKStyLngxOkgoci54MSksY3k6RD9xKHIueWFuY2hvciktci55MTpxKHIueTEpLHI6YX0pLnN0eWxlKGkpLmNsYXNzZWQoImN1cnNvci1ncmFiIiwhMCksbn0oKTplLFg9e2VsZW1lbnQ6Vy5ub2RlKCksZ2Q6dCxwcmVwRm46ZnVuY3Rpb24obil7aWYodih0KSlyZXR1cm47eiYmKHg9SChyLnhhbmNob3IpKTtEJiYoVD1xKHIueWFuY2hvcikpOyJwYXRoIj09PXIudHlwZT9JPXIucGF0aDooYz16P3IueDA6SChyLngwKSxmPUQ/ci55MDpxKHIueTApLGc9ej9yLngxOkgoci54MSkseT1EP3IueTE6cShyLnkxKSk7YzxnPyhNPWMsQz0ieDAiLFM9ZyxQPSJ4MSIpOihNPWcsQz0ieDEiLFM9YyxQPSJ4MCIpOyFEJiZmPHl8fEQmJmY+eT8oaz1mLEU9InkwIixBPXksTD0ieTEiKTooaz15LEU9InkxIixBPWYsTD0ieTAiKTtaKG4pLFEocyxyKSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS54cmVmLGk9ZS55cmVmLG89YS5nZXRGcm9tSWQocixuKSxzPWEuZ2V0RnJvbUlkKHIsaSksbD0iIjsicGFwZXIiPT09bnx8by5hdXRvcmFuZ2V8fChsKz1uKTsicGFwZXIiPT09aXx8cy5hdXRvcmFuZ2V8fChsKz1pKTt1LnNldENsaXBVcmwodCxsPyJjbGlwIityLl9mdWxsTGF5b3V0Ll91aWQrbDpudWxsLHIpfShlLHIsdCksWC5tb3ZlRm49Im1vdmUiPT09Tz9KOkssWC5hbHRLZXk9bi5hbHRLZXl9LGRvbmVGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuO3AoZSksJChzKSxiKGUsdCxyKSxuLmNhbGwoIl9ndWlSZWxheW91dCIsdCxsLmdldFVwZGF0ZU9iaigpKX0sY2xpY2tGbjpmdW5jdGlvbigpe2lmKHYodCkpcmV0dXJuOyQocyl9fTtmdW5jdGlvbiBaKHIpe2lmKHYodCkpTz1udWxsO2Vsc2UgaWYoUilPPSJwYXRoIj09PXIudGFyZ2V0LnRhZ05hbWU/Im1vdmUiOiJzdGFydC1wb2ludCI9PT1yLnRhcmdldC5hdHRyaWJ1dGVzWyJkYXRhLWxpbmUtcG9pbnQiXS52YWx1ZT8icmVzaXplLW92ZXItc3RhcnQtcG9pbnQiOiJyZXNpemUtb3Zlci1lbmQtcG9pbnQiO2Vsc2V7dmFyIG49WC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi5yaWdodC1uLmxlZnQsYT1uLmJvdHRvbS1uLnRvcCxvPXIuY2xpZW50WC1uLmxlZnQscz1yLmNsaWVudFktbi50b3AsbD0hRiYmaT4xMCYmYT4xMCYmIXIuc2hpZnRLZXk/aC5nZXRDdXJzb3Ioby9pLDEtcy9hKToibW92ZSI7cChlLGwpLE89bC5zcGxpdCgiLSIpWzBdfX1mdW5jdGlvbiBKKG4saSl7aWYoInBhdGgiPT09ci50eXBlKXt2YXIgYT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbz1hLGw9YTt6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihvPWZ1bmN0aW9uKHQpe3JldHVybiBHKEgodCkrbil9LE4mJiJkYXRlIj09PU4udHlwZSYmKG89bS5lbmNvZGVEYXRlKG8pKSksRD9CKCJ5YW5jaG9yIixyLnlhbmNob3I9WShUK2kpKToobD1mdW5jdGlvbih0KXtyZXR1cm4gWShxKHQpK2kpfSxVJiYiZGF0ZSI9PT1VLnR5cGUmJihsPW0uZW5jb2RlRGF0ZShsKSkpLEIoInBhdGgiLHIucGF0aD13KEksbyxsKSl9ZWxzZSB6P0IoInhhbmNob3IiLHIueGFuY2hvcj1HKHgrbikpOihCKCJ4MCIsci54MD1HKGMrbikpLEIoIngxIixyLngxPUcoZytuKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KEIoInkwIixyLnkwPVkoZitpKSksQigieTEiLHIueTE9WSh5K2kpKSk7ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBLKG4saSl7aWYoRil7dmFyIGE9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG89YSxsPWE7ej9CKCJ4YW5jaG9yIixyLnhhbmNob3I9Ryh4K24pKToobz1mdW5jdGlvbih0KXtyZXR1cm4gRyhIKHQpK24pfSxOJiYiZGF0ZSI9PT1OLnR5cGUmJihvPW0uZW5jb2RlRGF0ZShvKSkpLEQ/QigieWFuY2hvciIsci55YW5jaG9yPVkoVCtpKSk6KGw9ZnVuY3Rpb24odCl7cmV0dXJuIFkocSh0KStpKX0sVSYmImRhdGUiPT09VS50eXBlJiYobD1tLmVuY29kZURhdGUobCkpKSxCKCJwYXRoIixyLnBhdGg9dyhJLG8sbCkpfWVsc2UgaWYoUil7aWYoInJlc2l6ZS1vdmVyLXN0YXJ0LXBvaW50Ij09PU8pe3ZhciB1PWMrbixoPUQ/Zi1pOmYraTtCKCJ4MCIsci54MD16P3U6Ryh1KSksQigieTAiLHIueTA9RD9oOlkoaCkpfWVsc2UgaWYoInJlc2l6ZS1vdmVyLWVuZC1wb2ludCI9PT1PKXt2YXIgcD1nK24sZD1EP3ktaTp5K2k7QigieDEiLHIueDE9ej9wOkcocCkpLEIoInkxIixyLnkxPUQ/ZDpZKGQpKX19ZWxzZXt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PU8uaW5kZXhPZih0KX0sYj12KCJuIiksaj12KCJzIiksVj12KCJ3IiksVz12KCJlIiksWD1iP2sraTprLFo9aj9BK2k6QSxKPVY/TStuOk0sSz1XP1MrbjpTO0QmJihiJiYoWD1rLWkpLGomJihaPUEtaSkpLCghRCYmWi1YPjEwfHxEJiZYLVo+MTApJiYoQihFLHJbRV09RD9YOlkoWCkpLEIoTCxyW0xdPUQ/WjpZKFopKSksSy1KPjEwJiYoQihDLHJbQ109ej9KOkcoSikpLEIoUCxyW1BdPXo/SzpHKEspKSl9ZS5hdHRyKCJkIixfKHQscikpLFEocyxyKX1mdW5jdGlvbiBRKHQsZSl7KHp8fEQpJiZmdW5jdGlvbigpe3ZhciByPSJwYXRoIiE9PWUudHlwZSxuPXQuc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLmRhdGEoWzBdKTtuLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuYXR0cih7ZmlsbDoiI2ZmZiIsImZpbGwtcnVsZSI6ImV2ZW5vZGQiLHN0cm9rZToiIzAwMCIsInN0cm9rZS13aWR0aCI6MX0pLmNsYXNzZWQoInZpc3VhbC1jdWUiLCEwKTt2YXIgYT1IKHo/ZS54YW5jaG9yOmkubWlkUmFuZ2Uocj9bZS54MCxlLngxXTptLmV4dHJhY3RQYXRoQ29vcmRzKGUucGF0aCxkLnBhcmFtSXNYKSkpLG89cShEP2UueWFuY2hvcjppLm1pZFJhbmdlKHI/W2UueTAsZS55MV06bS5leHRyYWN0UGF0aENvb3JkcyhlLnBhdGgsZC5wYXJhbUlzWSkpKTtpZihhPW0ucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nKGEsMSksbz1tLnJvdW5kUG9zaXRpb25Gb3JTaGFycFN0cm9rZVJlbmRlcmluZyhvLDEpLHomJkQpe3ZhciBzPSJNIisoYS0xLTEpKyIsIisoby0xLTEpKyJoLTh2Mmg4IHY4aDJ2LTggaDh2LTJoLTggdi04aC0yIFoiO24uYXR0cigiZCIscyl9ZWxzZSBpZih6KXt2YXIgbD0iTSIrKGEtMS0xKSsiLCIrKG8tOS0xKSsidjE4IGgyIHYtMTggWiI7bi5hdHRyKCJkIixsKX1lbHNle3ZhciBjPSJNIisoYS05LTEpKyIsIisoby0xLTEpKyJoMTggdjIgaC0xOCBaIjtuLmF0dHIoImQiLGMpfX0oKX1mdW5jdGlvbiAkKHQpe3Quc2VsZWN0QWxsKCIudmlzdWFsLWN1ZSIpLnJlbW92ZSgpfWguaW5pdChYKSxXLm5vZGUoKS5vbm1vdXNlbW92ZT1afSh0LHosbCxlLHIsTyk6ITA9PT1sLmVkaXRhYmxlJiZ6LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsUHx8Yy5vcGFjaXR5KFMpKk08PS41PyJzdHJva2UiOiJhbGwiKTt6Lm5vZGUoKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsKGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoIXkodCkpcmV0dXJuO3ZhciByPStlLm5vZGUoKS5nZXRBdHRyaWJ1dGUoImRhdGEtaW5kZXgiKTtpZihyPj0wKXtpZihyPT09dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleClyZXR1cm4gdm9pZCBUKHQpO3QuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg9cix0Ll9mdWxsTGF5b3V0Ll9kZWFjdGl2YXRlU2hhcGU9VCxnKHQpfX0odCx6KX0pKX19ZnVuY3Rpb24gYih0LGUscil7dmFyIG49KHIueHJlZityLnlyZWYpLnJlcGxhY2UoL3BhcGVyL2csIiIpLnJlcGxhY2UoL1t4eXpdWzEtOV0qICpkb21haW4vZywiIik7dS5zZXRDbGlwVXJsKHQsbj8iY2xpcCIrZS5fZnVsbExheW91dC5fdWlkK246bnVsbCxlKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZixoPWUudHlwZSxwPWEuZ2V0UmVmVHlwZShlLnhyZWYpLGc9YS5nZXRSZWZUeXBlKGUueXJlZiksdj1hLmdldEZyb21JZCh0LGUueHJlZikseT1hLmdldEZyb21JZCh0LGUueXJlZikseD10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKHY/ImRvbWFpbiI9PT1wP249ZnVuY3Rpb24odCl7cmV0dXJuIHYuX29mZnNldCt2Ll9sZW5ndGgqdH06KHI9bS5zaGFwZVBvc2l0aW9uVG9SYW5nZSh2KSxuPWZ1bmN0aW9uKHQpe3JldHVybiB2Ll9vZmZzZXQrdi5yMnAocih0LCEwKSl9KTpuPWZ1bmN0aW9uKHQpe3JldHVybiB4LmwreC53KnR9LHk/ImRvbWFpbiI9PT1nP3M9ZnVuY3Rpb24odCl7cmV0dXJuIHkuX29mZnNldCt5Ll9sZW5ndGgqKDEtdCl9OihvPW0uc2hhcGVQb3NpdGlvblRvUmFuZ2UoeSkscz1mdW5jdGlvbih0KXtyZXR1cm4geS5fb2Zmc2V0K3kucjJwKG8odCwhMCkpfSk6cz1mdW5jdGlvbih0KXtyZXR1cm4geC50K3guaCooMS10KX0sInBhdGgiPT09aClyZXR1cm4gdiYmImRhdGUiPT09di50eXBlJiYobj1tLmRlY29kZURhdGUobikpLHkmJiJkYXRlIj09PXkudHlwZSYmKHM9bS5kZWNvZGVEYXRlKHMpKSxmdW5jdGlvbih0LGUscil7dmFyIG49dC5wYXRoLGE9dC54c2l6ZW1vZGUsbz10LnlzaXplbW9kZSxzPXQueGFuY2hvcixsPXQueWFuY2hvcjtyZXR1cm4gbi5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGM9dC5jaGFyQXQoMCksdT1kLnBhcmFtSXNYW2NdLGY9ZC5wYXJhbUlzWVtjXSxoPWQubnVtUGFyYW1zW2NdLHA9dC5zdWJzdHIoMSkucmVwbGFjZShkLnBhcmFtUkUsKGZ1bmN0aW9uKHQpe3JldHVybiB1W25dP3Q9InBpeGVsIj09PWE/ZShzKStOdW1iZXIodCk6ZSh0KTpmW25dJiYodD0icGl4ZWwiPT09bz9yKGwpLU51bWJlcih0KTpyKHQpKSwrK24+aCYmKHQ9IlgiKSx0fSkpO3JldHVybiBuPmgmJihwPXAucmVwbGFjZSgvW1xzLF0qWC4qLywiIiksaS5sb2coIklnbm9yaW5nIGV4dHJhIHBhcmFtcyBpbiBzZWdtZW50ICIrdCkpLGMrcH0pKX0oZSxuLHMpO2lmKCJwaXhlbCI9PT1lLnhzaXplbW9kZSl7dmFyIGI9bihlLnhhbmNob3IpO2w9YitlLngwLGM9YitlLngxfWVsc2UgbD1uKGUueDApLGM9bihlLngxKTtpZigicGl4ZWwiPT09ZS55c2l6ZW1vZGUpe3ZhciBfPXMoZS55YW5jaG9yKTt1PV8tZS55MCxmPV8tZS55MX1lbHNlIHU9cyhlLnkwKSxmPXMoZS55MSk7aWYoImxpbmUiPT09aClyZXR1cm4iTSIrbCsiLCIrdSsiTCIrYysiLCIrZjtpZigicmVjdCI9PT1oKXJldHVybiJNIitsKyIsIit1KyJIIitjKyJWIitmKyJIIitsKyJaIjt2YXIgdz0obCtjKS8yLFQ9KHUrZikvMixrPU1hdGguYWJzKHctbCksQT1NYXRoLmFicyhULXUpLE09IkEiK2srIiwiK0EsUz13K2srIiwiK1Q7cmV0dXJuIk0iK1MrTSsiIDAgMSwxICIrKHcrIiwiKyhULUEpKStNKyIgMCAwLDEgIitTKyJaIn1mdW5jdGlvbiB3KHQsZSxyKXtyZXR1cm4gdC5yZXBsYWNlKGQuc2VnbWVudFJFLChmdW5jdGlvbih0KXt2YXIgbj0wLGk9dC5jaGFyQXQoMCksYT1kLnBhcmFtSXNYW2ldLG89ZC5wYXJhbUlzWVtpXSxzPWQubnVtUGFyYW1zW2ldO3JldHVybiBpK3Quc3Vic3RyKDEpLnJlcGxhY2UoZC5wYXJhbVJFLChmdW5jdGlvbih0KXtyZXR1cm4gbj49c3x8KGFbbl0/dD1lKHQpOm9bbl0mJih0PXIodCkpLG4rKyksdH0pKX0pKX1mdW5jdGlvbiBUKHQpe3kodCkmJih0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4Pj0wJiYobCh0KSxkZWxldGUgdC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxnKHQpKSl9ZS5leHBvcnRzPXtkcmF3OmcsZHJhd09uZTp4LGVyYXNlQWN0aXZlU2hhcGU6ZnVuY3Rpb24odCl7aWYoIXkodCkpcmV0dXJuO2wodCk7dmFyIGU9dC5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleCxyPSh0LmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoZTxyLmxlbmd0aCl7Zm9yKHZhciBpPVtdLGE9MDthPHIubGVuZ3RoO2ErKylhIT09ZSYmaS5wdXNoKHJbYV0pO2RlbGV0ZSB0Ll9mdWxsTGF5b3V0Ll9hY3RpdmVTaGFwZUluZGV4LG4uY2FsbCgiX2d1aVJlbGF5b3V0Iix0LHtzaGFwZXM6aX0pfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yIjo2MzksIi4uL2RyYWdlbGVtZW50Ijo2NTgsIi4uL2RyYXdpbmciOjY2MSwiLi9jb25zdGFudHMiOjcyMSwiLi9kcmF3X25ld3NoYXBlL2Rpc3BsYXlfb3V0bGluZXMiOjcyNywiLi9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjcyOCwiLi9oZWxwZXJzIjo3MzB9XSw3MjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCxpPXQoIi4uLy4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bmV3c2hhcGU6e2xpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6Im5vbmUifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjQsZWRpdFR5cGU6Im5vbmUifSxkYXNoOmkoe30sbix7ZGZsdDoic29saWQiLGVkaXRUeXBlOiJub25lIn0pLGVkaXRUeXBlOiJub25lIn0sZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6Im5vbmUifSxmaWxscnVsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZXZlbm9kZCIsIm5vbnplcm8iXSxkZmx0OiJldmVub2RkIixlZGl0VHlwZToibm9uZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJub25lIn0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImJlbG93IiwiYWJvdmUiXSxkZmx0OiJhYm92ZSIsZWRpdFR5cGU6Im5vbmUifSxkcmF3ZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJvcnRobyIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsImRpYWdvbmFsIl0sZGZsdDoiZGlhZ29uYWwiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifSxhY3RpdmVzaGFwZTp7ZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiKDI1NSwwLDI1NSkiLGVkaXRUeXBlOiJub25lIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6Im5vbmUifX19LHsiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MH1dLDcyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0NJUkNMRV9TSURFUzozMixpMDAwOjAsaTA5MDo4LGkxODA6MTYsaTI3MDoyNCxjb3M0NTpNYXRoLmNvcyhNYXRoLlBJLzQpLHNpbjQ1Ok1hdGguc2luKE1hdGguUEkvNCksU1FSVDI6TWF0aC5zcXJ0KDIpfX0se31dLDcyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYocigibmV3c2hhcGUuZHJhd2RpcmVjdGlvbiIpLHIoIm5ld3NoYXBlLmxheWVyIikscigibmV3c2hhcGUuZmlsbGNvbG9yIikscigibmV3c2hhcGUuZmlsbHJ1bGUiKSxyKCJuZXdzaGFwZS5vcGFjaXR5IikscigibmV3c2hhcGUubGluZS53aWR0aCIpKXt2YXIgaT0odHx8e30pLnBsb3RfYmdjb2xvcnx8IiNGRkYiO3IoIm5ld3NoYXBlLmxpbmUuY29sb3IiLG4uY29udHJhc3QoaSkpLHIoIm5ld3NoYXBlLmxpbmUuZGFzaCIpfXIoImFjdGl2ZXNoYXBlLmZpbGxjb2xvciIpLHIoImFjdGl2ZXNoYXBlLm9wYWNpdHkiKX19LHsiLi4vLi4vY29sb3IiOjYzOX1dLDcyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudCIpLGk9dCgiLi4vLi4vZHJhZ2VsZW1lbnQvaGVscGVycyIpLmRyYXdNb2RlLGE9dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj10KCIuLi8uLi8uLi9wbG90cy9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiKS5jbGVhck91dGxpbmVDb250cm9sbGVycyxoPXQoIi4vaGVscGVycyIpLHA9aC5wb2ludHNTaGFwZVJlY3RhbmdsZSxkPWgucG9pbnRzU2hhcGVFbGxpcHNlLG09aC53cml0ZVBhdGhzLGc9dCgiLi9uZXdzaGFwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsbyxoKXtofHwoaD0wKTt2YXIgdj1vLmdkO2Z1bmN0aW9uIHkoKXt0KGUscixvLGgrKyksZChlWzBdKSYmeCh7cmVkcmF3aW5nOiEwfSl9ZnVuY3Rpb24geCh0KXtvLmlzQWN0aXZlU2hhcGU9ITE7dmFyIGU9ZyhyLG8pO09iamVjdC5rZXlzKGUpLmxlbmd0aCYmYS5jYWxsKCh0fHx7fSkucmVkcmF3aW5nPyJyZWxheW91dCI6Il9ndWlSZWxheW91dCIsdixlKX12YXIgYixfLHcsVCxrLEE9by5pc0FjdGl2ZVNoYXBlLE09di5fZnVsbExheW91dC5fem9vbWxheWVyLFM9by5kcmFnbW9kZTsoaShTKT92Ll9mdWxsTGF5b3V0Ll9kcmF3aW5nPSEwOnYuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTAmJmYodiksci5hdHRyKCJkIixtKGUpKSxBJiYhaCkmJihrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07dFtyXT1bXTtmb3IodmFyIGk9MDtpPG4ubGVuZ3RoO2krKyl7dFtyXVtpXT1bXTtmb3IodmFyIGE9MDthPG5baV0ubGVuZ3RoO2ErKyl0W3JdW2ldW2FdPW5baV1bYV19fXJldHVybiB0fShbXSxlKSxmdW5jdGlvbih0KXtiPVtdO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgaT1lW3JdLGE9IXAoaSkmJmQoaSk7YltyXT1bXTtmb3IodmFyIG89MDtvPGkubGVuZ3RoO28rKylpZigiWiIhPT1pW29dWzBdJiYoIWF8fG89PT1zfHxvPT09bHx8bz09PWN8fG89PT11KSl7dmFyIGY9aVtvXVsxXSxoPWlbb11bMl0sbT10LmFwcGVuZCgiY2lyY2xlIikuY2xhc3NlZCgiY3Vyc29yLWdyYWIiLCEwKS5hdHRyKCJkYXRhLWkiLHIpLmF0dHIoImRhdGEtaiIsbykuYXR0cigiY3giLGYpLmF0dHIoImN5IixoKS5hdHRyKCJyIiw0KS5zdHlsZSh7Im1peC1ibGVuZC1tb2RlIjoibHVtaW5vc2l0eSIsZmlsbDoiYmxhY2siLHN0cm9rZToid2hpdGUiLCJzdHJva2Utd2lkdGgiOjF9KTtiW3JdW29dPXtlbGVtZW50Om0ubm9kZSgpLGdkOnYscHJlcEZuOkUsZG9uZUZuOkMsY2xpY2tGbjpQfSxuLmluaXQoYltyXVtvXSl9fX0oTS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsIm91dGxpbmUtY29udHJvbGxlcnMiKSksZnVuY3Rpb24oKXtpZihfPVtdLCFlLmxlbmd0aClyZXR1cm47X1swXT17ZWxlbWVudDpyWzBdWzBdLGdkOnYscHJlcEZuOk8sZG9uZUZuOnp9LG4uaW5pdChfWzBdKX0oKSk7ZnVuY3Rpb24gRSh0KXt3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSxUPSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWoiKSxiW3ddW1RdLm1vdmVGbj1MfWZ1bmN0aW9uIEwodCxyKXtpZihlLmxlbmd0aCl7dmFyIG49a1t3XVtUXVsxXSxpPWtbd11bVF1bMl0sYT1lW3ddLG89YS5sZW5ndGg7aWYocChhKSl7Zm9yKHZhciBzPTA7czxvO3MrKylpZihzIT09VCl7dmFyIGw9YVtzXTtsWzFdPT09YVtUXVsxXSYmKGxbMV09bit0KSxsWzJdPT09YVtUXVsyXSYmKGxbMl09aStyKX1pZihhW1RdWzFdPW4rdCxhW1RdWzJdPWkrciwhcChhKSlmb3IodmFyIGM9MDtjPG87YysrKWZvcih2YXIgdT0wO3U8YVtjXS5sZW5ndGg7dSsrKWFbY11bdV09a1t3XVtjXVt1XX1lbHNlIGFbVF1bMV09bit0LGFbVF1bMl09aStyO3koKX19ZnVuY3Rpb24gQygpe3goKX1mdW5jdGlvbiBQKHQscil7aWYoMj09PXQpe3c9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaSIpLFQ9K3Iuc3JjRWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaiIpO3ZhciBuPWVbd107cChuKXx8ZChuKXx8ZnVuY3Rpb24oKXtpZihlLmxlbmd0aCYmZVt3XSYmZVt3XS5sZW5ndGgpe2Zvcih2YXIgdD1bXSxyPTA7cjxlW3ddLmxlbmd0aDtyKyspciE9PVQmJnQucHVzaChlW3ddW3JdKTt0Lmxlbmd0aD4xJiYoMiE9PXQubGVuZ3RofHwiWiIhPT10WzFdWzBdKSYmKDA9PT1UJiYodFswXVswXT0iTSIpLGVbd109dCx5KCkseCgpKX19KCl9fWZ1bmN0aW9uIEkodCxyKXshZnVuY3Rpb24odCxyKXtpZihlLmxlbmd0aClmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylmb3IodmFyIGk9MDtpPGVbbl0ubGVuZ3RoO2krKylmb3IodmFyIGE9MDthKzI8ZVtuXVtpXS5sZW5ndGg7YSs9MillW25dW2ldW2ErMV09a1tuXVtpXVthKzFdK3QsZVtuXVtpXVthKzJdPWtbbl1baV1bYSsyXStyfSh0LHIpLHkoKX1mdW5jdGlvbiBPKHQpeyh3PSt0LnNyY0VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWkiKSl8fCh3PTApLF9bd10ubW92ZUZuPUl9ZnVuY3Rpb24geigpe3goKX19fSx7Ii4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oYW5kbGVfb3V0bGluZSI6ODM4LCIuLi8uLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi8uLi9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4vY29uc3RhbnRzIjo3MjUsIi4vaGVscGVycyI6NzI4LCIuL25ld3NoYXBlcyI6NzI5fV0sNzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBhcnNlLXN2Zy1wYXRoIiksaT10KCIuL2NvbnN0YW50cyIpLGE9aS5DSVJDTEVfU0lERVMsbz1pLlNRUlQyLHM9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiKSxsPXMucDJyLGM9cy5yMnAsdT1bMCwzLDQsNSw2LDEsMl0sZj1bMCwzLDQsMSwyXTtmdW5jdGlvbiBoKHQsZSl7cmV0dXJuIE1hdGguYWJzKHQtZSk8PTFlLTZ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByPWVbMV0tdFsxXSxuPWVbMl0tdFsyXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcituKm4pfXIud3JpdGVQYXRocz1mdW5jdGlvbih0KXt2YXIgZT10Lmxlbmd0aDtpZighZSlyZXR1cm4iTTAsMFoiO2Zvcih2YXIgcj0iIixuPTA7bjxlO24rKylmb3IodmFyIGk9dFtuXS5sZW5ndGgsYT0wO2E8aTthKyspe3ZhciBvPXRbbl1bYV1bMF07aWYoIloiPT09bylyKz0iWiI7ZWxzZSBmb3IodmFyIHM9dFtuXVthXS5sZW5ndGgsbD0wO2w8cztsKyspe3ZhciBjPWw7IlEiPT09b3x8IlMiPT09bz9jPWZbbF06IkMiPT09byYmKGM9dVtsXSkscis9dFtuXVthXVtjXSxsPjAmJmw8cy0xJiYocis9IiwiKX19cmV0dXJuIHJ9LHIucmVhZFBhdGhzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvLHMsdSxmPW4odCksaD1bXSxwPS0xLGQ9MCxtPTAsZz1mdW5jdGlvbigpe3M9ZCx1PW19O2coKTtmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIHkseCxiLF8sdz1bXSxUPWZbdl1bMF0saz1UO3N3aXRjaChUKXtjYXNlIk0iOnArKyxoW3BdPVtdLGQ9K2Zbdl1bMV0sbT0rZlt2XVsyXSx3LnB1c2goW2ssZCxtXSksZygpO2JyZWFrO2Nhc2UiUSI6Y2FzZSJTIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0sZD0rZlt2XVszXSxtPStmW3ZdWzRdLHcucHVzaChbayxkLG0seSxiXSk7YnJlYWs7Y2FzZSJDIjp5PStmW3ZdWzFdLGI9K2Zbdl1bMl0seD0rZlt2XVszXSxfPStmW3ZdWzRdLGQ9K2Zbdl1bNV0sbT0rZlt2XVs2XSx3LnB1c2goW2ssZCxtLHksYix4LF9dKTticmVhaztjYXNlIlQiOmNhc2UiTCI6ZD0rZlt2XVsxXSxtPStmW3ZdWzJdLHcucHVzaChbayxkLG1dKTticmVhaztjYXNlIkgiOms9IkwiLGQ9K2Zbdl1bMV0sdy5wdXNoKFtrLGQsbV0pO2JyZWFrO2Nhc2UiViI6az0iTCIsbT0rZlt2XVsxXSx3LnB1c2goW2ssZCxtXSk7YnJlYWs7Y2FzZSJBIjprPSJMIjt2YXIgQT0rZlt2XVsxXSxNPStmW3ZdWzJdOytmW3ZdWzRdfHwoQT0tQSxNPS1NKTt2YXIgUz1kLUEsRT1tO2ZvcihvPTE7bzw9YS8yO28rKyl7dmFyIEw9MipNYXRoLlBJKm8vYTt3LnB1c2goW2ssUytBKk1hdGguY29zKEwpLEUrTSpNYXRoLnNpbihMKV0pfWJyZWFrO2Nhc2UiWiI6ZD09PXMmJm09PT11fHwoZD1zLG09dSx3LnB1c2goW2ssZCxtXSkpfWZvcih2YXIgQz0ocnx8e30pLmRvbWFpbixQPWUuX2Z1bGxMYXlvdXQuX3NpemUsST1yJiYicGl4ZWwiPT09ci54c2l6ZW1vZGUsTz1yJiYicGl4ZWwiPT09ci55c2l6ZW1vZGUsej0hMT09PWksRD0wO0Q8dy5sZW5ndGg7RCsrKXtmb3Iobz0wO28rMjw3O28rPTIpe3ZhciBSPXdbRF1bbysxXSxGPXdbRF1bbysyXTt2b2lkIDAhPT1SJiZ2b2lkIDAhPT1GJiYoZD1SLG09RixyJiYoci54YXhpcyYmci54YXhpcy5wMnI/KHomJihSLT1yLnhheGlzLl9vZmZzZXQpLFI9ST9jKHIueGF4aXMsci54YW5jaG9yKStSOmwoci54YXhpcyxSKSk6KHomJihSLT1QLmwpLEM/Uj1DLnhbMF0rUi9QLnc6Ui89UC53KSxyLnlheGlzJiZyLnlheGlzLnAycj8oeiYmKEYtPXIueWF4aXMuX29mZnNldCksRj1PP2Moci55YXhpcyxyLnlhbmNob3IpLUY6bChyLnlheGlzLEYpKTooeiYmKEYtPVAudCksRj1DP0MueVsxXS1GL1AuaDoxLUYvUC5oKSksd1tEXVtvKzFdPVIsd1tEXVtvKzJdPUYpfWhbcF0ucHVzaCh3W0RdLnNsaWNlKCkpfX1yZXR1cm4gaH0sci5wb2ludHNTaGFwZVJlY3RhbmdsZT1mdW5jdGlvbih0KXtpZig1IT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTE7ZTwzO2UrKyl7aWYoIWgodFswXVtlXS10WzFdW2VdLHRbM11bZV0tdFsyXVtlXSkpcmV0dXJuITE7aWYoIWgodFswXVtlXS10WzNdW2VdLHRbMV1bZV0tdFsyXVtlXSkpcmV0dXJuITF9cmV0dXJuISghaCh0WzBdWzFdLHRbMV1bMV0pJiYhaCh0WzBdWzFdLHRbM11bMV0pKSYmISEocCh0WzBdLHRbMV0pKnAodFswXSx0WzNdKSl9LHIucG9pbnRzU2hhcGVFbGxpcHNlPWZ1bmN0aW9uKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUhPT1hKzEpcmV0dXJuITE7ZT1hO2Zvcih2YXIgcj0wO3I8ZTtyKyspe3ZhciBuPSgyKmUtciklZSxpPShlLzIrbiklZSxvPShlLzIrciklZTtpZighaChwKHRbcl0sdFtvXSkscCh0W25dLHRbaV0pKSlyZXR1cm4hMX1yZXR1cm4hMH0sci5oYW5kbGVFbGxpcHNlPWZ1bmN0aW9uKHQsZSxuKXtpZighdClyZXR1cm5bZSxuXTt2YXIgaT1yLmVsbGlwc2VPdmVyKHt4MDplWzBdLHkwOmVbMV0seDE6blswXSx5MTpuWzFdfSkscz0oaS54MStpLngwKS8yLGw9KGkueTEraS55MCkvMixjPShpLngxLWkueDApLzIsdT0oaS55MS1pLnkwKS8yO2N8fChjPXUvPW8pLHV8fCh1PWMvPW8pO2Zvcih2YXIgZj1bXSxoPTA7aDxhO2grKyl7dmFyIHA9MipoKk1hdGguUEkvYTtmLnB1c2goW3MrYypNYXRoLmNvcyhwKSxsK3UqTWF0aC5zaW4ocCldKX1yZXR1cm4gZn0sci5lbGxpcHNlT3Zlcj1mdW5jdGlvbih0KXt2YXIgZT10LngwLHI9dC55MCxuPXQueDEsaT10LnkxLGE9bi1lLHM9aS1yLGw9KChlLT1hKStuKS8yLGM9KChyLT1zKStpKS8yO3JldHVybnt4MDpsLShhKj1vKSx5MDpjLShzKj1vKSx4MTpsK2EseTE6YytzfX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hlbHBlcnMiOjgzOSwiLi9jb25zdGFudHMiOjcyNSwicGFyc2Utc3ZnLXBhdGgiOjQ3Mn1dLDcyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9kcmFnZWxlbWVudC9oZWxwZXJzIiksaT1uLmRyYXdNb2RlLGE9bi5vcGVuTW9kZSxvPXQoIi4vY29uc3RhbnRzIikscz1vLmkwMDAsbD1vLmkwOTAsYz1vLmkxODAsdT1vLmkyNzAsZj1vLmNvczQ1LGg9by5zaW40NSxwPXQoIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIiksZD1wLnAycixtPXAucjJwLGc9dCgiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3Qsdj10KCIuL2hlbHBlcnMiKSx5PXYucmVhZFBhdGhzLHg9di53cml0ZVBhdGhzLGI9di5lbGxpcHNlT3ZlcjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCl7dmFyIHI9dFswXVswXTtpZihyKXt2YXIgbj1yLmdldEF0dHJpYnV0ZSgiZCIpLG89ZS5nZCxwPW8uX2Z1bGxMYXlvdXQubmV3c2hhcGUsdj1lLnBsb3RpbmZvLF89di54YXhpcyx3PXYueWF4aXMsVD0hIXYuZG9tYWlufHwhdi54YXhpcyxrPSEhdi5kb21haW58fCF2LnlheGlzLEE9ZS5pc0FjdGl2ZVNoYXBlLE09ZS5kcmFnbW9kZSxTPShvLmxheW91dHx8e30pLnNoYXBlc3x8W107aWYoIWkoTSkmJnZvaWQgMCE9PUEpe3ZhciBFPW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg7aWYoRTxTLmxlbmd0aClzd2l0Y2goby5fZnVsbExheW91dC5zaGFwZXNbRV0udHlwZSl7Y2FzZSJyZWN0IjpNPSJkcmF3cmVjdCI7YnJlYWs7Y2FzZSJjaXJjbGUiOk09ImRyYXdjaXJjbGUiO2JyZWFrO2Nhc2UibGluZSI6TT0iZHJhd2xpbmUiO2JyZWFrO2Nhc2UicGF0aCI6dmFyIEw9U1tFXS5wYXRofHwiIjtNPSJaIj09PUxbTC5sZW5ndGgtMV0/ImRyYXdjbG9zZWRwYXRoIjoiZHJhd29wZW5wYXRoIn19dmFyIEMsUD1hKE0pLEk9eShuLG8sdixBKSxPPXtlZGl0YWJsZTohMCx4cmVmOlQ/InBhcGVyIjpfLl9pZCx5cmVmOms/InBhcGVyIjp3Ll9pZCxsYXllcjpwLmxheWVyLG9wYWNpdHk6cC5vcGFjaXR5LGxpbmU6e2NvbG9yOnAubGluZS5jb2xvcix3aWR0aDpwLmxpbmUud2lkdGgsZGFzaDpwLmxpbmUuZGFzaH19O2lmKFB8fChPLmZpbGxjb2xvcj1wLmZpbGxjb2xvcixPLmZpbGxydWxlPXAuZmlsbHJ1bGUpLDE9PT1JLmxlbmd0aCYmKEM9SVswXSksQyYmImRyYXdyZWN0Ij09PU0pTy50eXBlPSJyZWN0IixPLngwPUNbMF1bMV0sTy55MD1DWzBdWzJdLE8ueDE9Q1syXVsxXSxPLnkxPUNbMl1bMl07ZWxzZSBpZihDJiYiZHJhd2xpbmUiPT09TSlPLnR5cGU9ImxpbmUiLE8ueDA9Q1swXVsxXSxPLnkwPUNbMF1bMl0sTy54MT1DWzFdWzFdLE8ueTE9Q1sxXVsyXTtlbHNlIGlmKEMmJiJkcmF3Y2lyY2xlIj09PU0pe08udHlwZT0iY2lyY2xlIjt2YXIgej1DW3NdWzFdLEQ9Q1tsXVsxXSxSPUNbY11bMV0sRj1DW3VdWzFdLEI9Q1tzXVsyXSxOPUNbbF1bMl0saj1DW2NdWzJdLFU9Q1t1XVsyXSxWPXYueGF4aXMmJigiZGF0ZSI9PT12LnhheGlzLnR5cGV8fCJsb2ciPT09di54YXhpcy50eXBlKSxIPXYueWF4aXMmJigiZGF0ZSI9PT12LnlheGlzLnR5cGV8fCJsb2ciPT09di55YXhpcy50eXBlKTtWJiYoej1tKHYueGF4aXMseiksRD1tKHYueGF4aXMsRCksUj1tKHYueGF4aXMsUiksRj1tKHYueGF4aXMsRikpLEgmJihCPW0odi55YXhpcyxCKSxOPW0odi55YXhpcyxOKSxqPW0odi55YXhpcyxqKSxVPW0odi55YXhpcyxVKSk7dmFyIHE9KEQrRikvMixHPShCK2opLzIsWT1iKHt4MDpxLHkwOkcseDE6cSsoRi1EK1IteikvMipmLHkxOkcrKFUtTitqLUIpLzIqaH0pO1YmJihZLngwPWQodi54YXhpcyxZLngwKSxZLngxPWQodi54YXhpcyxZLngxKSksSCYmKFkueTA9ZCh2LnlheGlzLFkueTApLFkueTE9ZCh2LnlheGlzLFkueTEpKSxPLngwPVkueDAsTy55MD1ZLnkwLE8ueDE9WS54MSxPLnkxPVkueTF9ZWxzZSBPLnR5cGU9InBhdGgiLF8mJncmJmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0iZGF0ZSI9PT1lLnR5cGUsaT0iZGF0ZSI9PT1yLnR5cGU7aWYoIW4mJiFpKXJldHVybiB0O2Zvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKWZvcih2YXIgbz0wO288dFthXS5sZW5ndGg7bysrKWZvcih2YXIgcz0wO3MrMjx0W2FdW29dLmxlbmd0aDtzKz0yKW4mJih0W2FdW29dW3MrMV09dFthXVtvXVtzKzFdLnJlcGxhY2UoIiAiLCJfIikpLGkmJih0W2FdW29dW3MrMl09dFthXVtvXVtzKzJdLnJlcGxhY2UoIiAiLCJfIikpfShJLF8sdyksTy5wYXRoPXgoSSksQz1udWxsO2cobyk7Zm9yKHZhciBXPWUuZWRpdEhlbHBlcnMsWD0oV3x8e30pLm1vZGlmeUl0ZW0sWj1bXSxKPTA7SjxTLmxlbmd0aDtKKyspe3ZhciBLPW8uX2Z1bGxMYXlvdXQuc2hhcGVzW0pdO2lmKFpbSl09Sy5faW5wdXQsdm9pZCAwIT09QSYmSj09PW8uX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXgpe3ZhciBRPU87c3dpdGNoKEsudHlwZSl7Y2FzZSJsaW5lIjpjYXNlInJlY3QiOmNhc2UiY2lyY2xlIjpYKCJ4MCIsUS54MCksWCgieDEiLFEueDEpLFgoInkwIixRLnkwKSxYKCJ5MSIsUS55MSk7YnJlYWs7Y2FzZSJwYXRoIjpYKCJwYXRoIixRLnBhdGgpfX19cmV0dXJuIHZvaWQgMD09PUE/KFoucHVzaChPKSxaKTpXP1cuZ2V0VXBkYXRlT2JqKCk6e319fX19LHsiLi4vLi4vLi4vcGxvdHMvY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4uLy4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9oZWxwZXJzIjo4MzksIi4uLy4uL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi9jb25zdGFudHMiOjcyNSwiLi9oZWxwZXJzIjo3Mjh9XSw3MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIi4uLy4uL2xpYiIpO3IucmFuZ2VUb1NoYXBlUG9zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuImxvZyI9PT10LnR5cGU/dC5yMmQ6ZnVuY3Rpb24odCl7cmV0dXJuIHR9fSxyLnNoYXBlUG9zaXRpb25Ub1JhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiJsb2ciPT09dC50eXBlP3QuZDJyOmZ1bmN0aW9uKHQpe3JldHVybiB0fX0sci5kZWNvZGVEYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlJiYoZT1lLnJlcGxhY2UoIl8iLCIgIikpLHQoZSl9fSxyLmVuY29kZURhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KGUpLnJlcGxhY2UoIiAiLCJfIil9fSxyLmV4dHJhY3RQYXRoQ29vcmRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIHQubWF0Y2gobi5zZWdtZW50UkUpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBhPWVbdC5jaGFyQXQoMCldLmRyYXduO2lmKHZvaWQgMCE9PWEpe3ZhciBvPXQuc3Vic3RyKDEpLm1hdGNoKG4ucGFyYW1SRSk7IW98fG8ubGVuZ3RoPGF8fHIucHVzaChpLmNsZWFuTnVtYmVyKG9bYV0pKX19KSkscn0sci5nZXREYXRhVG9QaXhlbD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxvPXQuX2Z1bGxMYXlvdXQuX3NpemU7aWYoZSlpZigiZG9tYWluIj09PWkpYT1mdW5jdGlvbih0KXtyZXR1cm4gZS5fbGVuZ3RoKihuPzEtdDp0KStlLl9vZmZzZXR9O2Vsc2V7dmFyIHM9ci5zaGFwZVBvc2l0aW9uVG9SYW5nZShlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBlLl9vZmZzZXQrZS5yMnAocyh0LCEwKSl9LCJkYXRlIj09PWUudHlwZSYmKGE9ci5kZWNvZGVEYXRlKGEpKX1lbHNlIGE9bj9mdW5jdGlvbih0KXtyZXR1cm4gby50K28uaCooMS10KX06ZnVuY3Rpb24odCl7cmV0dXJuIG8ubCtvLncqdH07cmV0dXJuIGF9LHIuZ2V0UGl4ZWxUb0RhdGE9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGEsbz10Ll9mdWxsTGF5b3V0Ll9zaXplO2lmKGUpaWYoImRvbWFpbiI9PT1pKWE9ZnVuY3Rpb24odCl7dmFyIHI9KHQtZS5fb2Zmc2V0KS9lLl9sZW5ndGg7cmV0dXJuIG4/MS1yOnJ9O2Vsc2V7dmFyIHM9ci5yYW5nZVRvU2hhcGVQb3NpdGlvbihlKTthPWZ1bmN0aW9uKHQpe3JldHVybiBzKGUucDJyKHQtZS5fb2Zmc2V0KSl9fWVsc2UgYT1uP2Z1bmN0aW9uKHQpe3JldHVybiAxLSh0LW8udCkvby5ofTpmdW5jdGlvbih0KXtyZXR1cm4odC1vLmwpL28ud307cmV0dXJuIGF9LHIucm91bmRQb3NpdGlvbkZvclNoYXJwU3Ryb2tlUmVuZGVyaW5nPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MT09PU1hdGgucm91bmQoZSUyKSxuPU1hdGgucm91bmQodCk7cmV0dXJuIHI/bisuNTpufSxyLm1ha2VPcHRpb25zQW5kUGxvdGluZm89ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LnNoYXBlc1tlXXx8e30sbj10Ll9mdWxsTGF5b3V0Ll9wbG90c1tyLnhyZWYrci55cmVmXTtyZXR1cm4hIW4/bi5faGFkUGxvdGluZm89ITA6KG49e30sci54cmVmJiYicGFwZXIiIT09ci54cmVmJiYobi54YXhpcz10Ll9mdWxsTGF5b3V0W3IueHJlZisiYXhpcyJdKSxyLnlyZWYmJiJwYXBlciIhPT1yLnlyZWYmJihuLnlheGlzPXQuX2Z1bGxMYXlvdXRbci55cmVmKyJheGlzIl0pKSxuLnhzaXplbW9kZT1yLnhzaXplbW9kZSxuLnlzaXplbW9kZT1yLnlzaXplbW9kZSxuLnhhbmNob3I9ci54YW5jaG9yLG4ueWFuY2hvcj1yLnlhbmNob3Ise29wdGlvbnM6cixwbG90aW5mbzpufX19LHsiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjo3MjF9XSw3MzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3Iik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6InNoYXBlcyIsbGF5b3V0QXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHM6dCgiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIiksaW5jbHVkZUJhc2VQbG90OnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiKSgic2hhcGVzIiksY2FsY0F1dG9yYW5nZTp0KCIuL2NhbGNfYXV0b3JhbmdlIiksZHJhdzpuLmRyYXcsZHJhd09uZTpuLmRyYXdPbmV9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9pbmNsdWRlX2NvbXBvbmVudHMiOjg0MCwiLi9hdHRyaWJ1dGVzIjo3MTksIi4vY2FsY19hdXRvcmFuZ2UiOjcyMCwiLi9kZWZhdWx0cyI6NzIyLCIuL2RyYXciOjcyMywiLi9kcmF3X25ld3NoYXBlL2RlZmF1bHRzIjo3MjZ9XSw3MzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZERlZXBBbGwsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz10KCIuLi8uLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LGM9dCgiLi9jb25zdGFudHMiKSx1PWwoInN0ZXAiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlc3R5bGUiLCJyZWxheW91dCIsImFuaW1hdGUiLCJ1cGRhdGUiLCJza2lwIl0sZGZsdDoicmVzdHlsZSJ9LGFyZ3M6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGZyZWVMZW5ndGg6ITAsaXRlbXM6W3t2YWxUeXBlOiJhbnkifSx7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9XX0sbGFiZWw6e3ZhbFR5cGU6InN0cmluZyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmcifSxleGVjdXRlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0pO2UuZXhwb3J0cz1vKGwoInNsaWRlciIse3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGFjdGl2ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjB9LHN0ZXBzOnUsbGVubW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZnJhY3Rpb24iLCJwaXhlbHMiXSxkZmx0OiJmcmFjdGlvbiJ9LGxlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0scGFkOmEoaSh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSx7dDp7ZGZsdDoyMH19KSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwibGVmdCIsImNlbnRlciIsInJpZ2h0Il0sZGZsdDoibGVmdCJ9LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6MH0seWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGRmbHQ6InRvcCJ9LHRyYW5zaXRpb246e2R1cmF0aW9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MTUwfSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpzLnRyYW5zaXRpb24uZWFzaW5nLnZhbHVlcyxkZmx0OiJjdWJpYy1pbi1vdXQifX0sY3VycmVudHZhbHVlOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSx4YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxkZmx0OiJsZWZ0In0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTB9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIn0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmcifSxmb250Om4oe30pfSxmb250Om4oe30pLGFjdGl2ZWJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMuZ3JpcEJnQWN0aXZlQ29sb3J9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmMucmFpbEJnQ29sb3J9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnJhaWxCb3JkZXJDb2xvcn0sYm9yZGVyd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDpjLnJhaWxCb3JkZXJXaWR0aH0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OmMudGlja0xlbmd0aH0sdGlja2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpjLnRpY2tDb2xvcn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sbWlub3J0aWNrbGVuOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6Yy5taW5vclRpY2tMZW5ndGh9fSksImFycmF5ZHJhdyIsImZyb20tcm9vdCIpfSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjEsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy9wYWRfYXR0cmlidXRlcyI6ODg5LCIuL2NvbnN0YW50cyI6NzMzfV0sNzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bmFtZToic2xpZGVycyIsY29udGFpbmVyQ2xhc3NOYW1lOiJzbGlkZXItY29udGFpbmVyIixncm91cENsYXNzTmFtZToic2xpZGVyLWdyb3VwIixpbnB1dEFyZWFDbGFzczoic2xpZGVyLWlucHV0LWFyZWEiLHJhaWxSZWN0Q2xhc3M6InNsaWRlci1yYWlsLXJlY3QiLHJhaWxUb3VjaFJlY3RDbGFzczoic2xpZGVyLXJhaWwtdG91Y2gtcmVjdCIsZ3JpcFJlY3RDbGFzczoic2xpZGVyLWdyaXAtcmVjdCIsdGlja1JlY3RDbGFzczoic2xpZGVyLXRpY2stcmVjdCIsaW5wdXRQcm94eUNsYXNzOiJzbGlkZXItaW5wdXQtcHJveHkiLGxhYmVsc0NsYXNzOiJzbGlkZXItbGFiZWxzIixsYWJlbEdyb3VwQ2xhc3M6InNsaWRlci1sYWJlbC1ncm91cCIsbGFiZWxDbGFzczoic2xpZGVyLWxhYmVsIixjdXJyZW50VmFsdWVDbGFzczoic2xpZGVyLWN1cnJlbnQtdmFsdWUiLHJhaWxIZWlnaHQ6NSxtZW51SW5kZXhBdHRyTmFtZToic2xpZGVyLWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoic2xpZGVyLSIsbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjQwLGFycm93T2Zmc2V0WDo0LHJhaWxSYWRpdXM6MixyYWlsV2lkdGg6NSxyYWlsQm9yZGVyOjQscmFpbEJvcmRlcldpZHRoOjEscmFpbEJvcmRlckNvbG9yOiIjYmVjOGQ5IixyYWlsQmdDb2xvcjoiI2Y4ZmFmYyIscmFpbEluc2V0Ojgsc3RlcEluc2V0OjEwLGdyaXBSYWRpdXM6MTAsZ3JpcFdpZHRoOjIwLGdyaXBIZWlnaHQ6MjAsZ3JpcEJvcmRlcjoyMCxncmlwQm9yZGVyV2lkdGg6MSxncmlwQm9yZGVyQ29sb3I6IiNiZWM4ZDkiLGdyaXBCZ0NvbG9yOiIjZjZmOGZhIixncmlwQmdBY3RpdmVDb2xvcjoiI2RiZGRlMCIsbGFiZWxQYWRkaW5nOjgsbGFiZWxPZmZzZXQ6MCx0aWNrV2lkdGg6MSx0aWNrQ29sb3I6IiMzMzMiLHRpY2tPZmZzZXQ6MjUsdGlja0xlbmd0aDo3LG1pbm9yVGlja09mZnNldDoyNSxtaW5vclRpY2tDb2xvcjoiIzMzMyIsbWlub3JUaWNrTGVuZ3RoOjQsY3VycmVudFZhbHVlUGFkZGluZzo4LGN1cnJlbnRWYWx1ZUluc2V0OjB9fSx7fV0sNzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuc3RlcHM7ZnVuY3Rpb24gbCh0LGUscil7ZnVuY3Rpb24gbyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYSxyLGkpfWZvcih2YXIgcz1pKHQsZSx7bmFtZToic3RlcHMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSksbD0wLHU9MDt1PHMubGVuZ3RoO3UrKylzW3VdLnZpc2libGUmJmwrKztpZihsPDI/ZS52aXNpYmxlPSExOm8oInZpc2libGUiKSl7ZS5fc3RlcENvdW50PWw7dmFyIGY9ZS5fdmlzaWJsZVN0ZXBzPW4uZmlsdGVyVmlzaWJsZShzKTsoc1tvKCJhY3RpdmUiKV18fHt9KS52aXNpYmxlfHwoZS5hY3RpdmU9ZlswXS5faW5kZXgpLG8oIngiKSxvKCJ5Iiksbi5ub25lT3JBbGwodCxlLFsieCIsInkiXSksbygieGFuY2hvciIpLG8oInlhbmNob3IiKSxvKCJsZW4iKSxvKCJsZW5tb2RlIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJjdXJyZW50dmFsdWUudmlzaWJsZSIpJiYobygiY3VycmVudHZhbHVlLnhhbmNob3IiKSxvKCJjdXJyZW50dmFsdWUucHJlZml4IiksbygiY3VycmVudHZhbHVlLnN1ZmZpeCIpLG8oImN1cnJlbnR2YWx1ZS5vZmZzZXQiKSxuLmNvZXJjZUZvbnQobywiY3VycmVudHZhbHVlLmZvbnQiLGUuZm9udCkpLG8oInRyYW5zaXRpb24uZHVyYXRpb24iKSxvKCJ0cmFuc2l0aW9uLmVhc2luZyIpLG8oImJnY29sb3IiKSxvKCJhY3RpdmViZ2NvbG9yIiksbygiYm9yZGVyY29sb3IiKSxvKCJib3JkZXJ3aWR0aCIpLG8oInRpY2tsZW4iKSxvKCJ0aWNrd2lkdGgiKSxvKCJ0aWNrY29sb3IiKSxvKCJtaW5vcnRpY2tsZW4iKX19ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pZigic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpP3IoInZpc2libGUiKTplLnZpc2libGU9ITEpe3IoIm1ldGhvZCIpLHIoImFyZ3MiKTt2YXIgaT1yKCJsYWJlbCIsInN0ZXAtIitlLl9pbmRleCk7cigidmFsdWUiLGkpLHIoImV4ZWN1dGUiKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aSh0LGUse25hbWU6byxoYW5kbGVJdGVtRGVmYXVsdHM6bH0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4vYXR0cmlidXRlcyI6NzMyLCIuL2NvbnN0YW50cyI6NzMzfV0sNzM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIiksYT10KCIuLi9jb2xvciIpLG89dCgiLi4vZHJhd2luZyIpLHM9dCgiLi4vLi4vbGliIiksbD1zLnN0clRyYW5zbGF0ZSxjPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHU9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLGY9dCgiLi9jb25zdGFudHMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSxwPWguTElORV9TUEFDSU5HLGQ9aC5GUk9NX1RMLG09aC5GUk9NX0JSO2Z1bmN0aW9uIGcodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiB2KHQpe3JldHVybiB0Ll9pbmRleH1mdW5jdGlvbiB5KHQsZSl7dmFyIHI9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5sYWJlbEdyb3VwQ2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKTtyLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmxhYmVsR3JvdXBDbGFzcywhMCk7dmFyIGE9MCxsPTA7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1fKG4uc2VsZWN0KHRoaXMpLHtzdGVwOnR9LGUpLm5vZGUoKTtpZihyKXt2YXIgaT1vLmJCb3gocik7bD1NYXRoLm1heChsLGkuaGVpZ2h0KSxhPU1hdGgubWF4KGEsaS53aWR0aCl9fSkpLHIucmVtb3ZlKCk7dmFyIHU9ZS5fZGltcz17fTt1LmlucHV0QXJlYVdpZHRoPU1hdGgubWF4KGYucmFpbFdpZHRoLGYuZ3JpcEhlaWdodCk7dmFyIGg9dC5fZnVsbExheW91dC5fc2l6ZTt1Lmx4PWgubCtoLncqZS54LHUubHk9aC50K2guaCooMS1lLnkpLCJmcmFjdGlvbiI9PT1lLmxlbm1vZGU/dS5vdXRlckxlbmd0aD1NYXRoLnJvdW5kKGgudyplLmxlbik6dS5vdXRlckxlbmd0aD1lLmxlbix1LmlucHV0QXJlYVN0YXJ0PTAsdS5pbnB1dEFyZWFMZW5ndGg9TWF0aC5yb3VuZCh1Lm91dGVyTGVuZ3RoLWUucGFkLmwtZS5wYWQucik7dmFyIHA9KHUuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQpLyhlLl9zdGVwQ291bnQtMSksdj1hK2YubGFiZWxQYWRkaW5nO2lmKHUubGFiZWxTdHJpZGU9TWF0aC5tYXgoMSxNYXRoLmNlaWwodi9wKSksdS5sYWJlbEhlaWdodD1sLHUuY3VycmVudFZhbHVlTWF4V2lkdGg9MCx1LmN1cnJlbnRWYWx1ZUhlaWdodD0wLHUuY3VycmVudFZhbHVlVG90YWxIZWlnaHQ9MCx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPTEsZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIHk9by50ZXN0ZXIuYXBwZW5kKCJnIik7ci5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj14KHksZSx0LmxhYmVsKSxuPXIubm9kZSgpJiZvLmJCb3goci5ub2RlKCkpfHx7d2lkdGg6MCxoZWlnaHQ6MH0saT1jLmxpbmVDb3VudChyKTt1LmN1cnJlbnRWYWx1ZU1heFdpZHRoPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4V2lkdGgsTWF0aC5jZWlsKG4ud2lkdGgpKSx1LmN1cnJlbnRWYWx1ZUhlaWdodD1NYXRoLm1heCh1LmN1cnJlbnRWYWx1ZUhlaWdodCxNYXRoLmNlaWwobi5oZWlnaHQpKSx1LmN1cnJlbnRWYWx1ZU1heExpbmVzPU1hdGgubWF4KHUuY3VycmVudFZhbHVlTWF4TGluZXMsaSl9KSksdS5jdXJyZW50VmFsdWVUb3RhbEhlaWdodD11LmN1cnJlbnRWYWx1ZUhlaWdodCtlLmN1cnJlbnR2YWx1ZS5vZmZzZXQseS5yZW1vdmUoKX11LmhlaWdodD11LmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0K2YudGlja09mZnNldCtlLnRpY2tsZW4rZi5sYWJlbE9mZnNldCt1LmxhYmVsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYjt2YXIgYj0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYodS5seC09dS5vdXRlckxlbmd0aCxiPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJih1Lmx4LT11Lm91dGVyTGVuZ3RoLzIsYj0iY2VudGVyIik7dmFyIHc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHUubHktPXUuaGVpZ2h0LHc9ImJvdHRvbSIpLHMuaXNNaWRkbGVBbmNob3IoZSkmJih1Lmx5LT11LmhlaWdodC8yLHc9Im1pZGRsZSIpLHUub3V0ZXJMZW5ndGg9TWF0aC5jZWlsKHUub3V0ZXJMZW5ndGgpLHUuaGVpZ2h0PU1hdGguY2VpbCh1LmhlaWdodCksdS5seD1NYXRoLnJvdW5kKHUubHgpLHUubHk9TWF0aC5yb3VuZCh1Lmx5KTt2YXIgVD17eTplLnksYjp1LmhlaWdodCptW3ddLHQ6dS5oZWlnaHQqZFt3XX07ImZyYWN0aW9uIj09PWUubGVubW9kZT8oVC5sPTAsVC54bD1lLngtZS5sZW4qZFtiXSxULnI9MCxULnhyPWUueCtlLmxlbiptW2JdKTooVC54PWUueCxULmw9dS5vdXRlckxlbmd0aCpkW2JdLFQucj11Lm91dGVyTGVuZ3RoKm1bYl0pLGkuYXV0b01hcmdpbih0LGcoZSksVCl9ZnVuY3Rpb24geCh0LGUscil7aWYoZS5jdXJyZW50dmFsdWUudmlzaWJsZSl7dmFyIG4saSxhPWUuX2RpbXM7c3dpdGNoKGUuY3VycmVudHZhbHVlLnhhbmNob3Ipe2Nhc2UicmlnaHQiOm49YS5pbnB1dEFyZWFMZW5ndGgtZi5jdXJyZW50VmFsdWVJbnNldC1hLmN1cnJlbnRWYWx1ZU1heFdpZHRoLGk9ImxlZnQiO2JyZWFrO2Nhc2UiY2VudGVyIjpuPS41KmEuaW5wdXRBcmVhTGVuZ3RoLGk9Im1pZGRsZSI7YnJlYWs7ZGVmYXVsdDpuPWYuY3VycmVudFZhbHVlSW5zZXQsaT0ibGVmdCJ9dmFyIGw9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5sYWJlbENsYXNzLChmdW5jdGlvbih0KXt0LmF0dHIoeyJ0ZXh0LWFuY2hvciI6aSwiZGF0YS1ub3RleCI6MX0pfSkpLHU9ZS5jdXJyZW50dmFsdWUucHJlZml4P2UuY3VycmVudHZhbHVlLnByZWZpeDoiIjtpZigic3RyaW5nIj09dHlwZW9mIHIpdSs9cjtlbHNle3ZhciBoPWUuc3RlcHNbZS5hY3RpdmVdLmxhYmVsLGQ9ZS5fZ2QuX2Z1bGxMYXlvdXQuX21ldGE7ZCYmKGg9cy50ZW1wbGF0ZVN0cmluZyhoLGQpKSx1Kz1ofWUuY3VycmVudHZhbHVlLnN1ZmZpeCYmKHUrPWUuY3VycmVudHZhbHVlLnN1ZmZpeCksbC5jYWxsKG8uZm9udCxlLmN1cnJlbnR2YWx1ZS5mb250KS50ZXh0KHUpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsZS5fZ2QpO3ZhciBtPWMubGluZUNvdW50KGwpLGc9KGEuY3VycmVudFZhbHVlTWF4TGluZXMrMS1tKSplLmN1cnJlbnR2YWx1ZS5mb250LnNpemUqcDtyZXR1cm4gYy5wb3NpdGlvblRleHQobCxuLGcpLGx9fWZ1bmN0aW9uIGIodCxlLHIpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuZ3JpcFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLmF0dHIoe3dpZHRoOmYuZ3JpcFdpZHRoLGhlaWdodDpmLmdyaXBIZWlnaHQscng6Zi5ncmlwUmFkaXVzLHJ5OmYuZ3JpcFJhZGl1c30pLmNhbGwoYS5zdHJva2Usci5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsci5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixyLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIF8odCxlLHIpe3ZhciBuPXMuZW5zdXJlU2luZ2xlKHQsInRleHQiLGYubGFiZWxDbGFzcywoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSl9KSksaT1lLnN0ZXAubGFiZWwsYT1yLl9nZC5fZnVsbExheW91dC5fbWV0YTtyZXR1cm4gYSYmKGk9cy50ZW1wbGF0ZVN0cmluZyhpLGEpKSxuLmNhbGwoby5mb250LHIuZm9udCkudGV4dChpKS5jYWxsKGMuY29udmVydFRvVHNwYW5zLHIuX2dkKSxufWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1zLmVuc3VyZVNpbmdsZSh0LCJnIixmLmxhYmVsc0NsYXNzKSxpPWUuX2RpbXMsYT1yLnNlbGVjdEFsbCgiZy4iK2YubGFiZWxHcm91cENsYXNzKS5kYXRhKGkubGFiZWxTdGVwcyk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5sYWJlbEdyb3VwQ2xhc3MsITApLGEuZXhpdCgpLnJlbW92ZSgpLGEuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7ci5jYWxsKF8sdCxlKSxvLnNldFRyYW5zbGF0ZShyLEUoZSx0LmZyYWN0aW9uKSxmLnRpY2tPZmZzZXQrZS50aWNrbGVuK2UuZm9udC5zaXplKnArZi5sYWJlbE9mZnNldCtpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBUKHQsZSxyLG4saSl7dmFyIGE9TWF0aC5yb3VuZChuKihyLl9zdGVwQ291bnQtMSkpLG89ci5fdmlzaWJsZVN0ZXBzW2FdLl9pbmRleDtvIT09ci5hY3RpdmUmJmsodCxlLHIsbywhMCxpKX1mdW5jdGlvbiBrKHQsZSxyLG4sYSxvKXt2YXIgcz1yLmFjdGl2ZTtyLmFjdGl2ZT1uLHUodC5sYXlvdXQsZi5uYW1lLHIpLmFwcGx5VXBkYXRlKCJhY3RpdmUiLG4pO3ZhciBsPXIuc3RlcHNbci5hY3RpdmVdO2UuY2FsbChTLHIsbyksZS5jYWxsKHgsciksdC5lbWl0KCJwbG90bHlfc2xpZGVyY2hhbmdlIix7c2xpZGVyOnIsc3RlcDpyLnN0ZXBzW3IuYWN0aXZlXSxpbnRlcmFjdGlvbjphLHByZXZpb3VzQWN0aXZlOnN9KSxsJiZsLm1ldGhvZCYmYSYmKGUuX25leHRNZXRob2Q/KGUuX25leHRNZXRob2Quc3RlcD1sLGUuX25leHRNZXRob2QuZG9DYWxsYmFjaz1hLGUuX25leHRNZXRob2QuZG9UcmFuc2l0aW9uPW8pOihlLl9uZXh0TWV0aG9kPXtzdGVwOmwsZG9DYWxsYmFjazphLGRvVHJhbnNpdGlvbjpvfSxlLl9uZXh0TWV0aG9kUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5fbmV4dE1ldGhvZC5zdGVwO3IubWV0aG9kJiYoci5leGVjdXRlJiZpLmV4ZWN1dGVBUElDb21tYW5kKHQsci5tZXRob2Qsci5hcmdzKSxlLl9uZXh0TWV0aG9kPW51bGwsZS5fbmV4dE1ldGhvZFJhZj1udWxsKX0pKSkpfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBpPXIubm9kZSgpLG89bi5zZWxlY3QoZSk7ZnVuY3Rpb24gcygpe3JldHVybiByLmRhdGEoKVswXX1mdW5jdGlvbiBsKCl7dmFyIHQ9cygpO2UuZW1pdCgicGxvdGx5X3NsaWRlcnN0YXJ0Iix7c2xpZGVyOnR9KTt2YXIgbD1yLnNlbGVjdCgiLiIrZi5ncmlwUmVjdENsYXNzKTtuLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLG4uZXZlbnQucHJldmVudERlZmF1bHQoKSxsLmNhbGwoYS5maWxsLHQuYWN0aXZlYmdjb2xvcik7dmFyIGM9TCh0LG4ubW91c2UoaSlbMF0pO2Z1bmN0aW9uIHUoKXt2YXIgdD1zKCksYT1MKHQsbi5tb3VzZShpKVswXSk7VChlLHIsdCxhLCExKX1mdW5jdGlvbiBoKCl7dmFyIHQ9cygpO3QuX2RyYWdnaW5nPSExLGwuY2FsbChhLmZpbGwsdC5iZ2NvbG9yKSxvLm9uKCJtb3VzZXVwIixudWxsKSxvLm9uKCJtb3VzZW1vdmUiLG51bGwpLG8ub24oInRvdWNoZW5kIixudWxsKSxvLm9uKCJ0b3VjaG1vdmUiLG51bGwpLGUuZW1pdCgicGxvdGx5X3NsaWRlcmVuZCIse3NsaWRlcjp0LHN0ZXA6dC5zdGVwc1t0LmFjdGl2ZV19KX1UKGUscix0LGMsITApLHQuX2RyYWdnaW5nPSEwLG8ub24oIm1vdXNlbW92ZSIsdSksby5vbigidG91Y2htb3ZlIix1KSxvLm9uKCJtb3VzZXVwIixoKSxvLm9uKCJ0b3VjaGVuZCIsaCl9dC5vbigibW91c2Vkb3duIixsKSx0Lm9uKCJ0b3VjaHN0YXJ0IixsKX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoInJlY3QuIitmLnRpY2tSZWN0Q2xhc3MpLmRhdGEoZS5fdmlzaWJsZVN0ZXBzKSxpPWUuX2RpbXM7ci5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmNsYXNzZWQoZi50aWNrUmVjdENsYXNzLCEwKSxyLmV4aXQoKS5yZW1vdmUoKSxyLmF0dHIoe3dpZHRoOmUudGlja3dpZHRoKyJweCIsInNoYXBlLXJlbmRlcmluZyI6ImNyaXNwRWRnZXMifSksci5lYWNoKChmdW5jdGlvbih0LHIpe3ZhciBzPXIlaS5sYWJlbFN0cmlkZT09MCxsPW4uc2VsZWN0KHRoaXMpO2wuYXR0cih7aGVpZ2h0OnM/ZS50aWNrbGVuOmUubWlub3J0aWNrbGVufSkuY2FsbChhLmZpbGwsZS50aWNrY29sb3IpLG8uc2V0VHJhbnNsYXRlKGwsRShlLHIvKGUuX3N0ZXBDb3VudC0xKSktLjUqZS50aWNrd2lkdGgsKHM/Zi50aWNrT2Zmc2V0OmYubWlub3JUaWNrT2Zmc2V0KStpLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KX0pKX1mdW5jdGlvbiBTKHQsZSxyKXtmb3IodmFyIG49dC5zZWxlY3QoInJlY3QuIitmLmdyaXBSZWN0Q2xhc3MpLGk9MCxhPTA7YTxlLl9zdGVwQ291bnQ7YSsrKWlmKGUuX3Zpc2libGVTdGVwc1thXS5faW5kZXg9PT1lLmFjdGl2ZSl7aT1hO2JyZWFrfXZhciBvPUUoZSxpLyhlLl9zdGVwQ291bnQtMSkpO2lmKCFlLl9pbnZva2luZ0NvbW1hbmQpe3ZhciBzPW47ciYmZS50cmFuc2l0aW9uLmR1cmF0aW9uPjAmJihzPXMudHJhbnNpdGlvbigpLmR1cmF0aW9uKGUudHJhbnNpdGlvbi5kdXJhdGlvbikuZWFzZShlLnRyYW5zaXRpb24uZWFzaW5nKSkscy5hdHRyKCJ0cmFuc2Zvcm0iLGwoby0uNSpmLmdyaXBXaWR0aCxlLl9kaW1zLmN1cnJlbnRWYWx1ZVRvdGFsSGVpZ2h0KSl9fWZ1bmN0aW9uIEUodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiByLmlucHV0QXJlYVN0YXJ0K2Yuc3RlcEluc2V0KyhyLmlucHV0QXJlYUxlbmd0aC0yKmYuc3RlcEluc2V0KSpNYXRoLm1pbigxLE1hdGgubWF4KDAsZSkpfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj10Ll9kaW1zO3JldHVybiBNYXRoLm1pbigxLE1hdGgubWF4KDAsKGUtZi5zdGVwSW5zZXQtci5pbnB1dEFyZWFTdGFydCkvKHIuaW5wdXRBcmVhTGVuZ3RoLTIqZi5zdGVwSW5zZXQtMipyLmlucHV0QXJlYVN0YXJ0KSkpfWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuPXIuX2RpbXMsaT1zLmVuc3VyZVNpbmdsZSh0LCJyZWN0IixmLnJhaWxUb3VjaFJlY3RDbGFzcywoZnVuY3Rpb24obil7bi5jYWxsKEEsZSx0LHIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpO2kuYXR0cih7d2lkdGg6bi5pbnB1dEFyZWFMZW5ndGgsaGVpZ2h0Ok1hdGgubWF4KG4uaW5wdXRBcmVhV2lkdGgsZi50aWNrT2Zmc2V0K3IudGlja2xlbituLmxhYmVsSGVpZ2h0KX0pLmNhbGwoYS5maWxsLHIuYmdjb2xvcikuYXR0cigib3BhY2l0eSIsMCksby5zZXRUcmFuc2xhdGUoaSwwLG4uY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWZ1bmN0aW9uIFAodCxlKXt2YXIgcj1lLl9kaW1zLG49ci5pbnB1dEFyZWFMZW5ndGgtMipmLnJhaWxJbnNldCxpPXMuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYucmFpbFJlY3RDbGFzcyk7aS5hdHRyKHt3aWR0aDpuLGhlaWdodDpmLnJhaWxXaWR0aCxyeDpmLnJhaWxSYWRpdXMscnk6Zi5yYWlsUmFkaXVzLCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpLG8uc2V0VHJhbnNsYXRlKGksZi5yYWlsSW5zZXQsLjUqKHIuaW5wdXRBcmVhV2lkdGgtZi5yYWlsV2lkdGgpK3IuY3VycmVudFZhbHVlVG90YWxIZWlnaHQpfWUuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFtmLm5hbWVdLG49W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldO2EudmlzaWJsZSYmKGEuX2dkPWUsbi5wdXNoKGEpKX1yZXR1cm4gbn0oZSx0KSxhPWUuX2luZm9sYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7ZnVuY3Rpb24gcyhlKXtlLl9jb21tYW5kT2JzZXJ2ZXImJihlLl9jb21tYW5kT2JzZXJ2ZXIucmVtb3ZlKCksZGVsZXRlIGUuX2NvbW1hbmRPYnNlcnZlciksaS5hdXRvTWFyZ2luKHQsZyhlKSl9aWYoYS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJldy1yZXNpemUiKSxhLmV4aXQoKS5lYWNoKChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmVhY2gocyl9KSkucmVtb3ZlKCksMCE9PXIubGVuZ3RoKXt2YXIgbD1hLnNlbGVjdEFsbCgiZy4iK2YuZ3JvdXBDbGFzc05hbWUpLmRhdGEocix2KTtsLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLmdyb3VwQ2xhc3NOYW1lLCEwKSxsLmV4aXQoKS5lYWNoKHMpLnJlbW92ZSgpO2Zvcih2YXIgYz0wO2M8ci5sZW5ndGg7YysrKXt2YXIgdT1yW2NdO3kodCx1KX1sLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpOyFmdW5jdGlvbih0KXt2YXIgZT10Ll9kaW1zO2UubGFiZWxTdGVwcz1bXTtmb3IodmFyIHI9dC5fc3RlcENvdW50LG49MDtuPHI7bis9ZS5sYWJlbFN0cmlkZSllLmxhYmVsU3RlcHMucHVzaCh7ZnJhY3Rpb246bi8oci0xKSxzdGVwOnQuX3Zpc2libGVTdGVwc1tuXX0pfShlKSxpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5fdmlzaWJsZVN0ZXBzLChmdW5jdGlvbihlKXt2YXIgbj1yLmRhdGEoKVswXTtuLmFjdGl2ZSE9PWUuaW5kZXgmJihuLl9kcmFnZ2luZ3x8ayh0LHIsbixlLmluZGV4LCExLCEwKSl9KSksZnVuY3Rpb24odCxlLHIpeyhyLnN0ZXBzW3IuYWN0aXZlXXx8e30pLnZpc2libGV8fChyLmFjdGl2ZT1yLl92aXNpYmxlU3RlcHNbMF0uX2luZGV4KTtlLmNhbGwoeCxyKS5jYWxsKFAscikuY2FsbCh3LHIpLmNhbGwoTSxyKS5jYWxsKEMsdCxyKS5jYWxsKGIsdCxyKTt2YXIgbj1yLl9kaW1zO28uc2V0VHJhbnNsYXRlKGUsbi5seCtyLnBhZC5sLG4ubHkrci5wYWQudCksZS5jYWxsKFMsciwhMSksZS5jYWxsKHgscil9KHQsbi5zZWxlY3QodGhpcyksZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi9jb2xvciI6NjM5LCIuLi9kcmF3aW5nIjo2NjEsIi4vY29uc3RhbnRzIjo3MzMsIkBwbG90bHkvZDMiOjU4fV0sNzM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJjb21wb25lbnQiLG5hbWU6bi5uYW1lLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGRyYXc6dCgiLi9kcmF3Iil9fSx7Ii4vYXR0cmlidXRlcyI6NzMyLCIuL2NvbnN0YW50cyI6NzMzLCIuL2RlZmF1bHRzIjo3MzQsIi4vZHJhdyI6NzM1fV0sNzM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi9kcmF3aW5nIiksdT10KCIuLi9jb2xvciIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikscD10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuT1BQT1NJVEVfU0lERSxkPS8gW1hZXVswLTldKiAvO2UuZXhwb3J0cz17ZHJhdzpmdW5jdGlvbih0LGUscil7dmFyIG0sZz1yLnByb3BDb250YWluZXIsdj1yLnByb3BOYW1lLHk9ci5wbGFjZWhvbGRlcix4PXIudHJhY2VJbmRleCxiPXIuYXZvaWR8fHt9LF89ci5hdHRyaWJ1dGVzLHc9ci50cmFuc2Zvcm0sVD1yLmNvbnRhaW5lckdyb3VwLGs9dC5fZnVsbExheW91dCxBPTEsTT0hMSxTPWcudGl0bGUsRT0oUyYmUy50ZXh0P1MudGV4dDoiIikudHJpbSgpLEw9UyYmUy5mb250P1MuZm9udDp7fSxDPUwuZmFtaWx5LFA9TC5zaXplLEk9TC5jb2xvcjsidGl0bGUudGV4dCI9PT12P209InRpdGxlVGV4dCI6LTEhPT12LmluZGV4T2YoImF4aXMiKT9tPSJheGlzVGl0bGVUZXh0Ijp2LmluZGV4T2YoITApJiYobT0iY29sb3JiYXJUaXRsZVRleHQiKTt2YXIgTz10Ll9jb250ZXh0LmVkaXRzW21dOyIiPT09RT9BPTA6RS5yZXBsYWNlKGQsIiAlICIpPT09eS5yZXBsYWNlKGQsIiAlICIpJiYoQT0uMixNPSEwLE98fChFPSIiKSksci5fbWV0YT9FPXMudGVtcGxhdGVTdHJpbmcoRSxyLl9tZXRhKTprLl9tZXRhJiYoRT1zLnRlbXBsYXRlU3RyaW5nKEUsay5fbWV0YSkpO3ZhciB6PUV8fE87VHx8KFQ9cy5lbnN1cmVTaW5nbGUoay5faW5mb2xheWVyLCJnIiwiZy0iK2UpKTt2YXIgRD1ULnNlbGVjdEFsbCgidGV4dCIpLmRhdGEoej9bMF06W10pO2lmKEQuZW50ZXIoKS5hcHBlbmQoInRleHQiKSxELnRleHQoRSkuYXR0cigiY2xhc3MiLGUpLEQuZXhpdCgpLnJlbW92ZSgpLCF6KXJldHVybiBUO2Z1bmN0aW9uIFIodCl7cy5zeW5jT3JBc3luYyhbRixCXSx0KX1mdW5jdGlvbiBGKGUpe3ZhciByO3JldHVybiB3PyhyPSIiLHcucm90YXRlJiYocis9InJvdGF0ZSgiK1t3LnJvdGF0ZSxfLngsXy55XSsiKSIpLHcub2Zmc2V0JiYocis9bCgwLHcub2Zmc2V0KSkpOnI9bnVsbCxlLmF0dHIoInRyYW5zZm9ybSIsciksZS5zdHlsZSh7ImZvbnQtZmFtaWx5IjpDLCJmb250LXNpemUiOm4ucm91bmQoUCwyKSsicHgiLGZpbGw6dS5yZ2IoSSksb3BhY2l0eTpBKnUub3BhY2l0eShJKSwiZm9udC13ZWlnaHQiOmEuZm9udFdlaWdodH0pLmF0dHIoXykuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KSxhLnByZXZpb3VzUHJvbWlzZXModCl9ZnVuY3Rpb24gQih0KXt2YXIgZT1uLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtpZihiJiZiLnNlbGVjdGlvbiYmYi5zaWRlJiZFKXtlLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIHI9cFtiLnNpZGVdLGE9ImxlZnQiPT09Yi5zaWRlfHwidG9wIj09PWIuc2lkZT8tMToxLG89aShiLnBhZCk/Yi5wYWQ6Mix1PWMuYkJveChlLm5vZGUoKSksZj17bGVmdDowLHRvcDowLHJpZ2h0Omsud2lkdGgsYm90dG9tOmsuaGVpZ2h0fSxoPWIubWF4U2hpZnR8fGEqKGZbYi5zaWRlXS11W2Iuc2lkZV0pLGQ9MDtpZihoPDApZD1oO2Vsc2V7dmFyIG09Yi5vZmZzZXRMZWZ0fHwwLGc9Yi5vZmZzZXRUb3B8fDA7dS5sZWZ0LT1tLHUucmlnaHQtPW0sdS50b3AtPWcsdS5ib3R0b20tPWcsYi5zZWxlY3Rpb24uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1jLmJCb3godGhpcyk7cy5iQm94SW50ZXJzZWN0KHUsdCxvKSYmKGQ9TWF0aC5tYXgoZCxhKih0W2Iuc2lkZV0tdVtyXSkrbykpfSkpLGQ9TWF0aC5taW4oaCxkKX1pZihkPjB8fGg8MCl7dmFyIHY9e2xlZnQ6Wy1kLDBdLHJpZ2h0OltkLDBdLHRvcDpbMCwtZF0sYm90dG9tOlswLGRdfVtiLnNpZGVdO2UuYXR0cigidHJhbnNmb3JtIixsKHZbMF0sdlsxXSkpfX19cmV0dXJuIEQuY2FsbChSKSxPJiYoRT9ELm9uKCIub3BhY2l0eSIsbnVsbCk6KEE9MCxNPSEwLEQudGV4dCh5KS5vbigibW91c2VvdmVyLm9wYWNpdHkiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihoLlNIT1dfUExBQ0VIT0xERVIpLnN0eWxlKCJvcGFjaXR5IiwxKX0pKS5vbigibW91c2VvdXQub3BhY2l0eSIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKGguSElERV9QTEFDRUhPTERFUikuc3R5bGUoIm9wYWNpdHkiLDApfSkpKSxELmNhbGwoZi5tYWtlRWRpdGFibGUse2dkOnR9KS5vbigiZWRpdCIsKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PXg/by5jYWxsKCJfZ3VpUmVzdHlsZSIsdCx2LGUseCk6by5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsdixlKX0pKS5vbigiY2FuY2VsIiwoZnVuY3Rpb24oKXt0aGlzLnRleHQodGhpcy5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpLmNhbGwoUil9KSkub24oImlucHV0IiwoZnVuY3Rpb24odCl7dGhpcy50ZXh0KHR8fCIgIikuY2FsbChmLnBvc2l0aW9uVGV4dCxfLngsXy55KX0pKSksRC5jbGFzc2VkKCJqcy1wbGFjZWhvbGRlciIsTSksVH19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NvbG9yIjo2MzksIi4uL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksYz1sKCJidXR0b24iLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIn0sbWV0aG9kOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyZXN0eWxlIiwicmVsYXlvdXQiLCJhbmltYXRlIiwidXBkYXRlIiwic2tpcCJdLGRmbHQ6InJlc3R5bGUifSxhcmdzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGFyZ3MyOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGl0ZW1zOlt7dmFsVHlwZToiYW55In0se3ZhbFR5cGU6ImFueSJ9LHt2YWxUeXBlOiJhbnkifV19LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGV4ZWN1dGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9fSk7ZS5leHBvcnRzPW8obCgidXBkYXRlbWVudSIse19hcnJheUF0dHJSZWdleHBzOlsvXnVwZGF0ZW1lbnVzXFsoMHxbMS05XVswLTldKylcXVwuYnV0dG9ucy9dLHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4ifSx0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJkcm9wZG93biIsImJ1dHRvbnMiXSxkZmx0OiJkcm9wZG93biJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGVmdCIsInJpZ2h0IiwidXAiLCJkb3duIl0sZGZsdDoiZG93biJ9LGFjdGl2ZTp7dmFsVHlwZToiaW50ZWdlciIsbWluOi0xLGRmbHQ6MH0sc2hvd2FjdGl2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sYnV0dG9uczpjLHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOi0yLG1heDozLGRmbHQ6LS4wNX0seGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYXV0byIsImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGRmbHQ6InJpZ2h0In0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTIsbWF4OjMsZGZsdDoxfSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZGZsdDoidG9wIn0scGFkOmEocyh7ZWRpdFR5cGU6ImFycmF5ZHJhdyJ9KSx7fSksZm9udDpuKHt9KSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LGJvcmRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmJvcmRlckxpbmV9LGJvcmRlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiYXJyYXlkcmF3In19KSwiYXJyYXlkcmF3IiwiZnJvbS1yb290Iil9LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3BhZF9hdHRyaWJ1dGVzIjo4ODksIi4uL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOH1dLDczOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e25hbWU6InVwZGF0ZW1lbnVzIixjb250YWluZXJDbGFzc05hbWU6InVwZGF0ZW1lbnUtY29udGFpbmVyIixoZWFkZXJHcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXItZ3JvdXAiLGhlYWRlckNsYXNzTmFtZToidXBkYXRlbWVudS1oZWFkZXIiLGhlYWRlckFycm93Q2xhc3NOYW1lOiJ1cGRhdGVtZW51LWhlYWRlci1hcnJvdyIsZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZToidXBkYXRlbWVudS1kcm9wZG93bi1idXR0b24tZ3JvdXAiLGRyb3Bkb3duQnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWRyb3Bkb3duLWJ1dHRvbiIsYnV0dG9uQ2xhc3NOYW1lOiJ1cGRhdGVtZW51LWJ1dHRvbiIsaXRlbVJlY3RDbGFzc05hbWU6InVwZGF0ZW1lbnUtaXRlbS1yZWN0IixpdGVtVGV4dENsYXNzTmFtZToidXBkYXRlbWVudS1pdGVtLXRleHQiLG1lbnVJbmRleEF0dHJOYW1lOiJ1cGRhdGVtZW51LWFjdGl2ZS1pbmRleCIsYXV0b01hcmdpbklkUm9vdDoidXBkYXRlbWVudS0iLGJsYW5rSGVhZGVyT3B0czp7bGFiZWw6IiAgIn0sbWluV2lkdGg6MzAsbWluSGVpZ2h0OjMwLHRleHRQYWRYOjI0LGFycm93UGFkWDoxNixyeDoyLHJ5OjIsdGV4dE9mZnNldFg6MTIsdGV4dE9mZnNldFk6MyxhcnJvd09mZnNldFg6NCxnYXBCdXR0b25IZWFkZXI6NSxnYXBCdXR0b246MixhY3RpdmVDb2xvcjoiI0Y0RkFGRiIsaG92ZXJDb2xvcjoiI0Y0RkFGRiIsYXJyb3dTeW1ib2w6e2xlZnQ6Ilx1MjVjNCIscmlnaHQ6Ilx1MjViYSIsdXA6Ilx1MjViMiIsZG93bjoiXHUyNWJjIn19fSx7fV0sNzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4vY29uc3RhbnRzIikubmFtZSxzPWEuYnV0dG9ucztmdW5jdGlvbiBsKHQsZSxyKXtmdW5jdGlvbiBvKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9bygidmlzaWJsZSIsaSh0LGUse25hbWU6ImJ1dHRvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czpjfSkubGVuZ3RoPjApJiYobygiYWN0aXZlIiksbygiZGlyZWN0aW9uIiksbygidHlwZSIpLG8oInNob3dhY3RpdmUiKSxvKCJ4IiksbygieSIpLG4ubm9uZU9yQWxsKHQsZSxbIngiLCJ5Il0pLG8oInhhbmNob3IiKSxvKCJ5YW5jaG9yIiksbygicGFkLnQiKSxvKCJwYWQuciIpLG8oInBhZC5iIiksbygicGFkLmwiKSxuLmNvZXJjZUZvbnQobywiZm9udCIsci5mb250KSxvKCJiZ2NvbG9yIixyLnBhcGVyX2JnY29sb3IpLG8oImJvcmRlcmNvbG9yIiksbygiYm9yZGVyd2lkdGgiKSl9ZnVuY3Rpb24gYyh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1yKCJ2aXNpYmxlIiwic2tpcCI9PT10Lm1ldGhvZHx8QXJyYXkuaXNBcnJheSh0LmFyZ3MpKSYmKHIoIm1ldGhvZCIpLHIoImFyZ3MiKSxyKCJhcmdzMiIpLHIoImxhYmVsIikscigiZXhlY3V0ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpKHQsZSx7bmFtZTpvLGhhbmRsZUl0ZW1EZWZhdWx0czpsfSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMiwiLi9hdHRyaWJ1dGVzIjo3MzgsIi4vY29uc3RhbnRzIjo3Mzl9XSw3NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uL2NvbG9yIiksbz10KCIuLi9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLmFycmF5RWRpdG9yLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkxJTkVfU1BBQ0lORyxmPXQoIi4vY29uc3RhbnRzIiksaD10KCIuL3Njcm9sbGJveCIpO2Z1bmN0aW9uIHAodCl7cmV0dXJuIHQuX2luZGV4fWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpPT09ZS5faW5kZXh9ZnVuY3Rpb24gbSh0LGUscixuLGksYSxvLHMpe2UuYWN0aXZlPW8sYyh0LmxheW91dCxmLm5hbWUsZSkuYXBwbHlVcGRhdGUoImFjdGl2ZSIsbyksImJ1dHRvbnMiPT09ZS50eXBlP3YodCxuLG51bGwsbnVsbCxlKToiZHJvcGRvd24iPT09ZS50eXBlJiYoaS5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsIi0xIiksZyh0LG4saSxhLGUpLHN8fHYodCxuLGksYSxlKSl9ZnVuY3Rpb24gZyh0LGUscixuLGkpe3ZhciBhPXMuZW5zdXJlU2luZ2xlKGUsImciLGYuaGVhZGVyQ2xhc3NOYW1lLChmdW5jdGlvbih0KXt0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpfSkpLGw9aS5fZGltcyxjPWkuYWN0aXZlLHU9aS5idXR0b25zW2NdfHxmLmJsYW5rSGVhZGVyT3B0cyxoPXt5OmkucGFkLnQseVBhZDowLHg6aS5wYWQubCx4UGFkOjAsaW5kZXg6MH0scD17d2lkdGg6bC5oZWFkZXJXaWR0aCxoZWlnaHQ6bC5oZWFkZXJIZWlnaHR9O2EuY2FsbCh5LGksdSx0KS5jYWxsKE0saSxoLHApLHMuZW5zdXJlU2luZ2xlKGUsInRleHQiLGYuaGVhZGVyQXJyb3dDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cigidGV4dC1hbmNob3IiLCJlbmQiKS5jYWxsKG8uZm9udCxpLmZvbnQpLnRleHQoZi5hcnJvd1N5bWJvbFtpLmRpcmVjdGlvbl0pfSkpLmF0dHIoe3g6bC5oZWFkZXJXaWR0aC1mLmFycm93T2Zmc2V0WCtpLnBhZC5sLHk6bC5oZWFkZXJIZWlnaHQvMitmLnRleHRPZmZzZXRZK2kucGFkLnR9KSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7ci5jYWxsKFMsU3RyaW5nKGQocixpKT8tMTppLl9pbmRleCkpLHYodCxlLHIsbixpKX0pKSxhLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2EuY2FsbCh3KX0pKSxhLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7YS5jYWxsKFQsaSl9KSksby5zZXRUcmFuc2xhdGUoZSxsLmx4LGwubHkpfWZ1bmN0aW9uIHYodCxlLHIsYSxvKXtyfHwocj1lKS5hdHRyKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpO3ZhciBsPWZ1bmN0aW9uKHQpe3JldHVybi0xPT0rdC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUpfShyKSYmImJ1dHRvbnMiIT09by50eXBlP1tdOm8uYnV0dG9ucyxjPSJkcm9wZG93biI9PT1vLnR5cGU/Zi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZTpmLmJ1dHRvbkNsYXNzTmFtZSx1PXIuc2VsZWN0QWxsKCJnLiIrYykuZGF0YShzLmZpbHRlclZpc2libGUobCkpLGg9dS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoYywhMCkscD11LmV4aXQoKTsiZHJvcGRvd24iPT09by50eXBlPyhoLmF0dHIoIm9wYWNpdHkiLCIwIikudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIxIikscC50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5yZW1vdmUoKSk6cC5yZW1vdmUoKTt2YXIgZD0wLGc9MCx2PW8uX2RpbXMseD0tMSE9PVsidXAiLCJkb3duIl0uaW5kZXhPZihvLmRpcmVjdGlvbik7ImRyb3Bkb3duIj09PW8udHlwZSYmKHg/Zz12LmhlYWRlckhlaWdodCtmLmdhcEJ1dHRvbkhlYWRlcjpkPXYuaGVhZGVyV2lkdGgrZi5nYXBCdXR0b25IZWFkZXIpLCJkcm9wZG93biI9PT1vLnR5cGUmJiJ1cCI9PT1vLmRpcmVjdGlvbiYmKGc9LWYuZ2FwQnV0dG9uSGVhZGVyK2YuZ2FwQnV0dG9uLXYub3BlbkhlaWdodCksImRyb3Bkb3duIj09PW8udHlwZSYmImxlZnQiPT09by5kaXJlY3Rpb24mJihkPS1mLmdhcEJ1dHRvbkhlYWRlcitmLmdhcEJ1dHRvbi12Lm9wZW5XaWR0aCk7dmFyIGI9e3g6di5seCtkK28ucGFkLmwseTp2Lmx5K2crby5wYWQudCx5UGFkOmYuZ2FwQnV0dG9uLHhQYWQ6Zi5nYXBCdXR0b24saW5kZXg6MH0saz17bDpiLngrby5ib3JkZXJ3aWR0aCx0OmIueStvLmJvcmRlcndpZHRofTt1LmVhY2goKGZ1bmN0aW9uKHMsbCl7dmFyIGM9bi5zZWxlY3QodGhpcyk7Yy5jYWxsKHksbyxzLHQpLmNhbGwoTSxvLGIpLGMub24oImNsaWNrIiwoZnVuY3Rpb24oKXtuLmV2ZW50LmRlZmF1bHRQcmV2ZW50ZWR8fChzLmV4ZWN1dGUmJihzLmFyZ3MyJiZvLmFjdGl2ZT09PWw/KG0odCxvLDAsZSxyLGEsLTEpLGkuZXhlY3V0ZUFQSUNvbW1hbmQodCxzLm1ldGhvZCxzLmFyZ3MyKSk6KG0odCxvLDAsZSxyLGEsbCksaS5leGVjdXRlQVBJQ29tbWFuZCh0LHMubWV0aG9kLHMuYXJncykpKSx0LmVtaXQoInBsb3RseV9idXR0b25jbGlja2VkIix7bWVudTpvLGJ1dHRvbjpzLGFjdGl2ZTpvLmFjdGl2ZX0pKX0pKSxjLm9uKCJtb3VzZW92ZXIiLChmdW5jdGlvbigpe2MuY2FsbCh3KX0pKSxjLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7Yy5jYWxsKFQsbyksdS5jYWxsKF8sbyl9KSl9KSksdS5jYWxsKF8sbykseD8oay53PU1hdGgubWF4KHYub3BlbldpZHRoLHYuaGVhZGVyV2lkdGgpLGsuaD1iLnktay50KTooay53PWIueC1rLmwsay5oPU1hdGgubWF4KHYub3BlbkhlaWdodCx2LmhlYWRlckhlaWdodCkpLGsuZGlyZWN0aW9uPW8uZGlyZWN0aW9uLGEmJih1LnNpemUoKT9mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scyxsLGM9aS5kaXJlY3Rpb24sdT0idXAiPT09Y3x8ImRvd24iPT09YyxoPWkuX2RpbXMscD1pLmFjdGl2ZTtpZih1KWZvcihzPTAsbD0wO2w8cDtsKyspcys9aC5oZWlnaHRzW2xdK2YuZ2FwQnV0dG9uO2Vsc2UgZm9yKG89MCxsPTA7bDxwO2wrKylvKz1oLndpZHRoc1tsXStmLmdhcEJ1dHRvbjtuLmVuYWJsZShhLG8scyksbi5oYmFyJiZuLmhiYXIuYXR0cigib3BhY2l0eSIsIjAiKS50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjEiKTtuLnZiYXImJm4udmJhci5hdHRyKCJvcGFjaXR5IiwiMCIpLnRyYW5zaXRpb24oKS5hdHRyKCJvcGFjaXR5IiwiMSIpfSgwLDAsMCxhLG8sayk6ZnVuY3Rpb24odCl7dmFyIGU9ISF0LmhiYXIscj0hIXQudmJhcjtlJiZ0LmhiYXIudHJhbnNpdGlvbigpLmF0dHIoIm9wYWNpdHkiLCIwIikuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtlPSExLHJ8fHQuZGlzYWJsZSgpfSkpO3ImJnQudmJhci50cmFuc2l0aW9uKCkuYXR0cigib3BhY2l0eSIsIjAiKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3I9ITEsZXx8dC5kaXNhYmxlKCl9KSl9KGEpKX1mdW5jdGlvbiB5KHQsZSxyLG4pe3QuY2FsbCh4LGUpLmNhbGwoYixlLHIsbil9ZnVuY3Rpb24geCh0LGUpe3MuZW5zdXJlU2luZ2xlKHQsInJlY3QiLGYuaXRlbVJlY3RDbGFzc05hbWUsKGZ1bmN0aW9uKHQpe3QuYXR0cih7cng6Zi5yeCxyeTpmLnJ5LCJzaGFwZS1yZW5kZXJpbmciOiJjcmlzcEVkZ2VzIn0pfSkpLmNhbGwoYS5zdHJva2UsZS5ib3JkZXJjb2xvcikuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLmJvcmRlcndpZHRoKyJweCIpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9cy5lbnN1cmVTaW5nbGUodCwidGV4dCIsZi5pdGVtVGV4dENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5hdHRyKHsidGV4dC1hbmNob3IiOiJzdGFydCIsImRhdGEtbm90ZXgiOjF9KX0pKSxhPXIubGFiZWwsYz1uLl9mdWxsTGF5b3V0Ll9tZXRhO2MmJihhPXMudGVtcGxhdGVTdHJpbmcoYSxjKSksaS5jYWxsKG8uZm9udCxlLmZvbnQpLnRleHQoYSkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyxuKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZS5hY3RpdmU7dC5lYWNoKChmdW5jdGlvbih0LGkpe3ZhciBvPW4uc2VsZWN0KHRoaXMpO2k9PT1yJiZlLnNob3dhY3RpdmUmJm8uc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZi5hY3RpdmVDb2xvcil9KSl9ZnVuY3Rpb24gdyh0KXt0LnNlbGVjdCgicmVjdC4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLmNhbGwoYS5maWxsLGYuaG92ZXJDb2xvcil9ZnVuY3Rpb24gVCh0LGUpe3Quc2VsZWN0KCJyZWN0LiIrZi5pdGVtUmVjdENsYXNzTmFtZSkuY2FsbChhLmZpbGwsZS5iZ2NvbG9yKX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9ZS5fZGltcz17d2lkdGgxOjAsaGVpZ2h0MTowLGhlaWdodHM6W10sd2lkdGhzOltdLHRvdGFsV2lkdGg6MCx0b3RhbEhlaWdodDowLG9wZW5XaWR0aDowLG9wZW5IZWlnaHQ6MCxseDowLGx5OjB9LGE9by50ZXN0ZXIuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkuZGF0YShzLmZpbHRlclZpc2libGUoZS5idXR0b25zKSk7YS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSwhMCk7dmFyIGM9LTEhPT1bInVwIiwiZG93biJdLmluZGV4T2YoZS5kaXJlY3Rpb24pO2EuZWFjaCgoZnVuY3Rpb24oaSxhKXt2YXIgcz1uLnNlbGVjdCh0aGlzKTtzLmNhbGwoeSxlLGksdCk7dmFyIGg9cy5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHA9aC5ub2RlKCkmJm8uYkJveChoLm5vZGUoKSkud2lkdGgsZD1NYXRoLm1heChwK2YudGV4dFBhZFgsZi5taW5XaWR0aCksbT1lLmZvbnQuc2l6ZSp1LGc9bC5saW5lQ291bnQoaCksdj1NYXRoLm1heChtKmcsZi5taW5IZWlnaHQpK2YudGV4dE9mZnNldFk7dj1NYXRoLmNlaWwodiksZD1NYXRoLmNlaWwoZCksci53aWR0aHNbYV09ZCxyLmhlaWdodHNbYV09dixyLmhlaWdodDE9TWF0aC5tYXgoci5oZWlnaHQxLHYpLHIud2lkdGgxPU1hdGgubWF4KHIud2lkdGgxLGQpLGM/KHIudG90YWxXaWR0aD1NYXRoLm1heChyLnRvdGFsV2lkdGgsZCksci5vcGVuV2lkdGg9ci50b3RhbFdpZHRoLHIudG90YWxIZWlnaHQrPXYrZi5nYXBCdXR0b24sci5vcGVuSGVpZ2h0Kz12K2YuZ2FwQnV0dG9uKTooci50b3RhbFdpZHRoKz1kK2YuZ2FwQnV0dG9uLHIub3BlbldpZHRoKz1kK2YuZ2FwQnV0dG9uLHIudG90YWxIZWlnaHQ9TWF0aC5tYXgoci50b3RhbEhlaWdodCx2KSxyLm9wZW5IZWlnaHQ9ci50b3RhbEhlaWdodCl9KSksYz9yLnRvdGFsSGVpZ2h0LT1mLmdhcEJ1dHRvbjpyLnRvdGFsV2lkdGgtPWYuZ2FwQnV0dG9uLHIuaGVhZGVyV2lkdGg9ci53aWR0aDErZi5hcnJvd1BhZFgsci5oZWFkZXJIZWlnaHQ9ci5oZWlnaHQxLCJkcm9wZG93biI9PT1lLnR5cGUmJihjPyhyLndpZHRoMSs9Zi5hcnJvd1BhZFgsci50b3RhbEhlaWdodD1yLmhlaWdodDEpOnIudG90YWxXaWR0aD1yLndpZHRoMSxyLnRvdGFsV2lkdGgrPWYuYXJyb3dQYWRYKSxhLnJlbW92ZSgpO3ZhciBoPXIudG90YWxXaWR0aCtlLnBhZC5sK2UucGFkLnIscD1yLnRvdGFsSGVpZ2h0K2UucGFkLnQrZS5wYWQuYixkPXQuX2Z1bGxMYXlvdXQuX3NpemU7ci5seD1kLmwrZC53KmUueCxyLmx5PWQudCtkLmgqKDEtZS55KTt2YXIgbT0ibGVmdCI7cy5pc1JpZ2h0QW5jaG9yKGUpJiYoci5seC09aCxtPSJyaWdodCIpLHMuaXNDZW50ZXJBbmNob3IoZSkmJihyLmx4LT1oLzIsbT0iY2VudGVyIik7dmFyIGc9InRvcCI7cy5pc0JvdHRvbUFuY2hvcihlKSYmKHIubHktPXAsZz0iYm90dG9tIikscy5pc01pZGRsZUFuY2hvcihlKSYmKHIubHktPXAvMixnPSJtaWRkbGUiKSxyLnRvdGFsV2lkdGg9TWF0aC5jZWlsKHIudG90YWxXaWR0aCksci50b3RhbEhlaWdodD1NYXRoLmNlaWwoci50b3RhbEhlaWdodCksci5seD1NYXRoLnJvdW5kKHIubHgpLHIubHk9TWF0aC5yb3VuZChyLmx5KSxpLmF1dG9NYXJnaW4odCxBKGUpLHt4OmUueCx5OmUueSxsOmgqKHtyaWdodDoxLGNlbnRlcjouNX1bbV18fDApLHI6aCooe2xlZnQ6MSxjZW50ZXI6LjV9W21dfHwwKSxiOnAqKHt0b3A6MSxtaWRkbGU6LjV9W2ddfHwwKSx0OnAqKHtib3R0b206MSxtaWRkbGU6LjV9W2ddfHwwKX0pfWZ1bmN0aW9uIEEodCl7cmV0dXJuIGYuYXV0b01hcmdpbklkUm9vdCt0Ll9pbmRleH1mdW5jdGlvbiBNKHQsZSxyLG4pe249bnx8e307dmFyIGk9dC5zZWxlY3QoIi4iK2YuaXRlbVJlY3RDbGFzc05hbWUpLGE9dC5zZWxlY3QoIi4iK2YuaXRlbVRleHRDbGFzc05hbWUpLHM9ZS5ib3JkZXJ3aWR0aCxjPXIuaW5kZXgsaD1lLl9kaW1zO28uc2V0VHJhbnNsYXRlKHQscytyLngscytyLnkpO3ZhciBwPS0xIT09WyJ1cCIsImRvd24iXS5pbmRleE9mKGUuZGlyZWN0aW9uKSxkPW4uaGVpZ2h0fHwocD9oLmhlaWdodHNbY106aC5oZWlnaHQxKTtpLmF0dHIoe3g6MCx5OjAsd2lkdGg6bi53aWR0aHx8KHA/aC53aWR0aDE6aC53aWR0aHNbY10pLGhlaWdodDpkfSk7dmFyIG09ZS5mb250LnNpemUqdSxnPShsLmxpbmVDb3VudChhKS0xKSptLzI7bC5wb3NpdGlvblRleHQoYSxmLnRleHRPZmZzZXRYLGQvMi1nK2YudGV4dE9mZnNldFkpLHA/ci55Kz1oLmhlaWdodHNbY10rci55UGFkOnIueCs9aC53aWR0aHNbY10rci54UGFkLHIuaW5kZXgrK31mdW5jdGlvbiBTKHQsZSl7dC5hdHRyKGYubWVudUluZGV4QXR0ck5hbWUsZXx8Ii0xIikuc2VsZWN0QWxsKCJnLiIrZi5kcm9wZG93bkJ1dHRvbkNsYXNzTmFtZSkucmVtb3ZlKCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1zLmZpbHRlclZpc2libGUoZVtmLm5hbWVdKTtmdW5jdGlvbiBhKGUpe2kuYXV0b01hcmdpbih0LEEoZSkpfXZhciBvPWUuX21lbnVsYXllci5zZWxlY3RBbGwoImcuIitmLmNvbnRhaW5lckNsYXNzTmFtZSkuZGF0YShyLmxlbmd0aD4wP1swXTpbXSk7aWYoby5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5jb250YWluZXJDbGFzc05hbWUsITApLnN0eWxlKCJjdXJzb3IiLCJwb2ludGVyIiksby5leGl0KCkuZWFjaCgoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5lYWNoKGEpfSkpLnJlbW92ZSgpLDAhPT1yLmxlbmd0aCl7dmFyIGw9by5zZWxlY3RBbGwoImcuIitmLmhlYWRlckdyb3VwQ2xhc3NOYW1lKS5kYXRhKHIscCk7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoZi5oZWFkZXJHcm91cENsYXNzTmFtZSwhMCk7Zm9yKHZhciBjPXMuZW5zdXJlU2luZ2xlKG8sImciLGYuZHJvcGRvd25CdXR0b25Hcm91cENsYXNzTmFtZSwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciB5PXJbdV07ayh0LHkpfXZhciB4PSJ1cGRhdGVtZW51cyIrZS5fdWlkLGI9bmV3IGgodCxjLHgpO2wuZW50ZXIoKS5zaXplKCkmJihjLm5vZGUoKS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGMubm9kZSgpKSxjLmNhbGwoUykpLGwuZXhpdCgpLmVhY2goKGZ1bmN0aW9uKHQpe2MuY2FsbChTKSxhKHQpfSkpLnJlbW92ZSgpLGwuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT0iZHJvcGRvd24iPT09ZS50eXBlP2M6bnVsbDtpLm1hbmFnZUNvbW1hbmRPYnNlcnZlcih0LGUsZS5idXR0b25zLChmdW5jdGlvbihuKXttKHQsZSxlLmJ1dHRvbnNbbi5pbmRleF0scixhLGIsbi5pbmRleCwhMCl9KSksImRyb3Bkb3duIj09PWUudHlwZT8oZyh0LHIsYyxiLGUpLGQoYyxlKSYmdih0LHIsYyxiLGUpKTp2KHQscixudWxsLG51bGwsZSl9KSl9fX0seyIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi9jb2xvciI6NjM5LCIuLi9kcmF3aW5nIjo2NjEsIi4vY29uc3RhbnRzIjo3MzksIi4vc2Nyb2xsYm94Ijo3NDMsIkBwbG90bHkvZDMiOjU4fV0sNzQyOltmdW5jdGlvbih0LGUscil7YXJndW1lbnRzWzRdWzczNl1bMF0uYXBwbHkocixhcmd1bWVudHMpfSx7Ii4vYXR0cmlidXRlcyI6NzM4LCIuL2NvbnN0YW50cyI6NzM5LCIuL2RlZmF1bHRzIjo3NDAsIi4vZHJhdyI6NzQxLGR1cDo3MzZ9XSw3NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXM7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY29sb3IiKSxhPXQoIi4uL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYiIpO2Z1bmN0aW9uIHModCxlLHIpe3RoaXMuZ2Q9dCx0aGlzLmNvbnRhaW5lcj1lLHRoaXMuaWQ9cix0aGlzLnBvc2l0aW9uPW51bGwsdGhpcy50cmFuc2xhdGVYPW51bGwsdGhpcy50cmFuc2xhdGVZPW51bGwsdGhpcy5oYmFyPW51bGwsdGhpcy52YmFyPW51bGwsdGhpcy5iZz10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYm94LWJnIikuZGF0YShbMF0pLHRoaXMuYmcuZXhpdCgpLm9uKCIuZHJhZyIsbnVsbCkub24oIndoZWVsIixudWxsKS5yZW1vdmUoKSx0aGlzLmJnLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgic2Nyb2xsYm94LWJnIiwhMCkuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cih7b3BhY2l0eTowLHg6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0pfXMuYmFyV2lkdGg9MixzLmJhckxlbmd0aD0yMCxzLmJhclJhZGl1cz0yLHMuYmFyUGFkPTEscy5iYXJDb2xvcj0iIzgwOEJBNCIscy5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz10aGlzLmdkLl9mdWxsTGF5b3V0LGw9by53aWR0aCxjPW8uaGVpZ2h0O3RoaXMucG9zaXRpb249dDt2YXIgdSxmLGgscCxkPXRoaXMucG9zaXRpb24ubCxtPXRoaXMucG9zaXRpb24udyxnPXRoaXMucG9zaXRpb24udCx2PXRoaXMucG9zaXRpb24uaCx5PXRoaXMucG9zaXRpb24uZGlyZWN0aW9uLHg9ImRvd24iPT09eSxiPSJsZWZ0Ij09PXksXz0idXAiPT09eSx3PW0sVD12O3h8fGJ8fCJyaWdodCI9PT15fHxffHwodGhpcy5wb3NpdGlvbi5kaXJlY3Rpb249ImRvd24iLHg9ITApLHh8fF8/KGY9KHU9ZCkrdyx4PyhoPWcsVD0ocD1NYXRoLm1pbihoK1QsYykpLWgpOlQ9KHA9ZytUKS0oaD1NYXRoLm1heChwLVQsMCkpKToocD0oaD1nKStULGI/dz0oZj1kK3cpLSh1PU1hdGgubWF4KGYtdywwKSk6KHU9ZCx3PShmPU1hdGgubWluKHUrdyxsKSktdSkpLHRoaXMuX2JveD17bDp1LHQ6aCx3OncsaDpUfTt2YXIgaz1tPncsQT1zLmJhckxlbmd0aCsyKnMuYmFyUGFkLE09cy5iYXJXaWR0aCsyKnMuYmFyUGFkLFM9ZCxFPWcrdjtFK00+YyYmKEU9Yy1NKTt2YXIgTD10aGlzLmNvbnRhaW5lci5zZWxlY3RBbGwoInJlY3Quc2Nyb2xsYmFyLWhvcml6b250YWwiKS5kYXRhKGs/WzBdOltdKTtMLmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEwuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItaG9yaXpvbnRhbCIsITApLmNhbGwoaS5maWxsLHMuYmFyQ29sb3IpLGs/KHRoaXMuaGJhcj1MLmF0dHIoe3J4OnMuYmFyUmFkaXVzLHJ5OnMuYmFyUmFkaXVzLHg6Uyx5OkUsd2lkdGg6QSxoZWlnaHQ6TX0pLHRoaXMuX2hiYXJYTWluPVMrQS8yLHRoaXMuX2hiYXJUcmFuc2xhdGVNYXg9dy1BKTooZGVsZXRlIHRoaXMuaGJhcixkZWxldGUgdGhpcy5faGJhclhNaW4sZGVsZXRlIHRoaXMuX2hiYXJUcmFuc2xhdGVNYXgpO3ZhciBDPXY+VCxQPXMuYmFyV2lkdGgrMipzLmJhclBhZCxJPXMuYmFyTGVuZ3RoKzIqcy5iYXJQYWQsTz1kK20sej1nO08rUD5sJiYoTz1sLVApO3ZhciBEPXRoaXMuY29udGFpbmVyLnNlbGVjdEFsbCgicmVjdC5zY3JvbGxiYXItdmVydGljYWwiKS5kYXRhKEM/WzBdOltdKTtELmV4aXQoKS5vbigiLmRyYWciLG51bGwpLnJlbW92ZSgpLEQuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJzY3JvbGxiYXItdmVydGljYWwiLCEwKS5jYWxsKGkuZmlsbCxzLmJhckNvbG9yKSxDPyh0aGlzLnZiYXI9RC5hdHRyKHtyeDpzLmJhclJhZGl1cyxyeTpzLmJhclJhZGl1cyx4Ok8seTp6LHdpZHRoOlAsaGVpZ2h0Okl9KSx0aGlzLl92YmFyWU1pbj16K0kvMix0aGlzLl92YmFyVHJhbnNsYXRlTWF4PVQtSSk6KGRlbGV0ZSB0aGlzLnZiYXIsZGVsZXRlIHRoaXMuX3ZiYXJZTWluLGRlbGV0ZSB0aGlzLl92YmFyVHJhbnNsYXRlTWF4KTt2YXIgUj10aGlzLmlkLEY9dS0uNSxCPUM/ZitQKy41OmYrLjUsTj1oLS41LGo9az9wK00rLjU6cCsuNSxVPW8uX3RvcGRlZnMuc2VsZWN0QWxsKCIjIitSKS5kYXRhKGt8fEM/WzBdOltdKTtpZihVLmV4aXQoKS5yZW1vdmUoKSxVLmVudGVyKCkuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixSKS5hcHBlbmQoInJlY3QiKSxrfHxDPyh0aGlzLl9jbGlwUmVjdD1VLnNlbGVjdCgicmVjdCIpLmF0dHIoe3g6TWF0aC5mbG9vcihGKSx5Ok1hdGguZmxvb3IoTiksd2lkdGg6TWF0aC5jZWlsKEIpLU1hdGguZmxvb3IoRiksaGVpZ2h0Ok1hdGguY2VpbChqKS1NYXRoLmZsb29yKE4pfSksdGhpcy5jb250YWluZXIuY2FsbChhLnNldENsaXBVcmwsUix0aGlzLmdkKSx0aGlzLmJnLmF0dHIoe3g6ZCx5Omcsd2lkdGg6bSxoZWlnaHQ6dn0pKToodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksa3x8Qyl7dmFyIFY9bi5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7bi5ldmVudC5zb3VyY2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJveERyYWcuYmluZCh0aGlzKSk7dGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigid2hlZWwiLHRoaXMuX29uQm94V2hlZWwuYmluZCh0aGlzKSkub24oIi5kcmFnIixudWxsKS5jYWxsKFYpO3ZhciBIPW4uYmVoYXZpb3IuZHJhZygpLm9uKCJkcmFnc3RhcnQiLChmdW5jdGlvbigpe24uZXZlbnQuc291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKSxuLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfSkpLm9uKCJkcmFnIix0aGlzLl9vbkJhckRyYWcuYmluZCh0aGlzKSk7ayYmdGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCkuY2FsbChIKSxDJiZ0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKS5jYWxsKEgpfXRoaXMuc2V0VHJhbnNsYXRlKGUscil9LHMucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXsodGhpcy5oYmFyfHx0aGlzLnZiYXIpJiYodGhpcy5iZy5hdHRyKHt3aWR0aDowLGhlaWdodDowfSksdGhpcy5jb250YWluZXIub24oIndoZWVsIixudWxsKS5vbigiLmRyYWciLG51bGwpLmNhbGwoYS5zZXRDbGlwVXJsLG51bGwpLGRlbGV0ZSB0aGlzLl9jbGlwUmVjdCksdGhpcy5oYmFyJiYodGhpcy5oYmFyLm9uKCIuZHJhZyIsbnVsbCksdGhpcy5oYmFyLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmhiYXIsZGVsZXRlIHRoaXMuX2hiYXJYTWluLGRlbGV0ZSB0aGlzLl9oYmFyVHJhbnNsYXRlTWF4KSx0aGlzLnZiYXImJih0aGlzLnZiYXIub24oIi5kcmFnIixudWxsKSx0aGlzLnZiYXIucmVtb3ZlKCksZGVsZXRlIHRoaXMudmJhcixkZWxldGUgdGhpcy5fdmJhcllNaW4sZGVsZXRlIHRoaXMuX3ZiYXJUcmFuc2xhdGVNYXgpfSxzLnByb3RvdHlwZS5fb25Cb3hEcmFnPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQtPW4uZXZlbnQuZHgpLHRoaXMudmJhciYmKGUtPW4uZXZlbnQuZHkpLHRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLl9vbkJveFdoZWVsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50cmFuc2xhdGVYLGU9dGhpcy50cmFuc2xhdGVZO3RoaXMuaGJhciYmKHQrPW4uZXZlbnQuZGVsdGFZKSx0aGlzLnZiYXImJihlKz1uLmV2ZW50LmRlbHRhWSksdGhpcy5zZXRUcmFuc2xhdGUodCxlKX0scy5wcm90b3R5cGUuX29uQmFyRHJhZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMudHJhbnNsYXRlWCxlPXRoaXMudHJhbnNsYXRlWTtpZih0aGlzLmhiYXIpe3ZhciByPXQrdGhpcy5faGJhclhNaW4saT1yK3RoaXMuX2hiYXJUcmFuc2xhdGVNYXg7dD0oby5jb25zdHJhaW4obi5ldmVudC54LHIsaSktcikvKGktcikqKHRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyl9aWYodGhpcy52YmFyKXt2YXIgYT1lK3RoaXMuX3ZiYXJZTWluLHM9YSt0aGlzLl92YmFyVHJhbnNsYXRlTWF4O2U9KG8uY29uc3RyYWluKG4uZXZlbnQueSxhLHMpLWEpLyhzLWEpKih0aGlzLnBvc2l0aW9uLmgtdGhpcy5fYm94LmgpfXRoaXMuc2V0VHJhbnNsYXRlKHQsZSl9LHMucHJvdG90eXBlLnNldFRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMucG9zaXRpb24udy10aGlzLl9ib3gudyxuPXRoaXMucG9zaXRpb24uaC10aGlzLl9ib3guaDtpZih0PW8uY29uc3RyYWluKHR8fDAsMCxyKSxlPW8uY29uc3RyYWluKGV8fDAsMCxuKSx0aGlzLnRyYW5zbGF0ZVg9dCx0aGlzLnRyYW5zbGF0ZVk9ZSx0aGlzLmNvbnRhaW5lci5jYWxsKGEuc2V0VHJhbnNsYXRlLHRoaXMuX2JveC5sLXRoaXMucG9zaXRpb24ubC10LHRoaXMuX2JveC50LXRoaXMucG9zaXRpb24udC1lKSx0aGlzLl9jbGlwUmVjdCYmdGhpcy5fY2xpcFJlY3QuYXR0cih7eDpNYXRoLmZsb29yKHRoaXMucG9zaXRpb24ubCt0LS41KSx5Ok1hdGguZmxvb3IodGhpcy5wb3NpdGlvbi50K2UtLjUpfSksdGhpcy5oYmFyKXt2YXIgaT10L3I7dGhpcy5oYmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCtpKnRoaXMuX2hiYXJUcmFuc2xhdGVNYXgsZSl9aWYodGhpcy52YmFyKXt2YXIgcz1lL247dGhpcy52YmFyLmNhbGwoYS5zZXRUcmFuc2xhdGUsdCxlK3MqdGhpcy5fdmJhclRyYW5zbGF0ZU1heCl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vY29sb3IiOjYzOSwiLi4vZHJhd2luZyI6NjYxLCJAcGxvdGx5L2QzIjo1OH1dLDc0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0ZST01fQkw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LEZST01fVEw6e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MSxib3R0b206MSxtaWRkbGU6LjUsdG9wOjB9LEZST01fQlI6e2xlZnQ6MSxjZW50ZXI6LjUscmlnaHQ6MCxib3R0b206MCxtaWRkbGU6LjUsdG9wOjF9LExJTkVfU1BBQ0lORzoxLjMsQ0FQX1NISUZUOi43LE1JRF9TSElGVDouMzUsT1BQT1NJVEVfU0lERTp7bGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0Iix0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AifX19LHt9XSw3NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtheGlzUmVmRGVzY3JpcHRpb246ZnVuY3Rpb24odCxlLHIpe3JldHVyblsiSWYgc2V0IHRvIGEiLHQsImF4aXMgaWQgKGUuZy4gKiIrdCsiKiBvciIsIioiK3QrIjIqKSwgdGhlIGAiK3QrImAgcG9zaXRpb24gcmVmZXJzIHRvIGEiLHQsImNvb3JkaW5hdGUuIElmIHNldCB0byAqcGFwZXIqLCB0aGUgYCIrdCsiYCIsInBvc2l0aW9uIHJlZmVycyB0byB0aGUgZGlzdGFuY2UgZnJvbSB0aGUiLGUsIm9mIHRoZSBwbG90dGluZyIsImFyZWEgaW4gbm9ybWFsaXplZCBjb29yZGluYXRlcyB3aGVyZSAqMCogKCoxKikgY29ycmVzcG9uZHMgdG8gdGhlIixlLCIoIityKyIpLiBJZiBzZXQgdG8gYSIsdCwiYXhpcyBJRCBmb2xsb3dlZCBieSIsIipkb21haW4qIChzZXBhcmF0ZWQgYnkgYSBzcGFjZSksIHRoZSBwb3NpdGlvbiBiZWhhdmVzIGxpa2UgZm9yIiwiKnBhcGVyKiwgYnV0IHJlZmVycyB0byB0aGUgZGlzdGFuY2UgaW4gZnJhY3Rpb25zIG9mIHRoZSBkb21haW4iLCJsZW5ndGggZnJvbSB0aGUiLGUsIm9mIHRoZSBkb21haW4gb2YgdGhhdCBheGlzOiBlLmcuLCIsIioiK3QrIjIgZG9tYWluKiByZWZlcnMgdG8gdGhlIGRvbWFpbiBvZiB0aGUgc2Vjb25kIix0LCIgYXhpcyBhbmQgYSIsdCwicG9zaXRpb24gb2YgMC41IHJlZmVycyB0byB0aGUiLCJwb2ludCBiZXR3ZWVuIHRoZSIsZSwiYW5kIHRoZSIsciwib2YgdGhlIGRvbWFpbiBvZiB0aGUiLCJzZWNvbmQiLHQsImF4aXMuIl0uam9pbigiICIpfX19LHt9XSw3NDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtJTkNSRUFTSU5HOntDT0xPUjoiIzNEOTk3MCIsU1lNQk9MOiJcdTI1YjIifSxERUNSRUFTSU5HOntDT0xPUjoiI0ZGNDEzNiIsU1lNQk9MOiJcdTI1YmMifX19LHt9XSw3NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtGT1JNQVRfTElOSzoiaHR0cHM6Ly9naXRodWIuY29tL2QzL2QzLWZvcm1hdC90cmVlL3YxLjQuNSNkMy1mb3JtYXQiLERBVEVfRk9STUFUX0xJTks6Imh0dHBzOi8vZ2l0aHViLmNvbS9kMy9kMy10aW1lLWZvcm1hdC90cmVlL3YyLjIuMyNsb2NhbGVfZm9ybWF0In19LHt9XSw3NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtDT01QQVJJU09OX09QUzpbIj0iLCIhPSIsIjwiLCI+PSIsIj4iLCI8PSJdLENPTVBBUklTT05fT1BTMjpbIj0iLCI8IiwiPj0iLCI+IiwiPD0iXSxJTlRFUlZBTF9PUFM6WyJbXSIsIigpIiwiWykiLCIoXSIsIl1bIiwiKSgiLCJdKCIsIilbIl0sU0VUX09QUzpbInt9IiwifXsiXSxDT05TVFJBSU5UX1JFRFVDVElPTjp7Ij0iOiI9IiwiPCI6IjwiLCI8PSI6IjwiLCI+IjoiPiIsIj49IjoiPiIsIltdIjoiW10iLCIoKSI6IltdIiwiWykiOiJbXSIsIihdIjoiW10iLCJdWyI6Il1bIiwiKSgiOiJdWyIsIl0oIjoiXVsiLCIpWyI6Il1bIn19fSx7fV0sNzQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17c29saWQ6W1tdLDBdLGRvdDpbWy41LDFdLDIwMF0sZGFzaDpbWy41LDFdLDUwXSxsb25nZGFzaDpbWy41LDFdLDEwXSxkYXNoZG90OltbLjUsLjYyNSwuODc1LDFdLDUwXSxsb25nZGFzaGRvdDpbWy41LC43LC44LDFdLDEwXX19LHt9XSw3NTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjaXJjbGU6Ilx1MjVjZiIsImNpcmNsZS1vcGVuIjoiXHUyNWNiIixzcXVhcmU6Ilx1MjVhMCIsInNxdWFyZS1vcGVuIjoiXHUyNWExIixkaWFtb25kOiJcdTI1YzYiLCJkaWFtb25kLW9wZW4iOiJcdTI1YzciLGNyb3NzOiIrIix4OiJcdTI3NGMifX0se31dLDc1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1NIT1dfUExBQ0VIT0xERVI6MTAwLEhJREVfUExBQ0VIT0xERVI6MWUzLERFU0VMRUNURElNOi4yfX0se31dLDc1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JBRE5VTTp2b2lkIDAsRlBfU0FGRToxZS00Kk51bWJlci5NQVhfVkFMVUUsT05FTUFYWUVBUjozMTYyMjRlNSxPTkVBVkdZRUFSOjMxNTU3NmU1LE9ORU1JTllFQVI6MzE1MzZlNixPTkVNQVhRVUFSVEVSOjc5NDg4ZTUsT05FQVZHUVVBUlRFUjo3ODg5NGU1LE9ORU1JTlFVQVJURVI6NzY4OTZlNSxPTkVNQVhNT05USDoyNjc4NGU1LE9ORUFWR01PTlRIOjI2Mjk4ZTUsT05FTUlOTU9OVEg6MjQxOTJlNSxPTkVXRUVLOjYwNDhlNSxPTkVEQVk6ODY0ZTUsT05FSE9VUjozNmU1LE9ORU1JTjo2ZTQsT05FU0VDOjFlMyxFUE9DSEpEOjI0NDA1ODcuNSxBTE1PU1RfRVFVQUw6Ljk5OTk5OSxMT0dfQ0xJUDoxMCxNSU5VU19TSUdOOiJcdTIyMTIifX0se31dLDc1MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsci5zdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixyLnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixyLnN2Z0F0dHJzPXt4bWxuczpyLnN2ZywieG1sbnM6eGxpbmsiOnIueGxpbmt9fSx7fV0sNzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IudmVyc2lvbj10KCIuL3ZlcnNpb24iKS52ZXJzaW9uLHQoIm5hdGl2ZS1wcm9taXNlLW9ubHkiKSx0KCIuLi9idWlsZC9wbG90Y3NzIik7Zm9yKHZhciBuPXQoIi4vcmVnaXN0cnkiKSxpPXIucmVnaXN0ZXI9bi5yZWdpc3RlcixhPXQoIi4vcGxvdF9hcGkiKSxvPU9iamVjdC5rZXlzKGEpLHM9MDtzPG8ubGVuZ3RoO3MrKyl7dmFyIGw9b1tzXTsiXyIhPT1sLmNoYXJBdCgwKSYmKHJbbF09YVtsXSksaSh7bW9kdWxlVHlwZToiYXBpTWV0aG9kIixuYW1lOmwsZm46YVtsXX0pfWkodCgiLi90cmFjZXMvc2NhdHRlciIpKSxpKFt0KCIuL2NvbXBvbmVudHMvbGVnZW5kIiksdCgiLi9jb21wb25lbnRzL2Z4IiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zIiksdCgiLi9jb21wb25lbnRzL2Fubm90YXRpb25zM2QiKSx0KCIuL2NvbXBvbmVudHMvc2hhcGVzIiksdCgiLi9jb21wb25lbnRzL2ltYWdlcyIpLHQoIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyIpLHQoIi4vY29tcG9uZW50cy9zbGlkZXJzIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2xpZGVyIiksdCgiLi9jb21wb25lbnRzL3Jhbmdlc2VsZWN0b3IiKSx0KCIuL2NvbXBvbmVudHMvZ3JpZCIpLHQoIi4vY29tcG9uZW50cy9lcnJvcmJhcnMiKSx0KCIuL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHQoIi4vY29tcG9uZW50cy9jb2xvcmJhciIpLHQoIi4vY29tcG9uZW50cy9tb2RlYmFyIildKSxpKFt0KCIuL2xvY2FsZS1lbiIpLHQoIi4vbG9jYWxlLWVuLXVzIildKSx3aW5kb3cuUGxvdGx5TG9jYWxlcyYmQXJyYXkuaXNBcnJheSh3aW5kb3cuUGxvdGx5TG9jYWxlcykmJihpKHdpbmRvdy5QbG90bHlMb2NhbGVzKSxkZWxldGUgd2luZG93LlBsb3RseUxvY2FsZXMpLHIuSWNvbnM9dCgiLi9mb250cy9wbG90aWNvbiIpO3ZhciBjPXQoIi4vY29tcG9uZW50cy9meCIpLHU9dCgiLi9wbG90cy9wbG90cyIpO3IuUGxvdHM9e3Jlc2l6ZTp1LnJlc2l6ZSxncmFwaEpzb246dS5ncmFwaEpzb24sc2VuZERhdGFUb0Nsb3VkOnUuc2VuZERhdGFUb0Nsb3VkfSxyLkZ4PXtob3ZlcjpjLmhvdmVyLHVuaG92ZXI6Yy51bmhvdmVyLGxvbmVIb3ZlcjpjLmxvbmVIb3Zlcixsb25lVW5ob3ZlcjpjLmxvbmVVbmhvdmVyfSxyLlNuYXBzaG90PXQoIi4vc25hcHNob3QiKSxyLlBsb3RTY2hlbWE9dCgiLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpfSx7Ii4uL2J1aWxkL3Bsb3Rjc3MiOjEsIi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucyI6NjMwLCIuL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMzZCI6NjM1LCIuL2NvbXBvbmVudHMvY29sb3JiYXIiOjY0NSwiLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi9jb21wb25lbnRzL2Vycm9yYmFycyI6NjY3LCIuL2NvbXBvbmVudHMvZngiOjY3OSwiLi9jb21wb25lbnRzL2dyaWQiOjY4MywiLi9jb21wb25lbnRzL2ltYWdlcyI6Njg4LCIuL2NvbXBvbmVudHMvbGVnZW5kIjo2OTYsIi4vY29tcG9uZW50cy9tb2RlYmFyIjo3MDIsIi4vY29tcG9uZW50cy9yYW5nZXNlbGVjdG9yIjo3MTAsIi4vY29tcG9uZW50cy9yYW5nZXNsaWRlciI6NzE3LCIuL2NvbXBvbmVudHMvc2hhcGVzIjo3MzEsIi4vY29tcG9uZW50cy9zbGlkZXJzIjo3MzYsIi4vY29tcG9uZW50cy91cGRhdGVtZW51cyI6NzQyLCIuL2ZvbnRzL3Bsb3RpY29uIjo3NTUsIi4vbG9jYWxlLWVuIjo4MDcsIi4vbG9jYWxlLWVuLXVzIjo4MDYsIi4vcGxvdF9hcGkiOjgxMSwiLi9wbG90X2FwaS9wbG90X3NjaGVtYSI6ODE1LCIuL3Bsb3RzL3Bsb3RzIjo4OTAsIi4vcmVnaXN0cnkiOjkwNCwiLi9zbmFwc2hvdCI6OTA5LCIuL3RyYWNlcy9zY2F0dGVyIjoxMjAzLCIuL3ZlcnNpb24iOjEzNzcsIm5hdGl2ZS1wcm9taXNlLW9ubHkiOjQ1M31dLDc1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3VuZG86e3dpZHRoOjg1Ny4xLGhlaWdodDoxZTMscGF0aDoibTg1NyAzNTBxMC04Ny0zNC0xNjZ0LTkxLTEzNy0xMzctOTItMTY2LTM0cS05NiAwLTE4MyA0MXQtMTQ3IDExNHEtNCA2LTQgMTN0NSAxMWw3NiA3N3E2IDUgMTQgNSA5LTEgMTMtNyA0MS01MyAxMDAtODJ0MTI2LTI5cTU4IDAgMTEwIDIzdDkyIDYxIDYxIDkxIDIyIDExMS0yMiAxMTEtNjEgOTEtOTIgNjEtMTEwIDIzcS01NSAwLTEwNS0yMHQtOTAtNTdsNzctNzdxMTctMTYgOC0zOC0xMC0yMy0zMy0yM2gtMjUwcS0xNSAwLTI1IDExdC0xMSAyNXYyNTBxMCAyNCAyMiAzMyAyMiAxMCAzOS04bDcyLTcycTYwIDU3IDEzNyA4OHQxNTkgMzFxODcgMCAxNjYtMzR0MTM3LTkyIDkxLTEzNyAzNC0xNjZ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxob21lOnt3aWR0aDo5MjguNixoZWlnaHQ6MWUzLHBhdGg6Im03ODYgMjk2di0yNjdxMC0xNS0xMS0yNnQtMjUtMTBoLTIxNHYyMTRoLTE0M3YtMjE0aC0yMTRxLTE1IDAtMjUgMTB0LTExIDI2djI2N3EwIDEgMCAydDAgMmwzMjEgMjY0IDMyMS0yNjRxMS0xIDEtNHogbTEyNCAzOWwtMzQtNDFxLTUtNS0xMi02aC0ycS03IDAtMTIgM2wtMzg2IDMyMi0zODYtMzIycS03LTQtMTMtNC03IDItMTIgN2wtMzUgNDFxLTQgNS0zIDEzdDYgMTJsNDAxIDMzNHExOCAxNSA0MiAxNXQ0My0xNWwxMzYtMTE0djEwOXEwIDggNSAxM3QxMyA1aDEwN3E4IDAgMTMtNXQ1LTEzdi0yMjdsMTIyLTEwMnE1LTUgNi0xMnQtNC0xM3oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LCJjYW1lcmEtcmV0cm8iOnt3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtNTE4IDM4NnEwIDgtNSAxM3QtMTMgNXEtMzcgMC02My0yN3QtMjYtNjNxMC04IDUtMTN0MTMtNSAxMiA1IDUgMTNxMCAyMyAxNiAzOHQzOCAxNnE4IDAgMTMgNXQ1IDEzeiBtMTI1LTczcTAtNTktNDItMTAxdC0xMDEtNDItMTAxIDQyLTQyIDEwMSA0MiAxMDEgMTAxIDQyIDEwMS00MiA0Mi0xMDF6IG0tNTcyLTMyMGg4NTh2NzFoLTg1OHYtNzF6IG02NDMgMzIwcTAgODktNjIgMTUydC0xNTIgNjItMTUxLTYyLTYzLTE1MiA2My0xNTEgMTUxLTYzIDE1MiA2MyA2MiAxNTF6IG0tNTcxIDM1OGgyMTR2NzJoLTIxNHYtNzJ6IG0tNzItMTA3aDg1OHYxNDNoLTQ2MmwtMzYtNzFoLTM2MHYtNzJ6IG05MjkgMTQzdi03MTRxMC0zMC0yMS01MXQtNTAtMjFoLTg1OHEtMjkgMC01MCAyMXQtMjEgNTF2NzE0cTAgMzAgMjEgNTF0NTAgMjFoODU4cTI5IDAgNTAtMjF0MjEtNTF6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tYm94Ont3aWR0aDoxZTMsaGVpZ2h0OjFlMyxwYXRoOiJtMTAwMC0yNWwtMjUwIDI1MWM0MCA2MyA2MyAxMzggNjMgMjE4IDAgMjI0LTE4MiA0MDYtNDA3IDQwNi0yMjQgMC00MDYtMTgyLTQwNi00MDZzMTgzLTQwNiA0MDctNDA2YzgwIDAgMTU1IDIyIDIxOCA2MmwyNTAtMjUwIDEyNSAxMjV6IG0tODEyIDI1MGwwIDQzOCA0MzcgMCAwLTQzOC00MzcgMHogbTYyIDM3NWwzMTMgMCAwLTMxMi0zMTMgMCAwIDMxMnoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHBhbjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTEwMDAgMzUwbC0xODcgMTg4IDAtMTI1LTI1MCAwIDAgMjUwIDEyNSAwLTE4OCAxODctMTg3LTE4NyAxMjUgMCAwLTI1MC0yNTAgMCAwIDEyNS0xODgtMTg4IDE4Ni0xODcgMCAxMjUgMjUyIDAgMC0yNTAtMTI1IDAgMTg3LTE4OCAxODggMTg4LTEyNSAwIDAgMjUwIDI1MCAwIDAtMTI2IDE4NyAxODh6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx6b29tX3BsdXM6e3dpZHRoOjg3NSxoZWlnaHQ6MWUzLHBhdGg6Im0xIDc4N2wwLTg3NSA4NzUgMCAwIDg3NS04NzUgMHogbTY4Ny01MDBsLTE4NyAwIDAtMTg3LTEyNSAwIDAgMTg3LTE4OCAwIDAgMTI1IDE4OCAwIDAgMTg3IDEyNSAwIDAtMTg3IDE4NyAwIDAtMTI1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sem9vbV9taW51czp7d2lkdGg6ODc1LGhlaWdodDoxZTMscGF0aDoibTAgNzg4bDAtODc2IDg3NSAwIDAgODc2LTg3NSAweiBtNjg4LTUwMGwtNTAwIDAgMCAxMjUgNTAwIDAgMC0xMjV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxhdXRvc2NhbGU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0yNTAgODUwbC0xODcgMC02MyAwIDAtNjIgMC0xODggNjMgMCAwIDE4OCAxODcgMCAwIDYyeiBtNjg4IDBsLTE4OCAwIDAtNjIgMTg4IDAgMC0xODggNjIgMCAwIDE4OCAwIDYyLTYyIDB6IG0tODc1LTkzOGwwIDE4OC02MyAwIDAtMTg4IDAtNjIgNjMgMCAxODcgMCAwIDYyLTE4NyAweiBtODc1IDE4OGwwLTE4OC0xODggMCAwLTYyIDE4OCAwIDYyIDAgMCA2MiAwIDE4OC02MiAweiBtLTEyNSAxODhsLTEgMC05My05NC0xNTYgMTU2IDE1NiAxNTYgOTItOTMgMiAwIDAgMjUwLTI1MCAwIDAtMiA5My05Mi0xNTYtMTU2LTE1NiAxNTYgOTQgOTIgMCAyLTI1MCAwIDAtMjUwIDAgMCA5MyA5MyAxNTctMTU2LTE1Ny0xNTYtOTMgOTQgMCAwIDAtMjUwIDI1MCAwIDAgMC05NCA5MyAxNTYgMTU3IDE1Ni0xNTctOTMtOTMgMCAwIDI1MCAwIDAgMjUweiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sdG9vbHRpcF9iYXNpYzp7d2lkdGg6MTUwMCxoZWlnaHQ6MWUzLHBhdGg6Im0zNzUgNzI1bDAgMC0zNzUtMzc1IDM3NS0zNzQgMC0xIDExMjUgMCAwIDc1MC0xMTI1IDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSx0b29sdGlwX2NvbXBhcmU6e3dpZHRoOjExMjUsaGVpZ2h0OjFlMyxwYXRoOiJtMTg3IDc4NmwwIDItMTg3LTE4OCAxODgtMTg3IDAgMCA5MzcgMCAwIDM3My05MzggMHogbTAtNDk5bDAgMS0xODctMTg4IDE4OC0xODggMCAwIDkzNyAwIDAgMzc2LTkzOC0xeiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0scGxvdGx5bG9nbzp7d2lkdGg6MTU0MixoZWlnaHQ6MWUzLHBhdGg6Im0wLTEwaDE4MnYtMTQwaC0xODJ2MTQweiBtMjI4IDE0NmgxODN2LTI4NmgtMTgzdjI4NnogbTIyNSA3MTRoMTgydi0xMDAwaC0xODJ2MTAwMHogbTIyNS0yODVoMTgydi03MTVoLTE4MnY3MTV6IG0yMjUgMTQyaDE4M3YtODU3aC0xODN2ODU3eiBtMjMxLTQyOGgxODJ2LTQyOWgtMTgydjQyOXogbTIyNS0yOTFoMTgzdi0xMzhoLTE4M3YxMzh6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiei1heGlzIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTgzMyA1bC0xNyAxMDh2NDFsLTEzMC02NSAxMzAtNjZjMCAwIDAgMzggMCAzOSAwLTEgMzYtMTQgMzktMjUgNC0xNS02LTIyLTE2LTMwLTE1LTEyLTM5LTE2LTU2LTIwLTkwLTIyLTE4Ny0yMy0yNzktMjMtMjYxIDAtMzQxIDM0LTM1MyA1OSAzIDYwIDIyOCAxMTAgMjI4IDExMC0xNDAtOC0zNTEtMzUtMzUxLTExNiAwLTEyMCAyOTMtMTQyIDQ3NC0xNDIgMTU1IDAgNDc3IDIyIDQ3NyAxNDIgMCA1MC03NCA3OS0xNjMgOTZ6IG0tMzc0IDk0Yy01OC01LTk5LTIxLTk5LTQwIDAtMjQgNjUtNDMgMTQ0LTQzIDc5IDAgMTQzIDE5IDE0MyA0MyAwIDE5LTQyIDM0LTk4IDQwdjIxNmg4N2wtMTMyIDEzNS0xMzMtMTM1aDg4di0yMTZ6IG0xNjcgNTE1aC0xMzZ2MWMxNiAxNiAzMSAzNCA0NiA1Mmw4NCAxMDl2NTRoLTIzMHYtNzFoMTI0di0xYy0xNi0xNy0yOC0zMi00NC01MWwtODktMTE0di01MWgyNDV2NzJ6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSwiM2Rfcm90YXRlIjp7d2lkdGg6MWUzLGhlaWdodDoxZTMscGF0aDoibTkyMiA2NjBjLTUgNC05IDctMTQgMTEtMzU5IDI2My01ODAtMzEtNTgwLTMxbC0xMDIgMjggNTgtNDAwYzAgMSAxIDEgMiAyIDExOCAxMDggMzUxIDI0OSAzNTEgMjQ5cy02MiAyNy0xMDAgNDJjODggODMgMjIyIDE4MyAzNDcgMTIyIDE2LTggMzAtMTcgNDQtMjctMiAxLTQgMi02IDR6IG0zNi0zMjljMCAwIDY0IDIyOS04OCAyOTYtNjIgMjctMTI0IDE0LTE3NS0xMSAxNTctNzggMjI1LTIwOCAyNDktMjY2IDgtMTkgMTEtMzEgMTEtMzEgMiA1IDYgMTUgMTEgMzItNS0xMy04LTIwLTgtMjB6IG0tNzc1LTIzOWM3MC0zMSAxMTctNTAgMTk4LTMyLTEyMSA4MC0xOTkgMzQ2LTE5OSAzNDZsLTk2LTE1LTU4LTEyYzAgMCA1NS0yMjYgMTU1LTI4N3ogbTYwMyAxMzNsLTMxNy0xMzljMCAwIDQtNCAxOS0xNCA3LTUgMjQtMTUgMjQtMTVzLTE3Ny0xNDctMzg5IDRjMjM1LTI4NyA1MzYtMTEyIDUzNi0xMTJsMzEtMjIgMTAwIDI5OS00LTF6IG0tMjk4LTE1M2M2LTQgMTQtOSAyNC0xNSAwIDAtMTcgMTAtMjQgMTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxjYW1lcmE6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im01MDAgNDUwYy04MyAwLTE1MC02Ny0xNTAtMTUwIDAtODMgNjctMTUwIDE1MC0xNTAgODMgMCAxNTAgNjcgMTUwIDE1MCAwIDgzLTY3IDE1MC0xNTAgMTUweiBtNDAwIDE1MGgtMTIwYy0xNiAwLTM0IDEzLTM5IDI5bC0zMSA5M2MtNiAxNS0yMyAyOC00MCAyOGgtMzQwYy0xNiAwLTM0LTEzLTM5LTI4bC0zMS05NGMtNi0xNS0yMy0yOC00MC0yOGgtMTIwYy01NSAwLTEwMC00NS0xMDAtMTAwdi00NTBjMC01NSA0NS0xMDAgMTAwLTEwMGg4MDBjNTUgMCAxMDAgNDUgMTAwIDEwMHY0NTBjMCA1NS00NSAxMDAtMTAwIDEwMHogbS00MDAtNTUwYy0xMzggMC0yNTAgMTEyLTI1MCAyNTAgMCAxMzggMTEyIDI1MCAyNTAgMjUwIDEzOCAwIDI1MC0xMTIgMjUwLTI1MCAwLTEzOC0xMTItMjUwLTI1MC0yNTB6IG0zNjUgMzgwYy0xOSAwLTM1IDE2LTM1IDM1IDAgMTkgMTYgMzUgMzUgMzUgMTkgMCAzNS0xNiAzNS0zNSAwLTE5LTE2LTM1LTM1LTM1eiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgLTEgMCA4NTApIn0sbW92aWU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im05MzggNDEzbC0xODgtMTI1YzAgMzctMTcgNzEtNDQgOTQgNjQgMzggMTA3IDEwNyAxMDcgMTg3IDAgMTIxLTk4IDIxOS0yMTkgMjE5LTEyMSAwLTIxOS05OC0yMTktMjE5IDAtNjEgMjUtMTE3IDY2LTE1NmgtMTE1YzMwIDMzIDQ5IDc2IDQ5IDEyNSAwIDEwMy04NCAxODctMTg3IDE4N3MtMTg4LTg0LTE4OC0xODdjMC01NyAyNi0xMDcgNjUtMTQxLTM4LTIyLTY1LTYyLTY1LTEwOXYtMjUwYzAtNzAgNTYtMTI2IDEyNS0xMjZoNTAwYzY5IDAgMTI1IDU2IDEyNSAxMjZsMTg4LTEyNmMzNCAwIDYyIDI4IDYyIDYzdjM3NWMwIDM1LTI4IDYzLTYyIDYzeiBtLTc1MCAwYy02OSAwLTEyNSA1Ni0xMjUgMTI1czU2IDEyNSAxMjUgMTI1IDEyNS01NiAxMjUtMTI1LTU2LTEyNS0xMjUtMTI1eiBtNDA2LTFjLTg3IDAtMTU3IDcwLTE1NyAxNTcgMCA4NiA3MCAxNTYgMTU3IDE1NnMxNTYtNzAgMTU2LTE1Ni03MC0xNTctMTU2LTE1N3oiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIC0xIDAgODUwKSJ9LHF1ZXN0aW9uOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im01MDAgODJ2MTA3cTAgOC01IDEzdC0xMyA1aC0xMDdxLTggMC0xMy01dC01LTEzdi0xMDdxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3ogbTE0MyAzNzVxMCA0OS0zMSA5MXQtNzcgNjUtOTUgMjNxLTEzNiAwLTIwNy0xMTktOS0xNCA0LTI0bDc0LTU1cTQtNCAxMC00IDkgMCAxNCA3IDMwIDM4IDQ4IDUxIDE5IDE0IDQ4IDE0IDI3IDAgNDgtMTV0MjEtMzNxMC0yMS0xMS0zNHQtMzgtMjVxLTM1LTE2LTY1LTQ4dC0yOS03MHYtMjBxMC04IDUtMTN0MTMtNWgxMDdxOCAwIDEzIDV0NSAxM3EwIDEwIDEyIDI3dDMwIDI4cTE4IDEwIDI4IDE2dDI1IDE5IDI1IDI3IDE2IDM0IDcgNDV6IG0yMTQtMTA3cTAtMTE3LTU3LTIxNXQtMTU2LTE1Ni0yMTUtNTgtMjE2IDU4LTE1NSAxNTYtNTggMjE1IDU4IDIxNSAxNTUgMTU2IDIxNiA1OCAyMTUtNTggMTU2LTE1NiA1Ny0yMTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkaXNrOnt3aWR0aDo4NTcuMSxoZWlnaHQ6MWUzLHBhdGg6Im0yMTQtN2g0Mjl2MjE0aC00Mjl2LTIxNHogbTUwMCAwaDcydjUwMHEwIDgtNiAyMXQtMTEgMjBsLTE1NyAxNTZxLTUgNi0xOSAxMnQtMjIgNXYtMjMycTAtMjItMTUtMzh0LTM4LTE2aC0zMjJxLTIyIDAtMzcgMTZ0LTE2IDM4djIzMmgtNzJ2LTcxNGg3MnYyMzJxMCAyMiAxNiAzOHQzNyAxNmg0NjVxMjIgMCAzOC0xNnQxNS0zOHYtMjMyeiBtLTIxNCA1MTh2MTc4cTAgOC01IDEzdC0xMyA1aC0xMDdxLTcgMC0xMy01dC01LTEzdi0xNzhxMC04IDUtMTN0MTMtNWgxMDdxNyAwIDEzIDV0NSAxM3ogbTM1Ny0xOHYtNTE4cTAtMjItMTUtMzh0LTM4LTE2aC03NTBxLTIzIDAtMzggMTZ0LTE2IDM4djc1MHEwIDIyIDE2IDM4dDM4IDE2aDUxN3EyMyAwIDUwLTEydDQyLTI2bDE1Ni0xNTdxMTYtMTUgMjctNDJ0MTEtNDl6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkcmF3b3BlbnBhdGg6e3dpZHRoOjcwLGhlaWdodDo3MCxwYXRoOiJNMzMuMjEsODUuNjVhNy4zMSw3LjMxLDAsMCwxLTIuNTktLjQ4Yy04LjE2LTMuMTEtOS4yNy0xOS44LTkuODgtNDEuMy0uMS0zLjU4LS4xOS02LjY4LS4zNS05LS4xNS0yLjEtLjY3LTMuNDgtMS40My0zLjc5LTIuMTMtLjg4LTcuOTEsMi4zMi0xMiw1Ljg2TDMsMzIuMzhjMS44Ny0xLjY0LDExLjU1LTkuNjYsMTguMjctNi45LDIuMTMuODcsNC43NSwzLjE0LDUuMTcsOSwuMTcsMi40My4yNiw1LjU5LjM2LDkuMjVhMjI0LjE3LDIyNC4xNywwLDAsMCwxLjUsMjMuNGMxLjU0LDEwLjc2LDQsMTIuMjIsNC40OCwxMi40Ljg0LjMyLDIuNzktLjQ2LDUuNzYtMy41OUw0Myw4MC4wN0M0MS41Myw4MS41NywzNy42OCw4NS42NCwzMy4yMSw4NS42NVpNNzQuODEsNjlhMTEuMzQsMTEuMzQsMCwwLDAsNi4wOS02LjcyTDg3LjI2LDQ0LjUsNzQuNzIsMzIsNTYuOSwzOC4zNWMtMi4zNy44Ni01LjU3LDMuNDItNi42MSw2TDM4LjY1LDcyLjE0bDguNDIsOC40M1pNNTUsNDYuMjdhNy45MSw3LjkxLDAsMCwxLDMuNjQtMy4xN2wxNC44LTUuMyw4LDhMNzYuMTEsNjAuNmwtLjA2LjE5YTYuMzcsNi4zNywwLDAsMS0zLDMuNDNMNDguMjUsNzQuNTksNDQuNjIsNzFabTE2LjU3LDcuODJBNi45LDYuOSwwLDEsMCw2NC42NCw2MSw2LjkxLDYuOTEsMCwwLDAsNzEuNTQsNTQuMDlabS00LjA1LDBhMi44NSwyLjg1LDAsMSwxLTIuODUtMi44NUEyLjg2LDIuODYsMCwwLDEsNjcuNDksNTQuMDlabS00LjEzLDUuMjJMNjAuNSw1Ni40NSw0NC4yNiw3Mi43bDIuODYsMi44NlpNOTcuODMsMzUuNjcsODQuMTQsMjJsLTguNTcsOC41N0w4OS4yNiw0NC4yNFptLTEzLjY5LTgsOCw4LTIuODUsMi44NS04LThaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xNSAtMTUpIn0sZHJhd2Nsb3NlZHBhdGg6e3dpZHRoOjkwLGhlaWdodDo5MCxwYXRoOiJNODguNDEsMjEuMTJhMjYuNTYsMjYuNTYsMCwwLDAtMzYuMTgsMGwtMi4wNywyLTIuMDctMmEyNi41NywyNi41NywwLDAsMC0zNi4xOCwwLDIzLjc0LDIzLjc0LDAsMCwwLDAsMzQuOEw0OCw5MC4xMmEzLjIyLDMuMjIsMCwwLDAsNC40MiwwbDM2LTM0LjIxYTIzLjczLDIzLjczLDAsMCwwLDAtMzQuNzlaTTg0LDUxLjI0LDUwLjE2LDgzLjM1LDE2LjM1LDUxLjI1YTE3LjI4LDE3LjI4LDAsMCwxLDAtMjUuNDcsMjAsMjAsMCwwLDEsMjcuMywwbDQuMjksNC4wN2EzLjIzLDMuMjMsMCwwLDAsNC40NCwwbDQuMjktNC4wN2EyMCwyMCwwLDAsMSwyNy4zLDAsMTcuMjcsMTcuMjcsMCwwLDEsMCwyNS40NlpNNjYuNzYsNDcuNjhoLTMzdjYuOTFoMzNaTTUzLjM1LDM1SDQ2LjQ0VjY4aDYuOTFaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC01IC01KSJ9LGxhc3NvOnt3aWR0aDoxMDMxLGhlaWdodDoxZTMscGF0aDoibTEwMTggNTM4Yy0zNiAyMDctMjkwIDMzNi01NjggMjg2LTI3Ny00OC00NzMtMjU2LTQzNi00NjMgMTAtNTcgMzYtMTA4IDc2LTE1MS0xMy02NiAxMS0xMzcgNjgtMTgzIDM0LTI4IDc1LTQxIDExNC00MmwtNTUtNzAgMCAwYy0yLTEtMy0yLTQtMy0xMC0xNC04LTM0IDUtNDUgMTQtMTEgMzQtOCA0NSA0IDEgMSAyIDMgMiA1bDAgMCAxMTMgMTQwYzE2IDExIDMxIDI0IDQ1IDQwIDQgMyA2IDcgOCAxMSA0OC0zIDEwMCAwIDE1MSA5IDI3OCA0OCA0NzMgMjU1IDQzNiA0NjJ6IG0tNjI0LTM3OWMtODAgMTQtMTQ5IDQ4LTE5NyA5NiA0MiA0MiAxMDkgNDcgMTU2IDkgMzMtMjYgNDctNjYgNDEtMTA1eiBtLTE4Ny03NGMtMTkgMTYtMzMgMzctMzkgNjAgNTAtMzIgMTA5LTU1IDE3NC02OC00Mi0yNS05NS0yNC0xMzUgOHogbTM2MCA3NWMtMzQtNy02OS05LTEwMi04IDggNjItMTYgMTI4LTY4IDE3MC03MyA1OS0xNzUgNTQtMjQ0LTUtOSAyMC0xNiA0MC0yMCA2MS0yOCAxNTkgMTIxIDMxNyAzMzMgMzU0czQwNy02MCA0MzQtMjE3YzI4LTE1OS0xMjEtMzE4LTMzMy0zNTV6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxzZWxlY3Rib3g6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Im0wIDg1MGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NiAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg1IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbS04NTctMjg2bDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtODU3IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0tODU3LTI4NWwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTg1NyAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtLTg1Ny0yODZsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6IG0yODYgMGwwLTE0MyAxNDMgMCAwIDE0My0xNDMgMHogbTI4NSAwbDAtMTQzIDE0MyAwIDAgMTQzLTE0MyAweiBtMjg2IDBsMC0xNDMgMTQzIDAgMCAxNDMtMTQzIDB6Iix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAtMSAwIDg1MCkifSxkcmF3bGluZTp7d2lkdGg6NzAsaGVpZ2h0OjcwLHBhdGg6Ik02MC42NCw2Mi4zYTExLjI5LDExLjI5LDAsMCwwLDYuMDktNi43Mmw2LjM1LTE3LjcyTDYwLjU0LDI1LjMxbC0xNy44Miw2LjRjLTIuMzYuODYtNS41NywzLjQxLTYuNiw2TDI0LjQ4LDY1LjVsOC40Miw4LjQyWk00MC43OSwzOS42M2E3Ljg5LDcuODksMCwwLDEsMy42NS0zLjE3bDE0Ljc5LTUuMzEsOCw4TDYxLjk0LDU0bC0uMDYuMTlhNi40NCw2LjQ0LDAsMCwxLTMsMy40M0wzNC4wNyw2OGwtMy42Mi0zLjYzWm0xNi41Nyw3LjgxYTYuOSw2LjksMCwxLDAtNi44OSw2LjlBNi45LDYuOSwwLDAsMCw1Ny4zNiw0Ny40NFptLTQsMGEyLjg2LDIuODYsMCwxLDEtMi44NS0yLjg1QTIuODYsMi44NiwwLDAsMSw1My4zMiw0Ny40NFptLTQuMTMsNS4yMkw0Ni4zMyw0OS44LDMwLjA4LDY2LjA1bDIuODYsMi44NlpNODMuNjUsMjksNzAsMTUuMzQsNjEuNCwyMy45LDc1LjA5LDM3LjU5Wk03MCwyMS4wNmw4LDgtMi44NCwyLjg1LTgtOFpNODcsODAuNDlIMTAuNjdWODdIODdaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xNSAtMTUpIn0sZHJhd3JlY3Q6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNNzgsMjJWNzlIMjFWMjJINzhtOS05SDEyVjg4SDg3VjEzWk02OCw0Ni4yMkgzMVY1NEg2OFpNNTMsMzJINDUuMjJWNjlINTNaIix0cmFuc2Zvcm06Im1hdHJpeCgxIDAgMCAxIC0xMCAtMTApIn0sZHJhd2NpcmNsZTp7d2lkdGg6ODAsaGVpZ2h0OjgwLHBhdGg6Ik01MCw4NC43MkMyNi44NCw4NC43Miw4LDY5LjI4LDgsNTAuM1MyNi44NCwxNS44Nyw1MCwxNS44Nyw5MiwzMS4zMSw5Miw1MC4zLDczLjE2LDg0LjcyLDUwLDg0LjcyWm0wLTYwLjU5Yy0xOC42LDAtMzMuNzQsMTEuNzQtMzMuNzQsMjYuMTdTMzEuNCw3Ni40Niw1MCw3Ni40Niw4My43NCw2NC43Miw4My43NCw1MC4zLDY4LjYsMjQuMTMsNTAsMjQuMTNabTE3LjE1LDIyaC0zNHY3LjExaDM0Wm0tMTMuOC0xM0g0Ni4yNHYzNGg3LjExWiIsdHJhbnNmb3JtOiJtYXRyaXgoMSAwIDAgMSAtMTAgLTEwKSJ9LGVyYXNlc2hhcGU6e3dpZHRoOjgwLGhlaWdodDo4MCxwYXRoOiJNODIuNzcsNzhIMzEuODVMNiw0OS41NywzMS44NSwyMS4xNEg4Mi43N2E4LjcyLDguNzIsMCwwLDEsOC42NSw4Ljc3VjY5LjI0QTguNzIsOC43MiwwLDAsMSw4Mi43Nyw3OFpNMzUuNDYsNjkuODRIODIuNzdhLjU3LjU3LDAsMCwwLC40OS0uNlYyOS45MWEuNTcuNTcsMCwwLDAtLjQ5LS42MUgzNS40NkwxNyw0OS41N1ptMzIuNjgtMzQuNy0yNCwyNCw1LDUsMjQtMjRabS0xOSwuNTMtNSw1LDI0LDI0LDUtNVoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgLTEwIC0xMCkifSxzcGlrZWxpbmU6e3dpZHRoOjFlMyxoZWlnaHQ6MWUzLHBhdGg6Ik01MTIgNDA5YzAtNTctNDYtMTA0LTEwMy0xMDQtNTcgMC0xMDQgNDctMTA0IDEwNCAwIDU3IDQ3IDEwMyAxMDQgMTAzIDU3IDAgMTAzLTQ2IDEwMy0xMDN6IG0tMzI3LTM5bDkyIDAgMCA5Mi05MiAweiBtLTE4NSAwbDkyIDAgMCA5Mi05MiAweiBtMzcwLTE4Nmw5MiAwIDAgOTMtOTIgMHogbTAtMTg0bDkyIDAgMCA5Mi05MiAweiIsdHJhbnNmb3JtOiJtYXRyaXgoMS41IDAgMCAtMS41IDAgODUwKSJ9LHBlbmNpbDp7d2lkdGg6MTc5MixoZWlnaHQ6MTc5MixwYXRoOiJNNDkxIDE1MzZsOTEtOTEtMjM1LTIzNS05MSA5MXYxMDdoMTI4djEyOGgxMDd6bTUyMy05MjhxMC0yMi0yMi0yMi0xMCAwLTE3IDdsLTU0MiA1NDJxLTcgNy03IDE3IDAgMjIgMjIgMjIgMTAgMCAxNy03bDU0Mi01NDJxNy03IDctMTd6bS01NC0xOTJsNDE2IDQxNi04MzIgODMyaC00MTZ2LTQxNnptNjgzIDk2cTAgNTMtMzcgOTBsLTE2NiAxNjYtNDE2LTQxNiAxNjYtMTY1cTM2LTM4IDkwLTM4IDUzIDAgOTEgMzhsMjM1IDIzNHEzNyAzOSAzNyA5MXoiLHRyYW5zZm9ybToibWF0cml4KDEgMCAwIDEgMCAxKSJ9LG5ld3Bsb3RseWxvZ286e25hbWU6Im5ld3Bsb3RseWxvZ28iLHN2ZzoiPHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMzIgMTMyJz48ZGVmcz48c3R5bGU+LmNscy0xIHtmaWxsOiAjM2Y0Zjc1O30gLmNscy0yIHtmaWxsOiAjODBjZmJlO30gLmNscy0zIHtmaWxsOiAjZmZmO308L3N0eWxlPjwvZGVmcz48dGl0bGU+cGxvdGx5LWxvZ29tYXJrPC90aXRsZT48ZyBpZD0nc3ltYm9sJz48cmVjdCBjbGFzcz0nY2xzLTEnIHdpZHRoPScxMzInIGhlaWdodD0nMTMyJyByeD0nNicgcnk9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9Jzc4JyBjeT0nNTQnIHI9JzYnLz48Y2lyY2xlIGNsYXNzPSdjbHMtMicgY3g9JzEwMicgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc3OCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSc1NCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzMwJyByPSc2Jy8+PGNpcmNsZSBjbGFzcz0nY2xzLTInIGN4PSczMCcgY3k9JzU0JyByPSc2Jy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMzAsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsMzAsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNzgsNzJhNiw2LDAsMCwwLTYsNnYyNGE2LDYsMCwwLDAsMTIsMFY3OEE2LDYsMCwwLDAsNzgsNzJaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNNTQsNDhhNiw2LDAsMCwwLTYsNnY0OGE2LDYsMCwwLDAsMTIsMFY1NEE2LDYsMCwwLDAsNTQsNDhaJy8+PHBhdGggY2xhc3M9J2Nscy0zJyBkPSdNMTAyLDQ4YTYsNiwwLDAsMC02LDZ2NDhhNiw2LDAsMCwwLDEyLDBWNTRBNiw2LDAsMCwwLDEwMiw0OFonLz48L2c+PC9zdmc+In19fSx7fV0sNzU2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3IuaXNMZWZ0QW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJsZWZ0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng8PTEvM30sci5pc0NlbnRlckFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4iY2VudGVyIj09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+MS8zJiZ0Lng8Mi8zfSxyLmlzUmlnaHRBbmNob3I9ZnVuY3Rpb24odCl7cmV0dXJuInJpZ2h0Ij09PXQueGFuY2hvcnx8ImF1dG8iPT09dC54YW5jaG9yJiZ0Lng+PTIvM30sci5pc1RvcEFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4idG9wIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk+PTIvM30sci5pc01pZGRsZUFuY2hvcj1mdW5jdGlvbih0KXtyZXR1cm4ibWlkZGxlIj09PXQueWFuY2hvcnx8ImF1dG8iPT09dC55YW5jaG9yJiZ0Lnk+MS8zJiZ0Lnk8Mi8zfSxyLmlzQm90dG9tQW5jaG9yPWZ1bmN0aW9uKHQpe3JldHVybiJib3R0b20iPT09dC55YW5jaG9yfHwiYXV0byI9PT10LnlhbmNob3ImJnQueTw9MS8zfX0se31dLDc1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL21vZCIpLGk9bi5tb2QsYT1uLm1vZEhhbGYsbz1NYXRoLlBJLHM9MipvO2Z1bmN0aW9uIGwodCl7cmV0dXJuIE1hdGguYWJzKHRbMV0tdFswXSk+cy0xZS0xNH1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIGEoZS10LHMpfWZ1bmN0aW9uIHUodCxlKXtpZihsKGUpKXJldHVybiEwO3ZhciByLG47ZVswXTxlWzFdPyhyPWVbMF0sbj1lWzFdKToocj1lWzFdLG49ZVswXSksKHI9aShyLHMpKT4obj1pKG4scykpJiYobis9cyk7dmFyIGE9aSh0LHMpLG89YStzO3JldHVybiBhPj1yJiZhPD1ufHxvPj1yJiZvPD1ufWZ1bmN0aW9uIGYodCxlLHIsbixpLGEsYyl7aT1pfHwwLGE9YXx8MDt2YXIgdSxmLGgscCxkLG09bChbcixuXSk7ZnVuY3Rpb24gZyh0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpK2ksYS10Kk1hdGguc2luKGUpXX1tPyh1PTAsZj1vLGg9cyk6cjxuPyh1PXIsaD1uKToodT1uLGg9ciksdDxlPyhwPXQsZD1lKToocD1lLGQ9dCk7dmFyIHYseT1NYXRoLmFicyhoLXUpPD1vPzA6MTtmdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm4iQSIrW3QsdF0rIiAiK1swLHkscl0rIiAiK2codCxlKX1yZXR1cm4gbT92PW51bGw9PT1wPyJNIitnKGQsdSkreChkLGYsMCkreChkLGgsMCkrIloiOiJNIitnKHAsdSkreChwLGYsMCkreChwLGgsMCkrIlpNIitnKGQsdSkreChkLGYsMSkreChkLGgsMSkrIloiOm51bGw9PT1wPyh2PSJNIitnKGQsdSkreChkLGgsMCksYyYmKHYrPSJMMCwwWiIpKTp2PSJNIitnKHAsdSkrIkwiK2coZCx1KSt4KGQsaCwwKSsiTCIrZyhwLGgpK3gocCx1LDEpKyJaIix2fWUuZXhwb3J0cz17ZGVnMnJhZDpmdW5jdGlvbih0KXtyZXR1cm4gdC8xODAqb30scmFkMmRlZzpmdW5jdGlvbih0KXtyZXR1cm4gdC9vKjE4MH0sYW5nbGVEZWx0YTpjLGFuZ2xlRGlzdDpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhjKHQsZSkpfSxpc0Z1bGxDaXJjbGU6bCxpc0FuZ2xlSW5zaWRlU2VjdG9yOnUsaXNQdEluc2lkZVNlY3RvcjpmdW5jdGlvbih0LGUscixuKXtyZXR1cm4hIXUoZSxuKSYmKHJbMF08clsxXT8oaT1yWzBdLGE9clsxXSk6KGk9clsxXSxhPXJbMF0pLHQ+PWkmJnQ8PWEpO3ZhciBpLGF9LHBhdGhBcmM6ZnVuY3Rpb24odCxlLHIsbixpKXtyZXR1cm4gZihudWxsLHQsZSxyLG4saSwwKX0scGF0aFNlY3RvcjpmdW5jdGlvbih0LGUscixuLGkpe3JldHVybiBmKG51bGwsdCxlLHIsbixpLDEpfSxwYXRoQW5udWx1czpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIGYodCxlLHIsbixpLGEsMSl9fX0seyIuL21vZCI6NzgzfV0sNzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPUFycmF5LmlzQXJyYXksaT0idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXI6e2lzVmlldzpmdW5jdGlvbigpe3JldHVybiExfX0sYT0idW5kZWZpbmVkIj09dHlwZW9mIERhdGFWaWV3P2Z1bmN0aW9uKCl7fTpEYXRhVmlldztmdW5jdGlvbiBvKHQpe3JldHVybiBpLmlzVmlldyh0KSYmISh0IGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gbih0KXx8byh0KX1mdW5jdGlvbiBsKHQsZSxyKXtpZihzKHQpKXtpZihzKHRbMF0pKXtmb3IodmFyIG49cixpPTA7aTx0Lmxlbmd0aDtpKyspbj1lKG4sdFtpXS5sZW5ndGgpO3JldHVybiBufXJldHVybiB0Lmxlbmd0aH1yZXR1cm4gMH1yLmlzVHlwZWRBcnJheT1vLHIuaXNBcnJheU9yVHlwZWRBcnJheT1zLHIuaXNBcnJheTFEPWZ1bmN0aW9uKHQpe3JldHVybiFzKHRbMF0pfSxyLmVuc3VyZUFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odCl8fCh0PVtdKSx0Lmxlbmd0aD1lLHR9LHIuY29uY2F0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLGksYSxvLHMsbCxjPVtdLHU9ITAsZj0wO2ZvcihyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKykobz0oaT1hcmd1bWVudHNbcl0pLmxlbmd0aCkmJihlP2MucHVzaChpKTooZT1pLGE9byksbihpKT90PSExOih1PSExLGY/dCE9PWkuY29uc3RydWN0b3ImJih0PSExKTp0PWkuY29uc3RydWN0b3IpLGYrPW8pO2lmKCFmKXJldHVybltdO2lmKCFjLmxlbmd0aClyZXR1cm4gZTtpZih1KXJldHVybiBlLmNvbmNhdC5hcHBseShlLGMpO2lmKHQpe2Zvcigocz1uZXcgdChmKSkuc2V0KGUpLHI9MDtyPGMubGVuZ3RoO3IrKylpPWNbcl0scy5zZXQoaSxhKSxhKz1pLmxlbmd0aDtyZXR1cm4gc31mb3Iocz1uZXcgQXJyYXkoZiksbD0wO2w8ZS5sZW5ndGg7bCsrKXNbbF09ZVtsXTtmb3Iocj0wO3I8Yy5sZW5ndGg7cisrKXtmb3IoaT1jW3JdLGw9MDtsPGkubGVuZ3RoO2wrKylzW2ErbF09aVtsXTthKz1sfXJldHVybiBzfSxyLm1heFJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWF4LDApfSxyLm1pblJvd0xlbmd0aD1mdW5jdGlvbih0KXtyZXR1cm4gbCh0LE1hdGgubWluLDEvMCl9fSx7fV0sNzU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9L15bJyIlLCQjXHMnXSt8WywgXXxbJyIlLCQjXHMnXSskL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKHQ9dC5yZXBsYWNlKGEsIiIpKSxuKHQpP051bWJlcih0KTppfX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3NjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7ZS5fZ2xjYW52YXMmJmUuX2dsY2FudmFzLnNpemUoKSYmZS5fZ2xjYW52YXMuZWFjaCgoZnVuY3Rpb24odCl7dC5yZWdsJiZ0LnJlZ2wuY2xlYXIoe2NvbG9yOiEwLGRlcHRoOiEwfSl9KSl9fSx7fV0sNzYxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyJiYod2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlciksZGVsZXRlIHQuX3Jlc3BvbnNpdmVDaGFydEhhbmRsZXIpfX0se31dLDc2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL3NjYWxlcyIpLHM9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNLGM9dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSx1PXQoIi4vcmVnZXgiKS5jb3VudGVyLGY9dCgiLi9tb2QiKS5tb2RIYWxmLGg9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZnVuY3Rpb24gcCh0LGUpe3ZhciBuPXIudmFsT2JqZWN0TWV0YVtlLnZhbFR5cGVdO2lmKGUuYXJyYXlPayYmaCh0KSlyZXR1cm4hMDtpZihuLnZhbGlkYXRlRnVuY3Rpb24pcmV0dXJuIG4udmFsaWRhdGVGdW5jdGlvbih0LGUpO3ZhciBpPXt9LGE9aSxvPXtzZXQ6ZnVuY3Rpb24odCl7YT10fX07cmV0dXJuIG4uY29lcmNlRnVuY3Rpb24odCxvLGksZSksYSE9PWl9ci52YWxPYmplY3RNZXRhPXtkYXRhX2FycmF5Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7aCh0KT9lLnNldCh0KTp2b2lkIDAhPT1yJiZlLnNldChyKX19LGVudW1lcmF0ZWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe24uY29lcmNlTnVtYmVyJiYodD0rdCksLTE9PT1uLnZhbHVlcy5pbmRleE9mKHQpP2Uuc2V0KHIpOmUuc2V0KHQpfSx2YWxpZGF0ZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSl7ZS5jb2VyY2VOdW1iZXImJih0PSt0KTtmb3IodmFyIHI9ZS52YWx1ZXMsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1TdHJpbmcocltuXSk7aWYoIi8iPT09aS5jaGFyQXQoMCkmJiIvIj09PWkuY2hhckF0KGkubGVuZ3RoLTEpKXtpZihuZXcgUmVnRXhwKGkuc3Vic3RyKDEsaS5sZW5ndGgtMikpLnRlc3QodCkpcmV0dXJuITB9ZWxzZSBpZih0PT09cltuXSlyZXR1cm4hMH1yZXR1cm4hMX19LGJvb2xlYW46e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXshMD09PXR8fCExPT09dD9lLnNldCh0KTplLnNldChyKX19LG51bWJlcjp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIsaSl7IW4odCl8fHZvaWQgMCE9PWkubWluJiZ0PGkubWlufHx2b2lkIDAhPT1pLm1heCYmdD5pLm1heD9lLnNldChyKTplLnNldCgrdCl9fSxpbnRlZ2VyOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixpKXt0JTF8fCFuKHQpfHx2b2lkIDAhPT1pLm1pbiYmdDxpLm1pbnx8dm9pZCAwIT09aS5tYXgmJnQ+aS5tYXg/ZS5zZXQocik6ZS5zZXQoK3QpfX0sc3RyaW5nOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscixuKXtpZigic3RyaW5nIiE9dHlwZW9mIHQpe3ZhciBpPSJudW1iZXIiPT10eXBlb2YgdDshMCE9PW4uc3RyaWN0JiZpP2Uuc2V0KFN0cmluZyh0KSk6ZS5zZXQocil9ZWxzZSBuLm5vQmxhbmsmJiF0P2Uuc2V0KHIpOmUuc2V0KHQpfX0sY29sb3I6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyKXtpKHQpLmlzVmFsaWQoKT9lLnNldCh0KTplLnNldChyKX19LGNvbG9ybGlzdDp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpe0FycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoJiZ0LmV2ZXJ5KChmdW5jdGlvbih0KXtyZXR1cm4gaSh0KS5pc1ZhbGlkKCl9KSk/ZS5zZXQodCk6ZS5zZXQocil9fSxjb2xvcnNjYWxlOntjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7ZS5zZXQoby5nZXQodCxyKSl9fSxhbmdsZTp7Y29lcmNlRnVuY3Rpb246ZnVuY3Rpb24odCxlLHIpeyJhdXRvIj09PXQ/ZS5zZXQoImF1dG8iKTpuKHQpP2Uuc2V0KGYoK3QsMzYwKSk6ZS5zZXQocil9fSxzdWJwbG90aWQ6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4ucmVnZXh8fHUocik7InN0cmluZyI9PXR5cGVvZiB0JiZpLnRlc3QodCk/ZS5zZXQodCk6ZS5zZXQocil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmRmbHQ7cmV0dXJuIHQ9PT1yfHwic3RyaW5nIj09dHlwZW9mIHQmJiEhdShyKS50ZXN0KHQpfX0sZmxhZ2xpc3Q6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgdClpZigtMT09PShuLmV4dHJhc3x8W10pLmluZGV4T2YodCkpe2Zvcih2YXIgaT10LnNwbGl0KCIrIiksYT0wO2E8aS5sZW5ndGg7KXt2YXIgbz1pW2FdOy0xPT09bi5mbGFncy5pbmRleE9mKG8pfHxpLmluZGV4T2Yobyk8YT9pLnNwbGljZShhLDEpOmErK31pLmxlbmd0aD9lLnNldChpLmpvaW4oIisiKSk6ZS5zZXQocil9ZWxzZSBlLnNldCh0KTtlbHNlIGUuc2V0KHIpfX0sYW55Ontjb2VyY2VGdW5jdGlvbjpmdW5jdGlvbih0LGUscil7dm9pZCAwPT09dD9lLnNldChyKTplLnNldCh0KX19LGluZm9fYXJyYXk6e2NvZXJjZUZ1bmN0aW9uOmZ1bmN0aW9uKHQsZSxuLGkpe2Z1bmN0aW9uIGEodCxlLG4pe3ZhciBpLGE9e3NldDpmdW5jdGlvbih0KXtpPXR9fTtyZXR1cm4gdm9pZCAwPT09biYmKG49ZS5kZmx0KSxyLnZhbE9iamVjdE1ldGFbZS52YWxUeXBlXS5jb2VyY2VGdW5jdGlvbih0LGEsbixlKSxpfXZhciBvPTI9PT1pLmRpbWVuc2lvbnN8fCIxLTIiPT09aS5kaW1lbnNpb25zJiZBcnJheS5pc0FycmF5KHQpJiZBcnJheS5pc0FycmF5KHRbMF0pO2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBzLGwsYyx1LGYsaCxwPWkuaXRlbXMsZD1bXSxtPUFycmF5LmlzQXJyYXkocCksZz1tJiZvJiZBcnJheS5pc0FycmF5KHBbMF0pLHY9byYmbSYmIWcseT1tJiYhdj9wLmxlbmd0aDp0Lmxlbmd0aDtpZihuPUFycmF5LmlzQXJyYXkobik/bjpbXSxvKWZvcihzPTA7czx5O3MrKylmb3IoZFtzXT1bXSxjPUFycmF5LmlzQXJyYXkodFtzXSk/dFtzXTpbXSxmPXY/cC5sZW5ndGg6bT9wW3NdLmxlbmd0aDpjLmxlbmd0aCxsPTA7bDxmO2wrKyl1PXY/cFtsXTptP3Bbc11bbF06cCx2b2lkIDAhPT0oaD1hKGNbbF0sdSwobltzXXx8W10pW2xdKSkmJihkW3NdW2xdPWgpO2Vsc2UgZm9yKHM9MDtzPHk7cysrKXZvaWQgMCE9PShoPWEodFtzXSxtP3Bbc106cCxuW3NdKSkmJihkW3NdPWgpO2Uuc2V0KGQpfWVsc2UgZS5zZXQobil9LHZhbGlkYXRlRnVuY3Rpb246ZnVuY3Rpb24odCxlKXtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTt2YXIgcj1lLml0ZW1zLG49QXJyYXkuaXNBcnJheShyKSxpPTI9PT1lLmRpbWVuc2lvbnM7aWYoIWUuZnJlZUxlbmd0aCYmdC5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKylpZihpKXtpZighQXJyYXkuaXNBcnJheSh0W2FdKXx8IWUuZnJlZUxlbmd0aCYmdFthXS5sZW5ndGghPT1yW2FdLmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIG89MDtvPHRbYV0ubGVuZ3RoO28rKylpZighcCh0W2FdW29dLG4/clthXVtvXTpyKSlyZXR1cm4hMX1lbHNlIGlmKCFwKHRbYV0sbj9yW2FdOnIpKXJldHVybiExO3JldHVybiEwfX19LHIuY29lcmNlPWZ1bmN0aW9uKHQsZSxuLGksYSl7dmFyIG89YyhuLGkpLmdldCgpLHM9Yyh0LGkpLGw9YyhlLGkpLHU9cy5nZXQoKSxmPWUuX3RlbXBsYXRlO2lmKHZvaWQgMD09PXUmJmYmJih1PWMoZixpKS5nZXQoKSxmPTApLHZvaWQgMD09PWEmJihhPW8uZGZsdCksby5hcnJheU9rJiZoKHUpKXJldHVybiBsLnNldCh1KSx1O3ZhciBkPXIudmFsT2JqZWN0TWV0YVtvLnZhbFR5cGVdLmNvZXJjZUZ1bmN0aW9uO2QodSxsLGEsbyk7dmFyIG09bC5nZXQoKTtyZXR1cm4gZiYmbT09PWEmJiFwKHUsbykmJihkKHU9YyhmLGkpLmdldCgpLGwsYSxvKSxtPWwuZ2V0KCkpLG19LHIuY29lcmNlMj1mdW5jdGlvbih0LGUsbixpLGEpe3ZhciBvPWModCxpKSxzPXIuY29lcmNlKHQsZSxuLGksYSksbD1vLmdldCgpO3JldHVybiBudWxsIT1sJiZzfSxyLmNvZXJjZUZvbnQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXt9O3JldHVybiByPXJ8fHt9LG4uZmFtaWx5PXQoZSsiLmZhbWlseSIsci5mYW1pbHkpLG4uc2l6ZT10KGUrIi5zaXplIixyLnNpemUpLG4uY29sb3I9dChlKyIuY29sb3IiLHIuY29sb3IpLG59LHIuY29lcmNlUGF0dGVybj1mdW5jdGlvbih0LGUscixuKXtpZih0KGUrIi5zaGFwZSIpKXt0KGUrIi5zb2xpZGl0eSIpLHQoZSsiLnNpemUiKTt2YXIgaT0ib3ZlcmxheSI9PT10KGUrIi5maWxsbW9kZSIpO2lmKCFuKXt2YXIgYT10KGUrIi5iZ2NvbG9yIixpP3I6dm9pZCAwKTt0KGUrIi5mZ2NvbG9yIixpP3MuY29udHJhc3QoYSk6cil9dChlKyIuZmdvcGFjaXR5IixpPy41OjEpfX0sci5jb2VyY2VIb3ZlcmluZm89ZnVuY3Rpb24odCxlLG4pe3ZhciBpLG89ZS5fbW9kdWxlLmF0dHJpYnV0ZXMscz1vLmhvdmVyaW5mbz9vOmEsbD1zLmhvdmVyaW5mbztpZigxPT09bi5fZGF0YUxlbmd0aCl7dmFyIGM9ImFsbCI9PT1sLmRmbHQ/bC5mbGFncy5zbGljZSgpOmwuZGZsdC5zcGxpdCgiKyIpO2Muc3BsaWNlKGMuaW5kZXhPZigibmFtZSIpLDEpLGk9Yy5qb2luKCIrIil9cmV0dXJuIHIuY29lcmNlKHQsZSxzLCJob3ZlcmluZm8iLGkpfSxyLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHk9ZnVuY3Rpb24odCxlKXtpZih0Lm1hcmtlcil7dmFyIHIsbixpPXQubWFya2VyLm9wYWNpdHk7aWYodm9pZCAwIT09aSloKGkpfHx0LnNlbGVjdGVkfHx0LnVuc2VsZWN0ZWR8fChyPWksbj1sKmkpLGUoInNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixyKSxlKCJ1bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5IixuKX19LHIudmFsaWRhdGU9cH0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9zY2FsZXMiOjY1NCwiLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4vYXJyYXkiOjc1OCwiLi9tb2QiOjc4MywiLi9uZXN0ZWRfcHJvcGVydHkiOjc4NCwiLi9yZWdleCI6NzkzLCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNzYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJkMy10aW1lLWZvcm1hdCIpLnRpbWVGb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi9sb2dnZXJzIiksbD10KCIuL21vZCIpLm1vZCxjPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKSx1PWMuQkFETlVNLGY9Yy5PTkVEQVksaD1jLk9ORUhPVVIscD1jLk9ORU1JTixkPWMuT05FU0VDLG09Yy5FUE9DSEpELGc9dCgiLi4vcmVnaXN0cnkiKSx2PXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LHk9L15ccyooLT9cZFxkXGRcZHxcZFxkKSgtKFxkP1xkKSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSx4PS9eXHMqKC0/XGRcZFxkXGR8XGRcZCkoLShcZD9cZGk/KSgtKFxkP1xkKShbIFR0XShbMDFdP1xkfDJbMC0zXSkoOihbMC01XVxkKSg6KFswLTVdXGQoXC5cZCspPykpPyhafHp8WytcLV1cZFxkKDo/XGRcZCk/KT8pPyk/KT8pP1xzKiQvbSxiPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS03MDtmdW5jdGlvbiBfKHQpe3JldHVybiB0JiZnLmNvbXBvbmVudHNSZWdpc3RyeS5jYWxlbmRhcnMmJiJzdHJpbmciPT10eXBlb2YgdCYmImdyZWdvcmlhbiIhPT10fWZ1bmN0aW9uIHcodCxlKXtyZXR1cm4gU3RyaW5nKHQrTWF0aC5wb3coMTAsZSkpLnN1YnN0cigxKX1yLmRhdGVUaWNrMD1mdW5jdGlvbih0LGUpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIF8odCk/ZT9nLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiQ0FOT05JQ0FMX1NVTkRBWSIpW3RdOmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJDQU5PTklDQUxfVElDSyIpW3RdOmU/IjIwMDAtMDEtMDIiOiIyMDAwLTAxLTAxIn0odCwhIWUpO2lmKGU8MilyZXR1cm4gbjt2YXIgaT1yLmRhdGVUaW1lMm1zKG4sdCk7cmV0dXJuIGkrPWYqKGUtMSksci5tczJEYXRlVGltZShpLDAsdCl9LHIuZGZsdFJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBfKHQpP2cuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJERkxUUkFOR0UiKVt0XTpbIjIwMDAtMDEtMDEiLCIyMDAxLTAxLTAxIl19LHIuaXNKU0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCYmImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0VGltZX0sci5kYXRlVGltZTJtcz1mdW5jdGlvbih0LGUpe2lmKHIuaXNKU0RhdGUodCkpe3ZhciBhPXQuZ2V0VGltZXpvbmVPZmZzZXQoKSpwLG89KHQuZ2V0VVRDTWludXRlcygpLXQuZ2V0TWludXRlcygpKSpwKyh0LmdldFVUQ1NlY29uZHMoKS10LmdldFNlY29uZHMoKSkqZCsodC5nZXRVVENNaWxsaXNlY29uZHMoKS10LmdldE1pbGxpc2Vjb25kcygpKTtpZihvKXt2YXIgcz0zKnA7YT1hLXMvMitsKG8tYStzLzIscyl9cmV0dXJuKHQ9TnVtYmVyKHQpLWEpPj1uJiZ0PD1pP3Q6dX1pZigic3RyaW5nIiE9dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gdTt0PVN0cmluZyh0KTt2YXIgYz1fKGUpLHY9dC5jaGFyQXQoMCk7IWN8fCJHIiE9PXYmJiJnIiE9PXZ8fCh0PXQuc3Vic3RyKDEpLGU9IiIpO3ZhciB3PWMmJiJjaGluZXNlIj09PWUuc3Vic3RyKDAsNyksVD10Lm1hdGNoKHc/eDp5KTtpZighVClyZXR1cm4gdTt2YXIgaz1UWzFdLEE9VFszXXx8IjEiLE09TnVtYmVyKFRbNV18fDEpLFM9TnVtYmVyKFRbN118fDApLEU9TnVtYmVyKFRbOV18fDApLEw9TnVtYmVyKFRbMTFdfHwwKTtpZihjKXtpZigyPT09ay5sZW5ndGgpcmV0dXJuIHU7dmFyIEM7az1OdW1iZXIoayk7dHJ5e3ZhciBQPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKTtpZih3KXt2YXIgST0iaSI9PT1BLmNoYXJBdChBLmxlbmd0aC0xKTtBPXBhcnNlSW50KEEsMTApLEM9UC5uZXdEYXRlKGssUC50b01vbnRoSW5kZXgoayxBLEkpLE0pfWVsc2UgQz1QLm5ld0RhdGUoayxOdW1iZXIoQSksTSl9Y2F0Y2godCl7cmV0dXJuIHV9cmV0dXJuIEM/KEMudG9KRCgpLW0pKmYrUypoK0UqcCtMKmQ6dX1rPTI9PT1rLmxlbmd0aD8oTnVtYmVyKGspKzJlMy1iKSUxMDArYjpOdW1iZXIoayksQS09MTt2YXIgTz1uZXcgRGF0ZShEYXRlLlVUQygyZTMsQSxNLFMsRSkpO3JldHVybiBPLnNldFVUQ0Z1bGxZZWFyKGspLE8uZ2V0VVRDTW9udGgoKSE9PUF8fE8uZ2V0VVRDRGF0ZSgpIT09TT91Ok8uZ2V0VGltZSgpK0wqZH0sbj1yLk1JTl9NUz1yLmRhdGVUaW1lMm1zKCItOTk5OSIpLGk9ci5NQVhfTVM9ci5kYXRlVGltZTJtcygiOTk5OS0xMi0zMSAyMzo1OTo1OS45OTk5Iiksci5pc0RhdGVUaW1lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuZGF0ZVRpbWUybXModCxlKSE9PXV9O3ZhciBUPTkwKmYsaz0zKmgsQT01KnA7ZnVuY3Rpb24gTSh0LGUscixuLGkpe2lmKChlfHxyfHxufHxpKSYmKHQrPSIgIit3KGUsMikrIjoiK3cociwyKSwobnx8aSkmJih0Kz0iOiIrdyhuLDIpLGkpKSl7Zm9yKHZhciBhPTQ7aSUxMD09MDspYS09MSxpLz0xMDt0Kz0iLiIrdyhpLGEpfXJldHVybiB0fXIubXMyRGF0ZVRpbWU9ZnVuY3Rpb24odCxlLHIpe2lmKCJudW1iZXIiIT10eXBlb2YgdHx8ISh0Pj1uJiZ0PD1pKSlyZXR1cm4gdTtlfHwoZT0wKTt2YXIgYSxvLHMsYyx5LHgsYj1NYXRoLmZsb29yKDEwKmwodCsuMDUsMSkpLHc9TWF0aC5yb3VuZCh0LWIvMTApO2lmKF8ocikpe3ZhciBTPU1hdGguZmxvb3Iody9mKSttLEU9TWF0aC5mbG9vcihsKHQsZikpO3RyeXthPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKS5mcm9tSkQoUykuZm9ybWF0RGF0ZSgieXl5eS1tbS1kZCIpfWNhdGNoKHQpe2E9digiRyVZLSVtLSVkIikobmV3IERhdGUodykpfWlmKCItIj09PWEuY2hhckF0KDApKWZvcig7YS5sZW5ndGg8MTE7KWE9Ii0wIithLnN1YnN0cigxKTtlbHNlIGZvcig7YS5sZW5ndGg8MTA7KWE9IjAiK2E7bz1lPFQ/TWF0aC5mbG9vcihFL2gpOjAscz1lPFQ/TWF0aC5mbG9vcihFJWgvcCk6MCxjPWU8az9NYXRoLmZsb29yKEUlcC9kKTowLHk9ZTxBP0UlZCoxMCtiOjB9ZWxzZSB4PW5ldyBEYXRlKHcpLGE9digiJVktJW0tJWQiKSh4KSxvPWU8VD94LmdldFVUQ0hvdXJzKCk6MCxzPWU8VD94LmdldFVUQ01pbnV0ZXMoKTowLGM9ZTxrP3guZ2V0VVRDU2Vjb25kcygpOjAseT1lPEE/MTAqeC5nZXRVVENNaWxsaXNlY29uZHMoKStiOjA7cmV0dXJuIE0oYSxvLHMsYyx5KX0sci5tczJEYXRlVGltZUxvY2FsPWZ1bmN0aW9uKHQpe2lmKCEodD49bitmJiZ0PD1pLWYpKXJldHVybiB1O3ZhciBlPU1hdGguZmxvb3IoMTAqbCh0Ky4wNSwxKSkscj1uZXcgRGF0ZShNYXRoLnJvdW5kKHQtZS8xMCkpO3JldHVybiBNKGEoIiVZLSVtLSVkIikociksci5nZXRIb3VycygpLHIuZ2V0TWludXRlcygpLHIuZ2V0U2Vjb25kcygpLDEwKnIuZ2V0VVRDTWlsbGlzZWNvbmRzKCkrZSl9LHIuY2xlYW5EYXRlPWZ1bmN0aW9uKHQsZSxuKXtpZih0PT09dSlyZXR1cm4gZTtpZihyLmlzSlNEYXRlKHQpfHwibnVtYmVyIj09dHlwZW9mIHQmJmlzRmluaXRlKHQpKXtpZihfKG4pKXJldHVybiBzLmVycm9yKCJKUyBEYXRlcyBhbmQgbWlsbGlzZWNvbmRzIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB3b3JsZCBjYWxlbmRhcnMiLHQpLGU7aWYoISh0PXIubXMyRGF0ZVRpbWVMb2NhbCgrdCkpJiZ2b2lkIDAhPT1lKXJldHVybiBlfWVsc2UgaWYoIXIuaXNEYXRlVGltZSh0LG4pKXJldHVybiBzLmVycm9yKCJ1bnJlY29nbml6ZWQgZGF0ZSIsdCksZTtyZXR1cm4gdH07dmFyIFM9LyVcZD9mL2csRT0vJWgvZyxMPXsxOiIxIiwyOiIxIiwzOiIyIiw0OiIyIn07ZnVuY3Rpb24gQyh0LGUscixuKXt0PXQucmVwbGFjZShTLChmdW5jdGlvbih0KXt2YXIgcj1NYXRoLm1pbigrdC5jaGFyQXQoMSl8fDYsNik7cmV0dXJuKGUvMWUzJTErMikudG9GaXhlZChyKS5zdWJzdHIoMikucmVwbGFjZSgvMCskLywiIil8fCIwIn0pKTt2YXIgaT1uZXcgRGF0ZShNYXRoLmZsb29yKGUrLjA1KSk7aWYodD10LnJlcGxhY2UoRSwoZnVuY3Rpb24oKXtyZXR1cm4gTFtyKCIlcSIpKGkpXX0pKSxfKG4pKXRyeXt0PWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJ3b3JsZENhbEZtdCIpKHQsZSxuKX1jYXRjaCh0KXtyZXR1cm4iSW52YWxpZCJ9cmV0dXJuIHIodCkoaSl9dmFyIFA9WzU5LDU5LjksNTkuOTksNTkuOTk5LDU5Ljk5OTldO3IuZm9ybWF0RGF0ZT1mdW5jdGlvbih0LGUscixuLGksYSl7aWYoaT1fKGkpJiZpLCFlKWlmKCJ5Ij09PXIpZT1hLnllYXI7ZWxzZSBpZigibSI9PT1yKWU9YS5tb250aDtlbHNle2lmKCJkIiE9PXIpcmV0dXJuIGZ1bmN0aW9uKHQsZSl7dmFyIHI9bCh0Ky4wNSxmKSxuPXcoTWF0aC5mbG9vcihyL2gpLDIpKyI6Iit3KGwoTWF0aC5mbG9vcihyL3ApLDYwKSwyKTtpZigiTSIhPT1lKXtvKGUpfHwoZT0wKTt2YXIgaT0oMTAwK01hdGgubWluKGwodC9kLDYwKSxQW2VdKSkudG9GaXhlZChlKS5zdWJzdHIoMSk7ZT4wJiYoaT1pLnJlcGxhY2UoLzArJC8sIiIpLnJlcGxhY2UoL1tcLl0kLywiIikpLG4rPSI6IitpfXJldHVybiBufSh0LHIpKyJcbiIrQyhhLmRheU1vbnRoWWVhcix0LG4saSk7ZT1hLmRheU1vbnRoKyJcbiIrYS55ZWFyfXJldHVybiBDKGUsdCxuLGkpfTt2YXIgST0zKmY7ci5pbmNyZW1lbnRNb250aD1mdW5jdGlvbih0LGUscil7cj1fKHIpJiZyO3ZhciBuPWwodCxmKTtpZih0PU1hdGgucm91bmQodC1uKSxyKXRyeXt2YXIgaT1NYXRoLnJvdW5kKHQvZikrbSxhPWcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShyKSxvPWEuZnJvbUpEKGkpO3JldHVybiBlJTEyP2EuYWRkKG8sZSwibSIpOmEuYWRkKG8sZS8xMiwieSIpLChvLnRvSkQoKS1tKSpmK259Y2F0Y2goZSl7cy5lcnJvcigiaW52YWxpZCBtcyAiK3QrIiBpbiBjYWxlbmRhciAiK3IpfXZhciBjPW5ldyBEYXRlKHQrSSk7cmV0dXJuIGMuc2V0VVRDTW9udGgoYy5nZXRVVENNb250aCgpK2UpK24tSX0sci5maW5kRXhhY3REYXRlcz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGk9MCxhPTAscz0wLGw9MCxjPV8oZSkmJmcuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJnZXRDYWwiKShlKSx1PTA7dTx0Lmxlbmd0aDt1KyspaWYobj10W3VdLG8obikpe2lmKCEobiVmKSlpZihjKXRyeXsxPT09KHI9Yy5mcm9tSkQobi9mK20pKS5kYXkoKT8xPT09ci5tb250aCgpP2krKzphKys6cysrfWNhdGNoKHQpe31lbHNlIDE9PT0ocj1uZXcgRGF0ZShuKSkuZ2V0VVRDRGF0ZSgpPzA9PT1yLmdldFVUQ01vbnRoKCk/aSsrOmErKzpzKyt9ZWxzZSBsKys7cys9YSs9aTt2YXIgaD10Lmxlbmd0aC1sO3JldHVybntleGFjdFllYXJzOmkvaCxleGFjdE1vbnRoczphL2gsZXhhY3REYXlzOnMvaH19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vcmVnaXN0cnkiOjkwNCwiLi9sb2dnZXJzIjo3ODAsIi4vbW9kIjo3ODMsImQzLXRpbWUtZm9ybWF0IjoxNjgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi9sb2dnZXJzIiksYT10KCIuL21hdHJpeCIpLG89dCgiZ2wtbWF0NCIpO2Z1bmN0aW9uIHModCl7dmFyIGU9dCYmdC5wYXJlbnROb2RlO2UmJmUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24gbCh0LGUscil7dmFyIG49InBsb3RseS5qcy1zdHlsZS0iK3QsYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChuKTthfHwoKGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSkuc2V0QXR0cmlidXRlKCJpZCIsbiksYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIikpLGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoYSkpO3ZhciBvPWEuc2hlZXQ7by5pbnNlcnRSdWxlP28uaW5zZXJ0UnVsZShlKyJ7IityKyJ9IiwwKTpvLmFkZFJ1bGU/by5hZGRSdWxlKGUsciwwKTppLndhcm4oImFkZFN0eWxlUnVsZSBmYWlsZWQiKX1mdW5jdGlvbiBjKHQpe3ZhciBlPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCkscj1lLmdldFByb3BlcnR5VmFsdWUoIi13ZWJraXQtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW1vei10cmFuc2Zvcm0iKXx8ZS5nZXRQcm9wZXJ0eVZhbHVlKCItbXMtdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgiLW8tdHJhbnNmb3JtIil8fGUuZ2V0UHJvcGVydHlWYWx1ZSgidHJhbnNmb3JtIik7cmV0dXJuIm5vbmUiPT09cj9udWxsOnIucmVwbGFjZSgibWF0cml4IiwiIikucmVwbGFjZSgiM2QiLCIiKS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuK3R9KSl9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9W107Zih0KTspZS5wdXNoKHQpLHQ9dC5wYXJlbnROb2RlO3JldHVybiBlfWZ1bmN0aW9uIGYodCl7cmV0dXJuIHQmJih0IGluc3RhbmNlb2YgRWxlbWVudHx8dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KX1lLmV4cG9ydHM9e2dldEdyYXBoRGl2OmZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciPT10eXBlb2YgdCl7aWYobnVsbD09PShlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKSl0aHJvdyBuZXcgRXJyb3IoIk5vIERPTSBlbGVtZW50IHdpdGggaWQgJyIrdCsiJyBleGlzdHMgb24gdGhlIHBhZ2UuIik7cmV0dXJuIGV9aWYobnVsbD09dCl0aHJvdyBuZXcgRXJyb3IoIkRPTSBlbGVtZW50IHByb3ZpZGVkIGlzIG51bGwgb3IgdW5kZWZpbmVkIik7cmV0dXJuIHR9LGlzUGxvdERpdjpmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KTtyZXR1cm4gZS5ub2RlKClpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZlLnNpemUoKSYmZS5jbGFzc2VkKCJqcy1wbG90bHktcGxvdCIpfSxyZW1vdmVFbGVtZW50OnMsYWRkU3R5bGVSdWxlOmZ1bmN0aW9uKHQsZSl7bCgiZ2xvYmFsIix0LGUpfSxhZGRSZWxhdGVkU3R5bGVSdWxlOmwsZGVsZXRlUmVsYXRlZFN0eWxlUnVsZTpmdW5jdGlvbih0KXt2YXIgZT0icGxvdGx5LmpzLXN0eWxlLSIrdCxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO3ImJnMocil9LGdldEZ1bGxUcmFuc2Zvcm1NYXRyaXg6ZnVuY3Rpb24odCl7dmFyIGU9dSh0KSxyPVsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXTtyZXR1cm4gZS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT1jKHQpO2lmKGUpe3ZhciBuPWEuY29udmVydENzc01hdHJpeChlKTtyPW8ubXVsdGlwbHkocixyLG4pfX0pKSxyfSxnZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4OmMsZ2V0RWxlbWVudEFuZEFuY2VzdG9yczp1LGVxdWFsRG9tUmVjdHM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmZSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQudG9wPT09ZS50b3AmJnQubGVmdD09PWUubGVmdCYmdC5yaWdodD09PWUucmlnaHQmJnQuYm90dG9tPT09ZS5ib3R0b219fX0seyIuL2xvZ2dlcnMiOjc4MCwiLi9tYXRyaXgiOjc4MiwiQHBsb3RseS9kMyI6NTgsImdsLW1hdDQiOjI4Nn1dLDc2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJldmVudHMiKS5FdmVudEVtaXR0ZXIsaT17aW5pdDpmdW5jdGlvbih0KXtpZih0Ll9ldiBpbnN0YW5jZW9mIG4pcmV0dXJuIHQ7dmFyIGU9bmV3IG4scj1uZXcgbjtyZXR1cm4gdC5fZXY9ZSx0Ll9pbnRlcm5hbEV2PXIsdC5vbj1lLm9uLmJpbmQoZSksdC5vbmNlPWUub25jZS5iaW5kKGUpLHQucmVtb3ZlTGlzdGVuZXI9ZS5yZW1vdmVMaXN0ZW5lci5iaW5kKGUpLHQucmVtb3ZlQWxsTGlzdGVuZXJzPWUucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoZSksdC5faW50ZXJuYWxPbj1yLm9uLmJpbmQociksdC5faW50ZXJuYWxPbmNlPXIub25jZS5iaW5kKHIpLHQuX3JlbW92ZUludGVybmFsTGlzdGVuZXI9ci5yZW1vdmVMaXN0ZW5lci5iaW5kKHIpLHQuX3JlbW92ZUFsbEludGVybmFsTGlzdGVuZXJzPXIucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQociksdC5lbWl0PWZ1bmN0aW9uKG4saSl7InVuZGVmaW5lZCIhPXR5cGVvZiBqUXVlcnkmJmpRdWVyeSh0KS50cmlnZ2VyKG4saSksZS5lbWl0KG4saSksci5lbWl0KG4saSl9LHR9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpOyJ1bmRlZmluZWQiIT10eXBlb2YgalF1ZXJ5JiYobj1qUXVlcnkodCkudHJpZ2dlckhhbmRsZXIoZSxyKSk7dmFyIGE9dC5fZXY7aWYoIWEpcmV0dXJuIG47dmFyIG8scz1hLl9ldmVudHNbZV07aWYoIXMpcmV0dXJuIG47ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdC5saXN0ZW5lcj8oYS5yZW1vdmVMaXN0ZW5lcihlLHQubGlzdGVuZXIpLHQuZmlyZWQ/dm9pZCAwOih0LmZpcmVkPSEwLHQubGlzdGVuZXIuYXBwbHkoYSxbcl0pKSk6dC5hcHBseShhLFtyXSl9Zm9yKHM9QXJyYXkuaXNBcnJheShzKT9zOltzXSxvPTA7bzxzLmxlbmd0aC0xO28rKylsKHNbb10pO3JldHVybiBpPWwoc1tvXSksdm9pZCAwIT09bj9uOml9LHB1cmdlOmZ1bmN0aW9uKHQpe3JldHVybiBkZWxldGUgdC5fZXYsZGVsZXRlIHQub24sZGVsZXRlIHQub25jZSxkZWxldGUgdC5yZW1vdmVMaXN0ZW5lcixkZWxldGUgdC5yZW1vdmVBbGxMaXN0ZW5lcnMsZGVsZXRlIHQuZW1pdCxkZWxldGUgdC5fZXYsZGVsZXRlIHQuX2ludGVybmFsRXYsZGVsZXRlIHQuX2ludGVybmFsT24sZGVsZXRlIHQuX2ludGVybmFsT25jZSxkZWxldGUgdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcixkZWxldGUgdC5fcmVtb3ZlQWxsSW50ZXJuYWxMaXN0ZW5lcnMsdH19O2UuZXhwb3J0cz1pfSx7ZXZlbnRzOjIzN31dLDc2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2lzX3BsYWluX29iamVjdC5qcyIpLGk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBhKHQsZSxyLG8pe3ZhciBzLGwsYyx1LGYsaCxwPXRbMF0sZD10Lmxlbmd0aDtpZigyPT09ZCYmaShwKSYmaSh0WzFdKSYmMD09PXAubGVuZ3RoKXtpZihmdW5jdGlvbih0LGUpe3ZhciByLG47Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYobnVsbCE9PShuPXRbcl0pJiYib2JqZWN0Ij09dHlwZW9mIG4pcmV0dXJuITE7dm9pZCAwIT09biYmKGVbcl09bil9cmV0dXJuITB9KHRbMV0scCkpcmV0dXJuIHA7cC5zcGxpY2UoMCxwLmxlbmd0aCl9Zm9yKHZhciBtPTE7bTxkO20rKylmb3IobCBpbiBzPXRbbV0pYz1wW2xdLHU9c1tsXSxvJiZpKHUpP3BbbF09dTplJiZ1JiYobih1KXx8KGY9aSh1KSkpPyhmPyhmPSExLGg9YyYmaShjKT9jOltdKTpoPWMmJm4oYyk/Yzp7fSxwW2xdPWEoW2gsdV0sZSxyLG8pKToodm9pZCAwIT09dXx8cikmJihwW2xdPXUpO3JldHVybiBwfXIuZXh0ZW5kRmxhdD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMSwhMSwhMSl9LHIuZXh0ZW5kRGVlcD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMSwhMSl9LHIuZXh0ZW5kRGVlcEFsbD1mdW5jdGlvbigpe3JldHVybiBhKGFyZ3VtZW50cywhMCwhMCwhMSl9LHIuZXh0ZW5kRGVlcE5vQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIGEoYXJndW1lbnRzLCEwLCExLCEwKX19LHsiLi9pc19wbGFpbl9vYmplY3QuanMiOjc3N31dLDc2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9W10sbj0wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTsxIT09ZVthXSYmKGVbYV09MSxyW24rK109YSl9cmV0dXJuIHJ9fSx7fV0sNzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4odCl7cmV0dXJuITA9PT10LnZpc2libGV9ZnVuY3Rpb24gaSh0KXt2YXIgZT10WzBdLnRyYWNlO3JldHVybiEwPT09ZS52aXNpYmxlJiYwIT09ZS5fbGVuZ3RofWUuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscj0oZT10LEFycmF5LmlzQXJyYXkoZSkmJkFycmF5LmlzQXJyYXkoZVswXSkmJmVbMF1bMF0mJmVbMF1bMF0udHJhY2U/aTpuKSxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtyKHMpJiZhLnB1c2gocyl9cmV0dXJuIGF9fSx7fV0sNzY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImNvdW50cnktcmVnZXgiKSxhPXQoIkB0dXJmL2FyZWEiKSxvPXQoIkB0dXJmL2NlbnRyb2lkIikscz10KCJAdHVyZi9iYm94IiksbD10KCIuL2lkZW50aXR5IiksYz10KCIuL2xvZ2dlcnMiKSx1PXQoIi4vaXNfcGxhaW5fb2JqZWN0IiksZj10KCIuL25lc3RlZF9wcm9wZXJ0eSIpLGg9dCgiLi9wb2x5Z29uIikscD1PYmplY3Qua2V5cyhpKSxkPXsiSVNPLTMiOmwsIlVTQS1zdGF0ZXMiOmwsImNvdW50cnkgbmFtZXMiOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8cC5sZW5ndGg7ZSsrKXt2YXIgcj1wW2VdO2lmKG5ldyBSZWdFeHAoaVtyXSkudGVzdCh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gcn1yZXR1cm4gYy5sb2coIlVucmVjb2duaXplZCBjb3VudHJ5IG5hbWU6ICIrdCsiLiIpLCExfX07ZnVuY3Rpb24gbSh0KXt2YXIgZT10Lmdlb2pzb24scj13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxuPSJzdHJpbmciPT10eXBlb2YgZT9yW2VdOmU7cmV0dXJuIHUobik/bjooYy5lcnJvcigiT29wcyAuLi4gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hlbiBmZXRjaGluZyAiK2UpLCExKX1lLmV4cG9ydHM9e2xvY2F0aW9uVG9GZWF0dXJlOmZ1bmN0aW9uKHQsZSxyKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiExO3ZhciBuLGksYSxvPWRbdF0oZSk7aWYobyl7aWYoIlVTQS1zdGF0ZXMiPT09dClmb3Iobj1bXSxhPTA7YTxyLmxlbmd0aDthKyspKGk9clthXSkucHJvcGVydGllcyYmaS5wcm9wZXJ0aWVzLmd1JiYiVVNBIj09PWkucHJvcGVydGllcy5ndSYmbi5wdXNoKGkpO2Vsc2Ugbj1yO2ZvcihhPTA7YTxuLmxlbmd0aDthKyspaWYoKGk9blthXSkuaWQ9PT1vKXJldHVybiBpO2MubG9nKFsiTG9jYXRpb24gd2l0aCBpZCIsbywiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIHRvcG9qc29uIGZlYXR1cmUgYXQgdGhpcyByZXNvbHV0aW9uLiJdLmpvaW4oIiAiKSl9cmV0dXJuITF9LGZlYXR1cmUycG9seWdvbnM6ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYT10Lmdlb21ldHJ5LG89YS5jb29yZGluYXRlcyxzPXQuaWQsbD1bXTtmdW5jdGlvbiBjKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgtMTtlKyspaWYodFtlXVswXT4wJiZ0W2UrMV1bMF08MClyZXR1cm4gZTtyZXR1cm4gbnVsbH1zd2l0Y2goZT0iUlVTIj09PXN8fCJGSkkiPT09cz9mdW5jdGlvbih0KXt2YXIgZTtpZihudWxsPT09Yyh0KSllPXQ7ZWxzZSBmb3IoZT1uZXcgQXJyYXkodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyllW2ldPVt0W2ldWzBdPDA/dFtpXVswXSszNjA6dFtpXVswXSx0W2ldWzFdXTtsLnB1c2goaC50ZXN0ZXIoZSkpfToiQVRBIj09PXM/ZnVuY3Rpb24odCl7dmFyIGU9Yyh0KTtpZihudWxsPT09ZSlyZXR1cm4gbC5wdXNoKGgudGVzdGVyKHQpKTt2YXIgcj1uZXcgQXJyYXkodC5sZW5ndGgrMSksbj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaT5lP3JbbisrXT1bdFtpXVswXSszNjAsdFtpXVsxXV06aT09PWU/KHJbbisrXT10W2ldLHJbbisrXT1bdFtpXVswXSwtOTBdKTpyW24rK109dFtpXTt2YXIgYT1oLnRlc3RlcihyKTthLnB0cy5wb3AoKSxsLnB1c2goYSl9OmZ1bmN0aW9uKHQpe2wucHVzaChoLnRlc3Rlcih0KSl9LGEudHlwZSl7Y2FzZSJNdWx0aVBvbHlnb24iOmZvcihyPTA7cjxvLmxlbmd0aDtyKyspZm9yKG49MDtuPG9bcl0ubGVuZ3RoO24rKyllKG9bcl1bbl0pO2JyZWFrO2Nhc2UiUG9seWdvbiI6Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyllKG9bcl0pfXJldHVybiBsfSxnZXRUcmFjZUdlb2pzb246bSxleHRyYWN0VHJhY2VGZWF0dXJlOmZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1tKGUpO2lmKCFyKXJldHVybiExO3ZhciBuLGk9e30scz1bXTtmb3Iobj0wO248ZS5fbGVuZ3RoO24rKyl7dmFyIGw9dFtuXTsobC5sb2N8fDA9PT1sLmxvYykmJihpW2wubG9jXT1sKX1mdW5jdGlvbiB1KHQpe3ZhciByPWYodCxlLmZlYXR1cmVpZGtleXx8ImlkIikuZ2V0KCksbj1pW3JdO2lmKG4pe3ZhciBsPXQuZ2VvbWV0cnk7aWYoIlBvbHlnb24iPT09bC50eXBlfHwiTXVsdGlQb2x5Z29uIj09PWwudHlwZSl7dmFyIHU9e3R5cGU6IkZlYXR1cmUiLGlkOnIsZ2VvbWV0cnk6bCxwcm9wZXJ0aWVzOnt9fTt1LnByb3BlcnRpZXMuY3Q9ZnVuY3Rpb24odCl7dmFyIGUscj10Lmdlb21ldHJ5O2lmKCJNdWx0aVBvbHlnb24iPT09ci50eXBlKWZvcih2YXIgbj1yLmNvb3JkaW5hdGVzLGk9MCxzPTA7czxuLmxlbmd0aDtzKyspe3ZhciBsPXt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpuW3NdfSxjPWEuZGVmYXVsdChsKTtjPmkmJihpPWMsZT1sKX1lbHNlIGU9cjtyZXR1cm4gby5kZWZhdWx0KGUpLmdlb21ldHJ5LmNvb3JkaW5hdGVzfSh1KSxuLmZJbj10LG4uZk91dD11LHMucHVzaCh1KX1lbHNlIGMubG9nKFsiTG9jYXRpb24iLG4ubG9jLCJkb2VzIG5vdCBoYXZlIGEgdmFsaWQgR2VvSlNPTiBnZW9tZXRyeS4iLCJUcmFjZXMgd2l0aCBsb2NhdGlvbm1vZGUgKmdlb2pzb24taWQqIG9ubHkgc3VwcG9ydCIsIipQb2x5Z29uKiBhbmQgKk11bHRpUG9seWdvbiogZ2VvbWV0cmllcy4iXS5qb2luKCIgIikpfWRlbGV0ZSBpW3JdfXN3aXRjaChyLnR5cGUpe2Nhc2UiRmVhdHVyZUNvbGxlY3Rpb24iOnZhciBoPXIuZmVhdHVyZXM7Zm9yKG49MDtuPGgubGVuZ3RoO24rKyl1KGhbbl0pO2JyZWFrO2Nhc2UiRmVhdHVyZSI6dShyKTticmVhaztkZWZhdWx0OnJldHVybiBjLndhcm4oWyJJbnZhbGlkIEdlb0pTT04gdHlwZSIsKHIudHlwZXx8Im5vbmUiKSsiLiIsIlRyYWNlcyB3aXRoIGxvY2F0aW9ubW9kZSAqZ2VvanNvbi1pZCogb25seSBzdXBwb3J0IiwiKkZlYXR1cmVDb2xsZWN0aW9uKiBhbmQgKkZlYXR1cmUqIHR5cGVzLiJdLmpvaW4oIiAiKSksITF9Zm9yKHZhciBwIGluIGkpYy5sb2coWyJMb2NhdGlvbiAqIitwKyIqIiwiZG9lcyBub3QgaGF2ZSBhIG1hdGNoaW5nIGZlYXR1cmUgd2l0aCBpZC1rZXkiLCIqIitlLmZlYXR1cmVpZGtleSsiKi4iXS5qb2luKCIgIikpO3JldHVybiBzfSxmZXRjaFRyYWNlR2VvRGF0YTpmdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHx7fSxyPVtdO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe24uanNvbih0LChmdW5jdGlvbihuLGEpe2lmKG4pe2RlbGV0ZSBlW3RdO3ZhciBvPTQwND09PW4uc3RhdHVzPydHZW9KU09OIGF0IFVSTCAiJyt0KyciIGRvZXMgbm90IGV4aXN0Lic6IlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3Q7cmV0dXJuIGkobmV3IEVycm9yKG8pKX1yZXR1cm4gZVt0XT1hLHIoYSl9KSl9KSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7dmFyIGk9MCxhPXNldEludGVydmFsKChmdW5jdGlvbigpe3JldHVybiBlW3RdJiYicGVuZGluZyIhPT1lW3RdPyhjbGVhckludGVydmFsKGEpLHIoZVt0XSkpOmk+MTAwPyhjbGVhckludGVydmFsKGEpLG4oIlVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgZnJvbSAiK3QpKTp2b2lkIGkrK30pLDUwKX0pKX1mb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXVswXS50cmFjZS5nZW9qc29uOyJzdHJpbmciPT10eXBlb2YgcyYmKGVbc10/InBlbmRpbmciPT09ZVtzXSYmci5wdXNoKGEocykpOihlW3NdPSJwZW5kaW5nIixyLnB1c2goaShzKSkpKX1yZXR1cm4gcn0sY29tcHV0ZUJib3g6ZnVuY3Rpb24odCl7cmV0dXJuIHMuZGVmYXVsdCh0KX19fSx7Ii4vaWRlbnRpdHkiOjc3NCwiLi9pc19wbGFpbl9vYmplY3QiOjc3NywiLi9sb2dnZXJzIjo3ODAsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODQsIi4vcG9seWdvbiI6Nzg4LCJAcGxvdGx5L2QzIjo1OCwiQHR1cmYvYXJlYSI6NjEsIkB0dXJmL2Jib3giOjYyLCJAdHVyZi9jZW50cm9pZCI6NjMsImNvdW50cnktcmVnZXgiOjE0MX1dLDc3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO3IuY2FsY1RyYWNlVG9MaW5lQ29vcmRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10WzBdLnRyYWNlLmNvbm5lY3RnYXBzLHI9W10saT1bXSxhPTA7YTx0Lmxlbmd0aDthKyspe3ZhciBvPXRbYV0ubG9ubGF0O29bMF0hPT1uP2kucHVzaChvKTohZSYmaS5sZW5ndGg+MCYmKHIucHVzaChpKSxpPVtdKX1yZXR1cm4gaS5sZW5ndGg+MCYmci5wdXNoKGkpLHJ9LHIubWFrZUxpbmU9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lmxlbmd0aD97dHlwZToiTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dFswXX06e3R5cGU6Ik11bHRpTGluZVN0cmluZyIsY29vcmRpbmF0ZXM6dH19LHIubWFrZVBvbHlnb249ZnVuY3Rpb24odCl7aWYoMT09PXQubGVuZ3RoKXJldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczp0fTtmb3IodmFyIGU9bmV3IEFycmF5KHQubGVuZ3RoKSxyPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bdFtyXV07cmV0dXJue3R5cGU6Ik11bHRpUG9seWdvbiIsY29vcmRpbmF0ZXM6ZX19LHIubWFrZUJsYW5rPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBvaW50Iixjb29yZGluYXRlczpbXX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1Mn1dLDc3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixpLGEsbz10KCIuL21vZCIpLm1vZDtmdW5jdGlvbiBzKHQsZSxyLG4saSxhLG8scyl7dmFyIGw9ci10LGM9aS10LHU9by1pLGY9bi1lLGg9YS1lLHA9cy1hLGQ9bCpwLXUqZjtpZigwPT09ZClyZXR1cm4gbnVsbDt2YXIgbT0oYypwLXUqaCkvZCxnPShjKmYtbCpoKS9kO3JldHVybiBnPDB8fGc+MXx8bTwwfHxtPjE/bnVsbDp7eDp0K2wqbSx5OmUrZiptfX1mdW5jdGlvbiBsKHQsZSxyLG4saSl7dmFyIGE9bip0K2kqZTtpZihhPDApcmV0dXJuIG4qbitpKmk7aWYoYT5yKXt2YXIgbz1uLXQscz1pLWU7cmV0dXJuIG8qbytzKnN9dmFyIGw9biplLWkqdDtyZXR1cm4gbCpsL3J9ci5zZWdtZW50c0ludGVyc2VjdD1zLHIuc2VnbWVudERpc3RhbmNlPWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sYyl7aWYocyh0LGUscixuLGksYSxvLGMpKXJldHVybiAwO3ZhciB1PXItdCxmPW4tZSxoPW8taSxwPWMtYSxkPXUqdStmKmYsbT1oKmgrcCpwLGc9TWF0aC5taW4obCh1LGYsZCxpLXQsYS1lKSxsKHUsZixkLG8tdCxjLWUpLGwoaCxwLG0sdC1pLGUtYSksbChoLHAsbSxyLWksbi1hKSk7cmV0dXJuIE1hdGguc3FydChnKX0sci5nZXRUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIscyl7aWYodD09PWkmJnM9PT1hfHwobj17fSxpPXQsYT1zKSxuW3JdKXJldHVybiBuW3JdO3ZhciBsPXQuZ2V0UG9pbnRBdExlbmd0aChvKHItcy8yLGUpKSxjPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIrcy8yLGUpKSx1PU1hdGguYXRhbigoYy55LWwueSkvKGMueC1sLngpKSxmPXQuZ2V0UG9pbnRBdExlbmd0aChvKHIsZSkpLGg9e3g6KDQqZi54K2wueCtjLngpLzYseTooNCpmLnkrbC55K2MueSkvNix0aGV0YTp1fTtyZXR1cm4gbltyXT1oLGh9LHIuY2xlYXJMb2NhdGlvbkNhY2hlPWZ1bmN0aW9uKCl7aT1udWxsfSxyLmdldFZpc2libGVTZWdtZW50PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5sZWZ0LG89ZS5yaWdodCxzPWUudG9wLGw9ZS5ib3R0b20sYz0wLHU9dC5nZXRUb3RhbExlbmd0aCgpLGY9dTtmdW5jdGlvbiBoKGUpe3ZhciByPXQuZ2V0UG9pbnRBdExlbmd0aChlKTswPT09ZT9uPXI6ZT09PXUmJihpPXIpO3ZhciBjPXIueDxhP2Etci54OnIueD5vP3IueC1vOjAsZj1yLnk8cz9zLXIueTpyLnk+bD9yLnktbDowO3JldHVybiBNYXRoLnNxcnQoYypjK2YqZil9Zm9yKHZhciBwPWgoYyk7cDspe2lmKChjKz1wK3IpPmYpcmV0dXJuO3A9aChjKX1mb3IocD1oKGYpO3A7KXtpZihjPihmLT1wK3IpKXJldHVybjtwPWgoZil9cmV0dXJue21pbjpjLG1heDpmLGxlbjpmLWMsdG90YWw6dSxpc0Nsb3NlZDowPT09YyYmZj09PXUmJk1hdGguYWJzKG4ueC1pLngpPC4xJiZNYXRoLmFicyhuLnktaS55KTwuMX19LHIuZmluZFBvaW50T25QYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaSxhLG8scz0obj1ufHx7fSkucGF0aExlbmd0aHx8dC5nZXRUb3RhbExlbmd0aCgpLGw9bi50b2xlcmFuY2V8fC4wMDEsYz1uLml0ZXJhdGlvbkxpbWl0fHwzMCx1PXQuZ2V0UG9pbnRBdExlbmd0aCgwKVtyXT50LmdldFBvaW50QXRMZW5ndGgocylbcl0/LTE6MSxmPTAsaD0wLHA9cztmPGM7KXtpZihpPShoK3ApLzIsbz0oYT10LmdldFBvaW50QXRMZW5ndGgoaSkpW3JdLWUsTWF0aC5hYnMobyk8bClyZXR1cm4gYTt1Km8+MD9wPWk6aD1pLGYrK31yZXR1cm4gYX19LHsiLi9tb2QiOjc4M31dLDc3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxzPXQoIi4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmRlZmF1bHRMaW5lLGw9dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksYz1hKHMpO2Z1bmN0aW9uIHUodCxlKXt2YXIgcj10O3JldHVybiByWzNdKj1lLHJ9ZnVuY3Rpb24gZih0KXtpZihuKHQpKXJldHVybiBjO3ZhciBlPWEodCk7cmV0dXJuIGUubGVuZ3RoP2U6Y31mdW5jdGlvbiBoKHQpe3JldHVybiBuKHQpP3Q6MX1lLmV4cG9ydHM9e2Zvcm1hdENvbG9yOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLHMscCxkLG09dC5jb2xvcixnPWwobSksdj1sKGUpLHk9by5leHRyYWN0T3B0cyh0KSx4PVtdO2lmKG49dm9pZCAwIT09eS5jb2xvcnNjYWxlP28ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHQpOmYsaT1nP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXRbZV0/YzphKG4odFtlXSkpfTpmLHM9dj9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT10W2VdPzE6aCh0W2VdKX06aCxnfHx2KWZvcih2YXIgYj0wO2I8cjtiKyspcD1pKG0sYiksZD1zKGUsYikseFtiXT11KHAsZCk7ZWxzZSB4PXUoYShtKSxlKTtyZXR1cm4geH0scGFyc2VDb2xvclNjYWxlOmZ1bmN0aW9uKHQpe3ZhciBlPW8uZXh0cmFjdE9wdHModCkscj1lLmNvbG9yc2NhbGU7cmV0dXJuIGUucmV2ZXJzZXNjYWxlJiYocj1vLmZsaXBTY2FsZShlLmNvbG9yc2NhbGUpKSxyLm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXSxyPWkodFsxXSkudG9SZ2IoKTtyZXR1cm57aW5kZXg6ZSxyZ2I6W3IucixyLmcsci5iLHIuYV19fSkpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuL2FycmF5Ijo3NTgsImNvbG9yLW5vcm1hbGl6ZSI6MTI2LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sNzczOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaWRlbnRpdHkiKTtmdW5jdGlvbiBpKHQpe3JldHVyblt0XX1lLmV4cG9ydHM9e2tleUZ1bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5rZXl9LHJlcGVhdDppLGRlc2NlbmQ6bix3cmFwOmksdW53cmFwOmZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfX19LHsiLi9pZGVudGl0eSI6Nzc0fV0sNzc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdH19LHt9XSw3NzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUpcmV0dXJuIHQ7dmFyIHI9MS9NYXRoLmFicyhlKSxuPXI+MT8ocip0K3IqZSkvcjp0K2UsaT1TdHJpbmcobikubGVuZ3RoO2lmKGk+MTYpe3ZhciBhPVN0cmluZyhlKS5sZW5ndGg7aWYoaT49U3RyaW5nKHQpLmxlbmd0aCthKXt2YXIgbz1wYXJzZUZsb2F0KG4pLnRvUHJlY2lzaW9uKDEyKTstMT09PW8uaW5kZXhPZigiZSsiKSYmKG49K28pfX1yZXR1cm4gbn19LHt9XSw3NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS51dGNGb3JtYXQsYT10KCJkMy1mb3JtYXQiKS5mb3JtYXQsbz10KCJmYXN0LWlzbnVtZXJpYyIpLHM9dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLGw9cy5GUF9TQUZFLGM9LWwsdT1zLkJBRE5VTSxmPWUuZXhwb3J0cz17fTtmLmFkanVzdEZvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4hdHx8L15cZFsuXVxkZi8udGVzdCh0KXx8L1suXVxkJS8udGVzdCh0KT90OiIwLmYiPT09dD8ifmYiOi9eXGQlLy50ZXN0KHQpPyJ+JSI6L15cZHMvLnRlc3QodCk/In5zIjohL15bfiwuMCRdLy50ZXN0KHQpJiYvWyZmcHNdLy50ZXN0KHQpPyJ+Iit0OnR9O3ZhciBoPXt9O2Yud2FybkJhZEZvcm1hdD1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcodCk7aFtlXXx8KGhbZV09MSxmLndhcm4oJ2VuY291bnRlcmVkIGJhZCBmb3JtYXQ6ICInK2UrJyInKSl9LGYubm9Gb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KX0sZi5udW1iZXJGb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9YShmLmFkanVzdEZvcm1hdCh0KSl9Y2F0Y2goZSl7cmV0dXJuIGYud2FybkJhZEZvcm1hdCh0KSxmLm5vRm9ybWF0fXJldHVybiBlfSxmLm5lc3RlZFByb3BlcnR5PXQoIi4vbmVzdGVkX3Byb3BlcnR5IiksZi5rZXllZENvbnRhaW5lcj10KCIuL2tleWVkX2NvbnRhaW5lciIpLGYucmVsYXRpdmVBdHRyPXQoIi4vcmVsYXRpdmVfYXR0ciIpLGYuaXNQbGFpbk9iamVjdD10KCIuL2lzX3BsYWluX29iamVjdCIpLGYudG9Mb2dSYW5nZT10KCIuL3RvX2xvZ19yYW5nZSIpLGYucmVsaW5rUHJpdmF0ZUtleXM9dCgiLi9yZWxpbmtfcHJpdmF0ZSIpO3ZhciBwPXQoIi4vYXJyYXkiKTtmLmlzVHlwZWRBcnJheT1wLmlzVHlwZWRBcnJheSxmLmlzQXJyYXlPclR5cGVkQXJyYXk9cC5pc0FycmF5T3JUeXBlZEFycmF5LGYuaXNBcnJheTFEPXAuaXNBcnJheTFELGYuZW5zdXJlQXJyYXk9cC5lbnN1cmVBcnJheSxmLmNvbmNhdD1wLmNvbmNhdCxmLm1heFJvd0xlbmd0aD1wLm1heFJvd0xlbmd0aCxmLm1pblJvd0xlbmd0aD1wLm1pblJvd0xlbmd0aDt2YXIgZD10KCIuL21vZCIpO2YubW9kPWQubW9kLGYubW9kSGFsZj1kLm1vZEhhbGY7dmFyIG09dCgiLi9jb2VyY2UiKTtmLnZhbE9iamVjdE1ldGE9bS52YWxPYmplY3RNZXRhLGYuY29lcmNlPW0uY29lcmNlLGYuY29lcmNlMj1tLmNvZXJjZTIsZi5jb2VyY2VGb250PW0uY29lcmNlRm9udCxmLmNvZXJjZVBhdHRlcm49bS5jb2VyY2VQYXR0ZXJuLGYuY29lcmNlSG92ZXJpbmZvPW0uY29lcmNlSG92ZXJpbmZvLGYuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eT1tLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHksZi52YWxpZGF0ZT1tLnZhbGlkYXRlO3ZhciBnPXQoIi4vZGF0ZXMiKTtmLmRhdGVUaW1lMm1zPWcuZGF0ZVRpbWUybXMsZi5pc0RhdGVUaW1lPWcuaXNEYXRlVGltZSxmLm1zMkRhdGVUaW1lPWcubXMyRGF0ZVRpbWUsZi5tczJEYXRlVGltZUxvY2FsPWcubXMyRGF0ZVRpbWVMb2NhbCxmLmNsZWFuRGF0ZT1nLmNsZWFuRGF0ZSxmLmlzSlNEYXRlPWcuaXNKU0RhdGUsZi5mb3JtYXREYXRlPWcuZm9ybWF0RGF0ZSxmLmluY3JlbWVudE1vbnRoPWcuaW5jcmVtZW50TW9udGgsZi5kYXRlVGljazA9Zy5kYXRlVGljazAsZi5kZmx0UmFuZ2U9Zy5kZmx0UmFuZ2UsZi5maW5kRXhhY3REYXRlcz1nLmZpbmRFeGFjdERhdGVzLGYuTUlOX01TPWcuTUlOX01TLGYuTUFYX01TPWcuTUFYX01TO3ZhciB2PXQoIi4vc2VhcmNoIik7Zi5maW5kQmluPXYuZmluZEJpbixmLnNvcnRlckFzYz12LnNvcnRlckFzYyxmLnNvcnRlckRlcz12LnNvcnRlckRlcyxmLmRpc3RpbmN0VmFscz12LmRpc3RpbmN0VmFscyxmLnJvdW5kVXA9di5yb3VuZFVwLGYuc29ydD12LnNvcnQsZi5maW5kSW5kZXhPZk1pbj12LmZpbmRJbmRleE9mTWluLGYuc29ydE9iamVjdEtleXM9dCgiLi9zb3J0X29iamVjdF9rZXlzIik7dmFyIHk9dCgiLi9zdGF0cyIpO2YuYWdnTnVtcz15LmFnZ051bXMsZi5sZW49eS5sZW4sZi5tZWFuPXkubWVhbixmLm1lZGlhbj15Lm1lZGlhbixmLm1pZFJhbmdlPXkubWlkUmFuZ2UsZi52YXJpYW5jZT15LnZhcmlhbmNlLGYuc3RkZXY9eS5zdGRldixmLmludGVycD15LmludGVycDt2YXIgeD10KCIuL21hdHJpeCIpO2YuaW5pdDJkQXJyYXk9eC5pbml0MmRBcnJheSxmLnRyYW5zcG9zZVJhZ2dlZD14LnRyYW5zcG9zZVJhZ2dlZCxmLmRvdD14LmRvdCxmLnRyYW5zbGF0aW9uTWF0cml4PXgudHJhbnNsYXRpb25NYXRyaXgsZi5yb3RhdGlvbk1hdHJpeD14LnJvdGF0aW9uTWF0cml4LGYucm90YXRpb25YWU1hdHJpeD14LnJvdGF0aW9uWFlNYXRyaXgsZi5hcHBseTNEVHJhbnNmb3JtPXguYXBwbHkzRFRyYW5zZm9ybSxmLmFwcGx5MkRUcmFuc2Zvcm09eC5hcHBseTJEVHJhbnNmb3JtLGYuYXBwbHkyRFRyYW5zZm9ybTI9eC5hcHBseTJEVHJhbnNmb3JtMixmLmNvbnZlcnRDc3NNYXRyaXg9eC5jb252ZXJ0Q3NzTWF0cml4LGYuaW52ZXJzZVRyYW5zZm9ybU1hdHJpeD14LmludmVyc2VUcmFuc2Zvcm1NYXRyaXg7dmFyIGI9dCgiLi9hbmdsZXMiKTtmLmRlZzJyYWQ9Yi5kZWcycmFkLGYucmFkMmRlZz1iLnJhZDJkZWcsZi5hbmdsZURlbHRhPWIuYW5nbGVEZWx0YSxmLmFuZ2xlRGlzdD1iLmFuZ2xlRGlzdCxmLmlzRnVsbENpcmNsZT1iLmlzRnVsbENpcmNsZSxmLmlzQW5nbGVJbnNpZGVTZWN0b3I9Yi5pc0FuZ2xlSW5zaWRlU2VjdG9yLGYuaXNQdEluc2lkZVNlY3Rvcj1iLmlzUHRJbnNpZGVTZWN0b3IsZi5wYXRoQXJjPWIucGF0aEFyYyxmLnBhdGhTZWN0b3I9Yi5wYXRoU2VjdG9yLGYucGF0aEFubnVsdXM9Yi5wYXRoQW5udWx1czt2YXIgXz10KCIuL2FuY2hvcl91dGlscyIpO2YuaXNMZWZ0QW5jaG9yPV8uaXNMZWZ0QW5jaG9yLGYuaXNDZW50ZXJBbmNob3I9Xy5pc0NlbnRlckFuY2hvcixmLmlzUmlnaHRBbmNob3I9Xy5pc1JpZ2h0QW5jaG9yLGYuaXNUb3BBbmNob3I9Xy5pc1RvcEFuY2hvcixmLmlzTWlkZGxlQW5jaG9yPV8uaXNNaWRkbGVBbmNob3IsZi5pc0JvdHRvbUFuY2hvcj1fLmlzQm90dG9tQW5jaG9yO3ZhciB3PXQoIi4vZ2VvbWV0cnkyZCIpO2Yuc2VnbWVudHNJbnRlcnNlY3Q9dy5zZWdtZW50c0ludGVyc2VjdCxmLnNlZ21lbnREaXN0YW5jZT13LnNlZ21lbnREaXN0YW5jZSxmLmdldFRleHRMb2NhdGlvbj13LmdldFRleHRMb2NhdGlvbixmLmNsZWFyTG9jYXRpb25DYWNoZT13LmNsZWFyTG9jYXRpb25DYWNoZSxmLmdldFZpc2libGVTZWdtZW50PXcuZ2V0VmlzaWJsZVNlZ21lbnQsZi5maW5kUG9pbnRPblBhdGg9dy5maW5kUG9pbnRPblBhdGg7dmFyIFQ9dCgiLi9leHRlbmQiKTtmLmV4dGVuZEZsYXQ9VC5leHRlbmRGbGF0LGYuZXh0ZW5kRGVlcD1ULmV4dGVuZERlZXAsZi5leHRlbmREZWVwQWxsPVQuZXh0ZW5kRGVlcEFsbCxmLmV4dGVuZERlZXBOb0FycmF5cz1ULmV4dGVuZERlZXBOb0FycmF5czt2YXIgaz10KCIuL2xvZ2dlcnMiKTtmLmxvZz1rLmxvZyxmLndhcm49ay53YXJuLGYuZXJyb3I9ay5lcnJvcjt2YXIgQT10KCIuL3JlZ2V4Iik7Zi5jb3VudGVyUmVnZXg9QS5jb3VudGVyO3ZhciBNPXQoIi4vdGhyb3R0bGUiKTtmLnRocm90dGxlPU0udGhyb3R0bGUsZi50aHJvdHRsZURvbmU9TS5kb25lLGYuY2xlYXJUaHJvdHRsZT1NLmNsZWFyO3ZhciBTPXQoIi4vZG9tIik7ZnVuY3Rpb24gRSh0KXt2YXIgZT17fTtmb3IodmFyIHIgaW4gdClmb3IodmFyIG49dFtyXSxpPTA7aTxuLmxlbmd0aDtpKyspZVtuW2ldXT0rcjtyZXR1cm4gZX1mLmdldEdyYXBoRGl2PVMuZ2V0R3JhcGhEaXYsZi5pc1Bsb3REaXY9Uy5pc1Bsb3REaXYsZi5yZW1vdmVFbGVtZW50PVMucmVtb3ZlRWxlbWVudCxmLmFkZFN0eWxlUnVsZT1TLmFkZFN0eWxlUnVsZSxmLmFkZFJlbGF0ZWRTdHlsZVJ1bGU9Uy5hZGRSZWxhdGVkU3R5bGVSdWxlLGYuZGVsZXRlUmVsYXRlZFN0eWxlUnVsZT1TLmRlbGV0ZVJlbGF0ZWRTdHlsZVJ1bGUsZi5nZXRGdWxsVHJhbnNmb3JtTWF0cml4PVMuZ2V0RnVsbFRyYW5zZm9ybU1hdHJpeCxmLmdldEVsZW1lbnRUcmFuc2Zvcm1NYXRyaXg9Uy5nZXRFbGVtZW50VHJhbnNmb3JtTWF0cml4LGYuZ2V0RWxlbWVudEFuZEFuY2VzdG9ycz1TLmdldEVsZW1lbnRBbmRBbmNlc3RvcnMsZi5lcXVhbERvbVJlY3RzPVMuZXF1YWxEb21SZWN0cyxmLmNsZWFyUmVzcG9uc2l2ZT10KCIuL2NsZWFyX3Jlc3BvbnNpdmUiKSxmLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj10KCIuL3ByZXNlcnZlX2RyYXdpbmdfYnVmZmVyIiksZi5tYWtlVHJhY2VHcm91cHM9dCgiLi9tYWtlX3RyYWNlX2dyb3VwcyIpLGYuXz10KCIuL2xvY2FsaXplIiksZi5ub3RpZmllcj10KCIuL25vdGlmaWVyIiksZi5maWx0ZXJVbmlxdWU9dCgiLi9maWx0ZXJfdW5pcXVlIiksZi5maWx0ZXJWaXNpYmxlPXQoIi4vZmlsdGVyX3Zpc2libGUiKSxmLnB1c2hVbmlxdWU9dCgiLi9wdXNoX3VuaXF1ZSIpLGYuaW5jcmVtZW50PXQoIi4vaW5jcmVtZW50IiksZi5jbGVhbk51bWJlcj10KCIuL2NsZWFuX251bWJlciIpLGYuZW5zdXJlTnVtYmVyPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpPyh0PU51bWJlcih0KSk+bHx8dDxjP3U6dDp1fSxmLmlzSW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4hKHZvaWQgMCE9PWUmJnQ+PWUpJiYobyh0KSYmdD49MCYmdCUxPT0wKX0sZi5ub29wPXQoIi4vbm9vcCIpLGYuaWRlbnRpdHk9dCgiLi9pZGVudGl0eSIpLGYucmVwZWF0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheShlKSxuPTA7bjxlO24rKylyW25dPXQ7cmV0dXJuIHJ9LGYuc3dhcEF0dHJzPWZ1bmN0aW9uKHQsZSxyLG4pe3J8fChyPSJ4Iiksbnx8KG49InkiKTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLHIpKSxzPWYubmVzdGVkUHJvcGVydHkodCxhLnJlcGxhY2UoIj8iLG4pKSxsPW8uZ2V0KCk7by5zZXQocy5nZXQoKSkscy5zZXQobCl9fSxmLnJhaXNlVG9Ub3A9ZnVuY3Rpb24odCl7dC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHQpfSxmLmNhbmNlbFRyYW5zaXRpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQudHJhbnNpdGlvbigpLmR1cmF0aW9uKDApfSxmLmNvbnN0cmFpbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGU+cj9NYXRoLm1heChyLE1hdGgubWluKGUsdCkpOk1hdGgubWF4KGUsTWF0aC5taW4ocix0KSl9LGYuYkJveEludGVyc2VjdD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHI9cnx8MCx0LmxlZnQ8PWUucmlnaHQrciYmZS5sZWZ0PD10LnJpZ2h0K3ImJnQudG9wPD1lLmJvdHRvbStyJiZlLnRvcDw9dC5ib3R0b20rcn0sZi5zaW1wbGVNYXA9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIGE9dC5sZW5ndGgsbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspb1tzXT1lKHRbc10scixuLGkpO3JldHVybiBvfSxmLnJhbmRzdHI9ZnVuY3Rpb24gdChlLHIsbixpKXtpZihufHwobj0xNiksdm9pZCAwPT09ciYmKHI9MjQpLHI8PTApcmV0dXJuIjAiO3ZhciBhLG8scz1NYXRoLmxvZyhNYXRoLnBvdygyLHIpKS9NYXRoLmxvZyhuKSxsPSIiO2ZvcihhPTI7cz09PTEvMDthKj0yKXM9TWF0aC5sb2coTWF0aC5wb3coMixyL2EpKS9NYXRoLmxvZyhuKSphO3ZhciBjPXMtTWF0aC5mbG9vcihzKTtmb3IoYT0wO2E8TWF0aC5mbG9vcihzKTthKyspbD1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbikudG9TdHJpbmcobikrbDtjJiYobz1NYXRoLnBvdyhuLGMpLGw9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm8pLnRvU3RyaW5nKG4pK2wpO3ZhciB1PXBhcnNlSW50KGwsbik7cmV0dXJuIGUmJmVbbF18fHUhPT0xLzAmJnU+PU1hdGgucG93KDIscik/aT4xMD8oZi53YXJuKCJyYW5kc3RyIGZhaWxlZCB1bmlxdWVuZXNzIiksbCk6dChlLHIsbiwoaXx8MCkrMSk6bH0sZi5PcHRpb25Db250cm9sPWZ1bmN0aW9uKHQsZSl7dHx8KHQ9e30pLGV8fChlPSJvcHQiKTt2YXIgcj17b3B0aW9uTGlzdDpbXSxfbmV3b3B0aW9uOmZ1bmN0aW9uKG4pe25bZV09dCxyW24ubmFtZV09bixyLm9wdGlvbkxpc3QucHVzaChuKX19O3JldHVybiByWyJfIitlXT10LHJ9LGYuc21vb3RoPWZ1bmN0aW9uKHQsZSl7aWYoKGU9TWF0aC5yb3VuZChlKXx8MCk8MilyZXR1cm4gdDt2YXIgcixuLGksYSxvPXQubGVuZ3RoLHM9MipvLGw9MiplLTEsYz1uZXcgQXJyYXkobCksdT1uZXcgQXJyYXkobyk7Zm9yKHI9MDtyPGw7cisrKWNbcl09KDEtTWF0aC5jb3MoTWF0aC5QSSoocisxKS9lKSkvKDIqZSk7Zm9yKHI9MDtyPG87cisrKXtmb3IoYT0wLG49MDtuPGw7bisrKShpPXIrbisxLWUpPC1vP2ktPXMqTWF0aC5yb3VuZChpL3MpOmk+PXMmJihpLT1zKk1hdGguZmxvb3IoaS9zKSksaTwwP2k9LTEtaTppPj1vJiYoaT1zLTEtaSksYSs9dFtpXSpjW25dO3Vbcl09YX1yZXR1cm4gdX0sZi5zeW5jT3JBc3luYz1mdW5jdGlvbih0LGUscil7dmFyIG47ZnVuY3Rpb24gaSgpe3JldHVybiBmLnN5bmNPckFzeW5jKHQsZSxyKX1mb3IoO3QubGVuZ3RoOylpZigobj0oMCx0LnNwbGljZSgwLDEpWzBdKShlKSkmJm4udGhlbilyZXR1cm4gbi50aGVuKGkpO3JldHVybiByJiZyKGUpfSxmLnN0cmlwVHJhaWxpbmdTbGFzaD1mdW5jdGlvbih0KXtyZXR1cm4iLyI9PT10LnN1YnN0cigtMSk/dC5zdWJzdHIoMCx0Lmxlbmd0aC0xKTp0fSxmLm5vbmVPckFsbD1mdW5jdGlvbih0LGUscil7aWYodCl7dmFyIG4saT0hMSxhPSEwO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspbnVsbCE9dFtyW25dXT9pPSEwOmE9ITE7aWYoaSYmIWEpZm9yKG49MDtuPHIubGVuZ3RoO24rKyl0W3Jbbl1dPWVbcltuXV19fSxmLm1lcmdlQXJyYXk9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9ImZ1bmN0aW9uIj09dHlwZW9mIG47aWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgYT1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksbz0wO288YTtvKyspe3ZhciBzPXRbb107ZVtvXVtyXT1pP24ocyk6c319LGYubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYubWVyZ2VBcnJheSh0LGUsciwoZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGlzRmluaXRlKGUpJiZlPjA/ZTowfSkpfSxmLmZpbGxBcnJheT1mdW5jdGlvbih0LGUscixuKXtpZihuPW58fGYuaWRlbnRpdHksZi5pc0FycmF5T3JUeXBlZEFycmF5KHQpKWZvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWVbaV1bcl09bih0W2ldKX0sZi5jYXN0T3B0aW9uPWZ1bmN0aW9uKHQsZSxyLG4pe249bnx8Zi5pZGVudGl0eTt2YXIgaT1mLm5lc3RlZFByb3BlcnR5KHQscikuZ2V0KCk7cmV0dXJuIGYuaXNBcnJheU9yVHlwZWRBcnJheShpKT9BcnJheS5pc0FycmF5KGUpJiZmLmlzQXJyYXlPclR5cGVkQXJyYXkoaVtlWzBdXSk/bihpW2VbMF1dW2VbMV1dKTpuKGlbZV0pOml9LGYuZXh0cmFjdE9wdGlvbj1mdW5jdGlvbih0LGUscixuKXtpZihyIGluIHQpcmV0dXJuIHRbcl07dmFyIGk9Zi5uZXN0ZWRQcm9wZXJ0eShlLG4pLmdldCgpO3JldHVybiBBcnJheS5pc0FycmF5KGkpP3ZvaWQgMDppfSxmLnRhZ1NlbGVjdGVkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9ZS5zZWxlY3RlZHBvaW50cyxvPWUuX2luZGV4VG9Qb2ludHM7byYmKG49RShvKSk7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBsPWFbc107aWYoZi5pc0luZGV4KGwpfHxmLmlzQXJyYXlPclR5cGVkQXJyYXkobCkmJmYuaXNJbmRleChsWzBdKSYmZi5pc0luZGV4KGxbMV0pKXt2YXIgYz1uP25bbF06bCx1PXI/cltjXTpjO3ZvaWQgMCE9PShpPXUpJiZpPHQubGVuZ3RoJiYodFt1XS5zZWxlY3RlZD0xKX19fSxmLnNlbEluZGljZXMyc2VsUG9pbnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuc2VsZWN0ZWRwb2ludHMscj10Ll9pbmRleFRvUG9pbnRzO2lmKHIpe2Zvcih2YXIgbj1FKHIpLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz1lW2FdO2lmKGYuaXNJbmRleChvKSl7dmFyIHM9bltvXTtmLmlzSW5kZXgocykmJmkucHVzaChzKX19cmV0dXJuIGl9cmV0dXJuIGV9LGYuZ2V0VGFyZ2V0QXJyYXk9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRhcmdldDtpZigic3RyaW5nIj09dHlwZW9mIHImJnIpe3ZhciBuPWYubmVzdGVkUHJvcGVydHkodCxyKS5nZXQoKTtyZXR1cm4hIUFycmF5LmlzQXJyYXkobikmJm59cmV0dXJuISFBcnJheS5pc0FycmF5KHIpJiZyfSxmLm1pbkV4dGVuZD1mdW5jdGlvbih0LGUpe3ZhciByPXt9OyJvYmplY3QiIT10eXBlb2YgZSYmKGU9e30pO3ZhciBuLGksYSxvPU9iamVjdC5rZXlzKHQpO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspYT10W2k9b1tuXV0sIl8iIT09aS5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBhJiYoIm1vZHVsZSI9PT1pP3JbaV09YTpBcnJheS5pc0FycmF5KGEpP3JbaV09ImNvbG9yc2NhbGUiPT09aT9hLnNsaWNlKCk6YS5zbGljZSgwLDMpOmYuaXNUeXBlZEFycmF5KGEpP3JbaV09YS5zdWJhcnJheSgwLDMpOnJbaV09YSYmIm9iamVjdCI9PXR5cGVvZiBhP2YubWluRXh0ZW5kKHRbaV0sZVtpXSk6YSk7Zm9yKG89T2JqZWN0LmtleXMoZSksbj0wO248by5sZW5ndGg7bisrKSJvYmplY3QiPT10eXBlb2YoYT1lW2k9b1tuXV0pJiZpIGluIHImJiJvYmplY3QiPT10eXBlb2YgcltpXXx8KHJbaV09YSk7cmV0dXJuIHJ9LGYudGl0bGVDYXNlPWZ1bmN0aW9uKHQpe3JldHVybiB0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc3Vic3RyKDEpfSxmLmNvbnRhaW5zQW55PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoLTEhPT10LmluZGV4T2YoZVtyXSkpcmV0dXJuITA7cmV0dXJuITF9LGYuaXNJRT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT13aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2J9O3ZhciBMPS9WZXJzaW9uXC9bXGRcLl0rLipTYWZhcmkvO2YuaXNTYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gTC50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIEM9L2lQYWR8aVBob25lfGlQb2QvO2YuaXNJT1M9ZnVuY3Rpb24oKXtyZXR1cm4gQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KX07dmFyIFA9L0ZpcmVmb3hcLyhcZCspXC5cZCsvO2YuZ2V0RmlyZWZveFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgdD1QLmV4ZWMod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpO2lmKHQmJjI9PT10Lmxlbmd0aCl7dmFyIGU9cGFyc2VJbnQodFsxXSk7aWYoIWlzTmFOKGUpKXJldHVybiBlfXJldHVybiBudWxsfSxmLmlzRDNTZWxlY3Rpb249ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuLnNlbGVjdGlvbn0sZi5lbnN1cmVTaW5nbGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5zZWxlY3QoZSsocj8iLiIrcjoiIikpO2lmKGkuc2l6ZSgpKXJldHVybiBpO3ZhciBhPXQuYXBwZW5kKGUpO3JldHVybiByJiZhLmNsYXNzZWQociwhMCksbiYmYS5jYWxsKG4pLGF9LGYuZW5zdXJlU2luZ2xlQnlJZD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10LnNlbGVjdChlKyIjIityKTtpZihpLnNpemUoKSlyZXR1cm4gaTt2YXIgYT10LmFwcGVuZChlKS5hdHRyKCJpZCIscik7cmV0dXJuIG4mJmEuY2FsbChuKSxhfSxmLm9iamVjdEZyb21QYXRoPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5zcGxpdCgiLiIpLGk9cj17fSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV0scz1udWxsLGw9blthXS5tYXRjaCgvKC4qKVxbKFswLTldKylcXS8pO2w/KG89bFsxXSxzPWxbMl0scj1yW29dPVtdLGE9PT1uLmxlbmd0aC0xP3Jbc109ZTpyW3NdPXt9LHI9cltzXSk6KGE9PT1uLmxlbmd0aC0xP3Jbb109ZTpyW29dPXt9LHI9cltvXSl9cmV0dXJuIGl9O3ZhciBJPS9eKFteXFtcLl0rKVwuKC4rKT8vLE89L14oW15cLl0rKVxbKFswLTldKylcXShcLik/KC4rKT8vO2YuZXhwYW5kT2JqZWN0UGF0aHM9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYhQXJyYXkuaXNBcnJheSh0KSlmb3IociBpbiB0KXQuaGFzT3duUHJvcGVydHkocikmJigoZT1yLm1hdGNoKEkpKT8oaT10W3JdLG49ZVsxXSxkZWxldGUgdFtyXSx0W25dPWYuZXh0ZW5kRGVlcE5vQXJyYXlzKHRbbl18fHt9LGYub2JqZWN0RnJvbVBhdGgocixmLmV4cGFuZE9iamVjdFBhdGhzKGkpKVtuXSkpOihlPXIubWF0Y2goTykpPyhpPXRbcl0sbj1lWzFdLGE9cGFyc2VJbnQoZVsyXSksZGVsZXRlIHRbcl0sdFtuXT10W25dfHxbXSwiLiI9PT1lWzNdPyhzPWVbNF0sbz10W25dW2FdPXRbbl1bYV18fHt9LGYuZXh0ZW5kRGVlcE5vQXJyYXlzKG8sZi5vYmplY3RGcm9tUGF0aChzLGYuZXhwYW5kT2JqZWN0UGF0aHMoaSkpKSk6dFtuXVthXT1mLmV4cGFuZE9iamVjdFBhdGhzKGkpKTp0W3JdPWYuZXhwYW5kT2JqZWN0UGF0aHModFtyXSkpO3JldHVybiB0fSxmLm51bVNlcGFyYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZihyfHwocj0hMSksInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTZXBhcmF0b3Igc3RyaW5nIHJlcXVpcmVkIGZvciBmb3JtYXR0aW5nISIpOyJudW1iZXIiPT10eXBlb2YgdCYmKHQ9U3RyaW5nKHQpKTt2YXIgbj0vKFxkKykoXGR7M30pLyxpPWUuY2hhckF0KDApLGE9ZS5jaGFyQXQoMSksbz10LnNwbGl0KCIuIikscz1vWzBdLGw9by5sZW5ndGg+MT9pK29bMV06IiI7aWYoYSYmKG8ubGVuZ3RoPjF8fHMubGVuZ3RoPjR8fHIpKWZvcig7bi50ZXN0KHMpOylzPXMucmVwbGFjZShuLCIkMSIrYSsiJDIiKTtyZXR1cm4gcytsfSxmLlRFTVBMQVRFX1NUUklOR19SRUdFWD0vJXsoW15ccyV7fTpdKikoWzp8XHxdW159XSopP30vZzt2YXIgej0vXlx3KiQvO2YudGVtcGxhdGVTdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgcj17fTtyZXR1cm4gdC5yZXBsYWNlKGYuVEVNUExBVEVfU1RSSU5HX1JFR0VYLChmdW5jdGlvbih0LG4pe3ZhciBpO3JldHVybiB6LnRlc3Qobik/aT1lW25dOihyW25dPXJbbl18fGYubmVzdGVkUHJvcGVydHkoZSxuKS5nZXQsaT1yW25dKCkpLGYuaXNWYWxpZFRleHRWYWx1ZShpKT9pOiIifSkpfTt2YXIgRD17bWF4OjEwLGNvdW50OjAsbmFtZToiaG92ZXJ0ZW1wbGF0ZSJ9O2YuaG92ZXJ0ZW1wbGF0ZVN0cmluZz1mdW5jdGlvbigpe3JldHVybiBCLmFwcGx5KEQsYXJndW1lbnRzKX07dmFyIFI9e21heDoxMCxjb3VudDowLG5hbWU6InRleHR0ZW1wbGF0ZSJ9O2YudGV4dHRlbXBsYXRlU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoUixhcmd1bWVudHMpfTt2YXIgRj0vXls6fFx8XS87ZnVuY3Rpb24gQih0LGUscil7dmFyIG49dGhpcyxhPWFyZ3VtZW50cztlfHwoZT17fSk7dmFyIG89e307cmV0dXJuIHQucmVwbGFjZShmLlRFTVBMQVRFX1NUUklOR19SRUdFWCwoZnVuY3Rpb24odCxzLGwpe3ZhciBjLHUsaCxwPSJfeG90aGVyIj09PXN8fCJfeW90aGVyIj09PXMsZD0iX3hvdGhlcl8iPT09c3x8Il95b3RoZXJfIj09PXMsbT0ieG90aGVyXyI9PT1zfHwieW90aGVyXyI9PT1zLGc9InhvdGhlciI9PT1zfHwieW90aGVyIj09PXN8fHB8fG18fGQsdj1zO2lmKChwfHxkKSYmKHY9di5zdWJzdHJpbmcoMSkpLChtfHxkKSYmKHY9di5zdWJzdHJpbmcoMCx2Lmxlbmd0aC0xKSksZyl7aWYodm9pZCAwPT09KGM9ZVt2XSkpcmV0dXJuIiJ9ZWxzZSBmb3IoaD0zO2g8YS5sZW5ndGg7aCsrKWlmKHU9YVtoXSl7aWYodS5oYXNPd25Qcm9wZXJ0eSh2KSl7Yz11W3ZdO2JyZWFrfWlmKHoudGVzdCh2KXx8KGM9Zi5uZXN0ZWRQcm9wZXJ0eSh1LHYpLmdldCgpLChjPW9bdl18fGYubmVzdGVkUHJvcGVydHkodSx2KS5nZXQoKSkmJihvW3ZdPWMpKSx2b2lkIDAhPT1jKWJyZWFrfWlmKHZvaWQgMD09PWMmJm4pcmV0dXJuIG4uY291bnQ8bi5tYXgmJihmLndhcm4oIlZhcmlhYmxlICciK3YrIicgaW4gIituLm5hbWUrIiBjb3VsZCBub3QgYmUgZm91bmQhIiksYz10KSxuLmNvdW50PT09bi5tYXgmJmYud2FybigiVG9vIG1hbnkgIituLm5hbWUrIiB3YXJuaW5ncyAtIGFkZGl0aW9uYWwgd2FybmluZ3Mgd2lsbCBiZSBzdXBwcmVzc2VkIiksbi5jb3VudCsrLHQ7aWYobCl7dmFyIHk7aWYoIjoiPT09bFswXSYmKGM9KHk9cj9yLm51bWJlckZvcm1hdDpmLm51bWJlckZvcm1hdCkobC5yZXBsYWNlKEYsIiIpKShjKSksInwiPT09bFswXSl7eT1yP3IudGltZUZvcm1hdDppO3ZhciB4PWYuZGF0ZVRpbWUybXMoYyk7Yz1mLmZvcm1hdERhdGUoeCxsLnJlcGxhY2UoRiwiIiksITEseSl9fWVsc2V7dmFyIGI9disiTGFiZWwiO2UuaGFzT3duUHJvcGVydHkoYikmJihjPWVbYl0pfXJldHVybiBnJiYoYz0iKCIrYysiKSIsKHB8fGQpJiYoYz0iICIrYyksKG18fGQpJiYoYys9IiAiKSksY30pKX1mLnN1YnBsb3RTb3J0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSsxLG49MCxpPTAsYT0wO2E8cjthKyspe3ZhciBvPXQuY2hhckNvZGVBdChhKXx8MCxzPWUuY2hhckNvZGVBdChhKXx8MCxsPW8+PTQ4JiZvPD01NyxjPXM+PTQ4JiZzPD01NztpZihsJiYobj0xMCpuK28tNDgpLGMmJihpPTEwKmkrcy00OCksIWx8fCFjKXtpZihuIT09aSlyZXR1cm4gbi1pO2lmKG8hPT1zKXJldHVybiBvLXN9fXJldHVybiBpLW59O3ZhciBOPTJlOTtmLnNlZWRQc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXtOPTJlOX0sZi5wc2V1ZG9SYW5kb209ZnVuY3Rpb24oKXt2YXIgdD1OO3JldHVybiBOPSg2OTA2OSpOKzEpJTQyOTQ5NjcyOTYsTWF0aC5hYnMoTi10KTw0Mjk0OTY3Mjk/Zi5wc2V1ZG9SYW5kb20oKTpOLzQyOTQ5NjcyOTZ9LGYuZmlsbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUFycmF5LmlzQXJyYXkocik/ZnVuY3Rpb24odCl7ci5wdXNoKHQpfTpmdW5jdGlvbih0KXtyLnRleHQ9dH0saT1mLmV4dHJhY3RPcHRpb24odCxlLCJodHgiLCJob3ZlcnRleHQiKTtpZihmLmlzVmFsaWRUZXh0VmFsdWUoaSkpcmV0dXJuIG4oaSk7dmFyIGE9Zi5leHRyYWN0T3B0aW9uKHQsZSwidHgiLCJ0ZXh0Iik7cmV0dXJuIGYuaXNWYWxpZFRleHRWYWx1ZShhKT9uKGEpOnZvaWQgMH0sZi5pc1ZhbGlkVGV4dFZhbHVlPWZ1bmN0aW9uKHQpe3JldHVybiB0fHwwPT09dH0sZi5mb3JtYXRQZXJjZW50PWZ1bmN0aW9uKHQsZSl7ZT1lfHwwO2Zvcih2YXIgcj0oTWF0aC5yb3VuZCgxMDAqdCpNYXRoLnBvdygxMCxlKSkqTWF0aC5wb3coLjEsZSkpLnRvRml4ZWQoZSkrIiUiLG49MDtuPGU7bisrKS0xIT09ci5pbmRleE9mKCIuIikmJihyPShyPXIucmVwbGFjZSgiMCUiLCIlIikpLnJlcGxhY2UoIi4lIiwiJSIpKTtyZXR1cm4gcn0sZi5pc0hpZGRlbj1mdW5jdGlvbih0KXt2YXIgZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KS5kaXNwbGF5O3JldHVybiFlfHwibm9uZSI9PT1lfSxmLnN0clRyYW5zbGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0fHxlPyJ0cmFuc2xhdGUoIit0KyIsIitlKyIpIjoiIn0sZi5zdHJSb3RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/InJvdGF0ZSgiK3QrIikiOiIifSxmLnN0clNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dD8ic2NhbGUoIit0KyIpIjoiIn0sZi5nZXRUZXh0VHJhbnNmb3JtPWZ1bmN0aW9uKHQpe3ZhciBlPXQubm9DZW50ZXIscj10LnRleHRYLG49dC50ZXh0WSxpPXQudGFyZ2V0WCxhPXQudGFyZ2V0WSxvPXQuYW5jaG9yWHx8MCxzPXQuYW5jaG9yWXx8MCxsPXQucm90YXRlLGM9dC5zY2FsZTtyZXR1cm4gYz9jPjEmJihjPTEpOmM9MCxmLnN0clRyYW5zbGF0ZShpLWMqKHIrbyksYS1jKihuK3MpKStmLnN0clNjYWxlKGMpKyhsPyJyb3RhdGUoIitsKyhlPyIiOiIgIityKyIgIituKSsiKSI6IiIpfSxmLmVuc3VyZVVuaWZvcm1Gb250U2l6ZT1mdW5jdGlvbih0LGUpe3ZhciByPWYuZXh0ZW5kRmxhdCh7fSxlKTtyZXR1cm4gci5zaXplPU1hdGgubWF4KGUuc2l6ZSx0Ll9mdWxsTGF5b3V0LnVuaWZvcm10ZXh0Lm1pbnNpemV8fDApLHJ9LGYuam9pbjI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQubGVuZ3RoO3JldHVybiBuPjE/dC5zbGljZSgwLC0xKS5qb2luKGUpK3IrdFtuLTFdOnQuam9pbihlKX0sZi5iaWdGb250PWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKDEuMip0KX07dmFyIGo9Zi5nZXRGaXJlZm94VmVyc2lvbigpLFU9bnVsbCE9PWomJmo8ODY7Zi5nZXRQb3NpdGlvbkZyb21EM0V2ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIFU/W24uZXZlbnQubGF5ZXJYLG4uZXZlbnQubGF5ZXJZXTpbbi5ldmVudC5vZmZzZXRYLG4uZXZlbnQub2Zmc2V0WV19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi9hbmNob3JfdXRpbHMiOjc1NiwiLi9hbmdsZXMiOjc1NywiLi9hcnJheSI6NzU4LCIuL2NsZWFuX251bWJlciI6NzU5LCIuL2NsZWFyX3Jlc3BvbnNpdmUiOjc2MSwiLi9jb2VyY2UiOjc2MiwiLi9kYXRlcyI6NzYzLCIuL2RvbSI6NzY0LCIuL2V4dGVuZCI6NzY2LCIuL2ZpbHRlcl91bmlxdWUiOjc2NywiLi9maWx0ZXJfdmlzaWJsZSI6NzY4LCIuL2dlb21ldHJ5MmQiOjc3MSwiLi9pZGVudGl0eSI6Nzc0LCIuL2luY3JlbWVudCI6Nzc1LCIuL2lzX3BsYWluX29iamVjdCI6Nzc3LCIuL2tleWVkX2NvbnRhaW5lciI6Nzc4LCIuL2xvY2FsaXplIjo3NzksIi4vbG9nZ2VycyI6NzgwLCIuL21ha2VfdHJhY2VfZ3JvdXBzIjo3ODEsIi4vbWF0cml4Ijo3ODIsIi4vbW9kIjo3ODMsIi4vbmVzdGVkX3Byb3BlcnR5Ijo3ODQsIi4vbm9vcCI6Nzg1LCIuL25vdGlmaWVyIjo3ODYsIi4vcHJlc2VydmVfZHJhd2luZ19idWZmZXIiOjc5MCwiLi9wdXNoX3VuaXF1ZSI6NzkxLCIuL3JlZ2V4Ijo3OTMsIi4vcmVsYXRpdmVfYXR0ciI6Nzk0LCIuL3JlbGlua19wcml2YXRlIjo3OTUsIi4vc2VhcmNoIjo3OTYsIi4vc29ydF9vYmplY3Rfa2V5cyI6Nzk5LCIuL3N0YXRzIjo4MDAsIi4vdGhyb3R0bGUiOjgwMywiLi90b19sb2dfcmFuZ2UiOjgwNCwiQHBsb3RseS9kMyI6NTgsImQzLWZvcm1hdCI6MTYwLCJkMy10aW1lLWZvcm1hdCI6MTY4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gd2luZG93JiZ3aW5kb3cucHJvY2VzcyYmd2luZG93LnByb2Nlc3MudmVyc2lvbnM/IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCk6IltvYmplY3QgT2JqZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkmJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KS5oYXNPd25Qcm9wZXJ0eSgiaGFzT3duUHJvcGVydHkiKX19LHt9XSw3Nzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9uZXN0ZWRfcHJvcGVydHkiKSxpPS9eXHcqJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvLHMsbDtyPXJ8fCJuYW1lIixhPWF8fCJ2YWx1ZSI7dmFyIGM9e307ZSYmZS5sZW5ndGg/KGw9bih0LGUpLHM9bC5nZXQoKSk6cz10LGU9ZXx8IiI7dmFyIHU9e307aWYocylmb3Iobz0wO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV09bzt2YXIgZj1pLnRlc3QoYSksaD17c2V0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9bnVsbD09PWU/NDowO2lmKCFzKXtpZighbHx8ND09PWkpcmV0dXJuO3M9W10sbC5zZXQocyl9dmFyIG89dVt0XTtpZih2b2lkIDA9PT1vKXtpZig0PT09aSlyZXR1cm47aXw9MyxvPXMubGVuZ3RoLHVbdF09b31lbHNlIGUhPT0oZj9zW29dW2FdOm4oc1tvXSxhKS5nZXQoKSkmJihpfD0yKTt2YXIgcD1zW29dPXNbb118fHt9O3JldHVybiBwW3JdPXQsZj9wW2FdPWU6bihwLGEpLnNldChlKSxudWxsIT09ZSYmKGkmPS01KSxjW29dPWNbb118aSxofSxnZXQ6ZnVuY3Rpb24odCl7aWYocyl7dmFyIGU9dVt0XTtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIDA6Zj9zW2VdW2FdOm4oc1tlXSxhKS5nZXQoKX19LHJlbmFtZTpmdW5jdGlvbih0LGUpe3ZhciBuPXVbdF07cmV0dXJuIHZvaWQgMD09PW58fChjW25dPTF8Y1tuXSx1W2VdPW4sZGVsZXRlIHVbdF0sc1tuXVtyXT1lKSxofSxyZW1vdmU6ZnVuY3Rpb24odCl7dmFyIGU9dVt0XTtpZih2b2lkIDA9PT1lKXJldHVybiBoO3ZhciBpPXNbZV07aWYoT2JqZWN0LmtleXMoaSkubGVuZ3RoPjIpcmV0dXJuIGNbZV09MnxjW2VdLGguc2V0KHQsbnVsbCk7aWYoZil7Zm9yKG89ZTtvPHMubGVuZ3RoO28rKyljW29dPTN8Y1tvXTtmb3Iobz1lO288cy5sZW5ndGg7bysrKXVbc1tvXVtyXV0tLTtzLnNwbGljZShlLDEpLGRlbGV0ZSB1W3RdfWVsc2UgbihpLGEpLnNldChudWxsKSxjW2VdPTZ8Y1tlXTtyZXR1cm4gaH0sY29uc3RydWN0VXBkYXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGksbz17fSxsPU9iamVjdC5rZXlzKGMpLHU9MDt1PGwubGVuZ3RoO3UrKylpPWxbdV0sdD1lKyJbIitpKyJdIixzW2ldPygxJmNbaV0mJihvW3QrIi4iK3JdPXNbaV1bcl0pLDImY1tpXSYmKG9bdCsiLiIrYV09Zj80JmNbaV0/bnVsbDpzW2ldW2FdOjQmY1tpXT9udWxsOm4oc1tpXSxhKS5nZXQoKSkpOm9bdF09bnVsbDtyZXR1cm4gb319O3JldHVybiBofX0seyIuL25lc3RlZF9wcm9wZXJ0eSI6Nzg0fV0sNzc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2NvbnRleHQubG9jYWxlLGk9MDtpPDI7aSsrKXtmb3IodmFyIGE9dC5fY29udGV4dC5sb2NhbGVzLG89MDtvPDI7bysrKXt2YXIgcz0oYVtyXXx8e30pLmRpY3Rpb25hcnk7aWYocyl7dmFyIGw9c1tlXTtpZihsKXJldHVybiBsfWE9bi5sb2NhbGVSZWdpc3RyeX12YXIgYz1yLnNwbGl0KCItIilbMF07aWYoYz09PXIpYnJlYWs7cj1jfXJldHVybiBlfX0seyIuLi9yZWdpc3RyeSI6OTA0fV0sNzgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIikuZGZsdENvbmZpZyxpPXQoIi4vbm90aWZpZXIiKSxhPWUuZXhwb3J0cz17fTthLmxvZz1mdW5jdGlvbigpe3ZhciB0O2lmKG4ubG9nZ2luZz4xKXt2YXIgZT1bIkxPRzoiXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZS5wdXNoKGFyZ3VtZW50c1t0XSk7Y29uc29sZS50cmFjZS5hcHBseShjb25zb2xlLGUpfWlmKG4ubm90aWZ5T25Mb2dnaW5nPjEpe3ZhciByPVtdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylyLnB1c2goYXJndW1lbnRzW3RdKTtpKHIuam9pbigiPGJyPiIpLCJsb25nIil9fSxhLndhcm49ZnVuY3Rpb24oKXt2YXIgdDtpZihuLmxvZ2dpbmc+MCl7dmFyIGU9WyJXQVJOOiJdO2Zvcih0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllLnB1c2goYXJndW1lbnRzW3RdKTtjb25zb2xlLnRyYWNlLmFwcGx5KGNvbnNvbGUsZSl9aWYobi5ub3RpZnlPbkxvZ2dpbmc+MCl7dmFyIHI9W107Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXIucHVzaChhcmd1bWVudHNbdF0pO2koci5qb2luKCI8YnI+IiksInN0aWNrIil9fSxhLmVycm9yPWZ1bmN0aW9uKCl7dmFyIHQ7aWYobi5sb2dnaW5nPjApe3ZhciBlPVsiRVJST1I6Il07Zm9yKHQ9MDt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKWUucHVzaChhcmd1bWVudHNbdF0pO2NvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxlKX1pZihuLm5vdGlmeU9uTG9nZ2luZz4wKXt2YXIgcj1bXTtmb3IodD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspci5wdXNoKGFyZ3VtZW50c1t0XSk7aShyLmpvaW4oIjxicj4iKSwic3RpY2siKX19fSx7Ii4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo4MTQsIi4vbm90aWZpZXIiOjc4Nn1dLDc4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10LnNlbGVjdEFsbCgiZy4iK3IucmVwbGFjZSgvXHMvZywiLiIpKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKTtpLmV4aXQoKS5yZW1vdmUoKSxpLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLHIpLGkub3JkZXIoKTt2YXIgYT10LmNsYXNzZWQoInJhbmdlcGxvdCIpPyJub2RlUmFuZ2VQbG90MyI6Im5vZGUzIjtyZXR1cm4gaS5lYWNoKChmdW5jdGlvbih0KXt0WzBdW2FdPW4uc2VsZWN0KHRoaXMpfSkpLGl9fSx7IkBwbG90bHkvZDMiOjU4fV0sNzgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLW1hdDQiKTtyLmluaXQyZEFycmF5PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSh0KSxuPTA7bjx0O24rKylyW25dPW5ldyBBcnJheShlKTtyZXR1cm4gcn0sci50cmFuc3Bvc2VSYWdnZWQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPTAsaT10Lmxlbmd0aDtmb3IoZT0wO2U8aTtlKyspbj1NYXRoLm1heChuLHRbZV0ubGVuZ3RoKTt2YXIgYT1uZXcgQXJyYXkobik7Zm9yKGU9MDtlPG47ZSsrKWZvcihhW2VdPW5ldyBBcnJheShpKSxyPTA7cjxpO3IrKylhW2VdW3JdPXRbcl1bZV07cmV0dXJuIGF9LHIuZG90PWZ1bmN0aW9uKHQsZSl7aWYoIXQubGVuZ3RofHwhZS5sZW5ndGh8fHQubGVuZ3RoIT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIG4saSxhPXQubGVuZ3RoO2lmKHRbMF0ubGVuZ3RoKWZvcihuPW5ldyBBcnJheShhKSxpPTA7aTxhO2krKyluW2ldPXIuZG90KHRbaV0sZSk7ZWxzZSBpZihlWzBdLmxlbmd0aCl7dmFyIG89ci50cmFuc3Bvc2VSYWdnZWQoZSk7Zm9yKG49bmV3IEFycmF5KG8ubGVuZ3RoKSxpPTA7aTxvLmxlbmd0aDtpKyspbltpXT1yLmRvdCh0LG9baV0pfWVsc2UgZm9yKG49MCxpPTA7aTxhO2krKyluKz10W2ldKmVbaV07cmV0dXJuIG59LHIudHJhbnNsYXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bWzEsMCx0XSxbMCwxLGVdLFswLDAsMV1dfSxyLnJvdGF0aW9uTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPXQqTWF0aC5QSS8xODA7cmV0dXJuW1tNYXRoLmNvcyhlKSwtTWF0aC5zaW4oZSksMF0sW01hdGguc2luKGUpLE1hdGguY29zKGUpLDBdLFswLDAsMV1dfSxyLnJvdGF0aW9uWFlNYXRyaXg9ZnVuY3Rpb24odCxlLG4pe3JldHVybiByLmRvdChyLmRvdChyLnRyYW5zbGF0aW9uTWF0cml4KGUsbiksci5yb3RhdGlvbk1hdHJpeCh0KSksci50cmFuc2xhdGlvbk1hdHJpeCgtZSwtbikpfSxyLmFwcGx5M0RUcmFuc2Zvcm09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLG49MT09PWFyZ3VtZW50cy5sZW5ndGg/ZVswXTpbZVswXSxlWzFdLGVbMl18fDBdO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sblsyXSwxXSkuc2xpY2UoMCwzKX19LHIuYXBwbHkyRFRyYW5zZm9ybT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7Mz09PWUubGVuZ3RoJiYoZT1lWzBdKTt2YXIgbj0xPT09YXJndW1lbnRzLmxlbmd0aD9lWzBdOltlWzBdLGVbMV1dO3JldHVybiByLmRvdCh0LFtuWzBdLG5bMV0sMV0pLnNsaWNlKDAsMil9fSxyLmFwcGx5MkRUcmFuc2Zvcm0yPWZ1bmN0aW9uKHQpe3ZhciBlPXIuYXBwbHkyRFRyYW5zZm9ybSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodC5zbGljZSgwLDIpKS5jb25jYXQoZSh0LnNsaWNlKDIsNCkpKX19LHIuY29udmVydENzc01hdHJpeD1mdW5jdGlvbih0KXtpZih0KXt2YXIgZT10Lmxlbmd0aDtpZigxNj09PWUpcmV0dXJuIHQ7aWYoNj09PWUpcmV0dXJuW3RbMF0sdFsxXSwwLDAsdFsyXSx0WzNdLDAsMCwwLDAsMSwwLHRbNF0sdFs1XSwwLDFdfXJldHVyblsxLDAsMCwwLDAsMSwwLDAsMCwwLDEsMCwwLDAsMCwxXX0sci5pbnZlcnNlVHJhbnNmb3JtTWF0cml4PWZ1bmN0aW9uKHQpe3ZhciBlPVtdO3JldHVybiBuLmludmVydChlLHQpLFtbZVswXSxlWzFdLGVbMl0sZVszXV0sW2VbNF0sZVs1XSxlWzZdLGVbN11dLFtlWzhdLGVbOV0sZVsxMF0sZVsxMV1dLFtlWzEyXSxlWzEzXSxlWzE0XSxlWzE1XV1dfX0seyJnbC1tYXQ0IjoyODZ9XSw3ODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10JWU7cmV0dXJuIHI8MD9yK2U6cn0sbW9kSGFsZjpmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyh0KT5lLzI/dC1NYXRoLnJvdW5kKHQvZSkqZTp0fX19LHt9XSw3ODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4vYXJyYXkiKS5pc0FycmF5T3JUeXBlZEFycmF5O2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcixuLG8scyxsLGM9dDtmb3Iocz0wO3M8ZS5sZW5ndGgtMTtzKyspe2lmKC0xPT09KHI9ZVtzXSkpe2ZvcihuPSEwLG89W10sbD0wO2w8Yy5sZW5ndGg7bCsrKW9bbF09YShjW2xdLGUuc2xpY2UocysxKSkoKSxvW2xdIT09b1swXSYmKG49ITEpO3JldHVybiBuP29bMF06b31pZigibnVtYmVyIj09dHlwZW9mIHImJiFpKGMpKXJldHVybjtpZigib2JqZWN0IiE9dHlwZW9mKGM9Y1tyXSl8fG51bGw9PT1jKXJldHVybn1pZigib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiZudWxsIT09KG89Y1tlW3NdXSkpcmV0dXJuIG99fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKG4oZSkpZT1TdHJpbmcoZSk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGV8fCJbLTFdIj09PWUuc3Vic3RyKGUubGVuZ3RoLTQpKXRocm93ImJhZCBwcm9wZXJ0eSBzdHJpbmciO2Zvcih2YXIgcixpLG8scz0wLGM9ZS5zcGxpdCgiLiIpO3M8Yy5sZW5ndGg7KXtpZihyPVN0cmluZyhjW3NdKS5tYXRjaCgvXihbXlxbXF1dKikoKFxbXC0/WzAtOV0qXF0pKykkLykpe2lmKHJbMV0pY1tzXT1yWzFdO2Vsc2V7aWYoMCE9PXMpdGhyb3ciYmFkIHByb3BlcnR5IHN0cmluZyI7Yy5zcGxpY2UoMCwxKX1mb3IoaT1yWzJdLnN1YnN0cigxLHJbMl0ubGVuZ3RoLTIpLnNwbGl0KCJdWyIpLG89MDtvPGkubGVuZ3RoO28rKylzKyssYy5zcGxpY2UocywwLE51bWJlcihpW29dKSl9cysrfXJldHVybiJvYmplY3QiIT10eXBlb2YgdD9mdW5jdGlvbih0LGUscil7cmV0dXJue3NldDpmdW5jdGlvbigpe3Rocm93ImJhZCBjb250YWluZXIifSxnZXQ6ZnVuY3Rpb24oKXt9LGFzdHI6ZSxwYXJ0czpyLG9iajp0fX0odCxlLGMpOntzZXQ6bCh0LGMsZSksZ2V0OmEodCxjKSxhc3RyOmUscGFydHM6YyxvYmo6dH19O3ZhciBvPS8oXnxcLilhcmdzXFsvO2Z1bmN0aW9uIHModCxlKXtyZXR1cm4gdm9pZCAwPT09dHx8bnVsbD09PXQmJiFlLm1hdGNoKG8pfWZ1bmN0aW9uIGwodCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgYSxvLGw9dCxoPSIiLHA9W1t0LGhdXSxkPXMobixyKTtmb3Iobz0wO288ZS5sZW5ndGgtMTtvKyspe2lmKCJudW1iZXIiPT10eXBlb2YoYT1lW29dKSYmIWkobCkpdGhyb3ciYXJyYXkgaW5kZXggYnV0IGNvbnRhaW5lciBpcyBub3QgYW4gYXJyYXkiO2lmKC0xPT09YSl7aWYoZD0hdShsLGUuc2xpY2UobysxKSxuLHIpKWJyZWFrO3JldHVybn1pZighZihsLGEsZVtvKzFdLGQpKWJyZWFrO2lmKCJvYmplY3QiIT10eXBlb2YobD1sW2FdKXx8bnVsbD09PWwpdGhyb3ciY29udGFpbmVyIGlzIG5vdCBhbiBvYmplY3QiO2g9YyhoLGEpLHAucHVzaChbbCxoXSl9aWYoZCl7aWYobz09PWUubGVuZ3RoLTEmJihkZWxldGUgbFtlW29dXSxBcnJheS5pc0FycmF5KGwpJiYrZVtvXT09bC5sZW5ndGgtMSkpZm9yKDtsLmxlbmd0aCYmdm9pZCAwPT09bFtsLmxlbmd0aC0xXTspbC5wb3AoKX1lbHNlIGxbZVtvXV09bn19ZnVuY3Rpb24gYyh0LGUpe3ZhciByPWU7cmV0dXJuIG4oZSk/cj0iWyIrZSsiXSI6dCYmKHI9Ii4iK2UpLHQrcn1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBhLG89aShyKSxjPSEwLHU9cixoPW4ucmVwbGFjZSgiLTEiLDApLHA9IW8mJnMocixoKSxkPWVbMF07Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyloPW4ucmVwbGFjZSgiLTEiLGEpLG8mJihwPXModT1yW2Elci5sZW5ndGhdLGgpKSxwJiYoYz0hMSksZih0LGEsZCxwKSYmbCh0W2FdLGUsbi5yZXBsYWNlKCItMSIsYSkpKHUpO3JldHVybiBjfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYodm9pZCAwPT09dFtlXSl7aWYobilyZXR1cm4hMTt0W2VdPSJudW1iZXIiPT10eXBlb2Ygcj9bXTp7fX1yZXR1cm4hMH19LHsiLi9hcnJheSI6NzU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzg1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbigpe319LHt9XSw3ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPVtdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKC0xPT09YS5pbmRleE9mKHQpKXthLnB1c2godCk7dmFyIHI9MWUzO2koZSk/cj1lOiJsb25nIj09PWUmJihyPTNlMyk7dmFyIG89bi5zZWxlY3QoImJvZHkiKS5zZWxlY3RBbGwoIi5wbG90bHktbm90aWZpZXIiKS5kYXRhKFswXSk7by5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgicGxvdGx5LW5vdGlmaWVyIiwhMCksby5zZWxlY3RBbGwoIi5ub3RpZmllci1ub3RlIikuZGF0YShhKS5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgibm90aWZpZXItbm90ZSIsITApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgaT1uLnNlbGVjdCh0aGlzKTtpLmFwcGVuZCgiYnV0dG9uIikuY2xhc3NlZCgibm90aWZpZXItY2xvc2UiLCEwKS5odG1sKCImdGltZXM7Iikub24oImNsaWNrIiwoZnVuY3Rpb24oKXtpLnRyYW5zaXRpb24oKS5jYWxsKHMpfSkpO2Zvcih2YXIgYT1pLmFwcGVuZCgicCIpLG89dC5zcGxpdCgvPGJyXHMqXC8/Pi9nKSxsPTA7bDxvLmxlbmd0aDtsKyspbCYmYS5hcHBlbmQoImJyIiksYS5hcHBlbmQoInNwYW4iKS50ZXh0KG9bbF0pOyJzdGljayI9PT1lP2kudHJhbnNpdGlvbigpLmR1cmF0aW9uKDM1MCkuc3R5bGUoIm9wYWNpdHkiLDEpOmkudHJhbnNpdGlvbigpLmR1cmF0aW9uKDcwMCkuc3R5bGUoIm9wYWNpdHkiLDEpLnRyYW5zaXRpb24oKS5kZWxheShyKS5jYWxsKHMpfSkpfWZ1bmN0aW9uIHModCl7dC5kdXJhdGlvbig3MDApLnN0eWxlKCJvcGFjaXR5IiwwKS5lYWNoKCJlbmQiLChmdW5jdGlvbih0KXt2YXIgZT1hLmluZGV4T2YodCk7LTEhPT1lJiZhLnNwbGljZShlLDEpLG4uc2VsZWN0KHRoaXMpLnJlbW92ZSgpfSkpfX19LHsiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw3ODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9zZXRjdXJzb3IiKSxpPSJkYXRhLXNhdmVkY3Vyc29yIjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmF0dHIoaSk7aWYoZSl7aWYoIXIpe2Zvcih2YXIgYT0odC5hdHRyKCJjbGFzcyIpfHwiIikuc3BsaXQoIiAiKSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107MD09PXMuaW5kZXhPZigiY3Vyc29yLSIpJiZ0LmF0dHIoaSxzLnN1YnN0cig3KSkuY2xhc3NlZChzLCExKX10LmF0dHIoaSl8fHQuYXR0cihpLCIhISIpfW4odCxlKX1lbHNlIHImJih0LmF0dHIoaSxudWxsKSwiISEiPT09cj9uKHQpOm4odCxyKSl9fSx7Ii4vc2V0Y3Vyc29yIjo3OTd9XSw3ODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9tYXRyaXgiKS5kb3QsaT10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGE9ZS5leHBvcnRzPXt9O2EudGVzdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zbGljZSgpLG49clswXVswXSxhPW4sbz1yWzBdWzFdLHM9bztmb3Ioci5wdXNoKHJbMF0pLGU9MTtlPHIubGVuZ3RoO2UrKyluPU1hdGgubWluKG4scltlXVswXSksYT1NYXRoLm1heChhLHJbZV1bMF0pLG89TWF0aC5taW4obyxyW2VdWzFdKSxzPU1hdGgubWF4KHMscltlXVsxXSk7dmFyIGwsYz0hMTs1PT09ci5sZW5ndGgmJihyWzBdWzBdPT09clsxXVswXT9yWzJdWzBdPT09clszXVswXSYmclswXVsxXT09PXJbM11bMV0mJnJbMV1bMV09PT1yWzJdWzFdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09clswXVswXX0pOnJbMF1bMV09PT1yWzFdWzFdJiZyWzJdWzFdPT09clszXVsxXSYmclswXVswXT09PXJbM11bMF0mJnJbMV1bMF09PT1yWzJdWzBdJiYoYz0hMCxsPWZ1bmN0aW9uKHQpe3JldHVybiB0WzFdPT09clswXVsxXX0pKTt2YXIgdT0hMCxmPXJbMF07Zm9yKGU9MTtlPHIubGVuZ3RoO2UrKylpZihmWzBdIT09cltlXVswXXx8ZlsxXSE9PXJbZV1bMV0pe3U9ITE7YnJlYWt9cmV0dXJue3htaW46bix4bWF4OmEseW1pbjpvLHltYXg6cyxwdHM6cixjb250YWluczpjP2Z1bmN0aW9uKHQsZSl7dmFyIHI9dFswXSxjPXRbMV07cmV0dXJuIShyPT09aXx8cjxufHxyPmF8fGM9PT1pfHxjPG98fGM+cykmJighZXx8IWwodCkpfTpmdW5jdGlvbih0LGUpe3ZhciBsPXRbMF0sYz10WzFdO2lmKGw9PT1pfHxsPG58fGw+YXx8Yz09PWl8fGM8b3x8Yz5zKXJldHVybiExO3ZhciB1LGYsaCxwLGQsbT1yLmxlbmd0aCxnPXJbMF1bMF0sdj1yWzBdWzFdLHk9MDtmb3IodT0xO3U8bTt1KyspaWYoZj1nLGg9dixnPXJbdV1bMF0sdj1yW3VdWzFdLCEobDwocD1NYXRoLm1pbihmLGcpKXx8bD5NYXRoLm1heChmLGcpfHxjPk1hdGgubWF4KGgsdikpKWlmKGM8TWF0aC5taW4oaCx2KSlsIT09cCYmeSsrO2Vsc2V7aWYoYz09PShkPWc9PT1mP2M6aCsobC1mKSoodi1oKS8oZy1mKSkpcmV0dXJuIDEhPT11fHwhZTtjPD1kJiZsIT09cCYmeSsrfXJldHVybiB5JTI9PTF9LGlzUmVjdDpjLGRlZ2VuZXJhdGU6dX19LGEuaXNTZWdtZW50QmVudD1mdW5jdGlvbih0LGUscixpKXt2YXIgYSxvLHMsbD10W2VdLGM9W3Rbcl1bMF0tbFswXSx0W3JdWzFdLWxbMV1dLHU9bihjLGMpLGY9TWF0aC5zcXJ0KHUpLGg9Wy1jWzFdL2YsY1swXS9mXTtmb3IoYT1lKzE7YTxyO2ErKylpZihvPVt0W2FdWzBdLWxbMF0sdFthXVsxXS1sWzFdXSwocz1uKG8sYykpPDB8fHM+dXx8TWF0aC5hYnMobihvLGgpKT5pKXJldHVybiEwO3JldHVybiExfSxhLmZpbHRlcj1mdW5jdGlvbih0LGUpe3ZhciByPVt0WzBdXSxuPTAsaT0wO2Z1bmN0aW9uIG8obyl7dC5wdXNoKG8pO3ZhciBzPXIubGVuZ3RoLGw9bjtyLnNwbGljZShpKzEpO2Zvcih2YXIgYz1sKzE7Yzx0Lmxlbmd0aDtjKyspKGM9PT10Lmxlbmd0aC0xfHxhLmlzU2VnbWVudEJlbnQodCxsLGMrMSxlKSkmJihyLnB1c2godFtjXSksci5sZW5ndGg8cy0yJiYobj1jLGk9ci5sZW5ndGgtMSksbD1jKX10Lmxlbmd0aD4xJiZvKHQucG9wKCkpO3JldHVybnthZGRQdDpvLHJhdzp0LGZpbHRlcmVkOnJ9fX0seyIuLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4vbWF0cml4Ijo3ODJ9XSw3ODk6W2Z1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24ocil7KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc2hvd19ub193ZWJnbF9tc2ciKSxpPXQoInJlZ2wiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ITA7cmV0dXJuIGEuX2dsY2FudmFzLmVhY2goKGZ1bmN0aW9uKG4pe2lmKCFuLnJlZ2wmJighbi5waWNrfHxhLl9oYXMoInBhcmNvb3JkcyIpKSl7dHJ5e24ucmVnbD1pKHtjYW52YXM6dGhpcyxhdHRyaWJ1dGVzOnthbnRpYWxpYXM6IW4ucGljayxwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6ITB9LHBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvfHxyLmRldmljZVBpeGVsUmF0aW8sZXh0ZW5zaW9uczplfHxbXX0pfWNhdGNoKHQpe289ITF9bi5yZWdsfHwobz0hMSksbyYmdGhpcy5hZGRFdmVudExpc3RlbmVyKCJ3ZWJnbGNvbnRleHRsb3N0IiwoZnVuY3Rpb24oZSl7dCYmdC5lbWl0JiZ0LmVtaXQoInBsb3RseV93ZWJnbGNvbnRleHRsb3N0Iix7ZXZlbnQ6ZSxsYXllcjpuLmtleX0pfSksITEpfX0pKSxvfHxuKHtjb250YWluZXI6YS5fZ2xjb250YWluZXIubm9kZSgpfSksb319KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLCJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6e30pfSx7Ii4vc2hvd19ub193ZWJnbF9tc2ciOjc5OCxyZWdsOjUxNn1dLDc5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiaXMtbW9iaWxlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKCJzdHJpbmciIT10eXBlb2YoZT10JiZ0Lmhhc093blByb3BlcnR5KCJ1c2VyQWdlbnQiKT90LnVzZXJBZ2VudDpmdW5jdGlvbigpe3ZhciB0OyJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYodD1uYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0LmhlYWRlcnMmJiJzdHJpbmciPT10eXBlb2YgdC5oZWFkZXJzWyJ1c2VyLWFnZW50Il0mJih0PXQuaGVhZGVyc1sidXNlci1hZ2VudCJdKTtyZXR1cm4gdH0oKSkpcmV0dXJuITA7dmFyIHI9aSh7dWE6e2hlYWRlcnM6eyJ1c2VyLWFnZW50IjplfX0sdGFibGV0OiEwLGZlYXR1cmVEZXRlY3Q6ITF9KTtpZighcilmb3IodmFyIGE9ZS5zcGxpdCgiICIpLG89MTtvPGEubGVuZ3RoO28rKyl7aWYoLTEhPT1hW29dLmluZGV4T2YoIlNhZmFyaSIpKWZvcih2YXIgcz1vLTE7cz4tMTtzLS0pe3ZhciBsPWFbc107aWYoIlZlcnNpb24vIj09PWwuc3Vic3RyKDAsOCkpe3ZhciBjPWwuc3Vic3RyKDgpLnNwbGl0KCIuIilbMF07aWYobihjKSYmKGM9K2MpLGM+PTEzKXJldHVybiEwfX19cmV0dXJuIHJ9fSx7ImZhc3QtaXNudW1lcmljIjoyNDIsImlzLW1vYmlsZSI6NDM1fV0sNzkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApe2Zvcih2YXIgcj1lLnRvU3RyaW5nKCksbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbnN0YW5jZW9mIFJlZ0V4cCYmdFtuXS50b1N0cmluZygpPT09cilyZXR1cm4gdDt0LnB1c2goZSl9ZWxzZSFlJiYwIT09ZXx8LTEhPT10LmluZGV4T2YoZSl8fHQucHVzaChlKTtyZXR1cm4gdH19LHt9XSw3OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS9wbG90X2NvbmZpZyIpLmRmbHRDb25maWc7dmFyIGE9e2FkZDpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvLHM7dC51bmRvUXVldWU9dC51bmRvUXVldWV8fHtpbmRleDowLHF1ZXVlOltdLHNlcXVlbmNlOiExfSxzPXQudW5kb1F1ZXVlLmluZGV4LHQuYXV0b3BsYXk/dC51bmRvUXVldWUuaW5TZXF1ZW5jZXx8KHQuYXV0b3BsYXk9ITEpOighdC51bmRvUXVldWUuc2VxdWVuY2V8fHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U/KG89e3VuZG86e2NhbGxzOltdLGFyZ3M6W119LHJlZG86e2NhbGxzOltdLGFyZ3M6W119fSx0LnVuZG9RdWV1ZS5xdWV1ZS5zcGxpY2Uocyx0LnVuZG9RdWV1ZS5xdWV1ZS5sZW5ndGgtcyxvKSx0LnVuZG9RdWV1ZS5pbmRleCs9MSk6bz10LnVuZG9RdWV1ZS5xdWV1ZVtzLTFdLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITEsbyYmKG8udW5kby5jYWxscy51bnNoaWZ0KGUpLG8udW5kby5hcmdzLnVuc2hpZnQociksby5yZWRvLmNhbGxzLnB1c2gobiksby5yZWRvLmFyZ3MucHVzaChhKSksdC51bmRvUXVldWUucXVldWUubGVuZ3RoPmkucXVldWVMZW5ndGgmJih0LnVuZG9RdWV1ZS5xdWV1ZS5zaGlmdCgpLHQudW5kb1F1ZXVlLmluZGV4LS0pKX0sc3RhcnRTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSEwLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITB9LHN0b3BTZXF1ZW5jZTpmdW5jdGlvbih0KXt0LnVuZG9RdWV1ZT10LnVuZG9RdWV1ZXx8e2luZGV4OjAscXVldWU6W10sc2VxdWVuY2U6ITF9LHQudW5kb1F1ZXVlLnNlcXVlbmNlPSExLHQudW5kb1F1ZXVlLmJlZ2luU2VxdWVuY2U9ITF9LHVuZG86ZnVuY3Rpb24odCl7dmFyIGUscjtpZighKHZvaWQgMD09PXQudW5kb1F1ZXVlfHxpc05hTih0LnVuZG9RdWV1ZS5pbmRleCl8fHQudW5kb1F1ZXVlLmluZGV4PD0wKSl7Zm9yKHQudW5kb1F1ZXVlLmluZGV4LS0sZT10LnVuZG9RdWV1ZS5xdWV1ZVt0LnVuZG9RdWV1ZS5pbmRleF0sdC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMCxyPTA7cjxlLnVuZG8uY2FsbHMubGVuZ3RoO3IrKylhLnBsb3REbyh0LGUudW5kby5jYWxsc1tyXSxlLnVuZG8uYXJnc1tyXSk7dC51bmRvUXVldWUuaW5TZXF1ZW5jZT0hMSx0LmF1dG9wbGF5PSExfX0scmVkbzpmdW5jdGlvbih0KXt2YXIgZSxyO2lmKCEodm9pZCAwPT09dC51bmRvUXVldWV8fGlzTmFOKHQudW5kb1F1ZXVlLmluZGV4KXx8dC51bmRvUXVldWUuaW5kZXg+PXQudW5kb1F1ZXVlLnF1ZXVlLmxlbmd0aCkpe2ZvcihlPXQudW5kb1F1ZXVlLnF1ZXVlW3QudW5kb1F1ZXVlLmluZGV4XSx0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSEwLHI9MDtyPGUucmVkby5jYWxscy5sZW5ndGg7cisrKWEucGxvdERvKHQsZS5yZWRvLmNhbGxzW3JdLGUucmVkby5hcmdzW3JdKTt0LnVuZG9RdWV1ZS5pblNlcXVlbmNlPSExLHQuYXV0b3BsYXk9ITEsdC51bmRvUXVldWUuaW5kZXgrK319fTthLnBsb3REbz1mdW5jdGlvbih0LGUscil7dC5hdXRvcGxheT0hMCxyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLGk9W10sYT0wO2E8ZS5sZW5ndGg7YSsrKXI9ZVthXSxpW2FdPXI9PT10P3I6Im9iamVjdCI9PXR5cGVvZiByP0FycmF5LmlzQXJyYXkocik/bi5leHRlbmREZWVwKFtdLHIpOm4uZXh0ZW5kRGVlcEFsbCh7fSxyKTpyO3JldHVybiBpfSh0LHIpLGUuYXBwbHkobnVsbCxyKX0sZS5leHBvcnRzPWF9LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RfYXBpL3Bsb3RfY29uZmlnIjo4MTR9XSw3OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci5jb3VudGVyPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPShlfHwiIikrKHI/IiI6IiQiKSxhPSExPT09bj8iIjoiXiI7cmV0dXJuInh5Ij09PXQ/bmV3IFJlZ0V4cChhKyJ4KFsyLTldfFsxLTldWzAtOV0rKT95KFsyLTldfFsxLTldWzAtOV0rKT8iK2kpOm5ldyBSZWdFeHAoYSt0KyIoWzItOV18WzEtOV1bMC05XSspPyIraSl9fSx7fV0sNzk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPS9eKC4qKShcLlteXC5cW1xdXSt8XFtcZFxdKSQvLGk9L15bXlwuXFtcXV0rJC87ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKDtlOyl7dmFyIHI9dC5tYXRjaChuKTtpZihyKXQ9clsxXTtlbHNle2lmKCF0Lm1hdGNoKGkpKXRocm93IG5ldyBFcnJvcigiYmFkIHJlbGF0aXZlQXR0ciBjYWxsOiIrW3QsZV0pO3Q9IiJ9aWYoIl4iIT09ZS5jaGFyQXQoMCkpYnJlYWs7ZT1lLnNsaWNlKDEpfXJldHVybiB0JiYiWyIhPT1lLmNoYXJBdCgwKT90KyIuIitlOnQrZX19LHt9XSw3OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9hcnJheSIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuL2lzX3BsYWluX29iamVjdCIpO2UuZXhwb3J0cz1mdW5jdGlvbiB0KGUscil7Zm9yKHZhciBhIGluIHIpe3ZhciBvPXJbYV0scz1lW2FdO2lmKHMhPT1vKWlmKCJfIj09PWEuY2hhckF0KDApfHwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7aWYoYSBpbiBlKWNvbnRpbnVlO2VbYV09b31lbHNlIGlmKG4obykmJm4ocykmJmkob1swXSkpe2lmKCJjdXN0b21kYXRhIj09PWF8fCJpZHMiPT09YSljb250aW51ZTtmb3IodmFyIGw9TWF0aC5taW4oby5sZW5ndGgscy5sZW5ndGgpLGM9MDtjPGw7YysrKXNbY10hPT1vW2NdJiZpKG9bY10pJiZpKHNbY10pJiZ0KHNbY10sb1tjXSl9ZWxzZSBpKG8pJiZpKHMpJiYodChzLG8pLE9iamVjdC5rZXlzKHMpLmxlbmd0aHx8ZGVsZXRlIGVbYV0pfX19LHsiLi9hcnJheSI6NzU4LCIuL2lzX3BsYWluX29iamVjdCI6Nzc3fV0sNzk2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xvZ2dlcnMiKSxhPXQoIi4vaWRlbnRpdHkiKSxvPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gcyh0LGUpe3JldHVybiB0PGV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0PD1lfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD5lfWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4gdD49ZX1yLmZpbmRCaW49ZnVuY3Rpb24odCxlLHIpe2lmKG4oZS5zdGFydCkpcmV0dXJuIHI/TWF0aC5jZWlsKCh0LWUuc3RhcnQpL2Uuc2l6ZS0xZS05KS0xOk1hdGguZmxvb3IoKHQtZS5zdGFydCkvZS5zaXplKzFlLTkpO3ZhciBhLG8sZj0wLGg9ZS5sZW5ndGgscD0wLGQ9aD4xPyhlW2gtMV0tZVswXSkvKGgtMSk6MTtmb3Iobz1kPj0wP3I/czpsOnI/dTpjLHQrPTFlLTkqZCoocj8tMToxKSooZD49MD8xOi0xKTtmPGgmJnArKzwxMDA7KW8oZVthPU1hdGguZmxvb3IoKGYraCkvMildLHQpP2Y9YSsxOmg9YTtyZXR1cm4gcD45MCYmaS5sb2coIkxvbmcgYmluYXJ5IHNlYXJjaC4uLiIpLGYtMX0sci5zb3J0ZXJBc2M9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSxyLnNvcnRlckRlcz1mdW5jdGlvbih0LGUpe3JldHVybiBlLXR9LHIuZGlzdGluY3RWYWxzPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5zbGljZSgpO2ZvcihuLnNvcnQoci5zb3J0ZXJBc2MpLGU9bi5sZW5ndGgtMTtlPi0xJiZuW2VdPT09bztlLS0pO2Zvcih2YXIgaSxhPW5bZV0tblswXXx8MSxzPWEvKGV8fDEpLzFlNCxsPVtdLGM9MDtjPD1lO2MrKyl7dmFyIHU9bltjXSxmPXUtaTt2b2lkIDA9PT1pPyhsLnB1c2godSksaT11KTpmPnMmJihhPU1hdGgubWluKGEsZiksbC5wdXNoKHUpLGk9dSl9cmV0dXJue3ZhbHM6bCxtaW5EaWZmOmF9fSxyLnJvdW5kVXA9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPTAsYT1lLmxlbmd0aC0xLG89MCxzPXI/MDoxLGw9cj8xOjAsYz1yP01hdGguY2VpbDpNYXRoLmZsb29yO2k8YSYmbysrPDEwMDspZVtuPWMoKGkrYSkvMildPD10P2k9bitzOmE9bi1sO3JldHVybiBlW2ldfSxyLnNvcnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTAsaT0xO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT1lKHRbaV0sdFtpLTFdKTtpZihhPDA/cj0xOmE+MCYmKG49MSksciYmbilyZXR1cm4gdC5zb3J0KGUpfXJldHVybiBuP3Q6dC5yZXZlcnNlKCl9LHIuZmluZEluZGV4T2ZNaW49ZnVuY3Rpb24odCxlKXtlPWV8fGE7Zm9yKHZhciByLG49MS8wLGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIG89ZSh0W2ldKTtvPG4mJihuPW8scj1pKX1yZXR1cm4gcn19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuL2lkZW50aXR5Ijo3NzQsIi4vbG9nZ2VycyI6NzgwLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sNzk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpeyh0LmF0dHIoImNsYXNzIil8fCIiKS5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpezA9PT1lLmluZGV4T2YoImN1cnNvci0iKSYmdC5jbGFzc2VkKGUsITEpfSkpLGUmJnQuY2xhc3NlZCgiY3Vyc29yLSIrZSwhMCl9fSx7fV0sNzk4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbXBvbmVudHMvY29sb3IiKSxpPWZ1bmN0aW9uKCl7fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlIGluIHQpImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0mJih0W2VdPWkpO3QuZGVzdHJveT1mdW5jdGlvbigpe3QuY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodC5jb250YWluZXIpfTt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmNsYXNzTmFtZT0ibm8td2ViZ2wiLHIuc3R5bGUuY3Vyc29yPSJwb2ludGVyIixyLnN0eWxlLmZvbnRTaXplPSIyNHB4IixyLnN0eWxlLmNvbG9yPW4uZGVmYXVsdHNbMF0sci5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHIuc3R5bGUubGVmdD1yLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLndpZHRoPXIuc3R5bGUuaGVpZ2h0PSIxMDAlIixyLnN0eWxlWyJiYWNrZ3JvdW5kLWNvbG9yIl09bi5saWdodExpbmUsci5zdHlsZVsiei1pbmRleCJdPTMwO3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTtyZXR1cm4gYS50ZXh0Q29udGVudD0iV2ViR0wgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIGJyb3dzZXIgLSB2aXNpdCBodHRwczovL2dldC53ZWJnbC5vcmcgZm9yIG1vcmUgaW5mbyIsYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLGEuc3R5bGUudG9wPSI1MCUiLGEuc3R5bGUubGVmdD0iNTAlIixhLnN0eWxlLmhlaWdodD0iMzAlIixhLnN0eWxlLndpZHRoPSI1MCUiLGEuc3R5bGUubWFyZ2luPSItMTUlIDAgMCAtMjUlIixyLmFwcGVuZENoaWxkKGEpLHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHIpLHQuY29udGFpbmVyLnN0eWxlLmJhY2tncm91bmQ9IiNGRkZGRkYiLHQuY29udGFpbmVyLm9uY2xpY2s9ZnVuY3Rpb24oKXt3aW5kb3cub3BlbigiaHR0cHM6Ly9nZXQud2ViZ2wub3JnIil9LCExfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2Mzl9XSw3OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qua2V5cyh0KS5zb3J0KCl9fSx7fV0sODAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2FycmF5IikuaXNBcnJheU9yVHlwZWRBcnJheTtyLmFnZ051bXM9ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHMsbDtpZigoIW98fG8+YS5sZW5ndGgpJiYobz1hLmxlbmd0aCksbihlKXx8KGU9ITEpLGkoYVswXSkpe2ZvcihsPW5ldyBBcnJheShvKSxzPTA7czxvO3MrKylsW3NdPXIuYWdnTnVtcyh0LGUsYVtzXSk7YT1sfWZvcihzPTA7czxvO3MrKyluKGUpP24oYVtzXSkmJihlPXQoK2UsK2Fbc10pKTplPWFbc107cmV0dXJuIGV9LHIubGVuPWZ1bmN0aW9uKHQpe3JldHVybiByLmFnZ051bXMoKGZ1bmN0aW9uKHQpe3JldHVybiB0KzF9KSwwLHQpfSxyLm1lYW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8KGU9ci5sZW4odCkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlfSksMCx0KS9lfSxyLm1pZFJhbmdlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQmJjAhPT10Lmxlbmd0aClyZXR1cm4oci5hZ2dOdW1zKE1hdGgubWF4LG51bGwsdCkrci5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCkpLzJ9LHIudmFyaWFuY2U9ZnVuY3Rpb24odCxlLGkpe3JldHVybiBlfHwoZT1yLmxlbih0KSksbihpKXx8KGk9ci5tZWFuKHQsZSkpLHIuYWdnTnVtcygoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtNYXRoLnBvdyhlLWksMil9KSwwLHQpL2V9LHIuc3RkZXY9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBNYXRoLnNxcnQoci52YXJpYW5jZSh0LGUsbikpfSxyLm1lZGlhbj1mdW5jdGlvbih0KXt2YXIgZT10LnNsaWNlKCkuc29ydCgpO3JldHVybiByLmludGVycChlLC41KX0sci5pbnRlcnA9ZnVuY3Rpb24odCxlKXtpZighbihlKSl0aHJvdyJuIHNob3VsZCBiZSBhIGZpbml0ZSBudW1iZXIiO2lmKChlPWUqdC5sZW5ndGgtLjUpPDApcmV0dXJuIHRbMF07aWYoZT50Lmxlbmd0aC0xKXJldHVybiB0W3QubGVuZ3RoLTFdO3ZhciByPWUlMTtyZXR1cm4gcip0W01hdGguY2VpbChlKV0rKDEtcikqdFtNYXRoLmZsb29yKGUpXX19LHsiLi9hcnJheSI6NzU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODAxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImNvbG9yLW5vcm1hbGl6ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD9uKHQpOlswLDAsMCwxXX19LHsiY29sb3Itbm9ybWFsaXplIjoxMjZ9XSw4MDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vbGliIiksYT1pLnN0clRyYW5zbGF0ZSxvPXQoIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIikscz10KCIuLi9jb25zdGFudHMvYWxpZ25tZW50IikuTElORV9TUEFDSU5HO2Z1bmN0aW9uIGwodCxlKXtyZXR1cm4gdC5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZV19dmFyIGM9LyhbXiRdKikoWyRdK1teJF0qWyRdKykoW14kXSopLztyLmNvbnZlcnRUb1RzcGFucz1mdW5jdGlvbih0LGUsbSl7dmFyIE09dC50ZXh0KCksUz0hdC5hdHRyKCJkYXRhLW5vdGV4IikmJiJ1bmRlZmluZWQiIT10eXBlb2YgTWF0aEpheCYmTS5tYXRjaChjKSxDPW4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpO2lmKCFDLmVtcHR5KCkpe3ZhciBQPXQuYXR0cigiY2xhc3MiKT90LmF0dHIoImNsYXNzIikuc3BsaXQoIiAiKVswXToidGV4dCI7cmV0dXJuIFArPSItbWF0aCIsQy5zZWxlY3RBbGwoInN2Zy4iK1ApLnJlbW92ZSgpLEMuc2VsZWN0QWxsKCJnLiIrUCsiLWdyb3VwIikucmVtb3ZlKCksdC5zdHlsZSgiZGlzcGxheSIsbnVsbCkuYXR0cih7ImRhdGEtdW5mb3JtYXR0ZWQiOk0sImRhdGEtbWF0aCI6Ik4ifSksUz8oZSYmZS5fcHJvbWlzZXN8fFtdKS5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihlKXt0LnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpO3ZhciByPXBhcnNlSW50KHQubm9kZSgpLnN0eWxlLmZvbnRTaXplLDEwKSxvPXtmb250U2l6ZTpyfTshZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsO01hdGhKYXguSHViLlF1ZXVlKChmdW5jdGlvbigpe3JldHVybiBvPWkuZXh0ZW5kRGVlcEFsbCh7fSxNYXRoSmF4Lkh1Yi5jb25maWcpLHM9TWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheSx2b2lkIDAhPT1NYXRoSmF4Lkh1Yi5wcm9jZXNzU2VjdGlvbkRlbGF5JiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT0wKSxNYXRoSmF4Lkh1Yi5Db25maWcoe21lc3NhZ2VTdHlsZToibm9uZSIsdGV4MmpheDp7aW5saW5lTWF0aDpbWyIkIiwiJCJdLFsiXFwoIiwiXFwpIl1dfSxkaXNwbGF5QWxpZ246ImxlZnQifSl9KSwoZnVuY3Rpb24oKXtpZigiU1ZHIiE9PShhPU1hdGhKYXguSHViLmNvbmZpZy5tZW51U2V0dGluZ3MucmVuZGVyZXIpKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcigiU1ZHIil9KSwoZnVuY3Rpb24oKXt2YXIgcj0ibWF0aC1vdXRwdXQtIitpLnJhbmRzdHIoe30sNjQpO3JldHVybiBsPW4uc2VsZWN0KCJib2R5IikuYXBwZW5kKCJkaXYiKS5hdHRyKHtpZDpyfSkuc3R5bGUoe3Zpc2liaWxpdHk6ImhpZGRlbiIscG9zaXRpb246ImFic29sdXRlIn0pLnN0eWxlKHsiZm9udC1zaXplIjplLmZvbnRTaXplKyJweCJ9KS50ZXh0KHQucmVwbGFjZSh1LCJcXGx0ICIpLnJlcGxhY2UoZiwiXFxndCAiKSksTWF0aEpheC5IdWIuVHlwZXNldChsLm5vZGUoKSl9KSwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCgiYm9keSIpLnNlbGVjdCgiI01hdGhKYXhfU1ZHX2dseXBocyIpO2lmKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKS5lbXB0eSgpfHwhbC5zZWxlY3QoInN2ZyIpLm5vZGUoKSlpLmxvZygiVGhlcmUgd2FzIGFuIGVycm9yIGluIHRoZSB0ZXggc3ludGF4LiIsdCkscigpO2Vsc2V7dmFyIG89bC5zZWxlY3QoInN2ZyIpLm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyKGwuc2VsZWN0KCIuTWF0aEpheF9TVkciKSxlLG8pfWlmKGwucmVtb3ZlKCksIlNWRyIhPT1hKXJldHVybiBNYXRoSmF4Lkh1Yi5zZXRSZW5kZXJlcihhKX0pLChmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT1zJiYoTWF0aEpheC5IdWIucHJvY2Vzc1NlY3Rpb25EZWxheT1zKSxNYXRoSmF4Lkh1Yi5Db25maWcobyl9KSl9KFNbMl0sbywoZnVuY3Rpb24obixpLG8pe0Muc2VsZWN0QWxsKCJzdmcuIitQKS5yZW1vdmUoKSxDLnNlbGVjdEFsbCgiZy4iK1ArIi1ncm91cCIpLnJlbW92ZSgpO3ZhciBzPW4mJm4uc2VsZWN0KCJzdmciKTtpZighc3x8IXMubm9kZSgpKXJldHVybiBJKCksdm9pZCBlKCk7dmFyIGM9Qy5hcHBlbmQoImciKS5jbGFzc2VkKFArIi1ncm91cCIsITApLmF0dHIoeyJwb2ludGVyLWV2ZW50cyI6Im5vbmUiLCJkYXRhLXVuZm9ybWF0dGVkIjpNLCJkYXRhLW1hdGgiOiJZIn0pO2Mubm9kZSgpLmFwcGVuZENoaWxkKHMubm9kZSgpKSxpJiZpLm5vZGUoKSYmcy5ub2RlKCkuaW5zZXJ0QmVmb3JlKGkubm9kZSgpLmNsb25lTm9kZSghMCkscy5ub2RlKCkuZmlyc3RDaGlsZCkscy5hdHRyKHtjbGFzczpQLGhlaWdodDpvLmhlaWdodCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJ4TWluWU1pbiBtZWV0In0pLnN0eWxlKHtvdmVyZmxvdzoidmlzaWJsZSIsInBvaW50ZXItZXZlbnRzIjoibm9uZSJ9KTt2YXIgdT10Lm5vZGUoKS5zdHlsZS5maWxsfHwiYmxhY2siLGY9cy5zZWxlY3QoImciKTtmLmF0dHIoe2ZpbGw6dSxzdHJva2U6dX0pO3ZhciBoPWwoZiwid2lkdGgiKSxwPWwoZiwiaGVpZ2h0IiksZD0rdC5hdHRyKCJ4IiktaCp7c3RhcnQ6MCxtaWRkbGU6LjUsZW5kOjF9W3QuYXR0cigidGV4dC1hbmNob3IiKXx8InN0YXJ0Il0sZz0tKHJ8fGwodCwiaGVpZ2h0IikpLzQ7InkiPT09UFswXT8oYy5hdHRyKHt0cmFuc2Zvcm06InJvdGF0ZSgiK1stOTAsK3QuYXR0cigieCIpLCt0LmF0dHIoInkiKV0rIikiK2EoLWgvMixnLXAvMil9KSxzLmF0dHIoe3g6K3QuYXR0cigieCIpLHk6K3QuYXR0cigieSIpfSkpOiJsIj09PVBbMF0/cy5hdHRyKHt4OnQuYXR0cigieCIpLHk6Zy1wLzJ9KToiYSI9PT1QWzBdJiYwIT09UC5pbmRleE9mKCJhdGl0bGUiKT9zLmF0dHIoe3g6MCx5Omd9KTpzLmF0dHIoe3g6ZCx5Oit0LmF0dHIoInkiKStnLXAvMn0pLG0mJm0uY2FsbCh0LGMpLGUoYyl9KSl9KSkpOkkoKSx0fWZ1bmN0aW9uIEkoKXtDLmVtcHR5KCl8fChQPXQuYXR0cigiY2xhc3MiKSsiLW1hdGgiLEMuc2VsZWN0KCJzdmcuIitQKS5yZW1vdmUoKSksdC50ZXh0KCIiKS5zdHlsZSgid2hpdGUtc3BhY2UiLCJwcmUiKSxmdW5jdGlvbih0LGUpe2U9ZS5yZXBsYWNlKGcsIiAiKTt2YXIgcixhPSExLGw9W10sYz0tMTtmdW5jdGlvbiB1KCl7YysrO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhvLnN2ZywidHNwYW4iKTtuLnNlbGVjdChlKS5hdHRyKHtjbGFzczoibGluZSIsZHk6YypzKyJlbSJ9KSx0LmFwcGVuZENoaWxkKGUpLHI9ZTt2YXIgaT1sO2lmKGw9W3tub2RlOmV9XSxpLmxlbmd0aD4xKWZvcih2YXIgYT0xO2E8aS5sZW5ndGg7YSsrKWYoaVthXSl9ZnVuY3Rpb24gZih0KXt2YXIgZSxpPXQudHlwZSxhPXt9O2lmKCJhIj09PWkpe2U9ImEiO3ZhciBzPXQudGFyZ2V0LGM9dC5ocmVmLHU9dC5wb3B1cDtjJiYoYT17InhsaW5rOnhsaW5rOnNob3ciOiJfYmxhbmsiPT09c3x8Il8iIT09cy5jaGFyQXQoMCk/Im5ldyI6InJlcGxhY2UiLHRhcmdldDpzLCJ4bGluazp4bGluazpocmVmIjpjfSx1JiYoYS5vbmNsaWNrPSd3aW5kb3cub3Blbih0aGlzLmhyZWYuYmFzZVZhbCx0aGlzLnRhcmdldC5iYXNlVmFsLCInK3UrJyIpO3JldHVybiBmYWxzZTsnKSl9ZWxzZSBlPSJ0c3BhbiI7dC5zdHlsZSYmKGEuc3R5bGU9dC5zdHlsZSk7dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnLGUpO2lmKCJzdXAiPT09aXx8InN1YiI9PT1pKXttKHIsIlx1MjAwYiIpLHIuYXBwZW5kQ2hpbGQoZik7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG8uc3ZnLCJ0c3BhbiIpO20oaCwiXHUyMDBiIiksbi5zZWxlY3QoaCkuYXR0cigiZHkiLGRbaV0pLGEuZHk9cFtpXSxyLmFwcGVuZENoaWxkKGYpLHIuYXBwZW5kQ2hpbGQoaCl9ZWxzZSByLmFwcGVuZENoaWxkKGYpO24uc2VsZWN0KGYpLmF0dHIoYSkscj10Lm5vZGU9ZixsLnB1c2godCl9ZnVuY3Rpb24gbSh0LGUpe3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSkpfWZ1bmN0aW9uIE0odCl7aWYoMSE9PWwubGVuZ3RoKXt2YXIgbj1sLnBvcCgpO3QhPT1uLnR5cGUmJmkubG9nKCJTdGFydCB0YWcgPCIrbi50eXBlKyI+IGRvZXNudCBtYXRjaCBlbmQgdGFnIDwiK3QrIj4uIFByZXRlbmRpbmcgaXQgZGlkIG1hdGNoLiIsZSkscj1sW2wubGVuZ3RoLTFdLm5vZGV9ZWxzZSBpLmxvZygiSWdub3JpbmcgdW5leHBlY3RlZCBlbmQgdGFnIDwvIit0KyI+LiIsZSl9eC50ZXN0KGUpP3UoKToocj10LGw9W3tub2RlOnR9XSk7Zm9yKHZhciBTPWUuc3BsaXQodiksQz0wO0M8Uy5sZW5ndGg7QysrKXt2YXIgUD1TW0NdLEk9UC5tYXRjaCh5KSxPPUkmJklbMl0udG9Mb3dlckNhc2UoKSx6PWhbT107aWYoImJyIj09PU8pdSgpO2Vsc2UgaWYodm9pZCAwPT09eiltKHIsRShQKSk7ZWxzZSBpZihJWzFdKU0oTyk7ZWxzZXt2YXIgRD1JWzRdLFI9e3R5cGU6T30sRj1rKEQsYik7aWYoRj8oRj1GLnJlcGxhY2UoQSwiJDEgZmlsbDoiKSx6JiYoRis9IjsiK3opKTp6JiYoRj16KSxGJiYoUi5zdHlsZT1GKSwiYSI9PT1PKXthPSEwO3ZhciBCPWsoRCxfKTtpZihCKXt2YXIgTj1MKEIpO04mJihSLmhyZWY9TixSLnRhcmdldD1rKEQsdyl8fCJfYmxhbmsiLFIucG9wdXA9ayhELFQpKX19ZihSKX19cmV0dXJuIGF9KHQubm9kZSgpLE0pJiZ0LnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLHIucG9zaXRpb25UZXh0KHQpLG0mJm0uY2FsbCh0KX19O3ZhciB1PS8oPHwmbHQ7fCYjNjA7KS9nLGY9Lyg+fCZndDt8JiM2MjspL2c7dmFyIGg9e3N1cDoiZm9udC1zaXplOjcwJSIsc3ViOiJmb250LXNpemU6NzAlIixiOiJmb250LXdlaWdodDpib2xkIixpOiJmb250LXN0eWxlOml0YWxpYyIsYToiY3Vyc29yOnBvaW50ZXIiLHNwYW46IiIsZW06ImZvbnQtc3R5bGU6aXRhbGljO2ZvbnQtd2VpZ2h0OmJvbGQifSxwPXtzdWI6IjAuM2VtIixzdXA6Ii0wLjZlbSJ9LGQ9e3N1YjoiLTAuMjFlbSIsc3VwOiIwLjQyZW0ifSxtPVsiaHR0cDoiLCJodHRwczoiLCJtYWlsdG86IiwiIix2b2lkIDAsIjoiXSxnPXIuTkVXTElORVM9LyhcclxuP3xcbikvZyx2PS8oPFtePD5dKj4pLyx5PS88KFwvPykoW14gPl0qKShccysoLiopKT8+L2kseD0vPGJyKFxzKy4qKT8+L2k7ci5CUl9UQUdfQUxMPS88YnIoXHMrLiopPz4vZ2k7dmFyIGI9LyhefFtccyInXSlzdHlsZVxzKj1ccyooIihbXiJdKik7PyJ8JyhbXiddKik7PycpL2ksXz0vKF58W1xzIiddKWhyZWZccyo9XHMqKCIoW14iXSopInwnKFteJ10qKScpL2ksdz0vKF58W1xzIiddKXRhcmdldFxzKj1ccyooIihbXiJcc10qKSJ8JyhbXidcc10qKScpL2ksVD0vKF58W1xzIiddKXBvcHVwXHMqPVxzKigiKFtcdz0sXSopInwnKFtcdz0sXSopJykvaTtmdW5jdGlvbiBrKHQsZSl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIHI9dC5tYXRjaChlKSxuPXImJihyWzNdfHxyWzRdKTtyZXR1cm4gbiYmRShuKX12YXIgQT0vKF58Oylccypjb2xvcjovO3IucGxhaW5UZXh0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXZvaWQgMCE9PShlPWV8fHt9KS5sZW4mJi0xIT09ZS5sZW4/ZS5sZW46MS8wLG49dm9pZCAwIT09ZS5hbGxvd2VkVGFncz9lLmFsbG93ZWRUYWdzOlsiYnIiXSxpPSIuLi4iLmxlbmd0aCxhPXQuc3BsaXQodiksbz1bXSxzPSIiLGw9MCxjPTA7YzxhLmxlbmd0aDtjKyspe3ZhciB1PWFbY10sZj11Lm1hdGNoKHkpLGg9ZiYmZlsyXS50b0xvd2VyQ2FzZSgpO2lmKGgpLTEhPT1uLmluZGV4T2YoaCkmJihvLnB1c2godSkscz1oKTtlbHNle3ZhciBwPXUubGVuZ3RoO2lmKGwrcDxyKW8ucHVzaCh1KSxsKz1wO2Vsc2UgaWYobDxyKXt2YXIgZD1yLWw7cyYmKCJiciIhPT1zfHxkPD1pfHxwPD1pKSYmby5wb3AoKSxyPmk/by5wdXNoKHUuc3Vic3RyKDAsZC1pKSsiLi4uIik6by5wdXNoKHUuc3Vic3RyKDAsZCkpO2JyZWFrfXM9IiJ9fXJldHVybiBvLmpvaW4oIiIpfTt2YXIgTT17bXU6Ilx1MDNiYyIsYW1wOiImIixsdDoiPCIsZ3Q6Ij4iLG5ic3A6Ilx4YTAiLHRpbWVzOiJceGQ3IixwbHVzbW46Ilx4YjEiLGRlZzoiXHhiMCJ9LFM9LyYoI1xkK3wjeFtcZGEtZkEtRl0rfFthLXpdKyk7L2c7ZnVuY3Rpb24gRSh0KXtyZXR1cm4gdC5yZXBsYWNlKFMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKCIjIj09PWUuY2hhckF0KDApP2Z1bmN0aW9uKHQpe2lmKHQ+MTExNDExMSlyZXR1cm47dmFyIGU9U3RyaW5nLmZyb21Db2RlUG9pbnQ7aWYoZSlyZXR1cm4gZSh0KTt2YXIgcj1TdHJpbmcuZnJvbUNoYXJDb2RlO3JldHVybiB0PD02NTUzNT9yKHQpOnIoNTUyMzIrKHQ+PjEwKSx0JTEwMjQrNTYzMjApfSgieCI9PT1lLmNoYXJBdCgxKT9wYXJzZUludChlLnN1YnN0cigyKSwxNik6cGFyc2VJbnQoZS5zdWJzdHIoMSksMTApKTpNW2VdKXx8dH0pKX1mdW5jdGlvbiBMKHQpe3ZhciBlPWVuY29kZVVSSShkZWNvZGVVUkkodCkpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3IuaHJlZj10LG4uaHJlZj1lO3ZhciBpPXIucHJvdG9jb2wsYT1uLnByb3RvY29sO3JldHVybi0xIT09bS5pbmRleE9mKGkpJiYtMSE9PW0uaW5kZXhPZihhKT9lOiIifWZ1bmN0aW9uIEModCxlLHIpe3ZhciBuLGEsbyxzPXIuaG9yaXpvbnRhbEFsaWduLGw9ci52ZXJ0aWNhbEFsaWdufHwidG9wIixjPXQubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9ZS5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuIGE9ImJvdHRvbSI9PT1sP2Z1bmN0aW9uKCl7cmV0dXJuIGMuYm90dG9tLW4uaGVpZ2h0fToibWlkZGxlIj09PWw/ZnVuY3Rpb24oKXtyZXR1cm4gYy50b3ArKGMuaGVpZ2h0LW4uaGVpZ2h0KS8yfTpmdW5jdGlvbigpe3JldHVybiBjLnRvcH0sbz0icmlnaHQiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLnJpZ2h0LW4ud2lkdGh9OiJjZW50ZXIiPT09cz9mdW5jdGlvbigpe3JldHVybiBjLmxlZnQrKGMud2lkdGgtbi53aWR0aCkvMn06ZnVuY3Rpb24oKXtyZXR1cm4gYy5sZWZ0fSxmdW5jdGlvbigpe249dGhpcy5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmFyIHQ9bygpLXUubGVmdCxlPWEoKS11LnRvcCxzPXIuZ2R8fHt9O2lmKHIuZ2Qpe3MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHMpO3ZhciBsPWkuYXBwbHkzRFRyYW5zZm9ybShzLl9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKHQsZSk7dD1sWzBdLGU9bFsxXX1yZXR1cm4gdGhpcy5zdHlsZSh7dG9wOmUrInB4IixsZWZ0OnQrInB4Iiwiei1pbmRleCI6MWUzfSksdGhpc319ci5jb252ZXJ0RW50aXRpZXM9RSxyLnNhbml0aXplSFRNTD1mdW5jdGlvbih0KXt0PXQucmVwbGFjZShnLCIgIik7Zm9yKHZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKSxyPWUsaT1bXSxhPXQuc3BsaXQodiksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgcz1hW29dLGw9cy5tYXRjaCh5KSxjPWwmJmxbMl0udG9Mb3dlckNhc2UoKTtpZihjIGluIGgpaWYobFsxXSlpLmxlbmd0aCYmKHI9aS5wb3AoKSk7ZWxzZXt2YXIgdT1sWzRdLGY9ayh1LGIpLHA9Zj97c3R5bGU6Zn06e307aWYoImEiPT09Yyl7dmFyIGQ9ayh1LF8pO2lmKGQpe3ZhciBtPUwoZCk7aWYobSl7cC5ocmVmPW07dmFyIHg9ayh1LHcpO3gmJihwLnRhcmdldD14KX19fXZhciBUPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYyk7ci5hcHBlbmRDaGlsZChUKSxuLnNlbGVjdChUKS5hdHRyKHApLHI9VCxpLnB1c2goVCl9ZWxzZSByLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKEUocykpKX1yZXR1cm4gZS5pbm5lckhUTUx9LHIubGluZUNvdW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnNpemUoKXx8MX0sci5wb3NpdGlvblRleHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7ZnVuY3Rpb24gaShlLHIpe3JldHVybiB2b2lkIDA9PT1yP251bGw9PT0ocj10LmF0dHIoZSkpJiYodC5hdHRyKGUsMCkscj0wKTp0LmF0dHIoZSxyKSxyfXZhciBhPWkoIngiLGUpLG89aSgieSIscik7InRleHQiPT09dGhpcy5ub2RlTmFtZSYmdC5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5hdHRyKHt4OmEseTpvfSl9KSl9O3IubWFrZVRleHRTaGFkb3c9ZnVuY3Rpb24odCl7dmFyIGU9IjFweCAiLHI9IjFweCAiLG49IjFweCAiO3JldHVybiBlK3Irbit0KyIsIC0iK2UrIi0iK3Irbit0KyIsICIrZSsiLSIrcituK3QrIiwgLSIrZStyK24rdH0sci5tYWtlRWRpdGFibGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLmdkLGk9ZS5kZWxlZ2F0ZSxhPW4uZGlzcGF0Y2goImVkaXQiLCJpbnB1dCIsImNhbmNlbCIpLG89aXx8dDtpZih0LnN0eWxlKHsicG9pbnRlci1ldmVudHMiOmk/Im5vbmUiOiJhbGwifSksMSE9PXQuc2l6ZSgpKXRocm93IG5ldyBFcnJvcigiYm9vIik7ZnVuY3Rpb24gcygpeyFmdW5jdGlvbigpe3ZhciBpPW4uc2VsZWN0KHIpLnNlbGVjdCgiLnN2Zy1jb250YWluZXIiKSxvPWkuYXBwZW5kKCJkaXYiKSxzPXQubm9kZSgpLnN0eWxlLGM9cGFyc2VGbG9hdChzLmZvbnRTaXplfHwxMiksdT1lLnRleHQ7dm9pZCAwPT09dSYmKHU9dC5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIikpO28uY2xhc3NlZCgicGx1Z2luLWVkaXRhYmxlIGVkaXRhYmxlIiwhMCkuc3R5bGUoe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsImZvbnQtZmFtaWx5IjpzLmZvbnRGYW1pbHl8fCJBcmlhbCIsImZvbnQtc2l6ZSI6Yyxjb2xvcjplLmZpbGx8fHMuZmlsbHx8ImJsYWNrIixvcGFjaXR5OjEsImJhY2tncm91bmQtY29sb3IiOmUuYmFja2dyb3VuZHx8InRyYW5zcGFyZW50IixvdXRsaW5lOiIjZmZmZmZmMzMgMXB4IHNvbGlkIixtYXJnaW46Wy1jLzgrMSwwLDAsLTFdLmpvaW4oInB4ICIpKyJweCIscGFkZGluZzoiMCIsImJveC1zaXppbmciOiJib3JkZXItYm94In0pLmF0dHIoe2NvbnRlbnRlZGl0YWJsZTohMH0pLnRleHQodSkuY2FsbChDKHQsaSxlKSkub24oImJsdXIiLChmdW5jdGlvbigpe3IuX2VkaXRpbmc9ITEsdC50ZXh0KHRoaXMudGV4dENvbnRlbnQpLnN0eWxlKHtvcGFjaXR5OjF9KTt2YXIgZSxpPW4uc2VsZWN0KHRoaXMpLmF0dHIoImNsYXNzIik7KGU9aT8iLiIraS5zcGxpdCgiICIpWzBdKyItbWF0aC1ncm91cCI6IltjbGFzcyo9LW1hdGgtZ3JvdXBdIikmJm4uc2VsZWN0KHQubm9kZSgpLnBhcmVudE5vZGUpLnNlbGVjdChlKS5zdHlsZSh7b3BhY2l0eTowfSk7dmFyIG89dGhpcy50ZXh0Q29udGVudDtuLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkucmVtb3ZlKCksbi5zZWxlY3QoZG9jdW1lbnQpLm9uKCJtb3VzZXVwIixudWxsKSxhLmVkaXQuY2FsbCh0LG8pfSkpLm9uKCJmb2N1cyIsKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyLl9lZGl0aW5nPSEwLG4uc2VsZWN0KGRvY3VtZW50KS5vbigibW91c2V1cCIsKGZ1bmN0aW9uKCl7aWYobi5ldmVudC50YXJnZXQ9PT10KXJldHVybiExO2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1vLm5vZGUoKSYmby5ub2RlKCkuYmx1cigpfSkpfSkpLm9uKCJrZXl1cCIsKGZ1bmN0aW9uKCl7Mjc9PT1uLmV2ZW50LndoaWNoPyhyLl9lZGl0aW5nPSExLHQuc3R5bGUoe29wYWNpdHk6MX0pLG4uc2VsZWN0KHRoaXMpLnN0eWxlKHtvcGFjaXR5OjB9KS5vbigiYmx1ciIsKGZ1bmN0aW9uKCl7cmV0dXJuITF9KSkudHJhbnNpdGlvbigpLnJlbW92ZSgpLGEuY2FuY2VsLmNhbGwodCx0aGlzLnRleHRDb250ZW50KSk6KGEuaW5wdXQuY2FsbCh0LHRoaXMudGV4dENvbnRlbnQpLG4uc2VsZWN0KHRoaXMpLmNhbGwoQyh0LGksZSkpKX0pKS5vbigia2V5ZG93biIsKGZ1bmN0aW9uKCl7MTM9PT1uLmV2ZW50LndoaWNoJiZ0aGlzLmJsdXIoKX0pKS5jYWxsKGwpfSgpLHQuc3R5bGUoe29wYWNpdHk6MH0pO3ZhciBpLHM9by5hdHRyKCJjbGFzcyIpOyhpPXM/Ii4iK3Muc3BsaXQoIiAiKVswXSsiLW1hdGgtZ3JvdXAiOiJbY2xhc3MqPS1tYXRoLWdyb3VwXSIpJiZuLnNlbGVjdCh0Lm5vZGUoKS5wYXJlbnROb2RlKS5zZWxlY3QoaSkuc3R5bGUoe29wYWNpdHk6MH0pfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5ub2RlKCkscj1kb2N1bWVudC5jcmVhdGVSYW5nZSgpO3Iuc2VsZWN0Tm9kZUNvbnRlbnRzKGUpO3ZhciBuPXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtuLnJlbW92ZUFsbFJhbmdlcygpLG4uYWRkUmFuZ2UociksZS5mb2N1cygpfXJldHVybiBlLmltbWVkaWF0ZT9zKCk6by5vbigiY2xpY2siLHMpLG4ucmViaW5kKHQsYSwib24iKX19LHsiLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi9saWIiOjc3NiwiQHBsb3RseS9kMyI6NTh9XSw4MDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e307ZnVuY3Rpb24gaSh0KXt0JiZudWxsIT09dC50aW1lciYmKGNsZWFyVGltZW91dCh0LnRpbWVyKSx0LnRpbWVyPW51bGwpfXIudGhyb3R0bGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPW5bdF0sbz1EYXRlLm5vdygpO2lmKCFhKXtmb3IodmFyIHMgaW4gbiluW3NdLnRzPG8tNmU0JiZkZWxldGUgbltzXTthPW5bdF09e3RzOjAsdGltZXI6bnVsbH19ZnVuY3Rpb24gbCgpe3IoKSxhLnRzPURhdGUubm93KCksYS5vbkRvbmUmJihhLm9uRG9uZSgpLGEub25Eb25lPW51bGwpfWkoYSksbz5hLnRzK2U/bCgpOmEudGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtsKCksYS50aW1lcj1udWxsfSksZSl9LHIuZG9uZT1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO3JldHVybiBlJiZlLnRpbWVyP25ldyBQcm9taXNlKChmdW5jdGlvbih0KXt2YXIgcj1lLm9uRG9uZTtlLm9uRG9uZT1mdW5jdGlvbigpe3ImJnIoKSx0KCksZS5vbkRvbmU9bnVsbH19KSk6UHJvbWlzZS5yZXNvbHZlKCl9LHIuY2xlYXI9ZnVuY3Rpb24odCl7aWYodClpKG5bdF0pLGRlbGV0ZSBuW3RdO2Vsc2UgZm9yKHZhciBlIGluIG4pci5jbGVhcihlKX19LHt9XSw4MDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZih0PjApcmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMDt2YXIgcj1NYXRoLmxvZyhNYXRoLm1pbihlWzBdLGVbMV0pKS9NYXRoLkxOMTA7cmV0dXJuIG4ocil8fChyPU1hdGgubG9nKE1hdGgubWF4KGVbMF0sZVsxXSkpL01hdGguTE4xMC02KSxyfX0seyJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17fSxpPXQoIi4uL3Bsb3RzL2dlby9jb25zdGFudHMiKS5sb2NhdGlvbm1vZGVUb0xheWVyLGE9dCgidG9wb2pzb24tY2xpZW50IikuZmVhdHVyZTtuLmdldFRvcG9qc29uTmFtZT1mdW5jdGlvbih0KXtyZXR1cm5bdC5zY29wZS5yZXBsYWNlKC8gL2csIi0iKSwiXyIsdC5yZXNvbHV0aW9uLnRvU3RyaW5nKCksIm0iXS5qb2luKCIiKX0sbi5nZXRUb3BvanNvblBhdGg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlKyIuanNvbiJ9LG4uZ2V0VG9wb2pzb25GZWF0dXJlcz1mdW5jdGlvbih0LGUpe3ZhciByPWlbdC5sb2NhdGlvbm1vZGVdLG49ZS5vYmplY3RzW3JdO3JldHVybiBhKGUsbikuZmVhdHVyZXN9fSx7Ii4uL3Bsb3RzL2dlby9jb25zdGFudHMiOjg1OCwidG9wb2pzb24tY2xpZW50Ijo1NzV9XSw4MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJsb2NhbGUiLG5hbWU6ImVuLVVTIixkaWN0aW9uYXJ5OnsiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSI6IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUifSxmb3JtYXQ6e2RhdGU6IiVtLyVkLyVZIn19fSx7fV0sODA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToibG9jYWxlIixuYW1lOiJlbiIsZGljdGlvbmFyeTp7IkNsaWNrIHRvIGVudGVyIENvbG9yc2NhbGUgdGl0bGUiOiJDbGljayB0byBlbnRlciBDb2xvdXJzY2FsZSB0aXRsZSJ9LGZvcm1hdDp7ZGF5czpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sc2hvcnREYXlzOlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sbW9udGhzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxzaG9ydE1vbnRoczpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLHBlcmlvZHM6WyJBTSIsIlBNIl0sZGF0ZVRpbWU6IiVhICViICVlICVYICVZIixkYXRlOiIlZC8lbS8lWSIsdGltZToiJUg6JU06JVMiLGRlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLHllYXI6IiVZIixtb250aDoiJWIgJVkiLGRheU1vbnRoOiIlYiAlLWQiLGRheU1vbnRoWWVhcjoiJWIgJS1kLCAlWSJ9fX0se31dLDgwODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixpPW4ubGF5b3V0QXJyYXlDb250YWluZXJzLGE9bi5sYXlvdXRBcnJheVJlZ2V4ZXMsbz10LnNwbGl0KCJbIilbMF0scz0wO3M8YS5sZW5ndGg7cysrKWlmKChyPXQubWF0Y2goYVtzXSkpJiYwPT09ci5pbmRleCl7ZT1yWzBdO2JyZWFrfWlmKGV8fChlPWlbaS5pbmRleE9mKG8pXSksIWUpcmV0dXJuITE7dmFyIGw9dC5zdWJzdHIoZS5sZW5ndGgpO3JldHVybiBsPyEhKHI9bC5tYXRjaCgvXlxbKDB8WzEtOV1bMC05XSopXF0oXC4oLispKT8kLykpJiZ7YXJyYXk6ZSxpbmRleDpOdW1iZXIoclsxXSkscHJvcGVydHk6clszXXx8IiJ9OnthcnJheTplLGluZGV4OiIiLHByb3BlcnR5OiIifX19LHsiLi4vcmVnaXN0cnkiOjkwNH1dLDgwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uZXh0ZW5kRmxhdCxhPW4uaXNQbGFpbk9iamVjdCxvPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsImNsZWFyQXhpc1R5cGVzIiwicGxvdCIsInN0eWxlIiwibWFya2VyU2l6ZSIsImNvbG9yYmFycyJdfSxzPXt2YWxUeXBlOiJmbGFnbGlzdCIsZXh0cmFzOlsibm9uZSJdLGZsYWdzOlsiY2FsYyIsInBsb3QiLCJsZWdlbmQiLCJ0aWNrcyIsImF4cmFuZ2UiLCJsYXlvdXRzdHlsZSIsIm1vZGViYXIiLCJjYW1lcmEiLCJhcnJheWRyYXciLCJjb2xvcmJhcnMiXX0sbD1vLmZsYWdzLnNsaWNlKCkuY29uY2F0KFsiZnVsbFJlcGxvdCJdKSxjPXMuZmxhZ3Muc2xpY2UoKS5jb25jYXQoImxheW91dFJlcGxvdCIpO2Z1bmN0aW9uIHUodCl7Zm9yKHZhciBlPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyllW3Rbcl1dPSExO3JldHVybiBlfWZ1bmN0aW9uIGYodCxlLHIpe3ZhciBuPWkoe30sdCk7Zm9yKHZhciBvIGluIG4pe3ZhciBzPW5bb107YShzKSYmKG5bb109aChzLGUscixvKSl9cmV0dXJuImZyb20tcm9vdCI9PT1yJiYobi5lZGl0VHlwZT1lKSxufWZ1bmN0aW9uIGgodCxlLHIsbil7aWYodC52YWxUeXBlKXt2YXIgYT1pKHt9LHQpO2lmKGEuZWRpdFR5cGU9ZSxBcnJheS5pc0FycmF5KHQuaXRlbXMpKXthLml0ZW1zPW5ldyBBcnJheSh0Lml0ZW1zLmxlbmd0aCk7Zm9yKHZhciBvPTA7bzx0Lml0ZW1zLmxlbmd0aDtvKyspYS5pdGVtc1tvXT1oKHQuaXRlbXNbb10sZSwiZnJvbS1yb290Iil9cmV0dXJuIGF9cmV0dXJuIGYodCxlLCJfIj09PW4uY2hhckF0KDApPyJuZXN0ZWQiOiJmcm9tLXJvb3QiKX1lLmV4cG9ydHM9e3RyYWNlczpvLGxheW91dDpzLHRyYWNlRmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShsKX0sbGF5b3V0RmxhZ3M6ZnVuY3Rpb24oKXtyZXR1cm4gdShjKX0sdXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5lZGl0VHlwZTtpZihyJiYibm9uZSIhPT1yKWZvcih2YXIgbj1yLnNwbGl0KCIrIiksaT0wO2k8bi5sZW5ndGg7aSsrKXRbbltpXV09ITB9LG92ZXJyaWRlQWxsOmZ9fSx7Ii4uL2xpYiI6Nzc2fV0sODEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJnbC1tYXQ0L2Zyb21RdWF0IiksYT10KCIuLi9yZWdpc3RyeSIpLG89dCgiLi4vbGliIikscz10KCIuLi9wbG90cy9wbG90cyIpLGw9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYz10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksdT1sLmNsZWFuSWQsZj1sLmdldEZyb21UcmFjZSxoPWEudHJhY2VJcztmdW5jdGlvbiBwKHQsZSl7dmFyIHI9dFtlXSxuPWUuY2hhckF0KDApO3ImJiJwYXBlciIhPT1yJiYodFtlXT11KHIsbiwhMCkpfWZ1bmN0aW9uIGQodCl7ZnVuY3Rpb24gZShlLHIpe3ZhciBuPXRbZV0saT10LnRpdGxlJiZ0LnRpdGxlW3JdO24mJiFpJiYodC50aXRsZXx8KHQudGl0bGU9e30pLHQudGl0bGVbcl09dFtlXSxkZWxldGUgdFtlXSl9dCYmKCJzdHJpbmciIT10eXBlb2YgdC50aXRsZSYmIm51bWJlciIhPXR5cGVvZiB0LnRpdGxlfHwodC50aXRsZT17dGV4dDp0LnRpdGxlfSksZSgidGl0bGVmb250IiwiZm9udCIpLGUoInRpdGxlcG9zaXRpb24iLCJwb3NpdGlvbiIpLGUoInRpdGxlc2lkZSIsInNpZGUiKSxlKCJ0aXRsZW9mZnNldCIsIm9mZnNldCIpKX1mdW5jdGlvbiBtKHQpe2lmKCFvLmlzUGxhaW5PYmplY3QodCkpcmV0dXJuITE7dmFyIGU9dC5uYW1lO3JldHVybiBkZWxldGUgdC5uYW1lLGRlbGV0ZSB0LnNob3dsZWdlbmQsKCJzdHJpbmciPT10eXBlb2YgZXx8Im51bWJlciI9PXR5cGVvZiBlKSYmU3RyaW5nKGUpfWZ1bmN0aW9uIGcodCxlLHIsbil7aWYociYmIW4pcmV0dXJuIHQ7aWYobiYmIXIpcmV0dXJuIGU7aWYoIXQudHJpbSgpKXJldHVybiBlO2lmKCFlLnRyaW0oKSlyZXR1cm4gdDt2YXIgaSxhPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKTtmb3IoaT0wO2k8YSYmdC5jaGFyQXQoaSk9PT1lLmNoYXJBdChpKTtpKyspO3JldHVybiB0LnN1YnN0cigwLGkpLnRyaW0oKX1mdW5jdGlvbiB2KHQpe3ZhciBlPSJtaWRkbGUiLHI9ImNlbnRlciI7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYoLTEhPT10LmluZGV4T2YoInRvcCIpP2U9InRvcCI6LTEhPT10LmluZGV4T2YoImJvdHRvbSIpJiYoZT0iYm90dG9tIiksLTEhPT10LmluZGV4T2YoImxlZnQiKT9yPSJsZWZ0IjotMSE9PXQuaW5kZXhPZigicmlnaHQiKSYmKHI9InJpZ2h0IikpLGUrIiAiK3J9ZnVuY3Rpb24geSh0LGUpe3JldHVybiBlIGluIHQmJiJvYmplY3QiPT10eXBlb2YgdFtlXSYmMD09PU9iamVjdC5rZXlzKHRbZV0pLmxlbmd0aH1yLmNsZWFyUHJvbWlzZVF1ZXVlPWZ1bmN0aW9uKHQpe0FycmF5LmlzQXJyYXkodC5fcHJvbWlzZXMpJiZ0Ll9wcm9taXNlcy5sZW5ndGg+MCYmby5sb2coIkNsZWFyaW5nIHByZXZpb3VzIHJlamVjdGVkIHByb21pc2VzIGZyb20gcXVldWUuIiksdC5fcHJvbWlzZXM9W119LHIuY2xlYW5MYXlvdXQ9ZnVuY3Rpb24odCl7dmFyIGUsbjt0fHwodD17fSksdC54YXhpczEmJih0LnhheGlzfHwodC54YXhpcz10LnhheGlzMSksZGVsZXRlIHQueGF4aXMxKSx0LnlheGlzMSYmKHQueWF4aXN8fCh0LnlheGlzPXQueWF4aXMxKSxkZWxldGUgdC55YXhpczEpLHQuc2NlbmUxJiYodC5zY2VuZXx8KHQuc2NlbmU9dC5zY2VuZTEpLGRlbGV0ZSB0LnNjZW5lMSk7dmFyIGE9KHMuc3VicGxvdHNSZWdpc3RyeS5jYXJ0ZXNpYW58fHt9KS5hdHRyUmVnZXgsbD0ocy5zdWJwbG90c1JlZ2lzdHJ5LnBvbGFyfHx7fSkuYXR0clJlZ2V4LGY9KHMuc3VicGxvdHNSZWdpc3RyeS50ZXJuYXJ5fHx7fSkuYXR0clJlZ2V4LGg9KHMuc3VicGxvdHNSZWdpc3RyeS5nbDNkfHx7fSkuYXR0clJlZ2V4LG09T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPG0ubGVuZ3RoO2UrKyl7dmFyIGc9bVtlXTtpZihhJiZhLnRlc3QoZykpe3ZhciB2PXRbZ107di5hbmNob3ImJiJmcmVlIiE9PXYuYW5jaG9yJiYodi5hbmNob3I9dSh2LmFuY2hvcikpLHYub3ZlcmxheWluZyYmKHYub3ZlcmxheWluZz11KHYub3ZlcmxheWluZykpLHYudHlwZXx8KHYuaXNkYXRlP3YudHlwZT0iZGF0ZSI6di5pc2xvZz92LnR5cGU9ImxvZyI6ITE9PT12LmlzZGF0ZSYmITE9PT12LmlzbG9nJiYodi50eXBlPSJsaW5lYXIiKSksIndpdGh6ZXJvIiE9PXYuYXV0b3JhbmdlJiYidG96ZXJvIiE9PXYuYXV0b3JhbmdlfHwodi5hdXRvcmFuZ2U9ITAsdi5yYW5nZW1vZGU9InRvemVybyIpLGRlbGV0ZSB2LmlzbG9nLGRlbGV0ZSB2LmlzZGF0ZSxkZWxldGUgdi5jYXRlZ29yaWVzLHkodiwiZG9tYWluIikmJmRlbGV0ZSB2LmRvbWFpbix2b2lkIDAhPT12LmF1dG90aWNrJiYodm9pZCAwPT09di50aWNrbW9kZSYmKHYudGlja21vZGU9di5hdXRvdGljaz8iYXV0byI6ImxpbmVhciIpLGRlbGV0ZSB2LmF1dG90aWNrKSxkKHYpfWVsc2UgaWYobCYmbC50ZXN0KGcpKXtkKHRbZ10ucmFkaWFsYXhpcyl9ZWxzZSBpZihmJiZmLnRlc3QoZykpe3ZhciB4PXRbZ107ZCh4LmFheGlzKSxkKHguYmF4aXMpLGQoeC5jYXhpcyl9ZWxzZSBpZihoJiZoLnRlc3QoZykpe3ZhciBiPXRbZ10sXz1iLmNhbWVyYXBvc2l0aW9uO2lmKEFycmF5LmlzQXJyYXkoXykmJjQ9PT1fWzBdLmxlbmd0aCl7dmFyIHc9X1swXSxUPV9bMV0saz1fWzJdLEE9aShbXSx3KSxNPVtdO2ZvcihuPTA7bjwzOysrbilNW25dPVRbbl0raypBWzIrNCpuXTtiLmNhbWVyYT17ZXllOnt4Ok1bMF0seTpNWzFdLHo6TVsyXX0sY2VudGVyOnt4OlRbMF0seTpUWzFdLHo6VFsyXX0sdXA6e3g6MCx5OjAsejoxfX0sZGVsZXRlIGIuY2FtZXJhcG9zaXRpb259ZChiLnhheGlzKSxkKGIueWF4aXMpLGQoYi56YXhpcyl9fXZhciBTPUFycmF5LmlzQXJyYXkodC5hbm5vdGF0aW9ucyk/dC5hbm5vdGF0aW9ucy5sZW5ndGg6MDtmb3IoZT0wO2U8UztlKyspe3ZhciBFPXQuYW5ub3RhdGlvbnNbZV07by5pc1BsYWluT2JqZWN0KEUpJiYoRS5yZWYmJigicGFwZXIiPT09RS5yZWY/KEUueHJlZj0icGFwZXIiLEUueXJlZj0icGFwZXIiKToiZGF0YSI9PT1FLnJlZiYmKEUueHJlZj0ieCIsRS55cmVmPSJ5IiksZGVsZXRlIEUucmVmKSxwKEUsInhyZWYiKSxwKEUsInlyZWYiKSl9dmFyIEw9QXJyYXkuaXNBcnJheSh0LnNoYXBlcyk/dC5zaGFwZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPEw7ZSsrKXt2YXIgQz10LnNoYXBlc1tlXTtvLmlzUGxhaW5PYmplY3QoQykmJihwKEMsInhyZWYiKSxwKEMsInlyZWYiKSl9dmFyIFA9QXJyYXkuaXNBcnJheSh0LmltYWdlcyk/dC5pbWFnZXMubGVuZ3RoOjA7Zm9yKGU9MDtlPFA7ZSsrKXt2YXIgST10LmltYWdlc1tlXTtvLmlzUGxhaW5PYmplY3QoSSkmJihwKEksInhyZWYiKSxwKEksInlyZWYiKSl9dmFyIE89dC5sZWdlbmQ7cmV0dXJuIE8mJihPLng+Mz8oTy54PTEuMDIsTy54YW5jaG9yPSJsZWZ0Iik6Ty54PC0yJiYoTy54PS0uMDIsTy54YW5jaG9yPSJyaWdodCIpLE8ueT4zPyhPLnk9MS4wMixPLnlhbmNob3I9ImJvdHRvbSIpOk8ueTwtMiYmKE8ueT0tLjAyLE8ueWFuY2hvcj0idG9wIikpLGQodCksInJvdGF0ZSI9PT10LmRyYWdtb2RlJiYodC5kcmFnbW9kZT0ib3JiaXQiKSxjLmNsZWFuKHQpLHQudGVtcGxhdGUmJnQudGVtcGxhdGUubGF5b3V0JiZyLmNsZWFuTGF5b3V0KHQudGVtcGxhdGUubGF5b3V0KSx0fSxyLmNsZWFuRGF0YT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG4saT10W2VdO2lmKCJoaXN0b2dyYW15Ij09PWkudHlwZSYmInhiaW5zImluIGkmJiEoInliaW5zImluIGkpJiYoaS55Ymlucz1pLnhiaW5zLGRlbGV0ZSBpLnhiaW5zKSxpLmVycm9yX3kmJiJvcGFjaXR5ImluIGkuZXJyb3JfeSl7dmFyIGw9Yy5kZWZhdWx0cyxmPWkuZXJyb3JfeS5jb2xvcnx8KGgoaSwiYmFyIik/Yy5kZWZhdWx0TGluZTpsW2UlbC5sZW5ndGhdKTtpLmVycm9yX3kuY29sb3I9Yy5hZGRPcGFjaXR5KGMucmdiKGYpLGMub3BhY2l0eShmKSppLmVycm9yX3kub3BhY2l0eSksZGVsZXRlIGkuZXJyb3JfeS5vcGFjaXR5fWlmKCJiYXJkaXIiaW4gaSYmKCJoIiE9PWkuYmFyZGlyfHwhaChpLCJiYXIiKSYmImhpc3RvZ3JhbSIhPT1pLnR5cGUuc3Vic3RyKDAsOSl8fChpLm9yaWVudGF0aW9uPSJoIixyLnN3YXBYWURhdGEoaSkpLGRlbGV0ZSBpLmJhcmRpciksImhpc3RvZ3JhbXkiPT09aS50eXBlJiZyLnN3YXBYWURhdGEoaSksImhpc3RvZ3JhbXgiIT09aS50eXBlJiYiaGlzdG9ncmFteSIhPT1pLnR5cGV8fChpLnR5cGU9Imhpc3RvZ3JhbSIpLCJzY2wiaW4gaSYmISgiY29sb3JzY2FsZSJpbiBpKSYmKGkuY29sb3JzY2FsZT1pLnNjbCxkZWxldGUgaS5zY2wpLCJyZXZlcnNlc2NsImluIGkmJiEoInJldmVyc2VzY2FsZSJpbiBpKSYmKGkucmV2ZXJzZXNjYWxlPWkucmV2ZXJzZXNjbCxkZWxldGUgaS5yZXZlcnNlc2NsKSxpLnhheGlzJiYoaS54YXhpcz11KGkueGF4aXMsIngiKSksaS55YXhpcyYmKGkueWF4aXM9dShpLnlheGlzLCJ5IikpLGgoaSwiZ2wzZCIpJiZpLnNjZW5lJiYoaS5zY2VuZT1zLnN1YnBsb3RzUmVnaXN0cnkuZ2wzZC5jbGVhbklkKGkuc2NlbmUpKSwhaChpLCJwaWUtbGlrZSIpJiYhaChpLCJiYXItbGlrZSIpKWlmKEFycmF5LmlzQXJyYXkoaS50ZXh0cG9zaXRpb24pKWZvcihuPTA7bjxpLnRleHRwb3NpdGlvbi5sZW5ndGg7bisrKWkudGV4dHBvc2l0aW9uW25dPXYoaS50ZXh0cG9zaXRpb25bbl0pO2Vsc2UgaS50ZXh0cG9zaXRpb24mJihpLnRleHRwb3NpdGlvbj12KGkudGV4dHBvc2l0aW9uKSk7dmFyIHA9YS5nZXRNb2R1bGUoaSk7aWYocCYmcC5jb2xvcmJhcil7dmFyIHg9cC5jb2xvcmJhci5jb250YWluZXIsYj14P2lbeF06aTtiJiZiLmNvbG9yc2NhbGUmJigiWUlHbkJ1Ij09PWIuY29sb3JzY2FsZSYmKGIuY29sb3JzY2FsZT0iWWxHbkJ1IiksIllJT3JSZCI9PT1iLmNvbG9yc2NhbGUmJihiLmNvbG9yc2NhbGU9IllsT3JSZCIpKX1pZigic3VyZmFjZSI9PT1pLnR5cGUmJm8uaXNQbGFpbk9iamVjdChpLmNvbnRvdXJzKSl7dmFyIF89WyJ4IiwieSIsInoiXTtmb3Iobj0wO248Xy5sZW5ndGg7bisrKXt2YXIgdz1pLmNvbnRvdXJzW19bbl1dO28uaXNQbGFpbk9iamVjdCh3KSYmKHcuaGlnaGxpZ2h0Q29sb3ImJih3LmhpZ2hsaWdodGNvbG9yPXcuaGlnaGxpZ2h0Q29sb3IsZGVsZXRlIHcuaGlnaGxpZ2h0Q29sb3IpLHcuaGlnaGxpZ2h0V2lkdGgmJih3LmhpZ2hsaWdodHdpZHRoPXcuaGlnaGxpZ2h0V2lkdGgsZGVsZXRlIHcuaGlnaGxpZ2h0V2lkdGgpKX19aWYoImNhbmRsZXN0aWNrIj09PWkudHlwZXx8Im9obGMiPT09aS50eXBlKXt2YXIgVD0hMSE9PShpLmluY3JlYXNpbmd8fHt9KS5zaG93bGVnZW5kLGs9ITEhPT0oaS5kZWNyZWFzaW5nfHx7fSkuc2hvd2xlZ2VuZCxBPW0oaS5pbmNyZWFzaW5nKSxNPW0oaS5kZWNyZWFzaW5nKTtpZighMSE9PUEmJiExIT09TSl7dmFyIFM9ZyhBLE0sVCxrKTtTJiYoaS5uYW1lPVMpfWVsc2UhQSYmIU18fGkubmFtZXx8KGkubmFtZT1BfHxNKX1pZihBcnJheS5pc0FycmF5KGkudHJhbnNmb3Jtcykpe3ZhciBFPWkudHJhbnNmb3Jtcztmb3Iobj0wO248RS5sZW5ndGg7bisrKXt2YXIgTD1FW25dO2lmKG8uaXNQbGFpbk9iamVjdChMKSlzd2l0Y2goTC50eXBlKXtjYXNlImZpbHRlciI6TC5maWx0ZXJzcmMmJihMLnRhcmdldD1MLmZpbHRlcnNyYyxkZWxldGUgTC5maWx0ZXJzcmMpLEwuY2FsZW5kYXImJihMLnZhbHVlY2FsZW5kYXJ8fChMLnZhbHVlY2FsZW5kYXI9TC5jYWxlbmRhciksZGVsZXRlIEwuY2FsZW5kYXIpO2JyZWFrO2Nhc2UiZ3JvdXBieSI6aWYoTC5zdHlsZXM9TC5zdHlsZXN8fEwuc3R5bGUsTC5zdHlsZXMmJiFBcnJheS5pc0FycmF5KEwuc3R5bGVzKSl7dmFyIEM9TC5zdHlsZXMsUD1PYmplY3Qua2V5cyhDKTtMLnN0eWxlcz1bXTtmb3IodmFyIEk9MDtJPFAubGVuZ3RoO0krKylMLnN0eWxlcy5wdXNoKHt0YXJnZXQ6UFtJXSx2YWx1ZTpDW1BbSV1dfSl9fX19eShpLCJsaW5lIikmJmRlbGV0ZSBpLmxpbmUsIm1hcmtlciJpbiBpJiYoeShpLm1hcmtlciwibGluZSIpJiZkZWxldGUgaS5tYXJrZXIubGluZSx5KGksIm1hcmtlciIpJiZkZWxldGUgaS5tYXJrZXIpLGMuY2xlYW4oaSksaS5hdXRvYmlueCYmKGRlbGV0ZSBpLmF1dG9iaW54LGRlbGV0ZSBpLnhiaW5zKSxpLmF1dG9iaW55JiYoZGVsZXRlIGkuYXV0b2JpbnksZGVsZXRlIGkueWJpbnMpLGQoaSksaS5jb2xvcmJhciYmZChpLmNvbG9yYmFyKSxpLm1hcmtlciYmaS5tYXJrZXIuY29sb3JiYXImJmQoaS5tYXJrZXIuY29sb3JiYXIpLGkubGluZSYmaS5saW5lLmNvbG9yYmFyJiZkKGkubGluZS5jb2xvcmJhciksaS5hYXhpcyYmZChpLmFheGlzKSxpLmJheGlzJiZkKGkuYmF4aXMpfX0sci5zd2FwWFlEYXRhPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKG8uc3dhcEF0dHJzKHQsWyI/IiwiPzAiLCJkPyIsIj9iaW5zIiwibmJpbnM/IiwiYXV0b2Jpbj8iLCI/c3JjIiwiZXJyb3JfPyJdKSxBcnJheS5pc0FycmF5KHQueikmJkFycmF5LmlzQXJyYXkodC56WzBdKSYmKHQudHJhbnNwb3NlP2RlbGV0ZSB0LnRyYW5zcG9zZTp0LnRyYW5zcG9zZT0hMCksdC5lcnJvcl94JiZ0LmVycm9yX3kpe3ZhciByPXQuZXJyb3JfeSxuPSJjb3B5X3lzdHlsZSJpbiByP3IuY29weV95c3R5bGU6IShyLmNvbG9yfHxyLnRoaWNrbmVzc3x8ci53aWR0aCk7by5zd2FwQXR0cnModCxbImVycm9yXz8uY29weV95c3R5bGUiXSksbiYmby5zd2FwQXR0cnModCxbImVycm9yXz8uY29sb3IiLCJlcnJvcl8/LnRoaWNrbmVzcyIsImVycm9yXz8ud2lkdGgiXSl9aWYoInN0cmluZyI9PXR5cGVvZiB0LmhvdmVyaW5mbyl7dmFyIGk9dC5ob3ZlcmluZm8uc3BsaXQoIisiKTtmb3IoZT0wO2U8aS5sZW5ndGg7ZSsrKSJ4Ij09PWlbZV0/aVtlXT0ieSI6InkiPT09aVtlXSYmKGlbZV09IngiKTt0LmhvdmVyaW5mbz1pLmpvaW4oIisiKX19LHIuY29lcmNlVHJhY2VJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYobihlKSlyZXR1cm5bZV07aWYoIUFycmF5LmlzQXJyYXkoZSl8fCFlLmxlbmd0aClyZXR1cm4gdC5kYXRhLm1hcCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gZX0pKTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHI9W10saT0wO2k8ZS5sZW5ndGg7aSsrKW8uaXNJbmRleChlW2ldLHQuZGF0YS5sZW5ndGgpP3IucHVzaChlW2ldKTpvLndhcm4oInRyYWNlIGluZGV4ICgiLGVbaV0sIikgaXMgbm90IGEgbnVtYmVyIG9yIGlzIG91dCBvZiBib3VuZHMiKTtyZXR1cm4gcn1yZXR1cm4gZX0sci5tYW5hZ2VBcnJheUNvbnRhaW5lcnM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQub2JqLGE9dC5wYXJ0cyxzPWEubGVuZ3RoLGw9YVtzLTFdLGM9bihsKTtpZihjJiZudWxsPT09ZSl7dmFyIHU9YS5zbGljZSgwLHMtMSkuam9pbigiLiIpO28ubmVzdGVkUHJvcGVydHkoaSx1KS5nZXQoKS5zcGxpY2UobCwxKX1lbHNlIGMmJnZvaWQgMD09PXQuZ2V0KCk/KHZvaWQgMD09PXQuZ2V0KCkmJihyW3QuYXN0cl09bnVsbCksdC5zZXQoZSkpOnQuc2V0KGUpfTt2YXIgeD0vKFwuW15cW1xdXC5dK3xcW1teXFtcXVwuXStcXSkkLztmdW5jdGlvbiBiKHQpe3ZhciBlPXQuc2VhcmNoKHgpO2lmKGU+MClyZXR1cm4gdC5zdWJzdHIoMCxlKX1yLmhhc1BhcmVudD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1iKGUpO3I7KXtpZihyIGluIHQpcmV0dXJuITA7cj1iKHIpfXJldHVybiExfTt2YXIgXz1bIngiLCJ5IiwieiJdO3IuY2xlYXJBeGlzVHlwZXM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWZvcih2YXIgaT10Ll9mdWxsRGF0YVtuXSxhPTA7YTwzO2ErKyl7dmFyIHM9Zih0LGksX1thXSk7aWYocyYmImxvZyIhPT1zLnR5cGUpe3ZhciBsPXMuX25hbWUsYz1zLl9pZC5zdWJzdHIoMSk7aWYoInNjZW5lIj09PWMuc3Vic3RyKDAsNSkpe2lmKHZvaWQgMCE9PXJbY10pY29udGludWU7bD1jKyIuIitsfXZhciB1PWwrIi50eXBlIjt2b2lkIDA9PT1yW2xdJiZ2b2lkIDA9PT1yW3VdJiZvLm5lc3RlZFByb3BlcnR5KHQubGF5b3V0LHUpLnNldChudWxsKX19fX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2xpYiI6Nzc2LCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vcmVnaXN0cnkiOjkwNCwiZmFzdC1pc251bWVyaWMiOjI0MiwiZ2wtbWF0NC9mcm9tUXVhdCI6Mjc2fV0sODExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGxvdF9hcGkiKTtyLl9kb1Bsb3Q9bi5fZG9QbG90LHIubmV3UGxvdD1uLm5ld1Bsb3Qsci5yZXN0eWxlPW4ucmVzdHlsZSxyLnJlbGF5b3V0PW4ucmVsYXlvdXQsci5yZWRyYXc9bi5yZWRyYXcsci51cGRhdGU9bi51cGRhdGUsci5fZ3VpUmVzdHlsZT1uLl9ndWlSZXN0eWxlLHIuX2d1aVJlbGF5b3V0PW4uX2d1aVJlbGF5b3V0LHIuX2d1aVVwZGF0ZT1uLl9ndWlVcGRhdGUsci5fc3RvcmVEaXJlY3RHVUlFZGl0PW4uX3N0b3JlRGlyZWN0R1VJRWRpdCxyLnJlYWN0PW4ucmVhY3Qsci5leHRlbmRUcmFjZXM9bi5leHRlbmRUcmFjZXMsci5wcmVwZW5kVHJhY2VzPW4ucHJlcGVuZFRyYWNlcyxyLmFkZFRyYWNlcz1uLmFkZFRyYWNlcyxyLmRlbGV0ZVRyYWNlcz1uLmRlbGV0ZVRyYWNlcyxyLm1vdmVUcmFjZXM9bi5tb3ZlVHJhY2VzLHIucHVyZ2U9bi5wdXJnZSxyLmFkZEZyYW1lcz1uLmFkZEZyYW1lcyxyLmRlbGV0ZUZyYW1lcz1uLmRlbGV0ZUZyYW1lcyxyLmFuaW1hdGU9bi5hbmltYXRlLHIuc2V0UGxvdENvbmZpZz1uLnNldFBsb3RDb25maWcsci50b0ltYWdlPXQoIi4vdG9faW1hZ2UiKSxyLnZhbGlkYXRlPXQoIi4vdmFsaWRhdGUiKSxyLmRvd25sb2FkSW1hZ2U9dCgiLi4vc25hcHNob3QvZG93bmxvYWQiKTt2YXIgaT10KCIuL3RlbXBsYXRlX2FwaSIpO3IubWFrZVRlbXBsYXRlPWkubWFrZVRlbXBsYXRlLHIudmFsaWRhdGVUZW1wbGF0ZT1pLnZhbGlkYXRlVGVtcGxhdGV9LHsiLi4vc25hcHNob3QvZG93bmxvYWQiOjkwNiwiLi9wbG90X2FwaSI6ODEzLCIuL3RlbXBsYXRlX2FwaSI6ODE4LCIuL3RvX2ltYWdlIjo4MTksIi4vdmFsaWRhdGUiOjgyMH1dLDgxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvaXNfcGxhaW5fb2JqZWN0IiksaT10KCIuLi9saWIvbm9vcCIpLGE9dCgiLi4vbGliL2xvZ2dlcnMiKSxvPXQoIi4uL2xpYi9zZWFyY2giKS5zb3J0ZXJBc2Mscz10KCIuLi9yZWdpc3RyeSIpO3IuY29udGFpbmVyQXJyYXlNYXRjaD10KCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCIpO3ZhciBsPXIuaXNBZGRWYWw9ZnVuY3Rpb24odCl7cmV0dXJuImFkZCI9PT10fHxuKHQpfSxjPXIuaXNSZW1vdmVWYWw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10fHwicmVtb3ZlIj09PXR9O3IuYXBwbHlDb250YWluZXJBcnJheUNoYW5nZXM9ZnVuY3Rpb24odCxlLHIsbix1KXt2YXIgZj1lLmFzdHIsaD1zLmdldENvbXBvbmVudE1ldGhvZChmLCJzdXBwbHlMYXlvdXREZWZhdWx0cyIpLHA9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhdyIpLGQ9cy5nZXRDb21wb25lbnRNZXRob2QoZiwiZHJhd09uZSIpLG09bi5yZXBsb3R8fG4ucmVjYWxjfHxoPT09aXx8cD09PWksZz10LmxheW91dCx2PXQuX2Z1bGxMYXlvdXQ7aWYoclsiIl0pe09iamVjdC5rZXlzKHIpLmxlbmd0aD4xJiZhLndhcm4oIkZ1bGwgYXJyYXkgZWRpdHMgYXJlIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIGVkaXRzIixmKTt2YXIgeT1yWyIiXVsiIl07aWYoYyh5KSllLnNldChudWxsKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KHkpKXJldHVybiBhLndhcm4oIlVucmVjb2duaXplZCBmdWxsIGFycmF5IGVkaXQgdmFsdWUiLGYseSksITA7ZS5zZXQoeSl9cmV0dXJuIW0mJihoKGcsdikscCh0KSwhMCl9dmFyIHgsYixfLHcsVCxrLEEsTSxTPU9iamVjdC5rZXlzKHIpLm1hcChOdW1iZXIpLnNvcnQobyksRT1lLmdldCgpLEw9RXx8W10sQz11KHYsZikuZ2V0KCksUD1bXSxJPS0xLE89TC5sZW5ndGg7Zm9yKHg9MDt4PFMubGVuZ3RoO3grKylpZih3PXJbXz1TW3hdXSxUPU9iamVjdC5rZXlzKHcpLGs9d1siIl0sQT1sKGspLF88MHx8Xz5MLmxlbmd0aC0oQT8wOjEpKWEud2FybigiaW5kZXggb3V0IG9mIHJhbmdlIixmLF8pO2Vsc2UgaWYodm9pZCAwIT09aylULmxlbmd0aD4xJiZhLndhcm4oIkluc2VydGlvbiAmIHJlbW92YWwgYXJlIGluY29tcGF0aWJsZSB3aXRoIGVkaXRzIHRvIHRoZSBzYW1lIGluZGV4LiIsZixfKSxjKGspP1AucHVzaChfKTpBPygiYWRkIj09PWsmJihrPXt9KSxMLnNwbGljZShfLDAsayksQyYmQy5zcGxpY2UoXywwLHt9KSk6YS53YXJuKCJVbnJlY29nbml6ZWQgZnVsbCBvYmplY3QgZWRpdCB2YWx1ZSIsZixfLGspLC0xPT09SSYmKEk9Xyk7ZWxzZSBmb3IoYj0wO2I8VC5sZW5ndGg7YisrKU09ZisiWyIrXysiXS4iLHUoTFtfXSxUW2JdLE0pLnNldCh3W1RbYl1dKTtmb3IoeD1QLmxlbmd0aC0xO3g+PTA7eC0tKUwuc3BsaWNlKFBbeF0sMSksQyYmQy5zcGxpY2UoUFt4XSwxKTtpZihMLmxlbmd0aD9FfHxlLnNldChMKTplLnNldChudWxsKSxtKXJldHVybiExO2lmKGgoZyx2KSxkIT09aSl7dmFyIHo7aWYoLTE9PT1JKXo9UztlbHNle2ZvcihPPU1hdGgubWF4KEwubGVuZ3RoLE8pLHo9W10seD0wO3g8Uy5sZW5ndGgmJiEoKF89U1t4XSk+PUkpO3grKyl6LnB1c2goXyk7Zm9yKHg9STt4PE87eCsrKXoucHVzaCh4KX1mb3IoeD0wO3g8ei5sZW5ndGg7eCsrKWQodCx6W3hdKX1lbHNlIHAodCk7cmV0dXJuITB9fSx7Ii4uL2xpYi9pc19wbGFpbl9vYmplY3QiOjc3NywiLi4vbGliL2xvZ2dlcnMiOjc4MCwiLi4vbGliL25vb3AiOjc4NSwiLi4vbGliL3NlYXJjaCI6Nzk2LCIuLi9yZWdpc3RyeSI6OTA0LCIuL2NvbnRhaW5lcl9hcnJheV9tYXRjaCI6ODA4fV0sODEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCJoYXMtaG92ZXIiKSxvPXQoIi4uL2xpYiIpLHM9by5uZXN0ZWRQcm9wZXJ0eSxsPXQoIi4uL2xpYi9ldmVudHMiKSxjPXQoIi4uL2xpYi9xdWV1ZSIpLHU9dCgiLi4vcmVnaXN0cnkiKSxmPXQoIi4vcGxvdF9zY2hlbWEiKSxoPXQoIi4uL3Bsb3RzL3Bsb3RzIikscD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGQ9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbT10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksZz10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vZ3JhcGhfaW50ZXJhY3QiKS5pbml0SW50ZXJhY3Rpb25zLHY9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSx5PXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCx4PXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLGI9dCgiLi9tYW5hZ2VfYXJyYXlzIiksXz10KCIuL2hlbHBlcnMiKSx3PXQoIi4vc3Vicm91dGluZXMiKSxUPXQoIi4vZWRpdF90eXBlcyIpLGs9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyIpLkFYX05BTUVfUEFUVEVSTixBPTA7ZnVuY3Rpb24gTSh0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2UuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQ/ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudC0tOnQuZW1pdCgicGxvdGx5X2FmdGVycGxvdCIpfWZ1bmN0aW9uIFModCxlKXt0cnl7dC5fZnVsbExheW91dC5fcGFwZXIuc3R5bGUoImJhY2tncm91bmQiLGUpfWNhdGNoKHQpe28uZXJyb3IodCl9fWZ1bmN0aW9uIEUodCxlKXtTKHQsbS5jb21iaW5lKGUsIndoaXRlIikpfWZ1bmN0aW9uIEwodCxlKXtpZighdC5fY29udGV4dCl7dC5fY29udGV4dD1vLmV4dGVuZERlZXAoe30seCk7dmFyIHI9bi5zZWxlY3QoImJhc2UiKTt0Ll9jb250ZXh0Ll9iYXNlVXJsPXIuc2l6ZSgpJiZyLmF0dHIoImhyZWYiKT93aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdOiIifXZhciBpLHMsbCxjPXQuX2NvbnRleHQ7aWYoZSl7Zm9yKHM9T2JqZWN0LmtleXMoZSksaT0wO2k8cy5sZW5ndGg7aSsrKSJlZGl0YWJsZSIhPT0obD1zW2ldKSYmImVkaXRzIiE9PWwmJmwgaW4gYyYmKCJzZXRCYWNrZ3JvdW5kIj09PWwmJiJvcGFxdWUiPT09ZVtsXT9jW2xdPUU6Y1tsXT1lW2xdKTtlLnBsb3QzZFBpeGVsUmF0aW8mJiFjLnBsb3RHbFBpeGVsUmF0aW8mJihjLnBsb3RHbFBpeGVsUmF0aW89Yy5wbG90M2RQaXhlbFJhdGlvKTt2YXIgdT1lLmVkaXRhYmxlO2lmKHZvaWQgMCE9PXUpZm9yKGMuZWRpdGFibGU9dSxzPU9iamVjdC5rZXlzKGMuZWRpdHMpLGk9MDtpPHMubGVuZ3RoO2krKyljLmVkaXRzW3NbaV1dPXU7aWYoZS5lZGl0cylmb3Iocz1PYmplY3Qua2V5cyhlLmVkaXRzKSxpPTA7aTxzLmxlbmd0aDtpKyspKGw9c1tpXSlpbiBjLmVkaXRzJiYoYy5lZGl0c1tsXT1lLmVkaXRzW2xdKTtjLl9leHBvcnRlZFBsb3Q9ZS5fZXhwb3J0ZWRQbG90fWMuc3RhdGljUGxvdCYmKGMuZWRpdGFibGU9ITEsYy5lZGl0cz17fSxjLmF1dG9zaXphYmxlPSExLGMuc2Nyb2xsWm9vbT0hMSxjLmRvdWJsZUNsaWNrPSExLGMuc2hvd1RpcHM9ITEsYy5zaG93TGluaz0hMSxjLmRpc3BsYXlNb2RlQmFyPSExKSwiaG92ZXIiIT09Yy5kaXNwbGF5TW9kZUJhcnx8YXx8KGMuZGlzcGxheU1vZGVCYXI9ITApLCJ0cmFuc3BhcmVudCIhPT1jLnNldEJhY2tncm91bmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnNldEJhY2tncm91bmR8fChjLnNldEJhY2tncm91bmQ9UyksYy5faGFzWmVyb0hlaWdodD1jLl9oYXNaZXJvSGVpZ2h0fHwwPT09dC5jbGllbnRIZWlnaHQsYy5faGFzWmVyb1dpZHRoPWMuX2hhc1plcm9XaWR0aHx8MD09PXQuY2xpZW50V2lkdGg7dmFyIGY9Yy5zY3JvbGxab29tLGg9Yy5fc2Nyb2xsWm9vbT17fTtpZighMD09PWYpaC5jYXJ0ZXNpYW49MSxoLmdsM2Q9MSxoLmdlbz0xLGgubWFwYm94PTE7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGYpe3ZhciBwPWYuc3BsaXQoIisiKTtmb3IoaT0wO2k8cC5sZW5ndGg7aSsrKWhbcFtpXV09MX1lbHNlITEhPT1mJiYoaC5nbDNkPTEsaC5nZW89MSxoLm1hcGJveD0xKX1mdW5jdGlvbiBDKHQsZSl7dmFyIHIsbixpPWUrMSxhPVtdO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspKG49dFtyXSk8MD9hLnB1c2goaStuKTphLnB1c2gobik7cmV0dXJuIGF9ZnVuY3Rpb24gUCh0LGUscil7dmFyIG4saTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKXtpZigoaT1lW25dKSE9PXBhcnNlSW50KGksMTApKXRocm93IG5ldyBFcnJvcigiYWxsIHZhbHVlcyBpbiAiK3IrIiBtdXN0IGJlIGludGVnZXJzIik7aWYoaT49dC5kYXRhLmxlbmd0aHx8aTwtdC5kYXRhLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IocisiIG11c3QgYmUgdmFsaWQgaW5kaWNlcyBmb3IgZ2QuZGF0YS4iKTtpZihlLmluZGV4T2YoaSxuKzEpPi0xfHxpPj0wJiZlLmluZGV4T2YoLXQuZGF0YS5sZW5ndGgraSk+LTF8fGk8MCYmZS5pbmRleE9mKHQuZGF0YS5sZW5ndGgraSk+LTEpdGhyb3cgbmV3IEVycm9yKCJlYWNoIGluZGV4IGluICIrcisiIG11c3QgYmUgdW5pcXVlLiIpfX1mdW5jdGlvbiBJKHQsZSxyKXtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5LiIpO2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50SW5kaWNlcyBpcyBhIHJlcXVpcmVkIGFyZ3VtZW50LiIpO2lmKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksUCh0LGUsImN1cnJlbnRJbmRpY2VzIiksdm9pZCAwPT09cnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSx2b2lkIDAhPT1yJiZQKHQsciwibmV3SW5kaWNlcyIpLHZvaWQgMCE9PXImJmUubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJjdXJyZW50IGFuZCBuZXcgaW5kaWNlcyBtdXN0IGJlIG9mIGVxdWFsIGxlbmd0aC4iKX1mdW5jdGlvbiBPKHQsZSxyLG4sYSl7IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW8uaXNQbGFpbk9iamVjdChuKTtpZighQXJyYXkuaXNBcnJheSh0LmRhdGEpKXRocm93IG5ldyBFcnJvcigiZ2QuZGF0YSBtdXN0IGJlIGFuIGFycmF5Iik7aWYoIW8uaXNQbGFpbk9iamVjdChlKSl0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZSBtdXN0IGJlIGEga2V5OnZhbHVlIG9iamVjdCIpO2lmKHZvaWQgMD09PXIpdGhyb3cgbmV3IEVycm9yKCJpbmRpY2VzIG11c3QgYmUgYW4gaW50ZWdlciBvciBhcnJheSBvZiBpbnRlZ2VycyIpO2Zvcih2YXIgYSBpbiBQKHQsciwiaW5kaWNlcyIpLGUpe2lmKCFBcnJheS5pc0FycmF5KGVbYV0pfHxlW2FdLmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYXR0cmlidXRlICIrYSsiIG11c3QgYmUgYW4gYXJyYXkgb2YgbGVuZ3RoIGVxdWFsIHRvIGluZGljZXMgYXJyYXkgbGVuZ3RoIik7aWYoaSYmKCEoYSBpbiBuKXx8IUFycmF5LmlzQXJyYXkoblthXSl8fG5bYV0ubGVuZ3RoIT09ZVthXS5sZW5ndGgpKXRocm93IG5ldyBFcnJvcigid2hlbiBtYXhQb2ludHMgaXMgc2V0IGFzIGEga2V5OnZhbHVlIG9iamVjdCBpdCBtdXN0IGNvbnRhaW4gYSAxOjEgY29ycmlzcG9uZGVuY2Ugd2l0aCB0aGUga2V5cyBhbmQgbnVtYmVyIG9mIHRyYWNlcyBpbiB0aGUgdXBkYXRlIG9iamVjdCIpfX0odCxlLHIsbik7Zm9yKHZhciBsPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBhLGwsYyx1LGYsaD1vLmlzUGxhaW5PYmplY3QobikscD1bXTtmb3IodmFyIGQgaW4gQXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSxyPUMocix0LmRhdGEubGVuZ3RoLTEpLGUpZm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspe2lmKGE9dC5kYXRhW3JbbV1dLGw9KGM9cyhhLGQpKS5nZXQoKSx1PWVbZF1bbV0sIW8uaXNBcnJheU9yVHlwZWRBcnJheSh1KSl0aHJvdyBuZXcgRXJyb3IoImF0dHJpYnV0ZTogIitkKyIgaW5kZXg6ICIrbSsiIG11c3QgYmUgYW4gYXJyYXkiKTtpZighby5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IGV4dGVuZCBtaXNzaW5nIG9yIG5vbi1hcnJheSBhdHRyaWJ1dGU6ICIrZCk7aWYobC5jb25zdHJ1Y3RvciE9PXUuY29uc3RydWN0b3IpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZXh0ZW5kIGFycmF5IHdpdGggYW4gYXJyYXkgb2YgYSBkaWZmZXJlbnQgdHlwZTogIitkKTtmPWg/bltkXVttXTpuLGkoZil8fChmPS0xKSxwLnB1c2goe3Byb3A6Yyx0YXJnZXQ6bCxpbnNlcnQ6dSxtYXhwOk1hdGguZmxvb3IoZil9KX1yZXR1cm4gcH0odCxlLHIsbiksYz17fSx1PXt9LGY9MDtmPGwubGVuZ3RoO2YrKyl7dmFyIGg9bFtmXS5wcm9wLHA9bFtmXS5tYXhwLGQ9YShsW2ZdLnRhcmdldCxsW2ZdLmluc2VydCxwKTtoLnNldChkWzBdKSxBcnJheS5pc0FycmF5KGNbaC5hc3RyXSl8fChjW2guYXN0cl09W10pLGNbaC5hc3RyXS5wdXNoKGRbMV0pLEFycmF5LmlzQXJyYXkodVtoLmFzdHJdKXx8KHVbaC5hc3RyXT1bXSksdVtoLmFzdHJdLnB1c2gobFtmXS50YXJnZXQubGVuZ3RoKX1yZXR1cm57dXBkYXRlOmMsbWF4UG9pbnRzOnV9fWZ1bmN0aW9uIHoodCxlKXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aCk7cmV0dXJuIHIuc2V0KHQpLHIuc2V0KGUsdC5sZW5ndGgpLHJ9ZnVuY3Rpb24gRCh0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgYT17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpYVtlXT1uO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZXN0eWxlIGZhaWwuIixlLG4saSksUHJvbWlzZS5yZWplY3QoKTthPW8uZXh0ZW5kRmxhdCh7fSxlKSx2b2lkIDA9PT1pJiYoaT1uKX1PYmplY3Qua2V5cyhhKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApO3ZhciBzPV8uY29lcmNlVHJhY2VJbmRpY2VzKHQsaSksbD1OKHQsYSxzKSx1PWwuZmxhZ3M7dS5jYWxjJiYodC5jYWxjZGF0YT12b2lkIDApLHUuY2xlYXJBeGlzVHlwZXMmJl8uY2xlYXJBeGlzVHlwZXModCxzLHt9KTt2YXIgZj1bXTt1LmZ1bGxSZXBsb3Q/Zi5wdXNoKHIuX2RvUGxvdCk6KGYucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLGguc3VwcGx5RGVmYXVsdHModCksdS5tYXJrZXJTaXplJiYoaC5kb0NhbGNkYXRhKHQpLEgoZikpLHUuc3R5bGUmJmYucHVzaCh3LmRvVHJhY2VTdHlsZSksdS5jb2xvcmJhcnMmJmYucHVzaCh3LmRvQ29sb3JCYXJzKSxmLnB1c2goTSkpLGYucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLGMuYWRkKHQsRCxbdCxsLnVuZG9pdCxsLnRyYWNlc10sRCxbdCxsLnJlZG9pdCxsLnRyYWNlc10pO3ZhciBwPW8uc3luY09yQXN5bmMoZix0KTtyZXR1cm4gcCYmcC50aGVufHwocD1Qcm9taXNlLnJlc29sdmUoKSkscC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV9yZXN0eWxlIixsLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBSKHQpe3JldHVybiB2b2lkIDA9PT10P251bGw6dH1mdW5jdGlvbiBGKHQsZSl7cmV0dXJuIGU/ZnVuY3Rpb24oZSxyLG4pe3ZhciBpPXMoZSxyKSxhPWkuc2V0O3JldHVybiBpLnNldD1mdW5jdGlvbihlKXtCKChufHwiIikrcixpLmdldCgpLGUsdCksYShlKX0saX06c31mdW5jdGlvbiBCKHQsZSxyLG4pe2lmKEFycmF5LmlzQXJyYXkoZSl8fEFycmF5LmlzQXJyYXkocikpZm9yKHZhciBpPUFycmF5LmlzQXJyYXkoZSk/ZTpbXSxhPUFycmF5LmlzQXJyYXkocik/cjpbXSxzPU1hdGgubWF4KGkubGVuZ3RoLGEubGVuZ3RoKSxsPTA7bDxzO2wrKylCKHQrIlsiK2wrIl0iLGlbbF0sYVtsXSxuKTtlbHNlIGlmKG8uaXNQbGFpbk9iamVjdChlKXx8by5pc1BsYWluT2JqZWN0KHIpKXt2YXIgYz1vLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSx1PW8uaXNQbGFpbk9iamVjdChyKT9yOnt9LGY9by5leHRlbmRGbGF0KHt9LGMsdSk7Zm9yKHZhciBoIGluIGYpQih0KyIuIitoLGNbaF0sdVtoXSxuKX1lbHNlIHZvaWQgMD09PW5bdF0mJihuW3RdPVIoZSkpfWZ1bmN0aW9uIE4odCxlLHIpe3ZhciBuLGk9dC5fZnVsbExheW91dCxhPXQuX2Z1bGxEYXRhLGw9dC5kYXRhLGM9aS5fZ3VpRWRpdGluZyxkPUYoaS5fcHJlR1VJLGMpLG09by5leHRlbmREZWVwQWxsKHt9LGUpO2ooZSk7dmFyIGcsdj1ULnRyYWNlRmxhZ3MoKSx5PXt9LHg9e307ZnVuY3Rpb24gYigpe3JldHVybiByLm1hcCgoZnVuY3Rpb24oKXt9KSl9ZnVuY3Rpb24gdyh0KXt2YXIgZT1wLmlkMm5hbWUodCk7LTE9PT1nLmluZGV4T2YoZSkmJmcucHVzaChlKX1mdW5jdGlvbiBrKHQpe3JldHVybiJMQVlPVVQiK3QrIi5hdXRvcmFuZ2UifWZ1bmN0aW9uIEEodCl7cmV0dXJuIkxBWU9VVCIrdCsiLnJhbmdlIn1mdW5jdGlvbiBNKHQpe2Zvcih2YXIgZT10O2U8YS5sZW5ndGg7ZSsrKWlmKGFbZV0uX2lucHV0PT09bFt0XSlyZXR1cm4gYVtlXX1mdW5jdGlvbiBTKG4sYSxvKXtpZihBcnJheS5pc0FycmF5KG4pKW4uZm9yRWFjaCgoZnVuY3Rpb24odCl7Uyh0LGEsbyl9KSk7ZWxzZSBpZighKG4gaW4gZSkmJiFfLmhhc1BhcmVudChlLG4pKXt2YXIgcztpZigiTEFZT1VUIj09PW4uc3Vic3RyKDAsNikpcz1kKHQubGF5b3V0LG4ucmVwbGFjZSgiTEFZT1VUIiwiIikpO2Vsc2V7dmFyIHU9cltvXTtzPUYoaS5fdHJhY2VQcmVHVUlbTSh1KS5fZnVsbElucHV0LnVpZF0sYykobFt1XSxuKX1uIGluIHh8fCh4W25dPWIoKSksdm9pZCAwPT09eFtuXVtvXSYmKHhbbl1bb109UihzLmdldCgpKSksdm9pZCAwIT09YSYmcy5zZXQoYSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBhW2VdW3RdfX1mdW5jdGlvbiBMKHQpe3JldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiExPT09ZT9hW3Jbbl1dW3RdOm51bGx9fWZvcih2YXIgQyBpbiBlKXtpZihfLmhhc1BhcmVudChlLEMpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0MrIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7dmFyIFAsSSxPLHosRCxCLE49ZVtDXTtpZigiYXV0b2JpbngiIT09QyYmImF1dG9iaW55IiE9PUN8fChDPUMuY2hhckF0KEMubGVuZ3RoLTEpKyJiaW5zIixOPUFycmF5LmlzQXJyYXkoTik/Ti5tYXAoTChDKSk6ITE9PT1OP3IubWFwKEUoQykpOm51bGwpLHlbQ109TiwiTEFZT1VUIiE9PUMuc3Vic3RyKDAsNikpe2Zvcih4W0NdPWIoKSxuPTA7bjxyLmxlbmd0aDtuKyspe2lmKFA9bFtyW25dXSxJPU0ocltuXSksej0oTz1GKGkuX3RyYWNlUHJlR1VJW0kuX2Z1bGxJbnB1dC51aWRdLGMpKFAsQykpLmdldCgpLHZvaWQgMCE9PShEPUFycmF5LmlzQXJyYXkoTik/TltuJU4ubGVuZ3RoXTpOKSl7dmFyIFU9Ty5wYXJ0c1tPLnBhcnRzLmxlbmd0aC0xXSxWPUMuc3Vic3RyKDAsQy5sZW5ndGgtVS5sZW5ndGgtMSksSD1WP1YrIi4iOiIiLHE9Vj9zKEksVikuZ2V0KCk6STtpZigoQj1mLmdldFRyYWNlVmFsT2JqZWN0KEksTy5wYXJ0cykpJiZCLmltcGxpZWRFZGl0cyYmbnVsbCE9PUQpZm9yKHZhciBHIGluIEIuaW1wbGllZEVkaXRzKVMoby5yZWxhdGl2ZUF0dHIoQyxHKSxCLmltcGxpZWRFZGl0c1tHXSxuKTtlbHNlIGlmKCJ0aGlja25lc3Ntb2RlIiE9PVUmJiJsZW5tb2RlIiE9PVV8fHo9PT1EfHwiZnJhY3Rpb24iIT09RCYmInBpeGVscyIhPT1EfHwhcSl7aWYoInR5cGUiPT09QyYmKCJwaWUiPT09RCE9KCJwaWUiPT09eil8fCJmdW5uZWxhcmVhIj09PUQhPSgiZnVubmVsYXJlYSI9PT16KSkpe3ZhciBZPSJ4IixXPSJ5IjsiYmFyIiE9PUQmJiJiYXIiIT09enx8ImgiIT09UC5vcmllbnRhdGlvbnx8KFk9InkiLFc9IngiKSxvLnN3YXBBdHRycyhQLFsiPyIsIj9zcmMiXSwibGFiZWxzIixZKSxvLnN3YXBBdHRycyhQLFsiZD8iLCI/MCJdLCJsYWJlbCIsWSksby5zd2FwQXR0cnMoUCxbIj8iLCI/c3JjIl0sInZhbHVlcyIsVyksInBpZSI9PT16fHwiZnVubmVsYXJlYSI9PT16PyhzKFAsIm1hcmtlci5jb2xvciIpLnNldChzKFAsIm1hcmtlci5jb2xvcnMiKS5nZXQoKSksaS5fcGllbGF5ZXIuc2VsZWN0QWxsKCJnLnRyYWNlIikucmVtb3ZlKCkpOnUudHJhY2VJcyhQLCJjYXJ0ZXNpYW4iKSYmcyhQLCJtYXJrZXIuY29sb3JzIikuc2V0KHMoUCwibWFya2VyLmNvbG9yIikuZ2V0KCkpfX1lbHNle3ZhciBYPWkuX3NpemUsWj1xLm9yaWVudCxKPSJ0b3AiPT09Wnx8ImJvdHRvbSI9PT1aO2lmKCJ0aGlja25lc3Ntb2RlIj09PVUpe3ZhciBLPUo/WC5oOlgudztTKEgrInRoaWNrbmVzcyIscS50aGlja25lc3MqKCJmcmFjdGlvbiI9PT1EPzEvSzpLKSxuKX1lbHNle3ZhciBRPUo/WC53OlguaDtTKEgrImxlbiIscS5sZW4qKCJmcmFjdGlvbiI9PT1EPzEvUTpRKSxuKX19eFtDXVtuXT1SKHopO2lmKC0xIT09WyJzd2FweHkiLCJzd2FweHlheGVzIiwib3JpZW50YXRpb24iLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpKXtpZigib3JpZW50YXRpb24iPT09Qyl7Ty5zZXQoRCk7dmFyICQ9UC54JiYhUC55PyJoIjoidiI7aWYoKE8uZ2V0KCl8fCQpPT09SS5vcmllbnRhdGlvbiljb250aW51ZX1lbHNlIm9yaWVudGF0aW9uYXhlcyI9PT1DJiYoUC5vcmllbnRhdGlvbj17djoiaCIsaDoidiJ9W0kub3JpZW50YXRpb25dKTtfLnN3YXBYWURhdGEoUCksdi5jYWxjPXYuY2xlYXJBeGlzVHlwZXM9ITB9ZWxzZS0xIT09aC5kYXRhQXJyYXlDb250YWluZXJzLmluZGV4T2YoTy5wYXJ0c1swXSk/KF8ubWFuYWdlQXJyYXlDb250YWluZXJzKE8sRCx4KSx2LmNhbGM9ITApOihCP0IuYXJyYXlPayYmIXUudHJhY2VJcyhJLCJyZWdsIikmJihvLmlzQXJyYXlPclR5cGVkQXJyYXkoRCl8fG8uaXNBcnJheU9yVHlwZWRBcnJheSh6KSk/di5jYWxjPSEwOlQudXBkYXRlKHYsQik6di5jYWxjPSEwLE8uc2V0KEQpKX19aWYoLTEhPT1bInN3YXB4eWF4ZXMiLCJvcmllbnRhdGlvbmF4ZXMiXS5pbmRleE9mKEMpJiZwLnN3YXAodCxyKSwib3JpZW50YXRpb25heGVzIj09PUMpe3ZhciB0dD1zKHQubGF5b3V0LCJob3Zlcm1vZGUiKSxldD10dC5nZXQoKTsieCI9PT1ldD90dC5zZXQoInkiKToieSI9PT1ldD90dC5zZXQoIngiKToieCB1bmlmaWVkIj09PWV0P3R0LnNldCgieSB1bmlmaWVkIik6InkgdW5pZmllZCI9PT1ldCYmdHQuc2V0KCJ4IHVuaWZpZWQiKX1pZigtMSE9PVsib3JpZW50YXRpb24iLCJ0eXBlIl0uaW5kZXhPZihDKSl7Zm9yKGc9W10sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgcnQ9bFtyW25dXTt1LnRyYWNlSXMocnQsImNhcnRlc2lhbiIpJiYodyhydC54YXhpc3x8IngiKSx3KHJ0LnlheGlzfHwieSIpKX1TKGcubWFwKGspLCEwLDApLFMoZy5tYXAoQSksWzAsMV0sMCl9fWVsc2UgTz1kKHQubGF5b3V0LEMucmVwbGFjZSgiTEFZT1VUIiwiIikpLHhbQ109W1IoTy5nZXQoKSldLE8uc2V0KEFycmF5LmlzQXJyYXkoTik/TlswXTpOKSx2LmNhbGM9ITB9cmV0dXJuKHYuY2FsY3x8di5wbG90KSYmKHYuZnVsbFJlcGxvdD0hMCkse2ZsYWdzOnYsdW5kb2l0OngscmVkb2l0OnksdHJhY2VzOnIsZXZlbnREYXRhOm8uZXh0ZW5kRGVlcE5vQXJyYXlzKFtdLFttLHJdKX19ZnVuY3Rpb24gaih0KXt2YXIgZSxyLG4saT1vLmNvdW50ZXJSZWdleCgiYXhpcyIsIi50aXRsZSIsITEsITEpLGE9L2NvbG9yYmFyXC50aXRsZSQvLHM9T2JqZWN0LmtleXModCk7Zm9yKGU9MDtlPHMubGVuZ3RoO2UrKylyPXNbZV0sbj10W3JdLCJ0aXRsZSIhPT1yJiYhaS50ZXN0KHIpJiYhYS50ZXN0KHIpfHwic3RyaW5nIiE9dHlwZW9mIG4mJiJudW1iZXIiIT10eXBlb2Ygbj9yLmluZGV4T2YoInRpdGxlZm9udCIpPi0xP2wocixyLnJlcGxhY2UoInRpdGxlZm9udCIsInRpdGxlLmZvbnQiKSk6ci5pbmRleE9mKCJ0aXRsZXBvc2l0aW9uIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVwb3NpdGlvbiIsInRpdGxlLnBvc2l0aW9uIikpOnIuaW5kZXhPZigidGl0bGVzaWRlIik+LTE/bChyLHIucmVwbGFjZSgidGl0bGVzaWRlIiwidGl0bGUuc2lkZSIpKTpyLmluZGV4T2YoInRpdGxlb2Zmc2V0Iik+LTEmJmwocixyLnJlcGxhY2UoInRpdGxlb2Zmc2V0IiwidGl0bGUub2Zmc2V0IikpOmwocixyLnJlcGxhY2UoInRpdGxlIiwidGl0bGUudGV4dCIpKTtmdW5jdGlvbiBsKGUscil7dFtyXT10W2VdLGRlbGV0ZSB0W2VdfX1mdW5jdGlvbiBVKHQsZSxyKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KTt2YXIgbj17fTtpZigic3RyaW5nIj09dHlwZW9mIGUpbltlXT1yO2Vsc2V7aWYoIW8uaXNQbGFpbk9iamVjdChlKSlyZXR1cm4gby53YXJuKCJSZWxheW91dCBmYWlsLiIsZSxyKSxQcm9taXNlLnJlamVjdCgpO249by5leHRlbmRGbGF0KHt9LGUpfU9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGk9Vyh0LG4pLGE9aS5mbGFnczthLmNhbGMmJih0LmNhbGNkYXRhPXZvaWQgMCk7dmFyIHM9W2gucHJldmlvdXNQcm9taXNlc107YS5sYXlvdXRSZXBsb3Q/cy5wdXNoKHcubGF5b3V0UmVwbG90KTpPYmplY3Qua2V5cyhuKS5sZW5ndGgmJihWKHQsYSxpKXx8aC5zdXBwbHlEZWZhdWx0cyh0KSxhLmxlZ2VuZCYmcy5wdXNoKHcuZG9MZWdlbmQpLGEubGF5b3V0c3R5bGUmJnMucHVzaCh3LmxheW91dFN0eWxlcyksYS5heHJhbmdlJiZIKHMsaS5yYW5nZXNBbHRlcmVkKSxhLnRpY2tzJiZzLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGEubW9kZWJhciYmcy5wdXNoKHcuZG9Nb2RlQmFyKSxhLmNhbWVyYSYmcy5wdXNoKHcuZG9DYW1lcmEpLGEuY29sb3JiYXJzJiZzLnB1c2gody5kb0NvbG9yQmFycykscy5wdXNoKE0pKSxzLnB1c2goaC5yZWhvdmVyLGgucmVkcmFnKSxjLmFkZCh0LFUsW3QsaS51bmRvaXRdLFUsW3QsaS5yZWRvaXRdKTt2YXIgbD1vLnN5bmNPckFzeW5jKHMsdCk7cmV0dXJuIGwmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKSxsLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0IixpLmV2ZW50RGF0YSksdH0pKX1mdW5jdGlvbiBWKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0O2lmKCFlLmF4cmFuZ2UpcmV0dXJuITE7Zm9yKHZhciBpIGluIGUpaWYoImF4cmFuZ2UiIT09aSYmZVtpXSlyZXR1cm4hMTtmb3IodmFyIGEgaW4gci5yYW5nZXNBbHRlcmVkKXt2YXIgbz1wLmlkMm5hbWUoYSkscz10LmxheW91dFtvXSxsPW5bb107aWYobC5hdXRvcmFuZ2U9cy5hdXRvcmFuZ2Uscy5yYW5nZSYmKGwucmFuZ2U9cy5yYW5nZS5zbGljZSgpKSxsLmNsZWFuUmFuZ2UoKSxsLl9tYXRjaEdyb3VwKWZvcih2YXIgYyBpbiBsLl9tYXRjaEdyb3VwKWlmKGMhPT1hKXt2YXIgdT1uW3AuaWQybmFtZShjKV07dS5hdXRvcmFuZ2U9bC5hdXRvcmFuZ2UsdS5yYW5nZT1sLnJhbmdlLnNsaWNlKCksdS5faW5wdXQucmFuZ2U9bC5yYW5nZS5zbGljZSgpfX1yZXR1cm4hMH1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9ZT9mdW5jdGlvbih0KXt2YXIgcj1bXSxuPSEwO2Zvcih2YXIgaSBpbiBlKXt2YXIgYT1wLmdldEZyb21JZCh0LGkpO2lmKHIucHVzaChpKSwtMSE9PShhLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJmEuX2FuY2hvckF4aXMmJnIucHVzaChhLl9hbmNob3JBeGlzLl9pZCksYS5fbWF0Y2hHcm91cClmb3IodmFyIG8gaW4gYS5fbWF0Y2hHcm91cCllW29dfHxyLnB1c2gobyk7YS5hdXRvbWFyZ2luJiYobj0hMSl9cmV0dXJuIHAuZHJhdyh0LHIse3NraXBUaXRsZTpufSl9OmZ1bmN0aW9uKHQpe3JldHVybiBwLmRyYXcodCwicmVkcmF3Iil9O3QucHVzaCh5LHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyxyLHcuZHJhd0RhdGEsdy5maW5hbERyYXcpfXZhciBxPS9eW3h5el1heGlzWzAtOV0qXC5yYW5nZShcW1swfDFdXF0pPyQvLEc9L15beHl6XWF4aXNbMC05XSpcLmF1dG9yYW5nZSQvLFk9L15beHl6XWF4aXNbMC05XSpcLmRvbWFpbihcW1swfDFdXF0pPyQvO2Z1bmN0aW9uIFcodCxlKXt2YXIgcixuLGksYT10LmxheW91dCxsPXQuX2Z1bGxMYXlvdXQsYz1sLl9ndWlFZGl0aW5nLGg9RihsLl9wcmVHVUksYyksZD1PYmplY3Qua2V5cyhlKSxtPXAubGlzdCh0KSxnPW8uZXh0ZW5kRGVlcEFsbCh7fSxlKSx2PXt9O2ZvcihqKGUpLGQ9T2JqZWN0LmtleXMoZSksbj0wO248ZC5sZW5ndGg7bisrKWlmKDA9PT1kW25dLmluZGV4T2YoImFsbGF4ZXMiKSl7Zm9yKGk9MDtpPG0ubGVuZ3RoO2krKyl7dmFyIHk9bVtpXS5faWQuc3Vic3RyKDEpLHg9LTEhPT15LmluZGV4T2YoInNjZW5lIik/eSsiLiI6IiIsdz1kW25dLnJlcGxhY2UoImFsbGF4ZXMiLHgrbVtpXS5fbmFtZSk7ZVt3XXx8KGVbd109ZVtkW25dXSl9ZGVsZXRlIGVbZFtuXV19dmFyIEE9VC5sYXlvdXRGbGFncygpLE09e30sUz17fTtmdW5jdGlvbiBFKHQscil7aWYoQXJyYXkuaXNBcnJheSh0KSl0LmZvckVhY2goKGZ1bmN0aW9uKHQpe0UodCxyKX0pKTtlbHNlIGlmKCEodCBpbiBlKSYmIV8uaGFzUGFyZW50KGUsdCkpe3ZhciBuPWgoYSx0KTt0IGluIFN8fChTW3RdPVIobi5nZXQoKSkpLHZvaWQgMCE9PXImJm4uc2V0KHIpfX12YXIgTCxDPXt9O2Z1bmN0aW9uIFAodCl7dmFyIGU9cC5uYW1lMmlkKHQuc3BsaXQoIi4iKVswXSk7cmV0dXJuIENbZV09MSxlfWZvcih2YXIgSSBpbiBlKXtpZihfLmhhc1BhcmVudChlLEkpKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNldCAiK0krIiBhbmQgYSBwYXJlbnQgYXR0cmlidXRlIHNpbXVsdGFuZW91c2x5Iik7Zm9yKHZhciBPPWgoYSxJKSx6PWVbSV0sRD1PLnBhcnRzLmxlbmd0aC0xO0Q+MCYmInN0cmluZyIhPXR5cGVvZiBPLnBhcnRzW0RdOylELS07dmFyIEI9Ty5wYXJ0c1tEXSxOPU8ucGFydHNbRC0xXSsiLiIrQixVPU8ucGFydHMuc2xpY2UoMCxEKS5qb2luKCIuIiksVj1zKHQubGF5b3V0LFUpLmdldCgpLEg9cyhsLFUpLmdldCgpLFc9Ty5nZXQoKTtpZih2b2lkIDAhPT16KXtNW0ldPXosU1tJXT0icmV2ZXJzZSI9PT1CP3o6UihXKTt2YXIgWj1mLmdldExheW91dFZhbE9iamVjdChsLE8ucGFydHMpO2lmKFomJlouaW1wbGllZEVkaXRzJiZudWxsIT09eilmb3IodmFyIEogaW4gWi5pbXBsaWVkRWRpdHMpRShvLnJlbGF0aXZlQXR0cihJLEopLFouaW1wbGllZEVkaXRzW0pdKTtpZigtMSE9PVsid2lkdGgiLCJoZWlnaHQiXS5pbmRleE9mKEkpKWlmKHope0UoImF1dG9zaXplIixudWxsKTt2YXIgSz0iaGVpZ2h0Ij09PUk/IndpZHRoIjoiaGVpZ2h0IjtFKEssbFtLXSl9ZWxzZSBsW0ldPXQuX2luaXRpYWxBdXRvU2l6ZVtJXTtlbHNlIGlmKCJhdXRvc2l6ZSI9PT1JKUUoIndpZHRoIix6P251bGw6bC53aWR0aCksRSgiaGVpZ2h0Iix6P251bGw6bC5oZWlnaHQpO2Vsc2UgaWYoTi5tYXRjaChxKSlQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7ZWxzZSBpZihOLm1hdGNoKEcpKXtQKE4pLHMobCxVKyIuX2lucHV0UmFuZ2UiKS5zZXQobnVsbCk7dmFyIFE9cyhsLFUpLmdldCgpO1EuX2lucHV0RG9tYWluJiYoUS5faW5wdXQuZG9tYWluPVEuX2lucHV0RG9tYWluLnNsaWNlKCkpfWVsc2UgTi5tYXRjaChZKSYmcyhsLFUrIi5faW5wdXREb21haW4iKS5zZXQobnVsbCk7aWYoInR5cGUiPT09Qil7TD1WO3ZhciAkPSJsaW5lYXIiPT09SC50eXBlJiYibG9nIj09PXosdHQ9ImxvZyI9PT1ILnR5cGUmJiJsaW5lYXIiPT09ejtpZigkfHx0dCl7aWYoTCYmTC5yYW5nZSlpZihILmF1dG9yYW5nZSkkJiYoTC5yYW5nZT1MLnJhbmdlWzFdPkwucmFuZ2VbMF0/WzEsMl06WzIsMV0pO2Vsc2V7dmFyIGV0PUwucmFuZ2VbMF0scnQ9TC5yYW5nZVsxXTskPyhldDw9MCYmcnQ8PTAmJkUoVSsiLmF1dG9yYW5nZSIsITApLGV0PD0wP2V0PXJ0LzFlNjpydDw9MCYmKHJ0PWV0LzFlNiksRShVKyIucmFuZ2VbMF0iLE1hdGgubG9nKGV0KS9NYXRoLkxOMTApLEUoVSsiLnJhbmdlWzFdIixNYXRoLmxvZyhydCkvTWF0aC5MTjEwKSk6KEUoVSsiLnJhbmdlWzBdIixNYXRoLnBvdygxMCxldCkpLEUoVSsiLnJhbmdlWzFdIixNYXRoLnBvdygxMCxydCkpKX1lbHNlIEUoVSsiLmF1dG9yYW5nZSIsITApO0FycmF5LmlzQXJyYXkobC5fc3VicGxvdHMucG9sYXIpJiZsLl9zdWJwbG90cy5wb2xhci5sZW5ndGgmJmxbTy5wYXJ0c1swXV0mJiJyYWRpYWxheGlzIj09PU8ucGFydHNbMV0mJmRlbGV0ZSBsW08ucGFydHNbMF1dLl9zdWJwbG90LnZpZXdJbml0aWFsWyJyYWRpYWxheGlzLnJhbmdlIl0sdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY29udmVydENvb3JkcyIpKHQsSCx6LEUpLHUuZ2V0Q29tcG9uZW50TWV0aG9kKCJpbWFnZXMiLCJjb252ZXJ0Q29vcmRzIikodCxILHosRSl9ZWxzZSBFKFUrIi5hdXRvcmFuZ2UiLCEwKSxFKFUrIi5yYW5nZSIsbnVsbCk7cyhsLFUrIi5faW5wdXRSYW5nZSIpLnNldChudWxsKX1lbHNlIGlmKEIubWF0Y2goaykpe3ZhciBudD1zKGwsSSkuZ2V0KCksaXQ9KHp8fHt9KS50eXBlO2l0JiYiLSIhPT1pdHx8KGl0PSJsaW5lYXIiKSx1LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJjb252ZXJ0Q29vcmRzIikodCxudCxpdCxFKSx1LmdldENvbXBvbmVudE1ldGhvZCgiaW1hZ2VzIiwiY29udmVydENvb3JkcyIpKHQsbnQsaXQsRSl9dmFyIGF0PWIuY29udGFpbmVyQXJyYXlNYXRjaChJKTtpZihhdCl7cj1hdC5hcnJheSxuPWF0LmluZGV4O3ZhciBvdD1hdC5wcm9wZXJ0eSxzdD1afHx7ZWRpdFR5cGU6ImNhbGMifTsiIiE9PW4mJiIiPT09b3QmJihiLmlzQWRkVmFsKHopP1NbSV09bnVsbDpiLmlzUmVtb3ZlVmFsKHopP1NbSV09KHMoYSxyKS5nZXQoKXx8W10pW25dOm8ud2FybigidW5yZWNvZ25pemVkIGZ1bGwgb2JqZWN0IHZhbHVlIixlKSksVC51cGRhdGUoQSxzdCksdltyXXx8KHZbcl09e30pO3ZhciBsdD12W3JdW25dO2x0fHwobHQ9dltyXVtuXT17fSksbHRbb3RdPXosZGVsZXRlIGVbSV19ZWxzZSJyZXZlcnNlIj09PUI/KFYucmFuZ2U/Vi5yYW5nZS5yZXZlcnNlKCk6KEUoVSsiLmF1dG9yYW5nZSIsITApLFYucmFuZ2U9WzEsMF0pLEguYXV0b3JhbmdlP0EuY2FsYz0hMDpBLnBsb3Q9ITApOihsLl9oYXMoInNjYXR0ZXItbGlrZSIpJiZsLl9oYXMoInJlZ2wiKSYmImRyYWdtb2RlIj09PUkmJigibGFzc28iPT09enx8InNlbGVjdCI9PT16KSYmImxhc3NvIiE9PVcmJiJzZWxlY3QiIT09V3x8bC5faGFzKCJnbDJkIik/QS5wbG90PSEwOlo/VC51cGRhdGUoQSxaKTpBLmNhbGM9ITAsTy5zZXQoeikpfX1mb3IociBpbiB2KXtiLmFwcGx5Q29udGFpbmVyQXJyYXlDaGFuZ2VzKHQsaChhLHIpLHZbcl0sQSxoKXx8KEEucGxvdD0hMCl9Zm9yKHZhciBjdCBpbiBDKXt2YXIgdXQ9KEw9cC5nZXRGcm9tSWQodCxjdCkpJiZMLl9jb25zdHJhaW50R3JvdXA7aWYodXQpZm9yKHZhciBmdCBpbiBBLmNhbGM9ITAsdXQpQ1tmdF18fChwLmdldEZyb21JZCh0LGZ0KS5fY29uc3RyYWludFNocmlua2FibGU9ITApfXJldHVybihYKHQpfHxlLmhlaWdodHx8ZS53aWR0aCkmJihBLnBsb3Q9ITApLChBLnBsb3R8fEEuY2FsYykmJihBLmxheW91dFJlcGxvdD0hMCkse2ZsYWdzOkEscmFuZ2VzQWx0ZXJlZDpDLHVuZG9pdDpTLHJlZG9pdDpNLGV2ZW50RGF0YTpnfX1mdW5jdGlvbiBYKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLndpZHRoLG49ZS5oZWlnaHQ7cmV0dXJuIHQubGF5b3V0LmF1dG9zaXplJiZoLnBsb3RBdXRvU2l6ZSh0LHQubGF5b3V0LGUpLGUud2lkdGghPT1yfHxlLmhlaWdodCE9PW59ZnVuY3Rpb24gWih0LGUsbixpKXt0PW8uZ2V0R3JhcGhEaXYodCksXy5jbGVhclByb21pc2VRdWV1ZSh0KSxvLmlzUGxhaW5PYmplY3QoZSl8fChlPXt9KSxvLmlzUGxhaW5PYmplY3Qobil8fChuPXt9KSxPYmplY3Qua2V5cyhlKS5sZW5ndGgmJih0LmNoYW5nZWQ9ITApLE9iamVjdC5rZXlzKG4pLmxlbmd0aCYmKHQuY2hhbmdlZD0hMCk7dmFyIGE9Xy5jb2VyY2VUcmFjZUluZGljZXModCxpKSxzPU4odCxvLmV4dGVuZEZsYXQoe30sZSksYSksbD1zLmZsYWdzLHU9Vyh0LG8uZXh0ZW5kRmxhdCh7fSxuKSksZj11LmZsYWdzOyhsLmNhbGN8fGYuY2FsYykmJih0LmNhbGNkYXRhPXZvaWQgMCksbC5jbGVhckF4aXNUeXBlcyYmXy5jbGVhckF4aXNUeXBlcyh0LGEsbik7dmFyIHA9W107Zi5sYXlvdXRSZXBsb3Q/cC5wdXNoKHcubGF5b3V0UmVwbG90KTpsLmZ1bGxSZXBsb3Q/cC5wdXNoKHIuX2RvUGxvdCk6KHAucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLFYodCxmLHUpfHxoLnN1cHBseURlZmF1bHRzKHQpLGwuc3R5bGUmJnAucHVzaCh3LmRvVHJhY2VTdHlsZSksKGwuY29sb3JiYXJzfHxmLmNvbG9yYmFycykmJnAucHVzaCh3LmRvQ29sb3JCYXJzKSxmLmxlZ2VuZCYmcC5wdXNoKHcuZG9MZWdlbmQpLGYubGF5b3V0c3R5bGUmJnAucHVzaCh3LmxheW91dFN0eWxlcyksZi5heHJhbmdlJiZIKHAsdS5yYW5nZXNBbHRlcmVkKSxmLnRpY2tzJiZwLnB1c2gody5kb1RpY2tzUmVsYXlvdXQpLGYubW9kZWJhciYmcC5wdXNoKHcuZG9Nb2RlQmFyKSxmLmNhbWVyYSYmcC5wdXNoKHcuZG9DYW1lcmEpLHAucHVzaChNKSkscC5wdXNoKGgucmVob3ZlcixoLnJlZHJhZyksYy5hZGQodCxaLFt0LHMudW5kb2l0LHUudW5kb2l0LHMudHJhY2VzXSxaLFt0LHMucmVkb2l0LHUucmVkb2l0LHMudHJhY2VzXSk7dmFyIGQ9by5zeW5jT3JBc3luYyhwLHQpO3JldHVybiBkJiZkLnRoZW58fChkPVByb21pc2UucmVzb2x2ZSh0KSksZC50aGVuKChmdW5jdGlvbigpe3JldHVybiB0LmVtaXQoInBsb3RseV91cGRhdGUiLHtkYXRhOnMuZXZlbnREYXRhLGxheW91dDp1LmV2ZW50RGF0YX0pLHR9KSl9ZnVuY3Rpb24gSih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMDt2YXIgcj10LmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gZS5fZnVsbExheW91dC5fZ3VpRWRpdGluZz0hMSxyfX12YXIgSz1be3BhdHRlcm46L15oaWRkZW5sYWJlbHMvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L14oKHh8eSlheGlzXGQqKVwuKChhdXRvKT9yYW5nZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovYXhpc1xkKlwuc2hvd3NwaWtlcyQvLGF0dHI6Im1vZGViYXIudWlyZXZpc2lvbiJ9LHtwYXR0ZXJuOi8oaG92ZXJ8ZHJhZyltb2RlJC8sYXR0cjoibW9kZWJhci51aXJldmlzaW9uIn0se3BhdHRlcm46L14oc2NlbmVcZCopXC5jYW1lcmEvfSx7cGF0dGVybjovXihnZW9cZCopXC4ocHJvamVjdGlvbnxjZW50ZXJ8Zml0Ym91bmRzKS99LHtwYXR0ZXJuOi9eKHRlcm5hcnlcZCpcLlthYmNdYXhpcylcLihtaW58dGl0bGVcLnRleHQpJC99LHtwYXR0ZXJuOi9eKHBvbGFyXGQqXC5yYWRpYWxheGlzKVwuKChhdXRvKT9yYW5nZXxhbmdsZXx0aXRsZVwudGV4dCkvfSx7cGF0dGVybjovXihwb2xhclxkKlwuYW5ndWxhcmF4aXMpXC5yb3RhdGlvbi99LHtwYXR0ZXJuOi9eKG1hcGJveFxkKilcLihjZW50ZXJ8em9vbXxiZWFyaW5nfHBpdGNoKS99LHtwYXR0ZXJuOi9ebGVnZW5kXC4oeHx5KSQvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9eKHNoYXBlc3xhbm5vdGF0aW9ucykvLGF0dHI6ImVkaXRyZXZpc2lvbiJ9LHtwYXR0ZXJuOi9edGl0bGVcLnRleHQkLyxhdHRyOiJlZGl0cmV2aXNpb24ifV0sUT1be3BhdHRlcm46L15zZWxlY3RlZHBvaW50cyQvLGF0dHI6InNlbGVjdGlvbnJldmlzaW9uIn0se3BhdHRlcm46LyhefHZhbHVlXC4pdmlzaWJsZSQvLGF0dHI6ImxlZ2VuZC51aXJldmlzaW9uIn0se3BhdHRlcm46L15kaW1lbnNpb25zXFtcZCtcXVwuY29uc3RyYWludHJhbmdlL30se3BhdHRlcm46L15ub2RlXC4oeHx5fGdyb3VwcykvfSx7cGF0dGVybjovXmxldmVsJC99LHtwYXR0ZXJuOi8oXnx2YWx1ZVwuKW5hbWUkL30se3BhdHRlcm46L2NvbG9yYmFyXC50aXRsZVwudGV4dCQvfSx7cGF0dGVybjovY29sb3JiYXJcLih4fHkpJC8sYXR0cjoiZWRpdHJldmlzaW9uIn1dO2Z1bmN0aW9uICQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPXQubWF0Y2gobi5wYXR0ZXJuKTtpZihpKXJldHVybntoZWFkOmlbMV0sYXR0cjpuLmF0dHJ9fX1mdW5jdGlvbiB0dCh0LGUpe3ZhciByPXMoZSx0KS5nZXQoKTtpZih2b2lkIDAhPT1yKXJldHVybiByO3ZhciBuPXQuc3BsaXQoIi4iKTtmb3Iobi5wb3AoKTtuLmxlbmd0aD4xOylpZihuLnBvcCgpLHZvaWQgMCE9PShyPXMoZSxuLmpvaW4oIi4iKSsiLnVpcmV2aXNpb24iKS5nZXQoKSkpcmV0dXJuIHI7cmV0dXJuIGUudWlyZXZpc2lvbn1mdW5jdGlvbiBldCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0uX2Z1bGxJbnB1dC51aWQ9PT10KXJldHVybiByO3JldHVybi0xfWZ1bmN0aW9uIHJ0KHQsZSxyKXtmb3IodmFyIG49MDtuPGUubGVuZ3RoO24rKylpZihlW25dLnVpZD09PXQpcmV0dXJuIG47cmV0dXJuIWVbcl18fGVbcl0udWlkPy0xOnJ9ZnVuY3Rpb24gbnQodCxlKXt2YXIgcj1vLmlzUGxhaW5PYmplY3QodCksbj1BcnJheS5pc0FycmF5KHQpO3JldHVybiByfHxuPyhyJiZvLmlzUGxhaW5PYmplY3QoZSl8fG4mJkFycmF5LmlzQXJyYXkoZSkpJiZKU09OLnN0cmluZ2lmeSh0KT09PUpTT04uc3RyaW5naWZ5KGUpOnQ9PT1lfWZ1bmN0aW9uIGl0KHQsZSxyLG4pe3ZhciBpLGEsbCxjPW4uZ2V0VmFsT2JqZWN0LHU9bi5mbGFncyxmPW4uaW1tdXRhYmxlLGg9bi5pbkFycmF5LHA9bi5hcnJheUluZGV4O2Z1bmN0aW9uIGQoKXt2YXIgdD1pLmVkaXRUeXBlO2gmJi0xIT09dC5pbmRleE9mKCJhcnJheWRyYXciKT9vLnB1c2hVbmlxdWUodS5hcnJheXNbaF0scCk6KFQudXBkYXRlKHUsaSksIm5vbmUiIT09dCYmdS5uQ2hhbmdlcysrLG4udHJhbnNpdGlvbiYmaS5hbmltJiZ1Lm5DaGFuZ2VzQW5pbSsrLChxLnRlc3QobCl8fEcudGVzdChsKSkmJih1LnJhbmdlc0FsdGVyZWRbclswXV09MSksWS50ZXN0KGwpJiZzKGUsIl9pbnB1dERvbWFpbiIpLnNldChudWxsKSwiZGF0YXJldmlzaW9uIj09PWEmJih1Lm5ld0RhdGFSZXZpc2lvbj0xKSl9ZnVuY3Rpb24gbSh0KXtyZXR1cm4iZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fHQuYXJyYXlPa31mb3IoYSBpbiB0KXtpZih1LmNhbGMmJiFuLnRyYW5zaXRpb24pcmV0dXJuO3ZhciBnPXRbYV0sdj1lW2FdLHk9ci5jb25jYXQoYSk7aWYobD15LmpvaW4oIi4iKSwiXyIhPT1hLmNoYXJBdCgwKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGcmJmchPT12KXtpZigoInRpY2swIj09PWF8fCJkdGljayI9PT1hKSYmImdlbyIhPT1yWzBdKXt2YXIgeD1lLnRpY2ttb2RlO2lmKCJhdXRvIj09PXh8fCJhcnJheSI9PT14fHwheCljb250aW51ZX1pZigoInJhbmdlIiE9PWF8fCFlLmF1dG9yYW5nZSkmJigiem1pbiIhPT1hJiYiem1heCIhPT1hfHwiY29udG91cmNhcnBldCIhPT1lLnR5cGUpJiYoaT1jKHkpKSYmKCFpLl9jb21wYXJlQXNKU09OfHxKU09OLnN0cmluZ2lmeShnKSE9PUpTT04uc3RyaW5naWZ5KHYpKSl7dmFyIGIsXz1pLnZhbFR5cGUsdz1tKGkpLGs9QXJyYXkuaXNBcnJheShnKSxBPUFycmF5LmlzQXJyYXkodik7aWYoayYmQSl7dmFyIE09Il9pbnB1dF8iK2EsUz10W01dLEU9ZVtNXTtpZihBcnJheS5pc0FycmF5KFMpJiZTPT09RSljb250aW51ZX1pZih2b2lkIDA9PT12KXcmJms/dS5jYWxjPSEwOmQoKTtlbHNlIGlmKGkuX2lzTGlua2VkVG9BcnJheSl7dmFyIEw9W10sQz0hMTtofHwodS5hcnJheXNbYV09TCk7dmFyIFA9TWF0aC5taW4oZy5sZW5ndGgsdi5sZW5ndGgpLEk9TWF0aC5tYXgoZy5sZW5ndGgsdi5sZW5ndGgpO2lmKFAhPT1JKXtpZigiYXJyYXlkcmF3IiE9PWkuZWRpdFR5cGUpe2QoKTtjb250aW51ZX1DPSEwfWZvcihiPTA7YjxQO2IrKylpdChnW2JdLHZbYl0seS5jb25jYXQoYiksby5leHRlbmRGbGF0KHtpbkFycmF5OmEsYXJyYXlJbmRleDpifSxuKSk7aWYoQylmb3IoYj1QO2I8STtiKyspTC5wdXNoKGIpfWVsc2UhXyYmby5pc1BsYWluT2JqZWN0KGcpP2l0KGcsdix5LG4pOnc/ayYmQT8oZiYmKHUuY2FsYz0hMCksKGZ8fG4ubmV3RGF0YVJldmlzaW9uKSYmZCgpKTprIT09QT91LmNhbGM9ITA6ZCgpOmsmJkEmJmcubGVuZ3RoPT09di5sZW5ndGgmJlN0cmluZyhnKT09PVN0cmluZyh2KXx8ZCgpfX19Zm9yKGEgaW4gZSlpZighKGEgaW4gdCkmJiJfIiE9PWEuY2hhckF0KDApJiYiZnVuY3Rpb24iIT10eXBlb2YgZVthXSl7aWYobShpPWMoci5jb25jYXQoYSkpKSYmQXJyYXkuaXNBcnJheShlW2FdKSlyZXR1cm4gdm9pZCh1LmNhbGM9ITApO2QoKX19ZnVuY3Rpb24gYXQodCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoIW8uZXF1YWxEb21SZWN0cyhyLGUuX2xhc3RCQm94KSl7dmFyIG49ZS5faW52VHJhbnNmb3JtPW8uaW52ZXJzZVRyYW5zZm9ybU1hdHJpeChvLmdldEZ1bGxUcmFuc2Zvcm1NYXRyaXgodCkpO2UuX2ludlNjYWxlWD1NYXRoLnNxcnQoblswXVswXSpuWzBdWzBdK25bMF1bMV0qblswXVsxXStuWzBdWzJdKm5bMF1bMl0pLGUuX2ludlNjYWxlWT1NYXRoLnNxcnQoblsxXVswXSpuWzFdWzBdK25bMV1bMV0qblsxXVsxXStuWzFdWzJdKm5bMV1bMl0pLGUuX2xhc3RCQm94PXJ9fXIuYW5pbWF0ZT1mdW5jdGlvbih0LGUscil7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KyIuIEl0J3MgbGlrZWx5IHRoYXQgeW91J3ZlIGZhaWxlZCB0byBjcmVhdGUgYSBwbG90IGJlZm9yZSBhbmltYXRpbmcgaXQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSBodHRwczovL3Bsb3RseS5jb20vamF2YXNjcmlwdC9hbmltYXRpb25zLyIpO3ZhciBuPXQuX3RyYW5zaXRpb25EYXRhO24uX2ZyYW1lUXVldWV8fChuLl9mcmFtZVF1ZXVlPVtdKTt2YXIgaT0ocj1oLnN1cHBseUFuaW1hdGlvbkRlZmF1bHRzKHIpKS50cmFuc2l0aW9uLGE9ci5mcmFtZTtmdW5jdGlvbiBzKHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP3Q+PWkubGVuZ3RoP2lbMF06aVt0XTppfWZ1bmN0aW9uIGwodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/dD49YS5sZW5ndGg/YVswXTphW3RdOmF9ZnVuY3Rpb24gYyh0LGUpe3ZhciByPTA7cmV0dXJuIGZ1bmN0aW9uKCl7aWYodCYmKytyPT09ZSlyZXR1cm4gdCgpfX1yZXR1cm4gdm9pZCAwPT09bi5fZnJhbWVXYWl0aW5nQ250JiYobi5fZnJhbWVXYWl0aW5nQ250PTApLG5ldyBQcm9taXNlKChmdW5jdGlvbihhLHUpe2Z1bmN0aW9uIGYoKXtuLl9jdXJyZW50RnJhbWUmJm4uX2N1cnJlbnRGcmFtZS5vbkNvbXBsZXRlJiZuLl9jdXJyZW50RnJhbWUub25Db21wbGV0ZSgpO3ZhciBlPW4uX2N1cnJlbnRGcmFtZT1uLl9mcmFtZVF1ZXVlLnNoaWZ0KCk7aWYoZSl7dmFyIHI9ZS5uYW1lP2UubmFtZS50b1N0cmluZygpOm51bGw7dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lPXIsbi5fbGFzdEZyYW1lQXQ9RGF0ZS5ub3coKSxuLl90aW1lVG9OZXh0PWUuZnJhbWVPcHRzLmR1cmF0aW9uLGgudHJhbnNpdGlvbih0LGUuZnJhbWUuZGF0YSxlLmZyYW1lLmxheW91dCxfLmNvZXJjZVRyYWNlSW5kaWNlcyh0LGUuZnJhbWUudHJhY2VzKSxlLmZyYW1lT3B0cyxlLnRyYW5zaXRpb25PcHRzKS50aGVuKChmdW5jdGlvbigpe2Uub25Db21wbGV0ZSYmZS5vbkNvbXBsZXRlKCl9KSksdC5lbWl0KCJwbG90bHlfYW5pbWF0aW5nZnJhbWUiLHtuYW1lOnIsZnJhbWU6ZS5mcmFtZSxhbmltYXRpb246e2ZyYW1lOmUuZnJhbWVPcHRzLHRyYW5zaXRpb246ZS50cmFuc2l0aW9uT3B0c319KX1lbHNlIHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4uX2FuaW1hdGlvblJhZiksbi5fYW5pbWF0aW9uUmFmPW51bGx9ZnVuY3Rpb24gcCgpe3QuZW1pdCgicGxvdGx5X2FuaW1hdGluZyIpLG4uX2xhc3RGcmFtZUF0PS0xLzAsbi5fdGltZVRvTmV4dD0wLG4uX3J1bm5pbmdUcmFuc2l0aW9ucz0wLG4uX2N1cnJlbnRGcmFtZT1udWxsO3ZhciBlPWZ1bmN0aW9uKCl7bi5fYW5pbWF0aW9uUmFmPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSksRGF0ZS5ub3coKS1uLl9sYXN0RnJhbWVBdD5uLl90aW1lVG9OZXh0JiZmKCl9O2UoKX12YXIgZCxtLGc9MDtmdW5jdGlvbiB2KHQpe3JldHVybiBBcnJheS5pc0FycmF5KGkpP2c+PWkubGVuZ3RoP3QudHJhbnNpdGlvbk9wdHM9aVtnXTp0LnRyYW5zaXRpb25PcHRzPWlbMF06dC50cmFuc2l0aW9uT3B0cz1pLGcrKyx0fXZhciB5PVtdLHg9bnVsbD09ZSxiPUFycmF5LmlzQXJyYXkoZSk7aWYoIXgmJiFiJiZvLmlzUGxhaW5PYmplY3QoZSkpeS5wdXNoKHt0eXBlOiJvYmplY3QiLGRhdGE6dihvLmV4dGVuZEZsYXQoe30sZSkpfSk7ZWxzZSBpZih4fHwtMSE9PVsic3RyaW5nIiwibnVtYmVyIl0uaW5kZXhPZih0eXBlb2YgZSkpZm9yKGQ9MDtkPG4uX2ZyYW1lcy5sZW5ndGg7ZCsrKShtPW4uX2ZyYW1lc1tkXSkmJih4fHxTdHJpbmcobS5ncm91cCk9PT1TdHJpbmcoZSkpJiZ5LnB1c2goe3R5cGU6ImJ5bmFtZSIsbmFtZTpTdHJpbmcobS5uYW1lKSxkYXRhOnYoe25hbWU6bS5uYW1lfSl9KTtlbHNlIGlmKGIpZm9yKGQ9MDtkPGUubGVuZ3RoO2QrKyl7dmFyIHc9ZVtkXTstMSE9PVsibnVtYmVyIiwic3RyaW5nIl0uaW5kZXhPZih0eXBlb2Ygdyk/KHc9U3RyaW5nKHcpLHkucHVzaCh7dHlwZToiYnluYW1lIixuYW1lOncsZGF0YTp2KHtuYW1lOnd9KX0pKTpvLmlzUGxhaW5PYmplY3QodykmJnkucHVzaCh7dHlwZToib2JqZWN0IixkYXRhOnYoby5leHRlbmRGbGF0KHt9LHcpKX0pfWZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0obT15W2RdKS50eXBlJiYhbi5fZnJhbWVIYXNoW20uZGF0YS5uYW1lXSlyZXR1cm4gby53YXJuKCdhbmltYXRlIGZhaWx1cmU6IGZyYW1lIG5vdCBmb3VuZDogIicrbS5kYXRhLm5hbWUrJyInKSx2b2lkIHUoKTstMSE9PVsibmV4dCIsImltbWVkaWF0ZSJdLmluZGV4T2Yoci5tb2RlKSYmZnVuY3Rpb24oKXtpZigwIT09bi5fZnJhbWVRdWV1ZS5sZW5ndGgpe2Zvcig7bi5fZnJhbWVRdWV1ZS5sZW5ndGg7KXt2YXIgZT1uLl9mcmFtZVF1ZXVlLnBvcCgpO2Uub25JbnRlcnJ1cHQmJmUub25JbnRlcnJ1cHQoKX10LmVtaXQoInBsb3RseV9hbmltYXRpb25pbnRlcnJ1cHRlZCIsW10pfX0oKSwicmV2ZXJzZSI9PT1yLmRpcmVjdGlvbiYmeS5yZXZlcnNlKCk7dmFyIFQ9dC5fZnVsbExheW91dC5fY3VycmVudEZyYW1lO2lmKFQmJnIuZnJvbWN1cnJlbnQpe3ZhciBrPS0xO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspaWYoImJ5bmFtZSI9PT0obT15W2RdKS50eXBlJiZtLm5hbWU9PT1UKXtrPWQ7YnJlYWt9aWYoaz4wJiZrPHkubGVuZ3RoLTEpe3ZhciBBPVtdO2ZvcihkPTA7ZDx5Lmxlbmd0aDtkKyspbT15W2RdLCgiYnluYW1lIiE9PXlbZF0udHlwZXx8ZD5rKSYmQS5wdXNoKG0pO3k9QX19eS5sZW5ndGg+MD9mdW5jdGlvbihlKXtpZigwIT09ZS5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbztvPSJieW5hbWUiPT09ZVtpXS50eXBlP2guY29tcHV0ZUZyYW1lKHQsZVtpXS5uYW1lKTplW2ldLmRhdGE7dmFyIGY9bChpKSxkPXMoaSk7ZC5kdXJhdGlvbj1NYXRoLm1pbihkLmR1cmF0aW9uLGYuZHVyYXRpb24pO3ZhciBtPXtmcmFtZTpvLG5hbWU6ZVtpXS5uYW1lLGZyYW1lT3B0czpmLHRyYW5zaXRpb25PcHRzOmR9O2k9PT1lLmxlbmd0aC0xJiYobS5vbkNvbXBsZXRlPWMoYSwyKSxtLm9uSW50ZXJydXB0PXUpLG4uX2ZyYW1lUXVldWUucHVzaChtKX0iaW1tZWRpYXRlIj09PXIubW9kZSYmKG4uX2xhc3RGcmFtZUF0PS0xLzApLG4uX2FuaW1hdGlvblJhZnx8cCgpfX0oeSk6KHQuZW1pdCgicGxvdGx5X2FuaW1hdGVkIiksYSgpKX0pKX0sci5hZGRGcmFtZXM9ZnVuY3Rpb24odCxlLHIpe2lmKHQ9by5nZXRHcmFwaERpdih0KSxudWxsPT1lKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtpZighby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCsiLiBJdCdzIGxpa2VseSB0aGF0IHlvdSd2ZSBmYWlsZWQgdG8gY3JlYXRlIGEgcGxvdCBiZWZvcmUgYWRkaW5nIGZyYW1lcy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIGh0dHBzOi8vcGxvdGx5LmNvbS9qYXZhc2NyaXB0L2FuaW1hdGlvbnMvIik7dmFyIG4saSxhLHMsbD10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLHU9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaDtpZighQXJyYXkuaXNBcnJheShlKSl0aHJvdyBuZXcgRXJyb3IoImFkZEZyYW1lcyBmYWlsdXJlOiBmcmFtZUxpc3QgbXVzdCBiZSBhbiBBcnJheSBvZiBmcmFtZSBkZWZpbml0aW9ucyIrZSk7dmFyIGY9bC5sZW5ndGgrMiplLmxlbmd0aCxwPVtdLGQ9e307Zm9yKG49ZS5sZW5ndGgtMTtuPj0wO24tLSlpZihvLmlzUGxhaW5PYmplY3QoZVtuXSkpe3ZhciBtPWVbbl0ubmFtZSxnPSh1W21dfHxkW21dfHx7fSkubmFtZSx2PWVbbl0ubmFtZSx5PXVbZ118fGRbZ107ZyYmdiYmIm51bWJlciI9PXR5cGVvZiB2JiZ5JiZBPDUmJihBKyssby53YXJuKCdhZGRGcmFtZXM6IG92ZXJ3cml0aW5nIGZyYW1lICInKyh1W2ddfHxkW2ddKS5uYW1lKyciIHdpdGggYSBmcmFtZSB3aG9zZSBuYW1lIG9mIHR5cGUgIm51bWJlciIgYWxzbyBlcXVhdGVzIHRvICInK2crJyIuIFRoaXMgaXMgdmFsaWQgYnV0IG1heSBwb3RlbnRpYWxseSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3Igc2luY2UgYWxsIHBsb3RseS5qcyBmcmFtZSBuYW1lcyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc3RyaW5ncy4nKSw1PT09QSYmby53YXJuKCJhZGRGcmFtZXM6IFRoaXMgQVBJIGNhbGwgaGFzIHlpZWxkZWQgdG9vIG1hbnkgb2YgdGhlc2Ugd2FybmluZ3MuIEZvciB0aGUgcmVzdCBvZiB0aGlzIGNhbGwsIGZ1cnRoZXIgd2FybmluZ3MgYWJvdXQgbnVtZXJpYyBmcmFtZSBuYW1lcyB3aWxsIGJlIHN1cHByZXNzZWQuIikpLGRbbV09e25hbWU6bX0scC5wdXNoKHtmcmFtZTpoLnN1cHBseUZyYW1lRGVmYXVsdHMoZVtuXSksaW5kZXg6ciYmdm9pZCAwIT09cltuXSYmbnVsbCE9PXJbbl0/cltuXTpmK259KX1wLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuaW5kZXg+ZS5pbmRleD8tMTp0LmluZGV4PGUuaW5kZXg/MTowfSkpO3ZhciB4PVtdLGI9W10sXz1sLmxlbmd0aDtmb3Iobj1wLmxlbmd0aC0xO24+PTA7bi0tKXtpZigibnVtYmVyIj09dHlwZW9mKGk9cFtuXS5mcmFtZSkubmFtZSYmby53YXJuKCJXYXJuaW5nOiBhZGRGcmFtZXMgYWNjZXB0cyBmcmFtZXMgd2l0aCBudW1lcmljIG5hbWVzLCBidXQgdGhlIG51bWJlcnMgYXJlaW1wbGljaXRseSBjYXN0IHRvIHN0cmluZ3MiKSwhaS5uYW1lKWZvcig7dVtpLm5hbWU9ImZyYW1lICIrdC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXIrK107KTtpZih1W2kubmFtZV0pe2ZvcihhPTA7YTxsLmxlbmd0aCYmKGxbYV18fHt9KS5uYW1lIT09aS5uYW1lO2ErKyk7eC5wdXNoKHt0eXBlOiJyZXBsYWNlIixpbmRleDphLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6InJlcGxhY2UiLGluZGV4OmEsdmFsdWU6bFthXX0pfWVsc2Ugcz1NYXRoLm1heCgwLE1hdGgubWluKHBbbl0uaW5kZXgsXykpLHgucHVzaCh7dHlwZToiaW5zZXJ0IixpbmRleDpzLHZhbHVlOml9KSxiLnVuc2hpZnQoe3R5cGU6ImRlbGV0ZSIsaW5kZXg6c30pLF8rK312YXIgdz1oLm1vZGlmeUZyYW1lcyxUPWgubW9kaWZ5RnJhbWVzLGs9W3QsYl0sTT1bdCx4XTtyZXR1cm4gYyYmYy5hZGQodCx3LGssVCxNKSxoLm1vZGlmeUZyYW1lcyh0LHgpfSxyLmRlbGV0ZUZyYW1lcz1mdW5jdGlvbih0LGUpe2lmKHQ9by5nZXRHcmFwaERpdih0KSwhby5pc1Bsb3REaXYodCkpdGhyb3cgbmV3IEVycm9yKCJUaGlzIGVsZW1lbnQgaXMgbm90IGEgUGxvdGx5IHBsb3Q6ICIrdCk7dmFyIHIsbixpPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZXMsYT1bXSxzPVtdO2lmKCFlKWZvcihlPVtdLHI9MDtyPGkubGVuZ3RoO3IrKyllLnB1c2gocik7Zm9yKChlPWUuc2xpY2UoKSkuc29ydCgpLHI9ZS5sZW5ndGgtMTtyPj0wO3ItLSluPWVbcl0sYS5wdXNoKHt0eXBlOiJkZWxldGUiLGluZGV4Om59KSxzLnVuc2hpZnQoe3R5cGU6Imluc2VydCIsaW5kZXg6bix2YWx1ZTppW25dfSk7dmFyIGw9aC5tb2RpZnlGcmFtZXMsdT1oLm1vZGlmeUZyYW1lcyxmPVt0LHNdLHA9W3QsYV07cmV0dXJuIGMmJmMuYWRkKHQsbCxmLHUscCksaC5tb2RpZnlGcmFtZXModCxhKX0sci5hZGRUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7ZT1vLmdldEdyYXBoRGl2KGUpO3ZhciBhLHMsbD1bXSx1PXIuZGVsZXRlVHJhY2VzLGY9dCxoPVtlLGxdLHA9W2Usbl07Zm9yKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpO2lmKCFBcnJheS5pc0FycmF5KHQuZGF0YSkpdGhyb3cgbmV3IEVycm9yKCJnZC5kYXRhIG11c3QgYmUgYW4gYXJyYXkuIik7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgRXJyb3IoInRyYWNlcyBtdXN0IGJlIGRlZmluZWQuIik7Zm9yKEFycmF5LmlzQXJyYXkoZSl8fChlPVtlXSksbj0wO248ZS5sZW5ndGg7bisrKWlmKCJvYmplY3QiIT10eXBlb2YoaT1lW25dKXx8QXJyYXkuaXNBcnJheShpKXx8bnVsbD09PWkpdGhyb3cgbmV3IEVycm9yKCJhbGwgdmFsdWVzIGluIHRyYWNlcyBhcnJheSBtdXN0IGJlIG5vbi1hcnJheSBvYmplY3RzIik7aWYodm9pZCAwPT09cnx8QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKSx2b2lkIDAhPT1yJiZyLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaWYgaW5kaWNlcyBpcyBzcGVjaWZpZWQsIHRyYWNlcy5sZW5ndGggbXVzdCBlcXVhbCBpbmRpY2VzLmxlbmd0aCIpfShlLG4saSksQXJyYXkuaXNBcnJheShuKXx8KG49W25dKSxuPW4ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHt9LHQpfSkpLF8uY2xlYW5EYXRhKG4pLGE9MDthPG4ubGVuZ3RoO2ErKyllLmRhdGEucHVzaChuW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCgtbi5sZW5ndGgrYSk7aWYodm9pZCAwPT09aSlyZXR1cm4gcz1yLnJlZHJhdyhlKSxjLmFkZChlLHUsaCxmLHApLHM7QXJyYXkuaXNBcnJheShpKXx8KGk9W2ldKTt0cnl7SShlLGwsaSl9Y2F0Y2godCl7dGhyb3cgZS5kYXRhLnNwbGljZShlLmRhdGEubGVuZ3RoLW4ubGVuZ3RoLG4ubGVuZ3RoKSx0fXJldHVybiBjLnN0YXJ0U2VxdWVuY2UoZSksYy5hZGQoZSx1LGgsZixwKSxzPXIubW92ZVRyYWNlcyhlLGwsaSksYy5zdG9wU2VxdWVuY2UoZSksc30sci5kZWxldGVUcmFjZXM9ZnVuY3Rpb24gdChlLG4pe2U9by5nZXRHcmFwaERpdihlKTt2YXIgaSxhLHM9W10sbD1yLmFkZFRyYWNlcyx1PXQsZj1bZSxzLG5dLGg9W2Usbl07aWYodm9pZCAwPT09bil0aHJvdyBuZXcgRXJyb3IoImluZGljZXMgbXVzdCBiZSBhbiBpbnRlZ2VyIG9yIGFycmF5IG9mIGludGVnZXJzLiIpO2ZvcihBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pLFAoZSxuLCJpbmRpY2VzIiksKG49QyhuLGUuZGF0YS5sZW5ndGgtMSkpLnNvcnQoby5zb3J0ZXJEZXMpLGk9MDtpPG4ubGVuZ3RoO2krPTEpYT1lLmRhdGEuc3BsaWNlKG5baV0sMSlbMF0scy5wdXNoKGEpO3ZhciBwPXIucmVkcmF3KGUpO3JldHVybiBjLmFkZChlLGwsZix1LGgpLHB9LHIuZXh0ZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPDApe3ZhciBhPW5ldyB0LmNvbnN0cnVjdG9yKDApLHM9eih0LGUpO3I8MD8obj1zLGk9YSk6KG49YSxpPXMpfWVsc2UgaWYobj1uZXcgdC5jb25zdHJ1Y3RvcihyKSxpPW5ldyB0LmNvbnN0cnVjdG9yKHQubGVuZ3RoK2UubGVuZ3RoLXIpLHI9PT1lLmxlbmd0aCluLnNldChlKSxpLnNldCh0KTtlbHNlIGlmKHI8ZS5sZW5ndGgpe3ZhciBsPWUubGVuZ3RoLXI7bi5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCksaS5zZXQoZS5zdWJhcnJheSgwLGwpLHQubGVuZ3RoKX1lbHNle3ZhciBjPXItZS5sZW5ndGgsdT10Lmxlbmd0aC1jO24uc2V0KHQuc3ViYXJyYXkodSkpLG4uc2V0KGUsYyksaS5zZXQodC5zdWJhcnJheSgwLHUpKX1lbHNlIG49dC5jb25jYXQoZSksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKDAsbi5sZW5ndGgtcik6W107cmV0dXJuW24saV19dmFyIGw9TyhlPW8uZ2V0R3JhcGhEaXYoZSksbixpLGEscyksdT1yLnJlZHJhdyhlKSxmPVtlLGwudXBkYXRlLGksbC5tYXhQb2ludHNdO3JldHVybiBjLmFkZChlLHIucHJlcGVuZFRyYWNlcyxmLHQsYXJndW1lbnRzKSx1fSxyLm1vdmVUcmFjZXM9ZnVuY3Rpb24gdChlLG4saSl7dmFyIGEscz1bXSxsPVtdLHU9dCxmPXQsaD1bZT1vLmdldEdyYXBoRGl2KGUpLGksbl0scD1bZSxuLGldO2lmKEkoZSxuLGkpLG49QXJyYXkuaXNBcnJheShuKT9uOltuXSx2b2lkIDA9PT1pKWZvcihpPVtdLGE9MDthPG4ubGVuZ3RoO2ErKylpLnB1c2goLW4ubGVuZ3RoK2EpO2ZvcihpPUFycmF5LmlzQXJyYXkoaSk/aTpbaV0sbj1DKG4sZS5kYXRhLmxlbmd0aC0xKSxpPUMoaSxlLmRhdGEubGVuZ3RoLTEpLGE9MDthPGUuZGF0YS5sZW5ndGg7YSsrKS0xPT09bi5pbmRleE9mKGEpJiZzLnB1c2goZS5kYXRhW2FdKTtmb3IoYT0wO2E8bi5sZW5ndGg7YSsrKWwucHVzaCh7bmV3SW5kZXg6aVthXSx0cmFjZTplLmRhdGFbblthXV19KTtmb3IobC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Lm5ld0luZGV4LWUubmV3SW5kZXh9KSksYT0wO2E8bC5sZW5ndGg7YSs9MSlzLnNwbGljZShsW2FdLm5ld0luZGV4LDAsbFthXS50cmFjZSk7ZS5kYXRhPXM7dmFyIGQ9ci5yZWRyYXcoZSk7cmV0dXJuIGMuYWRkKGUsdSxoLGYscCksZH0sci5wcmVwZW5kVHJhY2VzPWZ1bmN0aW9uIHQoZSxuLGksYSl7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG4saTtpZihvLmlzVHlwZWRBcnJheSh0KSlpZihyPD0wKXt2YXIgYT1uZXcgdC5jb25zdHJ1Y3RvcigwKSxzPXooZSx0KTtyPDA/KG49cyxpPWEpOihuPWEsaT1zKX1lbHNlIGlmKG49bmV3IHQuY29uc3RydWN0b3IociksaT1uZXcgdC5jb25zdHJ1Y3Rvcih0Lmxlbmd0aCtlLmxlbmd0aC1yKSxyPT09ZS5sZW5ndGgpbi5zZXQoZSksaS5zZXQodCk7ZWxzZSBpZihyPGUubGVuZ3RoKXt2YXIgbD1lLmxlbmd0aC1yO24uc2V0KGUuc3ViYXJyYXkoMCxsKSksaS5zZXQoZS5zdWJhcnJheShsKSksaS5zZXQodCxsKX1lbHNle3ZhciBjPXItZS5sZW5ndGg7bi5zZXQoZSksbi5zZXQodC5zdWJhcnJheSgwLGMpLGUubGVuZ3RoKSxpLnNldCh0LnN1YmFycmF5KGMpKX1lbHNlIG49ZS5jb25jYXQodCksaT1yPj0wJiZyPG4ubGVuZ3RoP24uc3BsaWNlKHIsbi5sZW5ndGgpOltdO3JldHVybltuLGldfXZhciBsPU8oZT1vLmdldEdyYXBoRGl2KGUpLG4saSxhLHMpLHU9ci5yZWRyYXcoZSksZj1bZSxsLnVwZGF0ZSxpLGwubWF4UG9pbnRzXTtyZXR1cm4gYy5hZGQoZSxyLmV4dGVuZFRyYWNlcyxmLHQsYXJndW1lbnRzKSx1fSxyLm5ld1Bsb3Q9ZnVuY3Rpb24odCxlLG4saSl7cmV0dXJuIHQ9by5nZXRHcmFwaERpdih0KSxoLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YXx8W10sdC5fZnVsbExheW91dHx8e30pLGgucHVyZ2UodCksci5fZG9QbG90KHQsZSxuLGkpfSxyLl9kb1Bsb3Q9ZnVuY3Rpb24odCxlLGksYSl7dmFyIHM7aWYodD1vLmdldEdyYXBoRGl2KHQpLGwuaW5pdCh0KSxvLmlzUGxhaW5PYmplY3QoZSkpe3ZhciBjPWU7ZT1jLmRhdGEsaT1jLmxheW91dCxhPWMuY29uZmlnLHM9Yy5mcmFtZXN9aWYoITE9PT1sLnRyaWdnZXJIYW5kbGVyKHQsInBsb3RseV9iZWZvcmVwbG90IixbZSxpLGFdKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtlfHxpfHxvLmlzUGxvdERpdih0KXx8by53YXJuKCJDYWxsaW5nIF9kb1Bsb3QgYXMgaWYgcmVkcmF3aW5nIGJ1dCB0aGlzIGNvbnRhaW5lciBkb2Vzbid0IHlldCBoYXZlIGEgcGxvdC4iLHQpLEwodCxhKSxpfHwoaT17fSksbi5zZWxlY3QodCkuY2xhc3NlZCgianMtcGxvdGx5LXBsb3QiLCEwKSxkLm1ha2VUZXN0ZXIoKSxBcnJheS5pc0FycmF5KHQuX3Byb21pc2VzKXx8KHQuX3Byb21pc2VzPVtdKTt2YXIgZj0wPT09KHQuZGF0YXx8W10pLmxlbmd0aCYmQXJyYXkuaXNBcnJheShlKTtBcnJheS5pc0FycmF5KGUpJiYoXy5jbGVhbkRhdGEoZSksZj90LmRhdGE9ZTp0LmRhdGEucHVzaC5hcHBseSh0LmRhdGEsZSksdC5lbXB0eT0hMSksdC5sYXlvdXQmJiFmfHwodC5sYXlvdXQ9Xy5jbGVhbkxheW91dChpKSksaC5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbT10Ll9mdWxsTGF5b3V0LHk9bS5faGFzKCJjYXJ0ZXNpYW4iKTttLl9yZXBsb3R0aW5nPSEwLChmfHxtLl9zaG91bGRDcmVhdGVCZ0xheWVyKSYmKCFmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0KSxyPXQuX2Z1bGxMYXlvdXQ7aWYoci5fY2FsY0ludmVyc2VUcmFuc2Zvcm09YXQsci5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCksci5fY29udGFpbmVyPWUuc2VsZWN0QWxsKCIucGxvdC1jb250YWluZXIiKS5kYXRhKFswXSksci5fY29udGFpbmVyLmVudGVyKCkuaW5zZXJ0KCJkaXYiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKCJwbG90LWNvbnRhaW5lciIsITApLmNsYXNzZWQoInBsb3RseSIsITApLHIuX3BhcGVyZGl2PXIuX2NvbnRhaW5lci5zZWxlY3RBbGwoIi5zdmctY29udGFpbmVyIikuZGF0YShbMF0pLHIuX3BhcGVyZGl2LmVudGVyKCkuYXBwZW5kKCJkaXYiKS5jbGFzc2VkKCJ1c2VyLXNlbGVjdC1ub25lIiwhMCkuY2xhc3NlZCgic3ZnLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsInJlbGF0aXZlIiksci5fZ2xjb250YWluZXI9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIuZ2wtY29udGFpbmVyIikuZGF0YShbe31dKSxyLl9nbGNvbnRhaW5lci5lbnRlcigpLmFwcGVuZCgiZGl2IikuY2xhc3NlZCgiZ2wtY29udGFpbmVyIiwhMCksci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5yZW1vdmUoKSxyLl9wYXBlcmRpdi5zZWxlY3QoIi5tb2RlYmFyLWNvbnRhaW5lciIpLnJlbW92ZSgpLHIuX3BhcGVyPXIuX3BhcGVyZGl2Lmluc2VydCgic3ZnIiwiOmZpcnN0LWNoaWxkIikuY2xhc3NlZCgibWFpbi1zdmciLCEwKSxyLl90b3BwYXBlcj1yLl9wYXBlcmRpdi5hcHBlbmQoInN2ZyIpLmNsYXNzZWQoIm1haW4tc3ZnIiwhMCksci5fbW9kZWJhcmRpdj1yLl9wYXBlcmRpdi5hcHBlbmQoImRpdiIpLGRlbGV0ZSByLl9tb2RlQmFyLHIuX2hvdmVycGFwZXI9ci5fcGFwZXJkaXYuYXBwZW5kKCJzdmciKS5jbGFzc2VkKCJtYWluLXN2ZyIsITApLCFyLl91aWQpe3ZhciBpPXt9O24uc2VsZWN0QWxsKCJkZWZzIikuZWFjaCgoZnVuY3Rpb24oKXt0aGlzLmlkJiYoaVt0aGlzLmlkLnNwbGl0KCItIilbMV1dPTEpfSkpLHIuX3VpZD1vLnJhbmRzdHIoaSl9ci5fcGFwZXJkaXYuc2VsZWN0QWxsKCIubWFpbi1zdmciKS5hdHRyKHYuc3ZnQXR0cnMpLHIuX2RlZnM9ci5fcGFwZXIuYXBwZW5kKCJkZWZzIikuYXR0cigiaWQiLCJkZWZzLSIrci5fdWlkKSxyLl9jbGlwcz1yLl9kZWZzLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNsaXBzIiwhMCksci5fdG9wZGVmcz1yLl90b3BwYXBlci5hcHBlbmQoImRlZnMiKS5hdHRyKCJpZCIsInRvcGRlZnMtIityLl91aWQpLHIuX3RvcGNsaXBzPXIuX3RvcGRlZnMuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2xpcHMiLCEwKSxyLl9iZ0xheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnbGF5ZXIiLCEwKSxyLl9kcmFnZ2Vycz1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJkcmFnbGF5ZXIiLCEwKTt2YXIgYT1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJsYXllci1iZWxvdyIsITApO3IuX2ltYWdlTG93ZXJMYXllcj1hLmFwcGVuZCgiZyIpLmNsYXNzZWQoImltYWdlbGF5ZXIiLCEwKSxyLl9zaGFwZUxvd2VyTGF5ZXI9YS5hcHBlbmQoImciKS5jbGFzc2VkKCJzaGFwZWxheWVyIiwhMCksci5fY2FydGVzaWFubGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiY2FydGVzaWFubGF5ZXIiLCEwKSxyLl9wb2xhcmxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInBvbGFybGF5ZXIiLCEwKSxyLl90ZXJuYXJ5bGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgidGVybmFyeWxheWVyIiwhMCksci5fZ2VvbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2VvbGF5ZXIiLCEwKSxyLl9mdW5uZWxhcmVhbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZnVubmVsYXJlYWxheWVyIiwhMCksci5fcGllbGF5ZXI9ci5fcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgicGllbGF5ZXIiLCEwKSxyLl9pY2ljbGVsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpY2ljbGVsYXllciIsITApLHIuX3RyZWVtYXBsYXllcj1yLl9wYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmVlbWFwbGF5ZXIiLCEwKSxyLl9zdW5idXJzdGxheWVyPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInN1bmJ1cnN0bGF5ZXIiLCEwKSxyLl9pbmRpY2F0b3JsYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmRpY2F0b3JsYXllciIsITApLHIuX2dsaW1hZ2VzPXIuX3BhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoImdsaW1hZ2VzIiwhMCk7dmFyIHM9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibGF5ZXItYWJvdmUiLCEwKTtyLl9pbWFnZVVwcGVyTGF5ZXI9cy5hcHBlbmQoImciKS5jbGFzc2VkKCJpbWFnZWxheWVyIiwhMCksci5fc2hhcGVVcHBlckxheWVyPXMuYXBwZW5kKCJnIikuY2xhc3NlZCgic2hhcGVsYXllciIsITApLHIuX2luZm9sYXllcj1yLl90b3BwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJpbmZvbGF5ZXIiLCEwKSxyLl9tZW51bGF5ZXI9ci5fdG9wcGFwZXIuYXBwZW5kKCJnIikuY2xhc3NlZCgibWVudWxheWVyIiwhMCksci5fem9vbWxheWVyPXIuX3RvcHBhcGVyLmFwcGVuZCgiZyIpLmNsYXNzZWQoInpvb21sYXllciIsITApLHIuX2hvdmVybGF5ZXI9ci5faG92ZXJwYXBlci5hcHBlbmQoImciKS5jbGFzc2VkKCJob3ZlcmxheWVyIiwhMCksci5fbW9kZWJhcmRpdi5jbGFzc2VkKCJtb2RlYmFyLWNvbnRhaW5lciIsITApLnN0eWxlKCJwb3NpdGlvbiIsImFic29sdXRlIikuc3R5bGUoInRvcCIsIjBweCIpLnN0eWxlKCJyaWdodCIsIjBweCIpLHQuZW1pdCgicGxvdGx5X2ZyYW1ld29yayIpfSh0KSxtLl9zaG91bGRDcmVhdGVCZ0xheWVyJiZkZWxldGUgbS5fc2hvdWxkQ3JlYXRlQmdMYXllciksZC5pbml0R3JhZGllbnRzKHQpLGQuaW5pdFBhdHRlcm5zKHQpLGYmJnAuc2F2ZVNob3dTcGlrZUluaXRpYWwodCk7dmFyIHg9IXQuY2FsY2RhdGF8fHQuY2FsY2RhdGEubGVuZ3RoIT09KHQuX2Z1bGxEYXRhfHxbXSkubGVuZ3RoO3gmJmguZG9DYWxjZGF0YSh0KTtmb3IodmFyIGI9MDtiPHQuY2FsY2RhdGEubGVuZ3RoO2IrKyl0LmNhbGNkYXRhW2JdWzBdLnRyYWNlPXQuX2Z1bGxEYXRhW2JdO3QuX2NvbnRleHQucmVzcG9uc2l2ZT90Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyfHwodC5fcmVzcG9uc2l2ZUNoYXJ0SGFuZGxlcj1mdW5jdGlvbigpe28uaXNIaWRkZW4odCl8fGgucmVzaXplKHQpfSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0Ll9yZXNwb25zaXZlQ2hhcnRIYW5kbGVyKSk6by5jbGVhclJlc3BvbnNpdmUodCk7dmFyIFQ9by5leHRlbmRGbGF0KHt9LG0uX3NpemUpLGs9MDtmdW5jdGlvbiBBKCl7aWYoaC5jbGVhckF1dG9NYXJnaW5JZHModCksdy5kcmF3TWFyZ2luUHVzaGVycyh0KSxwLmFsbG93QXV0b01hcmdpbih0KSxtLl9oYXMoInBpZSIpKWZvcih2YXIgZT10Ll9mdWxsRGF0YSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07InBpZSI9PT1uLnR5cGUmJm4uYXV0b21hcmdpbiYmaC5hbGxvd0F1dG9NYXJnaW4odCwicGllLiIrbi51aWQrIi5hdXRvbWFyZ2luIil9cmV0dXJuIGguZG9BdXRvTWFyZ2luKHQpLGgucHJldmlvdXNQcm9taXNlcyh0KX1mdW5jdGlvbiBTKCl7dC5fdHJhbnNpdGlvbmluZ3x8KHcuZG9BdXRvUmFuZ2VBbmRDb25zdHJhaW50cyh0KSxmJiZwLnNhdmVSYW5nZUluaXRpYWwodCksdS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiY2FsY0F1dG9yYW5nZSIpKHQpKX12YXIgRT1baC5wcmV2aW91c1Byb21pc2VzLGZ1bmN0aW9uKCl7aWYocylyZXR1cm4gci5hZGRGcmFtZXModCxzKX0sZnVuY3Rpb24gZSgpe2Zvcih2YXIgcj1tLl9iYXNlUGxvdE1vZHVsZXMsbj0wO248ci5sZW5ndGg7bisrKXJbbl0uZHJhd0ZyYW1ld29yayYmcltuXS5kcmF3RnJhbWV3b3JrKHQpOyFtLl9nbGNhbnZhcyYmbS5faGFzKCJnbCIpJiYobS5fZ2xjYW52YXM9bS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikuZGF0YShbe2tleToiY29udGV4dExheWVyIixjb250ZXh0OiEwLHBpY2s6ITF9LHtrZXk6ImZvY3VzTGF5ZXIiLGNvbnRleHQ6ITEscGljazohMX0se2tleToicGlja0xheWVyIixjb250ZXh0OiExLHBpY2s6ITB9XSwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5fSkpLG0uX2dsY2FudmFzLmVudGVyKCkuYXBwZW5kKCJjYW52YXMiKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJnbC1jYW52YXMgZ2wtY2FudmFzLSIrdC5rZXkucmVwbGFjZSgiTGF5ZXIiLCIiKX0pKS5zdHlsZSh7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsb3ZlcmZsb3c6InZpc2libGUiLCJwb2ludGVyLWV2ZW50cyI6Im5vbmUifSkpO3ZhciBpPXQuX2NvbnRleHQucGxvdEdsUGl4ZWxSYXRpbztpZihtLl9nbGNhbnZhcyl7bS5fZ2xjYW52YXMuYXR0cigid2lkdGgiLG0ud2lkdGgqaSkuYXR0cigiaGVpZ2h0IixtLmhlaWdodCppKS5zdHlsZSgid2lkdGgiLG0ud2lkdGgrInB4Iikuc3R5bGUoImhlaWdodCIsbS5oZWlnaHQrInB4Iik7dmFyIGE9bS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoYSYmKE1hdGguZmxvb3IobS53aWR0aCppKSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJXaWR0aHx8TWF0aC5mbG9vcihtLmhlaWdodCppKSE9PWEuX2dsLmRyYXdpbmdCdWZmZXJIZWlnaHQpKXt2YXIgcz0iV2ViR0wgY29udGV4dCBidWZmZXIgYW5kIGNhbnZhcyBkaW1lbnNpb25zIGRvIG5vdCBtYXRjaCBkdWUgdG8gYnJvd3Nlci9XZWJHTCBidWcuIjtpZighaylyZXR1cm4gby5sb2cocysiIENsZWFyaW5nIGdyYXBoIGFuZCBwbG90dGluZyBhZ2Fpbi4iKSxoLmNsZWFuUGxvdChbXSx7fSx0Ll9mdWxsRGF0YSxtKSxoLnN1cHBseURlZmF1bHRzKHQpLG09dC5fZnVsbExheW91dCxoLmRvQ2FsY2RhdGEodCksaysrLGUoKTtvLmVycm9yKHMpfX1yZXR1cm4iaCI9PT1tLm1vZGViYXIub3JpZW50YXRpb24/bS5fbW9kZWJhcmRpdi5zdHlsZSgiaGVpZ2h0IixudWxsKS5zdHlsZSgid2lkdGgiLCIxMDAlIik6bS5fbW9kZWJhcmRpdi5zdHlsZSgid2lkdGgiLG51bGwpLnN0eWxlKCJoZWlnaHQiLG0uaGVpZ2h0KyJweCIpLGgucHJldmlvdXNQcm9taXNlcyh0KX0sQSxmdW5jdGlvbigpe2lmKGguZGlkTWFyZ2luQ2hhbmdlKFQsbS5fc2l6ZSkpcmV0dXJuIG8uc3luY09yQXN5bmMoW0Esdy5sYXlvdXRTdHlsZXNdLHQpfV07eSYmRS5wdXNoKChmdW5jdGlvbigpe2lmKHgpcmV0dXJuIG8uc3luY09yQXN5bmMoW3UuZ2V0Q29tcG9uZW50TWV0aG9kKCJzaGFwZXMiLCJjYWxjQXV0b3JhbmdlIiksdS5nZXRDb21wb25lbnRNZXRob2QoImFubm90YXRpb25zIiwiY2FsY0F1dG9yYW5nZSIpLFNdLHQpO1MoKX0pKSxFLnB1c2gody5sYXlvdXRTdHlsZXMpLHkmJkUucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gcC5kcmF3KHQsZj8iIjoicmVkcmF3Iil9KSwoZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmVSh0LHQuX2Z1bGxMYXlvdXQuX2luc2lkZVRpY2tMYWJlbHNBdXRvcmFuZ2UpLnRoZW4oKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT12b2lkIDB9KSl9KSksRS5wdXNoKHcuZHJhd0RhdGEsdy5maW5hbERyYXcsZyxoLmFkZExpbmtzLGgucmVob3ZlcixoLnJlZHJhZyxoLmRvQXV0b01hcmdpbiwoZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZSYmZiYmcC5zYXZlUmFuZ2VJbml0aWFsKHQsITApfSksaC5wcmV2aW91c1Byb21pc2VzKTt2YXIgQz1vLnN5bmNPckFzeW5jKEUsdCk7cmV0dXJuIEMmJkMudGhlbnx8KEM9UHJvbWlzZS5yZXNvbHZlKCkpLEMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gTSh0KSx0fSkpfSxyLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPSh0PW8uZ2V0R3JhcGhEaXYodCkpLl9mdWxsTGF5b3V0fHx7fSxyPXQuX2Z1bGxEYXRhfHxbXTtyZXR1cm4gaC5jbGVhblBsb3QoW10se30scixlKSxoLnB1cmdlKHQpLGwucHVyZ2UodCksZS5fY29udGFpbmVyJiZlLl9jb250YWluZXIucmVtb3ZlKCksZGVsZXRlIHQuX2NvbnRleHQsdH0sci5yZWFjdD1mdW5jdGlvbih0LGUsbixpKXt2YXIgYSxsO3Q9by5nZXRHcmFwaERpdih0KSxfLmNsZWFyUHJvbWlzZVF1ZXVlKHQpO3ZhciBjPXQuX2Z1bGxEYXRhLHA9dC5fZnVsbExheW91dDtpZihvLmlzUGxvdERpdih0KSYmYyYmcCl7aWYoby5pc1BsYWluT2JqZWN0KGUpKXt2YXIgZD1lO2U9ZC5kYXRhLG49ZC5sYXlvdXQsaT1kLmNvbmZpZyxhPWQuZnJhbWVzfXZhciBtPSExO2lmKGkpe3ZhciBnPW8uZXh0ZW5kRGVlcCh7fSx0Ll9jb250ZXh0KTt0Ll9jb250ZXh0PXZvaWQgMCxMKHQsaSksbT1mdW5jdGlvbiB0KGUscil7dmFyIG47Zm9yKG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGk9ZVtuXSxhPXJbbl07aWYoaSE9PWEpaWYoby5pc1BsYWluT2JqZWN0KGkpJiZvLmlzUGxhaW5PYmplY3QoYSkpe2lmKHQoaSxhKSlyZXR1cm4hMH1lbHNle2lmKCFBcnJheS5pc0FycmF5KGkpfHwhQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMDtpZihpLmxlbmd0aCE9PWEubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKWlmKGlbc10hPT1hW3NdKXtpZighby5pc1BsYWluT2JqZWN0KGlbc10pfHwhby5pc1BsYWluT2JqZWN0KGFbc10pKXJldHVybiEwO2lmKHQoaVtzXSxhW3NdKSlyZXR1cm4hMH19fX0oZyx0Ll9jb250ZXh0KX10LmRhdGE9ZXx8W10sXy5jbGVhbkRhdGEodC5kYXRhKSx0LmxheW91dD1ufHx7fSxfLmNsZWFuTGF5b3V0KHQubGF5b3V0KSxmdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLGwsYyx1LGYsaCxwLGQ9bi5fcHJlR1VJLG09W10sZz17fTtmb3IoaSBpbiBkKXtpZih1PSQoaSxLKSl7aWYoYT11LmF0dHJ8fHUuaGVhZCsiLnVpcmV2aXNpb24iLChjPShsPXMobixhKS5nZXQoKSkmJnR0KGEsZSkpJiZjPT09bCYmKG51bGw9PT0oZj1kW2ldKSYmKGY9dm9pZCAwKSxudChwPShoPXMoZSxpKSkuZ2V0KCksZikpKXt2b2lkIDA9PT1wJiYiYXV0b3JhbmdlIj09PWkuc3Vic3RyKGkubGVuZ3RoLTkpJiZtLnB1c2goaS5zdWJzdHIoMCxpLmxlbmd0aC0xMCkpLGguc2V0KFIocyhuLGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSk7ZGVsZXRlIGRbaV0sInJhbmdlWyI9PT1pLnN1YnN0cihpLmxlbmd0aC04LDYpJiYoZ1tpLnN1YnN0cigwLGkubGVuZ3RoLTkpXT0xKX1mb3IodmFyIHY9MDt2PG0ubGVuZ3RoO3YrKyl7dmFyIHk9bVt2XTtpZihnW3ldKXt2YXIgeD1zKGUseSkuZ2V0KCk7eCYmZGVsZXRlIHguYXV0b3JhbmdlfX12YXIgYj1uLl90cmFjZVByZUdVSTtmb3IodmFyIF8gaW4gYil7dmFyIHcsVD1iW19dLGs9bnVsbDtmb3IoaSBpbiBUKXtpZighayl7dmFyIEE9ZXQoXyxyKTtpZihBPDApe2RlbGV0ZSBiW19dO2JyZWFrfXZhciBNPXJ0KF8sdCwodz1yW0FdLl9mdWxsSW5wdXQpLmluZGV4KTtpZihNPDApe2RlbGV0ZSBiW19dO2JyZWFrfWs9dFtNXX1pZih1PSQoaSxRKSl7aWYodS5hdHRyP2M9KGw9cyhuLHUuYXR0cikuZ2V0KCkpJiZ0dCh1LmF0dHIsZSk6KGw9dy51aXJldmlzaW9uLHZvaWQgMD09PShjPWsudWlyZXZpc2lvbikmJihjPWUudWlyZXZpc2lvbikpLGMmJmM9PT1sJiYobnVsbD09PShmPVRbaV0pJiYoZj12b2lkIDApLG50KHA9KGg9cyhrLGkpKS5nZXQoKSxmKSkpe2guc2V0KFIocyh3LGkpLmdldCgpKSk7Y29udGludWV9fWVsc2Ugby53YXJuKCJ1bnJlY29nbml6ZWQgR1VJIGVkaXQ6ICIraSsiIGluIHRyYWNlIHVpZCAiK18pO2RlbGV0ZSBUW2ldfX19KHQuZGF0YSx0LmxheW91dCxjLHApLGguc3VwcGx5RGVmYXVsdHModCx7c2tpcFVwZGF0ZUNhbGM6ITB9KTt2YXIgdj10Ll9mdWxsRGF0YSx5PXQuX2Z1bGxMYXlvdXQseD12b2lkIDA9PT15LmRhdGFyZXZpc2lvbixiPXkudHJhbnNpdGlvbixrPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9VC5sYXlvdXRGbGFncygpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGYuZ2V0TGF5b3V0VmFsT2JqZWN0KHIsdCl9YS5hcnJheXM9e30sYS5yYW5nZXNBbHRlcmVkPXt9LGEubkNoYW5nZXM9MCxhLm5DaGFuZ2VzQW5pbT0wLGl0KGUscixbXSx7Z2V0VmFsT2JqZWN0Om8sZmxhZ3M6YSxpbW11dGFibGU6bix0cmFuc2l0aW9uOmksZ2Q6dH0pLChhLnBsb3R8fGEuY2FsYykmJihhLmxheW91dFJlcGxvdD0hMCk7aSYmYS5uQ2hhbmdlcyYmYS5uQ2hhbmdlc0FuaW0mJihhLmFuaW09YS5uQ2hhbmdlcz09PWEubkNoYW5nZXNBbmltPyJhbGwiOiJzb21lIik7cmV0dXJuIGF9KHQscCx5LHgsYiksQT1rLm5ld0RhdGFSZXZpc2lvbixTPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbz1lLmxlbmd0aD09PXIubGVuZ3RoO2lmKCFpJiYhbylyZXR1cm57ZnVsbFJlcGxvdDohMCxjYWxjOiEwfTt2YXIgcyxsLGM9VC50cmFjZUZsYWdzKCk7Yy5hcnJheXM9e30sYy5uQ2hhbmdlcz0wLGMubkNoYW5nZXNBbmltPTA7dmFyIHU9e2dldFZhbE9iamVjdDpmdW5jdGlvbih0KXt2YXIgZT1mLmdldFRyYWNlVmFsT2JqZWN0KGwsdCk7cmV0dXJuIWwuX21vZHVsZS5hbmltYXRhYmxlJiZlLmFuaW0mJihlLmFuaW09ITEpLGV9LGZsYWdzOmMsaW1tdXRhYmxlOm4sdHJhbnNpdGlvbjppLG5ld0RhdGFSZXZpc2lvbjphLGdkOnR9LHA9e307Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKylpZihyW3NdKXtpZihsPXJbc10uX2Z1bGxJbnB1dCxoLmhhc01ha2VzRGF0YVRyYW5zZm9ybShsKSYmKGw9cltzXSkscFtsLnVpZF0pY29udGludWU7cFtsLnVpZF09MSxpdChlW3NdLl9mdWxsSW5wdXQsbCxbXSx1KX0oYy5jYWxjfHxjLnBsb3QpJiYoYy5mdWxsUmVwbG90PSEwKTtpJiZjLm5DaGFuZ2VzJiZjLm5DaGFuZ2VzQW5pbSYmKGMuYW5pbT1jLm5DaGFuZ2VzPT09Yy5uQ2hhbmdlc0FuaW0mJm8/ImFsbCI6InNvbWUiKTtyZXR1cm4gY30odCxjLHYseCxiLEEpO2lmKFgodCkmJihrLmxheW91dFJlcGxvdD0hMCksUy5jYWxjfHxrLmNhbGMpe3QuY2FsY2RhdGE9dm9pZCAwO2Zvcih2YXIgRT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh5KSxDPTA7QzxFLmxlbmd0aDtDKyspe3ZhciBQPUVbQ10sST1QLnN1YnN0cmluZygwLDUpO2lmKCJ4YXhpcyI9PT1JfHwieWF4aXMiPT09SSl7dmFyIE89eVtQXS5fZW1wdHlDYXRlZ29yaWVzO08mJk8oKX19fWVsc2UgaC5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGModC5jYWxjZGF0YSx2KTt2YXIgej1bXTtpZihhJiYodC5fdHJhbnNpdGlvbkRhdGE9e30saC5jcmVhdGVUcmFuc2l0aW9uRGF0YSh0KSx6LnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHIuYWRkRnJhbWVzKHQsYSl9KSkpLHkudHJhbnNpdGlvbiYmIW0mJihTLmFuaW18fGsuYW5pbSkpay50aWNrcyYmei5wdXNoKHcuZG9UaWNrc1JlbGF5b3V0KSxoLmRvQ2FsY2RhdGEodCksdy5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzKHQpLHoucHVzaCgoZnVuY3Rpb24oKXtyZXR1cm4gaC50cmFuc2l0aW9uRnJvbVJlYWN0KHQsUyxrLHApfSkpO2Vsc2UgaWYoUy5mdWxsUmVwbG90fHxrLmxheW91dFJlcGxvdHx8bSl0Ll9mdWxsTGF5b3V0Ll9za2lwRGVmYXVsdHM9ITAsei5wdXNoKHIuX2RvUGxvdCk7ZWxzZXtmb3IodmFyIEQgaW4gay5hcnJheXMpe3ZhciBGPWsuYXJyYXlzW0RdO2lmKEYubGVuZ3RoKXt2YXIgQj11LmdldENvbXBvbmVudE1ldGhvZChELCJkcmF3T25lIik7aWYoQiE9PW8ubm9vcClmb3IodmFyIE49MDtOPEYubGVuZ3RoO04rKylCKHQsRltOXSk7ZWxzZXt2YXIgaj11LmdldENvbXBvbmVudE1ldGhvZChELCJkcmF3Iik7aWYoaj09PW8ubm9vcCl0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBkcmF3IGNvbXBvbmVudHM6ICIrRCk7aih0KX19fXoucHVzaChoLnByZXZpb3VzUHJvbWlzZXMpLFMuc3R5bGUmJnoucHVzaCh3LmRvVHJhY2VTdHlsZSksKFMuY29sb3JiYXJzfHxrLmNvbG9yYmFycykmJnoucHVzaCh3LmRvQ29sb3JCYXJzKSxrLmxlZ2VuZCYmei5wdXNoKHcuZG9MZWdlbmQpLGsubGF5b3V0c3R5bGUmJnoucHVzaCh3LmxheW91dFN0eWxlcyksay5heHJhbmdlJiZIKHopLGsudGlja3MmJnoucHVzaCh3LmRvVGlja3NSZWxheW91dCksay5tb2RlYmFyJiZ6LnB1c2gody5kb01vZGVCYXIpLGsuY2FtZXJhJiZ6LnB1c2gody5kb0NhbWVyYSksei5wdXNoKE0pfXoucHVzaChoLnJlaG92ZXIsaC5yZWRyYWcpLChsPW8uc3luY09yQXN5bmMoeix0KSkmJmwudGhlbnx8KGw9UHJvbWlzZS5yZXNvbHZlKHQpKX1lbHNlIGw9ci5uZXdQbG90KHQsZSxuLGkpO3JldHVybiBsLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3JlYWN0Iix7ZGF0YTplLGxheW91dDpufSksdH0pKX0sci5yZWRyYXc9ZnVuY3Rpb24odCl7aWYodD1vLmdldEdyYXBoRGl2KHQpLCFvLmlzUGxvdERpdih0KSl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgZWxlbWVudCBpcyBub3QgYSBQbG90bHkgcGxvdDogIit0KTtyZXR1cm4gXy5jbGVhbkRhdGEodC5kYXRhKSxfLmNsZWFuTGF5b3V0KHQubGF5b3V0KSx0LmNhbGNkYXRhPXZvaWQgMCxyLl9kb1Bsb3QodCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdC5lbWl0KCJwbG90bHlfcmVkcmF3IiksdH0pKX0sci5yZWxheW91dD1VLHIucmVzdHlsZT1ELHIuc2V0UGxvdENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gby5leHRlbmRGbGF0KHgsdCl9LHIudXBkYXRlPVosci5fZ3VpUmVsYXlvdXQ9SihVKSxyLl9ndWlSZXN0eWxlPUooRCksci5fZ3VpVXBkYXRlPUooWiksci5fc3RvcmVEaXJlY3RHVUlFZGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil7QihuLHModCxuKS5nZXQoKSxyW25dLGUpfX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1MywiLi4vbGliIjo3NzYsIi4uL2xpYi9ldmVudHMiOjc2NSwiLi4vbGliL3F1ZXVlIjo3OTIsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiLi4vcGxvdHMvY2FydGVzaWFuL2dyYXBoX2ludGVyYWN0Ijo4MzcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi4vcmVnaXN0cnkiOjkwNCwiLi9lZGl0X3R5cGVzIjo4MDksIi4vaGVscGVycyI6ODEwLCIuL21hbmFnZV9hcnJheXMiOjgxMiwiLi9wbG90X2NvbmZpZyI6ODE0LCIuL3Bsb3Rfc2NoZW1hIjo4MTUsIi4vc3Vicm91dGluZXMiOjgxNywiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDIsImhhcy1ob3ZlciI6NDI1fV0sODE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXtzdGF0aWNQbG90Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxwbG90bHlTZXJ2ZXJVUkw6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIn0sZWRpdGFibGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGVkaXRzOnthbm5vdGF0aW9uUG9zaXRpb246e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGFubm90YXRpb25UYWlsOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxhbm5vdGF0aW9uVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYXhpc1RpdGxlVGV4dDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJQb3NpdGlvbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sY29sb3JiYXJUaXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxlZ2VuZFBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsZWdlbmRUZXh0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzaGFwZVBvc2l0aW9uOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx0aXRsZVRleHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fSxhdXRvc2l6YWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scmVzcG9uc2l2ZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sZmlsbEZyYW1lOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxmcmFtZU1hcmdpbnM6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLG1heDouNX0sc2Nyb2xsWm9vbTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiY2FydGVzaWFuIiwiZ2wzZCIsImdlbyIsIm1hcGJveCJdLGV4dHJhczpbITAsITFdLGRmbHQ6ImdsM2QrZ2VvK21hcGJveCJ9LGRvdWJsZUNsaWNrOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJyZXNldCIsImF1dG9zaXplIiwicmVzZXQrYXV0b3NpemUiXSxkZmx0OiJyZXNldCthdXRvc2l6ZSJ9LGRvdWJsZUNsaWNrRGVsYXk6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozMDAsbWluOjB9LHNob3dBeGlzRHJhZ0hhbmRsZXM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHNob3dBeGlzUmFuZ2VFbnRyeUJveGVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93VGlwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc2hvd0xpbms6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxpbmtUZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IkVkaXQgY2hhcnQiLG5vQmxhbms6ITB9LHNlbmREYXRhOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93U291cmNlczp7dmFsVHlwZToiYW55IixkZmx0OiExfSxkaXNwbGF5TW9kZUJhcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaG92ZXIiLCEwLCExXSxkZmx0OiJob3ZlciJ9LHNob3dTZW5kVG9DbG91ZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sc2hvd0VkaXRJbkNoYXJ0U3R1ZGlvOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxtb2RlQmFyQnV0dG9uc1RvUmVtb3ZlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LG1vZGVCYXJCdXR0b25zVG9BZGQ6e3ZhbFR5cGU6ImFueSIsZGZsdDpbXX0sbW9kZUJhckJ1dHRvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDohMX0sdG9JbWFnZUJ1dHRvbk9wdGlvbnM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX0sZGlzcGxheWxvZ286e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LHdhdGVybWFyazp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scGxvdEdsUGl4ZWxSYXRpbzp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIsbWluOjEsbWF4OjR9LHNldEJhY2tncm91bmQ6e3ZhbFR5cGU6ImFueSIsZGZsdDoidHJhbnNwYXJlbnQifSx0b3BvanNvblVSTDp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLGRmbHQ6Imh0dHBzOi8vY2RuLnBsb3QubHkvIn0sbWFwYm94QWNjZXNzVG9rZW46e3ZhbFR5cGU6InN0cmluZyIsZGZsdDpudWxsfSxsb2dnaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxtYXg6MixkZmx0OjF9LG5vdGlmeU9uTG9nZ2luZzp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsbWF4OjIsZGZsdDowfSxxdWV1ZUxlbmd0aDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowfSxnbG9iYWxUcmFuc2Zvcm1zOnt2YWxUeXBlOiJhbnkiLGRmbHQ6W119LGxvY2FsZTp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJlbi1VUyJ9LGxvY2FsZXM6e3ZhbFR5cGU6ImFueSIsZGZsdDp7fX19LGk9e307IWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSl7dmFyIGk9ZVtuXTtpLnZhbFR5cGU/cltuXT1pLmRmbHQ6KHJbbl18fChyW25dPXt9KSx0KGkscltuXSkpfX0obixpKSxlLmV4cG9ydHM9e2NvbmZpZ0F0dHJpYnV0ZXM6bixkZmx0Q29uZmlnOml9fSx7fV0sODE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3JlZ2lzdHJ5IiksaT10KCIuLi9saWIiKSxhPXQoIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIikscz10KCIuLi9wbG90cy9mcmFtZV9hdHRyaWJ1dGVzIiksbD10KCIuLi9wbG90cy9hbmltYXRpb25fYXR0cmlidXRlcyIpLGM9dCgiLi9wbG90X2NvbmZpZyIpLmNvbmZpZ0F0dHJpYnV0ZXMsdT10KCIuL2VkaXRfdHlwZXMiKSxmPWkuZXh0ZW5kRGVlcEFsbCxoPWkuaXNQbGFpbk9iamVjdCxwPWkuaXNBcnJheU9yVHlwZWRBcnJheSxkPWkubmVzdGVkUHJvcGVydHksbT1pLnZhbE9iamVjdE1ldGEsZz1bIl9pc1N1YnBsb3RPYmoiLCJfaXNMaW5rZWRUb0FycmF5IiwiX2FycmF5QXR0clJlZ2V4cHMiLCJfZGVwcmVjYXRlZCJdO2Z1bmN0aW9uIHYodCxlLHIpe2lmKCF0KXJldHVybiExO2lmKHQuX2lzTGlua2VkVG9BcnJheSlpZih5KGVbcl0pKXIrKztlbHNlIGlmKHI8ZS5sZW5ndGgpcmV0dXJuITE7Zm9yKDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49dFtlW3JdXTtpZighaChuKSlicmVhaztpZih0PW4scj09PWUubGVuZ3RoLTEpYnJlYWs7aWYodC5faXNMaW5rZWRUb0FycmF5KXtpZigheShlWysrcl0pKXJldHVybiExfWVsc2UgaWYoImluZm9fYXJyYXkiPT09dC52YWxUeXBlKXt2YXIgaT1lWysrcl07aWYoIXkoaSkpcmV0dXJuITE7dmFyIGE9dC5pdGVtcztpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPj1hLmxlbmd0aClyZXR1cm4hMTtpZigyPT09dC5kaW1lbnNpb25zKXtpZihyKyssZS5sZW5ndGg9PT1yKXJldHVybiB0O3ZhciBvPWVbcl07aWYoIXkobykpcmV0dXJuITE7dD1hW2ldW29dfWVsc2UgdD1hW2ldfWVsc2UgdD1hfX1yZXR1cm4gdH1mdW5jdGlvbiB5KHQpe3JldHVybiB0PT09TWF0aC5yb3VuZCh0KSYmdD49MH1mdW5jdGlvbiB4KCl7dmFyIHQsZSxyPXt9O2Zvcih0IGluIGYocixvKSxuLnN1YnBsb3RzUmVnaXN0cnkpe2lmKChlPW4uc3VicGxvdHNSZWdpc3RyeVt0XSkubGF5b3V0QXR0cmlidXRlcylpZihBcnJheS5pc0FycmF5KGUuYXR0cikpZm9yKHZhciBpPTA7aTxlLmF0dHIubGVuZ3RoO2krKyl3KHIsZSxlLmF0dHJbaV0pO2Vsc2UgdyhyLGUsInN1YnBsb3QiPT09ZS5hdHRyP2UubmFtZTplLmF0dHIpfWZvcih0IGluIG4uY29tcG9uZW50c1JlZ2lzdHJ5KXt2YXIgYT0oZT1uLmNvbXBvbmVudHNSZWdpc3RyeVt0XSkuc2NoZW1hO2lmKGEmJihhLnN1YnBsb3RzfHxhLmxheW91dCkpe3ZhciBzPWEuc3VicGxvdHM7aWYocyYmcy54YXhpcyYmIXMueWF4aXMpZm9yKHZhciBsIGluIHMueGF4aXMpZGVsZXRlIHIueWF4aXNbbF19ZWxzZSJjb2xvcnNjYWxlIj09PWUubmFtZT9mKHIsZS5sYXlvdXRBdHRyaWJ1dGVzKTplLmxheW91dEF0dHJpYnV0ZXMmJlQocixlLmxheW91dEF0dHJpYnV0ZXMsZS5uYW1lKX1yZXR1cm57bGF5b3V0QXR0cmlidXRlczpfKHIpfX1mdW5jdGlvbiBiKCl7dmFyIHQ9e2ZyYW1lczpmKHt9LHMpfTtyZXR1cm4gXyh0KSx0LmZyYW1lc31mdW5jdGlvbiBfKHQpe3JldHVybiBmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxuKXtyLmlzVmFsT2JqZWN0KHQpPyEwIT09dC5hcnJheU9rJiYiZGF0YV9hcnJheSIhPT10LnZhbFR5cGV8fChuW2UrInNyYyJdPXt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJub25lIn0pOmgodCkmJih0LnJvbGU9Im9iamVjdCIpfSkpfSh0KSxmdW5jdGlvbih0KXtyLmNyYXdsKHQsKGZ1bmN0aW9uKHQsZSxyKXtpZih0KXt2YXIgbj10Ll9pc0xpbmtlZFRvQXJyYXk7biYmKGRlbGV0ZSB0Ll9pc0xpbmtlZFRvQXJyYXkscltlXT17aXRlbXM6e319LHJbZV0uaXRlbXNbbl09dCxyW2VdLnJvbGU9Im9iamVjdCIpfX0pKX0odCksZnVuY3Rpb24odCl7IWZ1bmN0aW9uIHQoZSl7Zm9yKHZhciByIGluIGUpaWYoaChlW3JdKSl0KGVbcl0pO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlW3JdKSlmb3IodmFyIG49MDtuPGVbcl0ubGVuZ3RoO24rKyl0KGVbcl1bbl0pO2Vsc2UgZVtyXWluc3RhbmNlb2YgUmVnRXhwJiYoZVtyXT1lW3JdLnRvU3RyaW5nKCkpfSh0KX0odCksdH1mdW5jdGlvbiB3KHQsZSxyKXt2YXIgbj1kKHQsciksaT1mKHt9LGUubGF5b3V0QXR0cmlidXRlcyk7aS5faXNTdWJwbG90T2JqPSEwLG4uc2V0KGkpfWZ1bmN0aW9uIFQodCxlLHIpe3ZhciBuPWQodCxyKTtuLnNldChmKG4uZ2V0KCl8fHt9LGUpKX1yLklTX1NVQlBMT1RfT0JKPSJfaXNTdWJwbG90T2JqIixyLklTX0xJTktFRF9UT19BUlJBWT0iX2lzTGlua2VkVG9BcnJheSIsci5ERVBSRUNBVEVEPSJfZGVwcmVjYXRlZCIsci5VTkRFUlNDT1JFX0FUVFJTPWcsci5nZXQ9ZnVuY3Rpb24oKXt2YXIgdD17fTtuLmFsbFR5cGVzLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7dmFyIGUsaTtlPW4ubW9kdWxlc1t0XS5fbW9kdWxlLGk9ZS5iYXNlUGxvdE1vZHVsZTt2YXIgbz17dHlwZTpudWxsfSxzPWYoe30sYSksbD1mKHt9LGUuYXR0cmlidXRlcyk7ci5jcmF3bChsLChmdW5jdGlvbih0LGUscixuLGkpe2QocyxpKS5zZXQodm9pZCAwKSx2b2lkIDA9PT10JiZkKGwsaSkuc2V0KHZvaWQgMCl9KSksZihvLHMpLG4udHJhY2VJcyh0LCJub09wYWNpdHkiKSYmZGVsZXRlIG8ub3BhY2l0eTtuLnRyYWNlSXModCwic2hvd0xlZ2VuZCIpfHwoZGVsZXRlIG8uc2hvd2xlZ2VuZCxkZWxldGUgby5sZWdlbmRncm91cCk7bi50cmFjZUlzKHQsIm5vSG92ZXIiKSYmKGRlbGV0ZSBvLmhvdmVyaW5mbyxkZWxldGUgby5ob3ZlcmxhYmVsKTtlLnNlbGVjdFBvaW50c3x8ZGVsZXRlIG8uc2VsZWN0ZWRwb2ludHM7ZihvLGwpLGkuYXR0cmlidXRlcyYmZihvLGkuYXR0cmlidXRlcyk7by50eXBlPXQ7dmFyIGM9e21ldGE6ZS5tZXRhfHx7fSxjYXRlZ29yaWVzOmUuY2F0ZWdvcmllc3x8e30sYW5pbWF0YWJsZTpCb29sZWFuKGUuYW5pbWF0YWJsZSksdHlwZTp0LGF0dHJpYnV0ZXM6XyhvKX07aWYoZS5sYXlvdXRBdHRyaWJ1dGVzKXt2YXIgdT17fTtmKHUsZS5sYXlvdXRBdHRyaWJ1dGVzKSxjLmxheW91dEF0dHJpYnV0ZXM9Xyh1KX1lLmFuaW1hdGFibGV8fHIuY3Jhd2woYywoZnVuY3Rpb24odCl7ci5pc1ZhbE9iamVjdCh0KSYmImFuaW0iaW4gdCYmZGVsZXRlIHQuYW5pbX0pKTtyZXR1cm4gY30oZSl9KSk7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKG4udHJhbnNmb3Jtc1JlZ2lzdHJ5KS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKHQpe3ZhciBlPW4udHJhbnNmb3Jtc1JlZ2lzdHJ5W3RdLHI9Zih7fSxlLmF0dHJpYnV0ZXMpO3JldHVybiBPYmplY3Qua2V5cyhuLmNvbXBvbmVudHNSZWdpc3RyeSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIGk9bi5jb21wb25lbnRzUmVnaXN0cnlbZV07aS5zY2hlbWEmJmkuc2NoZW1hLnRyYW5zZm9ybXMmJmkuc2NoZW1hLnRyYW5zZm9ybXNbdF0mJk9iamVjdC5rZXlzKGkuc2NoZW1hLnRyYW5zZm9ybXNbdF0pLmZvckVhY2goKGZ1bmN0aW9uKGUpe1QocixpLnNjaGVtYS50cmFuc2Zvcm1zW3RdW2VdLGUpfSkpfSkpLHthdHRyaWJ1dGVzOl8ocil9fSh0KX0pKSx7ZGVmczp7dmFsT2JqZWN0czptLG1ldGFLZXlzOmcuY29uY2F0KFsiZGVzY3JpcHRpb24iLCJyb2xlIiwiZWRpdFR5cGUiLCJpbXBsaWVkRWRpdHMiXSksZWRpdFR5cGU6e3RyYWNlczp1LnRyYWNlcyxsYXlvdXQ6dS5sYXlvdXR9LGltcGxpZWRFZGl0czp7fX0sdHJhY2VzOnQsbGF5b3V0OngoKSx0cmFuc2Zvcm1zOmUsZnJhbWVzOmIoKSxhbmltYXRpb246XyhsKSxjb25maWc6XyhjKX19LHIuY3Jhd2w9ZnVuY3Rpb24odCxlLG4saSl7dmFyIGE9bnx8MDtpPWl8fCIiLE9iamVjdC5rZXlzKHQpLmZvckVhY2goKGZ1bmN0aW9uKG4pe3ZhciBvPXRbbl07aWYoLTE9PT1nLmluZGV4T2Yobikpe3ZhciBzPShpP2krIi4iOiIiKStuO2UobyxuLHQsYSxzKSxyLmlzVmFsT2JqZWN0KG8pfHxoKG8pJiYiaW1wbGllZEVkaXRzIiE9PW4mJnIuY3Jhd2wobyxlLGErMSxzKX19KSl9LHIuaXNWYWxPYmplY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnZvaWQgMCE9PXQudmFsVHlwZX0sci5maW5kQXJyYXlBdHRyaWJ1dGVzPWZ1bmN0aW9uKHQpe3ZhciBlLG4saT1bXSxvPVtdLHM9W107ZnVuY3Rpb24gbCh0LHIsYSxsKXtvPW8uc2xpY2UoMCxsKS5jb25jYXQoW3JdKSxzPXMuc2xpY2UoMCxsKS5jb25jYXQoW3QmJnQuX2lzTGlua2VkVG9BcnJheV0pLHQmJigiZGF0YV9hcnJheSI9PT10LnZhbFR5cGV8fCEwPT09dC5hcnJheU9rKSYmISgiY29sb3JiYXIiPT09b1tsLTFdJiYoInRpY2t0ZXh0Ij09PXJ8fCJ0aWNrdmFscyI9PT1yKSkmJmZ1bmN0aW9uIHQoZSxyLGEpe3ZhciBsPWVbb1tyXV0sYz1hK29bcl07aWYocj09PW8ubGVuZ3RoLTEpcChsKSYmaS5wdXNoKG4rYyk7ZWxzZSBpZihzW3JdKXtpZihBcnJheS5pc0FycmF5KGwpKWZvcih2YXIgdT0wO3U8bC5sZW5ndGg7dSsrKWgobFt1XSkmJnQobFt1XSxyKzEsYysiWyIrdSsiXS4iKX1lbHNlIGgobCkmJnQobCxyKzEsYysiLiIpfShlLDAsIiIpfWU9dCxuPSIiLHIuY3Jhd2woYSxsKSx0Ll9tb2R1bGUmJnQuX21vZHVsZS5hdHRyaWJ1dGVzJiZyLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLGwpO3ZhciBjPXQudHJhbnNmb3JtcztpZihjKWZvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdLGQ9Zi5fbW9kdWxlO2QmJihuPSJ0cmFuc2Zvcm1zWyIrdSsiXS4iLGU9ZixyLmNyYXdsKGQuYXR0cmlidXRlcyxsKSl9cmV0dXJuIGl9LHIuZ2V0VHJhY2VWYWxPYmplY3Q9ZnVuY3Rpb24odCxlKXt2YXIgcixpLG89ZVswXSxzPTE7aWYoInRyYW5zZm9ybXMiPT09byl7aWYoMT09PWUubGVuZ3RoKXJldHVybiBhLnRyYW5zZm9ybXM7dmFyIGw9dC50cmFuc2Zvcm1zO2lmKCFBcnJheS5pc0FycmF5KGwpfHwhbC5sZW5ndGgpcmV0dXJuITE7dmFyIGM9ZVsxXTtpZigheShjKXx8Yz49bC5sZW5ndGgpcmV0dXJuITE7aT0ocj0obi50cmFuc2Zvcm1zUmVnaXN0cnlbbFtjXS50eXBlXXx8e30pLmF0dHJpYnV0ZXMpJiZyW2VbMl1dLHM9M31lbHNle3ZhciB1PXQuX21vZHVsZTtpZih1fHwodT0obi5tb2R1bGVzW3QudHlwZXx8YS50eXBlLmRmbHRdfHx7fSkuX21vZHVsZSksIXUpcmV0dXJuITE7aWYoIShpPShyPXUuYXR0cmlidXRlcykmJnJbb10pKXt2YXIgZj11LmJhc2VQbG90TW9kdWxlO2YmJmYuYXR0cmlidXRlcyYmKGk9Zi5hdHRyaWJ1dGVzW29dKX1pfHwoaT1hW29dKX1yZXR1cm4gdihpLGUscyl9LHIuZ2V0TGF5b3V0VmFsT2JqZWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHYoZnVuY3Rpb24odCxlKXt2YXIgcixpLGEscyxsPXQuX2Jhc2VQbG90TW9kdWxlcztpZihsKXt2YXIgYztmb3Iocj0wO3I8bC5sZW5ndGg7cisrKXtpZigoYT1sW3JdKS5hdHRyUmVnZXgmJmEuYXR0clJlZ2V4LnRlc3QoZSkpe2lmKGEubGF5b3V0QXR0ck92ZXJyaWRlcylyZXR1cm4gYS5sYXlvdXRBdHRyT3ZlcnJpZGVzOyFjJiZhLmxheW91dEF0dHJpYnV0ZXMmJihjPWEubGF5b3V0QXR0cmlidXRlcyl9dmFyIHU9YS5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcztpZih1JiZlIGluIHUpcmV0dXJuIHVbZV19aWYoYylyZXR1cm4gY312YXIgZj10Ll9tb2R1bGVzO2lmKGYpZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylpZigocz1mW3JdLmxheW91dEF0dHJpYnV0ZXMpJiZlIGluIHMpcmV0dXJuIHNbZV07Zm9yKGkgaW4gbi5jb21wb25lbnRzUmVnaXN0cnkpe2lmKCJjb2xvcnNjYWxlIj09PShhPW4uY29tcG9uZW50c1JlZ2lzdHJ5W2ldKS5uYW1lJiYwPT09ZS5pbmRleE9mKCJjb2xvcmF4aXMiKSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzW2VdO2lmKCFhLnNjaGVtYSYmZT09PWEubmFtZSlyZXR1cm4gYS5sYXlvdXRBdHRyaWJ1dGVzfXJldHVybiBlIGluIG8mJm9bZV19KHQsZVswXSksZSwxKX19LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIjo4MjEsIi4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vcGxvdHMvZnJhbWVfYXR0cmlidXRlcyI6ODU3LCIuLi9wbG90cy9sYXlvdXRfYXR0cmlidXRlcyI6ODgxLCIuLi9yZWdpc3RyeSI6OTA0LCIuL2VkaXRfdHlwZXMiOjgwOSwiLi9wbG90X2NvbmZpZyI6ODE0fV0sODE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9e25hbWU6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6Im5vbmUifX07ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdCYmInN0cmluZyI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7dmFyIGU9dC5sZW5ndGgtMTtyZXR1cm4icyIhPT10LmNoYXJBdChlKSYmbi53YXJuKCJiYWQgYXJndW1lbnQgdG8gYXJyYXlEZWZhdWx0S2V5OiAiK3QpLHQuc3Vic3RyKDAsdC5sZW5ndGgtMSkrImRlZmF1bHRzIn1hLnRlbXBsYXRlaXRlbW5hbWU9e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxyLnRlbXBsYXRlZEFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUuX2lzTGlua2VkVG9BcnJheT10LGUubmFtZT1hLm5hbWUsZS50ZW1wbGF0ZWl0ZW1uYW1lPWEudGVtcGxhdGVpdGVtbmFtZSxlfSxyLnRyYWNlVGVtcGxhdGVyPWZ1bmN0aW9uKHQpe3ZhciBlLHIsYT17fTtmb3IoZSBpbiB0KXI9dFtlXSxBcnJheS5pc0FycmF5KHIpJiZyLmxlbmd0aCYmKGFbZV09MCk7cmV0dXJue25ld1RyYWNlOmZ1bmN0aW9uKG8pe3ZhciBzPXt0eXBlOmU9bi5jb2VyY2Uobyx7fSxpLCJ0eXBlIiksX3RlbXBsYXRlOm51bGx9O2lmKGUgaW4gYSl7cj10W2VdO3ZhciBsPWFbZV0lci5sZW5ndGg7YVtlXSsrLHMuX3RlbXBsYXRlPXJbbF19cmV0dXJuIHN9fX0sci5uZXdDb250YWluZXI9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQuX3RlbXBsYXRlLGE9aSYmKGlbZV18fHImJmlbcl0pO3JldHVybiBuLmlzUGxhaW5PYmplY3QoYSl8fChhPW51bGwpLHRbZV09e190ZW1wbGF0ZTphfX0sci5hcnJheVRlbXBsYXRlcj1mdW5jdGlvbih0LGUscil7dmFyIG49dC5fdGVtcGxhdGUsaT1uJiZuW3MoZSldLGE9biYmbltlXTtBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aHx8KGE9W10pO3ZhciBsPXt9O3JldHVybntuZXdJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXtuYW1lOnQubmFtZSxfaW5wdXQ6dH0sbj1lLnRlbXBsYXRlaXRlbW5hbWU9dC50ZW1wbGF0ZWl0ZW1uYW1lO2lmKCFvKG4pKXJldHVybiBlLl90ZW1wbGF0ZT1pLGU7Zm9yKHZhciBzPTA7czxhLmxlbmd0aDtzKyspe3ZhciBjPWFbc107aWYoYy5uYW1lPT09bilyZXR1cm4gbFtuXT0xLGUuX3RlbXBsYXRlPWMsZX1yZXR1cm4gZVtyXT10W3JdfHwhMSxlLl90ZW1wbGF0ZT0hMSxlfSxkZWZhdWx0SXRlbXM6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YS5sZW5ndGg7ZSsrKXt2YXIgcj1hW2VdLG49ci5uYW1lO2lmKG8obikmJiFsW25dKXt2YXIgaT17X3RlbXBsYXRlOnIsbmFtZTpuLF9pbnB1dDp7X3RlbXBsYXRlaXRlbW5hbWU6bn19O2kudGVtcGxhdGVpdGVtbmFtZT1yLnRlbXBsYXRlaXRlbW5hbWUsdC5wdXNoKGkpLGxbbl09MX19cmV0dXJuIHR9fX0sci5hcnJheURlZmF1bHRLZXk9cyxyLmFycmF5RWRpdG9yPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT0obi5uZXN0ZWRQcm9wZXJ0eSh0LGUpLmdldCgpfHxbXSkubGVuZ3RoLGE9ci5faW5kZXgsbz1hPj1pJiYoci5faW5wdXR8fHt9KS5fdGVtcGxhdGVpdGVtbmFtZTtvJiYoYT1pKTt2YXIgcyxsPWUrIlsiK2ErIl0iO2Z1bmN0aW9uIGMoKXtzPXt9LG8mJihzW2xdPXt9LHNbbF0udGVtcGxhdGVpdGVtbmFtZT1vKX1mdW5jdGlvbiB1KHQsZSl7bz9uLm5lc3RlZFByb3BlcnR5KHNbbF0sdCkuc2V0KGUpOnNbbCsiLiIrdF09ZX1mdW5jdGlvbiBmKCl7dmFyIHQ9cztyZXR1cm4gYygpLHR9cmV0dXJuIGMoKSx7bW9kaWZ5QmFzZTpmdW5jdGlvbih0LGUpe3NbdF09ZX0sbW9kaWZ5SXRlbTp1LGdldFVwZGF0ZU9iajpmLGFwcGx5VXBkYXRlOmZ1bmN0aW9uKGUscil7ZSYmdShlLHIpO3ZhciBpPWYoKTtmb3IodmFyIGEgaW4gaSluLm5lc3RlZFByb3BlcnR5KHQsYSkuc2V0KGlbYV0pfX19fSx7Ii4uL2xpYiI6Nzc2LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjN9XSw4MTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL3Bsb3RzL3Bsb3RzIiksbz10KCIuLi9saWIiKSxzPXQoIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLGw9dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLGM9dCgiLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuLi9jb21wb25lbnRzL3RpdGxlcyIpLGY9dCgiLi4vY29tcG9uZW50cy9tb2RlYmFyIiksaD10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHA9dCgiLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLGQ9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksbT1kLmVuZm9yY2UsZz1kLmNsZWFuLHY9dCgiLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlO2Z1bmN0aW9uIHkodCxlLHIpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1yW25dWzBdLGE9cltuXVsxXTtpZighKGlbMF0+PXRbMV18fGlbMV08PXRbMF0pJiYoYVswXTxlWzFdJiZhWzFdPmVbMF0pKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHgodCl7dmFyIGUsaSxzLHUsZCxtLGc9dC5fZnVsbExheW91dCx2PWcuX3NpemUseD12LnAsXz1oLmxpc3QodCwiIiwhMCk7aWYoZy5fcGFwZXJkaXYuc3R5bGUoe3dpZHRoOnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9XaWR0aCYmIXQubGF5b3V0LndpZHRoPyIxMDAlIjpnLndpZHRoKyJweCIsaGVpZ2h0OnQuX2NvbnRleHQucmVzcG9uc2l2ZSYmZy5hdXRvc2l6ZSYmIXQuX2NvbnRleHQuX2hhc1plcm9IZWlnaHQmJiF0LmxheW91dC5oZWlnaHQ/IjEwMCUiOmcuaGVpZ2h0KyJweCJ9KS5zZWxlY3RBbGwoIi5tYWluLXN2ZyIpLmNhbGwoYy5zZXRTaXplLGcud2lkdGgsZy5oZWlnaHQpLHQuX2NvbnRleHQuc2V0QmFja2dyb3VuZCh0LGcucGFwZXJfYmdjb2xvciksci5kcmF3TWFpblRpdGxlKHQpLGYubWFuYWdlKHQpLCFnLl9oYXMoImNhcnRlc2lhbiIpKXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCk7ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5fbHcvMjtyZXR1cm4ieCI9PT10Ll9pZC5jaGFyQXQoMCk/ZT8idG9wIj09PXI/ZS5fb2Zmc2V0LXgtbjplLl9vZmZzZXQrZS5fbGVuZ3RoK3grbjp2LnQrdi5oKigxLSh0LnBvc2l0aW9ufHwwKSkrbiUxOmU/InJpZ2h0Ij09PXI/ZS5fb2Zmc2V0K2UuX2xlbmd0aCt4K246ZS5fb2Zmc2V0LXgtbjp2Lmwrdi53Kih0LnBvc2l0aW9ufHwwKStuJTF9Zm9yKGU9MDtlPF8ubGVuZ3RoO2UrKyl7dmFyIGs9KHU9X1tlXSkuX2FuY2hvckF4aXM7dS5fbGluZXBvc2l0aW9ucz17fSx1Ll9sdz1jLmNyaXNwUm91bmQodCx1LmxpbmV3aWR0aCwxKSx1Ll9tYWluTGluZVBvc2l0aW9uPVQodSxrLHUuc2lkZSksdS5fbWFpbk1pcnJvclBvc2l0aW9uPXUubWlycm9yJiZrP1QodSxrLHAuT1BQT1NJVEVfU0lERVt1LnNpZGVdKTpudWxsfXZhciBBPVtdLE09W10sUz1bXSxFPTE9PT1sLm9wYWNpdHkoZy5wYXBlcl9iZ2NvbG9yKSYmMT09PWwub3BhY2l0eShnLnBsb3RfYmdjb2xvcikmJmcucGFwZXJfYmdjb2xvcj09PWcucGxvdF9iZ2NvbG9yO2ZvcihpIGluIGcuX3Bsb3RzKWlmKChzPWcuX3Bsb3RzW2ldKS5tYWlucGxvdClzLmJnJiZzLmJnLnJlbW92ZSgpLHMuYmc9dm9pZCAwO2Vsc2V7dmFyIEw9cy54YXhpcy5kb21haW4sQz1zLnlheGlzLmRvbWFpbixQPXMucGxvdGdyb3VwO2lmKHkoTCxDLFMpKXt2YXIgST1QLm5vZGUoKSxPPXMuYmc9by5lbnN1cmVTaW5nbGUoUCwicmVjdCIsImJnIik7SS5pbnNlcnRCZWZvcmUoTy5ub2RlKCksSS5jaGlsZE5vZGVzWzBdKSxNLnB1c2goaSl9ZWxzZSBQLnNlbGVjdCgicmVjdC5iZyIpLnJlbW92ZSgpLFMucHVzaChbTCxDXSksRXx8KEEucHVzaChpKSxNLnB1c2goaSkpfXZhciB6LEQsUixGLEIsTixqLFUsVixILHEsRyxZLFc9Zy5fYmdMYXllci5zZWxlY3RBbGwoIi5iZyIpLmRhdGEoQSk7Zm9yKFcuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKCJiZyIsITApLFcuZXhpdCgpLnJlbW92ZSgpLFcuZWFjaCgoZnVuY3Rpb24odCl7Zy5fcGxvdHNbdF0uYmc9bi5zZWxlY3QodGhpcyl9KSksZT0wO2U8TS5sZW5ndGg7ZSsrKXM9Zy5fcGxvdHNbTVtlXV0sZD1zLnhheGlzLG09cy55YXhpcyxzLmJnJiZ2b2lkIDAhPT1kLl9vZmZzZXQmJnZvaWQgMCE9PW0uX29mZnNldCYmcy5iZy5jYWxsKGMuc2V0UmVjdCxkLl9vZmZzZXQteCxtLl9vZmZzZXQteCxkLl9sZW5ndGgrMip4LG0uX2xlbmd0aCsyKngpLmNhbGwobC5maWxsLGcucGxvdF9iZ2NvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwwKTtpZighZy5faGFzT25seUxhcmdlU3Bsb21zKWZvcihpIGluIGcuX3Bsb3RzKXtzPWcuX3Bsb3RzW2ldLGQ9cy54YXhpcyxtPXMueWF4aXM7dmFyIFgsWixKPXMuY2xpcElkPSJjbGlwIitnLl91aWQraSsicGxvdCIsSz1vLmVuc3VyZVNpbmdsZUJ5SWQoZy5fY2xpcHMsImNsaXBQYXRoIixKLChmdW5jdGlvbih0KXt0LmNsYXNzZWQoInBsb3RjbGlwIiwhMCkuYXBwZW5kKCJyZWN0Iil9KSk7cy5jbGlwUmVjdD1LLnNlbGVjdCgicmVjdCIpLmF0dHIoe3dpZHRoOmQuX2xlbmd0aCxoZWlnaHQ6bS5fbGVuZ3RofSksYy5zZXRUcmFuc2xhdGUocy5wbG90LGQuX29mZnNldCxtLl9vZmZzZXQpLHMuX2hhc0NsaXBPbkF4aXNGYWxzZT8oWD1udWxsLFo9Sik6KFg9SixaPW51bGwpLGMuc2V0Q2xpcFVybChzLnBsb3QsWCx0KSxzLmxheWVyQ2xpcElkPVp9ZnVuY3Rpb24gUSh0KXtyZXR1cm4iTSIreisiLCIrdCsiSCIrRH1mdW5jdGlvbiAkKHQpe3JldHVybiJNIitkLl9vZmZzZXQrIiwiK3QrImgiK2QuX2xlbmd0aH1mdW5jdGlvbiB0dCh0KXtyZXR1cm4iTSIrdCsiLCIrVSsiViIran1mdW5jdGlvbiBldCh0KXtyZXR1cm4iTSIrdCsiLCIrbS5fb2Zmc2V0KyJ2IittLl9sZW5ndGh9ZnVuY3Rpb24gcnQodCxlLHIpe2lmKCF0LnNob3dsaW5lfHxpIT09dC5fbWFpblN1YnBsb3QpcmV0dXJuIiI7aWYoIXQuX2FuY2hvckF4aXMpcmV0dXJuIHIodC5fbWFpbkxpbmVQb3NpdGlvbik7dmFyIG49ZSh0Ll9tYWluTGluZVBvc2l0aW9uKTtyZXR1cm4gdC5taXJyb3ImJihuKz1lKHQuX21haW5NaXJyb3JQb3NpdGlvbikpLG59Zm9yKGkgaW4gZy5fcGxvdHMpe3M9Zy5fcGxvdHNbaV0sZD1zLnhheGlzLG09cy55YXhpczt2YXIgbnQ9Ik0wLDAiO2IoZCxpKSYmKEI9dyhkLCJsZWZ0IixtLF8pLHo9ZC5fb2Zmc2V0LShCP3grQjowKSxOPXcoZCwicmlnaHQiLG0sXyksRD1kLl9vZmZzZXQrZC5fbGVuZ3RoKyhOP3grTjowKSxSPVQoZCxtLCJib3R0b20iKSxGPVQoZCxtLCJ0b3AiKSwhKFk9IWQuX2FuY2hvckF4aXN8fGkhPT1kLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1kLm1pcnJvciYmImFsbCIhPT1kLm1pcnJvcnx8KGQuX2xpbmVwb3NpdGlvbnNbaV09W1IsRl0pLG50PXJ0KGQsUSwkKSxZJiZkLnNob3dsaW5lJiYoImFsbCI9PT1kLm1pcnJvcnx8ImFsbHRpY2tzIj09PWQubWlycm9yKSYmKG50Kz1RKFIpK1EoRikpLHMueGxpbmVzLnN0eWxlKCJzdHJva2Utd2lkdGgiLGQuX2x3KyJweCIpLmNhbGwobC5zdHJva2UsZC5zaG93bGluZT9kLmxpbmVjb2xvcjoicmdiYSgwLDAsMCwwKSIpKSxzLnhsaW5lcy5hdHRyKCJkIixudCk7dmFyIGl0PSJNMCwwIjtiKG0saSkmJihxPXcobSwiYm90dG9tIixkLF8pLGo9bS5fb2Zmc2V0K20uX2xlbmd0aCsocT94OjApLEc9dyhtLCJ0b3AiLGQsXyksVT1tLl9vZmZzZXQtKEc/eDowKSxWPVQobSxkLCJsZWZ0IiksSD1UKG0sZCwicmlnaHQiKSwhKFk9IW0uX2FuY2hvckF4aXN8fGkhPT1tLl9tYWluU3VicGxvdCl8fCJhbGx0aWNrcyIhPT1tLm1pcnJvciYmImFsbCIhPT1tLm1pcnJvcnx8KG0uX2xpbmVwb3NpdGlvbnNbaV09W1YsSF0pLGl0PXJ0KG0sdHQsZXQpLFkmJm0uc2hvd2xpbmUmJigiYWxsIj09PW0ubWlycm9yfHwiYWxsdGlja3MiPT09bS5taXJyb3IpJiYoaXQrPXR0KFYpK3R0KEgpKSxzLnlsaW5lcy5zdHlsZSgic3Ryb2tlLXdpZHRoIixtLl9sdysicHgiKS5jYWxsKGwuc3Ryb2tlLG0uc2hvd2xpbmU/bS5saW5lY29sb3I6InJnYmEoMCwwLDAsMCkiKSkscy55bGluZXMuYXR0cigiZCIsaXQpfXJldHVybiBoLm1ha2VDbGlwUGF0aHModCksYS5wcmV2aW91c1Byb21pc2VzKHQpfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4odC50aWNrc3x8dC5zaG93bGluZSkmJihlPT09dC5fbWFpblN1YnBsb3R8fCJhbGwiPT09dC5taXJyb3J8fCJhbGx0aWNrcyI9PT10Lm1pcnJvcil9ZnVuY3Rpb24gXyh0LGUscil7aWYoIXIuc2hvd2xpbmV8fCFyLl9sdylyZXR1cm4hMTtpZigiYWxsIj09PXIubWlycm9yfHwiYWxsdGlja3MiPT09ci5taXJyb3IpcmV0dXJuITA7dmFyIG49ci5fYW5jaG9yQXhpcztpZighbilyZXR1cm4hMTt2YXIgaT1wLkZST01fQkxbZV07cmV0dXJuIHIuc2lkZT09PWU/bi5kb21haW5baV09PT10LmRvbWFpbltpXTpyLm1pcnJvciYmbi5kb21haW5bMS1pXT09PXQuZG9tYWluWzEtaV19ZnVuY3Rpb24gdyh0LGUscixuKXtpZihfKHQsZSxyKSlyZXR1cm4gci5fbHc7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBhPW5baV07aWYoYS5fbWFpbkF4aXM9PT1yLl9tYWluQXhpcyYmXyh0LGUsYSkpcmV0dXJuIGEuX2x3fXJldHVybiAwfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj10LnRpdGxlLG49dC5fc2l6ZSxpPTA7c3dpdGNoKCJzdGFydCI9PT1lP2k9ci5wYWQubDoiZW5kIj09PWUmJihpPS1yLnBhZC5yKSxyLnhyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLmwrbi53KnIueCtpO2Nhc2UiY29udGFpbmVyIjpkZWZhdWx0OnJldHVybiB0LndpZHRoKnIueCtpfX1mdW5jdGlvbiBrKHQsZSl7dmFyIHI9dC50aXRsZSxuPXQuX3NpemUsaT0wO2lmKCIwZW0iIT09ZSYmZT9lPT09cC5DQVBfU0hJRlQrImVtIiYmKGk9ci5wYWQudCk6aT0tci5wYWQuYiwiYXV0byI9PT1yLnkpcmV0dXJuIG4udC8yO3N3aXRjaChyLnlyZWYpe2Nhc2UicGFwZXIiOnJldHVybiBuLnQrbi5oLW4uaCpyLnkraTtjYXNlImNvbnRhaW5lciI6ZGVmYXVsdDpyZXR1cm4gdC5oZWlnaHQtdC5oZWlnaHQqci55K2l9fXIubGF5b3V0U3R5bGVzPWZ1bmN0aW9uKHQpe3JldHVybiBvLnN5bmNPckFzeW5jKFthLmRvQXV0b01hcmdpbix4XSx0KX0sci5kcmF3TWFpblRpdGxlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQscj1mdW5jdGlvbih0KXt2YXIgZT10LnRpdGxlLHI9Im1pZGRsZSI7by5pc1JpZ2h0QW5jaG9yKGUpP3I9ImVuZCI6by5pc0xlZnRBbmNob3IoZSkmJihyPSJzdGFydCIpO3JldHVybiByfShlKSxuPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGl0bGUscj0iMGVtIjtvLmlzVG9wQW5jaG9yKGUpP3I9cC5DQVBfU0hJRlQrImVtIjpvLmlzTWlkZGxlQW5jaG9yKGUpJiYocj1wLk1JRF9TSElGVCsiZW0iKTtyZXR1cm4gcn0oZSk7dS5kcmF3KHQsImd0aXRsZSIse3Byb3BDb250YWluZXI6ZSxwcm9wTmFtZToidGl0bGUudGV4dCIscGxhY2Vob2xkZXI6ZS5fZGZsdFRpdGxlLnBsb3QsYXR0cmlidXRlczp7eDpUKGUscikseTprKGUsbiksInRleHQtYW5jaG9yIjpyLGR5Om59fSl9LHIuZG9UcmFjZVN0eWxlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5jYWxjZGF0YSxvPVtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBsPW5bZV0sYz1sWzBdfHx7fSx1PWMudHJhY2V8fHt9LGY9dS5fbW9kdWxlfHx7fSxoPWYuYXJyYXlzVG9DYWxjZGF0YTtoJiZoKGwsdSk7dmFyIHA9Zi5lZGl0U3R5bGU7cCYmby5wdXNoKHtmbjpwLGNkMDpjfSl9aWYoby5sZW5ndGgpe2ZvcihlPTA7ZTxvLmxlbmd0aDtlKyspe3ZhciBkPW9bZV07ZC5mbih0LGQuY2QwKX1zKHQpLHIucmVkcmF3UmVnbFRyYWNlcyh0KX1yZXR1cm4gYS5zdHlsZSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5kb0NvbG9yQmFycz1mdW5jdGlvbih0KXtyZXR1cm4gaS5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5sYXlvdXRSZXBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5sYXlvdXQ7cmV0dXJuIHQubGF5b3V0PXZvaWQgMCxpLmNhbGwoIl9kb1Bsb3QiLHQsIiIsZSl9LHIuZG9MZWdlbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvVGlja3NSZWxheW91dD1mdW5jdGlvbih0KXtyZXR1cm4gaC5kcmF3KHQsInJlZHJhdyIpLHQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcyYmKGkuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS51cGRhdGVHcmlkKHQpLHModCksci5yZWRyYXdSZWdsVHJhY2VzKHQpKSxyLmRyYXdNYWluVGl0bGUodCksYS5wcmV2aW91c1Byb21pc2VzKHQpfSxyLmRvTW9kZUJhcj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0O2YubWFuYWdlKHQpO2Zvcih2YXIgcj0wO3I8ZS5fYmFzZVBsb3RNb2R1bGVzLmxlbmd0aDtyKyspe3ZhciBuPWUuX2Jhc2VQbG90TW9kdWxlc1tyXS51cGRhdGVGeDtuJiZuKHQpfXJldHVybiBhLnByZXZpb3VzUHJvbWlzZXModCl9LHIuZG9DYW1lcmE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nbDNkLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9ZVtyW25dXTtpLl9zY2VuZS5zZXRWaWV3cG9ydChpKX19LHIuZHJhd0RhdGE9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtzKHQpO2Zvcih2YXIgbj1lLl9iYXNlUGxvdE1vZHVsZXMsbz0wO288bi5sZW5ndGg7bysrKW5bb10ucGxvdCh0KTtyZXR1cm4gci5yZWRyYXdSZWdsVHJhY2VzKHQpLGEuc3R5bGUodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNoYXBlcyIsImRyYXciKSh0KSxpLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoImltYWdlcyIsImRyYXciKSh0KSxlLl9yZXBsb3R0aW5nPSExLGEucHJldmlvdXNQcm9taXNlcyh0KX0sci5yZWRyYXdSZWdsVHJhY2VzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQ7aWYoZS5faGFzKCJyZWdsIikpe3ZhciByLG4saT10Ll9mdWxsRGF0YSxhPVtdLHM9W107Zm9yKGUuX2hhc09ubHlMYXJnZVNwbG9tcyYmZS5fc3Bsb21HcmlkLmRyYXcoKSxyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBsPWlbcl07ITA9PT1sLnZpc2libGUmJjAhPT1sLl9sZW5ndGgmJigic3Bsb20iPT09bC50eXBlP2UuX3NwbG9tU2NlbmVzW2wudWlkXS5kcmF3KCk6InNjYXR0ZXJnbCI9PT1sLnR5cGU/by5wdXNoVW5pcXVlKGEsbC54YXhpcytsLnlheGlzKToic2NhdHRlcnBvbGFyZ2wiPT09bC50eXBlJiZvLnB1c2hVbmlxdWUocyxsLnN1YnBsb3QpKX1mb3Iocj0wO3I8YS5sZW5ndGg7cisrKShuPWUuX3Bsb3RzW2Fbcl1dKS5fc2NlbmUmJm4uX3NjZW5lLmRyYXcoKTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKShuPWVbc1tyXV0uX3N1YnBsb3QpLl9zY2VuZSYmbi5fc2NlbmUuZHJhdygpfX0sci5kb0F1dG9SYW5nZUFuZENvbnN0cmFpbnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPWgubGlzdCh0LCIiLCEwKSxuPXt9LGk9MDtpPHIubGVuZ3RoO2krKylpZighblsoZT1yW2ldKS5faWRdKXtuW2UuX2lkXT0xLGcodCxlKSx2KHQsZSk7dmFyIGE9ZS5fbWF0Y2hHcm91cDtpZihhKWZvcih2YXIgbyBpbiBhKXt2YXIgcz1oLmdldEZyb21JZCh0LG8pO3YodCxzLGUucmFuZ2UpLG5bb109MX19bSh0KX0sci5maW5hbERyYXc9ZnVuY3Rpb24odCl7aS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJyYW5nZXNlbGVjdG9yIiwiZHJhdyIpKHQpfSxyLmRyYXdNYXJnaW5QdXNoZXJzPWZ1bmN0aW9uKHQpe2kuZ2V0Q29tcG9uZW50TWV0aG9kKCJsZWdlbmQiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2VsZWN0b3IiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInNsaWRlcnMiLCJkcmF3IikodCksaS5nZXRDb21wb25lbnRNZXRob2QoInVwZGF0ZW1lbnVzIiwiZHJhdyIpKHQpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KX19LHsiLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vY29tcG9uZW50cy9tb2RlYmFyIjo3MDIsIi4uL2NvbXBvbmVudHMvdGl0bGVzIjo3MzcsIi4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vbGliIjo3NzYsIi4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1LCIuLi9wbG90cy9wbG90cyI6ODkwLCIuLi9yZWdpc3RyeSI6OTA0LCJAcGxvdGx5L2QzIjo1OH1dLDgxODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPW4uaXNQbGFpbk9iamVjdCxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4uL3Bsb3RzL3Bsb3RzIikscz10KCIuLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuL3Bsb3RfdGVtcGxhdGUiKSxjPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnO2Z1bmN0aW9uIHUodCxlKXt0PW4uZXh0ZW5kRGVlcCh7fSx0KTt2YXIgcixhLG89T2JqZWN0LmtleXModCkuc29ydCgpO2Z1bmN0aW9uIHMoZSxyLG4pe2lmKGkocikmJmkoZSkpdShlLHIpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShyKSYmQXJyYXkuaXNBcnJheShlKSl7dmFyIG89bC5hcnJheVRlbXBsYXRlcih7X3RlbXBsYXRlOnR9LG4pO2ZvcihhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBzPXJbYV0sYz1vLm5ld0l0ZW0ocykuX3RlbXBsYXRlO2MmJnUoYyxzKX12YXIgZj1vLmRlZmF1bHRJdGVtcygpO2ZvcihhPTA7YTxmLmxlbmd0aDthKyspci5wdXNoKGZbYV0uX3RlbXBsYXRlKTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKWRlbGV0ZSByW2FdLnRlbXBsYXRlaXRlbW5hbWV9fWZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBjPW9bcl0saD10W2NdO2lmKGMgaW4gZT9zKGgsZVtjXSxjKTplW2NdPWgsZihjKT09PWMpZm9yKHZhciBwIGluIGUpe3ZhciBkPWYocCk7cD09PWR8fGQhPT1jfHxwIGluIHR8fHMoaCxlW3BdLGMpfX19ZnVuY3Rpb24gZih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bMC05XSskLywiIil9ZnVuY3Rpb24gaCh0LGUscixhLG8pe3ZhciBzPW8mJnIobyk7Zm9yKHZhciBjIGluIHQpe3ZhciB1PXRbY10scD1tKHQsYyxhKSxkPW0odCxjLG8pLGc9cihkKTtpZighZyl7dmFyIHY9ZihjKTt2IT09YyYmKGc9cihkPW0odCx2LG8pKSl9aWYoKCFzfHxzIT09ZykmJiEoIWd8fGcuX25vVGVtcGxhdGluZ3x8ImRhdGFfYXJyYXkiPT09Zy52YWxUeXBlfHxnLmFycmF5T2smJkFycmF5LmlzQXJyYXkodSkpKWlmKCFnLnZhbFR5cGUmJmkodSkpaCh1LGUscixwLGQpO2Vsc2UgaWYoZy5faXNMaW5rZWRUb0FycmF5JiZBcnJheS5pc0FycmF5KHUpKWZvcih2YXIgeT0hMSx4PTAsYj17fSxfPTA7Xzx1Lmxlbmd0aDtfKyspe3ZhciB3PXVbX107aWYoaSh3KSl7dmFyIFQ9dy5uYW1lO2lmKFQpYltUXXx8KGgodyxlLHIsbSh1LHgscCksbSh1LHgsZCkpLHgrKyxiW1RdPTEpO2Vsc2UgaWYoIXkpe3ZhciBrPW0odCxsLmFycmF5RGVmYXVsdEtleShjKSxhKSxBPW0odSx4LHApO2godyxlLHIsQSxtKHUseCxkKSk7dmFyIE09bi5uZXN0ZWRQcm9wZXJ0eShlLEEpO24ubmVzdGVkUHJvcGVydHkoZSxrKS5zZXQoTS5nZXQoKSksTS5zZXQobnVsbCkseT0hMH19fWVsc2V7bi5uZXN0ZWRQcm9wZXJ0eShlLHApLnNldCh1KX19fWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4gYS5nZXRMYXlvdXRWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIGEuZ2V0VHJhY2VWYWxPYmplY3QodCxuLm5lc3RlZFByb3BlcnR5KHt9LGUpLnBhcnRzKX1mdW5jdGlvbiBtKHQsZSxyKXtyZXR1cm4gcj9BcnJheS5pc0FycmF5KHQpP3IrIlsiK2UrIl0iOnIrIi4iK2U6ZX1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWlmKGkodFtlXSkpcmV0dXJuITB9ZnVuY3Rpb24gdih0KXt2YXIgZTtzd2l0Y2godC5jb2RlKXtjYXNlImRhdGEiOmU9IlRoZSB0ZW1wbGF0ZSBoYXMgbm8ga2V5IGRhdGEuIjticmVhaztjYXNlImxheW91dCI6ZT0iVGhlIHRlbXBsYXRlIGhhcyBubyBrZXkgbGF5b3V0LiI7YnJlYWs7Y2FzZSJtaXNzaW5nIjplPXQucGF0aD8iVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgaXRlbSAiK3QucGF0aCsiIHdpdGggbmFtZSAiK3QudGVtcGxhdGVpdGVtbmFtZToiVGhlcmUgYXJlIG5vIHRlbXBsYXRlcyBmb3IgdHJhY2UgIit0LmluZGV4KyIsIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiLiI7YnJlYWs7Y2FzZSJ1bnVzZWQiOmU9dC5wYXRoPyJUaGUgdGVtcGxhdGUgaXRlbSBhdCAiK3QucGF0aCsiIHdhcyBub3QgdXNlZCBpbiBjb25zdHJ1Y3RpbmcgdGhlIHBsb3QuIjp0LmRhdGFDb3VudD8iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgbm90IHVzZWQuIFRoZSB0ZW1wbGF0ZSBoYXMgIit0LnRlbXBsYXRlQ291bnQrIiB0cmFjZXMsIHRoZSBkYXRhIG9ubHkgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIjoiVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcyBvZiB0eXBlICIrdC50cmFjZVR5cGUrIiBidXQgdGhlcmUgYXJlIG5vbmUgaW4gdGhlIGRhdGEuIjticmVhaztjYXNlInJldXNlZCI6ZT0iU29tZSBvZiB0aGUgdGVtcGxhdGVzIG9mIHR5cGUgIit0LnRyYWNlVHlwZSsiIHdlcmUgdXNlZCBtb3JlIHRoYW4gb25jZS4gVGhlIHRlbXBsYXRlIGhhcyAiK3QudGVtcGxhdGVDb3VudCsiIHRyYWNlcywgdGhlIGRhdGEgaGFzICIrdC5kYXRhQ291bnQrIiBvZiB0aGlzIHR5cGUuIn1yZXR1cm4gdC5tc2c9ZSx0fXIubWFrZVRlbXBsYXRlPWZ1bmN0aW9uKHQpe3Q9bi5pc1BsYWluT2JqZWN0KHQpP3Q6bi5nZXRHcmFwaERpdih0KSx0PW4uZXh0ZW5kRGVlcCh7X2NvbnRleHQ6Y30se2RhdGE6dC5kYXRhLGxheW91dDp0LmxheW91dH0pLG8uc3VwcGx5RGVmYXVsdHModCk7dmFyIGU9dC5kYXRhfHxbXSxyPXQubGF5b3V0fHx7fTtyLl9iYXNlUGxvdE1vZHVsZXM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLHIuX21vZHVsZXM9dC5fZnVsbExheW91dC5fbW9kdWxlczt2YXIgYT17ZGF0YTp7fSxsYXlvdXQ6e319O2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9e307aCh0LGUsZC5iaW5kKG51bGwsdCkpO3ZhciByPW4uY29lcmNlKHQse30scywidHlwZSIpLGk9YS5kYXRhW3JdO2l8fChpPWEuZGF0YVtyXT1bXSksaS5wdXNoKGUpfSkpLGgocixhLmxheW91dCxwLmJpbmQobnVsbCxyKSksZGVsZXRlIGEubGF5b3V0LnRlbXBsYXRlO3ZhciBsPXIudGVtcGxhdGU7aWYoaShsKSl7dmFyIGYsbSxnLHYseSx4LGI9bC5sYXlvdXQ7aShiKSYmdShiLGEubGF5b3V0KTt2YXIgXz1sLmRhdGE7aWYoaShfKSl7Zm9yKG0gaW4gYS5kYXRhKWlmKGc9X1ttXSxBcnJheS5pc0FycmF5KGcpKXtmb3IoeD0oeT1hLmRhdGFbbV0pLmxlbmd0aCx2PWcubGVuZ3RoLGY9MDtmPHg7ZisrKXUoZ1tmJXZdLHlbZl0pO2ZvcihmPXg7Zjx2O2YrKyl5LnB1c2gobi5leHRlbmREZWVwKHt9LGdbZl0pKX1mb3IobSBpbiBfKW0gaW4gYS5kYXRhfHwoYS5kYXRhW21dPW4uZXh0ZW5kRGVlcChbXSxfW21dKSl9fXJldHVybiBhfSxyLnZhbGlkYXRlVGVtcGxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmV4dGVuZERlZXAoe30se19jb250ZXh0OmMsZGF0YTp0LmRhdGEsbGF5b3V0OnQubGF5b3V0fSksYT1yLmxheW91dHx8e307aShlKXx8KGU9YS50ZW1wbGF0ZXx8e30pO3ZhciBzPWUubGF5b3V0LGw9ZS5kYXRhLHU9W107ci5sYXlvdXQ9YSxyLmxheW91dC50ZW1wbGF0ZT1lLG8uc3VwcGx5RGVmYXVsdHMocik7dmFyIGg9ci5fZnVsbExheW91dCxwPXIuX2Z1bGxEYXRhLGQ9e307aWYoaShzKT8oIWZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSYmaShlW25dKSl7dmFyIGEsbz1mKG4pLHM9W107Zm9yKGE9MDthPHIubGVuZ3RoO2ErKylzLnB1c2gobShlLG4sclthXSkpLG8hPT1uJiZzLnB1c2gobShlLG8sclthXSkpO2ZvcihhPTA7YTxzLmxlbmd0aDthKyspZFtzW2FdXT0xO3QoZVtuXSxzKX19KGgsWyJsYXlvdXQiXSksZnVuY3Rpb24gdChlLHIpe2Zvcih2YXIgbiBpbiBlKWlmKC0xPT09bi5pbmRleE9mKCJkZWZhdWx0cyIpJiZpKGVbbl0pKXt2YXIgYT1tKGUsbixyKTtkW2FdP3QoZVtuXSxhKTp1LnB1c2goe2NvZGU6InVudXNlZCIscGF0aDphfSl9fShzLCJsYXlvdXQiKSk6dS5wdXNoKHtjb2RlOiJsYXlvdXQifSksaShsKSl7Zm9yKHZhciB5LHg9e30sYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgXz1wW2JdO3hbeT1fLnR5cGVdPSh4W3ldfHwwKSsxLF8uX2Z1bGxJbnB1dC5fdGVtcGxhdGV8fHUucHVzaCh7Y29kZToibWlzc2luZyIsaW5kZXg6Xy5fZnVsbElucHV0LmluZGV4LHRyYWNlVHlwZTp5fSl9Zm9yKHkgaW4gbCl7dmFyIHc9bFt5XS5sZW5ndGgsVD14W3ldfHwwO3c+VD91LnB1c2goe2NvZGU6InVudXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSk6VD53JiZ1LnB1c2goe2NvZGU6InJldXNlZCIsdHJhY2VUeXBlOnksdGVtcGxhdGVDb3VudDp3LGRhdGFDb3VudDpUfSl9fWVsc2UgdS5wdXNoKHtjb2RlOiJkYXRhIn0pO2lmKGZ1bmN0aW9uIHQoZSxyKXtmb3IodmFyIG4gaW4gZSlpZigiXyIhPT1uLmNoYXJBdCgwKSl7dmFyIGE9ZVtuXSxvPW0oZSxuLHIpO2koYSk/KEFycmF5LmlzQXJyYXkoZSkmJiExPT09YS5fdGVtcGxhdGUmJmEudGVtcGxhdGVpdGVtbmFtZSYmdS5wdXNoKHtjb2RlOiJtaXNzaW5nIixwYXRoOm8sdGVtcGxhdGVpdGVtbmFtZTphLnRlbXBsYXRlaXRlbW5hbWV9KSx0KGEsbykpOkFycmF5LmlzQXJyYXkoYSkmJmcoYSkmJnQoYSxvKX19KHtkYXRhOnAsbGF5b3V0Omh9LCIiKSx1Lmxlbmd0aClyZXR1cm4gdS5tYXAodil9fSx7Ii4uL2xpYiI6Nzc2LCIuLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4vcGxvdF9jb25maWciOjgxNCwiLi9wbG90X3NjaGVtYSI6ODE1LCIuL3Bsb3RfdGVtcGxhdGUiOjgxNn1dLDgxOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi9wbG90X2FwaSIpLGE9dCgiLi4vcGxvdHMvcGxvdHMiKSxvPXQoIi4uL2xpYiIpLHM9dCgiLi4vc25hcHNob3QvaGVscGVycyIpLGw9dCgiLi4vc25hcHNob3QvdG9zdmciKSxjPXQoIi4uL3NuYXBzaG90L3N2Z3RvaW1nIiksdT10KCIuLi92ZXJzaW9uIikudmVyc2lvbixmPXtmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBuZyIsImpwZWciLCJ3ZWJwIiwic3ZnIiwiZnVsbC1qc29uIl0sZGZsdDoicG5nIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjF9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixtaW46MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzZXRCYWNrZ3JvdW5kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6ITF9LGltYWdlRGF0YU9ubHk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9fTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixoLHAsZDtmdW5jdGlvbiBtKHQpe3JldHVybiEodCBpbiBlKXx8by52YWxpZGF0ZShlW3RdLGZbdF0pfWlmKGU9ZXx8e30sby5pc1BsYWluT2JqZWN0KHQpPyhyPXQuZGF0YXx8W10saD10LmxheW91dHx8e30scD10LmNvbmZpZ3x8e30sZD17fSk6KHQ9by5nZXRHcmFwaERpdih0KSxyPW8uZXh0ZW5kRGVlcChbXSx0LmRhdGEpLGg9by5leHRlbmREZWVwKHt9LHQubGF5b3V0KSxwPXQuX2NvbnRleHQsZD10Ll9mdWxsTGF5b3V0fHx7fSksIW0oIndpZHRoIikmJm51bGwhPT1lLndpZHRofHwhbSgiaGVpZ2h0IikmJm51bGwhPT1lLmhlaWdodCl0aHJvdyBuZXcgRXJyb3IoIkhlaWdodCBhbmQgd2lkdGggc2hvdWxkIGJlIHBpeGVsIHZhbHVlcy4iKTtpZighbSgiZm9ybWF0IikpdGhyb3cgbmV3IEVycm9yKCJFeHBvcnQgZm9ybWF0IGlzIG5vdCAiK28uam9pbjIoZi5mb3JtYXQudmFsdWVzLCIsICIsIiBvciAiKSsiLiIpO3ZhciBnPXt9O2Z1bmN0aW9uIHYodCxyKXtyZXR1cm4gby5jb2VyY2UoZSxnLGYsdCxyKX12YXIgeT12KCJmb3JtYXQiKSx4PXYoIndpZHRoIiksYj12KCJoZWlnaHQiKSxfPXYoInNjYWxlIiksdz12KCJzZXRCYWNrZ3JvdW5kIiksVD12KCJpbWFnZURhdGFPbmx5Iiksaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtrLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsay5zdHlsZS5sZWZ0PSItNTAwMHB4Iixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGspO3ZhciBBPW8uZXh0ZW5kRmxhdCh7fSxoKTt4P0Eud2lkdGg9eDpudWxsPT09ZS53aWR0aCYmbihkLndpZHRoKSYmKEEud2lkdGg9ZC53aWR0aCksYj9BLmhlaWdodD1iOm51bGw9PT1lLmhlaWdodCYmbihkLmhlaWdodCkmJihBLmhlaWdodD1kLmhlaWdodCk7dmFyIE09by5leHRlbmRGbGF0KHt9LHAse19leHBvcnRlZFBsb3Q6ITAsc3RhdGljUGxvdDohMCxzZXRCYWNrZ3JvdW5kOnd9KSxTPXMuZ2V0UmVkcmF3RnVuYyhrKTtmdW5jdGlvbiBFKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtzZXRUaW1lb3V0KHQscy5nZXREZWxheShrLl9mdWxsTGF5b3V0KSl9KSl9ZnVuY3Rpb24gTCgpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxlKXt2YXIgcj1sKGsseSxfKSxuPWsuX2Z1bGxMYXlvdXQud2lkdGgsZj1rLl9mdWxsTGF5b3V0LmhlaWdodDtmdW5jdGlvbiBoKCl7aS5wdXJnZShrKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGspfWlmKCJmdWxsLWpzb24iPT09eSl7dmFyIHA9YS5ncmFwaEpzb24oaywhMSwia2VlcGRhdGEiLCJvYmplY3QiLCEwLCEwKTtyZXR1cm4gcC52ZXJzaW9uPXUscD1KU09OLnN0cmluZ2lmeShwKSxoKCksdChUP3A6cy5lbmNvZGVKU09OKHApKX1pZihoKCksInN2ZyI9PT15KXJldHVybiB0KFQ/cjpzLmVuY29kZVNWRyhyKSk7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZC5pZD1vLnJhbmRzdHIoKSxjKHtmb3JtYXQ6eSx3aWR0aDpuLGhlaWdodDpmLHNjYWxlOl8sY2FudmFzOmQsc3ZnOnIscHJvbWlzZTohMH0pLnRoZW4odCkuY2F0Y2goZSl9KSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LGUpe2kubmV3UGxvdChrLHIsQSxNKS50aGVuKFMpLnRoZW4oRSkudGhlbihMKS50aGVuKChmdW5jdGlvbihlKXt0KGZ1bmN0aW9uKHQpe3JldHVybiBUP3QucmVwbGFjZShzLklNQUdFX1VSTF9QUkVGSVgsIiIpOnR9KGUpKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7ZSh0KX0pKX0pKX19LHsiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uL3NuYXBzaG90L2hlbHBlcnMiOjkwOCwiLi4vc25hcHNob3Qvc3ZndG9pbWciOjkxMCwiLi4vc25hcHNob3QvdG9zdmciOjkxMiwiLi4vdmVyc2lvbiI6MTM3NywiLi9wbG90X2FwaSI6ODEzLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2xpYiIpLGk9dCgiLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4vcGxvdF9zY2hlbWEiKSxvPXQoIi4vcGxvdF9jb25maWciKS5kZmx0Q29uZmlnLHM9bi5pc1BsYWluT2JqZWN0LGw9QXJyYXkuaXNBcnJheSxjPW4uaXNBcnJheU9yVHlwZWRBcnJheTtmdW5jdGlvbiB1KHQsZSxyLGksYSxvKXtvPW98fFtdO2Zvcih2YXIgZj1PYmplY3Qua2V5cyh0KSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYoInRyYW5zZm9ybXMiIT09cCl7dmFyIHY9by5zbGljZSgpO3YucHVzaChwKTt2YXIgeT10W3BdLHg9ZVtwXSxiPWcocixwKSxfPShifHx7fSkudmFsVHlwZSx3PSJpbmZvX2FycmF5Ij09PV8sVD0iY29sb3JzY2FsZSI9PT1fLGs9KGJ8fHt9KS5pdGVtcztpZihtKHIscCkpaWYocyh5KSYmcyh4KSYmImFueSIhPT1fKXUoeSx4LGIsaSxhLHYpO2Vsc2UgaWYodyYmbCh5KSl7eS5sZW5ndGg+eC5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoeC5sZW5ndGgpKSk7dmFyIEEsTSxTLEUsTCxDPXgubGVuZ3RoLFA9QXJyYXkuaXNBcnJheShrKTtpZihQJiYoQz1NYXRoLm1pbihDLGsubGVuZ3RoKSksMj09PWIuZGltZW5zaW9ucylmb3IoTT0wO008QztNKyspaWYobCh5W01dKSl7eVtNXS5sZW5ndGg+eFtNXS5sZW5ndGgmJmkucHVzaChkKCJ1bnVzZWQiLGEsdi5jb25jYXQoTSx4W01dLmxlbmd0aCkpKTt2YXIgST14W01dLmxlbmd0aDtmb3IoQT0wO0E8KFA/TWF0aC5taW4oSSxrW01dLmxlbmd0aCk6SSk7QSsrKVM9UD9rW01dW0FdOmssRT15W01dW0FdLEw9eFtNXVtBXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSxBKSxFLEwpKTppLnB1c2goZCgidmFsdWUiLGEsdi5jb25jYXQoTSxBKSxFKSl9ZWxzZSBpLnB1c2goZCgiYXJyYXkiLGEsdi5jb25jYXQoTSkseVtNXSkpO2Vsc2UgZm9yKE09MDtNPEM7TSsrKVM9UD9rW01dOmssRT15W01dLEw9eFtNXSxuLnZhbGlkYXRlKEUsUyk/TCE9PUUmJkwhPT0rRSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdi5jb25jYXQoTSksRSxMKSk6aS5wdXNoKGQoInZhbHVlIixhLHYuY29uY2F0KE0pLEUpKX1lbHNlIGlmKGIuaXRlbXMmJiF3JiZsKHkpKXt2YXIgTyx6LEQ9a1tPYmplY3Qua2V5cyhrKVswXV0sUj1bXTtmb3IoTz0wO088eC5sZW5ndGg7TysrKXt2YXIgRj14W09dLl9pbmRleHx8TztpZigoej12LnNsaWNlKCkpLnB1c2goRikscyh5W0ZdKSYmcyh4W09dKSl7Ui5wdXNoKEYpO3ZhciBCPXlbRl0sTj14W09dO3MoQikmJiExIT09Qi52aXNpYmxlJiYhMT09PU4udmlzaWJsZT9pLnB1c2goZCgiaW52aXNpYmxlIixhLHopKTp1KEIsTixELGksYSx6KX19Zm9yKE89MDtPPHkubGVuZ3RoO08rKykoej12LnNsaWNlKCkpLnB1c2goTykscyh5W09dKT8tMT09PVIuaW5kZXhPZihPKSYmaS5wdXNoKGQoInVudXNlZCIsYSx6KSk6aS5wdXNoKGQoIm9iamVjdCIsYSx6LHlbT10pKX1lbHNlIXMoeSkmJnMoeCk/aS5wdXNoKGQoIm9iamVjdCIsYSx2LHkpKTpjKHkpfHwhYyh4KXx8d3x8VD9wIGluIGU/bi52YWxpZGF0ZSh5LGIpPyJlbnVtZXJhdGVkIj09PWIudmFsVHlwZSYmKGIuY29lcmNlTnVtYmVyJiZ5IT09K3h8fHkhPT14KSYmaS5wdXNoKGQoImR5bmFtaWMiLGEsdix5LHgpKTppLnB1c2goZCgidmFsdWUiLGEsdix5KSk6aS5wdXNoKGQoInVudXNlZCIsYSx2LHkpKTppLnB1c2goZCgiYXJyYXkiLGEsdix5KSk7ZWxzZSBpLnB1c2goZCgic2NoZW1hIixhLHYpKX19cmV0dXJuIGl9ZnVuY3Rpb24gZih0LGUpe2Zvcih2YXIgcj10LmxheW91dC5sYXlvdXRBdHRyaWJ1dGVzLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIGE9ZVtpXSxvPXQudHJhY2VzW2EudHlwZV0scz1vLmxheW91dEF0dHJpYnV0ZXM7cyYmKGEuc3VicGxvdD9uLmV4dGVuZEZsYXQocltvLmF0dHJpYnV0ZXMuc3VicGxvdC5kZmx0XSxzKTpuLmV4dGVuZEZsYXQocixzKSl9cmV0dXJuIHJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09dCYmKHQ9W10pLHZvaWQgMD09PWUmJihlPXt9KTt2YXIgcixjLGg9YS5nZXQoKSxwPVtdLG09e19jb250ZXh0Om4uZXh0ZW5kRmxhdCh7fSxvKX07bCh0KT8obS5kYXRhPW4uZXh0ZW5kRGVlcChbXSx0KSxyPXQpOihtLmRhdGE9W10scj1bXSxwLnB1c2goZCgiYXJyYXkiLCJkYXRhIikpKSxzKGUpPyhtLmxheW91dD1uLmV4dGVuZERlZXAoe30sZSksYz1lKToobS5sYXlvdXQ9e30sYz17fSxhcmd1bWVudHMubGVuZ3RoPjEmJnAucHVzaChkKCJvYmplY3QiLCJsYXlvdXQiKSkpLGkuc3VwcGx5RGVmYXVsdHMobSk7Zm9yKHZhciBnPW0uX2Z1bGxEYXRhLHY9ci5sZW5ndGgseT0wO3k8djt5Kyspe3ZhciB4PXJbeV0sYj1bImRhdGEiLHldO2lmKHMoeCkpe3ZhciBfPWdbeV0sdz1fLnR5cGUsVD1oLnRyYWNlc1t3XS5hdHRyaWJ1dGVzO1QudHlwZT17dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt3XX0sITE9PT1fLnZpc2libGUmJiExIT09eC52aXNpYmxlJiZwLnB1c2goZCgiaW52aXNpYmxlIixiKSksdSh4LF8sVCxwLGIpO3ZhciBrPXgudHJhbnNmb3JtcyxBPV8udHJhbnNmb3JtcztpZihrKXtsKGspfHxwLnB1c2goZCgiYXJyYXkiLGIsWyJ0cmFuc2Zvcm1zIl0pKSxiLnB1c2goInRyYW5zZm9ybXMiKTtmb3IodmFyIE09MDtNPGsubGVuZ3RoO00rKyl7dmFyIFM9WyJ0cmFuc2Zvcm1zIixNXSxFPWtbTV0udHlwZTtpZihzKGtbTV0pKXt2YXIgTD1oLnRyYW5zZm9ybXNbRV0/aC50cmFuc2Zvcm1zW0VdLmF0dHJpYnV0ZXM6e307TC50eXBlPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6T2JqZWN0LmtleXMoaC50cmFuc2Zvcm1zKX0sdShrW01dLEFbTV0sTCxwLGIsUyl9ZWxzZSBwLnB1c2goZCgib2JqZWN0IixiLFMpKX19fWVsc2UgcC5wdXNoKGQoIm9iamVjdCIsYikpfXZhciBDPW0uX2Z1bGxMYXlvdXQsUD1mKGgsZyk7cmV0dXJuIHUoYyxDLFAscCwibGF5b3V0IiksMD09PXAubGVuZ3RoP3ZvaWQgMDpwfTt2YXIgaD17b2JqZWN0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuKCJsYXlvdXQiPT09dCYmIiI9PT1lPyJUaGUgbGF5b3V0IGFyZ3VtZW50IjoiZGF0YSI9PT10WzBdJiYiIj09PWU/IlRyYWNlICIrdFsxXSsiIGluIHRoZSBkYXRhIGFyZ3VtZW50IjpwKHQpKyJrZXkgIitlKSsiIG11c3QgYmUgbGlua2VkIHRvIGFuIG9iamVjdCBjb250YWluZXIifSxhcnJheTpmdW5jdGlvbih0LGUpe3JldHVybigiZGF0YSI9PT10PyJUaGUgZGF0YSBhcmd1bWVudCI6cCh0KSsia2V5ICIrZSkrIiBtdXN0IGJlIGxpbmtlZCB0byBhbiBhcnJheSBjb250YWluZXIifSxzY2hlbWE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcCh0KSsia2V5ICIrZSsiIGlzIG5vdCBwYXJ0IG9mIHRoZSBzY2hlbWEifSx1bnVzZWQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMocik/ImNvbnRhaW5lciI6ImtleSI7cmV0dXJuIHAodCkrbisiICIrZSsiIGRpZCBub3QgZ2V0IGNvZXJjZWQifSxkeW5hbWljOmZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybltwKHQpKyJrZXkiLGUsIihzZXQgdG8gJyIrcisiJykiLCJnb3QgcmVzZXQgdG8iLCInIituKyInIiwiZHVyaW5nIGRlZmF1bHRzLiJdLmpvaW4oIiAiKX0saW52aXNpYmxlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU/cCh0KSsiaXRlbSAiK2U6IlRyYWNlICIrdFsxXSkrIiBnb3QgZGVmYXVsdGVkIHRvIGJlIG5vdCB2aXNpYmxlIn0sdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3JldHVybltwKHQpKyJrZXkgIitlLCJpcyBzZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAoIityKyIpIl0uam9pbigiICIpfX07ZnVuY3Rpb24gcCh0KXtyZXR1cm4gbCh0KT8iSW4gZGF0YSB0cmFjZSAiK3RbMV0rIiwgIjoiSW4gIit0KyIsICJ9ZnVuY3Rpb24gZCh0LGUscixpLGEpe3ZhciBvLHM7cj1yfHwiIixsKGUpPyhvPWVbMF0scz1lWzFdKToobz1lLHM9bnVsbCk7dmFyIGM9ZnVuY3Rpb24odCl7aWYoIWwodCkpcmV0dXJuIFN0cmluZyh0KTtmb3IodmFyIGU9IiIscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdOyJudW1iZXIiPT10eXBlb2Ygbj9lPWUuc3Vic3RyKDAsZS5sZW5ndGgtMSkrIlsiK24rIl0iOmUrPW4scjx0Lmxlbmd0aC0xJiYoZSs9Ii4iKX1yZXR1cm4gZX0ociksdT1oW3RdKGUsYyxpLGEpO3JldHVybiBuLmxvZyh1KSx7Y29kZTp0LGNvbnRhaW5lcjpvLHRyYWNlOnMscGF0aDpyLGFzdHI6Yyxtc2c6dX19ZnVuY3Rpb24gbSh0LGUpe3ZhciByPXkoZSksbj1yLmtleU1pbnVzSWQsaT1yLmlkO3JldHVybiEhKG4gaW4gdCYmdFtuXS5faXNTdWJwbG90T2JqJiZpKXx8ZSBpbiB0fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gZSBpbiB0P3RbZV06dFt5KGUpLmtleU1pbnVzSWRdfXZhciB2PW4uY291bnRlclJlZ2V4KCIoW2Etel0rKSIpO2Z1bmN0aW9uIHkodCl7dmFyIGU9dC5tYXRjaCh2KTtyZXR1cm57a2V5TWludXNJZDplJiZlWzFdLGlkOmUmJmVbMl19fX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi9wbG90X2NvbmZpZyI6ODE0LCIuL3Bsb3Rfc2NoZW1hIjo4MTV9XSw4MjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhZnRlcmFsbCIsdmFsdWVzOlsiaW1tZWRpYXRlIiwibmV4dCIsImFmdGVyYWxsIl19LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZm9yd2FyZCIsInJldmVyc2UiXSxkZmx0OiJmb3J3YXJkIn0sZnJvbWN1cnJlbnQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZyYW1lOntkdXJhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUwMH0scmVkcmF3Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfX0sdHJhbnNpdGlvbjp7ZHVyYXRpb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo1MDAsZWRpdFR5cGU6Im5vbmUifSxlYXNpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImN1YmljLWluLW91dCIsdmFsdWVzOlsibGluZWFyIiwicXVhZCIsImN1YmljIiwic2luIiwiZXhwIiwiY2lyY2xlIiwiZWxhc3RpYyIsImJhY2siLCJib3VuY2UiLCJsaW5lYXItaW4iLCJxdWFkLWluIiwiY3ViaWMtaW4iLCJzaW4taW4iLCJleHAtaW4iLCJjaXJjbGUtaW4iLCJlbGFzdGljLWluIiwiYmFjay1pbiIsImJvdW5jZS1pbiIsImxpbmVhci1vdXQiLCJxdWFkLW91dCIsImN1YmljLW91dCIsInNpbi1vdXQiLCJleHAtb3V0IiwiY2lyY2xlLW91dCIsImVsYXN0aWMtb3V0IiwiYmFjay1vdXQiLCJib3VuY2Utb3V0IiwibGluZWFyLWluLW91dCIsInF1YWQtaW4tb3V0IiwiY3ViaWMtaW4tb3V0Iiwic2luLWluLW91dCIsImV4cC1pbi1vdXQiLCJjaXJjbGUtaW4tb3V0IiwiZWxhc3RpYy1pbi1vdXQiLCJiYWNrLWluLW91dCIsImJvdW5jZS1pbi1vdXQiXSxlZGl0VHlwZToibm9uZSJ9LG9yZGVyaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsYXlvdXQgZmlyc3QiLCJ0cmFjZXMgZmlyc3QiXSxkZmx0OiJsYXlvdXQgZmlyc3QiLGVkaXRUeXBlOiJub25lIn19fX0se31dLDgyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scz1yLm5hbWUsbD1yLmluY2x1c2lvbkF0dHJ8fCJ2aXNpYmxlIixjPWVbc10sdT1uLmlzQXJyYXlPclR5cGVkQXJyYXkodFtzXSk/dFtzXTpbXSxmPWVbc109W10saD1pLmFycmF5VGVtcGxhdGVyKGUscyxsKTtmb3IoYT0wO2E8dS5sZW5ndGg7YSsrKXt2YXIgcD11W2FdO24uaXNQbGFpbk9iamVjdChwKT9vPWgubmV3SXRlbShwKToobz1oLm5ld0l0ZW0oe30pKVtsXT0hMSxvLl9pbmRleD1hLCExIT09b1tsXSYmci5oYW5kbGVJdGVtRGVmYXVsdHMocCxvLGUsciksZi5wdXNoKG8pfXZhciBkPWguZGVmYXVsdEl0ZW1zKCk7Zm9yKGE9MDthPGQubGVuZ3RoO2ErKykobz1kW2FdKS5faW5kZXg9Zi5sZW5ndGgsci5oYW5kbGVJdGVtRGVmYXVsdHMoe30sbyxlLHIse30pLGYucHVzaChvKTtpZihuLmlzQXJyYXlPclR5cGVkQXJyYXkoYykpe3ZhciBtPU1hdGgubWluKGMubGVuZ3RoLGYubGVuZ3RoKTtmb3IoYT0wO2E8bTthKyspbi5yZWxpbmtQcml2YXRlS2V5cyhmW2FdLGNbYV0pfXJldHVybiBmfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2fV0sODIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vZm9udF9hdHRyaWJ1dGVzIiksaT10KCIuLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXSxkZmx0OiJzY2F0dGVyIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsX25vVGVtcGxhdGluZzohMH0sdmlzaWJsZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwhMSwibGVnZW5kb25seSJdLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxzaG93bGVnZW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZGdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InN0eWxlIn0sbGVnZW5kZ3JvdXB0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJzdHlsZSJ9LGZvbnQ6bih7ZWRpdFR5cGU6InN0eWxlIn0pLGVkaXRUeXBlOiJzdHlsZSJ9LGxlZ2VuZHJhbms6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxZTMsZWRpdFR5cGU6InN0eWxlIn0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjEsZWRpdFR5cGU6InN0eWxlIn0sbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToic3R5bGUifSx1aWQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6InBsb3QiLGFuaW06ITB9LGlkczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGN1c3RvbWRhdGE6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbWV0YTp7dmFsVHlwZToiYW55IixhcnJheU9rOiEwLGVkaXRUeXBlOiJwbG90In0sc2VsZWN0ZWRwb2ludHM6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcmluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5IiwieiIsInRleHQiLCJuYW1lIl0sZXh0cmFzOlsiYWxsIiwibm9uZSIsInNraXAiXSxhcnJheU9rOiEwLGRmbHQ6ImFsbCIsZWRpdFR5cGU6Im5vbmUifSxob3ZlcmxhYmVsOmkuaG92ZXJsYWJlbCxzdHJlYW06e3Rva2VuOnt2YWxUeXBlOiJzdHJpbmciLG5vQmxhbms6ITAsc3RyaWN0OiEwLGVkaXRUeXBlOiJjYWxjIn0sbWF4cG9pbnRzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxZTQsZGZsdDo1MDAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6e19pc0xpbmtlZFRvQXJyYXk6InRyYW5zZm9ybSIsZWRpdFR5cGU6ImNhbGMifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19fSx7Ii4uL2NvbXBvbmVudHMvZngvYXR0cmlidXRlcyI6NjcwLCIuL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sODI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPWkuZGF0ZVRpbWUybXMsbz1pLmluY3JlbWVudE1vbnRoLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLk9ORUFWR01PTlRIO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZigiZGF0ZSIhPT1lLnR5cGUpcmV0dXJue3ZhbHM6aX07dmFyIGw9dFtyKyJwZXJpb2RhbGlnbm1lbnQiXTtpZighbClyZXR1cm57dmFsczppfTt2YXIgYyx1PXRbcisicGVyaW9kIl07aWYobih1KSl7aWYoKHU9K3UpPD0wKXJldHVybnt2YWxzOml9fWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB1JiYiTSI9PT11LmNoYXJBdCgwKSl7dmFyIGY9K3Uuc3Vic3RyaW5nKDEpO2lmKCEoZj4wJiZNYXRoLnJvdW5kKGYpPT09ZikpcmV0dXJue3ZhbHM6aX07Yz1mfWZvcih2YXIgaD1lLmNhbGVuZGFyLHA9InN0YXJ0Ij09PWwsZD0iZW5kIj09PWwsbT10W3IrInBlcmlvZDAiXSxnPWEobSxoKXx8MCx2PVtdLHk9W10seD1bXSxiPWkubGVuZ3RoLF89MDtfPGI7XysrKXt2YXIgdyxULGssQT1pW19dO2lmKGMpe2Zvcih3PU1hdGgucm91bmQoKEEtZykvKGMqcykpLGs9byhnLGMqdyxoKTtrPkE7KWs9byhrLC1jLGgpO2Zvcig7azw9QTspaz1vKGssYyxoKTtUPW8oaywtYyxoKX1lbHNle2ZvcihrPWcrKHc9TWF0aC5yb3VuZCgoQS1nKS91KSkqdTtrPkE7KWstPXU7Zm9yKDtrPD1BOylrKz11O1Q9ay11fXZbX109cD9UOmQ/azooVCtrKS8yLHlbX109VCx4W19dPWt9cmV0dXJue3ZhbHM6dixzdGFydHM6eSxlbmRzOnh9fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17eGF4aXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoieCIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5YXhpczp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9fX0se31dLDgyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuRlBfU0FGRSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4vYXhpc19pZHMiKSx1PWMuZ2V0RnJvbUlkLGY9Yy5pc0xpbmtlZDtmdW5jdGlvbiBoKHQsZSl7dmFyIHIsbixpPVtdLG89dC5fZnVsbExheW91dCxzPWQobyxlLDApLGw9ZChvLGUsMSksYz1tKHQsZSksdT1jLm1pbixmPWMubWF4O2lmKDA9PT11Lmxlbmd0aHx8MD09PWYubGVuZ3RoKXJldHVybiBhLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2YXIgaD11WzBdLnZhbCxnPWZbMF0udmFsO2ZvcihyPTE7cjx1Lmxlbmd0aCYmaD09PWc7cisrKWg9TWF0aC5taW4oaCx1W3JdLnZhbCk7Zm9yKHI9MTtyPGYubGVuZ3RoJiZoPT09ZztyKyspZz1NYXRoLm1heChnLGZbcl0udmFsKTt2YXIgdj0hMTtpZihlLnJhbmdlKXt2YXIgeT1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTt2PXlbMV08eVswXX0icmV2ZXJzZWQiPT09ZS5hdXRvcmFuZ2UmJih2PSEwLGUuYXV0b3JhbmdlPSEwKTt2YXIgeCxiLF8sdyxULGssQT1lLnJhbmdlbW9kZSxNPSJ0b3plcm8iPT09QSxTPSJub25uZWdhdGl2ZSI9PT1BLEU9ZS5fbGVuZ3RoLEw9RS8xMCxDPTA7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKylmb3IoeD11W3JdLG49MDtuPGYubGVuZ3RoO24rKykoaz0oYj1mW25dKS52YWwteC52YWwtcChlLHgudmFsLGIudmFsKSk+MCYmKChUPUUtcyh4KS1sKGIpKT5MP2svVD5DJiYoXz14LHc9YixDPWsvVCk6ay9FPkMmJihfPXt2YWw6eC52YWwsbm9wYWQ6MX0sdz17dmFsOmIudmFsLG5vcGFkOjF9LEM9ay9FKSk7aWYoaD09PWcpe3ZhciBQPWgtMSxJPWgrMTtpZihNKWlmKDA9PT1oKWk9WzAsMV07ZWxzZXt2YXIgTz0oaD4wP2Y6dSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGwoZSkpfSksMCksej1oLygxLU1hdGgubWluKC41LE8vRSkpO2k9aD4wP1swLHpdOlt6LDBdfWVsc2UgaT1TP1tNYXRoLm1heCgwLFApLE1hdGgubWF4KDEsSSldOltQLEldfWVsc2UgTT8oXy52YWw+PTAmJihfPXt2YWw6MCxub3BhZDoxfSksdy52YWw8PTAmJih3PXt2YWw6MCxub3BhZDoxfSkpOlMmJihfLnZhbC1DKnMoXyk8MCYmKF89e3ZhbDowLG5vcGFkOjF9KSx3LnZhbDw9MCYmKHc9e3ZhbDoxLG5vcGFkOjF9KSksQz0ody52YWwtXy52YWwtcChlLHgudmFsLGIudmFsKSkvKEUtcyhfKS1sKHcpKSxpPVtfLnZhbC1DKnMoXyksdy52YWwrQypsKHcpXTtyZXR1cm4gdiYmaS5yZXZlcnNlKCksYS5zaW1wbGVNYXAoaSxlLmwycnx8TnVtYmVyKX1mdW5jdGlvbiBwKHQsZSxyKXt2YXIgbj0wO2lmKHQucmFuZ2VicmVha3MpZm9yKHZhciBpPXQubG9jYXRlQnJlYWtzKGUsciksYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdO24rPW8ubWF4LW8ubWlufXJldHVybiBufWZ1bmN0aW9uIGQodCxlLHIpe3ZhciBpPS4wNSplLl9sZW5ndGgsbz1lLl9hbmNob3JBeGlzfHx7fTtpZigtMSE9PShlLnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIil8fC0xIT09KG8udGlja2xhYmVscG9zaXRpb258fCIiKS5pbmRleE9mKCJpbnNpZGUiKSl7dmFyIHM9InJldmVyc2VkIj09PWUuYXV0b3JhbmdlO2lmKCFzKXt2YXIgYz1hLnNpbXBsZU1hcChlLnJhbmdlLGUucjJsKTtzPWNbMV08Y1swXX1zJiYocj0hcil9dmFyIHU9MDtyZXR1cm4gZih0LGUuX2lkKXx8KHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPTAsbz0ieCI9PT1lLl9pZC5jaGFyQXQoMCk7Zm9yKHZhciBzIGluIHQuX3Bsb3RzKXt2YXIgYz10Ll9wbG90c1tzXTtpZihlLl9pZD09PWMueGF4aXMuX2lkfHxlLl9pZD09PWMueWF4aXMuX2lkKXt2YXIgdT0obz9jLnlheGlzOmMueGF4aXMpfHx7fTtpZigtMSE9PSh1LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIikmJighciYmKCJsZWZ0Ij09PXUuc2lkZXx8ImJvdHRvbSI9PT11LnNpZGUpfHxyJiYoInRvcCI9PT11LnNpZGV8fCJyaWdodCI9PT11LnNpZGUpKSl7aWYodS5fdmFscyl7dmFyIGY9YS5kZWcycmFkKHUuX3RpY2tBbmdsZXNbdS5faWQrInRpY2siXXx8MCksaD1NYXRoLmFicyhNYXRoLmNvcyhmKSkscD1NYXRoLmFicyhNYXRoLnNpbihmKSk7aWYoIXUuX3ZhbHNbMF0uYmIpe3ZhciBkPXUuX2lkKyJ0aWNrIjt1Ll9zZWxlY3Rpb25zW2RdLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO2Uuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSYmKHQuYmI9bC5iQm94KGUubm9kZSgpKSl9KSl9Zm9yKHZhciBtPTA7bTx1Ll92YWxzLmxlbmd0aDttKyspe3ZhciBnPXUuX3ZhbHNbbV0uYmI7aWYoZyl7dmFyIHY9NitnLndpZHRoLHk9NitnLmhlaWdodDtpPU1hdGgubWF4KGksbz9NYXRoLm1heCh2KmgseSpwKTpNYXRoLm1heCh5KmgsdipwKSl9fX0iaW5zaWRlIj09PXUudGlja3MmJiJpbnNpZGUiPT09dS50aWNrbGFiZWxwb3NpdGlvbiYmKGkrPXUudGlja2xlbnx8MCl9fX1yZXR1cm4gaX0odCxlLHIpKSxpPU1hdGgubWF4KHUsaSksImRvbWFpbiI9PT1lLmNvbnN0cmFpbiYmZS5faW5wdXREb21haW4mJihpKj0oZS5faW5wdXREb21haW5bMV0tZS5faW5wdXREb21haW5bMF0pLyhlLmRvbWFpblsxXS1lLmRvbWFpblswXSkpLGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vcGFkPzA6dC5wYWQrKHQuZXh0cmFwYWQ/aTp1KX19ZS5leHBvcnRzPXtnZXRBdXRvUmFuZ2U6aCxtYWtlUGFkRm46ZCxkb0F1dG9SYW5nZTpmdW5jdGlvbih0LGUscil7aWYoZS5zZXRTY2FsZSgpLGUuYXV0b3JhbmdlKXtlLnJhbmdlPXI/ci5zbGljZSgpOmgodCxlKSxlLl9yPWUucmFuZ2Uuc2xpY2UoKSxlLl9ybD1hLnNpbXBsZU1hcChlLl9yLGUucjJsKTt2YXIgbj1lLl9pbnB1dCxpPXt9O2lbZS5fYXR0cisiLnJhbmdlIl09ZS5yYW5nZSxpW2UuX2F0dHIrIi5hdXRvcmFuZ2UiXT1lLmF1dG9yYW5nZSxzLmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQubGF5b3V0LHQuX2Z1bGxMYXlvdXQuX3ByZUdVSSxpKSxuLnJhbmdlPWUucmFuZ2Uuc2xpY2UoKSxuLmF1dG9yYW5nZT1lLmF1dG9yYW5nZX12YXIgbz1lLl9hbmNob3JBeGlzO2lmKG8mJm8ucmFuZ2VzbGlkZXIpe3ZhciBsPW8ucmFuZ2VzbGlkZXJbZS5fbmFtZV07bCYmImF1dG8iPT09bC5yYW5nZW1vZGUmJihsLnJhbmdlPWgodCxlKSksby5faW5wdXQucmFuZ2VzbGlkZXJbZS5fbmFtZV09YS5leHRlbmRGbGF0KHt9LGwpfX0sZmluZEV4dHJlbWVzOmZ1bmN0aW9uKHQsZSxyKXtyfHwocj17fSk7dC5fbXx8dC5zZXRTY2FsZSgpO3ZhciBuLGEscyxsLGMsdSxmLGgscCxkPVtdLG09W10seT1lLmxlbmd0aCxiPXIucGFkZGVkfHwhMSxfPXIudG96ZXJvJiYoImxpbmVhciI9PT10LnR5cGV8fCItIj09PXQudHlwZSksdz0ibG9nIj09PXQudHlwZSxUPSExLGs9ci52cGFkTGluZWFyaXplZHx8ITE7ZnVuY3Rpb24gQSh0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBUPSEwLGZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLm1heChOdW1iZXIodFtlXXx8MCksMCl9O3ZhciBlPU1hdGgubWF4KE51bWJlcih0fHwwKSwwKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZX19dmFyIE09QSgodC5fbT4wP3IucHBhZHBsdXM6ci5wcGFkbWludXMpfHxyLnBwYWR8fDApLFM9QSgodC5fbT4wP3IucHBhZG1pbnVzOnIucHBhZHBsdXMpfHxyLnBwYWR8fDApLEU9QShyLnZwYWRwbHVzfHxyLnZwYWQpLEw9QShyLnZwYWRtaW51c3x8ci52cGFkKTtpZighVCl7aWYoaD0xLzAscD0tMS8wLHcpZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+MCYmKGg9YSksYT5wJiZhPG8mJihwPWEpO2Vsc2UgZm9yKG49MDtuPHk7bisrKShhPWVbbl0pPGgmJmE+LW8mJihoPWEpLGE+cCYmYTxvJiYocD1hKTtlPVtoLHBdLHk9Mn12YXIgQz17dG96ZXJvOl8sZXh0cmFwYWQ6Yn07ZnVuY3Rpb24gUChyKXtzPWVbcl0saShzKSYmKHU9TShyKSxmPVMociksaz8obD10LmMybChzKS1MKHIpLGM9dC5jMmwocykrRShyKSk6KGg9cy1MKHIpLHA9cytFKHIpLHcmJmg8cC8xMCYmKGg9cC8xMCksbD10LmMybChoKSxjPXQuYzJsKHApKSxfJiYobD1NYXRoLm1pbigwLGwpLGM9TWF0aC5tYXgoMCxjKSkseChsKSYmZyhkLGwsZixDKSx4KGMpJiZ2KG0sYyx1LEMpKX12YXIgST1NYXRoLm1pbig2LHkpO2ZvcihuPTA7bjxJO24rKylQKG4pO2ZvcihuPXktMTtuPj1JO24tLSlQKG4pO3JldHVybnttaW46ZCxtYXg6bSxvcHRzOnJ9fSxjb25jYXRFeHRyZW1lczptfTtmdW5jdGlvbiBtKHQsZSxyKXt2YXIgbixpLGEsbz1lLl9pZCxzPXQuX2Z1bGxEYXRhLGw9dC5fZnVsbExheW91dCxjPVtdLGY9W107ZnVuY3Rpb24gaCh0LGUpe2ZvcihuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPXRbZVtuXV0scz0oci5fZXh0cmVtZXN8fHt9KVtvXTtpZighMD09PXIudmlzaWJsZSYmcyl7Zm9yKGk9MDtpPHMubWluLmxlbmd0aDtpKyspYT1zLm1pbltpXSxnKGMsYS52YWwsYS5wYWQse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8cy5tYXgubGVuZ3RoO2krKylhPXMubWF4W2ldLHYoZixhLnZhbCxhLnBhZCx7ZXh0cmFwYWQ6YS5leHRyYXBhZH0pfX19aWYoaChzLGUuX3RyYWNlSW5kaWNlcyksaChsLmFubm90YXRpb25zfHxbXSxlLl9hbm5JbmRpY2VzfHxbXSksaChsLnNoYXBlc3x8W10sZS5fc2hhcGVJbmRpY2VzfHxbXSksZS5fbWF0Y2hHcm91cCYmIXIpZm9yKHZhciBwIGluIGUuX21hdGNoR3JvdXApaWYocCE9PWUuX2lkKXt2YXIgZD11KHQscCkseT1tKHQsZCwhMCkseD1lLl9sZW5ndGgvZC5fbGVuZ3RoO2ZvcihpPTA7aTx5Lm1pbi5sZW5ndGg7aSsrKWE9eS5taW5baV0sZyhjLGEudmFsLGEucGFkKngse2V4dHJhcGFkOmEuZXh0cmFwYWR9KTtmb3IoaT0wO2k8eS5tYXgubGVuZ3RoO2krKylhPXkubWF4W2ldLHYoZixhLnZhbCxhLnBhZCp4LHtleHRyYXBhZDphLmV4dHJhcGFkfSl9cmV0dXJue21pbjpjLG1heDpmfX1mdW5jdGlvbiBnKHQsZSxyLG4pe3kodCxlLHIsbixiKX1mdW5jdGlvbiB2KHQsZSxyLG4pe3kodCxlLHIsbixfKX1mdW5jdGlvbiB5KHQsZSxyLG4saSl7Zm9yKHZhciBhPW4udG96ZXJvLG89bi5leHRyYXBhZCxzPSEwLGw9MDtsPHQubGVuZ3RoJiZzO2wrKyl7dmFyIGM9dFtsXTtpZihpKGMudmFsLGUpJiZjLnBhZD49ciYmKGMuZXh0cmFwYWR8fCFvKSl7cz0hMTticmVha31pKGUsYy52YWwpJiZjLnBhZDw9ciYmKG98fCFjLmV4dHJhcGFkKSYmKHQuc3BsaWNlKGwsMSksbC0tKX1pZihzKXt2YXIgdT1hJiYwPT09ZTt0LnB1c2goe3ZhbDplLHBhZDp1PzA6cixleHRyYXBhZDohdSYmb30pfX1mdW5jdGlvbiB4KHQpe3JldHVybiBpKHQpJiZNYXRoLmFicyh0KTxvfWZ1bmN0aW9uIGIodCxlKXtyZXR1cm4gdDw9ZX1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIHQ+PWV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfaWRzIjo4MzEsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9wbG90cy9wbG90cyIpLG89dCgiLi4vLi4vcmVnaXN0cnkiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxkPXQoIi4vY2xlYW5fdGlja3MiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxnPW0uT05FTUFYWUVBUix2PW0uT05FQVZHWUVBUix5PW0uT05FTUlOWUVBUix4PW0uT05FTUFYUVVBUlRFUixiPW0uT05FQVZHUVVBUlRFUixfPW0uT05FTUlOUVVBUlRFUix3PW0uT05FTUFYTU9OVEgsVD1tLk9ORUFWR01PTlRILGs9bS5PTkVNSU5NT05USCxBPW0uT05FV0VFSyxNPW0uT05FREFZLFM9TS8yLEU9bS5PTkVIT1VSLEw9bS5PTkVNSU4sQz1tLk9ORVNFQyxQPW0uTUlOVVNfU0lHTixJPW0uQkFETlVNLE89e0s6Inplcm9saW5lIn0sej17SzoiZ3JpZGxpbmUiLEw6InBhdGgifSxEPXtLOiJ0aWNrIixMOiJwYXRoIn0sUj17SzoidGljayIsTDoidGV4dCJ9LEY9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLEI9Ri5NSURfU0hJRlQsTj1GLkNBUF9TSElGVCxqPUYuTElORV9TUEFDSU5HLFU9Ri5PUFBPU0lURV9TSURFLFY9ZS5leHBvcnRzPXt9O1Yuc2V0Q29udmVydD10KCIuL3NldF9jb252ZXJ0Iik7dmFyIEg9dCgiLi9heGlzX2F1dG90eXBlIikscT10KCIuL2F4aXNfaWRzIiksRz1xLmlkU29ydCxZPXEuaXNMaW5rZWQ7Vi5pZDJuYW1lPXEuaWQybmFtZSxWLm5hbWUyaWQ9cS5uYW1lMmlkLFYuY2xlYW5JZD1xLmNsZWFuSWQsVi5saXN0PXEubGlzdCxWLmxpc3RJZHM9cS5saXN0SWRzLFYuZ2V0RnJvbUlkPXEuZ2V0RnJvbUlkLFYuZ2V0RnJvbVRyYWNlPXEuZ2V0RnJvbVRyYWNlO3ZhciBXPXQoIi4vYXV0b3JhbmdlIik7Vi5nZXRBdXRvUmFuZ2U9Vy5nZXRBdXRvUmFuZ2UsVi5maW5kRXh0cmVtZXM9Vy5maW5kRXh0cmVtZXM7ZnVuY3Rpb24gWCh0KXt2YXIgZT0xZS00Kih0WzFdLXRbMF0pO3JldHVyblt0WzBdLWUsdFsxXStlXX1WLmNvZXJjZVJlZj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89bi5jaGFyQXQobi5sZW5ndGgtMSksbD1yLl9mdWxsTGF5b3V0Ll9zdWJwbG90c1tvKyJheGlzIl0sYz1uKyJyZWYiLHU9e307cmV0dXJuIGl8fChpPWxbMF18fCgic3RyaW5nIj09dHlwZW9mIGE/YTphWzBdKSksYXx8KGE9aSksbD1sLmNvbmNhdChsLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQrIiBkb21haW4ifSkpKSx1W2NdPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6bC5jb25jYXQoYT8ic3RyaW5nIj09dHlwZW9mIGE/W2FdOmE6W10pLGRmbHQ6aX0scy5jb2VyY2UodCxlLHUsYyl9LFYuZ2V0UmVmVHlwZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD90OiJwYXBlciI9PT10PyJwYXBlciI6InBpeGVsIj09PXQ/InBpeGVsIjovKCBkb21haW4pJC8udGVzdCh0KT8iZG9tYWluIjoicmFuZ2UifSxWLmNvZXJjZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxyLG4saSxhKXt2YXIgbyxsO2lmKCJyYW5nZSIhPT1WLmdldFJlZlR5cGUobikpbz1zLmVuc3VyZU51bWJlcixsPXIoaSxhKTtlbHNle3ZhciBjPVYuZ2V0RnJvbUlkKGUsbik7bD1yKGksYT1jLmZyYWN0aW9uMnIoYSkpLG89Yy5jbGVhblBvc310W2ldPW8obCl9LFYuY2xlYW5Qb3NpdGlvbj1mdW5jdGlvbih0LGUscil7cmV0dXJuKCJwYXBlciI9PT1yfHwicGl4ZWwiPT09cj9zLmVuc3VyZU51bWJlcjpWLmdldEZyb21JZChlLHIpLmNsZWFuUG9zKSh0KX0sVi5yZWRyYXdDb21wb25lbnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHxWLmxpc3RJZHModCk7dmFyIHI9dC5fZnVsbExheW91dDtmdW5jdGlvbiBuKG4saSxhLHMpe2Zvcih2YXIgbD1vLmdldENvbXBvbmVudE1ldGhvZChuLGkpLGM9e30sdT0wO3U8ZS5sZW5ndGg7dSsrKWZvcih2YXIgZj1yW1YuaWQybmFtZShlW3VdKV1bYV0saD0wO2g8Zi5sZW5ndGg7aCsrKXt2YXIgcD1mW2hdO2lmKCFjW3BdJiYobCh0LHApLGNbcF09MSxzKSlyZXR1cm59fW4oImFubm90YXRpb25zIiwiZHJhd09uZSIsIl9hbm5JbmRpY2VzIiksbigic2hhcGVzIiwiZHJhd09uZSIsIl9zaGFwZUluZGljZXMiKSxuKCJpbWFnZXMiLCJkcmF3IiwiX2ltZ0luZGljZXMiLCEwKX07dmFyIFo9Vi5nZXREYXRhQ29udmVyc2lvbnM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT0ieCI9PT1yfHwieSI9PT1yfHwieiI9PT1yP3I6bjtpZihBcnJheS5pc0FycmF5KGEpKXtpZihpPXt0eXBlOkgobix2b2lkIDAse2F1dG90eXBlbnVtYmVyczp0Ll9mdWxsTGF5b3V0LmF1dG90eXBlbnVtYmVyc30pLF9jYXRlZ29yaWVzOltdfSxWLnNldENvbnZlcnQoaSksImNhdGVnb3J5Ij09PWkudHlwZSlmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKylpLmQyYyhuW29dKX1lbHNlIGk9Vi5nZXRGcm9tVHJhY2UodCxlLGEpO3JldHVybiBpP3tkMmM6aS5kMmMsYzJkOmkuYzJkfToiaWRzIj09PWE/e2QyYzpLLGMyZDpLfTp7ZDJjOkosYzJkOkp9fTtmdW5jdGlvbiBKKHQpe3JldHVybit0fWZ1bmN0aW9uIEsodCl7cmV0dXJuIFN0cmluZyh0KX1mdW5jdGlvbiBRKHQpe3JldHVybit0LnN1YnN0cmluZygxKX1WLmdldERhdGFUb0Nvb3JkRnVuYz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gWih0LGUscixuKS5kMmN9LFYuY291bnRlckxldHRlcj1mdW5jdGlvbih0KXt2YXIgZT10LmNoYXJBdCgwKTtyZXR1cm4ieCI9PT1lPyJ5IjoieSI9PT1lPyJ4Ijp2b2lkIDB9LFYubWluRHRpY2s9ZnVuY3Rpb24odCxlLHIsbil7LTE9PT1bImxvZyIsImNhdGVnb3J5IiwibXVsdGljYXRlZ29yeSJdLmluZGV4T2YodC50eXBlKSYmbj92b2lkIDA9PT10Ll9taW5EdGljaz8odC5fbWluRHRpY2s9ZSx0Ll9mb3JjZVRpY2swPXIpOnQuX21pbkR0aWNrJiYoKHQuX21pbkR0aWNrL2UrMWUtNiklMTwyZS02JiYoKHItdC5fZm9yY2VUaWNrMCkvZSUxKzEuMDAwMDAxKSUxPDJlLTY/KHQuX21pbkR0aWNrPWUsdC5fZm9yY2VUaWNrMD1yKTooKGUvdC5fbWluRHRpY2srMWUtNiklMT4yZS02fHwoKHItdC5fZm9yY2VUaWNrMCkvdC5fbWluRHRpY2slMSsxLjAwMDAwMSklMT4yZS02KSYmKHQuX21pbkR0aWNrPTApKTp0Ll9taW5EdGljaz0wfSxWLnNhdmVSYW5nZUluaXRpYWw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9Vi5saXN0KHQsIiIsITApLG49ITEsaT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89dm9pZCAwPT09YS5fcmFuZ2VJbml0aWFsLHM9b3x8IShhLnJhbmdlWzBdPT09YS5fcmFuZ2VJbml0aWFsWzBdJiZhLnJhbmdlWzFdPT09YS5fcmFuZ2VJbml0aWFsWzFdKTsobyYmITE9PT1hLmF1dG9yYW5nZXx8ZSYmcykmJihhLl9yYW5nZUluaXRpYWw9YS5yYW5nZS5zbGljZSgpLG49ITApfXJldHVybiBufSxWLnNhdmVTaG93U3Bpa2VJbml0aWFsPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVYubGlzdCh0LCIiLCEwKSxuPSExLGk9Im9uIixhPTA7YTxyLmxlbmd0aDthKyspe3ZhciBvPXJbYV0scz12b2lkIDA9PT1vLl9zaG93U3Bpa2VJbml0aWFsLGw9c3x8IShvLnNob3dzcGlrZXM9PT1vLl9zaG93c3Bpa2VzKTsoc3x8ZSYmbCkmJihvLl9zaG93U3Bpa2VJbml0aWFsPW8uc2hvd3NwaWtlcyxuPSEwKSwib24iIT09aXx8by5zaG93c3Bpa2VzfHwoaT0ib2ZmIil9cmV0dXJuIHQuX2Z1bGxMYXlvdXQuX2NhcnRlc2lhblNwaWtlc0VuYWJsZWQ9aSxufSxWLmF1dG9CaW49ZnVuY3Rpb24odCxlLHIsbixhLG8pe3ZhciBsLGM9cy5hZ2dOdW1zKE1hdGgubWluLG51bGwsdCksdT1zLmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KTtpZigiY2F0ZWdvcnkiPT09ZS50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpcmV0dXJue3N0YXJ0OmMtLjUsZW5kOnUrLjUsc2l6ZTpNYXRoLm1heCgxLE1hdGgucm91bmQobyl8fDEpLF9kYXRhU3Bhbjp1LWN9O2lmKGF8fChhPWUuY2FsZW5kYXIpLGw9ImxvZyI9PT1lLnR5cGU/e3R5cGU6ImxpbmVhciIscmFuZ2U6W2MsdV19Ont0eXBlOmUudHlwZSxyYW5nZTpzLnNpbXBsZU1hcChbYyx1XSxlLmMyciwwLGEpLGNhbGVuZGFyOmF9LFYuc2V0Q29udmVydChsKSxvPW8mJmQuZHRpY2sobyxsLnR5cGUpKWwuZHRpY2s9byxsLnRpY2swPWQudGljazAodm9pZCAwLGwudHlwZSxhKTtlbHNle3ZhciBmO2lmKHIpZj0odS1jKS9yO2Vsc2V7dmFyIGg9cy5kaXN0aW5jdFZhbHModCkscD1NYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKGgubWluRGlmZikvTWF0aC5MTjEwKSksbT1wKnMucm91bmRVcChoLm1pbkRpZmYvcCxbLjksMS45LDQuOSw5LjldLCEwKTtmPU1hdGgubWF4KG0sMipzLnN0ZGV2KHQpL01hdGgucG93KHQubGVuZ3RoLG4/LjI1Oi40KSksaShmKXx8KGY9MSl9Vi5hdXRvVGlja3MobCxmKX12YXIgZyx2PWwuZHRpY2sseT1WLnRpY2tJbmNyZW1lbnQoVi50aWNrRmlyc3QobCksdiwicmV2ZXJzZSIsYSk7aWYoIm51bWJlciI9PXR5cGVvZiB2KWc9KHk9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbz0wLHM9MCxsPTAsYz0wO2Z1bmN0aW9uIHUoZSl7cmV0dXJuKDErMTAwKihlLXQpL3IuZHRpY2spJTEwMDwyfWZvcih2YXIgZj0wO2Y8ZS5sZW5ndGg7ZisrKWVbZl0lMT09MD9sKys6aShlW2ZdKXx8YysrLHUoZVtmXSkmJm8rKyx1KGVbZl0rci5kdGljay8yKSYmcysrO3ZhciBoPWUubGVuZ3RoLWM7aWYobD09PWgmJiJkYXRlIiE9PXIudHlwZSlyLmR0aWNrPDE/dD1uLS41KnIuZHRpY2s6KHQtPS41KStyLmR0aWNrPG4mJih0Kz1yLmR0aWNrKTtlbHNlIGlmKHM8LjEqaCYmKG8+LjMqaHx8dShuKXx8dShhKSkpe3ZhciBwPXIuZHRpY2svMjt0Kz10K3A8bj9wOi1wfXJldHVybiB0fSh5LHQsbCxjLHUpKSsoMStNYXRoLmZsb29yKCh1LXkpL3YpKSp2O2Vsc2UgZm9yKCJNIj09PWwuZHRpY2suY2hhckF0KDApJiYoeT1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPXMuZmluZEV4YWN0RGF0ZXMoZSxpKTtpZihhLmV4YWN0RGF5cz4uOCl7dmFyIG89TnVtYmVyKHIuc3Vic3RyKDEpKTthLmV4YWN0WWVhcnM+LjgmJm8lMTI9PTA/dD1WLnRpY2tJbmNyZW1lbnQodCwiTTYiLCJyZXZlcnNlIikrMS41Kk06YS5leGFjdE1vbnRocz4uOD90PVYudGlja0luY3JlbWVudCh0LCJNMSIsInJldmVyc2UiKSsxNS41Kk06dC09Uzt2YXIgbD1WLnRpY2tJbmNyZW1lbnQodCxyKTtpZihsPD1uKXJldHVybiBsfXJldHVybiB0fSh5LHQsdixjLGEpKSxnPXksMDtnPD11OylnPVYudGlja0luY3JlbWVudChnLHYsITEsYSk7cmV0dXJue3N0YXJ0OmUuYzJyKHksMCxhKSxlbmQ6ZS5jMnIoZywwLGEpLHNpemU6dixfZGF0YVNwYW46dS1jfX0sVi5wcmVwVGlja3M9ZnVuY3Rpb24odCxlKXt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYodC5fZHRpY2tJbml0PXQuZHRpY2ssdC5fdGljazBJbml0PXQudGljazAsImF1dG8iPT09dC50aWNrbW9kZXx8IXQuZHRpY2spe3ZhciBuLGE9dC5udGlja3M7YXx8KCJjYXRlZ29yeSI9PT10LnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXQudHlwZT8obj10LnRpY2tmb250P3MuYmlnRm9udCh0LnRpY2tmb250LnNpemV8fDEyKToxNSxhPXQuX2xlbmd0aC9uKToobj0ieSI9PT10Ll9pZC5jaGFyQXQoMCk/NDA6ODAsYT1zLmNvbnN0cmFpbih0Ll9sZW5ndGgvbiw0LDkpKzEpLCJyYWRpYWxheGlzIj09PXQuX25hbWUmJihhKj0yKSksImFycmF5Ij09PXQudGlja21vZGUmJihhKj0xMDApLHQuX3JvdWdoRFRpY2s9TWF0aC5hYnMoclsxXS1yWzBdKS9hLFYuYXV0b1RpY2tzKHQsdC5fcm91Z2hEVGljayksdC5fbWluRHRpY2s+MCYmdC5kdGljazwyKnQuX21pbkR0aWNrJiYodC5kdGljaz10Ll9taW5EdGljayx0LnRpY2swPXQubDJyKHQuX2ZvcmNlVGljazApKX0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZSYmZnVuY3Rpb24odCl7dmFyIGU7ZnVuY3Rpb24gcigpe3JldHVybiEoaSh0LmR0aWNrKXx8Ik0iIT09dC5kdGljay5jaGFyQXQoMCkpfXZhciBuPXIoKSxhPVYuZ2V0VGlja0Zvcm1hdCh0KTtpZihhKXt2YXIgbz10Ll9kdGlja0luaXQhPT10LmR0aWNrOy8lW2ZMUXNTTVhdLy50ZXN0KGEpfHwoLyVbSEldLy50ZXN0KGEpPyhlPUUsbyYmIW4mJnQuZHRpY2s8RSYmKHQuZHRpY2s9RSkpOi8lcC8udGVzdChhKT8oZT1TLG8mJiFuJiZ0LmR0aWNrPFMmJih0LmR0aWNrPVMpKTovJVtBYWRlanV3eF0vLnRlc3QoYSk/KGU9TSxvJiYhbiYmdC5kdGljazxNJiYodC5kdGljaz1NKSk6LyVbVVZXXS8udGVzdChhKT8oZT1BLG8mJiFuJiZ0LmR0aWNrPEEmJih0LmR0aWNrPUEpKTovJVtCYm1dLy50ZXN0KGEpPyhlPVQsbyYmKG4/USh0LmR0aWNrKTwxOnQuZHRpY2s8aykmJih0LmR0aWNrPSJNMSIpKTovJVtxXS8udGVzdChhKT8oZT1iLG8mJihuP1EodC5kdGljayk8Mzp0LmR0aWNrPF8pJiYodC5kdGljaz0iTTMiKSk6LyVbWXldLy50ZXN0KGEpJiYoZT12LG8mJihuP1EodC5kdGljayk8MTI6dC5kdGljazx5KSYmKHQuZHRpY2s9Ik0xMiIpKSl9KG49cigpKSYmdC50aWNrMD09PXQuX2Rvd1RpY2swJiYodC50aWNrMD10Ll9yYXdUaWNrMCk7dC5fZGVmaW5lZERlbHRhPWV9KHQpLHQudGljazB8fCh0LnRpY2swPSJkYXRlIj09PXQudHlwZT8iMjAwMC0wMS0wMSI6MCksImRhdGUiPT09dC50eXBlJiZ0LmR0aWNrPC4xJiYodC5kdGljaz0uMSksc3QodCl9LFYuY2FsY1RpY2tzPWZ1bmN0aW9uKHQsZSl7Vi5wcmVwVGlja3ModCxlKTt2YXIgcj1zLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsLHZvaWQgMCx2b2lkIDAsZSk7aWYoImFycmF5Ij09PXQudGlja21vZGUpcmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja3ZhbHMscj10LnRpY2t0ZXh0LG49bmV3IEFycmF5KGUubGVuZ3RoKSxpPVgocy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkpLGE9TWF0aC5taW4oaVswXSxpWzFdKSxvPU1hdGgubWF4KGlbMF0saVsxXSksbD0wO0FycmF5LmlzQXJyYXkocil8fChyPVtdKTt2YXIgYz0iY2F0ZWdvcnkiPT09dC50eXBlP3QuZDJsX25vYWRkOnQuZDJsOyJsb2ciPT09dC50eXBlJiYiTCIhPT1TdHJpbmcodC5kdGljaykuY2hhckF0KDApJiYodC5kdGljaz0iTCIrTWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLm1pbih0LnJhbmdlWzBdLHQucmFuZ2VbMV0pKS0xKSk7Zm9yKHZhciB1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBmPWMoZVt1XSk7Zj5hJiZmPG8mJih2b2lkIDA9PT1yW3VdP25bbF09Vi50aWNrVGV4dCh0LGYpOm5bbF09bHQodCxmLFN0cmluZyhyW3VdKSksbCsrKX1sPGUubGVuZ3RoJiZuLnNwbGljZShsLGUubGVuZ3RoLWwpO3QucmFuZ2VicmVha3MmJihuPW4uZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gdC5tYXNrQnJlYWtzKGUueCkhPT1JfSkpKTtyZXR1cm4gbn0odCk7dmFyIG49WChyKSxhPW5bMF0sbz1uWzFdLGw9clsxXTxyWzBdLGM9TWF0aC5taW4oclswXSxyWzFdKSx1PU1hdGgubWF4KHJbMF0sclsxXSksZj0ibG9nIj09PXQudHlwZSYmIShpKHQuZHRpY2spfHwiTCI9PT10LmR0aWNrLmNoYXJBdCgwKSksaD0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZTtpZih0Ll90bWluPVYudGlja0ZpcnN0KHQsZSksdC5fdG1pbjxhIT09bClyZXR1cm5bXTsiY2F0ZWdvcnkiIT09dC50eXBlJiYibXVsdGljYXRlZ29yeSIhPT10LnR5cGV8fChvPWw/TWF0aC5tYXgoLS41LG8pOk1hdGgubWluKHQuX2NhdGVnb3JpZXMubGVuZ3RoLS41LG8pKTt2YXIgcD10Ll90bWluO3QucmFuZ2VicmVha3MmJnQuX3RpY2swSW5pdCE9PXQudGljazAmJihwPU10KHAsdCksbHx8KHA9Vi50aWNrSW5jcmVtZW50KHAsdC5kdGljaywhbCx0LmNhbGVuZGFyKSkpLGgmJihwPVYudGlja0luY3JlbWVudChwLHQuZHRpY2ssIWwsdC5jYWxlbmRhcikpO2Zvcih2YXIgZCxtPU1hdGgubWF4KDFlMyx0Ll9sZW5ndGh8fDApLEw9W10sQz1udWxsO2w/cD49bzpwPD1vO3A9Vi50aWNrSW5jcmVtZW50KHAsdC5kdGljayxsLHQuY2FsZW5kYXIpKXtpZih0LnJhbmdlYnJlYWtzJiYhbCl7aWYocDxhKWNvbnRpbnVlO2lmKHQubWFza0JyZWFrcyhwKT09PUkmJk10KHAsdCk+PXUpYnJlYWt9aWYoTC5sZW5ndGg+bXx8cD09PUMpYnJlYWs7Qz1wO3ZhciBQPSExO2YmJnAhPT0oMHxwKSYmKFA9ITApLEwucHVzaCh7bWlub3I6UCx2YWx1ZTpwfSl9aWYoaCYmZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dLnZhbHVlLGE9bixvPW4rMTtuPHQubGVuZ3RoLTE/KGE9bixvPW4rMSk6bj4wPyhhPW4tMSxvPW4pOihhPW4sbz1uKTt2YXIgcyxsPXRbYV0udmFsdWUsYz10W29dLnZhbHVlLHU9TWF0aC5hYnMoYy1sKSxmPXJ8fHUsaD0wO2Y+PXk/aD11Pj15JiZ1PD1nP3U6djpyPT09YiYmZj49Xz9oPXU+PV8mJnU8PXg/dTpiOmY+PWs/aD11Pj1rJiZ1PD13P3U6VDpyPT09QSYmZj49QT9oPUE6Zj49TT9oPU06cj09PVMmJmY+PVM/aD1TOnI9PT1FJiZmPj1FJiYoaD1FKSxoPj11JiYoaD11LHM9ITApO3ZhciBwPWkraDtpZihlLnJhbmdlYnJlYWtzJiZoPjApe2Zvcih2YXIgZD0wLG09MDttPDg0O20rKyl7dmFyIEw9KG0rLjUpLzg0O2UubWFza0JyZWFrcyhpKigxLUwpK0wqcCkhPT1JJiZkKyt9KGgqPWQvODQpfHwodFtuXS5kcm9wPSEwKSxzJiZ1PkEmJihoPXUpfShoPjB8fDA9PT1uKSYmKHRbbl0ucGVyaW9kWD1pK2gvMil9fShMLHQsdC5fZGVmaW5lZERlbHRhKSx0LnJhbmdlYnJlYWtzKXt2YXIgTz0ieSI9PT10Ll9pZC5jaGFyQXQoMCksej0xOyJhdXRvIj09PXQudGlja21vZGUmJih6PXQudGlja2ZvbnQ/dC50aWNrZm9udC5zaXplOjEyKTt2YXIgRD1OYU47Zm9yKGQ9TC5sZW5ndGgtMTtkPi0xO2QtLSlpZihMW2RdLmRyb3ApTC5zcGxpY2UoZCwxKTtlbHNle0xbZF0udmFsdWU9TXQoTFtkXS52YWx1ZSx0KTt2YXIgUj10LmMycChMW2RdLnZhbHVlKTsoTz9EPlItejpEPFIreik/TC5zcGxpY2UobD9kKzE6ZCwxKTpEPVJ9fUF0KHQpJiYzNjA9PT1NYXRoLmFicyhyWzFdLXJbMF0pJiZMLnBvcCgpLHQuX3RtYXg9KExbTC5sZW5ndGgtMV18fHt9KS52YWx1ZSx0Ll9wcmV2RGF0ZUhlYWQ9IiIsdC5faW5DYWxjVGlja3M9ITA7dmFyIEYsQixOPVtdO2ZvcihkPTA7ZDxMLmxlbmd0aDtkKyspe3ZhciBqPUxbZF0ubWlub3IsVT1MW2RdLnZhbHVlO0Y9Vi50aWNrVGV4dCh0LFUsITEsaiksdm9pZCAwIT09KEI9TFtkXS5wZXJpb2RYKSYmKEYucGVyaW9kWD1CLChCPnV8fEI8YykmJihCPnUmJihGLnBlcmlvZFg9dSksQjxjJiYoRi5wZXJpb2RYPWMpLEYudGV4dD0iICIsdC5fcHJldkRhdGVIZWFkPSIiKSksTi5wdXNoKEYpfXJldHVybiB0Ll9pbkNhbGNUaWNrcz0hMSxOfTt2YXIgJD1bMiw1LDEwXSx0dD1bMSwyLDMsNiwxMl0sZXQ9WzEsMiw1LDEwLDE1LDMwXSxydD1bMSwyLDMsNywxNF0sbnQ9Wy0uMDQ2LDAsLjMwMSwuNDc3LC42MDIsLjY5OSwuNzc4LC44NDUsLjkwMywuOTU0LDFdLGl0PVstLjMwMSwwLC4zMDEsLjY5OSwxXSxhdD1bMTUsMzAsNDUsOTAsMTgwXTtmdW5jdGlvbiBvdCh0LGUscil7cmV0dXJuIGUqcy5yb3VuZFVwKHQvZSxyKX1mdW5jdGlvbiBzdCh0KXt2YXIgZT10LmR0aWNrO2lmKHQuX3RpY2tleHBvbmVudD0wLGkoZSl8fCJzdHJpbmciPT10eXBlb2YgZXx8KGU9MSksImNhdGVnb3J5IiE9PXQudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09dC50eXBlfHwodC5fdGlja3JvdW5kPW51bGwpLCJkYXRlIj09PXQudHlwZSl7dmFyIHI9dC5yMmwodC50aWNrMCksbj10LmwycihyKS5yZXBsYWNlKC8oXi18aSkvZywiIiksYT1uLmxlbmd0aDtpZigiTSI9PT1TdHJpbmcoZSkuY2hhckF0KDApKWE+MTB8fCIwMS0wMSIhPT1uLnN1YnN0cig1KT90Ll90aWNrcm91bmQ9ImQiOnQuX3RpY2tyb3VuZD0rZS5zdWJzdHIoMSklMTI9PTA/InkiOiJtIjtlbHNlIGlmKGU+PU0mJmE8PTEwfHxlPj0xNSpNKXQuX3RpY2tyb3VuZD0iZCI7ZWxzZSBpZihlPj1MJiZhPD0xNnx8ZT49RSl0Ll90aWNrcm91bmQ9Ik0iO2Vsc2UgaWYoZT49QyYmYTw9MTl8fGU+PUwpdC5fdGlja3JvdW5kPSJTIjtlbHNle3ZhciBvPXQubDJyKHIrZSkucmVwbGFjZSgvXi0vLCIiKS5sZW5ndGg7dC5fdGlja3JvdW5kPU1hdGgubWF4KGEsbyktMjAsdC5fdGlja3JvdW5kPDAmJih0Ll90aWNrcm91bmQ9NCl9fWVsc2UgaWYoaShlKXx8IkwiPT09ZS5jaGFyQXQoMCkpe3ZhciBzPXQucmFuZ2UubWFwKHQucjJkfHxOdW1iZXIpO2koZSl8fChlPU51bWJlcihlLnN1YnN0cigxKSkpLHQuX3RpY2tyb3VuZD0yLU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjEwKy4wMSk7dmFyIGw9TWF0aC5tYXgoTWF0aC5hYnMoc1swXSksTWF0aC5hYnMoc1sxXSkpLGM9TWF0aC5mbG9vcihNYXRoLmxvZyhsKS9NYXRoLkxOMTArLjAxKSx1PXZvaWQgMD09PXQubWluZXhwb25lbnQ/Mzp0Lm1pbmV4cG9uZW50O01hdGguYWJzKGMpPnUmJih1dCh0LmV4cG9uZW50Zm9ybWF0KSYmIWZ0KGMpP3QuX3RpY2tleHBvbmVudD0zKk1hdGgucm91bmQoKGMtMSkvMyk6dC5fdGlja2V4cG9uZW50PWMpfWVsc2UgdC5fdGlja3JvdW5kPW51bGx9ZnVuY3Rpb24gbHQodCxlLHIpe3ZhciBuPXQudGlja2ZvbnR8fHt9O3JldHVybnt4OmUsZHg6MCxkeTowLHRleHQ6cnx8IiIsZm9udFNpemU6bi5zaXplLGZvbnQ6bi5mYW1pbHksZm9udENvbG9yOm4uY29sb3J9fVYuYXV0b1RpY2tzPWZ1bmN0aW9uKHQsZSl7dmFyIHI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gTWF0aC5wb3codCxNYXRoLmZsb29yKE1hdGgubG9nKGUpL01hdGguTE4xMCkpfWlmKCJkYXRlIj09PXQudHlwZSl7dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDApO3ZhciBhPTIqZTtpZihhPnYpZS89dixyPW4oMTApLHQuZHRpY2s9Ik0iKzEyKm90KGUsciwkKTtlbHNlIGlmKGE+VCllLz1ULHQuZHRpY2s9Ik0iK290KGUsMSx0dCk7ZWxzZSBpZihhPk0pe3QuZHRpY2s9b3QoZSxNLHQuX2hhc0RheU9mV2Vla0JyZWFrcz9bMSwyLDcsMTRdOnJ0KTt2YXIgbz1WLmdldFRpY2tGb3JtYXQodCksbD0icGVyaW9kIj09PXQudGlja2xhYmVsbW9kZTtsJiYodC5fcmF3VGljazA9dC50aWNrMCksLyVbdVZXXS8udGVzdChvKT90LnRpY2swPXMuZGF0ZVRpY2swKHQuY2FsZW5kYXIsMik6dC50aWNrMD1zLmRhdGVUaWNrMCh0LmNhbGVuZGFyLDEpLGwmJih0Ll9kb3dUaWNrMD10LnRpY2swKX1lbHNlIGE+RT90LmR0aWNrPW90KGUsRSx0dCk6YT5MP3QuZHRpY2s9b3QoZSxMLGV0KTphPkM/dC5kdGljaz1vdChlLEMsZXQpOihyPW4oMTApLHQuZHRpY2s9b3QoZSxyLCQpKX1lbHNlIGlmKCJsb2ciPT09dC50eXBlKXt0LnRpY2swPTA7dmFyIGM9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCk7aWYoZT4uNyl0LmR0aWNrPU1hdGguY2VpbChlKTtlbHNlIGlmKE1hdGguYWJzKGNbMV0tY1swXSk8MSl7dmFyIHU9MS41Kk1hdGguYWJzKChjWzFdLWNbMF0pL2UpO2U9TWF0aC5hYnMoTWF0aC5wb3coMTAsY1sxXSktTWF0aC5wb3coMTAsY1swXSkpL3Uscj1uKDEwKSx0LmR0aWNrPSJMIitvdChlLHIsJCl9ZWxzZSB0LmR0aWNrPWU+LjM/IkQyIjoiRDEifWVsc2UiY2F0ZWdvcnkiPT09dC50eXBlfHwibXVsdGljYXRlZ29yeSI9PT10LnR5cGU/KHQudGljazA9MCx0LmR0aWNrPU1hdGguY2VpbChNYXRoLm1heChlLDEpKSk6QXQodCk/KHQudGljazA9MCxyPTEsdC5kdGljaz1vdChlLHIsYXQpKToodC50aWNrMD0wLHI9bigxMCksdC5kdGljaz1vdChlLHIsJCkpO2lmKDA9PT10LmR0aWNrJiYodC5kdGljaz0xKSwhaSh0LmR0aWNrKSYmInN0cmluZyIhPXR5cGVvZiB0LmR0aWNrKXt2YXIgZj10LmR0aWNrO3Rocm93IHQuZHRpY2s9MSwiYXguZHRpY2sgZXJyb3I6ICIrU3RyaW5nKGYpfX0sVi50aWNrSW5jcmVtZW50PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXI/LTE6MTtpZihpKGUpKXJldHVybiBzLmluY3JlbWVudCh0LG8qZSk7dmFyIGw9ZS5jaGFyQXQoMCksYz1vKk51bWJlcihlLnN1YnN0cigxKSk7aWYoIk0iPT09bClyZXR1cm4gcy5pbmNyZW1lbnRNb250aCh0LGMsYSk7aWYoIkwiPT09bClyZXR1cm4gTWF0aC5sb2coTWF0aC5wb3coMTAsdCkrYykvTWF0aC5MTjEwO2lmKCJEIj09PWwpe3ZhciB1PSJEMiI9PT1lP2l0Om50LGY9dCsuMDEqbyxoPXMucm91bmRVcChzLm1vZChmLDEpLHUscik7cmV0dXJuIE1hdGguZmxvb3IoZikrTWF0aC5sb2cobi5yb3VuZChNYXRoLnBvdygxMCxoKSwxKSkvTWF0aC5MTjEwfXRocm93InVucmVjb2duaXplZCBkdGljayAiK1N0cmluZyhlKX0sVi50aWNrRmlyc3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnIybHx8TnVtYmVyLGE9cy5zaW1wbGVNYXAodC5yYW5nZSxyLHZvaWQgMCx2b2lkIDAsZSksbz1hWzFdPGFbMF0sbD1vP01hdGguZmxvb3I6TWF0aC5jZWlsLGM9WChhKVswXSx1PXQuZHRpY2ssZj1yKHQudGljazApO2lmKGkodSkpe3ZhciBoPWwoKGMtZikvdSkqdStmO3JldHVybiJjYXRlZ29yeSIhPT10LnR5cGUmJiJtdWx0aWNhdGVnb3J5IiE9PXQudHlwZXx8KGg9cy5jb25zdHJhaW4oaCwwLHQuX2NhdGVnb3JpZXMubGVuZ3RoLTEpKSxofXZhciBwPXUuY2hhckF0KDApLGQ9TnVtYmVyKHUuc3Vic3RyKDEpKTtpZigiTSI9PT1wKXtmb3IodmFyIG0sZyx2LHk9MCx4PWY7eTwxMDspe2lmKCgobT1WLnRpY2tJbmNyZW1lbnQoeCx1LG8sdC5jYWxlbmRhcikpLWMpKih4LWMpPD0wKXJldHVybiBvP01hdGgubWluKHgsbSk6TWF0aC5tYXgoeCxtKTtnPShjLSh4K20pLzIpLyhtLXgpLHY9cCsoTWF0aC5hYnMoTWF0aC5yb3VuZChnKSl8fDEpKmQseD1WLnRpY2tJbmNyZW1lbnQoeCx2LGc8MD8hbzpvLHQuY2FsZW5kYXIpLHkrK31yZXR1cm4gcy5lcnJvcigidGlja0ZpcnN0IGRpZCBub3QgY29udmVyZ2UiLHQpLHh9aWYoIkwiPT09cClyZXR1cm4gTWF0aC5sb2cobCgoTWF0aC5wb3coMTAsYyktZikvZCkqZCtmKS9NYXRoLkxOMTA7aWYoIkQiPT09cCl7dmFyIGI9IkQyIj09PXU/aXQ6bnQsXz1zLnJvdW5kVXAocy5tb2QoYywxKSxiLG8pO3JldHVybiBNYXRoLmZsb29yKGMpK01hdGgubG9nKG4ucm91bmQoTWF0aC5wb3coMTAsXyksMSkpL01hdGguTE4xMH10aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcodSl9LFYudGlja1RleHQ9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1sdCh0LGUpLGw9ImFycmF5Ij09PXQudGlja21vZGUsYz1yfHxsLHU9dC50eXBlLGY9ImNhdGVnb3J5Ij09PXU/dC5kMmxfbm9hZGQ6dC5kMmw7aWYobCYmQXJyYXkuaXNBcnJheSh0LnRpY2t0ZXh0KSl7dmFyIGg9cy5zaW1wbGVNYXAodC5yYW5nZSx0LnIybCkscD0oTWF0aC5hYnMoaFsxXS1oWzBdKS0odC5fbEJyZWFrc3x8MCkpLzFlNDtmb3IoYT0wO2E8dC50aWNrdGV4dC5sZW5ndGgmJiEoTWF0aC5hYnMoZS1mKHQudGlja3ZhbHNbYV0pKTxwKTthKyspO2lmKGE8dC50aWNrdGV4dC5sZW5ndGgpcmV0dXJuIG8udGV4dD1TdHJpbmcodC50aWNrdGV4dFthXSksb31mdW5jdGlvbiBkKG4pe2lmKHZvaWQgMD09PW4pcmV0dXJuITA7aWYocilyZXR1cm4ibm9uZSI9PT1uO3ZhciBpPXtmaXJzdDp0Ll90bWluLGxhc3Q6dC5fdG1heH1bbl07cmV0dXJuImFsbCIhPT1uJiZlIT09aX12YXIgbT1yPyJuZXZlciI6Im5vbmUiIT09dC5leHBvbmVudGZvcm1hdCYmZCh0LnNob3dleHBvbmVudCk/ImhpZGUiOiIiO2lmKCJkYXRlIj09PXU/ZnVuY3Rpb24odCxlLHIsbil7dmFyIGE9dC5fdGlja3JvdW5kLG89ciYmdC5ob3ZlcmZvcm1hdHx8Vi5nZXRUaWNrRm9ybWF0KHQpO24mJihhPWkoYSk/NDp7eToibSIsbToiZCIsZDoiTSIsTToiUyIsUzo0fVthXSk7dmFyIGwsYz1zLmZvcm1hdERhdGUoZS54LG8sYSx0Ll9kYXRlRm9ybWF0LHQuY2FsZW5kYXIsdC5fZXh0cmFGb3JtYXQpLHU9Yy5pbmRleE9mKCJcbiIpOy0xIT09dSYmKGw9Yy5zdWJzdHIodSsxKSxjPWMuc3Vic3RyKDAsdSkpO24mJigiMDA6MDA6MDAiPT09Y3x8IjAwOjAwIj09PWM/KGM9bCxsPSIiKTo4PT09Yy5sZW5ndGgmJihjPWMucmVwbGFjZSgvOjAwJC8sIiIpKSk7aWYobClpZihyKSJkIj09PWE/Yys9IiwgIitsOmM9bCsoYz8iLCAiK2M6IiIpO2Vsc2UgaWYodC5faW5DYWxjVGlja3MmJnQuX3ByZXZEYXRlSGVhZD09PWwpe3ZhciBmPVN0KHQpLGg9dC5fcmVhbFNpZGV8fHQuc2lkZTsoIWYmJiJ0b3AiPT09aHx8ZiYmImJvdHRvbSI9PT1oKSYmKGMrPSI8YnI+ICIpfWVsc2UgdC5fcHJldkRhdGVIZWFkPWwsYys9Ijxicj4iK2w7ZS50ZXh0PWN9KHQsbyxyLGMpOiJsb2ciPT09dT9mdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXQuZHRpY2ssbD1lLngsYz10LnRpY2tmb3JtYXQsdT0ic3RyaW5nIj09dHlwZW9mIG8mJm8uY2hhckF0KDApOyJuZXZlciI9PT1hJiYoYT0iIik7biYmIkwiIT09dSYmKG89IkwzIix1PSJMIik7aWYoY3x8IkwiPT09dSllLnRleHQ9aHQoTWF0aC5wb3coMTAsbCksdCxhLG4pO2Vsc2UgaWYoaShvKXx8IkQiPT09dSYmcy5tb2QobCsuMDEsMSk8LjEpe3ZhciBmPU1hdGgucm91bmQobCksaD1NYXRoLmFicyhmKSxwPXQuZXhwb25lbnRmb3JtYXQ7InBvd2VyIj09PXB8fHV0KHApJiZmdChmKT8oZS50ZXh0PTA9PT1mPzE6MT09PWY/IjEwIjoiMTA8c3VwPiIrKGY+MT8iIjpQKStoKyI8L3N1cD4iLGUuZm9udFNpemUqPTEuMjUpOigiZSI9PT1wfHwiRSI9PT1wKSYmaD4yP2UudGV4dD0iMSIrcCsoZj4wPyIrIjpQKStoOihlLnRleHQ9aHQoTWF0aC5wb3coMTAsbCksdCwiIiwiZmFrZWhvdmVyIiksIkQxIj09PW8mJiJ5Ij09PXQuX2lkLmNoYXJBdCgwKSYmKGUuZHktPWUuZm9udFNpemUvNikpfWVsc2V7aWYoIkQiIT09dSl0aHJvdyJ1bnJlY29nbml6ZWQgZHRpY2sgIitTdHJpbmcobyk7ZS50ZXh0PVN0cmluZyhNYXRoLnJvdW5kKE1hdGgucG93KDEwLHMubW9kKGwsMSkpKSksZS5mb250U2l6ZSo9Ljc1fWlmKCJEMSI9PT10LmR0aWNrKXt2YXIgZD1TdHJpbmcoZS50ZXh0KS5jaGFyQXQoMCk7IjAiIT09ZCYmIjEiIT09ZHx8KCJ5Ij09PXQuX2lkLmNoYXJBdCgwKT9lLmR4LT1lLmZvbnRTaXplLzQ6KGUuZHkrPWUuZm9udFNpemUvMixlLmR4Kz0odC5yYW5nZVsxXT50LnJhbmdlWzBdPzE6LTEpKmUuZm9udFNpemUqKGw8MD8uNTouMjUpKSl9fSh0LG8sMCxjLG0pOiJjYXRlZ29yeSI9PT11P2Z1bmN0aW9uKHQsZSl7dmFyIHI9dC5fY2F0ZWdvcmllc1tNYXRoLnJvdW5kKGUueCldO3ZvaWQgMD09PXImJihyPSIiKTtlLnRleHQ9U3RyaW5nKHIpfSh0LG8pOiJtdWx0aWNhdGVnb3J5Ij09PXU/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPU1hdGgucm91bmQoZS54KSxpPXQuX2NhdGVnb3JpZXNbbl18fFtdLGE9dm9pZCAwPT09aVsxXT8iIjpTdHJpbmcoaVsxXSksbz12b2lkIDA9PT1pWzBdPyIiOlN0cmluZyhpWzBdKTtyP2UudGV4dD1vKyIgLSAiK2E6KGUudGV4dD1hLGUudGV4dDI9byl9KHQsbyxyKTpBdCh0KT9mdW5jdGlvbih0LGUscixuLGkpe2lmKCJyYWRpYW5zIiE9PXQudGhldGF1bml0fHxyKWUudGV4dD1odChlLngsdCxpLG4pO2Vsc2V7dmFyIGE9ZS54LzE4MDtpZigwPT09YSllLnRleHQ9IjAiO2Vsc2V7dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUpe3JldHVybiBNYXRoLmFicyh0LWUpPD0xZS02fXZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj0xOyFlKE1hdGgucm91bmQodCpyKS9yLHQpOylyKj0xMDtyZXR1cm4gcn0odCksbj10KnIsaT1NYXRoLmFicyhmdW5jdGlvbiB0KHIsbil7cmV0dXJuIGUobiwwKT9yOnQobixyJW4pfShuLHIpKTtyZXR1cm5bTWF0aC5yb3VuZChuL2kpLE1hdGgucm91bmQoci9pKV19KGEpO2lmKG9bMV0+PTEwMCllLnRleHQ9aHQocy5kZWcycmFkKGUueCksdCxpLG4pO2Vsc2V7dmFyIGw9ZS54PDA7MT09PW9bMV0/MT09PW9bMF0/ZS50ZXh0PSJcdTAzYzAiOmUudGV4dD1vWzBdKyJcdTAzYzAiOmUudGV4dD1bIjxzdXA+IixvWzBdLCI8L3N1cD4iLCJcdTIwNDQiLCI8c3ViPiIsb1sxXSwiPC9zdWI+IiwiXHUwM2MwIl0uam9pbigiIiksbCYmKGUudGV4dD1QK2UudGV4dCl9fX19KHQsbyxyLGMsbSk6ZnVuY3Rpb24odCxlLHIsbixpKXsibmV2ZXIiPT09aT9pPSIiOiJhbGwiPT09dC5zaG93ZXhwb25lbnQmJk1hdGguYWJzKGUueC90LmR0aWNrKTwxZS02JiYoaT0iaGlkZSIpO2UudGV4dD1odChlLngsdCxpLG4pfSh0LG8sMCxjLG0pLG58fCh0LnRpY2twcmVmaXgmJiFkKHQuc2hvd3RpY2twcmVmaXgpJiYoby50ZXh0PXQudGlja3ByZWZpeCtvLnRleHQpLHQudGlja3N1ZmZpeCYmIWQodC5zaG93dGlja3N1ZmZpeCkmJihvLnRleHQrPXQudGlja3N1ZmZpeCkpLCJib3VuZGFyaWVzIj09PXQudGlja3Nvbnx8dC5zaG93ZGl2aWRlcnMpe3ZhciBnPWZ1bmN0aW9uKGUpe3ZhciByPXQubDJwKGUpO3JldHVybiByPj0wJiZyPD10Ll9sZW5ndGg/ZTpudWxsfTtvLnhibmQ9W2coby54LS41KSxnKG8ueCt0LmR0aWNrLS41KV19cmV0dXJuIG99LFYuaG92ZXJMYWJlbFRleHQ9ZnVuY3Rpb24odCxlLHIpe3ImJih0PXMuZXh0ZW5kRmxhdCh7fSx0LHtob3ZlcmZvcm1hdDpyfSkpO3ZhciBuPUFycmF5LmlzQXJyYXkoZSk/ZVswXTplLGk9QXJyYXkuaXNBcnJheShlKT9lWzFdOnZvaWQgMDtpZih2b2lkIDAhPT1pJiZpIT09bilyZXR1cm4gVi5ob3ZlckxhYmVsVGV4dCh0LG4scikrIiAtICIrVi5ob3ZlckxhYmVsVGV4dCh0LGkscik7dmFyIGE9ImxvZyI9PT10LnR5cGUmJm48PTAsbz1WLnRpY2tUZXh0KHQsdC5jMmwoYT8tbjpuKSwiaG92ZXIiKS50ZXh0O3JldHVybiBhPzA9PT1uPyIwIjpQK286b307dmFyIGN0PVsiZiIsInAiLCJuIiwiXHUwM2JjIiwibSIsIiIsImsiLCJNIiwiRyIsIlQiXTtmdW5jdGlvbiB1dCh0KXtyZXR1cm4iU0kiPT09dHx8IkIiPT09dH1mdW5jdGlvbiBmdCh0KXtyZXR1cm4gdD4xNHx8dDwtMTV9ZnVuY3Rpb24gaHQodCxlLHIsbil7dmFyIGE9dDwwLG89ZS5fdGlja3JvdW5kLGw9cnx8ZS5leHBvbmVudGZvcm1hdHx8IkIiLGM9ZS5fdGlja2V4cG9uZW50LHU9Vi5nZXRUaWNrRm9ybWF0KGUpLGY9ZS5zZXBhcmF0ZXRob3VzYW5kcztpZihuKXt2YXIgaD17ZXhwb25lbnRmb3JtYXQ6bCxtaW5leHBvbmVudDplLm1pbmV4cG9uZW50LGR0aWNrOiJub25lIj09PWUuc2hvd2V4cG9uZW50P2UuZHRpY2s6aSh0KSYmTWF0aC5hYnModCl8fDEscmFuZ2U6Im5vbmUiPT09ZS5zaG93ZXhwb25lbnQ/ZS5yYW5nZS5tYXAoZS5yMmQpOlswLHR8fDFdfTtzdChoKSxvPShOdW1iZXIoaC5fdGlja3JvdW5kKXx8MCkrNCxjPWguX3RpY2tleHBvbmVudCxlLmhvdmVyZm9ybWF0JiYodT1lLmhvdmVyZm9ybWF0KX1pZih1KXJldHVybiBlLl9udW1Gb3JtYXQodSkodCkucmVwbGFjZSgvLS9nLFApO3ZhciBwLGQ9TWF0aC5wb3coMTAsLW8pLzI7aWYoIm5vbmUiPT09bCYmKGM9MCksKHQ9TWF0aC5hYnModCkpPGQpdD0iMCIsYT0hMTtlbHNle2lmKHQrPWQsYyYmKHQqPU1hdGgucG93KDEwLC1jKSxvKz1jKSwwPT09byl0PVN0cmluZyhNYXRoLmZsb29yKHQpKTtlbHNlIGlmKG88MCl7dD0odD1TdHJpbmcoTWF0aC5yb3VuZCh0KSkpLnN1YnN0cigwLHQubGVuZ3RoK28pO2Zvcih2YXIgbT1vO208MDttKyspdCs9IjAifWVsc2V7dmFyIGc9KHQ9U3RyaW5nKHQpKS5pbmRleE9mKCIuIikrMTtnJiYodD10LnN1YnN0cigwLGcrbykucmVwbGFjZSgvXC4/MCskLywiIikpfXQ9cy5udW1TZXBhcmF0ZSh0LGUuX3NlcGFyYXRvcnMsZil9YyYmImhpZGUiIT09bCYmKHV0KGwpJiZmdChjKSYmKGw9InBvd2VyIikscD1jPDA/UCstYzoicG93ZXIiIT09bD8iKyIrYzpTdHJpbmcoYyksImUiPT09bHx8IkUiPT09bD90Kz1sK3A6InBvd2VyIj09PWw/dCs9Ilx4ZDcxMDxzdXA+IitwKyI8L3N1cD4iOiJCIj09PWwmJjk9PT1jP3QrPSJCIjp1dChsKSYmKHQrPWN0W2MvMys1XSkpO3JldHVybiBhP1ArdDp0fWZ1bmN0aW9uIHB0KHQsZSl7Zm9yKHZhciByPVtdLG49e30saT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT1lW2ldO25bYS50ZXh0Ml0/blthLnRleHQyXS5wdXNoKGEueCk6blthLnRleHQyXT1bYS54XX1mb3IodmFyIG8gaW4gbilyLnB1c2gobHQodCxzLmludGVycChuW29dLC41KSxvKSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZHQodCl7cmV0dXJuIHZvaWQgMCE9PXQucGVyaW9kWD90LnBlcmlvZFg6dC54fWZ1bmN0aW9uIG10KHQpe3JldHVyblt0LnRleHQsdC54LHQuYXhJbmZvLHQuZm9udCx0LmZvbnRTaXplLHQuZm9udENvbG9yXS5qb2luKCJfIil9ZnVuY3Rpb24gZ3QodCl7dmFyIGU9dC50aXRsZS5mb250LnNpemUscj0odC50aXRsZS50ZXh0Lm1hdGNoKGMuQlJfVEFHX0FMTCl8fFtdKS5sZW5ndGg7cmV0dXJuIHQudGl0bGUuaGFzT3duUHJvcGVydHkoInN0YW5kb2ZmIik/cj9lKihOK3Iqaik6ZSpOOnI/ZSoocisxKSpqOmV9ZnVuY3Rpb24gdnQodCxlKXt2YXIgcj10LmwycChlKTtyZXR1cm4gcj4xJiZyPHQuX2xlbmd0aC0xfWZ1bmN0aW9uIHl0KHQpe3ZhciBlPW4uc2VsZWN0KHQpLHI9ZS5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKTtyZXR1cm4gci5lbXB0eSgpP2Uuc2VsZWN0KCJ0ZXh0Iik6cn1mdW5jdGlvbiB4dCh0KXtyZXR1cm4gdC5faWQrIi5hdXRvbWFyZ2luIn1mdW5jdGlvbiBidCh0KXtyZXR1cm4geHQodCkrIi5taXJyb3IifWZ1bmN0aW9uIF90KHQpe3JldHVybiB0Ll9pZCsiLnJhbmdlc2xpZGVyIn1mdW5jdGlvbiB3dCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKS0xPT09dC5pbmRleE9mKGVbcl0pJiZ0LnB1c2goZVtyXSl9ZnVuY3Rpb24gVHQodCxlLHIpe3ZhciBuLGksYT1bXSxvPVtdLGw9dC5sYXlvdXQ7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylhLnB1c2goVi5nZXRGcm9tSWQodCxlW25dKSk7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylvLnB1c2goVi5nZXRGcm9tSWQodCxyW25dKSk7dmFyIGM9T2JqZWN0LmtleXMocCksdT1bImFuY2hvciIsImRvbWFpbiIsIm92ZXJsYXlpbmciLCJwb3NpdGlvbiIsInNpZGUiLCJ0aWNrYW5nbGUiLCJlZGl0VHlwZSJdLGY9WyJsaW5lYXIiLCJsb2ciXTtmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgaD1jW25dLGQ9YVswXVtoXSxtPW9bMF1baF0sZz0hMCx2PSExLHk9ITE7aWYoIl8iIT09aC5jaGFyQXQoMCkmJiJmdW5jdGlvbiIhPXR5cGVvZiBkJiYtMT09PXUuaW5kZXhPZihoKSl7Zm9yKGk9MTtpPGEubGVuZ3RoJiZnO2krKyl7dmFyIHg9YVtpXVtoXTsidHlwZSI9PT1oJiYtMSE9PWYuaW5kZXhPZihkKSYmLTEhPT1mLmluZGV4T2YoeCkmJmQhPT14P3Y9ITA6eCE9PWQmJihnPSExKX1mb3IoaT0xO2k8by5sZW5ndGgmJmc7aSsrKXt2YXIgYj1vW2ldW2hdOyJ0eXBlIj09PWgmJi0xIT09Zi5pbmRleE9mKG0pJiYtMSE9PWYuaW5kZXhPZihiKSYmbSE9PWI/eT0hMDpvW2ldW2hdIT09bSYmKGc9ITEpfWcmJih2JiYobFthWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSx5JiYobFtvWzBdLl9uYW1lXS50eXBlPSJsaW5lYXIiKSxrdChsLGgsYSxvLHQuX2Z1bGxMYXlvdXQuX2RmbHRUaXRsZSkpfX1mb3Iobj0wO248dC5fZnVsbExheW91dC5hbm5vdGF0aW9ucy5sZW5ndGg7bisrKXt2YXIgXz10Ll9mdWxsTGF5b3V0LmFubm90YXRpb25zW25dOy0xIT09ZS5pbmRleE9mKF8ueHJlZikmJi0xIT09ci5pbmRleE9mKF8ueXJlZikmJnMuc3dhcEF0dHJzKGwuYW5ub3RhdGlvbnNbbl0sWyI/Il0pfX1mdW5jdGlvbiBrdCh0LGUscixuLGkpe3ZhciBhLG89cy5uZXN0ZWRQcm9wZXJ0eSxsPW8odFtyWzBdLl9uYW1lXSxlKS5nZXQoKSxjPW8odFtuWzBdLl9uYW1lXSxlKS5nZXQoKTtmb3IoInRpdGxlIj09PWUmJihsJiZsLnRleHQ9PT1pLngmJihsLnRleHQ9aS55KSxjJiZjLnRleHQ9PT1pLnkmJihjLnRleHQ9aS54KSksYT0wO2E8ci5sZW5ndGg7YSsrKW8odCxyW2FdLl9uYW1lKyIuIitlKS5zZXQoYyk7Zm9yKGE9MDthPG4ubGVuZ3RoO2ErKylvKHQsblthXS5fbmFtZSsiLiIrZSkuc2V0KGwpfWZ1bmN0aW9uIEF0KHQpe3JldHVybiJhbmd1bGFyYXhpcyI9PT10Ll9pZH1mdW5jdGlvbiBNdCh0LGUpe2Zvcih2YXIgcj1lLl9yYW5nZWJyZWFrcy5sZW5ndGgsbj0wO248cjtuKyspe3ZhciBpPWUuX3JhbmdlYnJlYWtzW25dO2lmKHQ+PWkubWluJiZ0PGkubWF4KXJldHVybiBpLm1heH1yZXR1cm4gdH1mdW5jdGlvbiBTdCh0KXtyZXR1cm4tMSE9PSh0LnRpY2tsYWJlbHBvc2l0aW9ufHwiIikuaW5kZXhPZigiaW5zaWRlIil9ZnVuY3Rpb24gRXQodCxlKXtTdCh0Ll9hbmNob3JBeGlzfHx7fSkmJnQuX2hpZGVDb3VudGVyQXhpc0luc2lkZVRpY2tMYWJlbHMmJnQuX2hpZGVDb3VudGVyQXhpc0luc2lkZVRpY2tMYWJlbHMoZSl9Vi5nZXRUaWNrRm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGEsbyxzLGw7ZnVuY3Rpb24gYyh0KXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHQ/dDpOdW1iZXIodC5yZXBsYWNlKCJNIiwiIikpKlR9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPVsiTCIsIkQiXTtpZih0eXBlb2YgdD09dHlwZW9mIGUpe2lmKCJudW1iZXIiPT10eXBlb2YgdClyZXR1cm4gdC1lO3ZhciBuPXIuaW5kZXhPZih0LmNoYXJBdCgwKSksaT1yLmluZGV4T2YoZS5jaGFyQXQoMCkpO3JldHVybiBuPT09aT9OdW1iZXIodC5yZXBsYWNlKC8oTHxEKS9nLCIiKSktTnVtYmVyKGUucmVwbGFjZSgvKEx8RCkvZywiIikpOm4taX1yZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQ/MTotMX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9bnVsbD09PWVbMF0sbj1udWxsPT09ZVsxXSxpPXUodCxlWzBdKT49MCxhPXUodCxlWzFdKTw9MDtyZXR1cm4ocnx8aSkmJihufHxhKX1pZih0LnRpY2tmb3JtYXRzdG9wcyYmdC50aWNrZm9ybWF0c3RvcHMubGVuZ3RoPjApc3dpdGNoKHQudHlwZSl7Y2FzZSJkYXRlIjpjYXNlImxpbmVhciI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJihpPXQuZHRpY2ssYT1uLmR0aWNrcmFuZ2Usbz12b2lkIDAscz12b2lkIDAsbD12b2lkIDAsbz1jfHxmdW5jdGlvbih0KXtyZXR1cm4gdH0scz1hWzBdLGw9YVsxXSwoIXMmJiJudW1iZXIiIT10eXBlb2Ygc3x8byhzKTw9byhpKSkmJighbCYmIm51bWJlciIhPXR5cGVvZiBsfHxvKGwpPj1vKGkpKSkpe3I9bjticmVha31icmVhaztjYXNlImxvZyI6Zm9yKGU9MDtlPHQudGlja2Zvcm1hdHN0b3BzLmxlbmd0aDtlKyspaWYoKG49dC50aWNrZm9ybWF0c3RvcHNbZV0pLmVuYWJsZWQmJmYodC5kdGljayxuLmR0aWNrcmFuZ2UpKXtyPW47YnJlYWt9fXJldHVybiByP3IudmFsdWU6dC50aWNrZm9ybWF0fSxWLmdldFN1YnBsb3RzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dC5fc3VicGxvdHMsbj1yLmNhcnRlc2lhbi5jb25jYXQoci5nbDJkfHxbXSksaT1lP1YuZmluZFN1YnBsb3RzV2l0aEF4aXMobixlKTpuO3JldHVybiBpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zdWJzdHIoMSkuc3BsaXQoInkiKSxuPWUuc3Vic3RyKDEpLnNwbGl0KCJ5Iik7cmV0dXJuIHJbMF09PT1uWzBdPytyWzFdLStuWzFdOityWzBdLStuWzBdfSkpLGl9LFYuZmluZFN1YnBsb3RzV2l0aEF4aXM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IFJlZ0V4cCgieCI9PT1lLl9pZC5jaGFyQXQoMCk/Il4iK2UuX2lkKyJ5IjplLl9pZCsiJCIpLG49W10saT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT10W2ldO3IudGVzdChhKSYmbi5wdXNoKGEpfXJldHVybiBufSxWLm1ha2VDbGlwUGF0aHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZighZS5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgcixpLGE9e19vZmZzZXQ6MCxfbGVuZ3RoOmUud2lkdGgsX2lkOiIifSxvPXtfb2Zmc2V0OjAsX2xlbmd0aDplLmhlaWdodCxfaWQ6IiJ9LHM9Vi5saXN0KHQsIngiLCEwKSxsPVYubGlzdCh0LCJ5IiwhMCksYz1bXTtmb3Iocj0wO3I8cy5sZW5ndGg7cisrKWZvcihjLnB1c2goe3g6c1tyXSx5Om99KSxpPTA7aTxsLmxlbmd0aDtpKyspMD09PXImJmMucHVzaCh7eDphLHk6bFtpXX0pLGMucHVzaCh7eDpzW3JdLHk6bFtpXX0pO3ZhciB1PWUuX2NsaXBzLnNlbGVjdEFsbCgiLmF4ZXNjbGlwIikuZGF0YShjLChmdW5jdGlvbih0KXtyZXR1cm4gdC54Ll9pZCt0LnkuX2lkfSkpO3UuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiYXhlc2NsaXAiLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiJjbGlwIitlLl91aWQrdC54Ll9pZCt0LnkuX2lkfSkpLmFwcGVuZCgicmVjdCIpLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuc2VsZWN0KCJyZWN0IikuYXR0cih7eDp0LnguX29mZnNldHx8MCx5OnQueS5fb2Zmc2V0fHwwLHdpZHRoOnQueC5fbGVuZ3RofHwxLGhlaWdodDp0LnkuX2xlbmd0aHx8MX0pfSkpfX0sVi5kcmF3PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Ll9mdWxsTGF5b3V0OyJyZWRyYXciPT09ZSYmbi5fcGFwZXIuc2VsZWN0QWxsKCJnLnN1YnBsb3QiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLHI9bi5fcGxvdHNbZV07aWYocil7dmFyIGk9ci54YXhpcyxhPXIueWF4aXM7ci54YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIraS5faWQrInRpY2siKS5yZW1vdmUoKSxyLnlheGlzbGF5ZXIuc2VsZWN0QWxsKCIuIithLl9pZCsidGljayIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueWF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2EuX2lkKyJ0aWNrMiIpLnJlbW92ZSgpLHIueGF4aXNsYXllci5zZWxlY3RBbGwoIi4iK2kuX2lkKyJkaXZpZGVyIikucmVtb3ZlKCksci55YXhpc2xheWVyLnNlbGVjdEFsbCgiLiIrYS5faWQrImRpdmlkZXIiKS5yZW1vdmUoKSxyLmdyaWRsYXllciYmci5ncmlkbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksci56ZXJvbGluZWxheWVyJiZyLnplcm9saW5lbGF5ZXIuc2VsZWN0QWxsKCJwYXRoIikucmVtb3ZlKCksbi5faW5mb2xheWVyLnNlbGVjdCgiLmctIitpLl9pZCsidGl0bGUiKS5yZW1vdmUoKSxuLl9pbmZvbGF5ZXIuc2VsZWN0KCIuZy0iK2EuX2lkKyJ0aXRsZSIpLnJlbW92ZSgpfX0pKTt2YXIgaT1lJiYicmVkcmF3IiE9PWU/ZTpWLmxpc3RJZHModCk7cmV0dXJuIHMuc3luY09yQXN5bmMoaS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2lmKGUpe3ZhciBuPVYuZ2V0RnJvbUlkKHQsZSksaT1WLmRyYXdPbmUodCxuLHIpO3JldHVybiBuLl9yPW4ucmFuZ2Uuc2xpY2UoKSxuLl9ybD1zLnNpbXBsZU1hcChuLl9yLG4ucjJsKSxpfX19KSkpfSxWLmRyYXdPbmU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbDtyPXJ8fHt9LGUuc2V0U2NhbGUoKTt2YXIgYz10Ll9mdWxsTGF5b3V0LHA9ZS5faWQsZD1wLmNoYXJBdCgwKSxtPVYuY291bnRlckxldHRlcihwKSxnPWMuX3Bsb3RzW2UuX21haW5TdWJwbG90XTtpZihnKXt2YXIgdj1nW2QrImF4aXNsYXllciJdLHk9ZS5fbWFpbkxpbmVQb3NpdGlvbix4PWUuX21haW5NaXJyb3JQb3NpdGlvbixiPWUuX3ZhbHM9Vi5jYWxjVGlja3MoZSksXz1bZS5taXJyb3IseSx4XS5qb2luKCJfIik7Zm9yKG49MDtuPGIubGVuZ3RoO24rKyliW25dLmF4SW5mbz1fO2UuX3NlbGVjdGlvbnM9e30sZS5fdGlja0FuZ2xlcyYmKGUuX3ByZXZUaWNrQW5nbGVzPWUuX3RpY2tBbmdsZXMpLGUuX3RpY2tBbmdsZXM9e30sZS5fZGVwdGg9bnVsbDt2YXIgdz17fTtpZihlLnZpc2libGUpe3ZhciBULGssQT1WLm1ha2VUcmFuc1RpY2tGbihlKSxNPVYubWFrZVRyYW5zVGlja0xhYmVsRm4oZSksUz0iaW5zaWRlIj09PWUudGlja3MsRT0ib3V0c2lkZSI9PT1lLnRpY2tzO2lmKCJib3VuZGFyaWVzIj09PWUudGlja3Nvbil7dmFyIEw9ZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdLGk9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJm4ucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZihlLmxlbmd0aCl7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylpKGVbcl0sMCk7aShlW3ItMV0sMSl9cmV0dXJuIG59KDAsYik7az1WLmNsaXBFbmRzKGUsTCksVD1TP2s6TH1lbHNlIGs9Vi5jbGlwRW5kcyhlLGIpLFQ9UyYmInBlcmlvZCIhPT1lLnRpY2tsYWJlbG1vZGU/azpiO3ZhciBDPWUuX2dyaWRWYWxzPWssUD1mdW5jdGlvbih0LGUpe3ZhciByLG4saT1bXSxhPWUubGVuZ3RoJiZlW2UubGVuZ3RoLTFdLng8ZVswXS54LG89ZnVuY3Rpb24odCxlKXt2YXIgcj10LnhibmRbZV07bnVsbCE9PXImJmkucHVzaChzLmV4dGVuZEZsYXQoe30sdCx7eDpyfSkpfTtpZih0LnNob3dkaXZpZGVycyYmZS5sZW5ndGgpe2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBsPWVbcl07bC50ZXh0MiE9PW4mJm8obCxhPzE6MCksbj1sLnRleHQyfW8oZVtyLTFdLGE/MDoxKX1yZXR1cm4gaX0oZSxiKTtpZighYy5faGFzT25seUxhcmdlU3Bsb21zKXt2YXIgST1lLl9zdWJwbG90c1dpdGgsTz17fTtmb3Iobj0wO248SS5sZW5ndGg7bisrKXtpPUlbbl07dmFyIHo9KGw9Yy5fcGxvdHNbaV0pW20rImF4aXMiXSxEPXouX21haW5BeGlzLl9pZDtpZighT1tEXSl7T1tEXT0xO3ZhciBSPSJ4Ij09PWQ/Ik0wLCIrei5fb2Zmc2V0KyJ2Iit6Ll9sZW5ndGg6Ik0iK3ouX29mZnNldCsiLDBoIit6Ll9sZW5ndGg7Vi5kcmF3R3JpZCh0LGUse3ZhbHM6Qyxjb3VudGVyQXhpczp6LGxheWVyOmwuZ3JpZGxheWVyLnNlbGVjdCgiLiIrcCkscGF0aDpSLHRyYW5zRm46QX0pLFYuZHJhd1plcm9MaW5lKHQsZSx7Y291bnRlckF4aXM6eixsYXllcjpsLnplcm9saW5lbGF5ZXIscGF0aDpSLHRyYW5zRm46QX0pfX19dmFyIEY9Vi5nZXRUaWNrU2lnbnMoZSksQj1bXTtpZihlLnRpY2tzKXt2YXIgTixILHEsRz1WLm1ha2VUaWNrUGF0aChlLHksRlsyXSk7aWYoZS5fYW5jaG9yQXhpcyYmZS5taXJyb3ImJiEwIT09ZS5taXJyb3I/KE49Vi5tYWtlVGlja1BhdGgoZSx4LEZbM10pLEg9RytOKTooTj0iIixIPUcpLGUuc2hvd2RpdmlkZXJzJiZFJiYiYm91bmRhcmllcyI9PT1lLnRpY2tzb24pe3ZhciBZPXt9O2ZvcihuPTA7bjxQLmxlbmd0aDtuKyspWVtQW25dLnhdPTE7cT1mdW5jdGlvbih0KXtyZXR1cm4gWVt0LnhdP046SH19ZWxzZSBxPUg7Vi5kcmF3VGlja3ModCxlLHt2YWxzOlQsbGF5ZXI6dixwYXRoOnEsdHJhbnNGbjpBfSksImFsbHRpY2tzIj09PWUubWlycm9yJiYoQj1PYmplY3Qua2V5cyhlLl9saW5lcG9zaXRpb25zfHx7fSkpfWZvcihuPTA7bjxCLmxlbmd0aDtuKyspe2k9QltuXSxsPWMuX3Bsb3RzW2ldO3ZhciBXPWUuX2xpbmVwb3NpdGlvbnNbaV18fFtdLFg9Vi5tYWtlVGlja1BhdGgoZSxXWzBdLEZbMF0pK1YubWFrZVRpY2tQYXRoKGUsV1sxXSxGWzFdKTtWLmRyYXdUaWNrcyh0LGUse3ZhbHM6VCxsYXllcjpsW2QrImF4aXNsYXllciJdLHBhdGg6WCx0cmFuc0ZuOkF9KX12YXIgWj1bXTtpZihaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIFYuZHJhd0xhYmVscyh0LGUse3ZhbHM6YixsYXllcjp2LHBsb3RpbmZvOmwsdHJhbnNGbjpNLGxhYmVsRm5zOlYubWFrZUxhYmVsRm5zKGUseSl9KX0pKSwibXVsdGljYXRlZ29yeSI9PT1lLnR5cGUpe3ZhciBKPXt4OjIseToxMH1bZF07Wi5wdXNoKChmdW5jdGlvbigpe3ZhciByPXt4OiJoZWlnaHQiLHk6IndpZHRoIn1bZF0sbj1RKClbcl0rSisoZS5fdGlja0FuZ2xlc1twKyJ0aWNrIl0/ZS50aWNrZm9udC5zaXplKmo6MCk7cmV0dXJuIFYuZHJhd0xhYmVscyh0LGUse3ZhbHM6cHQoZSxiKSxsYXllcjp2LGNsczpwKyJ0aWNrMiIscmVwb3NpdGlvbk9uVXBkYXRlOiEwLHNlY29uZGFyeTohMCx0cmFuc0ZuOkEsbGFiZWxGbnM6Vi5tYWtlTGFiZWxGbnMoZSx5K24qRls0XSl9KX0pKSxaLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX2RlcHRoPUZbNF0qKFEoInRpY2syIilbZS5zaWRlXS15KSxmdW5jdGlvbih0LGUscil7dmFyIG49ZS5faWQrImRpdmlkZXIiLGk9ci52YWxzLGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGksbXQpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5pbnNlcnQoInBhdGgiLCI6Zmlyc3QtY2hpbGQiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgiY3Jpc3AiLDEpLmNhbGwoZi5zdHJva2UsZS5kaXZpZGVyY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUuZGl2aWRlcndpZHRoLDEpKyJweCIpLGEuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCl9KHQsZSx7dmFsczpQLGxheWVyOnYscGF0aDpWLm1ha2VUaWNrUGF0aChlLHksRls0XSxlLl9kZXB0aCksdHJhbnNGbjpBfSl9KSl9ZWxzZSBlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiZaLnB1c2goKGZ1bmN0aW9uKCl7ZS5fZGVwdGg9Rls0XSooUSgpW2Uuc2lkZV0teSl9KSk7dmFyIEs9by5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoZSk7cmV0dXJuIFoucHVzaCgoZnVuY3Rpb24oKXt2YXIgcixuLGkscyxsPWUuc2lkZS5jaGFyQXQoMCksdT1VW2Uuc2lkZV0uY2hhckF0KDApLGY9Vi5nZXRQeFBvc2l0aW9uKHQsZSksaD1FP2UudGlja2xlbjowO2lmKChlLmF1dG9tYXJnaW58fEspJiYoIm11bHRpY2F0ZWdvcnkiPT09ZS50eXBlP3I9USgidGljazIiKToocj1RKCksIngiPT09ZCYmImIiPT09bCYmKGUuX2RlcHRoPU1hdGgubWF4KHIud2lkdGg+MD9yLmJvdHRvbS1mOjAsaCkpKSksZS5hdXRvbWFyZ2luKXtuPXt4OjAseTowLHI6MCxsOjAsdDowLGI6MH07dmFyIHA9WzAsMV07aWYoIngiPT09ZCl7aWYoImIiPT09bD9uW2xdPWUuX2RlcHRoOihuW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIud2lkdGg+MD9mLXIudG9wOjAsaCkscC5yZXZlcnNlKCkpLHIud2lkdGg+MCl7dmFyIGc9ci5yaWdodC0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7Zz4wJiYobi54cj0xLG4ucj1nKTt2YXIgdj1lLl9vZmZzZXQtci5sZWZ0O3Y+MCYmKG4ueGw9MCxuLmw9dil9fWVsc2UgaWYoImwiPT09bD9uW2xdPWUuX2RlcHRoPU1hdGgubWF4KHIuaGVpZ2h0PjA/Zi1yLmxlZnQ6MCxoKToobltsXT1lLl9kZXB0aD1NYXRoLm1heChyLmhlaWdodD4wP3IucmlnaHQtZjowLGgpLHAucmV2ZXJzZSgpKSxyLmhlaWdodD4wKXt2YXIgeT1yLmJvdHRvbS0oZS5fb2Zmc2V0K2UuX2xlbmd0aCk7eT4wJiYobi55Yj0wLG4uYj15KTt2YXIgeD1lLl9vZmZzZXQtci50b3A7eD4wJiYobi55dD0xLG4udD14KX1uW21dPSJmcmVlIj09PWUuYW5jaG9yP2UucG9zaXRpb246ZS5fYW5jaG9yQXhpcy5kb21haW5bcFswXV0sZS50aXRsZS50ZXh0IT09Yy5fZGZsdFRpdGxlW2RdJiYobltsXSs9Z3QoZSkrKGUudGl0bGUuc3RhbmRvZmZ8fDApKSxlLm1pcnJvciYmImZyZWUiIT09ZS5hbmNob3ImJigoaT17eDowLHk6MCxyOjAsbDowLHQ6MCxiOjB9KVt1XT1lLmxpbmV3aWR0aCxlLm1pcnJvciYmITAhPT1lLm1pcnJvciYmKGlbdV0rPWgpLCEwPT09ZS5taXJyb3J8fCJ0aWNrcyI9PT1lLm1pcnJvcj9pW21dPWUuX2FuY2hvckF4aXMuZG9tYWluW3BbMV1dOiJhbGwiIT09ZS5taXJyb3ImJiJhbGx0aWNrcyIhPT1lLm1pcnJvcnx8KGlbbV09W2UuX2NvdW50ZXJEb21haW5NaW4sZS5fY291bnRlckRvbWFpbk1heF1bcFsxXV0pKX1LJiYocz1vLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJhdXRvTWFyZ2luT3B0cyIpKHQsZSkpLGEuYXV0b01hcmdpbih0LHh0KGUpLG4pLGEuYXV0b01hcmdpbih0LGJ0KGUpLGkpLGEuYXV0b01hcmdpbih0LF90KGUpLHMpfSkpLHIuc2tpcFRpdGxlfHxLJiYiYm90dG9tIj09PWUuc2lkZXx8Wi5wdXNoKChmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByLG49dC5fZnVsbExheW91dCxpPWUuX2lkLGE9aS5jaGFyQXQoMCksbz1lLnRpdGxlLmZvbnQuc2l6ZTtpZihlLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpKXI9ZS5fZGVwdGgrZS50aXRsZS5zdGFuZG9mZitndChlKTtlbHNle3ZhciBzPVN0KGUpO2lmKCJtdWx0aWNhdGVnb3J5Ij09PWUudHlwZSlyPWUuX2RlcHRoO2Vsc2V7dmFyIGw9MS41Km87cyYmKGw9LjUqbywib3V0c2lkZSI9PT1lLnRpY2tzJiYobCs9ZS50aWNrbGVuKSkscj0xMCtsKyhlLmxpbmV3aWR0aD9lLmxpbmV3aWR0aC0xOjApfXN8fChyKz0ieCI9PT1hPyJ0b3AiPT09ZS5zaWRlP28qKGUuc2hvd3RpY2tsYWJlbHM/MTowKTpvKihlLnNob3d0aWNrbGFiZWxzPzEuNTouNSk6InJpZ2h0Ij09PWUuc2lkZT9vKihlLnNob3d0aWNrbGFiZWxzPzE6LjUpOm8qKGUuc2hvd3RpY2tsYWJlbHM/LjU6MCkpfXZhciBjLGYscCxkLG09Vi5nZXRQeFBvc2l0aW9uKHQsZSk7IngiPT09YT8oZj1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIscD0idG9wIj09PWUuc2lkZT9tLXI6bStyKToocD1lLl9vZmZzZXQrZS5fbGVuZ3RoLzIsZj0icmlnaHQiPT09ZS5zaWRlP20rcjptLXIsYz17cm90YXRlOiItOTAiLG9mZnNldDowfSk7aWYoIm11bHRpY2F0ZWdvcnkiIT09ZS50eXBlKXt2YXIgZz1lLl9zZWxlY3Rpb25zW2UuX2lkKyJ0aWNrIl07aWYoZD17c2VsZWN0aW9uOmcsc2lkZTplLnNpZGV9LGcmJmcubm9kZSgpJiZnLm5vZGUoKS5wYXJlbnROb2RlKXt2YXIgdj1oLmdldFRyYW5zbGF0ZShnLm5vZGUoKS5wYXJlbnROb2RlKTtkLm9mZnNldExlZnQ9di54LGQub2Zmc2V0VG9wPXYueX1lLnRpdGxlLmhhc093blByb3BlcnR5KCJzdGFuZG9mZiIpJiYoZC5wYWQ9MCl9cmV0dXJuIHUuZHJhdyh0LGkrInRpdGxlIix7cHJvcENvbnRhaW5lcjplLHByb3BOYW1lOmUuX25hbWUrIi50aXRsZS50ZXh0IixwbGFjZWhvbGRlcjpuLl9kZmx0VGl0bGVbYV0sYXZvaWQ6ZCx0cmFuc2Zvcm06YyxhdHRyaWJ1dGVzOnt4OmYseTpwLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9fSl9KHQsZSl9KSkscy5zeW5jT3JBc3luYyhaKX19ZnVuY3Rpb24gUSh0KXt2YXIgcj1wKyh0fHwidGljayIpO3JldHVybiB3W3JdfHwod1tyXT1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhO3QuX3NlbGVjdGlvbnNbZV0uc2l6ZSgpPyhyPTEvMCxuPS0xLzAsaT0xLzAsYT0tMS8wLHQuX3NlbGVjdGlvbnNbZV0uZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD15dCh0aGlzKSxlPWguYkJveCh0Lm5vZGUoKS5wYXJlbnROb2RlKTtyPU1hdGgubWluKHIsZS50b3ApLG49TWF0aC5tYXgobixlLmJvdHRvbSksaT1NYXRoLm1pbihpLGUubGVmdCksYT1NYXRoLm1heChhLGUucmlnaHQpfSkpKToocj0wLG49MCxpPTAsYT0wKTtyZXR1cm57dG9wOnIsYm90dG9tOm4sbGVmdDppLHJpZ2h0OmEsaGVpZ2h0Om4tcix3aWR0aDphLWl9fShlLHIpKSx3W3JdfX0sVi5nZXRUaWNrU2lnbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5faWQuY2hhckF0KDApLHI9e3g6InRvcCIseToicmlnaHQifVtlXSxuPXQuc2lkZT09PXI/MTotMSxpPVstMSwxLG4sLW5dO3JldHVybiJpbnNpZGUiIT09dC50aWNrcz09KCJ4Ij09PWUpJiYoaT1pLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuLXR9KSkpLHQuc2lkZSYmaS5wdXNoKHtsOi0xLHQ6LTEscjoxLGI6MX1bdC5zaWRlLmNoYXJBdCgwKV0pLGl9LFYubWFrZVRyYW5zVGlja0ZuPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbCh0Ll9vZmZzZXQrdC5sMnAoZS54KSwwKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGwoMCx0Ll9vZmZzZXQrdC5sMnAoZS54KSl9fSxWLm1ha2VUcmFuc1RpY2tMYWJlbEZuPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQudGlja2xhYmVscG9zaXRpb258fCIiLHI9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1lLmluZGV4T2YodCl9LG49cigidG9wIiksaT1yKCJsZWZ0IiksYT1yKCJyaWdodCIpLG89cigiYm90dG9tIikscz1yKCJpbnNpZGUiKSxsPW98fGl8fG58fGE7aWYoIWwmJiFzKXJldHVyblswLDBdO3ZhciBjPXQuc2lkZSx1PWw/KHQudGlja3dpZHRofHwwKS8yOjAsZj0zLGg9dC50aWNrZm9udD90LnRpY2tmb250LnNpemU6MTI7KG98fG4pJiYodSs9aCpOLGYrPSh0LmxpbmV3aWR0aHx8MCkvMik7KGl8fGEpJiYodSs9KHQubGluZXdpZHRofHwwKS8yLGYrPTMpO3MmJiJ0b3AiPT09YyYmKGYtPWgqKDEtTikpOyhpfHxuKSYmKHU9LXUpOyJib3R0b20iIT09YyYmInJpZ2h0IiE9PWN8fChmPS1mKTtyZXR1cm5bbD91OjAscz9mOjBdfSh0KSxyPWVbMF0sbj1lWzFdO3JldHVybiJ4Ij09PXQuX2lkLmNoYXJBdCgwKT9mdW5jdGlvbihlKXtyZXR1cm4gbChyK3QuX29mZnNldCt0LmwycChkdChlKSksbil9OmZ1bmN0aW9uKGUpe3JldHVybiBsKG4scit0Ll9vZmZzZXQrdC5sMnAoZHQoZSkpKX19LFYubWFrZVRpY2tQYXRoPWZ1bmN0aW9uKHQsZSxyLG4pe249dm9pZCAwIT09bj9uOnQudGlja2xlbjt2YXIgaT10Ll9pZC5jaGFyQXQoMCksYT0odC5saW5ld2lkdGh8fDEpLzI7cmV0dXJuIngiPT09aT8iTTAsIisoZSthKnIpKyJ2IituKnI6Ik0iKyhlK2EqcikrIiwwaCIrbipyfSxWLm1ha2VMYWJlbEZucz1mdW5jdGlvbih0LGUscil7dmFyIG49dC50aWNrbGFiZWxwb3NpdGlvbnx8IiIsYT1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PW4uaW5kZXhPZih0KX0sbz1hKCJ0b3AiKSxsPWEoImxlZnQiKSxjPWEoInJpZ2h0IiksdT1hKCJib3R0b20iKXx8bHx8b3x8YyxmPWEoImluc2lkZSIpLGg9Imluc2lkZSI9PT1uJiYiaW5zaWRlIj09PXQudGlja3N8fCFmJiYib3V0c2lkZSI9PT10LnRpY2tzJiYiYm91bmRhcmllcyIhPT10LnRpY2tzb24scD0wLGQ9MCxtPWg/dC50aWNrbGVuOjA7aWYoZj9tKj0tMTp1JiYobT0wKSxoJiYocCs9bSxyKSl7dmFyIGc9cy5kZWcycmFkKHIpO3A9bSpNYXRoLmNvcyhnKSsxLGQ9bSpNYXRoLnNpbihnKX10LnNob3d0aWNrbGFiZWxzJiYoaHx8dC5zaG93bGluZSkmJihwKz0uMip0LnRpY2tmb250LnNpemUpO3ZhciB2LHkseCxiLF8sdz17bGFiZWxTdGFuZG9mZjpwKz0odC5saW5ld2lkdGh8fDEpLzIqKGY/LTE6MSksbGFiZWxTaGlmdDpkfSxUPTAsaz10LnNpZGUsQT10Ll9pZC5jaGFyQXQoMCksTT10LnRpY2thbmdsZTtpZigieCI9PT1BKWI9KF89IWYmJiJib3R0b20iPT09a3x8ZiYmInRvcCI9PT1rKT8xOi0xLGYmJihiKj0tMSksdj1kKmIseT1lK3AqYix4PV8/MTotLjIsOTA9PT1NYXRoLmFicyhNKSYmKGY/eCs9Qjp4PS05MD09PU0mJiJib3R0b20iPT09az9OOjkwPT09TSYmInRvcCI9PT1rP0I6LjUsVD1CLzIqKE0vOTApKSx3LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCt2K1QqdC5mb250U2l6ZX0sdy55Rm49ZnVuY3Rpb24odCl7cmV0dXJuIHQuZHkreSt0LmZvbnRTaXplKnh9LHcuYW5jaG9yRm49ZnVuY3Rpb24odCxlKXtpZih1KXtpZihsKXJldHVybiJlbmQiO2lmKGMpcmV0dXJuInN0YXJ0In1yZXR1cm4gaShlKSYmMCE9PWUmJjE4MCE9PWU/ZSpiPDAhPT1mPyJlbmQiOiJzdGFydCI6Im1pZGRsZSJ9LHcuaGVpZ2h0Rm49ZnVuY3Rpb24oZSxyLG4pe3JldHVybiByPC02MHx8cj42MD8tLjUqbjoidG9wIj09PXQuc2lkZSE9PWY/LW46MH07ZWxzZSBpZigieSI9PT1BKXtpZihiPShfPSFmJiYibGVmdCI9PT1rfHxmJiYicmlnaHQiPT09ayk/MTotMSxmJiYoYio9LTEpLHY9cCx5PWQqYix4PTAsZnx8OTAhPT1NYXRoLmFicyhNKXx8KHg9LTkwPT09TSYmImxlZnQiPT09a3x8OTA9PT1NJiYicmlnaHQiPT09az9OOi41KSxmKXt2YXIgUz1pKE0pPytNOjA7aWYoMCE9PVMpe3ZhciBFPXMuZGVnMnJhZChTKTtUPU1hdGguYWJzKE1hdGguc2luKEUpKSpOKmIseD0wfX13LnhGbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5keCtlLSh2K3QuZm9udFNpemUqeCkqYitUKnQuZm9udFNpemV9LHcueUZuPWZ1bmN0aW9uKHQpe3JldHVybiB0LmR5K3krdC5mb250U2l6ZSpCfSx3LmFuY2hvckZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkoZSkmJjkwPT09TWF0aC5hYnMoZSk/Im1pZGRsZSI6Xz8iZW5kIjoic3RhcnQifSx3LmhlaWdodEZuPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4icmlnaHQiPT09dC5zaWRlJiYocio9LTEpLHI8LTMwPy1uOnI8MzA/LS41Km46MH19cmV0dXJuIHd9LFYuZHJhd1RpY2tzPWZ1bmN0aW9uKHQsZSxyKXtyPXJ8fHt9O3ZhciBuPWUuX2lkKyJ0aWNrIixpPXIudmFsczsicGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSYmKGk9aS5zbGljZSgpKS5zaGlmdCgpO3ZhciBhPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShlLnRpY2tzP2k6W10sbXQpO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKG4sMSkuY2xhc3NlZCgidGlja3MiLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLmNhbGwoZi5zdHJva2UsZS50aWNrY29sb3IpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGguY3Jpc3BSb3VuZCh0LGUudGlja3dpZHRoLDEpKyJweCIpLmF0dHIoImQiLHIucGF0aCkuc3R5bGUoImRpc3BsYXkiLG51bGwpLEV0KGUsW0RdKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKX0sVi5kcmF3R3JpZD1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgbj1lLl9pZCsiZ3JpZCIsaT1yLnZhbHMsYT1yLmNvdW50ZXJBeGlzO2lmKCExPT09ZS5zaG93Z3JpZClpPVtdO2Vsc2UgaWYoYSYmVi5zaG91bGRTaG93WmVyb0xpbmUodCxlLGEpKWZvcih2YXIgbz0iYXJyYXkiPT09ZS50aWNrbW9kZSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc10ueDtpZihvPyFsOk1hdGguYWJzKGwpPGUuZHRpY2svMTAwKXtpZihpPWkuc2xpY2UoMCxzKS5jb25jYXQoaS5zbGljZShzKzEpKSwhbylicmVhaztzLS19fXZhciBjPXIubGF5ZXIuc2VsZWN0QWxsKCJwYXRoLiIrbikuZGF0YShpLG10KTtjLmV4aXQoKS5yZW1vdmUoKSxjLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChuLDEpLmNsYXNzZWQoImNyaXNwIiwhMSE9PXIuY3Jpc3ApLGUuX2d3PWguY3Jpc3BSb3VuZCh0LGUuZ3JpZHdpZHRoLDEpLGMuYXR0cigidHJhbnNmb3JtIixyLnRyYW5zRm4pLmF0dHIoImQiLHIucGF0aCkuY2FsbChmLnN0cm9rZSxlLmdyaWRjb2xvcnx8IiNkZGQiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixlLl9ndysicHgiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksRXQoZSxbel0pLCJmdW5jdGlvbiI9PXR5cGVvZiByLnBhdGgmJmMuYXR0cigiZCIsci5wYXRoKX0sVi5kcmF3WmVyb0xpbmU9ZnVuY3Rpb24odCxlLHIpe3I9cnx8cjt2YXIgbj1lLl9pZCsiemwiLGk9Vi5zaG91bGRTaG93WmVyb0xpbmUodCxlLHIuY291bnRlckF4aXMpLGE9ci5sYXllci5zZWxlY3RBbGwoInBhdGguIituKS5kYXRhKGk/W3t4OjAsaWQ6ZS5faWR9XTpbXSk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobiwxKS5jbGFzc2VkKCJ6bCIsMSkuY2xhc3NlZCgiY3Jpc3AiLCExIT09ci5jcmlzcCkuZWFjaCgoZnVuY3Rpb24oKXtyLmxheWVyLnNlbGVjdEFsbCgicGF0aCIpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIEcodC5pZCxlLmlkKX0pKX0pKSxhLmF0dHIoInRyYW5zZm9ybSIsci50cmFuc0ZuKS5hdHRyKCJkIixyLnBhdGgpLmNhbGwoZi5zdHJva2UsZS56ZXJvbGluZWNvbG9yfHxmLmRlZmF1bHRMaW5lKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixoLmNyaXNwUm91bmQodCxlLnplcm9saW5ld2lkdGgsZS5fZ3d8fDEpKyJweCIpLnN0eWxlKCJkaXNwbGF5IixudWxsKSxFdChlLFtPXSl9LFYuZHJhd0xhYmVscz1mdW5jdGlvbih0LGUscil7cj1yfHx7fTt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQsdT1vLmNoYXJBdCgwKSxmPXIuY2xzfHxvKyJ0aWNrIixwPXIudmFscyxkPXIubGFiZWxGbnMsbT1yLnNlY29uZGFyeT8wOmUudGlja2FuZ2xlLGc9KGUuX3ByZXZUaWNrQW5nbGVzfHx7fSlbZl0sdj1yLmxheWVyLnNlbGVjdEFsbCgiZy4iK2YpLmRhdGEoZS5zaG93dGlja2xhYmVscz9wOltdLG10KSx5PVtdO2Z1bmN0aW9uIHgodCxhKXt0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPW4uc2VsZWN0KHRoaXMpLHM9by5zZWxlY3QoIi50ZXh0LW1hdGgtZ3JvdXAiKSx1PWQuYW5jaG9yRm4odCxhKSxmPXIudHJhbnNGbi5jYWxsKG8ubm9kZSgpLHQpKyhpKGEpJiYwIT0rYT8iIHJvdGF0ZSgiK2ErIiwiK2QueEZuKHQpKyIsIisoZC55Rm4odCktdC5mb250U2l6ZS8yKSsiKSI6IiIpLHA9Yy5saW5lQ291bnQobyksbT1qKnQuZm9udFNpemUsZz1kLmhlaWdodEZuKHQsaShhKT8rYTowLChwLTEpKm0pO2lmKGcmJihmKz1sKDAsZykpLHMuZW1wdHkoKSl7dmFyIHY9by5zZWxlY3QoInRleHQiKTt2LmF0dHIoe3RyYW5zZm9ybTpmLCJ0ZXh0LWFuY2hvciI6dX0pLHYuc3R5bGUoIm9wYWNpdHkiLDEpLGUuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyYmZS5fYWRqdXN0VGlja0xhYmVsc092ZXJmbG93KCl9ZWxzZXt2YXIgeT1oLmJCb3gocy5ub2RlKCkpLndpZHRoKntlbmQ6LS41LHN0YXJ0Oi41fVt1XTtzLmF0dHIoInRyYW5zZm9ybSIsZitsKHksMCkpfX0pKX12LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChmLDEpLmFwcGVuZCgidGV4dCIpLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksaT10Ll9wcm9taXNlcy5sZW5ndGg7ci5jYWxsKGMucG9zaXRpb25UZXh0LGQueEZuKGUpLGQueUZuKGUpKS5jYWxsKGguZm9udCxlLmZvbnQsZS5mb250U2l6ZSxlLmZvbnRDb2xvcikudGV4dChlLnRleHQpLmNhbGwoYy5jb252ZXJ0VG9Uc3BhbnMsdCksdC5fcHJvbWlzZXNbaV0/eS5wdXNoKHQuX3Byb21pc2VzLnBvcCgpLnRoZW4oKGZ1bmN0aW9uKCl7eChyLG0pfSkpKTp4KHIsbSl9KSksRXQoZSxbUl0pLHYuZXhpdCgpLnJlbW92ZSgpLHIucmVwb3NpdGlvbk9uVXBkYXRlJiZ2LmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmNhbGwoYy5wb3NpdGlvblRleHQsZC54Rm4odCksZC55Rm4odCkpfSkpLGUuX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdz1mdW5jdGlvbigpe3ZhciByPWUudGlja2xhYmVsb3ZlcmZsb3c7aWYociYmImFsbG93IiE9PXIpe3ZhciBpPS0xIT09ci5pbmRleE9mKCJoaWRlIiksbz0ieCI9PT1lLl9pZC5jaGFyQXQoMCksbD0wLGM9bz90Ll9mdWxsTGF5b3V0LndpZHRoOnQuX2Z1bGxMYXlvdXQuaGVpZ2h0O2lmKC0xIT09ci5pbmRleE9mKCJkb21haW4iKSl7dmFyIHU9cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7bD1lLmwycCh1WzBdKStlLl9vZmZzZXQsYz1lLmwycCh1WzFdKStlLl9vZmZzZXR9dmFyIGY9TWF0aC5taW4obCxjKSxwPU1hdGgubWF4KGwsYyksZD1lLnNpZGUsbT0xLzAsZz0tMS8wO2Zvcih2YXIgeSBpbiB2LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2lmKHIuc2VsZWN0KCIudGV4dC1tYXRoLWdyb3VwIikuZW1wdHkoKSl7dmFyIGE9aC5iQm94KHIubm9kZSgpKSxzPTA7bz8oYS5yaWdodD5wfHxhLmxlZnQ8ZikmJihzPTEpOihhLmJvdHRvbT5wfHxhLnRvcCsoZS50aWNrYW5nbGU/MDp0LmZvbnRTaXplLzQpPGYpJiYocz0xKTt2YXIgbD1yLnNlbGVjdCgidGV4dCIpO3M/aSYmbC5zdHlsZSgib3BhY2l0eSIsMCk6KGwuc3R5bGUoIm9wYWNpdHkiLDEpLG09ImJvdHRvbSI9PT1kfHwicmlnaHQiPT09ZD9NYXRoLm1pbihtLG8/YS50b3A6YS5sZWZ0KTotMS8wLGc9InRvcCI9PT1kfHwibGVmdCI9PT1kP01hdGgubWF4KGcsbz9hLmJvdHRvbTphLnJpZ2h0KToxLzApfX0pKSxhLl9wbG90cyl7dmFyIHg9YS5fcGxvdHNbeV07aWYoZS5faWQ9PT14LnhheGlzLl9pZHx8ZS5faWQ9PT14LnlheGlzLl9pZCl7dmFyIGI9bz94LnlheGlzOngueGF4aXM7YiYmKGJbIl92aXNpYmxlTGFiZWxNaW5fIitlLl9pZF09bSxiWyJfdmlzaWJsZUxhYmVsTWF4XyIrZS5faWRdPWcpfX19fSxlLl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzPWZ1bmN0aW9uKHQpe3ZhciByPSJ4Ij09PWUuX2lkLmNoYXJBdCgwKSxpPVtdO2Zvcih2YXIgbyBpbiBhLl9wbG90cyl7dmFyIHM9YS5fcGxvdHNbb107ZS5faWQhPT1zLnhheGlzLl9pZCYmZS5faWQhPT1zLnlheGlzLl9pZHx8aS5wdXNoKHI/cy55YXhpczpzLnhheGlzKX1pLmZvckVhY2goKGZ1bmN0aW9uKHIsaSl7ciYmU3QocikmJih0fHxbTyx6LEQsUl0pLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBvPSJ0aWNrIj09PXQuSyYmInRleHQiPT09dC5MJiYicGVyaW9kIj09PWUudGlja2xhYmVsbW9kZSxzPWEuX3Bsb3RzW2UuX21haW5TdWJwbG90XTsodC5LPT09Ty5LP3MuemVyb2xpbmVsYXllci5zZWxlY3RBbGwoIi4iK2UuX2lkKyJ6bCIpOnQuSz09PXouSz9zLmdyaWRsYXllci5zZWxlY3RBbGwoIi4iK2UuX2lkKTpzW2UuX2lkLmNoYXJBdCgwKSsiYXhpc2xheWVyIl0pLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5zZWxlY3QodGhpcyk7dC5MJiYoYT1hLnNlbGVjdEFsbCh0LkwpKSxhLmVhY2goKGZ1bmN0aW9uKGEpe3ZhciBzPWUubDJwKG8/ZHQoYSk6YS54KStlLl9vZmZzZXQsbD1uLnNlbGVjdCh0aGlzKTtzPGVbIl92aXNpYmxlTGFiZWxNYXhfIityLl9pZF0mJnM+ZVsiX3Zpc2libGVMYWJlbE1pbl8iK3IuX2lkXT9sLnN0eWxlKCJkaXNwbGF5Iiwibm9uZSIpOiJ0aWNrIiE9PXQuS3x8aXx8bC5zdHlsZSgiZGlzcGxheSIsbnVsbCl9KSl9KSl9KSl9KSl9LHgodixnKzE/ZzptKTt2YXIgYj1udWxsO2UuX3NlbGVjdGlvbnMmJihlLl9zZWxlY3Rpb25zW2ZdPXYpO3ZhciBfPVtmdW5jdGlvbigpe3JldHVybiB5Lmxlbmd0aCYmUHJvbWlzZS5hbGwoeSl9XTtlLmF1dG9tYXJnaW4mJmEuX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQmJjkwPT09Zz8oYj05MCxfLnB1c2goKGZ1bmN0aW9uKCl7eCh2LGcpfSkpKTpfLnB1c2goKGZ1bmN0aW9uKCl7aWYoeCh2LG0pLHAubGVuZ3RoJiYieCI9PT11JiYhaShtKSYmKCJsb2ciIT09ZS50eXBlfHwiRCIhPT1TdHJpbmcoZS5kdGljaykuY2hhckF0KDApKSl7Yj0wO3ZhciB0LG49MCxhPVtdO2lmKHYuZWFjaCgoZnVuY3Rpb24odCl7bj1NYXRoLm1heChuLHQuZm9udFNpemUpO3ZhciByPWUubDJwKHQueCksaT15dCh0aGlzKSxvPWguYkJveChpLm5vZGUoKSk7YS5wdXNoKHt0b3A6MCxib3R0b206MTAsaGVpZ2h0OjEwLGxlZnQ6ci1vLndpZHRoLzIscmlnaHQ6citvLndpZHRoLzIrMix3aWR0aDpvLndpZHRoKzJ9KX0pKSwiYm91bmRhcmllcyIhPT1lLnRpY2tzb24mJiFlLnNob3dkaXZpZGVyc3x8ci5zZWNvbmRhcnkpe3ZhciBvPXAubGVuZ3RoLGw9TWF0aC5hYnMoKHBbby0xXS54LXBbMF0ueCkqZS5fbSkvKG8tMSksYz1lLnRpY2tsYWJlbHBvc2l0aW9ufHwiIixmPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Yy5pbmRleE9mKHQpfSxkPWYoInRvcCIpLGc9ZigibGVmdCIpLHk9ZigicmlnaHQiKSxfPWYoImJvdHRvbSIpfHxnfHxkfHx5PyhlLnRpY2t3aWR0aHx8MCkrNjowLHc9bDwyLjUqbnx8Im11bHRpY2F0ZWdvcnkiPT09ZS50eXBlO2Zvcih0PTA7dDxhLmxlbmd0aC0xO3QrKylpZihzLmJCb3hJbnRlcnNlY3QoYVt0XSxhW3QrMV0sXykpe2I9dz85MDozMDticmVha319ZWxzZXt2YXIgVD0yO2ZvcihlLnRpY2tzJiYoVCs9ZS50aWNrd2lkdGgvMiksdD0wO3Q8YS5sZW5ndGg7dCsrKXt2YXIgaz1wW3RdLnhibmQsQT1hW3RdO2lmKG51bGwhPT1rWzBdJiZBLmxlZnQtZS5sMnAoa1swXSk8VHx8bnVsbCE9PWtbMV0mJmUubDJwKGtbMV0pLUEucmlnaHQ8VCl7Yj05MDticmVha319fWImJngodixiKX19KSksZS5fdGlja0FuZ2xlcyYmXy5wdXNoKChmdW5jdGlvbigpe2UuX3RpY2tBbmdsZXNbZl09bnVsbD09PWI/aShtKT9tOjA6Yn0pKTt2YXIgdz1lLl9hbmNob3JBeGlzO3cmJncuYXV0b3JhbmdlJiZTdChlKSYmIVkoYSxlLl9pZCkmJihhLl9pbnNpZGVUaWNrTGFiZWxzQXV0b3JhbmdlfHwoYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZT17fSksYS5faW5zaWRlVGlja0xhYmVsc0F1dG9yYW5nZVt3Ll9uYW1lKyIuYXV0b3JhbmdlIl09dy5hdXRvcmFuZ2UsXy5wdXNoKChmdW5jdGlvbigpe3YuZWFjaCgoZnVuY3Rpb24odCxyKXt2YXIgbj15dCh0aGlzKTtuLnNlbGVjdCgiLnRleHQtbWF0aC1ncm91cCIpLmVtcHR5KCkmJihlLl92YWxzW3JdLmJiPWguYkJveChuLm5vZGUoKSkpfSkpfSkpKTt2YXIgVD1zLnN5bmNPckFzeW5jKF8pO3JldHVybiBUJiZULnRoZW4mJnQuX3Byb21pc2VzLnB1c2goVCksVH0sVi5nZXRQeFBvc2l0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10Ll9mdWxsTGF5b3V0Ll9zaXplLGk9ZS5faWQuY2hhckF0KDApLGE9ZS5zaWRlO3JldHVybiJmcmVlIiE9PWUuYW5jaG9yP3I9ZS5fYW5jaG9yQXhpczoieCI9PT1pP3I9e19vZmZzZXQ6bi50KygxLShlLnBvc2l0aW9ufHwwKSkqbi5oLF9sZW5ndGg6MH06InkiPT09aSYmKHI9e19vZmZzZXQ6bi5sKyhlLnBvc2l0aW9ufHwwKSpuLncsX2xlbmd0aDowfSksInRvcCI9PT1hfHwibGVmdCI9PT1hP3IuX29mZnNldDoiYm90dG9tIj09PWF8fCJyaWdodCI9PT1hP3IuX29mZnNldCtyLl9sZW5ndGg6dm9pZCAwfSxWLnNob3VsZFNob3daZXJvTGluZT1mdW5jdGlvbih0LGUscil7dmFyIG49cy5zaW1wbGVNYXAoZS5yYW5nZSxlLnIybCk7cmV0dXJuIG5bMF0qblsxXTw9MCYmZS56ZXJvbGluZSYmKCJsaW5lYXIiPT09ZS50eXBlfHwiLSI9PT1lLnR5cGUpJiYhKGUucmFuZ2VicmVha3MmJmUubWFza0JyZWFrcygwKT09PUkpJiYodnQoZSwwKXx8IWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXIuX21haW5BeGlzO2lmKCFpKXJldHVybjt2YXIgYT10Ll9mdWxsTGF5b3V0LG89ZS5faWQuY2hhckF0KDApLHM9Vi5jb3VudGVyTGV0dGVyKGUuX2lkKSxsPWUuX29mZnNldCsoTWF0aC5hYnMoblswXSk8TWF0aC5hYnMoblsxXSk9PSgieCI9PT1vKT8wOmUuX2xlbmd0aCk7ZnVuY3Rpb24gYyh0KXtpZighdC5zaG93bGluZXx8IXQubGluZXdpZHRoKXJldHVybiExO3ZhciByPU1hdGgubWF4KCh0LmxpbmV3aWR0aCtlLnplcm9saW5ld2lkdGgpLzIsMSk7ZnVuY3Rpb24gbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJk1hdGguYWJzKHQtbCk8cn1pZihuKHQuX21haW5MaW5lUG9zaXRpb24pfHxuKHQuX21haW5NaXJyb3JQb3NpdGlvbikpcmV0dXJuITA7dmFyIGk9dC5fbGluZXBvc2l0aW9uc3x8e307Zm9yKHZhciBhIGluIGkpaWYobihpW2FdWzBdKXx8bihpW2FdWzFdKSlyZXR1cm4hMH12YXIgdT1hLl9wbG90c1tyLl9tYWluU3VicGxvdF07aWYoISh1Lm1haW5wbG90aW5mb3x8dSkub3ZlcmxheXMubGVuZ3RoKXJldHVybiBjKHIpO2Zvcih2YXIgZj1WLmxpc3QodCxzKSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07aWYocC5fbWFpbkF4aXM9PT1pJiZjKHApKXJldHVybiEwfX0odCxlLHIsbil8fGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxEYXRhLG49ZS5fbWFpblN1YnBsb3QsaT1lLl9pZC5jaGFyQXQoMCksYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgcz1yW2FdO2lmKCEwPT09cy52aXNpYmxlJiZzLnhheGlzK3MueWF4aXM9PT1uKXtpZihvLnRyYWNlSXMocywiYmFyLWxpa2UiKSYmcy5vcmllbnRhdGlvbj09PXt4OiJoIix5OiJ2In1baV0pcmV0dXJuITA7aWYocy5maWxsJiZzLmZpbGwuY2hhckF0KHMuZmlsbC5sZW5ndGgtMSk9PT1pKXJldHVybiEwfX1yZXR1cm4hMX0odCxlKSl9LFYuY2xpcEVuZHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2dCh0LGUueCl9KSl9LFYuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1WLmxpc3QodCwiIiwhMCkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uYXV0b21hcmdpbiYmKGEuYWxsb3dBdXRvTWFyZ2luKHQseHQobikpLG4ubWlycm9yJiZhLmFsbG93QXV0b01hcmdpbih0LGJ0KG4pKSksby5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikobikmJmEuYWxsb3dBdXRvTWFyZ2luKHQsX3QobikpfX0sVi5zd2FwPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBhPVtdLG89dC5fZnVsbERhdGFbZVtyXV0ueGF4aXMscz10Ll9mdWxsRGF0YVtlW3JdXS55YXhpcztpZihvJiZzKXtmb3Iobj0wO248aS5sZW5ndGg7bisrKS0xPT09aVtuXS54LmluZGV4T2YobykmJi0xPT09aVtuXS55LmluZGV4T2Yocyl8fGEucHVzaChuKTtpZihhLmxlbmd0aCl7dmFyIGwsYz1pW2FbMF1dO2lmKGEubGVuZ3RoPjEpZm9yKG49MTtuPGEubGVuZ3RoO24rKylsPWlbYVtuXV0sd3QoYy54LGwueCksd3QoYy55LGwueSk7d3QoYy54LFtvXSksd3QoYy55LFtzXSl9ZWxzZSBpLnB1c2goe3g6W29dLHk6W3NdfSl9fXJldHVybiBpfSh0LGUpLG49MDtuPHIubGVuZ3RoO24rKylUdCh0LHJbbl0ueCxyW25dLnkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9wbG90cyI6ODkwLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F1dG9yYW5nZSI6ODI2LCIuL2F4aXNfYXV0b3R5cGUiOjgyOCwiLi9heGlzX2lkcyI6ODMxLCIuL2NsZWFuX3RpY2tzIjo4MzMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9zZXRfY29udmVydCI6ODQ4LCJAcGxvdGx5L2QzIjo1OCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDgyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89aS5pc0FycmF5T3JUeXBlZEFycmF5LHM9aS5pc0RhdGVUaW1lLGw9aS5jbGVhbk51bWJlcixjPU1hdGgucm91bmQ7ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBlP24odCk6Im51bWJlciI9PXR5cGVvZiB0fWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGgubWF4KDEsKHQtMSkvMWUzKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXQsaD1yLm5vTXVsdGlDYXRlZ29yeTtpZihvKGkpJiYhaS5sZW5ndGgpcmV0dXJuIi0iO2lmKCFoJiZmdW5jdGlvbih0KXtyZXR1cm4gbyh0WzBdKSYmbyh0WzFdKX0oaSkpcmV0dXJuIm11bHRpY2F0ZWdvcnkiO2lmKGgmJkFycmF5LmlzQXJyYXkoaVswXSkpe2Zvcih2YXIgcD1bXSxkPTA7ZDxpLmxlbmd0aDtkKyspaWYobyhpW2RdKSlmb3IodmFyIG09MDttPGlbZF0ubGVuZ3RoO20rKylwLnB1c2goaVtkXVttXSk7aT1wfWlmKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLGk9ZihyKSxhPTAsbz0wLGw9e30sdT0wO3U8cjt1Kz1pKXt2YXIgaD1jKHUpLHA9dFtoXSxkPVN0cmluZyhwKTtsW2RdfHwobFtkXT0xLHMocCxlKSYmYSsrLG4ocCkmJm8rKyl9cmV0dXJuIGE+MipvfShpLGUpKXJldHVybiJkYXRlIjt2YXIgZz0ic3RyaWN0IiE9PXIuYXV0b3R5cGVudW1iZXJzO3JldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPWYociksaT0wLG89MCxzPXt9LHU9MDt1PHI7dSs9bil7dmFyIGg9Yyh1KSxwPXRbaF0sZD1TdHJpbmcocCk7aWYoIXNbZF0pe3NbZF09MTt2YXIgbT10eXBlb2YgcDsiYm9vbGVhbiI9PT1tP28rKzooZT9sKHApIT09YToibnVtYmVyIj09PW0pP2krKzoic3RyaW5nIj09PW0mJm8rK319cmV0dXJuIG8+MippfShpLGcpPyJjYXRlZ29yeSI6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0wO248cjtuKyspaWYodSh0W25dLGUpKXJldHVybiEwO3JldHVybiExfShpLGcpPyJsaW5lYXIiOiItIn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDgyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIikscz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksbD10KCIuL3RpY2tfdmFsdWVfZGVmYXVsdHMiKSxjPXQoIi4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxmPXQoIi4vY2F0ZWdvcnlfb3JkZXJfZGVmYXVsdHMiKSxoPXQoIi4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuL3NldF9jb252ZXJ0IiksZD10KCIuL2NvbnN0YW50cyIpLldFRUtEQVlfUEFUVEVSTixtPXQoIi4vY29uc3RhbnRzIikuSE9VUl9QQVRURVJOO2Z1bmN0aW9uIGcodCxlLHIpe2Z1bmN0aW9uIGkocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLHMucmFuZ2VicmVha3MscixuKX1pZihpKCJlbmFibGVkIikpe3ZhciBvPWkoImJvdW5kcyIpO2lmKG8mJm8ubGVuZ3RoPj0yKXt2YXIgbCxjLHU9IiI7aWYoMj09PW8ubGVuZ3RoKWZvcihsPTA7bDwyO2wrKylpZihjPXkob1tsXSkpe3U9ZDticmVha312YXIgZj1pKCJwYXR0ZXJuIix1KTtpZihmPT09ZClmb3IobD0wO2w8MjtsKyspKGM9eShvW2xdKSkmJihlLmJvdW5kc1tsXT1vW2xdPWMtMSk7aWYoZilmb3IobD0wO2w8MjtsKyspc3dpdGNoKGM9b1tsXSxmKXtjYXNlIGQ6aWYoIW4oYykpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpZigoYz0rYykhPT1NYXRoLmZsb29yKGMpfHxjPDB8fGM+PTcpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWM7YnJlYWs7Y2FzZSBtOmlmKCFuKGMpKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSk7aWYoKGM9K2MpPDB8fGM+MjQpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtlLmJvdW5kc1tsXT1vW2xdPWN9aWYoITE9PT1yLmF1dG9yYW5nZSl7dmFyIGg9ci5yYW5nZTtpZihoWzBdPGhbMV0pe2lmKG9bMF08aFswXSYmb1sxXT5oWzFdKXJldHVybiB2b2lkKGUuZW5hYmxlZD0hMSl9ZWxzZSBpZihvWzBdPmhbMF0mJm9bMV08aFsxXSlyZXR1cm4gdm9pZChlLmVuYWJsZWQ9ITEpfX1lbHNle3ZhciBwPWkoInZhbHVlcyIpO2lmKCFwfHwhcC5sZW5ndGgpcmV0dXJuIHZvaWQoZS5lbmFibGVkPSExKTtpKCJkdmFsdWUiKX19fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLG0pe3ZhciB2LHk9bi5sZXR0ZXIseD1uLmZvbnR8fHt9LGI9bi5zcGxvbVN0YXNofHx7fSxfPXIoInZpc2libGUiLCFuLnZpc2libGVEZmx0KSx3PWUuX3RlbXBsYXRlfHx7fSxUPWUudHlwZXx8dy50eXBlfHwiLSI7ImRhdGUiPT09VCYmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVEZWZhdWx0cyIpKHQsZSwiY2FsZW5kYXIiLG4uY2FsZW5kYXIpLG4ubm9UaWNrbGFiZWxtb2RlfHwodj1yKCJ0aWNrbGFiZWxtb2RlIikpKTt2YXIgaz0iIjtuLm5vVGlja2xhYmVscG9zaXRpb24mJiJtdWx0aWNhdGVnb3J5IiE9PVR8fChrPWEuY29lcmNlKHQsZSx7dGlja2xhYmVscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6Im91dHNpZGUiLHZhbHVlczoicGVyaW9kIj09PXY/WyJvdXRzaWRlIiwiaW5zaWRlIl06IngiPT09eT9bIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIGxlZnQiLCJpbnNpZGUgbGVmdCIsIm91dHNpZGUgcmlnaHQiLCJpbnNpZGUgcmlnaHQiXTpbIm91dHNpZGUiLCJpbnNpZGUiLCJvdXRzaWRlIHRvcCIsImluc2lkZSB0b3AiLCJvdXRzaWRlIGJvdHRvbSIsImluc2lkZSBib3R0b20iXX19LCJ0aWNrbGFiZWxwb3NpdGlvbiIpKSxuLm5vVGlja2xhYmVsb3ZlcmZsb3d8fHIoInRpY2tsYWJlbG92ZXJmbG93IiwtMSE9PWsuaW5kZXhPZigiaW5zaWRlIik/ImhpZGUgcGFzdCBkb21haW4iOiJjYXRlZ29yeSI9PT1UfHwibXVsdGljYXRlZ29yeSI9PT1UPyJhbGxvdyI6ImhpZGUgcGFzdCBkaXYiKSxwKGUsbSk7dmFyIEE9IWUuaXNWYWxpZFJhbmdlKHQucmFuZ2UpO0EmJm4ucmV2ZXJzZURmbHQmJihBPSJyZXZlcnNlZCIpLCFyKCJhdXRvcmFuZ2UiLEEpfHwibGluZWFyIiE9PVQmJiItIiE9PVR8fHIoInJhbmdlbW9kZSIpLHIoInJhbmdlIiksZS5jbGVhblJhbmdlKCksZih0LGUscixuKSwiY2F0ZWdvcnkiPT09VHx8bi5ub0hvdmVyfHxyKCJob3ZlcmZvcm1hdCIpO3ZhciBNPXIoImNvbG9yIiksUz1NIT09cy5jb2xvci5kZmx0P006eC5jb2xvcixFPWIubGFiZWx8fG0uX2RmbHRUaXRsZVt5XTtpZih1KHQsZSxyLFQsbix7cGFzczoxfSksIV8pcmV0dXJuIGU7cigidGl0bGUudGV4dCIsRSksYS5jb2VyY2VGb250KHIsInRpdGxlLmZvbnQiLHtmYW1pbHk6eC5mYW1pbHksc2l6ZTphLmJpZ0ZvbnQoeC5zaXplKSxjb2xvcjpTfSksbCh0LGUscixUKSx1KHQsZSxyLFQsbix7cGFzczoyfSksYyh0LGUscixuKSxoKHQsZSxyLHtkZmx0Q29sb3I6TSxiZ0NvbG9yOm4uYmdDb2xvcixzaG93R3JpZDpuLnNob3dHcmlkLGF0dHJpYnV0ZXM6c30pLChlLnNob3dsaW5lfHxlLnRpY2tzKSYmcigibWlycm9yIiksbi5hdXRvbWFyZ2luJiZyKCJhdXRvbWFyZ2luIik7dmFyIEwsQz0ibXVsdGljYXRlZ29yeSI9PT1UO24ubm9UaWNrc29ufHwiY2F0ZWdvcnkiIT09VCYmIUN8fCFlLnRpY2tzJiYhZS5zaG93Z3JpZHx8KEMmJihMPSJib3VuZGFyaWVzIiksImJvdW5kYXJpZXMiPT09cigidGlja3NvbiIsTCkmJmRlbGV0ZSBlLnRpY2tsYWJlbHBvc2l0aW9uKTtDJiYocigic2hvd2RpdmlkZXJzIikmJihyKCJkaXZpZGVyY29sb3IiKSxyKCJkaXZpZGVyd2lkdGgiKSkpO2lmKCJkYXRlIj09PVQpaWYobyh0LGUse25hbWU6InJhbmdlYnJlYWtzIixpbmNsdXNpb25BdHRyOiJlbmFibGVkIixoYW5kbGVJdGVtRGVmYXVsdHM6Z30pLGUucmFuZ2VicmVha3MubGVuZ3RoKXtmb3IodmFyIFA9MDtQPGUucmFuZ2VicmVha3MubGVuZ3RoO1ArKylpZihlLnJhbmdlYnJlYWtzW1BdLnBhdHRlcm49PT1kKXtlLl9oYXNEYXlPZldlZWtCcmVha3M9ITA7YnJlYWt9aWYocChlLG0pLG0uX2hhcygic2NhdHRlcmdsIil8fG0uX2hhcygic3Bsb20iKSlmb3IodmFyIEk9MDtJPG4uZGF0YS5sZW5ndGg7SSsrKXt2YXIgTz1uLmRhdGFbSV07InNjYXR0ZXJnbCIhPT1PLnR5cGUmJiJzcGxvbSIhPT1PLnR5cGV8fChPLnZpc2libGU9ITEsYS53YXJuKE8udHlwZSsiIHRyYWNlcyBkbyBub3Qgd29yayBvbiBheGVzIHdpdGggcmFuZ2VicmVha3MuIFNldHRpbmcgdHJhY2UgIitPLmluZGV4KyIgdG8gYHZpc2libGU6IGZhbHNlYC4iKSl9fWVsc2UgZGVsZXRlIGUucmFuZ2VicmVha3M7cmV0dXJuIGV9O3ZhciB2PXtzdW46MSxtb246Mix0dWU6Myx3ZWQ6NCx0aHU6NSxmcmk6NixzYXQ6N307ZnVuY3Rpb24geSh0KXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHZbdC5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpXX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIjo4MzIsIi4vY29uc3RhbnRzIjo4MzQsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi9zZXRfY29udmVydCI6ODQ4LCIuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw4MzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29uc3RhbnRzL2RvY3MiKSxpPW4uRk9STUFUX0xJTkssYT1uLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gbyh0LGUpe3JldHVyblsiU2V0cyB0aGUgIit0KyIgZm9ybWF0dGluZyBydWxlIisoZT8iZm9yIGAiK2UrImAgIjoiIiksInVzaW5nIGQzIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZXMiLCJ3aGljaCBhcmUgdmVyeSBzaW1pbGFyIHRvIHRob3NlIGluIFB5dGhvbi4gRm9yIG51bWJlcnMsIHNlZTogIitpKyIuIl0uam9pbigiICIpfWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gbyh0LGUpK1siIEFuZCBmb3IgZGF0ZXMgc2VlOiAiK2ErIi4iLCJXZSBhZGQgdHdvIGl0ZW1zIHRvIGQzJ3MgZGF0ZSBmb3JtYXR0ZXI6IiwiKiVoKiBmb3IgaGFsZiBvZiB0aGUgeWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyIGFzIHdlbGwgYXMiLCIqJXtufWYqIGZvciBmcmFjdGlvbmFsIHNlY29uZHMiLCJ3aXRoIG4gZGlnaXRzLiBGb3IgZXhhbXBsZSwgKjIwMTYtMTAtMTMgMDk6MTU6MjMuNDU2KiB3aXRoIHRpY2tmb3JtYXQiLCIqJUh+JU1+JVMuJTJmKiB3b3VsZCBkaXNwbGF5ICowOX4xNX4yMy40NioiXS5qb2luKCIgIil9ZS5leHBvcnRzPXtheGlzSG92ZXJGb3JtYXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJub25lIixkZXNjcmlwdGlvbjooZT9vOnMpKCJob3ZlciB0ZXh0Iix0KStbIkJ5IGRlZmF1bHQgdGhlIHZhbHVlcyBhcmUgZm9ybWF0dGVkIHVzaW5nICIrKGU/ImdlbmVyaWMgbnVtYmVyIGZvcm1hdCI6ImAiK3QrImF4aXMuaG92ZXJmb3JtYXRgIikrIi4iXS5qb2luKCIgIil9fSxkZXNjcmlwdGlvbk9ubHlOdW1iZXJzOm8sZGVzY3JpcHRpb25XaXRoRGF0ZXM6c319LHsiLi4vLi4vY29uc3RhbnRzL2RvY3MiOjc0N31dLDgzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSl7aWYoZSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXVt0XSlyZXR1cm4hMDtyZXR1cm4hMX1yLmlkMm5hbWU9ZnVuY3Rpb24odCl7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikpe3ZhciBlPXQuc3BsaXQoIiAiKVswXS5zdWJzdHIoMSk7cmV0dXJuIjEiPT09ZSYmKGU9IiIpLHQuY2hhckF0KDApKyJheGlzIitlfX0sci5uYW1lMmlkPWZ1bmN0aW9uKHQpe2lmKHQubWF0Y2goaS5BWF9OQU1FX1BBVFRFUk4pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksdC5jaGFyQXQoMCkrZX19LHIuY2xlYW5JZD1mdW5jdGlvbih0LGUscil7dmFyIG49LyggZG9tYWluKSQvLnRlc3QodCk7aWYoInN0cmluZyI9PXR5cGVvZiB0JiZ0Lm1hdGNoKGkuQVhfSURfUEFUVEVSTikmJighZXx8dC5jaGFyQXQoMCk9PT1lKSYmKCFufHxyKSl7dmFyIGE9dC5zcGxpdCgiICIpWzBdLnN1YnN0cigxKS5yZXBsYWNlKC9eMCsvLCIiKTtyZXR1cm4iMSI9PT1hJiYoYT0iIiksdC5jaGFyQXQoMCkrYSsobiYmcj8iIGRvbWFpbiI6IiIpfX0sci5saXN0PWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10Ll9mdWxsTGF5b3V0O2lmKCFpKXJldHVybltdO3ZhciBhLG89ci5saXN0SWRzKHQsZSkscz1uZXcgQXJyYXkoby5sZW5ndGgpO2ZvcihhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBsPW9bYV07c1thXT1pW2wuY2hhckF0KDApKyJheGlzIitsLnN1YnN0cigxKV19aWYoIW4pe3ZhciBjPWkuX3N1YnBsb3RzLmdsM2R8fFtdO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspe3ZhciB1PWlbY1thXV07ZT9zLnB1c2godVtlKyJheGlzIl0pOnMucHVzaCh1LnhheGlzLHUueWF4aXMsdS56YXhpcyl9fXJldHVybiBzfSxyLmxpc3RJZHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKCFyKXJldHVybltdO3ZhciBuPXIuX3N1YnBsb3RzO3JldHVybiBlP25bZSsiYXhpcyJdOm4ueGF4aXMuY29uY2F0KG4ueWF4aXMpfSxyLmdldEZyb21JZD1mdW5jdGlvbih0LGUsbil7dmFyIGk9dC5fZnVsbExheW91dDtyZXR1cm4gZT12b2lkIDA9PT1lfHwic3RyaW5nIiE9dHlwZW9mIGU/ZTplLnJlcGxhY2UoIiBkb21haW4iLCIiKSwieCI9PT1uP2U9ZS5yZXBsYWNlKC95WzAtOV0qLywiIik6InkiPT09biYmKGU9ZS5yZXBsYWNlKC94WzAtOV0qLywiIikpLGlbci5pZDJuYW1lKGUpXX0sci5nZXRGcm9tVHJhY2U9ZnVuY3Rpb24odCxlLGkpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1udWxsO2lmKG4udHJhY2VJcyhlLCJnbDNkIikpe3ZhciBzPWUuc2NlbmU7InNjZW5lIj09PXMuc3Vic3RyKDAsNSkmJihvPWFbc11baSsiYXhpcyJdKX1lbHNlIG89ci5nZXRGcm9tSWQodCxlW2krImF4aXMiXXx8aSk7cmV0dXJuIG99LHIuaWRTb3J0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5jaGFyQXQoMCksbj1lLmNoYXJBdCgwKTtyZXR1cm4gciE9PW4/cj5uPzE6LTE6Kyh0LnN1YnN0cigxKXx8MSktKyhlLnN1YnN0cigxKXx8MSl9LHIucmVmMmlkPWZ1bmN0aW9uKHQpe3JldHVybiEhL15beHl6XS8udGVzdCh0KSYmdC5zcGxpdCgiICIpWzBdfSxyLmlzTGlua2VkPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGEoZSx0Ll9heGlzTWF0Y2hHcm91cHMpfHxhKGUsdC5fYXhpc0NvbnN0cmFpbnRHcm91cHMpfX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2NvbnN0YW50cyI6ODM0fV0sODMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZigiY2F0ZWdvcnkiPT09ZS50eXBlKXt2YXIgaSxhPXQuY2F0ZWdvcnlhcnJheSxvPUFycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoPjA7byYmKGk9ImFycmF5Iik7dmFyIHMsbD1yKCJjYXRlZ29yeW9yZGVyIixpKTsiYXJyYXkiPT09bCYmKHM9cigiY2F0ZWdvcnlhcnJheSIpKSxvfHwiYXJyYXkiIT09bHx8KGw9ZS5jYXRlZ29yeW9yZGVyPSJ0cmFjZSIpLCJ0cmFjZSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPVtdOiJhcnJheSI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXMuc2xpY2UoKToocz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPWUuZGF0YUF0dHJ8fHQuX2lkLmNoYXJBdCgwKSxvPXt9O2lmKGUuYXhEYXRhKXI9ZS5heERhdGE7ZWxzZSBmb3Iocj1bXSxuPTA7bjxlLmRhdGEubGVuZ3RoO24rKyl7dmFyIHM9ZS5kYXRhW25dO3NbYSsiYXhpcyJdPT09dC5faWQmJnIucHVzaChzKX1mb3Iobj0wO248ci5sZW5ndGg7bisrKXt2YXIgbD1yW25dW2FdO2ZvcihpPTA7aTxsLmxlbmd0aDtpKyspe3ZhciBjPWxbaV07bnVsbCE9YyYmKG9bY109MSl9fXJldHVybiBPYmplY3Qua2V5cyhvKX0oZSxuKS5zb3J0KCksImNhdGVnb3J5IGFzY2VuZGluZyI9PT1sP2UuX2luaXRpYWxDYXRlZ29yaWVzPXM6ImNhdGVnb3J5IGRlc2NlbmRpbmciPT09bCYmKGUuX2luaXRpYWxDYXRlZ29yaWVzPXMucmV2ZXJzZSgpKSl9fX0se31dLDgzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIiksbz1hLk9ORURBWSxzPWEuT05FV0VFSztyLmR0aWNrPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ImxvZyI9PT1lLGk9ImRhdGUiPT09ZSxhPSJjYXRlZ29yeSI9PT1lLHM9aT9vOjE7aWYoIXQpcmV0dXJuIHM7aWYobih0KSlyZXR1cm4odD1OdW1iZXIodCkpPD0wP3M6YT9NYXRoLm1heCgxLE1hdGgucm91bmQodCkpOmk/TWF0aC5tYXgoLjEsdCk6dDtpZigic3RyaW5nIiE9dHlwZW9mIHR8fCFpJiYhcilyZXR1cm4gczt2YXIgbD10LmNoYXJBdCgwKSxjPXQuc3Vic3RyKDEpO3JldHVybihjPW4oYyk/TnVtYmVyKGMpOjApPD0wfHwhKGkmJiJNIj09PWwmJmM9PT1NYXRoLnJvdW5kKGMpfHxyJiYiTCI9PT1sfHxyJiYiRCI9PT1sJiYoMT09PWN8fDI9PT1jKSk/czp0fSxyLnRpY2swPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiJkYXRlIj09PWU/aS5jbGVhbkRhdGUodCxpLmRhdGVUaWNrMChyLGElcz09MD8xOjApKToiRDEiIT09YSYmIkQyIiE9PWE/bih0KT9OdW1iZXIodCk6MDp2b2lkIDB9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw4MzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL3JlZ2V4IikuY291bnRlcjtlLmV4cG9ydHM9e2lkUmVnZXg6e3g6bigieCIsIiggZG9tYWluKT8iKSx5Om4oInkiLCIoIGRvbWFpbik/Iil9LGF0dHJSZWdleDpuKCJbeHldYXhpcyIpLHhBeGlzTWF0Y2g6bigieGF4aXMiKSx5QXhpc01hdGNoOm4oInlheGlzIiksQVhfSURfUEFUVEVSTjovXlt4eXpdWzAtOV0qKCBkb21haW4pPyQvLEFYX05BTUVfUEFUVEVSTjovXlt4eXpdYXhpc1swLTldKiQvLFNVQlBMT1RfUEFUVEVSTjovXngoWzAtOV0qKXkoWzAtOV0qKSQvLEhPVVJfUEFUVEVSTjoiaG91ciIsV0VFS0RBWV9QQVRURVJOOiJkYXkgb2Ygd2VlayIsTUlORFJBRzo4LE1JTlNFTEVDVDoxMixNSU5aT09NOjIwLERSQUdHRVJTSVpFOjIwLEJFTkRQWDoxLjUsUkVEUkFXREVMQVk6NTAsU0VMRUNUREVMQVk6MTAwLFNFTEVDVElEOiItc2VsZWN0IixERkxUUkFOR0VYOlstMSw2XSxERkxUUkFOR0VZOlstMSw0XSx0cmFjZUxheWVyQ2xhc3NlczpbImltYWdlbGF5ZXIiLCJoZWF0bWFwbGF5ZXIiLCJjb250b3VyY2FycGV0bGF5ZXIiLCJjb250b3VybGF5ZXIiLCJmdW5uZWxsYXllciIsIndhdGVyZmFsbGxheWVyIiwiYmFybGF5ZXIiLCJjYXJwZXRsYXllciIsInZpb2xpbmxheWVyIiwiYm94bGF5ZXIiLCJvaGxjbGF5ZXIiLCJzY2F0dGVyY2FycGV0bGF5ZXIiLCJzY2F0dGVybGF5ZXIiXSxjbGlwT25BeGlzRmFsc2VRdWVyeTpbIi5zY2F0dGVybGF5ZXIiLCIuYmFybGF5ZXIiLCIuZnVubmVsbGF5ZXIiLCIud2F0ZXJmYWxsbGF5ZXIiXSxsYXllclZhbHVlMmxheWVyQ2xhc3M6eyJhYm92ZSB0cmFjZXMiOiJhYm92ZSIsImJlbG93IHRyYWNlcyI6ImJlbG93In19fSx7Ii4uLy4uL2xpYi9yZWdleCI6NzkzfV0sODM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdXRvcmFuZ2UiKSxhPXQoIi4vYXhpc19pZHMiKS5pZDJuYW1lLG89dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHM9dCgiLi9zY2FsZV96b29tIiksbD10KCIuL3NldF9jb252ZXJ0IiksYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLkZST01fQkw7ZnVuY3Rpb24gZih0LGUscil7dmFyIGk9ci5heElkcyxzPXIubGF5b3V0T3V0LGw9ci5oYXNJbWFnZSxjPXMuX2F4aXNDb25zdHJhaW50R3JvdXBzLHU9cy5fYXhpc01hdGNoR3JvdXBzLGY9ZS5faWQsbT1mLmNoYXJBdCgwKSxnPSgocy5fc3Bsb21BeGVzfHx7fSlbbV18fHt9KVtmXXx8e30sdj1lLl9pZCx5PSJ4Ij09PXYuY2hhckF0KDApO2Z1bmN0aW9uIHgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1lLl9tYXRjaEdyb3VwPW51bGwsZS5fY29uc3RyYWludEdyb3VwPW51bGwseCgiY29uc3RyYWluIixsPyJkb21haW4iOiJyYW5nZSIpLG4uY29lcmNlKHQsZSx7Y29uc3RyYWludG93YXJkOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6eT9bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdOlsiYm90dG9tIiwibWlkZGxlIiwidG9wIl0sZGZsdDp5PyJjZW50ZXIiOiJtaWRkbGUifX0sImNvbnN0cmFpbnRvd2FyZCIpO3ZhciBiLF8sdz1lLnR5cGUsVD1bXTtmb3IoYj0wO2I8aS5sZW5ndGg7YisrKXtpZigoXz1pW2JdKSE9PXYpc1thKF8pXS50eXBlPT09dyYmVC5wdXNoKF8pfXZhciBrPXAoYyx2KTtpZihrKXt2YXIgQT1bXTtmb3IoYj0wO2I8VC5sZW5ndGg7YisrKWtbXz1UW2JdXXx8QS5wdXNoKF8pO1Q9QX12YXIgTSxTLEU9VC5sZW5ndGg7RSYmKHQubWF0Y2hlc3x8Zy5tYXRjaGVzKSYmKE09bi5jb2VyY2UodCxlLHttYXRjaGVzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VCxkZmx0Oi0xIT09VC5pbmRleE9mKGcubWF0Y2hlcyk/Zy5tYXRjaGVzOnZvaWQgMH19LCJtYXRjaGVzIikpO3ZhciBMPWwmJiF5P2UuYW5jaG9yOnZvaWQgMDtpZihFJiYhTSYmKHQuc2NhbGVhbmNob3J8fEwpJiYoUz1uLmNvZXJjZSh0LGUse3NjYWxlYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6VH19LCJzY2FsZWFuY2hvciIsTCkpLE0pe2UuX21hdGNoR3JvdXA9ZCh1LHYsTSwxKTt2YXIgQz1zW2EoTSldLFA9aChzLGUpL2gocyxDKTt5IT09KCJ4Ij09PU0uY2hhckF0KDApKSYmKFA9KHk/IngiOiJ5IikrUCksZChjLHYsTSxQKX1lbHNlIHQubWF0Y2hlcyYmLTEhPT1pLmluZGV4T2YodC5tYXRjaGVzKSYmbi53YXJuKCJpZ25vcmVkICIrZS5fbmFtZSsnLm1hdGNoZXM6ICInK3QubWF0Y2hlcysnIiB0byBhdm9pZCBhbiBpbmZpbml0ZSBsb29wJyk7aWYoUyl7dmFyIEk9eCgic2NhbGVyYXRpbyIpO0l8fChJPWUuc2NhbGVyYXRpbz0xKSxkKGMsdixTLEkpfWVsc2UgdC5zY2FsZWFuY2hvciYmLTEhPT1pLmluZGV4T2YodC5zY2FsZWFuY2hvcikmJm4ud2FybigiaWdub3JlZCAiK2UuX25hbWUrJy5zY2FsZWFuY2hvcjogIicrdC5zY2FsZWFuY2hvcisnIiB0byBhdm9pZCBlaXRoZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgcG9zc2libHkgaW5jb25zaXN0ZW50IHNjYWxlcmF0aW9zLCBvciBiZWNhdXNlIHRoaXMgYXhpcyBkZWNsYXJlcyBhICptYXRjaGVzKiBjb25zdHJhaW50LicpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1lLmRvbWFpbjtyZXR1cm4gcnx8KHI9dFthKGUub3ZlcmxheWluZyldLmRvbWFpbiksclsxXS1yWzBdfWZ1bmN0aW9uIHAodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZih0W3JdW2VdKXJldHVybiB0W3JdO3JldHVybiBudWxsfWZ1bmN0aW9uIGQodCxlLHIsbil7dmFyIGksYSxvLHMsbCxjPXAodCxlKTtudWxsPT09Yz8oKGM9e30pW2VdPTEsbD10Lmxlbmd0aCx0LnB1c2goYykpOmw9dC5pbmRleE9mKGMpO3ZhciB1PU9iamVjdC5rZXlzKGMpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYobz10W2ldLGkhPT1sJiZvW3JdKXt2YXIgZj1vW3JdO2ZvcihhPTA7YTx1Lmxlbmd0aDthKyspb1tzPXVbYV1dPW0oZixtKG4sY1tzXSkpO3JldHVybiB2b2lkIHQuc3BsaWNlKGwsMSl9aWYoMSE9PW4pZm9yKGE9MDthPHUubGVuZ3RoO2ErKyl7dmFyIGg9dVthXTtjW2hdPW0obixjW2hdKX1jW3JdPTF9ZnVuY3Rpb24gbSh0LGUpe3ZhciByLG4saT0iIixhPSIiOyJzdHJpbmciPT10eXBlb2YgdCYmKHI9KGk9dC5tYXRjaCgvXlt4eV0qLylbMF0pLmxlbmd0aCx0PSt0LnN1YnN0cihyKSksInN0cmluZyI9PXR5cGVvZiBlJiYobj0oYT1lLm1hdGNoKC9eW3h5XSovKVswXSkubGVuZ3RoLGU9K2Uuc3Vic3RyKG4pKTt2YXIgbz10KmU7cmV0dXJuIHJ8fG4/ciYmbiYmaS5jaGFyQXQoMCkhPT1hLmNoYXJBdCgwKT9yPT09bj9vOihyPm4/aS5zdWJzdHIobik6YS5zdWJzdHIocikpK286aSthK3QqZTpvfWZ1bmN0aW9uIGcodCxlKXtmb3IodmFyIHI9ZS5fc2l6ZSxuPXIuaC9yLncsaT17fSxhPU9iamVjdC5rZXlzKHQpLG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPXRbc107aWYoInN0cmluZyI9PXR5cGVvZiBsKXt2YXIgYz1sLm1hdGNoKC9eW3h5XSovKVswXSx1PWMubGVuZ3RoO2w9K2wuc3Vic3RyKHUpO2Zvcih2YXIgZj0ieSI9PT1jLmNoYXJBdCgwKT9uOjEvbixoPTA7aDx1O2grKylsKj1mfWlbc109bH1yZXR1cm4gaX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dC5faW5wdXREb21haW4sbj11W3QuY29uc3RyYWludG93YXJkXSxpPXJbMF0rKHJbMV0tclswXSkqbjt0LmRvbWFpbj10Ll9pbnB1dC5kb21haW49W2krKHJbMF0taSkvZSxpKyhyWzFdLWkpL2VdLHQuc2V0U2NhbGUoKX1yLmhhbmRsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvLHMsYyx1LGgscCxkLG09ci5heElkcyxnPXIuYXhIYXNJbWFnZSx2PWUuX2F4aXNDb25zdHJhaW50R3JvdXBzPVtdLHk9ZS5fYXhpc01hdGNoR3JvdXBzPVtdO2ZvcihpPTA7aTxtLmxlbmd0aDtpKyspZih1PXRbYz1hKG1baV0pXSxoPWVbY10se2F4SWRzOm0sbGF5b3V0T3V0OmUsaGFzSW1hZ2U6Z1tjXX0pO2Z1bmN0aW9uIHgodCxyKXtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWZvcihzIGluIG89dFtpXSllW2EocyldW3JdPW99Zm9yKHgoeSwiX21hdGNoR3JvdXAiKSxpPTA7aTx2Lmxlbmd0aDtpKyspZm9yKHMgaW4gbz12W2ldKWlmKChoPWVbYShzKV0pLmZpeGVkcmFuZ2Upe2Zvcih2YXIgYiBpbiBvKXt2YXIgXz1hKGIpOyExPT09KHRbX118fHt9KS5maXhlZHJhbmdlJiZuLndhcm4oImZpeGVkcmFuZ2Ugd2FzIHNwZWNpZmllZCBhcyBmYWxzZSBmb3IgYXhpcyAiK18rIiBidXQgd2FzIG92ZXJyaWRkZW4gYmVjYXVzZSBhbm90aGVyIGF4aXMgaW4gaXRzIGNvbnN0cmFpbnQgZ3JvdXAgaGFzIGZpeGVkcmFuZ2UgdHJ1ZSIpLGVbX10uZml4ZWRyYW5nZT0hMH1icmVha31mb3IoaT0wO2k8di5sZW5ndGg7KXtmb3IocyBpbiBvPXZbaV0peyhoPWVbYShzKV0pLl9tYXRjaEdyb3VwJiZPYmplY3Qua2V5cyhoLl9tYXRjaEdyb3VwKS5sZW5ndGg9PT1PYmplY3Qua2V5cyhvKS5sZW5ndGgmJih2LnNwbGljZShpLDEpLGktLSk7YnJlYWt9aSsrfXgodiwiX2NvbnN0cmFpbnRHcm91cCIpO3ZhciB3PVsiY29uc3RyYWluIiwicmFuZ2UiLCJhdXRvcmFuZ2UiLCJyYW5nZW1vZGUiLCJyYW5nZWJyZWFrcyIsImNhdGVnb3J5b3JkZXIiLCJjYXRlZ29yeWFycmF5Il0sVD0hMSxrPSExO2Z1bmN0aW9uIEEoKXtkPWhbcF0sInJhbmdlYnJlYWtzIj09PXAmJihrPWguX2hhc0RheU9mV2Vla0JyZWFrcyl9Zm9yKGk9MDtpPHkubGVuZ3RoO2krKyl7bz15W2ldO2Zvcih2YXIgTT0wO008dy5sZW5ndGg7TSsrKXt2YXIgUztmb3IocyBpbiBwPXdbTV0sZD1udWxsLG8paWYodT10W2M9YShzKV0saD1lW2NdLHAgaW4gaCl7aWYoIWgubWF0Y2hlcyYmKFM9aCxwIGluIHUpKXtBKCk7YnJlYWt9bnVsbD09PWQmJnAgaW4gdSYmQSgpfWlmKCJyYW5nZSI9PT1wJiZkJiYoVD0hMCksImF1dG9yYW5nZSI9PT1wJiZudWxsPT09ZCYmVCYmKGQ9ITEpLG51bGw9PT1kJiZwIGluIFMmJihkPVNbcF0pLG51bGwhPT1kKWZvcihzIGluIG8pKGg9ZVthKHMpXSlbcF09InJhbmdlIj09PXA/ZC5zbGljZSgpOmQsInJhbmdlYnJlYWtzIj09PXAmJihoLl9oYXNEYXlPZldlZWtCcmVha3M9ayxsKGgsZSkpfX19LHIuZW5mb3JjZT1mdW5jdGlvbih0KXt2YXIgZSxyLG4sbyxsLHUsZixoLHA9dC5fZnVsbExheW91dCxkPXAuX2F4aXNDb25zdHJhaW50R3JvdXBzfHxbXTtmb3IoZT0wO2U8ZC5sZW5ndGg7ZSsrKXtuPWcoZFtlXSxwKTt2YXIgbT1PYmplY3Qua2V5cyhuKSx5PTEvMCx4PTAsYj0xLzAsXz17fSx3PXt9LFQ9ITE7Zm9yKHI9MDtyPG0ubGVuZ3RoO3IrKyl3W289bVtyXV09bD1wW2EobyldLGwuX2lucHV0RG9tYWluP2wuZG9tYWluPWwuX2lucHV0RG9tYWluLnNsaWNlKCk6bC5faW5wdXREb21haW49bC5kb21haW4uc2xpY2UoKSxsLl9pbnB1dFJhbmdlfHwobC5faW5wdXRSYW5nZT1sLnJhbmdlLnNsaWNlKCkpLGwuc2V0U2NhbGUoKSxfW29dPXU9TWF0aC5hYnMobC5fbSkvbltvXSx5PU1hdGgubWluKHksdSksImRvbWFpbiIhPT1sLmNvbnN0cmFpbiYmbC5fY29uc3RyYWludFNocmlua2FibGV8fChiPU1hdGgubWluKGIsdSkpLGRlbGV0ZSBsLl9jb25zdHJhaW50U2hyaW5rYWJsZSx4PU1hdGgubWF4KHgsdSksImRvbWFpbiI9PT1sLmNvbnN0cmFpbiYmKFQ9ITApO2lmKCEoeT5jKngpfHxUKWZvcihyPTA7cjxtLmxlbmd0aDtyKyspaWYodT1fW289bVtyXV0sZj0obD13W29dKS5jb25zdHJhaW4sdSE9PWJ8fCJkb21haW4iPT09ZilpZihoPXUvYiwicmFuZ2UiPT09ZilzKGwsaCk7ZWxzZXt2YXIgaz1sLl9pbnB1dERvbWFpbixBPShsLmRvbWFpblsxXS1sLmRvbWFpblswXSkvKGtbMV0ta1swXSksTT0obC5yMmwobC5yYW5nZVsxXSktbC5yMmwobC5yYW5nZVswXSkpLyhsLnIybChsLl9pbnB1dFJhbmdlWzFdKS1sLnIybChsLl9pbnB1dFJhbmdlWzBdKSk7aWYoKGgvPUEpKk08MSl7bC5kb21haW49bC5faW5wdXQuZG9tYWluPWsuc2xpY2UoKSxzKGwsaCk7Y29udGludWV9aWYoTTwxJiYobC5yYW5nZT1sLl9pbnB1dC5yYW5nZT1sLl9pbnB1dFJhbmdlLnNsaWNlKCksaCo9TSksbC5hdXRvcmFuZ2Upe3ZhciBTPWwucjJsKGwucmFuZ2VbMF0pLEU9bC5yMmwobC5yYW5nZVsxXSksTD0oUytFKS8yLEM9TCxQPUwsST1NYXRoLmFicyhFLUwpLE89TC1JKmgqMS4wMDAxLHo9TCtJKmgqMS4wMDAxLEQ9aS5tYWtlUGFkRm4ocCxsLDApLFI9aS5tYWtlUGFkRm4ocCxsLDEpO3YobCxoKTt2YXIgRixCLE49TWF0aC5hYnMobC5fbSksaj1pLmNvbmNhdEV4dHJlbWVzKHQsbCksVT1qLm1pbixWPWoubWF4O2ZvcihCPTA7QjxVLmxlbmd0aDtCKyspKEY9VVtCXS52YWwtRChVW0JdKS9OKT5PJiZGPEMmJihDPUYpO2ZvcihCPTA7QjxWLmxlbmd0aDtCKyspKEY9VltCXS52YWwrUihWW0JdKS9OKTx6JiZGPlAmJihQPUYpO2gvPShQLUMpLygyKkkpLEM9bC5sMnIoQyksUD1sLmwycihQKSxsLnJhbmdlPWwuX2lucHV0LnJhbmdlPVM8RT9bQyxQXTpbUCxDXX12KGwsaCl9fX0sci5nZXRBeGlzR3JvdXA9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fYXhpc01hdGNoR3JvdXBzLG49MDtuPHIubGVuZ3RoO24rKyl7aWYocltuXVtlXSlyZXR1cm4iZyIrbn1yZXR1cm4gZX0sci5jbGVhbj1mdW5jdGlvbih0LGUpe2lmKGUuX2lucHV0RG9tYWluKXtmb3IodmFyIHI9ITEsbj1lLl9pZCxpPXQuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLGE9MDthPGkubGVuZ3RoO2ErKylpZihpW2FdW25dKXtyPSEwO2JyZWFrfXImJiJkb21haW4iPT09ZS5jb25zdHJhaW58fChlLl9pbnB1dC5kb21haW49ZS5kb21haW49ZS5faW5wdXREb21haW4sZGVsZXRlIGUuX2lucHV0RG9tYWluKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi9hdXRvcmFuZ2UiOjgyNiwiLi9heGlzX2lkcyI6ODMxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vc2NhbGVfem9vbSI6ODQ2LCIuL3NldF9jb252ZXJ0Ijo4NDh9XSw4MzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT1pLm51bWJlckZvcm1hdCxvPXQoInRpbnljb2xvcjIiKSxzPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKSxjPWkuc3RyVHJhbnNsYXRlLHU9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxwPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxkPXQoIi4vYXhlcyIpLG09dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LnNlbGVjdGluZ09yRHJhd2luZyx4PXYuZnJlZU1vZGUsYj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9UTCxfPXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLHc9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLFQ9dCgiLi4vcGxvdHMiKSxrPXQoIi4vYXhpc19pZHMiKS5nZXRGcm9tSWQsQT10KCIuL3NlbGVjdCIpLnByZXBTZWxlY3QsTT10KCIuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFM9dCgiLi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLEU9dCgiLi9zY2FsZV96b29tIiksTD10KCIuL2NvbnN0YW50cyIpLEM9TC5NSU5EUkFHLFA9TC5NSU5aT09NLEk9ITA7ZnVuY3Rpb24gTyh0LGUscixuKXt2YXIgYT1pLmVuc3VyZVNpbmdsZSh0LmRyYWdsYXllcixlLHIsKGZ1bmN0aW9uKGUpe2UuY2xhc3NlZCgiZHJhZyIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pLmF0dHIoImRhdGEtc3VicGxvdCIsdC5pZCl9KSk7cmV0dXJuIGEuY2FsbChtLG4pLGEubm9kZSgpfWZ1bmN0aW9uIHoodCxlLHIsaSxhLG8scyl7dmFyIGw9Tyh0LCJyZWN0IixlLHIpO3JldHVybiBuLnNlbGVjdChsKS5jYWxsKGguc2V0UmVjdCxpLGEsbyxzKSxsfWZ1bmN0aW9uIEQodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKylpZighdFtyXS5maXhlZHJhbmdlKXJldHVybiBlO3JldHVybiIifWZ1bmN0aW9uIFIodCxlLHIsbixpKXtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG89dFthXTtpZighby5maXhlZHJhbmdlKWlmKG8ucmFuZ2VicmVha3Mpe3ZhciBzPSJ5Ij09PW8uX2lkLmNoYXJBdCgwKSxsPXM/MS1lOmUsYz1zPzEtcjpyO25bby5fbmFtZSsiLnJhbmdlWzBdIl09by5sMnIoby5wMmwobCpvLl9sZW5ndGgpKSxuW28uX25hbWUrIi5yYW5nZVsxXSJdPW8ubDJyKG8ucDJsKGMqby5fbGVuZ3RoKSl9ZWxzZXt2YXIgdT1vLl9ybFswXSxmPW8uX3JsWzFdLXU7bltvLl9uYW1lKyIucmFuZ2VbMF0iXT1vLmwycih1K2YqZSksbltvLl9uYW1lKyIucmFuZ2VbMV0iXT1vLmwycih1K2Yqcil9fWlmKGkmJmkubGVuZ3RoKXt2YXIgaD0oZSsoMS1yKSkvMjtSKGksaCwxLWgsbixbXSl9fWZ1bmN0aW9uIEYodCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtpZighbi5maXhlZHJhbmdlKWlmKG4ucmFuZ2VicmVha3Mpe3ZhciBpPW4uX2xlbmd0aCxhPShuLnAybCgwK2UpLW4ucDJsKDApKyhuLnAybChpK2UpLW4ucDJsKGkpKSkvMjtuLnJhbmdlPVtuLmwycihuLl9ybFswXS1hKSxuLmwycihuLl9ybFsxXS1hKV19ZWxzZSBuLnJhbmdlPVtuLmwycihuLl9ybFswXS1lL24uX20pLG4ubDJyKG4uX3JsWzFdLWUvbi5fbSldfX1mdW5jdGlvbiBCKHQpe3JldHVybiAxLSh0Pj0wP01hdGgubWluKHQsLjkpOjEvKDEvTWF0aC5tYXgodCwtLjMpKzMuMjIyKSl9ZnVuY3Rpb24gTih0LGUscixuLGkpe3JldHVybiB0LmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveCIpLnN0eWxlKHtmaWxsOmU+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigidHJhbnNmb3JtIixjKHIsbikpLmF0dHIoImQiLGkrIloiKX1mdW5jdGlvbiBqKHQsZSxyKXtyZXR1cm4gdC5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInpvb21ib3gtY29ybmVycyIpLnN0eWxlKHtmaWxsOmYuYmFja2dyb3VuZCxzdHJva2U6Zi5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoInRyYW5zZm9ybSIsYyhlLHIpKS5hdHRyKCJkIiwiTTAsMFoiKX1mdW5jdGlvbiBVKHQsZSxyLG4saSxhKXt0LmF0dHIoImQiLG4rIk0iK3IubCsiLCIrci50KyJ2IityLmgrImgiK3Iudysidi0iK3IuaCsiaC0iK3IudysiWiIpLFYodCxlLGksYSl9ZnVuY3Rpb24gVih0LGUscixuKXtyfHwodC50cmFuc2l0aW9uKCkuc3R5bGUoImZpbGwiLG4+LjI/InJnYmEoMCwwLDAsMC40KSI6InJnYmEoMjU1LDI1NSwyNTUsMC4zKSIpLmR1cmF0aW9uKDIwMCksZS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLmR1cmF0aW9uKDIwMCkpfWZ1bmN0aW9uIEgodCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuem9vbWJveCwuanMtem9vbWJveC1iYWNrZHJvcCwuanMtem9vbWJveC1tZW51LC56b29tYm94LWNvcm5lcnMiKS5yZW1vdmUoKX1mdW5jdGlvbiBxKHQpe0kmJnQuZGF0YSYmdC5fY29udGV4dC5zaG93VGlwcyYmKGkubm90aWZpZXIoaS5fKHQsIkRvdWJsZS1jbGljayB0byB6b29tIGJhY2sgb3V0IiksImxvbmciKSxJPSExKX1mdW5jdGlvbiBHKHQpe3ZhciBlPU1hdGguZmxvb3IoTWF0aC5taW4odC5iLXQudCx0LnItdC5sLFApLzIpO3JldHVybiJNIisodC5sLTMuNSkrIiwiKyh0LnQtLjUrZSkrImgzdiIrLWUrImgiK2UrInYtM2gtIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQudC0uNStlKSsiaC0zdiIrLWUrImgiKy1lKyJ2LTNoIisoZSszKSsiWk0iKyh0LnIrMy41KSsiLCIrKHQuYisuNS1lKSsiaC0zdiIrZSsiaCIrLWUrInYzaCIrKGUrMykrIlpNIisodC5sLTMuNSkrIiwiKyh0LmIrLjUtZSkrImgzdiIrZSsiaCIrZSsidjNoLSIrKGUrMykrIloifWZ1bmN0aW9uIFkodCxlLHIsbixhKXtmb3IodmFyIG8scyxsLGMsdT0hMSxmPXt9LGg9e30scD0oYXx8e30pLnhhSGFzaCxkPShhfHx7fSkueWFIYXNoLG09MDttPGUubGVuZ3RoO20rKyl7dmFyIGc9ZVttXTtmb3IobyBpbiByKWlmKGdbb10pe2ZvcihsIGluIGcpYSYmKHBbbF18fGRbbF0pfHwoIngiPT09bC5jaGFyQXQoMCk/cjpuKVtsXXx8KGZbbF09byk7Zm9yKHMgaW4gbilhJiYocFtzXXx8ZFtzXSl8fCFnW3NdfHwodT0hMCl9Zm9yKHMgaW4gbilpZihnW3NdKWZvcihjIGluIGcpYSYmKHBbY118fGRbY10pfHwoIngiPT09Yy5jaGFyQXQoMCk/cjpuKVtjXXx8KGhbY109cyl9dSYmKGkuZXh0ZW5kRmxhdChmLGgpLGg9e30pO3ZhciB2PXt9LHk9W107Zm9yKGwgaW4gZil7dmFyIHg9ayh0LGwpO3kucHVzaCh4KSx2W3guX2lkXT14fXZhciBiPXt9LF89W107Zm9yKGMgaW4gaCl7dmFyIHc9ayh0LGMpO18ucHVzaCh3KSxiW3cuX2lkXT13fXJldHVybnt4YUhhc2g6dix5YUhhc2g6Yix4YXhlczp5LHlheGVzOl8seExpbmtzOmYseUxpbmtzOmgsaXNTdWJwbG90Q29uc3RyYWluZWQ6dX19ZnVuY3Rpb24gVyh0LGUpe2lmKHMpe3ZhciByPXZvaWQgMCE9PXQub253aGVlbD8id2hlZWwiOiJtb3VzZXdoZWVsIjt0Ll9vbndoZWVsJiZ0LnJlbW92ZUV2ZW50TGlzdGVuZXIocix0Ll9vbndoZWVsKSx0Ll9vbndoZWVsPWUsdC5hZGRFdmVudExpc3RlbmVyKHIsZSx7cGFzc2l2ZTohMX0pfWVsc2Ugdm9pZCAwIT09dC5vbndoZWVsP3Qub253aGVlbD1lOnZvaWQgMCE9PXQub25tb3VzZXdoZWVsP3Qub25tb3VzZXdoZWVsPWU6dC5pc0FkZGVkV2hlZWxFdmVudHx8KHQuaXNBZGRlZFdoZWVsRXZlbnQ9ITAsdC5hZGRFdmVudExpc3RlbmVyKCJ3aGVlbCIsZSx7cGFzc2l2ZTohMX0pKX1mdW5jdGlvbiBYKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaCh0W3JdKTtyZXR1cm4gZX1lLmV4cG9ydHM9e21ha2VEcmFnQm94OmZ1bmN0aW9uKHQsZSxyLHMsYyxmLG0sdil7dmFyIEksTyxWLFosSixLLFEsJCx0dCxldCxydCxudCxpdCxhdCxvdCxzdCxsdCxjdCx1dCxmdCxodCxwdCxkdCxtdD10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXIsZ3Q9bSt2PT09Im5zZXciLHZ0PTE9PT0obSt2KS5sZW5ndGg7ZnVuY3Rpb24geXQoKXtpZihJPWUueGF4aXMsTz1lLnlheGlzLHR0PUkuX2xlbmd0aCxldD1PLl9sZW5ndGgsUT1JLl9vZmZzZXQsJD1PLl9vZmZzZXQsKFY9e30pW0kuX2lkXT1JLChaPXt9KVtPLl9pZF09TyxtJiZ2KWZvcih2YXIgcj1lLm92ZXJsYXlzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXS54YXhpcztWW2kuX2lkXT1pO3ZhciBhPXJbbl0ueWF4aXM7WlthLl9pZF09YX1KPVgoViksSz1YKFopLGl0PUQoSix2KSxhdD1EKEssbSksb3Q9IWF0JiYhaXQsbnQ9WSh0LHQuX2Z1bGxMYXlvdXQuX2F4aXNNYXRjaEdyb3VwcyxWLFopO3ZhciBvPShydD1ZKHQsdC5fZnVsbExheW91dC5fYXhpc0NvbnN0cmFpbnRHcm91cHMsVixaLG50KSkuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkO3N0PXZ8fG8sbHQ9bXx8bzt2YXIgcz10Ll9mdWxsTGF5b3V0O2N0PXMuX2hhcygic2NhdHRlcmdsIiksdXQ9cy5faGFzKCJzcGxvbSIpLGZ0PXMuX2hhcygic3ZnIil9eXQoKTt2YXIgeHQ9ZnVuY3Rpb24odCxlLHIpe2lmKCF0KXJldHVybiJwb2ludGVyIjtpZigibnNldyI9PT10KXJldHVybiByPyIiOiJwYW4iPT09ZT8ibW92ZSI6ImNyb3NzaGFpciI7cmV0dXJuIHQudG9Mb3dlckNhc2UoKSsiLXJlc2l6ZSJ9KGF0K2l0LHQuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsZ3QpLGJ0PXooZSxtK3YrImRyYWciLHh0LHIscyxjLGYpO2lmKG90JiYhZ3QpcmV0dXJuIGJ0Lm9ubW91c2Vkb3duPW51bGwsYnQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsYnQ7dmFyIF90LHd0LFR0LGt0LEF0LE10LFN0LEV0LEx0LEN0LFB0PXtlbGVtZW50OmJ0LGdkOnQscGxvdGluZm86ZX07ZnVuY3Rpb24gSXQoKXtQdC5wbG90aW5mby5zZWxlY3Rpb249ITEsTSh0KX1mdW5jdGlvbiBPdCh0LHIpe3ZhciBpPVB0LmdkO2lmKGkuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApaS5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKGkpO2Vsc2V7dmFyIG89aS5fZnVsbExheW91dC5jbGlja21vZGU7aWYoSChpKSwyIT09dHx8dnR8fHF0KCksZ3Qpby5pbmRleE9mKCJzZWxlY3QiKT4tMSYmUyhyLGksSixLLGUuaWQsUHQpLG8uaW5kZXhPZigiZXZlbnQiKT4tMSYmcC5jbGljayhpLHIsZS5pZCk7ZWxzZSBpZigxPT09dCYmdnQpe3ZhciBzPW0/TzpJLGM9InMiPT09bXx8InciPT09dj8wOjEsZj1zLl9uYW1lKyIucmFuZ2VbIitjKyJdIixoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10LnJhbmdlW2VdLGk9TWF0aC5hYnMobi10LnJhbmdlWzEtZV0pO3JldHVybiJkYXRlIj09PXQudHlwZT9uOiJsb2ciPT09dC50eXBlPyhyPU1hdGguY2VpbChNYXRoLm1heCgwLC1NYXRoLmxvZyhpKS9NYXRoLkxOMTApKSszLGEoIi4iK3IrImciKShNYXRoLnBvdygxMCxuKSkpOihyPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobikpL01hdGguTE4xMCktTWF0aC5mbG9vcihNYXRoLmxvZyhpKS9NYXRoLkxOMTApKzQsYSgiLiIrU3RyaW5nKHIpKyJnIikobikpfShzLGMpLGQ9ImxlZnQiLGc9Im1pZGRsZSI7aWYocy5maXhlZHJhbmdlKXJldHVybjttPyhnPSJuIj09PW0/InRvcCI6ImJvdHRvbSIsInJpZ2h0Ij09PXMuc2lkZSYmKGQ9InJpZ2h0IikpOiJlIj09PXYmJihkPSJyaWdodCIpLGkuX2NvbnRleHQuc2hvd0F4aXNSYW5nZUVudHJ5Qm94ZXMmJm4uc2VsZWN0KGJ0KS5jYWxsKHUubWFrZUVkaXRhYmxlLHtnZDppLGltbWVkaWF0ZTohMCxiYWNrZ3JvdW5kOmkuX2Z1bGxMYXlvdXQucGFwZXJfYmdjb2xvcix0ZXh0OlN0cmluZyhoKSxmaWxsOnMudGlja2ZvbnQ/cy50aWNrZm9udC5jb2xvcjoiIzQ0NCIsaG9yaXpvbnRhbEFsaWduOmQsdmVydGljYWxBbGlnbjpnfSkub24oImVkaXQiLChmdW5jdGlvbih0KXt2YXIgZT1zLmQycih0KTt2b2lkIDAhPT1lJiZsLmNhbGwoIl9ndWlSZWxheW91dCIsaSxmLGUpfSkpfX19ZnVuY3Rpb24genQoZSxyKXtpZih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXJldHVybiExO3ZhciBuPU1hdGgubWF4KDAsTWF0aC5taW4odHQscHQqZStfdCkpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihldCxkdCpyK3d0KSksYT1NYXRoLmFicyhuLV90KSxvPU1hdGguYWJzKGktd3QpO2Z1bmN0aW9uIHMoKXtTdD0iIixUdC5yPVR0LmwsVHQudD1UdC5iLEx0LmF0dHIoImQiLCJNMCwwWiIpfWlmKFR0Lmw9TWF0aC5taW4oX3QsbiksVHQucj1NYXRoLm1heChfdCxuKSxUdC50PU1hdGgubWluKHd0LGkpLFR0LmI9TWF0aC5tYXgod3QsaSkscnQuaXNTdWJwbG90Q29uc3RyYWluZWQpYT5QfHxvPlA/KFN0PSJ4eSIsYS90dD5vL2V0PyhvPWEqZXQvdHQsd3Q+aT9UdC50PXd0LW86VHQuYj13dCtvKTooYT1vKnR0L2V0LF90Pm4/VHQubD1fdC1hOlR0LnI9X3QrYSksTHQuYXR0cigiZCIsRyhUdCkpKTpzKCk7ZWxzZSBpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZClpZihhPlB8fG8+UCl7U3Q9Inh5Ijt2YXIgbD1NYXRoLm1pbihUdC5sL3R0LChldC1UdC5iKS9ldCksYz1NYXRoLm1heChUdC5yL3R0LChldC1UdC50KS9ldCk7VHQubD1sKnR0LFR0LnI9Yyp0dCxUdC5iPSgxLWwpKmV0LFR0LnQ9KDEtYykqZXQsTHQuYXR0cigiZCIsRyhUdCkpfWVsc2UgcygpO2Vsc2UhYXR8fG88TWF0aC5taW4oTWF0aC5tYXgoLjYqYSxDKSxQKT9hPEN8fCFpdD9zKCk6KFR0LnQ9MCxUdC5iPWV0LFN0PSJ4IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisodC5sLS41KSsiLCIrKGUtUC0uNSkrImgtM3YiKygyKlArMSkrImgzWk0iKyh0LnIrLjUpKyIsIisoZS1QLS41KSsiaDN2IisoMipQKzEpKyJoLTNaIn0oVHQsd3QpKSk6IWl0fHxhPE1hdGgubWluKC42Km8sUCk/KFR0Lmw9MCxUdC5yPXR0LFN0PSJ5IixMdC5hdHRyKCJkIixmdW5jdGlvbih0LGUpe3JldHVybiJNIisoZS1QLS41KSsiLCIrKHQudC0uNSkrInYtM2giKygyKlArMSkrInYzWk0iKyhlLVAtLjUpKyIsIisodC5iKy41KSsidjNoIisoMipQKzEpKyJ2LTNaIn0oVHQsX3QpKSk6KFN0PSJ4eSIsTHQuYXR0cigiZCIsRyhUdCkpKTtUdC53PVR0LnItVHQubCxUdC5oPVR0LmItVHQudCxTdCYmKEN0PSEwKSx0Ll9kcmFnZ2VkPUN0LFUoRXQsTHQsVHQsQXQsTXQsa3QpLER0KCksdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KSxNdD0hMH1mdW5jdGlvbiBEdCgpe2h0PXt9LCJ4eSIhPT1TdCYmIngiIT09U3R8fChSKEosVHQubC90dCxUdC5yL3R0LGh0LHJ0LnhheGVzKSxWdCgieCIsaHQpKSwieHkiIT09U3QmJiJ5IiE9PVN0fHwoUihLLChldC1UdC5iKS9ldCwoZXQtVHQudCkvZXQsaHQscnQueWF4ZXMpLFZ0KCJ5IixodCkpfWZ1bmN0aW9uIFJ0KCl7RHQoKSxIKHQpLEd0KCkscSh0KX1QdC5wcmVwRm49ZnVuY3Rpb24oZSxyLG4pe3ZhciBhPVB0LmRyYWdtb2RlLHM9dC5fZnVsbExheW91dC5kcmFnbW9kZTtzIT09YSYmKFB0LmRyYWdtb2RlPXMpLHl0KCkscHQ9dC5fZnVsbExheW91dC5faW52U2NhbGVYLGR0PXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxvdHx8KGd0P2Uuc2hpZnRLZXk/InBhbiI9PT1zP3M9Inpvb20iOnkocyl8fChzPSJwYW4iKTplLmN0cmxLZXkmJihzPSJwYW4iKTpzPSJwYW4iKSx4KHMpP1B0Lm1pbkRyYWc9MTpQdC5taW5EcmFnPXZvaWQgMCx5KHMpPyhQdC54YXhlcz1KLFB0LnlheGVzPUssQShlLHIsbixQdCxzKSk6KFB0LmNsaWNrRm49T3QseShhKSYmSXQoKSxvdHx8KCJ6b29tIj09PXM/KFB0Lm1vdmVGbj16dCxQdC5kb25lRm49UnQsUHQubWluRHJhZz0xLGZ1bmN0aW9uKGUscixuKXt2YXIgYT1idC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtfdD1yLWEubGVmdCx3dD1uLWEudG9wLHQuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHQpO3ZhciBzPWkuYXBwbHkzRFRyYW5zZm9ybSh0Ll9mdWxsTGF5b3V0Ll9pbnZUcmFuc2Zvcm0pKF90LHd0KTtfdD1zWzBdLHd0PXNbMV0sVHQ9e2w6X3QscjpfdCx3OjAsdDp3dCxiOnd0LGg6MH0sa3Q9dC5faG1waXhjb3VudD90Ll9obWx1bWNvdW50L3QuX2htcGl4Y291bnQ6byh0Ll9mdWxsTGF5b3V0LnBsb3RfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksTXQ9ITEsU3Q9Inh5IixDdD0hMSxFdD1OKG10LGt0LFEsJCxBdD0iTTAsMEgiK3R0KyJWIitldCsiSDBWMCIpLEx0PWoobXQsUSwkKX0oMCxyLG4pKToicGFuIj09PXMmJihQdC5tb3ZlRm49VXQsUHQuZG9uZUZuPUd0KSkpLHQuX2Z1bGxMYXlvdXQuX3JlZHJhZz1mdW5jdGlvbigpe3ZhciBlPXQuX2RyYWdkYXRhO2lmKGUmJmUuZWxlbWVudD09PWJ0KXt2YXIgcj10Ll9mdWxsTGF5b3V0LmRyYWdtb2RlO3kocil8fCh5dCgpLFl0KFswLDAsdHQsZXRdKSxQdC5tb3ZlRm4oZS5keCxlLmR5KSl9fX0sZy5pbml0KFB0KTt2YXIgRnQ9WzAsMCx0dCxldF0sQnQ9bnVsbCxOdD1MLlJFRFJBV0RFTEFZLGp0PWUubWFpbnBsb3Q/dC5fZnVsbExheW91dC5fcGxvdHNbZS5tYWlucGxvdF06ZTtmdW5jdGlvbiBVdChlLHIpe2lmKGUqPXB0LHIqPWR0LCF0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uKXtpZih0Ll9mdWxsTGF5b3V0Ll9yZXBsb3R0aW5nPSEwLCJldyI9PT1pdHx8Im5zIj09PWF0KXt2YXIgbj1pdD8tZTowLGk9YXQ/LXI6MDtpZihudC5pc1N1YnBsb3RDb25zdHJhaW5lZCl7aWYoaXQmJmF0KXt2YXIgYT0oZS90dC1yL2V0KS8yO249LShlPWEqdHQpLGk9LShyPS1hKmV0KX1hdD9uPS1pKnR0L2V0Omk9LW4qZXQvdHR9cmV0dXJuIGl0JiYoRihKLGUpLFZ0KCJ4IikpLGF0JiYoRihLLHIpLFZ0KCJ5IikpLFl0KFtuLGksdHQsZXRdKSxIdCgpLHZvaWQgdC5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLGh0KX12YXIgbyxzLGw9InciPT09aXQ9PSgibiI9PT1hdCk/MTotMTtpZihpdCYmYXQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZHx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQpKXt2YXIgYz0oZS90dCtsKnIvZXQpLzI7ZT1jKnR0LHI9bCpjKmV0fWlmKCJ3Ij09PWl0P2U9cChKLDAsZSk6ImUiPT09aXQ/ZT1wKEosMSwtZSk6aXR8fChlPTApLCJuIj09PWF0P3I9cChLLDEscik6InMiPT09YXQ/cj1wKEssMCwtcik6YXR8fChyPTApLG89InciPT09aXQ/ZTowLHM9Im4iPT09YXQ/cjowLHJ0LmlzU3VicGxvdENvbnN0cmFpbmVkJiYhbnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZpdCYmYXQmJmw+MCl7dmFyIHU7aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFpdCYmMT09PWF0Lmxlbmd0aCl7Zm9yKHU9MDt1PEoubGVuZ3RoO3UrKylKW3VdLnJhbmdlPUpbdV0uX3Iuc2xpY2UoKSxFKEpbdV0sMS1yL2V0KTtvPShlPXIqdHQvZXQpLzJ9aWYobnQuaXNTdWJwbG90Q29uc3RyYWluZWR8fCFhdCYmMT09PWl0Lmxlbmd0aCl7Zm9yKHU9MDt1PEsubGVuZ3RoO3UrKylLW3VdLnJhbmdlPUtbdV0uX3Iuc2xpY2UoKSxFKEtbdV0sMS1lL3R0KTtzPShyPWUqZXQvdHQpLzJ9fW50LmlzU3VicGxvdENvbnN0cmFpbmVkJiZhdHx8VnQoIngiKSxudC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmaXR8fFZ0KCJ5Iik7dmFyIGY9dHQtZSxoPWV0LXI7IW50LmlzU3VicGxvdENvbnN0cmFpbmVkfHxpdCYmYXR8fChpdD8ocz1vPzA6ZSpldC90dCxoPWYqZXQvdHQpOihvPXM/MDpyKnR0L2V0LGY9aCp0dC9ldCkpLFl0KFtvLHMsZixoXSksSHQoKSx0LmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsaHQpfWZ1bmN0aW9uIHAodCxlLHIpe2Zvcih2YXIgbixpLGE9MS1lLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIHM9dFtvXTtpZighcy5maXhlZHJhbmdlKXtuPXMsaT1zLl9ybFthXSsocy5fcmxbZV0tcy5fcmxbYV0pL0Ioci9zLl9sZW5ndGgpO3ZhciBsPXMubDJyKGkpOyExIT09bCYmdm9pZCAwIT09bCYmKHMucmFuZ2VbZV09bCl9fXJldHVybiBuLl9sZW5ndGgqKG4uX3JsW2VdLWkpLyhuLl9ybFtlXS1uLl9ybFthXSl9fWZ1bmN0aW9uIFZ0KHQsZSl7Zm9yKHZhciByPW50LmlzU3VicGxvdENvbnN0cmFpbmVkP3t4OksseTpKfVt0XTpudFt0KyJheGVzIl0sbj1udC5pc1N1YnBsb3RDb25zdHJhaW5lZD97eDpKLHk6S31bdF06W10saT0wO2k8ci5sZW5ndGg7aSsrKXt2YXIgYT1yW2ldLG89YS5faWQscz1udC54TGlua3Nbb118fG50LnlMaW5rc1tvXSxsPW5bMF18fFZbc118fFpbc107bCYmKGU/KGVbYS5fbmFtZSsiLnJhbmdlWzBdIl09ZVtsLl9uYW1lKyIucmFuZ2VbMF0iXSxlW2EuX25hbWUrIi5yYW5nZVsxXSJdPWVbbC5fbmFtZSsiLnJhbmdlWzFdIl0pOmEucmFuZ2U9bC5yYW5nZS5zbGljZSgpKX19ZnVuY3Rpb24gSHQoKXt2YXIgZSxyPVtdO2Z1bmN0aW9uIG4odCl7Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLmZpeGVkcmFuZ2V8fHIucHVzaCh0W2VdLl9pZCl9Zm9yKHN0JiYobihKKSxuKHJ0LnhheGVzKSxuKG50LnhheGVzKSksbHQmJihuKEspLG4ocnQueWF4ZXMpLG4obnQueWF4ZXMpKSxodD17fSxlPTA7ZTxyLmxlbmd0aDtlKyspe3ZhciBpPXJbZV0sYT1rKHQsaSk7ZC5kcmF3T25lKHQsYSx7c2tpcFRpdGxlOiEwfSksaHRbYS5fbmFtZSsiLnJhbmdlWzBdIl09YS5yYW5nZVswXSxodFthLl9uYW1lKyIucmFuZ2VbMV0iXT1hLnJhbmdlWzFdfWQucmVkcmF3Q29tcG9uZW50cyh0LHIpfWZ1bmN0aW9uIHF0KCl7aWYoIXQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pe3ZhciBlPXQuX2NvbnRleHQuZG91YmxlQ2xpY2sscj1bXTtpdCYmKHI9ci5jb25jYXQoSikpLGF0JiYocj1yLmNvbmNhdChLKSksbnQueGF4ZXMmJihyPXIuY29uY2F0KG50LnhheGVzKSksbnQueWF4ZXMmJihyPXIuY29uY2F0KG50LnlheGVzKSk7dmFyIG4saSxhLG89e307aWYoInJlc2V0K2F1dG9zaXplIj09PWUpZm9yKGU9ImF1dG9zaXplIixpPTA7aTxyLmxlbmd0aDtpKyspaWYoKG49cltpXSkuX3JhbmdlSW5pdGlhbCYmKG4ucmFuZ2VbMF0hPT1uLl9yYW5nZUluaXRpYWxbMF18fG4ucmFuZ2VbMV0hPT1uLl9yYW5nZUluaXRpYWxbMV0pfHwhbi5fcmFuZ2VJbml0aWFsJiYhbi5hdXRvcmFuZ2Upe2U9InJlc2V0IjticmVha31pZigiYXV0b3NpemUiPT09ZSlmb3IoaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChvW24uX25hbWUrIi5hdXRvcmFuZ2UiXT0hMCk7ZWxzZSBpZigicmVzZXQiPT09ZSlmb3IoKGl0fHxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCkmJihyPXIuY29uY2F0KHJ0LnhheGVzKSksYXQmJiFydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKHI9ci5jb25jYXQocnQueWF4ZXMpKSxydC5pc1N1YnBsb3RDb25zdHJhaW5lZCYmKGl0P2F0fHwocj1yLmNvbmNhdChLKSk6cj1yLmNvbmNhdChKKSksaT0wO2k8ci5sZW5ndGg7aSsrKShuPXJbaV0pLmZpeGVkcmFuZ2V8fChuLl9yYW5nZUluaXRpYWw/KGE9bi5fcmFuZ2VJbml0aWFsLG9bbi5fbmFtZSsiLnJhbmdlWzBdIl09YVswXSxvW24uX25hbWUrIi5yYW5nZVsxXSJdPWFbMV0pOm9bbi5fbmFtZSsiLmF1dG9yYW5nZSJdPSEwKTt0LmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsbyl9fWZ1bmN0aW9uIEd0KCl7WXQoWzAsMCx0dCxldF0pLGkuc3luY09yQXN5bmMoW1QucHJldmlvdXNQcm9taXNlcyxmdW5jdGlvbigpe3QuX2Z1bGxMYXlvdXQuX3JlcGxvdHRpbmc9ITEsbC5jYWxsKCJfZ3VpUmVsYXlvdXQiLHQsaHQpfV0sdCl9ZnVuY3Rpb24gWXQoZSl7dmFyIHIsbixhLG8scz10Ll9mdWxsTGF5b3V0LGM9cy5fcGxvdHMsdT1zLl9zdWJwbG90cy5jYXJ0ZXNpYW47aWYodXQmJmwuc3VicGxvdHNSZWdpc3RyeS5zcGxvbS5kcmFnKHQpLGN0KWZvcihyPTA7cjx1Lmxlbmd0aDtyKyspaWYoYT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXMsbi5fc2NlbmUpe3ZhciBmPWkuc2ltcGxlTWFwKGEucmFuZ2UsYS5yMmwpLHA9aS5zaW1wbGVNYXAoby5yYW5nZSxvLnIybCk7bi5fc2NlbmUudXBkYXRlKHtyYW5nZTpbZlswXSxwWzBdLGZbMV0scFsxXV19KX1pZigodXR8fGN0KSYmKF8odCksdyh0KSksZnQpe3ZhciBkPWVbMl0vSS5fbGVuZ3RoLGc9ZVszXS9PLl9sZW5ndGg7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7YT0obj1jW3Vbcl1dKS54YXhpcyxvPW4ueWF4aXM7dmFyIHkseCxiLFQsaz0oc3R8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIWEuZml4ZWRyYW5nZSYmVlthLl9pZF0sQT0obHR8fG50LmlzU3VicGxvdENvbnN0cmFpbmVkKSYmIW8uZml4ZWRyYW5nZSYmWltvLl9pZF07aWYoaz8oeT1kLGI9dnx8bnQuaXNTdWJwbG90Q29uc3RyYWluZWQ/ZVswXTpadChhLHkpKTpudC54YUhhc2hbYS5faWRdPyh5PWQsYj1lWzBdKmEuX2xlbmd0aC9JLl9sZW5ndGgpOm50LnlhSGFzaFthLl9pZF0/KHk9ZyxiPSJucyI9PT1hdD8tZVsxXSphLl9sZW5ndGgvTy5fbGVuZ3RoOlp0KGEseSx7bjoidG9wIixzOiJib3R0b20ifVthdF0pKTpiPVh0KGEseT1XdChhLGQsZykpLEE/KHg9ZyxUPW18fG50LmlzU3VicGxvdENvbnN0cmFpbmVkP2VbMV06WnQobyx4KSk6bnQueWFIYXNoW28uX2lkXT8oeD1nLFQ9ZVsxXSpvLl9sZW5ndGgvTy5fbGVuZ3RoKTpudC54YUhhc2hbby5faWRdPyh4PWQsVD0iZXciPT09aXQ/LWVbMF0qby5fbGVuZ3RoL0kuX2xlbmd0aDpadChvLHgse2U6InJpZ2h0Iix3OiJsZWZ0In1baXRdKSk6VD1YdChvLHg9V3QobyxkLGcpKSx5fHx4KXt5fHwoeT0xKSx4fHwoeD0xKTt2YXIgTT1hLl9vZmZzZXQtYi95LFM9by5fb2Zmc2V0LVQveDtuLmNsaXBSZWN0LmNhbGwoaC5zZXRUcmFuc2xhdGUsYixUKS5jYWxsKGguc2V0U2NhbGUseSx4KSxuLnBsb3QuY2FsbChoLnNldFRyYW5zbGF0ZSxNLFMpLmNhbGwoaC5zZXRTY2FsZSwxL3ksMS94KSx5PT09bi54U2NhbGVGYWN0b3ImJng9PT1uLnlTY2FsZUZhY3Rvcnx8KGguc2V0UG9pbnRHcm91cFNjYWxlKG4uem9vbVNjYWxlUHRzLHkseCksaC5zZXRUZXh0UG9pbnRzU2NhbGUobi56b29tU2NhbGVUeHQseSx4KSksaC5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzKG4uY2xpcE9uQXhpc0ZhbHNlVHJhY2VzLG4pLG4ueFNjYWxlRmFjdG9yPXksbi55U2NhbGVGYWN0b3I9eH19fX1mdW5jdGlvbiBXdCh0LGUscil7cmV0dXJuIHQuZml4ZWRyYW5nZT8wOnN0JiZydC54YUhhc2hbdC5faWRdP2U6bHQmJihydC5pc1N1YnBsb3RDb25zdHJhaW5lZD9ydC54YUhhc2g6cnQueWFIYXNoKVt0Ll9pZF0/cjowfWZ1bmN0aW9uIFh0KHQsZSl7cmV0dXJuIGU/KHQucmFuZ2U9dC5fci5zbGljZSgpLEUodCxlKSxadCh0LGUpKTowfWZ1bmN0aW9uIFp0KHQsZSxyKXtyZXR1cm4gdC5fbGVuZ3RoKigxLWUpKmJbcnx8dC5jb25zdHJhaW50b3dhcmR8fCJtaWRkbGUiXX1yZXR1cm4gbS5sZW5ndGgqdi5sZW5ndGghPTEmJlcoYnQsKGZ1bmN0aW9uKGUpe2lmKHQuX2NvbnRleHQuX3Njcm9sbFpvb20uY2FydGVzaWFufHx0Ll9mdWxsTGF5b3V0Ll9lbmFibGVzY3JvbGx6b29tKXtpZihJdCgpLHQuX3RyYW5zaXRpb25pbmdXaXRoRHVyYXRpb24pcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIGUuc3RvcFByb3BhZ2F0aW9uKCk7eXQoKSxjbGVhclRpbWVvdXQoQnQpO3ZhciByPS1lLmRlbHRhWTtpZihpc0Zpbml0ZShyKXx8KHI9ZS53aGVlbERlbHRhLzEwKSxpc0Zpbml0ZShyKSl7dmFyIG4sYT1NYXRoLmV4cCgtTWF0aC5taW4oTWF0aC5tYXgociwtMjApLDIwKS8yMDApLG89anQuZHJhZ2xheWVyLnNlbGVjdCgiLm5zZXdkcmFnIikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHM9KGUuY2xpZW50WC1vLmxlZnQpL28ud2lkdGgsbD0oby5ib3R0b20tZS5jbGllbnRZKS9vLmhlaWdodDtpZihzdCl7Zm9yKHZ8fChzPS41KSxuPTA7bjxKLmxlbmd0aDtuKyspYyhKW25dLHMsYSk7VnQoIngiKSxGdFsyXSo9YSxGdFswXSs9RnRbMl0qcyooMS9hLTEpfWlmKGx0KXtmb3IobXx8KGw9LjUpLG49MDtuPEsubGVuZ3RoO24rKyljKEtbbl0sbCxhKTtWdCgieSIpLEZ0WzNdKj1hLEZ0WzFdKz1GdFszXSooMS1sKSooMS9hLTEpfVl0KEZ0KSxIdCgpLHQuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixodCksQnQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXt0Ll9mdWxsTGF5b3V0JiYoRnQ9WzAsMCx0dCxldF0sR3QoKSl9KSxOdCksZS5wcmV2ZW50RGVmYXVsdCgpfWVsc2UgaS5sb2coIkRpZCBub3QgZmluZCB3aGVlbCBtb3Rpb24gYXR0cmlidXRlczogIixlKX1mdW5jdGlvbiBjKHQsZSxyKXtpZighdC5maXhlZHJhbmdlKXt2YXIgbj1pLnNpbXBsZU1hcCh0LnJhbmdlLHQucjJsKSxhPW5bMF0rKG5bMV0tblswXSkqZTt0LnJhbmdlPW4ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5sMnIoYSsoZS1hKSpyKX0pKX19fSkpLGJ0fSxtYWtlRHJhZ2dlcjpPLG1ha2VSZWN0RHJhZ2dlcjp6LG1ha2Vab29tYm94Ok4sbWFrZUNvcm5lcnM6aix1cGRhdGVab29tYm94OlUseHlDb3JuZXJzOkcsdHJhbnNpdGlvblpvb21ib3g6VixyZW1vdmVab29tYm94Okgsc2hvd0RvdWJsZUNsaWNrTm90aWZpZXI6cSxhdHRhY2hXaGVlbEV2ZW50SGFuZGxlcjpXfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjY1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi8uLi9saWIvc2V0Y3Vyc29yIjo3OTcsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9wbG90cyI6ODkwLCIuL2F4ZXMiOjgyNywiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL3NjYWxlX3pvb20iOjg0NiwiLi9zZWxlY3QiOjg0NywiQHBsb3RseS9kMyI6NTgsImhhcy1wYXNzaXZlLWV2ZW50cyI6NDI2LHRpbnljb2xvcjI6NTcyfV0sODM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxvPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxzPXQoIi4vZHJhZ2JveCIpLm1ha2VEcmFnQm94LGw9dCgiLi9jb25zdGFudHMiKS5EUkFHR0VSU0laRTtyLmluaXRJbnRlcmFjdGlvbnM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dDtpZih0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpbi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuZHJhZyIpLnJlbW92ZSgpO2Vsc2UgaWYoZS5faGFzKCJjYXJ0ZXNpYW4iKXx8ZS5faGFzKCJzcGxvbSIpKXtPYmplY3Qua2V5cyhlLl9wbG90c3x8e30pLnNvcnQoKGZ1bmN0aW9uKHQscil7aWYoKGUuX3Bsb3RzW3RdLm1haW5wbG90JiYhMCk9PT0oZS5fcGxvdHNbcl0ubWFpbnBsb3QmJiEwKSl7dmFyIG49dC5zcGxpdCgieSIpLGk9ci5zcGxpdCgieSIpO3JldHVybiBuWzBdPT09aVswXT9OdW1iZXIoblsxXXx8MSktTnVtYmVyKGlbMV18fDEpOk51bWJlcihuWzBdfHwxKS1OdW1iZXIoaVswXXx8MSl9cmV0dXJuIGUuX3Bsb3RzW3RdLm1haW5wbG90PzE6LTF9KSkuZm9yRWFjaCgoZnVuY3Rpb24ocil7dmFyIG49ZS5fcGxvdHNbcl0sbz1uLnhheGlzLGM9bi55YXhpcztpZighbi5tYWlucGxvdCl7dmFyIHU9cyh0LG4sby5fb2Zmc2V0LGMuX29mZnNldCxvLl9sZW5ndGgsYy5fbGVuZ3RoLCJucyIsImV3Iik7dS5vbm1vdXNlbW92ZT1mdW5jdGlvbihlKXt0Ll9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7dC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ciYmdC5fZnVsbExheW91dC5fcGxvdHNbcl0mJmkuaG92ZXIodCxlLHIpfSxpLmhvdmVyKHQsZSxyKSx0Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXI9dSx0Ll9mdWxsTGF5b3V0Ll9ob3ZlcnN1YnBsb3Q9cn0sdS5vbm1vdXNlb3V0PWZ1bmN0aW9uKGUpe3QuX2RyYWdnaW5nfHwodC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGwsYS51bmhvdmVyKHQsZSkpfSx0Ll9jb250ZXh0LnNob3dBeGlzRHJhZ0hhbmRsZXMmJihzKHQsbixvLl9vZmZzZXQtbCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQtbCxsLGwsIm4iLCJlIikscyh0LG4sby5fb2Zmc2V0LWwsYy5fb2Zmc2V0K2MuX2xlbmd0aCxsLGwsInMiLCJ3Iikscyh0LG4sby5fb2Zmc2V0K28uX2xlbmd0aCxjLl9vZmZzZXQrYy5fbGVuZ3RoLGwsbCwicyIsImUiKSl9aWYodC5fY29udGV4dC5zaG93QXhpc0RyYWdIYW5kbGVzKXtpZihyPT09by5fbWFpblN1YnBsb3Qpe3ZhciBmPW8uX21haW5MaW5lUG9zaXRpb247InRvcCI9PT1vLnNpZGUmJihmLT1sKSxzKHQsbixvLl9vZmZzZXQrLjEqby5fbGVuZ3RoLGYsLjgqby5fbGVuZ3RoLGwsIiIsImV3Iikscyh0LG4sby5fb2Zmc2V0LGYsLjEqby5fbGVuZ3RoLGwsIiIsInciKSxzKHQsbixvLl9vZmZzZXQrLjkqby5fbGVuZ3RoLGYsLjEqby5fbGVuZ3RoLGwsIiIsImUiKX1pZihyPT09Yy5fbWFpblN1YnBsb3Qpe3ZhciBoPWMuX21haW5MaW5lUG9zaXRpb247InJpZ2h0IiE9PWMuc2lkZSYmKGgtPWwpLHModCxuLGgsYy5fb2Zmc2V0Ky4xKmMuX2xlbmd0aCxsLC44KmMuX2xlbmd0aCwibnMiLCIiKSxzKHQsbixoLGMuX29mZnNldCsuOSpjLl9sZW5ndGgsbCwuMSpjLl9sZW5ndGgsInMiLCIiKSxzKHQsbixoLGMuX29mZnNldCxsLC4xKmMuX2xlbmd0aCwibiIsIiIpfX19KSk7dmFyIG89ZS5faG92ZXJsYXllci5ub2RlKCk7by5vbm1vdXNlbW92ZT1mdW5jdGlvbihyKXtyLnRhcmdldD10Ll9mdWxsTGF5b3V0Ll9sYXN0aG92ZXIsaS5ob3Zlcih0LHIsZS5faG92ZXJzdWJwbG90KX0sby5vbmNsaWNrPWZ1bmN0aW9uKGUpe2UudGFyZ2V0PXQuX2Z1bGxMYXlvdXQuX2xhc3Rob3ZlcixpLmNsaWNrKHQsZSl9LG8ub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7dC5fZnVsbExheW91dC5fbGFzdGhvdmVyLm9ubW91c2Vkb3duKGUpfSxyLnVwZGF0ZUZ4KHQpfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9InBhbiI9PT1lLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIjtvKGUuX2RyYWdnZXJzLHIpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk3LCIuL2NvbnN0YW50cyI6ODM0LCIuL2RyYWdib3giOjgzNiwiQHBsb3RseS9kMyI6NTh9XSw4Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjbGVhck91dGxpbmVDb250cm9sbGVyczpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll96b29tbGF5ZXI7ZSYmZS5zZWxlY3RBbGwoIi5vdXRsaW5lLWNvbnRyb2xsZXJzIikucmVtb3ZlKCl9LGNsZWFyU2VsZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX3pvb21sYXllcjtlJiZlLnNlbGVjdEFsbCgiLnNlbGVjdC1vdXRsaW5lIikucmVtb3ZlKCksdC5fZnVsbExheW91dC5fZHJhd2luZz0hMX19fSx7fV0sODM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZTtmdW5jdGlvbiBpKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LnAyZChlKTtjYXNlImRhdGUiOnJldHVybiB0LnAycihlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5wMnIoZSl9fWUuZXhwb3J0cz17cDJyOmkscjJwOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQudHlwZSl7Y2FzZSJsb2ciOnJldHVybiB0LmQycChlKTtjYXNlImRhdGUiOnJldHVybiB0LnIycChlLDAsdC5jYWxlbmRhcik7ZGVmYXVsdDpyZXR1cm4gdC5yMnAoZSl9fSxheFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPSJ5Ij09PXQuX2lkLmNoYXJBdCgwKT8xOjA7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBpKHQscltlXSl9fSxnZXRUcmFuc2Zvcm06ZnVuY3Rpb24odCl7cmV0dXJuIG4odC54YXhpcy5fb2Zmc2V0LHQueWF4aXMuX29mZnNldCl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDg0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F4aXNfaWRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPWVbdF07aWYoQXJyYXkuaXNBcnJheShvKSlmb3IodmFyIHM9bi5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbixsPXMuaWRSZWdleCxjPXIuX3N1YnBsb3RzLHU9Yy54YXhpcyxmPWMueWF4aXMsaD1jLmNhcnRlc2lhbixwPXIuX2hhcygiY2FydGVzaWFuIil8fHIuX2hhcygiZ2wyZCIpLGQ9MDtkPG8ubGVuZ3RoO2QrKyl7dmFyIG09b1tkXTtpZihpLmlzUGxhaW5PYmplY3QobSkpe3ZhciBnPWEuY2xlYW5JZChtLnhyZWYsIngiLCExKSx2PWEuY2xlYW5JZChtLnlyZWYsInkiLCExKSx5PWwueC50ZXN0KGcpLHg9bC55LnRlc3Qodik7aWYoeXx8eCl7cHx8aS5wdXNoVW5pcXVlKHIuX2Jhc2VQbG90TW9kdWxlcyxzKTt2YXIgYj0hMTt5JiYtMT09PXUuaW5kZXhPZihnKSYmKHUucHVzaChnKSxiPSEwKSx4JiYtMT09PWYuaW5kZXhPZih2KSYmKGYucHVzaCh2KSxiPSEwKSxiJiZ5JiZ4JiZoLnB1c2goZyt2KX19fX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfaWRzIjo4MzF9XSw4NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vcGxvdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxjPXQoIi4vYXhpc19pZHMiKSx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLGg9YS5lbnN1cmVTaW5nbGU7ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIGEuZW5zdXJlU2luZ2xlKHQsZSxyLChmdW5jdGlvbih0KXt0LmRhdHVtKHIpfSkpfWZ1bmN0aW9uIGQodCxlLHIsYSxvKXtmb3IodmFyIGMsZixoLHA9dS50cmFjZUxheWVyQ2xhc3NlcyxkPXQuX2Z1bGxMYXlvdXQsbT1kLl9tb2R1bGVzLGc9W10sdj1bXSx5PTA7eTxtLmxlbmd0aDt5Kyspe3ZhciB4PShjPW1beV0pLm5hbWUsYj1pLm1vZHVsZXNbeF0uY2F0ZWdvcmllcztpZihiLnN2Zyl7dmFyIF89Yy5sYXllck5hbWV8fHgrImxheWVyIix3PWMucGxvdDtoPShmPWwocix3KSlbMF0scj1mWzFdLGgubGVuZ3RoJiZnLnB1c2goe2k6cC5pbmRleE9mKF8pLGNsYXNzTmFtZTpfLHBsb3RNZXRob2Q6dyxjZE1vZHVsZTpofSksYi56b29tU2NhbGUmJnYucHVzaCgiLiIrXyl9fWcuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5pLWUuaX0pKTt2YXIgVD1lLnBsb3Quc2VsZWN0QWxsKCJnLm1sYXllciIpLmRhdGEoZywoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2xhc3NOYW1lfSkpO2lmKFQuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZX0pKS5jbGFzc2VkKCJtbGF5ZXIiLCEwKS5jbGFzc2VkKCJyYW5nZXBsb3QiLGUuaXNSYW5nZVBsb3QpLFQuZXhpdCgpLnJlbW92ZSgpLFQub3JkZXIoKSxULmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGw9ci5jbGFzc05hbWU7ci5wbG90TWV0aG9kKHQsZSxyLmNkTW9kdWxlLGksYSxvKSwtMT09PXUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuaW5kZXhPZigiLiIrbCkmJnMuc2V0Q2xpcFVybChpLGUubGF5ZXJDbGlwSWQsdCl9KSksZC5faGFzKCJzY2F0dGVyZ2wiKSYmKGM9aS5nZXRNb2R1bGUoInNjYXR0ZXJnbCIpLGg9bChyLGMpWzBdLGMucGxvdCh0LGUsaCkpLCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJihlLl9oYXNDbGlwT25BeGlzRmFsc2UmJihlLmNsaXBPbkF4aXNGYWxzZVRyYWNlcz1lLnBsb3Quc2VsZWN0QWxsKHUuY2xpcE9uQXhpc0ZhbHNlUXVlcnkuam9pbigiLCIpKS5zZWxlY3RBbGwoIi50cmFjZSIpKSx2Lmxlbmd0aCkpe3ZhciBrPWUucGxvdC5zZWxlY3RBbGwodi5qb2luKCIsIikpLnNlbGVjdEFsbCgiLnRyYWNlIik7ZS56b29tU2NhbGVQdHM9ay5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLnpvb21TY2FsZVR4dD1rLnNlbGVjdEFsbCgiLnRleHRwb2ludCIpfX1mdW5jdGlvbiBtKHQsZSl7dmFyIHI9ZS5wbG90Z3JvdXAsbj1lLmlkLGk9dS5sYXllclZhbHVlMmxheWVyQ2xhc3NbZS54YXhpcy5sYXllcl0sYT11LmxheWVyVmFsdWUybGF5ZXJDbGFzc1tlLnlheGlzLmxheWVyXSxvPXQuX2Z1bGxMYXlvdXQuX2hhc09ubHlMYXJnZVNwbG9tcztpZihlLm1haW5wbG90KXt2YXIgcz1lLm1haW5wbG90aW5mbyxsPXMucGxvdGdyb3VwLGY9bisiLXgiLGQ9bisiLXkiO2UuZ3JpZGxheWVyPXMuZ3JpZGxheWVyLGUuemVyb2xpbmVsYXllcj1zLnplcm9saW5lbGF5ZXIsaChzLm92ZXJsaW5lc0JlbG93LCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQmVsb3csInBhdGgiLGQpLGgocy5vdmVyYXhlc0JlbG93LCJnIixmKSxoKHMub3ZlcmF4ZXNCZWxvdywiZyIsZCksZS5wbG90PWgocy5vdmVycGxvdCwiZyIsbiksaChzLm92ZXJsaW5lc0Fib3ZlLCJwYXRoIixmKSxoKHMub3ZlcmxpbmVzQWJvdmUsInBhdGgiLGQpLGgocy5vdmVyYXhlc0Fib3ZlLCJnIixmKSxoKHMub3ZlcmF4ZXNBYm92ZSwiZyIsZCksZS54bGluZXM9bC5zZWxlY3QoIi5vdmVybGluZXMtIitpKS5zZWxlY3QoIi4iK2YpLGUueWxpbmVzPWwuc2VsZWN0KCIub3ZlcmxpbmVzLSIrYSkuc2VsZWN0KCIuIitkKSxlLnhheGlzbGF5ZXI9bC5zZWxlY3QoIi5vdmVyYXhlcy0iK2kpLnNlbGVjdCgiLiIrZiksZS55YXhpc2xheWVyPWwuc2VsZWN0KCIub3ZlcmF4ZXMtIithKS5zZWxlY3QoIi4iK2QpfWVsc2UgaWYobyllLnhsaW5lcz1oKHIsInBhdGgiLCJ4bGluZXMtYWJvdmUiKSxlLnlsaW5lcz1oKHIsInBhdGgiLCJ5bGluZXMtYWJvdmUiKSxlLnhheGlzbGF5ZXI9aChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGUueWF4aXNsYXllcj1oKHIsImciLCJ5YXhpc2xheWVyLWFib3ZlIik7ZWxzZXt2YXIgbT1oKHIsImciLCJsYXllci1zdWJwbG90Iik7ZS5zaGFwZWxheWVyPWgobSwiZyIsInNoYXBlbGF5ZXIiKSxlLmltYWdlbGF5ZXI9aChtLCJnIiwiaW1hZ2VsYXllciIpLGUuZ3JpZGxheWVyPWgociwiZyIsImdyaWRsYXllciIpLGUuemVyb2xpbmVsYXllcj1oKHIsImciLCJ6ZXJvbGluZWxheWVyIiksaChyLCJwYXRoIiwieGxpbmVzLWJlbG93IiksaChyLCJwYXRoIiwieWxpbmVzLWJlbG93IiksZS5vdmVybGluZXNCZWxvdz1oKHIsImciLCJvdmVybGluZXMtYmVsb3ciKSxoKHIsImciLCJ4YXhpc2xheWVyLWJlbG93IiksaChyLCJnIiwieWF4aXNsYXllci1iZWxvdyIpLGUub3ZlcmF4ZXNCZWxvdz1oKHIsImciLCJvdmVyYXhlcy1iZWxvdyIpLGUucGxvdD1oKHIsImciLCJwbG90IiksZS5vdmVycGxvdD1oKHIsImciLCJvdmVycGxvdCIpLGUueGxpbmVzPWgociwicGF0aCIsInhsaW5lcy1hYm92ZSIpLGUueWxpbmVzPWgociwicGF0aCIsInlsaW5lcy1hYm92ZSIpLGUub3ZlcmxpbmVzQWJvdmU9aChyLCJnIiwib3ZlcmxpbmVzLWFib3ZlIiksaChyLCJnIiwieGF4aXNsYXllci1hYm92ZSIpLGgociwiZyIsInlheGlzbGF5ZXItYWJvdmUiKSxlLm92ZXJheGVzQWJvdmU9aChyLCJnIiwib3ZlcmF4ZXMtYWJvdmUiKSxlLnhsaW5lcz1yLnNlbGVjdCgiLnhsaW5lcy0iK2kpLGUueWxpbmVzPXIuc2VsZWN0KCIueWxpbmVzLSIrYSksZS54YXhpc2xheWVyPXIuc2VsZWN0KCIueGF4aXNsYXllci0iK2kpLGUueWF4aXNsYXllcj1yLnNlbGVjdCgiLnlheGlzbGF5ZXItIithKX1vfHwocChlLmdyaWRsYXllciwiZyIsZS54YXhpcy5faWQpLHAoZS5ncmlkbGF5ZXIsImciLGUueWF4aXMuX2lkKSxlLmdyaWRsYXllci5zZWxlY3RBbGwoImciKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLnNvcnQoYy5pZFNvcnQpKSxlLnhsaW5lcy5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jbGFzc2VkKCJjcmlzcCIsITApLGUueWxpbmVzLnN0eWxlKCJmaWxsIiwibm9uZSIpLmNsYXNzZWQoImNyaXNwIiwhMCl9ZnVuY3Rpb24gZyh0LGUpe2lmKHQpe3ZhciByPXt9O2Zvcih2YXIgaSBpbiB0LmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBpPXRbMF07bi5zZWxlY3QodGhpcykucmVtb3ZlKCksdihpLGUpLHJbaV09ITB9KSksZS5fcGxvdHMpZm9yKHZhciBhPWUuX3Bsb3RzW2ldLm92ZXJsYXlzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspe3ZhciBzPWFbb107cltzLmlkXSYmcy5wbG90LnNlbGVjdEFsbCgiLnRyYWNlIikucmVtb3ZlKCl9fX1mdW5jdGlvbiB2KHQsZSl7ZS5fZHJhZ2dlcnMuc2VsZWN0QWxsKCJnLiIrdCkucmVtb3ZlKCksZS5fZGVmcy5zZWxlY3QoIiNjbGlwIitlLl91aWQrdCsicGxvdCIpLnJlbW92ZSgpfXIubmFtZT0iY2FydGVzaWFuIixyLmF0dHI9WyJ4YXhpcyIsInlheGlzIl0sci5pZFJvb3Q9WyJ4IiwieSJdLHIuaWRSZWdleD11LmlkUmVnZXgsci5hdHRyUmVnZXg9dS5hdHRyUmVnZXgsci5hdHRyaWJ1dGVzPXQoIi4vYXR0cmlidXRlcyIpLHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIudHJhbnNpdGlvbkF4ZXM9dCgiLi90cmFuc2l0aW9uX2F4ZXMiKSxyLmZpbmFsaXplU3VicGxvdHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksbz1lLl9zdWJwbG90cyxzPW8ueGF4aXMsbD1vLnlheGlzLGY9by5jYXJ0ZXNpYW4saD1mLmNvbmNhdChvLmdsMmR8fFtdKSxwPXt9LGQ9e307Zm9yKHI9MDtyPGgubGVuZ3RoO3IrKyl7dmFyIG09aFtyXS5zcGxpdCgieSIpO3BbbVswXV09MSxkWyJ5IittWzFdXT0xfWZvcihyPTA7cjxzLmxlbmd0aDtyKyspcFtuPXNbcl1dfHwoaT0odFtjLmlkMm5hbWUobildfHx7fSkuYW5jaG9yLHUuaWRSZWdleC55LnRlc3QoaSl8fChpPSJ5IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSksZFtpXXx8KGRbaV09MSxhLnB1c2hVbmlxdWUobCxpKSkpO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspZFtpPWxbcl1dfHwobj0odFtjLmlkMm5hbWUoaSldfHx7fSkuYW5jaG9yLHUuaWRSZWdleC54LnRlc3Qobil8fChuPSJ4IiksZi5wdXNoKG4raSksaC5wdXNoKG4raSkscFtuXXx8KHBbbl09MSxhLnB1c2hVbmlxdWUocyxuKSkpO2lmKCFoLmxlbmd0aCl7Zm9yKHZhciBnIGluIG49IiIsaT0iIix0KXtpZih1LmF0dHJSZWdleC50ZXN0KGcpKSJ4Ij09PWcuY2hhckF0KDApPyghbnx8K2cuc3Vic3RyKDUpPCtuLnN1YnN0cig1KSkmJihuPWcpOighaXx8K2cuc3Vic3RyKDUpPCtpLnN1YnN0cig1KSkmJihpPWcpfW49bj9jLm5hbWUyaWQobik6IngiLGk9aT9jLm5hbWUyaWQoaSk6InkiLHMucHVzaChuKSxsLnB1c2goaSksZi5wdXNoKG4raSl9fSxyLnBsb3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10Ll9mdWxsTGF5b3V0LG89YS5fc3VicGxvdHMuY2FydGVzaWFuLHM9dC5jYWxjZGF0YTtpZighQXJyYXkuaXNBcnJheShlKSlmb3IoZT1bXSxpPTA7aTxzLmxlbmd0aDtpKyspZS5wdXNoKGkpO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe2Zvcih2YXIgbCxjPW9baV0sdT1hLl9wbG90c1tjXSxmPVtdLGg9MDtoPHMubGVuZ3RoO2grKyl7dmFyIHA9c1toXSxtPXBbMF0udHJhY2U7bS54YXhpcyttLnlheGlzPT09YyYmKCgtMSE9PWUuaW5kZXhPZihtLmluZGV4KXx8bS5jYXJwZXQpJiYobCYmbFswXS50cmFjZS54YXhpcytsWzBdLnRyYWNlLnlheGlzPT09YyYmLTEhPT1bInRvbmV4dHgiLCJ0b25leHR5IiwidG9uZXh0Il0uaW5kZXhPZihtLmZpbGwpJiYtMT09PWYuaW5kZXhPZihsKSYmZi5wdXNoKGwpLGYucHVzaChwKSksbD1wKX1kKHQsdSxmLHIsbil9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzPW4uX3Bsb3RzfHx7fSxsPWUuX3Bsb3RzfHx7fSx1PW4uX3N1YnBsb3RzfHx7fTtpZihuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJiFlLl9oYXNPbmx5TGFyZ2VTcGxvbXMpZm9yKG8gaW4gcykoaT1zW29dKS5wbG90Z3JvdXAmJmkucGxvdGdyb3VwLnJlbW92ZSgpO3ZhciBmPW4uX2hhcyYmbi5faGFzKCJnbCIpLGg9ZS5faGFzJiZlLl9oYXMoImdsIik7aWYoZiYmIWgpZm9yKG8gaW4gcykoaT1zW29dKS5fc2NlbmUmJmkuX3NjZW5lLmRlc3Ryb3koKTtpZih1LnhheGlzJiZ1LnlheGlzKXt2YXIgcD1jLmxpc3RJZHMoe19mdWxsTGF5b3V0Om59KTtmb3IoYT0wO2E8cC5sZW5ndGg7YSsrKXt2YXIgZD1wW2FdO2VbYy5pZDJuYW1lKGQpXXx8bi5faW5mb2xheWVyLnNlbGVjdEFsbCgiLmctIitkKyJ0aXRsZSIpLnJlbW92ZSgpfX12YXIgbT1uLl9oYXMmJm4uX2hhcygiY2FydGVzaWFuIikseT1lLl9oYXMmJmUuX2hhcygiY2FydGVzaWFuIik7aWYobSYmIXkpZyhuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoIi5zdWJwbG90Iiksbiksbi5fZGVmcy5zZWxlY3RBbGwoIi5heGVzY2xpcCIpLnJlbW92ZSgpLGRlbGV0ZSBuLl9heGlzQ29uc3RyYWludEdyb3VwcyxkZWxldGUgbi5fYXhpc01hdGNoR3JvdXBzO2Vsc2UgaWYodS5jYXJ0ZXNpYW4pZm9yKGE9MDthPHUuY2FydGVzaWFuLmxlbmd0aDthKyspe3ZhciB4PXUuY2FydGVzaWFuW2FdO2lmKCFsW3hdKXt2YXIgYj0iLiIreCsiLC4iK3grIi14LC4iK3grIi15IjtuLl9jYXJ0ZXNpYW5sYXllci5zZWxlY3RBbGwoYikucmVtb3ZlKCksdih4LG4pfX19LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksYSxvLHM9dC5fZnVsbExheW91dCxsPXMuX3N1YnBsb3RzLmNhcnRlc2lhbixjPWwubGVuZ3RoLHU9W10sZj1bXTtmb3IoZT0wO2U8YztlKyspe249bFtlXSxpPXMuX3Bsb3RzW25dLGE9aS54YXhpcyxvPWkueWF4aXM7dmFyIGg9YS5fbWFpbkF4aXMscD1vLl9tYWluQXhpcyxkPWguX2lkK3AuX2lkLG09cy5fcGxvdHNbZF07aS5vdmVybGF5cz1bXSxkIT09biYmbT8oaS5tYWlucGxvdD1kLGkubWFpbnBsb3RpbmZvPW0sZi5wdXNoKG4pKTooaS5tYWlucGxvdD12b2lkIDAsaS5tYWlucGxvdGluZm89dm9pZCAwLHUucHVzaChuKSl9Zm9yKGU9MDtlPGYubGVuZ3RoO2UrKyluPWZbZV0sKGk9cy5fcGxvdHNbbl0pLm1haW5wbG90aW5mby5vdmVybGF5cy5wdXNoKGkpO3ZhciBnPXUuY29uY2F0KGYpLHY9bmV3IEFycmF5KGMpO2ZvcihlPTA7ZTxjO2UrKyl7bj1nW2VdLGk9cy5fcGxvdHNbbl0sYT1pLnhheGlzLG89aS55YXhpczt2YXIgeT1bbixhLmxheWVyLG8ubGF5ZXIsYS5vdmVybGF5aW5nfHwiIixvLm92ZXJsYXlpbmd8fCIiXTtmb3Iocj0wO3I8aS5vdmVybGF5cy5sZW5ndGg7cisrKXkucHVzaChpLm92ZXJsYXlzW3JdLmlkKTt2W2VdPXl9cmV0dXJuIHZ9KHQpLGk9ZS5fY2FydGVzaWFubGF5ZXIuc2VsZWN0QWxsKCIuc3VicGxvdCIpLmRhdGEocixTdHJpbmcpO2kuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJzdWJwbG90ICIrdFswXX0pKSxpLm9yZGVyKCksaS5leGl0KCkuY2FsbChnLGUpLGkuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9clswXSxhPWUuX3Bsb3RzW2ldO2EucGxvdGdyb3VwPW4uc2VsZWN0KHRoaXMpLG0odCxhKSxhLmRyYWdsYXllcj1oKGUuX2RyYWdnZXJzLCJnIixpKX0pKX0sci5yYW5nZVBsb3Q9ZnVuY3Rpb24odCxlLHIpe20odCxlKSxkKHQsZSxyKSxvLnN0eWxlKHQpfSxyLnRvU1ZHPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2dsaW1hZ2VzLHI9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuc3ZnLWNvbnRhaW5lciIpO3IuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09ci5zaXplKCktMX0pKS5zZWxlY3RBbGwoIi5nbC1jYW52YXMtY29udGV4dCwgLmdsLWNhbnZhcy1mb2N1cyIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50b0RhdGFVUkwoImltYWdlL3BuZyIpO2UuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpmLnN2ZywieGxpbms6aHJlZiI6dCxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIix4OjAseTowLHdpZHRoOnRoaXMuc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuc3R5bGUuaGVpZ2h0fSl9KSl9LHIudXBkYXRlRng9dCgiLi9ncmFwaF9pbnRlcmFjdCIpLnVwZGF0ZUZ4fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vZ2V0X2RhdGEiOjg2NCwiLi4vcGxvdHMiOjg5MCwiLi9hdHRyaWJ1dGVzIjo4MjUsIi4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjgzNCwiLi9ncmFwaF9pbnRlcmFjdCI6ODM3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NDMsIi4vdHJhbnNpdGlvbl9heGVzIjo4NTIsIkBwbG90bHkvZDMiOjU4fV0sODQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsbz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxzPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25XaXRoRGF0ZXMsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuT05FREFZLHU9dCgiLi9jb25zdGFudHMiKSxmPXUuSE9VUl9QQVRURVJOLGg9dS5XRUVLREFZX1BBVFRFUk47ZS5leHBvcnRzPXt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LGZvbnQ6bih7ZWRpdFR5cGU6InRpY2tzIn0pLHN0YW5kb2ZmOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LGVkaXRUeXBlOiJ0aWNrcyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJsb2ciLCJkYXRlIiwiY2F0ZWdvcnkiLCJtdWx0aWNhdGVnb3J5Il0sZGZsdDoiLSIsZWRpdFR5cGU6ImNhbGMiLF9ub1RlbXBsYXRpbmc6ITB9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sYXV0b3JhbmdlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGRmbHQ6ITAsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7InJhbmdlWzBdIjp2b2lkIDAsInJhbmdlWzFdIjp2b2lkIDB9fSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vcm1hbCIsInRvemVybyIsIm5vbm5lZ2F0aXZlIl0sZGZsdDoibm9ybWFsIixlZGl0VHlwZToicGxvdCJ9LHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImF4cmFuZ2UiLGltcGxpZWRFZGl0czp7Il5hdXRvcmFuZ2UiOiExfSxhbmltOiEwfSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9LGFuaW06ITB9XSxlZGl0VHlwZToiYXhyYW5nZSIsaW1wbGllZEVkaXRzOnthdXRvcmFuZ2U6ITF9LGFuaW06ITB9LGZpeGVkcmFuZ2U6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxzY2FsZWFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2NhbGVyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhbmdlIiwiZG9tYWluIl0sZWRpdFR5cGU6InBsb3QifSxjb25zdHJhaW50b3dhcmQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCIsInRvcCIsIm1pZGRsZSIsImJvdHRvbSJdLGVkaXRUeXBlOiJwbG90In0sbWF0Y2hlczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlt1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2VicmVha3M6cygicmFuZ2VicmVhayIse2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxib3VuZHM6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn1dLGVkaXRUeXBlOiJjYWxjIn0scGF0dGVybjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltoLGYsIiJdLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGVkaXRUeXBlOiJjYWxjIixpdGVtczp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9fSxkdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6Y30sZWRpdFR5cGU6ImNhbGMifSksdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJsaW5lYXIiLCJhcnJheSJdLGVkaXRUeXBlOiJ0aWNrcyIsaW1wbGllZEVkaXRzOnt0aWNrMDp2b2lkIDAsZHRpY2s6dm9pZCAwfX0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InRpY2tzIn0sdGljazA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sZHRpY2s6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIixpbXBsaWVkRWRpdHM6e3RpY2ttb2RlOiJsaW5lYXIifX0sdGlja3ZhbHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2t0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToidGlja3MifSx0aWNrczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIiJdLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tzb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxhYmVscyIsImJvdW5kYXJpZXMiXSxkZmx0OiJsYWJlbHMiLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tsYWJlbG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc3RhbnQiLCJwZXJpb2QiXSxkZmx0OiJpbnN0YW50IixlZGl0VHlwZToidGlja3MifSx0aWNrbGFiZWxwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3V0c2lkZSIsImluc2lkZSIsIm91dHNpZGUgdG9wIiwiaW5zaWRlIHRvcCIsIm91dHNpZGUgbGVmdCIsImluc2lkZSBsZWZ0Iiwib3V0c2lkZSByaWdodCIsImluc2lkZSByaWdodCIsIm91dHNpZGUgYm90dG9tIiwiaW5zaWRlIGJvdHRvbSJdLGRmbHQ6Im91dHNpZGUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja2xhYmVsb3ZlcmZsb3c6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbG93IiwiaGlkZSBwYXN0IGRpdiIsImhpZGUgcGFzdCBkb21haW4iXSxlZGl0VHlwZToiY2FsYyJ9LG1pcnJvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMCwidGlja3MiLCExLCJhbGwiLCJhbGx0aWNrcyJdLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sdGlja2xlbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjUsZWRpdFR5cGU6InRpY2tzIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx0aWNrY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToidGlja3MifSxzaG93c3Bpa2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJtb2RlYmFyIn0sc3Bpa2Vjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bnVsbCxlZGl0VHlwZToibm9uZSJ9LHNwaWtldGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MyxlZGl0VHlwZToibm9uZSJ9LHNwaWtlZGFzaDpvKHt9LGEse2RmbHQ6ImRhc2giLGVkaXRUeXBlOiJub25lIn0pLHNwaWtlbW9kZTp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsidG9heGlzIiwiYWNyb3NzIiwibWFya2VyIl0sZGZsdDoidG9heGlzIixlZGl0VHlwZToibm9uZSJ9LHNwaWtlc25hcDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZGF0YSIsImN1cnNvciIsImhvdmVyZWQgZGF0YSJdLGRmbHQ6ImhvdmVyZWQgZGF0YSIsZWRpdFR5cGU6Im5vbmUifSx0aWNrZm9udDpuKHtlZGl0VHlwZToidGlja3MifSksdGlja2FuZ2xlOnt2YWxUeXBlOiJhbmdsZSIsZGZsdDoiYXV0byIsZWRpdFR5cGU6InRpY2tzIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3d0aWNrcHJlZml4Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToidGlja3MifSx0aWNrc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJ0aWNrcyJ9LHNob3dleHBvbmVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwiZmlyc3QiLCJsYXN0Iiwibm9uZSJdLGRmbHQ6ImFsbCIsZWRpdFR5cGU6InRpY2tzIn0sZXhwb25lbnRmb3JtYXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJlIiwiRSIsInBvd2VyIiwiU0kiLCJCIl0sZGZsdDoiQiIsZWRpdFR5cGU6InRpY2tzIn0sbWluZXhwb25lbnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLG1pbjowLGVkaXRUeXBlOiJ0aWNrcyJ9LHNlcGFyYXRldGhvdXNhbmRzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpY2tmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToidGlja3MiLGRlc2NyaXB0aW9uOmwoInRpY2sgbGFiZWwiKX0sdGlja2Zvcm1hdHN0b3BzOnMoInRpY2tmb3JtYXRzdG9wIix7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToidGlja3MifSxkdGlja3JhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InRpY2tzIn1dLGVkaXRUeXBlOiJ0aWNrcyJ9LHZhbHVlOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InRpY2tzIn0sZWRpdFR5cGU6InRpY2tzIn0pLGhvdmVyZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6Im5vbmUiLGRlc2NyaXB0aW9uOmwoImhvdmVyIHRleHQiKX0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sbGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InRpY2tzK2xheW91dHN0eWxlIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5saWdodExpbmUsZWRpdFR5cGU6InRpY2tzIn0sZ3JpZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZTp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6InRpY2tzIn0semVyb2xpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aS5kZWZhdWx0TGluZSxlZGl0VHlwZToidGlja3MifSx6ZXJvbGluZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToidGlja3MifSxzaG93ZGl2aWRlcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InRpY2tzIn0sZGl2aWRlcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppLmRlZmF1bHRMaW5lLGVkaXRUeXBlOiJ0aWNrcyJ9LGRpdmlkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6InRpY2tzIn0sYW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIix1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Il0sZWRpdFR5cGU6InBsb3QifSxvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmcmVlIix1LmlkUmVnZXgueC50b1N0cmluZygpLHUuaWRSZWdleC55LnRvU3RyaW5nKCldLGVkaXRUeXBlOiJwbG90In0sbGF5ZXI6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFib3ZlIHRyYWNlcyIsImJlbG93IHRyYWNlcyJdLGRmbHQ6ImFib3ZlIHRyYWNlcyIsZWRpdFR5cGU6InBsb3QifSxkb21haW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJwbG90In1dLGRmbHQ6WzAsMV0sZWRpdFR5cGU6InBsb3QifSxwb3NpdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSIsInRvdGFsIGFzY2VuZGluZyIsInRvdGFsIGRlc2NlbmRpbmciLCJtaW4gYXNjZW5kaW5nIiwibWluIGRlc2NlbmRpbmciLCJtYXggYXNjZW5kaW5nIiwibWF4IGRlc2NlbmRpbmciLCJzdW0gYXNjZW5kaW5nIiwic3VtIGRlc2NlbmRpbmciLCJtZWFuIGFzY2VuZGluZyIsIm1lYW4gZGVzY2VuZGluZyIsIm1lZGlhbiBhc2NlbmRpbmciLCJtZWRpYW4gZGVzY2VuZGluZyJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7YXV0b3RpY2s6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJ0aWNrcyJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToidGlja3MifSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vY29uc3RhbnRzIjo4MzR9XSw4NDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5pc1VuaWZpZWRIb3ZlcixvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJtb2RlX2RlZmF1bHRzIikscz10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIiksbD10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLGM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi90eXBlX2RlZmF1bHRzIiksZj10KCIuL2F4aXNfZGVmYXVsdHMiKSxoPXQoIi4vY29uc3RyYWludHMiKSxwPXQoIi4vcG9zaXRpb25fZGVmYXVsdHMiKSxkPXQoIi4vYXhpc19pZHMiKSxtPWQuaWQybmFtZSxnPWQubmFtZTJpZCx2PXQoIi4vY29uc3RhbnRzIikuQVhfSURfUEFUVEVSTix5PXQoIi4uLy4uL3JlZ2lzdHJ5IikseD15LnRyYWNlSXMsYj15LmdldENvbXBvbmVudE1ldGhvZDtmdW5jdGlvbiBfKHQsZSxyKXtBcnJheS5pc0FycmF5KHRbZV0pP3RbZV0ucHVzaChyKTp0W2VdPVtyXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB5LHcsVD1lLmF1dG90eXBlbnVtYmVycyxrPXt9LEE9e30sTT17fSxTPXt9LEU9e30sTD17fSxDPXt9LFA9e30sST17fSxPPXt9O2Zvcih5PTA7eTxyLmxlbmd0aDt5Kyspe3ZhciB6PXJbeV07aWYoeCh6LCJjYXJ0ZXNpYW4iKXx8eCh6LCJnbDJkIikpe3ZhciBELFI7aWYoei54YXhpcylEPW0oei54YXhpcyksXyhrLEQseik7ZWxzZSBpZih6LnhheGVzKWZvcih3PTA7dzx6LnhheGVzLmxlbmd0aDt3KyspXyhrLG0oei54YXhlc1t3XSkseik7aWYoei55YXhpcylSPW0oei55YXhpcyksXyhrLFIseik7ZWxzZSBpZih6LnlheGVzKWZvcih3PTA7dzx6LnlheGVzLmxlbmd0aDt3KyspXyhrLG0oei55YXhlc1t3XSkseik7aWYoImZ1bm5lbCI9PT16LnR5cGU/ImgiPT09ei5vcmllbnRhdGlvbj8oRCYmKEFbRF09ITApLFImJihDW1JdPSEwKSk6UiYmKE1bUl09ITApOiJpbWFnZSI9PT16LnR5cGU/KFImJihQW1JdPSEwKSxEJiYoUFtEXT0hMCkpOihSJiYoRVtSXT0hMCxMW1JdPSEwKSx4KHosImNhcnBldCIpJiYoImNhcnBldCIhPT16LnR5cGV8fHouX2NoZWF0ZXIpfHxEJiYoU1tEXT0hMCkpLCJjYXJwZXQiPT09ei50eXBlJiZ6Ll9jaGVhdGVyJiZEJiYoQVtEXT0hMCkseCh6LCIyZE1hcCIpJiYoSVtEXT0hMCxJW1JdPSEwKSx4KHosIm9yaWVudGVkIikpT1siaCI9PT16Lm9yaWVudGF0aW9uP1I6RF09ITB9fXZhciBGPWUuX3N1YnBsb3RzLEI9Ri54YXhpcyxOPUYueWF4aXMsaj1uLnNpbXBsZU1hcChCLG0pLFU9bi5zaW1wbGVNYXAoTixtKSxWPWouY29uY2F0KFUpLEg9aS5iYWNrZ3JvdW5kO0IubGVuZ3RoJiZOLmxlbmd0aCYmKEg9bi5jb2VyY2UodCxlLGwsInBsb3RfYmdjb2xvciIpKTt2YXIgcSxHLFksVyxYLFo9aS5jb21iaW5lKEgsZS5wYXBlcl9iZ2NvbG9yKTtmdW5jdGlvbiBKKCl7dmFyIHQ9a1txXXx8W107WC5fdHJhY2VJbmRpY2VzPXQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKSxYLl9hbm5JbmRpY2VzPVtdLFguX3NoYXBlSW5kaWNlcz1bXSxYLl9pbWdJbmRpY2VzPVtdLFguX3N1YnBsb3RzV2l0aD1bXSxYLl9jb3VudGVyQXhlcz1bXSxYLl9uYW1lPVguX2F0dHI9cSxYLl9pZD1HfWZ1bmN0aW9uIEsodCxlKXtyZXR1cm4gbi5jb2VyY2UoVyxYLGMsdCxlKX1mdW5jdGlvbiBRKHQsZSl7cmV0dXJuIG4uY29lcmNlMihXLFgsYyx0LGUpfWZ1bmN0aW9uICQodCl7cmV0dXJuIngiPT09dD9OOkJ9ZnVuY3Rpb24gdHQoZSxyKXtmb3IodmFyIG49IngiPT09ZT9qOlUsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBvPW5bYV07bz09PXJ8fCh0W29dfHx7fSkub3ZlcmxheWluZ3x8aS5wdXNoKGcobykpfXJldHVybiBpfXZhciBldD17eDokKCJ4IikseTokKCJ5Iil9LHJ0PWV0LnguY29uY2F0KGV0LnkpLG50PXt9LGl0PVtdO2Z1bmN0aW9uIGF0KCl7dmFyIHQ9Vy5tYXRjaGVzO3YudGVzdCh0KSYmLTE9PT1ydC5pbmRleE9mKHQpJiYobnRbdF09Vy50eXBlLGl0PU9iamVjdC5rZXlzKG50KSl9dmFyIG90PW8odCxlKSxzdD1hKG90KTtmb3IoeT0wO3k8Vi5sZW5ndGg7eSsrKXtxPVZbeV0sRz1nKHEpLFk9cS5jaGFyQXQoMCksbi5pc1BsYWluT2JqZWN0KHRbcV0pfHwodFtxXT17fSksVz10W3FdLFg9cy5uZXdDb250YWluZXIoZSxxLFkrImF4aXMiKSxKKCk7dmFyIGx0PSJ4Ij09PVkmJiFTW3FdJiZBW3FdfHwieSI9PT1ZJiYhRVtxXSYmTVtxXSxjdD0ieSI9PT1ZJiYoIUxbcV0mJkNbcV18fFBbcV0pLHV0PXtsZXR0ZXI6WSxmb250OmUuZm9udCxvdXRlclRpY2tzOklbcV0sc2hvd0dyaWQ6IU9bcV0sZGF0YTprW3FdfHxbXSxiZ0NvbG9yOlosY2FsZW5kYXI6ZS5jYWxlbmRhcixhdXRvbWFyZ2luOiEwLHZpc2libGVEZmx0Omx0LHJldmVyc2VEZmx0OmN0LGF1dG90eXBlbnVtYmVyc0RmbHQ6VCxzcGxvbVN0YXNoOigoZS5fc3Bsb21BeGVzfHx7fSlbWV18fHt9KVtHXX07SygidWlyZXZpc2lvbiIsZS51aXJldmlzaW9uKSx1KFcsWCxLLHV0KSxmKFcsWCxLLHV0LGUpO3ZhciBmdD1zdCYmWT09PW90LmNoYXJBdCgwKSxodD1RKCJzcGlrZWNvbG9yIixzdD9YLmNvbG9yOnZvaWQgMCkscHQ9USgic3Bpa2V0aGlja25lc3MiLHN0PzEuNTp2b2lkIDApLGR0PVEoInNwaWtlZGFzaCIsc3Q/ImRvdCI6dm9pZCAwKSxtdD1RKCJzcGlrZW1vZGUiLHN0PyJhY3Jvc3MiOnZvaWQgMCksZ3Q9USgic3Bpa2VzbmFwIik7Sygic2hvd3NwaWtlcyIsISEoZnR8fGh0fHxwdHx8ZHR8fG10fHxndCkpfHwoZGVsZXRlIFguc3Bpa2Vjb2xvcixkZWxldGUgWC5zcGlrZXRoaWNrbmVzcyxkZWxldGUgWC5zcGlrZWRhc2gsZGVsZXRlIFguc3Bpa2Vtb2RlLGRlbGV0ZSBYLnNwaWtlc25hcCkscChXLFgsSyx7bGV0dGVyOlksY291bnRlckF4ZXM6ZXRbWV0sb3ZlcmxheWFibGVBeGVzOnR0KFkscSksZ3JpZDplLmdyaWR9KSxLKCJ0aXRsZS5zdGFuZG9mZiIpLGF0KCksWC5faW5wdXQ9V31mb3IoeT0wO3k8aXQubGVuZ3RoOyl7Rz1pdFt5KytdLFk9KHE9bShHKSkuY2hhckF0KDApLG4uaXNQbGFpbk9iamVjdCh0W3FdKXx8KHRbcV09e30pLFc9dFtxXSxYPXMubmV3Q29udGFpbmVyKGUscSxZKyJheGlzIiksSigpO3ZhciB2dD17bGV0dGVyOlksZm9udDplLmZvbnQsb3V0ZXJUaWNrczpJW3FdLHNob3dHcmlkOiFPW3FdLGRhdGE6W10sYmdDb2xvcjpaLGNhbGVuZGFyOmUuY2FsZW5kYXIsYXV0b21hcmdpbjohMCx2aXNpYmxlRGZsdDohMSxyZXZlcnNlRGZsdDohMSxhdXRvdHlwZW51bWJlcnNEZmx0OlQsc3Bsb21TdGFzaDooKGUuX3NwbG9tQXhlc3x8e30pW1ldfHx7fSlbR119O0soInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbiksWC50eXBlPW50W0ddfHwibGluZWFyIixmKFcsWCxLLHZ0LGUpLHAoVyxYLEsse2xldHRlcjpZLGNvdW50ZXJBeGVzOmV0W1ldLG92ZXJsYXlhYmxlQXhlczp0dChZLHEpLGdyaWQ6ZS5ncmlkfSksSygiZml4ZWRyYW5nZSIpLGF0KCksWC5faW5wdXQ9V312YXIgeXQ9YigicmFuZ2VzbGlkZXIiLCJoYW5kbGVEZWZhdWx0cyIpLHh0PWIoInJhbmdlc2VsZWN0b3IiLCJoYW5kbGVEZWZhdWx0cyIpO2Zvcih5PTA7eTxqLmxlbmd0aDt5KyspcT1qW3ldLFc9dFtxXSxYPWVbcV0seXQodCxlLHEpLCJkYXRlIj09PVgudHlwZSYmeHQoVyxYLGUsVSxYLmNhbGVuZGFyKSxLKCJmaXhlZHJhbmdlIik7Zm9yKHk9MDt5PFUubGVuZ3RoO3krKyl7cT1VW3ldLFc9dFtxXSxYPWVbcV07dmFyIGJ0PWVbbShYLmFuY2hvcildO0soImZpeGVkcmFuZ2UiLGIoInJhbmdlc2xpZGVyIiwiaXNWaXNpYmxlIikoYnQpKX1oLmhhbmRsZURlZmF1bHRzKHQsZSx7YXhJZHM6cnQuY29uY2F0KGl0KS5zb3J0KGQuaWRTb3J0KSxheEhhc0ltYWdlOlB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29tcG9uZW50cy9meC9ob3Zlcm1vZGVfZGVmYXVsdHMiOjY3OCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MSwiLi9heGlzX2RlZmF1bHRzIjo4MjksIi4vYXhpc19pZHMiOjgzMSwiLi9jb25zdGFudHMiOjgzNCwiLi9jb25zdHJhaW50cyI6ODM1LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4vcG9zaXRpb25fZGVmYXVsdHMiOjg0NSwiLi90eXBlX2RlZmF1bHRzIjo4NTN9XSw4NDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgidGlueWNvbG9yMiIpLm1peCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLmxpZ2h0RnJhY3Rpb24sYT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9KG89b3x8e30pLmRmbHRDb2xvcjtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGEuY29lcmNlMih0LGUsby5hdHRyaWJ1dGVzLHIsbil9dmFyIGM9bCgibGluZWNvbG9yIixzKSx1PWwoImxpbmV3aWR0aCIpO3IoInNob3dsaW5lIixvLnNob3dMaW5lfHwhIWN8fCEhdSl8fChkZWxldGUgZS5saW5lY29sb3IsZGVsZXRlIGUubGluZXdpZHRoKTt2YXIgZj1sKCJncmlkY29sb3IiLG4ocyxvLmJnQ29sb3Isby5ibGVuZHx8aSkudG9SZ2JTdHJpbmcoKSksaD1sKCJncmlkd2lkdGgiKTtpZihyKCJzaG93Z3JpZCIsby5zaG93R3JpZHx8ISFmfHwhIWgpfHwoZGVsZXRlIGUuZ3JpZGNvbG9yLGRlbGV0ZSBlLmdyaWR3aWR0aCksIW8ubm9aZXJvTGluZSl7dmFyIHA9bCgiemVyb2xpbmVjb2xvciIscyksZD1sKCJ6ZXJvbGluZXdpZHRoIik7cigiemVyb2xpbmUiLG8uc2hvd0dyaWR8fCEhcHx8ISFkKXx8KGRlbGV0ZSBlLnplcm9saW5lY29sb3IsZGVsZXRlIGUuemVyb2xpbmV3aWR0aCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliIjo3NzYsdGlueWNvbG9yMjo1NzJ9XSw4NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGwsYyx1PWEuY291bnRlckF4ZXN8fFtdLGY9YS5vdmVybGF5YWJsZUF4ZXN8fFtdLGg9YS5sZXR0ZXIscD1hLmdyaWQ7cCYmKHM9cC5fZG9tYWluc1toXVtwLl9heGlzTWFwW2UuX2lkXV0sbz1wLl9hbmNob3JzW2UuX2lkXSxzJiYobD1wW2grInNpZGUiXS5zcGxpdCgiICIpWzBdLGM9cC5kb21haW5baF1bInJpZ2h0Ij09PWx8fCJ0b3AiPT09bD8xOjBdKSkscz1zfHxbMCwxXSxvPW98fChuKHQucG9zaXRpb24pPyJmcmVlIjp1WzBdfHwiZnJlZSIpLGw9bHx8KCJ4Ij09PWg/ImJvdHRvbSI6ImxlZnQiKSxjPWN8fDAsImZyZWUiPT09aS5jb2VyY2UodCxlLHthbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZyZWUiXS5jb25jYXQodSksZGZsdDpvfX0sImFuY2hvciIpJiZyKCJwb3NpdGlvbiIsYyksaS5jb2VyY2UodCxlLHtzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6IngiPT09aD9bImJvdHRvbSIsInRvcCJdOlsibGVmdCIsInJpZ2h0Il0sZGZsdDpsfX0sInNpZGUiKTt2YXIgZD0hMTtpZihmLmxlbmd0aCYmKGQ9aS5jb2VyY2UodCxlLHtvdmVybGF5aW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExXS5jb25jYXQoZiksZGZsdDohMX19LCJvdmVybGF5aW5nIikpLCFkKXt2YXIgbT1yKCJkb21haW4iLHMpO21bMF0+bVsxXS0xLzQwOTYmJihlLmRvbWFpbj1zKSxpLm5vbmVPckFsbCh0LmRvbWFpbixlLmRvbWFpbixzKX1yZXR1cm4gcigibGF5ZXIiKSxlfX0seyIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDg0NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuRlJPTV9CTDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZvaWQgMD09PXImJihyPW5bdC5jb25zdHJhaW50b3dhcmR8fCJjZW50ZXIiXSk7dmFyIGk9W3QucjJsKHQucmFuZ2VbMF0pLHQucjJsKHQucmFuZ2VbMV0pXSxhPWlbMF0rKGlbMV0taVswXSkqcjt0LnJhbmdlPXQuX2lucHV0LnJhbmdlPVt0LmwycihhKyhpWzBdLWEpKmUpLHQubDJyKGErKGlbMV0tYSkqZSldLHQuc2V0U2NhbGUoKX19LHsiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0fV0sODQ3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInBvbHlib29sanMiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKS5kYXNoU3R5bGUsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5tYWtlRXZlbnREYXRhLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksdT1jLmZyZWVNb2RlLGY9Yy5yZWN0TW9kZSxoPWMuZHJhd01vZGUscD1jLm9wZW5Nb2RlLGQ9Yy5zZWxlY3RNb2RlLG09dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9kaXNwbGF5X291dGxpbmVzIiksZz10KCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiKS5oYW5kbGVFbGxpcHNlLHY9dCgiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiKSx5PXQoIi4uLy4uL2xpYiIpLHg9dCgiLi4vLi4vbGliL3BvbHlnb24iKSxiPXQoIi4uLy4uL2xpYi90aHJvdHRsZSIpLF89dCgiLi9heGlzX2lkcyIpLmdldEZyb21JZCx3PXQoIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyIpLFQ9dCgiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiKS5yZWRyYXdSZWdsVHJhY2VzLGs9dCgiLi9jb25zdGFudHMiKSxBPWsuTUlOU0VMRUNULE09eC5maWx0ZXIsUz14LnRlc3RlcixFPXQoIi4vaGFuZGxlX291dGxpbmUiKS5jbGVhclNlbGVjdCxMPXQoIi4vaGVscGVycyIpLEM9TC5wMnIsUD1MLmF4VmFsdWUsST1MLmdldFRyYW5zZm9ybTtmdW5jdGlvbiBPKHQsZSxyLG4saSxhLG8pe3ZhciBzLGwsYyx1LGYsaCxkLGcsdix5PWUuX2hvdmVyZGF0YSx4PWUuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlLmluZGV4T2YoImV2ZW50Iik+LTEsYj1bXTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmQXJyYXkuaXNBcnJheSh0KSYmITAhPT10WzBdLmhvdmVyT25Cb3h9KHkpKXtGKHQsZSxhKTt2YXIgXz1mdW5jdGlvbih0LGUpe3ZhciByLG4saT10WzBdLGE9LTEsbz1bXTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKHI9ZVtuXSxpLmZ1bGxEYXRhLl9leHBhbmRlZEluZGV4PT09ci5jZFswXS50cmFjZS5fZXhwYW5kZWRJbmRleCl7aWYoITA9PT1pLmhvdmVyT25Cb3gpYnJlYWs7dm9pZCAwIT09aS5wb2ludE51bWJlcj9hPWkucG9pbnROdW1iZXI6dm9pZCAwIT09aS5iaW5OdW1iZXImJihhPWkuYmluTnVtYmVyLG89aS5wb2ludE51bWJlcnMpO2JyZWFrfXJldHVybntwb2ludE51bWJlcjphLHBvaW50TnVtYmVyczpvLHNlYXJjaEluZm86cn19KHkscz1OKGUscixuLGkpKTtpZihfLnBvaW50TnVtYmVycy5sZW5ndGg+MD9mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPVtdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspKHI9dFtpXSkuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMmJnIuY2RbMF0udHJhY2Uuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPjAmJmEucHVzaChyKTtpZigxPT09YS5sZW5ndGgmJmFbMF09PT1lLnNlYXJjaEluZm8mJihuPWUuc2VhcmNoSW5mby5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMubGVuZ3RoPT09ZS5wb2ludE51bWJlcnMubGVuZ3RoKXtmb3IoaT0wO2k8ZS5wb2ludE51bWJlcnMubGVuZ3RoO2krKylpZihuLnNlbGVjdGVkcG9pbnRzLmluZGV4T2YoZS5wb2ludE51bWJlcnNbaV0pPDApcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHMsXyk6ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MDtmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGU9dFtuXSwocj1lLmNkWzBdLnRyYWNlKS5zZWxlY3RlZHBvaW50cyl7aWYoci5zZWxlY3RlZHBvaW50cy5sZW5ndGg+MSlyZXR1cm4hMTtpZigoaSs9ci5zZWxlY3RlZHBvaW50cy5sZW5ndGgpPjEpcmV0dXJuITF9cmV0dXJuIDE9PT1pfShzKSYmKGg9aihfKSkpe2ZvcihvJiZvLnJlbW92ZSgpLHY9MDt2PHMubGVuZ3RoO3YrKykobD1zW3ZdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyhsLCExKTtVKGUscyksQihhKSx4JiZlLmVtaXQoInBsb3RseV9kZXNlbGVjdCIsbnVsbCl9ZWxzZXtmb3IoZD10LnNoaWZ0S2V5JiYodm9pZCAwIT09aD9oOmooXykpLGM9ZnVuY3Rpb24odCxlLHIpe3JldHVybntwb2ludE51bWJlcjp0LHNlYXJjaEluZm86ZSxzdWJ0cmFjdDpyfX0oXy5wb2ludE51bWJlcixfLnNlYXJjaEluZm8sZCksdT1SKGEuc2VsZWN0aW9uRGVmcy5jb25jYXQoW2NdKSksdj0wO3Y8cy5sZW5ndGg7disrKWlmKGY9VihzW3ZdLl9tb2R1bGUuc2VsZWN0UG9pbnRzKHNbdl0sdSksc1t2XSksYi5sZW5ndGgpZm9yKHZhciB3PTA7dzxmLmxlbmd0aDt3KyspYi5wdXNoKGZbd10pO2Vsc2UgYj1mO2lmKFUoZSxzLGc9e3BvaW50czpifSksYyYmYSYmYS5zZWxlY3Rpb25EZWZzLnB1c2goYyksbyl7dmFyIFQ9YS5tZXJnZWRQb2x5Z29ucyxrPXAoYS5kcmFnbW9kZSk7bShIKFQsayksbyxhKX14JiZlLmVtaXQoInBsb3RseV9zZWxlY3RlZCIsZyl9fX1mdW5jdGlvbiB6KHQpe3JldHVybiJwb2ludE51bWJlciJpbiB0JiYic2VhcmNoSW5mbyJpbiB0fWZ1bmN0aW9uIEQodCl7cmV0dXJue3htaW46MCx4bWF4OjAseW1pbjowLHltYXg6MCxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5zZWFyY2hJbmZvLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4O3JldHVybiBpLmNkWzBdLnRyYWNlLl9leHBhbmRlZEluZGV4PT09YSYmbj09PXQucG9pbnROdW1iZXJ9LGlzUmVjdDohMSxkZWdlbmVyYXRlOiExLHN1YnRyYWN0OnQuc3VidHJhY3R9fWZ1bmN0aW9uIFIodCl7Zm9yKHZhciBlPVtdLHI9eih0WzBdKT8wOnRbMF1bMF1bMF0sbj1yLGk9eih0WzBdKT8wOnRbMF1bMF1bMV0sYT1pLG89MDtvPHQubGVuZ3RoO28rKylpZih6KHRbb10pKWUucHVzaChEKHRbb10pKTtlbHNle3ZhciBzPXgudGVzdGVyKHRbb10pO3Muc3VidHJhY3Q9dFtvXS5zdWJ0cmFjdCxlLnB1c2gocykscj1NYXRoLm1pbihyLHMueG1pbiksbj1NYXRoLm1heChuLHMueG1heCksaT1NYXRoLm1pbihpLHMueW1pbiksYT1NYXRoLm1heChhLHMueW1heCl9cmV0dXJue3htaW46cix4bWF4Om4seW1pbjppLHltYXg6YSxwdHM6W10sY29udGFpbnM6ZnVuY3Rpb24odCxyLG4saSl7Zm9yKHZhciBhPSExLG89MDtvPGUubGVuZ3RoO28rKyllW29dLmNvbnRhaW5zKHQscixuLGkpJiYoYT0hMT09PWVbb10uc3VidHJhY3QpO3JldHVybiBhfSxpc1JlY3Q6ITEsZGVnZW5lcmF0ZTohMX19ZnVuY3Rpb24gRih0LGUscil7ZS5fZnVsbExheW91dC5fZHJhd2luZz0hMTt2YXIgbj1lLl9mdWxsTGF5b3V0LGk9ci5wbG90aW5mbyxhPXIuZHJhZ21vZGUsbz1uLl9sYXN0U2VsZWN0ZWRTdWJwbG90JiZuLl9sYXN0U2VsZWN0ZWRTdWJwbG90PT09aS5pZCxzPSh0LnNoaWZ0S2V5fHx0LmFsdEtleSkmJiEoaChhKSYmcChhKSk7byYmcyYmaS5zZWxlY3Rpb24mJmkuc2VsZWN0aW9uLnNlbGVjdGlvbkRlZnMmJiFyLnNlbGVjdGlvbkRlZnM/KHIuc2VsZWN0aW9uRGVmcz1pLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzLHIubWVyZ2VkUG9seWdvbnM9aS5zZWxlY3Rpb24ubWVyZ2VkUG9seWdvbnMpOnMmJmkuc2VsZWN0aW9ufHxCKHIpLG98fChFKGUpLG4uX2xhc3RTZWxlY3RlZFN1YnBsb3Q9aS5pZCl9ZnVuY3Rpb24gQih0KXt2YXIgZT10LmRyYWdtb2RlLHI9dC5wbG90aW5mbyxuPXQuZ2Q7aWYobi5fZnVsbExheW91dC5fYWN0aXZlU2hhcGVJbmRleD49MCYmbi5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKG4pLGgoZSkpe3ZhciBhPW4uX2Z1bGxMYXlvdXQuX3pvb21sYXllci5zZWxlY3RBbGwoIi5zZWxlY3Qtb3V0bGluZS0iK3IuaWQpO2lmKGEmJm4uX2Z1bGxMYXlvdXQuX2RyYXdpbmcpe3ZhciBvPXYoYSx0KTtvJiZpLmNhbGwoIl9ndWlSZWxheW91dCIsbix7c2hhcGVzOm99KSxuLl9mdWxsTGF5b3V0Ll9kcmF3aW5nPSExfX1yLnNlbGVjdGlvbj17fSxyLnNlbGVjdGlvbi5zZWxlY3Rpb25EZWZzPXQuc2VsZWN0aW9uRGVmcz1bXSxyLnNlbGVjdGlvbi5tZXJnZWRQb2x5Z29ucz10Lm1lcmdlZFBvbHlnb25zPVtdfWZ1bmN0aW9uIE4odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2lkfSkpLGM9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9pZH0pKTtmb3Iobz0wO288dC5jYWxjZGF0YS5sZW5ndGg7bysrKWlmKCEwPT09KGE9KGk9dC5jYWxjZGF0YVtvXSlbMF0udHJhY2UpLnZpc2libGUmJmEuX21vZHVsZSYmYS5fbW9kdWxlLnNlbGVjdFBvaW50cylpZighbnx8YS5zdWJwbG90IT09biYmYS5nZW8hPT1uKWlmKCJzcGxvbSI9PT1hLnR5cGUmJmEuX3hheGVzW2xbMF1dJiZhLl95YXhlc1tjWzBdXSl7dmFyIHU9aChhLl9tb2R1bGUsaSxlWzBdLHJbMF0pO3Uuc2NlbmU9dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbYS51aWRdLHMucHVzaCh1KX1lbHNlIGlmKCJzYW5rZXkiPT09YS50eXBlKXt2YXIgZj1oKGEuX21vZHVsZSxpLGVbMF0sclswXSk7cy5wdXNoKGYpfWVsc2V7aWYoLTE9PT1sLmluZGV4T2YoYS54YXhpcykpY29udGludWU7aWYoLTE9PT1jLmluZGV4T2YoYS55YXhpcykpY29udGludWU7cy5wdXNoKGgoYS5fbW9kdWxlLGksXyh0LGEueGF4aXMpLF8odCxhLnlheGlzKSkpfWVsc2Ugcy5wdXNoKGgoYS5fbW9kdWxlLGksZVswXSxyWzBdKSk7cmV0dXJuIHM7ZnVuY3Rpb24gaCh0LGUscixuKXtyZXR1cm57X21vZHVsZTp0LGNkOmUseGF4aXM6cix5YXhpczpufX19ZnVuY3Rpb24gaih0KXt2YXIgZT10LnNlYXJjaEluZm8uY2RbMF0udHJhY2Uscj10LnBvaW50TnVtYmVyLG49dC5wb2ludE51bWJlcnMsaT1uLmxlbmd0aD4wP25bMF06cjtyZXR1cm4hIWUuc2VsZWN0ZWRwb2ludHMmJmUuc2VsZWN0ZWRwb2ludHMuaW5kZXhPZihpKT4tMX1mdW5jdGlvbiBVKHQsZSxyKXt2YXIgbixhLG8scztmb3Iobj0wO248ZS5sZW5ndGg7bisrKXt2YXIgbD1lW25dLmNkWzBdLnRyYWNlLl9mdWxsSW5wdXQsYz10Ll9mdWxsTGF5b3V0Ll90cmFjZVByZUdVSVtsLnVpZF18fHt9O3ZvaWQgMD09PWMuc2VsZWN0ZWRwb2ludHMmJihjLnNlbGVjdGVkcG9pbnRzPWwuX2lucHV0LnNlbGVjdGVkcG9pbnRzfHxudWxsKX1pZihyKXt2YXIgdT1yLnBvaW50c3x8W107Zm9yKG49MDtuPGUubGVuZ3RoO24rKykocz1lW25dLmNkWzBdLnRyYWNlKS5faW5wdXQuc2VsZWN0ZWRwb2ludHM9cy5fZnVsbElucHV0LnNlbGVjdGVkcG9pbnRzPVtdLHMuX2Z1bGxJbnB1dCE9PXMmJihzLnNlbGVjdGVkcG9pbnRzPVtdKTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgZj11W25dLGg9Zi5kYXRhLHA9Zi5mdWxsRGF0YTtmLnBvaW50SW5kaWNlcz8oW10ucHVzaC5hcHBseShoLnNlbGVjdGVkcG9pbnRzLGYucG9pbnRJbmRpY2VzKSxzLl9mdWxsSW5wdXQhPT1zJiZbXS5wdXNoLmFwcGx5KHAuc2VsZWN0ZWRwb2ludHMsZi5wb2ludEluZGljZXMpKTooaC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkscy5fZnVsbElucHV0IT09cyYmcC5zZWxlY3RlZHBvaW50cy5wdXNoKGYucG9pbnRJbmRleCkpfX1lbHNlIGZvcihuPTA7bjxlLmxlbmd0aDtuKyspZGVsZXRlKHM9ZVtuXS5jZFswXS50cmFjZSkuc2VsZWN0ZWRwb2ludHMsZGVsZXRlIHMuX2lucHV0LnNlbGVjdGVkcG9pbnRzLHMuX2Z1bGxJbnB1dCE9PXMmJmRlbGV0ZSBzLl9mdWxsSW5wdXQuc2VsZWN0ZWRwb2ludHM7dmFyIGQ9ITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKyl7cz0obz0oYT1lW25dKS5jZClbMF0udHJhY2UsaS50cmFjZUlzKHMsInJlZ2wiKSYmKGQ9ITApO3ZhciBtPWEuX21vZHVsZSxnPW0uc3R5bGVPblNlbGVjdHx8bS5zdHlsZTtnJiYoZyh0LG8sb1swXS5ub2RlMyksb1swXS5ub2RlUmFuZ2VQbG90MyYmZyh0LG8sb1swXS5ub2RlUmFuZ2VQbG90MykpfWQmJih3KHQpLFQodCkpfWZ1bmN0aW9uIFYodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj1lLmNkLG49ZS5jZFswXS50cmFjZSxpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1sKHRbaV0sbixyKTtyZXR1cm4gdH1mdW5jdGlvbiBIKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7cltuXT1bXTtmb3IodmFyIGk9MDtpPHRbbl0ubGVuZ3RoO2krKyl7cltuXVtpXT1bXSxyW25dW2ldWzBdPWk/IkwiOiJNIjtmb3IodmFyIGE9MDthPHRbbl1baV0ubGVuZ3RoO2ErKylyW25dW2ldLnB1c2godFtuXVtpXVthXSl9ZXx8cltuXS5wdXNoKFsiWiIscltuXVswXVsxXSxyW25dWzBdWzJdXSl9cmV0dXJuIHJ9ZS5leHBvcnRzPXtwcmVwU2VsZWN0OmZ1bmN0aW9uKHQsZSxyLGksbCl7dmFyIGM9dShsKSx2PWYobCkseD1wKGwpLF89aChsKSx3PWQobCksVD0iZHJhd2NpcmNsZSI9PT1sLEU9ImRyYXdsaW5lIj09PWx8fFQsTD1pLmdkLHo9TC5fZnVsbExheW91dCxEPXouX3pvb21sYXllcixqPWkuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxxPWkucGxvdGluZm8sRz1JKHEpLFk9ZS1qLmxlZnQsVz1yLWoudG9wO3ouX2NhbGNJbnZlcnNlVHJhbnNmb3JtKEwpO3ZhciBYPXkuYXBwbHkzRFRyYW5zZm9ybSh6Ll9pbnZUcmFuc2Zvcm0pKFksVyk7WT1YWzBdLFc9WFsxXTt2YXIgWixKLEssUSwkLHR0LGV0LHJ0PXouX2ludlNjYWxlWCxudD16Ll9pbnZTY2FsZVksaXQ9WSxhdD1XLG90PSJNIitZKyIsIitXLHN0PWkueGF4ZXNbMF0uX2xlbmd0aCxsdD1pLnlheGVzWzBdLl9sZW5ndGgsY3Q9aS54YXhlcy5jb25jYXQoaS55YXhlcyksdXQ9dC5hbHRLZXkmJiEoaChsKSYmeCk7Rih0LEwsaSksYyYmKFo9TShbW1ksV11dLGsuQkVORFBYKSk7dmFyIGZ0PUQuc2VsZWN0QWxsKCJwYXRoLnNlbGVjdC1vdXRsaW5lLSIrcS5pZCkuZGF0YShfP1swXTpbMSwyXSksaHQ9ei5uZXdzaGFwZTtmdC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInNlbGVjdC1vdXRsaW5lIHNlbGVjdC1vdXRsaW5lLSIrdCsiIHNlbGVjdC1vdXRsaW5lLSIrcS5pZH0pKS5zdHlsZShfP3tvcGFjaXR5Omh0Lm9wYWNpdHkvMixmaWxsOng/dm9pZCAwOmh0LmZpbGxjb2xvcixzdHJva2U6aHQubGluZS5jb2xvciwic3Ryb2tlLWRhc2hhcnJheSI6YShodC5saW5lLmRhc2gsaHQubGluZS53aWR0aCksInN0cm9rZS13aWR0aCI6aHQubGluZS53aWR0aCsicHgifTp7fSkuYXR0cigiZmlsbC1ydWxlIixodC5maWxscnVsZSkuY2xhc3NlZCgiY3Vyc29yLW1vdmUiLCEhXykuYXR0cigidHJhbnNmb3JtIixHKS5hdHRyKCJkIixvdCsiWiIpO3ZhciBwdCxkdD1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuc3R5bGUoe2ZpbGw6by5iYWNrZ3JvdW5kLHN0cm9rZTpvLmRlZmF1bHRMaW5lLCJzdHJva2Utd2lkdGgiOjF9KS5hdHRyKCJ0cmFuc2Zvcm0iLEcpLmF0dHIoImQiLCJNMCwwWiIpLG10PXouX3VpZCtrLlNFTEVDVElELGd0PVtdLHZ0PU4oTCxpLnhheGVzLGkueWF4ZXMsaS5zdWJwbG90KTtmdW5jdGlvbiB5dCh0LGUpe3JldHVybiB0LWV9cHQ9cS5maWxsUmFuZ2VJdGVtcz9xLmZpbGxSYW5nZUl0ZW1zOnY/ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhbmdlPXt9O2ZvcigkPTA7JDxjdC5sZW5ndGg7JCsrKXt2YXIgbj1jdFskXSxpPW4uX2lkLmNoYXJBdCgwKTtyW24uX2lkXT1bQyhuLGVbaSsibWluIl0pLEMobixlW2krIm1heCJdKV0uc29ydCh5dCl9fTpmdW5jdGlvbih0LGUscil7dmFyIG49dC5sYXNzb1BvaW50cz17fTtmb3IoJD0wOyQ8Y3QubGVuZ3RoOyQrKyl7dmFyIGk9Y3RbJF07bltpLl9pZF09ci5maWx0ZXJlZC5tYXAoUChpKSl9fSxpLm1vdmVGbj1mdW5jdGlvbih0LGUpe2l0PU1hdGgubWF4KDAsTWF0aC5taW4oc3QscnQqdCtZKSksYXQ9TWF0aC5tYXgoMCxNYXRoLm1pbihsdCxudCplK1cpKTt2YXIgcj1NYXRoLmFicyhpdC1ZKSxhPU1hdGguYWJzKGF0LVcpO2lmKHYpe3ZhciBvLHMsbDtpZih3KXt2YXIgdT16LnNlbGVjdGRpcmVjdGlvbjtzd2l0Y2gobz0iYW55Ij09PXU/YTxNYXRoLm1pbiguNipyLEEpPyJoIjpyPE1hdGgubWluKC42KmEsQSk/InYiOiJkIjp1KXtjYXNlImgiOnM9VD9sdC8yOjAsbD1sdDticmVhaztjYXNlInYiOnM9VD9zdC8yOjAsbD1zdH19aWYoXylzd2l0Y2goei5uZXdzaGFwZS5kcmF3ZGlyZWN0aW9uKXtjYXNlInZlcnRpY2FsIjpvPSJoIixzPVQ/bHQvMjowLGw9bHQ7YnJlYWs7Y2FzZSJob3Jpem9udGFsIjpvPSJ2IixzPVQ/c3QvMjowLGw9c3Q7YnJlYWs7Y2FzZSJvcnRobyI6cjxhPyhvPSJoIixzPVcsbD1hdCk6KG89InYiLHM9WSxsPWl0KTticmVhaztkZWZhdWx0Om89ImQifSJoIj09PW8/KChRPUU/ZyhULFtpdCxzXSxbaXQsbF0pOltbWSxzXSxbWSxsXSxbaXQsbF0sW2l0LHNdXSkueG1pbj1FP2l0Ok1hdGgubWluKFksaXQpLFEueG1heD1FP2l0Ok1hdGgubWF4KFksaXQpLFEueW1pbj1NYXRoLm1pbihzLGwpLFEueW1heD1NYXRoLm1heChzLGwpLGR0LmF0dHIoImQiLCJNIitRLnhtaW4rIiwiKyhXLUEpKyJoLTR2IisyKkErImg0Wk0iKyhRLnhtYXgtMSkrIiwiKyhXLUEpKyJoNHYiKzIqQSsiaC00WiIpKToidiI9PT1vPygoUT1FP2coVCxbcyxhdF0sW2wsYXRdKTpbW3MsV10sW3MsYXRdLFtsLGF0XSxbbCxXXV0pLnhtaW49TWF0aC5taW4ocyxsKSxRLnhtYXg9TWF0aC5tYXgocyxsKSxRLnltaW49RT9hdDpNYXRoLm1pbihXLGF0KSxRLnltYXg9RT9hdDpNYXRoLm1heChXLGF0KSxkdC5hdHRyKCJkIiwiTSIrKFktQSkrIiwiK1EueW1pbisidi00aCIrMipBKyJ2NFpNIisoWS1BKSsiLCIrKFEueW1heC0xKSsidjRoIisyKkErInYtNFoiKSk6ImQiPT09byYmKChRPUU/ZyhULFtZLFddLFtpdCxhdF0pOltbWSxXXSxbWSxhdF0sW2l0LGF0XSxbaXQsV11dKS54bWluPU1hdGgubWluKFksaXQpLFEueG1heD1NYXRoLm1heChZLGl0KSxRLnltaW49TWF0aC5taW4oVyxhdCksUS55bWF4PU1hdGgubWF4KFcsYXQpLGR0LmF0dHIoImQiLCJNMCwwWiIpKX1lbHNlIGMmJihaLmFkZFB0KFtpdCxhdF0pLFE9Wi5maWx0ZXJlZCk7aS5zZWxlY3Rpb25EZWZzJiZpLnNlbGVjdGlvbkRlZnMubGVuZ3RoPyhLPWZ1bmN0aW9uKHQsZSxyKXtpZihyKXJldHVybiBuLmRpZmZlcmVuY2Uoe3JlZ2lvbnM6dCxpbnZlcnRlZDohMX0se3JlZ2lvbnM6W2VdLGludmVydGVkOiExfSkucmVnaW9ucztyZXR1cm4gbi51bmlvbih7cmVnaW9uczp0LGludmVydGVkOiExfSx7cmVnaW9uczpbZV0saW52ZXJ0ZWQ6ITF9KS5yZWdpb25zfShpLm1lcmdlZFBvbHlnb25zLFEsdXQpLFEuc3VidHJhY3Q9dXQsSj1SKGkuc2VsZWN0aW9uRGVmcy5jb25jYXQoW1FdKSkpOihLPVtRXSxKPVMoUSkpLG0oSChLLHgpLGZ0LGkpLHcmJmIudGhyb3R0bGUobXQsay5TRUxFQ1RERUxBWSwoZnVuY3Rpb24oKXt2YXIgdDtndD1bXTt2YXIgZSxyPVtdO2ZvcigkPTA7JDx2dC5sZW5ndGg7JCsrKWlmKGU9KHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCxKKSxyLnB1c2goZSksdD1WKGUsdHQpLGd0Lmxlbmd0aClmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylndC5wdXNoKHRbbl0pO2Vsc2UgZ3Q9dDtVKEwsdnQsZXQ9e3BvaW50czpndH0pLHB0KGV0LFEsWiksaS5nZC5lbWl0KCJwbG90bHlfc2VsZWN0aW5nIixldCl9KSl9LGkuY2xpY2tGbj1mdW5jdGlvbih0LGUpe2lmKGR0LnJlbW92ZSgpLEwuX2Z1bGxMYXlvdXQuX2FjdGl2ZVNoYXBlSW5kZXg+PTApTC5fZnVsbExheW91dC5fZGVhY3RpdmF0ZVNoYXBlKEwpO2Vsc2UgaWYoIV8pe3ZhciByPXouY2xpY2ttb2RlO2IuZG9uZShtdCkudGhlbigoZnVuY3Rpb24oKXtpZihiLmNsZWFyKG10KSwyPT09dCl7Zm9yKGZ0LnJlbW92ZSgpLCQ9MDskPHZ0Lmxlbmd0aDskKyspKHR0PXZ0WyRdKS5fbW9kdWxlLnNlbGVjdFBvaW50cyh0dCwhMSk7VShMLHZ0KSxCKGkpLEwuZW1pdCgicGxvdGx5X2Rlc2VsZWN0IixudWxsKX1lbHNlIHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJk8oZSxMLGkueGF4ZXMsaS55YXhlcyxpLnN1YnBsb3QsaSxmdCksImV2ZW50Ij09PXImJkwuZW1pdCgicGxvdGx5X3NlbGVjdGVkIix2b2lkIDApO3MuY2xpY2soTCxlKX0pKS5jYXRjaCh5LmVycm9yKX19LGkuZG9uZUZuPWZ1bmN0aW9uKCl7ZHQucmVtb3ZlKCksYi5kb25lKG10KS50aGVuKChmdW5jdGlvbigpe2IuY2xlYXIobXQpLGkuZ2QuZW1pdCgicGxvdGx5X3NlbGVjdGVkIixldCksUSYmaS5zZWxlY3Rpb25EZWZzJiYoUS5zdWJ0cmFjdD11dCxpLnNlbGVjdGlvbkRlZnMucHVzaChRKSxpLm1lcmdlZFBvbHlnb25zLmxlbmd0aD0wLFtdLnB1c2guYXBwbHkoaS5tZXJnZWRQb2x5Z29ucyxLKSksaS5kb25lRm5Db21wbGV0ZWQmJmkuZG9uZUZuQ29tcGxldGVkKGd0KX0pKS5jYXRjaCh5LmVycm9yKSxfJiZCKGkpfX0sY2xlYXJTZWxlY3Q6RSxjbGVhclNlbGVjdGlvbnNDYWNoZTpCLHNlbGVjdE9uQ2xpY2s6T319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzUsIi4uLy4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvZGlzcGxheV9vdXRsaW5lcyI6NzI3LCIuLi8uLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2hlbHBlcnMiOjcyOCwiLi4vLi4vY29tcG9uZW50cy9zaGFwZXMvZHJhd19uZXdzaGFwZS9uZXdzaGFwZXMiOjcyOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9jbGVhcl9nbF9jYW52YXNlcyI6NzYwLCIuLi8uLi9saWIvcG9seWdvbiI6Nzg4LCIuLi8uLi9saWIvdGhyb3R0bGUiOjgwMywiLi4vLi4vcGxvdF9hcGkvc3Vicm91dGluZXMiOjgxNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9heGlzX2lkcyI6ODMxLCIuL2NvbnN0YW50cyI6ODM0LCIuL2hhbmRsZV9vdXRsaW5lIjo4MzgsIi4vaGVscGVycyI6ODM5LHBvbHlib29sanM6NDgwfV0sODQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLXRpbWUtZm9ybWF0IikudXRjRm9ybWF0LGE9dCgiLi4vLi4vbGliIiksbz1hLm51bWJlckZvcm1hdCxzPXQoImZhc3QtaXNudW1lcmljIiksbD1hLmNsZWFuTnVtYmVyLGM9YS5tczJEYXRlVGltZSx1PWEuZGF0ZVRpbWUybXMsZj1hLmVuc3VyZU51bWJlcixoPWEuaXNBcnJheU9yVHlwZWRBcnJheSxwPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxkPXAuRlBfU0FGRSxtPXAuQkFETlVNLGc9cC5MT0dfQ0xJUCx2PXAuT05FV0VFSyx5PXAuT05FREFZLHg9cC5PTkVIT1VSLGI9cC5PTkVNSU4sXz1wLk9ORVNFQyx3PXQoIi4vYXhpc19pZHMiKSxUPXQoIi4vY29uc3RhbnRzIiksaz1ULkhPVVJfUEFUVEVSTixBPVQuV0VFS0RBWV9QQVRURVJOO2Z1bmN0aW9uIE0odCl7cmV0dXJuIE1hdGgucG93KDEwLHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuIG51bGwhPXR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZT1lfHx7fTt2YXIgcj10Ll9pZHx8IngiLHA9ci5jaGFyQXQoMCk7ZnVuY3Rpb24gRShlLHIpe2lmKGU+MClyZXR1cm4gTWF0aC5sb2coZSkvTWF0aC5MTjEwO2lmKGU8PTAmJnImJnQucmFuZ2UmJjI9PT10LnJhbmdlLmxlbmd0aCl7dmFyIG49dC5yYW5nZVswXSxpPXQucmFuZ2VbMV07cmV0dXJuLjUqKG4raS0yKmcqTWF0aC5hYnMobi1pKSl9cmV0dXJuIG19ZnVuY3Rpb24gTChlLHIsbixpKXtpZigoaXx8e30pLm1zVVRDJiZzKGUpKXJldHVybitlO3ZhciBvPXUoZSxufHx0LmNhbGVuZGFyKTtpZihvPT09bSl7aWYoIXMoZSkpcmV0dXJuIG07ZT0rZTt2YXIgbD1NYXRoLmZsb29yKDEwKmEubW9kKGUrLjA1LDEpKSxjPU1hdGgucm91bmQoZS1sLzEwKTtvPXUobmV3IERhdGUoYykpK2wvMTB9cmV0dXJuIG99ZnVuY3Rpb24gQyhlLHIsbil7cmV0dXJuIGMoZSxyLG58fHQuY2FsZW5kYXIpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuIHQuX2NhdGVnb3JpZXNbTWF0aC5yb3VuZChlKV19ZnVuY3Rpb24gSShlKXtpZihTKGUpKXtpZih2b2lkIDA9PT10Ll9jYXRlZ29yaWVzTWFwJiYodC5fY2F0ZWdvcmllc01hcD17fSksdm9pZCAwIT09dC5fY2F0ZWdvcmllc01hcFtlXSlyZXR1cm4gdC5fY2F0ZWdvcmllc01hcFtlXTt0Ll9jYXRlZ29yaWVzLnB1c2goIm51bWJlciI9PXR5cGVvZiBlP1N0cmluZyhlKTplKTt2YXIgcj10Ll9jYXRlZ29yaWVzLmxlbmd0aC0xO3JldHVybiB0Ll9jYXRlZ29yaWVzTWFwW2VdPXIscn1yZXR1cm4gbX1mdW5jdGlvbiBPKGUpe2lmKHQuX2NhdGVnb3JpZXNNYXApcmV0dXJuIHQuX2NhdGVnb3JpZXNNYXBbZV19ZnVuY3Rpb24geih0KXt2YXIgZT1PKHQpO3JldHVybiB2b2lkIDAhPT1lP2U6cyh0KT8rdDp2b2lkIDB9ZnVuY3Rpb24gRCh0KXtyZXR1cm4gcyh0KT8rdDpPKHQpfWZ1bmN0aW9uIFIodCxlLHIpe3JldHVybiBuLnJvdW5kKHIrZSp0LDIpfWZ1bmN0aW9uIEYodCxlLHIpe3JldHVybih0LXIpL2V9dmFyIEI9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSk/UihlLHQuX20sdC5fYik6bX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gRihlLHQuX20sdC5fYil9O2lmKHQucmFuZ2VicmVha3Mpe3ZhciBqPSJ5Ij09PXA7Qj1mdW5jdGlvbihlKXtpZighcyhlKSlyZXR1cm4gbTt2YXIgcj10Ll9yYW5nZWJyZWFrcy5sZW5ndGg7aWYoIXIpcmV0dXJuIFIoZSx0Ll9tLHQuX2IpO3ZhciBuPWo7dC5yYW5nZVswXT50LnJhbmdlWzFdJiYobj0hbik7Zm9yKHZhciBpPW4/LTE6MSxhPWkqZSxvPTAsbD0wO2w8cjtsKyspe3ZhciBjPWkqdC5fcmFuZ2VicmVha3NbbF0ubWluLHU9aSp0Ll9yYW5nZWJyZWFrc1tsXS5tYXg7aWYoYTxjKWJyZWFrO2lmKCEoYT51KSl7bz1hPChjK3UpLzI/bDpsKzE7YnJlYWt9bz1sKzF9dmFyIGY9dC5fQltvXXx8MDtyZXR1cm4gaXNGaW5pdGUoZik/UihlLHQuX20yLGYpOjB9LE49ZnVuY3Rpb24oZSl7dmFyIHI9dC5fcmFuZ2VicmVha3MubGVuZ3RoO2lmKCFyKXJldHVybiBGKGUsdC5fbSx0Ll9iKTtmb3IodmFyIG49MCxpPTA7aTxyJiYhKGU8dC5fcmFuZ2VicmVha3NbaV0ucG1pbik7aSsrKWU+dC5fcmFuZ2VicmVha3NbaV0ucG1heCYmKG49aSsxKTtyZXR1cm4gRihlLHQuX20yLHQuX0Jbbl0pfX10LmMybD0ibG9nIj09PXQudHlwZT9FOmYsdC5sMmM9ImxvZyI9PT10LnR5cGU/TTpmLHQubDJwPUIsdC5wMmw9Tix0LmMycD0ibG9nIj09PXQudHlwZT9mdW5jdGlvbih0LGUpe3JldHVybiBCKEUodCxlKSl9OkIsdC5wMmM9ImxvZyI9PT10LnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9Ok4sLTEhPT1bImxpbmVhciIsIi0iXS5pbmRleE9mKHQudHlwZSk/KHQuZDJyPXQucjJkPXQuZDJjPXQucjJjPXQuZDJsPXQucjJsPWwsdC5jMmQ9dC5jMnI9dC5sMmQ9dC5sMnI9Zix0LmQycD10LnIycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAobChlKSl9LHQucDJkPXQucDJyPU4sdC5jbGVhblBvcz1mKToibG9nIj09PXQudHlwZT8odC5kMnI9dC5kMmw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gRShsKHQpLGUpfSx0LnIyZD10LnIyYz1mdW5jdGlvbih0KXtyZXR1cm4gTShsKHQpKX0sdC5kMmM9dC5yMmw9bCx0LmMyZD10Lmwycj1mLHQuYzJyPUUsdC5sMmQ9TSx0LmQycD1mdW5jdGlvbihlLHIpe3JldHVybiB0LmwycCh0LmQycihlLHIpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIE0oTih0KSl9LHQucjJwPWZ1bmN0aW9uKGUpe3JldHVybiB0LmwycChsKGUpKX0sdC5wMnI9Tix0LmNsZWFuUG9zPWYpOiJkYXRlIj09PXQudHlwZT8odC5kMnI9dC5yMmQ9YS5pZGVudGl0eSx0LmQyYz10LnIyYz10LmQybD10LnIybD1MLHQuYzJkPXQuYzJyPXQubDJkPXQubDJyPUMsdC5kMnA9dC5yMnA9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0LmwycChMKGUsMCxuKSl9LHQucDJkPXQucDJyPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gQyhOKHQpLGUscil9LHQuY2xlYW5Qb3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuY2xlYW5EYXRlKGUsbSx0LmNhbGVuZGFyKX0pOiJjYXRlZ29yeSI9PT10LnR5cGU/KHQuZDJjPXQuZDJsPUksdC5yMmQ9dC5jMmQ9dC5sMmQ9UCx0LmQycj10LmQybF9ub2FkZD16LHQucjJjPWZ1bmN0aW9uKGUpe3ZhciByPUQoZSk7cmV0dXJuIHZvaWQgMCE9PXI/cjp0LmZyYWN0aW9uMnIoLjUpfSx0Lmwycj10LmMycj1mLHQucjJsPUQsdC5kMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQubDJwKHQucjJjKGUpKX0sdC5wMmQ9ZnVuY3Rpb24odCl7cmV0dXJuIFAoTih0KSl9LHQucjJwPXQuZDJwLHQucDJyPU4sdC5jbGVhblBvcz1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9KToibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJih0LnIyZD10LmMyZD10LmwyZD1QLHQuZDJyPXQuZDJsX25vYWRkPXosdC5yMmM9ZnVuY3Rpb24oZSl7dmFyIHI9eihlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZnJhY3Rpb24yciguNSl9LHQucjJjX2p1c3RfaW5kaWNlcz1PLHQubDJyPXQuYzJyPWYsdC5yMmw9eix0LmQycD1mdW5jdGlvbihlKXtyZXR1cm4gdC5sMnAodC5yMmMoZSkpfSx0LnAyZD1mdW5jdGlvbih0KXtyZXR1cm4gUChOKHQpKX0sdC5yMnA9dC5kMnAsdC5wMnI9Tix0LmNsZWFuUG9zPWZ1bmN0aW9uKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfHwic3RyaW5nIj09dHlwZW9mIHQmJiIiIT09dD90OmYodCl9LHQuc2V0dXBNdWx0aUNhdGVnb3J5PWZ1bmN0aW9uKG4pe3ZhciBpLG8scz10Ll90cmFjZUluZGljZXMsbD10Ll9tYXRjaEdyb3VwO2lmKGwmJjA9PT10Ll9jYXRlZ29yaWVzLmxlbmd0aClmb3IodmFyIGMgaW4gbClpZihjIT09cil7dmFyIHU9ZVt3LmlkMm5hbWUoYyldO3M9cy5jb25jYXQodS5fdHJhY2VJbmRpY2VzKX12YXIgZj1bWzAse31dLFswLHt9XV0sZD1bXTtmb3IoaT0wO2k8cy5sZW5ndGg7aSsrKXt2YXIgbT1uW3NbaV1dO2lmKHAgaW4gbSl7dmFyIGc9bVtwXSx2PW0uX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoZyk7aWYoaChnWzBdKSYmaChnWzFdKSlmb3Iobz0wO288djtvKyspe3ZhciB5PWdbMF1bb10seD1nWzFdW29dO1MoeSkmJlMoeCkmJihkLnB1c2goW3kseF0pLHkgaW4gZlswXVsxXXx8KGZbMF1bMV1beV09ZlswXVswXSsrKSx4IGluIGZbMV1bMV18fChmWzFdWzFdW3hdPWZbMV1bMF0rKykpfX19Zm9yKGQuc29ydCgoZnVuY3Rpb24odCxlKXt2YXIgcj1mWzBdWzFdLG49clt0WzBdXS1yW2VbMF1dO2lmKG4pcmV0dXJuIG47dmFyIGk9ZlsxXVsxXTtyZXR1cm4gaVt0WzFdXS1pW2VbMV1dfSkpLGk9MDtpPGQubGVuZ3RoO2krKylJKGRbaV0pfSksdC5mcmFjdGlvbjJyPWZ1bmN0aW9uKGUpe3ZhciByPXQucjJsKHQucmFuZ2VbMF0pLG49dC5yMmwodC5yYW5nZVsxXSk7cmV0dXJuIHQubDJyKHIrZSoobi1yKSl9LHQucjJmcmFjdGlvbj1mdW5jdGlvbihlKXt2YXIgcj10LnIybCh0LnJhbmdlWzBdKSxuPXQucjJsKHQucmFuZ2VbMV0pO3JldHVybih0LnIybChlKS1yKS8obi1yKX0sdC5jbGVhblJhbmdlPWZ1bmN0aW9uKGUscil7cnx8KHI9e30pLGV8fChlPSJyYW5nZSIpO3ZhciBuLGksbz1hLm5lc3RlZFByb3BlcnR5KHQsZSkuZ2V0KCk7aWYoaT0oaT0iZGF0ZSI9PT10LnR5cGU/YS5kZmx0UmFuZ2UodC5jYWxlbmRhcik6InkiPT09cD9ULkRGTFRSQU5HRVk6ci5kZmx0UmFuZ2V8fFQuREZMVFJBTkdFWCkuc2xpY2UoKSwidG96ZXJvIiE9PXQucmFuZ2Vtb2RlJiYibm9ubmVnYXRpdmUiIT09dC5yYW5nZW1vZGV8fChpWzBdPTApLG8mJjI9PT1vLmxlbmd0aClmb3IoImRhdGUiIT09dC50eXBlfHx0LmF1dG9yYW5nZXx8KG9bMF09YS5jbGVhbkRhdGUob1swXSxtLHQuY2FsZW5kYXIpLG9bMV09YS5jbGVhbkRhdGUob1sxXSxtLHQuY2FsZW5kYXIpKSxuPTA7bjwyO24rKylpZigiZGF0ZSI9PT10LnR5cGUpe2lmKCFhLmlzRGF0ZVRpbWUob1tuXSx0LmNhbGVuZGFyKSl7dFtlXT1pO2JyZWFrfWlmKHQucjJsKG9bMF0pPT09dC5yMmwob1sxXSkpe3ZhciBsPWEuY29uc3RyYWluKHQucjJsKG9bMF0pLGEuTUlOX01TKzFlMyxhLk1BWF9NUy0xZTMpO29bMF09dC5sMnIobC0xZTMpLG9bMV09dC5sMnIobCsxZTMpO2JyZWFrfX1lbHNle2lmKCFzKG9bbl0pKXtpZighcyhvWzEtbl0pKXt0W2VdPWk7YnJlYWt9b1tuXT1vWzEtbl0qKG4/MTA6LjEpfWlmKG9bbl08LWQ/b1tuXT0tZDpvW25dPmQmJihvW25dPWQpLG9bMF09PT1vWzFdKXt2YXIgYz1NYXRoLm1heCgxLE1hdGguYWJzKDFlLTYqb1swXSkpO29bMF0tPWMsb1sxXSs9Y319ZWxzZSBhLm5lc3RlZFByb3BlcnR5KHQsZSkuc2V0KGkpfSx0LnNldFNjYWxlPWZ1bmN0aW9uKHIpe3ZhciBuPWUuX3NpemU7aWYodC5vdmVybGF5aW5nKXt2YXIgaT13LmdldEZyb21JZCh7X2Z1bGxMYXlvdXQ6ZX0sdC5vdmVybGF5aW5nKTt0LmRvbWFpbj1pLmRvbWFpbn12YXIgYT1yJiZ0Ll9yPyJfciI6InJhbmdlIixvPXQuY2FsZW5kYXI7dC5jbGVhblJhbmdlKGEpO3ZhciBzLGwsYz10LnIybCh0W2FdWzBdLG8pLHU9dC5yMmwodFthXVsxXSxvKSxmPSJ5Ij09PXA7aWYoKGY/KHQuX29mZnNldD1uLnQrKDEtdC5kb21haW5bMV0pKm4uaCx0Ll9sZW5ndGg9bi5oKih0LmRvbWFpblsxXS10LmRvbWFpblswXSksdC5fbT10Ll9sZW5ndGgvKGMtdSksdC5fYj0tdC5fbSp1KToodC5fb2Zmc2V0PW4ubCt0LmRvbWFpblswXSpuLncsdC5fbGVuZ3RoPW4udyoodC5kb21haW5bMV0tdC5kb21haW5bMF0pLHQuX209dC5fbGVuZ3RoLyh1LWMpLHQuX2I9LXQuX20qYyksdC5fcmFuZ2VicmVha3M9W10sdC5fbEJyZWFrcz0wLHQuX20yPTAsdC5fQj1bXSx0LnJhbmdlYnJlYWtzKSYmKHQuX3JhbmdlYnJlYWtzPXQubG9jYXRlQnJlYWtzKE1hdGgubWluKGMsdSksTWF0aC5tYXgoYyx1KSksdC5fcmFuZ2VicmVha3MubGVuZ3RoKSl7Zm9yKHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9sQnJlYWtzKz1NYXRoLmFicyhsLm1heC1sLm1pbik7dmFyIGg9ZjtjPnUmJihoPSFoKSxoJiZ0Ll9yYW5nZWJyZWFrcy5yZXZlcnNlKCk7dmFyIGQ9aD8tMToxO2Zvcih0Ll9tMj1kKnQuX2xlbmd0aC8oTWF0aC5hYnModS1jKS10Ll9sQnJlYWtzKSx0Ll9CLnB1c2goLXQuX20yKihmP3U6YykpLHM9MDtzPHQuX3JhbmdlYnJlYWtzLmxlbmd0aDtzKyspbD10Ll9yYW5nZWJyZWFrc1tzXSx0Ll9CLnB1c2godC5fQlt0Ll9CLmxlbmd0aC0xXS1kKnQuX20yKihsLm1heC1sLm1pbikpO2ZvcihzPTA7czx0Ll9yYW5nZWJyZWFrcy5sZW5ndGg7cysrKShsPXQuX3JhbmdlYnJlYWtzW3NdKS5wbWluPUIobC5taW4pLGwucG1heD1CKGwubWF4KX1pZighaXNGaW5pdGUodC5fbSl8fCFpc0Zpbml0ZSh0Ll9iKXx8dC5fbGVuZ3RoPDApdGhyb3cgZS5fcmVwbG90dGluZz0hMSxuZXcgRXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggYXhpcyBzY2FsaW5nIil9LHQubWFza0JyZWFrcz1mdW5jdGlvbihlKXt2YXIgcixuLGksbyxzLGM9dC5yYW5nZWJyZWFrc3x8W107Yy5fY2FjaGVkUGF0dGVybnN8fChjLl9jYWNoZWRQYXR0ZXJucz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS5ib3VuZHM/YS5zaW1wbGVNYXAoZS5ib3VuZHMsZS5wYXR0ZXJuP2w6dC5kMmMpOm51bGx9KSkpLGMuX2NhY2hlZFZhbHVlc3x8KGMuX2NhY2hlZFZhbHVlcz1jLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZW5hYmxlZCYmZS52YWx1ZXM/YS5zaW1wbGVNYXAoZS52YWx1ZXMsdC5kMmMpLnNvcnQoYS5zb3J0ZXJBc2MpOm51bGx9KSkpO2Zvcih2YXIgdT0wO3U8Yy5sZW5ndGg7dSsrKXt2YXIgZj1jW3VdO2lmKGYuZW5hYmxlZClpZihmLmJvdW5kcyl7dmFyIGg9Zi5wYXR0ZXJuO3N3aXRjaChuPShyPWMuX2NhY2hlZFBhdHRlcm5zW3VdKVswXSxpPXJbMV0saCl7Y2FzZSBBOm89KHM9bmV3IERhdGUoZSkpLmdldFVUQ0RheSgpLG4+aSYmKGkrPTcsbzxuJiYobys9NykpO2JyZWFrO2Nhc2UgazpvPShzPW5ldyBEYXRlKGUpKS5nZXRVVENIb3VycygpKyhzLmdldFVUQ01pbnV0ZXMoKS82MCtzLmdldFVUQ1NlY29uZHMoKS8zNjAwK3MuZ2V0VVRDTWlsbGlzZWNvbmRzKCkvMzZlNSksbj5pJiYoaSs9MjQsbzxuJiYobys9MjQpKTticmVhaztjYXNlIiI6bz1lfWlmKG8+PW4mJm88aSlyZXR1cm4gbX1lbHNlIGZvcih2YXIgcD1jLl9jYWNoZWRWYWx1ZXNbdV0sZD0wO2Q8cC5sZW5ndGg7ZCsrKWlmKGk9KG49cFtkXSkrZi5kdmFsdWUsZT49biYmZTxpKXJldHVybiBtfXJldHVybiBlfSx0LmxvY2F0ZUJyZWFrcz1mdW5jdGlvbihlLHIpe3ZhciBuLGksbyxzLGM9W107aWYoIXQucmFuZ2VicmVha3MpcmV0dXJuIGM7dmFyIHU9dC5yYW5nZWJyZWFrcy5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQucGF0dGVybj09PUEmJmUucGF0dGVybj09PWs/LTE6ZS5wYXR0ZXJuPT09QSYmdC5wYXR0ZXJuPT09az8xOjB9KSksZj1mdW5jdGlvbih0LG4pe2lmKCh0PWEuY29uc3RyYWluKHQsZSxyKSkhPT0obj1hLmNvbnN0cmFpbihuLGUscikpKXtmb3IodmFyIGk9ITAsbz0wO288Yy5sZW5ndGg7bysrKXt2YXIgcz1jW29dO3Q8cy5tYXgmJm4+PXMubWluJiYodDxzLm1pbiYmKHMubWluPXQpLG4+cy5tYXgmJihzLm1heD1uKSxpPSExKX1pJiZjLnB1c2goe21pbjp0LG1heDpufSl9fTtmb3Iobj0wO248dS5sZW5ndGg7bisrKXt2YXIgaD11W25dO2lmKGguZW5hYmxlZClpZihoLmJvdW5kcyl7dmFyIHA9ZSxkPXI7aC5wYXR0ZXJuJiYocD1NYXRoLmZsb29yKHApKSxvPShpPWEuc2ltcGxlTWFwKGguYm91bmRzLGgucGF0dGVybj9sOnQucjJsKSlbMF0scz1pWzFdO3ZhciBtLGcsdz1uZXcgRGF0ZShwKTtzd2l0Y2goaC5wYXR0ZXJuKXtjYXNlIEE6Zz12LG09KHMtbysoczxvPzc6MCkpKnkscCs9byp5LSh3LmdldFVUQ0RheSgpKnkrdy5nZXRVVENIb3VycygpKngrdy5nZXRVVENNaW51dGVzKCkqYit3LmdldFVUQ1NlY29uZHMoKSpfK3cuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO2JyZWFrO2Nhc2UgazpnPXksbT0ocy1vKyhzPG8/MjQ6MCkpKngscCs9byp4LSh3LmdldFVUQ0hvdXJzKCkqeCt3LmdldFVUQ01pbnV0ZXMoKSpiK3cuZ2V0VVRDU2Vjb25kcygpKl8rdy5nZXRVVENNaWxsaXNlY29uZHMoKSk7YnJlYWs7ZGVmYXVsdDpwPU1hdGgubWluKGlbMF0saVsxXSksbT1nPShkPU1hdGgubWF4KGlbMF0saVsxXSkpLXB9Zm9yKHZhciBUPXA7VDxkO1QrPWcpZihULFQrbSl9ZWxzZSBmb3IodmFyIE09YS5zaW1wbGVNYXAoaC52YWx1ZXMsdC5kMmMpLFM9MDtTPE0ubGVuZ3RoO1MrKylmKG89TVtTXSxzPW8raC5kdmFsdWUpfXJldHVybiBjLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubWluLWUubWlufSkpLGN9LHQubWFrZUNhbGNkYXRhPWZ1bmN0aW9uKGUscixuKXt2YXIgaSxvLHMsbCxjPXQudHlwZSx1PSJkYXRlIj09PWMmJmVbcisiY2FsZW5kYXIiXTtpZihyIGluIGUpe2lmKGk9ZVtyXSxsPWUuX2xlbmd0aHx8YS5taW5Sb3dMZW5ndGgoaSksYS5pc1R5cGVkQXJyYXkoaSkmJigibGluZWFyIj09PWN8fCJsb2ciPT09Yykpe2lmKGw9PT1pLmxlbmd0aClyZXR1cm4gaTtpZihpLnN1YmFycmF5KXJldHVybiBpLnN1YmFycmF5KDAsbCl9aWYoIm11bHRpY2F0ZWdvcnkiPT09YylyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXt2YXIgaT0odFswXXx8W10pW25dLGE9KHRbMV18fFtdKVtuXTtyW25dPU8oW2ksYV0pfXJldHVybiByfShpLGwpO2ZvcihvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPXQuZDJjKGlbc10sMCx1LG4pfWVsc2V7dmFyIGY9cisiMCJpbiBlP3QuZDJjKGVbcisiMCJdLDAsdSk6MCxoPWVbImQiK3JdP051bWJlcihlWyJkIityXSk6MTtmb3IoaT1lW3t4OiJ5Iix5OiJ4In1bcl1dLGw9ZS5fbGVuZ3RofHxpLmxlbmd0aCxvPW5ldyBBcnJheShsKSxzPTA7czxsO3MrKylvW3NdPWYrcypofWlmKHQucmFuZ2VicmVha3MpZm9yKHM9MDtzPGw7cysrKW9bc109dC5tYXNrQnJlYWtzKG9bc10pO3JldHVybiBvfSx0LmlzVmFsaWRSYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoJiZzKHQucjJsKGVbMF0pKSYmcyh0LnIybChlWzFdKSl9LHQuaXNQdFdpdGhpblJhbmdlPWZ1bmN0aW9uKGUscil7dmFyIG49dC5jMmwoZVtwXSxudWxsLHIpLGk9dC5yMmwodC5yYW5nZVswXSksYT10LnIybCh0LnJhbmdlWzFdKTtyZXR1cm4gaTxhP2k8PW4mJm48PWE6YTw9biYmbjw9aX0sdC5fZW1wdHlDYXRlZ29yaWVzPWZ1bmN0aW9uKCl7dC5fY2F0ZWdvcmllcz1bXSx0Ll9jYXRlZ29yaWVzTWFwPXt9fSx0LmNsZWFyQ2FsYz1mdW5jdGlvbigpe3ZhciByPXQuX21hdGNoR3JvdXA7aWYocil7dmFyIG49bnVsbCxpPW51bGw7Zm9yKHZhciBhIGluIHIpe3ZhciBvPWVbdy5pZDJuYW1lKGEpXTtpZihvLl9jYXRlZ29yaWVzKXtuPW8uX2NhdGVnb3JpZXMsaT1vLl9jYXRlZ29yaWVzTWFwO2JyZWFrfX1uJiZpPyh0Ll9jYXRlZ29yaWVzPW4sdC5fY2F0ZWdvcmllc01hcD1pKTp0Ll9lbXB0eUNhdGVnb3JpZXMoKX1lbHNlIHQuX2VtcHR5Q2F0ZWdvcmllcygpO2lmKHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgcz0wO3M8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO3MrKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW3NdKX0sdC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcz1mdW5jdGlvbigpe3ZhciBuPVtdO2lmKHQuX2VtcHR5Q2F0ZWdvcmllcygpLHQuX2luaXRpYWxDYXRlZ29yaWVzKWZvcih2YXIgaT0wO2k8dC5faW5pdGlhbENhdGVnb3JpZXMubGVuZ3RoO2krKylJKHQuX2luaXRpYWxDYXRlZ29yaWVzW2ldKTtuPW4uY29uY2F0KHQuX3RyYWNlSW5kaWNlcyk7dmFyIGE9dC5fbWF0Y2hHcm91cDtmb3IodmFyIG8gaW4gYSlpZihyIT09byl7dmFyIHM9ZVt3LmlkMm5hbWUobyldO3MuX2NhdGVnb3JpZXM9dC5fY2F0ZWdvcmllcyxzLl9jYXRlZ29yaWVzTWFwPXQuX2NhdGVnb3JpZXNNYXAsbj1uLmNvbmNhdChzLl90cmFjZUluZGljZXMpfXJldHVybiBufTt2YXIgVT1lLl9kM2xvY2FsZTsiZGF0ZSI9PT10LnR5cGUmJih0Ll9kYXRlRm9ybWF0PVU/VS50aW1lRm9ybWF0OmksdC5fZXh0cmFGb3JtYXQ9ZS5fZXh0cmFGb3JtYXQpLHQuX3NlcGFyYXRvcnM9ZS5zZXBhcmF0b3JzLHQuX251bUZvcm1hdD1VP1UubnVtYmVyRm9ybWF0Om8sZGVsZXRlIHQuX21pbkR0aWNrLGRlbGV0ZSB0Ll9mb3JjZVRpY2swfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuL2F4aXNfaWRzIjo4MzEsIi4vY29uc3RhbnRzIjo4MzQsIkBwbG90bHkvZDMiOjU4LCJkMy10aW1lLWZvcm1hdCI6MTY4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sODQ5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmNvbnRyYXN0LGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIik7ZnVuY3Rpb24gcyh0KXt2YXIgZT1bInNob3dleHBvbmVudCIsInNob3d0aWNrcHJlZml4Iiwic2hvd3RpY2tzdWZmaXgiXS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10W2VdfSkpO2lmKGUuZXZlcnkoKGZ1bmN0aW9uKHIpe3JldHVybiB0W3JdPT09dFtlWzBdXX0pKXx8MT09PWUubGVuZ3RoKXJldHVybiB0W2VbMF1dfWZ1bmN0aW9uIGwodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLnRpY2tmb3JtYXRzdG9wcyxyLGkpfXIoImVuYWJsZWQiKSYmKHIoImR0aWNrcmFuZ2UiKSxyKCJ2YWx1ZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyx1LGYpe2YmJjEhPT1mLnBhc3N8fGZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cyh0KTtyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixhKTtyKCJ0aWNrc3VmZml4IixpLnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGEpfSh0LDAsciwwLHUpLGYmJjIhPT1mLnBhc3N8fGZ1bmN0aW9uKHQsZSxyLGMsdSl7dmFyIGY9cyh0KTtyKCJ0aWNrcHJlZml4IikmJnIoInNob3d0aWNrcHJlZml4IixmKTtyKCJ0aWNrc3VmZml4Iix1LnRpY2tTdWZmaXhEZmx0KSYmcigic2hvd3RpY2tzdWZmaXgiLGYpO2lmKHIoInNob3d0aWNrbGFiZWxzIikpe3ZhciBoPXUuZm9udHx8e30scD1lLmNvbG9yLGQ9LTEhPT0oZS50aWNrbGFiZWxwb3NpdGlvbnx8IiIpLmluZGV4T2YoImluc2lkZSIpP2kodS5iZ0NvbG9yKTpwJiZwIT09YS5jb2xvci5kZmx0P3A6aC5jb2xvcjtpZihuLmNvZXJjZUZvbnQociwidGlja2ZvbnQiLHtmYW1pbHk6aC5mYW1pbHksc2l6ZTpoLnNpemUsY29sb3I6ZH0pLHIoInRpY2thbmdsZSIpLCJjYXRlZ29yeSIhPT1jKXt2YXIgbT1yKCJ0aWNrZm9ybWF0Iik7byh0LGUse25hbWU6InRpY2tmb3JtYXRzdG9wcyIsaW5jbHVzaW9uQXR0cjoiZW5hYmxlZCIsaGFuZGxlSXRlbURlZmF1bHRzOmx9KSxlLnRpY2tmb3JtYXRzdG9wcy5sZW5ndGh8fGRlbGV0ZSBlLnRpY2tmb3JtYXRzdG9wcyxtfHwiZGF0ZSI9PT1jfHwocigic2hvd2V4cG9uZW50IixmKSxyKCJleHBvbmVudGZvcm1hdCIpLHIoIm1pbmV4cG9uZW50Iikscigic2VwYXJhdGV0aG91c2FuZHMiKSl9fX0odCxlLHIsYyx1KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0Mn1dLDg1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bi5jb2VyY2UyKHQsZSxpLCJ0aWNrbGVuIikscz1uLmNvZXJjZTIodCxlLGksInRpY2t3aWR0aCIpLGw9bi5jb2VyY2UyKHQsZSxpLCJ0aWNrY29sb3IiLGUuY29sb3IpO3IoInRpY2tzIixhLm91dGVyVGlja3N8fG98fHN8fGw/Im91dHNpZGUiOiIiKXx8KGRlbGV0ZSBlLnRpY2tsZW4sZGVsZXRlIGUudGlja3dpZHRoLGRlbGV0ZSBlLnRpY2tjb2xvcil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDJ9XSw4NTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jbGVhbl90aWNrcyIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7ZnVuY3Rpb24gbyhyKXt2YXIgbj10W3JdO3JldHVybiB2b2lkIDAhPT1uP246KGUuX3RlbXBsYXRlfHx7fSlbcl19dmFyIHM9bygidGljazAiKSxsPW8oImR0aWNrIiksYz1vKCJ0aWNrdmFscyIpLHU9cigidGlja21vZGUiLGkoYyk/ImFycmF5IjpsPyJsaW5lYXIiOiJhdXRvIik7aWYoImF1dG8iPT09dSlyKCJudGlja3MiKTtlbHNlIGlmKCJsaW5lYXIiPT09dSl7dmFyIGY9ZS5kdGljaz1uLmR0aWNrKGwsYSk7ZS50aWNrMD1uLnRpY2swKHMsYSxlLmNhbGVuZGFyLGYpfWVsc2UgaWYoIm11bHRpY2F0ZWdvcnkiIT09YSl7dm9pZCAwPT09cigidGlja3ZhbHMiKT9lLnRpY2ttb2RlPSJhdXRvIjpyKCJ0aWNrdGV4dCIpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4vY2xlYW5fdGlja3MiOjgzM31dLDg1MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXt2YXIgYz10Ll9mdWxsTGF5b3V0O2lmKDAhPT1lLmxlbmd0aCl7dmFyIHUsZixoLHA7bCYmKHU9bCgpKTt2YXIgZD1uLmVhc2Uoci5lYXNpbmcpO3JldHVybiB0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShwKSxwPW51bGwsZnVuY3Rpb24oKXtmb3IodmFyIHI9e30sbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1lW25dLG89YS5wbG90aW5mby54YXhpcyxzPWEucGxvdGluZm8ueWF4aXM7YS54cjAmJihyW28uX25hbWUrIi5yYW5nZSJdPWEueHIwLnNsaWNlKCkpLGEueXIwJiYocltzLl9uYW1lKyIucmFuZ2UiXT1hLnlyMC5zbGljZSgpKX1yZXR1cm4gaS5jYWxsKCJyZWxheW91dCIsdCxyKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKW0oZVt0XS5wbG90aW5mbyl9KSl9KCl9KSksZj1EYXRlLm5vdygpLHA9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24gbigpe2g9RGF0ZS5ub3coKTtmb3IodmFyIGE9TWF0aC5taW4oMSwoaC1mKS9yLmR1cmF0aW9uKSxvPWQoYSkscz0wO3M8ZS5sZW5ndGg7cysrKWcoZVtzXSxvKTtoLWY+ci5kdXJhdGlvbj8oIWZ1bmN0aW9uKCl7Zm9yKHZhciByPXt9LG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGE9ZVtuXSxvPWEucGxvdGluZm8ueGF4aXMscz1hLnBsb3RpbmZvLnlheGlzO2EueHIxJiYocltvLl9uYW1lKyIucmFuZ2UiXT1hLnhyMS5zbGljZSgpKSxhLnlyMSYmKHJbcy5fbmFtZSsiLnJhbmdlIl09YS55cjEuc2xpY2UoKSl9dSYmdSgpLGkuY2FsbCgicmVsYXlvdXQiLHQscikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyltKGVbdF0ucGxvdGluZm8pfSkpfSgpLHA9d2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKG4pKTpwPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9KSksUHJvbWlzZS5yZXNvbHZlKCl9ZnVuY3Rpb24gbSh0KXt2YXIgZT10LnhheGlzLHI9dC55YXhpcztjLl9kZWZzLnNlbGVjdCgiIyIrdC5jbGlwSWQrIj4gcmVjdCIpLmNhbGwoby5zZXRUcmFuc2xhdGUsMCwwKS5jYWxsKG8uc2V0U2NhbGUsMSwxKSx0LnBsb3QuY2FsbChvLnNldFRyYW5zbGF0ZSxlLl9vZmZzZXQsci5fb2Zmc2V0KS5jYWxsKG8uc2V0U2NhbGUsMSwxKTt2YXIgbj10LnBsb3Quc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyIC50cmFjZSIpO24uc2VsZWN0QWxsKCIucG9pbnQiKS5jYWxsKG8uc2V0UG9pbnRHcm91cFNjYWxlLDEsMSksbi5zZWxlY3RBbGwoIi50ZXh0cG9pbnQiKS5jYWxsKG8uc2V0VGV4dFBvaW50c1NjYWxlLDEsMSksbi5jYWxsKG8uaGlkZU91dHNpZGVSYW5nZVBvaW50cyx0KX1mdW5jdGlvbiBnKGUscil7dmFyIG49ZS5wbG90aW5mbyxpPW4ueGF4aXMsbD1uLnlheGlzLGM9aS5fbGVuZ3RoLHU9bC5fbGVuZ3RoLGY9ISFlLnhyMSxoPSEhZS55cjEscD1bXTtpZihmKXt2YXIgZD1hLnNpbXBsZU1hcChlLnhyMCxpLnIybCksbT1hLnNpbXBsZU1hcChlLnhyMSxpLnIybCksZz1kWzFdLWRbMF0sdj1tWzFdLW1bMF07cFswXT0oZFswXSooMS1yKStyKm1bMF0tZFswXSkvKGRbMV0tZFswXSkqYyxwWzJdPWMqKDEtcityKnYvZyksaS5yYW5nZVswXT1pLmwycihkWzBdKigxLXIpK3IqbVswXSksaS5yYW5nZVsxXT1pLmwycihkWzFdKigxLXIpK3IqbVsxXSl9ZWxzZSBwWzBdPTAscFsyXT1jO2lmKGgpe3ZhciB5PWEuc2ltcGxlTWFwKGUueXIwLGwucjJsKSx4PWEuc2ltcGxlTWFwKGUueXIxLGwucjJsKSxiPXlbMV0teVswXSxfPXhbMV0teFswXTtwWzFdPSh5WzFdKigxLXIpK3IqeFsxXS15WzFdKS8oeVswXS15WzFdKSp1LHBbM109dSooMS1yK3IqXy9iKSxsLnJhbmdlWzBdPWkubDJyKHlbMF0qKDEtcikrcip4WzBdKSxsLnJhbmdlWzFdPWwubDJyKHlbMV0qKDEtcikrcip4WzFdKX1lbHNlIHBbMV09MCxwWzNdPXU7cy5kcmF3T25lKHQsaSx7c2tpcFRpdGxlOiEwfSkscy5kcmF3T25lKHQsbCx7c2tpcFRpdGxlOiEwfSkscy5yZWRyYXdDb21wb25lbnRzKHQsW2kuX2lkLGwuX2lkXSk7dmFyIHc9Zj9jL3BbMl06MSxUPWg/dS9wWzNdOjEsaz1mP3BbMF06MCxBPWg/cFsxXTowLE09Zj9wWzBdL3BbMl0qYzowLFM9aD9wWzFdL3BbM10qdTowLEU9aS5fb2Zmc2V0LU0sTD1sLl9vZmZzZXQtUztuLmNsaXBSZWN0LmNhbGwoby5zZXRUcmFuc2xhdGUsayxBKS5jYWxsKG8uc2V0U2NhbGUsMS93LDEvVCksbi5wbG90LmNhbGwoby5zZXRUcmFuc2xhdGUsRSxMKS5jYWxsKG8uc2V0U2NhbGUsdyxUKSxvLnNldFBvaW50R3JvdXBTY2FsZShuLnpvb21TY2FsZVB0cywxL3csMS9UKSxvLnNldFRleHRQb2ludHNTY2FsZShuLnpvb21TY2FsZVR4dCwxL3csMS9UKX1zLnJlZHJhd0NvbXBvbmVudHModCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9heGVzIjo4MjcsIkBwbG90bHkvZDMiOjU4fV0sODUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxpPXQoIi4vYXhpc19hdXRvdHlwZSIpO2Z1bmN0aW9uIGEodCl7cmV0dXJue3Y6IngiLGg6InkifVt0Lm9yaWVudGF0aW9ufHwidiJdfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1hKHQpLGk9bih0LCJib3gtdmlvbGluIiksbz1uKHQuX2Z1bGxJbnB1dHx8e30sImNhbmRsZXN0aWNrIik7cmV0dXJuIGkmJiFvJiZlPT09ciYmdm9pZCAwPT09dFtyXSYmdm9pZCAwPT09dFtyKyIwIl19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3IoImF1dG90eXBlbnVtYmVycyIscy5hdXRvdHlwZW51bWJlcnNEZmx0KSwiLSI9PT1yKCJ0eXBlIiwocy5zcGxvbVN0YXNofHx7fSkudHlwZSkmJighZnVuY3Rpb24odCxlKXtpZigiLSIhPT10LnR5cGUpcmV0dXJuO3ZhciByLHM9dC5faWQsbD1zLmNoYXJBdCgwKTstMSE9PXMuaW5kZXhPZigic2NlbmUiKSYmKHM9bCk7dmFyIGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2lmKCJzcGxvbSI9PT1pLnR5cGUmJmkuX2xlbmd0aD4wJiYoaVsiXyIrcisiYXhlcyJdfHx7fSlbZV0pcmV0dXJuIGk7aWYoKGlbcisiYXhpcyJdfHxyKT09PWUpe2lmKG8oaSxyKSlyZXR1cm4gaTtpZigoaVtyXXx8W10pLmxlbmd0aHx8aVtyKyIwIl0pcmV0dXJuIGl9fX0oZSxzLGwpO2lmKCFjKXJldHVybjtpZigiaGlzdG9ncmFtIj09PWMudHlwZSYmbD09PXt2OiJ5IixoOiJ4In1bYy5vcmllbnRhdGlvbnx8InYiXSlyZXR1cm4gdm9pZCh0LnR5cGU9ImxpbmVhciIpO3ZhciB1PWwrImNhbGVuZGFyIixmPWNbdV0saD17bm9NdWx0aUNhdGVnb3J5OiFuKGMsImNhcnRlc2lhbiIpfHxuKGMsIm5vTXVsdGlDYXRlZ29yeSIpfTsiYm94Ij09PWMudHlwZSYmYy5faGFzUHJlQ29tcFN0YXRzJiZsPT09e2g6IngiLHY6InkifVtjLm9yaWVudGF0aW9ufHwidiJdJiYoaC5ub011bHRpQ2F0ZWdvcnk9ITApO2lmKGguYXV0b3R5cGVudW1iZXJzPXQuYXV0b3R5cGVudW1iZXJzLG8oYyxsKSl7dmFyIHA9YShjKSxkPVtdO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBtPWVbcl07bihtLCJib3gtdmlvbGluIikmJihtW2wrImF4aXMiXXx8bCk9PT1zJiYodm9pZCAwIT09bVtwXT9kLnB1c2gobVtwXVswXSk6dm9pZCAwIT09bS5uYW1lP2QucHVzaChtLm5hbWUpOmQucHVzaCgidGV4dCIpLG1bdV0hPT1mJiYoZj12b2lkIDApKX10LnR5cGU9aShkLGYsaCl9ZWxzZSBpZigic3Bsb20iPT09Yy50eXBlKXt2YXIgZz1jLmRpbWVuc2lvbnNbYy5fYXhlc0RpbVtzXV07Zy52aXNpYmxlJiYodC50eXBlPWkoZy52YWx1ZXMsZixoKSl9ZWxzZSB0LnR5cGU9aShjW2xdfHxbY1tsKyIwIl1dLGYsaCl9KGUscy5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGUpfX0seyIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F4aXNfYXV0b3R5cGUiOjgyOH1dLDg1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIik7ZnVuY3Rpb24gYSh0LGUscil7dmFyIG4sYSxvLHM9ITE7aWYoImRhdGEiPT09ZS50eXBlKW49dC5fZnVsbERhdGFbbnVsbCE9PWUudHJhY2VzP2UudHJhY2VzWzBdOjBdO2Vsc2V7aWYoImxheW91dCIhPT1lLnR5cGUpcmV0dXJuITE7bj10Ll9mdWxsTGF5b3V0fXJldHVybiBhPWkubmVzdGVkUHJvcGVydHkobixlLnByb3ApLmdldCgpLChvPXJbZS50eXBlXT1yW2UudHlwZV18fHt9KS5oYXNPd25Qcm9wZXJ0eShlLnByb3ApJiZvW2UucHJvcF0hPT1hJiYocz0hMCksb1tlLnByb3BdPWEse2NoYW5nZWQ6cyx2YWx1ZTphfX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9W10sbj1lWzBdLGE9e307aWYoInN0cmluZyI9PXR5cGVvZiBuKWFbbl09ZVsxXTtlbHNle2lmKCFpLmlzUGxhaW5PYmplY3QobikpcmV0dXJuIHI7YT1ufXJldHVybiBsKGEsKGZ1bmN0aW9uKHQsZSxuKXtyLnB1c2goe3R5cGU6ImxheW91dCIscHJvcDp0LHZhbHVlOm59KX0pLCIiLDApLHJ9ZnVuY3Rpb24gcyh0LGUpe3ZhciByLG4sYSxvLHM9W107aWYobj1lWzBdLGE9ZVsxXSxyPWVbMl0sbz17fSwic3RyaW5nIj09dHlwZW9mIG4pb1tuXT1hO2Vsc2V7aWYoIWkuaXNQbGFpbk9iamVjdChuKSlyZXR1cm4gcztvPW4sdm9pZCAwPT09ciYmKHI9YSl9cmV0dXJuIHZvaWQgMD09PXImJihyPW51bGwpLGwobywoZnVuY3Rpb24oZSxuLGkpe3ZhciBhLG87aWYoQXJyYXkuaXNBcnJheShpKSl7bz1pLnNsaWNlKCk7dmFyIGw9TWF0aC5taW4oby5sZW5ndGgsdC5kYXRhLmxlbmd0aCk7ciYmKGw9TWF0aC5taW4obCxyLmxlbmd0aCkpLGE9W107Zm9yKHZhciBjPTA7YzxsO2MrKylhW2NdPXI/cltjXTpjfWVsc2Ugbz1pLGE9cj9yLnNsaWNlKCk6bnVsbDtpZihudWxsPT09YSlBcnJheS5pc0FycmF5KG8pJiYobz1vWzBdKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpe2lmKCFBcnJheS5pc0FycmF5KG8pKXt2YXIgdT1vO289W107Zm9yKHZhciBmPTA7ZjxhLmxlbmd0aDtmKyspb1tmXT11fW8ubGVuZ3RoPU1hdGgubWluKGEubGVuZ3RoLG8ubGVuZ3RoKX1zLnB1c2goe3R5cGU6ImRhdGEiLHByb3A6ZSx0cmFjZXM6YSx2YWx1ZTpvfSl9KSwiIiwwKSxzfWZ1bmN0aW9uIGwodCxlLHIsbil7T2JqZWN0LmtleXModCkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7dmFyIG89dFthXTtpZigiXyIhPT1hWzBdKXt2YXIgcz1yKyhuPjA/Ii4iOiIiKSthO2kuaXNQbGFpbk9iamVjdChvKT9sKG8sZSxzLG4rMSk6ZShzLGEsbyl9fSkpfXIubWFuYWdlQ29tbWFuZE9ic2VydmVyPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBzPXt9LGw9ITA7ZSYmZS5fY29tbWFuZE9ic2VydmVyJiYocz1lLl9jb21tYW5kT2JzZXJ2ZXIpLHMuY2FjaGV8fChzLmNhY2hlPXt9KSxzLmxvb2t1cFRhYmxlPXt9O3ZhciBjPXIuaGFzU2ltcGxlQVBJQ29tbWFuZEJpbmRpbmdzKHQsbixzLmxvb2t1cFRhYmxlKTtpZihlJiZlLl9jb21tYW5kT2JzZXJ2ZXIpe2lmKGMpcmV0dXJuIHM7aWYoZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSlyZXR1cm4gZS5fY29tbWFuZE9ic2VydmVyLnJlbW92ZSgpLGUuX2NvbW1hbmRPYnNlcnZlcj1udWxsLHN9aWYoYyl7YSh0LGMscy5jYWNoZSkscy5jaGVjaz1mdW5jdGlvbigpe2lmKGwpe3ZhciBlPWEodCxjLHMuY2FjaGUpO3JldHVybiBlLmNoYW5nZWQmJm8mJnZvaWQgMCE9PXMubG9va3VwVGFibGVbZS52YWx1ZV0mJihzLmRpc2FibGUoKSxQcm9taXNlLnJlc29sdmUobyh7dmFsdWU6ZS52YWx1ZSx0eXBlOmMudHlwZSxwcm9wOmMucHJvcCx0cmFjZXM6Yy50cmFjZXMsaW5kZXg6cy5sb29rdXBUYWJsZVtlLnZhbHVlXX0pKS50aGVuKHMuZW5hYmxlLHMuZW5hYmxlKSksZS5jaGFuZ2VkfX07Zm9yKHZhciB1PVsicGxvdGx5X3JlbGF5b3V0IiwicGxvdGx5X3JlZHJhdyIsInBsb3RseV9yZXN0eWxlIiwicGxvdGx5X3VwZGF0ZSIsInBsb3RseV9hbmltYXRpbmdmcmFtZSIsInBsb3RseV9hZnRlcnBsb3QiXSxmPTA7Zjx1Lmxlbmd0aDtmKyspdC5faW50ZXJuYWxPbih1W2ZdLHMuY2hlY2spO3MucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx1Lmxlbmd0aDtlKyspdC5fcmVtb3ZlSW50ZXJuYWxMaXN0ZW5lcih1W2VdLHMuY2hlY2spfX1lbHNlIGkubG9nKCJVbmFibGUgdG8gYXV0b21hdGljYWxseSBiaW5kIHBsb3QgdXBkYXRlcyB0byBBUEkgY29tbWFuZCIpLHMubG9va3VwVGFibGU9e30scy5yZW1vdmU9ZnVuY3Rpb24oKXt9O3JldHVybiBzLmRpc2FibGU9ZnVuY3Rpb24oKXtsPSExfSxzLmVuYWJsZT1mdW5jdGlvbigpe2w9ITB9LGUmJihlLl9jb21tYW5kT2JzZXJ2ZXI9cyksc30sci5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9ZnVuY3Rpb24odCxlLG4pe3ZhciBpLGEsbz1lLmxlbmd0aDtmb3IoaT0wO2k8bztpKyspe3ZhciBzLGw9ZVtpXSxjPWwubWV0aG9kLHU9bC5hcmdzO2lmKEFycmF5LmlzQXJyYXkodSl8fCh1PVtdKSwhYylyZXR1cm4hMTt2YXIgZj1yLmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3ModCxjLHUpO2lmKDEhPT1mLmxlbmd0aClyZXR1cm4hMTtpZihhKXtpZigocz1mWzBdKS50eXBlIT09YS50eXBlKXJldHVybiExO2lmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KGEudHJhY2VzKSl7aWYoIUFycmF5LmlzQXJyYXkocy50cmFjZXMpKXJldHVybiExO3MudHJhY2VzLnNvcnQoKTtmb3IodmFyIGg9MDtoPGEudHJhY2VzLmxlbmd0aDtoKyspaWYoYS50cmFjZXNbaF0hPT1zLnRyYWNlc1toXSlyZXR1cm4hMX1lbHNlIGlmKHMucHJvcCE9PWEucHJvcClyZXR1cm4hMX1lbHNlIGE9ZlswXSxBcnJheS5pc0FycmF5KGEudHJhY2VzKSYmYS50cmFjZXMuc29ydCgpO3ZhciBwPShzPWZbMF0pLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocCkpe2lmKDEhPT1wLmxlbmd0aClyZXR1cm4hMTtwPXBbMF19biYmKG5bcF09aSl9cmV0dXJuIGF9LHIuZXhlY3V0ZUFQSUNvbW1hbmQ9ZnVuY3Rpb24odCxlLHIpe2lmKCJza2lwIj09PWUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciBhPW4uYXBpTWV0aG9kUmVnaXN0cnlbZV0sbz1bdF07QXJyYXkuaXNBcnJheShyKXx8KHI9W10pO2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKW8ucHVzaChyW3NdKTtyZXR1cm4gYS5hcHBseShudWxsLG8pLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4gaS53YXJuKCJBUEkgY2FsbCB0byBQbG90bHkuIitlKyIgcmVqZWN0ZWQuIix0KSxQcm9taXNlLnJlamVjdCh0KX0pKX0sci5jb21wdXRlQVBJQ29tbWFuZEJpbmRpbmdzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjtzd2l0Y2goQXJyYXkuaXNBcnJheShyKXx8KHI9W10pLGUpe2Nhc2UicmVzdHlsZSI6bj1zKHQscik7YnJlYWs7Y2FzZSJyZWxheW91dCI6bj1vKHQscik7YnJlYWs7Y2FzZSJ1cGRhdGUiOm49cyh0LFtyWzBdLHJbMl1dKS5jb25jYXQobyh0LFtyWzFdXSkpO2JyZWFrO2Nhc2UiYW5pbWF0ZSI6bj1mdW5jdGlvbih0LGUpe3JldHVybiBBcnJheS5pc0FycmF5KGVbMF0pJiYxPT09ZVswXS5sZW5ndGgmJi0xIT09WyJzdHJpbmciLCJudW1iZXIiXS5pbmRleE9mKHR5cGVvZiBlWzBdWzBdKT9be3R5cGU6ImxheW91dCIscHJvcDoiX2N1cnJlbnRGcmFtZSIsdmFsdWU6ZVswXVswXS50b1N0cmluZygpfV06W119KDAscik7YnJlYWs7ZGVmYXVsdDpuPVtdfXJldHVybiBufX0seyIuLi9saWIiOjc3NiwiLi4vcmVnaXN0cnkiOjkwNH1dLDg1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtyLmF0dHJpYnV0ZXM9ZnVuY3Rpb24odCxlKXtlPWV8fHt9O3ZhciByPXt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToodD10fHx7fSkuZWRpdFR5cGUsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9LHt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOnQuZWRpdFR5cGV9XSxkZmx0OlswLDFdfSxpPSh0Lm5hbWUmJnQubmFtZSx0LnRyYWNlLGUuZGVzY3JpcHRpb24mJmUuZGVzY3JpcHRpb24se3g6bih7fSxyLHt9KSx5Om4oe30scix7fSksZWRpdFR5cGU6dC5lZGl0VHlwZX0pO3JldHVybiB0Lm5vR3JpZENlbGx8fChpLnJvdz17dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOnQuZWRpdFR5cGV9LGkuY29sdW1uPXt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6dC5lZGl0VHlwZX0pLGl9LHIuZGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9biYmbi54fHxbMCwxXSxhPW4mJm4ueXx8WzAsMV0sbz1lLmdyaWQ7aWYobyl7dmFyIHM9cigiZG9tYWluLmNvbHVtbiIpO3ZvaWQgMCE9PXMmJihzPG8uY29sdW1ucz9pPW8uX2RvbWFpbnMueFtzXTpkZWxldGUgdC5kb21haW4uY29sdW1uKTt2YXIgbD1yKCJkb21haW4ucm93Iik7dm9pZCAwIT09bCYmKGw8by5yb3dzP2E9by5fZG9tYWlucy55W2xdOmRlbGV0ZSB0LmRvbWFpbi5yb3cpfXZhciBjPXIoImRvbWFpbi54IixpKSx1PXIoImRvbWFpbi55IixhKTtjWzBdPGNbMV18fCh0LmRvbWFpbi54PWkuc2xpY2UoKSksdVswXTx1WzFdfHwodC5kb21haW4ueT1hLnNsaWNlKCkpfX0seyIuLi9saWIvZXh0ZW5kIjo3NjZ9XSw4NTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZWRpdFR5cGUscj10LmNvbG9yRWRpdFR5cGU7dm9pZCAwPT09ciYmKHI9ZSk7dmFyIG49e2ZhbWlseTp7dmFsVHlwZToic3RyaW5nIixub0JsYW5rOiEwLHN0cmljdDohMCxlZGl0VHlwZTplfSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGVkaXRUeXBlOmV9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6cn0sZWRpdFR5cGU6ZX07cmV0dXJuIHQuYXJyYXlPayYmKG4uZmFtaWx5LmFycmF5T2s9ITAsbi5zaXplLmFycmF5T2s9ITAsbi5jb2xvci5hcnJheU9rPSEwKSxufX0se31dLDg1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e19pc0xpbmtlZFRvQXJyYXk6ImZyYW1lc19lbnRyeSIsZ3JvdXA6e3ZhbFR5cGU6InN0cmluZyJ9LG5hbWU6e3ZhbFR5cGU6InN0cmluZyJ9LHRyYWNlczp7dmFsVHlwZToiYW55In0sYmFzZWZyYW1lOnt2YWxUeXBlOiJzdHJpbmcifSxkYXRhOnt2YWxUeXBlOiJhbnkifSxsYXlvdXQ6e3ZhbFR5cGU6ImFueSJ9fX0se31dLDg1ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnByb2pOYW1lcz17YWlyeToiYWlyeSIsYWl0b2ZmOiJhaXRvZmYiLCJhbGJlcnMgdXNhIjoiYWxiZXJzVXNhIixhbGJlcnM6ImFsYmVycyIsYXVndXN0OiJhdWd1c3QiLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6ImF6aW11dGhhbEVxdWFsQXJlYSIsImF6aW11dGhhbCBlcXVpZGlzdGFudCI6ImF6aW11dGhhbEVxdWlkaXN0YW50IixiYWtlcjoiYmFrZXIiLGJlcnRpbjE5NTM6ImJlcnRpbjE5NTMiLGJvZ2dzOiJib2dncyIsYm9ubmU6ImJvbm5lIixib3R0b21sZXk6ImJvdHRvbWxleSIsYnJvbWxleToiYnJvbWxleSIsY29sbGlnbm9uOiJjb2xsaWdub24iLCJjb25pYyBjb25mb3JtYWwiOiJjb25pY0NvbmZvcm1hbCIsImNvbmljIGVxdWFsIGFyZWEiOiJjb25pY0VxdWFsQXJlYSIsImNvbmljIGVxdWlkaXN0YW50IjoiY29uaWNFcXVpZGlzdGFudCIsY3JhaWc6ImNyYWlnIixjcmFzdGVyOiJjcmFzdGVyIiwiY3lsaW5kcmljYWwgZXF1YWwgYXJlYSI6ImN5bGluZHJpY2FsRXF1YWxBcmVhIiwiY3lsaW5kcmljYWwgc3RlcmVvZ3JhcGhpYyI6ImN5bGluZHJpY2FsU3RlcmVvZ3JhcGhpYyIsZWNrZXJ0MToiZWNrZXJ0MSIsZWNrZXJ0MjoiZWNrZXJ0MiIsZWNrZXJ0MzoiZWNrZXJ0MyIsZWNrZXJ0NDoiZWNrZXJ0NCIsZWNrZXJ0NToiZWNrZXJ0NSIsZWNrZXJ0NjoiZWNrZXJ0NiIsZWlzZW5sb2hyOiJlaXNlbmxvaHIiLGVxdWlyZWN0YW5ndWxhcjoiZXF1aXJlY3Rhbmd1bGFyIixmYWhleToiZmFoZXkiLCJmb3VjYXV0IHNpbnVzb2lkYWwiOiJmb3VjYXV0U2ludXNvaWRhbCIsZm91Y2F1dDoiZm91Y2F1dCIsZ2luemJ1cmc0OiJnaW56YnVyZzQiLGdpbnpidXJnNToiZ2luemJ1cmc1IixnaW56YnVyZzY6ImdpbnpidXJnNiIsZ2luemJ1cmc4OiJnaW56YnVyZzgiLGdpbnpidXJnOToiZ2luemJ1cmc5Iixnbm9tb25pYzoiZ25vbW9uaWMiLCJncmluZ29ydGVuIHF1aW5jdW5jaWFsIjoiZ3JpbmdvcnRlblF1aW5jdW5jaWFsIixncmluZ29ydGVuOiJncmluZ29ydGVuIixndXlvdToiZ3V5b3UiLGhhbW1lcjoiaGFtbWVyIixoaWxsOiJoaWxsIixob21vbG9zaW5lOiJob21vbG9zaW5lIixodWZuYWdlbDoiaHVmbmFnZWwiLGh5cGVyZWxsaXB0aWNhbDoiaHlwZXJlbGxpcHRpY2FsIixrYXZyYXlza2l5Nzoia2F2cmF5c2tpeTciLGxhZ3JhbmdlOiJsYWdyYW5nZSIsbGFycml2ZWU6ImxhcnJpdmVlIixsYXNrb3dza2k6Imxhc2tvd3NraSIsbG94aW11dGhhbDoibG94aW11dGhhbCIsbWVyY2F0b3I6Im1lcmNhdG9yIixtaWxsZXI6Im1pbGxlciIsbW9sbHdlaWRlOiJtb2xsd2VpZGUiLCJtdCBmbGF0IHBvbGFyIHBhcmFib2xpYyI6Im10RmxhdFBvbGFyUGFyYWJvbGljIiwibXQgZmxhdCBwb2xhciBxdWFydGljIjoibXRGbGF0UG9sYXJRdWFydGljIiwibXQgZmxhdCBwb2xhciBzaW51c29pZGFsIjoibXRGbGF0UG9sYXJTaW51c29pZGFsIiwibmF0dXJhbCBlYXJ0aCI6Im5hdHVyYWxFYXJ0aCIsIm5hdHVyYWwgZWFydGgxIjoibmF0dXJhbEVhcnRoMSIsIm5hdHVyYWwgZWFydGgyIjoibmF0dXJhbEVhcnRoMiIsIm5lbGwgaGFtbWVyIjoibmVsbEhhbW1lciIsbmljb2xvc2k6Im5pY29sb3NpIixvcnRob2dyYXBoaWM6Im9ydGhvZ3JhcGhpYyIscGF0dGVyc29uOiJwYXR0ZXJzb24iLCJwZWlyY2UgcXVpbmN1bmNpYWwiOiJwZWlyY2VRdWluY3VuY2lhbCIscG9seWNvbmljOiJwb2x5Y29uaWMiLCJyZWN0YW5ndWxhciBwb2x5Y29uaWMiOiJyZWN0YW5ndWxhclBvbHljb25pYyIscm9iaW5zb246InJvYmluc29uIixzYXRlbGxpdGU6InNhdGVsbGl0ZSIsInNpbnUgbW9sbHdlaWRlIjoic2ludU1vbGx3ZWlkZSIsc2ludXNvaWRhbDoic2ludXNvaWRhbCIsc3RlcmVvZ3JhcGhpYzoic3RlcmVvZ3JhcGhpYyIsdGltZXM6InRpbWVzIiwidHJhbnN2ZXJzZSBtZXJjYXRvciI6InRyYW5zdmVyc2VNZXJjYXRvciIsInZhbiBkZXIgZ3JpbnRlbiI6InZhbkRlckdyaW50ZW4iLCJ2YW4gZGVyIGdyaW50ZW4yIjoidmFuRGVyR3JpbnRlbjIiLCJ2YW4gZGVyIGdyaW50ZW4zIjoidmFuRGVyR3JpbnRlbjMiLCJ2YW4gZGVyIGdyaW50ZW40IjoidmFuRGVyR3JpbnRlbjQiLHdhZ25lcjQ6IndhZ25lcjQiLHdhZ25lcjY6IndhZ25lcjYiLHdpZWNoZWw6IndpZWNoZWwiLCJ3aW5rZWwgdHJpcGVsIjoid2lua2VsMyIsd2lua2VsMzoid2lua2VsMyJ9LHIuYXhlc05hbWVzPVsibG9uYXhpcyIsImxhdGF4aXMiXSxyLmxvbmF4aXNTcGFuPXtvcnRob2dyYXBoaWM6MTgwLCJhemltdXRoYWwgZXF1YWwgYXJlYSI6MzYwLCJhemltdXRoYWwgZXF1aWRpc3RhbnQiOjM2MCwiY29uaWMgY29uZm9ybWFsIjoxODAsZ25vbW9uaWM6MTYwLHN0ZXJlb2dyYXBoaWM6MTgwLCJ0cmFuc3ZlcnNlIG1lcmNhdG9yIjoxODAsIioiOjM2MH0sci5sYXRheGlzU3Bhbj17ImNvbmljIGNvbmZvcm1hbCI6MTUwLHN0ZXJlb2dyYXBoaWM6MTc5LjUsIioiOjE4MH0sci5zY29wZURlZmF1bHRzPXt3b3JsZDp7bG9uYXhpc1JhbmdlOlstMTgwLDE4MF0sbGF0YXhpc1JhbmdlOlstOTAsOTBdLHByb2pUeXBlOiJlcXVpcmVjdGFuZ3VsYXIiLHByb2pSb3RhdGU6WzAsMCwwXX0sdXNhOntsb25heGlzUmFuZ2U6Wy0xODAsLTUwXSxsYXRheGlzUmFuZ2U6WzE1LDgwXSxwcm9qVHlwZToiYWxiZXJzIHVzYSJ9LGV1cm9wZTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbMzAsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6WzE1LDAsMF0scHJvalBhcmFsbGVsczpbMCw2MF19LGFzaWE6e2xvbmF4aXNSYW5nZTpbMjIsMTYwXSxsYXRheGlzUmFuZ2U6Wy0xNSw1NV0scHJvalR5cGU6Im1lcmNhdG9yIixwcm9qUm90YXRlOlswLDAsMF19LGFmcmljYTp7bG9uYXhpc1JhbmdlOlstMzAsNjBdLGxhdGF4aXNSYW5nZTpbLTQwLDQwXSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX0sIm5vcnRoIGFtZXJpY2EiOntsb25heGlzUmFuZ2U6Wy0xODAsLTQ1XSxsYXRheGlzUmFuZ2U6WzUsODVdLHByb2pUeXBlOiJjb25pYyBjb25mb3JtYWwiLHByb2pSb3RhdGU6Wy0xMDAsMCwwXSxwcm9qUGFyYWxsZWxzOlsyOS41LDQ1LjVdfSwic291dGggYW1lcmljYSI6e2xvbmF4aXNSYW5nZTpbLTEwMCwtMzBdLGxhdGF4aXNSYW5nZTpbLTYwLDE1XSxwcm9qVHlwZToibWVyY2F0b3IiLHByb2pSb3RhdGU6WzAsMCwwXX19LHIuY2xpcFBhZD0uMDAxLHIucHJlY2lzaW9uPS4xLHIubGFuZENvbG9yPSIjRjBEQzgyIixyLndhdGVyQ29sb3I9IiMzMzk5RkYiLHIubG9jYXRpb25tb2RlVG9MYXllcj17IklTTy0zIjoiY291bnRyaWVzIiwiVVNBLXN0YXRlcyI6InN1YnVuaXRzIiwiY291bnRyeSBuYW1lcyI6ImNvdW50cmllcyJ9LHIuc3BoZXJlU1ZHPXt0eXBlOiJTcGhlcmUifSxyLmZpbGxMYXllcnM9e29jZWFuOjEsbGFuZDoxLGxha2VzOjF9LHIubGluZUxheWVycz17c3VidW5pdHM6MSxjb3VudHJpZXM6MSxjb2FzdGxpbmVzOjEscml2ZXJzOjEsZnJhbWU6MX0sci5sYXllcnM9WyJiZyIsIm9jZWFuIiwibGFuZCIsImxha2VzIiwic3VidW5pdHMiLCJjb3VudHJpZXMiLCJjb2FzdGxpbmVzIiwicml2ZXJzIiwibGF0YXhpcyIsImxvbmF4aXMiLCJmcmFtZSIsImJhY2twbG90IiwiZnJvbnRwbG90Il0sci5sYXllcnNGb3JDaG9yb3BsZXRoPVsiYmciLCJvY2VhbiIsImxhbmQiLCJzdWJ1bml0cyIsImNvdW50cmllcyIsImNvYXN0bGluZXMiLCJsYXRheGlzIiwibG9uYXhpcyIsImZyYW1lIiwiYmFja3Bsb3QiLCJyaXZlcnMiLCJsYWtlcyIsImZyb250cGxvdCJdLHIubGF5ZXJOYW1lVG9BZGplY3RpdmU9e29jZWFuOiJvY2VhbiIsbGFuZDoibGFuZCIsbGFrZXM6Imxha2UiLHN1YnVuaXRzOiJzdWJ1bml0Iixjb3VudHJpZXM6ImNvdW50cnkiLGNvYXN0bGluZXM6ImNvYXN0bGluZSIscml2ZXJzOiJyaXZlciIsZnJhbWU6ImZyYW1lIn19LHt9XSw4NTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtZ2VvIiksYT1pLmdlb1BhdGgsbz1pLmdlb0Rpc3RhbmNlLHM9dCgiZDMtZ2VvLXByb2plY3Rpb24iKSxsPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYz10KCIuLi8uLi9saWIiKSx1PWMuc3RyVHJhbnNsYXRlLGY9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksZD10KCIuLi9wbG90cyIpLG09dCgiLi4vY2FydGVzaWFuL2F4ZXMiKSxnPXQoIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiKS5nZXRBdXRvUmFuZ2Usdj10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50IikseT10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx4PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5jbGVhclNlbGVjdCxiPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLF89dCgiLi96b29tIiksdz10KCIuL2NvbnN0YW50cyIpLFQ9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGs9dCgiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIiksQT10KCJ0b3BvanNvbi1jbGllbnQiKS5mZWF0dXJlO2Z1bmN0aW9uIE0odCl7dGhpcy5pZD10LmlkLHRoaXMuZ3JhcGhEaXY9dC5ncmFwaERpdix0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRvcG9qc29uVVJMPXQudG9wb2pzb25VUkwsdGhpcy5pc1N0YXRpYz10LnN0YXRpY1Bsb3QsdGhpcy50b3BvanNvbk5hbWU9bnVsbCx0aGlzLnRvcG9qc29uPW51bGwsdGhpcy5wcm9qZWN0aW9uPW51bGwsdGhpcy5zY29wZT1udWxsLHRoaXMudmlld0luaXRpYWw9bnVsbCx0aGlzLmZpdFNjYWxlPW51bGwsdGhpcy5ib3VuZHM9bnVsbCx0aGlzLm1pZFB0PW51bGwsdGhpcy5oYXNDaG9yb3BsZXRoPSExLHRoaXMudHJhY2VIYXNoPXt9LHRoaXMubGF5ZXJzPXt9LHRoaXMuYmFzZVBhdGhzPXt9LHRoaXMuZGF0YVBhdGhzPXt9LHRoaXMuZGF0YVBvaW50cz17fSx0aGlzLmNsaXBEZWY9bnVsbCx0aGlzLmNsaXBSZWN0PW51bGwsdGhpcy5iZ1JlY3Q9bnVsbCx0aGlzLm1ha2VGcmFtZXdvcmsoKX12YXIgUz1NLnByb3RvdHlwZTtmdW5jdGlvbiBFKHQsZSl7dmFyIHI9dy5jbGlwUGFkLG49dFswXStyLGk9dFsxXS1yLGE9ZVswXStyLG89ZVsxXS1yO24+MCYmaTwwJiYoaSs9MzYwKTt2YXIgcz0oaS1uKS80O3JldHVybnt0eXBlOiJQb2x5Z29uIixjb29yZGluYXRlczpbW1tuLGFdLFtuLG9dLFtuK3Msb10sW24rMipzLG9dLFtuKzMqcyxvXSxbaSxvXSxbaSxhXSxbaS1zLGFdLFtpLTIqcyxhXSxbaS0zKnMsYV0sW24sYV1dXX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgTSh0KX0sUy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLGk9ZVt0aGlzLmlkXSxhPVtdLG89ITE7Zm9yKHZhciBzIGluIHcubGF5ZXJOYW1lVG9BZGplY3RpdmUpaWYoImZyYW1lIiE9PXMmJmlbInNob3ciK3NdKXtvPSEwO2JyZWFrfWZvcih2YXIgbD0wO2w8dC5sZW5ndGg7bCsrKWlmKHRbMF1bMF0udHJhY2UubG9jYXRpb25tb2RlKXtvPSEwO2JyZWFrfWlmKG8pe3ZhciBjPWsuZ2V0VG9wb2pzb25OYW1lKGkpO251bGwhPT1uLnRvcG9qc29uJiZjPT09bi50b3BvanNvbk5hbWV8fChuLnRvcG9qc29uTmFtZT1jLHZvaWQgMD09PVBsb3RseUdlb0Fzc2V0cy50b3BvanNvbltuLnRvcG9qc29uTmFtZV0mJmEucHVzaChuLmZldGNoVG9wb2pzb24oKSkpfWE9YS5jb25jYXQoVC5mZXRjaFRyYWNlR2VvRGF0YSh0KSksci5wdXNoKG5ldyBQcm9taXNlKChmdW5jdGlvbihyLGkpe1Byb21pc2UuYWxsKGEpLnRoZW4oKGZ1bmN0aW9uKCl7bi50b3BvanNvbj1QbG90bHlHZW9Bc3NldHMudG9wb2pzb25bbi50b3BvanNvbk5hbWVdLG4udXBkYXRlKHQsZSkscigpfSkpLmNhdGNoKGkpfSkpKX0sUy5mZXRjaFRvcG9qc29uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPWsuZ2V0VG9wb2pzb25QYXRoKHQudG9wb2pzb25VUkwsdC50b3BvanNvbk5hbWUpO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixpKXtuLmpzb24oZSwoZnVuY3Rpb24obixhKXtpZihuKXJldHVybiA0MDQ9PT1uLnN0YXR1cz9pKG5ldyBFcnJvcihbInBsb3RseS5qcyBjb3VsZCBub3QgZmluZCB0b3BvanNvbiBmaWxlIGF0IixlLCIuIiwiTWFrZSBzdXJlIHRoZSAqdG9wb2pzb25VUkwqIHBsb3QgY29uZmlnIG9wdGlvbiIsImlzIHNldCBwcm9wZXJseS4iXS5qb2luKCIgIikpKTppKG5ldyBFcnJvcihbInVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZmV0Y2hpbmcgdG9wb2pzb24gZmlsZSBhdCIsZV0uam9pbigiICIpKSk7UGxvdGx5R2VvQXNzZXRzLnRvcG9qc29uW3QudG9wb2pzb25OYW1lXT1hLHIoKX0pKX0pKX0sUy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuaGFzQ2hvcm9wbGV0aD0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXSxhPWlbMF0udHJhY2U7ImNob3JvcGxldGgiPT09YS50eXBlJiYodGhpcy5oYXNDaG9yb3BsZXRoPSEwKSwhMD09PWEudmlzaWJsZSYmYS5fbGVuZ3RoPjAmJmEuX21vZHVsZS5jYWxjR2VvSlNPTihpLGUpfWlmKCF0aGlzLnVwZGF0ZVByb2plY3Rpb24odCxlKSl7dGhpcy52aWV3SW5pdGlhbCYmdGhpcy5zY29wZT09PXIuc2NvcGV8fHRoaXMuc2F2ZVZpZXdJbml0aWFsKHIpLHRoaXMuc2NvcGU9ci5zY29wZSx0aGlzLnVwZGF0ZUJhc2VMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZURpbXMoZSxyKSx0aGlzLnVwZGF0ZUZ4KGUsciksZC5nZW5lcmFsVXBkYXRlUGVyVHJhY2VNb2R1bGUodGhpcy5ncmFwaERpdix0aGlzLHQscik7dmFyIG89dGhpcy5sYXllcnMuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpO3RoaXMuZGF0YVBvaW50cy5wb2ludD1vLnNlbGVjdEFsbCgiLnBvaW50IiksdGhpcy5kYXRhUG9pbnRzLnRleHQ9by5zZWxlY3RBbGwoInRleHQiKSx0aGlzLmRhdGFQYXRocy5saW5lPW8uc2VsZWN0QWxsKCIuanMtbGluZSIpO3ZhciBzPXRoaXMubGF5ZXJzLmJhY2twbG90LnNlbGVjdCgiLmNob3JvcGxldGhsYXllciIpO3RoaXMuZGF0YVBhdGhzLmNob3JvcGxldGg9cy5zZWxlY3RBbGwoInBhdGgiKSx0aGlzLnJlbmRlcigpfX0sUy51cGRhdGVQcm9qZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5ncmFwaERpdixuPWVbdGhpcy5pZF0sbD1lLl9zaXplLHU9bi5kb21haW4sZj1uLnByb2plY3Rpb24saD1uLmxvbmF4aXMscD1uLmxhdGF4aXMsZD1oLl9heCxtPXAuX2F4LHY9dGhpcy5wcm9qZWN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPXQucHJvamVjdGlvbixyPWUudHlwZSxuPXcucHJvak5hbWVzW3JdO249ImdlbyIrYy50aXRsZUNhc2Uobik7Zm9yKHZhciBsPShpW25dfHxzW25dKSgpLHU9dC5faXNTYXRlbGxpdGU/MTgwKk1hdGguYWNvcygxL2UuZGlzdGFuY2UpL01hdGguUEk6dC5faXNDbGlwcGVkP3cubG9uYXhpc1NwYW5bcl0vMjpudWxsLGY9WyJjZW50ZXIiLCJyb3RhdGUiLCJwYXJhbGxlbHMiLCJjbGlwRXh0ZW50Il0saD1mdW5jdGlvbih0KXtyZXR1cm4gdD9sOltdfSxwPTA7cDxmLmxlbmd0aDtwKyspe3ZhciBkPWZbcF07ImZ1bmN0aW9uIiE9dHlwZW9mIGxbZF0mJihsW2RdPWgpfWwuaXNMb25MYXRPdmVyRWRnZXM9ZnVuY3Rpb24odCl7aWYobnVsbD09PWwodCkpcmV0dXJuITA7aWYodSl7dmFyIGU9bC5yb3RhdGUoKTtyZXR1cm4gbyh0LFstZVswXSwtZVsxXV0pPnUqTWF0aC5QSS8xODB9cmV0dXJuITF9LGwuZ2V0UGF0aD1mdW5jdGlvbigpe3JldHVybiBhKCkucHJvamVjdGlvbihsKX0sbC5nZXRCb3VuZHM9ZnVuY3Rpb24odCl7cmV0dXJuIGwuZ2V0UGF0aCgpLmJvdW5kcyh0KX0sbC5wcmVjaXNpb24ody5wcmVjaXNpb24pLHQuX2lzU2F0ZWxsaXRlJiZsLnRpbHQoZS50aWx0KS5kaXN0YW5jZShlLmRpc3RhbmNlKTt1JiZsLmNsaXBBbmdsZSh1LXcuY2xpcFBhZCk7cmV0dXJuIGx9KG4pLHk9W1tsLmwrbC53KnUueFswXSxsLnQrbC5oKigxLXUueVsxXSldLFtsLmwrbC53KnUueFsxXSxsLnQrbC5oKigxLXUueVswXSldXSx4PW4uY2VudGVyfHx7fSxiPWYucm90YXRpb258fHt9LF89aC5yYW5nZXx8W10sVD1wLnJhbmdlfHxbXTtpZihuLmZpdGJvdW5kcyl7ZC5fbGVuZ3RoPXlbMV1bMF0teVswXVswXSxtLl9sZW5ndGg9eVsxXVsxXS15WzBdWzFdLGQucmFuZ2U9ZyhyLGQpLG0ucmFuZ2U9ZyhyLG0pO3ZhciBrPShkLnJhbmdlWzBdK2QucmFuZ2VbMV0pLzIsQT0obS5yYW5nZVswXSttLnJhbmdlWzFdKS8yO2lmKG4uX2lzU2NvcGVkKXg9e2xvbjprLGxhdDpBfTtlbHNlIGlmKG4uX2lzQ2xpcHBlZCl7eD17bG9uOmssbGF0OkF9LGI9e2xvbjprLGxhdDpBLHJvbGw6Yi5yb2xsfTt2YXIgTT1mLnR5cGUsUz13LmxvbmF4aXNTcGFuW01dLzJ8fDE4MCxMPXcubGF0YXhpc1NwYW5bTV0vMnx8OTA7Xz1bay1TLGsrU10sVD1bQS1MLEErTF19ZWxzZSB4PXtsb246ayxsYXQ6QX0sYj17bG9uOmssbGF0OmIubGF0LHJvbGw6Yi5yb2xsfX12LmNlbnRlcihbeC5sb24tYi5sb24seC5sYXQtYi5sYXRdKS5yb3RhdGUoWy1iLmxvbiwtYi5sYXQsYi5yb2xsXSkucGFyYWxsZWxzKGYucGFyYWxsZWxzKTt2YXIgQz1FKF8sVCk7di5maXRFeHRlbnQoeSxDKTt2YXIgUD10aGlzLmJvdW5kcz12LmdldEJvdW5kcyhDKSxJPXRoaXMuZml0U2NhbGU9di5zY2FsZSgpLE89di50cmFuc2xhdGUoKTtpZihuLmZpdGJvdW5kcyl7dmFyIHo9di5nZXRCb3VuZHMoRShkLnJhbmdlLG0ucmFuZ2UpKSxEPU1hdGgubWluKChQWzFdWzBdLVBbMF1bMF0pLyh6WzFdWzBdLXpbMF1bMF0pLChQWzFdWzFdLVBbMF1bMV0pLyh6WzFdWzFdLXpbMF1bMV0pKTtpc0Zpbml0ZShEKT92LnNjYWxlKEQqSSk6Yy53YXJuKCJTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmciK3RoaXMuaWQrImZpdGJvdW5kcyBjb21wdXRhdGlvbnMuIil9ZWxzZSB2LnNjYWxlKGYuc2NhbGUqSSk7dmFyIFI9dGhpcy5taWRQdD1bKFBbMF1bMF0rUFsxXVswXSkvMiwoUFswXVsxXStQWzFdWzFdKS8yXTtpZih2LnRyYW5zbGF0ZShbT1swXSsoUlswXS1PWzBdKSxPWzFdKyhSWzFdLU9bMV0pXSkuY2xpcEV4dGVudChQKSxuLl9pc0FsYmVyc1VzYSl7dmFyIEY9dihbeC5sb24seC5sYXRdKSxCPXYudHJhbnNsYXRlKCk7di50cmFuc2xhdGUoW0JbMF0tKEZbMF0tQlswXSksQlsxXS0oRlsxXS1CWzFdKV0pfX0sUy51cGRhdGVCYXNlTGF5ZXJzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxpPXIudG9wb2pzb24sYT1yLmxheWVycyxvPXIuYmFzZVBhdGhzO2Z1bmN0aW9uIHModCl7cmV0dXJuImxvbmF4aXMiPT09dHx8ImxhdGF4aXMiPT09dH1mdW5jdGlvbiBsKHQpe3JldHVybiBCb29sZWFuKHcubGluZUxheWVyc1t0XSl9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gQm9vbGVhbih3LmZpbGxMYXllcnNbdF0pfXZhciB1PSh0aGlzLmhhc0Nob3JvcGxldGg/dy5sYXllcnNGb3JDaG9yb3BsZXRoOncubGF5ZXJzKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQpfHxjKHQpP2VbInNob3ciK3RdOiFzKHQpfHxlW3RdLnNob3dncmlkfSkpLHA9ci5mcmFtZXdvcmsuc2VsZWN0QWxsKCIubGF5ZXIiKS5kYXRhKHUsU3RyaW5nKTtwLmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXtkZWxldGUgYVt0XSxkZWxldGUgb1t0XSxuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKSxwLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLChmdW5jdGlvbih0KXtyZXR1cm4ibGF5ZXIgIit0fSkpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWFbdF09bi5zZWxlY3QodGhpcyk7ImJnIj09PXQ/ci5iZ1JlY3Q9ZS5hcHBlbmQoInJlY3QiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKTpzKHQpP29bdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKToiYmFja3Bsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNob3JvcGxldGhsYXllciIsITApOiJmcm9udHBsb3QiPT09dD9lLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNjYXR0ZXJsYXllciIsITApOmwodCk/b1t0XT1lLmFwcGVuZCgicGF0aCIpLnN0eWxlKCJmaWxsIiwibm9uZSIpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMik6Yyh0KSYmKG9bdF09ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgic3Ryb2tlIiwibm9uZSIpKX0pKSxwLm9yZGVyKCkscC5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1vW3JdLGE9dy5sYXllck5hbWVUb0FkamVjdGl2ZVtyXTsiZnJhbWUiPT09cj9uLmRhdHVtKHcuc3BoZXJlU1ZHKTpsKHIpfHxjKHIpP24uZGF0dW0oQShpLGkub2JqZWN0c1tyXSkpOnMocikmJm4uZGF0dW0oZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYSxvPWVbdF0scz13LnNjb3BlRGVmYXVsdHNbZS5zY29wZV07ImxvbmF4aXMiPT09dD8obj1zLmxvbmF4aXNSYW5nZSxpPXMubGF0YXhpc1JhbmdlLGE9ZnVuY3Rpb24odCxlKXtyZXR1cm5bdCxlXX0pOiJsYXRheGlzIj09PXQmJihuPXMubGF0YXhpc1JhbmdlLGk9cy5sb25heGlzUmFuZ2UsYT1mdW5jdGlvbih0LGUpe3JldHVybltlLHRdfSk7dmFyIGw9e3R5cGU6ImxpbmVhciIscmFuZ2U6W25bMF0sblsxXS0xZS02XSx0aWNrMDpvLnRpY2swLGR0aWNrOm8uZHRpY2t9O20uc2V0Q29udmVydChsLHIpO3ZhciBjPW0uY2FsY1RpY2tzKGwpO2UuaXNTY29wZWR8fCJsb25heGlzIiE9PXR8fGMucG9wKCk7Zm9yKHZhciB1PWMubGVuZ3RoLGY9bmV3IEFycmF5KHUpLGg9MDtoPHU7aCsrKWZvcih2YXIgcD1jW2hdLngsZD1mW2hdPVtdLGc9aVswXTtnPGlbMV0rMi41O2crPTIuNSlkLnB1c2goYShwLGcpKTtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczpmfX0ocixlLHQpKS5jYWxsKGYuc3Ryb2tlLGVbcl0uZ3JpZGNvbG9yKS5jYWxsKGguZGFzaExpbmUsIiIsZVtyXS5ncmlkd2lkdGgpLGwocik/bi5jYWxsKGYuc3Ryb2tlLGVbYSsiY29sb3IiXSkuY2FsbChoLmRhc2hMaW5lLCIiLGVbYSsid2lkdGgiXSk6YyhyKSYmbi5jYWxsKGYuZmlsbCxlW2ErImNvbG9yIl0pfSkpfSxTLnVwZGF0ZURpbXM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmJvdW5kcyxuPShlLmZyYW1ld2lkdGh8fDApLzIsaT1yWzBdWzBdLW4sYT1yWzBdWzFdLW4sbz1yWzFdWzBdLWkrbixzPXJbMV1bMV0tYStuO2guc2V0UmVjdCh0aGlzLmNsaXBSZWN0LGksYSxvLHMpLHRoaXMuYmdSZWN0LmNhbGwoaC5zZXRSZWN0LGksYSxvLHMpLmNhbGwoZi5maWxsLGUuYmdjb2xvciksdGhpcy54YXhpcy5fb2Zmc2V0PWksdGhpcy54YXhpcy5fbGVuZ3RoPW8sdGhpcy55YXhpcy5fb2Zmc2V0PWEsdGhpcy55YXhpcy5fbGVuZ3RoPXN9LFMudXBkYXRlRng9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLGk9ci5ncmFwaERpdixhPXIuYmdSZWN0LG89dC5kcmFnbW9kZSxzPXQuY2xpY2ttb2RlO2lmKCFyLmlzU3RhdGljKXt2YXIgdTsic2VsZWN0Ij09PW8/dT1mdW5jdGlvbih0LGUpeyh0LnJhbmdlPXt9KVtyLmlkXT1baChbZS54bWluLGUueW1pbl0pLGgoW2UueG1heCxlLnltYXhdKV19OiJsYXNzbyI9PT1vJiYodT1mdW5jdGlvbih0LGUsbil7KHQubGFzc29Qb2ludHM9e30pW3IuaWRdPW4uZmlsdGVyZWQubWFwKGgpfSk7dmFyIGY9e2VsZW1lbnQ6ci5iZ1JlY3Qubm9kZSgpLGdkOmkscGxvdGluZm86e2lkOnIuaWQseGF4aXM6ci54YXhpcyx5YXhpczpyLnlheGlzLGZpbGxSYW5nZUl0ZW1zOnV9LHhheGVzOltyLnhheGlzXSx5YXhlczpbci55YXhpc10sc3VicGxvdDpyLmlkLGNsaWNrRm46ZnVuY3Rpb24odCl7Mj09PXQmJngoaSl9fTsicGFuIj09PW8/KGEubm9kZSgpLm9ubW91c2Vkb3duPW51bGwsYS5jYWxsKF8ocixlKSksYS5vbigiZGJsY2xpY2suem9vbSIsKGZ1bmN0aW9uKCl7dmFyIHQ9ci52aWV3SW5pdGlhbCxlPXt9O2Zvcih2YXIgbiBpbiB0KWVbci5pZCsiLiIrbl09dFtuXTtsLmNhbGwoIl9ndWlSZWxheW91dCIsaSxlKSxpLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCl9KSksaS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nZW98fGEub24oIndoZWVsLnpvb20iLG51bGwpKToic2VsZWN0IiE9PW8mJiJsYXNzbyIhPT1vfHwoYS5vbigiLnpvb20iLG51bGwpLGYucHJlcEZuPWZ1bmN0aW9uKHQsZSxyKXt5KHQsZSxyLGYsbyl9LHYuaW5pdChmKSksYS5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oKXt2YXIgdD1yLnByb2plY3Rpb24uaW52ZXJ0KGMuZ2V0UG9zaXRpb25Gcm9tRDNFdmVudCgpKTtpZighdClyZXR1cm4gdi51bmhvdmVyKGksbi5ldmVudCk7ci54YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFswXX0sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gdFsxXX0scC5ob3ZlcihpLG4uZXZlbnQsci5pZCl9KSksYS5vbigibW91c2VvdXQiLChmdW5jdGlvbigpe2kuX2RyYWdnaW5nfHx2LnVuaG92ZXIoaSxuLmV2ZW50KX0pKSxhLm9uKCJjbGljayIsKGZ1bmN0aW9uKCl7InNlbGVjdCIhPT1vJiYibGFzc28iIT09byYmKHMuaW5kZXhPZigic2VsZWN0Iik+LTEmJmIobi5ldmVudCxpLFtyLnhheGlzXSxbci55YXhpc10sci5pZCxmKSxzLmluZGV4T2YoImV2ZW50Iik+LTEmJnAuY2xpY2soaSxuLmV2ZW50KSl9KSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gci5wcm9qZWN0aW9uLmludmVydChbdFswXStyLnhheGlzLl9vZmZzZXQsdFsxXStyLnlheGlzLl9vZmZzZXRdKX19LFMubWFrZUZyYW1ld29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT10LmdyYXBoRGl2LHI9ZS5fZnVsbExheW91dCxpPSJjbGlwIityLl91aWQrdC5pZDt0LmNsaXBEZWY9ci5fY2xpcHMuYXBwZW5kKCJjbGlwUGF0aCIpLmF0dHIoImlkIixpKSx0LmNsaXBSZWN0PXQuY2xpcERlZi5hcHBlbmQoInJlY3QiKSx0LmZyYW1ld29yaz1uLnNlbGVjdCh0LmNvbnRhaW5lcikuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJnZW8gIit0LmlkKS5jYWxsKGguc2V0Q2xpcFVybCxpLGUpLHQucHJvamVjdD1mdW5jdGlvbihlKXt2YXIgcj10LnByb2plY3Rpb24oZSk7cmV0dXJuIHI/W3JbMF0tdC54YXhpcy5fb2Zmc2V0LHJbMV0tdC55YXhpcy5fb2Zmc2V0XTpbbnVsbCxudWxsXX0sdC54YXhpcz17X2lkOiJ4IixjMnA6ZnVuY3Rpb24oZSl7cmV0dXJuIHQucHJvamVjdChlKVswXX19LHQueWF4aXM9e19pZDoieSIsYzJwOmZ1bmN0aW9uKGUpe3JldHVybiB0LnByb2plY3QoZSlbMV19fSx0Lm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LG0uc2V0Q29udmVydCh0Lm1vY2tBeGlzLHIpfSxTLnNhdmVWaWV3SW5pdGlhbD1mdW5jdGlvbih0KXt2YXIgZSxyPXQuY2VudGVyfHx7fSxuPXQucHJvamVjdGlvbixpPW4ucm90YXRpb258fHt9O3RoaXMudmlld0luaXRpYWw9e2ZpdGJvdW5kczp0LmZpdGJvdW5kcywicHJvamVjdGlvbi5zY2FsZSI6bi5zY2FsZX0sZT10Ll9pc1Njb3BlZD97ImNlbnRlci5sb24iOnIubG9uLCJjZW50ZXIubGF0IjpyLmxhdH06dC5faXNDbGlwcGVkP3sicHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOmkubG9uLCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCI6aS5sYXR9OnsiY2VudGVyLmxvbiI6ci5sb24sImNlbnRlci5sYXQiOnIubGF0LCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiI6aS5sb259LGMuZXh0ZW5kRmxhdCh0aGlzLnZpZXdJbml0aWFsLGUpfSxTLnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5wcm9qZWN0aW9uLHI9ZS5nZXRQYXRoKCk7ZnVuY3Rpb24gbih0KXt2YXIgcj1lKHQubG9ubGF0KTtyZXR1cm4gcj91KHJbMF0sclsxXSk6bnVsbH1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmlzTG9uTGF0T3ZlckVkZ2VzKHQubG9ubGF0KT8ibm9uZSI6bnVsbH1mb3IodCBpbiB0aGlzLmJhc2VQYXRocyl0aGlzLmJhc2VQYXRoc1t0XS5hdHRyKCJkIixyKTtmb3IodCBpbiB0aGlzLmRhdGFQYXRocyl0aGlzLmRhdGFQYXRoc1t0XS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7cmV0dXJuIHIodC5nZW9qc29uKX0pKTtmb3IodCBpbiB0aGlzLmRhdGFQb2ludHMpdGhpcy5kYXRhUG9pbnRzW3RdLmF0dHIoImRpc3BsYXkiLGkpLmF0dHIoInRyYW5zZm9ybSIsbil9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyI6NzY5LCIuLi8uLi9saWIvdG9wb2pzb25fdXRpbHMiOjgwNSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uL3Bsb3RzIjo4OTAsIi4vY29uc3RhbnRzIjo4NTgsIi4vem9vbSI6ODYzLCJAcGxvdGx5L2QzIjo1OCwiZDMtZ2VvIjoxNjIsImQzLWdlby1wcm9qZWN0aW9uIjoxNjEsInRvcG9qc29uLWNsaWVudCI6NTc1fV0sODYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGk9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4LGE9dCgiLi9nZW8iKSxvPSJnZW8iLHM9aShvKSxsPXt9O2wuZ2VvPXt2YWxUeXBlOiJzdWJwbG90aWQiLGRmbHQ6byxlZGl0VHlwZToiY2FsYyJ9LGUuZXhwb3J0cz17YXR0cjpvLG5hbWU6byxpZFJvb3Q6byxpZFJlZ2V4OnMsYXR0clJlZ2V4OnMsYXR0cmlidXRlczpsLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIikscGxvdDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsaT1lLl9zdWJwbG90cy5nZW8scz0wO3M8aS5sZW5ndGg7cysrKXt2YXIgbD1pW3NdLGM9bihyLG8sbCksdT1lW2xdLl9zdWJwbG90O3V8fCh1PWEoe2lkOmwsZ3JhcGhEaXY6dCxjb250YWluZXI6ZS5fZ2VvbGF5ZXIubm9kZSgpLHRvcG9qc29uVVJMOnQuX2NvbnRleHQudG9wb2pzb25VUkwsc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3R9KSxlW2xdLl9zdWJwbG90PXUpLHUucGxvdChjLGUsdC5fcHJvbWlzZXMpfX0sdXBkYXRlRng6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5nZW8sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lW3Jbbl1dO2kuX3N1YnBsb3QudXBkYXRlRngoZSxpKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy5nZW98fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW5bb10uX3N1YnBsb3Q7IWVbb10mJnMmJihzLmZyYW1ld29yay5yZW1vdmUoKSxzLmNsaXBEZWYucmVtb3ZlKCkpfX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY0LCIuL2dlbyI6ODU5LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4NjEsIi4vbGF5b3V0X2RlZmF1bHRzIjo4NjJ9XSw4NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksaT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksbD17cmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIn0se3ZhbFR5cGU6Im51bWJlciJ9XX0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZHRpY2s6e3ZhbFR5cGU6Im51bWJlciJ9LGdyaWRjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5saWdodExpbmV9LGdyaWR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9fTsoZS5leHBvcnRzPW8oe2RvbWFpbjppKHtuYW1lOiJnZW8ifSx7fSksZml0Ym91bmRzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyExLCJsb2NhdGlvbnMiLCJnZW9qc29uIl0sZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHJlc29sdXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbMTEwLDUwXSxkZmx0OjExMCxjb2VyY2VOdW1iZXI6ITB9LHNjb3BlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyhhLnNjb3BlRGVmYXVsdHMpLGRmbHQ6IndvcmxkIn0scHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMoYS5wcm9qTmFtZXMpfSxyb3RhdGlvbjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9LHJvbGw6e3ZhbFR5cGU6Im51bWJlciJ9fSx0aWx0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sZGlzdGFuY2U6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEuMDAxLGRmbHQ6Mn0scGFyYWxsZWxzOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciJ9LHt2YWxUeXBlOiJudW1iZXIifV19LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX19LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIifSxsYXQ6e3ZhbFR5cGU6Im51bWJlciJ9fSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzaG93Y29hc3RsaW5lczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvYXN0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxjb2FzdGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjF9LHNob3dsYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYW5kY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEubGFuZENvbG9yfSxzaG93b2NlYW46e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9jZWFuY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd2xha2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsYWtlY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEud2F0ZXJDb2xvcn0sc2hvd3JpdmVyczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0scml2ZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS53YXRlckNvbG9yfSxyaXZlcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd2NvdW50cmllczp7dmFsVHlwZToiYm9vbGVhbiJ9LGNvdW50cnljb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5kZWZhdWx0TGluZX0sY291bnRyeXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sc2hvd3N1YnVuaXRzOnt2YWxUeXBlOiJib29sZWFuIn0sc3VidW5pdGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzdWJ1bml0d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxfSxzaG93ZnJhbWU6e3ZhbFR5cGU6ImJvb2xlYW4ifSxmcmFtZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxmcmFtZXdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MX0sYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxsb25heGlzOmwsbGF0YXhpczpsfSwicGxvdCIsImZyb20tcm9vdCIpKS51aXJldmlzaW9uPXt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIjo3OTksIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vZG9tYWluIjo4NTUsIi4vY29uc3RhbnRzIjo4NTh9XSw4NjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zdWJwbG90X2RlZmF1bHRzIiksYT10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLG89dCgiLi9jb25zdGFudHMiKSxzPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPW8uYXhlc05hbWVzO2Z1bmN0aW9uIGModCxlLHIsaSl7dmFyIHM9YShpLmZ1bGxEYXRhLCJnZW8iLGkuaWQpLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2V4cGFuZGVkSW5kZXh9KSksYz1yKCJyZXNvbHV0aW9uIiksdT1yKCJzY29wZSIpLGY9by5zY29wZURlZmF1bHRzW3VdLGg9cigicHJvamVjdGlvbi50eXBlIixmLnByb2pUeXBlKSxwPWUuX2lzQWxiZXJzVXNhPSJhbGJlcnMgdXNhIj09PWg7cCYmKHU9ZS5zY29wZT0idXNhIik7dmFyIGQ9ZS5faXNTY29wZWQ9IndvcmxkIiE9PXUsbT1lLl9pc1NhdGVsbGl0ZT0ic2F0ZWxsaXRlIj09PWgsZz1lLl9pc0NvbmljPS0xIT09aC5pbmRleE9mKCJjb25pYyIpfHwiYWxiZXJzIj09PWgsdj1lLl9pc0NsaXBwZWQ9ISFvLmxvbmF4aXNTcGFuW2hdO2lmKCExPT09dC52aXNpYmxlKXt2YXIgeT1uLmV4dGVuZERlZXAoe30sZS5fdGVtcGxhdGUpO3kuc2hvd2NvYXN0bGluZXM9ITEseS5zaG93Y291bnRyaWVzPSExLHkuc2hvd2ZyYW1lPSExLHkuc2hvd2xha2VzPSExLHkuc2hvd2xhbmQ9ITEseS5zaG93b2NlYW49ITEseS5zaG93cml2ZXJzPSExLHkuc2hvd3N1YnVuaXRzPSExLHkubG9uYXhpcyYmKHkubG9uYXhpcy5zaG93Z3JpZD0hMSkseS5sYXRheGlzJiYoeS5sYXRheGlzLnNob3dncmlkPSExKSxlLl90ZW1wbGF0ZT15fWZvcih2YXIgeD1yKCJ2aXNpYmxlIiksYj0wO2I8bC5sZW5ndGg7YisrKXt2YXIgXyx3PWxbYl0sVD1bMzAsMTBdW2JdO2lmKGQpXz1mW3crIlJhbmdlIl07ZWxzZXt2YXIgaz1vW3crIlNwYW4iXSxBPShrW2hdfHxrWyIqIl0pLzIsTT1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLiIrdy5zdWJzdHIoMCwzKSxmLnByb2pSb3RhdGVbYl0pO189W00tQSxNK0FdfXZhciBTPXIodysiLnJhbmdlIixfKTtyKHcrIi50aWNrMCIpLHIodysiLmR0aWNrIixUKSxyKHcrIi5zaG93Z3JpZCIsISF4JiZ2b2lkIDApJiYocih3KyIuZ3JpZGNvbG9yIikscih3KyIuZ3JpZHdpZHRoIikpLGVbd10uX2F4PXt0eXBlOiJsaW5lYXIiLF9pZDp3LnNsaWNlKDAsMyksX3RyYWNlSW5kaWNlczpzLHNldFNjYWxlOm4uaWRlbnRpdHksYzJsOm4uaWRlbnRpdHkscjJsOm4uaWRlbnRpdHksYXV0b3JhbmdlOiEwLHJhbmdlOlMuc2xpY2UoKSxfbToxLF9pbnB1dDp7fX19dmFyIEU9ZS5sb25heGlzLnJhbmdlLEw9ZS5sYXRheGlzLnJhbmdlLEM9RVswXSxQPUVbMV07Qz4wJiZQPDAmJihQKz0zNjApO3ZhciBJLE8seixEPShDK1ApLzI7aWYoIXApe3ZhciBSPWQ/Zi5wcm9qUm90YXRlOltELDAsMF07ST1yKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsUlswXSkscigicHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiLFJbMV0pLHIoInByb2plY3Rpb24ucm90YXRpb24ucm9sbCIsUlsyXSkscigic2hvd2NvYXN0bGluZXMiLCFkJiZ4KSYmKHIoImNvYXN0bGluZWNvbG9yIikscigiY29hc3RsaW5ld2lkdGgiKSkscigic2hvd29jZWFuIiwhIXgmJnZvaWQgMCkmJnIoIm9jZWFuY29sb3IiKX0ocD8oTz0tOTYuNix6PTM4LjcpOihPPWQ/RDpJLHo9KExbMF0rTFsxXSkvMikscigiY2VudGVyLmxvbiIsTykscigiY2VudGVyLmxhdCIseiksbSYmKHIoInByb2plY3Rpb24udGlsdCIpLHIoInByb2plY3Rpb24uZGlzdGFuY2UiKSksZykmJnIoInByb2plY3Rpb24ucGFyYWxsZWxzIixmLnByb2pQYXJhbGxlbHN8fFswLDYwXSk7cigicHJvamVjdGlvbi5zY2FsZSIpLHIoInNob3dsYW5kIiwhIXgmJnZvaWQgMCkmJnIoImxhbmRjb2xvciIpLHIoInNob3dsYWtlcyIsISF4JiZ2b2lkIDApJiZyKCJsYWtlY29sb3IiKSxyKCJzaG93cml2ZXJzIiwhIXgmJnZvaWQgMCkmJihyKCJyaXZlcmNvbG9yIikscigicml2ZXJ3aWR0aCIpKSxyKCJzaG93Y291bnRyaWVzIixkJiYidXNhIiE9PXUmJngpJiYocigiY291bnRyeWNvbG9yIikscigiY291bnRyeXdpZHRoIikpLCgidXNhIj09PXV8fCJub3J0aCBhbWVyaWNhIj09PXUmJjUwPT09YykmJihyKCJzaG93c3VidW5pdHMiLHgpLHIoInN1YnVuaXRjb2xvciIpLHIoInN1YnVuaXR3aWR0aCIpKSxkfHxyKCJzaG93ZnJhbWUiLHgpJiYocigiZnJhbWVjb2xvciIpLHIoImZyYW1ld2lkdGgiKSkscigiYmdjb2xvciIpLHIoImZpdGJvdW5kcyIpJiYoZGVsZXRlIGUucHJvamVjdGlvbi5zY2FsZSxkPyhkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQpOnY/KGRlbGV0ZSBlLmNlbnRlci5sb24sZGVsZXRlIGUuY2VudGVyLmxhdCxkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxvbixkZWxldGUgZS5wcm9qZWN0aW9uLnJvdGF0aW9uLmxhdCxkZWxldGUgZS5sb25heGlzLnJhbmdlLGRlbGV0ZSBlLmxhdGF4aXMucmFuZ2UpOihkZWxldGUgZS5jZW50ZXIubG9uLGRlbGV0ZSBlLmNlbnRlci5sYXQsZGVsZXRlIGUucHJvamVjdGlvbi5yb3RhdGlvbi5sb24pKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6ImdlbyIsYXR0cmlidXRlczpzLGhhbmRsZURlZmF1bHRzOmMsZnVsbERhdGE6cixwYXJ0aXRpb246InkifSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9nZXRfZGF0YSI6ODY0LCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4OTgsIi4vY29uc3RhbnRzIjo4NTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg2MX1dLDg2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz1NYXRoLlBJLzE4MCxzPTE4MC9NYXRoLlBJLGw9e2N1cnNvcjoicG9pbnRlciJ9LGM9e2N1cnNvcjoiYXV0byJ9O2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gbi5iZWhhdmlvci56b29tKCkudHJhbnNsYXRlKGUudHJhbnNsYXRlKCkpLnNjYWxlKGUuc2NhbGUoKSl9ZnVuY3Rpb24gZih0LGUscil7dmFyIG49dC5pZCxvPXQuZ3JhcGhEaXYscz1vLmxheW91dCxsPXNbbl0sYz1vLl9mdWxsTGF5b3V0LHU9Y1tuXSxmPXt9LGg9e307ZnVuY3Rpb24gcCh0LGUpe2ZbbisiLiIrdF09aS5uZXN0ZWRQcm9wZXJ0eShsLHQpLmdldCgpLGEuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIscyxjLl9wcmVHVUksZik7dmFyIHI9aS5uZXN0ZWRQcm9wZXJ0eSh1LHQpO3IuZ2V0KCkhPT1lJiYoci5zZXQoZSksaS5uZXN0ZWRQcm9wZXJ0eShsLHQpLnNldChlKSxoW24rIi4iK3RdPWUpfXIocCkscCgicHJvamVjdGlvbi5zY2FsZSIsZS5zY2FsZSgpL3QuZml0U2NhbGUpLHAoImZpdGJvdW5kcyIsITEpLG8uZW1pdCgicGxvdGx5X3JlbGF5b3V0IixoKX1mdW5jdGlvbiBoKHQsZSl7dmFyIHI9dSgwLGUpO2Z1bmN0aW9uIGkocil7dmFyIG49ZS5pbnZlcnQodC5taWRQdCk7cigiY2VudGVyLmxvbiIsblswXSkscigiY2VudGVyLmxhdCIsblsxXSl9cmV0dXJuIHIub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCl9KSkub24oInpvb20iLChmdW5jdGlvbigpe2Uuc2NhbGUobi5ldmVudC5zY2FsZSkudHJhbnNsYXRlKG4uZXZlbnQudHJhbnNsYXRlKSx0LnJlbmRlcigpO3ZhciByPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOnJbMF0sImdlby5jZW50ZXIubGF0IjpyWzFdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLGYodCxlLGkpfSkpLHJ9ZnVuY3Rpb24gcCh0LGUpe3ZhciByLGksYSxvLHMsaCxwLGQsbSxnPXUoMCxlKTtmdW5jdGlvbiB2KHQpe3JldHVybiBlLmludmVydCh0KX1mdW5jdGlvbiB5KHIpe3ZhciBuPWUucm90YXRlKCksaT1lLmludmVydCh0Lm1pZFB0KTtyKCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLW5bMF0pLHIoImNlbnRlci5sb24iLGlbMF0pLHIoImNlbnRlci5sYXQiLGlbMV0pfXJldHVybiBnLm9uKCJ6b29tc3RhcnQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGwpLHI9bi5tb3VzZSh0aGlzKSxpPWUucm90YXRlKCksYT1lLnRyYW5zbGF0ZSgpLG89aSxzPXYocil9KSkub24oInpvb20iLChmdW5jdGlvbigpe2lmKGg9bi5tb3VzZSh0aGlzKSxmdW5jdGlvbih0KXt2YXIgcj12KHQpO2lmKCFyKXJldHVybiEwO3ZhciBuPWUocik7cmV0dXJuIE1hdGguYWJzKG5bMF0tdFswXSk+Mnx8TWF0aC5hYnMoblsxXS10WzFdKT4yfShyKSlyZXR1cm4gZy5zY2FsZShlLnNjYWxlKCkpLHZvaWQgZy50cmFuc2xhdGUoZS50cmFuc2xhdGUoKSk7ZS5zY2FsZShuLmV2ZW50LnNjYWxlKSxlLnRyYW5zbGF0ZShbYVswXSxuLmV2ZW50LnRyYW5zbGF0ZVsxXV0pLHM/dihoKSYmKGQ9dihoKSxwPVtvWzBdKyhkWzBdLXNbMF0pLGlbMV0saVsyXV0sZS5yb3RhdGUocCksbz1wKTpzPXYocj1oKSxtPSEwLHQucmVuZGVyKCk7dmFyIGw9ZS5yb3RhdGUoKSxjPWUuaW52ZXJ0KHQubWlkUHQpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIix7Imdlby5wcm9qZWN0aW9uLnNjYWxlIjplLnNjYWxlKCkvdC5maXRTY2FsZSwiZ2VvLmNlbnRlci5sb24iOmNbMF0sImdlby5jZW50ZXIubGF0IjpjWzFdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1sWzBdfSl9KSkub24oInpvb21lbmQiLChmdW5jdGlvbigpe24uc2VsZWN0KHRoaXMpLnN0eWxlKGMpLG0mJmYodCxlLHkpfSkpLGd9ZnVuY3Rpb24gZCh0LGUpe3ZhciByLGk9e3I6ZS5yb3RhdGUoKSxrOmUuc2NhbGUoKX0sYT11KDAsZSksbz1mdW5jdGlvbih0KXt2YXIgZT0wLHI9YXJndW1lbnRzLmxlbmd0aCxpPVtdO2Zvcig7KytlPHI7KWkucHVzaChhcmd1bWVudHNbZV0pO3ZhciBhPW4uZGlzcGF0Y2guYXBwbHkobnVsbCxpKTtyZXR1cm4gYS5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbzt0cnl7bz1pLnNvdXJjZUV2ZW50PW4uZXZlbnQsaS50YXJnZXQ9dCxuLmV2ZW50PWksYVtpLnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtuLmV2ZW50PW99fX0sYX0oYSwiem9vbXN0YXJ0Iiwiem9vbSIsInpvb21lbmQiKSxzPTAsaD1hLm9uO2Z1bmN0aW9uIHAodCl7cysrfHx0KHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gZCh0KXt0KHt0eXBlOiJ6b29tIn0pfWZ1bmN0aW9uIGIodCl7LS1zfHx0KHt0eXBlOiJ6b29tZW5kIn0pfWZ1bmN0aW9uIF8odCl7dmFyIHI9ZS5yb3RhdGUoKTt0KCJwcm9qZWN0aW9uLnJvdGF0aW9uLmxvbiIsLXJbMF0pLHQoInByb2plY3Rpb24ucm90YXRpb24ubGF0IiwtclsxXSl9cmV0dXJuIGEub24oInpvb21zdGFydCIsKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc3R5bGUobCk7dmFyIHQ9bi5tb3VzZSh0aGlzKSxzPWUucm90YXRlKCksYz1zLHU9ZS50cmFuc2xhdGUoKSxmPWcocyk7cj1tKGUsdCksaC5jYWxsKGEsInpvb20iLChmdW5jdGlvbigpe3ZhciBhPW4ubW91c2UodGhpcyk7aWYoZS5zY2FsZShpLms9bi5ldmVudC5zY2FsZSkscil7aWYobShlLGEpKXtlLnJvdGF0ZShzKS50cmFuc2xhdGUodSk7dmFyIGw9bShlLGEpLGg9eShyLGwpLHA9VCh2KGYsaCkpLGc9aS5yPXgocCxyLGMpO2lzRmluaXRlKGdbMF0pJiZpc0Zpbml0ZShnWzFdKSYmaXNGaW5pdGUoZ1syXSl8fChnPWMpLGUucm90YXRlKGcpLGM9Z319ZWxzZSByPW0oZSx0PWEpO2Qoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLHAoby5vZih0aGlzLGFyZ3VtZW50cykpfSkpLm9uKCJ6b29tZW5kIiwoZnVuY3Rpb24oKXtuLnNlbGVjdCh0aGlzKS5zdHlsZShjKSxoLmNhbGwoYSwiem9vbSIsbnVsbCksYihvLm9mKHRoaXMsYXJndW1lbnRzKSksZih0LGUsXyl9KSkub24oInpvb20ucmVkcmF3IiwoZnVuY3Rpb24oKXt0LnJlbmRlcigpO3ZhciByPWUucm90YXRlKCk7dC5ncmFwaERpdi5lbWl0KCJwbG90bHlfcmVsYXlvdXRpbmciLHsiZ2VvLnByb2plY3Rpb24uc2NhbGUiOmUuc2NhbGUoKS90LmZpdFNjYWxlLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sb24iOi1yWzBdLCJnZW8ucHJvamVjdGlvbi5yb3RhdGlvbi5sYXQiOi1yWzFdfSl9KSksbi5yZWJpbmQoYSxvLCJvbiIpfWZ1bmN0aW9uIG0odCxlKXt2YXIgcj10LmludmVydChlKTtyZXR1cm4gciYmaXNGaW5pdGUoclswXSkmJmlzRmluaXRlKHJbMV0pJiZmdW5jdGlvbih0KXt2YXIgZT10WzBdKm8scj10WzFdKm8sbj1NYXRoLmNvcyhyKTtyZXR1cm5bbipNYXRoLmNvcyhlKSxuKk1hdGguc2luKGUpLE1hdGguc2luKHIpXX0ocil9ZnVuY3Rpb24gZyh0KXt2YXIgZT0uNSp0WzBdKm8scj0uNSp0WzFdKm8sbj0uNSp0WzJdKm8saT1NYXRoLnNpbihlKSxhPU1hdGguY29zKGUpLHM9TWF0aC5zaW4ociksbD1NYXRoLmNvcyhyKSxjPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobik7cmV0dXJuW2EqbCp1K2kqcypjLGkqbCp1LWEqcypjLGEqcyp1K2kqbCpjLGEqbCpjLWkqcyp1XX1mdW5jdGlvbiB2KHQsZSl7dmFyIHI9dFswXSxuPXRbMV0saT10WzJdLGE9dFszXSxvPWVbMF0scz1lWzFdLGw9ZVsyXSxjPWVbM107cmV0dXJuW3Iqby1uKnMtaSpsLWEqYyxyKnMrbipvK2kqYy1hKmwscipsLW4qYytpKm8rYSpzLHIqYytuKmwtaSpzK2Eqb119ZnVuY3Rpb24geSh0LGUpe2lmKHQmJmUpe3ZhciByPWZ1bmN0aW9uKHQsZSl7cmV0dXJuW3RbMV0qZVsyXS10WzJdKmVbMV0sdFsyXSplWzBdLXRbMF0qZVsyXSx0WzBdKmVbMV0tdFsxXSplWzBdXX0odCxlKSxuPU1hdGguc3FydChrKHIscikpLGk9LjUqTWF0aC5hY29zKE1hdGgubWF4KC0xLE1hdGgubWluKDEsayh0LGUpKSkpLGE9TWF0aC5zaW4oaSkvbjtyZXR1cm4gbiYmW01hdGguY29zKGkpLHJbMl0qYSwtclsxXSphLHJbMF0qYV19fWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuPXcoZSwyLHRbMF0pO249dyhuLDEsdFsxXSksbj13KG4sMCx0WzJdLXJbMl0pO3ZhciBpLGEsbz1lWzBdLGw9ZVsxXSxjPWVbMl0sdT1uWzBdLGY9blsxXSxoPW5bMl0scD1NYXRoLmF0YW4yKGwsbykqcyxkPU1hdGguc3FydChvKm8rbCpsKTtNYXRoLmFicyhmKT5kPyhhPShmPjA/OTA6LTkwKS1wLGk9MCk6KGE9TWF0aC5hc2luKGYvZCkqcy1wLGk9TWF0aC5zcXJ0KGQqZC1mKmYpKTt2YXIgbT0xODAtYS0yKnAsZz0oTWF0aC5hdGFuMihoLHUpLU1hdGguYXRhbjIoYyxpKSkqcyx2PShNYXRoLmF0YW4yKGgsdSktTWF0aC5hdGFuMihjLC1pKSkqcztyZXR1cm4gYihyWzBdLHJbMV0sYSxnKTw9YihyWzBdLHJbMV0sbSx2KT9bYSxnLHJbMl1dOlttLHYsclsyXV19ZnVuY3Rpb24gYih0LGUscixuKXt2YXIgaT1fKHItdCksYT1fKG4tZSk7cmV0dXJuIE1hdGguc3FydChpKmkrYSphKX1mdW5jdGlvbiBfKHQpe3JldHVybih0JTM2MCs1NDApJTM2MC0xODB9ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49cipvLGk9dC5zbGljZSgpLGE9MD09PWU/MTowLHM9Mj09PWU/MToyLGw9TWF0aC5jb3MobiksYz1NYXRoLnNpbihuKTtyZXR1cm4gaVthXT10W2FdKmwtdFtzXSpjLGlbc109dFtzXSpsK3RbYV0qYyxpfWZ1bmN0aW9uIFQodCl7cmV0dXJuW01hdGguYXRhbjIoMioodFswXSp0WzFdK3RbMl0qdFszXSksMS0yKih0WzFdKnRbMV0rdFsyXSp0WzJdKSkqcyxNYXRoLmFzaW4oTWF0aC5tYXgoLTEsTWF0aC5taW4oMSwyKih0WzBdKnRbMl0tdFszXSp0WzFdKSkpKSpzLE1hdGguYXRhbjIoMioodFswXSp0WzNdK3RbMV0qdFsyXSksMS0yKih0WzJdKnRbMl0rdFszXSp0WzNdKSkqc119ZnVuY3Rpb24gayh0LGUpe2Zvcih2YXIgcj0wLG49MCxpPXQubGVuZ3RoO248aTsrK24pcis9dFtuXSplW25dO3JldHVybiByfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQucHJvamVjdGlvbjtyZXR1cm4oZS5faXNTY29wZWQ/aDplLl9pc0NsaXBwZWQ/ZDpwKSh0LHIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiQHBsb3RseS9kMyI6NTh9XSw4NjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKSxpPXQoIi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLlNVQlBMT1RfUEFUVEVSTjtyLmdldFN1YnBsb3RDYWxjRGF0YT1mdW5jdGlvbih0LGUscil7dmFyIGk9bi5zdWJwbG90c1JlZ2lzdHJ5W2VdO2lmKCFpKXJldHVybltdO2Zvcih2YXIgYT1pLmF0dHIsbz1bXSxzPTA7czx0Lmxlbmd0aDtzKyspe3ZhciBsPXRbc107bFswXS50cmFjZVthXT09PXImJm8ucHVzaChsKX1yZXR1cm4gb30sci5nZXRNb2R1bGVDYWxjRGF0YT1mdW5jdGlvbih0LGUpe3ZhciByLGk9W10sYT1bXTtpZighKHI9InN0cmluZyI9PXR5cGVvZiBlP24uZ2V0TW9kdWxlKGUpLnBsb3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTplLnBsb3QpKXJldHVybltpLHRdO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgcz10W29dLGw9c1swXS50cmFjZTshMD09PWwudmlzaWJsZSYmMCE9PWwuX2xlbmd0aCYmKGwuX21vZHVsZS5wbG90PT09cj9pLnB1c2gocyk6YS5wdXNoKHMpKX1yZXR1cm5baSxhXX0sci5nZXRTdWJwbG90RGF0YT1mdW5jdGlvbih0LGUscil7aWYoIW4uc3VicGxvdHNSZWdpc3RyeVtlXSlyZXR1cm5bXTt2YXIgYSxvLHMsbD1uLnN1YnBsb3RzUmVnaXN0cnlbZV0uYXR0cixjPVtdO2lmKCJnbDJkIj09PWUpe3ZhciB1PXIubWF0Y2goaSk7bz0ieCIrdVsxXSxzPSJ5Iit1WzJdfWZvcih2YXIgZj0wO2Y8dC5sZW5ndGg7ZisrKWE9dFtmXSwiZ2wyZCI9PT1lJiZuLnRyYWNlSXMoYSwiZ2wyZCIpP2FbbFswXV09PT1vJiZhW2xbMV1dPT09cyYmYy5wdXNoKGEpOmFbbF09PT1yJiZjLnB1c2goYSk7cmV0dXJuIGN9fSx7Ii4uL3JlZ2lzdHJ5Ijo5MDQsIi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0fV0sODY1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1vdXNlLWNoYW5nZSIpLGk9dCgibW91c2Utd2hlZWwiKSxhPXQoIm1vdXNlLWV2ZW50LW9mZnNldCIpLG89dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpLHM9dCgiaGFzLXBhc3NpdmUtZXZlbnRzIik7ZnVuY3Rpb24gbCh0LGUpe3RoaXMuZWxlbWVudD10LHRoaXMucGxvdD1lLHRoaXMubW91c2VMaXN0ZW5lcj1udWxsLHRoaXMud2hlZWxMaXN0ZW5lcj1udWxsLHRoaXMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHRoaXMubGFzdFBvcz1bMCwwXSx0aGlzLmJveEVuYWJsZWQ9ITEsdGhpcy5ib3hJbml0ZWQ9ITEsdGhpcy5ib3hTdGFydD1bMCwwXSx0aGlzLmJveEVuZD1bMCwwXSx0aGlzLmRyYWdTdGFydD1bMCwwXX1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5tb3VzZUNvbnRhaW5lcixyPXQuZ2xwbG90LGM9bmV3IGwoZSxyKTtmdW5jdGlvbiB1KCl7dC54YXhpcy5hdXRvcmFuZ2U9ITEsdC55YXhpcy5hdXRvcmFuZ2U9ITF9ZnVuY3Rpb24gZihlLG4saSl7dmFyIGEscyxsPXQuY2FsY0RhdGFCb3goKSxmPXIudmlld0JveCxoPWMubGFzdFBvc1swXSxwPWMubGFzdFBvc1sxXSxkPW8uTUlORFJBRypyLnBpeGVsUmF0aW8sbT1vLk1JTlpPT00qci5waXhlbFJhdGlvO2Z1bmN0aW9uIGcoZSxyLG4pe3ZhciBpPU1hdGgubWluKHIsbiksYT1NYXRoLm1heChyLG4pO2khPT1hPyhsW2VdPWksbFtlKzJdPWEsYy5kYXRhQm94PWwsdC5zZXRSYW5nZXMobCkpOih0LnNlbGVjdEJveC5zZWxlY3RCb3g9WzAsMCwxLDFdLHQuZ2xwbG90LnNldERpcnR5KCkpfXN3aXRjaChuKj1yLnBpeGVsUmF0aW8saSo9ci5waXhlbFJhdGlvLGk9ZlszXS1mWzFdLWksdC5mdWxsTGF5b3V0LmRyYWdtb2RlKXtjYXNlInpvb20iOmlmKGUpe3ZhciB2PW4vKGZbMl0tZlswXSkqKGxbMl0tbFswXSkrbFswXSx5PWkvKGZbM10tZlsxXSkqKGxbM10tbFsxXSkrbFsxXTtjLmJveEluaXRlZHx8KGMuYm94U3RhcnRbMF09dixjLmJveFN0YXJ0WzFdPXksYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxjLmJveEVuZFswXT12LGMuYm94RW5kWzFdPXksYy5ib3hJbml0ZWQ9ITAsYy5ib3hFbmFibGVkfHxjLmJveFN0YXJ0WzBdPT09Yy5ib3hFbmRbMF0mJmMuYm94U3RhcnRbMV09PT1jLmJveEVuZFsxXXx8KGMuYm94RW5hYmxlZD0hMCk7dmFyIHg9TWF0aC5hYnMoYy5kcmFnU3RhcnRbMF0tbik8bSxiPU1hdGguYWJzKGMuZHJhZ1N0YXJ0WzFdLWkpPG07aWYoIWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXQuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQuX2F4aXNDb25zdHJhaW50R3JvdXBzLHI9dC54YXhpcy5faWQsbj10LnlheGlzLl9pZCxpPTA7aTxlLmxlbmd0aDtpKyspaWYoLTEhPT1lW2ldW3JdKXtpZigtMSE9PWVbaV1bbl0pcmV0dXJuITA7YnJlYWt9cmV0dXJuITF9KCl8fHgmJmIpeCYmKGMuYm94RW5kWzBdPWMuYm94U3RhcnRbMF0pLGImJihjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKTtlbHNle2E9Yy5ib3hFbmRbMF0tYy5ib3hTdGFydFswXSxzPWMuYm94RW5kWzFdLWMuYm94U3RhcnRbMV07dmFyIF89KGxbM10tbFsxXSkvKGxbMl0tbFswXSk7TWF0aC5hYnMoYSpfKT5NYXRoLmFicyhzKT8oYy5ib3hFbmRbMV09Yy5ib3hTdGFydFsxXStNYXRoLmFicyhhKSpfKihzPj0wPzE6LTEpLGMuYm94RW5kWzFdPGxbMV0/KGMuYm94RW5kWzFdPWxbMV0sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFsxXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSk6Yy5ib3hFbmRbMV0+bFszXSYmKGMuYm94RW5kWzFdPWxbM10sYy5ib3hFbmRbMF09Yy5ib3hTdGFydFswXSsobFszXS1jLmJveFN0YXJ0WzFdKS9NYXRoLmFicyhfKSkpOihjLmJveEVuZFswXT1jLmJveFN0YXJ0WzBdK01hdGguYWJzKHMpL18qKGE+PTA/MTotMSksYy5ib3hFbmRbMF08bFswXT8oYy5ib3hFbmRbMF09bFswXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzBdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKTpjLmJveEVuZFswXT5sWzJdJiYoYy5ib3hFbmRbMF09bFsyXSxjLmJveEVuZFsxXT1jLmJveFN0YXJ0WzFdKyhsWzJdLWMuYm94U3RhcnRbMF0pKk1hdGguYWJzKF8pKSl9fWVsc2UgYy5ib3hFbmFibGVkPyhhPWMuYm94U3RhcnRbMF0hPT1jLmJveEVuZFswXSxzPWMuYm94U3RhcnRbMV0hPT1jLmJveEVuZFsxXSxhfHxzPyhhJiYoZygwLGMuYm94U3RhcnRbMF0sYy5ib3hFbmRbMF0pLHQueGF4aXMuYXV0b3JhbmdlPSExKSxzJiYoZygxLGMuYm94U3RhcnRbMV0sYy5ib3hFbmRbMV0pLHQueWF4aXMuYXV0b3JhbmdlPSExKSx0LnJlbGF5b3V0Q2FsbGJhY2soKSk6dC5nbHBsb3Quc2V0RGlydHkoKSxjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEpOmMuYm94SW5pdGVkJiYoYy5ib3hJbml0ZWQ9ITEpO2JyZWFrO2Nhc2UicGFuIjpjLmJveEVuYWJsZWQ9ITEsYy5ib3hJbml0ZWQ9ITEsZT8oYy5wYW5uaW5nfHwoYy5kcmFnU3RhcnRbMF09bixjLmRyYWdTdGFydFsxXT1pKSxNYXRoLmFicyhjLmRyYWdTdGFydFswXS1uKTxkJiYobj1jLmRyYWdTdGFydFswXSksTWF0aC5hYnMoYy5kcmFnU3RhcnRbMV0taSk8ZCYmKGk9Yy5kcmFnU3RhcnRbMV0pLGE9KGgtbikqKGxbMl0tbFswXSkvKHIudmlld0JveFsyXS1yLnZpZXdCb3hbMF0pLHM9KHAtaSkqKGxbM10tbFsxXSkvKHIudmlld0JveFszXS1yLnZpZXdCb3hbMV0pLGxbMF0rPWEsbFsyXSs9YSxsWzFdKz1zLGxbM10rPXMsdC5zZXRSYW5nZXMobCksYy5wYW5uaW5nPSEwLGMubGFzdElucHV0VGltZT1EYXRlLm5vdygpLHUoKSx0LmNhbWVyYUNoYW5nZWQoKSx0LmhhbmRsZUFubm90YXRpb25zKCkpOmMucGFubmluZyYmKGMucGFubmluZz0hMSx0LnJlbGF5b3V0Q2FsbGJhY2soKSl9Yy5sYXN0UG9zWzBdPW4sYy5sYXN0UG9zWzFdPWl9cmV0dXJuIGMubW91c2VMaXN0ZW5lcj1uKGUsZiksZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwoZnVuY3Rpb24odCl7dmFyIHI9YSh0LmNoYW5nZWRUb3VjaGVzWzBdLGUpO2YoMCxyWzBdLHJbMV0pLGYoMSxyWzBdLHJbMV0pLHQucHJldmVudERlZmF1bHQoKX0pLCEhcyYme3Bhc3NpdmU6ITF9KSxlLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgcj1hKHQuY2hhbmdlZFRvdWNoZXNbMF0sZSk7ZigxLHJbMF0sclsxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLChmdW5jdGlvbih0KXtmKDAsYy5sYXN0UG9zWzBdLGMubGFzdFBvc1sxXSksdC5wcmV2ZW50RGVmYXVsdCgpfSksISFzJiZ7cGFzc2l2ZTohMX0pLGMud2hlZWxMaXN0ZW5lcj1pKGUsKGZ1bmN0aW9uKGUsbil7aWYoIXQuc2Nyb2xsWm9vbSlyZXR1cm4hMTt2YXIgaT10LmNhbGNEYXRhQm94KCksYT1yLnZpZXdCb3gsbz1jLmxhc3RQb3NbMF0scz1jLmxhc3RQb3NbMV0sbD1NYXRoLmV4cCg1Km4vKGFbM10tYVsxXSkpLGY9by8oYVsyXS1hWzBdKSooaVsyXS1pWzBdKStpWzBdLGg9cy8oYVszXS1hWzFdKSooaVszXS1pWzFdKStpWzFdO3JldHVybiBpWzBdPShpWzBdLWYpKmwrZixpWzJdPShpWzJdLWYpKmwrZixpWzFdPShpWzFdLWgpKmwraCxpWzNdPShpWzNdLWgpKmwraCx0LnNldFJhbmdlcyhpKSxjLmxhc3RJbnB1dFRpbWU9RGF0ZS5ub3coKSx1KCksdC5jYW1lcmFDaGFuZ2VkKCksdC5oYW5kbGVBbm5vdGF0aW9ucygpLHQucmVsYXlvdXRDYWxsYmFjaygpLCEwfSksITApLGN9fSx7Ii4uL2NhcnRlc2lhbi9jb25zdGFudHMiOjgzNCwiaGFzLXBhc3NpdmUtZXZlbnRzIjo0MjYsIm1vdXNlLWNoYW5nZSI6NDQ5LCJtb3VzZS1ldmVudC1vZmZzZXQiOjQ1MCwibW91c2Utd2hlZWwiOjQ1Mn1dLDg2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIGEodCl7dGhpcy5zY2VuZT10LHRoaXMuZ2w9dC5nbCx0aGlzLnBpeGVsUmF0aW89dC5waXhlbFJhdGlvLHRoaXMuc2NyZWVuQm94PVswLDAsMSwxXSx0aGlzLnZpZXdCb3g9WzAsMCwxLDFdLHRoaXMuZGF0YUJveD1bLTEsLTEsMSwxXSx0aGlzLmJvcmRlckxpbmVFbmFibGU9WyExLCExLCExLCExXSx0aGlzLmJvcmRlckxpbmVXaWR0aD1bMSwxLDEsMV0sdGhpcy5ib3JkZXJMaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrcz1bW10sW11dLHRoaXMudGlja0VuYWJsZT1bITAsITAsITEsITFdLHRoaXMudGlja1BhZD1bMTUsMTUsMTUsMTVdLHRoaXMudGlja0FuZ2xlPVswLDAsMCwwXSx0aGlzLnRpY2tDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpY2tNYXJrTGVuZ3RoPVswLDAsMCwwXSx0aGlzLnRpY2tNYXJrV2lkdGg9WzAsMCwwLDBdLHRoaXMudGlja01hcmtDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLmxhYmVscz1bIngiLCJ5Il0sdGhpcy5sYWJlbEVuYWJsZT1bITAsITAsITEsITFdLHRoaXMubGFiZWxBbmdsZT1bMCxNYXRoLlBJLzIsMCwzKk1hdGguUEkvMl0sdGhpcy5sYWJlbFBhZD1bMTUsMTUsMTUsMTVdLHRoaXMubGFiZWxTaXplPVsxMiwxMl0sdGhpcy5sYWJlbEZvbnQ9WyJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV0sWzAsMCwwLDFdXSx0aGlzLnRpdGxlPSIiLHRoaXMudGl0bGVFbmFibGU9ITAsdGhpcy50aXRsZUNlbnRlcj1bMCwwLDAsMF0sdGhpcy50aXRsZUFuZ2xlPTAsdGhpcy50aXRsZUNvbG9yPVswLDAsMCwxXSx0aGlzLnRpdGxlRm9udD0ic2Fucy1zZXJpZiIsdGhpcy50aXRsZVNpemU9MTgsdGhpcy5ncmlkTGluZUVuYWJsZT1bITAsITBdLHRoaXMuZ3JpZExpbmVDb2xvcj1bWzAsMCwwLC41XSxbMCwwLDAsLjVdXSx0aGlzLmdyaWRMaW5lV2lkdGg9WzEsMV0sdGhpcy56ZXJvTGluZUVuYWJsZT1bITAsITBdLHRoaXMuemVyb0xpbmVXaWR0aD1bMSwxXSx0aGlzLnplcm9MaW5lQ29sb3I9W1swLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuYm9yZGVyQ29sb3I9WzAsMCwwLDBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVswLDAsMCwwXSx0aGlzLnN0YXRpYz10aGlzLnNjZW5lLnN0YXRpY1Bsb3R9dmFyIG89YS5wcm90b3R5cGUscz1bInhheGlzIiwieWF4aXMiXTtvLm1lcmdlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLG8sbCxjLHUsZixoLHA7Zm9yKHRoaXMudGl0bGVFbmFibGU9ITEsdGhpcy5iYWNrZ3JvdW5kQ29sb3I9aSh0LnBsb3RfYmdjb2xvciksaD0wO2g8MjsrK2gpe3ZhciBkPShlPXNbaF0pLmNoYXJBdCgwKTtmb3Iobj0ocj10W3RoaXMuc2NlbmVbZV0uX25hbWVdKS50aXRsZS50ZXh0PT09dGhpcy5zY2VuZS5mdWxsTGF5b3V0Ll9kZmx0VGl0bGVbZF0/IiI6ci50aXRsZS50ZXh0LHA9MDtwPD0yO3ArPTIpdGhpcy5sYWJlbEVuYWJsZVtoK3BdPSExLHRoaXMubGFiZWxzW2grcF09bix0aGlzLmxhYmVsQ29sb3JbaCtwXT1pKHIudGl0bGUuZm9udC5jb2xvciksdGhpcy5sYWJlbEZvbnRbaCtwXT1yLnRpdGxlLmZvbnQuZmFtaWx5LHRoaXMubGFiZWxTaXplW2grcF09ci50aXRsZS5mb250LnNpemUsdGhpcy5sYWJlbFBhZFtoK3BdPXRoaXMuZ2V0TGFiZWxQYWQoZSxyKSx0aGlzLnRpY2tFbmFibGVbaCtwXT0hMSx0aGlzLnRpY2tDb2xvcltoK3BdPWkoKHIudGlja2ZvbnR8fHt9KS5jb2xvciksdGhpcy50aWNrQW5nbGVbaCtwXT0iYXV0byI9PT1yLnRpY2thbmdsZT8wOk1hdGguUEkqLXIudGlja2FuZ2xlLzE4MCx0aGlzLnRpY2tQYWRbaCtwXT10aGlzLmdldFRpY2tQYWQociksdGhpcy50aWNrTWFya0xlbmd0aFtoK3BdPTAsdGhpcy50aWNrTWFya1dpZHRoW2grcF09ci50aWNrd2lkdGh8fDAsdGhpcy50aWNrTWFya0NvbG9yW2grcF09aShyLnRpY2tjb2xvciksdGhpcy5ib3JkZXJMaW5lRW5hYmxlW2grcF09ITEsdGhpcy5ib3JkZXJMaW5lQ29sb3JbaCtwXT1pKHIubGluZWNvbG9yKSx0aGlzLmJvcmRlckxpbmVXaWR0aFtoK3BdPXIubGluZXdpZHRofHwwO2M9dGhpcy5oYXNTaGFyZWRBeGlzKHIpLG89dGhpcy5oYXNBeGlzSW5EZmx0UG9zKGUscikmJiFjLGw9dGhpcy5oYXNBeGlzSW5BbHRyUG9zKGUscikmJiFjLGE9ci5taXJyb3J8fCExLHU9Yz8tMSE9PVN0cmluZyhhKS5pbmRleE9mKCJhbGwiKTohIWEsZj1jPyJhbGx0aWNrcyI9PT1hOi0xIT09U3RyaW5nKGEpLmluZGV4T2YoInRpY2tzIiksbz90aGlzLmxhYmVsRW5hYmxlW2hdPSEwOmwmJih0aGlzLmxhYmVsRW5hYmxlW2grMl09ITApLG8/dGhpcy50aWNrRW5hYmxlW2hdPXIuc2hvd3RpY2tsYWJlbHM6bCYmKHRoaXMudGlja0VuYWJsZVtoKzJdPXIuc2hvd3RpY2tsYWJlbHMpLChvfHx1KSYmKHRoaXMuYm9yZGVyTGluZUVuYWJsZVtoXT1yLnNob3dsaW5lKSwobHx8dSkmJih0aGlzLmJvcmRlckxpbmVFbmFibGVbaCsyXT1yLnNob3dsaW5lKSwob3x8ZikmJih0aGlzLnRpY2tNYXJrTGVuZ3RoW2hdPXRoaXMuZ2V0VGlja01hcmtMZW5ndGgocikpLChsfHxmKSYmKHRoaXMudGlja01hcmtMZW5ndGhbaCsyXT10aGlzLmdldFRpY2tNYXJrTGVuZ3RoKHIpKSx0aGlzLmdyaWRMaW5lRW5hYmxlW2hdPXIuc2hvd2dyaWQsdGhpcy5ncmlkTGluZUNvbG9yW2hdPWkoci5ncmlkY29sb3IpLHRoaXMuZ3JpZExpbmVXaWR0aFtoXT1yLmdyaWR3aWR0aCx0aGlzLnplcm9MaW5lRW5hYmxlW2hdPXIuemVyb2xpbmUsdGhpcy56ZXJvTGluZUNvbG9yW2hdPWkoci56ZXJvbGluZWNvbG9yKSx0aGlzLnplcm9MaW5lV2lkdGhbaF09ci56ZXJvbGluZXdpZHRofX0sby5oYXNTaGFyZWRBeGlzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxMYXlvdXQuX3N1YnBsb3RzLmdsMmQ7cmV0dXJuIDAhPT1uLmZpbmRTdWJwbG90c1dpdGhBeGlzKHIsdCkuaW5kZXhPZihlLmlkKX0sby5oYXNBeGlzSW5EZmx0UG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJib3R0b20iPT09cjoieWF4aXMiPT09dD8ibGVmdCI9PT1yOnZvaWQgMH0sby5oYXNBeGlzSW5BbHRyUG9zPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5zaWRlO3JldHVybiJ4YXhpcyI9PT10PyJ0b3AiPT09cjoieWF4aXMiPT09dD8icmlnaHQiPT09cjp2b2lkIDB9LG8uZ2V0TGFiZWxQYWQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRpdGxlLmZvbnQuc2l6ZSxuPWUuc2hvd3RpY2tsYWJlbHM7cmV0dXJuInhheGlzIj09PXQ/InRvcCI9PT1lLnNpZGU/ciooMS41KyhuPzE6MCkpLTEwOnIqKDEuNSsobj8uNTowKSktMTA6InlheGlzIj09PXQ/InJpZ2h0Ij09PWUuc2lkZT8xMCtyKigxLjUrKG4/MTouNSkpOjEwK3IqKDEuNSsobj8uNTowKSk6dm9pZCAwfSxvLmdldFRpY2tQYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIm91dHNpZGUiPT09dC50aWNrcz8xMCt0LnRpY2tsZW46MTV9LG8uZ2V0VGlja01hcmtMZW5ndGg9ZnVuY3Rpb24odCl7aWYoIXQudGlja3MpcmV0dXJuIDA7dmFyIGU9dC50aWNrbGVuO3JldHVybiJpbnNpZGUiPT09dC50aWNrcz8tZTplfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBhKHQpfX0seyIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw4Njc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGk9dCgiLi9zY2VuZTJkIiksYT10KCIuLi9sYXlvdXRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxzPXQoIi4uL2NhcnRlc2lhbi9jb25zdGFudHMiKSxsPXQoIi4uL2NhcnRlc2lhbiIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyIpLHU9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtyLm5hbWU9ImdsMmQiLHIuYXR0cj1bInhheGlzIiwieWF4aXMiXSxyLmlkUm9vdD1bIngiLCJ5Il0sci5pZFJlZ2V4PXMuaWRSZWdleCxyLmF0dHJSZWdleD1zLmF0dHJSZWdleCxyLmF0dHJpYnV0ZXM9dCgiLi4vY2FydGVzaWFuL2F0dHJpYnV0ZXMiKSxyLnN1cHBseUxheW91dERlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyKXtlLl9oYXMoImNhcnRlc2lhbiIpfHxsLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyKX0sci5sYXlvdXRBdHRyT3ZlcnJpZGVzPW4obC5sYXlvdXRBdHRyaWJ1dGVzLCJwbG90IiwiZnJvbS1yb290Iiksci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtwbG90X2JnY29sb3I6YS5wbG90X2JnY29sb3IsaG92ZXJsYWJlbDpjLmhvdmVybGFiZWx9LCJwbG90IiwibmVzdGVkIiksci5wbG90PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5fZnVsbERhdGEsbj1lLl9zdWJwbG90cy5nbDJkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPWUuX3Bsb3RzW29dLGw9dShyLCJnbDJkIixvKSxjPXMuX3NjZW5lMmQ7dm9pZCAwPT09YyYmKGM9bmV3IGkoe2lkOm8sZ3JhcGhEaXY6dCxjb250YWluZXI6dC5xdWVyeVNlbGVjdG9yKCIuZ2wtY29udGFpbmVyIiksc3RhdGljUGxvdDp0Ll9jb250ZXh0LnN0YXRpY1Bsb3QscGxvdEdsUGl4ZWxSYXRpbzp0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW99LGUpLHMuX3NjZW5lMmQ9YyksYy5wbG90KGwsdC5jYWxjZGF0YSxlLHQubGF5b3V0KX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLmdsMmR8fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXSxzPW4uX3Bsb3RzW29dO2lmKHMuX3NjZW5lMmQpe3ZhciBjPXUodCwiZ2wyZCIsbyk7MD09PWMubGVuZ3RoJiYocy5fc2NlbmUyZC5kZXN0cm95KCksZGVsZXRlIG4uX3Bsb3RzW29dKX19bC5jbGVhbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHIuZHJhd0ZyYW1ld29yaz1mdW5jdGlvbih0KXt0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fGwuZHJhd0ZyYW1ld29yayh0KX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsMmQsbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaT1lLl9wbG90c1tyW25dXS5fc2NlbmUyZCxhPWkudG9JbWFnZSgicG5nIik7ZS5fZ2xpbWFnZXMuYXBwZW5kKCJzdmc6aW1hZ2UiKS5hdHRyKHt4bWxuczpvLnN2ZywieGxpbms6aHJlZiI6YSx4OjAseTowLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksaS5kZXN0cm95KCl9fSxyLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fc3VicGxvdHMuZ2wyZCxuPTA7bjxyLmxlbmd0aDtuKyspe2UuX3Bsb3RzW3Jbbl1dLl9zY2VuZTJkLnVwZGF0ZUZ4KGUuZHJhZ21vZGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9meC9sYXlvdXRfYXR0cmlidXRlcyI6NjgwLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uL2NhcnRlc2lhbiI6ODQxLCIuLi9jYXJ0ZXNpYW4vYXR0cmlidXRlcyI6ODI1LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uL2dldF9kYXRhIjo4NjQsIi4uL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIi4vc2NlbmUyZCI6ODY4fV0sODY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoImdsLXBsb3QyZCIpLGM9dCgiZ2wtc3Bpa2VzMmQiKSx1PXQoImdsLXNlbGVjdC1ib3giKSxmPXQoIndlYmdsLWNvbnRleHQiKSxoPXQoIi4vY29udmVydCIpLHA9dCgiLi9jYW1lcmEiKSxkPXQoIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyIpLG09dCgiLi4vY2FydGVzaWFuL2NvbnN0cmFpbnRzIiksZz1tLmVuZm9yY2Usdj1tLmNsZWFuLHk9dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLHg9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksYj14LmRyYXdNb2RlLF89eC5zZWxlY3RNb2RlLHc9WyJ4YXhpcyIsInlheGlzIl0sVD10KCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIikuU1VCUExPVF9QQVRURVJOO2Z1bmN0aW9uIGsodCxlKXt0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLmdyYXBoRGl2PXQuZ3JhcGhEaXYsdGhpcy5waXhlbFJhdGlvPXQucGxvdEdsUGl4ZWxSYXRpb3x8d2luZG93LmRldmljZVBpeGVsUmF0aW8sdGhpcy5pZD10LmlkLHRoaXMuc3RhdGljUGxvdD0hIXQuc3RhdGljUGxvdCx0aGlzLnNjcm9sbFpvb209dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5jYXJ0ZXNpYW4sdGhpcy5mdWxsRGF0YT1udWxsLHRoaXMudXBkYXRlUmVmcyhlKSx0aGlzLm1ha2VGcmFtZXdvcmsoKSx0aGlzLnN0b3BwZWR8fCh0aGlzLmdscGxvdE9wdGlvbnM9aCh0aGlzKSx0aGlzLmdscGxvdE9wdGlvbnMubWVyZ2UoZSksdGhpcy5nbHBsb3Q9bCh0aGlzLmdscGxvdE9wdGlvbnMpLHRoaXMuY2FtZXJhPXAodGhpcyksdGhpcy50cmFjZXM9e30sdGhpcy5zcGlrZXM9Yyh0aGlzLmdscGxvdCksdGhpcy5zZWxlY3RCb3g9dSh0aGlzLmdscGxvdCx7aW5uZXJGaWxsOiExLG91dGVyRmlsbDohMH0pLHRoaXMubGFzdEJ1dHRvblN0YXRlPTAsdGhpcy5waWNrUmVzdWx0PW51bGwsdGhpcy5pc01vdXNlT3Zlcj0hMCx0aGlzLnN0b3BwZWQ9ITEsdGhpcy5yZWRyYXc9dGhpcy5kcmF3LmJpbmQodGhpcyksdGhpcy5yZWRyYXcoKSl9ZS5leHBvcnRzPWs7dmFyIEE9ay5wcm90b3R5cGU7QS5tYWtlRnJhbWV3b3JrPWZ1bmN0aW9uKCl7aWYodGhpcy5zdGF0aWNQbG90KXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9Zih7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiExLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiRXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0aGlzLmNhbnZhcz1uLHRoaXMuZ2w9aX1lbHNle3ZhciB0PXRoaXMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5nbC1jYW52YXMtZm9jdXMiKSxlPWYoe2NhbnZhczp0LHByZXNlcnZlRHJhd2luZ0J1ZmZlcjohMCxwcmVtdWx0aXBsaWVkQWxwaGE6ITB9KTtpZighZSlyZXR1cm4gZCh0aGlzKSx2b2lkKHRoaXMuc3RvcHBlZD0hMCk7dGhpcy5jYW52YXM9dCx0aGlzLmdsPWV9dmFyIHI9dGhpcy5jYW52YXM7ci5zdHlsZS53aWR0aD0iMTAwJSIsci5zdHlsZS5oZWlnaHQ9IjEwMCUiLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD0iMHB4IixyLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZVsicG9pbnRlci1ldmVudHMiXT0ibm9uZSIsdGhpcy51cGRhdGVTaXplKHIpO3ZhciBhPXRoaXMuc3ZnQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTthLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9YS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUud2lkdGg9YS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGEuc3R5bGVbInotaW5kZXgiXT0yMCxhLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIjt2YXIgbz10aGlzLm1vdXNlQ29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uc3R5bGUucG9zaXRpb249ImFic29sdXRlIixvLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLnBpY2tDYW52YXM9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvcigiLmdsLWNhbnZhcy1waWNrIik7dmFyIHM9dGhpcy5jb250YWluZXI7cy5hcHBlbmRDaGlsZChhKSxzLmFwcGVuZENoaWxkKG8pO3ZhciBsPXRoaXM7by5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMSxsLnVuaG92ZXIoKX0pKSxvLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKCl7bC5pc01vdXNlT3Zlcj0hMH0pKX0sQS50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5zdGF0aWNQbG90JiZ0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChuKSx0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5jbGVhckNvbG9yKDEsMSwxLDApLGUuY2xlYXIoZS5DT0xPUl9CVUZGRVJfQklUfGUuREVQVEhfQlVGRkVSX0JJVCksdGhpcy5nbHBsb3Quc2V0RGlydHkoKSx0aGlzLmdscGxvdC5kcmF3KCksZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKTtmb3IodmFyIG89MCxzPWktMTtvPHM7KytvLC0tcylmb3IodmFyIGw9MDtsPHI7KytsKWZvcih2YXIgYz0wO2M8NDsrK2Mpe3ZhciB1PWFbNCoocipvK2wpK2NdO2FbNCoocipvK2wpK2NdPWFbNCoocipzK2wpK2NdLGFbNCoocipzK2wpK2NdPXV9dmFyIGY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7Zi53aWR0aD1yLGYuaGVpZ2h0PWk7dmFyIGgscD1mLmdldENvbnRleHQoIjJkIiksZD1wLmNyZWF0ZUltYWdlRGF0YShyLGkpO3N3aXRjaChkLmRhdGEuc2V0KGEpLHAucHV0SW1hZ2VEYXRhKGQsMCwwKSx0KXtjYXNlImpwZWciOmg9Zi50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlIndlYnAiOmg9Zi50b0RhdGFVUkwoImltYWdlL3dlYnAiKTticmVhaztkZWZhdWx0Omg9Zi50b0RhdGFVUkwoImltYWdlL3BuZyIpfXJldHVybiB0aGlzLnN0YXRpY1Bsb3QmJnRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKG4pLGh9LEEudXBkYXRlU2l6ZT1mdW5jdGlvbih0KXt0fHwodD10aGlzLmNhbnZhcyk7dmFyIGU9dGhpcy5waXhlbFJhdGlvLHI9dGhpcy5mdWxsTGF5b3V0LG49ci53aWR0aCxpPXIuaGVpZ2h0LGE9MHxNYXRoLmNlaWwoZSpuKSxvPTB8TWF0aC5jZWlsKGUqaSk7cmV0dXJuIHQud2lkdGg9PT1hJiZ0LmhlaWdodD09PW98fCh0LndpZHRoPWEsdC5oZWlnaHQ9byksdH0sQS5jb21wdXRlVGlja01hcmtzPWZ1bmN0aW9uKCl7dGhpcy54YXhpcy5zZXRTY2FsZSgpLHRoaXMueWF4aXMuc2V0U2NhbGUoKTtmb3IodmFyIHQ9W28uY2FsY1RpY2tzKHRoaXMueGF4aXMpLG8uY2FsY1RpY2tzKHRoaXMueWF4aXMpXSxlPTA7ZTwyOysrZSlmb3IodmFyIHI9MDtyPHRbZV0ubGVuZ3RoOysrcil0W2VdW3JdLnRleHQ9dFtlXVtyXS50ZXh0KyIiO3JldHVybiB0fSxBLnVwZGF0ZVJlZnM9ZnVuY3Rpb24odCl7dGhpcy5mdWxsTGF5b3V0PXQ7dmFyIGU9dGhpcy5pZC5tYXRjaChUKSxyPSJ4YXhpcyIrZVsxXSxuPSJ5YXhpcyIrZVsyXTt0aGlzLnhheGlzPXRoaXMuZnVsbExheW91dFtyXSx0aGlzLnlheGlzPXRoaXMuZnVsbExheW91dFtuXX0sQS5yZWxheW91dENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdixlPXRoaXMueGF4aXMscj10aGlzLnlheGlzLG49dC5sYXlvdXQsaT17fSxvPWlbZS5fbmFtZSsiLnJhbmdlIl09ZS5yYW5nZS5zbGljZSgpLHM9aVtyLl9uYW1lKyIucmFuZ2UiXT1yLnJhbmdlLnNsaWNlKCk7aVtlLl9uYW1lKyIuYXV0b3JhbmdlIl09ZS5hdXRvcmFuZ2UsaVtyLl9uYW1lKyIuYXV0b3JhbmdlIl09ci5hdXRvcmFuZ2UsYS5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0Iix0LmxheW91dCx0Ll9mdWxsTGF5b3V0Ll9wcmVHVUksaSk7dmFyIGw9bltlLl9uYW1lXTtsLnJhbmdlPW8sbC5hdXRvcmFuZ2U9ZS5hdXRvcmFuZ2U7dmFyIGM9bltyLl9uYW1lXTtjLnJhbmdlPXMsYy5hdXRvcmFuZ2U9ci5hdXRvcmFuZ2UsaS5sYXN0SW5wdXRUaW1lPXRoaXMuY2FtZXJhLmxhc3RJbnB1dFRpbWUsdC5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLGkpfSxBLmNhbWVyYUNoYW5nZWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmNhbWVyYTt0aGlzLmdscGxvdC5zZXREYXRhQm94KHRoaXMuY2FsY0RhdGFCb3goKSk7dmFyIGU9dGhpcy5jb21wdXRlVGlja01hcmtzKCk7KGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwyOysrcil7dmFyIG49dFtyXSxpPWVbcl07aWYobi5sZW5ndGghPT1pLmxlbmd0aClyZXR1cm4hMDtmb3IodmFyIGE9MDthPG4ubGVuZ3RoOysrYSlpZihuW2FdLnghPT1pW2FdLngpcmV0dXJuITB9cmV0dXJuITF9KShlLHRoaXMuZ2xwbG90T3B0aW9ucy50aWNrcykmJih0aGlzLmdscGxvdE9wdGlvbnMudGlja3M9ZSx0aGlzLmdscGxvdE9wdGlvbnMuZGF0YUJveD10LmRhdGFCb3gsdGhpcy5nbHBsb3QudXBkYXRlKHRoaXMuZ2xwbG90T3B0aW9ucyksdGhpcy5oYW5kbGVBbm5vdGF0aW9ucygpKX0sQS5oYW5kbGVBbm5vdGF0aW9ucz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmdyYXBoRGl2LGU9dGhpcy5mdWxsTGF5b3V0LmFubm90YXRpb25zLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLnhyZWY9PT10aGlzLnhheGlzLl9pZCYmbi55cmVmPT09dGhpcy55YXhpcy5faWQmJmEuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXdPbmUiKSh0LHIpfX0sQS5kZXN0cm95PWZ1bmN0aW9uKCl7aWYodGhpcy5nbHBsb3Qpe3ZhciB0PXRoaXMudHJhY2VzO3QmJk9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24oZSl7dFtlXS5kaXNwb3NlKCksZGVsZXRlIHRbZV19KSksdGhpcy5nbHBsb3QuZGlzcG9zZSgpLHRoaXMuY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMuc3ZnQ29udGFpbmVyKSx0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLm1vdXNlQ29udGFpbmVyKSx0aGlzLmZ1bGxEYXRhPW51bGwsdGhpcy5nbHBsb3Q9bnVsbCx0aGlzLnN0b3BwZWQ9ITAsdGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMubW91c2VDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLHRoaXMuY2FtZXJhLndoZWVsTGlzdGVuZXIpLHRoaXMuY2FtZXJhPW51bGx9fSxBLnBsb3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuZ2xwbG90O3RoaXMudXBkYXRlUmVmcyhyKSx0aGlzLnhheGlzLmNsZWFyQ2FsYygpLHRoaXMueWF4aXMuY2xlYXJDYWxjKCksdGhpcy51cGRhdGVUcmFjZXModCxlKSx0aGlzLnVwZGF0ZUZ4KHIuZHJhZ21vZGUpO3ZhciBpPXIud2lkdGgsYT1yLmhlaWdodDt0aGlzLnVwZGF0ZVNpemUodGhpcy5jYW52YXMpO3ZhciBvPXRoaXMuZ2xwbG90T3B0aW9ucztvLm1lcmdlKHIpLG8uc2NyZWVuQm94PVswLDAsaSxhXTt2YXIgcz17X2Z1bGxMYXlvdXQ6e19heGlzQ29uc3RyYWludEdyb3VwczpyLl9heGlzQ29uc3RyYWludEdyb3Vwcyx4YXhpczp0aGlzLnhheGlzLHlheGlzOnRoaXMueWF4aXMsX3NpemU6ci5fc2l6ZX19O3Yocyx0aGlzLnhheGlzKSx2KHMsdGhpcy55YXhpcyk7dmFyIGwsYyx1PXIuX3NpemUsZj10aGlzLnhheGlzLmRvbWFpbixoPXRoaXMueWF4aXMuZG9tYWluO2ZvcihvLnZpZXdCb3g9W3UubCtmWzBdKnUudyx1LmIraFswXSp1LmgsaS11LnItKDEtZlsxXSkqdS53LGEtdS50LSgxLWhbMV0pKnUuaF0sdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS53aWR0aD11LncqKGZbMV0tZlswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlLmhlaWdodD11LmgqKGhbMV0taFswXSkrInB4Iix0aGlzLm1vdXNlQ29udGFpbmVyLmhlaWdodD11LmgqKGhbMV0taFswXSksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5sZWZ0PXUubCtmWzBdKnUudysicHgiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGUudG9wPXUudCsoMS1oWzFdKSp1LmgrInB4IixjPTA7YzwyOysrYykobD10aGlzW3dbY11dKS5fbGVuZ3RoPW8udmlld0JveFtjKzJdLW8udmlld0JveFtjXSx5KHRoaXMuZ3JhcGhEaXYsbCksbC5zZXRTY2FsZSgpO2cocyksby50aWNrcz10aGlzLmNvbXB1dGVUaWNrTWFya3MoKSxvLmRhdGFCb3g9dGhpcy5jYWxjRGF0YUJveCgpLG8ubWVyZ2Uociksbi51cGRhdGUobyksdGhpcy5nbHBsb3QuZHJhdygpfSxBLmNhbGNEYXRhQm94PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54YXhpcyxlPXRoaXMueWF4aXMscj10LnJhbmdlLG49ZS5yYW5nZSxpPXQucjJsLGE9ZS5yMmw7cmV0dXJuW2koclswXSksYShuWzBdKSxpKHJbMV0pLGEoblsxXSldfSxBLnNldFJhbmdlcz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnhheGlzLHI9dGhpcy55YXhpcyxuPWUubDJyLGk9ci5sMnI7ZS5yYW5nZT1bbih0WzBdKSxuKHRbMl0pXSxyLnJhbmdlPVtpKHRbMV0pLGkodFszXSldfSxBLnVwZGF0ZVRyYWNlcz1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxhPU9iamVjdC5rZXlzKHRoaXMudHJhY2VzKTt0aGlzLmZ1bGxEYXRhPXQ7dDpmb3Iocj0wO3I8YS5sZW5ndGg7cisrKXt2YXIgbz1hW3JdLHM9dGhpcy50cmFjZXNbb107Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZigoaT10W25dKS51aWQ9PT1vJiZpLnR5cGU9PT1zLnR5cGUpY29udGludWUgdDtzLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbb119Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7aT10W3JdO3ZhciBsPWVbcl0sYz10aGlzLnRyYWNlc1tpLnVpZF07Yz9jLnVwZGF0ZShpLGwpOihjPWkuX21vZHVsZS5wbG90KHRoaXMsaSxsKSx0aGlzLnRyYWNlc1tpLnVpZF09Yyl9dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5pbmRleC1lLl90cmFjZS5pbmRleH0pKX0sQS51cGRhdGVGeD1mdW5jdGlvbih0KXtfKHQpfHxiKHQpPyh0aGlzLnBpY2tDYW52YXMuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiLHRoaXMubW91c2VDb250YWluZXIuc3R5bGVbInBvaW50ZXItZXZlbnRzIl09Im5vbmUiKToodGhpcy5waWNrQ2FudmFzLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIix0aGlzLm1vdXNlQ29udGFpbmVyLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJhdXRvIiksdGhpcy5tb3VzZUNvbnRhaW5lci5zdHlsZS5jdXJzb3I9InBhbiI9PT10PyJtb3ZlIjoiem9vbSI9PT10PyJjcm9zc2hhaXIiOm51bGx9LEEuZW1pdFBvaW50QWN0aW9uPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC50cmFjZS51aWQsaT10LnBvaW50SW5kZXgsYT0wO2E8dGhpcy5mdWxsRGF0YS5sZW5ndGg7YSsrKXRoaXMuZnVsbERhdGFbYV0udWlkPT09biYmKHI9dGhpcy5mdWxsRGF0YVthXSk7dmFyIG89e3g6dC50cmFjZUNvb3JkWzBdLHk6dC50cmFjZUNvb3JkWzFdLGN1cnZlTnVtYmVyOnIuaW5kZXgscG9pbnROdW1iZXI6aSxkYXRhOnIuX2lucHV0LGZ1bGxEYXRhOnRoaXMuZnVsbERhdGEseGF4aXM6dGhpcy54YXhpcyx5YXhpczp0aGlzLnlheGlzfTtzLmFwcGVuZEFycmF5UG9pbnRWYWx1ZShvLHIsaSksdGhpcy5ncmFwaERpdi5lbWl0KGUse3BvaW50czpbb119KX0sQS5kcmF3PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc3RvcHBlZCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVkcmF3KTt2YXIgdD10aGlzLmdscGxvdCxlPXRoaXMuY2FtZXJhLHI9ZS5tb3VzZUxpc3RlbmVyLG49MT09PXRoaXMubGFzdEJ1dHRvblN0YXRlJiYwPT09ci5idXR0b25zLGk9dGhpcy5mdWxsTGF5b3V0O3RoaXMubGFzdEJ1dHRvblN0YXRlPXIuYnV0dG9ucyx0aGlzLmNhbWVyYUNoYW5nZWQoKTt2YXIgYSxvPXIueCp0LnBpeGVsUmF0aW8sbD10aGlzLmNhbnZhcy5oZWlnaHQtdC5waXhlbFJhdGlvKnIueTtpZihlLmJveEVuYWJsZWQmJiJ6b29tIj09PWkuZHJhZ21vZGUpe3RoaXMuc2VsZWN0Qm94LmVuYWJsZWQ9ITA7Zm9yKHZhciBjPXRoaXMuc2VsZWN0Qm94LnNlbGVjdEJveD1bTWF0aC5taW4oZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5taW4oZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSksTWF0aC5tYXgoZS5ib3hTdGFydFswXSxlLmJveEVuZFswXSksTWF0aC5tYXgoZS5ib3hTdGFydFsxXSxlLmJveEVuZFsxXSldLHU9MDt1PDI7dSsrKWUuYm94U3RhcnRbdV09PT1lLmJveEVuZFt1XSYmKGNbdV09dC5kYXRhQm94W3VdLGNbdSsyXT10LmRhdGFCb3hbdSsyXSk7dC5zZXREaXJ0eSgpfWVsc2UgaWYoIWUucGFubmluZyYmdGhpcy5pc01vdXNlT3Zlcil7dGhpcy5zZWxlY3RCb3guZW5hYmxlZD0hMTt2YXIgZj1pLl9zaXplLGg9dGhpcy54YXhpcy5kb21haW4scD10aGlzLnlheGlzLmRvbWFpbixkPShhPXQucGljayhvL3QucGl4ZWxSYXRpbytmLmwraFswXSpmLncsbC90LnBpeGVsUmF0aW8tKGYudCsoMS1wWzFdKSpmLmgpKSkmJmEub2JqZWN0Ll90cmFjZS5oYW5kbGVQaWNrKGEpO2lmKGQmJm4mJnRoaXMuZW1pdFBvaW50QWN0aW9uKGQsInBsb3RseV9jbGljayIpLGEmJiJza2lwIiE9PWEub2JqZWN0Ll90cmFjZS5ob3ZlcmluZm8mJmkuaG92ZXJtb2RlJiZkJiYoIXRoaXMubGFzdFBpY2tSZXN1bHR8fHRoaXMubGFzdFBpY2tSZXN1bHQudHJhY2VVaWQhPT1kLnRyYWNlLnVpZHx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMF0hPT1kLmRhdGFDb29yZFswXXx8dGhpcy5sYXN0UGlja1Jlc3VsdC5kYXRhQ29vcmRbMV0hPT1kLmRhdGFDb29yZFsxXSkpe3ZhciBtPWQ7dGhpcy5sYXN0UGlja1Jlc3VsdD17dHJhY2VVaWQ6ZC50cmFjZT9kLnRyYWNlLnVpZDpudWxsLGRhdGFDb29yZDpkLmRhdGFDb29yZC5zbGljZSgpfSx0aGlzLnNwaWtlcy51cGRhdGUoe2NlbnRlcjphLmRhdGFDb29yZH0pLG0uc2NyZWVuQ29vcmQ9WygodC52aWV3Qm94WzJdLXQudmlld0JveFswXSkqKGEuZGF0YUNvb3JkWzBdLXQuZGF0YUJveFswXSkvKHQuZGF0YUJveFsyXS10LmRhdGFCb3hbMF0pK3Qudmlld0JveFswXSkvdC5waXhlbFJhdGlvLCh0aGlzLmNhbnZhcy5oZWlnaHQtKHQudmlld0JveFszXS10LnZpZXdCb3hbMV0pKihhLmRhdGFDb29yZFsxXS10LmRhdGFCb3hbMV0pLyh0LmRhdGFCb3hbM10tdC5kYXRhQm94WzFdKS10LnZpZXdCb3hbMV0pL3QucGl4ZWxSYXRpb10sdGhpcy5lbWl0UG9pbnRBY3Rpb24oZCwicGxvdGx5X2hvdmVyIik7dmFyIGc9dGhpcy5mdWxsRGF0YVttLnRyYWNlLmluZGV4XXx8e30sdj1tLnBvaW50SW5kZXgseT1zLmNhc3RIb3ZlcmluZm8oZyxpLHYpO2lmKHkmJiJhbGwiIT09eSl7dmFyIHg9eS5zcGxpdCgiKyIpOy0xPT09eC5pbmRleE9mKCJ4IikmJihtLnRyYWNlQ29vcmRbMF09dm9pZCAwKSwtMT09PXguaW5kZXhPZigieSIpJiYobS50cmFjZUNvb3JkWzFdPXZvaWQgMCksLTE9PT14LmluZGV4T2YoInoiKSYmKG0udHJhY2VDb29yZFsyXT12b2lkIDApLC0xPT09eC5pbmRleE9mKCJ0ZXh0IikmJihtLnRleHRMYWJlbD12b2lkIDApLC0xPT09eC5pbmRleE9mKCJuYW1lIikmJihtLm5hbWU9dm9pZCAwKX1zLmxvbmVIb3Zlcih7eDptLnNjcmVlbkNvb3JkWzBdLHk6bS5zY3JlZW5Db29yZFsxXSx4TGFiZWw6dGhpcy5ob3ZlckZvcm1hdHRlcigieGF4aXMiLG0udHJhY2VDb29yZFswXSkseUxhYmVsOnRoaXMuaG92ZXJGb3JtYXR0ZXIoInlheGlzIixtLnRyYWNlQ29vcmRbMV0pLHpMYWJlbDptLnRyYWNlQ29vcmRbMl0sdGV4dDptLnRleHRMYWJlbCxuYW1lOm0ubmFtZSxjb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImJnY29sb3IiKXx8bS5jb2xvcixib3JkZXJDb2xvcjpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpzLmNhc3RIb3Zlck9wdGlvbihnLHYsImZvbnQuZmFtaWx5IiksZm9udFNpemU6cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJmb250LnNpemUiKSxmb250Q29sb3I6cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpzLmNhc3RIb3Zlck9wdGlvbihnLHYsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246cy5jYXN0SG92ZXJPcHRpb24oZyx2LCJhbGlnbiIpfSx7Y29udGFpbmVyOnRoaXMuc3ZnQ29udGFpbmVyLGdkOnRoaXMuZ3JhcGhEaXZ9KX19YXx8dGhpcy51bmhvdmVyKCksdC5kcmF3KCl9fSxBLnVuaG92ZXI9ZnVuY3Rpb24oKXt0aGlzLmxhc3RQaWNrUmVzdWx0JiYodGhpcy5zcGlrZXMudXBkYXRlKHt9KSx0aGlzLmxhc3RQaWNrUmVzdWx0PW51bGwsdGhpcy5ncmFwaERpdi5lbWl0KCJwbG90bHlfdW5ob3ZlciIpLHMubG9uZVVuaG92ZXIodGhpcy5zdmdDb250YWluZXIpKX0sQS5ob3ZlckZvcm1hdHRlcj1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUpe3ZhciByPXRoaXNbdF07cmV0dXJuIG8udGlja1RleHQocixyLmMybChlKSwiaG92ZXIiKS50ZXh0fX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliL3Nob3dfbm9fd2ViZ2xfbXNnIjo3OTgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNiwiLi4vY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgzNSwiLi9jYW1lcmEiOjg2NSwiLi9jb252ZXJ0Ijo4NjYsImdsLXBsb3QyZCI6MzA5LCJnbC1zZWxlY3QtYm94IjozMjEsImdsLXNwaWtlczJkIjozMzAsIndlYmdsLWNvbnRleHQiOjYwMn1dLDg2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuL3NjZW5lIiksbz10KCIuLi9nZXRfZGF0YSIpLmdldFN1YnBsb3REYXRhLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0iZ2wzZCIsci5hdHRyPSJzY2VuZSIsci5pZFJvb3Q9InNjZW5lIixyLmlkUmVnZXg9ci5hdHRyUmVnZXg9cy5jb3VudGVyUmVnZXgoInNjZW5lIiksci5hdHRyaWJ1dGVzPXQoIi4vbGF5b3V0L2F0dHJpYnV0ZXMiKSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXQvbGF5b3V0X2F0dHJpYnV0ZXMiKSxyLmJhc2VMYXlvdXRBdHRyT3ZlcnJpZGVzPW4oe2hvdmVybGFiZWw6aS5ob3ZlcmxhYmVsfSwicGxvdCIsIm5lc3RlZCIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXQvZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj10Ll9mdWxsRGF0YSxuPWUuX3N1YnBsb3RzLmdsM2QsaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgcz1uW2ldLGw9byhyLCJnbDNkIixzKSxjPWVbc10sdT1jLmNhbWVyYSxmPWMuX3NjZW5lO2Z8fChmPW5ldyBhKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOnQucXVlcnlTZWxlY3RvcigiLmdsLWNvbnRhaW5lciIpLHN0YXRpY1Bsb3Q6dC5fY29udGV4dC5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLGNhbWVyYTp1fSxlKSxjLl9zY2VuZT1mKSxmLnZpZXdJbml0aWFsfHwoZi52aWV3SW5pdGlhbD17dXA6e3g6dS51cC54LHk6dS51cC55LHo6dS51cC56fSxleWU6e3g6dS5leWUueCx5OnUuZXllLnksejp1LmV5ZS56fSxjZW50ZXI6e3g6dS5jZW50ZXIueCx5OnUuY2VudGVyLnksejp1LmNlbnRlci56fX0pLGYucGxvdChsLGUsdC5sYXlvdXQpfX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9bi5fc3VicGxvdHMuZ2wzZHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zY2VuZSYmKG5bb10uX3NjZW5lLmRlc3Ryb3koKSxuLl9pbmZvbGF5ZXImJm4uX2luZm9sYXllci5zZWxlY3RBbGwoIi5hbm5vdGF0aW9uLSIrbykucmVtb3ZlKCkpfX0sci50b1NWRz1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9ZVtyW2ldXSxvPWEuZG9tYWluLHM9YS5fc2NlbmUsYz1zLnRvSW1hZ2UoInBuZyIpO2UuX2dsaW1hZ2VzLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6bC5zdmcsInhsaW5rOmhyZWYiOmMseDpuLmwrbi53Km8ueFswXSx5Om4udCtuLmgqKDEtby55WzFdKSx3aWR0aDpuLncqKG8ueFsxXS1vLnhbMF0pLGhlaWdodDpuLmgqKG8ueVsxXS1vLnlbMF0pLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSkscy5kZXN0cm95KCl9fSxyLmNsZWFuSWQ9ZnVuY3Rpb24odCl7aWYodC5tYXRjaCgvXnNjZW5lWzAtOV0qJC8pKXt2YXIgZT10LnN1YnN0cig1KTtyZXR1cm4iMSI9PT1lJiYoZT0iIiksInNjZW5lIitlfX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPWUuX3N1YnBsb3RzLmdsM2Qsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zY2VuZS51cGRhdGVGeChlLmRyYWdtb2RlLGUuaG92ZXJtb2RlKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MCwiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiOjc1MywiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vZ2V0X2RhdGEiOjg2NCwiLi9sYXlvdXQvYXR0cmlidXRlcyI6ODcwLCIuL2xheW91dC9kZWZhdWx0cyI6ODc0LCIuL2xheW91dC9sYXlvdXRfYXR0cmlidXRlcyI6ODc1LCIuL3NjZW5lIjo4Nzl9XSw4NzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzY2VuZTp7dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJzY2VuZSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifX19LHt9XSw4NzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxvPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtlLmV4cG9ydHM9byh7dmlzaWJsZTppLnZpc2libGUsc2hvd3NwaWtlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2VzaWRlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sc3Bpa2V0aGlja25lc3M6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyfSxzcGlrZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxzaG93YmFja2dyb3VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sYmFja2dyb3VuZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgyMDQsIDIwNCwgMjA0LCAwLjUpIn0sc2hvd2F4ZXNsYWJlbHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGNvbG9yOmkuY29sb3IsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGl0bGU6e3RleHQ6aS50aXRsZS50ZXh0LGZvbnQ6aS50aXRsZS5mb250fSx0eXBlOmEoe30saS50eXBlLHt2YWx1ZXM6WyItIiwibGluZWFyIiwibG9nIiwiZGF0ZSIsImNhdGVnb3J5Il19KSxhdXRvdHlwZW51bWJlcnM6aS5hdXRvdHlwZW51bWJlcnMsYXV0b3JhbmdlOmkuYXV0b3JhbmdlLHJhbmdlbW9kZTppLnJhbmdlbW9kZSxyYW5nZTphKHt9LGkucmFuZ2Use2l0ZW1zOlt7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9yYW5nZSI6ITF9fV0sYW5pbTohMX0pLHRpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyxtaXJyb3I6aS5taXJyb3IsdGlja2xlbjppLnRpY2tsZW4sdGlja3dpZHRoOmkudGlja3dpZHRoLHRpY2tjb2xvcjppLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczppLnNob3d0aWNrbGFiZWxzLHRpY2tmb250OmkudGlja2ZvbnQsdGlja2FuZ2xlOmkudGlja2FuZ2xlLHRpY2twcmVmaXg6aS50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4Omkuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDppLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6aS5zaG93dGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6aS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6aS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDppLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmkuc2VwYXJhdGV0aG91c2FuZHMsdGlja2Zvcm1hdDppLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmkudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsc2hvd2xpbmU6aS5zaG93bGluZSxsaW5lY29sb3I6aS5saW5lY29sb3IsbGluZXdpZHRoOmkubGluZXdpZHRoLHNob3dncmlkOmkuc2hvd2dyaWQsZ3JpZGNvbG9yOmEoe30saS5ncmlkY29sb3Ise2RmbHQ6InJnYigyMDQsIDIwNCwgMjA0KSJ9KSxncmlkd2lkdGg6aS5ncmlkd2lkdGgsemVyb2xpbmU6aS56ZXJvbGluZSx6ZXJvbGluZWNvbG9yOmkuemVyb2xpbmVjb2xvcix6ZXJvbGluZXdpZHRoOmkuemVyb2xpbmV3aWR0aCxfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fSwicGxvdCIsImZyb20tcm9vdCIpfSx7Ii4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyI6ODQyfV0sODcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInRpbnljb2xvcjIiKS5taXgsaT10KCIuLi8uLi8uLi9saWIiKSxhPXQoIi4uLy4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxvPXQoIi4vYXhpc19hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jYXJ0ZXNpYW4vdHlwZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vY2FydGVzaWFuL2F4aXNfZGVmYXVsdHMiKSxjPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxmO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gaS5jb2VyY2UodSxmLG8sdCxlKX1mb3IodmFyIHA9MDtwPGMubGVuZ3RoO3ArKyl7dmFyIGQ9Y1twXTt1PXRbZF18fHt9LChmPWEubmV3Q29udGFpbmVyKGUsZCkpLl9pZD1kWzBdK3Iuc2NlbmUsZi5fbmFtZT1kLHModSxmLGgsciksbCh1LGYsaCx7Zm9udDpyLmZvbnQsbGV0dGVyOmRbMF0sZGF0YTpyLmRhdGEsc2hvd0dyaWQ6ITAsbm9UaWNrc29uOiEwLG5vVGlja2xhYmVsbW9kZTohMCxub1RpY2tsYWJlbHBvc2l0aW9uOiEwLG5vVGlja2xhYmVsb3ZlcmZsb3c6ITAsYmdDb2xvcjpyLmJnQ29sb3IsY2FsZW5kYXI6ci5jYWxlbmRhcn0sci5mdWxsTGF5b3V0KSxoKCJncmlkY29sb3IiLG4oZi5jb2xvcixyLmJnQ29sb3IsMTM2MDAvMTg3KS50b1JnYlN0cmluZygpKSxoKCJ0aXRsZS50ZXh0IixkWzBdKSxmLnNldFNjYWxlPWkubm9vcCxoKCJzaG93c3Bpa2VzIikmJihoKCJzcGlrZXNpZGVzIiksaCgic3Bpa2V0aGlja25lc3MiKSxoKCJzcGlrZWNvbG9yIixmLmNvbG9yKSksaCgic2hvd2F4ZXNsYWJlbHMiKSxoKCJzaG93YmFja2dyb3VuZCIpJiZoKCJiYWNrZ3JvdW5kY29sb3IiKX19fSx7Ii4uLy4uLy4uL2xpYiI6Nzc2LCIuLi8uLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIjo4MjksIi4uLy4uL2NhcnRlc2lhbi90eXBlX2RlZmF1bHRzIjo4NTMsIi4vYXhpc19hdHRyaWJ1dGVzIjo4NzEsdGlueWNvbG9yMjo1NzJ9XSw4NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGk9dCgiLi4vLi4vLi4vbGliIiksYT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIG8oKXt0aGlzLmJvdW5kcz1bWy0xMCwtMTAsLTEwXSxbMTAsMTAsMTBdXSx0aGlzLnRpY2tzPVtbXSxbXSxbXV0sdGhpcy50aWNrRW5hYmxlPVshMCwhMCwhMF0sdGhpcy50aWNrRm9udD1bInNhbnMtc2VyaWYiLCJzYW5zLXNlcmlmIiwic2Fucy1zZXJpZiJdLHRoaXMudGlja1NpemU9WzEyLDEyLDEyXSx0aGlzLnRpY2tBbmdsZT1bMCwwLDBdLHRoaXMudGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy50aWNrUGFkPVsxOCwxOCwxOF0sdGhpcy5sYWJlbHM9WyJ4IiwieSIsInoiXSx0aGlzLmxhYmVsRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5sYWJlbEZvbnQ9WyJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiLCJPcGVuIFNhbnMiXSx0aGlzLmxhYmVsU2l6ZT1bMjAsMjAsMjBdLHRoaXMubGFiZWxDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMubGFiZWxQYWQ9WzMwLDMwLDMwXSx0aGlzLmxpbmVFbmFibGU9WyEwLCEwLCEwXSx0aGlzLmxpbmVNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVXaWR0aD1bMSwxLDFdLHRoaXMubGluZUNvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5saW5lVGlja0VuYWJsZT1bITAsITAsITBdLHRoaXMubGluZVRpY2tNaXJyb3I9WyExLCExLCExXSx0aGlzLmxpbmVUaWNrTGVuZ3RoPVsxMCwxMCwxMF0sdGhpcy5saW5lVGlja1dpZHRoPVsxLDEsMV0sdGhpcy5saW5lVGlja0NvbG9yPVtbMCwwLDAsMV0sWzAsMCwwLDFdLFswLDAsMCwxXV0sdGhpcy5ncmlkRW5hYmxlPVshMCwhMCwhMF0sdGhpcy5ncmlkV2lkdGg9WzEsMSwxXSx0aGlzLmdyaWRDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0VuYWJsZT1bITAsITAsITBdLHRoaXMuemVyb0xpbmVDb2xvcj1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuemVyb0xpbmVXaWR0aD1bMiwyLDJdLHRoaXMuYmFja2dyb3VuZEVuYWJsZT1bITAsITAsITBdLHRoaXMuYmFja2dyb3VuZENvbG9yPVtbLjgsLjgsLjgsLjVdLFsuOCwuOCwuOCwuNV0sWy44LC44LC44LC41XV0sdGhpcy5fZGVmYXVsdFRpY2tQYWQ9dGhpcy50aWNrUGFkLnNsaWNlKCksdGhpcy5fZGVmYXVsdExhYmVsUGFkPXRoaXMubGFiZWxQYWQuc2xpY2UoKSx0aGlzLl9kZWZhdWx0TGluZVRpY2tMZW5ndGg9dGhpcy5saW5lVGlja0xlbmd0aC5zbGljZSgpfW8ucHJvdG90eXBlLm1lcmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjwzOysrcil7dmFyIG89ZVthW3JdXTtvLnZpc2libGU/KHRoaXMubGFiZWxzW3JdPXQuX21ldGE/aS50ZW1wbGF0ZVN0cmluZyhvLnRpdGxlLnRleHQsdC5fbWV0YSk6by50aXRsZS50ZXh0LCJmb250ImluIG8udGl0bGUmJihvLnRpdGxlLmZvbnQuY29sb3ImJih0aGlzLmxhYmVsQ29sb3Jbcl09bihvLnRpdGxlLmZvbnQuY29sb3IpKSxvLnRpdGxlLmZvbnQuZmFtaWx5JiYodGhpcy5sYWJlbEZvbnRbcl09by50aXRsZS5mb250LmZhbWlseSksby50aXRsZS5mb250LnNpemUmJih0aGlzLmxhYmVsU2l6ZVtyXT1vLnRpdGxlLmZvbnQuc2l6ZSkpLCJzaG93bGluZSJpbiBvJiYodGhpcy5saW5lRW5hYmxlW3JdPW8uc2hvd2xpbmUpLCJsaW5lY29sb3IiaW4gbyYmKHRoaXMubGluZUNvbG9yW3JdPW4oby5saW5lY29sb3IpKSwibGluZXdpZHRoImluIG8mJih0aGlzLmxpbmVXaWR0aFtyXT1vLmxpbmV3aWR0aCksInNob3dncmlkImluIG8mJih0aGlzLmdyaWRFbmFibGVbcl09by5zaG93Z3JpZCksImdyaWRjb2xvciJpbiBvJiYodGhpcy5ncmlkQ29sb3Jbcl09bihvLmdyaWRjb2xvcikpLCJncmlkd2lkdGgiaW4gbyYmKHRoaXMuZ3JpZFdpZHRoW3JdPW8uZ3JpZHdpZHRoKSwibG9nIj09PW8udHlwZT90aGlzLnplcm9FbmFibGVbcl09ITE6Inplcm9saW5lImluIG8mJih0aGlzLnplcm9FbmFibGVbcl09by56ZXJvbGluZSksInplcm9saW5lY29sb3IiaW4gbyYmKHRoaXMuemVyb0xpbmVDb2xvcltyXT1uKG8uemVyb2xpbmVjb2xvcikpLCJ6ZXJvbGluZXdpZHRoImluIG8mJih0aGlzLnplcm9MaW5lV2lkdGhbcl09by56ZXJvbGluZXdpZHRoKSwidGlja3MiaW4gbyYmby50aWNrcz90aGlzLmxpbmVUaWNrRW5hYmxlW3JdPSEwOnRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsInRpY2tsZW4iaW4gbyYmKHRoaXMubGluZVRpY2tMZW5ndGhbcl09dGhpcy5fZGVmYXVsdExpbmVUaWNrTGVuZ3RoW3JdPW8udGlja2xlbiksInRpY2tjb2xvciJpbiBvJiYodGhpcy5saW5lVGlja0NvbG9yW3JdPW4oby50aWNrY29sb3IpKSwidGlja3dpZHRoImluIG8mJih0aGlzLmxpbmVUaWNrV2lkdGhbcl09by50aWNrd2lkdGgpLCJ0aWNrYW5nbGUiaW4gbyYmKHRoaXMudGlja0FuZ2xlW3JdPSJhdXRvIj09PW8udGlja2FuZ2xlPy0zNjAwOk1hdGguUEkqLW8udGlja2FuZ2xlLzE4MCksInNob3d0aWNrbGFiZWxzImluIG8mJih0aGlzLnRpY2tFbmFibGVbcl09by5zaG93dGlja2xhYmVscyksInRpY2tmb250ImluIG8mJihvLnRpY2tmb250LmNvbG9yJiYodGhpcy50aWNrQ29sb3Jbcl09bihvLnRpY2tmb250LmNvbG9yKSksby50aWNrZm9udC5mYW1pbHkmJih0aGlzLnRpY2tGb250W3JdPW8udGlja2ZvbnQuZmFtaWx5KSxvLnRpY2tmb250LnNpemUmJih0aGlzLnRpY2tTaXplW3JdPW8udGlja2ZvbnQuc2l6ZSkpLCJtaXJyb3IiaW4gbz8tMSE9PVsidGlja3MiLCJhbGwiLCJhbGx0aWNrcyJdLmluZGV4T2Yoby5taXJyb3IpPyh0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSEwLHRoaXMubGluZU1pcnJvcltyXT0hMCk6ITA9PT1vLm1pcnJvcj8odGhpcy5saW5lVGlja01pcnJvcltyXT0hMSx0aGlzLmxpbmVNaXJyb3Jbcl09ITApOih0aGlzLmxpbmVUaWNrTWlycm9yW3JdPSExLHRoaXMubGluZU1pcnJvcltyXT0hMSk6dGhpcy5saW5lTWlycm9yW3JdPSExLCJzaG93YmFja2dyb3VuZCJpbiBvJiYhMSE9PW8uc2hvd2JhY2tncm91bmQ/KHRoaXMuYmFja2dyb3VuZEVuYWJsZVtyXT0hMCx0aGlzLmJhY2tncm91bmRDb2xvcltyXT1uKG8uYmFja2dyb3VuZGNvbG9yKSk6dGhpcy5iYWNrZ3JvdW5kRW5hYmxlW3JdPSExKToodGhpcy50aWNrRW5hYmxlW3JdPSExLHRoaXMubGFiZWxFbmFibGVbcl09ITEsdGhpcy5saW5lRW5hYmxlW3JdPSExLHRoaXMubGluZVRpY2tFbmFibGVbcl09ITEsdGhpcy5ncmlkRW5hYmxlW3JdPSExLHRoaXMuemVyb0VuYWJsZVtyXT0hMSx0aGlzLmJhY2tncm91bmRFbmFibGVbcl09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IG87cmV0dXJuIHIubWVyZ2UodCxlKSxyfX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxfV0sODc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vLi4vcmVnaXN0cnkiKSxvPXQoIi4uLy4uL3N1YnBsb3RfZGVmYXVsdHMiKSxzPXQoIi4vYXhpc19kZWZhdWx0cyIpLGw9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YTtmdW5jdGlvbiB1KHQsZSxyLG4pe2Zvcih2YXIgbz1yKCJiZ2NvbG9yIiksbD1pLmNvbWJpbmUobyxuLnBhcGVyX2JnY29sb3IpLHU9WyJ1cCIsImNlbnRlciIsImV5ZSJdLGY9MDtmPHUubGVuZ3RoO2YrKylyKCJjYW1lcmEuIit1W2ZdKyIueCIpLHIoImNhbWVyYS4iK3VbZl0rIi55IikscigiY2FtZXJhLiIrdVtmXSsiLnoiKTtyKCJjYW1lcmEucHJvamVjdGlvbi50eXBlIik7dmFyIGg9ISFyKCJhc3BlY3RyYXRpby54IikmJiEhcigiYXNwZWN0cmF0aW8ueSIpJiYhIXIoImFzcGVjdHJhdGlvLnoiKSxwPXIoImFzcGVjdG1vZGUiLGg/Im1hbnVhbCI6ImF1dG8iKTtofHwodC5hc3BlY3RyYXRpbz1lLmFzcGVjdHJhdGlvPXt4OjEseToxLHo6MX0sIm1hbnVhbCI9PT1wJiYoZS5hc3BlY3Rtb2RlPSJhdXRvIiksdC5hc3BlY3Rtb2RlPWUuYXNwZWN0bW9kZSk7dmFyIGQ9YyhuLmZ1bGxEYXRhLCJnbDNkIixuLmlkKTtzKHQsZSx7Zm9udDpuLmZvbnQsc2NlbmU6bi5pZCxkYXRhOmQsYmdDb2xvcjpsLGNhbGVuZGFyOm4uY2FsZW5kYXIsYXV0b3R5cGVudW1iZXJzRGZsdDpuLmF1dG90eXBlbnVtYmVyc0RmbHQsZnVsbExheW91dDpuLmZ1bGxMYXlvdXR9KSxhLmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImhhbmRsZURlZmF1bHRzIikodCxlLG4pO3ZhciBtPW4uZ2V0RGZsdEZyb21MYXlvdXQoImRyYWdtb2RlIik7aWYoITEhPT1tJiYhbSlpZihtPSJvcmJpdCIsdC5jYW1lcmEmJnQuY2FtZXJhLnVwKXt2YXIgZz10LmNhbWVyYS51cC54LHY9dC5jYW1lcmEudXAueSx5PXQuY2FtZXJhLnVwLno7MCE9PXkmJihnJiZ2JiZ5P3kvTWF0aC5zcXJ0KGcqZyt2KnYreSp5KT4uOTk5JiYobT0idHVybnRhYmxlIik6bT0idHVybnRhYmxlIil9ZWxzZSBtPSJ0dXJudGFibGUiO3IoImRyYWdtb2RlIixtKSxyKCJob3Zlcm1vZGUiLG4uZ2V0RGZsdEZyb21MYXlvdXQoImhvdmVybW9kZSIpKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWUuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGg+MTtvKHQsZSxyLHt0eXBlOiJnbDNkIixhdHRyaWJ1dGVzOmwsaGFuZGxlRGVmYXVsdHM6dSxmdWxsTGF5b3V0OmUsZm9udDplLmZvbnQsZnVsbERhdGE6cixnZXREZmx0RnJvbUxheW91dDpmdW5jdGlvbihlKXtpZighaSlyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGxbZV0pP3RbZV06dm9pZCAwfSxhdXRvdHlwZW51bWJlcnNEZmx0OmUuYXV0b3R5cGVudW1iZXJzLHBhcGVyX2JnY29sb3I6ZS5wYXBlcl9iZ2NvbG9yLGNhbGVuZGFyOmUuY2FsZW5kYXJ9KX19LHsiLi4vLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vLi4vZ2V0X2RhdGEiOjg2NCwiLi4vLi4vc3VicGxvdF9kZWZhdWx0cyI6ODk4LCIuL2F4aXNfZGVmYXVsdHMiOjg3MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODc1fV0sODc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXhpc19hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9kb21haW4iKS5hdHRyaWJ1dGVzLGE9dCgiLi4vLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi8uLi9saWIiKS5jb3VudGVyUmVnZXg7ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJue3g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDp0LGVkaXRUeXBlOiJjYW1lcmEifSx5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6ZSxlZGl0VHlwZToiY2FtZXJhIn0sejp7dmFsVHlwZToibnVtYmVyIixkZmx0OnIsZWRpdFR5cGU6ImNhbWVyYSJ9LGVkaXRUeXBlOiJjYW1lcmEifX1lLmV4cG9ydHM9e19hcnJheUF0dHJSZWdleHBzOltvKCJzY2VuZSIsIi5hbm5vdGF0aW9ucyIsITApXSxiZ2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDoicmdiYSgwLDAsMCwwKSIsZWRpdFR5cGU6InBsb3QifSxjYW1lcmE6e3VwOmEocygwLDAsMSkse30pLGNlbnRlcjphKHMoMCwwLDApLHt9KSxleWU6YShzKDEuMjUsMS4yNSwxLjI1KSx7fSkscHJvamVjdGlvbjp7dHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicGVyc3BlY3RpdmUiLCJvcnRob2dyYXBoaWMiXSxkZmx0OiJwZXJzcGVjdGl2ZSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYW1lcmEifSxkb21haW46aSh7bmFtZToic2NlbmUiLGVkaXRUeXBlOiJwbG90In0pLGFzcGVjdG1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImF1dG8iLCJjdWJlIiwiZGF0YSIsIm1hbnVhbCJdLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJhc3BlY3RyYXRpby54Ijp2b2lkIDAsImFzcGVjdHJhdGlvLnkiOnZvaWQgMCwiYXNwZWN0cmF0aW8ueiI6dm9pZCAwfX0sYXNwZWN0cmF0aW86e3g6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LHo6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hc3BlY3Rtb2RlIjoibWFudWFsIn19LGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6e2FzcGVjdG1vZGU6Im1hbnVhbCJ9fSx4YXhpczpuLHlheGlzOm4semF4aXM6bixkcmFnbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsib3JiaXQiLCJ0dXJudGFibGUiLCJ6b29tIiwicGFuIiwhMV0sZWRpdFR5cGU6InBsb3QifSxob3Zlcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNsb3Nlc3QiLCExXSxkZmx0OiJjbG9zZXN0IixlZGl0VHlwZToibW9kZWJhciJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0VHlwZToicGxvdCIsX2RlcHJlY2F0ZWQ6e2NhbWVyYXBvc2l0aW9uOnt2YWxUeXBlOiJpbmZvX2FycmF5IixlZGl0VHlwZToiY2FtZXJhIn19fX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9kb21haW4iOjg1NSwiLi9heGlzX2F0dHJpYnV0ZXMiOjg3MX1dLDg3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi8uLi9saWIvc3RyMnJnYmFycmF5IiksaT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdO2Z1bmN0aW9uIGEoKXt0aGlzLmVuYWJsZWQ9WyEwLCEwLCEwXSx0aGlzLmNvbG9ycz1bWzAsMCwwLDFdLFswLDAsMCwxXSxbMCwwLDAsMV1dLHRoaXMuZHJhd1NpZGVzPVshMCwhMCwhMF0sdGhpcy5saW5lV2lkdGg9WzEsMSwxXX1hLnByb3RvdHlwZS5tZXJnZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPDM7KytlKXt2YXIgcj10W2lbZV1dO3IudmlzaWJsZT8odGhpcy5lbmFibGVkW2VdPXIuc2hvd3NwaWtlcyx0aGlzLmNvbG9yc1tlXT1uKHIuc3Bpa2Vjb2xvciksdGhpcy5kcmF3U2lkZXNbZV09ci5zcGlrZXNpZGVzLHRoaXMubGluZVdpZHRoW2VdPXIuc3Bpa2V0aGlja25lc3MpOih0aGlzLmVuYWJsZWRbZV09ITEsdGhpcy5kcmF3U2lkZXNbZV09ITEpfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBhO3JldHVybiBlLm1lcmdlKHQpLGV9fSx7Ii4uLy4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMX1dLDg3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuYXhlc09wdGlvbnMscj10LmdscGxvdC5heGVzUGl4ZWxzLHM9dC5mdWxsU2NlbmVMYXlvdXQsbD1bW10sW10sW11dLGM9MDtjPDM7KytjKXt2YXIgdT1zW2FbY11dO2lmKHUuX2xlbmd0aD0ocltjXS5oaS1yW2NdLmxvKSpyW2NdLnBpeGVsc1BlckRhdGFVbml0L3QuZGF0YVNjYWxlW2NdLE1hdGguYWJzKHUuX2xlbmd0aCk9PT0xLzB8fGlzTmFOKHUuX2xlbmd0aCkpbFtjXT1bXTtlbHNle3UuX2lucHV0X3JhbmdlPXUucmFuZ2Uuc2xpY2UoKSx1LnJhbmdlWzBdPXJbY10ubG8vdC5kYXRhU2NhbGVbY10sdS5yYW5nZVsxXT1yW2NdLmhpL3QuZGF0YVNjYWxlW2NdLHUuX209MS8odC5kYXRhU2NhbGVbY10qcltjXS5waXhlbHNQZXJEYXRhVW5pdCksdS5yYW5nZVswXT09PXUucmFuZ2VbMV0mJih1LnJhbmdlWzBdLT0xLHUucmFuZ2VbMV0rPTEpO3ZhciBmPXUudGlja21vZGU7aWYoImF1dG8iPT09dS50aWNrbW9kZSl7dS50aWNrbW9kZT0ibGluZWFyIjt2YXIgaD11Lm50aWNrc3x8aS5jb25zdHJhaW4odS5fbGVuZ3RoLzQwLDQsOSk7bi5hdXRvVGlja3ModSxNYXRoLmFicyh1LnJhbmdlWzFdLXUucmFuZ2VbMF0pL2gpfWZvcih2YXIgcD1uLmNhbGNUaWNrcyh1LHttc1VUQzohMH0pLGQ9MDtkPHAubGVuZ3RoOysrZClwW2RdLng9cFtkXS54KnQuZGF0YVNjYWxlW2NdLCJkYXRlIj09PXUudHlwZSYmKHBbZF0udGV4dD1wW2RdLnRleHQucmVwbGFjZSgvXDxiclw+L2csIiAiKSk7bFtjXT1wLHUudGlja21vZGU9Zn19ZS50aWNrcz1sO2ZvcihjPTA7YzwzOysrYyl7b1tjXT0uNSoodC5nbHBsb3QuYm91bmRzWzBdW2NdK3QuZ2xwbG90LmJvdW5kc1sxXVtjXSk7Zm9yKGQ9MDtkPDI7KytkKWUuYm91bmRzW2RdW2NdPXQuZ2xwbG90LmJvdW5kc1tkXVtjXX10LmNvbnRvdXJMZXZlbHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSgzKSxyPTA7cjwzOysrcil7Zm9yKHZhciBuPXRbcl0saT1uZXcgQXJyYXkobi5sZW5ndGgpLGE9MDthPG4ubGVuZ3RoOysrYSlpW2FdPW5bYV0ueDtlW3JdPWl9cmV0dXJuIGV9KGwpfTt2YXIgbj10KCIuLi8uLi9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vLi4vbGliIiksYT1bInhheGlzIiwieWF4aXMiLCJ6YXhpcyJdLG89WzAsMCwwXX0seyIuLi8uLi8uLi9saWIiOjc3NiwiLi4vLi4vY2FydGVzaWFuL2F4ZXMiOjgyN31dLDg3ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbixpPVswLDAsMCwwXTtmb3Iocj0wO3I8NDsrK3IpZm9yKG49MDtuPDQ7KytuKWlbbl0rPXRbNCpyK25dKmVbcl07cmV0dXJuIGl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4odC5wcm9qZWN0aW9uLG4odC52aWV3LG4odC5tb2RlbCxbZVswXSxlWzFdLGVbMl0sMV0pKSl9fSx7fV0sODc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuLGksYT10KCJnbC1wbG90M2QiKSxvPWEuY3JlYXRlQ2FtZXJhLHM9YS5jcmVhdGVTY2VuZSxsPXQoIndlYmdsLWNvbnRleHQiKSxjPXQoImhhcy1wYXNzaXZlLWV2ZW50cyIpLHU9dCgiLi4vLi4vcmVnaXN0cnkiKSxmPXQoIi4uLy4uL2xpYiIpLGg9Zi5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIoKSxwPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksZD10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksbT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZz10KCIuLi8uLi9saWIvc2hvd19ub193ZWJnbF9tc2ciKSx2PXQoIi4vcHJvamVjdCIpLHk9dCgiLi9sYXlvdXQvY29udmVydCIpLHg9dCgiLi9sYXlvdXQvc3Bpa2VzIiksYj10KCIuL2xheW91dC90aWNrX21hcmtzIik7ZnVuY3Rpb24gXyh0LGUpe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLG49dC5jb250YWluZXI7dGhpcy5ncmFwaERpdj10LmdyYXBoRGl2O3ZhciBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJzdmciKTtpLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaS5zdHlsZS50b3A9aS5zdHlsZS5sZWZ0PSIwcHgiLGkuc3R5bGUud2lkdGg9aS5zdHlsZS5oZWlnaHQ9IjEwMCUiLGkuc3R5bGVbInotaW5kZXgiXT0yMCxpLnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixyLmFwcGVuZENoaWxkKGkpLHRoaXMuc3ZnQ29udGFpbmVyPWksci5pZD10LmlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixyLnN0eWxlLnRvcD1yLnN0eWxlLmxlZnQ9IjBweCIsci5zdHlsZS53aWR0aD1yLnN0eWxlLmhlaWdodD0iMTAwJSIsbi5hcHBlbmRDaGlsZChyKSx0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmlkPXQuaWR8fCJzY2VuZSIsdGhpcy5mdWxsU2NlbmVMYXlvdXQ9ZVt0aGlzLmlkXSx0aGlzLnBsb3RBcmdzPVtbXSx7fSx7fV0sdGhpcy5heGVzT3B0aW9ucz15KGUsZVt0aGlzLmlkXSksdGhpcy5zcGlrZU9wdGlvbnM9eChlW3RoaXMuaWRdKSx0aGlzLmNvbnRhaW5lcj1yLHRoaXMuc3RhdGljTW9kZT0hIXQuc3RhdGljUGxvdCx0aGlzLnBpeGVsUmF0aW89dGhpcy5waXhlbFJhdGlvfHx0LnBsb3RHbFBpeGVsUmF0aW98fDIsdGhpcy5kYXRhU2NhbGU9WzEsMSwxXSx0aGlzLmNvbnRvdXJMZXZlbHM9W1tdLFtdLFtdXSx0aGlzLmNvbnZlcnRBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImNvbnZlcnQiKSx0aGlzLmRyYXdBbm5vdGF0aW9ucz11LmdldENvbXBvbmVudE1ldGhvZCgiYW5ub3RhdGlvbnMzZCIsImRyYXciKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKX12YXIgdz1fLnByb3RvdHlwZTt3LnByZXBhcmVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIHQ9e2NhbnZhczp0aGlzLmNhbnZhcyxnbDp0aGlzLmdsLGdsT3B0aW9uczp7cHJlc2VydmVEcmF3aW5nQnVmZmVyOmgscHJlbXVsdGlwbGllZEFscGhhOiEwLGFudGlhbGlhczohMH0sY29udGFpbmVyOnRoaXMuY29udGFpbmVyLGF4ZXM6dGhpcy5heGVzT3B0aW9ucyxzcGlrZXM6dGhpcy5zcGlrZU9wdGlvbnMscGlja1JhZGl1czoxMCxzbmFwVG9EYXRhOiEwLGF1dG9TY2FsZTohMCxhdXRvQm91bmRzOiExLGNhbWVyYU9iamVjdDp0aGlzLmNhbWVyYSxwaXhlbFJhdGlvOnRoaXMucGl4ZWxSYXRpb307aWYodGhpcy5zdGF0aWNNb2RlKXtpZighKGl8fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9bCh7Y2FudmFzOm4scHJlc2VydmVEcmF3aW5nQnVmZmVyOiEwLHByZW11bHRpcGxpZWRBbHBoYTohMCxhbnRpYWxpYXM6ITB9KSkpKXRocm93IG5ldyBFcnJvcigiZXJyb3IgY3JlYXRpbmcgc3RhdGljIGNhbnZhcy9jb250ZXh0IGZvciBpbWFnZSBzZXJ2ZXIiKTt0LmdsPWksdC5jYW52YXM9bn1yZXR1cm4gdH07dmFyIFQ9ITA7dy50cnlDcmVhdGVQbG90PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wcmVwYXJlT3B0aW9ucygpLGU9ITA7dHJ5e3RoaXMuZ2xwbG90PXModCl9Y2F0Y2gocil7aWYodGhpcy5zdGF0aWNNb2RlfHwhVHx8aCllPSExO2Vsc2V7Zi53YXJuKFsid2ViZ2wgc2V0dXAgZmFpbGVkIHBvc3NpYmx5IGR1ZSB0byIsImZhbHNlIHByZXNlcnZlRHJhd2luZ0J1ZmZlciBjb25maWcuIiwiVGhlIG1vYmlsZS90YWJsZXQgZGV2aWNlIG1heSBub3QgYmUgZGV0ZWN0ZWQgYnkgaXMtbW9iaWxlIG1vZHVsZS4iLCJFbmFibGluZyBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaW4gc2Vjb25kIGF0dGVtcHQgdG8gY3JlYXRlIHdlYmdsIHNjZW5lLi4uIl0uam9pbigiICIpKTt0cnl7aD10LmdsT3B0aW9ucy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI9ITAsdGhpcy5nbHBsb3Q9cyh0KX1jYXRjaChyKXtoPXQuZ2xPcHRpb25zLnByZXNlcnZlRHJhd2luZ0J1ZmZlcj0hMSxlPSExfX19cmV0dXJuIFQ9ITEsZX0sdy5pbml0aWFsaXplR0xDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsZT0ib3J0aG9ncmFwaGljIj09PXQucHJvamVjdGlvbi50eXBlO3RoaXMuY2FtZXJhPW8odGhpcy5jb250YWluZXIse2NlbnRlcjpbdC5jZW50ZXIueCx0LmNlbnRlci55LHQuY2VudGVyLnpdLGV5ZTpbdC5leWUueCx0LmV5ZS55LHQuZXllLnpdLHVwOlt0LnVwLngsdC51cC55LHQudXAuel0sX29ydGhvOmUsem9vbU1pbjouMDEsem9vbU1heDoxMDAsbW9kZToib3JiaXQifSl9LHcuaW5pdGlhbGl6ZUdMUGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodC5pbml0aWFsaXplR0xDYW1lcmEoKSwhdC50cnlDcmVhdGVQbG90KCkpcmV0dXJuIGcodCk7dC50cmFjZXM9e30sdC5tYWtlNHRoRGltZW5zaW9uKCk7dmFyIGU9dC5ncmFwaERpdixyPWUubGF5b3V0LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gdC5pc0NhbWVyYUNoYW5nZWQocikmJihlW3QuaWQrIi5jYW1lcmEiXT10LmdldENhbWVyYSgpKSx0LmlzQXNwZWN0Q2hhbmdlZChyKSYmKGVbdC5pZCsiLmFzcGVjdHJhdGlvIl09dC5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSwibWFudWFsIiE9PXJbdC5pZF0uYXNwZWN0bW9kZSYmKHQuZnVsbFNjZW5lTGF5b3V0LmFzcGVjdG1vZGU9clt0LmlkXS5hc3BlY3Rtb2RlPWVbdC5pZCsiLmFzcGVjdG1vZGUiXT0ibWFudWFsIikpLGV9LGk9ZnVuY3Rpb24odCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSl7dmFyIGU9bigpO3Quc2F2ZUxheW91dChyKSx0LmdyYXBoRGl2LmVtaXQoInBsb3RseV9yZWxheW91dCIsZSl9fTtyZXR1cm4gdC5nbHBsb3QuY2FudmFzJiYodC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLChmdW5jdGlvbigpe2kodCl9KSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwoZnVuY3Rpb24ocil7aWYoZS5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkKXtpZih0LmNhbWVyYS5fb3J0aG8pe3ZhciBuPXIuZGVsdGFYPnIuZGVsdGFZPzEuMToxLzEuMSxhPXQuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCk7dC5nbHBsb3Quc2V0QXNwZWN0cmF0aW8oe3g6biphLngseTpuKmEueSx6Om4qYS56fSl9aSh0KX19KSwhIWMmJntwYXNzaXZlOiExfSksdC5nbHBsb3QuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsKGZ1bmN0aW9uKCl7aWYoITEhPT10LmZ1bGxTY2VuZUxheW91dC5kcmFnbW9kZSYmMCE9PXQuY2FtZXJhLm1vdXNlTGlzdGVuZXIuYnV0dG9ucyl7dmFyIGU9bigpO3QuZ3JhcGhEaXYuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixlKX19KSksdC5zdGF0aWNNb2RlfHx0LmdscGxvdC5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigid2ViZ2xjb250ZXh0bG9zdCIsKGZ1bmN0aW9uKHIpe2UmJmUuZW1pdCYmZS5lbWl0KCJwbG90bHlfd2ViZ2xjb250ZXh0bG9zdCIse2V2ZW50OnIsbGF5ZXI6dC5pZH0pfSksITEpKSx0LmdscGxvdC5vbmNvbnRleHRsb3NzPWZ1bmN0aW9uKCl7dC5yZWNvdmVyQ29udGV4dCgpfSx0LmdscGxvdC5vbnJlbmRlcj1mdW5jdGlvbigpe3QucmVuZGVyKCl9LCEwfSx3LnJlbmRlcj1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuZ3JhcGhEaXYsbj1lLnN2Z0NvbnRhaW5lcixpPWUuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3IuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBhPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxvPXIuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxzPWkud2lkdGgqYSxsPWkuaGVpZ2h0Km87bi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ2aWV3Qm94IiwiMCAwICIrcysiICIrbCksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIscyksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGwpLGIoZSksZS5nbHBsb3QuYXhlcy51cGRhdGUoZS5heGVzT3B0aW9ucyk7Zm9yKHZhciBjLHU9T2JqZWN0LmtleXMoZS50cmFjZXMpLGg9bnVsbCxtPWUuZ2xwbG90LnNlbGVjdGlvbixnPTA7Zzx1Lmxlbmd0aDsrK2cpInNraXAiIT09KHQ9ZS50cmFjZXNbdVtnXV0pLmRhdGEuaG92ZXJpbmZvJiZ0LmhhbmRsZVBpY2sobSkmJihoPXQpLHQuc2V0Q29udG91ckxldmVscyYmdC5zZXRDb250b3VyTGV2ZWxzKCk7ZnVuY3Rpb24geSh0LHIsbil7dmFyIGk9ZS5mdWxsU2NlbmVMYXlvdXRbdCsiYXhpcyJdO3JldHVybiJsb2ciIT09aS50eXBlJiYocj1pLmQybChyKSkscC5ob3ZlckxhYmVsVGV4dChpLHIsbil9aWYobnVsbCE9PWgpe3ZhciB4PXYoZS5nbHBsb3QuY2FtZXJhUGFyYW1zLG0uZGF0YUNvb3JkaW5hdGUpO3Q9aC5kYXRhO3ZhciBfLHc9ci5fZnVsbERhdGFbdC5pbmRleF0sVD1tLmluZGV4LGs9e3hMYWJlbDp5KCJ4IixtLnRyYWNlQ29vcmRpbmF0ZVswXSx0Lnhob3ZlcmZvcm1hdCkseUxhYmVsOnkoInkiLG0udHJhY2VDb29yZGluYXRlWzFdLHQueWhvdmVyZm9ybWF0KSx6TGFiZWw6eSgieiIsbS50cmFjZUNvb3JkaW5hdGVbMl0sdC56aG92ZXJmb3JtYXQpfSxBPWQuY2FzdEhvdmVyaW5mbyh3LGUuZnVsbExheW91dCxUKSxNPShBfHwiIikuc3BsaXQoIisiKSxTPUEmJiJhbGwiPT09QTt3LmhvdmVydGVtcGxhdGV8fFN8fCgtMT09PU0uaW5kZXhPZigieCIpJiYoay54TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigieSIpJiYoay55TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigieiIpJiYoay56TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigidGV4dCIpJiYobS50ZXh0TGFiZWw9dm9pZCAwKSwtMT09PU0uaW5kZXhPZigibmFtZSIpJiYoaC5uYW1lPXZvaWQgMCkpO3ZhciBFPVtdOyJjb25lIj09PXQudHlwZXx8InN0cmVhbXR1YmUiPT09dC50eXBlPyhrLnVMYWJlbD15KCJ4IixtLnRyYWNlQ29vcmRpbmF0ZVszXSx0LnVob3ZlcmZvcm1hdCksKFN8fC0xIT09TS5pbmRleE9mKCJ1IikpJiZFLnB1c2goInU6ICIray51TGFiZWwpLGsudkxhYmVsPXkoInkiLG0udHJhY2VDb29yZGluYXRlWzRdLHQudmhvdmVyZm9ybWF0KSwoU3x8LTEhPT1NLmluZGV4T2YoInYiKSkmJkUucHVzaCgidjogIitrLnZMYWJlbCksay53TGFiZWw9eSgieiIsbS50cmFjZUNvb3JkaW5hdGVbNV0sdC53aG92ZXJmb3JtYXQpLChTfHwtMSE9PU0uaW5kZXhPZigidyIpKSYmRS5wdXNoKCJ3OiAiK2sud0xhYmVsKSxrLm5vcm1MYWJlbD1tLnRyYWNlQ29vcmRpbmF0ZVs2XS50b1ByZWNpc2lvbigzKSwoU3x8LTEhPT1NLmluZGV4T2YoIm5vcm0iKSkmJkUucHVzaCgibm9ybTogIitrLm5vcm1MYWJlbCksInN0cmVhbXR1YmUiPT09dC50eXBlJiYoay5kaXZlcmdlbmNlTGFiZWw9bS50cmFjZUNvb3JkaW5hdGVbN10udG9QcmVjaXNpb24oMyksKFN8fC0xIT09TS5pbmRleE9mKCJkaXZlcmdlbmNlIikpJiZFLnB1c2goImRpdmVyZ2VuY2U6ICIray5kaXZlcmdlbmNlTGFiZWwpKSxtLnRleHRMYWJlbCYmRS5wdXNoKG0udGV4dExhYmVsKSxfPUUuam9pbigiPGJyPiIpKToiaXNvc3VyZmFjZSI9PT10LnR5cGV8fCJ2b2x1bWUiPT09dC50eXBlPyhrLnZhbHVlTGFiZWw9cC5ob3ZlckxhYmVsVGV4dChlLl9tb2NrQXhpcyxlLl9tb2NrQXhpcy5kMmwobS50cmFjZUNvb3JkaW5hdGVbM10pLHQudmFsdWVob3ZlcmZvcm1hdCksRS5wdXNoKCJ2YWx1ZTogIitrLnZhbHVlTGFiZWwpLG0udGV4dExhYmVsJiZFLnB1c2gobS50ZXh0TGFiZWwpLF89RS5qb2luKCI8YnI+IikpOl89bS50ZXh0TGFiZWw7dmFyIEw9e3g6bS50cmFjZUNvb3JkaW5hdGVbMF0seTptLnRyYWNlQ29vcmRpbmF0ZVsxXSx6Om0udHJhY2VDb29yZGluYXRlWzJdLGRhdGE6dy5faW5wdXQsZnVsbERhdGE6dyxjdXJ2ZU51bWJlcjp3LmluZGV4LHBvaW50TnVtYmVyOlR9O2QuYXBwZW5kQXJyYXlQb2ludFZhbHVlKEwsdyxUKSx0Ll9tb2R1bGUuZXZlbnREYXRhJiYoTD13Ll9tb2R1bGUuZXZlbnREYXRhKEwsbSx3LHt9LFQpKTt2YXIgQz17cG9pbnRzOltMXX07aWYoZS5mdWxsU2NlbmVMYXlvdXQuaG92ZXJtb2RlKXt2YXIgUD1bXTtkLmxvbmVIb3Zlcih7dHJhY2U6dyx4OiguNSsuNSp4WzBdL3hbM10pKnMseTooLjUtLjUqeFsxXS94WzNdKSpsLHhMYWJlbDprLnhMYWJlbCx5TGFiZWw6ay55TGFiZWwsekxhYmVsOmsuekxhYmVsLHRleHQ6XyxuYW1lOmgubmFtZSxjb2xvcjpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImJnY29sb3IiKXx8aC5jb2xvcixib3JkZXJDb2xvcjpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpkLmNhc3RIb3Zlck9wdGlvbih3LFQsImZvbnQuZmFtaWx5IiksZm9udFNpemU6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJmb250LnNpemUiKSxmb250Q29sb3I6ZC5jYXN0SG92ZXJPcHRpb24odyxULCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpkLmNhc3RIb3Zlck9wdGlvbih3LFQsIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246ZC5jYXN0SG92ZXJPcHRpb24odyxULCJhbGlnbiIpLGhvdmVydGVtcGxhdGU6Zi5jYXN0T3B0aW9uKHcsVCwiaG92ZXJ0ZW1wbGF0ZSIpLGhvdmVydGVtcGxhdGVMYWJlbHM6Zi5leHRlbmRGbGF0KHt9LEwsayksZXZlbnREYXRhOltMXX0se2NvbnRhaW5lcjpuLGdkOnIsaW5PdXRfYmJveDpQfSksTC5iYm94PVBbMF19bS5idXR0b25zJiZtLmRpc3RhbmNlPDU/ci5lbWl0KCJwbG90bHlfY2xpY2siLEMpOnIuZW1pdCgicGxvdGx5X2hvdmVyIixDKSxjPUN9ZWxzZSBkLmxvbmVVbmhvdmVyKG4pLHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLGMpO2UuZHJhd0Fubm90YXRpb25zKGUpfSx3LnJlY292ZXJDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmdscGxvdC5kaXNwb3NlKCk7dmFyIGU9ZnVuY3Rpb24oKXt0LmdscGxvdC5nbC5pc0NvbnRleHRMb3N0KCk/cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnQuaW5pdGlhbGl6ZUdMUGxvdCgpP3QucGxvdC5hcHBseSh0LHQucGxvdEFyZ3MpOmYuZXJyb3IoIkNhdGFzdHJvcGhpYyBhbmQgdW5yZWNvdmVyYWJsZSBXZWJHTCBlcnJvci4gQ29udGV4dCBsb3N0LiIpfTtyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSl9O3ZhciBrPVsieGF4aXMiLCJ5YXhpcyIsInpheGlzIl07ZnVuY3Rpb24gQSh0LGUscil7Zm9yKHZhciBuPXQuZnVsbFNjZW5lTGF5b3V0LGk9MDtpPDM7aSsrKXt2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1uW2FdLGw9ZVtvXSxjPWVbbysiY2FsZW5kYXIiXSx1PWVbIl8iK28rImxlbmd0aCJdO2lmKGYuaXNBcnJheU9yVHlwZWRBcnJheShsKSlmb3IodmFyIGgscD0wO3A8KHV8fGwubGVuZ3RoKTtwKyspaWYoZi5pc0FycmF5T3JUeXBlZEFycmF5KGxbcF0pKWZvcih2YXIgZD0wO2Q8bFtwXS5sZW5ndGg7KytkKWg9cy5kMmwobFtwXVtkXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIGg9cy5kMmwobFtwXSwwLGMpLCFpc05hTihoKSYmaXNGaW5pdGUoaCkmJihyWzBdW2ldPU1hdGgubWluKHJbMF1baV0saCksclsxXVtpXT1NYXRoLm1heChyWzFdW2ldLGgpKTtlbHNlIHJbMF1baV09TWF0aC5taW4oclswXVtpXSwwKSxyWzFdW2ldPU1hdGgubWF4KHJbMV1baV0sdS0xKX19dy5wbG90PWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLnBsb3RBcmdzPVt0LGUscl0sIXRoaXMuZ2xwbG90LmNvbnRleHRMb3N0KXt2YXIgbixpLGEsbyxzLGwsYz1lW3RoaXMuaWRdLHU9clt0aGlzLmlkXTt0aGlzLmZ1bGxMYXlvdXQ9ZSx0aGlzLmZ1bGxTY2VuZUxheW91dD1jLHRoaXMuYXhlc09wdGlvbnMubWVyZ2UoZSxjKSx0aGlzLnNwaWtlT3B0aW9ucy5tZXJnZShjKSx0aGlzLnNldFZpZXdwb3J0KGMpLHRoaXMudXBkYXRlRngoYy5kcmFnbW9kZSxjLmhvdmVybW9kZSksdGhpcy5jYW1lcmEuZW5hYmxlV2hlZWw9dGhpcy5ncmFwaERpdi5fY29udGV4dC5fc2Nyb2xsWm9vbS5nbDNkLHRoaXMuZ2xwbG90LnNldENsZWFyQ29sb3IobShjLmJnY29sb3IpKSx0aGlzLnNldENvbnZlcnQocyksdD9BcnJheS5pc0FycmF5KHQpfHwodD1bdF0pOnQ9W107dmFyIGY9W1sxLzAsMS8wLDEvMF0sWy0xLzAsLTEvMCwtMS8wXV07Zm9yKGE9MDthPHQubGVuZ3RoOysrYSkhMD09PShuPXRbYV0pLnZpc2libGUmJjAhPT1uLl9sZW5ndGgmJkEodGhpcyxuLGYpOyFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LmZ1bGxTY2VuZUxheW91dCxuPXIuYW5ub3RhdGlvbnN8fFtdLGk9MDtpPDM7aSsrKWZvcih2YXIgYT1rW2ldLG89YS5jaGFyQXQoMCkscz1yW2FdLGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9bltsXTtpZihjLnZpc2libGUpe3ZhciB1PXMucjJsKGNbb10pOyFpc05hTih1KSYmaXNGaW5pdGUodSkmJihlWzBdW2ldPU1hdGgubWluKGVbMF1baV0sdSksZVsxXVtpXT1NYXRoLm1heChlWzFdW2ldLHUpKX19fSh0aGlzLGYpO3ZhciBoPVsxLDEsMV07Zm9yKG89MDtvPDM7KytvKWZbMV1bb109PT1mWzBdW29dP2hbb109MTpoW29dPTEvKGZbMV1bb10tZlswXVtvXSk7Zm9yKHRoaXMuZGF0YVNjYWxlPWgsdGhpcy5jb252ZXJ0QW5ub3RhdGlvbnModGhpcyksYT0wO2E8dC5sZW5ndGg7KythKSEwPT09KG49dFthXSkudmlzaWJsZSYmMCE9PW4uX2xlbmd0aCYmKChpPXRoaXMudHJhY2VzW24udWlkXSk/aS5kYXRhLnR5cGU9PT1uLnR5cGU/aS51cGRhdGUobik6KGkuZGlzcG9zZSgpLGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSk6KGk9bi5fbW9kdWxlLnBsb3QodGhpcyxuKSx0aGlzLnRyYWNlc1tuLnVpZF09aSksaS5uYW1lPW4ubmFtZSk7dmFyIHA9T2JqZWN0LmtleXModGhpcy50cmFjZXMpO3Q6Zm9yKGE9MDthPHAubGVuZ3RoOysrYSl7Zm9yKG89MDtvPHQubGVuZ3RoOysrbylpZih0W29dLnVpZD09PXBbYV0mJiEwPT09dFtvXS52aXNpYmxlJiYwIT09dFtvXS5fbGVuZ3RoKWNvbnRpbnVlIHQ7KGk9dGhpcy50cmFjZXNbcFthXV0pLmRpc3Bvc2UoKSxkZWxldGUgdGhpcy50cmFjZXNbcFthXV19dGhpcy5nbHBsb3Qub2JqZWN0cy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0Ll90cmFjZS5kYXRhLmluZGV4LWUuX3RyYWNlLmRhdGEuaW5kZXh9KSk7dmFyIGQsZz1bWzAsMCwwXSxbMCwwLDBdXSx2PVtdLHk9e307Zm9yKGE9MDthPDM7KythKXtpZigobD0ocz1jW2tbYV1dKS50eXBlKWluIHk/KHlbbF0uYWNjKj1oW2FdLHlbbF0uY291bnQrPTEpOnlbbF09e2FjYzpoW2FdLGNvdW50OjF9LHMuYXV0b3JhbmdlKXtnWzBdW2FdPTEvMCxnWzFdW2FdPS0xLzA7dmFyIHg9dGhpcy5nbHBsb3Qub2JqZWN0cyxiPXRoaXMuZnVsbFNjZW5lTGF5b3V0LmFubm90YXRpb25zfHxbXSxfPXMuX25hbWUuY2hhckF0KDApO2ZvcihvPTA7bzx4Lmxlbmd0aDtvKyspe3ZhciB3PXhbb10sVD13LmJvdW5kcyxNPXcuX3RyYWNlLmRhdGEuX3BhZHx8MDsiRXJyb3JCYXJzIj09PXcuY29uc3RydWN0b3IubmFtZSYmcy5fbG93ZXJMb2dFcnJvckJvdW5kP2dbMF1bYV09TWF0aC5taW4oZ1swXVthXSxzLl9sb3dlckxvZ0Vycm9yQm91bmQpOmdbMF1bYV09TWF0aC5taW4oZ1swXVthXSxUWzBdW2FdL2hbYV0tTSksZ1sxXVthXT1NYXRoLm1heChnWzFdW2FdLFRbMV1bYV0vaFthXStNKX1mb3Iobz0wO288Yi5sZW5ndGg7bysrKXt2YXIgUz1iW29dO2lmKFMudmlzaWJsZSl7dmFyIEU9cy5yMmwoU1tfXSk7Z1swXVthXT1NYXRoLm1pbihnWzBdW2FdLEUpLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSxFKX19aWYoInJhbmdlbW9kZSJpbiBzJiYidG96ZXJvIj09PXMucmFuZ2Vtb2RlJiYoZ1swXVthXT1NYXRoLm1pbihnWzBdW2FdLDApLGdbMV1bYV09TWF0aC5tYXgoZ1sxXVthXSwwKSksZ1swXVthXT5nWzFdW2FdKWdbMF1bYV09LTEsZ1sxXVthXT0xO2Vsc2V7dmFyIEw9Z1sxXVthXS1nWzBdW2FdO2dbMF1bYV0tPUwvMzIsZ1sxXVthXSs9TC8zMn1pZigicmV2ZXJzZWQiPT09cy5hdXRvcmFuZ2Upe3ZhciBDPWdbMF1bYV07Z1swXVthXT1nWzFdW2FdLGdbMV1bYV09Q319ZWxzZXt2YXIgUD1zLnJhbmdlO2dbMF1bYV09cy5yMmwoUFswXSksZ1sxXVthXT1zLnIybChQWzFdKX1nWzBdW2FdPT09Z1sxXVthXSYmKGdbMF1bYV0tPTEsZ1sxXVthXSs9MSksdlthXT1nWzFdW2FdLWdbMF1bYV0sdGhpcy5nbHBsb3Quc2V0Qm91bmRzKGEse21pbjpnWzBdW2FdKmhbYV0sbWF4OmdbMV1bYV0qaFthXX0pfXZhciBJPWMuYXNwZWN0bW9kZTtpZigiY3ViZSI9PT1JKWQ9WzEsMSwxXTtlbHNlIGlmKCJtYW51YWwiPT09SSl7dmFyIE89Yy5hc3BlY3RyYXRpbztkPVtPLngsTy55LE8uel19ZWxzZXtpZigiYXV0byIhPT1JJiYiZGF0YSIhPT1JKXRocm93IG5ldyBFcnJvcigic2NlbmUuanMgYXNwZWN0UmF0aW8gd2FzIG5vdCBvbmUgb2YgdGhlIGVudW1lcmF0ZWQgdHlwZXMiKTt2YXIgej1bMSwxLDFdO2ZvcihhPTA7YTwzOysrYSl7dmFyIEQ9eVtsPShzPWNba1thXV0pLnR5cGVdO3pbYV09TWF0aC5wb3coRC5hY2MsMS9ELmNvdW50KS9oW2FdfWQ9ImRhdGEiPT09SXx8TWF0aC5tYXguYXBwbHkobnVsbCx6KS9NYXRoLm1pbi5hcHBseShudWxsLHopPD00P3o6WzEsMSwxXX1jLmFzcGVjdHJhdGlvLng9dS5hc3BlY3RyYXRpby54PWRbMF0sYy5hc3BlY3RyYXRpby55PXUuYXNwZWN0cmF0aW8ueT1kWzFdLGMuYXNwZWN0cmF0aW8uej11LmFzcGVjdHJhdGlvLno9ZFsyXSx0aGlzLmdscGxvdC5zZXRBc3BlY3RyYXRpbyhjLmFzcGVjdHJhdGlvKSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdHJhdGlvfHwodGhpcy52aWV3SW5pdGlhbC5hc3BlY3RyYXRpbz17eDpjLmFzcGVjdHJhdGlvLngseTpjLmFzcGVjdHJhdGlvLnksejpjLmFzcGVjdHJhdGlvLnp9KSx0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGV8fCh0aGlzLnZpZXdJbml0aWFsLmFzcGVjdG1vZGU9Yy5hc3BlY3Rtb2RlKTt2YXIgUj1jLmRvbWFpbnx8bnVsbCxGPWUuX3NpemV8fG51bGw7aWYoUiYmRil7dmFyIEI9dGhpcy5jb250YWluZXIuc3R5bGU7Qi5wb3NpdGlvbj0iYWJzb2x1dGUiLEIubGVmdD1GLmwrUi54WzBdKkYudysicHgiLEIudG9wPUYudCsoMS1SLnlbMV0pKkYuaCsicHgiLEIud2lkdGg9Ri53KihSLnhbMV0tUi54WzBdKSsicHgiLEIuaGVpZ2h0PUYuaCooUi55WzFdLVIueVswXSkrInB4In10aGlzLmdscGxvdC5yZWRyYXcoKX19LHcuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuZ2xwbG90JiYodGhpcy5jYW1lcmEubW91c2VMaXN0ZW5lci5lbmFibGVkPSExLHRoaXMuY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIix0aGlzLmNhbWVyYS53aGVlbExpc3RlbmVyKSx0aGlzLmNhbWVyYT1udWxsLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmdscGxvdD1udWxsKX0sdy5nZXRDYW1lcmE9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5jYW1lcmEudmlldy5yZWNhbGNNYXRyaXgodGhpcy5jYW1lcmEudmlldy5sYXN0VCgpKSx7dXA6e3g6KHQ9dGhpcy5jYW1lcmEpLnVwWzBdLHk6dC51cFsxXSx6OnQudXBbMl19LGNlbnRlcjp7eDp0LmNlbnRlclswXSx5OnQuY2VudGVyWzFdLHo6dC5jZW50ZXJbMl19LGV5ZTp7eDp0LmV5ZVswXSx5OnQuZXllWzFdLHo6dC5leWVbMl19LHByb2plY3Rpb246e3R5cGU6ITA9PT10Ll9vcnRobz8ib3J0aG9ncmFwaGljIjoicGVyc3BlY3RpdmUifX19LHcuc2V0Vmlld3BvcnQ9ZnVuY3Rpb24odCl7dmFyIGUscj10LmNhbWVyYTt0aGlzLmNhbWVyYS5sb29rQXQuYXBwbHkodGhpcyxbWyhlPXIpLmV5ZS54LGUuZXllLnksZS5leWUuel0sW2UuY2VudGVyLngsZS5jZW50ZXIueSxlLmNlbnRlci56XSxbZS51cC54LGUudXAueSxlLnVwLnpdXSksdGhpcy5nbHBsb3Quc2V0QXNwZWN0cmF0aW8odC5hc3BlY3RyYXRpbyksIm9ydGhvZ3JhcGhpYyI9PT1yLnByb2plY3Rpb24udHlwZSE9PXRoaXMuY2FtZXJhLl9vcnRobyYmKHRoaXMuZ2xwbG90LnJlZHJhdygpLHRoaXMuZ2xwbG90LmNsZWFyUkdCQSgpLHRoaXMuZ2xwbG90LmRpc3Bvc2UoKSx0aGlzLmluaXRpYWxpemVHTFBsb3QoKSl9LHcuaXNDYW1lcmFDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2V0Q2FtZXJhKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmNhbWVyYSIpLmdldCgpO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9WyJ1cCIsImNlbnRlciIsImV5ZSJdLGE9WyJ4IiwieSIsInoiXTtyZXR1cm4gZVtpW3JdXSYmdFtpW3JdXVthW25dXT09PWVbaVtyXV1bYVtuXV19dmFyIGk9ITE7aWYodm9pZCAwPT09cilpPSEwO2Vsc2V7Zm9yKHZhciBhPTA7YTwzO2ErKylmb3IodmFyIG89MDtvPDM7bysrKWlmKCFuKGUscixhLG8pKXtpPSEwO2JyZWFrfSghci5wcm9qZWN0aW9ufHxlLnByb2plY3Rpb24mJmUucHJvamVjdGlvbi50eXBlIT09ci5wcm9qZWN0aW9uLnR5cGUpJiYoaT0hMCl9cmV0dXJuIGl9LHcuaXNBc3BlY3RDaGFuZ2VkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZ2xwbG90LmdldEFzcGVjdHJhdGlvKCkscj1mLm5lc3RlZFByb3BlcnR5KHQsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuZ2V0KCk7cmV0dXJuIHZvaWQgMD09PXJ8fHIueCE9PWUueHx8ci55IT09ZS55fHxyLnohPT1lLnp9LHcuc2F2ZUxheW91dD1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhLG8scz10aGlzLmZ1bGxMYXlvdXQsbD10aGlzLmlzQ2FtZXJhQ2hhbmdlZCh0KSxjPXRoaXMuaXNBc3BlY3RDaGFuZ2VkKHQpLGg9bHx8YztpZihoKXt2YXIgcD17fTtpZihsJiYoZT10aGlzLmdldENhbWVyYSgpLG49KHI9Zi5uZXN0ZWRQcm9wZXJ0eSh0LHRoaXMuaWQrIi5jYW1lcmEiKSkuZ2V0KCkscFt0aGlzLmlkKyIuY2FtZXJhIl09biksYyYmKGk9dGhpcy5nbHBsb3QuZ2V0QXNwZWN0cmF0aW8oKSxvPShhPWYubmVzdGVkUHJvcGVydHkodCx0aGlzLmlkKyIuYXNwZWN0cmF0aW8iKSkuZ2V0KCkscFt0aGlzLmlkKyIuYXNwZWN0cmF0aW8iXT1vKSx1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLHQscy5fcHJlR1VJLHApLGwpci5zZXQoZSksZi5uZXN0ZWRQcm9wZXJ0eShzLHRoaXMuaWQrIi5jYW1lcmEiKS5zZXQoZSk7aWYoYylhLnNldChpKSxmLm5lc3RlZFByb3BlcnR5KHMsdGhpcy5pZCsiLmFzcGVjdHJhdGlvIikuc2V0KGkpLHRoaXMuZ2xwbG90LnJlZHJhdygpfXJldHVybiBofSx3LnVwZGF0ZUZ4PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5jYW1lcmE7aWYocilpZigib3JiaXQiPT09dClyLm1vZGU9Im9yYml0IixyLmtleUJpbmRpbmdNb2RlPSJyb3RhdGUiO2Vsc2UgaWYoInR1cm50YWJsZSI9PT10KXtyLnVwPVswLDAsMV0sci5tb2RlPSJ0dXJudGFibGUiLHIua2V5QmluZGluZ01vZGU9InJvdGF0ZSI7dmFyIG49dGhpcy5ncmFwaERpdixpPW4uX2Z1bGxMYXlvdXQsYT10aGlzLmZ1bGxTY2VuZUxheW91dC5jYW1lcmEsbz1hLnVwLngscz1hLnVwLnksbD1hLnVwLno7aWYobC9NYXRoLnNxcnQobypvK3MqcytsKmwpPC45OTkpe3ZhciBjPXRoaXMuaWQrIi5jYW1lcmEudXAiLGg9e3g6MCx5OjAsejoxfSxwPXt9O3BbY109aDt2YXIgZD1uLmxheW91dDt1LmNhbGwoIl9zdG9yZURpcmVjdEdVSUVkaXQiLGQsaS5fcHJlR1VJLHApLGEudXA9aCxmLm5lc3RlZFByb3BlcnR5KGQsYykuc2V0KGgpfX1lbHNlIHIua2V5QmluZGluZ01vZGU9dDt0aGlzLmZ1bGxTY2VuZUxheW91dC5ob3Zlcm1vZGU9ZX0sdy50b0ltYWdlPWZ1bmN0aW9uKHQpe3R8fCh0PSJwbmciKSx0aGlzLnN0YXRpY01vZGUmJnRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKG4pLHRoaXMuZ2xwbG90LnJlZHJhdygpO3ZhciBlPXRoaXMuZ2xwbG90LmdsLHI9ZS5kcmF3aW5nQnVmZmVyV2lkdGgsaT1lLmRyYXdpbmdCdWZmZXJIZWlnaHQ7ZS5iaW5kRnJhbWVidWZmZXIoZS5GUkFNRUJVRkZFUixudWxsKTt2YXIgYT1uZXcgVWludDhBcnJheShyKmkqNCk7ZS5yZWFkUGl4ZWxzKDAsMCxyLGksZS5SR0JBLGUuVU5TSUdORURfQllURSxhKSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPTAsaT1yLTE7bjxpOysrbiwtLWkpZm9yKHZhciBhPTA7YTxlOysrYSlmb3IodmFyIG89MDtvPDQ7KytvKXt2YXIgcz00KihlKm4rYSkrbyxsPTQqKGUqaSthKStvLGM9dFtzXTt0W3NdPXRbbF0sdFtsXT1jfX0oYSxyLGkpLGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPHI7KytuKWZvcih2YXIgaT0wO2k8ZTsrK2kpe3ZhciBhPTQqKGUqbitpKSxvPXRbYSszXTtpZihvPjApZm9yKHZhciBzPTI1NS9vLGw9MDtsPDM7KytsKXRbYStsXT1NYXRoLm1pbihzKnRbYStsXSwyNTUpfX0oYSxyLGkpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO28ud2lkdGg9cixvLmhlaWdodD1pO3ZhciBzLGw9by5nZXRDb250ZXh0KCIyZCIpLGM9bC5jcmVhdGVJbWFnZURhdGEocixpKTtzd2l0Y2goYy5kYXRhLnNldChhKSxsLnB1dEltYWdlRGF0YShjLDAsMCksdCl7Y2FzZSJqcGVnIjpzPW8udG9EYXRhVVJMKCJpbWFnZS9qcGVnIik7YnJlYWs7Y2FzZSJ3ZWJwIjpzPW8udG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7ZGVmYXVsdDpzPW8udG9EYXRhVVJMKCJpbWFnZS9wbmciKX1yZXR1cm4gdGhpcy5zdGF0aWNNb2RlJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmVDaGlsZChuKSxzfSx3LnNldENvbnZlcnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PDM7dCsrKXt2YXIgZT10aGlzLmZ1bGxTY2VuZUxheW91dFtrW3RdXTtwLnNldENvbnZlcnQoZSx0aGlzLmZ1bGxMYXlvdXQpLGUuc2V0U2NhbGU9Zi5ub29wfX0sdy5tYWtlNHRoRGltZW5zaW9uPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5ncmFwaERpdi5fZnVsbExheW91dDt0aGlzLl9tb2NrQXhpcz17dHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIifSxwLnNldENvbnZlcnQodGhpcy5fbW9ja0F4aXMsdCl9LGUuZXhwb3J0cz1ffSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zaG93X25vX3dlYmdsX21zZyI6Nzk4LCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vbGF5b3V0L2NvbnZlcnQiOjg3MywiLi9sYXlvdXQvc3Bpa2VzIjo4NzYsIi4vbGF5b3V0L3RpY2tfbWFya3MiOjg3NywiLi9wcm9qZWN0Ijo4NzgsImdsLXBsb3QzZCI6MzEyLCJoYXMtcGFzc2l2ZS1ldmVudHMiOjQyNiwid2ViZ2wtY29udGV4dCI6NjAyfV0sODgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtuPW58fHQubGVuZ3RoO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksYT0wO2E8bjthKyspaVthXT1bdFthXSxlW2FdLHJbYV1dO3JldHVybiBpfX0se31dLDg4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9hbmltYXRpb25fYXR0cmlidXRlcyIpLGE9dCgiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi9jb21wb25lbnRzL3NoYXBlcy9kcmF3X25ld3NoYXBlL2F0dHJpYnV0ZXMiKSxzPXQoIi4vcGFkX2F0dHJpYnV0ZXMiKSxsPXQoIi4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9bih7ZWRpdFR5cGU6ImNhbGMifSk7Yy5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxjLnNpemUuZGZsdD0xMixjLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2ZvbnQ6Yyx0aXRsZTp7dGV4dDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSxmb250Om4oe2VkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9KSx4cmVmOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJjb250YWluZXIiLHZhbHVlczpbImNvbnRhaW5lciIsInBhcGVyIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0seXJlZjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZGZsdDoiY29udGFpbmVyIix2YWx1ZXM6WyJjb250YWluZXIiLCJwYXBlciJdLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouNSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LHhhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGRmbHQ6ImF1dG8iLHZhbHVlczpbImF1dG8iLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx5YW5jaG9yOnt2YWxUeXBlOiJlbnVtZXJhdGVkIixkZmx0OiJhdXRvIix2YWx1ZXM6WyJhdXRvIiwidG9wIiwibWlkZGxlIiwiYm90dG9tIl0sZWRpdFR5cGU6ImxheW91dHN0eWxlIn0scGFkOmwocyh7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pLHt9KSxlZGl0VHlwZToibGF5b3V0c3R5bGUifSx1bmlmb3JtdGV4dDp7bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlshMSwiaGlkZSIsInNob3ciXSxkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sbWluc2l6ZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGF1dG9zaXplOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJub25lIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjEwLGRmbHQ6NzAwLGVkaXRUeXBlOiJwbG90In0saGVpZ2h0Ont2YWxUeXBlOiJudW1iZXIiLG1pbjoxMCxkZmx0OjQ1MCxlZGl0VHlwZToicGxvdCJ9LG1hcmdpbjp7bDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjgwLGVkaXRUeXBlOiJwbG90In0sdDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEwMCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo4MCxlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxhdXRvZXhwYW5kOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxjb21wdXRlZDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHBhcGVyX2JnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuYmFja2dyb3VuZCxlZGl0VHlwZToicGxvdCJ9LHBsb3RfYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5iYWNrZ3JvdW5kLGVkaXRUeXBlOiJsYXlvdXRzdHlsZSJ9LGF1dG90eXBlbnVtYmVyczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY29udmVydCB0eXBlcyIsInN0cmljdCJdLGRmbHQ6ImNvbnZlcnQgdHlwZXMiLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdG9yczp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LGhpZGVzb3VyY2VzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sc2hvd2xlZ2VuZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImxlZ2VuZCJ9LGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGRmbHQ6YS5kZWZhdWx0cyxlZGl0VHlwZToiY2FsYyJ9LGRhdGFyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LHVpcmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxlZGl0cmV2aXNpb246e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxzZWxlY3Rpb25yZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LHRlbXBsYXRlOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sbmV3c2hhcGU6by5uZXdzaGFwZSxhY3RpdmVzaGFwZTpvLmFjdGl2ZXNoYXBlLG1ldGE6e3ZhbFR5cGU6ImFueSIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRyYW5zaXRpb246bCh7fSxpLnRyYW5zaXRpb24se2VkaXRUeXBlOiJub25lIn0pLF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToibGF5b3V0c3R5bGUifSx0aXRsZWZvbnQ6bih7ZWRpdFR5cGU6ImxheW91dHN0eWxlIn0pfX19LHsiLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uL2NvbXBvbmVudHMvc2hhcGVzL2RyYXdfbmV3c2hhcGUvYXR0cmlidXRlcyI6NzI0LCIuLi9saWIvZXh0ZW5kIjo3NjYsIi4vYW5pbWF0aW9uX2F0dHJpYnV0ZXMiOjgyMSwiLi9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi9wYWRfYXR0cmlidXRlcyI6ODg5fV0sODgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksaT0nXHhhOSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLGE9WydceGE5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NhcnRvLmNvbS8iPkNhcnRvPC9hPicsaV0uam9pbigiICIpLG89WydNYXAgdGlsZXMgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vc3RhbWVuLmNvbSI+U3RhbWVuIERlc2lnbjwvYT4nLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMCI+Q0MgQlkgMy4wPC9hPicsInwiLCdEYXRhIGJ5IDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL29wZW5zdHJlZXRtYXAub3JnIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMnLCd1bmRlciA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0Ij5PRGJMPC9hPiddLmpvaW4oIiAiKSxzPXsib3Blbi1zdHJlZXQtbWFwIjp7aWQ6Im9zbSIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktb3NtLXRpbGVzIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjppLHRpbGVzOlsiaHR0cHM6Ly9hLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIiwiaHR0cHM6Ly9iLnRpbGUub3BlbnN0cmVldG1hcC5vcmcve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1vc20tdGlsZXMiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktb3NtLXRpbGVzIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwid2hpdGUtYmciOntpZDoid2hpdGUtYmciLHZlcnNpb246OCxzb3VyY2VzOnt9LGxheWVyczpbe2lkOiJ3aGl0ZS1iZyIsdHlwZToiYmFja2dyb3VuZCIscGFpbnQ6eyJiYWNrZ3JvdW5kLWNvbG9yIjoiI0ZGRkZGRiJ9LG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1wb3NpdHJvbiI6e2lkOiJjYXJ0by1wb3NpdHJvbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktY2FydG8tcG9zaXRyb24iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvbGlnaHRfYWxsL3t6fS97eH0ve3l9LnBuZyJdLHRpbGVTaXplOjI1Nn19LGxheWVyczpbe2lkOiJwbG90bHktY2FydG8tcG9zaXRyb24iLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktY2FydG8tcG9zaXRyb24iLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJjYXJ0by1kYXJrbWF0dGVyIjp7aWQ6ImNhcnRvLWRhcmttYXR0ZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOmEsdGlsZXM6WyJodHRwczovL2NhcnRvZGItYmFzZW1hcHMtYy5nbG9iYWwuc3NsLmZhc3RseS5uZXQvZGFya19hbGwve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1jYXJ0by1kYXJrbWF0dGVyIix0eXBlOiJyYXN0ZXIiLHNvdXJjZToicGxvdGx5LWNhcnRvLWRhcmttYXR0ZXIiLG1pbnpvb206MCxtYXh6b29tOjIyfV19LCJzdGFtZW4tdGVycmFpbiI6e2lkOiJzdGFtZW4tdGVycmFpbiIsdmVyc2lvbjo4LHNvdXJjZXM6eyJwbG90bHktc3RhbWVuLXRlcnJhaW4iOnt0eXBlOiJyYXN0ZXIiLGF0dHJpYnV0aW9uOm8sdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3RlcnJhaW4ve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4tdGVycmFpbiIsbWluem9vbTowLG1heHpvb206MjJ9XX0sInN0YW1lbi10b25lciI6e2lkOiJzdGFtZW4tdG9uZXIiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi10b25lciI6e3R5cGU6InJhc3RlciIsYXR0cmlidXRpb246byx0aWxlczpbImh0dHBzOi8vc3RhbWVuLXRpbGVzLmEuc3NsLmZhc3RseS5uZXQvdG9uZXIve3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4tdG9uZXIiLHR5cGU6InJhc3RlciIsc291cmNlOiJwbG90bHktc3RhbWVuLXRvbmVyIixtaW56b29tOjAsbWF4em9vbToyMn1dfSwic3RhbWVuLXdhdGVyY29sb3IiOntpZDoic3RhbWVuLXdhdGVyY29sb3IiLHZlcnNpb246OCxzb3VyY2VzOnsicGxvdGx5LXN0YW1lbi13YXRlcmNvbG9yIjp7dHlwZToicmFzdGVyIixhdHRyaWJ1dGlvbjpbJ01hcCB0aWxlcyBieSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iaHR0cHM6Ly9zdGFtZW4uY29tIj5TdGFtZW4gRGVzaWduPC9hPicsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMy4wIj5DQyBCWSAzLjA8L2E+JywifCIsJ0RhdGEgYnkgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vb3BlbnN0cmVldG1hcC5vcmciPk9wZW5TdHJlZXRNYXA8L2E+IGNvbnRyaWJ1dG9ycycsJ3VuZGVyIDxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMy4wIj5DQyBCWSBTQTwvYT4nXS5qb2luKCIgIiksdGlsZXM6WyJodHRwczovL3N0YW1lbi10aWxlcy5hLnNzbC5mYXN0bHkubmV0L3dhdGVyY29sb3Ive3p9L3t4fS97eX0ucG5nIl0sdGlsZVNpemU6MjU2fX0sbGF5ZXJzOlt7aWQ6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsdHlwZToicmFzdGVyIixzb3VyY2U6InBsb3RseS1zdGFtZW4td2F0ZXJjb2xvciIsbWluem9vbTowLG1heHpvb206MjJ9XX19LGw9bihzKTtlLmV4cG9ydHM9e3JlcXVpcmVkVmVyc2lvbjoiMS4xMC4xIixzdHlsZVVybFByZWZpeDoibWFwYm94Oi8vc3R5bGVzL21hcGJveC8iLHN0eWxlVXJsU3VmZml4OiJ2OSIsc3R5bGVWYWx1ZXNNYXBib3g6WyJiYXNpYyIsInN0cmVldHMiLCJvdXRkb29ycyIsImxpZ2h0IiwiZGFyayIsInNhdGVsbGl0ZSIsInNhdGVsbGl0ZS1zdHJlZXRzIl0sc3R5bGVWYWx1ZURmbHQ6ImJhc2ljIixzdHlsZXNOb25NYXBib3g6cyxzdHlsZVZhbHVlc05vbk1hcGJveDpsLHRyYWNlTGF5ZXJQcmVmaXg6InBsb3RseS10cmFjZS1sYXllci0iLGxheW91dExheWVyUHJlZml4OiJwbG90bHktbGF5b3V0LWxheWVyLSIsd3JvbmdWZXJzaW9uRXJyb3JNc2c6WyJZb3VyIGN1c3RvbSBwbG90bHkuanMgYnVuZGxlIGlzIG5vdCB1c2luZyB0aGUgY29ycmVjdCBtYXBib3gtZ2wgdmVyc2lvbiIsIlBsZWFzZSBpbnN0YWxsIG1hcGJveC1nbEAxLjEwLjEuIl0uam9pbigiXG4iKSxub0FjY2Vzc1Rva2VuRXJyb3JNc2c6WyJNaXNzaW5nIE1hcGJveCBhY2Nlc3MgdG9rZW4uIiwiTWFwYm94IHRyYWNlIHR5cGUgcmVxdWlyZSBhIE1hcGJveCBhY2Nlc3MgdG9rZW4gdG8gYmUgcmVnaXN0ZXJlZC4iLCJGb3IgZXhhbXBsZToiLCIgIFBsb3RseS5uZXdQbG90KGdkLCBkYXRhLCBsYXlvdXQsIHsgbWFwYm94QWNjZXNzVG9rZW46ICdteS1hY2Nlc3MtdG9rZW4nIH0pOyIsIk1vcmUgaW5mbyBoZXJlOiBodHRwczovL3d3dy5tYXBib3guY29tL2hlbHAvZGVmaW5lLWFjY2Vzcy10b2tlbi8iXS5qb2luKCJcbiIpLG1pc3NpbmdTdHlsZUVycm9yTXNnOlsiTm8gdmFsaWQgbWFwYm94IHN0eWxlIGZvdW5kLCBwbGVhc2Ugc2V0IGBtYXBib3guc3R5bGVgIHRvIG9uZSBvZjoiLGwuam9pbigiLCAiKSwib3IgcmVnaXN0ZXIgYSBNYXBib3ggYWNjZXNzIHRva2VuIHRvIHVzZSBhIE1hcGJveC1zZXJ2ZWQgc3R5bGUuIl0uam9pbigiXG4iKSxtdWx0aXBsZVRva2Vuc0Vycm9yTXNnOlsiU2V0IG11bHRpcGxlIG1hcGJveCBhY2Nlc3MgdG9rZW4gYWNyb3NzIGRpZmZlcmVudCBtYXBib3ggc3VicGxvdCwiLCJ1c2luZyBmaXJzdCB0b2tlbiBmb3VuZCBhcyBtYXBib3gtZ2wgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGVhY2Nlc3MgdG9rZW5zIG9uIHRoZSBzYW1lIHBhZ2UuIl0uam9pbigiXG4iKSxtYXBPbkVycm9yTXNnOiJNYXBib3ggZXJyb3IuIixtYXBib3hMb2dvOntwYXRoMDoibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IixwYXRoMToiTSAxMC41LC0wLjAxIEMgNC43LC0wLjAxIDAsNC43IDAsMTAuNDkgYyAwLDUuNzkgNC43LDEwLjUgMTAuNSwxMC41IDUuOCwwIDEwLjUsLTQuNyAxMC41LC0xMC41IEMgMjAuOTksNC43IDE2LjMsLTAuMDEgMTAuNSwtMC4wMSBaIG0gMCwxOS43NSBjIC01LjExLDAgLTkuMjUsLTQuMTUgLTkuMjUsLTkuMjUgMCwtNS4xIDQuMTQsLTkuMjYgOS4yNSwtOS4yNiA1LjExLDAgOS4yNSw0LjE1IDkuMjUsOS4yNSAwLDUuMTMgLTQuMTQsOS4yNiAtOS4yNSw5LjI2IHoiLHBhdGgyOiJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiLHBvbHlnb246IjExLjU2LDEyLjIxIDEwLjY2LDEwLjM0IDguOCw5LjQzIDEwLjY2LDguNTMgMTEuNTYsNi42NiAxMi40Nyw4LjUzIDE0LjMzLDkuNDMgMTIuNDcsMTAuMzQifSxzdHlsZVJ1bGVzOnttYXA6Im92ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTsiLCJtaXNzaW5nLWNzcyI6ImRpc3BsYXk6bm9uZTsiLGNhbmFyeToiYmFja2dyb3VuZC1jb2xvcjpzYWxtb247IiwiY3RybC1ib3R0b20tbGVmdCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IGJvdHRvbTogMDsgbGVmdDogMDsiLCJjdHJsLWJvdHRvbS1yaWdodCI6InBvc2l0aW9uOiBhYnNvbHV0ZTsgcG9pbnRlci1ldmVudHM6IG5vbmU7IHotaW5kZXg6IDI7IHJpZ2h0OiAwOyBib3R0b206IDA7IixjdHJsOiJjbGVhcjogYm90aDsgcG9pbnRlci1ldmVudHM6IGF1dG87IHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApOyIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3QgLm1hcGJveGdsLWN0cmwtYXR0cmliLWlubmVyIjoiZGlzcGxheTogbm9uZTsiLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0OmhvdmVyIC5tYXBib3hnbC1jdHJsLWF0dHJpYi1pbm5lciI6ImRpc3BsYXk6IGJsb2NrOyBtYXJnaW4tdG9wOjJweCIsImN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6aG92ZXIiOiJwYWRkaW5nOiAycHggMjRweCAycHggNHB4OyB2aXNpYmlsaXR5OiB2aXNpYmxlOyBtYXJnaW4tdG9wOiA2cHg7IiwiY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOidjb250ZW50OiAiIjsgY3Vyc29yOiBwb2ludGVyOyBwb3NpdGlvbjogYWJzb2x1dGU7IGJhY2tncm91bmQtaW1hZ2U6IHVybChcJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIlM0UgJTNDcGF0aCBmaWxsPSIlMjMzMzMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTBhNiw2IDAgMSwwIDEyLDBhNiw2IDAgMSwwIC0xMiwwIE05LDdhMSwxIDAgMSwwIDIsMGExLDEgMCAxLDAgLTIsMCBNOSwxMGExLDEgMCAxLDEgMiwwbDAsM2ExLDEgMCAxLDEgLTIsMCIvJTNFICUzQy9zdmclM0VcJyk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgd2lkdGg6IDI0cHg7IGhlaWdodDogMjRweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyLXJhZGl1czogMTJweDsnLCJjdHJsLWF0dHJpYi5tYXBib3hnbC1jb21wYWN0IjoibWluLWhlaWdodDogMjBweDsgcGFkZGluZzogMDsgbWFyZ2luOiAxMHB4OyBwb3NpdGlvbjogcmVsYXRpdmU7IGJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDNweCAxMnB4IDEycHggM3B4OyIsImN0cmwtYm90dG9tLXJpZ2h0ID4gLm1hcGJveGdsLWN0cmwtYXR0cmliLm1hcGJveGdsLWNvbXBhY3Q6OmFmdGVyIjoiYm90dG9tOiAwOyByaWdodDogMCIsImN0cmwtYm90dG9tLWxlZnQgPiAubWFwYm94Z2wtY3RybC1hdHRyaWIubWFwYm94Z2wtY29tcGFjdDo6YWZ0ZXIiOiJib3R0b206IDA7IGxlZnQ6IDAiLCJjdHJsLWJvdHRvbS1sZWZ0IC5tYXBib3hnbC1jdHJsIjoibWFyZ2luOiAwIDAgMTBweCAxMHB4OyBmbG9hdDogbGVmdDsiLCJjdHJsLWJvdHRvbS1yaWdodCAubWFwYm94Z2wtY3RybCI6Im1hcmdpbjogMCAxMHB4IDEwcHggMDsgZmxvYXQ6IHJpZ2h0OyIsImN0cmwtYXR0cmliIjoiY29sb3I6IHJnYmEoMCwgMCwgMCwgMC43NSk7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMnB4IiwiY3RybC1hdHRyaWIgYSI6ImNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzUpOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMTJweCIsImN0cmwtYXR0cmliIGE6aG92ZXIiOiJjb2xvcjogaW5oZXJpdDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IiwiY3RybC1hdHRyaWIgLm1hcGJveC1pbXByb3ZlLW1hcCI6ImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW4tbGVmdDogMnB4OyIsImF0dHJpYi1lbXB0eSI6ImRpc3BsYXk6IG5vbmU7IiwiY3RybC1sb2dvIjonZGlzcGxheTpibG9jazsgd2lkdGg6IDIxcHg7IGhlaWdodDogMjFweDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDP3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/JTNFICUzQ3N2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDIxIDIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyMSAyMTsiIHhtbDpzcGFjZT0icHJlc2VydmUiJTNFJTNDZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDAuMDEpIiUzRSUzQ3BhdGggZD0ibSAxMC41LDEuMjQgYyAtNS4xMSwwIC05LjI1LDQuMTUgLTkuMjUsOS4yNSAwLDUuMSA0LjE1LDkuMjUgOS4yNSw5LjI1IDUuMSwwIDkuMjUsLTQuMTUgOS4yNSwtOS4yNSAwLC01LjExIC00LjE0LC05LjI1IC05LjI1LC05LjI1IHogbSA0LjM5LDExLjUzIGMgLTEuOTMsMS45MyAtNC43OCwyLjMxIC02LjcsMi4zMSAtMC43LDAgLTEuNDEsLTAuMDUgLTIuMSwtMC4xNiAwLDAgLTEuMDIsLTUuNjQgMi4xNCwtOC44MSAwLjgzLC0wLjgzIDEuOTUsLTEuMjggMy4xMywtMS4yOCAxLjI3LDAgMi40OSwwLjUxIDMuMzksMS40MiAxLjg0LDEuODQgMS44OSw0Ljc1IDAuMTQsNi41MiB6IiBzdHlsZT0ib3BhY2l0eTowLjk7ZmlsbDolMjNmZmZmZmY7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QwIi8lM0UlM0NwYXRoIGQ9Ik0gMTAuNSwtMC4wMSBDIDQuNywtMC4wMSAwLDQuNyAwLDEwLjQ5IGMgMCw1Ljc5IDQuNywxMC41IDEwLjUsMTAuNSA1LjgsMCAxMC41LC00LjcgMTAuNSwtMTAuNSBDIDIwLjk5LDQuNyAxNi4zLC0wLjAxIDEwLjUsLTAuMDEgWiBtIDAsMTkuNzUgYyAtNS4xMSwwIC05LjI1LC00LjE1IC05LjI1LC05LjI1IDAsLTUuMSA0LjE0LC05LjI2IDkuMjUsLTkuMjYgNS4xMSwwIDkuMjUsNC4xNSA5LjI1LDkuMjUgMCw1LjEzIC00LjE0LDkuMjYgLTkuMjUsOS4yNiB6IiBzdHlsZT0ib3BhY2l0eTowLjM1O2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyIgY2xhc3M9InN0MSIvJTNFJTNDcGF0aCBkPSJNIDE0Ljc0LDYuMjUgQyAxMi45LDQuNDEgOS45OCw0LjM1IDguMjMsNi4xIDUuMDcsOS4yNyA2LjA5LDE0LjkxIDYuMDksMTQuOTEgYyAwLDAgNS42NCwxLjAyIDguODEsLTIuMTQgQyAxNi42NCwxMSAxNi41OSw4LjA5IDE0Ljc0LDYuMjUgWiBtIC0yLjI3LDQuMDkgLTAuOTEsMS44NyAtMC45LC0xLjg3IC0xLjg2LC0wLjkxIDEuODYsLTAuOSAwLjksLTEuODcgMC45MSwxLjg3IDEuODYsMC45IHoiIHN0eWxlPSJvcGFjaXR5OjAuMzU7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IiBjbGFzcz0ic3QxIi8lM0UlM0Nwb2x5Z29uIHBvaW50cz0iMTEuNTYsMTIuMjEgMTAuNjYsMTAuMzQgOC44LDkuNDMgMTAuNjYsOC41MyAxMS41Niw2LjY2IDEyLjQ3LDguNTMgMTQuMzMsOS40MyAxMi40NywxMC4zNCAiIHN0eWxlPSJvcGFjaXR5OjAuOTtmaWxsOiUyM2ZmZmZmZjtlbmFibGUtYmFja2dyb3VuZDpuZXciIGNsYXNzPSJzdDAiLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVwnKSd9fX0seyIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6Nzk5fV0sODgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuc3BsaXQoIiAiKSxpPXJbMF0sYT1yWzFdLG89bi5pc0FycmF5T3JUeXBlZEFycmF5KGUpP24ubWVhbihlKTplLHM9LjUrby8xMDAsbD0xLjUrby8xMDAsYz1bIiIsIiJdLHU9WzAsMF07c3dpdGNoKGkpe2Nhc2UidG9wIjpjWzBdPSJ0b3AiLHVbMV09LWw7YnJlYWs7Y2FzZSJib3R0b20iOmNbMF09ImJvdHRvbSIsdVsxXT1sfXN3aXRjaChhKXtjYXNlImxlZnQiOmNbMV09InJpZ2h0Iix1WzBdPS1zO2JyZWFrO2Nhc2UicmlnaHQiOmNbMV09ImxlZnQiLHVbMF09c31yZXR1cm57YW5jaG9yOmNbMF0mJmNbMV0/Yy5qb2luKCItIik6Y1swXT9jWzBdOmNbMV0/Y1sxXToiY2VudGVyIixvZmZzZXQ6dX19fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sODg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbC9kaXN0L21hcGJveC1nbC11bm1pbmlmaWVkIiksaT10KCIuLi8uLi9saWIiKSxhPWkuc3RyVHJhbnNsYXRlLG89aS5zdHJTY2FsZSxzPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGw9dCgiLi4vLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxjPXQoIkBwbG90bHkvZDMiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksaD10KCIuL21hcGJveCIpLHA9ci5jb25zdGFudHM9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBkKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmKC0xIT09cC5zdHlsZVZhbHVlc01hcGJveC5pbmRleE9mKHQpfHwwPT09dC5pbmRleE9mKCJtYXBib3g6Ly8iKSl9ci5uYW1lPSJtYXBib3giLHIuYXR0cj0ic3VicGxvdCIsci5pZFJvb3Q9Im1hcGJveCIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWkuY291bnRlclJlZ2V4KCJtYXBib3giKSxyLmF0dHJpYnV0ZXM9e3N1YnBsb3Q6e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDoibWFwYm94IixlZGl0VHlwZToiY2FsYyJ9fSxyLmxheW91dEF0dHJpYnV0ZXM9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHIuc3VwcGx5TGF5b3V0RGVmYXVsdHM9dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy5tYXBib3g7aWYobi52ZXJzaW9uIT09cC5yZXF1aXJlZFZlcnNpb24pdGhyb3cgbmV3IEVycm9yKHAud3JvbmdWZXJzaW9uRXJyb3JNc2cpO3ZhciBvPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dDtpZigiIj09PXQuX2NvbnRleHQubWFwYm94QWNjZXNzVG9rZW4pcmV0dXJuIiI7Zm9yKHZhciBuPVtdLGE9W10sbz0hMSxzPSExLGw9MDtsPGUubGVuZ3RoO2wrKyl7dmFyIGM9cltlW2xdXSx1PWMuYWNjZXNzdG9rZW47ZChjLnN0eWxlKSYmKHU/aS5wdXNoVW5pcXVlKG4sdSk6KGQoYy5faW5wdXQuc3R5bGUpJiYoaS5lcnJvcigiVXNlcyBNYXBib3ggbWFwIHN0eWxlLCBidXQgZGlkIG5vdCBzZXQgYW4gYWNjZXNzIHRva2VuLiIpLG89ITApLHM9ITApKSx1JiZpLnB1c2hVbmlxdWUoYSx1KX1pZihzKXt2YXIgZj1vP3Aubm9BY2Nlc3NUb2tlbkVycm9yTXNnOnAubWlzc2luZ1N0eWxlRXJyb3JNc2c7dGhyb3cgaS5lcnJvcihmKSxuZXcgRXJyb3IoZil9cmV0dXJuIG4ubGVuZ3RoPyhuLmxlbmd0aD4xJiZpLndhcm4ocC5tdWx0aXBsZVRva2Vuc0Vycm9yTXNnKSxuWzBdKTooYS5sZW5ndGgmJmkubG9nKFsiTGlzdGVkIG1hcGJveCBhY2Nlc3MgdG9rZW4ocykiLGEuam9pbigiLCIpLCJidXQgZGlkIG5vdCB1c2UgYSBNYXBib3ggbWFwIHN0eWxlLCBpZ25vcmluZyB0b2tlbihzKS4iXS5qb2luKCIgIikpLCIiKX0odCxhKTtuLmFjY2Vzc1Rva2VuPW87Zm9yKHZhciBsPTA7bDxhLmxlbmd0aDtsKyspe3ZhciBjPWFbbF0sdT1zKHIsIm1hcGJveCIsYyksZj1lW2NdLG09Zi5fc3VicGxvdDttfHwobT1uZXcgaCh0LGMpLGVbY10uX3N1YnBsb3Q9bSksbS52aWV3SW5pdGlhbHx8KG0udmlld0luaXRpYWw9e2NlbnRlcjppLmV4dGVuZEZsYXQoe30sZi5jZW50ZXIpLHpvb206Zi56b29tLGJlYXJpbmc6Zi5iZWFyaW5nLHBpdGNoOmYucGl0Y2h9KSxtLnBsb3QodSxlLHQuX3Byb21pc2VzKX19LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPW4uX3N1YnBsb3RzLm1hcGJveHx8W10sYT0wO2E8aS5sZW5ndGg7YSsrKXt2YXIgbz1pW2FdOyFlW29dJiZuW29dLl9zdWJwbG90JiZuW29dLl9zdWJwbG90LmRlc3Ryb3koKX19LHIudG9TVkc9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj1lLl9zaXplLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZVtyW2ldXSxoPXMuZG9tYWluLGQ9cy5fc3VicGxvdC50b0ltYWdlKCJwbmciKTtlLl9nbGltYWdlcy5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLCJ4bGluazpocmVmIjpkLHg6bi5sK24udypoLnhbMF0seTpuLnQrbi5oKigxLWgueVsxXSksd2lkdGg6bi53KihoLnhbMV0taC54WzBdKSxoZWlnaHQ6bi5oKihoLnlbMV0taC55WzBdKSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn0pO3ZhciBtPWMuc2VsZWN0KHMuX3N1YnBsb3QuZGl2KTtpZighKG51bGw9PT1tLnNlbGVjdCgiLm1hcGJveGdsLWN0cmwtbG9nbyIpLm5vZGUoKS5vZmZzZXRQYXJlbnQpKXt2YXIgZz1lLl9nbGltYWdlcy5hcHBlbmQoImciKTtnLmF0dHIoInRyYW5zZm9ybSIsYShuLmwrbi53KmgueFswXSsxMCxuLnQrbi5oKigxLWgueVswXSktMzEpKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMCkuc3R5bGUoe29wYWNpdHk6LjksZmlsbDoiI2ZmZmZmZiIsImVuYWJsZS1iYWNrZ3JvdW5kIjoibmV3In0pLGcuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIscC5tYXBib3hMb2dvLnBhdGgxKS5zdHlsZSgib3BhY2l0eSIsLjM1KS5zdHlsZSgiZW5hYmxlLWJhY2tncm91bmQiLCJuZXciKSxnLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLHAubWFwYm94TG9nby5wYXRoMikuc3R5bGUoIm9wYWNpdHkiLC4zNSkuc3R5bGUoImVuYWJsZS1iYWNrZ3JvdW5kIiwibmV3IiksZy5hcHBlbmQoInBvbHlnb24iKS5hdHRyKCJwb2ludHMiLHAubWFwYm94TG9nby5wb2x5Z29uKS5zdHlsZSh7b3BhY2l0eTouOSxmaWxsOiIjZmZmZmZmIiwiZW5hYmxlLWJhY2tncm91bmQiOiJuZXcifSl9dmFyIHY9bS5zZWxlY3QoIi5tYXBib3hnbC1jdHJsLWF0dHJpYiIpLnRleHQoKS5yZXBsYWNlKCJJbXByb3ZlIHRoaXMgbWFwIiwiIikseT1lLl9nbGltYWdlcy5hcHBlbmQoImciKSx4PXkuYXBwZW5kKCJ0ZXh0Iik7eC50ZXh0KHYpLmNsYXNzZWQoInN0YXRpYy1hdHRyaWJ1dGlvbiIsITApLmF0dHIoeyJmb250LXNpemUiOjEyLCJmb250LWZhbWlseSI6IkFyaWFsIixjb2xvcjoicmdiYSgwLCAwLCAwLCAwLjc1KSIsInRleHQtYW5jaG9yIjoiZW5kIiwiZGF0YS11bmZvcm1hdHRlZCI6dn0pO3ZhciBiPXUuYkJveCh4Lm5vZGUoKSksXz1uLncqKGgueFsxXS1oLnhbMF0pO2lmKGIud2lkdGg+Xy8yKXt2YXIgdz12LnNwbGl0KCJ8Iikuam9pbigiPGJyPiIpO3gudGV4dCh3KS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix3KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGI9dS5iQm94KHgubm9kZSgpKX14LmF0dHIoInRyYW5zZm9ybSIsYSgtMyw4LWIuaGVpZ2h0KSkseS5pbnNlcnQoInJlY3QiLCIuc3RhdGljLWF0dHJpYnV0aW9uIikuYXR0cih7eDotYi53aWR0aC02LHk6LWIuaGVpZ2h0LTMsd2lkdGg6Yi53aWR0aCs2LGhlaWdodDpiLmhlaWdodCszLGZpbGw6InJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSkifSk7dmFyIFQ9MTtiLndpZHRoKzY+XyYmKFQ9Xy8oYi53aWR0aCs2KSk7dmFyIGs9W24ubCtuLncqaC54WzFdLG4udCtuLmgqKDEtaC55WzBdKV07eS5hdHRyKCJ0cmFuc2Zvcm0iLGEoa1swXSxrWzFdKStvKFQpKX19LHIudXBkYXRlRng9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX2Z1bGxMYXlvdXQscj1lLl9zdWJwbG90cy5tYXBib3gsbj0wO248ci5sZW5ndGg7bisrKXtlW3Jbbl1dLl9zdWJwbG90LnVwZGF0ZUZ4KGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9jb25zdGFudHMiOjg4MiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODg2LCIuL2xheW91dF9kZWZhdWx0cyI6ODg3LCIuL21hcGJveCI6ODg4LCJAcGxvdGx5L2QzIjo1OCwibWFwYm94LWdsL2Rpc3QvbWFwYm94LWdsLXVubWluaWZpZWQiOjQ0MX1dLDg4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLnNhbml0aXplSFRNTCxhPXQoIi4vY29udmVydF90ZXh0X29wdHMiKSxvPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc3VicGxvdD10LHRoaXMudWlkPXQudWlkKyItIitlLHRoaXMuaW5kZXg9ZSx0aGlzLmlkU291cmNlPSJzb3VyY2UtIit0aGlzLnVpZCx0aGlzLmlkTGF5ZXI9by5sYXlvdXRMYXllclByZWZpeCt0aGlzLnVpZCx0aGlzLnNvdXJjZVR5cGU9bnVsbCx0aGlzLnNvdXJjZT1udWxsLHRoaXMubGF5ZXJUeXBlPW51bGwsdGhpcy5iZWxvdz1udWxsLHRoaXMudmlzaWJsZT0hMX12YXIgbD1zLnByb3RvdHlwZTtmdW5jdGlvbiBjKHQpe2lmKCF0LnZpc2libGUpcmV0dXJuITE7dmFyIGU9dC5zb3VyY2U7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoInN0cmluZyIhPXR5cGVvZiBlW3JdfHwwPT09ZVtyXS5sZW5ndGgpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIG4uaXNQbGFpbk9iamVjdChlKXx8InN0cmluZyI9PXR5cGVvZiBlJiZlLmxlbmd0aD4wfWZ1bmN0aW9uIHUodCl7dmFyIGU9e30scj17fTtzd2l0Y2godC50eXBlKXtjYXNlImNpcmNsZSI6bi5leHRlbmRGbGF0KHIseyJjaXJjbGUtcmFkaXVzIjp0LmNpcmNsZS5yYWRpdXMsImNpcmNsZS1jb2xvciI6dC5jb2xvciwiY2lyY2xlLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UibGluZSI6bi5leHRlbmRGbGF0KHIseyJsaW5lLXdpZHRoIjp0LmxpbmUud2lkdGgsImxpbmUtY29sb3IiOnQuY29sb3IsImxpbmUtb3BhY2l0eSI6dC5vcGFjaXR5LCJsaW5lLWRhc2hhcnJheSI6dC5saW5lLmRhc2h9KTticmVhaztjYXNlImZpbGwiOm4uZXh0ZW5kRmxhdChyLHsiZmlsbC1jb2xvciI6dC5jb2xvciwiZmlsbC1vdXRsaW5lLWNvbG9yIjp0LmZpbGwub3V0bGluZWNvbG9yLCJmaWxsLW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2Uic3ltYm9sIjp2YXIgaT10LnN5bWJvbCxvPWEoaS50ZXh0cG9zaXRpb24saS5pY29uc2l6ZSk7bi5leHRlbmRGbGF0KGUseyJpY29uLWltYWdlIjppLmljb24rIi0xNSIsImljb24tc2l6ZSI6aS5pY29uc2l6ZS8xMCwidGV4dC1maWVsZCI6aS50ZXh0LCJ0ZXh0LXNpemUiOmkudGV4dGZvbnQuc2l6ZSwidGV4dC1hbmNob3IiOm8uYW5jaG9yLCJ0ZXh0LW9mZnNldCI6by5vZmZzZXQsInN5bWJvbC1wbGFjZW1lbnQiOmkucGxhY2VtZW50fSksbi5leHRlbmRGbGF0KHIseyJpY29uLWNvbG9yIjp0LmNvbG9yLCJ0ZXh0LWNvbG9yIjppLnRleHRmb250LmNvbG9yLCJ0ZXh0LW9wYWNpdHkiOnQub3BhY2l0eX0pO2JyZWFrO2Nhc2UicmFzdGVyIjpuLmV4dGVuZEZsYXQocix7InJhc3Rlci1mYWRlLWR1cmF0aW9uIjowLCJyYXN0ZXItb3BhY2l0eSI6dC5vcGFjaXR5fSl9cmV0dXJue2xheW91dDplLHBhaW50OnJ9fWwudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMudmlzaWJsZT90aGlzLm5lZWRzTmV3SW1hZ2UodCk/dGhpcy51cGRhdGVJbWFnZSh0KTp0aGlzLm5lZWRzTmV3U291cmNlKHQpPyh0aGlzLnJlbW92ZUxheWVyKCksdGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSk6dGhpcy5uZWVkc05ld0xheWVyKHQpP3RoaXMudXBkYXRlTGF5ZXIodCk6dGhpcy51cGRhdGVTdHlsZSh0KToodGhpcy51cGRhdGVTb3VyY2UodCksdGhpcy51cGRhdGVMYXllcih0KSksdGhpcy52aXNpYmxlPWModCl9LGwubmVlZHNOZXdJbWFnZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdWJwbG90Lm1hcC5nZXRTb3VyY2UodGhpcy5pZFNvdXJjZSkmJiJpbWFnZSI9PT10aGlzLnNvdXJjZVR5cGUmJiJpbWFnZSI9PT10LnNvdXJjZXR5cGUmJih0aGlzLnNvdXJjZSE9PXQuc291cmNlfHxKU09OLnN0cmluZ2lmeSh0aGlzLmNvb3JkaW5hdGVzKSE9PUpTT04uc3RyaW5naWZ5KHQuY29vcmRpbmF0ZXMpKX0sbC5uZWVkc05ld1NvdXJjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zb3VyY2VUeXBlIT09dC5zb3VyY2V0eXBlfHxKU09OLnN0cmluZ2lmeSh0aGlzLnNvdXJjZSkhPT1KU09OLnN0cmluZ2lmeSh0LnNvdXJjZSl8fHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfSxsLm5lZWRzTmV3TGF5ZXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGF5ZXJUeXBlIT09dC50eXBlfHx0aGlzLmJlbG93IT09dGhpcy5zdWJwbG90LmJlbG93TG9va3VwWyJsYXlvdXQtIit0aGlzLmluZGV4XX0sbC5sb29rdXBCZWxvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN1YnBsb3QuYmVsb3dMb29rdXBbImxheW91dC0iK3RoaXMuaW5kZXhdfSxsLnVwZGF0ZUltYWdlPWZ1bmN0aW9uKHQpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpLnVwZGF0ZUltYWdlKHt1cmw6dC5zb3VyY2UsY29vcmRpbmF0ZXM6dC5jb29yZGluYXRlc30pO3ZhciBlPXRoaXMuZmluZEZvbGxvd2luZ01hcGJveExheWVySWQodGhpcy5sb29rdXBCZWxvdygpKTtudWxsIT09ZSYmdGhpcy5zdWJwbG90Lm1hcC5tb3ZlTGF5ZXIodGhpcy5pZExheWVyLGUpfSxsLnVwZGF0ZVNvdXJjZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3QubWFwO2lmKGUuZ2V0U291cmNlKHRoaXMuaWRTb3VyY2UpJiZlLnJlbW92ZVNvdXJjZSh0aGlzLmlkU291cmNlKSx0aGlzLnNvdXJjZVR5cGU9dC5zb3VyY2V0eXBlLHRoaXMuc291cmNlPXQuc291cmNlLGModCkpe3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5zb3VyY2V0eXBlLG49dC5zb3VyY2UsYT17dHlwZTpyfTsiZ2VvanNvbiI9PT1yP2U9ImRhdGEiOiJ2ZWN0b3IiPT09cj9lPSJzdHJpbmciPT10eXBlb2Ygbj8idXJsIjoidGlsZXMiOiJyYXN0ZXIiPT09cj8oZT0idGlsZXMiLGEudGlsZVNpemU9MjU2KToiaW1hZ2UiPT09ciYmKGU9InVybCIsYS5jb29yZGluYXRlcz10LmNvb3JkaW5hdGVzKTthW2VdPW4sdC5zb3VyY2VhdHRyaWJ1dGlvbiYmKGEuYXR0cmlidXRpb249aSh0LnNvdXJjZWF0dHJpYnV0aW9uKSk7cmV0dXJuIGF9KHQpO2UuYWRkU291cmNlKHRoaXMuaWRTb3VyY2Uscil9fSxsLmZpbmRGb2xsb3dpbmdNYXBib3hMYXllcklkPWZ1bmN0aW9uKHQpe2lmKCJ0cmFjZXMiPT09dClmb3IodmFyIGU9dGhpcy5zdWJwbG90LmdldE1hcExheWVycygpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIG4mJjA9PT1uLmluZGV4T2Yoby50cmFjZUxheWVyUHJlZml4KSl7dD1uO2JyZWFrfX1yZXR1cm4gdH0sbC51cGRhdGVMYXllcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj11KHQpLG49dGhpcy5sb29rdXBCZWxvdygpLGk9dGhpcy5maW5kRm9sbG93aW5nTWFwYm94TGF5ZXJJZChuKTt0aGlzLnJlbW92ZUxheWVyKCksYyh0KSYmZS5hZGRMYXllcih7aWQ6dGhpcy5pZExheWVyLHNvdXJjZTp0aGlzLmlkU291cmNlLCJzb3VyY2UtbGF5ZXIiOnQuc291cmNlbGF5ZXJ8fCIiLHR5cGU6dC50eXBlLG1pbnpvb206dC5taW56b29tLG1heHpvb206dC5tYXh6b29tLGxheW91dDpyLmxheW91dCxwYWludDpyLnBhaW50fSxpKSx0aGlzLmxheWVyVHlwZT10LnR5cGUsdGhpcy5iZWxvdz1ufSxsLnVwZGF0ZVN0eWxlPWZ1bmN0aW9uKHQpe2lmKGModCkpe3ZhciBlPXUodCk7dGhpcy5zdWJwbG90LnNldE9wdGlvbnModGhpcy5pZExheWVyLCJzZXRMYXlvdXRQcm9wZXJ0eSIsZS5sYXlvdXQpLHRoaXMuc3VicGxvdC5zZXRPcHRpb25zKHRoaXMuaWRMYXllciwic2V0UGFpbnRQcm9wZXJ0eSIsZS5wYWludCl9fSxsLnJlbW92ZUxheWVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5zdWJwbG90Lm1hcDt0LmdldExheWVyKHRoaXMuaWRMYXllcikmJnQucmVtb3ZlTGF5ZXIodGhpcy5pZExheWVyKSx0LmdldFNvdXJjZSh0aGlzLmlkU291cmNlKSYmdC5yZW1vdmVTb3VyY2UodGhpcy5pZFNvdXJjZSl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IHModCxlKTtyZXR1cm4gbi51cGRhdGUociksbn19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuL2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnRfdGV4dF9vcHRzIjo4ODN9XSw4ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikuZGVmYXVsdExpbmUsYT10KCIuLi9kb21haW4iKS5hdHRyaWJ1dGVzLG89dCgiLi4vZm9udF9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi90cmFjZXMvc2NhdHRlci9hdHRyaWJ1dGVzIikudGV4dHBvc2l0aW9uLGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi9jb25zdGFudHMiKSxmPW8oe30pO2YuZmFtaWx5LmRmbHQ9Ik9wZW4gU2FucyBSZWd1bGFyLCBBcmlhbCBVbmljb2RlIE1TIFJlZ3VsYXIiLChlLmV4cG9ydHM9bCh7X2FycmF5QXR0clJlZ2V4cHM6W24uY291bnRlclJlZ2V4KCJtYXBib3giLCIubGF5ZXJzIiwhMCldLGRvbWFpbjphKHtuYW1lOiJtYXBib3gifSksYWNjZXNzdG9rZW46e3ZhbFR5cGU6InN0cmluZyIsbm9CbGFuazohMCxzdHJpY3Q6ITB9LHN0eWxlOnt2YWxUeXBlOiJhbnkiLHZhbHVlczp1LnN0eWxlVmFsdWVzTWFwYm94LmNvbmNhdCh1LnN0eWxlVmFsdWVzTm9uTWFwYm94KSxkZmx0OnUuc3R5bGVWYWx1ZURmbHR9LGNlbnRlcjp7bG9uOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0sbGF0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH19LHpvb206e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxfSxiZWFyaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MH0scGl0Y2g6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowfSxsYXllcnM6YygibGF5ZXIiLHt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxzb3VyY2V0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJnZW9qc29uIiwidmVjdG9yIiwicmFzdGVyIiwiaW1hZ2UiXSxkZmx0OiJnZW9qc29uIn0sc291cmNlOnt2YWxUeXBlOiJhbnkifSxzb3VyY2VsYXllcjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIifSxzb3VyY2VhdHRyaWJ1dGlvbjp7dmFsVHlwZToic3RyaW5nIn0sdHlwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY2xlIiwibGluZSIsImZpbGwiLCJzeW1ib2wiLCJyYXN0ZXIiXSxkZmx0OiJjaXJjbGUifSxjb29yZGluYXRlczp7dmFsVHlwZToiYW55In0sYmVsb3c6e3ZhbFR5cGU6InN0cmluZyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDppfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sbWluem9vbTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MjQsZGZsdDowfSxtYXh6b29tOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoyNCxkZmx0OjI0fSxjaXJjbGU6e3JhZGl1czp7dmFsVHlwZToibnVtYmVyIixkZmx0OjE1fX0sbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyfSxkYXNoOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGZpbGw6e291dGxpbmVjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6aX19LHN5bWJvbDp7aWNvbjp7dmFsVHlwZToic3RyaW5nIixkZmx0OiJtYXJrZXIifSxpY29uc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwfSx0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LHBsYWNlbWVudDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsicG9pbnQiLCJsaW5lIiwibGluZS1jZW50ZXIiXSxkZmx0OiJwb2ludCJ9LHRleHRmb250OmYsdGV4dHBvc2l0aW9uOm4uZXh0ZW5kRmxhdCh7fSxzLHthcnJheU9rOiExfSl9fSl9LCJwbG90IiwiZnJvbS1yb290IikpLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vdHJhY2VzL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vZG9tYWluIjo4NTUsIi4uL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2NvbnN0YW50cyI6ODgyfV0sODg3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLGE9dCgiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXtyKCJhY2Nlc3N0b2tlbiIsbi5hY2Nlc3NUb2tlbikscigic3R5bGUiKSxyKCJjZW50ZXIubG9uIikscigiY2VudGVyLmxhdCIpLHIoInpvb20iKSxyKCJiZWFyaW5nIikscigicGl0Y2giKSxhKHQsZSx7bmFtZToibGF5ZXJzIixoYW5kbGVJdGVtRGVmYXVsdHM6bH0pLGUuX2lucHV0PXR9ZnVuY3Rpb24gbCh0LGUpe2Z1bmN0aW9uIHIocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8ubGF5ZXJzLHIsaSl9aWYocigidmlzaWJsZSIpKXt2YXIgaSxhPXIoInNvdXJjZXR5cGUiKSxzPSJyYXN0ZXIiPT09YXx8ImltYWdlIj09PWE7cigic291cmNlIikscigic291cmNlYXR0cmlidXRpb24iKSwidmVjdG9yIj09PWEmJnIoInNvdXJjZWxheWVyIiksImltYWdlIj09PWEmJnIoImNvb3JkaW5hdGVzIikscyYmKGk9InJhc3RlciIpO3ZhciBsPXIoInR5cGUiLGkpO3MmJiJyYXN0ZXIiIT09bCYmKGw9ZS50eXBlPSJyYXN0ZXIiLG4ubG9nKCJTb3VyY2UgdHlwZXMgKnJhc3RlciogYW5kICppbWFnZSogbXVzdCBkcmF3biAqcmFzdGVyKiBsYXllciB0eXBlLiIpKSxyKCJiZWxvdyIpLHIoImNvbG9yIikscigib3BhY2l0eSIpLHIoIm1pbnpvb20iKSxyKCJtYXh6b29tIiksImNpcmNsZSI9PT1sJiZyKCJjaXJjbGUucmFkaXVzIiksImxpbmUiPT09bCYmKHIoImxpbmUud2lkdGgiKSxyKCJsaW5lLmRhc2giKSksImZpbGwiPT09bCYmcigiZmlsbC5vdXRsaW5lY29sb3IiKSwic3ltYm9sIj09PWwmJihyKCJzeW1ib2wuaWNvbiIpLHIoInN5bWJvbC5pY29uc2l6ZSIpLHIoInN5bWJvbC50ZXh0Iiksbi5jb2VyY2VGb250KHIsInN5bWJvbC50ZXh0Zm9udCIpLHIoInN5bWJvbC50ZXh0cG9zaXRpb24iKSxyKCJzeW1ib2wucGxhY2VtZW50IikpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2kodCxlLHIse3R5cGU6Im1hcGJveCIsYXR0cmlidXRlczpvLGhhbmRsZURlZmF1bHRzOnMscGFydGl0aW9uOiJ5IixhY2Nlc3NUb2tlbjplLl9tYXBib3hBY2Nlc3NUb2tlbn0pfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uL3N1YnBsb3RfZGVmYXVsdHMiOjg5OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6ODg2fV0sODg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIm1hcGJveC1nbC9kaXN0L21hcGJveC1nbC11bm1pbmlmaWVkIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIiksZj11LnJlY3RNb2RlLGg9dS5kcmF3TW9kZSxwPXUuc2VsZWN0TW9kZSxkPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LG09dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0aW9uc0NhY2hlLHY9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLnNlbGVjdE9uQ2xpY2sseT10KCIuL2NvbnN0YW50cyIpLHg9dCgiLi9sYXllcnMiKTtmdW5jdGlvbiBiKHQsZSl7dGhpcy5pZD1lLHRoaXMuZ2Q9dDt2YXIgcj10Ll9mdWxsTGF5b3V0LG49dC5fY29udGV4dDt0aGlzLmNvbnRhaW5lcj1yLl9nbGNvbnRhaW5lci5ub2RlKCksdGhpcy5pc1N0YXRpYz1uLnN0YXRpY1Bsb3QsdGhpcy51aWQ9ci5fdWlkKyItIit0aGlzLmlkLHRoaXMuZGl2PW51bGwsdGhpcy54YXhpcz1udWxsLHRoaXMueWF4aXM9bnVsbCx0aGlzLmNyZWF0ZUZyYW1ld29yayhyKSx0aGlzLm1hcD1udWxsLHRoaXMuYWNjZXNzVG9rZW49bnVsbCx0aGlzLnN0eWxlT2JqPW51bGwsdGhpcy50cmFjZUhhc2g9e30sdGhpcy5sYXllckxpc3Q9W10sdGhpcy5iZWxvd0xvb2t1cD17fSx0aGlzLmRyYWdnaW5nPSExLHRoaXMud2hlZWxpbmc9ITF9dmFyIF89Yi5wcm90b3R5cGU7Xy5wbG90PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMsYT1lW2kuaWRdO2kubWFwJiZhLmFjY2Vzc3Rva2VuIT09aS5hY2Nlc3NUb2tlbiYmKGkubWFwLnJlbW92ZSgpLGkubWFwPW51bGwsaS5zdHlsZU9iaj1udWxsLGkudHJhY2VIYXNoPXt9LGkubGF5ZXJMaXN0PVtdKSxuPWkubWFwP25ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2kudXBkYXRlTWFwKHQsZSxyLG4pfSkpOm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2kuY3JlYXRlTWFwKHQsZSxyLG4pfSkpLHIucHVzaChuKX0sXy5jcmVhdGVNYXA9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIG89dGhpcyxzPWVbby5pZF0sbD1vLnN0eWxlT2JqPVQocy5zdHlsZSk7by5hY2Nlc3NUb2tlbj1zLmFjY2Vzc3Rva2VuO3ZhciBjPW8ubWFwPW5ldyBuLk1hcCh7Y29udGFpbmVyOm8uZGl2LHN0eWxlOmwuc3R5bGUsY2VudGVyOkEocy5jZW50ZXIpLHpvb206cy56b29tLGJlYXJpbmc6cy5iZWFyaW5nLHBpdGNoOnMucGl0Y2gsaW50ZXJhY3RpdmU6IW8uaXNTdGF0aWMscHJlc2VydmVEcmF3aW5nQnVmZmVyOm8uaXNTdGF0aWMsZG91YmxlQ2xpY2tab29tOiExLGJveFpvb206ITEsYXR0cmlidXRpb25Db250cm9sOiExfSkuYWRkQ29udHJvbChuZXcgbi5BdHRyaWJ1dGlvbkNvbnRyb2woe2NvbXBhY3Q6ITB9KSk7Yy5fY2FudmFzLnN0eWxlLmxlZnQ9IjBweCIsYy5fY2FudmFzLnN0eWxlLnRvcD0iMHB4IixvLnJlamVjdE9uRXJyb3IoaSksby5pc1N0YXRpY3x8by5pbml0RngodCxlKTt2YXIgdT1bXTt1LnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe2Mub25jZSgibG9hZCIsdCl9KSkpLHU9dS5jb25jYXQoYS5mZXRjaFRyYWNlR2VvRGF0YSh0KSksUHJvbWlzZS5hbGwodSkudGhlbigoZnVuY3Rpb24oKXtvLmZpbGxCZWxvd0xvb2t1cCh0LGUpLG8udXBkYXRlRGF0YSh0KSxvLnVwZGF0ZUxheW91dChlKSxvLnJlc29sdmVPblJlbmRlcihyKX0pKS5jYXRjaChpKX0sXy51cGRhdGVNYXA9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcyxvPWkubWFwLHM9ZVt0aGlzLmlkXTtpLnJlamVjdE9uRXJyb3Iobik7dmFyIGw9W10sYz1UKHMuc3R5bGUpO0pTT04uc3RyaW5naWZ5KGkuc3R5bGVPYmopIT09SlNPTi5zdHJpbmdpZnkoYykmJihpLnN0eWxlT2JqPWMsby5zZXRTdHlsZShjLnN0eWxlKSxpLnRyYWNlSGFzaD17fSxsLnB1c2gobmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe28ub25jZSgic3R5bGVkYXRhIix0KX0pKSkpLGw9bC5jb25jYXQoYS5mZXRjaFRyYWNlR2VvRGF0YSh0KSksUHJvbWlzZS5hbGwobCkudGhlbigoZnVuY3Rpb24oKXtpLmZpbGxCZWxvd0xvb2t1cCh0LGUpLGkudXBkYXRlRGF0YSh0KSxpLnVwZGF0ZUxheW91dChlKSxpLnJlc29sdmVPblJlbmRlcihyKX0pKS5jYXRjaChuKX0sXy5maWxsQmVsb3dMb29rdXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZVt0aGlzLmlkXS5sYXllcnMsYT10aGlzLmJlbG93TG9va3VwPXt9LG89ITE7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIHM9dFtyXVswXS50cmFjZSxsPXMuX21vZHVsZTsic3RyaW5nIj09dHlwZW9mIHMuYmVsb3c/bj1zLmJlbG93OmwuZ2V0QmVsb3cmJihuPWwuZ2V0QmVsb3cocyx0aGlzKSksIiI9PT1uJiYobz0hMCksYVsidHJhY2UtIitzLnVpZF09bnx8IiJ9Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyl7dmFyIGM9aVtyXTtuPSJzdHJpbmciPT10eXBlb2YgYy5iZWxvdz9jLmJlbG93Om8/InRyYWNlcyI6IiIsYVsibGF5b3V0LSIrcl09bn12YXIgdSxmLGg9e307Zm9yKHUgaW4gYSloW249YVt1XV0/aFtuXS5wdXNoKHUpOmhbbl09W3VdO2ZvcihuIGluIGgpe3ZhciBwPWhbbl07aWYocC5sZW5ndGg+MSlmb3Iocj0wO3I8cC5sZW5ndGg7cisrKTA9PT0odT1wW3JdKS5pbmRleE9mKCJ0cmFjZS0iKT8oZj11LnNwbGl0KCJ0cmFjZS0iKVsxXSx0aGlzLnRyYWNlSGFzaFtmXSYmKHRoaXMudHJhY2VIYXNoW2ZdLmJlbG93PW51bGwpKTowPT09dS5pbmRleE9mKCJsYXlvdXQtIikmJihmPXUuc3BsaXQoImxheW91dC0iKVsxXSx0aGlzLmxheWVyTGlzdFtmXSYmKHRoaXMubGF5ZXJMaXN0W2ZdLmJlbG93PW51bGwpKX19O3ZhciB3PXtjaG9yb3BsZXRobWFwYm94OjAsZGVuc2l0eW1hcGJveDoxLHNjYXR0ZXJtYXBib3g6Mn07ZnVuY3Rpb24gVCh0KXt2YXIgZT17fTtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KHQpPyhlLmlkPXQuaWQsZS5zdHlsZT10KToic3RyaW5nIj09dHlwZW9mIHQ/KGUuaWQ9dCwtMSE9PXkuc3R5bGVWYWx1ZXNNYXBib3guaW5kZXhPZih0KT9lLnN0eWxlPWsodCk6eS5zdHlsZXNOb25NYXBib3hbdF0/ZS5zdHlsZT15LnN0eWxlc05vbk1hcGJveFt0XTplLnN0eWxlPXQpOihlLmlkPXkuc3R5bGVWYWx1ZURmbHQsZS5zdHlsZT1rKHkuc3R5bGVWYWx1ZURmbHQpKSxlLnRyYW5zaXRpb249e2R1cmF0aW9uOjAsZGVsYXk6MH0sZX1mdW5jdGlvbiBrKHQpe3JldHVybiB5LnN0eWxlVXJsUHJlZml4K3QrIi0iK3kuc3R5bGVVcmxTdWZmaXh9ZnVuY3Rpb24gQSh0KXtyZXR1cm5bdC5sb24sdC5sYXRdfV8udXBkYXRlRGF0YT1mdW5jdGlvbih0KXt2YXIgZSxyLG4saSxhPXRoaXMudHJhY2VIYXNoLG89dC5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHdbdFswXS50cmFjZS50eXBlXS13W2VbMF0udHJhY2UudHlwZV19KSk7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKyl7dmFyIHM9b1tuXSxsPSExOyhlPWFbKHI9c1swXS50cmFjZSkudWlkXSkmJihlLnR5cGU9PT1yLnR5cGU/KGUudXBkYXRlKHMpLGw9ITApOmUuZGlzcG9zZSgpKSwhbCYmci5fbW9kdWxlJiYoYVtyLnVpZF09ci5fbW9kdWxlLnBsb3QodGhpcyxzKSl9dmFyIGM9T2JqZWN0LmtleXMoYSk7dDpmb3Iobj0wO248Yy5sZW5ndGg7bisrKXt2YXIgdT1jW25dO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspaWYodT09PShyPXRbaV1bMF0udHJhY2UpLnVpZCljb250aW51ZSB0OyhlPWFbdV0pLmRpc3Bvc2UoKSxkZWxldGUgYVt1XX19LF8udXBkYXRlTGF5b3V0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwLHI9dFt0aGlzLmlkXTt0aGlzLmRyYWdnaW5nfHx0aGlzLndoZWVsaW5nfHwoZS5zZXRDZW50ZXIoQShyLmNlbnRlcikpLGUuc2V0Wm9vbShyLnpvb20pLGUuc2V0QmVhcmluZyhyLmJlYXJpbmcpLGUuc2V0UGl0Y2goci5waXRjaCkpLHRoaXMudXBkYXRlTGF5ZXJzKHQpLHRoaXMudXBkYXRlRnJhbWV3b3JrKHQpLHRoaXMudXBkYXRlRngodCksdGhpcy5tYXAucmVzaXplKCksdGhpcy5nZC5fY29udGV4dC5fc2Nyb2xsWm9vbS5tYXBib3g/ZS5zY3JvbGxab29tLmVuYWJsZSgpOmUuc2Nyb2xsWm9vbS5kaXNhYmxlKCl9LF8ucmVzb2x2ZU9uUmVuZGVyPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWFwO2Uub24oInJlbmRlciIsKGZ1bmN0aW9uIHIoKXtlLmxvYWRlZCgpJiYoZS5vZmYoInJlbmRlciIsciksc2V0VGltZW91dCh0LDEwKSl9KSl9LF8ucmVqZWN0T25FcnJvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLm1hcDtmdW5jdGlvbiByKCl7dChuZXcgRXJyb3IoeS5tYXBPbkVycm9yTXNnKSl9ZS5vbmNlKCJlcnJvciIsciksZS5vbmNlKCJzdHlsZS5lcnJvciIsciksZS5vbmNlKCJzb3VyY2UuZXJyb3IiLHIpLGUub25jZSgidGlsZS5lcnJvciIsciksZS5vbmNlKCJsYXllci5lcnJvciIscil9LF8uY3JlYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLmRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyLmlkPWUudWlkLHIuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixlLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSxlLnhheGlzPXtfaWQ6IngiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnh9fSxlLnlheGlzPXtfaWQ6InkiLGMycDpmdW5jdGlvbih0KXtyZXR1cm4gZS5wcm9qZWN0KHQpLnl9fSxlLnVwZGF0ZUZyYW1ld29yayh0KSxlLm1vY2tBeGlzPXt0eXBlOiJsaW5lYXIiLHNob3dleHBvbmVudDoiYWxsIixleHBvbmVudGZvcm1hdDoiQiJ9LHMuc2V0Q29udmVydChlLm1vY2tBeGlzLHQpfSxfLmluaXRGeD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMsbj1yLmdkLGk9ci5tYXA7ZnVuY3Rpb24gYSgpe2MubG9uZVVuaG92ZXIoZS5faG92ZXJsYXllcil9ZnVuY3Rpb24gcygpe3ZhciB0PXIuZ2V0VmlldygpO24uZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkKHQpKX1pLm9uKCJtb3ZlZW5kIiwoZnVuY3Rpb24odCl7aWYoci5tYXApe3ZhciBlPW4uX2Z1bGxMYXlvdXQ7aWYodC5vcmlnaW5hbEV2ZW50fHxyLndoZWVsaW5nKXt2YXIgaT1lW3IuaWRdO28uY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsbi5sYXlvdXQsZS5fcHJlR1VJLHIuZ2V0Vmlld0VkaXRzKGkpKTt2YXIgYT1yLmdldFZpZXcoKTtpLl9pbnB1dC5jZW50ZXI9aS5jZW50ZXI9YS5jZW50ZXIsaS5faW5wdXQuem9vbT1pLnpvb209YS56b29tLGkuX2lucHV0LmJlYXJpbmc9aS5iZWFyaW5nPWEuYmVhcmluZyxpLl9pbnB1dC5waXRjaD1pLnBpdGNoPWEucGl0Y2gsbi5lbWl0KCJwbG90bHlfcmVsYXlvdXQiLHIuZ2V0Vmlld0VkaXRzV2l0aERlcml2ZWQoYSkpfXQub3JpZ2luYWxFdmVudCYmIm1vdXNldXAiPT09dC5vcmlnaW5hbEV2ZW50LnR5cGU/ci5kcmFnZ2luZz0hMTpyLndoZWVsaW5nJiYoci53aGVlbGluZz0hMSksZS5fcmVob3ZlciYmZS5fcmVob3ZlcigpfX0pKSxpLm9uKCJ3aGVlbCIsKGZ1bmN0aW9uKCl7ci53aGVlbGluZz0hMH0pKSxpLm9uKCJtb3VzZW1vdmUiLChmdW5jdGlvbih0KXt2YXIgZT1yLmRpdi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPVt0Lm9yaWdpbmFsRXZlbnQub2Zmc2V0WCx0Lm9yaWdpbmFsRXZlbnQub2Zmc2V0WV07dC50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGV9LHIueGF4aXMucDJjPWZ1bmN0aW9uKCl7cmV0dXJuIGkudW5wcm9qZWN0KGEpLmxuZ30sci55YXhpcy5wMmM9ZnVuY3Rpb24oKXtyZXR1cm4gaS51bnByb2plY3QoYSkubGF0fSxuLl9mdWxsTGF5b3V0Ll9yZWhvdmVyPWZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PT09ci5pZCYmbi5fZnVsbExheW91dFtyLmlkXSYmYy5ob3ZlcihuLHQsci5pZCl9LGMuaG92ZXIobix0LHIuaWQpLG4uX2Z1bGxMYXlvdXQuX2hvdmVyc3VicGxvdD1yLmlkfSkpLGkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKCl7ci5kcmFnZ2luZz0hMCxhKCl9KSksaS5vbigiem9vbXN0YXJ0IixhKSxpLm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKCl7bi5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PW51bGx9KSksaS5vbigiZHJhZyIscyksaS5vbigiem9vbSIscyksaS5vbigiZGJsY2xpY2siLChmdW5jdGlvbigpe3ZhciB0PW4uX2Z1bGxMYXlvdXRbci5pZF07by5jYWxsKCJfc3RvcmVEaXJlY3RHVUlFZGl0IixuLmxheW91dCxuLl9mdWxsTGF5b3V0Ll9wcmVHVUksci5nZXRWaWV3RWRpdHModCkpO3ZhciBlPXIudmlld0luaXRpYWw7aS5zZXRDZW50ZXIoQShlLmNlbnRlcikpLGkuc2V0Wm9vbShlLnpvb20pLGkuc2V0QmVhcmluZyhlLmJlYXJpbmcpLGkuc2V0UGl0Y2goZS5waXRjaCk7dmFyIGE9ci5nZXRWaWV3KCk7dC5faW5wdXQuY2VudGVyPXQuY2VudGVyPWEuY2VudGVyLHQuX2lucHV0Lnpvb209dC56b29tPWEuem9vbSx0Ll9pbnB1dC5iZWFyaW5nPXQuYmVhcmluZz1hLmJlYXJpbmcsdC5faW5wdXQucGl0Y2g9dC5waXRjaD1hLnBpdGNoLG4uZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxuLmVtaXQoInBsb3RseV9yZWxheW91dCIsci5nZXRWaWV3RWRpdHNXaXRoRGVyaXZlZChhKSl9KSksci5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2coci5kcmFnT3B0aW9ucyksbShyLmRyYWdPcHRpb25zLmdkKX0sci5vbkNsaWNrSW5QYW5Gbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9bi5fZnVsbExheW91dC5jbGlja21vZGU7aS5pbmRleE9mKCJzZWxlY3QiKT4tMSYmdihlLm9yaWdpbmFsRXZlbnQsbixbci54YXhpc10sW3IueWF4aXNdLHIuaWQsdCksaS5pbmRleE9mKCJldmVudCIpPi0xJiZjLmNsaWNrKG4sZS5vcmlnaW5hbEV2ZW50KX19fSxfLnVwZGF0ZUZ4PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1lLm1hcCxuPWUuZ2Q7aWYoIWUuaXNTdGF0aWMpe3ZhciBhLG89dC5kcmFnbW9kZTthPWYobyk/ZnVuY3Rpb24odCxyKXsodC5yYW5nZT17fSlbZS5pZF09W2MoW3IueG1pbixyLnltaW5dKSxjKFtyLnhtYXgsci55bWF4XSldfTpmdW5jdGlvbih0LHIsbil7KHQubGFzc29Qb2ludHM9e30pW2UuaWRdPW4uZmlsdGVyZWQubWFwKGMpfTt2YXIgcz1lLmRyYWdPcHRpb25zO2UuZHJhZ09wdGlvbnM9aS5leHRlbmREZWVwKHN8fHt9LHtkcmFnbW9kZTp0LmRyYWdtb2RlLGVsZW1lbnQ6ZS5kaXYsZ2Q6bixwbG90aW5mbzp7aWQ6ZS5pZCxkb21haW46dFtlLmlkXS5kb21haW4seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLGZpbGxSYW5nZUl0ZW1zOmF9LHhheGVzOltlLnhheGlzXSx5YXhlczpbZS55YXhpc10sc3VicGxvdDplLmlkfSksci5vZmYoImNsaWNrIixlLm9uQ2xpY2tJblBhbkhhbmRsZXIpLHAobyl8fGgobyk/KHIuZHJhZ1Bhbi5kaXNhYmxlKCksci5vbigiem9vbXN0YXJ0IixlLmNsZWFyU2VsZWN0KSxlLmRyYWdPcHRpb25zLnByZXBGbj1mdW5jdGlvbih0LHIsbil7ZCh0LHIsbixlLmRyYWdPcHRpb25zLG8pfSxsLmluaXQoZS5kcmFnT3B0aW9ucykpOihyLmRyYWdQYW4uZW5hYmxlKCksci5vZmYoInpvb21zdGFydCIsZS5jbGVhclNlbGVjdCksZS5kaXYub25tb3VzZWRvd249bnVsbCxlLm9uQ2xpY2tJblBhbkhhbmRsZXI9ZS5vbkNsaWNrSW5QYW5GbihlLmRyYWdPcHRpb25zKSxyLm9uKCJjbGljayIsZS5vbkNsaWNrSW5QYW5IYW5kbGVyKSl9ZnVuY3Rpb24gYyh0KXt2YXIgcj1lLm1hcC51bnByb2plY3QodCk7cmV0dXJuW3IubG5nLHIubGF0XX19LF8udXBkYXRlRnJhbWV3b3JrPWZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5pZF0uZG9tYWluLHI9dC5fc2l6ZSxuPXRoaXMuZGl2LnN0eWxlO24ud2lkdGg9ci53KihlLnhbMV0tZS54WzBdKSsicHgiLG4uaGVpZ2h0PXIuaCooZS55WzFdLWUueVswXSkrInB4IixuLmxlZnQ9ci5sK2UueFswXSpyLncrInB4IixuLnRvcD1yLnQrKDEtZS55WzFdKSpyLmgrInB4Iix0aGlzLnhheGlzLl9vZmZzZXQ9ci5sK2UueFswXSpyLncsdGhpcy54YXhpcy5fbGVuZ3RoPXIudyooZS54WzFdLWUueFswXSksdGhpcy55YXhpcy5fb2Zmc2V0PXIudCsoMS1lLnlbMV0pKnIuaCx0aGlzLnlheGlzLl9sZW5ndGg9ci5oKihlLnlbMV0tZS55WzBdKX0sXy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGUscj10W3RoaXMuaWRdLmxheWVycyxuPXRoaXMubGF5ZXJMaXN0O2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpe2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5kaXNwb3NlKCk7Zm9yKG49dGhpcy5sYXllckxpc3Q9W10sZT0wO2U8ci5sZW5ndGg7ZSsrKW4ucHVzaCh4KHRoaXMsZSxyW2VdKSl9ZWxzZSBmb3IoZT0wO2U8ci5sZW5ndGg7ZSsrKW5bZV0udXBkYXRlKHJbZV0pfSxfLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLm1hcCYmKHRoaXMubWFwLnJlbW92ZSgpLHRoaXMubWFwPW51bGwsdGhpcy5jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5kaXYpKX0sXy50b0ltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLnN0b3AoKSx0aGlzLm1hcC5nZXRDYW52YXMoKS50b0RhdGFVUkwoKX0sXy5zZXRPcHRpb25zPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4gaW4gcil0aGlzLm1hcFtlXSh0LG4scltuXSl9LF8uZ2V0TWFwTGF5ZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwLmdldFN0eWxlKCkubGF5ZXJzfSxfLmFkZExheWVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5tYXA7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZigiIj09PWUpcmV0dXJuIHZvaWQgci5hZGRMYXllcih0LGUpO2Zvcih2YXIgbj10aGlzLmdldE1hcExheWVycygpLGE9MDthPG4ubGVuZ3RoO2ErKylpZihlPT09blthXS5pZClyZXR1cm4gdm9pZCByLmFkZExheWVyKHQsZSk7aS53YXJuKFsiVHJ5aW5nIHRvIGFkZCBsYXllciB3aXRoICpiZWxvdyogdmFsdWUiLGUsInJlZmVyZW5jaW5nIGEgbGF5ZXIgdGhhdCBkb2VzIG5vdCBleGlzdCIsIm9yIHRoYXQgZG9lcyBub3QgeWV0IGV4aXN0LiJdLmpvaW4oIiAiKSl9ci5hZGRMYXllcih0KX0sXy5wcm9qZWN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1hcC5wcm9qZWN0KG5ldyBuLkxuZ0xhdCh0WzBdLHRbMV0pKX0sXy5nZXRWaWV3PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tYXAsZT10LmdldENlbnRlcigpLHI9e2xvbjplLmxuZyxsYXQ6ZS5sYXR9LG49dC5nZXRDYW52YXMoKSxpPW4ud2lkdGgsYT1uLmhlaWdodDtyZXR1cm57Y2VudGVyOnIsem9vbTp0LmdldFpvb20oKSxiZWFyaW5nOnQuZ2V0QmVhcmluZygpLHBpdGNoOnQuZ2V0UGl0Y2goKSxfZGVyaXZlZDp7Y29vcmRpbmF0ZXM6W3QudW5wcm9qZWN0KFswLDBdKS50b0FycmF5KCksdC51bnByb2plY3QoW2ksMF0pLnRvQXJyYXkoKSx0LnVucHJvamVjdChbaSxhXSkudG9BcnJheSgpLHQudW5wcm9qZWN0KFswLGFdKS50b0FycmF5KCldfX19LF8uZ2V0Vmlld0VkaXRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLmlkLHI9WyJjZW50ZXIiLCJ6b29tIiwiYmVhcmluZyIsInBpdGNoIl0sbj17fSxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07bltlKyIuIithXT10W2FdfXJldHVybiBufSxfLmdldFZpZXdFZGl0c1dpdGhEZXJpdmVkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWQscj10aGlzLmdldFZpZXdFZGl0cyh0KTtyZXR1cm4gcltlKyIuX2Rlcml2ZWQiXT10Ll9kZXJpdmVkLHJ9LGUuZXhwb3J0cz1ifSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiOjY1OCwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc2OSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vY2FydGVzaWFuL3NlbGVjdCI6ODQ3LCIuL2NvbnN0YW50cyI6ODgyLCIuL2xheWVycyI6ODg1LCJtYXBib3gtZ2wvZGlzdC9tYXBib3gtZ2wtdW5taW5pZmllZCI6NDQxfV0sODg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVkaXRUeXBlO3JldHVybnt0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxiOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxsOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZTplfSxlZGl0VHlwZTplfX19LHt9XSw4OTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtdGltZS1mb3JtYXQiKS50aW1lRm9ybWF0TG9jYWxlLGE9dCgiZDMtZm9ybWF0IikuZm9ybWF0TG9jYWxlLG89dCgiZmFzdC1pc251bWVyaWMiKSxzPXQoIi4uL3JlZ2lzdHJ5IiksbD10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLGM9dCgiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLHU9dCgiLi4vbGliIiksZj10KCIuLi9jb21wb25lbnRzL2NvbG9yIiksaD10KCIuLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLHA9dCgiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxkPXQoIi4vY2FydGVzaWFuL2hhbmRsZV9vdXRsaW5lIikuY2xlYXJTZWxlY3QsbT10KCIuL2FuaW1hdGlvbl9hdHRyaWJ1dGVzIiksZz10KCIuL2ZyYW1lX2F0dHJpYnV0ZXMiKSx2PXQoIi4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEseT11LnJlbGlua1ByaXZhdGVLZXlzLHg9dS5fLGI9ZS5leHBvcnRzPXt9O3UuZXh0ZW5kRmxhdChiLHMpLGIuYXR0cmlidXRlcz10KCIuL2F0dHJpYnV0ZXMiKSxiLmF0dHJpYnV0ZXMudHlwZS52YWx1ZXM9Yi5hbGxUeXBlcyxiLmZvbnRBdHRycz10KCIuL2ZvbnRfYXR0cmlidXRlcyIpLGIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYi5mb250V2VpZ2h0PSJub3JtYWwiO3ZhciBfPWIudHJhbnNmb3Jtc1JlZ2lzdHJ5LHc9dCgiLi9jb21tYW5kIik7Yi5leGVjdXRlQVBJQ29tbWFuZD13LmV4ZWN1dGVBUElDb21tYW5kLGIuY29tcHV0ZUFQSUNvbW1hbmRCaW5kaW5ncz13LmNvbXB1dGVBUElDb21tYW5kQmluZGluZ3MsYi5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXI9dy5tYW5hZ2VDb21tYW5kT2JzZXJ2ZXIsYi5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3M9dy5oYXNTaW1wbGVBUElDb21tYW5kQmluZGluZ3MsYi5yZWRyYXdUZXh0PWZ1bmN0aW9uKHQpe3JldHVybiB0PXUuZ2V0R3JhcGhEaXYodCksbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dC5fZnVsbExheW91dCYmKHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJhbm5vdGF0aW9ucyIsImRyYXciKSh0KSxzLmdldENvbXBvbmVudE1ldGhvZCgibGVnZW5kIiwiZHJhdyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJjb2xvcmJhciIsImRyYXciKSh0KSxlKGIucHJldmlvdXNQcm9taXNlcyh0KSkpfSksMzAwKX0pKX0sYi5yZXNpemU9ZnVuY3Rpb24odCl7dmFyIGU7dD11LmdldEdyYXBoRGl2KHQpO3ZhciByPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe3QmJiF1LmlzSGlkZGVuKHQpfHxuKG5ldyBFcnJvcigiUmVzaXplIG11c3QgYmUgcGFzc2VkIGEgZGlzcGxheWVkIHBsb3QgZGl2IGVsZW1lbnQuIikpLHQuX3JlZHJhd1RpbWVyJiZjbGVhclRpbWVvdXQodC5fcmVkcmF3VGltZXIpLHQuX3Jlc29sdmVSZXNpemUmJihlPXQuX3Jlc29sdmVSZXNpemUpLHQuX3Jlc29sdmVSZXNpemU9cix0Ll9yZWRyYXdUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2lmKCF0LmxheW91dHx8dC5sYXlvdXQud2lkdGgmJnQubGF5b3V0LmhlaWdodHx8dS5pc0hpZGRlbih0KSlyKHQpO2Vsc2V7ZGVsZXRlIHQubGF5b3V0LndpZHRoLGRlbGV0ZSB0LmxheW91dC5oZWlnaHQ7dmFyIGU9dC5jaGFuZ2VkO3QuYXV0b3BsYXk9ITAscy5jYWxsKCJyZWxheW91dCIsdCx7YXV0b3NpemU6ITB9KS50aGVuKChmdW5jdGlvbigpe3QuY2hhbmdlZD1lLHQuX3Jlc29sdmVSZXNpemU9PT1yJiYoZGVsZXRlIHQuX3Jlc29sdmVSZXNpemUscih0KSl9KSl9fSksMTAwKX0pKTtyZXR1cm4gZSYmZShyKSxyfSxiLnByZXZpb3VzUHJvbWlzZXM9ZnVuY3Rpb24odCl7aWYoKHQuX3Byb21pc2VzfHxbXSkubGVuZ3RoKXJldHVybiBQcm9taXNlLmFsbCh0Ll9wcm9taXNlcykudGhlbigoZnVuY3Rpb24oKXt0Ll9wcm9taXNlcz1bXX0pKX0sYi5hZGRMaW5rcz1mdW5jdGlvbih0KXtpZih0Ll9jb250ZXh0LnNob3dMaW5rfHx0Ll9jb250ZXh0LnNob3dTb3VyY2VzKXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dS5lbnN1cmVTaW5nbGUoZS5fcGFwZXIsInRleHQiLCJqcy1wbG90LWxpbmstY29udGFpbmVyIiwoZnVuY3Rpb24odCl7dC5zdHlsZSh7ImZvbnQtZmFtaWx5IjonIk9wZW4gU2FucyIsIEFyaWFsLCBzYW5zLXNlcmlmJywiZm9udC1zaXplIjoiMTJweCIsZmlsbDpmLmRlZmF1bHRMaW5lLCJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3QuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstdG8tdG9vbCIsITApLHQuYXBwZW5kKCJ0c3BhbiIpLmNsYXNzZWQoImpzLWxpbmstc3BhY2VyIiwhMCksdC5hcHBlbmQoInRzcGFuIikuY2xhc3NlZCgianMtc291cmNlbGlua3MiLCEwKX0pKX0pKSxpPXIubm9kZSgpLGE9e3k6ZS5fcGFwZXIuYXR0cigiaGVpZ2h0IiktOX07ZG9jdW1lbnQuYm9keS5jb250YWlucyhpKSYmaS5nZXRDb21wdXRlZFRleHRMZW5ndGgoKT49ZS53aWR0aC0yMD8oYVsidGV4dC1hbmNob3IiXT0ic3RhcnQiLGEueD01KTooYVsidGV4dC1hbmNob3IiXT0iZW5kIixhLng9ZS5fcGFwZXIuYXR0cigid2lkdGgiKS03KSxyLmF0dHIoYSk7dmFyIG89ci5zZWxlY3QoIi5qcy1saW5rLXRvLXRvb2wiKSxzPXIuc2VsZWN0KCIuanMtbGluay1zcGFjZXIiKSxsPXIuc2VsZWN0KCIuanMtc291cmNlbGlua3MiKTt0Ll9jb250ZXh0LnNob3dTb3VyY2VzJiZ0Ll9jb250ZXh0LnNob3dTb3VyY2VzKHQpLHQuX2NvbnRleHQuc2hvd0xpbmsmJmZ1bmN0aW9uKHQsZSl7ZS50ZXh0KCIiKTt2YXIgcj1lLmFwcGVuZCgiYSIpLmF0dHIoeyJ4bGluazp4bGluazpocmVmIjoiIyIsY2xhc3M6ImxpbmstLWltcHQgbGluay0tZW1iZWR2aWV3IiwiZm9udC13ZWlnaHQiOiJib2xkIn0pLnRleHQodC5fY29udGV4dC5saW5rVGV4dCsiICIrU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKTtpZih0Ll9jb250ZXh0LnNlbmREYXRhKXIub24oImNsaWNrIiwoZnVuY3Rpb24oKXtiLnNlbmREYXRhVG9DbG91ZCh0KX0pKTtlbHNle3ZhciBuPXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgiLyIpLGk9d2luZG93LmxvY2F0aW9uLnNlYXJjaDtyLmF0dHIoeyJ4bGluazp4bGluazpzaG93IjoibmV3IiwieGxpbms6eGxpbms6aHJlZiI6Ii8iK25bMl0uc3BsaXQoIi4iKVswXSsiLyIrblsxXStpfSl9fSh0LG8pLHMudGV4dChvLnRleHQoKSYmbC50ZXh0KCk/IiAtICI6IiIpfX0sYi5zZW5kRGF0YVRvQ2xvdWQ9ZnVuY3Rpb24odCl7dmFyIGU9KHdpbmRvdy5QTE9UTFlFTlZ8fHt9KS5CQVNFX1VSTHx8dC5fY29udGV4dC5wbG90bHlTZXJ2ZXJVUkw7aWYoZSl7dC5lbWl0KCJwbG90bHlfYmVmb3JlZXhwb3J0Iik7dmFyIHI9bi5zZWxlY3QodCkuYXBwZW5kKCJkaXYiKS5hdHRyKCJpZCIsImhpZGRlbmZvcm0iKS5zdHlsZSgiZGlzcGxheSIsIm5vbmUiKSxpPXIuYXBwZW5kKCJmb3JtIikuYXR0cih7YWN0aW9uOmUrIi9leHRlcm5hbCIsbWV0aG9kOiJwb3N0Iix0YXJnZXQ6Il9ibGFuayJ9KTtyZXR1cm4gaS5hcHBlbmQoImlucHV0IikuYXR0cih7dHlwZToidGV4dCIsbmFtZToiZGF0YSJ9KS5ub2RlKCkudmFsdWU9Yi5ncmFwaEpzb24odCwhMSwia2VlcGRhdGEiKSxpLm5vZGUoKS5zdWJtaXQoKSxyLnJlbW92ZSgpLHQuZW1pdCgicGxvdGx5X2FmdGVyZXhwb3J0IiksITF9fTt2YXIgVD1bImRheXMiLCJzaG9ydERheXMiLCJtb250aHMiLCJzaG9ydE1vbnRocyIsInBlcmlvZHMiLCJkYXRlVGltZSIsImRhdGUiLCJ0aW1lIiwiZGVjaW1hbCIsInRob3VzYW5kcyIsImdyb3VwaW5nIiwiY3VycmVuY3kiXSxrPVsieWVhciIsIm1vbnRoIiwiZGF5TW9udGgiLCJkYXlNb250aFllYXIiXTtmdW5jdGlvbiBBKHQsZSl7dmFyIHI9dC5fY29udGV4dC5sb2NhbGU7cnx8KHI9ImVuLVVTIik7dmFyIG49ITEsaT17fTtmdW5jdGlvbiBhKHQpe2Zvcih2YXIgcj0hMCxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBvPWVbYV07aVtvXXx8KHRbb10/aVtvXT10W29dOnI9ITEpfXImJihuPSEwKX1mb3IodmFyIG89MDtvPDI7bysrKXtmb3IodmFyIGw9dC5fY29udGV4dC5sb2NhbGVzLGM9MDtjPDI7YysrKXt2YXIgdT0obFtyXXx8e30pLmZvcm1hdDtpZih1JiYoYSh1KSxuKSlicmVhaztsPXMubG9jYWxlUmVnaXN0cnl9dmFyIGY9ci5zcGxpdCgiLSIpWzBdO2lmKG58fGY9PT1yKWJyZWFrO3I9Zn1yZXR1cm4gbnx8YShzLmxvY2FsZVJlZ2lzdHJ5LmVuLmZvcm1hdCksaX1mdW5jdGlvbiBNKHQsZSl7dmFyIHI9e19mdWxsTGF5b3V0OmV9LG49IngiPT09dC5faWQuY2hhckF0KDApLGk9dC5fbWFpbkF4aXMuX2FuY2hvckF4aXMsYT0iIixvPSIiLHM9IiI7aWYoaSYmKHM9aS5fbWFpbkF4aXMuX2lkLGE9bj90Ll9pZCtzOnMrdC5faWQpLCFhfHwhZS5fcGxvdHNbYV0pe2E9IiI7Zm9yKHZhciBsPXQuX2NvdW50ZXJBeGVzLGM9MDtjPGwubGVuZ3RoO2MrKyl7dmFyIHU9bFtjXSxmPW4/dC5faWQrdTp1K3QuX2lkO298fChvPWYpO3ZhciBoPXAuZ2V0RnJvbUlkKHIsdSk7aWYocyYmaC5vdmVybGF5aW5nPT09cyl7YT1mO2JyZWFrfX19cmV0dXJuIGF8fG99ZnVuY3Rpb24gUyh0KXt2YXIgZT10LnRyYW5zZm9ybXM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGgpZm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl0saT1uLl9tb2R1bGV8fF9bbi50eXBlXTtpZihpJiZpLm1ha2VzRGF0YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBFKHQsZSxyLG4pe2Zvcih2YXIgaT10LnRyYW5zZm9ybXMsYT1bdF0sbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9X1tzLnR5cGVdO2wmJmwudHJhbnNmb3JtJiYoYT1sLnRyYW5zZm9ybShhLHt0cmFuc2Zvcm06cyxmdWxsVHJhY2U6dCxmdWxsRGF0YTplLGxheW91dDpyLGZ1bGxMYXlvdXQ6bix0cmFuc2Zvcm1JbmRleDpvfSkpfXJldHVybiBhfWZ1bmN0aW9uIEwodCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYicHgiPT09dC5zdWJzdHIodC5sZW5ndGgtMikmJnBhcnNlRmxvYXQodCl9ZnVuY3Rpb24gQyh0KXt2YXIgZT10Lm1hcmdpbjtpZighdC5fc2l6ZSl7dmFyIHI9dC5fc2l6ZT17bDpNYXRoLnJvdW5kKGUubCkscjpNYXRoLnJvdW5kKGUuciksdDpNYXRoLnJvdW5kKGUudCksYjpNYXRoLnJvdW5kKGUuYikscDpNYXRoLnJvdW5kKGUucGFkKX07ci53PU1hdGgucm91bmQodC53aWR0aCktci5sLXIucixyLmg9TWF0aC5yb3VuZCh0LmhlaWdodCktci50LXIuYn10Ll9wdXNobWFyZ2lufHwodC5fcHVzaG1hcmdpbj17fSksdC5fcHVzaG1hcmdpbklkc3x8KHQuX3B1c2htYXJnaW5JZHM9e30pfWIuc3VwcGx5RGVmYXVsdHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lJiZlLnNraXBVcGRhdGVDYWxjLG49dC5fZnVsbExheW91dHx8e307aWYobi5fc2tpcERlZmF1bHRzKWRlbGV0ZSBuLl9za2lwRGVmYXVsdHM7ZWxzZXt2YXIgbyxsPXQuX2Z1bGxMYXlvdXQ9e30sYz10LmxheW91dHx8e30sZj10Ll9mdWxsRGF0YXx8W10saD10Ll9mdWxsRGF0YT1bXSxwPXQuZGF0YXx8W10sbT10LmNhbGNkYXRhfHxbXSxnPXQuX2NvbnRleHR8fHt9O3QuX3RyYW5zaXRpb25EYXRhfHxiLmNyZWF0ZVRyYW5zaXRpb25EYXRhKHQpLGwuX2RmbHRUaXRsZT17cGxvdDp4KHQsIkNsaWNrIHRvIGVudGVyIFBsb3QgdGl0bGUiKSx4OngodCwiQ2xpY2sgdG8gZW50ZXIgWCBheGlzIHRpdGxlIikseTp4KHQsIkNsaWNrIHRvIGVudGVyIFkgYXhpcyB0aXRsZSIpLGNvbG9yYmFyOngodCwiQ2xpY2sgdG8gZW50ZXIgQ29sb3JzY2FsZSB0aXRsZSIpLGFubm90YXRpb246eCh0LCJuZXcgdGV4dCIpfSxsLl90cmFjZVdvcmQ9eCh0LCJ0cmFjZSIpO3ZhciB2PUEodCxUKTtpZihsLl9tYXBib3hBY2Nlc3NUb2tlbj1nLm1hcGJveEFjY2Vzc1Rva2VuLG4uX2luaXRpYWxBdXRvU2l6ZUlzRG9uZSl7dmFyIF89bi53aWR0aCx3PW4uaGVpZ2h0O2Iuc3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMoYyxsLHYpLGMud2lkdGh8fChsLndpZHRoPV8pLGMuaGVpZ2h0fHwobC5oZWlnaHQ9dyksYi5zYW5pdGl6ZU1hcmdpbnMobCl9ZWxzZXtiLnN1cHBseUxheW91dEdsb2JhbERlZmF1bHRzKGMsbCx2KTt2YXIgTT0hYy53aWR0aHx8IWMuaGVpZ2h0LFM9bC5hdXRvc2l6ZSxFPWcuYXV0b3NpemFibGU7TSYmKFN8fEUpP2IucGxvdEF1dG9TaXplKHQsYyxsKTpNJiZiLnNhbml0aXplTWFyZ2lucyhsKSwhUyYmTSYmKGMud2lkdGg9bC53aWR0aCxjLmhlaWdodD1sLmhlaWdodCl9bC5fZDNsb2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5kZWNpbWFsPWUuY2hhckF0KDApLHQudGhvdXNhbmRzPWUuY2hhckF0KDEpLHtudW1iZXJGb3JtYXQ6ZnVuY3Rpb24oZSl7dHJ5e2U9YSh0KS5mb3JtYXQodS5hZGp1c3RGb3JtYXQoZSkpfWNhdGNoKHQpe3JldHVybiB1Lndhcm5CYWRGb3JtYXQoZSksdS5ub0Zvcm1hdH1yZXR1cm4gZX0sdGltZUZvcm1hdDppKHQpLnV0Y0Zvcm1hdH19KHYsbC5zZXBhcmF0b3JzKSxsLl9leHRyYUZvcm1hdD1BKHQsayksbC5faW5pdGlhbEF1dG9TaXplSXNEb25lPSEwLGwuX2RhdGFMZW5ndGg9cC5sZW5ndGgsbC5fbW9kdWxlcz1bXSxsLl92aXNpYmxlTW9kdWxlcz1bXSxsLl9iYXNlUGxvdE1vZHVsZXM9W107dmFyIEw9bC5fc3VicGxvdHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHI9cy5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcyxuPXt9O2lmKCFyKXtyPVtdO3ZhciBpPXMuc3VicGxvdHNSZWdpc3RyeTtmb3IodmFyIGEgaW4gaSl7dmFyIG89aVthXS5hdHRyO2lmKG8mJihyLnB1c2goYSksQXJyYXkuaXNBcnJheShvKSkpZm9yKGU9MDtlPG8ubGVuZ3RoO2UrKyl1LnB1c2hVbmlxdWUocixvW2VdKX19Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluW3JbdF1dPVtdO3JldHVybiBufSgpLFA9bC5fc3Bsb21BeGVzPXt4Ont9LHk6e319LEk9bC5fc3Bsb21TdWJwbG90cz17fTtsLl9zcGxvbUdyaWREZmx0PXt9LGwuX3NjYXR0ZXJTdGFja09wdHM9e30sbC5fZmlyc3RTY2F0dGVyPXt9LGwuX2FsaWdubWVudE9wdHM9e30sbC5fY29sb3JBeGVzPXt9LGwuX3JlcXVlc3RSYW5nZXNsaWRlcj17fSxsLl90cmFjZVVpZHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9ZS5sZW5ndGgsYT1bXTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbz10W3JdLl9mdWxsSW5wdXQ7byE9PW4mJmEucHVzaChvKSxuPW99dmFyIHM9YS5sZW5ndGgsbD1uZXcgQXJyYXkoaSksYz17fTtmdW5jdGlvbiBmKHQsZSl7bFtlXT10LGNbdF09MX1mdW5jdGlvbiBoKHQsZSl7aWYodCYmInN0cmluZyI9PXR5cGVvZiB0JiYhY1t0XSlyZXR1cm4gZih0LGUpLCEwfWZvcihyPTA7cjxpO3IrKyl7dmFyIHA9ZVtyXS51aWQ7Im51bWJlciI9PXR5cGVvZiBwJiYocD1TdHJpbmcocCkpLGgocCxyKXx8KHI8cyYmaChhW3JdLnVpZCxyKXx8Zih1LnJhbmRzdHIoYykscikpfXJldHVybiBsfShmLHApLGwuX2dsb2JhbFRyYW5zZm9ybXM9KHQuX2NvbnRleHR8fHt9KS5nbG9iYWxUcmFuc2Zvcm1zLGIuc3VwcGx5RGF0YURlZmF1bHRzKHAsaCxjLGwpO3ZhciBPPU9iamVjdC5rZXlzKFAueCksej1PYmplY3Qua2V5cyhQLnkpO2lmKE8ubGVuZ3RoPjEmJnoubGVuZ3RoPjEpe2ZvcihzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKGMsbCksbz0wO288Ty5sZW5ndGg7bysrKXUucHVzaFVuaXF1ZShMLnhheGlzLE9bb10pO2ZvcihvPTA7bzx6Lmxlbmd0aDtvKyspdS5wdXNoVW5pcXVlKEwueWF4aXMseltvXSk7Zm9yKHZhciBEIGluIEkpdS5wdXNoVW5pcXVlKEwuY2FydGVzaWFuLEQpfWlmKGwuX2hhcz1iLl9oYXNQbG90VHlwZS5iaW5kKGwpLGYubGVuZ3RoPT09aC5sZW5ndGgpZm9yKG89MDtvPGgubGVuZ3RoO28rKyl5KGhbb10sZltvXSk7Yi5zdXBwbHlMYXlvdXRNb2R1bGVEZWZhdWx0cyhjLGwsaCx0Ll90cmFuc2l0aW9uRGF0YSk7dmFyIFI9bC5fdmlzaWJsZU1vZHVsZXMsRj1bXTtmb3Iobz0wO288Ui5sZW5ndGg7bysrKXt2YXIgQj1SW29dLmNyb3NzVHJhY2VEZWZhdWx0cztCJiZ1LnB1c2hVbmlxdWUoRixCKX1mb3Iobz0wO288Ri5sZW5ndGg7bysrKUZbb10oaCxsKTtsLl9oYXNPbmx5TGFyZ2VTcGxvbXM9MT09PWwuX2Jhc2VQbG90TW9kdWxlcy5sZW5ndGgmJiJzcGxvbSI9PT1sLl9iYXNlUGxvdE1vZHVsZXNbMF0ubmFtZSYmTy5sZW5ndGg+MTUmJnoubGVuZ3RoPjE1JiYwPT09bC5zaGFwZXMubGVuZ3RoJiYwPT09bC5pbWFnZXMubGVuZ3RoLGIubGlua1N1YnBsb3RzKGgsbCxmLG4pLGIuY2xlYW5QbG90KGgsbCxmLG4pO3ZhciBOPSEoIW4uX2hhc3x8IW4uX2hhcygiZ2wyZCIpKSxqPSEoIWwuX2hhc3x8IWwuX2hhcygiZ2wyZCIpKSxVPSEoIW4uX2hhc3x8IW4uX2hhcygiY2FydGVzaWFuIikpfHxOLFY9ISghbC5faGFzfHwhbC5faGFzKCJjYXJ0ZXNpYW4iKSl8fGo7VSYmIVY/bi5fYmdMYXllci5yZW1vdmUoKTpWJiYhVSYmKGwuX3Nob3VsZENyZWF0ZUJnTGF5ZXI9ITApLG4uX3pvb21sYXllciYmIXQuX2RyYWdnaW5nJiZkKHtfZnVsbExheW91dDpufSksZnVuY3Rpb24odCxlKXt2YXIgcixuPVtdO2UubWV0YSYmKHI9ZS5fbWV0YT17bWV0YTplLm1ldGEsbGF5b3V0OnttZXRhOmUubWV0YX19KTtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9dFtpXTthLm1ldGE/blthLmluZGV4XT1hLl9tZXRhPXttZXRhOmEubWV0YX06ZS5tZXRhJiYoYS5fbWV0YT17bWV0YTplLm1ldGF9KSxlLm1ldGEmJihhLl9tZXRhLmxheW91dD17bWV0YTplLm1ldGF9KX1uLmxlbmd0aCYmKHJ8fChyPWUuX21ldGE9e30pLHIuZGF0YT1uKX0oaCxsKSx5KGwsbikscy5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yc2NhbGUiLCJjcm9zc1RyYWNlRGVmYXVsdHMiKShoLGwpLGwuX3ByZUdVSXx8KGwuX3ByZUdVST17fSksbC5fdHJhY2VQcmVHVUl8fChsLl90cmFjZVByZUdVST17fSk7dmFyIEgscT1sLl90cmFjZVByZUdVSSxHPXt9O2ZvcihIIGluIHEpR1tIXT0ib2xkIjtmb3Iobz0wO288aC5sZW5ndGg7bysrKUdbSD1oW29dLl9mdWxsSW5wdXQudWlkXXx8KHFbSF09e30pLEdbSF09Im5ldyI7Zm9yKEggaW4gRykib2xkIj09PUdbSF0mJmRlbGV0ZSBxW0hdO0MobCkscy5nZXRDb21wb25lbnRNZXRob2QoInJhbmdlc2xpZGVyIiwibWFrZURhdGEiKShsKSxyfHxtLmxlbmd0aCE9PWgubGVuZ3RofHxiLnN1cHBseURlZmF1bHRzVXBkYXRlQ2FsYyhtLGgpfX0sYi5zdXBwbHlEZWZhdWx0c1VwZGF0ZUNhbGM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXSxpPSh0W3JdfHxbXSlbMF07aWYoaSYmaS50cmFjZSl7dmFyIGE9aS50cmFjZTtpZihhLl9oYXNDYWxjVHJhbnNmb3JtKXt2YXIgbyxzLGwsYz1hLl9hcnJheUF0dHJzO2ZvcihvPTA7bzxjLmxlbmd0aDtvKyspcz1jW29dLGw9dS5uZXN0ZWRQcm9wZXJ0eShhLHMpLmdldCgpLnNsaWNlKCksdS5uZXN0ZWRQcm9wZXJ0eShuLHMpLnNldChsKX1pLnRyYWNlPW59fX0sYi5jcmVhdGVUcmFuc2l0aW9uRGF0YT1mdW5jdGlvbih0KXt0Ll90cmFuc2l0aW9uRGF0YXx8KHQuX3RyYW5zaXRpb25EYXRhPXt9KSx0Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzfHwodC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcz1bXSksdC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lSGFzaHx8KHQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30pLHQuX3RyYW5zaXRpb25EYXRhLl9jb3VudGVyfHwodC5fdHJhbnNpdGlvbkRhdGEuX2NvdW50ZXI9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrc3x8KHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3M9W10pfSxiLl9oYXNQbG90VHlwZT1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX2Jhc2VQbG90TW9kdWxlc3x8W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKylpZihyW2VdLm5hbWU9PT10KXJldHVybiEwO3ZhciBuPXRoaXMuX21vZHVsZXN8fFtdO2ZvcihlPTA7ZTxuLmxlbmd0aDtlKyspe3ZhciBpPW5bZV0ubmFtZTtpZihpPT09dClyZXR1cm4hMDt2YXIgYT1zLm1vZHVsZXNbaV07aWYoYSYmYS5jYXRlZ29yaWVzW3RdKXJldHVybiEwfXJldHVybiExfSxiLmNsZWFuUGxvdD1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhLG89bi5fYmFzZVBsb3RNb2R1bGVzfHxbXTtmb3IoaT0wO2k8by5sZW5ndGg7aSsrKXt2YXIgcz1vW2ldO3MuY2xlYW4mJnMuY2xlYW4odCxlLHIsbil9dmFyIGw9bi5faGFzJiZuLl9oYXMoImdsIiksYz1lLl9oYXMmJmUuX2hhcygiZ2wiKTtsJiYhYyYmdm9pZCAwIT09bi5fZ2xjb250YWluZXImJihuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5nbC1jYW52YXMiKS5yZW1vdmUoKSxuLl9nbGNvbnRhaW5lci5zZWxlY3RBbGwoIi5uby13ZWJnbCIpLnJlbW92ZSgpLG4uX2dsY2FudmFzPW51bGwpO3ZhciB1PSEhbi5faW5mb2xheWVyO3Q6Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGY9cltpXS51aWQ7Zm9yKGE9MDthPHQubGVuZ3RoO2ErKyl7aWYoZj09PXRbYV0udWlkKWNvbnRpbnVlIHR9dSYmbi5faW5mb2xheWVyLnNlbGVjdCgiLmNiIitmKS5yZW1vdmUoKX19LGIubGlua1N1YnBsb3RzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1uLl9wbG90c3x8e30sbD1lLl9wbG90cz17fSxjPWUuX3N1YnBsb3RzLGY9e19mdWxsRGF0YTp0LF9mdWxsTGF5b3V0OmV9LGg9Yy5jYXJ0ZXNpYW4uY29uY2F0KGMuZ2wyZHx8W10pO2ZvcihpPTA7aTxoLmxlbmd0aDtpKyspe3ZhciBkLG09aFtpXSxnPW9bbV0sdj1wLmdldEZyb21JZChmLG0sIngiKSx5PXAuZ2V0RnJvbUlkKGYsbSwieSIpO2ZvcihnP2Q9bFttXT1nOihkPWxbbV09e30pLmlkPW0sdi5fY291bnRlckF4ZXMucHVzaCh5Ll9pZCkseS5fY291bnRlckF4ZXMucHVzaCh2Ll9pZCksdi5fc3VicGxvdHNXaXRoLnB1c2gobSkseS5fc3VicGxvdHNXaXRoLnB1c2gobSksZC54YXhpcz12LGQueWF4aXM9eSxkLl9oYXNDbGlwT25BeGlzRmFsc2U9ITEsYT0wO2E8dC5sZW5ndGg7YSsrKXt2YXIgeD10W2FdO2lmKHgueGF4aXM9PT1kLnhheGlzLl9pZCYmeC55YXhpcz09PWQueWF4aXMuX2lkJiYhMT09PXguY2xpcG9uYXhpcyl7ZC5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX19dmFyIGIsXz1wLmxpc3QoZixudWxsLCEwKTtmb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKXt2YXIgdz1udWxsOyhiPV9baV0pLm92ZXJsYXlpbmcmJih3PXAuZ2V0RnJvbUlkKGYsYi5vdmVybGF5aW5nKSkmJncub3ZlcmxheWluZyYmKGIub3ZlcmxheWluZz0hMSx3PW51bGwpLGIuX21haW5BeGlzPXd8fGIsdyYmKGIuZG9tYWluPXcuZG9tYWluLnNsaWNlKCkpLGIuX2FuY2hvckF4aXM9ImZyZWUiPT09Yi5hbmNob3I/bnVsbDpwLmdldEZyb21JZChmLGIuYW5jaG9yKX1mb3IoaT0wO2k8Xy5sZW5ndGg7aSsrKWlmKChiPV9baV0pLl9jb3VudGVyQXhlcy5zb3J0KHAuaWRTb3J0KSxiLl9zdWJwbG90c1dpdGguc29ydCh1LnN1YnBsb3RTb3J0KSxiLl9tYWluU3VicGxvdD1NKGIsZSksYi5fY291bnRlckF4ZXMubGVuZ3RoJiYoYi5zcGlrZW1vZGUmJi0xIT09Yi5zcGlrZW1vZGUuaW5kZXhPZigiYWNyb3NzIil8fGIuYXV0b21hcmdpbiYmYi5taXJyb3ImJiJmcmVlIiE9PWIuYW5jaG9yfHxzLmdldENvbXBvbmVudE1ldGhvZCgicmFuZ2VzbGlkZXIiLCJpc1Zpc2libGUiKShiKSkpe3ZhciBUPTEsaz0wO2ZvcihhPTA7YTxiLl9jb3VudGVyQXhlcy5sZW5ndGg7YSsrKXt2YXIgQT1wLmdldEZyb21JZChmLGIuX2NvdW50ZXJBeGVzW2FdKTtUPU1hdGgubWluKFQsQS5kb21haW5bMF0pLGs9TWF0aC5tYXgoayxBLmRvbWFpblsxXSl9VDxrJiYoYi5fY291bnRlckRvbWFpbk1pbj1ULGIuX2NvdW50ZXJEb21haW5NYXg9ayl9fSxiLmNsZWFyRXhwYW5kZWRUcmFjZURlZmF1bHRDb2xvcnM9ZnVuY3Rpb24odCl7dmFyIGUscixuO2ZvcihyPVtdLChlPXQuX21vZHVsZS5fY29sb3JBdHRycyl8fCh0Ll9tb2R1bGUuX2NvbG9yQXR0cnM9ZT1bXSxsLmNyYXdsKHQuX21vZHVsZS5hdHRyaWJ1dGVzLChmdW5jdGlvbih0LG4saSxhKXtyW2FdPW4sci5sZW5ndGg9YSsxLCJjb2xvciI9PT10LnZhbFR5cGUmJnZvaWQgMD09PXQuZGZsdCYmZS5wdXNoKHIuam9pbigiLiIpKX0pKSksbj0wO248ZS5sZW5ndGg7bisrKXt1Lm5lc3RlZFByb3BlcnR5KHQsIl9pbnB1dC4iK2Vbbl0pLmdldCgpfHx1Lm5lc3RlZFByb3BlcnR5KHQsZVtuXSkuc2V0KG51bGwpfX0sYi5zdXBwbHlEYXRhRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLGw9bi5fbW9kdWxlcyxmPW4uX3Zpc2libGVNb2R1bGVzLGg9bi5fYmFzZVBsb3RNb2R1bGVzLHA9MCxkPTA7ZnVuY3Rpb24gbSh0KXtlLnB1c2godCk7dmFyIHI9dC5fbW9kdWxlO3ImJih1LnB1c2hVbmlxdWUobCxyKSwhMD09PXQudmlzaWJsZSYmdS5wdXNoVW5pcXVlKGYsciksdS5wdXNoVW5pcXVlKGgsdC5fbW9kdWxlLmJhc2VQbG90TW9kdWxlKSxwKyssITEhPT10Ll9pbnB1dC52aXNpYmxlJiZkKyspfW4uX3RyYW5zZm9ybU1vZHVsZXM9W107dmFyIGc9e30sdj1bXSx4PShyLnRlbXBsYXRlfHx7fSkuZGF0YXx8e30sXz1jLnRyYWNlVGVtcGxhdGVyKHgpO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2lmKG89dFtpXSwoYT1fLm5ld1RyYWNlKG8pKS51aWQ9bi5fdHJhY2VVaWRzW2ldLGIuc3VwcGx5VHJhY2VEZWZhdWx0cyhvLGEsZCxuLGkpLGEuaW5kZXg9aSxhLl9pbnB1dD1vLGEuX2V4cGFuZGVkSW5kZXg9cCxhLnRyYW5zZm9ybXMmJmEudHJhbnNmb3Jtcy5sZW5ndGgpZm9yKHZhciB3PSExIT09by52aXNpYmxlJiYhMT09PWEudmlzaWJsZSxUPUUoYSxlLHIsbiksaz0wO2s8VC5sZW5ndGg7aysrKXt2YXIgQT1UW2tdLE09e190ZW1wbGF0ZTphLl90ZW1wbGF0ZSx0eXBlOmEudHlwZSx1aWQ6YS51aWQra307dyYmITE9PT1BLnZpc2libGUmJmRlbGV0ZSBBLnZpc2libGUsYi5zdXBwbHlUcmFjZURlZmF1bHRzKEEsTSxwLG4saSkseShNLEEpLE0uaW5kZXg9aSxNLl9pbnB1dD1vLE0uX2Z1bGxJbnB1dD1hLE0uX2V4cGFuZGVkSW5kZXg9cCxNLl9leHBhbmRlZElucHV0PUEsbShNKX1lbHNlIGEuX2Z1bGxJbnB1dD1hLGEuX2V4cGFuZGVkSW5wdXQ9YSxtKGEpO3MudHJhY2VJcyhhLCJjYXJwZXRBeGlzIikmJihnW2EuY2FycGV0XT1hKSxzLnRyYWNlSXMoYSwiY2FycGV0RGVwZW5kZW50IikmJnYucHVzaChpKX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWlmKChhPWVbdltpXV0pLnZpc2libGUpe3ZhciBTPWdbYS5jYXJwZXRdO2EuX2NhcnBldD1TLFMmJlMudmlzaWJsZT8oYS54YXhpcz1TLnhheGlzLGEueWF4aXM9Uy55YXhpcyk6YS52aXNpYmxlPSExfX0sYi5zdXBwbHlBbmltYXRpb25EZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZTt0PXR8fHt9O3ZhciByPXt9O2Z1bmN0aW9uIG4oZSxuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30scixtLGUsbil9aWYobigibW9kZSIpLG4oImRpcmVjdGlvbiIpLG4oImZyb21jdXJyZW50IiksQXJyYXkuaXNBcnJheSh0LmZyYW1lKSlmb3Ioci5mcmFtZT1bXSxlPTA7ZTx0LmZyYW1lLmxlbmd0aDtlKyspci5mcmFtZVtlXT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZVtlXXx8e30pO2Vsc2Ugci5mcmFtZT1iLnN1cHBseUFuaW1hdGlvbkZyYW1lRGVmYXVsdHModC5mcmFtZXx8e30pO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2l0aW9uKSlmb3Ioci50cmFuc2l0aW9uPVtdLGU9MDtlPHQudHJhbnNpdGlvbi5sZW5ndGg7ZSsrKXIudHJhbnNpdGlvbltlXT1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb25bZV18fHt9KTtlbHNlIHIudHJhbnNpdGlvbj1iLnN1cHBseUFuaW1hdGlvblRyYW5zaXRpb25EZWZhdWx0cyh0LnRyYW5zaXRpb258fHt9KTtyZXR1cm4gcn0sYi5zdXBwbHlBbmltYXRpb25GcmFtZURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gdS5jb2VyY2UodHx8e30sZSxtLmZyYW1lLHIsbil9cmV0dXJuIHIoImR1cmF0aW9uIikscigicmVkcmF3IiksZX0sYi5zdXBwbHlBbmltYXRpb25UcmFuc2l0aW9uRGVmYXVsdHM9ZnVuY3Rpb24odCl7dmFyIGU9e307ZnVuY3Rpb24gcihyLG4pe3JldHVybiB1LmNvZXJjZSh0fHx7fSxlLG0udHJhbnNpdGlvbixyLG4pfXJldHVybiByKCJkdXJhdGlvbiIpLHIoImVhc2luZyIpLGV9LGIuc3VwcGx5RnJhbWVEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiByKHIsbil7cmV0dXJuIHUuY29lcmNlKHQsZSxnLHIsbil9cmV0dXJuIHIoImdyb3VwIikscigibmFtZSIpLHIoInRyYWNlcyIpLHIoImJhc2VmcmFtZSIpLHIoImRhdGEiKSxyKCJsYXlvdXQiKSxlfSxiLnN1cHBseVRyYWNlRGVmYXVsdHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYSxvPW4uY29sb3J3YXl8fGYuZGVmYXVsdHMsbD1vW3Ilby5sZW5ndGhdO2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gdS5jb2VyY2UodCxlLGIuYXR0cmlidXRlcyxyLG4pfXZhciBoPWMoInZpc2libGUiKTtjKCJ0eXBlIiksYygibmFtZSIsbi5fdHJhY2VXb3JkKyIgIitpKSxjKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pO3ZhciBwPWIuZ2V0TW9kdWxlKGUpO2lmKGUuX21vZHVsZT1wLHApe3ZhciBkPXAuYmFzZVBsb3RNb2R1bGUsbT1kLmF0dHIsZz1kLmF0dHJpYnV0ZXM7aWYobSYmZyl7dmFyIHY9bi5fc3VicGxvdHMseT0iIjtpZihofHwiZ2wyZCIhPT1kLm5hbWUpe2lmKEFycmF5LmlzQXJyYXkobSkpZm9yKGE9MDthPG0ubGVuZ3RoO2ErKyl7dmFyIHg9bVthXSxfPXUuY29lcmNlKHQsZSxnLHgpO3ZbeF0mJnUucHVzaFVuaXF1ZSh2W3hdLF8pLHkrPV99ZWxzZSB5PXUuY29lcmNlKHQsZSxnLG0pO3ZbZC5uYW1lXSYmdS5wdXNoVW5pcXVlKHZbZC5uYW1lXSx5KX19fWlmKGgpe2lmKGMoImN1c3RvbWRhdGEiKSxjKCJpZHMiKSxjKCJtZXRhIikscy50cmFjZUlzKGUsInNob3dMZWdlbmQiKSl1LmNvZXJjZSh0LGUscC5hdHRyaWJ1dGVzLnNob3dsZWdlbmQ/cC5hdHRyaWJ1dGVzOmIuYXR0cmlidXRlcywic2hvd2xlZ2VuZCIpLGMoImxlZ2VuZGdyb3VwIiksYygibGVnZW5kZ3JvdXB0aXRsZS50ZXh0IikmJnUuY29lcmNlRm9udChjLCJsZWdlbmRncm91cHRpdGxlLmZvbnQiLHUuZXh0ZW5kRmxhdCh7fSxuLmZvbnQse3NpemU6TWF0aC5yb3VuZCgxLjEqbi5mb250LnNpemUpfSkpLGMoImxlZ2VuZHJhbmsiKSxlLl9kZmx0U2hvd0xlZ2VuZD0hMDtlbHNlIGUuX2RmbHRTaG93TGVnZW5kPSExO3AmJnAuc3VwcGx5RGVmYXVsdHModCxlLGwsbikscy50cmFjZUlzKGUsIm5vT3BhY2l0eSIpfHxjKCJvcGFjaXR5Iikscy50cmFjZUlzKGUsIm5vdExlZ2VuZElzb2xhdGFibGUiKSYmKGUudmlzaWJsZT0hIWUudmlzaWJsZSkscy50cmFjZUlzKGUsIm5vSG92ZXIiKXx8KGUuaG92ZXJ0ZW1wbGF0ZXx8dS5jb2VyY2VIb3ZlcmluZm8odCxlLG4pLCJwYXJjYXRzIiE9PWUudHlwZSYmcy5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5RGVmYXVsdHMiKSh0LGUsbCxuKSkscCYmcC5zZWxlY3RQb2ludHMmJmMoInNlbGVjdGVkcG9pbnRzIiksYi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cyh0LGUsbil9cmV0dXJuIGV9LGIuaGFzTWFrZXNEYXRhVHJhbnNmb3JtPVMsYi5zdXBwbHlUcmFuc2Zvcm1EZWZhdWx0cz1mdW5jdGlvbih0LGUscil7aWYoZS5fbGVuZ3RofHxTKHQpKXt2YXIgbj1yLl9nbG9iYWxUcmFuc2Zvcm1zfHxbXSxpPXIuX3RyYW5zZm9ybU1vZHVsZXN8fFtdO2lmKEFycmF5LmlzQXJyYXkodC50cmFuc2Zvcm1zKXx8MCE9PW4ubGVuZ3RoKWZvcih2YXIgYT10LnRyYW5zZm9ybXN8fFtdLG89bi5jb25jYXQoYSkscz1lLnRyYW5zZm9ybXM9W10sbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgYyxmPW9bbF0saD1mLnR5cGUscD1fW2hdLGQ9IShmLl9tb2R1bGUmJmYuX21vZHVsZT09PXApLG09cCYmImZ1bmN0aW9uIj09dHlwZW9mIHAudHJhbnNmb3JtO3B8fHUud2FybigiVW5yZWNvZ25pemVkIHRyYW5zZm9ybSB0eXBlICIraCsiLiIpLHAmJnAuc3VwcGx5RGVmYXVsdHMmJihkfHxtKT8oKGM9cC5zdXBwbHlEZWZhdWx0cyhmLGUscix0KSkudHlwZT1oLGMuX21vZHVsZT1wLHUucHVzaFVuaXF1ZShpLHApKTpjPXUuZXh0ZW5kRmxhdCh7fSxmKSxzLnB1c2goYyl9fX0sYi5zdXBwbHlMYXlvdXRHbG9iYWxEZWZhdWx0cz1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihyLG4pe3JldHVybiB1LmNvZXJjZSh0LGUsYi5sYXlvdXRBdHRyaWJ1dGVzLHIsbil9dmFyIGk9dC50ZW1wbGF0ZTt1LmlzUGxhaW5PYmplY3QoaSkmJihlLnRlbXBsYXRlPWksZS5fdGVtcGxhdGU9aS5sYXlvdXQsZS5fZGF0YVRlbXBsYXRlPWkuZGF0YSksbigiYXV0b3R5cGVudW1iZXJzIik7dmFyIGE9dS5jb2VyY2VGb250KG4sImZvbnQiKTtuKCJ0aXRsZS50ZXh0IixlLl9kZmx0VGl0bGUucGxvdCksdS5jb2VyY2VGb250KG4sInRpdGxlLmZvbnQiLHtmYW1pbHk6YS5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKDEuNCphLnNpemUpLGNvbG9yOmEuY29sb3J9KSxuKCJ0aXRsZS54cmVmIiksbigidGl0bGUueXJlZiIpLG4oInRpdGxlLngiKSxuKCJ0aXRsZS55IiksbigidGl0bGUueGFuY2hvciIpLG4oInRpdGxlLnlhbmNob3IiKSxuKCJ0aXRsZS5wYWQudCIpLG4oInRpdGxlLnBhZC5yIiksbigidGl0bGUucGFkLmIiKSxuKCJ0aXRsZS5wYWQubCIpLG4oInVuaWZvcm10ZXh0Lm1vZGUiKSYmbigidW5pZm9ybXRleHQubWluc2l6ZSIpLG4oImF1dG9zaXplIiwhKHQud2lkdGgmJnQuaGVpZ2h0KSksbigid2lkdGgiKSxuKCJoZWlnaHQiKSxuKCJtYXJnaW4ubCIpLG4oIm1hcmdpbi5yIiksbigibWFyZ2luLnQiKSxuKCJtYXJnaW4uYiIpLG4oIm1hcmdpbi5wYWQiKSxuKCJtYXJnaW4uYXV0b2V4cGFuZCIpLHQud2lkdGgmJnQuaGVpZ2h0JiZiLnNhbml0aXplTWFyZ2lucyhlKSxzLmdldENvbXBvbmVudE1ldGhvZCgiZ3JpZCIsInNpemVEZWZhdWx0cyIpKHQsZSksbigicGFwZXJfYmdjb2xvciIpLG4oInNlcGFyYXRvcnMiLHIuZGVjaW1hbCtyLnRob3VzYW5kcyksbigiaGlkZXNvdXJjZXMiKSxuKCJjb2xvcndheSIpLG4oImRhdGFyZXZpc2lvbiIpO3ZhciBvPW4oInVpcmV2aXNpb24iKTtuKCJlZGl0cmV2aXNpb24iLG8pLG4oInNlbGVjdGlvbnJldmlzaW9uIixvKSxzLmdldENvbXBvbmVudE1ldGhvZCgibW9kZWJhciIsInN1cHBseUxheW91dERlZmF1bHRzIikodCxlKSxzLmdldENvbXBvbmVudE1ldGhvZCgic2hhcGVzIiwic3VwcGx5RHJhd05ld1NoYXBlRGVmYXVsdHMiKSh0LGUsbiksbigibWV0YSIpLHUuaXNQbGFpbk9iamVjdCh0LnRyYW5zaXRpb24pJiYobigidHJhbnNpdGlvbi5kdXJhdGlvbiIpLG4oInRyYW5zaXRpb24uZWFzaW5nIiksbigidHJhbnNpdGlvbi5vcmRlcmluZyIpKSxzLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlRGVmYXVsdHMiKSh0LGUsImNhbGVuZGFyIikscy5nZXRDb21wb25lbnRNZXRob2QoImZ4Iiwic3VwcGx5TGF5b3V0R2xvYmFsRGVmYXVsdHMiKSh0LGUsbil9LGIucGxvdEF1dG9TaXplPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGE9dC5fY29udGV4dHx8e30scz1hLmZyYW1lTWFyZ2lucyxsPXUuaXNQbG90RGl2KHQpO2lmKGwmJnQuZW1pdCgicGxvdGx5X2F1dG9zaXplIiksYS5maWxsRnJhbWUpbj13aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iO2Vsc2V7dmFyIGM9bD93aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTp7fTtpZihuPUwoYy53aWR0aCl8fEwoYy5tYXhXaWR0aCl8fHIud2lkdGgsaT1MKGMuaGVpZ2h0KXx8TChjLm1heEhlaWdodCl8fHIuaGVpZ2h0LG8ocykmJnM+MCl7dmFyIGY9MS0yKnM7bj1NYXRoLnJvdW5kKGYqbiksaT1NYXRoLnJvdW5kKGYqaSl9fXZhciBoPWIubGF5b3V0QXR0cmlidXRlcy53aWR0aC5taW4scD1iLmxheW91dEF0dHJpYnV0ZXMuaGVpZ2h0Lm1pbjtuPGgmJihuPWgpLGk8cCYmKGk9cCk7dmFyIGQ9IWUud2lkdGgmJk1hdGguYWJzKHIud2lkdGgtbik+MSxtPSFlLmhlaWdodCYmTWF0aC5hYnMoci5oZWlnaHQtaSk+MTsobXx8ZCkmJihkJiYoci53aWR0aD1uKSxtJiYoci5oZWlnaHQ9aSkpLHQuX2luaXRpYWxBdXRvU2l6ZXx8KHQuX2luaXRpYWxBdXRvU2l6ZT17d2lkdGg6bixoZWlnaHQ6aX0pLGIuc2FuaXRpemVNYXJnaW5zKHIpfSxiLnN1cHBseUxheW91dE1vZHVsZURlZmF1bHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxsPXMuY29tcG9uZW50c1JlZ2lzdHJ5LGM9ZS5fYmFzZVBsb3RNb2R1bGVzLGY9cy5zdWJwbG90c1JlZ2lzdHJ5LmNhcnRlc2lhbjtmb3IoaSBpbiBsKShvPWxbaV0pLmluY2x1ZGVCYXNlUGxvdCYmby5pbmNsdWRlQmFzZVBsb3QodCxlKTtmb3IodmFyIGggaW4gYy5sZW5ndGh8fGMucHVzaChmKSxlLl9oYXMoImNhcnRlc2lhbiIpJiYocy5nZXRDb21wb25lbnRNZXRob2QoImdyaWQiLCJjb250ZW50RGVmYXVsdHMiKSh0LGUpLGYuZmluYWxpemVTdWJwbG90cyh0LGUpKSxlLl9zdWJwbG90cyllLl9zdWJwbG90c1toXS5zb3J0KHUuc3VicGxvdFNvcnQpO2ZvcihhPTA7YTxjLmxlbmd0aDthKyspKG89Y1thXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpO3ZhciBwPWUuX21vZHVsZXM7Zm9yKGE9MDthPHAubGVuZ3RoO2ErKykobz1wW2FdKS5zdXBwbHlMYXlvdXREZWZhdWx0cyYmby5zdXBwbHlMYXlvdXREZWZhdWx0cyh0LGUscik7dmFyIGQ9ZS5fdHJhbnNmb3JtTW9kdWxlcztmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKShvPWRbYV0pLnN1cHBseUxheW91dERlZmF1bHRzJiZvLnN1cHBseUxheW91dERlZmF1bHRzKHQsZSxyLG4pO2ZvcihpIGluIGwpKG89bFtpXSkuc3VwcGx5TGF5b3V0RGVmYXVsdHMmJm8uc3VwcGx5TGF5b3V0RGVmYXVsdHModCxlLHIpfSxiLnB1cmdlPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXR8fHt9O3ZvaWQgMCE9PWUuX2dsY29udGFpbmVyJiYoZS5fZ2xjb250YWluZXIuc2VsZWN0QWxsKCIuZ2wtY2FudmFzIikucmVtb3ZlKCksZS5fZ2xjb250YWluZXIucmVtb3ZlKCksZS5fZ2xjYW52YXM9bnVsbCksZS5fbW9kZUJhciYmZS5fbW9kZUJhci5kZXN0cm95KCksdC5fdHJhbnNpdGlvbkRhdGEmJih0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzJiYodC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5sZW5ndGg9MCksdC5fdHJhbnNpdGlvbkRhdGEuX2FuaW1hdGlvblJhZiYmd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHQuX3RyYW5zaXRpb25EYXRhLl9hbmltYXRpb25SYWYpKSx1LmNsZWFyVGhyb3R0bGUoKSx1LmNsZWFyUmVzcG9uc2l2ZSh0KSxkZWxldGUgdC5kYXRhLGRlbGV0ZSB0LmxheW91dCxkZWxldGUgdC5fZnVsbERhdGEsZGVsZXRlIHQuX2Z1bGxMYXlvdXQsZGVsZXRlIHQuY2FsY2RhdGEsZGVsZXRlIHQuZW1wdHksZGVsZXRlIHQuZmlkLGRlbGV0ZSB0LnVuZG9xdWV1ZSxkZWxldGUgdC51bmRvbnVtLGRlbGV0ZSB0LmF1dG9wbGF5LGRlbGV0ZSB0LmNoYW5nZWQsZGVsZXRlIHQuX3Byb21pc2VzLGRlbGV0ZSB0Ll9yZWRyYXdUaW1lcixkZWxldGUgdC5faG1sdW1jb3VudCxkZWxldGUgdC5faG1waXhjb3VudCxkZWxldGUgdC5fdHJhbnNpdGlvbkRhdGEsZGVsZXRlIHQuX3RyYW5zaXRpb25pbmcsZGVsZXRlIHQuX2luaXRpYWxBdXRvU2l6ZSxkZWxldGUgdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbixkZWxldGUgdC5fZHJhZ2dpbmcsZGVsZXRlIHQuX2RyYWdnZWQsZGVsZXRlIHQuX2RyYWdkYXRhLGRlbGV0ZSB0Ll9ob3ZlcmRhdGEsZGVsZXRlIHQuX3NuYXBzaG90SW5Qcm9ncmVzcyxkZWxldGUgdC5fZWRpdGluZyxkZWxldGUgdC5fbW91c2VEb3duVGltZSxkZWxldGUgdC5fbGVnZW5kTW91c2VEb3duVGltZSx0LnJlbW92ZUFsbExpc3RlbmVycyYmdC5yZW1vdmVBbGxMaXN0ZW5lcnMoKX0sYi5zdHlsZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQuX2Z1bGxMYXlvdXQuX3Zpc2libGVNb2R1bGVzLG49W107Zm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGk9cltlXTtpLnN0eWxlJiZ1LnB1c2hVbmlxdWUobixpLnN0eWxlKX1mb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKW5bZV0odCl9LGIuc2FuaXRpemVNYXJnaW5zPWZ1bmN0aW9uKHQpe2lmKHQmJnQubWFyZ2luKXt2YXIgZSxyPXQud2lkdGgsbj10LmhlaWdodCxpPXQubWFyZ2luLGE9ci0oaS5sK2kuciksbz1uLShpLnQraS5iKTthPDAmJihlPShyLTEpLyhpLmwraS5yKSxpLmw9TWF0aC5mbG9vcihlKmkubCksaS5yPU1hdGguZmxvb3IoZSppLnIpKSxvPDAmJihlPShuLTEpLyhpLnQraS5iKSxpLnQ9TWF0aC5mbG9vcihlKmkudCksaS5iPU1hdGguZmxvb3IoZSppLmIpKX19LGIuY2xlYXJBdXRvTWFyZ2luSWRzPWZ1bmN0aW9uKHQpe3QuX2Z1bGxMYXlvdXQuX3B1c2htYXJnaW5JZHM9e319LGIuYWxsb3dBdXRvTWFyZ2luPWZ1bmN0aW9uKHQsZSl7dC5fZnVsbExheW91dC5fcHVzaG1hcmdpbklkc1tlXT0xfTtiLmF1dG9NYXJnaW49ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1uLndpZHRoLGE9bi5oZWlnaHQsbz1uLm1hcmdpbixzPXUuY29uc3RyYWluKGktby5sLW8uciwyLDY0KSxsPXUuY29uc3RyYWluKGEtby50LW8uYiwyLDY0KSxjPU1hdGgubWF4KDAsaS1zKSxmPU1hdGgubWF4KDAsYS1sKSxoPW4uX3B1c2htYXJnaW4scD1uLl9wdXNobWFyZ2luSWRzO2lmKCExIT09by5hdXRvZXhwYW5kKXtpZihyKXt2YXIgZD1yLnBhZDtpZih2b2lkIDA9PT1kJiYoZD1NYXRoLm1pbigxMixvLmwsby5yLG8udCxvLmIpKSxjKXt2YXIgbT0oci5sK3IucikvYzttPjEmJihyLmwvPW0sci5yLz1tKX1pZihmKXt2YXIgZz0oci50K3IuYikvZjtnPjEmJihyLnQvPWcsci5iLz1nKX12YXIgdj12b2lkIDAhPT1yLnhsP3IueGw6ci54LHk9dm9pZCAwIT09ci54cj9yLnhyOnIueCx4PXZvaWQgMCE9PXIueXQ/ci55dDpyLnksXz12b2lkIDAhPT1yLnliP3IueWI6ci55O2hbZV09e2w6e3ZhbDp2LHNpemU6ci5sK2R9LHI6e3ZhbDp5LHNpemU6ci5yK2R9LGI6e3ZhbDpfLHNpemU6ci5iK2R9LHQ6e3ZhbDp4LHNpemU6ci50K2R9fSxwW2VdPTF9ZWxzZSBkZWxldGUgaFtlXSxkZWxldGUgcFtlXTtpZighbi5fcmVwbG90dGluZylyZXR1cm4gYi5kb0F1dG9NYXJnaW4odCl9fSxiLmRvQXV0b01hcmdpbj1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS53aWR0aCxuPWUuaGVpZ2h0O2UuX3NpemV8fChlLl9zaXplPXt9KSxDKGUpO3ZhciBpPWUuX3NpemUsYT1lLm1hcmdpbixsPXUuZXh0ZW5kRmxhdCh7fSxpKSxjPWEubCxmPWEucixoPWEudCxkPWEuYixtPWUuX3B1c2htYXJnaW4sZz1lLl9wdXNobWFyZ2luSWRzO2lmKCExIT09ZS5tYXJnaW4uYXV0b2V4cGFuZCl7Zm9yKHZhciB2IGluIG0pZ1t2XXx8ZGVsZXRlIG1bdl07Zm9yKHZhciB5IGluIG0uYmFzZT17bDp7dmFsOjAsc2l6ZTpjfSxyOnt2YWw6MSxzaXplOmZ9LHQ6e3ZhbDoxLHNpemU6aH0sYjp7dmFsOjAsc2l6ZTpkfX0sbSl7dmFyIHg9bVt5XS5sfHx7fSxfPW1beV0uYnx8e30sdz14LnZhbCxUPXguc2l6ZSxrPV8udmFsLEE9Xy5zaXplO2Zvcih2YXIgTSBpbiBtKXtpZihvKFQpJiZtW01dLnIpe3ZhciBTPW1bTV0uci52YWwsRT1tW01dLnIuc2l6ZTtpZihTPncpe3ZhciBMPShUKlMrKEUtcikqdykvKFMtdyksUD0oRSooMS13KSsoVC1yKSooMS1TKSkvKFMtdyk7TCtQPmMrZiYmKGM9TCxmPVApfX1pZihvKEEpJiZtW01dLnQpe3ZhciBJPW1bTV0udC52YWwsTz1tW01dLnQuc2l6ZTtpZihJPmspe3ZhciB6PShBKkkrKE8tbikqaykvKEktayksRD0oTyooMS1rKSsoQS1uKSooMS1JKSkvKEktayk7eitEPmQraCYmKGQ9eixoPUQpfX19fX12YXIgUj11LmNvbnN0cmFpbihyLWEubC1hLnIsMiw2NCksRj11LmNvbnN0cmFpbihuLWEudC1hLmIsMiw2NCksQj1NYXRoLm1heCgwLHItUiksTj1NYXRoLm1heCgwLG4tRik7aWYoQil7dmFyIGo9KGMrZikvQjtqPjEmJihjLz1qLGYvPWopfWlmKE4pe3ZhciBVPShkK2gpL047VT4xJiYoZC89VSxoLz1VKX1pZihpLmw9TWF0aC5yb3VuZChjKSxpLnI9TWF0aC5yb3VuZChmKSxpLnQ9TWF0aC5yb3VuZChoKSxpLmI9TWF0aC5yb3VuZChkKSxpLnA9TWF0aC5yb3VuZChhLnBhZCksaS53PU1hdGgucm91bmQociktaS5sLWkucixpLmg9TWF0aC5yb3VuZChuKS1pLnQtaS5iLCFlLl9yZXBsb3R0aW5nJiZiLmRpZE1hcmdpbkNoYW5nZShsLGkpKXsiX3JlZHJhd0Zyb21BdXRvTWFyZ2luQ291bnQiaW4gZT9lLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50Kys6ZS5fcmVkcmF3RnJvbUF1dG9NYXJnaW5Db3VudD0xO3ZhciBWPTMqKDErT2JqZWN0LmtleXMoZykubGVuZ3RoKTtpZihlLl9yZWRyYXdGcm9tQXV0b01hcmdpbkNvdW50PFYpcmV0dXJuIHMuY2FsbCgiX2RvUGxvdCIsdCk7ZS5fc2l6ZT1sLHUud2FybigiVG9vIG1hbnkgYXV0by1tYXJnaW4gcmVkcmF3cy4iKX0hZnVuY3Rpb24odCl7dmFyIGU9cC5saXN0KHQsIiIsITApO1siX2FkanVzdFRpY2tMYWJlbHNPdmVyZmxvdyIsIl9oaWRlQ291bnRlckF4aXNJbnNpZGVUaWNrTGFiZWxzIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl1bdF07biYmbigpfX0pKX0odCl9O3ZhciBQPVsibCIsInIiLCJ0IiwiYiIsInAiLCJ3IiwiaCJdO2Z1bmN0aW9uIEkodCxlLHIpe3ZhciBuPSExO3ZhciBpPVtiLnByZXZpb3VzUHJvbWlzZXMsZnVuY3Rpb24oKXtpZih0Ll90cmFuc2l0aW9uRGF0YSlyZXR1cm4gdC5fdHJhbnNpdGlvbmluZz0hMSxmdW5jdGlvbih0KXt2YXIgZT1Qcm9taXNlLnJlc29sdmUoKTtpZighdClyZXR1cm4gZTtmb3IoO3QubGVuZ3RoOyllPWUudGhlbih0LnNoaWZ0KCkpO3JldHVybiBlfSh0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzKX0sci5wcmVwYXJlRm4sYi5yZWhvdmVyLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbmciLFtdKSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSl7dC5fdHJhbnNpdGlvbmluZz0hMCxlLmR1cmF0aW9uPjAmJih0Ll90cmFuc2l0aW9uaW5nV2l0aER1cmF0aW9uPSEwKSx0Ll90cmFuc2l0aW9uRGF0YS5faW50ZXJydXB0Q2FsbGJhY2tzLnB1c2goKGZ1bmN0aW9uKCl7bj0hMH0pKSxyLnJlZHJhdyYmdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3JldHVybiBzLmNhbGwoInJlZHJhdyIsdCl9KSksdC5fdHJhbnNpdGlvbkRhdGEuX2ludGVycnVwdENhbGxiYWNrcy5wdXNoKChmdW5jdGlvbigpe3QuZW1pdCgicGxvdGx5X3RyYW5zaXRpb25pbnRlcnJ1cHRlZCIsW10pfSkpO3ZhciBhPTAsbz0wO2Z1bmN0aW9uIGwoKXtyZXR1cm4gYSsrLGZ1bmN0aW9uKCl7bysrLG58fG8hPT1hfHxmdW5jdGlvbihlKXtpZighdC5fdHJhbnNpdGlvbkRhdGEpcmV0dXJuOyhmdW5jdGlvbih0KXtpZih0KWZvcig7dC5sZW5ndGg7KXQuc2hpZnQoKX0pKHQuX3RyYW5zaXRpb25EYXRhLl9pbnRlcnJ1cHRDYWxsYmFja3MpLFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKGZ1bmN0aW9uKCl7aWYoci5yZWRyYXcpcmV0dXJuIHMuY2FsbCgicmVkcmF3Iix0KX0pKS50aGVuKChmdW5jdGlvbigpe3QuX3RyYW5zaXRpb25pbmc9ITEsdC5fdHJhbnNpdGlvbmluZ1dpdGhEdXJhdGlvbj0hMSx0LmVtaXQoInBsb3RseV90cmFuc2l0aW9uZWQiLFtdKX0pKS50aGVuKGUpfShpKX19ci5ydW5GbihsKSxzZXRUaW1lb3V0KGwoKSl9KSl9XSxhPXUuc3luY09yQXN5bmMoaSx0KTtyZXR1cm4gYSYmYS50aGVufHwoYT1Qcm9taXNlLnJlc29sdmUoKSksYS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpfWIuZGlkTWFyZ2luQ2hhbmdlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTA7cjxQLmxlbmd0aDtyKyspe3ZhciBuPVBbcl0saT10W25dLGE9ZVtuXTtpZighbyhpKXx8TWF0aC5hYnMoYS1pKT4xKXJldHVybiEwfXJldHVybiExfSxiLmdyYXBoSnNvbj1mdW5jdGlvbih0LGUscixuLGksYSl7KGkmJmUmJiF0Ll9mdWxsRGF0YXx8aSYmIWUmJiF0Ll9mdWxsTGF5b3V0KSYmYi5zdXBwbHlEZWZhdWx0cyh0KTt2YXIgbz1pP3QuX2Z1bGxEYXRhOnQuZGF0YSxzPWk/dC5fZnVsbExheW91dDp0LmxheW91dCxsPSh0Ll90cmFuc2l0aW9uRGF0YXx8e30pLl9mcmFtZXM7ZnVuY3Rpb24gYyh0LGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXJldHVybiBlPyJfZnVuY3Rpb25fIjpudWxsO2lmKHUuaXNQbGFpbk9iamVjdCh0KSl7dmFyIG4saT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuc29ydCgpLmZvckVhY2goKGZ1bmN0aW9uKGEpe2lmKC0xPT09WyJfIiwiWyJdLmluZGV4T2YoYS5jaGFyQXQoMCkpKWlmKCJmdW5jdGlvbiIhPXR5cGVvZiB0W2FdKXtpZigia2VlcGRhdGEiPT09cil7aWYoInNyYyI9PT1hLnN1YnN0cihhLmxlbmd0aC0zKSlyZXR1cm59ZWxzZSBpZigia2VlcHN0cmVhbSI9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mKG49dFthKyJzcmMiXSkmJm4uaW5kZXhPZigiOiIpPjAmJiF1LmlzUGxhaW5PYmplY3QodC5zdHJlYW0pKXJldHVybn1lbHNlIGlmKCJrZWVwYWxsIiE9PXImJiJzdHJpbmciPT10eXBlb2Yobj10W2ErInNyYyJdKSYmbi5pbmRleE9mKCI6Iik+MClyZXR1cm47aVthXT1jKHRbYV0sZSl9ZWxzZSBlJiYoaVthXT0iX2Z1bmN0aW9uIil9KSksaX1yZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGModCxlKX0pKTp1LmlzVHlwZWRBcnJheSh0KT91LnNpbXBsZU1hcCh0LHUuaWRlbnRpdHkpOnUuaXNKU0RhdGUodCk/dS5tczJEYXRlVGltZUxvY2FsKCt0KTp0fXZhciBmPXtkYXRhOihvfHxbXSkubWFwKChmdW5jdGlvbih0KXt2YXIgcj1jKHQpO3JldHVybiBlJiZkZWxldGUgci5maXQscn0pKX07aWYoIWUmJihmLmxheW91dD1jKHMpLGkpKXt2YXIgaD1zLl9zaXplO2YubGF5b3V0LmNvbXB1dGVkPXttYXJnaW46e2I6aC5iLGw6aC5sLHI6aC5yLHQ6aC50fX19cmV0dXJuIGwmJihmLmZyYW1lcz1jKGwpKSxhJiYoZi5jb25maWc9Yyh0Ll9jb250ZXh0LCEwKSksIm9iamVjdCI9PT1uP2Y6SlNPTi5zdHJpbmdpZnkoZil9LGIubW9kaWZ5RnJhbWVzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGE9dC5fdHJhbnNpdGlvbkRhdGEuX2ZyYW1lcyxvPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g7Zm9yKHI9MDtyPGUubGVuZ3RoO3IrKylzd2l0Y2goKG49ZVtyXSkudHlwZSl7Y2FzZSJyZXBsYWNlIjppPW4udmFsdWU7dmFyIHM9KGFbbi5pbmRleF18fHt9KS5uYW1lLGw9aS5uYW1lO2Fbbi5pbmRleF09b1tsXT1pLGwhPT1zJiYoZGVsZXRlIG9bc10sb1tsXT1pKTticmVhaztjYXNlImluc2VydCI6b1soaT1uLnZhbHVlKS5uYW1lXT1pLGEuc3BsaWNlKG4uaW5kZXgsMCxpKTticmVhaztjYXNlImRlbGV0ZSI6ZGVsZXRlIG9bKGk9YVtuLmluZGV4XSkubmFtZV0sYS5zcGxpY2Uobi5pbmRleCwxKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGIuY29tcHV0ZUZyYW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbz10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVIYXNoO2lmKCFlKXRocm93IG5ldyBFcnJvcigiY29tcHV0ZUZyYW1lIG11c3QgYmUgZ2l2ZW4gYSBzdHJpbmcgZnJhbWUgbmFtZSIpO3ZhciBzPW9bZS50b1N0cmluZygpXTtpZighcylyZXR1cm4hMTtmb3IodmFyIGw9W3NdLGM9W3MubmFtZV07cy5iYXNlZnJhbWUmJihzPW9bcy5iYXNlZnJhbWUudG9TdHJpbmcoKV0pJiYtMT09PWMuaW5kZXhPZihzLm5hbWUpOylsLnB1c2gocyksYy5wdXNoKHMubmFtZSk7Zm9yKHZhciB1PXt9O3M9bC5wb3AoKTspaWYocy5sYXlvdXQmJih1LmxheW91dD1iLmV4dGVuZExheW91dCh1LmxheW91dCxzLmxheW91dCkpLHMuZGF0YSl7aWYodS5kYXRhfHwodS5kYXRhPVtdKSwhKG49cy50cmFjZXMpKWZvcihuPVtdLHI9MDtyPHMuZGF0YS5sZW5ndGg7cisrKW5bcl09cjtmb3IodS50cmFjZXN8fCh1LnRyYWNlcz1bXSkscj0wO3I8cy5kYXRhLmxlbmd0aDtyKyspbnVsbCE9KGk9bltyXSkmJigtMT09PShhPXUudHJhY2VzLmluZGV4T2YoaSkpJiYoYT11LmRhdGEubGVuZ3RoLHUudHJhY2VzW2FdPWkpLHUuZGF0YVthXT1iLmV4dGVuZFRyYWNlKHUuZGF0YVthXSxzLmRhdGFbcl0pKX1yZXR1cm4gdX0sYi5yZWNvbXB1dGVGcmFtZUhhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuX3RyYW5zaXRpb25EYXRhLl9mcmFtZUhhc2g9e30scj10Ll90cmFuc2l0aW9uRGF0YS5fZnJhbWVzLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtpJiZpLm5hbWUmJihlW2kubmFtZV09aSl9fSxiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLGEsbyxzLGwsYyxmPXUuZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LGV8fHt9KSxoPXUuZXhwYW5kT2JqZWN0UGF0aHMoZikscD17fTtpZihyJiZyLmxlbmd0aClmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKXZvaWQgMD09PShpPShuPXUubmVzdGVkUHJvcGVydHkoaCxyW2FdKSkuZ2V0KCkpP3UubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQobnVsbCk6KG4uc2V0KG51bGwpLHUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5zZXQoaSkpO2lmKHQ9dS5leHRlbmREZWVwTm9BcnJheXModHx8e30saCksciYmci5sZW5ndGgpZm9yKGE9MDthPHIubGVuZ3RoO2ErKylpZihsPXUubmVzdGVkUHJvcGVydHkocCxyW2FdKS5nZXQoKSl7Zm9yKGM9KHM9dS5uZXN0ZWRQcm9wZXJ0eSh0LHJbYV0pKS5nZXQoKSxBcnJheS5pc0FycmF5KGMpfHwoYz1bXSxzLnNldChjKSksbz0wO288bC5sZW5ndGg7bysrKXt2YXIgZD1sW29dO2Nbb109bnVsbD09PWQ/bnVsbDpiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKGNbb10sZCl9cy5zZXQoYyl9cmV0dXJuIHR9LGIuZGF0YUFycmF5Q29udGFpbmVycz1bInRyYW5zZm9ybXMiLCJkaW1lbnNpb25zIl0sYi5sYXlvdXRBcnJheUNvbnRhaW5lcnM9cy5sYXlvdXRBcnJheUNvbnRhaW5lcnMsYi5leHRlbmRUcmFjZT1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmRhdGFBcnJheUNvbnRhaW5lcnMpfSxiLmV4dGVuZExheW91dD1mdW5jdGlvbih0LGUpe3JldHVybiBiLmV4dGVuZE9iamVjdFdpdGhDb250YWluZXJzKHQsZSxiLmxheW91dEFycmF5Q29udGFpbmVycyl9LGIudHJhbnNpdGlvbj1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89e3JlZHJhdzppLnJlZHJhd30scz17fSxsPVtdO3JldHVybiBvLnByZXBhcmVGbj1mdW5jdGlvbigpe2Zvcih2YXIgaT1BcnJheS5pc0FycmF5KGUpP2UubGVuZ3RoOjAsYT1uLnNsaWNlKDAsaSksbz0wO288YS5sZW5ndGg7bysrKXt2YXIgYz1hW29dLGY9dC5fZnVsbERhdGFbY10uX21vZHVsZTtpZihmKXtpZihmLmFuaW1hdGFibGUpe3ZhciBoPWYuYmFzZVBsb3RNb2R1bGUubmFtZTtzW2hdfHwoc1toXT1bXSksc1toXS5wdXNoKGMpfXQuZGF0YVthW29dXT1iLmV4dGVuZFRyYWNlKHQuZGF0YVthW29dXSxlW29dKX19dmFyIHA9dS5leHBhbmRPYmplY3RQYXRocyh1LmV4dGVuZERlZXBOb0FycmF5cyh7fSxyKSksZD0vXlt4eV1heGlzWzAtOV0qJC87Zm9yKHZhciBtIGluIHApZC50ZXN0KG0pJiZkZWxldGUgcFttXS5yYW5nZTtiLmV4dGVuZExheW91dCh0LmxheW91dCxwKSxkZWxldGUgdC5jYWxjZGF0YSxiLnN1cHBseURlZmF1bHRzKHQpLGIuZG9DYWxjZGF0YSh0KTt2YXIgZz11LmV4cGFuZE9iamVjdFBhdGhzKHIpO2lmKGcpe3ZhciB2PXQuX2Z1bGxMYXlvdXQuX3Bsb3RzO2Zvcih2YXIgeSBpbiB2KXt2YXIgeD12W3ldLF89eC54YXhpcyx3PXgueWF4aXMsVD1fLnJhbmdlLnNsaWNlKCksaz13LnJhbmdlLnNsaWNlKCksQT1udWxsLE09bnVsbCxTPW51bGwsRT1udWxsO0FycmF5LmlzQXJyYXkoZ1tfLl9uYW1lKyIucmFuZ2UiXSk/QT1nW18uX25hbWUrIi5yYW5nZSJdLnNsaWNlKCk6QXJyYXkuaXNBcnJheSgoZ1tfLl9uYW1lXXx8e30pLnJhbmdlKSYmKEE9Z1tfLl9uYW1lXS5yYW5nZS5zbGljZSgpKSxBcnJheS5pc0FycmF5KGdbdy5fbmFtZSsiLnJhbmdlIl0pP009Z1t3Ll9uYW1lKyIucmFuZ2UiXS5zbGljZSgpOkFycmF5LmlzQXJyYXkoKGdbdy5fbmFtZV18fHt9KS5yYW5nZSkmJihNPWdbdy5fbmFtZV0ucmFuZ2Uuc2xpY2UoKSksVCYmQSYmKF8ucjJsKFRbMF0pIT09Xy5yMmwoQVswXSl8fF8ucjJsKFRbMV0pIT09Xy5yMmwoQVsxXSkpJiYoUz17eHIwOlQseHIxOkF9KSxrJiZNJiYody5yMmwoa1swXSkhPT13LnIybChNWzBdKXx8dy5yMmwoa1sxXSkhPT13LnIybChNWzFdKSkmJihFPXt5cjA6ayx5cjE6TX0pLChTfHxFKSYmbC5wdXNoKHUuZXh0ZW5kRmxhdCh7cGxvdGluZm86eH0sUyxFKSl9fXJldHVybiBQcm9taXNlLnJlc29sdmUoKX0sby5ydW5Gbj1mdW5jdGlvbihlKXt2YXIgbixpLG89dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGM9bC5sZW5ndGg7aWYocilmb3IoaT0wO2k8by5sZW5ndGg7aSsrKW9baV0udHJhbnNpdGlvbkF4ZXMmJm9baV0udHJhbnNpdGlvbkF4ZXModCxsLGEsZSk7Zm9yKHZhciBmIGluIGM/KChuPXUuZXh0ZW5kRmxhdCh7fSxhKSkuZHVyYXRpb249MCxkZWxldGUgcy5jYXJ0ZXNpYW4pOm49YSxzKXt2YXIgaD1zW2ZdO3QuX2Z1bGxEYXRhW2hbMF1dLl9tb2R1bGUuYmFzZVBsb3RNb2R1bGUucGxvdCh0LGgsbixlKX19LEkodCxhLG8pfSxiLnRyYW5zaXRpb25Gcm9tUmVhY3Q9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5fZnVsbExheW91dCxhPWkudHJhbnNpdGlvbixvPXt9LHM9W107cmV0dXJuIG8ucHJlcGFyZUZuPWZ1bmN0aW9uKCl7dmFyIHQ9aS5fcGxvdHM7Zm9yKHZhciBhIGluIG8ucmVkcmF3PSExLCJzb21lIj09PWUuYW5pbSYmKG8ucmVkcmF3PSEwKSwic29tZSI9PT1yLmFuaW0mJihvLnJlZHJhdz0hMCksdCl7dmFyIGw9dFthXSxjPWwueGF4aXMsZj1sLnlheGlzLGg9bltjLl9uYW1lXS5yYW5nZS5zbGljZSgpLHA9bltmLl9uYW1lXS5yYW5nZS5zbGljZSgpLGQ9Yy5yYW5nZS5zbGljZSgpLG09Zi5yYW5nZS5zbGljZSgpO2Muc2V0U2NhbGUoKSxmLnNldFNjYWxlKCk7dmFyIGc9bnVsbCx2PW51bGw7Yy5yMmwoaFswXSk9PT1jLnIybChkWzBdKSYmYy5yMmwoaFsxXSk9PT1jLnIybChkWzFdKXx8KGc9e3hyMDpoLHhyMTpkfSksZi5yMmwocFswXSk9PT1mLnIybChtWzBdKSYmZi5yMmwocFsxXSk9PT1mLnIybChtWzFdKXx8KHY9e3lyMDpwLHlyMTptfSksKGd8fHYpJiZzLnB1c2godS5leHRlbmRGbGF0KHtwbG90aW5mbzpsfSxnLHYpKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LG8ucnVuRm49ZnVuY3Rpb24ocil7Zm9yKHZhciBuLGksbyxsPXQuX2Z1bGxEYXRhLGM9dC5fZnVsbExheW91dC5fYmFzZVBsb3RNb2R1bGVzLGY9W10saD0wO2g8bC5sZW5ndGg7aCsrKWYucHVzaChoKTtmdW5jdGlvbiBwKCl7aWYodC5fZnVsbExheW91dClmb3IodmFyIGU9MDtlPGMubGVuZ3RoO2UrKyljW2VdLnRyYW5zaXRpb25BeGVzJiZjW2VdLnRyYW5zaXRpb25BeGVzKHQscyxuLHIpfWZ1bmN0aW9uIGQoKXtpZih0Ll9mdWxsTGF5b3V0KWZvcih2YXIgZT0wO2U8Yy5sZW5ndGg7ZSsrKWNbZV0ucGxvdCh0LG8saSxyKX1zLmxlbmd0aCYmZS5hbmltPyJ0cmFjZXMgZmlyc3QiPT09YS5vcmRlcmluZz8obj11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLG89ZixpPWEsc2V0VGltZW91dChwLGEuZHVyYXRpb24pLGQoKSk6KG49YSxvPW51bGwsaT11LmV4dGVuZEZsYXQoe30sYSx7ZHVyYXRpb246MH0pLHNldFRpbWVvdXQoZCxuLmR1cmF0aW9uKSxwKCkpOnMubGVuZ3RoPyhuPWEscCgpKTplLmFuaW0mJihvPWYsaT1hLGQoKSl9LEkodCxhLG8pfSxiLmRvQ2FsY2RhdGE9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvPXAubGlzdCh0KSxjPXQuX2Z1bGxEYXRhLGY9dC5fZnVsbExheW91dCxkPW5ldyBBcnJheShjLmxlbmd0aCksbT0odC5jYWxjZGF0YXx8W10pLnNsaWNlKCk7Zm9yKHQuY2FsY2RhdGE9ZCxmLl9udW1Cb3hlcz0wLGYuX251bVZpb2xpbnM9MCxmLl92aW9saW5TY2FsZUdyb3VwU3RhdHM9e30sdC5faG1waXhjb3VudD0wLHQuX2htbHVtY291bnQ9MCxmLl9waWVjb2xvcm1hcD17fSxmLl9zdW5idXJzdGNvbG9ybWFwPXt9LGYuX3RyZWVtYXBjb2xvcm1hcD17fSxmLl9pY2ljbGVjb2xvcm1hcD17fSxmLl9mdW5uZWxhcmVhY29sb3JtYXA9e30saT0wO2k8Yy5sZW5ndGg7aSsrKUFycmF5LmlzQXJyYXkoZSkmJi0xPT09ZS5pbmRleE9mKGkpJiYoZFtpXT1tW2ldKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKShyPWNbaV0pLl9hcnJheUF0dHJzPWwuZmluZEFycmF5QXR0cmlidXRlcyhyKSxyLl9leHRyZW1lcz17fTt2YXIgZz1mLl9zdWJwbG90cy5wb2xhcnx8W107Zm9yKGk9MDtpPGcubGVuZ3RoO2krKylvLnB1c2goZltnW2ldXS5yYWRpYWxheGlzLGZbZ1tpXV0uYW5ndWxhcmF4aXMpO2Zvcih2YXIgdiBpbiBmLl9jb2xvckF4ZXMpe3ZhciB5PWZbdl07ITEhPT15LmNhdXRvJiYoZGVsZXRlIHkuY21pbixkZWxldGUgeS5jbWF4KX12YXIgeD0hMTtmdW5jdGlvbiBiKGUpe2lmKHI9Y1tlXSxuPXIuX21vZHVsZSwhMD09PXIudmlzaWJsZSYmci50cmFuc2Zvcm1zKXtpZihuJiZuLmNhbGMpe3ZhciBpPW4uY2FsYyh0LHIpO2lbMF0mJmlbMF0udCYmaVswXS50Ll9zY2VuZSYmZGVsZXRlIGlbMF0udC5fc2NlbmUuZGlydHl9Zm9yKGE9MDthPHIudHJhbnNmb3Jtcy5sZW5ndGg7YSsrKXt2YXIgbz1yLnRyYW5zZm9ybXNbYV07KG49X1tvLnR5cGVdKSYmbi5jYWxjVHJhbnNmb3JtJiYoci5faGFzQ2FsY1RyYW5zZm9ybT0hMCx4PSEwLG4uY2FsY1RyYW5zZm9ybSh0LHIsbykpfX19ZnVuY3Rpb24gdyhlLGkpe2lmKHI9Y1tlXSwhIShuPXIuX21vZHVsZSkuaXNDb250YWluZXI9PT1pKXt2YXIgbz1bXTtpZighMD09PXIudmlzaWJsZSYmMCE9PXIuX2xlbmd0aCl7ZGVsZXRlIHIuX2luZGV4VG9Qb2ludHM7dmFyIHM9ci50cmFuc2Zvcm1zfHxbXTtmb3IoYT1zLmxlbmd0aC0xO2E+PTA7YS0tKWlmKHNbYV0uZW5hYmxlZCl7ci5faW5kZXhUb1BvaW50cz1zW2FdLl9pbmRleFRvUG9pbnRzO2JyZWFrfW4mJm4uY2FsYyYmKG89bi5jYWxjKHQscikpfUFycmF5LmlzQXJyYXkobykmJm9bMF18fChvPVt7eDpoLHk6aH1dKSxvWzBdLnR8fChvWzBdLnQ9e30pLG9bMF0udHJhY2U9cixkW2VdPW99fWZvcih6KG8sYyxmKSxpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCEwKTtmb3IoaT0wO2k8Yy5sZW5ndGg7aSsrKWIoaSk7Zm9yKHgmJnoobyxjLGYpLGk9MDtpPGMubGVuZ3RoO2krKyl3KGksITApO2ZvcihpPTA7aTxjLmxlbmd0aDtpKyspdyhpLCExKTtEKHQpO3ZhciBUPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxsPVtdO2Z1bmN0aW9uIGModCxyLG4pe3ZhciBpPXIuX2lkLmNoYXJBdCgwKTtpZigiaGlzdG9ncmFtMmRjb250b3VyIj09PXQpe3ZhciBhPXIuX2NvdW50ZXJBeGVzWzBdLG89cC5nZXRGcm9tSWQoZSxhKSxzPSJ4Ij09PWl8fCJ4Ij09PWEmJiJjYXRlZ29yeSI9PT1vLnR5cGUsbD0ieSI9PT1pfHwieSI9PT1hJiYiY2F0ZWdvcnkiPT09by50eXBlO3JldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8MD09PWV8fHMmJnQ9PT1uW2VdLmxlbmd0aC0xfHxsJiZlPT09bi5sZW5ndGgtMT8tMTooInkiPT09aT9lOnQpLTF9fXJldHVybiBmdW5jdGlvbih0LGUpe3JldHVybiJ5Ij09PWk/ZTp0fX12YXIgZj17bWluOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5taW4sbnVsbCx0KX0sbWF4OmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoTWF0aC5tYXgsbnVsbCx0KX0sc3VtOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LHRvdGFsOmZ1bmN0aW9uKHQpe3JldHVybiB1LmFnZ051bXMoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pLG51bGwsdCl9LG1lYW46ZnVuY3Rpb24odCl7cmV0dXJuIHUubWVhbih0KX0sbWVkaWFuOmZ1bmN0aW9uKHQpe3JldHVybiB1Lm1lZGlhbih0KX19O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBoPXRbcl07aWYoImNhdGVnb3J5Ij09PWgudHlwZSl7dmFyIGQ9aC5jYXRlZ29yeW9yZGVyLm1hdGNoKE8pO2lmKGQpe3ZhciBtPWRbMV0sZz1kWzJdLHY9aC5faWQuY2hhckF0KDApLHk9IngiPT09dix4PVtdO2ZvcihuPTA7bjxoLl9jYXRlZ29yaWVzLmxlbmd0aDtuKyspeC5wdXNoKFtoLl9jYXRlZ29yaWVzW25dLFtdXSk7Zm9yKG49MDtuPGguX3RyYWNlSW5kaWNlcy5sZW5ndGg7bisrKXt2YXIgYj1oLl90cmFjZUluZGljZXNbbl0sXz1lLl9mdWxsRGF0YVtiXTtpZighMD09PV8udmlzaWJsZSl7dmFyIHc9Xy50eXBlO3MudHJhY2VJcyhfLCJoaXN0b2dyYW0iKSYmKGRlbGV0ZSBfLl94YXV0b0JpbkZpbmlzaGVkLGRlbGV0ZSBfLl95YXV0b0JpbkZpbmlzaGVkKTt2YXIgVD0ic3Bsb20iPT09dyxrPSJzY2F0dGVyZ2wiPT09dyxBPWUuY2FsY2RhdGFbYl07Zm9yKGk9MDtpPEEubGVuZ3RoO2krKyl7dmFyIE0sUyxFPUFbaV07aWYoVCl7dmFyIEw9Xy5fYXhlc0RpbVtoLl9pZF07aWYoIXkpe3ZhciBDPV8uX2RpYWdbTF1bMF07QyYmKGg9ZS5fZnVsbExheW91dFtwLmlkMm5hbWUoQyldKX12YXIgUD1FLnRyYWNlLmRpbWVuc2lvbnNbTF0udmFsdWVzO2ZvcihhPTA7YTxQLmxlbmd0aDthKyspZm9yKE09aC5fY2F0ZWdvcmllc01hcFtQW2FdXSxvPTA7bzxFLnRyYWNlLmRpbWVuc2lvbnMubGVuZ3RoO28rKylpZihvIT09TCl7dmFyIEk9RS50cmFjZS5kaW1lbnNpb25zW29dO3hbTV1bMV0ucHVzaChJLnZhbHVlc1thXSl9fWVsc2UgaWYoayl7Zm9yKGE9MDthPEUudC54Lmxlbmd0aDthKyspeT8oTT1FLnQueFthXSxTPUUudC55W2FdKTooTT1FLnQueVthXSxTPUUudC54W2FdKSx4W01dWzFdLnB1c2goUyk7RS50JiZFLnQuX3NjZW5lJiZkZWxldGUgRS50Ll9zY2VuZS5kaXJ0eX1lbHNlIGlmKEUuaGFzT3duUHJvcGVydHkoInoiKSl7Uz1FLno7dmFyIHo9YyhfLnR5cGUsaCxTKTtmb3IoYT0wO2E8Uy5sZW5ndGg7YSsrKWZvcihvPTA7bzxTW2FdLmxlbmd0aDtvKyspKE09eihvLGEpKSsxJiZ4W01dWzFdLnB1c2goU1thXVtvXSl9ZWxzZSBmb3Iodm9pZCAwPT09KE09RS5wKSYmKE09RVt2XSksdm9pZCAwPT09KFM9RS5zKSYmKFM9RS52KSx2b2lkIDA9PT1TJiYoUz15P0UueTpFLngpLEFycmF5LmlzQXJyYXkoUyl8fChTPXZvaWQgMD09PVM/W106W1NdKSxhPTA7YTxTLmxlbmd0aDthKyspeFtNXVsxXS5wdXNoKFNbYV0pfX19aC5fY2F0ZWdvcmllc1ZhbHVlPXg7dmFyIEQ9W107Zm9yKG49MDtuPHgubGVuZ3RoO24rKylELnB1c2goW3hbbl1bMF0sZlttXSh4W25dWzFdKV0pO0Quc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFsxXS1lWzFdfSkpLGguX2NhdGVnb3JpZXNBZ2dyZWdhdGVkVmFsdWU9RCxoLl9pbml0aWFsQ2F0ZWdvcmllcz1ELm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSksImRlc2NlbmRpbmciPT09ZyYmaC5faW5pdGlhbENhdGVnb3JpZXMucmV2ZXJzZSgpLGw9bC5jb25jYXQoaC5zb3J0QnlJbml0aWFsQ2F0ZWdvcmllcygpKX19fXJldHVybiBsfShvLHQpO2lmKFQubGVuZ3RoKXtmb3IoZi5fbnVtQm94ZXM9MCxmLl9udW1WaW9saW5zPTAsaT0wO2k8VC5sZW5ndGg7aSsrKXcoVFtpXSwhMCk7Zm9yKGk9MDtpPFQubGVuZ3RoO2krKyl3KFRbaV0sITEpO0QodCl9cy5nZXRDb21wb25lbnRNZXRob2QoImZ4IiwiY2FsYyIpKHQpLHMuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJjYWxjIikodCl9O3ZhciBPPS8odG90YWx8c3VtfG1pbnxtYXh8bWVhbnxtZWRpYW4pIChhc2NlbmRpbmd8ZGVzY2VuZGluZykvO2Z1bmN0aW9uIHoodCxlLHIpe3ZhciBuPXt9O2Z1bmN0aW9uIGkodCl7dC5jbGVhckNhbGMoKSwibXVsdGljYXRlZ29yeSI9PT10LnR5cGUmJnQuc2V0dXBNdWx0aUNhdGVnb3J5KGUpLG5bdC5faWRdPTF9dS5zaW1wbGVNYXAodCxpKTtmb3IodmFyIGE9ci5fYXhpc01hdGNoR3JvdXBzfHxbXSxvPTA7bzxhLmxlbmd0aDtvKyspZm9yKHZhciBzIGluIGFbb10pbltzXXx8aShyW3AuaWQybmFtZShzKV0pfWZ1bmN0aW9uIEQodCl7dmFyIGUscixuLGk9dC5fZnVsbExheW91dCxhPWkuX3Zpc2libGVNb2R1bGVzLG89e307Zm9yKHI9MDtyPGEubGVuZ3RoO3IrKyl7dmFyIHM9YVtyXSxsPXMuY3Jvc3NUcmFjZUNhbGM7aWYobCl7dmFyIGM9cy5iYXNlUGxvdE1vZHVsZS5uYW1lO29bY10/dS5wdXNoVW5pcXVlKG9bY10sbCk6b1tjXT1bbF19fWZvcihuIGluIG8pe3ZhciBmPW9bbl0saD1pLl9zdWJwbG90c1tuXTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihlPTA7ZTxoLmxlbmd0aDtlKyspe3ZhciBwPWhbZV0sZD0iY2FydGVzaWFuIj09PW4/aS5fcGxvdHNbcF06aVtwXTtmb3Iocj0wO3I8Zi5sZW5ndGg7cisrKWZbcl0odCxkLHApfWVsc2UgZm9yKHI9MDtyPGYubGVuZ3RoO3IrKylmW3JdKHQpfX1iLnJlaG92ZXI9ZnVuY3Rpb24odCl7dC5fZnVsbExheW91dC5fcmVob3ZlciYmdC5fZnVsbExheW91dC5fcmVob3ZlcigpfSxiLnJlZHJhZz1mdW5jdGlvbih0KXt0Ll9mdWxsTGF5b3V0Ll9yZWRyYWcmJnQuX2Z1bGxMYXlvdXQuX3JlZHJhZygpfSxiLmdlbmVyYWxVcGRhdGVQZXJUcmFjZU1vZHVsZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaSxhPWUudHJhY2VIYXNoLG89e307Zm9yKGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9cltpXSxsPXNbMF0udHJhY2U7bC52aXNpYmxlJiYob1tsLnR5cGVdPW9bbC50eXBlXXx8W10sb1tsLnR5cGVdLnB1c2gocykpfWZvcih2YXIgYyBpbiBhKWlmKCFvW2NdKXt2YXIgZj1hW2NdWzBdO2ZbMF0udHJhY2UudmlzaWJsZT0hMSxvW2NdPVtmXX1mb3IodmFyIGggaW4gbyl7dmFyIHA9b1toXTtwWzBdWzBdLnRyYWNlLl9tb2R1bGUucGxvdCh0LGUsdS5maWx0ZXJWaXNpYmxlKHApLG4pfWUudHJhY2VIYXNoPW99LGIucGxvdEJhc2VQbG90PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9cy5nZXRNb2R1bGUodCksbz12KGUuY2FsY2RhdGEsYSlbMF07YS5wbG90KGUsbyxuLGkpfSxiLmNsZWFuQmFzZVBsb3Q9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1pLl9oYXMmJmkuX2hhcyh0KSxvPXIuX2hhcyYmci5faGFzKHQpO2EmJiFvJiZpWyJfIit0KyJsYXllciJdLnNlbGVjdEFsbCgiZy50cmFjZSIpLnJlbW92ZSgpfX0seyIuLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vbGliIjo3NzYsIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIjo4MTUsIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi4vcmVnaXN0cnkiOjkwNCwiLi9hbmltYXRpb25fYXR0cmlidXRlcyI6ODIxLCIuL2F0dHJpYnV0ZXMiOjgyMywiLi9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi9jYXJ0ZXNpYW4vaGFuZGxlX291dGxpbmUiOjgzOCwiLi9jb21tYW5kIjo4NTQsIi4vZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4vZnJhbWVfYXR0cmlidXRlcyI6ODU3LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4ODEsIkBwbG90bHkvZDMiOjU4LCJkMy1mb3JtYXQiOjE2MCwiZDMtdGltZS1mb3JtYXQiOjE2OCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDg5MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHI6InN1YnBsb3QiLG5hbWU6InBvbGFyIixheGlzTmFtZXM6WyJhbmd1bGFyYXhpcyIsInJhZGlhbGF4aXMiXSxheGlzTmFtZTJkYXRhQXJyYXk6e2FuZ3VsYXJheGlzOiJ0aGV0YSIscmFkaWFsYXhpczoiciJ9LGxheWVyTmFtZXM6WyJkcmFnbGF5ZXIiLCJwbG90YmciLCJiYWNrcGxvdCIsImFuZ3VsYXItZ3JpZCIsInJhZGlhbC1ncmlkIiwiZnJvbnRwbG90IiwiYW5ndWxhci1saW5lIiwicmFkaWFsLWxpbmUiLCJhbmd1bGFyLWF4aXMiLCJyYWRpYWwtYXhpcyJdLHJhZGlhbERyYWdCb3hTaXplOjUwLGFuZ3VsYXJEcmFnQm94U2l6ZTozMCxjb3JuZXJMZW46MjUsY29ybmVySGFsZldpZHRoOjIsTUlORFJBRzo4LE1JTlpPT006MjAsT0ZGRURHRToyMH19LHt9XSw4OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcixhPW4uZmluZEluZGV4T2ZNaW4sbz1uLmlzQW5nbGVJbnNpZGVTZWN0b3Iscz1uLmFuZ2xlRGVsdGEsbD1uLmFuZ2xlRGlzdDtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpLGEsbz1uWzBdLHM9blsxXSxsPWYoTWF0aC5zaW4oZSktTWF0aC5zaW4odCkpLGM9ZihNYXRoLmNvcyhlKS1NYXRoLmNvcyh0KSksdT1NYXRoLnRhbihyKSxoPWYoMS91KSxwPWwvYyxkPXMtcCpvO3JldHVybiBoP2wmJmM/YT11KihpPWQvKHUtcCkpOmM/KGk9cypoLGE9cyk6KGk9byxhPW8qdSk6bCYmYz8oaT0wLGE9ZCk6Yz8oaT0wLGE9cyk6aT1hPU5hTixbaSxhXX1mdW5jdGlvbiB1KHQsZSxyLGkpe3JldHVybiBuLmlzRnVsbENpcmNsZShbZSxyXSk/ZnVuY3Rpb24odCxlKXt2YXIgcixuPWUubGVuZ3RoLGk9bmV3IEFycmF5KG4rMSk7Zm9yKHI9MDtyPG47cisrKXt2YXIgYT1lW3JdO2lbcl09W3QqTWF0aC5jb3MoYSksdCpNYXRoLnNpbihhKV19cmV0dXJuIGlbcl09aVswXS5zbGljZSgpLGl9KHQsaSk6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIHMsdSxmPWkubGVuZ3RoLGg9W107ZnVuY3Rpb24gcChlKXtyZXR1cm5bdCpNYXRoLmNvcyhlKSx0Kk1hdGguc2luKGUpXX1mdW5jdGlvbiBkKHQsZSxyKXtyZXR1cm4gYyh0LGUscixwKHQpKX1mdW5jdGlvbiBtKHQpe3JldHVybiBuLm1vZCh0LGYpfWZ1bmN0aW9uIGcodCl7cmV0dXJuIG8odCxbZSxyXSl9dmFyIHY9YShpLChmdW5jdGlvbih0KXtyZXR1cm4gZyh0KT9sKHQsZSk6MS8wfSkpLHk9ZChpW3ZdLGlbbSh2LTEpXSxlKTtmb3IoaC5wdXNoKHkpLHM9dix1PTA7dTxmO3MrKyx1Kyspe3ZhciB4PWlbbShzKV07aWYoIWcoeCkpYnJlYWs7aC5wdXNoKHAoeCkpfXZhciBiPWEoaSwoZnVuY3Rpb24odCl7cmV0dXJuIGcodCk/bCh0LHIpOjEvMH0pKSxfPWQoaVtiXSxpW20oYisxKV0scik7cmV0dXJuIGgucHVzaChfKSxoLnB1c2goWzAsMF0pLGgucHVzaChoWzBdLnNsaWNlKCkpLGh9KHQsZSxyLGkpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIE1hdGguYWJzKHQpPjFlLTEwP3Q6MH1mdW5jdGlvbiBoKHQsZSxyKXtlPWV8fDAscj1yfHwwO2Zvcih2YXIgbj10Lmxlbmd0aCxpPW5ldyBBcnJheShuKSxhPTA7YTxuO2ErKyl7dmFyIG89dFthXTtpW2FdPVtlK29bMF0sci1vWzFdXX1yZXR1cm4gaX1lLmV4cG9ydHM9e2lzUHRJbnNpZGVQb2x5Z29uOmZ1bmN0aW9uKHQsZSxyLG4sYSl7aWYoIW8oZSxuKSlyZXR1cm4hMTt2YXIgcyxsO3JbMF08clsxXT8ocz1yWzBdLGw9clsxXSk6KHM9clsxXSxsPXJbMF0pO3ZhciBjPWkodShzLG5bMF0sblsxXSxhKSksZj1pKHUobCxuWzBdLG5bMV0sYSkpLGg9W3QqTWF0aC5jb3MoZSksdCpNYXRoLnNpbihlKV07cmV0dXJuIGYuY29udGFpbnMoaCkmJiFjLmNvbnRhaW5zKGgpfSxmaW5kUG9seWdvbk9mZnNldDpmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MS8wLGE9MS8wLG89dSh0LGUscixuKSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107aT1NYXRoLm1pbihpLGxbMF0pLGE9TWF0aC5taW4oYSwtbFsxXSl9cmV0dXJuW2ksYV19LGZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hKGUsKGZ1bmN0aW9uKGUpe3ZhciByPXMoZSx0KTtyZXR1cm4gcj4wP3I6MS8wfSkpLGk9bi5tb2QocisxLGUubGVuZ3RoKTtyZXR1cm5bZVtyXSxlW2ldXX0sZmluZEludGVyc2VjdGlvblhZOmMsZmluZFhZYXRMZW5ndGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9LWUqcixhPWUqZSsxLG89MiooZSppLXIpLHM9aSppK3Iqci10KnQsbD1NYXRoLnNxcnQobypvLTQqYSpzKSxjPSgtbytsKS8oMiphKSx1PSgtby1sKS8oMiphKTtyZXR1cm5bW2MsZSpjK2krbl0sW3UsZSp1K2krbl1dfSxjbGFtcFRpbnk6ZixwYXRoUG9seWdvbjpmdW5jdGlvbih0LGUscixuLGksYSl7cmV0dXJuIk0iK2godSh0LGUscixuKSxpLGEpLmpvaW4oIkwiKX0scGF0aFBvbHlnb25Bbm51bHVzOmZ1bmN0aW9uKHQsZSxyLG4saSxhLG8pe3ZhciBzLGw7dDxlPyhzPXQsbD1lKToocz1lLGw9dCk7dmFyIGM9aCh1KHMscixuLGkpLGEsbyk7cmV0dXJuIk0iK2godShsLHIsbixpKSxhLG8pLnJldmVyc2UoKS5qb2luKCJMIikrIk0iK2Muam9pbigiTCIpfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9wb2x5Z29uIjo3ODh9XSw4OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90Q2FsY0RhdGEsaT10KCIuLi8uLi9saWIiKS5jb3VudGVyUmVnZXgsYT10KCIuL3BvbGFyIiksbz10KCIuL2NvbnN0YW50cyIpLHM9by5hdHRyLGw9by5uYW1lLGM9aShsKSx1PXt9O3Vbc109e3ZhbFR5cGU6InN1YnBsb3RpZCIsZGZsdDpsLGVkaXRUeXBlOiJjYWxjIn0sZS5leHBvcnRzPXthdHRyOnMsbmFtZTpsLGlkUm9vdDpsLGlkUmVnZXg6YyxhdHRyUmVnZXg6YyxhdHRyaWJ1dGVzOnUsbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxwbG90OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Ll9mdWxsTGF5b3V0LHI9dC5jYWxjZGF0YSxpPWUuX3N1YnBsb3RzW2xdLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPW4ocixsLHMpLHU9ZVtzXS5fc3VicGxvdDt1fHwodT1hKHQscyksZVtzXS5fc3VicGxvdD11KSx1LnBsb3QoYyxlLHQuX3Byb21pc2VzKX19LGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90c1tsXXx8W10sYT1uLl9oYXMmJm4uX2hhcygiZ2wiKSxvPWUuX2hhcyYmZS5faGFzKCJnbCIpLHM9YSYmIW8sYz0wO2M8aS5sZW5ndGg7YysrKXt2YXIgdT1pW2NdLGY9blt1XS5fc3VicGxvdDtpZighZVt1XSYmZilmb3IodmFyIGggaW4gZi5mcmFtZXdvcmsucmVtb3ZlKCksZi5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl0ucmVtb3ZlKCksZi5jbGlwUGF0aHMpZi5jbGlwUGF0aHNbaF0ucmVtb3ZlKCk7cyYmZi5fc2NlbmUmJihmLl9zY2VuZS5kZXN0cm95KCksZi5fc2NlbmU9bnVsbCl9fSx0b1NWRzp0KCIuLi9jYXJ0ZXNpYW4iKS50b1NWR319LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnRlc2lhbiI6ODQxLCIuLi9nZXRfZGF0YSI6ODY0LCIuL2NvbnN0YW50cyI6ODkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OTQsIi4vbGF5b3V0X2RlZmF1bHRzIjo4OTUsIi4vcG9sYXIiOjg5Nn1dLDg5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLGE9dCgiLi4vZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbD1zKHtjb2xvcjppLmNvbG9yLHNob3dsaW5lOm8oe30saS5zaG93bGluZSx7ZGZsdDohMH0pLGxpbmVjb2xvcjppLmxpbmVjb2xvcixsaW5ld2lkdGg6aS5saW5ld2lkdGgsc2hvd2dyaWQ6byh7fSxpLnNob3dncmlkLHtkZmx0OiEwfSksZ3JpZGNvbG9yOmkuZ3JpZGNvbG9yLGdyaWR3aWR0aDppLmdyaWR3aWR0aH0sInBsb3QiLCJmcm9tLXJvb3QiKSxjPXMoe3RpY2ttb2RlOmkudGlja21vZGUsbnRpY2tzOmkubnRpY2tzLHRpY2swOmkudGljazAsZHRpY2s6aS5kdGljayx0aWNrdmFsczppLnRpY2t2YWxzLHRpY2t0ZXh0OmkudGlja3RleHQsdGlja3M6aS50aWNrcyx0aWNrbGVuOmkudGlja2xlbix0aWNrd2lkdGg6aS50aWNrd2lkdGgsdGlja2NvbG9yOmkudGlja2NvbG9yLHNob3d0aWNrbGFiZWxzOmkuc2hvd3RpY2tsYWJlbHMsc2hvd3RpY2twcmVmaXg6aS5zaG93dGlja3ByZWZpeCx0aWNrcHJlZml4OmkudGlja3ByZWZpeCxzaG93dGlja3N1ZmZpeDppLnNob3d0aWNrc3VmZml4LHRpY2tzdWZmaXg6aS50aWNrc3VmZml4LHNob3dleHBvbmVudDppLnNob3dleHBvbmVudCxleHBvbmVudGZvcm1hdDppLmV4cG9uZW50Zm9ybWF0LG1pbmV4cG9uZW50OmkubWluZXhwb25lbnQsc2VwYXJhdGV0aG91c2FuZHM6aS5zZXBhcmF0ZXRob3VzYW5kcyx0aWNrZm9udDppLnRpY2tmb250LHRpY2thbmdsZTppLnRpY2thbmdsZSx0aWNrZm9ybWF0OmkudGlja2Zvcm1hdCx0aWNrZm9ybWF0c3RvcHM6aS50aWNrZm9ybWF0c3RvcHMsbGF5ZXI6aS5sYXllcn0sInBsb3QiLCJmcm9tLXJvb3QiKSx1PXt2aXNpYmxlOm8oe30saS52aXNpYmxlLHtkZmx0OiEwfSksdHlwZTpvKHt9LGkudHlwZSx7dmFsdWVzOlsiLSIsImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdfSksYXV0b3R5cGVudW1iZXJzOmkuYXV0b3R5cGVudW1iZXJzLGF1dG9yYW5nZTpvKHt9LGkuYXV0b3JhbmdlLHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvemVybyIsIm5vbm5lZ2F0aXZlIiwibm9ybWFsIl0sZGZsdDoidG96ZXJvIixlZGl0VHlwZToiY2FsYyJ9LHJhbmdlOm8oe30saS5yYW5nZSx7aXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19LHt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90IixpbXBsaWVkRWRpdHM6eyJeYXV0b3JhbmdlIjohMX19XSxlZGl0VHlwZToicGxvdCJ9KSxjYXRlZ29yeW9yZGVyOmkuY2F0ZWdvcnlvcmRlcixjYXRlZ29yeWFycmF5OmkuY2F0ZWdvcnlhcnJheSxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2xvY2t3aXNlIiwiY291bnRlcmNsb2Nrd2lzZSJdLGRmbHQ6ImNsb2Nrd2lzZSIsZWRpdFR5cGU6InBsb3QifSx0aXRsZTp7dGV4dDpvKHt9LGkudGl0bGUudGV4dCx7ZWRpdFR5cGU6InBsb3QiLGRmbHQ6IiJ9KSxmb250Om8oe30saS50aXRsZS5mb250LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGhvdmVyZm9ybWF0OmkuaG92ZXJmb3JtYXQsdWlyZXZpc2lvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9LGVkaXRUeXBlOiJjYWxjIixfZGVwcmVjYXRlZDp7dGl0bGU6aS5fZGVwcmVjYXRlZC50aXRsZSx0aXRsZWZvbnQ6aS5fZGVwcmVjYXRlZC50aXRsZWZvbnR9fTtvKHUsbCxjKTt2YXIgZj17dmlzaWJsZTpvKHt9LGkudmlzaWJsZSx7ZGZsdDohMH0pLHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJjYXRlZ29yeSJdLGRmbHQ6Ii0iLGVkaXRUeXBlOiJjYWxjIixfbm9UZW1wbGF0aW5nOiEwfSxhdXRvdHlwZW51bWJlcnM6aS5hdXRvdHlwZW51bWJlcnMsY2F0ZWdvcnlvcmRlcjppLmNhdGVnb3J5b3JkZXIsY2F0ZWdvcnlhcnJheTppLmNhdGVnb3J5YXJyYXksdGhldGF1bml0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYW5zIiwiZGVncmVlcyJdLGRmbHQ6ImRlZ3JlZXMiLGVkaXRUeXBlOiJjYWxjIn0scGVyaW9kOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIixtaW46MH0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjb3VudGVyY2xvY2t3aXNlIiwiY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToiYW5nbGUiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJmb3JtYXQ6aS5ob3ZlcmZvcm1hdCx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifTtvKGYsbCxjKSxlLmV4cG9ydHM9e2RvbWFpbjphKHtuYW1lOiJwb2xhciIsZWRpdFR5cGU6InBsb3QifSksc2VjdG9yOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9XSxkZmx0OlswLDM2MF0sZWRpdFR5cGU6InBsb3QifSxob2xlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGJnY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToicGxvdCIsZGZsdDpuLmJhY2tncm91bmR9LHJhZGlhbGF4aXM6dSxhbmd1bGFyYXhpczpmLGdyaWRzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2lyY3VsYXIiLCJsaW5lYXIiXSxkZmx0OiJjaXJjdWxhciIsZWRpdFR5cGU6InBsb3QifSx1aXJldmlzaW9uOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJub25lIn0sZWRpdFR5cGU6ImNhbGMifX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uL2RvbWFpbiI6ODU1fV0sODk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vZ2V0X2RhdGEiKS5nZXRTdWJwbG90RGF0YSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksYz10KCIuLi9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpLGY9dCgiLi4vY2FydGVzaWFuL2NhdGVnb3J5X29yZGVyX2RlZmF1bHRzIiksaD10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIikscD10KCIuLi9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGQ9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLG09dCgiLi9zZXRfY29udmVydCIpLGc9dCgiLi9jb25zdGFudHMiKSx2PWcuYXhpc05hbWVzO2Z1bmN0aW9uIHkodCxlLHIsbyl7dmFyIHA9cigiYmdjb2xvciIpO28uYmdDb2xvcj1pLmNvbWJpbmUocCxvLnBhcGVyX2JnY29sb3IpO3ZhciB5PXIoInNlY3RvciIpO3IoImhvbGUiKTt2YXIgYixfPXMoby5mdWxsRGF0YSxnLm5hbWUsby5pZCksdz1vLmxheW91dE91dDtmdW5jdGlvbiBUKHQsZSl7cmV0dXJuIHIoYisiLiIrdCxlKX1mb3IodmFyIGs9MDtrPHYubGVuZ3RoO2srKyl7Yj12W2tdLG4uaXNQbGFpbk9iamVjdCh0W2JdKXx8KHRbYl09e30pO3ZhciBBPXRbYl0sTT1hLm5ld0NvbnRhaW5lcihlLGIpO00uX2lkPU0uX25hbWU9YixNLl9hdHRyPW8uaWQrIi4iK2IsTS5fdHJhY2VJbmRpY2VzPV8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fZXhwYW5kZWRJbmRleH0pKTt2YXIgUz1nLmF4aXNOYW1lMmRhdGFBcnJheVtiXSxFPXgoQSxNLFQsXyxTLG8pO2YoQSxNLFQse2F4RGF0YTpfLGRhdGFBdHRyOlN9KTt2YXIgTCxDLFA9VCgidmlzaWJsZSIpO3N3aXRjaChtKE0sZSx3KSxUKCJ1aXJldmlzaW9uIixlLnVpcmV2aXNpb24pLFAmJihDPShMPVQoImNvbG9yIikpPT09QS5jb2xvcj9MOm8uZm9udC5jb2xvciksTS5fbT0xLGIpe2Nhc2UicmFkaWFsYXhpcyI6dmFyIEk9VCgiYXV0b3JhbmdlIiwhTS5pc1ZhbGlkUmFuZ2UoQS5yYW5nZSkpO0EuYXV0b3JhbmdlPUksIUl8fCJsaW5lYXIiIT09RSYmIi0iIT09RXx8VCgicmFuZ2Vtb2RlIiksInJldmVyc2VkIj09PUkmJihNLl9tPS0xKSxUKCJyYW5nZSIpLE0uY2xlYW5SYW5nZSgicmFuZ2UiLHtkZmx0UmFuZ2U6WzAsMV19KSxQJiYoVCgic2lkZSIpLFQoImFuZ2xlIix5WzBdKSxUKCJ0aXRsZS50ZXh0Iiksbi5jb2VyY2VGb250KFQsInRpdGxlLmZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm4uYmlnRm9udChvLmZvbnQuc2l6ZSksY29sb3I6Q30pKTticmVhaztjYXNlImFuZ3VsYXJheGlzIjppZigiZGF0ZSI9PT1FKXtuLmxvZygiUG9sYXIgcGxvdHMgZG8gbm90IHN1cHBvcnQgZGF0ZSBhbmd1bGFyIGF4ZXMgeWV0LiIpO2Zvcih2YXIgTz0wO088Xy5sZW5ndGg7TysrKV9bT10udmlzaWJsZT0hMTtFPUEudHlwZT1NLnR5cGU9ImxpbmVhciJ9VCgibGluZWFyIj09PUU/InRoZXRhdW5pdCI6InBlcmlvZCIpO3ZhciB6PVQoImRpcmVjdGlvbiIpO1QoInJvdGF0aW9uIix7Y291bnRlcmNsb2Nrd2lzZTowLGNsb2Nrd2lzZTo5MH1bel0pfWlmKFApbChBLE0sVCxNLnR5cGUpLHUoQSxNLFQsTS50eXBlLHt0aWNrU3VmZml4RGZsdDoiZGVncmVlcyI9PT1NLnRoZXRhdW5pdD8iXHhiMCI6dm9pZCAwfSksYyhBLE0sVCx7b3V0ZXJUaWNrczohMH0pLFQoInNob3d0aWNrbGFiZWxzIikmJihuLmNvZXJjZUZvbnQoVCwidGlja2ZvbnQiLHtmYW1pbHk6by5mb250LmZhbWlseSxzaXplOm8uZm9udC5zaXplLGNvbG9yOkN9KSxUKCJ0aWNrYW5nbGUiKSxUKCJ0aWNrZm9ybWF0IikpLGgoQSxNLFQse2RmbHRDb2xvcjpMLGJnQ29sb3I6by5iZ0NvbG9yLGJsZW5kOjYwLHNob3dMaW5lOiEwLHNob3dHcmlkOiEwLG5vWmVyb0xpbmU6ITAsYXR0cmlidXRlczpkW2JdfSksVCgibGF5ZXIiKTsiY2F0ZWdvcnkiIT09RSYmVCgiaG92ZXJmb3JtYXQiKSxNLl9pbnB1dD1BfSJjYXRlZ29yeSI9PT1lLmFuZ3VsYXJheGlzLnR5cGUmJnIoImdyaWRzaGFwZSIpfWZ1bmN0aW9uIHgodCxlLHIsbixpLGEpe3ZhciBvPXIoImF1dG90eXBlbnVtYmVycyIsYS5hdXRvdHlwZW51bWJlcnNEZmx0KTtpZigiLSI9PT1yKCJ0eXBlIikpe2Zvcih2YXIgcyxsPTA7bDxuLmxlbmd0aDtsKyspaWYobltsXS52aXNpYmxlKXtzPW5bbF07YnJlYWt9cyYmc1tpXSYmKGUudHlwZT1wKHNbaV0sImdyZWdvcmlhbiIse25vTXVsdGlDYXRlZ29yeTohMCxhdXRvdHlwZW51bWJlcnM6b30pKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnQudHlwZT1lLnR5cGV9cmV0dXJuIGUudHlwZX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe28odCxlLHIse3R5cGU6Zy5uYW1lLGF0dHJpYnV0ZXM6ZCxoYW5kbGVEZWZhdWx0czp5LGZvbnQ6ZS5mb250LGF1dG90eXBlbnVtYmVyc0RmbHQ6ZS5hdXRvdHlwZW51bWJlcnMscGFwZXJfYmdjb2xvcjplLnBhcGVyX2JnY29sb3IsZnVsbERhdGE6cixsYXlvdXRPdXQ6ZX0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjgsIi4uL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIjo4NDQsIi4uL2NhcnRlc2lhbi90aWNrX2xhYmVsX2RlZmF1bHRzIjo4NDksIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiOjg1MCwiLi4vY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vZ2V0X2RhdGEiOjg2NCwiLi4vc3VicGxvdF9kZWZhdWx0cyI6ODk4LCIuL2NvbnN0YW50cyI6ODkxLCIuL2xheW91dF9hdHRyaWJ1dGVzIjo4OTQsIi4vc2V0X2NvbnZlcnQiOjg5N31dLDg5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clJvdGF0ZSxsPW8uc3RyVHJhbnNsYXRlLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksZj10KCIuLi9wbG90cyIpLGg9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxwPXQoIi4uL2NhcnRlc2lhbi9zZXRfY29udmVydCIpLGQ9dCgiLi9zZXRfY29udmVydCIpLG09dCgiLi4vY2FydGVzaWFuL2F1dG9yYW5nZSIpLmRvQXV0b1JhbmdlLGc9dCgiLi4vY2FydGVzaWFuL2RyYWdib3giKSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSx5PXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSx4PXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksYj10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCxfPXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLHc9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LFQ9dCgiLi4vLi4vbGliL3NldGN1cnNvciIpLGs9dCgiLi4vLi4vbGliL2NsZWFyX2dsX2NhbnZhc2VzIiksQT10KCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyIpLnJlZHJhd1JlZ2xUcmFjZXMsTT10KCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50IikuTUlEX1NISUZULFM9dCgiLi9jb25zdGFudHMiKSxFPXQoIi4vaGVscGVycyIpLEw9by5fLEM9by5tb2QsUD1vLmRlZzJyYWQsST1vLnJhZDJkZWc7ZnVuY3Rpb24gTyh0LGUpe3RoaXMuaWQ9ZSx0aGlzLmdkPXQsdGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPW51bGwsdGhpcy52YW5nbGVzPW51bGwsdGhpcy5yYWRpYWxBeGlzQW5nbGU9bnVsbCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fSx0aGlzLmNsaXBQYXRocz17fSx0aGlzLmNsaXBJZHM9e30sdGhpcy52aWV3SW5pdGlhbD17fTt2YXIgcj10Ll9mdWxsTGF5b3V0LG49ImNsaXAiK3IuX3VpZCtlO3RoaXMuY2xpcElkcy5mb3JUcmFjZXM9bisiLWZvci10cmFjZXMiLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcz1yLl9jbGlwcy5hcHBlbmQoImNsaXBQYXRoIikuYXR0cigiaWQiLHRoaXMuY2xpcElkcy5mb3JUcmFjZXMpLHRoaXMuY2xpcFBhdGhzLmZvclRyYWNlcy5hcHBlbmQoInBhdGgiKSx0aGlzLmZyYW1ld29yaz1yLl9wb2xhcmxheWVyLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixlKSx0aGlzLnJhZGlhbFRpY2tMYXlvdXQ9bnVsbCx0aGlzLmFuZ3VsYXJUaWNrTGF5b3V0PW51bGx9dmFyIHo9Ty5wcm90b3R5cGU7ZnVuY3Rpb24gRCh0KXt2YXIgZT10LnRpY2tzK1N0cmluZyh0LnRpY2tsZW4pK1N0cmluZyh0LnNob3d0aWNrbGFiZWxzKTtyZXR1cm4ic2lkZSJpbiB0JiYoZSs9dC5zaWRlKSxlfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gZVtvLmZpbmRJbmRleE9mTWluKGUsKGZ1bmN0aW9uKGUpe3JldHVybiBvLmFuZ2xlRGlzdCh0LGUpfSkpXX1mdW5jdGlvbiBGKHQsZSxyKXtyZXR1cm4gZT8odC5hdHRyKCJkaXNwbGF5IixudWxsKSx0LmF0dHIocikpOnQmJnQuYXR0cigiZGlzcGxheSIsIm5vbmUiKSx0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgTyh0LGUpfSx6LnBsb3Q9ZnVuY3Rpb24odCxlKXt2YXIgcj1lW3RoaXMuaWRdO3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7aWYoITE9PT10W25dWzBdLnRyYWNlLmNsaXBvbmF4aXMpe3RoaXMuX2hhc0NsaXBPbkF4aXNGYWxzZT0hMDticmVha319dGhpcy51cGRhdGVMYXllcnMoZSxyKSx0aGlzLnVwZGF0ZUxheW91dChlLHIpLGYuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ2QsdGhpcyx0LHIpLHRoaXMudXBkYXRlRngoZSxyKX0sei51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxheWVycyxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1TLmxheWVyTmFtZXMscz1vLmluZGV4T2YoImZyb250cGxvdCIpLGw9by5zbGljZSgwLHMpLGM9ImJlbG93IHRyYWNlcyI9PT1hLmxheWVyLHU9ImJlbG93IHRyYWNlcyI9PT1pLmxheWVyO2MmJmwucHVzaCgiYW5ndWxhci1saW5lIiksdSYmbC5wdXNoKCJyYWRpYWwtbGluZSIpLGMmJmwucHVzaCgiYW5ndWxhci1heGlzIiksdSYmbC5wdXNoKCJyYWRpYWwtYXhpcyIpLGwucHVzaCgiZnJvbnRwbG90IiksY3x8bC5wdXNoKCJhbmd1bGFyLWxpbmUiKSx1fHxsLnB1c2goInJhZGlhbC1saW5lIiksY3x8bC5wdXNoKCJhbmd1bGFyLWF4aXMiKSx1fHxsLnB1c2goInJhZGlhbC1heGlzIik7dmFyIGY9dGhpcy5mcmFtZXdvcmsuc2VsZWN0QWxsKCIucG9sYXJzdWJsYXllciIpLmRhdGEobCxTdHJpbmcpO2YuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJwb2xhcnN1YmxheWVyICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1yW3RdPW4uc2VsZWN0KHRoaXMpO3N3aXRjaCh0KXtjYXNlImZyb250cGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJiYXJsYXllciIsITApLGUuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk7YnJlYWs7Y2FzZSJiYWNrcGxvdCI6ZS5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApO2JyZWFrO2Nhc2UicGxvdGJnIjpyLmJnPWUuYXBwZW5kKCJwYXRoIik7YnJlYWs7Y2FzZSJyYWRpYWwtZ3JpZCI6Y2FzZSJhbmd1bGFyLWdyaWQiOmUuc3R5bGUoImZpbGwiLCJub25lIik7YnJlYWs7Y2FzZSJyYWRpYWwtbGluZSI6ZS5hcHBlbmQoImxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKTticmVhaztjYXNlImFuZ3VsYXItbGluZSI6ZS5hcHBlbmQoInBhdGgiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX19KSksZi5vcmRlcigpfSx6LnVwZGF0ZUxheW91dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGF5ZXJzLG49dC5fc2l6ZSxpPWUucmFkaWFsYXhpcyxhPWUuYW5ndWxhcmF4aXMsbz1lLmRvbWFpbi54LHM9ZS5kb21haW4ueTt0aGlzLnhPZmZzZXQ9bi5sK24udypvWzBdLHRoaXMueU9mZnNldD1uLnQrbi5oKigxLXNbMV0pO3ZhciBmPXRoaXMueExlbmd0aD1uLncqKG9bMV0tb1swXSksaD10aGlzLnlMZW5ndGg9bi5oKihzWzFdLXNbMF0pLHA9ZS5zZWN0b3I7dGhpcy5zZWN0b3JJblJhZD1wLm1hcChQKTt2YXIgZCxtLGcsdix5LHg9dGhpcy5zZWN0b3JCQm94PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLGE9dFswXSxvPXRbMV0tYSxzPUMoYSwzNjApLGw9cytvLGM9TWF0aC5jb3MoUChzKSksdT1NYXRoLnNpbihQKHMpKSxmPU1hdGguY29zKFAobCkpLGg9TWF0aC5zaW4oUChsKSk7aT1zPD05MCYmbD49OTB8fHM+OTAmJmw+PTQ1MD8xOnU8PTAmJmg8PTA/MDpNYXRoLm1heCh1LGgpO2U9czw9MTgwJiZsPj0xODB8fHM+MTgwJiZsPj01NDA/LTE6Yz49MCYmZj49MD8wOk1hdGgubWluKGMsZik7cj1zPD0yNzAmJmw+PTI3MHx8cz4yNzAmJmw+PTYzMD8tMTp1Pj0wJiZoPj0wPzA6TWF0aC5taW4odSxoKTtuPWw+PTM2MD8xOmM8PTAmJmY8PTA/MDpNYXRoLm1heChjLGYpO3JldHVybltlLHIsbixpXX0ocCksYj14WzJdLXhbMF0sXz14WzNdLXhbMV0sdz1oL2YsVD1NYXRoLmFicyhfL2IpO3c+VD8oZD1mLHk9KGgtKG09ZipUKSkvbi5oLzIsZz1bb1swXSxvWzFdXSx2PVtzWzBdK3ksc1sxXS15XSk6KG09aCx5PShmLShkPWgvVCkpL24udy8yLGc9W29bMF0reSxvWzFdLXldLHY9W3NbMF0sc1sxXV0pLHRoaXMueExlbmd0aDI9ZCx0aGlzLnlMZW5ndGgyPW0sdGhpcy54RG9tYWluMj1nLHRoaXMueURvbWFpbjI9djt2YXIgaz10aGlzLnhPZmZzZXQyPW4ubCtuLncqZ1swXSxBPXRoaXMueU9mZnNldDI9bi50K24uaCooMS12WzFdKSxNPXRoaXMucmFkaXVzPWQvYixTPXRoaXMuaW5uZXJSYWRpdXM9ZS5ob2xlKk0sRT10aGlzLmN4PWstTSp4WzBdLEw9dGhpcy5jeT1BK00qeFszXSxJPXRoaXMuY3h4PUUtayxPPXRoaXMuY3l5PUwtQTt0aGlzLnJhZGlhbEF4aXM9dGhpcy5tb2NrQXhpcyh0LGUsaSx7X2lkOiJ4IixzaWRlOntjb3VudGVyY2xvY2t3aXNlOiJ0b3AiLGNsb2Nrd2lzZToiYm90dG9tIn1baS5zaWRlXSxfcmVhbFNpZGU6aS5zaWRlLGRvbWFpbjpbUy9uLncsTS9uLnddfSksdGhpcy5hbmd1bGFyQXhpcz10aGlzLm1vY2tBeGlzKHQsZSxhLHtzaWRlOiJyaWdodCIsZG9tYWluOlswLE1hdGguUEldLGF1dG9yYW5nZTohMX0pLHRoaXMuZG9BdXRvUmFuZ2UodCxlKSx0aGlzLnVwZGF0ZUFuZ3VsYXJBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzKHQsZSksdGhpcy51cGRhdGVSYWRpYWxBeGlzVGl0bGUodCxlKSx0aGlzLnhheGlzPXRoaXMubW9ja0NhcnRlc2lhbkF4aXModCxlLHtfaWQ6IngiLGRvbWFpbjpnfSksdGhpcy55YXhpcz10aGlzLm1vY2tDYXJ0ZXNpYW5BeGlzKHQsZSx7X2lkOiJ5Iixkb21haW46dn0pO3ZhciB6PXRoaXMucGF0aFN1YnBsb3QoKTt0aGlzLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKEksTykpLHIuZnJvbnRwbG90LmF0dHIoInRyYW5zZm9ybSIsbChrLEEpKS5jYWxsKHUuc2V0Q2xpcFVybCx0aGlzLl9oYXNDbGlwT25BeGlzRmFsc2U/bnVsbDp0aGlzLmNsaXBJZHMuZm9yVHJhY2VzLHRoaXMuZ2QpLHIuYmcuYXR0cigiZCIseikuYXR0cigidHJhbnNmb3JtIixsKEUsTCkpLmNhbGwoYy5maWxsLGUuYmdjb2xvcil9LHoubW9ja0F4aXM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9by5leHRlbmRGbGF0KHt9LHIsbik7cmV0dXJuIGQoaSxlLHQpLGl9LHoubW9ja0NhcnRlc2lhbkF4aXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMsaT1yLl9pZCxhPW8uZXh0ZW5kRmxhdCh7dHlwZToibGluZWFyIn0scik7cChhLHQpO3ZhciBzPXt4OlswLDJdLHk6WzEsM119O3JldHVybiBhLnNldFJhbmdlPWZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWN0b3JCQm94LHI9c1tpXSxvPW4ucmFkaWFsQXhpcy5fcmwsbD0ob1sxXS1vWzBdKS8oMS1lLmhvbGUpO2EucmFuZ2U9W3RbclswXV0qbCx0W3JbMV1dKmxdfSxhLmlzUHRXaXRoaW5SYW5nZT0ieCI9PT1pP2Z1bmN0aW9uKHQpe3JldHVybiBuLmlzUHRJbnNpZGUodCl9OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGEuc2V0UmFuZ2UoKSxhLnNldFNjYWxlKCksYX0sei5kb0F1dG9SYW5nZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2Qsbj10aGlzLnJhZGlhbEF4aXMsaT1lLnJhZGlhbGF4aXM7bi5zZXRTY2FsZSgpLG0ocixuKTt2YXIgYT1uLnJhbmdlO2kucmFuZ2U9YS5zbGljZSgpLGkuX2lucHV0LnJhbmdlPWEuc2xpY2UoKSxuLl9ybD1bbi5yMmwoYVswXSxudWxsLCJncmVnb3JpYW4iKSxuLnIybChhWzFdLG51bGwsImdyZWdvcmlhbiIpXX0sei51cGRhdGVSYWRpYWxBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5yYWRpYWxheGlzLG09QyhlLnNlY3RvclswXSwzNjApLGc9ci5yYWRpYWxBeGlzLHY9dTxhO3IuZmlsbFZpZXdJbml0aWFsS2V5KCJyYWRpYWxheGlzLmFuZ2xlIixkLmFuZ2xlKSxyLmZpbGxWaWV3SW5pdGlhbEtleSgicmFkaWFsYXhpcy5yYW5nZSIsZy5yYW5nZS5zbGljZSgpKSxnLnNldEdlb21ldHJ5KCksImF1dG8iPT09Zy50aWNrYW5nbGUmJm0+OTAmJm08PTI3MCYmKGcudGlja2FuZ2xlPTE4MCk7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIGwoZy5sMnAodC54KSt1LDApfSx4PUQoZCk7aWYoci5yYWRpYWxUaWNrTGF5b3V0IT09eCYmKGlbInJhZGlhbC1heGlzIl0uc2VsZWN0QWxsKCIueHRpY2siKS5yZW1vdmUoKSxyLnJhZGlhbFRpY2tMYXlvdXQ9eCksdil7Zy5zZXRTY2FsZSgpO3ZhciBiPWguY2FsY1RpY2tzKGcpLF89aC5jbGlwRW5kcyhnLGIpLHc9aC5nZXRUaWNrU2lnbnMoZylbMl07aC5kcmF3VGlja3MobixnLHt2YWxzOmIsbGF5ZXI6aVsicmFkaWFsLWF4aXMiXSxwYXRoOmgubWFrZVRpY2tQYXRoKGcsMCx3KSx0cmFuc0ZuOnksY3Jpc3A6ITF9KSxoLmRyYXdHcmlkKG4sZyx7dmFsczpfLGxheWVyOmlbInJhZGlhbC1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXtyZXR1cm4gci5wYXRoQXJjKGcucjJwKHQueCkrdSl9LHRyYW5zRm46by5ub29wLGNyaXNwOiExfSksaC5kcmF3TGFiZWxzKG4sZyx7dmFsczpiLGxheWVyOmlbInJhZGlhbC1heGlzIl0sdHJhbnNGbjp5LGxhYmVsRm5zOmgubWFrZUxhYmVsRm5zKGcsMCl9KX12YXIgVD1yLnJhZGlhbEF4aXNBbmdsZT1yLnZhbmdsZXM/SShSKFAoZC5hbmdsZSksci52YW5nbGVzKSk6ZC5hbmdsZSxrPWwoZixwKSxBPWsrcygtVCk7RihpWyJyYWRpYWwtYXhpcyJdLHYmJihkLnNob3d0aWNrbGFiZWxzfHxkLnRpY2tzKSx7dHJhbnNmb3JtOkF9KSxGKGlbInJhZGlhbC1ncmlkIl0sdiYmZC5zaG93Z3JpZCx7dHJhbnNmb3JtOmt9KSxGKGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIiksdiYmZC5zaG93bGluZSx7eDE6dSx5MTowLHgyOmEseTI6MCx0cmFuc2Zvcm06QX0pLmF0dHIoInN0cm9rZS13aWR0aCIsZC5saW5ld2lkdGgpLmNhbGwoYy5zdHJva2UsZC5saW5lY29sb3IpfSx6LnVwZGF0ZVJhZGlhbEF4aXNUaXRsZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5nZCxpPXRoaXMucmFkaXVzLGE9dGhpcy5jeCxvPXRoaXMuY3kscz1lLnJhZGlhbGF4aXMsbD10aGlzLmlkKyJ0aXRsZSIsYz12b2lkIDAhPT1yP3I6dGhpcy5yYWRpYWxBeGlzQW5nbGUsZj1QKGMpLGg9TWF0aC5jb3MoZikscD1NYXRoLnNpbihmKSxkPTA7aWYocy50aXRsZSl7dmFyIG09dS5iQm94KHRoaXMubGF5ZXJzWyJyYWRpYWwtYXhpcyJdLm5vZGUoKSkuaGVpZ2h0LGc9cy50aXRsZS5mb250LnNpemU7ZD0iY291bnRlcmNsb2Nrd2lzZSI9PT1zLnNpZGU/LW0tLjQqZzptKy44Kmd9dGhpcy5sYXllcnNbInJhZGlhbC1heGlzLXRpdGxlIl09eC5kcmF3KG4sbCx7cHJvcENvbnRhaW5lcjpzLHByb3BOYW1lOnRoaXMuaWQrIi5yYWRpYWxheGlzLnRpdGxlIixwbGFjZWhvbGRlcjpMKG4sIkNsaWNrIHRvIGVudGVyIHJhZGlhbCBheGlzIHRpdGxlIiksYXR0cmlidXRlczp7eDphK2kvMipoK2QqcCx5Om8taS8yKnArZCpoLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9LHRyYW5zZm9ybTp7cm90YXRlOi1jfX0pfSx6LnVwZGF0ZUFuZ3VsYXJBeGlzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyxuPXIuZ2QsaT1yLmxheWVycyxhPXIucmFkaXVzLHU9ci5pbm5lclJhZGl1cyxmPXIuY3gscD1yLmN5LGQ9ZS5hbmd1bGFyYXhpcyxtPXIuYW5ndWxhckF4aXM7ci5maWxsVmlld0luaXRpYWxLZXkoImFuZ3VsYXJheGlzLnJvdGF0aW9uIixkLnJvdGF0aW9uKSxtLnNldEdlb21ldHJ5KCksbS5zZXRTY2FsZSgpO3ZhciBnPWZ1bmN0aW9uKHQpe3JldHVybiBtLnQyZyh0LngpfTsibGluZWFyIj09PW0udHlwZSYmInJhZGlhbnMiPT09bS50aGV0YXVuaXQmJihtLnRpY2swPUkobS50aWNrMCksbS5kdGljaz1JKG0uZHRpY2spKTt2YXIgdj1mdW5jdGlvbih0KXtyZXR1cm4gbChmK2EqTWF0aC5jb3ModCkscC1hKk1hdGguc2luKHQpKX0seT1oLm1ha2VMYWJlbEZucyhtLDApLmxhYmVsU3RhbmRvZmYseD17eEZuOmZ1bmN0aW9uKHQpe3ZhciBlPWcodCk7cmV0dXJuIE1hdGguY29zKGUpKnl9LHlGbjpmdW5jdGlvbih0KXt2YXIgZT1nKHQpLHI9TWF0aC5zaW4oZSk+MD8uMjoxO3JldHVybi1NYXRoLnNpbihlKSooeSt0LmZvbnRTaXplKnIpK01hdGguYWJzKE1hdGguY29zKGUpKSoodC5mb250U2l6ZSpNKX0sYW5jaG9yRm46ZnVuY3Rpb24odCl7dmFyIGU9Zyh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0saGVpZ2h0Rm46ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWcodCk7cmV0dXJuLS41KigxK01hdGguc2luKG4pKSpyfX0sYj1EKGQpO3IuYW5ndWxhclRpY2tMYXlvdXQhPT1iJiYoaVsiYW5ndWxhci1heGlzIl0uc2VsZWN0QWxsKCIuIittLl9pZCsidGljayIpLnJlbW92ZSgpLHIuYW5ndWxhclRpY2tMYXlvdXQ9Yik7dmFyIF8sdz1oLmNhbGNUaWNrcyhtKTtpZigibGluZWFyIj09PWUuZ3JpZHNoYXBlPyhfPXcubWFwKGcpLG8uYW5nbGVEZWx0YShfWzBdLF9bMV0pPDAmJihfPV8uc2xpY2UoKS5yZXZlcnNlKCkpKTpfPW51bGwsci52YW5nbGVzPV8sImNhdGVnb3J5Ij09PW0udHlwZSYmKHc9dy5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBvLmlzQW5nbGVJbnNpZGVTZWN0b3IoZyh0KSxyLnNlY3RvckluUmFkKX0pKSksbS52aXNpYmxlKXt2YXIgVD0iaW5zaWRlIj09PW0udGlja3M/LTE6MSxrPShtLmxpbmV3aWR0aHx8MSkvMjtoLmRyYXdUaWNrcyhuLG0se3ZhbHM6dyxsYXllcjppWyJhbmd1bGFyLWF4aXMiXSxwYXRoOiJNIitUKmsrIiwwaCIrVCptLnRpY2tsZW4sdHJhbnNGbjpmdW5jdGlvbih0KXt2YXIgZT1nKHQpO3JldHVybiB2KGUpK3MoLUkoZSkpfSxjcmlzcDohMX0pLGguZHJhd0dyaWQobixtLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1ncmlkIl0scGF0aDpmdW5jdGlvbih0KXt2YXIgZT1nKHQpLHI9TWF0aC5jb3MoZSksbj1NYXRoLnNpbihlKTtyZXR1cm4iTSIrW2YrdSpyLHAtdSpuXSsiTCIrW2YrYSpyLHAtYSpuXX0sdHJhbnNGbjpvLm5vb3AsY3Jpc3A6ITF9KSxoLmRyYXdMYWJlbHMobixtLHt2YWxzOncsbGF5ZXI6aVsiYW5ndWxhci1heGlzIl0scmVwb3NpdGlvbk9uVXBkYXRlOiEwLHRyYW5zRm46ZnVuY3Rpb24odCl7cmV0dXJuIHYoZyh0KSl9LGxhYmVsRm5zOnh9KX1GKGlbImFuZ3VsYXItbGluZSJdLnNlbGVjdCgicGF0aCIpLGQuc2hvd2xpbmUse2Q6ci5wYXRoU3VicGxvdCgpLHRyYW5zZm9ybTpsKGYscCl9KS5hdHRyKCJzdHJva2Utd2lkdGgiLGQubGluZXdpZHRoKS5jYWxsKGMuc3Ryb2tlLGQubGluZWNvbG9yKX0sei51cGRhdGVGeD1mdW5jdGlvbih0LGUpe3RoaXMuZ2QuX2NvbnRleHQuc3RhdGljUGxvdHx8KHRoaXMudXBkYXRlQW5ndWxhckRyYWcodCksdGhpcy51cGRhdGVSYWRpYWxEcmFnKHQsZSwwKSx0aGlzLnVwZGF0ZVJhZGlhbERyYWcodCxlLDEpLHRoaXMudXBkYXRlTWFpbkRyYWcodCkpfSx6LnVwZGF0ZU1haW5EcmFnPWZ1bmN0aW9uKHQpe3ZhciBlLHIscz10aGlzLGM9cy5nZCx1PXMubGF5ZXJzLGY9dC5fem9vbWxheWVyLGg9Uy5NSU5aT09NLHA9Uy5PRkZFREdFLGQ9cy5yYWRpdXMsbT1zLmlubmVyUmFkaXVzLHg9cy5jeCxUPXMuY3ksaz1zLmN4eCxBPXMuY3l5LE09cy5zZWN0b3JJblJhZCxMPXMudmFuZ2xlcyxDPXMucmFkaWFsQXhpcyxQPUUuY2xhbXBUaW55LEk9RS5maW5kWFlhdExlbmd0aCxPPUUuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyx6PVMuY29ybmVySGFsZldpZHRoLEQ9Uy5jb3JuZXJMZW4vMixSPWcubWFrZURyYWdnZXIodSwicGF0aCIsIm1haW5kcmFnIiwiY3Jvc3NoYWlyIik7bi5zZWxlY3QoUikuYXR0cigiZCIscy5wYXRoU3VicGxvdCgpKS5hdHRyKCJ0cmFuc2Zvcm0iLGwoeCxUKSk7dmFyIEYsQixOLGosVSxWLEgscSxHLFk9e2VsZW1lbnQ6UixnZDpjLHN1YnBsb3Q6cy5pZCxwbG90aW5mbzp7aWQ6cy5pZCx4YXhpczpzLnhheGlzLHlheGlzOnMueWF4aXN9LHhheGVzOltzLnhheGlzXSx5YXhlczpbcy55YXhpc119O2Z1bmN0aW9uIFcodCxlKXtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfWZ1bmN0aW9uIFgodCxlKXtyZXR1cm4gVyh0LWssZS1BKX1mdW5jdGlvbiBaKHQsZSl7cmV0dXJuIE1hdGguYXRhbjIoQS1lLHQtayl9ZnVuY3Rpb24gSih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLHQqTWF0aC5zaW4oLWUpXX1mdW5jdGlvbiBLKHQsZSl7aWYoMD09PXQpcmV0dXJuIHMucGF0aFNlY3RvcigyKnopO3ZhciByPUQvdCxuPWUtcixpPWUrcixhPU1hdGgubWF4KDAsTWF0aC5taW4odCxkKSksbz1hLXosbD1hK3o7cmV0dXJuIk0iK0oobyxuKSsiQSIrW28sb10rIiAwLDAsMCAiK0oobyxpKSsiTCIrSihsLGkpKyJBIitbbCxsXSsiIDAsMCwxICIrSihsLG4pKyJaIn1mdW5jdGlvbiBRKHQsZSxyKXtpZigwPT09dClyZXR1cm4gcy5wYXRoU2VjdG9yKDIqeik7dmFyIG4saSxhPUoodCxlKSxvPUoodCxyKSxsPVAoKGFbMF0rb1swXSkvMiksYz1QKChhWzFdK29bMV0pLzIpO2lmKGwmJmMpe3ZhciB1PWMvbCxmPS0xL3UsaD1JKHosdSxsLGMpO249SShELGYsaFswXVswXSxoWzBdWzFdKSxpPUkoRCxmLGhbMV1bMF0saFsxXVsxXSl9ZWxzZXt2YXIgcCxkO2M/KHA9RCxkPXopOihwPXosZD1EKSxuPVtbbC1wLGMtZF0sW2wrcCxjLWRdXSxpPVtbbC1wLGMrZF0sW2wrcCxjK2RdXX1yZXR1cm4iTSIrbi5qb2luKCJMIikrIkwiK2kucmV2ZXJzZSgpLmpvaW4oIkwiKSsiWiJ9ZnVuY3Rpb24gJCh0LGUpe3JldHVybiBlPU1hdGgubWF4KE1hdGgubWluKGUsZCksbSksdDxwP3Q9MDpkLXQ8cD90PWQ6ZTxwP2U9MDpkLWU8cCYmKGU9ZCksTWF0aC5hYnMoZS10KT5oPyh0PGU/KE49dCxqPWUpOihOPWUsaj10KSwhMCk6KE49bnVsbCxqPW51bGwsITEpfWZ1bmN0aW9uIHR0KHQsZSl7dD10fHxVLGU9ZXx8Ik0wLDBaIixxLmF0dHIoImQiLHQpLEcuYXR0cigiZCIsZSksZy50cmFuc2l0aW9uWm9vbWJveChxLEcsVixIKSxWPSEwO3ZhciByPXt9O2F0KHIpLGMuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixyKX1mdW5jdGlvbiBldCh0LG4pe3ZhciBpLGEsbz1GKyh0Kj1lKSxsPUIrKG4qPXIpLGM9WChGLEIpLHU9TWF0aC5taW4oWChvLGwpLGQpLGY9WihGLEIpOyQoYyx1KSYmKGk9VStzLnBhdGhTZWN0b3IoaiksTiYmKGkrPXMucGF0aFNlY3RvcihOKSksYT1LKE4sZikrSyhqLGYpKSx0dChpLGEpfWZ1bmN0aW9uIHJ0KHQsZSxyLG4pe3ZhciBpPUUuZmluZEludGVyc2VjdGlvblhZKHIsbixyLFt0LWssQS1lXSk7cmV0dXJuIFcoaVswXSxpWzFdKX1mdW5jdGlvbiBudCh0LGUpe3ZhciByLG4saT1GK3QsYT1CK2Usbz1aKEYsQiksbD1aKGksYSksYz1PKG8sTCksdT1PKGwsTCk7JChydChGLEIsY1swXSxjWzFdKSxNYXRoLm1pbihydChpLGEsdVswXSx1WzFdKSxkKSkmJihyPVUrcy5wYXRoU2VjdG9yKGopLE4mJihyKz1zLnBhdGhTZWN0b3IoTikpLG49W1EoTixjWzBdLGNbMV0pLFEoaixjWzBdLGNbMV0pXS5qb2luKCIgIikpLHR0KHIsbil9ZnVuY3Rpb24gaXQoKXtpZihnLnJlbW92ZVpvb21ib3goYyksbnVsbCE9PU4mJm51bGwhPT1qKXt2YXIgdD17fTthdCh0KSxnLnNob3dEb3VibGVDbGlja05vdGlmaWVyKGMpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixjLHQpfX1mdW5jdGlvbiBhdCh0KXt2YXIgZT1DLl9ybCxyPShlWzFdLWVbMF0pLygxLW0vZCkvZCxuPVtlWzBdKyhOLW0pKnIsZVswXSsoai1tKSpyXTt0W3MuaWQrIi5yYWRpYWxheGlzLnJhbmdlIl09bn1mdW5jdGlvbiBvdCh0LGUpe3ZhciByPWMuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO2lmKGcucmVtb3ZlWm9vbWJveChjKSwyPT09dCl7dmFyIG49e307Zm9yKHZhciBpIGluIHMudmlld0luaXRpYWwpbltzLmlkKyIuIitpXT1zLnZpZXdJbml0aWFsW2ldO2MuZW1pdCgicGxvdGx5X2RvdWJsZWNsaWNrIixudWxsKSxhLmNhbGwoIl9ndWlSZWxheW91dCIsYyxuKX1yLmluZGV4T2YoInNlbGVjdCIpPi0xJiYxPT09dCYmXyhlLGMsW3MueGF4aXNdLFtzLnlheGlzXSxzLmlkLFkpLHIuaW5kZXhPZigiZXZlbnQiKT4tMSYmeS5jbGljayhjLGUscy5pZCl9WS5wcmVwRm49ZnVuY3Rpb24odCxuLGEpe3ZhciBsPWMuX2Z1bGxMYXlvdXQuZHJhZ21vZGUsdT1SLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2MuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKGMpO3ZhciBoPWMuX2Z1bGxMYXlvdXQuX2ludlRyYW5zZm9ybTtlPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxyPWMuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWTt2YXIgcD1vLmFwcGx5M0RUcmFuc2Zvcm0oaCkobi11LmxlZnQsYS11LnRvcCk7aWYoRj1wWzBdLEI9cFsxXSxMKXt2YXIgbT1FLmZpbmRQb2x5Z29uT2Zmc2V0KGQsTVswXSxNWzFdLEwpO0YrPWsrbVswXSxCKz1BK21bMV19c3dpdGNoKGwpe2Nhc2Uiem9vbSI6WS5tb3ZlRm49TD9udDpldCxZLmNsaWNrRm49b3QsWS5kb25lRm49aXQsZnVuY3Rpb24oKXtOPW51bGwsaj1udWxsLFU9cy5wYXRoU3VicGxvdCgpLFY9ITE7dmFyIHQ9Yy5fZnVsbExheW91dFtzLmlkXTtIPWkodC5iZ2NvbG9yKS5nZXRMdW1pbmFuY2UoKSwocT1nLm1ha2Vab29tYm94KGYsSCx4LFQsVSkpLmF0dHIoImZpbGwtcnVsZSIsImV2ZW5vZGQiKSxHPWcubWFrZUNvcm5lcnMoZix4LFQpLHcoYyl9KCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2UibGFzc28iOmIodCxuLGEsWSxsKX19LFIub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7eS5ob3ZlcihjLHQscy5pZCksYy5fZnVsbExheW91dC5fbGFzdGhvdmVyPVIsYy5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PXMuaWR9LFIub25tb3VzZW91dD1mdW5jdGlvbih0KXtjLl9kcmFnZ2luZ3x8di51bmhvdmVyKGMsdCl9LHYuaW5pdChZKX0sei51cGRhdGVSYWRpYWxEcmFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLGM9aS5nZCx1PWkubGF5ZXJzLGY9aS5yYWRpdXMsaD1pLmlubmVyUmFkaXVzLHA9aS5jeCxkPWkuY3ksbT1pLnJhZGlhbEF4aXMseT1TLnJhZGlhbERyYWdCb3hTaXplLHg9eS8yO2lmKG0udmlzaWJsZSl7dmFyIGIsXyxULE09UChpLnJhZGlhbEF4aXNBbmdsZSksRT1tLl9ybCxMPUVbMF0sQz1FWzFdLE89RVtyXSx6PS43NSooRVsxXS1FWzBdKS8oMS1lLmhvbGUpL2Y7cj8oYj1wKyhmK3gpKk1hdGguY29zKE0pLF89ZC0oZit4KSpNYXRoLnNpbihNKSxUPSJyYWRpYWxkcmFnIik6KGI9cCsoaC14KSpNYXRoLmNvcyhNKSxfPWQtKGgteCkqTWF0aC5zaW4oTSksVD0icmFkaWFsZHJhZy1pbm5lciIpO3ZhciBELEIsTixqPWcubWFrZVJlY3REcmFnZ2VyKHUsVCwiY3Jvc3NoYWlyIiwteCwteCx5LHkpLFU9e2VsZW1lbnQ6aixnZDpjfTtGKG4uc2VsZWN0KGopLG0udmlzaWJsZSYmaDxmLHt0cmFuc2Zvcm06bChiLF8pfSksVS5wcmVwRm49ZnVuY3Rpb24oKXtEPW51bGwsQj1udWxsLE49bnVsbCxVLm1vdmVGbj1WLFUuZG9uZUZuPUgsdyhjKX0sVS5jbGFtcEZuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKTxTLk1JTkRSQUcmJih0PTAsZT0wKSxbdCxlXX0sdi5pbml0KFUpfWZ1bmN0aW9uIFYodCxlKXtpZihEKUQodCxlKTtlbHNle3ZhciBuPVt0LC1lXSxhPVtNYXRoLmNvcyhNKSxNYXRoLnNpbihNKV0scz1NYXRoLmFicyhvLmRvdChuLGEpL01hdGguc3FydChvLmRvdChuLG4pKSk7aXNOYU4ocyl8fChEPXM8LjU/cTpHKX12YXIgbD17fTshZnVuY3Rpb24odCl7bnVsbCE9PUI/dFtpLmlkKyIucmFkaWFsYXhpcy5hbmdsZSJdPUI6bnVsbCE9PU4mJih0W2kuaWQrIi5yYWRpYWxheGlzLnJhbmdlWyIrcisiXSJdPU4pfShsKSxjLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsbCl9ZnVuY3Rpb24gSCgpe251bGwhPT1CP2EuY2FsbCgiX2d1aVJlbGF5b3V0IixjLGkuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIixCKTpudWxsIT09TiYmYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLGMsaS5pZCsiLnJhZGlhbGF4aXMucmFuZ2VbIityKyJdIixOKX1mdW5jdGlvbiBxKHQsZSl7aWYoMCE9PXIpe3ZhciBuPWIrdCxhPV8rZTtCPU1hdGguYXRhbjIoZC1hLG4tcCksaS52YW5nbGVzJiYoQj1SKEIsaS52YW5nbGVzKSksQj1JKEIpO3ZhciBvPWwocCxkKStzKC1CKTt1WyJyYWRpYWwtYXhpcyJdLmF0dHIoInRyYW5zZm9ybSIsbyksdVsicmFkaWFsLWxpbmUiXS5zZWxlY3QoImxpbmUiKS5hdHRyKCJ0cmFuc2Zvcm0iLG8pO3ZhciBjPWkuZ2QuX2Z1bGxMYXlvdXQsZj1jW2kuaWRdO2kudXBkYXRlUmFkaWFsQXhpc1RpdGxlKGMsZixCKX19ZnVuY3Rpb24gRyh0LGUpe3ZhciBuPW8uZG90KFt0LC1lXSxbTWF0aC5jb3MoTSksTWF0aC5zaW4oTSldKTtpZihOPU8teipuLHo+MD09KHI/Tj5MOk48Qykpe3ZhciBzPWMuX2Z1bGxMYXlvdXQsbD1zW2kuaWRdO20ucmFuZ2Vbcl09TixtLl9ybFtyXT1OLGkudXBkYXRlUmFkaWFsQXhpcyhzLGwpLGkueGF4aXMuc2V0UmFuZ2UoKSxpLnhheGlzLnNldFNjYWxlKCksaS55YXhpcy5zZXRSYW5nZSgpLGkueWF4aXMuc2V0U2NhbGUoKTt2YXIgdT0hMTtmb3IodmFyIGYgaW4gaS50cmFjZUhhc2gpe3ZhciBoPWkudHJhY2VIYXNoW2ZdLHA9by5maWx0ZXJWaXNpYmxlKGgpO2hbMF1bMF0udHJhY2UuX21vZHVsZS5wbG90KGMsaSxwLGwpLGEudHJhY2VJcyhmLCJnbCIpJiZwLmxlbmd0aCYmKHU9ITApfXUmJihrKGMpLEEoYykpfWVsc2UgTj1udWxsfX0sei51cGRhdGVBbmd1bGFyRHJhZz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9ZS5nZCxpPWUubGF5ZXJzLGM9ZS5yYWRpdXMsZj1lLmFuZ3VsYXJBeGlzLGg9ZS5jeCxwPWUuY3ksZD1lLmN4eCxtPWUuY3l5LHk9Uy5hbmd1bGFyRHJhZ0JveFNpemUseD1nLm1ha2VEcmFnZ2VyKGksInBhdGgiLCJhbmd1bGFyZHJhZyIsIm1vdmUiKSxiPXtlbGVtZW50OngsZ2Q6cn07ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBNYXRoLmF0YW4yKG0reS1lLHQtZC15KX1uLnNlbGVjdCh4KS5hdHRyKCJkIixlLnBhdGhBbm51bHVzKGMsYyt5KSkuYXR0cigidHJhbnNmb3JtIixsKGgscCkpLmNhbGwoVCwibW92ZSIpO3ZhciBNLEUsTCxDLFAsTyx6PWkuZnJvbnRwbG90LnNlbGVjdCgiLnNjYXR0ZXJsYXllciIpLnNlbGVjdEFsbCgiLnRyYWNlIiksRD16LnNlbGVjdEFsbCgiLnBvaW50IiksUj16LnNlbGVjdEFsbCgiLnRleHRwb2ludCIpO2Z1bmN0aW9uIEYoYyxnKXt2YXIgdj1lLmdkLl9mdWxsTGF5b3V0LHk9dltlLmlkXSx4PV8oTStjKnQuX2ludlNjYWxlWCxFK2cqdC5faW52U2NhbGVZKSxiPUkoeC1PKTtpZihDPUwrYixpLmZyb250cGxvdC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54T2Zmc2V0MixlLnlPZmZzZXQyKStzKFstYixkLG1dKSksZS52YW5nbGVzKXtQPWUucmFkaWFsQXhpc0FuZ2xlK2I7dmFyIHc9bChoLHApK3MoLWIpLFQ9bChoLHApK3MoLVApO2kuYmcuYXR0cigidHJhbnNmb3JtIix3KSxpWyJyYWRpYWwtZ3JpZCJdLmF0dHIoInRyYW5zZm9ybSIsdyksaVsicmFkaWFsLWF4aXMiXS5hdHRyKCJ0cmFuc2Zvcm0iLFQpLGlbInJhZGlhbC1saW5lIl0uc2VsZWN0KCJsaW5lIikuYXR0cigidHJhbnNmb3JtIixUKSxlLnVwZGF0ZVJhZGlhbEF4aXNUaXRsZSh2LHksUCl9ZWxzZSBlLmNsaXBQYXRocy5mb3JUcmFjZXMuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixsKGQsbSkrcyhiKSk7RC5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLGwoZS54LGUueSkrcyhbYl0pKX0pKSxSLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT10LnNlbGVjdCgidGV4dCIpLHI9dS5nZXRUcmFuc2xhdGUodCk7dC5hdHRyKCJ0cmFuc2Zvcm0iLHMoW2IsZS5hdHRyKCJ4IiksZS5hdHRyKCJ5IildKStsKHIueCxyLnkpKX0pKSxmLnJvdGF0aW9uPW8ubW9kSGFsZihDLDM2MCksZS51cGRhdGVBbmd1bGFyQXhpcyh2LHkpLGUuX2hhc0NsaXBPbkF4aXNGYWxzZSYmIW8uaXNGdWxsQ2lyY2xlKGUuc2VjdG9ySW5SYWQpJiZ6LmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLGUpO3ZhciBTPSExO2Zvcih2YXIgRiBpbiBlLnRyYWNlSGFzaClpZihhLnRyYWNlSXMoRiwiZ2wiKSl7dmFyIE49ZS50cmFjZUhhc2hbRl0saj1vLmZpbHRlclZpc2libGUoTik7TlswXVswXS50cmFjZS5fbW9kdWxlLnBsb3QocixlLGoseSksai5sZW5ndGgmJihTPSEwKX1TJiYoayhyKSxBKHIpKTt2YXIgVT17fTtCKFUpLHIuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixVKX1mdW5jdGlvbiBCKHQpe3RbZS5pZCsiLmFuZ3VsYXJheGlzLnJvdGF0aW9uIl09QyxlLnZhbmdsZXMmJih0W2UuaWQrIi5yYWRpYWxheGlzLmFuZ2xlIl09UCl9ZnVuY3Rpb24gTigpe1Iuc2VsZWN0KCJ0ZXh0IikuYXR0cigidHJhbnNmb3JtIixudWxsKTt2YXIgdD17fTtCKHQpLGEuY2FsbCgiX2d1aVJlbGF5b3V0IixyLHQpfWIucHJlcEZuPWZ1bmN0aW9uKG4saSxhKXt2YXIgcz10W2UuaWRdO0w9cy5hbmd1bGFyYXhpcy5yb3RhdGlvbjt2YXIgbD14LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO009aS1sLmxlZnQsRT1hLWwudG9wLHIuX2Z1bGxMYXlvdXQuX2NhbGNJbnZlcnNlVHJhbnNmb3JtKHIpO3ZhciBjPW8uYXBwbHkzRFRyYW5zZm9ybSh0Ll9pbnZUcmFuc2Zvcm0pKE0sRSk7TT1jWzBdLEU9Y1sxXSxPPV8oTSxFKSxiLm1vdmVGbj1GLGIuZG9uZUZuPU4sdyhyKX0sZS52YW5nbGVzJiYhby5pc0Z1bGxDaXJjbGUoZS5zZWN0b3JJblJhZCkmJihiLnByZXBGbj1vLm5vb3AsVChuLnNlbGVjdCh4KSxudWxsKSksdi5pbml0KGIpfSx6LmlzUHRJbnNpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcyxuPXRoaXMuYW5ndWxhckF4aXMuYzJnKHQudGhldGEpLGk9dGhpcy5yYWRpYWxBeGlzLGE9aS5jMmwodC5yKSxzPWkuX3JsO3JldHVybihyP0UuaXNQdEluc2lkZVBvbHlnb246by5pc1B0SW5zaWRlU2VjdG9yKShhLG4scyxlLHIpfSx6LnBhdGhBcmM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zZWN0b3JJblJhZCxyPXRoaXMudmFuZ2xlcztyZXR1cm4ocj9FLnBhdGhQb2x5Z29uOm8ucGF0aEFyYykodCxlWzBdLGVbMV0scil9LHoucGF0aFNlY3Rvcj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNlY3RvckluUmFkLHI9dGhpcy52YW5nbGVzO3JldHVybihyP0UucGF0aFBvbHlnb246by5wYXRoU2VjdG9yKSh0LGVbMF0sZVsxXSxyKX0sei5wYXRoQW5udWx1cz1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuc2VjdG9ySW5SYWQsbj10aGlzLnZhbmdsZXM7cmV0dXJuKG4/RS5wYXRoUG9seWdvbkFubnVsdXM6by5wYXRoQW5udWx1cykodCxlLHJbMF0sclsxXSxuKX0sei5wYXRoU3VicGxvdD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuaW5uZXJSYWRpdXMsZT10aGlzLnJhZGl1cztyZXR1cm4gdD90aGlzLnBhdGhBbm51bHVzKHQsZSk6dGhpcy5wYXRoU2VjdG9yKGUpfSx6LmZpbGxWaWV3SW5pdGlhbEtleT1mdW5jdGlvbih0LGUpe3QgaW4gdGhpcy52aWV3SW5pdGlhbHx8KHRoaXMudmlld0luaXRpYWxbdF09ZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCI6NjU4LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvY2xlYXJfZ2xfY2FudmFzZXMiOjc2MCwiLi4vLi4vbGliL3NldGN1cnNvciI6Nzk3LCIuLi8uLi9wbG90X2FwaS9zdWJyb3V0aW5lcyI6ODE3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4uL2NhcnRlc2lhbi9kcmFnYm94Ijo4MzYsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL3Bsb3RzIjo4OTAsIi4vY29uc3RhbnRzIjo4OTEsIi4vaGVscGVycyI6ODkyLCIuL3NldF9jb252ZXJ0Ijo4OTcsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sODk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksYT1uLmRlZzJyYWQsbz1uLnJhZDJkZWc7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goaSh0LHIpLHQuX2lkKXtjYXNlIngiOmNhc2UicmFkaWFsYXhpcyI6IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5fc3VicGxvdDt0LnNldEdlb21ldHJ5PWZ1bmN0aW9uKCl7dmFyIGU9dC5fcmxbMF0sbj10Ll9ybFsxXSxpPXIuaW5uZXJSYWRpdXMsYT0oci5yYWRpdXMtaSkvKG4tZSksbz1pL2Escz1lPm4/ZnVuY3Rpb24odCl7cmV0dXJuIHQ8PTB9OmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0wfTt0LmMyZz1mdW5jdGlvbihyKXt2YXIgbj10LmMybChyKS1lO3JldHVybihzKG4pP246MCkrb30sdC5nMmM9ZnVuY3Rpb24ocil7cmV0dXJuIHQubDJjKHIrZS1vKX0sdC5nMnA9ZnVuY3Rpb24odCl7cmV0dXJuIHQqYX0sdC5jMnA9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZzJwKHQuYzJnKGUpKX19fSh0LGUpO2JyZWFrO2Nhc2UiYW5ndWxhcmF4aXMiOiFmdW5jdGlvbih0LGUpe3ZhciByPXQudHlwZTtpZigibGluZWFyIj09PXIpe3ZhciBpPXQuZDJjLHM9dC5jMmQ7dC5kMmM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4iZGVncmVlcyI9PT1lP2EodCk6dH0oaSh0KSxlKX0sdC5jMmQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcyhmdW5jdGlvbih0LGUpe3JldHVybiJkZWdyZWVzIj09PWU/byh0KTp0fSh0LGUpKX19dC5tYWtlQ2FsY2RhdGE9ZnVuY3Rpb24oZSxpKXt2YXIgYSxvLHM9ZVtpXSxsPWUuX2xlbmd0aCxjPWZ1bmN0aW9uKHIpe3JldHVybiB0LmQyYyhyLGUudGhldGF1bml0KX07aWYocyl7aWYobi5pc1R5cGVkQXJyYXkocykmJiJsaW5lYXIiPT09cil7aWYobD09PXMubGVuZ3RoKXJldHVybiBzO2lmKHMuc3ViYXJyYXkpcmV0dXJuIHMuc3ViYXJyYXkoMCxsKX1mb3IoYT1uZXcgQXJyYXkobCksbz0wO288bDtvKyspYVtvXT1jKHNbb10pfWVsc2V7dmFyIHU9aSsiMCIsZj0iZCIraSxoPXUgaW4gZT9jKGVbdV0pOjAscD1lW2ZdP2MoZVtmXSk6KHQucGVyaW9kfHwyKk1hdGguUEkpL2w7Zm9yKGE9bmV3IEFycmF5KGwpLG89MDtvPGw7bysrKWFbb109aCtvKnB9cmV0dXJuIGF9LHQuc2V0R2VvbWV0cnk9ZnVuY3Rpb24oKXt2YXIgaSxzLGwsYyx1PWUuc2VjdG9yLGY9dS5tYXAoYSksaD17Y2xvY2t3aXNlOi0xLGNvdW50ZXJjbG9ja3dpc2U6MX1bdC5kaXJlY3Rpb25dLHA9YSh0LnJvdGF0aW9uKSxkPWZ1bmN0aW9uKHQpe3JldHVybiBoKnQrcH0sbT1mdW5jdGlvbih0KXtyZXR1cm4odC1wKS9ofTtzd2l0Y2gocil7Y2FzZSJsaW5lYXIiOnM9aT1uLmlkZW50aXR5LGM9YSxsPW8sdC5yYW5nZT1uLmlzRnVsbENpcmNsZShmKT9bdVswXSx1WzBdKzM2MF06Zi5tYXAobSkubWFwKG8pO2JyZWFrO2Nhc2UiY2F0ZWdvcnkiOnZhciBnPXQuX2NhdGVnb3JpZXMubGVuZ3RoLHY9dC5wZXJpb2Q/TWF0aC5tYXgodC5wZXJpb2QsZyk6ZzswPT09diYmKHY9MSkscz1jPWZ1bmN0aW9uKHQpe3JldHVybiAyKnQqTWF0aC5QSS92fSxpPWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQqdi9NYXRoLlBJLzJ9LHQucmFuZ2U9WzAsdl19dC5jMmc9ZnVuY3Rpb24odCl7cmV0dXJuIGQocyh0KSl9LHQuZzJjPWZ1bmN0aW9uKHQpe3JldHVybiBpKG0odCkpfSx0LnQyZz1mdW5jdGlvbih0KXtyZXR1cm4gZChjKHQpKX0sdC5nMnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwobSh0KSl9fX0odCxlKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OH1dLDg5ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4vZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYz1vLnR5cGUsdT1vLmF0dHJpYnV0ZXMsZj1vLmhhbmRsZURlZmF1bHRzLGg9by5wYXJ0aXRpb258fCJ4IixwPWUuX3N1YnBsb3RzW2NdLGQ9cC5sZW5ndGgsbT1kJiZwWzBdLnJlcGxhY2UoL1xkKyQvLCIiKTtmdW5jdGlvbiBnKHQsZSl7cmV0dXJuIG4uY29lcmNlKHMsbCx1LHQsZSl9Zm9yKHZhciB2PTA7djxkO3YrKyl7dmFyIHk9cFt2XTtzPXRbeV0/dFt5XTp0W3ldPXt9LGw9aS5uZXdDb250YWluZXIoZSx5LG0pLGcoInVpcmV2aXNpb24iLGUudWlyZXZpc2lvbik7dmFyIHg9e307eFtoXT1bdi9kLCh2KzEpL2RdLGEobCxlLGcseCksby5pZD15LGYocyxsLGcsbyl9fX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuL2RvbWFpbiI6ODU1fV0sODk5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2NvbnN0YW50cy9kb2NzIik7bi5GT1JNQVRfTElOSyxuLkRBVEVfRk9STUFUX0xJTks7ZnVuY3Rpb24gaSh0KXt2YXIgZT10LmRlc2NyaXB0aW9uPyIgIit0LmRlc2NyaXB0aW9uOiIiLHI9dC5rZXlzfHxbXTtpZihyLmxlbmd0aD4wKXtmb3IodmFyIG49W10saT0wO2k8ci5sZW5ndGg7aSsrKW5baV09ImAiK3JbaV0rImAiO2UrPSJGaW5hbGx5LCB0aGUgdGVtcGxhdGUgc3RyaW5nIGhhcyBhY2Nlc3MgdG8gIixlPTE9PT1yLmxlbmd0aD8idmFyaWFibGUgIituWzBdOiJ2YXJpYWJsZXMgIituLnNsaWNlKDAsLTEpLmpvaW4oIiwgIikrIiBhbmQgIituLnNsaWNlKC0xKSsiLiJ9cmV0dXJuIGV9ci5ob3ZlcnRlbXBsYXRlQXR0cnM9ZnVuY3Rpb24odCxlKXt0PXR8fHt9O2koZT1lfHx7fSk7dmFyIHI9e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZTp0LmVkaXRUeXBlfHwibm9uZSJ9O3JldHVybiExIT09dC5hcnJheU9rJiYoci5hcnJheU9rPSEwKSxyfSxyLnRleHR0ZW1wbGF0ZUF0dHJzPWZ1bmN0aW9uKHQsZSl7dD10fHx7fTtpKGU9ZXx8e30pO3ZhciByPXt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6dC5lZGl0VHlwZXx8ImNhbGMifTtyZXR1cm4hMSE9PXQuYXJyYXlPayYmKHIuYXJyYXlPaz0hMCkscn19LHsiLi4vY29uc3RhbnRzL2RvY3MiOjc0N31dLDkwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3Rlcm5hcnkiKSxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0U3VicGxvdENhbGNEYXRhLGE9dCgiLi4vLi4vbGliIikuY291bnRlclJlZ2V4O3IubmFtZT0idGVybmFyeSI7dmFyIG89ci5hdHRyPSJzdWJwbG90IjtyLmlkUm9vdD0idGVybmFyeSIsci5pZFJlZ2V4PXIuYXR0clJlZ2V4PWEoInRlcm5hcnkiKSwoci5hdHRyaWJ1dGVzPXt9KVtvXT17dmFsVHlwZToic3VicGxvdGlkIixkZmx0OiJ0ZXJuYXJ5IixlZGl0VHlwZToiY2FsYyJ9LHIubGF5b3V0QXR0cmlidXRlcz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksci5zdXBwbHlMYXlvdXREZWZhdWx0cz10KCIuL2xheW91dF9kZWZhdWx0cyIpLHIucGxvdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5fZnVsbExheW91dCxyPXQuY2FsY2RhdGEsYT1lLl9zdWJwbG90cy50ZXJuYXJ5LG89MDtvPGEubGVuZ3RoO28rKyl7dmFyIHM9YVtvXSxsPWkociwidGVybmFyeSIscyksYz1lW3NdLl9zdWJwbG90O2N8fChjPW5ldyBuKHtpZDpzLGdyYXBoRGl2OnQsY29udGFpbmVyOmUuX3Rlcm5hcnlsYXllci5ub2RlKCl9LGUpLGVbc10uX3N1YnBsb3Q9YyksYy5wbG90KGwsZSx0Ll9wcm9taXNlcyl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1uLl9zdWJwbG90cy50ZXJuYXJ5fHxbXSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV0scz1uW29dLl9zdWJwbG90OyFlW29dJiZzJiYocy5wbG90Q29udGFpbmVyLnJlbW92ZSgpLHMuY2xpcERlZi5yZW1vdmUoKSxzLmNsaXBEZWZSZWxhdGl2ZS5yZW1vdmUoKSxzLmxheWVyc1siYS10aXRsZSJdLnJlbW92ZSgpLHMubGF5ZXJzWyJiLXRpdGxlIl0ucmVtb3ZlKCkscy5sYXllcnNbImMtdGl0bGUiXS5yZW1vdmUoKSl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTAxLCIuL2xheW91dF9kZWZhdWx0cyI6OTAyLCIuL3Rlcm5hcnkiOjkwM31dLDkwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYT10KCIuLi9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9e3RpdGxlOnt0ZXh0OmEudGl0bGUudGV4dCxmb250OmEudGl0bGUuZm9udH0sY29sb3I6YS5jb2xvcix0aWNrbW9kZTphLnRpY2ttb2RlLG50aWNrczpzKHt9LGEubnRpY2tzLHtkZmx0OjYsbWluOjF9KSx0aWNrMDphLnRpY2swLGR0aWNrOmEuZHRpY2ssdGlja3ZhbHM6YS50aWNrdmFscyx0aWNrdGV4dDphLnRpY2t0ZXh0LHRpY2tzOmEudGlja3MsdGlja2xlbjphLnRpY2tsZW4sdGlja3dpZHRoOmEudGlja3dpZHRoLHRpY2tjb2xvcjphLnRpY2tjb2xvcixzaG93dGlja2xhYmVsczphLnNob3d0aWNrbGFiZWxzLHNob3d0aWNrcHJlZml4OmEuc2hvd3RpY2twcmVmaXgsdGlja3ByZWZpeDphLnRpY2twcmVmaXgsc2hvd3RpY2tzdWZmaXg6YS5zaG93dGlja3N1ZmZpeCx0aWNrc3VmZml4OmEudGlja3N1ZmZpeCxzaG93ZXhwb25lbnQ6YS5zaG93ZXhwb25lbnQsZXhwb25lbnRmb3JtYXQ6YS5leHBvbmVudGZvcm1hdCxtaW5leHBvbmVudDphLm1pbmV4cG9uZW50LHNlcGFyYXRldGhvdXNhbmRzOmEuc2VwYXJhdGV0aG91c2FuZHMsdGlja2ZvbnQ6YS50aWNrZm9udCx0aWNrYW5nbGU6YS50aWNrYW5nbGUsdGlja2Zvcm1hdDphLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmEudGlja2Zvcm1hdHN0b3BzLGhvdmVyZm9ybWF0OmEuaG92ZXJmb3JtYXQsc2hvd2xpbmU6cyh7fSxhLnNob3dsaW5lLHtkZmx0OiEwfSksbGluZWNvbG9yOmEubGluZWNvbG9yLGxpbmV3aWR0aDphLmxpbmV3aWR0aCxzaG93Z3JpZDpzKHt9LGEuc2hvd2dyaWQse2RmbHQ6ITB9KSxncmlkY29sb3I6YS5ncmlkY29sb3IsZ3JpZHdpZHRoOmEuZ3JpZHdpZHRoLGxheWVyOmEubGF5ZXIsbWluOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MH0sX2RlcHJlY2F0ZWQ6e3RpdGxlOmEuX2RlcHJlY2F0ZWQudGl0bGUsdGl0bGVmb250OmEuX2RlcHJlY2F0ZWQudGl0bGVmb250fX0sYz1lLmV4cG9ydHM9byh7ZG9tYWluOmkoe25hbWU6InRlcm5hcnkifSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6bi5iYWNrZ3JvdW5kfSxzdW06e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLG1pbjowfSxhYXhpczpsLGJheGlzOmwsY2F4aXM6bH0sInBsb3QiLCJmcm9tLXJvb3QiKTtjLnVpcmV2aXNpb249e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6Im5vbmUifSxjLmFheGlzLnVpcmV2aXNpb249Yy5iYXhpcy51aXJldmlzaW9uPWMuY2F4aXMudWlyZXZpc2lvbj17dmFsVHlwZToiYW55IixlZGl0VHlwZToibm9uZSJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyI6NjM4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uL2RvbWFpbiI6ODU1fV0sOTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vc3VicGxvdF9kZWZhdWx0cyIpLHM9dCgiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxsPXQoIi4uL2NhcnRlc2lhbi90aWNrX21hcmtfZGVmYXVsdHMiKSxjPXQoIi4uL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi9jYXJ0ZXNpYW4vbGluZV9ncmlkX2RlZmF1bHRzIiksZj10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksaD1bImFheGlzIiwiYmF4aXMiLCJjYXhpcyJdO2Z1bmN0aW9uIHAodCxlLHIsYSl7dmFyIG8scyxsLGM9cigiYmdjb2xvciIpLHU9cigic3VtIik7YS5iZ0NvbG9yPW4uY29tYmluZShjLGEucGFwZXJfYmdjb2xvcik7Zm9yKHZhciBmPTA7ZjxoLmxlbmd0aDtmKyspcz10W289aFtmXV18fHt9LChsPWkubmV3Q29udGFpbmVyKGUsbykpLl9uYW1lPW8sZChzLGwsYSxlKTt2YXIgcD1lLmFheGlzLG09ZS5iYXhpcyxnPWUuY2F4aXM7cC5taW4rbS5taW4rZy5taW4+PXUmJihwLm1pbj0wLG0ubWluPTAsZy5taW49MCx0LmFheGlzJiZkZWxldGUgdC5hYXhpcy5taW4sdC5iYXhpcyYmZGVsZXRlIHQuYmF4aXMubWluLHQuY2F4aXMmJmRlbGV0ZSB0LmNheGlzLm1pbil9ZnVuY3Rpb24gZCh0LGUscixuKXt2YXIgaT1mW2UuX25hbWVdO2Z1bmN0aW9uIG8ocixuKXtyZXR1cm4gYS5jb2VyY2UodCxlLGkscixuKX1vKCJ1aXJldmlzaW9uIixuLnVpcmV2aXNpb24pLGUudHlwZT0ibGluZWFyIjt2YXIgaD1vKCJjb2xvciIpLHA9aCE9PWkuY29sb3IuZGZsdD9oOnIuZm9udC5jb2xvcixkPWUuX25hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCksbT0iQ29tcG9uZW50ICIrZCxnPW8oInRpdGxlLnRleHQiLG0pO2UuX2hvdmVydGl0bGU9Zz09PW0/ZzpkLGEuY29lcmNlRm9udChvLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnIuZm9udC5mYW1pbHksc2l6ZTphLmJpZ0ZvbnQoci5mb250LnNpemUpLGNvbG9yOnB9KSxvKCJtaW4iKSxjKHQsZSxvLCJsaW5lYXIiKSxzKHQsZSxvLCJsaW5lYXIiLHt9KSxsKHQsZSxvLHtvdXRlclRpY2tzOiEwfSksbygic2hvd3RpY2tsYWJlbHMiKSYmKGEuY29lcmNlRm9udChvLCJ0aWNrZm9udCIse2ZhbWlseTpyLmZvbnQuZmFtaWx5LHNpemU6ci5mb250LnNpemUsY29sb3I6cH0pLG8oInRpY2thbmdsZSIpLG8oInRpY2tmb3JtYXQiKSksdSh0LGUsbyx7ZGZsdENvbG9yOmgsYmdDb2xvcjpyLmJnQ29sb3IsYmxlbmQ6NjAsc2hvd0xpbmU6ITAsc2hvd0dyaWQ6ITAsbm9aZXJvTGluZTohMCxhdHRyaWJ1dGVzOml9KSxvKCJob3ZlcmZvcm1hdCIpLG8oImxheWVyIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtvKHQsZSxyLHt0eXBlOiJ0ZXJuYXJ5IixhdHRyaWJ1dGVzOmYsaGFuZGxlRGVmYXVsdHM6cCxmb250OmUuZm9udCxwYXBlcl9iZ2NvbG9yOmUucGFwZXJfYmdjb2xvcn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uL2NhcnRlc2lhbi9saW5lX2dyaWRfZGVmYXVsdHMiOjg0NCwiLi4vY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vY2FydGVzaWFuL3RpY2tfbWFya19kZWZhdWx0cyI6ODUwLCIuLi9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyI6ODUxLCIuLi9zdWJwbG90X2RlZmF1bHRzIjo4OTgsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkwMX1dLDkwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz1vLnN0clRyYW5zbGF0ZSxsPW8uXyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGY9dCgiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0IiksaD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxwPXQoIi4uL3Bsb3RzIiksZD10KCIuLi9jYXJ0ZXNpYW4vYXhlcyIpLG09dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudCIpLGc9dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLHY9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikseT12LmZyZWVNb2RlLHg9di5yZWN0TW9kZSxiPXQoIi4uLy4uL2NvbXBvbmVudHMvdGl0bGVzIiksXz10KCIuLi9jYXJ0ZXNpYW4vc2VsZWN0IikucHJlcFNlbGVjdCx3PXQoIi4uL2NhcnRlc2lhbi9zZWxlY3QiKS5zZWxlY3RPbkNsaWNrLFQ9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0LGs9dCgiLi4vY2FydGVzaWFuL3NlbGVjdCIpLmNsZWFyU2VsZWN0aW9uc0NhY2hlLEE9dCgiLi4vY2FydGVzaWFuL2NvbnN0YW50cyIpO2Z1bmN0aW9uIE0odCxlKXt0aGlzLmlkPXQuaWQsdGhpcy5ncmFwaERpdj10LmdyYXBoRGl2LHRoaXMuaW5pdChlKSx0aGlzLm1ha2VGcmFtZXdvcmsoZSksdGhpcy5hVGlja0xheW91dD1udWxsLHRoaXMuYlRpY2tMYXlvdXQ9bnVsbCx0aGlzLmNUaWNrTGF5b3V0PW51bGx9ZS5leHBvcnRzPU07dmFyIFM9TS5wcm90b3R5cGU7Uy5pbml0PWZ1bmN0aW9uKHQpe3RoaXMuY29udGFpbmVyPXQuX3Rlcm5hcnlsYXllcix0aGlzLmRlZnM9dC5fZGVmcyx0aGlzLmxheW91dElkPXQuX3VpZCx0aGlzLnRyYWNlSGFzaD17fSx0aGlzLmxheWVycz17fX0sUy5wbG90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVt0aGlzLmlkXSxuPWUuX3NpemU7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSExO2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXtpZighMT09PXRbaV1bMF0udHJhY2UuY2xpcG9uYXhpcyl7dGhpcy5faGFzQ2xpcE9uQXhpc0ZhbHNlPSEwO2JyZWFrfX10aGlzLnVwZGF0ZUxheWVycyhyKSx0aGlzLmFkanVzdExheW91dChyLG4pLHAuZ2VuZXJhbFVwZGF0ZVBlclRyYWNlTW9kdWxlKHRoaXMuZ3JhcGhEaXYsdGhpcyx0LHIpLHRoaXMubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5jYWxsKGMuZmlsbCxyLmJnY29sb3IpfSxTLm1ha2VGcmFtZXdvcms9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRbdGhpcy5pZF0sbj10aGlzLmNsaXBJZD0iY2xpcCIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkLGk9dGhpcy5jbGlwSWRSZWxhdGl2ZT0iY2xpcC1yZWxhdGl2ZSIrdGhpcy5sYXlvdXRJZCt0aGlzLmlkO3RoaXMuY2xpcERlZj1vLmVuc3VyZVNpbmdsZUJ5SWQodC5fY2xpcHMsImNsaXBQYXRoIixuLChmdW5jdGlvbih0KXt0LmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpfSkpLHRoaXMuY2xpcERlZlJlbGF0aXZlPW8uZW5zdXJlU2luZ2xlQnlJZCh0Ll9jbGlwcywiY2xpcFBhdGgiLGksKGZ1bmN0aW9uKHQpe3QuYXBwZW5kKCJwYXRoIikuYXR0cigiZCIsIk0wLDBaIil9KSksdGhpcy5wbG90Q29udGFpbmVyPW8uZW5zdXJlU2luZ2xlKHRoaXMuY29udGFpbmVyLCJnIix0aGlzLmlkKSx0aGlzLnVwZGF0ZUxheWVycyhyKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuYmFja3Bsb3QsbixlKSx1LnNldENsaXBVcmwodGhpcy5sYXllcnMuZ3JpZHMsbixlKX0sUy51cGRhdGVMYXllcnM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5sYXllcnMscj1bImRyYWdsYXllciIsInBsb3RiZyIsImJhY2twbG90IiwiZ3JpZHMiXTsiYmVsb3cgdHJhY2VzIj09PXQuYWF4aXMubGF5ZXImJnIucHVzaCgiYWF4aXMiLCJhbGluZSIpLCJiZWxvdyB0cmFjZXMiPT09dC5iYXhpcy5sYXllciYmci5wdXNoKCJiYXhpcyIsImJsaW5lIiksImJlbG93IHRyYWNlcyI9PT10LmNheGlzLmxheWVyJiZyLnB1c2goImNheGlzIiwiY2xpbmUiKSxyLnB1c2goImZyb250cGxvdCIpLCJhYm92ZSB0cmFjZXMiPT09dC5hYXhpcy5sYXllciYmci5wdXNoKCJhYXhpcyIsImFsaW5lIiksImFib3ZlIHRyYWNlcyI9PT10LmJheGlzLmxheWVyJiZyLnB1c2goImJheGlzIiwiYmxpbmUiKSwiYWJvdmUgdHJhY2VzIj09PXQuY2F4aXMubGF5ZXImJnIucHVzaCgiY2F4aXMiLCJjbGluZSIpO3ZhciBpPXRoaXMucGxvdENvbnRhaW5lci5zZWxlY3RBbGwoImcudG9wbGV2ZWwiKS5kYXRhKHIsU3RyaW5nKSxhPVsiYWdyaWQiLCJiZ3JpZCIsImNncmlkIl07aS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuInRvcGxldmVsICIrdH0pKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtlW3RdPXIsImZyb250cGxvdCI9PT10P3IuYXBwZW5kKCJnIikuY2xhc3NlZCgic2NhdHRlcmxheWVyIiwhMCk6ImJhY2twbG90Ij09PXQ/ci5hcHBlbmQoImciKS5jbGFzc2VkKCJtYXBsYXllciIsITApOiJwbG90YmciPT09dD9yLmFwcGVuZCgicGF0aCIpLmF0dHIoImQiLCJNMCwwWiIpOiJhbGluZSI9PT10fHwiYmxpbmUiPT09dHx8ImNsaW5lIj09PXQ/ci5hcHBlbmQoInBhdGgiKToiZ3JpZHMiPT09dCYmYS5mb3JFYWNoKChmdW5jdGlvbih0KXtlW3RdPXIuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ3JpZCAiK3QsITApfSkpfSkpLGkub3JkZXIoKX07dmFyIEU9TWF0aC5zcXJ0KDQvMyk7Uy5hZGp1c3RMYXlvdXQ9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYSxvLGwscD10aGlzLGQ9dC5kb21haW4sbT0oZC54WzBdK2QueFsxXSkvMixnPShkLnlbMF0rZC55WzFdKS8yLHY9ZC54WzFdLWQueFswXSx5PWQueVsxXS1kLnlbMF0seD12KmUudyxiPXkqZS5oLF89dC5zdW0sdz10LmFheGlzLm1pbixUPXQuYmF4aXMubWluLGs9dC5jYXhpcy5taW47eD5FKmI/aT0oYT1iKSpFOmE9KGk9eCkvRSxvPXYqaS94LGw9eSphL2Iscj1lLmwrZS53Km0taS8yLG49ZS50K2UuaCooMS1nKS1hLzIscC54MD1yLHAueTA9bixwLnc9aSxwLmg9YSxwLnN1bT1fLHAueGF4aXM9e3R5cGU6ImxpbmVhciIscmFuZ2U6W3crMiprLV8sXy13LTIqVF0sZG9tYWluOlttLW8vMixtK28vMl0sX2lkOiJ4In0sZihwLnhheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueGF4aXMuc2V0U2NhbGUoKSxwLnhheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5hPj1wLmFheGlzLnJhbmdlWzBdJiZ0LmE8PXAuYWF4aXMucmFuZ2VbMV0mJnQuYj49cC5iYXhpcy5yYW5nZVsxXSYmdC5iPD1wLmJheGlzLnJhbmdlWzBdJiZ0LmM+PXAuY2F4aXMucmFuZ2VbMV0mJnQuYzw9cC5jYXhpcy5yYW5nZVswXX0scC55YXhpcz17dHlwZToibGluZWFyIixyYW5nZTpbdyxfLVQta10sZG9tYWluOltnLWwvMixnK2wvMl0sX2lkOiJ5In0sZihwLnlheGlzLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLHAueWF4aXMuc2V0U2NhbGUoKSxwLnlheGlzLmlzUHRXaXRoaW5SYW5nZT1mdW5jdGlvbigpe3JldHVybiEwfTt2YXIgQT1wLnlheGlzLmRvbWFpblswXSxNPXAuYWF4aXM9aCh7fSx0LmFheGlzLHtyYW5nZTpbdyxfLVQta10sc2lkZToibGVmdCIsdGlja2FuZ2xlOigrdC5hYXhpcy50aWNrYW5nbGV8fDApLTMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihNLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLE0uc2V0U2NhbGUoKTt2YXIgUz1wLmJheGlzPWgoe30sdC5iYXhpcyx7cmFuZ2U6W18tdy1rLFRdLHNpZGU6ImJvdHRvbSIsZG9tYWluOnAueGF4aXMuZG9tYWluLGFuY2hvcjoiZnJlZSIscG9zaXRpb246MCxfaWQ6IngiLF9sZW5ndGg6aX0pO2YoUyxwLmdyYXBoRGl2Ll9mdWxsTGF5b3V0KSxTLnNldFNjYWxlKCk7dmFyIEw9cC5jYXhpcz1oKHt9LHQuY2F4aXMse3JhbmdlOltfLXctVCxrXSxzaWRlOiJyaWdodCIsdGlja2FuZ2xlOigrdC5jYXhpcy50aWNrYW5nbGV8fDApKzMwLGRvbWFpbjpbQSxBK2wqRV0sYW5jaG9yOiJmcmVlIixwb3NpdGlvbjowLF9pZDoieSIsX2xlbmd0aDppfSk7ZihMLHAuZ3JhcGhEaXYuX2Z1bGxMYXlvdXQpLEwuc2V0U2NhbGUoKTt2YXIgQz0iTSIrcisiLCIrKG4rYSkrImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWYuc2VsZWN0KCJwYXRoIikuYXR0cigiZCIsQykscC5sYXllcnMucGxvdGJnLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEMpO3ZhciBQPSJNMCwiK2ErImgiK2krImwtIitpLzIrIiwtIithKyJaIjtwLmNsaXBEZWZSZWxhdGl2ZS5zZWxlY3QoInBhdGgiKS5hdHRyKCJkIixQKTt2YXIgST1zKHIsbik7cC5wbG90Q29udGFpbmVyLnNlbGVjdEFsbCgiLnNjYXR0ZXJsYXllciwubWFwbGF5ZXIiKS5hdHRyKCJ0cmFuc2Zvcm0iLEkpLHAuY2xpcERlZlJlbGF0aXZlLnNlbGVjdCgicGF0aCIpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCk7dmFyIE89cyhyLVMuX29mZnNldCxuK2EpO3AubGF5ZXJzLmJheGlzLmF0dHIoInRyYW5zZm9ybSIsTykscC5sYXllcnMuYmdyaWQuYXR0cigidHJhbnNmb3JtIixPKTt2YXIgej1zKHIraS8yLG4pKyJyb3RhdGUoMzApIitzKDAsLU0uX29mZnNldCk7cC5sYXllcnMuYWF4aXMuYXR0cigidHJhbnNmb3JtIix6KSxwLmxheWVycy5hZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLHopO3ZhciBEPXMocitpLzIsbikrInJvdGF0ZSgtMzApIitzKDAsLUwuX29mZnNldCk7cC5sYXllcnMuY2F4aXMuYXR0cigidHJhbnNmb3JtIixEKSxwLmxheWVycy5jZ3JpZC5hdHRyKCJ0cmFuc2Zvcm0iLEQpLHAuZHJhd0F4ZXMoITApLHAubGF5ZXJzLmFsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLE0uc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJsIitpLzIrIiwtIithOiJNMCwwIikuY2FsbChjLnN0cm9rZSxNLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoTS5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmJsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLFMuc2hvd2xpbmU/Ik0iK3IrIiwiKyhuK2EpKyJoIitpOiJNMCwwIikuY2FsbChjLnN0cm9rZSxTLmxpbmVjb2xvcnx8IiMwMDAiKS5zdHlsZSgic3Ryb2tlLXdpZHRoIiwoUy5saW5ld2lkdGh8fDApKyJweCIpLHAubGF5ZXJzLmNsaW5lLnNlbGVjdCgicGF0aCIpLmF0dHIoImQiLEwuc2hvd2xpbmU/Ik0iKyhyK2kvMikrIiwiK24rImwiK2kvMisiLCIrYToiTTAsMCIpLmNhbGwoYy5zdHJva2UsTC5saW5lY29sb3J8fCIjMDAwIikuc3R5bGUoInN0cm9rZS13aWR0aCIsKEwubGluZXdpZHRofHwwKSsicHgiKSxwLmdyYXBoRGl2Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fHAuaW5pdEludGVyYWN0aW9ucygpLHUuc2V0Q2xpcFVybChwLmxheWVycy5mcm9udHBsb3QscC5faGFzQ2xpcE9uQXhpc0ZhbHNlP251bGw6cC5jbGlwSWQscC5ncmFwaERpdil9LFMuZHJhd0F4ZXM9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5ncmFwaERpdixyPXRoaXMuaWQuc3Vic3RyKDcpKyJ0aXRsZSIsbj10aGlzLmxheWVycyxpPXRoaXMuYWF4aXMsYT10aGlzLmJheGlzLG89dGhpcy5jYXhpcztpZih0aGlzLmRyYXdBeChpKSx0aGlzLmRyYXdBeChhKSx0aGlzLmRyYXdBeChvKSx0KXt2YXIgcz1NYXRoLm1heChpLnNob3d0aWNrbGFiZWxzP2kudGlja2ZvbnQuc2l6ZS8yOjAsKG8uc2hvd3RpY2tsYWJlbHM/Ljc1Km8udGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09by50aWNrcz8uODcqby50aWNrbGVuOjApKSxjPShhLnNob3d0aWNrbGFiZWxzP2EudGlja2ZvbnQuc2l6ZTowKSsoIm91dHNpZGUiPT09YS50aWNrcz9hLnRpY2tsZW46MCkrMztuWyJhLXRpdGxlIl09Yi5kcmF3KGUsImEiK3Ise3Byb3BDb250YWluZXI6aSxwcm9wTmFtZTp0aGlzLmlkKyIuYWF4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEEgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53LzIseTp0aGlzLnkwLWkudGl0bGUuZm9udC5zaXplLzMtcywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pLG5bImItdGl0bGUiXT1iLmRyYXcoZSwiYiIrcix7cHJvcENvbnRhaW5lcjphLHByb3BOYW1lOnRoaXMuaWQrIi5iYXhpcy50aXRsZSIscGxhY2Vob2xkZXI6bChlLCJDbGljayB0byBlbnRlciBDb21wb25lbnQgQiB0aXRsZSIpLGF0dHJpYnV0ZXM6e3g6dGhpcy54MC1jLHk6dGhpcy55MCt0aGlzLmgrLjgzKmEudGl0bGUuZm9udC5zaXplK2MsInRleHQtYW5jaG9yIjoibWlkZGxlIn19KSxuWyJjLXRpdGxlIl09Yi5kcmF3KGUsImMiK3Ise3Byb3BDb250YWluZXI6byxwcm9wTmFtZTp0aGlzLmlkKyIuY2F4aXMudGl0bGUiLHBsYWNlaG9sZGVyOmwoZSwiQ2xpY2sgdG8gZW50ZXIgQ29tcG9uZW50IEMgdGl0bGUiKSxhdHRyaWJ1dGVzOnt4OnRoaXMueDArdGhpcy53K2MseTp0aGlzLnkwK3RoaXMuaCsuODMqby50aXRsZS5mb250LnNpemUrYywidGV4dC1hbmNob3IiOiJtaWRkbGUifX0pfX0sUy5kcmF3QXg9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLmdyYXBoRGl2LG49dC5fbmFtZSxpPW4uY2hhckF0KDApLGE9dC5faWQscz10aGlzLmxheWVyc1tuXSxsPWkrInRpY2tMYXlvdXQiLGM9KGU9dCkudGlja3MrU3RyaW5nKGUudGlja2xlbikrU3RyaW5nKGUuc2hvd3RpY2tsYWJlbHMpO3RoaXNbbF0hPT1jJiYocy5zZWxlY3RBbGwoIi4iK2ErInRpY2siKS5yZW1vdmUoKSx0aGlzW2xdPWMpLHQuc2V0U2NhbGUoKTt2YXIgdT1kLmNhbGNUaWNrcyh0KSxmPWQuY2xpcEVuZHModCx1KSxoPWQubWFrZVRyYW5zVGlja0ZuKHQpLHA9ZC5nZXRUaWNrU2lnbnModClbMl0sbT1vLmRlZzJyYWQoMzApLGc9cCoodC5saW5ld2lkdGh8fDEpLzIsdj1wKnQudGlja2xlbix5PXRoaXMudyx4PXRoaXMuaCxiPSJiIj09PWk/Ik0wLCIrZysibCIrTWF0aC5zaW4obSkqdisiLCIrTWF0aC5jb3MobSkqdjoiTSIrZysiLDBsIitNYXRoLmNvcyhtKSp2KyIsIistTWF0aC5zaW4obSkqdixfPXthOiJNMCwwbCIreCsiLC0iK3kvMixiOiJNMCwwbC0iK3kvMisiLC0iK3gsYzoiTTAsMGwtIit4KyIsIit5LzJ9W2ldO2QuZHJhd1RpY2tzKHIsdCx7dmFsczoiaW5zaWRlIj09PXQudGlja3M/Zjp1LGxheWVyOnMscGF0aDpiLHRyYW5zRm46aCxjcmlzcDohMX0pLGQuZHJhd0dyaWQocix0LHt2YWxzOmYsbGF5ZXI6dGhpcy5sYXllcnNbaSsiZ3JpZCJdLHBhdGg6Xyx0cmFuc0ZuOmgsY3Jpc3A6ITF9KSxkLmRyYXdMYWJlbHMocix0LHt2YWxzOnUsbGF5ZXI6cyx0cmFuc0ZuOmgsbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnModCwwLDMwKX0pfTt2YXIgTD1BLk1JTlpPT00vMisuODcsQz0ibS0wLjg3LC41aCIrTCsidjNoLSIrKEwrNS4yKSsibCIrKEwvMisyLjYpKyIsLSIrKC44NypMKzQuNSkrImwyLjYsMS41bC0iK0wvMisiLCIrLjg3KkwrIloiLFA9Im0wLjg3LC41aC0iK0wrInYzaCIrKEwrNS4yKSsibC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLTIuNiwxLjVsIitMLzIrIiwiKy44NypMKyJaIixJPSJtMCwxbCIrTC8yKyIsIisuODcqTCsibDIuNiwtMS41bC0iKyhMLzIrMi42KSsiLC0iKyguODcqTCs0LjUpKyJsLSIrKEwvMisyLjYpKyIsIisoLjg3KkwrNC41KSsibDIuNiwxLjVsIitMLzIrIiwtIisuODcqTCsiWiIsTz0hMDtmdW5jdGlvbiB6KHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnpvb21ib3gsLmpzLXpvb21ib3gtYmFja2Ryb3AsLmpzLXpvb21ib3gtbWVudSwuem9vbWJveC1jb3JuZXJzIikucmVtb3ZlKCl9Uy5jbGVhclNlbGVjdD1mdW5jdGlvbigpe2sodGhpcy5kcmFnT3B0aW9ucyksVCh0aGlzLmRyYWdPcHRpb25zLmdkKX0sUy5pbml0SW50ZXJhY3Rpb25zPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4sZixoLHAsZCx2LGIsVCxrLE09dGhpcyxTPU0ubGF5ZXJzLnBsb3RiZy5zZWxlY3QoInBhdGgiKS5ub2RlKCksTD1NLmdyYXBoRGl2LEQ9TC5fZnVsbExheW91dC5fem9vbWxheWVyO2Z1bmN0aW9uIFIodCl7dmFyIGU9e307cmV0dXJuIGVbTS5pZCsiLmFheGlzLm1pbiJdPXQuYSxlW00uaWQrIi5iYXhpcy5taW4iXT10LmIsZVtNLmlkKyIuY2F4aXMubWluIl09dC5jLGV9ZnVuY3Rpb24gRih0LGUpe3ZhciByPUwuX2Z1bGxMYXlvdXQuY2xpY2ttb2RlO3ooTCksMj09PXQmJihMLmVtaXQoInBsb3RseV9kb3VibGVjbGljayIsbnVsbCksYS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUih7YTowLGI6MCxjOjB9KSkpLHIuaW5kZXhPZigic2VsZWN0Iik+LTEmJjE9PT10JiZ3KGUsTCxbTS54YXhpc10sW00ueWF4aXNdLE0uaWQsTS5kcmFnT3B0aW9ucyksci5pbmRleE9mKCJldmVudCIpPi0xJiZnLmNsaWNrKEwsZSxNLmlkKX1mdW5jdGlvbiBCKHQsZSl7cmV0dXJuIDEtZS9NLmh9ZnVuY3Rpb24gTih0LGUpe3JldHVybiAxLSh0KyhNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gaih0LGUpe3JldHVybih0LShNLmgtZSkvTWF0aC5zcXJ0KDMpKS9NLnd9ZnVuY3Rpb24gVShpLGEpe3ZhciBvPXIraSp0LHM9bithKmUsbD1NYXRoLm1heCgwLE1hdGgubWluKDEsQigwLG4pLEIoMCxzKSkpLGM9TWF0aC5tYXgoMCxNYXRoLm1pbigxLE4ocixuKSxOKG8scykpKSx1PU1hdGgubWF4KDAsTWF0aC5taW4oMSxqKHIsbiksaihvLHMpKSksbT0obC8yK3UpKk0udyxnPSgxLWwvMi1jKSpNLncseT0obStnKS8yLHg9Zy1tLF89KDEtbCkqTS5oLHc9Xy14L0U7eDxBLk1JTlpPT00/KHA9ZixULmF0dHIoImQiLHYpLGsuYXR0cigiZCIsIk0wLDBaIikpOihwPXthOmYuYStsKmgsYjpmLmIrYypoLGM6Zi5jK3UqaH0sVC5hdHRyKCJkIix2KyJNIittKyIsIitfKyJIIitnKyJMIit5KyIsIit3KyJMIittKyIsIitfKyJaIiksay5hdHRyKCJkIiwiTSIrcisiLCIrbisibTAuNSwwLjVoNXYtMmgtNXYtNWgtMnY1aC01djJoNXY1aDJaTSIrbSsiLCIrXytDKyJNIitnKyIsIitfK1ArIk0iK3krIiwiK3crSSkpLGJ8fChULnRyYW5zaXRpb24oKS5zdHlsZSgiZmlsbCIsZD4uMj8icmdiYSgwLDAsMCwwLjQpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjMpIikuZHVyYXRpb24oMjAwKSxrLnRyYW5zaXRpb24oKS5zdHlsZSgib3BhY2l0eSIsMSkuZHVyYXRpb24oMjAwKSxiPSEwKSxMLmVtaXQoInBsb3RseV9yZWxheW91dGluZyIsUihwKSl9ZnVuY3Rpb24gVigpe3ooTCkscCE9PWYmJihhLmNhbGwoIl9ndWlSZWxheW91dCIsTCxSKHApKSxPJiZMLmRhdGEmJkwuX2NvbnRleHQuc2hvd1RpcHMmJihvLm5vdGlmaWVyKGwoTCwiRG91YmxlLWNsaWNrIHRvIHpvb20gYmFjayBvdXQiKSwibG9uZyIpLE89ITEpKX1mdW5jdGlvbiBIKHQsZSl7dmFyIHI9dC9NLnhheGlzLl9tLG49ZS9NLnlheGlzLl9tLGk9WyhwPXthOmYuYS1uLGI6Zi5iKyhyK24pLzIsYzpmLmMtKHItbikvMn0pLmEscC5iLHAuY10uc29ydChvLnNvcnRlckFzYyksYT1pLmluZGV4T2YocC5hKSxsPWkuaW5kZXhPZihwLmIpLGM9aS5pbmRleE9mKHAuYyk7aVswXTwwJiYoaVsxXStpWzBdLzI8MD8oaVsyXSs9aVswXStpWzFdLGlbMF09aVsxXT0wKTooaVsyXSs9aVswXS8yLGlbMV0rPWlbMF0vMixpWzBdPTApLHA9e2E6aVthXSxiOmlbbF0sYzppW2NdfSxlPShmLmEtcC5hKSpNLnlheGlzLl9tLHQ9KGYuYy1wLmMtZi5iK3AuYikqTS54YXhpcy5fbSk7dmFyIGg9cyhNLngwK3QsTS55MCtlKTtNLnBsb3RDb250YWluZXIuc2VsZWN0QWxsKCIuc2NhdHRlcmxheWVyLC5tYXBsYXllciIpLmF0dHIoInRyYW5zZm9ybSIsaCk7dmFyIGQ9cygtdCwtZSk7TS5jbGlwRGVmUmVsYXRpdmUuc2VsZWN0KCJwYXRoIikuYXR0cigidHJhbnNmb3JtIixkKSxNLmFheGlzLnJhbmdlPVtwLmEsTS5zdW0tcC5iLXAuY10sTS5iYXhpcy5yYW5nZT1bTS5zdW0tcC5hLXAuYyxwLmJdLE0uY2F4aXMucmFuZ2U9W00uc3VtLXAuYS1wLmIscC5jXSxNLmRyYXdBeGVzKCExKSxNLl9oYXNDbGlwT25BeGlzRmFsc2UmJk0ucGxvdENvbnRhaW5lci5zZWxlY3QoIi5zY2F0dGVybGF5ZXIiKS5zZWxlY3RBbGwoIi50cmFjZSIpLmNhbGwodS5oaWRlT3V0c2lkZVJhbmdlUG9pbnRzLE0pLEwuZW1pdCgicGxvdGx5X3JlbGF5b3V0aW5nIixSKHApKX1mdW5jdGlvbiBxKCl7YS5jYWxsKCJfZ3VpUmVsYXlvdXQiLEwsUihwKSl9dGhpcy5kcmFnT3B0aW9ucz17ZWxlbWVudDpTLGdkOkwscGxvdGluZm86e2lkOk0uaWQsZG9tYWluOkwuX2Z1bGxMYXlvdXRbTS5pZF0uZG9tYWluLHhheGlzOk0ueGF4aXMseWF4aXM6TS55YXhpc30sc3VicGxvdDpNLmlkLHByZXBGbjpmdW5jdGlvbihhLGwsdSl7TS5kcmFnT3B0aW9ucy54YXhlcz1bTS54YXhpc10sTS5kcmFnT3B0aW9ucy55YXhlcz1bTS55YXhpc10sdD1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsZT1MLl9mdWxsTGF5b3V0Ll9pbnZTY2FsZVk7dmFyIG09TS5kcmFnT3B0aW9ucy5kcmFnbW9kZT1MLl9mdWxsTGF5b3V0LmRyYWdtb2RlO3kobSk/TS5kcmFnT3B0aW9ucy5taW5EcmFnPTE6TS5kcmFnT3B0aW9ucy5taW5EcmFnPXZvaWQgMCwiem9vbSI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1VLE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPVYsZnVuY3Rpb24odCxlLGEpe3ZhciBsPVMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cj1lLWwubGVmdCxuPWEtbC50b3AsTC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0oTCk7dmFyIHU9TC5fZnVsbExheW91dC5faW52VHJhbnNmb3JtLG09by5hcHBseTNEVHJhbnNmb3JtKHUpKHIsbik7cj1tWzBdLG49bVsxXSxmPXthOk0uYWF4aXMucmFuZ2VbMF0sYjpNLmJheGlzLnJhbmdlWzFdLGM6TS5jYXhpcy5yYW5nZVsxXX0scD1mLGg9TS5hYXhpcy5yYW5nZVsxXS1mLmEsZD1pKE0uZ3JhcGhEaXYuX2Z1bGxMYXlvdXRbTS5pZF0uYmdjb2xvcikuZ2V0THVtaW5hbmNlKCksdj0iTTAsIitNLmgrIkwiK00udy8yKyIsIDBMIitNLncrIiwiK00uaCsiWiIsYj0hMSxUPUQuYXBwZW5kKCJwYXRoIikuYXR0cigiY2xhc3MiLCJ6b29tYm94IikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmQ+LjI/InJnYmEoMCwwLDAsMCkiOiJyZ2JhKDI1NSwyNTUsMjU1LDApIiwic3Ryb2tlLXdpZHRoIjowfSkuYXR0cigiZCIsdiksaz1ELmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiem9vbWJveC1jb3JuZXJzIikuYXR0cigidHJhbnNmb3JtIixzKE0ueDAsTS55MCkpLnN0eWxlKHtmaWxsOmMuYmFja2dyb3VuZCxzdHJva2U6Yy5kZWZhdWx0TGluZSwic3Ryb2tlLXdpZHRoIjoxLG9wYWNpdHk6MH0pLmF0dHIoImQiLCJNMCwwWiIpLE0uY2xlYXJTZWxlY3QoTCl9KDAsbCx1KSk6InBhbiI9PT1tPyhNLmRyYWdPcHRpb25zLm1vdmVGbj1ILE0uZHJhZ09wdGlvbnMuY2xpY2tGbj1GLE0uZHJhZ09wdGlvbnMuZG9uZUZuPXEsZj17YTpNLmFheGlzLnJhbmdlWzBdLGI6TS5iYXhpcy5yYW5nZVsxXSxjOk0uY2F4aXMucmFuZ2VbMV19LHA9ZixNLmNsZWFyU2VsZWN0KEwpKTooeChtKXx8eShtKSkmJl8oYSxsLHUsTS5kcmFnT3B0aW9ucyxtKX19LFMub25tb3VzZW1vdmU9ZnVuY3Rpb24odCl7Zy5ob3ZlcihMLHQsTS5pZCksTC5fZnVsbExheW91dC5fbGFzdGhvdmVyPVMsTC5fZnVsbExheW91dC5faG92ZXJzdWJwbG90PU0uaWR9LFMub25tb3VzZW91dD1mdW5jdGlvbih0KXtMLl9kcmFnZ2luZ3x8bS51bmhvdmVyKEwsdCl9LG0uaW5pdCh0aGlzLmRyYWdPcHRpb25zKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQvaGVscGVycyI6NjU3LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb21wb25lbnRzL3RpdGxlcyI6NzM3LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9jYXJ0ZXNpYW4vY29uc3RhbnRzIjo4MzQsIi4uL2NhcnRlc2lhbi9zZWxlY3QiOjg0NywiLi4vY2FydGVzaWFuL3NldF9jb252ZXJ0Ijo4NDgsIi4uL3Bsb3RzIjo4OTAsIkBwbG90bHkvZDMiOjU4LHRpbnljb2xvcjI6NTcyfV0sOTA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vbGliL2xvZ2dlcnMiKSxpPXQoIi4vbGliL25vb3AiKSxhPXQoIi4vbGliL3B1c2hfdW5pcXVlIiksbz10KCIuL2xpYi9pc19wbGFpbl9vYmplY3QiKSxzPXQoIi4vbGliL2RvbSIpLmFkZFN0eWxlUnVsZSxsPXQoIi4vbGliL2V4dGVuZCIpLGM9dCgiLi9wbG90cy9hdHRyaWJ1dGVzIiksdT10KCIuL3Bsb3RzL2xheW91dF9hdHRyaWJ1dGVzIiksZj1sLmV4dGVuZEZsYXQsaD1sLmV4dGVuZERlZXBBbGw7ZnVuY3Rpb24gcCh0KXt2YXIgZT10Lm5hbWUsaT10LmNhdGVnb3JpZXMsYT10Lm1ldGE7aWYoci5tb2R1bGVzW2VdKW4ubG9nKCJUeXBlICIrZSsiIGFscmVhZHkgcmVnaXN0ZXJlZCIpO2Vsc2V7ci5zdWJwbG90c1JlZ2lzdHJ5W3QuYmFzZVBsb3RNb2R1bGUubmFtZV18fGZ1bmN0aW9uKHQpe3ZhciBlPXQubmFtZTtpZihyLnN1YnBsb3RzUmVnaXN0cnlbZV0pcmV0dXJuIHZvaWQgbi5sb2coIlBsb3QgdHlwZSAiK2UrIiBhbHJlYWR5IHJlZ2lzdGVyZWQuIik7Zm9yKHZhciBpIGluIHYodCksci5zdWJwbG90c1JlZ2lzdHJ5W2VdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpYihpLHQubmFtZSl9KHQuYmFzZVBsb3RNb2R1bGUpO2Zvcih2YXIgbz17fSxsPTA7bDxpLmxlbmd0aDtsKyspb1tpW2xdXT0hMCxyLmFsbENhdGVnb3JpZXNbaVtsXV09ITA7Zm9yKHZhciBjIGluIHIubW9kdWxlc1tlXT17X21vZHVsZTp0LGNhdGVnb3JpZXM6b30sYSYmT2JqZWN0LmtleXMoYSkubGVuZ3RoJiYoci5tb2R1bGVzW2VdLm1ldGE9YSksci5hbGxUeXBlcy5wdXNoKGUpLHIuY29tcG9uZW50c1JlZ2lzdHJ5KXkoYyxlKTt0LmxheW91dEF0dHJpYnV0ZXMmJmYoci50cmFjZUxheW91dEF0dHJpYnV0ZXMsdC5sYXlvdXRBdHRyaWJ1dGVzKTt2YXIgdT10LmJhc2VQbG90TW9kdWxlLGg9dS5uYW1lO2lmKCJtYXBib3giPT09aCl7dmFyIHA9dS5jb25zdGFudHMuc3R5bGVSdWxlcztmb3IodmFyIGQgaW4gcClzKCIuanMtcGxvdGx5LXBsb3QgLnBsb3RseSAubWFwYm94Z2wtIitkLHBbZF0pfSJnZW8iIT09aCYmIm1hcGJveCIhPT1ofHx2b2lkIDA9PT10eXBlb2Ygd2luZG93fHx2b2lkIDAhPT13aW5kb3cuUGxvdGx5R2VvQXNzZXRzfHwod2luZG93LlBsb3RseUdlb0Fzc2V0cz17dG9wb2pzb246e319KX19ZnVuY3Rpb24gZCh0KXtpZigic3RyaW5nIiE9dHlwZW9mIHQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbXBvbmVudCBtb2R1bGUgKm5hbWUqIG11c3QgYmUgYSBzdHJpbmcuIik7dmFyIGU9dC5uYW1lO2Zvcih2YXIgbiBpbiByLmNvbXBvbmVudHNSZWdpc3RyeVtlXT10LHQubGF5b3V0QXR0cmlidXRlcyYmKHQubGF5b3V0QXR0cmlidXRlcy5faXNMaW5rZWRUb0FycmF5JiZhKHIubGF5b3V0QXJyYXlDb250YWluZXJzLGUpLHYodCkpLHIubW9kdWxlcyl5KGUsbik7Zm9yKHZhciBpIGluIHIuc3VicGxvdHNSZWdpc3RyeSliKGUsaSk7Zm9yKHZhciBvIGluIHIudHJhbnNmb3Jtc1JlZ2lzdHJ5KXgoZSxvKTt0LnNjaGVtYSYmdC5zY2hlbWEubGF5b3V0JiZoKHUsdC5zY2hlbWEubGF5b3V0KX1mdW5jdGlvbiBtKHQpe2lmKCJzdHJpbmciIT10eXBlb2YgdC5uYW1lKXRocm93IG5ldyBFcnJvcigiVHJhbnNmb3JtIG1vZHVsZSAqbmFtZSogbXVzdCBiZSBhIHN0cmluZy4iKTt2YXIgZT0iVHJhbnNmb3JtIG1vZHVsZSAiK3QubmFtZSxpPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnRyYW5zZm9ybSxhPSJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGNUcmFuc2Zvcm07aWYoIWkmJiFhKXRocm93IG5ldyBFcnJvcihlKyIgaXMgbWlzc2luZyBhICp0cmFuc2Zvcm0qIG9yICpjYWxjVHJhbnNmb3JtKiBtZXRob2QuIik7Zm9yKHZhciBzIGluIGkmJmEmJm4ubG9nKFtlKyIgaGFzIGJvdGggYSAqdHJhbnNmb3JtKiBhbmQgKmNhbGNUcmFuc2Zvcm0qIG1ldGhvZHMuIiwiUGxlYXNlIG5vdGUgdGhhdCBhbGwgKnRyYW5zZm9ybSogbWV0aG9kcyBhcmUgZXhlY3V0ZWQiLCJiZWZvcmUgYWxsICpjYWxjVHJhbnNmb3JtKiBtZXRob2RzLiJdLmpvaW4oIiAiKSksbyh0LmF0dHJpYnV0ZXMpfHxuLmxvZyhlKyIgcmVnaXN0ZXJlZCB3aXRob3V0IGFuICphdHRyaWJ1dGVzKiBvYmplY3QuIiksImZ1bmN0aW9uIiE9dHlwZW9mIHQuc3VwcGx5RGVmYXVsdHMmJm4ubG9nKGUrIiByZWdpc3RlcmVkIHdpdGhvdXQgYSAqc3VwcGx5RGVmYXVsdHMqIG1ldGhvZC4iKSxyLnRyYW5zZm9ybXNSZWdpc3RyeVt0Lm5hbWVdPXQsci5jb21wb25lbnRzUmVnaXN0cnkpeChzLHQubmFtZSl9ZnVuY3Rpb24gZyh0KXt2YXIgZT10Lm5hbWUsbj1lLnNwbGl0KCItIilbMF0saT10LmRpY3Rpb25hcnksYT10LmZvcm1hdCxvPWkmJk9iamVjdC5rZXlzKGkpLmxlbmd0aCxzPWEmJk9iamVjdC5rZXlzKGEpLmxlbmd0aCxsPXIubG9jYWxlUmVnaXN0cnksYz1sW2VdO2lmKGN8fChsW2VdPWM9e30pLG4hPT1lKXt2YXIgdT1sW25dO3V8fChsW25dPXU9e30pLG8mJnUuZGljdGlvbmFyeT09PWMuZGljdGlvbmFyeSYmKHUuZGljdGlvbmFyeT1pKSxzJiZ1LmZvcm1hdD09PWMuZm9ybWF0JiYodS5mb3JtYXQ9YSl9byYmKGMuZGljdGlvbmFyeT1pKSxzJiYoYy5mb3JtYXQ9YSl9ZnVuY3Rpb24gdih0KXtpZih0LmxheW91dEF0dHJpYnV0ZXMpe3ZhciBlPXQubGF5b3V0QXR0cmlidXRlcy5fYXJyYXlBdHRyUmVnZXhwcztpZihlKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWEoci5sYXlvdXRBcnJheVJlZ2V4ZXMsZVtuXSl9fWZ1bmN0aW9uIHkodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi50cmFjZXMpe3ZhciBpPW4udHJhY2VzW2VdO2kmJmgoci5tb2R1bGVzW2VdLl9tb2R1bGUuYXR0cmlidXRlcyxpKX19ZnVuY3Rpb24geCh0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdLnNjaGVtYTtpZihuJiZuLnRyYW5zZm9ybXMpe3ZhciBpPW4udHJhbnNmb3Jtc1tlXTtpJiZoKHIudHJhbnNmb3Jtc1JlZ2lzdHJ5W2VdLmF0dHJpYnV0ZXMsaSl9fWZ1bmN0aW9uIGIodCxlKXt2YXIgbj1yLmNvbXBvbmVudHNSZWdpc3RyeVt0XS5zY2hlbWE7aWYobiYmbi5zdWJwbG90cyl7dmFyIGk9ci5zdWJwbG90c1JlZ2lzdHJ5W2VdLGE9aS5sYXlvdXRBdHRyaWJ1dGVzLG89InN1YnBsb3QiPT09aS5hdHRyP2kubmFtZTppLmF0dHI7QXJyYXkuaXNBcnJheShvKSYmKG89b1swXSk7dmFyIHM9bi5zdWJwbG90c1tvXTthJiZzJiZoKGEscyl9fWZ1bmN0aW9uIF8odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiYodD10LnR5cGUpLHR9ci5tb2R1bGVzPXt9LHIuYWxsQ2F0ZWdvcmllcz17fSxyLmFsbFR5cGVzPVtdLHIuc3VicGxvdHNSZWdpc3RyeT17fSxyLnRyYW5zZm9ybXNSZWdpc3RyeT17fSxyLmNvbXBvbmVudHNSZWdpc3RyeT17fSxyLmxheW91dEFycmF5Q29udGFpbmVycz1bXSxyLmxheW91dEFycmF5UmVnZXhlcz1bXSxyLnRyYWNlTGF5b3V0QXR0cmlidXRlcz17fSxyLmxvY2FsZVJlZ2lzdHJ5PXt9LHIuYXBpTWV0aG9kUmVnaXN0cnk9e30sci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLHIucmVnaXN0ZXI9ZnVuY3Rpb24odCl7aWYoci5jb2xsZWN0YWJsZVN1YnBsb3RUeXBlcz1udWxsLCF0KXRocm93IG5ldyBFcnJvcigiTm8gYXJndW1lbnQgcGFzc2VkIHRvIFBsb3RseS5yZWdpc3Rlci4iKTt0JiYhQXJyYXkuaXNBcnJheSh0KSYmKHQ9W3RdKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIG49dFtlXTtpZighbil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbW9kdWxlIHdhcyBhdHRlbXB0ZWQgdG8gYmUgcmVnaXN0ZXJlZCEiKTtzd2l0Y2gobi5tb2R1bGVUeXBlKXtjYXNlInRyYWNlIjpwKG4pO2JyZWFrO2Nhc2UidHJhbnNmb3JtIjptKG4pO2JyZWFrO2Nhc2UiY29tcG9uZW50IjpkKG4pO2JyZWFrO2Nhc2UibG9jYWxlIjpnKG4pO2JyZWFrO2Nhc2UiYXBpTWV0aG9kIjp2YXIgaT1uLm5hbWU7ci5hcGlNZXRob2RSZWdpc3RyeVtpXT1uLmZuO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG1vZHVsZSB3YXMgYXR0ZW1wdGVkIHRvIGJlIHJlZ2lzdGVyZWQhIil9fX0sci5nZXRNb2R1bGU9ZnVuY3Rpb24odCl7dmFyIGU9ci5tb2R1bGVzW18odCldO3JldHVybiEhZSYmZS5fbW9kdWxlfSxyLnRyYWNlSXM9ZnVuY3Rpb24odCxlKXtpZigidmFyaW91cyI9PT0odD1fKHQpKSlyZXR1cm4hMTt2YXIgaT1yLm1vZHVsZXNbdF07cmV0dXJuIGl8fCh0JiZuLmxvZygiVW5yZWNvZ25pemVkIHRyYWNlIHR5cGUgIit0KyIuIiksaT1yLm1vZHVsZXNbYy50eXBlLmRmbHRdKSwhIWkuY2F0ZWdvcmllc1tlXX0sci5nZXRUcmFuc2Zvcm1JbmRpY2VzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC50cmFuc2Zvcm1zfHxbXSxpPTA7aTxuLmxlbmd0aDtpKyspbltpXS50eXBlPT09ZSYmci5wdXNoKGkpO3JldHVybiByfSxyLmhhc1RyYW5zZm9ybT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYW5zZm9ybXN8fFtdLG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dLnR5cGU9PT1lKXJldHVybiEwO3JldHVybiExfSxyLmdldENvbXBvbmVudE1ldGhvZD1mdW5jdGlvbih0LGUpe3ZhciBuPXIuY29tcG9uZW50c1JlZ2lzdHJ5W3RdO3JldHVybiBuJiZuW2VdfHxpfSxyLmNhbGw9ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHNbMF0sZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gci5hcGlNZXRob2RSZWdpc3RyeVt0XS5hcHBseShudWxsLGUpfX0seyIuL2xpYi9kb20iOjc2NCwiLi9saWIvZXh0ZW5kIjo3NjYsIi4vbGliL2lzX3BsYWluX29iamVjdCI6Nzc3LCIuL2xpYi9sb2dnZXJzIjo3ODAsIi4vbGliL25vb3AiOjc4NSwiLi9saWIvcHVzaF91bmlxdWUiOjc5MSwiLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4vcGxvdHMvbGF5b3V0X2F0dHJpYnV0ZXMiOjg4MX1dLDkwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9yZWdpc3RyeSIpLGk9dCgiLi4vbGliIiksYT1pLmV4dGVuZEZsYXQsbz1pLmV4dGVuZERlZXA7ZnVuY3Rpb24gcyh0KXt2YXIgZTtzd2l0Y2godCl7Y2FzZSJ0aGVtZXNfX3RodW1iIjplPXthdXRvc2l6ZTohMCx3aWR0aDoxNTAsaGVpZ2h0OjE1MCx0aXRsZTp7dGV4dDoiIn0sc2hvd2xlZ2VuZDohMSxtYXJnaW46e2w6NSxyOjUsdDo1LGI6NSxwYWQ6MH0sYW5ub3RhdGlvbnM6W119O2JyZWFrO2Nhc2UidGh1bWJuYWlsIjplPXt0aXRsZTp7dGV4dDoiIn0saGlkZXNvdXJjZXM6ITAsc2hvd2xlZ2VuZDohMSxib3JkZXJ3aWR0aDowLGJvcmRlcmNvbG9yOiIiLG1hcmdpbjp7bDoxLHI6MSx0OjEsYjoxLHBhZDowfSxhbm5vdGF0aW9uczpbXX07YnJlYWs7ZGVmYXVsdDplPXt9fXJldHVybiBlfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksbD10LmRhdGEsYz10LmxheW91dCx1PW8oW10sbCksZj1vKHt9LGMscyhlLnRpbGVDbGFzcykpLGg9dC5fY29udGV4dHx8e307aWYoZS53aWR0aCYmKGYud2lkdGg9ZS53aWR0aCksZS5oZWlnaHQmJihmLmhlaWdodD1lLmhlaWdodCksInRodW1ibmFpbCI9PT1lLnRpbGVDbGFzc3x8InRoZW1lc19fdGh1bWIiPT09ZS50aWxlQ2xhc3Mpe2YuYW5ub3RhdGlvbnM9W107dmFyIHA9T2JqZWN0LmtleXMoZik7Zm9yKHI9MDtyPHAubGVuZ3RoO3IrKylpPXBbcl0sWyJ4YXhpcyIsInlheGlzIiwiemF4aXMiXS5pbmRleE9mKGkuc2xpY2UoMCw1KSk+LTEmJihmW3Bbcl1dLnRpdGxlPXt0ZXh0OiIifSk7Zm9yKHI9MDtyPHUubGVuZ3RoO3IrKyl7dmFyIGQ9dVtyXTtkLnNob3dzY2FsZT0hMSxkLm1hcmtlciYmKGQubWFya2VyLnNob3dzY2FsZT0hMSksbi50cmFjZUlzKGQsInBpZS1saWtlIikmJihkLnRleHRwb3NpdGlvbj0ibm9uZSIpfX1pZihBcnJheS5pc0FycmF5KGUuYW5ub3RhdGlvbnMpKWZvcihyPTA7cjxlLmFubm90YXRpb25zLmxlbmd0aDtyKyspZi5hbm5vdGF0aW9ucy5wdXNoKGUuYW5ub3RhdGlvbnNbcl0pO3ZhciBtPU9iamVjdC5rZXlzKGYpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQubWF0Y2goL15zY2VuZVxkKiQvKX0pKTtpZihtLmxlbmd0aCl7dmFyIGc9e307Zm9yKCJ0aHVtYm5haWwiPT09ZS50aWxlQ2xhc3MmJihnPXt0aXRsZTp7dGV4dDoiIn0sc2hvd2F4ZXNsYWJlbHM6ITEsc2hvd3RpY2tsYWJlbHM6ITEsbGluZXRpY2tlbmFibGU6ITF9KSxyPTA7cjxtLmxlbmd0aDtyKyspe3ZhciB2PWZbbVtyXV07di54YXhpc3x8KHYueGF4aXM9e30pLHYueWF4aXN8fCh2LnlheGlzPXt9KSx2LnpheGlzfHwodi56YXhpcz17fSksYSh2LnhheGlzLGcpLGEodi55YXhpcyxnKSxhKHYuemF4aXMsZyksdi5fc2NlbmU9bnVsbH19dmFyIHk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZS50aWxlQ2xhc3MmJih5LmNsYXNzTmFtZT1lLnRpbGVDbGFzcyk7dmFyIHg9e2dkOnksdGQ6eSxsYXlvdXQ6ZixkYXRhOnUsY29uZmlnOntzdGF0aWNQbG90OnZvaWQgMD09PWUuc3RhdGljUGxvdHx8ZS5zdGF0aWNQbG90LHBsb3RHbFBpeGVsUmF0aW86dm9pZCAwPT09ZS5wbG90R2xQaXhlbFJhdGlvPzI6ZS5wbG90R2xQaXhlbFJhdGlvLGRpc3BsYXlsb2dvOmUuZGlzcGxheWxvZ298fCExLHNob3dMaW5rOmUuc2hvd0xpbmt8fCExLHNob3dUaXBzOmUuc2hvd1RpcHN8fCExLG1hcGJveEFjY2Vzc1Rva2VuOmgubWFwYm94QWNjZXNzVG9rZW59fTtyZXR1cm4idHJhbnNwYXJlbnQiIT09ZS5zZXRCYWNrZ3JvdW5kJiYoeC5jb25maWcuc2V0QmFja2dyb3VuZD1lLnNldEJhY2tncm91bmR8fCJvcGFxdWUiKSx4LmdkLmRlZmF1bHRMYXlvdXQ9cyhlLnRpbGVDbGFzcykseH19LHsiLi4vbGliIjo3NzYsIi4uL3JlZ2lzdHJ5Ijo5MDR9XSw5MDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuLi9wbG90X2FwaS90b19pbWFnZSIpLGE9dCgiLi9maWxlc2F2ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBuLmlzUGxhaW5PYmplY3QodCl8fChyPW4uZ2V0R3JhcGhEaXYodCkpLChlPWV8fHt9KS5mb3JtYXQ9ZS5mb3JtYXR8fCJwbmciLGUud2lkdGg9ZS53aWR0aHx8bnVsbCxlLmhlaWdodD1lLmhlaWdodHx8bnVsbCxlLmltYWdlRGF0YU9ubHk9ITAsbmV3IFByb21pc2UoKGZ1bmN0aW9uKHMsbCl7ciYmci5fc25hcHNob3RJblByb2dyZXNzJiZsKG5ldyBFcnJvcigiU25hcHNob3R0aW5nIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIikpLG4uaXNJRSgpJiYic3ZnIiE9PWUuZm9ybWF0JiZsKG5ldyBFcnJvcihvLk1TR19JRV9CQURfRk9STUFUKSksciYmKHIuX3NuYXBzaG90SW5Qcm9ncmVzcz0hMCk7dmFyIGM9aSh0LGUpLHU9ZS5maWxlbmFtZXx8dC5mbnx8Im5ld3Bsb3QiO3UrPSIuIitlLmZvcm1hdC5yZXBsYWNlKCItIiwiLiIpLGMudGhlbigoZnVuY3Rpb24odCl7cmV0dXJuIHImJihyLl9zbmFwc2hvdEluUHJvZ3Jlc3M9ITEpLGEodCx1LGUuZm9ybWF0KX0pKS50aGVuKChmdW5jdGlvbih0KXtzKHQpfSkpLmNhdGNoKChmdW5jdGlvbih0KXtyJiYoci5fc25hcHNob3RJblByb2dyZXNzPSExKSxsKHQpfSkpfSkpfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvdG9faW1hZ2UiOjgxOSwiLi9maWxlc2F2ZXIiOjkwNywiLi9oZWxwZXJzIjo5MDh9XSw5MDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vbGliIiksaT10KCIuL2hlbHBlcnMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxvPSJkb3dubG9hZCJpbiBhO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocyxsKXt2YXIgYyx1O2lmKG4uaXNJRSgpKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LCJzdmciKSx3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoYyxlKSxjPW51bGwscyhlKTtpZihvKXJldHVybiBjPWkuY3JlYXRlQmxvYih0LHIpLHU9aS5jcmVhdGVPYmplY3RVUkwoYyksYS5ocmVmPXUsYS5kb3dubG9hZD1lLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSksaS5yZXZva2VPYmplY3RVUkwodSksYz1udWxsLHMoZSk7aWYobi5pc1NhZmFyaSgpKXt2YXIgZj0ic3ZnIj09PXI/IiwiOiI7YmFzZTY0LCI7cmV0dXJuIGkub2N0ZXRTdHJlYW0oZitlbmNvZGVVUklDb21wb25lbnQodCkpLHMoZSl9bChuZXcgRXJyb3IoImRvd25sb2FkIGVycm9yIikpfSkpfX0seyIuLi9saWIiOjc3NiwiLi9oZWxwZXJzIjo5MDh9XSw5MDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vcmVnaXN0cnkiKTtyLmdldERlbGF5PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9oYXMmJih0Ll9oYXMoImdsM2QiKXx8dC5faGFzKCJnbDJkIil8fHQuX2hhcygibWFwYm94IikpPzUwMDowfSxyLmdldFJlZHJhd0Z1bmM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7bi5nZXRDb21wb25lbnRNZXRob2QoImNvbG9yYmFyIiwiZHJhdyIpKHQpfX0sci5lbmNvZGVTVkc9ZnVuY3Rpb24odCl7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbCwiK2VuY29kZVVSSUNvbXBvbmVudCh0KX0sci5lbmNvZGVKU09OPWZ1bmN0aW9uKHQpe3JldHVybiJkYXRhOmFwcGxpY2F0aW9uL2pzb24sIitlbmNvZGVVUklDb21wb25lbnQodCl9O3ZhciBpPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkw7ci5jcmVhdGVPYmplY3RVUkw9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY3JlYXRlT2JqZWN0VVJMKHQpfSxyLnJldm9rZU9iamVjdFVSTD1mdW5jdGlvbih0KXtyZXR1cm4gaS5yZXZva2VPYmplY3RVUkwodCl9LHIuY3JlYXRlQmxvYj1mdW5jdGlvbih0LGUpe2lmKCJzdmciPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiaW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04In0pO2lmKCJmdWxsLWpzb24iPT09ZSlyZXR1cm4gbmV3IHdpbmRvdy5CbG9iKFt0XSx7dHlwZToiYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04In0pO3ZhciByPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheUJ1ZmZlcihlKSxuPW5ldyBVaW50OEFycmF5KHIpLGk9MDtpPGU7aSsrKW5baV09dC5jaGFyQ29kZUF0KGkpO3JldHVybiByfSh3aW5kb3cuYXRvYih0KSk7cmV0dXJuIG5ldyB3aW5kb3cuQmxvYihbcl0se3R5cGU6ImltYWdlLyIrZX0pfSxyLm9jdGV0U3RyZWFtPWZ1bmN0aW9uKHQpe2RvY3VtZW50LmxvY2F0aW9uLmhyZWY9ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIit0fSxyLklNQUdFX1VSTF9QUkVGSVg9L15kYXRhOmltYWdlXC9cdys7YmFzZTY0LC8sci5NU0dfSUVfQkFEX0ZPUk1BVD0iU29ycnkgSUUgZG9lcyBub3Qgc3VwcG9ydCBkb3dubG9hZGluZyBmcm9tIGNhbnZhcy4gVHJ5IHtmb3JtYXQ6J3N2Zyd9IGluc3RlYWQuIn0seyIuLi9yZWdpc3RyeSI6OTA0fV0sOTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9e2dldERlbGF5Om4uZ2V0RGVsYXksZ2V0UmVkcmF3RnVuYzpuLmdldFJlZHJhd0Z1bmMsY2xvbmU6dCgiLi9jbG9uZXBsb3QiKSx0b1NWRzp0KCIuL3Rvc3ZnIiksc3ZnVG9JbWc6dCgiLi9zdmd0b2ltZyIpLHRvSW1hZ2U6dCgiLi90b2ltYWdlIiksZG93bmxvYWRJbWFnZTp0KCIuL2Rvd25sb2FkIil9O2UuZXhwb3J0cz1pfSx7Ii4vY2xvbmVwbG90Ijo5MDUsIi4vZG93bmxvYWQiOjkwNiwiLi9oZWxwZXJzIjo5MDgsIi4vc3ZndG9pbWciOjkxMCwiLi90b2ltYWdlIjo5MTEsIi4vdG9zdmciOjkxMn1dLDkxMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoImV2ZW50cyIpLkV2ZW50RW1pdHRlcixhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10LmVtaXR0ZXJ8fG5ldyBpLHI9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGksbyl7dmFyIHM9d2luZG93LkltYWdlLGw9dC5zdmcsYz10LmZvcm1hdHx8InBuZyI7aWYobi5pc0lFKCkmJiJzdmciIT09Yyl7dmFyIHU9bmV3IEVycm9yKGEuTVNHX0lFX0JBRF9GT1JNQVQpO3JldHVybiBvKHUpLHQucHJvbWlzZT9yOmUuZW1pdCgiZXJyb3IiLHUpfXZhciBmLGgscD10LmNhbnZhcyxkPXQuc2NhbGV8fDEsbT10LndpZHRofHwzMDAsZz10LmhlaWdodHx8MTUwLHY9ZCptLHk9ZCpnLHg9cC5nZXRDb250ZXh0KCIyZCIpLGI9bmV3IHM7InN2ZyI9PT1jfHxuLmlzU2FmYXJpKCk/aD1hLmVuY29kZVNWRyhsKTooZj1hLmNyZWF0ZUJsb2IobCwic3ZnIiksaD1hLmNyZWF0ZU9iamVjdFVSTChmKSkscC53aWR0aD12LHAuaGVpZ2h0PXksYi5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcjtzd2l0Y2goZj1udWxsLGEucmV2b2tlT2JqZWN0VVJMKGgpLCJzdmciIT09YyYmeC5kcmF3SW1hZ2UoYiwwLDAsdix5KSxjKXtjYXNlImpwZWciOnI9cC50b0RhdGFVUkwoImltYWdlL2pwZWciKTticmVhaztjYXNlInBuZyI6cj1wLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7YnJlYWs7Y2FzZSJ3ZWJwIjpyPXAudG9EYXRhVVJMKCJpbWFnZS93ZWJwIik7YnJlYWs7Y2FzZSJzdmciOnI9aDticmVhaztkZWZhdWx0OnZhciBuPSJJbWFnZSBmb3JtYXQgaXMgbm90IGpwZWcsIHBuZywgc3ZnIG9yIHdlYnAuIjtpZihvKG5ldyBFcnJvcihuKSksIXQucHJvbWlzZSlyZXR1cm4gZS5lbWl0KCJlcnJvciIsbil9aShyKSx0LnByb21pc2V8fGUuZW1pdCgic3VjY2VzcyIscil9LGIub25lcnJvcj1mdW5jdGlvbihyKXtpZihmPW51bGwsYS5yZXZva2VPYmplY3RVUkwoaCksbyhyKSwhdC5wcm9taXNlKXJldHVybiBlLmVtaXQoImVycm9yIixyKX0sYi5zcmM9aH0pKTtyZXR1cm4gdC5wcm9taXNlP3I6ZX19LHsiLi4vbGliIjo3NzYsIi4vaGVscGVycyI6OTA4LGV2ZW50czoyMzd9XSw5MTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZXZlbnRzIikuRXZlbnRFbWl0dGVyLGk9dCgiLi4vcmVnaXN0cnkiKSxhPXQoIi4uL2xpYiIpLG89dCgiLi9oZWxwZXJzIikscz10KCIuL2Nsb25lcGxvdCIpLGw9dCgiLi90b3N2ZyIpLGM9dCgiLi9zdmd0b2ltZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPW5ldyBuLHU9cyh0LHtmb3JtYXQ6InBuZyJ9KSxmPXUuZ2Q7Zi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGUubGVmdD0iLTUwMDBweCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmKTt2YXIgaD1vLmdldFJlZHJhd0Z1bmMoZik7cmV0dXJuIGkuY2FsbCgiX2RvUGxvdCIsZix1LmRhdGEsdS5sYXlvdXQsdS5jb25maWcpLnRoZW4oaCkudGhlbigoZnVuY3Rpb24oKXt2YXIgdD1vLmdldERlbGF5KGYuX2Z1bGxMYXlvdXQpO3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIHQ9bChmKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO24uaWQ9YS5yYW5kc3RyKCksKHI9Yyh7Zm9ybWF0OmUuZm9ybWF0LHdpZHRoOmYuX2Z1bGxMYXlvdXQud2lkdGgsaGVpZ2h0OmYuX2Z1bGxMYXlvdXQuaGVpZ2h0LGNhbnZhczpuLGVtaXR0ZXI6cixzdmc6dH0pKS5jbGVhbj1mdW5jdGlvbigpe2YmJmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3IuZW1pdCgiZXJyb3IiLHQpfSkpLHJ9fSx7Ii4uL2xpYiI6Nzc2LCIuLi9yZWdpc3RyeSI6OTA0LCIuL2Nsb25lcGxvdCI6OTA1LCIuL2hlbHBlcnMiOjkwOCwiLi9zdmd0b2ltZyI6OTEwLCIuL3Rvc3ZnIjo5MTIsZXZlbnRzOjIzN31dLDkxMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9saWIiKSxhPXQoIi4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vY29tcG9uZW50cy9jb2xvciIpLHM9dCgiLi4vY29uc3RhbnRzL3htbG5zX25hbWVzcGFjZXMiKSxsPS8iL2csYz1uZXcgUmVnRXhwKCcoIlRPQkVTVFJJUFBFRCl8KFRPQkVTVFJJUFBFRCIpJywiZyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHUsZixoPXQuX2Z1bGxMYXlvdXQscD1oLl9wYXBlcixkPWguX3RvcHBhcGVyLG09aC53aWR0aCxnPWguaGVpZ2h0O3AuaW5zZXJ0KCJyZWN0IiwiOmZpcnN0LWNoaWxkIikuY2FsbChhLnNldFJlY3QsMCwwLG0sZykuY2FsbChvLmZpbGwsaC5wYXBlcl9iZ2NvbG9yKTt2YXIgdj1oLl9iYXNlUGxvdE1vZHVsZXN8fFtdO2Zvcih1PTA7dTx2Lmxlbmd0aDt1Kyspe3ZhciB5PXZbdV07eS50b1NWRyYmeS50b1NWRyh0KX1pZihkKXt2YXIgeD1kLm5vZGUoKS5jaGlsZE5vZGVzLGI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeCk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7dmFyIF89Ylt1XTtfLmNoaWxkTm9kZXMubGVuZ3RoJiZwLm5vZGUoKS5hcHBlbmRDaGlsZChfKX19aC5fZHJhZ2dlcnMmJmguX2RyYWdnZXJzLnJlbW92ZSgpLHAubm9kZSgpLnN0eWxlLmJhY2tncm91bmQ9IiIscC5zZWxlY3RBbGwoInRleHQiKS5hdHRyKHsiZGF0YS11bmZvcm1hdHRlZCI6bnVsbCwiZGF0YS1tYXRoIjpudWxsfSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1uLnNlbGVjdCh0aGlzKTtpZigiaGlkZGVuIiE9PXRoaXMuc3R5bGUudmlzaWJpbGl0eSYmIm5vbmUiIT09dGhpcy5zdHlsZS5kaXNwbGF5KXt0LnN0eWxlKHt2aXNpYmlsaXR5Om51bGwsZGlzcGxheTpudWxsfSk7dmFyIGU9dGhpcy5zdHlsZS5mb250RmFtaWx5O2UmJi0xIT09ZS5pbmRleE9mKCciJykmJnQuc3R5bGUoImZvbnQtZmFtaWx5IixlLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfWVsc2UgdC5yZW1vdmUoKX0pKTt2YXIgdz1bXTtpZihoLl9ncmFkaWVudFVybFF1ZXJ5UGFydHMpZm9yKGYgaW4gaC5fZ3JhZGllbnRVcmxRdWVyeVBhcnRzKXcucHVzaChmKTtpZihoLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cylmb3IoZiBpbiBoLl9wYXR0ZXJuVXJsUXVlcnlQYXJ0cyl3LnB1c2goZik7dy5sZW5ndGgmJnAuc2VsZWN0QWxsKHcuam9pbigiLCIpKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9dGhpcy5zdHlsZS5maWxsO2UmJi0xIT09ZS5pbmRleE9mKCJ1cmwoIikmJnQuc3R5bGUoImZpbGwiLGUucmVwbGFjZShsLCJUT0JFU1RSSVBQRUQiKSk7dmFyIHI9dGhpcy5zdHlsZS5zdHJva2U7ciYmLTEhPT1yLmluZGV4T2YoInVybCgiKSYmdC5zdHlsZSgic3Ryb2tlIixyLnJlcGxhY2UobCwiVE9CRVNUUklQUEVEIikpfSkpLCJwZGYiIT09ZSYmImVwcyIhPT1lfHxwLnNlbGVjdEFsbCgiI01hdGhKYXhfU1ZHX2dseXBocyBwYXRoIikuYXR0cigic3Ryb2tlLXdpZHRoIiwwKSxwLm5vZGUoKS5zZXRBdHRyaWJ1dGVOUyhzLnhtbG5zLCJ4bWxucyIscy5zdmcpLHAubm9kZSgpLnNldEF0dHJpYnV0ZU5TKHMueG1sbnMsInhtbG5zOnhsaW5rIixzLnhsaW5rKSwic3ZnIj09PWUmJnImJihwLmF0dHIoIndpZHRoIixyKm0pLHAuYXR0cigiaGVpZ2h0IixyKmcpLHAuYXR0cigidmlld0JveCIsIjAgMCAiK20rIiAiK2cpKTt2YXIgVD0obmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKS5zZXJpYWxpemVUb1N0cmluZyhwLm5vZGUoKSk7cmV0dXJuIFQ9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QoImJvZHkiKS5hcHBlbmQoImRpdiIpLnN0eWxlKHtkaXNwbGF5OiJub25lIn0pLmh0bWwoIiIpLHI9dC5yZXBsYWNlKC8oJlteO10qOykvZ2ksKGZ1bmN0aW9uKHQpe3JldHVybiImbHQ7Ij09PXQ/IiYjNjA7IjoiJnJ0OyI9PT10PyImIzYyOyI6LTEhPT10LmluZGV4T2YoIjwiKXx8LTEhPT10LmluZGV4T2YoIj4iKT8iIjplLmh0bWwodCkudGV4dCgpfSkpO3JldHVybiBlLnJlbW92ZSgpLHJ9KFQpLFQ9KFQ9VC5yZXBsYWNlKC8mKD8hXHcrO3xcI1swLTldKzt8IFwjeFswLTlBLUZdKzspL2csIiZhbXA7IikpLnJlcGxhY2UoYywiJyIpLGkuaXNJRSgpJiYoVD0oVD0oVD1ULnJlcGxhY2UoLyIvZ2ksIiciKSkucmVwbGFjZSgvKFwoJyMpKFteJ10qKSgnXCkpL2dpLCcoIiMkMiIpJykpLnJlcGxhY2UoLyhcXCcpL2dpLCciJykpLFR9fSx7Ii4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uL2NvbnN0YW50cy94bWxuc19uYW1lc3BhY2VzIjo3NTMsIi4uL2xpYiI6Nzc2LCJAcGxvdGx5L2QzIjo1OH1dLDkxMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUuaG92ZXJ0ZXh0LHQsImh0eCIpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheShpLm9wYWNpdHksdCwibW8iLCEwKSxuLm1lcmdlQXJyYXkoaS5jb2xvcix0LCJtYyIpO3ZhciBhPWkubGluZTthJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEud2lkdGgsdCwibWx3IikpfX19LHsiLi4vLi4vbGliIjo3NzZ9XSw5MTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5wYXR0ZXJuLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD1sKHtlZGl0VHlwZToiY2FsYyIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJzdHlsZSJ9KSxwPWYoe30sbi5tYXJrZXIubGluZS53aWR0aCx7ZGZsdDowfSksZD1mKHt3aWR0aDpwLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksbT1mKHtsaW5lOmQsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIiKSx7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MSxtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxwYXR0ZXJuOnV9KTtlLmV4cG9ydHM9e3g6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx0ZXh0Om4udGV4dCx0ZXh0dGVtcGxhdGU6byh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXN9KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTphKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGluc2lkZXRleHRhbmNob3I6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImVuZCIsIm1pZGRsZSIsInN0YXJ0Il0sZGZsdDoiZW5kIixlZGl0VHlwZToicGxvdCJ9LHRleHRhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJwbG90In0sdGV4dGZvbnQ6Zih7fSxoLHt9KSxpbnNpZGV0ZXh0Zm9udDpmKHt9LGgse30pLG91dHNpZGV0ZXh0Zm9udDpmKHt9LGgse30pLGNvbnN0cmFpbnRleHQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluc2lkZSIsIm91dHNpZGUiLCJib3RoIiwibm9uZSJdLGRmbHQ6ImJvdGgiLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczpmKHt9LG4uY2xpcG9uYXhpcyx7fSksb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxiYXNlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLG1pbjowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6bSxvZmZzZXRncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYWxpZ25tZW50Z3JvdXA6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6bi5zZWxlY3RlZC5tYXJrZXIub3BhY2l0eSxjb2xvcjpuLnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnNlbGVjdGVkLnRleHRmb250LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTpuLnVuc2VsZWN0ZWQubWFya2VyLm9wYWNpdHksY29sb3I6bi51bnNlbGVjdGVkLm1hcmtlci5jb2xvcixlZGl0VHlwZToic3R5bGUifSx0ZXh0Zm9udDpuLnVuc2VsZWN0ZWQudGV4dGZvbnQsZWRpdFR5cGU6InN0eWxlIn0sX2RlcHJlY2F0ZWQ6e2JhcmRpcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInYiLCJoIl19fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1NiwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4vY29uc3RhbnRzIjo5MTZ9XSw5MTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkPW4uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxtPW4uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxnPXttc1VUQzohKCFlLmJhc2UmJjAhPT1lLmJhc2UpfTsiaCI9PT1lLm9yaWVudGF0aW9uPyhyPWQubWFrZUNhbGNkYXRhKGUsIngiLGcpLHU9bS5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9aShlLG0sInkiLHUpLGg9ISFlLnlwZXJpb2RhbGlnbm1lbnQscD0ieSIpOihyPW0ubWFrZUNhbGNkYXRhKGUsInkiLGcpLHU9ZC5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9aShlLGQsIngiLHUpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQscD0ieCIpLGM9Zi52YWxzO2Zvcih2YXIgdj1NYXRoLm1pbihjLmxlbmd0aCxyLmxlbmd0aCkseT1uZXcgQXJyYXkodikseD0wO3g8djt4KyspeVt4XT17cDpjW3hdLHM6clt4XX0saCYmKHlbeF0ub3JpZ19wPXVbeF0seVt4XVtwKyJFbmQiXT1mLmVuZHNbeF0seVt4XVtwKyJTdGFydCJdPWYuc3RhcnRzW3hdKSxlLmlkcyYmKHlbeF0uaWQ9U3RyaW5nKGUuaWRzW3hdKSk7cmV0dXJuIGEoZSwibWFya2VyIikmJm8odCxlLHt2YWxzOmUubWFya2VyLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLGEoZSwibWFya2VyLmxpbmUiKSYmbyh0LGUse3ZhbHM6ZS5tYXJrZXIubGluZS5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlci5saW5lIixjTGV0dGVyOiJjIn0pLHMoeSxlKSxsKHksZSkseX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTkzLCIuL2FycmF5c190b19jYWxjZGF0YSI6OTEzfV0sOTE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VEVYVFBBRDozLGV2ZW50RGF0YUtleXM6WyJ2YWx1ZSIsImxhYmVsIl19fSx7fV0sOTE3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL3JlZ2lzdHJ5Iikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9dCgiLi9zaWV2ZS5qcyIpO2Z1bmN0aW9uIHUodCxlLHIsbyx1KXtpZihvLmxlbmd0aCl7dmFyIGIsXyx3LFQ7c3dpdGNoKGZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmb3Iocj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbyxzPWVbcl0sbD1zWzBdLnRyYWNlLGM9ImZ1bm5lbCI9PT1sLnR5cGU/bC5fYmFzZTpsLmJhc2UsdT0iaCI9PT1sLm9yaWVudGF0aW9uP2wueGNhbGVuZGFyOmwueWNhbGVuZGFyLGY9ImNhdGVnb3J5Ij09PXQudHlwZXx8Im11bHRpY2F0ZWdvcnkiPT09dC50eXBlP2Z1bmN0aW9uKCl7cmV0dXJuIG51bGx9OnQuZDJjO2lmKGkoYykpe2ZvcihhPTA7YTxNYXRoLm1pbihjLmxlbmd0aCxzLmxlbmd0aCk7YSsrKW89ZihjW2FdLDAsdSksbihvKT8oc1thXS5iPStvLHNbYV0uaGFzQj0xKTpzW2FdLmI9MDtmb3IoO2E8cy5sZW5ndGg7YSsrKXNbYV0uYj0wfWVsc2V7bz1mKGMsMCx1KTt2YXIgaD1uKG8pO2ZvcihvPWg/bzowLGE9MDthPHMubGVuZ3RoO2ErKylzW2FdLmI9byxoJiYoc1thXS5oYXNCPTEpfX19KHIsbyksdS5tb2RlKXtjYXNlIm92ZXJsYXkiOmYoZSxyLG8sdSk7YnJlYWs7Y2FzZSJncm91cCI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2Uub2Zmc2V0P18ucHVzaChUKTpiLnB1c2goVCk7Xy5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG89bmV3IGMobix7cG9zQXhpczplLHNlcE5lZ1ZhbDohMSxvdmVybGFwTm9NZXJnZTohaS5ub3JtfSk7KGZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT10Ll9mdWxsTGF5b3V0LGE9ci5wb3NpdGlvbnMsbz1yLmRpc3RpbmN0UG9zaXRpb25zLHM9ci5taW5EaWZmLGM9ci50cmFjZXMsdT1jLmxlbmd0aCxmPWEubGVuZ3RoIT09by5sZW5ndGgsaD1zKigxLW4uZ2FwKSxnPWwoaSxlLl9pZCkrY1swXVswXS50cmFjZS5vcmllbnRhdGlvbix2PWkuX2FsaWdubWVudE9wdHNbZ118fHt9LHk9MDt5PHU7eSsrKXt2YXIgeCxiLF89Y1t5XSx3PV9bMF0udHJhY2UsVD12W3cuYWxpZ25tZW50Z3JvdXBdfHx7fSxrPU9iamVjdC5rZXlzKFQub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEE9KHg9az9oL2s6Zj9oL3U6aCkqKDEtKG4uZ3JvdXBnYXB8fDApKTtiPWs/KCgyKncuX29mZnNldEluZGV4KzEtaykqeC1BKS8yOmY/KCgyKnkrMS11KSp4LUEpLzI6LUEvMjt2YXIgTT1fWzBdLnQ7TS5iYXJ3aWR0aD1BLE0ucG9mZnNldD1iLE0uYmFyZ3JvdXB3aWR0aD1oLE0uYmFyZGVsdGE9c31yLmJpbldpZHRoPWNbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChyKSxkKGUsciksbShlLHIsZil9KSh0LGUsbyxpKSxmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRyYWNlcyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07aWYodm9pZCAwPT09aVswXS50cmFjZS5iYXNlKWZvcih2YXIgbz1uZXcgYyhbaV0se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6ITAsb3ZlcmxhcE5vTWVyZ2U6ITB9KSxzPTA7czxpLmxlbmd0aDtzKyspe3ZhciBsPWlbc107aWYobC5wIT09YSl7dmFyIHU9by5wdXQobC5wLGwuYitsLnMpO3UmJihsLmI9dSl9fX19KG8sZSksaS5ub3JtPyh2KG8pLHkocixvLGkpKTpnKHIsbyl9KHQsZSxyLF8sdSksYi5sZW5ndGgmJmYoZSxyLGIsdSk7YnJlYWs7Y2FzZSJzdGFjayI6Y2FzZSJyZWxhdGl2ZSI6Zm9yKGI9W10sXz1bXSx3PTA7dzxvLmxlbmd0aDt3Kyspdm9pZCAwPT09KFQ9b1t3XSlbMF0udHJhY2UuYmFzZT9fLnB1c2goVCk6Yi5wdXNoKFQpO18ubGVuZ3RoJiZmdW5jdGlvbih0LGUscixuLGkpe3ZhciBvPW5ldyBjKG4se3Bvc0F4aXM6ZSxzZXBOZWdWYWw6InJlbGF0aXZlIj09PWkubW9kZSxvdmVybGFwTm9NZXJnZTohKGkubm9ybXx8InN0YWNrIj09PWkubW9kZXx8InJlbGF0aXZlIj09PWkubW9kZSl9KTtoKGUsbyxpKSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGwsYyx1LGY9eCh0KSxoPWUudHJhY2VzO2ZvcihsPTA7bDxoLmxlbmd0aDtsKyspaWYobj1oW2xdLCJmdW5uZWwiPT09KGk9blswXS50cmFjZSkudHlwZSlmb3IoYz0wO2M8bi5sZW5ndGg7YysrKSh1PW5bY10pLnMhPT1hJiZlLnB1dCh1LnAsLS41KnUucyk7Zm9yKGw9MDtsPGgubGVuZ3RoO2wrKyl7bj1oW2xdLGk9blswXS50cmFjZSxvPSJmdW5uZWwiPT09aS50eXBlO3ZhciBwPVtdO2ZvcihjPTA7YzxuLmxlbmd0aDtjKyspaWYoKHU9bltjXSkucyE9PWEpe3ZhciBkO2Q9bz91LnM6dS5zK3UuYjt2YXIgbT1lLnB1dCh1LnAsZCksZz1tK2Q7dS5iPW0sdVtmXT1nLHIubm9ybXx8KHAucHVzaChnKSx1Lmhhc0ImJnAucHVzaChtKSl9ci5ub3JtfHwoaS5fZXh0cmVtZXNbdC5faWRdPXMuZmluZEV4dHJlbWVzKHQscCx7dG96ZXJvOiEwLHBhZGRlZDohMH0pKX19KHIsbyxpKTtmb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKylmb3IodmFyIHU9bltsXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBwPXVbZl07aWYocC5zIT09YSlwLmIrcC5zPT09by5nZXQocC5wLHAucykmJihwLl9vdXRtb3N0PSEwKX1pLm5vcm0mJnkocixvLGkpfSgwLGUscixfLHUpLGIubGVuZ3RoJiZmKGUscixiLHUpfSFmdW5jdGlvbih0LGUpe3ZhciByLGksYSxvPXgoZSkscz17fSxsPTEvMCxjPS0xLzA7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylmb3IoYT10W3JdLGk9MDtpPGEubGVuZ3RoO2krKyl7dmFyIHU9YVtpXS5wO24odSkmJihsPU1hdGgubWluKGwsdSksYz1NYXRoLm1heChjLHUpKX12YXIgZj0xZTQvKGMtbCksaD1zLnJvdW5kPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoTWF0aC5yb3VuZChmKih0LWwpKSl9O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspeyhhPXRbcl0pWzBdLnQuZXh0ZW50cz1zO3ZhciBwPWFbMF0udC5wb2Zmc2V0LGQ9QXJyYXkuaXNBcnJheShwKTtmb3IoaT0wO2k8YS5sZW5ndGg7aSsrKXt2YXIgbT1hW2ldLGc9bVtvXS1tLncvMjtpZihuKGcpKXt2YXIgdj1tW29dK20udy8yLHk9aChtLnApO3NbeV0/c1t5XT1bTWF0aC5taW4oZyxzW3ldWzBdKSxNYXRoLm1heCh2LHNbeV1bMV0pXTpzW3ldPVtnLHZdfW0ucDA9bS5wKyhkP3BbaV06cCksbS5wMT1tLnAwK20udyxtLnMwPW0uYixtLnMxPW0uczArbS5zfX19KG8sZSl9fWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV0sbz1uZXcgYyhbYV0se3Bvc0F4aXM6dCxzZXBOZWdWYWw6ITEsb3ZlcmxhcE5vTWVyZ2U6IW4ubm9ybX0pO2godCxvLG4pLG4ubm9ybT8odihvKSx5KGUsbyxuKSk6ZyhlLG8pfX1mdW5jdGlvbiBoKHQsZSxyKXtmb3IodmFyIG49ZS5taW5EaWZmLGk9ZS50cmFjZXMsYT1uKigxLXIuZ2FwKSxvPWEqKDEtKHIuZ3JvdXBnYXB8fDApKSxzPS1vLzIsbD0wO2w8aS5sZW5ndGg7bCsrKXt2YXIgYz1pW2xdWzBdLnQ7Yy5iYXJ3aWR0aD1vLGMucG9mZnNldD1zLGMuYmFyZ3JvdXB3aWR0aD1hLGMuYmFyZGVsdGE9bn1lLmJpbldpZHRoPWlbMF1bMF0udC5iYXJ3aWR0aC8xMDAscChlKSxkKHQsZSksbSh0LGUpfWZ1bmN0aW9uIHAodCl7dmFyIGUscixhPXQudHJhY2VzO2ZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBvLHM9YVtlXSxsPXNbMF0sYz1sLnRyYWNlLHU9bC50LGY9Yy5fb2Zmc2V0fHxjLm9mZnNldCxoPXUucG9mZnNldDtpZihpKGYpKXtmb3Iobz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmLDAscy5sZW5ndGgpLHI9MDtyPG8ubGVuZ3RoO3IrKyluKG9bcl0pfHwob1tyXT1oKTtmb3Iocj1vLmxlbmd0aDtyPHMubGVuZ3RoO3IrKylvLnB1c2goaCk7dS5wb2Zmc2V0PW99ZWxzZSB2b2lkIDAhPT1mJiYodS5wb2Zmc2V0PWYpO3ZhciBwPWMuX3dpZHRofHxjLndpZHRoLGQ9dS5iYXJ3aWR0aDtpZihpKHApKXt2YXIgbT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChwLDAscy5sZW5ndGgpO2ZvcihyPTA7cjxtLmxlbmd0aDtyKyspbihtW3JdKXx8KG1bcl09ZCk7Zm9yKHI9bS5sZW5ndGg7cjxzLmxlbmd0aDtyKyspbS5wdXNoKGQpO2lmKHUuYmFyd2lkdGg9bSx2b2lkIDA9PT1mKXtmb3Iobz1bXSxyPTA7cjxzLmxlbmd0aDtyKyspby5wdXNoKGgrKGQtbVtyXSkvMik7dS5wb2Zmc2V0PW99fWVsc2Ugdm9pZCAwIT09cCYmKHUuYmFyd2lkdGg9cCx2b2lkIDA9PT1mJiYodS5wb2Zmc2V0PWgrKGQtcCkvMikpfX1mdW5jdGlvbiBkKHQsZSl7Zm9yKHZhciByPWUudHJhY2VzLG49eCh0KSxpPTA7aTxyLmxlbmd0aDtpKyspZm9yKHZhciBhPXJbaV0sbz1hWzBdLnQscz1vLnBvZmZzZXQsbD1BcnJheS5pc0FycmF5KHMpLGM9by5iYXJ3aWR0aCx1PUFycmF5LmlzQXJyYXkoYyksZj0wO2Y8YS5sZW5ndGg7ZisrKXt2YXIgaD1hW2ZdLHA9aC53PXU/Y1tmXTpjO2hbbl09aC5wKyhsP3NbZl06cykrcC8yfX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj1lLnRyYWNlcyxpPWUubWluRGlmZi8yO3MubWluRHRpY2sodCxlLm1pbkRpZmYsZS5kaXN0aW5jdFBvc2l0aW9uc1swXSxyKTtmb3IodmFyIGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG8sbCxjLHUsZj1uW2FdLGg9ZlswXSxwPWgudHJhY2UsZD1bXTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKWw9KG89Zlt1XSkucC1pLGM9by5wK2ksZC5wdXNoKGwsYyk7aWYocC53aWR0aHx8cC5vZmZzZXQpe3ZhciBtPWgudCxnPW0ucG9mZnNldCx2PW0uYmFyd2lkdGgseT1BcnJheS5pc0FycmF5KGcpLHg9QXJyYXkuaXNBcnJheSh2KTtmb3IodT0wO3U8Zi5sZW5ndGg7dSsrKXtvPWZbdV07dmFyIGI9eT9nW3VdOmcsXz14P3ZbdV06djtjPShsPW8ucCtiKStfLGQucHVzaChsLGMpfX1wLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxkLHtwYWRkZWQ6ITF9KX19ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj1lLnRyYWNlcyxuPXgodCksaT0wO2k8ci5sZW5ndGg7aSsrKXtmb3IodmFyIGE9cltpXSxvPWFbMF0udHJhY2UsbD1bXSxjPSExLHU9MDt1PGEubGVuZ3RoO3UrKyl7dmFyIGY9YVt1XSxoPWYuYixwPWgrZi5zO2Zbbl09cCxsLnB1c2gocCksZi5oYXNCJiZsLnB1c2goaCksZi5oYXNCJiZmLmJ8fChjPSEwKX1vLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxsLHt0b3plcm86YyxwYWRkZWQ6ITB9KX19ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9dC50cmFjZXMscj0wO3I8ZS5sZW5ndGg7cisrKWZvcih2YXIgbj1lW3JdLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89bltpXTtvLnMhPT1hJiZ0LnB1dChvLnAsby5iK28ucyl9fWZ1bmN0aW9uIHkodCxlLHIpe3ZhciBpPWUudHJhY2VzLG89eCh0KSxsPSJmcmFjdGlvbiI9PT1yLm5vcm0/MToxMDAsYz1sLzFlOSx1PXQubDJjKHQuYzJsKDApKSxmPSJzdGFjayI9PT1yLm1vZGU/bDp1O2Z1bmN0aW9uIGgoZSl7cmV0dXJuIG4odC5jMmwoZSkpJiYoZTx1LWN8fGU+ZitjfHwhbih1KSl9Zm9yKHZhciBwPTA7cDxpLmxlbmd0aDtwKyspe2Zvcih2YXIgZD1pW3BdLG09ZFswXS50cmFjZSxnPVtdLHY9ITEseT0hMSxiPTA7YjxkLmxlbmd0aDtiKyspe3ZhciBfPWRbYl07aWYoXy5zIT09YSl7dmFyIHc9TWF0aC5hYnMobC9lLmdldChfLnAsXy5zKSk7Xy5iKj13LF8ucyo9dzt2YXIgVD1fLmIsaz1UK18ucztfW29dPWssZy5wdXNoKGspLHk9eXx8aChrKSxfLmhhc0ImJihnLnB1c2goVCkseT15fHxoKFQpKSxfLmhhc0ImJl8uYnx8KHY9ITApfX1tLl9leHRyZW1lc1t0Ll9pZF09cy5maW5kRXh0cmVtZXModCxnLHt0b3plcm86dixwYWRkZWQ6eX0pfX1mdW5jdGlvbiB4KHQpe3JldHVybiB0Ll9pZC5jaGFyQXQoMCl9ZS5leHBvcnRzPXtjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLnhheGlzLG49ZS55YXhpcyxpPXQuX2Z1bGxMYXlvdXQsYT10Ll9mdWxsRGF0YSxzPXQuY2FsY2RhdGEsbD1bXSxjPVtdLGY9MDtmPGEubGVuZ3RoO2YrKyl7dmFyIGg9YVtmXTtpZighMD09PWgudmlzaWJsZSYmby50cmFjZUlzKGgsImJhciIpJiZoLnhheGlzPT09ci5faWQmJmgueWF4aXM9PT1uLl9pZCYmKCJoIj09PWgub3JpZW50YXRpb24/bC5wdXNoKHNbZl0pOmMucHVzaChzW2ZdKSxoLl9jb21wdXRlUGgpKWZvcih2YXIgcD10LmNhbGNkYXRhW2ZdLGQ9MDtkPHAubGVuZ3RoO2QrKykiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDAmJihwW2RdLnBoMD1wW2RdLnBoMCgpKSwiZnVuY3Rpb24iPT10eXBlb2YgcFtkXS5waDEmJihwW2RdLnBoMT1wW2RdLnBoMSgpKX12YXIgbT17eENhdDoiY2F0ZWdvcnkiPT09ci50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1yLnR5cGUseUNhdDoiY2F0ZWdvcnkiPT09bi50eXBlfHwibXVsdGljYXRlZ29yeSI9PT1uLnR5cGUsbW9kZTppLmJhcm1vZGUsbm9ybTppLmJhcm5vcm0sZ2FwOmkuYmFyZ2FwLGdyb3VwZ2FwOmkuYmFyZ3JvdXBnYXB9O3UodCxyLG4sYyxtKSx1KHQsbixyLGwsbSl9LHNldEdyb3VwUG9zaXRpb25zOnV9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyI6ODM1LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL3NpZXZlLmpzIjo5MjcsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5MTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vc2NhdHRlci94eV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxsPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdHJhaW50cyIpLmdldEF4aXNHcm91cCx1PXQoIi4vYXR0cmlidXRlcyIpLGY9bi5jb2VyY2VGb250O2Z1bmN0aW9uIGgodCxlLHIsbil7dmFyIGk9ZS5vcmllbnRhdGlvbixhPWVbe3Y6IngiLGg6InkifVtpXSsiYXhpcyJdLG89YyhyLGEpK2kscz1yLl9hbGlnbm1lbnRPcHRzfHx7fSxsPW4oImFsaWdubWVudGdyb3VwIiksdT1zW29dO3V8fCh1PXNbb109e30pO3ZhciBmPXVbbF07Zj9mLnRyYWNlcy5wdXNoKGUpOmY9dVtsXT17dHJhY2VzOltlXSxhbGlnbm1lbnRJbmRleDpPYmplY3Qua2V5cyh1KS5sZW5ndGgsb2Zmc2V0R3JvdXBzOnt9fTt2YXIgaD1uKCJvZmZzZXRncm91cCIpLHA9Zi5vZmZzZXRHcm91cHMsZD1wW2hdO2gmJihkfHwoZD1wW2hdPXtvZmZzZXRJbmRleDpPYmplY3Qua2V5cyhwKS5sZW5ndGh9KSxlLl9vZmZzZXRJbmRleD1kLm9mZnNldEluZGV4KX1mdW5jdGlvbiBwKHQsZSxyLGksYSxvKXt2YXIgcz0hKCExPT09KG89b3x8e30pLm1vZHVsZUhhc1NlbGVjdGVkKSxsPSEoITE9PT1vLm1vZHVsZUhhc1Vuc2VsZWN0ZWQpLGM9ISghMT09PW8ubW9kdWxlSGFzQ29uc3RyYWluKSx1PSEoITE9PT1vLm1vZHVsZUhhc0NsaXBvbmF4aXMpLGg9ISghMT09PW8ubW9kdWxlSGFzVGV4dGFuZ2xlKSxwPSEoITE9PT1vLm1vZHVsZUhhc0luc2lkZWFuY2hvciksZD0hIW8uaGFzUGF0aGJhcixtPUFycmF5LmlzQXJyYXkoYSl8fCJhdXRvIj09PWEsZz1tfHwiaW5zaWRlIj09PWEsdj1tfHwib3V0c2lkZSI9PT1hO2lmKGd8fHYpe3ZhciB5PWYoaSwidGV4dGZvbnQiLHIuZm9udCkseD1uLmV4dGVuZEZsYXQoe30seSksYj0hKHQudGV4dGZvbnQmJnQudGV4dGZvbnQuY29sb3IpO2lmKGImJmRlbGV0ZSB4LmNvbG9yLGYoaSwiaW5zaWRldGV4dGZvbnQiLHgpLGQpe3ZhciBfPW4uZXh0ZW5kRmxhdCh7fSx5KTtiJiZkZWxldGUgXy5jb2xvcixmKGksInBhdGhiYXIudGV4dGZvbnQiLF8pfXYmJmYoaSwib3V0c2lkZXRleHRmb250Iix5KSxzJiZpKCJzZWxlY3RlZC50ZXh0Zm9udC5jb2xvciIpLGwmJmkoInVuc2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxjJiZpKCJjb25zdHJhaW50ZXh0IiksdSYmaSgiY2xpcG9uYXhpcyIpLGgmJmkoInRleHRhbmdsZSIpLGkoInRleHR0ZW1wbGF0ZSIpfWcmJnAmJmkoImluc2lkZXRleHRhbmNob3IiKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHUscixpKX1pZihvKHQsZSxjLGYpKXtzKHQsZSxjLGYpLGYoInhob3ZlcmZvcm1hdCIpLGYoInlob3ZlcmZvcm1hdCIpLGYoIm9yaWVudGF0aW9uIixlLngmJiFlLnk/ImgiOiJ2IiksZigiYmFzZSIpLGYoIm9mZnNldCIpLGYoIndpZHRoIiksZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKTt2YXIgaD1mKCJ0ZXh0cG9zaXRpb24iKTtwKHQsZSxjLGYsaCx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITAsbW9kdWxlSGFzVW5zZWxlY3RlZDohMCxtb2R1bGVIYXNDb25zdHJhaW46ITAsbW9kdWxlSGFzQ2xpcG9uYXhpczohMCxtb2R1bGVIYXNUZXh0YW5nbGU6ITAsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiEwfSksbCh0LGUsZixyLGMpO3ZhciBkPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3IsbT1hLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTttKHQsZSxkfHxpLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLG0odCxlLGR8fGkuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZil9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByO2Z1bmN0aW9uIGkodCl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsdSx0KX1pZigiZ3JvdXAiPT09ZS5iYXJtb2RlKWZvcih2YXIgYT0wO2E8dC5sZW5ndGg7YSsrKSJiYXIiPT09KHI9dFthXSkudHlwZSYmKHIuX2lucHV0LGgoMCxyLGUsaSkpfSxoYW5kbGVHcm91cGluZ0RlZmF1bHRzOmgsaGFuZGxlVGV4dDpwfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vY29uc3RyYWludHMiOjgzNSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEyMTgsIi4vYXR0cmlidXRlcyI6OTE0LCIuL3N0eWxlX2RlZmF1bHRzIjo5Mjl9XSw5MTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC54PSJ4VmFsImluIGU/ZS54VmFsOmUueCx0Lnk9InlWYWwiaW4gZT9lLnlWYWw6ZS55LGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCJoIj09PXIub3JpZW50YXRpb24/KHQubGFiZWw9dC55LHQudmFsdWU9dC54KToodC5sYWJlbD10LngsdC52YWx1ZT10LnkpLHR9fSx7fV0sOTIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O3IuY29lcmNlU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGV8fCF0Lm5vQmxhbmspcmV0dXJuIGV9ZWxzZSBpZigoIm51bWJlciI9PXR5cGVvZiBlfHwhMD09PWUpJiYhdC5zdHJpY3QpcmV0dXJuIFN0cmluZyhlKTtyZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VOdW1iZXI9ZnVuY3Rpb24odCxlLHIpe2lmKG4oZSkpe2U9K2U7dmFyIGk9dC5taW4sYT10Lm1heDtpZighKHZvaWQgMCE9PWkmJmU8aXx8dm9pZCAwIT09YSYmZT5hKSlyZXR1cm4gZX1yZXR1cm4gdm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VDb2xvcj1mdW5jdGlvbih0LGUscil7cmV0dXJuIGkoZSkuaXNWYWxpZCgpP2U6dm9pZCAwIT09cj9yOnQuZGZsdH0sci5jb2VyY2VFbnVtZXJhdGVkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5jb2VyY2VOdW1iZXImJihlPStlKSwtMSE9PXQudmFsdWVzLmluZGV4T2YoZSk/ZTp2b2lkIDAhPT1yP3I6dC5kZmx0fSxyLmdldFZhbHVlPWZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/ZTx0Lmxlbmd0aCYmKHI9dFtlXSk6cj10LHJ9LHIuZ2V0TGluZVdpZHRoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIDA8ZS5tbHc/ZS5tbHc6YSh0Lm1hcmtlci5saW5lLndpZHRoKT8wOnQubWFya2VyLmxpbmUud2lkdGh9fSx7Ii4uLy4uL2xpYiI6Nzc2LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sOTIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9saWIiKS5maWxsVGV4dCxzPXQoIi4vaGVscGVycyIpLmdldExpbmVXaWR0aCxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQsYz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIHUodCxlLHIsaSxhKXt2YXIgcyx1LGYsaCxwLGQsbSxnPXQuY2Qsdj1nWzBdLnRyYWNlLHk9Z1swXS50LHg9ImNsb3Nlc3QiPT09aSxiPSJ3YXRlcmZhbGwiPT09di50eXBlLF89dC5tYXhIb3ZlckRpc3RhbmNlLHc9dC5tYXhTcGlrZURpc3RhbmNlOyJoIj09PXYub3JpZW50YXRpb24/KHM9cix1PWUsZj0ieSIsaD0ieCIscD16LGQ9SSk6KHM9ZSx1PXIsZj0ieCIsaD0ieSIsZD16LHA9SSk7dmFyIFQ9dltmKyJwZXJpb2QiXSxrPXh8fFQ7ZnVuY3Rpb24gQSh0KXtyZXR1cm4gUyh0LC0xKX1mdW5jdGlvbiBNKHQpe3JldHVybiBTKHQsMSl9ZnVuY3Rpb24gUyh0LGUpe3ZhciByPXQudztyZXR1cm4gdFtmXStlKnIvMn1mdW5jdGlvbiBFKHQpe3JldHVybiB0W2YrIkVuZCJdLXRbZisiU3RhcnQiXX12YXIgTD14P0E6VD9mdW5jdGlvbih0KXtyZXR1cm4gdC5wLUUodCkvMn06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWluKEEodCksdC5wLXkuYmFyZGVsdGEvMil9LEM9eD9NOlQ/ZnVuY3Rpb24odCl7cmV0dXJuIHQucCtFKHQpLzJ9OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmRlbHRhLzIpfTtmdW5jdGlvbiBQKHQsZSxyKXtyZXR1cm4gYS5maW5pdGVSYW5nZSYmKHI9MCksbi5pbmJveCh0LXMsZS1zLHIrTWF0aC5taW4oMSxNYXRoLmFicyhlLXQpL20pLTEpfWZ1bmN0aW9uIEkodCl7cmV0dXJuIFAoTCh0KSxDKHQpLF8pfWZ1bmN0aW9uIE8odCl7dmFyIGU9dFtoXTtpZihiKXt2YXIgcj1NYXRoLmFicyh0LnJhd1MpfHwwO3U+MD9lKz1yOnU8MCYmKGUtPXIpfXJldHVybiBlfWZ1bmN0aW9uIHoodCl7dmFyIGU9dSxyPXQuYixpPU8odCk7cmV0dXJuIG4uaW5ib3goci1lLGktZSxfKyhpLWUpLyhpLXIpLTEpfXZhciBEPXRbZisiYSJdLFI9dFtoKyJhIl07bT1NYXRoLmFicyhELnIyYyhELnJhbmdlWzFdKS1ELnIyYyhELnJhbmdlWzBdKSk7dmFyIEY9bi5nZXREaXN0YW5jZUZ1bmN0aW9uKGkscCxkLChmdW5jdGlvbih0KXtyZXR1cm4ocCh0KStkKHQpKS8yfSkpO2lmKG4uZ2V0Q2xvc2VzdChnLEYsdCksITEhPT10LmluZGV4JiZnW3QuaW5kZXhdLnAhPT1jKXtrfHwoTD1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5taW4oQSh0KSx0LnAteS5iYXJncm91cHdpZHRoLzIpfSxDPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNKHQpLHQucCt5LmJhcmdyb3Vwd2lkdGgvMil9KTt2YXIgQj1nW3QuaW5kZXhdLE49di5iYXNlP0IuYitCLnM6Qi5zO3RbaCsiMCJdPXRbaCsiMSJdPVIuYzJwKEJbaF0sITApLHRbaCsiTGFiZWxWYWwiXT1OO3ZhciBqPXkuZXh0ZW50c1t5LmV4dGVudHMucm91bmQoQi5wKV07dFtmKyIwIl09RC5jMnAoeD9MKEIpOmpbMF0sITApLHRbZisiMSJdPUQuYzJwKHg/QyhCKTpqWzFdLCEwKTt2YXIgVT12b2lkIDAhPT1CLm9yaWdfcDtyZXR1cm4gdFtmKyJMYWJlbFZhbCJdPVU/Qi5vcmlnX3A6Qi5wLHQubGFiZWxMYWJlbD1sKEQsdFtmKyJMYWJlbFZhbCJdLHZbZisiaG92ZXJmb3JtYXQiXSksdC52YWx1ZUxhYmVsPWwoUix0W2grIkxhYmVsVmFsIl0sdltoKyJob3ZlcmZvcm1hdCJdKSx0LmJhc2VMYWJlbD1sKFIsQi5iLHZbaCsiaG92ZXJmb3JtYXQiXSksdC5zcGlrZURpc3RhbmNlPShmdW5jdGlvbih0KXt2YXIgZT11LHI9dC5iLGk9Tyh0KTtyZXR1cm4gbi5pbmJveChyLWUsaS1lLHcrKGktZSkvKGktciktMSl9KEIpK2Z1bmN0aW9uKHQpe3JldHVybiBQKEEodCksTSh0KSx3KX0oQikpLzIsdFtmKyJTcGlrZSJdPUQuYzJwKEIucCwhMCksbyhCLHYsdCksdC5ob3ZlcnRlbXBsYXRlPXYuaG92ZXJ0ZW1wbGF0ZSx0fX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9ZS5tY2N8fHQubWFya2VyLmNvbG9yLG49ZS5tbGNjfHx0Lm1hcmtlci5saW5lLmNvbG9yLGk9cyh0LGUpO3JldHVybiBhLm9wYWNpdHkocik/cjphLm9wYWNpdHkobikmJmk/bjp2b2lkIDB9ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscixuLGEpe3ZhciBvPXUodCxlLHIsbixhKTtpZihvKXt2YXIgcz1vLmNkLGw9c1swXS50cmFjZSxjPXNbby5pbmRleF07cmV0dXJuIG8uY29sb3I9ZihsLGMpLGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShjLGwsbyksW29dfX0saG92ZXJPbkJhcnM6dSxnZXRUcmFjZUNvbG9yOmZ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2hlbHBlcnMiOjkyMH1dLDkyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuY3Jvc3NUcmFjZURlZmF1bHRzLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLGFycmF5c1RvQ2FsY2RhdGE6dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLHN0eWxlT25TZWxlY3Q6dCgiLi9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJiYXIiLCJvcmllbnRlZCIsImVycm9yQmFyc09LIiwic2hvd0xlZ2VuZCIsInpvb21TY2FsZSJdLGFuaW1hdGFibGU6ITAsbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuL2FycmF5c190b19jYWxjZGF0YSI6OTEzLCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jYWxjIjo5MTUsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6OTE3LCIuL2RlZmF1bHRzIjo5MTgsIi4vZXZlbnRfZGF0YSI6OTE5LCIuL2hvdmVyIjo5MjEsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjkyMywiLi9sYXlvdXRfZGVmYXVsdHMiOjkyNCwiLi9wbG90Ijo5MjUsIi4vc2VsZWN0Ijo5MjYsIi4vc3R5bGUiOjkyOH1dLDkyMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2Jhcm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInN0YWNrIiwiZ3JvdXAiLCJvdmVybGF5IiwicmVsYXRpdmUiXSxkZmx0OiJncm91cCIsZWRpdFR5cGU6ImNhbGMifSxiYXJub3JtOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyIiLCJmcmFjdGlvbiIsInBlcmNlbnQiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sOTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBzKHIsbil7cmV0dXJuIGEuY29lcmNlKHQsZSxvLHIsbil9Zm9yKHZhciBsPSExLGM9ITEsdT0hMSxmPXt9LGg9cygiYmFybW9kZSIpLHA9MDtwPHIubGVuZ3RoO3ArKyl7dmFyIGQ9cltwXTtpZihuLnRyYWNlSXMoZCwiYmFyIikmJmQudmlzaWJsZSl7aWYobD0hMCwiZ3JvdXAiPT09aCl7dmFyIG09ZC54YXhpcytkLnlheGlzO2ZbbV0mJih1PSEwKSxmW21dPSEwfWlmKGQudmlzaWJsZSYmImhpc3RvZ3JhbSI9PT1kLnR5cGUpImNhdGVnb3J5IiE9PWkuZ2V0RnJvbUlkKHtfZnVsbExheW91dDplfSxkWyJ2Ij09PWQub3JpZW50YXRpb24/InhheGlzIjoieWF4aXMiXSkudHlwZSYmKGM9ITApfX1sPygib3ZlcmxheSIhPT1oJiZzKCJiYXJub3JtIikscygiYmFyZ2FwIixjJiYhdT8wOi4yKSxzKCJiYXJncm91cGdhcCIpKTpkZWxldGUgZS5iYXJtb2RlfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTIzfV0sOTI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImZhc3QtaXNudW1lcmljIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi8uLi9yZWdpc3RyeSIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS50aWNrVGV4dCxmPXQoIi4vdW5pZm9ybV90ZXh0IiksaD1mLnJlY29yZE1pblRleHRTaXplLHA9Zi5jbGVhck1pblRleHRTaXplLGQ9dCgiLi9zdHlsZSIpLG09dCgiLi9oZWxwZXJzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9dCgiLi9hdHRyaWJ1dGVzIikseT12LnRleHQseD12LnRleHRwb3NpdGlvbixiPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxfPWcuVEVYVFBBRDtmdW5jdGlvbiB3KHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIFQodCl7aWYodC5pZHMpcmV0dXJuIHd9ZnVuY3Rpb24gayh0LGUpe3JldHVybiB0PGU/MTotMX1mdW5jdGlvbiBBKHQsZSxyLG4pe3ZhciBpO3JldHVybiFlLnVuaWZvcm10ZXh0Lm1vZGUmJk0ocik/KG4mJihpPW4oKSksdC50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtpJiZpKCl9KSkpOnR9ZnVuY3Rpb24gTSh0KXtyZXR1cm4gdCYmdC5kdXJhdGlvbj4wfWZ1bmN0aW9uIFModCl7cmV0dXJuImF1dG8iPT09dD8wOnR9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU1hdGguUEkvMTgwKmUsbj1NYXRoLmFicyhNYXRoLnNpbihyKSksaT1NYXRoLmFicyhNYXRoLmNvcyhyKSk7cmV0dXJue3g6dC53aWR0aCppK3QuaGVpZ2h0Km4seTp0LndpZHRoKm4rdC5oZWlnaHQqaX19ZnVuY3Rpb24gTCh0LGUscixuLGksYSl7dmFyIG89ISFhLmlzSG9yaXpvbnRhbCxzPSEhYS5jb25zdHJhaW5lZCxsPWEuYW5nbGV8fDAsYz1hLmFuY2hvcnx8ImVuZCIsdT0iZW5kIj09PWMsZj0ic3RhcnQiPT09YyxoPSgoYS5sZWZ0VG9SaWdodHx8MCkrMSkvMixwPTEtaCxkPWkud2lkdGgsbT1pLmhlaWdodCxnPU1hdGguYWJzKGUtdCksdj1NYXRoLmFicyhuLXIpLHk9Zz4yKl8mJnY+MipfP186MDtnLT0yKnksdi09Mip5O3ZhciB4PVMobCk7ImF1dG8iIT09bHx8ZDw9ZyYmbTw9dnx8IShkPmd8fG0+dil8fChkPnZ8fG0+ZykmJmQ8bT09Zzx2fHwoeCs9OTApO3ZhciBiPUUoaSx4KSx3PTE7cyYmKHc9TWF0aC5taW4oMSxnL2IueCx2L2IueSkpO3ZhciBUPWkubGVmdCpwK2kucmlnaHQqaCxBPShpLnRvcCtpLmJvdHRvbSkvMixNPSh0K18pKnArKGUtXykqaCxMPShyK24pLzIsQz0wLFA9MDtpZihmfHx1KXt2YXIgST0obz9iLng6Yi55KS8yLE89bz9rKHQsZSk6ayhyLG4pO28/Zj8oTT10K08qeSxDPS1PKkkpOihNPWUtTyp5LEM9TypJKTpmPyhMPXIrTyp5LFA9LU8qSSk6KEw9bi1PKnksUD1PKkkpfXJldHVybnt0ZXh0WDpULHRleHRZOkEsdGFyZ2V0WDpNLHRhcmdldFk6TCxhbmNob3JYOkMsYW5jaG9yWTpQLHNjYWxlOncscm90YXRlOnh9fWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixmLGcsdil7dmFyIHc9ZS54YXhpcyxDPWUueWF4aXMsUD10Ll9mdWxsTGF5b3V0O2d8fChnPXttb2RlOlAuYmFybW9kZSxub3JtOlAuYmFybW9kZSxnYXA6UC5iYXJnYXAsZ3JvdXBnYXA6UC5iYXJncm91cGdhcH0scCgiYmFyIixQKSk7dmFyIEk9YS5tYWtlVHJhY2VHcm91cHMoZixyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1yWzBdLnRyYWNlLHA9IndhdGVyZmFsbCI9PT1mLnR5cGUsST0iZnVubmVsIj09PWYudHlwZSxPPSJiYXIiPT09Zi50eXBlfHxJLHo9MDtwJiZmLmNvbm5lY3Rvci52aXNpYmxlJiYiYmV0d2VlbiI9PT1mLmNvbm5lY3Rvci5tb2RlJiYoej1mLmNvbm5lY3Rvci5saW5lLndpZHRoLzIpO3ZhciBEPSJoIj09PWYub3JpZW50YXRpb24sUj1NKGcpLEY9YS5lbnN1cmVTaW5nbGUoYywiZyIsInBvaW50cyIpLEI9VChmKSxOPUYuc2VsZWN0QWxsKCJnLnBvaW50IikuZGF0YShhLmlkZW50aXR5LEIpO04uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJwb2ludCIsITApLE4uZXhpdCgpLnJlbW92ZSgpLE4uZWFjaCgoZnVuY3Rpb24oYyxwKXt2YXIgVCxNLEk9bi5zZWxlY3QodGhpcyksRj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxuP1tpLGFdOlthLGldfShjLHcsQyxEKSxCPUZbMF1bMF0sTj1GWzBdWzFdLGo9RlsxXVswXSxVPUZbMV1bMV0sVj0wPT0oRD9OLUI6VS1qKTtpZihWJiZPJiZtLmdldExpbmVXaWR0aChmLGMpJiYoVj0hMSksVnx8KFY9IShpKEIpJiZpKE4pJiZpKGopJiZpKFUpKSksYy5pc0JsYW5rPVYsViYmKEQ/Tj1COlU9aikseiYmIVYmJihEPyhCLT1rKEIsTikqeixOKz1rKEIsTikqeik6KGotPWsoaixVKSp6LFUrPWsoaixVKSp6KSksIndhdGVyZmFsbCI9PT1mLnR5cGUpe2lmKCFWKXt2YXIgSD1mW2MuZGlyXS5tYXJrZXI7VD1ILmxpbmUud2lkdGgsTT1ILmNvbG9yfX1lbHNlIFQ9bS5nZXRMaW5lV2lkdGgoZixjKSxNPWMubWN8fGYubWFya2VyLmNvbG9yO2Z1bmN0aW9uIHEodCl7dmFyIGU9bi5yb3VuZChULzIlMSwyKTtyZXR1cm4gMD09PWcuZ2FwJiYwPT09Zy5ncm91cGdhcD9uLnJvdW5kKE1hdGgucm91bmQodCktZSwyKTp0fWlmKCF0Ll9jb250ZXh0LnN0YXRpY1Bsb3Qpe3ZhciBHPXMub3BhY2l0eShNKTwxfHxUPi4wMT9xOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gciYmdD09PWU/dDpNYXRoLmFicyh0LWUpPj0yP3EodCk6dD5lP01hdGguY2VpbCh0KTpNYXRoLmZsb29yKHQpfTtCPUcoQixOLEQpLE49RyhOLEIsRCksaj1HKGosVSwhRCksVT1HKFUsaiwhRCl9dmFyIFk9QShhLmVuc3VyZVNpbmdsZShJLCJwYXRoIiksUCxnLHYpO2lmKFkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJkIixpc05hTigoTi1CKSooVS1qKSl8fFYmJnQuX2NvbnRleHQuc3RhdGljUGxvdD8iTTAsMFoiOiJNIitCKyIsIitqKyJWIitVKyJIIitOKyJWIitqKyJaIikuY2FsbChsLnNldENsaXBVcmwsZS5sYXllckNsaXBJZCx0KSwhUC51bmlmb3JtdGV4dC5tb2RlJiZSKXt2YXIgVz1sLm1ha2VQb2ludFN0eWxlRm5zKGYpO2wuc2luZ2xlUG9pbnRTdHlsZShjLFksZixXLHQpfSFmdW5jdGlvbih0LGUscixuLGkscyxjLGYscCxnLHYpe3ZhciB3LFQ9ZS54YXhpcyxNPWUueWF4aXMsQz10Ll9mdWxsTGF5b3V0O2Z1bmN0aW9uIFAoZSxyLG4pe3JldHVybiBhLmVuc3VyZVNpbmdsZShlLCJ0ZXh0IikudGV4dChyKS5hdHRyKHtjbGFzczoiYmFydGV4dCBiYXJ0ZXh0LSIrdywidGV4dC1hbmNob3IiOiJtaWRkbGUiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChsLmZvbnQsbikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KX12YXIgST1uWzBdLnRyYWNlLE89ImgiPT09SS5vcmllbnRhdGlvbix6PWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIG8scz1lWzBdLnRyYWNlO289cy50ZXh0dGVtcGxhdGU/ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz1lWzBdLnRyYWNlLHM9YS5jYXN0T3B0aW9uKG8sciwidGV4dHRlbXBsYXRlIik7aWYoIXMpcmV0dXJuIiI7dmFyIGwsYyxmLGgscD0id2F0ZXJmYWxsIj09PW8udHlwZSxkPSJmdW5uZWwiPT09by50eXBlOyJoIj09PW8ub3JpZW50YXRpb24/KGw9InkiLGM9aSxmPSJ4IixoPW4pOihsPSJ4IixjPW4sZj0ieSIsaD1pKTtmdW5jdGlvbiBtKHQpe3JldHVybiB1KGgsaC5jMmwodCksITApLnRleHR9dmFyIGc9ZVtyXSx2PXt9O3YubGFiZWw9Zy5wLHYubGFiZWxMYWJlbD12W2wrIkxhYmVsIl09KHk9Zy5wLHUoYyxjLmMybCh5KSwhMCkudGV4dCk7dmFyIHk7dmFyIHg9YS5jYXN0T3B0aW9uKG8sZy5pLCJ0ZXh0Iik7KDA9PT14fHx4KSYmKHYudGV4dD14KTt2LnZhbHVlPWcucyx2LnZhbHVlTGFiZWw9dltmKyJMYWJlbCJdPW0oZy5zKTt2YXIgXz17fTtiKF8sbyxnLmkpLHAmJih2LmRlbHRhPStnLnJhd1N8fGcucyx2LmRlbHRhTGFiZWw9bSh2LmRlbHRhKSx2LmZpbmFsPWcudix2LmZpbmFsTGFiZWw9bSh2LmZpbmFsKSx2LmluaXRpYWw9di5maW5hbC12LmRlbHRhLHYuaW5pdGlhbExhYmVsPW0odi5pbml0aWFsKSk7ZCYmKHYudmFsdWU9Zy5zLHYudmFsdWVMYWJlbD1tKHYudmFsdWUpLHYucGVyY2VudEluaXRpYWw9Zy5iZWdSLHYucGVyY2VudEluaXRpYWxMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5iZWdSKSx2LnBlcmNlbnRQcmV2aW91cz1nLmRpZlIsdi5wZXJjZW50UHJldmlvdXNMYWJlbD1hLmZvcm1hdFBlcmNlbnQoZy5kaWZSKSx2LnBlcmNlbnRUb3RhbD1nLnN1bVIsdi5wZXJjZW5Ub3RhbExhYmVsPWEuZm9ybWF0UGVyY2VudChnLnN1bVIpKTt2YXIgdz1hLmNhc3RPcHRpb24obyxnLmksImN1c3RvbWRhdGEiKTt3JiYodi5jdXN0b21kYXRhPXcpO3JldHVybiBhLnRleHR0ZW1wbGF0ZVN0cmluZyhzLHYsdC5fZDNsb2NhbGUsXyx2LG8uX21ldGF8fHt9KX0odCxlLHIsbixpKTpzLnRleHRpbmZvP2Z1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbMF0udHJhY2Usbz0iaCI9PT1pLm9yaWVudGF0aW9uLHM9IndhdGVyZmFsbCI9PT1pLnR5cGUsbD0iZnVubmVsIj09PWkudHlwZTtmdW5jdGlvbiBjKHQpe3JldHVybiB1KG8/cjpuLCt0LCEwKS50ZXh0fXZhciBmLGg9aS50ZXh0aW5mbyxwPXRbZV0sZD1oLnNwbGl0KCIrIiksbT1bXSxnPWZ1bmN0aW9uKHQpe3JldHVybi0xIT09ZC5pbmRleE9mKHQpfTtnKCJsYWJlbCIpJiZtLnB1c2goKHY9dFtlXS5wLHUobz9uOnIsdiwhMCkudGV4dCkpO3ZhciB2O2coInRleHQiKSYmKDA9PT0oZj1hLmNhc3RPcHRpb24oaSxwLmksInRleHQiKSl8fGYpJiZtLnB1c2goZik7aWYocyl7dmFyIHk9K3AucmF3U3x8cC5zLHg9cC52LGI9eC15O2coImluaXRpYWwiKSYmbS5wdXNoKGMoYikpLGcoImRlbHRhIikmJm0ucHVzaChjKHkpKSxnKCJmaW5hbCIpJiZtLnB1c2goYyh4KSl9aWYobCl7ZygidmFsdWUiKSYmbS5wdXNoKGMocC5zKSk7dmFyIF89MDtnKCJwZXJjZW50IGluaXRpYWwiKSYmXysrLGcoInBlcmNlbnQgcHJldmlvdXMiKSYmXysrLGcoInBlcmNlbnQgdG90YWwiKSYmXysrO3ZhciB3PV8+MTtnKCJwZXJjZW50IGluaXRpYWwiKSYmKGY9YS5mb3JtYXRQZXJjZW50KHAuYmVnUiksdyYmKGYrPSIgb2YgaW5pdGlhbCIpLG0ucHVzaChmKSksZygicGVyY2VudCBwcmV2aW91cyIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5kaWZSKSx3JiYoZis9IiBvZiBwcmV2aW91cyIpLG0ucHVzaChmKSksZygicGVyY2VudCB0b3RhbCIpJiYoZj1hLmZvcm1hdFBlcmNlbnQocC5zdW1SKSx3JiYoZis9IiBvZiB0b3RhbCIpLG0ucHVzaChmKSl9cmV0dXJuIG0uam9pbigiPGJyPiIpfShlLHIsbixpKTptLmdldFZhbHVlKHMudGV4dCxyKTtyZXR1cm4gbS5jb2VyY2VTdHJpbmcoeSxvKX0oQyxuLGksVCxNKTt3PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bS5nZXRWYWx1ZSh0LnRleHRwb3NpdGlvbixlKTtyZXR1cm4gbS5jb2VyY2VFbnVtZXJhdGVkKHgscil9KEksaSk7dmFyIEQ9InN0YWNrIj09PWcubW9kZXx8InJlbGF0aXZlIj09PWcubW9kZSxSPW5baV0sRj0hRHx8Ui5fb3V0bW9zdDtpZighenx8Im5vbmUiPT09d3x8KFIuaXNCbGFua3x8cz09PWN8fGY9PT1wKSYmKCJhdXRvIj09PXd8fCJpbnNpZGUiPT09dykpcmV0dXJuIHZvaWQgci5zZWxlY3QoInRleHQiKS5yZW1vdmUoKTt2YXIgQj1DLmZvbnQsTj1kLmdldEJhckNvbG9yKG5baV0sSSksaj1kLmdldEluc2lkZVRleHRGb250KEksaSxCLE4pLFU9ZC5nZXRPdXRzaWRlVGV4dEZvbnQoSSxpLEIpLFY9ci5kYXR1bSgpO08/ImxvZyI9PT1ULnR5cGUmJlYuczA8PTAmJihzPVQucmFuZ2VbMF08VC5yYW5nZVsxXT8wOlQuX2xlbmd0aCk6ImxvZyI9PT1NLnR5cGUmJlYuczA8PTAmJihmPU0ucmFuZ2VbMF08TS5yYW5nZVsxXT9NLl9sZW5ndGg6MCk7dmFyIEgscSxHLFksVyxYPU1hdGguYWJzKGMtcyktMipfLFo9TWF0aC5hYnMocC1mKS0yKl87Im91dHNpZGUiPT09dyYmKEZ8fFIuaGFzQnx8KHc9Imluc2lkZSIpKTtpZigiYXV0byI9PT13KWlmKEYpe3c9Imluc2lkZSIsVz1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGopLEg9UChyLHosVykscT1sLmJCb3goSC5ub2RlKCkpLEc9cS53aWR0aCxZPXEuaGVpZ2h0O3ZhciBKPUc8PVgmJlk8PVosSz1HPD1aJiZZPD1YLFE9Tz9YPj1HKihaL1kpOlo+PVkqKFgvRyk7Rz4wJiZZPjAmJihKfHxLfHxRKT93PSJpbnNpZGUiOih3PSJvdXRzaWRlIixILnJlbW92ZSgpLEg9bnVsbCl9ZWxzZSB3PSJpbnNpZGUiO2lmKCFIKXtXPWEuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09dz9VOmopO3ZhciAkPShIPVAocix6LFcpKS5hdHRyKCJ0cmFuc2Zvcm0iKTtpZihILmF0dHIoInRyYW5zZm9ybSIsIiIpLHE9bC5iQm94KEgubm9kZSgpKSxHPXEud2lkdGgsWT1xLmhlaWdodCxILmF0dHIoInRyYW5zZm9ybSIsJCksRzw9MHx8WTw9MClyZXR1cm4gdm9pZCBILnJlbW92ZSgpfXZhciB0dCxldCxydD1JLnRleHRhbmdsZTsib3V0c2lkZSI9PT13PyhldD0iYm90aCI9PT1JLmNvbnN0cmFpbnRleHR8fCJvdXRzaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8scz0hIWEuaXNIb3Jpem9udGFsLGw9ISFhLmNvbnN0cmFpbmVkLGM9YS5hbmdsZXx8MCx1PWkud2lkdGgsZj1pLmhlaWdodCxoPU1hdGguYWJzKGUtdCkscD1NYXRoLmFicyhuLXIpO289cz9wPjIqXz9fOjA6aD4yKl8/XzowO3ZhciBkPTE7bCYmKGQ9cz9NYXRoLm1pbigxLHAvZik6TWF0aC5taW4oMSxoL3UpKTt2YXIgbT1TKGMpLGc9RShpLG0pLHY9KHM/Zy54OmcueSkvMix5PShpLmxlZnQraS5yaWdodCkvMix4PShpLnRvcCtpLmJvdHRvbSkvMixiPSh0K2UpLzIsdz0ocituKS8yLFQ9MCxBPTAsTT1zP2soZSx0KTprKHIsbik7cz8oYj1lLU0qbyxUPU0qdik6KHc9bitNKm8sQT0tTSp2KTtyZXR1cm57dGV4dFg6eSx0ZXh0WTp4LHRhcmdldFg6Yix0YXJnZXRZOncsYW5jaG9yWDpULGFuY2hvclk6QSxzY2FsZTpkLHJvdGF0ZTptfX0ocyxjLGYscCxxLHtpc0hvcml6b250YWw6Tyxjb25zdHJhaW5lZDpldCxhbmdsZTpydH0pKTooZXQ9ImJvdGgiPT09SS5jb25zdHJhaW50ZXh0fHwiaW5zaWRlIj09PUkuY29uc3RyYWludGV4dCx0dD1MKHMsYyxmLHAscSx7aXNIb3Jpem9udGFsOk8sY29uc3RyYWluZWQ6ZXQsYW5nbGU6cnQsYW5jaG9yOkkuaW5zaWRldGV4dGFuY2hvcn0pKTt0dC5mb250U2l6ZT1XLnNpemUsaChJLnR5cGUsdHQsQyksUi50cmFuc2Zvcm09dHQsQShILEMsZyx2KS5hdHRyKCJ0cmFuc2Zvcm0iLGEuZ2V0VGV4dFRyYW5zZm9ybSh0dCkpfSh0LGUsSSxyLHAsQixOLGosVSxnLHYpLGUubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KGMsSS5zZWxlY3QoInRleHQiKSx3LEMsZi54Y2FsZW5kYXIsZi55Y2FsZW5kYXIpfSkpO3ZhciBqPSExPT09Zi5jbGlwb25heGlzO2wuc2V0Q2xpcFVybChjLGo/bnVsbDplLmxheWVyQ2xpcElkLHQpfSkpO2MuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxJLGUsZyl9LHRvTW92ZUluc2lkZUJhcjpMfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjkxNCwiLi9jb25zdGFudHMiOjkxNiwiLi9oZWxwZXJzIjo5MjAsIi4vc3R5bGUiOjkyOCwiLi91bmlmb3JtX3RleHQiOjkzMCwiQHBsb3RseS9kMyI6NTgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5MjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBhPWUuYzJwKG4/dC5zMDp0LnAwLCEwKSxvPWUuYzJwKG4/dC5zMTp0LnAxLCEwKSxzPXIuYzJwKG4/dC5wMDp0LnMwLCEwKSxsPXIuYzJwKG4/dC5wMTp0LnMxLCEwKTtyZXR1cm4gaT9bKGErbykvMiwocytsKS8yXTpuP1tvLChzK2wpLzJdOlsoYStvKS8yLGxdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9aVswXS50cmFjZSxsPSJmdW5uZWwiPT09cy50eXBlLGM9ImgiPT09cy5vcmllbnRhdGlvbix1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspe3ZhciBmPWlbcl0saD0iY3QiaW4gZj9mLmN0Om4oZixhLG8sYyxsKTtlLmNvbnRhaW5zKGgsITEscix0KT8odS5wdXNoKHtwb2ludE51bWJlcjpyLHg6YS5jMmQoZi54KSx5Om8uYzJkKGYueSl9KSxmLnNlbGVjdGVkPTEpOmYuc2VsZWN0ZWQ9MH1yZXR1cm4gdX19LHt9XSw5Mjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWE7dmFyIG49dCgiLi4vLi4vbGliIikuZGlzdGluY3RWYWxzLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBhKHQsZSl7dGhpcy50cmFjZXM9dCx0aGlzLnNlcE5lZ1ZhbD1lLnNlcE5lZ1ZhbCx0aGlzLm92ZXJsYXBOb01lcmdlPWUub3ZlcmxhcE5vTWVyZ2U7Zm9yKHZhciByPTEvMCxhPVtdLG89MDtvPHQubGVuZ3RoO28rKyl7Zm9yKHZhciBzPXRbb10sbD0wO2w8cy5sZW5ndGg7bCsrKXt2YXIgYz1zW2xdO2MucCE9PWkmJmEucHVzaChjLnApfXNbMF0mJnNbMF0ud2lkdGgxJiYocj1NYXRoLm1pbihzWzBdLndpZHRoMSxyKSl9dGhpcy5wb3NpdGlvbnM9YTt2YXIgdT1uKGEpO3RoaXMuZGlzdGluY3RQb3NpdGlvbnM9dS52YWxzLDE9PT11LnZhbHMubGVuZ3RoJiZyIT09MS8wP3RoaXMubWluRGlmZj1yOnRoaXMubWluRGlmZj1NYXRoLm1pbih1Lm1pbkRpZmYscik7dmFyIGY9KGUucG9zQXhpc3x8e30pLnR5cGU7ImNhdGVnb3J5IiE9PWYmJiJtdWx0aWNhdGVnb3J5IiE9PWZ8fCh0aGlzLm1pbkRpZmY9MSksdGhpcy5iaW5XaWR0aD10aGlzLm1pbkRpZmYsdGhpcy5iaW5zPXt9fWEucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuZ2V0TGFiZWwodCxlKSxuPXRoaXMuYmluc1tyXXx8MDtyZXR1cm4gdGhpcy5iaW5zW3JdPW4rZSxufSxhLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmdldExhYmVsKHQsZSk7cmV0dXJuIHRoaXMuYmluc1tyXXx8MH0sYS5wcm90b3R5cGUuZ2V0TGFiZWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4oZTwwJiZ0aGlzLnNlcE5lZ1ZhbD8idiI6Il4iKSsodGhpcy5vdmVybGFwTm9NZXJnZT90Ok1hdGgucm91bmQodC90aGlzLmJpbldpZHRoKSl9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzZ9XSw5Mjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uLy4uL3JlZ2lzdHJ5IiksbD10KCIuL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz10KCIuL2F0dHJpYnV0ZXMiKSx1PWMudGV4dGZvbnQsZj1jLmluc2lkZXRleHRmb250LGg9Yy5vdXRzaWRldGV4dGZvbnQscD10KCIuL2hlbHBlcnMiKTtmdW5jdGlvbiBkKHQsZSxyKXthLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlLHIpLG0odCxlLHIpfWZ1bmN0aW9uIG0odCxlLHIpe3Quc2VsZWN0QWxsKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGk9bi5zZWxlY3QodGhpcykscz1vLmVuc3VyZVVuaWZvcm1Gb250U2l6ZShyLGcoaSx0LGUscikpO2EuZm9udChpLHMpfSkpfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9bi5fZnVsbExheW91dC5mb250LGE9ci50ZXh0Zm9udDtpZih0LmNsYXNzZWQoImJhcnRleHQtaW5zaWRlIikpe3ZhciBvPV8oZSxyKTthPXkocixlLmksaSxvKX1lbHNlIHQuY2xhc3NlZCgiYmFydGV4dC1vdXRzaWRlIikmJihhPXgocixlLmksaSkpO3JldHVybiBhfWZ1bmN0aW9uIHYodCxlLHIpe3JldHVybiBiKHUsdC50ZXh0Zm9udCxlLHIpfWZ1bmN0aW9uIHkodCxlLHIsbil7dmFyIGE9dih0LGUscik7cmV0dXJuKHZvaWQgMD09PXQuX2lucHV0LnRleHRmb250fHx2b2lkIDA9PT10Ll9pbnB1dC50ZXh0Zm9udC5jb2xvcnx8QXJyYXkuaXNBcnJheSh0LnRleHRmb250LmNvbG9yKSYmdm9pZCAwPT09dC50ZXh0Zm9udC5jb2xvcltlXSkmJihhPXtjb2xvcjppLmNvbnRyYXN0KG4pLGZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZX0pLGIoZix0Lmluc2lkZXRleHRmb250LGUsYSl9ZnVuY3Rpb24geCh0LGUscil7dmFyIG49dih0LGUscik7cmV0dXJuIGIoaCx0Lm91dHNpZGV0ZXh0Zm9udCxlLG4pfWZ1bmN0aW9uIGIodCxlLHIsbil7ZT1lfHx7fTt2YXIgaT1wLmdldFZhbHVlKGUuZmFtaWx5LHIpLGE9cC5nZXRWYWx1ZShlLnNpemUsciksbz1wLmdldFZhbHVlKGUuY29sb3Iscik7cmV0dXJue2ZhbWlseTpwLmNvZXJjZVN0cmluZyh0LmZhbWlseSxpLG4uZmFtaWx5KSxzaXplOnAuY29lcmNlTnVtYmVyKHQuc2l6ZSxhLG4uc2l6ZSksY29sb3I6cC5jb2VyY2VDb2xvcih0LmNvbG9yLG8sbi5jb2xvcil9fWZ1bmN0aW9uIF8odCxlKXtyZXR1cm4id2F0ZXJmYWxsIj09PWUudHlwZT9lW3QuZGlyXS5tYXJrZXIuY29sb3I6dC5tY2N8fHQubWN8fGUubWFya2VyLmNvbG9yfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmJhcmxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LGUsImJhciIpO3ZhciByPWUuc2l6ZSgpLGk9dC5fZnVsbExheW91dDtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKS5lYWNoKChmdW5jdGlvbih0KXsoInN0YWNrIj09PWkuYmFybW9kZSYmcj4xfHwwPT09aS5iYXJnYXAmJjA9PT1pLmJhcmdyb3VwZ2FwJiYhdFswXS50cmFjZS5tYXJrZXIubGluZS53aWR0aCkmJm4uc2VsZWN0KHRoaXMpLmF0dHIoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtkKG4uc2VsZWN0KHRoaXMpLGVbMF0udHJhY2UsdCl9KSkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlVGV4dFBvaW50czptLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWVbMF0udHJhY2U7aS5zZWxlY3RlZHBvaW50cz9mdW5jdGlvbih0LGUscil7YS5zZWxlY3RlZFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgiKSxlKSxmdW5jdGlvbih0LGUscil7dC5lYWNoKChmdW5jdGlvbih0KXt2YXIgaSxzPW4uc2VsZWN0KHRoaXMpO2lmKHQuc2VsZWN0ZWQpe2k9by5lbnN1cmVVbmlmb3JtRm9udFNpemUocixnKHMsdCxlLHIpKTt2YXIgbD1lLnNlbGVjdGVkLnRleHRmb250JiZlLnNlbGVjdGVkLnRleHRmb250LmNvbG9yO2wmJihpLmNvbG9yPWwpLGEuZm9udChzLGkpfWVsc2UgYS5zZWxlY3RlZFRleHRTdHlsZShzLGUpfSkpfSh0LnNlbGVjdEFsbCgidGV4dCIpLGUscil9KHIsaSx0KTooZChyLGksdCkscy5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikocikpfSxnZXRJbnNpZGVUZXh0Rm9udDp5LGdldE91dHNpZGVUZXh0Rm9udDp4LGdldEJhckNvbG9yOl8scmVzaXplVGV4dDpsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjo5MTQsIi4vaGVscGVycyI6OTIwLCIuL3VuaWZvcm1fdGV4dCI6OTMwLCJAcGxvdGx5L2QzIjo1OH1dLDkyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL2xpYiIpLmNvZXJjZVBhdHRlcm47ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCl7dmFyIGM9cigibWFya2VyLmNvbG9yIixzKSx1PWkodCwibWFya2VyIik7dSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSkscigibWFya2VyLmxpbmUuY29sb3IiLG4uZGVmYXVsdExpbmUpLGkodCwibWFya2VyLmxpbmUiKSYmYSh0LGUsbCxyLHtwcmVmaXg6Im1hcmtlci5saW5lLiIsY0xldHRlcjoiYyJ9KSxyKCJtYXJrZXIubGluZS53aWR0aCIpLHIoIm1hcmtlci5vcGFjaXR5IiksbyhyLCJtYXJrZXIucGF0dGVybiIsYyx1KSxyKCJzZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJ1bnNlbGVjdGVkLm1hcmtlci5jb2xvciIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9saWIiOjc3Nn1dLDkzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQpe3JldHVybiJfIit0KyJUZXh0X21pbnNpemUifWUuZXhwb3J0cz17cmVjb3JkTWluVGV4dFNpemU6ZnVuY3Rpb24odCxlLHIpe2lmKHIudW5pZm9ybXRleHQubW9kZSl7dmFyIG49YSh0KSxpPXIudW5pZm9ybXRleHQubWluc2l6ZSxvPWUuc2NhbGUqZS5mb250U2l6ZTtlLmhpZGU9bzxpLHJbbl09cltuXXx8MS8wLGUuaGlkZXx8KHJbbl09TWF0aC5taW4ocltuXSxNYXRoLm1heChvLGkpKSl9fSxjbGVhck1pblRleHRTaXplOmZ1bmN0aW9uKHQsZSl7ZVthKHQpXT12b2lkIDB9LHJlc2l6ZVRleHQ6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuX2Z1bGxMYXlvdXQsbz1hWyJfIityKyJUZXh0X21pbnNpemUiXTtpZihvKXt2YXIgcyxsPSJoaWRlIj09PWEudW5pZm9ybXRleHQubW9kZTtzd2l0Y2gocil7Y2FzZSJmdW5uZWxhcmVhIjpjYXNlInBpZSI6Y2FzZSJzdW5idXJzdCI6cz0iZy5zbGljZSI7YnJlYWs7Y2FzZSJ0cmVlbWFwIjpjYXNlImljaWNsZSI6cz0iZy5zbGljZSwgZy5wYXRoYmFyIjticmVhaztkZWZhdWx0OnM9ImcucG9pbnRzID4gZy5wb2ludCJ9ZS5zZWxlY3RBbGwocykuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFuc2Zvcm07ZSYmKGUuc2NhbGU9bCYmZS5oaWRlPzA6by9lLmZvbnRTaXplLG4uc2VsZWN0KHRoaXMpLnNlbGVjdCgidGV4dCIpLmF0dHIoInRyYW5zZm9ybSIsaS5nZXRUZXh0VHJhbnNmb3JtKGUpKSl9KSl9fX19LHsiLi4vLi4vbGliIjo3NzYsIkBwbG90bHkvZDMiOjU4fV0sOTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksbz10KCIuLi9iYXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17cjphLnIsdGhldGE6YS50aGV0YSxyMDphLnIwLGRyOmEuZHIsdGhldGEwOmEudGhldGEwLGR0aGV0YTphLmR0aGV0YSx0aGV0YXVuaXQ6YS50aGV0YXVuaXQsYmFzZTppKHt9LG8uYmFzZSx7fSksb2Zmc2V0Omkoe30sby5vZmZzZXQse30pLHdpZHRoOmkoe30sby53aWR0aCx7fSksdGV4dDppKHt9LG8udGV4dCx7fSksaG92ZXJ0ZXh0Omkoe30sby5ob3ZlcnRleHQse30pLG1hcmtlcjpvLm1hcmtlcixob3ZlcmluZm86YS5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MTQsIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIjoxMjY1fV0sOTMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIikuaGFzQ29sb3JzY2FsZSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYT10KCIuLi9iYXIvYXJyYXlzX3RvX2NhbGNkYXRhIiksbz10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vcmVnaXN0cnkiKS50cmFjZUlzLGM9dCgiLi4vLi4vbGliIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5fZnVsbExheW91dCxvPWUuc3VicGxvdCxsPXJbb10ucmFkaWFsYXhpcyxjPXJbb10uYW5ndWxhcmF4aXMsdT1sLm1ha2VDYWxjZGF0YShlLCJyIiksZj1jLm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9dSxtPWYsZz0wO2c8aDtnKyspcFtnXT17cDptW2ddLHM6ZFtnXX07ZnVuY3Rpb24gdih0KXt2YXIgcj1lW3RdO3ZvaWQgMCE9PXImJihlWyJfIit0XT1BcnJheS5pc0FycmF5KHIpP2MubWFrZUNhbGNkYXRhKGUsdCk6Yy5kMmMocixlLnRoZXRhdW5pdCkpfXJldHVybiJsaW5lYXIiPT09Yy50eXBlJiYodigid2lkdGgiKSx2KCJvZmZzZXQiKSksbihlLCJtYXJrZXIiKSYmaSh0LGUse3ZhbHM6ZS5tYXJrZXIuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIiLGNMZXR0ZXI6ImMifSksbihlLCJtYXJrZXIubGluZSIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibWFya2VyLmxpbmUiLGNMZXR0ZXI6ImMifSksYShwLGUpLHMocCxlKSxwfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQuY2FsY2RhdGEsaT1bXSxhPTA7YTxuLmxlbmd0aDthKyspe3ZhciBzPW5bYV0sdT1zWzBdLnRyYWNlOyEwPT09dS52aXNpYmxlJiZsKHUsImJhciIpJiZ1LnN1YnBsb3Q9PT1yJiZpLnB1c2gocyl9dmFyIGY9Yyh7fSxlLnJhZGlhbGF4aXMse19pZDoieCJ9KSxoPWUuYW5ndWxhcmF4aXM7byh0LGgsZixpLHttb2RlOmUuYmFybW9kZSxub3JtOmUuYmFybm9ybSxnYXA6ZS5iYXJnYXAsZ3JvdXBnYXA6ZS5iYXJncm91cGdhcH0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkxMywiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxNywiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5M31dLDkzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyIpLmhhbmRsZVJUaGV0YURlZmF1bHRzLGE9dCgiLi4vYmFyL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLHMsbCk/KGwoInRoZXRhdW5pdCIpLGwoImJhc2UiKSxsKCJvZmZzZXQiKSxsKCJ3aWR0aCIpLGwoInRleHQiKSxsKCJob3ZlcnRleHQiKSxsKCJob3ZlcnRlbXBsYXRlIiksYSh0LGUsbCxyLHMpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGwpKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiOjkyOSwiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIjoxMjY3LCIuL2F0dHJpYnV0ZXMiOjkzMX1dLDkzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2Jhci9ob3ZlciIpLmdldFRyYWNlQ29sb3Isbz1pLmZpbGxUZXh0LHM9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0LGw9dCgiLi4vLi4vcGxvdHMvcG9sYXIvaGVscGVycyIpLmlzUHRJbnNpZGVQb2x5Z29uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGM9dC5jZCx1PWNbMF0udHJhY2UsZj10LnN1YnBsb3QsaD1mLnJhZGlhbEF4aXMscD1mLmFuZ3VsYXJBeGlzLGQ9Zi52YW5nbGVzLG09ZD9sOmkuaXNQdEluc2lkZVNlY3RvcixnPXQubWF4SG92ZXJEaXN0YW5jZSx2PXAuX3BlcmlvZHx8MipNYXRoLlBJLHk9TWF0aC5hYnMoaC5nMnAoTWF0aC5zcXJ0KGUqZStyKnIpKSkseD1NYXRoLmF0YW4yKHIsZSk7aC5yYW5nZVswXT5oLnJhbmdlWzFdJiYoeCs9TWF0aC5QSSk7aWYobi5nZXRDbG9zZXN0KGMsKGZ1bmN0aW9uKHQpe3JldHVybiBtKHkseCxbdC5ycDAsdC5ycDFdLFt0LnRoZXRhZzAsdC50aGV0YWcxXSxkKT9nK01hdGgubWluKDEsTWF0aC5hYnModC50aGV0YWcxLXQudGhldGFnMCkvdiktMSsodC5ycDEteSkvKHQucnAxLXQucnAwKS0xOjEvMH0pLHQpLCExIT09dC5pbmRleCl7dmFyIGI9Y1t0LmluZGV4XTt0LngwPXQueDE9Yi5jdFswXSx0LnkwPXQueTE9Yi5jdFsxXTt2YXIgXz1pLmV4dGVuZEZsYXQoe30sYix7cjpiLnMsdGhldGE6Yi5wfSk7cmV0dXJuIG8oYix1LHQpLHMoXyx1LGYsdCksdC5ob3ZlcnRlbXBsYXRlPXUuaG92ZXJ0ZW1wbGF0ZSx0LmNvbG9yPWEodSxiKSx0LnhMYWJlbFZhbD10LnlMYWJlbFZhbD12b2lkIDAsYi5zPDAmJih0LmlkZWFsQWxpZ249ImxlZnQiKSxbdF19fX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4OTIsIi4uL2Jhci9ob3ZlciI6OTIxLCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyNjl9XSw5MzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiYmFycG9sYXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL3BvbGFyIiksY2F0ZWdvcmllczpbInBvbGFyIiwiYmFyIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksbGF5b3V0QXR0cmlidXRlczp0KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4vbGF5b3V0X2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKS5jYWxjLGNyb3NzVHJhY2VDYWxjOnQoIi4vY2FsYyIpLmNyb3NzVHJhY2VDYWxjLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLHNlbGVjdFBvaW50czp0KCIuLi9iYXIvc2VsZWN0IiksbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvcG9sYXIiOjg5MywiLi4vYmFyL3NlbGVjdCI6OTI2LCIuLi9iYXIvc3R5bGUiOjkyOCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4uL3NjYXR0ZXJwb2xhci9mb3JtYXRfbGFiZWxzIjoxMjY4LCIuL2F0dHJpYnV0ZXMiOjkzMSwiLi9jYWxjIjo5MzIsIi4vZGVmYXVsdHMiOjkzMywiLi9ob3ZlciI6OTM0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MzYsIi4vbGF5b3V0X2RlZmF1bHRzIjo5MzcsIi4vcGxvdCI6OTM4fV0sOTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YmFybW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJvdmVybGF5Il0sZGZsdDoic3RhY2siLGVkaXRUeXBlOiJjYWxjIn0sYmFyZ2FwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6LjEsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5Mzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvPXt9O2Z1bmN0aW9uIHMocixvKXtyZXR1cm4gbi5jb2VyY2UodFthXXx8e30sZVthXSxpLHIsbyl9Zm9yKHZhciBsPTA7bDxyLmxlbmd0aDtsKyspe3ZhciBjPXJbbF07ImJhcnBvbGFyIj09PWMudHlwZSYmITA9PT1jLnZpc2libGUmJihvW2E9Yy5zdWJwbG90XXx8KHMoImJhcm1vZGUiKSxzKCJiYXJnYXAiKSxvW2FdPTEpKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5MzZ9XSw5Mzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcyx1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1mdW5jdGlvbih0KXt2YXIgZT10LmN4eCxyPXQuY3l5O2lmKHQudmFuZ2xlcylyZXR1cm4gZnVuY3Rpb24obixpLG8sbCl7dmFyIGMsdTthLmFuZ2xlRGVsdGEobyxsKT4wPyhjPW8sdT1sKTooYz1sLHU9byk7dmFyIGY9W3MuZmluZEVuY2xvc2luZ1ZlcnRleEFuZ2xlcyhjLHQudmFuZ2xlcylbMF0sKGMrdSkvMixzLmZpbmRFbmNsb3NpbmdWZXJ0ZXhBbmdsZXModSx0LnZhbmdsZXMpWzFdXTtyZXR1cm4gcy5wYXRoUG9seWdvbkFubnVsdXMobixpLGMsdSxmLGUscil9O3JldHVybiBmdW5jdGlvbih0LG4saSxvKXtyZXR1cm4gYS5wYXRoQW5udWx1cyh0LG4saSxvLGUscil9fShlKSxwPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuYmFybGF5ZXIiKTthLm1ha2VUcmFjZUdyb3VwcyhwLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciByPW4uc2VsZWN0KHRoaXMpLHM9YS5lbnN1cmVTaW5nbGUociwiZyIsInBvaW50cyIpLnNlbGVjdEFsbCgiZy5wb2ludCIpLmRhdGEoYS5pZGVudGl0eSk7cy5lbnRlcigpLmFwcGVuZCgiZyIpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKS5jbGFzc2VkKCJwb2ludCIsITApLHMuZXhpdCgpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscj1uLnNlbGVjdCh0aGlzKSxvPXQucnAwPXUuYzJwKHQuczApLHM9dC5ycDE9dS5jMnAodC5zMSkscD10LnRoZXRhZzA9Zi5jMmcodC5wMCksZD10LnRoZXRhZzE9Zi5jMmcodC5wMSk7aWYoaShvKSYmaShzKSYmaShwKSYmaShkKSYmbyE9PXMmJnAhPT1kKXt2YXIgbT11LmMyZyh0LnMxKSxnPShwK2QpLzI7dC5jdD1bbC5jMnAobSpNYXRoLmNvcyhnKSksYy5jMnAobSpNYXRoLnNpbihnKSldLGU9aChvLHMscCxkKX1lbHNlIGU9Ik0wLDBaIjthLmVuc3VyZVNpbmdsZShyLCJwYXRoIikuYXR0cigiZCIsZSl9KSksby5zZXRDbGlwVXJsKHIsZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbCx0KX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9wb2xhci9oZWxwZXJzIjo4OTIsIkBwbG90bHkvZDMiOjU4LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sOTM5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYz1uLm1hcmtlcix1PWMubGluZTtlLmV4cG9ydHM9e3k6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx4MDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZHg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSxkeTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2Q6bi54cGVyaW9kLHlwZXJpb2Q6bi55cGVyaW9kLHhwZXJpb2QwOm4ueHBlcmlvZDAseXBlcmlvZDA6bi55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50Om4ueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50Om4ueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6bygieCIpLHlob3ZlcmZvcm1hdDpvKCJ5IiksbmFtZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHExOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LG1lZGlhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxxMzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxsb3dlcmZlbmNlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHVwcGVyZmVuY2U6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbm90Y2hlZDp7dmFsVHlwZToiYm9vbGVhbiIsZWRpdFR5cGU6ImNhbGMifSxub3RjaHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4yNSxlZGl0VHlwZToiY2FsYyJ9LG5vdGNoc3Bhbjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxib3hwb2ludHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsIm91dGxpZXJzIiwic3VzcGVjdGVkb3V0bGllcnMiLCExXSxlZGl0VHlwZToiY2FsYyJ9LGppdHRlcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToiY2FsYyJ9LHBvaW50cG9zOnt2YWxUeXBlOiJudW1iZXIiLG1pbjotMixtYXg6MixlZGl0VHlwZToiY2FsYyJ9LGJveG1lYW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsInNkIiwhMV0sZWRpdFR5cGU6ImNhbGMifSxtZWFuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHNkOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0scXVhcnRpbGVtZXRob2Q6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImV4Y2x1c2l2ZSIsImluY2x1c2l2ZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6ImNhbGMifSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6e291dGxpZXJjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6InJnYmEoMCwgMCwgMCwgMCkiLGVkaXRUeXBlOiJzdHlsZSJ9LHN5bWJvbDpsKHt9LGMuc3ltYm9sLHthcnJheU9rOiExLGVkaXRUeXBlOiJwbG90In0pLG9wYWNpdHk6bCh7fSxjLm9wYWNpdHkse2FycmF5T2s6ITEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9KSxzaXplOmwoe30sYy5zaXplLHthcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0pLGNvbG9yOmwoe30sYy5jb2xvcix7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksbGluZTp7Y29sb3I6bCh7fSx1LmNvbG9yLHthcnJheU9rOiExLGRmbHQ6YS5kZWZhdWx0TGluZSxlZGl0VHlwZToic3R5bGUifSksd2lkdGg6bCh7fSx1LndpZHRoLHthcnJheU9rOiExLGRmbHQ6MCxlZGl0VHlwZToic3R5bGUifSksb3V0bGllcmNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sb3V0bGllcndpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToic3R5bGUifSxlZGl0VHlwZToicGxvdCJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHdoaXNrZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi41LGVkaXRUeXBlOiJjYWxjIn0sb2Zmc2V0Z3JvdXA6aS5vZmZzZXRncm91cCxhbGlnbm1lbnRncm91cDppLmFsaWdubWVudGdyb3VwLHNlbGVjdGVkOnttYXJrZXI6bi5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdW5zZWxlY3RlZDp7bWFya2VyOm4udW5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6InN0eWxlIn0sdGV4dDpsKHt9LG4udGV4dCx7fSksaG92ZXJ0ZXh0Omwoe30sbi5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6cyh7fSksaG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiYm94ZXMiLCJwb2ludHMiXSxkZmx0OiJib3hlcytwb2ludHMiLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL2Jhci9hdHRyaWJ1dGVzIjo5MTQsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDk0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uLy4uL2xpYiIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPW8uXztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjLHkseCxiLF8sdyxUPXQuX2Z1bGxMYXlvdXQsaz1pLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksQT1pLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5IiksTT1bXSxTPSJ2aW9saW4iPT09ZS50eXBlPyJfbnVtVmlvbGlucyI6Il9udW1Cb3hlcyI7ImgiPT09ZS5vcmllbnRhdGlvbj8oeT1rLHg9IngiLGI9QSxfPSJ5Iix3PSEhZS55cGVyaW9kYWxpZ25tZW50KTooeT1BLHg9InkiLGI9ayxfPSJ4Iix3PSEhZS54cGVyaW9kYWxpZ25tZW50KTt2YXIgRSxMLEMsUCxJLE8sej1mdW5jdGlvbih0LGUscixpKXt2YXIgcyxsPWUrIjAiaW4gdCxjPSJkIitlIGluIHQ7aWYoZSBpbiB0fHxsJiZjKXt2YXIgdT1yLm1ha2VDYWxjZGF0YSh0LGUpO3JldHVyblthKHQscixlLHUpLnZhbHMsdV19cz1sP3RbZSsiMCJdOiJuYW1lImluIHQmJigiY2F0ZWdvcnkiPT09ci50eXBlfHxuKHQubmFtZSkmJi0xIT09WyJsaW5lYXIiLCJsb2ciXS5pbmRleE9mKHIudHlwZSl8fG8uaXNEYXRlVGltZSh0Lm5hbWUpJiYiZGF0ZSI9PT1yLnR5cGUpP3QubmFtZTppO2Zvcih2YXIgZj0ibXVsdGljYXRlZ29yeSI9PT1yLnR5cGU/ci5yMmNfanVzdF9pbmRpY2VzKHMpOnIuZDJjKHMsMCx0W2UrImNhbGVuZGFyIl0pLGg9dC5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9MDtkPGg7ZCsrKXBbZF09ZjtyZXR1cm5bcF19KGUsXyxiLFRbU10pLEQ9elswXSxSPXpbMV0sRj1vLmRpc3RpbmN0VmFscyhELGIpLEI9Ri52YWxzLE49Ri5taW5EaWZmLzIsaj0iYWxsIj09PShlLmJveHBvaW50c3x8ZS5wb2ludHMpP28uaWRlbnRpdHk6ZnVuY3Rpb24odCl7cmV0dXJuIHQudjxFLmxmfHx0LnY+RS51Zn07aWYoZS5faGFzUHJlQ29tcFN0YXRzKXt2YXIgVT1lW3hdLFY9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZDJjKChlW3RdfHxbXSlbcl0pfSxIPTEvMCxxPS0xLzA7Zm9yKHI9MDtyPGUuX2xlbmd0aDtyKyspe3ZhciBHPURbcl07aWYobihHKSl7aWYoKEU9e30pLnBvcz1FW19dPUcsdyYmUiYmKEUub3JpZ19wPVJbcl0pLEUucTE9VigicTEiKSxFLm1lZD1WKCJtZWRpYW4iKSxFLnEzPVYoInEzIiksTD1bXSxVJiZvLmlzQXJyYXlPclR5cGVkQXJyYXkoVVtyXSkpZm9yKGM9MDtjPFVbcl0ubGVuZ3RoO2MrKykoTz15LmQyYyhVW3JdW2NdKSkhPT1zJiYodShJPXt2Ok8saTpbcixjXX0sZSxbcixjXSksTC5wdXNoKEkpKTtpZihFLnB0cz1MLnNvcnQoZiksUD0oQz1FW3hdPUwubWFwKGgpKS5sZW5ndGgsRS5tZWQhPT1zJiZFLnExIT09cyYmRS5xMyE9PXMmJkUubWVkPj1FLnExJiZFLnEzPj1FLm1lZCl7dmFyIFk9VigibG93ZXJmZW5jZSIpO0UubGY9WSE9PXMmJlk8PUUucTE/WTpwKEUsQyxQKTt2YXIgVz1WKCJ1cHBlcmZlbmNlIik7RS51Zj1XIT09cyYmVz49RS5xMz9XOmQoRSxDLFApO3ZhciBYPVYoIm1lYW4iKTtFLm1lYW49WCE9PXM/WDpQP28ubWVhbihDLFApOihFLnExK0UucTMpLzI7dmFyIFo9Vigic2QiKTtFLnNkPVghPT1zJiZaPj0wP1o6UD9vLnN0ZGV2KEMsUCxFLm1lYW4pOkUucTMtRS5xMSxFLmxvPW0oRSksRS51bz1nKEUpO3ZhciBKPVYoIm5vdGNoc3BhbiIpO0o9SiE9PXMmJko+MD9KOnYoRSxQKSxFLmxuPUUubWVkLUosRS51bj1FLm1lZCtKO3ZhciBLPUUubGYsUT1FLnVmO2UuYm94cG9pbnRzJiZDLmxlbmd0aCYmKEs9TWF0aC5taW4oSyxDWzBdKSxRPU1hdGgubWF4KFEsQ1tQLTFdKSksZS5ub3RjaGVkJiYoSz1NYXRoLm1pbihLLEUubG4pLFE9TWF0aC5tYXgoUSxFLnVuKSksRS5taW49SyxFLm1heD1RfWVsc2V7dmFyICQ7by53YXJuKFsiSW52YWxpZCBpbnB1dCAtIG1ha2Ugc3VyZSB0aGF0IHExIDw9IG1lZGlhbiA8PSBxMyIsInExID0gIitFLnExLCJtZWRpYW4gPSAiK0UubWVkLCJxMyA9ICIrRS5xM10uam9pbigiXG4iKSksJD1FLm1lZCE9PXM/RS5tZWQ6RS5xMSE9PXM/RS5xMyE9PXM/KEUucTErRS5xMykvMjpFLnExOkUucTMhPT1zP0UucTM6MCxFLm1lZD0kLEUucTE9RS5xMz0kLEUubGY9RS51Zj0kLEUubWVhbj1FLnNkPSQsRS5sbj1FLnVuPSQsRS5taW49RS5tYXg9JH1IPU1hdGgubWluKEgsRS5taW4pLHE9TWF0aC5tYXgocSxFLm1heCksRS5wdHMyPUwuZmlsdGVyKGopLE0ucHVzaChFKX19ZS5fZXh0cmVtZXNbeS5faWRdPWkuZmluZEV4dHJlbWVzKHksW0gscV0se3BhZGRlZDohMH0pfWVsc2V7dmFyIHR0PXkubWFrZUNhbGNkYXRhKGUseCksZXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj1uZXcgQXJyYXkocisxKSxpPTA7aTxyO2krKyluW2ldPXRbaV0tZTtyZXR1cm4gbltyXT10W3ItMV0rZSxufShCLE4pLHJ0PUIubGVuZ3RoLG50PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT1bXTtyZXR1cm4gZX0ocnQpO2ZvcihyPTA7cjxlLl9sZW5ndGg7cisrKWlmKE89dHRbcl0sbihPKSl7dmFyIGl0PW8uZmluZEJpbihEW3JdLGV0KTtpdD49MCYmaXQ8cnQmJih1KEk9e3Y6TyxpOnJ9LGUsciksbnRbaXRdLnB1c2goSSkpfXZhciBhdD0xLzAsb3Q9LTEvMCxzdD1lLnF1YXJ0aWxlbWV0aG9kLGx0PSJleGNsdXNpdmUiPT09c3QsY3Q9ImluY2x1c2l2ZSI9PT1zdDtmb3Iocj0wO3I8cnQ7cisrKWlmKG50W3JdLmxlbmd0aD4wKXt2YXIgdXQsZnQ7aWYoKEU9e30pLnBvcz1FW19dPUJbcl0sTD1FLnB0cz1udFtyXS5zb3J0KGYpLFA9KEM9RVt4XT1MLm1hcChoKSkubGVuZ3RoLEUubWluPUNbMF0sRS5tYXg9Q1tQLTFdLEUubWVhbj1vLm1lYW4oQyxQKSxFLnNkPW8uc3RkZXYoQyxQLEUubWVhbiksRS5tZWQ9by5pbnRlcnAoQywuNSksUCUyJiYobHR8fGN0KSlsdD8odXQ9Qy5zbGljZSgwLFAvMiksZnQ9Qy5zbGljZShQLzIrMSkpOmN0JiYodXQ9Qy5zbGljZSgwLFAvMisxKSxmdD1DLnNsaWNlKFAvMikpLEUucTE9by5pbnRlcnAodXQsLjUpLEUucTM9by5pbnRlcnAoZnQsLjUpO2Vsc2UgRS5xMT1vLmludGVycChDLC4yNSksRS5xMz1vLmludGVycChDLC43NSk7RS5sZj1wKEUsQyxQKSxFLnVmPWQoRSxDLFApLEUubG89bShFKSxFLnVvPWcoRSk7dmFyIGh0PXYoRSxQKTtFLmxuPUUubWVkLWh0LEUudW49RS5tZWQraHQsYXQ9TWF0aC5taW4oYXQsRS5sbiksb3Q9TWF0aC5tYXgob3QsRS51biksRS5wdHMyPUwuZmlsdGVyKGopLE0ucHVzaChFKX1lLl9leHRyZW1lc1t5Ll9pZF09aS5maW5kRXh0cmVtZXMoeSxlLm5vdGNoZWQ/dHQuY29uY2F0KFthdCxvdF0pOnR0LHtwYWRkZWQ6ITB9KX1yZXR1cm4gZnVuY3Rpb24odCxlKXtpZihvLmlzQXJyYXlPclR5cGVkQXJyYXkoZS5zZWxlY3RlZHBvaW50cykpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe2Zvcih2YXIgbj10W3JdLnB0c3x8W10saT17fSxhPTA7YTxuLmxlbmd0aDthKyspaVtuW2FdLmldPWE7by50YWdTZWxlY3RlZChuLGUsaSl9fShNLGUpLE0ubGVuZ3RoPjA/KE1bMF0udD17bnVtOlRbU10sZFBvczpOLHBvc0xldHRlcjpfLHZhbExldHRlcjp4LGxhYmVsczp7bWVkOmwodCwibWVkaWFuOiIpLG1pbjpsKHQsIm1pbjoiKSxxMTpsKHQsInExOiIpLHEzOmwodCwicTM6IiksbWF4OmwodCwibWF4OiIpLG1lYW46InNkIj09PWUuYm94bWVhbj9sKHQsIm1lYW4gXHhiMSBcdTAzYzM6Iik6bCh0LCJtZWFuOiIpLGxmOmwodCwibG93ZXIgZmVuY2U6IiksdWY6bCh0LCJ1cHBlciBmZW5jZToiKX19LFRbU10rKyxNKTpbe3Q6e2VtcHR5OiEwfX1dfTt2YXIgYz17dGV4dDoidHgiLGhvdmVydGV4dDoiaHR4In07ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuIGluIGMpby5pc0FycmF5T3JUeXBlZEFycmF5KGVbbl0pJiYoQXJyYXkuaXNBcnJheShyKT9vLmlzQXJyYXlPclR5cGVkQXJyYXkoZVtuXVtyWzBdXSkmJih0W2Nbbl1dPWVbbl1bclswXV1bclsxXV0pOnRbY1tuXV09ZVtuXVtyXSl9ZnVuY3Rpb24gZih0LGUpe3JldHVybiB0LnYtZS52fWZ1bmN0aW9uIGgodCl7cmV0dXJuIHQudn1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gMD09PXI/dC5xMTpNYXRoLm1pbih0LnExLGVbTWF0aC5taW4oby5maW5kQmluKDIuNSp0LnExLTEuNSp0LnEzLGUsITApKzEsci0xKV0pfWZ1bmN0aW9uIGQodCxlLHIpe3JldHVybiAwPT09cj90LnEzOk1hdGgubWF4KHQucTMsZVtNYXRoLm1heChvLmZpbmRCaW4oMi41KnQucTMtMS41KnQucTEsZSksMCldKX1mdW5jdGlvbiBtKHQpe3JldHVybiA0KnQucTEtMyp0LnEzfWZ1bmN0aW9uIGcodCl7cmV0dXJuIDQqdC5xMy0zKnQucTF9ZnVuY3Rpb24gdih0LGUpe3JldHVybiAwPT09ZT8wOjEuNTcqKHQucTMtdC5xMSkvTWF0aC5zcXJ0KGUpfX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5NDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLG89WyJ2IiwiaCJdO2Z1bmN0aW9uIHModCxlLHIsbyl7dmFyIHMsbCxjLHU9ZS5jYWxjZGF0YSxmPWUuX2Z1bGxMYXlvdXQsaD1vLl9pZCxwPWguY2hhckF0KDApLGQ9W10sbT0wO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspZm9yKGM9dVtyW3NdXSxsPTA7bDxjLmxlbmd0aDtsKyspZC5wdXNoKG8uYzJsKGNbbF0ucG9zLCEwKSksbSs9KGNbbF0ucHRzMnx8W10pLmxlbmd0aDtpZihkLmxlbmd0aCl7dmFyIGc9aS5kaXN0aW5jdFZhbHMoZCk7ImNhdGVnb3J5IiE9PW8udHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09by50eXBlfHwoZy5taW5EaWZmPTEpO3ZhciB2PWcubWluRGlmZi8yO24ubWluRHRpY2sobyxnLm1pbkRpZmYsZy52YWxzWzBdLCEwKTt2YXIgeT1mWyJ2aW9saW4iPT09dD8iX251bVZpb2xpbnMiOiJfbnVtQm94ZXMiXSx4PSJncm91cCI9PT1mW3QrIm1vZGUiXSYmeT4xLGI9MS1mW3QrImdhcCJdLF89MS1mW3QrImdyb3VwZ2FwIl07Zm9yKHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIHcsVCxrLEEsTSxTLEU9KGM9dVtyW3NdXSlbMF0udHJhY2UsTD1jWzBdLnQsQz1FLndpZHRoLFA9RS5zaWRlO2lmKEMpdz1UPUE9Qy8yLGs9MDtlbHNlIGlmKHc9dix4KXt2YXIgST1hKGYsby5faWQpK0Uub3JpZW50YXRpb24sTz0oZi5fYWxpZ25tZW50T3B0c1tJXXx8e30pW0UuYWxpZ25tZW50Z3JvdXBdfHx7fSx6PU9iamVjdC5rZXlzKE8ub2Zmc2V0R3JvdXBzfHx7fSkubGVuZ3RoLEQ9enx8eTtUPXcqYipfL0Qsaz0yKncqKCgoej9FLl9vZmZzZXRJbmRleDpMLm51bSkrLjUpL0QtLjUpKmIsQT13KmIvRH1lbHNlIFQ9dypiKl8saz0wLEE9dztMLmRQb3M9dyxMLmJQb3M9ayxMLmJkUG9zPVQsTC53SG92ZXI9QTt2YXIgUixGLEIsTixqLFUsVj1rK1QsSD1Cb29sZWFuKEMpO2lmKCJwb3NpdGl2ZSI9PT1QPyhNPXcqKEM/MTouNSksUj1WLFM9Uj1rKToibmVnYXRpdmUiPT09UD8oTT1SPWssUz13KihDPzE6LjUpLEY9Vik6KE09Uz13LFI9Rj1WKSwoRS5ib3hwb2ludHN8fEUucG9pbnRzKSYmbT4wKXt2YXIgcT1FLnBvaW50cG9zLEc9RS5qaXR0ZXIsWT1FLm1hcmtlci5zaXplLzIsVz0wO3ErRz49MCYmKChXPVYqKHErRykpPk0/KEg9ITAsaj1ZLEI9Vyk6Vz5SJiYoaj1ZLEI9TSkpLFc8PU0mJihCPU0pO3ZhciBYPTA7cS1HPD0wJiYoKFg9LVYqKHEtRykpPlM/KEg9ITAsVT1ZLE49WCk6WD5GJiYoVT1ZLE49UykpLFg8PVMmJihOPVMpfWVsc2UgQj1NLE49Uzt2YXIgWj1uZXcgQXJyYXkoYy5sZW5ndGgpO2ZvcihsPTA7bDxjLmxlbmd0aDtsKyspWltsXT1jW2xdLnBvcztFLl9leHRyZW1lc1toXT1uLmZpbmRFeHRyZW1lcyhvLFose3BhZGRlZDpILHZwYWRtaW51czpOLHZwYWRwbHVzOkIsdnBhZExpbmVhcml6ZWQ6ITAscHBhZG1pbnVzOnt4OlUseTpqfVtwXSxwcGFkcGx1czp7eDpqLHk6VX1bcF19KX19fWUuZXhwb3J0cz17Y3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxuPWUueGF4aXMsaT1lLnlheGlzLGE9MDthPG8ubGVuZ3RoO2ErKyl7Zm9yKHZhciBsPW9bYV0sYz0iaCI9PT1sP2k6bix1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJib3giIT09ZC50eXBlJiYiY2FuZGxlc3RpY2siIT09ZC50eXBlfHxwLmVtcHR5fHwoZC5vcmllbnRhdGlvbnx8InYiKSE9PWx8fGQueGF4aXMhPT1uLl9pZHx8ZC55YXhpcyE9PWkuX2lkfHx1LnB1c2goZil9cygiYm94Iix0LHUsYyl9fSxzZXRQb3NpdGlvbk9mZnNldDpzfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzV9XSw5NDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gdSh0LGUscixhKXtmdW5jdGlvbiBvKHQpe3ZhciBlPTA7cmV0dXJuIHQmJnQubGVuZ3RoJiYoZSs9MSxuLmlzQXJyYXlPclR5cGVkQXJyYXkodFswXSkmJnRbMF0ubGVuZ3RoJiYoZSs9MSkpLGV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gbi52YWxpZGF0ZSh0W2VdLGNbZV0pfXZhciB1LGY9cigieSIpLGg9cigieCIpO2lmKCJib3giPT09ZS50eXBlKXt2YXIgcD1yKCJxMSIpLGQ9cigibWVkaWFuIiksbT1yKCJxMyIpO2UuX2hhc1ByZUNvbXBTdGF0cz1wJiZwLmxlbmd0aCYmZCYmZC5sZW5ndGgmJm0mJm0ubGVuZ3RoLHU9TWF0aC5taW4obi5taW5Sb3dMZW5ndGgocCksbi5taW5Sb3dMZW5ndGgoZCksbi5taW5Sb3dMZW5ndGgobSkpfXZhciBnLHYseT1vKGYpLHg9byhoKSxiPXkmJm4ubWluUm93TGVuZ3RoKGYpLF89eCYmbi5taW5Sb3dMZW5ndGgoaCksdz1hLmNhbGVuZGFyLFQ9e2F1dG90eXBlbnVtYmVyczphLmF1dG90eXBlbnVtYmVyc307aWYoZS5faGFzUHJlQ29tcFN0YXRzKXN3aXRjaChTdHJpbmcoeCkrU3RyaW5nKHkpKXtjYXNlIjAwIjp2YXIgaz1zKCJ4MCIpfHxzKCJkeCIpO2c9KHMoInkwIil8fHMoImR5IikpJiYhaz8iaCI6InYiLHY9dTticmVhaztjYXNlIjEwIjpnPSJ2Iix2PU1hdGgubWluKHUsXyk7YnJlYWs7Y2FzZSIyMCI6Zz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoKTticmVhaztjYXNlIjAxIjpnPSJoIix2PU1hdGgubWluKHUsYik7YnJlYWs7Y2FzZSIwMiI6Zz0idiIsdj1NYXRoLm1pbih1LGYubGVuZ3RoKTticmVhaztjYXNlIjEyIjpnPSJ2Iix2PU1hdGgubWluKHUsXyxmLmxlbmd0aCk7YnJlYWs7Y2FzZSIyMSI6Zz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoLGIpO2JyZWFrO2Nhc2UiMTEiOnY9MDticmVhaztjYXNlIjIyIjp2YXIgQSxNPSExO2ZvcihBPTA7QTxoLmxlbmd0aDtBKyspaWYoImNhdGVnb3J5Ij09PWwoaFtBXSx3LFQpKXtNPSEwO2JyZWFrfWlmKE0pZz0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpO2Vsc2V7Zm9yKEE9MDtBPGYubGVuZ3RoO0ErKylpZigiY2F0ZWdvcnkiPT09bChmW0FdLHcsVCkpe009ITA7YnJlYWt9TT8oZz0iaCIsdj1NYXRoLm1pbih1LGgubGVuZ3RoLGIpKTooZz0idiIsdj1NYXRoLm1pbih1LF8sZi5sZW5ndGgpKX19ZWxzZSB5PjA/KGc9InYiLHY9eD4wP01hdGgubWluKF8sYik6TWF0aC5taW4oYikpOng+MD8oZz0iaCIsdj1NYXRoLm1pbihfKSk6dj0wO2lmKHYpe2UuX2xlbmd0aD12O3ZhciBTPXIoIm9yaWVudGF0aW9uIixnKTtlLl9oYXNQcmVDb21wU3RhdHM/InYiPT09UyYmMD09PXg/KHIoIngwIiwwKSxyKCJkeCIsMSkpOiJoIj09PVMmJjA9PT15JiYocigieTAiLDApLHIoImR5IiwxKSk6InYiPT09UyYmMD09PXg/cigieDAiKToiaCI9PT1TJiYwPT09eSYmcigieTAiKSxpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0sYSl9ZWxzZSBlLnZpc2libGU9ITF9ZnVuY3Rpb24gZih0LGUscixpKXt2YXIgYT1pLnByZWZpeCxvPW4uY29lcmNlMih0LGUsYywibWFya2VyLm91dGxpZXJjb2xvciIpLHM9cigibWFya2VyLmxpbmUub3V0bGllcmNvbG9yIiksbD0ib3V0bGllcnMiO2UuX2hhc1ByZUNvbXBTdGF0cz9sPSJhbGwiOihvfHxzKSYmKGw9InN1c3BlY3RlZG91dGxpZXJzIik7dmFyIHU9cihhKyJwb2ludHMiLGwpO3U/KHIoImppdHRlciIsImFsbCI9PT11Py4zOjApLHIoInBvaW50cG9zIiwiYWxsIj09PXU/LTEuNTowKSxyKCJtYXJrZXIuc3ltYm9sIikscigibWFya2VyLm9wYWNpdHkiKSxyKCJtYXJrZXIuc2l6ZSIpLHIoIm1hcmtlci5jb2xvciIsZS5saW5lLmNvbG9yKSxyKCJtYXJrZXIubGluZS5jb2xvciIpLHIoIm1hcmtlci5saW5lLndpZHRoIiksInN1c3BlY3RlZG91dGxpZXJzIj09PXUmJihyKCJtYXJrZXIubGluZS5vdXRsaWVyY29sb3IiLGUubWFya2VyLmNvbG9yKSxyKCJtYXJrZXIubGluZS5vdXRsaWVyd2lkdGgiKSkscigic2VsZWN0ZWQubWFya2VyLmNvbG9yIikscigidW5zZWxlY3RlZC5tYXJrZXIuY29sb3IiKSxyKCJzZWxlY3RlZC5tYXJrZXIuc2l6ZSIpLHIoInVuc2VsZWN0ZWQubWFya2VyLnNpemUiKSxyKCJ0ZXh0IikscigiaG92ZXJ0ZXh0IikpOmRlbGV0ZSBlLm1hcmtlcjt2YXIgZj1yKCJob3Zlcm9uIik7ImFsbCIhPT1mJiYtMT09PWYuaW5kZXhPZigicG9pbnRzIil8fHIoImhvdmVydGVtcGxhdGUiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxyKX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX1pZih1KHQsZSxzLGkpLCExIT09ZS52aXNpYmxlKXtvKHQsZSxpLHMpLHMoInhob3ZlcmZvcm1hdCIpLHMoInlob3ZlcmZvcm1hdCIpO3ZhciBsPWUuX2hhc1ByZUNvbXBTdGF0cztsJiYocygibG93ZXJmZW5jZSIpLHMoInVwcGVyZmVuY2UiKSkscygibGluZS5jb2xvciIsKHQubWFya2VyfHx7fSkuY29sb3J8fHIpLHMoImxpbmUud2lkdGgiKSxzKCJmaWxsY29sb3IiLGEuYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsLjUpKTt2YXIgaD0hMTtpZihsKXt2YXIgcD1zKCJtZWFuIiksZD1zKCJzZCIpO3AmJnAubGVuZ3RoJiYoaD0hMCxkJiZkLmxlbmd0aCYmKGg9InNkIikpfXMoImJveG1lYW4iLGgpLHMoIndoaXNrZXJ3aWR0aCIpLHMoIndpZHRoIikscygicXVhcnRpbGVtZXRob2QiKTt2YXIgbT0hMTtpZihsKXt2YXIgZz1zKCJub3RjaHNwYW4iKTtnJiZnLmxlbmd0aCYmKG09ITApfWVsc2Ugbi52YWxpZGF0ZSh0Lm5vdGNod2lkdGgsYy5ub3RjaHdpZHRoKSYmKG09ITApO3MoIm5vdGNoZWQiLG0pJiZzKCJub3RjaHdpZHRoIiksZih0LGUscyx7cHJlZml4OiJib3gifSl9fSxjcm9zc1RyYWNlRGVmYXVsdHM6ZnVuY3Rpb24odCxlKXt2YXIgcixpO2Z1bmN0aW9uIGEodCl7cmV0dXJuIG4uY29lcmNlKGkuX2lucHV0LGksYyx0KX1mb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGw9KGk9dFtvXSkudHlwZTsiYm94IiE9PWwmJiJ2aW9saW4iIT09bHx8KHI9aS5faW5wdXQsImdyb3VwIj09PWVbbCsibW9kZSJdJiZzKHIsaSxlLGEpKX19LGhhbmRsZVNhbXBsZURlZmF1bHRzOnUsaGFuZGxlUG9pbnRzRGVmYXVsdHM6Zn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfYXV0b3R5cGUiOjgyOCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjkzOX1dLDk0MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZS5ob3Zlck9uQm94JiYodC5ob3Zlck9uQm94PWUuaG92ZXJPbkJveCksInhWYWwiaW4gZSYmKHQueD1lLnhWYWwpLCJ5VmFsImluIGUmJih0Lnk9ZS55VmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDk0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2Z4Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIikscz1pLmZpbGxUZXh0O2Z1bmN0aW9uIGwodCxlLHIscyl7dmFyIGwsYyx1LGYsaCxwLGQsbSxnLHYseSx4LGIsXyx3PXQuY2QsVD10LnhhLGs9dC55YSxBPXdbMF0udHJhY2UsTT13WzBdLnQsUz0idmlvbGluIj09PUEudHlwZSxFPVtdLEw9TS5iZFBvcyxDPU0ud0hvdmVyLFA9ZnVuY3Rpb24odCl7cmV0dXJuIHUuYzJsKHQucG9zKStNLmJQb3MtdS5jMmwocCl9O1MmJiJib3RoIiE9PUEuc2lkZT8oInBvc2l0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLGUrQyx2KX0seD1MLGI9MCksIm5lZ2F0aXZlIj09PUEuc2lkZSYmKGc9ZnVuY3Rpb24odCl7dmFyIGU9UCh0KTtyZXR1cm4gYS5pbmJveChlLUMsZSx2KX0seD0wLGI9TCkpOihnPWZ1bmN0aW9uKHQpe3ZhciBlPVAodCk7cmV0dXJuIGEuaW5ib3goZS1DLGUrQyx2KX0seD1iPUwpLF89Uz9mdW5jdGlvbih0KXtyZXR1cm4gYS5pbmJveCh0LnNwYW5bMF0taCx0LnNwYW5bMV0taCx2KX06ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW5ib3godC5taW4taCx0Lm1heC1oLHYpfSwiaCI9PT1BLm9yaWVudGF0aW9uPyhoPWUscD1yLGQ9XyxtPWcsbD0ieSIsdT1rLGM9IngiLGY9VCk6KGg9cixwPWUsZD1nLG09XyxsPSJ4Iix1PVQsYz0ieSIsZj1rKTt2YXIgST1NYXRoLm1pbigxLEwvTWF0aC5hYnModS5yMmModS5yYW5nZVsxXSktdS5yMmModS5yYW5nZVswXSkpKTtmdW5jdGlvbiBPKHQpe3JldHVybihkKHQpK20odCkpLzJ9dj10Lm1heEhvdmVyRGlzdGFuY2UtSSx5PXQubWF4U3Bpa2VEaXN0YW5jZS1JO3ZhciB6PWEuZ2V0RGlzdGFuY2VGdW5jdGlvbihzLGQsbSxPKTtpZihhLmdldENsb3Nlc3Qodyx6LHQpLCExPT09dC5pbmRleClyZXR1cm5bXTt2YXIgRD13W3QuaW5kZXhdLFI9QS5saW5lLmNvbG9yLEY9KEEubWFya2VyfHx7fSkuY29sb3I7by5vcGFjaXR5KFIpJiZBLmxpbmUud2lkdGg/dC5jb2xvcj1SOm8ub3BhY2l0eShGKSYmQS5ib3hwb2ludHM/dC5jb2xvcj1GOnQuY29sb3I9QS5maWxsY29sb3IsdFtsKyIwIl09dS5jMnAoRC5wb3MrTS5iUG9zLWIsITApLHRbbCsiMSJdPXUuYzJwKEQucG9zK00uYlBvcyt4LCEwKSx0W2wrIkxhYmVsVmFsIl09dm9pZCAwIT09RC5vcmlnX3A/RC5vcmlnX3A6RC5wb3M7dmFyIEI9bCsiU3Bpa2UiO3Quc3Bpa2VEaXN0YW5jZT1PKEQpKnkvdix0W0JdPXUuYzJwKEQucG9zLCEwKTt2YXIgTj17fSxqPVsibWVkIiwicTEiLCJxMyIsIm1pbiIsIm1heCJdOyhBLmJveG1lYW58fChBLm1lYW5saW5lfHx7fSkudmlzaWJsZSkmJmoucHVzaCgibWVhbiIpLChBLmJveHBvaW50c3x8QS5wb2ludHMpJiZqLnB1c2goImxmIiwidWYiKTtmb3IodmFyIFU9MDtVPGoubGVuZ3RoO1UrKyl7dmFyIFY9altVXTtpZihWIGluIEQmJiEoRFtWXWluIE4pKXtOW0RbVl1dPSEwO3ZhciBIPURbVl0scT1mLmMycChILCEwKSxHPWkuZXh0ZW5kRmxhdCh7fSx0KTtHLmF0dHI9VixHW2MrIjAiXT1HW2MrIjEiXT1xLEdbYysiTGFiZWxWYWwiXT1ILEdbYysiTGFiZWwiXT0oTS5sYWJlbHM/TS5sYWJlbHNbVl0rIiAiOiIiKStuLmhvdmVyTGFiZWxUZXh0KGYsSCxBW2MrImhvdmVyZm9ybWF0Il0pLEcuaG92ZXJPbkJveD0hMCwibWVhbiI9PT1WJiYic2QiaW4gRCYmInNkIj09PUEuYm94bWVhbiYmKEdbYysiZXJyIl09RC5zZCksdC5uYW1lPSIiLHQuc3Bpa2VEaXN0YW5jZT12b2lkIDAsdFtCXT12b2lkIDAsRy5ob3ZlcnRlbXBsYXRlPSExLEUucHVzaChHKX19cmV0dXJuIEV9ZnVuY3Rpb24gYyh0LGUscil7Zm9yKHZhciBuLG8sbCxjPXQuY2QsdT10LnhhLGY9dC55YSxoPWNbMF0udHJhY2UscD11LmMycChlKSxkPWYuYzJwKHIpLG09YS5xdWFkcmF0dXJlKChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModS5jMnAodC54KS1wKS1lLDEtMy9lKX0pLChmdW5jdGlvbih0KXt2YXIgZT1NYXRoLm1heCgzLHQubXJjfHwwKTtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoZi5jMnAodC55KS1kKS1lLDEtMy9lKX0pKSxnPSExLHY9MDt2PGMubGVuZ3RoO3YrKyl7bz1jW3ZdO2Zvcih2YXIgeT0wO3k8KG8ucHRzfHxbXSkubGVuZ3RoO3krKyl7dmFyIHg9bShsPW8ucHRzW3ldKTt4PD10LmRpc3RhbmNlJiYodC5kaXN0YW5jZT14LGc9W3YseV0pfX1pZighZylyZXR1cm4hMTtsPShvPWNbZ1swXV0pLnB0c1tnWzFdXTt2YXIgYj11LmMycChsLngsITApLF89Zi5jMnAobC55LCEwKSx3PWwubXJjfHwxO249aS5leHRlbmRGbGF0KHt9LHQse2luZGV4OmwuaSxjb2xvcjooaC5tYXJrZXJ8fHt9KS5jb2xvcixuYW1lOmgubmFtZSx4MDpiLXcseDE6Yit3LHkwOl8tdyx5MTpfK3csc3Bpa2VEaXN0YW5jZTp0LmRpc3RhbmNlLGhvdmVydGVtcGxhdGU6aC5ob3ZlcnRlbXBsYXRlfSk7dmFyIFQsaz1vLm9yaWdfcCxBPXZvaWQgMCE9PWs/azpvLnBvcztyZXR1cm4iaCI9PT1oLm9yaWVudGF0aW9uPyhUPWYsbi54TGFiZWxWYWw9bC54LG4ueUxhYmVsVmFsPUEpOihUPXUsbi54TGFiZWxWYWw9QSxuLnlMYWJlbFZhbD1sLnkpLG5bVC5faWQuY2hhckF0KDApKyJTcGlrZSJdPVQuYzJwKG8ucG9zLCEwKSxzKGwsaCxuKSxufWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT10LmNkWzBdLnRyYWNlLmhvdmVyb24sbz1bXTtyZXR1cm4tMSE9PWEuaW5kZXhPZigiYm94ZXMiKSYmKG89by5jb25jYXQobCh0LGUscixuKSkpLC0xIT09YS5pbmRleE9mKCJwb2ludHMiKSYmKGk9Yyh0LGUscikpLCJjbG9zZXN0Ij09PW4/aT9baV06bzppPyhvLnB1c2goaSksbyk6b30saG92ZXJPbkJveGVzOmwsaG92ZXJPblBvaW50czpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSw5NDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5zdXBwbHlEZWZhdWx0cyxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4vc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJvcmllbnRlZCIsImJveC12aW9saW4iLCJzaG93TGVnZW5kIiwiYm94TGF5b3V0Iiwiem9vbVNjYWxlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6OTM5LCIuL2NhbGMiOjk0MCwiLi9jcm9zc190cmFjZV9jYWxjIjo5NDEsIi4vZGVmYXVsdHMiOjk0MiwiLi9ldmVudF9kYXRhIjo5NDMsIi4vaG92ZXIiOjk0NCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6OTQ2LCIuL2xheW91dF9kZWZhdWx0cyI6OTQ3LCIuL3Bsb3QiOjk0OCwiLi9zZWxlY3QiOjk0OSwiLi9zdHlsZSI6OTUwfV0sOTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Ym94bW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoib3ZlcmxheSIsZWRpdFR5cGU6ImNhbGMifSxib3hnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMyxlZGl0VHlwZToiY2FsYyJ9LGJveGdyb3VwZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjMsZWRpdFR5cGU6ImNhbGMifX19LHt9XSw5NDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2Z1bmN0aW9uIG8odCxlLHIsaSxhKXtmb3IodmFyIG89YSsiTGF5b3V0IixzPSExLGw9MDtsPHIubGVuZ3RoO2wrKyl7dmFyIGM9cltsXTtpZihuLnRyYWNlSXMoYyxvKSl7cz0hMDticmVha319cyYmKGkoYSsibW9kZSIpLGkoYSsiZ2FwIiksaShhKyJncm91cGdhcCIpKX1lLmV4cG9ydHM9e3N1cHBseUxheW91dERlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyKXtvKDAsMCxyLChmdW5jdGlvbihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYSxyLG4pfSksImJveCIpfSxfc3VwcGx5Om99fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2xheW91dF9hdHRyaWJ1dGVzIjo5NDZ9XSw5NDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtmdW5jdGlvbiBvKHQsZSxyLGEpe3ZhciBvLHMsbD0iaCI9PT1yLm9yaWVudGF0aW9uLGM9ZS52YWwsdT1lLnBvcyxmPSEhdS5yYW5nZWJyZWFrcyxoPWEuYlBvcyxwPWEud2RQb3N8fDAsZD1hLmJQb3NQeE9mZnNldHx8MCxtPXIud2hpc2tlcndpZHRofHwwLGc9ci5ub3RjaGVkfHwhMSx2PWc/MS0yKnIubm90Y2h3aWR0aDoxO0FycmF5LmlzQXJyYXkoYS5iZFBvcyk/KG89YS5iZFBvc1swXSxzPWEuYmRQb3NbMV0pOihvPWEuYmRQb3Mscz1hLmJkUG9zKTt2YXIgeT10LnNlbGVjdEFsbCgicGF0aC5ib3giKS5kYXRhKCJ2aW9saW4iIT09ci50eXBlfHxyLmJveC52aXNpYmxlP2kuaWRlbnRpdHk6W10pO3kuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLmF0dHIoImNsYXNzIiwiYm94IikseS5leGl0KCkucmVtb3ZlKCkseS5lYWNoKChmdW5jdGlvbih0KXtpZih0LmVtcHR5KXJldHVybiJNMCwwWiI7dmFyIGU9dS5jMmwodC5wb3MraCwhMCksYT11LmwycChlLW8pK2QseT11LmwycChlK3MpK2QseD1mPyhhK3kpLzI6dS5sMnAoZSkrZCxiPXIud2hpc2tlcndpZHRoLF89Zj9hKmIrKDEtYikqeDp1LmwycChlLXApK2Qsdz1mP3kqYisoMS1iKSp4OnUubDJwKGUrcCkrZCxUPXUubDJwKGUtbyp2KStkLGs9dS5sMnAoZStzKnYpK2QsQT1jLmMycCh0LnExLCEwKSxNPWMuYzJwKHQucTMsITApLFM9aS5jb25zdHJhaW4oYy5jMnAodC5tZWQsITApLE1hdGgubWluKEEsTSkrMSxNYXRoLm1heChBLE0pLTEpLEU9dm9pZCAwPT09dC5sZnx8ITE9PT1yLmJveHBvaW50cyxMPWMuYzJwKEU/dC5taW46dC5sZiwhMCksQz1jLmMycChFP3QubWF4OnQudWYsITApLFA9Yy5jMnAodC5sbiwhMCksST1jLmMycCh0LnVuLCEwKTtsP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitTKyIsIitUKyJWIitrKyJNIitBKyIsIithKyJWIit5KyhnPyJIIitQKyJMIitTKyIsIitrKyJMIitJKyIsIit5OiIiKSsiSCIrTSsiViIrYSsoZz8iSCIrSSsiTCIrUysiLCIrVCsiTCIrUCsiLCIrYToiIikrIlpNIitBKyIsIit4KyJIIitMKyJNIitNKyIsIit4KyJIIitDKygwPT09bT8iIjoiTSIrTCsiLCIrXysiViIrdysiTSIrQysiLCIrXysiViIrdykpOm4uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJNIitUKyIsIitTKyJIIitrKyJNIithKyIsIitBKyJIIit5KyhnPyJWIitQKyJMIitrKyIsIitTKyJMIit5KyIsIitJOiIiKSsiViIrTSsiSCIrYSsoZz8iViIrSSsiTCIrVCsiLCIrUysiTCIrYSsiLCIrUDoiIikrIlpNIit4KyIsIitBKyJWIitMKyJNIit4KyIsIitNKyJWIitDKygwPT09bT8iIjoiTSIrXysiLCIrTCsiSCIrdysiTSIrXysiLCIrQysiSCIrdykpfSkpfWZ1bmN0aW9uIHModCxlLHIsbil7dmFyIG89ZS54LHM9ZS55LGw9bi5iZFBvcyxjPW4uYlBvcyx1PXIuYm94cG9pbnRzfHxyLnBvaW50cztpLnNlZWRQc2V1ZG9SYW5kb20oKTt2YXIgZj10LnNlbGVjdEFsbCgiZy5wb2ludHMiKS5kYXRhKHU/ZnVuY3Rpb24odCl7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC50PW4sdC50cmFjZT1yfSkpLHR9OltdKTtmLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwb2ludHMiKSxmLmV4aXQoKS5yZW1vdmUoKTt2YXIgaD1mLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3ZhciBlLG4sYT10LnB0czIsbz1NYXRoLm1heCgodC5tYXgtdC5taW4pLzEwLHQucTMtdC5xMSkscz0xZS05Km8sZj0uMDEqbyxoPVtdLHA9MDtpZihyLmppdHRlcil7aWYoMD09PW8pZm9yKHA9MSxoPW5ldyBBcnJheShhLmxlbmd0aCksZT0wO2U8YS5sZW5ndGg7ZSsrKWhbZV09MTtlbHNlIGZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciBkPU1hdGgubWF4KDAsZS01KSxtPWFbZF0udixnPU1hdGgubWluKGEubGVuZ3RoLTEsZSs1KSx2PWFbZ10udjsiYWxsIiE9PXUmJihhW2VdLnY8dC5sZj92PU1hdGgubWluKHYsdC5sZik6bT1NYXRoLm1heChtLHQudWYpKTt2YXIgeT1NYXRoLnNxcnQoZiooZy1kKS8odi1tK3MpKXx8MDt5PWkuY29uc3RyYWluKE1hdGguYWJzKHkpLDAsMSksaC5wdXNoKHkpLHA9TWF0aC5tYXgoeSxwKX1uPTIqci5qaXR0ZXIvKHB8fDEpfWZvcihlPTA7ZTxhLmxlbmd0aDtlKyspe3ZhciB4PWFbZV0sYj14LnYsXz1yLmppdHRlcj9uKmhbZV0qKGkucHNldWRvUmFuZG9tKCktLjUpOjAsdz10LnBvcytjK2wqKHIucG9pbnRwb3MrXyk7ImgiPT09ci5vcmllbnRhdGlvbj8oeC55PXcseC54PWIpOih4Lng9dyx4Lnk9YiksInN1c3BlY3RlZG91dGxpZXJzIj09PXUmJmI8dC51byYmYj50LmxvJiYoeC5zbz0hMCl9cmV0dXJuIGF9KSk7aC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCksaC5leGl0KCkucmVtb3ZlKCksaC5jYWxsKGEudHJhbnNsYXRlUG9pbnRzLG8scyl9ZnVuY3Rpb24gbCh0LGUscixhKXt2YXIgbyxzLGw9ZS52YWwsYz1lLnBvcyx1PSEhYy5yYW5nZWJyZWFrcyxmPWEuYlBvcyxoPWEuYlBvc1B4T2Zmc2V0fHwwLHA9ci5ib3htZWFufHwoci5tZWFubGluZXx8e30pLnZpc2libGU7QXJyYXkuaXNBcnJheShhLmJkUG9zKT8obz1hLmJkUG9zWzBdLHM9YS5iZFBvc1sxXSk6KG89YS5iZFBvcyxzPWEuYmRQb3MpO3ZhciBkPXQuc2VsZWN0QWxsKCJwYXRoLm1lYW4iKS5kYXRhKCJib3giPT09ci50eXBlJiZyLmJveG1lYW58fCJ2aW9saW4iPT09ci50eXBlJiZyLmJveC52aXNpYmxlJiZyLm1lYW5saW5lLnZpc2libGU/aS5pZGVudGl0eTpbXSk7ZC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbiIpLnN0eWxlKHtmaWxsOiJub25lIiwidmVjdG9yLWVmZmVjdCI6Im5vbi1zY2FsaW5nLXN0cm9rZSJ9KSxkLmV4aXQoKS5yZW1vdmUoKSxkLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPWMuYzJsKHQucG9zK2YsITApLGk9Yy5sMnAoZS1vKStoLGE9Yy5sMnAoZStzKStoLGQ9dT8oaSthKS8yOmMubDJwKGUpK2gsbT1sLmMycCh0Lm1lYW4sITApLGc9bC5jMnAodC5tZWFuLXQuc2QsITApLHY9bC5jMnAodC5tZWFuK3Quc2QsITApOyJoIj09PXIub3JpZW50YXRpb24/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsIk0iK20rIiwiK2krIlYiK2ErKCJzZCI9PT1wPyJtMCwwTCIrZysiLCIrZCsiTCIrbSsiLCIraSsiTCIrdisiLCIrZCsiWiI6IiIpKTpuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIiwiTSIraSsiLCIrbSsiSCIrYSsoInNkIj09PXA/Im0wLDBMIitkKyIsIitnKyJMIitpKyIsIittKyJMIitkKyIsIit2KyJaIjoiIikpfSkpfWUuZXhwb3J0cz17cGxvdDpmdW5jdGlvbih0LGUscixhKXt2YXIgYz1lLnhheGlzLHU9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIGJveGVzIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpPW4uc2VsZWN0KHRoaXMpLGE9dFswXSxmPWEudCxoPWEudHJhY2U7KGYud2RQb3M9Zi5iZFBvcypoLndoaXNrZXJ3aWR0aCwhMCE9PWgudmlzaWJsZXx8Zi5lbXB0eSk/aS5yZW1vdmUoKTooImgiPT09aC5vcmllbnRhdGlvbj8oZT11LHI9Yyk6KGU9YyxyPXUpLG8oaSx7cG9zOmUsdmFsOnJ9LGgsZikscyhpLHt4OmMseTp1fSxoLGYpLGwoaSx7cG9zOmUsdmFsOnJ9LGgsZikpfSkpfSxwbG90Qm94QW5kV2hpc2tlcnM6byxwbG90UG9pbnRzOnMscGxvdEJveE1lYW46bH19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCJAcGxvdGx5L2QzIjo1OH1dLDk0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuLGk9dC5jZCxhPXQueGF4aXMsbz10LnlheGlzLHM9W107aWYoITE9PT1lKWZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspaVtyXS5wdHNbbl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxpLmxlbmd0aDtyKyspZm9yKG49MDtuPChpW3JdLnB0c3x8W10pLmxlbmd0aDtuKyspe3ZhciBsPWlbcl0ucHRzW25dLGM9YS5jMnAobC54KSx1PW8uYzJwKGwueSk7ZS5jb250YWlucyhbYyx1XSxudWxsLGwuaSx0KT8ocy5wdXNoKHtwb2ludE51bWJlcjpsLmkseDphLmMyZChsLngpLHk6by5jMmQobC55KX0pLGwuc2VsZWN0ZWQ9MSk6bC5zZWxlY3RlZD0wfXJldHVybiBzfX0se31dLDk1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKTtlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcudHJhY2UuYm94ZXMiKTtvLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLG89ZVswXS50cmFjZSxzPW8ubGluZS53aWR0aDtmdW5jdGlvbiBsKHQsZSxyLG4pe3Quc3R5bGUoInN0cm9rZS13aWR0aCIsZSsicHgiKS5jYWxsKGkuc3Ryb2tlLHIpLmNhbGwoaS5maWxsLG4pfXZhciBjPXIuc2VsZWN0QWxsKCJwYXRoLmJveCIpO2lmKCJjYW5kbGVzdGljayI9PT1vLnR5cGUpYy5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIGU9bi5zZWxlY3QodGhpcykscj1vW3QuZGlyXTtsKGUsci5saW5lLndpZHRoLHIubGluZS5jb2xvcixyLmZpbGxjb2xvciksZS5zdHlsZSgib3BhY2l0eSIsby5zZWxlY3RlZHBvaW50cyYmIXQuc2VsZWN0ZWQ/LjM6MSl9fSkpO2Vsc2V7bChjLHMsby5saW5lLmNvbG9yLG8uZmlsbGNvbG9yKSxyLnNlbGVjdEFsbCgicGF0aC5tZWFuIikuc3R5bGUoeyJzdHJva2Utd2lkdGgiOnMsInN0cm9rZS1kYXNoYXJyYXkiOjIqcysicHgsIitzKyJweCJ9KS5jYWxsKGkuc3Ryb2tlLG8ubGluZS5jb2xvcik7dmFyIHU9ci5zZWxlY3RBbGwoInBhdGgucG9pbnQiKTthLnBvaW50U3R5bGUodSxvLHQpfX0pKX0sc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZSxpPXIuc2VsZWN0QWxsKCJwYXRoLnBvaW50Iik7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShpLG4pOmEucG9pbnRTdHlsZShpLG4sdCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCJAcGxvdGx5L2QzIjo1OH1dLDk1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi9vaGxjL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2JveC9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0KXtyZXR1cm57bGluZTp7Y29sb3I6bih7fSxvLmxpbmUuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOm8ubGluZS53aWR0aCxlZGl0VHlwZToic3R5bGUifSxmaWxsY29sb3I6by5maWxsY29sb3IsZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXt4cGVyaW9kOmEueHBlcmlvZCx4cGVyaW9kMDphLnhwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6YS54cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx4OmEueCxvcGVuOmEub3BlbixoaWdoOmEuaGlnaCxsb3c6YS5sb3csY2xvc2U6YS5jbG9zZSxsaW5lOnt3aWR0aDpuKHt9LG8ubGluZS53aWR0aCx7fSksZWRpdFR5cGU6InN0eWxlIn0saW5jcmVhc2luZzpzKGEuaW5jcmVhc2luZy5saW5lLmNvbG9yLmRmbHQpLGRlY3JlYXNpbmc6cyhhLmRlY3JlYXNpbmcubGluZS5jb2xvci5kZmx0KSx0ZXh0OmEudGV4dCxob3ZlcnRleHQ6YS5ob3ZlcnRleHQsd2hpc2tlcndpZHRoOm4oe30sby53aGlza2Vyd2lkdGgse2RmbHQ6MH0pLGhvdmVybGFiZWw6YS5ob3ZlcmxhYmVsfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vYm94L2F0dHJpYnV0ZXMiOjkzOSwiLi4vb2hsYy9hdHRyaWJ1dGVzIjoxMTM3fV0sOTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxvPXQoIi4uL29obGMvY2FsYyIpLmNhbGNDb21tb247ZnVuY3Rpb24gcyh0LGUscixuKXtyZXR1cm57bWluOnIscTE6TWF0aC5taW4odCxuKSxtZWQ6bixxMzpNYXRoLm1heCh0LG4pLG1heDplfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGw9aS5nZXRGcm9tSWQodCxlLnhheGlzKSxjPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksdT1sLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1hKGUsbCwieCIsdSkudmFscyxoPW8odCxlLHUsZixjLHMpO3JldHVybiBoLmxlbmd0aD8obi5leHRlbmRGbGF0KGhbMF0udCx7bnVtOnIuX251bUJveGVzLGRQb3M6bi5kaXN0aW5jdFZhbHMoZikubWluRGlmZi8yLHBvc0xldHRlcjoieCIsdmFsTGV0dGVyOiJ5In0pLHIuX251bUJveGVzKyssaCk6W3t0OntlbXB0eTohMH19XX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vb2hsYy9jYWxjIjoxMTM4fV0sOTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vb2hsYy9vaGxjX2RlZmF1bHRzIiksbz10KCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gbCh0LGUscixuKXt2YXIgYT1yKG4rIi5saW5lLmNvbG9yIik7cihuKyIubGluZS53aWR0aCIsZS5saW5lLndpZHRoKSxyKG4rIi5maWxsY29sb3IiLGkuYWRkT3BhY2l0eShhLC41KSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1hKHQsZSxjLGkpPyhvKHQsZSxpLGMse3g6ITB9KSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJsaW5lLndpZHRoIiksbCh0LGUsYywiaW5jcmVhc2luZyIpLGwodCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygid2hpc2tlcndpZHRoIiksaS5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uL29obGMvb2hsY19kZWZhdWx0cyI6MTE0MiwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4vYXR0cmlidXRlcyI6OTUxfV0sOTU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNhbmRsZXN0aWNrIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic2hvd0xlZ2VuZCIsImNhbmRsZXN0aWNrIiwiYm94TGF5b3V0Il0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi4vYm94L2xheW91dF9kZWZhdWx0cyIpLnN1cHBseUxheW91dERlZmF1bHRzLGNyb3NzVHJhY2VDYWxjOnQoIi4uL2JveC9jcm9zc190cmFjZV9jYWxjIikuY3Jvc3NUcmFjZUNhbGMsc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuLi9ib3gvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJib3hsYXllciIsc3R5bGU6dCgiLi4vYm94L3N0eWxlIikuc3R5bGUsaG92ZXJQb2ludHM6dCgiLi4vb2hsYy9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuLi9vaGxjL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiOjk0MSwiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIjo5NDYsIi4uL2JveC9sYXlvdXRfZGVmYXVsdHMiOjk0NywiLi4vYm94L3Bsb3QiOjk0OCwiLi4vYm94L3N0eWxlIjo5NTAsIi4uL29obGMvaG92ZXIiOjExNDAsIi4uL29obGMvc2VsZWN0IjoxMTQ0LCIuL2F0dHJpYnV0ZXMiOjk1MSwiLi9jYWxjIjo5NTIsIi4vZGVmYXVsdHMiOjk1M31dLDk1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2F4aXNfZGVmYXVsdHMiKSxpPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxvKXthKCJhIil8fChhKCJkYSIpLGEoImEwIikpLGEoImIiKXx8KGEoImRiIiksYSgiYjAiKSksZnVuY3Rpb24odCxlLHIsYSl7WyJhYXhpcyIsImJheGlzIl0uZm9yRWFjaCgoZnVuY3Rpb24obyl7dmFyIHM9by5jaGFyQXQoMCksbD10W29dfHx7fSxjPWkubmV3Q29udGFpbmVyKGUsbyksdT17dGlja2ZvbnQ6IngiLGlkOnMrImF4aXMiLGxldHRlcjpzLGZvbnQ6ZS5mb250LG5hbWU6byxkYXRhOnRbc10sY2FsZW5kYXI6ZS5jYWxlbmRhcixkZmx0Q29sb3I6YSxiZ0NvbG9yOnIucGFwZXJfYmdjb2xvcixhdXRvdHlwZW51bWJlcnNEZmx0OnIuYXV0b3R5cGVudW1iZXJzLGZ1bGxMYXlvdXQ6cn07bihsLGMsdSksYy5fY2F0ZWdvcmllcz1jLl9jYXRlZ29yaWVzfHxbXSx0W29dfHwiLSI9PT1sLnR5cGV8fCh0W29dPXt0eXBlOmwudHlwZX0pfSkpfSh0LGUscixvKX19LHsiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuL2F4aXNfZGVmYXVsdHMiOjk2MH1dLDk1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24gdChlLHIpe2lmKCFuKGUpfHxyPj0xMClyZXR1cm4gbnVsbDtmb3IodmFyIGk9MS8wLGE9LTEvMCxvPWUubGVuZ3RoLHM9MDtzPG87cysrKXt2YXIgbD1lW3NdO2lmKG4obCkpe3ZhciBjPXQobCxyKzEpO2MmJihpPU1hdGgubWluKGNbMF0saSksYT1NYXRoLm1heChjWzFdLGEpKX1lbHNlIGk9TWF0aC5taW4obCxpKSxhPU1hdGgubWF4KGwsYSl9cmV0dXJuW2ksYV19KHQsMCl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTU3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi9heGlzX2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IvYXR0cmlidXRlcyIpLG89bih7ZWRpdFR5cGU6ImNhbGMifSk7by5mYW1pbHkuZGZsdD0nIk9wZW4gU2FucyIsIHZlcmRhbmEsIGFyaWFsLCBzYW5zLXNlcmlmJyxvLnNpemUuZGZsdD0xMixvLmNvbG9yLmRmbHQ9YS5kZWZhdWx0TGluZSxlLmV4cG9ydHM9e2NhcnBldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGEwOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGRhOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGI6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sYjA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZGI6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sY2hlYXRlcnNsb3BlOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGFheGlzOmksYmF4aXM6aSxmb250Om8sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmEuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSx0cmFuc2Zvcm1zOnZvaWQgMH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuL2F4aXNfYXR0cmlidXRlcyI6OTU5fV0sOTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHk9bihyKT8iYSI6ImIiLHg9KCJhIj09PXk/dC5hYXhpczp0LmJheGlzKS5zbW9vdGhpbmcsYj0iYSI9PT15P3QuYTJpOnQuYjJqLF89ImEiPT09eT9yOmksdz0iYSI9PT15P2k6cixUPSJhIj09PXk/ZS5hLmxlbmd0aDplLmIubGVuZ3RoLGs9ImEiPT09eT9lLmIubGVuZ3RoOmUuYS5sZW5ndGgsQT1NYXRoLmZsb29yKCJhIj09PXk/dC5iMmoodyk6dC5hMmkodykpLE09ImEiPT09eT9mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxBKX06ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLEEsZSl9O3gmJihzPU1hdGgubWF4KDAsTWF0aC5taW4oay0yLEEpKSxsPUEtcyxvPSJhIj09PXk/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLHMscixsKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxzLGUsbCxyKX0pO3ZhciBTPWIoX1swXSksRT1iKF9bMV0pLEw9UzxFPzE6LTEsQz0xZS04KihFLVMpLFA9TD4wP01hdGguZmxvb3I6TWF0aC5jZWlsLEk9TD4wP01hdGguY2VpbDpNYXRoLmZsb29yLE89TD4wP01hdGgubWluOk1hdGgubWF4LHo9TD4wP01hdGgubWF4Ok1hdGgubWluLEQ9UChTK0MpLFI9SShFLUMpLEY9W1tmPU0oUyldXTtmb3IoYT1EO2EqTDxSKkw7YSs9TCljPVtdLG09eihTLGEpLHY9KGc9TyhFLGErTCkpLW0sdT1NYXRoLm1heCgwLE1hdGgubWluKFQtMixNYXRoLmZsb29yKC41KihtK2cpKSkpLGg9TShnKSx4JiYocD1vKHUsbS11KSxkPW8odSxnLXUpLGMucHVzaChbZlswXStwWzBdLzMqdixmWzFdK3BbMV0vMyp2XSksYy5wdXNoKFtoWzBdLWRbMF0vMyp2LGhbMV0tZFsxXS8zKnZdKSksYy5wdXNoKGgpLEYucHVzaChjKSxmPWg7cmV0dXJuIEZ9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTU5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25XaXRoRGF0ZXMscz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGw7ZS5leHBvcnRzPXtjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIn0sc21vb3RoaW5nOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxtaW46MCxtYXg6MS4zLGVkaXRUeXBlOiJjYWxjIn0sdGl0bGU6e3RleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LGZvbnQ6bih7ZWRpdFR5cGU6ImNhbGMifSksb2Zmc2V0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MTAsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIi0iLCJsaW5lYXIiLCJkYXRlIiwiY2F0ZWdvcnkiXSxkZmx0OiItIixlZGl0VHlwZToiY2FsYyJ9LGF1dG90eXBlbnVtYmVyczphLmF1dG90eXBlbnVtYmVycyxhdXRvcmFuZ2U6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbITAsITEsInJldmVyc2VkIl0sZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHJhbmdlbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibm9ybWFsIiwidG96ZXJvIiwibm9ubmVnYXRpdmUiXSxkZmx0OiJub3JtYWwiLGVkaXRUeXBlOiJjYWxjIn0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGVkaXRUeXBlOiJjYWxjIixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XX0sZml4ZWRyYW5nZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNoZWF0ZXJ0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJpbmRleCIsInZhbHVlIl0sZGZsdDoidmFsdWUiLGVkaXRUeXBlOiJjYWxjIn0sdGlja21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImFycmF5Il0sZGZsdDoiYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbnRpY2tzOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx0aWNrdmFsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0aWNrdGV4dDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaG93dGlja2xhYmVsczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhcnQiLCJlbmQiLCJib3RoIiwibm9uZSJdLGRmbHQ6InN0YXJ0IixlZGl0VHlwZToiY2FsYyJ9LHRpY2tmb250Om4oe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2thbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6ImF1dG8iLGVkaXRUeXBlOiJjYWxjIn0sdGlja3ByZWZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2twcmVmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3N1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd3RpY2tzdWZmaXg6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFsbCIsImZpcnN0IiwibGFzdCIsIm5vbmUiXSxkZmx0OiJhbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2V4cG9uZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJmaXJzdCIsImxhc3QiLCJub25lIl0sZGZsdDoiYWxsIixlZGl0VHlwZToiY2FsYyJ9LGV4cG9uZW50Zm9ybWF0Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwiZSIsIkUiLCJwb3dlciIsIlNJIiwiQiJdLGRmbHQ6IkIiLGVkaXRUeXBlOiJjYWxjIn0sbWluZXhwb25lbnQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDozLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2VwYXJhdGV0aG91c2FuZHM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSx0aWNrZm9ybWF0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMiLGRlc2NyaXB0aW9uOm8oInRpY2sgbGFiZWwiKX0sdGlja2Zvcm1hdHN0b3BzOnMoYS50aWNrZm9ybWF0c3RvcHMsImNhbGMiLCJmcm9tLXJvb3QiKSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxwYWRkaW5nOnt2YWxUeXBlOiJpbnRlZ2VyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn0sbGFiZWxwcmVmaXg6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxsYWJlbHN1ZmZpeDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkuZGVmYXVsdExpbmUsZWRpdFR5cGU6ImNhbGMifSxsaW5ld2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sZ3JpZGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2dyaWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxtaW5vcmdyaWRjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sbWlub3Jncmlkd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sbWlub3JncmlkY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OmkubGlnaHRMaW5lLGVkaXRUeXBlOiJjYWxjIn0sc3RhcnRsaW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0bGluZWNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxzdGFydGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5lOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LGVuZGxpbmV3aWR0aDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMifSxlbmRsaW5lY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHRpY2swOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGR0aWNrOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGFycmF5dGljazA6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LGFycmF5ZHRpY2s6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LF9kZXByZWNhdGVkOnt0aXRsZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpuKHtlZGl0VHlwZToiY2FsYyJ9KSx0aXRsZW9mZnNldDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEwLGVkaXRUeXBlOiJjYWxjIn19LGVkaXRUeXBlOiJjYWxjIn19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sOTYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLmFkZE9wYWNpdHksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja192YWx1ZV9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyIpLHU9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19hdXRvdHlwZSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGg9ci5sZXR0ZXIscD1yLmZvbnR8fHt9LGQ9bltoKyJheGlzIl07ZnVuY3Rpb24gbShyLG4pe3JldHVybiBvLmNvZXJjZSh0LGUsZCxyLG4pfWZ1bmN0aW9uIGcocixuKXtyZXR1cm4gby5jb2VyY2UyKHQsZSxkLHIsbil9ci5uYW1lJiYoZS5fbmFtZT1yLm5hbWUsZS5faWQ9ci5uYW1lKSxtKCJhdXRvdHlwZW51bWJlcnMiLHIuYXV0b3R5cGVudW1iZXJzRGZsdCk7dmFyIHY9bSgidHlwZSIpOygiLSI9PT12JiYoci5kYXRhJiZmdW5jdGlvbih0LGUpe2lmKCItIiE9PXQudHlwZSlyZXR1cm47dmFyIHI9dC5faWQuY2hhckF0KDApLG49dFtyKyJjYWxlbmRhciJdO3QudHlwZT1mKGUsbix7YXV0b3R5cGVudW1iZXJzOnQuYXV0b3R5cGVudW1iZXJzfSl9KGUsci5kYXRhKSwiLSI9PT1lLnR5cGU/ZS50eXBlPSJsaW5lYXIiOnY9dC50eXBlPWUudHlwZSksbSgic21vb3RoaW5nIiksbSgiY2hlYXRlcnR5cGUiKSxtKCJzaG93dGlja2xhYmVscyIpLG0oImxhYmVscHJlZml4IixoKyIgPSAiKSxtKCJsYWJlbHN1ZmZpeCIpLG0oInNob3d0aWNrcHJlZml4IiksbSgic2hvd3RpY2tzdWZmaXgiKSxtKCJzZXBhcmF0ZXRob3VzYW5kcyIpLG0oInRpY2tmb3JtYXQiKSxtKCJleHBvbmVudGZvcm1hdCIpLG0oIm1pbmV4cG9uZW50IiksbSgic2hvd2V4cG9uZW50IiksbSgiY2F0ZWdvcnlvcmRlciIpLG0oInRpY2ttb2RlIiksbSgidGlja3ZhbHMiKSxtKCJ0aWNrdGV4dCIpLG0oInRpY2swIiksbSgiZHRpY2siKSwiYXJyYXkiPT09ZS50aWNrbW9kZSYmKG0oImFycmF5dGljazAiKSxtKCJhcnJheWR0aWNrIikpLG0oImxhYmVscGFkZGluZyIpLGUuX2hvdmVydGl0bGU9aCwiZGF0ZSI9PT12KSYmYS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIikodCxlLCJjYWxlbmRhciIsci5jYWxlbmRhcik7dShlLHIuZnVsbExheW91dCksZS5jMnA9by5pZGVudGl0eTt2YXIgeT1tKCJjb2xvciIsci5kZmx0Q29sb3IpLHg9eT09PXQuY29sb3I/eTpwLmNvbG9yO20oInRpdGxlLnRleHQiKSYmKG8uY29lcmNlRm9udChtLCJ0aXRsZS5mb250Iix7ZmFtaWx5OnAuZmFtaWx5LHNpemU6by5iaWdGb250KHAuc2l6ZSksY29sb3I6eH0pLG0oInRpdGxlLm9mZnNldCIpKSxtKCJ0aWNrYW5nbGUiKSxtKCJhdXRvcmFuZ2UiLCFlLmlzVmFsaWRSYW5nZSh0LnJhbmdlKSkmJm0oInJhbmdlbW9kZSIpLG0oInJhbmdlIiksZS5jbGVhblJhbmdlKCksbSgiZml4ZWRyYW5nZSIpLHModCxlLG0sdiksbCh0LGUsbSx2LHIpLGModCxlLG0se2RhdGE6ci5kYXRhLGRhdGFBdHRyOmh9KTt2YXIgYj1nKCJncmlkY29sb3IiLGkoeSwuMykpLF89ZygiZ3JpZHdpZHRoIiksdz1tKCJzaG93Z3JpZCIpO3d8fChkZWxldGUgZS5ncmlkY29sb3IsZGVsZXRlIGUuZ3JpZHdpZHRoKTt2YXIgVD1nKCJzdGFydGxpbmVjb2xvciIseSksaz1nKCJzdGFydGxpbmV3aWR0aCIsXyk7bSgic3RhcnRsaW5lIixlLnNob3dncmlkfHwhIVR8fCEhayl8fChkZWxldGUgZS5zdGFydGxpbmVjb2xvcixkZWxldGUgZS5zdGFydGxpbmV3aWR0aCk7dmFyIEE9ZygiZW5kbGluZWNvbG9yIix5KSxNPWcoImVuZGxpbmV3aWR0aCIsXyk7cmV0dXJuIG0oImVuZGxpbmUiLGUuc2hvd2dyaWR8fCEhQXx8ISFNKXx8KGRlbGV0ZSBlLmVuZGxpbmVjb2xvcixkZWxldGUgZS5lbmRsaW5ld2lkdGgpLHc/KG0oIm1pbm9yZ3JpZGNvdW50IiksbSgibWlub3Jncmlkd2lkdGgiLF8pLG0oIm1pbm9yZ3JpZGNvbG9yIixpKGIsLjA2KSksZS5taW5vcmdyaWRjb3VudHx8KGRlbGV0ZSBlLm1pbm9yZ3JpZHdpZHRoLGRlbGV0ZSBlLm1pbm9yZ3JpZGNvbG9yKSk6KGRlbGV0ZSBlLmdyaWRjb2xvcixkZWxldGUgZS5ncmlkV2lkdGgpLCJub25lIj09PWUuc2hvd3RpY2tsYWJlbHMmJihkZWxldGUgZS50aWNrZm9udCxkZWxldGUgZS50aWNrYW5nbGUsZGVsZXRlIGUuc2hvd2V4cG9uZW50LGRlbGV0ZSBlLmV4cG9uZW50Zm9ybWF0LGRlbGV0ZSBlLm1pbmV4cG9uZW50LGRlbGV0ZSBlLnRpY2tmb3JtYXQsZGVsZXRlIGUuc2hvd3RpY2tzdWZmaXgsZGVsZXRlIGUuc2hvd3RpY2twcmVmaXgpLGUuc2hvd3RpY2tzdWZmaXh8fGRlbGV0ZSBlLnRpY2tzdWZmaXgsZS5zaG93dGlja3ByZWZpeHx8ZGVsZXRlIGUudGlja3ByZWZpeCxtKCJ0aWNrbW9kZSIpLGV9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2F1dG90eXBlIjo4MjgsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jYXRlZ29yeV9vcmRlcl9kZWZhdWx0cyI6ODMyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2V0X2NvbnZlcnQiOjg0OCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfbGFiZWxfZGVmYXVsdHMiOjg0OSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3RpY2tfdmFsdWVfZGVmYXVsdHMiOjg1MSwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjo5NTd9XSw5NjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXkxRCxhPXQoIi4vY2hlYXRlcl9iYXNpcyIpLG89dCgiLi9hcnJheV9taW5tYXgiKSxzPXQoIi4vY2FsY19ncmlkbGluZXMiKSxsPXQoIi4vY2FsY19sYWJlbHMiKSxjPXQoIi4vY2FsY19jbGlwcGF0aCIpLHU9dCgiLi4vaGVhdG1hcC9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9zbW9vdGhfZmlsbF8yZF9hcnJheSIpLGg9dCgiLi4vaGVhdG1hcC9jb252ZXJ0X2NvbHVtbl94eXoiKSxwPXQoIi4vc2V0X2NvbnZlcnQiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmdldEZyb21JZCh0LGUueGF4aXMpLGQ9bi5nZXRGcm9tSWQodCxlLnlheGlzKSxtPWUuYWF4aXMsZz1lLmJheGlzLHY9ZS54LHk9ZS55LHg9W107diYmaSh2KSYmeC5wdXNoKCJ4IikseSYmaSh5KSYmeC5wdXNoKCJ5IikseC5sZW5ndGgmJmgoZSxtLGcsImEiLCJiIix4KTt2YXIgYj1lLl9hPWUuX2F8fGUuYSxfPWUuX2I9ZS5fYnx8ZS5iO3Y9ZS5feHx8ZS54LHk9ZS5feXx8ZS55O3ZhciB3PXt9O2lmKGUuX2NoZWF0ZXIpe3ZhciBUPSJpbmRleCI9PT1tLmNoZWF0ZXJ0eXBlP2IubGVuZ3RoOmIsaz0iaW5kZXgiPT09Zy5jaGVhdGVydHlwZT9fLmxlbmd0aDpfO3Y9YShULGssZS5jaGVhdGVyc2xvcGUpfWUuX3g9dj11KHYpLGUuX3k9eT11KHkpLGYodixiLF8pLGYoeSxiLF8pLHAoZSksZS5zZXRTY2FsZSgpO3ZhciBBPW8odiksTT1vKHkpLFM9LjUqKEFbMV0tQVswXSksRT0uNSooQVsxXStBWzBdKSxMPS41KihNWzFdLU1bMF0pLEM9LjUqKE1bMV0rTVswXSk7cmV0dXJuIEE9W0UtMS4zKlMsRSsxLjMqU10sTT1bQy0xLjMqTCxDKzEuMypMXSxlLl9leHRyZW1lc1tyLl9pZF09bi5maW5kRXh0cmVtZXMocixBLHtwYWRkZWQ6ITB9KSxlLl9leHRyZW1lc1tkLl9pZF09bi5maW5kRXh0cmVtZXMoZCxNLHtwYWRkZWQ6ITB9KSxzKGUsImEiLCJiIikscyhlLCJiIiwiYSIpLGwoZSxtKSxsKGUsZyksdy5jbGlwc2VnbWVudHM9YyhlLl94Y3RybCxlLl95Y3RybCxtLGcpLHcueD12LHcueT15LHcuYT1iLHcuYj1fLFt3XX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjAsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDYyLCIuL2FycmF5X21pbm1heCI6OTU2LCIuL2NhbGNfY2xpcHBhdGgiOjk2MiwiLi9jYWxjX2dyaWRsaW5lcyI6OTYzLCIuL2NhbGNfbGFiZWxzIjo5NjQsIi4vY2hlYXRlcl9iYXNpcyI6OTY2LCIuL3NldF9jb252ZXJ0Ijo5NzksIi4vc21vb3RoX2ZpbGxfMmRfYXJyYXkiOjk4MH1dLDk2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYSxvLHM9W10sbD0hIXIuc21vb3RoaW5nLGM9ISFuLnNtb290aGluZyx1PXRbMF0ubGVuZ3RoLTEsZj10Lmxlbmd0aC0xO2ZvcihpPTAsYT1bXSxvPVtdO2k8PXU7aSsrKWFbaV09dFswXVtpXSxvW2ldPWVbMF1baV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmx9KSxpPTAsYT1bXSxvPVtdO2k8PWY7aSsrKWFbaV09dFtpXVt1XSxvW2ldPWVbaV1bdV07Zm9yKHMucHVzaCh7eDphLHk6byxiaWN1YmljOmN9KSxpPXUsYT1bXSxvPVtdO2k+PTA7aS0tKWFbdS1pXT10W2ZdW2ldLG9bdS1pXT1lW2ZdW2ldO2ZvcihzLnB1c2goe3g6YSx5Om8sYmljdWJpYzpsfSksaT1mLGE9W10sbz1bXTtpPj0wO2ktLSlhW2YtaV09dFtpXVswXSxvW2YtaV09ZVtpXVswXTtyZXR1cm4gcy5wdXNoKHt4OmEseTpvLGJpY3ViaWM6Y30pLHN9fSx7fV0sOTYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2LHkseD10WyJfIitlXSxiPXRbZSsiYXhpcyJdLF89Yi5fZ3JpZGxpbmVzPVtdLHc9Yi5fbWlub3JncmlkbGluZXM9W10sVD1iLl9ib3VuZGFyeWxpbmVzPVtdLGs9dFsiXyIrcl0sQT10W3IrImF4aXMiXTsiYXJyYXkiPT09Yi50aWNrbW9kZSYmKGIudGlja3ZhbHM9eC5zbGljZSgpKTt2YXIgTT10Ll94Y3RybCxTPXQuX3ljdHJsLEU9TVswXS5sZW5ndGgsTD1NLmxlbmd0aCxDPXQuX2EubGVuZ3RoLFA9dC5fYi5sZW5ndGg7bi5wcmVwVGlja3MoYiksImFycmF5Ij09PWIudGlja21vZGUmJmRlbGV0ZSBiLnRpY2t2YWxzO3ZhciBJPWIuc21vb3RoaW5nPzM6MTtmdW5jdGlvbiBPKG4pe3ZhciBpLGEsbyxzLGwsYyx1LGYscCxkLG0sZyx2PVtdLHk9W10seD17fTtpZigiYiI9PT1lKWZvcihhPXQuYjJqKG4pLG89TWF0aC5mbG9vcihNYXRoLm1heCgwLE1hdGgubWluKFAtMixhKSkpLHM9YS1vLHgubGVuZ3RoPVAseC5jcm9zc0xlbmd0aD1DLHgueHk9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZXZhbHh5KFtdLGUsYSl9LHguZHh5PWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZHh5ZGkoW10sZSxvLHIscyl9LGk9MDtpPEM7aSsrKWM9TWF0aC5taW4oQy0yLGkpLHU9aS1jLGY9dC5ldmFseHkoW10saSxhKSxBLnNtb290aGluZyYmaT4wJiYocD10LmR4eWRpKFtdLGktMSxvLDAscyksdi5wdXNoKGxbMF0rcFswXS8zKSx5LnB1c2gobFsxXStwWzFdLzMpLGQ9dC5keHlkaShbXSxpLTEsbywxLHMpLHYucHVzaChmWzBdLWRbMF0vMykseS5wdXNoKGZbMV0tZFsxXS8zKSksdi5wdXNoKGZbMF0pLHkucHVzaChmWzFdKSxsPWY7ZWxzZSBmb3IoaT10LmEyaShuKSxjPU1hdGguZmxvb3IoTWF0aC5tYXgoMCxNYXRoLm1pbihDLTIsaSkpKSx1PWktYyx4Lmxlbmd0aD1DLHguY3Jvc3NMZW5ndGg9UCx4Lnh5PWZ1bmN0aW9uKGUpe3JldHVybiB0LmV2YWx4eShbXSxpLGUpfSx4LmR4eT1mdW5jdGlvbihlLHIpe3JldHVybiB0LmR4eWRqKFtdLGMsZSx1LHIpfSxhPTA7YTxQO2ErKylvPU1hdGgubWluKFAtMixhKSxzPWEtbyxmPXQuZXZhbHh5KFtdLGksYSksQS5zbW9vdGhpbmcmJmE+MCYmKG09dC5keHlkaihbXSxjLGEtMSx1LDApLHYucHVzaChsWzBdK21bMF0vMykseS5wdXNoKGxbMV0rbVsxXS8zKSxnPXQuZHh5ZGooW10sYyxhLTEsdSwxKSx2LnB1c2goZlswXS1nWzBdLzMpLHkucHVzaChmWzFdLWdbMV0vMykpLHYucHVzaChmWzBdKSx5LnB1c2goZlsxXSksbD1mO3JldHVybiB4LmF4aXNMZXR0ZXI9ZSx4LmF4aXM9Yix4LmNyb3NzQXhpcz1BLHgudmFsdWU9bix4LmNvbnN0dmFyPXIseC5pbmRleD1oLHgueD12LHgueT15LHguc21vb3RoaW5nPUEuc21vb3RoaW5nLHh9ZnVuY3Rpb24geihuKXt2YXIgaSxhLG8scyxsLGM9W10sdT1bXSxmPXt9O2lmKGYubGVuZ3RoPXgubGVuZ3RoLGYuY3Jvc3NMZW5ndGg9ay5sZW5ndGgsImIiPT09ZSlmb3Iobz1NYXRoLm1heCgwLE1hdGgubWluKFAtMixuKSksbD1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1vKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sZSxuKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaShbXSxlLG8scixsKX0saT0wO2k8RTtpKyspY1tpXT1NW24qSV1baV0sdVtpXT1TW24qSV1baV07ZWxzZSBmb3IoYT1NYXRoLm1heCgwLE1hdGgubWluKEMtMixuKSkscz1NYXRoLm1pbigxLE1hdGgubWF4KDAsbi1hKSksZi54eT1mdW5jdGlvbihlKXtyZXR1cm4gdC5ldmFseHkoW10sbixlKX0sZi5keHk9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5keHlkaihbXSxhLGUscyxyKX0saT0wO2k8TDtpKyspY1tpXT1NW2ldW24qSV0sdVtpXT1TW2ldW24qSV07cmV0dXJuIGYuYXhpc0xldHRlcj1lLGYuYXhpcz1iLGYuY3Jvc3NBeGlzPUEsZi52YWx1ZT14W25dLGYuY29uc3R2YXI9cixmLmluZGV4PW4sZi54PWMsZi55PXUsZi5zbW9vdGhpbmc9QS5zbW9vdGhpbmcsZn1pZigiYXJyYXkiPT09Yi50aWNrbW9kZSl7Zm9yKGw9NWUtMTUsdT0oYz1bTWF0aC5mbG9vcigoeC5sZW5ndGgtMS1iLmFycmF5dGljazApL2IuYXJyYXlkdGljayooMStsKSksTWF0aC5jZWlsKC1iLmFycmF5dGljazAvYi5hcnJheWR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXS0xLGY9Y1sxXSsxLGg9dTtoPGY7aCsrKShvPWIuYXJyYXl0aWNrMCtiLmFycmF5ZHRpY2sqaCk8MHx8bz54Lmxlbmd0aC0xfHxfLnB1c2goaSh6KG8pLHtjb2xvcjpiLmdyaWRjb2xvcix3aWR0aDpiLmdyaWR3aWR0aH0pKTtmb3IoaD11O2g8ZjtoKyspaWYocz1iLmFycmF5dGljazArYi5hcnJheWR0aWNrKmgsbT1NYXRoLm1pbihzK2IuYXJyYXlkdGljayx4Lmxlbmd0aC0xKSwhKHM8MHx8cz54Lmxlbmd0aC0xfHxtPDB8fG0+eC5sZW5ndGgtMSkpZm9yKGc9eFtzXSx2PXhbbV0sYT0wO2E8Yi5taW5vcmdyaWRjb3VudDthKyspKHk9bS1zKTw9MHx8KGQ9Zysodi1nKSooYSsxKS8oYi5taW5vcmdyaWRjb3VudCsxKSooYi5hcnJheWR0aWNrL3kpKTx4WzBdfHxkPnhbeC5sZW5ndGgtMV18fHcucHVzaChpKE8oZCkse2NvbG9yOmIubWlub3JncmlkY29sb3Isd2lkdGg6Yi5taW5vcmdyaWR3aWR0aH0pKTtiLnN0YXJ0bGluZSYmVC5wdXNoKGkoeigwKSx7Y29sb3I6Yi5zdGFydGxpbmVjb2xvcix3aWR0aDpiLnN0YXJ0bGluZXdpZHRofSkpLGIuZW5kbGluZSYmVC5wdXNoKGkoeih4Lmxlbmd0aC0xKSx7Y29sb3I6Yi5lbmRsaW5lY29sb3Isd2lkdGg6Yi5lbmRsaW5ld2lkdGh9KSl9ZWxzZXtmb3IobD01ZS0xNSx1PShjPVtNYXRoLmZsb29yKCh4W3gubGVuZ3RoLTFdLWIudGljazApL2IuZHRpY2sqKDErbCkpLE1hdGguY2VpbCgoeFswXS1iLnRpY2swKS9iLmR0aWNrLygxK2wpKV0uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpKVswXSxmPWNbMV0saD11O2g8PWY7aCsrKXA9Yi50aWNrMCtiLmR0aWNrKmgsXy5wdXNoKGkoTyhwKSx7Y29sb3I6Yi5ncmlkY29sb3Isd2lkdGg6Yi5ncmlkd2lkdGh9KSk7Zm9yKGg9dS0xO2g8ZisxO2grKylmb3IocD1iLnRpY2swK2IuZHRpY2sqaCxhPTA7YTxiLm1pbm9yZ3JpZGNvdW50O2ErKykoZD1wK2IuZHRpY2sqKGErMSkvKGIubWlub3JncmlkY291bnQrMSkpPHhbMF18fGQ+eFt4Lmxlbmd0aC0xXXx8dy5wdXNoKGkoTyhkKSx7Y29sb3I6Yi5taW5vcmdyaWRjb2xvcix3aWR0aDpiLm1pbm9yZ3JpZHdpZHRofSkpO2Iuc3RhcnRsaW5lJiZULnB1c2goaShPKHhbMF0pLHtjb2xvcjpiLnN0YXJ0bGluZWNvbG9yLHdpZHRoOmIuc3RhcnRsaW5ld2lkdGh9KSksYi5lbmRsaW5lJiZULnB1c2goaShPKHhbeC5sZW5ndGgtMV0pLHtjb2xvcjpiLmVuZGxpbmVjb2xvcix3aWR0aDpiLmVuZGxpbmV3aWR0aH0pKX19fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDk2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZS5fbGFiZWxzPVtdLGw9ZS5fZ3JpZGxpbmVzO2ZvcihyPTA7cjxsLmxlbmd0aDtyKyspbz1sW3JdLC0xIT09WyJzdGFydCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtwcmVmaXg6dm9pZCAwLHN1ZmZpeDp2b2lkIDAsZW5kQW5jaG9yOiEwLHh5Om8ueHkoMCksZHh5Om8uZHh5KDAsMCksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSksLTEhPT1bImVuZCIsImJvdGgiXS5pbmRleE9mKGUuc2hvd3RpY2tsYWJlbHMpJiYoYT1uLnRpY2tUZXh0KGUsby52YWx1ZSksaShhLHtlbmRBbmNob3I6ITEseHk6by54eShvLmNyb3NzTGVuZ3RoLTEpLGR4eTpvLmR4eShvLmNyb3NzTGVuZ3RoLTIsMSksYXhpczpvLmF4aXMsbGVuZ3RoOm8uY3Jvc3NBeGlzLmxlbmd0aCxmb250Om8uYXhpcy50aWNrZm9udCxpc0ZpcnN0OjA9PT1yLGlzTGFzdDpyPT09bC5sZW5ndGgtMX0pLHMucHVzaChhKSl9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDk2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dFswXS1lWzBdLGE9dFsxXS1lWzFdLG89clswXS1lWzBdLHM9clsxXS1lWzFdLGw9TWF0aC5wb3coaSppK2EqYSwuMjUpLGM9TWF0aC5wb3cobypvK3MqcywuMjUpLHU9KGMqYyppLWwqbCpvKSpuLGY9KGMqYyphLWwqbCpzKSpuLGg9YyoobCtjKSozLHA9bCoobCtjKSozO3JldHVybltbZVswXSsoaCYmdS9oKSxlWzFdKyhoJiZmL2gpXSxbZVswXS0ocCYmdS9wKSxlWzFdLShwJiZmL3ApXV19fSx7fV0sOTY2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLG8scyxsLGMsdT1bXSxmPW4odCk/dC5sZW5ndGg6dCxoPW4oZSk/ZS5sZW5ndGg6ZSxwPW4odCk/dDpudWxsLGQ9bihlKT9lOm51bGw7cCYmKG89KHAubGVuZ3RoLTEpLyhwW3AubGVuZ3RoLTFdLXBbMF0pLyhmLTEpKSxkJiYocz0oZC5sZW5ndGgtMSkvKGRbZC5sZW5ndGgtMV0tZFswXSkvKGgtMSkpO3ZhciBtPTEvMCxnPS0xLzA7Zm9yKGE9MDthPGg7YSsrKWZvcih1W2FdPVtdLGw9ZD8oZFthXS1kWzBdKSpzOmEvKGgtMSksaT0wO2k8ZjtpKyspYz0ocD8ocFtpXS1wWzBdKSpvOmkvKGYtMSkpLWwqcixtPU1hdGgubWluKGMsbSksZz1NYXRoLm1heChjLGcpLHVbYV1baV09Yzt2YXIgdj0xLyhnLW0pLHk9LW0qdjtmb3IoYT0wO2E8aDthKyspZm9yKGk9MDtpPGY7aSsrKXVbYV1baV09dip1W2FdW2ldK3k7cmV0dXJuIHV9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY2F0bXVsbF9yb20iKSxpPXQoIi4uLy4uL2xpYiIpLmVuc3VyZUFycmF5O2Z1bmN0aW9uIGEodCxlLHIpe3ZhciBuPS0uNSpyWzBdKzEuNSplWzBdLGk9LS41KnJbMV0rMS41KmVbMV07cmV0dXJuWygyKm4rdFswXSkvMywoMippK3RbMV0pLzNdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMsbCl7dmFyIGMsdSxmLGgscCxkLG0sZyx2LHkseD1yWzBdLmxlbmd0aCxiPXIubGVuZ3RoLF89cz8zKngtMjp4LHc9bD8zKmItMjpiO2Zvcih0PWkodCx3KSxlPWkoZSx3KSxmPTA7Zjx3O2YrKyl0W2ZdPWkodFtmXSxfKSxlW2ZdPWkoZVtmXSxfKTtmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKWZvcihwPXRbaF0sZD1lW2hdLG09clt1XSxnPW9bdV0sYz0wLGY9MDtjPHg7YysrLGYrPXM/MzoxKXBbZl09bVtjXSxkW2ZdPWdbY107aWYocylmb3IodT0wLGg9MDt1PGI7dSsrLGgrPWw/MzoxKXtmb3IoYz0xLGY9MztjPHgtMTtjKyssZis9Myl2PW4oW3JbdV1bYy0xXSxvW3VdW2MtMV1dLFtyW3VdW2NdLG9bdV1bY11dLFtyW3VdW2MrMV0sb1t1XVtjKzFdXSxzKSx0W2hdW2YtMV09dlswXVswXSxlW2hdW2YtMV09dlswXVsxXSx0W2hdW2YrMV09dlsxXVswXSxlW2hdW2YrMV09dlsxXVsxXTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09eVswXSxlW2hdWzFdPXlbMV0seT1hKFt0W2hdW18tMV0sZVtoXVtfLTFdXSxbdFtoXVtfLTNdLGVbaF1bXy0zXV0sW3RbaF1bXy00XSxlW2hdW18tNF1dKSx0W2hdW18tMl09eVswXSxlW2hdW18tMl09eVsxXX1pZihsKWZvcihmPTA7ZjxfO2YrKyl7Zm9yKGg9MztoPHctMztoKz0zKXY9bihbdFtoLTNdW2ZdLGVbaC0zXVtmXV0sW3RbaF1bZl0sZVtoXVtmXV0sW3RbaCszXVtmXSxlW2grM11bZl1dLGwpLHRbaC0xXVtmXT12WzBdWzBdLGVbaC0xXVtmXT12WzBdWzFdLHRbaCsxXVtmXT12WzFdWzBdLGVbaCsxXVtmXT12WzFdWzFdO3k9YShbdFswXVtmXSxlWzBdW2ZdXSxbdFsyXVtmXSxlWzJdW2ZdXSxbdFszXVtmXSxlWzNdW2ZdXSksdFsxXVtmXT15WzBdLGVbMV1bZl09eVsxXSx5PWEoW3Rbdy0xXVtmXSxlW3ctMV1bZl1dLFt0W3ctM11bZl0sZVt3LTNdW2ZdXSxbdFt3LTRdW2ZdLGVbdy00XVtmXV0pLHRbdy0yXVtmXT15WzBdLGVbdy0yXVtmXT15WzFdfWlmKHMmJmwpZm9yKGg9MTtoPHc7aCs9KGgrMSklMz09MD8yOjEpe2ZvcihmPTM7ZjxfLTM7Zis9Myl2PW4oW3RbaF1bZi0zXSxlW2hdW2YtM11dLFt0W2hdW2ZdLGVbaF1bZl1dLFt0W2hdW2YrM10sZVtoXVtmKzNdXSxzKSx0W2hdW2YtMV09LjUqKHRbaF1bZi0xXSt2WzBdWzBdKSxlW2hdW2YtMV09LjUqKGVbaF1bZi0xXSt2WzBdWzFdKSx0W2hdW2YrMV09LjUqKHRbaF1bZisxXSt2WzFdWzBdKSxlW2hdW2YrMV09LjUqKGVbaF1bZisxXSt2WzFdWzFdKTt5PWEoW3RbaF1bMF0sZVtoXVswXV0sW3RbaF1bMl0sZVtoXVsyXV0sW3RbaF1bM10sZVtoXVszXV0pLHRbaF1bMV09LjUqKHRbaF1bMV0reVswXSksZVtoXVsxXT0uNSooZVtoXVsxXSt5WzFdKSx5PWEoW3RbaF1bXy0xXSxlW2hdW18tMV1dLFt0W2hdW18tM10sZVtoXVtfLTNdXSxbdFtoXVtfLTRdLGVbaF1bXy00XV0pLHRbaF1bXy0yXT0uNSoodFtoXVtfLTJdK3lbMF0pLGVbaF1bXy0yXT0uNSooZVtoXVtfLTJdK3lbMV0pfXJldHVyblt0LGVdfX0seyIuLi8uLi9saWIiOjc3NiwiLi9jYXRtdWxsX3JvbSI6OTY1fV0sOTY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UkVMQVRJVkVfQ1VMTF9UT0xFUkFOQ0U6MWUtNn19LHt9XSw5Njk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSYmcj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9MyxuKj0zO3ZhciBoPWkqaSxwPTEtaSxkPXAqcCxtPXAqaSoyLGc9LTMqZCx2PTMqKGQtbSkseT0zKihtLWgpLHg9MypoLGI9YSphLF89YiphLHc9MS1hLFQ9dyp3LGs9VCp3O2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspbz1nKih1PXRbZl0pW25dW3JdK3YqdVtuXVtyKzFdK3kqdVtuXVtyKzJdK3gqdVtuXVtyKzNdLHM9Zyp1W24rMV1bcl0rdip1W24rMV1bcisxXSt5KnVbbisxXVtyKzJdK3gqdVtuKzFdW3IrM10sbD1nKnVbbisyXVtyXSt2KnVbbisyXVtyKzFdK3kqdVtuKzJdW3IrMl0reCp1W24rMl1bciszXSxjPWcqdVtuKzNdW3JdK3YqdVtuKzNdW3IrMV0reSp1W24rM11bcisyXSt4KnVbbiszXVtyKzNdLGVbZl09aypvKzMqKFQqYSpzK3cqYipsKStfKmM7cmV0dXJuIGV9OmU/ZnVuY3Rpb24oZSxyLG4saSxhKXt2YXIgbyxzLGwsYztlfHwoZT1bXSkscio9Mzt2YXIgdT1pKmksZj0xLWksaD1mKmYscD1mKmkqMixkPS0zKmgsbT0zKihoLXApLGc9MyoocC11KSx2PTMqdSx5PTEtYTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89ZCooYz10W2xdKVtuXVtyXSttKmNbbl1bcisxXStnKmNbbl1bcisyXSt2KmNbbl1bciszXSxzPWQqY1tuKzFdW3JdK20qY1tuKzFdW3IrMV0rZypjW24rMV1bcisyXSt2KmNbbisxXVtyKzNdLGVbbF09eSpvK2EqcztyZXR1cm4gZX06cj9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSksbio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsbT1kKmQsZz1tKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW25dW3IrMV0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbisxXVtyXSxsPWZbbisyXVtyKzFdLWZbbisyXVtyXSxjPWZbbiszXVtyKzFdLWZbbiszXVtyXSxlW3VdPWcqbyszKihtKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjO2V8fChlPVtdKTt2YXIgdT0xLWE7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPShjPXRbbF0pW25dW3IrMV0tY1tuXVtyXSxzPWNbbisxXVtyKzFdLWNbbisxXVtyXSxlW2xdPXUqbythKnM7cmV0dXJuIGV9fX0se31dLDk3MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlJiZyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGMsdSxmO2V8fChlPVtdKSxyKj0zLG4qPTM7dmFyIGg9aSppLHA9aCppLGQ9MS1pLG09ZCpkLGc9bSpkLHY9YSphLHk9MS1hLHg9eSp5LGI9eSphKjIsXz0tMyp4LHc9MyooeC1iKSxUPTMqKGItdiksaz0zKnY7Zm9yKGY9MDtmPHQubGVuZ3RoO2YrKylvPV8qKHU9dFtmXSlbbl1bcl0rdyp1W24rMV1bcl0rVCp1W24rMl1bcl0rayp1W24rM11bcl0scz1fKnVbbl1bcisxXSt3KnVbbisxXVtyKzFdK1QqdVtuKzJdW3IrMV0rayp1W24rM11bcisxXSxsPV8qdVtuXVtyKzJdK3cqdVtuKzFdW3IrMl0rVCp1W24rMl1bcisyXStrKnVbbiszXVtyKzJdLGM9Xyp1W25dW3IrM10rdyp1W24rMV1bciszXStUKnVbbisyXVtyKzNdK2sqdVtuKzNdW3IrM10sZVtmXT1nKm8rMyoobSppKnMrZCpoKmwpK3AqYztyZXR1cm4gZX06ZT9mdW5jdGlvbihlLHIsbixpLGEpe3ZhciBvLHMsbCxjLHUsZjtlfHwoZT1bXSkscio9Mzt2YXIgaD1hKmEscD1oKmEsZD0xLWEsbT1kKmQsZz1tKmQ7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKylvPShmPXRbdV0pW24rMV1bcl0tZltuXVtyXSxzPWZbbisxXVtyKzFdLWZbbl1bcisxXSxsPWZbbisxXVtyKzJdLWZbbl1bcisyXSxjPWZbbisxXVtyKzNdLWZbbl1bciszXSxlW3VdPWcqbyszKihtKmEqcytkKmgqbCkrcCpjO3JldHVybiBlfTpyP2Z1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pLG4qPTM7dmFyIHU9MS1pLGY9YSphLGg9MS1hLHA9aCpoLGQ9aCphKjIsbT0tMypwLGc9MyoocC1kKSx2PTMqKGQtZikseT0zKmY7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylvPW0qKGM9dFtsXSlbbl1bcl0rZypjW24rMV1bcl0rdipjW24rMl1bcl0reSpjW24rM11bcl0scz1tKmNbbl1bcisxXStnKmNbbisxXVtyKzFdK3YqY1tuKzJdW3IrMV0reSpjW24rM11bcisxXSxlW2xdPXUqbytpKnM7cmV0dXJuIGV9OmZ1bmN0aW9uKGUscixuLGksYSl7dmFyIG8scyxsLGM7ZXx8KGU9W10pO3ZhciB1PTEtaTtmb3IobD0wO2w8dC5sZW5ndGg7bCsrKW89KGM9dFtsXSlbbisxXVtyXS1jW25dW3JdLHM9Y1tuKzFdW3IrMV0tY1tuXVtyKzFdLGVbbF09dSpvK2kqcztyZXR1cm4gZX19fSx7fV0sOTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBhPWUtMixvPXItMjtyZXR1cm4gbiYmaT9mdW5jdGlvbihlLHIsbil7dmFyIGkscyxsLGMsdSxmO2V8fChlPVtdKTt2YXIgaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtoKj0zLHAqPTM7dmFyIGc9ZCpkLHY9ZypkLHk9MS1kLHg9eSp5LGI9eCp5LF89bSptLHc9XyptLFQ9MS1tLGs9VCpULEE9aypUO2ZvcihmPTA7Zjx0Lmxlbmd0aDtmKyspaT1iKih1PXRbZl0pW3BdW2hdKzMqKHgqZCp1W3BdW2grMV0reSpnKnVbcF1baCsyXSkrdip1W3BdW2grM10scz1iKnVbcCsxXVtoXSszKih4KmQqdVtwKzFdW2grMV0reSpnKnVbcCsxXVtoKzJdKSt2KnVbcCsxXVtoKzNdLGw9Yip1W3ArMl1baF0rMyooeCpkKnVbcCsyXVtoKzFdK3kqZyp1W3ArMl1baCsyXSkrdip1W3ArMl1baCszXSxjPWIqdVtwKzNdW2hdKzMqKHgqZCp1W3ArM11baCsxXSt5KmcqdVtwKzNdW2grMl0pK3YqdVtwKzNdW2grM10sZVtmXT1BKmkrMyooayptKnMrVCpfKmwpK3cqYztyZXR1cm4gZX06bj9mdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHUsZixoPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihyKSxhKSkscD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IobiksbykpLGQ9TWF0aC5tYXgoMCxNYXRoLm1pbigxLHItaCkpLG09TWF0aC5tYXgoMCxNYXRoLm1pbigxLG4tcCkpO2gqPTM7dmFyIGc9ZCpkLHY9ZypkLHk9MS1kLHg9eSp5LGI9eCp5LF89MS1tO2Zvcih1PTA7dTx0Lmxlbmd0aDt1KyspaT1fKihmPXRbdV0pW3BdW2hdK20qZltwKzFdW2hdLHM9XypmW3BdW2grMV0rbSpmW3ArMV1baCsxXSxsPV8qZltwXVtoKzJdK20qZltwKzFdW2grMV0sYz1fKmZbcF1baCszXSttKmZbcCsxXVtoKzFdLGVbdV09YippKzMqKHgqZCpzK3kqZypsKSt2KmM7cmV0dXJuIGV9Omk/ZnVuY3Rpb24oZSxyLG4pe2V8fChlPVtdKTt2YXIgaSxzLGwsYyx1LGYsaD1NYXRoLm1heCgwLE1hdGgubWluKE1hdGguZmxvb3IociksYSkpLHA9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKG4pLG8pKSxkPU1hdGgubWF4KDAsTWF0aC5taW4oMSxyLWgpKSxtPU1hdGgubWF4KDAsTWF0aC5taW4oMSxuLXApKTtwKj0zO3ZhciBnPW0qbSx2PWcqbSx5PTEtbSx4PXkqeSxiPXgqeSxfPTEtZDtmb3IodT0wO3U8dC5sZW5ndGg7dSsrKWk9XyooZj10W3VdKVtwXVtoXStkKmZbcF1baCsxXSxzPV8qZltwKzFdW2hdK2QqZltwKzFdW2grMV0sbD1fKmZbcCsyXVtoXStkKmZbcCsyXVtoKzFdLGM9XypmW3ArM11baF0rZCpmW3ArM11baCsxXSxlW3VdPWIqaSszKih4Km0qcyt5KmcqbCkrdipjO3JldHVybiBlfTpmdW5jdGlvbihlLHIsbil7ZXx8KGU9W10pO3ZhciBpLHMsbCxjLHU9TWF0aC5tYXgoMCxNYXRoLm1pbihNYXRoLmZsb29yKHIpLGEpKSxmPU1hdGgubWF4KDAsTWF0aC5taW4oTWF0aC5mbG9vcihuKSxvKSksaD1NYXRoLm1heCgwLE1hdGgubWluKDEsci11KSkscD1NYXRoLm1heCgwLE1hdGgubWluKDEsbi1mKSksZD0xLXAsbT0xLWg7Zm9yKGw9MDtsPHQubGVuZ3RoO2wrKylpPW0qKGM9dFtsXSlbZl1bdV0raCpjW2ZdW3UrMV0scz1tKmNbZisxXVt1XStoKmNbZisxXVt1KzFdLGVbbF09ZCppK3AqcztyZXR1cm4gZX19fSx7fV0sOTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi94eV9kZWZhdWx0cyIpLGE9dCgiLi9hYl9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCl7ZnVuY3Rpb24gYyhyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWUuX2NsaXBQYXRoSWQ9ImNsaXAiK2UudWlkKyJjYXJwZXQiO3ZhciB1PWMoImNvbG9yIixzLmRlZmF1bHRMaW5lKTsobi5jb2VyY2VGb250KGMsImZvbnQiKSxjKCJjYXJwZXQiKSxhKHQsZSxsLGMsdSksZS5hJiZlLmIpPyhlLmEubGVuZ3RoPDMmJihlLmFheGlzLnNtb290aGluZz0wKSxlLmIubGVuZ3RoPDMmJihlLmJheGlzLnNtb290aGluZz0wKSxpKHQsZSxjKXx8KGUudmlzaWJsZT0hMSksZS5fY2hlYXRlciYmYygiY2hlYXRlcnNsb3BlIikpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYiI6Nzc2LCIuL2FiX2RlZmF1bHRzIjo5NTUsIi4vYXR0cmlidXRlcyI6OTU3LCIuL3h5X2RlZmF1bHRzIjo5ODF9XSw5NzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxwbG90OnQoIi4vcGxvdCIpLGNhbGM6dCgiLi9jYWxjIiksYW5pbWF0YWJsZTohMCxpc0NvbnRhaW5lcjohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwiY2FycGV0IiwiY2FycGV0QXhpcyIsIm5vdExlZ2VuZElzb2xhdGFibGUiLCJub011bHRpQ2F0ZWdvcnkiLCJub0hvdmVyIiwibm9Tb3J0aW5nQnlWYWx1ZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjk1NywiLi9jYWxjIjo5NjEsIi4vZGVmYXVsdHMiOjk3MiwiLi9wbG90Ijo5Nzh9XSw5NzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG49dC5fZnVsbERhdGEubGVuZ3RoLGk9MDtpPG47aSsrKXt2YXIgYT10Ll9mdWxsRGF0YVtpXTtpZihhLmluZGV4IT09ZS5pbmRleCYmKCJjYXJwZXQiPT09YS50eXBlJiYocnx8KHI9YSksYS5jYXJwZXQ9PT1lLmNhcnBldCkpKXJldHVybiBhfXJldHVybiByfX0se31dLDk3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10Lmxlbmd0aClyZXR1cm4iIjt2YXIgbixpPVtdLGE9cj8zOjE7Zm9yKG49MDtuPHQubGVuZ3RoO24rPWEpaS5wdXNoKHRbbl0rIiwiK2Vbbl0pLHImJm48dC5sZW5ndGgtYSYmKGkucHVzaCgiQyIpLGkucHVzaChbdFtuKzFdKyIsIitlW24rMV0sdFtuKzJdKyIsIitlW24rMl0rIiAiXS5qb2luKCIgIikpKTtyZXR1cm4gaS5qb2luKHI/IiI6IkwiKX19LHt9XSw5NzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpO2ZvcihuKHQpP3QubGVuZ3RoPmUubGVuZ3RoJiYodD10LnNsaWNlKDAsZS5sZW5ndGgpKTp0PVtdLGk9MDtpPGUubGVuZ3RoO2krKyl0W2ldPXIoZVtpXSk7cmV0dXJuIHR9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG89aVswXSp0LmRwZHgoZSkscz1pWzFdKnQuZHBkeShyKSxsPTEsYz0xO2lmKGEpe3ZhciB1PU1hdGguc3FydChpWzBdKmlbMF0raVsxXSppWzFdKSxmPU1hdGguc3FydChhWzBdKmFbMF0rYVsxXSphWzFdKSxoPShpWzBdKmFbMF0raVsxXSphWzFdKS91L2Y7Yz1NYXRoLm1heCgwLGgpfXZhciBwPTE4MCpNYXRoLmF0YW4yKHMsbykvTWF0aC5QSTtyZXR1cm4gcDwtOTA/KHArPTE4MCxsPS1sKTpwPjkwJiYocC09MTgwLGw9LWwpLHthbmdsZTpwLGZsaXA6bCxwOnQuYzJwKG4sZSxyKSxvZmZzZXRNdWx0cGxpZXI6Y319fSx7fV0sOTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi9tYXBfMWRfYXJyYXkiKSxvPXQoIi4vbWFrZXBhdGgiKSxzPXQoIi4vb3JpZW50X3RleHQiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIiksdT1jLnN0clJvdGF0ZSxmPWMuc3RyVHJhbnNsYXRlLGg9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpO2Z1bmN0aW9uIHAodCxlLHIsaSxzLGwpe3ZhciBjPSJjb25zdC0iK3MrIi1saW5lcyIsdT1yLnNlbGVjdEFsbCgiLiIrYykuZGF0YShsKTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZChjLCEwKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLHUuZWFjaCgoZnVuY3Rpb24ocil7dmFyIGk9cixzPWkueCxsPWkueSxjPWEoW10scyx0LmMycCksdT1hKFtdLGwsZS5jMnApLGY9Ik0iK28oYyx1LGkuc21vb3RoaW5nKTtuLnNlbGVjdCh0aGlzKS5hdHRyKCJkIixmKS5zdHlsZSgic3Ryb2tlLXdpZHRoIixpLndpZHRoKS5zdHlsZSgic3Ryb2tlIixpLmNvbG9yKS5zdHlsZSgiZmlsbCIsIm5vbmUiKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBkKHQsZSxyLGEsbyxjLGgscCl7dmFyIGQ9Yy5zZWxlY3RBbGwoInRleHQuIitwKS5kYXRhKGgpO2QuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHAsITApO3ZhciBtPTAsZz17fTtyZXR1cm4gZC5lYWNoKChmdW5jdGlvbihvLGMpe3ZhciBoO2lmKCJhdXRvIj09PW8uYXhpcy50aWNrYW5nbGUpaD1zKGEsZSxyLG8ueHksby5keHkpO2Vsc2V7dmFyIHA9KG8uYXhpcy50aWNrYW5nbGUrMTgwKSpNYXRoLlBJLzE4MDtoPXMoYSxlLHIsby54eSxbTWF0aC5jb3MocCksTWF0aC5zaW4ocCldKX1jfHwoZz17YW5nbGU6aC5hbmdsZSxmbGlwOmguZmxpcH0pO3ZhciBkPShvLmVuZEFuY2hvcj8tMToxKSpoLmZsaXAsdj1uLnNlbGVjdCh0aGlzKS5hdHRyKHsidGV4dC1hbmNob3IiOmQ+MD8ic3RhcnQiOiJlbmQiLCJkYXRhLW5vdGV4IjoxfSkuY2FsbChpLmZvbnQsby5mb250KS50ZXh0KG8udGV4dCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KSx5PWkuYkJveCh0aGlzKTt2LmF0dHIoInRyYW5zZm9ybSIsZihoLnBbMF0saC5wWzFdKSt1KGguYW5nbGUpK2Yoby5heGlzLmxhYmVscGFkZGluZypkLC4zKnkuaGVpZ2h0KSksbT1NYXRoLm1heChtLHkud2lkdGgrby5heGlzLmxhYmVscGFkZGluZyl9KSksZC5leGl0KCkucmVtb3ZlKCksZy5tYXhFeHRlbnQ9bSxnfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgbD1lLnhheGlzLHU9ZS55YXhpcyxmPXQuX2Z1bGxMYXlvdXQuX2NsaXBzO2MubWFrZVRyYWNlR3JvdXBzKGksciwidHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxpPWVbMF0saD1pLnRyYWNlLG09aC5hYXhpcyxnPWguYmF4aXMseT1jLmVuc3VyZVNpbmdsZShyLCJnIiwibWlub3JsYXllciIpLHg9Yy5lbnN1cmVTaW5nbGUociwiZyIsIm1ham9ybGF5ZXIiKSxiPWMuZW5zdXJlU2luZ2xlKHIsImciLCJib3VuZGFyeWxheWVyIiksXz1jLmVuc3VyZVNpbmdsZShyLCJnIiwibGFiZWxsYXllciIpO3Iuc3R5bGUoIm9wYWNpdHkiLGgub3BhY2l0eSkscChsLHUseCxtLCJhIixtLl9ncmlkbGluZXMpLHAobCx1LHgsZywiYiIsZy5fZ3JpZGxpbmVzKSxwKGwsdSx5LG0sImEiLG0uX21pbm9yZ3JpZGxpbmVzKSxwKGwsdSx5LGcsImIiLGcuX21pbm9yZ3JpZGxpbmVzKSxwKGwsdSxiLG0sImEtYm91bmRhcnkiLG0uX2JvdW5kYXJ5bGluZXMpLHAobCx1LGIsZywiYi1ib3VuZGFyeSIsZy5fYm91bmRhcnlsaW5lcyk7dmFyIHc9ZCh0LGwsdSxoLGksXyxtLl9sYWJlbHMsImEtbGFiZWwiKSxUPWQodCxsLHUsaCxpLF8sZy5fbGFiZWxzLCJiLWxhYmVsIik7IWZ1bmN0aW9uKHQsZSxyLG4saSxhLG8sbCl7dmFyIHUsZixoLHAsZD1jLmFnZ051bXMoTWF0aC5taW4sbnVsbCxyLmEpLG09Yy5hZ2dOdW1zKE1hdGgubWF4LG51bGwsci5hKSxnPWMuYWdnTnVtcyhNYXRoLm1pbixudWxsLHIuYikseT1jLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxyLmIpO3U9LjUqKGQrbSksZj1nLGg9ci5hYjJ4eSh1LGYsITApLHA9ci5keHlkYV9yb3VnaCh1LGYpLHZvaWQgMD09PW8uYW5nbGUmJmMuZXh0ZW5kRmxhdChvLHMocixpLGEsaCxyLmR4eWRiX3JvdWdoKHUsZikpKTt2KHQsZSxyLG4saCxwLHIuYWF4aXMsaSxhLG8sImEtdGl0bGUiKSx1PWQsZj0uNSooZyt5KSxoPXIuYWIyeHkodSxmLCEwKSxwPXIuZHh5ZGJfcm91Z2godSxmKSx2b2lkIDA9PT1sLmFuZ2xlJiZjLmV4dGVuZEZsYXQobCxzKHIsaSxhLGgsci5keHlkYV9yb3VnaCh1LGYpKSk7dih0LGUscixuLGgscCxyLmJheGlzLGksYSxsLCJiLXRpdGxlIil9KHQsXyxoLGksbCx1LHcsVCksZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgcyxsLHUsZixoPXIuc2VsZWN0KCIjIit0Ll9jbGlwUGF0aElkKTtoLnNpemUoKXx8KGg9ci5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY2FycGV0Y2xpcCIsITApKTt2YXIgcD1jLmVuc3VyZVNpbmdsZShoLCJwYXRoIiwiY2FycGV0Ym91bmRhcnkiKSxkPWUuY2xpcHNlZ21lbnRzLG09W107Zm9yKGY9MDtmPGQubGVuZ3RoO2YrKylzPWRbZl0sbD1hKFtdLHMueCxuLmMycCksdT1hKFtdLHMueSxpLmMycCksbS5wdXNoKG8obCx1LHMuYmljdWJpYykpO3ZhciBnPSJNIittLmpvaW4oIkwiKSsiWiI7aC5hdHRyKCJpZCIsdC5fY2xpcFBhdGhJZCkscC5hdHRyKCJkIixnKX0oaCxpLGYsbCx1KX0pKX07dmFyIG09aC5MSU5FX1NQQUNJTkcsZz0oMS1oLk1JRF9TSElGVCkvbSsxO2Z1bmN0aW9uIHYodCxlLHIsYSxvLGMsaCxwLGQsdix5KXt2YXIgeD1bXTtoLnRpdGxlLnRleHQmJngucHVzaChoLnRpdGxlLnRleHQpO3ZhciBiPWUuc2VsZWN0QWxsKCJ0ZXh0LiIreSkuZGF0YSh4KSxfPXYubWF4RXh0ZW50O2IuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5jbGFzc2VkKHksITApLGIuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1zKHIscCxkLG8sYyk7LTE9PT1bInN0YXJ0IiwiYm90aCJdLmluZGV4T2YoaC5zaG93dGlja2xhYmVscykmJihfPTApO3ZhciBhPWgudGl0bGUuZm9udC5zaXplO18rPWEraC50aXRsZS5vZmZzZXQ7dmFyIHk9KHYuYW5nbGUrKHYuZmxpcDwwPzE4MDowKS1lLmFuZ2xlKzQ1MCklMzYwLHg9eT45MCYmeTwyNzAsYj1uLnNlbGVjdCh0aGlzKTtiLnRleHQoaC50aXRsZS50ZXh0KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpLHgmJihfPSgtbC5saW5lQ291bnQoYikrZykqbSphLV8pLGIuYXR0cigidHJhbnNmb3JtIixmKGUucFswXSxlLnBbMV0pK3UoZS5hbmdsZSkrZigwLF8pKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLmNhbGwoaS5mb250LGgudGl0bGUuZm9udCl9KSksYi5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvYWxpZ25tZW50Ijo3NDQsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi9tYWtlcGF0aCI6OTc1LCIuL21hcF8xZF9hcnJheSI6OTc2LCIuL29yaWVudF90ZXh0Ijo5NzcsIkBwbG90bHkvZDMiOjU4fV0sOTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvc2VhcmNoIikuZmluZEJpbixhPXQoIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyIpLG89dCgiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciIpLHM9dCgiLi9jcmVhdGVfaV9kZXJpdmF0aXZlX2V2YWx1YXRvciIpLGw9dCgiLi9jcmVhdGVfal9kZXJpdmF0aXZlX2V2YWx1YXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10Ll9hLHI9dC5fYixjPWUubGVuZ3RoLHU9ci5sZW5ndGgsZj10LmFheGlzLGg9dC5iYXhpcyxwPWVbMF0sZD1lW2MtMV0sbT1yWzBdLGc9clt1LTFdLHY9ZVtlLmxlbmd0aC0xXS1lWzBdLHk9cltyLmxlbmd0aC0xXS1yWzBdLHg9dipuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFLGI9eSpuLlJFTEFUSVZFX0NVTExfVE9MRVJBTkNFO3AtPXgsZCs9eCxtLT1iLGcrPWIsdC5pc1Zpc2libGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD5wJiZ0PGQmJmU+bSYmZTxnfSx0LmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDxwfHx0PmR8fGU8bXx8ZT5nfSx0LnNldFNjYWxlPWZ1bmN0aW9uKCl7dmFyIGU9dC5feCxyPXQuX3ksbj1hKHQuX3hjdHJsLHQuX3ljdHJsLGUscixmLnNtb290aGluZyxoLnNtb290aGluZyk7dC5feGN0cmw9blswXSx0Ll95Y3RybD1uWzFdLHQuZXZhbHh5PW8oW3QuX3hjdHJsLHQuX3ljdHJsXSxjLHUsZi5zbW9vdGhpbmcsaC5zbW9vdGhpbmcpLHQuZHh5ZGk9cyhbdC5feGN0cmwsdC5feWN0cmxdLGYuc21vb3RoaW5nLGguc21vb3RoaW5nKSx0LmR4eWRqPWwoW3QuX3hjdHJsLHQuX3ljdHJsXSxmLnNtb290aGluZyxoLnNtb290aGluZyl9LHQuaTJhPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzBdKSxjLTIpLG49dFswXS1yO3JldHVybigxLW4pKmVbcl0rbiplW3IrMV19LHQuajJiPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5mbG9vcih0WzFdKSxjLTIpLG49dFsxXS1lO3JldHVybigxLW4pKnJbZV0rbipyW2UrMV19LHQuaWoyYWI9ZnVuY3Rpb24oZSl7cmV0dXJuW3QuaTJhKGVbMF0pLHQuajJiKGVbMV0pXX0sdC5hMmk9ZnVuY3Rpb24odCl7dmFyIHI9TWF0aC5tYXgoMCxNYXRoLm1pbihpKHQsZSksYy0yKSksbj1lW3JdLGE9ZVtyKzFdO3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKGMtMSxyKyh0LW4pLyhhLW4pKSl9LHQuYjJqPWZ1bmN0aW9uKHQpe3ZhciBlPU1hdGgubWF4KDAsTWF0aC5taW4oaSh0LHIpLHUtMikpLG49cltlXSxhPXJbZSsxXTtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbih1LTEsZSsodC1uKS8oYS1uKSkpfSx0LmFiMmlqPWZ1bmN0aW9uKGUpe3JldHVyblt0LmEyaShlWzBdKSx0LmIyaihlWzFdKV19LHQuaTJjPWZ1bmN0aW9uKGUscil7cmV0dXJuIHQuZXZhbHh5KFtdLGUscil9LHQuYWIyeHk9ZnVuY3Rpb24obixpLGEpe2lmKCFhJiYobjxlWzBdfHxuPmVbYy0xXXxpPHJbMF18fGk+clt1LTFdKSlyZXR1cm5bITEsITFdO3ZhciBvPXQuYTJpKG4pLHM9dC5iMmooaSksbD10LmV2YWx4eShbXSxvLHMpO2lmKGEpe3ZhciBmLGgscCxkLG09MCxnPTAsdj1bXTtuPGVbMF0/KGY9MCxoPTAsbT0obi1lWzBdKS8oZVsxXS1lWzBdKSk6bj5lW2MtMV0/KGY9Yy0yLGg9MSxtPShuLWVbYy0xXSkvKGVbYy0xXS1lW2MtMl0pKTpoPW8tKGY9TWF0aC5tYXgoMCxNYXRoLm1pbihjLTIsTWF0aC5mbG9vcihvKSkpKSxpPHJbMF0/KHA9MCxkPTAsZz0oaS1yWzBdKS8oclsxXS1yWzBdKSk6aT5yW3UtMV0/KHA9dS0yLGQ9MSxnPShpLXJbdS0xXSkvKHJbdS0xXS1yW3UtMl0pKTpkPXMtKHA9TWF0aC5tYXgoMCxNYXRoLm1pbih1LTIsTWF0aC5mbG9vcihzKSkpKSxtJiYodC5keHlkaSh2LGYscCxoLGQpLGxbMF0rPXZbMF0qbSxsWzFdKz12WzFdKm0pLGcmJih0LmR4eWRqKHYsZixwLGgsZCksbFswXSs9dlswXSpnLGxbMV0rPXZbMV0qZyl9cmV0dXJuIGx9LHQuYzJwPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZS5jMnAodFswXSksci5jMnAodFsxXSldfSx0LnAyeD1mdW5jdGlvbih0LGUscil7cmV0dXJuW2UucDJjKHRbMF0pLHIucDJjKHRbMV0pXX0sdC5kYWRpPWZ1bmN0aW9uKHQpe3ZhciByPU1hdGgubWF4KDAsTWF0aC5taW4oZS5sZW5ndGgtMix0KSk7cmV0dXJuIGVbcisxXS1lW3JdfSx0LmRiZGo9ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLm1pbihyLmxlbmd0aC0yLHQpKTtyZXR1cm4gcltlKzFdLXJbZV19LHQuZHh5ZGE9ZnVuY3Rpb24oZSxyLG4saSl7dmFyIGE9dC5keHlkaShudWxsLGUscixuLGkpLG89dC5kYWRpKGUsbik7cmV0dXJuW2FbMF0vbyxhWzFdL29dfSx0LmR4eWRiPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPXQuZHh5ZGoobnVsbCxlLHIsbixpKSxvPXQuZGJkaihyLGkpO3JldHVyblthWzBdL28sYVsxXS9vXX0sdC5keHlkYV9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9dioobnx8LjEpLGE9dC5hYjJ4eShlK2ksciwhMCksbz10LmFiMnh5KGUtaSxyLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5keHlkYl9yb3VnaD1mdW5jdGlvbihlLHIsbil7dmFyIGk9eSoobnx8LjEpLGE9dC5hYjJ4eShlLHIraSwhMCksbz10LmFiMnh5KGUsci1pLCEwKTtyZXR1cm5bLjUqKGFbMF0tb1swXSkvaSwuNSooYVsxXS1vWzFdKS9pXX0sdC5kcGR4PWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9tfSx0LmRwZHk9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX219fX0seyIuLi8uLi9saWIvc2VhcmNoIjo3OTYsIi4vY29tcHV0ZV9jb250cm9sX3BvaW50cyI6OTY3LCIuL2NvbnN0YW50cyI6OTY4LCIuL2NyZWF0ZV9pX2Rlcml2YXRpdmVfZXZhbHVhdG9yIjo5NjksIi4vY3JlYXRlX2pfZGVyaXZhdGl2ZV9ldmFsdWF0b3IiOjk3MCwiLi9jcmVhdGVfc3BsaW5lX2V2YWx1YXRvciI6OTcxfV0sOTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHM9W10sbD1bXSxjPXRbMF0ubGVuZ3RoLHU9dC5sZW5ndGg7ZnVuY3Rpb24gZihlLHIpe3ZhciBuLGk9MCxhPTA7cmV0dXJuIGU+MCYmdm9pZCAwIT09KG49dFtyXVtlLTFdKSYmKGErKyxpKz1uKSxlPGMtMSYmdm9pZCAwIT09KG49dFtyXVtlKzFdKSYmKGErKyxpKz1uKSxyPjAmJnZvaWQgMCE9PShuPXRbci0xXVtlXSkmJihhKyssaSs9bikscjx1LTEmJnZvaWQgMCE9PShuPXRbcisxXVtlXSkmJihhKyssaSs9biksaS9NYXRoLm1heCgxLGEpfXZhciBoLHAsZCxtLGcsdix5LHgsYixfLHcsVD0wO2ZvcihpPTA7aTxjO2krKylmb3IoYT0wO2E8dTthKyspdm9pZCAwPT09dFthXVtpXSYmKHMucHVzaChpKSxsLnB1c2goYSksdFthXVtpXT1mKGksYSkpLFQ9TWF0aC5tYXgoVCxNYXRoLmFicyh0W2FdW2ldKSk7aWYoIXMubGVuZ3RoKXJldHVybiB0O3ZhciBrPTAsQT0wLE09cy5sZW5ndGg7ZG97Zm9yKGs9MCxvPTA7bzxNO28rKyl7aT1zW29dLGE9bFtvXTt2YXIgUyxFLEwsQyxQLEksTz0wLHo9MDswPT09aT8oTD1lW1A9TWF0aC5taW4oYy0xLDIpXSxDPWVbMV0sUz10W2FdW1BdLHorPShFPXRbYV1bMV0pKyhFLVMpKihlWzBdLUMpLyhDLUwpLE8rKyk6aT09PWMtMSYmKEw9ZVtQPU1hdGgubWF4KDAsYy0zKV0sQz1lW2MtMl0sUz10W2FdW1BdLHorPShFPXRbYV1bYy0yXSkrKEUtUykqKGVbYy0xXS1DKS8oQy1MKSxPKyspLCgwPT09aXx8aT09PWMtMSkmJmE+MCYmYTx1LTEmJihoPXJbYSsxXS1yW2FdLHorPSgocD1yW2FdLXJbYS0xXSkqdFthKzFdW2ldK2gqdFthLTFdW2ldKS8ocCtoKSxPKyspLDA9PT1hPyhMPXJbST1NYXRoLm1pbih1LTEsMildLEM9clsxXSxTPXRbSV1baV0seis9KEU9dFsxXVtpXSkrKEUtUykqKHJbMF0tQykvKEMtTCksTysrKTphPT09dS0xJiYoTD1yW0k9TWF0aC5tYXgoMCx1LTMpXSxDPXJbdS0yXSxTPXRbSV1baV0seis9KEU9dFt1LTJdW2ldKSsoRS1TKSooclt1LTFdLUMpLyhDLUwpLE8rKyksKDA9PT1hfHxhPT09dS0xKSYmaT4wJiZpPGMtMSYmKGg9ZVtpKzFdLWVbaV0seis9KChwPWVbaV0tZVtpLTFdKSp0W2FdW2krMV0raCp0W2FdW2ktMV0pLyhwK2gpLE8rKyksTz96Lz1POihkPWVbaSsxXS1lW2ldLG09ZVtpXS1lW2ktMV0seD0oZz1yW2ErMV0tclthXSkqKHY9clthXS1yW2EtMV0pKihnK3YpLHo9KCh5PWQqbSooZCttKSkqKHYqdFthKzFdW2ldK2cqdFthLTFdW2ldKSt4KihtKnRbYV1baSsxXStkKnRbYV1baS0xXSkpLyh4KihtK2QpK3kqKHYrZykpKSxrKz0oXz0oYj16LXRbYV1baV0pL1QpKl8sdz1PPzA6Ljg1LHRbYV1baV0rPWIqKDErdyl9az1NYXRoLnNxcnQoayl9d2hpbGUoQSsrPDEwMCYmaz4xZS01KTtyZXR1cm4gbi5sb2coIlNtb290aGVyIGNvbnZlcmdlZCB0byIsaywiYWZ0ZXIiLEEsIml0ZXJhdGlvbnMiKSx0fX0seyIuLi8uLi9saWIiOjc3Nn1dLDk4MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5MUQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yKCJ4IiksYT1pJiZpLmxlbmd0aCxvPXIoInkiKSxzPW8mJm8ubGVuZ3RoO2lmKCFhJiYhcylyZXR1cm4hMTtpZihlLl9jaGVhdGVyPSFpLGEmJiFuKGkpfHxzJiYhbihvKSllLl9sZW5ndGg9bnVsbDtlbHNle3ZhciBsPWE/aS5sZW5ndGg6MS8wO3MmJihsPU1hdGgubWluKGwsby5sZW5ndGgpKSxlLmEmJmUuYS5sZW5ndGgmJihsPU1hdGgubWluKGwsZS5hLmxlbmd0aCkpLGUuYiYmZS5iLmxlbmd0aCYmKGw9TWF0aC5taW4obCxlLmIubGVuZ3RoKSksZS5fbGVuZ3RoPWx9cmV0dXJuITB9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sOTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi9zY2F0dGVyZ2VvL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiKS5kZWZhdWx0TGluZSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9aS5tYXJrZXIubGluZTtlLmV4cG9ydHM9bCh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxvY2F0aW9ubW9kZTppLmxvY2F0aW9ubW9kZSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGdlb2pzb246bCh7fSxpLmdlb2pzb24se30pLGZlYXR1cmVpZGtleTppLmZlYXR1cmVpZGtleSx0ZXh0Omwoe30saS50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxpLmhvdmVydGV4dCx7fSksbWFya2VyOntsaW5lOntjb2xvcjpsKHt9LGMuY29sb3Ise2RmbHQ6c30pLHdpZHRoOmwoe30sYy53aWR0aCx7ZGZsdDoxfSksZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLGFycmF5T2s6ITAsbWluOjAsbWF4OjEsZGZsdDoxLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJjYWxjIn0sc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTppLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSx1bnNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6aS51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxob3ZlcmluZm86bCh7fSxvLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMiLGZsYWdzOlsibG9jYXRpb24iLCJ6IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpLHNob3dsZWdlbmQ6bCh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sYSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyI6MTIzM31dLDk4MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGwodCl7cmV0dXJuIHQmJiJzdHJpbmciPT10eXBlb2YgdH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixjPWUuX2xlbmd0aCx1PW5ldyBBcnJheShjKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gbCh0KXx8bih0KX06bDtmb3IodmFyIGY9MDtmPGM7ZisrKXt2YXIgaD11W2ZdPXt9LHA9ZS5sb2NhdGlvbnNbZl0sZD1lLnpbZl07cihwKSYmbihkKT8oaC5sb2M9cCxoLno9ZCk6KGgubG9jPW51bGwsaC56PWkpLGguaW5kZXg9Zn1yZXR1cm4gbyh1LGUpLGEodCxlLHt2YWxzOmUueixjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KSxzKHUsZSksdX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDk4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJsb2NhdGlvbnMiKSxjPXMoInoiKTtpZihsJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCl7ZS5fbGVuZ3RoPU1hdGgubWluKGwubGVuZ3RoLGMubGVuZ3RoKTt2YXIgdSxmPXMoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBmJiYiIiE9PWZ8fG4uaXNQbGFpbk9iamVjdChmKSkmJih1PSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09cygibG9jYXRpb25tb2RlIix1KSYmcygiZmVhdHVyZWlka2V5IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjk4Mn1dLDk4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0LmxvY2F0aW9uPWUubG9jYXRpb24sdC56PWUuejt2YXIgYT1uW2ldO3JldHVybiBhLmZJbiYmYS5mSW4ucHJvcGVydGllcyYmKHQucHJvcGVydGllcz1hLmZJbi5wcm9wZXJ0aWVzKSx0LmN0PWEuY3QsdH19LHt9XSw5ODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliIikuZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbyxzLGwsYyx1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC5zdWJwbG90LHA9W2Uscl0sZD1bZSszNjAscl07Zm9yKHM9MDtzPHUubGVuZ3RoO3MrKylpZihjPSExLChvPXVbc10pLl9wb2x5Z29ucyl7Zm9yKGw9MDtsPG8uX3BvbHlnb25zLmxlbmd0aDtsKyspby5fcG9seWdvbnNbbF0uY29udGFpbnMocCkmJihjPSFjKSxvLl9wb2x5Z29uc1tsXS5jb250YWlucyhkKSYmKGM9IWMpO2lmKGMpYnJlYWt9aWYoYyYmbylyZXR1cm4gdC54MD10LngxPXQueGEuYzJwKG8uY3QpLHQueTA9dC55MT10LnlhLmMycChvLmN0KSx0LmluZGV4PW8uaW5kZXgsdC5sb2NhdGlvbj1vLmxvYyx0Lno9by56LHQuekxhYmVsPW4udGlja1RleHQoaC5tb2NrQXhpcyxoLm1vY2tBeGlzLmMybChvLnopLCJob3ZlciIpLnRleHQsdC5ob3ZlcnRlbXBsYXRlPW8uaG92ZXJ0ZW1wbGF0ZSxmdW5jdGlvbih0LGUscil7aWYoZS5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgbj1yLmhpfHxlLmhvdmVyaW5mbyxvPVN0cmluZyhyLmxvYykscz0iYWxsIj09PW4/aS5ob3ZlcmluZm8uZmxhZ3M6bi5zcGxpdCgiKyIpLGw9LTEhPT1zLmluZGV4T2YoIm5hbWUiKSxjPS0xIT09cy5pbmRleE9mKCJsb2NhdGlvbiIpLHU9LTEhPT1zLmluZGV4T2YoInoiKSxmPS0xIT09cy5pbmRleE9mKCJ0ZXh0IiksaD1bXTshbCYmYz90Lm5hbWVPdmVycmlkZT1vOihsJiYodC5uYW1lT3ZlcnJpZGU9ZS5uYW1lKSxjJiZoLnB1c2gobykpO3UmJmgucHVzaCh0LnpMYWJlbCk7ZiYmYShyLGUsaCk7dC5leHRyYVRleHQ9aC5qb2luKCI8YnI+Iil9KHQsZixvKSxbdF19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuL2F0dHJpYnV0ZXMiOjk4Mn1dLDk4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLGNhbGNHZW9KU09OOnQoIi4vcGxvdCIpLmNhbGNHZW9KU09OLHBsb3Q6dCgiLi9wbG90IikucGxvdCxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJjaG9yb3BsZXRoIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nZW8iKSxjYXRlZ29yaWVzOlsiZ2VvIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODYwLCIuLi9oZWF0bWFwL2NvbG9yYmFyIjoxMDYxLCIuL2F0dHJpYnV0ZXMiOjk4MiwiLi9jYWxjIjo5ODMsIi4vZGVmYXVsdHMiOjk4NCwiLi9ldmVudF9kYXRhIjo5ODUsIi4vaG92ZXIiOjk4NiwiLi9wbG90Ijo5ODgsIi4vc2VsZWN0Ijo5ODksIi4vc3R5bGUiOjk5MH1dLDk4ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiKSxvPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMscz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIikuZmluZEV4dHJlbWVzLGw9dCgiLi9zdHlsZSIpLnN0eWxlO2UuZXhwb3J0cz17Y2FsY0dlb0pTT046ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dFswXS50cmFjZSxuPWVbci5nZW9dLGk9bi5fc3VicGxvdCxsPXIubG9jYXRpb25tb2RlLGM9ci5fbGVuZ3RoLHU9Imdlb2pzb24taWQiPT09bD9hLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6byhyLGkudG9wb2pzb24pLGY9W10saD1bXSxwPTA7cDxjO3ArKyl7dmFyIGQ9dFtwXSxtPSJnZW9qc29uLWlkIj09PWw/ZC5mT3V0OmEubG9jYXRpb25Ub0ZlYXR1cmUobCxkLmxvYyx1KTtpZihtKXtkLmdlb2pzb249bSxkLmN0PW0ucHJvcGVydGllcy5jdCxkLl9wb2x5Z29ucz1hLmZlYXR1cmUycG9seWdvbnMobSk7dmFyIGc9YS5jb21wdXRlQmJveChtKTtmLnB1c2goZ1swXSxnWzJdKSxoLnB1c2goZ1sxXSxnWzNdKX1lbHNlIGQuZ2VvanNvbj1udWxsfWlmKCJnZW9qc29uIj09PW4uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1sKXt2YXIgdj1hLmNvbXB1dGVCYm94KGEuZ2V0VHJhY2VHZW9qc29uKHIpKTtmPVt2WzBdLHZbMl1dLGg9W3ZbMV0sdlszXV19dmFyIHk9e3BhZGRlZDohMH07ci5fZXh0cmVtZXMubG9uPXMobi5sb25heGlzLl9heCxmLHkpLHIuX2V4dHJlbWVzLmxhdD1zKG4ubGF0YXhpcy5fYXgsaCx5KX0scGxvdDpmdW5jdGlvbih0LGUscil7dmFyIGE9ZS5sYXllcnMuYmFja3Bsb3Quc2VsZWN0KCIuY2hvcm9wbGV0aGxheWVyIik7aS5tYWtlVHJhY2VHcm91cHMoYSxyLCJ0cmFjZSBjaG9yb3BsZXRoIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoLmNob3JvcGxldGhsb2NhdGlvbiIpLmRhdGEoaS5pZGVudGl0eSk7ci5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoImNob3JvcGxldGhsb2NhdGlvbiIsITApLHIuZXhpdCgpLnJlbW92ZSgpLGwodCxlKX0pKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NjksIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyI6ODA1LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXV0b3JhbmdlIjo4MjYsIi4vc3R5bGUiOjk5MCwiQHBsb3RseS9kMyI6NTh9XSw5ODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspKGk9KG49c1tyXSkuY3QpJiYoYT1sLmMycChpKSxvPWMuYzJwKGkpLGUuY29udGFpbnMoW2Esb10sbnVsbCxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOnIsbG9uOmlbMF0sbGF0OmlbMV19KSxuLnNlbGVjdGVkPTEpOm4uc2VsZWN0ZWQ9MCk7cmV0dXJuIHV9fSx7fV0sOTkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIik7ZnVuY3Rpb24gcyh0LGUpe3ZhciByPWVbMF0udHJhY2Uscz1lWzBdLm5vZGUzLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLGw9ci5tYXJrZXJ8fHt9LGM9bC5saW5lfHx7fSx1PW8ubWFrZUNvbG9yU2NhbGVGdW5jRnJvbVRyYWNlKHIpO3MuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuYXR0cigiZmlsbCIsdSh0LnopKS5jYWxsKGkuc3Ryb2tlLHQubWxjfHxjLmNvbG9yKS5jYWxsKGEuZGFzaExpbmUsIiIsdC5tbHd8fGMud2lkdGh8fDApLnN0eWxlKCJvcGFjaXR5IixsLm9wYWNpdHkpfSkpLGEuc2VsZWN0ZWRQb2ludFN0eWxlKHMscix0KX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSl7ZSYmcyh0LGUpfSxzdHlsZU9uU2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS5ub2RlMyxuPWVbMF0udHJhY2U7bi5zZWxlY3RlZHBvaW50cz9hLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgiLmNob3JvcGxldGhsb2NhdGlvbiIpLG4sdCk6cyh0LGUpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIkBwbG90bHkvZDMiOjU4fV0sOTkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2Nob3JvcGxldGgvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7bG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTpzKHt9LG4uZmVhdHVyZWlka2V5LHt9KSxiZWxvdzp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCxtYXJrZXI6e2xpbmU6e2NvbG9yOnMoe30sbi5tYXJrZXIubGluZS5jb2xvcix7ZWRpdFR5cGU6InBsb3QifSksd2lkdGg6cyh7fSxuLm1hcmtlci5saW5lLndpZHRoLHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cyh7fSxuLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6cyh7fSxuLnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sdW5zZWxlY3RlZDp7bWFya2VyOntvcGFjaXR5OnMoe30sbi51bnNlbGVjdGVkLm1hcmtlci5vcGFjaXR5LHtlZGl0VHlwZToicGxvdCJ9KSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0saG92ZXJpbmZvOm4uaG92ZXJpbmZvLGhvdmVydGVtcGxhdGU6YSh7fSx7a2V5czpbInByb3BlcnRpZXMiXX0pLHNob3dsZWdlbmQ6cyh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0saSgiIix7Y0xldHRlcjoieiIsZWRpdFR5cGVPdmVycmlkZToiY2FsYyJ9KSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vY2hvcm9wbGV0aC9hdHRyaWJ1dGVzIjo5ODJ9XSw5OTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rLGw9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpO2Z1bmN0aW9uIGModCl7dmFyIGUscj10WzBdLnRyYWNlLG49ci5fb3B0cztpZihyLnNlbGVjdGVkcG9pbnRzKXtmb3IodmFyIGE9by5tYWtlU2VsZWN0ZWRQb2ludFN0eWxlRm5zKHIpLHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIGw9dFtzXTtsLmZPdXQmJihsLmZPdXQucHJvcGVydGllcy5tbzI9YS5zZWxlY3RlZE9wYWNpdHlGbihsKSl9ZT17dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbzIifX1lbHNlIGU9aS5pc0FycmF5T3JUeXBlZEFycmF5KHIubWFya2VyLm9wYWNpdHkpP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ci5tYXJrZXIub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG4uZmlsbC5wYWludCx7ImZpbGwtb3BhY2l0eSI6ZX0pLGkuZXh0ZW5kRmxhdChuLmxpbmUucGFpbnQseyJsaW5lLW9wYWNpdHkiOmV9KSxufWUuZXhwb3J0cz17Y29udmVydDpmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsbz17bGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319LHU9e2xheW91dDp7dmlzaWJpbGl0eToibm9uZSJ9LHBhaW50Ont9fSxmPWUuX29wdHM9e2ZpbGw6byxsaW5lOnUsZ2VvanNvbjpzKCl9O2lmKCFyKXJldHVybiBmO3ZhciBoPWwuZXh0cmFjdFRyYWNlRmVhdHVyZSh0KTtpZighaClyZXR1cm4gZjt2YXIgcCxkLG0sZz1hLm1ha2VDb2xvclNjYWxlRnVuY0Zyb21UcmFjZShlKSx2PWUubWFya2VyLHk9di5saW5lfHx7fTtpLmlzQXJyYXlPclR5cGVkQXJyYXkodi5vcGFjaXR5KSYmKHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tbztyZXR1cm4gbihlKT8raS5jb25zdHJhaW4oZSwwLDEpOjB9KSxpLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcikmJihkPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1sY30pLGkuaXNBcnJheU9yVHlwZWRBcnJheSh5LndpZHRoKSYmKG09ZnVuY3Rpb24odCl7cmV0dXJuIHQubWx3fSk7Zm9yKHZhciB4PTA7eDx0Lmxlbmd0aDt4Kyspe3ZhciBiPXRbeF0sXz1iLmZPdXQ7aWYoXyl7dmFyIHc9Xy5wcm9wZXJ0aWVzO3cuZmM9ZyhiLnopLHAmJih3Lm1vPXAoYikpLGQmJih3Lm1sYz1kKGIpKSxtJiYody5tbHc9bShiKSksYi5jdD13LmN0LGIuX3BvbHlnb25zPWwuZmVhdHVyZTJwb2x5Z29ucyhfKX19dmFyIFQ9cD97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbyJ9OnYub3BhY2l0eTtyZXR1cm4gaS5leHRlbmRGbGF0KG8ucGFpbnQseyJmaWxsLWNvbG9yIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJmYyJ9LCJmaWxsLW9wYWNpdHkiOlR9KSxpLmV4dGVuZEZsYXQodS5wYWludCx7ImxpbmUtY29sb3IiOmQ/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWxjIn06eS5jb2xvciwibGluZS13aWR0aCI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtbHcifTp5LndpZHRoLCJsaW5lLW9wYWNpdHkiOlR9KSxvLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIix1LmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixmLmdlb2pzb249e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczpofSxjKHQpLGZ9LGNvbnZlcnRPblNlbGVjdDpjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvX2xvY2F0aW9uX3V0aWxzIjo3NjksIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIjo3NzAsImZhc3QtaXNudW1lcmljIjoyNDJ9XSw5OTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygibG9jYXRpb25zIiksYz1zKCJ6IiksdT1zKCJnZW9qc29uIik7bi5pc0FycmF5T3JUeXBlZEFycmF5KGwpJiZsLmxlbmd0aCYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGMpJiZjLmxlbmd0aCYmKCJzdHJpbmciPT10eXBlb2YgdSYmIiIhPT11fHxuLmlzUGxhaW5PYmplY3QodSkpPyhzKCJmZWF0dXJlaWRrZXkiKSxlLl9sZW5ndGg9TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJtYXJrZXIubGluZS53aWR0aCIpJiZzKCJtYXJrZXIubGluZS5jb2xvciIpLHMoIm1hcmtlci5vcGFjaXR5IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxzKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4vYXR0cmlidXRlcyI6OTkxfV0sOTk0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vY2hvcm9wbGV0aC9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuLi9jaG9yb3BsZXRoL2hvdmVyIiksZXZlbnREYXRhOnQoIi4uL2Nob3JvcGxldGgvZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuLi9jaG9yb3BsZXRoL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZU9uU2VsZWN0KGUpfSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49ci5sZW5ndGgtMjtuPj0wO24tLSl7dmFyIGk9cltuXS5pZDtpZigic3RyaW5nIj09dHlwZW9mIGkmJjA9PT1pLmluZGV4T2YoIndhdGVyIikpZm9yKHZhciBhPW4rMTthPHIubGVuZ3RoO2ErKylpZigic3RyaW5nIj09dHlwZW9mKGk9clthXS5pZCkmJi0xPT09aS5pbmRleE9mKCJwbG90bHktIikpcmV0dXJuIGl9fSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY2hvcm9wbGV0aG1hcGJveCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvbWFwYm94IiksY2F0ZWdvcmllczpbIm1hcGJveCIsImdsIiwibm9PcGFjaXR5Iiwic2hvd0xlZ2VuZCJdLG1ldGE6e2hyX25hbWU6ImNob3JvcGxldGhfbWFwYm94In19fSx7Ii4uLy4uL3Bsb3RzL21hcGJveCI6ODg0LCIuLi9jaG9yb3BsZXRoL2NhbGMiOjk4MywiLi4vY2hvcm9wbGV0aC9ldmVudF9kYXRhIjo5ODUsIi4uL2Nob3JvcGxldGgvaG92ZXIiOjk4NiwiLi4vY2hvcm9wbGV0aC9zZWxlY3QiOjk4OSwiLi4vaGVhdG1hcC9jb2xvcmJhciI6MTA2MSwiLi9hdHRyaWJ1dGVzIjo5OTEsIi4vZGVmYXVsdHMiOjk5MywiLi9wbG90Ijo5OTV9XSw5OTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb252ZXJ0IikuY29udmVydCxpPXQoIi4vY29udmVydCIpLmNvbnZlcnRPblNlbGVjdCxhPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIG8odCxlKXt0aGlzLnR5cGU9ImNob3JvcGxldGhtYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJmaWxsIixhK2UrIi1maWxsIl0sWyJsaW5lIixhK2UrIi1saW5lIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgcz1vLnByb3RvdHlwZTtzLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl91cGRhdGUobih0KSl9LHMudXBkYXRlT25TZWxlY3Q9ZnVuY3Rpb24odCl7dGhpcy5fdXBkYXRlKGkodCkpfSxzLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJwbG90LHI9dGhpcy5sYXllckxpc3Qsbj1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YSh0Lmdlb2pzb24pLG4hPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKHQsbiksdGhpcy5iZWxvdz1uKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIGE9cltpXSxvPWFbMF0scz1hWzFdLGw9dFtvXTtlLnNldE9wdGlvbnMocywic2V0TGF5b3V0UHJvcGVydHkiLGwubGF5b3V0KSwidmlzaWJsZSI9PT1sLmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMocywic2V0UGFpbnRQcm9wZXJ0eSIsbC5wYWludCl9fSxzLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LHMuX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxhPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKGEse3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksZVswXS50cmFjZS5fZ2xUcmFjZT1pLGl9fSx7Ii4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiOjg4MiwiLi9jb252ZXJ0Ijo5OTJ9XSw5OTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzaXplbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic2NhbGVkIiwiYWJzb2x1dGUiXSxlZGl0VHlwZToiY2FsYyIsZGZsdDoic2NhbGVkIn0sc2l6ZXJlZjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsbWluOjB9LGFuY2hvcjp7dmFsVHlwZToiZW51bWVyYXRlZCIsZWRpdFR5cGU6ImNhbGMiLHZhbHVlczpbInRpcCIsInRhaWwiLCJjbSIsImNlbnRlciJdLGRmbHQ6ImNtIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZW1wbGF0ZTphKHtlZGl0VHlwZToiY2FsYyJ9LHtrZXlzOlsibm9ybSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwidGV4dCIsIm5hbWUiXSxkZmx0OiJ4K3kreitub3JtK3RleHQrbmFtZSJ9KSxjLnRyYW5zZm9ybXM9dm9pZCAwLGUuZXhwb3J0cz1jfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMTMyfV0sOTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUudSxpPWUudixhPWUudyxvPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLHIubGVuZ3RoLGkubGVuZ3RoLGEubGVuZ3RoKSxzPS0xLzAsbD0xLzAsYz0wO2M8bztjKyspe3ZhciB1PXJbY10sZj1pW2NdLGg9YVtjXSxwPU1hdGguc3FydCh1KnUrZipmK2gqaCk7cz1NYXRoLm1heChzLHApLGw9TWF0aC5taW4obCxwKX1lLl9sZW49byxlLl9ub3JtTWF4PXMsbih0LGUse3ZhbHM6W2wsc10sY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDd9XSw5OTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtY29uZTNkIiksaT10KCJnbC1jb25lM2QiKS5jcmVhdGVDb25lTWVzaCxhPXQoIi4uLy4uL2xpYiIpLnNpbXBsZU1hcCxvPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxsPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpO2Z1bmN0aW9uIGModCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLm1lc2g9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgdT1jLnByb3RvdHlwZTt1LmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLnhbZV0sbj10aGlzLmRhdGEueVtlXSxpPXRoaXMuZGF0YS56W2VdLGE9dGhpcy5kYXRhLnVbZV0sbz10aGlzLmRhdGEudltlXSxzPXRoaXMuZGF0YS53W2VdO3QudHJhY2VDb29yZGluYXRlPVtyLG4saSxhLG8scyxNYXRoLnNxcnQoYSphK28qbytzKnMpXTt2YXIgbD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSYmdm9pZCAwIT09bFtlXT90LnRleHRMYWJlbD1sW2VdOmwmJih0LnRleHRMYWJlbD1sKSwhMH19O3ZhciBmPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn0saD17dGlwOjEsdGFpbDowLGNtOi4yNSxjZW50ZXI6LjV9LHA9e3RpcDoxLHRhaWw6MSxjbTouNzUsY2VudGVyOi41fTtmdW5jdGlvbiBkKHQsZSl7dmFyIHI9dC5mdWxsU2NlbmVMYXlvdXQsaT10LmRhdGFTY2FsZSxjPXt9O2Z1bmN0aW9uIHUodCxlKXt2YXIgbj1yW2VdLG89aVtmW2VdXTtyZXR1cm4gYSh0LChmdW5jdGlvbih0KXtyZXR1cm4gbi5kMmwodCkqb30pKX1jLnZlY3RvcnM9bCh1KGUudSwieGF4aXMiKSx1KGUudiwieWF4aXMiKSx1KGUudywiemF4aXMiKSxlLl9sZW4pLGMucG9zaXRpb25zPWwodShlLngsInhheGlzIiksdShlLnksInlheGlzIiksdShlLnosInpheGlzIiksZS5fbGVuKTt2YXIgZD1zKGUpO2MuY29sb3JtYXA9byhlKSxjLnZlcnRleEludGVuc2l0eUJvdW5kcz1bZC5taW4vZS5fbm9ybU1heCxkLm1heC9lLl9ub3JtTWF4XSxjLmNvbmVPZmZzZXQ9aFtlLmFuY2hvcl0sInNjYWxlZCI9PT1lLnNpemVtb2RlP2MuY29uZVNpemU9ZS5zaXplcmVmfHwuNTpjLmNvbmVTaXplPWUuc2l6ZXJlZiYmZS5fbm9ybU1heD9lLnNpemVyZWYvZS5fbm9ybU1heDouNTt2YXIgbT1uKGMpLGc9ZS5saWdodHBvc2l0aW9uO3JldHVybiBtLmxpZ2h0UG9zaXRpb249W2cueCxnLnksZy56XSxtLmFtYmllbnQ9ZS5saWdodGluZy5hbWJpZW50LG0uZGlmZnVzZT1lLmxpZ2h0aW5nLmRpZmZ1c2UsbS5zcGVjdWxhcj1lLmxpZ2h0aW5nLnNwZWN1bGFyLG0ucm91Z2huZXNzPWUubGlnaHRpbmcucm91Z2huZXNzLG0uZnJlc25lbD1lLmxpZ2h0aW5nLmZyZXNuZWwsbS5vcGFjaXR5PWUub3BhY2l0eSxlLl9wYWQ9cFtlLmFuY2hvcl0qbS52ZWN0b3JTY2FsZSptLmNvbmVTY2FsZSplLl9ub3JtTWF4LG19dS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5kYXRhPXQ7dmFyIGU9ZCh0aGlzLnNjZW5lLHQpO3RoaXMubWVzaC51cGRhdGUoZSl9LHUuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLm1lc2gpLHRoaXMubWVzaC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuZ2xwbG90LmdsLG49ZCh0LGUpLGE9aShyLG4pLG89bmV3IGModCxlLnVpZCk7cmV0dXJuIG8ubWVzaD1hLG8uZGF0YT1lLGEuX3RyYWNlPW8sdC5nbHBsb3QuYWRkKGEpLG99fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzcyLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjg4MCwiZ2wtY29uZTNkIjoyNTh9XSw5OTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInNpemVyZWYiKSxzKCJzaXplbW9kZSIpLHMoImFuY2hvciIpLHMoImxpZ2h0aW5nLmFtYmllbnQiKSxzKCJsaWdodGluZy5kaWZmdXNlIikscygibGlnaHRpbmcuc3BlY3VsYXIiKSxzKCJsaWdodGluZy5yb3VnaG5lc3MiKSxzKCJsaWdodGluZy5mcmVzbmVsIikscygibGlnaHRwb3NpdGlvbi54IikscygibGlnaHRwb3NpdGlvbi55IikscygibGlnaHRwb3NpdGlvbi56IiksaSh0LGUsbyxzLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKCJ0ZXh0IikscygiaG92ZXJ0ZXh0IikscygiaG92ZXJ0ZW1wbGF0ZSIpLHMoInVob3ZlcmZvcm1hdCIpLHMoInZob3ZlcmZvcm1hdCIpLHMoIndob3ZlcmZvcm1hdCIpLHMoInhob3ZlcmZvcm1hdCIpLHMoInlob3ZlcmZvcm1hdCIpLHMoInpob3ZlcmZvcm1hdCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjo5OTZ9XSwxZTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29uZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxldmVudERhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5ub3JtPWUudHJhY2VDb29yZGluYXRlWzZdLHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjo5OTYsIi4vY2FsYyI6OTk3LCIuL2NvbnZlcnQiOjk5OCwiLi9kZWZhdWx0cyI6OTk5fV0sMTAwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKSxvPWEuYXhpc0hvdmVyRm9ybWF0LHM9YS5kZXNjcmlwdGlvbk9ubHlOdW1iZXJzLGw9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIikuZGFzaCx1PXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLHA9aC5DT01QQVJJU09OX09QUzIsZD1oLklOVEVSVkFMX09QUyxtPWkubGluZTtlLmV4cG9ydHM9Zih7ejpuLnoseDpuLngseDA6bi54MCxkeDpuLmR4LHk6bi55LHkwOm4ueTAsZHk6bi5keSx4cGVyaW9kOm4ueHBlcmlvZCx5cGVyaW9kOm4ueXBlcmlvZCx4cGVyaW9kMDppLnhwZXJpb2QwLHlwZXJpb2QwOmkueXBlcmlvZDAseHBlcmlvZGFsaWdubWVudDpuLnhwZXJpb2RhbGlnbm1lbnQseXBlcmlvZGFsaWdubWVudDpuLnlwZXJpb2RhbGlnbm1lbnQsdGV4dDpuLnRleHQsaG92ZXJ0ZXh0Om4uaG92ZXJ0ZXh0LHRyYW5zcG9zZTpuLnRyYW5zcG9zZSx4dHlwZTpuLnh0eXBlLHl0eXBlOm4ueXR5cGUseGhvdmVyZm9ybWF0Om8oIngiKSx5aG92ZXJmb3JtYXQ6bygieSIpLHpob3ZlcmZvcm1hdDpvKCJ6IiwxKSxob3ZlcnRlbXBsYXRlOm4uaG92ZXJ0ZW1wbGF0ZSxob3Zlcm9uZ2FwczpuLmhvdmVyb25nYXBzLGNvbm5lY3RnYXBzOmYoe30sbi5jb25uZWN0Z2Fwcyx7fSksZmlsbGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6ImNhbGMifSxhdXRvY29udG91cjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnsiY29udG91cnMuc3RhcnQiOnZvaWQgMCwiY29udG91cnMuZW5kIjp2b2lkIDAsImNvbnRvdXJzLnNpemUiOnZvaWQgMH19LG5jb250b3Vyczp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoxNSxtaW46MSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXJzOnt0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZXZlbHMiLCJjb25zdHJhaW50Il0sZGZsdDoibGV2ZWxzIixlZGl0VHlwZToiY2FsYyJ9LHN0YXJ0Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGVuZDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QiLGltcGxpZWRFZGl0czp7Il5hdXRvY29udG91ciI6ITF9fSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6bnVsbCxtaW46MCxlZGl0VHlwZToicGxvdCIsaW1wbGllZEVkaXRzOnsiXmF1dG9jb250b3VyIjohMX19LGNvbG9yaW5nOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmaWxsIiwiaGVhdG1hcCIsImxpbmVzIiwibm9uZSJdLGRmbHQ6ImZpbGwiLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xpbmVzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sc2hvd2xhYmVsczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDp1KHtlZGl0VHlwZToicGxvdCIsY29sb3JFZGl0VHlwZToic3R5bGUifSksbGFiZWxmb3JtYXQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246cygiY29udG91ciBsYWJlbCIpfSxvcGVyYXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbXS5jb25jYXQocCkuY29uY2F0KGQpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMiLGltcGxpZWRFZGl0czp7YXV0b2NvbnRvdXI6ITF9fSxsaW5lOntjb2xvcjpmKHt9LG0uY29sb3Ise2VkaXRUeXBlOiJzdHlsZStjb2xvcmJhcnMifSksd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlK2NvbG9yYmFycyJ9LGRhc2g6YyxzbW9vdGhpbmc6Zih7fSxtLnNtb290aGluZyx7fSksZWRpdFR5cGU6InBsb3QifX0sbCgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTgsIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDEwMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksaT10KCIuLi9oZWF0bWFwL2NhbGMiKSxhPXQoIi4vc2V0X2NvbnRvdXJzIiksbz10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSh0LGUpLHM9clswXS56O2EoZSxzKTt2YXIgbCxjPWUuY29udG91cnMsdT1uLmV4dHJhY3RPcHRzKGUpO2lmKCJoZWF0bWFwIj09PWMuY29sb3JpbmcmJnUuYXV0byYmITE9PT1lLmF1dG9jb250b3VyKXt2YXIgZj1jLnN0YXJ0LGg9byhjKSxwPWMuc2l6ZXx8MSxkPU1hdGguZmxvb3IoKGgtZikvcCkrMTtpc0Zpbml0ZShwKXx8KHA9MSxkPTEpO3ZhciBtPWYtcC8yO2w9W20sbStkKnBdfWVsc2UgbD1zO3JldHVybiBuLmNhbGModCxlLHt2YWxzOmwsY0xldHRlcjoieiJ9KSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vaGVhdG1hcC9jYWxjIjoxMDU5LCIuL2VuZF9wbHVzIjoxMDEyLCIuL3NldF9jb250b3VycyI6MTAyMH1dLDEwMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10WzBdLGk9bi56O3N3aXRjaChlLnR5cGUpe2Nhc2UibGV2ZWxzIjp2YXIgYT1NYXRoLm1pbihpWzBdWzBdLGlbMF1bMV0pO2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBvPXRbcl07by5wcmVmaXhCb3VuZGFyeT0hby5lZGdlcGF0aHMubGVuZ3RoJiYoYT5vLmxldmVsfHxvLnN0YXJ0cy5sZW5ndGgmJmE9PT1vLmxldmVsKX1icmVhaztjYXNlImNvbnN0cmFpbnQiOmlmKG4ucHJlZml4Qm91bmRhcnk9ITEsbi5lZGdlcGF0aHMubGVuZ3RoKXJldHVybjt2YXIgcz1uLngubGVuZ3RoLGw9bi55Lmxlbmd0aCxjPS0xLzAsdT0xLzA7Zm9yKHI9MDtyPGw7cisrKXU9TWF0aC5taW4odSxpW3JdWzBdKSx1PU1hdGgubWluKHUsaVtyXVtzLTFdKSxjPU1hdGgubWF4KGMsaVtyXVswXSksYz1NYXRoLm1heChjLGlbcl1bcy0xXSk7Zm9yKHI9MTtyPHMtMTtyKyspdT1NYXRoLm1pbih1LGlbMF1bcl0pLHU9TWF0aC5taW4odSxpW2wtMV1bcl0pLGM9TWF0aC5tYXgoYyxpWzBdW3JdKSxjPU1hdGgubWF4KGMsaVtsLTFdW3JdKTt2YXIgZixoLHA9ZS52YWx1ZTtzd2l0Y2goZS5fb3BlcmF0aW9uKXtjYXNlIj4iOnA+YyYmKG4ucHJlZml4Qm91bmRhcnk9ITApO2JyZWFrO2Nhc2UiPCI6KHA8dXx8bi5zdGFydHMubGVuZ3RoJiZwPT09dSkmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIltdIjpmPU1hdGgubWluKHBbMF0scFsxXSksKChoPU1hdGgubWF4KHBbMF0scFsxXSkpPHV8fGY+Y3x8bi5zdGFydHMubGVuZ3RoJiZoPT09dSkmJihuLnByZWZpeEJvdW5kYXJ5PSEwKTticmVhaztjYXNlIl1bIjpmPU1hdGgubWluKHBbMF0scFsxXSksaD1NYXRoLm1heChwWzBdLHBbMV0pLGY8dSYmaD5jJiYobi5wcmVmaXhCb3VuZGFyeT0hMCl9fX19LHt9XSwxMDA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGk9dCgiLi9tYWtlX2NvbG9yX21hcCIpLGE9dCgiLi9lbmRfcGx1cyIpO2UuZXhwb3J0cz17bWluOiJ6bWluIixtYXg6InptYXgiLGNhbGM6ZnVuY3Rpb24odCxlLHIpe3ZhciBvPWUuY29udG91cnMscz1lLmxpbmUsbD1vLnNpemV8fDEsYz1vLmNvbG9yaW5nLHU9aShlLHtpc0NvbG9yYmFyOiEwfSk7aWYoImhlYXRtYXAiPT09Yyl7dmFyIGY9bi5leHRyYWN0T3B0cyhlKTtyLl9maWxsZ3JhZGllbnQ9Zi5yZXZlcnNlc2NhbGU/bi5mbGlwU2NhbGUoZi5jb2xvcnNjYWxlKTpmLmNvbG9yc2NhbGUsci5fenJhbmdlPVtmLm1pbixmLm1heF19ZWxzZSJmaWxsIj09PWMmJihyLl9maWxsY29sb3I9dSk7ci5fbGluZT17Y29sb3I6ImxpbmVzIj09PWM/dTpzLmNvbG9yLHdpZHRoOiExIT09by5zaG93bGluZXM/cy53aWR0aDowLGRhc2g6cy5kYXNofSxyLl9sZXZlbHM9e3N0YXJ0Om8uc3RhcnQsZW5kOmEobyksc2l6ZTpsfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuL2VuZF9wbHVzIjoxMDEyLCIuL21ha2VfY29sb3JfbWFwIjoxMDE3fV0sMTAwNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e0JPVFRPTVNUQVJUOlsxLDksMTMsMTA0LDcxM10sVE9QU1RBUlQ6WzQsNiw3LDEwNCw3MTNdLExFRlRTVEFSVDpbOCwxMiwxNCwyMDgsMTExNF0sUklHSFRTVEFSVDpbMiwzLDExLDIwOCwxMTE0XSxORVdERUxUQTpbbnVsbCxbLTEsMF0sWzAsLTFdLFstMSwwXSxbMSwwXSxudWxsLFswLC0xXSxbLTEsMF0sWzAsMV0sWzAsMV0sbnVsbCxbMCwxXSxbMSwwXSxbMSwwXSxbMCwtMV1dLENIT09TRVNBRERMRTp7MTA0Ols0LDFdLDIwODpbMiw4XSw3MTM6WzcsMTNdLDExMTQ6WzExLDE0XX0sU0FERExFUkVNQUlOREVSOnsxOjQsMjo4LDQ6MSw3OjEzLDg6MiwxMToxNCwxMzo3LDE0OjExfSxMQUJFTERJU1RBTkNFOjIsTEFCRUxJTkNSRUFTRToxMCxMQUJFTE1JTjozLExBQkVMTUFYOjEwLExBQkVMT1BUSU1JWkVSOntFREdFQ09TVDoxLEFOR0xFQ09TVDoxLE5FSUdIQk9SQ09TVDo1LFNBTUVMRVZFTEZBQ1RPUjoxMCxTQU1FTEVWRUxESVNUQU5DRTo1LE1BWENPU1Q6MTAwLElOSVRJQUxTRUFSQ0hQT0lOVFM6MTAsSVRFUkFUSU9OUzo1fX19LHt9XSwxMDA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuL2xhYmVsX2RlZmF1bHRzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz1hLmFkZE9wYWNpdHkscz1hLm9wYWNpdHksbD10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGM9bC5DT05TVFJBSU5UX1JFRFVDVElPTix1PWwuQ09NUEFSSVNPTl9PUFMyO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLGwsZil7dmFyIGgscCxkLG09ZS5jb250b3VycyxnPXIoImNvbnRvdXJzLm9wZXJhdGlvbiIpOyhtLl9vcGVyYXRpb249Y1tnXSxmdW5jdGlvbih0LGUpe3ZhciByOy0xPT09dS5pbmRleE9mKGUub3BlcmF0aW9uKT8odCgiY29udG91cnMudmFsdWUiLFswLDFdKSxBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWUubGVuZ3RoPjI/ZS52YWx1ZT1lLnZhbHVlLnNsaWNlKDIpOjA9PT1lLmxlbmd0aD9lLnZhbHVlPVswLDFdOmUubGVuZ3RoPDI/KHI9cGFyc2VGbG9hdChlLnZhbHVlWzBdKSxlLnZhbHVlPVtyLHIrMV0pOmUudmFsdWU9W3BhcnNlRmxvYXQoZS52YWx1ZVswXSkscGFyc2VGbG9hdChlLnZhbHVlWzFdKV06bihlLnZhbHVlKSYmKHI9cGFyc2VGbG9hdChlLnZhbHVlKSxlLnZhbHVlPVtyLHIrMV0pKToodCgiY29udG91cnMudmFsdWUiLDApLG4oZS52YWx1ZSl8fChBcnJheS5pc0FycmF5KGUudmFsdWUpP2UudmFsdWU9cGFyc2VGbG9hdChlLnZhbHVlWzBdKTplLnZhbHVlPTApKX0ocixtKSwiPSI9PT1nP2g9bS5zaG93bGluZXM9ITA6KGg9cigiY29udG91cnMuc2hvd2xpbmVzIiksZD1yKCJmaWxsY29sb3IiLG8oKHQubGluZXx8e30pLmNvbG9yfHxsLC41KSkpLGgpJiYocD1yKCJsaW5lLmNvbG9yIixkJiZzKGQpP28oZS5maWxsY29sb3IsMSk6bCkscigibGluZS53aWR0aCIsMikscigibGluZS5kYXNoIikpO3IoImxpbmUuc21vb3RoaW5nIiksaShyLGEscCxmKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuL2xhYmVsX2RlZmF1bHRzIjoxMDE2LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTAwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb25zdGFudHMvZmlsdGVyX29wcyIpLGk9dCgiZmFzdC1pc251bWVyaWMiKTtmdW5jdGlvbiBhKHQsZSl7dmFyIHIsYT1BcnJheS5pc0FycmF5KGUpO2Z1bmN0aW9uIG8odCl7cmV0dXJuIGkodCk/K3Q6bnVsbH1yZXR1cm4tMSE9PW4uQ09NUEFSSVNPTl9PUFMyLmluZGV4T2YodCk/cj1vKGE/ZVswXTplKTotMSE9PW4uSU5URVJWQUxfT1BTLmluZGV4T2YodCk/cj1hP1tvKGVbMF0pLG8oZVsxXSldOltvKGUpLG8oZSldOi0xIT09bi5TRVRfT1BTLmluZGV4T2YodCkmJihyPWE/ZS5tYXAobyk6W28oZSldKSxyfWZ1bmN0aW9uIG8odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2U9YSh0LGUpO3ZhciByPU1hdGgubWluKGVbMF0sZVsxXSksbj1NYXRoLm1heChlWzBdLGVbMV0pO3JldHVybntzdGFydDpyLGVuZDpuLHNpemU6bi1yfX19ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3N0YXJ0OmU9YSh0LGUpLGVuZDoxLzAsc2l6ZToxLzB9fX1lLmV4cG9ydHM9eyJbXSI6bygiW10iKSwiXVsiOm8oIl1bIiksIj4iOnMoIj4iKSwiPCI6cygiPCIpLCI9IjpzKCI9Iil9fSx7Ii4uLy4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIjo3NDgsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uKCJjb250b3Vycy5zdGFydCIpLGE9bigiY29udG91cnMuZW5kIiksbz0hMT09PWl8fCExPT09YSxzPXIoImNvbnRvdXJzLnNpemUiKTshKG8/ZS5hdXRvY29udG91cj0hMDpyKCJhdXRvY29udG91ciIsITEpKSYmc3x8cigibmNvbnRvdXJzIil9fSx7fV0sMTAwOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBpKHQpe3JldHVybiBuLmV4dGVuZEZsYXQoe30sdCx7ZWRnZXBhdGhzOm4uZXh0ZW5kRGVlcChbXSx0LmVkZ2VwYXRocykscGF0aHM6bi5leHRlbmREZWVwKFtdLHQucGF0aHMpLHN0YXJ0czpuLmV4dGVuZERlZXAoW10sdC5zdGFydHMpfSl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxvLHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQucmV2ZXJzZSgpfSxsPWZ1bmN0aW9uKHQpe3JldHVybiB0fTtzd2l0Y2goZSl7Y2FzZSI9IjpjYXNlIjwiOnJldHVybiB0O2Nhc2UiPiI6Zm9yKDEhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IG9wZXJhdGlvbi4iKSxhPXRbMF0scj0wO3I8YS5lZGdlcGF0aHMubGVuZ3RoO3IrKylhLmVkZ2VwYXRoc1tyXT1zKGEuZWRnZXBhdGhzW3JdKTtmb3Iocj0wO3I8YS5wYXRocy5sZW5ndGg7cisrKWEucGF0aHNbcl09cyhhLnBhdGhzW3JdKTtmb3Iocj0wO3I8YS5zdGFydHMubGVuZ3RoO3IrKylhLnN0YXJ0c1tyXT1zKGEuc3RhcnRzW3JdKTtyZXR1cm4gdDtjYXNlIl1bIjp2YXIgYz1zO3M9bCxsPWM7Y2FzZSJbXSI6Zm9yKDIhPT10Lmxlbmd0aCYmbi53YXJuKCJDb250b3VyIGRhdGEgaW52YWxpZCBmb3IgdGhlIHNwZWNpZmllZCBpbmVxdWFsaXR5IHJhbmdlIG9wZXJhdGlvbi4iKSxhPWkodFswXSksbz1pKHRbMV0pLHI9MDtyPGEuZWRnZXBhdGhzLmxlbmd0aDtyKyspYS5lZGdlcGF0aHNbcl09cyhhLmVkZ2VwYXRoc1tyXSk7Zm9yKHI9MDtyPGEucGF0aHMubGVuZ3RoO3IrKylhLnBhdGhzW3JdPXMoYS5wYXRoc1tyXSk7Zm9yKHI9MDtyPGEuc3RhcnRzLmxlbmd0aDtyKyspYS5zdGFydHNbcl09cyhhLnN0YXJ0c1tyXSk7Zm9yKDtvLmVkZ2VwYXRocy5sZW5ndGg7KWEuZWRnZXBhdGhzLnB1c2gobChvLmVkZ2VwYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnBhdGhzLmxlbmd0aDspYS5wYXRocy5wdXNoKGwoby5wYXRocy5zaGlmdCgpKSk7Zm9yKDtvLnN0YXJ0cy5sZW5ndGg7KWEuc3RhcnRzLnB1c2gobChvLnN0YXJ0cy5zaGlmdCgpKSk7cmV0dXJuW2FdfX19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMDEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiKSxhPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbz10KCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiKSxzPXQoIi4vY29udG91cnNfZGVmYXVsdHMiKSxsPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxjPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscix1KXtmdW5jdGlvbiBmKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxjLHIsaSl9aWYoaSh0LGUsZix1KSl7YSh0LGUsdSxmKSxmKCJ4aG92ZXJmb3JtYXQiKSxmKCJ5aG92ZXJmb3JtYXQiKSxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoImhvdmVyb25nYXBzIik7dmFyIGg9ImNvbnN0cmFpbnQiPT09ZigiY29udG91cnMudHlwZSIpO2YoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopKSxoP28odCxlLGYsdSxyKToocyh0LGUsZiwoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUsYyxyKX0pKSxsKHQsZSxmLHUpKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDcyLCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIxMSwiLi9hdHRyaWJ1dGVzIjoxMDAxLCIuL2NvbnN0cmFpbnRfZGVmYXVsdHMiOjEwMDYsIi4vY29udG91cnNfZGVmYXVsdHMiOjEwMDgsIi4vc3R5bGVfZGVmYXVsdHMiOjEwMjJ9XSwxMDExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdHJhaW50X21hcHBpbmciKSxhPXQoIi4vZW5kX3BsdXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbz0iY29uc3RyYWludCI9PT10LnR5cGU/aVt0Ll9vcGVyYXRpb25dKHQudmFsdWUpOnQscz1vLnNpemUsbD1bXSxjPWEobyksdT1yLnRyYWNlLl9jYXJwZXRUcmFjZSxmPXU/e3hheGlzOnUuYWF4aXMseWF4aXM6dS5iYXhpcyx4OnIuYSx5OnIuYn06e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyx4OnIueCx5OnIueX0saD1vLnN0YXJ0O2g8YztoKz1zKWlmKGwucHVzaChuLmV4dGVuZEZsYXQoe2xldmVsOmgsY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10sejpyLnosc21vb3RoaW5nOnIudHJhY2UubGluZS5zbW9vdGhpbmd9LGYpKSxsLmxlbmd0aD4xZTMpe24ud2FybigiVG9vIG1hbnkgY29udG91cnMsIGNsaXBwaW5nIGF0IDEwMDAiLHQpO2JyZWFrfXJldHVybiBsfX0seyIuLi8uLi9saWIiOjc3NiwiLi9jb25zdHJhaW50X21hcHBpbmciOjEwMDcsIi4vZW5kX3BsdXMiOjEwMTJ9XSwxMDEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdC5lbmQrdC5zaXplLzFlNn19LHt9XSwxMDEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9jb25zdGFudHMiKTtmdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF0pPHImJk1hdGguYWJzKHRbMV0tZVsxXSk8bn1mdW5jdGlvbiBvKHQsZSxyLG8sbCl7dmFyIGMsdT1lLmpvaW4oIiwiKSxmPXQuY3Jvc3NpbmdzW3VdLGg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsYT0wO3Q+MjAmJmU/MjA4PT09dHx8MTExND09PXQ/bj0wPT09clswXT8xOi0xOmE9MD09PXJbMV0/MTotMTotMSE9PWkuQk9UVE9NU1RBUlQuaW5kZXhPZih0KT9hPTE6LTEhPT1pLkxFRlRTVEFSVC5pbmRleE9mKHQpP249MTotMSE9PWkuVE9QU1RBUlQuaW5kZXhPZih0KT9hPS0xOm49LTE7cmV0dXJuW24sYV19KGYscixlKSxwPVtzKHQsZSxbLWhbMF0sLWhbMV1dKV0sZD10LnoubGVuZ3RoLG09dC56WzBdLmxlbmd0aCxnPWUuc2xpY2UoKSx2PWguc2xpY2UoKTtmb3IoYz0wO2M8MWU0O2MrKyl7aWYoZj4yMD8oZj1pLkNIT09TRVNBRERMRVtmXVsoaFswXXx8aFsxXSk8MD8wOjFdLHQuY3Jvc3NpbmdzW3VdPWkuU0FERExFUkVNQUlOREVSW2ZdKTpkZWxldGUgdC5jcm9zc2luZ3NbdV0sIShoPWkuTkVXREVMVEFbZl0pKXtuLmxvZygiRm91bmQgYmFkIG1hcmNoaW5nIGluZGV4OiIsZixlLHQubGV2ZWwpO2JyZWFrfXAucHVzaChzKHQsZSxoKSksZVswXSs9aFswXSxlWzFdKz1oWzFdLHU9ZS5qb2luKCIsIiksYShwW3AubGVuZ3RoLTFdLHBbcC5sZW5ndGgtMl0sbyxsKSYmcC5wb3AoKTt2YXIgeT1oWzBdJiYoZVswXTwwfHxlWzBdPm0tMil8fGhbMV0mJihlWzFdPDB8fGVbMV0+ZC0yKTtpZihlWzBdPT09Z1swXSYmZVsxXT09PWdbMV0mJmhbMF09PT12WzBdJiZoWzFdPT09dlsxXXx8ciYmeSlicmVhaztmPXQuY3Jvc3NpbmdzW3VdfTFlND09PWMmJm4ubG9nKCJJbmZpbml0ZSBsb29wIGluIGNvbnRvdXI/Iik7dmFyIHgsYixfLHcsVCxrLEEsTSxTLEUsTCxDLFAsSSxPLHo9YShwWzBdLHBbcC5sZW5ndGgtMV0sbyxsKSxEPTAsUj0uMip0LnNtb290aGluZyxGPVtdLEI9MDtmb3IoYz0xO2M8cC5sZW5ndGg7YysrKUM9cFtjXSxQPXBbYy0xXSxJPXZvaWQgMCxPPXZvaWQgMCxJPUNbMl0tUFsyXSxPPUNbM10tUFszXSxEKz1BPU1hdGguc3FydChJKkkrTypPKSxGLnB1c2goQSk7dmFyIE49RC9GLmxlbmd0aCpSO2Z1bmN0aW9uIGoodCl7cmV0dXJuIHBbdCVwLmxlbmd0aF19Zm9yKGM9cC5sZW5ndGgtMjtjPj1CO2MtLSlpZigoeD1GW2NdKTxOKXtmb3IoXz0wLGI9Yy0xO2I+PUImJngrRltiXTxOO2ItLSl4Kz1GW2JdO2lmKHomJmM9PT1wLmxlbmd0aC0yKWZvcihfPTA7XzxiJiZ4K0ZbX108TjtfKyspeCs9RltfXTtUPWMtYitfKzEsaz1NYXRoLmZsb29yKChjK2IrXysyKS8yKSx3PXp8fGMhPT1wLmxlbmd0aC0yP3p8fC0xIT09Yj9UJTI/aihrKTpbKGooaylbMF0raihrKzEpWzBdKS8yLChqKGspWzFdK2ooaysxKVsxXSkvMl06cFswXTpwW3AubGVuZ3RoLTFdLHAuc3BsaWNlKGIrMSxjLWIrMSx3KSxjPWIrMSxfJiYoQj1fKSx6JiYoYz09PXAubGVuZ3RoLTI/cFtfXT1wW3AubGVuZ3RoLTFdOjA9PT1jJiYocFtwLmxlbmd0aC0xXT1wWzBdKSl9Zm9yKHAuc3BsaWNlKDAsQiksYz0wO2M8cC5sZW5ndGg7YysrKXBbY10ubGVuZ3RoPTI7aWYoIShwLmxlbmd0aDwyKSlpZih6KXAucG9wKCksdC5wYXRocy5wdXNoKHApO2Vsc2V7cnx8bi5sb2coIlVuY2xvc2VkIGludGVyaW9yIGNvbnRvdXI/Iix0LmxldmVsLGcuam9pbigiLCIpLHAuam9pbigiTCIpKTt2YXIgVT0hMTtmb3IoTT0wO008dC5lZGdlcGF0aHMubGVuZ3RoO00rKylpZihFPXQuZWRnZXBhdGhzW01dLCFVJiZhKEVbMF0scFtwLmxlbmd0aC0xXSxvLGwpKXtwLnBvcCgpLFU9ITA7dmFyIFY9ITE7Zm9yKFM9MDtTPHQuZWRnZXBhdGhzLmxlbmd0aDtTKyspaWYoYSgoTD10LmVkZ2VwYXRoc1tTXSlbTC5sZW5ndGgtMV0scFswXSxvLGwpKXtWPSEwLHAuc2hpZnQoKSx0LmVkZ2VwYXRocy5zcGxpY2UoTSwxKSxTPT09TT90LnBhdGhzLnB1c2gocC5jb25jYXQoTCkpOihTPk0mJlMtLSx0LmVkZ2VwYXRoc1tTXT1MLmNvbmNhdChwLEUpKTticmVha31WfHwodC5lZGdlcGF0aHNbTV09cC5jb25jYXQoRSkpfWZvcihNPTA7TTx0LmVkZ2VwYXRocy5sZW5ndGgmJiFVO00rKylhKChFPXQuZWRnZXBhdGhzW01dKVtFLmxlbmd0aC0xXSxwWzBdLG8sbCkmJihwLnNoaWZ0KCksdC5lZGdlcGF0aHNbTV09RS5jb25jYXQocCksVT0hMCk7VXx8dC5lZGdlcGF0aHMucHVzaChwKX19ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZVswXStNYXRoLm1heChyWzBdLDApLGk9ZVsxXStNYXRoLm1heChyWzFdLDApLGE9dC56W2ldW25dLG89dC54YXhpcyxzPXQueWF4aXM7aWYoclsxXSl7dmFyIGw9KHQubGV2ZWwtYSkvKHQueltpXVtuKzFdLWEpO3JldHVybltvLmMycCgoMS1sKSp0Lnhbbl0rbCp0LnhbbisxXSwhMCkscy5jMnAodC55W2ldLCEwKSxuK2wsaV19dmFyIGM9KHQubGV2ZWwtYSkvKHQueltpKzFdW25dLWEpO3JldHVybltvLmMycCh0Lnhbbl0sITApLHMuYzJwKCgxLWMpKnQueVtpXStjKnQueVtpKzFdLCEwKSxuLGkrY119ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxhLHMsbDtmb3IoZT1lfHwuMDEscj1yfHwuMDEsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3Iocz10W2FdLGw9MDtsPHMuc3RhcnRzLmxlbmd0aDtsKyspbyhzLHMuc3RhcnRzW2xdLCJlZGdlIixlLHIpO2ZvcihpPTA7T2JqZWN0LmtleXMocy5jcm9zc2luZ3MpLmxlbmd0aCYmaTwxZTQ7KWkrKyxvKHMsT2JqZWN0LmtleXMocy5jcm9zc2luZ3MpWzBdLnNwbGl0KCIsIikubWFwKE51bWJlciksdm9pZCAwLGUscik7MWU0PT09aSYmbi5sb2coIkluZmluaXRlIGxvb3AgaW4gY29udG91cj8iKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2NvbnN0YW50cyI6MTAwNX1dLDEwMTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vaGVhdG1hcC9ob3ZlciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe298fChvPXt9KSxvLmlzQ29udG91cj0hMDt2YXIgcz1pKHQsZSxyLGEsbyk7cmV0dXJuIHMmJnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC50cmFjZTsiY29uc3RyYWludCI9PT1lLmNvbnRvdXJzLnR5cGUmJihlLmZpbGxjb2xvciYmbi5vcGFjaXR5KGUuZmlsbGNvbG9yKT90LmNvbG9yPW4uYWRkT3BhY2l0eShlLmZpbGxjb2xvciwxKTplLmNvbnRvdXJzLnNob3dsaW5lcyYmbi5vcGFjaXR5KGUubGluZS5jb2xvcikmJih0LmNvbG9yPW4uYWRkT3BhY2l0eShlLmxpbmUuY29sb3IsMSkpKX0pKSxzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL2hlYXRtYXAvaG92ZXIiOjEwNjV9XSwxMDE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLGNvbG9yYmFyOnQoIi4vY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4vYXR0cmlidXRlcyI6MTAwMSwiLi9jYWxjIjoxMDAyLCIuL2NvbG9yYmFyIjoxMDA0LCIuL2RlZmF1bHRzIjoxMDEwLCIuL2hvdmVyIjoxMDE0LCIuL3Bsb3QiOjEwMTksIi4vc3R5bGUiOjEwMjF9XSwxMDE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXtpZihpfHwoaT17fSksdCgiY29udG91cnMuc2hvd2xhYmVscyIpKXt2YXIgYT1lLmZvbnQ7bi5jb2VyY2VGb250KHQsImNvbnRvdXJzLmxhYmVsZm9udCIse2ZhbWlseTphLmZhbWlseSxzaXplOmEuc2l6ZSxjb2xvcjpyfSksdCgiY29udG91cnMubGFiZWxmb3JtYXQiKX0hMSE9PWkuaGFzSG92ZXImJnQoInpob3ZlcmZvcm1hdCIpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDEwMTc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuL2VuZF9wbHVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY29udG91cnMscj1lLnN0YXJ0LG89YShlKSxzPWUuc2l6ZXx8MSxsPU1hdGguZmxvb3IoKG8tcikvcykrMSxjPSJsaW5lcyI9PT1lLmNvbG9yaW5nPzA6MSx1PWkuZXh0cmFjdE9wdHModCk7aXNGaW5pdGUocyl8fChzPTEsbD0xKTt2YXIgZixoLHA9dS5yZXZlcnNlc2NhbGU/aS5mbGlwU2NhbGUodS5jb2xvcnNjYWxlKTp1LmNvbG9yc2NhbGUsZD1wLmxlbmd0aCxtPW5ldyBBcnJheShkKSxnPW5ldyBBcnJheShkKTtpZigiaGVhdG1hcCI9PT1lLmNvbG9yaW5nKXt2YXIgdj11Lm1pbix5PXUubWF4O2ZvcihoPTA7aDxkO2grKylmPXBbaF0sbVtoXT1mWzBdKih5LXYpK3YsZ1toXT1mWzFdO3ZhciB4PW4uZXh0ZW50KFt2LHksZS5zdGFydCxlLnN0YXJ0K3MqKGwtMSldKSxiPXhbdjx5PzA6MV0sXz14W3Y8eT8xOjBdO2IhPT12JiYobS5zcGxpY2UoMCwwLGIpLGcuc3BsaWNlKDAsMCxnWzBdKSksXyE9PXkmJihtLnB1c2goXyksZy5wdXNoKGdbZy5sZW5ndGgtMV0pKX1lbHNlIGZvcihoPTA7aDxkO2grKylmPXBbaF0sbVtoXT0oZlswXSoobCtjLTEpLWMvMikqcytyLGdbaF09ZlsxXTtyZXR1cm4gaS5tYWtlQ29sb3JTY2FsZUZ1bmMoe2RvbWFpbjptLHJhbmdlOmd9LHtub051bWVyaWNDaGVjazohMH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi9lbmRfcGx1cyI6MTAxMiwiQHBsb3RseS9kMyI6NTh9XSwxMDE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ZnVuY3Rpb24gaSh0LGUpe3ZhciByPShlWzBdWzBdPnQ/MDoxKSsoZVswXVsxXT50PzA6MikrKGVbMV1bMV0+dD8wOjQpKyhlWzFdWzBdPnQ/MDo4KTtyZXR1cm4gNT09PXJ8fDEwPT09cj90PihlWzBdWzBdK2VbMF1bMV0rZVsxXVswXStlWzFdWzFdKS80PzU9PT1yPzcxMzoxMTE0OjU9PT1yPzEwNDoyMDg6MTU9PT1yPzA6cn1lLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8scyxsLGMsdSxmLGg9dFswXS56LHA9aC5sZW5ndGgsZD1oWzBdLmxlbmd0aCxtPTI9PT1wfHwyPT09ZDtmb3Iocj0wO3I8cC0xO3IrKylmb3Iobz1bXSwwPT09ciYmKG89by5jb25jYXQobi5CT1RUT01TVEFSVCkpLHI9PT1wLTImJihvPW8uY29uY2F0KG4uVE9QU1RBUlQpKSxlPTA7ZTxkLTE7ZSsrKWZvcihhPW8uc2xpY2UoKSwwPT09ZSYmKGE9YS5jb25jYXQobi5MRUZUU1RBUlQpKSxlPT09ZC0yJiYoYT1hLmNvbmNhdChuLlJJR0hUU1RBUlQpKSxzPWUrIiwiK3IsbD1bW2hbcl1bZV0saFtyXVtlKzFdXSxbaFtyKzFdW2VdLGhbcisxXVtlKzFdXV0sZj0wO2Y8dC5sZW5ndGg7ZisrKShjPWkoKHU9dFtmXSkubGV2ZWwsbCkpJiYodS5jcm9zc2luZ3Nbc109YywtMSE9PWEuaW5kZXhPZihjKSYmKHUuc3RhcnRzLnB1c2goW2Uscl0pLG0mJi0xIT09YS5pbmRleE9mKGMsYS5pbmRleE9mKGMpKzEpJiZ1LnN0YXJ0cy5wdXNoKFtlLHJdKSkpfX0seyIuL2NvbnN0YW50cyI6MTAwNX1dLDEwMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIiksbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3NldF9jb252ZXJ0IiksdT10KCIuLi9oZWF0bWFwL3Bsb3QiKSxmPXQoIi4vbWFrZV9jcm9zc2luZ3MiKSxoPXQoIi4vZmluZF9hbGxfcGF0aHMiKSxwPXQoIi4vZW1wdHlfcGF0aGluZm8iKSxkPXQoIi4vY29udmVydF90b19jb25zdHJhaW50cyIpLG09dCgiLi9jbG9zZV9ib3VuZGFyaWVzIiksZz10KCIuL2NvbnN0YW50cyIpLHY9Zy5MQUJFTE9QVElNSVpFUjtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsbixvLHMsbCxjLHUsZj0iIixoPTAscD10LmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksZD0hMDtmdW5jdGlvbiBtKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLWVbMl1bMV0pPC4wMX1mdW5jdGlvbiBnKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMF1bMF0pPC4wMX1mdW5jdGlvbiB2KHQpe3JldHVybiBNYXRoLmFicyh0WzBdLWVbMl1bMF0pPC4wMX1mb3IoO3AubGVuZ3RoOyl7Zm9yKGM9YS5zbW9vdGhvcGVuKHQuZWRnZXBhdGhzW2hdLHQuc21vb3RoaW5nKSxmKz1kP2M6Yy5yZXBsYWNlKC9eTS8sIkwiKSxwLnNwbGljZShwLmluZGV4T2YoaCksMSkscj10LmVkZ2VwYXRoc1toXVt0LmVkZ2VwYXRoc1toXS5sZW5ndGgtMV0scz0tMSxvPTA7bzw0O28rKyl7aWYoIXIpe2kubG9nKCJNaXNzaW5nIGVuZD8iLGgsdCk7YnJlYWt9Zm9yKHU9cixNYXRoLmFicyh1WzFdLWVbMF1bMV0pPC4wMSYmIXYocik/bj1lWzFdOmcocik/bj1lWzBdOm0ocik/bj1lWzNdOnYocikmJihuPWVbMl0pLGw9MDtsPHQuZWRnZXBhdGhzLmxlbmd0aDtsKyspe3ZhciB5PXQuZWRnZXBhdGhzW2xdWzBdO01hdGguYWJzKHJbMF0tblswXSk8LjAxP01hdGguYWJzKHJbMF0teVswXSk8LjAxJiYoeVsxXS1yWzFdKSooblsxXS15WzFdKT49MCYmKG49eSxzPWwpOk1hdGguYWJzKHJbMV0tblsxXSk8LjAxP01hdGguYWJzKHJbMV0teVsxXSk8LjAxJiYoeVswXS1yWzBdKSooblswXS15WzBdKT49MCYmKG49eSxzPWwpOmkubG9nKCJlbmRwdCB0byBuZXdlbmRwdCBpcyBub3QgdmVydC4gb3IgaG9yei4iLHIsbix5KX1pZihyPW4scz49MClicmVhaztmKz0iTCIrbn1pZihzPT09dC5lZGdlcGF0aHMubGVuZ3RoKXtpLmxvZygidW5jbG9zZWQgcGVyaW1ldGVyIHBhdGgiKTticmVha31oPXMsKGQ9LTE9PT1wLmluZGV4T2YoaCkpJiYoaD1wWzBdLGYrPSJaIil9Zm9yKGg9MDtoPHQucGF0aHMubGVuZ3RoO2grKylmKz1hLnNtb290aGNsb3NlZCh0LnBhdGhzW2hdLHQuc21vb3RoaW5nKTtyZXR1cm4gZn1mdW5jdGlvbiB4KHQsZSxyLG4pe3ZhciBhPWUud2lkdGgvMixvPWUuaGVpZ2h0LzIscz10LngsbD10LnksYz10LnRoZXRhLHU9TWF0aC5jb3MoYykqYSxmPU1hdGguc2luKGMpKmEsaD0ocz5uLmNlbnRlcj9uLnJpZ2h0LXM6cy1uLmxlZnQpLyh1K01hdGguYWJzKE1hdGguc2luKGMpKm8pKSxwPShsPm4ubWlkZGxlP24uYm90dG9tLWw6bC1uLnRvcCkvKE1hdGguYWJzKGYpK01hdGguY29zKGMpKm8pO2lmKGg8MXx8cDwxKXJldHVybiAxLzA7dmFyIGQ9di5FREdFQ09TVCooMS8oaC0xKSsxLyhwLTEpKTtkKz12LkFOR0xFQ09TVCpjKmM7Zm9yKHZhciBtPXMtdSxnPWwtZix5PXMrdSx4PWwrZixiPTA7YjxyLmxlbmd0aDtiKyspe3ZhciBfPXJbYl0sdz1NYXRoLmNvcyhfLnRoZXRhKSpfLndpZHRoLzIsVD1NYXRoLnNpbihfLnRoZXRhKSpfLndpZHRoLzIsaz0yKmkuc2VnbWVudERpc3RhbmNlKG0sZyx5LHgsXy54LXcsXy55LVQsXy54K3csXy55K1QpLyhlLmhlaWdodCtfLmhlaWdodCksQT1fLmxldmVsPT09ZS5sZXZlbCxNPUE/di5TQU1FTEVWRUxESVNUQU5DRToxO2lmKGs8PU0pcmV0dXJuIDEvMDtkKz12Lk5FSUdIQk9SQ09TVCooQT92LlNBTUVMRVZFTEZBQ1RPUjoxKS8oay1NKX1yZXR1cm4gZH1mdW5jdGlvbiBiKHQpe3ZhciBlLHIsbj10LnRyYWNlLl9lbXB0eXBvaW50cyxpPVtdLGE9dC56Lmxlbmd0aCxvPXQuelswXS5sZW5ndGgscz1bXTtmb3IoZT0wO2U8bztlKyspcy5wdXNoKDEpO2ZvcihlPTA7ZTxhO2UrKylpLnB1c2gocy5zbGljZSgpKTtmb3IoZT0wO2U8bi5sZW5ndGg7ZSsrKWlbKHI9bltlXSlbMF1dW3JbMV1dPTA7cmV0dXJuIHQuem1hc2s9aSxpfXIucGxvdD1mdW5jdGlvbih0LGUsbyxzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLG8sImNvbnRvdXIiKS5lYWNoKChmdW5jdGlvbihvKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx2PW9bMF0seD12LnRyYWNlLF89di54LHc9di55LFQ9eC5jb250b3VycyxrPXAoVCxlLHYpLEE9aS5lbnN1cmVTaW5nbGUocywiZyIsImhlYXRtYXBjb2xvcmluZyIpLE09W107ImhlYXRtYXAiPT09VC5jb2xvcmluZyYmKE09W29dKSx1KHQsZSxNLEEpLGYoayksaChrKTt2YXIgUz1sLmMycChfWzBdLCEwKSxFPWwuYzJwKF9bXy5sZW5ndGgtMV0sITApLEw9Yy5jMnAod1swXSwhMCksQz1jLmMycCh3W3cubGVuZ3RoLTFdLCEwKSxQPVtbUyxDXSxbRSxDXSxbRSxMXSxbUyxMXV0sST1rOyJjb25zdHJhaW50Ij09PVQudHlwZSYmKEk9ZChrLFQuX29wZXJhdGlvbikpLGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmJnIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YSgiZmlsbCI9PT1yLmNvbG9yaW5nP1swXTpbXSk7bi5lbnRlcigpLmFwcGVuZCgicGF0aCIpLG4uZXhpdCgpLnJlbW92ZSgpLG4uYXR0cigiZCIsIk0iK2Uuam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0ocyxQLFQpLGZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPSJmaWxsIj09PWEuY29sb3Jpbmd8fCJjb25zdHJhaW50Ij09PWEudHlwZSYmIj0iIT09YS5fb3BlcmF0aW9uLHM9Ik0iK3Iuam9pbigiTCIpKyJaIjtvJiZtKGUsYSk7dmFyIGw9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJmaWxsIikuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShvP2U6W10pO2wuZW50ZXIoKS5hcHBlbmQoInBhdGgiKSxsLmV4aXQoKS5yZW1vdmUoKSxsLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSh0LnByZWZpeEJvdW5kYXJ5P3M6IiIpK3kodCxyKTtlP24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLGUpLnN0eWxlKCJzdHJva2UiLCJub25lIik6bi5zZWxlY3QodGhpcykucmVtb3ZlKCl9KSl9KHMsSSxQLFQpLGZ1bmN0aW9uKHQsZSxvLHMsbCl7dmFyIGM9aS5lbnN1cmVTaW5nbGUodCwiZyIsImNvbnRvdXJsaW5lcyIpLHU9ITEhPT1sLnNob3dsaW5lcyxmPWwuc2hvd2xhYmVscyxoPXUmJmYscD1yLmNyZWF0ZUxpbmVzKGMsdXx8ZixlKSxkPXIuY3JlYXRlTGluZUNsaXAoYyxoLG8scy50cmFjZS51aWQpLG09dC5zZWxlY3RBbGwoImcuY29udG91cmxhYmVscyIpLmRhdGEoZj9bMF06W10pO2lmKG0uZXhpdCgpLnJlbW92ZSgpLG0uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGFiZWxzIiwhMCksZil7dmFyIHY9W10seT1bXTtpLmNsZWFyTG9jYXRpb25DYWNoZSgpO3ZhciB4PXIubGFiZWxGb3JtYXR0ZXIobyxzKSxiPWEudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLmNhbGwoYS5mb250LGwubGFiZWxmb250KSxfPWVbMF0ueGF4aXMsdz1lWzBdLnlheGlzLFQ9Xy5fbGVuZ3RoLGs9dy5fbGVuZ3RoLEE9Xy5yYW5nZSxNPXcucmFuZ2UsUz1pLmFnZ051bXMoTWF0aC5taW4sbnVsbCxzLngpLEU9aS5hZ2dOdW1zKE1hdGgubWF4LG51bGwscy54KSxMPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLHMueSksQz1pLmFnZ051bXMoTWF0aC5tYXgsbnVsbCxzLnkpLFA9TWF0aC5tYXgoXy5jMnAoUywhMCksMCksST1NYXRoLm1pbihfLmMycChFLCEwKSxUKSxPPU1hdGgubWF4KHcuYzJwKEMsITApLDApLHo9TWF0aC5taW4ody5jMnAoTCwhMCksayksRD17fTtBWzBdPEFbMV0/KEQubGVmdD1QLEQucmlnaHQ9SSk6KEQubGVmdD1JLEQucmlnaHQ9UCksTVswXTxNWzFdPyhELnRvcD1PLEQuYm90dG9tPXopOihELnRvcD16LEQuYm90dG9tPU8pLEQubWlkZGxlPShELnRvcCtELmJvdHRvbSkvMixELmNlbnRlcj0oRC5sZWZ0K0QucmlnaHQpLzIsdi5wdXNoKFtbRC5sZWZ0LEQudG9wXSxbRC5yaWdodCxELnRvcF0sW0QucmlnaHQsRC5ib3R0b21dLFtELmxlZnQsRC5ib3R0b21dXSk7dmFyIFI9TWF0aC5zcXJ0KFQqVCtrKmspLEY9Zy5MQUJFTERJU1RBTkNFKlIvTWF0aC5tYXgoMSxlLmxlbmd0aC9nLkxBQkVMSU5DUkVBU0UpO3AuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9ci5jYWxjVGV4dE9wdHModC5sZXZlbCx4LGIsbyk7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1pLmdldFZpc2libGVTZWdtZW50KHRoaXMsRCxlLmhlaWdodC8yKTtpZih0JiYhKHQubGVuPChlLndpZHRoK2UuaGVpZ2h0KSpnLkxBQkVMTUlOKSlmb3IodmFyIG49TWF0aC5taW4oTWF0aC5jZWlsKHQubGVuL0YpLGcuTEFCRUxNQVgpLGE9MDthPG47YSsrKXt2YXIgbz1yLmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsdCxlLHksRCk7aWYoIW8pYnJlYWs7ci5hZGRMYWJlbERhdGEobyxlLHksdil9fSkpfSkpLGIucmVtb3ZlKCksci5kcmF3TGFiZWxzKG0seSxvLGQsaD92Om51bGwpfWYmJiF1JiZwLnJlbW92ZSgpfShzLGssdCx2LFQpLGZ1bmN0aW9uKHQsZSxyLG4sbyl7dmFyIHM9bi50cmFjZSxsPXIuX2Z1bGxMYXlvdXQuX2NsaXBzLGM9ImNsaXAiK3MudWlkLHU9bC5zZWxlY3RBbGwoIiMiK2MpLmRhdGEocy5jb25uZWN0Z2Fwcz9bXTpbMF0pO2lmKHUuZW50ZXIoKS5hcHBlbmQoImNsaXBQYXRoIikuY2xhc3NlZCgiY29udG91cmNsaXAiLCEwKS5hdHRyKCJpZCIsYyksdS5leGl0KCkucmVtb3ZlKCksITE9PT1zLmNvbm5lY3RnYXBzKXt2YXIgcD17bGV2ZWw6LjksY3Jvc3NpbmdzOnt9LHN0YXJ0czpbXSxlZGdlcGF0aHM6W10scGF0aHM6W10seGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHg6bi54LHk6bi55LHo6YihuKSxzbW9vdGhpbmc6MH07ZihbcF0pLGgoW3BdKSxtKFtwXSx7dHlwZToibGV2ZWxzIn0pLGkuZW5zdXJlU2luZ2xlKHUsInBhdGgiLCIiKS5hdHRyKCJkIiwocC5wcmVmaXhCb3VuZGFyeT8iTSIrby5qb2luKCJMIikrIloiOiIiKSt5KHAsbykpfWVsc2UgYz1udWxsO2Euc2V0Q2xpcFVybCh0LGMscil9KHMsZSx0LHYsUCl9KSl9LHIuY3JlYXRlTGluZXM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXJbMF0uc21vb3RoaW5nLGk9dC5zZWxlY3RBbGwoImcuY29udG91cmxldmVsIikuZGF0YShlP3I6W10pO2lmKGkuZXhpdCgpLnJlbW92ZSgpLGkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJjb250b3VybGV2ZWwiLCEwKSxlKXt2YXIgbz1pLnNlbGVjdEFsbCgicGF0aC5vcGVubGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBlZGdlcGF0aHN8fHQuZWRnZXBhdGhzfSkpO28uZXhpdCgpLnJlbW92ZSgpLG8uZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJvcGVubGluZSIsITApLG8uYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aG9wZW4odCxuKX0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDEpLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIik7dmFyIHM9aS5zZWxlY3RBbGwoInBhdGguY2xvc2VkbGluZSIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBwYXRoc3x8dC5wYXRoc30pKTtzLmV4aXQoKS5yZW1vdmUoKSxzLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgiY2xvc2VkbGluZSIsITApLHMuYXR0cigiZCIsKGZ1bmN0aW9uKHQpe3JldHVybiBhLnNtb290aGNsb3NlZCh0LG4pfSkpLnN0eWxlKCJzdHJva2UtbWl0ZXJsaW1pdCIsMSkuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKX1yZXR1cm4gaX0sci5jcmVhdGVMaW5lQ2xpcD1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1lPyJjbGlwbGluZSIrbjpudWxsLG89ci5fZnVsbExheW91dC5fY2xpcHMuc2VsZWN0QWxsKCIjIitpKS5kYXRhKGU/WzBdOltdKTtyZXR1cm4gby5leGl0KCkucmVtb3ZlKCksby5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKCJjb250b3VybGluZWNsaXAiLCEwKS5hdHRyKCJpZCIsaSksYS5zZXRDbGlwVXJsKHQsaSxyKSxvfSxyLmxhYmVsRm9ybWF0dGVyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fZnVsbExheW91dCxuPWUudHJhY2UsaT1uLmNvbnRvdXJzLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ5Y29udG91ciIsc2hvd2V4cG9uZW50OiJhbGwiLGV4cG9uZW50Zm9ybWF0OiJCIn07aWYoaS5sYWJlbGZvcm1hdClhLnRpY2tmb3JtYXQ9aS5sYWJlbGZvcm1hdCxjKGEscik7ZWxzZXt2YXIgcz1vLmV4dHJhY3RPcHRzKG4pO2lmKHMmJnMuY29sb3JiYXImJnMuY29sb3JiYXIuX2F4aXMpYT1zLmNvbG9yYmFyLl9heGlzO2Vsc2V7aWYoImNvbnN0cmFpbnQiPT09aS50eXBlKXt2YXIgdT1pLnZhbHVlO0FycmF5LmlzQXJyYXkodSk/YS5yYW5nZT1bdVswXSx1W3UubGVuZ3RoLTFdXTphLnJhbmdlPVt1LHVdfWVsc2UgYS5yYW5nZT1baS5zdGFydCxpLmVuZF0sYS5udGlja3M9KGkuZW5kLWkuc3RhcnQpL2kuc2l6ZTthLnJhbmdlWzBdPT09YS5yYW5nZVsxXSYmKGEucmFuZ2VbMV0rPWEucmFuZ2VbMF18fDEpLGEubnRpY2tzfHwoYS5udGlja3M9MWUzKSxjKGEsciksbC5wcmVwVGlja3MoYSksYS5fdG1pbj1udWxsLGEuX3RtYXg9bnVsbH19cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBsLnRpY2tUZXh0KGEsdCkudGV4dH19LHIuY2FsY1RleHRPcHRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUodCk7ci50ZXh0KGkpLmNhbGwocy5jb252ZXJ0VG9Uc3BhbnMsbik7dmFyIG89ci5ub2RlKCksbD1hLmJCb3gobywhMCk7cmV0dXJue3RleHQ6aSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCxmb250U2l6ZTorby5zdHlsZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHgiLCIiKSxsZXZlbDp0LGR5OihsLnRvcCtsLmJvdHRvbSkvMn19LHIuZmluZEJlc3RUZXh0TG9jYXRpb249ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYyx1LGY9ci53aWR0aDtlLmlzQ2xvc2VkPyhzPWUubGVuL3YuSU5JVElBTFNFQVJDSFBPSU5UUyxvPWUubWluK3MvMixsPWUubWF4KToocz0oZS5sZW4tZikvKHYuSU5JVElBTFNFQVJDSFBPSU5UUysxKSxvPWUubWluK3MrZi8yLGw9ZS5tYXgtKHMrZikvMik7Zm9yKHZhciBoPTEvMCxwPTA7cDx2LklURVJBVElPTlM7cCsrKXtmb3IodmFyIGQ9bztkPGw7ZCs9cyl7dmFyIG09aS5nZXRUZXh0TG9jYXRpb24odCxlLnRvdGFsLGQsZiksZz14KG0scixuLGEpO2c8aCYmKGg9Zyx1PW0sYz1kKX1pZihoPjIqdi5NQVhDT1NUKWJyZWFrO3AmJihzLz0yKSxsPShvPWMtcy8yKSsxLjUqc31pZihoPD12Lk1BWENPU1QpcmV0dXJuIHV9LHIuYWRkTGFiZWxEYXRhPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWUuZm9udFNpemUsYT1lLndpZHRoK2kvMyxvPU1hdGgubWF4KDAsZS5oZWlnaHQtaS8zKSxzPXQueCxsPXQueSxjPXQudGhldGEsdT1NYXRoLnNpbihjKSxmPU1hdGguY29zKGMpLGg9ZnVuY3Rpb24odCxlKXtyZXR1cm5bcyt0KmYtZSp1LGwrdCp1K2UqZl19LHA9W2goLWEvMiwtby8yKSxoKC1hLzIsby8yKSxoKGEvMixvLzIpLGgoYS8yLC1vLzIpXTtyLnB1c2goe3RleHQ6ZS50ZXh0LHg6cyx5OmwsZHk6ZS5keSx0aGV0YTpjLGxldmVsOmUubGV2ZWwsd2lkdGg6YSxoZWlnaHQ6b30pLG4ucHVzaChwKX0sci5kcmF3TGFiZWxzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIGw9dC5zZWxlY3RBbGwoInRleHQiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRleHQrIiwiK3QueCsiLCIrdC55KyIsIit0LnRoZXRhfSkpO2lmKGwuZXhpdCgpLnJlbW92ZSgpLGwuZW50ZXIoKS5hcHBlbmQoInRleHQiKS5hdHRyKHsiZGF0YS1ub3RleCI6MSwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC54K01hdGguc2luKHQudGhldGEpKnQuZHksaT10LnktTWF0aC5jb3ModC50aGV0YSkqdC5keTtuLnNlbGVjdCh0aGlzKS50ZXh0KHQudGV4dCkuYXR0cih7eDplLHk6aSx0cmFuc2Zvcm06InJvdGF0ZSgiKzE4MCp0LnRoZXRhL01hdGguUEkrIiAiK2UrIiAiK2krIikifSkuY2FsbChzLmNvbnZlcnRUb1RzcGFucyxyKX0pKSxvKXtmb3IodmFyIGM9IiIsdT0wO3U8by5sZW5ndGg7dSsrKWMrPSJNIitvW3VdLmpvaW4oIkwiKSsiWiI7aS5lbnN1cmVTaW5nbGUoYSwicGF0aCIsIiIpLmF0dHIoImQiLGMpfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZXRfY29udmVydCI6ODQ4LCIuLi9oZWF0bWFwL3Bsb3QiOjEwNjksIi4vY2xvc2VfYm91bmRhcmllcyI6MTAwMywiLi9jb25zdGFudHMiOjEwMDUsIi4vY29udmVydF90b19jb25zdHJhaW50cyI6MTAwOSwiLi9lbXB0eV9wYXRoaW5mbyI6MTAxMSwiLi9maW5kX2FsbF9wYXRocyI6MTAxMywiLi9tYWtlX2Nyb3NzaW5ncyI6MTAxOCwiQHBsb3RseS9kMyI6NTh9XSwxMDIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKTtmdW5jdGlvbiBhKHQsZSxyKXt2YXIgaT17dHlwZToibGluZWFyIixyYW5nZTpbdCxlXX07cmV0dXJuIG4uYXV0b1RpY2tzKGksKGUtdCkvKHJ8fDE1KSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNvbnRvdXJzO2lmKHQuYXV0b2NvbnRvdXIpe3ZhciBvPXQuem1pbixzPXQuem1heDsodC56YXV0b3x8dm9pZCAwPT09bykmJihvPWkuYWdnTnVtcyhNYXRoLm1pbixudWxsLGUpKSwodC56YXV0b3x8dm9pZCAwPT09cykmJihzPWkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGUpKTt2YXIgbD1hKG8scyx0Lm5jb250b3Vycyk7ci5zaXplPWwuZHRpY2ssci5zdGFydD1uLnRpY2tGaXJzdChsKSxsLnJhbmdlLnJldmVyc2UoKSxyLmVuZD1uLnRpY2tGaXJzdChsKSxyLnN0YXJ0PT09byYmKHIuc3RhcnQrPXIuc2l6ZSksci5lbmQ9PT1zJiYoci5lbmQtPXIuc2l6ZSksci5zdGFydD5yLmVuZCYmKHIuc3RhcnQ9ci5lbmQ9KHIuc3RhcnQrci5lbmQpLzIpLHQuX2lucHV0LmNvbnRvdXJzfHwodC5faW5wdXQuY29udG91cnM9e30pLGkuZXh0ZW5kRmxhdCh0Ll9pbnB1dC5jb250b3Vycyx7c3RhcnQ6ci5zdGFydCxlbmQ6ci5lbmQsc2l6ZTpyLnNpemV9KSx0Ll9pbnB1dC5hdXRvY29udG91cj0hMH1lbHNlIGlmKCJjb25zdHJhaW50IiE9PXIudHlwZSl7dmFyIGMsdT1yLnN0YXJ0LGY9ci5lbmQsaD10Ll9pbnB1dC5jb250b3VycztpZih1PmYmJihyLnN0YXJ0PWguc3RhcnQ9ZixmPXIuZW5kPWguZW5kPXUsdT1yLnN0YXJ0KSwhKHIuc2l6ZT4wKSljPXU9PT1mPzE6YSh1LGYsdC5uY29udG91cnMpLmR0aWNrLGguc2l6ZT1yLnNpemU9Y319fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTAyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uL2hlYXRtYXAvc3R5bGUiKSxvPXQoIi4vbWFrZV9jb2xvcl9tYXAiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmNvbnRvdXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLHI9dFswXS50cmFjZSxhPXIuY29udG91cnMscz1yLmxpbmUsbD1hLnNpemV8fDEsYz1hLnN0YXJ0LHU9ImNvbnN0cmFpbnQiPT09YS50eXBlLGY9IXUmJiJsaW5lcyI9PT1hLmNvbG9yaW5nLGg9IXUmJiJmaWxsIj09PWEuY29sb3JpbmcscD1mfHxoP28ocik6bnVsbDtlLnNlbGVjdEFsbCgiZy5jb250b3VybGV2ZWwiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUscy53aWR0aCxmP3AodC5sZXZlbCk6cy5jb2xvcixzLmRhc2gpfSkpO3ZhciBkPWEubGFiZWxmb250O2lmKGUuc2VsZWN0QWxsKCJnLmNvbnRvdXJsYWJlbHMgdGV4dCIpLmVhY2goKGZ1bmN0aW9uKHQpe2kuZm9udChuLnNlbGVjdCh0aGlzKSx7ZmFtaWx5OmQuZmFtaWx5LHNpemU6ZC5zaXplLGNvbG9yOmQuY29sb3J8fChmP3AodC5sZXZlbCk6cy5jb2xvcil9KX0pKSx1KWUuc2VsZWN0QWxsKCJnLmNvbnRvdXJmaWxsIHBhdGgiKS5zdHlsZSgiZmlsbCIsci5maWxsY29sb3IpO2Vsc2UgaWYoaCl7dmFyIG07ZS5zZWxlY3RBbGwoImcuY29udG91cmZpbGwgcGF0aCIpLnN0eWxlKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PW0mJihtPXQubGV2ZWwpLHAodC5sZXZlbCsuNSpsKX0pKSx2b2lkIDA9PT1tJiYobT1jKSxlLnNlbGVjdEFsbCgiZy5jb250b3VyYmcgcGF0aCIpLnN0eWxlKCJmaWxsIixwKG0tLjUqbCkpfX0pKSxhKHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vaGVhdG1hcC9zdHlsZSI6MTA3MCwiLi9tYWtlX2NvbG9yX21hcCI6MTAxNywiQHBsb3RseS9kMyI6NTh9XSwxMDIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGk9dCgiLi9sYWJlbF9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzLGw9cigiY29udG91cnMuY29sb3JpbmciKSxjPSIiOyJmaWxsIj09PWwmJihzPXIoImNvbnRvdXJzLnNob3dsaW5lcyIpKSwhMSE9PXMmJigibGluZXMiIT09bCYmKGM9cigibGluZS5jb2xvciIsIiMwMDAiKSkscigibGluZS53aWR0aCIsLjUpLHIoImxpbmUuZGFzaCIpKSwibm9uZSIhPT1sJiYoITAhPT10LnNob3dsZWdlbmQmJihlLnNob3dsZWdlbmQ9ITEpLGUuX2RmbHRTaG93TGVnZW5kPSExLG4odCxlLGEscix7cHJlZml4OiIiLGNMZXR0ZXI6InoifSkpLHIoImxpbmUuc21vb3RoaW5nIiksaShyLGEsYyxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4vbGFiZWxfZGVmYXVsdHMiOjEwMTZ9XSwxMDIzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQscz1pLmNvbnRvdXJzO2UuZXhwb3J0cz1vKHtjYXJwZXQ6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSx6Om4ueixhOm4ueCxhMDpuLngwLGRhOm4uZHgsYjpuLnksYjA6bi55MCxkYjpuLmR5LHRleHQ6bi50ZXh0LGhvdmVydGV4dDpuLmhvdmVydGV4dCx0cmFuc3Bvc2U6bi50cmFuc3Bvc2UsYXR5cGU6bi54dHlwZSxidHlwZTpuLnl0eXBlLGZpbGxjb2xvcjppLmZpbGxjb2xvcixhdXRvY29udG91cjppLmF1dG9jb250b3VyLG5jb250b3VyczppLm5jb250b3Vycyxjb250b3Vyczp7dHlwZTpzLnR5cGUsc3RhcnQ6cy5zdGFydCxlbmQ6cy5lbmQsc2l6ZTpzLnNpemUsY29sb3Jpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZpbGwiLCJsaW5lcyIsIm5vbmUiXSxkZmx0OiJmaWxsIixlZGl0VHlwZToiY2FsYyJ9LHNob3dsaW5lczpzLnNob3dsaW5lcyxzaG93bGFiZWxzOnMuc2hvd2xhYmVscyxsYWJlbGZvbnQ6cy5sYWJlbGZvbnQsbGFiZWxmb3JtYXQ6cy5sYWJlbGZvcm1hdCxvcGVyYXRpb246cy5vcGVyYXRpb24sdmFsdWU6cy52YWx1ZSxlZGl0VHlwZToiY2FsYyIsaW1wbGllZEVkaXRzOnthdXRvY29udG91cjohMX19LGxpbmU6e2NvbG9yOmkubGluZS5jb2xvcix3aWR0aDppLmxpbmUud2lkdGgsZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHRyYW5zZm9ybXM6dm9pZCAwfSxhKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjoxMDAxLCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTh9XSwxMDI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6Iiksbz10KCIuLi9oZWF0bWFwL2NsZWFuXzJkX2FycmF5Iikscz10KCIuLi9oZWF0bWFwL2ludGVycDJkIiksbD10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGM9dCgiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IiksdT10KCIuL2RlZmF1bHRzIiksZj10KCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIiksaD10KCIuLi9jb250b3VyL3NldF9jb250b3VycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWYodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7aWYoIWUuYXx8IWUuYil7dmFyIHA9dC5kYXRhW3IuaW5kZXhdLGQ9dC5kYXRhW2UuaW5kZXhdO2QuYXx8KGQuYT1wLmEpLGQuYnx8KGQuYj1wLmIpLHUoZCxlLGUuX2RlZmF1bHRDb2xvcix0Ll9mdWxsTGF5b3V0KX12YXIgbT1mdW5jdGlvbih0LGUpe3ZhciByLHUsZixoLHAsZCxtLGc9ZS5fY2FycGV0VHJhY2Usdj1nLmFheGlzLHk9Zy5iYXhpczt2Ll9taW5EdGljaz0wLHkuX21pbkR0aWNrPTAsaS5pc0FycmF5MUQoZS56KSYmYShlLHYseSwiYSIsImIiLFsieiJdKTtyPWUuX2E9ZS5fYXx8ZS5hLGg9ZS5fYj1lLl9ifHxlLmIscj1yP3YubWFrZUNhbGNkYXRhKGUsIl9hIik6W10saD1oP3kubWFrZUNhbGNkYXRhKGUsIl9iIik6W10sdT1lLmEwfHwwLGY9ZS5kYXx8MSxwPWUuYjB8fDAsZD1lLmRifHwxLG09ZS5fej1vKGUuX3p8fGUueixlLnRyYW5zcG9zZSksZS5fZW1wdHlwb2ludHM9bChtKSxzKG0sZS5fZW1wdHlwb2ludHMpO3ZhciB4PWkubWF4Um93TGVuZ3RoKG0pLGI9InNjYWxlZCI9PT1lLnh0eXBlPyIiOnIsXz1jKGUsYix1LGYseCx2KSx3PSJzY2FsZWQiPT09ZS55dHlwZT8iIjpoLFQ9YyhlLHcscCxkLG0ubGVuZ3RoLHkpLGs9e2E6XyxiOlQsejptfTsibGV2ZWxzIj09PWUuY29udG91cnMudHlwZSYmIm5vbmUiIT09ZS5jb250b3Vycy5jb2xvcmluZyYmbih0LGUse3ZhbHM6bSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoieiJ9KTtyZXR1cm5ba119KHQsZSk7cmV0dXJuIGgoZSxlLl96KSxtfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiOjk3NCwiLi4vY29udG91ci9zZXRfY29udG91cnMiOjEwMjAsIi4uL2hlYXRtYXAvY2xlYW5fMmRfYXJyYXkiOjEwNjAsIi4uL2hlYXRtYXAvY29udmVydF9jb2x1bW5feHl6IjoxMDYyLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA2NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA2NywiLi4vaGVhdG1hcC9tYWtlX2JvdW5kX2FycmF5IjoxMDY4LCIuL2RlZmF1bHRzIjoxMDI1fV0sMTAyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyIpLHM9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLGw9dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjKXtmdW5jdGlvbiB1KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9aWYodSgiY2FycGV0IiksdC5hJiZ0LmIpe2lmKCFpKHQsZSx1LGMsImEiLCJiIikpcmV0dXJuIHZvaWQoZS52aXNpYmxlPSExKTt1KCJ0ZXh0IiksImNvbnN0cmFpbnQiPT09dSgiY29udG91cnMudHlwZSIpP28odCxlLHUsYyxyLHtoYXNIb3ZlcjohMX0pOihzKHQsZSx1LChmdW5jdGlvbihyKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxhLHIpfSkpLGwodCxlLHUsYyx7aGFzSG92ZXI6ITF9KSl9ZWxzZSBlLl9kZWZhdWx0Q29sb3I9cixlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2NvbnRvdXIvY29uc3RyYWludF9kZWZhdWx0cyI6MTAwNiwiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyI6MTAwOCwiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyI6MTAyMiwiLi4vaGVhdG1hcC94eXpfZGVmYXVsdHMiOjEwNzIsIi4vYXR0cmlidXRlcyI6MTAyM31dLDEwMjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiY29udG91cmNhcnBldCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsImNhcnBldCIsImNvbnRvdXIiLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsImhhc0xpbmVzIiwiY2FycGV0RGVwZW5kZW50Iiwibm9Ib3ZlciIsIm5vU29ydGluZ0J5VmFsdWUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vY29udG91ci9jb2xvcmJhciI6MTAwNCwiLi4vY29udG91ci9zdHlsZSI6MTAyMSwiLi9hdHRyaWJ1dGVzIjoxMDIzLCIuL2NhbGMiOjEwMjQsIi4vZGVmYXVsdHMiOjEwMjUsIi4vcGxvdCI6MTAyN31dLDEwMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vY2FycGV0L21hcF8xZF9hcnJheSIpLGE9dCgiLi4vY2FycGV0L21ha2VwYXRoIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyIpLGM9dCgiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyIpLHU9dCgiLi4vY29udG91ci9wbG90IiksZj10KCIuLi9jb250b3VyL2NvbnN0YW50cyIpLGg9dCgiLi4vY29udG91ci9jb252ZXJ0X3RvX2NvbnN0cmFpbnRzIikscD10KCIuLi9jb250b3VyL2VtcHR5X3BhdGhpbmZvIiksZD10KCIuLi9jb250b3VyL2Nsb3NlX2JvdW5kYXJpZXMiKSxtPXQoIi4uL2NhcnBldC9sb29rdXBfY2FycGV0aWQiKSxnPXQoIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSIpO2Z1bmN0aW9uIHYodCxlLHIpe3ZhciBuPXQuZ2V0UG9pbnRBdExlbmd0aChlKSxpPXQuZ2V0UG9pbnRBdExlbmd0aChyKSxhPWkueC1uLngsbz1pLnktbi55LHM9TWF0aC5zcXJ0KGEqYStvKm8pO3JldHVyblthL3Msby9zXX1mdW5jdGlvbiB5KHQpe3ZhciBlPU1hdGguc3FydCh0WzBdKnRbMF0rdFsxXSp0WzFdKTtyZXR1cm5bdFswXS9lLHRbMV0vZV19ZnVuY3Rpb24geCh0LGUpe3ZhciByPU1hdGguYWJzKHRbMF0qZVswXSt0WzFdKmVbMV0pO3JldHVybiBNYXRoLnNxcnQoMS1yKnIpL3J9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGIpe3ZhciBfPWUueGF4aXMsdz1lLnlheGlzO3MubWFrZVRyYWNlR3JvdXBzKGIsciwiY29udG91ciIpLmVhY2goKGZ1bmN0aW9uKHIpe3ZhciBiPW4uc2VsZWN0KHRoaXMpLFQ9clswXSxrPVQudHJhY2UsQT1rLl9jYXJwZXRUcmFjZT1tKHQsayksTT10LmNhbGNkYXRhW0EuaW5kZXhdWzBdO2lmKEEudmlzaWJsZSYmImxlZ2VuZG9ubHkiIT09QS52aXNpYmxlKXt2YXIgUz1ULmEsRT1ULmIsTD1rLmNvbnRvdXJzLEM9cChMLGUsVCksUD0iY29uc3RyYWludCI9PT1MLnR5cGUsST1MLl9vcGVyYXRpb24sTz1QPyI9Ij09PUk/ImxpbmVzIjoiZmlsbCI6TC5jb2xvcmluZyx6PVtbU1swXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFW0UubGVuZ3RoLTFdXSxbU1tTLmxlbmd0aC0xXSxFWzBdXSxbU1swXSxFWzBdXV07bChDKTt2YXIgRD0xZS04KihTW1MubGVuZ3RoLTFdLVNbMF0pLFI9MWUtOCooRVtFLmxlbmd0aC0xXS1FWzBdKTtjKEMsRCxSKTt2YXIgRixCLE4saixVPUM7ImNvbnN0cmFpbnQiPT09TC50eXBlJiYoVT1oKEMsSSkpLGZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLGEsbyxzLGwsYyx1O2ZvcihyPTA7cjx0Lmxlbmd0aDtyKyspe2ZvcihhPXRbcl0sbz1hLnBlZGdlcGF0aHM9W10scz1hLnBwYXRocz1bXSxuPTA7bjxhLmVkZ2VwYXRocy5sZW5ndGg7bisrKXtmb3IodT1hLmVkZ2VwYXRoc1tuXSxsPVtdLGk9MDtpPHUubGVuZ3RoO2krKylsW2ldPWUodVtpXSk7by5wdXNoKGwpfWZvcihuPTA7bjxhLnBhdGhzLmxlbmd0aDtuKyspe2Zvcih1PWEucGF0aHNbbl0sYz1bXSxpPTA7aTx1Lmxlbmd0aDtpKyspY1tpXT1lKHVbaV0pO3MucHVzaChjKX19fShDLHEpO3ZhciBWPVtdO2ZvcihqPU0uY2xpcHNlZ21lbnRzLmxlbmd0aC0xO2o+PTA7ai0tKUY9TS5jbGlwc2VnbWVudHNbal0sQj1pKFtdLEYueCxfLmMycCksTj1pKFtdLEYueSx3LmMycCksQi5yZXZlcnNlKCksTi5yZXZlcnNlKCksVi5wdXNoKGEoQixOLEYuYmljdWJpYykpO3ZhciBIPSJNIitWLmpvaW4oIkwiKSsiWiI7IWZ1bmN0aW9uKHQsZSxyLG4sbyxsKXt2YXIgYyx1LGYsaCxwPXMuZW5zdXJlU2luZ2xlKHQsImciLCJjb250b3VyYmciKS5zZWxlY3RBbGwoInBhdGgiKS5kYXRhKCJmaWxsIiE9PWx8fG8/W106WzBdKTtwLmVudGVyKCkuYXBwZW5kKCJwYXRoIikscC5leGl0KCkucmVtb3ZlKCk7dmFyIGQ9W107Zm9yKGg9MDtoPGUubGVuZ3RoO2grKyljPWVbaF0sdT1pKFtdLGMueCxyLmMycCksZj1pKFtdLGMueSxuLmMycCksZC5wdXNoKGEodSxmLGMuYmljdWJpYykpO3AuYXR0cigiZCIsIk0iK2Quam9pbigiTCIpKyJaIikuc3R5bGUoInN0cm9rZSIsIm5vbmUiKX0oYixNLmNsaXBzZWdtZW50cyxfLHcsUCxPKSxmdW5jdGlvbih0LGUscixpLGEsbCxjLHUsZixoLHApe3ZhciBtPSJmaWxsIj09PWg7bSYmZChhLHQuY29udG91cnMpO3ZhciB2PXMuZW5zdXJlU2luZ2xlKGUsImciLCJjb250b3VyZmlsbCIpLnNlbGVjdEFsbCgicGF0aCIpLmRhdGEobT9hOltdKTt2LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdi5leGl0KCkucmVtb3ZlKCksdi5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT0odC5wcmVmaXhCb3VuZGFyeT9wOiIiKStmdW5jdGlvbih0LGUscixuLGksYSxsLGMpe3ZhciB1LGYsaCxwLGQsbSx2LHk9IiIseD1lLmVkZ2VwYXRocy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSksYj0hMCxfPTFlLTQqTWF0aC5hYnMoclswXVswXS1yWzJdWzBdKSx3PTFlLTQqTWF0aC5hYnMoclswXVsxXS1yWzJdWzFdKTtmdW5jdGlvbiBUKHQpe3JldHVybiBNYXRoLmFicyh0WzFdLXJbMF1bMV0pPHd9ZnVuY3Rpb24gayh0KXtyZXR1cm4gTWF0aC5hYnModFsxXS1yWzJdWzFdKTx3fWZ1bmN0aW9uIEEodCl7cmV0dXJuIE1hdGguYWJzKHRbMF0tclswXVswXSk8X31mdW5jdGlvbiBNKHQpe3JldHVybiBNYXRoLmFicyh0WzBdLXJbMl1bMF0pPF99ZnVuY3Rpb24gUyh0LGUpe3ZhciByLG4sbyxzLHU9IiI7Zm9yKFQodCkmJiFNKHQpfHxrKHQpJiYhQSh0KT8ocz1pLmFheGlzLG89ZyhpLGEsW3RbMF0sZVswXV0sLjUqKHRbMV0rZVsxXSkpKToocz1pLmJheGlzLG89ZyhpLGEsLjUqKHRbMF0rZVswXSksW3RbMV0sZVsxXV0pKSxyPTE7cjxvLmxlbmd0aDtyKyspZm9yKHUrPXMuc21vb3RoaW5nPyJDIjoiTCIsbj0wO248b1tyXS5sZW5ndGg7bisrKXt2YXIgZj1vW3JdW25dO3UrPVtsLmMycChmWzBdKSxjLmMycChmWzFdKV0rIiAifXJldHVybiB1fXU9MCxmPW51bGw7Zm9yKDt4Lmxlbmd0aDspe3ZhciBFPWUuZWRnZXBhdGhzW3VdWzBdO2ZvcihmJiYoeSs9UyhmLEUpKSx2PW8uc21vb3Rob3BlbihlLmVkZ2VwYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpLHkrPWI/djp2LnJlcGxhY2UoL15NLywiTCIpLHguc3BsaWNlKHguaW5kZXhPZih1KSwxKSxmPWUuZWRnZXBhdGhzW3VdW2UuZWRnZXBhdGhzW3VdLmxlbmd0aC0xXSxkPS0xLHA9MDtwPDQ7cCsrKXtpZighZil7cy5sb2coIk1pc3NpbmcgZW5kPyIsdSxlKTticmVha31mb3IoVChmKSYmIU0oZik/aD1yWzFdOkEoZik/aD1yWzBdOmsoZik/aD1yWzNdOk0oZikmJihoPXJbMl0pLG09MDttPGUuZWRnZXBhdGhzLmxlbmd0aDttKyspe3ZhciBMPWUuZWRnZXBhdGhzW21dWzBdO01hdGguYWJzKGZbMF0taFswXSk8Xz9NYXRoLmFicyhmWzBdLUxbMF0pPF8mJihMWzFdLWZbMV0pKihoWzFdLUxbMV0pPj0wJiYoaD1MLGQ9bSk6TWF0aC5hYnMoZlsxXS1oWzFdKTx3P01hdGguYWJzKGZbMV0tTFsxXSk8dyYmKExbMF0tZlswXSkqKGhbMF0tTFswXSk+PTAmJihoPUwsZD1tKTpzLmxvZygiZW5kcHQgdG8gbmV3ZW5kcHQgaXMgbm90IHZlcnQuIG9yIGhvcnouIixmLGgsTCl9aWYoZD49MClicmVhazt5Kz1TKGYsaCksZj1ofWlmKGQ9PT1lLmVkZ2VwYXRocy5sZW5ndGgpe3MubG9nKCJ1bmNsb3NlZCBwZXJpbWV0ZXIgcGF0aCIpO2JyZWFrfXU9ZCwoYj0tMT09PXguaW5kZXhPZih1KSkmJih1PXhbMF0seSs9UyhmLGgpKyJaIixmPW51bGwpfWZvcih1PTA7dTxlLnBhdGhzLmxlbmd0aDt1KyspeSs9by5zbW9vdGhjbG9zZWQoZS5wYXRoc1t1XS5tYXAobiksZS5zbW9vdGhpbmcpO3JldHVybiB5fSgwLHQsbCxjLHUsZixyLGkpO2U/bi5zZWxlY3QodGhpcykuYXR0cigiZCIsZSkuc3R5bGUoInN0cm9rZSIsIm5vbmUiKTpuLnNlbGVjdCh0aGlzKS5yZW1vdmUoKX0pKX0oayxiLF8sdyxVLHoscSxBLE0sTyxIKSxmdW5jdGlvbih0LGUscixpLGEsbCxjKXt2YXIgaD1zLmVuc3VyZVNpbmdsZSh0LCJnIiwiY29udG91cmxpbmVzIikscD0hMSE9PWEuc2hvd2xpbmVzLGQ9YS5zaG93bGFiZWxzLG09cCYmZCxnPXUuY3JlYXRlTGluZXMoaCxwfHxkLGUpLGI9dS5jcmVhdGVMaW5lQ2xpcChoLG0scixpLnRyYWNlLnVpZCksXz10LnNlbGVjdEFsbCgiZy5jb250b3VybGFiZWxzIikuZGF0YShkP1swXTpbXSk7aWYoXy5leGl0KCkucmVtb3ZlKCksXy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImNvbnRvdXJsYWJlbHMiLCEwKSxkKXt2YXIgdz1sLnhheGlzLFQ9bC55YXhpcyxrPXcuX2xlbmd0aCxBPVQuX2xlbmd0aCxNPVtbWzAsMF0sW2ssMF0sW2ssQV0sWzAsQV1dXSxTPVtdO3MuY2xlYXJMb2NhdGlvbkNhY2hlKCk7dmFyIEU9dS5sYWJlbEZvcm1hdHRlcihyLGkpLEw9by50ZXN0ZXIuYXBwZW5kKCJ0ZXh0IikuYXR0cigiZGF0YS1ub3RleCIsMSkuY2FsbChvLmZvbnQsYS5sYWJlbGZvbnQpLEM9e2xlZnQ6MCxyaWdodDprLGNlbnRlcjprLzIsdG9wOjAsYm90dG9tOkEsbWlkZGxlOkEvMn0sUD1NYXRoLnNxcnQoayprK0EqQSksST1mLkxBQkVMRElTVEFOQ0UqUC9NYXRoLm1heCgxLGUubGVuZ3RoL2YuTEFCRUxJTkNSRUFTRSk7Zy5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT11LmNhbGNUZXh0T3B0cyh0LmxldmVsLEUsTCxyKTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgbj1zLmdldFZpc2libGVTZWdtZW50KHRoaXMsQyxlLmhlaWdodC8yKTtpZihuJiYoZnVuY3Rpb24odCxlLHIsbixpLGEpe2Zvcih2YXIgbyxzPTA7czxyLnBlZGdlcGF0aHMubGVuZ3RoO3MrKyllPT09ci5wZWRnZXBhdGhzW3NdJiYobz1yLmVkZ2VwYXRoc1tzXSk7aWYoIW8pcmV0dXJuO3ZhciBsPWkuYVswXSxjPWkuYVtpLmEubGVuZ3RoLTFdLHU9aS5iWzBdLGY9aS5iW2kuYi5sZW5ndGgtMV07ZnVuY3Rpb24gaCh0LGUpe3ZhciByLG49MDtyZXR1cm4oTWF0aC5hYnModFswXS1sKTwuMXx8TWF0aC5hYnModFswXS1jKTwuMSkmJihyPXkoaS5keHlkYl9yb3VnaCh0WzBdLHRbMV0sLjEpKSxuPU1hdGgubWF4KG4sYSp4KGUscikvMikpLChNYXRoLmFicyh0WzFdLXUpPC4xfHxNYXRoLmFicyh0WzFdLWYpPC4xKSYmKHI9eShpLmR4eWRhX3JvdWdoKHRbMF0sdFsxXSwuMSkpLG49TWF0aC5tYXgobixhKngoZSxyKS8yKSksbn12YXIgcD12KHQsMCwxKSxkPXYodCxuLnRvdGFsLG4udG90YWwtMSksbT1oKG9bMF0scCksZz1uLnRvdGFsLWgob1tvLmxlbmd0aC0xXSxkKTtuLm1pbjxtJiYobi5taW49bSk7bi5tYXg+ZyYmKG4ubWF4PWcpO24ubGVuPW4ubWF4LW4ubWlufSh0aGlzLHIsdCxuLGMsZS5oZWlnaHQpLCEobi5sZW48KGUud2lkdGgrZS5oZWlnaHQpKmYuTEFCRUxNSU4pKSlmb3IodmFyIGk9TWF0aC5taW4oTWF0aC5jZWlsKG4ubGVuL0kpLGYuTEFCRUxNQVgpLGE9MDthPGk7YSsrKXt2YXIgbz11LmZpbmRCZXN0VGV4dExvY2F0aW9uKHRoaXMsbixlLFMsQyk7aWYoIW8pYnJlYWs7dS5hZGRMYWJlbERhdGEobyxlLFMsTSl9fSkpfSkpLEwucmVtb3ZlKCksdS5kcmF3TGFiZWxzKF8sUyxyLGIsbT9NOm51bGwpfWQmJiFwJiZnLnJlbW92ZSgpfShiLEMsdCxULEwsZSxBKSxvLnNldENsaXBVcmwoYixBLl9jbGlwUGF0aElkLHQpfWZ1bmN0aW9uIHEodCl7dmFyIGU9QS5hYjJ4eSh0WzBdLHRbMV0sITApO3JldHVybltfLmMycChlWzBdKSx3LmMycChlWzFdKV19fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uL2NhcnBldC9heGlzX2FsaWduZWRfbGluZSI6OTU4LCIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NzQsIi4uL2NhcnBldC9tYWtlcGF0aCI6OTc1LCIuLi9jYXJwZXQvbWFwXzFkX2FycmF5Ijo5NzYsIi4uL2NvbnRvdXIvY2xvc2VfYm91bmRhcmllcyI6MTAwMywiLi4vY29udG91ci9jb25zdGFudHMiOjEwMDUsIi4uL2NvbnRvdXIvY29udmVydF90b19jb25zdHJhaW50cyI6MTAwOSwiLi4vY29udG91ci9lbXB0eV9wYXRoaW5mbyI6MTAxMSwiLi4vY29udG91ci9maW5kX2FsbF9wYXRocyI6MTAxMywiLi4vY29udG91ci9tYWtlX2Nyb3NzaW5ncyI6MTAxOCwiLi4vY29udG91ci9wbG90IjoxMDE5LCJAcGxvdGx5L2QzIjo1OH1dLDEwMjg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi9zY2F0dGVybWFwYm94L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz1zKHtsb246by5sb24sbGF0Om8ubGF0LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0scmFkaXVzOnt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiEwLG1pbjoxLGRmbHQ6MzB9LGJlbG93Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sdGV4dDpvLnRleHQsaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGhvdmVyaW5mbzpzKHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsInoiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTppKCksc2hvd2xlZ2VuZDpzKHt9LGEuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSxuKCIiLHtjTGV0dGVyOiJ6IixlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVybWFwYm94L2F0dHJpYnV0ZXMiOjEyNTZ9XSwxMDI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIikscz10KCIuLi8uLi9saWIiKS5fO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9sZW5ndGgsbD1uZXcgQXJyYXkociksYz1lLnosdT1pKGMpJiZjLmxlbmd0aCxmPTA7ZjxyO2YrKyl7dmFyIGg9bFtmXT17fSxwPWUubG9uW2ZdLGQ9ZS5sYXRbZl07aWYoaC5sb25sYXQ9bihwKSYmbihkKT9bK3AsK2RdOlthLGFdLHUpe3ZhciBtPWNbZl07aC56PW4obSk/bTphfX1yZXR1cm4gbyh0LGUse3ZhbHM6dT9jOlswLDFdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJ6In0pLHImJihsWzBdLnQ9e2xhYmVsczp7bGF0OnModCwibGF0OiIpKyIgIixsb246cyh0LCJsb246IikrIiAifX0pLGx9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDcsIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4uLy4uL2xpYi9nZW9qc29uX3V0aWxzIikubWFrZUJsYW5rO2UuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9ITA9PT1lLnZpc2libGUmJjAhPT1lLl9sZW5ndGgsYz1lLl9vcHRzPXtoZWF0bWFwOntsYXlvdXQ6e3Zpc2liaWxpdHk6Im5vbmUifSxwYWludDp7fX0sZ2VvanNvbjpsKCl9O2lmKCFyKXJldHVybiBjO3ZhciB1LGY9W10saD1lLnoscD1lLnJhZGl1cyxkPWkuaXNBcnJheU9yVHlwZWRBcnJheShoKSYmaC5sZW5ndGgsbT1pLmlzQXJyYXlPclR5cGVkQXJyYXkocCk7Zm9yKHU9MDt1PHQubGVuZ3RoO3UrKyl7dmFyIGc9dFt1XSx2PWcubG9ubGF0O2lmKHZbMF0hPT1zKXt2YXIgeT17fTtpZihkKXt2YXIgeD1nLno7eS56PXghPT1zP3g6MH1tJiYoeS5yPW4ocFt1XSkmJnBbdV0+MD8rcFt1XTowKSxmLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6dn0scHJvcGVydGllczp5fSl9fXZhciBiPW8uZXh0cmFjdE9wdHMoZSksXz1iLnJldmVyc2VzY2FsZT9vLmZsaXBTY2FsZShiLmNvbG9yc2NhbGUpOmIuY29sb3JzY2FsZSx3PV9bMF1bMV0sVD1bImludGVycG9sYXRlIixbImxpbmVhciJdLFsiaGVhdG1hcC1kZW5zaXR5Il0sMCxhLm9wYWNpdHkodyk8MT93OmEuYWRkT3BhY2l0eSh3LDApXTtmb3IodT0xO3U8Xy5sZW5ndGg7dSsrKVQucHVzaChfW3VdWzBdLF9bdV1bMV0pO3ZhciBrPVsiaW50ZXJwb2xhdGUiLFsibGluZWFyIl0sWyJnZXQiLCJ6Il0sYi5taW4sMCxiLm1heCwxXTtyZXR1cm4gaS5leHRlbmRGbGF0KGMuaGVhdG1hcC5wYWludCx7ImhlYXRtYXAtd2VpZ2h0IjpkP2s6MS8oYi5tYXgtYi5taW4pLCJoZWF0bWFwLWNvbG9yIjpULCJoZWF0bWFwLXJhZGl1cyI6bT97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJyIn06ZS5yYWRpdXMsImhlYXRtYXAtb3BhY2l0eSI6ZS5vcGFjaXR5fSksYy5nZW9qc29uPXt0eXBlOiJGZWF0dXJlQ29sbGVjdGlvbiIsZmVhdHVyZXM6Zn0sYy5oZWF0bWFwLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixjfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyI6NzcwLCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTAzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGE9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgbD1zKCJsb24iKXx8W10sYz1zKCJsYXQiKXx8W10sdT1NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk7dT8oZS5fbGVuZ3RoPXUscygieiIpLHMoInJhZGl1cyIpLHMoImJlbG93IikscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxpKHQsZSxvLHMse3ByZWZpeDoiIixjTGV0dGVyOiJ6In0pKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9saWIiOjc3NiwiLi9hdHRyaWJ1dGVzIjoxMDI4fV0sMTAzMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdC56PWUueix0fX0se31dLDEwMzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiKS5ob3ZlclBvaW50cyxhPXQoIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiKS5nZXRFeHRyYVRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbz1pKHQsZSxyKTtpZihvKXt2YXIgcz1vWzBdLGw9cy5jZCxjPWxbMF0udHJhY2UsdT1sW3MuaW5kZXhdO2lmKGRlbGV0ZSBzLmNvbG9yLCJ6ImluIHUpe3ZhciBmPXMuc3VicGxvdC5tb2NrQXhpcztzLno9dS56LHMuekxhYmVsPW4udGlja1RleHQoZixmLmMybCh1LnopLCJob3ZlciIpLnRleHR9cmV0dXJuIHMuZXh0cmFUZXh0PWEoYyx1LGxbMF0udC5sYWJlbHMpLFtzXX19fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXJtYXBib3gvaG92ZXIiOjEyNjF9XSwxMDM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuLi9zY2F0dGVybWFwYm94L2Zvcm1hdF9sYWJlbHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxnZXRCZWxvdzpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLmdldE1hcExheWVycygpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXSxhPWkuaWQ7aWYoInN5bWJvbCI9PT1pLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgYSYmLTE9PT1hLmluZGV4T2YoInBsb3RseS0iKSlyZXR1cm4gYX19LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJkZW5zaXR5bWFwYm94IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9tYXBib3giKSxjYXRlZ29yaWVzOlsibWFwYm94IiwiZ2wiLCJzaG93TGVnZW5kIl0sbWV0YTp7aHJfbmFtZToiZGVuc2l0eV9tYXBib3gifX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4ODQsIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4uL3NjYXR0ZXJtYXBib3gvZm9ybWF0X2xhYmVscyI6MTI2MCwiLi9hdHRyaWJ1dGVzIjoxMDI4LCIuL2NhbGMiOjEwMjksIi4vZGVmYXVsdHMiOjEwMzEsIi4vZXZlbnRfZGF0YSI6MTAzMiwiLi9ob3ZlciI6MTAzMywiLi9wbG90IjoxMDM1fV0sMTAzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NvbnZlcnQiKSxpPXQoIi4uLy4uL3Bsb3RzL21hcGJveC9jb25zdGFudHMiKS50cmFjZUxheWVyUHJlZml4O2Z1bmN0aW9uIGEodCxlKXt0aGlzLnR5cGU9ImRlbnNpdHltYXBib3giLHRoaXMuc3VicGxvdD10LHRoaXMudWlkPWUsdGhpcy5zb3VyY2VJZD0ic291cmNlLSIrZSx0aGlzLmxheWVyTGlzdD1bWyJoZWF0bWFwIixpK2UrIi1oZWF0bWFwIl1dLHRoaXMuYmVsb3c9bnVsbH12YXIgbz1hLnByb3RvdHlwZTtvLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YnBsb3Qscj10aGlzLmxheWVyTGlzdCxpPW4odCksYT1lLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtlLm1hcC5nZXRTb3VyY2UodGhpcy5zb3VyY2VJZCkuc2V0RGF0YShpLmdlb2pzb24pLGEhPT10aGlzLmJlbG93JiYodGhpcy5fcmVtb3ZlTGF5ZXJzKCksdGhpcy5fYWRkTGF5ZXJzKGksYSksdGhpcy5iZWxvdz1hKTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXSxsPXNbMF0sYz1zWzFdLHU9aVtsXTtlLnNldE9wdGlvbnMoYywic2V0TGF5b3V0UHJvcGVydHkiLHUubGF5b3V0KSwidmlzaWJsZSI9PT11LmxheW91dC52aXNpYmlsaXR5JiZlLnNldE9wdGlvbnMoYywic2V0UGFpbnRQcm9wZXJ0eSIsdS5wYWludCl9fSxvLl9hZGRMYXllcnM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5zdWJwbG90LG49dGhpcy5sYXllckxpc3QsaT10aGlzLnNvdXJjZUlkLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIG89blthXSxzPW9bMF0sbD10W3NdO3IuYWRkTGF5ZXIoe3R5cGU6cyxpZDpvWzFdLHNvdXJjZTppLGxheW91dDpsLmxheW91dCxwYWludDpsLnBhaW50fSxlKX19LG8uX3JlbW92ZUxheWVycz1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLnN1YnBsb3QubWFwLGU9dGhpcy5sYXllckxpc3Qscj1lLmxlbmd0aC0xO3I+PTA7ci0tKXQucmVtb3ZlTGF5ZXIoZVtyXVsxXSl9LG8uZGlzcG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuc3VicGxvdC5tYXA7dGhpcy5fcmVtb3ZlTGF5ZXJzKCksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWVbMF0udHJhY2UsaT1uZXcgYSh0LHIudWlkKSxvPWkuc291cmNlSWQscz1uKGUpLGw9aS5iZWxvdz10LmJlbG93TG9va3VwWyJ0cmFjZS0iK3IudWlkXTtyZXR1cm4gdC5tYXAuYWRkU291cmNlKG8se3R5cGU6Imdlb2pzb24iLGRhdGE6cy5nZW9qc29ufSksaS5fYWRkTGF5ZXJzKHMsbCksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnQiOjEwMzB9XSwxMDM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRbcl0uaT1yO24ubWVyZ2VBcnJheShlLnRleHQsdCwidHgiKSxuLm1lcmdlQXJyYXkoZS5ob3ZlcnRleHQsdCwiaHR4Iik7dmFyIGk9ZS5tYXJrZXI7aWYoaSl7bi5tZXJnZUFycmF5KGkub3BhY2l0eSx0LCJtbyIpLG4ubWVyZ2VBcnJheShpLmNvbG9yLHQsIm1jIik7dmFyIGE9aS5saW5lO2EmJihuLm1lcmdlQXJyYXkoYS5jb2xvcix0LCJtbGMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoYS53aWR0aCx0LCJtbHciKSl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDEwMzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG4saT10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikubGluZSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxjPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyx1PXQoIi4vY29uc3RhbnRzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3g6aS54LHgwOmkueDAsZHg6aS5keCx5OmkueSx5MDppLnkwLGR5OmkuZHkseHBlcmlvZDppLnhwZXJpb2QseXBlcmlvZDppLnlwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx5cGVyaW9kMDppLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6aS54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6aS55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDpzKCJ4IikseWhvdmVyZm9ybWF0OnMoInkiKSxob3ZlcnRleHQ6aS5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOnUuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzpmKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJwZXJjZW50IGluaXRpYWwiLCJwZXJjZW50IHByZXZpb3VzIiwicGVyY2VudCB0b3RhbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsInBlcmNlbnQgaW5pdGlhbCIsInBlcmNlbnQgcHJldmlvdXMiLCJwZXJjZW50IHRvdGFsIiwidmFsdWUiXSxleHRyYXM6WyJub25lIl0sZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHRleHR0ZW1wbGF0ZTpjKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOnUuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksdGV4dDppLnRleHQsdGV4dHBvc2l0aW9uOmkudGV4dHBvc2l0aW9uLGluc2lkZXRleHRhbmNob3I6Zih7fSxpLmluc2lkZXRleHRhbmNob3Ise2RmbHQ6Im1pZGRsZSJ9KSx0ZXh0YW5nbGU6Zih7fSxpLnRleHRhbmdsZSx7ZGZsdDowfSksdGV4dGZvbnQ6aS50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDppLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDppLm91dHNpZGV0ZXh0Zm9udCxjb25zdHJhaW50ZXh0OmkuY29uc3RyYWludGV4dCxjbGlwb25heGlzOmkuY2xpcG9uYXhpcyxvcmllbnRhdGlvbjpmKHt9LGkub3JpZW50YXRpb24se30pLG9mZnNldDpmKHt9LGkub2Zmc2V0LHthcnJheU9rOiExfSksd2lkdGg6Zih7fSxpLndpZHRoLHthcnJheU9rOiExfSksbWFya2VyOihuPWYoe30saS5tYXJrZXIpLGRlbGV0ZSBuLnBhdHRlcm4sbiksY29ubmVjdG9yOntmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjpmKHt9LGEuY29sb3Ise2RmbHQ6aC5kZWZhdWx0TGluZX0pLHdpZHRoOmYoe30sYS53aWR0aCx7ZGZsdDowLGVkaXRUeXBlOiJwbG90In0pLGRhc2g6YS5kYXNoLGVkaXRUeXBlOiJzdHlsZSJ9LHZpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LG9mZnNldGdyb3VwOmkub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6aS5hbGlnbm1lbnRncm91cH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9iYXIvYXR0cmlidXRlcyI6OTE0LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTEsIi4vY29uc3RhbnRzIjoxMDM5fV0sMTAzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLGE9dCgiLi9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdD09PXM/MDp0fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGMsdSxmLGgscCxkLG0sZz1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4Iiksdj1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1nLm1ha2VDYWxjZGF0YShlLCJ4IiksdT12Lm1ha2VDYWxjZGF0YShlLCJ5IiksZj1pKGUsdiwieSIsdSksaD0hIWUueXBlcmlvZGFsaWdubWVudCxwPSJ5Iik6KHI9di5tYWtlQ2FsY2RhdGEoZSwieSIpLHU9Zy5tYWtlQ2FsY2RhdGEoZSwieCIpLGY9aShlLGcsIngiLHUpLGg9ISFlLnhwZXJpb2RhbGlnbm1lbnQscD0ieCIpLGM9Zi52YWxzO3ZhciB5LHg9TWF0aC5taW4oYy5sZW5ndGgsci5sZW5ndGgpLGI9bmV3IEFycmF5KHgpO2ZvcihlLl9iYXNlPVtdLGQ9MDtkPHg7ZCsrKXtyW2RdPDAmJihyW2RdPXMpO3ZhciBfPSExO3JbZF0hPT1zJiZkKzE8eCYmcltkKzFdIT09cyYmKF89ITApLG09YltkXT17cDpjW2RdLHM6cltkXSxjTmV4dDpffSxlLl9iYXNlW2RdPS0uNSptLnMsaCYmKGJbZF0ub3JpZ19wPXVbZF0sYltkXVtwKyJFbmQiXT1mLmVuZHNbZF0sYltkXVtwKyJTdGFydCJdPWYuc3RhcnRzW2RdKSxlLmlkcyYmKG0uaWQ9U3RyaW5nKGUuaWRzW2RdKSksMD09PWQmJihiWzBdLnZUb3RhbD0wKSxiWzBdLnZUb3RhbCs9bChtLnMpLG0uYmVnUj1sKG0ucykvbChiWzBdLnMpfWZvcihkPTA7ZDx4O2QrKykobT1iW2RdKS5zIT09cyYmKG0uc3VtUj1tLnMvYlswXS52VG90YWwsbS5kaWZSPXZvaWQgMCE9PXk/bS5zL3k6MSx5PW0ucyk7cmV0dXJuIGEoYixlKSxvKGIsZSksYn19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTMsIi4vYXJyYXlzX3RvX2NhbGNkYXRhIjoxMDM2fV0sMTAzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2V2ZW50RGF0YUtleXM6WyJwZXJjZW50SW5pdGlhbCIsInBlcmNlbnRQcmV2aW91cyIsInBlcmNlbnRUb3RhbCJdfX0se31dLDEwNDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRHcm91cFBvc2l0aW9ucztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGE9dC5fZnVsbExheW91dCxvPXQuX2Z1bGxEYXRhLHM9dC5jYWxjZGF0YSxsPWUueGF4aXMsYz1lLnlheGlzLHU9W10sZj1bXSxoPVtdO2ZvcihpPTA7aTxvLmxlbmd0aDtpKyspe3ZhciBwPW9baV0sZD0iaCI9PT1wLm9yaWVudGF0aW9uOyEwPT09cC52aXNpYmxlJiZwLnhheGlzPT09bC5faWQmJnAueWF4aXM9PT1jLl9pZCYmImZ1bm5lbCI9PT1wLnR5cGUmJihyPXNbaV0sZD9oLnB1c2gocik6Zi5wdXNoKHIpLHUucHVzaChyKSl9dmFyIG09e21vZGU6YS5mdW5uZWxtb2RlLG5vcm06YS5mdW5uZWxub3JtLGdhcDphLmZ1bm5lbGdhcCxncm91cGdhcDphLmZ1bm5lbGdyb3VwZ2FwfTtmb3Iobih0LGwsYyxmLG0pLG4odCxjLGwsaCxtKSxpPTA7aTx1Lmxlbmd0aDtpKyspe3I9dVtpXTtmb3IodmFyIGc9MDtnPHIubGVuZ3RoO2crKylnKzE8ci5sZW5ndGgmJihyW2ddLm5leHRQMD1yW2crMV0ucDAscltnXS5uZXh0UzA9cltnKzFdLnMwLHJbZ10ubmV4dFAxPXJbZysxXS5wMSxyW2ddLm5leHRTMT1yW2crMV0uczEpfX19LHsiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxN31dLDEwNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKTtlLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pZihvKHQsZSxpLHUpKXtzKHQsZSxpLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoIm9yaWVudGF0aW9uIixlLnkmJiFlLng/InYiOiJoIiksdSgib2Zmc2V0IiksdSgid2lkdGgiKTt2YXIgZj11KCJ0ZXh0Iik7dSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciBoPXUoInRleHRwb3NpdGlvbiIpO2EodCxlLGksdSxoLHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSI9PT1lLnRleHRwb3NpdGlvbnx8ZS50ZXh0dGVtcGxhdGV8fHUoInRleHRpbmZvIixBcnJheS5pc0FycmF5KGYpPyJ0ZXh0K3ZhbHVlIjoidmFsdWUiKTt2YXIgcD11KCJtYXJrZXIuY29sb3IiLHIpO2lmKHUoIm1hcmtlci5saW5lLmNvbG9yIixjLmRlZmF1bHRMaW5lKSx1KCJtYXJrZXIubGluZS53aWR0aCIpLHUoImNvbm5lY3Rvci52aXNpYmxlIikpdSgiY29ubmVjdG9yLmZpbGxjb2xvciIsZnVuY3Rpb24odCl7dmFyIGU9bi5pc0FycmF5T3JUeXBlZEFycmF5KHQpPyIjMDAwIjp0O3JldHVybiBjLmFkZE9wYWNpdHkoZSwuNSpjLm9wYWNpdHkoZSkpfShwKSksdSgiY29ubmVjdG9yLmxpbmUud2lkdGgiKSYmKHUoImNvbm5lY3Rvci5saW5lLmNvbG9yIiksdSgiY29ubmVjdG9yLmxpbmUuZGFzaCIpKX1lbHNlIGUudmlzaWJsZT0hMX0sY3Jvc3NUcmFjZURlZmF1bHRzOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtmdW5jdGlvbiBvKHQpe3JldHVybiBuLmNvZXJjZShhLl9pbnB1dCxhLGwsdCl9aWYoImdyb3VwIj09PWUuZnVubmVsbW9kZSlmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKylyPShhPXRbc10pLl9pbnB1dCxpKHIsYSxlLG8pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuLi9zY2F0dGVyL3h5X2RlZmF1bHRzIjoxMjE4LCIuL2F0dHJpYnV0ZXMiOjEwMzd9XSwxMDQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lng9InhWYWwiaW4gZT9lLnhWYWw6ZS54LHQueT0ieVZhbCJpbiBlP2UueVZhbDplLnksInBlcmNlbnRJbml0aWFsImluIGUmJih0LnBlcmNlbnRJbml0aWFsPWUucGVyY2VudEluaXRpYWwpLCJwZXJjZW50UHJldmlvdXMiaW4gZSYmKHQucGVyY2VudFByZXZpb3VzPWUucGVyY2VudFByZXZpb3VzKSwicGVyY2VudFRvdGFsImluIGUmJih0LnBlcmNlbnRUb3RhbD1lLnBlcmNlbnRUb3RhbCksZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksdH19LHt9XSwxMDQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGk9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsYT10KCIuLi8uLi9saWIiKS5mb3JtYXRQZXJjZW50O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLHMpe3ZhciBsPWkodCxlLHIsbyxzKTtpZihsKXt2YXIgYz1sLmNkLHU9Y1swXS50cmFjZSxmPSJoIj09PXUub3JpZW50YXRpb24saD1jW2wuaW5kZXhdO2xbKGY/IngiOiJ5IikrIkxhYmVsVmFsIl09aC5zLGwucGVyY2VudEluaXRpYWw9aC5iZWdSLGwucGVyY2VudEluaXRpYWxMYWJlbD1hKGguYmVnUiwxKSxsLnBlcmNlbnRQcmV2aW91cz1oLmRpZlIsbC5wZXJjZW50UHJldmlvdXNMYWJlbD1hKGguZGlmUiwxKSxsLnBlcmNlbnRUb3RhbD1oLnN1bVIsbC5wZXJjZW50VG90YWxMYWJlbD1hKGguc3VtUiwxKTt2YXIgcD1oLmhpfHx1LmhvdmVyaW5mbyxkPVtdO2lmKHAmJiJub25lIiE9PXAmJiJza2lwIiE9PXApe3ZhciBtPSJhbGwiPT09cCxnPXAuc3BsaXQoIisiKSx2PWZ1bmN0aW9uKHQpe3JldHVybiBtfHwtMSE9PWcuaW5kZXhPZih0KX07digicGVyY2VudCBpbml0aWFsIikmJmQucHVzaChsLnBlcmNlbnRJbml0aWFsTGFiZWwrIiBvZiBpbml0aWFsIiksdigicGVyY2VudCBwcmV2aW91cyIpJiZkLnB1c2gobC5wZXJjZW50UHJldmlvdXNMYWJlbCsiIG9mIHByZXZpb3VzIiksdigicGVyY2VudCB0b3RhbCIpJiZkLnB1c2gobC5wZXJjZW50VG90YWxMYWJlbCsiIG9mIHRvdGFsIil9cmV0dXJuIGwuZXh0cmFUZXh0PWQuam9pbigiPGJyPiIpLGwuY29sb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10Lm1hcmtlcixpPWUubWN8fHIuY29sb3IsYT1lLm1sY3x8ci5saW5lLmNvbG9yLG89ZS5tbHd8fHIubGluZS53aWR0aDtpZihuKGkpKXJldHVybiBpO2lmKG4oYSkmJm8pcmV0dXJuIGF9KHUsaCksW2xdfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMDQ0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiZnVubmVsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuL2F0dHJpYnV0ZXMiOjEwMzcsIi4vY2FsYyI6MTAzOCwiLi9jcm9zc190cmFjZV9jYWxjIjoxMDQwLCIuL2RlZmF1bHRzIjoxMDQxLCIuL2V2ZW50X2RhdGEiOjEwNDIsIi4vaG92ZXIiOjEwNDMsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEwNDUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMDQ2LCIuL3Bsb3QiOjEwNDcsIi4vc3R5bGUiOjEwNDh9XSwxMDQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZnVubmVsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3RhY2siLCJncm91cCIsIm92ZXJsYXkiXSxkZmx0OiJzdGFjayIsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6ImNhbGMifSxmdW5uZWxncm91cGdhcDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ITE7ZnVuY3Rpb24gbyhyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfWZvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKXt2YXIgbD1yW3NdO2lmKGwudmlzaWJsZSYmImZ1bm5lbCI9PT1sLnR5cGUpe2E9ITA7YnJlYWt9fWEmJihvKCJmdW5uZWxtb2RlIiksbygiZnVubmVsZ2FwIiwuMiksbygiZnVubmVsZ3JvdXBnYXAiKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDQ1fV0sMTA0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxzPXQoIi4uL2Jhci9wbG90IiksbD10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikuY2xlYXJNaW5UZXh0U2l6ZTtmdW5jdGlvbiBjKHQsZSxyLG4pe3ZhciBpPVtdLGE9W10sbz1uP2U6cixzPW4/cjplO3JldHVybiBpWzBdPW8uYzJwKHQuczAsITApLGFbMF09cy5jMnAodC5wMCwhMCksaVsxXT1vLmMycCh0LnMxLCEwKSxhWzFdPXMuYzJwKHQucDEsITApLGlbMl09by5jMnAodC5uZXh0UzAsITApLGFbMl09cy5jMnAodC5uZXh0UDAsITApLGlbM109by5jMnAodC5uZXh0UzEsITApLGFbM109cy5jMnAodC5uZXh0UDEsITApLG4/W2ksYV06W2EsaV19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe3ZhciBmPXQuX2Z1bGxMYXlvdXQ7bCgiZnVubmVsIixmKSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLHU9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSxmPXJbMF0udHJhY2UsaD1pLmVuc3VyZVNpbmdsZShzLCJnIiwicmVnaW9ucyIpO2lmKGYuY29ubmVjdG9yJiZmLmNvbm5lY3Rvci52aXNpYmxlKXt2YXIgcD0iaCI9PT1mLm9yaWVudGF0aW9uLGQ9aC5zZWxlY3RBbGwoImcucmVnaW9uIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicmVnaW9uIiwhMCksZC5leGl0KCkucmVtb3ZlKCk7dmFyIG09ZC5zaXplKCk7ZC5lYWNoKChmdW5jdGlvbihyLHMpe2lmKHM9PT1tLTF8fHIuY05leHQpe3ZhciBmPWMocixsLHUscCksaD1mWzBdLGQ9ZlsxXSxnPSIiO2hbMF0hPT1vJiZkWzBdIT09byYmaFsxXSE9PW8mJmRbMV0hPT1vJiZoWzJdIT09byYmZFsyXSE9PW8mJmhbM10hPT1vJiZkWzNdIT09byYmKGcrPXA/Ik0iK2hbMF0rIiwiK2RbMV0rIkwiK2hbMl0rIiwiK2RbMl0rIkgiK2hbM10rIkwiK2hbMV0rIiwiK2RbMV0rIloiOiJNIitoWzFdKyIsIitkWzFdKyJMIitoWzJdKyIsIitkWzNdKyJWIitkWzJdKyJMIitoWzFdKyIsIitkWzBdKyJaIiksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgaC5yZW1vdmUoKX0pKX0odCxlLHIsdSksZnVuY3Rpb24odCxlLHIsbyl7dmFyIHM9ZS54YXhpcyxsPWUueWF4aXM7aS5tYWtlVHJhY2VHcm91cHMobyxyLCJ0cmFjZSBiYXJzIikuZWFjaCgoZnVuY3Rpb24ocil7dmFyIG89bi5zZWxlY3QodGhpcyksdT1yWzBdLnRyYWNlLGY9aS5lbnN1cmVTaW5nbGUobywiZyIsImxpbmVzIik7aWYodS5jb25uZWN0b3ImJnUuY29ubmVjdG9yLnZpc2libGUmJnUuY29ubmVjdG9yLmxpbmUud2lkdGgpe3ZhciBoPSJoIj09PXUub3JpZW50YXRpb24scD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtwLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLHAuZXhpdCgpLnJlbW92ZSgpO3ZhciBkPXAuc2l6ZSgpO3AuZWFjaCgoZnVuY3Rpb24ocixvKXtpZihvPT09ZC0xfHxyLmNOZXh0KXt2YXIgdT1jKHIscyxsLGgpLGY9dVswXSxwPXVbMV0sbT0iIjt2b2lkIDAhPT1mWzNdJiZ2b2lkIDAhPT1wWzNdJiYoaD8obSs9Ik0iK2ZbMF0rIiwiK3BbMV0rIkwiK2ZbMl0rIiwiK3BbMl0sbSs9Ik0iK2ZbMV0rIiwiK3BbMV0rIkwiK2ZbM10rIiwiK3BbMl0pOihtKz0iTSIrZlsxXSsiLCIrcFsxXSsiTCIrZlsyXSsiLCIrcFszXSxtKz0iTSIrZlsxXSsiLCIrcFswXSsiTCIrZlsyXSsiLCIrcFsyXSkpLCIiPT09bSYmKG09Ik0wLDBaIiksaS5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInBhdGgiKS5hdHRyKCJkIixtKS5jYWxsKGEuc2V0Q2xpcFVybCxlLmxheWVyQ2xpcElkLHQpfX0pKX1lbHNlIGYucmVtb3ZlKCl9KSl9KHQsZSxyLHUpLHMucGxvdCh0LGUscix1LHttb2RlOmYuZnVubmVsbW9kZSxub3JtOmYuZnVubmVsbW9kZSxnYXA6Zi5mdW5uZWxnYXAsZ3JvdXBnYXA6Zi5mdW5uZWxncm91cGdhcH0pfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCJAcGxvdGx5L2QzIjo1OH1dLDEwNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIikuREVTRUxFQ1RESU0scz10KCIuLi9iYXIvc3R5bGUiKSxsPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0LGM9cy5zdHlsZVRleHRQb2ludHM7ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUscil7dmFyIHM9cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLmZ1bm5lbGxheWVyIikuc2VsZWN0QWxsKCJnLnRyYWNlIik7bCh0LHMsImZ1bm5lbCIpLHMuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcykscz1lWzBdLnRyYWNlO3Iuc2VsZWN0QWxsKCIucG9pbnQgPiBwYXRoIikuZWFjaCgoZnVuY3Rpb24odCl7aWYoIXQuaXNCbGFuayl7dmFyIGU9cy5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsdC5tY3x8ZS5jb2xvcikuY2FsbChhLnN0cm9rZSx0Lm1sY3x8ZS5saW5lLmNvbG9yKS5jYWxsKGkuZGFzaExpbmUsZS5saW5lLmRhc2gsdC5tbHd8fGUubGluZS53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLHMuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkP286MSl9fSkpLGMocixzLHQpLHIuc2VsZWN0QWxsKCIucmVnaW9ucyIpLmVhY2goKGZ1bmN0aW9uKCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIikuc3R5bGUoInN0cm9rZS13aWR0aCIsMCkuY2FsbChhLmZpbGwscy5jb25uZWN0b3IuZmlsbGNvbG9yKX0pKSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTA0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczpuLmxhYmVscyxsYWJlbDA6bi5sYWJlbDAsZGxhYmVsOm4uZGxhYmVsLHZhbHVlczpuLnZhbHVlcyxtYXJrZXI6e2NvbG9yczpuLm1hcmtlci5jb2xvcnMsbGluZTp7Y29sb3I6bCh7fSxuLm1hcmtlci5saW5lLmNvbG9yLHtkZmx0Om51bGx9KSx3aWR0aDpsKHt9LG4ubWFya2VyLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSx0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsc2NhbGVncm91cDpsKHt9LG4uc2NhbGVncm91cCx7fSksdGV4dGluZm86bCh7fSxuLnRleHRpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwicGVyY2VudCJdfSksdGV4dHRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYWJlbCIsImNvbG9yIiwidmFsdWUiLCJ0ZXh0IiwicGVyY2VudCJdfSksaG92ZXJpbmZvOmwoe30saS5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpvKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwidGV4dCIsInBlcmNlbnQiXX0pLHRleHRwb3NpdGlvbjpsKHt9LG4udGV4dHBvc2l0aW9uLHt2YWx1ZXM6WyJpbnNpZGUiLCJub25lIl0sZGZsdDoiaW5zaWRlIn0pLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCx0aXRsZTp7dGV4dDpuLnRpdGxlLnRleHQsZm9udDpuLnRpdGxlLmZvbnQscG9zaXRpb246bCh7fSxuLnRpdGxlLnBvc2l0aW9uLHt2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiXSxkZmx0OiJ0b3AgY2VudGVyIn0pLGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmEoe25hbWU6ImZ1bm5lbGFyZWEiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLGFzcGVjdHJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGJhc2VyYXRpbzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi4zMzMsZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3BpZS9hdHRyaWJ1dGVzIjoxMTY1fV0sMTA1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iZnVubmVsYXJlYSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTA1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvY2FsYyIpO2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sY3Jvc3NUcmFjZUNhbGM6ZnVuY3Rpb24odCl7bi5jcm9zc1RyYWNlQ2FsYyh0LHt0eXBlOiJmdW5uZWxhcmVhIn0pfX19LHsiLi4vcGllL2NhbGMiOjExNjd9XSwxMDUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi9waWUvZGVmYXVsdHMiKS5oYW5kbGVMYWJlbHNBbmRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgdT1jKCJsYWJlbHMiKSxmPWMoInZhbHVlcyIpLGg9cyh1LGYpLHA9aC5sZW47aWYoZS5faGFzTGFiZWxzPWguaGFzTGFiZWxzLGUuX2hhc1ZhbHVlcz1oLmhhc1ZhbHVlcywhZS5faGFzTGFiZWxzJiZlLl9oYXNWYWx1ZXMmJihjKCJsYWJlbDAiKSxjKCJkbGFiZWwiKSkscCl7ZS5fbGVuZ3RoPXAsYygibWFya2VyLmxpbmUud2lkdGgiKSYmYygibWFya2VyLmxpbmUuY29sb3IiLGwucGFwZXJfYmdjb2xvciksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgZCxtPWMoInRleHQiKSxnPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGd8fChkPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KG0pPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxnfHxkJiYibm9uZSIhPT1kKXt2YXIgdj1jKCJ0ZXh0cG9zaXRpb24iKTtvKHQsZSxsLGMsdix7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSl9YShlLGwsYyksYygidGl0bGUudGV4dCIpJiYoYygidGl0bGUucG9zaXRpb24iKSxuLmNvZXJjZUZvbnQoYywidGl0bGUuZm9udCIsbC5mb250KSksYygiYXNwZWN0cmF0aW8iKSxjKCJiYXNlcmF0aW8iKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi4vcGllL2RlZmF1bHRzIjoxMTY4LCIuL2F0dHJpYnV0ZXMiOjEwNDl9XSwxMDUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImZ1bm5lbGFyZWEiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwiZnVubmVsYXJlYSIsInNob3dMZWdlbmQiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuLi9waWUvc3R5bGVfb25lIiksbWV0YTp7fX19LHsiLi4vcGllL3N0eWxlX29uZSI6MTE3NiwiLi9hdHRyaWJ1dGVzIjoxMDQ5LCIuL2Jhc2VfcGxvdCI6MTA1MCwiLi9jYWxjIjoxMDUxLCIuL2RlZmF1bHRzIjoxMDUyLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMDU0LCIuL2xheW91dF9kZWZhdWx0cyI6MTA1NSwiLi9wbG90IjoxMDU2LCIuL3N0eWxlIjoxMDU3fV0sMTA1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9waWUvbGF5b3V0X2F0dHJpYnV0ZXMiKS5oaWRkZW5sYWJlbHM7ZS5leHBvcnRzPXtoaWRkZW5sYWJlbHM6bixmdW5uZWxhcmVhY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRmdW5uZWxhcmVhY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7Ii4uL3BpZS9sYXlvdXRfYXR0cmlidXRlcyI6MTE3Mn1dLDEwNTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcihyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXIoImhpZGRlbmxhYmVscyIpLHIoImZ1bm5lbGFyZWFjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kZnVubmVsYXJlYWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTA1NH1dLDEwNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYT10KCIuLi8uLi9saWIiKSxvPWEuc3RyU2NhbGUscz1hLnN0clRyYW5zbGF0ZSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsdT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IiksZj11LnJlY29yZE1pblRleHRTaXplLGg9dS5jbGVhck1pblRleHRTaXplLHA9dCgiLi4vcGllL2hlbHBlcnMiKSxkPXQoIi4uL3BpZS9wbG90IiksbT1kLmF0dGFjaEZ4SGFuZGxlcnMsZz1kLmRldGVybWluZUluc2lkZVRleHRGb250LHY9ZC5sYXlvdXRBcmVhcyx5PWQucHJlcmVuZGVyVGl0bGVzLHg9ZC5wb3NpdGlvblRpdGxlT3V0c2lkZSxiPWQuZm9ybWF0U2xpY2VMYWJlbDtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuImwiKyhlWzBdLXRbMF0pKyIsIisoZVsxXS10WzFdKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2goImZ1bm5lbGFyZWEiLHIpLHkoZSx0KSx2KGUsci5fc2l6ZSksYS5tYWtlVHJhY2VHcm91cHMoci5fZnVubmVsYXJlYWxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHU9bi5zZWxlY3QodGhpcyksaD1lWzBdLGQ9aC50cmFjZTshZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybjt2YXIgZT10WzBdLHI9ZS50cmFjZSxuPXIuYXNwZWN0cmF0aW8saT1yLmJhc2VyYXRpbztpPi45OTkmJihpPS45OTkpO3ZhciBhLG89TWF0aC5wb3coaSwyKSxzPWUudlRvdGFsLGw9cyxjPXMqby8oMS1vKS9zO2Z1bmN0aW9uIHUoKXt2YXIgdCxlPXt4OnQ9TWF0aC5zcXJ0KGMpLHk6LXR9O3JldHVybltlLngsZS55XX12YXIgZixoLHA9W107Zm9yKHAucHVzaCh1KCkpLGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgZD1oLnYvbDtjKz1kLHAucHVzaCh1KCkpfXZhciBtPTEvMCxnPS0xLzA7Zm9yKGY9MDtmPHAubGVuZ3RoO2YrKylhPXBbZl0sbT1NYXRoLm1pbihtLGFbMV0pLGc9TWF0aC5tYXgoZyxhWzFdKTtmb3IoZj0wO2Y8cC5sZW5ndGg7ZisrKXBbZl1bMV0tPShnK20pLzI7dmFyIHY9cFtwLmxlbmd0aC0xXVswXSx5PWUucix4PShnLW0pLzIsYj15L3YsXz15L3gqbjtmb3IoZS5yPV8qeCxmPTA7ZjxwLmxlbmd0aDtmKyspcFtmXVswXSo9YixwW2ZdWzFdKj1fO3ZhciB3PVstKGE9cFswXSlbMF0sYVsxXV0sVD1bYVswXSxhWzFdXSxrPTA7Zm9yKGY9dC5sZW5ndGgtMTtmPi0xO2YtLSlpZighKGg9dFtmXSkuaGlkZGVuKXt2YXIgQT1wW2srPTFdWzBdLE09cFtrXVsxXTtoLlRMPVstQSxNXSxoLlRSPVtBLE1dLGguQkw9dyxoLkJSPVQsaC5weG1pZD0oUz1oLlRSLEU9aC5CUixbLjUqKFNbMF0rRVswXSksLjUqKFNbMV0rRVsxXSldKSx3PWguVEwsVD1oLlRSfXZhciBTLEV9KGUpLHUuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdT1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuc2xpY2UiKS5kYXRhKGUpO3UuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLHUuZXhpdCgpLnJlbW92ZSgpLHUuZWFjaCgoZnVuY3Rpb24obyxzKXtpZihvLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7by5wb2ludE51bWJlcj1vLmksby5jdXJ2ZU51bWJlcj1kLmluZGV4O3ZhciB1PWguY3gsdj1oLmN5LHk9bi5zZWxlY3QodGhpcykseD15LnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZGF0YShbb10pO3guZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJzdXJmYWNlIiwhMCkuc3R5bGUoeyJwb2ludGVyLWV2ZW50cyI6ImFsbCJ9KSx5LmNhbGwobSx0LGUpO3ZhciB3PSJNIisodStvLlRSWzBdKSsiLCIrKHYrby5UUlsxXSkrXyhvLlRSLG8uQlIpK18oby5CUixvLkJMKStfKG8uQkwsby5UTCkrIloiO3guYXR0cigiZCIsdyksYih0LG8saCk7dmFyIFQ9cC5jYXN0T3B0aW9uKGQudGV4dHBvc2l0aW9uLG8ucHRzKSxrPXkuc2VsZWN0QWxsKCJnLnNsaWNldGV4dCIpLmRhdGEoby50ZXh0JiYibm9uZSIhPT1UP1swXTpbXSk7ay5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLGsuZXhpdCgpLnJlbW92ZSgpLGsuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaD1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSkscD1hLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGcoZCxvLHIuZm9udCkpO2gudGV4dChvLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChpLmZvbnQscCkuY2FsbChsLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgbSx5LHgsYj1pLmJCb3goaC5ub2RlKCkpLF89TWF0aC5taW4oby5CTFsxXSxvLkJSWzFdKSt2LHc9TWF0aC5tYXgoby5UTFsxXSxvLlRSWzFdKSt2O3k9TWF0aC5tYXgoby5UTFswXSxvLkJMWzBdKSt1LHg9TWF0aC5taW4oby5UUlswXSxvLkJSWzBdKSt1LChtPWMoeSx4LF8sdyxiLHtpc0hvcml6b250YWw6ITAsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6Im1pZGRsZSJ9KSkuZm9udFNpemU9cC5zaXplLGYoZC50eXBlLG0sciksZVtzXS50cmFuc2Zvcm09bSxoLmF0dHIoInRyYW5zZm9ybSIsYS5nZXRUZXh0VHJhbnNmb3JtKG0pKX0pKX19KSk7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnRpdGxldGV4dCIpLmRhdGEoZC50aXRsZS50ZXh0P1swXTpbXSk7di5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRpdGxldGV4dCIsITApLHYuZXhpdCgpLnJlbW92ZSgpLHYuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1hLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksYz1kLnRpdGxlLnRleHQ7ZC5fbWV0YSYmKGM9YS50ZW1wbGF0ZVN0cmluZyhjLGQuX21ldGEpKSxlLnRleHQoYykuYXR0cih7Y2xhc3M6InRpdGxldGV4dCIsdHJhbnNmb3JtOiIiLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9KS5jYWxsKGkuZm9udCxkLnRpdGxlLmZvbnQpLmNhbGwobC5jb252ZXJ0VG9Uc3BhbnMsdCk7dmFyIHU9eChoLHIuX3NpemUpO2UuYXR0cigidHJhbnNmb3JtIixzKHUueCx1LnkpK28oTWF0aC5taW4oMSx1LnNjYWxlKSkrcyh1LnR4LHUudHkpKX0pKX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9waWUvaGVscGVycyI6MTE3MCwiLi4vcGllL3Bsb3QiOjExNzQsIkBwbG90bHkvZDMiOjU4fV0sMTA1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi9waWUvc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fZnVubmVsYXJlYWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7YSh0LGUsImZ1bm5lbGFyZWEiKSxlLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXRbMF0udHJhY2Uscj1uLnNlbGVjdCh0aGlzKTtyLnN0eWxlKHtvcGFjaXR5OmUub3BhY2l0eX0pLHIuc2VsZWN0QWxsKCJwYXRoLnN1cmZhY2UiKS5lYWNoKChmdW5jdGlvbih0KXtuLnNlbGVjdCh0aGlzKS5jYWxsKGksdCxlKX0pKX0pKX19LHsiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9waWUvc3R5bGVfb25lIjoxMTc2LCJAcGxvdGx5L2QzIjo1OH1dLDEwNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3o6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seDpsKHt9LG4ueCx7aW1wbGllZEVkaXRzOnt4dHlwZToiYXJyYXkifX0pLHgwOmwoe30sbi54MCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSxkeDpsKHt9LG4uZHgse2ltcGxpZWRFZGl0czp7eHR5cGU6InNjYWxlZCJ9fSkseTpsKHt9LG4ueSx7aW1wbGllZEVkaXRzOnt5dHlwZToiYXJyYXkifX0pLHkwOmwoe30sbi55MCx7aW1wbGllZEVkaXRzOnt5dHlwZToic2NhbGVkIn19KSxkeTpsKHt9LG4uZHkse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZDpsKHt9LG4ueHBlcmlvZCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kOmwoe30sbi55cGVyaW9kLHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHhwZXJpb2QwOmwoe30sbi54cGVyaW9kMCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kMDpsKHt9LG4ueXBlcmlvZDAse2ltcGxpZWRFZGl0czp7eXR5cGU6InNjYWxlZCJ9fSkseHBlcmlvZGFsaWdubWVudDpsKHt9LG4ueHBlcmlvZGFsaWdubWVudCx7aW1wbGllZEVkaXRzOnt4dHlwZToic2NhbGVkIn19KSx5cGVyaW9kYWxpZ25tZW50Omwoe30sbi55cGVyaW9kYWxpZ25tZW50LHtpbXBsaWVkRWRpdHM6e3l0eXBlOiJzY2FsZWQifX0pLHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRyYW5zcG9zZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LHh0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhcnJheSIsInNjYWxlZCJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seXR5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImFycmF5Iiwic2NhbGVkIl0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwiYmVzdCIsITFdLGRmbHQ6ITEsZWRpdFR5cGU6ImNhbGMifSxob3Zlcm9uZ2Fwczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToibm9uZSJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixlZGl0VHlwZToiY2FsYyJ9LHhnYXA6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDowLG1pbjowLGVkaXRUeXBlOiJwbG90In0seWdhcDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsbWluOjAsZWRpdFR5cGU6InBsb3QifSx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksemhvdmVyZm9ybWF0OmEoInoiLDEpLGhvdmVydGVtcGxhdGU6bygpLHNob3dsZWdlbmQ6bCh7fSxpLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0se3RyYW5zZm9ybXM6dm9pZCAwfSxzKCIiLHtjTGV0dGVyOiJ6IixhdXRvQ29sb3JEZmx0OiExfSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MX1dLDEwNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxzPXQoIi4uL2hpc3RvZ3JhbTJkL2NhbGMiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIiksYz10KCIuL2NvbnZlcnRfY29sdW1uX3h5eiIpLHU9dCgiLi9jbGVhbl8yZF9hcnJheSIpLGY9dCgiLi9pbnRlcnAyZCIpLGg9dCgiLi9maW5kX2VtcHRpZXMiKSxwPXQoIi4vbWFrZV9ib3VuZF9hcnJheSIpLGQ9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBtKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKXt2YXIgaT10W25dO2khPT1kJiZlLnB1c2goaSl9cmV0dXJuIGV9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsZyx2LHkseCxiLF8sdyxULGssQSxNPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxTPWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxFPW4udHJhY2VJcyhlLCJjb250b3VyIiksTD1uLnRyYWNlSXMoZSwiaGlzdG9ncmFtIiksQz1uLnRyYWNlSXMoZSwiZ2wyZCIpLFA9RT8iYmVzdCI6ZS56c21vb3RoO2lmKE0uX21pbkR0aWNrPTAsUy5fbWluRHRpY2s9MCxMKXk9KEE9cyh0LGUpKS5vcmlnX3gscj1BLngsZz1BLngwLHY9QS5keCx3PUEub3JpZ195LHg9QS55LGI9QS55MCxfPUEuZHksVD1BLno7ZWxzZXt2YXIgST1lLno7aS5pc0FycmF5MUQoSSk/KGMoZSxNLFMsIngiLCJ5IixbInoiXSkscj1lLl94LHg9ZS5feSxJPWUuX3opOih5PWUueD9NLm1ha2VDYWxjZGF0YShlLCJ4Iik6W10sdz1lLnk/Uy5tYWtlQ2FsY2RhdGEoZSwieSIpOltdLHI9byhlLE0sIngiLHkpLnZhbHMseD1vKGUsUywieSIsdykudmFscyxlLl94PXIsZS5feT14KSxnPWUueDAsdj1lLmR4LGI9ZS55MCxfPWUuZHksVD11KEksZSxNLFMpfWZ1bmN0aW9uIE8odCl7UD1lLl9pbnB1dC56c21vb3RoPWUuenNtb290aD0hMSxpLndhcm4oJ2Nhbm5vdCB1c2UgenNtb290aDogImZhc3QiOiAnK3QpfWlmKChNLnJhbmdlYnJlYWtzfHxTLnJhbmdlYnJlYWtzKSYmKFQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPS0xLGE9MDthPHIubGVuZ3RoO2ErKylpZihlW2FdIT09ZCl7aSsrLG5baV09W107Zm9yKHZhciBvPTA7bzxyW2FdLmxlbmd0aDtvKyspdFtvXSE9PWQmJm5baV0ucHVzaChyW2FdW29dKX1yZXR1cm4gbn0ocix4LFQpLEx8fChyPW0ocikseD1tKHgpLGUuX3g9cixlLl95PXgpKSxMfHwhRSYmIWUuY29ubmVjdGdhcHN8fChlLl9lbXB0eXBvaW50cz1oKFQpLGYoVCxlLl9lbXB0eXBvaW50cykpLCJmYXN0Ij09PVApaWYoImxvZyI9PT1NLnR5cGV8fCJsb2ciPT09Uy50eXBlKU8oImxvZyBheGlzIGZvdW5kIik7ZWxzZSBpZighTCl7aWYoci5sZW5ndGgpe3ZhciB6PShyW3IubGVuZ3RoLTFdLXJbMF0pLyhyLmxlbmd0aC0xKSxEPU1hdGguYWJzKHovMTAwKTtmb3Ioaz0wO2s8ci5sZW5ndGgtMTtrKyspaWYoTWF0aC5hYnMocltrKzFdLXJba10teik+RCl7TygieCBzY2FsZSBpcyBub3QgbGluZWFyIik7YnJlYWt9fWlmKHgubGVuZ3RoJiYiZmFzdCI9PT1QKXt2YXIgUj0oeFt4Lmxlbmd0aC0xXS14WzBdKS8oeC5sZW5ndGgtMSksRj1NYXRoLmFicyhSLzEwMCk7Zm9yKGs9MDtrPHgubGVuZ3RoLTE7aysrKWlmKE1hdGguYWJzKHhbaysxXS14W2tdLVIpPkYpe08oInkgc2NhbGUgaXMgbm90IGxpbmVhciIpO2JyZWFrfX19dmFyIEI9aS5tYXhSb3dMZW5ndGgoVCksTj0ic2NhbGVkIj09PWUueHR5cGU/IiI6cixqPXAoZSxOLGcsdixCLE0pLFU9InNjYWxlZCI9PT1lLnl0eXBlPyIiOngsVj1wKGUsVSxiLF8sVC5sZW5ndGgsUyk7Q3x8KGUuX2V4dHJlbWVzW00uX2lkXT1hLmZpbmRFeHRyZW1lcyhNLGopLGUuX2V4dHJlbWVzW1MuX2lkXT1hLmZpbmRFeHRyZW1lcyhTLFYpKTt2YXIgSD17eDpqLHk6Vix6OlQsdGV4dDplLl90ZXh0fHxlLnRleHQsaG92ZXJ0ZXh0OmUuX2hvdmVydGV4dHx8ZS5ob3ZlcnRleHR9O2lmKGUueHBlcmlvZGFsaWdubWVudCYmeSYmKEgub3JpZ194PXkpLGUueXBlcmlvZGFsaWdubWVudCYmdyYmKEgub3JpZ195PXcpLE4mJk4ubGVuZ3RoPT09ai5sZW5ndGgtMSYmKEgueENlbnRlcj1OKSxVJiZVLmxlbmd0aD09PVYubGVuZ3RoLTEmJihILnlDZW50ZXI9VSksTCYmKEgueFJhbmdlcz1BLnhSYW5nZXMsSC55UmFuZ2VzPUEueVJhbmdlcyxILnB0cz1BLnB0cyksRXx8bCh0LGUse3ZhbHM6VCxjTGV0dGVyOiJ6In0pLEUmJmUuY29udG91cnMmJiJoZWF0bWFwIj09PWUuY29udG91cnMuY29sb3Jpbmcpe3ZhciBxPXt0eXBlOiJjb250b3VyIj09PWUudHlwZT8iaGVhdG1hcCI6Imhpc3RvZ3JhbTJkIix4Y2FsZW5kYXI6ZS54Y2FsZW5kYXIseWNhbGVuZGFyOmUueWNhbGVuZGFyfTtILnhmaWxsPXAocSxOLGcsdixCLE0pLEgueWZpbGw9cChxLFUsYixfLFQubGVuZ3RoLFMpfXJldHVybltIXX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9oaXN0b2dyYW0yZC9jYWxjIjoxMDkxLCIuL2NsZWFuXzJkX2FycmF5IjoxMDYwLCIuL2NvbnZlcnRfY29sdW1uX3h5eiI6MTA2MiwiLi9maW5kX2VtcHRpZXMiOjEwNjQsIi4vaW50ZXJwMmQiOjEwNjcsIi4vbWFrZV9ib3VuZF9hcnJheSI6MTA2OH1dLDEwNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHMsbCxjLHUsZixoO2Z1bmN0aW9uIHAodCl7aWYobih0KSlyZXR1cm4rdH1pZihlJiZlLnRyYW5zcG9zZSl7Zm9yKHM9MCxmPTA7Zjx0Lmxlbmd0aDtmKyspcz1NYXRoLm1heChzLHRbZl0ubGVuZ3RoKTtpZigwPT09cylyZXR1cm4hMTtjPWZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aH0sdT1mdW5jdGlvbih0LGUscil7cmV0dXJuKHRbcl18fFtdKVtlXX19ZWxzZSBzPXQubGVuZ3RoLGM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdFtlXS5sZW5ndGh9LHU9ZnVuY3Rpb24odCxlLHIpe3JldHVybih0W2VdfHxbXSlbcl19O3ZhciBkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZT09PWF8fHI9PT1hP2E6dSh0LGUscil9O2Z1bmN0aW9uIG0odCl7aWYoZSYmImNhcnBldCIhPT1lLnR5cGUmJiJjb250b3VyY2FycGV0IiE9PWUudHlwZSYmdCYmImNhdGVnb3J5Ij09PXQudHlwZSYmZVsiXyIrdC5faWQuY2hhckF0KDApXS5sZW5ndGgpe3ZhciByPXQuX2lkLmNoYXJBdCgwKSxuPXt9LG89ZVsiXyIrcisiQ2F0ZWdvcnlNYXAiXXx8ZVtyXTtmb3IoZj0wO2Y8by5sZW5ndGg7ZisrKW5bb1tmXV09ZjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI9blt0Ll9jYXRlZ29yaWVzW2VdXTtyZXR1cm4gcisxP3I6YX19cmV0dXJuIGkuaWRlbnRpdHl9dmFyIGc9bShyKSx2PW0obyk7byYmImNhdGVnb3J5Ij09PW8udHlwZSYmKHM9by5fY2F0ZWdvcmllcy5sZW5ndGgpO3ZhciB5PW5ldyBBcnJheShzKTtmb3IoZj0wO2Y8cztmKyspZm9yKGw9ciYmImNhdGVnb3J5Ij09PXIudHlwZT9yLl9jYXRlZ29yaWVzLmxlbmd0aDpjKHQsZikseVtmXT1uZXcgQXJyYXkobCksaD0wO2g8bDtoKyspeVtmXVtoXT1wKGQodCx2KGYpLGcoaCkpKTtyZXR1cm4geX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEwNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttaW46InptaW4iLG1heDoiem1heCJ9fSx7fV0sMTA2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8scyxsKXt2YXIgYz10Ll9sZW5ndGgsdT1lLm1ha2VDYWxjZGF0YSh0LG8pLGY9ci5tYWtlQ2FsY2RhdGEodCxzKTt1PWEodCxlLG8sdSkudmFscyxmPWEodCxyLHMsZikudmFsczt2YXIgaCxwLGQsbSxnPXQudGV4dCx2PXZvaWQgMCE9PWcmJm4uaXNBcnJheTFEKGcpLHk9dC5ob3ZlcnRleHQseD12b2lkIDAhPT15JiZuLmlzQXJyYXkxRCh5KSxiPW4uZGlzdGluY3RWYWxzKHUpLF89Yi52YWxzLHc9bi5kaXN0aW5jdFZhbHMoZiksVD13LnZhbHMsaz1bXSxBPVQubGVuZ3RoLE09Xy5sZW5ndGg7Zm9yKGg9MDtoPGwubGVuZ3RoO2grKylrW2hdPW4uaW5pdDJkQXJyYXkoQSxNKTt2JiYoZD1uLmluaXQyZEFycmF5KEEsTSkpLHgmJihtPW4uaW5pdDJkQXJyYXkoQSxNKSk7dmFyIFM9bi5pbml0MmRBcnJheShBLE0pO2ZvcihoPTA7aDxjO2grKylpZih1W2hdIT09aSYmZltoXSE9PWkpe3ZhciBFPW4uZmluZEJpbih1W2hdK2IubWluRGlmZi8yLF8pLEw9bi5maW5kQmluKGZbaF0rdy5taW5EaWZmLzIsVCk7Zm9yKHA9MDtwPGwubGVuZ3RoO3ArKyl7dmFyIEM9dFtsW3BdXTtrW3BdW0xdW0VdPUNbaF0sU1tMXVtFXT1ofXYmJihkW0xdW0VdPWdbaF0pLHgmJihtW0xdW0VdPXlbaF0pfWZvcih0WyJfIitvXT1fLHRbIl8iK3NdPVQscD0wO3A8bC5sZW5ndGg7cCsrKXRbIl8iK2xbcF1dPWtbcF07diYmKHQuX3RleHQ9ZCkseCYmKHQuX2hvdmVydGV4dD1tKSxlJiYiY2F0ZWdvcnkiPT09ZS50eXBlJiYodFsiXyIrbysiQ2F0ZWdvcnlNYXAiXT1fLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2NhdGVnb3JpZXNbdF19KSkpLHImJiJjYXRlZ29yeSI9PT1yLnR5cGUmJih0WyJfIitzKyJDYXRlZ29yeU1hcCJdPVQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gci5fY2F0ZWdvcmllc1t0XX0pKSksdC5fYWZ0ZXIyYmVmb3JlPVN9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNH1dLDEwNjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLGw9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGwscixpKX1pKHQsZSx1LGMpPyhhKHQsZSxjLHUpLHUoInhob3ZlcmZvcm1hdCIpLHUoInlob3ZlcmZvcm1hdCIpLHUoInRleHQiKSx1KCJob3ZlcnRleHQiKSx1KCJob3ZlcnRlbXBsYXRlIiksbyh0LGUsdSxjKSx1KCJob3Zlcm9uZ2FwcyIpLHUoImNvbm5lY3RnYXBzIixuLmlzQXJyYXkxRChlLnopJiYhMSE9PWUuenNtb290aCkscyh0LGUsYyx1LHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIjoxMjExLCIuL2F0dHJpYnV0ZXMiOjEwNTgsIi4vc3R5bGVfZGVmYXVsdHMiOjEwNzEsIi4veHl6X2RlZmF1bHRzIjoxMDcyfV0sMTA2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGg7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxhLG8scyxsLGMsdT1bXSxmPXt9LGg9W10scD10WzBdLGQ9W10sbT1bMCwwLDBdLGc9bih0KTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWZvcihlPWQsZD1wLHA9dFtyKzFdfHxbXSxpPTA7aTxnO2krKyl2b2lkIDA9PT1kW2ldJiYoKHM9KHZvaWQgMCE9PWRbaS0xXT8xOjApKyh2b2lkIDAhPT1kW2krMV0/MTowKSsodm9pZCAwIT09ZVtpXT8xOjApKyh2b2lkIDAhPT1wW2ldPzE6MCkpPygwPT09ciYmcysrLDA9PT1pJiZzKysscj09PXQubGVuZ3RoLTEmJnMrKyxpPT09ZC5sZW5ndGgtMSYmcysrLHM8NCYmKGZbW3IsaV1dPVtyLGksc10pLHUucHVzaChbcixpLHNdKSk6aC5wdXNoKFtyLGldKSk7Zm9yKDtoLmxlbmd0aDspe2ZvcihsPXt9LGM9ITEsbz1oLmxlbmd0aC0xO28+PTA7by0tKShzPSgoZltbKHI9KGE9aFtvXSlbMF0pLTEsaT1hWzFdXV18fG0pWzJdKyhmW1tyKzEsaV1dfHxtKVsyXSsoZltbcixpLTFdXXx8bSlbMl0rKGZbW3IsaSsxXV18fG0pWzJdKS8yMCkmJihsW2FdPVtyLGksc10saC5zcGxpY2UobywxKSxjPSEwKTtpZighYyl0aHJvdyJmaW5kRW1wdGllcyBpdGVyYXRlZCB3aXRoIG5vIG5ldyBuZWlnaGJvcnMiO2ZvcihhIGluIGwpZlthXT1sW2FdLHUucHVzaChsW2FdKX1yZXR1cm4gdS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlWzJdLXRbMl19KSl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTA2NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsKXtsfHwobD17fSk7dmFyIGMsdSxmLGgscD1sLmlzQ29udG91cixkPXQuY2RbMF0sbT1kLnRyYWNlLGc9dC54YSx2PXQueWEseT1kLngseD1kLnksYj1kLnosXz1kLnhDZW50ZXIsdz1kLnlDZW50ZXIsVD1kLnptYXNrLGs9bS56aG92ZXJmb3JtYXQsQT15LE09eDtpZighMSE9PXQuaW5kZXgpe3RyeXtmPU1hdGgucm91bmQodC5pbmRleFsxXSksaD1NYXRoLnJvdW5kKHQuaW5kZXhbMF0pfWNhdGNoKGUpe3JldHVybiB2b2lkIGkuZXJyb3IoIkVycm9yIGhvdmVyaW5nIG9uIGhlYXRtYXAsIHBvaW50TnVtYmVyIG11c3QgYmUgW3Jvdyxjb2xdLCBmb3VuZDoiLHQuaW5kZXgpfWlmKGY8MHx8Zj49YlswXS5sZW5ndGh8fGg8MHx8aD5iLmxlbmd0aClyZXR1cm59ZWxzZXtpZihuLmluYm94KGUteVswXSxlLXlbeS5sZW5ndGgtMV0sMCk+MHx8bi5pbmJveChyLXhbMF0sci14W3gubGVuZ3RoLTFdLDApPjApcmV0dXJuO2lmKHApe3ZhciBTO2ZvcihBPVsyKnlbMF0teVsxXV0sUz0xO1M8eS5sZW5ndGg7UysrKUEucHVzaCgoeVtTXSt5W1MtMV0pLzIpO2ZvcihBLnB1c2goWzIqeVt5Lmxlbmd0aC0xXS15W3kubGVuZ3RoLTJdXSksTT1bMip4WzBdLXhbMV1dLFM9MTtTPHgubGVuZ3RoO1MrKylNLnB1c2goKHhbU10reFtTLTFdKS8yKTtNLnB1c2goWzIqeFt4Lmxlbmd0aC0xXS14W3gubGVuZ3RoLTJdXSl9Zj1NYXRoLm1heCgwLE1hdGgubWluKEEubGVuZ3RoLTIsaS5maW5kQmluKGUsQSkpKSxoPU1hdGgubWF4KDAsTWF0aC5taW4oTS5sZW5ndGgtMixpLmZpbmRCaW4ocixNKSkpfXZhciBFLEwsQz1nLmMycCh5W2ZdKSxQPWcuYzJwKHlbZisxXSksST12LmMycCh4W2hdKSxPPXYuYzJwKHhbaCsxXSk7cD8oRT1kLm9yaWdfeHx8eSxMPWQub3JpZ195fHx4LFA9QyxjPUVbZl0sTz1JLHU9TFtoXSk6KEU9ZC5vcmlnX3h8fF98fHksTD1kLm9yaWdfeXx8d3x8eCxjPV8/RVtmXTooRVtmXStFW2YrMV0pLzIsdT13P0xbaF06KExbaF0rTFtoKzFdKS8yLGcmJiJjYXRlZ29yeSI9PT1nLnR5cGUmJihjPXlbZl0pLHYmJiJjYXRlZ29yeSI9PT12LnR5cGUmJih1PXhbaF0pLG0uenNtb290aCYmKEM9UD1nLmMycChjKSxJPU89di5jMnAodSkpKTt2YXIgej1iW2hdW2ZdO2lmKFQmJiFUW2hdW2ZdJiYoej12b2lkIDApLHZvaWQgMCE9PXp8fG0uaG92ZXJvbmdhcHMpe3ZhciBEO0FycmF5LmlzQXJyYXkoZC5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KGQuaG92ZXJ0ZXh0W2hdKT9EPWQuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkoZC50ZXh0KSYmQXJyYXkuaXNBcnJheShkLnRleHRbaF0pJiYoRD1kLnRleHRbaF1bZl0pO3ZhciBSPW8obSksRj17dHlwZToibGluZWFyIixyYW5nZTpbUi5taW4sUi5tYXhdLGhvdmVyZm9ybWF0OmssX3NlcGFyYXRvcnM6Zy5fc2VwYXJhdG9ycyxfbnVtRm9ybWF0OmcuX251bUZvcm1hdH0sQj1hLnRpY2tUZXh0KEYseiwiaG92ZXIiKS50ZXh0O3JldHVybltpLmV4dGVuZEZsYXQodCx7aW5kZXg6bS5fYWZ0ZXIyYmVmb3JlP20uX2FmdGVyMmJlZm9yZVtoXVtmXTpbaCxmXSxkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2Usc3Bpa2VEaXN0YW5jZTp0Lm1heFNwaWtlRGlzdGFuY2UseDA6Qyx4MTpQLHkwOkkseTE6Tyx4TGFiZWxWYWw6Yyx5TGFiZWxWYWw6dSx6TGFiZWxWYWw6eix6TGFiZWw6Qix0ZXh0OkR9KV19fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyN31dLDEwNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksY29sb3JiYXI6dCgiLi9jb2xvcmJhciIpLHN0eWxlOnQoIi4vc3R5bGUiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6ImhlYXRtYXAiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMDU4LCIuL2NhbGMiOjEwNTksIi4vY29sb3JiYXIiOjEwNjEsIi4vZGVmYXVsdHMiOjEwNjMsIi4vaG92ZXIiOjEwNjUsIi4vcGxvdCI6MTA2OSwiLi9zdHlsZSI6MTA3MH1dLDEwNjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT1bWy0xLDBdLFsxLDBdLFswLC0xXSxbMCwxXV07ZnVuY3Rpb24gYSh0KXtyZXR1cm4uNS0uMjUqTWF0aC5taW4oMSwuNSp0KX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbixhLG8scyxsLGMsdSxmLGgscCxkLG0sZyx2PTA7Zm9yKHM9MDtzPGUubGVuZ3RoO3MrKyl7Zm9yKGE9KG49ZVtzXSlbMF0sbz1uWzFdLGQ9dFthXVtvXSxwPTAsaD0wLGw9MDtsPDQ7bCsrKSh1PXRbYSsoYz1pW2xdKVswXV0pJiZ2b2lkIDAhPT0oZj11W28rY1sxXV0pJiYoMD09PXA/bT1nPWY6KG09TWF0aC5taW4obSxmKSxnPU1hdGgubWF4KGcsZikpLGgrKyxwKz1mKTtpZigwPT09aCl0aHJvdyJpdGVyYXRlSW50ZXJwMmQgb3JkZXIgaXMgd3Jvbmc6IG5vIGRlZmluZWQgbmVpZ2hib3JzIjt0W2FdW29dPXAvaCx2b2lkIDA9PT1kP2g8NCYmKHY9MSk6KHRbYV1bb109KDErcikqdFthXVtvXS1yKmQsZz5tJiYodj1NYXRoLm1heCh2LE1hdGguYWJzKHRbYV1bb10tZCkvKGctbSkpKSl9cmV0dXJuIHZ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaT0xO2ZvcihvKHQsZSkscj0wO3I8ZS5sZW5ndGgmJiEoZVtyXVsyXTw0KTtyKyspO2ZvcihlPWUuc2xpY2Uocikscj0wO3I8MTAwJiZpPi4wMTtyKyspaT1vKHQsZSxhKGkpKTtyZXR1cm4gaT4uMDEmJm4ubG9nKCJpbnRlcnAyZCBkaWRuJ3QgY29udmVyZ2UgcXVpY2tseSIsaSksdH19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMDY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8scyl7dmFyIGwsYyx1LGY9W10saD1uLnRyYWNlSXModCwiY29udG91ciIpLHA9bi50cmFjZUlzKHQsImhpc3RvZ3JhbSIpLGQ9bi50cmFjZUlzKHQsImdsMmQiKTtpZihpKGUpJiZlLmxlbmd0aD4xJiYhcCYmImNhdGVnb3J5IiE9PXMudHlwZSl7dmFyIG09ZS5sZW5ndGg7aWYoIShtPD1vKSlyZXR1cm4gaD9lLnNsaWNlKDAsbyk6ZS5zbGljZSgwLG8rMSk7aWYoaHx8ZClmPWUuc2xpY2UoMCxvKTtlbHNlIGlmKDE9PT1vKWY9W2VbMF0tLjUsZVswXSsuNV07ZWxzZXtmb3IoZj1bMS41KmVbMF0tLjUqZVsxXV0sdT0xO3U8bTt1KyspZi5wdXNoKC41KihlW3UtMV0rZVt1XSkpO2YucHVzaCgxLjUqZVttLTFdLS41KmVbbS0yXSl9aWYobTxvKXt2YXIgZz1mW2YubGVuZ3RoLTFdLHY9Zy1mW2YubGVuZ3RoLTJdO2Zvcih1PW07dTxvO3UrKylnKz12LGYucHVzaChnKX19ZWxzZXt2YXIgeT10W3MuX2lkLmNoYXJBdCgwKSsiY2FsZW5kYXIiXTtpZihwKWw9cy5yMmMociwwLHkpO2Vsc2UgaWYoaShlKSYmMT09PWUubGVuZ3RoKWw9ZVswXTtlbHNlIGlmKHZvaWQgMD09PXIpbD0wO2Vsc2V7bD0oImxvZyI9PT1zLnR5cGU/cy5kMmM6cy5yMmMpKHIsMCx5KX1mb3IoYz1hfHwxLHU9aHx8ZD8wOi0uNTt1PG87dSsrKWYucHVzaChsK2MqdSl9cmV0dXJuIGZ9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0fV0sMTA2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJ0aW55Y29sb3IyIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi4vLi4vbGliIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UsbD10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO2Z1bmN0aW9uIGModCxlKXt2YXIgcj1lLmxlbmd0aC0yLG49by5jb25zdHJhaW4oby5maW5kQmluKHQsZSksMCxyKSxpPWVbbl0sYT1lW24rMV0scz1vLmNvbnN0cmFpbihuKyh0LWkpLyhhLWkpLS41LDAsciksbD1NYXRoLnJvdW5kKHMpLGM9TWF0aC5hYnMocy1sKTtyZXR1cm4gcyYmcyE9PXImJmM/e2JpbjA6bCxmcmFjOmMsYmluMTpNYXRoLnJvdW5kKGwrYy8ocy1sKSl9OntiaW4wOmwsYmluMTpsLGZyYWM6MH19ZnVuY3Rpb24gdSh0LGUpe3ZhciByPWUubGVuZ3RoLTEsbj1vLmNvbnN0cmFpbihvLmZpbmRCaW4odCxlKSwwLHIpLGk9ZVtuXSxhPSh0LWkpLyhlW24rMV0taSl8fDA7cmV0dXJuIGE8PTA/e2JpbjA6bixiaW4xOm4sZnJhYzowfTphPC41P3tiaW4wOm4sYmluMTpuKzEsZnJhYzphfTp7YmluMDpuKzEsYmluMTpuLGZyYWM6MS1hfX1mdW5jdGlvbiBmKHQsZSxyKXt0W2VdPXJbMF0sdFtlKzFdPXJbMV0sdFtlKzJdPXJbMl0sdFtlKzNdPU1hdGgucm91bmQoMjU1KnJbM10pfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXt2YXIgcD1lLnhheGlzLGQ9ZS55YXhpcztvLm1ha2VUcmFjZUdyb3VwcyhoLHIsImhtIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHIsaCxtLGcsdix5LHg9bi5zZWxlY3QodGhpcyksYj1lWzBdLF89Yi50cmFjZSx3PWIueixUPWIueCxrPWIueSxBPWIueENlbnRlcixNPWIueUNlbnRlcixTPWEudHJhY2VJcyhfLCJjb250b3VyIiksRT1TPyJiZXN0IjpfLnpzbW9vdGgsTD13Lmxlbmd0aCxDPW8ubWF4Um93TGVuZ3RoKHcpLFA9ITEsST0hMTtmb3IoeT0wO3ZvaWQgMD09PXImJnk8VC5sZW5ndGgtMTspcj1wLmMycChUW3ldKSx5Kys7Zm9yKHk9VC5sZW5ndGgtMTt2b2lkIDA9PT1oJiZ5PjA7KWg9cC5jMnAoVFt5XSkseS0tO2ZvcihoPHImJihtPWgsaD1yLHI9bSxQPSEwKSx5PTA7dm9pZCAwPT09ZyYmeTxrLmxlbmd0aC0xOylnPWQuYzJwKGtbeV0pLHkrKztmb3IoeT1rLmxlbmd0aC0xO3ZvaWQgMD09PXYmJnk+MDspdj1kLmMycChrW3ldKSx5LS07aWYodjxnJiYobT1nLGc9dix2PW0sST0hMCksUyYmKEE9VCxNPWssVD1iLnhmaWxsLGs9Yi55ZmlsbCksImZhc3QiIT09RSl7dmFyIE89ImJlc3QiPT09RT8wOi41O3I9TWF0aC5tYXgoLU8qcC5fbGVuZ3RoLHIpLGg9TWF0aC5taW4oKDErTykqcC5fbGVuZ3RoLGgpLGc9TWF0aC5tYXgoLU8qZC5fbGVuZ3RoLGcpLHY9TWF0aC5taW4oKDErTykqZC5fbGVuZ3RoLHYpfXZhciB6PU1hdGgucm91bmQoaC1yKSxEPU1hdGgucm91bmQodi1nKTtpZih6PD0wfHxEPD0wKXt4LnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgUixGOyJmYXN0Ij09PUU/KFI9QyxGPUwpOihSPXosRj1EKTt2YXIgQj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtCLndpZHRoPVIsQi5oZWlnaHQ9Rjt2YXIgTixqLFU9Qi5nZXRDb250ZXh0KCIyZCIpLFY9cyhfLHtub051bWVyaWNDaGVjazohMCxyZXR1cm5BcnJheTohMH0pOyJmYXN0Ij09PUU/KE49UD9mdW5jdGlvbih0KXtyZXR1cm4gQy0xLXR9Om8uaWRlbnRpdHksaj1JP2Z1bmN0aW9uKHQpe3JldHVybiBMLTEtdH06by5pZGVudGl0eSk6KE49ZnVuY3Rpb24odCl7cmV0dXJuIG8uY29uc3RyYWluKE1hdGgucm91bmQocC5jMnAoVFt0XSktciksMCx6KX0saj1mdW5jdGlvbih0KXtyZXR1cm4gby5jb25zdHJhaW4oTWF0aC5yb3VuZChkLmMycChrW3RdKS1nKSwwLEQpfSk7dmFyIEgscSxHLFksVyxYPWooMCksWj1bWCxYXSxKPVA/MDoxLEs9ST8wOjEsUT0wLCQ9MCx0dD0wLGV0PTA7aWYoRSl7dmFyIHJ0LG50PTA7dHJ5e3J0PW5ldyBVaW50OEFycmF5KHoqRCo0KX1jYXRjaCh0KXtydD1uZXcgQXJyYXkoeipEKjQpfWlmKCJiZXN0Ij09PUUpe3ZhciBpdCxhdCxvdCxzdD1BfHxULGx0PU18fGssY3Q9bmV3IEFycmF5KHN0Lmxlbmd0aCksdXQ9bmV3IEFycmF5KGx0Lmxlbmd0aCksZnQ9bmV3IEFycmF5KHopLGh0PUE/dTpjLHB0PU0/dTpjO2Zvcih5PTA7eTxzdC5sZW5ndGg7eSsrKWN0W3ldPU1hdGgucm91bmQocC5jMnAoc3RbeV0pLXIpO2Zvcih5PTA7eTxsdC5sZW5ndGg7eSsrKXV0W3ldPU1hdGgucm91bmQoZC5jMnAobHRbeV0pLWcpO2Zvcih5PTA7eTx6O3krKylmdFt5XT1odCh5LGN0KTtmb3IocT0wO3E8RDtxKyspZm9yKGF0PXdbKGl0PXB0KHEsdXQpKS5iaW4wXSxvdD13W2l0LmJpbjFdLHk9MDt5PHo7eSsrLG50Kz00KWYocnQsbnQsVz1rdChhdCxvdCxmdFt5XSxpdCkpfWVsc2UgZm9yKHE9MDtxPEw7cSsrKWZvcihZPXdbcV0sWj1qKHEpLHk9MDt5PHo7eSsrKVc9VHQoWVt5XSwxKSxmKHJ0LG50PTQqKFoqeitOKHkpKSxXKTt2YXIgZHQ9VS5jcmVhdGVJbWFnZURhdGEoeixEKTt0cnl7ZHQuZGF0YS5zZXQocnQpfWNhdGNoKHQpe3ZhciBtdD1kdC5kYXRhLGd0PW10Lmxlbmd0aDtmb3IocT0wO3E8Z3Q7cSsrKW10W3FdPXJ0W3FdfVUucHV0SW1hZ2VEYXRhKGR0LDAsMCl9ZWxzZXt2YXIgdnQ9Xy54Z2FwLHl0PV8ueWdhcCx4dD1NYXRoLmZsb29yKHZ0LzIpLGJ0PU1hdGguZmxvb3IoeXQvMik7Zm9yKHE9MDtxPEw7cSsrKWlmKFk9d1txXSxaLnJldmVyc2UoKSxaW0tdPWoocSsxKSxaWzBdIT09WlsxXSYmdm9pZCAwIT09WlswXSYmdm9pZCAwIT09WlsxXSlmb3IoSD1bRz1OKDApLEddLHk9MDt5PEM7eSsrKUgucmV2ZXJzZSgpLEhbSl09Tih5KzEpLEhbMF0hPT1IWzFdJiZ2b2lkIDAhPT1IWzBdJiZ2b2lkIDAhPT1IWzFdJiYoVz1UdChZW3ldLChIWzFdLUhbMF0pKihaWzFdLVpbMF0pKSxVLmZpbGxTdHlsZT0icmdiYSgiK1cuam9pbigiLCIpKyIpIixVLmZpbGxSZWN0KEhbMF0reHQsWlswXStidCxIWzFdLUhbMF0tdnQsWlsxXS1aWzBdLXl0KSl9JD1NYXRoLnJvdW5kKCQvUSksdHQ9TWF0aC5yb3VuZCh0dC9RKSxldD1NYXRoLnJvdW5kKGV0L1EpO3ZhciBfdD1pKCJyZ2IoIiskKyIsIit0dCsiLCIrZXQrIikiKTt0Ll9obXBpeGNvdW50PSh0Ll9obXBpeGNvdW50fHwwKStRLHQuX2htbHVtY291bnQ9KHQuX2htbHVtY291bnR8fDApK1EqX3QuZ2V0THVtaW5hbmNlKCk7dmFyIHd0PXguc2VsZWN0QWxsKCJpbWFnZSIpLmRhdGEoZSk7d3QuZW50ZXIoKS5hcHBlbmQoInN2ZzppbWFnZSIpLmF0dHIoe3htbG5zOmwuc3ZnLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSksd3QuYXR0cih7aGVpZ2h0OkQsd2lkdGg6eix4OnIseTpnLCJ4bGluazpocmVmIjpCLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIil9KX1mdW5jdGlvbiBUdCh0LGUpe2lmKHZvaWQgMCE9PXQpe3ZhciByPVYodCk7cmV0dXJuIHJbMF09TWF0aC5yb3VuZChyWzBdKSxyWzFdPU1hdGgucm91bmQoclsxXSksclsyXT1NYXRoLnJvdW5kKHJbMl0pLFErPWUsJCs9clswXSplLHR0Kz1yWzFdKmUsZXQrPXJbMl0qZSxyfXJldHVyblswLDAsMCwwXX1mdW5jdGlvbiBrdCh0LGUscixuKXt2YXIgaT10W3IuYmluMF07aWYodm9pZCAwPT09aSlyZXR1cm4gVHQodm9pZCAwLDEpO3ZhciBhLG89dFtyLmJpbjFdLHM9ZVtyLmJpbjBdLGw9ZVtyLmJpbjFdLGM9by1pfHwwLHU9cy1pfHwwO3JldHVybiBhPXZvaWQgMD09PW8/dm9pZCAwPT09bD8wOnZvaWQgMD09PXM/MioobC1pKToyKigyKmwtcy1pKS8zOnZvaWQgMD09PWw/dm9pZCAwPT09cz8wOjIqKDIqaS1vLXMpLzM6dm9pZCAwPT09cz8yKigyKmwtby1pKS8zOmwraS1vLXMsVHQoaStyLmZyYWMqYytuLmZyYWMqKHUrci5mcmFjKmEpKX19KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiQHBsb3RseS9kMyI6NTgsdGlueWNvbG9yMjo1NzJ9XSwxMDcwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7bi5zZWxlY3QodCkuc2VsZWN0QWxsKCIuaG0gaW1hZ2UiKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRyYWNlLm9wYWNpdHl9KSl9fSx7IkBwbG90bHkvZDMiOjU4fV0sMTA3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyExPT09cigienNtb290aCIpJiYocigieGdhcCIpLHIoInlnYXAiKSkscigiemhvdmVyZm9ybWF0Iil9fSx7fV0sMTA3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIG8odCxlKXt2YXIgcj1lKHQpO3JldHVybiJzY2FsZWQiPT09KHI/ZSh0KyJ0eXBlIiwiYXJyYXkiKToic2NhbGVkIikmJihlKHQrIjAiKSxlKCJkIit0KSkscn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyxsLGMpe3ZhciB1LGYsaD1yKCJ6Iik7aWYobD1sfHwieCIsYz1jfHwieSIsdm9pZCAwPT09aHx8IWgubGVuZ3RoKXJldHVybiAwO2lmKGkuaXNBcnJheTFEKHQueikpe3U9cihsKSxmPXIoYyk7dmFyIHA9aS5taW5Sb3dMZW5ndGgodSksZD1pLm1pblJvd0xlbmd0aChmKTtpZigwPT09cHx8MD09PWQpcmV0dXJuIDA7ZS5fbGVuZ3RoPU1hdGgubWluKHAsZCxoLmxlbmd0aCl9ZWxzZXtpZih1PW8obCxyKSxmPW8oYyxyKSwhZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9ITAsYT0hMSxvPSExLHM9MDtzPHQubGVuZ3RoO3MrKyl7aWYoZT10W3NdLCFpLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkpe3I9ITE7YnJlYWt9ZS5sZW5ndGg+MCYmKGE9ITApO2Zvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKWlmKG4oZVtsXSkpe289ITA7YnJlYWt9fXJldHVybiByJiZhJiZvfShoKSlyZXR1cm4gMDtyKCJ0cmFuc3Bvc2UiKSxlLl9sZW5ndGg9bnVsbH1yZXR1cm4iaGVhdG1hcGdsIj09PXQudHlwZXx8YS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsW2wsY10scyksITB9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTA3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vaGVhdG1hcC9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsbz10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwscz1bInoiLCJ4IiwieDAiLCJkeCIsInkiLCJ5MCIsImR5IiwidGV4dCIsInRyYW5zcG9zZSIsInh0eXBlIiwieXR5cGUiXSxsPXt9LGM9MDtjPHMubGVuZ3RoO2MrKyl7dmFyIHU9c1tjXTtsW3VdPW5bdV19bC56c21vb3RoPXt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDoiZmFzdCIsZWRpdFR5cGU6ImNhbGMifSxhKGwsaSgiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKSxlLmV4cG9ydHM9byhsLCJjYWxjIiwibmVzdGVkIil9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uL2hlYXRtYXAvYXR0cmlidXRlcyI6MTA1OH1dLDEwNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtaGVhdG1hcDJkIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpO2Z1bmN0aW9uIG8odCxlKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9ZSx0aGlzLnR5cGU9ImhlYXRtYXBnbCIsdGhpcy5uYW1lPSIiLHRoaXMuaG92ZXJpbmZvPSJhbGwiLHRoaXMueERhdGE9W10sdGhpcy55RGF0YT1bXSx0aGlzLnpEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmlkVG9JbmRleD1bXSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5vcHRpb25zPXt6c21vb3RoOiJmYXN0Iix6OltdLHg6W10seTpbXSxzaGFwZTpbMCwwXSxjb2xvckxldmVsczpbMF0sY29sb3JWYWx1ZXM6WzAsMCwwLDFdfSx0aGlzLmhlYXRtYXA9bih0LmdscGxvdCx0aGlzLm9wdGlvbnMpLHRoaXMuaGVhdG1hcC5fdHJhY2U9dGhpc312YXIgcz1vLnByb3RvdHlwZTtzLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5vcHRpb25zLHI9ZS5zaGFwZSxuPXQucG9pbnRJZCxpPW4lclswXSxhPU1hdGguZmxvb3Iobi9yWzBdKSxvPW47cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6W2UueFtpXSxlLnlbYV0sZS56W29dXSx0ZXh0TGFiZWw6dGhpcy50ZXh0TGFiZWxzW25dLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6W2EsaV0saG92ZXJpbmZvOnRoaXMuaG92ZXJpbmZvfX0scy51cGRhdGU9ZnVuY3Rpb24odCxlKXt2YXIgcj1lWzBdO3RoaXMuaW5kZXg9dC5pbmRleCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvO3ZhciBuPXIuejt0aGlzLm9wdGlvbnMuej1bXS5jb25jYXQuYXBwbHkoW10sbik7dmFyIG89blswXS5sZW5ndGgscz1uLmxlbmd0aDt0aGlzLm9wdGlvbnMuc2hhcGU9W28sc10sdGhpcy5vcHRpb25zLng9ci54LHRoaXMub3B0aW9ucy55PXIueSx0aGlzLm9wdGlvbnMuenNtb290aD10LnpzbW9vdGg7dmFyIGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY29sb3JzY2FsZSxyPXQuem1pbixuPXQuem1heCxpPWUubGVuZ3RoLG89bmV3IEFycmF5KGkpLHM9bmV3IEFycmF5KDQqaSksbD0wO2w8aTtsKyspe3ZhciBjPWVbbF0sdT1hKGNbMV0pO29bbF09citjWzBdKihuLXIpO2Zvcih2YXIgZj0wO2Y8NDtmKyspc1s0KmwrZl09dVtmXX1yZXR1cm57Y29sb3JMZXZlbHM6byxjb2xvclZhbHVlczpzfX0odCk7dGhpcy5vcHRpb25zLmNvbG9yTGV2ZWxzPWwuY29sb3JMZXZlbHMsdGhpcy5vcHRpb25zLmNvbG9yVmFsdWVzPWwuY29sb3JWYWx1ZXMsdGhpcy50ZXh0TGFiZWxzPVtdLmNvbmNhdC5hcHBseShbXSx0LnRleHQpLHRoaXMuaGVhdG1hcC51cGRhdGUodGhpcy5vcHRpb25zKTt2YXIgYyx1LGY9dGhpcy5zY2VuZS54YXhpcyxoPXRoaXMuc2NlbmUueWF4aXM7ITE9PT10LnpzbW9vdGgmJihjPXtwcGFkOnIueFsxXS1yLnhbMF19LHU9e3BwYWQ6ci55WzFdLXIueVswXX0pLHQuX2V4dHJlbWVzW2YuX2lkXT1pLmZpbmRFeHRyZW1lcyhmLHIueCxjKSx0Ll9leHRyZW1lc1toLl9pZF09aS5maW5kRXh0cmVtZXMoaCxyLnksdSl9LHMuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMuaGVhdG1hcC5kaXNwb3NlKCl9LGUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49bmV3IG8odCxlLnVpZCk7cmV0dXJuIG4udXBkYXRlKGUsciksbn19LHsiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCJnbC1oZWF0bWFwMmQiOjI2N31dLDEwNzU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9oZWF0bWFwL3h5el9kZWZhdWx0cyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWkodCxlLGwscyk/KGwoInRleHQiKSxsKCJ6c21vb3RoIiksYSh0LGUscyxsLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAveHl6X2RlZmF1bHRzIjoxMDcyLCIuL2F0dHJpYnV0ZXMiOjEwNzN9XSwxMDc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1siKmhlYXRtYXBnbCogdHJhY2UgaXMgZGVwcmVjYXRlZCEiLCJQbGVhc2UgY29uc2lkZXIgc3dpdGNoaW5nIHRvIHRoZSAqaGVhdG1hcCogb3IgKmltYWdlKiB0cmFjZSB0eXBlcy4iLCJBbHRlcm5hdGl2ZWx5IHlvdSBjb3VsZCBjb250cmlidXRlL3Nwb25zb3IgcmV3cml0aW5nIHRoaXMgdHJhY2UgdHlwZSIsImJhc2VkIG9uIGNhcnRlc2lhbiBmZWF0dXJlcyBhbmQgdXNpbmcgcmVnbCBmcmFtZXdvcmsuIl0uam9pbigiICIpO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vaGVhdG1hcC9jb2xvcmJhciIpLGNhbGM6dCgiLi4vaGVhdG1hcC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaGVhdG1hcGdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDJkIiksY2F0ZWdvcmllczpbImdsIiwiZ2wyZCIsIjJkTWFwIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY3LCIuLi9oZWF0bWFwL2NhbGMiOjEwNTksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4vYXR0cmlidXRlcyI6MTA3MywiLi9jb252ZXJ0IjoxMDc0LCIuL2RlZmF1bHRzIjoxMDc1fV0sMTA3NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi9iaW5fYXR0cmlidXRlcyIpLHM9dCgiLi9jb25zdGFudHMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17eDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx0ZXh0Omwoe30sbi50ZXh0LHt9KSxob3ZlcnRleHQ6bCh7fSxuLmhvdmVydGV4dCx7fSksb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixoaXN0ZnVuYzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY291bnQiLCJzdW0iLCJhdmciLCJtaW4iLCJtYXgiXSxkZmx0OiJjb3VudCIsZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiIiwicGVyY2VudCIsInByb2JhYmlsaXR5IiwiZGVuc2l0eSIsInByb2JhYmlsaXR5IGRlbnNpdHkiXSxkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sY3VtdWxhdGl2ZTp7ZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGRpcmVjdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5jcmVhc2luZyIsImRlY3JlYXNpbmciXSxkZmx0OiJpbmNyZWFzaW5nIixlZGl0VHlwZToiY2FsYyJ9LGN1cnJlbnRiaW46e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluY2x1ZGUiLCJleGNsdWRlIiwiaGFsZiJdLGRmbHQ6ImluY2x1ZGUiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxuYmluc3g6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhiaW5zOm8oIngiLCEwKSxuYmluc3k6e3ZhbFR5cGU6ImludGVnZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHliaW5zOm8oInkiLCEwKSxhdXRvYmlueDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDpudWxsLGVkaXRUeXBlOiJjYWxjIn0sYXV0b2Jpbnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LGJpbmdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6cy5ldmVudERhdGFLZXlzfSksbWFya2VyOm4ubWFya2VyLG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLF9kZXByZWNhdGVkOntiYXJkaXI6bi5fZGVwcmVjYXRlZC5iYXJkaXJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vYmFyL2F0dHJpYnV0ZXMiOjkxNCwiLi9iaW5fYXR0cmlidXRlcyI6MTA3OSwiLi9jb25zdGFudHMiOjEwODN9XSwxMDc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTAsaT0wO2k8cjtpKyspZVtpXT8odFtpXS89ZVtpXSxuKz10W2ldKTp0W2ldPW51bGw7cmV0dXJuIG59fSx7fV0sMTA3OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57c3RhcnQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxlbmQ6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxzaXplOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMDgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIik7ZS5leHBvcnRzPXtjb3VudDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHJbdF0rKywxfSxzdW06ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtyZXR1cm4gbihhKT8oYT1OdW1iZXIoYSksclt0XSs9YSxhKTowfSxhdmc6ZnVuY3Rpb24odCxlLHIsaSxhKXt2YXIgbz1pW2VdO3JldHVybiBuKG8pJiYobz1OdW1iZXIobyksclt0XSs9byxhW3RdKyspLDB9LG1pbjpmdW5jdGlvbih0LGUscixpKXt2YXIgYT1pW2VdO2lmKG4oYSkpe2lmKGE9TnVtYmVyKGEpLCFuKHJbdF0pKXJldHVybiByW3RdPWEsYTtpZihyW3RdPmEpe3ZhciBvPWEtclt0XTtyZXR1cm4gclt0XT1hLG99fXJldHVybiAwfSxtYXg6ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9aVtlXTtpZihuKGEpKXtpZihhPU51bWJlcihhKSwhbihyW3RdKSlyZXR1cm4gclt0XT1hLGE7aWYoclt0XTxhKXt2YXIgbz1hLXJbdF07cmV0dXJuIHJbdF09YSxvfX1yZXR1cm4gMH19fSx7ImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uT05FQVZHWUVBUixhPW4uT05FQVZHTU9OVEgsbz1uLk9ORURBWSxzPW4uT05FSE9VUixsPW4uT05FTUlOLGM9bi5PTkVTRUMsdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLnRpY2tJbmNyZW1lbnQ7ZnVuY3Rpb24gZih0LGUscixuKXtpZih0KmU8PTApcmV0dXJuIDEvMDtmb3IodmFyIGk9TWF0aC5hYnMoZS10KSxhPSJkYXRlIj09PXIudHlwZSxvPWgoaSxhKSxzPTA7czwxMDtzKyspe3ZhciBsPWgoODAqbyxhKTtpZihvPT09bClicmVhaztpZighcChsLHQsZSxhLHIsbikpYnJlYWs7bz1sfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZSYmdD5jP3Q+bz90PjEuMSppP2k6dD4xLjEqYT9hOm86dD5zP3M6dD5sP2w6YzpNYXRoLnBvdygxMCxNYXRoLmZsb29yKE1hdGgubG9nKHQpL01hdGguTE4xMCkpfWZ1bmN0aW9uIHAodCxlLHIsbixhLHMpe2lmKG4mJnQ+byl7dmFyIGw9ZChlLGEscyksYz1kKHIsYSxzKSx1PXQ9PT1pPzA6MTtyZXR1cm4gbFt1XSE9PWNbdV19cmV0dXJuIE1hdGguZmxvb3Ioci90KS1NYXRoLmZsb29yKGUvdCk+LjF9ZnVuY3Rpb24gZCh0LGUscil7dmFyIG49ZS5jMmQodCxpLHIpLnNwbGl0KCItIik7cmV0dXJuIiI9PT1uWzBdJiYobi51bnNoaWZ0KCksblswXT0iLSIrblswXSksbn1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgcyxsLGM9LTEuMSplLGg9LS4xKmUscD10LWgsZD1yWzBdLG09clsxXSxnPU1hdGgubWluKGYoZCtoLGQrcCxuLGEpLGYobStoLG0rcCxuLGEpKSx2PU1hdGgubWluKGYoZCtjLGQraCxuLGEpLGYobStjLG0raCxuLGEpKTtpZihnPnYmJnY8TWF0aC5hYnMobS1kKS80ZTM/KHM9ZyxsPSExKToocz1NYXRoLm1pbihnLHYpLGw9ITApLCJkYXRlIj09PW4udHlwZSYmcz5vKXt2YXIgeT1zPT09aT8xOjYseD1zPT09aT8iTTEyIjoiTTEiO3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvPW4uYzJkKGUsaSxhKSxzPW8uaW5kZXhPZigiLSIseSk7cz4wJiYobz1vLnN1YnN0cigwLHMpKTt2YXIgYz1uLmQyYyhvLDAsYSk7aWYoYzxlKXt2YXIgZj11KGMseCwhMSxhKTsoYytmKS8yPGUrdCYmKGM9Zil9cmV0dXJuIHImJmw/dShjLHgsITAsYSk6Y319cmV0dXJuIGZ1bmN0aW9uKGUscil7dmFyIG49cypNYXRoLnJvdW5kKGUvcyk7cmV0dXJuIG4rcy8xMDxlJiZuKy45KnM8ZSt0JiYobis9cyksciYmbCYmKG4tPXMpLG59fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMDgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5Iiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLHM9dCgiLi4vYmFyL2FycmF5c190b19jYWxjZGF0YSIpLGw9dCgiLi9iaW5fZnVuY3Rpb25zIiksYz10KCIuL25vcm1fZnVuY3Rpb25zIiksdT10KCIuL2F2ZXJhZ2UiKSxmPXQoIi4vYmluX2xhYmVsX3ZhbHMiKTtmdW5jdGlvbiBoKHQsZSxyLHMsbCl7dmFyIGMsdSxmLHAsZCxtLGcsdj1zKyJiaW5zIix5PXQuX2Z1bGxMYXlvdXQseD1lWyJfIitzKyJiaW5ncm91cCJdLGI9eS5faGlzdG9ncmFtQmluT3B0c1t4XSxfPSJvdmVybGF5Ij09PXkuYmFybW9kZSx3PWZ1bmN0aW9uKHQpe3JldHVybiByLnIyYyh0LDAscCl9LFQ9ZnVuY3Rpb24odCl7cmV0dXJuIHIuYzJyKHQsMCxwKX0saz0iZGF0ZSI9PT1yLnR5cGU/ZnVuY3Rpb24odCl7cmV0dXJuIHR8fDA9PT10P2kuY2xlYW5EYXRlKHQsbnVsbCxwKTpudWxsfTpmdW5jdGlvbih0KXtyZXR1cm4gbih0KT9OdW1iZXIodCk6bnVsbH07ZnVuY3Rpb24gQSh0LGUscil7ZVt0KyJGb3VuZCJdPyhlW3RdPWsoZVt0XSksbnVsbD09PWVbdF0mJihlW3RdPXJbdF0pKToobVt0XT1lW3RdPXJbdF0saS5uZXN0ZWRQcm9wZXJ0eSh1WzBdLHYrIi4iK3QpLnNldChyW3RdKSl9aWYoZVsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0pZGVsZXRlIGVbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdO2Vsc2V7dT1iLnRyYWNlczt2YXIgTT1bXSxTPSEwLEU9ITEsTD0hMTtmb3IoYz0wO2M8dS5sZW5ndGg7YysrKWlmKChmPXVbY10pLnZpc2libGUpe3ZhciBDPWIuZGlyc1tjXTtkPWZbIl8iK0MrInBvczAiXT1yLm1ha2VDYWxjZGF0YShmLEMpLE09aS5jb25jYXQoTSxkKSxkZWxldGUgZlsiXyIrcysiYXV0b0JpbkZpbmlzaGVkIl0sITA9PT1lLnZpc2libGUmJihTP1M9ITE6KGRlbGV0ZSBmLl9hdXRvQmluLGZbIl8iK3MrImF1dG9CaW5GaW5pc2hlZCJdPTEpLGEudHJhY2VJcyhmLCIyZE1hcCIpJiYoRT0hMCksImhpc3RvZ3JhbTJkY29udG91ciI9PT1mLnR5cGUmJihMPSEwKSl9cD11WzBdW3MrImNhbGVuZGFyIl07dmFyIFA9by5hdXRvQmluKE0scixiLm5iaW5zLEUscCxiLnNpemVGb3VuZCYmYi5zaXplKSxJPXVbMF0uX2F1dG9CaW49e307aWYobT1JW2IuZGlyc1swXV09e30sTCYmKGIuc2l6ZXx8KFAuc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpKSx2b2lkIDA9PT1iLmVuZCYmKFAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpKSxfJiYhYS50cmFjZUlzKGUsIjJkTWFwIikmJjA9PT1QLl9kYXRhU3BhbiYmImNhdGVnb3J5IiE9PXIudHlwZSYmIm11bHRpY2F0ZWdvcnkiIT09ci50eXBlKXtpZihsKXJldHVybltQLGQsITBdO1A9ZnVuY3Rpb24odCxlLHIsbixhKXt2YXIgbyxzLGwsYz10Ll9mdWxsTGF5b3V0LHU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS54YXhpcyxuPWUueWF4aXMsaT1lLm9yaWVudGF0aW9uLGE9W10sbz10Ll9mdWxsRGF0YSxzPTA7czxvLmxlbmd0aDtzKyspe3ZhciBsPW9bc107Imhpc3RvZ3JhbSI9PT1sLnR5cGUmJiEwPT09bC52aXNpYmxlJiZsLm9yaWVudGF0aW9uPT09aSYmbC54YXhpcz09PXImJmwueWF4aXM9PT1uJiZhLnB1c2gobCl9cmV0dXJuIGF9KHQsZSksZj0hMSxwPTEvMCxkPVtlXTtmb3Iobz0wO288dS5sZW5ndGg7bysrKWlmKChzPXVbb10pPT09ZSlmPSEwO2Vsc2UgaWYoZil7dmFyIG09aCh0LHMscixuLCEwKSxnPW1bMF0sdj1tWzJdO3NbIl8iK24rImF1dG9CaW5GaW5pc2hlZCJdPTEsc1siXyIrbisicG9zMCJdPW1bMV0sdj9kLnB1c2gocyk6cD1NYXRoLm1pbihwLGcuc2l6ZSl9ZWxzZSBsPWMuX2hpc3RvZ3JhbUJpbk9wdHNbc1siXyIrbisiYmluZ3JvdXAiXV0scD1NYXRoLm1pbihwLGwuc2l6ZXx8c1thXS5zaXplKTt2YXIgeT1uZXcgQXJyYXkoZC5sZW5ndGgpO2ZvcihvPTA7bzxkLmxlbmd0aDtvKyspZm9yKHZhciB4PWRbb11bIl8iK24rInBvczAiXSxiPTA7Yjx4Lmxlbmd0aDtiKyspaWYodm9pZCAwIT09eFtiXSl7eVtvXT14W2JdO2JyZWFrfWlzRmluaXRlKHApfHwocD1pLmRpc3RpbmN0VmFscyh5KS5taW5EaWZmKTtmb3Iobz0wO288ZC5sZW5ndGg7bysrKXt2YXIgXz0ocz1kW29dKVtuKyJjYWxlbmRhciJdLHc9e3N0YXJ0OnIuYzJyKHlbb10tcC8yLDAsXyksZW5kOnIuYzJyKHlbb10rcC8yLDAsXyksc2l6ZTpwfTtzLl9pbnB1dFthXT1zW2FdPXcsKGw9Yy5faGlzdG9ncmFtQmluT3B0c1tzWyJfIituKyJiaW5ncm91cCJdXSkmJmkuZXh0ZW5kRmxhdChsLHcpfXJldHVybiBlW2FdfSh0LGUscixzLHYpfShnPWYuY3VtdWxhdGl2ZXx8e30pLmVuYWJsZWQmJiJpbmNsdWRlIiE9PWcuY3VycmVudGJpbiYmKCJkZWNyZWFzaW5nIj09PWcuZGlyZWN0aW9uP1Auc3RhcnQ9VChvLnRpY2tJbmNyZW1lbnQodyhQLnN0YXJ0KSxQLnNpemUsITAscCkpOlAuZW5kPVQoby50aWNrSW5jcmVtZW50KHcoUC5lbmQpLFAuc2l6ZSwhMSxwKSkpLGIuc2l6ZT1QLnNpemUsYi5zaXplRm91bmR8fChtLnNpemU9UC5zaXplLGkubmVzdGVkUHJvcGVydHkodVswXSx2KyIuc2l6ZSIpLnNldChQLnNpemUpKSxBKCJzdGFydCIsYixQKSxBKCJlbmQiLGIsUCl9ZD1lWyJfIitzKyJwb3MwIl0sZGVsZXRlIGVbIl8iK3MrInBvczAiXTt2YXIgTz1lLl9pbnB1dFt2XXx8e30sej1pLmV4dGVuZEZsYXQoe30sYiksRD1iLnN0YXJ0LFI9ci5yMmwoTy5zdGFydCksRj12b2lkIDAhPT1SO2lmKChiLnN0YXJ0Rm91bmR8fEYpJiZSIT09ci5yMmwoRCkpe3ZhciBCPUY/UjppLmFnZ051bXMoTWF0aC5taW4sbnVsbCxkKSxOPXt0eXBlOiJjYXRlZ29yeSI9PT1yLnR5cGV8fCJtdWx0aWNhdGVnb3J5Ij09PXIudHlwZT8ibGluZWFyIjpyLnR5cGUscjJsOnIucjJsLGR0aWNrOmIuc2l6ZSx0aWNrMDpELGNhbGVuZGFyOnAscmFuZ2U6W0Isby50aWNrSW5jcmVtZW50KEIsYi5zaXplLCExLHApXS5tYXAoci5sMnIpfSxqPW8udGlja0ZpcnN0KE4pO2o+ci5yMmwoQikmJihqPW8udGlja0luY3JlbWVudChqLGIuc2l6ZSwhMCxwKSksei5zdGFydD1yLmwycihqKSxGfHxpLm5lc3RlZFByb3BlcnR5KGUsdisiLnN0YXJ0Iikuc2V0KHouc3RhcnQpfXZhciBVPWIuZW5kLFY9ci5yMmwoTy5lbmQpLEg9dm9pZCAwIT09VjtpZigoYi5lbmRGb3VuZHx8SCkmJlYhPT1yLnIybChVKSl7dmFyIHE9SD9WOmkuYWdnTnVtcyhNYXRoLm1heCxudWxsLGQpO3ouZW5kPXIubDJyKHEpLEh8fGkubmVzdGVkUHJvcGVydHkoZSx2KyIuc3RhcnQiKS5zZXQoei5lbmQpfXZhciBHPSJhdXRvYmluIitzO3JldHVybiExPT09ZS5faW5wdXRbR10mJihlLl9pbnB1dFt2XT1pLmV4dGVuZEZsYXQoe30sZVt2XXx8e30pLGRlbGV0ZSBlLl9pbnB1dFtHXSxkZWxldGUgZVtHXSksW3osZF19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsYSxwLGQsbT1bXSxnPVtdLHY9by5nZXRGcm9tSWQodCwiaCI9PT1lLm9yaWVudGF0aW9uP2UueWF4aXM6ZS54YXhpcykseT0iaCI9PT1lLm9yaWVudGF0aW9uPyJ5IjoieCIseD17eDoieSIseToieCJ9W3ldLGI9ZVt5KyJjYWxlbmRhciJdLF89ZS5jdW11bGF0aXZlLHc9aCh0LGUsdix5KSxUPXdbMF0saz13WzFdLEE9InN0cmluZyI9PXR5cGVvZiBULnNpemUsTT1bXSxTPUE/TTpULEU9W10sTD1bXSxDPVtdLFA9MCxJPWUuaGlzdG5vcm0sTz1lLmhpc3RmdW5jLHo9LTEhPT1JLmluZGV4T2YoImRlbnNpdHkiKTtfLmVuYWJsZWQmJnomJihJPUkucmVwbGFjZSgvID9kZW5zaXR5JC8sIiIpLHo9ITEpO3ZhciBELFI9Im1heCI9PT1PfHwibWluIj09PU8/bnVsbDowLEY9bC5jb3VudCxCPWNbSV0sTj0hMSxqPWZ1bmN0aW9uKHQpe3JldHVybiB2LnIyYyh0LDAsYil9O2ZvcihpLmlzQXJyYXlPclR5cGVkQXJyYXkoZVt4XSkmJiJjb3VudCIhPT1PJiYoRD1lW3hdLE49ImF2ZyI9PT1PLEY9bFtPXSkscj1qKFQuc3RhcnQpLHA9aihULmVuZCkrKHItby50aWNrSW5jcmVtZW50KHIsVC5zaXplLCExLGIpKS8xZTY7cjxwJiZtLmxlbmd0aDwxZTYmJihhPW8udGlja0luY3JlbWVudChyLFQuc2l6ZSwhMSxiKSxtLnB1c2goKHIrYSkvMiksZy5wdXNoKFIpLEMucHVzaChbXSksTS5wdXNoKHIpLHomJkUucHVzaCgxLyhhLXIpKSxOJiZMLnB1c2goMCksIShhPD1yKSk7KXI9YTtNLnB1c2gociksQXx8ImRhdGUiIT09di50eXBlfHwoUz17c3RhcnQ6aihTLnN0YXJ0KSxlbmQ6aihTLmVuZCksc2l6ZTpTLnNpemV9KSx0Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c3x8KHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzPXt9KTt2YXIgVT1lWyJfIit5KyJiaW5ncm91cCJdLFY9e2xlZnRHYXA6MS8wLHJpZ2h0R2FwOjEvMH07VSYmKHQuX2Z1bGxMYXlvdXQuX3JvdW5kRm5PcHRzW1VdfHwodC5fZnVsbExheW91dC5fcm91bmRGbk9wdHNbVV09ViksVj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXSk7dmFyIEgscT1nLmxlbmd0aCxHPSEwLFk9Vi5sZWZ0R2FwLFc9Vi5yaWdodEdhcCxYPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspe3ZhciBaPWtbcl07KGQ9aS5maW5kQmluKFosUykpPj0wJiZkPHEmJihQKz1GKGQscixnLEQsTCksRyYmQ1tkXS5sZW5ndGgmJlohPT1rW0NbZF1bMF1dJiYoRz0hMSksQ1tkXS5wdXNoKHIpLFhbcl09ZCxZPU1hdGgubWluKFksWi1NW2RdKSxXPU1hdGgubWluKFcsTVtkKzFdLVopKX1WLmxlZnRHYXA9WSxWLnJpZ2h0R2FwPVcsR3x8KEg9ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10Ll9mdWxsTGF5b3V0Ll9yb3VuZEZuT3B0c1tVXTtyZXR1cm4gZihuLmxlZnRHYXAsbi5yaWdodEdhcCxNLHYsYikoZSxyKX19KSxOJiYoUD11KGcsTCkpLEImJkIoZyxQLEUpLF8uZW5hYmxlZCYmZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYTtmdW5jdGlvbiBvKGUpe2E9dFtlXSx0W2VdLz0yfWZ1bmN0aW9uIHMoZSl7aT10W2VdLHRbZV09YStpLzIsYSs9aX1pZigiaGFsZiI9PT1yKWlmKCJpbmNyZWFzaW5nIj09PWUpZm9yKG8oMCksbj0xO248dC5sZW5ndGg7bisrKXMobik7ZWxzZSBmb3Iobyh0Lmxlbmd0aC0xKSxuPXQubGVuZ3RoLTI7bj49MDtuLS0pcyhuKTtlbHNlIGlmKCJpbmNyZWFzaW5nIj09PWUpe2ZvcihuPTE7bjx0Lmxlbmd0aDtuKyspdFtuXSs9dFtuLTFdOyJleGNsdWRlIj09PXImJih0LnVuc2hpZnQoMCksdC5wb3AoKSl9ZWxzZXtmb3Iobj10Lmxlbmd0aC0yO24+PTA7bi0tKXRbbl0rPXRbbisxXTsiZXhjbHVkZSI9PT1yJiYodC5wdXNoKDApLHQuc2hpZnQoKSl9fShnLF8uZGlyZWN0aW9uLF8uY3VycmVudGJpbik7dmFyIEo9TWF0aC5taW4obS5sZW5ndGgsZy5sZW5ndGgpLEs9W10sUT0wLCQ9Si0xO2ZvcihyPTA7cjxKO3IrKylpZihnW3JdKXtRPXI7YnJlYWt9Zm9yKHI9Si0xO3I+PVE7ci0tKWlmKGdbcl0peyQ9cjticmVha31mb3Iocj1RO3I8PSQ7cisrKWlmKG4obVtyXSkmJm4oZ1tyXSkpe3ZhciB0dD17cDptW3JdLHM6Z1tyXSxiOjB9O18uZW5hYmxlZHx8KHR0LnB0cz1DW3JdLEc/dHQucGgwPXR0LnBoMT1DW3JdLmxlbmd0aD9rW0Nbcl1bMF1dOm1bcl06KGUuX2NvbXB1dGVQaD0hMCx0dC5waDA9SChNW3JdKSx0dC5waDE9SChNW3IrMV0sITApKSksSy5wdXNoKHR0KX1yZXR1cm4gMT09PUsubGVuZ3RoJiYoS1swXS53aWR0aDE9by50aWNrSW5jcmVtZW50KEtbMF0ucCxULnNpemUsITEsYiktS1swXS5wKSxzKEssZSksaS5pc0FycmF5T3JUeXBlZEFycmF5KGUuc2VsZWN0ZWRwb2ludHMpJiZpLnRhZ1NlbGVjdGVkKEssZSxYKSxLfSxjYWxjQWxsQXV0b0JpbnM6aH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9hcnJheXNfdG9fY2FsY2RhdGEiOjkxMywiLi9hdmVyYWdlIjoxMDc4LCIuL2Jpbl9mdW5jdGlvbnMiOjEwODAsIi4vYmluX2xhYmVsX3ZhbHMiOjEwODEsIi4vbm9ybV9mdW5jdGlvbnMiOjEwODksImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMDgzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImJpbk51bWJlciJdfX0se31dLDEwODQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiKSxhPXQoIi4uLy4uL3JlZ2lzdHJ5IikudHJhY2VJcyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZUdyb3VwaW5nRGVmYXVsdHMscz1uLm5lc3RlZFByb3BlcnR5LGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIikuZ2V0QXhpc0dyb3VwLGM9W3thU3RyOnt4OiJ4Ymlucy5zdGFydCIseToieWJpbnMuc3RhcnQifSxuYW1lOiJzdGFydCJ9LHthU3RyOnt4OiJ4Ymlucy5lbmQiLHk6InliaW5zLmVuZCJ9LG5hbWU6ImVuZCJ9LHthU3RyOnt4OiJ4Ymlucy5zaXplIix5OiJ5Ymlucy5zaXplIn0sbmFtZToic2l6ZSJ9LHthU3RyOnt4OiJuYmluc3giLHk6Im5iaW5zeSJ9LG5hbWU6Im5iaW5zIn1dLHU9WyJ4IiwieSJdO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGYsaCxwLGQsbSxnLHY9ZS5faGlzdG9ncmFtQmluT3B0cz17fSx5PVtdLHg9e30sYj1bXTtmdW5jdGlvbiBfKHQsZSl7cmV0dXJuIG4uY29lcmNlKHIuX2lucHV0LHIsci5fbW9kdWxlLmF0dHJpYnV0ZXMsdCxlKX1mdW5jdGlvbiB3KHQpe3JldHVybiJ2Ij09PXQub3JpZW50YXRpb24/IngiOiJ5In1mdW5jdGlvbiBUKHQscixhKXt2YXIgbz10LnVpZCsiX18iK2E7cnx8KHI9byk7dmFyIHM9ZnVuY3Rpb24odCxyKXtyZXR1cm4gaS5nZXRGcm9tVHJhY2Uoe19mdWxsTGF5b3V0OmV9LHQscikudHlwZX0odCxhKSxsPXRbYSsiY2FsZW5kYXIiXXx8IiIsYz12W3JdLHU9ITA7YyYmKHM9PT1jLmF4VHlwZSYmbD09PWMuY2FsZW5kYXI/KHU9ITEsYy50cmFjZXMucHVzaCh0KSxjLmRpcnMucHVzaChhKSk6KHI9byxzIT09Yy5heFR5cGUmJm4ud2FybihbIkF0dGVtcHRlZCB0byBncm91cCB0aGUgYmlucyBvZiB0cmFjZSIsdC5pbmRleCwic2V0IG9uIGEiLCJ0eXBlOiIrcywiYXhpcyIsIndpdGggYmlucyBvbiIsInR5cGU6IitjLmF4VHlwZSwiYXhpcy4iXS5qb2luKCIgIikpLGwhPT1jLmNhbGVuZGFyJiZuLndhcm4oWyJBdHRlbXB0ZWQgdG8gZ3JvdXAgdGhlIGJpbnMgb2YgdHJhY2UiLHQuaW5kZXgsInNldCB3aXRoIGEiLGwsImNhbGVuZGFyIiwid2l0aCBiaW5zIixjLmNhbGVuZGFyPyJvbiBhICIrYy5jYWxlbmRhcisiIGNhbGVuZGFyIjoidy9vIGEgc2V0IGNhbGVuZGFyIl0uam9pbigiICIpKSkpLHUmJih2W3JdPXt0cmFjZXM6W3RdLGRpcnM6W2FdLGF4VHlwZTpzLGNhbGVuZGFyOnRbYSsiY2FsZW5kYXIiXXx8IiJ9KSx0WyJfIithKyJiaW5ncm91cCJdPXJ9Zm9yKGQ9MDtkPHQubGVuZ3RoO2QrKylyPXRbZF0sYShyLCJoaXN0b2dyYW0iKSYmKHkucHVzaChyKSxkZWxldGUgci5feGF1dG9CaW5GaW5pc2hlZCxkZWxldGUgci5feWF1dG9CaW5GaW5pc2hlZCxhKHIsIjJkTWFwIil8fG8oci5faW5wdXQscixlLF8pKTt2YXIgaz1lLl9hbGlnbm1lbnRPcHRzfHx7fTtmb3IoZD0wO2Q8eS5sZW5ndGg7ZCsrKXtpZihyPXlbZF0saD0iIiwhYShyLCIyZE1hcCIpKXtpZihwPXcociksImdyb3VwIj09PWUuYmFybW9kZSYmci5hbGlnbm1lbnRncm91cCl7dmFyIEE9cltwKyJheGlzIl0sTT1sKGUsQSkrci5vcmllbnRhdGlvbjsoa1tNXXx8e30pW3IuYWxpZ25tZW50Z3JvdXBdJiYoaD1NKX1ofHwib3ZlcmxheSI9PT1lLmJhcm1vZGV8fChoPWwoZSxyLnhheGlzKStsKGUsci55YXhpcykrdyhyKSl9aD8oeFtoXXx8KHhbaF09W10pLHhbaF0ucHVzaChyKSk6Yi5wdXNoKHIpfWZvcihoIGluIHgpaWYoMSE9PShmPXhbaF0pLmxlbmd0aCl7dmFyIFM9ITE7Zm9yKGYubGVuZ3RoJiYocj1mWzBdLFM9XygiYmluZ3JvdXAiKSksaD1TfHxoLGQ9MDtkPGYubGVuZ3RoO2QrKyl7dmFyIEU9KHI9ZltkXSkuX2lucHV0LmJpbmdyb3VwO0UmJkUhPT1oJiZuLndhcm4oWyJUcmFjZSIsci5pbmRleCwibXVzdCBtYXRjaCIsIndpdGhpbiBiaW5ncm91cCIsaCsiLiIsIklnbm9yaW5nIGl0cyBiaW5ncm91cDoiLEUsInNldHRpbmcuIl0uam9pbigiICIpKSxyLmJpbmdyb3VwPWgsVChyLGgsdyhyKSl9fWVsc2UgYi5wdXNoKGZbMF0pO2ZvcihkPTA7ZDxiLmxlbmd0aDtkKyspe3I9YltkXTt2YXIgTD1fKCJiaW5ncm91cCIpO2lmKGEociwiMmRNYXAiKSlmb3IoZz0wO2c8MjtnKyspe3ZhciBDPV8oKHA9dVtnXSkrImJpbmdyb3VwIixMP0wrIl9fIitwOm51bGwpO1QocixDLHApfWVsc2UgVChyLEwsdyhyKSl9Zm9yKGggaW4gdil7dmFyIFA9dltoXTtmb3IoZj1QLnRyYWNlcyxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBJLE8sej1jW21dLEQ9ei5uYW1lO2lmKCJuYmlucyIhPT1EfHwhUC5zaXplRm91bmQpe2ZvcihkPTA7ZDxmLmxlbmd0aDtkKyspe2lmKHI9ZltkXSxwPVAuZGlyc1tkXSxJPXouYVN0cltwXSx2b2lkIDAhPT1zKHIuX2lucHV0LEkpLmdldCgpKXtQW0RdPV8oSSksUFtEKyJGb3VuZCJdPSEwO2JyZWFrfShPPShyLl9hdXRvQmlufHx7fSlbcF18fHt9KVtEXSYmcyhyLEkpLnNldChPW0RdKX1pZigic3RhcnQiPT09RHx8ImVuZCI9PT1EKWZvcig7ZDxmLmxlbmd0aDtkKyspKHI9ZltkXSlbIl8iK3ArImJpbmdyb3VwIl0mJl8oSSwoTz0oci5fYXV0b0Jpbnx8e30pW3BdfHx7fSlbRF0pOyJuYmlucyIhPT1EfHxQLnNpemVGb3VuZHx8UC5uYmluc0ZvdW5kfHwocj1mWzBdLFBbRF09XyhJKSl9fX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0cmFpbnRzIjo4MzUsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9kZWZhdWx0cyI6OTE4fV0sMTA4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi9iYXIvc3R5bGVfZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxzLHIsbil9dmFyIHU9YygieCIpLGY9YygieSIpO2MoImN1bXVsYXRpdmUuZW5hYmxlZCIpJiYoYygiY3VtdWxhdGl2ZS5kaXJlY3Rpb24iKSxjKCJjdW11bGF0aXZlLmN1cnJlbnRiaW4iKSksYygidGV4dCIpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKTt2YXIgaD1jKCJvcmllbnRhdGlvbiIsZiYmIXU/ImgiOiJ2IikscD0idiI9PT1oPyJ4IjoieSIsZD0idiI9PT1oPyJ5IjoieCIsbT11JiZmP01hdGgubWluKGkubWluUm93TGVuZ3RoKHUpJiZpLm1pblJvd0xlbmd0aChmKSk6aS5taW5Sb3dMZW5ndGgoZVtwXXx8W10pO2lmKG0pe2UuX2xlbmd0aD1tLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiXSxsKSxlW2RdJiZjKCJoaXN0ZnVuYyIpLGMoImhpc3Rub3JtIiksYygiYXV0b2JpbiIrcCksbyh0LGUsYyxyLGwpLGkuY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGMpO3ZhciBnPShlLm1hcmtlci5saW5lfHx7fSkuY29sb3Isdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxnfHxhLmRlZmF1bHRMaW5lLHtheGlzOiJ5In0pLHYodCxlLGd8fGEuZGVmYXVsdExpbmUse2F4aXM6IngiLGluaGVyaXQ6InkifSl9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL2Jhci9zdHlsZV9kZWZhdWx0cyI6OTI5LCIuL2F0dHJpYnV0ZXMiOjEwNzd9XSwxMDg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiekxhYmVsVmFsImluIGUmJih0Lno9ZS56TGFiZWxWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLCEoci5jdW11bGF0aXZlfHx7fSkuZW5hYmxlZCl7dmFyIGEsbz1BcnJheS5pc0FycmF5KGkpP25bMF0ucHRzW2lbMF1dW2lbMV1dOm5baV0ucHRzO2lmKHQucG9pbnROdW1iZXJzPW8sdC5iaW5OdW1iZXI9dC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludE51bWJlcixkZWxldGUgdC5wb2ludEluZGV4LHIuX2luZGV4VG9Qb2ludHMpe2E9W107Zm9yKHZhciBzPTA7czxvLmxlbmd0aDtzKyspYT1hLmNvbmNhdChyLl9pbmRleFRvUG9pbnRzW29bc11dKX1lbHNlIGE9bzt0LnBvaW50SW5kaWNlcz1hfXJldHVybiB0fX0se31dLDEwODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJQb2ludHMsaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLmhvdmVyTGFiZWxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhLG8pe3ZhciBzPW4odCxlLHIsYSxvKTtpZihzKXt2YXIgbD0odD1zWzBdKS5jZFt0LmluZGV4XSxjPXQuY2RbMF0udHJhY2U7aWYoIWMuY3VtdWxhdGl2ZS5lbmFibGVkKXt2YXIgdT0iaCI9PT1jLm9yaWVudGF0aW9uPyJ5IjoieCI7dFt1KyJMYWJlbCJdPWkodFt1KyJhIl0sW2wucGgwLGwucGgxXSxjW3UrImhvdmVyZm9ybWF0Il0pfXJldHVybiBzfX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMDg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4uL2Jhci9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLHN1cHBseUxheW91dERlZmF1bHRzOnQoIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4uL2Jhci9wbG90IikucGxvdCxsYXllck5hbWU6ImJhcmxheWVyIixzdHlsZTp0KCIuLi9iYXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL2Jhci9zdHlsZSIpLnN0eWxlT25TZWxlY3QsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Imhpc3RvZ3JhbSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImJhci1saWtlIiwiY2FydGVzaWFuIiwic3ZnIiwiYmFyIiwiaGlzdG9ncmFtIiwib3JpZW50ZWQiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxNywiLi4vYmFyL2xheW91dF9hdHRyaWJ1dGVzIjo5MjMsIi4uL2Jhci9sYXlvdXRfZGVmYXVsdHMiOjkyNCwiLi4vYmFyL3Bsb3QiOjkyNSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuLi9iYXIvc3R5bGUiOjkyOCwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vYXR0cmlidXRlcyI6MTA3NywiLi9jYWxjIjoxMDgyLCIuL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDg0LCIuL2RlZmF1bHRzIjoxMDg1LCIuL2V2ZW50X2RhdGEiOjEwODYsIi4vaG92ZXIiOjEwODd9XSwxMDg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17cGVyY2VudDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTEwMC9lLGk9MDtpPHI7aSsrKXRbaV0qPW59LHByb2JhYmlsaXR5OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLG49MDtuPHI7bisrKXRbbl0vPWV9LGRlbnNpdHk6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7bj1ufHwxO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXSpufSwicHJvYmFiaWxpdHkgZGVuc2l0eSI6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dC5sZW5ndGg7biYmKGUvPW4pO2Zvcih2YXIgYT0wO2E8aTthKyspdFthXSo9clthXS9lfX19LHt9XSwxMDkwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIiksaT10KCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiKSxhPXQoIi4uL2hlYXRtYXAvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz11KHt4Om4ueCx5Om4ueSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3I6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxoaXN0bm9ybTpuLmhpc3Rub3JtLGhpc3RmdW5jOm4uaGlzdGZ1bmMsbmJpbnN4Om4ubmJpbnN4LHhiaW5zOmkoIngiKSxuYmluc3k6bi5uYmluc3kseWJpbnM6aSgieSIpLGF1dG9iaW54Om4uYXV0b2JpbngsYXV0b2Jpbnk6bi5hdXRvYmlueSxiaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHhiaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHliaW5ncm91cDp1KHt9LG4uYmluZ3JvdXAse30pLHhnYXA6YS54Z2FwLHlnYXA6YS55Z2FwLHpzbW9vdGg6YS56c21vb3RoLHhob3ZlcmZvcm1hdDpzKCJ4IikseWhvdmVyZm9ybWF0OnMoInkiKSx6aG92ZXJmb3JtYXQ6cygieiIsMSksaG92ZXJ0ZW1wbGF0ZTpsKHt9LHtrZXlzOiJ6In0pLHNob3dsZWdlbmQ6dSh7fSxvLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sYygiIix7Y0xldHRlcjoieiIsYXV0b0NvbG9yRGZsdDohMX0pKX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9oZWF0bWFwL2F0dHJpYnV0ZXMiOjEwNTgsIi4uL2hpc3RvZ3JhbS9hdHRyaWJ1dGVzIjoxMDc3LCIuLi9oaXN0b2dyYW0vYmluX2F0dHJpYnV0ZXMiOjEwNzl9XSwxMDkxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2hpc3RvZ3JhbS9iaW5fZnVuY3Rpb25zIiksbz10KCIuLi9oaXN0b2dyYW0vbm9ybV9mdW5jdGlvbnMiKSxzPXQoIi4uL2hpc3RvZ3JhbS9hdmVyYWdlIiksbD10KCIuLi9oaXN0b2dyYW0vYmluX2xhYmVsX3ZhbHMiKSxjPXQoIi4uL2hpc3RvZ3JhbS9jYWxjIikuY2FsY0FsbEF1dG9CaW5zO2Z1bmN0aW9uIHUodCxlLHIsbil7dmFyIGksYT1uZXcgQXJyYXkodCk7aWYobilmb3IoaT0wO2k8dDtpKyspYVtpXT0xLyhlW2krMV0tZVtpXSk7ZWxzZXt2YXIgbz0xL3I7Zm9yKGk9MDtpPHQ7aSsrKWFbaV09b31yZXR1cm4gYX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJue3N0YXJ0OnQoZS5zdGFydCksZW5kOnQoZS5lbmQpLHNpemU6ZS5zaXplfX1mdW5jdGlvbiBoKHQsZSxyLG4saSxhKXt2YXIgbyxzPXQubGVuZ3RoLTEsYz1uZXcgQXJyYXkocyksdT1sKHIsbix0LGksYSk7Zm9yKG89MDtvPHM7bysrKXt2YXIgZj0oZXx8W10pW29dO2Nbb109dm9pZCAwPT09Zj9bdSh0W29dKSx1KHRbbysxXSwhMCldOltmLGZdfXJldHVybiBjfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGwscCxkLG09aS5nZXRGcm9tSWQodCxlLnhheGlzKSxnPWkuZ2V0RnJvbUlkKHQsZS55YXhpcyksdj1lLnhjYWxlbmRhcix5PWUueWNhbGVuZGFyLHg9ZnVuY3Rpb24odCl7cmV0dXJuIG0ucjJjKHQsMCx2KX0sYj1mdW5jdGlvbih0KXtyZXR1cm4gZy5yMmModCwwLHkpfSxfPWModCxlLG0sIngiKSx3PV9bMF0sVD1fWzFdLGs9Yyh0LGUsZywieSIpLEE9a1swXSxNPWtbMV0sUz1lLl9sZW5ndGg7VC5sZW5ndGg+UyYmVC5zcGxpY2UoUyxULmxlbmd0aC1TKSxNLmxlbmd0aD5TJiZNLnNwbGljZShTLE0ubGVuZ3RoLVMpO3ZhciBFPVtdLEw9W10sQz1bXSxQPSJzdHJpbmciPT10eXBlb2Ygdy5zaXplLEk9InN0cmluZyI9PXR5cGVvZiBBLnNpemUsTz1bXSx6PVtdLEQ9UD9POncsUj1JP3o6QSxGPTAsQj1bXSxOPVtdLGo9ZS5oaXN0bm9ybSxVPWUuaGlzdGZ1bmMsVj0tMSE9PWouaW5kZXhPZigiZGVuc2l0eSIpLEg9Im1heCI9PT1VfHwibWluIj09PVU/bnVsbDowLHE9YS5jb3VudCxHPW9bal0sWT0hMSxXPVtdLFg9W10sWj0ieiJpbiBlP2UuejoibWFya2VyImluIGUmJkFycmF5LmlzQXJyYXkoZS5tYXJrZXIuY29sb3IpP2UubWFya2VyLmNvbG9yOiIiO1omJiJjb3VudCIhPT1VJiYoWT0iYXZnIj09PVUscT1hW1VdKTt2YXIgSj13LnNpemUsSz14KHcuc3RhcnQpLFE9eCh3LmVuZCkrKEstaS50aWNrSW5jcmVtZW50KEssSiwhMSx2KSkvMWU2O2ZvcihyPUs7cjxRO3I9aS50aWNrSW5jcmVtZW50KHIsSiwhMSx2KSlMLnB1c2goSCksTy5wdXNoKHIpLFkmJkMucHVzaCgwKTtPLnB1c2gocik7dmFyICQsdHQ9TC5sZW5ndGgsZXQ9KHItSykvdHQscnQ9KCQ9SytldC8yLG0uYzJyKCQsMCx2KSksbnQ9QS5zaXplLGl0PWIoQS5zdGFydCksYXQ9YihBLmVuZCkrKGl0LWkudGlja0luY3JlbWVudChpdCxudCwhMSx5KSkvMWU2O2ZvcihyPWl0O3I8YXQ7cj1pLnRpY2tJbmNyZW1lbnQocixudCwhMSx5KSl7RS5wdXNoKEwuc2xpY2UoKSksei5wdXNoKHIpO3ZhciBvdD1uZXcgQXJyYXkodHQpO2ZvcihsPTA7bDx0dDtsKyspb3RbbF09W107Ti5wdXNoKG90KSxZJiZCLnB1c2goQy5zbGljZSgpKX16LnB1c2gocik7dmFyIHN0PUUubGVuZ3RoLGx0PShyLWl0KS9zdCxjdD1mdW5jdGlvbih0KXtyZXR1cm4gZy5jMnIodCwwLHkpfShpdCtsdC8yKTtWJiYoVz11KEwubGVuZ3RoLEQsZXQsUCksWD11KEUubGVuZ3RoLFIsbHQsSSkpLFB8fCJkYXRlIiE9PW0udHlwZXx8KEQ9Zih4LEQpKSxJfHwiZGF0ZSIhPT1nLnR5cGV8fChSPWYoYixSKSk7dmFyIHV0PSEwLGZ0PSEwLGh0PW5ldyBBcnJheSh0dCkscHQ9bmV3IEFycmF5KHN0KSxkdD0xLzAsbXQ9MS8wLGd0PTEvMCx2dD0xLzA7Zm9yKHI9MDtyPFM7cisrKXt2YXIgeXQ9VFtyXSx4dD1NW3JdO3A9bi5maW5kQmluKHl0LEQpLGQ9bi5maW5kQmluKHh0LFIpLHA+PTAmJnA8dHQmJmQ+PTAmJmQ8c3QmJihGKz1xKHAscixFW2RdLFosQltkXSksTltkXVtwXS5wdXNoKHIpLHV0JiYodm9pZCAwPT09aHRbcF0/aHRbcF09eXQ6aHRbcF0hPT15dCYmKHV0PSExKSksZnQmJih2b2lkIDA9PT1wdFtkXT9wdFtkXT14dDpwdFtkXSE9PXh0JiYoZnQ9ITEpKSxkdD1NYXRoLm1pbihkdCx5dC1PW3BdKSxtdD1NYXRoLm1pbihtdCxPW3ArMV0teXQpLGd0PU1hdGgubWluKGd0LHh0LXpbZF0pLHZ0PU1hdGgubWluKHZ0LHpbZCsxXS14dCkpfWlmKFkpZm9yKGQ9MDtkPHN0O2QrKylGKz1zKEVbZF0sQltkXSk7aWYoRylmb3IoZD0wO2Q8c3Q7ZCsrKUcoRVtkXSxGLFcsWFtkXSk7cmV0dXJue3g6VCx4UmFuZ2VzOmgoTyx1dCYmaHQsZHQsbXQsbSx2KSx4MDpydCxkeDpldCx5Ok0seVJhbmdlczpoKHosZnQmJnB0LGd0LHZ0LGcseSkseTA6Y3QsZHk6bHQsejpFLHB0czpOfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2hpc3RvZ3JhbS9hdmVyYWdlIjoxMDc4LCIuLi9oaXN0b2dyYW0vYmluX2Z1bmN0aW9ucyI6MTA4MCwiLi4vaGlzdG9ncmFtL2Jpbl9sYWJlbF92YWxzIjoxMDgxLCIuLi9oaXN0b2dyYW0vY2FsYyI6MTA4MiwiLi4vaGlzdG9ncmFtL25vcm1fZnVuY3Rpb25zIjoxMDg5fV0sMTA5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vc2FtcGxlX2RlZmF1bHRzIiksYT10KCIuLi9oZWF0bWFwL3N0eWxlX2RlZmF1bHRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxzPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixsKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxzLHIsaSl9aSh0LGUsYyxsKSwhMSE9PWUudmlzaWJsZSYmKGEodCxlLGMsbCksbyh0LGUsbCxjLHtwcmVmaXg6IiIsY0xldHRlcjoieiJ9KSxjKCJob3ZlcnRlbXBsYXRlIiksYygieGhvdmVyZm9ybWF0IiksYygieWhvdmVyZm9ybWF0IikpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4uL2hlYXRtYXAvc3R5bGVfZGVmYXVsdHMiOjEwNzEsIi4vYXR0cmlidXRlcyI6MTA5MCwiLi9zYW1wbGVfZGVmYXVsdHMiOjEwOTV9XSwxMDkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL2hlYXRtYXAvaG92ZXIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikuaG92ZXJMYWJlbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEsbyl7dmFyIHM9bih0LGUscixhLG8pO2lmKHMpe3ZhciBsPSh0PXNbMF0pLmluZGV4LGM9bFswXSx1PWxbMV0sZj10LmNkWzBdLGg9Zi50cmFjZSxwPWYueFJhbmdlc1t1XSxkPWYueVJhbmdlc1tjXTtyZXR1cm4gdC54TGFiZWw9aSh0LnhhLFtwWzBdLHBbMV1dLGgueGhvdmVyZm9ybWF0KSx0LnlMYWJlbD1pKHQueWEsW2RbMF0sZFsxXV0saC55aG92ZXJmb3JtYXQpLHN9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi9oZWF0bWFwL2hvdmVyIjoxMDY1fV0sMTA5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNyb3NzVHJhY2VEZWZhdWx0czp0KCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2hlYXRtYXAvY2FsYyIpLHBsb3Q6dCgiLi4vaGVhdG1hcC9wbG90IiksbGF5ZXJOYW1lOiJoZWF0bWFwbGF5ZXIiLGNvbG9yYmFyOnQoIi4uL2hlYXRtYXAvY29sb3JiYXIiKSxzdHlsZTp0KCIuLi9oZWF0bWFwL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0yZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsIjJkTWFwIiwiaGlzdG9ncmFtIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9oZWF0bWFwL2NhbGMiOjEwNTksIi4uL2hlYXRtYXAvY29sb3JiYXIiOjEwNjEsIi4uL2hlYXRtYXAvcGxvdCI6MTA2OSwiLi4vaGVhdG1hcC9zdHlsZSI6MTA3MCwiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMDg0LCIuLi9oaXN0b2dyYW0vZXZlbnRfZGF0YSI6MTA4NiwiLi9hdHRyaWJ1dGVzIjoxMDkwLCIuL2RlZmF1bHRzIjoxMDkyLCIuL2hvdmVyIjoxMDkzfV0sMTA5NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPXIoIngiKSxzPXIoInkiKSxsPWkubWluUm93TGVuZ3RoKG8pLGM9aS5taW5Sb3dMZW5ndGgocyk7bCYmYz8oZS5fbGVuZ3RoPU1hdGgubWluKGwsYyksbi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSJdLGEpLChyKCJ6Iil8fHIoIm1hcmtlci5jb2xvciIpKSYmcigiaGlzdGZ1bmMiKSxyKCJoaXN0bm9ybSIpLHIoImF1dG9iaW54IikscigiYXV0b2JpbnkiKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEwOTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vaGlzdG9ncmFtMmQvYXR0cmlidXRlcyIpLGk9dCgiLi4vY29udG91ci9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQscz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9cyh7eDpuLngseTpuLnksejpuLnosbWFya2VyOm4ubWFya2VyLGhpc3Rub3JtOm4uaGlzdG5vcm0saGlzdGZ1bmM6bi5oaXN0ZnVuYyxuYmluc3g6bi5uYmluc3gseGJpbnM6bi54YmlucyxuYmluc3k6bi5uYmluc3kseWJpbnM6bi55YmlucyxhdXRvYmlueDpuLmF1dG9iaW54LGF1dG9iaW55Om4uYXV0b2JpbnksYmluZ3JvdXA6bi5iaW5ncm91cCx4YmluZ3JvdXA6bi54YmluZ3JvdXAseWJpbmdyb3VwOm4ueWJpbmdyb3VwLGF1dG9jb250b3VyOmkuYXV0b2NvbnRvdXIsbmNvbnRvdXJzOmkubmNvbnRvdXJzLGNvbnRvdXJzOmkuY29udG91cnMsbGluZTp7Y29sb3I6aS5saW5lLmNvbG9yLHdpZHRoOnMoe30saS5saW5lLndpZHRoLHtkZmx0Oi41fSksZGFzaDppLmxpbmUuZGFzaCxzbW9vdGhpbmc6aS5saW5lLnNtb290aGluZyxlZGl0VHlwZToicGxvdCJ9LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSx6aG92ZXJmb3JtYXQ6bygieiIsMSksaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGV9LGEoIiIse2NMZXR0ZXI6InoiLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vY29udG91ci9hdHRyaWJ1dGVzIjoxMDAxLCIuLi9oaXN0b2dyYW0yZC9hdHRyaWJ1dGVzIjoxMDkwfV0sMTA5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL2hpc3RvZ3JhbTJkL3NhbXBsZV9kZWZhdWx0cyIpLGE9dCgiLi4vY29udG91ci9jb250b3Vyc19kZWZhdWx0cyIpLG89dCgiLi4vY29udG91ci9zdHlsZV9kZWZhdWx0cyIpLHM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLHMscixpKX1pKHQsZSxjLGwpLCExIT09ZS52aXNpYmxlJiYoYSh0LGUsYywoZnVuY3Rpb24ocil7cmV0dXJuIG4uY29lcmNlMih0LGUscyxyKX0pKSxvKHQsZSxjLGwpLGMoImhvdmVydGVtcGxhdGUiKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9jb250b3VyL2NvbnRvdXJzX2RlZmF1bHRzIjoxMDA4LCIuLi9jb250b3VyL3N0eWxlX2RlZmF1bHRzIjoxMDIyLCIuLi9oaXN0b2dyYW0yZC9zYW1wbGVfZGVmYXVsdHMiOjEwOTUsIi4vYXR0cmlidXRlcyI6MTA5Nn1dLDEwOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vaGlzdG9ncmFtL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIiksY2FsYzp0KCIuLi9jb250b3VyL2NhbGMiKSxwbG90OnQoIi4uL2NvbnRvdXIvcGxvdCIpLnBsb3QsbGF5ZXJOYW1lOiJjb250b3VybGF5ZXIiLHN0eWxlOnQoIi4uL2NvbnRvdXIvc3R5bGUiKSxjb2xvcmJhcjp0KCIuLi9jb250b3VyL2NvbG9yYmFyIiksaG92ZXJQb2ludHM6dCgiLi4vY29udG91ci9ob3ZlciIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJoaXN0b2dyYW0yZGNvbnRvdXIiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsImNvbnRvdXIiLCJoaXN0b2dyYW0iLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuIjo4NDEsIi4uL2NvbnRvdXIvY2FsYyI6MTAwMiwiLi4vY29udG91ci9jb2xvcmJhciI6MTAwNCwiLi4vY29udG91ci9ob3ZlciI6MTAxNCwiLi4vY29udG91ci9wbG90IjoxMDE5LCIuLi9jb250b3VyL3N0eWxlIjoxMDIxLCIuLi9oaXN0b2dyYW0vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjEwODQsIi4vYXR0cmlidXRlcyI6MTA5NiwiLi9kZWZhdWx0cyI6MTA5N31dLDEwOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLHM9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxsPXQoIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3RyZWVtYXAvYXR0cmlidXRlcyIpLHU9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSxmPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17bGFiZWxzOmwubGFiZWxzLHBhcmVudHM6bC5wYXJlbnRzLHZhbHVlczpsLnZhbHVlcyxicmFuY2h2YWx1ZXM6bC5icmFuY2h2YWx1ZXMsY291bnQ6bC5jb3VudCxsZXZlbDpsLmxldmVsLG1heGRlcHRoOmwubWF4ZGVwdGgsdGlsaW5nOntvcmllbnRhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidiIsImgiXSxkZmx0OiJoIixlZGl0VHlwZToicGxvdCJ9LGZsaXA6Yy50aWxpbmcuZmxpcCxwYWQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6ImNhbGMifSxtYXJrZXI6Zih7Y29sb3JzOmwubWFya2VyLmNvbG9ycyxsaW5lOmwubWFya2VyLmxpbmUsZWRpdFR5cGU6ImNhbGMifSxhKCJtYXJrZXIiLHtjb2xvckF0dHI6ImNvbG9ycyIsYW5pbTohMX0pKSxsZWFmOmwubGVhZixwYXRoYmFyOmMucGF0aGJhcix0ZXh0OnMudGV4dCx0ZXh0aW5mbzpsLnRleHRpbmZvLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOnUuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OnMuaG92ZXJ0ZXh0LGhvdmVyaW5mbzpsLmhvdmVyaW5mbyxob3ZlcnRlbXBsYXRlOm4oe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6cy50ZXh0Zm9udCxpbnNpZGV0ZXh0Zm9udDpzLmluc2lkZXRleHRmb250LG91dHNpZGV0ZXh0Zm9udDpjLm91dHNpZGV0ZXh0Zm9udCx0ZXh0cG9zaXRpb246Yy50ZXh0cG9zaXRpb24sc29ydDpzLnNvcnQscm9vdDpsLnJvb3QsZG9tYWluOm8oe25hbWU6ImljaWNsZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEzMDMsIi4uL3RyZWVtYXAvYXR0cmlidXRlcyI6MTMyOSwiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEzMzJ9XSwxMTAwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3Bsb3RzIik7ci5uYW1lPSJpY2ljbGUiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MH1dLDExMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc3VuYnVyc3QvY2FsYyIpO3IuY2FsYz1mdW5jdGlvbih0LGUpe3JldHVybiBuLmNhbGModCxlKX0sci5jcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0KXtyZXR1cm4gbi5fcnVuQ3Jvc3NUcmFjZUNhbGMoImljaWNsZSIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEzMDV9XSwxMTAyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGY9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWgoImxhYmVscyIpLGQ9aCgicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIG09aCgidmFsdWVzIik7bSYmbS5sZW5ndGg/aCgiYnJhbmNodmFsdWVzIik6aCgiY291bnQiKSxoKCJsZXZlbCIpLGgoIm1heGRlcHRoIiksaCgidGlsaW5nLm9yaWVudGF0aW9uIiksaCgidGlsaW5nLmZsaXAiKSxoKCJ0aWxpbmcucGFkIik7dmFyIGc9aCgidGV4dCIpO2goInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxoKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWgoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsaCwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxoKCJ0ZXh0cG9zaXRpb24iKSxoKCJtYXJrZXIubGluZS53aWR0aCIpJiZoKCJtYXJrZXIubGluZS5jb2xvciIsYy5wYXBlcl9iZ2NvbG9yKSxoKCJtYXJrZXIuY29sb3JzIik7dmFyIHk9ZS5faGFzQ29sb3JzY2FsZT11KHQsIm1hcmtlciIsImNvbG9ycyIpfHwodC5tYXJrZXJ8fHt9KS5jb2xvcmF4aXM7eSYmZih0LGUsYyxoLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksaCgibGVhZi5vcGFjaXR5Iix5PzE6LjcpLGUuX2hvdmVyZWQ9e21hcmtlcjp7bGluZTp7d2lkdGg6Mixjb2xvcjphLmNvbnRyYXN0KGMucGFwZXJfYmdjb2xvcil9fX0sdiYmKGgoInBhdGhiYXIudGhpY2tuZXNzIixlLnBhdGhiYXIudGV4dGZvbnQuc2l6ZSsyKmwpLGgoInBhdGhiYXIuc2lkZSIpLGgoInBhdGhiYXIuZWRnZXNoYXBlIikpLGgoInNvcnQiKSxoKCJyb290LmNvbG9yIiksbyhlLGMsaCksZS5fbGVuZ3RoPW51bGx9ZWxzZSBlLnZpc2libGU9ITF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vYmFyL2NvbnN0YW50cyI6OTE2LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi9hdHRyaWJ1dGVzIjoxMDk5fV0sMTEwMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi4vdHJlZW1hcC9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4IiksaD10KCIuLi9zdW5idXJzdC9wbG90IikuZm9ybWF0U2xpY2VMYWJlbDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT1kLndpZHRoLGc9ZC5oZWlnaHQsdj1kLnZpZXdYLHk9ZC52aWV3WSx4PWQucGF0aFNsaWNlLGI9ZC50b01vdmVJbnNpZGVTbGljZSxfPWQuc3RyVHJhbnNmb3JtLHc9ZC5oYXNUcmFuc2l0aW9uLFQ9ZC5oYW5kbGVTbGljZXNFeGl0LGs9ZC5tYWtlVXBkYXRlU2xpY2VJbnRlcnBvbGF0b3IsQT1kLm1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yLE09ZC5wcmV2RW50cnksUz10Ll9mdWxsTGF5b3V0LEU9ZVswXS50cmFjZSxMPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigibGVmdCIpLEM9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpLFA9LTEhPT1FLnRleHRwb3NpdGlvbi5pbmRleE9mKCJib3R0b20iKSxJPXMocixbbSxnXSx7ZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEsb3JpZW50YXRpb246RS50aWxpbmcub3JpZW50YXRpb24scGFkOntpbm5lcjpFLnRpbGluZy5wYWR9LG1heERlcHRoOkUuX21heERlcHRofSkuZGVzY2VuZGFudHMoKSxPPTEvMCx6PS0xLzA7SS5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LmRlcHRoO2U+PUUuX21heERlcHRoPyh0LngwPXQueDE9KHQueDArdC54MSkvMix0LnkwPXQueTE9KHQueTArdC55MSkvMik6KE89TWF0aC5taW4oTyxlKSx6PU1hdGgubWF4KHosZSkpfSkpLHA9cC5kYXRhKEksdS5nZXRQdElkKSxFLl9tYXhWaXNpYmxlTGF5ZXJzPWlzRmluaXRlKHopP3otTysxOjAscC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInNsaWNlIiwhMCksVChwLCExLHt9LFttLGddLHgpLHAub3JkZXIoKTt2YXIgRD1udWxsO2lmKHcmJk0pe3ZhciBSPXUuZ2V0UHRJZChNKTtwLmVhY2goKGZ1bmN0aW9uKHQpe251bGw9PT1EJiZ1LmdldFB0SWQodCk9PT1SJiYoRD17eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSkpfXZhciBGPWZ1bmN0aW9uKCl7cmV0dXJuIER8fHt4MDowLHgxOm0seTA6MCx5MTpnfX0sQj1wO3JldHVybiB3JiYoQj1CLnRyYW5zaXRpb24oKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpe3ZhciBlPW4uc2VsZWN0KHRoaXMpO3Uuc2V0U2xpY2VDdXJzb3IoZSx0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMSxpc1RyYW5zaXRpb25pbmc6ITF9KX0pKSksQi5lYWNoKChmdW5jdGlvbihzKXtzLl94MD12KHMueDApLHMuX3gxPXYocy54MSkscy5feTA9eShzLnkwKSxzLl95MT15KHMueTEpLHMuX2hvdmVyWD12KHMueDEtRS50aWxpbmcucGFkKSxzLl9ob3Zlclk9eShQP3MueTEtRS50aWxpbmcucGFkLzI6cy55MCtFLnRpbGluZy5wYWQvMik7dmFyIHA9bi5zZWxlY3QodGhpcyksZD1pLmVuc3VyZVNpbmdsZShwLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7dz9kLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1rKHQsITEsRigpLFttLGddLHtvcmllbnRhdGlvbjpFLnRpbGluZy5vcmllbnRhdGlvbixmbGlwWDpFLnRpbGluZy5mbGlwLmluZGV4T2YoIngiKT4tMSxmbGlwWTpFLnRpbGluZy5mbGlwLmluZGV4T2YoInkiKT4tMX0pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6ZC5hdHRyKCJkIix4KSxwLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxkLmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PWgocyxyLEUsZSxTKXx8IiI7dmFyIFQ9aS5lbnN1cmVTaW5nbGUocCwiZyIsInNsaWNldGV4dCIpLE09aS5lbnN1cmVTaW5nbGUoVCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksST1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO00udGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkw/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQsSSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goTS5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6SS5zaXplfSkscy50cmFuc2Zvcm0uZm9udFNpemU9SS5zaXplLHc/TS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1BKHQsITEsRigpLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIF8oZSh0KSl9fSkpOk0uYXR0cigidHJhbnNmb3JtIixfKHMpKX0pKSxEfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi9zdW5idXJzdC9meCI6MTMwOCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi4vc3VuYnVyc3QvcGxvdCI6MTMxMywiLi4vdHJlZW1hcC9jb25zdGFudHMiOjEzMzIsIi4vcGFydGl0aW9uIjoxMTA3LCIuL3N0eWxlIjoxMTA5LCJAcGxvdGx5L2QzIjo1OH1dLDExMDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaWNpY2xlIixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4vc3R5bGUiKS5zdHlsZSxjb2xvcmJhcjp0KCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciIpLG1ldGE6e319fSx7Ii4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuL2F0dHJpYnV0ZXMiOjEwOTksIi4vYmFzZV9wbG90IjoxMTAwLCIuL2NhbGMiOjExMDEsIi4vZGVmYXVsdHMiOjExMDIsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjExMDUsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMTA2LCIuL3Bsb3QiOjExMDgsIi4vc3R5bGUiOjExMDl9XSwxMTA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aWNpY2xlY29sb3J3YXk6e3ZhbFR5cGU6ImNvbG9ybGlzdCIsZWRpdFR5cGU6ImNhbGMifSxleHRlbmRpY2ljbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMTA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJpY2ljbGVjb2xvcndheSIsZS5jb2xvcndheSkscigiZXh0ZW5kaWNpY2xlY29sb3JzIil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMTA1fV0sMTEwNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJkMy1oaWVyYXJjaHkiKSxpPXQoIi4uL3RyZWVtYXAvZmxpcF90cmVlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1yLmZsaXBYLG89ci5mbGlwWSxzPSJoIj09PXIub3JpZW50YXRpb24sbD1yLm1heERlcHRoLGM9ZVswXSx1PWVbMV07bCYmKGM9KHQuaGVpZ2h0KzEpKmVbMF0vTWF0aC5taW4odC5oZWlnaHQrMSxsKSx1PSh0LmhlaWdodCsxKSplWzFdL01hdGgubWluKHQuaGVpZ2h0KzEsbCkpO3ZhciBmPW4ucGFydGl0aW9uKCkucGFkZGluZyhyLnBhZC5pbm5lcikuc2l6ZShzP1tlWzFdLGNdOltlWzBdLHVdKSh0KTtyZXR1cm4oc3x8YXx8bykmJmkoZixlLHtzd2FwWFk6cyxmbGlwWDphLGZsaXBZOm99KSxmfX0seyIuLi90cmVlbWFwL2ZsaXBfdHJlZSI6MTMzNywiZDMtaGllcmFyY2h5IjoxNjN9XSwxMTA4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3RyZWVtYXAvZHJhdyIpLGk9dCgiLi9kcmF3X2Rlc2NlbmRhbnRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGEpe3JldHVybiBuKHQsZSxyLGEse3R5cGU6ImljaWNsZSIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi4vdHJlZW1hcC9kcmF3IjoxMzM0LCIuL2RyYXdfZGVzY2VuZGFudHMiOjExMDN9XSwxMTA5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxhPXQoIi4uLy4uL2xpYiIpLG89dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQ7ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49ZS5kYXRhLmRhdGEsbz0hZS5jaGlsZHJlbixzPW4uaSxsPWEuY2FzdE9wdGlvbihyLHMsIm1hcmtlci5saW5lLmNvbG9yIil8fGkuZGVmYXVsdExpbmUsYz1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS53aWR0aCIpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIsYykuY2FsbChpLmZpbGwsbi5jb2xvcikuY2FsbChpLnN0cm9rZSxsKS5zdHlsZSgib3BhY2l0eSIsbz9yLmxlYWYub3BhY2l0eTpudWxsKX1lLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQpe3ZhciBlPXQuX2Z1bGxMYXlvdXQuX2ljaWNsZWxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsImljaWNsZSIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwocyx0LHIpfSkpfSkpfSxzdHlsZU9uZTpzfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTExMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi9jb25zdGFudHMiKS5jb2xvcm1vZGVsLHM9WyJyZ2IiLCJyZ2JhIiwicmdiYTI1NiIsImhzbCIsImhzbGEiXSxsPVtdLGM9W10sdT0wO3U8cy5sZW5ndGg7dSsrKXt2YXIgZj1vW3NbdV1dO2wucHVzaCgiRm9yIHRoZSBgIitzW3VdKyJgIGNvbG9ybW9kZWwsIGl0IGlzIFsiKyhmLnptaW5EZmx0fHxmLm1pbikuam9pbigiLCAiKSsiXS4iKSxjLnB1c2goIkZvciB0aGUgYCIrc1t1XSsiYCBjb2xvcm1vZGVsLCBpdCBpcyBbIisoZi56bWF4RGZsdHx8Zi5tYXgpLmpvaW4oIiwgIikrIl0uIil9ZS5leHBvcnRzPWEoe3NvdXJjZTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3Jtb2RlbDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnMsZWRpdFR5cGU6ImNhbGMifSx6c21vb3RoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJmYXN0IiwhMV0sZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHptaW46e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHptYXg6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJjYWxjIn0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LHgwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHkwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGR4Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVyaW5mbzphKHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbIngiLCJ5IiwieiIsImNvbG9yIiwibmFtZSIsInRleHQiXSxkZmx0OiJ4K3kreit0ZXh0K25hbWUifSksaG92ZXJ0ZW1wbGF0ZTppKHt9LHtrZXlzOlsieiIsImNvbG9yIiwiY29sb3Jtb2RlbCJdfSksdHJhbnNmb3Jtczp2b2lkIDB9KX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuL2NvbnN0YW50cyI6MTExMn1dLDExMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2NvbnN0YW50cyIpLGE9dCgiZmFzdC1pc251bWVyaWMiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi8uLi9saWIiKS5tYXhSb3dMZW5ndGgsbD10KCIuL2hlbHBlcnMiKS5nZXRJbWFnZVNpemU7ZnVuY3Rpb24gYyh0LGUscixpKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIG4uY29uc3RyYWluKChhLXQpKmUscixpKX19ZnVuY3Rpb24gdSh0LGUpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gbi5jb25zdHJhaW4ocix0LGUpfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuO2lmKGUuX2hhc1opcj1lLnoubGVuZ3RoLG49cyhlLnopO2Vsc2UgaWYoZS5faGFzU291cmNlKXt2YXIgZj1sKGUuc291cmNlKTtyPWYuaGVpZ2h0LG49Zi53aWR0aH12YXIgaCxwPW8uZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSxkPW8uZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxtPXAuZDJjKGUueDApLWUuZHgvMixnPWQuZDJjKGUueTApLWUuZHkvMix2PVttLG0rbiplLmR4XSx5PVtnLGcrciplLmR5XTtpZihwJiYibG9nIj09PXAudHlwZSlmb3IoaD0wO2g8bjtoKyspdi5wdXNoKG0raCplLmR4KTtpZihkJiYibG9nIj09PWQudHlwZSlmb3IoaD0wO2g8cjtoKyspeS5wdXNoKGcraCplLmR5KTtyZXR1cm4gZS5fZXh0cmVtZXNbcC5faWRdPW8uZmluZEV4dHJlbWVzKHAsdiksZS5fZXh0cmVtZXNbZC5faWRdPW8uZmluZEV4dHJlbWVzKGQseSksZS5fc2NhbGVyPWZ1bmN0aW9uKHQpe3ZhciBlPWkuY29sb3Jtb2RlbFt0LmNvbG9ybW9kZWxdLHI9KGUuY29sb3Jtb2RlbHx8dC5jb2xvcm1vZGVsKS5sZW5ndGg7dC5fc0FycmF5PVtdO2Zvcih2YXIgbj0wO248cjtuKyspZS5taW5bbl0hPT10LnptaW5bbl18fGUubWF4W25dIT09dC56bWF4W25dP3QuX3NBcnJheS5wdXNoKGModC56bWluW25dLChlLm1heFtuXS1lLm1pbltuXSkvKHQuem1heFtuXS10LnptaW5bbl0pLGUubWluW25dLGUubWF4W25dKSk6dC5fc0FycmF5LnB1c2godShlLm1pbltuXSxlLm1heFtuXSkpO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIG49ZS5zbGljZSgwLHIpLGk9MDtpPHI7aSsrKXt2YXIgbz1uW2ldO2lmKCFhKG8pKXJldHVybiExO25baV09dC5fc0FycmF5W2ldKG8pfXJldHVybiBufX0oZSksW3t4MDptLHkwOmcsejplLnosdzpuLGg6cn1dfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9jb25zdGFudHMiOjExMTIsIi4vaGVscGVycyI6MTExNSwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDExMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb2xvcm1vZGVsOntyZ2I6e21pbjpbMCwwLDBdLG1heDpbMjU1LDI1NSwyNTVdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDMpfSxzdWZmaXg6WyIiLCIiLCIiXX0scmdiYTp7bWluOlswLDAsMCwwXSxtYXg6WzI1NSwyNTUsMjU1LDFdLGZtdDpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgwLDQpfSxzdWZmaXg6WyIiLCIiLCIiLCIiXX0scmdiYTI1Njp7Y29sb3Jtb2RlbDoicmdiYSIsem1pbkRmbHQ6WzAsMCwwLDBdLHptYXhEZmx0OlsyNTUsMjU1LDI1NSwyNTVdLG1pbjpbMCwwLDAsMF0sbWF4OlsyNTUsMjU1LDI1NSwxXSxmbXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoMCw0KX0sc3VmZml4OlsiIiwiIiwiIiwiIl19LGhzbDp7bWluOlswLDAsMF0sbWF4OlszNjAsMTAwLDEwMF0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCwzKTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSJdfSxoc2xhOnttaW46WzAsMCwwLDBdLG1heDpbMzYwLDEwMCwxMDAsMV0sZm10OmZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2UoMCw0KTtyZXR1cm4gZVsxXT1lWzFdKyIlIixlWzJdPWVbMl0rIiUiLGV9LHN1ZmZpeDpbIlx4YjAiLCIlIiwiJSIsIiJdfX0scGl4ZWxhdGVkU3R5bGU6WyJpbWFnZS1yZW5kZXJpbmc6IG9wdGltaXplU3BlZWQiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IC1vLWNyaXNwLWVkZ2VzIiwiaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0IiwiaW1hZ2UtcmVuZGVyaW5nOiBvcHRpbWl6ZS1jb250cmFzdCIsImltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXMiLCJpbWFnZS1yZW5kZXJpbmc6IHBpeGVsYXRlZCIsIiJdLmpvaW4oIjsgIil9fSx7fV0sMTExMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi9jb25zdGFudHMiKSxvPXQoIi4uLy4uL3NuYXBzaG90L2hlbHBlcnMiKS5JTUFHRV9VUkxfUFJFRklYO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJzb3VyY2UiKSxlLnNvdXJjZSYmIWUuc291cmNlLm1hdGNoKG8pJiZkZWxldGUgZS5zb3VyY2UsZS5faGFzU291cmNlPSEhZS5zb3VyY2U7dmFyIHMsbD1yKCJ6Iik7KGUuX2hhc1o9ISh2b2lkIDA9PT1sfHwhbC5sZW5ndGh8fCFsWzBdfHwhbFswXS5sZW5ndGgpLGUuX2hhc1p8fGUuX2hhc1NvdXJjZSk/KHIoIngwIikscigieTAiKSxyKCJkeCIpLHIoImR5IiksZS5faGFzWj8ocigiY29sb3Jtb2RlbCIsInJnYiIpLHIoInptaW4iLChzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdKS56bWluRGZsdHx8cy5taW4pLHIoInptYXgiLHMuem1heERmbHR8fHMubWF4KSk6ZS5faGFzU291cmNlJiYoZS5jb2xvcm1vZGVsPSJyZ2JhMjU2IixzPWEuY29sb3Jtb2RlbFtlLmNvbG9ybW9kZWxdLGUuem1pbj1zLnptaW5EZmx0LGUuem1heD1zLnptYXhEZmx0KSxyKCJ6c21vb3RoIikscigidGV4dCIpLHIoImhvdmVydGV4dCIpLHIoImhvdmVydGVtcGxhdGUiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vc25hcHNob3QvaGVscGVycyI6OTA4LCIuL2F0dHJpYnV0ZXMiOjExMTAsIi4vY29uc3RhbnRzIjoxMTEyfV0sMTExNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4ieFZhbCJpbiBlJiYodC54PWUueFZhbCksInlWYWwiaW4gZSYmKHQueT1lLnlWYWwpLGUueGEmJih0LnhheGlzPWUueGEpLGUueWEmJih0LnlheGlzPWUueWEpLHQuY29sb3I9ZS5jb2xvcix0LmNvbG9ybW9kZWw9ZS50cmFjZS5jb2xvcm1vZGVsLHQuenx8KHQuej1lLmNvbG9yKSx0fX0se31dLDExMTU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicHJvYmUtaW1hZ2Utc2l6ZS9zeW5jIiksaT10KCIuLi8uLi9zbmFwc2hvdC9oZWxwZXJzIikuSU1BR0VfVVJMX1BSRUZJWCxhPXQoImJ1ZmZlci8iKS5CdWZmZXI7ci5nZXRJbWFnZVNpemU9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKGksIiIpLHI9bmV3IGEoZSwiYmFzZTY0Iik7cmV0dXJuIG4ocil9fSx7Ii4uLy4uL3NuYXBzaG90L2hlbHBlcnMiOjkwOCwiYnVmZmVyLyI6MTEyLCJwcm9iZS1pbWFnZS1zaXplL3N5bmMiOjUwM31dLDExMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9meCIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89dC5jZFswXSxzPW8udHJhY2UsbD10LnhhLGM9dC55YTtpZighKG4uaW5ib3goZS1vLngwLGUtKG8ueDArby53KnMuZHgpLDApPjB8fG4uaW5ib3goci1vLnkwLHItKG8ueTArby5oKnMuZHkpLDApPjApKXt2YXIgdSxmPU1hdGguZmxvb3IoKGUtby54MCkvcy5keCksaD1NYXRoLmZsb29yKE1hdGguYWJzKHItby55MCkvcy5keSk7aWYocy5faGFzWj91PW8ueltoXVtmXTpzLl9oYXNTb3VyY2UmJih1PXMuX2NhbnZhcy5lbC5nZXRDb250ZXh0KCIyZCIpLmdldEltYWdlRGF0YShmLGgsMSwxKS5kYXRhKSx1KXt2YXIgcCxkPW8uaGl8fHMuaG92ZXJpbmZvO2lmKGQpe3ZhciBtPWQuc3BsaXQoIisiKTstMSE9PW0uaW5kZXhPZigiYWxsIikmJihtPVsiY29sb3IiXSksLTEhPT1tLmluZGV4T2YoImNvbG9yIikmJihwPSEwKX12YXIgZyx2PWEuY29sb3Jtb2RlbFtzLmNvbG9ybW9kZWxdLHk9di5jb2xvcm1vZGVsfHxzLmNvbG9ybW9kZWwseD15Lmxlbmd0aCxiPXMuX3NjYWxlcih1KSxfPXYuc3VmZml4LHc9W107KHMuaG92ZXJ0ZW1wbGF0ZXx8cCkmJih3LnB1c2goIlsiK1tiWzBdK19bMF0sYlsxXStfWzFdLGJbMl0rX1syXV0uam9pbigiLCAiKSksND09PXgmJncucHVzaCgiLCAiK2JbM10rX1szXSksdy5wdXNoKCJdIiksdz13LmpvaW4oIiIpLHQuZXh0cmFUZXh0PXkudG9VcHBlckNhc2UoKSsiOiAiK3cpLEFycmF5LmlzQXJyYXkocy5ob3ZlcnRleHQpJiZBcnJheS5pc0FycmF5KHMuaG92ZXJ0ZXh0W2hdKT9nPXMuaG92ZXJ0ZXh0W2hdW2ZdOkFycmF5LmlzQXJyYXkocy50ZXh0KSYmQXJyYXkuaXNBcnJheShzLnRleHRbaF0pJiYoZz1zLnRleHRbaF1bZl0pO3ZhciBUPWMuYzJwKG8ueTArKGgrLjUpKnMuZHkpLGs9by54MCsoZisuNSkqcy5keCxBPW8ueTArKGgrLjUpKnMuZHksTT0iWyIrdS5zbGljZSgwLHMuY29sb3Jtb2RlbC5sZW5ndGgpLmpvaW4oIiwgIikrIl0iO3JldHVybltpLmV4dGVuZEZsYXQodCx7aW5kZXg6W2gsZl0seDA6bC5jMnAoby54MCtmKnMuZHgpLHgxOmwuYzJwKG8ueDArKGYrMSkqcy5keCkseTA6VCx5MTpULGNvbG9yOmIseFZhbDprLHhMYWJlbFZhbDprLHlWYWw6QSx5TGFiZWxWYWw6QSx6TGFiZWxWYWw6TSx0ZXh0OmcsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp7ekxhYmVsOk0sY29sb3JMYWJlbDp3LCJjb2xvclswXUxhYmVsIjpiWzBdK19bMF0sImNvbG9yWzFdTGFiZWwiOmJbMV0rX1sxXSwiY29sb3JbMl1MYWJlbCI6YlsyXStfWzJdLCJjb2xvclszXUxhYmVsIjpiWzNdK19bM119fSldfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZngiOjY3OSwiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjoxMTEyfV0sMTExNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLGV2ZW50RGF0YTp0KCIuL2V2ZW50X2RhdGEiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaW1hZ2UiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCIyZE1hcCIsIm5vU29ydGluZ0J5VmFsdWUiXSxhbmltYXRhYmxlOiExLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuL2F0dHJpYnV0ZXMiOjExMTAsIi4vY2FsYyI6MTExMSwiLi9kZWZhdWx0cyI6MTExMywiLi9ldmVudF9kYXRhIjoxMTE0LCIuL2hvdmVyIjoxMTE2LCIuL3Bsb3QiOjExMTgsIi4vc3R5bGUiOjExMTl9XSwxMTE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9aS5zdHJUcmFuc2xhdGUsbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpLHM9dCgiLi9jb25zdGFudHMiKSxsPWkuaXNJT1MoKXx8aS5pc1NhZmFyaSgpfHxpLmlzSUUoKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7dmFyIHU9ZS54YXhpcyxmPWUueWF4aXMsaD0hKGx8fHQuX2NvbnRleHQuX2V4cG9ydGVkUGxvdCk7aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJpbSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpLGw9ZVswXSxjPWwudHJhY2UscD0oImZhc3QiPT09Yy56c21vb3RofHwhMT09PWMuenNtb290aCYmaCkmJiFjLl9oYXNaJiZjLl9oYXNTb3VyY2UmJiJsaW5lYXIiPT09dS50eXBlJiYibGluZWFyIj09PWYudHlwZTtjLl9yZWFsSW1hZ2U9cDt2YXIgZCxtLGcsdix5LHgsYj1sLnosXz1sLngwLHc9bC55MCxUPWwudyxrPWwuaCxBPWMuZHgsTT1jLmR5O2Zvcih4PTA7dm9pZCAwPT09ZCYmeDxUOylkPXUuYzJwKF8reCpBKSx4Kys7Zm9yKHg9VDt2b2lkIDA9PT1tJiZ4PjA7KW09dS5jMnAoXyt4KkEpLHgtLTtmb3IoeD0wO3ZvaWQgMD09PXYmJng8azspdj1mLmMycCh3K3gqTSkseCsrO2Zvcih4PWs7dm9pZCAwPT09eSYmeD4wOyl5PWYuYzJwKHcreCpNKSx4LS07aWYobTxkJiYoZz1tLG09ZCxkPWcpLHk8diYmKGc9dix2PXkseT1nKSwhcCl7ZD1NYXRoLm1heCgtLjUqdS5fbGVuZ3RoLGQpLG09TWF0aC5taW4oMS41KnUuX2xlbmd0aCxtKSx2PU1hdGgubWF4KC0uNSpmLl9sZW5ndGgsdikseT1NYXRoLm1pbigxLjUqZi5fbGVuZ3RoLHkpfXZhciBTPU1hdGgucm91bmQobS1kKSxFPU1hdGgucm91bmQoeS12KTtpZihTPD0wfHxFPD0wKXtyLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtdKS5leGl0KCkucmVtb3ZlKCl9ZWxzZXt2YXIgTD1yLnNlbGVjdEFsbCgiaW1hZ2UiKS5kYXRhKFtlXSk7TC5lbnRlcigpLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KSxMLmV4aXQoKS5yZW1vdmUoKTt2YXIgQz0hMT09PWMuenNtb290aD9zLnBpeGVsYXRlZFN0eWxlOiIiO2lmKHApe3ZhciBQPWkuc2ltcGxlTWFwKHUucmFuZ2UsdS5yMmwpLEk9aS5zaW1wbGVNYXAoZi5yYW5nZSxmLnIybCksTz1QWzFdPFBbMF0sej1JWzFdPklbMF07aWYoT3x8eil7dmFyIEQ9ZCtTLzIsUj12K0UvMjtDKz0idHJhbnNmb3JtOiIrYShEKyJweCIsUisicHgiKSsic2NhbGUoIisoTz8tMToxKSsiLCIrKHo/LTE6MSkrIikiK2EoLUQrInB4IiwtUisicHgiKSsiOyJ9fUwuYXR0cigic3R5bGUiLEMpO3ZhciBGPW5ldyBQcm9taXNlKChmdW5jdGlvbih0KXtpZihjLl9oYXNaKXQoKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihjLl9jYW52YXMmJmMuX2NhbnZhcy5lbC53aWR0aD09PVQmJmMuX2NhbnZhcy5lbC5oZWlnaHQ9PT1rJiZjLl9jYW52YXMuc291cmNlPT09Yy5zb3VyY2UpdCgpO2Vsc2V7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7ZS53aWR0aD1ULGUuaGVpZ2h0PWs7dmFyIHI9ZS5nZXRDb250ZXh0KCIyZCIpO2MuX2ltYWdlPWMuX2ltYWdlfHxuZXcgSW1hZ2U7dmFyIG49Yy5faW1hZ2U7bi5vbmxvYWQ9ZnVuY3Rpb24oKXtyLmRyYXdJbWFnZShuLDAsMCksYy5fY2FudmFzPXtlbDplLHNvdXJjZTpjLnNvdXJjZX0sdCgpfSxuLnNldEF0dHJpYnV0ZSgic3JjIixjLnNvdXJjZSl9fSkpLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ7aWYoYy5faGFzWil0PUIoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJbZV1bdF19KSkudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlbHNlIGlmKGMuX2hhc1NvdXJjZSlpZihwKXQ9Yy5zb3VyY2U7ZWxzZXt2YXIgZT1jLl9jYW52YXMuZWwuZ2V0Q29udGV4dCgiMmQiKS5nZXRJbWFnZURhdGEoMCwwLFQsaykuZGF0YTt0PUIoKGZ1bmN0aW9uKHQscil7dmFyIG49NCoocipUK3QpO3JldHVybltlW25dLGVbbisxXSxlW24rMl0sZVtuKzNdXX0pKS50b0RhdGFVUkwoImltYWdlL3BuZyIpfUwuYXR0cih7InhsaW5rOmhyZWYiOnQsaGVpZ2h0OkUsd2lkdGg6Uyx4OmQseTp2fSl9KSk7dC5fcHJvbWlzZXMucHVzaChGKX1mdW5jdGlvbiBCKHQpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2Uud2lkdGg9UyxlLmhlaWdodD1FO3ZhciByLG49ZS5nZXRDb250ZXh0KCIyZCIpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQodS5jMnAoXyt0KkEpLWQpLDAsUyl9LG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuY29uc3RyYWluKE1hdGgucm91bmQoZi5jMnAodyt0Kk0pLXYpLDAsRSl9LGg9cy5jb2xvcm1vZGVsW2MuY29sb3Jtb2RlbF0scD1oLmNvbG9ybW9kZWx8fGMuY29sb3Jtb2RlbCxtPWguZm10O2Zvcih4PTA7eDxsLnc7eCsrKXt2YXIgZz1hKHgpLHk9YSh4KzEpO2lmKHkhPT1nJiYhaXNOYU4oeSkmJiFpc05hTihnKSlmb3IodmFyIGI9MDtiPGwuaDtiKyspe3ZhciBUPW8oYiksaz1vKGIrMSk7az09PVR8fGlzTmFOKGspfHxpc05hTihUKXx8IXQoeCxiKXx8KHI9Yy5fc2NhbGVyKHQoeCxiKSksbi5maWxsU3R5bGU9cj9wKyIoIittKHIpLmpvaW4oIiwiKSsiKSI6InJnYmEoMCwwLDAsMCkiLG4uZmlsbFJlY3QoZyxULHktZyxrLVQpKX19cmV0dXJuIGV9fSkpfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9saWIiOjc3NiwiLi9jb25zdGFudHMiOjExMTIsIkBwbG90bHkvZDMiOjU4fV0sMTExOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe24uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLmltIGltYWdlIikuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpfX0seyJAcGxvdGx5L2QzIjo1OH1dLDExMjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRGVlcCxhPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxvPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIikudGVtcGxhdGVkQXJyYXksZj10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxoPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxwPW8oe2VkaXRUeXBlOiJwbG90Iixjb2xvckVkaXRUeXBlOiJwbG90In0pLGQ9e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InBsb3QifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6cy5kZWZhdWx0TGluZSxlZGl0VHlwZToicGxvdCJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sdGhpY2tuZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJjYWxjIn0sbT17dmFsVHlwZToiaW5mb19hcnJheSIsaXRlbXM6W3t2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxnPXUoInN0ZXAiLGkoe30sZCx7cmFuZ2U6bX0pKTtlLmV4cG9ydHM9e21vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJudW1iZXIiLCJkZWx0YSIsImdhdWdlIl0sZGZsdDoibnVtYmVyIn0sdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LGFsaWduOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsZWZ0IiwiY2VudGVyIiwicmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGRvbWFpbjpsKHtuYW1lOiJpbmRpY2F0b3IiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pLHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJwbG90In0sYWxpZ246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdLGVkaXRUeXBlOiJwbG90In0sZm9udDpuKHt9LHAse30pLGVkaXRUeXBlOiJwbG90In0sbnVtYmVyOnt2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJwbG90IixkZXNjcmlwdGlvbjpoKCJ2YWx1ZSIpfSxmb250Om4oe30scCx7fSkscHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZGVsdGE6e3JlZmVyZW5jZTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyJ9LHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSxkZmx0OiJib3R0b20iLGVkaXRUeXBlOiJwbG90In0scmVsYXRpdmU6e3ZhbFR5cGU6ImJvb2xlYW4iLGVkaXRUeXBlOiJwbG90IixkZmx0OiExfSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCIsZGVzY3JpcHRpb246aCgidmFsdWUiKX0saW5jcmVhc2luZzp7c3ltYm9sOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6Zi5JTkNSRUFTSU5HLlNZTUJPTCxlZGl0VHlwZToicGxvdCJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpmLklOQ1JFQVNJTkcuQ09MT1IsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGRlY3JlYXNpbmc6e3N5bWJvbDp7dmFsVHlwZToic3RyaW5nIixkZmx0OmYuREVDUkVBU0lORy5TWU1CT0wsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6Zi5ERUNSRUFTSU5HLkNPTE9SLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxmb250Om4oe30scCx7fSksZWRpdFR5cGU6ImNhbGMifSxnYXVnZTp7c2hhcGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLGVkaXRUeXBlOiJwbG90IixkZmx0OiJhbmd1bGFyIix2YWx1ZXM6WyJhbmd1bGFyIiwiYnVsbGV0Il19LGJhcjppKHt9LGQse2NvbG9yOntkZmx0OiJncmVlbiJ9fSksYmdjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJwbG90In0sYm9yZGVyY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0OnMuZGVmYXVsdExpbmUsZWRpdFR5cGU6InBsb3QifSxib3JkZXJ3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjEsZWRpdFR5cGU6InBsb3QifSxheGlzOmEoe3JhbmdlOm0sdmlzaWJsZTpuKHt9LGMudmlzaWJsZSx7ZGZsdDohMH0pLHRpY2ttb2RlOmMudGlja21vZGUsbnRpY2tzOmMubnRpY2tzLHRpY2swOmMudGljazAsZHRpY2s6Yy5kdGljayx0aWNrdmFsczpjLnRpY2t2YWxzLHRpY2t0ZXh0OmMudGlja3RleHQsdGlja3M6bih7fSxjLnRpY2tzLHtkZmx0OiJvdXRzaWRlIn0pLHRpY2tsZW46Yy50aWNrbGVuLHRpY2t3aWR0aDpjLnRpY2t3aWR0aCx0aWNrY29sb3I6Yy50aWNrY29sb3Isc2hvd3RpY2tsYWJlbHM6Yy5zaG93dGlja2xhYmVscyx0aWNrZm9udDpvKHt9KSx0aWNrYW5nbGU6Yy50aWNrYW5nbGUsdGlja2Zvcm1hdDpjLnRpY2tmb3JtYXQsdGlja2Zvcm1hdHN0b3BzOmMudGlja2Zvcm1hdHN0b3BzLHRpY2twcmVmaXg6Yy50aWNrcHJlZml4LHNob3d0aWNrcHJlZml4OmMuc2hvd3RpY2twcmVmaXgsdGlja3N1ZmZpeDpjLnRpY2tzdWZmaXgsc2hvd3RpY2tzdWZmaXg6Yy5zaG93dGlja3N1ZmZpeCxzZXBhcmF0ZXRob3VzYW5kczpjLnNlcGFyYXRldGhvdXNhbmRzLGV4cG9uZW50Zm9ybWF0OmMuZXhwb25lbnRmb3JtYXQsbWluZXhwb25lbnQ6Yy5taW5leHBvbmVudCxzaG93ZXhwb25lbnQ6Yy5zaG93ZXhwb25lbnQsZWRpdFR5cGU6InBsb3QifSwicGxvdCIpLHN0ZXBzOmcsdGhyZXNob2xkOntsaW5lOntjb2xvcjpuKHt9LGQubGluZS5jb2xvcix7fSksd2lkdGg6bih7fSxkLmxpbmUud2lkdGgse2RmbHQ6MX0pLGVkaXRUeXBlOiJwbG90In0sdGhpY2tuZXNzOm4oe30sZC50aGlja25lc3Mse2RmbHQ6Ljg1fSksdmFsdWU6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6ITF9LGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2fV0sMTEyMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0iaW5kaWNhdG9yIixyLnBsb3Q9ZnVuY3Rpb24odCxlLGksYSl7bi5wbG90QmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxpLGEpe24uY2xlYW5CYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9fSx7Ii4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTB9XSwxMTIyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPVtdLG49ZS52YWx1ZTsibnVtYmVyIiE9dHlwZW9mIGUuX2xhc3RWYWx1ZSYmKGUuX2xhc3RWYWx1ZT1lLnZhbHVlKTt2YXIgaT1lLl9sYXN0VmFsdWUsYT1pO3JldHVybiBlLl9oYXNEZWx0YSYmIm51bWJlciI9PXR5cGVvZiBlLmRlbHRhLnJlZmVyZW5jZSYmKGE9ZS5kZWx0YS5yZWZlcmVuY2UpLHJbMF09e3k6bixsYXN0WTppLGRlbHRhOm4tYSxyZWxhdGl2ZURlbHRhOihuLWEpL2F9LHJ9fX0se31dLDExMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtkZWZhdWx0TnVtYmVyRm9udFNpemU6ODAsYnVsbGV0TnVtYmVyRG9tYWluU2l6ZTouMjUsYnVsbGV0UGFkZGluZzouMDI1LGlubmVyUmFkaXVzOi43NSx2YWx1ZVRoaWNrbmVzczouNSx0aXRsZVBhZGRpbmc6NSxob3Jpem9udGFsUGFkZGluZzoxMH19LHt9XSwxMTI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi9jb25zdGFudHMuanMiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIiksdT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIiksZj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyIpO2Z1bmN0aW9uIGgodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmdhdWdlLnN0ZXBzLHIsYSl9cigiY29sb3IiKSxyKCJsaW5lLmNvbG9yIikscigibGluZS53aWR0aCIpLHIoInJhbmdlIikscigidGhpY2tuZXNzIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixwKXtmdW5jdGlvbiBkKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YShlLHAsZCksZCgibW9kZSIpLGUuX2hhc051bWJlcj0tMSE9PWUubW9kZS5pbmRleE9mKCJudW1iZXIiKSxlLl9oYXNEZWx0YT0tMSE9PWUubW9kZS5pbmRleE9mKCJkZWx0YSIpLGUuX2hhc0dhdWdlPS0xIT09ZS5tb2RlLmluZGV4T2YoImdhdWdlIik7dmFyIG09ZCgidmFsdWUiKTtlLl9yYW5nZT1bMCwibnVtYmVyIj09dHlwZW9mIG0/MS41Km06MV07dmFyIGcsdix5LHgsYixfLHc9bmV3IEFycmF5KDIpO2Z1bmN0aW9uIFQodCxlKXtyZXR1cm4gbi5jb2VyY2UoeSx4LGkuZ2F1Z2UsdCxlKX1mdW5jdGlvbiBrKHQsZSl7cmV0dXJuIG4uY29lcmNlKGIsXyxpLmdhdWdlLmF4aXMsdCxlKX1pZihlLl9oYXNOdW1iZXImJihkKCJudW1iZXIudmFsdWVmb3JtYXQiKSxkKCJudW1iZXIuZm9udC5jb2xvciIscC5mb250LmNvbG9yKSxkKCJudW1iZXIuZm9udC5mYW1pbHkiLHAuZm9udC5mYW1pbHkpLGQoIm51bWJlci5mb250LnNpemUiKSx2b2lkIDA9PT1lLm51bWJlci5mb250LnNpemUmJihlLm51bWJlci5mb250LnNpemU9bC5kZWZhdWx0TnVtYmVyRm9udFNpemUsd1swXT0hMCksZCgibnVtYmVyLnByZWZpeCIpLGQoIm51bWJlci5zdWZmaXgiKSxnPWUubnVtYmVyLmZvbnQuc2l6ZSksZS5faGFzRGVsdGEmJihkKCJkZWx0YS5mb250LmNvbG9yIixwLmZvbnQuY29sb3IpLGQoImRlbHRhLmZvbnQuZmFtaWx5IixwLmZvbnQuZmFtaWx5KSxkKCJkZWx0YS5mb250LnNpemUiKSx2b2lkIDA9PT1lLmRlbHRhLmZvbnQuc2l6ZSYmKGUuZGVsdGEuZm9udC5zaXplPShlLl9oYXNOdW1iZXI/LjU6MSkqKGd8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSx3WzFdPSEwKSxkKCJkZWx0YS5yZWZlcmVuY2UiLGUudmFsdWUpLGQoImRlbHRhLnJlbGF0aXZlIiksZCgiZGVsdGEudmFsdWVmb3JtYXQiLGUuZGVsdGEucmVsYXRpdmU/IjIlIjoiIiksZCgiZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wiKSxkKCJkZWx0YS5pbmNyZWFzaW5nLmNvbG9yIiksZCgiZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wiKSxkKCJkZWx0YS5kZWNyZWFzaW5nLmNvbG9yIiksZCgiZGVsdGEucG9zaXRpb24iKSx2PWUuZGVsdGEuZm9udC5zaXplKSxlLl9zY2FsZU51bWJlcnM9KCFlLl9oYXNOdW1iZXJ8fHdbMF0pJiYoIWUuX2hhc0RlbHRhfHx3WzFdKXx8ITEsZCgidGl0bGUuZm9udC5jb2xvciIscC5mb250LmNvbG9yKSxkKCJ0aXRsZS5mb250LmZhbWlseSIscC5mb250LmZhbWlseSksZCgidGl0bGUuZm9udC5zaXplIiwuMjUqKGd8fHZ8fGwuZGVmYXVsdE51bWJlckZvbnRTaXplKSksZCgidGl0bGUudGV4dCIpLGUuX2hhc0dhdWdlKXsoeT10LmdhdWdlKXx8KHk9e30pLHg9by5uZXdDb250YWluZXIoZSwiZ2F1Z2UiKSxUKCJzaGFwZSIpLChlLl9pc0J1bGxldD0iYnVsbGV0Ij09PWUuZ2F1Z2Uuc2hhcGUpfHxkKCJ0aXRsZS5hbGlnbiIsImNlbnRlciIpLChlLl9pc0FuZ3VsYXI9ImFuZ3VsYXIiPT09ZS5nYXVnZS5zaGFwZSl8fGQoImFsaWduIiwiY2VudGVyIiksVCgiYmdjb2xvciIscC5wYXBlcl9iZ2NvbG9yKSxUKCJib3JkZXJ3aWR0aCIpLFQoImJvcmRlcmNvbG9yIiksVCgiYmFyLmNvbG9yIiksVCgiYmFyLmxpbmUuY29sb3IiKSxUKCJiYXIubGluZS53aWR0aCIpLFQoImJhci50aGlja25lc3MiLGwudmFsdWVUaGlja25lc3MqKCJidWxsZXQiPT09ZS5nYXVnZS5zaGFwZT8uNToxKSkscyh5LHgse25hbWU6InN0ZXBzIixoYW5kbGVJdGVtRGVmYXVsdHM6aH0pLFQoInRocmVzaG9sZC52YWx1ZSIpLFQoInRocmVzaG9sZC50aGlja25lc3MiKSxUKCJ0aHJlc2hvbGQubGluZS53aWR0aCIpLFQoInRocmVzaG9sZC5saW5lLmNvbG9yIiksYj17fSx5JiYoYj15LmF4aXN8fHt9KSxfPW8ubmV3Q29udGFpbmVyKHgsImF4aXMiKSxrKCJ2aXNpYmxlIiksZS5fcmFuZ2U9aygicmFuZ2UiLGUuX3JhbmdlKTt2YXIgQT17b3V0ZXJUaWNrczohMH07YyhiLF8saywibGluZWFyIiksZihiLF8saywibGluZWFyIixBKSx1KGIsXyxrLEEpfWVsc2UgZCgidGl0bGUuYWxpZ24iLCJjZW50ZXIiKSxkKCJhbGlnbiIsImNlbnRlciIpLGUuX2lzQW5ndWxhcj1lLl9pc0J1bGxldD0hMTtlLl9sZW5ndGg9bnVsbH19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19sYWJlbF9kZWZhdWx0cyI6ODQ5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vdGlja19tYXJrX2RlZmF1bHRzIjo4NTAsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi90aWNrX3ZhbHVlX2RlZmF1bHRzIjo4NTEsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuL2F0dHJpYnV0ZXMiOjExMjAsIi4vY29uc3RhbnRzLmpzIjoxMTIzfV0sMTEyNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJpbmRpY2F0b3IiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInN2ZyIsIm5vT3BhY2l0eSIsIm5vSG92ZXIiXSxhbmltYXRhYmxlOiEwLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLnN1cHBseURlZmF1bHRzLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vcGxvdCIpLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTEyMCwiLi9iYXNlX3Bsb3QiOjExMjEsIi4vY2FsYyI6MTEyMiwiLi9kZWZhdWx0cyI6MTEyNCwiLi9wbG90IjoxMTI2fV0sMTEyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlLGE9dCgiZDMtaW50ZXJwb2xhdGUiKS5pbnRlcnBvbGF0ZU51bWJlcixvPXQoIi4uLy4uL2xpYiIpLHM9by5zdHJTY2FsZSxsPW8uc3RyVHJhbnNsYXRlLGM9by5yYWQyZGVnLHU9dCgiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCIpLk1JRF9TSElGVCxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi9jb25zdGFudHMiKSxwPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2RlZmF1bHRzIiksZz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vcG9zaXRpb25fZGVmYXVsdHMiKSx2PXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9sYXlvdXRfYXR0cmlidXRlcyIpLHk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLHg9e2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9LGI9e2xlZnQ6MCxjZW50ZXI6LjUscmlnaHQ6MX0sXz0vW3l6YWZwblx4YjVta01HVFBFWlldLztmdW5jdGlvbiB3KHQpe3JldHVybiB0JiZ0LmR1cmF0aW9uPjB9ZnVuY3Rpb24gVCh0KXt0LmVhY2goKGZ1bmN0aW9uKHQpe3kuc3Ryb2tlKG4uc2VsZWN0KHRoaXMpLHQubGluZS5jb2xvcil9KSkuZWFjaCgoZnVuY3Rpb24odCl7eS5maWxsKG4uc2VsZWN0KHRoaXMpLHQuY29sb3IpfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5saW5lLndpZHRofSkpfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQuX2Z1bGxMYXlvdXQsaT1vLmV4dGVuZEZsYXQoe3R5cGU6ImxpbmVhciIsdGlja3M6Im91dHNpZGUiLHJhbmdlOnIsc2hvd2xpbmU6ITB9LGUpLGE9e3R5cGU6ImxpbmVhciIsX2lkOiJ4IitlLl9pZH0scz17bGV0dGVyOiJ4Iixmb250Om4uZm9udCxub0hvdmVyOiEwLG5vVGlja3NvbjohMH07ZnVuY3Rpb24gbCh0LGUpe3JldHVybiBvLmNvZXJjZShpLGEsdix0LGUpfXJldHVybiBtKGksYSxsLHMsbiksZyhpLGEsbCxzKSxhfWZ1bmN0aW9uIEEodCxlLHIpe3JldHVybltNYXRoLm1pbihlL3Qud2lkdGgsci90LmhlaWdodCksdCxlKyJ4IityXX1mdW5jdGlvbiBNKHQsZSxyLGkpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJ0ZXh0Iiksbz1uLnNlbGVjdChhKTtyZXR1cm4gby50ZXh0KHQpLmF0dHIoIngiLDApLmF0dHIoInkiLDApLmF0dHIoInRleHQtYW5jaG9yIixyKS5hdHRyKCJkYXRhLXVuZm9ybWF0dGVkIix0KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLGkpLmNhbGwoZi5mb250LGUpLGYuYkJveChvLm5vZGUoKSl9ZnVuY3Rpb24gUyh0LGUscixuLGksYSl7dmFyIHM9Il9jYWNoZSIrZTt0W3NdJiZ0W3NdLmtleT09PWl8fCh0W3NdPXtrZXk6aSx2YWx1ZTpyfSk7dmFyIGw9by5hZ2dOdW1zKGEsbnVsbCxbdFtzXS52YWx1ZSxuXSwyKTtyZXR1cm4gdFtzXS52YWx1ZT1sLGx9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe3ZhciBnLHY9dC5fZnVsbExheW91dDt3KHIpJiZtJiYoZz1tKCkpLG8ubWFrZVRyYWNlR3JvdXBzKHYuX2luZGljYXRvcmxheWVyLGUsInRyYWNlIikuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIG0sRSxMLEMsUCxJPWVbMF0udHJhY2UsTz1uLnNlbGVjdCh0aGlzKSx6PUkuX2hhc0dhdWdlLEQ9SS5faXNBbmd1bGFyLFI9SS5faXNCdWxsZXQsRj1JLmRvbWFpbixCPXt3OnYuX3NpemUudyooRi54WzFdLUYueFswXSksaDp2Ll9zaXplLmgqKEYueVsxXS1GLnlbMF0pLGw6di5fc2l6ZS5sK3YuX3NpemUudypGLnhbMF0scjp2Ll9zaXplLnIrdi5fc2l6ZS53KigxLUYueFsxXSksdDp2Ll9zaXplLnQrdi5fc2l6ZS5oKigxLUYueVsxXSksYjp2Ll9zaXplLmIrdi5fc2l6ZS5oKkYueVswXX0sTj1CLmwrQi53LzIsaj1CLnQrQi5oLzIsVT1NYXRoLm1pbihCLncvMixCLmgpLFY9aC5pbm5lclJhZGl1cypVLEg9SS5hbGlnbnx8ImNlbnRlciI7aWYoRT1qLHope2lmKEQmJihtPU4sRT1qK1UvMixMPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguc3FydCh0LndpZHRoLzIqKHQud2lkdGgvMikrdC5oZWlnaHQqdC5oZWlnaHQpO3JldHVybltlL3IsdCxlXX0odCwuOSpWKX0pLFIpe3ZhciBxPWguYnVsbGV0UGFkZGluZyxHPTEtaC5idWxsZXROdW1iZXJEb21haW5TaXplK3E7bT1CLmwrKEcrKDEtRykqYltIXSkqQi53LEw9ZnVuY3Rpb24odCl7cmV0dXJuIEEodCwoaC5idWxsZXROdW1iZXJEb21haW5TaXplLXEpKkIudyxCLmgpfX19ZWxzZSBtPUIubCtiW0hdKkIudyxMPWZ1bmN0aW9uKHQpe3JldHVybiBBKHQsQi53LEIuaCl9OyFmdW5jdGlvbih0LGUscixpKXt2YXIgYyx1LGgsbT1yWzBdLnRyYWNlLGc9aS5udW1iZXJzWCx2PWkubnVtYmVyc1ksVD1tLmFsaWdufHwiY2VudGVyIixBPXhbVF0sRT1pLnRyYW5zaXRpb25PcHRzLEw9aS5vbkNvbXBsZXRlLEM9by5lbnN1cmVTaW5nbGUoZSwiZyIsIm51bWJlcnMiKSxQPVtdO20uX2hhc051bWJlciYmUC5wdXNoKCJudW1iZXIiKTttLl9oYXNEZWx0YSYmKFAucHVzaCgiZGVsdGEiKSwibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiZQLnJldmVyc2UoKSk7dmFyIEk9Qy5zZWxlY3RBbGwoInRleHQiKS5kYXRhKFApO2Z1bmN0aW9uIE8oZSxyLG4saSl7aWYoIWUubWF0Y2goInMiKXx8bj49MD09aT49MHx8cihuKS5zbGljZSgtMSkubWF0Y2goXyl8fHIoaSkuc2xpY2UoLTEpLm1hdGNoKF8pKXJldHVybiByO3ZhciBhPWUuc2xpY2UoKS5yZXBsYWNlKCJzIiwiZiIpLnJlcGxhY2UoL1xkKy8sKGZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUludCh0KS0xfSkpLG89ayh0LHt0aWNrZm9ybWF0OmF9KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQpPDE/ZC50aWNrVGV4dChvLHQpLnRleHQ6cih0KX19SS5lbnRlcigpLmFwcGVuZCgidGV4dCIpLEkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbigpe3JldHVybiBBfSkpLmF0dHIoImNsYXNzIiwoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuYXR0cigieCIsbnVsbCkuYXR0cigieSIsbnVsbCkuYXR0cigiZHgiLG51bGwpLmF0dHIoImR5IixudWxsKSxJLmV4aXQoKS5yZW1vdmUoKTt2YXIgeixEPW0ubW9kZSttLmFsaWduO20uX2hhc0RlbHRhJiYoej1mdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLmRlbHRhLnZhbHVlZm9ybWF0fSxtLl9yYW5nZSk7ZS5zZXRTY2FsZSgpLGQucHJlcFRpY2tzKGUpO3ZhciBpPWZ1bmN0aW9uKHQpe3JldHVybiBkLnRpY2tUZXh0KGUsdCkudGV4dH0sbz1mdW5jdGlvbih0KXtyZXR1cm4gbS5kZWx0YS5yZWxhdGl2ZT90LnJlbGF0aXZlRGVsdGE6dC5kZWx0YX0scz1mdW5jdGlvbih0LGUpe3JldHVybiAwPT09dHx8Im51bWJlciIhPXR5cGVvZiB0fHxpc05hTih0KT8iLSI6KHQ+MD9tLmRlbHRhLmluY3JlYXNpbmcuc3ltYm9sOm0uZGVsdGEuZGVjcmVhc2luZy5zeW1ib2wpK2UodCl9LGw9ZnVuY3Rpb24odCl7cmV0dXJuIHQuZGVsdGE+PTA/bS5kZWx0YS5pbmNyZWFzaW5nLmNvbG9yOm0uZGVsdGEuZGVjcmVhc2luZy5jb2xvcn07dm9pZCAwPT09bS5fZGVsdGFMYXN0VmFsdWUmJihtLl9kZWx0YUxhc3RWYWx1ZT1vKHJbMF0pKTt2YXIgYz1DLnNlbGVjdCgidGV4dC5kZWx0YSIpO2Z1bmN0aW9uIGgoKXtjLnRleHQocyhvKHJbMF0pLGkpKS5jYWxsKHkuZmlsbCxsKHJbMF0pKS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXJldHVybiBjLmNhbGwoZi5mb250LG0uZGVsdGEuZm9udCkuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6bS5fZGVsdGFMYXN0VmFsdWV9KSksdyhFKT9jLnRyYW5zaXRpb24oKS5kdXJhdGlvbihFLmR1cmF0aW9uKS5lYXNlKEUuZWFzaW5nKS50d2VlbigidGV4dCIsKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyksZT1vKHJbMF0pLGM9bS5fZGVsdGFMYXN0VmFsdWUsdT1PKG0uZGVsdGEudmFsdWVmb3JtYXQsaSxjLGUpLGY9YShjLGUpO3JldHVybiBtLl9kZWx0YUxhc3RWYWx1ZT1lLGZ1bmN0aW9uKGUpe3QudGV4dChzKGYoZSksdSkpLHQuY2FsbCh5LmZpbGwsbCh7ZGVsdGE6ZihlKX0pKX19KSkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtoKCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7aCgpLEwmJkwoKX0pKTpoKCksdT1NKHMobyhyWzBdKSxpKSxtLmRlbHRhLmZvbnQsQSx0KSxjfSgpLEQrPW0uZGVsdGEucG9zaXRpb24rbS5kZWx0YS5mb250LnNpemUrbS5kZWx0YS5mb250LmZhbWlseSttLmRlbHRhLnZhbHVlZm9ybWF0LEQrPW0uZGVsdGEuaW5jcmVhc2luZy5zeW1ib2wrbS5kZWx0YS5kZWNyZWFzaW5nLnN5bWJvbCxoPXUpO20uX2hhc051bWJlciYmKCFmdW5jdGlvbigpe3ZhciBlPWsodCx7dGlja2Zvcm1hdDptLm51bWJlci52YWx1ZWZvcm1hdH0sbS5fcmFuZ2UpO2Uuc2V0U2NhbGUoKSxkLnByZXBUaWNrcyhlKTt2YXIgaT1mdW5jdGlvbih0KXtyZXR1cm4gZC50aWNrVGV4dChlLHQpLnRleHR9LG89bS5udW1iZXIuc3VmZml4LHM9bS5udW1iZXIucHJlZml4LGw9Qy5zZWxlY3QoInRleHQubnVtYmVyIik7ZnVuY3Rpb24gdSgpe3ZhciBlPSJudW1iZXIiPT10eXBlb2YgclswXS55P3MraShyWzBdLnkpK286Ii0iO2wudGV4dChlKS5jYWxsKGYuZm9udCxtLm51bWJlci5mb250KS5jYWxsKHAuY29udmVydFRvVHNwYW5zLHQpfXcoRSk/bC50cmFuc2l0aW9uKCkuZHVyYXRpb24oRS5kdXJhdGlvbikuZWFzZShFLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt1KCksTCYmTCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7dSgpLEwmJkwoKX0pKS5hdHRyVHdlZW4oInRleHQiLChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpLGU9YShyWzBdLmxhc3RZLHJbMF0ueSk7bS5fbGFzdFZhbHVlPXJbMF0ueTt2YXIgbD1PKG0ubnVtYmVyLnZhbHVlZm9ybWF0LGksclswXS5sYXN0WSxyWzBdLnkpO3JldHVybiBmdW5jdGlvbihyKXt0LnRleHQocytsKGUocikpK28pfX0pKTp1KCksYz1NKHMraShyWzBdLnkpK28sbS5udW1iZXIuZm9udCxBLHQpfSgpLEQrPW0ubnVtYmVyLmZvbnQuc2l6ZSttLm51bWJlci5mb250LmZhbWlseSttLm51bWJlci52YWx1ZWZvcm1hdCttLm51bWJlci5zdWZmaXgrbS5udW1iZXIucHJlZml4LGg9Yyk7aWYobS5faGFzRGVsdGEmJm0uX2hhc051bWJlcil7dmFyIFIsRixCPVsoYy5sZWZ0K2MucmlnaHQpLzIsKGMudG9wK2MuYm90dG9tKS8yXSxOPVsodS5sZWZ0K3UucmlnaHQpLzIsKHUudG9wK3UuYm90dG9tKS8yXSxqPS43NSptLmRlbHRhLmZvbnQuc2l6ZTsibGVmdCI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1TKG0sImRlbHRhUG9zIiwwLC0xKihjLndpZHRoKmJbbS5hbGlnbl0rdS53aWR0aCooMS1iW20uYWxpZ25dKStqKSxELE1hdGgubWluKSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6dS5sZWZ0K1IscmlnaHQ6Yy5yaWdodCx0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksInJpZ2h0Ij09PW0uZGVsdGEucG9zaXRpb24mJihSPVMobSwiZGVsdGFQb3MiLDAsYy53aWR0aCooMS1iW20uYWxpZ25dKSt1LndpZHRoKmJbbS5hbGlnbl0raixELE1hdGgubWF4KSxGPUJbMV0tTlsxXSxoPXt3aWR0aDpjLndpZHRoK3Uud2lkdGgraixoZWlnaHQ6TWF0aC5tYXgoYy5oZWlnaHQsdS5oZWlnaHQpLGxlZnQ6Yy5sZWZ0LHJpZ2h0OnUucmlnaHQrUix0b3A6TWF0aC5taW4oYy50b3AsdS50b3ArRiksYm90dG9tOk1hdGgubWF4KGMuYm90dG9tLHUuYm90dG9tK0YpfSksImJvdHRvbSI9PT1tLmRlbHRhLnBvc2l0aW9uJiYoUj1udWxsLEY9dS5oZWlnaHQsaD17d2lkdGg6TWF0aC5tYXgoYy53aWR0aCx1LndpZHRoKSxoZWlnaHQ6Yy5oZWlnaHQrdS5oZWlnaHQsbGVmdDpNYXRoLm1pbihjLmxlZnQsdS5sZWZ0KSxyaWdodDpNYXRoLm1heChjLnJpZ2h0LHUucmlnaHQpLHRvcDpjLmJvdHRvbS1jLmhlaWdodCxib3R0b206Yy5ib3R0b20rdS5oZWlnaHR9KSwidG9wIj09PW0uZGVsdGEucG9zaXRpb24mJihSPW51bGwsRj1jLnRvcCxoPXt3aWR0aDpNYXRoLm1heChjLndpZHRoLHUud2lkdGgpLGhlaWdodDpjLmhlaWdodCt1LmhlaWdodCxsZWZ0Ok1hdGgubWluKGMubGVmdCx1LmxlZnQpLHJpZ2h0Ok1hdGgubWF4KGMucmlnaHQsdS5yaWdodCksdG9wOmMuYm90dG9tLWMuaGVpZ2h0LXUuaGVpZ2h0LGJvdHRvbTpjLmJvdHRvbX0pLHouYXR0cih7ZHg6UixkeTpGfSl9KG0uX2hhc051bWJlcnx8bS5faGFzRGVsdGEpJiZDLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQ9aS5udW1iZXJzU2NhbGVyKGgpO0QrPXRbMl07dmFyIGUscj1TKG0sIm51bWJlcnNTY2FsZSIsMSx0WzBdLEQsTWF0aC5taW4pO20uX3NjYWxlTnVtYmVyc3x8KHI9MSksZT1tLl9pc0FuZ3VsYXI/di1yKmguYm90dG9tOnYtciooaC50b3AraC5ib3R0b20pLzIsbS5fbnVtYmVyc1RvcD1yKmgudG9wK2U7dmFyIG49aFtUXTsiY2VudGVyIj09PVQmJihuPShoLmxlZnQraC5yaWdodCkvMik7dmFyIGE9Zy1yKm47cmV0dXJuIGE9UyhtLCJudW1iZXJzVHJhbnNsYXRlIiwwLGEsRCxNYXRoLm1heCksbChhLGUpK3Mocil9KSl9KHQsTyxlLHtudW1iZXJzWDptLG51bWJlcnNZOkUsbnVtYmVyc1NjYWxlcjpMLHRyYW5zaXRpb25PcHRzOnIsb25Db21wbGV0ZTpnfSkseiYmKEM9e3JhbmdlOkkuZ2F1Z2UuYXhpcy5yYW5nZSxjb2xvcjpJLmdhdWdlLmJnY29sb3IsbGluZTp7Y29sb3I6SS5nYXVnZS5ib3JkZXJjb2xvcix3aWR0aDowfSx0aGlja25lc3M6MX0sUD17cmFuZ2U6SS5nYXVnZS5heGlzLnJhbmdlLGNvbG9yOiJyZ2JhKDAsIDAsIDAsIDApIixsaW5lOntjb2xvcjpJLmdhdWdlLmJvcmRlcmNvbG9yLHdpZHRoOkkuZ2F1Z2UuYm9yZGVyd2lkdGh9LHRoaWNrbmVzczoxfSk7dmFyIFk9Ty5zZWxlY3RBbGwoImcuYW5ndWxhciIpLmRhdGEoRD9lOltdKTtZLmV4aXQoKS5yZW1vdmUoKTt2YXIgVz1PLnNlbGVjdEFsbCgiZy5hbmd1bGFyYXhpcyIpLmRhdGEoRD9lOltdKTtXLmV4aXQoKS5yZW1vdmUoKSxEJiZmdW5jdGlvbih0LGUscixhKXt2YXIgbyxzLGYsaCxwPXJbMF0udHJhY2UsbT1hLnNpemUsZz1hLnJhZGl1cyx2PWEuaW5uZXJSYWRpdXMseT1hLmdhdWdlQmcseD1hLmdhdWdlT3V0bGluZSxiPVttLmwrbS53LzIsbS50K20uaC8yK2cvMl0sXz1hLmdhdWdlLEE9YS5sYXllcixNPWEudHJhbnNpdGlvbk9wdHMsUz1hLm9uQ29tcGxldGUsRT1NYXRoLlBJLzI7ZnVuY3Rpb24gTCh0KXt2YXIgZT1wLmdhdWdlLmF4aXMucmFuZ2VbMF0scj0odC1lKS8ocC5nYXVnZS5heGlzLnJhbmdlWzFdLWUpKk1hdGguUEktRTtyZXR1cm4gcjwtRT8tRTpyPkU/RTpyfWZ1bmN0aW9uIEModCl7cmV0dXJuIG4uc3ZnLmFyYygpLmlubmVyUmFkaXVzKCh2K2cpLzItdC8yKihnLXYpKS5vdXRlclJhZGl1cygoditnKS8yK3QvMiooZy12KSkuc3RhcnRBbmdsZSgtRSl9ZnVuY3Rpb24gUCh0KXt0LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gQyh0LnRoaWNrbmVzcykuc3RhcnRBbmdsZShMKHQucmFuZ2VbMF0pKS5lbmRBbmdsZShMKHQucmFuZ2VbMV0pKSgpfSkpfV8uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJhbmd1bGFyIiwhMCksXy5hdHRyKCJ0cmFuc2Zvcm0iLGwoYlswXSxiWzFdKSksQS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImFuZ3VsYXJheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxBLnNlbGVjdEFsbCgiZy54YW5ndWxhcmF4aXN0aWNrLHBhdGgsdGV4dCIpLnJlbW92ZSgpLChvPWsodCxwLmdhdWdlLmF4aXMpKS50eXBlPSJsaW5lYXIiLG8ucmFuZ2U9cC5nYXVnZS5heGlzLnJhbmdlLG8uX2lkPSJ4YW5ndWxhcmF4aXMiLG8udGlja2xhYmVsb3ZlcmZsb3c9ImFsbG93IixvLnNldFNjYWxlKCk7dmFyIEk9ZnVuY3Rpb24odCl7cmV0dXJuKG8ucmFuZ2VbMF0tdC54KS8oby5yYW5nZVsxXS1vLnJhbmdlWzBdKSpNYXRoLlBJK01hdGguUEl9LE89e30sej1kLm1ha2VMYWJlbEZucyhvLDApLmxhYmVsU3RhbmRvZmY7Ty54Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KTtyZXR1cm4gTWF0aC5jb3MoZSkqen0sTy55Rm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguc2luKGUpPjA/LjI6MTtyZXR1cm4tTWF0aC5zaW4oZSkqKHordC5mb250U2l6ZSpyKStNYXRoLmFicyhNYXRoLmNvcyhlKSkqKHQuZm9udFNpemUqdSl9LE8uYW5jaG9yRm49ZnVuY3Rpb24odCl7dmFyIGU9SSh0KSxyPU1hdGguY29zKGUpO3JldHVybiBNYXRoLmFicyhyKTwuMT8ibWlkZGxlIjpyPjA/InN0YXJ0IjoiZW5kIn0sTy5oZWlnaHRGbj1mdW5jdGlvbih0LGUscil7dmFyIG49SSh0KTtyZXR1cm4tLjUqKDErTWF0aC5zaW4obikpKnJ9O3ZhciBEPWZ1bmN0aW9uKHQpe3JldHVybiBsKGJbMF0rZypNYXRoLmNvcyh0KSxiWzFdLWcqTWF0aC5zaW4odCkpfTtmPWZ1bmN0aW9uKHQpe3JldHVybiBEKEkodCkpfTtpZihzPWQuY2FsY1RpY2tzKG8pLGg9ZC5nZXRUaWNrU2lnbnMobylbMl0sby52aXNpYmxlKXtoPSJpbnNpZGUiPT09by50aWNrcz8tMToxO3ZhciBSPShvLmxpbmV3aWR0aHx8MSkvMjtkLmRyYXdUaWNrcyh0LG8se3ZhbHM6cyxsYXllcjpBLHBhdGg6Ik0iK2gqUisiLDBoIitoKm8udGlja2xlbix0cmFuc0ZuOmZ1bmN0aW9uKHQpe3ZhciBlPUkodCk7cmV0dXJuIEQoZSkrInJvdGF0ZSgiKy1jKGUpKyIpIn19KSxkLmRyYXdMYWJlbHModCxvLHt2YWxzOnMsbGF5ZXI6QSx0cmFuc0ZuOmYsbGFiZWxGbnM6T30pfXZhciBGPVt5XS5jb25jYXQocC5nYXVnZS5zdGVwcyksQj1fLnNlbGVjdEFsbCgiZy5iZy1hcmMiKS5kYXRhKEYpO0IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJiZy1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKSxCLnNlbGVjdCgicGF0aCIpLmNhbGwoUCkuY2FsbChUKSxCLmV4aXQoKS5yZW1vdmUoKTt2YXIgTj1DKHAuZ2F1Z2UuYmFyLnRoaWNrbmVzcyksaj1fLnNlbGVjdEFsbCgiZy52YWx1ZS1hcmMiKS5kYXRhKFtwLmdhdWdlLmJhcl0pO2ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ2YWx1ZS1hcmMiLCEwKS5hcHBlbmQoInBhdGgiKTt2YXIgVT1qLnNlbGVjdCgicGF0aCIpO3coTSk/KFUudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0uZHVyYXRpb24pLmVhc2UoTS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7UyYmUygpfSkpLmF0dHJUd2VlbigiZCIsKFY9TixIPUwoclswXS5sYXN0WSkscT1MKHJbMF0ueSksZnVuY3Rpb24oKXt2YXIgdD1pKEgscSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBWLmVuZEFuZ2xlKHQoZSkpKCl9fSkpLHAuX2xhc3RWYWx1ZT1yWzBdLnkpOlUuYXR0cigiZCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/Ti5lbmRBbmdsZShMKHJbMF0ueSkpOiJNMCwwWiIpO3ZhciBWLEgscTtVLmNhbGwoVCksai5leGl0KCkucmVtb3ZlKCksRj1bXTt2YXIgRz1wLmdhdWdlLnRocmVzaG9sZC52YWx1ZTsoR3x8MD09PUcpJiZGLnB1c2goe3JhbmdlOltHLEddLGNvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmNvbG9yLGxpbmU6e2NvbG9yOnAuZ2F1Z2UudGhyZXNob2xkLmxpbmUuY29sb3Isd2lkdGg6cC5nYXVnZS50aHJlc2hvbGQubGluZS53aWR0aH0sdGhpY2tuZXNzOnAuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzc30pO3ZhciBZPV8uc2VsZWN0QWxsKCJnLnRocmVzaG9sZC1hcmMiKS5kYXRhKEYpO1kuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0aHJlc2hvbGQtYXJjIiwhMCkuYXBwZW5kKCJwYXRoIiksWS5zZWxlY3QoInBhdGgiKS5jYWxsKFApLmNhbGwoVCksWS5leGl0KCkucmVtb3ZlKCk7dmFyIFc9Xy5zZWxlY3RBbGwoImcuZ2F1Z2Utb3V0bGluZSIpLmRhdGEoW3hdKTtXLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiZ2F1Z2Utb3V0bGluZSIsITApLmFwcGVuZCgicGF0aCIpLFcuc2VsZWN0KCJwYXRoIikuY2FsbChQKS5jYWxsKFQpLFcuZXhpdCgpLnJlbW92ZSgpfSh0LDAsZSx7cmFkaXVzOlUsaW5uZXJSYWRpdXM6VixnYXVnZTpZLGxheWVyOlcsc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBYPU8uc2VsZWN0QWxsKCJnLmJ1bGxldCIpLmRhdGEoUj9lOltdKTtYLmV4aXQoKS5yZW1vdmUoKTt2YXIgWj1PLnNlbGVjdEFsbCgiZy5idWxsZXRheGlzIikuZGF0YShSP2U6W10pO1ouZXhpdCgpLnJlbW92ZSgpLFImJmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbyxzLGMsdT1yWzBdLnRyYWNlLGY9bi5nYXVnZSxwPW4ubGF5ZXIsbT1uLmdhdWdlQmcsZz1uLmdhdWdlT3V0bGluZSx2PW4uc2l6ZSx4PXUuZG9tYWluLGI9bi50cmFuc2l0aW9uT3B0cyxfPW4ub25Db21wbGV0ZTtmLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgiYnVsbGV0IiwhMCksZi5hdHRyKCJ0cmFuc2Zvcm0iLGwodi5sLHYudCkpLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJidWxsZXRheGlzIiwhMCkuY2xhc3NlZCgiY3Jpc3AiLCEwKSxwLnNlbGVjdEFsbCgiZy54YnVsbGV0YXhpc3RpY2sscGF0aCx0ZXh0IikucmVtb3ZlKCk7dmFyIEE9di5oLE09dS5nYXVnZS5iYXIudGhpY2tuZXNzKkEsUz14LnhbMF0sRT14LnhbMF0rKHgueFsxXS14LnhbMF0pKih1Ll9oYXNOdW1iZXJ8fHUuX2hhc0RlbHRhPzEtaC5idWxsZXROdW1iZXJEb21haW5TaXplOjEpOyhpPWsodCx1LmdhdWdlLmF4aXMpKS5faWQ9InhidWxsZXRheGlzIixpLmRvbWFpbj1bUyxFXSxpLnNldFNjYWxlKCksYT1kLmNhbGNUaWNrcyhpKSxvPWQubWFrZVRyYW5zVGlja0ZuKGkpLHM9ZC5nZXRUaWNrU2lnbnMoaSlbMl0sYz12LnQrdi5oLGkudmlzaWJsZSYmKGQuZHJhd1RpY2tzKHQsaSx7dmFsczoiaW5zaWRlIj09PWkudGlja3M/ZC5jbGlwRW5kcyhpLGEpOmEsbGF5ZXI6cCxwYXRoOmQubWFrZVRpY2tQYXRoKGksYyxzKSx0cmFuc0ZuOm99KSxkLmRyYXdMYWJlbHModCxpLHt2YWxzOmEsbGF5ZXI6cCx0cmFuc0ZuOm8sbGFiZWxGbnM6ZC5tYWtlTGFiZWxGbnMoaSxjKX0pKTtmdW5jdGlvbiBMKHQpe3QuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoMCxpLmMycCh0LnJhbmdlWzFdKS1pLmMycCh0LnJhbmdlWzBdKSl9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybiBpLmMycCh0LnJhbmdlWzBdKX0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuLjUqKDEtdC50aGlja25lc3MpKkF9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGhpY2tuZXNzKkF9KSl9dmFyIEM9W21dLmNvbmNhdCh1LmdhdWdlLnN0ZXBzKSxQPWYuc2VsZWN0QWxsKCJnLmJnLWJ1bGxldCIpLmRhdGEoQyk7UC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoImJnLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLFAuc2VsZWN0KCJyZWN0IikuY2FsbChMKS5jYWxsKFQpLFAuZXhpdCgpLnJlbW92ZSgpO3ZhciBJPWYuc2VsZWN0QWxsKCJnLnZhbHVlLWJ1bGxldCIpLmRhdGEoW3UuZ2F1Z2UuYmFyXSk7SS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInZhbHVlLWJ1bGxldCIsITApLmFwcGVuZCgicmVjdCIpLEkuc2VsZWN0KCJyZWN0IikuYXR0cigiaGVpZ2h0IixNKS5hdHRyKCJ5IiwoQS1NKS8yKS5jYWxsKFQpLHcoYik/SS5zZWxlY3QoInJlY3QiKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oYi5kdXJhdGlvbikuZWFzZShiLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtfJiZfKCl9KSkuYXR0cigid2lkdGgiLE1hdGgubWF4KDAsaS5jMnAoTWF0aC5taW4odS5nYXVnZS5heGlzLnJhbmdlWzFdLHJbMF0ueSkpKSk6SS5zZWxlY3QoInJlY3QiKS5hdHRyKCJ3aWR0aCIsIm51bWJlciI9PXR5cGVvZiByWzBdLnk/TWF0aC5tYXgoMCxpLmMycChNYXRoLm1pbih1LmdhdWdlLmF4aXMucmFuZ2VbMV0sclswXS55KSkpOjApO0kuZXhpdCgpLnJlbW92ZSgpO3ZhciBPPXIuZmlsdGVyKChmdW5jdGlvbigpe3JldHVybiB1LmdhdWdlLnRocmVzaG9sZC52YWx1ZXx8MD09PXUuZ2F1Z2UudGhyZXNob2xkLnZhbHVlfSkpLHo9Zi5zZWxlY3RBbGwoImcudGhyZXNob2xkLWJ1bGxldCIpLmRhdGEoTyk7ei5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRocmVzaG9sZC1idWxsZXQiLCEwKS5hcHBlbmQoImxpbmUiKSx6LnNlbGVjdCgibGluZSIpLmF0dHIoIngxIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoIngyIixpLmMycCh1LmdhdWdlLnRocmVzaG9sZC52YWx1ZSkpLmF0dHIoInkxIiwoMS11LmdhdWdlLnRocmVzaG9sZC50aGlja25lc3MpLzIqQSkuYXR0cigieTIiLCgxLSgxLXUuZ2F1Z2UudGhyZXNob2xkLnRoaWNrbmVzcykvMikqQSkuY2FsbCh5LnN0cm9rZSx1LmdhdWdlLnRocmVzaG9sZC5saW5lLmNvbG9yKS5zdHlsZSgic3Ryb2tlLXdpZHRoIix1LmdhdWdlLnRocmVzaG9sZC5saW5lLndpZHRoKSx6LmV4aXQoKS5yZW1vdmUoKTt2YXIgRD1mLnNlbGVjdEFsbCgiZy5nYXVnZS1vdXRsaW5lIikuZGF0YShbZ10pO0QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJnYXVnZS1vdXRsaW5lIiwhMCkuYXBwZW5kKCJyZWN0IiksRC5zZWxlY3QoInJlY3QiKS5jYWxsKEwpLmNhbGwoVCksRC5leGl0KCkucmVtb3ZlKCl9KHQsMCxlLHtnYXVnZTpYLGxheWVyOlosc2l6ZTpCLGdhdWdlQmc6QyxnYXVnZU91dGxpbmU6UCx0cmFuc2l0aW9uT3B0czpyLG9uQ29tcGxldGU6Z30pO3ZhciBKPU8uc2VsZWN0QWxsKCJ0ZXh0LnRpdGxlIikuZGF0YShlKTtKLmV4aXQoKS5yZW1vdmUoKSxKLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCgidGl0bGUiLCEwKSxKLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24oKXtyZXR1cm4gUj94LnJpZ2h0OnhbSS50aXRsZS5hbGlnbl19KSkudGV4dChJLnRpdGxlLnRleHQpLmNhbGwoZi5mb250LEkudGl0bGUuZm9udCkuY2FsbChwLmNvbnZlcnRUb1RzcGFucyx0KSxKLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKCl7dmFyIHQsZT1CLmwrQi53KmJbSS50aXRsZS5hbGlnbl0scj1oLnRpdGxlUGFkZGluZyxuPWYuYkJveChKLm5vZGUoKSk7aWYoeil7aWYoRClpZihJLmdhdWdlLmF4aXMudmlzaWJsZSl0PWYuYkJveChXLm5vZGUoKSkudG9wLXItbi5ib3R0b207ZWxzZSB0PUIudCtCLmgvMi1VLzItbi5ib3R0b20tcjtSJiYodD1FLShuLnRvcCtuLmJvdHRvbSkvMixlPUIubC1oLmJ1bGxldFBhZGRpbmcqQi53KX1lbHNlIHQ9SS5fbnVtYmVyc1RvcC1yLW4uYm90dG9tO3JldHVybiBsKGUsdCl9KSl9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiOjc0NCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19kZWZhdWx0cyI6ODI5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiOjg0MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL3Bvc2l0aW9uX2RlZmF1bHRzIjo4NDUsIi4vY29uc3RhbnRzIjoxMTIzLCJAcGxvdGx5L2QzIjo1OCwiZDMtaW50ZXJwb2xhdGUiOjE2NH1dLDExMjc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDt2YXIgdT1lLmV4cG9ydHM9YyhsKHt4Ont2YWxUeXBlOiJkYXRhX2FycmF5In0seTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHo6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LGlzb21pbjp7dmFsVHlwZToibnVtYmVyIn0saXNvbWF4Ont2YWxUeXBlOiJudW1iZXIifSxzdXJmYWNlOntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxjb3VudDp7dmFsVHlwZToiaW50ZWdlciIsZGZsdDoyLG1pbjoxfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0scGF0dGVybjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsiQSIsIkIiLCJDIiwiRCIsIkUiXSxleHRyYXM6WyJhbGwiLCJvZGQiLCJldmVuIl0sZGZsdDoiYWxsIn19LHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMTV9fSxzbGljZXM6e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGxvY2F0aW9uczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsb2NhdGlvbnM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19fSxjYXBzOnt4OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwfSxmaWxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX19LHk6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMH0sZmlsbDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9fX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6YSgpLHhob3ZlcmZvcm1hdDppKCJ4IikseWhvdmVyZm9ybWF0OmkoInkiKSx6aG92ZXJmb3JtYXQ6aSgieiIpLHZhbHVlaG92ZXJmb3JtYXQ6aSgidmFsdWUiLDEpLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse29wYWNpdHk6by5vcGFjaXR5LGxpZ2h0cG9zaXRpb246by5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOm8ubGlnaHRpbmcsZmxhdHNoYWRpbmc6by5mbGF0c2hhZGluZyxjb250b3VyOm8uY29udG91cixob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyl9KSwiY2FsYyIsIm5lc3RlZCIpO3UuZmxhdHNoYWRpbmcuZGZsdD0hMCx1LmxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbi5kZmx0PTAsdS54LmVkaXRUeXBlPXUueS5lZGl0VHlwZT11LnouZWRpdFR5cGU9dS52YWx1ZS5lZGl0VHlwZT0iY2FsYytjbGVhckF4aXNUeXBlcyIsdS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL21lc2gzZC9hdHRyaWJ1dGVzIjoxMTMyfV0sMTEyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLGk9dCgiLi4vc3RyZWFtdHViZS9jYWxjIikucHJvY2Vzc0dyaWQsYT10KCIuLi9zdHJlYW10dWJlL2NhbGMiKS5maWx0ZXI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5fbGVuPU1hdGgubWluKGUueC5sZW5ndGgsZS55Lmxlbmd0aCxlLnoubGVuZ3RoLGUudmFsdWUubGVuZ3RoKSxlLl94PWEoZS54LGUuX2xlbiksZS5feT1hKGUueSxlLl9sZW4pLGUuX3o9YShlLnosZS5fbGVuKSxlLl92YWx1ZT1hKGUudmFsdWUsZS5fbGVuKTt2YXIgcj1pKGUpO2UuX2dyaWRGaWxsPXIuZmlsbCxlLl9Ycz1yLlhzLGUuX1lzPXIuWXMsZS5fWnM9ci5acyxlLl9sZW49ci5sZW47Zm9yKHZhciBvPTEvMCxzPS0xLzAsbD0wO2w8ZS5fbGVuO2wrKyl7dmFyIGM9ZS5fdmFsdWVbbF07bz1NYXRoLm1pbihvLGMpLHM9TWF0aC5tYXgocyxjKX1lLl9taW5WYWx1ZXM9byxlLl9tYXhWYWx1ZXM9cyxlLl92TWluPXZvaWQgMD09PWUuaXNvbWlufHxudWxsPT09ZS5pc29taW4/bzplLmlzb21pbixlLl92TWF4PXZvaWQgMD09PWUuaXNvbWF4fHxudWxsPT09ZS5pc29taW4/czplLmlzb21heCxuKHQsZSx7dmFsczpbZS5fdk1pbixlLl92TWF4XSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0NywiLi4vc3RyZWFtdHViZS9jYWxjIjoxMjk5fV0sMTEyOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9ZS5sZW5ndGgtMTtyPjA7ci0tKXt2YXIgbj1NYXRoLm1pbihlW3JdLGVbci0xXSksaT1NYXRoLm1heChlW3JdLGVbci0xXSk7aWYoaT5uJiZuPHQmJnQ8PWkpcmV0dXJue2lkOnIsZGlzdFJhdGlvOihpLXQpLyhpLW4pfX1yZXR1cm57aWQ6MCxkaXN0UmF0aW86MH19O2Z1bmN0aW9uIGModCxlLHIpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1yLHRoaXMubWVzaD1lLHRoaXMubmFtZT0iIix0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPSExfXZhciB1PWMucHJvdG90eXBlO3UuaGFuZGxlUGljaz1mdW5jdGlvbih0KXtpZih0Lm9iamVjdD09PXRoaXMubWVzaCl7dmFyIGU9dC5kYXRhLmluZGV4LHI9dGhpcy5kYXRhLl9tZXNoWFtlXSxuPXRoaXMuZGF0YS5fbWVzaFlbZV0saT10aGlzLmRhdGEuX21lc2haW2VdLGE9dGhpcy5kYXRhLl9Zcy5sZW5ndGgsbz10aGlzLmRhdGEuX1pzLmxlbmd0aCxzPWwocix0aGlzLmRhdGEuX1hzKS5pZCxjPWwobix0aGlzLmRhdGEuX1lzKS5pZCx1PWwoaSx0aGlzLmRhdGEuX1pzKS5pZCxmPXQuaW5kZXg9dStvKmMrbyphKnM7dC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS5fbWVzaFhbZl0sdGhpcy5kYXRhLl9tZXNoWVtmXSx0aGlzLmRhdGEuX21lc2haW2ZdLHRoaXMuZGF0YS5fdmFsdWVbZl1dO3ZhciBoPXRoaXMuZGF0YS5ob3ZlcnRleHR8fHRoaXMuZGF0YS50ZXh0O3JldHVybiBBcnJheS5pc0FycmF5KGgpJiZ2b2lkIDAhPT1oW2ZdP3QudGV4dExhYmVsPWhbZl06aCYmKHQudGV4dExhYmVsPWgpLCEwfX0sdS51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zY2VuZSxyPWUuZnVsbFNjZW5lTGF5b3V0O2Z1bmN0aW9uIG4odCxlLHIsbil7cmV0dXJuIGUubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdC5kMmwoZSwwLG4pKnJ9KSl9dGhpcy5kYXRhPWgodCk7dmFyIGw9e3Bvc2l0aW9uczpzKG4oci54YXhpcyx0Ll9tZXNoWCxlLmRhdGFTY2FsZVswXSx0LnhjYWxlbmRhciksbihyLnlheGlzLHQuX21lc2hZLGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxuKHIuemF4aXMsdC5fbWVzaFosZS5kYXRhU2NhbGVbMl0sdC56Y2FsZW5kYXIpKSxjZWxsczpzKHQuX21lc2hJLHQuX21lc2hKLHQuX21lc2hLKSxsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6YSh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ30sYz1vKHQpO2wudmVydGV4SW50ZW5zaXR5PXQuX21lc2hJbnRlbnNpdHksbC52ZXJ0ZXhJbnRlbnNpdHlCb3VuZHM9W2MubWluLGMubWF4XSxsLmNvbG9ybWFwPWkodCksdGhpcy5tZXNoLnVwZGF0ZShsKX0sdS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX07dmFyIGY9WyJ4eXoiLCJ4enkiLCJ5eHoiLCJ5engiLCJ6eHkiLCJ6eXgiXTtmdW5jdGlvbiBoKHQpe3QuX21lc2hJPVtdLHQuX21lc2hKPVtdLHQuX21lc2hLPVtdO3ZhciBlLHIsbixpLGEsbyxzLGM9dC5zdXJmYWNlLnNob3csdT10LnNwYWNlZnJhbWUuc2hvdyxoPXQuc3VyZmFjZS5maWxsLHA9dC5zcGFjZWZyYW1lLmZpbGwsZD0hMSxtPSExLGc9MCx2PXQuX1hzLHk9dC5fWXMseD10Ll9acyxiPXYubGVuZ3RoLF89eS5sZW5ndGgsdz14Lmxlbmd0aCxUPWYuaW5kZXhPZih0Ll9ncmlkRmlsbC5yZXBsYWNlKC8tL2csIiIpLnJlcGxhY2UoL1wrL2csIiIpKSxrPWZ1bmN0aW9uKHQsZSxyKXtzd2l0Y2goVCl7Y2FzZSA1OnJldHVybiByK3cqZSt3Kl8qdDtjYXNlIDQ6cmV0dXJuIHIrdyp0K3cqYiplO2Nhc2UgMzpyZXR1cm4gZStfKnIrXyp3KnQ7Y2FzZSAyOnJldHVybiBlK18qdCtfKmIqcjtjYXNlIDE6cmV0dXJuIHQrYipyK2IqdyplO2RlZmF1bHQ6cmV0dXJuIHQrYiplK2IqXypyfX0sQT10Ll9taW5WYWx1ZXMsTT10Ll9tYXhWYWx1ZXMsUz10Ll92TWluLEU9dC5fdk1heDtmdW5jdGlvbiBMKHQsZSxzKXtmb3IodmFyIGw9by5sZW5ndGgsYz1yO2M8bDtjKyspaWYodD09PW5bY10mJmU9PT1pW2NdJiZzPT09YVtjXSlyZXR1cm4gYztyZXR1cm4tMX1mdW5jdGlvbiBDKCl7cj1lfWZ1bmN0aW9uIFAoKXtuPVtdLGk9W10sYT1bXSxvPVtdLGU9MCxDKCl9ZnVuY3Rpb24gSSh0LHIscyxsKXtyZXR1cm4gbi5wdXNoKHQpLGkucHVzaChyKSxhLnB1c2gocyksby5wdXNoKGwpLCsrZS0xfWZ1bmN0aW9uIE8odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldKigxLXIpK3IqZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiB6KHQpe3M9dH1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuImFsbCI9PT10fHxudWxsPT09dHx8dC5pbmRleE9mKGUpPi0xfWZ1bmN0aW9uIFIodCxlKXtyZXR1cm4gbnVsbD09PXQ/ZTp0fWZ1bmN0aW9uIEYoZSxyLG4pe0MoKTt2YXIgaSxhLG8sbD1bcl0sYz1bbl07aWYocz49MSlsPVtyXSxjPVtuXTtlbHNlIGlmKHM+MCl7dmFyIHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10WzBdLG49dFsxXSxpPXRbMl0sYT1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPVtdLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPSh0W2ldK2VbaV0rcltpXSkvMztyZXR1cm4gbn0ocixuLGkpLG89TWF0aC5zcXJ0KDEtcyksbD1PKGEscixvKSxjPU8oYSxuLG8pLHU9TyhhLGksbyksZj1lWzBdLGg9ZVsxXSxwPWVbMl07cmV0dXJue3h5enY6W1tyLG4sY10sW2MsbCxyXSxbbixpLHVdLFt1LGMsbl0sW2kscixsXSxbbCx1LGldXSxhYmM6W1tmLGgsLTFdLFstMSwtMSxmXSxbaCxwLC0xXSxbLTEsLTEsaF0sW3AsZiwtMV0sWy0xLC0xLHBdXX19KHIsbik7bD11Lnh5enYsYz11LmFiY31mb3IodmFyIGY9MDtmPGwubGVuZ3RoO2YrKyl7cj1sW2ZdLG49Y1tmXTtmb3IodmFyIGg9W10scD0wO3A8MztwKyspe3ZhciBkPXJbcF1bMF0sbT1yW3BdWzFdLHY9cltwXVsyXSx5PXJbcF1bM10seD1uW3BdPi0xP25bcF06TChkLG0sdik7aFtwXT14Pi0xP3g6SShkLG0sdixSKGUseSkpfWk9aFswXSxhPWhbMV0sbz1oWzJdLHQuX21lc2hJLnB1c2goaSksdC5fbWVzaEoucHVzaChhKSx0Ll9tZXNoSy5wdXNoKG8pLCsrZ319ZnVuY3Rpb24gQih0LGUscixuKXt2YXIgaT10WzNdO2k8ciYmKGk9ciksaT5uJiYoaT1uKTtmb3IodmFyIGE9KHRbM10taSkvKHRbM10tZVszXSsxZS05KSxvPVtdLHM9MDtzPDQ7cysrKW9bc109KDEtYSkqdFtzXSthKmVbc107cmV0dXJuIG99ZnVuY3Rpb24gTih0LGUscil7cmV0dXJuIHQ+PWUmJnQ8PXJ9ZnVuY3Rpb24gaih0KXt2YXIgZT0uMDAxKihFLVMpO3JldHVybiB0Pj1TLWUmJnQ8PUUrZX1mdW5jdGlvbiBVKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjw0O24rKyl7dmFyIGk9ZVtuXTtyLnB1c2goW3QuX3hbaV0sdC5feVtpXSx0Ll96W2ldLHQuX3ZhbHVlW2ldXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gVih0LGUscixuLGksYSl7YXx8KGE9MSkscj1bLTEsLTEsLTFdO3ZhciBvPSExLHM9W04oZVswXVszXSxuLGkpLE4oZVsxXVszXSxuLGkpLE4oZVsyXVszXSxuLGkpXTtpZighc1swXSYmIXNbMV0mJiFzWzJdKXJldHVybiExO3ZhciBsPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gaihlWzBdWzNdKSYmaihlWzFdWzNdKSYmaihlWzJdWzNdKT8oRih0LGUsciksITApOmE8MyYmVih0LGUscixTLEUsKythKX07aWYoc1swXSYmc1sxXSYmc1syXSlyZXR1cm4gbCh0LGUscil8fG87dmFyIGM9ITE7cmV0dXJuW1swLDEsMl0sWzIsMCwxXSxbMSwyLDBdXS5mb3JFYWNoKChmdW5jdGlvbihhKXtpZihzW2FbMF1dJiZzW2FbMV1dJiYhc1thWzJdXSl7dmFyIHU9ZVthWzBdXSxmPWVbYVsxXV0saD1lW2FbMl1dLHA9QihoLHUsbixpKSxkPUIoaCxmLG4saSk7bz1sKHQsW2QscCx1XSxbLTEsLTEsclthWzBdXV0pfHxvLG89bCh0LFt1LGYsZF0sW3JbYVswXV0sclthWzFdXSwtMV0pfHxvLGM9ITB9fSkpLGN8fFtbMCwxLDJdLFsxLDIsMF0sWzIsMCwxXV0uZm9yRWFjaCgoZnVuY3Rpb24oYSl7aWYoc1thWzBdXSYmIXNbYVsxXV0mJiFzW2FbMl1dKXt2YXIgdT1lW2FbMF1dLGY9ZVthWzFdXSxoPWVbYVsyXV0scD1CKGYsdSxuLGkpLGQ9QihoLHUsbixpKTtvPWwodCxbZCxwLHVdLFstMSwtMSxyW2FbMF1dXSl8fG8sYz0hMH19KSksb31mdW5jdGlvbiBIKHQsZSxyLG4pe3ZhciBpPSExLGE9VShlKSxvPVtOKGFbMF1bM10scixuKSxOKGFbMV1bM10scixuKSxOKGFbMl1bM10scixuKSxOKGFbM11bM10scixuKV07aWYoIShvWzBdfHxvWzFdfHxvWzJdfHxvWzNdKSlyZXR1cm4gaTtpZihvWzBdJiZvWzFdJiZvWzJdJiZvWzNdKXJldHVybiBtJiYoaT1mdW5jdGlvbih0LGUscil7dmFyIG49ZnVuY3Rpb24obixpLGEpe0YodCxbZVtuXSxlW2ldLGVbYV1dLFtyW25dLHJbaV0sclthXV0pfTtuKDAsMSwyKSxuKDMsMCwxKSxuKDIsMywwKSxuKDEsMiwzKX0odCxhLGUpfHxpKSxpO3ZhciBzPSExO3JldHVybltbMCwxLDIsM10sWzMsMCwxLDJdLFsyLDMsMCwxXSxbMSwyLDMsMF1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJm9bbFsxXV0mJm9bbFsyXV0mJiFvW2xbM11dKXt2YXIgYz1hW2xbMF1dLHU9YVtsWzFdXSxmPWFbbFsyXV0saD1hW2xbM11dO2lmKG0paT1GKHQsW2MsdSxmXSxbZVtsWzBdXSxlW2xbMV1dLGVbbFsyXV1dKXx8aTtlbHNle3ZhciBwPUIoaCxjLHIsbiksZD1CKGgsdSxyLG4pLGc9QihoLGYscixuKTtpPUYobnVsbCxbcCxkLGddLFstMSwtMSwtMV0pfHxpfXM9ITB9fSkpLHM/aTooW1swLDEsMiwzXSxbMSwyLDMsMF0sWzIsMywwLDFdLFszLDAsMSwyXSxbMCwyLDMsMV0sWzEsMywyLDBdXS5mb3JFYWNoKChmdW5jdGlvbihsKXtpZihvW2xbMF1dJiZvW2xbMV1dJiYhb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV0scD1CKGYsYyxyLG4pLGQ9QihmLHUscixuKSxnPUIoaCx1LHIsbiksdj1CKGgsYyxyLG4pO20/KGk9Rih0LFtjLHYscF0sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbdSxkLGddLFtlW2xbMV1dLC0xLC0xXSl8fGkpOmk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWZ1bmN0aW9uKG4saSxhKXtGKHQsW2Vbbl0sZVtpXSxlW2FdXSxbcltuXSxyW2ldLHJbYV1dKX07bigwLDEsMiksbigyLDMsMCl9KG51bGwsW3AsZCxnLHZdLFstMSwtMSwtMSwtMV0pfHxpLHM9ITB9fSkpLHN8fFtbMCwxLDIsM10sWzEsMiwzLDBdLFsyLDMsMCwxXSxbMywwLDEsMl1dLmZvckVhY2goKGZ1bmN0aW9uKGwpe2lmKG9bbFswXV0mJiFvW2xbMV1dJiYhb1tsWzJdXSYmIW9bbFszXV0pe3ZhciBjPWFbbFswXV0sdT1hW2xbMV1dLGY9YVtsWzJdXSxoPWFbbFszXV0scD1CKHUsYyxyLG4pLGQ9QihmLGMscixuKSxnPUIoaCxjLHIsbik7bT8oaT1GKHQsW2MscCxkXSxbZVtsWzBdXSwtMSwtMV0pfHxpLGk9Rih0LFtjLGQsZ10sW2VbbFswXV0sLTEsLTFdKXx8aSxpPUYodCxbYyxnLHBdLFtlW2xbMF1dLC0xLC0xXSl8fGkpOmk9RihudWxsLFtwLGQsZ10sWy0xLC0xLC0xXSl8fGkscz0hMH19KSksaSl9ZnVuY3Rpb24gcSh0LGUscixuLGksYSxvLHMsbCxjLHUpe3ZhciBmPSExO3JldHVybiBkJiYoRCh0LCJBIikmJihmPUgobnVsbCxbZSxyLG4sYV0sYyx1KXx8ZiksRCh0LCJCIikmJihmPUgobnVsbCxbcixuLGksbF0sYyx1KXx8ZiksRCh0LCJDIikmJihmPUgobnVsbCxbcixhLG8sbF0sYyx1KXx8ZiksRCh0LCJEIikmJihmPUgobnVsbCxbbixhLHMsbF0sYyx1KXx8ZiksRCh0LCJFIikmJihmPUgobnVsbCxbcixuLGEsbF0sYyx1KXx8ZikpLG0mJihmPUgodCxbcixuLGEsbF0sYyx1KXx8ZiksZn1mdW5jdGlvbiBHKHQsZSxyLG4saSxhLG8scyl7cmV0dXJuWyEwPT09c1swXXx8Vih0LFUoW2UscixuXSksW2UscixuXSxhLG8pLCEwPT09c1sxXXx8Vih0LFUoW24saSxlXSksW24saSxlXSxhLG8pXX1mdW5jdGlvbiBZKHQsZSxyLG4saSxhLG8scyxsKXtyZXR1cm4gcz9HKHQsZSxyLGksbixhLG8sbCk6Ryh0LHIsaSxuLGUsYSxvLGwpfWZ1bmN0aW9uIFcodCxlLHIsbixpLGEsbyl7dmFyIHMsbCxjLHUsZj0hMSxoPWZ1bmN0aW9uKCl7Zj1WKHQsW3MsbCxjXSxbLTEsLTEsLTFdLGksYSl8fGYsZj1WKHQsW2MsdSxzXSxbLTEsLTEsLTFdLGksYSl8fGZ9LHA9b1swXSxkPW9bMV0sbT1vWzJdO3JldHVybiBwJiYocz1PKFUoW2soZSxyLTAsbi0wKV0pWzBdLFUoW2soZS0xLHItMCxuLTApXSlbMF0scCksbD1PKFUoW2soZSxyLTAsbi0xKV0pWzBdLFUoW2soZS0xLHItMCxuLTEpXSlbMF0scCksYz1PKFUoW2soZSxyLTEsbi0xKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0scCksdT1PKFUoW2soZSxyLTEsbi0wKV0pWzBdLFUoW2soZS0xLHItMSxuLTApXSlbMF0scCksaCgpKSxkJiYocz1PKFUoW2soZS0wLHIsbi0wKV0pWzBdLFUoW2soZS0wLHItMSxuLTApXSlbMF0sZCksbD1PKFUoW2soZS0wLHIsbi0xKV0pWzBdLFUoW2soZS0wLHItMSxuLTEpXSlbMF0sZCksYz1PKFUoW2soZS0xLHIsbi0xKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0sZCksdT1PKFUoW2soZS0xLHIsbi0wKV0pWzBdLFUoW2soZS0xLHItMSxuLTApXSlbMF0sZCksaCgpKSxtJiYocz1PKFUoW2soZS0wLHItMCxuKV0pWzBdLFUoW2soZS0wLHItMCxuLTEpXSlbMF0sbSksbD1PKFUoW2soZS0wLHItMSxuKV0pWzBdLFUoW2soZS0wLHItMSxuLTEpXSlbMF0sbSksYz1PKFUoW2soZS0xLHItMSxuKV0pWzBdLFUoW2soZS0xLHItMSxuLTEpXSlbMF0sbSksdT1PKFUoW2soZS0xLHItMCxuKV0pWzBdLFUoW2soZS0xLHItMCxuLTEpXSlbMF0sbSksaCgpKSxmfWZ1bmN0aW9uIFgodCxlLHIsbixpLGEsbyxzLGwsYyx1LGYpe3ZhciBoPXQ7cmV0dXJuIGY/KGQmJiJldmVuIj09PXQmJihoPW51bGwpLHEoaCxlLHIsbixpLGEsbyxzLGwsYyx1KSk6KGQmJiJvZGQiPT09dCYmKGg9bnVsbCkscShoLGwscyxvLGEsaSxuLHIsZSxjLHUpKX1mdW5jdGlvbiBaKHQsZSxyLG4saSl7Zm9yKHZhciBhPVtdLG89MCxzPTA7czxlLmxlbmd0aDtzKyspZm9yKHZhciBsPWVbc10sYz0xO2M8dztjKyspZm9yKHZhciB1PTE7dTxfO3UrKylhLnB1c2goWSh0LGsobCx1LTEsYy0xKSxrKGwsdS0xLGMpLGsobCx1LGMtMSksayhsLHUsYykscixuLChsK3UrYyklMixpJiZpW29dP2lbb106W10pKSxvKys7cmV0dXJuIGF9ZnVuY3Rpb24gSih0LGUscixuLGkpe2Zvcih2YXIgYT1bXSxvPTAscz0wO3M8ZS5sZW5ndGg7cysrKWZvcih2YXIgbD1lW3NdLGM9MTtjPGI7YysrKWZvcih2YXIgdT0xO3U8dzt1KyspYS5wdXNoKFkodCxrKGMtMSxsLHUtMSksayhjLGwsdS0xKSxrKGMtMSxsLHUpLGsoYyxsLHUpLHIsbiwoYytsK3UpJTIsaSYmaVtvXT9pW29dOltdKSksbysrO3JldHVybiBhfWZ1bmN0aW9uIEsodCxlLHIsbixpKXtmb3IodmFyIGE9W10sbz0wLHM9MDtzPGUubGVuZ3RoO3MrKylmb3IodmFyIGw9ZVtzXSxjPTE7YzxfO2MrKylmb3IodmFyIHU9MTt1PGI7dSsrKWEucHVzaChZKHQsayh1LTEsYy0xLGwpLGsodS0xLGMsbCksayh1LGMtMSxsKSxrKHUsYyxsKSxyLG4sKHUrYytsKSUyLGkmJmlbb10/aVtvXTpbXSkpLG8rKztyZXR1cm4gYX1mdW5jdGlvbiBRKHQsZSxyKXtmb3IodmFyIG49MTtuPHc7bisrKWZvcih2YXIgaT0xO2k8XztpKyspZm9yKHZhciBhPTE7YTxiO2ErKylYKHQsayhhLTEsaS0xLG4tMSksayhhLTEsaS0xLG4pLGsoYS0xLGksbi0xKSxrKGEtMSxpLG4pLGsoYSxpLTEsbi0xKSxrKGEsaS0xLG4pLGsoYSxpLG4tMSksayhhLGksbiksZSxyLChhK2krbiklMil9ZnVuY3Rpb24gJCh0LGUscil7ZD0hMCxRKHQsZSxyKSxkPSExfWZ1bmN0aW9uIHR0KHQsZSxyLG4saSxhKXtmb3IodmFyIG89W10scz0wLGw9MDtsPGUubGVuZ3RoO2wrKylmb3IodmFyIGM9ZVtsXSx1PTE7dTx3O3UrKylmb3IodmFyIGY9MTtmPF87ZisrKW8ucHVzaChXKHQsYyxmLHUscixuLGlbbF0sYSYmYVtzXSYmYVtzXSkpLHMrKztyZXR1cm4gb31mdW5jdGlvbiBldCh0LGUscixuLGksYSl7Zm9yKHZhciBvPVtdLHM9MCxsPTA7bDxlLmxlbmd0aDtsKyspZm9yKHZhciBjPWVbbF0sdT0xO3U8Yjt1KyspZm9yKHZhciBmPTE7Zjx3O2YrKylvLnB1c2goVyh0LHUsYyxmLHIsbixpW2xdLGEmJmFbc10mJmFbc10pKSxzKys7cmV0dXJuIG99ZnVuY3Rpb24gcnQodCxlLHIsbixpLGEpe2Zvcih2YXIgbz1bXSxzPTAsbD0wO2w8ZS5sZW5ndGg7bCsrKWZvcih2YXIgYz1lW2xdLHU9MTt1PF87dSsrKWZvcih2YXIgZj0xO2Y8YjtmKyspby5wdXNoKFcodCxmLHUsYyxyLG4saVtsXSxhJiZhW3NdJiZhW3NdKSkscysrO3JldHVybiBvfWZ1bmN0aW9uIG50KHQsZSl7Zm9yKHZhciByPVtdLG49dDtuPGU7bisrKXIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gZnVuY3Rpb24oKXtpZihQKCksZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPGI7ZSsrKWZvcih2YXIgcj0wO3I8XztyKyspZm9yKHZhciBuPTA7bjx3O24rKyl7dmFyIGk9ayhlLHIsbik7SSh0Ll94W2ldLHQuX3lbaV0sdC5feltpXSx0Ll92YWx1ZVtpXSl9fSgpLHUmJnAmJih6KHApLG09ITAsUShudWxsLFMsRSksbT0hMSksYyYmaCl7eihoKTtmb3IodmFyIGU9dC5zdXJmYWNlLnBhdHRlcm4scj10LnN1cmZhY2UuY291bnQscz0wO3M8cjtzKyspe3ZhciBmPTE9PT1yPy41OnMvKHItMSksZD0oMS1mKSpTK2YqRSxUPU1hdGguYWJzKGQtQSk+TWF0aC5hYnMoZC1NKT9bQSxkXTpbZCxNXTskKGUsVFswXSxUWzFdKX19dmFyIEw9W1tNYXRoLm1pbihTLE0pLE1hdGgubWF4KFMsTSldLFtNYXRoLm1pbihBLEUpLE1hdGgubWF4KEEsRSldXTtbIngiLCJ5IiwieiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe2Zvcih2YXIgcj1bXSxuPTA7bjxMLmxlbmd0aDtuKyspe3ZhciBpPTAsYT1MW25dWzBdLG89TFtuXVsxXSxzPXQuc2xpY2VzW2VdO2lmKHMuc2hvdyYmcy5maWxsKXt6KHMuZmlsbCk7dmFyIGM9W10sdT1bXSxmPVtdO2lmKHMubG9jYXRpb25zLmxlbmd0aClmb3IodmFyIGg9MDtoPHMubG9jYXRpb25zLmxlbmd0aDtoKyspe3ZhciBwPWwocy5sb2NhdGlvbnNbaF0sIngiPT09ZT92OiJ5Ij09PWU/eTp4KTswPT09cC5kaXN0UmF0aW8/Yy5wdXNoKHAuaWQpOnAuaWQ+MCYmKHUucHVzaChwLmlkKSwieCI9PT1lP2YucHVzaChbcC5kaXN0UmF0aW8sMCwwXSk6InkiPT09ZT9mLnB1c2goWzAscC5kaXN0UmF0aW8sMF0pOmYucHVzaChbMCwwLHAuZGlzdFJhdGlvXSkpfWVsc2UgYz1udCgxLCJ4Ij09PWU/Yi0xOiJ5Ij09PWU/Xy0xOnctMSk7dS5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT90dChudWxsLHUsYSxvLGYscltpXSk6InkiPT09ZT9ldChudWxsLHUsYSxvLGYscltpXSk6cnQobnVsbCx1LGEsbyxmLHJbaV0pLGkrKyksYy5sZW5ndGg+MCYmKHJbaV09IngiPT09ZT9aKG51bGwsYyxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsYyxhLG8scltpXSk6SyhudWxsLGMsYSxvLHJbaV0pLGkrKyl9dmFyIGQ9dC5jYXBzW2VdO2Quc2hvdyYmZC5maWxsJiYoeihkLmZpbGwpLHJbaV09IngiPT09ZT9aKG51bGwsWzAsYi0xXSxhLG8scltpXSk6InkiPT09ZT9KKG51bGwsWzAsXy0xXSxhLG8scltpXSk6SyhudWxsLFswLHctMV0sYSxvLHJbaV0pLGkrKyl9fSkpLDA9PT1nJiZQKCksdC5fbWVzaFg9bix0Ll9tZXNoWT1pLHQuX21lc2haPWEsdC5fbWVzaEludGVuc2l0eT1vLHQuX1hzPXYsdC5fWXM9eSx0Ll9acz14fSgpLHR9ZS5leHBvcnRzPXtmaW5kTmVhcmVzdE9uQXhpczpsLGdlbmVyYXRlSXNvTWVzaGVzOmgsY3JlYXRlSXNvc3VyZmFjZVRyYWNlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgYyh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3MiwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiOjg4MCwiZ2wtbWVzaDNkIjozMDN9XSwxMTMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIik7ZnVuY3Rpb24gcyh0LGUscixuLGEpe3ZhciBzPWEoImlzb21pbiIpLGw9YSgiaXNvbWF4Iik7bnVsbCE9bCYmbnVsbCE9cyYmcz5sJiYoZS5pc29taW49bnVsbCxlLmlzb21heD1udWxsKTt2YXIgYz1hKCJ4IiksdT1hKCJ5IiksZj1hKCJ6IiksaD1hKCJ2YWx1ZSIpO2MmJmMubGVuZ3RoJiZ1JiZ1Lmxlbmd0aCYmZiYmZi5sZW5ndGgmJmgmJmgubGVuZ3RoPyhpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLG4pLGEoInZhbHVlaG92ZXJmb3JtYXQiKSxbIngiLCJ5IiwieiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2EodCsiaG92ZXJmb3JtYXQiKTt2YXIgZT0iY2Fwcy4iK3Q7YShlKyIuc2hvdyIpJiZhKGUrIi5maWxsIik7dmFyIHI9InNsaWNlcy4iK3Q7YShyKyIuc2hvdyIpJiYoYShyKyIuZmlsbCIpLGEocisiLmxvY2F0aW9ucyIpKX0pKSxhKCJzcGFjZWZyYW1lLnNob3ciKSYmYSgic3BhY2VmcmFtZS5maWxsIiksYSgic3VyZmFjZS5zaG93IikmJihhKCJzdXJmYWNlLmNvdW50IiksYSgic3VyZmFjZS5maWxsIiksYSgic3VyZmFjZS5wYXR0ZXJuIikpLGEoImNvbnRvdXIuc2hvdyIpJiYoYSgiY29udG91ci5jb2xvciIpLGEoImNvbnRvdXIud2lkdGgiKSksWyJ0ZXh0IiwiaG92ZXJ0ZXh0IiwiaG92ZXJ0ZW1wbGF0ZSIsImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24iLCJsaWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24iLCJsaWdodHBvc2l0aW9uLngiLCJsaWdodHBvc2l0aW9uLnkiLCJsaWdodHBvc2l0aW9uLnoiLCJmbGF0c2hhZGluZyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXthKHQpfSkpLG8odCxlLG4sYSx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSksZS5fbGVuZ3RoPW51bGwpOmUudmlzaWJsZT0hMX1lLmV4cG9ydHM9e3N1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLGkpe3ModCxlLHIsaSwoZnVuY3Rpb24ocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX0pKX0sc3VwcGx5SXNvRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjExMjd9XSwxMTMxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLmNyZWF0ZUlzb3N1cmZhY2VUcmFjZSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToiaXNvc3VyZmFjZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjoxMTI3LCIuL2NhbGMiOjExMjgsIi4vY29udmVydCI6MTEyOSwiLi9kZWZhdWx0cyI6MTEzMH1dLDExMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL3N1cmZhY2UvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPWwoe3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sajp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxrOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGhvdmVydGVtcGxhdGU6YSh7ZWRpdFR5cGU6ImNhbGMifSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6IiksZGVsYXVuYXlheGlzOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ4IiwieSIsInoiXSxkZmx0OiJ6IixlZGl0VHlwZToiY2FsYyJ9LGFscGhhaHVsbDp7dmFsVHlwZToibnVtYmVyIixkZmx0Oi0xLGVkaXRUeXBlOiJjYWxjIn0saW50ZW5zaXR5Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGludGVuc2l0eW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInZlcnRleCIsImNlbGwiXSxkZmx0OiJ2ZXJ0ZXgiLGVkaXRUeXBlOiJjYWxjIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToiY2FsYyJ9LHZlcnRleGNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGZhY2Vjb2xvcjp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx0cmFuc2Zvcm1zOnZvaWQgMH0sbigiIix7Y29sb3JBdHRyOiJgaW50ZW5zaXR5YCIsc2hvd1NjYWxlRGZsdDohMCxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtvcGFjaXR5Om8ub3BhY2l0eSxmbGF0c2hhZGluZzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGNvbnRvdXI6e3Nob3c6bCh7fSxvLmNvbnRvdXJzLnguc2hvdyx7fSksY29sb3I6by5jb250b3Vycy54LmNvbG9yLHdpZHRoOm8uY29udG91cnMueC53aWR0aCxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0cG9zaXRpb246e3g6bCh7fSxvLmxpZ2h0cG9zaXRpb24ueCx7ZGZsdDoxZTV9KSx5Omwoe30sby5saWdodHBvc2l0aW9uLnkse2RmbHQ6MWU1fSksejpsKHt9LG8ubGlnaHRwb3NpdGlvbi56LHtkZmx0OjB9KSxlZGl0VHlwZToiY2FsYyJ9LGxpZ2h0aW5nOmwoe3ZlcnRleG5vcm1hbHNlcHNpbG9uOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MWUtMTIsZWRpdFR5cGU6ImNhbGMifSxmYWNlbm9ybWFsc2Vwc2lsb246e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxZS02LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvLmxpZ2h0aW5nKSxob3ZlcmluZm86bCh7fSxzLmhvdmVyaW5mbyx7ZWRpdFR5cGU6ImNhbGMifSksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSl9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMzE1fV0sMTEzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UuaW50ZW5zaXR5JiZuKHQsZSx7dmFsczplLmludGVuc2l0eSxjb250YWluZXJTdHI6IiIsY0xldHRlcjoiYyJ9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiOjY0N31dLDExMzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbWVzaDNkIiksaT10KCJkZWxhdW5heS10cmlhbmd1bGF0ZSIpLGE9dCgiYWxwaGEtc2hhcGUiKSxvPXQoImNvbnZleC1odWxsIikscz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLGw9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsdT10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKTtmdW5jdGlvbiBmKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5jb2xvcj0iI2ZmZiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgaD1mLnByb3RvdHlwZTtmdW5jdGlvbiBwKHQpe2Zvcih2YXIgZT1bXSxyPXQubGVuZ3RoLG49MDtuPHI7bisrKWVbbl09bCh0W25dKTtyZXR1cm4gZX1mdW5jdGlvbiBkKHQsZSxyLG4pe2Zvcih2YXIgaT1bXSxhPWUubGVuZ3RoLG89MDtvPGE7bysrKWlbb109dC5kMmwoZVtvXSwwLG4pKnI7cmV0dXJuIGl9ZnVuY3Rpb24gbSh0KXtmb3IodmFyIGU9W10scj10Lmxlbmd0aCxuPTA7bjxyO24rKyllW25dPU1hdGgucm91bmQodFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPTA7bjxyO24rKylpZih0W25dPD0tLjV8fHRbbl0+PWUtLjUpcmV0dXJuITE7cmV0dXJuITB9aC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgZT10LmluZGV4PXQuZGF0YS5pbmRleDt0LmRhdGEuX2NlbGxDZW50ZXI/dC50cmFjZUNvb3JkaW5hdGU9dC5kYXRhLmRhdGFDb29yZGluYXRlOnQudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEueFtlXSx0aGlzLmRhdGEueVtlXSx0aGlzLmRhdGEueltlXV07dmFyIHI9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocikmJnZvaWQgMCE9PXJbZV0/dC50ZXh0TGFiZWw9cltlXTpyJiYodC50ZXh0TGFiZWw9ciksITB9fSxoLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnNjZW5lLHI9ZS5mdWxsU2NlbmVMYXlvdXQ7dGhpcy5kYXRhPXQ7dmFyIG4sZj10LngubGVuZ3RoLGg9dShkKHIueGF4aXMsdC54LGUuZGF0YVNjYWxlWzBdLHQueGNhbGVuZGFyKSxkKHIueWF4aXMsdC55LGUuZGF0YVNjYWxlWzFdLHQueWNhbGVuZGFyKSxkKHIuemF4aXMsdC56LGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSk7aWYodC5pJiZ0LmomJnQuayl7aWYodC5pLmxlbmd0aCE9PXQuai5sZW5ndGh8fHQuai5sZW5ndGghPT10LmsubGVuZ3RofHwhZyh0LmksZil8fCFnKHQuaixmKXx8IWcodC5rLGYpKXJldHVybjtuPXUobSh0LmkpLG0odC5qKSxtKHQuaykpfWVsc2Ugbj0wPT09dC5hbHBoYWh1bGw/byhoKTp0LmFscGhhaHVsbD4wP2EodC5hbHBoYWh1bGwsaCk6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9WyJ4IiwieSIsInoiXS5pbmRleE9mKHQpLG49W10sYT1lLmxlbmd0aCxvPTA7bzxhO28rKyluW29dPVtlW29dWyhyKzEpJTNdLGVbb11bKHIrMiklM11dO3JldHVybiBpKG4pfSh0LmRlbGF1bmF5YXhpcyxoKTt2YXIgdj17cG9zaXRpb25zOmgsY2VsbHM6bixsaWdodFBvc2l0aW9uOlt0LmxpZ2h0cG9zaXRpb24ueCx0LmxpZ2h0cG9zaXRpb24ueSx0LmxpZ2h0cG9zaXRpb24uel0sYW1iaWVudDp0LmxpZ2h0aW5nLmFtYmllbnQsZGlmZnVzZTp0LmxpZ2h0aW5nLmRpZmZ1c2Usc3BlY3VsYXI6dC5saWdodGluZy5zcGVjdWxhcixyb3VnaG5lc3M6dC5saWdodGluZy5yb3VnaG5lc3MsZnJlc25lbDp0LmxpZ2h0aW5nLmZyZXNuZWwsdmVydGV4Tm9ybWFsc0Vwc2lsb246dC5saWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbixmYWNlTm9ybWFsc0Vwc2lsb246dC5saWdodGluZy5mYWNlbm9ybWFsc2Vwc2lsb24sb3BhY2l0eTp0Lm9wYWNpdHksY29udG91ckVuYWJsZTp0LmNvbnRvdXIuc2hvdyxjb250b3VyQ29sb3I6bCh0LmNvbnRvdXIuY29sb3IpLnNsaWNlKDAsMyksY29udG91cldpZHRoOnQuY29udG91ci53aWR0aCx1c2VGYWNldE5vcm1hbHM6dC5mbGF0c2hhZGluZ307aWYodC5pbnRlbnNpdHkpe3ZhciB5PWModCk7dGhpcy5jb2xvcj0iI2ZmZiI7dmFyIHg9dC5pbnRlbnNpdHltb2RlO3ZbeCsiSW50ZW5zaXR5Il09dC5pbnRlbnNpdHksdlt4KyJJbnRlbnNpdHlCb3VuZHMiXT1beS5taW4seS5tYXhdLHYuY29sb3JtYXA9cyh0KX1lbHNlIHQudmVydGV4Y29sb3I/KHRoaXMuY29sb3I9dC52ZXJ0ZXhjb2xvclswXSx2LnZlcnRleENvbG9ycz1wKHQudmVydGV4Y29sb3IpKTp0LmZhY2Vjb2xvcj8odGhpcy5jb2xvcj10LmZhY2Vjb2xvclswXSx2LmNlbGxDb2xvcnM9cCh0LmZhY2Vjb2xvcikpOih0aGlzLmNvbG9yPXQuY29sb3Isdi5tZXNoQ29sb3I9bCh0LmNvbG9yKSk7dGhpcy5tZXNoLnVwZGF0ZSh2KX0saC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgZih0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciI6NzcyLCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Ijo4MDEsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgwLCJhbHBoYS1zaGFwZSI6NzEsImNvbnZleC1odWxsIjoxMzcsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzIsImdsLW1lc2gzZCI6MzAzfV0sMTEzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzKXtmdW5jdGlvbiBsKHIsbil7cmV0dXJuIGkuY29lcmNlKHQsZSxvLHIsbil9ZnVuY3Rpb24gYyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9bCh0KTtyZXR1cm4gZSYmaS5pc0FycmF5T3JUeXBlZEFycmF5KGUpP2U6bnVsbH0pKTtyZXR1cm4gZS5ldmVyeSgoZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQubGVuZ3RoPT09ZVswXS5sZW5ndGh9KSkmJmV9YyhbIngiLCJ5IiwieiJdKT8oYyhbImkiLCJqIiwiayJdKSwoIWUuaXx8ZS5qJiZlLmspJiYoIWUuanx8ZS5rJiZlLmkpJiYoIWUua3x8ZS5pJiZlLmopPyhuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5IiwieiJdLHMpLFsibGlnaHRpbmcuYW1iaWVudCIsImxpZ2h0aW5nLmRpZmZ1c2UiLCJsaWdodGluZy5zcGVjdWxhciIsImxpZ2h0aW5nLnJvdWdobmVzcyIsImxpZ2h0aW5nLmZyZXNuZWwiLCJsaWdodGluZy52ZXJ0ZXhub3JtYWxzZXBzaWxvbiIsImxpZ2h0aW5nLmZhY2Vub3JtYWxzZXBzaWxvbiIsImxpZ2h0cG9zaXRpb24ueCIsImxpZ2h0cG9zaXRpb24ueSIsImxpZ2h0cG9zaXRpb24ueiIsImZsYXRzaGFkaW5nIiwiYWxwaGFodWxsIiwiZGVsYXVuYXlheGlzIiwib3BhY2l0eSJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2wodCl9KSksbCgiY29udG91ci5zaG93IikmJihsKCJjb250b3VyLmNvbG9yIiksbCgiY29udG91ci53aWR0aCIpKSwiaW50ZW5zaXR5ImluIHQ/KGwoImludGVuc2l0eSIpLGwoImludGVuc2l0eW1vZGUiKSxhKHQsZSxzLGwse3ByZWZpeDoiIixjTGV0dGVyOiJjIn0pKTooZS5zaG93c2NhbGU9ITEsImZhY2Vjb2xvciJpbiB0P2woImZhY2Vjb2xvciIpOiJ2ZXJ0ZXhjb2xvciJpbiB0P2woInZlcnRleGNvbG9yIik6bCgiY29sb3IiLHIpKSxsKCJ0ZXh0IiksbCgiaG92ZXJ0ZXh0IiksbCgiaG92ZXJ0ZW1wbGF0ZSIpLGwoInhob3ZlcmZvcm1hdCIpLGwoInlob3ZlcmZvcm1hdCIpLGwoInpob3ZlcmZvcm1hdCIpLGUuX2xlbmd0aD1udWxsKTplLnZpc2libGU9ITEpOmUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjExMzJ9XSwxMTM2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxjb2xvcmJhcjp7bWluOiJjbWluIixtYXg6ImNtYXgifSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJtZXNoM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTEzMiwiLi9jYWxjIjoxMTMzLCIuL2NvbnZlcnQiOjExMzQsIi4vZGVmYXVsdHMiOjExMzV9XSwxMTM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmV4dGVuZEZsYXQsaT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLHM9dCgiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxjPWwuSU5DUkVBU0lORy5DT0xPUix1PWwuREVDUkVBU0lORy5DT0xPUixmPWkubGluZTtmdW5jdGlvbiBoKHQpe3JldHVybntsaW5lOntjb2xvcjpuKHt9LGYuY29sb3Ise2RmbHQ6dH0pLHdpZHRoOmYud2lkdGgsZGFzaDpvLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9fWUuZXhwb3J0cz17eHBlcmlvZDppLnhwZXJpb2QseHBlcmlvZDA6aS54cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IikseDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxvcGVuOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGhpZ2g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sbG93Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGNsb3NlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e3dpZHRoOm4oe30sZi53aWR0aCx7fSksZGFzaDpuKHt9LG8se30pLGVkaXRUeXBlOiJzdHlsZSJ9LGluY3JlYXNpbmc6aChjKSxkZWNyZWFzaW5nOmgodSksdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRleHQ6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGlja3dpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDouNSxkZmx0Oi4zLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJsYWJlbDpuKHt9LHMuaG92ZXJsYWJlbCx7c3BsaXQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InN0eWxlIn19KX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiOjY2MCwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzAsIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyI6NzQ2LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTEzODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPW4uXyxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCxlLHIsbil7cmV0dXJue286dCxoOmUsbDpyLGM6bn19ZnVuY3Rpb24gYyh0LGUscixvLGwsYyl7Zm9yKHZhciB1PWwubWFrZUNhbGNkYXRhKGUsIm9wZW4iKSxmPWwubWFrZUNhbGNkYXRhKGUsImhpZ2giKSxoPWwubWFrZUNhbGNkYXRhKGUsImxvdyIpLHA9bC5tYWtlQ2FsY2RhdGEoZSwiY2xvc2UiKSxkPUFycmF5LmlzQXJyYXkoZS50ZXh0KSxtPUFycmF5LmlzQXJyYXkoZS5ob3ZlcnRleHQpLGc9ITAsdj1udWxsLHk9ISFlLnhwZXJpb2RhbGlnbm1lbnQseD1bXSxiPTA7YjxvLmxlbmd0aDtiKyspe3ZhciBfPW9bYl0sdz11W2JdLFQ9ZltiXSxrPWhbYl0sQT1wW2JdO2lmKF8hPT1zJiZ3IT09cyYmVCE9PXMmJmshPT1zJiZBIT09cyl7QT09PXc/bnVsbCE9PXYmJkEhPT12JiYoZz1BPnYpOmc9QT53LHY9QTt2YXIgTT1jKHcsVCxrLEEpO00ucG9zPV8sTS55Yz0odytBKS8yLE0uaT1iLE0uZGlyPWc/ImluY3JlYXNpbmciOiJkZWNyZWFzaW5nIixNLng9TS5wb3MsTS55PVtrLFRdLHkmJihNLm9yaWdfcD1yW2JdKSxkJiYoTS50eD1lLnRleHRbYl0pLG0mJihNLmh0eD1lLmhvdmVydGV4dFtiXSkseC5wdXNoKE0pfWVsc2UgeC5wdXNoKHtwb3M6XyxlbXB0eTohMH0pfXJldHVybiBlLl9leHRyZW1lc1tsLl9pZF09YS5maW5kRXh0cmVtZXMobCxuLmNvbmNhdChoLGYpLHtwYWRkZWQ6ITB9KSx4Lmxlbmd0aCYmKHhbMF0udD17bGFiZWxzOntvcGVuOmkodCwib3BlbjoiKSsiICIsaGlnaDppKHQsImhpZ2g6IikrIiAiLGxvdzppKHQsImxvdzoiKSsiICIsY2xvc2U6aSh0LCJjbG9zZToiKSsiICJ9fSkseH1lLmV4cG9ydHM9e2NhbGM6ZnVuY3Rpb24odCxlKXt2YXIgcj1hLmdldEZyb21JZCh0LGUueGF4aXMpLGk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1yLl9taW5EaWZmO2lmKCFpKXt2YXIgYSxzPXQuX2Z1bGxEYXRhLGw9W107Zm9yKGk9MS8wLGE9MDthPHMubGVuZ3RoO2ErKyl7dmFyIGM9c1thXTtpZigib2hsYyI9PT1jLnR5cGUmJiEwPT09Yy52aXNpYmxlJiZjLnhheGlzPT09ZS5faWQpe2wucHVzaChjKTt2YXIgdT1lLm1ha2VDYWxjZGF0YShjLCJ4Iik7Yy5fb3JpZ1g9dTt2YXIgZj1vKHIsZSwieCIsdSkudmFscztjLl94Y2FsYz1mO3ZhciBoPW4uZGlzdGluY3RWYWxzKGYpLm1pbkRpZmY7aCYmaXNGaW5pdGUoaCkmJihpPU1hdGgubWluKGksaCkpfX1mb3IoaT09PTEvMCYmKGk9MSksYT0wO2E8bC5sZW5ndGg7YSsrKWxbYV0uX21pbkRpZmY9aX1yZXR1cm4gaSpyLnRpY2t3aWR0aH0odCxyLGUpLHU9ZS5fbWluRGlmZjtlLl9taW5EaWZmPW51bGw7dmFyIGY9ZS5fb3JpZ1g7ZS5fb3JpZ1g9bnVsbDt2YXIgaD1lLl94Y2FsYztlLl94Y2FsYz1udWxsO3ZhciBwPWModCxlLGYsaCxpLGwpO3JldHVybiBlLl9leHRyZW1lc1tyLl9pZF09YS5maW5kRXh0cmVtZXMocixoLHt2cGFkOnUvMn0pLHAubGVuZ3RoPyhuLmV4dGVuZEZsYXQocFswXS50LHt3SG92ZXI6dS8yLHRpY2tMZW46c30pLHApOlt7dDp7ZW1wdHk6ITB9fV19LGNhbGNDb21tb246Y319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTEzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vb2hsY19kZWZhdWx0cyIpLGE9dCgiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiKSxvPXQoIi4vYXR0cmlidXRlcyIpO2Z1bmN0aW9uIHModCxlLHIsbil7cihuKyIubGluZS5jb2xvciIpLHIobisiLmxpbmUud2lkdGgiLGUubGluZS53aWR0aCkscihuKyIubGluZS5kYXNoIixlLmxpbmUuZGFzaCl9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX1pKHQsZSxjLGwpPyhhKHQsZSxsLGMse3g6ITB9KSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJsaW5lLndpZHRoIiksYygibGluZS5kYXNoIikscyh0LGUsYywiaW5jcmVhc2luZyIpLHModCxlLGMsImRlY3JlYXNpbmciKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygidGlja3dpZHRoIiksbC5fcmVxdWVzdFJhbmdlc2xpZGVyW2UueGF4aXNdPSEwKTplLnZpc2libGU9ITF9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL3BlcmlvZF9kZWZhdWx0cyI6MTIxMSwiLi9hdHRyaWJ1dGVzIjoxMTM3LCIuL29obGNfZGVmYXVsdHMiOjExNDJ9XSwxMTQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0LGw9dCgiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIiksYz17aW5jcmVhc2luZzpsLklOQ1JFQVNJTkcuU1lNQk9MLGRlY3JlYXNpbmc6bC5ERUNSRUFTSU5HLlNZTUJPTH07ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaSxzLGw9dC5jZCxjPXQueGEsdT1sWzBdLnRyYWNlLGY9bFswXS50LGg9dS50eXBlLHA9Im9obGMiPT09aD8ibCI6Im1pbiIsZD0ib2hsYyI9PT1oPyJoIjoibWF4IixtPWYuYlBvc3x8MCxnPWYuYmRQb3N8fGYudGlja0xlbix2PWYud0hvdmVyLHk9TWF0aC5taW4oMSxnL01hdGguYWJzKGMucjJjKGMucmFuZ2VbMV0pLWMucjJjKGMucmFuZ2VbMF0pKSk7ZnVuY3Rpb24geCh0KXt2YXIgcj1mdW5jdGlvbih0KXtyZXR1cm4gdC5wb3MrbS1lfSh0KTtyZXR1cm4gYS5pbmJveChyLXYscit2LGkpfWZ1bmN0aW9uIGIodCl7dmFyIGU9dFtwXSxuPXRbZF07cmV0dXJuIGU9PT1ufHxhLmluYm94KGUtcixuLXIsaSl9ZnVuY3Rpb24gXyh0KXtyZXR1cm4oeCh0KStiKHQpKS8yfWk9dC5tYXhIb3ZlckRpc3RhbmNlLXkscz10Lm1heFNwaWtlRGlzdGFuY2UteTt2YXIgdz1hLmdldERpc3RhbmNlRnVuY3Rpb24obix4LGIsXyk7aWYoYS5nZXRDbG9zZXN0KGwsdyx0KSwhMT09PXQuaW5kZXgpcmV0dXJuIG51bGw7dmFyIFQ9bFt0LmluZGV4XTtpZihULmVtcHR5KXJldHVybiBudWxsO3ZhciBrPXVbVC5kaXJdLEE9ay5saW5lLmNvbG9yO3JldHVybiBvLm9wYWNpdHkoQSkmJmsubGluZS53aWR0aD90LmNvbG9yPUE6dC5jb2xvcj1rLmZpbGxjb2xvcix0LngwPWMuYzJwKFQucG9zK20tZywhMCksdC54MT1jLmMycChULnBvcyttK2csITApLHQueExhYmVsVmFsPXZvaWQgMCE9PVQub3JpZ19wP1Qub3JpZ19wOlQucG9zLHQuc3Bpa2VEaXN0YW5jZT1fKFQpKnMvaSx0LnhTcGlrZT1jLmMycChULnBvcywhMCksdH1mdW5jdGlvbiBmKHQsZSxyLGEpe3ZhciBvPXQuY2Qscz10LnlhLGw9b1swXS50cmFjZSxjPW9bMF0udCxmPVtdLGg9dSh0LGUscixhKTtpZighaClyZXR1cm5bXTt2YXIgcD1vW2guaW5kZXhdLmhpfHxsLmhvdmVyaW5mbyxkPXAuc3BsaXQoIisiKTtpZighKCJhbGwiPT09cHx8LTEhPT1kLmluZGV4T2YoInkiKSkpcmV0dXJuW107Zm9yKHZhciBtPVsiaGlnaCIsIm9wZW4iLCJjbG9zZSIsImxvdyJdLGc9e30sdj0wO3Y8bS5sZW5ndGg7disrKXt2YXIgeSx4PW1bdl0sYj1sW3hdW2guaW5kZXhdLF89cy5jMnAoYiwhMCk7YiBpbiBnPyh5PWdbYl0pLnlMYWJlbCs9Ijxicj4iK2MubGFiZWxzW3hdK24uaG92ZXJMYWJlbFRleHQocyxiLGwueWhvdmVyZm9ybWF0KTooKHk9aS5leHRlbmRGbGF0KHt9LGgpKS55MD15LnkxPV8seS55TGFiZWxWYWw9Yix5LnlMYWJlbD1jLmxhYmVsc1t4XStuLmhvdmVyTGFiZWxUZXh0KHMsYixsLnlob3ZlcmZvcm1hdCkseS5uYW1lPSIiLGYucHVzaCh5KSxnW2JdPXkpfXJldHVybiBmfWZ1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5jZCxvPXQueWEsbD1hWzBdLnRyYWNlLGY9YVswXS50LGg9dSh0LGUscixpKTtpZighaClyZXR1cm5bXTt2YXIgcD1hW2guaW5kZXhdLGQ9aC5pbmRleD1wLmksbT1wLmRpcjtmdW5jdGlvbiBnKHQpe3JldHVybiBmLmxhYmVsc1t0XStuLmhvdmVyTGFiZWxUZXh0KG8sbFt0XVtkXSxsLnlob3ZlcmZvcm1hdCl9dmFyIHY9cC5oaXx8bC5ob3ZlcmluZm8seT12LnNwbGl0KCIrIikseD0iYWxsIj09PXYsYj14fHwtMSE9PXkuaW5kZXhPZigieSIpLF89eHx8LTEhPT15LmluZGV4T2YoInRleHQiKSx3PWI/W2coIm9wZW4iKSxnKCJoaWdoIiksZygibG93IiksZygiY2xvc2UiKSsiICAiK2NbbV1dOltdO3JldHVybiBfJiZzKHAsbCx3KSxoLmV4dHJhVGV4dD13LmpvaW4oIjxicj4iKSxoLnkwPWgueTE9by5jMnAocC55YywhMCksW2hdfWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHQuY2RbMF0udHJhY2UuaG92ZXJsYWJlbC5zcGxpdD9mKHQsZSxyLG4pOmgodCxlLHIsbil9LGhvdmVyU3BsaXQ6Zixob3Zlck9uUG9pbnRzOmh9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMTQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6Im9obGMiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGNhdGVnb3JpZXM6WyJjYXJ0ZXNpYW4iLCJzdmciLCJzaG93TGVnZW5kIl0sbWV0YTp7fSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hdHRyaWJ1dGVzIjoxMTM3LCIuL2NhbGMiOjExMzgsIi4vZGVmYXVsdHMiOjExMzksIi4vaG92ZXIiOjExNDAsIi4vcGxvdCI6MTE0MywiLi9zZWxlY3QiOjExNDQsIi4vc3R5bGUiOjExNDV9XSwxMTQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89cigieCIpLHM9cigib3BlbiIpLGw9cigiaGlnaCIpLGM9cigibG93IiksdT1yKCJjbG9zZSIpO2lmKHIoImhvdmVybGFiZWwuc3BsaXQiKSxuLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiXSxhKSxzJiZsJiZjJiZ1KXt2YXIgZj1NYXRoLm1pbihzLmxlbmd0aCxsLmxlbmd0aCxjLmxlbmd0aCx1Lmxlbmd0aCk7cmV0dXJuIG8mJihmPU1hdGgubWluKGYsaS5taW5Sb3dMZW5ndGgobykpKSxlLl9sZW5ndGg9ZixmfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDR9XSwxMTQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1lLnlheGlzLHM9ZS54YXhpcyxsPSEhcy5yYW5nZWJyZWFrcztpLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIG9obGMiKS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0sYT1yLnQ7aWYoITAhPT1yLnRyYWNlLnZpc2libGV8fGEuZW1wdHkpZS5yZW1vdmUoKTtlbHNle3ZhciBjPWEudGlja0xlbix1PWUuc2VsZWN0QWxsKCJwYXRoIikuZGF0YShpLmlkZW50aXR5KTt1LmVudGVyKCkuYXBwZW5kKCJwYXRoIiksdS5leGl0KCkucmVtb3ZlKCksdS5hdHRyKCJkIiwoZnVuY3Rpb24odCl7aWYodC5lbXB0eSlyZXR1cm4iTTAsMFoiO3ZhciBlPXMuYzJwKHQucG9zLWMsITApLHI9cy5jMnAodC5wb3MrYywhMCksbj1sPyhlK3IpLzI6cy5jMnAodC5wb3MsITApO3JldHVybiJNIitlKyIsIitvLmMycCh0Lm8sITApKyJIIituKyJNIituKyIsIitvLmMycCh0LmgsITApKyJWIitvLmMycCh0LmwsITApKyJNIityKyIsIitvLmMycCh0LmMsITApKyJIIitufSkpfX0pKX19LHsiLi4vLi4vbGliIjo3NzYsIkBwbG90bHkvZDMiOjU4fV0sMTE0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXQuY2QsaT10LnhheGlzLGE9dC55YXhpcyxvPVtdLHM9blswXS50LmJQb3N8fDA7aWYoITE9PT1lKWZvcihyPTA7cjxuLmxlbmd0aDtyKyspbltyXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIGw9bltyXTtlLmNvbnRhaW5zKFtpLmMycChsLnBvcytzKSxhLmMycChsLnljKV0sbnVsbCxsLmksdCk/KG8ucHVzaCh7cG9pbnROdW1iZXI6bC5pLHg6aS5jMmQobC5wb3MpLHk6YS5jMmQobC55Yyl9KSxsLnNlbGVjdGVkPTEpOmwuc2VsZWN0ZWQ9MH1yZXR1cm4gb319LHt9XSwxMTQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG89cnx8bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLm9obGNsYXllciIpLnNlbGVjdEFsbCgiZy50cmFjZSIpO28uc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdFswXS50cmFjZS5vcGFjaXR5fSkpLG8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dFswXS50cmFjZTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5lbXB0eSl7dmFyIHI9ZVt0LmRpcl0ubGluZTtuLnNlbGVjdCh0aGlzKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5jYWxsKGEuc3Ryb2tlLHIuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxyLmRhc2gsci53aWR0aCkuc3R5bGUoIm9wYWNpdHkiLGUuc2VsZWN0ZWRwb2ludHMmJiF0LnNlbGVjdGVkPy4zOjEpfX0pKX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiQHBsb3RseS9kMyI6NTh9XSwxMTQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxsPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsYz1uKHtlZGl0VHlwZToiY2FsYyJ9LG8oImxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHNwbGluZSJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxob3ZlcnRlbXBsYXRlOnMoe2VkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx7a2V5czpbImNvdW50IiwicHJvYmFiaWxpdHkiXX0pfSk7ZS5leHBvcnRzPXtkb21haW46bCh7bmFtZToicGFyY2F0cyIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG92ZXJpbmZvOm4oe30saS5ob3ZlcmluZm8se2ZsYWdzOlsiY291bnQiLCJwcm9iYWJpbGl0eSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSksaG92ZXJvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiY2F0ZWdvcnkiLCJjb2xvciIsImRpbWVuc2lvbiJdLGRmbHQ6ImNhdGVnb3J5IixlZGl0VHlwZToicGxvdCJ9LGhvdmVydGVtcGxhdGU6cyh7ZWRpdFR5cGU6InBsb3QiLGFycmF5T2s6ITF9LHtrZXlzOlsiY291bnQiLCJwcm9iYWJpbGl0eSIsImNhdGVnb3J5IiwiY2F0ZWdvcnljb3VudCIsImNvbG9yY291bnQiLCJiYW5kY29sb3Jjb3VudCJdfSksYXJyYW5nZW1lbnQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInBlcnBlbmRpY3VsYXIiLCJmcmVlZm9ybSIsImZpeGVkIl0sZGZsdDoicGVycGVuZGljdWxhciIsZWRpdFR5cGU6InBsb3QifSxidW5kbGVjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzb3J0cGF0aHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImZvcndhcmQiLCJiYWNrd2FyZCJdLGRmbHQ6ImZvcndhcmQiLGVkaXRUeXBlOiJwbG90In0sbGFiZWxmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLHRpY2tmb250OmEoe2VkaXRUeXBlOiJjYWxjIn0pLGRpbWVuc2lvbnM6e19pc0xpbmtlZFRvQXJyYXk6ImRpbWVuc2lvbiIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMifSxjYXRlZ29yeW9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0cmFjZSIsImNhdGVnb3J5IGFzY2VuZGluZyIsImNhdGVnb3J5IGRlc2NlbmRpbmciLCJhcnJheSJdLGRmbHQ6InRyYWNlIixlZGl0VHlwZToiY2FsYyJ9LGNhdGVnb3J5YXJyYXk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGlja3RleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sZGlzcGxheWluZGV4Ont2YWxUeXBlOiJpbnRlZ2VyIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIix2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19LGxpbmU6Yyxjb3VudHM6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoxLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxjdXN0b21kYXRhOnZvaWQgMCxob3ZlcmxhYmVsOnZvaWQgMCxpZHM6dm9pZCAwLGxlZ2VuZGdyb3VwOnZvaWQgMCxsZWdlbmRyYW5rOnZvaWQgMCxvcGFjaXR5OnZvaWQgMCxzZWxlY3RlZHBvaW50czp2b2lkIDAsc2hvd2xlZ2VuZDp2b2lkIDB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OX1dLDExNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxpPXQoIi4vcGxvdCIpO3IubmFtZT0icGFyY2F0cyIsci5wbG90PWZ1bmN0aW9uKHQsZSxyLGEpe3ZhciBvPW4odC5jYWxjZGF0YSwicGFyY2F0cyIpO2lmKG8ubGVuZ3RoKXt2YXIgcz1vWzBdO2kodCxzLHIsYSl9fSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjYXRzIiksYT1lLl9oYXMmJmUuX2hhcygicGFyY2F0cyIpO2kmJiFhJiZuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5wYXJjYXRzIikucmVtb3ZlKCl9fSx7Ii4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4vcGxvdCI6MTE1Mn1dLDExNDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpLG89dCgiLi4vLi4vbGliL2ZpbHRlcl91bmlxdWUuanMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz10KCJmYXN0LWlzbnVtZXJpYyIpO2Z1bmN0aW9uIHUodCxlLHIpe3QudmFsdWVJbmRzLnB1c2goZSksdC5jb3VudCs9cn1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm57Y2F0ZWdvcnlJbmRzOnQsY29sb3I6ZSxyYXdDb2xvcjpyLHZhbHVlSW5kczpbXSxjb3VudDowfX1mdW5jdGlvbiBoKHQsZSxyKXt0LnZhbHVlSW5kcy5wdXNoKGUpLHQuY291bnQrPXJ9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bC5maWx0ZXJWaXNpYmxlKGUuZGltZW5zaW9ucyk7aWYoMD09PXIubGVuZ3RoKXJldHVybltdO3ZhciBwLGQsbSxnPXIubWFwKChmdW5jdGlvbih0KXt2YXIgZTtpZigidHJhY2UiPT09dC5jYXRlZ29yeW9yZGVyKWU9bnVsbDtlbHNlIGlmKCJhcnJheSI9PT10LmNhdGVnb3J5b3JkZXIpZT10LmNhdGVnb3J5YXJyYXk7ZWxzZXtlPW8odC52YWx1ZXMpO2Zvcih2YXIgcj0hMCxuPTA7bjxlLmxlbmd0aDtuKyspaWYoIWMoZVtuXSkpe3I9ITE7YnJlYWt9ZS5zb3J0KHI/bC5zb3J0ZXJBc2M6dm9pZCAwKSwiY2F0ZWdvcnkgZGVzY2VuZGluZyI9PT10LmNhdGVnb3J5b3JkZXImJihlPWUucmV2ZXJzZSgpKX1yZXR1cm4gZnVuY3Rpb24odCxlKXtlPW51bGw9PWU/W106ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0fSkpO3ZhciByPXt9LG49e30saT1bXTtlLmZvckVhY2goKGZ1bmN0aW9uKHQsZSl7clt0XT0wLG5bdF09ZX0pKTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIG8scz10W2FdO3ZvaWQgMD09PXJbc10/KHJbc109MSxvPWUucHVzaChzKS0xLG5bc109byk6KHJbc10rKyxvPW5bc10pLGkucHVzaChvKX12YXIgbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHJbdF19KSk7cmV0dXJue3VuaXF1ZVZhbHVlczplLHVuaXF1ZUNvdW50czpsLGluZHM6aX19KHQudmFsdWVzLGUpfSkpO3A9bC5pc0FycmF5T3JUeXBlZEFycmF5KGUuY291bnRzKT9lLmNvdW50czpbZS5jb3VudHNdLGZ1bmN0aW9uKHQpe3ZhciBlO2lmKGZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5sZW5ndGgpLHI9MDtyPHQubGVuZ3RoO3IrKyl7aWYodFtyXTwwfHx0W3JdPj10Lmxlbmd0aClyZXR1cm4hMTtpZih2b2lkIDAhPT1lW3Rbcl1dKXJldHVybiExO2VbdFtyXV09ITB9cmV0dXJuITB9KHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5aW5kZXh9KSkpKWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS5fZGlzcGxheWluZGV4PXRbZV0uZGlzcGxheWluZGV4O2Vsc2UgZm9yKGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLl9kaXNwbGF5aW5kZXg9ZX0ociksci5mb3JFYWNoKChmdW5jdGlvbih0LGUpeyFmdW5jdGlvbih0LGUpe3QuX2NhdGVnb3J5YXJyYXk9ZS51bmlxdWVWYWx1ZXMsbnVsbD09PXQudGlja3RleHR8fHZvaWQgMD09PXQudGlja3RleHQ/dC5fdGlja3RleHQ9W106dC5fdGlja3RleHQ9dC50aWNrdGV4dC5zbGljZSgpO2Zvcih2YXIgcj10Ll90aWNrdGV4dC5sZW5ndGg7cjxlLnVuaXF1ZVZhbHVlcy5sZW5ndGg7cisrKXQuX3RpY2t0ZXh0LnB1c2goZS51bmlxdWVWYWx1ZXNbcl0pfSh0LGdbZV0pfSkpO3ZhciB2LHk9ZS5saW5lO3k/KGkoZSwibGluZSIpJiZhKHQsZSx7dmFsczplLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJsaW5lIixjTGV0dGVyOiJjIn0pLHY9cy50cnlDb2xvcnNjYWxlKHkpKTp2PWwuaWRlbnRpdHk7dmFyIHgsYixfLHcsVCxrPXJbMF0udmFsdWVzLmxlbmd0aCxBPXt9LE09Zy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmluZHN9KSk7Zm9yKG09MCx4PTA7eDxrO3grKyl7dmFyIFM9W107Zm9yKGI9MDtiPE0ubGVuZ3RoO2IrKylTLnB1c2goTVtiXVt4XSk7ZD1wW3glcC5sZW5ndGhdLG0rPWQ7dmFyIEU9KF89eCx3PXZvaWQgMCxUPXZvaWQgMCxsLmlzQXJyYXlPclR5cGVkQXJyYXkoeS5jb2xvcik/VD13PXkuY29sb3JbXyV5LmNvbG9yLmxlbmd0aF06dz15LmNvbG9yLHtjb2xvcjp2KHcpLHJhd0NvbG9yOlR9KSxMPVMrIi0iK0UucmF3Q29sb3I7dm9pZCAwPT09QVtMXSYmKEFbTF09ZihTLEUuY29sb3IsRS5yYXdDb2xvcikpLGgoQVtMXSx4LGQpfXZhciBDLFA9ci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyLG4saSl7cmV0dXJue2RpbWVuc2lvbkluZDp0LGNvbnRhaW5lckluZDplLGRpc3BsYXlJbmQ6cixkaW1lbnNpb25MYWJlbDpuLGNvdW50OmksY2F0ZWdvcmllczpbXSxkcmFnWDpudWxsfX0oZSx0Ll9pbmRleCx0Ll9kaXNwbGF5aW5kZXgsdC5sYWJlbCxtKX0pKTtmb3IoeD0wO3g8azt4KyspZm9yKGQ9cFt4JXAubGVuZ3RoXSxiPTA7YjxQLmxlbmd0aDtiKyspe3ZhciBJPVBbYl0uY29udGFpbmVySW5kLE89Z1tiXS5pbmRzW3hdLHo9UFtiXS5jYXRlZ29yaWVzO2lmKHZvaWQgMD09PXpbT10pe3ZhciBEPWUuZGltZW5zaW9uc1tJXS5fY2F0ZWdvcnlhcnJheVtPXSxSPWUuZGltZW5zaW9uc1tJXS5fdGlja3RleHRbT107eltPXT17ZGltZW5zaW9uSW5kOmIsY2F0ZWdvcnlJbmQ6Qz1PLGNhdGVnb3J5VmFsdWU6RCxkaXNwbGF5SW5kOkMsY2F0ZWdvcnlMYWJlbDpSLHZhbHVlSW5kczpbXSxjb3VudDowLGRyYWdZOm51bGx9fXUoeltPXSx4LGQpfXJldHVybiBuKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5sZW5ndGh9KSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLm1heCh0LGUpfSkpO3JldHVybntkaW1lbnNpb25zOnQscGF0aHM6ZSx0cmFjZTp2b2lkIDAsbWF4Q2F0czpuLGNvdW50OnJ9fShQLEEsbSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9maWx0ZXJfdW5pcXVlLmpzIjo3NjcsIi4uLy4uL2xpYi9ndXAiOjc3MywiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDExNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKTtmdW5jdGlvbiB1KHQsZSl7ZnVuY3Rpb24gcihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbC5kaW1lbnNpb25zLHIsaSl9dmFyIGk9cigidmFsdWVzIiksYT1yKCJ2aXNpYmxlIik7aWYoaSYmaS5sZW5ndGh8fChhPWUudmlzaWJsZT0hMSksYSl7cigibGFiZWwiKSxyKCJkaXNwbGF5aW5kZXgiLGUuX2luZGV4KTt2YXIgbyxzPXQuY2F0ZWdvcnlhcnJheSxjPUFycmF5LmlzQXJyYXkocykmJnMubGVuZ3RoPjA7YyYmKG89ImFycmF5Iik7dmFyIHU9cigiY2F0ZWdvcnlvcmRlciIsbyk7ImFycmF5Ij09PXU/KHIoImNhdGVnb3J5YXJyYXkiKSxyKCJ0aWNrdGV4dCIpKTooZGVsZXRlIHQuY2F0ZWdvcnlhcnJheSxkZWxldGUgdC50aWNrdGV4dCksY3x8ImFycmF5IiE9PXV8fChlLmNhdGVnb3J5b3JkZXI9InRyYWNlIil9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXtmdW5jdGlvbiBoKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9dmFyIHA9cyh0LGUse25hbWU6ImRpbWVuc2lvbnMiLGhhbmRsZUl0ZW1EZWZhdWx0czp1fSksZD1mdW5jdGlvbih0LGUscixvLHMpe3MoImxpbmUuc2hhcGUiKSxzKCJsaW5lLmhvdmVydGVtcGxhdGUiKTt2YXIgbD1zKCJsaW5lLmNvbG9yIixvLmNvbG9yd2F5WzBdKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGYsaCk7byhlLGYsaCksQXJyYXkuaXNBcnJheShwKSYmcC5sZW5ndGh8fChlLnZpc2libGU9ITEpLGMoZSxwLCJ2YWx1ZXMiLGQpLGgoImhvdmVyb24iKSxoKCJob3ZlcnRlbXBsYXRlIiksaCgiYXJyYW5nZW1lbnQiKSxoKCJidW5kbGVjb2xvcnMiKSxoKCJzb3J0cGF0aHMiKSxoKCJjb3VudHMiKTt2YXIgbT17ZmFtaWx5OmYuZm9udC5mYW1pbHksc2l6ZTpNYXRoLnJvdW5kKGYuZm9udC5zaXplKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJsYWJlbGZvbnQiLG0pO3ZhciBnPXtmYW1pbHk6Zi5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQoZi5mb250LnNpemUvMS4yKSxjb2xvcjpmLmZvbnQuY29sb3J9O24uY29lcmNlRm9udChoLCJ0aWNrZm9udCIsZyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyI6NjQ5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyI6NjUwLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvYXJyYXlfY29udGFpbmVyX2RlZmF1bHRzIjo4MjIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMTYyLCIuL2F0dHJpYnV0ZXMiOjExNDZ9XSwxMTUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGNvbG9yYmFyOntjb250YWluZXI6ImxpbmUiLG1pbjoiY21pbiIsbWF4OiJjbWF4In0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InBhcmNhdHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbIm5vT3BhY2l0eSJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE0NiwiLi9iYXNlX3Bsb3QiOjExNDcsIi4vY2FsYyI6MTE0OCwiLi9kZWZhdWx0cyI6MTE0OSwiLi9wbG90IjoxMTUyfV0sMTE1MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlTnVtYmVyLGE9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9cy5zdHJUcmFuc2xhdGUsYz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSx1PXQoInRpbnljb2xvcjIiKSxmPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpO2Z1bmN0aW9uIGgodCxlLHIsaSl7dmFyIGE9dC5tYXAoRi5iaW5kKDAsZSxyKSksbz1pLnNlbGVjdEFsbCgiZy5wYXJjYXRzbGF5ZXIiKS5kYXRhKFtudWxsXSk7by5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwicGFyY2F0c2xheWVyIikuc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIik7dmFyIHU9by5zZWxlY3RBbGwoImcudHJhY2UucGFyY2F0cyIpLmRhdGEoYSxwKSxoPXUuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsInRyYWNlIHBhcmNhdHMiKTt1LmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBsKHQueCx0LnkpfSkpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJwYXRocyIpO3ZhciB5PXUuc2VsZWN0KCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApO3kuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpO3ZhciB4PXkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5hdHRyKCJjbGFzcyIsInBhdGgiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMCkuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsMCk7Xyh4KSx5LmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpLHguZW1wdHkoKXx8eS5zb3J0KG0pLHkuZXhpdCgpLnJlbW92ZSgpLHkub24oIm1vdXNlb3ZlciIsZykub24oIm1vdXNlb3V0Iix2KS5vbigiY2xpY2siLGIpLGguYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJkaW1lbnNpb25zIik7dmFyIHc9dS5zZWxlY3QoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSkscCk7dy5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIiwiZGltZW5zaW9uIiksdy5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gbCh0LngsMCl9KSksdy5leGl0KCkucmVtb3ZlKCk7dmFyIEE9dy5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCksTT1BLmVudGVyKCkuYXBwZW5kKCJnIikuYXR0cigiY2xhc3MiLCJjYXRlZ29yeSIpO0EuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLE0uYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJjYXRyZWN0IikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIiksQS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoImZpbGwiLCJub25lIikuYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aH0pKS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHR9KSksVChNKTt2YXIgUz1BLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJhbmRzfSkscCk7Uy5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKTt2YXIgRT1TLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuYXR0cigiY2xhc3MiLCJiYW5kcmVjdCIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKS5hdHRyKCJmaWxsIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sb3J9KSkuYXR0cigiZmlsbC1vcGFjaXR5IiwwKTtTLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LndpZHRofSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5hdHRyKCJ5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQueX0pKS5hdHRyKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4iZml4ZWQiPT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50PyJkZWZhdWx0IjoicGVycGVuZGljdWxhciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/Im5zLXJlc2l6ZSI6Im1vdmUifSkpLGsoRSksUy5leGl0KCkucmVtb3ZlKCksTS5hcHBlbmQoInRleHQiKS5hdHRyKCJjbGFzcyIsImNhdGxhYmVsIikuYXR0cigicG9pbnRlci1ldmVudHMiLCJub25lIik7dmFyIHo9ZS5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yO0Euc2VsZWN0KCJ0ZXh0LmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoImFsaWdubWVudC1iYXNlbGluZSIsIm1pZGRsZSIpLnN0eWxlKCJ0ZXh0LXNoYWRvdyIsZi5tYWtlVGV4dFNoYWRvdyh6KSkuc3R5bGUoImZpbGwiLCJyZ2IoMCwgMCwgMCkiKS5hdHRyKCJ4IiwoZnVuY3Rpb24odCl7cmV0dXJuIGQodCk/dC53aWR0aCs1Oi01fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5oZWlnaHQvMn0pKS50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gdC5tb2RlbC5jYXRlZ29yeUxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2MuZm9udChuLnNlbGVjdCh0aGlzKSx0LnBhcmNhdHNWaWV3TW9kZWwuY2F0ZWdvcnlsYWJlbGZvbnQpLGYuY29udmVydFRvVHNwYW5zKG4uc2VsZWN0KHRoaXMpLGUpfSkpLE0uYXBwZW5kKCJ0ZXh0IikuYXR0cigiY2xhc3MiLCJkaW1sYWJlbCIpLEEuc2VsZWN0KCJ0ZXh0LmRpbWxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5hdHRyKCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJiYXNlbGluZSIpLmF0dHIoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3JldHVybiJmaXhlZCI9PT10LnBhcmNhdHNWaWV3TW9kZWwuYXJyYW5nZW1lbnQ/ImRlZmF1bHQiOiJldy1yZXNpemUifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aC8yfSkpLmF0dHIoInkiLC01KS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKS5lYWNoKChmdW5jdGlvbih0KXtjLmZvbnQobi5zZWxlY3QodGhpcyksdC5wYXJjYXRzVmlld01vZGVsLmxhYmVsZm9udCl9KSksQS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5vbigibW91c2VvdmVyIixMKS5vbigibW91c2VvdXQiLEMpLEEuZXhpdCgpLnJlbW92ZSgpLHcuY2FsbChuLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQueCx5OjB9fSkpLm9uKCJkcmFnc3RhcnQiLFApLm9uKCJkcmFnIixJKS5vbigiZHJhZ2VuZCIsTykpLHUuZWFjaCgoZnVuY3Rpb24odCl7dC50cmFjZVNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKSx0LnBhdGhTZWxlY3Rpb249bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnBhdGhzIikuc2VsZWN0QWxsKCJwYXRoLnBhdGgiKSx0LmRpbWVuc2lvblNlbGVjdGlvbj1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuZGltZW5zaW9ucyIpLnNlbGVjdEFsbCgiZy5kaW1lbnNpb24iKX0pKSx1LmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBwKHQpe3JldHVybiB0LmtleX1mdW5jdGlvbiBkKHQpe3ZhciBlPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zLmxlbmd0aCxyPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2UtMV0ubW9kZWwuZGltZW5zaW9uSW5kO3JldHVybiB0Lm1vZGVsLmRpbWVuc2lvbkluZD09PXJ9ZnVuY3Rpb24gbSh0LGUpe3JldHVybiB0Lm1vZGVsLnJhd0NvbG9yPmUubW9kZWwucmF3Q29sb3I/MTp0Lm1vZGVsLnJhd0NvbG9yPGUubW9kZWwucmF3Q29sb3I/LTE6MH1mdW5jdGlvbiBnKHQpe2lmKCF0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbiYmLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKXtzLnJhaXNlVG9Ub3AodGhpcyksdyhuLnNlbGVjdCh0aGlzKSk7dmFyIGU9eSh0KSxyPXgodCk7aWYodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pLC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoIm5vbmUiKSl7dmFyIGksYSxsLGM9bi5tb3VzZSh0aGlzKVswXSxmPXQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixoPXQucGFyY2F0c1ZpZXdNb2RlbC50cmFjZSxwPWYuX2Z1bGxMYXlvdXQsZD1wLl9wYXBlcmRpdi5ub2RlKCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbT10LnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKGw9MDtsPHQubGVmdFhzLmxlbmd0aC0xO2wrKylpZih0LmxlZnRYc1tsXSt0LmRpbVdpZHRoc1tsXS0yPD1jJiZjPD10LmxlZnRYc1tsKzFdKzIpe3ZhciBnPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2xdLHY9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbbCsxXTtpPShnLngrZy53aWR0aCt2LngpLzIsYT0odC50b3BZc1tsXSt0LnRvcFlzW2wrMV0rdC5oZWlnaHQpLzI7YnJlYWt9dmFyIGI9dC5wYXJjYXRzVmlld01vZGVsLngraSxfPXQucGFyY2F0c1ZpZXdNb2RlbC55K2EsVD11Lm1vc3RSZWFkYWJsZSh0Lm1vZGVsLmNvbG9yLFsiYmxhY2siLCJ3aGl0ZSJdKSxrPXQubW9kZWwuY291bnQsQT1rL3QucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5jb3VudCxNPXtjb3VudExhYmVsOmsscHJvYmFiaWxpdHlMYWJlbDpBLnRvRml4ZWQoMyl9LFM9W107LTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmUy5wdXNoKFsiQ291bnQ6IixNLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmUy5wdXNoKFsiUDoiLE0ucHJvYmFiaWxpdHlMYWJlbF0uam9pbigiICIpKTt2YXIgRT1TLmpvaW4oIjxicj4iKSxMPW4ubW91c2UoZilbMF07by5sb25lSG92ZXIoe3RyYWNlOmgseDpiLWQubGVmdCttLmxlZnQseTpfLWQudG9wK20udG9wLHRleHQ6RSxjb2xvcjp0Lm1vZGVsLmNvbG9yLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEwLGZvbnRDb2xvcjpULGlkZWFsQWxpZ246TDxiPyJyaWdodCI6ImxlZnQiLGhvdmVydGVtcGxhdGU6KGgubGluZXx8e30pLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpNLGV2ZW50RGF0YTpbe2RhdGE6aC5faW5wdXQsZnVsbERhdGE6aCxjb3VudDprLHByb2JhYmlsaXR5OkF9XX0se2NvbnRhaW5lcjpwLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjpwLl9wYXBlci5ub2RlKCksZ2Q6Zn0pfX19ZnVuY3Rpb24gdih0KXtpZighdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb24mJihfKG4uc2VsZWN0KHRoaXMpKSxvLmxvbmVVbmhvdmVyKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdi5fZnVsbExheW91dC5faG92ZXJsYXllci5ub2RlKCkpLHQucGFyY2F0c1ZpZXdNb2RlbC5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigic2tpcCIpKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV91bmhvdmVyIix7cG9pbnRzOmUsZXZlbnQ6bi5ldmVudCxjb25zdHJhaW50czpyfSl9fWZ1bmN0aW9uIHkodCl7Zm9yKHZhciBlPVtdLHI9eih0LnBhcmNhdHNWaWV3TW9kZWwpLG49MDtuPHQubW9kZWwudmFsdWVJbmRzLmxlbmd0aDtuKyspe3ZhciBpPXQubW9kZWwudmFsdWVJbmRzW25dO2UucHVzaCh7Y3VydmVOdW1iZXI6cixwb2ludE51bWJlcjppfSl9cmV0dXJuIGV9ZnVuY3Rpb24geCh0KXtmb3IodmFyIGU9e30scj10LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9ucyxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl0sYT1pLmNhdGVnb3JpZXNbdC5tb2RlbC5jYXRlZ29yeUluZHNbbl1dO2VbaS5jb250YWluZXJJbmRdPWEuY2F0ZWdvcnlWYWx1ZX1yZXR1cm4gdm9pZCAwIT09dC5tb2RlbC5yYXdDb2xvciYmKGUuY29sb3I9dC5tb2RlbC5yYXdDb2xvciksZX1mdW5jdGlvbiBiKHQpe2lmKC0xPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSl7dmFyIGU9eSh0KSxyPXgodCk7dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LmVtaXQoInBsb3RseV9jbGljayIse3BvaW50czplLGV2ZW50Om4uZXZlbnQsY29uc3RyYWludHM6cn0pfX1mdW5jdGlvbiBfKHQpe3QuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1vZGVsLmNvbG9yfSkpLmF0dHIoImZpbGwtb3BhY2l0eSIsLjYpLmF0dHIoInN0cm9rZSIsImxpZ2h0Z3JheSIpLmF0dHIoInN0cm9rZS13aWR0aCIsLjIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwxKX1mdW5jdGlvbiB3KHQpe3QuYXR0cigiZmlsbC1vcGFjaXR5IiwuOCkuYXR0cigic3Ryb2tlIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUubW9zdFJlYWRhYmxlKHQubW9kZWwuY29sb3IsWyJibGFjayIsIndoaXRlIl0pfSkpLmF0dHIoInN0cm9rZS13aWR0aCIsLjMpfWZ1bmN0aW9uIFQodCl7dC5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwxKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsMSl9ZnVuY3Rpb24gayh0KXt0LmF0dHIoInN0cm9rZSIsImJsYWNrIikuYXR0cigic3Ryb2tlLXdpZHRoIiwuMikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDEpLmF0dHIoImZpbGwtb3BhY2l0eSIsMSl9ZnVuY3Rpb24gQSh0KXt2YXIgZT10LnBhcmNhdHNWaWV3TW9kZWwucGF0aFNlbGVjdGlvbixyPXQuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uSW5kLG49dC5jYXRlZ29yeVZpZXdNb2RlbC5tb2RlbC5jYXRlZ29yeUluZDtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZGVsLmNhdGVnb3J5SW5kc1tyXT09PW4mJmUubW9kZWwuY29sb3I9PT10LmNvbG9yfSkpfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBpPW4uc2VsZWN0KHQpLmRhdHVtKCksYT1pLmNhdGVnb3J5Vmlld01vZGVsLm1vZGVsLG89aS5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LHM9bi5zZWxlY3QodC5wYXJlbnROb2RlKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSxsPVtdO3MuZWFjaCgoZnVuY3Rpb24odCl7QSh0KS5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gUyh0LGUscil7dmFyIGk9bi5zZWxlY3QodCkuZGF0dW0oKSxhPWkuY2F0ZWdvcnlWaWV3TW9kZWwubW9kZWwsbz1pLnBhcmNhdHNWaWV3TW9kZWwuZ3JhcGhEaXYscz1BKGkpLGw9W107cy5lYWNoKChmdW5jdGlvbih0KXtBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShsLHkodCkpfSkpO3ZhciBjPXt9O2NbYS5kaW1lbnNpb25JbmRdPWEuY2F0ZWdvcnlWYWx1ZSx2b2lkIDAhPT1pLnJhd0NvbG9yJiYoYy5jb2xvcj1pLnJhd0NvbG9yKSxvLmVtaXQoZSx7cG9pbnRzOmwsZXZlbnQ6cixjb25zdHJhaW50czpjfSl9ZnVuY3Rpb24gRSh0LGUscil7dC5fZnVsbExheW91dC5fY2FsY0ludmVyc2VUcmFuc2Zvcm0odCk7dmFyIGksYSxvPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWCxzPXQuX2Z1bGxMYXlvdXQuX2ludlNjYWxlWSxsPW4uc2VsZWN0KHIucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKSxjPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHU9bC5kYXR1bSgpLGY9dS5wYXJjYXRzVmlld01vZGVsLGg9Zi5tb2RlbC5kaW1lbnNpb25zW3UubW9kZWwuZGltZW5zaW9uSW5kXSxwPWYudHJhY2UsZD1jLnRvcCtjLmhlaWdodC8yO2YuZGltZW5zaW9ucy5sZW5ndGg+MSYmaC5kaXNwbGF5SW5kPT09Zi5kaW1lbnNpb25zLmxlbmd0aC0xPyhpPWMubGVmdCxhPSJsZWZ0Iik6KGk9Yy5sZWZ0K2Mud2lkdGgsYT0icmlnaHQiKTt2YXIgbT11Lm1vZGVsLmNvdW50LGc9dS5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9bS91LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuY291bnQseT17Y291bnRMYWJlbDptLGNhdGVnb3J5TGFiZWw6Zyxwcm9iYWJpbGl0eUxhYmVsOnYudG9GaXhlZCgzKX0seD1bXTstMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJjb3VudCIpJiZ4LnB1c2goWyJDb3VudDoiLHkuY291bnRMYWJlbF0uam9pbigiICIpKSwtMSE9PXUucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJwcm9iYWJpbGl0eSIpJiZ4LnB1c2goWyJQKCIreS5jYXRlZ29yeUxhYmVsKyIpOiIseS5wcm9iYWJpbGl0eUxhYmVsXS5qb2luKCIgIikpO3ZhciBiPXguam9pbigiPGJyPiIpO3JldHVybnt0cmFjZTpwLHg6byooaS1lLmxlZnQpLHk6cyooZC1lLnRvcCksdGV4dDpiLGNvbG9yOiJsaWdodGdyYXkiLGJvcmRlckNvbG9yOiJibGFjayIsZm9udEZhbWlseTonTW9uYWNvLCAiQ291cmllciBOZXciLCBtb25vc3BhY2UnLGZvbnRTaXplOjEyLGZvbnRDb2xvcjoiYmxhY2siLGlkZWFsQWxpZ246YSxob3ZlcnRlbXBsYXRlOnAuaG92ZXJ0ZW1wbGF0ZSxob3ZlcnRlbXBsYXRlTGFiZWxzOnksZXZlbnREYXRhOlt7ZGF0YTpwLl9pbnB1dCxmdWxsRGF0YTpwLGNvdW50Om0sY2F0ZWdvcnk6Zyxwcm9iYWJpbGl0eTp2fV19fWZ1bmN0aW9uIEwodCl7aWYoIXQucGFyY2F0c1ZpZXdNb2RlbC5kcmFnRGltZW5zaW9uJiYtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikpe2lmKG4ubW91c2UodGhpcylbMV08LTEpcmV0dXJuO3ZhciBlLHI9dC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2LGk9ci5fZnVsbExheW91dCxhPWkuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXQucGFyY2F0c1ZpZXdNb2RlbC5ob3Zlcm9uO2lmKCJjb2xvciI9PT1sPyghZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuZGF0dW0oKSxyPUEoZSk7dyhyKSxyLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcj09PWUuY29sb3J9KSkuZWFjaCgoZnVuY3Rpb24oKXtzLnJhaXNlVG9Ub3AodGhpcyksbi5zZWxlY3QodGhpcykuYXR0cigic3Ryb2tlIiwiYmxhY2siKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSl9KSl9KHRoaXMpLFModGhpcywicGxvdGx5X2hvdmVyIixuLmV2ZW50KSk6KCFmdW5jdGlvbih0KXtuLnNlbGVjdCh0LnBhcmVudE5vZGUpLnNlbGVjdEFsbCgicmVjdC5iYW5kcmVjdCIpLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCk7dyhlKSxlLmVhY2goKGZ1bmN0aW9uKCl7cy5yYWlzZVRvVG9wKHRoaXMpfSkpfSkpLG4uc2VsZWN0KHQucGFyZW50Tm9kZSkuc2VsZWN0KCJyZWN0LmNhdHJlY3QiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsMi41KX0odGhpcyksTSh0aGlzLCJwbG90bHlfaG92ZXIiLG4uZXZlbnQpKSwtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJub25lIikpImNhdGVnb3J5Ij09PWw/ZT1FKHIsYSx0aGlzKToiY29sb3IiPT09bD9lPWZ1bmN0aW9uKHQsZSxyKXt0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgaSxhLG89dC5fZnVsbExheW91dC5faW52U2NhbGVYLHM9dC5fZnVsbExheW91dC5faW52U2NhbGVZLGw9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPW4uc2VsZWN0KHIpLmRhdHVtKCksZj1jLmNhdGVnb3J5Vmlld01vZGVsLGg9Zi5wYXJjYXRzVmlld01vZGVsLHA9aC5tb2RlbC5kaW1lbnNpb25zW2YubW9kZWwuZGltZW5zaW9uSW5kXSxkPWgudHJhY2UsbT1sLnkrbC5oZWlnaHQvMjtoLmRpbWVuc2lvbnMubGVuZ3RoPjEmJnAuZGlzcGxheUluZD09PWguZGltZW5zaW9ucy5sZW5ndGgtMT8oaT1sLmxlZnQsYT0ibGVmdCIpOihpPWwubGVmdCtsLndpZHRoLGE9InJpZ2h0Iik7dmFyIGc9Zi5tb2RlbC5jYXRlZ29yeUxhYmVsLHY9Yy5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmNvdW50LHk9MDtjLmNhdGVnb3J5Vmlld01vZGVsLmJhbmRzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY29sb3I9PT1jLmNvbG9yJiYoeSs9dC5jb3VudCl9KSk7dmFyIHg9Zi5tb2RlbC5jb3VudCxiPTA7aC5wYXRoU2VsZWN0aW9uLmVhY2goKGZ1bmN0aW9uKHQpe3QubW9kZWwuY29sb3I9PT1jLmNvbG9yJiYoYis9dC5tb2RlbC5jb3VudCl9KSk7dmFyIF89eS92LHc9eS9iLFQ9eS94LGs9e2NvdW50TGFiZWw6dixjYXRlZ29yeUxhYmVsOmcscHJvYmFiaWxpdHlMYWJlbDpfLnRvRml4ZWQoMyl9LEE9W107LTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigiY291bnQiKSYmQS5wdXNoKFsiQ291bnQ6IixrLmNvdW50TGFiZWxdLmpvaW4oIiAiKSksLTEhPT1mLnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJpbmZvSXRlbXMuaW5kZXhPZigicHJvYmFiaWxpdHkiKSYmKEEucHVzaCgiUChjb2xvciBcdTIyMjkgIitnKyIpOiAiK2sucHJvYmFiaWxpdHlMYWJlbCksQS5wdXNoKCJQKCIrZysiIHwgY29sb3IpOiAiK3cudG9GaXhlZCgzKSksQS5wdXNoKCJQKGNvbG9yIHwgIitnKyIpOiAiK1QudG9GaXhlZCgzKSkpO3ZhciBNPUEuam9pbigiPGJyPiIpLFM9dS5tb3N0UmVhZGFibGUoYy5jb2xvcixbImJsYWNrIiwid2hpdGUiXSk7cmV0dXJue3RyYWNlOmQseDpvKihpLWUubGVmdCkseTpzKihtLWUudG9wKSx0ZXh0Ok0sY29sb3I6Yy5jb2xvcixib3JkZXJDb2xvcjoiYmxhY2siLGZvbnRGYW1pbHk6J01vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJyxmb250Q29sb3I6Uyxmb250U2l6ZToxMCxpZGVhbEFsaWduOmEsaG92ZXJ0ZW1wbGF0ZTpkLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczprLGV2ZW50RGF0YTpbe2RhdGE6ZC5faW5wdXQsZnVsbERhdGE6ZCxjYXRlZ29yeTpnLGNvdW50OnYscHJvYmFiaWxpdHk6XyxjYXRlZ29yeWNvdW50OngsY29sb3Jjb3VudDpiLGJhbmRjb2xvcmNvdW50Onl9XX19KHIsYSx0aGlzKToiZGltZW5zaW9uIj09PWwmJihlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT1bXTtyZXR1cm4gbi5zZWxlY3Qoci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLnNlbGVjdEFsbCgiZy5jYXRlZ29yeSIpLnNlbGVjdCgicmVjdC5jYXRyZWN0IikuZWFjaCgoZnVuY3Rpb24oKXtpLnB1c2goRSh0LGUsdGhpcykpfSkpLGl9KHIsYSx0aGlzKSksZSYmby5sb25lSG92ZXIoZSx7Y29udGFpbmVyOmkuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOmkuX3BhcGVyLm5vZGUoKSxnZDpyfSl9fWZ1bmN0aW9uIEModCl7dmFyIGU9dC5wYXJjYXRzVmlld01vZGVsO2lmKCFlLmRyYWdEaW1lbnNpb24mJihfKGUucGF0aFNlbGVjdGlvbiksVChlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKSksayhlLmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKSksby5sb25lVW5ob3ZlcihlLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSksZS5wYXRoU2VsZWN0aW9uLnNvcnQobSksLTE9PT1lLmhvdmVyaW5mb0l0ZW1zLmluZGV4T2YoInNraXAiKSkpeyJjb2xvciI9PT10LnBhcmNhdHNWaWV3TW9kZWwuaG92ZXJvbj9TKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KTpNKHRoaXMsInBsb3RseV91bmhvdmVyIixuLmV2ZW50KX19ZnVuY3Rpb24gUCh0KXsiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiYodC5kcmFnRGltZW5zaW9uRGlzcGxheUluZD10Lm1vZGVsLmRpc3BsYXlJbmQsdC5pbml0aWFsRHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmRzPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSx0LmRyYWdIYXNNb3ZlZD0hMSx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbCxuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5zZWxlY3QoInJlY3QuY2F0cmVjdCIpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4ubW91c2UodGhpcylbMF0saT1uLm1vdXNlKHRoaXMpWzFdOy0yPD1yJiZyPD1lLndpZHRoKzImJi0yPD1pJiZpPD1lLmhlaWdodCsyJiYodC5kcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kPWUubW9kZWwuZGlzcGxheUluZCx0LmluaXRpYWxEcmFnQ2F0ZWdvcnlEaXNwbGF5SW5kcz10Lm1vZGVsLmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLGUubW9kZWwuZHJhZ1k9ZS55LHMucmFpc2VUb1RvcCh0aGlzLnBhcmVudE5vZGUpLG4uc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuc2VsZWN0QWxsKCJyZWN0LmJhbmRyZWN0IikuZWFjaCgoZnVuY3Rpb24oZSl7ZS55PGkmJmk8PWUueStlLmhlaWdodCYmKHQucG90ZW50aWFsQ2xpY2tCYW5kPXRoaXMpfSkpKX0pKSx0LnBhcmNhdHNWaWV3TW9kZWwuZHJhZ0RpbWVuc2lvbj10LG8ubG9uZVVuaG92ZXIodC5wYXJjYXRzVmlld01vZGVsLmdyYXBoRGl2Ll9mdWxsTGF5b3V0Ll9ob3ZlcmxheWVyLm5vZGUoKSkpfWZ1bmN0aW9uIEkodCl7aWYoImZpeGVkIiE9PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCYmKHQuZHJhZ0hhc01vdmVkPSEwLG51bGwhPT10LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kKSl7dmFyIGU9dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCxyPWUtMSxpPWUrMSxhPXQucGFyY2F0c1ZpZXdNb2RlbC5kaW1lbnNpb25zW2VdO2lmKG51bGwhPT10LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQpe3ZhciBvPWEuY2F0ZWdvcmllc1t0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmRdO28ubW9kZWwuZHJhZ1krPW4uZXZlbnQuZHk7dmFyIHM9by5tb2RlbC5kcmFnWSxsPW8ubW9kZWwuZGlzcGxheUluZCxjPWEuY2F0ZWdvcmllcyx1PWNbbC0xXSxmPWNbbCsxXTt2b2lkIDAhPT11JiZzPHUueSt1LmhlaWdodC8yJiYoby5tb2RlbC5kaXNwbGF5SW5kPXUubW9kZWwuZGlzcGxheUluZCx1Lm1vZGVsLmRpc3BsYXlJbmQ9bCksdm9pZCAwIT09ZiYmcytvLmhlaWdodD5mLnkrZi5oZWlnaHQvMiYmKG8ubW9kZWwuZGlzcGxheUluZD1mLm1vZGVsLmRpc3BsYXlJbmQsZi5tb2RlbC5kaXNwbGF5SW5kPWwpLHQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZD1vLm1vZGVsLmRpc3BsYXlJbmR9aWYobnVsbD09PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZHx8ImZyZWVmb3JtIj09PXQucGFyY2F0c1ZpZXdNb2RlbC5hcnJhbmdlbWVudCl7YS5tb2RlbC5kcmFnWD1uLmV2ZW50Lng7dmFyIGg9dC5wYXJjYXRzVmlld01vZGVsLmRpbWVuc2lvbnNbcl0scD10LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1tpXTt2b2lkIDAhPT1oJiZhLm1vZGVsLmRyYWdYPGgueCtoLndpZHRoJiYoYS5tb2RlbC5kaXNwbGF5SW5kPWgubW9kZWwuZGlzcGxheUluZCxoLm1vZGVsLmRpc3BsYXlJbmQ9ZSksdm9pZCAwIT09cCYmYS5tb2RlbC5kcmFnWCthLndpZHRoPnAueCYmKGEubW9kZWwuZGlzcGxheUluZD1wLm1vZGVsLmRpc3BsYXlJbmQscC5tb2RlbC5kaXNwbGF5SW5kPXQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQpLHQuZHJhZ0RpbWVuc2lvbkRpc3BsYXlJbmQ9YS5tb2RlbC5kaXNwbGF5SW5kfWoodC5wYXJjYXRzVmlld01vZGVsKSxOKHQucGFyY2F0c1ZpZXdNb2RlbCksUih0LnBhcmNhdHNWaWV3TW9kZWwpLEQodC5wYXJjYXRzVmlld01vZGVsKX19ZnVuY3Rpb24gTyh0KXtpZigiZml4ZWQiIT09dC5wYXJjYXRzVmlld01vZGVsLmFycmFuZ2VtZW50JiZudWxsIT09dC5kcmFnRGltZW5zaW9uRGlzcGxheUluZCl7bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJ0ZXh0IikuYXR0cigiZm9udC13ZWlnaHQiLCJub3JtYWwiKTt2YXIgZT17fSxyPXoodC5wYXJjYXRzVmlld01vZGVsKSxpPXQucGFyY2F0c1ZpZXdNb2RlbC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKSxvPXQuaW5pdGlhbERyYWdEaW1lbnNpb25EaXNwbGF5SW5kcy5zb21lKChmdW5jdGlvbih0LGUpe3JldHVybiB0IT09aVtlXX0pKTtvJiZpLmZvckVhY2goKGZ1bmN0aW9uKHIsbil7dmFyIGk9dC5wYXJjYXRzVmlld01vZGVsLm1vZGVsLmRpbWVuc2lvbnNbbl0uY29udGFpbmVySW5kO2VbImRpbWVuc2lvbnNbIitpKyJdLmRpc3BsYXlpbmRleCJdPXJ9KSk7dmFyIHM9ITE7aWYobnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl7dmFyIGw9dC5tb2RlbC5jYXRlZ29yaWVzLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZGlzcGxheUluZH0pKTtpZihzPXQuaW5pdGlhbERyYWdDYXRlZ29yeURpc3BsYXlJbmRzLnNvbWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQhPT1sW2VdfSkpKXt2YXIgYz10Lm1vZGVsLmNhdGVnb3JpZXMuc2xpY2UoKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLHU9Yy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3J5VmFsdWV9KSksZj1jLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcnlMYWJlbH0pKTtlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0uY2F0ZWdvcnlhcnJheSJdPVt1XSxlWyJkaW1lbnNpb25zWyIrdC5tb2RlbC5jb250YWluZXJJbmQrIl0udGlja3RleHQiXT1bZl0sZVsiZGltZW5zaW9uc1siK3QubW9kZWwuY29udGFpbmVySW5kKyJdLmNhdGVnb3J5b3JkZXIiXT0iYXJyYXkifX1pZigtMT09PXQucGFyY2F0c1ZpZXdNb2RlbC5ob3ZlcmluZm9JdGVtcy5pbmRleE9mKCJza2lwIikmJiF0LmRyYWdIYXNNb3ZlZCYmdC5wb3RlbnRpYWxDbGlja0JhbmQmJigiY29sb3IiPT09dC5wYXJjYXRzVmlld01vZGVsLmhvdmVyb24/Uyh0LnBvdGVudGlhbENsaWNrQmFuZCwicGxvdGx5X2NsaWNrIixuLmV2ZW50LnNvdXJjZUV2ZW50KTpNKHQucG90ZW50aWFsQ2xpY2tCYW5kLCJwbG90bHlfY2xpY2siLG4uZXZlbnQuc291cmNlRXZlbnQpKSx0Lm1vZGVsLmRyYWdYPW51bGwsbnVsbCE9PXQuZHJhZ0NhdGVnb3J5RGlzcGxheUluZCl0LnBhcmNhdHNWaWV3TW9kZWwuZGltZW5zaW9uc1t0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kXS5jYXRlZ29yaWVzW3QuZHJhZ0NhdGVnb3J5RGlzcGxheUluZF0ubW9kZWwuZHJhZ1k9bnVsbCx0LmRyYWdDYXRlZ29yeURpc3BsYXlJbmQ9bnVsbDt0LmRyYWdEaW1lbnNpb25EaXNwbGF5SW5kPW51bGwsdC5wYXJjYXRzVmlld01vZGVsLmRyYWdEaW1lbnNpb249bnVsbCx0LmRyYWdIYXNNb3ZlZD1udWxsLHQucG90ZW50aWFsQ2xpY2tCYW5kPW51bGwsaih0LnBhcmNhdHNWaWV3TW9kZWwpLE4odC5wYXJjYXRzVmlld01vZGVsKSxuLnRyYW5zaXRpb24oKS5kdXJhdGlvbigzMDApLmVhc2UoImN1YmljLWluLW91dCIpLmVhY2goKGZ1bmN0aW9uKCl7Uih0LnBhcmNhdHNWaWV3TW9kZWwsITApLEQodC5wYXJjYXRzVmlld01vZGVsLCEwKX0pKS5lYWNoKCJlbmQiLChmdW5jdGlvbigpeyhvfHxzKSYmYS5yZXN0eWxlKHQucGFyY2F0c1ZpZXdNb2RlbC5ncmFwaERpdixlLFtyXSl9KSl9fWZ1bmN0aW9uIHoodCl7Zm9yKHZhciBlLHI9dC5ncmFwaERpdi5fZnVsbERhdGEsbj0wO248ci5sZW5ndGg7bisrKWlmKHQua2V5PT09cltuXS51aWQpe2U9bjticmVha31yZXR1cm4gZX1mdW5jdGlvbiBEKHQsZSl7dmFyIHI7dm9pZCAwPT09ZSYmKGU9ITEpLHQucGF0aFNlbGVjdGlvbi5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5wYXRoc30pLHApLChyPXQucGF0aFNlbGVjdGlvbixlP3IudHJhbnNpdGlvbigpOnIpLmF0dHIoImQiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdEfSkpfWZ1bmN0aW9uIFIodCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlP3QudHJhbnNpdGlvbigpOnR9dm9pZCAwPT09ZSYmKGU9ITEpLHQuZGltZW5zaW9uU2VsZWN0aW9uLmRhdGEoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpbWVuc2lvbnN9KSxwKTt2YXIgaT10LmRpbWVuc2lvblNlbGVjdGlvbi5zZWxlY3RBbGwoImcuY2F0ZWdvcnkiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jYXRlZ29yaWVzfSkscCk7cih0LmRpbWVuc2lvblNlbGVjdGlvbikuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwodC54LDApfSkpLHIoaSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIGwoMCx0LnkpfSkpLGkuc2VsZWN0KCIuZGltbGFiZWwiKS50ZXh0KChmdW5jdGlvbih0LGUpe3JldHVybiAwPT09ZT90LnBhcmNhdHNWaWV3TW9kZWwubW9kZWwuZGltZW5zaW9uc1t0Lm1vZGVsLmRpbWVuc2lvbkluZF0uZGltZW5zaW9uTGFiZWw6bnVsbH0pKSxpLnNlbGVjdCgiLmNhdGxhYmVsIikuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT8ic3RhcnQiOiJlbmQifSkpLmF0dHIoIngiLChmdW5jdGlvbih0KXtyZXR1cm4gZCh0KT90LndpZHRoKzU6LTV9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscjtkKHQpPyhlPXQud2lkdGgrNSxyPSJzdGFydCIpOihlPS01LHI9ImVuZCIpLG4uc2VsZWN0KHRoaXMpLnNlbGVjdEFsbCgidHNwYW4iKS5hdHRyKCJ4IixlKS5hdHRyKCJ0ZXh0LWFuY2hvciIscil9KSk7dmFyIGE9aS5zZWxlY3RBbGwoInJlY3QuYmFuZHJlY3QiKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5iYW5kc30pLHApLG89YS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiYmFuZHJlY3QiKS5hdHRyKCJjdXJzb3IiLCJtb3ZlIikuYXR0cigic3Ryb2tlLW9wYWNpdHkiLDApLmF0dHIoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2xvcn0pKS5hdHRyKCJmaWxsLW9wYWNpdHkiLDApO2EuYXR0cigiZmlsbCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbG9yfSkpLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpLGsobyksYS5lYWNoKChmdW5jdGlvbigpe3MucmFpc2VUb1RvcCh0aGlzKX0pKSxhLmV4aXQoKS5yZW1vdmUoKX1mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbixpPXJbMF0sYT1lLm1hcmdpbnx8e2w6ODAscjo4MCx0OjEwMCxiOjgwfSxvPWkudHJhY2Uscz1vLmRvbWFpbixsPWUud2lkdGgsYz1lLmhlaWdodCx1PU1hdGguZmxvb3IobCoocy54WzFdLXMueFswXSkpLGY9TWF0aC5mbG9vcihjKihzLnlbMV0tcy55WzBdKSksaD1zLnhbMF0qbCthLmwscD1lLmhlaWdodC1zLnlbMV0qZS5oZWlnaHQrYS50LGQ9by5saW5lLnNoYXBlO249ImFsbCI9PT1vLmhvdmVyaW5mbz9bImNvdW50IiwicHJvYmFiaWxpdHkiXTooby5ob3ZlcmluZm98fCIiKS5zcGxpdCgiKyIpO3ZhciBtPXt0cmFjZTpvLGtleTpvLnVpZCxtb2RlbDppLHg6aCx5OnAsd2lkdGg6dSxoZWlnaHQ6Zixob3Zlcm9uOm8uaG92ZXJvbixob3ZlcmluZm9JdGVtczpuLGFycmFuZ2VtZW50Om8uYXJyYW5nZW1lbnQsYnVuZGxlY29sb3JzOm8uYnVuZGxlY29sb3JzLHNvcnRwYXRoczpvLnNvcnRwYXRocyxsYWJlbGZvbnQ6by5sYWJlbGZvbnQsY2F0ZWdvcnlsYWJlbGZvbnQ6by50aWNrZm9udCxwYXRoU2hhcGU6ZCxkcmFnRGltZW5zaW9uOm51bGwsbWFyZ2luOmEscGF0aHM6W10sZGltZW5zaW9uczpbXSxncmFwaERpdjp0LHRyYWNlU2VsZWN0aW9uOm51bGwscGF0aFNlbGVjdGlvbjpudWxsLGRpbWVuc2lvblNlbGVjdGlvbjpudWxsfTtyZXR1cm4gaS5kaW1lbnNpb25zJiYoaihtKSxOKG0pKSxtfWZ1bmN0aW9uIEIodCxlLHIsbixhKXt2YXIgbyxzLGw9W10sYz1bXTtmb3Iocz0wO3M8ci5sZW5ndGgtMTtzKyspbz1pKHJbc10rdFtzXSx0W3MrMV0pLGwucHVzaChvKGEpKSxjLnB1c2gobygxLWEpKTt2YXIgdT0iTSAiK3RbMF0rIiwiK2VbMF07Zm9yKHUrPSJsIityWzBdKyIsMCAiLHM9MTtzPHIubGVuZ3RoO3MrKyl1Kz0iQyIrbFtzLTFdKyIsIitlW3MtMV0rIiAiK2Nbcy0xXSsiLCIrZVtzXSsiICIrdFtzXSsiLCIrZVtzXSx1Kz0ibCIrcltzXSsiLDAgIjtmb3IodSs9ImwwLCIrbisiICIsdSs9ImwgLSIrcltyLmxlbmd0aC0xXSsiLDAgIixzPXIubGVuZ3RoLTI7cz49MDtzLS0pdSs9IkMiK2Nbc10rIiwiKyhlW3MrMV0rbikrIiAiK2xbc10rIiwiKyhlW3NdK24pKyIgIisodFtzXStyW3NdKSsiLCIrKGVbc10rbiksdSs9ImwtIityW3NdKyIsMCAiO3JldHVybiB1Kz0iWiJ9ZnVuY3Rpb24gTih0KXt2YXIgZT10LmRpbWVuc2lvbnMscj10Lm1vZGVsLG49ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhdGVnb3JpZXMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC55fSkpfSkpLGk9dC5tb2RlbC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRpc3BsYXlJbmR9KSl9KSksYT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaXNwbGF5SW5kfSkpLG89dC5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQubW9kZWwuZGltZW5zaW9uSW5kfSkpLHM9ZS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lnh9KSksbD1lLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSksYz1bXTtmb3IodmFyIHUgaW4gci5wYXRocylyLnBhdGhzLmhhc093blByb3BlcnR5KHUpJiZjLnB1c2goci5wYXRoc1t1XSk7ZnVuY3Rpb24gZih0KXt2YXIgZT10LmNhdGVnb3J5SW5kcy5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGlbZV1bdF19KSk7cmV0dXJuIG8ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0pKX1jLnNvcnQoKGZ1bmN0aW9uKGUscil7dmFyIG49ZihlKSxpPWYocik7cmV0dXJuImJhY2t3YXJkIj09PXQuc29ydHBhdGhzJiYobi5yZXZlcnNlKCksaS5yZXZlcnNlKCkpLG4ucHVzaChlLnZhbHVlSW5kc1swXSksaS5wdXNoKHIudmFsdWVJbmRzWzBdKSx0LmJ1bmRsZWNvbG9ycyYmKG4udW5zaGlmdChlLnJhd0NvbG9yKSxpLnVuc2hpZnQoci5yYXdDb2xvcikpLG48aT8tMTpuPmk/MTowfSkpO2Zvcih2YXIgaD1uZXcgQXJyYXkoYy5sZW5ndGgpLHA9ZVswXS5tb2RlbC5jb3VudCxkPWVbMF0uY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmhlaWdodH0pKS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQrZX0pKSxtPTA7bTxjLmxlbmd0aDttKyspe3ZhciBnLHY9Y1ttXTtnPXA+MD9kKih2LmNvdW50L3ApOjA7Zm9yKHZhciB5LHg9bmV3IEFycmF5KG4ubGVuZ3RoKSxiPTA7Yjx2LmNhdGVnb3J5SW5kcy5sZW5ndGg7YisrKXt2YXIgXz12LmNhdGVnb3J5SW5kc1tiXSx3PWlbYl1bX10sVD1hW2JdO3hbVF09bltUXVt3XSxuW1RdW3ddKz1nO3ZhciBrPXQuZGltZW5zaW9uc1tUXS5jYXRlZ29yaWVzW3ddLEE9ay5iYW5kcy5sZW5ndGgsTT1rLmJhbmRzW0EtMV07aWYodm9pZCAwPT09TXx8di5yYXdDb2xvciE9PU0ucmF3Q29sb3Ipe3ZhciBTPXZvaWQgMD09PU0/MDpNLnkrTS5oZWlnaHQ7ay5iYW5kcy5wdXNoKHtrZXk6Uyxjb2xvcjp2LmNvbG9yLHJhd0NvbG9yOnYucmF3Q29sb3IsaGVpZ2h0Omcsd2lkdGg6ay53aWR0aCxjb3VudDp2LmNvdW50LHk6UyxjYXRlZ29yeVZpZXdNb2RlbDprLHBhcmNhdHNWaWV3TW9kZWw6dH0pfWVsc2V7dmFyIEU9ay5iYW5kc1tBLTFdO0UuaGVpZ2h0Kz1nLEUuY291bnQrPXYuY291bnR9fXk9ImhzcGxpbmUiPT09dC5wYXRoU2hhcGU/QihzLHgsbCxnLC41KTpCKHMseCxsLGcsMCksaFttXT17a2V5OnYudmFsdWVJbmRzWzBdLG1vZGVsOnYsaGVpZ2h0OmcsbGVmdFhzOnMsdG9wWXM6eCxkaW1XaWR0aHM6bCxzdmdEOnkscGFyY2F0c1ZpZXdNb2RlbDp0fX10LnBhdGhzPWh9ZnVuY3Rpb24gaih0KXt2YXIgZT10Lm1vZGVsLmRpbWVuc2lvbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm57ZGlzcGxheUluZDp0LmRpc3BsYXlJbmQsZGltZW5zaW9uSW5kOnQuZGltZW5zaW9uSW5kfX0pKTtlLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuZGlzcGxheUluZC1lLmRpc3BsYXlJbmR9KSk7dmFyIHI9W107Zm9yKHZhciBuIGluIGUpe3ZhciBpPWVbbl0uZGltZW5zaW9uSW5kLGE9dC5tb2RlbC5kaW1lbnNpb25zW2ldO3IucHVzaChVKHQsYSkpfXQuZGltZW5zaW9ucz1yfWZ1bmN0aW9uIFUodCxlKXt2YXIgcixuPXQubW9kZWwuZGltZW5zaW9ucy5sZW5ndGgsaT1lLmRpc3BsYXlJbmQ7cj00MCsobj4xPyh0LndpZHRoLTgwLTE2KS8obi0xKTowKSppO3ZhciBhLG8scyxsLGMsdT1bXSxmPXQubW9kZWwubWF4Q2F0cyxoPWUuY2F0ZWdvcmllcy5sZW5ndGgscD1lLmNvdW50LGQ9dC5oZWlnaHQtOCooZi0xKSxtPTgqKGYtaCkvMixnPWUuY2F0ZWdvcmllcy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybntkaXNwbGF5SW5kOnQuZGlzcGxheUluZCxjYXRlZ29yeUluZDp0LmNhdGVnb3J5SW5kfX0pKTtmb3IoZy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0LmRpc3BsYXlJbmQtZS5kaXNwbGF5SW5kfSkpLGM9MDtjPGg7YysrKWw9Z1tjXS5jYXRlZ29yeUluZCxvPWUuY2F0ZWdvcmllc1tsXSxhPXA+MD9vLmNvdW50L3AqZDowLHM9e2tleTpvLnZhbHVlSW5kc1swXSxtb2RlbDpvLHdpZHRoOjE2LGhlaWdodDphLHk6bnVsbCE9PW8uZHJhZ1k/by5kcmFnWTptLGJhbmRzOltdLHBhcmNhdHNWaWV3TW9kZWw6dH0sbT1tK2ErOCx1LnB1c2gocyk7cmV0dXJue2tleTplLmRpbWVuc2lvbkluZCx4Om51bGwhPT1lLmRyYWdYP2UuZHJhZ1g6cix5OjAsd2lkdGg6MTYsbW9kZWw6ZSxjYXRlZ29yaWVzOnUscGFyY2F0c1ZpZXdNb2RlbDp0LGRyYWdDYXRlZ29yeURpc3BsYXlJbmQ6bnVsbCxkcmFnRGltZW5zaW9uRGlzcGxheUluZDpudWxsLGluaXRpYWxEcmFnRGltZW5zaW9uRGlzcGxheUluZHM6bnVsbCxpbml0aWFsRHJhZ0NhdGVnb3J5RGlzcGxheUluZHM6bnVsbCxkcmFnSGFzTW92ZWQ6bnVsbCxwb3RlbnRpYWxDbGlja0JhbmQ6bnVsbH19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2gocix0LG4sZSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcGxvdF9hcGkvcGxvdF9hcGkiOjgxMywiQHBsb3RseS9kMyI6NTgsImQzLWludGVycG9sYXRlIjoxNjQsdGlueWNvbG9yMjo1NzJ9XSwxMTUyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vcGFyY2F0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt2YXIgYT10Ll9mdWxsTGF5b3V0LG89YS5fcGFwZXIscz1hLl9zaXplO24odCxvLGUse3dpZHRoOnMudyxoZWlnaHQ6cy5oLG1hcmdpbjp7dDpzLnQscjpzLnIsYjpzLmIsbDpzLmx9fSxyLGkpfX0seyIuL3BhcmNhdHMiOjExNTF9XSwxMTUzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5O2UuZXhwb3J0cz17ZG9tYWluOm8oe25hbWU6InBhcmNvb3JkcyIsdHJhY2U6ITAsZWRpdFR5cGU6InBsb3QifSksbGFiZWxhbmdsZTp7dmFsVHlwZToiYW5nbGUiLGRmbHQ6MCxlZGl0VHlwZToicGxvdCJ9LGxhYmVsc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsidG9wIiwiYm90dG9tIl0sZGZsdDoidG9wIixlZGl0VHlwZToicGxvdCJ9LGxhYmVsZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9udDphKHtlZGl0VHlwZToicGxvdCJ9KSxyYW5nZWZvbnQ6YSh7ZWRpdFR5cGU6InBsb3QifSksZGltZW5zaW9uczpsKCJkaW1lbnNpb24iLHtsYWJlbDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToicGxvdCJ9LHRpY2t2YWxzOnMoe30saS50aWNrdmFscyx7ZWRpdFR5cGU6InBsb3QifSksdGlja3RleHQ6cyh7fSxpLnRpY2t0ZXh0LHtlZGl0VHlwZToicGxvdCJ9KSx0aWNrZm9ybWF0OnMoe30saS50aWNrZm9ybWF0LHtlZGl0VHlwZToicGxvdCJ9KSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0scmFuZ2U6e3ZhbFR5cGU6ImluZm9fYXJyYXkiLGl0ZW1zOlt7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToicGxvdCJ9LHt2YWxUeXBlOiJudW1iZXIiLGVkaXRUeXBlOiJwbG90In1dLGVkaXRUeXBlOiJwbG90In0sY29uc3RyYWludHJhbmdlOnt2YWxUeXBlOiJpbmZvX2FycmF5IixmcmVlTGVuZ3RoOiEwLGRpbWVuc2lvbnM6IjEtMiIsaXRlbXM6W3t2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJwbG90In0se3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6InBsb3QifV0sZWRpdFR5cGU6InBsb3QifSxtdWx0aXNlbGVjdDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9KSxsaW5lOnMoe2VkaXRUeXBlOiJjYWxjIn0sbigibGluZSIse2NvbG9yc2NhbGVEZmx0OiJWaXJpZGlzIixhdXRvQ29sb3JEZmx0OiExLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2xheW91dF9hdHRyaWJ1dGVzIjo4NDIsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiOjg1Nn1dLDExNTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9jb25zdGFudHMiKSxpPXQoIkBwbG90bHkvZDMiKSxhPXQoIi4uLy4uL2xpYi9ndXAiKS5rZXlGdW4sbz10KCIuLi8uLi9saWIvZ3VwIikucmVwZWF0LHM9dCgiLi4vLi4vbGliIikuc29ydGVyQXNjLGw9dCgiLi4vLi4vbGliIikuc3RyVHJhbnNsYXRlLGM9bi5iYXIuc25hcFJhdGlvO2Z1bmN0aW9uIHUodCxlKXtyZXR1cm4gdCooMS1jKStlKmN9dmFyIGY9bi5iYXIuc25hcENsb3NlO2Z1bmN0aW9uIGgodCxlKXtyZXR1cm4gdCooMS1mKStlKmZ9ZnVuY3Rpb24gcCh0LGUscixuKXtpZihmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWlmKHQ+PWVbcl1bMF0mJnQ8PWVbcl1bMV0pcmV0dXJuITA7cmV0dXJuITF9KHIsbikpcmV0dXJuIHI7dmFyIGk9dD8tMToxLGE9MCxvPWUubGVuZ3RoLTE7aWYoaTwwKXt2YXIgcz1hO2E9byxvPXN9Zm9yKHZhciBsPWVbYV0sYz1sLGY9YTtpKmY8aSpvO2YrPWkpe3ZhciBwPWYraSxkPWVbcF07aWYoaSpyPGkqaChsLGQpKXJldHVybiB1KGwsYyk7aWYoaSpyPGkqZHx8cD09PW8pcmV0dXJuIHUoZCxsKTtjPWwsbD1kfX1mdW5jdGlvbiBkKHQpe3QuYXR0cigieCIsLW4uYmFyLmNhcHR1cmVXaWR0aC8yKS5hdHRyKCJ3aWR0aCIsbi5iYXIuY2FwdHVyZVdpZHRoKX1mdW5jdGlvbiBtKHQpe3QuYXR0cigidmlzaWJpbGl0eSIsInZpc2libGUiKS5zdHlsZSgidmlzaWJpbGl0eSIsInZpc2libGUiKS5hdHRyKCJmaWxsIiwieWVsbG93IikuYXR0cigib3BhY2l0eSIsMCl9ZnVuY3Rpb24gZyh0KXtpZighdC5icnVzaC5maWx0ZXJTcGVjaWZpZWQpcmV0dXJuIjAsIit0LmhlaWdodDtmb3IodmFyIGUscixuLGk9dih0LmJydXNoLmZpbHRlci5nZXRDb25zb2xpZGF0ZWQoKSx0LmhlaWdodCksYT1bMF0sbz1pLmxlbmd0aD9pWzBdWzBdOm51bGwscz0wO3M8aS5sZW5ndGg7cysrKXI9KGU9aVtzXSlbMV0tZVswXSxhLnB1c2gobyksYS5wdXNoKHIpLChuPXMrMSk8aS5sZW5ndGgmJihvPWlbbl1bMF0tZVsxXSk7cmV0dXJuIGEucHVzaCh0LmhlaWdodCksYX1mdW5jdGlvbiB2KHQsZSl7cmV0dXJuIHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heCgwLHQqZSl9KSkuc29ydChzKX0pKX1mdW5jdGlvbiB5KCl7aS5zZWxlY3QoZG9jdW1lbnQuYm9keSkuc3R5bGUoImN1cnNvciIsbnVsbCl9ZnVuY3Rpb24geCh0KXt0LmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLGcpfWZ1bmN0aW9uIGIodCxlKXt2YXIgcj1pLnNlbGVjdCh0KS5zZWxlY3RBbGwoIi5oaWdobGlnaHQsIC5oaWdobGlnaHQtc2hhZG93Iik7eChlP3IudHJhbnNpdGlvbigpLmR1cmF0aW9uKG4uYmFyLnNuYXBEdXJhdGlvbikuZWFjaCgiZW5kIixlKTpyKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHIsaT10LmJydXNoLGE9TmFOLG89e307aWYoaS5maWx0ZXJTcGVjaWZpZWQpe3ZhciBzPXQuaGVpZ2h0LGw9aS5maWx0ZXIuZ2V0Q29uc29saWRhdGVkKCksYz12KGwscyksdT1OYU4sZj1OYU4saD1OYU47Zm9yKHI9MDtyPD1jLmxlbmd0aDtyKyspe3ZhciBwPWNbcl07aWYocCYmcFswXTw9ZSYmZTw9cFsxXSl7dT1yO2JyZWFrfWlmKGY9cj9yLTE6TmFOLHAmJnBbMF0+ZSl7aD1yO2JyZWFrfX1pZihhPXUsaXNOYU4oYSkmJihhPWlzTmFOKGYpfHxpc05hTihoKT9pc05hTihmKT9oOmY6ZS1jW2ZdWzFdPGNbaF1bMF0tZT9mOmgpLCFpc05hTihhKSl7dmFyIGQ9Y1thXSxtPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bi5iYXIuaGFuZGxlSGVpZ2h0O2lmKCEoZT50WzFdK3J8fGU8dFswXS1yKSlyZXR1cm4gZT49LjkqdFsxXSsuMSp0WzBdPyJuIjplPD0uOSp0WzBdKy4xKnRbMV0/InMiOiJucyJ9KGQsZSk7bSYmKG8uaW50ZXJ2YWw9bFthXSxvLmludGVydmFsUGl4PWQsby5yZWdpb249bSl9fWlmKHQub3JkaW5hbCYmIW8ucmVnaW9uKXt2YXIgZz10LnVuaXRUaWNrdmFscyx5PXQudW5pdFRvUGFkZGVkUHguaW52ZXJ0KGUpO2ZvcihyPTA7cjxnLmxlbmd0aDtyKyspe3ZhciB4PVsuMjUqZ1tNYXRoLm1heChyLTEsMCldKy43NSpnW3JdLC4yNSpnW01hdGgubWluKHIrMSxnLmxlbmd0aC0xKV0rLjc1Kmdbcl1dO2lmKHk+PXhbMF0mJnk8PXhbMV0pe28uY2xpY2thYmxlT3JkaW5hbFJhbmdlPXg7YnJlYWt9fX1yZXR1cm4gb31mdW5jdGlvbiB3KHQsZSl7aS5ldmVudC5zb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt2YXIgcj1lLmhlaWdodC1pLm1vdXNlKHQpWzFdLTIqbi52ZXJ0aWNhbFBhZGRpbmcsYT1lLmJydXNoLnN2Z0JydXNoO2Eud2FzRHJhZ2dlZD0hMCxhLl9kcmFnZ2luZz0hMCxhLmdyYWJiaW5nQmFyP2EubmV3RXh0ZW50PVtyLWEuZ3JhYlBvaW50LHIrYS5iYXJMZW5ndGgtYS5ncmFiUG9pbnRdLm1hcChlLnVuaXRUb1BhZGRlZFB4LmludmVydCk6YS5uZXdFeHRlbnQ9W2Euc3RhcnRFeHRlbnQsZS51bml0VG9QYWRkZWRQeC5pbnZlcnQocildLnNvcnQocyksZS5icnVzaC5maWx0ZXJTcGVjaWZpZWQ9ITAsYS5leHRlbnQ9YS5zdGF5aW5nSW50ZXJ2YWxzLmNvbmNhdChbYS5uZXdFeHRlbnRdKSxhLmJydXNoQ2FsbGJhY2soZSksYih0LnBhcmVudE5vZGUpfWZ1bmN0aW9uIFQodCxlKXt2YXIgcj1fKGUsZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nKSxhPSJjcm9zc2hhaXIiO3IuY2xpY2thYmxlT3JkaW5hbFJhbmdlP2E9InBvaW50ZXIiOnIucmVnaW9uJiYoYT1yLnJlZ2lvbisiLXJlc2l6ZSIpLGkuc2VsZWN0KGRvY3VtZW50LmJvZHkpLnN0eWxlKCJjdXJzb3IiLGEpfWZ1bmN0aW9uIGsodCl7dC5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7aS5ldmVudC5wcmV2ZW50RGVmYXVsdCgpLHQucGFyZW50LmluQnJ1c2hEcmFnfHxUKHRoaXMsdCl9KSkub24oIm1vdXNlbGVhdmUiLChmdW5jdGlvbih0KXt0LnBhcmVudC5pbkJydXNoRHJhZ3x8eSgpfSkpLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub24oImRyYWdzdGFydCIsKGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe2kuZXZlbnQuc291cmNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIHI9ZS5oZWlnaHQtaS5tb3VzZSh0KVsxXS0yKm4udmVydGljYWxQYWRkaW5nLGE9ZS51bml0VG9QYWRkZWRQeC5pbnZlcnQociksbz1lLmJydXNoLHM9XyhlLHIpLGw9cy5pbnRlcnZhbCxjPW8uc3ZnQnJ1c2g7aWYoYy53YXNEcmFnZ2VkPSExLGMuZ3JhYmJpbmdCYXI9Im5zIj09PXMucmVnaW9uLGMuZ3JhYmJpbmdCYXIpe3ZhciB1PWwubWFwKGUudW5pdFRvUGFkZGVkUHgpO2MuZ3JhYlBvaW50PXItdVswXS1uLnZlcnRpY2FsUGFkZGluZyxjLmJhckxlbmd0aD11WzFdLXVbMF19Yy5jbGlja2FibGVPcmRpbmFsUmFuZ2U9cy5jbGlja2FibGVPcmRpbmFsUmFuZ2UsYy5zdGF5aW5nSW50ZXJ2YWxzPWUubXVsdGlzZWxlY3QmJm8uZmlsdGVyU3BlY2lmaWVkP28uZmlsdGVyLmdldENvbnNvbGlkYXRlZCgpOltdLGwmJihjLnN0YXlpbmdJbnRlcnZhbHM9Yy5zdGF5aW5nSW50ZXJ2YWxzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0hPT1sWzBdJiZ0WzFdIT09bFsxXX0pKSksYy5zdGFydEV4dGVudD1zLnJlZ2lvbj9sWyJzIj09PXMucmVnaW9uPzE6MF06YSxlLnBhcmVudC5pbkJydXNoRHJhZz0hMCxjLmJydXNoU3RhcnRDYWxsYmFjaygpfSh0aGlzLHQpfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dyh0aGlzLHQpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZS5icnVzaCxuPXIuZmlsdGVyLGE9ci5zdmdCcnVzaDthLl9kcmFnZ2luZ3x8KFQodCxlKSx3KHQsZSksZS5icnVzaC5zdmdCcnVzaC53YXNEcmFnZ2VkPSExKSxhLl9kcmFnZ2luZz0hMSxpLmV2ZW50LnNvdXJjZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3ZhciBvPWEuZ3JhYmJpbmdCYXI7aWYoYS5ncmFiYmluZ0Jhcj0hMSxhLmdyYWJMb2NhdGlvbj12b2lkIDAsZS5wYXJlbnQuaW5CcnVzaERyYWc9ITEseSgpLCFhLndhc0RyYWdnZWQpcmV0dXJuIGEud2FzRHJhZ2dlZD12b2lkIDAsYS5jbGlja2FibGVPcmRpbmFsUmFuZ2U/ci5maWx0ZXJTcGVjaWZpZWQmJmUubXVsdGlzZWxlY3Q/YS5leHRlbnQucHVzaChhLmNsaWNrYWJsZU9yZGluYWxSYW5nZSk6KGEuZXh0ZW50PVthLmNsaWNrYWJsZU9yZGluYWxSYW5nZV0sci5maWx0ZXJTcGVjaWZpZWQ9ITApOm8/KGEuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscywwPT09YS5leHRlbnQubGVuZ3RoJiZNKHIpKTpNKHIpLGEuYnJ1c2hDYWxsYmFjayhlKSxiKHQucGFyZW50Tm9kZSksdm9pZCBhLmJydXNoRW5kQ2FsbGJhY2soci5maWx0ZXJTcGVjaWZpZWQ/bi5nZXRDb25zb2xpZGF0ZWQoKTpbXSk7dmFyIHM9ZnVuY3Rpb24oKXtuLnNldChuLmdldENvbnNvbGlkYXRlZCgpKX07aWYoZS5vcmRpbmFsKXt2YXIgbD1lLnVuaXRUaWNrdmFscztsW2wubGVuZ3RoLTFdPGxbMF0mJmwucmV2ZXJzZSgpLGEubmV3RXh0ZW50PVtwKDAsbCxhLm5ld0V4dGVudFswXSxhLnN0YXlpbmdJbnRlcnZhbHMpLHAoMSxsLGEubmV3RXh0ZW50WzFdLGEuc3RheWluZ0ludGVydmFscyldO3ZhciBjPWEubmV3RXh0ZW50WzFdPmEubmV3RXh0ZW50WzBdO2EuZXh0ZW50PWEuc3RheWluZ0ludGVydmFscy5jb25jYXQoYz9bYS5uZXdFeHRlbnRdOltdKSxhLmV4dGVudC5sZW5ndGh8fE0ociksYS5icnVzaENhbGxiYWNrKGUpLGM/Yih0LnBhcmVudE5vZGUscyk6KHMoKSxiKHQucGFyZW50Tm9kZSkpfWVsc2UgcygpO2EuYnJ1c2hFbmRDYWxsYmFjayhyLmZpbHRlclNwZWNpZmllZD9uLmdldENvbnNvbGlkYXRlZCgpOltdKX0odGhpcyx0KX0pKSl9ZnVuY3Rpb24gQSh0LGUpe3JldHVybiB0WzBdLWVbMF19ZnVuY3Rpb24gTSh0KXt0LmZpbHRlclNwZWNpZmllZD0hMSx0LnN2Z0JydXNoLmV4dGVudD1bWy0xLzAsMS8wXV19ZnVuY3Rpb24gUyh0KXtmb3IodmFyIGUscj10LnNsaWNlKCksbj1bXSxpPXIuc2hpZnQoKTtpOyl7Zm9yKGU9aS5zbGljZSgpOyhpPXIuc2hpZnQoKSkmJmlbMF08PWVbMV07KWVbMV09TWF0aC5tYXgoZVsxXSxpWzFdKTtuLnB1c2goZSl9cmV0dXJuIDE9PT1uLmxlbmd0aCYmblswXVswXT5uWzBdWzFdJiYobj1bXSksbn1lLmV4cG9ydHM9e21ha2VCcnVzaDpmdW5jdGlvbih0LGUscixuLGksYSl7dmFyIG8sbD1mdW5jdGlvbigpe3ZhciB0LGUscj1bXTtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pezE9PT0ocj1uLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc2xpY2UoKS5zb3J0KHMpfSkpLnNvcnQoQSkpLmxlbmd0aCYmclswXVswXT09PS0xLzAmJnJbMF1bMV09PT0xLzAmJihyPVtbMCwtMV1dKSx0PVMociksZT1yLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm5bTWF0aC5taW4odFswXSxlWzBdKSxNYXRoLm1heCh0WzFdLGVbMV0pXX0pLFsxLzAsLTEvMF0pfSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gci5zbGljZSgpfSxnZXRDb25zb2xpZGF0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdH0sZ2V0Qm91bmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGV9fX0oKTtyZXR1cm4gbC5zZXQocikse2ZpbHRlcjpsLGZpbHRlclNwZWNpZmllZDplLHN2Z0JydXNoOntleHRlbnQ6W10sYnJ1c2hTdGFydENhbGxiYWNrOm4sYnJ1c2hDYWxsYmFjazoobz1pLGZ1bmN0aW9uKHQpe3ZhciBlPXQuYnJ1c2gscj1mdW5jdGlvbih0KXtyZXR1cm4gdC5zdmdCcnVzaC5leHRlbnQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpfShlKS5zbGljZSgpO2UuZmlsdGVyLnNldChyKSxvKCl9KSxicnVzaEVuZENhbGxiYWNrOmF9fX0sZW5zdXJlQXhpc0JydXNoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoIi4iK24uY24uYXhpc0JydXNoKS5kYXRhKG8sYSk7ci5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5heGlzQnJ1c2gsITApLGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShvKTtyLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZCgiYmFja2dyb3VuZCIsITApLmNhbGwoZCkuY2FsbChtKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhdXRvIikuYXR0cigidHJhbnNmb3JtIixsKDAsbi52ZXJ0aWNhbFBhZGRpbmcpKSxyLmNhbGwoaykuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0LW4udmVydGljYWxQYWRkaW5nfSkpO3ZhciBpPXQuc2VsZWN0QWxsKCIuaGlnaGxpZ2h0LXNoYWRvdyIpLmRhdGEobyk7aS5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQoImhpZ2hsaWdodC1zaGFkb3ciLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aCtuLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixlKS5hdHRyKCJvcGFjaXR5IixuLmJhci5zdHJva2VPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxpLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCk7dmFyIGE9dC5zZWxlY3RBbGwoIi5oaWdobGlnaHQiKS5kYXRhKG8pO2EuZW50ZXIoKS5hcHBlbmQoImxpbmUiKS5jbGFzc2VkKCJoaWdobGlnaHQiLCEwKS5hdHRyKCJ4Iiwtbi5iYXIud2lkdGgvMikuYXR0cigic3Ryb2tlLXdpZHRoIixuLmJhci53aWR0aC1uLmJhci5zdHJva2VXaWR0aCkuYXR0cigic3Ryb2tlIixuLmJhci5maWxsQ29sb3IpLmF0dHIoIm9wYWNpdHkiLG4uYmFyLmZpbGxPcGFjaXR5KS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKSxhLmF0dHIoInkxIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLmNhbGwoeCl9KHIsZSl9LGNsZWFuUmFuZ2VzOmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0WzBdKT8odD10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuc29ydChzKX0pKSx0PWUubXVsdGlzZWxlY3Q/Uyh0LnNvcnQoQSkpOlt0WzBdXSk6dD1bdC5zb3J0KHMpXSxlLnRpY2t2YWxzKXt2YXIgcj1lLnRpY2t2YWxzLnNsaWNlKCkuc29ydChzKTtpZighKHQ9dC5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlPVtwKDAscix0WzBdLFtdKSxwKDEscix0WzFdLFtdKV07aWYoZVsxXT5lWzBdKXJldHVybiBlfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkpLmxlbmd0aClyZXR1cm59cmV0dXJuIHQubGVuZ3RoPjE/dDp0WzBdfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi9jb25zdGFudHMiOjExNTcsIkBwbG90bHkvZDMiOjU4fV0sMTE1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9wbG90cy9nZXRfZGF0YSIpLmdldE1vZHVsZUNhbGNEYXRhLGE9dCgiLi9wbG90Iiksbz10KCIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyIpO3IubmFtZT0icGFyY29vcmRzIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJwYXJjb29yZHMiKVswXTtlLmxlbmd0aCYmYSh0LGUpfSxyLmNsZWFuPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW4uX2hhcyYmbi5faGFzKCJwYXJjb29yZHMiKSxhPWUuX2hhcyYmZS5faGFzKCJwYXJjb29yZHMiKTtpJiYhYSYmKG4uX3BhcGVyZGl2LnNlbGVjdEFsbCgiLnBhcmNvb3JkcyIpLnJlbW92ZSgpLG4uX2dsaW1hZ2VzLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpKX0sci50b1NWRz1mdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9nbGltYWdlcyxyPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiLnN2Zy1jb250YWluZXIiKTtyLmZpbHRlcigoZnVuY3Rpb24odCxlKXtyZXR1cm4gZT09PXIuc2l6ZSgpLTF9KSkuc2VsZWN0QWxsKCIuZ2wtY2FudmFzLWNvbnRleHQsIC5nbC1jYW52YXMtZm9jdXMiKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PXRoaXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTtlLmFwcGVuZCgic3ZnOmltYWdlIikuYXR0cih7eG1sbnM6by5zdmcsInhsaW5rOmhyZWYiOnQscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSIseDowLHk6MCx3aWR0aDp0aGlzLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLnN0eWxlLmhlaWdodH0pfSkpLHdpbmRvdy5zZXRUaW1lb3V0KChmdW5jdGlvbigpe24uc2VsZWN0QWxsKCIjZmlsdGVyQmFyUGF0dGVybiIpLmF0dHIoImlkIiwiZmlsdGVyQmFyUGF0dGVybiIpfSksNjApfX0seyIuLi8uLi9jb25zdGFudHMveG1sbnNfbmFtZXNwYWNlcyI6NzUzLCIuLi8uLi9wbG90cy9nZXRfZGF0YSI6ODY0LCIuL3Bsb3QiOjExNjQsIkBwbG90bHkvZDMiOjU4fV0sMTE1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc0FycmF5T3JUeXBlZEFycmF5LGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIiksYT10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvO3JldHVybiBpLmhhc0NvbG9yc2NhbGUoZSwibGluZSIpJiZuKGUubGluZS5jb2xvcik/KHI9ZS5saW5lLmNvbG9yLG89aS5leHRyYWN0T3B0cyhlLmxpbmUpLmNvbG9yc2NhbGUsaS5jYWxjKHQsZSx7dmFsczpyLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSk6KHI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPS41O3JldHVybiBlfShlLl9sZW5ndGgpLG89W1swLGUubGluZS5jb2xvcl0sWzEsZS5saW5lLmNvbG9yXV0pLGEoe2xpbmVDb2xvcjpyLGNzY2FsZTpvfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2d1cCI6NzczfV0sMTE1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e21heERpbWVuc2lvbkNvdW50OjYwLG92ZXJkcmFnOjQ1LHZlcnRpY2FsUGFkZGluZzoyLHRpY2tEaXN0YW5jZTo1MCxjYW52YXNQaXhlbFJhdGlvOjEsYmxvY2tMaW5lQ291bnQ6NWUzLGxheWVyczpbImNvbnRleHRMaW5lTGF5ZXIiLCJmb2N1c0xpbmVMYXllciIsInBpY2tMaW5lTGF5ZXIiXSxheGlzVGl0bGVPZmZzZXQ6MjgsYXhpc0V4dGVudE9mZnNldDoxMCxkZXNlbGVjdGVkTGluZUNvbG9yOiIjNzc3IixiYXI6e3dpZHRoOjQsY2FwdHVyZVdpZHRoOjEwLGZpbGxDb2xvcjoibWFnZW50YSIsZmlsbE9wYWNpdHk6MSxzbmFwRHVyYXRpb246MTUwLHNuYXBSYXRpbzouMjUsc25hcENsb3NlOi4wMSxzdHJva2VPcGFjaXR5OjEsc3Ryb2tlV2lkdGg6MSxoYW5kbGVIZWlnaHQ6OCxoYW5kbGVPcGFjaXR5OjEsaGFuZGxlT3ZlcmxhcDowfSxjbjp7YXhpc0V4dGVudFRleHQ6ImF4aXMtZXh0ZW50LXRleHQiLHBhcmNvb3Jkc0xpbmVMYXllcnM6InBhcmNvb3Jkcy1saW5lLWxheWVycyIscGFyY29vcmRzTGluZUxheWVyOiJwYXJjb29yZHMtbGluZXMiLHBhcmNvb3JkczoicGFyY29vcmRzIixwYXJjb29yZHNDb250cm9sVmlldzoicGFyY29vcmRzLWNvbnRyb2wtdmlldyIseUF4aXM6InktYXhpcyIsYXhpc092ZXJsYXlzOiJheGlzLW92ZXJsYXlzIixheGlzOiJheGlzIixheGlzSGVhZGluZzoiYXhpcy1oZWFkaW5nIixheGlzVGl0bGU6ImF4aXMtdGl0bGUiLGF4aXNFeHRlbnQ6ImF4aXMtZXh0ZW50IixheGlzRXh0ZW50VG9wOiJheGlzLWV4dGVudC10b3AiLGF4aXNFeHRlbnRUb3BUZXh0OiJheGlzLWV4dGVudC10b3AtdGV4dCIsYXhpc0V4dGVudEJvdHRvbToiYXhpcy1leHRlbnQtYm90dG9tIixheGlzRXh0ZW50Qm90dG9tVGV4dDoiYXhpcy1leHRlbnQtYm90dG9tLXRleHQiLGF4aXNCcnVzaDoiYXhpcy1icnVzaCJ9LGlkOntmaWx0ZXJCYXJQYXR0ZXJuOiJmaWx0ZXItYmFyLXBhdHRlcm4ifX19LHt9XSwxMTU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxjPXQoIi4vYXR0cmlidXRlcyIpLHU9dCgiLi9heGlzYnJ1c2giKSxmPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQsaD10KCIuL21lcmdlX2xlbmd0aCIpO2Z1bmN0aW9uIHAodCxlLHIsaSl7ZnVuY3Rpb24gYShyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYy5kaW1lbnNpb25zLHIsaSl9dmFyIG89YSgidmFsdWVzIikscz1hKCJ2aXNpYmxlIik7aWYobyYmby5sZW5ndGh8fChzPWUudmlzaWJsZT0hMSkscyl7YSgibGFiZWwiKSxhKCJ0aWNrdmFscyIpLGEoInRpY2t0ZXh0IiksYSgidGlja2Zvcm1hdCIpO3ZhciBmPWEoInJhbmdlIik7ZS5fYXg9e19pZDoieSIsdHlwZToibGluZWFyIixzaG93ZXhwb25lbnQ6ImFsbCIsZXhwb25lbnRmb3JtYXQ6IkIiLHJhbmdlOmZ9LGwuc2V0Q29udmVydChlLl9heCxpLmxheW91dCksYSgibXVsdGlzZWxlY3QiKTt2YXIgaD1hKCJjb25zdHJhaW50cmFuZ2UiKTtoJiYoZS5jb25zdHJhaW50cmFuZ2U9dS5jbGVhblJhbmdlcyhoLGUpKX19ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGwpe2Z1bmN0aW9uIHUocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgZD10LmRpbWVuc2lvbnM7QXJyYXkuaXNBcnJheShkKSYmZC5sZW5ndGg+ZiYmKG4ubG9nKCJwYXJjb29yZHMgdHJhY2VzIHN1cHBvcnQgdXAgdG8gIitmKyIgZGltZW5zaW9ucyBhdCB0aGUgbW9tZW50IiksZC5zcGxpY2UoZikpO3ZhciBtPXModCxlLHtuYW1lOiJkaW1lbnNpb25zIixsYXlvdXQ6bCxoYW5kbGVJdGVtRGVmYXVsdHM6cH0pLGc9ZnVuY3Rpb24odCxlLHIsbyxzKXt2YXIgbD1zKCJsaW5lLmNvbG9yIixyKTtpZihpKHQsImxpbmUiKSYmbi5pc0FycmF5T3JUeXBlZEFycmF5KGwpKXtpZihsLmxlbmd0aClyZXR1cm4gcygibGluZS5jb2xvcnNjYWxlIiksYSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pLGwubGVuZ3RoO2UubGluZS5jb2xvcj1yfXJldHVybiAxLzB9KHQsZSxyLGwsdSk7byhlLGwsdSksQXJyYXkuaXNBcnJheShtKSYmbS5sZW5ndGh8fChlLnZpc2libGU9ITEpLGgoZSxtLCJ2YWx1ZXMiLGcpO3ZhciB2PXtmYW1pbHk6bC5mb250LmZhbWlseSxzaXplOk1hdGgucm91bmQobC5mb250LnNpemUvMS4yKSxjb2xvcjpsLmZvbnQuY29sb3J9O24uY29lcmNlRm9udCh1LCJsYWJlbGZvbnQiLHYpLG4uY29lcmNlRm9udCh1LCJ0aWNrZm9udCIsdiksbi5jb2VyY2VGb250KHUsInJhbmdlZm9udCIsdiksdSgibGFiZWxhbmdsZSIpLHUoImxhYmVsc2lkZSIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi9hdHRyaWJ1dGVzIjoxMTUzLCIuL2F4aXNicnVzaCI6MTE1NCwiLi9jb25zdGFudHMiOjExNTcsIi4vbWVyZ2VfbGVuZ3RoIjoxMTYyfV0sMTE1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKS5pc1R5cGVkQXJyYXk7ci5jb252ZXJ0VHlwZWRBcnJheT1mdW5jdGlvbih0KXtyZXR1cm4gbih0KT9BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KTp0fSxyLmlzT3JkaW5hbD1mdW5jdGlvbih0KXtyZXR1cm4hIXQudGlja3ZhbHN9LHIuaXNWaXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGV8fCEoInZpc2libGUiaW4gdCl9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTE2MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9LG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwYXJjb29yZHMiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsIm5vT3BhY2l0eSIsIm5vSG92ZXIiXSxtZXRhOnt9fX0seyIuL2F0dHJpYnV0ZXMiOjExNTMsIi4vYmFzZV9wbG90IjoxMTU1LCIuL2NhbGMiOjExNTYsIi4vZGVmYXVsdHMiOjExNTgsIi4vcGxvdCI6MTE2NH1dLDExNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2xzbGlmeSIpLGk9bihbInByZWNpc2lvbiBoaWdocCBmbG9hdDtcbiNkZWZpbmUgR0xTTElGWSAxXG5cbnZhcnlpbmcgdmVjNCBmcmFnQ29sb3I7XG5cbmF0dHJpYnV0ZSB2ZWM0IHAwMV8wNCwgcDA1XzA4LCBwMDlfMTIsIHAxM18xNixcbiAgICAgICAgICAgICAgIHAxN18yMCwgcDIxXzI0LCBwMjVfMjgsIHAyOV8zMixcbiAgICAgICAgICAgICAgIHAzM18zNiwgcDM3XzQwLCBwNDFfNDQsIHA0NV80OCxcbiAgICAgICAgICAgICAgIHA0OV81MiwgcDUzXzU2LCBwNTdfNjAsIGNvbG9ycztcblxudW5pZm9ybSBtYXQ0IGRpbTBBLCBkaW0xQSwgZGltMEIsIGRpbTFCLCBkaW0wQywgZGltMUMsIGRpbTBELCBkaW0xRCxcbiAgICAgICAgICAgICBsb0EsIGhpQSwgbG9CLCBoaUIsIGxvQywgaGlDLCBsb0QsIGhpRDtcblxudW5pZm9ybSB2ZWMyIHJlc29sdXRpb24sIHZpZXdCb3hQb3MsIHZpZXdCb3hTaXplO1xudW5pZm9ybSBmbG9hdCBtYXNrSGVpZ2h0O1xudW5pZm9ybSBmbG9hdCBkcndMYXllcjsgLy8gMDogY29udGV4dCwgMTogZm9jdXMsIDI6IHBpY2tcbnVuaWZvcm0gdmVjNCBjb250ZXh0Q29sb3I7XG51bmlmb3JtIHNhbXBsZXIyRCBtYXNrVGV4dHVyZSwgcGFsZXR0ZTtcblxuYm9vbCBpc1BpY2sgICAgPSAoZHJ3TGF5ZXIgPiAxLjUpO1xuYm9vbCBpc0NvbnRleHQgPSAoZHJ3TGF5ZXIgPCAwLjUpO1xuXG5jb25zdCB2ZWM0IFpFUk9TID0gdmVjNCgwLjAsIDAuMCwgMC4wLCAwLjApO1xuY29uc3QgdmVjNCBVTklUUyA9IHZlYzQoMS4wLCAxLjAsIDEuMCwgMS4wKTtcblxuZmxvYXQgdmFsKG1hdDQgcCwgbWF0NCB2KSB7XG4gICAgcmV0dXJuIGRvdChtYXRyaXhDb21wTXVsdChwLCB2KSAqIFVOSVRTLCBVTklUUyk7XG59XG5cbmZsb2F0IGF4aXNZKGZsb2F0IHJhdGlvLCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB5MSA9IHZhbChBLCBkaW0wQSkgKyB2YWwoQiwgZGltMEIpICsgdmFsKEMsIGRpbTBDKSArIHZhbChELCBkaW0wRCk7XG4gICAgZmxvYXQgeTIgPSB2YWwoQSwgZGltMUEpICsgdmFsKEIsIGRpbTFCKSArIHZhbChDLCBkaW0xQykgKyB2YWwoRCwgZGltMUQpO1xuICAgIHJldHVybiB5MSAqICgxLjAgLSByYXRpbykgKyB5MiAqIHJhdGlvO1xufVxuXG5pbnQgaU1vZChpbnQgYSwgaW50IGIpIHtcbiAgICByZXR1cm4gYSAtIGIgKiAoYSAvIGIpO1xufVxuXG5ib29sIGZPdXRzaWRlKGZsb2F0IHAsIGZsb2F0IGxvLCBmbG9hdCBoaSkge1xuICAgIHJldHVybiAobG8gPCBoaSkgJiYgKGxvID4gcCB8fCBwID4gaGkpO1xufVxuXG5ib29sIHZPdXRzaWRlKHZlYzQgcCwgdmVjNCBsbywgdmVjNCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIGZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgZk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICBmT3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIGZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG1PdXRzaWRlKG1hdDQgcCwgbWF0NCBsbywgbWF0NCBoaSkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHZPdXRzaWRlKHBbMF0sIGxvWzBdLCBoaVswXSkgfHxcbiAgICAgICAgdk91dHNpZGUocFsxXSwgbG9bMV0sIGhpWzFdKSB8fFxuICAgICAgICB2T3V0c2lkZShwWzJdLCBsb1syXSwgaGlbMl0pIHx8XG4gICAgICAgIHZPdXRzaWRlKHBbM10sIGxvWzNdLCBoaVszXSlcbiAgICApO1xufVxuXG5ib29sIG91dHNpZGVCb3VuZGluZ0JveChtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICByZXR1cm4gbU91dHNpZGUoQSwgbG9BLCBoaUEpIHx8XG4gICAgICAgICAgIG1PdXRzaWRlKEIsIGxvQiwgaGlCKSB8fFxuICAgICAgICAgICBtT3V0c2lkZShDLCBsb0MsIGhpQykgfHxcbiAgICAgICAgICAgbU91dHNpZGUoRCwgbG9ELCBoaUQpO1xufVxuXG5ib29sIG91dHNpZGVSYXN0ZXJNYXNrKG1hdDQgQSwgbWF0NCBCLCBtYXQ0IEMsIG1hdDQgRCkge1xuICAgIG1hdDQgcG50c1s0XTtcbiAgICBwbnRzWzBdID0gQTtcbiAgICBwbnRzWzFdID0gQjtcbiAgICBwbnRzWzJdID0gQztcbiAgICBwbnRzWzNdID0gRDtcblxuICAgIGZvcihpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IDQ7ICsraikge1xuICAgICAgICAgICAgZm9yKGludCBrID0gMDsgayA8IDQ7ICsraykge1xuICAgICAgICAgICAgICAgIGlmKDAgPT0gaU1vZChcbiAgICAgICAgICAgICAgICAgICAgaW50KDI1NS4wICogdGV4dHVyZTJEKG1hc2tUZXh0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVjMihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQoaSAqIDIgKyBqIC8gMikgKyAwLjUpIC8gOC4wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwbnRzW2ldW2pdW2tdICogKG1hc2tIZWlnaHQgLSAxLjApICsgMS4wKSAvIG1hc2tIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICkpWzNdXG4gICAgICAgICAgICAgICAgICAgICkgLyBpbnQocG93KDIuMCwgZmxvYXQoaU1vZChqICogNCArIGssIDgpKSkpLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG52ZWM0IHBvc2l0aW9uKGJvb2wgaXNDb250ZXh0LCBmbG9hdCB2LCBtYXQ0IEEsIG1hdDQgQiwgbWF0NCBDLCBtYXQ0IEQpIHtcbiAgICBmbG9hdCB4ID0gMC41ICogc2lnbih2KSArIDAuNTtcbiAgICBmbG9hdCB5ID0gYXhpc1koeCwgQSwgQiwgQywgRCk7XG4gICAgZmxvYXQgeiA9IDEuMCAtIGFicyh2KTtcblxuICAgIHogKz0gaXNDb250ZXh0ID8gMC4wIDogMi4wICogZmxvYXQoXG4gICAgICAgIG91dHNpZGVCb3VuZGluZ0JveChBLCBCLCBDLCBEKSB8fFxuICAgICAgICBvdXRzaWRlUmFzdGVyTWFzayhBLCBCLCBDLCBEKVxuICAgICk7XG5cbiAgICByZXR1cm4gdmVjNChcbiAgICAgICAgMi4wICogKHZlYzIoeCwgeSkgKiB2aWV3Qm94U2l6ZSArIHZpZXdCb3hQb3MpIC8gcmVzb2x1dGlvbiAtIDEuMCxcbiAgICAgICAgeixcbiAgICAgICAgMS4wXG4gICAgKTtcbn1cblxudm9pZCBtYWluKCkge1xuICAgIG1hdDQgQSA9IG1hdDQocDAxXzA0LCBwMDVfMDgsIHAwOV8xMiwgcDEzXzE2KTtcbiAgICBtYXQ0IEIgPSBtYXQ0KHAxN18yMCwgcDIxXzI0LCBwMjVfMjgsIHAyOV8zMik7XG4gICAgbWF0NCBDID0gbWF0NChwMzNfMzYsIHAzN180MCwgcDQxXzQ0LCBwNDVfNDgpO1xuICAgIG1hdDQgRCA9IG1hdDQocDQ5XzUyLCBwNTNfNTYsIHA1N182MCwgWkVST1MpO1xuXG4gICAgZmxvYXQgdiA9IGNvbG9yc1szXTtcblxuICAgIGdsX1Bvc2l0aW9uID0gcG9zaXRpb24oaXNDb250ZXh0LCB2LCBBLCBCLCBDLCBEKTtcblxuICAgIGZyYWdDb2xvciA9XG4gICAgICAgIGlzQ29udGV4dCA/IHZlYzQoY29udGV4dENvbG9yKSA6XG4gICAgICAgIGlzUGljayA/IHZlYzQoY29sb3JzLnJnYiwgMS4wKSA6IHRleHR1cmUyRChwYWxldHRlLCB2ZWMyKGFicyh2KSwgMC41KSk7XG59XG4iXSksYT1uKFsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xuI2RlZmluZSBHTFNMSUZZIDFcblxudmFyeWluZyB2ZWM0IGZyYWdDb2xvcjtcblxudm9pZCBtYWluKCkge1xuICAgIGdsX0ZyYWdDb2xvciA9IGZyYWdDb2xvcjtcbn1cbiJdKSxvPXQoIi4vY29uc3RhbnRzIikubWF4RGltZW5zaW9uQ291bnQscz10KCIuLi8uLi9saWIiKSxsPW5ldyBVaW50OEFycmF5KDQpLGM9bmV3IFVpbnQ4QXJyYXkoNCksdT17c2hhcGU6WzI1NiwxXSxmb3JtYXQ6InJnYmEiLHR5cGU6InVpbnQ4IixtYWc6Im5lYXJlc3QiLG1pbjoibmVhcmVzdCJ9O2Z1bmN0aW9uIGYodCxlLHIsbixpKXt2YXIgYT10Ll9nbDthLmVuYWJsZShhLlNDSVNTT1JfVEVTVCksYS5zY2lzc29yKGUscixuLGkpLHQuY2xlYXIoe2NvbG9yOlswLDAsMCwwXSxkZXB0aDoxfSl9ZnVuY3Rpb24gaCh0LGUscixuLGksYSl7dmFyIG89YS5rZXk7ci5kcmF3Q29tcGxldGVkfHwoIWZ1bmN0aW9uKHQpe3QucmVhZCh7eDowLHk6MCx3aWR0aDoxLGhlaWdodDoxLGRhdGE6bH0pfSh0KSxyLmRyYXdDb21wbGV0ZWQ9ITApLGZ1bmN0aW9uIHMobCl7dmFyIGM9TWF0aC5taW4obixpLWwqbik7MD09PWwmJih3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoci5jdXJyZW50UmFmc1tvXSksZGVsZXRlIHIuY3VycmVudFJhZnNbb10sZih0LGEuc2Npc3NvclgsYS5zY2lzc29yWSxhLnNjaXNzb3JXaWR0aCxhLnZpZXdCb3hTaXplWzFdKSksci5jbGVhck9ubHl8fChhLmNvdW50PTIqYyxhLm9mZnNldD0yKmwqbixlKGEpLGwqbitjPGkmJihyLmN1cnJlbnRSYWZzW29dPXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKGZ1bmN0aW9uKCl7cyhsKzEpfSkpKSxyLmRyYXdDb21wbGV0ZWQ9ITEpfSgwKX1mdW5jdGlvbiBwKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSgyNTYpLG49MDtuPDI1NjtuKyspcltuXT10KG4vMjU1KS5jb25jYXQoZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gZCh0LGUpe3JldHVybih0Pj4+OCplKSUyNTYvMjU1fWZ1bmN0aW9uIG0odCxlLHIpe2Zvcih2YXIgbj1uZXcgQXJyYXkoOCplKSxpPTAsYT0wO2E8ZTthKyspZm9yKHZhciBvPTA7bzwyO28rKylmb3IodmFyIHM9MDtzPDQ7cysrKXt2YXIgbD00KnQrcyxjPXJbNjQqYStsXTs2Mz09PWwmJjA9PT1vJiYoYyo9LTEpLG5baSsrXT1jfXJldHVybiBufWZ1bmN0aW9uIGcodCl7dmFyIGU9IjAiK3Q7cmV0dXJuIGUuc3Vic3RyKGUubGVuZ3RoLTIpfWZ1bmN0aW9uIHYodCl7cmV0dXJuIHQ8bz8icCIrZyh0KzEpKyJfIitnKHQrNCk6ImNvbG9ycyJ9ZnVuY3Rpb24geSh0LGUscixuLGksYSxvLGwsYyx1LGYsaCxwLGQpe2Zvcih2YXIgbT1bW10sW11dLGc9MDtnPDY0O2crKyltWzBdW2ddPWc9PT1pPzE6MCxtWzFdW2ddPWc9PT1hPzE6MDtvKj1kLGwqPWQsYyo9ZCx1Kj1kO3ZhciB2PXQubGluZXMuY2FudmFzT3ZlcmRyYWcqZCx5PXQuZG9tYWluLHg9dC5jYW52YXNXaWR0aCpkLGI9dC5jYW52YXNIZWlnaHQqZCxfPXQucGFkLmwqZCx3PXQucGFkLmIqZCxUPXQubGF5b3V0SGVpZ2h0KmQsaz10LmxheW91dFdpZHRoKmQsQT10LmRlc2VsZWN0ZWRMaW5lcy5jb2xvcjtyZXR1cm4gcy5leHRlbmRGbGF0KHtrZXk6ZixyZXNvbHV0aW9uOlt4LGJdLHZpZXdCb3hQb3M6W28rdixsXSx2aWV3Qm94U2l6ZTpbYyx1XSxpMDppLGkxOmEsZGltMEE6bVswXS5zbGljZSgwLDE2KSxkaW0wQjptWzBdLnNsaWNlKDE2LDMyKSxkaW0wQzptWzBdLnNsaWNlKDMyLDQ4KSxkaW0wRDptWzBdLnNsaWNlKDQ4LDY0KSxkaW0xQTptWzFdLnNsaWNlKDAsMTYpLGRpbTFCOm1bMV0uc2xpY2UoMTYsMzIpLGRpbTFDOm1bMV0uc2xpY2UoMzIsNDgpLGRpbTFEOm1bMV0uc2xpY2UoNDgsNjQpLGRyd0xheWVyOmgsY29udGV4dENvbG9yOltBWzBdLzI1NSxBWzFdLzI1NSxBWzJdLzI1NSxBWzNdPDE/QVszXTpNYXRoLm1heCgxLzI1NSxNYXRoLnBvdygxL3QubGluZXMuY29sb3IubGVuZ3RoLDEvMykpXSxzY2lzc29yWDoobj09PWU/MDpvK3YpKyhfLXYpK2sqeS54WzBdLHNjaXNzb3JXaWR0aDoobj09PXI/eC1vK3Y6YysuNSkrKG49PT1lP28rdjowKSxzY2lzc29yWTpsK3crVCp5LnlbMF0sc2Npc3NvckhlaWdodDp1LHZpZXdwb3J0WDpfLXYrayp5LnhbMF0sdmlld3BvcnRZOncrVCp5LnlbMF0sdmlld3BvcnRXaWR0aDp4LHZpZXdwb3J0SGVpZ2h0OmJ9LHApfWZ1bmN0aW9uIHgodCl7dmFyIGU9TWF0aC5tYXgoMCxNYXRoLmZsb29yKDIwNDcqdFswXSksMCkscj1NYXRoLm1pbigyMDQ3LE1hdGguY2VpbCgyMDQ3KnRbMV0pLDIwNDcpO3JldHVybltNYXRoLm1pbihlLHIpLE1hdGgubWF4KGUscildfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sbCxnLGIsXz1lLmNvbnRleHQsdz1lLnBpY2ssVD1lLnJlZ2wsaz1ULl9nbCxBPWsuZ2V0UGFyYW1ldGVyKGsuQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFKSxNPU1hdGgubWF4KEFbMF0sTWF0aC5taW4oQVsxXSxlLnZpZXdNb2RlbC5wbG90R2xQaXhlbFJhdGlvKSksUz17Y3VycmVudFJhZnM6e30sZHJhd0NvbXBsZXRlZDohMCxjbGVhck9ubHk6ITF9LEU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXt9LHI9MDtyPD1vO3IrPTQpZVt2KHIpXT10LmJ1ZmZlcih7dXNhZ2U6ImR5bmFtaWMiLHR5cGU6ImZsb2F0IixkYXRhOm5ldyBVaW50OEFycmF5KDApfSk7cmV0dXJuIGV9KFQpLEw9VC50ZXh0dXJlKHUpLEM9W107SShlKTt2YXIgUD1UKHtwcm9maWxlOiExLGJsZW5kOntlbmFibGU6XyxmdW5jOntzcmNSR0I6InNyYyBhbHBoYSIsZHN0UkdCOiJvbmUgbWludXMgc3JjIGFscGhhIixzcmNBbHBoYToxLGRzdEFscGhhOjF9LGVxdWF0aW9uOntyZ2I6ImFkZCIsYWxwaGE6ImFkZCJ9LGNvbG9yOlswLDAsMCwwXX0sZGVwdGg6e2VuYWJsZTohXyxtYXNrOiEwLGZ1bmM6Imxlc3MiLHJhbmdlOlswLDFdfSxjdWxsOntlbmFibGU6ITAsZmFjZToiYmFjayJ9LHNjaXNzb3I6e2VuYWJsZTohMCxib3g6e3g6VC5wcm9wKCJzY2lzc29yWCIpLHk6VC5wcm9wKCJzY2lzc29yWSIpLHdpZHRoOlQucHJvcCgic2Npc3NvcldpZHRoIiksaGVpZ2h0OlQucHJvcCgic2Npc3NvckhlaWdodCIpfX0sdmlld3BvcnQ6e3g6VC5wcm9wKCJ2aWV3cG9ydFgiKSx5OlQucHJvcCgidmlld3BvcnRZIiksd2lkdGg6VC5wcm9wKCJ2aWV3cG9ydFdpZHRoIiksaGVpZ2h0OlQucHJvcCgidmlld3BvcnRIZWlnaHQiKX0sZGl0aGVyOiExLHZlcnQ6aSxmcmFnOmEscHJpbWl0aXZlOiJsaW5lcyIsbGluZVdpZHRoOk0sYXR0cmlidXRlczpFLHVuaWZvcm1zOntyZXNvbHV0aW9uOlQucHJvcCgicmVzb2x1dGlvbiIpLHZpZXdCb3hQb3M6VC5wcm9wKCJ2aWV3Qm94UG9zIiksdmlld0JveFNpemU6VC5wcm9wKCJ2aWV3Qm94U2l6ZSIpLGRpbTBBOlQucHJvcCgiZGltMEEiKSxkaW0xQTpULnByb3AoImRpbTFBIiksZGltMEI6VC5wcm9wKCJkaW0wQiIpLGRpbTFCOlQucHJvcCgiZGltMUIiKSxkaW0wQzpULnByb3AoImRpbTBDIiksZGltMUM6VC5wcm9wKCJkaW0xQyIpLGRpbTBEOlQucHJvcCgiZGltMEQiKSxkaW0xRDpULnByb3AoImRpbTFEIiksbG9BOlQucHJvcCgibG9BIiksaGlBOlQucHJvcCgiaGlBIiksbG9COlQucHJvcCgibG9CIiksaGlCOlQucHJvcCgiaGlCIiksbG9DOlQucHJvcCgibG9DIiksaGlDOlQucHJvcCgiaGlDIiksbG9EOlQucHJvcCgibG9EIiksaGlEOlQucHJvcCgiaGlEIikscGFsZXR0ZTpMLGNvbnRleHRDb2xvcjpULnByb3AoImNvbnRleHRDb2xvciIpLG1hc2tUZXh0dXJlOlQucHJvcCgibWFza1RleHR1cmUiKSxkcndMYXllcjpULnByb3AoImRyd0xheWVyIiksbWFza0hlaWdodDpULnByb3AoIm1hc2tIZWlnaHQiKX0sb2Zmc2V0OlQucHJvcCgib2Zmc2V0IiksY291bnQ6VC5wcm9wKCJjb3VudCIpfSk7ZnVuY3Rpb24gSSh0KXtyPXQubW9kZWwsbj10LnZpZXdNb2RlbCxsPW4uZGltZW5zaW9ucy5zbGljZSgpLGc9bFswXT9sWzBdLnZhbHVlcy5sZW5ndGg6MDt2YXIgZT1yLmxpbmVzLGk9dz9lLmNvbG9yLm1hcCgoZnVuY3Rpb24odCxyKXtyZXR1cm4gci9lLmNvbG9yLmxlbmd0aH0pKTplLmNvbG9yLGE9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPW5ldyBBcnJheSh0KihvKzQpKSxhPTAscz0wO3M8dDtzKyspe2Zvcih2YXIgbD0wO2w8bztsKyspaVthKytdPWw8ZS5sZW5ndGg/ZVtsXS5wYWRkZWRVbml0VmFsdWVzW3NdOi41O2lbYSsrXT1kKHMsMiksaVthKytdPWQocywxKSxpW2ErK109ZChzLDApLGlbYSsrXT0obj1yW3NdLE1hdGgubWF4KDFlLTYsTWF0aC5taW4oLjk5OTk5OSxuKSkpfXJldHVybiBpfShnLGwsaSk7IWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49MDtuPD1vO24rPTQpdFt2KG4pXShtKG4vNCxlLHIpKX0oRSxnLGEpLF98fHd8fChMPVQudGV4dHVyZShzLmV4dGVuZEZsYXQoe2RhdGE6cChyLnVuaXRUb0NvbG9yLDI1NSl9LHUpKSl9cmV0dXJue3JlbmRlcjpmdW5jdGlvbih0LGUsbil7dmFyIGksYSxvLHM9dC5sZW5ndGgsYz0xLzAsdT0tMS8wO2ZvcihpPTA7aTxzO2krKyl0W2ldLmRpbTAuY2FudmFzWDxjJiYoYz10W2ldLmRpbTAuY2FudmFzWCxhPWkpLHRbaV0uZGltMS5jYW52YXNYPnUmJih1PXRbaV0uZGltMS5jYW52YXNYLG89aSk7MD09PXMmJmYoVCwwLDAsci5jYW52YXNXaWR0aCxyLmNhbnZhc0hlaWdodCk7dmFyIHA9ZnVuY3Rpb24odCl7dmFyIGUscixuLGk9W1tdLFtdXTtmb3Iobj0wO248NjQ7bisrKXt2YXIgYT0hdCYmbjxsLmxlbmd0aD9sW25dLmJydXNoLmZpbHRlci5nZXRCb3VuZHMoKTpbLTEvMCwxLzBdO2lbMF1bbl09YVswXSxpWzFdW25dPWFbMV19dmFyIG89bmV3IEFycmF5KDE2Mzg0KTtmb3IoZT0wO2U8MTYzODQ7ZSsrKW9bZV09MjU1O2lmKCF0KWZvcihlPTA7ZTxsLmxlbmd0aDtlKyspe3ZhciBzPWUlOCxjPShlLXMpLzgsdT1NYXRoLnBvdygyLHMpLGY9bFtlXS5icnVzaC5maWx0ZXIuZ2V0KCk7aWYoIShmLmxlbmd0aDwyKSl7dmFyIGg9eChmWzBdKVsxXTtmb3Iocj0xO3I8Zi5sZW5ndGg7cisrKXt2YXIgcD14KGZbcl0pO2ZvcihuPWgrMTtuPHBbMF07bisrKW9bOCpuK2NdJj1+dTtoPU1hdGgubWF4KGgscFsxXSl9fX12YXIgZD17c2hhcGU6WzgsMjA0OF0sZm9ybWF0OiJhbHBoYSIsdHlwZToidWludDgiLG1hZzoibmVhcmVzdCIsbWluOiJuZWFyZXN0IixkYXRhOm99O3JldHVybiBiP2IoZCk6Yj1ULnRleHR1cmUoZCkse21hc2tUZXh0dXJlOmIsbWFza0hlaWdodDoyMDQ4LGxvQTppWzBdLnNsaWNlKDAsMTYpLGxvQjppWzBdLnNsaWNlKDE2LDMyKSxsb0M6aVswXS5zbGljZSgzMiw0OCksbG9EOmlbMF0uc2xpY2UoNDgsNjQpLGhpQTppWzFdLnNsaWNlKDAsMTYpLGhpQjppWzFdLnNsaWNlKDE2LDMyKSxoaUM6aVsxXS5zbGljZSgzMiw0OCksaGlEOmlbMV0uc2xpY2UoNDgsNjQpfX0oXyk7Zm9yKGk9MDtpPHM7aSsrKXt2YXIgZD10W2ldLG09ZC5kaW0wLmNyb3NzZmlsdGVyRGltZW5zaW9uSW5kZXgsdj1kLmRpbTEuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxrPWQuY2FudmFzWCxBPWQuY2FudmFzWSxNPWsrZC5wYW5lbFNpemVYLEU9ZC5wbG90R2xQaXhlbFJhdGlvO2lmKGV8fCFDW21dfHxDW21dWzBdIT09a3x8Q1ttXVsxXSE9PU0pe0NbbV09W2ssTV07dmFyIEw9eShyLGEsbyxpLG0sdixrLEEsZC5wYW5lbFNpemVYLGQucGFuZWxTaXplWSxkLmRpbTAuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleCxfPzA6dz8yOjEscCxFKTtTLmNsZWFyT25seT1uO3ZhciBJPWU/ci5saW5lcy5ibG9ja0xpbmVDb3VudDpnO2goVCxQLFMsSSxnLEwpfX19LHJlYWRQaXhlbDpmdW5jdGlvbih0LGUpe3JldHVybiBULnJlYWQoe3g6dCx5OmUsd2lkdGg6MSxoZWlnaHQ6MSxkYXRhOmN9KSxjfSxyZWFkUGl4ZWxzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPW5ldyBVaW50OEFycmF5KDQqcipuKTtyZXR1cm4gVC5yZWFkKHt4OnQseTplLHdpZHRoOnIsaGVpZ2h0Om4sZGF0YTppfSksaX0sZGVzdHJveTpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0LnN0eWxlWyJwb2ludGVyLWV2ZW50cyJdPSJub25lIixMLmRlc3Ryb3koKSxiJiZiLmRlc3Ryb3koKSxFKUVbZV0uZGVzdHJveSgpfSx1cGRhdGU6SX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2NvbnN0YW50cyI6MTE1NyxnbHNsaWZ5OjQyNH1dLDExNjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE7Zm9yKG58fChuPTEvMCksaT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihuPU1hdGgubWluKG4sYVtyXS5sZW5ndGgpKTtmb3Iobj09PTEvMCYmKG49MCksdC5fbGVuZ3RoPW4saT0wO2k8ZS5sZW5ndGg7aSsrKShhPWVbaV0pLnZpc2libGUmJihhLl9sZW5ndGg9bik7cmV0dXJuIG59fSx7fV0sMTE2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgiY29sb3ItcmdiYSIpLHM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxsPWkuc3RyUm90YXRlLGM9aS5zdHJUcmFuc2xhdGUsdT10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxmPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGg9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikscD10KCIuLi8uLi9saWIvZ3VwIiksZD1wLmtleUZ1bixtPXAucmVwZWF0LGc9cC51bndyYXAsdj10KCIuL2hlbHBlcnMiKSx5PXQoIi4vY29uc3RhbnRzIikseD10KCIuL2F4aXNicnVzaCIpLGI9dCgiLi9saW5lcyIpO2Z1bmN0aW9uIF8odCxlLHIpe3JldHVybiBpLmFnZ051bXModCxudWxsLGUscil9ZnVuY3Rpb24gdyh0LGUpe3JldHVybiBrKF8oTWF0aC5taW4sdCxlKSxfKE1hdGgubWF4LHQsZSkpfWZ1bmN0aW9uIFQodCl7dmFyIGU9dC5yYW5nZTtyZXR1cm4gZT9rKGVbMF0sZVsxXSk6dyh0LnZhbHVlcyx0Ll9sZW5ndGgpfWZ1bmN0aW9uIGsodCxlKXtyZXR1cm4haXNOYU4odCkmJmlzRmluaXRlKHQpfHwodD0wKSwhaXNOYU4oZSkmJmlzRmluaXRlKGUpfHwoZT0wKSx0PT09ZSYmKDA9PT10Pyh0LT0xLGUrPTEpOih0Kj0uOSxlKj0xLjEpKSxbdCxlXX1mdW5jdGlvbiBBKHQsZSxyLGksbyl7dmFyIHMsbCxjPVQocik7cmV0dXJuIGk/bi5zY2FsZS5vcmRpbmFsKCkuZG9tYWluKGkubWFwKChzPWEoci50aWNrZm9ybWF0KSxsPW8sbD9mdW5jdGlvbih0LGUpe3ZhciByPWxbZV07cmV0dXJuIG51bGw9PXI/cyh0KTpyfTpzKSkpLnJhbmdlKGkubWFwKChmdW5jdGlvbihyKXt2YXIgbj0oci1jWzBdKS8oY1sxXS1jWzBdKTtyZXR1cm4gdC1lK24qKDIqZS10KX0pKSk6bi5zY2FsZS5saW5lYXIoKS5kb21haW4oYykucmFuZ2UoW3QtZSxlXSl9ZnVuY3Rpb24gTSh0KXtpZih0LnRpY2t2YWxzKXt2YXIgZT1UKHQpO3JldHVybiBuLnNjYWxlLm9yZGluYWwoKS5kb21haW4odC50aWNrdmFscykucmFuZ2UodC50aWNrdmFscy5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybih0LWVbMF0pLyhlWzFdLWVbMF0pfSkpKX19ZnVuY3Rpb24gUyh0KXt2YXIgZT10Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF19KSkscj10Lm1hcCgoZnVuY3Rpb24odCl7dmFyIGU9byh0WzFdKTtyZXR1cm4gbi5yZ2IoInJnYigiK2VbMF0rIiwiK2VbMV0rIiwiK2VbMl0rIikiKX0pKSxpPSJyZ2IiLnNwbGl0KCIiKS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLmNsYW1wKCEwKS5kb21haW4oZSkucmFuZ2Uoci5tYXAoKGk9dCxmdW5jdGlvbih0KXtyZXR1cm4gdFtpXX0pKSk7dmFyIGl9KSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUodCl9KSl9fWZ1bmN0aW9uIEUodCl7cmV0dXJuIHQuZGltZW5zaW9ucy5zb21lKChmdW5jdGlvbih0KXtyZXR1cm4gdC5icnVzaC5maWx0ZXJTcGVjaWZpZWR9KSl9ZnVuY3Rpb24gTCh0LGUscil7dmFyIGE9ZyhlKSxzPWEudHJhY2UsbD12LmNvbnZlcnRUeXBlZEFycmF5KGEubGluZUNvbG9yKSxjPXMubGluZSx1PXtjb2xvcjpvKHkuZGVzZWxlY3RlZExpbmVDb2xvcil9LGY9aC5leHRyYWN0T3B0cyhjKSxwPWYucmV2ZXJzZXNjYWxlP2guZmxpcFNjYWxlKGEuY3NjYWxlKTphLmNzY2FsZSxkPXMuZG9tYWluLG09cy5kaW1lbnNpb25zLHg9dC53aWR0aCxiPXMubGFiZWxhbmdsZSxfPXMubGFiZWxzaWRlLHc9cy5sYWJlbGZvbnQsaz1zLnRpY2tmb250LEE9cy5yYW5nZWZvbnQsTT1pLmV4dGVuZERlZXBOb0FycmF5cyh7fSxjLHtjb2xvcjpsLm1hcChuLnNjYWxlLmxpbmVhcigpLmRvbWFpbihUKHt2YWx1ZXM6bCxyYW5nZTpbZi5taW4sZi5tYXhdLF9sZW5ndGg6cy5fbGVuZ3RofSkpKSxibG9ja0xpbmVDb3VudDp5LmJsb2NrTGluZUNvdW50LGNhbnZhc092ZXJkcmFnOnkub3ZlcmRyYWcqeS5jYW52YXNQaXhlbFJhdGlvfSksRT1NYXRoLmZsb29yKHgqKGQueFsxXS1kLnhbMF0pKSxMPU1hdGguZmxvb3IodC5oZWlnaHQqKGQueVsxXS1kLnlbMF0pKSxDPXQubWFyZ2lufHx7bDo4MCxyOjgwLHQ6MTAwLGI6ODB9LFA9RSxJPUw7cmV0dXJue2tleTpyLGNvbENvdW50Om0uZmlsdGVyKHYuaXNWaXNpYmxlKS5sZW5ndGgsZGltZW5zaW9uczptLHRpY2tEaXN0YW5jZTp5LnRpY2tEaXN0YW5jZSx1bml0VG9Db2xvcjpTKHApLGxpbmVzOk0sZGVzZWxlY3RlZExpbmVzOnUsbGFiZWxBbmdsZTpiLGxhYmVsU2lkZTpfLGxhYmVsRm9udDp3LHRpY2tGb250OmsscmFuZ2VGb250OkEsbGF5b3V0V2lkdGg6eCxsYXlvdXRIZWlnaHQ6dC5oZWlnaHQsZG9tYWluOmQsdHJhbnNsYXRlWDpkLnhbMF0qeCx0cmFuc2xhdGVZOnQuaGVpZ2h0LWQueVsxXSp0LmhlaWdodCxwYWQ6QyxjYW52YXNXaWR0aDpQKnkuY2FudmFzUGl4ZWxSYXRpbysyKk0uY2FudmFzT3ZlcmRyYWcsY2FudmFzSGVpZ2h0OkkqeS5jYW52YXNQaXhlbFJhdGlvLHdpZHRoOlAsaGVpZ2h0OkksY2FudmFzUGl4ZWxSYXRpbzp5LmNhbnZhc1BpeGVsUmF0aW99fWZ1bmN0aW9uIEModCxlLHIpe3ZhciBvPXIud2lkdGgscz1yLmhlaWdodCxsPXIuZGltZW5zaW9ucyxjPXIuY2FudmFzUGl4ZWxSYXRpbyx1PWZ1bmN0aW9uKHQpe3JldHVybiBvKnQvTWF0aC5tYXgoMSxyLmNvbENvdW50LTEpfSxmPXkudmVydGljYWxQYWRkaW5nL3MsaD1mdW5jdGlvbih0LGUpe3JldHVybiBuLnNjYWxlLmxpbmVhcigpLnJhbmdlKFtlLHQtZV0pfShzLHkudmVydGljYWxQYWRkaW5nKSxwPXtrZXk6ci5rZXkseFNjYWxlOnUsbW9kZWw6cixpbkJydXNoRHJhZzohMX0sZD17fTtyZXR1cm4gcC5kaW1lbnNpb25zPWwuZmlsdGVyKHYuaXNWaXNpYmxlKS5tYXAoKGZ1bmN0aW9uKG8sbCl7dmFyIG09ZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5zY2FsZS5saW5lYXIoKS5kb21haW4oVCh0KSkucmFuZ2UoW2UsMS1lXSl9KG8sZiksZz1kW28ubGFiZWxdO2Rbby5sYWJlbF09KGd8fDApKzE7dmFyIGI9by5sYWJlbCsoZz8iX18iK2c6IiIpLF89by5jb25zdHJhaW50cmFuZ2Usdz1fJiZfLmxlbmd0aDt3JiYhQXJyYXkuaXNBcnJheShfWzBdKSYmKF89W19dKTt2YXIgaz13P18ubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5tYXAobSl9KSk6W1stMS8wLDEvMF1dLFM9by52YWx1ZXM7Uy5sZW5ndGg+by5fbGVuZ3RoJiYoUz1TLnNsaWNlKDAsby5fbGVuZ3RoKSk7dmFyIEwsQz1vLnRpY2t2YWxzO2Z1bmN0aW9uIFAodCxlKXtyZXR1cm57dmFsOnQsdGV4dDpMW2VdfX1mdW5jdGlvbiBJKHQsZSl7cmV0dXJuIHQudmFsLWUudmFsfWlmKEFycmF5LmlzQXJyYXkoQykmJkMubGVuZ3RoKXtMPW8udGlja3RleHQsQXJyYXkuaXNBcnJheShMKSYmTC5sZW5ndGg/TC5sZW5ndGg+Qy5sZW5ndGg/TD1MLnNsaWNlKDAsQy5sZW5ndGgpOkMubGVuZ3RoPkwubGVuZ3RoJiYoQz1DLnNsaWNlKDAsTC5sZW5ndGgpKTpMPUMubWFwKGEoby50aWNrZm9ybWF0KSk7Zm9yKHZhciBPPTE7TzxDLmxlbmd0aDtPKyspaWYoQ1tPXTxDW08tMV0pe2Zvcih2YXIgej1DLm1hcChQKS5zb3J0KEkpLEQ9MDtEPEMubGVuZ3RoO0QrKylDW0RdPXpbRF0udmFsLExbRF09eltEXS50ZXh0O2JyZWFrfX1lbHNlIEM9dm9pZCAwO3JldHVybiBTPXYuY29udmVydFR5cGVkQXJyYXkoUykse2tleTpiLGxhYmVsOm8ubGFiZWwsdGlja0Zvcm1hdDpvLnRpY2tmb3JtYXQsdGlja3ZhbHM6Qyx0aWNrdGV4dDpMLG9yZGluYWw6di5pc09yZGluYWwobyksbXVsdGlzZWxlY3Q6by5tdWx0aXNlbGVjdCx4SW5kZXg6bCxjcm9zc2ZpbHRlckRpbWVuc2lvbkluZGV4OmwsdmlzaWJsZUluZGV4Om8uX2luZGV4LGhlaWdodDpzLHZhbHVlczpTLHBhZGRlZFVuaXRWYWx1ZXM6Uy5tYXAobSksdW5pdFRpY2t2YWxzOkMmJkMubWFwKG0pLHhTY2FsZTp1LHg6dShsKSxjYW52YXNYOnUobCkqYyx1bml0VG9QYWRkZWRQeDpoLGRvbWFpblNjYWxlOkEocyx5LnZlcnRpY2FsUGFkZGluZyxvLEMsTCksb3JkaW5hbFNjYWxlOk0obykscGFyZW50OnAsbW9kZWw6cixicnVzaDp4Lm1ha2VCcnVzaCh0LHcsaywoZnVuY3Rpb24oKXt0LmxpbmVQaWNrQWN0aXZlKCExKX0pLChmdW5jdGlvbigpe3ZhciBlPXA7ZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKTt2YXIgcj1FKGUpOyF0LmNvbnRleHRTaG93bigpJiZyPyhlLmNvbnRleHRMYXllciYmZS5jb250ZXh0TGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSx0LmNvbnRleHRTaG93bighMCkpOnQuY29udGV4dFNob3duKCkmJiFyJiYoZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMCwhMCksdC5jb250ZXh0U2hvd24oITEpKX0pLChmdW5jdGlvbihyKXtpZihwLmZvY3VzTGF5ZXIucmVuZGVyKHAucGFuZWxzLCEwKSxwLnBpY2tMYXllciYmcC5waWNrTGF5ZXIucmVuZGVyKHAucGFuZWxzLCEwKSx0LmxpbmVQaWNrQWN0aXZlKCEwKSxlJiZlLmZpbHRlckNoYW5nZWQpe3ZhciBuPW0uaW52ZXJ0LGE9ci5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm1hcChuKS5zb3J0KGkuc29ydGVyQXNjKX0pKS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KSk7ZS5maWx0ZXJDaGFuZ2VkKHAua2V5LG8uX2luZGV4LGEpfX0pKX19KSkscH1mdW5jdGlvbiBQKHQpe3QuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRUZXh0LCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLnN0eWxlKCJjdXJzb3IiLCJkZWZhdWx0Iil9ZnVuY3Rpb24gSSh0LGUpe3ZhciByPSJ0b3AiPT09ZT8xOi0xLG49dCpNYXRoLlBJLzE4MDtyZXR1cm57ZGlyOnIsZHg6TWF0aC5zaW4obiksZHk6TWF0aC5jb3MobiksZGVncmVlczp0fX1mdW5jdGlvbiBPKHQsZSxyKXtmb3IodmFyIG49ZS5wYW5lbHN8fChlLnBhbmVscz1bXSksaT10LmRhdGEoKSxhPTA7YTxpLmxlbmd0aC0xO2ErKyl7dmFyIG89blthXXx8KG5bYV09e30pLHM9aVthXSxsPWlbYSsxXTtvLmRpbTA9cyxvLmRpbTE9bCxvLmNhbnZhc1g9cy5jYW52YXNYLG8ucGFuZWxTaXplWD1sLmNhbnZhc1gtcy5jYW52YXNYLG8ucGFuZWxTaXplWT1lLm1vZGVsLmNhbnZhc0hlaWdodCxvLnk9MCxvLmNhbnZhc1k9MCxvLnBsb3RHbFBpeGVsUmF0aW89cn19ZnVuY3Rpb24geih0LGUpe3JldHVybiBzLnRpY2tUZXh0KHQuX2F4LGUsITEpLnRleHR9ZnVuY3Rpb24gRCh0LGUpe2lmKHQub3JkaW5hbClyZXR1cm4iIjt2YXIgcj10LmRvbWFpblNjYWxlLmRvbWFpbigpLG49cltlP3IubGVuZ3RoLTE6MF07cmV0dXJuIHoodC5tb2RlbC5kaW1lbnNpb25zW3QudmlzaWJsZUluZGV4XSxuKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5fZnVsbExheW91dCxoPW8uX3RvcHBhcGVyLHA9by5fZ2xjb250YWluZXIsXz10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sVD10Ll9mdWxsTGF5b3V0LnBhcGVyX2JnY29sb3I7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKWZvcih2YXIgcj0wO3I8dFtlXS5sZW5ndGg7cisrKWZvcih2YXIgbj10W2VdW3JdLnRyYWNlLGk9bi5kaW1lbnNpb25zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXS52YWx1ZXMsbD1pW2FdLl9heDtsJiYobC5yYW5nZT9sLnJhbmdlPWsobC5yYW5nZVswXSxsLnJhbmdlWzFdKTpsLnJhbmdlPXcobyxuLl9sZW5ndGgpLGwuZHRpY2t8fChsLmR0aWNrPS4wMSooTWF0aC5hYnMobC5yYW5nZVsxXS1sLnJhbmdlWzBdKXx8MSkpLGwudGlja2Zvcm1hdD1pW2FdLnRpY2tmb3JtYXQscy5jYWxjVGlja3MobCksbC5jbGVhblJhbmdlKCkpfX0oZSk7dmFyIEEsTSxTPShBPSEwLE09ITEse2xpbmVQaWNrQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP0E9ISF0OkF9LGNvbnRleHRTaG93bjpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD9NPSEhdDpNfX0pLFI9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBnKHQpLnRyYWNlLnZpc2libGV9KSkubWFwKEwuYmluZCgwLHIpKS5tYXAoQy5iaW5kKDAsUyxhKSk7cC5lYWNoKChmdW5jdGlvbih0LGUpe3JldHVybiBpLmV4dGVuZEZsYXQodCxSW2VdKX0pKTt2YXIgRj1wLnNlbGVjdEFsbCgiLmdsLWNhbnZhcyIpLmVhY2goKGZ1bmN0aW9uKHQpe3Qudmlld01vZGVsPVJbMF0sdC52aWV3TW9kZWwucGxvdEdsUGl4ZWxSYXRpbz1fLHQudmlld01vZGVsLnBhcGVyQ29sb3I9VCx0Lm1vZGVsPXQudmlld01vZGVsP3Qudmlld01vZGVsLm1vZGVsOm51bGx9KSksQj1udWxsO0YuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrfSkpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24odCl7aWYoUy5saW5lUGlja0FjdGl2ZSgpJiZ0LmxpbmVMYXllciYmYSYmYS5ob3Zlcil7dmFyIGU9bi5ldmVudCxyPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxvPW4ubW91c2UodGhpcykscz1vWzBdLGw9b1sxXTtpZihzPDB8fGw8MHx8cz49cnx8bD49aSlyZXR1cm47dmFyIGM9dC5saW5lTGF5ZXIucmVhZFBpeGVsKHMsaS0xLWwpLHU9MCE9PWNbM10sZj11P2NbMl0rMjU2KihjWzFdKzI1NipjWzBdKTpudWxsLGg9e3g6cyx5OmwsY2xpZW50WDplLmNsaWVudFgsY2xpZW50WTplLmNsaWVudFksZGF0YUluZGV4OnQubW9kZWwua2V5LGN1cnZlTnVtYmVyOmZ9O2YhPT1CJiYodT9hLmhvdmVyKGgpOmEudW5ob3ZlciYmYS51bmhvdmVyKGgpLEI9Zil9fSkpLEYuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5waWNrPzA6MX0pKSxoLnN0eWxlKCJiYWNrZ3JvdW5kIiwicmdiYSgyNTUsIDI1NSwgMjU1LCAwKSIpO3ZhciBOPWguc2VsZWN0QWxsKCIuIit5LmNuLnBhcmNvb3JkcykuZGF0YShSLGQpO04uZXhpdCgpLnJlbW92ZSgpLE4uZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24ucGFyY29vcmRzLCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiY3Jpc3BFZGdlcyIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKSxOLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQubW9kZWwudHJhbnNsYXRlWCx0Lm1vZGVsLnRyYW5zbGF0ZVkpfSkpO3ZhciBqPU4uc2VsZWN0QWxsKCIuIit5LmNuLnBhcmNvb3Jkc0NvbnRyb2xWaWV3KS5kYXRhKG0sZCk7ai5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5wYXJjb29yZHNDb250cm9sVmlldywhMCksai5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0Lm1vZGVsLnBhZC5sLHQubW9kZWwucGFkLnQpfSkpO3ZhciBVPWouc2VsZWN0QWxsKCIuIit5LmNuLnlBeGlzKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kaW1lbnNpb25zfSksZCk7VS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi55QXhpcywhMCksai5lYWNoKChmdW5jdGlvbih0KXtPKFUsdCxfKX0pKSxGLmVhY2goKGZ1bmN0aW9uKHQpe2lmKHQudmlld01vZGVsKXshdC5saW5lTGF5ZXJ8fGE/dC5saW5lTGF5ZXI9Yih0aGlzLHQpOnQubGluZUxheWVyLnVwZGF0ZSh0KSwodC5rZXl8fDA9PT10LmtleSkmJih0LnZpZXdNb2RlbFt0LmtleV09dC5saW5lTGF5ZXIpO3ZhciBlPSF0LmNvbnRleHR8fGE7dC5saW5lTGF5ZXIucmVuZGVyKHQudmlld01vZGVsLnBhbmVscyxlKX19KSksVS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LnhTY2FsZSh0LnhJbmRleCksMCl9KSksVS5jYWxsKG4uYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkub24oImRyYWciLChmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudDtTLmxpbmVQaWNrQWN0aXZlKCExKSx0Lng9TWF0aC5tYXgoLXkub3ZlcmRyYWcsTWF0aC5taW4odC5tb2RlbC53aWR0aCt5Lm92ZXJkcmFnLG4uZXZlbnQueCkpLHQuY2FudmFzWD10LngqdC5tb2RlbC5jYW52YXNQaXhlbFJhdGlvLFUuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54LWUueH0pKS5lYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlLnhJbmRleCksZS5jYW52YXNYPWUueCplLm1vZGVsLmNhbnZhc1BpeGVsUmF0aW99KSksTyhVLGUsXyksVS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiAwIT09TWF0aC5hYnModC54SW5kZXgtZS54SW5kZXgpfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiBjKHQueFNjYWxlKHQueEluZGV4KSwwKX0pKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLGModC54LDApKSxVLmVhY2goKGZ1bmN0aW9uKHIsbixpKXtpPT09dC5wYXJlbnQua2V5JiYoZS5kaW1lbnNpb25zW25dPXIpfSkpLGUuY29udGV4dExheWVyJiZlLmNvbnRleHRMYXllci5yZW5kZXIoZS5wYW5lbHMsITEsIUUoZSkpLGUuZm9jdXNMYXllci5yZW5kZXImJmUuZm9jdXNMYXllci5yZW5kZXIoZS5wYW5lbHMpfSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnQ7dC54PXQueFNjYWxlKHQueEluZGV4KSx0LmNhbnZhc1g9dC54KnQubW9kZWwuY2FudmFzUGl4ZWxSYXRpbyxPKFUsZSxfKSxuLnNlbGVjdCh0aGlzKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYyh0LngsMCl9KSksZS5jb250ZXh0TGF5ZXImJmUuY29udGV4dExheWVyLnJlbmRlcihlLnBhbmVscywhMSwhRShlKSksZS5mb2N1c0xheWVyJiZlLmZvY3VzTGF5ZXIucmVuZGVyKGUucGFuZWxzKSxlLnBpY2tMYXllciYmZS5waWNrTGF5ZXIucmVuZGVyKGUucGFuZWxzLCEwKSxTLmxpbmVQaWNrQWN0aXZlKCEwKSxhJiZhLmF4ZXNNb3ZlZCYmYS5heGVzTW92ZWQoZS5rZXksZS5kaW1lbnNpb25zLm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuY3Jvc3NmaWx0ZXJEaW1lbnNpb25JbmRleH0pKSl9KSkpLFUuZXhpdCgpLnJlbW92ZSgpO3ZhciBWPVUuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNPdmVybGF5cykuZGF0YShtLGQpO1YuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc092ZXJsYXlzLCEwKSxWLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzKS5yZW1vdmUoKTt2YXIgSD1WLnNlbGVjdEFsbCgiLiIreS5jbi5heGlzKS5kYXRhKG0sZCk7SC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzLCEwKSxILmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQubW9kZWwuaGVpZ2h0L3QubW9kZWwudGlja0Rpc3RhbmNlLHI9dC5kb21haW5TY2FsZSxpPXIuZG9tYWluKCk7bi5zZWxlY3QodGhpcykuY2FsbChuLnN2Zy5heGlzKCkub3JpZW50KCJsZWZ0IikudGlja1NpemUoNCkub3V0ZXJUaWNrU2l6ZSgyKS50aWNrcyhlLHQudGlja0Zvcm1hdCkudGlja1ZhbHVlcyh0Lm9yZGluYWw/aTpudWxsKS50aWNrRm9ybWF0KChmdW5jdGlvbihlKXtyZXR1cm4gdi5pc09yZGluYWwodCk/ZTp6KHQubW9kZWwuZGltZW5zaW9uc1t0LnZpc2libGVJbmRleF0sZSl9KSkuc2NhbGUocikpLGYuZm9udChILnNlbGVjdEFsbCgidGV4dCIpLHQubW9kZWwudGlja0ZvbnQpfSkpLEguc2VsZWN0QWxsKCIuZG9tYWluLCAudGljaz5saW5lIikuYXR0cigiZmlsbCIsIm5vbmUiKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwuMjUpLmF0dHIoInN0cm9rZS13aWR0aCIsIjFweCIpLEguc2VsZWN0QWxsKCJ0ZXh0Iikuc3R5bGUoInRleHQtc2hhZG93Iix1Lm1ha2VUZXh0U2hhZG93KFQpKS5zdHlsZSgiY3Vyc29yIiwiZGVmYXVsdCIpO3ZhciBxPVYuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNIZWFkaW5nKS5kYXRhKG0sZCk7cS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoeS5jbi5heGlzSGVhZGluZywhMCk7dmFyIEc9cS5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc1RpdGxlKS5kYXRhKG0sZCk7Ry5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzVGl0bGUsITApLmF0dHIoInRleHQtYW5jaG9yIiwibWlkZGxlIikuc3R5bGUoImN1cnNvciIsImV3LXJlc2l6ZSIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKSxHLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxhYmVsfSkpLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciByPW4uc2VsZWN0KHRoaXMpO2YuZm9udChyLGUubW9kZWwubGFiZWxGb250KSx1LmNvbnZlcnRUb1RzcGFucyhyLHQpfSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUkodC5tb2RlbC5sYWJlbEFuZ2xlLHQubW9kZWwubGFiZWxTaWRlKSxyPXkuYXhpc1RpdGxlT2Zmc2V0O3JldHVybihlLmRpcj4wPyIiOmMoMCwyKnIrdC5tb2RlbC5oZWlnaHQpKStsKGUuZGVncmVlcykrYygtciplLmR4LC1yKmUuZHkpfSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7dmFyIGU9SSh0Lm1vZGVsLmxhYmVsQW5nbGUsdC5tb2RlbC5sYWJlbFNpZGUpO3JldHVybiAyKk1hdGguYWJzKGUuZHgpPk1hdGguYWJzKGUuZHkpP2UuZGlyKmUuZHg8MD8ic3RhcnQiOiJlbmQiOiJtaWRkbGUifSkpO3ZhciBZPVYuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnQpLmRhdGEobSxkKTtZLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnQsITApO3ZhciBXPVkuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRUb3ApLmRhdGEobSxkKTtXLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRUb3AsITApLFcuYXR0cigidHJhbnNmb3JtIixjKDAsLXkuYXhpc0V4dGVudE9mZnNldCkpO3ZhciBYPVcuc2VsZWN0QWxsKCIuIit5LmNuLmF4aXNFeHRlbnRUb3BUZXh0KS5kYXRhKG0sZCk7WC5lbnRlcigpLmFwcGVuZCgidGV4dCIpLmNsYXNzZWQoeS5jbi5heGlzRXh0ZW50VG9wVGV4dCwhMCkuY2FsbChQKSxYLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiBEKHQsITApfSkpLmVhY2goKGZ1bmN0aW9uKHQpe2YuZm9udChuLnNlbGVjdCh0aGlzKSx0Lm1vZGVsLnJhbmdlRm9udCl9KSk7dmFyIFo9WS5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc0V4dGVudEJvdHRvbSkuZGF0YShtLGQpO1ouZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKHkuY24uYXhpc0V4dGVudEJvdHRvbSwhMCksWi5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gYygwLHQubW9kZWwuaGVpZ2h0K3kuYXhpc0V4dGVudE9mZnNldCl9KSk7dmFyIEo9Wi5zZWxlY3RBbGwoIi4iK3kuY24uYXhpc0V4dGVudEJvdHRvbVRleHQpLmRhdGEobSxkKTtKLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZCh5LmNuLmF4aXNFeHRlbnRCb3R0b21UZXh0LCEwKS5hdHRyKCJkeSIsIjAuNzVlbSIpLmNhbGwoUCksSi50ZXh0KChmdW5jdGlvbih0KXtyZXR1cm4gRCh0LCExKX0pKS5lYWNoKChmdW5jdGlvbih0KXtmLmZvbnQobi5zZWxlY3QodGhpcyksdC5tb2RlbC5yYW5nZUZvbnQpfSkpLHguZW5zdXJlQXhpc0JydXNoKFYsVCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vYXhpc2JydXNoIjoxMTU0LCIuL2NvbnN0YW50cyI6MTE1NywiLi9oZWxwZXJzIjoxMTU5LCIuL2xpbmVzIjoxMTYxLCJAcGxvdGx5L2QzIjo1OCwiY29sb3ItcmdiYSI6MTI4fV0sMTE2NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL3BhcmNvb3JkcyIpLGk9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLGE9dCgiLi9oZWxwZXJzIikuaXNWaXNpYmxlO2Z1bmN0aW9uIG8odCxlLHIpe3ZhciBuPWUuaW5kZXhPZihyKSxpPXQuaW5kZXhPZihuKTtyZXR1cm4tMT09PWkmJihpKz1lLmxlbmd0aCksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0O2lmKGkodCkpe3ZhciBzPXt9LGw9e30sYz17fSx1PXt9LGY9ci5fc2l6ZTtlLmZvckVhY2goKGZ1bmN0aW9uKGUscil7dmFyIG49ZVswXS50cmFjZTtjW3JdPW4uaW5kZXg7dmFyIGk9dVtyXT1uLl9mdWxsSW5wdXQuaW5kZXg7c1tyXT10LmRhdGFbaV0uZGltZW5zaW9ucyxsW3JdPXQuZGF0YVtpXS5kaW1lbnNpb25zLnNsaWNlKCl9KSk7bih0LGUse3dpZHRoOmYudyxoZWlnaHQ6Zi5oLG1hcmdpbjp7dDpmLnQscjpmLnIsYjpmLmIsbDpmLmx9fSx7ZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihlLG4saSl7dmFyIGE9bFtlXVtuXSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpfSkpLHM9ImRpbWVuc2lvbnNbIituKyJdLmNvbnN0cmFpbnRyYW5nZSIsZj1yLl90cmFjZVByZUdVSVt0Ll9mdWxsRGF0YVtjW2VdXS5fZnVsbElucHV0LnVpZF07aWYodm9pZCAwPT09ZltzXSl7dmFyIGg9YS5jb25zdHJhaW50cmFuZ2U7ZltzXT1ofHxudWxsfXZhciBwPXQuX2Z1bGxEYXRhW2NbZV1dLmRpbWVuc2lvbnNbbl07by5sZW5ndGg/KDE9PT1vLmxlbmd0aCYmKG89b1swXSksYS5jb25zdHJhaW50cmFuZ2U9byxwLmNvbnN0cmFpbnRyYW5nZT1vLnNsaWNlKCksbz1bb10pOihkZWxldGUgYS5jb25zdHJhaW50cmFuZ2UsZGVsZXRlIHAuY29uc3RyYWludHJhbmdlLG89bnVsbCk7dmFyIGQ9e307ZFtzXT1vLHQuZW1pdCgicGxvdGx5X3Jlc3R5bGUiLFtkLFt1W2VdXV0pfSxob3ZlcjpmdW5jdGlvbihlKXt0LmVtaXQoInBsb3RseV9ob3ZlciIsZSl9LHVuaG92ZXI6ZnVuY3Rpb24oZSl7dC5lbWl0KCJwbG90bHlfdW5ob3ZlciIsZSl9LGF4ZXNNb3ZlZDpmdW5jdGlvbihlLHIpe3ZhciBuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIG8odCxlLHIpLW8odCxlLG4pfX0ocixsW2VdLmZpbHRlcihhKSk7c1tlXS5zb3J0KG4pLGxbZV0uZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hYSh0KX0pKS5zb3J0KChmdW5jdGlvbih0KXtyZXR1cm4gbFtlXS5pbmRleE9mKHQpfSkpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3NbZV0uc3BsaWNlKHNbZV0uaW5kZXhPZih0KSwxKSxzW2VdLnNwbGljZShsW2VdLmluZGV4T2YodCksMCx0KX0pKSx0LmVtaXQoInBsb3RseV9yZXN0eWxlIixbe2RpbWVuc2lvbnM6W3NbZV1dfSxbdVtlXV1dKX19KX19fSx7Ii4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc4OSwiLi9oZWxwZXJzIjoxMTU5LCIuL3BhcmNvb3JkcyI6MTE2M31dLDExNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxhPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT1hKHtlZGl0VHlwZToicGxvdCIsYXJyYXlPazohMCxjb2xvckVkaXRUeXBlOiJwbG90In0pO2UuZXhwb3J0cz17bGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxhYmVsMDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxkbGFiZWw6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoxLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpvLmRlZmF1bHRMaW5lLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRleHQ6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJwbG90In0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxzY2FsZWdyb3VwOnt2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSx0ZXh0aW5mbzp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJpbmZvOmMoe30sbi5ob3ZlcmluZm8se2ZsYWdzOlsibGFiZWwiLCJ0ZXh0IiwidmFsdWUiLCJwZXJjZW50IiwibmFtZSJdfSksaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHR0ZW1wbGF0ZTpsKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGFiZWwiLCJjb2xvciIsInZhbHVlIiwicGVyY2VudCIsInRleHQiXX0pLHRleHRwb3NpdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiaW5zaWRlIiwib3V0c2lkZSIsImF1dG8iLCJub25lIl0sZGZsdDoiYXV0byIsYXJyYXlPazohMCxlZGl0VHlwZToicGxvdCJ9LHRleHRmb250OmMoe30sdSx7fSksaW5zaWRldGV4dG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJob3Jpem9udGFsIiwicmFkaWFsIiwidGFuZ2VudGlhbCIsImF1dG8iXSxkZmx0OiJhdXRvIixlZGl0VHlwZToicGxvdCJ9LGluc2lkZXRleHRmb250OmMoe30sdSx7fSksb3V0c2lkZXRleHRmb250OmMoe30sdSx7fSksYXV0b21hcmdpbjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToicGxvdCJ9LHRpdGxlOnt0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6InBsb3QifSxmb250OmMoe30sdSx7fSkscG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToicGxvdCJ9LGVkaXRUeXBlOiJwbG90In0sZG9tYWluOmkoe25hbWU6InBpZSIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSksaG9sZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSxzb3J0Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZGlyZWN0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJjbG9ja3dpc2UiLCJjb3VudGVyY2xvY2t3aXNlIl0sZGZsdDoiY291bnRlcmNsb2Nrd2lzZSIsZWRpdFR5cGU6ImNhbGMifSxyb3RhdGlvbjp7dmFsVHlwZToibnVtYmVyIixtaW46LTM2MCxtYXg6MzYwLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHB1bGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7dGl0bGU6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiIixlZGl0VHlwZToiY2FsYyJ9LHRpdGxlZm9udDpjKHt9LHUse30pLHRpdGxlcG9zaXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInRvcCBsZWZ0IiwidG9wIGNlbnRlciIsInRvcCByaWdodCIsIm1pZGRsZSBjZW50ZXIiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxlZGl0VHlwZToiY2FsYyJ9fX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIjo2MzgsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTYsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OX1dLDExNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvcGxvdHMiKTtyLm5hbWU9InBpZSIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTE2NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgidGlueWNvbG9yMiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89e307ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXtyZXR1cm4hIWUmJighIShlPWkoZSkpLmlzVmFsaWQoKSYmKGU9YS5hZGRPcGFjaXR5KGUsZS5nZXRBbHBoYSgpKSx0W3JdfHwodFtyXT1lKSxlKSl9fWZ1bmN0aW9uIGwodCxlKXt2YXIgcixuPUpTT04uc3RyaW5naWZ5KHQpLGE9ZVtuXTtpZighYSl7Zm9yKGE9dC5zbGljZSgpLHI9MDtyPHQubGVuZ3RoO3IrKylhLnB1c2goaSh0W3JdKS5saWdodGVuKDIwKS50b0hleFN0cmluZygpKTtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWEucHVzaChpKHRbcl0pLmRhcmtlbigyMCkudG9IZXhTdHJpbmcoKSk7ZVtuXT1hfXJldHVybiBhfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe3ZhciByLGksYT1bXSxvPXQuX2Z1bGxMYXlvdXQsbD1vLmhpZGRlbmxhYmVsc3x8W10sYz1lLmxhYmVscyx1PWUubWFya2VyLmNvbG9yc3x8W10sZj1lLnZhbHVlcyxoPWUuX2xlbmd0aCxwPWUuX2hhc1ZhbHVlcyYmaDtpZihlLmRsYWJlbClmb3IoYz1uZXcgQXJyYXkoaCkscj0wO3I8aDtyKyspY1tyXT1TdHJpbmcoZS5sYWJlbDArciplLmRsYWJlbCk7dmFyIGQ9e30sbT1zKG9bIl8iK2UudHlwZSsiY29sb3JtYXAiXSksZz0wLHY9ITE7Zm9yKHI9MDtyPGg7cisrKXt2YXIgeSx4LGI7aWYocCl7aWYoeT1mW3JdLCFuKHkpKWNvbnRpbnVlO2lmKCh5PSt5KTwwKWNvbnRpbnVlfWVsc2UgeT0xO3ZvaWQgMCE9PSh4PWNbcl0pJiYiIiE9PXh8fCh4PXIpO3ZhciBfPWRbeD1TdHJpbmcoeCldO3ZvaWQgMD09PV8/KGRbeF09YS5sZW5ndGgsKGI9LTEhPT1sLmluZGV4T2YoeCkpfHwoZys9eSksYS5wdXNoKHt2OnksbGFiZWw6eCxjb2xvcjptKHVbcl0seCksaTpyLHB0czpbcl0saGlkZGVuOmJ9KSk6KHY9ITAsKGk9YVtfXSkudis9eSxpLnB0cy5wdXNoKHIpLGkuaGlkZGVufHwoZys9eSksITE9PT1pLmNvbG9yJiZ1W3JdJiYoaS5jb2xvcj1tKHVbcl0seCkpKX1yZXR1cm4oImZ1bm5lbGFyZWEiPT09ZS50eXBlP3Y6ZS5zb3J0KSYmYS5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnYtdC52fSkpLGFbMF0mJihhWzBdLnZUb3RhbD1nKSxhfSxjcm9zc1RyYWNlQ2FsYzpmdW5jdGlvbih0LGUpe3ZhciByPShlfHx7fSkudHlwZTtyfHwocj0icGllIik7dmFyIG49dC5fZnVsbExheW91dCxpPXQuY2FsY2RhdGEsYT1uW3IrImNvbG9yd2F5Il0scz1uWyJfIityKyJjb2xvcm1hcCJdO25bImV4dGVuZCIrcisiY29sb3JzIl0mJihhPWwoYSxvKSk7Zm9yKHZhciBjPTAsdT0wO3U8aS5sZW5ndGg7dSsrKXt2YXIgZj1pW3VdO2lmKGZbMF0udHJhY2UudHlwZT09PXIpZm9yKHZhciBoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBwPWZbaF07ITE9PT1wLmNvbG9yJiYoc1twLmxhYmVsXT9wLmNvbG9yPXNbcC5sYWJlbF06KHNbcC5sYWJlbF09cC5jb2xvcj1hW2MlYS5sZW5ndGhdLGMrKykpfX19LG1ha2VQdWxsQ29sb3JGbjpzLGdlbmVyYXRlRXh0ZW5kZWRDb2xvcnM6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCJmYXN0LWlzbnVtZXJpYyI6MjQyLHRpbnljb2xvcjI6NTcyfV0sMTE2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmRlZmF1bHRzLHM9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dDtmdW5jdGlvbiBsKHQsZSl7dmFyIHI9QXJyYXkuaXNBcnJheSh0KSxhPWkuaXNBcnJheU9yVHlwZWRBcnJheShlKSxvPU1hdGgubWluKHI/dC5sZW5ndGg6MS8wLGE/ZS5sZW5ndGg6MS8wKTtpZihpc0Zpbml0ZShvKXx8KG89MCksbyYmYSl7Zm9yKHZhciBzLGw9MDtsPG87bCsrKXt2YXIgYz1lW2xdO2lmKG4oYykmJmM+MCl7cz0hMDticmVha319c3x8KG89MCl9cmV0dXJue2hhc0xhYmVsczpyLGhhc1ZhbHVlczphLGxlbjpvfX1lLmV4cG9ydHM9e2hhbmRsZUxhYmVsc0FuZFZhbHVlczpsLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLG4pe2Z1bmN0aW9uIGMocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLGEscixuKX12YXIgdT1sKGMoImxhYmVscyIpLGMoInZhbHVlcyIpKSxmPXUubGVuO2lmKGUuX2hhc0xhYmVscz11Lmhhc0xhYmVscyxlLl9oYXNWYWx1ZXM9dS5oYXNWYWx1ZXMsIWUuX2hhc0xhYmVscyYmZS5faGFzVmFsdWVzJiYoYygibGFiZWwwIiksYygiZGxhYmVsIikpLGYpe2UuX2xlbmd0aD1mLGMoIm1hcmtlci5saW5lLndpZHRoIikmJmMoIm1hcmtlci5saW5lLmNvbG9yIiksYygibWFya2VyLmNvbG9ycyIpLGMoInNjYWxlZ3JvdXAiKTt2YXIgaCxwPWMoInRleHQiKSxkPWMoInRleHR0ZW1wbGF0ZSIpO2lmKGR8fChoPWMoInRleHRpbmZvIixBcnJheS5pc0FycmF5KHApPyJ0ZXh0K3BlcmNlbnQiOiJwZXJjZW50IikpLGMoImhvdmVydGV4dCIpLGMoImhvdmVydGVtcGxhdGUiKSxkfHxoJiYibm9uZSIhPT1oKXt2YXIgbT1jKCJ0ZXh0cG9zaXRpb24iKTtzKHQsZSxuLGMsbSx7bW9kdWxlSGFzU2VsZWN0ZWQ6ITEsbW9kdWxlSGFzVW5zZWxlY3RlZDohMSxtb2R1bGVIYXNDb25zdHJhaW46ITEsbW9kdWxlSGFzQ2xpcG9uYXhpczohMSxtb2R1bGVIYXNUZXh0YW5nbGU6ITEsbW9kdWxlSGFzSW5zaWRlYW5jaG9yOiExfSksKEFycmF5LmlzQXJyYXkobSl8fCJhdXRvIj09PW18fCJvdXRzaWRlIj09PW0pJiZjKCJhdXRvbWFyZ2luIiksKCJpbnNpZGUiPT09bXx8ImF1dG8iPT09bXx8QXJyYXkuaXNBcnJheShtKSkmJmMoImluc2lkZXRleHRvcmllbnRhdGlvbiIpfW8oZSxuLGMpO3ZhciBnPWMoImhvbGUiKTtpZihjKCJ0aXRsZS50ZXh0Iikpe3ZhciB2PWMoInRpdGxlLnBvc2l0aW9uIixnPyJtaWRkbGUgY2VudGVyIjoidG9wIGNlbnRlciIpO2d8fCJtaWRkbGUgY2VudGVyIiE9PXZ8fChlLnRpdGxlLnBvc2l0aW9uPSJ0b3AgY2VudGVyIiksaS5jb2VyY2VGb250KGMsInRpdGxlLmZvbnQiLG4uZm9udCl9Yygic29ydCIpLGMoImRpcmVjdGlvbiIpLGMoInJvdGF0aW9uIiksYygicHVsbCIpfWVsc2UgZS52aXNpYmxlPSExfX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi9hdHRyaWJ1dGVzIjoxMTY1LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTE2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheU11bHRpUG9pbnRWYWx1ZXM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e2N1cnZlTnVtYmVyOmUuaW5kZXgscG9pbnROdW1iZXJzOnQucHRzLGRhdGE6ZS5faW5wdXQsZnVsbERhdGE6ZSxsYWJlbDp0LmxhYmVsLGNvbG9yOnQuY29sb3IsdmFsdWU6dC52LHBlcmNlbnQ6dC5wZXJjZW50LHRleHQ6dC50ZXh0LGJib3g6dC5iYm94LHY6dC52fTtyZXR1cm4gMT09PXQucHRzLmxlbmd0aCYmKHIucG9pbnROdW1iZXI9ci5pPXQucHRzWzBdKSxuKHIsZSx0LnB0cyksImZ1bm5lbGFyZWEiPT09ZS50eXBlJiYoZGVsZXRlIHIudixkZWxldGUgci5pKSxyfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NX1dLDExNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZnVuY3Rpb24gaSh0KXtyZXR1cm4tMSE9PXQuaW5kZXhPZigiZSIpP3QucmVwbGFjZSgvWy5dPzArZS8sImUiKTotMSE9PXQuaW5kZXhPZigiLiIpP3QucmVwbGFjZSgvWy5dPzArJC8sIiIpOnR9ci5mb3JtYXRQaWVQZXJjZW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9aSgoMTAwKnQpLnRvUHJlY2lzaW9uKDMpKTtyZXR1cm4gbi5udW1TZXBhcmF0ZShyLGUpKyIlIn0sci5mb3JtYXRQaWVWYWx1ZT1mdW5jdGlvbih0LGUpe3ZhciByPWkodC50b1ByZWNpc2lvbigxMCkpO3JldHVybiBuLm51bVNlcGFyYXRlKHIsZSl9LHIuZ2V0Rmlyc3RGaWxsZWQ9ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj10W2Vbcl1dO2lmKG58fDA9PT1ufHwiIj09PW4pcmV0dXJuIG59fSxyLmNhc3RPcHRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT9yLmdldEZpcnN0RmlsbGVkKHQsZSk6dHx8dm9pZCAwfSxyLmdldFJvdGF0aW9uQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuKCJhdXRvIj09PXQ/MDp0KSpNYXRoLlBJLzE4MH19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMTcxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uZTp0KCIuL3N0eWxlX29uZSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJwaWUiLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbInBpZS1saWtlIiwicGllIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4vYXR0cmlidXRlcyI6MTE2NSwiLi9iYXNlX3Bsb3QiOjExNjYsIi4vY2FsYyI6MTE2NywiLi9kZWZhdWx0cyI6MTE2OCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjExNzMsIi4vcGxvdCI6MTE3NCwiLi9zdHlsZSI6MTE3NSwiLi9zdHlsZV9vbmUiOjExNzZ9XSwxMTcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aGlkZGVubGFiZWxzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHBpZWNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kcGllY29sb3JzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTE3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9cigiaGlkZGVubGFiZWxzIikscigicGllY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHBpZWNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTE3Mn1dLDExNzQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcGxvdHMvcGxvdHMiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGw9dCgiLi4vLi4vbGliIiksYz1sLnN0clNjYWxlLHU9bC5zdHJUcmFuc2xhdGUsZj10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKSxoPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKSxwPWgucmVjb3JkTWluVGV4dFNpemUsZD1oLmNsZWFyTWluVGV4dFNpemUsbT10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxnPXQoIi4vaGVscGVycyIpLHY9dCgiLi9ldmVudF9kYXRhIikseT10KCIuLi8uLi9saWIiKS5pc1ZhbGlkVGV4dFZhbHVlO2Z1bmN0aW9uIHgodCxlLHIpe3ZhciBpPXJbMF0sbz1pLmN4LHM9aS5jeSxjPWkudHJhY2UsdT0iZnVubmVsYXJlYSI9PT1jLnR5cGU7Il9oYXNIb3ZlckxhYmVsImluIGN8fChjLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gY3x8KGMuX2hhc0hvdmVyRXZlbnQ9ITEpLHQub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKHQpe3ZhciByPWUuX2Z1bGxMYXlvdXQsZj1lLl9mdWxsRGF0YVtjLmluZGV4XTtpZighZS5fZHJhZ2dpbmcmJiExIT09ci5ob3Zlcm1vZGUpe3ZhciBoPWYuaG92ZXJpbmZvO2lmKEFycmF5LmlzQXJyYXkoaCkmJihoPWEuY2FzdEhvdmVyaW5mbyh7aG92ZXJpbmZvOltnLmNhc3RPcHRpb24oaCx0LnB0cyldLF9tb2R1bGU6Yy5fbW9kdWxlfSxyLDApKSwiYWxsIj09PWgmJihoPSJsYWJlbCt0ZXh0K3ZhbHVlK3BlcmNlbnQrbmFtZSIpLGYuaG92ZXJ0ZW1wbGF0ZXx8Im5vbmUiIT09aCYmInNraXAiIT09aCYmaCl7dmFyIHA9dC5ySW5zY3JpYmVkfHwwLGQ9byt0LnB4bWlkWzBdKigxLXApLG09cyt0LnB4bWlkWzFdKigxLXApLHk9ci5zZXBhcmF0b3JzLHg9W107aWYoaCYmLTEhPT1oLmluZGV4T2YoImxhYmVsIikmJngucHVzaCh0LmxhYmVsKSx0LnRleHQ9Zy5jYXN0T3B0aW9uKGYuaG92ZXJ0ZXh0fHxmLnRleHQsdC5wdHMpLGgmJi0xIT09aC5pbmRleE9mKCJ0ZXh0Iikpe3ZhciBiPXQudGV4dDtsLmlzVmFsaWRUZXh0VmFsdWUoYikmJngucHVzaChiKX10LnZhbHVlPXQudix0LnZhbHVlTGFiZWw9Zy5mb3JtYXRQaWVWYWx1ZSh0LnYseSksaCYmLTEhPT1oLmluZGV4T2YoInZhbHVlIikmJngucHVzaCh0LnZhbHVlTGFiZWwpLHQucGVyY2VudD10LnYvaS52VG90YWwsdC5wZXJjZW50TGFiZWw9Zy5mb3JtYXRQaWVQZXJjZW50KHQucGVyY2VudCx5KSxoJiYtMSE9PWguaW5kZXhPZigicGVyY2VudCIpJiZ4LnB1c2godC5wZXJjZW50TGFiZWwpO3ZhciBfPWYuaG92ZXJsYWJlbCx3PV8uZm9udCxUPVtdO2EubG9uZUhvdmVyKHt0cmFjZTpjLHgwOmQtcCppLnIseDE6ZCtwKmkucix5Om0sX3gwOnU/byt0LlRMWzBdOmQtcCppLnIsX3gxOnU/byt0LlRSWzBdOmQrcCppLnIsX3kwOnU/cyt0LlRMWzFdOm0tcCppLnIsX3kxOnU/cyt0LkJMWzFdOm0rcCppLnIsdGV4dDp4LmpvaW4oIjxicj4iKSxuYW1lOmYuaG92ZXJ0ZW1wbGF0ZXx8LTEhPT1oLmluZGV4T2YoIm5hbWUiKT9mLm5hbWU6dm9pZCAwLGlkZWFsQWxpZ246dC5weG1pZFswXTwwPyJsZWZ0IjoicmlnaHQiLGNvbG9yOmcuY2FzdE9wdGlvbihfLmJnY29sb3IsdC5wdHMpfHx0LmNvbG9yLGJvcmRlckNvbG9yOmcuY2FzdE9wdGlvbihfLmJvcmRlcmNvbG9yLHQucHRzKSxmb250RmFtaWx5OmcuY2FzdE9wdGlvbih3LmZhbWlseSx0LnB0cyksZm9udFNpemU6Zy5jYXN0T3B0aW9uKHcuc2l6ZSx0LnB0cyksZm9udENvbG9yOmcuY2FzdE9wdGlvbih3LmNvbG9yLHQucHRzKSxuYW1lTGVuZ3RoOmcuY2FzdE9wdGlvbihfLm5hbWVsZW5ndGgsdC5wdHMpLHRleHRBbGlnbjpnLmNhc3RPcHRpb24oXy5hbGlnbix0LnB0cyksaG92ZXJ0ZW1wbGF0ZTpnLmNhc3RPcHRpb24oZi5ob3ZlcnRlbXBsYXRlLHQucHRzKSxob3ZlcnRlbXBsYXRlTGFiZWxzOnQsZXZlbnREYXRhOlt2KHQsZildfSx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDplLGluT3V0X2Jib3g6VH0pLHQuYmJveD1UWzBdLGMuX2hhc0hvdmVyTGFiZWw9ITB9Yy5faGFzSG92ZXJFdmVudD0hMCxlLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpbdih0LGYpXSxldmVudDpuLmV2ZW50fSl9fSkpLHQub24oIm1vdXNlb3V0IiwoZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW2MuaW5kZXhdLG89bi5zZWxlY3QodGhpcykuZGF0dW0oKTtjLl9oYXNIb3ZlckV2ZW50JiYodC5vcmlnaW5hbEV2ZW50PW4uZXZlbnQsZS5lbWl0KCJwbG90bHlfdW5ob3ZlciIse3BvaW50czpbdihvLGkpXSxldmVudDpuLmV2ZW50fSksYy5faGFzSG92ZXJFdmVudD0hMSksYy5faGFzSG92ZXJMYWJlbCYmKGEubG9uZVVuaG92ZXIoci5faG92ZXJsYXllci5ub2RlKCkpLGMuX2hhc0hvdmVyTGFiZWw9ITEpfSkpLHQub24oImNsaWNrIiwoZnVuY3Rpb24odCl7dmFyIHI9ZS5fZnVsbExheW91dCxpPWUuX2Z1bGxEYXRhW2MuaW5kZXhdO2UuX2RyYWdnaW5nfHwhMT09PXIuaG92ZXJtb2RlfHwoZS5faG92ZXJkYXRhPVt2KHQsaSldLGEuY2xpY2soZSxuLmV2ZW50KSl9KSl9ZnVuY3Rpb24gYih0LGUscil7dmFyIG49Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuY29sb3IsZS5wdHMpOyFuJiZ0Ll9pbnB1dC50ZXh0Zm9udCYmKG49Zy5jYXN0T3B0aW9uKHQuX2lucHV0LnRleHRmb250LmNvbG9yLGUucHRzKSk7dmFyIGk9Zy5jYXN0T3B0aW9uKHQuaW5zaWRldGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuZmFtaWx5LGUucHRzKXx8ci5mYW1pbHksYT1nLmNhc3RPcHRpb24odC5pbnNpZGV0ZXh0Zm9udC5zaXplLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuc2l6ZSxlLnB0cyl8fHIuc2l6ZTtyZXR1cm57Y29sb3I6bnx8by5jb250cmFzdChlLmNvbG9yKSxmYW1pbHk6aSxzaXplOmF9fWZ1bmN0aW9uIF8odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aDtpKyspaWYoKG49KHI9dFtpXVswXSkudHJhY2UpLnRpdGxlLnRleHQpe3ZhciBhPW4udGl0bGUudGV4dDtuLl9tZXRhJiYoYT1sLnRlbXBsYXRlU3RyaW5nKGEsbi5fbWV0YSkpO3ZhciBvPXMudGVzdGVyLmFwcGVuZCgidGV4dCIpLmF0dHIoImRhdGEtbm90ZXgiLDEpLnRleHQoYSkuY2FsbChzLmZvbnQsbi50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLGUpLGM9cy5iQm94KG8ubm9kZSgpLCEwKTtyLnRpdGxlQm94PXt3aWR0aDpjLndpZHRoLGhlaWdodDpjLmhlaWdodH0sby5yZW1vdmUoKX19ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49ci5yfHxlLnJweDEsaT1lLnJJbnNjcmliZWQ7aWYoZS5zdGFydGFuZ2xlPT09ZS5zdG9wYW5nbGUpcmV0dXJue3JDZW50ZXI6MS1pLHNjYWxlOjAscm90YXRlOjAsdGV4dFBvc0FuZ2xlOjB9O3ZhciBhLG89ZS5yaW5nLHM9MT09PW8mJk1hdGguYWJzKGUuc3RhcnRhbmdsZS1lLnN0b3BhbmdsZSk9PT0yKk1hdGguUEksbD1lLmhhbGZhbmdsZSxjPWUubWlkYW5nbGUsdT1yLnRyYWNlLmluc2lkZXRleHRvcmllbnRhdGlvbixmPSJob3Jpem9udGFsIj09PXUsaD0idGFuZ2VudGlhbCI9PT11LHA9InJhZGlhbCI9PT11LGQ9ImF1dG8iPT09dSxtPVtdO2lmKCFkKXt2YXIgZyx2PWZ1bmN0aW9uKHIsaSl7aWYoZnVuY3Rpb24odCxlKXt2YXIgcj10LnN0YXJ0YW5nbGUsbj10LnN0b3BhbmdsZTtyZXR1cm4gcj5lJiZlPm58fHI8ZSYmZTxufShlLHIpKXt2YXIgcz1NYXRoLmFicyhyLWUuc3RhcnRhbmdsZSksbD1NYXRoLmFicyhyLWUuc3RvcGFuZ2xlKSxjPXM8bD9zOmw7KGE9InRhbiI9PT1pP2sodCxuLG8sYywwKTpUKHQsbixvLGMsTWF0aC5QSS8yKSkudGV4dFBvc0FuZ2xlPXIsbS5wdXNoKGEpfX07aWYoZnx8aCl7Zm9yKGc9NDtnPj0tNDtnLT0yKXYoTWF0aC5QSSpnLCJ0YW4iKTtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKzEpLCJ0YW4iKX1pZihmfHxwKXtmb3IoZz00O2c+PS00O2ctPTIpdihNYXRoLlBJKihnKzEuNSksInJhZCIpO2ZvcihnPTQ7Zz49LTQ7Zy09Mil2KE1hdGguUEkqKGcrLjUpLCJyYWQiKX19aWYoc3x8ZHx8Zil7dmFyIHk9TWF0aC5zcXJ0KHQud2lkdGgqdC53aWR0aCt0LmhlaWdodCp0LmhlaWdodCk7aWYoKGE9e3NjYWxlOmkqbioyL3ksckNlbnRlcjoxLWkscm90YXRlOjB9KS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixhLnNjYWxlPj0xKXJldHVybiBhO20ucHVzaChhKX0oZHx8cCkmJigoYT1UKHQsbixvLGwsYykpLnRleHRQb3NBbmdsZT0oZS5zdGFydGFuZ2xlK2Uuc3RvcGFuZ2xlKS8yLG0ucHVzaChhKSksKGR8fGgpJiYoKGE9ayh0LG4sbyxsLGMpKS50ZXh0UG9zQW5nbGU9KGUuc3RhcnRhbmdsZStlLnN0b3BhbmdsZSkvMixtLnB1c2goYSkpO2Zvcih2YXIgeD0wLGI9MCxfPTA7XzxtLmxlbmd0aDtfKyspe3ZhciB3PW1bX10uc2NhbGU7aWYoYjx3JiYoYj13LHg9XyksIWQmJmI+PTEpYnJlYWt9cmV0dXJuIG1beF19ZnVuY3Rpb24gVCh0LGUscixuLGkpe2U9TWF0aC5tYXgoMCxlLTIqbSk7dmFyIGE9dC53aWR0aC90LmhlaWdodCxvPVMoYSxuLGUscik7cmV0dXJue3NjYWxlOjIqby90LmhlaWdodCxyQ2VudGVyOkEoYSxvL2UpLHJvdGF0ZTpNKGkpfX1mdW5jdGlvbiBrKHQsZSxyLG4saSl7ZT1NYXRoLm1heCgwLGUtMiptKTt2YXIgYT10LmhlaWdodC90LndpZHRoLG89UyhhLG4sZSxyKTtyZXR1cm57c2NhbGU6MipvL3Qud2lkdGgsckNlbnRlcjpBKGEsby9lKSxyb3RhdGU6TShpK01hdGguUEkvMil9fWZ1bmN0aW9uIEEodCxlKXtyZXR1cm4gTWF0aC5jb3MoZSktdCplfWZ1bmN0aW9uIE0odCl7cmV0dXJuKDE4MC9NYXRoLlBJKnQrNzIwKSUxODAtOTB9ZnVuY3Rpb24gUyh0LGUscixuKXt2YXIgaT10KzEvKDIqTWF0aC50YW4oZSkpO3JldHVybiByKk1hdGgubWluKDEvKE1hdGguc3FydChpKmkrLjUpK2kpLG4vKE1hdGguc3FydCh0KnQrbi8yKSt0KSl9ZnVuY3Rpb24gRSh0LGUpe3JldHVybiB0LnYhPT1lLnZUb3RhbHx8ZS50cmFjZS5ob2xlP01hdGgubWluKDEvKDErMS9NYXRoLnNpbih0LmhhbGZhbmdsZSkpLHQucmluZy8yKToxfWZ1bmN0aW9uIEwodCxlKXt2YXIgcj1lLnB4bWlkWzBdLG49ZS5weG1pZFsxXSxpPXQud2lkdGgvMixhPXQuaGVpZ2h0LzI7cmV0dXJuIHI8MCYmKGkqPS0xKSxuPDAmJihhKj0tMSkse3NjYWxlOjEsckNlbnRlcjoxLHJvdGF0ZTowLHg6aStNYXRoLmFicyhhKSooaT4wPzE6LTEpLzIseTphLygxK3Iqci8obipuKSksb3V0c2lkZTohMH19ZnVuY3Rpb24gQyh0LGUpe3ZhciByLG4saSxhPXQudHJhY2Usbz17eDp0LmN4LHk6dC5jeX0scz17dHg6MCx0eTowfTtzLnR5Kz1hLnRpdGxlLmZvbnQuc2l6ZSxpPUkoYSksLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPyhvLnktPSgxK2kpKnQucixzLnR5LT10LnRpdGxlQm94LmhlaWdodCk6LTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoby55Kz0oMStpKSp0LnIpO3ZhciBsLGMsdT0obD10LnIsYz10LnRyYWNlLmFzcGVjdHJhdGlvLGwvKHZvaWQgMD09PWM/MTpjKSksZj1lLncqKGEuZG9tYWluLnhbMV0tYS5kb21haW4ueFswXSkvMjtyZXR1cm4tMSE9PWEudGl0bGUucG9zaXRpb24uaW5kZXhPZigibGVmdCIpPyhmKz11LG8ueC09KDEraSkqdSxzLnR4Kz10LnRpdGxlQm94LndpZHRoLzIpOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJjZW50ZXIiKT9mKj0yOi0xIT09YS50aXRsZS5wb3NpdGlvbi5pbmRleE9mKCJyaWdodCIpJiYoZis9dSxvLngrPSgxK2kpKnUscy50eC09dC50aXRsZUJveC53aWR0aC8yKSxyPWYvdC50aXRsZUJveC53aWR0aCxuPVAodCxlKS90LnRpdGxlQm94LmhlaWdodCx7eDpvLngseTpvLnksc2NhbGU6TWF0aC5taW4ocixuKSx0eDpzLnR4LHR5OnMudHl9fWZ1bmN0aW9uIFAodCxlKXt2YXIgcj10LnRyYWNlLG49ZS5oKihyLmRvbWFpbi55WzFdLXIuZG9tYWluLnlbMF0pO3JldHVybiBNYXRoLm1pbih0LnRpdGxlQm94LmhlaWdodCxuLzIpfWZ1bmN0aW9uIEkodCl7dmFyIGUscj10LnB1bGw7aWYoIXIpcmV0dXJuIDA7aWYoQXJyYXkuaXNBcnJheShyKSlmb3Iocj0wLGU9MDtlPHQucHVsbC5sZW5ndGg7ZSsrKXQucHVsbFtlXT5yJiYocj10LnB1bGxbZV0pO3JldHVybiByfWZ1bmN0aW9uIE8odCxlKXtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dWzBdLGE9aS50cmFjZSxvPWEuZG9tYWluLHM9ZS53KihvLnhbMV0tby54WzBdKSxsPWUuaCooby55WzFdLW8ueVswXSk7YS50aXRsZS50ZXh0JiYibWlkZGxlIGNlbnRlciIhPT1hLnRpdGxlLnBvc2l0aW9uJiYobC09UChpLGUpKTt2YXIgYz1zLzIsdT1sLzI7ImZ1bm5lbGFyZWEiIT09YS50eXBlfHxhLnNjYWxlZ3JvdXB8fCh1Lz1hLmFzcGVjdHJhdGlvKSxpLnI9TWF0aC5taW4oYyx1KS8oMStJKGEpKSxpLmN4PWUubCtlLncqKGEuZG9tYWluLnhbMV0rYS5kb21haW4ueFswXSkvMixpLmN5PWUudCtlLmgqKDEtYS5kb21haW4ueVswXSktbC8yLGEudGl0bGUudGV4dCYmLTEhPT1hLnRpdGxlLnBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpJiYoaS5jeS09UChpLGUpKSxhLnNjYWxlZ3JvdXAmJi0xPT09ci5pbmRleE9mKGEuc2NhbGVncm91cCkmJnIucHVzaChhLnNjYWxlZ3JvdXApfSFmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLGksYT0wO2E8ZS5sZW5ndGg7YSsrKXt2YXIgbz0xLzAscz1lW2FdO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaWYocj10W25dWzBdLChpPXIudHJhY2UpLnNjYWxlZ3JvdXA9PT1zKXt2YXIgbDtpZigicGllIj09PWkudHlwZSlsPXIucipyLnI7ZWxzZSBpZigiZnVubmVsYXJlYSI9PT1pLnR5cGUpe3ZhciBjLHU7aS5hc3BlY3RyYXRpbz4xPyhjPXIucix1PWMvaS5hc3BlY3RyYXRpbyk6KHU9ci5yLGM9dSppLmFzcGVjdHJhdGlvKSxjKj0oMStpLmJhc2VyYXRpbykvMixsPWMqdX1vPU1hdGgubWluKG8sbC9yLnZUb3RhbCl9Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihyPXRbbl1bMF0sKGk9ci50cmFjZSkuc2NhbGVncm91cD09PXMpe3ZhciBmPW8qci52VG90YWw7ImZ1bm5lbGFyZWEiPT09aS50eXBlJiYoZi89KDEraS5iYXNlcmF0aW8pLzIsZi89aS5hc3BlY3RyYXRpbyksci5yPU1hdGguc3FydChmKX19fSh0LHIpfWZ1bmN0aW9uIHoodCxlKXtyZXR1cm5bdCpNYXRoLnNpbihlKSwtdCpNYXRoLmNvcyhlKV19ZnVuY3Rpb24gRCh0LGUscil7dmFyIG49dC5fZnVsbExheW91dCxpPXIudHJhY2UsYT1pLnRleHR0ZW1wbGF0ZSxvPWkudGV4dGluZm87aWYoIWEmJm8mJiJub25lIiE9PW8pe3ZhciBzLGM9by5zcGxpdCgiKyIpLHU9ZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1jLmluZGV4T2YodCl9LGY9dSgibGFiZWwiKSxoPXUoInRleHQiKSxwPXUoInZhbHVlIiksZD11KCJwZXJjZW50IiksbT1uLnNlcGFyYXRvcnM7aWYocz1mP1tlLmxhYmVsXTpbXSxoKXt2YXIgdj1nLmdldEZpcnN0RmlsbGVkKGkudGV4dCxlLnB0cyk7eSh2KSYmcy5wdXNoKHYpfXAmJnMucHVzaChnLmZvcm1hdFBpZVZhbHVlKGUudixtKSksZCYmcy5wdXNoKGcuZm9ybWF0UGllUGVyY2VudChlLnYvci52VG90YWwsbSkpLGUudGV4dD1zLmpvaW4oIjxicj4iKX1pZihhKXt2YXIgeD1sLmNhc3RPcHRpb24oaSxlLmksInRleHR0ZW1wbGF0ZSIpO2lmKHgpe3ZhciBiPWZ1bmN0aW9uKHQpe3JldHVybntsYWJlbDp0LmxhYmVsLHZhbHVlOnQudix2YWx1ZUxhYmVsOmcuZm9ybWF0UGllVmFsdWUodC52LG4uc2VwYXJhdG9ycykscGVyY2VudDp0LnYvci52VG90YWwscGVyY2VudExhYmVsOmcuZm9ybWF0UGllUGVyY2VudCh0LnYvci52VG90YWwsbi5zZXBhcmF0b3JzKSxjb2xvcjp0LmNvbG9yLHRleHQ6dC50ZXh0LGN1c3RvbWRhdGE6bC5jYXN0T3B0aW9uKGksdC5pLCJjdXN0b21kYXRhIil9fShlKSxfPWcuZ2V0Rmlyc3RGaWxsZWQoaS50ZXh0LGUucHRzKTsoeShfKXx8IiI9PT1fKSYmKGIudGV4dD1fKSxlLnRleHQ9bC50ZXh0dGVtcGxhdGVTdHJpbmcoeCxiLHQuX2Z1bGxMYXlvdXQuX2QzbG9jYWxlLGIsaS5fbWV0YXx8e30pfWVsc2UgZS50ZXh0PSIifX1mdW5jdGlvbiBSKHQsZSl7dmFyIHI9dC5yb3RhdGUqTWF0aC5QSS8xODAsbj1NYXRoLmNvcyhyKSxpPU1hdGguc2luKHIpLGE9KGUubGVmdCtlLnJpZ2h0KS8yLG89KGUudG9wK2UuYm90dG9tKS8yO3QudGV4dFg9YSpuLW8qaSx0LnRleHRZPWEqaStvKm4sdC5ub0NlbnRlcj0hMH1lLmV4cG9ydHM9e3Bsb3Q6ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGE9ci5fc2l6ZTtkKCJwaWUiLHIpLF8oZSx0KSxPKGUsYSk7dmFyIGg9bC5tYWtlVHJhY2VHcm91cHMoci5fcGllbGF5ZXIsZSwidHJhY2UiKS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaD1uLnNlbGVjdCh0aGlzKSxkPWVbMF0sbT1kLnRyYWNlOyFmdW5jdGlvbih0KXt2YXIgZSxyLG4saT10WzBdLGE9aS5yLG89aS50cmFjZSxzPWcuZ2V0Um90YXRpb25BbmdsZShvLnJvdGF0aW9uKSxsPTIqTWF0aC5QSS9pLnZUb3RhbCxjPSJweDAiLHU9InB4MSI7aWYoImNvdW50ZXJjbG9ja3dpc2UiPT09by5kaXJlY3Rpb24pe2ZvcihlPTA7ZTx0Lmxlbmd0aCYmdFtlXS5oaWRkZW47ZSsrKTtpZihlPT09dC5sZW5ndGgpcmV0dXJuO3MrPWwqdFtlXS52LGwqPS0xLGM9InB4MSIsdT0icHgwIn1mb3Iobj16KGEscyksZT0wO2U8dC5sZW5ndGg7ZSsrKShyPXRbZV0pLmhpZGRlbnx8KHJbY109bixyLnN0YXJ0YW5nbGU9cyxzKz1sKnIudi8yLHIucHhtaWQ9eihhLHMpLHIubWlkYW5nbGU9cyxzKz1sKnIudi8yLG49eihhLHMpLHIuc3RvcGFuZ2xlPXMsclt1XT1uLHIubGFyZ2VBcmM9ci52PmkudlRvdGFsLzI/MTowLHIuaGFsZmFuZ2xlPU1hdGguUEkqTWF0aC5taW4oci52L2kudlRvdGFsLC41KSxyLnJpbmc9MS1vLmhvbGUsci5ySW5zY3JpYmVkPUUocixpKSl9KGUpLGguYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxoLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHY9bi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJnLnNsaWNlIikuZGF0YShlKTt2LmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx2LmV4aXQoKS5yZW1vdmUoKTt2YXIgeT1bW1tdLFtdXSxbW10sW11dXSxfPSExO3YuZWFjaCgoZnVuY3Rpb24oaSxhKXtpZihpLmhpZGRlbiluLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInBhdGgsZyIpLnJlbW92ZSgpO2Vsc2V7aS5wb2ludE51bWJlcj1pLmksaS5jdXJ2ZU51bWJlcj1tLmluZGV4LHlbaS5weG1pZFsxXTwwPzA6MV1baS5weG1pZFswXTwwPzA6MV0ucHVzaChpKTt2YXIgbz1kLmN4LGM9ZC5jeSx1PW4uc2VsZWN0KHRoaXMpLGg9dS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmRhdGEoW2ldKTtpZihoLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgic3VyZmFjZSIsITApLnN0eWxlKHsicG9pbnRlci1ldmVudHMiOiJhbGwifSksdS5jYWxsKHgsdCxlKSxtLnB1bGwpe3ZhciB2PStnLmNhc3RPcHRpb24obS5wdWxsLGkucHRzKXx8MDt2PjAmJihvKz12KmkucHhtaWRbMF0sYys9dippLnB4bWlkWzFdKX1pLmN4RmluYWw9byxpLmN5RmluYWw9Yzt2YXIgVD1tLmhvbGU7aWYoaS52PT09ZC52VG90YWwpe3ZhciBrPSJNIisobytpLnB4MFswXSkrIiwiKyhjK2kucHgwWzFdKStDKGkucHgwLGkucHhtaWQsITAsMSkrQyhpLnB4bWlkLGkucHgwLCEwLDEpKyJaIjtUP2guYXR0cigiZCIsIk0iKyhvK1QqaS5weDBbMF0pKyIsIisoYytUKmkucHgwWzFdKStDKGkucHgwLGkucHhtaWQsITEsVCkrQyhpLnB4bWlkLGkucHgwLCExLFQpKyJaIitrKTpoLmF0dHIoImQiLGspfWVsc2V7dmFyIEE9QyhpLnB4MCxpLnB4MSwhMCwxKTtpZihUKXt2YXIgTT0xLVQ7aC5hdHRyKCJkIiwiTSIrKG8rVCppLnB4MVswXSkrIiwiKyhjK1QqaS5weDFbMV0pK0MoaS5weDEsaS5weDAsITEsVCkrImwiK00qaS5weDBbMF0rIiwiK00qaS5weDBbMV0rQSsiWiIpfWVsc2UgaC5hdHRyKCJkIiwiTSIrbysiLCIrYysibCIraS5weDBbMF0rIiwiK2kucHgwWzFdK0ErIloiKX1EKHQsaSxkKTt2YXIgUz1nLmNhc3RPcHRpb24obS50ZXh0cG9zaXRpb24saS5wdHMpLEU9dS5zZWxlY3RBbGwoImcuc2xpY2V0ZXh0IikuZGF0YShpLnRleHQmJiJub25lIiE9PVM/WzBdOltdKTtFLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCksRS5leGl0KCkucmVtb3ZlKCksRS5lYWNoKChmdW5jdGlvbigpe3ZhciB1PWwuZW5zdXJlU2luZ2xlKG4uc2VsZWN0KHRoaXMpLCJ0ZXh0IiwiIiwoZnVuY3Rpb24odCl7dC5hdHRyKCJkYXRhLW5vdGV4IiwxKX0pKSxoPWwuZW5zdXJlVW5pZm9ybUZvbnRTaXplKHQsIm91dHNpZGUiPT09Uz9mdW5jdGlvbih0LGUscil7dmFyIG49Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LmNvbG9yLGUucHRzKXx8Zy5jYXN0T3B0aW9uKHQudGV4dGZvbnQuY29sb3IsZS5wdHMpfHxyLmNvbG9yLGk9Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LmZhbWlseSxlLnB0cyl8fGcuY2FzdE9wdGlvbih0LnRleHRmb250LmZhbWlseSxlLnB0cyl8fHIuZmFtaWx5LGE9Zy5jYXN0T3B0aW9uKHQub3V0c2lkZXRleHRmb250LnNpemUsZS5wdHMpfHxnLmNhc3RPcHRpb24odC50ZXh0Zm9udC5zaXplLGUucHRzKXx8ci5zaXplO3JldHVybntjb2xvcjpuLGZhbWlseTppLHNpemU6YX19KG0saSxyLmZvbnQpOmIobSxpLHIuZm9udCkpO3UudGV4dChpLnRleHQpLmF0dHIoe2NsYXNzOiJzbGljZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChzLmZvbnQsaCkuY2FsbChmLmNvbnZlcnRUb1RzcGFucyx0KTt2YXIgdix5PXMuYkJveCh1Lm5vZGUoKSk7aWYoIm91dHNpZGUiPT09Uyl2PUwoeSxpKTtlbHNlIGlmKHY9dyh5LGksZCksImF1dG8iPT09UyYmdi5zY2FsZTwxKXt2YXIgeD1sLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LG0ub3V0c2lkZXRleHRmb250KTt1LmNhbGwocy5mb250LHgpLHY9TCh5PXMuYkJveCh1Lm5vZGUoKSksaSl9dmFyIFQ9di50ZXh0UG9zQW5nbGUsaz12b2lkIDA9PT1UP2kucHhtaWQ6eihkLnIsVCk7aWYodi50YXJnZXRYPW8ra1swXSp2LnJDZW50ZXIrKHYueHx8MCksdi50YXJnZXRZPWMra1sxXSp2LnJDZW50ZXIrKHYueXx8MCksUih2LHkpLHYub3V0c2lkZSl7dmFyIEE9di50YXJnZXRZO2kueUxhYmVsTWluPUEteS5oZWlnaHQvMixpLnlMYWJlbE1pZD1BLGkueUxhYmVsTWF4PUEreS5oZWlnaHQvMixpLmxhYmVsRXh0cmFYPTAsaS5sYWJlbEV4dHJhWT0wLF89ITB9di5mb250U2l6ZT1oLnNpemUscChtLnR5cGUsdixyKSxlW2FdLnRyYW5zZm9ybT12LHUuYXR0cigidHJhbnNmb3JtIixsLmdldFRleHRUcmFuc2Zvcm0odikpfSkpfWZ1bmN0aW9uIEModCxlLHIsbil7dmFyIGE9biooZVswXS10WzBdKSxvPW4qKGVbMV0tdFsxXSk7cmV0dXJuImEiK24qZC5yKyIsIituKmQucisiIDAgIitpLmxhcmdlQXJjKyhyPyIgMSAiOiIgMCAiKSthKyIsIitvfX0pKTt2YXIgVD1uLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoImcudGl0bGV0ZXh0IikuZGF0YShtLnRpdGxlLnRleHQ/WzBdOltdKTtpZihULmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgidGl0bGV0ZXh0IiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5lYWNoKChmdW5jdGlvbigpe3ZhciBlLHI9bC5lbnN1cmVTaW5nbGUobi5zZWxlY3QodGhpcyksInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLGk9bS50aXRsZS50ZXh0O20uX21ldGEmJihpPWwudGVtcGxhdGVTdHJpbmcoaSxtLl9tZXRhKSksci50ZXh0KGkpLmF0dHIoe2NsYXNzOiJ0aXRsZXRleHQiLHRyYW5zZm9ybToiIiwidGV4dC1hbmNob3IiOiJtaWRkbGUifSkuY2FsbChzLmZvbnQsbS50aXRsZS5mb250KS5jYWxsKGYuY29udmVydFRvVHNwYW5zLHQpLGU9Im1pZGRsZSBjZW50ZXIiPT09bS50aXRsZS5wb3NpdGlvbj9mdW5jdGlvbih0KXt2YXIgZT1NYXRoLnNxcnQodC50aXRsZUJveC53aWR0aCp0LnRpdGxlQm94LndpZHRoK3QudGl0bGVCb3guaGVpZ2h0KnQudGl0bGVCb3guaGVpZ2h0KTtyZXR1cm57eDp0LmN4LHk6dC5jeSxzY2FsZTp0LnRyYWNlLmhvbGUqdC5yKjIvZSx0eDowLHR5Oi10LnRpdGxlQm94LmhlaWdodC8yK3QudHJhY2UudGl0bGUuZm9udC5zaXplfX0oZCk6QyhkLGEpLHIuYXR0cigidHJhbnNmb3JtIix1KGUueCxlLnkpK2MoTWF0aC5taW4oMSxlLnNjYWxlKSkrdShlLnR4LGUudHkpKX0pKSxfJiZmdW5jdGlvbih0LGUpe3ZhciByLG4saSxhLG8scyxsLGMsdSxmLGgscCxkO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gdC5weG1pZFsxXS1lLnB4bWlkWzFdfWZ1bmN0aW9uIHYodCxlKXtyZXR1cm4gZS5weG1pZFsxXS10LnB4bWlkWzFdfWZ1bmN0aW9uIHkodCxyKXtyfHwocj17fSk7dmFyIGksYyx1LGgscD1yLmxhYmVsRXh0cmFZKyhuP3IueUxhYmVsTWF4OnIueUxhYmVsTWluKSxkPW4/dC55TGFiZWxNaW46dC55TGFiZWxNYXgsbT1uP3QueUxhYmVsTWF4OnQueUxhYmVsTWluLHY9dC5jeUZpbmFsK28odC5weDBbMV0sdC5weDFbMV0pLHk9cC1kO2lmKHkqbD4wJiYodC5sYWJlbEV4dHJhWT15KSxBcnJheS5pc0FycmF5KGUucHVsbCkpZm9yKGM9MDtjPGYubGVuZ3RoO2MrKykodT1mW2NdKT09PXR8fChnLmNhc3RPcHRpb24oZS5wdWxsLHQucHRzKXx8MCk+PShnLmNhc3RPcHRpb24oZS5wdWxsLHUucHRzKXx8MCl8fCgodC5weG1pZFsxXS11LnB4bWlkWzFdKSpsPjA/KHk9dS5jeUZpbmFsK28odS5weDBbMV0sdS5weDFbMV0pLWQtdC5sYWJlbEV4dHJhWSkqbD4wJiYodC5sYWJlbEV4dHJhWSs9eSk6KG0rdC5sYWJlbEV4dHJhWS12KSpsPjAmJihpPTMqcypNYXRoLmFicyhjLWYuaW5kZXhPZih0KSksKGg9dS5jeEZpbmFsK2EodS5weDBbMF0sdS5weDFbMF0pK2ktKHQuY3hGaW5hbCt0LnB4bWlkWzBdKS10LmxhYmVsRXh0cmFYKSpzPjAmJih0LmxhYmVsRXh0cmFYKz1oKSkpfWZvcihuPTA7bjwyO24rKylmb3IoaT1uP206dixvPW4/TWF0aC5tYXg6TWF0aC5taW4sbD1uPzE6LTEscj0wO3I8MjtyKyspe2ZvcihhPXI/TWF0aC5tYXg6TWF0aC5taW4scz1yPzE6LTEsKGM9dFtuXVtyXSkuc29ydChpKSx1PXRbMS1uXVtyXSxmPXUuY29uY2F0KGMpLHA9W10saD0wO2g8Yy5sZW5ndGg7aCsrKXZvaWQgMCE9PWNbaF0ueUxhYmVsTWlkJiZwLnB1c2goY1toXSk7Zm9yKGQ9ITEsaD0wO24mJmg8dS5sZW5ndGg7aCsrKWlmKHZvaWQgMCE9PXVbaF0ueUxhYmVsTWlkKXtkPXVbaF07YnJlYWt9Zm9yKGg9MDtoPHAubGVuZ3RoO2grKyl7dmFyIHg9aCYmcFtoLTFdO2QmJiFoJiYoeD1kKSx5KHBbaF0seCl9fX0oeSxtKSxmdW5jdGlvbih0LGUpe3QuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyk7aWYodC5sYWJlbEV4dHJhWHx8dC5sYWJlbEV4dHJhWSl7dmFyIGk9ci5zZWxlY3QoImcuc2xpY2V0ZXh0IHRleHQiKTt0LnRyYW5zZm9ybS50YXJnZXRYKz10LmxhYmVsRXh0cmFYLHQudHJhbnNmb3JtLnRhcmdldFkrPXQubGFiZWxFeHRyYVksaS5hdHRyKCJ0cmFuc2Zvcm0iLGwuZ2V0VGV4dFRyYW5zZm9ybSh0LnRyYW5zZm9ybSkpO3ZhciBhPXQuY3hGaW5hbCt0LnB4bWlkWzBdLHM9Ik0iK2ErIiwiKyh0LmN5RmluYWwrdC5weG1pZFsxXSksYz0odC55TGFiZWxNYXgtdC55TGFiZWxNaW4pKih0LnB4bWlkWzBdPDA/LTE6MSkvNDtpZih0LmxhYmVsRXh0cmFYKXt2YXIgdT10LmxhYmVsRXh0cmFYKnQucHhtaWRbMV0vdC5weG1pZFswXSxmPXQueUxhYmVsTWlkK3QubGFiZWxFeHRyYVktKHQuY3lGaW5hbCt0LnB4bWlkWzFdKTtNYXRoLmFicyh1KT5NYXRoLmFicyhmKT9zKz0ibCIrZip0LnB4bWlkWzBdL3QucHhtaWRbMV0rIiwiK2YrIkgiKyhhK3QubGFiZWxFeHRyYVgrYyk6cys9ImwiK3QubGFiZWxFeHRyYVgrIiwiK3UrInYiKyhmLXUpKyJoIitjfWVsc2Ugcys9IlYiKyh0LnlMYWJlbE1pZCt0LmxhYmVsRXh0cmFZKSsiaCIrYztsLmVuc3VyZVNpbmdsZShyLCJwYXRoIiwidGV4dGxpbmUiKS5jYWxsKG8uc3Ryb2tlLGUub3V0c2lkZXRleHRmb250LmNvbG9yKS5hdHRyKHsic3Ryb2tlLXdpZHRoIjpNYXRoLm1pbigyLGUub3V0c2lkZXRleHRmb250LnNpemUvOCksZDpzLGZpbGw6Im5vbmUifSl9ZWxzZSByLnNlbGVjdCgicGF0aC50ZXh0bGluZSIpLnJlbW92ZSgpfSkpfSh2LG0pLF8mJm0uYXV0b21hcmdpbil7dmFyIGs9cy5iQm94KGgubm9kZSgpKSxBPW0uZG9tYWluLE09YS53KihBLnhbMV0tQS54WzBdKSxTPWEuaCooQS55WzFdLUEueVswXSksRT0oLjUqTS1kLnIpL2EudyxQPSguNSpTLWQucikvYS5oO2kuYXV0b01hcmdpbih0LCJwaWUuIittLnVpZCsiLmF1dG9tYXJnaW4iLHt4bDpBLnhbMF0tRSx4cjpBLnhbMV0rRSx5YjpBLnlbMF0tUCx5dDpBLnlbMV0rUCxsOk1hdGgubWF4KGQuY3gtZC5yLWsubGVmdCwwKSxyOk1hdGgubWF4KGsucmlnaHQtKGQuY3grZC5yKSwwKSxiOk1hdGgubWF4KGsuYm90dG9tLShkLmN5K2QuciksMCksdDpNYXRoLm1heChkLmN5LWQuci1rLnRvcCwwKSxwYWQ6NX0pfX0pKX0pKTtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2guc2VsZWN0QWxsKCJ0c3BhbiIpLmVhY2goKGZ1bmN0aW9uKCl7dmFyIHQ9bi5zZWxlY3QodGhpcyk7dC5hdHRyKCJkeSIpJiZ0LmF0dHIoImR5Iix0LmF0dHIoImR5IikpfSkpfSksMCl9LGZvcm1hdFNsaWNlTGFiZWw6RCx0cmFuc2Zvcm1JbnNpZGVUZXh0OncsZGV0ZXJtaW5lSW5zaWRlVGV4dEZvbnQ6Yixwb3NpdGlvblRpdGxlT3V0c2lkZTpDLHByZXJlbmRlclRpdGxlczpfLGxheW91dEFyZWFzOk8sYXR0YWNoRnhIYW5kbGVyczp4LGNvbXB1dGVUcmFuc2Zvcm06Un19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL3Bsb3RzIjo4OTAsIi4uL2Jhci9jb25zdGFudHMiOjkxNiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuL2V2ZW50X2RhdGEiOjExNjksIi4vaGVscGVycyI6MTE3MCwiQHBsb3RseS9kMyI6NTh9XSwxMTc1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4vc3R5bGVfb25lIiksYT10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVzaXplVGV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dC5fcGllbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTthKHQsZSwicGllIiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10WzBdLnRyYWNlLHI9bi5zZWxlY3QodGhpcyk7ci5zdHlsZSh7b3BhY2l0eTplLm9wYWNpdHl9KSxyLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChpLHQsZSl9KSl9KSl9fSx7Ii4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiLi9zdHlsZV9vbmUiOjExNzYsIkBwbG90bHkvZDMiOjU4fV0sMTE3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL2hlbHBlcnMiKS5jYXN0T3B0aW9uO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGE9ci5tYXJrZXIubGluZSxvPWkoYS5jb2xvcixlLnB0cyl8fG4uZGVmYXVsdExpbmUscz1pKGEud2lkdGgsZS5wdHMpfHwwO3Quc3R5bGUoInN0cm9rZS13aWR0aCIscykuY2FsbChuLmZpbGwsZS5jb2xvcikuY2FsbChuLnN0cm9rZSxvKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuL2hlbHBlcnMiOjExNzB9XSwxMTc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpO2UuZXhwb3J0cz17eDpuLngseTpuLnkseHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0saW5kaWNlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx4Ym91bmRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHlib3VuZHM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpuLnRleHQsbWFya2VyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MSxhcnJheU9rOiExLGVkaXRUeXBlOiJjYWxjIn0sYmxlbmQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6bnVsbCxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOi4xLG1heDoyLGRmbHQ6LjUsZWRpdFR5cGU6ImNhbGMifSxzaXplbWF4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjouMSxkZmx0OjIwLGVkaXRUeXBlOiJjYWxjIn0sYm9yZGVyOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGFycmF5T2s6ITEsZWRpdFR5cGU6ImNhbGMifSxhcmVhcmF0aW86e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxlZGl0VHlwZToiY2FsYyJ9LHRyYW5zZm9ybXM6dm9pZCAwfX0seyIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMTc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImdsLXBvaW50Y2xvdWQyZCIpLGk9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxvPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gcyh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMudHlwZT0icG9pbnRjbG91ZCIsdGhpcy5waWNrWERhdGE9W10sdGhpcy5waWNrWURhdGE9W10sdGhpcy54RGF0YT1bXSx0aGlzLnlEYXRhPVtdLHRoaXMudGV4dExhYmVscz1bXSx0aGlzLmNvbG9yPSJyZ2IoMCwgMCwgMCkiLHRoaXMubmFtZT0iIix0aGlzLmhvdmVyaW5mbz0iYWxsIix0aGlzLmlkVG9JbmRleD1uZXcgSW50MzJBcnJheSgwKSx0aGlzLmJvdW5kcz1bMCwwLDAsMF0sdGhpcy5wb2ludGNsb3VkT3B0aW9ucz17cG9zaXRpb25zOm5ldyBGbG9hdDMyQXJyYXkoMCksaWRUb0luZGV4OnRoaXMuaWRUb0luZGV4LHNpemVtaW46LjUsc2l6ZW1heDoxMixjb2xvcjpbMCwwLDAsMV0sYXJlYVJhdGlvOjEsYm9yZGVyQ29sb3I6WzAsMCwwLDFdfSx0aGlzLnBvaW50Y2xvdWQ9bih0LmdscGxvdCx0aGlzLnBvaW50Y2xvdWRPcHRpb25zKSx0aGlzLnBvaW50Y2xvdWQuX3RyYWNlPXRoaXN9dmFyIGw9cy5wcm90b3R5cGU7bC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaWRUb0luZGV4W3QucG9pbnRJZF07cmV0dXJue3RyYWNlOnRoaXMsZGF0YUNvb3JkOnQuZGF0YUNvb3JkLHRyYWNlQ29vcmQ6dGhpcy5waWNrWFlEYXRhP1t0aGlzLnBpY2tYWURhdGFbMiplXSx0aGlzLnBpY2tYWURhdGFbMiplKzFdXTpbdGhpcy5waWNrWERhdGFbZV0sdGhpcy5waWNrWURhdGFbZV1dLHRleHRMYWJlbDpBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/dGhpcy50ZXh0TGFiZWxzW2VdOnRoaXMudGV4dExhYmVscyxjb2xvcjp0aGlzLmNvbG9yLG5hbWU6dGhpcy5uYW1lLHBvaW50SW5kZXg6ZSxob3ZlcmluZm86dGhpcy5ob3ZlcmluZm99fSxsLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmluZGV4PXQuaW5kZXgsdGhpcy50ZXh0TGFiZWxzPXQudGV4dCx0aGlzLm5hbWU9dC5uYW1lLHRoaXMuaG92ZXJpbmZvPXQuaG92ZXJpbmZvLHRoaXMuYm91bmRzPVsxLzAsMS8wLC0xLzAsLTEvMF0sdGhpcy51cGRhdGVGYXN0KHQpLHRoaXMuY29sb3I9byh0LHt9KX0sbC51cGRhdGVGYXN0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixvLHMsbCxjPXRoaXMueERhdGE9dGhpcy5waWNrWERhdGE9dC54LHU9dGhpcy55RGF0YT10aGlzLnBpY2tZRGF0YT10LnksZj10aGlzLnBpY2tYWURhdGE9dC54eSxoPXQueGJvdW5kcyYmdC55Ym91bmRzLHA9dC5pbmRpY2VzLGQ9dGhpcy5ib3VuZHM7aWYoZil7aWYobj1mLGU9Zi5sZW5ndGg+Pj4xLGgpZFswXT10Lnhib3VuZHNbMF0sZFsyXT10Lnhib3VuZHNbMV0sZFsxXT10Lnlib3VuZHNbMF0sZFszXT10Lnlib3VuZHNbMV07ZWxzZSBmb3IobD0wO2w8ZTtsKyspbz1uWzIqbF0scz1uWzIqbCsxXSxvPGRbMF0mJihkWzBdPW8pLG8+ZFsyXSYmKGRbMl09byksczxkWzFdJiYoZFsxXT1zKSxzPmRbM10mJihkWzNdPXMpO2lmKHApcj1wO2Vsc2UgZm9yKHI9bmV3IEludDMyQXJyYXkoZSksbD0wO2w8ZTtsKyspcltsXT1sfWVsc2UgZm9yKGU9Yy5sZW5ndGgsbj1uZXcgRmxvYXQzMkFycmF5KDIqZSkscj1uZXcgSW50MzJBcnJheShlKSxsPTA7bDxlO2wrKylvPWNbbF0scz11W2xdLHJbbF09bCxuWzIqbF09byxuWzIqbCsxXT1zLG88ZFswXSYmKGRbMF09byksbz5kWzJdJiYoZFsyXT1vKSxzPGRbMV0mJihkWzFdPXMpLHM+ZFszXSYmKGRbM109cyk7dGhpcy5pZFRvSW5kZXg9cix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmlkVG9JbmRleD1yLHRoaXMucG9pbnRjbG91ZE9wdGlvbnMucG9zaXRpb25zPW47dmFyIG09aSh0Lm1hcmtlci5jb2xvciksZz1pKHQubWFya2VyLmJvcmRlci5jb2xvciksdj10Lm9wYWNpdHkqdC5tYXJrZXIub3BhY2l0eTttWzNdKj12LHRoaXMucG9pbnRjbG91ZE9wdGlvbnMuY29sb3I9bTt2YXIgeT10Lm1hcmtlci5ibGVuZDtpZihudWxsPT09eSl7eT1jLmxlbmd0aDwxMDB8fHUubGVuZ3RoPDEwMH10aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJsZW5kPXksZ1szXSo9dix0aGlzLnBvaW50Y2xvdWRPcHRpb25zLmJvcmRlckNvbG9yPWc7dmFyIHg9dC5tYXJrZXIuc2l6ZW1pbixiPU1hdGgubWF4KHQubWFya2VyLnNpemVtYXgsdC5tYXJrZXIuc2l6ZW1pbik7dGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWluPXgsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5zaXplTWF4PWIsdGhpcy5wb2ludGNsb3VkT3B0aW9ucy5hcmVhUmF0aW89dC5tYXJrZXIuYm9yZGVyLmFyZWFyYXRpbyx0aGlzLnBvaW50Y2xvdWQudXBkYXRlKHRoaXMucG9pbnRjbG91ZE9wdGlvbnMpO3ZhciBfPXRoaXMuc2NlbmUueGF4aXMsdz10aGlzLnNjZW5lLnlheGlzLFQ9Yi8yfHwuNTt0Ll9leHRyZW1lc1tfLl9pZF09YShfLFtkWzBdLGRbMl1dLHtwcGFkOlR9KSx0Ll9leHRyZW1lc1t3Ll9pZF09YSh3LFtkWzFdLGRbM11dLHtwcGFkOlR9KX0sbC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5wb2ludGNsb3VkLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bmV3IHModCxlLnVpZCk7cmV0dXJuIHIudXBkYXRlKGUpLHJ9fSx7Ii4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMSwiZ2wtcG9pbnRjbG91ZDJkIjozMTR9XSwxMTc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBhKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9YSgieCIpLGEoInkiKSxhKCJ4Ym91bmRzIiksYSgieWJvdW5kcyIpLHQueHkmJnQueHkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkmJihlLnh5PXQueHkpLHQuaW5kaWNlcyYmdC5pbmRpY2VzIGluc3RhbmNlb2YgSW50MzJBcnJheSYmKGUuaW5kaWNlcz10LmluZGljZXMpLGEoInRleHQiKSxhKCJtYXJrZXIuY29sb3IiLHIpLGEoIm1hcmtlci5vcGFjaXR5IiksYSgibWFya2VyLmJsZW5kIiksYSgibWFya2VyLnNpemVtaW4iKSxhKCJtYXJrZXIuc2l6ZW1heCIpLGEoIm1hcmtlci5ib3JkZXIuY29sb3IiLHIpLGEoIm1hcmtlci5ib3JkZXIuYXJlYXJhdGlvIiksZS5fbGVuZ3RoPW51bGx9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuL2F0dHJpYnV0ZXMiOjExNzd9XSwxMTgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO1siKnBvaW50Y2xvdWQqIHRyYWNlIGlzIGRlcHJlY2F0ZWQhIiwiUGxlYXNlIGNvbnNpZGVyIHN3aXRjaGluZyB0byB0aGUgKnNjYXR0ZXJnbCogdHJhY2UgdHlwZS4iXS5qb2luKCIgIik7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL3NjYXR0ZXIzZC9jYWxjIikscGxvdDp0KCIuL2NvbnZlcnQiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToicG9pbnRjbG91ZCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wyZCIpLGNhdGVnb3JpZXM6WyJnbCIsImdsMmQiLCJzaG93TGVnZW5kIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvZ2wyZCI6ODY3LCIuLi9zY2F0dGVyM2QvY2FsYyI6MTIyMCwiLi9hdHRyaWJ1dGVzIjoxMTc3LCIuL2NvbnZlcnQiOjExNzgsIi4vZGVmYXVsdHMiOjExNzl9XSwxMTgxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSx1PXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKS50ZW1wbGF0ZWRBcnJheSxmPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuZGVzY3JpcHRpb25Pbmx5TnVtYmVycyxoPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LHA9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsOyhlLmV4cG9ydHM9cCh7aG92ZXJpbmZvOmgoe30saS5ob3ZlcmluZm8se2ZsYWdzOltdLGFycmF5T2s6ITF9KSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxkb21haW46cyh7bmFtZToic2Fua2V5Iix0cmFjZTohMH0pLG9yaWVudGF0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ2IiwiaCJdLGRmbHQ6ImgifSx2YWx1ZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIuM3MiLGRlc2NyaXB0aW9uOmYoInZhbHVlIil9LHZhbHVlc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiJ9LGFycmFuZ2VtZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzbmFwIiwicGVycGVuZGljdWxhciIsImZyZWVmb3JtIiwiZml4ZWQiXSxkZmx0OiJzbmFwIn0sdGV4dGZvbnQ6bih7fSksY3VzdG9tZGF0YTp2b2lkIDAsbm9kZTp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGdyb3Vwczp7dmFsVHlwZToiaW5mb19hcnJheSIsaW1wbGllZEVkaXRzOnt4OltdLHk6W119LGRpbWVuc2lvbnM6MixmcmVlTGVuZ3RoOiEwLGRmbHQ6W10saXRlbXM6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifX0seDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwfSxjdXN0b21kYXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDphLmRlZmF1bHRMaW5lLGFycmF5T2s6ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6LjUsYXJyYXlPazohMH19LHBhZDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjowLGRmbHQ6MjB9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiExLG1pbjoxLGRmbHQ6MjB9LGhvdmVyaW5mbzp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYWxsIiwibm9uZSIsInNraXAiXSxkZmx0OiJhbGwifSxob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbCxob3ZlcnRlbXBsYXRlOmwoe30se2tleXM6WyJ2YWx1ZSIsImxhYmVsIl19KX0sbGluazp7bGFiZWw6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMH0sY3VzdG9tZGF0YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGRmbHQ6YS5kZWZhdWx0TGluZSxhcnJheU9rOiEwfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsYXJyYXlPazohMH19LHNvdXJjZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sdGFyZ2V0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdfSx2YWx1ZTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0saG92ZXJpbmZvOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhbGwiLCJub25lIiwic2tpcCJdLGRmbHQ6ImFsbCJ9LGhvdmVybGFiZWw6by5ob3ZlcmxhYmVsLGhvdmVydGVtcGxhdGU6bCh7fSx7a2V5czpbInZhbHVlIiwibGFiZWwiXX0pLGNvbG9yc2NhbGVzOnUoImNvbmNlbnRyYXRpb25zY2FsZXMiLHtlZGl0VHlwZToiY2FsYyIsbGFiZWw6e3ZhbFR5cGU6InN0cmluZyIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6IiJ9LGNtYXg6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLGRmbHQ6MX0sY21pbjp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToiY2FsYyIsZGZsdDowfSxjb2xvcnNjYWxlOmgoYygpLmNvbG9yc2NhbGUse2RmbHQ6W1swLCJ3aGl0ZSJdLFsxLCJibGFjayJdXX0pfSl9fSwiY2FsYyIsIm5lc3RlZCIpKS50cmFuc2Zvcm1zPXZvaWQgMH0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yL2F0dHJpYnV0ZXMiOjYzOCwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vY29tcG9uZW50cy9meC9hdHRyaWJ1dGVzIjo2NzAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90X2FwaS9wbG90X3RlbXBsYXRlIjo4MTYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTl9XSwxMTgyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxpPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsYT10KCIuL3Bsb3QiKSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9zZXRjdXJzb3IiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhZ2VsZW1lbnQiKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9zZWxlY3QiKS5wcmVwU2VsZWN0LHU9dCgiLi4vLi4vbGliIiksZj10KCIuLi8uLi9yZWdpc3RyeSIpO2Z1bmN0aW9uIGgodCxlKXt2YXIgcj10Ll9mdWxsRGF0YVtlXSxuPXQuX2Z1bGxMYXlvdXQsaT1uLmRyYWdtb2RlLGE9InBhbiI9PT1uLmRyYWdtb2RlPyJtb3ZlIjoiY3Jvc3NoYWlyIixvPXIuX2JnUmVjdDtpZigicGFuIiE9PWkmJiJ6b29tIiE9PWkpe3MobyxhKTt2YXIgaD17X2lkOiJ4IixjMnA6dS5pZGVudGl0eSxfb2Zmc2V0OnIuX3NhbmtleS50cmFuc2xhdGVYLF9sZW5ndGg6ci5fc2Fua2V5LndpZHRofSxwPXtfaWQ6InkiLGMycDp1LmlkZW50aXR5LF9vZmZzZXQ6ci5fc2Fua2V5LnRyYW5zbGF0ZVksX2xlbmd0aDpyLl9zYW5rZXkuaGVpZ2h0fSxkPXtnZDp0LGVsZW1lbnQ6by5ub2RlKCkscGxvdGluZm86e2lkOmUseGF4aXM6aCx5YXhpczpwLGZpbGxSYW5nZUl0ZW1zOnUubm9vcH0sc3VicGxvdDplLHhheGVzOltoXSx5YXhlczpbcF0sZG9uZUZuQ29tcGxldGVkOmZ1bmN0aW9uKHIpe3ZhciBuLGk9dC5fZnVsbERhdGFbZV0sYT1pLm5vZGUuZ3JvdXBzLnNsaWNlKCksbz1bXTtmdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1pLl9zYW5rZXkuZ3JhcGgubm9kZXMscj0wO3I8ZS5sZW5ndGg7cisrKWlmKGVbcl0ucG9pbnROdW1iZXI9PT10KXJldHVybiBlW3JdfWZvcih2YXIgbD0wO2w8ci5sZW5ndGg7bCsrKXt2YXIgYz1zKHJbbF0ucG9pbnROdW1iZXIpO2lmKGMpaWYoYy5ncm91cCl7Zm9yKHZhciB1PTA7dTxjLmNoaWxkcmVuTm9kZXMubGVuZ3RoO3UrKylvLnB1c2goYy5jaGlsZHJlbk5vZGVzW3VdLnBvaW50TnVtYmVyKTthW2MucG9pbnROdW1iZXItaS5ub2RlLl9jb3VudF09ITF9ZWxzZSBvLnB1c2goYy5wb2ludE51bWJlcil9bj1hLmZpbHRlcihCb29sZWFuKS5jb25jYXQoW29dKSxmLmNhbGwoIl9ndWlSZXN0eWxlIix0LHsibm9kZS5ncm91cHMiOltuXX0sZSl9LHByZXBGbjpmdW5jdGlvbih0LGUscil7Yyh0LGUscixkLGkpfX07bC5pbml0KGQpfX1yLm5hbWU9InNhbmtleSIsci5iYXNlTGF5b3V0QXR0ck92ZXJyaWRlcz1uKHtob3ZlcmxhYmVsOm8uaG92ZXJsYWJlbH0sInBsb3QiLCJuZXN0ZWQiKSxyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9aSh0LmNhbGNkYXRhLCJzYW5rZXkiKVswXTthKHQsZSksci51cGRhdGVGeCh0KX0sci5jbGVhbj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1uLl9oYXMmJm4uX2hhcygic2Fua2V5IiksYT1lLl9oYXMmJmUuX2hhcygic2Fua2V5Iik7aSYmIWEmJihuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5zYW5rZXkiKS5yZW1vdmUoKSxuLl9wYXBlcmRpdi5zZWxlY3RBbGwoIi5iZ3NhbmtleSIpLnJlbW92ZSgpKX0sci51cGRhdGVGeD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQuX2Z1bGxEYXRhLmxlbmd0aDtlKyspaCh0LGUpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50Ijo2NTgsIi4uLy4uL2NvbXBvbmVudHMvZngvbGF5b3V0X2F0dHJpYnV0ZXMiOjY4MCwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vc2VsZWN0Ijo4NDcsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4vcGxvdCI6MTE4N31dLDExODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgic3Ryb25nbHktY29ubmVjdGVkLWNvbXBvbmVudHMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vbGliL2d1cCIpLndyYXAsbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkscz1pLmlzSW5kZXgsbD10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKTtmdW5jdGlvbiBjKHQpe3ZhciBlLHI9dC5ub2RlLGE9dC5saW5rLGM9W10sdT1vKGEuY29sb3IpLGY9byhhLmN1c3RvbWRhdGEpLGg9e30scD17fSxkPWEuY29sb3JzY2FsZXMubGVuZ3RoO2ZvcihlPTA7ZTxkO2UrKyl7dmFyIG09YS5jb2xvcnNjYWxlc1tlXSxnPWwuZXh0cmFjdFNjYWxlKG0se2NMZXR0ZXI6ImMifSksdj1sLm1ha2VDb2xvclNjYWxlRnVuYyhnKTtwW20ubGFiZWxdPXZ9dmFyIHk9MDtmb3IoZT0wO2U8YS52YWx1ZS5sZW5ndGg7ZSsrKWEuc291cmNlW2VdPnkmJih5PWEuc291cmNlW2VdKSxhLnRhcmdldFtlXT55JiYoeT1hLnRhcmdldFtlXSk7dmFyIHgsYj15KzE7dC5ub2RlLl9jb3VudD1iO3ZhciBfPXQubm9kZS5ncm91cHMsdz17fTtmb3IoZT0wO2U8Xy5sZW5ndGg7ZSsrKXt2YXIgVD1fW2VdO2Zvcih4PTA7eDxULmxlbmd0aDt4Kyspe3ZhciBrPVRbeF0sQT1iK2U7dy5oYXNPd25Qcm9wZXJ0eShrKT9pLndhcm4oIk5vZGUgIitrKyIgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgZ3JvdXAuIik6d1trXT1BfX12YXIgTT17c291cmNlOltdLHRhcmdldDpbXX07Zm9yKGU9MDtlPGEudmFsdWUubGVuZ3RoO2UrKyl7dmFyIFM9YS52YWx1ZVtlXSxFPWEuc291cmNlW2VdLEw9YS50YXJnZXRbZV07aWYoUz4wJiZzKEUsYikmJnMoTCxiKSYmKCF3Lmhhc093blByb3BlcnR5KEUpfHwhdy5oYXNPd25Qcm9wZXJ0eShMKXx8d1tFXSE9PXdbTF0pKXt3Lmhhc093blByb3BlcnR5KEwpJiYoTD13W0xdKSx3Lmhhc093blByb3BlcnR5KEUpJiYoRT13W0VdKSxMPStMLGhbRT0rRV09aFtMXT0hMDt2YXIgQz0iIjthLmxhYmVsJiZhLmxhYmVsW2VdJiYoQz1hLmxhYmVsW2VdKTt2YXIgUD1udWxsO0MmJnAuaGFzT3duUHJvcGVydHkoQykmJihQPXBbQ10pLGMucHVzaCh7cG9pbnROdW1iZXI6ZSxsYWJlbDpDLGNvbG9yOnU/YS5jb2xvcltlXTphLmNvbG9yLGN1c3RvbWRhdGE6Zj9hLmN1c3RvbWRhdGFbZV06YS5jdXN0b21kYXRhLGNvbmNlbnRyYXRpb25zY2FsZTpQLHNvdXJjZTpFLHRhcmdldDpMLHZhbHVlOitTfSksTS5zb3VyY2UucHVzaChFKSxNLnRhcmdldC5wdXNoKEwpfX12YXIgST1iK18ubGVuZ3RoLE89byhyLmNvbG9yKSx6PW8oci5jdXN0b21kYXRhKSxEPVtdO2ZvcihlPTA7ZTxJO2UrKylpZihoW2VdKXt2YXIgUj1yLmxhYmVsW2VdO0QucHVzaCh7Z3JvdXA6ZT5iLTEsY2hpbGRyZW5Ob2RlczpbXSxwb2ludE51bWJlcjplLGxhYmVsOlIsY29sb3I6Tz9yLmNvbG9yW2VdOnIuY29sb3IsY3VzdG9tZGF0YTp6P3IuY3VzdG9tZGF0YVtlXTpyLmN1c3RvbWRhdGF9KX12YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgYT1pLmluaXQyZEFycmF5KHQsMCksbz0wO288TWF0aC5taW4oZS5sZW5ndGgsci5sZW5ndGgpO28rKylpZihpLmlzSW5kZXgoZVtvXSx0KSYmaS5pc0luZGV4KHJbb10sdCkpe2lmKGVbb109PT1yW29dKXJldHVybiEwO2FbZVtvXV0ucHVzaChyW29dKX1yZXR1cm4gbihhKS5jb21wb25lbnRzLnNvbWUoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aD4xfSkpfShJLE0uc291cmNlLE0udGFyZ2V0KSYmKEY9ITApLHtjaXJjdWxhcjpGLGxpbmtzOmMsbm9kZXM6RCxncm91cHM6Xyxncm91cExvb2t1cDp3fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1jKGUpO3JldHVybiBhKHtjaXJjdWxhcjpyLmNpcmN1bGFyLF9ub2RlczpyLm5vZGVzLF9saW5rczpyLmxpbmtzLF9ncm91cHM6ci5ncm91cHMsX2dyb3VwTG9va3VwOnIuZ3JvdXBMb29rdXB9KX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ3VwIjo3NzMsInN0cm9uZ2x5LWNvbm5lY3RlZC1jb21wb25lbnRzIjo1NjR9XSwxMTg0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bm9kZVRleHRPZmZzZXRIb3Jpem9udGFsOjQsbm9kZVRleHRPZmZzZXRWZXJ0aWNhbDozLG5vZGVQYWRBY3Jvc3M6MTAsc2Fua2V5SXRlcmF0aW9uczo1MCxmb3JjZUl0ZXJhdGlvbnM6NSxmb3JjZVRpY2tzUGVyRnJhbWU6MTAsZHVyYXRpb246NTAwLGVhc2U6ImxpbmVhciIsY246e3NhbmtleToic2Fua2V5IixzYW5rZXlMaW5rczoic2Fua2V5LWxpbmtzIixzYW5rZXlMaW5rOiJzYW5rZXktbGluayIsc2Fua2V5Tm9kZVNldDoic2Fua2V5LW5vZGUtc2V0IixzYW5rZXlOb2RlOiJzYW5rZXktbm9kZSIsbm9kZVJlY3Q6Im5vZGUtcmVjdCIsbm9kZUxhYmVsOiJub2RlLWxhYmVsIn19fSx7fV0sMTE4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgidGlueWNvbG9yMiIpLHM9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHMsbD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hvdmVybGFiZWxfZGVmYXVsdHMiKSxjPXQoIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiKSx1PXQoIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyIpO2Z1bmN0aW9uIGYodCxlKXtmdW5jdGlvbiByKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLmxpbmsuY29sb3JzY2FsZXMscixhKX1yKCJsYWJlbCIpLHIoImNtaW4iKSxyKCJjbWF4IikscigiY29sb3JzY2FsZSIpfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9dmFyIGQ9bi5leHRlbmREZWVwKGguaG92ZXJsYWJlbCx0LmhvdmVybGFiZWwpLG09dC5ub2RlLGc9Yy5uZXdDb250YWluZXIoZSwibm9kZSIpO2Z1bmN0aW9uIHYodCxlKXtyZXR1cm4gbi5jb2VyY2UobSxnLGkubm9kZSx0LGUpfXYoImxhYmVsIiksdigiZ3JvdXBzIiksdigieCIpLHYoInkiKSx2KCJwYWQiKSx2KCJ0aGlja25lc3MiKSx2KCJsaW5lLmNvbG9yIiksdigibGluZS53aWR0aCIpLHYoImhvdmVyaW5mbyIsdC5ob3ZlcmluZm8pLGwobSxnLHYsZCksdigiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB5PWguY29sb3J3YXk7digiY29sb3IiLGcubGFiZWwubWFwKChmdW5jdGlvbih0LGUpe3JldHVybiBhLmFkZE9wYWNpdHkoZnVuY3Rpb24odCl7cmV0dXJuIHlbdCV5Lmxlbmd0aF19KGUpLC44KX0pKSksdigiY3VzdG9tZGF0YSIpO3ZhciB4PXQubGlua3x8e30sYj1jLm5ld0NvbnRhaW5lcihlLCJsaW5rIik7ZnVuY3Rpb24gXyh0LGUpe3JldHVybiBuLmNvZXJjZSh4LGIsaS5saW5rLHQsZSl9XygibGFiZWwiKSxfKCJzb3VyY2UiKSxfKCJ0YXJnZXQiKSxfKCJ2YWx1ZSIpLF8oImxpbmUuY29sb3IiKSxfKCJsaW5lLndpZHRoIiksXygiaG92ZXJpbmZvIix0LmhvdmVyaW5mbyksbCh4LGIsXyxkKSxfKCJob3ZlcnRlbXBsYXRlIik7dmFyIHcsVD1vKGgucGFwZXJfYmdjb2xvcikuZ2V0THVtaW5hbmNlKCk8LjMzMz8icmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpIjoicmdiYSgwLCAwLCAwLCAwLjIpIjtfKCJjb2xvciIsbi5yZXBlYXQoVCxiLnZhbHVlLmxlbmd0aCkpLF8oImN1c3RvbWRhdGEiKSx1KHgsYix7bmFtZToiY29sb3JzY2FsZXMiLGhhbmRsZUl0ZW1EZWZhdWx0czpmfSkscyhlLGgscCkscCgib3JpZW50YXRpb24iKSxwKCJ2YWx1ZWZvcm1hdCIpLHAoInZhbHVlc3VmZml4IiksZy54Lmxlbmd0aCYmZy55Lmxlbmd0aCYmKHc9ImZyZWVmb3JtIikscCgiYXJyYW5nZW1lbnQiLHcpLG4uY29lcmNlRm9udChwLCJ0ZXh0Zm9udCIsbi5leHRlbmRGbGF0KHt9LGguZm9udCkpLGUuX2xlbmd0aD1udWxsfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZngvaG92ZXJsYWJlbF9kZWZhdWx0cyI6Njc3LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSI6ODE2LCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiOjgyMiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4vYXR0cmlidXRlcyI6MTE4MSx0aW55Y29sb3IyOjU3Mn1dLDExODY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNhbmtleSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxzZWxlY3RQb2ludHM6dCgiLi9zZWxlY3QuanMiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMTgxLCIuL2Jhc2VfcGxvdCI6MTE4MiwiLi9jYWxjIjoxMTgzLCIuL2RlZmF1bHRzIjoxMTg1LCIuL3Bsb3QiOjExODcsIi4vc2VsZWN0LmpzIjoxMTg5fV0sMTE4NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPWkubnVtYmVyRm9ybWF0LG89dCgiLi9yZW5kZXIiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxsPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxjPXQoIi4vY29uc3RhbnRzIikuY24sdT1pLl87ZnVuY3Rpb24gZih0KXtyZXR1cm4iIiE9PXR9ZnVuY3Rpb24gaCh0LGUpe3JldHVybiB0LmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5PT09ZS50cmFjZUlkfSkpfWZ1bmN0aW9uIHAodCxlKXtuLnNlbGVjdCh0KS5zZWxlY3QoInBhdGgiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKSxuLnNlbGVjdCh0KS5zZWxlY3QoInJlY3QiKS5zdHlsZSgiZmlsbC1vcGFjaXR5IixlKX1mdW5jdGlvbiBkKHQpe24uc2VsZWN0KHQpLnNlbGVjdCgidGV4dC5uYW1lIikuc3R5bGUoImZpbGwiLCJibGFjayIpfWZ1bmN0aW9uIG0odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybi0xIT09dC5ub2RlLnNvdXJjZUxpbmtzLmluZGV4T2YoZS5saW5rKXx8LTEhPT10Lm5vZGUudGFyZ2V0TGlua3MuaW5kZXhPZihlLmxpbmspfX1mdW5jdGlvbiBnKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4tMSE9PWUubm9kZS5zb3VyY2VMaW5rcy5pbmRleE9mKHQubGluayl8fC0xIT09ZS5ub2RlLnRhcmdldExpbmtzLmluZGV4T2YodC5saW5rKX19ZnVuY3Rpb24gdih0LGUscil7ZSYmciYmaChyLGUpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIobShlKSkuY2FsbCh4LmJpbmQoMCxlLHIsITEpKX1mdW5jdGlvbiB5KHQsZSxyKXtlJiZyJiZoKHIsZSkuc2VsZWN0QWxsKCIuIitjLnNhbmtleUxpbmspLmZpbHRlcihtKGUpKS5jYWxsKGIuYmluZCgwLGUsciwhMSkpfWZ1bmN0aW9uIHgodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7aWYoIXQubGluay5jb25jZW50cmF0aW9uc2NhbGUpcmV0dXJuLjR9KSksaSYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtpZighdC5saW5rLmNvbmNlbnRyYXRpb25zY2FsZSlyZXR1cm4uNH0pKSxyJiZoKGUsdCkuc2VsZWN0QWxsKCIuIitjLnNhbmtleU5vZGUpLmZpbHRlcihnKHQpKS5jYWxsKHYpfWZ1bmN0aW9uIGIodCxlLHIsbil7dmFyIGk9bi5kYXR1bSgpLmxpbmsubGFiZWw7bi5zdHlsZSgiZmlsbC1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQudGlueUNvbG9yQWxwaGF9KSksaSYmaChlLHQpLnNlbGVjdEFsbCgiLiIrYy5zYW5rZXlMaW5rKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmxpbmsubGFiZWw9PT1pfSkpLnN0eWxlKCJmaWxsLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JBbHBoYX0pKSxyJiZoKGUsdCkuc2VsZWN0QWxsKGMuc2Fua2V5Tm9kZSkuZmlsdGVyKGcodCkpLmNhbGwoeSl9ZnVuY3Rpb24gXyh0LGUpe3ZhciByPXQuaG92ZXJsYWJlbHx8e30sbj1pLm5lc3RlZFByb3BlcnR5KHIsZSkuZ2V0KCk7cmV0dXJuIUFycmF5LmlzQXJyYXkobikmJm59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQuX2Z1bGxMYXlvdXQsaT1yLl9wYXBlcixoPXIuX3NpemUsbT0wO208dC5fZnVsbERhdGEubGVuZ3RoO20rKylpZih0Ll9mdWxsRGF0YVttXS52aXNpYmxlJiZ0Ll9mdWxsRGF0YVttXS50eXBlPT09Yy5zYW5rZXkmJiF0Ll9mdWxsRGF0YVttXS5fdmlld0luaXRpYWwpe3ZhciBnPXQuX2Z1bGxEYXRhW21dLm5vZGU7dC5fZnVsbERhdGFbbV0uX3ZpZXdJbml0aWFsPXtub2RlOntncm91cHM6Zy5ncm91cHMuc2xpY2UoKSx4OmcueC5zbGljZSgpLHk6Zy55LnNsaWNlKCl9fX12YXIgdz11KHQsInNvdXJjZToiKSsiICIsVD11KHQsInRhcmdldDoiKSsiICIsaz11KHQsImNvbmNlbnRyYXRpb246IikrIiAiLEE9dSh0LCJpbmNvbWluZyBmbG93IGNvdW50OiIpKyIgIixNPXUodCwib3V0Z29pbmcgZmxvdyBjb3VudDoiKSsiICI7byh0LGksZSx7d2lkdGg6aC53LGhlaWdodDpoLmgsbWFyZ2luOnt0OmgudCxyOmgucixiOmguYixsOmgubH19LHtsaW5rRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwoeC5iaW5kKDAscixpLCEwKSksInNraXAiIT09ci5saW5rLnRyYWNlLmxpbmsuaG92ZXJpbmZvJiYoci5saW5rLmZ1bGxEYXRhPXIubGluay50cmFjZSx0LmVtaXQoInBsb3RseV9ob3ZlciIse2V2ZW50Om4uZXZlbnQscG9pbnRzOltyLmxpbmtdfSkpKX0sZm9sbG93OmZ1bmN0aW9uKGUsaSl7aWYoITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSl7dmFyIG89aS5saW5rLnRyYWNlLmxpbms7aWYoIm5vbmUiIT09by5ob3ZlcmluZm8mJiJza2lwIiE9PW8uaG92ZXJpbmZvKXtmb3IodmFyIGM9W10sdT0wLGg9MDtoPGkuZmxvdy5saW5rcy5sZW5ndGg7aCsrKXt2YXIgbT1pLmZsb3cubGlua3NbaF07aWYoImNsb3Nlc3QiIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGV8fGkubGluay5wb2ludE51bWJlcj09PW0ucG9pbnROdW1iZXIpe2kubGluay5wb2ludE51bWJlcj09PW0ucG9pbnROdW1iZXImJih1PWgpLG0uZnVsbERhdGE9bS50cmFjZSxvPWkubGluay50cmFjZS5saW5rO3ZhciBnPXkobSksdj17dmFsdWVMYWJlbDphKGkudmFsdWVGb3JtYXQpKG0udmFsdWUpK2kudmFsdWVTdWZmaXh9O2MucHVzaCh7eDpnWzBdLHk6Z1sxXSxuYW1lOnYudmFsdWVMYWJlbCx0ZXh0OlttLmxhYmVsfHwiIix3K20uc291cmNlLmxhYmVsLFQrbS50YXJnZXQubGFiZWwsbS5jb25jZW50cmF0aW9uc2NhbGU/aythKCIlMC4yZiIpKG0uZmxvdy5sYWJlbENvbmNlbnRyYXRpb24pOiIiXS5maWx0ZXIoZikuam9pbigiPGJyPiIpLGNvbG9yOl8obywiYmdjb2xvciIpfHxsLmFkZE9wYWNpdHkobS5jb2xvciwxKSxib3JkZXJDb2xvcjpfKG8sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpfKG8sImZvbnQuZmFtaWx5IiksZm9udFNpemU6XyhvLCJmb250LnNpemUiKSxmb250Q29sb3I6XyhvLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpfKG8sIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246XyhvLCJhbGlnbiIpLGlkZWFsQWxpZ246bi5ldmVudC54PGdbMF0/InJpZ2h0IjoibGVmdCIsaG92ZXJ0ZW1wbGF0ZTpvLmhvdmVydGVtcGxhdGUsaG92ZXJ0ZW1wbGF0ZUxhYmVsczp2LGV2ZW50RGF0YTpbbV19KX19cy5sb25lSG92ZXIoYyx7Y29udGFpbmVyOnIuX2hvdmVybGF5ZXIubm9kZSgpLG91dGVyQ29udGFpbmVyOnIuX3BhcGVyLm5vZGUoKSxnZDp0LGFuY2hvckluZGV4OnV9KS5lYWNoKChmdW5jdGlvbigpe2kubGluay5jb25jZW50cmF0aW9uc2NhbGV8fHAodGhpcywuNjUpLGQodGhpcyl9KSl9fWZ1bmN0aW9uIHkodCl7dmFyIGUscjt0LmNpcmN1bGFyPyhlPSh0LmNpcmN1bGFyUGF0aERhdGEubGVmdElubmVyRXh0ZW50K3QuY2lyY3VsYXJQYXRoRGF0YS5yaWdodElubmVyRXh0ZW50KS8yLHI9dC5jaXJjdWxhclBhdGhEYXRhLnZlcnRpY2FsRnVsbEV4dGVudCk6KGU9KHQuc291cmNlLngxK3QudGFyZ2V0LngwKS8yLHI9KHQueTArdC55MSkvMik7dmFyIG49W2Uscl07cmV0dXJuInYiPT09dC50cmFjZS5vcmllbnRhdGlvbiYmbi5yZXZlcnNlKCksblswXSs9aS5wYXJlbnQudHJhbnNsYXRlWCxuWzFdKz1pLnBhcmVudC50cmFuc2xhdGVZLG59fSx1bmhvdmVyOmZ1bmN0aW9uKGUsaSxhKXshMSE9PXQuX2Z1bGxMYXlvdXQuaG92ZXJtb2RlJiYobi5zZWxlY3QoZSkuY2FsbChiLmJpbmQoMCxpLGEsITApKSwic2tpcCIhPT1pLmxpbmsudHJhY2UubGluay5ob3ZlcmluZm8mJihpLmxpbmsuZnVsbERhdGE9aS5saW5rLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5saW5rXX0pKSxzLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIpe3ZhciBpPXIubGluaztpLm9yaWdpbmFsRXZlbnQ9bi5ldmVudCx0Ll9ob3ZlcmRhdGE9W2ldLHMuY2xpY2sodCx7dGFyZ2V0OiEwfSl9fSxub2RlRXZlbnRzOntob3ZlcjpmdW5jdGlvbihlLHIsaSl7ITEhPT10Ll9mdWxsTGF5b3V0LmhvdmVybW9kZSYmKG4uc2VsZWN0KGUpLmNhbGwodixyLGkpLCJza2lwIiE9PXIubm9kZS50cmFjZS5ub2RlLmhvdmVyaW5mbyYmKHIubm9kZS5mdWxsRGF0YT1yLm5vZGUudHJhY2UsdC5lbWl0KCJwbG90bHlfaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbci5ub2RlXX0pKSl9LGZvbGxvdzpmdW5jdGlvbihlLGkpe2lmKCExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUpe3ZhciBvPWkubm9kZS50cmFjZS5ub2RlO2lmKCJub25lIiE9PW8uaG92ZXJpbmZvJiYic2tpcCIhPT1vLmhvdmVyaW5mbyl7dmFyIGw9bi5zZWxlY3QoZSkuc2VsZWN0KCIuIitjLm5vZGVSZWN0KSx1PXQuX2Z1bGxMYXlvdXQuX3BhcGVyZGl2Lm5vZGUoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxoPWwubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09aC5sZWZ0LTItdS5sZWZ0LGc9aC5yaWdodCsyLXUubGVmdCx2PWgudG9wK2guaGVpZ2h0LzQtdS50b3AseT17dmFsdWVMYWJlbDphKGkudmFsdWVGb3JtYXQpKGkubm9kZS52YWx1ZSkraS52YWx1ZVN1ZmZpeH07aS5ub2RlLmZ1bGxEYXRhPWkubm9kZS50cmFjZSx0Ll9mdWxsTGF5b3V0Ll9jYWxjSW52ZXJzZVRyYW5zZm9ybSh0KTt2YXIgeD10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVgsYj10Ll9mdWxsTGF5b3V0Ll9pbnZTY2FsZVksdz1zLmxvbmVIb3Zlcih7eDA6eCptLHgxOngqZyx5OmIqdixuYW1lOmEoaS52YWx1ZUZvcm1hdCkoaS5ub2RlLnZhbHVlKStpLnZhbHVlU3VmZml4LHRleHQ6W2kubm9kZS5sYWJlbCxBK2kubm9kZS50YXJnZXRMaW5rcy5sZW5ndGgsTStpLm5vZGUuc291cmNlTGlua3MubGVuZ3RoXS5maWx0ZXIoZikuam9pbigiPGJyPiIpLGNvbG9yOl8obywiYmdjb2xvciIpfHxpLnRpbnlDb2xvckh1ZSxib3JkZXJDb2xvcjpfKG8sImJvcmRlcmNvbG9yIiksZm9udEZhbWlseTpfKG8sImZvbnQuZmFtaWx5IiksZm9udFNpemU6XyhvLCJmb250LnNpemUiKSxmb250Q29sb3I6XyhvLCJmb250LmNvbG9yIiksbmFtZUxlbmd0aDpfKG8sIm5hbWVsZW5ndGgiKSx0ZXh0QWxpZ246XyhvLCJhbGlnbiIpLGlkZWFsQWxpZ246ImxlZnQiLGhvdmVydGVtcGxhdGU6by5ob3ZlcnRlbXBsYXRlLGhvdmVydGVtcGxhdGVMYWJlbHM6eSxldmVudERhdGE6W2kubm9kZV19LHtjb250YWluZXI6ci5faG92ZXJsYXllci5ub2RlKCksb3V0ZXJDb250YWluZXI6ci5fcGFwZXIubm9kZSgpLGdkOnR9KTtwKHcsLjg1KSxkKHcpfX19LHVuaG92ZXI6ZnVuY3Rpb24oZSxpLGEpeyExIT09dC5fZnVsbExheW91dC5ob3Zlcm1vZGUmJihuLnNlbGVjdChlKS5jYWxsKHksaSxhKSwic2tpcCIhPT1pLm5vZGUudHJhY2Uubm9kZS5ob3ZlcmluZm8mJihpLm5vZGUuZnVsbERhdGE9aS5ub2RlLnRyYWNlLHQuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtldmVudDpuLmV2ZW50LHBvaW50czpbaS5ub2RlXX0pKSxzLmxvbmVVbmhvdmVyKHIuX2hvdmVybGF5ZXIubm9kZSgpKSl9LHNlbGVjdDpmdW5jdGlvbihlLHIsaSl7dmFyIGE9ci5ub2RlO2Eub3JpZ2luYWxFdmVudD1uLmV2ZW50LHQuX2hvdmVyZGF0YT1bYV0sbi5zZWxlY3QoZSkuY2FsbCh5LHIsaSkscy5jbGljayh0LHt0YXJnZXQ6ITB9KX19fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi9jb25zdGFudHMiOjExODQsIi4vcmVuZGVyIjoxMTg4LCJAcGxvdGx5L2QzIjo1OH1dLDExODg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtZm9yY2UiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGVOdW1iZXIsYT10KCJAcGxvdGx5L2QzIiksbz10KCJAcGxvdGx5L2QzLXNhbmtleSIpLHM9dCgiQHBsb3RseS9kMy1zYW5rZXktY2lyY3VsYXIiKSxsPXQoIi4vY29uc3RhbnRzIiksYz10KCJ0aW55Y29sb3IyIiksdT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksZj10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxoPXQoIi4uLy4uL2xpYiIpLHA9aC5zdHJUcmFuc2xhdGUsZD1oLnN0clJvdGF0ZSxtPXQoIi4uLy4uL2xpYi9ndXAiKSxnPW0ua2V5RnVuLHY9bS5yZXBlYXQseT1tLnVud3JhcCx4PXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGI9dCgiLi4vLi4vcmVnaXN0cnkiKSxfPXQoIi4uLy4uL2NvbnN0YW50cy9hbGlnbm1lbnQiKSx3PV8uQ0FQX1NISUZULFQ9Xy5MSU5FX1NQQUNJTkc7ZnVuY3Rpb24gayh0LGUscil7dmFyIG4saT15KGUpLGE9aS50cmFjZSx1PWEuZG9tYWluLGY9ImgiPT09YS5vcmllbnRhdGlvbixwPWEubm9kZS5wYWQsZD1hLm5vZGUudGhpY2tuZXNzLG09dC53aWR0aCoodS54WzFdLXUueFswXSksZz10LmhlaWdodCoodS55WzFdLXUueVswXSksdj1pLl9ub2Rlcyx4PWkuX2xpbmtzLGI9aS5jaXJjdWxhcjsobj1iP3Muc2Fua2V5Q2lyY3VsYXIoKS5jaXJjdWxhckxpbmtHYXAoMCk6by5zYW5rZXkoKSkuaXRlcmF0aW9ucyhsLnNhbmtleUl0ZXJhdGlvbnMpLnNpemUoZj9bbSxnXTpbZyxtXSkubm9kZVdpZHRoKGQpLm5vZGVQYWRkaW5nKHApLm5vZGVJZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucG9pbnROdW1iZXJ9KSkubm9kZXModikubGlua3MoeCk7dmFyIF8sdyxULGs9bigpO2Zvcih2YXIgQSBpbiBuLm5vZGVQYWRkaW5nKCk8cCYmaC53YXJuKCJub2RlLnBhZCB3YXMgcmVkdWNlZCB0byAiLG4ubm9kZVBhZGRpbmcoKSwiIHRvIGZpdCB3aXRoaW4gdGhlIGZpZ3VyZS4iKSxpLl9ncm91cExvb2t1cCl7dmFyIE0sUz1wYXJzZUludChpLl9ncm91cExvb2t1cFtBXSk7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKylpZihrLm5vZGVzW19dLnBvaW50TnVtYmVyPT09Uyl7TT1rLm5vZGVzW19dO2JyZWFrfWlmKE0pe3ZhciBFPXtwb2ludE51bWJlcjpwYXJzZUludChBKSx4MDpNLngwLHgxOk0ueDEseTA6TS55MCx5MTpNLnkxLHBhcnRPZkdyb3VwOiEwLHNvdXJjZUxpbmtzOltdLHRhcmdldExpbmtzOltdfTtrLm5vZGVzLnVuc2hpZnQoRSksTS5jaGlsZHJlbk5vZGVzLnVuc2hpZnQoRSl9fWlmKGZ1bmN0aW9uKCl7Zm9yKF89MDtfPGsubm9kZXMubGVuZ3RoO18rKyl7dmFyIHQsZSxyPWsubm9kZXNbX10sbj17fTtmb3Iodz0wO3c8ci50YXJnZXRMaW5rcy5sZW5ndGg7dysrKXQ9KGU9ci50YXJnZXRMaW5rc1t3XSkuc291cmNlLnBvaW50TnVtYmVyKyI6IitlLnRhcmdldC5wb2ludE51bWJlcixuLmhhc093blByb3BlcnR5KHQpfHwoblt0XT1bXSksblt0XS5wdXNoKGUpO3ZhciBpPU9iamVjdC5rZXlzKG4pO2Zvcih3PTA7dzxpLmxlbmd0aDt3Kyspe3ZhciBhPW5bdD1pW3ddXSxvPTAscz17fTtmb3IoVD0wO1Q8YS5sZW5ndGg7VCsrKXNbKGU9YVtUXSkubGFiZWxdfHwoc1tlLmxhYmVsXT0wKSxzW2UubGFiZWxdKz1lLnZhbHVlLG8rPWUudmFsdWU7Zm9yKFQ9MDtUPGEubGVuZ3RoO1QrKykoZT1hW1RdKS5mbG93PXt2YWx1ZTpvLGxhYmVsQ29uY2VudHJhdGlvbjpzW2UubGFiZWxdL28sY29uY2VudHJhdGlvbjplLnZhbHVlL28sbGlua3M6YX0sZS5jb25jZW50cmF0aW9uc2NhbGUmJihlLmNvbG9yPWMoZS5jb25jZW50cmF0aW9uc2NhbGUoZS5mbG93LmxhYmVsQ29uY2VudHJhdGlvbikpKX12YXIgbD0wO2Zvcih3PTA7dzxyLnNvdXJjZUxpbmtzLmxlbmd0aDt3KyspbCs9ci5zb3VyY2VMaW5rc1t3XS52YWx1ZTtmb3Iodz0wO3c8ci5zb3VyY2VMaW5rcy5sZW5ndGg7dysrKShlPXIuc291cmNlTGlua3Nbd10pLmNvbmNlbnRyYXRpb25PdXQ9ZS52YWx1ZS9sO3ZhciB1PTA7Zm9yKHc9MDt3PHIudGFyZ2V0TGlua3MubGVuZ3RoO3crKyl1Kz1yLnRhcmdldExpbmtzW3ddLnZhbHVlO2Zvcih3PTA7dzxyLnRhcmdldExpbmtzLmxlbmd0aDt3KyspKGU9ci50YXJnZXRMaW5rc1t3XSkuY29uY2VucmF0aW9uSW49ZS52YWx1ZS91fX0oKSxhLm5vZGUueC5sZW5ndGgmJmEubm9kZS55Lmxlbmd0aCl7Zm9yKF89MDtfPE1hdGgubWluKGEubm9kZS54Lmxlbmd0aCxhLm5vZGUueS5sZW5ndGgsay5ub2Rlcy5sZW5ndGgpO18rKylpZihhLm5vZGUueFtfXSYmYS5ub2RlLnlbX10pe3ZhciBMPVthLm5vZGUueFtfXSptLGEubm9kZS55W19dKmddO2subm9kZXNbX10ueDA9TFswXS1kLzIsay5ub2Rlc1tfXS54MT1MWzBdK2QvMjt2YXIgQz1rLm5vZGVzW19dLnkxLWsubm9kZXNbX10ueTA7ay5ub2Rlc1tfXS55MD1MWzFdLUMvMixrLm5vZGVzW19dLnkxPUxbMV0rQy8yfWlmKCJzbmFwIj09PWEuYXJyYW5nZW1lbnQpIWZ1bmN0aW9uKHQpe3QuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixuLGk9MCxhPXQubGVuZ3RoO2Zvcih0LnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueTAtZS55MH0pKSxuPTA7bjxhOysrbikoZT10W25dKS55MD49aXx8KHI9aS1lLnkwKT4xZS02JiYoZS55MCs9cixlLnkxKz1yKSxpPWUueTErcH0pKX0oZnVuY3Rpb24odCl7dmFyIGUscixuPXQubWFwKChmdW5jdGlvbih0LGUpe3JldHVybnt4MDp0LngwLGluZGV4OmV9fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueDAtZS54MH0pKSxpPVtdLGE9LTEsbz0tMS8wO2ZvcihfPTA7XzxuLmxlbmd0aDtfKyspe3ZhciBzPXRbbltfXS5pbmRleF07cy54MD5vK2QmJihhKz0xLGU9cy54MCksbz1zLngwLGlbYV18fChpW2FdPVtdKSxpW2FdLnB1c2gocykscj1lLXMueDAscy54MCs9cixzLngxKz1yfXJldHVybiBpfSh2PWsubm9kZXMpKTtuLnVwZGF0ZShrKX1yZXR1cm57Y2lyY3VsYXI6YixrZXk6cix0cmFjZTphLGd1aWQ6aC5yYW5kc3RyKCksaG9yaXpvbnRhbDpmLHdpZHRoOm0saGVpZ2h0Omcsbm9kZVBhZDphLm5vZGUucGFkLG5vZGVMaW5lQ29sb3I6YS5ub2RlLmxpbmUuY29sb3Isbm9kZUxpbmVXaWR0aDphLm5vZGUubGluZS53aWR0aCxsaW5rTGluZUNvbG9yOmEubGluay5saW5lLmNvbG9yLGxpbmtMaW5lV2lkdGg6YS5saW5rLmxpbmUud2lkdGgsdmFsdWVGb3JtYXQ6YS52YWx1ZWZvcm1hdCx2YWx1ZVN1ZmZpeDphLnZhbHVlc3VmZml4LHRleHRGb250OmEudGV4dGZvbnQsdHJhbnNsYXRlWDp1LnhbMF0qdC53aWR0aCt0Lm1hcmdpbi5sLHRyYW5zbGF0ZVk6dC5oZWlnaHQtdS55WzFdKnQuaGVpZ2h0K3QubWFyZ2luLnQsZHJhZ1BhcmFsbGVsOmY/ZzptLGRyYWdQZXJwZW5kaWN1bGFyOmY/bTpnLGFycmFuZ2VtZW50OmEuYXJyYW5nZW1lbnQsc2Fua2V5Om4sZ3JhcGg6ayxmb3JjZUxheW91dHM6e30saW50ZXJhY3Rpb25TdGF0ZTp7ZHJhZ0luUHJvZ3Jlc3M6ITEsaG92ZXJlZDohMX19fWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWMoZS5jb2xvciksaT1lLnNvdXJjZS5sYWJlbCsifCIrZS50YXJnZXQubGFiZWwrIl9fIityO3JldHVybiBlLnRyYWNlPXQudHJhY2UsZS5jdXJ2ZU51bWJlcj10LnRyYWNlLmluZGV4LHtjaXJjdWxhcjp0LmNpcmN1bGFyLGtleTppLHRyYWNlSWQ6dC5rZXkscG9pbnROdW1iZXI6ZS5wb2ludE51bWJlcixsaW5rOmUsdGlueUNvbG9ySHVlOnUudGlueVJHQihuKSx0aW55Q29sb3JBbHBoYTpuLmdldEFscGhhKCksbGlua1BhdGg6TSxsaW5rTGluZUNvbG9yOnQubGlua0xpbmVDb2xvcixsaW5rTGluZVdpZHRoOnQubGlua0xpbmVXaWR0aCx2YWx1ZUZvcm1hdDp0LnZhbHVlRm9ybWF0LHZhbHVlU3VmZml4OnQudmFsdWVTdWZmaXgsc2Fua2V5OnQuc2Fua2V5LHBhcmVudDp0LGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZsb3c6ZS5mbG93fX1mdW5jdGlvbiBNKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHQubGluay5jaXJjdWxhcilyZXR1cm4gZT10Lmxpbmsscj1lLndpZHRoLzIsbj1lLmNpcmN1bGFyUGF0aERhdGEsInRvcCI9PT1lLmNpcmN1bGFyTGlua1R5cGU/Ik0gIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFkrcikrIiBMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnRhcmdldFkrcikrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLnJpZ2h0RnVsbEV4dGVudC1yKSsiICIrKG4udGFyZ2V0WS1uLnJpZ2h0U21hbGxBcmNSYWRpdXMpKyJMIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiTCIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsTGVmdElubmVyRXh0ZW50KyJMIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrKG4uc291cmNlWS1uLmxlZnRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLnNvdXJjZVgrIiAiKyhuLnNvdXJjZVktcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi5zb3VyY2VZLXIpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiKyhuLnNvdXJjZVktbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJMIisobi5sZWZ0RnVsbEV4dGVudC1yKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMtcikrIiAwIDAgMCAiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50K3IpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5yaWdodExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiK24udmVydGljYWxSaWdodElubmVyRXh0ZW50KyJMIisobi5yaWdodEZ1bGxFeHRlbnQrcikrIiAiKyhuLnRhcmdldFktbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRTbWFsbEFyY1JhZGl1cy1yKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJMIituLnRhcmdldFgrIiAiKyhuLnRhcmdldFktcikrIloiOiJNICIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZLXIpKyIgTCIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi50YXJnZXRZLXIpKyJBIisobi5yaWdodExhcmdlQXJjUmFkaXVzK3IpKyIgIisobi5yaWdodFNtYWxsQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5yaWdodEZ1bGxFeHRlbnQtcikrIiAiKyhuLnRhcmdldFkrbi5yaWdodFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50LXIpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5yaWdodElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkwiK24ubGVmdElubmVyRXh0ZW50KyIgIisobi52ZXJ0aWNhbEZ1bGxFeHRlbnQrcikrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cytyKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzK3IpKyIgMCAwIDAgIisobi5sZWZ0RnVsbEV4dGVudCtyKSsiICIrbi52ZXJ0aWNhbExlZnRJbm5lckV4dGVudCsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQrcikrIiAiKyhuLnNvdXJjZVkrbi5sZWZ0U21hbGxBcmNSYWRpdXMpKyJBIisobi5sZWZ0TGFyZ2VBcmNSYWRpdXMrcikrIiAiKyhuLmxlZnRTbWFsbEFyY1JhZGl1cytyKSsiIDAgMCAwICIrbi5sZWZ0SW5uZXJFeHRlbnQrIiAiKyhuLnNvdXJjZVktcikrIkwiK24uc291cmNlWCsiICIrKG4uc291cmNlWS1yKSsiTCIrbi5zb3VyY2VYKyIgIisobi5zb3VyY2VZK3IpKyJMIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4uc291cmNlWStyKSsiQSIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgIisobi5sZWZ0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiKyhuLmxlZnRGdWxsRXh0ZW50LXIpKyIgIisobi5zb3VyY2VZK24ubGVmdFNtYWxsQXJjUmFkaXVzKSsiTCIrKG4ubGVmdEZ1bGxFeHRlbnQtcikrIiAiK24udmVydGljYWxMZWZ0SW5uZXJFeHRlbnQrIkEiKyhuLmxlZnRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ubGVmdExhcmdlQXJjUmFkaXVzLXIpKyIgMCAwIDEgIituLmxlZnRJbm5lckV4dGVudCsiICIrKG4udmVydGljYWxGdWxsRXh0ZW50LXIpKyJMIituLnJpZ2h0SW5uZXJFeHRlbnQrIiAiKyhuLnZlcnRpY2FsRnVsbEV4dGVudC1yKSsiQSIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiICIrKG4ucmlnaHRMYXJnZUFyY1JhZGl1cy1yKSsiIDAgMCAxICIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIituLnZlcnRpY2FsUmlnaHRJbm5lckV4dGVudCsiTCIrKG4ucmlnaHRGdWxsRXh0ZW50K3IpKyIgIisobi50YXJnZXRZK24ucmlnaHRTbWFsbEFyY1JhZGl1cykrIkEiKyhuLnJpZ2h0TGFyZ2VBcmNSYWRpdXMtcikrIiAiKyhuLnJpZ2h0U21hbGxBcmNSYWRpdXMtcikrIiAwIDAgMSAiK24ucmlnaHRJbm5lckV4dGVudCsiICIrKG4udGFyZ2V0WStyKSsiTCIrbi50YXJnZXRYKyIgIisobi50YXJnZXRZK3IpKyJaIjt2YXIgZSxyLG4sYT10Lmxpbmsuc291cmNlLngxLG89dC5saW5rLnRhcmdldC54MCxzPWkoYSxvKSxsPXMoLjUpLGM9cyguNSksdT10LmxpbmsueTAtdC5saW5rLndpZHRoLzIsZj10LmxpbmsueTArdC5saW5rLndpZHRoLzIsaD10LmxpbmsueTEtdC5saW5rLndpZHRoLzIscD10LmxpbmsueTErdC5saW5rLndpZHRoLzI7cmV0dXJuIk0iK2ErIiwiK3UrIkMiK2wrIiwiK3UrIiAiK2MrIiwiK2grIiAiK28rIiwiK2grIkwiK28rIiwiK3ArIkMiK2MrIiwiK3ArIiAiK2wrIiwiK2YrIiAiK2ErIiwiK2YrIloifX1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9YyhlLmNvbG9yKSxuPWwubm9kZVBhZEFjcm9zcyxpPXQubm9kZVBhZC8yO2UuZHg9ZS54MS1lLngwLGUuZHk9ZS55MS1lLnkwO3ZhciBhPWUuZHgsbz1NYXRoLm1heCguNSxlLmR5KSxzPSJub2RlXyIrZS5wb2ludE51bWJlcjtyZXR1cm4gZS5ncm91cCYmKHM9aC5yYW5kc3RyKCkpLGUudHJhY2U9dC50cmFjZSxlLmN1cnZlTnVtYmVyPXQudHJhY2UuaW5kZXgse2luZGV4OmUucG9pbnROdW1iZXIsa2V5OnMscGFydE9mR3JvdXA6ZS5wYXJ0T2ZHcm91cHx8ITEsZ3JvdXA6ZS5ncm91cCx0cmFjZUlkOnQua2V5LHRyYWNlOnQudHJhY2Usbm9kZTplLG5vZGVQYWQ6dC5ub2RlUGFkLG5vZGVMaW5lQ29sb3I6dC5ub2RlTGluZUNvbG9yLG5vZGVMaW5lV2lkdGg6dC5ub2RlTGluZVdpZHRoLHRleHRGb250OnQudGV4dEZvbnQsc2l6ZTp0Lmhvcml6b250YWw/dC5oZWlnaHQ6dC53aWR0aCx2aXNpYmxlV2lkdGg6TWF0aC5jZWlsKGEpLHZpc2libGVIZWlnaHQ6byx6b25lWDotbix6b25lWTotaSx6b25lV2lkdGg6YSsyKm4sem9uZUhlaWdodDpvKzIqaSxsYWJlbFk6dC5ob3Jpem9udGFsP2UuZHkvMisxOmUuZHgvMisxLGxlZnQ6MT09PWUub3JpZ2luYWxMYXllcixzaXplQWNyb3NzOnQud2lkdGgsZm9yY2VMYXlvdXRzOnQuZm9yY2VMYXlvdXRzLGhvcml6b250YWw6dC5ob3Jpem9udGFsLGRhcmtCYWNrZ3JvdW5kOnIuZ2V0QnJpZ2h0bmVzcygpPD0xMjgsdGlueUNvbG9ySHVlOnUudGlueVJHQihyKSx0aW55Q29sb3JBbHBoYTpyLmdldEFscGhhKCksdmFsdWVGb3JtYXQ6dC52YWx1ZUZvcm1hdCx2YWx1ZVN1ZmZpeDp0LnZhbHVlU3VmZml4LHNhbmtleTp0LnNhbmtleSxncmFwaDp0LmdyYXBoLGFycmFuZ2VtZW50OnQuYXJyYW5nZW1lbnQsdW5pcXVlTm9kZUxhYmVsUGF0aElkOlt0Lmd1aWQsdC5rZXksc10uam9pbigiXyIpLGludGVyYWN0aW9uU3RhdGU6dC5pbnRlcmFjdGlvblN0YXRlLGZpZ3VyZTp0fX1mdW5jdGlvbiBFKHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHAodC5ub2RlLngwLnRvRml4ZWQoMyksdC5ub2RlLnkwLnRvRml4ZWQoMykpfSkpfWZ1bmN0aW9uIEwodCl7dC5jYWxsKEUpfWZ1bmN0aW9uIEModCxlKXt0LmNhbGwoTCksZS5hdHRyKCJkIixNKCkpfWZ1bmN0aW9uIFAodCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUueDEtdC5ub2RlLngwfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnZpc2libGVIZWlnaHR9KSl9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gdC5saW5rLndpZHRoPjF8fHQubGlua0xpbmVXaWR0aD4wfWZ1bmN0aW9uIE8odCl7cmV0dXJuIHAodC50cmFuc2xhdGVYLHQudHJhbnNsYXRlWSkrKHQuaG9yaXpvbnRhbD8ibWF0cml4KDEgMCAwIDEgMCAwKSI6Im1hdHJpeCgwIDEgMSAwIDAgMCkiKX1mdW5jdGlvbiB6KHQsZSxyKXt0Lm9uKCIuYmFzaWMiLG51bGwpLm9uKCJtb3VzZW92ZXIuYmFzaWMiLChmdW5jdGlvbih0KXt0LmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3N8fHQucGFydE9mR3JvdXB8fChyLmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD1bdGhpcyx0XSl9KSkub24oIm1vdXNlbW92ZS5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIuZm9sbG93KHRoaXMsdCksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9W3RoaXMsdF0pfSkpLm9uKCJtb3VzZW91dC5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzc3x8dC5wYXJ0T2ZHcm91cHx8KHIudW5ob3Zlcih0aGlzLHQsZSksdC5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQ9ITEpfSkpLm9uKCJjbGljay5iYXNpYyIsKGZ1bmN0aW9uKHQpe3QuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkJiYoci51bmhvdmVyKHRoaXMsdCxlKSx0LmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksdC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzfHx0LnBhcnRPZkdyb3VwfHxyLnNlbGVjdCh0aGlzLHQsZSl9KSl9ZnVuY3Rpb24gRCh0LGUscixpKXt2YXIgbz1hLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybnt4OnQubm9kZS54MCt0LnZpc2libGVXaWR0aC8yLHk6dC5ub2RlLnkwK3QudmlzaWJsZUhlaWdodC8yfX0pKS5vbigiZHJhZ3N0YXJ0IiwoZnVuY3Rpb24oYSl7aWYoImZpeGVkIiE9PWEuYXJyYW5nZW1lbnQmJihoLmVuc3VyZVNpbmdsZShpLl9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJkcmFnY292ZXIiLChmdW5jdGlvbih0KXtpLl9mdWxsTGF5b3V0Ll9kcmFnQ292ZXI9dH0pKSxoLnJhaXNlVG9Ub3AodGhpcyksYS5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPWEubm9kZSxGKGEubm9kZSksYS5pbnRlcmFjdGlvblN0YXRlLmhvdmVyZWQmJihyLm5vZGVFdmVudHMudW5ob3Zlci5hcHBseSgwLGEuaW50ZXJhY3Rpb25TdGF0ZS5ob3ZlcmVkKSxhLmludGVyYWN0aW9uU3RhdGUuaG92ZXJlZD0hMSksInNuYXAiPT09YS5hcnJhbmdlbWVudCkpe3ZhciBvPWEudHJhY2VJZCsifCIrYS5rZXk7YS5mb3JjZUxheW91dHNbb10/YS5mb3JjZUxheW91dHNbb10uYWxwaGEoMSk6ZnVuY3Rpb24odCxlLHIsaSl7IWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ueT0odFtlXS55MCt0W2VdLnkxKS8yLHRbZV0ueD0odFtlXS54MCt0W2VdLngxKS8yfShyLmdyYXBoLm5vZGVzKTt2YXIgYT1yLmdyYXBoLm5vZGVzLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHQub3JpZ2luYWxYPT09ci5ub2RlLm9yaWdpbmFsWH0pKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LnBhcnRPZkdyb3VwfSkpO3IuZm9yY2VMYXlvdXRzW2VdPW4uZm9yY2VTaW11bGF0aW9uKGEpLmFscGhhRGVjYXkoMCkuZm9yY2UoImNvbGxpZGUiLG4uZm9yY2VDb2xsaWRlKCkucmFkaXVzKChmdW5jdGlvbih0KXtyZXR1cm4gdC5keS8yK3Iubm9kZVBhZC8yfSkpLnN0cmVuZ3RoKDEpLml0ZXJhdGlvbnMobC5mb3JjZUl0ZXJhdGlvbnMpKS5mb3JjZSgiY29uc3RyYWluIixmdW5jdGlvbih0LGUscixuKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBhPXJbaV07YT09PW4uaW50ZXJhY3Rpb25TdGF0ZS5kcmFnSW5Qcm9ncmVzcz8oYS54PWEubGFzdERyYWdnZWRYLGEueT1hLmxhc3REcmFnZ2VkWSk6KGEudng9KGEub3JpZ2luYWxYLWEueCkvbC5mb3JjZVRpY2tzUGVyRnJhbWUsYS55PU1hdGgubWluKG4uc2l6ZS1hLmR5LzIsTWF0aC5tYXgoYS5keS8yLGEueSkpKSx0PU1hdGgubWF4KHQsTWF0aC5hYnMoYS52eCksTWF0aC5hYnMoYS52eSkpfSFuLmludGVyYWN0aW9uU3RhdGUuZHJhZ0luUHJvZ3Jlc3MmJnQ8LjEmJm4uZm9yY2VMYXlvdXRzW2VdLmFscGhhKCk+MCYmbi5mb3JjZUxheW91dHNbZV0uYWxwaGEoMCl9fSgwLGUsYSxyKSkuc3RvcCgpfSgwLG8sYSksZnVuY3Rpb24odCxlLHIsbixpKXt3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbiBhKCl7dmFyIG87Zm9yKG89MDtvPGwuZm9yY2VUaWNrc1BlckZyYW1lO28rKylyLmZvcmNlTGF5b3V0c1tuXS50aWNrKCk7aWYoZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXS55MD10W2VdLnktdFtlXS5keS8yLHRbZV0ueTE9dFtlXS55MCt0W2VdLmR5LHRbZV0ueDA9dFtlXS54LXRbZV0uZHgvMix0W2VdLngxPXRbZV0ueDArdFtlXS5keH0oci5ncmFwaC5ub2Rlcyksci5zYW5rZXkudXBkYXRlKHIuZ3JhcGgpLEModC5maWx0ZXIoQihyKSksZSksci5mb3JjZUxheW91dHNbbl0uYWxwaGEoKT4wKXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYSk7ZWxzZXt2YXIgcz1yLm5vZGUub3JpZ2luYWxYO3Iubm9kZS54MD1zLXIudmlzaWJsZVdpZHRoLzIsci5ub2RlLngxPXMrci52aXNpYmxlV2lkdGgvMixSKHIsaSl9fSkpfSh0LGUsYSxvLGkpfX0pKS5vbigiZHJhZyIsKGZ1bmN0aW9uKHIpe2lmKCJmaXhlZCIhPT1yLmFycmFuZ2VtZW50KXt2YXIgbj1hLmV2ZW50LngsaT1hLmV2ZW50Lnk7InNuYXAiPT09ci5hcnJhbmdlbWVudD8oci5ub2RlLngwPW4tci52aXNpYmxlV2lkdGgvMixyLm5vZGUueDE9bityLnZpc2libGVXaWR0aC8yLHIubm9kZS55MD1pLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1pK3IudmlzaWJsZUhlaWdodC8yKTooImZyZWVmb3JtIj09PXIuYXJyYW5nZW1lbnQmJihyLm5vZGUueDA9bi1yLnZpc2libGVXaWR0aC8yLHIubm9kZS54MT1uK3IudmlzaWJsZVdpZHRoLzIpLGk9TWF0aC5tYXgoMCxNYXRoLm1pbihyLnNpemUtci52aXNpYmxlSGVpZ2h0LzIsaSkpLHIubm9kZS55MD1pLXIudmlzaWJsZUhlaWdodC8yLHIubm9kZS55MT1pK3IudmlzaWJsZUhlaWdodC8yKSxGKHIubm9kZSksInNuYXAiIT09ci5hcnJhbmdlbWVudCYmKHIuc2Fua2V5LnVwZGF0ZShyLmdyYXBoKSxDKHQuZmlsdGVyKEIocikpLGUpKX19KSkub24oImRyYWdlbmQiLChmdW5jdGlvbih0KXtpZigiZml4ZWQiIT09dC5hcnJhbmdlbWVudCl7dC5pbnRlcmFjdGlvblN0YXRlLmRyYWdJblByb2dyZXNzPSExO2Zvcih2YXIgZT0wO2U8dC5ub2RlLmNoaWxkcmVuTm9kZXMubGVuZ3RoO2UrKyl0Lm5vZGUuY2hpbGRyZW5Ob2Rlc1tlXS54PXQubm9kZS54LHQubm9kZS5jaGlsZHJlbk5vZGVzW2VdLnk9dC5ub2RlLnk7InNuYXAiIT09dC5hcnJhbmdlbWVudCYmUih0LGkpfX0pKTt0Lm9uKCIuZHJhZyIsbnVsbCkuY2FsbChvKX1mdW5jdGlvbiBSKHQsZSl7Zm9yKHZhciByPVtdLG49W10saT0wO2k8dC5ncmFwaC5ub2Rlcy5sZW5ndGg7aSsrKXt2YXIgYT0odC5ncmFwaC5ub2Rlc1tpXS54MCt0LmdyYXBoLm5vZGVzW2ldLngxKS8yLG89KHQuZ3JhcGgubm9kZXNbaV0ueTArdC5ncmFwaC5ub2Rlc1tpXS55MSkvMjtyLnB1c2goYS90LmZpZ3VyZS53aWR0aCksbi5wdXNoKG8vdC5maWd1cmUuaGVpZ2h0KX1iLmNhbGwoIl9ndWlSZXN0eWxlIixlLHsibm9kZS54Ijpbcl0sIm5vZGUueSI6W25dfSx0LnRyYWNlLmluZGV4KS50aGVuKChmdW5jdGlvbigpe2UuX2Z1bGxMYXlvdXQuX2RyYWdDb3ZlciYmZS5fZnVsbExheW91dC5fZHJhZ0NvdmVyLnJlbW92ZSgpfSkpfWZ1bmN0aW9uIEYodCl7dC5sYXN0RHJhZ2dlZFg9dC54MCt0LmR4LzIsdC5sYXN0RHJhZ2dlZFk9dC55MCt0LmR5LzJ9ZnVuY3Rpb24gQih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZS5vcmlnaW5hbFg9PT10Lm5vZGUub3JpZ2luYWxYfX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbz0hMTtoLmVuc3VyZVNpbmdsZSh0Ll9mdWxsTGF5b3V0Ll9pbmZvbGF5ZXIsImciLCJmaXJzdC1yZW5kZXIiLChmdW5jdGlvbigpe289ITB9KSk7dmFyIHM9dC5fZnVsbExheW91dC5fZHJhZ0NvdmVyLG09ci5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB5KHQpLnRyYWNlLnZpc2libGV9KSkubWFwKGsuYmluZChudWxsLG4pKSxiPWUuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleSkuZGF0YShtLGcpO2IuZXhpdCgpLnJlbW92ZSgpLGIuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5LCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iikuc3R5bGUoInBvc2l0aW9uIiwiYWJzb2x1dGUiKS5zdHlsZSgibGVmdCIsMCkuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImdlb21ldHJpY1ByZWNpc2lvbiIpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImF1dG8iKS5hdHRyKCJ0cmFuc2Zvcm0iLE8pLGIuZWFjaCgoZnVuY3Rpb24oZSxyKXt0Ll9mdWxsRGF0YVtyXS5fc2Fua2V5PWU7dmFyIG49ImJnc2Fua2V5LSIrZS50cmFjZS51aWQrIi0iK3I7aC5lbnN1cmVTaW5nbGUodC5fZnVsbExheW91dC5fZHJhZ2dlcnMsInJlY3QiLG4pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Q9YS5zZWxlY3QoIi4iK24pLHQuX2Z1bGxEYXRhW3JdLl9iZ1JlY3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIikuYXR0cigid2lkdGgiLGUud2lkdGgpLmF0dHIoImhlaWdodCIsZS5oZWlnaHQpLmF0dHIoIngiLGUudHJhbnNsYXRlWCkuYXR0cigieSIsZS50cmFuc2xhdGVZKS5jbGFzc2VkKCJiZ3NhbmtleSIsITApLnN0eWxlKHtmaWxsOiJ0cmFuc3BhcmVudCIsInN0cm9rZS13aWR0aCI6MH0pfSkpLGIudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLE8pO3ZhciBfPWIuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleUxpbmtzKS5kYXRhKHYsZyk7Xy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobC5jbi5zYW5rZXlMaW5rcywhMCkuc3R5bGUoImZpbGwiLCJub25lIik7dmFyIEw9Xy5zZWxlY3RBbGwoIi4iK2wuY24uc2Fua2V5TGluaykuZGF0YSgoZnVuY3Rpb24odCl7cmV0dXJuIHQuZ3JhcGgubGlua3MuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0pKS5tYXAoQS5iaW5kKG51bGwsdCkpfSksZyk7TC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQobC5jbi5zYW5rZXlMaW5rLCEwKS5jYWxsKHosYixpLmxpbmtFdmVudHMpLEwuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQpP3UudGlueVJHQihjKHQubGlua0xpbmVDb2xvcikpOnQudGlueUNvbG9ySHVlfSkpLnN0eWxlKCJzdHJva2Utb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiBJKHQpP3Uub3BhY2l0eSh0LmxpbmtMaW5lQ29sb3IpOnQudGlueUNvbG9yQWxwaGF9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLnN0eWxlKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gSSh0KT90LmxpbmtMaW5lV2lkdGg6MX0pKS5hdHRyKCJkIixNKCkpLEwuc3R5bGUoIm9wYWNpdHkiLChmdW5jdGlvbigpe3JldHVybiB0Ll9jb250ZXh0LnN0YXRpY1Bsb3R8fG98fHM/MTowfSkpLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDEpLEwuZXhpdCgpLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpO3ZhciBDPWIuc2VsZWN0QWxsKCIuIitsLmNuLnNhbmtleU5vZGVTZXQpLmRhdGEodixnKTtDLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChsLmNuLnNhbmtleU5vZGVTZXQsITApLEMuc3R5bGUoImN1cnNvciIsKGZ1bmN0aW9uKHQpe3N3aXRjaCh0LmFycmFuZ2VtZW50KXtjYXNlImZpeGVkIjpyZXR1cm4iZGVmYXVsdCI7Y2FzZSJwZXJwZW5kaWN1bGFyIjpyZXR1cm4ibnMtcmVzaXplIjtkZWZhdWx0OnJldHVybiJtb3ZlIn19KSk7dmFyIFI9Qy5zZWxlY3RBbGwoIi4iK2wuY24uc2Fua2V5Tm9kZSkuZGF0YSgoZnVuY3Rpb24odCl7dmFyIGU9dC5ncmFwaC5ub2RlcztyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV0ub3JpZ2luYWxYPSh0W2VdLngwK3RbZV0ueDEpLzIsdFtlXS5vcmlnaW5hbFk9KHRbZV0ueTArdFtlXS55MSkvMiwtMT09PXIuaW5kZXhPZih0W2VdLm9yaWdpbmFsWCkmJnIucHVzaCh0W2VdLm9yaWdpbmFsWCk7Zm9yKHIuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC1lfSkpLGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdLm9yaWdpbmFsTGF5ZXJJbmRleD1yLmluZGV4T2YodFtlXS5vcmlnaW5hbFgpLHRbZV0ub3JpZ2luYWxMYXllcj10W2VdLm9yaWdpbmFsTGF5ZXJJbmRleC8oci5sZW5ndGgtMSl9KGUpLGUubWFwKFMuYmluZChudWxsLHQpKX0pLGcpO1IuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKGwuY24uc2Fua2V5Tm9kZSwhMCkuY2FsbChFKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKGUpe3JldHVybiF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QmJiFvfHxlLnBhcnRPZkdyb3VwPzA6MX0pKSxSLmNhbGwoeixiLGkubm9kZUV2ZW50cykuY2FsbChELEwsaSx0KSxSLnRyYW5zaXRpb24oKS5lYXNlKGwuZWFzZSkuZHVyYXRpb24obC5kdXJhdGlvbikuY2FsbChFKS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcnRPZkdyb3VwPzA6MX0pKSxSLmV4aXQoKS50cmFuc2l0aW9uKCkuZWFzZShsLmVhc2UpLmR1cmF0aW9uKGwuZHVyYXRpb24pLnN0eWxlKCJvcGFjaXR5IiwwKS5yZW1vdmUoKTt2YXIgRj1SLnNlbGVjdEFsbCgiLiIrbC5jbi5ub2RlUmVjdCkuZGF0YSh2KTtGLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChsLmNuLm5vZGVSZWN0LCEwKS5jYWxsKFApLEYuc3R5bGUoInN0cm9rZS13aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGVMaW5lV2lkdGh9KSkuc3R5bGUoInN0cm9rZSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1LnRpbnlSR0IoYyh0Lm5vZGVMaW5lQ29sb3IpKX0pKS5zdHlsZSgic3Ryb2tlLW9wYWNpdHkiLChmdW5jdGlvbih0KXtyZXR1cm4gdS5vcGFjaXR5KHQubm9kZUxpbmVDb2xvcil9KSkuc3R5bGUoImZpbGwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC50aW55Q29sb3JIdWV9KSkuc3R5bGUoImZpbGwtb3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRpbnlDb2xvckFscGhhfSkpLEYudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKS5jYWxsKFApO3ZhciBCPVIuc2VsZWN0QWxsKCIuIitsLmNuLm5vZGVMYWJlbCkuZGF0YSh2KTtCLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChsLmNuLm5vZGVMYWJlbCwhMCkuc3R5bGUoImN1cnNvciIsImRlZmF1bHQiKSxCLmF0dHIoImRhdGEtbm90ZXgiLDEpLnRleHQoKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5vZGUubGFiZWx9KSkuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9YS5zZWxlY3QodGhpcyk7Zi5mb250KHIsZS50ZXh0Rm9udCkseC5jb252ZXJ0VG9Uc3BhbnMocix0KX0pKS5zdHlsZSgidGV4dC1zaGFkb3ciLHgubWFrZVRleHRTaGFkb3codC5fZnVsbExheW91dC5wYXBlcl9iZ2NvbG9yKSkuYXR0cigidGV4dC1hbmNob3IiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5ob3Jpem9udGFsJiZ0LmxlZnQ/ImVuZCI6InN0YXJ0In0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1hLnNlbGVjdCh0aGlzKSxyPXgubGluZUNvdW50KGUpLG49dC50ZXh0Rm9udC5zaXplKigoci0xKSpULXcpLGk9dC5ub2RlTGluZVdpZHRoLzIrMyxvPSgodC5ob3Jpem9udGFsP3QudmlzaWJsZUhlaWdodDp0LnZpc2libGVXaWR0aCktbikvMjt0Lmhvcml6b250YWwmJih0LmxlZnQ/aT0taTppKz10LnZpc2libGVXaWR0aCk7dmFyIHM9dC5ob3Jpem9udGFsPyIiOiJzY2FsZSgtMSwxKSIrZCg5MCk7cmV0dXJuIHAodC5ob3Jpem9udGFsP2k6byx0Lmhvcml6b250YWw/bzppKStzfSkpLEIudHJhbnNpdGlvbigpLmVhc2UobC5lYXNlKS5kdXJhdGlvbihsLmR1cmF0aW9uKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vY29uc3RhbnRzL2FsaWdubWVudCI6NzQ0LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2d1cCI6NzczLCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiOjgwMiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9jb25zdGFudHMiOjExODQsIkBwbG90bHkvZDMiOjU4LCJAcGxvdGx5L2QzLXNhbmtleSI6NTcsIkBwbG90bHkvZDMtc2Fua2V5LWNpcmN1bGFyIjo1NiwiZDMtZm9yY2UiOjE1OSwiZDMtaW50ZXJwb2xhdGUiOjE2NCx0aW55Y29sb3IyOjU3Mn1dLDExODk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49dC5jZFswXS50cmFjZSxpPW4uX3NhbmtleS5ncmFwaC5ub2RlcyxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBvPWlbYV07aWYoIW8ucGFydE9mR3JvdXApe3ZhciBzPVsoby54MCtvLngxKS8yLChvLnkwK28ueTEpLzJdOyJ2Ij09PW4ub3JpZW50YXRpb24mJnMucmV2ZXJzZSgpLGUmJmUuY29udGFpbnMocywhMSxhLHQpJiZyLnB1c2goe3BvaW50TnVtYmVyOm8ucG9pbnROdW1iZXJ9KX19cmV0dXJuIHJ9fSx7fV0sMTE5MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl0W3JdLmk9cjtuLm1lcmdlQXJyYXkoZS50ZXh0LHQsInR4Iiksbi5tZXJnZUFycmF5KGUudGV4dHRlbXBsYXRlLHQsInR4dCIpLG4ubWVyZ2VBcnJheShlLmhvdmVydGV4dCx0LCJodHgiKSxuLm1lcmdlQXJyYXkoZS5jdXN0b21kYXRhLHQsImRhdGEiKSxuLm1lcmdlQXJyYXkoZS50ZXh0cG9zaXRpb24sdCwidHAiKSxlLnRleHRmb250JiYobi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGUudGV4dGZvbnQuc2l6ZSx0LCJ0cyIpLG4ubWVyZ2VBcnJheShlLnRleHRmb250LmNvbG9yLHQsInRjIiksbi5tZXJnZUFycmF5KGUudGV4dGZvbnQuZmFtaWx5LHQsInRmIikpO3ZhciBpPWUubWFya2VyO2lmKGkpe24ubWVyZ2VBcnJheUNhc3RQb3NpdGl2ZShpLnNpemUsdCwibXMiKSxuLm1lcmdlQXJyYXlDYXN0UG9zaXRpdmUoaS5vcGFjaXR5LHQsIm1vIiksbi5tZXJnZUFycmF5KGkuc3ltYm9sLHQsIm14Iiksbi5tZXJnZUFycmF5KGkuY29sb3IsdCwibWMiKTt2YXIgYT1pLmxpbmU7aS5saW5lJiYobi5tZXJnZUFycmF5KGEuY29sb3IsdCwibWxjIiksbi5tZXJnZUFycmF5Q2FzdFBvc2l0aXZlKGEud2lkdGgsdCwibWx3IikpO3ZhciBvPWkuZ3JhZGllbnQ7byYmIm5vbmUiIT09by50eXBlJiYobi5tZXJnZUFycmF5KG8udHlwZSx0LCJtZ3QiKSxuLm1lcmdlQXJyYXkoby5jb2xvcix0LCJtZ2MiKSl9fX0seyIuLi8uLi9saWIiOjc3Nn1dLDExOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLG89dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyIsYW5pbTohMH0seDA6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSxkeDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjEsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIixhbmltOiEwfSx5MDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGFuaW06ITB9LGR5Ont2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyIsYW5pbTohMH0seHBlcmlvZDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYyJ9LHhwZXJpb2QwOnt2YWxUeXBlOiJhbnkiLGVkaXRUeXBlOiJjYWxjIn0seXBlcmlvZDA6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx4cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx5cGVyaW9kYWxpZ25tZW50Ont2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJzdGFydCIsIm1pZGRsZSIsImVuZCJdLGRmbHQ6Im1pZGRsZSIsZWRpdFR5cGU6ImNhbGMifSx4aG92ZXJmb3JtYXQ6bigieCIpLHlob3ZlcmZvcm1hdDpuKCJ5Iiksc3RhY2tncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sb3JpZW50YXRpb246e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInYiLCJoIl0sZWRpdFR5cGU6ImNhbGMifSxncm91cG5vcm06e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIiIsImZyYWN0aW9uIiwicGVyY2VudCJdLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxzdGFja2dhcHM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImluZmVyIHplcm8iLCJpbnRlcnBvbGF0ZSJdLGRmbHQ6ImluZmVyIHplcm8iLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMifSx0ZXh0dGVtcGxhdGU6aSh7fSx7fSksaG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUifSxtb2RlOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsaW5lcyIsIm1hcmtlcnMiLCJ0ZXh0Il0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJvbjp7dmFsVHlwZToiZmxhZ2xpc3QiLGZsYWdzOlsicG9pbnRzIiwiZmlsbHMiXSxlZGl0VHlwZToic3R5bGUifSxob3ZlcnRlbXBsYXRlOmEoe30se2tleXM6dS5ldmVudERhdGFLZXlzfSksbGluZTp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGRmbHQ6MixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiLCJodiIsInZoIiwiaHZoIiwidmh2Il0sZGZsdDoibGluZWFyIixlZGl0VHlwZToicGxvdCJ9LHNtb290aGluZzp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MS4zLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGRhc2g6Zih7fSxsLHtlZGl0VHlwZToic3R5bGUifSksc2ltcGxpZnk6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToicGxvdCJ9LGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sY2xpcG9uYXhpczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToicGxvdCJ9LGZpbGw6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbIm5vbmUiLCJ0b3plcm95IiwidG96ZXJveCIsInRvbmV4dHkiLCJ0b25leHR4IiwidG9zZWxmIiwidG9uZXh0Il0sZWRpdFR5cGU6ImNhbGMifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LG1hcmtlcjpmKHtzeW1ib2w6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpjLnN5bWJvbExpc3QsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwLGVkaXRUeXBlOiJzdHlsZSJ9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDo2LGFycmF5T2s6ITAsZWRpdFR5cGU6ImNhbGMiLGFuaW06ITB9LG1heGRpc3BsYXllZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzaXplcmVmOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHNpemVtaW46e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0sc2l6ZW1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImRpYW1ldGVyIiwiYXJlYSJdLGRmbHQ6ImRpYW1ldGVyIixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6Zih7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsYXJyYXlPazohMCxlZGl0VHlwZToic3R5bGUiLGFuaW06ITB9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyLmxpbmUiLHthbmltOiEwfSkpLGdyYWRpZW50Ont0eXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJyYWRpYWwiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJub25lIl0sYXJyYXlPazohMCxkZmx0OiJub25lIixlZGl0VHlwZToiY2FsYyJ9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxvKCJtYXJrZXIiLHthbmltOiEwfSkpLHNlbGVjdGVkOnttYXJrZXI6e29wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZWRpdFR5cGU6InN0eWxlIn0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxzaXplOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHRleHRmb250Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LHVuc2VsZWN0ZWQ6e21hcmtlcjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxlZGl0VHlwZToic3R5bGUifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHNpemU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dGZvbnQ6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJtaWRkbGUgY2VudGVyIixhcnJheU9rOiEwLGVkaXRUeXBlOiJjYWxjIn0sdGV4dGZvbnQ6cyh7ZWRpdFR5cGU6ImNhbGMiLGNvbG9yRWRpdFR5cGU6InN0eWxlIixhcnJheU9rOiEwfSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL2ZvbnRfYXR0cmlidXRlcyI6ODU2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4vY29uc3RhbnRzIjoxMTk1fV0sMTE5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCIpLHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxsPXQoIi4vc3VidHlwZXMiKSxjPXQoIi4vY29sb3JzY2FsZV9jYWxjIiksdT10KCIuL2FycmF5c190b19jYWxjZGF0YSIpLGY9dCgiLi9jYWxjX3NlbGVjdGlvbiIpO2Z1bmN0aW9uIGgodCxlLHIsbixpLG8scyl7dmFyIGM9ZS5fbGVuZ3RoLHU9dC5fZnVsbExheW91dCxmPXIuX2lkLGg9bi5faWQscD11Ll9maXJzdFNjYXR0ZXJbbShlKV09PT1lLnVpZCxkPShnKGUsdSxyLG4pfHx7fSkub3JpZW50YXRpb24sdj1lLmZpbGw7ci5fbWluRHRpY2s9MCxuLl9taW5EdGljaz0wO3ZhciB5PXtwYWRkZWQ6ITB9LHg9e3BhZGRlZDohMH07cyYmKHkucHBhZD14LnBwYWQ9cyk7dmFyIGI9YzwyfHxpWzBdIT09aVtjLTFdfHxvWzBdIT09b1tjLTFdO2ImJigidG96ZXJveCI9PT12fHwidG9uZXh0eCI9PT12JiYocHx8ImgiPT09ZCkpP3kudG96ZXJvPSEwOihlLmVycm9yX3l8fHt9KS52aXNpYmxlfHwidG9uZXh0eSIhPT12JiYidG96ZXJveSIhPT12JiYobC5oYXNNYXJrZXJzKGUpfHxsLmhhc1RleHQoZSkpfHwoeS5wYWRkZWQ9ITEseS5wcGFkPTApLGImJigidG96ZXJveSI9PT12fHwidG9uZXh0eSI9PT12JiYocHx8InYiPT09ZCkpP3gudG96ZXJvPSEwOiJ0b25leHR4IiE9PXYmJiJ0b3plcm94IiE9PXZ8fCh4LnBhZGRlZD0hMSksZiYmKGUuX2V4dHJlbWVzW2ZdPWEuZmluZEV4dHJlbWVzKHIsaSx5KSksaCYmKGUuX2V4dHJlbWVzW2hdPWEuZmluZEV4dHJlbWVzKG4sbyx4KSl9ZnVuY3Rpb24gcCh0LGUpe2lmKGwuaGFzTWFya2Vycyh0KSl7dmFyIHIsbj10Lm1hcmtlcixvPTEuNioodC5tYXJrZXIuc2l6ZXJlZnx8MSk7aWYocj0iYXJlYSI9PT10Lm1hcmtlci5zaXplbW9kZT9mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5zcXJ0KCh0fHwwKS9vKSwzKX06ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KCh0fHwwKS9vLDMpfSxpLmlzQXJyYXlPclR5cGVkQXJyYXkobi5zaXplKSl7dmFyIHM9e3R5cGU6ImxpbmVhciJ9O2Euc2V0Q29udmVydChzKTtmb3IodmFyIGM9cy5tYWtlQ2FsY2RhdGEodC5tYXJrZXIsInNpemUiKSx1PW5ldyBBcnJheShlKSxmPTA7ZjxlO2YrKyl1W2ZdPXIoY1tmXSk7cmV0dXJuIHV9cmV0dXJuIHIobi5zaXplKX19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPW0oZSksbj10Ll9maXJzdFNjYXR0ZXI7bltyXXx8KG5bcl09ZS51aWQpfWZ1bmN0aW9uIG0odCl7dmFyIGU9dC5zdGFja2dyb3VwO3JldHVybiB0LnhheGlzK3QueWF4aXMrdC50eXBlKyhlPyItIitlOiIiKX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPXQuc3RhY2tncm91cDtpZihpKXt2YXIgYT1lLl9zY2F0dGVyU3RhY2tPcHRzW3IuX2lkK24uX2lkXVtpXSxvPSJ2Ij09PWEub3JpZW50YXRpb24/bjpyO3JldHVybiJsaW5lYXIiPT09by50eXBlfHwibG9nIj09PW8udHlwZT9hOnZvaWQgMH19ZS5leHBvcnRzPXtjYWxjOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbCxtLHYseSx4LGI9dC5fZnVsbExheW91dCxfPWEuZ2V0RnJvbUlkKHQsZS54YXhpc3x8IngiKSx3PWEuZ2V0RnJvbUlkKHQsZS55YXhpc3x8InkiKSxUPV8ubWFrZUNhbGNkYXRhKGUsIngiKSxrPXcubWFrZUNhbGNkYXRhKGUsInkiKSxBPW8oZSxfLCJ4IixUKSxNPW8oZSx3LCJ5IixrKSxTPUEudmFscyxFPU0udmFscyxMPWUuX2xlbmd0aCxDPW5ldyBBcnJheShMKSxQPWUuaWRzLEk9ZyhlLGIsXyx3KSxPPSExO2QoYixlKTt2YXIgeixEPSJ4IixSPSJ5IjtJPyhpLnB1c2hVbmlxdWUoSS50cmFjZUluZGljZXMsZS5fZXhwYW5kZWRJbmRleCksKHI9InYiPT09SS5vcmllbnRhdGlvbik/KFI9InMiLHo9IngiKTooRD0icyIsej0ieSIpLHk9ImludGVycG9sYXRlIj09PUkuc3RhY2tnYXBzKTpoKHQsZSxfLHcsUyxFLHAoZSxMKSk7dmFyIEY9ISFlLnhwZXJpb2RhbGlnbm1lbnQsQj0hIWUueXBlcmlvZGFsaWdubWVudDtmb3IobD0wO2w8TDtsKyspe3ZhciBOPUNbbF09e30saj1uKFNbbF0pLFU9bihFW2xdKTtqJiZVPyhOW0RdPVNbbF0sTltSXT1FW2xdLEYmJihOLm9yaWdfeD1UW2xdLE4ueEVuZD1BLmVuZHNbbF0sTi54U3RhcnQ9QS5zdGFydHNbbF0pLEImJihOLm9yaWdfeT1rW2xdLE4ueUVuZD1NLmVuZHNbbF0sTi55U3RhcnQ9TS5zdGFydHNbbF0pKTpJJiYocj9qOlUpPyhOW3pdPXI/U1tsXTpFW2xdLE4uZ2FwPSEwLHk/KE4ucz1zLE89ITApOk4ucz0wKTpOW0RdPU5bUl09cyxQJiYoTi5pZD1TdHJpbmcoUFtsXSkpfWlmKHUoQyxlKSxjKHQsZSksZihDLGUpLEkpe2ZvcihsPTA7bDxDLmxlbmd0aDspQ1tsXVt6XT09PXM/Qy5zcGxpY2UobCwxKTpsKys7aWYoaS5zb3J0KEMsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbel0tZVt6XXx8dC5pLWUuaX0pKSxPKXtmb3IobD0wO2w8Qy5sZW5ndGgtMSYmQ1tsXS5nYXA7KWwrKztmb3IoKHg9Q1tsXS5zKXx8KHg9Q1tsXS5zPTApLG09MDttPGw7bSsrKUNbbV0ucz14O2Zvcih2PUMubGVuZ3RoLTE7dj5sJiZDW3ZdLmdhcDspdi0tO2Zvcih4PUNbdl0ucyxtPUMubGVuZ3RoLTE7bT52O20tLSlDW21dLnM9eDtmb3IoO2w8djspaWYoQ1srK2xdLmdhcCl7Zm9yKG09bCsxO0NbbV0uZ2FwOyltKys7Zm9yKHZhciBWPUNbbC0xXVt6XSxIPUNbbC0xXS5zLHE9KENbbV0ucy1IKS8oQ1ttXVt6XS1WKTtsPG07KUNbbF0ucz1IKyhDW2xdW3pdLVYpKnEsbCsrfX19cmV0dXJuIEN9LGNhbGNNYXJrZXJTaXplOnAsY2FsY0F4aXNFeHBhbnNpb246aCxzZXRGaXJzdFNjYXR0ZXI6ZCxnZXRTdGFja09wdHM6Z319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2FsaWduX3BlcmlvZCI6ODI0LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3LCIuL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4vc3VidHlwZXMiOjEyMTYsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMTkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe24uaXNBcnJheU9yVHlwZWRBcnJheShlLnNlbGVjdGVkcG9pbnRzKSYmbi50YWdTZWxlY3RlZCh0LGUpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDExOTQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2NhbGMiKSxhPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXthLmhhc0xpbmVzKGUpJiZuKGUsImxpbmUiKSYmaSh0LGUse3ZhbHM6ZS5saW5lLmNvbG9yLGNvbnRhaW5lclN0cjoibGluZSIsY0xldHRlcjoiYyJ9KSxhLmhhc01hcmtlcnMoZSkmJihuKGUsIm1hcmtlciIpJiZpKHQsZSx7dmFsczplLm1hcmtlci5jb2xvcixjb250YWluZXJTdHI6Im1hcmtlciIsY0xldHRlcjoiYyJ9KSxuKGUsIm1hcmtlci5saW5lIikmJmkodCxlLHt2YWxzOmUubWFya2VyLmxpbmUuY29sb3IsY29udGFpbmVyU3RyOiJtYXJrZXIubGluZSIsY0xldHRlcjoiYyJ9KSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIjo2NDcsIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMTk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17UFRTX0xJTkVTT05MWToyMCxtaW5Ub2xlcmFuY2U6LjIsdG9sZXJhbmNlR3Jvd3RoOjEwLG1heFNjcmVlbnNBd2F5OjIwLGV2ZW50RGF0YUtleXM6W119fSx7fV0sMTE5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuL2NhbGMiKTtmdW5jdGlvbiBpKHQsZSxyLG4saSxhLG8pe2lbbl09ITA7dmFyIHM9e2k6bnVsbCxnYXA6ITAsczowfTtpZihzW29dPXIsdC5zcGxpY2UoZSwwLHMpLGUmJnI9PT10W2UtMV1bb10pe3ZhciBsPXRbZS0xXTtzLnM9bC5zLHMuaT1sLmkscy5nYXA9bC5nYXB9ZWxzZSBhJiYocy5zPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRbZS0xXSxhPXRbZSsxXTtyZXR1cm4gYT9pP2kucysoYS5zLWkucykqKHItaVtuXSkvKGFbbl0taVtuXSk6YS5zOmkuc30odCxlLHIsbykpO2V8fCh0WzBdLnQ9dFsxXS50LHRbMF0udHJhY2U9dFsxXS50cmFjZSxkZWxldGUgdFsxXS50LGRlbGV0ZSB0WzFdLnRyYWNlKX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnhheGlzLGE9ZS55YXhpcyxvPXIuX2lkK2EuX2lkLHM9dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1tvXTtpZihzKXt2YXIgbCxjLHUsZixoLHAsZCxtLGcsdix5LHgsYixfLHcsVD10LmNhbGNkYXRhO2Zvcih2YXIgayBpbiBzKXt2YXIgQT0odj1zW2tdKS50cmFjZUluZGljZXM7aWYoQS5sZW5ndGgpe2Zvcih5PSJpbnRlcnBvbGF0ZSI9PT12LnN0YWNrZ2Fwcyx4PXYuZ3JvdXBub3JtLCJ2Ij09PXYub3JpZW50YXRpb24/KGI9IngiLF89InkiKTooYj0ieSIsXz0ieCIpLHc9bmV3IEFycmF5KEEubGVuZ3RoKSxsPTA7bDx3Lmxlbmd0aDtsKyspd1tsXT0hMTtwPVRbQVswXV07dmFyIE09bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IobD0wO2w8cC5sZW5ndGg7bCsrKU1bbF09cFtsXVtiXTtmb3IobD0xO2w8QS5sZW5ndGg7bCsrKXtmb3IoaD1UW0FbbF1dLGM9dT0wO2M8aC5sZW5ndGg7YysrKXtmb3IoZD1oW2NdW2JdO2Q+TVt1XSYmdTxNLmxlbmd0aDt1KyspaShoLGMsTVt1XSxsLHcseSxiKSxjKys7aWYoZCE9PU1bdV0pe2ZvcihmPTA7ZjxsO2YrKylpKFRbQVtmXV0sdSxkLGYsdyx5LGIpO00uc3BsaWNlKHUsMCxkKX11Kyt9Zm9yKDt1PE0ubGVuZ3RoO3UrKylpKGgsYyxNW3VdLGwsdyx5LGIpLGMrK312YXIgUz1NLmxlbmd0aDtmb3IoYz0wO2M8cC5sZW5ndGg7YysrKXtmb3IobT1wW2NdW19dPXBbY10ucyxsPTE7bDxBLmxlbmd0aDtsKyspKGg9VFtBW2xdXSlbMF0udHJhY2UuX3Jhd0xlbmd0aD1oWzBdLnRyYWNlLl9sZW5ndGgsaFswXS50cmFjZS5fbGVuZ3RoPVMsbSs9aFtjXS5zLGhbY11bX109bTtpZih4KWZvcihnPSgiZnJhY3Rpb24iPT09eD9tOm0vMTAwKXx8MSxsPTA7bDxBLmxlbmd0aDtsKyspe3ZhciBFPVRbQVtsXV1bY107RVtfXS89ZyxFLnNOb3JtPUUucy9nfX1mb3IobD0wO2w8QS5sZW5ndGg7bCsrKXt2YXIgTD0oaD1UW0FbbF1dKVswXS50cmFjZSxDPW4uY2FsY01hcmtlclNpemUoTCxMLl9yYXdMZW5ndGgpLFA9QXJyYXkuaXNBcnJheShDKTtpZihDJiZ3W2xdfHxQKXt2YXIgST1DO2ZvcihDPW5ldyBBcnJheShTKSxjPTA7YzxTO2MrKylDW2NdPWhbY10uZ2FwPzA6UD9JW2hbY10uaV06SX12YXIgTz1uZXcgQXJyYXkoUyksej1uZXcgQXJyYXkoUyk7Zm9yKGM9MDtjPFM7YysrKU9bY109aFtjXS54LHpbY109aFtjXS55O24uY2FsY0F4aXNFeHBhbnNpb24odCxMLHIsYSxPLHosQyksaFswXS50Lm9yaWVudGF0aW9uPXYub3JpZW50YXRpb259fX19fX0seyIuL2NhbGMiOjExOTJ9XSwxMTk3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtpZigic2NhdHRlciI9PT1yLnR5cGUpe3ZhciBuPXIuZmlsbDtpZigibm9uZSIhPT1uJiYidG9zZWxmIiE9PW4mJihyLm9wYWNpdHk9dm9pZCAwLCJ0b25leHR5Ij09PW58fCJ0b25leHR4Ij09PW4pKWZvcih2YXIgaT1lLTE7aT49MDtpLS0pe3ZhciBhPXRbaV07aWYoInNjYXR0ZXIiPT09YS50eXBlJiZhLnhheGlzPT09ci54YXhpcyYmYS55YXhpcz09PXIueWF4aXMpe2Eub3BhY2l0eT12b2lkIDA7YnJlYWt9fX19fX0se31dLDExOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi9hdHRyaWJ1dGVzIiksbz10KCIuL2NvbnN0YW50cyIpLHM9dCgiLi9zdWJ0eXBlcyIpLGw9dCgiLi94eV9kZWZhdWx0cyIpLGM9dCgiLi9wZXJpb2RfZGVmYXVsdHMiKSx1PXQoIi4vc3RhY2tfZGVmYXVsdHMiKSxmPXQoIi4vbWFya2VyX2RlZmF1bHRzIiksaD10KCIuL2xpbmVfZGVmYXVsdHMiKSxwPXQoIi4vbGluZV9zaGFwZV9kZWZhdWx0cyIpLGQ9dCgiLi90ZXh0X2RlZmF1bHRzIiksbT10KCIuL2ZpbGxjb2xvcl9kZWZhdWx0cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixnKXtmdW5jdGlvbiB2KHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIHk9bCh0LGUsZyx2KTtpZih5fHwoZS52aXNpYmxlPSExKSxlLnZpc2libGUpe2ModCxlLGcsdiksdigieGhvdmVyZm9ybWF0IiksdigieWhvdmVyZm9ybWF0Iik7dmFyIHg9dSh0LGUsZyx2KSxiPSF4JiZ5PG8uUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjt2KCJ0ZXh0IiksdigiaG92ZXJ0ZXh0IiksdigibW9kZSIsYikscy5oYXNMaW5lcyhlKSYmKGgodCxlLHIsZyx2KSxwKHQsZSx2KSx2KCJjb25uZWN0Z2FwcyIpLHYoImxpbmUuc2ltcGxpZnkiKSkscy5oYXNNYXJrZXJzKGUpJiZmKHQsZSxyLGcsdix7Z3JhZGllbnQ6ITB9KSxzLmhhc1RleHQoZSkmJih2KCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxnLHYpKTt2YXIgXz1bXTsocy5oYXNNYXJrZXJzKGUpfHxzLmhhc1RleHQoZSkpJiYodigiY2xpcG9uYXhpcyIpLHYoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSxfLnB1c2goInBvaW50cyIpKSx2KCJmaWxsIix4P3guZmlsbERmbHQ6Im5vbmUiKSwibm9uZSIhPT1lLmZpbGwmJihtKHQsZSxyLHYpLHMuaGFzTGluZXMoZSl8fHAodCxlLHYpKTt2YXIgdz0oZS5saW5lfHx7fSkuY29sb3IsVD0oZS5tYXJrZXJ8fHt9KS5jb2xvcjsidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fF8ucHVzaCgiZmlsbHMiKSx2KCJob3Zlcm9uIixfLmpvaW4oIisiKXx8InBvaW50cyIpLCJmaWxscyIhPT1lLmhvdmVyb24mJnYoImhvdmVydGVtcGxhdGUiKTt2YXIgaz1pLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTtrKHQsZSx3fHxUfHxyLHtheGlzOiJ5In0pLGsodCxlLHd8fFR8fHIse2F4aXM6IngiLGluaGVyaXQ6InkifSksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsdil9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTE5NSwiLi9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4vbGluZV9kZWZhdWx0cyI6MTIwNCwiLi9saW5lX3NoYXBlX2RlZmF1bHRzIjoxMjA2LCIuL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4vc3RhY2tfZGVmYXVsdHMiOjEyMTQsIi4vc3VidHlwZXMiOjEyMTYsIi4vdGV4dF9kZWZhdWx0cyI6MTIxNywiLi94eV9kZWZhdWx0cyI6MTIxOH1dLDExOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89ITE7aWYoZS5tYXJrZXIpe3ZhciBzPWUubWFya2VyLmNvbG9yLGw9KGUubWFya2VyLmxpbmV8fHt9KS5jb2xvcjtzJiYhaShzKT9vPXM6bCYmIWkobCkmJihvPWwpfWEoImZpbGxjb2xvciIsbi5hZGRPcGFjaXR5KChlLmxpbmV8fHt9KS5jb2xvcnx8b3x8ciwuNSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2fV0sMTIwMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9e30sYT17X2Z1bGxMYXlvdXQ6cn0sbz1uLmdldEZyb21UcmFjZShhLGUsIngiKSxzPW4uZ2V0RnJvbVRyYWNlKGEsZSwieSIpO3JldHVybiBpLnhMYWJlbD1uLnRpY2tUZXh0KG8sby5jMmwodC54KSwhMCkudGV4dCxpLnlMYWJlbD1uLnRpY2tUZXh0KHMscy5jMmwodC55KSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTIwMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksaT10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYTtpZigibGluZXMiPT09dC5tb2RlKXJldHVybihyPXQubGluZS5jb2xvcikmJm4ub3BhY2l0eShyKT9yOnQuZmlsbGNvbG9yO2lmKCJub25lIj09PXQubW9kZSlyZXR1cm4gdC5maWxsP3QuZmlsbGNvbG9yOiIiO3ZhciBvPWUubWNjfHwodC5tYXJrZXJ8fHt9KS5jb2xvcixzPWUubWxjY3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS5jb2xvcjtyZXR1cm4oYT1vJiZuLm9wYWNpdHkobyk/bzpzJiZuLm9wYWNpdHkocykmJihlLm1sd3x8KCh0Lm1hcmtlcnx8e30pLmxpbmV8fHt9KS53aWR0aCk/czoiIik/bi5vcGFjaXR5KGEpPC4zP24uYWRkT3BhY2l0eShhLC4zKTphOihyPSh0LmxpbmV8fHt9KS5jb2xvcikmJm4ub3BhY2l0eShyKSYmaS5oYXNMaW5lcyh0KSYmdC5saW5lLndpZHRoP3I6dC5maWxsY29sb3J9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi9zdWJ0eXBlcyI6MTIxNn1dLDEyMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksYT10KCIuLi8uLi9yZWdpc3RyeSIpLG89dCgiLi9nZXRfdHJhY2VfY29sb3IiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxsPW4uZmlsbFRleHQ7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuY2QsZj11WzBdLnRyYWNlLGg9dC54YSxwPXQueWEsZD1oLmMycChlKSxtPXAuYzJwKHIpLGc9W2QsbV0sdj1mLmhvdmVyb258fCIiLHk9LTEhPT1mLm1vZGUuaW5kZXhPZigibWFya2VycyIpPzM6LjUseD0hIWYueHBlcmlvZGFsaWdubWVudCxiPSEhZi55cGVyaW9kYWxpZ25tZW50O2lmKC0xIT09di5pbmRleE9mKCJwb2ludHMiKSl7dmFyIF89ZnVuY3Rpb24odCl7dmFyIGU9TWF0aC5tYXgoeSx0Lm1yY3x8MCkscj1oLmMycCh0LngpLWQsbj1wLmMycCh0LnkpLW07cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChyKnIrbipuKS1lLDEteS9lKX0sdz1pLmdldERpc3RhbmNlRnVuY3Rpb24oYywoZnVuY3Rpb24odCl7aWYoeCl7dmFyIGU9aC5jMnAodC54U3RhcnQpLHI9aC5jMnAodC54RW5kKTtyZXR1cm4gZD49TWF0aC5taW4oZSxyKSYmZDw9TWF0aC5tYXgoZSxyKT8wOjEvMH12YXIgbj1NYXRoLm1heCgzLHQubXJjfHwwKSxpPTEtMS9uLGE9TWF0aC5hYnMoaC5jMnAodC54KS1kKTtyZXR1cm4gYTxuP2kqYS9uOmEtbitpfSksKGZ1bmN0aW9uKHQpe2lmKGIpe3ZhciBlPXAuYzJwKHQueVN0YXJ0KSxyPXAuYzJwKHQueUVuZCk7cmV0dXJuIG0+PU1hdGgubWluKGUscikmJm08PU1hdGgubWF4KGUscik/MDoxLzB9dmFyIG49TWF0aC5tYXgoMyx0Lm1yY3x8MCksaT0xLTEvbixhPU1hdGguYWJzKHAuYzJwKHQueSktbSk7cmV0dXJuIGE8bj9pKmEvbjphLW4raX0pLF8pO2lmKGkuZ2V0Q2xvc2VzdCh1LHcsdCksITEhPT10LmluZGV4KXt2YXIgVD11W3QuaW5kZXhdLGs9aC5jMnAoVC54LCEwKSxBPXAuYzJwKFQueSwhMCksTT1ULm1yY3x8MTt0LmluZGV4PVQuaTt2YXIgUz11WzBdLnQub3JpZW50YXRpb24sRT1TJiYoVC5zTm9ybXx8VC5zKSxMPSJoIj09PVM/RTp2b2lkIDAhPT1ULm9yaWdfeD9ULm9yaWdfeDpULngsQz0idiI9PT1TP0U6dm9pZCAwIT09VC5vcmlnX3k/VC5vcmlnX3k6VC55O3JldHVybiBuLmV4dGVuZEZsYXQodCx7Y29sb3I6byhmLFQpLHgwOmstTSx4MTprK00seExhYmVsVmFsOkwseTA6QS1NLHkxOkErTSx5TGFiZWxWYWw6QyxzcGlrZURpc3RhbmNlOl8oVCksaG92ZXJ0ZW1wbGF0ZTpmLmhvdmVydGVtcGxhdGV9KSxsKFQsZix0KSxhLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwiaG92ZXJJbmZvIikoVCxmLHQpLFt0XX19aWYoLTEhPT12LmluZGV4T2YoImZpbGxzIikmJmYuX3BvbHlnb25zKXt2YXIgUCxJLE8seixELFIsRixCLE4saj1mLl9wb2x5Z29ucyxVPVtdLFY9ITEsSD0xLzAscT0tMS8wLEc9MS8wLFk9LTEvMDtmb3IoUD0wO1A8ai5sZW5ndGg7UCsrKShPPWpbUF0pLmNvbnRhaW5zKGcpJiYoVj0hVixVLnB1c2goTyksRz1NYXRoLm1pbihHLE8ueW1pbiksWT1NYXRoLm1heChZLE8ueW1heCkpO2lmKFYpe3ZhciBXPSgoRz1NYXRoLm1heChHLDApKSsoWT1NYXRoLm1pbihZLHAuX2xlbmd0aCkpKS8yO2ZvcihQPTA7UDxVLmxlbmd0aDtQKyspZm9yKHo9VVtQXS5wdHMsST0xO0k8ei5sZW5ndGg7SSsrKShCPXpbSS0xXVsxXSk+VyE9KE49eltJXVsxXSk+PVcmJihSPXpbSS0xXVswXSxGPXpbSV1bMF0sTi1CJiYoRD1SKyhGLVIpKihXLUIpLyhOLUIpLEg9TWF0aC5taW4oSCxEKSxxPU1hdGgubWF4KHEsRCkpKTtIPU1hdGgubWF4KEgsMCkscT1NYXRoLm1pbihxLGguX2xlbmd0aCk7dmFyIFg9cy5kZWZhdWx0TGluZTtyZXR1cm4gcy5vcGFjaXR5KGYuZmlsbGNvbG9yKT9YPWYuZmlsbGNvbG9yOnMub3BhY2l0eSgoZi5saW5lfHx7fSkuY29sb3IpJiYoWD1mLmxpbmUuY29sb3IpLG4uZXh0ZW5kRmxhdCh0LHtkaXN0YW5jZTp0Lm1heEhvdmVyRGlzdGFuY2UseDA6SCx4MTpxLHkwOlcseTE6Vyxjb2xvcjpYLGhvdmVydGVtcGxhdGU6ITF9KSxkZWxldGUgdC5pbmRleCxmLnRleHQmJiFBcnJheS5pc0FycmF5KGYudGV4dCk/dC50ZXh0PVN0cmluZyhmLnRleHQpOnQudGV4dD1mLm5hbWUsW3RdfX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9nZXRfdHJhY2VfY29sb3IiOjEyMDF9XSwxMjAzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9e2hhc0xpbmVzOm4uaGFzTGluZXMsaGFzTWFya2VyczpuLmhhc01hcmtlcnMsaGFzVGV4dDpuLmhhc1RleHQsaXNCdWJibGU6bi5pc0J1YmJsZSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2Nyb3NzX3RyYWNlX2NhbGMiKSxhcnJheXNUb0NhbGNkYXRhOnQoIi4vYXJyYXlzX3RvX2NhbGNkYXRhIikscGxvdDp0KCIuL3Bsb3QiKSxjb2xvcmJhcjp0KCIuL21hcmtlcl9jb2xvcmJhciIpLGZvcm1hdExhYmVsczp0KCIuL2Zvcm1hdF9sYWJlbHMiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksYW5pbWF0YWJsZTohMCxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlciIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImNhcnRlc2lhbiIsInN2ZyIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi9hcnJheXNfdG9fY2FsY2RhdGEiOjExOTAsIi4vYXR0cmlidXRlcyI6MTE5MSwiLi9jYWxjIjoxMTkyLCIuL2Nyb3NzX3RyYWNlX2NhbGMiOjExOTYsIi4vY3Jvc3NfdHJhY2VfZGVmYXVsdHMiOjExOTcsIi4vZGVmYXVsdHMiOjExOTgsIi4vZm9ybWF0X2xhYmVscyI6MTIwMCwiLi9ob3ZlciI6MTIwMiwiLi9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vcGxvdCI6MTIxMiwiLi9zZWxlY3QiOjEyMTMsIi4vc3R5bGUiOjEyMTUsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMjA0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmlzQXJyYXlPclR5cGVkQXJyYXksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvaGVscGVycyIpLmhhc0NvbG9yc2NhbGUsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbyxzLGwpe3ZhciBjPSh0Lm1hcmtlcnx8e30pLmNvbG9yOyhzKCJsaW5lLmNvbG9yIixyKSxpKHQsImxpbmUiKSk/YSh0LGUsbyxzLHtwcmVmaXg6ImxpbmUuIixjTGV0dGVyOiJjIn0pOnMoImxpbmUuY29sb3IiLCFuKGMpJiZjfHxyKTtzKCJsaW5lLndpZHRoIiksKGx8fHt9KS5ub0Rhc2h8fHMoImxpbmUuZGFzaCIpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiOjY1MCwiLi4vLi4vbGliIjo3NzZ9XSwxMjA1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKSxpPW4uQkFETlVNLGE9bi5MT0dfQ0xJUCxvPWErLjUscz1hLS41LGw9dCgiLi4vLi4vbGliIiksYz1sLnNlZ21lbnRzSW50ZXJzZWN0LHU9bC5jb25zdHJhaW4sZj10KCIuL2NvbnN0YW50cyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLG4sYSxoLHAsZCxtLGcsdix5LHgsYixfLHcsVCxrLEEsTSxTPWUueGF4aXMsRT1lLnlheGlzLEw9ImxvZyI9PT1TLnR5cGUsQz0ibG9nIj09PUUudHlwZSxQPVMuX2xlbmd0aCxJPUUuX2xlbmd0aCxPPWUuY29ubmVjdEdhcHMsej1lLmJhc2VUb2xlcmFuY2UsRD1lLnNoYXBlLFI9ImxpbmVhciI9PT1ELEY9ZS5maWxsJiYibm9uZSIhPT1lLmZpbGwsQj1bXSxOPWYubWluVG9sZXJhbmNlLGo9dC5sZW5ndGgsVT1uZXcgQXJyYXkoaiksVj0wO2Z1bmN0aW9uIEgocil7dmFyIG49dFtyXTtpZighbilyZXR1cm4hMTt2YXIgYT1lLmxpbmVhcml6ZWQ/Uy5sMnAobi54KTpTLmMycChuLngpLGw9ZS5saW5lYXJpemVkP0UubDJwKG4ueSk6RS5jMnAobi55KTtpZihhPT09aSl7aWYoTCYmKGE9Uy5jMnAobi54LCEwKSksYT09PWkpcmV0dXJuITE7QyYmbD09PWkmJihhKj1NYXRoLmFicyhTLl9tKkkqKFMuX20+MD9vOnMpLyhFLl9tKlAqKEUuX20+MD9vOnMpKSkpLGEqPTFlM31pZihsPT09aSl7aWYoQyYmKGw9RS5jMnAobi55LCEwKSksbD09PWkpcmV0dXJuITE7bCo9MWUzfXJldHVyblthLGxdfWZ1bmN0aW9uIHEodCxlLHIsbil7dmFyIGk9ci10LGE9bi1lLG89LjUtdCxzPS41LWUsbD1pKmkrYSphLGM9aSpvK2EqcztpZihjPjAmJmM8bCl7dmFyIHU9byphLXMqaTtpZih1KnU8bClyZXR1cm4hMH19ZnVuY3Rpb24gRyh0LGUpe3ZhciByPXRbMF0vUCxuPXRbMV0vSSxpPU1hdGgubWF4KDAsLXIsci0xLC1uLG4tMSk7cmV0dXJuIGkmJnZvaWQgMCE9PUEmJnEocixuLEEsTSkmJihpPTApLGkmJmUmJnEocixuLGVbMF0vUCxlWzFdL0kpJiYoaT0wKSwoMStmLnRvbGVyYW5jZUdyb3d0aCppKSp6fWZ1bmN0aW9uIFkodCxlKXt2YXIgcj10WzBdLWVbMF0sbj10WzFdLWVbMV07cmV0dXJuIE1hdGguc3FydChyKnIrbipuKX12YXIgVyxYLFosSixLLFEsJCx0dD1mLm1heFNjcmVlbnNBd2F5LGV0PS1QKnR0LHJ0PVAqKDErdHQpLG50PS1JKnR0LGl0PUkqKDErdHQpLGF0PVtbZXQsbnQscnQsbnRdLFtydCxudCxydCxpdF0sW3J0LGl0LGV0LGl0XSxbZXQsaXQsZXQsbnRdXTtmdW5jdGlvbiBvdCh0KXtpZih0WzBdPGV0fHx0WzBdPnJ0fHx0WzFdPG50fHx0WzFdPml0KXJldHVyblt1KHRbMF0sZXQscnQpLHUodFsxXSxudCxpdCldfWZ1bmN0aW9uIHN0KHQsZSl7cmV0dXJuIHRbMF09PT1lWzBdJiYodFswXT09PWV0fHx0WzBdPT09cnQpfHwodFsxXT09PWVbMV0mJih0WzFdPT09bnR8fHRbMV09PT1pdCl8fHZvaWQgMCl9ZnVuY3Rpb24gbHQodCxlLHIpe3JldHVybiBmdW5jdGlvbihuLGkpe3ZhciBhPW90KG4pLG89b3QoaSkscz1bXTtpZihhJiZvJiZzdChhLG8pKXJldHVybiBzO2EmJnMucHVzaChhKSxvJiZzLnB1c2gobyk7dmFyIGM9MipsLmNvbnN0cmFpbigoblt0XStpW3RdKS8yLGUsciktKChhfHxuKVt0XSsob3x8aSlbdF0pO2MmJigoYSYmbz9jPjA9PWFbdF0+b1t0XT9hOm86YXx8bylbdF0rPWMpO3JldHVybiBzfX1mdW5jdGlvbiBjdCh0KXt2YXIgZT10WzBdLHI9dFsxXSxuPWU9PT1VW1YtMV1bMF0saT1yPT09VVtWLTFdWzFdO2lmKCFufHwhaSlpZihWPjEpe3ZhciBhPWU9PT1VW1YtMl1bMF0sbz1yPT09VVtWLTJdWzFdO24mJihlPT09ZXR8fGU9PT1ydCkmJmE/bz9WLS06VVtWLTFdPXQ6aSYmKHI9PT1udHx8cj09PWl0KSYmbz9hP1YtLTpVW1YtMV09dDpVW1YrK109dH1lbHNlIFVbVisrXT10fWZ1bmN0aW9uIHV0KHQpe1VbVi0xXVswXSE9PXRbMF0mJlVbVi0xXVsxXSE9PXRbMV0mJmN0KFtaLEpdKSxjdCh0KSxLPW51bGwsWj1KPTB9ZnVuY3Rpb24gZnQodCl7aWYoQT10WzBdL1AsTT10WzFdL0ksVz10WzBdPGV0P2V0OnRbMF0+cnQ/cnQ6MCxYPXRbMV08bnQ/bnQ6dFsxXT5pdD9pdDowLFd8fFgpe2lmKFYpaWYoSyl7dmFyIGU9JChLLHQpO2UubGVuZ3RoPjEmJih1dChlWzBdKSxVW1YrK109ZVsxXSl9ZWxzZSBRPSQoVVtWLTFdLHQpWzBdLFVbVisrXT1RO2Vsc2UgVVtWKytdPVtXfHx0WzBdLFh8fHRbMV1dO3ZhciByPVVbVi0xXTtXJiZYJiYoclswXSE9PVd8fHJbMV0hPT1YKT8oSyYmKFohPT1XJiZKIT09WD9jdChaJiZKPyhuPUssYT0oaT10KVswXS1uWzBdLG89KGlbMV0tblsxXSkvYSwoblsxXSppWzBdLWlbMV0qblswXSkvYT4wP1tvPjA/ZXQ6cnQsaXRdOltvPjA/cnQ6ZXQsbnRdKTpbWnx8VyxKfHxYXSk6WiYmSiYmY3QoW1osSl0pKSxjdChbVyxYXSkpOlotVyYmSi1YJiZjdChbV3x8WixYfHxKXSksSz10LFo9VyxKPVh9ZWxzZSBLJiZ1dCgkKEssdClbMF0pLFVbVisrXT10O3ZhciBuLGksYSxvfWZvcigibGluZWFyIj09PUR8fCJzcGxpbmUiPT09RD8kPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MCxpPTA7aTw0O2krKyl7dmFyIGE9YXRbaV0sbz1jKHRbMF0sdFsxXSxlWzBdLGVbMV0sYVswXSxhWzFdLGFbMl0sYVszXSk7byYmKCFufHxNYXRoLmFicyhvLngtclswXVswXSk+MXx8TWF0aC5hYnMoby55LXJbMF1bMV0pPjEpJiYobz1bby54LG8ueV0sbiYmWShvLHQpPFkoclswXSx0KT9yLnVuc2hpZnQobyk6ci5wdXNoKG8pLG4rKyl9cmV0dXJuIHJ9OiJodiI9PT1EfHwidmgiPT09RD8kPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W10sbj1vdCh0KSxpPW90KGUpO3JldHVybiBuJiZpJiZzdChuLGkpfHwobiYmci5wdXNoKG4pLGkmJnIucHVzaChpKSkscn06Imh2aCI9PT1EPyQ9bHQoMCxldCxydCk6InZodiI9PT1EJiYoJD1sdCgxLG50LGl0KSkscj0wO3I8ajtyKyspaWYobj1IKHIpKXtmb3IoVj0wLEs9bnVsbCxmdChuKSxyKys7cjxqO3IrKyl7aWYoIShoPUgocikpKXtpZihPKWNvbnRpbnVlO2JyZWFrfWlmKFImJmUuc2ltcGxpZnkpe3ZhciBodD1IKHIrMSk7aWYoeT1ZKGgsbiksRiYmKDA9PT1WfHxWPT09ai0xKXx8ISh5PEcoaCxodCkqTikpe2ZvcihnPVsoaFswXS1uWzBdKS95LChoWzFdLW5bMV0pL3ldLHA9bix4PXksYj13PVQ9MCxtPSExLGE9aCxyKys7cjx0Lmxlbmd0aDtyKyspe2lmKGQ9aHQsaHQ9SChyKzEpLCFkKXtpZihPKWNvbnRpbnVlO2JyZWFrfWlmKGs9KHY9W2RbMF0tblswXSxkWzFdLW5bMV1dKVswXSpnWzFdLXZbMV0qZ1swXSx3PU1hdGgubWluKHcsayksKFQ9TWF0aC5tYXgoVCxrKSktdz5HKGQsaHQpKWJyZWFrO2E9ZCwoXz12WzBdKmdbMF0rdlsxXSpnWzFdKT54Pyh4PV8saD1kLG09ITEpOl88YiYmKGI9XyxwPWQsbT0hMCl9aWYobT8oZnQoaCksYSE9PXAmJmZ0KHApKToocCE9PW4mJmZ0KHApLGEhPT1oJiZmdChoKSksZnQoYSkscj49dC5sZW5ndGh8fCFkKWJyZWFrO2Z0KGQpLG49ZH19ZWxzZSBmdChoKX1LJiZjdChbWnx8S1swXSxKfHxLWzFdXSksQi5wdXNoKFUuc2xpY2UoMCxWKSl9cmV0dXJuIEJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4vY29uc3RhbnRzIjoxMTk1fV0sMTIwNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpeyJzcGxpbmUiPT09cigibGluZS5zaGFwZSIpJiZyKCJsaW5lLnNtb290aGluZyIpfX0se31dLDEyMDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49e3RvbmV4dHg6MSx0b25leHR5OjEsdG9uZXh0OjF9O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGksYSxvLHMsbCxjPXt9LHU9ITEsZj0tMSxoPTAscD0tMTtmb3IoYT0wO2E8ci5sZW5ndGg7YSsrKShvPShpPXJbYV1bMF0udHJhY2UpLnN0YWNrZ3JvdXB8fCIiKT9vIGluIGM/bD1jW29dOihsPWNbb109aCxoKyspOmkuZmlsbCBpbiBuJiZwPj0wP2w9cDoobD1wPWgsaCsrKSxsPGYmJih1PSEwKSxpLl9ncm91cEluZGV4PWY9bDt2YXIgZD1yLnNsaWNlKCk7dSYmZC5zb3J0KChmdW5jdGlvbih0LGUpe3ZhciByPXRbMF0udHJhY2Usbj1lWzBdLnRyYWNlO3JldHVybiByLl9ncm91cEluZGV4LW4uX2dyb3VwSW5kZXh8fHIuaW5kZXgtbi5pbmRleH0pKTt2YXIgbT17fTtmb3IoYT0wO2E8ZC5sZW5ndGg7YSsrKW89KGk9ZFthXVswXS50cmFjZSkuc3RhY2tncm91cHx8IiIsITA9PT1pLnZpc2libGU/KGkuX25leHR0cmFjZT1udWxsLGkuZmlsbCBpbiBuJiYocz1tW29dLGkuX3ByZXZ0cmFjZT1zfHxudWxsLHMmJihzLl9uZXh0dHJhY2U9aSkpLGkuX293bmZpbGw9aS5maWxsJiYoInRvemVybyI9PT1pLmZpbGwuc3Vic3RyKDAsNil8fCJ0b3NlbGYiPT09aS5maWxsfHwidG8iPT09aS5maWxsLnN1YnN0cigwLDIpJiYhaS5fcHJldnRyYWNlKSxtW29dPWkpOmkuX3ByZXZ0cmFjZT1pLl9uZXh0dHJhY2U9aS5fb3duZmlsbD1udWxsO3JldHVybiBkfX0se31dLDEyMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtlfHwoZT0yKTt2YXIgcj10Lm1hcmtlcixpPXIuc2l6ZXJlZnx8MSxhPXIuc2l6ZW1pbnx8MCxvPSJhcmVhIj09PXIuc2l6ZW1vZGU/ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh0L2kpfTpmdW5jdGlvbih0KXtyZXR1cm4gdC9pfTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI9byh0L2UpO3JldHVybiBuKHIpJiZyPjA/TWF0aC5tYXgocixhKTowfX19LHsiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifX0se31dLDEyMTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2hlbHBlcnMiKS5oYXNDb2xvcnNjYWxlLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIiksbz10KCIuL3N1YnR5cGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMsbCxjKXt2YXIgdT1vLmlzQnViYmxlKHQpLGY9KHQubGluZXx8e30pLmNvbG9yOyhjPWN8fHt9LGYmJihyPWYpLGwoIm1hcmtlci5zeW1ib2wiKSxsKCJtYXJrZXIub3BhY2l0eSIsdT8uNzoxKSxsKCJtYXJrZXIuc2l6ZSIpLGwoIm1hcmtlci5jb2xvciIsciksaSh0LCJtYXJrZXIiKSYmYSh0LGUscyxsLHtwcmVmaXg6Im1hcmtlci4iLGNMZXR0ZXI6ImMifSksYy5ub1NlbGVjdHx8KGwoInNlbGVjdGVkLm1hcmtlci5jb2xvciIpLGwoInVuc2VsZWN0ZWQubWFya2VyLmNvbG9yIiksbCgic2VsZWN0ZWQubWFya2VyLnNpemUiKSxsKCJ1bnNlbGVjdGVkLm1hcmtlci5zaXplIikpLGMubm9MaW5lfHwobCgibWFya2VyLmxpbmUuY29sb3IiLGYmJiFBcnJheS5pc0FycmF5KGYpJiZlLm1hcmtlci5jb2xvciE9PWY/Zjp1P24uYmFja2dyb3VuZDpuLmRlZmF1bHRMaW5lKSxpKHQsIm1hcmtlci5saW5lIikmJmEodCxlLHMsbCx7cHJlZml4OiJtYXJrZXIubGluZS4iLGNMZXR0ZXI6ImMifSksbCgibWFya2VyLmxpbmUud2lkdGgiLHU/MTowKSksdSYmKGwoIm1hcmtlci5zaXplcmVmIiksbCgibWFya2VyLnNpemVtaW4iKSxsKCJtYXJrZXIuc2l6ZW1vZGUiKSksYy5ncmFkaWVudCkmJigibm9uZSIhPT1sKCJtYXJrZXIuZ3JhZGllbnQudHlwZSIpJiZsKCJtYXJrZXIuZ3JhZGllbnQuY29sb3IiKSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9oZWxwZXJzIjo2NTAsIi4vc3VidHlwZXMiOjEyMTZ9XSwxMjExOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLmRhdGVUaWNrMCxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5PTkVXRUVLO2Z1bmN0aW9uIGEodCxlKXtyZXR1cm4gbihlLHQlaT09MD8xOjApfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuLGkpe2lmKGl8fChpPXt4OiEwLHk6ITB9KSxpLngpe3ZhciBvPW4oInhwZXJpb2QiKTtvJiYobigieHBlcmlvZDAiLGEobyxlLnhjYWxlbmRhcikpLG4oInhwZXJpb2RhbGlnbm1lbnQiKSl9aWYoaS55KXt2YXIgcz1uKCJ5cGVyaW9kIik7cyYmKG4oInlwZXJpb2QwIixhKHMsZS55Y2FsZW5kYXIpKSxuKCJ5cGVyaW9kYWxpZ25tZW50IikpfX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3Nn1dLDEyMTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2xpYiIpLG89YS5lbnN1cmVTaW5nbGUscz1hLmlkZW50aXR5LGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuL3N1YnR5cGVzIiksdT10KCIuL2xpbmVfcG9pbnRzIiksZj10KCIuL2xpbmtfdHJhY2VzIiksaD10KCIuLi8uLi9saWIvcG9seWdvbiIpLnRlc3RlcjtmdW5jdGlvbiBwKHQsZSxyLGYscCxkLG0pe3ZhciBnOyFmdW5jdGlvbih0LGUscixpLG8pe3ZhciBzPXIueGF4aXMsbD1yLnlheGlzLHU9bi5leHRlbnQoYS5zaW1wbGVNYXAocy5yYW5nZSxzLnIyYykpLGY9bi5leHRlbnQoYS5zaW1wbGVNYXAobC5yYW5nZSxsLnIyYykpLGg9aVswXS50cmFjZTtpZighYy5oYXNNYXJrZXJzKGgpKXJldHVybjt2YXIgcD1oLm1hcmtlci5tYXhkaXNwbGF5ZWQ7aWYoMD09PXApcmV0dXJuO3ZhciBkPWkuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC54Pj11WzBdJiZ0Lng8PXVbMV0mJnQueT49ZlswXSYmdC55PD1mWzFdfSkpLG09TWF0aC5jZWlsKGQubGVuZ3RoL3ApLGc9MDtvLmZvckVhY2goKGZ1bmN0aW9uKHQscil7dmFyIG49dFswXS50cmFjZTtjLmhhc01hcmtlcnMobikmJm4ubWFya2VyLm1heGRpc3BsYXllZD4wJiZyPGUmJmcrK30pKTt2YXIgdj1NYXRoLnJvdW5kKGcqbS8zK01hdGguZmxvb3IoZy8zKSptLzcuMSk7aS5mb3JFYWNoKChmdW5jdGlvbih0KXtkZWxldGUgdC52aXN9KSksZC5mb3JFYWNoKChmdW5jdGlvbih0LGUpezA9PT1NYXRoLnJvdW5kKChlK3YpJW0pJiYodC52aXM9ITApfSkpfSgwLGUscixmLHApO3ZhciB2PSEhbSYmbS5kdXJhdGlvbj4wO2Z1bmN0aW9uIHkodCl7cmV0dXJuIHY/dC50cmFuc2l0aW9uKCk6dH12YXIgeD1yLnhheGlzLGI9ci55YXhpcyxfPWZbMF0udHJhY2Usdz1fLmxpbmUsVD1uLnNlbGVjdChkKSxrPW8oVCwiZyIsImVycm9yYmFycyIpLEE9byhULCJnIiwibGluZXMiKSxNPW8oVCwiZyIsInBvaW50cyIpLFM9byhULCJnIiwidGV4dCIpO2lmKGkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJwbG90IikodCxrLHIsbSksITA9PT1fLnZpc2libGUpe3ZhciBFLEw7eShUKS5zdHlsZSgib3BhY2l0eSIsXy5vcGFjaXR5KTt2YXIgQz1fLmZpbGwuY2hhckF0KF8uZmlsbC5sZW5ndGgtMSk7IngiIT09QyYmInkiIT09QyYmKEM9IiIpLGZbMF1bci5pc1JhbmdlUGxvdD8ibm9kZVJhbmdlUGxvdDMiOiJub2RlMyJdPVQ7dmFyIFAsSSxPPSIiLHo9W10sRD1fLl9wcmV2dHJhY2U7RCYmKE89RC5fcHJldlJldnBhdGh8fCIiLEw9RC5fbmV4dEZpbGwsej1ELl9wb2x5Z29ucyk7dmFyIFIsRixCLE4saixVLFYsSD0iIixxPSIiLEc9W10sWT1hLm5vb3A7aWYoRT1fLl9vd25GaWxsLGMuaGFzTGluZXMoXyl8fCJub25lIiE9PV8uZmlsbCl7Zm9yKEwmJkwuZGF0dW0oZiksLTEhPT1bImh2IiwidmgiLCJodmgiLCJ2aHYiXS5pbmRleE9mKHcuc2hhcGUpPyhSPWwuc3RlcHMody5zaGFwZSksRj1sLnN0ZXBzKHcuc2hhcGUuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSkpOlI9Rj0ic3BsaW5lIj09PXcuc2hhcGU/ZnVuY3Rpb24odCl7dmFyIGU9dFt0Lmxlbmd0aC0xXTtyZXR1cm4gdC5sZW5ndGg+MSYmdFswXVswXT09PWVbMF0mJnRbMF1bMV09PT1lWzFdP2wuc21vb3RoY2xvc2VkKHQuc2xpY2UoMSksdy5zbW9vdGhpbmcpOmwuc21vb3Rob3Blbih0LHcuc21vb3RoaW5nKX06ZnVuY3Rpb24odCl7cmV0dXJuIk0iK3Quam9pbigiTCIpfSxCPWZ1bmN0aW9uKHQpe3JldHVybiBGKHQucmV2ZXJzZSgpKX0sRz11KGYse3hheGlzOngseWF4aXM6Yixjb25uZWN0R2FwczpfLmNvbm5lY3RnYXBzLGJhc2VUb2xlcmFuY2U6TWF0aC5tYXgody53aWR0aHx8MSwzKS80LHNoYXBlOncuc2hhcGUsc2ltcGxpZnk6dy5zaW1wbGlmeSxmaWxsOl8uZmlsbH0pLFY9Xy5fcG9seWdvbnM9bmV3IEFycmF5KEcubGVuZ3RoKSxnPTA7ZzxHLmxlbmd0aDtnKyspXy5fcG9seWdvbnNbZ109aChHW2ddKTtHLmxlbmd0aCYmKE49R1swXVswXSxVPShqPUdbRy5sZW5ndGgtMV0pW2oubGVuZ3RoLTFdKSxZPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihQPVIoZSksST1CKGUpLEg/Qz8oSCs9IkwiK1Auc3Vic3RyKDEpLHE9SSsiTCIrcS5zdWJzdHIoMSkpOihIKz0iWiIrUCxxPUkrIloiK3EpOihIPVAscT1JKSxjLmhhc0xpbmVzKF8pJiZlLmxlbmd0aD4xKXt2YXIgcj1uLnNlbGVjdCh0aGlzKTtpZihyLmRhdHVtKGYpLHQpeShyLnN0eWxlKCJvcGFjaXR5IiwwKS5hdHRyKCJkIixQKS5jYWxsKGwubGluZUdyb3VwU3R5bGUpKS5zdHlsZSgib3BhY2l0eSIsMSk7ZWxzZXt2YXIgaT15KHIpO2kuYXR0cigiZCIsUCksbC5zaW5nbGVMaW5lU3R5bGUoZixpKX19fX19dmFyIFc9QS5zZWxlY3RBbGwoIi5qcy1saW5lIikuZGF0YShHKTt5KFcuZXhpdCgpKS5zdHlsZSgib3BhY2l0eSIsMCkucmVtb3ZlKCksVy5lYWNoKFkoITEpKSxXLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgianMtbGluZSIsITApLnN0eWxlKCJ2ZWN0b3ItZWZmZWN0Iiwibm9uLXNjYWxpbmctc3Ryb2tlIikuY2FsbChsLmxpbmVHcm91cFN0eWxlKS5lYWNoKFkoITApKSxsLnNldENsaXBVcmwoVyxyLmxheWVyQ2xpcElkLHQpLEcubGVuZ3RoPyhFPyhFLmRhdHVtKGYpLE4mJlUmJihDPygieSI9PT1DP05bMV09VVsxXT1iLmMycCgwLCEwKToieCI9PT1DJiYoTlswXT1VWzBdPXguYzJwKDAsITApKSx5KEUpLmF0dHIoImQiLCJNIitVKyJMIitOKyJMIitILnN1YnN0cigxKSkuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSkpOnkoRSkuYXR0cigiZCIsSCsiWiIpLmNhbGwobC5zaW5nbGVGaWxsU3R5bGUpKSk6TCYmKCJ0b25leHQiPT09Xy5maWxsLnN1YnN0cigwLDYpJiZIJiZPPygidG9uZXh0Ij09PV8uZmlsbD95KEwpLmF0dHIoImQiLEgrIloiK08rIloiKS5jYWxsKGwuc2luZ2xlRmlsbFN0eWxlKTp5KEwpLmF0dHIoImQiLEgrIkwiK08uc3Vic3RyKDEpKyJaIikuY2FsbChsLnNpbmdsZUZpbGxTdHlsZSksXy5fcG9seWdvbnM9Xy5fcG9seWdvbnMuY29uY2F0KHopKTooWihMKSxfLl9wb2x5Z29ucz1udWxsKSksXy5fcHJldlJldnBhdGg9cSxfLl9wcmV2UG9seWdvbnM9Vik6KEU/WihFKTpMJiZaKEwpLF8uX3BvbHlnb25zPV8uX3ByZXZSZXZwYXRoPV8uX3ByZXZQb2x5Z29ucz1udWxsKSxNLmRhdHVtKGYpLFMuZGF0dW0oZiksZnVuY3Rpb24oZSxpLGEpe3ZhciBvLHU9YVswXS50cmFjZSxmPWMuaGFzTWFya2Vycyh1KSxoPWMuaGFzVGV4dCh1KSxwPXR0KHUpLGQ9ZXQsbT1ldDtpZihmfHxoKXt2YXIgZz1zLF89dS5zdGFja2dyb3VwLHc9XyYmImluZmVyIHplcm8iPT09dC5fZnVsbExheW91dC5fc2NhdHRlclN0YWNrT3B0c1t4Ll9pZCtiLl9pZF1bX10uc3RhY2tnYXBzO3UubWFya2VyLm1heGRpc3BsYXllZHx8dS5fbmVlZHNDdWxsP2c9dz9LOko6XyYmIXcmJihnPVEpLGYmJihkPWcpLGgmJihtPWcpfXZhciBULGs9KG89ZS5zZWxlY3RBbGwoInBhdGgucG9pbnQiKS5kYXRhKGQscCkpLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuY2xhc3NlZCgicG9pbnQiLCEwKTt2JiZrLmNhbGwobC5wb2ludFN0eWxlLHUsdCkuY2FsbChsLnRyYW5zbGF0ZVBvaW50cyx4LGIpLnN0eWxlKCJvcGFjaXR5IiwwKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDEpLG8ub3JkZXIoKSxmJiYoVD1sLm1ha2VQb2ludFN0eWxlRm5zKHUpKSxvLmVhY2goKGZ1bmN0aW9uKGUpe3ZhciBpPW4uc2VsZWN0KHRoaXMpLGE9eShpKTtsLnRyYW5zbGF0ZVBvaW50KGUsYSx4LGIpPyhsLnNpbmdsZVBvaW50U3R5bGUoZSxhLHUsVCx0KSxyLmxheWVyQ2xpcElkJiZsLmhpZGVPdXRzaWRlUmFuZ2VQb2ludChlLGEseCxiLHUueGNhbGVuZGFyLHUueWNhbGVuZGFyKSx1LmN1c3RvbWRhdGEmJmkuY2xhc3NlZCgicGxvdGx5LWN1c3RvbWRhdGEiLG51bGwhPT1lLmRhdGEmJnZvaWQgMCE9PWUuZGF0YSkpOmEucmVtb3ZlKCl9KSksdj9vLmV4aXQoKS50cmFuc2l0aW9uKCkuc3R5bGUoIm9wYWNpdHkiLDApLnJlbW92ZSgpOm8uZXhpdCgpLnJlbW92ZSgpLChvPWkuc2VsZWN0QWxsKCJnIikuZGF0YShtLHApKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQoInRleHRwb2ludCIsITApLmFwcGVuZCgidGV4dCIpLG8ub3JkZXIoKSxvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHRoaXMpLGk9eShlLnNlbGVjdCgidGV4dCIpKTtsLnRyYW5zbGF0ZVBvaW50KHQsaSx4LGIpP3IubGF5ZXJDbGlwSWQmJmwuaGlkZU91dHNpZGVSYW5nZVBvaW50KHQsZSx4LGIsdS54Y2FsZW5kYXIsdS55Y2FsZW5kYXIpOmUucmVtb3ZlKCl9KSksby5zZWxlY3RBbGwoInRleHQiKS5jYWxsKGwudGV4dFBvaW50U3R5bGUsdSx0KS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT14LmMycCh0LngpLHI9Yi5jMnAodC55KTtuLnNlbGVjdCh0aGlzKS5zZWxlY3RBbGwoInRzcGFuLmxpbmUiKS5lYWNoKChmdW5jdGlvbigpe3kobi5zZWxlY3QodGhpcykpLmF0dHIoe3g6ZSx5OnJ9KX0pKX0pKSxvLmV4aXQoKS5yZW1vdmUoKX0oTSxTLGYpO3ZhciBYPSExPT09Xy5jbGlwb25heGlzP251bGw6ci5sYXllckNsaXBJZDtsLnNldENsaXBVcmwoTSxYLHQpLGwuc2V0Q2xpcFVybChTLFgsdCl9ZnVuY3Rpb24gWih0KXt5KHQpLmF0dHIoImQiLCJNMCwwWiIpfWZ1bmN0aW9uIEoodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4hdC5nYXAmJnQudmlzfSkpfWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gdC52aXN9KSl9ZnVuY3Rpb24gUSh0KXtyZXR1cm4gdC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiF0LmdhcH0pKX1mdW5jdGlvbiAkKHQpe3JldHVybiB0LmlkfWZ1bmN0aW9uIHR0KHQpe2lmKHQuaWRzKXJldHVybiAkfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9fWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpLGEsYyl7dmFyIHUsaCxkPSFhLG09ISFhJiZhLmR1cmF0aW9uPjAsZz1mKHQsZSxyKTsoKHU9aS5zZWxlY3RBbGwoImcudHJhY2UiKS5kYXRhKGcsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5hdHRyKCJjbGFzcyIsKGZ1bmN0aW9uKHQpe3JldHVybiJ0cmFjZSBzY2F0dGVyIHRyYWNlIit0WzBdLnRyYWNlLnVpZH0pKS5zdHlsZSgic3Ryb2tlLW1pdGVybGltaXQiLDIpLHUub3JkZXIoKSxmdW5jdGlvbih0LGUscil7ZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgaT1vKG4uc2VsZWN0KHRoaXMpLCJnIiwiZmlsbHMiKTtsLnNldENsaXBVcmwoaSxyLmxheWVyQ2xpcElkLHQpO3ZhciBhPWVbMF0udHJhY2UsYz1bXTthLl9vd25maWxsJiZjLnB1c2goIl9vd25GaWxsIiksYS5fbmV4dHRyYWNlJiZjLnB1c2goIl9uZXh0RmlsbCIpO3ZhciB1PWkuc2VsZWN0QWxsKCJnIikuZGF0YShjLHMpO3UuZW50ZXIoKS5hcHBlbmQoImciKSx1LmV4aXQoKS5lYWNoKChmdW5jdGlvbih0KXthW3RdPW51bGx9KSkucmVtb3ZlKCksdS5vcmRlcigpLmVhY2goKGZ1bmN0aW9uKHQpe2FbdF09byhuLnNlbGVjdCh0aGlzKSwicGF0aCIsImpzLWZpbGwiKX0pKX0pKX0odCx1LGUpLG0pPyhjJiYoaD1jKCkpLG4udHJhbnNpdGlvbigpLmR1cmF0aW9uKGEuZHVyYXRpb24pLmVhc2UoYS5lYXNpbmcpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7aCYmaCgpfSkpLmVhY2goImludGVycnVwdCIsKGZ1bmN0aW9uKCl7aCYmaCgpfSkpLmVhY2goKGZ1bmN0aW9uKCl7aS5zZWxlY3RBbGwoImcudHJhY2UiKS5lYWNoKChmdW5jdGlvbihyLG4pe3AodCxuLGUscixnLHRoaXMsYSl9KSl9KSkpOnUuZWFjaCgoZnVuY3Rpb24ocixuKXtwKHQsbixlLHIsZyx0aGlzLGEpfSkpO2QmJnUuZXhpdCgpLnJlbW92ZSgpLGkuc2VsZWN0QWxsKCJwYXRoOm5vdChbZF0pIikucmVtb3ZlKCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3BvbHlnb24iOjc4OCwiLi4vLi4vcmVnaXN0cnkiOjkwNCwiLi9saW5lX3BvaW50cyI6MTIwNSwiLi9saW5rX3RyYWNlcyI6MTIwNywiLi9zdWJ0eXBlcyI6MTIxNiwiQHBsb3RseS9kMyI6NTh9XSwxMjEzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vc3VidHlwZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsbyxzPXQuY2QsbD10LnhheGlzLGM9dC55YXhpcyx1PVtdLGY9c1swXS50cmFjZTtpZighbi5oYXNNYXJrZXJzKGYpJiYhbi5oYXNUZXh0KGYpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8cy5sZW5ndGg7cisrKXNbcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxzLmxlbmd0aDtyKyspaT1zW3JdLGE9bC5jMnAoaS54KSxvPWMuYzJwKGkueSksbnVsbCE9PWkuaSYmZS5jb250YWlucyhbYSxvXSwhMSxyLHQpPyh1LnB1c2goe3BvaW50TnVtYmVyOmkuaSx4OmwuYzJkKGkueCkseTpjLmMyZChpLnkpfSksaS5zZWxlY3RlZD0xKTppLnNlbGVjdGVkPTA7cmV0dXJuIHV9fSx7Ii4vc3VidHlwZXMiOjEyMTZ9XSwxMjE0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPVsib3JpZW50YXRpb24iLCJncm91cG5vcm0iLCJzdGFja2dhcHMiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSl7dmFyIGE9ci5fc2NhdHRlclN0YWNrT3B0cyxvPWkoInN0YWNrZ3JvdXAiKTtpZihvKXt2YXIgcz1lLnhheGlzK2UueWF4aXMsbD1hW3NdO2x8fChsPWFbc109e30pO3ZhciBjPWxbb10sdT0hMTtjP2MudHJhY2VzLnB1c2goZSk6KGM9bFtvXT17dHJhY2VJbmRpY2VzOltdLHRyYWNlczpbZV19LHU9ITApO2Zvcih2YXIgZj17b3JpZW50YXRpb246ZS54JiYhZS55PyJoIjoidiJ9LGg9MDtoPG4ubGVuZ3RoO2grKyl7dmFyIHA9bltoXSxkPXArIkZvdW5kIjtpZighY1tkXSl7dmFyIG09dm9pZCAwIT09dFtwXSxnPSJvcmllbnRhdGlvbiI9PT1wO2lmKChtfHx1KSYmKGNbcF09aShwLGZbcF0pLGcmJihjLmZpbGxEZmx0PSJoIj09PWNbcF0/InRvbmV4dHgiOiJ0b25leHR5IiksbSYmKGNbZF09ITAsIXUmJihkZWxldGUgYy50cmFjZXNbMF1bcF0sZykpKSlmb3IodmFyIHY9MDt2PGMudHJhY2VzLmxlbmd0aC0xO3YrKyl7dmFyIHk9Yy50cmFjZXNbdl07eS5faW5wdXQuZmlsbCE9PXkuZmlsbCYmKHkuZmlsbD1jLmZpbGxEZmx0KX19fXJldHVybiBjfX19LHt9XSwxMjE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vcmVnaXN0cnkiKTtmdW5jdGlvbiBvKHQsZSxyKXtpLnBvaW50U3R5bGUodC5zZWxlY3RBbGwoInBhdGgucG9pbnQiKSxlLHIpfWZ1bmN0aW9uIHModCxlLHIpe2kudGV4dFBvaW50U3R5bGUodC5zZWxlY3RBbGwoInRleHQiKSxlLHIpfWUuZXhwb3J0cz17c3R5bGU6ZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodCkuc2VsZWN0QWxsKCJnLnRyYWNlLnNjYXR0ZXIiKTtlLnN0eWxlKCJvcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0udHJhY2Uub3BhY2l0eX0pKSxlLnNlbGVjdEFsbCgiZy5wb2ludHMiKS5lYWNoKChmdW5jdGlvbihlKXtvKG4uc2VsZWN0KHRoaXMpLGUudHJhY2V8fGVbMF0udHJhY2UsdCl9KSksZS5zZWxlY3RBbGwoImcudGV4dCIpLmVhY2goKGZ1bmN0aW9uKGUpe3Mobi5zZWxlY3QodGhpcyksZS50cmFjZXx8ZVswXS50cmFjZSx0KX0pKSxlLnNlbGVjdEFsbCgiZy50cmFjZSBwYXRoLmpzLWxpbmUiKS5jYWxsKGkubGluZUdyb3VwU3R5bGUpLGUuc2VsZWN0QWxsKCJnLnRyYWNlIHBhdGguanMtZmlsbCIpLmNhbGwoaS5maWxsR3JvdXBTdHlsZSksYS5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsInN0eWxlIikoZSl9LHN0eWxlUG9pbnRzOm8sc3R5bGVUZXh0OnMsc3R5bGVPblNlbGVjdDpmdW5jdGlvbih0LGUscil7dmFyIG49ZVswXS50cmFjZTtuLnNlbGVjdGVkcG9pbnRzPyhpLnNlbGVjdGVkUG9pbnRTdHlsZShyLnNlbGVjdEFsbCgicGF0aC5wb2ludCIpLG4pLGkuc2VsZWN0ZWRUZXh0U3R5bGUoci5zZWxlY3RBbGwoInRleHQiKSxuKSk6KG8ocixuLHQpLHMocixuLHQpKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCJAcGxvdGx5L2QzIjo1OH1dLDEyMTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIik7ZS5leHBvcnRzPXtoYXNMaW5lczpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoImxpbmVzIil9LGhhc01hcmtlcnM6ZnVuY3Rpb24odCl7cmV0dXJuIHQudmlzaWJsZSYmKHQubW9kZSYmLTEhPT10Lm1vZGUuaW5kZXhPZigibWFya2VycyIpfHwic3Bsb20iPT09dC50eXBlKX0saGFzVGV4dDpmdW5jdGlvbih0KXtyZXR1cm4gdC52aXNpYmxlJiZ0Lm1vZGUmJi0xIT09dC5tb2RlLmluZGV4T2YoInRleHQiKX0saXNCdWJibGU6ZnVuY3Rpb24odCl7cmV0dXJuIG4uaXNQbGFpbk9iamVjdCh0Lm1hcmtlcikmJm4uaXNBcnJheU9yVHlwZWRBcnJheSh0Lm1hcmtlci5zaXplKX19fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTIxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaSxhKXthPWF8fHt9LGkoInRleHRwb3NpdGlvbiIpLG4uY29lcmNlRm9udChpLCJ0ZXh0Zm9udCIsci5mb250KSxhLm5vU2VsZWN0fHwoaSgic2VsZWN0ZWQudGV4dGZvbnQuY29sb3IiKSxpKCJ1bnNlbGVjdGVkLnRleHRmb250LmNvbG9yIikpfX0seyIuLi8uLi9saWIiOjc3Nn1dLDEyMTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbyxzPWEoIngiKSxsPWEoInkiKTtpZihpLmdldENvbXBvbmVudE1ldGhvZCgiY2FsZW5kYXJzIiwiaGFuZGxlVHJhY2VEZWZhdWx0cyIpKHQsZSxbIngiLCJ5Il0scikscyl7dmFyIGM9bi5taW5Sb3dMZW5ndGgocyk7bD9vPU1hdGgubWluKGMsbi5taW5Sb3dMZW5ndGgobCkpOihvPWMsYSgieTAiKSxhKCJkeSIpKX1lbHNle2lmKCFsKXJldHVybiAwO289bi5taW5Sb3dMZW5ndGgobCksYSgieDAiKSxhKCJkeCIpfXJldHVybiBlLl9sZW5ndGg9byxvfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEyMTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGw9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGM9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfZGFzaGVzIiksdT10KCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIiksZj10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxoPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxwPXQoIi4uLy4uL2xpYi9zb3J0X29iamVjdF9rZXlzIiksZD1uLmxpbmUsbT1uLm1hcmtlcixnPW0ubGluZSx2PWYoe3dpZHRoOmQud2lkdGgsZGFzaDp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOnAoYyksZGZsdDoic29saWQifX0saSgibGluZSIpKTt2YXIgeT1lLmV4cG9ydHM9aCh7eDpuLngseTpuLnksejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHRleHQ6Zih7fSxuLnRleHQse30pLHRleHR0ZW1wbGF0ZTpzKHt9LHt9KSxob3ZlcnRleHQ6Zih7fSxuLmhvdmVydGV4dCx7fSksaG92ZXJ0ZW1wbGF0ZTpvKCkseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLHpob3ZlcmZvcm1hdDphKCJ6IiksbW9kZTpmKHt9LG4ubW9kZSx7ZGZsdDoibGluZXMrbWFya2VycyJ9KSxzdXJmYWNlYXhpczp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlstMSwwLDEsMl0sZGZsdDotMX0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJjb2xvciJ9LHByb2plY3Rpb246e3g6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxzY2FsZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MTAsZGZsdDoyLzN9fSx5OntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxvcGFjaXR5Ont2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6MX0sc2NhbGU6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEwLGRmbHQ6Mi8zfX0sejp7c2hvdzp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMX0sb3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0OjF9LHNjYWxlOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxMCxkZmx0OjIvM319fSxjb25uZWN0Z2FwczpuLmNvbm5lY3RnYXBzLGxpbmU6dixtYXJrZXI6Zih7c3ltYm9sOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cCh1KSxkZmx0OiJjaXJjbGUiLGFycmF5T2s6ITB9LHNpemU6Zih7fSxtLnNpemUse2RmbHQ6OH0pLHNpemVyZWY6bS5zaXplcmVmLHNpemVtaW46bS5zaXplbWluLHNpemVtb2RlOm0uc2l6ZW1vZGUsb3BhY2l0eTpmKHt9LG0ub3BhY2l0eSx7YXJyYXlPazohMX0pLGNvbG9yYmFyOm0uY29sb3JiYXIsbGluZTpmKHt3aWR0aDpmKHt9LGcud2lkdGgse2FycmF5T2s6ITF9KX0saSgibWFya2VyLmxpbmUiKSl9LGkoIm1hcmtlciIpKSx0ZXh0cG9zaXRpb246Zih7fSxuLnRleHRwb3NpdGlvbix7ZGZsdDoidG9wIGNlbnRlciJ9KSx0ZXh0Zm9udDp7Y29sb3I6bi50ZXh0Zm9udC5jb2xvcixzaXplOm4udGV4dGZvbnQuc2l6ZSxmYW1pbHk6Zih7fSxuLnRleHRmb250LmZhbWlseSx7YXJyYXlPazohMX0pfSxob3ZlcmluZm86Zih7fSxsLmhvdmVyaW5mbyl9LCJjYWxjIiwibmVzdGVkIik7eS54LmVkaXRUeXBlPXkueS5lZGl0VHlwZT15LnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzQ5LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3NTAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiOjc5OSwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTIyMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLGk9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1be3g6ITEseTohMSx0cmFjZTplLHQ6e319XTtyZXR1cm4gbihyLGUpLGkodCxlKSxyfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTR9XSwxMjIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5Iik7ZnVuY3Rpb24gaSh0LGUscixpKXtpZighZXx8IWUudmlzaWJsZSlyZXR1cm4gbnVsbDtmb3IodmFyIGE9bi5nZXRDb21wb25lbnRNZXRob2QoImVycm9yYmFycyIsIm1ha2VDb21wdXRlRXJyb3IiKShlKSxvPW5ldyBBcnJheSh0Lmxlbmd0aCkscz0wO3M8dC5sZW5ndGg7cysrKXt2YXIgbD1hKCt0W3NdLHMpO2lmKCJsb2ciPT09aS50eXBlKXt2YXIgYz1pLmMybCh0W3NdKSx1PXRbc10tbFswXSxmPXRbc10rbFsxXTtpZihvW3NdPVsoaS5jMmwodSwhMCktYykqciwoaS5jMmwoZiwhMCktYykqcl0sdT4wKXt2YXIgaD1pLmMybCh1KTtpLl9sb3dlckxvZ0Vycm9yQm91bmR8fChpLl9sb3dlckxvZ0Vycm9yQm91bmQ9aCksaS5fbG93ZXJFcnJvckJvdW5kPU1hdGgubWluKGkuX2xvd2VyTG9nRXJyb3JCb3VuZCxoKX19ZWxzZSBvW3NdPVstbFswXSpyLGxbMV0qcl19cmV0dXJuIG99ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1baSh0LngsdC5lcnJvcl94LGVbMF0sci54YXhpcyksaSh0LnksdC5lcnJvcl95LGVbMV0sci55YXhpcyksaSh0LnosdC5lcnJvcl96LGVbMl0sci56YXhpcyldLGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXSlyZXR1cm4gdFtlXS5sZW5ndGg7cmV0dXJuIDB9KG4pO2lmKDA9PT1hKXJldHVybiBudWxsO2Zvcih2YXIgbz1uZXcgQXJyYXkoYSkscz0wO3M8YTtzKyspe2Zvcih2YXIgbD1bWzAsMCwwXSxbMCwwLDBdXSxjPTA7YzwzO2MrKylpZihuW2NdKWZvcih2YXIgdT0wO3U8Mjt1KyspbFt1XVtjXT1uW2NdW3NdW3VdO29bc109bH1yZXR1cm4gb319LHsiLi4vLi4vcmVnaXN0cnkiOjkwNH1dLDEyMjI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtbGluZTNkIiksaT10KCJnbC1zY2F0dGVyM2QiKSxhPXQoImdsLWVycm9yM2QiKSxvPXQoImdsLW1lc2gzZCIpLHM9dCgiZGVsYXVuYXktdHJpYW5ndWxhdGUiKSxsPXQoIi4uLy4uL2xpYiIpLGM9dCgiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxoPXQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyIpLHA9dCgiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyIpLGQ9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxtPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxnPXQoIi4vY2FsY19lcnJvcnMiKTtmdW5jdGlvbiB2KHQsZSl7dGhpcy5zY2VuZT10LHRoaXMudWlkPWUsdGhpcy5saW5lUGxvdD1udWxsLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCx0aGlzLmVycm9yQmFycz1udWxsLHRoaXMudGV4dE1hcmtlcnM9bnVsbCx0aGlzLmRlbGF1bmF5TWVzaD1udWxsLHRoaXMuY29sb3I9bnVsbCx0aGlzLm1vZGU9IiIsdGhpcy5kYXRhUG9pbnRzPVtdLHRoaXMuYXhlc0JvdW5kcz1bWy0xLzAsLTEvMCwtMS8wXSxbMS8wLDEvMCwxLzBdXSx0aGlzLnRleHRMYWJlbHM9bnVsbCx0aGlzLmRhdGE9bnVsbH12YXIgeT12LnByb3RvdHlwZTtmdW5jdGlvbiB4KHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJsZWZ0Iik+LTE/LTE6dC5pbmRleE9mKCJyaWdodCIpPi0xPzE6MH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT10PzA6dC5pbmRleE9mKCJ0b3AiKT4tMT8tMTp0LmluZGV4T2YoImJvdHRvbSIpPi0xPzE6MH1mdW5jdGlvbiBfKHQsZSl7cmV0dXJuIGUoNCp0KX1mdW5jdGlvbiB3KHQpe3JldHVybiBwW3RdfWZ1bmN0aW9uIFQodCxlLHIsbixpKXt2YXIgYT1udWxsO2lmKGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KSl7YT1bXTtmb3IodmFyIG89MDtvPGU7bysrKXZvaWQgMD09PXRbb10/YVtvXT1uOmFbb109cih0W29dLGkpfWVsc2UgYT1yKHQsbC5pZGVudGl0eSk7cmV0dXJuIGF9ZnVuY3Rpb24gayh0LGUpe3ZhciByLG4saSxhLG8scyxoPVtdLHA9dC5mdWxsU2NlbmVMYXlvdXQsdj10LmRhdGFTY2FsZSx5PXAueGF4aXMsaz1wLnlheGlzLEE9cC56YXhpcyxNPWUubWFya2VyLFM9ZS5saW5lLEU9ZS54fHxbXSxMPWUueXx8W10sQz1lLnp8fFtdLFA9RS5sZW5ndGgsST1lLnhjYWxlbmRhcixPPWUueWNhbGVuZGFyLHo9ZS56Y2FsZW5kYXI7Zm9yKG89MDtvPFA7bysrKXI9eS5kMmwoRVtvXSwwLEkpKnZbMF0sbj1rLmQybChMW29dLDAsTykqdlsxXSxpPUEuZDJsKENbb10sMCx6KSp2WzJdLGhbb109W3IsbixpXTtpZihBcnJheS5pc0FycmF5KGUudGV4dCkpcz1lLnRleHQ7ZWxzZSBpZih2b2lkIDAhPT1lLnRleHQpZm9yKHM9bmV3IEFycmF5KFApLG89MDtvPFA7bysrKXNbb109ZS50ZXh0O2Z1bmN0aW9uIEQodCxlKXt2YXIgcj1wW3RdO3JldHVybiBkLnRpY2tUZXh0KHIsci5kMmwoZSksITApLnRleHR9dmFyIFI9ZS50ZXh0dGVtcGxhdGU7aWYoUil7dmFyIEY9dC5mdWxsTGF5b3V0Ll9kM2xvY2FsZSxCPUFycmF5LmlzQXJyYXkoUiksTj1CP01hdGgubWluKFIubGVuZ3RoLFApOlAsaj1CP2Z1bmN0aW9uKHQpe3JldHVybiBSW3RdfTpmdW5jdGlvbigpe3JldHVybiBSfTtmb3Iocz1uZXcgQXJyYXkoTiksbz0wO288TjtvKyspe3ZhciBVPXt4OkVbb10seTpMW29dLHo6Q1tvXX0sVj17eExhYmVsOkQoInhheGlzIixFW29dKSx5TGFiZWw6RCgieWF4aXMiLExbb10pLHpMYWJlbDpEKCJ6YXhpcyIsQ1tvXSl9LEg9e307bShILGUsbyk7dmFyIHE9ZS5fbWV0YXx8e307c1tvXT1sLnRleHR0ZW1wbGF0ZVN0cmluZyhqKG8pLFYsRixILFUscSl9fWlmKGE9e3Bvc2l0aW9uOmgsbW9kZTplLm1vZGUsdGV4dDpzfSwibGluZSJpbiBlJiYoYS5saW5lQ29sb3I9dShTLDEsUCksYS5saW5lV2lkdGg9Uy53aWR0aCxhLmxpbmVEYXNoZXM9Uy5kYXNoKSwibWFya2VyImluIGUpe3ZhciBHPWYoZSk7YS5zY2F0dGVyQ29sb3I9dShNLDEsUCksYS5zY2F0dGVyU2l6ZT1UKE0uc2l6ZSxQLF8sMjAsRyksYS5zY2F0dGVyTWFya2VyPVQoTS5zeW1ib2wsUCx3LCJcdTI1Y2YiKSxhLnNjYXR0ZXJMaW5lV2lkdGg9TS5saW5lLndpZHRoLGEuc2NhdHRlckxpbmVDb2xvcj11KE0ubGluZSwxLFApLGEuc2NhdHRlckFuZ2xlPTB9InRleHRwb3NpdGlvbiJpbiBlJiYoYS50ZXh0T2Zmc2V0PWZ1bmN0aW9uKHQpe3ZhciBlPVswLDBdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZVtyXT1bMCwwXSx0W3JdJiYoZVtyXVswXT14KHRbcl0pLGVbcl1bMV09Yih0W3JdKSk7ZWxzZSBlWzBdPXgodCksZVsxXT1iKHQpO3JldHVybiBlfShlLnRleHRwb3NpdGlvbiksYS50ZXh0Q29sb3I9dShlLnRleHRmb250LDEsUCksYS50ZXh0U2l6ZT1UKGUudGV4dGZvbnQuc2l6ZSxQLGwuaWRlbnRpdHksMTIpLGEudGV4dEZvbnQ9ZS50ZXh0Zm9udC5mYW1pbHksYS50ZXh0QW5nbGU9MCk7dmFyIFk9WyJ4IiwieSIsInoiXTtmb3IoYS5wcm9qZWN0PVshMSwhMSwhMV0sYS5wcm9qZWN0U2NhbGU9WzEsMSwxXSxhLnByb2plY3RPcGFjaXR5PVsxLDEsMV0sbz0wO288MzsrK28pe3ZhciBXPWUucHJvamVjdGlvbltZW29dXTsoYS5wcm9qZWN0W29dPVcuc2hvdykmJihhLnByb2plY3RPcGFjaXR5W29dPVcub3BhY2l0eSxhLnByb2plY3RTY2FsZVtvXT1XLnNjYWxlKX1hLmVycm9yQm91bmRzPWcoZSx2LHApO3ZhciBYPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bMCwwLDBdLHI9W1swLDAsMF0sWzAsMCwwXSxbMCwwLDBdXSxuPVsxLDEsMV0saT0wO2k8MztpKyspe3ZhciBhPXRbaV07YSYmITEhPT1hLmNvcHlfenN0eWxlJiYhMSE9PXRbMl0udmlzaWJsZSYmKGE9dFsyXSksYSYmYS52aXNpYmxlJiYoZVtpXT1hLndpZHRoLzIscltpXT1jKGEuY29sb3IpLG5baV09YS50aGlja25lc3MpfXJldHVybntjYXBTaXplOmUsY29sb3I6cixsaW5lV2lkdGg6bn19KFtlLmVycm9yX3gsZS5lcnJvcl95LGUuZXJyb3Jfel0pO3JldHVybiBhLmVycm9yQ29sb3I9WC5jb2xvcixhLmVycm9yTGluZVdpZHRoPVgubGluZVdpZHRoLGEuZXJyb3JDYXBTaXplPVguY2FwU2l6ZSxhLmRlbGF1bmF5QXhpcz1lLnN1cmZhY2VheGlzLGEuZGVsYXVuYXlDb2xvcj1jKGUuc3VyZmFjZWNvbG9yKSxhfWZ1bmN0aW9uIEEodCl7aWYobC5pc0FycmF5T3JUeXBlZEFycmF5KHQpKXt2YXIgZT10WzBdO3JldHVybiBsLmlzQXJyYXlPclR5cGVkQXJyYXkoZSkmJih0PWUpLCJyZ2IoIit0LnNsaWNlKDAsMykubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZCgyNTUqdCl9KSkrIikifXJldHVybiBudWxsfWZ1bmN0aW9uIE0odCl7cmV0dXJuIGwuaXNBcnJheU9yVHlwZWRBcnJheSh0KT80PT09dC5sZW5ndGgmJiJudW1iZXIiPT10eXBlb2YgdFswXT9BKHQpOnQubWFwKEEpOm51bGx9eS5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0JiYodC5vYmplY3Q9PT10aGlzLmxpbmVQbG90fHx0Lm9iamVjdD09PXRoaXMuZGVsYXVuYXlNZXNofHx0Lm9iamVjdD09PXRoaXMudGV4dE1hcmtlcnN8fHQub2JqZWN0PT09dGhpcy5zY2F0dGVyUGxvdCkpe3ZhciBlPXQuaW5kZXg9dC5kYXRhLmluZGV4O3JldHVybiB0Lm9iamVjdC5oaWdobGlnaHQmJnQub2JqZWN0LmhpZ2hsaWdodChudWxsKSx0aGlzLnNjYXR0ZXJQbG90JiYodC5vYmplY3Q9dGhpcy5zY2F0dGVyUGxvdCx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodCh0LmRhdGEpKSx0LnRleHRMYWJlbD0iIix0aGlzLnRleHRMYWJlbHMmJihBcnJheS5pc0FycmF5KHRoaXMudGV4dExhYmVscyk/KHRoaXMudGV4dExhYmVsc1tlXXx8MD09PXRoaXMudGV4dExhYmVsc1tlXSkmJih0LnRleHRMYWJlbD10aGlzLnRleHRMYWJlbHNbZV0pOnQudGV4dExhYmVsPXRoaXMudGV4dExhYmVscyksdC50cmFjZUNvb3JkaW5hdGU9W3RoaXMuZGF0YS54W2VdLHRoaXMuZGF0YS55W2VdLHRoaXMuZGF0YS56W2VdXSwhMH19LHkudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbCxjLHU9dGhpcy5zY2VuZS5nbHBsb3QuZ2wsZj1oLnNvbGlkO3RoaXMuZGF0YT10O3ZhciBwPWsodGhpcy5zY2VuZSx0KTsibW9kZSJpbiBwJiYodGhpcy5tb2RlPXAubW9kZSksImxpbmVEYXNoZXMiaW4gcCYmcC5saW5lRGFzaGVzIGluIGgmJihmPWhbcC5saW5lRGFzaGVzXSksdGhpcy5jb2xvcj1NKHAuc2NhdHRlckNvbG9yKXx8TShwLmxpbmVDb2xvciksdGhpcy5kYXRhUG9pbnRzPXAucG9zaXRpb24sZT17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixjb2xvcjpwLmxpbmVDb2xvcixsaW5lV2lkdGg6cC5saW5lV2lkdGh8fDEsZGFzaGVzOmZbMF0sZGFzaFNjYWxlOmZbMV0sb3BhY2l0eTp0Lm9wYWNpdHksY29ubmVjdEdhcHM6dC5jb25uZWN0Z2Fwc30sLTEhPT10aGlzLm1vZGUuaW5kZXhPZigibGluZXMiKT90aGlzLmxpbmVQbG90P3RoaXMubGluZVBsb3QudXBkYXRlKGUpOih0aGlzLmxpbmVQbG90PW4oZSksdGhpcy5saW5lUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5saW5lUGxvdCkpOnRoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCksdGhpcy5saW5lUGxvdD1udWxsKTt2YXIgZD10Lm9wYWNpdHk7aWYodC5tYXJrZXImJnQubWFya2VyLm9wYWNpdHkmJihkKj10Lm1hcmtlci5vcGFjaXR5KSxyPXtnbDp0aGlzLnNjZW5lLmdscGxvdC5nbCxwb3NpdGlvbjpwLnBvc2l0aW9uLGNvbG9yOnAuc2NhdHRlckNvbG9yLHNpemU6cC5zY2F0dGVyU2l6ZSxnbHlwaDpwLnNjYXR0ZXJNYXJrZXIsb3BhY2l0eTpkLG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6cC5zY2F0dGVyTGluZVdpZHRoLGxpbmVDb2xvcjpwLnNjYXR0ZXJMaW5lQ29sb3IscHJvamVjdDpwLnByb2plY3QscHJvamVjdFNjYWxlOnAucHJvamVjdFNjYWxlLHByb2plY3RPcGFjaXR5OnAucHJvamVjdE9wYWNpdHl9LC0xIT09dGhpcy5tb2RlLmluZGV4T2YoIm1hcmtlcnMiKT90aGlzLnNjYXR0ZXJQbG90P3RoaXMuc2NhdHRlclBsb3QudXBkYXRlKHIpOih0aGlzLnNjYXR0ZXJQbG90PWkociksdGhpcy5zY2F0dGVyUGxvdC5fdHJhY2U9dGhpcyx0aGlzLnNjYXR0ZXJQbG90LmhpZ2hsaWdodFNjYWxlPTEsdGhpcy5zY2VuZS5nbHBsb3QuYWRkKHRoaXMuc2NhdHRlclBsb3QpKTp0aGlzLnNjYXR0ZXJQbG90JiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc2NhdHRlclBsb3QpLHRoaXMuc2NhdHRlclBsb3QuZGlzcG9zZSgpLHRoaXMuc2NhdHRlclBsb3Q9bnVsbCksYz17Z2w6dGhpcy5zY2VuZS5nbHBsb3QuZ2wscG9zaXRpb246cC5wb3NpdGlvbixnbHlwaDpwLnRleHQsY29sb3I6cC50ZXh0Q29sb3Isc2l6ZTpwLnRleHRTaXplLGFuZ2xlOnAudGV4dEFuZ2xlLGFsaWdubWVudDpwLnRleHRPZmZzZXQsZm9udDpwLnRleHRGb250LG9ydGhvZ3JhcGhpYzohMCxsaW5lV2lkdGg6MCxwcm9qZWN0OiExLG9wYWNpdHk6dC5vcGFjaXR5fSx0aGlzLnRleHRMYWJlbHM9dC5ob3ZlcnRleHR8fHQudGV4dCwtMSE9PXRoaXMubW9kZS5pbmRleE9mKCJ0ZXh0Iik/dGhpcy50ZXh0TWFya2Vycz90aGlzLnRleHRNYXJrZXJzLnVwZGF0ZShjKToodGhpcy50ZXh0TWFya2Vycz1pKGMpLHRoaXMudGV4dE1hcmtlcnMuX3RyYWNlPXRoaXMsdGhpcy50ZXh0TWFya2Vycy5oaWdobGlnaHRTY2FsZT0xLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLnRleHRNYXJrZXJzKSk6dGhpcy50ZXh0TWFya2VycyYmKHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLnRleHRNYXJrZXJzKSx0aGlzLnRleHRNYXJrZXJzLmRpc3Bvc2UoKSx0aGlzLnRleHRNYXJrZXJzPW51bGwpLGw9e2dsOnRoaXMuc2NlbmUuZ2xwbG90LmdsLHBvc2l0aW9uOnAucG9zaXRpb24sY29sb3I6cC5lcnJvckNvbG9yLGVycm9yOnAuZXJyb3JCb3VuZHMsbGluZVdpZHRoOnAuZXJyb3JMaW5lV2lkdGgsY2FwU2l6ZTpwLmVycm9yQ2FwU2l6ZSxvcGFjaXR5OnQub3BhY2l0eX0sdGhpcy5lcnJvckJhcnM/cC5lcnJvckJvdW5kcz90aGlzLmVycm9yQmFycy51cGRhdGUobCk6KHRoaXMuc2NlbmUuZ2xwbG90LnJlbW92ZSh0aGlzLmVycm9yQmFycyksdGhpcy5lcnJvckJhcnMuZGlzcG9zZSgpLHRoaXMuZXJyb3JCYXJzPW51bGwpOnAuZXJyb3JCb3VuZHMmJih0aGlzLmVycm9yQmFycz1hKGwpLHRoaXMuZXJyb3JCYXJzLl90cmFjZT10aGlzLHRoaXMuc2NlbmUuZ2xwbG90LmFkZCh0aGlzLmVycm9yQmFycykpLHAuZGVsYXVuYXlBeGlzPj0wKXt2YXIgbT1mdW5jdGlvbih0LGUscil7dmFyIG4saT0ocisxKSUzLGE9KHIrMiklMyxvPVtdLGw9W107Zm9yKG49MDtuPHQubGVuZ3RoOysrbil7dmFyIGM9dFtuXTshaXNOYU4oY1tpXSkmJmlzRmluaXRlKGNbaV0pJiYhaXNOYU4oY1thXSkmJmlzRmluaXRlKGNbYV0pJiYoby5wdXNoKFtjW2ldLGNbYV1dKSxsLnB1c2gobikpfXZhciB1PXMobyk7Zm9yKG49MDtuPHUubGVuZ3RoOysrbilmb3IodmFyIGY9dVtuXSxoPTA7aDxmLmxlbmd0aDsrK2gpZltoXT1sW2ZbaF1dO3JldHVybntwb3NpdGlvbnM6dCxjZWxsczp1LG1lc2hDb2xvcjplfX0ocC5wb3NpdGlvbixwLmRlbGF1bmF5Q29sb3IscC5kZWxhdW5heUF4aXMpO20ub3BhY2l0eT10Lm9wYWNpdHksdGhpcy5kZWxhdW5heU1lc2g/dGhpcy5kZWxhdW5heU1lc2gudXBkYXRlKG0pOihtLmdsPXUsdGhpcy5kZWxhdW5heU1lc2g9byhtKSx0aGlzLmRlbGF1bmF5TWVzaC5fdHJhY2U9dGhpcyx0aGlzLnNjZW5lLmdscGxvdC5hZGQodGhpcy5kZWxhdW5heU1lc2gpKX1lbHNlIHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCksdGhpcy5kZWxhdW5heU1lc2g9bnVsbCl9LHkuZGlzcG9zZT1mdW5jdGlvbigpe3RoaXMubGluZVBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5saW5lUGxvdCksdGhpcy5saW5lUGxvdC5kaXNwb3NlKCkpLHRoaXMuc2NhdHRlclBsb3QmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5zY2F0dGVyUGxvdCksdGhpcy5zY2F0dGVyUGxvdC5kaXNwb3NlKCkpLHRoaXMuZXJyb3JCYXJzJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZXJyb3JCYXJzKSx0aGlzLmVycm9yQmFycy5kaXNwb3NlKCkpLHRoaXMudGV4dE1hcmtlcnMmJih0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy50ZXh0TWFya2VycyksdGhpcy50ZXh0TWFya2Vycy5kaXNwb3NlKCkpLHRoaXMuZGVsYXVuYXlNZXNoJiYodGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuZGVsYXVuYXlNZXNoKSx0aGlzLmRlbGF1bmF5TWVzaC5kaXNwb3NlKCkpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcgdih0LGUudWlkKTtyZXR1cm4gci51cGRhdGUoZSkscn19LHsiLi4vLi4vY29tcG9uZW50cy9meC9oZWxwZXJzIjo2NzUsIi4uLy4uL2NvbnN0YW50cy9nbDNkX2Rhc2hlcyI6NzQ5LCIuLi8uLi9jb25zdGFudHMvZ2wzZF9tYXJrZXJzIjo3NTAsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiOjEyMDgsIi4vY2FsY19lcnJvcnMiOjEyMjEsImRlbGF1bmF5LXRyaWFuZ3VsYXRlIjoxNzIsImdsLWVycm9yM2QiOjI2MywiZ2wtbGluZTNkIjoyNzAsImdsLW1lc2gzZCI6MzAzLCJnbC1zY2F0dGVyM2QiOjMxOX1dLDEyMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcmVnaXN0cnkiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLG4pe3JldHVybiBpLmNvZXJjZSh0LGUsYyxyLG4pfWlmKGZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPTAsbz1yKCJ4Iikscz1yKCJ5IiksbD1yKCJ6Iik7bi5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZVRyYWNlRGVmYXVsdHMiKSh0LGUsWyJ4IiwieSIsInoiXSxpKSxvJiZzJiZsJiYoYT1NYXRoLm1pbihvLmxlbmd0aCxzLmxlbmd0aCxsLmxlbmd0aCksZS5fbGVuZ3RoPWUuX3hsZW5ndGg9ZS5feWxlbmd0aD1lLl96bGVuZ3RoPWEpO3JldHVybiBhfSh0LGUsZix1KSl7ZigidGV4dCIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJ4aG92ZXJmb3JtYXQiKSxmKCJ5aG92ZXJmb3JtYXQiKSxmKCJ6aG92ZXJmb3JtYXQiKSxmKCJtb2RlIiksYS5oYXNMaW5lcyhlKSYmKGYoImNvbm5lY3RnYXBzIikscyh0LGUscix1LGYpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsdSxmLHtub1NlbGVjdDohMH0pLGEuaGFzVGV4dChlKSYmKGYoInRleHR0ZW1wbGF0ZSIpLGwodCxlLHUsZix7bm9TZWxlY3Q6ITB9KSk7dmFyIGg9KGUubGluZXx8e30pLmNvbG9yLHA9KGUubWFya2VyfHx7fSkuY29sb3I7Zigic3VyZmFjZWF4aXMiKT49MCYmZigic3VyZmFjZWNvbG9yIixofHxwKTtmb3IodmFyIGQ9WyJ4IiwieSIsInoiXSxtPTA7bTwzOysrbSl7dmFyIGc9InByb2plY3Rpb24uIitkW21dO2YoZysiLnNob3ciKSYmKGYoZysiLm9wYWNpdHkiKSxmKGcrIi5zY2FsZSIpKX12YXIgdj1uLmdldENvbXBvbmVudE1ldGhvZCgiZXJyb3JiYXJzIiwic3VwcGx5RGVmYXVsdHMiKTt2KHQsZSxofHxwfHxyLHtheGlzOiJ6In0pLHYodCxlLGh8fHB8fHIse2F4aXM6InkiLGluaGVyaXQ6InoifSksdih0LGUsaHx8cHx8cix7YXhpczoieCIsaW5oZXJpdDoieiJ9KX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjE5fV0sMTIyNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3Bsb3Q6dCgiLi9jb252ZXJ0IiksYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxtYXJrZXJTeW1ib2xzOnQoIi4uLy4uL2NvbnN0YW50cy9nbDNkX21hcmtlcnMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6W3tjb250YWluZXI6Im1hcmtlciIsbWluOiJjbWluIixtYXg6ImNtYXgifSx7Y29udGFpbmVyOiJsaW5lIixtaW46ImNtaW4iLG1heDoiY21heCJ9XSxjYWxjOnQoIi4vY2FsYyIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyM2QiLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dsM2QiKSxjYXRlZ29yaWVzOlsiZ2wzZCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vY29uc3RhbnRzL2dsM2RfbWFya2VycyI6NzUwLCIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTIxOSwiLi9jYWxjIjoxMjIwLCIuL2NvbnZlcnQiOjEyMjIsIi4vZGVmYXVsdHMiOjEyMjN9XSwxMjI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPW4ubWFya2VyLHU9bi5saW5lLGY9Yy5saW5lO2UuZXhwb3J0cz17Y2FycGV0Ont2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sYTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LG1vZGU6bCh7fSxuLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpsKHt9LG4udGV4dCx7fSksdGV4dHRlbXBsYXRlOm8oe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsInRleHQiXX0pLGhvdmVydGV4dDpsKHt9LG4uaG92ZXJ0ZXh0LHt9KSxsaW5lOntjb2xvcjp1LmNvbG9yLHdpZHRoOnUud2lkdGgsZGFzaDp1LmRhc2gsc2hhcGU6bCh7fSx1LnNoYXBlLHt2YWx1ZXM6WyJsaW5lYXIiLCJzcGxpbmUiXX0pLHNtb290aGluZzp1LnNtb290aGluZyxlZGl0VHlwZToiY2FsYyJ9LGNvbm5lY3RnYXBzOm4uY29ubmVjdGdhcHMsZmlsbDpsKHt9LG4uZmlsbCx7dmFsdWVzOlsibm9uZSIsInRvc2VsZiIsInRvbmV4dCJdLGRmbHQ6Im5vbmUifSksZmlsbGNvbG9yOm4uZmlsbGNvbG9yLG1hcmtlcjpsKHtzeW1ib2w6Yy5zeW1ib2wsb3BhY2l0eTpjLm9wYWNpdHksbWF4ZGlzcGxheWVkOmMubWF4ZGlzcGxheWVkLHNpemU6Yy5zaXplLHNpemVyZWY6Yy5zaXplcmVmLHNpemVtaW46Yy5zaXplbWluLHNpemVtb2RlOmMuc2l6ZW1vZGUsbGluZTpsKHt3aWR0aDpmLndpZHRoLGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyLmxpbmUiKSksZ3JhZGllbnQ6Yy5ncmFkaWVudCxlZGl0VHlwZToiY2FsYyJ9LHMoIm1hcmtlciIpKSx0ZXh0Zm9udDpuLnRleHRmb250LHRleHRwb3NpdGlvbjpuLnRleHRwb3NpdGlvbixzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyaW5mbzpsKHt9LGkuaG92ZXJpbmZvLHtmbGFnczpbImEiLCJiIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246bi5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6YSgpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMjI2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9dCgiLi4vY2FycGV0L2xvb2t1cF9jYXJwZXRpZCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2NhcnBldFRyYWNlPWwodCxlKTtpZihyJiZyLnZpc2libGUmJiJsZWdlbmRvbmx5IiE9PXIudmlzaWJsZSl7dmFyIGM7ZS54YXhpcz1yLnhheGlzLGUueWF4aXM9ci55YXhpczt2YXIgdSxmLGg9ZS5fbGVuZ3RoLHA9bmV3IEFycmF5KGgpLGQ9ITE7Zm9yKGM9MDtjPGg7YysrKWlmKHU9ZS5hW2NdLGY9ZS5iW2NdLG4odSkmJm4oZikpe3ZhciBtPXIuYWIyeHkoK3UsK2YsITApLGc9ci5pc1Zpc2libGUoK3UsK2YpO2d8fChkPSEwKSxwW2NdPXt4Om1bMF0seTptWzFdLGE6dSxiOmYsdmlzOmd9fWVsc2UgcFtjXT17eDohMSx5OiExfTtyZXR1cm4gZS5fbmVlZHNDdWxsPWQscFswXS5jYXJwZXQ9cixwWzBdLnRyYWNlPWUscyhlLGgpLGkodCxlKSxhKHAsZSksbyhwLGUpLHB9fX0seyIuLi9jYXJwZXQvbG9va3VwX2NhcnBldGlkIjo5NzQsIi4uL3NjYXR0ZXIvYXJyYXlzX3RvX2NhbGNkYXRhIjoxMTkwLCIuLi9zY2F0dGVyL2NhbGMiOjExOTIsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTMsIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIjoxMTk0LCJmYXN0LWlzbnVtZXJpYyI6MjQyfV0sMTIyNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvY29uc3RhbnRzIiksYT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyIpLHU9dCgiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiKSxmPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixoKXtmdW5jdGlvbiBwKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxmLHIsaSl9cCgiY2FycGV0IiksZS54YXhpcz0ieCIsZS55YXhpcz0ieSI7dmFyIGQ9cCgiYSIpLG09cCgiYiIpLGc9TWF0aC5taW4oZC5sZW5ndGgsbS5sZW5ndGgpO2lmKGcpe2UuX2xlbmd0aD1nLHAoInRleHQiKSxwKCJ0ZXh0dGVtcGxhdGUiKSxwKCJob3ZlcnRleHQiKSxwKCJtb2RlIixnPGkuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksYS5oYXNMaW5lcyhlKSYmKHModCxlLHIsaCxwKSxsKHQsZSxwKSxwKCJjb25uZWN0Z2FwcyIpKSxhLmhhc01hcmtlcnMoZSkmJm8odCxlLHIsaCxwLHtncmFkaWVudDohMH0pLGEuaGFzVGV4dChlKSYmYyh0LGUsaCxwKTt2YXIgdj1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgibWFya2VyLm1heGRpc3BsYXllZCIpLHYucHVzaCgicG9pbnRzIikpLHAoImZpbGwiKSwibm9uZSIhPT1lLmZpbGwmJih1KHQsZSxyLHApLGEuaGFzTGluZXMoZSl8fGwodCxlLHApKSwidG9uZXh0IiE9PWUuZmlsbCYmInRvc2VsZiIhPT1lLmZpbGx8fHYucHVzaCgiZmlsbHMiKSwiZmlsbHMiIT09cCgiaG92ZXJvbiIsdi5qb2luKCIrIil8fCJwb2ludHMiKSYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLHApfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjI1fV0sMTIyODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgYT1uW2ldO3JldHVybiB0LmE9YS5hLHQuYj1hLmIsdC55PWEueSx0fX0se31dLDEyMjk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e30sbj1lLl9jYXJwZXQsaT1uLmFiMmlqKFt0LmEsdC5iXSksYT1NYXRoLmZsb29yKGlbMF0pLG89aVswXS1hLHM9TWF0aC5mbG9vcihpWzFdKSxsPWlbMV0tcyxjPW4uZXZhbHh5KFtdLGEscyxvLGwpO3JldHVybiByLnlMYWJlbD1jWzFdLnRvRml4ZWQoMykscn19LHt9XSwxMjMwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKSxpPXQoIi4uLy4uL2xpYiIpLmZpbGxUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgbz1uKHQsZSxyLGEpO2lmKG8mJiExIT09b1swXS5pbmRleCl7dmFyIHM9b1swXTtpZih2b2lkIDA9PT1zLmluZGV4KXt2YXIgbD0xLXMueTAvdC55YS5fbGVuZ3RoLGM9dC54YS5fbGVuZ3RoLHU9YypsLzIsZj1jLXU7cmV0dXJuIHMueDA9TWF0aC5tYXgoTWF0aC5taW4ocy54MCxmKSx1KSxzLngxPU1hdGgubWF4KE1hdGgubWluKHMueDEsZiksdSksb312YXIgaD1zLmNkW3MuaW5kZXhdO3MuYT1oLmEscy5iPWguYixzLnhMYWJlbFZhbD12b2lkIDAscy55TGFiZWxWYWw9dm9pZCAwO3ZhciBwPXMudHJhY2UsZD1wLl9jYXJwZXQsbT1wLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGgscCk7cy55TGFiZWw9bS55TGFiZWwsZGVsZXRlIHMudGV4dDt2YXIgZz1bXTtpZighcC5ob3ZlcnRlbXBsYXRlKXt2YXIgdj0oaC5oaXx8cC5ob3ZlcmluZm8pLnNwbGl0KCIrIik7LTEhPT12LmluZGV4T2YoImFsbCIpJiYodj1bImEiLCJiIiwidGV4dCJdKSwtMSE9PXYuaW5kZXhPZigiYSIpJiZ5KGQuYWF4aXMsaC5hKSwtMSE9PXYuaW5kZXhPZigiYiIpJiZ5KGQuYmF4aXMsaC5iKSxnLnB1c2goInk6ICIrcy55TGFiZWwpLC0xIT09di5pbmRleE9mKCJ0ZXh0IikmJmkoaCxwLGcpLHMuZXh0cmFUZXh0PWcuam9pbigiPGJyPiIpfXJldHVybiBvfWZ1bmN0aW9uIHkodCxlKXt2YXIgcjtyPXQubGFiZWxwcmVmaXgmJnQubGFiZWxwcmVmaXgubGVuZ3RoPjA/dC5sYWJlbHByZWZpeC5yZXBsYWNlKC8gPSAkLywiIik6dC5faG92ZXJ0aXRsZSxnLnB1c2gocisiOiAiK2UudG9GaXhlZCgzKSt0LmxhYmVsc3VmZml4KX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2hvdmVyIjoxMjAyfV0sMTIzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVyY2FycGV0IixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsic3ZnIiwiY2FycGV0Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJjYXJwZXREZXBlbmRlbnQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4uL3NjYXR0ZXIvc2VsZWN0IjoxMjEzLCIuLi9zY2F0dGVyL3N0eWxlIjoxMjE1LCIuL2F0dHJpYnV0ZXMiOjEyMjUsIi4vY2FsYyI6MTIyNiwiLi9kZWZhdWx0cyI6MTIyNywiLi9ldmVudF9kYXRhIjoxMjI4LCIuL2Zvcm1hdF9sYWJlbHMiOjEyMjksIi4vaG92ZXIiOjEyMzAsIi4vcGxvdCI6MTIzMn1dLDEyMzI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe3ZhciBzLGwsYyx1PXJbMF1bMF0uY2FycGV0LGY9e3hheGlzOmkuZ2V0RnJvbUlkKHQsdS54YXhpc3x8IngiKSx5YXhpczppLmdldEZyb21JZCh0LHUueWF4aXN8fCJ5IikscGxvdDplLnBsb3R9O2ZvcihuKHQsZixyLG8pLHM9MDtzPHIubGVuZ3RoO3MrKylsPXJbc11bMF0udHJhY2UsYz1vLnNlbGVjdEFsbCgiZy50cmFjZSIrbC51aWQrIiAuanMtbGluZSIpLGEuc2V0Q2xpcFVybChjLHJbc11bMF0uY2FycGV0Ll9jbGlwUGF0aElkLHQpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9wbG90IjoxMjEyfV0sMTIzMzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzLGE9dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nL2F0dHJpYnV0ZXMiKS5kYXNoLGM9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsdT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsZj1hLm1hcmtlcixoPWEubGluZSxwPWYubGluZTtlLmV4cG9ydHM9dSh7bG9uOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbGF0Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25zOnt2YWxUeXBlOiJkYXRhX2FycmF5In0sbG9jYXRpb25tb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJJU08tMyIsIlVTQS1zdGF0ZXMiLCJjb3VudHJ5IG5hbWVzIiwiZ2VvanNvbi1pZCJdLGRmbHQ6IklTTy0zIn0sZ2VvanNvbjp7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9LGZlYXR1cmVpZGtleTp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyIsZGZsdDoiaWQifSxtb2RlOmMoe30sYS5tb2RlLHtkZmx0OiJtYXJrZXJzIn0pLHRleHQ6Yyh7fSxhLnRleHQse30pLHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsibGF0IiwibG9uIiwibG9jYXRpb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksdGV4dGZvbnQ6YS50ZXh0Zm9udCx0ZXh0cG9zaXRpb246YS50ZXh0cG9zaXRpb24sbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRoLGRhc2g6bH0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxtYXJrZXI6Yyh7c3ltYm9sOmYuc3ltYm9sLG9wYWNpdHk6Zi5vcGFjaXR5LHNpemU6Zi5zaXplLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOmMoe3dpZHRoOnAud2lkdGh9LHMoIm1hcmtlci5saW5lIikpLGdyYWRpZW50OmYuZ3JhZGllbnR9LHMoIm1hcmtlciIpKSxmaWxsOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJub25lIiwidG9zZWxmIl0sZGZsdDoibm9uZSJ9LGZpbGxjb2xvcjphLmZpbGxjb2xvcixzZWxlY3RlZDphLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6YS51bnNlbGVjdGVkLGhvdmVyaW5mbzpjKHt9LG8uaG92ZXJpbmZvLHtmbGFnczpbImxvbiIsImxhdCIsImxvY2F0aW9uIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZy9hdHRyaWJ1dGVzIjo2NjAsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTIzNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIiksbz10KCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSIpLHM9dCgiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiIpLGw9dCgiLi4vLi4vbGliIikuXztmdW5jdGlvbiBjKHQpe3JldHVybiB0JiYic3RyaW5nIj09dHlwZW9mIHR9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdT1BcnJheS5pc0FycmF5KGUubG9jYXRpb25zKSxmPXU/ZS5sb2NhdGlvbnMubGVuZ3RoOmUuX2xlbmd0aCxoPW5ldyBBcnJheShmKTtyPWUuZ2VvanNvbj9mdW5jdGlvbih0KXtyZXR1cm4gYyh0KXx8bih0KX06Yztmb3IodmFyIHA9MDtwPGY7cCsrKXt2YXIgZD1oW3BdPXt9O2lmKHUpe3ZhciBtPWUubG9jYXRpb25zW3BdO2QubG9jPXIobSk/bTpudWxsfWVsc2V7dmFyIGc9ZS5sb25bcF0sdj1lLmxhdFtwXTtuKGcpJiZuKHYpP2QubG9ubGF0PVsrZywrdl06ZC5sb25sYXQ9W2ksaV19fXJldHVybiBvKGgsZSksYSh0LGUpLHMoaCxlKSxmJiYoaFswXS50PXtsYWJlbHM6e2xhdDpsKHQsImxhdDoiKSsiICIsbG9uOmwodCwibG9uOiIpKyIgIn19KSxofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjM1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGM9dCgiLi9hdHRyaWJ1dGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHUpe2Z1bmN0aW9uIGYocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGMscixpKX12YXIgaCxwPWYoImxvY2F0aW9ucyIpO2lmKHAmJnAubGVuZ3RoKXt2YXIgZCxtPWYoImdlb2pzb24iKTsoInN0cmluZyI9PXR5cGVvZiBtJiYiIiE9PW18fG4uaXNQbGFpbk9iamVjdChtKSkmJihkPSJnZW9qc29uLWlkIiksImdlb2pzb24taWQiPT09ZigibG9jYXRpb25tb2RlIixkKSYmZigiZmVhdHVyZWlka2V5IiksaD1wLmxlbmd0aH1lbHNle3ZhciBnPWYoImxvbiIpfHxbXSx2PWYoImxhdCIpfHxbXTtoPU1hdGgubWluKGcubGVuZ3RoLHYubGVuZ3RoKX1oPyhlLl9sZW5ndGg9aCxmKCJ0ZXh0IiksZigiaG92ZXJ0ZXh0IiksZigiaG92ZXJ0ZW1wbGF0ZSIpLGYoIm1vZGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGYpLGYoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscix1LGYse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoZigidGV4dHRlbXBsYXRlIikscyh0LGUsdSxmKSksZigiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmbCh0LGUscixmKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxmKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjMzfV0sMTIzNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbixpKXt0Lmxvbj1lLmxvbix0LmxhdD1lLmxhdCx0LmxvY2F0aW9uPWUubG9jP2UubG9jOm51bGw7dmFyIGE9bltpXTtyZXR1cm4gYS5mSW4mJmEuZkluLnByb3BlcnRpZXMmJih0LnByb3BlcnRpZXM9YS5mSW4ucHJvcGVydGllcyksdH19LHt9XSwxMjM3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5nZW9dLl9zdWJwbG90Lm1vY2tBeGlzLG89dC5sb25sYXQ7cmV0dXJuIGkubG9uTGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMF0pLCEwKS50ZXh0LGkubGF0TGFiZWw9bi50aWNrVGV4dChhLGEuYzJsKG9bMV0pLCEwKS50ZXh0LGl9fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMjM4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxpPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sYT10KCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciIpLG89dCgiLi4vLi4vbGliIikuZmlsbFRleHQscz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBsPXQuY2QsYz1sWzBdLnRyYWNlLHU9dC54YSxmPXQueWEsaD10LnN1YnBsb3QscD1oLnByb2plY3Rpb24uaXNMb25MYXRPdmVyRWRnZXMsZD1oLnByb2plY3Q7aWYobi5nZXRDbG9zZXN0KGwsKGZ1bmN0aW9uKHQpe3ZhciBuPXQubG9ubGF0O2lmKG5bMF09PT1pKXJldHVybiAxLzA7aWYocChuKSlyZXR1cm4gMS8wO3ZhciBhPWQobiksbz1kKFtlLHJdKSxzPU1hdGguYWJzKGFbMF0tb1swXSksbD1NYXRoLmFicyhhWzFdLW9bMV0pLGM9TWF0aC5tYXgoMyx0Lm1yY3x8MCk7cmV0dXJuIE1hdGgubWF4KE1hdGguc3FydChzKnMrbCpsKS1jLDEtMy9jKX0pLHQpLCExIT09dC5pbmRleCl7dmFyIG09bFt0LmluZGV4XSxnPW0ubG9ubGF0LHY9W3UuYzJwKGcpLGYuYzJwKGcpXSx5PW0ubXJjfHwxO3QueDA9dlswXS15LHQueDE9dlswXSt5LHQueTA9dlsxXS15LHQueTE9dlsxXSt5LHQubG9jPW0ubG9jLHQubG9uPWdbMF0sdC5sYXQ9Z1sxXTt2YXIgeD17fTt4W2MuZ2VvXT17X3N1YnBsb3Q6aH07dmFyIGI9Yy5fbW9kdWxlLmZvcm1hdExhYmVscyhtLGMseCk7cmV0dXJuIHQubG9uTGFiZWw9Yi5sb25MYWJlbCx0LmxhdExhYmVsPWIubGF0TGFiZWwsdC5jb2xvcj1hKGMsbSksdC5leHRyYVRleHQ9ZnVuY3Rpb24odCxlLHIsbil7aWYodC5ob3ZlcnRlbXBsYXRlKXJldHVybjt2YXIgaT1lLmhpfHx0LmhvdmVyaW5mbyxhPSJhbGwiPT09aT9zLmhvdmVyaW5mby5mbGFnczppLnNwbGl0KCIrIiksbD0tMSE9PWEuaW5kZXhPZigibG9jYXRpb24iKSYmQXJyYXkuaXNBcnJheSh0LmxvY2F0aW9ucyksYz0tMSE9PWEuaW5kZXhPZigibG9uIiksdT0tMSE9PWEuaW5kZXhPZigibGF0IiksZj0tMSE9PWEuaW5kZXhPZigidGV4dCIpLGg9W107ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdCsiXHhiMCJ9bD9oLnB1c2goZS5sb2MpOmMmJnU/aC5wdXNoKCIoIitwKHIubGF0TGFiZWwpKyIsICIrcChyLmxvbkxhYmVsKSsiKSIpOmM/aC5wdXNoKG4ubG9uK3Aoci5sb25MYWJlbCkpOnUmJmgucHVzaChuLmxhdCtwKHIubGF0TGFiZWwpKTtmJiZvKGUsdCxoKTtyZXR1cm4gaC5qb2luKCI8YnI+Iil9KGMsbSx0LGxbMF0udC5sYWJlbHMpLHQuaG92ZXJ0ZW1wbGF0ZT1jLmhvdmVydGVtcGxhdGUsW3RdfX19LHsiLi4vLi4vY29tcG9uZW50cy9meCI6Njc5LCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMSwiLi9hdHRyaWJ1dGVzIjoxMjMzfV0sMTIzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIiksY2FsY0dlb0pTT046dCgiLi9wbG90IikuY2FsY0dlb0pTT04scGxvdDp0KCIuL3Bsb3QiKS5wbG90LHN0eWxlOnQoIi4vc3R5bGUiKSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4vc2VsZWN0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnZW8iLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL2dlbyIpLGNhdGVnb3JpZXM6WyJnZW8iLCJzeW1ib2xzIiwic2hvd0xlZ2VuZCIsInNjYXR0ZXItbGlrZSJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dlbyI6ODYwLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMjMzLCIuL2NhbGMiOjEyMzQsIi4vZGVmYXVsdHMiOjEyMzUsIi4vZXZlbnRfZGF0YSI6MTIzNiwiLi9mb3JtYXRfbGFiZWxzIjoxMjM3LCIuL2hvdmVyIjoxMjM4LCIuL3Bsb3QiOjEyNDAsIi4vc2VsZWN0IjoxMjQxLCIuL3N0eWxlIjoxMjQyfV0sMTI0MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2xpYi90b3BvanNvbl91dGlscyIpLmdldFRvcG9qc29uRmVhdHVyZXMsbz10KCIuLi8uLi9saWIvZ2VvanNvbl91dGlscyIpLHM9dCgiLi4vLi4vbGliL2dlb19sb2NhdGlvbl91dGlscyIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxjPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0sdT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxmPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxoPXQoIi4vc3R5bGUiKTtlLmV4cG9ydHM9e2NhbGNHZW9KU09OOmZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpPXRbMF0udHJhY2Usbz1lW2kuZ2VvXSxmPW8uX3N1YnBsb3QsaD1pLl9sZW5ndGg7aWYoQXJyYXkuaXNBcnJheShpLmxvY2F0aW9ucykpe3ZhciBwPWkubG9jYXRpb25tb2RlLGQ9Imdlb2pzb24taWQiPT09cD9zLmV4dHJhY3RUcmFjZUZlYXR1cmUodCk6YShpLGYudG9wb2pzb24pO2ZvcihyPTA7cjxoO3IrKyl7bj10W3JdO3ZhciBtPSJnZW9qc29uLWlkIj09PXA/bi5mT3V0OnMubG9jYXRpb25Ub0ZlYXR1cmUocCxuLmxvYyxkKTtuLmxvbmxhdD1tP20ucHJvcGVydGllcy5jdDpbYyxjXX19dmFyIGcsdix5PXtwYWRkZWQ6ITB9O2lmKCJnZW9qc29uIj09PW8uZml0Ym91bmRzJiYiZ2VvanNvbi1pZCI9PT1pLmxvY2F0aW9ubW9kZSl7dmFyIHg9cy5jb21wdXRlQmJveChzLmdldFRyYWNlR2VvanNvbihpKSk7Zz1beFswXSx4WzJdXSx2PVt4WzFdLHhbM11dfWVsc2V7Zm9yKGc9bmV3IEFycmF5KGgpLHY9bmV3IEFycmF5KGgpLHI9MDtyPGg7cisrKW49dFtyXSxnW3JdPW4ubG9ubGF0WzBdLHZbcl09bi5sb25sYXRbMV07eS5wcGFkPXUoaSxoKX1pLl9leHRyZW1lcy5sb249bChvLmxvbmF4aXMuX2F4LGcseSksaS5fZXh0cmVtZXMubGF0PWwoby5sYXRheGlzLl9heCx2LHkpfSxwbG90OmZ1bmN0aW9uKHQsZSxyKXt2YXIgYT1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCIuc2NhdHRlcmxheWVyIikscz1pLm1ha2VUcmFjZUdyb3VwcyhhLHIsInRyYWNlIHNjYXR0ZXJnZW8iKTtmdW5jdGlvbiBsKHQsZSl7dC5sb25sYXRbMF09PT1jJiZuLnNlbGVjdChlKS5yZW1vdmUoKX1zLnNlbGVjdEFsbCgiKiIpLnJlbW92ZSgpLHMuZWFjaCgoZnVuY3Rpb24oZSl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT1lWzBdLnRyYWNlO2lmKGYuaGFzTGluZXMoYSl8fCJub25lIiE9PWEuZmlsbCl7dmFyIHM9by5jYWxjVHJhY2VUb0xpbmVDb29yZHMoZSksYz0ibm9uZSIhPT1hLmZpbGw/by5tYWtlUG9seWdvbihzKTpvLm1ha2VMaW5lKHMpO3Iuc2VsZWN0QWxsKCJwYXRoLmpzLWxpbmUiKS5kYXRhKFt7Z2VvanNvbjpjLHRyYWNlOmF9XSkuZW50ZXIoKS5hcHBlbmQoInBhdGgiKS5jbGFzc2VkKCJqcy1saW5lIiwhMCkuc3R5bGUoInN0cm9rZS1taXRlcmxpbWl0IiwyKX1mLmhhc01hcmtlcnMoYSkmJnIuc2VsZWN0QWxsKCJwYXRoLnBvaW50IikuZGF0YShpLmlkZW50aXR5KS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmNsYXNzZWQoInBvaW50IiwhMCkuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGYuaGFzVGV4dChhKSYmci5zZWxlY3RBbGwoImciKS5kYXRhKGkuaWRlbnRpdHkpLmVudGVyKCkuYXBwZW5kKCJnIikuYXBwZW5kKCJ0ZXh0IikuZWFjaCgoZnVuY3Rpb24odCl7bCh0LHRoaXMpfSkpLGgodCxlKX0pKX19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nZW9fbG9jYXRpb25fdXRpbHMiOjc2OSwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MCwiLi4vLi4vbGliL3RvcG9qc29uX3V0aWxzIjo4MDUsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hdXRvcmFuZ2UiOjgyNiwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuL3N0eWxlIjoxMjQyLCJAcGxvdGx5L2QzIjo1OH1dLDEyNDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhLG8scyxsLGM9dC5jZCx1PXQueGF4aXMsZj10LnlheGlzLGg9W10scD1jWzBdLnRyYWNlO2lmKCFuLmhhc01hcmtlcnMocCkmJiFuLmhhc1RleHQocCkpcmV0dXJuW107aWYoITE9PT1lKWZvcihsPTA7bDxjLmxlbmd0aDtsKyspY1tsXS5zZWxlY3RlZD0wO2Vsc2UgZm9yKGw9MDtsPGMubGVuZ3RoO2wrKykoYT0ocj1jW2xdKS5sb25sYXQpWzBdIT09aSYmKG89dS5jMnAoYSkscz1mLmMycChhKSxlLmNvbnRhaW5zKFtvLHNdLG51bGwsbCx0KT8oaC5wdXNoKHtwb2ludE51bWJlcjpsLGxvbjphWzBdLGxhdDphWzFdfSksci5zZWxlY3RlZD0xKTpyLnNlbGVjdGVkPTApO3JldHVybiBofX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTZ9XSwxMjQyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLG89dCgiLi4vc2NhdHRlci9zdHlsZSIpLHM9by5zdHlsZVBvaW50cyxsPW8uc3R5bGVUZXh0O2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2UmJmZ1bmN0aW9uKHQsZSl7dmFyIHI9ZVswXS50cmFjZSxvPWVbMF0ubm9kZTM7by5zdHlsZSgib3BhY2l0eSIsZVswXS50cmFjZS5vcGFjaXR5KSxzKG8scix0KSxsKG8scix0KSxvLnNlbGVjdEFsbCgicGF0aC5qcy1saW5lIikuc3R5bGUoImZpbGwiLCJub25lIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10LnRyYWNlLG89ci5saW5lfHx7fTtlLmNhbGwoYS5zdHJva2Usby5jb2xvcikuY2FsbChpLmRhc2hMaW5lLG8uZGFzaHx8IiIsby53aWR0aHx8MCksIm5vbmUiIT09ci5maWxsJiZlLmNhbGwoYS5maWxsLHIuZmlsbGNvbG9yKX0pKX0odCxlKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiQHBsb3RseS9kMyI6NTh9XSwxMjQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLHM9dCgiLi4vLi4vbGliL3NvcnRfb2JqZWN0X2tleXMiKSxsPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGM9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLHU9dCgiLi9jb25zdGFudHMiKS5EQVNIRVMsZj1pLmxpbmUsaD1pLm1hcmtlcixwPWgubGluZSxkPWUuZXhwb3J0cz1jKHt4OmkueCx4MDppLngwLGR4OmkuZHgseTppLnkseTA6aS55MCxkeTppLmR5LHhwZXJpb2Q6aS54cGVyaW9kLHlwZXJpb2Q6aS55cGVyaW9kLHhwZXJpb2QwOmkueHBlcmlvZDAseXBlcmlvZDA6aS55cGVyaW9kMCx4cGVyaW9kYWxpZ25tZW50OmkueHBlcmlvZGFsaWdubWVudCx5cGVyaW9kYWxpZ25tZW50OmkueXBlcmlvZGFsaWdubWVudCx4aG92ZXJmb3JtYXQ6YSgieCIpLHlob3ZlcmZvcm1hdDphKCJ5IiksdGV4dDppLnRleHQsaG92ZXJ0ZXh0OmkuaG92ZXJ0ZXh0LHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LG1vZGU6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxpbmVzIiwibWFya2VycyIsInRleHQiXSxleHRyYXM6WyJub25lIl19LGxpbmU6e2NvbG9yOmYuY29sb3Isd2lkdGg6Zi53aWR0aCxzaGFwZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsibGluZWFyIiwiaHYiLCJ2aCIsImh2aCIsInZodiJdLGRmbHQ6ImxpbmVhciIsZWRpdFR5cGU6InBsb3QifSxkYXNoOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6cyh1KSxkZmx0OiJzb2xpZCJ9fSxtYXJrZXI6bCh7fSxvKCJtYXJrZXIiKSx7c3ltYm9sOmguc3ltYm9sLHNpemU6aC5zaXplLHNpemVyZWY6aC5zaXplcmVmLHNpemVtaW46aC5zaXplbWluLHNpemVtb2RlOmguc2l6ZW1vZGUsb3BhY2l0eTpoLm9wYWNpdHksY29sb3JiYXI6aC5jb2xvcmJhcixsaW5lOmwoe30sbygibWFya2VyLmxpbmUiKSx7d2lkdGg6cC53aWR0aH0pfSksY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxmaWxsOmwoe30saS5maWxsLHtkZmx0OiJub25lIn0pLGZpbGxjb2xvcjppLmZpbGxjb2xvcixzZWxlY3RlZDp7bWFya2VyOmkuc2VsZWN0ZWQubWFya2VyLHRleHRmb250Omkuc2VsZWN0ZWQudGV4dGZvbnR9LHVuc2VsZWN0ZWQ6e21hcmtlcjppLnVuc2VsZWN0ZWQubWFya2VyLHRleHRmb250OmkudW5zZWxlY3RlZC50ZXh0Zm9udH0sb3BhY2l0eTpuLm9wYWNpdHl9LCJjYWxjIiwibmVzdGVkIik7ZC54LmVkaXRUeXBlPWQueS5lZGl0VHlwZT1kLngwLmVkaXRUeXBlPWQueTAuZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGQuaG92ZXJ0ZW1wbGF0ZT1pLmhvdmVydGVtcGxhdGUsZC50ZXh0dGVtcGxhdGU9aS50ZXh0dGVtcGxhdGV9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiOjY0NiwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9saWIvc29ydF9vYmplY3Rfa2V5cyI6Nzk5LCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIjo4MDksIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTI0NX1dLDEyNDQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9wb2ludC1jbHVzdGVyIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLG89dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSIpLmZpbmRFeHRyZW1lcyxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLGM9bC5jYWxjTWFya2VyU2l6ZSx1PWwuY2FsY0F4aXNFeHBhbnNpb24sZj1sLnNldEZpcnN0U2NhdHRlcixoPXQoIi4uL3NjYXR0ZXIvY29sb3JzY2FsZV9jYWxjIikscD10KCIuL2NvbnZlcnQiKSxkPXQoIi4vc2NlbmVfdXBkYXRlIiksbT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGc9dCgiLi9jb25zdGFudHMiKS5UT09fTUFOWV9QT0lOVFM7ZnVuY3Rpb24gdih0LGUscil7dmFyIG49dC5fZXh0cmVtZXNbZS5faWRdLGk9byhlLHIuX2JuZHMse3BhZGRlZDohMH0pO24ubWluPW4ubWluLmNvbmNhdChpLm1pbiksbi5tYXg9bi5tYXguY29uY2F0KGkubWF4KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuX2Z1bGxMYXlvdXQsbD1hLmdldEZyb21JZCh0LGUueGF4aXMpLHk9YS5nZXRGcm9tSWQodCxlLnlheGlzKSx4PW8uX3Bsb3RzW2UueGF4aXMrZS55YXhpc10sYj1lLl9sZW5ndGgsXz1iPj1nLHc9MipiLFQ9e30saz1sLm1ha2VDYWxjZGF0YShlLCJ4IiksQT15Lm1ha2VDYWxjZGF0YShlLCJ5IiksTT1zKGUsbCwieCIsayksUz1zKGUseSwieSIsQSksRT1NLnZhbHMsTD1TLnZhbHM7ZS5feD1FLGUuX3k9TCxlLnhwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWD1rLGUuX3hTdGFydHM9TS5zdGFydHMsZS5feEVuZHM9TS5lbmRzKSxlLnlwZXJpb2RhbGlnbm1lbnQmJihlLl9vcmlnWT1BLGUuX3lTdGFydHM9Uy5zdGFydHMsZS5feUVuZHM9Uy5lbmRzKTt2YXIgQz1uZXcgQXJyYXkodyksUD1uZXcgQXJyYXkoYik7Zm9yKHI9MDtyPGI7cisrKUNbMipyXT1FW3JdPT09bT9OYU46RVtyXSxDWzIqcisxXT1MW3JdPT09bT9OYU46TFtyXSxQW3JdPXI7aWYoImxvZyI9PT1sLnR5cGUpZm9yKHI9MDtyPHc7cis9MilDW3JdPWwuYzJsKENbcl0pO2lmKCJsb2ciPT09eS50eXBlKWZvcihyPTE7cjx3O3IrPTIpQ1tyXT15LmMybChDW3JdKTtfJiYibG9nIiE9PWwudHlwZSYmImxvZyIhPT15LnR5cGU/VC50cmVlPW4oQyk6VC5pZHM9UCxoKHQsZSk7dmFyIEksTz1mdW5jdGlvbih0LGUscixuLGEsbyl7dmFyIHM9cC5zdHlsZSh0LHIpO3MubWFya2VyJiYocy5tYXJrZXIucG9zaXRpb25zPW4pO3MubGluZSYmbi5sZW5ndGg+MSYmaS5leHRlbmRGbGF0KHMubGluZSxwLmxpbmVQb3NpdGlvbnModCxyLG4pKTtpZihzLmVycm9yWHx8cy5lcnJvclkpe3ZhciBsPXAuZXJyb3JCYXJQb3NpdGlvbnModCxyLG4sYSxvKTtzLmVycm9yWCYmaS5leHRlbmRGbGF0KHMuZXJyb3JYLGwueCkscy5lcnJvclkmJmkuZXh0ZW5kRmxhdChzLmVycm9yWSxsLnkpfXMudGV4dCYmKGkuZXh0ZW5kRmxhdChzLnRleHQse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyKSksaS5leHRlbmRGbGF0KHMudGV4dFNlbCx7cG9zaXRpb25zOm59LHAudGV4dFBvc2l0aW9uKHQscixzLnRleHQscy5tYXJrZXJTZWwpKSxpLmV4dGVuZEZsYXQocy50ZXh0VW5zZWwse3Bvc2l0aW9uczpufSxwLnRleHRQb3NpdGlvbih0LHIscy50ZXh0LHMubWFya2VyVW5zZWwpKSk7cmV0dXJuIHN9KHQsMCxlLEMsRSxMKSx6PWQodCx4KTtyZXR1cm4gZihvLGUpLF8/Ty5tYXJrZXImJihJPU8ubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KE8ubWFya2VyLnNpemUsMykpOkk9YyhlLGIpLHUodCxlLGwseSxFLEwsSSksTy5lcnJvclgmJnYoZSxsLE8uZXJyb3JYKSxPLmVycm9yWSYmdihlLHksTy5lcnJvclkpLE8uZmlsbCYmIXouZmlsbDJkJiYoei5maWxsMmQ9ITApLE8ubWFya2VyJiYhei5zY2F0dGVyMmQmJih6LnNjYXR0ZXIyZD0hMCksTy5saW5lJiYhei5saW5lMmQmJih6LmxpbmUyZD0hMCksIU8uZXJyb3JYJiYhTy5lcnJvcll8fHouZXJyb3IyZHx8KHouZXJyb3IyZD0hMCksTy50ZXh0JiYhei5nbFRleHQmJih6LmdsVGV4dD0hMCksTy5tYXJrZXImJihPLm1hcmtlci5zbmFwPWIpLHoubGluZU9wdGlvbnMucHVzaChPLmxpbmUpLHouZXJyb3JYT3B0aW9ucy5wdXNoKE8uZXJyb3JYKSx6LmVycm9yWU9wdGlvbnMucHVzaChPLmVycm9yWSksei5maWxsT3B0aW9ucy5wdXNoKE8uZmlsbCksei5tYXJrZXJPcHRpb25zLnB1c2goTy5tYXJrZXIpLHoubWFya2VyU2VsZWN0ZWRPcHRpb25zLnB1c2goTy5tYXJrZXJTZWwpLHoubWFya2VyVW5zZWxlY3RlZE9wdGlvbnMucHVzaChPLm1hcmtlclVuc2VsKSx6LnRleHRPcHRpb25zLnB1c2goTy50ZXh0KSx6LnRleHRTZWxlY3RlZE9wdGlvbnMucHVzaChPLnRleHRTZWwpLHoudGV4dFVuc2VsZWN0ZWRPcHRpb25zLnB1c2goTy50ZXh0VW5zZWwpLHouc2VsZWN0QmF0Y2gucHVzaChbXSksei51bnNlbGVjdEJhdGNoLnB1c2goW10pLFQuX3NjZW5lPXosVC5pbmRleD16LmNvdW50LFQueD1FLFQueT1MLFQucG9zaXRpb25zPUMsei5jb3VudCsrLFt7eDohMSx5OiExLHQ6VCx0cmFjZTplfV19fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiOjgyNCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F1dG9yYW5nZSI6ODI2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiLi9jb25zdGFudHMiOjEyNDUsIi4vY29udmVydCI6MTI0NiwiLi9zY2VuZV91cGRhdGUiOjEyNTQsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTl9XSwxMjQ1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17VE9PX01BTllfUE9JTlRTOjFlNSxTWU1CT0xfU0RGX1NJWkU6MjAwLFNZTUJPTF9TSVpFOjIwLFNZTUJPTF9TVFJPS0U6MSxET1RfUkU6Ly1kb3QvLE9QRU5fUkU6Ly1vcGVuLyxEQVNIRVM6e3NvbGlkOlsxXSxkb3Q6WzEsMV0sZGFzaDpbNCwxXSxsb25nZGFzaDpbOCwxXSxkYXNoZG90Ols0LDEsMSwxXSxsb25nZGFzaGRvdDpbOCwxLDEsMV19fX0se31dLDEyNDY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZmFzdC1pc251bWVyaWMiKSxpPXQoInN2Zy1wYXRoLXNkZiIpLGE9dCgiY29sb3Itbm9ybWFsaXplIiksbz10KCIuLi8uLi9yZWdpc3RyeSIpLHM9dCgiLi4vLi4vbGliIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxjPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyIpLHU9dCgiLi4vLi4vbGliL2dsX2Zvcm1hdF9jb2xvciIpLmZvcm1hdENvbG9yLGY9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGg9dCgiLi4vc2NhdHRlci9tYWtlX2J1YmJsZV9zaXplX2Z1bmMiKSxwPXQoIi4vaGVscGVycyIpLGQ9dCgiLi9jb25zdGFudHMiKSxtPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxnPXtzdGFydDoxLGxlZnQ6MSxlbmQ6LTEscmlnaHQ6LTEsbWlkZGxlOjAsY2VudGVyOjAsYm90dG9tOjEsdG9wOi0xfSx2PXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZTtmdW5jdGlvbiB5KHQsZSl7dmFyIHIsaT10Ll9mdWxsTGF5b3V0LGE9ZS5fbGVuZ3RoLG89ZS50ZXh0Zm9udCxsPWUudGV4dHBvc2l0aW9uLGM9QXJyYXkuaXNBcnJheShsKT9sOltsXSx1PW8uY29sb3IsZj1vLnNpemUsaD1vLmZhbWlseSxwPXt9LGQ9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLG09ZS50ZXh0dGVtcGxhdGU7aWYobSl7cC50ZXh0PVtdO3ZhciBnPWkuX2QzbG9jYWxlLHk9QXJyYXkuaXNBcnJheShtKSx4PXk/TWF0aC5taW4obS5sZW5ndGgsYSk6YSxiPXk/ZnVuY3Rpb24odCl7cmV0dXJuIG1bdF19OmZ1bmN0aW9uKCl7cmV0dXJuIG19O2ZvcihyPTA7cjx4O3IrKyl7dmFyIF89e2k6cn0sdz1lLl9tb2R1bGUuZm9ybWF0TGFiZWxzKF8sZSxpKSxUPXt9O3YoVCxlLHIpO3ZhciBrPWUuX21ldGF8fHt9O3AudGV4dC5wdXNoKHMudGV4dHRlbXBsYXRlU3RyaW5nKGIociksdyxnLFQsXyxrKSl9fWVsc2UgQXJyYXkuaXNBcnJheShlLnRleHQpJiZlLnRleHQubGVuZ3RoPGE/cC50ZXh0PWUudGV4dC5zbGljZSgpOnAudGV4dD1lLnRleHQ7aWYoQXJyYXkuaXNBcnJheShwLnRleHQpKWZvcihyPXAudGV4dC5sZW5ndGg7cjxhO3IrKylwLnRleHRbcl09IiI7Zm9yKHAub3BhY2l0eT1lLm9wYWNpdHkscC5mb250PXt9LHAuYWxpZ249W10scC5iYXNlbGluZT1bXSxyPTA7cjxjLmxlbmd0aDtyKyspe3ZhciBBPWNbcl0uc3BsaXQoL1xzKy8pO3N3aXRjaChBWzFdKXtjYXNlImxlZnQiOnAuYWxpZ24ucHVzaCgicmlnaHQiKTticmVhaztjYXNlInJpZ2h0IjpwLmFsaWduLnB1c2goImxlZnQiKTticmVhaztkZWZhdWx0OnAuYWxpZ24ucHVzaChBWzFdKX1zd2l0Y2goQVswXSl7Y2FzZSJ0b3AiOnAuYmFzZWxpbmUucHVzaCgiYm90dG9tIik7YnJlYWs7Y2FzZSJib3R0b20iOnAuYmFzZWxpbmUucHVzaCgidG9wIik7YnJlYWs7ZGVmYXVsdDpwLmJhc2VsaW5lLnB1c2goQVswXSl9fWlmKEFycmF5LmlzQXJyYXkodSkpZm9yKHAuY29sb3I9bmV3IEFycmF5KGEpLHI9MDtyPGE7cisrKXAuY29sb3Jbcl09dVtyXTtlbHNlIHAuY29sb3I9dTtpZihzLmlzQXJyYXlPclR5cGVkQXJyYXkoZil8fEFycmF5LmlzQXJyYXkoaCkpZm9yKHAuZm9udD1uZXcgQXJyYXkoYSkscj0wO3I8YTtyKyspe3ZhciBNPXAuZm9udFtyXT17fTtNLnNpemU9KHMuaXNUeXBlZEFycmF5KGYpP2Zbcl06QXJyYXkuaXNBcnJheShmKT9uKGZbcl0pP2Zbcl06MDpmKSpkLE0uZmFtaWx5PUFycmF5LmlzQXJyYXkoaCk/aFtyXTpofWVsc2UgcC5mb250PXtzaXplOmYqZCxmYW1pbHk6aH07cmV0dXJuIHB9ZnVuY3Rpb24geCh0KXt2YXIgZSxyLG49dC5fbGVuZ3RoLGk9dC5tYXJrZXIsbz17fSxsPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLnN5bWJvbCksYz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5jb2xvciksZj1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLmNvbG9yKSxkPXMuaXNBcnJheU9yVHlwZWRBcnJheShpLm9wYWNpdHkpLG09cy5pc0FycmF5T3JUeXBlZEFycmF5KGkuc2l6ZSksZz1zLmlzQXJyYXlPclR5cGVkQXJyYXkoaS5saW5lLndpZHRoKTtpZihsfHwocj1wLmlzT3BlblN5bWJvbChpLnN5bWJvbCkpLGx8fGN8fGZ8fGQpe28uY29sb3JzPW5ldyBBcnJheShuKSxvLmJvcmRlckNvbG9ycz1uZXcgQXJyYXkobik7dmFyIHY9dShpLGkub3BhY2l0eSxuKSx5PXUoaS5saW5lLGkub3BhY2l0eSxuKTtpZighQXJyYXkuaXNBcnJheSh5WzBdKSl7dmFyIHg9eTtmb3IoeT1BcnJheShuKSxlPTA7ZTxuO2UrKyl5W2VdPXh9aWYoIUFycmF5LmlzQXJyYXkodlswXSkpe3ZhciBiPXY7Zm9yKHY9QXJyYXkobiksZT0wO2U8bjtlKyspdltlXT1ifWZvcihvLmNvbG9ycz12LG8uYm9yZGVyQ29sb3JzPXksZT0wO2U8bjtlKyspe2lmKGwpe3ZhciBfPWkuc3ltYm9sW2VdO3I9cC5pc09wZW5TeW1ib2woXyl9ciYmKHlbZV09dltlXS5zbGljZSgpLHZbZV09dltlXS5zbGljZSgpLHZbZV1bM109MCl9by5vcGFjaXR5PXQub3BhY2l0eX1lbHNlIHI/KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uY29sb3JbM109MCxvLmJvcmRlckNvbG9yPWEoaS5jb2xvciwidWludDgiKSk6KG8uY29sb3I9YShpLmNvbG9yLCJ1aW50OCIpLG8uYm9yZGVyQ29sb3I9YShpLmxpbmUuY29sb3IsInVpbnQ4IikpLG8ub3BhY2l0eT10Lm9wYWNpdHkqaS5vcGFjaXR5O2lmKGwpZm9yKG8ubWFya2Vycz1uZXcgQXJyYXkobiksZT0wO2U8bjtlKyspby5tYXJrZXJzW2VdPUUoaS5zeW1ib2xbZV0pO2Vsc2Ugby5tYXJrZXI9RShpLnN5bWJvbCk7dmFyIHcsVD1oKHQsMSk7aWYobXx8Zyl7dmFyIGssQT1vLnNpemVzPW5ldyBBcnJheShuKSxNPW8uYm9yZGVyU2l6ZXM9bmV3IEFycmF5KG4pLFM9MDtpZihtKXtmb3IoZT0wO2U8bjtlKyspQVtlXT1UKGkuc2l6ZVtlXSksUys9QVtlXTtrPVMvbn1lbHNlIGZvcih3PVQoaS5zaXplKSxlPTA7ZTxuO2UrKylBW2VdPXc7aWYoZylmb3IoZT0wO2U8bjtlKyspTVtlXT1pLmxpbmUud2lkdGhbZV07ZWxzZSBmb3Iodz1pLmxpbmUud2lkdGgsZT0wO2U8bjtlKyspTVtlXT13O28uc2l6ZUF2Zz1rfWVsc2Ugby5zaXplPVQoaSYmaS5zaXplfHwxMCksby5ib3JkZXJTaXplcz1UKGkubGluZS53aWR0aCk7cmV0dXJuIG99ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQubWFya2VyLG49e307cmV0dXJuIGU/KGUubWFya2VyJiZlLm1hcmtlci5zeW1ib2w/bj14KHMuZXh0ZW5kRmxhdCh7fSxyLGUubWFya2VyKSk6ZS5tYXJrZXImJihlLm1hcmtlci5zaXplJiYobi5zaXplPWUubWFya2VyLnNpemUpLGUubWFya2VyLmNvbG9yJiYobi5jb2xvcnM9ZS5tYXJrZXIuY29sb3IpLHZvaWQgMCE9PWUubWFya2VyLm9wYWNpdHkmJihuLm9wYWNpdHk9ZS5tYXJrZXIub3BhY2l0eSkpLG4pOm59ZnVuY3Rpb24gXyh0LGUscil7dmFyIG49e307aWYoIXIpcmV0dXJuIG47aWYoci50ZXh0Zm9udCl7dmFyIGk9e29wYWNpdHk6MSx0ZXh0OmUudGV4dCx0ZXh0dGVtcGxhdGU6ZS50ZXh0dGVtcGxhdGUsdGV4dHBvc2l0aW9uOmUudGV4dHBvc2l0aW9uLHRleHRmb250OnMuZXh0ZW5kRmxhdCh7fSxlLnRleHRmb250KX07ci50ZXh0Zm9udCYmcy5leHRlbmRGbGF0KGkudGV4dGZvbnQsci50ZXh0Zm9udCksbj15KHQsaSl9cmV0dXJuIG59ZnVuY3Rpb24gdyh0LGUscil7dmFyIG49e2NhcFNpemU6MiplLndpZHRoKnIsbGluZVdpZHRoOmUudGhpY2tuZXNzKnIsY29sb3I6ZS5jb2xvcn07cmV0dXJuIGUuY29weV95c3R5bGUmJihuPXQuZXJyb3JfeSksbn12YXIgVD1kLlNZTUJPTF9TREZfU0laRSxrPWQuU1lNQk9MX1NJWkUsQT1kLlNZTUJPTF9TVFJPS0UsTT17fSxTPWwuc3ltYm9sRnVuY3NbMF0oLjA1KmspO2Z1bmN0aW9uIEUodCl7aWYoImNpcmNsZSI9PT10KXJldHVybiBudWxsO3ZhciBlLHIsbj1sLnN5bWJvbE51bWJlcih0KSxhPWwuc3ltYm9sRnVuY3NbbiUxMDBdLG89ISFsLnN5bWJvbE5vRG90W24lMTAwXSxzPSEhbC5zeW1ib2xOb0ZpbGxbbiUxMDBdLGM9cC5pc0RvdFN5bWJvbCh0KTtyZXR1cm4gTVt0XT9NW3RdOihlPWMmJiFvP2EoMS4xKmspK1M6YShrKSxyPWkoZSx7dzpULGg6VCx2aWV3Qm94OlstaywtayxrLGtdLHN0cm9rZTpzP0E6LUF9KSxNW3RdPXIscnx8bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0LGUpe3ZhciByLG49e21hcmtlcjp2b2lkIDAsbWFya2VyU2VsOnZvaWQgMCxtYXJrZXJVbnNlbDp2b2lkIDAsbGluZTp2b2lkIDAsZmlsbDp2b2lkIDAsZXJyb3JYOnZvaWQgMCxlcnJvclk6dm9pZCAwLHRleHQ6dm9pZCAwLHRleHRTZWw6dm9pZCAwLHRleHRVbnNlbDp2b2lkIDB9LGk9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvO2lmKCEwIT09ZS52aXNpYmxlKXJldHVybiBuO2lmKGYuaGFzVGV4dChlKSYmKG4udGV4dD15KHQsZSksbi50ZXh0U2VsPV8odCxlLGUuc2VsZWN0ZWQpLG4udGV4dFVuc2VsPV8odCxlLGUudW5zZWxlY3RlZCkpLGYuaGFzTWFya2VycyhlKSYmKG4ubWFya2VyPXgoZSksbi5tYXJrZXJTZWw9YihlLGUuc2VsZWN0ZWQpLG4ubWFya2VyVW5zZWw9YihlLGUudW5zZWxlY3RlZCksIWUudW5zZWxlY3RlZCYmcy5pc0FycmF5T3JUeXBlZEFycmF5KGUubWFya2VyLm9wYWNpdHkpKSl7dmFyIGE9ZS5tYXJrZXIub3BhY2l0eTtmb3Iobi5tYXJrZXJVbnNlbC5vcGFjaXR5PW5ldyBBcnJheShhLmxlbmd0aCkscj0wO3I8YS5sZW5ndGg7cisrKW4ubWFya2VyVW5zZWwub3BhY2l0eVtyXT1tKmFbcl19aWYoZi5oYXNMaW5lcyhlKSl7bi5saW5lPXtvdmVybGF5OiEwLHRoaWNrbmVzczplLmxpbmUud2lkdGgqaSxjb2xvcjplLmxpbmUuY29sb3Isb3BhY2l0eTplLm9wYWNpdHl9O3ZhciBvPShkLkRBU0hFU1tlLmxpbmUuZGFzaF18fFsxXSkuc2xpY2UoKTtmb3Iocj0wO3I8by5sZW5ndGg7KytyKW9bcl0qPWUubGluZS53aWR0aCppO24ubGluZS5kYXNoZXM9b31yZXR1cm4gZS5lcnJvcl94JiZlLmVycm9yX3gudmlzaWJsZSYmKG4uZXJyb3JYPXcoZSxlLmVycm9yX3gsaSkpLGUuZXJyb3JfeSYmZS5lcnJvcl95LnZpc2libGUmJihuLmVycm9yWT13KGUsZS5lcnJvcl95LGkpKSxlLmZpbGwmJiJub25lIiE9PWUuZmlsbCYmKG4uZmlsbD17Y2xvc2VkOiEwLGZpbGw6ZS5maWxsY29sb3IsdGhpY2tuZXNzOjB9KSxufSxtYXJrZXJTdHlsZTp4LG1hcmtlclNlbGVjdGlvbjpiLGxpbmVQb3NpdGlvbnM6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksYT1yLmxlbmd0aCxvPWEvMjtpZihmLmhhc0xpbmVzKGUpJiZvKWlmKCJodiI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOLE5hTixOYU4pOihuLnB1c2goclsyKmldLHJbMippKzFdKSxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKT9uLnB1c2goTmFOLE5hTik6bi5wdXNoKHJbMippKzJdLHJbMippKzFdKSk7bi5wdXNoKHJbYS0yXSxyW2EtMV0pfWVsc2UgaWYoImh2aCI9PT1lLmxpbmUuc2hhcGUpe2ZvcihuPVtdLGk9MDtpPG8tMTtpKyspaWYoaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pfHxpc05hTihyWzIqaSsyXSl8fGlzTmFOKHJbMippKzNdKSlpc05hTihyWzIqaV0pfHxpc05hTihyWzIqaSsxXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrMV0pLG4ucHVzaChOYU4sTmFOKTtlbHNle3ZhciBzPShyWzIqaV0rclsyKmkrMl0pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxzLHJbMippKzFdLHMsclsyKmkrM10pfW4ucHVzaChyW2EtMl0sclthLTFdKX1lbHNlIGlmKCJ2aHYiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlmKGlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKXx8aXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSkpaXNOYU4oclsyKmldKXx8aXNOYU4oclsyKmkrMV0pP24ucHVzaChOYU4sTmFOKTpuLnB1c2goclsyKmldLHJbMippKzFdKSxuLnB1c2goTmFOLE5hTik7ZWxzZXt2YXIgbD0oclsyKmkrMV0rclsyKmkrM10pLzI7bi5wdXNoKHJbMippXSxyWzIqaSsxXSxyWzIqaV0sbCxyWzIqaSsyXSxsKX1uLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBpZigidmgiPT09ZS5saW5lLnNoYXBlKXtmb3Iobj1bXSxpPTA7aTxvLTE7aSsrKWlzTmFOKHJbMippXSl8fGlzTmFOKHJbMippKzFdKT9uLnB1c2goTmFOLE5hTixOYU4sTmFOKToobi5wdXNoKHJbMippXSxyWzIqaSsxXSksaXNOYU4oclsyKmkrMl0pfHxpc05hTihyWzIqaSszXSk/bi5wdXNoKE5hTixOYU4pOm4ucHVzaChyWzIqaV0sclsyKmkrM10pKTtuLnB1c2goclthLTJdLHJbYS0xXSl9ZWxzZSBuPXI7dmFyIGM9ITE7Zm9yKGk9MDtpPG4ubGVuZ3RoO2krKylpZihpc05hTihuW2ldKSl7Yz0hMDticmVha312YXIgdT1jfHxuLmxlbmd0aD5kLlRPT19NQU5ZX1BPSU5UU3x8Zi5oYXNNYXJrZXJzKGUpPyJyZWN0Ijoicm91bmQiO2lmKGMmJmUuY29ubmVjdGdhcHMpe3ZhciBoPW5bMF0scD1uWzFdO2ZvcihpPTA7aTxuLmxlbmd0aDtpKz0yKWlzTmFOKG5baV0pfHxpc05hTihuW2krMV0pPyhuW2ldPWgsbltpKzFdPXApOihoPW5baV0scD1uW2krMV0pfXJldHVybntqb2luOnUscG9zaXRpb25zOm59fSxlcnJvckJhclBvc2l0aW9uczpmdW5jdGlvbih0LGUscixpLGEpe3ZhciBzPW8uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJtYWtlQ29tcHV0ZUVycm9yIiksbD1jLmdldEZyb21JZCh0LGUueGF4aXMpLHU9Yy5nZXRGcm9tSWQodCxlLnlheGlzKSxmPXIubGVuZ3RoLzIsaD17fTtmdW5jdGlvbiBwKHQsaSl7dmFyIGE9aS5faWQuY2hhckF0KDApLG89ZVsiZXJyb3JfIithXTtpZihvJiZvLnZpc2libGUmJigibGluZWFyIj09PWkudHlwZXx8ImxvZyI9PT1pLnR5cGUpKXtmb3IodmFyIGw9cyhvKSxjPXt4OjAseToxfVthXSx1PXt4OlswLDEsMiwzXSx5OlsyLDMsMCwxXX1bYV0scD1uZXcgRmxvYXQ2NEFycmF5KDQqZiksZD0xLzAsbT0tMS8wLGc9MCx2PTA7ZzxmO2crKyx2Kz00KXt2YXIgeT10W2ddO2lmKG4oeSkpe3ZhciB4PXJbMipnK2NdLGI9bCh5LGcpLF89YlswXSx3PWJbMV07aWYobihfKSYmbih3KSl7dmFyIFQ9eS1fLGs9eSt3O3Bbdit1WzBdXT14LWkuYzJsKFQpLHBbdit1WzFdXT1pLmMybChrKS14LHBbdit1WzJdXT0wLHBbdit1WzNdXT0wLGQ9TWF0aC5taW4oZCx5LV8pLG09TWF0aC5tYXgobSx5K3cpfX19aFthXT17cG9zaXRpb25zOnIsZXJyb3JzOnAsX2JuZHM6W2QsbV19fX1yZXR1cm4gcChpLGwpLHAoYSx1KSxofSx0ZXh0UG9zaXRpb246ZnVuY3Rpb24odCxlLHIsbil7dmFyIGksYT1lLl9sZW5ndGgsbz17fTtpZihmLmhhc01hcmtlcnMoZSkpe3ZhciBzPXIuZm9udCxsPXIuYWxpZ24sYz1yLmJhc2VsaW5lO2ZvcihvLm9mZnNldD1uZXcgQXJyYXkoYSksaT0wO2k8YTtpKyspe3ZhciB1PW4uc2l6ZXM/bi5zaXplc1tpXTpuLnNpemUsaD1BcnJheS5pc0FycmF5KHMpP3NbaV0uc2l6ZTpzLnNpemUscD1BcnJheS5pc0FycmF5KGwpP2wubGVuZ3RoPjE/bFtpXTpsWzBdOmwsZD1BcnJheS5pc0FycmF5KGMpP2MubGVuZ3RoPjE/Y1tpXTpjWzBdOmMsbT1nW3BdLHY9Z1tkXSx5PXU/dS8uOCsxOjAseD0tdip5LS41KnY7by5vZmZzZXRbaV09W20qeS9oLHgvaF19fXJldHVybiBvfX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc1LCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2lkcyI6ODMxLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwOCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi9jb25zdGFudHMiOjEyNDUsIi4vaGVscGVycyI6MTI1MCwiY29sb3Itbm9ybWFsaXplIjoxMjYsImZhc3QtaXNudW1lcmljIjoyNDIsInN2Zy1wYXRoLXNkZiI6NTY5fV0sMTI0NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3JlZ2lzdHJ5IiksYT10KCIuL2hlbHBlcnMiKSxvPXQoIi4vYXR0cmlidXRlcyIpLHM9dCgiLi4vc2NhdHRlci9jb25zdGFudHMiKSxsPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxjPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksZj10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLGg9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscD10KCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyIpLGQ9dCgiLi4vc2NhdHRlci90ZXh0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0pe2Z1bmN0aW9uIGcocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLG8scixpKX12YXIgdj0hIXQubWFya2VyJiZhLmlzT3BlblN5bWJvbCh0Lm1hcmtlci5zeW1ib2wpLHk9bC5pc0J1YmJsZSh0KSx4PWModCxlLG0sZyk7aWYoeCl7dSh0LGUsbSxnKSxnKCJ4aG92ZXJmb3JtYXQiKSxnKCJ5aG92ZXJmb3JtYXQiKTt2YXIgYj14PHMuUFRTX0xJTkVTT05MWT8ibGluZXMrbWFya2VycyI6ImxpbmVzIjtnKCJ0ZXh0IiksZygiaG92ZXJ0ZXh0IiksZygiaG92ZXJ0ZW1wbGF0ZSIpLGcoIm1vZGUiLGIpLGwuaGFzTGluZXMoZSkmJihnKCJjb25uZWN0Z2FwcyIpLGgodCxlLHIsbSxnKSxnKCJsaW5lLnNoYXBlIikpLGwuaGFzTWFya2VycyhlKSYmKGYodCxlLHIsbSxnKSxnKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApKSxsLmhhc1RleHQoZSkmJihnKCJ0ZXh0dGVtcGxhdGUiKSxkKHQsZSxtLGcpKTt2YXIgXz0oZS5saW5lfHx7fSkuY29sb3Isdz0oZS5tYXJrZXJ8fHt9KS5jb2xvcjtnKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZwKHQsZSxyLGcpO3ZhciBUPWkuZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJzdXBwbHlEZWZhdWx0cyIpO1QodCxlLF98fHd8fHIse2F4aXM6InkifSksVCh0LGUsX3x8d3x8cix7YXhpczoieCIsaW5oZXJpdDoieSJ9KSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxnKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTk1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5OSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjA0LCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi4vc2NhdHRlci94eV9kZWZhdWx0cyI6MTIxOCwiLi9hdHRyaWJ1dGVzIjoxMjQzLCIuL2hlbHBlcnMiOjEyNTB9XSwxMjQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyIpLkRFU0VMRUNURElNO2UuZXhwb3J0cz17c3R5bGVUZXh0U2VsZWN0aW9uOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbz10WzBdLHM9by50cmFjZSxsPW8udCxjPWwuX3NjZW5lLHU9bC5pbmRleCxmPWMuc2VsZWN0QmF0Y2hbdV0saD1jLnVuc2VsZWN0QmF0Y2hbdV0scD1jLnRleHRPcHRpb25zW3VdLGQ9Yy50ZXh0U2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxtPWMudGV4dFVuc2VsZWN0ZWRPcHRpb25zW3VdfHx7fSxnPW4uZXh0ZW5kRmxhdCh7fSxwKTtpZihmLmxlbmd0aHx8aC5sZW5ndGgpe3ZhciB2PWQuY29sb3IseT1tLmNvbG9yLHg9cC5jb2xvcixiPUFycmF5LmlzQXJyYXkoeCk7Zm9yKGcuY29sb3I9bmV3IEFycmF5KHMuX2xlbmd0aCksZT0wO2U8Zi5sZW5ndGg7ZSsrKXI9ZltlXSxnLmNvbG9yW3JdPXZ8fChiP3hbcl06eCk7Zm9yKGU9MDtlPGgubGVuZ3RoO2UrKyl7cj1oW2VdO3ZhciBfPWI/eFtyXTp4O2cuY29sb3Jbcl09eXx8KHY/XzppLmFkZE9wYWNpdHkoXyxhKSl9fWMuZ2xUZXh0W3VdLnVwZGF0ZShnKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29uc3RhbnRzL2ludGVyYWN0aW9ucyI6NzUxLCIuLi8uLi9saWIiOjc3Nn1dLDEyNDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9mb3JtYXRfbGFiZWxzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10Lmk7cmV0dXJuIngiaW4gdHx8KHQueD1lLl94W2ldKSwieSJpbiB0fHwodC55PWUuX3lbaV0pLG4odCxlLHIpfX0seyIuLi9zY2F0dGVyL2Zvcm1hdF9sYWJlbHMiOjEyMDB9XSwxMjUwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIik7ci5pc09wZW5TeW1ib2w9ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P24uT1BFTl9SRS50ZXN0KHQpOnQlMjAwPjEwMH0sci5pc0RvdFN5bWJvbD1mdW5jdGlvbih0KXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQ/bi5ET1RfUkUudGVzdCh0KTp0PjIwMH19LHsiLi9jb25zdGFudHMiOjEyNDV9XSwxMjUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIik7ZnVuY3Rpb24gbyh0LGUscixvKXt2YXIgcz10LnhhLGw9dC55YSxjPXQuZGlzdGFuY2UsdT10LmR4eSxmPXQuaW5kZXgsaD17cG9pbnROdW1iZXI6Zix4OmVbZl0seTpyW2ZdfTtoLnR4PUFycmF5LmlzQXJyYXkoby50ZXh0KT9vLnRleHRbZl06by50ZXh0LGguaHR4PUFycmF5LmlzQXJyYXkoby5ob3ZlcnRleHQpP28uaG92ZXJ0ZXh0W2ZdOm8uaG92ZXJ0ZXh0LGguZGF0YT1BcnJheS5pc0FycmF5KG8uY3VzdG9tZGF0YSk/by5jdXN0b21kYXRhW2ZdOm8uY3VzdG9tZGF0YSxoLnRwPUFycmF5LmlzQXJyYXkoby50ZXh0cG9zaXRpb24pP28udGV4dHBvc2l0aW9uW2ZdOm8udGV4dHBvc2l0aW9uO3ZhciBwPW8udGV4dGZvbnQ7cCYmKGgudHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KHAuc2l6ZSk/cC5zaXplW2ZdOnAuc2l6ZSxoLnRjPUFycmF5LmlzQXJyYXkocC5jb2xvcik/cC5jb2xvcltmXTpwLmNvbG9yLGgudGY9QXJyYXkuaXNBcnJheShwLmZhbWlseSk/cC5mYW1pbHlbZl06cC5mYW1pbHkpO3ZhciBkPW8ubWFya2VyO2QmJihoLm1zPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLnNpemUpP2Quc2l6ZVtmXTpkLnNpemUsaC5tbz1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZC5vcGFjaXR5KT9kLm9wYWNpdHlbZl06ZC5vcGFjaXR5LGgubXg9aS5pc0FycmF5T3JUeXBlZEFycmF5KGQuc3ltYm9sKT9kLnN5bWJvbFtmXTpkLnN5bWJvbCxoLm1jPWkuaXNBcnJheU9yVHlwZWRBcnJheShkLmNvbG9yKT9kLmNvbG9yW2ZdOmQuY29sb3IpO3ZhciBtPWQmJmQubGluZTttJiYoaC5tbGM9QXJyYXkuaXNBcnJheShtLmNvbG9yKT9tLmNvbG9yW2ZdOm0uY29sb3IsaC5tbHc9aS5pc0FycmF5T3JUeXBlZEFycmF5KG0ud2lkdGgpP20ud2lkdGhbZl06bS53aWR0aCk7dmFyIGc9ZCYmZC5ncmFkaWVudDtnJiYibm9uZSIhPT1nLnR5cGUmJihoLm1ndD1BcnJheS5pc0FycmF5KGcudHlwZSk/Zy50eXBlW2ZdOmcudHlwZSxoLm1nYz1BcnJheS5pc0FycmF5KGcuY29sb3IpP2cuY29sb3JbZl06Zy5jb2xvcik7dmFyIHY9cy5jMnAoaC54LCEwKSx5PWwuYzJwKGgueSwhMCkseD1oLm1yY3x8MSxiPW8uaG92ZXJsYWJlbDtiJiYoaC5oYmc9QXJyYXkuaXNBcnJheShiLmJnY29sb3IpP2IuYmdjb2xvcltmXTpiLmJnY29sb3IsaC5oYmM9QXJyYXkuaXNBcnJheShiLmJvcmRlcmNvbG9yKT9iLmJvcmRlcmNvbG9yW2ZdOmIuYm9yZGVyY29sb3IsaC5odHM9aS5pc0FycmF5T3JUeXBlZEFycmF5KGIuZm9udC5zaXplKT9iLmZvbnQuc2l6ZVtmXTpiLmZvbnQuc2l6ZSxoLmh0Yz1BcnJheS5pc0FycmF5KGIuZm9udC5jb2xvcik/Yi5mb250LmNvbG9yW2ZdOmIuZm9udC5jb2xvcixoLmh0Zj1BcnJheS5pc0FycmF5KGIuZm9udC5mYW1pbHkpP2IuZm9udC5mYW1pbHlbZl06Yi5mb250LmZhbWlseSxoLmhubD1pLmlzQXJyYXlPclR5cGVkQXJyYXkoYi5uYW1lbGVuZ3RoKT9iLm5hbWVsZW5ndGhbZl06Yi5uYW1lbGVuZ3RoKTt2YXIgXz1vLmhvdmVyaW5mbztfJiYoaC5oaT1BcnJheS5pc0FycmF5KF8pP19bZl06Xyk7dmFyIHc9by5ob3ZlcnRlbXBsYXRlO3cmJihoLmh0PUFycmF5LmlzQXJyYXkodyk/d1tmXTp3KTt2YXIgVD17fTtUW3QuaW5kZXhdPWg7dmFyIGs9by5fb3JpZ1gsQT1vLl9vcmlnWSxNPWkuZXh0ZW5kRmxhdCh7fSx0LHtjb2xvcjphKG8saCkseDA6di14LHgxOnYreCx4TGFiZWxWYWw6az9rW2ZdOmgueCx5MDp5LXgseTE6eSt4LHlMYWJlbFZhbDpBP0FbZl06aC55LGNkOlQsZGlzdGFuY2U6YyxzcGlrZURpc3RhbmNlOnUsaG92ZXJ0ZW1wbGF0ZTpoLmh0fSk7cmV0dXJuIGguaHR4P00udGV4dD1oLmh0eDpoLnR4P00udGV4dD1oLnR4Om8udGV4dCYmKE0udGV4dD1vLnRleHQpLGkuZmlsbFRleHQoaCxvLE0pLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJlcnJvcmJhcnMiLCJob3ZlckluZm8iKShoLG8sTSksTX1lLmV4cG9ydHM9e2hvdmVyUG9pbnRzOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEscyxsLGMsdSxmLGgscCxkLG09dC5jZCxnPW1bMF0udCx2PW1bMF0udHJhY2UseT10LnhhLHg9dC55YSxiPWcueCxfPWcueSx3PXkuYzJwKGUpLFQ9eC5jMnAociksaz10LmRpc3RhbmNlO2lmKGcudHJlZSl7dmFyIEE9eS5wMmMody1rKSxNPXkucDJjKHcrayksUz14LnAyYyhULWspLEU9eC5wMmMoVCtrKTtpPSJ4Ij09PW4/Zy50cmVlLnJhbmdlKE1hdGgubWluKEEsTSksTWF0aC5taW4oeC5fcmxbMF0seC5fcmxbMV0pLE1hdGgubWF4KEEsTSksTWF0aC5tYXgoeC5fcmxbMF0seC5fcmxbMV0pKTpnLnRyZWUucmFuZ2UoTWF0aC5taW4oQSxNKSxNYXRoLm1pbihTLEUpLE1hdGgubWF4KEEsTSksTWF0aC5tYXgoUyxFKSl9ZWxzZSBpPWcuaWRzO3ZhciBMPWs7aWYoIngiPT09bil7dmFyIEM9ISF2LnhwZXJpb2RhbGlnbm1lbnQsUD0hIXYueXBlcmlvZGFsaWdubWVudDtmb3IodT0wO3U8aS5sZW5ndGg7dSsrKXtpZihsPWJbYT1pW3VdXSxmPU1hdGguYWJzKHkuYzJwKGwpLXcpLEMpe3ZhciBJPXkuYzJwKHYuX3hTdGFydHNbYV0pLE89eS5jMnAodi5feEVuZHNbYV0pO2Y9dz49TWF0aC5taW4oSSxPKSYmdzw9TWF0aC5tYXgoSSxPKT8wOjEvMH1pZihmPEwpe2lmKEw9ZixjPV9bYV0saD14LmMycChjKS1ULFApe3ZhciB6PXguYzJwKHYuX3lTdGFydHNbYV0pLEQ9eC5jMnAodi5feUVuZHNbYV0pO2g9VD49TWF0aC5taW4oeixEKSYmVDw9TWF0aC5tYXgoeixEKT8wOjEvMH1kPU1hdGguc3FydChmKmYraCpoKSxzPWlbdV19fX1lbHNlIGZvcih1PWkubGVuZ3RoLTE7dT4tMTt1LS0pbD1iW2E9aVt1XV0sYz1fW2FdLGY9eS5jMnAobCktdyxoPXguYzJwKGMpLVQsKHA9TWF0aC5zcXJ0KGYqZitoKmgpKTxMJiYoTD1kPXAscz1hKTtyZXR1cm4gdC5pbmRleD1zLHQuZGlzdGFuY2U9TCx0LmR4eT1kLHZvaWQgMD09PXM/W3RdOltvKHQsYixfLHYpXX0sY2FsY0hvdmVyOm99fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL2dldF90cmFjZV9jb2xvciI6MTIwMX1dLDEyNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9ob3ZlciIpO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJnbCIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuIiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJlcnJvckJhcnNPSyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjcm9zc1RyYWNlRGVmYXVsdHM6dCgiLi4vc2NhdHRlci9jcm9zc190cmFjZV9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czpuLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2NhcnRlc2lhbiI6ODQxLCIuLi9zY2F0dGVyL2Nyb3NzX3RyYWNlX2RlZmF1bHRzIjoxMTk3LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMjQzLCIuL2NhbGMiOjEyNDQsIi4vZGVmYXVsdHMiOjEyNDcsIi4vZm9ybWF0X2xhYmVscyI6MTI0OSwiLi9ob3ZlciI6MTI1MSwiLi9wbG90IjoxMjUzLCIuL3NlbGVjdCI6MTI1NX1dLDEyNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgicmVnbC1zY2F0dGVyMmQiKSxpPXQoInJlZ2wtbGluZTJkIiksYT10KCJyZWdsLWVycm9yMmQiKSxvPXQoImdsLXRleHQiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIikuc2VsZWN0TW9kZSxjPXQoIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiKSx1PXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxmPXQoIi4uL3NjYXR0ZXIvbGlua190cmFjZXMiKSxoPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtmdW5jdGlvbiBwKHQsZSxyLG4pe3ZhciBpPXQuX3NpemUsYT10LndpZHRoKm4sbz10LmhlaWdodCpuLHM9aS5sKm4sbD1pLmIqbixjPWkucipuLHU9aS50Km4sZj1pLncqbixoPWkuaCpuO3JldHVybltzK2UuZG9tYWluWzBdKmYsbCtyLmRvbWFpblswXSpoLGEtYy0oMS1lLmRvbWFpblsxXSkqZixvLXUtKDEtci5kb21haW5bMV0pKmhdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciBkLG0sZz10Ll9mdWxsTGF5b3V0LHY9ZS5fc2NlbmUseT1lLnhheGlzLHg9ZS55YXhpcztpZih2KWlmKGModCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pKXt2YXIgYj12LmNvdW50LF89Zy5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2w7aWYoZih0LGUsciksdi5kaXJ0eSl7aWYoITA9PT12LmVycm9yMmQmJih2LmVycm9yMmQ9YShfKSksITA9PT12LmxpbmUyZCYmKHYubGluZTJkPWkoXykpLCEwPT09di5zY2F0dGVyMmQmJih2LnNjYXR0ZXIyZD1uKF8pKSwhMD09PXYuZmlsbDJkJiYodi5maWxsMmQ9aShfKSksITA9PT12LmdsVGV4dClmb3Iodi5nbFRleHQ9bmV3IEFycmF5KGIpLGQ9MDtkPGI7ZCsrKXYuZ2xUZXh0W2RdPW5ldyBvKF8pO2lmKHYuZ2xUZXh0KXtpZihiPnYuZ2xUZXh0Lmxlbmd0aCl7dmFyIHc9Yi12LmdsVGV4dC5sZW5ndGg7Zm9yKGQ9MDtkPHc7ZCsrKXYuZ2xUZXh0LnB1c2gobmV3IG8oXykpfWVsc2UgaWYoYjx2LmdsVGV4dC5sZW5ndGgpe3ZhciBUPXYuZ2xUZXh0Lmxlbmd0aC1iO3YuZ2xUZXh0LnNwbGljZShiLFQpLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuZGVzdHJveSgpfSkpfWZvcihkPTA7ZDxiO2QrKyl2LmdsVGV4dFtkXS51cGRhdGUodi50ZXh0T3B0aW9uc1tkXSl9aWYodi5saW5lMmQmJih2LmxpbmUyZC51cGRhdGUodi5saW5lT3B0aW9ucyksdi5saW5lT3B0aW9ucz12LmxpbmVPcHRpb25zLm1hcCgoZnVuY3Rpb24odCl7aWYodCYmdC5wb3NpdGlvbnMpe2Zvcih2YXIgZT10LnBvc2l0aW9ucyxyPTA7cjxlLmxlbmd0aCYmKGlzTmFOKGVbcl0pfHxpc05hTihlW3IrMV0pKTspcis9Mjtmb3IodmFyIG49ZS5sZW5ndGgtMjtuPnImJihpc05hTihlW25dKXx8aXNOYU4oZVtuKzFdKSk7KW4tPTI7dC5wb3NpdGlvbnM9ZS5zbGljZShyLG4rMil9cmV0dXJuIHR9KSksdi5saW5lMmQudXBkYXRlKHYubGluZU9wdGlvbnMpKSx2LmVycm9yMmQpe3ZhciBrPSh2LmVycm9yWE9wdGlvbnN8fFtdKS5jb25jYXQodi5lcnJvcllPcHRpb25zfHxbXSk7di5lcnJvcjJkLnVwZGF0ZShrKX12LnNjYXR0ZXIyZCYmdi5zY2F0dGVyMmQudXBkYXRlKHYubWFya2VyT3B0aW9ucyksdi5maWxsT3JkZXI9cy5yZXBlYXQobnVsbCxiKSx2LmZpbGwyZCYmKHYuZmlsbE9wdGlvbnM9di5maWxsT3B0aW9ucy5tYXAoKGZ1bmN0aW9uKHQsZSl7dmFyIG49cltlXTtpZih0JiZuJiZuWzBdJiZuWzBdLnRyYWNlKXt2YXIgaSxhLG89blswXSxzPW8udHJhY2UsbD1vLnQsYz12LmxpbmVPcHRpb25zW2VdLHU9W107cy5fb3duZmlsbCYmdS5wdXNoKGUpLHMuX25leHR0cmFjZSYmdS5wdXNoKGUrMSksdS5sZW5ndGgmJih2LmZpbGxPcmRlcltlXT11KTt2YXIgZixoLHA9W10sZD1jJiZjLnBvc2l0aW9uc3x8bC5wb3NpdGlvbnM7aWYoInRvemVyb3kiPT09cy5maWxsKXtmb3IoZj0wO2Y8ZC5sZW5ndGgmJmlzTmFOKGRbZisxXSk7KWYrPTI7Zm9yKGg9ZC5sZW5ndGgtMjtoPmYmJmlzTmFOKGRbaCsxXSk7KWgtPTI7MCE9PWRbZisxXSYmKHA9W2RbZl0sMF0pLHA9cC5jb25jYXQoZC5zbGljZShmLGgrMikpLDAhPT1kW2grMV0mJihwPXAuY29uY2F0KFtkW2hdLDBdKSl9ZWxzZSBpZigidG96ZXJveCI9PT1zLmZpbGwpe2ZvcihmPTA7ZjxkLmxlbmd0aCYmaXNOYU4oZFtmXSk7KWYrPTI7Zm9yKGg9ZC5sZW5ndGgtMjtoPmYmJmlzTmFOKGRbaF0pOyloLT0yOzAhPT1kW2ZdJiYocD1bMCxkW2YrMV1dKSxwPXAuY29uY2F0KGQuc2xpY2UoZixoKzIpKSwwIT09ZFtoXSYmKHA9cC5jb25jYXQoWzAsZFtoKzFdXSkpfWVsc2UgaWYoInRvc2VsZiI9PT1zLmZpbGx8fCJ0b25leHQiPT09cy5maWxsKXtmb3IocD1bXSxpPTAsdC5zcGxpdE51bGw9ITAsYT0wO2E8ZC5sZW5ndGg7YSs9MikoaXNOYU4oZFthXSl8fGlzTmFOKGRbYSsxXSkpJiYoKHA9cC5jb25jYXQoZC5zbGljZShpLGEpKSkucHVzaChkW2ldLGRbaSsxXSkscC5wdXNoKG51bGwsbnVsbCksaT1hKzIpO3A9cC5jb25jYXQoZC5zbGljZShpKSksaSYmcC5wdXNoKGRbaV0sZFtpKzFdKX1lbHNle3ZhciBtPXMuX25leHR0cmFjZTtpZihtKXt2YXIgZz12LmxpbmVPcHRpb25zW2UrMV07aWYoZyl7dmFyIHk9Zy5wb3NpdGlvbnM7aWYoInRvbmV4dHkiPT09cy5maWxsKXtmb3IocD1kLnNsaWNlKCksZT1NYXRoLmZsb29yKHkubGVuZ3RoLzIpO2UtLTspe3ZhciB4PXlbMiplXSxiPXlbMiplKzFdO2lzTmFOKHgpfHxpc05hTihiKXx8cC5wdXNoKHgsYil9dC5maWxsPW0uZmlsbGNvbG9yfX19fWlmKHMuX3ByZXZ0cmFjZSYmInRvbmV4dCI9PT1zLl9wcmV2dHJhY2UuZmlsbCl7dmFyIF89di5saW5lT3B0aW9uc1tlLTFdLnBvc2l0aW9ucyx3PXAubGVuZ3RoLzIsVD1baT13XTtmb3IoYT0wO2E8Xy5sZW5ndGg7YSs9MikoaXNOYU4oX1thXSl8fGlzTmFOKF9bYSsxXSkpJiYoVC5wdXNoKGEvMit3KzEpLGk9YSsyKTtwPXAuY29uY2F0KF8pLHQuaG9sZT1UfXJldHVybiB0LmZpbGxtb2RlPXMuZmlsbCx0Lm9wYWNpdHk9cy5vcGFjaXR5LHQucG9zaXRpb25zPXAsdH19KSksdi5maWxsMmQudXBkYXRlKHYuZmlsbE9wdGlvbnMpKX12YXIgQT1nLmRyYWdtb2RlLE09bChBKSxTPWcuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xO2ZvcihkPTA7ZDxiO2QrKyl7dmFyIEU9cltkXVswXSxMPUUudHJhY2UsQz1FLnQsUD1DLmluZGV4LEk9TC5fbGVuZ3RoLE89Qy54LHo9Qy55O2lmKEwuc2VsZWN0ZWRwb2ludHN8fE18fFMpe2lmKE18fChNPSEwKSxMLnNlbGVjdGVkcG9pbnRzKXt2YXIgRD12LnNlbGVjdEJhdGNoW1BdPXMuc2VsSW5kaWNlczJzZWxQb2ludHMoTCksUj17fTtmb3IobT0wO208RC5sZW5ndGg7bSsrKVJbRFttXV09MTt2YXIgRj1bXTtmb3IobT0wO208STttKyspUlttXXx8Ri5wdXNoKG0pO3YudW5zZWxlY3RCYXRjaFtQXT1GfXZhciBCPUMueHB4PW5ldyBBcnJheShJKSxOPUMueXB4PW5ldyBBcnJheShJKTtmb3IobT0wO208STttKyspQlttXT15LmMycChPW21dKSxOW21dPXguYzJwKHpbbV0pfWVsc2UgQy54cHg9Qy55cHg9bnVsbH1pZihNKXtpZih2LnNlbGVjdDJkfHwodi5zZWxlY3QyZD1uKGcuX2dsY2FudmFzLmRhdGEoKVsxXS5yZWdsKSksdi5zY2F0dGVyMmQpe3ZhciBqPW5ldyBBcnJheShiKTtmb3IoZD0wO2Q8YjtkKyspaltkXT12LnNlbGVjdEJhdGNoW2RdLmxlbmd0aHx8di51bnNlbGVjdEJhdGNoW2RdLmxlbmd0aD92Lm1hcmtlclVuc2VsZWN0ZWRPcHRpb25zW2RdOnt9O3Yuc2NhdHRlcjJkLnVwZGF0ZShqKX12LnNlbGVjdDJkJiYodi5zZWxlY3QyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKSx2LnNlbGVjdDJkLnVwZGF0ZSh2Lm1hcmtlclNlbGVjdGVkT3B0aW9ucykpLHYuZ2xUZXh0JiZyLmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPSgodHx8W10pWzBdfHx7fSkudHJhY2V8fHt9O3UuaGFzVGV4dChlKSYmaCh0KX0pKX1lbHNlIHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUodi5tYXJrZXJPcHRpb25zKTt2YXIgVT17dmlld3BvcnQ6cChnLHkseCx0Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8pLHJhbmdlOlsoeS5fcmx8fHkucmFuZ2UpWzBdLCh4Ll9ybHx8eC5yYW5nZSlbMF0sKHkuX3JsfHx5LnJhbmdlKVsxXSwoeC5fcmx8fHgucmFuZ2UpWzFdXX0sVj1zLnJlcGVhdChVLHYuY291bnQpO3YuZmlsbDJkJiZ2LmZpbGwyZC51cGRhdGUoViksdi5saW5lMmQmJnYubGluZTJkLnVwZGF0ZShWKSx2LmVycm9yMmQmJnYuZXJyb3IyZC51cGRhdGUoVi5jb25jYXQoVikpLHYuc2NhdHRlcjJkJiZ2LnNjYXR0ZXIyZC51cGRhdGUoViksdi5zZWxlY3QyZCYmdi5zZWxlY3QyZC51cGRhdGUoViksdi5nbFRleHQmJnYuZ2xUZXh0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3QudXBkYXRlKFUpfSkpfWVsc2Ugdi5pbml0KCl9fX0seyIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiOjY1NywiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9wcmVwYXJlX3JlZ2wiOjc4OSwiLi4vc2NhdHRlci9saW5rX3RyYWNlcyI6MTIwNywiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi9lZGl0X3N0eWxlIjoxMjQ4LCJnbC10ZXh0IjozMzcsInJlZ2wtZXJyb3IyZCI6NTEyLCJyZWdsLWxpbmUyZCI6NTEzLCJyZWdsLXNjYXR0ZXIyZCI6NTE0fV0sMTI1NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLl9zY2VuZSxpPXtjb3VudDowLGRpcnR5OiEwLGxpbmVPcHRpb25zOltdLGZpbGxPcHRpb25zOltdLG1hcmtlck9wdGlvbnM6W10sbWFya2VyU2VsZWN0ZWRPcHRpb25zOltdLG1hcmtlclVuc2VsZWN0ZWRPcHRpb25zOltdLGVycm9yWE9wdGlvbnM6W10sZXJyb3JZT3B0aW9uczpbXSx0ZXh0T3B0aW9uczpbXSx0ZXh0U2VsZWN0ZWRPcHRpb25zOltdLHRleHRVbnNlbGVjdGVkT3B0aW9uczpbXSxzZWxlY3RCYXRjaDpbXSx1bnNlbGVjdEJhdGNoOltdfSxhPXtmaWxsMmQ6ITEsc2NhdHRlcjJkOiExLGVycm9yMmQ6ITEsbGluZTJkOiExLGdsVGV4dDohMSxzZWxlY3QyZDohMX07cmV0dXJuIGUuX3NjZW5lfHwoKHI9ZS5fc2NlbmU9e30pLmluaXQ9ZnVuY3Rpb24oKXtuLmV4dGVuZEZsYXQocixhLGkpfSxyLmluaXQoKSxyLnVwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT1uLnJlcGVhdCh0LHIuY291bnQpO2lmKHIuZmlsbDJkJiZyLmZpbGwyZC51cGRhdGUoZSksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLnVwZGF0ZShlKSxyLmxpbmUyZCYmci5saW5lMmQudXBkYXRlKGUpLHIuZXJyb3IyZCYmci5lcnJvcjJkLnVwZGF0ZShlLmNvbmNhdChlKSksci5zZWxlY3QyZCYmci5zZWxlY3QyZC51cGRhdGUoZSksci5nbFRleHQpZm9yKHZhciBpPTA7aTxyLmNvdW50O2krKylyLmdsVGV4dFtpXS51cGRhdGUodCl9LHIuZHJhdz1mdW5jdGlvbigpe2Zvcih2YXIgdD1yLmNvdW50LGU9ci5maWxsMmQsaT1yLmVycm9yMmQsYT1yLmxpbmUyZCxvPXIuc2NhdHRlcjJkLHM9ci5nbFRleHQsbD1yLnNlbGVjdDJkLGM9ci5zZWxlY3RCYXRjaCx1PXIudW5zZWxlY3RCYXRjaCxmPTA7Zjx0O2YrKyl7aWYoZSYmci5maWxsT3JkZXJbZl0mJmUuZHJhdyhyLmZpbGxPcmRlcltmXSksYSYmci5saW5lT3B0aW9uc1tmXSYmYS5kcmF3KGYpLGkmJihyLmVycm9yWE9wdGlvbnNbZl0mJmkuZHJhdyhmKSxyLmVycm9yWU9wdGlvbnNbZl0mJmkuZHJhdyhmK3QpKSxvJiZyLm1hcmtlck9wdGlvbnNbZl0paWYodVtmXS5sZW5ndGgpe3ZhciBoPW4ucmVwZWF0KFtdLHIuY291bnQpO2hbZl09dVtmXSxvLmRyYXcoaCl9ZWxzZSBjW2ZdLmxlbmd0aHx8by5kcmF3KGYpO3NbZl0mJnIudGV4dE9wdGlvbnNbZl0mJnNbZl0ucmVuZGVyKCl9bCYmbC5kcmF3KGMpLHIuZGlydHk9ITF9LHIuZGVzdHJveT1mdW5jdGlvbigpe3IuZmlsbDJkJiZyLmZpbGwyZC5kZXN0cm95JiZyLmZpbGwyZC5kZXN0cm95KCksci5zY2F0dGVyMmQmJnIuc2NhdHRlcjJkLmRlc3Ryb3kmJnIuc2NhdHRlcjJkLmRlc3Ryb3koKSxyLmVycm9yMmQmJnIuZXJyb3IyZC5kZXN0cm95JiZyLmVycm9yMmQuZGVzdHJveSgpLHIubGluZTJkJiZyLmxpbmUyZC5kZXN0cm95JiZyLmxpbmUyZC5kZXN0cm95KCksci5zZWxlY3QyZCYmci5zZWxlY3QyZC5kZXN0cm95JiZyLnNlbGVjdDJkLmRlc3Ryb3koKSxyLmdsVGV4dCYmci5nbFRleHQuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5kZXN0cm95JiZ0LmRlc3Ryb3koKX0pKSxyLmxpbmVPcHRpb25zPW51bGwsci5maWxsT3B0aW9ucz1udWxsLHIubWFya2VyT3B0aW9ucz1udWxsLHIubWFya2VyU2VsZWN0ZWRPcHRpb25zPW51bGwsci5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuZXJyb3JYT3B0aW9ucz1udWxsLHIuZXJyb3JZT3B0aW9ucz1udWxsLHIudGV4dE9wdGlvbnM9bnVsbCxyLnRleHRTZWxlY3RlZE9wdGlvbnM9bnVsbCxyLnRleHRVbnNlbGVjdGVkT3B0aW9ucz1udWxsLHIuc2VsZWN0QmF0Y2g9bnVsbCxyLnVuc2VsZWN0QmF0Y2g9bnVsbCxlLl9zY2VuZT1udWxsfSksci5kaXJ0eXx8bi5leHRlbmRGbGF0KHIsaSkscn19LHsiLi4vLi4vbGliIjo3NzZ9XSwxMjU1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxpPXQoIi4vZWRpdF9zdHlsZSIpLnN0eWxlVGV4dFNlbGVjdGlvbjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmNkLGE9dC54YXhpcyxvPXQueWF4aXMscz1bXSxsPXJbMF0udHJhY2UsYz1yWzBdLnQsdT1sLl9sZW5ndGgsZj1jLngsaD1jLnkscD1jLl9zY2VuZSxkPWMuaW5kZXg7aWYoIXApcmV0dXJuIHM7dmFyIG09bi5oYXNUZXh0KGwpLGc9bi5oYXNNYXJrZXJzKGwpLHY9IWcmJiFtO2lmKCEwIT09bC52aXNpYmxlfHx2KXJldHVybiBzO3ZhciB5PVtdLHg9W107aWYoITEhPT1lJiYhZS5kZWdlbmVyYXRlKWZvcih2YXIgYj0wO2I8dTtiKyspZS5jb250YWlucyhbYy54cHhbYl0sYy55cHhbYl1dLCExLGIsdCk/KHkucHVzaChiKSxzLnB1c2goe3BvaW50TnVtYmVyOmIseDphLmMyZChmW2JdKSx5Om8uYzJkKGhbYl0pfSkpOngucHVzaChiKTtpZihnKXt2YXIgXz1wLnNjYXR0ZXIyZDtpZih5Lmxlbmd0aHx8eC5sZW5ndGgpe2lmKCFwLnNlbGVjdEJhdGNoW2RdLmxlbmd0aCYmIXAudW5zZWxlY3RCYXRjaFtkXS5sZW5ndGgpe3ZhciB3PW5ldyBBcnJheShwLmNvdW50KTt3W2RdPXAubWFya2VyVW5zZWxlY3RlZE9wdGlvbnNbZF0sXy51cGRhdGUuYXBwbHkoXyx3KX19ZWxzZXt2YXIgVD1uZXcgQXJyYXkocC5jb3VudCk7VFtkXT1wLm1hcmtlck9wdGlvbnNbZF0sXy51cGRhdGUuYXBwbHkoXyxUKX19cmV0dXJuIHAuc2VsZWN0QmF0Y2hbZF09eSxwLnVuc2VsZWN0QmF0Y2hbZF09eCxtJiZpKHIpLHN9fSx7Ii4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4vZWRpdF9zdHlsZSI6MTI0OH1dLDEyNTY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uL3NjYXR0ZXJnZW8vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9tYXBib3gvbGF5b3V0X2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxmPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbCxoPWEubGluZSxwPWEubWFya2VyO2UuZXhwb3J0cz1mKHtsb246YS5sb24sbGF0OmEubGF0LG1vZGU6dSh7fSxvLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDp1KHt9LG8udGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJsYXQiLCJsb24iLCJ0ZXh0Il19KSxob3ZlcnRleHQ6dSh7fSxvLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6aC5jb2xvcix3aWR0aDpoLndpZHRofSxjb25uZWN0Z2FwczpvLmNvbm5lY3RnYXBzLG1hcmtlcjp1KHtzeW1ib2w6e3ZhbFR5cGU6InN0cmluZyIsZGZsdDoiY2lyY2xlIixhcnJheU9rOiEwfSxhbmdsZTp7dmFsVHlwZToibnVtYmVyIixkZmx0OiJhdXRvIixhcnJheU9rOiEwfSxhbGxvd292ZXJsYXA6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LG9wYWNpdHk6cC5vcGFjaXR5LHNpemU6cC5zaXplLHNpemVyZWY6cC5zaXplcmVmLHNpemVtaW46cC5zaXplbWluLHNpemVtb2RlOnAuc2l6ZW1vZGV9LGMoIm1hcmtlciIpKSxmaWxsOmEuZmlsbCxmaWxsY29sb3I6by5maWxsY29sb3IsdGV4dGZvbnQ6cy5sYXllcnMuc3ltYm9sLnRleHRmb250LHRleHRwb3NpdGlvbjpzLmxheWVycy5zeW1ib2wudGV4dHBvc2l0aW9uLGJlbG93Ont2YWxUeXBlOiJzdHJpbmcifSxzZWxlY3RlZDp7bWFya2VyOm8uc2VsZWN0ZWQubWFya2VyfSx1bnNlbGVjdGVkOnttYXJrZXI6by51bnNlbGVjdGVkLm1hcmtlcn0saG92ZXJpbmZvOnUoe30sbC5ob3ZlcmluZm8se2ZsYWdzOlsibG9uIiwibGF0IiwidGV4dCIsIm5hbWUiXX0pLGhvdmVydGVtcGxhdGU6bigpfSwiY2FsYyIsIm5lc3RlZCIpfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL21hcGJveC9sYXlvdXRfYXR0cmlidXRlcyI6ODg2LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vc2NhdHRlcmdlby9hdHRyaWJ1dGVzIjoxMjMzfV0sMTI1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLG89dCgiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLGw9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksYz10KCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyIpLHU9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGY9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnZlcnRfdGV4dF9vcHRzIiksaD10KCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiKS5hcHBlbmRBcnJheVBvaW50VmFsdWUscD10KCIuLi8uLi9saWIvc3ZnX3RleHRfdXRpbHMiKS5ORVdMSU5FUyxkPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLkJSX1RBR19BTEw7ZnVuY3Rpb24gbSgpe3JldHVybntnZW9qc29uOm8ubWFrZUJsYW5rKCksbGF5b3V0Ont2aXNpYmlsaXR5OiJub25lIn0scGFpbnQ6e319fWZ1bmN0aW9uIGcodCxlKXtyZXR1cm4gaS5pc0FycmF5T3JUeXBlZEFycmF5KHQpP2U/ZnVuY3Rpb24oZSl7cmV0dXJuIG4odFtlXSk/K3RbZV06MH06ZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19OnQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06dn1mdW5jdGlvbiB2KCl7cmV0dXJuIiJ9ZnVuY3Rpb24geSh0KXtyZXR1cm4gdFswXT09PWF9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1lWzBdLnRyYWNlLHg9ITA9PT1hLnZpc2libGUmJjAhPT1hLl9sZW5ndGgsYj0ibm9uZSIhPT1hLmZpbGwsXz11Lmhhc0xpbmVzKGEpLHc9dS5oYXNNYXJrZXJzKGEpLFQ9dS5oYXNUZXh0KGEpLGs9dyYmImNpcmNsZSI9PT1hLm1hcmtlci5zeW1ib2wsQT13JiYiY2lyY2xlIiE9PWEubWFya2VyLnN5bWJvbCxNPW0oKSxTPW0oKSxFPW0oKSxMPW0oKSxDPXtmaWxsOk0sbGluZTpTLGNpcmNsZTpFLHN5bWJvbDpMfTtpZigheClyZXR1cm4gQztpZigoYnx8XykmJihyPW8uY2FsY1RyYWNlVG9MaW5lQ29vcmRzKGUpKSxiJiYoTS5nZW9qc29uPW8ubWFrZVBvbHlnb24ociksTS5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KE0ucGFpbnQseyJmaWxsLWNvbG9yIjphLmZpbGxjb2xvcn0pKSxfJiYoUy5nZW9qc29uPW8ubWFrZUxpbmUociksUy5sYXlvdXQudmlzaWJpbGl0eT0idmlzaWJsZSIsaS5leHRlbmRGbGF0KFMucGFpbnQseyJsaW5lLXdpZHRoIjphLmxpbmUud2lkdGgsImxpbmUtY29sb3IiOmEubGluZS5jb2xvciwibGluZS1vcGFjaXR5IjphLm9wYWNpdHl9KSksayl7dmFyIFA9ZnVuY3Rpb24odCl7dmFyIGUscixhLG8sdT10WzBdLnRyYWNlLGY9dS5tYXJrZXIsaD11LnNlbGVjdGVkcG9pbnRzLHA9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuY29sb3IpLGQ9aS5pc0FycmF5T3JUeXBlZEFycmF5KGYuc2l6ZSksbT1pLmlzQXJyYXlPclR5cGVkQXJyYXkoZi5vcGFjaXR5KTtmdW5jdGlvbiBnKHQpe3JldHVybiB1Lm9wYWNpdHkqdH1wJiYocj1zLmhhc0NvbG9yc2NhbGUodSwibWFya2VyIik/cy5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2UoZik6aS5pZGVudGl0eSk7ZCYmKGE9Yyh1KSk7bSYmKG89ZnVuY3Rpb24odCl7cmV0dXJuIGcobih0KT8raS5jb25zdHJhaW4odCwwLDEpOjApfSk7dmFyIHYseD1bXTtmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXt2YXIgYj10W2VdLF89Yi5sb25sYXQ7aWYoIXkoXykpe3ZhciB3PXt9O3ImJih3Lm1jYz1iLm1jYz1yKGIubWMpKSxhJiYody5tcmM9Yi5tcmM9YShiLm1zKSksbyYmKHcubW89byhiLm1vKSksaCYmKHcuc2VsZWN0ZWQ9Yi5zZWxlY3RlZHx8MCkseC5wdXNoKHt0eXBlOiJGZWF0dXJlIixnZW9tZXRyeTp7dHlwZToiUG9pbnQiLGNvb3JkaW5hdGVzOl99LHByb3BlcnRpZXM6d30pfX1pZihoKWZvcih2PWwubWFrZVNlbGVjdGVkUG9pbnRTdHlsZUZucyh1KSxlPTA7ZTx4Lmxlbmd0aDtlKyspe3ZhciBUPXhbZV0ucHJvcGVydGllczt2LnNlbGVjdGVkT3BhY2l0eUZuJiYoVC5tbz1nKHYuc2VsZWN0ZWRPcGFjaXR5Rm4oVCkpKSx2LnNlbGVjdGVkQ29sb3JGbiYmKFQubWNjPXYuc2VsZWN0ZWRDb2xvckZuKFQpKSx2LnNlbGVjdGVkU2l6ZUZuJiYoVC5tcmM9di5zZWxlY3RlZFNpemVGbihUKSl9cmV0dXJue2dlb2pzb246e3R5cGU6IkZlYXR1cmVDb2xsZWN0aW9uIixmZWF0dXJlczp4fSxtY2M6cHx8diYmdi5zZWxlY3RlZENvbG9yRm4/e3R5cGU6ImlkZW50aXR5Iixwcm9wZXJ0eToibWNjIn06Zi5jb2xvcixtcmM6ZHx8diYmdi5zZWxlY3RlZFNpemVGbj97dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJtcmMifTooaz1mLnNpemUsay8yKSxtbzptfHx2JiZ2LnNlbGVjdGVkT3BhY2l0eUZuP3t0eXBlOiJpZGVudGl0eSIscHJvcGVydHk6Im1vIn06ZyhmLm9wYWNpdHkpfTt2YXIga30oZSk7RS5nZW9qc29uPVAuZ2VvanNvbixFLmxheW91dC52aXNpYmlsaXR5PSJ2aXNpYmxlIixpLmV4dGVuZEZsYXQoRS5wYWludCx7ImNpcmNsZS1jb2xvciI6UC5tY2MsImNpcmNsZS1yYWRpdXMiOlAubXJjLCJjaXJjbGUtb3BhY2l0eSI6UC5tb30pfWlmKChBfHxUKSYmKEwuZ2VvanNvbj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1lLl9mdWxsTGF5b3V0LG49dFswXS50cmFjZSxhPW4ubWFya2VyfHx7fSxvPWEuc3ltYm9sLHM9YS5hbmdsZSxsPSJjaXJjbGUiIT09bz9nKG8pOnYsYz0iYXV0byIhPT1zP2cocywhMCk6dixmPXUuaGFzVGV4dChuKT9nKG4udGV4dCk6dixtPVtdLHg9MDt4PHQubGVuZ3RoO3grKyl7dmFyIGI9dFt4XTtpZigheShiLmxvbmxhdCkpe3ZhciBfLHc9bi50ZXh0dGVtcGxhdGU7aWYodyl7dmFyIFQ9QXJyYXkuaXNBcnJheSh3KT93W3hdfHwiIjp3LGs9bi5fbW9kdWxlLmZvcm1hdExhYmVscyhiLG4sciksQT17fTtoKEEsbixiLmkpO3ZhciBNPW4uX21ldGF8fHt9O189aS50ZXh0dGVtcGxhdGVTdHJpbmcoVCxrLHIuX2QzbG9jYWxlLEEsYixNKX1lbHNlIF89Zih4KTtfJiYoXz1fLnJlcGxhY2UocCwiIikucmVwbGFjZShkLCJcbiIpKSxtLnB1c2goe3R5cGU6IkZlYXR1cmUiLGdlb21ldHJ5Ont0eXBlOiJQb2ludCIsY29vcmRpbmF0ZXM6Yi5sb25sYXR9LHByb3BlcnRpZXM6e3N5bWJvbDpsKHgpLGFuZ2xlOmMoeCksdGV4dDpffX0pfX1yZXR1cm57dHlwZToiRmVhdHVyZUNvbGxlY3Rpb24iLGZlYXR1cmVzOm19fShlLHQpLGkuZXh0ZW5kRmxhdChMLmxheW91dCx7dmlzaWJpbGl0eToidmlzaWJsZSIsImljb24taW1hZ2UiOiJ7c3ltYm9sfS0xNSIsInRleHQtZmllbGQiOiJ7dGV4dH0ifSksQSYmKGkuZXh0ZW5kRmxhdChMLmxheW91dCx7Imljb24tc2l6ZSI6YS5tYXJrZXIuc2l6ZS8xMH0pLCJhbmdsZSJpbiBhLm1hcmtlciYmImF1dG8iIT09YS5tYXJrZXIuYW5nbGUmJmkuZXh0ZW5kRmxhdChMLmxheW91dCx7Imljb24tcm90YXRlIjp7dHlwZToiaWRlbnRpdHkiLHByb3BlcnR5OiJhbmdsZSJ9LCJpY29uLXJvdGF0aW9uLWFsaWdubWVudCI6Im1hcCJ9KSxMLmxheW91dFsiaWNvbi1hbGxvdy1vdmVybGFwIl09YS5tYXJrZXIuYWxsb3dvdmVybGFwLGkuZXh0ZW5kRmxhdChMLnBhaW50LHsiaWNvbi1vcGFjaXR5IjphLm9wYWNpdHkqYS5tYXJrZXIub3BhY2l0eSwiaWNvbi1jb2xvciI6YS5tYXJrZXIuY29sb3J9KSksVCkpe3ZhciBJPShhLm1hcmtlcnx8e30pLnNpemUsTz1mKGEudGV4dHBvc2l0aW9uLEkpO2kuZXh0ZW5kRmxhdChMLmxheW91dCx7InRleHQtc2l6ZSI6YS50ZXh0Zm9udC5zaXplLCJ0ZXh0LWFuY2hvciI6Ty5hbmNob3IsInRleHQtb2Zmc2V0IjpPLm9mZnNldH0pLGkuZXh0ZW5kRmxhdChMLnBhaW50LHsidGV4dC1jb2xvciI6YS50ZXh0Zm9udC5jb2xvciwidGV4dC1vcGFjaXR5IjphLm9wYWNpdHl9KX1yZXR1cm4gQ319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb21wb25lbnRzL2Z4L2hlbHBlcnMiOjY3NSwiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2dlb2pzb25fdXRpbHMiOjc3MCwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uLy4uL3Bsb3RzL21hcGJveC9jb252ZXJ0X3RleHRfb3B0cyI6ODgzLCIuLi9zY2F0dGVyL21ha2VfYnViYmxlX3NpemVfZnVuYyI6MTIwOCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyNTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL3N1YnR5cGVzIiksYT10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLG89dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIikscz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxsPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksYz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsdSl7ZnVuY3Rpb24gZihyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsYyxyLGkpfWlmKGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKCJsb24iKXx8W10saT1yKCJsYXQiKXx8W10sYT1NYXRoLm1pbihuLmxlbmd0aCxpLmxlbmd0aCk7cmV0dXJuIGUuX2xlbmd0aD1hLGF9KDAsZSxmKSl7aWYoZigidGV4dCIpLGYoInRleHR0ZW1wbGF0ZSIpLGYoImhvdmVydGV4dCIpLGYoImhvdmVydGVtcGxhdGUiKSxmKCJtb2RlIiksZigiYmVsb3ciKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscix1LGYse25vRGFzaDohMH0pLGYoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSl7YSh0LGUscix1LGYse25vTGluZTohMH0pLGYoIm1hcmtlci5hbGxvd292ZXJsYXAiKSxmKCJtYXJrZXIuYW5nbGUiKTt2YXIgaD1lLm1hcmtlcjsiY2lyY2xlIiE9PWguc3ltYm9sJiYobi5pc0FycmF5T3JUeXBlZEFycmF5KGguc2l6ZSkmJihoLnNpemU9aC5zaXplWzBdKSxuLmlzQXJyYXlPclR5cGVkQXJyYXkoaC5jb2xvcikmJihoLmNvbG9yPWguY29sb3JbMF0pKX1pLmhhc1RleHQoZSkmJnModCxlLHUsZix7bm9TZWxlY3Q6ITB9KSxmKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiZsKHQsZSxyLGYpLG4uY29lcmNlU2VsZWN0aW9uTWFya2VyT3BhY2l0eShlLGYpfWVsc2UgZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9maWxsY29sb3JfZGVmYXVsdHMiOjExOTksIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyI6MTIwNCwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjU2fV0sMTI1OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sb249ZS5sb24sdC5sYXQ9ZS5sYXQsdH19LHt9XSwxMjYwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxhPXJbZS5zdWJwbG90XS5fc3VicGxvdC5tb2NrQXhpcyxvPXQubG9ubGF0O3JldHVybiBpLmxvbkxhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzBdKSwhMCkudGV4dCxpLmxhdExhYmVsPW4udGlja1RleHQoYSxhLmMybChvWzFdKSwhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTI2MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2Z4IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIiksbz1pLmZpbGxUZXh0LHM9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtmdW5jdGlvbiBsKHQsZSxyKXtpZighdC5ob3ZlcnRlbXBsYXRlKXt2YXIgbj0oZS5oaXx8dC5ob3ZlcmluZm8pLnNwbGl0KCIrIiksaT0tMSE9PW4uaW5kZXhPZigiYWxsIiksYT0tMSE9PW4uaW5kZXhPZigibG9uIikscz0tMSE9PW4uaW5kZXhPZigibGF0IiksbD1lLmxvbmxhdCxjPVtdO3JldHVybiBpfHxhJiZzP2MucHVzaCgiKCIrdShsWzFdKSsiLCAiK3UobFswXSkrIikiKTphP2MucHVzaChyLmxvbit1KGxbMF0pKTpzJiZjLnB1c2goci5sYXQrdShsWzFdKSksKGl8fC0xIT09bi5pbmRleE9mKCJ0ZXh0IikpJiZvKGUsdCxjKSxjLmpvaW4oIjxicj4iKX1mdW5jdGlvbiB1KHQpe3JldHVybiB0KyJceGIwIn19ZS5leHBvcnRzPXtob3ZlclBvaW50czpmdW5jdGlvbih0LGUscil7dmFyIG89dC5jZCxjPW9bMF0udHJhY2UsdT10LnhhLGY9dC55YSxoPXQuc3VicGxvdCxwPTM2MCooZT49MD9NYXRoLmZsb29yKChlKzE4MCkvMzYwKTpNYXRoLmNlaWwoKGUtMTgwKS8zNjApKSxkPWUtcDtpZihuLmdldENsb3Nlc3QobywoZnVuY3Rpb24odCl7dmFyIGU9dC5sb25sYXQ7aWYoZVswXT09PXMpcmV0dXJuIDEvMDt2YXIgbj1pLm1vZEhhbGYoZVswXSwzNjApLGE9ZVsxXSxvPWgucHJvamVjdChbbixhXSksbD1vLngtdS5jMnAoW2QsYV0pLGM9by55LWYuYzJwKFtuLHJdKSxwPU1hdGgubWF4KDMsdC5tcmN8fDApO3JldHVybiBNYXRoLm1heChNYXRoLnNxcnQobCpsK2MqYyktcCwxLTMvcCl9KSx0KSwhMSE9PXQuaW5kZXgpe3ZhciBtPW9bdC5pbmRleF0sZz1tLmxvbmxhdCx2PVtpLm1vZEhhbGYoZ1swXSwzNjApK3AsZ1sxXV0seT11LmMycCh2KSx4PWYuYzJwKHYpLGI9bS5tcmN8fDE7dC54MD15LWIsdC54MT15K2IsdC55MD14LWIsdC55MT14K2I7dmFyIF89e307X1tjLnN1YnBsb3RdPXtfc3VicGxvdDpofTt2YXIgdz1jLl9tb2R1bGUuZm9ybWF0TGFiZWxzKG0sYyxfKTtyZXR1cm4gdC5sb25MYWJlbD13LmxvbkxhYmVsLHQubGF0TGFiZWw9dy5sYXRMYWJlbCx0LmNvbG9yPWEoYyxtKSx0LmV4dHJhVGV4dD1sKGMsbSxvWzBdLnQubGFiZWxzKSx0LmhvdmVydGVtcGxhdGU9Yy5ob3ZlcnRlbXBsYXRlLFt0XX19LGdldEV4dHJhVGV4dDpsfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvZ2V0X3RyYWNlX2NvbG9yIjoxMjAxfV0sMTI2MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi4vc2NhdHRlcmdlby9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxob3ZlclBvaW50czp0KCIuL2hvdmVyIikuaG92ZXJQb2ludHMsZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLHN0eWxlT25TZWxlY3Q6ZnVuY3Rpb24odCxlKXtlJiZlWzBdLnRyYWNlLl9nbFRyYWNlLnVwZGF0ZShlKX0sbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJtYXBib3giLGJhc2VQbG90TW9kdWxlOnQoIi4uLy4uL3Bsb3RzL21hcGJveCIpLGNhdGVnb3JpZXM6WyJtYXBib3giLCJnbCIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sbWV0YTp7fX19LHsiLi4vLi4vcGxvdHMvbWFwYm94Ijo4ODQsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyZ2VvL2NhbGMiOjEyMzQsIi4vYXR0cmlidXRlcyI6MTI1NiwiLi9kZWZhdWx0cyI6MTI1OCwiLi9ldmVudF9kYXRhIjoxMjU5LCIuL2Zvcm1hdF9sYWJlbHMiOjEyNjAsIi4vaG92ZXIiOjEyNjEsIi4vcGxvdCI6MTI2MywiLi9zZWxlY3QiOjEyNjR9XSwxMjYzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29udmVydCIpLGk9dCgiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyIpLnRyYWNlTGF5ZXJQcmVmaXgsYT1bImZpbGwiLCJsaW5lIiwiY2lyY2xlIiwic3ltYm9sIl07ZnVuY3Rpb24gbyh0LGUpe3RoaXMudHlwZT0ic2NhdHRlcm1hcGJveCIsdGhpcy5zdWJwbG90PXQsdGhpcy51aWQ9ZSx0aGlzLnNvdXJjZUlkcz17ZmlsbDoic291cmNlLSIrZSsiLWZpbGwiLGxpbmU6InNvdXJjZS0iK2UrIi1saW5lIixjaXJjbGU6InNvdXJjZS0iK2UrIi1jaXJjbGUiLHN5bWJvbDoic291cmNlLSIrZSsiLXN5bWJvbCJ9LHRoaXMubGF5ZXJJZHM9e2ZpbGw6aStlKyItZmlsbCIsbGluZTppK2UrIi1saW5lIixjaXJjbGU6aStlKyItY2lyY2xlIixzeW1ib2w6aStlKyItc3ltYm9sIn0sdGhpcy5iZWxvdz1udWxsfXZhciBzPW8ucHJvdG90eXBlO3MuYWRkU291cmNlPWZ1bmN0aW9uKHQsZSl7dGhpcy5zdWJwbG90Lm1hcC5hZGRTb3VyY2UodGhpcy5zb3VyY2VJZHNbdF0se3R5cGU6Imdlb2pzb24iLGRhdGE6ZS5nZW9qc29ufSl9LHMuc2V0U291cmNlRGF0YT1mdW5jdGlvbih0LGUpe3RoaXMuc3VicGxvdC5tYXAuZ2V0U291cmNlKHRoaXMuc291cmNlSWRzW3RdKS5zZXREYXRhKGUuZ2VvanNvbil9LHMuYWRkTGF5ZXI9ZnVuY3Rpb24odCxlLHIpe3RoaXMuc3VicGxvdC5hZGRMYXllcih7dHlwZTp0LGlkOnRoaXMubGF5ZXJJZHNbdF0sc291cmNlOnRoaXMuc291cmNlSWRzW3RdLGxheW91dDplLmxheW91dCxwYWludDplLnBhaW50fSxyKX0scy51cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGUscixpLG89dGhpcy5zdWJwbG90LHM9by5tYXAsbD1uKG8uZ2QsdCksYz1vLmJlbG93TG9va3VwWyJ0cmFjZS0iK3RoaXMudWlkXTtpZihjIT09dGhpcy5iZWxvdyl7Zm9yKGU9YS5sZW5ndGgtMTtlPj0wO2UtLSlyPWFbZV0scy5yZW1vdmVMYXllcih0aGlzLmxheWVySWRzW3JdKTtmb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLHRoaXMuYWRkTGF5ZXIocixpLGMpO3RoaXMuYmVsb3c9Y31mb3IoZT0wO2U8YS5sZW5ndGg7ZSsrKWk9bFtyPWFbZV1dLG8uc2V0T3B0aW9ucyh0aGlzLmxheWVySWRzW3JdLCJzZXRMYXlvdXRQcm9wZXJ0eSIsaS5sYXlvdXQpLCJ2aXNpYmxlIj09PWkubGF5b3V0LnZpc2liaWxpdHkmJih0aGlzLnNldFNvdXJjZURhdGEocixpKSxvLnNldE9wdGlvbnModGhpcy5sYXllcklkc1tyXSwic2V0UGFpbnRQcm9wZXJ0eSIsaS5wYWludCkpO3RbMF0udHJhY2UuX2dsVHJhY2U9dGhpc30scy5kaXNwb3NlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuc3VicGxvdC5tYXAsZT1hLmxlbmd0aC0xO2U+PTA7ZS0tKXt2YXIgcj1hW2VdO3QucmVtb3ZlTGF5ZXIodGhpcy5sYXllcklkc1tyXSksdC5yZW1vdmVTb3VyY2UodGhpcy5zb3VyY2VJZHNbcl0pfX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWVbMF0udHJhY2UsaT1uZXcgbyh0LHIudWlkKSxzPW4odC5nZCxlKSxsPWkuYmVsb3c9dC5iZWxvd0xvb2t1cFsidHJhY2UtIityLnVpZF0sYz0wO2M8YS5sZW5ndGg7YysrKXt2YXIgdT1hW2NdLGY9c1t1XTtpLmFkZFNvdXJjZSh1LGYpLGkuYWRkTGF5ZXIodSxmLGwpfXJldHVybiBlWzBdLnRyYWNlLl9nbFRyYWNlPWksaX19LHsiLi4vLi4vcGxvdHMvbWFwYm94L2NvbnN0YW50cyI6ODgyLCIuL2NvbnZlcnQiOjEyNTd9XSwxMjY0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixvPXQuY2Qscz10LnhheGlzLGw9dC55YXhpcyxjPVtdLHU9b1swXS50cmFjZTtpZighaS5oYXNNYXJrZXJzKHUpKXJldHVybltdO2lmKCExPT09ZSlmb3Iocj0wO3I8by5sZW5ndGg7cisrKW9bcl0uc2VsZWN0ZWQ9MDtlbHNlIGZvcihyPTA7cjxvLmxlbmd0aDtyKyspe3ZhciBmPW9bcl0saD1mLmxvbmxhdDtpZihoWzBdIT09YSl7dmFyIHA9W24ubW9kSGFsZihoWzBdLDM2MCksaFsxXV0sZD1bcy5jMnAocCksbC5jMnAocCldO2UuY29udGFpbnMoZCxudWxsLHIsdCk/KGMucHVzaCh7cG9pbnROdW1iZXI6cixsb246aFswXSxsYXQ6aFsxXX0pLGYuc2VsZWN0ZWQ9MSk6Zi5zZWxlY3RlZD0wfX1yZXR1cm4gY319LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNn1dLDEyNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxpPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LG89dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD1vLmxpbmU7ZS5leHBvcnRzPXttb2RlOm8ubW9kZSxyOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRoZXRhOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHIwOnt2YWxUeXBlOiJhbnkiLGRmbHQ6MCxlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGRyOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MSxlZGl0VHlwZToiY2FsYyJ9LHRoZXRhMDp7dmFsVHlwZToiYW55IixkZmx0OjAsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSxkdGhldGE6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMifSx0aGV0YXVuaXQ6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJhZGlhbnMiLCJkZWdyZWVzIiwiZ3JhZGlhbnMiXSxkZmx0OiJkZWdyZWVzIixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHRleHQ6by50ZXh0LHRleHR0ZW1wbGF0ZTppKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOlsiciIsInRoZXRhIiwidGV4dCJdfSksaG92ZXJ0ZXh0Om8uaG92ZXJ0ZXh0LGxpbmU6e2NvbG9yOmwuY29sb3Isd2lkdGg6bC53aWR0aCxkYXNoOmwuZGFzaCxzaGFwZTphKHt9LGwuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmwuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6by5jb25uZWN0Z2FwcyxtYXJrZXI6by5tYXJrZXIsY2xpcG9uYXhpczphKHt9LG8uY2xpcG9uYXhpcyx7ZGZsdDohMX0pLHRleHRwb3NpdGlvbjpvLnRleHRwb3NpdGlvbix0ZXh0Zm9udDpvLnRleHRmb250LGZpbGw6YSh7fSxvLmZpbGwse3ZhbHVlczpbIm5vbmUiLCJ0b3NlbGYiLCJ0b25leHQiXSxkZmx0OiJub25lIn0pLGZpbGxjb2xvcjpvLmZpbGxjb2xvcixob3ZlcmluZm86YSh7fSxzLmhvdmVyaW5mbyx7ZmxhZ3M6WyJyIiwidGhldGEiLCJ0ZXh0IiwibmFtZSJdfSksaG92ZXJvbjpvLmhvdmVyb24saG92ZXJ0ZW1wbGF0ZTpuKCksc2VsZWN0ZWQ6by5zZWxlY3RlZCx1bnNlbGVjdGVkOm8udW5zZWxlY3RlZH19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxfV0sMTI2NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJmYXN0LWlzbnVtZXJpYyIpLGk9dCgiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTSxhPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksbz10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLHM9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxsPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxjPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Ll9mdWxsTGF5b3V0LHU9ZS5zdWJwbG90LGY9clt1XS5yYWRpYWxheGlzLGg9clt1XS5hbmd1bGFyYXhpcyxwPWYubWFrZUNhbGNkYXRhKGUsInIiKSxkPWgubWFrZUNhbGNkYXRhKGUsInRoZXRhIiksbT1lLl9sZW5ndGgsZz1uZXcgQXJyYXkobSksdj0wO3Y8bTt2Kyspe3ZhciB5PXBbdl0seD1kW3ZdLGI9Z1t2XT17fTtuKHkpJiZuKHgpPyhiLnI9eSxiLnRoZXRhPXgpOmIucj1pfXZhciBfPWMoZSxtKTtyZXR1cm4gZS5fZXh0cmVtZXMueD1hLmZpbmRFeHRyZW1lcyhmLHAse3BwYWQ6X30pLG8odCxlKSxzKGcsZSksbChnLGUpLGd9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiOjExOTAsIi4uL3NjYXR0ZXIvY2FsYyI6MTE5MiwiLi4vc2NhdHRlci9jYWxjX3NlbGVjdGlvbiI6MTE5MywiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxvPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtmdW5jdGlvbiBoKHQsZSxyLG4pe3ZhciBpLGE9bigiciIpLG89bigidGhldGEiKTtpZihhKW8/aT1NYXRoLm1pbihhLmxlbmd0aCxvLmxlbmd0aCk6KGk9YS5sZW5ndGgsbigidGhldGEwIiksbigiZHRoZXRhIikpO2Vsc2V7aWYoIW8pcmV0dXJuIDA7aT1lLnRoZXRhLmxlbmd0aCxuKCJyMCIpLG4oImRyIil9cmV0dXJuIGUuX2xlbmd0aD1pLGl9ZS5leHBvcnRzPXtoYW5kbGVSVGhldGFEZWZhdWx0czpoLHN1cHBseURlZmF1bHRzOmZ1bmN0aW9uKHQsZSxyLHApe2Z1bmN0aW9uIGQocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGYscixpKX12YXIgbT1oKHQsZSxwLGQpO2lmKG0pe2QoInRoZXRhdW5pdCIpLGQoIm1vZGUiLG08dT8ibGluZXMrbWFya2VycyI6ImxpbmVzIiksZCgidGV4dCIpLGQoImhvdmVydGV4dCIpLCJmaWxscyIhPT1lLmhvdmVyb24mJmQoImhvdmVydGVtcGxhdGUiKSxpLmhhc0xpbmVzKGUpJiYobyh0LGUscixwLGQpLHModCxlLGQpLGQoImNvbm5lY3RnYXBzIikpLGkuaGFzTWFya2VycyhlKSYmYSh0LGUscixwLGQse2dyYWRpZW50OiEwfSksaS5oYXNUZXh0KGUpJiYoZCgidGV4dHRlbXBsYXRlIiksbCh0LGUscCxkKSk7dmFyIGc9W107KGkuaGFzTWFya2VycyhlKXx8aS5oYXNUZXh0KGUpKSYmKGQoImNsaXBvbmF4aXMiKSxkKCJtYXJrZXIubWF4ZGlzcGxheWVkIiksZy5wdXNoKCJwb2ludHMiKSksZCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmKGModCxlLHIsZCksaS5oYXNMaW5lcyhlKXx8cyh0LGUsZCkpLCJ0b25leHQiIT09ZS5maWxsJiYidG9zZWxmIiE9PWUuZmlsbHx8Zy5wdXNoKCJmaWxscyIpLGQoImhvdmVyb24iLGcuam9pbigiKyIpfHwicG9pbnRzIiksbi5jb2VyY2VTZWxlY3Rpb25NYXJrZXJPcGFjaXR5KGUsZCl9ZWxzZSBlLnZpc2libGU9ITF9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbGluZV9zaGFwZV9kZWZhdWx0cyI6MTIwNiwiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiOjEyMTAsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4uL3NjYXR0ZXIvdGV4dF9kZWZhdWx0cyI6MTIxNywiLi9hdHRyaWJ1dGVzIjoxMjY1fV0sMTI2ODpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgYSxvLHM9e30sbD1yW2Uuc3VicGxvdF0uX3N1YnBsb3Q7bD8oYT1sLnJhZGlhbEF4aXMsbz1sLmFuZ3VsYXJBeGlzKTooYT0obD1yW2Uuc3VicGxvdF0pLnJhZGlhbGF4aXMsbz1sLmFuZ3VsYXJheGlzKTt2YXIgYz1hLmMybCh0LnIpO3MuckxhYmVsPWkudGlja1RleHQoYSxjLCEwKS50ZXh0O3ZhciB1PSJkZWdyZWVzIj09PW8udGhldGF1bml0P24ucmFkMmRlZyh0LnRoZXRhKTp0LnRoZXRhO3JldHVybiBzLnRoZXRhTGFiZWw9aS50aWNrVGV4dChvLHUsITApLnRleHQsc319LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4Mjd9XSwxMjY5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvaG92ZXIiKTtmdW5jdGlvbiBpKHQsZSxyLG4pe3ZhciBpPXIucmFkaWFsQXhpcyxhPXIuYW5ndWxhckF4aXM7aS5faG92ZXJ0aXRsZT0iciIsYS5faG92ZXJ0aXRsZT0iXHUwM2I4Ijt2YXIgbz17fTtvW2Uuc3VicGxvdF09e19zdWJwbG90OnJ9O3ZhciBzPWUuX21vZHVsZS5mb3JtYXRMYWJlbHModCxlLG8pO24uckxhYmVsPXMuckxhYmVsLG4udGhldGFMYWJlbD1zLnRoZXRhTGFiZWw7dmFyIGw9dC5oaXx8ZS5ob3ZlcmluZm8sYz1bXTtmdW5jdGlvbiB1KHQsZSl7Yy5wdXNoKHQuX2hvdmVydGl0bGUrIjogIitlKX1pZighZS5ob3ZlcnRlbXBsYXRlKXt2YXIgZj1sLnNwbGl0KCIrIik7LTEhPT1mLmluZGV4T2YoImFsbCIpJiYoZj1bInIiLCJ0aGV0YSIsInRleHQiXSksLTEhPT1mLmluZGV4T2YoInIiKSYmdShpLG4uckxhYmVsKSwtMSE9PWYuaW5kZXhPZigidGhldGEiKSYmdShhLG4udGhldGFMYWJlbCksLTEhPT1mLmluZGV4T2YoInRleHQiKSYmbi50ZXh0JiYoYy5wdXNoKG4udGV4dCksZGVsZXRlIG4udGV4dCksbi5leHRyYVRleHQ9Yy5qb2luKCI8YnI+Iil9fWUuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89bih0LGUscixhKTtpZihvJiYhMSE9PW9bMF0uaW5kZXgpe3ZhciBzPW9bMF07aWYodm9pZCAwPT09cy5pbmRleClyZXR1cm4gbzt2YXIgbD10LnN1YnBsb3QsYz1zLmNkW3MuaW5kZXhdLHU9cy50cmFjZTtpZihsLmlzUHRJbnNpZGUoYykpcmV0dXJuIHMueExhYmVsVmFsPXZvaWQgMCxzLnlMYWJlbFZhbD12b2lkIDAsaShjLHUsbCxzKSxzLmhvdmVydGVtcGxhdGU9dS5ob3ZlcnRlbXBsYXRlLG99fSxtYWtlSG92ZXJQb2ludFRleHQ6aX19LHsiLi4vc2NhdHRlci9ob3ZlciI6MTIwMn1dLDEyNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic2NhdHRlcnBvbGFyIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLHN0eWxlOnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZSxzdHlsZU9uU2VsZWN0OnQoIi4uL3NjYXR0ZXIvc3R5bGUiKS5zdHlsZU9uU2VsZWN0LGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlci9zZWxlY3QiKSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9wb2xhciI6ODkzLCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi4vc2NhdHRlci9zZWxlY3QiOjEyMTMsIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTUsIi4vYXR0cmlidXRlcyI6MTI2NSwiLi9jYWxjIjoxMjY2LCIuL2RlZmF1bHRzIjoxMjY3LCIuL2Zvcm1hdF9sYWJlbHMiOjEyNjgsIi4vaG92ZXIiOjEyNjksIi4vcGxvdCI6MTI3MX1dLDEyNzE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9wbG90IiksaT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBhPWUubGF5ZXJzLmZyb250cGxvdC5zZWxlY3QoImcuc2NhdHRlcmxheWVyIiksbz17eGF4aXM6ZS54YXhpcyx5YXhpczplLnlheGlzLHBsb3Q6ZS5mcmFtZXdvcmssbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkcy5mb3JUcmFjZXM6bnVsbH0scz1lLnJhZGlhbEF4aXMsbD1lLmFuZ3VsYXJBeGlzLGM9MDtjPHIubGVuZ3RoO2MrKylmb3IodmFyIHU9cltjXSxmPTA7Zjx1Lmxlbmd0aDtmKyspe3ZhciBoPXVbZl0scD1oLnI7aWYocD09PWkpaC54PWgueT1pO2Vsc2V7dmFyIGQ9cy5jMmcocCksbT1sLmMyZyhoLnRoZXRhKTtoLng9ZCpNYXRoLmNvcyhtKSxoLnk9ZCpNYXRoLnNpbihtKX19bih0LG8scixhKX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9zY2F0dGVyL3Bsb3QiOjEyMTJ9XSwxMjcyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJwb2xhci9hdHRyaWJ1dGVzIiksaT10KCIuLi9zY2F0dGVyZ2wvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLnRleHR0ZW1wbGF0ZUF0dHJzO2UuZXhwb3J0cz17bW9kZTpuLm1vZGUscjpuLnIsdGhldGE6bi50aGV0YSxyMDpuLnIwLGRyOm4uZHIsdGhldGEwOm4udGhldGEwLGR0aGV0YTpuLmR0aGV0YSx0aGV0YXVuaXQ6bi50aGV0YXVuaXQsdGV4dDpuLnRleHQsdGV4dHRlbXBsYXRlOmEoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJyIiwidGhldGEiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsbGluZTppLmxpbmUsY29ubmVjdGdhcHM6aS5jb25uZWN0Z2FwcyxtYXJrZXI6aS5tYXJrZXIsZmlsbDppLmZpbGwsZmlsbGNvbG9yOmkuZmlsbGNvbG9yLHRleHRwb3NpdGlvbjppLnRleHRwb3NpdGlvbix0ZXh0Zm9udDppLnRleHRmb250LGhvdmVyaW5mbzpuLmhvdmVyaW5mbyxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkfX0seyIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXJnbC9hdHRyaWJ1dGVzIjoxMjQzLCIuLi9zY2F0dGVycG9sYXIvYXR0cmlidXRlcyI6MTI2NX1dLDEyNzM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxpPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKSxvPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIikscz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuX2Z1bGxMYXlvdXQsbD1lLnN1YnBsb3QsYz1yW2xdLnJhZGlhbGF4aXMsdT1yW2xdLmFuZ3VsYXJheGlzLGY9ZS5fcj1jLm1ha2VDYWxjZGF0YShlLCJyIiksaD1lLl90aGV0YT11Lm1ha2VDYWxjZGF0YShlLCJ0aGV0YSIpLHA9ZS5fbGVuZ3RoLGQ9e307cDxmLmxlbmd0aCYmKGY9Zi5zbGljZSgwLHApKSxwPGgubGVuZ3RoJiYoaD1oLnNsaWNlKDAscCkpLGQucj1mLGQudGhldGE9aCxuKHQsZSk7dmFyIG0sZz1kLm9wdHM9YS5zdHlsZSh0LGUpO3JldHVybiBwPHM/bT1pKGUscCk6Zy5tYXJrZXImJihtPTIqKGcubWFya2VyLnNpemVBdmd8fE1hdGgubWF4KGcubWFya2VyLnNpemUsMykpKSxlLl9leHRyZW1lcy54PW8uZmluZEV4dHJlbWVzKGMsZix7cHBhZDptfSksW3t4OiExLHk6ITEsdDpkLHRyYWNlOmV9XX19LHsiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyI6MTI0NSwiLi4vc2NhdHRlcmdsL2NvbnZlcnQiOjEyNDZ9XSwxMjc0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLGE9dCgiLi4vc2NhdHRlcnBvbGFyL2RlZmF1bHRzIikuaGFuZGxlUlRoZXRhRGVmYXVsdHMsbz10KCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyIpLHM9dCgiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIiksbD10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSxjPXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksdT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLlBUU19MSU5FU09OTFksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkPWEodCxlLGgscCk7ZD8ocCgidGhldGF1bml0IikscCgibW9kZSIsZDx1PyJsaW5lcyttYXJrZXJzIjoibGluZXMiKSxwKCJ0ZXh0IikscCgiaG92ZXJ0ZXh0IiksImZpbGxzIiE9PWUuaG92ZXJvbiYmcCgiaG92ZXJ0ZW1wbGF0ZSIpLGkuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCkscCgiY29ubmVjdGdhcHMiKSksaS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCksaS5oYXNUZXh0KGUpJiYocCgidGV4dHRlbXBsYXRlIiksbCh0LGUsaCxwKSkscCgiZmlsbCIpLCJub25lIiE9PWUuZmlsbCYmYyh0LGUscixwKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKSk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb25zdGFudHMiOjExOTUsIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIjoxMTk5LCIuLi9zY2F0dGVyL2xpbmVfZGVmYXVsdHMiOjEyMDQsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMjEwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEyMTcsIi4uL3NjYXR0ZXJwb2xhci9kZWZhdWx0cyI6MTI2NywiLi9hdHRyaWJ1dGVzIjoxMjcyfV0sMTI3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVycG9sYXIvZm9ybWF0X2xhYmVscyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9dC5pO3JldHVybiJyImluIHR8fCh0LnI9ZS5fcltpXSksInRoZXRhImluIHR8fCh0LnRoZXRhPWUuX3RoZXRhW2ldKSxuKHQsZSxyKX19LHsiLi4vc2NhdHRlcnBvbGFyL2Zvcm1hdF9sYWJlbHMiOjEyNjh9XSwxMjc2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXJnbC9ob3ZlciIpLGk9dCgiLi4vc2NhdHRlcnBvbGFyL2hvdmVyIikubWFrZUhvdmVyUG9pbnRUZXh0O2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIsYSl7dmFyIG89dC5jZFswXS50LHM9by5yLGw9by50aGV0YSxjPW4uaG92ZXJQb2ludHModCxlLHIsYSk7aWYoYyYmITEhPT1jWzBdLmluZGV4KXt2YXIgdT1jWzBdO2lmKHZvaWQgMD09PXUuaW5kZXgpcmV0dXJuIGM7dmFyIGY9dC5zdWJwbG90LGg9dS5jZFt1LmluZGV4XSxwPXUudHJhY2U7aWYoaC5yPXNbdS5pbmRleF0saC50aGV0YT1sW3UuaW5kZXhdLGYuaXNQdEluc2lkZShoKSlyZXR1cm4gdS54TGFiZWxWYWw9dm9pZCAwLHUueUxhYmVsVmFsPXZvaWQgMCxpKGgscCxmLHUpLGN9fX19LHsiLi4vc2NhdHRlcmdsL2hvdmVyIjoxMjUxLCIuLi9zY2F0dGVycG9sYXIvaG92ZXIiOjEyNjl9XSwxMjc3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InNjYXR0ZXJwb2xhcmdsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9wb2xhciIpLGNhdGVnb3JpZXM6WyJnbCIsInJlZ2wiLCJwb2xhciIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxmb3JtYXRMYWJlbHM6dCgiLi9mb3JtYXRfbGFiZWxzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKS5ob3ZlclBvaW50cyxzZWxlY3RQb2ludHM6dCgiLi4vc2NhdHRlcmdsL3NlbGVjdCIpLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL3BvbGFyIjo4OTMsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyZ2wvc2VsZWN0IjoxMjU1LCIuL2F0dHJpYnV0ZXMiOjEyNzIsIi4vY2FsYyI6MTI3MywiLi9kZWZhdWx0cyI6MTI3NCwiLi9mb3JtYXRfbGFiZWxzIjoxMjc1LCIuL2hvdmVyIjoxMjc2LCIuL3Bsb3QiOjEyNzh9XSwxMjc4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvcG9pbnQtY2x1c3RlciIpLGk9dCgiZmFzdC1pc251bWVyaWMiKSxhPXQoIi4uL3NjYXR0ZXJnbC9wbG90Iiksbz10KCIuLi9zY2F0dGVyZ2wvc2NlbmVfdXBkYXRlIikscz10KCIuLi9zY2F0dGVyZ2wvY29udmVydCIpLGw9dCgiLi4vLi4vbGliIiksYz10KCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIikuVE9PX01BTllfUE9JTlRTO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYoci5sZW5ndGgpe3ZhciB1PWUucmFkaWFsQXhpcyxmPWUuYW5ndWxhckF4aXMsaD1vKHQsZSk7cmV0dXJuIHIuZm9yRWFjaCgoZnVuY3Rpb24ocil7aWYociYmclswXSYmclswXS50cmFjZSl7dmFyIGEsbz1yWzBdLHA9by50cmFjZSxkPW8udCxtPXAuX2xlbmd0aCxnPWQucix2PWQudGhldGEseT1kLm9wdHMseD1nLnNsaWNlKCksYj12LnNsaWNlKCk7Zm9yKGE9MDthPGcubGVuZ3RoO2ErKyllLmlzUHRJbnNpZGUoe3I6Z1thXSx0aGV0YTp2W2FdfSl8fCh4W2FdPU5hTixiW2FdPU5hTik7dmFyIF89bmV3IEFycmF5KDIqbSksdz1BcnJheShtKSxUPUFycmF5KG0pO2ZvcihhPTA7YTxtO2ErKyl7dmFyIGssQSxNPXhbYV07aWYoaShNKSl7dmFyIFM9dS5jMmcoTSksRT1mLmMyZyhiW2FdLHAudGhldGF1bml0KTtrPVMqTWF0aC5jb3MoRSksQT1TKk1hdGguc2luKEUpfWVsc2Ugaz1BPU5hTjt3W2FdPV9bMiphXT1rLFRbYV09X1syKmErMV09QX1kLnRyZWU9bihfKSx5Lm1hcmtlciYmbT49YyYmKHkubWFya2VyLmNsdXN0ZXI9ZC50cmVlKSx5Lm1hcmtlciYmKHkubWFya2VyU2VsLnBvc2l0aW9ucz15Lm1hcmtlclVuc2VsLnBvc2l0aW9ucz15Lm1hcmtlci5wb3NpdGlvbnM9XykseS5saW5lJiZfLmxlbmd0aD4xJiZsLmV4dGVuZEZsYXQoeS5saW5lLHMubGluZVBvc2l0aW9ucyh0LHAsXykpLHkudGV4dCYmKGwuZXh0ZW5kRmxhdCh5LnRleHQse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyKSksbC5leHRlbmRGbGF0KHkudGV4dFNlbCx7cG9zaXRpb25zOl99LHMudGV4dFBvc2l0aW9uKHQscCx5LnRleHQseS5tYXJrZXJTZWwpKSxsLmV4dGVuZEZsYXQoeS50ZXh0VW5zZWwse3Bvc2l0aW9uczpffSxzLnRleHRQb3NpdGlvbih0LHAseS50ZXh0LHkubWFya2VyVW5zZWwpKSkseS5maWxsJiYhaC5maWxsMmQmJihoLmZpbGwyZD0hMCkseS5tYXJrZXImJiFoLnNjYXR0ZXIyZCYmKGguc2NhdHRlcjJkPSEwKSx5LmxpbmUmJiFoLmxpbmUyZCYmKGgubGluZTJkPSEwKSx5LnRleHQmJiFoLmdsVGV4dCYmKGguZ2xUZXh0PSEwKSxoLmxpbmVPcHRpb25zLnB1c2goeS5saW5lKSxoLmZpbGxPcHRpb25zLnB1c2goeS5maWxsKSxoLm1hcmtlck9wdGlvbnMucHVzaCh5Lm1hcmtlciksaC5tYXJrZXJTZWxlY3RlZE9wdGlvbnMucHVzaCh5Lm1hcmtlclNlbCksaC5tYXJrZXJVbnNlbGVjdGVkT3B0aW9ucy5wdXNoKHkubWFya2VyVW5zZWwpLGgudGV4dE9wdGlvbnMucHVzaCh5LnRleHQpLGgudGV4dFNlbGVjdGVkT3B0aW9ucy5wdXNoKHkudGV4dFNlbCksaC50ZXh0VW5zZWxlY3RlZE9wdGlvbnMucHVzaCh5LnRleHRVbnNlbCksaC5zZWxlY3RCYXRjaC5wdXNoKFtdKSxoLnVuc2VsZWN0QmF0Y2gucHVzaChbXSksZC54PXcsZC55PVQsZC5yYXd4PXcsZC5yYXd5PVQsZC5yPWcsZC50aGV0YT12LGQucG9zaXRpb25zPV8sZC5fc2NlbmU9aCxkLmluZGV4PWguY291bnQsaC5jb3VudCsrfX0pKSxhKHQsZSxyKX19fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9zY2F0dGVyZ2wvY29uc3RhbnRzIjoxMjQ1LCIuLi9zY2F0dGVyZ2wvY29udmVydCI6MTI0NiwiLi4vc2NhdHRlcmdsL3Bsb3QiOjEyNTMsIi4uL3NjYXR0ZXJnbC9zY2VuZV91cGRhdGUiOjEyNTQsIkBwbG90bHkvcG9pbnQtY2x1c3RlciI6NTksImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMjc5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyIpLmRhc2gsYz10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCx1PWEubWFya2VyLGY9YS5saW5lLGg9dS5saW5lO2UuZXhwb3J0cz17YTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxiOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sc3VtOnt2YWxUeXBlOiJudW1iZXIiLGRmbHQ6MCxtaW46MCxlZGl0VHlwZToiY2FsYyJ9LG1vZGU6Yyh7fSxhLm1vZGUse2RmbHQ6Im1hcmtlcnMifSksdGV4dDpjKHt9LGEudGV4dCx7fSksdGV4dHRlbXBsYXRlOmkoe2VkaXRUeXBlOiJwbG90In0se2tleXM6WyJhIiwiYiIsImMiLCJ0ZXh0Il19KSxob3ZlcnRleHQ6Yyh7fSxhLmhvdmVydGV4dCx7fSksbGluZTp7Y29sb3I6Zi5jb2xvcix3aWR0aDpmLndpZHRoLGRhc2g6bCxzaGFwZTpjKHt9LGYuc2hhcGUse3ZhbHVlczpbImxpbmVhciIsInNwbGluZSJdfSksc21vb3RoaW5nOmYuc21vb3RoaW5nLGVkaXRUeXBlOiJjYWxjIn0sY29ubmVjdGdhcHM6YS5jb25uZWN0Z2FwcyxjbGlwb25heGlzOmEuY2xpcG9uYXhpcyxmaWxsOmMoe30sYS5maWxsLHt2YWx1ZXM6WyJub25lIiwidG9zZWxmIiwidG9uZXh0Il0sZGZsdDoibm9uZSJ9KSxmaWxsY29sb3I6YS5maWxsY29sb3IsbWFya2VyOmMoe3N5bWJvbDp1LnN5bWJvbCxvcGFjaXR5OnUub3BhY2l0eSxtYXhkaXNwbGF5ZWQ6dS5tYXhkaXNwbGF5ZWQsc2l6ZTp1LnNpemUsc2l6ZXJlZjp1LnNpemVyZWYsc2l6ZW1pbjp1LnNpemVtaW4sc2l6ZW1vZGU6dS5zaXplbW9kZSxsaW5lOmMoe3dpZHRoOmgud2lkdGgsZWRpdFR5cGU6ImNhbGMifSxzKCJtYXJrZXIubGluZSIpKSxncmFkaWVudDp1LmdyYWRpZW50LGVkaXRUeXBlOiJjYWxjIn0scygibWFya2VyIikpLHRleHRmb250OmEudGV4dGZvbnQsdGV4dHBvc2l0aW9uOmEudGV4dHBvc2l0aW9uLHNlbGVjdGVkOmEuc2VsZWN0ZWQsdW5zZWxlY3RlZDphLnVuc2VsZWN0ZWQsaG92ZXJpbmZvOmMoe30sby5ob3ZlcmluZm8se2ZsYWdzOlsiYSIsImIiLCJjIiwidGV4dCIsIm5hbWUiXX0pLGhvdmVyb246YS5ob3Zlcm9uLGhvdmVydGVtcGxhdGU6bigpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmcvYXR0cmlidXRlcyI6NjYwLCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9zY2F0dGVyL2F0dHJpYnV0ZXMiOjExOTF9XSwxMjgwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImZhc3QtaXNudW1lcmljIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlci9hcnJheXNfdG9fY2FsY2RhdGEiKSxvPXQoIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iKSxzPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNNYXJrZXJTaXplLGw9WyJhIiwiYiIsImMiXSxjPXthOlsiYiIsImMiXSxiOlsiYSIsImMiXSxjOlsiYSIsImIiXX07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsdSxmLGgscCxkLG09dC5fZnVsbExheW91dFtlLnN1YnBsb3RdLnN1bSxnPWUuc3VtfHxtLHY9e2E6ZS5hLGI6ZS5iLGM6ZS5jfTtmb3Iocj0wO3I8bC5sZW5ndGg7cisrKWlmKCF2W2Y9bFtyXV0pe2ZvcihwPXZbY1tmXVswXV0sZD12W2NbZl1bMV1dLGg9bmV3IEFycmF5KHAubGVuZ3RoKSx1PTA7dTxwLmxlbmd0aDt1KyspaFt1XT1nLXBbdV0tZFt1XTt2W2ZdPWh9dmFyIHkseCxiLF8sdyxULGs9ZS5fbGVuZ3RoLEE9bmV3IEFycmF5KGspO2ZvcihyPTA7cjxrO3IrKyl5PXYuYVtyXSx4PXYuYltyXSxiPXYuY1tyXSxuKHkpJiZuKHgpJiZuKGIpPygxIT09KF89bS8oKHk9K3kpKyh4PSt4KSsoYj0rYikpKSYmKHkqPV8seCo9XyxiKj1fKSxUPXksdz1iLXgsQVtyXT17eDp3LHk6VCxhOnksYjp4LGM6Yn0pOkFbcl09e3g6ITEseTohMX07cmV0dXJuIHMoZSxrKSxpKHQsZSksYShBLGUpLG8oQSxlKSxBfX0seyIuLi9zY2F0dGVyL2FycmF5c190b19jYWxjZGF0YSI6MTE5MCwiLi4vc2NhdHRlci9jYWxjIjoxMTkyLCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIjoxMTkzLCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyI6MTE5NCwiZmFzdC1pc251bWVyaWMiOjI0Mn1dLDEyODE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbnN0YW50cyIpLGE9dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLG89dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvbGluZV9kZWZhdWx0cyIpLGw9dCgiLi4vc2NhdHRlci9saW5lX3NoYXBlX2RlZmF1bHRzIiksYz10KCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiKSx1PXQoIi4uL3NjYXR0ZXIvZmlsbGNvbG9yX2RlZmF1bHRzIiksZj10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsaCl7ZnVuY3Rpb24gcChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsZixyLGkpfXZhciBkLG09cCgiYSIpLGc9cCgiYiIpLHY9cCgiYyIpO2lmKG0/KGQ9bS5sZW5ndGgsZz8oZD1NYXRoLm1pbihkLGcubGVuZ3RoKSx2JiYoZD1NYXRoLm1pbihkLHYubGVuZ3RoKSkpOmQ9dj9NYXRoLm1pbihkLHYubGVuZ3RoKTowKTpnJiZ2JiYoZD1NYXRoLm1pbihnLmxlbmd0aCx2Lmxlbmd0aCkpLGQpe2UuX2xlbmd0aD1kLHAoInN1bSIpLHAoInRleHQiKSxwKCJob3ZlcnRleHQiKSwiZmlsbHMiIT09ZS5ob3Zlcm9uJiZwKCJob3ZlcnRlbXBsYXRlIikscCgibW9kZSIsZDxpLlBUU19MSU5FU09OTFk/ImxpbmVzK21hcmtlcnMiOiJsaW5lcyIpLGEuaGFzTGluZXMoZSkmJihzKHQsZSxyLGgscCksbCh0LGUscCkscCgiY29ubmVjdGdhcHMiKSksYS5oYXNNYXJrZXJzKGUpJiZvKHQsZSxyLGgscCx7Z3JhZGllbnQ6ITB9KSxhLmhhc1RleHQoZSkmJihwKCJ0ZXh0dGVtcGxhdGUiKSxjKHQsZSxoLHApKTt2YXIgeT1bXTsoYS5oYXNNYXJrZXJzKGUpfHxhLmhhc1RleHQoZSkpJiYocCgiY2xpcG9uYXhpcyIpLHAoIm1hcmtlci5tYXhkaXNwbGF5ZWQiKSx5LnB1c2goInBvaW50cyIpKSxwKCJmaWxsIiksIm5vbmUiIT09ZS5maWxsJiYodSh0LGUscixwKSxhLmhhc0xpbmVzKGUpfHxsKHQsZSxwKSksInRvbmV4dCIhPT1lLmZpbGwmJiJ0b3NlbGYiIT09ZS5maWxsfHx5LnB1c2goImZpbGxzIikscCgiaG92ZXJvbiIseS5qb2luKCIrIil8fCJwb2ludHMiKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxwKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvY29uc3RhbnRzIjoxMTk1LCIuLi9zY2F0dGVyL2ZpbGxjb2xvcl9kZWZhdWx0cyI6MTE5OSwiLi4vc2NhdHRlci9saW5lX2RlZmF1bHRzIjoxMjA0LCIuLi9zY2F0dGVyL2xpbmVfc2hhcGVfZGVmYXVsdHMiOjEyMDYsIi4uL3NjYXR0ZXIvbWFya2VyX2RlZmF1bHRzIjoxMjEwLCIuLi9zY2F0dGVyL3N1YnR5cGVzIjoxMjE2LCIuLi9zY2F0dGVyL3RleHRfZGVmYXVsdHMiOjEyMTcsIi4vYXR0cmlidXRlcyI6MTI3OX1dLDEyODI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4saSl7aWYoZS54YSYmKHQueGF4aXM9ZS54YSksZS55YSYmKHQueWF4aXM9ZS55YSksbltpXSl7dmFyIGE9bltpXTt0LmE9YS5hLHQuYj1hLmIsdC5jPWEuY31lbHNlIHQuYT1lLmEsdC5iPWUuYix0LmM9ZS5jO3JldHVybiB0fX0se31dLDEyODM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGE9cltlLnN1YnBsb3RdLl9zdWJwbG90O3JldHVybiBpLmFMYWJlbD1uLnRpY2tUZXh0KGEuYWF4aXMsdC5hLCEwKS50ZXh0LGkuYkxhYmVsPW4udGlja1RleHQoYS5iYXhpcyx0LmIsITApLnRleHQsaS5jTGFiZWw9bi50aWNrVGV4dChhLmNheGlzLHQuYywhMCkudGV4dCxpfX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyI6ODI3fV0sMTI4NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zY2F0dGVyL2hvdmVyIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhPW4odCxlLHIsaSk7aWYoYSYmITEhPT1hWzBdLmluZGV4KXt2YXIgbz1hWzBdO2lmKHZvaWQgMD09PW8uaW5kZXgpe3ZhciBzPTEtby55MC90LnlhLl9sZW5ndGgsbD10LnhhLl9sZW5ndGgsYz1sKnMvMix1PWwtYztyZXR1cm4gby54MD1NYXRoLm1heChNYXRoLm1pbihvLngwLHUpLGMpLG8ueDE9TWF0aC5tYXgoTWF0aC5taW4oby54MSx1KSxjKSxhfXZhciBmPW8uY2Rbby5pbmRleF0saD1vLnRyYWNlLHA9by5zdWJwbG90O28uYT1mLmEsby5iPWYuYixvLmM9Zi5jLG8ueExhYmVsVmFsPXZvaWQgMCxvLnlMYWJlbFZhbD12b2lkIDA7dmFyIGQ9e307ZFtoLnN1YnBsb3RdPXtfc3VicGxvdDpwfTt2YXIgbT1oLl9tb2R1bGUuZm9ybWF0TGFiZWxzKGYsaCxkKTtvLmFMYWJlbD1tLmFMYWJlbCxvLmJMYWJlbD1tLmJMYWJlbCxvLmNMYWJlbD1tLmNMYWJlbDt2YXIgZz1mLmhpfHxoLmhvdmVyaW5mbyx2PVtdO2lmKCFoLmhvdmVydGVtcGxhdGUpe3ZhciB5PWcuc3BsaXQoIisiKTstMSE9PXkuaW5kZXhPZigiYWxsIikmJih5PVsiYSIsImIiLCJjIl0pLC0xIT09eS5pbmRleE9mKCJhIikmJngocC5hYXhpcyxvLmFMYWJlbCksLTEhPT15LmluZGV4T2YoImIiKSYmeChwLmJheGlzLG8uYkxhYmVsKSwtMSE9PXkuaW5kZXhPZigiYyIpJiZ4KHAuY2F4aXMsby5jTGFiZWwpfXJldHVybiBvLmV4dHJhVGV4dD12LmpvaW4oIjxicj4iKSxvLmhvdmVydGVtcGxhdGU9aC5ob3ZlcnRlbXBsYXRlLGF9ZnVuY3Rpb24geCh0LGUpe3YucHVzaCh0Ll9ob3ZlcnRpdGxlKyI6ICIrZSl9fX0seyIuLi9zY2F0dGVyL2hvdmVyIjoxMjAyfV0sMTI4NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e2F0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksZm9ybWF0TGFiZWxzOnQoIi4vZm9ybWF0X2xhYmVscyIpLGNhbGM6dCgiLi9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGUsc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL3NjYXR0ZXIvc2VsZWN0IiksZXZlbnREYXRhOnQoIi4vZXZlbnRfZGF0YSIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzY2F0dGVydGVybmFyeSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvdGVybmFyeSIpLGNhdGVnb3JpZXM6WyJ0ZXJuYXJ5Iiwic3ltYm9scyIsInNob3dMZWdlbmQiLCJzY2F0dGVyLWxpa2UiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy90ZXJuYXJ5Ijo5MDAsIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIjoxMjA5LCIuLi9zY2F0dGVyL3NlbGVjdCI6MTIxMywiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMjc5LCIuL2NhbGMiOjEyODAsIi4vZGVmYXVsdHMiOjEyODEsIi4vZXZlbnRfZGF0YSI6MTI4MiwiLi9mb3JtYXRfbGFiZWxzIjoxMjgzLCIuL2hvdmVyIjoxMjg0LCIuL3Bsb3QiOjEyODZ9XSwxMjg2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uL3NjYXR0ZXIvcGxvdCIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIGk9ZS5wbG90Q29udGFpbmVyO2kuc2VsZWN0KCIuc2NhdHRlcmxheWVyIikuc2VsZWN0QWxsKCIqIikucmVtb3ZlKCk7dmFyIGE9e3hheGlzOmUueGF4aXMseWF4aXM6ZS55YXhpcyxwbG90OmksbGF5ZXJDbGlwSWQ6ZS5faGFzQ2xpcE9uQXhpc0ZhbHNlP2UuY2xpcElkUmVsYXRpdmU6bnVsbH0sbz1lLmxheWVycy5mcm9udHBsb3Quc2VsZWN0KCJnLnNjYXR0ZXJsYXllciIpO24odCxhLHIsbyl9fSx7Ii4uL3NjYXR0ZXIvcGxvdCI6MTIxMn1dLDEyODc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQsbz10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikuaG92ZXJ0ZW1wbGF0ZUF0dHJzLHM9dCgiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiKSxsPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9jb25zdGFudHMiKS5pZFJlZ2V4LGM9dCgiLi4vLi4vcGxvdF9hcGkvcGxvdF90ZW1wbGF0ZSIpLnRlbXBsYXRlZEFycmF5LHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj1uLm1hcmtlcixoPWYubGluZSxwPXUoaSgibWFya2VyLmxpbmUiLHtlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHt3aWR0aDp1KHt9LGgud2lkdGgse2VkaXRUeXBlOiJjYWxjIn0pLGVkaXRUeXBlOiJjYWxjIn0pLGQ9dShpKCJtYXJrZXIiKSx7c3ltYm9sOmYuc3ltYm9sLHNpemU6dSh7fSxmLnNpemUse2VkaXRUeXBlOiJtYXJrZXJTaXplIn0pLHNpemVyZWY6Zi5zaXplcmVmLHNpemVtaW46Zi5zaXplbWluLHNpemVtb2RlOmYuc2l6ZW1vZGUsb3BhY2l0eTpmLm9wYWNpdHksY29sb3JiYXI6Zi5jb2xvcmJhcixsaW5lOnAsZWRpdFR5cGU6ImNhbGMifSk7ZnVuY3Rpb24gbSh0KXtyZXR1cm57dmFsVHlwZToiaW5mb19hcnJheSIsZnJlZUxlbmd0aDohMCxlZGl0VHlwZToiY2FsYyIsaXRlbXM6e3ZhbFR5cGU6InN1YnBsb3RpZCIscmVnZXg6bFt0XSxlZGl0VHlwZToicGxvdCJ9fX1kLmNvbG9yLmVkaXRUeXBlPWQuY21pbi5lZGl0VHlwZT1kLmNtYXguZWRpdFR5cGU9InN0eWxlIixlLmV4cG9ydHM9e2RpbWVuc2lvbnM6YygiZGltZW5zaW9uIix7dmlzaWJsZTp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGxhYmVsOnt2YWxUeXBlOiJzdHJpbmciLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWVzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LGF4aXM6e3R5cGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImxpbmVhciIsImxvZyIsImRhdGUiLCJjYXRlZ29yeSJdLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sbWF0Y2hlczp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSksdGV4dDp1KHt9LHMudGV4dCx7fSksaG92ZXJ0ZXh0OnUoe30scy5ob3ZlcnRleHQse30pLGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSxtYXJrZXI6ZCx4YXhlczptKCJ4IikseWF4ZXM6bSgieSIpLGRpYWdvbmFsOnt2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxzaG93dXBwZXJoYWxmOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sc2hvd2xvd2VyaGFsZjp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LHNlbGVjdGVkOnttYXJrZXI6cy5zZWxlY3RlZC5tYXJrZXIsZWRpdFR5cGU6ImNhbGMifSx1bnNlbGVjdGVkOnttYXJrZXI6cy51bnNlbGVjdGVkLm1hcmtlcixlZGl0VHlwZToiY2FsYyJ9LG9wYWNpdHk6cy5vcGFjaXR5fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL3Bsb3RfdGVtcGxhdGUiOjgxNiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2NvbnN0YW50cyI6ODM0LCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTksIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyI6MTE5MSwiLi4vc2NhdHRlcmdsL2F0dHJpYnV0ZXMiOjEyNDN9XSwxMjg4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtbGluZTJkIiksaT10KCIuLi8uLi9yZWdpc3RyeSIpLGE9dCgiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCIpLG89dCgiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiKS5nZXRNb2R1bGVDYWxjRGF0YSxzPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbiIpLGw9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIikuZ2V0RnJvbUlkLGM9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5zaG91bGRTaG93WmVyb0xpbmU7ZnVuY3Rpb24gdSh0LGUscil7Zm9yKHZhciBuPXIubWF0cml4T3B0aW9ucy5kYXRhLmxlbmd0aCxpPWUuX3Zpc2libGVEaW1zLGE9ci52aWV3T3B0cy5yYW5nZXM9bmV3IEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKyl7dmFyIHM9aVtvXSxjPWFbb109bmV3IEFycmF5KDQpLHU9bCh0LGUuX2RpYWdbc11bMF0pO3UmJihjWzBdPXUucjJsKHUucmFuZ2VbMF0pLGNbMl09dS5yMmwodS5yYW5nZVsxXSkpO3ZhciBmPWwodCxlLl9kaWFnW3NdWzFdKTtmJiYoY1sxXT1mLnIybChmLnJhbmdlWzBdKSxjWzNdPWYucjJsKGYucmFuZ2VbMV0pKX1yLnNlbGVjdEJhdGNoLmxlbmd0aHx8ci51bnNlbGVjdEJhdGNoLmxlbmd0aD9yLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSx7cmFuZ2VzOmF9KTpyLm1hdHJpeC51cGRhdGUoe3JhbmdlczphfSl9ZnVuY3Rpb24gZih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0LHI9ZS5fZ2xjYW52YXMuZGF0YSgpWzBdLnJlZ2wsaT1lLl9zcGxvbUdyaWQ7aXx8KGk9ZS5fc3Bsb21HcmlkPW4ocikpLGkudXBkYXRlKGZ1bmN0aW9uKHQpe3ZhciBlLHI9dC5fY29udGV4dC5wbG90R2xQaXhlbFJhdGlvLG49dC5fZnVsbExheW91dCxpPW4uX3NpemUsYT1bMCwwLG4ud2lkdGgqcixuLmhlaWdodCpyXSxvPXt9O2Z1bmN0aW9uIHModCxlLG4saSxzLGwpe24qPXIsaSo9cixzKj1yLGwqPXI7dmFyIGM9ZVt0KyJjb2xvciJdLHU9ZVt0KyJ3aWR0aCJdLGY9U3RyaW5nKGMrdSk7ZiBpbiBvP29bZl0uZGF0YS5wdXNoKE5hTixOYU4sbixpLHMsbCk6b1tmXT17ZGF0YTpbbixpLHMsbF0sam9pbjoicmVjdCIsdGhpY2tuZXNzOnUqcixjb2xvcjpjLHZpZXdwb3J0OmEscmFuZ2U6YSxvdmVybGF5OiExfX1mb3IoZSBpbiBuLl9zcGxvbVN1YnBsb3RzKXt2YXIgbCx1LGY9bi5fcGxvdHNbZV0saD1mLnhheGlzLHA9Zi55YXhpcyxkPWguX2dyaWRWYWxzLG09cC5fZ3JpZFZhbHMsZz1oLl9vZmZzZXQsdj1oLl9sZW5ndGgseT1wLl9sZW5ndGgseD1pLmIrcC5kb21haW5bMF0qaS5oLGI9LXAuX20sXz0tYipwLnIybChwLnJhbmdlWzBdLHAuY2FsZW5kYXIpO2lmKGguc2hvd2dyaWQpZm9yKGU9MDtlPGQubGVuZ3RoO2UrKylsPWcraC5sMnAoZFtlXS54KSxzKCJncmlkIixoLGwseCxsLHgreSk7aWYocC5zaG93Z3JpZClmb3IoZT0wO2U8bS5sZW5ndGg7ZSsrKXU9eCtfK2IqbVtlXS54LHMoImdyaWQiLHAsZyx1LGcrdix1KTtjKHQsaCxwKSYmKGw9ZytoLmwycCgwKSxzKCJ6ZXJvbGluZSIsaCxsLHgsbCx4K3kpKSxjKHQscCxoKSYmcygiemVyb2xpbmUiLHAsZyx1PXgrXyswLGcrdix1KX12YXIgdz1bXTtmb3IoZSBpbiBvKXcucHVzaChvW2VdKTtyZXR1cm4gd30odCkpfWUuZXhwb3J0cz17bmFtZToic3Bsb20iLGF0dHI6cy5hdHRyLGF0dHJSZWdleDpzLmF0dHJSZWdleCxsYXlvdXRBdHRyaWJ1dGVzOnMubGF5b3V0QXR0cmlidXRlcyxzdXBwbHlMYXlvdXREZWZhdWx0czpzLnN1cHBseUxheW91dERlZmF1bHRzLGRyYXdGcmFtZXdvcms6cy5kcmF3RnJhbWV3b3JrLHBsb3Q6ZnVuY3Rpb24odCl7dmFyIGU9dC5fZnVsbExheW91dCxyPWkuZ2V0TW9kdWxlKCJzcGxvbSIpLG49byh0LmNhbGNkYXRhLHIpWzBdO2EodCxbIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiLCJPRVNfZWxlbWVudF9pbmRleF91aW50Il0pJiYoZS5faGFzT25seUxhcmdlU3Bsb21zJiZmKHQpLHIucGxvdCh0LHt9LG4pKX0sZHJhZzpmdW5jdGlvbih0KXt2YXIgZT10LmNhbGNkYXRhLHI9dC5fZnVsbExheW91dDtyLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJmYodCk7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl1bMF0udHJhY2UsYT1yLl9zcGxvbVNjZW5lc1tpLnVpZF07InNwbG9tIj09PWkudHlwZSYmYSYmYS5tYXRyaXgmJnUodCxpLGEpfX0sdXBkYXRlR3JpZDpmLGNsZWFuOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9e307aWYobi5fc3Bsb21TY2VuZXMpe2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBvPXRbaV07InNwbG9tIj09PW8udHlwZSYmKGFbby51aWRdPTEpfWZvcihpPTA7aTxyLmxlbmd0aDtpKyspe3ZhciBsPXJbaV07aWYoIWFbbC51aWRdKXt2YXIgYz1uLl9zcGxvbVNjZW5lc1tsLnVpZF07YyYmYy5kZXN0cm95JiZjLmRlc3Ryb3koKSxuLl9zcGxvbVNjZW5lc1tsLnVpZF09bnVsbCxkZWxldGUgbi5fc3Bsb21TY2VuZXNbbC51aWRdfX19MD09PU9iamVjdC5rZXlzKG4uX3NwbG9tU2NlbmVzfHx7fSkubGVuZ3RoJiZkZWxldGUgbi5fc3Bsb21TY2VuZXMsbi5fc3Bsb21HcmlkJiYhZS5faGFzT25seUxhcmdlU3Bsb21zJiZuLl9oYXNPbmx5TGFyZ2VTcGxvbXMmJihuLl9zcGxvbUdyaWQuZGVzdHJveSgpLG4uX3NwbG9tR3JpZD1udWxsLGRlbGV0ZSBuLl9zcGxvbUdyaWQpLHMuY2xlYW4odCxlLHIsbil9LHVwZGF0ZUZ4OnMudXBkYXRlRngsdG9TVkc6cy50b1NWR319LHsiLi4vLi4vbGliL3ByZXBhcmVfcmVnbCI6Nzg5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uLy4uL3Bsb3RzL2dldF9kYXRhIjo4NjQsIi4uLy4uL3JlZ2lzdHJ5Ijo5MDQsInJlZ2wtbGluZTJkIjo1MTN9XSwxMjg5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksYT10KCIuLi9zY2F0dGVyL2NhbGMiKS5jYWxjTWFya2VyU2l6ZSxvPXQoIi4uL3NjYXR0ZXIvY2FsYyIpLmNhbGNBeGlzRXhwYW5zaW9uLHM9dCgiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiKSxsPXQoIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IikubWFya2VyU2VsZWN0aW9uLGM9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZSx1PXQoIi4vc2NlbmVfdXBkYXRlIiksZj10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNLGg9dCgiLi4vc2NhdHRlcmdsL2NvbnN0YW50cyIpLlRPT19NQU5ZX1BPSU5UUztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixwLGQsbSxnLHYseT1lLmRpbWVuc2lvbnMseD1lLl9sZW5ndGgsYj17fSxfPWIuY2RhdGE9W10sdz1iLmRhdGE9W10sVD1lLl92aXNpYmxlRGltcz1bXTtmdW5jdGlvbiBrKHQscil7Zm9yKHZhciBpPXQubWFrZUNhbGNkYXRhKHt2OnIudmFsdWVzLHZjYWxlbmRhcjplLmNhbGVuZGFyfSwidiIpLGE9MDthPGkubGVuZ3RoO2ErKylpW2FdPWlbYV09PT1mP05hTjppW2FdO18ucHVzaChpKSx3LnB1c2goImxvZyI9PT10LnR5cGU/bi5zaW1wbGVNYXAoaSx0LmMybCk6aSl9Zm9yKHI9MDtyPHkubGVuZ3RoO3IrKylpZigoZD15W3JdKS52aXNpYmxlKXtpZihtPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVswXSksZz1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMV0pLG0mJmcmJm0udHlwZSE9PWcudHlwZSl7bi5sb2coIlNraXBwaW5nIHNwbG9tIGRpbWVuc2lvbiAiK3IrIiB3aXRoIGNvbmZsaWN0aW5nIGF4aXMgdHlwZXMiKTtjb250aW51ZX1tPyhrKG0sZCksZyYmImNhdGVnb3J5Ij09PWcudHlwZSYmKGcuX2NhdGVnb3JpZXM9bS5fY2F0ZWdvcmllcy5zbGljZSgpKSk6ayhnLGQpLFQucHVzaChyKX1mb3Iocyh0LGUpLG4uZXh0ZW5kRmxhdChiLGMoZSkpLHY9Xy5sZW5ndGgqeD5oP2Iuc2l6ZUF2Z3x8TWF0aC5tYXgoYi5zaXplLDMpOmEoZSx4KSxwPTA7cDxULmxlbmd0aDtwKyspZD15W3I9VFtwXV0sbT1pLmdldEZyb21JZCh0LGUuX2RpYWdbcl1bMF0pfHx7fSxnPWkuZ2V0RnJvbUlkKHQsZS5fZGlhZ1tyXVsxXSl8fHt9LG8odCxlLG0sZyxfW3BdLF9bcF0sdik7dmFyIEE9dSh0LGUpO3JldHVybiBBLm1hdHJpeHx8KEEubWF0cml4PSEwKSxBLm1hdHJpeE9wdGlvbnM9YixBLnNlbGVjdGVkT3B0aW9ucz1sKGUsZS5zZWxlY3RlZCksQS51bnNlbGVjdGVkT3B0aW9ucz1sKGUsZS51bnNlbGVjdGVkKSxbe3g6ITEseTohMSx0Ont9LHRyYWNlOmV9XX19LHsiLi4vLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIjo4MzEsIi4uL3NjYXR0ZXIvY2FsYyI6MTE5MiwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4uL3NjYXR0ZXJnbC9jb25zdGFudHMiOjEyNDUsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMjQ2LCIuL3NjZW5lX3VwZGF0ZSI6MTI5Nn1dLDEyOTA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9wbG90cy9hcnJheV9jb250YWluZXJfZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpLG89dCgiLi4vc2NhdHRlci9zdWJ0eXBlcyIpLHM9dCgiLi4vc2NhdHRlci9tYXJrZXJfZGVmYXVsdHMiKSxsPXQoIi4uL3BhcmNvb3Jkcy9tZXJnZV9sZW5ndGgiKSxjPXQoIi4uL3NjYXR0ZXJnbC9oZWxwZXJzIikuaXNPcGVuU3ltYm9sO2Z1bmN0aW9uIHUodCxlKXtmdW5jdGlvbiByKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLmRpbWVuc2lvbnMscixpKX1yKCJsYWJlbCIpO3ZhciBpPXIoInZhbHVlcyIpO2kmJmkubGVuZ3RoP3IoInZpc2libGUiKTplLnZpc2libGU9ITEscigiYXhpcy50eXBlIikscigiYXhpcy5tYXRjaGVzIil9ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGYpe2Z1bmN0aW9uIGgocixpKXtyZXR1cm4gbi5jb2VyY2UodCxlLGEscixpKX12YXIgcD1pKHQsZSx7bmFtZToiZGltZW5zaW9ucyIsaGFuZGxlSXRlbURlZmF1bHRzOnV9KSxkPWgoImRpYWdvbmFsLnZpc2libGUiKSxtPWgoInNob3d1cHBlcmhhbGYiKSxnPWgoInNob3dsb3dlcmhhbGYiKTtpZihsKGUscCwidmFsdWVzIikmJihkfHxtfHxnKSl7aCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxzKHQsZSxyLGYsaCk7dmFyIHY9YyhlLm1hcmtlci5zeW1ib2wpLHk9by5pc0J1YmJsZShlKTtoKCJtYXJrZXIubGluZS53aWR0aCIsdnx8eT8xOjApLGZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGEsbz1lLmRpbWVuc2lvbnMscz1vLmxlbmd0aCxsPWUuc2hvd3VwcGVyaGFsZixjPWUuc2hvd2xvd2VyaGFsZix1PWUuZGlhZ29uYWwudmlzaWJsZSxmPW5ldyBBcnJheShzKSxoPW5ldyBBcnJheShzKTtmb3IoaT0wO2k8cztpKyspe3ZhciBwPWk/aSsxOiIiO2ZbaV09IngiK3AsaFtpXT0ieSIrcH12YXIgZD1uKCJ4YXhlcyIsZiksbT1uKCJ5YXhlcyIsaCksZz1lLl9kaWFnPW5ldyBBcnJheShzKTtlLl94YXhlcz17fSxlLl95YXhlcz17fTt2YXIgdj1bXSx5PVtdO2Z1bmN0aW9uIHgodCxuLGksYSl7aWYodCl7dmFyIG89dC5jaGFyQXQoMCkscz1yLl9zcGxvbUF4ZXNbb107aWYoZVsiXyIrbysiYXhlcyJdW3RdPTEsYS5wdXNoKHQpLCEodCBpbiBzKSl7dmFyIGw9c1t0XT17fTtpJiYobC5sYWJlbD1pLmxhYmVsfHwiIixpLnZpc2libGUmJmkuYXhpcyYmKGkuYXhpcy50eXBlJiYobC50eXBlPWkuYXhpcy50eXBlKSxpLmF4aXMubWF0Y2hlcyYmKGwubWF0Y2hlcz1uKSkpfX19dmFyIGI9IXUmJiFjLF89IXUmJiFsO2ZvcihlLl9heGVzRGltPXt9LGk9MDtpPHM7aSsrKXt2YXIgdz1vW2ldLFQ9MD09PWksaz1pPT09cy0xLEE9VCYmYnx8ayYmXz92b2lkIDA6ZFtpXSxNPVQmJl98fGsmJmI/dm9pZCAwOm1baV07eChBLE0sdyx2KSx4KE0sQSx3LHkpLGdbaV09W0EsTV0sZS5fYXhlc0RpbVtBXT1pLGUuX2F4ZXNEaW1bTV09aX1mb3IoaT0wO2k8di5sZW5ndGg7aSsrKWZvcihhPTA7YTx5Lmxlbmd0aDthKyspe3ZhciBTPXZbaV0reVthXTtpPmEmJmx8fGk8YSYmYz9yLl9zcGxvbVN1YnBsb3RzW1NdPTE6aSE9PWF8fCF1JiZjJiZsfHwoci5fc3Bsb21TdWJwbG90c1tTXT0xKX0oIWN8fCF1JiZsJiZjKSYmKHIuX3NwbG9tR3JpZERmbHQueHNpZGU9ImJvdHRvbSIsci5fc3Bsb21HcmlkRGZsdC55c2lkZT0ibGVmdCIpfSgwLGUsZixoKSxuLmNvZXJjZVNlbGVjdGlvbk1hcmtlck9wYWNpdHkoZSxoKX1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2FycmF5X2NvbnRhaW5lcl9kZWZhdWx0cyI6ODIyLCIuLi9wYXJjb29yZHMvbWVyZ2VfbGVuZ3RoIjoxMTYyLCIuLi9zY2F0dGVyL21hcmtlcl9kZWZhdWx0cyI6MTIxMCwiLi4vc2NhdHRlci9zdWJ0eXBlcyI6MTIxNiwiLi4vc2NhdHRlcmdsL2hlbHBlcnMiOjEyNTAsIi4vYXR0cmlidXRlcyI6MTI4N31dLDEyOTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9zY2F0dGVyL2NvbG9yc2NhbGVfY2FsYyIpLGE9dCgiLi4vc2NhdHRlcmdsL2NvbnZlcnQiKS5tYXJrZXJTdHlsZTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj1lLnRyYWNlLG89dC5fZnVsbExheW91dC5fc3Bsb21TY2VuZXNbci51aWRdO2lmKG8pe2kodCxyKSxuLmV4dGVuZEZsYXQoby5tYXRyaXhPcHRpb25zLGEocikpO3ZhciBzPW4uZXh0ZW5kRmxhdCh7fSxvLm1hdHJpeE9wdGlvbnMsby52aWV3T3B0cyk7by5tYXRyaXgudXBkYXRlKHMsbnVsbCl9fX0seyIuLi8uLi9saWIiOjc3NiwiLi4vc2NhdHRlci9jb2xvcnNjYWxlX2NhbGMiOjExOTQsIi4uL3NjYXR0ZXJnbC9jb252ZXJ0IjoxMjQ2fV0sMTI5MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLmdldERpbUluZGV4PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWUuX2lkLG49e3g6MCx5OjF9W3IuY2hhckF0KDApXSxpPXQuX3Zpc2libGVEaW1zLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZih0Ll9kaWFnW29dW25dPT09cilyZXR1cm4gYX1yZXR1cm4hMX19LHt9XSwxMjkzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vaGVscGVycyIpLGk9dCgiLi4vc2NhdHRlcmdsL2hvdmVyIikuY2FsY0hvdmVyO2UuZXhwb3J0cz17aG92ZXJQb2ludHM6ZnVuY3Rpb24odCxlLHIpe3ZhciBhPXQuY2RbMF0udHJhY2Usbz10LnNjZW5lLm1hdHJpeE9wdGlvbnMuY2RhdGEscz10LnhhLGw9dC55YSxjPXMuYzJwKGUpLHU9bC5jMnAociksZj10LmRpc3RhbmNlLGg9bi5nZXREaW1JbmRleChhLHMpLHA9bi5nZXREaW1JbmRleChhLGwpO2lmKCExPT09aHx8ITE9PT1wKXJldHVyblt0XTtmb3IodmFyIGQsbSxnPW9baF0sdj1vW3BdLHk9Zix4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBiPWdbeF0sXz12W3hdLHc9cy5jMnAoYiktYyxUPWwuYzJwKF8pLXUsaz1NYXRoLnNxcnQodyp3K1QqVCk7azx5JiYoeT1tPWssZD14KX1yZXR1cm4gdC5pbmRleD1kLHQuZGlzdGFuY2U9eSx0LmR4eT1tLHZvaWQgMD09PWQ/W3RdOltpKHQsZyx2LGEpXX19fSx7Ii4uL3NjYXR0ZXJnbC9ob3ZlciI6MTI1MSwiLi9oZWxwZXJzIjoxMjkyfV0sMTI5NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9yZWdpc3RyeSIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9ncmlkIik7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3Bsb20iLGJhc2VQbG90TW9kdWxlOnQoIi4vYmFzZV9wbG90IiksY2F0ZWdvcmllczpbImdsIiwicmVnbCIsImNhcnRlc2lhbiIsInN5bWJvbHMiLCJzaG93TGVnZW5kIiwic2NhdHRlci1saWtlIl0sYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxjYWxjOnQoIi4vY2FsYyIpLHBsb3Q6dCgiLi9wbG90IiksaG92ZXJQb2ludHM6dCgiLi9ob3ZlciIpLmhvdmVyUG9pbnRzLHNlbGVjdFBvaW50czp0KCIuL3NlbGVjdCIpLGVkaXRTdHlsZTp0KCIuL2VkaXRfc3R5bGUiKSxtZXRhOnt9fSxuLnJlZ2lzdGVyKGkpfSx7Ii4uLy4uL2NvbXBvbmVudHMvZ3JpZCI6NjgzLCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMjg3LCIuL2Jhc2VfcGxvdCI6MTI4OCwiLi9jYWxjIjoxMjg5LCIuL2RlZmF1bHRzIjoxMjkwLCIuL2VkaXRfc3R5bGUiOjEyOTEsIi4vaG92ZXIiOjEyOTMsIi4vcGxvdCI6MTI5NSwiLi9zZWxlY3QiOjEyOTd9XSwxMjk1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoInJlZ2wtc3Bsb20iKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfaWRzIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2RyYWdlbGVtZW50L2hlbHBlcnMiKS5zZWxlY3RNb2RlO2Z1bmN0aW9uIHModCxlKXt2YXIgcixzLGwsYyx1LGY9dC5fZnVsbExheW91dCxoPWYuX3NpemUscD1lLnRyYWNlLGQ9ZS50LG09Zi5fc3Bsb21TY2VuZXNbcC51aWRdLGc9bS5tYXRyaXhPcHRpb25zLHY9Zy5jZGF0YSx5PWYuX2dsY2FudmFzLmRhdGEoKVswXS5yZWdsLHg9Zi5kcmFnbW9kZTtpZigwIT09di5sZW5ndGgpe2cubG93ZXI9cC5zaG93dXBwZXJoYWxmLGcudXBwZXI9cC5zaG93bG93ZXJoYWxmLGcuZGlhZ29uYWw9cC5kaWFnb25hbC52aXNpYmxlO3ZhciBiPXAuX3Zpc2libGVEaW1zLF89di5sZW5ndGgsdz1tLnZpZXdPcHRzPXt9O2Zvcih3LnJhbmdlcz1uZXcgQXJyYXkoXyksdy5kb21haW5zPW5ldyBBcnJheShfKSx1PTA7dTxiLmxlbmd0aDt1Kyspe2w9Ylt1XTt2YXIgVD13LnJhbmdlc1t1XT1uZXcgQXJyYXkoNCksaz13LmRvbWFpbnNbdV09bmV3IEFycmF5KDQpOyhyPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVswXSkpJiYoVFswXT1yLl9ybFswXSxUWzJdPXIuX3JsWzFdLGtbMF09ci5kb21haW5bMF0sa1syXT1yLmRvbWFpblsxXSksKHM9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzFdKSkmJihUWzFdPXMuX3JsWzBdLFRbM109cy5fcmxbMV0sa1sxXT1zLmRvbWFpblswXSxrWzNdPXMuZG9tYWluWzFdKX12YXIgQT10Ll9jb250ZXh0LnBsb3RHbFBpeGVsUmF0aW8sTT1oLmwqQSxTPWguYipBLEU9aC53KkEsTD1oLmgqQTt3LnZpZXdwb3J0PVtNLFMsRStNLEwrU10sITA9PT1tLm1hdHJpeCYmKG0ubWF0cml4PW4oeSkpO3ZhciBDPWYuY2xpY2ttb2RlLmluZGV4T2YoInNlbGVjdCIpPi0xLFA9ITA7aWYobyh4KXx8ISFwLnNlbGVjdGVkcG9pbnRzfHxDKXt2YXIgST1wLl9sZW5ndGg7aWYocC5zZWxlY3RlZHBvaW50cyl7bS5zZWxlY3RCYXRjaD1wLnNlbGVjdGVkcG9pbnRzO3ZhciBPPXAuc2VsZWN0ZWRwb2ludHMsej17fTtmb3IobD0wO2w8Ty5sZW5ndGg7bCsrKXpbT1tsXV09ITA7dmFyIEQ9W107Zm9yKGw9MDtsPEk7bCsrKXpbbF18fEQucHVzaChsKTttLnVuc2VsZWN0QmF0Y2g9RH12YXIgUj1kLnhweD1uZXcgQXJyYXkoXyksRj1kLnlweD1uZXcgQXJyYXkoXyk7Zm9yKHU9MDt1PGIubGVuZ3RoO3UrKyl7aWYobD1iW3VdLHI9YS5nZXRGcm9tSWQodCxwLl9kaWFnW2xdWzBdKSlmb3IoUlt1XT1uZXcgQXJyYXkoSSksYz0wO2M8STtjKyspUlt1XVtjXT1yLmMycCh2W3VdW2NdKTtpZihzPWEuZ2V0RnJvbUlkKHQscC5fZGlhZ1tsXVsxXSkpZm9yKEZbdV09bmV3IEFycmF5KEkpLGM9MDtjPEk7YysrKUZbdV1bY109cy5jMnAodlt1XVtjXSl9aWYobS5zZWxlY3RCYXRjaC5sZW5ndGh8fG0udW5zZWxlY3RCYXRjaC5sZW5ndGgpe3ZhciBCPWkuZXh0ZW5kRmxhdCh7fSxnLG0udW5zZWxlY3RlZE9wdGlvbnMsdyksTj1pLmV4dGVuZEZsYXQoe30sZyxtLnNlbGVjdGVkT3B0aW9ucyx3KTttLm1hdHJpeC51cGRhdGUoQixOKSxQPSExfX1lbHNlIGQueHB4PWQueXB4PW51bGw7aWYoUCl7dmFyIGo9aS5leHRlbmRGbGF0KHt9LGcsdyk7bS5tYXRyaXgudXBkYXRlKGosbnVsbCl9fX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKHIubGVuZ3RoKWZvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXModCxyW25dWzBdKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmFnZWxlbWVudC9oZWxwZXJzIjo2NTcsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19pZHMiOjgzMSwicmVnbC1zcGxvbSI6NTE1fV0sMTI5NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9mdWxsTGF5b3V0LGk9ZS51aWQsYT1yLl9zcGxvbVNjZW5lczthfHwoYT1yLl9zcGxvbVNjZW5lcz17fSk7dmFyIG89e2RpcnR5OiEwLHNlbGVjdEJhdGNoOltdLHVuc2VsZWN0QmF0Y2g6W119LHM9YVtlLnVpZF07cmV0dXJuIHN8fCgocz1hW2ldPW4uZXh0ZW5kRmxhdCh7fSxvLHttYXRyaXg6ITEsc2VsZWN0QmF0Y2g6W10sdW5zZWxlY3RCYXRjaDpbXX0pKS5kcmF3PWZ1bmN0aW9uKCl7cy5tYXRyaXgmJnMubWF0cml4LmRyYXcmJihzLnNlbGVjdEJhdGNoLmxlbmd0aHx8cy51bnNlbGVjdEJhdGNoLmxlbmd0aD9zLm1hdHJpeC5kcmF3KHMudW5zZWxlY3RCYXRjaCxzLnNlbGVjdEJhdGNoKTpzLm1hdHJpeC5kcmF3KCkpLHMuZGlydHk9ITF9LHMuZGVzdHJveT1mdW5jdGlvbigpe3MubWF0cml4JiZzLm1hdHJpeC5kZXN0cm95JiZzLm1hdHJpeC5kZXN0cm95KCkscy5tYXRyaXhPcHRpb25zPW51bGwscy5zZWxlY3RCYXRjaD1udWxsLHMudW5zZWxlY3RCYXRjaD1udWxsLHM9bnVsbH0pLHMuZGlydHl8fG4uZXh0ZW5kRmxhdChzLG8pLHN9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTI5NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uL3NjYXR0ZXIvc3VidHlwZXMiKSxhPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXQuY2Qsbz1yWzBdLnRyYWNlLHM9clswXS50LGw9dC5zY2VuZSxjPWwubWF0cml4T3B0aW9ucy5jZGF0YSx1PXQueGF4aXMsZj10LnlheGlzLGg9W107aWYoIWwpcmV0dXJuIGg7dmFyIHA9IWkuaGFzTWFya2VycyhvKSYmIWkuaGFzVGV4dChvKTtpZighMCE9PW8udmlzaWJsZXx8cClyZXR1cm4gaDt2YXIgZD1hLmdldERpbUluZGV4KG8sdSksbT1hLmdldERpbUluZGV4KG8sZik7aWYoITE9PT1kfHwhMT09PW0pcmV0dXJuIGg7dmFyIGc9cy54cHhbZF0sdj1zLnlweFttXSx5PWNbZF0seD1jW21dLGI9W10sXz1bXTtpZighMSE9PWUmJiFlLmRlZ2VuZXJhdGUpZm9yKHZhciB3PTA7dzx5Lmxlbmd0aDt3KyspZS5jb250YWlucyhbZ1t3XSx2W3ddXSxudWxsLHcsdCk/KGIucHVzaCh3KSxoLnB1c2goe3BvaW50TnVtYmVyOncseDp5W3ddLHk6eFt3XX0pKTpfLnB1c2godyk7dmFyIFQ9bC5tYXRyaXhPcHRpb25zO3JldHVybiBiLmxlbmd0aHx8Xy5sZW5ndGg/bC5zZWxlY3RCYXRjaC5sZW5ndGh8fGwudW5zZWxlY3RCYXRjaC5sZW5ndGh8fGwubWF0cml4LnVwZGF0ZShsLnVuc2VsZWN0ZWRPcHRpb25zLG4uZXh0ZW5kRmxhdCh7fSxULGwuc2VsZWN0ZWRPcHRpb25zLGwudmlld09wdHMpKTpsLm1hdHJpeC51cGRhdGUoVCxudWxsKSxsLnNlbGVjdEJhdGNoPWIsbC51bnNlbGVjdEJhdGNoPV8saH19LHsiLi4vLi4vbGliIjo3NzYsIi4uL3NjYXR0ZXIvc3VidHlwZXMiOjEyMTYsIi4vaGVscGVycyI6MTI5Mn1dLDEyOTg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIikuYXhpc0hvdmVyRm9ybWF0LGE9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxvPXQoIi4uL21lc2gzZC9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXt4Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYytjbGVhckF4aXNUeXBlcyJ9LHk6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjK2NsZWFyQXhpc1R5cGVzIn0sejp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMrY2xlYXJBeGlzVHlwZXMifSx1Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHY6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0sdzp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxzdGFydHM6e3g6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGVkaXRUeXBlOiJjYWxjIn0seTp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSx6Ont2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbWF4ZGlzcGxheWVkOnt2YWxUeXBlOiJpbnRlZ2VyIixtaW46MCxkZmx0OjFlMyxlZGl0VHlwZToiY2FsYyJ9LHNpemVyZWY6e3ZhbFR5cGU6Im51bWJlciIsZWRpdFR5cGU6ImNhbGMiLG1pbjowLGRmbHQ6MX0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0saG92ZXJ0ZXh0Ont2YWxUeXBlOiJzdHJpbmciLGRmbHQ6IiIsZWRpdFR5cGU6ImNhbGMifSxob3ZlcnRlbXBsYXRlOmEoe2VkaXRUeXBlOiJjYWxjIn0se2tleXM6WyJ0dWJleCIsInR1YmV5IiwidHViZXoiLCJ0dWJldSIsInR1YmV2IiwidHViZXciLCJub3JtIiwiZGl2ZXJnZW5jZSJdfSksdWhvdmVyZm9ybWF0OmkoInUiLDEpLHZob3ZlcmZvcm1hdDppKCJ2IiwxKSx3aG92ZXJmb3JtYXQ6aSgidyIsMSkseGhvdmVyZm9ybWF0OmkoIngiKSx5aG92ZXJmb3JtYXQ6aSgieSIpLHpob3ZlcmZvcm1hdDppKCJ6Iiksc2hvd2xlZ2VuZDpsKHt9LHMuc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfTtsKGMsbigiIix7Y29sb3JBdHRyOiJ1L3YvdyBub3JtIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkpO1sib3BhY2l0eSIsImxpZ2h0cG9zaXRpb24iLCJsaWdodGluZyJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2NbdF09b1t0XX0pKSxjLmhvdmVyaW5mbz1sKHt9LHMuaG92ZXJpbmZvLHtlZGl0VHlwZToiY2FsYyIsZmxhZ3M6WyJ4IiwieSIsInoiLCJ1IiwidiIsInciLCJub3JtIiwiZGl2ZXJnZW5jZSIsInRleHQiLCJuYW1lIl0sZGZsdDoieCt5K3orbm9ybSt0ZXh0K25hbWUifSksYy50cmFuc2Zvcm1zPXZvaWQgMCxlLmV4cG9ydHM9Y30seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiOjgzMCwiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyI6ODk5LCIuLi9tZXNoM2QvYXR0cmlidXRlcyI6MTEzMn1dLDEyOTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyIpO2Z1bmN0aW9uIGEodCl7dmFyIGUscixpLGEscyxsLGMsdSxmLGgscCxkLG09dC5feCxnPXQuX3ksdj10Ll96LHk9dC5fbGVuLHg9LTEvMCxiPTEvMCxfPS0xLzAsdz0xLzAsVD0tMS8wLGs9MS8wLEE9IiI7Zm9yKHkmJihjPW1bMF0sZj1nWzBdLHA9dlswXSkseT4xJiYodT1tW3ktMV0saD1nW3ktMV0sZD12W3ktMV0pLGU9MDtlPHk7ZSsrKXg9TWF0aC5tYXgoeCxtW2VdKSxiPU1hdGgubWluKGIsbVtlXSksXz1NYXRoLm1heChfLGdbZV0pLHc9TWF0aC5taW4odyxnW2VdKSxUPU1hdGgubWF4KFQsdltlXSksaz1NYXRoLm1pbihrLHZbZV0pLGF8fG1bZV09PT1jfHwoYT0hMCxBKz0ieCIpLHN8fGdbZV09PT1mfHwocz0hMCxBKz0ieSIpLGx8fHZbZV09PT1wfHwobD0hMCxBKz0ieiIpO2F8fChBKz0ieCIpLHN8fChBKz0ieSIpLGx8fChBKz0ieiIpO3ZhciBNPW8odC5feCksUz1vKHQuX3kpLEU9byh0Ll96KTtBPShBPShBPUEucmVwbGFjZSgieCIsKGM+dT8iLSI6IisiKSsieCIpKS5yZXBsYWNlKCJ5IiwoZj5oPyItIjoiKyIpKyJ5IikpLnJlcGxhY2UoInoiLChwPmQ/Ii0iOiIrIikrInoiKTt2YXIgTD1mdW5jdGlvbigpe3k9MCxNPVtdLFM9W10sRT1bXX07KCF5fHx5PE0ubGVuZ3RoKlMubGVuZ3RoKkUubGVuZ3RoKSYmTCgpO3ZhciBDPWZ1bmN0aW9uKHQpe3JldHVybiJ4Ij09PXQ/bToieSI9PT10P2c6dn0sUD1mdW5jdGlvbih0KXtyZXR1cm4ieCI9PT10P006InkiPT09dD9TOkV9LEk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbeS0xXTx0WzBdPy0xOjF9LE89QyhBWzFdKSx6PUMoQVszXSksRD1DKEFbNV0pLFI9UChBWzFdKS5sZW5ndGgsRj1QKEFbM10pLmxlbmd0aCxCPVAoQVs1XSkubGVuZ3RoLE49ITEsaj1mdW5jdGlvbih0LGUscil7cmV0dXJuIFIqKEYqdCtlKStyfSxVPUkoQyhBWzFdKSksVj1JKEMoQVszXSkpLEg9SShDKEFbNV0pKTtmb3IoZT0wO2U8Qi0xO2UrKyl7Zm9yKHI9MDtyPEYtMTtyKyspe2ZvcihpPTA7aTxSLTE7aSsrKXt2YXIgcT1qKGUscixpKSxHPWooZSxyLGkrMSksWT1qKGUscisxLGkpLFc9aihlKzEscixpKTtpZihPW3FdKlU8T1tHXSpVJiZ6W3FdKlY8eltZXSpWJiZEW3FdKkg8RFtXXSpIfHwoTj0hMCksTilicmVha31pZihOKWJyZWFrfWlmKE4pYnJlYWt9cmV0dXJuIE4mJihuLndhcm4oIkVuY291bnRlcmVkIGFyYml0cmFyeSBjb29yZGluYXRlcyEgVW5hYmxlIHRvIGlucHV0IGRhdGEgZ3JpZC4iKSxMKCkpLHt4TWluOmIseU1pbjp3LHpNaW46ayx4TWF4OngseU1heDpfLHpNYXg6VCxYczpNLFlzOlMsWnM6RSxsZW46eSxmaWxsOkF9fWZ1bmN0aW9uIG8odCl7cmV0dXJuIG4uZGlzdGluY3RWYWxzKHQpLnZhbHN9ZnVuY3Rpb24gcyh0LGUpe2lmKHZvaWQgMD09PWUmJihlPXQubGVuZ3RoKSxuLmlzVHlwZWRBcnJheSh0KSlyZXR1cm4gdC5zdWJhcnJheSgwLGUpO2Zvcih2YXIgcj1bXSxpPTA7aTxlO2krKylyW2ldPSt0W2ldO3JldHVybiByfWUuZXhwb3J0cz17Y2FsYzpmdW5jdGlvbih0LGUpe2UuX2xlbj1NYXRoLm1pbihlLnUubGVuZ3RoLGUudi5sZW5ndGgsZS53Lmxlbmd0aCxlLngubGVuZ3RoLGUueS5sZW5ndGgsZS56Lmxlbmd0aCksZS5fdT1zKGUudSxlLl9sZW4pLGUuX3Y9cyhlLnYsZS5fbGVuKSxlLl93PXMoZS53LGUuX2xlbiksZS5feD1zKGUueCxlLl9sZW4pLGUuX3k9cyhlLnksZS5fbGVuKSxlLl96PXMoZS56LGUuX2xlbik7dmFyIHI9YShlKTtlLl9ncmlkRmlsbD1yLmZpbGwsZS5fWHM9ci5YcyxlLl9Zcz1yLllzLGUuX1pzPXIuWnMsZS5fbGVuPXIubGVuO3ZhciBuLG8sbCxjPTA7ZS5zdGFydHMmJihuPXMoZS5zdGFydHMueHx8W10pLG89cyhlLnN0YXJ0cy55fHxbXSksbD1zKGUuc3RhcnRzLnp8fFtdKSxjPU1hdGgubWluKG4ubGVuZ3RoLG8ubGVuZ3RoLGwubGVuZ3RoKSksZS5fc3RhcnRzWD1ufHxbXSxlLl9zdGFydHNZPW98fFtdLGUuX3N0YXJ0c1o9bHx8W107dmFyIHUsZj0wLGg9MS8wO2Zvcih1PTA7dTxlLl9sZW47dSsrKXt2YXIgcD1lLl91W3VdLGQ9ZS5fdlt1XSxtPWUuX3dbdV0sZz1NYXRoLnNxcnQocCpwK2QqZCttKm0pO2Y9TWF0aC5tYXgoZixnKSxoPU1hdGgubWluKGgsZyl9Zm9yKGkodCxlLHt2YWxzOltoLGZdLGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pLHU9MDt1PGM7dSsrKXt2YXIgdj1uW3VdO3IueE1heD1NYXRoLm1heChyLnhNYXgsdiksci54TWluPU1hdGgubWluKHIueE1pbix2KTt2YXIgeT1vW3VdO3IueU1heD1NYXRoLm1heChyLnlNYXgseSksci55TWluPU1hdGgubWluKHIueU1pbix5KTt2YXIgeD1sW3VdO3Iuek1heD1NYXRoLm1heChyLnpNYXgseCksci56TWluPU1hdGgubWluKHIuek1pbix4KX1lLl9zbGVuPWMsZS5fbm9ybU1heD1mLGUuX3hibmRzPVtyLnhNaW4sci54TWF4XSxlLl95Ym5kcz1bci55TWluLHIueU1heF0sZS5femJuZHM9W3Iuek1pbixyLnpNYXhdfSxmaWx0ZXI6cyxwcm9jZXNzR3JpZDphfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3LCIuLi8uLi9saWIiOjc3Nn1dLDEzMDA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZ2wtc3RyZWFtdHViZTNkIiksaT1uLmNyZWF0ZVR1YmVNZXNoLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIikucGFyc2VDb2xvclNjYWxlLHM9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIikuZXh0cmFjdE9wdHMsbD10KCIuLi8uLi9wbG90cy9nbDNkL3ppcDMiKSxjPXt4YXhpczowLHlheGlzOjEsemF4aXM6Mn07ZnVuY3Rpb24gdSh0LGUpe3RoaXMuc2NlbmU9dCx0aGlzLnVpZD1lLHRoaXMubWVzaD1udWxsLHRoaXMuZGF0YT1udWxsfXZhciBmPXUucHJvdG90eXBlO2Z1bmN0aW9uIGgodCl7dmFyIGU9dC5sZW5ndGg7cmV0dXJuIGU+Mj90LnNsaWNlKDEsZS0xKToyPT09ZT9bKHRbMF0rdFsxXSkvMl06dH1mdW5jdGlvbiBwKHQpe3ZhciBlPXQubGVuZ3RoO3JldHVybiAxPT09ZT9bLjUsLjVdOlt0WzFdLXRbMF0sdFtlLTFdLXRbZS0yXV19ZnVuY3Rpb24gZCh0LGUpe3ZhciByPXQuZnVsbFNjZW5lTGF5b3V0LGk9dC5kYXRhU2NhbGUsdT1lLl9sZW4sZj17fTtmdW5jdGlvbiBkKHQsZSl7dmFyIG49cltlXSxvPWlbY1tlXV07cmV0dXJuIGEuc2ltcGxlTWFwKHQsKGZ1bmN0aW9uKHQpe3JldHVybiBuLmQybCh0KSpvfSkpfWlmKGYudmVjdG9ycz1sKGQoZS5fdSwieGF4aXMiKSxkKGUuX3YsInlheGlzIiksZChlLl93LCJ6YXhpcyIpLHUpLCF1KXJldHVybntwb3NpdGlvbnM6W10sY2VsbHM6W119O3ZhciBtPWQoZS5fWHMsInhheGlzIiksZz1kKGUuX1lzLCJ5YXhpcyIpLHY9ZChlLl9acywiemF4aXMiKTtpZihmLm1lc2hncmlkPVttLGcsdl0sZi5ncmlkRmlsbD1lLl9ncmlkRmlsbCxlLl9zbGVuKWYuc3RhcnRpbmdQb3NpdGlvbnM9bChkKGUuX3N0YXJ0c1gsInhheGlzIiksZChlLl9zdGFydHNZLCJ5YXhpcyIpLGQoZS5fc3RhcnRzWiwiemF4aXMiKSk7ZWxzZXtmb3IodmFyIHk9Z1swXSx4PWgobSksYj1oKHYpLF89bmV3IEFycmF5KHgubGVuZ3RoKmIubGVuZ3RoKSx3PTAsVD0wO1Q8eC5sZW5ndGg7VCsrKWZvcih2YXIgaz0wO2s8Yi5sZW5ndGg7aysrKV9bdysrXT1beFtUXSx5LGJba11dO2Yuc3RhcnRpbmdQb3NpdGlvbnM9X31mLmNvbG9ybWFwPW8oZSksZi50dWJlU2l6ZT1lLnNpemVyZWYsZi5tYXhMZW5ndGg9ZS5tYXhkaXNwbGF5ZWQ7dmFyIEE9ZChlLl94Ym5kcywieGF4aXMiKSxNPWQoZS5feWJuZHMsInlheGlzIiksUz1kKGUuX3pibmRzLCJ6YXhpcyIpLEU9cChtKSxMPXAoZyksQz1wKHYpLFA9W1tBWzBdLUVbMF0sTVswXS1MWzBdLFNbMF0tQ1swXV0sW0FbMV0rRVsxXSxNWzFdK0xbMV0sU1sxXStDWzFdXV0sST1uKGYsUCksTz1zKGUpO0kudmVydGV4SW50ZW5zaXR5Qm91bmRzPVtPLm1pbi9lLl9ub3JtTWF4LE8ubWF4L2UuX25vcm1NYXhdO3ZhciB6PWUubGlnaHRwb3NpdGlvbjtyZXR1cm4gSS5saWdodFBvc2l0aW9uPVt6Lngsei55LHouel0sSS5hbWJpZW50PWUubGlnaHRpbmcuYW1iaWVudCxJLmRpZmZ1c2U9ZS5saWdodGluZy5kaWZmdXNlLEkuc3BlY3VsYXI9ZS5saWdodGluZy5zcGVjdWxhcixJLnJvdWdobmVzcz1lLmxpZ2h0aW5nLnJvdWdobmVzcyxJLmZyZXNuZWw9ZS5saWdodGluZy5mcmVzbmVsLEkub3BhY2l0eT1lLm9wYWNpdHksZS5fcGFkPUkudHViZVNjYWxlKmUuc2l6ZXJlZioyLEl9Zi5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LHI9dGhpcy5zY2VuZS5kYXRhU2NhbGU7ZnVuY3Rpb24gbih0LG4pe3ZhciBpPWVbbl0sYT1yW2Nbbl1dO3JldHVybiBpLmwyYyh0KS9hfWlmKHQub2JqZWN0PT09dGhpcy5tZXNoKXt2YXIgaT10LmRhdGEucG9zaXRpb24sYT10LmRhdGEudmVsb2NpdHk7cmV0dXJuIHQudHJhY2VDb29yZGluYXRlPVtuKGlbMF0sInhheGlzIiksbihpWzFdLCJ5YXhpcyIpLG4oaVsyXSwiemF4aXMiKSxuKGFbMF0sInhheGlzIiksbihhWzFdLCJ5YXhpcyIpLG4oYVsyXSwiemF4aXMiKSx0LmRhdGEuaW50ZW5zaXR5KnRoaXMuZGF0YS5fbm9ybU1heCx0LmRhdGEuZGl2ZXJnZW5jZV0sdC50ZXh0TGFiZWw9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQsITB9fSxmLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmRhdGE9dDt2YXIgZT1kKHRoaXMuc2NlbmUsdCk7dGhpcy5tZXNoLnVwZGF0ZShlKX0sZi5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMubWVzaCksdGhpcy5tZXNoLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsbj1kKHQsZSksYT1pKHIsbiksbz1uZXcgdSh0LGUudWlkKTtyZXR1cm4gby5tZXNoPWEsby5kYXRhPWUsYS5fdHJhY2U9byx0LmdscGxvdC5hZGQoYSksb319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyI6ODgwLCJnbC1zdHJlYW10dWJlM2QiOjMzNH1dLDEzMDE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiKSxhPXQoIi4vYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvKXtmdW5jdGlvbiBzKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxhLHIsaSl9dmFyIGw9cygidSIpLGM9cygidiIpLHU9cygidyIpLGY9cygieCIpLGg9cygieSIpLHA9cygieiIpO2wmJmwubGVuZ3RoJiZjJiZjLmxlbmd0aCYmdSYmdS5sZW5ndGgmJmYmJmYubGVuZ3RoJiZoJiZoLmxlbmd0aCYmcCYmcC5sZW5ndGg/KHMoInN0YXJ0cy54Iikscygic3RhcnRzLnkiKSxzKCJzdGFydHMueiIpLHMoIm1heGRpc3BsYXllZCIpLHMoInNpemVyZWYiKSxzKCJsaWdodGluZy5hbWJpZW50IikscygibGlnaHRpbmcuZGlmZnVzZSIpLHMoImxpZ2h0aW5nLnNwZWN1bGFyIikscygibGlnaHRpbmcucm91Z2huZXNzIikscygibGlnaHRpbmcuZnJlc25lbCIpLHMoImxpZ2h0cG9zaXRpb24ueCIpLHMoImxpZ2h0cG9zaXRpb24ueSIpLHMoImxpZ2h0cG9zaXRpb24ueiIpLGkodCxlLG8scyx7cHJlZml4OiIiLGNMZXR0ZXI6ImMifSkscygidGV4dCIpLHMoImhvdmVydGV4dCIpLHMoImhvdmVydGVtcGxhdGUiKSxzKCJ1aG92ZXJmb3JtYXQiKSxzKCJ2aG92ZXJmb3JtYXQiKSxzKCJ3aG92ZXJmb3JtYXQiKSxzKCJ4aG92ZXJmb3JtYXQiKSxzKCJ5aG92ZXJmb3JtYXQiKSxzKCJ6aG92ZXJmb3JtYXQiKSxlLl9sZW5ndGg9bnVsbCk6ZS52aXNpYmxlPSExfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvZGVmYXVsdHMiOjY0OSwiLi4vLi4vbGliIjo3NzYsIi4vYXR0cmlidXRlcyI6MTI5OH1dLDEzMDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToic3RyZWFtdHViZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLGF0dHJpYnV0ZXM6dCgiLi9hdHRyaWJ1dGVzIiksc3VwcGx5RGVmYXVsdHM6dCgiLi9kZWZhdWx0cyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LGNhbGM6dCgiLi9jYWxjIikuY2FsYyxwbG90OnQoIi4vY29udmVydCIpLGV2ZW50RGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0LnR1YmV4PXQueCx0LnR1YmV5PXQueSx0LnR1YmV6PXQueix0LnR1YmV1PWUudHJhY2VDb29yZGluYXRlWzNdLHQudHViZXY9ZS50cmFjZUNvb3JkaW5hdGVbNF0sdC50dWJldz1lLnRyYWNlQ29vcmRpbmF0ZVs1XSx0Lm5vcm09ZS50cmFjZUNvb3JkaW5hdGVbNl0sdC5kaXZlcmdlbmNlPWUudHJhY2VDb29yZGluYXRlWzddLGRlbGV0ZSB0LngsZGVsZXRlIHQueSxkZWxldGUgdC56LHR9LG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi9hdHRyaWJ1dGVzIjoxMjk4LCIuL2NhbGMiOjEyOTksIi4vY29udmVydCI6MTMwMCwiLi9kZWZhdWx0cyI6MTMwMX1dLDEzMDM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vcGxvdHMvdGVtcGxhdGVfYXR0cmlidXRlcyIpLmhvdmVydGVtcGxhdGVBdHRycyxhPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS50ZXh0dGVtcGxhdGVBdHRycyxvPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIikscz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5hdHRyaWJ1dGVzLGw9dCgiLi4vcGllL2F0dHJpYnV0ZXMiKSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdDtlLmV4cG9ydHM9e2xhYmVsczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxwYXJlbnRzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZWRpdFR5cGU6ImNhbGMifSxicmFuY2h2YWx1ZXM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInJlbWFpbmRlciIsInRvdGFsIl0sZGZsdDoicmVtYWluZGVyIixlZGl0VHlwZToiY2FsYyJ9LGNvdW50Ont2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJicmFuY2hlcyIsImxlYXZlcyJdLGRmbHQ6ImxlYXZlcyIsZWRpdFR5cGU6ImNhbGMifSxsZXZlbDp7dmFsVHlwZToiYW55IixlZGl0VHlwZToicGxvdCIsYW5pbTohMH0sbWF4ZGVwdGg6e3ZhbFR5cGU6ImludGVnZXIiLGVkaXRUeXBlOiJwbG90IixkZmx0Oi0xfSxtYXJrZXI6dSh7Y29sb3JzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnUoe30sbC5tYXJrZXIubGluZS5jb2xvcix7ZGZsdDpudWxsfSksd2lkdGg6dSh7fSxsLm1hcmtlci5saW5lLndpZHRoLHtkZmx0OjF9KSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sbygibWFya2VyIix7Y29sb3JBdHRyOiJjb2xvcnMiLGFuaW06ITF9KSksbGVhZjp7b3BhY2l0eTp7dmFsVHlwZToibnVtYmVyIixlZGl0VHlwZToic3R5bGUiLG1pbjowLG1heDoxfSxlZGl0VHlwZToicGxvdCJ9LHRleHQ6bC50ZXh0LHRleHRpbmZvOnt2YWxUeXBlOiJmbGFnbGlzdCIsZmxhZ3M6WyJsYWJlbCIsInRleHQiLCJ2YWx1ZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGV4dHJhczpbIm5vbmUiXSxlZGl0VHlwZToicGxvdCJ9LHRleHR0ZW1wbGF0ZTphKHtlZGl0VHlwZToicGxvdCJ9LHtrZXlzOmMuZXZlbnREYXRhS2V5cy5jb25jYXQoWyJsYWJlbCIsInZhbHVlIl0pfSksaG92ZXJ0ZXh0OmwuaG92ZXJ0ZXh0LGhvdmVyaW5mbzp1KHt9LG4uaG92ZXJpbmZvLHtmbGFnczpbImxhYmVsIiwidGV4dCIsInZhbHVlIiwibmFtZSIsImN1cnJlbnQgcGF0aCIsInBlcmNlbnQgcm9vdCIsInBlcmNlbnQgZW50cnkiLCJwZXJjZW50IHBhcmVudCJdLGRmbHQ6ImxhYmVsK3RleHQrdmFsdWUrbmFtZSJ9KSxob3ZlcnRlbXBsYXRlOmkoe30se2tleXM6Yy5ldmVudERhdGFLZXlzfSksdGV4dGZvbnQ6bC50ZXh0Zm9udCxpbnNpZGV0ZXh0b3JpZW50YXRpb246bC5pbnNpZGV0ZXh0b3JpZW50YXRpb24saW5zaWRldGV4dGZvbnQ6bC5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxsLm91dHNpZGV0ZXh0Zm9udCx7fSkscm90YXRpb246e3ZhbFR5cGU6ImFuZ2xlIixkZmx0OjAsZWRpdFR5cGU6InBsb3QifSxzb3J0Omwuc29ydCxyb290Ontjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJjYWxjIixkZmx0OiJyZ2JhKDAsMCwwLDApIn0sZWRpdFR5cGU6ImNhbGMifSxkb21haW46cyh7bmFtZToic3VuYnVyc3QiLHRyYWNlOiEwLGVkaXRUeXBlOiJjYWxjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiOjgyMywiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4vY29uc3RhbnRzIjoxMzA2fV0sMTMwNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0ic3VuYnVyc3QiLHIucGxvdD1mdW5jdGlvbih0LGUsaSxhKXtuLnBsb3RCYXNlUGxvdChyLm5hbWUsdCxlLGksYSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLGksYSl7bi5jbGVhbkJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX19LHsiLi4vLi4vcGxvdHMvcGxvdHMiOjg5MH1dLDEzMDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiZDMtaGllcmFyY2h5IiksaT10KCJmYXN0LWlzbnVtZXJpYyIpLGE9dCgiLi4vLi4vbGliIiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5tYWtlQ29sb3JTY2FsZUZ1bmNGcm9tVHJhY2Uscz10KCIuLi9waWUvY2FsYyIpLm1ha2VQdWxsQ29sb3JGbixsPXQoIi4uL3BpZS9jYWxjIikuZ2VuZXJhdGVFeHRlbmRlZENvbG9ycyxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLmNhbGMsdT10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQUxNT1NUX0VRVUFMLGY9e30saD17fSxwPXt9O3IuY2FsYz1mdW5jdGlvbih0LGUpe3ZhciByLGwsZixoLHAsZCxtPXQuX2Z1bGxMYXlvdXQsZz1lLmlkcyx2PWEuaXNBcnJheU9yVHlwZWRBcnJheShnKSx5PWUubGFiZWxzLHg9ZS5wYXJlbnRzLGI9ZS52YWx1ZXMsXz1hLmlzQXJyYXlPclR5cGVkQXJyYXkoYiksdz1bXSxUPXt9LGs9e30sQT1mdW5jdGlvbih0KXtyZXR1cm4gdHx8Im51bWJlciI9PXR5cGVvZiB0fSxNPWZ1bmN0aW9uKHQpe3JldHVybiFffHxpKGJbdF0pJiZiW3RdPj0wfTt2PyhyPU1hdGgubWluKGcubGVuZ3RoLHgubGVuZ3RoKSxsPWZ1bmN0aW9uKHQpe3JldHVybiBBKGdbdF0pJiZNKHQpfSxmPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcoZ1t0XSl9KToocj1NYXRoLm1pbih5Lmxlbmd0aCx4Lmxlbmd0aCksbD1mdW5jdGlvbih0KXtyZXR1cm4gQSh5W3RdKSYmTSh0KX0sZj1mdW5jdGlvbih0KXtyZXR1cm4gU3RyaW5nKHlbdF0pfSksXyYmKHI9TWF0aC5taW4ocixiLmxlbmd0aCkpO2Zvcih2YXIgUz0wO1M8cjtTKyspaWYobChTKSl7dmFyIEU9ZihTKSxMPUEoeFtTXSk/U3RyaW5nKHhbU10pOiIiLEM9e2k6UyxpZDpFLHBpZDpMLGxhYmVsOkEoeVtTXSk/U3RyaW5nKHlbU10pOiIifTtfJiYoQy52PStiW1NdKSx3LnB1c2goQykscD1FLFRbaD1MXT9UW2hdLnB1c2gocCk6VFtoXT1bcF0sa1twXT0xfWlmKFRbIiJdKXtpZihUWyIiXS5sZW5ndGg+MSl7Zm9yKHZhciBQPWEucmFuZHN0cigpLEk9MDtJPHcubGVuZ3RoO0krKykiIj09PXdbSV0ucGlkJiYod1tJXS5waWQ9UCk7dy51bnNoaWZ0KHtoYXNNdWx0aXBsZVJvb3RzOiEwLGlkOlAscGlkOiIiLGxhYmVsOiIifSl9fWVsc2V7dmFyIE8sej1bXTtmb3IoTyBpbiBUKWtbT118fHoucHVzaChPKTtpZigxIT09ei5sZW5ndGgpcmV0dXJuIGEud2FybihbIk11bHRpcGxlIGltcGxpZWQgcm9vdHMsIGNhbm5vdCBidWlsZCIsZS50eXBlLCJoaWVyYXJjaHkgb2YiLGUubmFtZSsiLiIsIlRoZXNlIHJvb3RzIGluY2x1ZGU6Iix6LmpvaW4oIiwgIildLmpvaW4oIiAiKSk7Tz16WzBdLHcudW5zaGlmdCh7aGFzSW1wbGllZFJvb3Q6ITAsaWQ6TyxwaWQ6IiIsbGFiZWw6T30pfXRyeXtkPW4uc3RyYXRpZnkoKS5pZCgoZnVuY3Rpb24odCl7cmV0dXJuIHQuaWR9KSkucGFyZW50SWQoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpZH0pKSh3KX1jYXRjaCh0KXtyZXR1cm4gYS53YXJuKFsiRmFpbGVkIHRvIGJ1aWxkIixlLnR5cGUsImhpZXJhcmNoeSBvZiIsZS5uYW1lKyIuIiwiRXJyb3I6Iix0Lm1lc3NhZ2VdLmpvaW4oIiAiKSl9dmFyIEQ9bi5oaWVyYXJjaHkoZCksUj0hMTtpZihfKXN3aXRjaChlLmJyYW5jaHZhbHVlcyl7Y2FzZSJyZW1haW5kZXIiOkQuc3VtKChmdW5jdGlvbih0KXtyZXR1cm4gdC5kYXRhLnZ9KSk7YnJlYWs7Y2FzZSJ0b3RhbCI6RC5lYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmRhdGEuZGF0YSxuPXIudjtpZih0LmNoaWxkcmVuKXt2YXIgaT10LmNoaWxkcmVuLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtlLmRhdGEuZGF0YS52fSksMCk7aWYoKHIuaGFzSW1wbGllZFJvb3R8fHIuaGFzTXVsdGlwbGVSb290cykmJihuPWkpLG48aSp1KXJldHVybiBSPSEwLGEud2FybihbIlRvdGFsIHZhbHVlIGZvciBub2RlIix0LmRhdGEuZGF0YS5pZCwib2YiLGUubmFtZSwiaXMgc21hbGxlciB0aGFuIHRoZSBzdW0gb2YgaXRzIGNoaWxkcmVuLiIsIlxucGFyZW50IHZhbHVlID0iLG4sIlxuY2hpbGRyZW4gc3VtID0iLGldLmpvaW4oIiAiKSl9dC52YWx1ZT1ufSkpfWVsc2UhZnVuY3Rpb24gdChlLHIsbil7dmFyIGk9MCxhPWUuY2hpbGRyZW47aWYoYSl7Zm9yKHZhciBvPWEubGVuZ3RoLHM9MDtzPG87cysrKWkrPXQoYVtzXSxyLG4pO24uYnJhbmNoZXMmJmkrK31lbHNlIG4ubGVhdmVzJiZpKys7ZS52YWx1ZT1lLmRhdGEuZGF0YS52YWx1ZT1pLHIuX3ZhbHVlc3x8KHIuX3ZhbHVlcz1bXSk7cmV0dXJuIHIuX3ZhbHVlc1tlLmRhdGEuZGF0YS5pXT1pLGl9KEQsZSx7YnJhbmNoZXM6LTEhPT1lLmNvdW50LmluZGV4T2YoImJyYW5jaGVzIiksbGVhdmVzOi0xIT09ZS5jb3VudC5pbmRleE9mKCJsZWF2ZXMiKX0pO2lmKCFSKXt2YXIgRixCO2Uuc29ydCYmRC5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiBlLnZhbHVlLXQudmFsdWV9KSk7dmFyIE49ZS5tYXJrZXIuY29sb3JzfHxbXSxqPSEhTi5sZW5ndGg7cmV0dXJuIGUuX2hhc0NvbG9yc2NhbGU/KGp8fChOPV8/ZS52YWx1ZXM6ZS5fdmFsdWVzKSxjKHQsZSx7dmFsczpOLGNvbnRhaW5lclN0cjoibWFya2VyIixjTGV0dGVyOiJjIn0pLEI9byhlLm1hcmtlcikpOkY9cyhtWyJfIitlLnR5cGUrImNvbG9ybWFwIl0pLEQuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhLmRhdGE7ci5jb2xvcj1lLl9oYXNDb2xvcnNjYWxlP0IoTltyLmldKTpGKE5bci5pXSxyLmlkKX0pKSx3WzBdLmhpZXJhcmNoeT1ELHd9fSxyLl9ydW5Dcm9zc1RyYWNlQ2FsYz1mdW5jdGlvbih0LGUpe3ZhciByPWUuX2Z1bGxMYXlvdXQsbj1lLmNhbGNkYXRhLGk9clt0KyJjb2xvcndheSJdLGE9clsiXyIrdCsiY29sb3JtYXAiXTtyWyJleHRlbmQiK3QrImNvbG9ycyJdJiYoaT1sKGksImljaWNsZSI9PT10P3A6InRyZWVtYXAiPT09dD9oOmYpKTt2YXIgbyxzPTA7ZnVuY3Rpb24gYyh0KXt2YXIgZT10LmRhdGEuZGF0YSxyPWUuaWQ7ITE9PT1lLmNvbG9yJiYoYVtyXT9lLmNvbG9yPWFbcl06dC5wYXJlbnQ/dC5wYXJlbnQucGFyZW50P2UuY29sb3I9dC5wYXJlbnQuZGF0YS5kYXRhLmNvbG9yOihhW3JdPWUuY29sb3I9aVtzJWkubGVuZ3RoXSxzKyspOmUuY29sb3I9byl9Zm9yKHZhciB1PTA7dTxuLmxlbmd0aDt1Kyspe3ZhciBkPW5bdV1bMF07ZC50cmFjZS50eXBlPT09dCYmZC5oaWVyYXJjaHkmJihvPWQudHJhY2Uucm9vdC5jb2xvcixkLmhpZXJhcmNoeS5lYWNoKGMpKX19LHIuY3Jvc3NUcmFjZUNhbGM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuX3J1bkNyb3NzVHJhY2VDYWxjKCJzdW5idXJzdCIsdCl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9waWUvY2FsYyI6MTE2NywiZDMtaGllcmFyY2h5IjoxNjMsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMzA2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoibGluZWFyIixldmVudERhdGFLZXlzOlsiY3VycmVudFBhdGgiLCJyb290IiwiZW50cnkiLCJwZXJjZW50Um9vdCIsInBlcmNlbnRFbnRyeSIsInBlcmNlbnRQYXJlbnQiXX19LHt9XSwxMzA3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxvPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQscz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKSxsPXMuaGFzQ29sb3JzY2FsZSxjPXMuaGFuZGxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIHUocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX12YXIgZj11KCJsYWJlbHMiKSxoPXUoInBhcmVudHMiKTtpZihmJiZmLmxlbmd0aCYmaCYmaC5sZW5ndGgpe3ZhciBwPXUoInZhbHVlcyIpO3AmJnAubGVuZ3RoP3UoImJyYW5jaHZhbHVlcyIpOnUoImNvdW50IiksdSgibGV2ZWwiKSx1KCJtYXhkZXB0aCIpLHUoIm1hcmtlci5saW5lLndpZHRoIikmJnUoIm1hcmtlci5saW5lLmNvbG9yIixzLnBhcGVyX2JnY29sb3IpLHUoIm1hcmtlci5jb2xvcnMiKTt2YXIgZD1lLl9oYXNDb2xvcnNjYWxlPWwodCwibWFya2VyIiwiY29sb3JzIil8fCh0Lm1hcmtlcnx8e30pLmNvbG9yYXhpcztkJiZjKHQsZSxzLHUse3ByZWZpeDoibWFya2VyLiIsY0xldHRlcjoiYyJ9KSx1KCJsZWFmLm9wYWNpdHkiLGQ/MTouNyk7dmFyIG09dSgidGV4dCIpO3UoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHx1KCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShtKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksdSgiaG92ZXJ0ZXh0IiksdSgiaG92ZXJ0ZW1wbGF0ZSIpO28odCxlLHMsdSwiYXV0byIse21vZHVsZUhhc1NlbGVjdGVkOiExLG1vZHVsZUhhc1Vuc2VsZWN0ZWQ6ITEsbW9kdWxlSGFzQ29uc3RyYWluOiExLG1vZHVsZUhhc0NsaXBvbmF4aXM6ITEsbW9kdWxlSGFzVGV4dGFuZ2xlOiExLG1vZHVsZUhhc0luc2lkZWFuY2hvcjohMX0pLHUoImluc2lkZXRleHRvcmllbnRhdGlvbiIpLHUoInNvcnQiKSx1KCJyb3RhdGlvbiIpLHUoInJvb3QuY29sb3IiKSxhKGUscyx1KSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlIjo2NTEsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vYmFyL2RlZmF1bHRzIjo5MTgsIi4vYXR0cmlidXRlcyI6MTMwM31dLDEzMDg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vcmVnaXN0cnkiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyIpLmFwcGVuZEFycmF5UG9pbnRWYWx1ZSxvPXQoIi4uLy4uL2NvbXBvbmVudHMvZngiKSxzPXQoIi4uLy4uL2xpYiIpLGw9dCgiLi4vLi4vbGliL2V2ZW50cyIpLGM9dCgiLi9oZWxwZXJzIiksdT10KCIuLi9waWUvaGVscGVycyIpLmZvcm1hdFBpZVZhbHVlO2Z1bmN0aW9uIGYodCxlLHIpe2Zvcih2YXIgbj10LmRhdGEuZGF0YSxpPXtjdXJ2ZU51bWJlcjplLmluZGV4LHBvaW50TnVtYmVyOm4uaSxkYXRhOmUuX2lucHV0LGZ1bGxEYXRhOmV9LG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIHM9cltvXTtzIGluIHQmJihpW3NdPXRbc10pfXJldHVybiJwYXJlbnRTdHJpbmciaW4gdCYmIWMuaXNIaWVyYXJjaHlSb290KHQpJiYoaS5wYXJlbnQ9dC5wYXJlbnRTdHJpbmcpLGEoaSxlLG4uaSksaX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSxoKXt2YXIgcD1hWzBdLGQ9cC50cmFjZSxtPXAuaGllcmFyY2h5LGc9InN1bmJ1cnN0Ij09PWQudHlwZSx2PSJ0cmVlbWFwIj09PWQudHlwZXx8ImljaWNsZSI9PT1kLnR5cGU7Il9oYXNIb3ZlckxhYmVsImluIGR8fChkLl9oYXNIb3ZlckxhYmVsPSExKSwiX2hhc0hvdmVyRXZlbnQiaW4gZHx8KGQuX2hhc0hvdmVyRXZlbnQ9ITEpO3Qub24oIm1vdXNlb3ZlciIsKGZ1bmN0aW9uKGkpe3ZhciBhPXIuX2Z1bGxMYXlvdXQ7aWYoIXIuX2RyYWdnaW5nJiYhMSE9PWEuaG92ZXJtb2RlKXt2YXIgbCx5PXIuX2Z1bGxEYXRhW2QuaW5kZXhdLHg9aS5kYXRhLmRhdGEsYj14LmksXz1jLmlzSGllcmFyY2h5Um9vdChpKSx3PWMuZ2V0UGFyZW50KG0saSksVD1jLmdldFZhbHVlKGkpLGs9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FzdE9wdGlvbih5LGIsdCl9LEE9aygiaG92ZXJ0ZW1wbGF0ZSIpLE09by5jYXN0SG92ZXJpbmZvKHksYSxiKSxTPWEuc2VwYXJhdG9ycztpZihBfHxNJiYibm9uZSIhPT1NJiYic2tpcCIhPT1NKXt2YXIgRSxMO2cmJihFPXAuY3graS5weG1pZFswXSooMS1pLnJJbnNjcmliZWQpLEw9cC5jeStpLnB4bWlkWzFdKigxLWkuckluc2NyaWJlZCkpLHYmJihFPWkuX2hvdmVyWCxMPWkuX2hvdmVyWSk7dmFyIEMsUD17fSxJPVtdLE89W10sej1mdW5jdGlvbih0KXtyZXR1cm4tMSE9PUkuaW5kZXhPZih0KX07TSYmKEk9ImFsbCI9PT1NP3kuX21vZHVsZS5hdHRyaWJ1dGVzLmhvdmVyaW5mby5mbGFnczpNLnNwbGl0KCIrIikpLFAubGFiZWw9eC5sYWJlbCx6KCJsYWJlbCIpJiZQLmxhYmVsJiZPLnB1c2goUC5sYWJlbCkseC5oYXNPd25Qcm9wZXJ0eSgidiIpJiYoUC52YWx1ZT14LnYsUC52YWx1ZUxhYmVsPXUoUC52YWx1ZSxTKSx6KCJ2YWx1ZSIpJiZPLnB1c2goUC52YWx1ZUxhYmVsKSksUC5jdXJyZW50UGF0aD1pLmN1cnJlbnRQYXRoPWMuZ2V0UGF0aChpLmRhdGEpLHooImN1cnJlbnQgcGF0aCIpJiYhXyYmTy5wdXNoKFAuY3VycmVudFBhdGgpO3ZhciBEPVtdLFI9ZnVuY3Rpb24oKXstMT09PUQuaW5kZXhPZihDKSYmKE8ucHVzaChDKSxELnB1c2goQykpfTtQLnBlcmNlbnRQYXJlbnQ9aS5wZXJjZW50UGFyZW50PVQvYy5nZXRWYWx1ZSh3KSxQLnBhcmVudD1pLnBhcmVudFN0cmluZz1jLmdldFB0TGFiZWwodykseigicGVyY2VudCBwYXJlbnQiKSYmKEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudFBhcmVudCxTKSsiIG9mICIrUC5wYXJlbnQsUigpKSxQLnBlcmNlbnRFbnRyeT1pLnBlcmNlbnRFbnRyeT1UL2MuZ2V0VmFsdWUoZSksUC5lbnRyeT1pLmVudHJ5PWMuZ2V0UHRMYWJlbChlKSwheigicGVyY2VudCBlbnRyeSIpfHxffHxpLm9uUGF0aGJhcnx8KEM9Yy5mb3JtYXRQZXJjZW50KFAucGVyY2VudEVudHJ5LFMpKyIgb2YgIitQLmVudHJ5LFIoKSksUC5wZXJjZW50Um9vdD1pLnBlcmNlbnRSb290PVQvYy5nZXRWYWx1ZShtKSxQLnJvb3Q9aS5yb290PWMuZ2V0UHRMYWJlbChtKSx6KCJwZXJjZW50IHJvb3QiKSYmIV8mJihDPWMuZm9ybWF0UGVyY2VudChQLnBlcmNlbnRSb290LFMpKyIgb2YgIitQLnJvb3QsUigpKSxQLnRleHQ9aygiaG92ZXJ0ZXh0Iil8fGsoInRleHQiKSx6KCJ0ZXh0IikmJihDPVAudGV4dCxzLmlzVmFsaWRUZXh0VmFsdWUoQykmJk8ucHVzaChDKSksbD1bZihpLHksaC5ldmVudERhdGFLZXlzKV07dmFyIEY9e3RyYWNlOnkseTpMLF94MDppLl94MCxfeDE6aS5feDEsX3kwOmkuX3kwLF95MTppLl95MSx0ZXh0Ok8uam9pbigiPGJyPiIpLG5hbWU6QXx8eigibmFtZSIpP3kubmFtZTp2b2lkIDAsY29sb3I6aygiaG92ZXJsYWJlbC5iZ2NvbG9yIil8fHguY29sb3IsYm9yZGVyQ29sb3I6aygiaG92ZXJsYWJlbC5ib3JkZXJjb2xvciIpLGZvbnRGYW1pbHk6aygiaG92ZXJsYWJlbC5mb250LmZhbWlseSIpLGZvbnRTaXplOmsoImhvdmVybGFiZWwuZm9udC5zaXplIiksZm9udENvbG9yOmsoImhvdmVybGFiZWwuZm9udC5jb2xvciIpLG5hbWVMZW5ndGg6aygiaG92ZXJsYWJlbC5uYW1lbGVuZ3RoIiksdGV4dEFsaWduOmsoImhvdmVybGFiZWwuYWxpZ24iKSxob3ZlcnRlbXBsYXRlOkEsaG92ZXJ0ZW1wbGF0ZUxhYmVsczpQLGV2ZW50RGF0YTpsfTtnJiYoRi54MD1FLWkuckluc2NyaWJlZCppLnJweDEsRi54MT1FK2kuckluc2NyaWJlZCppLnJweDEsRi5pZGVhbEFsaWduPWkucHhtaWRbMF08MD8ibGVmdCI6InJpZ2h0IiksdiYmKEYueD1FLEYuaWRlYWxBbGlnbj1FPDA/ImxlZnQiOiJyaWdodCIpO3ZhciBCPVtdO28ubG9uZUhvdmVyKEYse2NvbnRhaW5lcjphLl9ob3ZlcmxheWVyLm5vZGUoKSxvdXRlckNvbnRhaW5lcjphLl9wYXBlci5ub2RlKCksZ2Q6cixpbk91dF9iYm94OkJ9KSxsWzBdLmJib3g9QlswXSxkLl9oYXNIb3ZlckxhYmVsPSEwfWlmKHYpe3ZhciBOPXQuc2VsZWN0KCJwYXRoLnN1cmZhY2UiKTtoLnN0eWxlT25lKE4saSx5LHtob3ZlcmVkOiEwfSl9ZC5faGFzSG92ZXJFdmVudD0hMCxyLmVtaXQoInBsb3RseV9ob3ZlciIse3BvaW50czpsfHxbZihpLHksaC5ldmVudERhdGFLZXlzKV0sZXZlbnQ6bi5ldmVudH0pfX0pKSx0Lm9uKCJtb3VzZW91dCIsKGZ1bmN0aW9uKGUpe3ZhciBpPXIuX2Z1bGxMYXlvdXQsYT1yLl9mdWxsRGF0YVtkLmluZGV4XSxzPW4uc2VsZWN0KHRoaXMpLmRhdHVtKCk7aWYoZC5faGFzSG92ZXJFdmVudCYmKGUub3JpZ2luYWxFdmVudD1uLmV2ZW50LHIuZW1pdCgicGxvdGx5X3VuaG92ZXIiLHtwb2ludHM6W2YocyxhLGguZXZlbnREYXRhS2V5cyldLGV2ZW50Om4uZXZlbnR9KSxkLl9oYXNIb3ZlckV2ZW50PSExKSxkLl9oYXNIb3ZlckxhYmVsJiYoby5sb25lVW5ob3ZlcihpLl9ob3ZlcmxheWVyLm5vZGUoKSksZC5faGFzSG92ZXJMYWJlbD0hMSksdil7dmFyIGw9dC5zZWxlY3QoInBhdGguc3VyZmFjZSIpO2guc3R5bGVPbmUobCxzLGEse2hvdmVyZWQ6ITF9KX19KSksdC5vbigiY2xpY2siLChmdW5jdGlvbih0KXt2YXIgZT1yLl9mdWxsTGF5b3V0LGE9ci5fZnVsbERhdGFbZC5pbmRleF0scz1nJiYoYy5pc0hpZXJhcmNoeVJvb3QodCl8fGMuaXNMZWFmKHQpKSx1PWMuZ2V0UHRJZCh0KSxwPWMuaXNFbnRyeSh0KT9jLmZpbmRFbnRyeVdpdGhDaGlsZChtLHUpOmMuZmluZEVudHJ5V2l0aExldmVsKG0sdSksdj1jLmdldFB0SWQocCkseT17cG9pbnRzOltmKHQsYSxoLmV2ZW50RGF0YUtleXMpXSxldmVudDpuLmV2ZW50fTtzfHwoeS5uZXh0TGV2ZWw9dik7dmFyIHg9bC50cmlnZ2VySGFuZGxlcihyLCJwbG90bHlfIitkLnR5cGUrImNsaWNrIix5KTtpZighMSE9PXgmJmUuaG92ZXJtb2RlJiYoci5faG92ZXJkYXRhPVtmKHQsYSxoLmV2ZW50RGF0YUtleXMpXSxvLmNsaWNrKHIsbi5ldmVudCkpLCFzJiYhMSE9PXgmJiFyLl9kcmFnZ2luZyYmIXIuX3RyYW5zaXRpb25pbmcpe2kuY2FsbCgiX3N0b3JlRGlyZWN0R1VJRWRpdCIsYSxlLl90cmFjZVByZUdVSVthLnVpZF0se2xldmVsOmEubGV2ZWx9KTt2YXIgYj17ZGF0YTpbe2xldmVsOnZ9XSx0cmFjZXM6W2QuaW5kZXhdfSxfPXtmcmFtZTp7cmVkcmF3OiExLGR1cmF0aW9uOmgudHJhbnNpdGlvblRpbWV9LHRyYW5zaXRpb246e2R1cmF0aW9uOmgudHJhbnNpdGlvblRpbWUsZWFzaW5nOmgudHJhbnNpdGlvbkVhc2luZ30sbW9kZToiaW1tZWRpYXRlIixmcm9tY3VycmVudDohMH07by5sb25lVW5ob3ZlcihlLl9ob3ZlcmxheWVyLm5vZGUoKSksaS5jYWxsKCJhbmltYXRlIixyLGIsXyl9fSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2Z4Ijo2NzksIi4uLy4uL2NvbXBvbmVudHMvZngvaGVscGVycyI6Njc1LCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL2V2ZW50cyI6NzY1LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuLi9waWUvaGVscGVycyI6MTE3MCwiLi9oZWxwZXJzIjoxMzA5LCJAcGxvdGx5L2QzIjo1OH1dLDEzMDk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIvc2V0Y3Vyc29yIiksbz10KCIuLi9waWUvaGVscGVycyIpO2Z1bmN0aW9uIHModCl7cmV0dXJuIHQuZGF0YS5kYXRhLnBpZH1yLmZpbmRFbnRyeVdpdGhMZXZlbD1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiBlJiZ0LmVhY2hBZnRlcigoZnVuY3Rpb24odCl7aWYoci5nZXRQdElkKHQpPT09ZSlyZXR1cm4gbj10LmNvcHkoKX0pKSxufHx0fSxyLmZpbmRFbnRyeVdpdGhDaGlsZD1mdW5jdGlvbih0LGUpe3ZhciBuO3JldHVybiB0LmVhY2hBZnRlcigoZnVuY3Rpb24odCl7Zm9yKHZhciBpPXQuY2hpbGRyZW58fFtdLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIG89aVthXTtpZihyLmdldFB0SWQobyk9PT1lKXJldHVybiBuPXQuY29weSgpfX0pKSxufHx0fSxyLmlzRW50cnk9ZnVuY3Rpb24odCl7cmV0dXJuIXQucGFyZW50fSxyLmlzTGVhZj1mdW5jdGlvbih0KXtyZXR1cm4hdC5jaGlsZHJlbn0sci5nZXRQdElkPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGF0YS5pZH0sci5nZXRQdExhYmVsPWZ1bmN0aW9uKHQpe3JldHVybiB0LmRhdGEuZGF0YS5sYWJlbH0sci5nZXRWYWx1ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC52YWx1ZX0sci5pc0hpZXJhcmNoeVJvb3Q9ZnVuY3Rpb24odCl7cmV0dXJuIiI9PT1zKHQpfSxyLnNldFNsaWNlQ3Vyc29yPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT1uLmlzVHJhbnNpdGlvbmluZztpZighaSl7dmFyIG89dC5kYXR1bSgpO2k9bi5oaWRlT25Sb290JiZyLmlzSGllcmFyY2h5Um9vdChvKXx8bi5oaWRlT25MZWF2ZXMmJnIuaXNMZWFmKG8pfWEodCxpP251bGw6InBvaW50ZXIiKX0sci5nZXRJbnNpZGVUZXh0Rm9udEtleT1mdW5jdGlvbih0LGUscixpLGEpe3ZhciBvPShhfHx7fSkub25QYXRoYmFyPyJwYXRoYmFyLnRleHRmb250IjoiaW5zaWRldGV4dGZvbnQiLHM9ci5kYXRhLmRhdGEuaTtyZXR1cm4gbi5jYXN0T3B0aW9uKGUscyxvKyIuIit0KXx8bi5jYXN0T3B0aW9uKGUscywidGV4dGZvbnQuIit0KXx8aS5zaXplfSxyLmdldE91dHNpZGVUZXh0Rm9udEtleT1mdW5jdGlvbih0LGUscixpKXt2YXIgYT1yLmRhdGEuZGF0YS5pO3JldHVybiBuLmNhc3RPcHRpb24oZSxhLCJvdXRzaWRldGV4dGZvbnQuIit0KXx8bi5jYXN0T3B0aW9uKGUsYSwidGV4dGZvbnQuIit0KXx8aS5zaXplfSxyLmlzT3V0c2lkZVRleHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4hdC5faGFzQ29sb3JzY2FsZSYmci5pc0hpZXJhcmNoeVJvb3QoZSl9LHIuZGV0ZXJtaW5lVGV4dEZvbnQ9ZnVuY3Rpb24odCxlLGEsbyl7cmV0dXJuIHIuaXNPdXRzaWRlVGV4dCh0LGUpP2Z1bmN0aW9uKHQsZSxuKXtyZXR1cm57Y29sb3I6ci5nZXRPdXRzaWRlVGV4dEZvbnRLZXkoImNvbG9yIix0LGUsbiksZmFtaWx5OnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJmYW1pbHkiLHQsZSxuKSxzaXplOnIuZ2V0T3V0c2lkZVRleHRGb250S2V5KCJzaXplIix0LGUsbil9fSh0LGUsYSk6ZnVuY3Rpb24odCxlLGEsbyl7dmFyIHM9KG98fHt9KS5vblBhdGhiYXIsbD1lLmRhdGEuZGF0YSxjPWwuaSx1PW4uY2FzdE9wdGlvbih0LGMsKHM/InBhdGhiYXIudGV4dGZvbnQiOiJpbnNpZGV0ZXh0Zm9udCIpKyIuY29sb3IiKTtyZXR1cm4hdSYmdC5faW5wdXQudGV4dGZvbnQmJih1PW4uY2FzdE9wdGlvbih0Ll9pbnB1dCxjLCJ0ZXh0Zm9udC5jb2xvciIpKSx7Y29sb3I6dXx8aS5jb250cmFzdChsLmNvbG9yKSxmYW1pbHk6ci5nZXRJbnNpZGVUZXh0Rm9udEtleSgiZmFtaWx5Iix0LGUsYSxvKSxzaXplOnIuZ2V0SW5zaWRlVGV4dEZvbnRLZXkoInNpemUiLHQsZSxhLG8pfX0odCxlLGEsbyl9LHIuaGFzVHJhbnNpdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4hISh0JiZ0LmR1cmF0aW9uPjApfSxyLmdldE1heERlcHRoPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm1heGRlcHRoPj0wP3QubWF4ZGVwdGg6MS8wfSxyLmlzSGVhZGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIShyLmlzTGVhZih0KXx8dC5kZXB0aD09PWUuX21heERlcHRoLTEpfSxyLmdldFBhcmVudD1mdW5jdGlvbih0LGUpe3JldHVybiByLmZpbmRFbnRyeVdpdGhMZXZlbCh0LHMoZSkpfSxyLmxpc3RQYXRoPWZ1bmN0aW9uKHQsZSl7dmFyIG49dC5wYXJlbnQ7aWYoIW4pcmV0dXJuW107dmFyIGk9ZT9bbi5kYXRhW2VdXTpbbl07cmV0dXJuIHIubGlzdFBhdGgobixlKS5jb25jYXQoaSl9LHIuZ2V0UGF0aD1mdW5jdGlvbih0KXtyZXR1cm4gci5saXN0UGF0aCh0LCJsYWJlbCIpLmpvaW4oIi8iKSsiLyJ9LHIuZm9ybWF0VmFsdWU9by5mb3JtYXRQaWVWYWx1ZSxyLmZvcm1hdFBlcmNlbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uLmZvcm1hdFBlcmNlbnQodCwwKTtyZXR1cm4iMCUiPT09ciYmKHI9by5mb3JtYXRQaWVQZXJjZW50KHQsZSkpLHJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zZXRjdXJzb3IiOjc5NywiLi4vcGllL2hlbHBlcnMiOjExNzB9XSwxMzEwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17bW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InN1bmJ1cnN0IixiYXNlUGxvdE1vZHVsZTp0KCIuL2Jhc2VfcGxvdCIpLGNhdGVnb3JpZXM6W10sYW5pbWF0YWJsZTohMCxhdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLGxheW91dEF0dHJpYnV0ZXM6dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIikuY2FsYyxjcm9zc1RyYWNlQ2FsYzp0KCIuL2NhbGMiKS5jcm9zc1RyYWNlQ2FsYyxwbG90OnQoIi4vcGxvdCIpLnBsb3Qsc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGNvbG9yYmFyOnQoIi4uL3NjYXR0ZXIvbWFya2VyX2NvbG9yYmFyIiksbWV0YTp7fX19LHsiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiOjEyMDksIi4vYXR0cmlidXRlcyI6MTMwMywiLi9iYXNlX3Bsb3QiOjEzMDQsIi4vY2FsYyI6MTMwNSwiLi9kZWZhdWx0cyI6MTMwNywiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMxMSwiLi9sYXlvdXRfZGVmYXVsdHMiOjEzMTIsIi4vcGxvdCI6MTMxMywiLi9zdHlsZSI6MTMxNH1dLDEzMTE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtzdW5idXJzdGNvbG9yd2F5Ont2YWxUeXBlOiJjb2xvcmxpc3QiLGVkaXRUeXBlOiJjYWxjIn0sZXh0ZW5kc3VuYnVyc3Rjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzEyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJzdW5idXJzdGNvbG9yd2F5IixlLmNvbG9yd2F5KSxyKCJleHRlbmRzdW5idXJzdGNvbG9ycyIpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTMxMX1dLDEzMTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiZDMtaGllcmFyY2h5IiksYT10KCJkMy1pbnRlcnBvbGF0ZSIpLmludGVycG9sYXRlLG89dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIikscz10KCIuLi8uLi9saWIiKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLHU9Yy5yZWNvcmRNaW5UZXh0U2l6ZSxmPWMuY2xlYXJNaW5UZXh0U2l6ZSxoPXQoIi4uL3BpZS9wbG90IikscD10KCIuLi9waWUvaGVscGVycyIpLmdldFJvdGF0aW9uQW5nbGUsZD1oLmNvbXB1dGVUcmFuc2Zvcm0sbT1oLnRyYW5zZm9ybUluc2lkZVRleHQsZz10KCIuL3N0eWxlIikuc3R5bGVPbmUsdj10KCIuLi9iYXIvc3R5bGUiKS5yZXNpemVUZXh0LHk9dCgiLi9meCIpLHg9dCgiLi9jb25zdGFudHMiKSxiPXQoIi4vaGVscGVycyIpO2Z1bmN0aW9uIF8odCxlLGMsZil7dmFyIGg9dC5fZnVsbExheW91dCx2PSFoLnVuaWZvcm10ZXh0Lm1vZGUmJmIuaGFzVHJhbnNpdGlvbihmKSxfPW4uc2VsZWN0KGMpLnNlbGVjdEFsbCgiZy5zbGljZSIpLFQ9ZVswXSxrPVQudHJhY2UsQT1ULmhpZXJhcmNoeSxNPWIuZmluZEVudHJ5V2l0aExldmVsKEEsay5sZXZlbCksUz1iLmdldE1heERlcHRoKGspLEU9aC5fc2l6ZSxMPWsuZG9tYWluLEM9RS53KihMLnhbMV0tTC54WzBdKSxQPUUuaCooTC55WzFdLUwueVswXSksST0uNSpNYXRoLm1pbihDLFApLE89VC5jeD1FLmwrRS53KihMLnhbMV0rTC54WzBdKS8yLHo9VC5jeT1FLnQrRS5oKigxLUwueVswXSktUC8yO2lmKCFNKXJldHVybiBfLnJlbW92ZSgpO3ZhciBEPW51bGwsUj17fTt2JiZfLmVhY2goKGZ1bmN0aW9uKHQpe1JbYi5nZXRQdElkKHQpXT17cnB4MDp0LnJweDAscnB4MTp0LnJweDEseDA6dC54MCx4MTp0LngxLHRyYW5zZm9ybTp0LnRyYW5zZm9ybX0sIUQmJmIuaXNFbnRyeSh0KSYmKEQ9dCl9KSk7dmFyIEY9ZnVuY3Rpb24odCl7cmV0dXJuIGkucGFydGl0aW9uKCkuc2l6ZShbMipNYXRoLlBJLHQuaGVpZ2h0KzFdKSh0KX0oTSkuZGVzY2VuZGFudHMoKSxCPU0uaGVpZ2h0KzEsTj0wLGo9UztULmhhc011bHRpcGxlUm9vdHMmJmIuaXNIaWVyYXJjaHlSb290KE0pJiYoRj1GLnNsaWNlKDEpLEItPTEsTj0xLGorPTEpLEY9Ri5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnkxPD1qfSkpO3ZhciBVPXAoay5yb3RhdGlvbik7VSYmRi5mb3JFYWNoKChmdW5jdGlvbih0KXt0LngwKz1VLHQueDErPVV9KSk7dmFyIFY9TWF0aC5taW4oQixTKSxIPWZ1bmN0aW9uKHQpe3JldHVybih0LU4pL1YqSX0scT1mdW5jdGlvbih0LGUpe3JldHVyblt0Kk1hdGguY29zKGUpLC10Kk1hdGguc2luKGUpXX0sRz1mdW5jdGlvbih0KXtyZXR1cm4gcy5wYXRoQW5udWx1cyh0LnJweDAsdC5ycHgxLHQueDAsdC54MSxPLHopfSxZPWZ1bmN0aW9uKHQpe3JldHVybiBPK3codClbMF0qKHQudHJhbnNmb3JtLnJDZW50ZXJ8fDApKyh0LnRyYW5zZm9ybS54fHwwKX0sVz1mdW5jdGlvbih0KXtyZXR1cm4geit3KHQpWzFdKih0LnRyYW5zZm9ybS5yQ2VudGVyfHwwKSsodC50cmFuc2Zvcm0ueXx8MCl9OyhfPV8uZGF0YShGLGIuZ2V0UHRJZCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgic2xpY2UiLCEwKSx2P18uZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24odCl7dmFyIGUscj1iLmdldFB0SWQodCksbj1SW3JdLGk9UltiLmdldFB0SWQoTSldO2lmKGkpe3ZhciBvPSh0LngxPmkueDE/MipNYXRoLlBJOjApK1U7ZT10LnJweDE8aS5ycHgxP3t4MDp0LngwLHgxOnQueDEscnB4MDowLHJweDE6MH06e3gwOm8seDE6byxycHgwOnQucnB4MCxycHgxOnQucnB4MX19ZWxzZXt2YXIgcyxsPWIuZ2V0UHRJZCh0LnBhcmVudCk7Xy5lYWNoKChmdW5jdGlvbih0KXtpZihiLmdldFB0SWQodCk9PT1sKXJldHVybiBzPXR9KSk7dmFyIGMsdT1zLmNoaWxkcmVuO3UuZm9yRWFjaCgoZnVuY3Rpb24odCxlKXtpZihiLmdldFB0SWQodCk9PT1yKXJldHVybiBjPWV9KSk7dmFyIGY9dS5sZW5ndGgsaD1hKHMueDAscy54MSk7ZT17cnB4MDpJLHJweDE6SSx4MDpoKGMvZikseDE6aCgoYysxKS9mKX19cmV0dXJuIGEobixlKX0odCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBHKGUodCkpfX0pKSx0LnNlbGVjdCgiZy5zbGljZXRleHQiKS5hdHRyKCJvcGFjaXR5IiwwKX0pKS5yZW1vdmUoKTpfLmV4aXQoKS5yZW1vdmUoKSxfLm9yZGVyKCk7dmFyIFg9bnVsbDtpZih2JiZEKXt2YXIgWj1iLmdldFB0SWQoRCk7Xy5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09WCYmYi5nZXRQdElkKHQpPT09WiYmKFg9dC54MSl9KSl9dmFyIEo9XztmdW5jdGlvbiBLKHQpe3ZhciBlPXQucGFyZW50LHI9UltiLmdldFB0SWQoZSldLG49e307aWYocil7dmFyIGk9ZS5jaGlsZHJlbixvPWkuaW5kZXhPZih0KSxzPWkubGVuZ3RoLGw9YShyLngwLHIueDEpO24ueDA9bChvL3MpLG4ueDE9bChvL3MpfWVsc2Ugbi54MD1uLngxPTA7cmV0dXJuIG59diYmKEo9Si50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTtiLnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITAsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLEouZWFjaCgoZnVuY3Rpb24oaSl7dmFyIGM9bi5zZWxlY3QodGhpcyksZj1zLmVuc3VyZVNpbmdsZShjLCJwYXRoIiwic3VyZmFjZSIsKGZ1bmN0aW9uKHQpe3Quc3R5bGUoInBvaW50ZXItZXZlbnRzIiwiYWxsIil9KSk7aS5ycHgwPUgoaS55MCksaS5ycHgxPUgoaS55MSksaS54bWlkPShpLngwK2kueDEpLzIsaS5weG1pZD1xKGkucnB4MSxpLnhtaWQpLGkubWlkYW5nbGU9LShpLnhtaWQtTWF0aC5QSS8yKSxpLnN0YXJ0YW5nbGU9LShpLngwLU1hdGguUEkvMiksaS5zdG9wYW5nbGU9LShpLngxLU1hdGguUEkvMiksaS5oYWxmYW5nbGU9LjUqTWF0aC5taW4ocy5hbmdsZURlbHRhKGkueDAsaS54MSl8fE1hdGguUEksTWF0aC5QSSksaS5yaW5nPTEtaS5ycHgwL2kucnB4MSxpLnJJbnNjcmliZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10LnJweDAmJnMuaXNGdWxsQ2lyY2xlKFt0LngwLHQueDFdKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMS8oMSsxL01hdGguc2luKHQuaGFsZmFuZ2xlKSksdC5yaW5nLzIpKX0oaSksdj9mLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oImQiLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPVJbYi5nZXRQdElkKHQpXSxuPXt4MDp0LngwLHgxOnQueDEscnB4MDp0LnJweDAscnB4MTp0LnJweDF9O2lmKHIpZT1yO2Vsc2UgaWYoRClpZih0LnBhcmVudClpZihYKXt2YXIgaT0odC54MT5YPzIqTWF0aC5QSTowKStVO2U9e3gwOmkseDE6aX19ZWxzZSBlPXtycHgwOkkscnB4MTpJfSxzLmV4dGVuZEZsYXQoZSxLKHQpKTtlbHNlIGU9e3JweDA6MCxycHgxOjB9O2Vsc2UgZT17eDA6VSx4MTpVfTtyZXR1cm4gYShlLG4pfSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEcoZSh0KSl9fSkpOmYuYXR0cigiZCIsRyksYy5jYWxsKHksTSx0LGUse2V2ZW50RGF0YUtleXM6eC5ldmVudERhdGFLZXlzLHRyYW5zaXRpb25UaW1lOnguQ0xJQ0tfVFJBTlNJVElPTl9USU1FLHRyYW5zaXRpb25FYXNpbmc6eC5DTElDS19UUkFOU0lUSU9OX0VBU0lOR30pLmNhbGwoYi5zZXRTbGljZUN1cnNvcix0LHtoaWRlT25Sb290OiEwLGhpZGVPbkxlYXZlczohMCxpc1RyYW5zaXRpb25pbmc6dC5fdHJhbnNpdGlvbmluZ30pLGYuY2FsbChnLGksayk7dmFyIHA9cy5lbnN1cmVTaW5nbGUoYywiZyIsInNsaWNldGV4dCIpLF89cy5lbnN1cmVTaW5nbGUocCwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksdz1zLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LGIuZGV0ZXJtaW5lVGV4dEZvbnQoayxpLGguZm9udCkpO18udGV4dChyLmZvcm1hdFNsaWNlTGFiZWwoaSxNLGssZSxoKSkuY2xhc3NlZCgic2xpY2V0ZXh0IiwhMCkuYXR0cigidGV4dC1hbmNob3IiLCJtaWRkbGUiKS5jYWxsKG8uZm9udCx3KS5jYWxsKGwuY29udmVydFRvVHNwYW5zLHQpO3ZhciBBPW8uYkJveChfLm5vZGUoKSk7aS50cmFuc2Zvcm09bShBLGksVCksaS50cmFuc2Zvcm0udGFyZ2V0WD1ZKGkpLGkudHJhbnNmb3JtLnRhcmdldFk9VyhpKTt2YXIgUz1mdW5jdGlvbih0LGUpe3ZhciByPXQudHJhbnNmb3JtO3JldHVybiBkKHIsZSksci5mb250U2l6ZT13LnNpemUsdShrLnR5cGUscixoKSxzLmdldFRleHRUcmFuc2Zvcm0ocil9O3Y/Xy50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbih0KXt2YXIgZSxyPVJbYi5nZXRQdElkKHQpXSxuPXQudHJhbnNmb3JtO2lmKHIpZT1yO2Vsc2UgaWYoZT17cnB4MTp0LnJweDEsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6bi50ZXh0UG9zQW5nbGUsc2NhbGU6MCxyb3RhdGU6bi5yb3RhdGUsckNlbnRlcjpuLnJDZW50ZXIseDpuLngseTpuLnl9fSxEKWlmKHQucGFyZW50KWlmKFgpe3ZhciBpPXQueDE+WD8yKk1hdGguUEk6MDtlLngwPWUueDE9aX1lbHNlIHMuZXh0ZW5kRmxhdChlLEsodCkpO2Vsc2UgZS54MD1lLngxPVU7ZWxzZSBlLngwPWUueDE9VTt2YXIgbz1hKGUudHJhbnNmb3JtLnRleHRQb3NBbmdsZSx0LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUpLGw9YShlLnJweDEsdC5ycHgxKSxjPWEoZS54MCx0LngwKSxmPWEoZS54MSx0LngxKSxwPWEoZS50cmFuc2Zvcm0uc2NhbGUsbi5zY2FsZSksZD1hKGUudHJhbnNmb3JtLnJvdGF0ZSxuLnJvdGF0ZSksbT0wPT09bi5yQ2VudGVyPzM6MD09PWUudHJhbnNmb3JtLnJDZW50ZXI/MS8zOjEsZz1hKGUudHJhbnNmb3JtLnJDZW50ZXIsbi5yQ2VudGVyKTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9bCh0KSxyPWModCksaT1mKHQpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGcoTWF0aC5wb3codCxtKSl9KHQpLHM9e3B4bWlkOnEoZSwocitpKS8yKSxycHgxOmUsdHJhbnNmb3JtOnt0ZXh0UG9zQW5nbGU6byh0KSxyQ2VudGVyOmEseDpuLngseTpuLnl9fTtyZXR1cm4gdShrLnR5cGUsbixoKSx7dHJhbnNmb3JtOnt0YXJnZXRYOlkocyksdGFyZ2V0WTpXKHMpLHNjYWxlOnAodCkscm90YXRlOmQodCksckNlbnRlcjphfX19fSh0KTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIFMoZSh0KSxBKX19KSk6Xy5hdHRyKCJ0cmFuc2Zvcm0iLFMoaSxBKSl9KSl9ZnVuY3Rpb24gdyh0KXtyZXR1cm4gZT10LnJweDEscj10LnRyYW5zZm9ybS50ZXh0UG9zQW5nbGUsW2UqTWF0aC5zaW4ociksLWUqTWF0aC5jb3MocildO3ZhciBlLHJ9ci5wbG90PWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBhLG8scz10Ll9mdWxsTGF5b3V0LGw9cy5fc3VuYnVyc3RsYXllcixjPSFyLHU9IXMudW5pZm9ybXRleHQubW9kZSYmYi5oYXNUcmFuc2l0aW9uKHIpOyhmKCJzdW5idXJzdCIscyksKGE9bC5zZWxlY3RBbGwoImcudHJhY2Uuc3VuYnVyc3QiKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoInN1bmJ1cnN0IiwhMCkuYXR0cigic3Ryb2tlLWxpbmVqb2luIiwicm91bmQiKSxhLm9yZGVyKCksdSk/KGkmJihvPWkoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtvJiZvKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXtsLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe18odCxlLHRoaXMscil9KSl9KSkpOihhLmVhY2goKGZ1bmN0aW9uKGUpe18odCxlLHRoaXMscil9KSkscy51bmlmb3JtdGV4dC5tb2RlJiZ2KHQscy5fc3VuYnVyc3RsYXllci5zZWxlY3RBbGwoIi50cmFjZSIpLCJzdW5idXJzdCIpKTtjJiZhLmV4aXQoKS5yZW1vdmUoKX0sci5mb3JtYXRTbGljZUxhYmVsPWZ1bmN0aW9uKHQsZSxyLG4saSl7dmFyIGE9ci50ZXh0dGVtcGxhdGUsbz1yLnRleHRpbmZvO2lmKCEoYXx8byYmIm5vbmUiIT09bykpcmV0dXJuIiI7dmFyIGw9aS5zZXBhcmF0b3JzLGM9blswXSx1PXQuZGF0YS5kYXRhLGY9Yy5oaWVyYXJjaHksaD1iLmlzSGllcmFyY2h5Um9vdCh0KSxwPWIuZ2V0UGFyZW50KGYsdCksZD1iLmdldFZhbHVlKHQpO2lmKCFhKXt2YXIgbSxnPW8uc3BsaXQoIisiKSx2PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09Zy5pbmRleE9mKHQpfSx5PVtdO2lmKHYoImxhYmVsIikmJnUubGFiZWwmJnkucHVzaCh1LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJnYoInZhbHVlIikmJnkucHVzaChiLmZvcm1hdFZhbHVlKHUudixsKSksIWgpe3YoImN1cnJlbnQgcGF0aCIpJiZ5LnB1c2goYi5nZXRQYXRoKHQuZGF0YSkpO3ZhciB4PTA7digicGVyY2VudCBwYXJlbnQiKSYmeCsrLHYoInBlcmNlbnQgZW50cnkiKSYmeCsrLHYoInBlcmNlbnQgcm9vdCIpJiZ4Kys7dmFyIF89eD4xO2lmKHgpe3ZhciB3LFQ9ZnVuY3Rpb24odCl7bT1iLmZvcm1hdFBlcmNlbnQodyxsKSxfJiYobSs9IiBvZiAiK3QpLHkucHVzaChtKX07digicGVyY2VudCBwYXJlbnQiKSYmIWgmJih3PWQvYi5nZXRWYWx1ZShwKSxUKCJwYXJlbnQiKSksdigicGVyY2VudCBlbnRyeSIpJiYodz1kL2IuZ2V0VmFsdWUoZSksVCgiZW50cnkiKSksdigicGVyY2VudCByb290IikmJih3PWQvYi5nZXRWYWx1ZShmKSxUKCJyb290IikpfX1yZXR1cm4gdigidGV4dCIpJiYobT1zLmNhc3RPcHRpb24ocix1LmksInRleHQiKSxzLmlzVmFsaWRUZXh0VmFsdWUobSkmJnkucHVzaChtKSkseS5qb2luKCI8YnI+Iil9dmFyIGs9cy5jYXN0T3B0aW9uKHIsdS5pLCJ0ZXh0dGVtcGxhdGUiKTtpZighaylyZXR1cm4iIjt2YXIgQT17fTt1LmxhYmVsJiYoQS5sYWJlbD11LmxhYmVsKSx1Lmhhc093blByb3BlcnR5KCJ2IikmJihBLnZhbHVlPXUudixBLnZhbHVlTGFiZWw9Yi5mb3JtYXRWYWx1ZSh1LnYsbCkpLEEuY3VycmVudFBhdGg9Yi5nZXRQYXRoKHQuZGF0YSksaHx8KEEucGVyY2VudFBhcmVudD1kL2IuZ2V0VmFsdWUocCksQS5wZXJjZW50UGFyZW50TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudFBhcmVudCxsKSxBLnBhcmVudD1iLmdldFB0TGFiZWwocCkpLEEucGVyY2VudEVudHJ5PWQvYi5nZXRWYWx1ZShlKSxBLnBlcmNlbnRFbnRyeUxhYmVsPWIuZm9ybWF0UGVyY2VudChBLnBlcmNlbnRFbnRyeSxsKSxBLmVudHJ5PWIuZ2V0UHRMYWJlbChlKSxBLnBlcmNlbnRSb290PWQvYi5nZXRWYWx1ZShmKSxBLnBlcmNlbnRSb290TGFiZWw9Yi5mb3JtYXRQZXJjZW50KEEucGVyY2VudFJvb3QsbCksQS5yb290PWIuZ2V0UHRMYWJlbChmKSx1Lmhhc093blByb3BlcnR5KCJjb2xvciIpJiYoQS5jb2xvcj11LmNvbG9yKTt2YXIgTT1zLmNhc3RPcHRpb24ocix1LmksInRleHQiKTtyZXR1cm4ocy5pc1ZhbGlkVGV4dFZhbHVlKE0pfHwiIj09PU0pJiYoQS50ZXh0PU0pLEEuY3VzdG9tZGF0YT1zLmNhc3RPcHRpb24ocix1LmksImN1c3RvbWRhdGEiKSxzLnRleHR0ZW1wbGF0ZVN0cmluZyhrLEEsaS5fZDNsb2NhbGUsQSxyLl9tZXRhfHx7fSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIi4uL3BpZS9oZWxwZXJzIjoxMTcwLCIuLi9waWUvcGxvdCI6MTE3NCwiLi9jb25zdGFudHMiOjEzMDYsIi4vZngiOjEzMDgsIi4vaGVscGVycyI6MTMwOSwiLi9zdHlsZSI6MTMxNCwiQHBsb3RseS9kMyI6NTgsImQzLWhpZXJhcmNoeSI6MTYzLCJkMy1pbnRlcnBvbGF0ZSI6MTY0fV0sMTMxNDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIHModCxlLHIpe3ZhciBuPWUuZGF0YS5kYXRhLG89IWUuY2hpbGRyZW4scz1uLmksbD1hLmNhc3RPcHRpb24ocixzLCJtYXJrZXIubGluZS5jb2xvciIpfHxpLmRlZmF1bHRMaW5lLGM9YS5jYXN0T3B0aW9uKHIscywibWFya2VyLmxpbmUud2lkdGgiKXx8MDt0LnN0eWxlKCJzdHJva2Utd2lkdGgiLGMpLmNhbGwoaS5maWxsLG4uY29sb3IpLmNhbGwoaS5zdHJva2UsbCkuc3R5bGUoIm9wYWNpdHkiLG8/ci5sZWFmLm9wYWNpdHk6bnVsbCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll9zdW5idXJzdGxheWVyLnNlbGVjdEFsbCgiLnRyYWNlIik7byh0LGUsInN1bmJ1cnN0IiksZS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT1uLnNlbGVjdCh0aGlzKSxyPXRbMF0udHJhY2U7ZS5zdHlsZSgib3BhY2l0eSIsci5vcGFjaXR5KSxlLnNlbGVjdEFsbCgicGF0aC5zdXJmYWNlIikuZWFjaCgoZnVuY3Rpb24odCl7bi5zZWxlY3QodGhpcykuY2FsbChzLHQscil9KSl9KSl9LHN0eWxlT25lOnN9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliIjo3NzYsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiQHBsb3RseS9kMyI6NTh9XSwxMzE1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxvPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMscz10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbD10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxjPXQoIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiKS5vdmVycmlkZUFsbDtmdW5jdGlvbiB1KHQpe3JldHVybntzaG93Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxzdGFydDp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsZWRpdFR5cGU6InBsb3QifSxlbmQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDpudWxsLGVkaXRUeXBlOiJwbG90In0sc2l6ZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsbWluOjAsZWRpdFR5cGU6InBsb3QifSxwcm9qZWN0Ont4Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx5Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx6Ont2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixkZmx0Om4uZGVmYXVsdExpbmV9LHVzZWNvbG9ybWFwOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSx3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfSxoaWdobGlnaHQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITB9LGhpZ2hsaWdodGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsZGZsdDpuLmRlZmF1bHRMaW5lfSxoaWdobGlnaHR3aWR0aDp7dmFsVHlwZToibnVtYmVyIixtaW46MSxtYXg6MTYsZGZsdDoyfX19dmFyIGY9ZS5leHBvcnRzPWMobCh7ejp7dmFsVHlwZToiZGF0YV9hcnJheSJ9LHg6e3ZhbFR5cGU6ImRhdGFfYXJyYXkifSx5Ont2YWxUeXBlOiJkYXRhX2FycmF5In0sdGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGV4dDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGFycmF5T2s6ITB9LGhvdmVydGVtcGxhdGU6bygpLHhob3ZlcmZvcm1hdDphKCJ4IikseWhvdmVyZm9ybWF0OmEoInkiKSx6aG92ZXJmb3JtYXQ6YSgieiIpLGNvbm5lY3RnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sc3VyZmFjZWNvbG9yOnt2YWxUeXBlOiJkYXRhX2FycmF5In19LGkoIiIse2NvbG9yQXR0cjoieiBvciBzdXJmYWNlY29sb3IiLHNob3dTY2FsZURmbHQ6ITAsYXV0b0NvbG9yRGZsdDohMSxlZGl0VHlwZU92ZXJyaWRlOiJjYWxjIn0pLHtjb250b3Vyczp7eDp1KCkseTp1KCksejp1KCl9LGhpZGVzdXJmYWNlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExfSxsaWdodHBvc2l0aW9uOnt4Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDoxMH0seTp7dmFsVHlwZToibnVtYmVyIixtaW46LTFlNSxtYXg6MWU1LGRmbHQ6MWU0fSx6Ont2YWxUeXBlOiJudW1iZXIiLG1pbjotMWU1LG1heDoxZTUsZGZsdDowfX0sbGlnaHRpbmc6e2FtYmllbnQ6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouOH0sZGlmZnVzZTp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MSxkZmx0Oi44fSxzcGVjdWxhcjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxtYXg6MixkZmx0Oi4wNX0scm91Z2huZXNzOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGRmbHQ6LjV9LGZyZXNuZWw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjUsZGZsdDouMn19LG9wYWNpdHk6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfSxvcGFjaXR5c2NhbGU6e3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSxfZGVwcmVjYXRlZDp7emF1dG86bCh7fSxpLnphdXRvLHt9KSx6bWluOmwoe30saS56bWluLHt9KSx6bWF4Omwoe30saS56bWF4LHt9KX0saG92ZXJpbmZvOmwoe30scy5ob3ZlcmluZm8pLHNob3dsZWdlbmQ6bCh7fSxzLnNob3dsZWdlbmQse2RmbHQ6ITF9KX0pLCJjYWxjIiwibmVzdGVkIik7Zi54LmVkaXRUeXBlPWYueS5lZGl0VHlwZT1mLnouZWRpdFR5cGU9ImNhbGMrY2xlYXJBeGlzVHlwZXMiLGYudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyI6NjQ2LCIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RfYXBpL2VkaXRfdHlwZXMiOjgwOSwiLi4vLi4vcGxvdHMvYXR0cmlidXRlcyI6ODIzLCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIjo4OTl9XSwxMzE2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9jYWxjIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7ZS5zdXJmYWNlY29sb3I/bih0LGUse3ZhbHM6ZS5zdXJmYWNlY29sb3IsY29udGFpbmVyU3RyOiIiLGNMZXR0ZXI6ImMifSk6bih0LGUse3ZhbHM6ZS56LGNvbnRhaW5lclN0cjoiIixjTGV0dGVyOiJjIn0pfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvY2FsYyI6NjQ3fV0sMTMxNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1zdXJmYWNlM2QiKSxpPXQoIm5kYXJyYXkiKSxhPXQoIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIikuZDIsbz10KCIuLi9oZWF0bWFwL2ludGVycDJkIikscz10KCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyIpLGw9dCgiLi4vLi4vbGliIikuaXNBcnJheU9yVHlwZWRBcnJheSxjPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsdT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5IiksZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cztmdW5jdGlvbiBoKHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLnN1cmZhY2U9ZSx0aGlzLmRhdGE9bnVsbCx0aGlzLnNob3dDb250b3VyPVshMSwhMSwhMV0sdGhpcy5jb250b3VyU3RhcnQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJFbmQ9W251bGwsbnVsbCxudWxsXSx0aGlzLmNvbnRvdXJTaXplPVswLDAsMF0sdGhpcy5taW5WYWx1ZXM9WzEvMCwxLzAsMS8wXSx0aGlzLm1heFZhbHVlcz1bLTEvMCwtMS8wLC0xLzBdLHRoaXMuZGF0YVNjYWxlWD0xLHRoaXMuZGF0YVNjYWxlWT0xLHRoaXMucmVmaW5lRGF0YT0hMCx0aGlzLm9iamVjdE9mZnNldD1bMCwwLDBdfXZhciBwPWgucHJvdG90eXBlO3AuZ2V0WGF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLngpP2wodGhpcy5kYXRhLnhbMF0pP3RoaXMuZGF0YS54W2VdW3RdOnRoaXMuZGF0YS54W3RdOnQ7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WWF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWwodGhpcy5kYXRhLnkpP2wodGhpcy5kYXRhLnlbMF0pP3RoaXMuZGF0YS55W2VdW3RdOnRoaXMuZGF0YS55W2VdOmU7cmV0dXJuIHZvaWQgMD09PXI/aTpuLmQybChpLDAscil9LHAuZ2V0WmF0PWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuZGF0YS56W2VdW3RdO3JldHVybiBudWxsPT09aSYmdGhpcy5kYXRhLmNvbm5lY3RnYXBzJiZ0aGlzLmRhdGEuX2ludGVycG9sYXRlZFomJihpPXRoaXMuZGF0YS5faW50ZXJwb2xhdGVkWltlXVt0XSksdm9pZCAwPT09cj9pOm4uZDJsKGksMCxyKX0scC5oYW5kbGVQaWNrPWZ1bmN0aW9uKHQpe2lmKHQub2JqZWN0PT09dGhpcy5zdXJmYWNlKXt2YXIgZT0odC5kYXRhLmluZGV4WzBdLTEpL3RoaXMuZGF0YVNjYWxlWC0xLHI9KHQuZGF0YS5pbmRleFsxXS0xKS90aGlzLmRhdGFTY2FsZVktMSxuPU1hdGgubWF4KE1hdGgubWluKE1hdGgucm91bmQoZSksdGhpcy5kYXRhLnpbMF0ubGVuZ3RoLTEpLDApLGk9TWF0aC5tYXgoTWF0aC5taW4oTWF0aC5yb3VuZChyKSx0aGlzLmRhdGEuX3lsZW5ndGgtMSksMCk7dC5pbmRleD1bbixpXSx0LnRyYWNlQ29vcmRpbmF0ZT1bdGhpcy5nZXRYYXQobixpKSx0aGlzLmdldFlhdChuLGkpLHRoaXMuZ2V0WmF0KG4saSldLHQuZGF0YUNvb3JkaW5hdGU9W3RoaXMuZ2V0WGF0KG4saSx0aGlzLmRhdGEueGNhbGVuZGFyLHRoaXMuc2NlbmUuZnVsbFNjZW5lTGF5b3V0LnhheGlzKSx0aGlzLmdldFlhdChuLGksdGhpcy5kYXRhLnljYWxlbmRhcix0aGlzLnNjZW5lLmZ1bGxTY2VuZUxheW91dC55YXhpcyksdGhpcy5nZXRaYXQobixpLHRoaXMuZGF0YS56Y2FsZW5kYXIsdGhpcy5zY2VuZS5mdWxsU2NlbmVMYXlvdXQuemF4aXMpXTtmb3IodmFyIGE9MDthPDM7YSsrKXt2YXIgbz10LmRhdGFDb29yZGluYXRlW2FdO251bGwhPW8mJih0LmRhdGFDb29yZGluYXRlW2FdKj10aGlzLnNjZW5lLmRhdGFTY2FsZVthXSl9dmFyIHM9dGhpcy5kYXRhLmhvdmVydGV4dHx8dGhpcy5kYXRhLnRleHQ7cmV0dXJuIEFycmF5LmlzQXJyYXkocykmJnNbaV0mJnZvaWQgMCE9PXNbaV1bbl0/dC50ZXh0TGFiZWw9c1tpXVtuXTp0LnRleHRMYWJlbD1zfHwiIix0LmRhdGEuZGF0YUNvb3JkaW5hdGU9dC5kYXRhQ29vcmRpbmF0ZS5zbGljZSgpLHRoaXMuc3VyZmFjZS5oaWdobGlnaHQodC5kYXRhKSx0aGlzLnNjZW5lLmdscGxvdC5zcGlrZXMucG9zaXRpb249dC5kYXRhQ29vcmRpbmF0ZSwhMH19O3ZhciBkPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTcsMTAwOSwxMDEzLDEwMTksMTAyMSwxMDMxLDEwMzMsMTAzOSwxMDQ5LDEwNTEsMTA2MSwxMDYzLDEwNjksMTA4NywxMDkxLDEwOTMsMTA5NywxMTAzLDExMDksMTExNywxMTIzLDExMjksMTE1MSwxMTUzLDExNjMsMTE3MSwxMTgxLDExODcsMTE5MywxMjAxLDEyMTMsMTIxNywxMjIzLDEyMjksMTIzMSwxMjM3LDEyNDksMTI1OSwxMjc3LDEyNzksMTI4MywxMjg5LDEyOTEsMTI5NywxMzAxLDEzMDMsMTMwNywxMzE5LDEzMjEsMTMyNywxMzYxLDEzNjcsMTM3MywxMzgxLDEzOTksMTQwOSwxNDIzLDE0MjcsMTQyOSwxNDMzLDE0MzksMTQ0NywxNDUxLDE0NTMsMTQ1OSwxNDcxLDE0ODEsMTQ4MywxNDg3LDE0ODksMTQ5MywxNDk5LDE1MTEsMTUyMywxNTMxLDE1NDMsMTU0OSwxNTUzLDE1NTksMTU2NywxNTcxLDE1NzksMTU4MywxNTk3LDE2MDEsMTYwNywxNjA5LDE2MTMsMTYxOSwxNjIxLDE2MjcsMTYzNywxNjU3LDE2NjMsMTY2NywxNjY5LDE2OTMsMTY5NywxNjk5LDE3MDksMTcyMSwxNzIzLDE3MzMsMTc0MSwxNzQ3LDE3NTMsMTc1OSwxNzc3LDE3ODMsMTc4NywxNzg5LDE4MDEsMTgxMSwxODIzLDE4MzEsMTg0NywxODYxLDE4NjcsMTg3MSwxODczLDE4NzcsMTg3OSwxODg5LDE5MDEsMTkwNywxOTEzLDE5MzEsMTkzMywxOTQ5LDE5NTEsMTk3MywxOTc5LDE5ODcsMTk5MywxOTk3LDE5OTksMjAwMywyMDExLDIwMTcsMjAyNywyMDI5LDIwMzksMjA1MywyMDYzLDIwNjksMjA4MSwyMDgzLDIwODcsMjA4OSwyMDk5LDIxMTEsMjExMywyMTI5LDIxMzEsMjEzNywyMTQxLDIxNDMsMjE1MywyMTYxLDIxNzksMjIwMywyMjA3LDIyMTMsMjIyMSwyMjM3LDIyMzksMjI0MywyMjUxLDIyNjcsMjI2OSwyMjczLDIyODEsMjI4NywyMjkzLDIyOTcsMjMwOSwyMzExLDIzMzMsMjMzOSwyMzQxLDIzNDcsMjM1MSwyMzU3LDIzNzEsMjM3NywyMzgxLDIzODMsMjM4OSwyMzkzLDIzOTksMjQxMSwyNDE3LDI0MjMsMjQzNywyNDQxLDI0NDcsMjQ1OSwyNDY3LDI0NzMsMjQ3NywyNTAzLDI1MjEsMjUzMSwyNTM5LDI1NDMsMjU0OSwyNTUxLDI1NTcsMjU3OSwyNTkxLDI1OTMsMjYwOSwyNjE3LDI2MjEsMjYzMywyNjQ3LDI2NTcsMjY1OSwyNjYzLDI2NzEsMjY3NywyNjgzLDI2ODcsMjY4OSwyNjkzLDI2OTksMjcwNywyNzExLDI3MTMsMjcxOSwyNzI5LDI3MzEsMjc0MSwyNzQ5LDI3NTMsMjc2NywyNzc3LDI3ODksMjc5MSwyNzk3LDI4MDEsMjgwMywyODE5LDI4MzMsMjgzNywyODQzLDI4NTEsMjg1NywyODYxLDI4NzksMjg4NywyODk3LDI5MDMsMjkwOSwyOTE3LDI5MjcsMjkzOSwyOTUzLDI5NTcsMjk2MywyOTY5LDI5NzEsMjk5OV07ZnVuY3Rpb24gbSh0LGUpe2lmKHQ8ZSlyZXR1cm4gMDtmb3IodmFyIHI9MDswPT09TWF0aC5mbG9vcih0JWUpOyl0Lz1lLHIrKztyZXR1cm4gcn1mdW5jdGlvbiBnKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjxkLmxlbmd0aDtyKyspe3ZhciBuPWRbcl07ZS5wdXNoKG0odCxuKSl9cmV0dXJuIGV9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGU9Zyh0KSxyPXQsbj0wO248ZC5sZW5ndGg7bisrKWlmKGVbbl0+MCl7cj1kW25dO2JyZWFrfXJldHVybiByfWZ1bmN0aW9uIHkodCxlKXtpZighKHQ8MXx8ZTwxKSl7Zm9yKHZhciByPWcodCksbj1nKGUpLGk9MSxhPTA7YTxkLmxlbmd0aDthKyspaSo9TWF0aC5wb3coZFthXSxNYXRoLm1heChyW2FdLG5bYV0pKTtyZXR1cm4gaX19cC5jYWxjWG51bXM9ZnVuY3Rpb24odCl7dmFyIGUscj1bXTtmb3IoZT0xO2U8dDtlKyspe3ZhciBuPXRoaXMuZ2V0WGF0KGUtMSwwKSxpPXRoaXMuZ2V0WGF0KGUsMCk7cltlLTFdPWkhPT1uJiZudWxsIT1uJiZudWxsIT1pP01hdGguYWJzKGktbik6MH12YXIgYT0wO2ZvcihlPTE7ZTx0O2UrKylhKz1yW2UtMV07Zm9yKGU9MTtlPHQ7ZSsrKTA9PT1yW2UtMV0/cltlLTFdPTE6cltlLTFdPU1hdGgucm91bmQoYS9yW2UtMV0pO3JldHVybiByfSxwLmNhbGNZbnVtcz1mdW5jdGlvbih0KXt2YXIgZSxyPVtdO2ZvcihlPTE7ZTx0O2UrKyl7dmFyIG49dGhpcy5nZXRZYXQoMCxlLTEpLGk9dGhpcy5nZXRZYXQoMCxlKTtyW2UtMV09aSE9PW4mJm51bGwhPW4mJm51bGwhPWk/TWF0aC5hYnMoaS1uKTowfXZhciBhPTA7Zm9yKGU9MTtlPHQ7ZSsrKWErPXJbZS0xXTtmb3IoZT0xO2U8dDtlKyspMD09PXJbZS0xXT9yW2UtMV09MTpyW2UtMV09TWF0aC5yb3VuZChhL3JbZS0xXSk7cmV0dXJuIHJ9O3ZhciB4PVsxLDIsNCw2LDEyLDI0LDM2LDQ4LDYwLDEyMCwxODAsMjQwLDM2MCw3MjAsODQwLDEyNjBdLGI9eFs5XSxfPXhbMTNdO2Z1bmN0aW9uIHcodCxlLHIpe3ZhciBuPXJbOF0rclsyXSplWzBdK3JbNV0qZVsxXTtyZXR1cm4gdFswXT0ocls2XStyWzBdKmVbMF0rclszXSplWzFdKS9uLHRbMV09KHJbN10rclsxXSplWzBdK3JbNF0qZVsxXSkvbix0fWZ1bmN0aW9uIFQodCxlLHIpe3JldHVybiBmdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9WzAsMF0sbz10LnNoYXBlWzBdLHM9dC5zaGFwZVsxXSxsPTA7bDxvO2wrKylmb3IodmFyIGM9MDtjPHM7YysrKXIoaSxbbCxjXSxuKSx0LnNldChsLGMsYShlLGlbMF0saVsxXSkpfSh0LGUsdyxyKSx0fWZ1bmN0aW9uIGsodCxlKXtmb3IodmFyIHI9ITEsbj0wO248dC5sZW5ndGg7bisrKWlmKGU9PT10W25dKXtyPSEwO2JyZWFrfSExPT09ciYmdC5wdXNoKGUpfXAuZXN0aW1hdGVTY2FsZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0xK2Z1bmN0aW9uKHQpe2lmKDAhPT10Lmxlbmd0aCl7Zm9yKHZhciBlPTEscj0wO3I8dC5sZW5ndGg7cisrKWU9eShlLHRbcl0pO3JldHVybiBlfX0oMD09PWU/dGhpcy5jYWxjWG51bXModCk6dGhpcy5jYWxjWW51bXModCkpO3I8Yjspcio9Mjtmb3IoO3I+Xzspci0tLHIvPXYociksKytyPGImJihyPV8pO3ZhciBuPU1hdGgucm91bmQoci90KTtyZXR1cm4gbj4xP246MX0scC5yZWZpbmVDb29yZHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuZGF0YVNjYWxlWCxyPXRoaXMuZGF0YVNjYWxlWSxuPXRbMF0uc2hhcGVbMF0sYT10WzBdLnNoYXBlWzFdLG89MHxNYXRoLmZsb29yKHRbMF0uc2hhcGVbMF0qZSsxKSxzPTB8TWF0aC5mbG9vcih0WzBdLnNoYXBlWzFdKnIrMSksbD0xK24rMSxjPTErYSsxLHU9aShuZXcgRmxvYXQzMkFycmF5KGwqYyksW2wsY10pLGY9WzEvZSwwLDAsMCwxL3IsMCwwLDAsMV0saD0wO2g8dC5sZW5ndGg7KytoKXt0aGlzLnN1cmZhY2UucGFkRmllbGQodSx0W2hdKTt2YXIgcD1pKG5ldyBGbG9hdDMyQXJyYXkobypzKSxbbyxzXSk7VChwLHUsZiksdFtoXT1wfX0scC5zZXRDb250b3VyTGV2ZWxzPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49W1tdLFtdLFtdXSxpPVshMSwhMSwhMV0sYT0hMTtmb3IodD0wO3Q8MzsrK3QpaWYodGhpcy5zaG93Q29udG91clt0XSYmKGE9ITAsdGhpcy5jb250b3VyU2l6ZVt0XT4wJiZudWxsIT09dGhpcy5jb250b3VyU3RhcnRbdF0mJm51bGwhPT10aGlzLmNvbnRvdXJFbmRbdF0mJnRoaXMuY29udG91ckVuZFt0XT50aGlzLmNvbnRvdXJTdGFydFt0XSkpZm9yKGlbdF09ITAsZT10aGlzLmNvbnRvdXJTdGFydFt0XTtlPHRoaXMuY29udG91ckVuZFt0XTtlKz10aGlzLmNvbnRvdXJTaXplW3RdKXI9ZSp0aGlzLnNjZW5lLmRhdGFTY2FsZVt0XSxrKG5bdF0scik7aWYoYSl7dmFyIG89W1tdLFtdLFtdXTtmb3IodD0wO3Q8MzsrK3QpdGhpcy5zaG93Q29udG91clt0XSYmKG9bdF09aVt0XT9uW3RdOnRoaXMuc2NlbmUuY29udG91ckxldmVsc1t0XSk7dGhpcy5zdXJmYWNlLnVwZGF0ZSh7bGV2ZWxzOm99KX19LHAudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixhLGw9dGhpcy5zY2VuZSxoPWwuZnVsbFNjZW5lTGF5b3V0LHA9dGhpcy5zdXJmYWNlLGQ9Yyh0KSxtPWwuZGF0YVNjYWxlLGc9dC56WzBdLmxlbmd0aCx2PXQuX3lsZW5ndGgseT1sLmNvbnRvdXJMZXZlbHM7dGhpcy5kYXRhPXQ7dmFyIHg9W107Zm9yKGU9MDtlPDM7ZSsrKWZvcih4W2VdPVtdLHI9MDtyPGc7cisrKXhbZV1bcl09W107Zm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyl4WzBdW3JdW25dPXRoaXMuZ2V0WGF0KHIsbix0LnhjYWxlbmRhcixoLnhheGlzKSx4WzFdW3JdW25dPXRoaXMuZ2V0WWF0KHIsbix0LnljYWxlbmRhcixoLnlheGlzKSx4WzJdW3JdW25dPXRoaXMuZ2V0WmF0KHIsbix0LnpjYWxlbmRhcixoLnpheGlzKTtpZih0LmNvbm5lY3RnYXBzKWZvcih0Ll9lbXB0eXBvaW50cz1zKHhbMl0pLG8oeFsyXSx0Ll9lbXB0eXBvaW50cyksdC5faW50ZXJwb2xhdGVkWj1bXSxyPTA7cjxnO3IrKylmb3IodC5faW50ZXJwb2xhdGVkWltyXT1bXSxuPTA7bjx2O24rKyl0Ll9pbnRlcnBvbGF0ZWRaW3JdW25dPXhbMl1bcl1bbl07Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbD09KGE9eFtlXVtyXVtuXSk/eFtlXVtyXVtuXT1OYU46YT14W2VdW3JdW25dKj1tW2VdO2ZvcihlPTA7ZTwzO2UrKylmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKW51bGwhPShhPXhbZV1bcl1bbl0pJiYodGhpcy5taW5WYWx1ZXNbZV0+YSYmKHRoaXMubWluVmFsdWVzW2VdPWEpLHRoaXMubWF4VmFsdWVzW2VdPGEmJih0aGlzLm1heFZhbHVlc1tlXT1hKSk7Zm9yKGU9MDtlPDM7ZSsrKXRoaXMub2JqZWN0T2Zmc2V0W2VdPS41Kih0aGlzLm1pblZhbHVlc1tlXSt0aGlzLm1heFZhbHVlc1tlXSk7Zm9yKGU9MDtlPDM7ZSsrKWZvcihyPTA7cjxnO3IrKylmb3Iobj0wO248djtuKyspbnVsbCE9KGE9eFtlXVtyXVtuXSkmJih4W2VdW3JdW25dLT10aGlzLm9iamVjdE9mZnNldFtlXSk7dmFyIGI9W2kobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKSxpKG5ldyBGbG9hdDMyQXJyYXkoZyp2KSxbZyx2XSksaShuZXcgRmxvYXQzMkFycmF5KGcqdiksW2csdl0pXTtmb3IoZT0wO2U8MztlKyspZm9yKHI9MDtyPGc7cisrKWZvcihuPTA7bjx2O24rKyliW2VdLnNldChyLG4seFtlXVtyXVtuXSk7eD1bXTt2YXIgdz17Y29sb3JtYXA6ZCxsZXZlbHM6W1tdLFtdLFtdXSxzaG93Q29udG91cjpbITAsITAsITBdLHNob3dTdXJmYWNlOiF0LmhpZGVzdXJmYWNlLGNvbnRvdXJQcm9qZWN0OltbITEsITEsITFdLFshMSwhMSwhMV0sWyExLCExLCExXV0sY29udG91cldpZHRoOlsxLDEsMV0sY29udG91ckNvbG9yOltbMSwxLDEsMV0sWzEsMSwxLDFdLFsxLDEsMSwxXV0sY29udG91clRpbnQ6WzEsMSwxXSxkeW5hbWljQ29sb3I6W1sxLDEsMSwxXSxbMSwxLDEsMV0sWzEsMSwxLDFdXSxkeW5hbWljV2lkdGg6WzEsMSwxXSxkeW5hbWljVGludDpbMSwxLDFdLG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxvcGFjaXR5OnQub3BhY2l0eX0sVD1mKHQpO2lmKHcuaW50ZW5zaXR5Qm91bmRzPVtULm1pbixULm1heF0sdC5zdXJmYWNlY29sb3Ipe3ZhciBrPWkobmV3IEZsb2F0MzJBcnJheShnKnYpLFtnLHZdKTtmb3Iocj0wO3I8ZztyKyspZm9yKG49MDtuPHY7bisrKWsuc2V0KHIsbix0LnN1cmZhY2Vjb2xvcltuXVtyXSk7Yi5wdXNoKGspfWVsc2Ugdy5pbnRlbnNpdHlCb3VuZHNbMF0qPW1bMl0sdy5pbnRlbnNpdHlCb3VuZHNbMV0qPW1bMl07KF88YlswXS5zaGFwZVswXXx8XzxiWzBdLnNoYXBlWzFdKSYmKHRoaXMucmVmaW5lRGF0YT0hMSksITA9PT10aGlzLnJlZmluZURhdGEmJih0aGlzLmRhdGFTY2FsZVg9dGhpcy5lc3RpbWF0ZVNjYWxlKGJbMF0uc2hhcGVbMF0sMCksdGhpcy5kYXRhU2NhbGVZPXRoaXMuZXN0aW1hdGVTY2FsZShiWzBdLnNoYXBlWzFdLDEpLDE9PT10aGlzLmRhdGFTY2FsZVgmJjE9PT10aGlzLmRhdGFTY2FsZVl8fHRoaXMucmVmaW5lQ29vcmRzKGIpKSx0LnN1cmZhY2Vjb2xvciYmKHcuaW50ZW5zaXR5PWIucG9wKCkpO3ZhciBBPVshMCwhMCwhMF0sTT1bIngiLCJ5IiwieiJdO2ZvcihlPTA7ZTwzOysrZSl7dmFyIFM9dC5jb250b3Vyc1tNW2VdXTtBW2VdPVMuaGlnaGxpZ2h0LHcuc2hvd0NvbnRvdXJbZV09Uy5zaG93fHxTLmhpZ2hsaWdodCx3LnNob3dDb250b3VyW2VdJiYody5jb250b3VyUHJvamVjdFtlXT1bUy5wcm9qZWN0LngsUy5wcm9qZWN0LnksUy5wcm9qZWN0LnpdLFMuc2hvdz8odGhpcy5zaG93Q29udG91cltlXT0hMCx3LmxldmVsc1tlXT15W2VdLHAuaGlnaGxpZ2h0Q29sb3JbZV09dy5jb250b3VyQ29sb3JbZV09dShTLmNvbG9yKSxTLnVzZWNvbG9ybWFwP3AuaGlnaGxpZ2h0VGludFtlXT13LmNvbnRvdXJUaW50W2VdPTA6cC5oaWdobGlnaHRUaW50W2VdPXcuY29udG91clRpbnRbZV09MSx3LmNvbnRvdXJXaWR0aFtlXT1TLndpZHRoLHRoaXMuY29udG91clN0YXJ0W2VdPVMuc3RhcnQsdGhpcy5jb250b3VyRW5kW2VdPVMuZW5kLHRoaXMuY29udG91clNpemVbZV09Uy5zaXplKToodGhpcy5zaG93Q29udG91cltlXT0hMSx0aGlzLmNvbnRvdXJTdGFydFtlXT1udWxsLHRoaXMuY29udG91ckVuZFtlXT1udWxsLHRoaXMuY29udG91clNpemVbZV09MCksUy5oaWdobGlnaHQmJih3LmR5bmFtaWNDb2xvcltlXT11KFMuaGlnaGxpZ2h0Y29sb3IpLHcuZHluYW1pY1dpZHRoW2VdPVMuaGlnaGxpZ2h0d2lkdGgpKX0oZnVuY3Rpb24odCl7dmFyIGU9dFswXS5yZ2Iscj10W3QubGVuZ3RoLTFdLnJnYjtyZXR1cm4gZVswXT09PXJbMF0mJmVbMV09PT1yWzFdJiZlWzJdPT09clsyXSYmZVszXT09PXJbM119KShkKSYmKHcudmVydGV4Q29sb3I9ITApLHcub2JqZWN0T2Zmc2V0PXRoaXMub2JqZWN0T2Zmc2V0LHcuY29vcmRzPWIscC51cGRhdGUodykscC52aXNpYmxlPXQudmlzaWJsZSxwLmVuYWJsZUR5bmFtaWM9QSxwLmVuYWJsZUhpZ2hsaWdodD1BLHAuc25hcFRvRGF0YT0hMCwibGlnaHRpbmciaW4gdCYmKHAuYW1iaWVudExpZ2h0PXQubGlnaHRpbmcuYW1iaWVudCxwLmRpZmZ1c2VMaWdodD10LmxpZ2h0aW5nLmRpZmZ1c2UscC5zcGVjdWxhckxpZ2h0PXQubGlnaHRpbmcuc3BlY3VsYXIscC5yb3VnaG5lc3M9dC5saWdodGluZy5yb3VnaG5lc3MscC5mcmVzbmVsPXQubGlnaHRpbmcuZnJlc25lbCksImxpZ2h0cG9zaXRpb24iaW4gdCYmKHAubGlnaHRQb3NpdGlvbj1bdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdKX0scC5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5zY2VuZS5nbHBsb3QucmVtb3ZlKHRoaXMuc3VyZmFjZSksdGhpcy5zdXJmYWNlLmRpc3Bvc2UoKX0sZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5nbHBsb3QuZ2wsaT1uKHtnbDpyfSksYT1uZXcgaCh0LGksZS51aWQpO3JldHVybiBpLl90cmFjZT1hLGEudXBkYXRlKGUpLHQuZ2xwbG90LmFkZChpKSxhfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiOjc3MiwiLi4vLi4vbGliL3N0cjJyZ2JhcnJheSI6ODAxLCIuLi9oZWF0bWFwL2ZpbmRfZW1wdGllcyI6MTA2NCwiLi4vaGVhdG1hcC9pbnRlcnAyZCI6MTA2NywiZ2wtc3VyZmFjZTNkIjozMzYsbmRhcnJheTo0NjIsIm5kYXJyYXktbGluZWFyLWludGVycG9sYXRlIjo0NTZ9XSwxMzE4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3JlZ2lzdHJ5IiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9kZWZhdWx0cyIpLG89dCgiLi9hdHRyaWJ1dGVzIik7ZnVuY3Rpb24gcyh0LGUscixuKXt2YXIgaT1uKCJvcGFjaXR5c2NhbGUiKTsibWF4Ij09PWk/ZS5vcGFjaXR5c2NhbGU9W1swLC4xXSxbMSwxXV06Im1pbiI9PT1pP2Uub3BhY2l0eXNjYWxlPVtbMCwxXSxbMSwuMV1dOiJleHRyZW1lcyI9PT1pP2Uub3BhY2l0eXNjYWxlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG49MDtuPDMyO24rKyl7dmFyIGk9bi8zMSxhPWUrKDEtZSkqKDEtTWF0aC5wb3coTWF0aC5zaW4odCppKk1hdGguUEkpLDIpKTtyLnB1c2goW2ksTWF0aC5tYXgoMCxNYXRoLm1pbigxLGEpKV0pfXJldHVybiByfSgxLC4xKTpmdW5jdGlvbih0KXt2YXIgZT0wO2lmKCFBcnJheS5pc0FycmF5KHQpfHx0Lmxlbmd0aDwyKXJldHVybiExO2lmKCF0WzBdfHwhdFt0Lmxlbmd0aC0xXSlyZXR1cm4hMTtpZigwIT0rdFswXVswXXx8MSE9K3RbdC5sZW5ndGgtMV1bMF0pcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07aWYoMiE9PW4ubGVuZ3RofHwrblswXTxlKXJldHVybiExO2U9K25bMF19cmV0dXJuITB9KGkpfHwoZS5vcGFjaXR5c2NhbGU9dm9pZCAwKX1mdW5jdGlvbiBsKHQsZSxyKXtlIGluIHQmJiEociBpbiB0KSYmKHRbcl09dFtlXSl9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixjKXt2YXIgdSxmO2Z1bmN0aW9uIGgocixuKXtyZXR1cm4gaS5jb2VyY2UodCxlLG8scixuKX12YXIgcD1oKCJ4IiksZD1oKCJ5IiksbT1oKCJ6Iik7aWYoIW18fCFtLmxlbmd0aHx8cCYmcC5sZW5ndGg8MXx8ZCYmZC5sZW5ndGg8MSllLnZpc2libGU9ITE7ZWxzZXtlLl94bGVuZ3RoPUFycmF5LmlzQXJyYXkocCkmJmkuaXNBcnJheU9yVHlwZWRBcnJheShwWzBdKT9tLmxlbmd0aDptWzBdLmxlbmd0aCxlLl95bGVuZ3RoPW0ubGVuZ3RoLG4uZ2V0Q29tcG9uZW50TWV0aG9kKCJjYWxlbmRhcnMiLCJoYW5kbGVUcmFjZURlZmF1bHRzIikodCxlLFsieCIsInkiLCJ6Il0sYyksaCgidGV4dCIpLGgoImhvdmVydGV4dCIpLGgoImhvdmVydGVtcGxhdGUiKSxoKCJ4aG92ZXJmb3JtYXQiKSxoKCJ5aG92ZXJmb3JtYXQiKSxoKCJ6aG92ZXJmb3JtYXQiKSxbImxpZ2h0aW5nLmFtYmllbnQiLCJsaWdodGluZy5kaWZmdXNlIiwibGlnaHRpbmcuc3BlY3VsYXIiLCJsaWdodGluZy5yb3VnaG5lc3MiLCJsaWdodGluZy5mcmVzbmVsIiwibGlnaHRwb3NpdGlvbi54IiwibGlnaHRwb3NpdGlvbi55IiwibGlnaHRwb3NpdGlvbi56IiwiaGlkZXN1cmZhY2UiLCJjb25uZWN0Z2FwcyIsIm9wYWNpdHkiXS5mb3JFYWNoKChmdW5jdGlvbih0KXtoKHQpfSkpO3ZhciBnPWgoInN1cmZhY2Vjb2xvciIpLHY9WyJ4IiwieSIsInoiXTtmb3IodT0wO3U8MzsrK3Upe3ZhciB5PSJjb250b3Vycy4iK3ZbdV0seD1oKHkrIi5zaG93IiksYj1oKHkrIi5oaWdobGlnaHQiKTtpZih4fHxiKWZvcihmPTA7ZjwzOysrZiloKHkrIi5wcm9qZWN0LiIrdltmXSk7eCYmKGgoeSsiLmNvbG9yIiksaCh5KyIud2lkdGgiKSxoKHkrIi51c2Vjb2xvcm1hcCIpKSxiJiYoaCh5KyIuaGlnaGxpZ2h0Y29sb3IiKSxoKHkrIi5oaWdobGlnaHR3aWR0aCIpKSxoKHkrIi5zdGFydCIpLGgoeSsiLmVuZCIpLGgoeSsiLnNpemUiKX1nfHwobCh0LCJ6bWluIiwiY21pbiIpLGwodCwiem1heCIsImNtYXgiKSxsKHQsInphdXRvIiwiY2F1dG8iKSksYSh0LGUsYyxoLHtwcmVmaXg6IiIsY0xldHRlcjoiYyJ9KSxzKHQsZSxjLGgpLGUuX2xlbmd0aD1udWxsfX0sb3BhY2l0eXNjYWxlRGVmYXVsdHM6c319LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvcnNjYWxlL2RlZmF1bHRzIjo2NDksIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9yZWdpc3RyeSI6OTA0LCIuL2F0dHJpYnV0ZXMiOjEzMTV9XSwxMzE5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY29sb3JiYXI6e21pbjoiY21pbiIsbWF4OiJjbWF4In0sY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vY29udmVydCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJzdXJmYWNlIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9nbDNkIiksY2F0ZWdvcmllczpbImdsM2QiLCIyZE1hcCIsInNob3dMZWdlbmQiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9nbDNkIjo4NjksIi4vYXR0cmlidXRlcyI6MTMxNSwiLi9jYWxjIjoxMzE2LCIuL2NvbnZlcnQiOjEzMTcsIi4vZGVmYXVsdHMiOjEzMTh9XSwxMzIwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2NvbXBvbmVudHMvYW5ub3RhdGlvbnMvYXR0cmlidXRlcyIpLGk9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsYT10KCIuLi8uLi9wbG90X2FwaS9lZGl0X3R5cGVzIikub3ZlcnJpZGVBbGwsbz10KCIuLi8uLi9wbG90cy9mb250X2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL3Bsb3RzL2RvbWFpbiIpLmF0dHJpYnV0ZXMsbD10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmRlc2NyaXB0aW9uT25seU51bWJlcnM7KGUuZXhwb3J0cz1hKHtkb21haW46cyh7bmFtZToidGFibGUiLHRyYWNlOiEwfSksY29sdW1ud2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0Om51bGx9LGNvbHVtbm9yZGVyOnt2YWxUeXBlOiJkYXRhX2FycmF5In0saGVhZGVyOnt2YWx1ZXM6e3ZhbFR5cGU6ImRhdGFfYXJyYXkiLGRmbHQ6W119LGZvcm1hdDp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXSxkZXNjcmlwdGlvbjpsKCJjZWxsIHZhbHVlIil9LHByZWZpeDp7dmFsVHlwZToic3RyaW5nIixhcnJheU9rOiEwLGRmbHQ6bnVsbH0sc3VmZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxoZWlnaHQ6e3ZhbFR5cGU6Im51bWJlciIsZGZsdDoyOH0sYWxpZ246aSh7fSxuLmFsaWduLHthcnJheU9rOiEwfSksbGluZTp7d2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsYXJyYXlPazohMCxkZmx0OjF9LGNvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJncmV5In19LGZpbGw6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsYXJyYXlPazohMCxkZmx0OiJ3aGl0ZSJ9fSxmb250Omkoe30sbyh7YXJyYXlPazohMH0pKX0sY2VsbHM6e3ZhbHVlczp7dmFsVHlwZToiZGF0YV9hcnJheSIsZGZsdDpbXX0sZm9ybWF0Ont2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGRlc2NyaXB0aW9uOmwoImNlbGwgdmFsdWUiKX0scHJlZml4Ont2YWxUeXBlOiJzdHJpbmciLGFycmF5T2s6ITAsZGZsdDpudWxsfSxzdWZmaXg6e3ZhbFR5cGU6InN0cmluZyIsYXJyYXlPazohMCxkZmx0Om51bGx9LGhlaWdodDp7dmFsVHlwZToibnVtYmVyIixkZmx0OjIwfSxhbGlnbjppKHt9LG4uYWxpZ24se2FycmF5T2s6ITB9KSxsaW5lOnt3aWR0aDp7dmFsVHlwZToibnVtYmVyIixhcnJheU9rOiEwLGRmbHQ6MX0sY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6ImdyZXkifX0sZmlsbDp7Y29sb3I6e3ZhbFR5cGU6ImNvbG9yIixhcnJheU9rOiEwLGRmbHQ6IndoaXRlIn19LGZvbnQ6aSh7fSxvKHthcnJheU9rOiEwfSkpfX0sImNhbGMiLCJmcm9tLXJvb3QiKSkudHJhbnNmb3Jtcz12b2lkIDB9LHsiLi4vLi4vY29tcG9uZW50cy9hbm5vdGF0aW9ucy9hdHRyaWJ1dGVzIjo2MjIsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyI6ODMwLCIuLi8uLi9wbG90cy9kb21haW4iOjg1NSwiLi4vLi4vcGxvdHMvZm9udF9hdHRyaWJ1dGVzIjo4NTZ9XSwxMzIxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL2dldF9kYXRhIikuZ2V0TW9kdWxlQ2FsY0RhdGEsaT10KCIuL3Bsb3QiKTtyLm5hbWU9InRhYmxlIixyLnBsb3Q9ZnVuY3Rpb24odCl7dmFyIGU9bih0LmNhbGNkYXRhLCJ0YWJsZSIpWzBdO2UubGVuZ3RoJiZpKHQsZSl9LHIuY2xlYW49ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9bi5faGFzJiZuLl9oYXMoInRhYmxlIiksYT1lLl9oYXMmJmUuX2hhcygidGFibGUiKTtpJiYhYSYmbi5fcGFwZXJkaXYuc2VsZWN0QWxsKCIudGFibGUiKS5yZW1vdmUoKX19LHsiLi4vLi4vcGxvdHMvZ2V0X2RhdGEiOjg2NCwiLi9wbG90IjoxMzI4fV0sMTMyMjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIvZ3VwIikud3JhcDtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gbih7fSl9fSx7Ii4uLy4uL2xpYi9ndXAiOjc3M31dLDEzMjM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXtjZWxsUGFkOjgsY29sdW1uRXh0ZW50T2Zmc2V0OjEwLGNvbHVtblRpdGxlT2Zmc2V0OjI4LGVtcHR5SGVhZGVySGVpZ2h0OjE2LGxhdGV4Q2hlY2s6L15cJC4qXCQkLyxnb2xkZW5SYXRpbzoxLjYxOCxsaW5lQnJlYWtlcjoiPGJyPiIsbWF4RGltZW5zaW9uQ291bnQ6NjAsb3ZlcmRyYWc6NDUscmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbjoxMjAscmVsZWFzZVRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHNjcm9sbGJhckNhcHR1cmVXaWR0aDoxOCxzY3JvbGxiYXJIaWRlRGVsYXk6MWUzLHNjcm9sbGJhckhpZGVEdXJhdGlvbjoxZTMsc2Nyb2xsYmFyT2Zmc2V0OjUsc2Nyb2xsYmFyV2lkdGg6OCx0cmFuc2l0aW9uRHVyYXRpb246MTAwLHRyYW5zaXRpb25FYXNlOiJjdWJpYy1vdXQiLHVwbGlmdDo1LHdyYXBTcGFjZXI6IiAiLHdyYXBTcGxpdENoYXJhY3RlcjoiICIsY246e3RhYmxlOiJ0YWJsZSIsdGFibGVDb250cm9sVmlldzoidGFibGUtY29udHJvbC12aWV3IixzY3JvbGxCYWNrZ3JvdW5kOiJzY3JvbGwtYmFja2dyb3VuZCIseUNvbHVtbjoieS1jb2x1bW4iLGNvbHVtbkJsb2NrOiJjb2x1bW4tYmxvY2siLHNjcm9sbEFyZWFDbGlwOiJzY3JvbGwtYXJlYS1jbGlwIixzY3JvbGxBcmVhQ2xpcFJlY3Q6InNjcm9sbC1hcmVhLWNsaXAtcmVjdCIsY29sdW1uQm91bmRhcnk6ImNvbHVtbi1ib3VuZGFyeSIsY29sdW1uQm91bmRhcnlDbGlwcGF0aDoiY29sdW1uLWJvdW5kYXJ5LWNsaXBwYXRoIixjb2x1bW5Cb3VuZGFyeVJlY3Q6ImNvbHVtbi1ib3VuZGFyeS1yZWN0Iixjb2x1bW5DZWxsczoiY29sdW1uLWNlbGxzIixjb2x1bW5DZWxsOiJjb2x1bW4tY2VsbCIsY2VsbFJlY3Q6ImNlbGwtcmVjdCIsY2VsbFRleHQ6ImNlbGwtdGV4dCIsY2VsbFRleHRIb2xkZXI6ImNlbGwtdGV4dC1ob2xkZXIiLHNjcm9sbGJhcktpdDoic2Nyb2xsYmFyLWtpdCIsc2Nyb2xsYmFyOiJzY3JvbGxiYXIiLHNjcm9sbGJhclNsaWRlcjoic2Nyb2xsYmFyLXNsaWRlciIsc2Nyb2xsYmFyR2x5cGg6InNjcm9sbGJhci1nbHlwaCIsc2Nyb2xsYmFyQ2FwdHVyZVpvbmU6InNjcm9sbGJhci1jYXB0dXJlLXpvbmUifX19LHt9XSwxMzI0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCIuLi8uLi9saWIvZXh0ZW5kIikuZXh0ZW5kRmxhdCxhPXQoImZhc3QtaXNudW1lcmljIik7ZnVuY3Rpb24gbyh0KXtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspZT1NYXRoLm1heChlLG8odFtyXSkpO3JldHVybiBlfXJldHVybiB0fWZ1bmN0aW9uIHModCxlKXtyZXR1cm4gdCtlfWZ1bmN0aW9uIGwodCl7dmFyIGUscj10LnNsaWNlKCksbj0xLzAsaT0wO2ZvcihlPTA7ZTxyLmxlbmd0aDtlKyspQXJyYXkuaXNBcnJheShyW2VdKXx8KHJbZV09W3JbZV1dKSxuPU1hdGgubWluKG4scltlXS5sZW5ndGgpLGk9TWF0aC5tYXgoaSxyW2VdLmxlbmd0aCk7aWYobiE9PWkpZm9yKGU9MDtlPHIubGVuZ3RoO2UrKyl7dmFyIGE9aS1yW2VdLmxlbmd0aDthJiYocltlXT1yW2VdLmNvbmNhdChjKGEpKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09IiI7cmV0dXJuIGV9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdC5jYWxjZGF0YS5jb2x1bW5zLnJlZHVjZSgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gci54SW5kZXg8dC54SW5kZXg/ZStyLmNvbHVtbldpZHRoOmV9KSwwKX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIE9iamVjdC5rZXlzKHQpLm1hcCgoZnVuY3Rpb24ocil7cmV0dXJuIGkoe30sdFtyXSx7YXV4aWxpYXJ5QmxvY2tzOmV9KX0pKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByLG49e30saT0wLGE9MCxvPXtmaXJzdFJvd0luZGV4Om51bGwsbGFzdFJvd0luZGV4Om51bGwscm93czpbXX0scz0wLGw9MCxjPTA7Yzx0Lmxlbmd0aDtjKyspcj10W2NdLG8ucm93cy5wdXNoKHtyb3dJbmRleDpjLHJvd0hlaWdodDpyfSksKChhKz1yKT49ZXx8Yz09PXQubGVuZ3RoLTEpJiYobltpXT1vLG8ua2V5PWwrKyxvLmZpcnN0Um93SW5kZXg9cyxvLmxhc3RSb3dJbmRleD1jLG89e2ZpcnN0Um93SW5kZXg6bnVsbCxsYXN0Um93SW5kZXg6bnVsbCxyb3dzOltdfSxpKz1hLHM9YysxLGE9MCk7cmV0dXJuIG59ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9bChlLmNlbGxzLnZhbHVlcykscD1mdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZShlLmhlYWRlci52YWx1ZXMubGVuZ3RoLHQubGVuZ3RoKX0sZD1sKGUuaGVhZGVyLnZhbHVlcyk7ZC5sZW5ndGgmJiFkWzBdLmxlbmd0aCYmKGRbMF09WyIiXSxkPWwoZCkpO3ZhciBtPWQuY29uY2F0KHAocikubWFwKChmdW5jdGlvbigpe3JldHVybiBjKChkWzBdfHxbIiJdKS5sZW5ndGgpfSkpKSxnPWUuZG9tYWluLHY9TWF0aC5mbG9vcih0Ll9mdWxsTGF5b3V0Ll9zaXplLncqKGcueFsxXS1nLnhbMF0pKSx5PU1hdGguZmxvb3IodC5fZnVsbExheW91dC5fc2l6ZS5oKihnLnlbMV0tZy55WzBdKSkseD1lLmhlYWRlci52YWx1ZXMubGVuZ3RoP21bMF0ubWFwKChmdW5jdGlvbigpe3JldHVybiBlLmhlYWRlci5oZWlnaHR9KSk6W24uZW1wdHlIZWFkZXJIZWlnaHRdLGI9ci5sZW5ndGg/clswXS5tYXAoKGZ1bmN0aW9uKCl7cmV0dXJuIGUuY2VsbHMuaGVpZ2h0fSkpOltdLF89eC5yZWR1Y2UocywwKSx3PWgoYix5LV8rbi51cGxpZnQpLFQ9ZihoKHgsXyksW10pLGs9Zih3LFQpLEE9e30sTT1lLl9mdWxsSW5wdXQuY29sdW1ub3JkZXIuY29uY2F0KHAoci5tYXAoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV9KSkpKSxTPW0ubWFwKChmdW5jdGlvbih0LHIpe3ZhciBuPUFycmF5LmlzQXJyYXkoZS5jb2x1bW53aWR0aCk/ZS5jb2x1bW53aWR0aFtNYXRoLm1pbihyLGUuY29sdW1ud2lkdGgubGVuZ3RoLTEpXTplLmNvbHVtbndpZHRoO3JldHVybiBhKG4pP051bWJlcihuKToxfSkpLEU9Uy5yZWR1Y2UocywwKTtTPVMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC9FKnZ9KSk7dmFyIEw9TWF0aC5tYXgobyhlLmhlYWRlci5saW5lLndpZHRoKSxvKGUuY2VsbHMubGluZS53aWR0aCkpLEM9e2tleTplLnVpZCt0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsdHJhbnNsYXRlWDpnLnhbMF0qdC5fZnVsbExheW91dC5fc2l6ZS53LHRyYW5zbGF0ZVk6dC5fZnVsbExheW91dC5fc2l6ZS5oKigxLWcueVsxXSksc2l6ZTp0Ll9mdWxsTGF5b3V0Ll9zaXplLHdpZHRoOnYsbWF4TGluZVdpZHRoOkwsaGVpZ2h0OnksY29sdW1uT3JkZXI6TSxncm91cEhlaWdodDp5LHJvd0Jsb2NrczprLGhlYWRlclJvd0Jsb2NrczpULHNjcm9sbFk6MCxjZWxsczppKHt9LGUuY2VsbHMse3ZhbHVlczpyfSksaGVhZGVyQ2VsbHM6aSh7fSxlLmhlYWRlcix7dmFsdWVzOm19KSxnZENvbHVtbnM6bS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLGdkQ29sdW1uc09yaWdpbmFsT3JkZXI6bS5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdfSkpLHByZXZQYWdlczpbMCwwXSxzY3JvbGxiYXJTdGF0ZTp7c2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzczohMX0sY29sdW1uczptLm1hcCgoZnVuY3Rpb24odCxlKXt2YXIgcj1BW3RdO3JldHVybiBBW3RdPShyfHwwKSsxLHtrZXk6dCsiX18iK0FbdF0sbGFiZWw6dCxzcGVjSW5kZXg6ZSx4SW5kZXg6TVtlXSx4U2NhbGU6dSx4OnZvaWQgMCxjYWxjZGF0YTp2b2lkIDAsY29sdW1uV2lkdGg6U1tlXX19KSl9O3JldHVybiBDLmNvbHVtbnMuZm9yRWFjaCgoZnVuY3Rpb24odCl7dC5jYWxjZGF0YT1DLHQueD11KHQpfSkpLEN9fSx7Ii4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi9jb25zdGFudHMiOjEzMjMsImZhc3QtaXNudW1lcmljIjoyNDJ9XSwxMzI1OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0O3Iuc3BsaXRUb1BhbmVscz1mdW5jdGlvbih0KXt2YXIgZT1bMCwwXSxyPW4oe30sdCx7a2V5OiJoZWFkZXIiLHR5cGU6ImhlYWRlciIscGFnZTowLHByZXZQYWdlczplLGN1cnJlbnRSZXBhaW50OltudWxsLG51bGxdLGRyYWdIYW5kbGU6ITAsdmFsdWVzOnQuY2FsY2RhdGEuaGVhZGVyQ2VsbHMudmFsdWVzW3Quc3BlY0luZGV4XSxyb3dCbG9ja3M6dC5jYWxjZGF0YS5oZWFkZXJSb3dCbG9ja3MsY2FsY2RhdGE6bih7fSx0LmNhbGNkYXRhLHtjZWxsczp0LmNhbGNkYXRhLmhlYWRlckNlbGxzfSl9KTtyZXR1cm5bbih7fSx0LHtrZXk6ImNlbGxzMSIsdHlwZToiY2VsbHMiLHBhZ2U6MCxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSksbih7fSx0LHtrZXk6ImNlbGxzMiIsdHlwZToiY2VsbHMiLHBhZ2U6MSxwcmV2UGFnZXM6ZSxjdXJyZW50UmVwYWludDpbbnVsbCxudWxsXSxkcmFnSGFuZGxlOiExLHZhbHVlczp0LmNhbGNkYXRhLmNlbGxzLnZhbHVlc1t0LnNwZWNJbmRleF0scm93QmxvY2tzOnQuY2FsY2RhdGEucm93QmxvY2tzfSkscl19LHIuc3BsaXRUb0NlbGxzPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlPXQucm93QmxvY2tzW3QucGFnZV0scj1lP2Uucm93c1swXS5yb3dJbmRleDowLG49ZT9yK2Uucm93cy5sZW5ndGg6MDtyZXR1cm5bcixuXX0odCk7cmV0dXJuKHQudmFsdWVzfHxbXSkuc2xpY2UoZVswXSxlWzFdKS5tYXAoKGZ1bmN0aW9uKHIsbil7cmV0dXJue2tleVdpdGhpbkJsb2NrOm4rKCJzdHJpbmciPT10eXBlb2YgciYmci5tYXRjaCgvWzwkJj4gXS8pPyJfa2V5YnVzdGVyXyIrTWF0aC5yYW5kb20oKToiIiksa2V5OmVbMF0rbixjb2x1bW46dCxjYWxjZGF0YTp0LmNhbGNkYXRhLHBhZ2U6dC5wYWdlLHJvd0Jsb2Nrczp0LnJvd0Jsb2Nrcyx2YWx1ZTpyfX0pKX19LHsiLi4vLi4vbGliL2V4dGVuZCI6NzY2fV0sMTMyNjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vYXR0cmlidXRlcyIpLGE9dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuZGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG8pe2Z1bmN0aW9uIHMocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKGUsbyxzKSxzKCJjb2x1bW53aWR0aCIpLHMoImhlYWRlci52YWx1ZXMiKSxzKCJoZWFkZXIuZm9ybWF0IikscygiaGVhZGVyLmFsaWduIikscygiaGVhZGVyLnByZWZpeCIpLHMoImhlYWRlci5zdWZmaXgiKSxzKCJoZWFkZXIuaGVpZ2h0IikscygiaGVhZGVyLmxpbmUud2lkdGgiKSxzKCJoZWFkZXIubGluZS5jb2xvciIpLHMoImhlYWRlci5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImhlYWRlci5mb250IixuLmV4dGVuZEZsYXQoe30sby5mb250KSksZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jb2x1bW5vcmRlcnx8W10sbj10LmhlYWRlci52YWx1ZXMubGVuZ3RoLGk9ci5zbGljZSgwLG4pLGE9aS5zbGljZSgpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQtZX0pKSxvPWkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gYS5pbmRleE9mKHQpfSkpLHM9by5sZW5ndGg7czxuO3MrKylvLnB1c2gocyk7ZSgiY29sdW1ub3JkZXIiLG8pfShlLHMpLHMoImNlbGxzLnZhbHVlcyIpLHMoImNlbGxzLmZvcm1hdCIpLHMoImNlbGxzLmFsaWduIikscygiY2VsbHMucHJlZml4IikscygiY2VsbHMuc3VmZml4IikscygiY2VsbHMuaGVpZ2h0IikscygiY2VsbHMubGluZS53aWR0aCIpLHMoImNlbGxzLmxpbmUuY29sb3IiKSxzKCJjZWxscy5maWxsLmNvbG9yIiksbi5jb2VyY2VGb250KHMsImNlbGxzLmZvbnQiLG4uZXh0ZW5kRmxhdCh7fSxvLmZvbnQpKSxlLl9sZW5ndGg9bnVsbH19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuL2F0dHJpYnV0ZXMiOjEzMjB9XSwxMzI3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY2FsYzp0KCIuL2NhbGMiKSxwbG90OnQoIi4vcGxvdCIpLG1vZHVsZVR5cGU6InRyYWNlIixuYW1lOiJ0YWJsZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOlsibm9PcGFjaXR5Il0sbWV0YTp7fX19LHsiLi9hdHRyaWJ1dGVzIjoxMzIwLCIuL2Jhc2VfcGxvdCI6MTMyMSwiLi9jYWxjIjoxMzIyLCIuL2RlZmF1bHRzIjoxMzI2LCIuL3Bsb3QiOjEzMjh9XSwxMzI4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4vY29uc3RhbnRzIiksaT10KCJAcGxvdGx5L2QzIiksYT10KCIuLi8uLi9saWIiKS5udW1iZXJGb3JtYXQsbz10KCIuLi8uLi9saWIvZ3VwIikscz10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxsPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLGM9dCgiLi4vLi4vbGliIikucmFpc2VUb1RvcCx1PXQoIi4uLy4uL2xpYiIpLnN0clRyYW5zbGF0ZSxmPXQoIi4uLy4uL2xpYiIpLmNhbmNlbFRyYW5zaXRpb24saD10KCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIikscD10KCIuL2RhdGFfc3BsaXRfaGVscGVycyIpLGQ9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpO2Z1bmN0aW9uIG0odCl7cmV0dXJuIE1hdGguY2VpbCh0LmNhbGNkYXRhLm1heExpbmVXaWR0aC8yKX1mdW5jdGlvbiBnKHQsZSl7cmV0dXJuImNsaXAiK3QuX2Z1bGxMYXlvdXQuX3VpZCsiX3Njcm9sbEFyZWFCb3R0b21DbGlwXyIrZS5rZXl9ZnVuY3Rpb24gdih0LGUpe3JldHVybiJjbGlwIit0Ll9mdWxsTGF5b3V0Ll91aWQrIl9jb2x1bW5Cb3VuZGFyeUNsaXBwYXRoXyIrZS5jYWxjZGF0YS5rZXkrIl8iK2Uuc3BlY0luZGV4fWZ1bmN0aW9uIHkodCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdH0pKSkubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC5fX2RhdGFfX30pKX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgYT10LnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJLaXQpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO2EuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uc2Nyb2xsYmFyS2l0LCEwKS5zdHlsZSgic2hhcGUtcmVuZGVyaW5nIiwiZ2VvbWV0cmljUHJlY2lzaW9uIiksYS5lYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnNjcm9sbGJhclN0YXRlO2UudG90YWxIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3M7cmV0dXJuIEQoZSxlLmxlbmd0aC0xKSsoZS5sZW5ndGg/UihlW2UubGVuZ3RoLTFdLDEvMCk6MSl9KHQpLGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQ9dC5ncm91cEhlaWdodC1TKHQpLGUuY3VycmVudGx5VmlzaWJsZUhlaWdodD1NYXRoLm1pbihlLnRvdGFsSGVpZ2h0LGUuc2Nyb2xsYWJsZUFyZWFIZWlnaHQpLGUucmF0aW89ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0L2UudG90YWxIZWlnaHQsZS5iYXJMZW5ndGg9TWF0aC5tYXgoZS5yYXRpbyplLmN1cnJlbnRseVZpc2libGVIZWlnaHQsbi5nb2xkZW5SYXRpbypuLnNjcm9sbGJhcldpZHRoKSxlLmJhcldpZ2dsZVJvb209ZS5jdXJyZW50bHlWaXNpYmxlSGVpZ2h0LWUuYmFyTGVuZ3RoLGUud2lnZ2xlUm9vbT1NYXRoLm1heCgwLGUudG90YWxIZWlnaHQtZS5zY3JvbGxhYmxlQXJlYUhlaWdodCksZS50b3BZPTA9PT1lLmJhcldpZ2dsZVJvb20/MDp0LnNjcm9sbFkvZS53aWdnbGVSb29tKmUuYmFyV2lnZ2xlUm9vbSxlLmJvdHRvbVk9ZS50b3BZK2UuYmFyTGVuZ3RoLGUuZHJhZ011bHRpcGxpZXI9ZS53aWdnbGVSb29tL2UuYmFyV2lnZ2xlUm9vbX0pKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT10LndpZHRoK24uc2Nyb2xsYmFyV2lkdGgvMituLnNjcm9sbGJhck9mZnNldDtyZXR1cm4gdShlLFModCkpfSkpO3ZhciBzPWEuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhcikuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7cy5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXIsITApO3ZhciBsPXMuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhclNsaWRlcikuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJTbGlkZXIsITApLGwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoMCx0LnNjcm9sbGJhclN0YXRlLnRvcFl8fDApfSkpO3ZhciBjPWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbGJhckdseXBoKS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtjLmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZChuLmNuLnNjcm9sbGJhckdseXBoLCEwKS5hdHRyKCJzdHJva2UiLCJibGFjayIpLmF0dHIoInN0cm9rZS13aWR0aCIsbi5zY3JvbGxiYXJXaWR0aCkuYXR0cigic3Ryb2tlLWxpbmVjYXAiLCJyb3VuZCIpLmF0dHIoInkxIixuLnNjcm9sbGJhcldpZHRoLzIpLGMuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5iYXJMZW5ndGgtbi5zY3JvbGxiYXJXaWR0aC8yfSkpLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uRHJhZ0luUHJvZ3Jlc3N8fCF0LnNjcm9sbGJhclN0YXRlLmJhcldpZ2dsZVJvb218fHI/MDouNH0pKSxjLnRyYW5zaXRpb24oKS5kZWxheSgwKS5kdXJhdGlvbigwKSxjLnRyYW5zaXRpb24oKS5kZWxheShuLnNjcm9sbGJhckhpZGVEZWxheSkuZHVyYXRpb24obi5zY3JvbGxiYXJIaWRlRHVyYXRpb24pLmF0dHIoInN0cm9rZS1vcGFjaXR5IiwwKTt2YXIgZj1zLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7Zi5lbnRlcigpLmFwcGVuZCgibGluZSIpLmNsYXNzZWQobi5jbi5zY3JvbGxiYXJDYXB0dXJlWm9uZSwhMCkuYXR0cigic3Ryb2tlIiwid2hpdGUiKS5hdHRyKCJzdHJva2Utb3BhY2l0eSIsLjAxKS5hdHRyKCJzdHJva2Utd2lkdGgiLG4uc2Nyb2xsYmFyQ2FwdHVyZVdpZHRoKS5hdHRyKCJzdHJva2UtbGluZWNhcCIsImJ1dHQiKS5hdHRyKCJ5MSIsMCkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKHIpe3ZhciBuPWkuZXZlbnQueSxhPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbz1yLnNjcm9sbGJhclN0YXRlLHM9bi1hLnRvcCxsPWkuc2NhbGUubGluZWFyKCkuZG9tYWluKFswLG8uc2Nyb2xsYWJsZUFyZWFIZWlnaHRdKS5yYW5nZShbMCxvLnRvdGFsSGVpZ2h0XSkuY2xhbXAoITApO28udG9wWTw9cyYmczw9by5ib3R0b21ZfHxMKGUsdCxudWxsLGwocy1vLmJhckxlbmd0aC8yKSkocil9KSkuY2FsbChpLmJlaGF2aW9yLmRyYWcoKS5vcmlnaW4oKGZ1bmN0aW9uKHQpe3JldHVybiBpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLHQuc2Nyb2xsYmFyU3RhdGUuc2Nyb2xsYmFyU2Nyb2xsSW5Qcm9ncmVzcz0hMCx0fSkpLm9uKCJkcmFnIixMKGUsdCkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLGYuYXR0cigieTIiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5zY3JvbGxiYXJTdGF0ZS5zY3JvbGxhYmxlQXJlYUhlaWdodH0pKSxlLl9jb250ZXh0LnN0YXRpY1Bsb3QmJihjLnJlbW92ZSgpLGYucmVtb3ZlKCkpfWZ1bmN0aW9uIGIodCxlLHIsYSl7dmFyIGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbCkuZGF0YShwLnNwbGl0VG9DZWxscywoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY29sdW1uQ2VsbCwhMCksZS5leGl0KCkucmVtb3ZlKCksZX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQ2VsbHMpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkNlbGxzLCEwKSxlLmV4aXQoKS5yZW1vdmUoKSxlfShyKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgcj10LmNhbGNkYXRhLmNlbGxzLmZvbnQsbj10LmNvbHVtbi5zcGVjSW5kZXgsaT17c2l6ZTpUKHIuc2l6ZSxuLGUpLGNvbG9yOlQoci5jb2xvcixuLGUpLGZhbWlseTpUKHIuZmFtaWx5LG4sZSl9O3Qucm93TnVtYmVyPXQua2V5LHQuYWxpZ249VCh0LmNhbGNkYXRhLmNlbGxzLmFsaWduLG4sZSksdC5jZWxsQm9yZGVyV2lkdGg9VCh0LmNhbGNkYXRhLmNlbGxzLmxpbmUud2lkdGgsbixlKSx0LmZvbnQ9aX0pKX0obCksZnVuY3Rpb24odCl7dC5hdHRyKCJ3aWR0aCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNvbHVtbi5jb2x1bW5XaWR0aH0pKS5hdHRyKCJzdHJva2Utd2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5jZWxsQm9yZGVyV2lkdGh9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcyk7ZC5zdHJva2UoZSxUKHQuY2FsY2RhdGEuY2VsbHMubGluZS5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKSxkLmZpbGwoZSxUKHQuY2FsY2RhdGEuY2VsbHMuZmlsbC5jb2xvcix0LmNvbHVtbi5zcGVjSW5kZXgsdC5yb3dOdW1iZXIpKX0pKX0oZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFJlY3QpLmRhdGEoby5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNlbGxSZWN0LCEwKSxlfShsKSk7dmFyIGM9ZnVuY3Rpb24odCl7dmFyIGU9dC5zZWxlY3RBbGwoIi4iK24uY24uY2VsbFRleHQpLmRhdGEoby5yZXBlYXQsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleVdpdGhpbkJsb2NrfSkpO3JldHVybiBlLmVudGVyKCkuYXBwZW5kKCJ0ZXh0IikuY2xhc3NlZChuLmNuLmNlbGxUZXh0LCEwKS5zdHlsZSgiY3Vyc29yIiwoZnVuY3Rpb24oKXtyZXR1cm4iYXV0byJ9KSkub24oIm1vdXNlZG93biIsKGZ1bmN0aW9uKCl7aS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKX0pKSxlfShmdW5jdGlvbih0KXt2YXIgZT10LnNlbGVjdEFsbCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikuZGF0YShvLnJlcGVhdCwoZnVuY3Rpb24odCl7cmV0dXJuIHQua2V5V2l0aGluQmxvY2t9KSk7cmV0dXJuIGUuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24uY2VsbFRleHRIb2xkZXIsITApLnN0eWxlKCJzaGFwZS1yZW5kZXJpbmciLCJnZW9tZXRyaWNQcmVjaXNpb24iKSxlfShsKSk7IWZ1bmN0aW9uKHQpe3QuZWFjaCgoZnVuY3Rpb24odCl7cy5mb250KGkuc2VsZWN0KHRoaXMpLHQuZm9udCl9KSl9KGMpLF8oYyxlLGEsdCkseihsKX1mdW5jdGlvbiBfKHQsZSxyLG8pe3QudGV4dCgoZnVuY3Rpb24odCl7dmFyIGU9dC5jb2x1bW4uc3BlY0luZGV4LHI9dC5yb3dOdW1iZXIsaT10LnZhbHVlLG89InN0cmluZyI9PXR5cGVvZiBpLHM9byYmaS5tYXRjaCgvPGJyPi9pKSxsPSFvfHxzO3QubWF5SGF2ZU1hcmt1cD1vJiZpLm1hdGNoKC9bPCY+XS8pO3ZhciBjLHU9InN0cmluZyI9PXR5cGVvZihjPWkpJiZjLm1hdGNoKG4ubGF0ZXhDaGVjayk7dC5sYXRleD11O3ZhciBmLGgscD11PyIiOlQodC5jYWxjZGF0YS5jZWxscy5wcmVmaXgsZSxyKXx8IiIsZD11PyIiOlQodC5jYWxjZGF0YS5jZWxscy5zdWZmaXgsZSxyKXx8IiIsbT11P251bGw6VCh0LmNhbGNkYXRhLmNlbGxzLmZvcm1hdCxlLHIpfHxudWxsLGc9cCsobT9hKG0pKHQudmFsdWUpOnQudmFsdWUpK2Q7aWYodC53cmFwcGluZ05lZWRlZD0hdC53cmFwcGVkJiYhbCYmIXUmJihmPXcoZykpLHQuY2VsbEhlaWdodE1heUluY3JlYXNlPXN8fHV8fHQubWF5SGF2ZU1hcmt1cHx8KHZvaWQgMD09PWY/dyhnKTpmKSx0Lm5lZWRzQ29udmVydFRvVHNwYW5zPXQubWF5SGF2ZU1hcmt1cHx8dC53cmFwcGluZ05lZWRlZHx8dC5sYXRleCx0LndyYXBwaW5nTmVlZGVkKXt2YXIgdj0oIiAiPT09bi53cmFwU3BsaXRDaGFyYWN0ZXI/Zy5yZXBsYWNlKC88YSBocmVmPS9naSwiPGFfaHJlZj0iKTpnKS5zcGxpdChuLndyYXBTcGxpdENoYXJhY3RlcikseT0iICI9PT1uLndyYXBTcGxpdENoYXJhY3Rlcj92Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvPGFfaHJlZj0vZ2ksIjxhIGhyZWY9Iil9KSk6djt0LmZyYWdtZW50cz15Lm1hcCgoZnVuY3Rpb24odCl7cmV0dXJue3RleHQ6dCx3aWR0aDpudWxsfX0pKSx0LmZyYWdtZW50cy5wdXNoKHtmcmFnbWVudDpuLndyYXBTcGFjZXIsd2lkdGg6bnVsbH0pLGg9eS5qb2luKG4ubGluZUJyZWFrZXIpK24ubGluZUJyZWFrZXIrbi53cmFwU3BhY2VyfWVsc2UgZGVsZXRlIHQuZnJhZ21lbnRzLGg9ZztyZXR1cm4gaH0pKS5hdHRyKCJkeSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZWRzQ29udmVydFRvVHNwYW5zPzA6IjAuNzVlbSJ9KSkuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGE9aS5zZWxlY3QodGhpcykscz10LndyYXBwaW5nTmVlZGVkP1A6STt0Lm5lZWRzQ29udmVydFRvVHNwYW5zP2wuY29udmVydFRvVHNwYW5zKGEsbyxzKHIsdGhpcyxlLG8sdCkpOmkuc2VsZWN0KHRoaXMucGFyZW50Tm9kZSkuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUoTyh0KSxuLmNlbGxQYWQpfSkpLmF0dHIoInRleHQtYW5jaG9yIiwoZnVuY3Rpb24odCl7cmV0dXJue2xlZnQ6InN0YXJ0IixjZW50ZXI6Im1pZGRsZSIscmlnaHQ6ImVuZCJ9W3QuYWxpZ25dfSkpfSkpfWZ1bmN0aW9uIHcodCl7cmV0dXJuLTEhPT10LmluZGV4T2Yobi53cmFwU3BsaXRDaGFyYWN0ZXIpfWZ1bmN0aW9uIFQodCxlLHIpe2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciBuPXRbTWF0aC5taW4oZSx0Lmxlbmd0aC0xKV07cmV0dXJuIEFycmF5LmlzQXJyYXkobik/bltNYXRoLm1pbihyLG4ubGVuZ3RoLTEpXTpufXJldHVybiB0fWZ1bmN0aW9uIGsodCxlLHIpe3QudHJhbnNpdGlvbigpLmVhc2Uobi5yZWxlYXNlVHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4ucmVsZWFzZVRyYW5zaXRpb25EdXJhdGlvbikuYXR0cigidHJhbnNmb3JtIix1KGUueCxyKSl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4iY2VsbHMiPT09dC50eXBlfWZ1bmN0aW9uIE0odCl7cmV0dXJuImhlYWRlciI9PT10LnR5cGV9ZnVuY3Rpb24gUyh0KXtyZXR1cm4odC5yb3dCbG9ja3MubGVuZ3RoP3Qucm93QmxvY2tzWzBdLmF1eGlsaWFyeUJsb2NrczpbXSkucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiB0K1IoZSwxLzApfSksMCl9ZnVuY3Rpb24gRSh0LGUscil7dmFyIG49eShlKVswXTtpZih2b2lkIDAhPT1uKXt2YXIgaT1uLnJvd0Jsb2NrcyxhPW4uY2FsY2RhdGEsbz1EKGksaS5sZW5ndGgpLHM9bi5jYWxjZGF0YS5ncm91cEhlaWdodC1TKG4pLGw9YS5zY3JvbGxZPU1hdGgubWF4KDAsTWF0aC5taW4oby1zLGEuc2Nyb2xsWSkpLGM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1bXSxpPTAsYT0wO2E8dC5sZW5ndGg7YSsrKXtmb3IodmFyIG89dFthXSxzPW8ucm93cyxsPTAsYz0wO2M8cy5sZW5ndGg7YysrKWwrPXNbY10ucm93SGVpZ2h0O28uYWxsUm93c0hlaWdodD1sO2U8aStsJiZlK3I+aSYmbi5wdXNoKGEpLGkrPWx9cmV0dXJuIG59KGksbCxzKTsxPT09Yy5sZW5ndGgmJihjWzBdPT09aS5sZW5ndGgtMT9jLnVuc2hpZnQoY1swXS0xKTpjLnB1c2goY1swXSsxKSksY1swXSUyJiZjLnJldmVyc2UoKSxlLmVhY2goKGZ1bmN0aW9uKHQsZSl7dC5wYWdlPWNbZV0sdC5zY3JvbGxZPWx9KSksZS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXt2YXIgZT1EKHQucm93QmxvY2tzLHQucGFnZSktdC5zY3JvbGxZO3JldHVybiB1KDAsZSl9KSksdCYmKEModCxyLGUsYyxuLnByZXZQYWdlcyxuLDApLEModCxyLGUsYyxuLnByZXZQYWdlcyxuLDEpLHgocix0KSl9fWZ1bmN0aW9uIEwodCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKG8pe3ZhciBzPW8uY2FsY2RhdGE/by5jYWxjZGF0YTpvLGw9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBzLmtleT09PXQua2V5fSkpLGM9cnx8cy5zY3JvbGxiYXJTdGF0ZS5kcmFnTXVsdGlwbGllcix1PXMuc2Nyb2xsWTtzLnNjcm9sbFk9dm9pZCAwPT09YT9zLnNjcm9sbFkrYyppLmV2ZW50LmR5OmE7dmFyIGY9bC5zZWxlY3RBbGwoIi4iK24uY24ueUNvbHVtbikuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJsb2NrKS5maWx0ZXIoQSk7cmV0dXJuIEUodCxmLGwpLHMuc2Nyb2xsWT09PXV9fWZ1bmN0aW9uIEModCxlLHIsbixpLGEsbyl7bltvXSE9PWlbb10mJihjbGVhclRpbWVvdXQoYS5jdXJyZW50UmVwYWludFtvXSksYS5jdXJyZW50UmVwYWludFtvXT1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3ZhciBhPXIuZmlsdGVyKChmdW5jdGlvbih0LGUpe3JldHVybiBlPT09byYmbltlXSE9PWlbZV19KSk7Yih0LGUsYSxyKSxpW29dPW5bb119KSkpfWZ1bmN0aW9uIFAodCxlLHIsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG89aS5zZWxlY3QoZS5wYXJlbnROb2RlKTtvLmVhY2goKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZnJhZ21lbnRzO28uc2VsZWN0QWxsKCJ0c3Bhbi5saW5lIikuZWFjaCgoZnVuY3Rpb24odCxyKXtlW3JdLndpZHRoPXRoaXMuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCl9KSk7dmFyIHIsaSxhPWVbZS5sZW5ndGgtMV0ud2lkdGgscz1lLnNsaWNlKDAsLTEpLGw9W10sYz0wLHU9dC5jb2x1bW4uY29sdW1uV2lkdGgtMipuLmNlbGxQYWQ7Zm9yKHQudmFsdWU9IiI7cy5sZW5ndGg7KWMrKGk9KHI9cy5zaGlmdCgpKS53aWR0aCthKT51JiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikrbi5saW5lQnJlYWtlcixsPVtdLGM9MCksbC5wdXNoKHIudGV4dCksYys9aTtjJiYodC52YWx1ZSs9bC5qb2luKG4ud3JhcFNwYWNlcikpLHQud3JhcHBlZD0hMH0pKSxvLnNlbGVjdEFsbCgidHNwYW4ubGluZSIpLnJlbW92ZSgpLF8oby5zZWxlY3QoIi4iK24uY24uY2VsbFRleHQpLHIsdCxhKSxpLnNlbGVjdChlLnBhcmVudE5vZGUucGFyZW50Tm9kZSkuY2FsbCh6KX19ZnVuY3Rpb24gSSh0LGUscixhLG8pe3JldHVybiBmdW5jdGlvbigpe2lmKCFvLnNldHRsZWRZKXt2YXIgcz1pLnNlbGVjdChlLnBhcmVudE5vZGUpLGw9QihvKSxjPW8ua2V5LWwuZmlyc3RSb3dJbmRleCxmPWwucm93c1tjXS5yb3dIZWlnaHQsaD1vLmNlbGxIZWlnaHRNYXlJbmNyZWFzZT9lLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KzIqbi5jZWxsUGFkOmYscD1NYXRoLm1heChoLGYpO3AtbC5yb3dzW2NdLnJvd0hlaWdodCYmKGwucm93c1tjXS5yb3dIZWlnaHQ9cCx0LnNlbGVjdEFsbCgiLiIrbi5jbi5jb2x1bW5DZWxsKS5jYWxsKHopLEUobnVsbCx0LmZpbHRlcihBKSwwKSx4KHIsYSwhMCkpLHMuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBhcmVudE5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZT1pLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdCgiLiIrbi5jbi5jZWxsUmVjdCkubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHI9dGhpcy50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpLGE9ZS50b3AtdC50b3ArKHI/ci5tYXRyaXguZjpuLmNlbGxQYWQpO3JldHVybiB1KE8obyxpLnNlbGVjdCh0aGlzLnBhcmVudE5vZGUpLnNlbGVjdCgiLiIrbi5jbi5jZWxsVGV4dEhvbGRlcikubm9kZSgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKSxhKX0pKSxvLnNldHRsZWRZPSEwfX19ZnVuY3Rpb24gTyh0LGUpe3N3aXRjaCh0LmFsaWduKXtjYXNlImxlZnQiOnJldHVybiBuLmNlbGxQYWQ7Y2FzZSJyaWdodCI6cmV0dXJuIHQuY29sdW1uLmNvbHVtbldpZHRoLShlfHwwKS1uLmNlbGxQYWQ7Y2FzZSJjZW50ZXIiOnJldHVybih0LmNvbHVtbi5jb2x1bW5XaWR0aC0oZXx8MCkpLzI7ZGVmYXVsdDpyZXR1cm4gbi5jZWxsUGFkfX1mdW5jdGlvbiB6KHQpe3QuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9dC5yb3dCbG9ja3NbMF0uYXV4aWxpYXJ5QmxvY2tzLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCtSKGUsMS8wKX0pLDApLHI9UihCKHQpLHQua2V5KTtyZXR1cm4gdSgwLHIrZSl9KSkuc2VsZWN0QWxsKCIuIituLmNuLmNlbGxSZWN0KS5hdHRyKCJoZWlnaHQiLChmdW5jdGlvbih0KXtyZXR1cm4oZT1CKHQpLHI9dC5rZXksZS5yb3dzW3ItZS5maXJzdFJvd0luZGV4XSkucm93SGVpZ2h0O3ZhciBlLHJ9KSl9ZnVuY3Rpb24gRCh0LGUpe2Zvcih2YXIgcj0wLG49ZS0xO24+PTA7bi0tKXIrPUYodFtuXSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPHQucm93cy5sZW5ndGgmJnQucm93c1tuXS5yb3dJbmRleDxlO24rKylyKz10LnJvd3Nbbl0ucm93SGVpZ2h0O3JldHVybiByfWZ1bmN0aW9uIEYodCl7dmFyIGU9dC5hbGxSb3dzSGVpZ2h0O2lmKHZvaWQgMCE9PWUpcmV0dXJuIGU7Zm9yKHZhciByPTAsbj0wO248dC5yb3dzLmxlbmd0aDtuKyspcis9dC5yb3dzW25dLnJvd0hlaWdodDtyZXR1cm4gdC5hbGxSb3dzSGVpZ2h0PXIscn1mdW5jdGlvbiBCKHQpe3JldHVybiB0LnJvd0Jsb2Nrc1t0LnBhZ2VdfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPSF0Ll9jb250ZXh0LnN0YXRpY1Bsb3QsYT10Ll9mdWxsTGF5b3V0Ll9wYXBlci5zZWxlY3RBbGwoIi4iK24uY24udGFibGUpLmRhdGEoZS5tYXAoKGZ1bmN0aW9uKGUpe3ZhciByPW8udW53cmFwKGUpLnRyYWNlO3JldHVybiBoKHQscil9KSksby5rZXlGdW4pO2EuZXhpdCgpLnJlbW92ZSgpLGEuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24udGFibGUsITApLmF0dHIoIm92ZXJmbG93IiwidmlzaWJsZSIpLnN0eWxlKCJib3gtc2l6aW5nIiwiY29udGVudC1ib3giKS5zdHlsZSgicG9zaXRpb24iLCJhYnNvbHV0ZSIpLnN0eWxlKCJsZWZ0IiwwKS5zdHlsZSgib3ZlcmZsb3ciLCJ2aXNpYmxlIikuc3R5bGUoInNoYXBlLXJlbmRlcmluZyIsImNyaXNwRWRnZXMiKS5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKSxhLmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGgrdC5zaXplLmwrdC5zaXplLnJ9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K3Quc2l6ZS50K3Quc2l6ZS5ifSkpLmF0dHIoInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3JldHVybiB1KHQudHJhbnNsYXRlWCx0LnRyYW5zbGF0ZVkpfSkpO3ZhciBsPWEuc2VsZWN0QWxsKCIuIituLmNuLnRhYmxlQ29udHJvbFZpZXcpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pLGQ9bC5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi50YWJsZUNvbnRyb2xWaWV3LCEwKS5zdHlsZSgiYm94LXNpemluZyIsImNvbnRlbnQtYm94Iik7aWYocil7dmFyIF89Im9ud2hlZWwiaW4gZG9jdW1lbnQ/IndoZWVsIjoibW91c2V3aGVlbCI7ZC5vbigibW91c2Vtb3ZlIiwoZnVuY3Rpb24oZSl7bC5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dH0pKS5jYWxsKHgsdCl9KSkub24oXywoZnVuY3Rpb24oZSl7aWYoIWUuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmcpe2Uuc2Nyb2xsYmFyU3RhdGUud2hlZWxpbmc9ITA7dmFyIHI9ZS5zY3JvbGxZK2kuZXZlbnQuZGVsdGFZO0wodCxsLG51bGwscikoZSl8fChpLmV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLGkuZXZlbnQucHJldmVudERlZmF1bHQoKSksZS5zY3JvbGxiYXJTdGF0ZS53aGVlbGluZz0hMX19KSkuY2FsbCh4LHQsITApfWwuYXR0cigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7cmV0dXJuIHUodC5zaXplLmwsdC5zaXplLnQpfSkpO3ZhciB3PWwuc2VsZWN0QWxsKCIuIituLmNuLnNjcm9sbEJhY2tncm91bmQpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO3cuZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQmFja2dyb3VuZCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSx3LmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQud2lkdGh9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0fSkpLGwuZWFjaCgoZnVuY3Rpb24oZSl7cy5zZXRDbGlwVXJsKGkuc2VsZWN0KHRoaXMpLGcodCxlKSx0KX0pKTt2YXIgVD1sLnNlbGVjdEFsbCgiLiIrbi5jbi55Q29sdW1uKS5kYXRhKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jb2x1bW5zfSksby5rZXlGdW4pO1QuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKG4uY24ueUNvbHVtbiwhMCksVC5leGl0KCkucmVtb3ZlKCksVC5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngsMCl9KSksciYmVC5jYWxsKGkuYmVoYXZpb3IuZHJhZygpLm9yaWdpbigoZnVuY3Rpb24oZSl7cmV0dXJuIGsoaS5zZWxlY3QodGhpcyksZSwtbi51cGxpZnQpLGModGhpcyksZS5jYWxjZGF0YS5jb2x1bW5EcmFnSW5Qcm9ncmVzcz0hMCx4KGwuZmlsdGVyKChmdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxjZGF0YS5rZXk9PT10LmtleX0pKSx0KSxlfSkpLm9uKCJkcmFnIiwoZnVuY3Rpb24odCl7dmFyIGU9aS5zZWxlY3QodGhpcykscj1mdW5jdGlvbihlKXtyZXR1cm4odD09PWU/aS5ldmVudC54OmUueCkrZS5jb2x1bW5XaWR0aC8yfTt0Lng9TWF0aC5tYXgoLW4ub3ZlcmRyYWcsTWF0aC5taW4odC5jYWxjZGF0YS53aWR0aCtuLm92ZXJkcmFnLXQuY29sdW1uV2lkdGgsaS5ldmVudC54KSkseShUKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNhbGNkYXRhLmtleT09PXQuY2FsY2RhdGEua2V5fSkpLnNvcnQoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIodCktcihlKX0pKS5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2UueEluZGV4PXIsZS54PXQ9PT1lP2UueDplLnhTY2FsZShlKX0pKSxULmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIHQhPT1lfSkpLnRyYW5zaXRpb24oKS5lYXNlKG4udHJhbnNpdGlvbkVhc2UpLmR1cmF0aW9uKG4udHJhbnNpdGlvbkR1cmF0aW9uKS5hdHRyKCJ0cmFuc2Zvcm0iLChmdW5jdGlvbih0KXtyZXR1cm4gdSh0LngsMCl9KSksZS5jYWxsKGYpLmF0dHIoInRyYW5zZm9ybSIsdSh0LngsLW4udXBsaWZ0KSl9KSkub24oImRyYWdlbmQiLChmdW5jdGlvbihlKXt2YXIgcj1pLnNlbGVjdCh0aGlzKSxuPWUuY2FsY2RhdGE7ZS54PWUueFNjYWxlKGUpLGUuY2FsY2RhdGEuY29sdW1uRHJhZ0luUHJvZ3Jlc3M9ITEsayhyLGUsMCksZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUuZ2RDb2x1bW5zT3JpZ2luYWxPcmRlcjtlLmdkQ29sdW1ucy5zb3J0KChmdW5jdGlvbih0LGUpe3JldHVybiByW24uaW5kZXhPZih0KV0tcltuLmluZGV4T2YoZSldfSkpLGUuY29sdW1ub3JkZXI9cix0LmVtaXQoInBsb3RseV9yZXN0eWxlIil9KHQsbixuLmNvbHVtbnMubWFwKChmdW5jdGlvbih0KXtyZXR1cm4gdC54SW5kZXh9KSkpfSkpKSxULmVhY2goKGZ1bmN0aW9uKGUpe3Muc2V0Q2xpcFVybChpLnNlbGVjdCh0aGlzKSx2KHQsZSksdCl9KSk7dmFyIFM9VC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQmxvY2spLmRhdGEocC5zcGxpdFRvUGFuZWxzLG8ua2V5RnVuKTtTLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZChuLmNuLmNvbHVtbkJsb2NrLCEwKS5hdHRyKCJpZCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmtleX0pKSxTLnN0eWxlKCJjdXJzb3IiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5kcmFnSGFuZGxlPyJldy1yZXNpemUiOnQuY2FsY2RhdGEuc2Nyb2xsYmFyU3RhdGUuYmFyV2lnZ2xlUm9vbT8ibnMtcmVzaXplIjoiZGVmYXVsdCJ9KSk7dmFyIEM9Uy5maWx0ZXIoTSksUD1TLmZpbHRlcihBKTtyJiZQLmNhbGwoaS5iZWhhdmlvci5kcmFnKCkub3JpZ2luKChmdW5jdGlvbih0KXtyZXR1cm4gaS5ldmVudC5zdG9wUHJvcGFnYXRpb24oKSx0fSkpLm9uKCJkcmFnIixMKHQsbCwtMSkpLm9uKCJkcmFnZW5kIiwoZnVuY3Rpb24oKXt9KSkpLGIodCxsLEMsUyksYih0LGwsUCxTKTt2YXIgST1sLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7SS5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXAsITApLmF0dHIoImlkIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGcodCxlKX0pKTt2YXIgTz1JLnNlbGVjdEFsbCgiLiIrbi5jbi5zY3JvbGxBcmVhQ2xpcFJlY3QpLmRhdGEoby5yZXBlYXQsby5rZXlGdW4pO08uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5jbGFzc2VkKG4uY24uc2Nyb2xsQXJlYUNsaXBSZWN0LCEwKS5hdHRyKCJ4Iiwtbi5vdmVyZHJhZykuYXR0cigieSIsLW4udXBsaWZ0KS5hdHRyKCJmaWxsIiwibm9uZSIpLE8uYXR0cigid2lkdGgiLChmdW5jdGlvbih0KXtyZXR1cm4gdC53aWR0aCsyKm4ub3ZlcmRyYWd9KSkuYXR0cigiaGVpZ2h0IiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuaGVpZ2h0K24udXBsaWZ0fSkpLFQuc2VsZWN0QWxsKCIuIituLmNuLmNvbHVtbkJvdW5kYXJ5KS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKS5lbnRlcigpLmFwcGVuZCgiZyIpLmNsYXNzZWQobi5jbi5jb2x1bW5Cb3VuZGFyeSwhMCk7dmFyIHo9VC5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCkuZGF0YShvLnJlcGVhdCxvLmtleUZ1bik7ei5lbnRlcigpLmFwcGVuZCgiY2xpcFBhdGgiKS5jbGFzc2VkKG4uY24uY29sdW1uQm91bmRhcnlDbGlwcGF0aCwhMCksei5hdHRyKCJpZCIsKGZ1bmN0aW9uKGUpe3JldHVybiB2KHQsZSl9KSk7dmFyIEQ9ei5zZWxlY3RBbGwoIi4iK24uY24uY29sdW1uQm91bmRhcnlSZWN0KS5kYXRhKG8ucmVwZWF0LG8ua2V5RnVuKTtELmVudGVyKCkuYXBwZW5kKCJyZWN0IikuY2xhc3NlZChuLmNuLmNvbHVtbkJvdW5kYXJ5UmVjdCwhMCkuYXR0cigiZmlsbCIsIm5vbmUiKSxELmF0dHIoIndpZHRoIiwoZnVuY3Rpb24odCl7cmV0dXJuIHQuY29sdW1uV2lkdGgrMiptKHQpfSkpLmF0dHIoImhlaWdodCIsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNhbGNkYXRhLmhlaWdodCsyKm0odCkrbi51cGxpZnR9KSkuYXR0cigieCIsKGZ1bmN0aW9uKHQpe3JldHVybi1tKHQpfSkpLmF0dHIoInkiLChmdW5jdGlvbih0KXtyZXR1cm4tbSh0KX0pKSxFKG51bGwsUCxsKX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9ndXAiOjc3MywiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4vY29uc3RhbnRzIjoxMzIzLCIuL2RhdGFfcHJlcGFyYXRpb25faGVscGVyIjoxMzI0LCIuL2RhdGFfc3BsaXRfaGVscGVycyI6MTMyNSwiQHBsb3RseS9kMyI6NTh9XSwxMzI5OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsaT10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLG89dCgiLi4vLi4vcGxvdHMvZG9tYWluIikuYXR0cmlidXRlcyxzPXQoIi4uL3BpZS9hdHRyaWJ1dGVzIiksbD10KCIuLi9zdW5idXJzdC9hdHRyaWJ1dGVzIiksYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQ7ZS5leHBvcnRzPXtsYWJlbHM6bC5sYWJlbHMscGFyZW50czpsLnBhcmVudHMsdmFsdWVzOmwudmFsdWVzLGJyYW5jaHZhbHVlczpsLmJyYW5jaHZhbHVlcyxjb3VudDpsLmNvdW50LGxldmVsOmwubGV2ZWwsbWF4ZGVwdGg6bC5tYXhkZXB0aCx0aWxpbmc6e3BhY2tpbmc6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNxdWFyaWZ5IiwiYmluYXJ5IiwiZGljZSIsInNsaWNlIiwic2xpY2UtZGljZSIsImRpY2Utc2xpY2UiXSxkZmx0OiJzcXVhcmlmeSIsZWRpdFR5cGU6InBsb3QifSxzcXVhcmlmeXJhdGlvOnt2YWxUeXBlOiJudW1iZXIiLG1pbjoxLGRmbHQ6MSxlZGl0VHlwZToicGxvdCJ9LGZsaXA6e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbIngiLCJ5Il0sZGZsdDoiIixlZGl0VHlwZToicGxvdCJ9LHBhZDp7dmFsVHlwZToibnVtYmVyIixtaW46MCxkZmx0OjMsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LG1hcmtlcjp1KHtwYWQ6e3Q6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxsOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJwbG90In0scjp7dmFsVHlwZToibnVtYmVyIixtaW46MCxlZGl0VHlwZToicGxvdCJ9LGI6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZWRpdFR5cGU6InBsb3QifSxlZGl0VHlwZToiY2FsYyJ9LGNvbG9yczpsLm1hcmtlci5jb2xvcnMsZGVwdGhmYWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyEwLCExLCJyZXZlcnNlZCJdLGVkaXRUeXBlOiJzdHlsZSJ9LGxpbmU6bC5tYXJrZXIubGluZSxlZGl0VHlwZToiY2FsYyJ9LGEoIm1hcmtlciIse2NvbG9yQXR0cjoiY29sb3JzIixhbmltOiExfSkpLHBhdGhiYXI6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6InBsb3QifSxzaWRlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AiLCJib3R0b20iXSxkZmx0OiJ0b3AiLGVkaXRUeXBlOiJwbG90In0sZWRnZXNoYXBlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyI+IiwiPCIsInwiLCIvIiwiXFwiXSxkZmx0OiI+IixlZGl0VHlwZToicGxvdCJ9LHRoaWNrbmVzczp7dmFsVHlwZToibnVtYmVyIixtaW46MTIsZWRpdFR5cGU6InBsb3QifSx0ZXh0Zm9udDp1KHt9LHMudGV4dGZvbnQse30pLGVkaXRUeXBlOiJjYWxjIn0sdGV4dDpzLnRleHQsdGV4dGluZm86bC50ZXh0aW5mbyx0ZXh0dGVtcGxhdGU6aSh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiLCJ2YWx1ZSJdKX0pLGhvdmVydGV4dDpzLmhvdmVydGV4dCxob3ZlcmluZm86bC5ob3ZlcmluZm8saG92ZXJ0ZW1wbGF0ZTpuKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLHRleHRmb250OnMudGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6cy5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6dSh7fSxzLm91dHNpZGV0ZXh0Zm9udCx7fSksdGV4dHBvc2l0aW9uOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ0b3AgbGVmdCIsInRvcCBjZW50ZXIiLCJ0b3AgcmlnaHQiLCJtaWRkbGUgbGVmdCIsIm1pZGRsZSBjZW50ZXIiLCJtaWRkbGUgcmlnaHQiLCJib3R0b20gbGVmdCIsImJvdHRvbSBjZW50ZXIiLCJib3R0b20gcmlnaHQiXSxkZmx0OiJ0b3AgbGVmdCIsZWRpdFR5cGU6InBsb3QifSxzb3J0OnMuc29ydCxyb290Omwucm9vdCxkb21haW46byh7bmFtZToidHJlZW1hcCIsdHJhY2U6ITAsZWRpdFR5cGU6ImNhbGMifSl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdHMvZG9tYWluIjo4NTUsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vcGllL2F0dHJpYnV0ZXMiOjExNjUsIi4uL3N1bmJ1cnN0L2F0dHJpYnV0ZXMiOjEzMDMsIi4vY29uc3RhbnRzIjoxMzMyfV0sMTMzMDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9wbG90cy9wbG90cyIpO3IubmFtZT0idHJlZW1hcCIsci5wbG90PWZ1bmN0aW9uKHQsZSxpLGEpe24ucGxvdEJhc2VQbG90KHIubmFtZSx0LGUsaSxhKX0sci5jbGVhbj1mdW5jdGlvbih0LGUsaSxhKXtuLmNsZWFuQmFzZVBsb3Qoci5uYW1lLHQsZSxpLGEpfX0seyIuLi8uLi9wbG90cy9wbG90cyI6ODkwfV0sMTMzMTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9zdW5idXJzdC9jYWxjIik7ci5jYWxjPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uY2FsYyh0LGUpfSxyLmNyb3NzVHJhY2VDYWxjPWZ1bmN0aW9uKHQpe3JldHVybiBuLl9ydW5Dcm9zc1RyYWNlQ2FsYygidHJlZW1hcCIsdCl9fSx7Ii4uL3N1bmJ1cnN0L2NhbGMiOjEzMDV9XSwxMzMyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17Q0xJQ0tfVFJBTlNJVElPTl9USU1FOjc1MCxDTElDS19UUkFOU0lUSU9OX0VBU0lORzoicG9seSIsZXZlbnREYXRhS2V5czpbImN1cnJlbnRQYXRoIiwicm9vdCIsImVudHJ5IiwicGVyY2VudFJvb3QiLCJwZXJjZW50RW50cnkiLCJwZXJjZW50UGFyZW50Il0sZ2FwV2l0aFBhdGhiYXI6MX19LHt9XSwxMzMzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksbz10KCIuLi8uLi9wbG90cy9kb21haW4iKS5kZWZhdWx0cyxzPXQoIi4uL2Jhci9kZWZhdWx0cyIpLmhhbmRsZVRleHQsbD10KCIuLi9iYXIvY29uc3RhbnRzIikuVEVYVFBBRCxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSIpLHU9Yy5oYXNDb2xvcnNjYWxlLGY9Yy5oYW5kbGVEZWZhdWx0cztlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyl7ZnVuY3Rpb24gaChyLGEpe3JldHVybiBuLmNvZXJjZSh0LGUsaSxyLGEpfXZhciBwPWgoImxhYmVscyIpLGQ9aCgicGFyZW50cyIpO2lmKHAmJnAubGVuZ3RoJiZkJiZkLmxlbmd0aCl7dmFyIG09aCgidmFsdWVzIik7bSYmbS5sZW5ndGg/aCgiYnJhbmNodmFsdWVzIik6aCgiY291bnQiKSxoKCJsZXZlbCIpLGgoIm1heGRlcHRoIiksInNxdWFyaWZ5Ij09PWgoInRpbGluZy5wYWNraW5nIikmJmgoInRpbGluZy5zcXVhcmlmeXJhdGlvIiksaCgidGlsaW5nLmZsaXAiKSxoKCJ0aWxpbmcucGFkIik7dmFyIGc9aCgidGV4dCIpO2goInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxoKCJ0ZXh0aW5mbyIsQXJyYXkuaXNBcnJheShnKT8idGV4dCtsYWJlbCI6ImxhYmVsIiksaCgiaG92ZXJ0ZXh0IiksaCgiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB2PWgoInBhdGhiYXIudmlzaWJsZSIpO3ModCxlLGMsaCwiYXV0byIse2hhc1BhdGhiYXI6dixtb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMSxtb2R1bGVIYXNDbGlwb25heGlzOiExLG1vZHVsZUhhc1RleHRhbmdsZTohMSxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITF9KSxoKCJ0ZXh0cG9zaXRpb24iKTt2YXIgeT0tMSE9PWUudGV4dHBvc2l0aW9uLmluZGV4T2YoImJvdHRvbSIpO2goIm1hcmtlci5saW5lLndpZHRoIikmJmgoIm1hcmtlci5saW5lLmNvbG9yIixjLnBhcGVyX2JnY29sb3IpO3ZhciB4PWgoIm1hcmtlci5jb2xvcnMiKTsoZS5faGFzQ29sb3JzY2FsZT11KHQsIm1hcmtlciIsImNvbG9ycyIpfHwodC5tYXJrZXJ8fHt9KS5jb2xvcmF4aXMpP2YodCxlLGMsaCx7cHJlZml4OiJtYXJrZXIuIixjTGV0dGVyOiJjIn0pOmgoIm1hcmtlci5kZXB0aGZhZGUiLCEoeHx8W10pLmxlbmd0aCk7dmFyIGI9MiplLnRleHRmb250LnNpemU7aCgibWFya2VyLnBhZC50Iix5P2IvNDpiKSxoKCJtYXJrZXIucGFkLmwiLGIvNCksaCgibWFya2VyLnBhZC5yIixiLzQpLGgoIm1hcmtlci5wYWQuYiIseT9iOmIvNCksZS5faG92ZXJlZD17bWFya2VyOntsaW5lOnt3aWR0aDoyLGNvbG9yOmEuY29udHJhc3QoYy5wYXBlcl9iZ2NvbG9yKX19fSx2JiYoaCgicGF0aGJhci50aGlja25lc3MiLGUucGF0aGJhci50ZXh0Zm9udC5zaXplKzIqbCksaCgicGF0aGJhci5zaWRlIiksaCgicGF0aGJhci5lZGdlc2hhcGUiKSksaCgic29ydCIpLGgoInJvb3QuY29sb3IiKSxvKGUsYyxoKSxlLl9sZW5ndGg9bnVsbH1lbHNlIGUudmlzaWJsZT0hMX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiOjY1MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2RvbWFpbiI6ODU1LCIuLi9iYXIvY29uc3RhbnRzIjo5MTYsIi4uL2Jhci9kZWZhdWx0cyI6OTE4LCIuL2F0dHJpYnV0ZXMiOjEzMjl9XSwxMzM0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxhPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5jbGVhck1pblRleHRTaXplLG89dCgiLi4vYmFyL3N0eWxlIikucmVzaXplVGV4dCxzPXQoIi4vcGxvdF9vbmUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsbCxjKXt2YXIgdSxmLGg9Yy50eXBlLHA9Yy5kcmF3RGVzY2VuZGFudHMsZD10Ll9mdWxsTGF5b3V0LG09ZFsiXyIraCsibGF5ZXIiXSxnPSFyOyhhKGgsZCksKHU9bS5zZWxlY3RBbGwoImcudHJhY2UuIitoKS5kYXRhKGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLnVpZH0pKSkuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJ0cmFjZSIsITApLmNsYXNzZWQoaCwhMCksdS5vcmRlcigpLCFkLnVuaWZvcm10ZXh0Lm1vZGUmJmkuaGFzVHJhbnNpdGlvbihyKSk/KGwmJihmPWwoKSksbi50cmFuc2l0aW9uKCkuZHVyYXRpb24oci5kdXJhdGlvbikuZWFzZShyLmVhc2luZykuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXtmJiZmKCl9KSkuZWFjaCgiaW50ZXJydXB0IiwoZnVuY3Rpb24oKXtmJiZmKCl9KSkuZWFjaCgoZnVuY3Rpb24oKXttLnNlbGVjdEFsbCgiZy50cmFjZSIpLmVhY2goKGZ1bmN0aW9uKGUpe3ModCxlLHRoaXMscixwKX0pKX0pKSk6KHUuZWFjaCgoZnVuY3Rpb24oZSl7cyh0LGUsdGhpcyxyLHApfSkpLGQudW5pZm9ybXRleHQubW9kZSYmbyh0LG0uc2VsZWN0QWxsKCIudHJhY2UiKSxoKSk7ZyYmdS5leGl0KCkucmVtb3ZlKCl9fSx7Ii4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIi4uL3N1bmJ1cnN0L2hlbHBlcnMiOjEzMDksIi4vcGxvdF9vbmUiOjEzNDMsIkBwbG90bHkvZDMiOjU4fV0sMTMzNTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9saWIiKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyIpLG89dCgiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIikscz10KCIuL3BhcnRpdGlvbiIpLGw9dCgiLi9zdHlsZSIpLnN0eWxlT25lLGM9dCgiLi9jb25zdGFudHMiKSx1PXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxmPXQoIi4uL3N1bmJ1cnN0L2Z4Iik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGgscCl7dmFyIGQ9cC5iYXJEaWZZLG09cC53aWR0aCxnPXAuaGVpZ2h0LHY9cC52aWV3WCx5PXAudmlld1kseD1wLnBhdGhTbGljZSxiPXAudG9Nb3ZlSW5zaWRlU2xpY2UsXz1wLnN0clRyYW5zZm9ybSx3PXAuaGFzVHJhbnNpdGlvbixUPXAuaGFuZGxlU2xpY2VzRXhpdCxrPXAubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLEE9cC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixNPXt9LFM9dC5fZnVsbExheW91dCxFPWVbMF0sTD1FLnRyYWNlLEM9RS5oaWVyYXJjaHksUD1tL0wuX2VudHJ5RGVwdGgsST11Lmxpc3RQYXRoKHIuZGF0YSwiaWQiKSxPPXMoQy5jb3B5KCksW20sZ10se3BhY2tpbmc6ImRpY2UiLHBhZDp7aW5uZXI6MCx0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH19KS5kZXNjZW5kYW50cygpOyhPPU8uZmlsdGVyKChmdW5jdGlvbih0KXt2YXIgZT1JLmluZGV4T2YodC5kYXRhLmlkKTtyZXR1cm4tMSE9PWUmJih0LngwPVAqZSx0LngxPVAqKGUrMSksdC55MD1kLHQueTE9ZCtnLHQub25QYXRoYmFyPSEwLCEwKX0pKSkucmV2ZXJzZSgpLChoPWguZGF0YShPLHUuZ2V0UHRJZCkpLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgicGF0aGJhciIsITApLFQoaCwhMCxNLFttLGddLHgpLGgub3JkZXIoKTt2YXIgej1oO3cmJih6PXoudHJhbnNpdGlvbigpLmVhY2goImVuZCIsKGZ1bmN0aW9uKCl7dmFyIGU9bi5zZWxlY3QodGhpcyk7dS5zZXRTbGljZUN1cnNvcihlLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzohMX0pfSkpKSx6LmVhY2goKGZ1bmN0aW9uKHMpe3MuX3gwPXYocy54MCkscy5feDE9dihzLngxKSxzLl95MD15KHMueTApLHMuX3kxPXkocy55MSkscy5faG92ZXJYPXYocy54MS1NYXRoLm1pbihtLGcpLzIpLHMuX2hvdmVyWT15KHMueTEtZy8yKTt2YXIgaD1uLnNlbGVjdCh0aGlzKSxwPWkuZW5zdXJlU2luZ2xlKGgsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTt3P3AudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCwhMCxNLFttLGddKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHgoZSh0KSl9fSkpOnAuYXR0cigiZCIseCksaC5jYWxsKGYscix0LGUse3N0eWxlT25lOmwsZXZlbnREYXRhS2V5czpjLmV2ZW50RGF0YUtleXMsdHJhbnNpdGlvblRpbWU6Yy5DTElDS19UUkFOU0lUSU9OX1RJTUUsdHJhbnNpdGlvbkVhc2luZzpjLkNMSUNLX1RSQU5TSVRJT05fRUFTSU5HfSkuY2FsbCh1LnNldFNsaWNlQ3Vyc29yLHQse2hpZGVPblJvb3Q6ITEsaGlkZU9uTGVhdmVzOiExLGlzVHJhbnNpdGlvbmluZzp0Ll90cmFuc2l0aW9uaW5nfSkscC5jYWxsKGwscyxMLHtob3ZlcmVkOiExfSkscy5fdGV4dD0odS5nZXRQdExhYmVsKHMpfHwiIikuc3BsaXQoIjxicj4iKS5qb2luKCIgIil8fCIiO3ZhciBkPWkuZW5zdXJlU2luZ2xlKGgsImciLCJzbGljZXRleHQiKSxUPWkuZW5zdXJlU2luZ2xlKGQsInRleHQiLCIiLChmdW5jdGlvbih0KXt0LmF0dHIoImRhdGEtbm90ZXgiLDEpfSkpLEU9aS5lbnN1cmVVbmlmb3JtRm9udFNpemUodCx1LmRldGVybWluZVRleHRGb250KEwscyxTLmZvbnQse29uUGF0aGJhcjohMH0pKTtULnRleHQocy5fdGV4dHx8IiAiKS5jbGFzc2VkKCJzbGljZXRleHQiLCEwKS5hdHRyKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IikuY2FsbChhLmZvbnQsRSkuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goVC5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6RS5zaXplLG9uUGF0aGJhcjohMH0pLHMudHJhbnNmb3JtLmZvbnRTaXplPUUuc2l6ZSx3P1QudHJhbnNpdGlvbigpLmF0dHJUd2VlbigidHJhbnNmb3JtIiwoZnVuY3Rpb24odCl7dmFyIGU9QSh0LCEwLE0sW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpKX19KSk6VC5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciOjY2MSwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyI6ODAyLCIuLi9zdW5idXJzdC9meCI6MTMwOCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi9jb25zdGFudHMiOjEzMzIsIi4vcGFydGl0aW9uIjoxMzQxLCIuL3N0eWxlIjoxMzQ0LCJAcGxvdGx5L2QzIjo1OH1dLDEzMzY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2xpYi9zdmdfdGV4dF91dGlscyIpLHM9dCgiLi9wYXJ0aXRpb24iKSxsPXQoIi4vc3R5bGUiKS5zdHlsZU9uZSxjPXQoIi4vY29uc3RhbnRzIiksdT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksZj10KCIuLi9zdW5idXJzdC9meCIpLGg9dCgiLi4vc3VuYnVyc3QvcGxvdCIpLmZvcm1hdFNsaWNlTGFiZWw7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHAsZCl7dmFyIG09ZC53aWR0aCxnPWQuaGVpZ2h0LHY9ZC52aWV3WCx5PWQudmlld1kseD1kLnBhdGhTbGljZSxiPWQudG9Nb3ZlSW5zaWRlU2xpY2UsXz1kLnN0clRyYW5zZm9ybSx3PWQuaGFzVHJhbnNpdGlvbixUPWQuaGFuZGxlU2xpY2VzRXhpdCxrPWQubWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yLEE9ZC5tYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcixNPWQucHJldkVudHJ5LFM9dC5fZnVsbExheW91dCxFPWVbMF0udHJhY2UsTD0tMSE9PUUudGV4dHBvc2l0aW9uLmluZGV4T2YoImxlZnQiKSxDPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigicmlnaHQiKSxQPS0xIT09RS50ZXh0cG9zaXRpb24uaW5kZXhPZigiYm90dG9tIiksST0hUCYmIUUubWFya2VyLnBhZC50fHxQJiYhRS5tYXJrZXIucGFkLmIsTz1zKHIsW20sZ10se3BhY2tpbmc6RS50aWxpbmcucGFja2luZyxzcXVhcmlmeXJhdGlvOkUudGlsaW5nLnNxdWFyaWZ5cmF0aW8sZmxpcFg6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ4Iik+LTEsZmxpcFk6RS50aWxpbmcuZmxpcC5pbmRleE9mKCJ5Iik+LTEscGFkOntpbm5lcjpFLnRpbGluZy5wYWQsdG9wOkUubWFya2VyLnBhZC50LGxlZnQ6RS5tYXJrZXIucGFkLmwscmlnaHQ6RS5tYXJrZXIucGFkLnIsYm90dG9tOkUubWFya2VyLnBhZC5ifX0pLmRlc2NlbmRhbnRzKCksej0xLzAsRD0tMS8wO08uZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9dC5kZXB0aDtlPj1FLl9tYXhEZXB0aD8odC54MD10LngxPSh0LngwK3QueDEpLzIsdC55MD10LnkxPSh0LnkwK3QueTEpLzIpOih6PU1hdGgubWluKHosZSksRD1NYXRoLm1heChELGUpKX0pKSxwPXAuZGF0YShPLHUuZ2V0UHRJZCksRS5fbWF4VmlzaWJsZUxheWVycz1pc0Zpbml0ZShEKT9ELXorMTowLHAuZW50ZXIoKS5hcHBlbmQoImciKS5jbGFzc2VkKCJzbGljZSIsITApLFQocCwhMSx7fSxbbSxnXSx4KSxwLm9yZGVyKCk7dmFyIFI9bnVsbDtpZih3JiZNKXt2YXIgRj11LmdldFB0SWQoTSk7cC5lYWNoKChmdW5jdGlvbih0KXtudWxsPT09UiYmdS5nZXRQdElkKHQpPT09RiYmKFI9e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9KX0pKX12YXIgQj1mdW5jdGlvbigpe3JldHVybiBSfHx7eDA6MCx4MTptLHkwOjAseTE6Z319LE49cDtyZXR1cm4gdyYmKE49Ti50cmFuc2l0aW9uKCkuZWFjaCgiZW5kIiwoZnVuY3Rpb24oKXt2YXIgZT1uLnNlbGVjdCh0aGlzKTt1LnNldFNsaWNlQ3Vyc29yKGUsdCx7aGlkZU9uUm9vdDohMCxoaWRlT25MZWF2ZXM6ITEsaXNUcmFuc2l0aW9uaW5nOiExfSl9KSkpLE4uZWFjaCgoZnVuY3Rpb24ocyl7dmFyIHA9dS5pc0hlYWRlcihzLEUpO3MuX3gwPXYocy54MCkscy5feDE9dihzLngxKSxzLl95MD15KHMueTApLHMuX3kxPXkocy55MSkscy5faG92ZXJYPXYocy54MS1FLm1hcmtlci5wYWQucikscy5faG92ZXJZPXkoUD9zLnkxLUUubWFya2VyLnBhZC5iLzI6cy55MCtFLm1hcmtlci5wYWQudC8yKTt2YXIgZD1uLnNlbGVjdCh0aGlzKSxUPWkuZW5zdXJlU2luZ2xlKGQsInBhdGgiLCJzdXJmYWNlIiwoZnVuY3Rpb24odCl7dC5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKX0pKTt3P1QudHJhbnNpdGlvbigpLmF0dHJUd2VlbigiZCIsKGZ1bmN0aW9uKHQpe3ZhciBlPWsodCwhMSxCKCksW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4geChlKHQpKX19KSk6VC5hdHRyKCJkIix4KSxkLmNhbGwoZixyLHQsZSx7c3R5bGVPbmU6bCxldmVudERhdGFLZXlzOmMuZXZlbnREYXRhS2V5cyx0cmFuc2l0aW9uVGltZTpjLkNMSUNLX1RSQU5TSVRJT05fVElNRSx0cmFuc2l0aW9uRWFzaW5nOmMuQ0xJQ0tfVFJBTlNJVElPTl9FQVNJTkd9KS5jYWxsKHUuc2V0U2xpY2VDdXJzb3IsdCx7aXNUcmFuc2l0aW9uaW5nOnQuX3RyYW5zaXRpb25pbmd9KSxULmNhbGwobCxzLEUse2hvdmVyZWQ6ITF9KSxzLngwPT09cy54MXx8cy55MD09PXMueTE/cy5fdGV4dD0iIjpzLl90ZXh0PXA/ST8iIjp1LmdldFB0TGFiZWwocyl8fCIiOmgocyxyLEUsZSxTKXx8IiI7dmFyIE09aS5lbnN1cmVTaW5nbGUoZCwiZyIsInNsaWNldGV4dCIpLE89aS5lbnN1cmVTaW5nbGUoTSwidGV4dCIsIiIsKGZ1bmN0aW9uKHQpe3QuYXR0cigiZGF0YS1ub3RleCIsMSl9KSksej1pLmVuc3VyZVVuaWZvcm1Gb250U2l6ZSh0LHUuZGV0ZXJtaW5lVGV4dEZvbnQoRSxzLFMuZm9udCkpO08udGV4dChzLl90ZXh0fHwiICIpLmNsYXNzZWQoInNsaWNldGV4dCIsITApLmF0dHIoInRleHQtYW5jaG9yIixDPyJlbmQiOkx8fHA/InN0YXJ0IjoibWlkZGxlIikuY2FsbChhLmZvbnQseikuY2FsbChvLmNvbnZlcnRUb1RzcGFucyx0KSxzLnRleHRCQj1hLmJCb3goTy5ub2RlKCkpLHMudHJhbnNmb3JtPWIocyx7Zm9udFNpemU6ei5zaXplLGlzSGVhZGVyOnB9KSxzLnRyYW5zZm9ybS5mb250U2l6ZT16LnNpemUsdz9PLnRyYW5zaXRpb24oKS5hdHRyVHdlZW4oInRyYW5zZm9ybSIsKGZ1bmN0aW9uKHQpe3ZhciBlPUEodCwhMSxCKCksW20sZ10pO3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gXyhlKHQpKX19KSk6Ty5hdHRyKCJ0cmFuc2Zvcm0iLF8ocykpfSkpLFJ9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9saWIiOjc3NiwiLi4vLi4vbGliL3N2Z190ZXh0X3V0aWxzIjo4MDIsIi4uL3N1bmJ1cnN0L2Z4IjoxMzA4LCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMzA5LCIuLi9zdW5idXJzdC9wbG90IjoxMzEzLCIuL2NvbnN0YW50cyI6MTMzMiwiLi9wYXJ0aXRpb24iOjEzNDEsIi4vc3R5bGUiOjEzNDQsIkBwbG90bHkvZDMiOjU4fV0sMTMzNzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24gdChlLHIsbil7dmFyIGk7bi5zd2FwWFkmJihpPWUueDAsZS54MD1lLnkwLGUueTA9aSxpPWUueDEsZS54MT1lLnkxLGUueTE9aSksbi5mbGlwWCYmKGk9ZS54MCxlLngwPXJbMF0tZS54MSxlLngxPXJbMF0taSksbi5mbGlwWSYmKGk9ZS55MCxlLnkwPXJbMV0tZS55MSxlLnkxPXJbMV0taSk7dmFyIGE9ZS5jaGlsZHJlbjtpZihhKWZvcih2YXIgbz0wO288YS5sZW5ndGg7bysrKXQoYVtvXSxyLG4pfX0se31dLDEzMzg6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXttb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidHJlZW1hcCIsYmFzZVBsb3RNb2R1bGU6dCgiLi9iYXNlX3Bsb3QiKSxjYXRlZ29yaWVzOltdLGFuaW1hdGFibGU6ITAsYXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLmNhbGMsY3Jvc3NUcmFjZUNhbGM6dCgiLi9jYWxjIikuY3Jvc3NUcmFjZUNhbGMscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIikuc3R5bGUsY29sb3JiYXI6dCgiLi4vc2NhdHRlci9tYXJrZXJfY29sb3JiYXIiKSxtZXRhOnt9fX0seyIuLi9zY2F0dGVyL21hcmtlcl9jb2xvcmJhciI6MTIwOSwiLi9hdHRyaWJ1dGVzIjoxMzI5LCIuL2Jhc2VfcGxvdCI6MTMzMCwiLi9jYWxjIjoxMzMxLCIuL2RlZmF1bHRzIjoxMzMzLCIuL2xheW91dF9hdHRyaWJ1dGVzIjoxMzM5LCIuL2xheW91dF9kZWZhdWx0cyI6MTM0MCwiLi9wbG90IjoxMzQyLCIuL3N0eWxlIjoxMzQ0fV0sMTMzOTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e3RyZWVtYXBjb2xvcndheTp7dmFsVHlwZToiY29sb3JsaXN0IixlZGl0VHlwZToiY2FsYyJ9LGV4dGVuZHRyZWVtYXBjb2xvcnM6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifX19LHt9XSwxMzQwOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9sYXlvdXRfYXR0cmlidXRlcyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1yKCJ0cmVlbWFwY29sb3J3YXkiLGUuY29sb3J3YXkpLHIoImV4dGVuZHRyZWVtYXBjb2xvcnMiKX19LHsiLi4vLi4vbGliIjo3NzYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzMzl9XSwxMzQxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoImQzLWhpZXJhcmNoeSIpLGk9dCgiLi9mbGlwX3RyZWUiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhLG89ci5mbGlwWCxzPXIuZmxpcFksbD0iZGljZS1zbGljZSI9PT1yLnBhY2tpbmcsYz1yLnBhZFtzPyJib3R0b20iOiJ0b3AiXSx1PXIucGFkW28/InJpZ2h0IjoibGVmdCJdLGY9ci5wYWRbbz8ibGVmdCI6InJpZ2h0Il0saD1yLnBhZFtzPyJ0b3AiOiJib3R0b20iXTtsJiYoYT11LHU9YyxjPWEsYT1mLGY9aCxoPWEpO3ZhciBwPW4udHJlZW1hcCgpLnRpbGUoZnVuY3Rpb24odCxlKXtzd2l0Y2godCl7Y2FzZSJzcXVhcmlmeSI6cmV0dXJuIG4udHJlZW1hcFNxdWFyaWZ5LnJhdGlvKGUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gbi50cmVlbWFwQmluYXJ5O2Nhc2UiZGljZSI6cmV0dXJuIG4udHJlZW1hcERpY2U7Y2FzZSJzbGljZSI6cmV0dXJuIG4udHJlZW1hcFNsaWNlO2RlZmF1bHQ6cmV0dXJuIG4udHJlZW1hcFNsaWNlRGljZX19KHIucGFja2luZyxyLnNxdWFyaWZ5cmF0aW8pKS5wYWRkaW5nSW5uZXIoci5wYWQuaW5uZXIpLnBhZGRpbmdMZWZ0KHUpLnBhZGRpbmdSaWdodChmKS5wYWRkaW5nVG9wKGMpLnBhZGRpbmdCb3R0b20oaCkuc2l6ZShsP1tlWzFdLGVbMF1dOmUpKHQpO3JldHVybihsfHxvfHxzKSYmaShwLGUse3N3YXBYWTpsLGZsaXBYOm8sZmxpcFk6c30pLHB9fSx7Ii4vZmxpcF90cmVlIjoxMzM3LCJkMy1oaWVyYXJjaHkiOjE2M31dLDEzNDI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi9kcmF3IiksaT10KCIuL2RyYXdfZGVzY2VuZGFudHMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7cmV0dXJuIG4odCxlLHIsYSx7dHlwZToidHJlZW1hcCIsZHJhd0Rlc2NlbmRhbnRzOml9KX19LHsiLi9kcmF3IjoxMzM0LCIuL2RyYXdfZGVzY2VuZGFudHMiOjEzMzZ9XSwxMzQzOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoImQzLWludGVycG9sYXRlIikuaW50ZXJwb2xhdGUsYT10KCIuLi9zdW5idXJzdC9oZWxwZXJzIiksbz10KCIuLi8uLi9saWIiKSxzPXQoIi4uL2Jhci9jb25zdGFudHMiKS5URVhUUEFELGw9dCgiLi4vYmFyL3Bsb3QiKS50b01vdmVJbnNpZGVCYXIsYz10KCIuLi9iYXIvdW5pZm9ybV90ZXh0IikucmVjb3JkTWluVGV4dFNpemUsdT10KCIuL2NvbnN0YW50cyIpLGY9dCgiLi9kcmF3X2FuY2VzdG9ycyIpO2Z1bmN0aW9uIGgodCl7cmV0dXJuIGEuaXNIaWVyYXJjaHlSb290KHQpPyIiOmEuZ2V0UHRJZCh0KX1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscCxkKXt2YXIgbT10Ll9mdWxsTGF5b3V0LGc9ZVswXSx2PWcudHJhY2UseT0iaWNpY2xlIj09PXYudHlwZSx4PWcuaGllcmFyY2h5LGI9YS5maW5kRW50cnlXaXRoTGV2ZWwoeCx2LmxldmVsKSxfPW4uc2VsZWN0KHIpLHc9Xy5zZWxlY3RBbGwoImcucGF0aGJhciIpLFQ9Xy5zZWxlY3RBbGwoImcuc2xpY2UiKTtpZighYilyZXR1cm4gdy5yZW1vdmUoKSx2b2lkIFQucmVtb3ZlKCk7dmFyIGs9YS5pc0hpZXJhcmNoeVJvb3QoYiksQT0hbS51bmlmb3JtdGV4dC5tb2RlJiZhLmhhc1RyYW5zaXRpb24ocCksTT1hLmdldE1heERlcHRoKHYpLFM9bS5fc2l6ZSxFPXYuZG9tYWluLEw9Uy53KihFLnhbMV0tRS54WzBdKSxDPVMuaCooRS55WzFdLUUueVswXSksUD1MLEk9di5wYXRoYmFyLnRoaWNrbmVzcyxPPXYubWFya2VyLmxpbmUud2lkdGgrdS5nYXBXaXRoUGF0aGJhcix6PXYucGF0aGJhci52aXNpYmxlP3YucGF0aGJhci5zaWRlLmluZGV4T2YoImJvdHRvbSIpPi0xP0MrTzotKEkrTyk6MCxEPXt4MDpQLHgxOlAseTA6eix5MTp6K0l9LFI9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXYudGlsaW5nLnBhZCxpPWZ1bmN0aW9uKHQpe3JldHVybiB0LW48PWUueDB9LGE9ZnVuY3Rpb24odCl7cmV0dXJuIHQrbj49ZS54MX0sbz1mdW5jdGlvbih0KXtyZXR1cm4gdC1uPD1lLnkwfSxzPWZ1bmN0aW9uKHQpe3JldHVybiB0K24+PWUueTF9O3JldHVybiB0LngwPT09ZS54MCYmdC54MT09PWUueDEmJnQueTA9PT1lLnkwJiZ0LnkxPT09ZS55MT97eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX06e3gwOmkodC54MC1uKT8wOmEodC54MC1uKT9yWzBdOnQueDAseDE6aSh0LngxK24pPzA6YSh0LngxK24pP3JbMF06dC54MSx5MDpvKHQueTAtbik/MDpzKHQueTAtbik/clsxXTp0LnkwLHkxOm8odC55MStuKT8wOnModC55MStuKT9yWzFdOnQueTF9fSxGPW51bGwsQj17fSxOPXt9LGo9bnVsbCxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/QltoKHQpXTpOW2godCldfSxWPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGUpcmV0dXJuIEJbaCh4KV18fEQ7dmFyIGk9Tlt2LmxldmVsXXx8cjtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIHQuZGF0YS5kZXB0aC1iLmRhdGEuZGVwdGg8TX0odCk/Uih0LGksbik6e319O2cuaGFzTXVsdGlwbGVSb290cyYmayYmTSsrLHYuX21heERlcHRoPU0sdi5fYmFja2dyb3VuZENvbG9yPW0ucGFwZXJfYmdjb2xvcix2Ll9lbnRyeURlcHRoPWIuZGF0YS5kZXB0aCx2Ll9hdFJvb3RMZXZlbD1rO3ZhciBIPS1MLzIrUy5sK1MudyooRS54WzFdK0UueFswXSkvMixxPS1DLzIrUy50K1MuaCooMS0oRS55WzFdK0UueVswXSkvMiksRz1mdW5jdGlvbih0KXtyZXR1cm4gSCt0fSxZPWZ1bmN0aW9uKHQpe3JldHVybiBxK3R9LFc9WSgwKSxYPUcoMCksWj1mdW5jdGlvbih0KXtyZXR1cm4gWCt0fSxKPWZ1bmN0aW9uKHQpe3JldHVybiBXK3R9O2Z1bmN0aW9uIEsodCxlKXtyZXR1cm4gdCsiLCIrZX12YXIgUT1aKDApLCQ9ZnVuY3Rpb24odCl7dC54PU1hdGgubWF4KFEsdC54KX0sdHQ9di5wYXRoYmFyLmVkZ2VzaGFwZSxldD1mdW5jdGlvbih0LGUpe3ZhciByPXQueDAsbj10LngxLGk9dC55MCxhPXQueTEsbz10LnRleHRCQix1PWZ1bmN0aW9uKHQpe3JldHVybi0xIT09di50ZXh0cG9zaXRpb24uaW5kZXhPZih0KX0sZj11KCJib3R0b20iKSxoPXUoInRvcCIpfHxlLmlzSGVhZGVyJiYhZj8ic3RhcnQiOmY/ImVuZCI6Im1pZGRsZSIscD11KCJyaWdodCIpLGQ9dSgibGVmdCIpfHxlLm9uUGF0aGJhcj8tMTpwPzE6MCxnPXZbeT8idGlsaW5nIjoibWFya2VyIl0ucGFkO2lmKGUuaXNIZWFkZXIpe2lmKChyKz0oeT9nOmcubCktcyk+PShuLT0oeT9nOmcuciktcykpe3ZhciB4PShyK24pLzI7cj14LG49eH12YXIgYjtmP2k8KGI9YS0oeT9nOmcuYikpJiZiPGEmJihpPWIpOmk8KGI9aSsoeT9nOmcudCkpJiZiPGEmJihhPWIpfXZhciBfPWwocixuLGksYSxvLHtpc0hvcml6b250YWw6ITEsY29uc3RyYWluZWQ6ITAsYW5nbGU6MCxhbmNob3I6aCxsZWZ0VG9SaWdodDpkfSk7cmV0dXJuIF8uZm9udFNpemU9ZS5mb250U2l6ZSxfLnRhcmdldFg9RyhfLnRhcmdldFgpLF8udGFyZ2V0WT1ZKF8udGFyZ2V0WSksaXNOYU4oXy50YXJnZXRYKXx8aXNOYU4oXy50YXJnZXRZKT97fToociE9PW4mJmkhPT1hJiZjKHYudHlwZSxfLG0pLHtzY2FsZTpfLnNjYWxlLHJvdGF0ZTpfLnJvdGF0ZSx0ZXh0WDpfLnRleHRYLHRleHRZOl8udGV4dFksYW5jaG9yWDpfLmFuY2hvclgsYW5jaG9yWTpfLmFuY2hvclksdGFyZ2V0WDpfLnRhcmdldFgsdGFyZ2V0WTpfLnRhcmdldFl9KX0scnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbj0wLGk9dDshciYmbjxNOyluKyssKGk9aS5wYXJlbnQpP3I9VShpLGUpOm49TTtyZXR1cm4gcnx8e319LG50PWZ1bmN0aW9uKHQsZSxyLG4sYSl7dmFyIHMsbD1VKHQsZSk7aWYobClzPWw7ZWxzZSBpZihlKXM9RDtlbHNlIGlmKEYpaWYodC5wYXJlbnQpe3ZhciBjPWp8fHI7YyYmIWU/cz1SKHQsYyxuKToocz17fSxvLmV4dGVuZEZsYXQocyxydCh0LGUpKSl9ZWxzZSBzPW8uZXh0ZW5kRmxhdCh7fSx0KSx5JiYoImgiPT09YS5vcmllbnRhdGlvbj9hLmZsaXBYP3MueDA9dC54MTpzLngxPTA6YS5mbGlwWT9zLnkwPXQueTE6cy55MT0wKTtlbHNlIHM9e307cmV0dXJuIGkocyx7eDA6dC54MCx4MTp0LngxLHkwOnQueTAseTE6dC55MX0pfSxpdD1mdW5jdGlvbih0LGUscixuKXt2YXIgcz1VKHQsZSksbD17fSx1PVYodCxlLHIsbik7by5leHRlbmRGbGF0KGwse3RyYW5zZm9ybTpldCh7eDA6dS54MCx4MTp1LngxLHkwOnUueTAseTE6dS55MSx0ZXh0QkI6dC50ZXh0QkIsX3RleHQ6dC5fdGV4dH0se2lzSGVhZGVyOmEuaXNIZWFkZXIodCx2KX0pfSkscz9sPXM6dC5wYXJlbnQmJm8uZXh0ZW5kRmxhdChsLHJ0KHQsZSkpO3ZhciBmPXQudHJhbnNmb3JtO3JldHVybiB0LngwIT09dC54MSYmdC55MCE9PXQueTEmJmModi50eXBlLGYsbSksaShsLHt0cmFuc2Zvcm06e3NjYWxlOmYuc2NhbGUscm90YXRlOmYucm90YXRlLHRleHRYOmYudGV4dFgsdGV4dFk6Zi50ZXh0WSxhbmNob3JYOmYuYW5jaG9yWCxhbmNob3JZOmYuYW5jaG9yWSx0YXJnZXRYOmYudGFyZ2V0WCx0YXJnZXRZOmYudGFyZ2V0WX19KX0sYXQ9ZnVuY3Rpb24odCxlLHIsYSxvKXt2YXIgcz1hWzBdLGw9YVsxXTtBP3QuZXhpdCgpLnRyYW5zaXRpb24oKS5lYWNoKChmdW5jdGlvbigpe3ZhciB0PW4uc2VsZWN0KHRoaXMpO3Quc2VsZWN0KCJwYXRoLnN1cmZhY2UiKS50cmFuc2l0aW9uKCkuYXR0clR3ZWVuKCJkIiwoZnVuY3Rpb24odCl7dmFyIHI9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGEsbz1VKHQsZSk7aWYoZSlhPUQ7ZWxzZXt2YXIgcz1VKGIsZSk7YT1zP1IodCxzLG4pOnt9fXJldHVybiBpKG8sYSl9KHQsZSwwLFtzLGxdKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG8ocih0KSl9fSkpLHQuc2VsZWN0KCJnLnNsaWNldGV4dCIpLmF0dHIoIm9wYWNpdHkiLDApfSkpLnJlbW92ZSgpOnQuZXhpdCgpLnJlbW92ZSgpfSxvdD1mdW5jdGlvbih0KXt2YXIgZT10LnRyYW5zZm9ybTtyZXR1cm4gdC54MCE9PXQueDEmJnQueTAhPT10LnkxJiZjKHYudHlwZSxlLG0pLG8uZ2V0VGV4dFRyYW5zZm9ybSh7dGV4dFg6ZS50ZXh0WCx0ZXh0WTplLnRleHRZLGFuY2hvclg6ZS5hbmNob3JYLGFuY2hvclk6ZS5hbmNob3JZLHRhcmdldFg6ZS50YXJnZXRYLHRhcmdldFk6ZS50YXJnZXRZLHNjYWxlOmUuc2NhbGUscm90YXRlOmUucm90YXRlfSl9O0EmJih3LmVhY2goKGZ1bmN0aW9uKHQpe0JbaCh0KV09e3gwOnQueDAseDE6dC54MSx5MDp0LnkwLHkxOnQueTF9LHQudHJhbnNmb3JtJiYoQltoKHQpXS50cmFuc2Zvcm09e3RleHRYOnQudHJhbnNmb3JtLnRleHRYLHRleHRZOnQudHJhbnNmb3JtLnRleHRZLGFuY2hvclg6dC50cmFuc2Zvcm0uYW5jaG9yWCxhbmNob3JZOnQudHJhbnNmb3JtLmFuY2hvclksdGFyZ2V0WDp0LnRyYW5zZm9ybS50YXJnZXRYLHRhcmdldFk6dC50cmFuc2Zvcm0udGFyZ2V0WSxzY2FsZTp0LnRyYW5zZm9ybS5zY2FsZSxyb3RhdGU6dC50cmFuc2Zvcm0ucm90YXRlfSl9KSksVC5lYWNoKChmdW5jdGlvbih0KXtOW2godCldPXt4MDp0LngwLHgxOnQueDEseTA6dC55MCx5MTp0LnkxfSx0LnRyYW5zZm9ybSYmKE5baCh0KV0udHJhbnNmb3JtPXt0ZXh0WDp0LnRyYW5zZm9ybS50ZXh0WCx0ZXh0WTp0LnRyYW5zZm9ybS50ZXh0WSxhbmNob3JYOnQudHJhbnNmb3JtLmFuY2hvclgsYW5jaG9yWTp0LnRyYW5zZm9ybS5hbmNob3JZLHRhcmdldFg6dC50cmFuc2Zvcm0udGFyZ2V0WCx0YXJnZXRZOnQudHJhbnNmb3JtLnRhcmdldFksc2NhbGU6dC50cmFuc2Zvcm0uc2NhbGUscm90YXRlOnQudHJhbnNmb3JtLnJvdGF0ZX0pLCFGJiZhLmlzRW50cnkodCkmJihGPXQpfSkpKSxqPWQodCxlLGIsVCx7d2lkdGg6TCxoZWlnaHQ6Qyx2aWV3WDpHLHZpZXdZOlkscGF0aFNsaWNlOmZ1bmN0aW9uKHQpe3ZhciBlPUcodC54MCkscj1HKHQueDEpLG49WSh0LnkwKSxpPVkodC55MSksYT1yLWUsbz1pLW47aWYoIWF8fCFvKXJldHVybiIiO3JldHVybiJNIitLKGUsbiswKSsiTCIrSyhyLTAsbikrIkwiK0socixpLTApKyJMIitLKGUrMCxpKSsiWiJ9LHRvTW92ZUluc2lkZVNsaWNlOmV0LHByZXZFbnRyeTpGLG1ha2VVcGRhdGVTbGljZUludGVycG9sYXRvcjpudCxtYWtlVXBkYXRlVGV4dEludGVycG9sYXRvcjppdCxoYW5kbGVTbGljZXNFeGl0OmF0LGhhc1RyYW5zaXRpb246QSxzdHJUcmFuc2Zvcm06b3R9KSx2LnBhdGhiYXIudmlzaWJsZT9mKHQsZSxiLHcse2JhckRpZlk6eix3aWR0aDpQLGhlaWdodDpJLHZpZXdYOlosdmlld1k6SixwYXRoU2xpY2U6ZnVuY3Rpb24odCl7dmFyIGU9WihNYXRoLm1heChNYXRoLm1pbih0LngwLHQueDApLDApKSxyPVooTWF0aC5taW4oTWF0aC5tYXgodC54MSx0LngxKSxQKSksbj1KKHQueTApLGk9Sih0LnkxKSxhPUkvMixvPXt9LHM9e307by54PWUscy54PXIsby55PXMueT0obitpKS8yO3ZhciBsPXt4OmUseTpufSxjPXt4OnIseTpufSx1PXt4OnIseTppfSxmPXt4OmUseTppfTtyZXR1cm4iPiI9PT10dD8obC54LT1hLGMueC09YSx1LngtPWEsZi54LT1hKToiLyI9PT10dD8odS54LT1hLGYueC09YSxvLngtPWEvMixzLngtPWEvMik6IlxcIj09PXR0PyhsLngtPWEsYy54LT1hLG8ueC09YS8yLHMueC09YS8yKToiPCI9PT10dCYmKG8ueC09YSxzLngtPWEpLCQobCksJChmKSwkKG8pLCQoYyksJCh1KSwkKHMpLCJNIitLKGwueCxsLnkpKyJMIitLKGMueCxjLnkpKyJMIitLKHMueCxzLnkpKyJMIitLKHUueCx1LnkpKyJMIitLKGYueCxmLnkpKyJMIitLKG8ueCxvLnkpKyJaIn0sdG9Nb3ZlSW5zaWRlU2xpY2U6ZXQsbWFrZVVwZGF0ZVNsaWNlSW50ZXJwb2xhdG9yOm50LG1ha2VVcGRhdGVUZXh0SW50ZXJwb2xhdG9yOml0LGhhbmRsZVNsaWNlc0V4aXQ6YXQsaGFzVHJhbnNpdGlvbjpBLHN0clRyYW5zZm9ybTpvdH0pOncucmVtb3ZlKCl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvY29uc3RhbnRzIjo5MTYsIi4uL2Jhci9wbG90Ijo5MjUsIi4uL2Jhci91bmlmb3JtX3RleHQiOjkzMCwiLi4vc3VuYnVyc3QvaGVscGVycyI6MTMwOSwiLi9jb25zdGFudHMiOjEzMzIsIi4vZHJhd19hbmNlc3RvcnMiOjEzMzUsIkBwbG90bHkvZDMiOjU4LCJkMy1pbnRlcnBvbGF0ZSI6MTY0fV0sMTM0NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi8uLi9saWIiKSxvPXQoIi4uL3N1bmJ1cnN0L2hlbHBlcnMiKSxzPXQoIi4uL2Jhci91bmlmb3JtX3RleHQiKS5yZXNpemVUZXh0O2Z1bmN0aW9uIGwodCxlLHIsbil7dmFyIHMsbCxjPShufHx7fSkuaG92ZXJlZCx1PWUuZGF0YS5kYXRhLGY9dS5pLGg9dS5jb2xvcixwPW8uaXNIaWVyYXJjaHlSb290KGUpLGQ9MTtpZihjKXM9ci5faG92ZXJlZC5tYXJrZXIubGluZS5jb2xvcixsPXIuX2hvdmVyZWQubWFya2VyLmxpbmUud2lkdGg7ZWxzZSBpZihwJiZoPT09ci5yb290LmNvbG9yKWQ9MTAwLHM9InJnYmEoMCwwLDAsMCkiLGw9MDtlbHNlIGlmKHM9YS5jYXN0T3B0aW9uKHIsZiwibWFya2VyLmxpbmUuY29sb3IiKXx8aS5kZWZhdWx0TGluZSxsPWEuY2FzdE9wdGlvbihyLGYsIm1hcmtlci5saW5lLndpZHRoIil8fDAsIXIuX2hhc0NvbG9yc2NhbGUmJiFlLm9uUGF0aGJhcil7dmFyIG09ci5tYXJrZXIuZGVwdGhmYWRlO2lmKG0pe3ZhciBnLHY9aS5jb21iaW5lKGkuYWRkT3BhY2l0eShyLl9iYWNrZ3JvdW5kQ29sb3IsLjc1KSxoKTtpZighMD09PW0pe3ZhciB5PW8uZ2V0TWF4RGVwdGgocik7Zz1pc0Zpbml0ZSh5KT9vLmlzTGVhZihlKT8wOnIuX21heFZpc2libGVMYXllcnMtKGUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoKTplLmRhdGEuaGVpZ2h0KzF9ZWxzZSBnPWUuZGF0YS5kZXB0aC1yLl9lbnRyeURlcHRoLHIuX2F0Um9vdExldmVsfHxnKys7aWYoZz4wKWZvcih2YXIgeD0wO3g8Zzt4Kyspe3ZhciBiPS41KngvZztoPWkuY29tYmluZShpLmFkZE9wYWNpdHkodixiKSxoKX19fXQuc3R5bGUoInN0cm9rZS13aWR0aCIsbCkuY2FsbChpLmZpbGwsaCkuY2FsbChpLnN0cm9rZSxzKS5zdHlsZSgib3BhY2l0eSIsZCl9ZS5leHBvcnRzPXtzdHlsZTpmdW5jdGlvbih0KXt2YXIgZT10Ll9mdWxsTGF5b3V0Ll90cmVlbWFwbGF5ZXIuc2VsZWN0QWxsKCIudHJhY2UiKTtzKHQsZSwidHJlZW1hcCIpLGUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9bi5zZWxlY3QodGhpcykscj10WzBdLnRyYWNlO2Uuc3R5bGUoIm9wYWNpdHkiLHIub3BhY2l0eSksZS5zZWxlY3RBbGwoInBhdGguc3VyZmFjZSIpLmVhY2goKGZ1bmN0aW9uKHQpe24uc2VsZWN0KHRoaXMpLmNhbGwobCx0LHIse2hvdmVyZWQ6ITF9KX0pKX0pKX0sc3R5bGVPbmU6bH19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9saWIiOjc3NiwiLi4vYmFyL3VuaWZvcm1fdGV4dCI6OTMwLCIuLi9zdW5idXJzdC9oZWxwZXJzIjoxMzA5LCJAcGxvdGx5L2QzIjo1OH1dLDEzNDU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2F0dHJpYnV0ZXMiKSxpPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGE9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4aXNfZm9ybWF0X2F0dHJpYnV0ZXMiKS5heGlzSG92ZXJGb3JtYXQ7ZS5leHBvcnRzPXt5Om4ueSx4Om4ueCx4MDpuLngwLHkwOm4ueTAseGhvdmVyZm9ybWF0OmEoIngiKSx5aG92ZXJmb3JtYXQ6YSgieSIpLG5hbWU6aSh7fSxuLm5hbWUse30pLG9yaWVudGF0aW9uOmkoe30sbi5vcmllbnRhdGlvbix7fSksYmFuZHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVncm91cDp7dmFsVHlwZToic3RyaW5nIixkZmx0OiIiLGVkaXRUeXBlOiJjYWxjIn0sc2NhbGVtb2RlOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJ3aWR0aCIsImNvdW50Il0sZGZsdDoid2lkdGgiLGVkaXRUeXBlOiJjYWxjIn0sc3Bhbm1vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNvZnQiLCJoYXJkIiwibWFudWFsIl0sZGZsdDoic29mdCIsZWRpdFR5cGU6ImNhbGMifSxzcGFuOnt2YWxUeXBlOiJpbmZvX2FycmF5IixpdGVtczpbe3ZhbFR5cGU6ImFueSIsZWRpdFR5cGU6ImNhbGMifSx7dmFsVHlwZToiYW55IixlZGl0VHlwZToiY2FsYyJ9XSxlZGl0VHlwZToiY2FsYyJ9LGxpbmU6e2NvbG9yOnt2YWxUeXBlOiJjb2xvciIsZWRpdFR5cGU6InN0eWxlIn0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsZGZsdDoyLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sZmlsbGNvbG9yOm4uZmlsbGNvbG9yLHBvaW50czppKHt9LG4uYm94cG9pbnRzLHt9KSxqaXR0ZXI6aSh7fSxuLmppdHRlcix7fSkscG9pbnRwb3M6aSh7fSxuLnBvaW50cG9zLHt9KSx3aWR0aDppKHt9LG4ud2lkdGgse30pLG1hcmtlcjpuLm1hcmtlcix0ZXh0Om4udGV4dCxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpuLmhvdmVydGVtcGxhdGUsYm94Ont2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJwbG90In0sd2lkdGg6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDouMjUsZWRpdFR5cGU6InBsb3QifSxmaWxsY29sb3I6e3ZhbFR5cGU6ImNvbG9yIixlZGl0VHlwZToic3R5bGUifSxsaW5lOntjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sbWVhbmxpbmU6e3Zpc2libGU6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITEsZWRpdFR5cGU6InBsb3QifSxjb2xvcjp7dmFsVHlwZToiY29sb3IiLGVkaXRUeXBlOiJzdHlsZSJ9LHdpZHRoOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLGVkaXRUeXBlOiJzdHlsZSJ9LGVkaXRUeXBlOiJwbG90In0sc2lkZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiYm90aCIsInBvc2l0aXZlIiwibmVnYXRpdmUiXSxkZmx0OiJib3RoIixlZGl0VHlwZToiY2FsYyJ9LG9mZnNldGdyb3VwOm4ub2Zmc2V0Z3JvdXAsYWxpZ25tZW50Z3JvdXA6bi5hbGlnbm1lbnRncm91cCxzZWxlY3RlZDpuLnNlbGVjdGVkLHVuc2VsZWN0ZWQ6bi51bnNlbGVjdGVkLGhvdmVyb246e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbInZpb2xpbnMiLCJwb2ludHMiLCJrZGUiXSxkZmx0OiJ2aW9saW5zK3BvaW50cytrZGUiLGV4dHJhczpbImFsbCJdLGVkaXRUeXBlOiJzdHlsZSJ9fX0seyIuLi8uLi9saWIvZXh0ZW5kIjo3NjYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uL2JveC9hdHRyaWJ1dGVzIjo5Mzl9XSwxMzQ2OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxhPXQoIi4uL2JveC9jYWxjIiksbz10KCIuL2hlbHBlcnMiKSxzPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ZnVuY3Rpb24gbCh0LGUscil7dmFyIGk9ZS5tYXgtZS5taW47aWYoIWkpcmV0dXJuIHQuYmFuZHdpZHRoP3QuYmFuZHdpZHRoOjA7aWYodC5iYW5kd2lkdGgpcmV0dXJuIE1hdGgubWF4KHQuYmFuZHdpZHRoLGkvMWU0KTt2YXIgYT1yLmxlbmd0aCxvPW4uc3RkZXYocixhLTEsZS5tZWFuKTtyZXR1cm4gTWF0aC5tYXgoZnVuY3Rpb24odCxlLHIpe3JldHVybiAxLjA1OSpNYXRoLm1pbihlLHIvMS4zNDkpKk1hdGgucG93KHQsLS4yKX0oYSxvLGUucTMtZS5xMSksaS8xMDApfWZ1bmN0aW9uIGModCxlLHIsbil7dmFyIGEsbz10LnNwYW5tb2RlLGw9dC5zcGFufHxbXSxjPVtlLm1pbixlLm1heF0sdT1bZS5taW4tMipuLGUubWF4KzIqbl07ZnVuY3Rpb24gZihuKXt2YXIgaT1sW25dLGE9Im11bHRpY2F0ZWdvcnkiPT09ci50eXBlP3IucjJjKGkpOnIuZDJjKGksMCx0W2UudmFsTGV0dGVyKyJjYWxlbmRhciJdKTtyZXR1cm4gYT09PXM/dVtuXTphfXZhciBoPXt0eXBlOiJsaW5lYXIiLHJhbmdlOmE9InNvZnQiPT09bz91OiJoYXJkIj09PW8/YzpbZigwKSxmKDEpXX07cmV0dXJuIGkuc2V0Q29udmVydChoKSxoLmNsZWFuUmFuZ2UoKSxhfWUuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWEodCxlKTtpZihyWzBdLnQuZW1wdHkpcmV0dXJuIHI7Zm9yKHZhciBzPXQuX2Z1bGxMYXlvdXQsdT1pLmdldEZyb21JZCh0LGVbImgiPT09ZS5vcmllbnRhdGlvbj8ieGF4aXMiOiJ5YXhpcyJdKSxmPTEvMCxoPS0xLzAscD0wLGQ9MCxtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV0sdj1nLnB0cy5tYXAoby5leHRyYWN0VmFsKSx5PWcuYmFuZHdpZHRoPWwoZSxnLHYpLHg9Zy5zcGFuPWMoZSxnLHUseSk7aWYoZy5taW49PT1nLm1heCYmMD09PXkpeD1nLnNwYW49W2cubWluLGcubWF4XSxnLmRlbnNpdHk9W3t2OjEsdDp4WzBdfV0sZy5iYW5kd2lkdGg9eSxwPU1hdGgubWF4KHAsMSk7ZWxzZXt2YXIgYj14WzFdLXhbMF0sXz1NYXRoLmNlaWwoYi8oeS8zKSksdz1iL187aWYoIWlzRmluaXRlKHcpfHwhaXNGaW5pdGUoXykpcmV0dXJuIG4uZXJyb3IoIlNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggY29tcHV0aW5nIHRoZSB2aW9saW4gc3BhbiIpLHJbMF0udC5lbXB0eT0hMCxyO3ZhciBUPW8ubWFrZUtERShnLGUsdik7Zy5kZW5zaXR5PW5ldyBBcnJheShfKTtmb3IodmFyIGs9MCxBPXhbMF07QTx4WzFdK3cvMjtrKyssQSs9dyl7dmFyIE09VChBKTtnLmRlbnNpdHlba109e3Y6TSx0OkF9LHA9TWF0aC5tYXgocCxNKX19ZD1NYXRoLm1heChkLHYubGVuZ3RoKSxmPU1hdGgubWluKGYseFswXSksaD1NYXRoLm1heChoLHhbMV0pfXZhciBTPWkuZmluZEV4dHJlbWVzKHUsW2YsaF0se3BhZGRlZDohMH0pO2lmKGUuX2V4dHJlbWVzW3UuX2lkXT1TLGUud2lkdGgpclswXS50Lm1heEtERT1wO2Vsc2V7dmFyIEU9cy5fdmlvbGluU2NhbGVHcm91cFN0YXRzLEw9ZS5zY2FsZWdyb3VwLEM9RVtMXTtDPyhDLm1heEtERT1NYXRoLm1heChDLm1heEtERSxwKSxDLm1heENvdW50PU1hdGgubWF4KEMubWF4Q291bnQsZCkpOkVbTF09e21heEtERTpwLG1heENvdW50OmR9fXJldHVybiByWzBdLnQubGFiZWxzLmtkZT1uLl8odCwia2RlOiIpLHJ9fSx7Ii4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2JveC9jYWxjIjo5NDAsIi4vaGVscGVycyI6MTM0OX1dLDEzNDc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2Nyb3NzX3RyYWNlX2NhbGMiKS5zZXRQb3NpdGlvbk9mZnNldCxpPVsidiIsImgiXTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5jYWxjZGF0YSxhPWUueGF4aXMsbz1lLnlheGlzLHM9MDtzPGkubGVuZ3RoO3MrKyl7Zm9yKHZhciBsPWlbc10sYz0iaCI9PT1sP286YSx1PVtdLGY9MDtmPHIubGVuZ3RoO2YrKyl7dmFyIGg9cltmXSxwPWhbMF0udCxkPWhbMF0udHJhY2U7ITAhPT1kLnZpc2libGV8fCJ2aW9saW4iIT09ZC50eXBlfHxwLmVtcHR5fHxkLm9yaWVudGF0aW9uIT09bHx8ZC54YXhpcyE9PWEuX2lkfHxkLnlheGlzIT09by5faWR8fHUucHVzaChmKX1uKCJ2aW9saW4iLHQsdSxjKX19fSx7Ii4uL2JveC9jcm9zc190cmFjZV9jYWxjIjo5NDF9XSwxMzQ4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi4vLi4vY29tcG9uZW50cy9jb2xvciIpLGE9dCgiLi4vYm94L2RlZmF1bHRzIiksbz10KCIuL2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7ZnVuY3Rpb24gbChyLGkpe3JldHVybiBuLmNvZXJjZSh0LGUsbyxyLGkpfWZ1bmN0aW9uIGMocixpKXtyZXR1cm4gbi5jb2VyY2UyKHQsZSxvLHIsaSl9aWYoYS5oYW5kbGVTYW1wbGVEZWZhdWx0cyh0LGUsbCxzKSwhMSE9PWUudmlzaWJsZSl7bCgiYmFuZHdpZHRoIiksbCgic2lkZSIpLGwoIndpZHRoIil8fChsKCJzY2FsZWdyb3VwIixlLm5hbWUpLGwoInNjYWxlbW9kZSIpKTt2YXIgdSxmPWwoInNwYW4iKTtBcnJheS5pc0FycmF5KGYpJiYodT0ibWFudWFsIiksbCgic3Bhbm1vZGUiLHUpO3ZhciBoPWwoImxpbmUuY29sb3IiLCh0Lm1hcmtlcnx8e30pLmNvbG9yfHxyKSxwPWwoImxpbmUud2lkdGgiKSxkPWwoImZpbGxjb2xvciIsaS5hZGRPcGFjaXR5KGUubGluZS5jb2xvciwuNSkpO2EuaGFuZGxlUG9pbnRzRGVmYXVsdHModCxlLGwse3ByZWZpeDoiIn0pO3ZhciBtPWMoImJveC53aWR0aCIpLGc9YygiYm94LmZpbGxjb2xvciIsZCksdj1jKCJib3gubGluZS5jb2xvciIsaCkseT1jKCJib3gubGluZS53aWR0aCIscCk7bCgiYm94LnZpc2libGUiLEJvb2xlYW4obXx8Z3x8dnx8eSkpfHwoZS5ib3g9e3Zpc2libGU6ITF9KTt2YXIgeD1jKCJtZWFubGluZS5jb2xvciIsaCksYj1jKCJtZWFubGluZS53aWR0aCIscCk7bCgibWVhbmxpbmUudmlzaWJsZSIsQm9vbGVhbih4fHxiKSl8fChlLm1lYW5saW5lPXt2aXNpYmxlOiExfSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvZGVmYXVsdHMiOjk0MiwiLi9hdHRyaWJ1dGVzIjoxMzQ1fV0sMTM0OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPWZ1bmN0aW9uKHQpe3JldHVybiAxL01hdGguc3FydCgyKk1hdGguUEkpKk1hdGguZXhwKC0uNSp0KnQpfTtyLm1ha2VLREU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIubGVuZ3RoLGE9aSxvPXQuYmFuZHdpZHRoLHM9MS8obipvKTtyZXR1cm4gZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT0wO2k8bjtpKyspZSs9YSgodC1yW2ldKS9vKTtyZXR1cm4gcyplfX0sci5nZXRQb3NpdGlvbk9uS2RlUGF0aD1mdW5jdGlvbih0LGUscil7dmFyIGksYTsiaCI9PT1lLm9yaWVudGF0aW9uPyhpPSJ5IixhPSJ4Iik6KGk9IngiLGE9InkiKTt2YXIgbz1uLmZpbmRQb2ludE9uUGF0aCh0LnBhdGgscixhLHtwYXRoTGVuZ3RoOnQucGF0aExlbmd0aH0pLHM9dC5wb3NDZW50ZXJQeCxsPW9baV07cmV0dXJuW2wsImJvdGgiPT09ZS5zaWRlPzIqcy1sOnNdfSxyLmdldEtkZVZhbHVlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10LnB0cy5tYXAoci5leHRyYWN0VmFsKTtyZXR1cm4gci5tYWtlS0RFKHQsZSxpKShuKS90LnBvc0RlbnNpdHlTY2FsZX0sci5leHRyYWN0VmFsPWZ1bmN0aW9uKHQpe3JldHVybiB0LnZ9fSx7Ii4uLy4uL2xpYiI6Nzc2fV0sMTM1MDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuLi9ib3gvaG92ZXIiKSxvPXQoIi4vaGVscGVycyIpO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixzLGwpe2x8fChsPXt9KTt2YXIgYyx1LGY9bC5ob3ZlckxheWVyLGg9dC5jZCxwPWhbMF0udHJhY2UsZD1wLmhvdmVyb24sbT0tMSE9PWQuaW5kZXhPZigidmlvbGlucyIpLGc9LTEhPT1kLmluZGV4T2YoImtkZSIpLHY9W107aWYobXx8Zyl7dmFyIHk9YS5ob3Zlck9uQm94ZXModCxlLHIscyk7aWYoZyYmeS5sZW5ndGg+MCl7dmFyIHgsYixfLHcsVCxrPXQueGEsQT10LnlhOyJoIj09PXAub3JpZW50YXRpb24/KFQ9ZSx4PSJ5IixfPUEsYj0ieCIsdz1rKTooVD1yLHg9IngiLF89ayxiPSJ5Iix3PUEpO3ZhciBNPWhbdC5pbmRleF07aWYoVD49TS5zcGFuWzBdJiZUPD1NLnNwYW5bMV0pe3ZhciBTPW4uZXh0ZW5kRmxhdCh7fSx0KSxFPXcuYzJwKFQsITApLEw9by5nZXRLZGVWYWx1ZShNLHAsVCksQz1vLmdldFBvc2l0aW9uT25LZGVQYXRoKE0scCxFKSxQPV8uX29mZnNldCxJPV8uX2xlbmd0aDtTW3grIjAiXT1DWzBdLFNbeCsiMSJdPUNbMV0sU1tiKyIwIl09U1tiKyIxIl09RSxTW2IrIkxhYmVsIl09YisiOiAiK2kuaG92ZXJMYWJlbFRleHQodyxULHBbYisiaG92ZXJmb3JtYXQiXSkrIiwgIitoWzBdLnQubGFiZWxzLmtkZSsiICIrTC50b0ZpeGVkKDMpLFMuc3Bpa2VEaXN0YW5jZT15WzBdLnNwaWtlRGlzdGFuY2U7dmFyIE89eCsiU3Bpa2UiO1NbT109eVswXVtPXSx5WzBdLnNwaWtlRGlzdGFuY2U9dm9pZCAwLHlbMF1bT109dm9pZCAwLFMuaG92ZXJ0ZW1wbGF0ZT0hMSx2LnB1c2goUyksKHU9e3N0cm9rZTp0LmNvbG9yfSlbeCsiMSJdPW4uY29uc3RyYWluKFArQ1swXSxQLFArSSksdVt4KyIyIl09bi5jb25zdHJhaW4oUCtDWzFdLFAsUCtJKSx1W2IrIjEiXT11W2IrIjIiXT13Ll9vZmZzZXQrRX19bSYmKHY9di5jb25jYXQoeSkpfS0xIT09ZC5pbmRleE9mKCJwb2ludHMiKSYmKGM9YS5ob3Zlck9uUG9pbnRzKHQsZSxyKSk7dmFyIHo9Zi5zZWxlY3RBbGwoIi52aW9saW5saW5lLSIrcC51aWQpLmRhdGEodT9bMF06W10pO3JldHVybiB6LmVudGVyKCkuYXBwZW5kKCJsaW5lIikuY2xhc3NlZCgidmlvbGlubGluZS0iK3AudWlkLCEwKS5hdHRyKCJzdHJva2Utd2lkdGgiLDEuNSksei5leGl0KCkucmVtb3ZlKCksei5hdHRyKHUpLCJjbG9zZXN0Ij09PXM/Yz9bY106djpjPyh2LnB1c2goYyksdik6dn19LHsiLi4vLi4vbGliIjo3NzYsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL2JveC9ob3ZlciI6OTQ0LCIuL2hlbHBlcnMiOjEzNDl9XSwxMzUxOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIiksY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4uL2JveC9kZWZhdWx0cyIpLmNyb3NzVHJhY2VEZWZhdWx0cyxzdXBwbHlMYXlvdXREZWZhdWx0czp0KCIuL2xheW91dF9kZWZhdWx0cyIpLGNhbGM6dCgiLi9jYWxjIiksY3Jvc3NUcmFjZUNhbGM6dCgiLi9jcm9zc190cmFjZV9jYWxjIikscGxvdDp0KCIuL3Bsb3QiKSxzdHlsZTp0KCIuL3N0eWxlIiksc3R5bGVPblNlbGVjdDp0KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVPblNlbGVjdCxob3ZlclBvaW50czp0KCIuL2hvdmVyIiksc2VsZWN0UG9pbnRzOnQoIi4uL2JveC9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToidmlvbGluIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiY2FydGVzaWFuIiwic3ZnIiwic3ltYm9scyIsIm9yaWVudGVkIiwiYm94LXZpb2xpbiIsInNob3dMZWdlbmQiLCJ2aW9saW5MYXlvdXQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYm94L2RlZmF1bHRzIjo5NDIsIi4uL2JveC9zZWxlY3QiOjk0OSwiLi4vc2NhdHRlci9zdHlsZSI6MTIxNSwiLi9hdHRyaWJ1dGVzIjoxMzQ1LCIuL2NhbGMiOjEzNDYsIi4vY3Jvc3NfdHJhY2VfY2FsYyI6MTM0NywiLi9kZWZhdWx0cyI6MTM0OCwiLi9ob3ZlciI6MTM1MCwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM1MiwiLi9sYXlvdXRfZGVmYXVsdHMiOjEzNTMsIi4vcGxvdCI6MTM1NCwiLi9zdHlsZSI6MTM1NX1dLDEzNTI6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYm94L2xheW91dF9hdHRyaWJ1dGVzIiksaT10KCIuLi8uLi9saWIiKS5leHRlbmRGbGF0O2UuZXhwb3J0cz17dmlvbGlubW9kZTppKHt9LG4uYm94bW9kZSx7fSksdmlvbGluZ2FwOmkoe30sbi5ib3hnYXAse30pLHZpb2xpbmdyb3VwZ2FwOmkoe30sbi5ib3hncm91cGdhcCx7fSl9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvbGF5b3V0X2F0dHJpYnV0ZXMiOjk0Nn1dLDEzNTM6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuL2xheW91dF9hdHRyaWJ1dGVzIiksYT10KCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXthLl9zdXBwbHkodCxlLHIsKGZ1bmN0aW9uKHIsYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxpLHIsYSl9KSwidmlvbGluIil9fSx7Ii4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvbGF5b3V0X2RlZmF1bHRzIjo5NDcsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzNTJ9XSwxMzU0OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIkBwbG90bHkvZDMiKSxpPXQoIi4uLy4uL2xpYiIpLGE9dCgiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIiksbz10KCIuLi9ib3gvcGxvdCIpLHM9dCgiLi4vc2NhdHRlci9saW5lX3BvaW50cyIpLGw9dCgiLi9oZWxwZXJzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQsZj1lLnhheGlzLGg9ZS55YXhpcztmdW5jdGlvbiBwKHQpe3ZhciBlPXModCx7eGF4aXM6Zix5YXhpczpoLGNvbm5lY3RHYXBzOiEwLGJhc2VUb2xlcmFuY2U6Ljc1LHNoYXBlOiJzcGxpbmUiLHNpbXBsaWZ5OiEwLGxpbmVhcml6ZWQ6ITB9KTtyZXR1cm4gYS5zbW9vdGhvcGVuKGVbMF0sMSl9aS5tYWtlVHJhY2VHcm91cHMoYyxyLCJ0cmFjZSB2aW9saW5zIikuZWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9bi5zZWxlY3QodGhpcyksYT10WzBdLHM9YS50LGM9YS50cmFjZTtpZighMCE9PWMudmlzaWJsZXx8cy5lbXB0eSlyLnJlbW92ZSgpO2Vsc2V7dmFyIGQ9cy5iUG9zLG09cy5iZFBvcyxnPWVbcy52YWxMZXR0ZXIrImF4aXMiXSx2PWVbcy5wb3NMZXR0ZXIrImF4aXMiXSx5PSJib3RoIj09PWMuc2lkZSx4PXl8fCJwb3NpdGl2ZSI9PT1jLnNpZGUsYj15fHwibmVnYXRpdmUiPT09Yy5zaWRlLF89ci5zZWxlY3RBbGwoInBhdGgudmlvbGluIikuZGF0YShpLmlkZW50aXR5KTtfLmVudGVyKCkuYXBwZW5kKCJwYXRoIikuc3R5bGUoInZlY3Rvci1lZmZlY3QiLCJub24tc2NhbGluZy1zdHJva2UiKS5hdHRyKCJjbGFzcyIsInZpb2xpbiIpLF8uZXhpdCgpLnJlbW92ZSgpLF8uZWFjaCgoZnVuY3Rpb24odCl7dmFyIGUscixpLGEsbyxsLGYsaCxfPW4uc2VsZWN0KHRoaXMpLHc9dC5kZW5zaXR5LFQ9dy5sZW5ndGgsaz12LmMybCh0LnBvcytkLCEwKSxBPXYubDJwKGspO2lmKGMud2lkdGgpZT1zLm1heEtERS9tO2Vsc2V7dmFyIE09dS5fdmlvbGluU2NhbGVHcm91cFN0YXRzW2Muc2NhbGVncm91cF07ZT0iY291bnQiPT09Yy5zY2FsZW1vZGU/TS5tYXhLREUvbSooTS5tYXhDb3VudC90LnB0cy5sZW5ndGgpOk0ubWF4S0RFL219aWYoeCl7Zm9yKGY9bmV3IEFycmF5KFQpLG89MDtvPFQ7bysrKShoPWZbb109e30pW3MucG9zTGV0dGVyXT1rK3dbb10udi9lLGhbcy52YWxMZXR0ZXJdPWcuYzJsKHdbb10udCwhMCk7cj1wKGYpfWlmKGIpe2ZvcihmPW5ldyBBcnJheShUKSxsPTAsbz1ULTE7bDxUO2wrKyxvLS0pKGg9ZltsXT17fSlbcy5wb3NMZXR0ZXJdPWstd1tvXS52L2UsaFtzLnZhbExldHRlcl09Zy5jMmwod1tvXS50LCEwKTtpPXAoZil9aWYoeSlhPXIrIkwiK2kuc3Vic3RyKDEpKyJaIjtlbHNle3ZhciBTPVtBLGcuYzJwKHdbMF0udCldLEU9W0EsZy5jMnAod1tULTFdLnQpXTsiaCI9PT1jLm9yaWVudGF0aW9uJiYoUy5yZXZlcnNlKCksRS5yZXZlcnNlKCkpLGE9eD8iTSIrUysiTCIrci5zdWJzdHIoMSkrIkwiK0U6Ik0iK0UrIkwiK2kuc3Vic3RyKDEpKyJMIitTfV8uYXR0cigiZCIsYSksdC5wb3NDZW50ZXJQeD1BLHQucG9zRGVuc2l0eVNjYWxlPWUqbSx0LnBhdGg9Xy5ub2RlKCksdC5wYXRoTGVuZ3RoPXQucGF0aC5nZXRUb3RhbExlbmd0aCgpLyh5PzI6MSl9KSk7dmFyIHcsVCxrLEE9Yy5ib3gsTT1BLndpZHRoLFM9KEEubGluZXx8e30pLndpZHRoO3k/KHc9bSpNLFQ9MCk6eD8odz1bMCxtKk0vMl0sVD1TKnt4OjEseTotMX1bcy5wb3NMZXR0ZXJdKToodz1bbSpNLzIsMF0sVD1TKnt4Oi0xLHk6MX1bcy5wb3NMZXR0ZXJdKSxvLnBsb3RCb3hBbmRXaGlza2VycyhyLHtwb3M6dix2YWw6Z30sYyx7YlBvczpkLGJkUG9zOncsYlBvc1B4T2Zmc2V0OlR9KSxvLnBsb3RCb3hNZWFuKHIse3Bvczp2LHZhbDpnfSxjLHtiUG9zOmQsYmRQb3M6dyxiUG9zUHhPZmZzZXQ6VH0pLCFjLmJveC52aXNpYmxlJiZjLm1lYW5saW5lLnZpc2libGUmJihrPWkuaWRlbnRpdHkpO3ZhciBFPXIuc2VsZWN0QWxsKCJwYXRoLm1lYW5saW5lIikuZGF0YShrfHxbXSk7RS5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwibWVhbmxpbmUiKS5zdHlsZSgiZmlsbCIsIm5vbmUiKS5zdHlsZSgidmVjdG9yLWVmZmVjdCIsIm5vbi1zY2FsaW5nLXN0cm9rZSIpLEUuZXhpdCgpLnJlbW92ZSgpLEUuZWFjaCgoZnVuY3Rpb24odCl7dmFyIGU9Zy5jMnAodC5tZWFuLCEwKSxyPWwuZ2V0UG9zaXRpb25PbktkZVBhdGgodCxjLGUpO24uc2VsZWN0KHRoaXMpLmF0dHIoImQiLCJoIj09PWMub3JpZW50YXRpb24/Ik0iK2UrIiwiK3JbMF0rIlYiK3JbMV06Ik0iK3JbMF0rIiwiK2UrIkgiK3JbMV0pfSkpLG8ucGxvdFBvaW50cyhyLHt4OmYseTpofSxjLHMpfX0pKX19LHsiLi4vLi4vY29tcG9uZW50cy9kcmF3aW5nIjo2NjEsIi4uLy4uL2xpYiI6Nzc2LCIuLi9ib3gvcGxvdCI6OTQ4LCIuLi9zY2F0dGVyL2xpbmVfcG9pbnRzIjoxMjA1LCIuL2hlbHBlcnMiOjEzNDksIkBwbG90bHkvZDMiOjU4fV0sMTM1NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIiksYT10KCIuLi9zY2F0dGVyL3N0eWxlIikuc3R5bGVQb2ludHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4uc2VsZWN0KHQpLnNlbGVjdEFsbCgiZy50cmFjZS52aW9saW5zIik7ZS5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSksZS5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1lWzBdLnRyYWNlLG89bi5zZWxlY3QodGhpcykscz1yLmJveHx8e30sbD1zLmxpbmV8fHt9LGM9ci5tZWFubGluZXx8e30sdT1jLndpZHRoO28uc2VsZWN0QWxsKCJwYXRoLnZpb2xpbiIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLHIubGluZS53aWR0aCsicHgiKS5jYWxsKGkuc3Ryb2tlLHIubGluZS5jb2xvcikuY2FsbChpLmZpbGwsci5maWxsY29sb3IpLG8uc2VsZWN0QWxsKCJwYXRoLmJveCIpLnN0eWxlKCJzdHJva2Utd2lkdGgiLGwud2lkdGgrInB4IikuY2FsbChpLnN0cm9rZSxsLmNvbG9yKS5jYWxsKGkuZmlsbCxzLmZpbGxjb2xvcik7dmFyIGY9eyJzdHJva2Utd2lkdGgiOnUrInB4Iiwic3Ryb2tlLWRhc2hhcnJheSI6Mip1KyJweCwiK3UrInB4In07by5zZWxlY3RBbGwoInBhdGgubWVhbiIpLnN0eWxlKGYpLmNhbGwoaS5zdHJva2UsYy5jb2xvciksby5zZWxlY3RBbGwoInBhdGgubWVhbmxpbmUiKS5zdHlsZShmKS5jYWxsKGkuc3Ryb2tlLGMuY29sb3IpLGEobyxyLHQpfSkpfX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uL3NjYXR0ZXIvc3R5bGUiOjEyMTUsIkBwbG90bHkvZDMiOjU4fV0sMTM1NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUvYXR0cmlidXRlcyIpLGk9dCgiLi4vaXNvc3VyZmFjZS9hdHRyaWJ1dGVzIiksYT10KCIuLi9zdXJmYWNlL2F0dHJpYnV0ZXMiKSxvPXQoIi4uLy4uL3Bsb3RzL2F0dHJpYnV0ZXMiKSxzPXQoIi4uLy4uL2xpYi9leHRlbmQiKS5leHRlbmRGbGF0LGw9dCgiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyIpLm92ZXJyaWRlQWxsLGM9ZS5leHBvcnRzPWwocyh7eDppLngseTppLnksejppLnosdmFsdWU6aS52YWx1ZSxpc29taW46aS5pc29taW4saXNvbWF4OmkuaXNvbWF4LHN1cmZhY2U6aS5zdXJmYWNlLHNwYWNlZnJhbWU6e3Nob3c6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITF9LGZpbGw6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDoxfX0sc2xpY2VzOmkuc2xpY2VzLGNhcHM6aS5jYXBzLHRleHQ6aS50ZXh0LGhvdmVydGV4dDppLmhvdmVydGV4dCx4aG92ZXJmb3JtYXQ6aS54aG92ZXJmb3JtYXQseWhvdmVyZm9ybWF0OmkueWhvdmVyZm9ybWF0LHpob3ZlcmZvcm1hdDppLnpob3ZlcmZvcm1hdCx2YWx1ZWhvdmVyZm9ybWF0OmkudmFsdWVob3ZlcmZvcm1hdCxob3ZlcnRlbXBsYXRlOmkuaG92ZXJ0ZW1wbGF0ZX0sbigiIix7Y29sb3JBdHRyOiJgdmFsdWVgIixzaG93U2NhbGVEZmx0OiEwLGVkaXRUeXBlT3ZlcnJpZGU6ImNhbGMifSkse2NvbG9yYmFyOmkuY29sb3JiYXIsb3BhY2l0eTppLm9wYWNpdHksb3BhY2l0eXNjYWxlOmEub3BhY2l0eXNjYWxlLGxpZ2h0cG9zaXRpb246aS5saWdodHBvc2l0aW9uLGxpZ2h0aW5nOmkubGlnaHRpbmcsZmxhdHNoYWRpbmc6aS5mbGF0c2hhZGluZyxjb250b3VyOmkuY29udG91cixob3ZlcmluZm86cyh7fSxvLmhvdmVyaW5mbyksc2hvd2xlZ2VuZDpzKHt9LG8uc2hvd2xlZ2VuZCx7ZGZsdDohMX0pfSksImNhbGMiLCJuZXN0ZWQiKTtjLnguZWRpdFR5cGU9Yy55LmVkaXRUeXBlPWMuei5lZGl0VHlwZT1jLnZhbHVlLmVkaXRUeXBlPSJjYWxjK2NsZWFyQXhpc1R5cGVzIixjLnRyYW5zZm9ybXM9dm9pZCAwfSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZS9hdHRyaWJ1dGVzIjo2NDYsIi4uLy4uL2xpYi9leHRlbmQiOjc2NiwiLi4vLi4vcGxvdF9hcGkvZWRpdF90eXBlcyI6ODA5LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uL2lzb3N1cmZhY2UvYXR0cmlidXRlcyI6MTEyNywiLi4vc3VyZmFjZS9hdHRyaWJ1dGVzIjoxMzE1fV0sMTM1NzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJnbC1tZXNoM2QiKSxpPXQoIi4uLy4uL2xpYi9nbF9mb3JtYXRfY29sb3IiKS5wYXJzZUNvbG9yU2NhbGUsYT10KCIuLi8uLi9saWIvc3RyMnJnYmFycmF5Iiksbz10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yc2NhbGUiKS5leHRyYWN0T3B0cyxzPXQoIi4uLy4uL3Bsb3RzL2dsM2QvemlwMyIpLGw9dCgiLi4vaXNvc3VyZmFjZS9jb252ZXJ0IikuZmluZE5lYXJlc3RPbkF4aXMsYz10KCIuLi9pc29zdXJmYWNlL2NvbnZlcnQiKS5nZW5lcmF0ZUlzb01lc2hlcztmdW5jdGlvbiB1KHQsZSxyKXt0aGlzLnNjZW5lPXQsdGhpcy51aWQ9cix0aGlzLm1lc2g9ZSx0aGlzLm5hbWU9IiIsdGhpcy5kYXRhPW51bGwsdGhpcy5zaG93Q29udG91cj0hMX12YXIgZj11LnByb3RvdHlwZTtmLmhhbmRsZVBpY2s9ZnVuY3Rpb24odCl7aWYodC5vYmplY3Q9PT10aGlzLm1lc2gpe3ZhciBlPXQuZGF0YS5pbmRleCxyPXRoaXMuZGF0YS5fbWVzaFhbZV0sbj10aGlzLmRhdGEuX21lc2hZW2VdLGk9dGhpcy5kYXRhLl9tZXNoWltlXSxhPXRoaXMuZGF0YS5fWXMubGVuZ3RoLG89dGhpcy5kYXRhLl9acy5sZW5ndGgscz1sKHIsdGhpcy5kYXRhLl9YcykuaWQsYz1sKG4sdGhpcy5kYXRhLl9ZcykuaWQsdT1sKGksdGhpcy5kYXRhLl9acykuaWQsZj10LmluZGV4PXUrbypjK28qYSpzO3QudHJhY2VDb29yZGluYXRlPVt0aGlzLmRhdGEuX21lc2hYW2ZdLHRoaXMuZGF0YS5fbWVzaFlbZl0sdGhpcy5kYXRhLl9tZXNoWltmXSx0aGlzLmRhdGEuX3ZhbHVlW2ZdXTt2YXIgaD10aGlzLmRhdGEuaG92ZXJ0ZXh0fHx0aGlzLmRhdGEudGV4dDtyZXR1cm4gQXJyYXkuaXNBcnJheShoKSYmdm9pZCAwIT09aFtmXT90LnRleHRMYWJlbD1oW2ZdOmgmJih0LnRleHRMYWJlbD1oKSwhMH19LGYudXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc2NlbmUscj1lLmZ1bGxTY2VuZUxheW91dDtmdW5jdGlvbiBuKHQsZSxyLG4pe3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQuZDJsKGUsMCxuKSpyfSkpfXRoaXMuZGF0YT1jKHQpO3ZhciBsPXtwb3NpdGlvbnM6cyhuKHIueGF4aXMsdC5fbWVzaFgsZS5kYXRhU2NhbGVbMF0sdC54Y2FsZW5kYXIpLG4oci55YXhpcyx0Ll9tZXNoWSxlLmRhdGFTY2FsZVsxXSx0LnljYWxlbmRhciksbihyLnpheGlzLHQuX21lc2haLGUuZGF0YVNjYWxlWzJdLHQuemNhbGVuZGFyKSksY2VsbHM6cyh0Ll9tZXNoSSx0Ll9tZXNoSix0Ll9tZXNoSyksbGlnaHRQb3NpdGlvbjpbdC5saWdodHBvc2l0aW9uLngsdC5saWdodHBvc2l0aW9uLnksdC5saWdodHBvc2l0aW9uLnpdLGFtYmllbnQ6dC5saWdodGluZy5hbWJpZW50LGRpZmZ1c2U6dC5saWdodGluZy5kaWZmdXNlLHNwZWN1bGFyOnQubGlnaHRpbmcuc3BlY3VsYXIscm91Z2huZXNzOnQubGlnaHRpbmcucm91Z2huZXNzLGZyZXNuZWw6dC5saWdodGluZy5mcmVzbmVsLHZlcnRleE5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcudmVydGV4bm9ybWFsc2Vwc2lsb24sZmFjZU5vcm1hbHNFcHNpbG9uOnQubGlnaHRpbmcuZmFjZW5vcm1hbHNlcHNpbG9uLG9wYWNpdHk6dC5vcGFjaXR5LG9wYWNpdHlzY2FsZTp0Lm9wYWNpdHlzY2FsZSxjb250b3VyRW5hYmxlOnQuY29udG91ci5zaG93LGNvbnRvdXJDb2xvcjphKHQuY29udG91ci5jb2xvcikuc2xpY2UoMCwzKSxjb250b3VyV2lkdGg6dC5jb250b3VyLndpZHRoLHVzZUZhY2V0Tm9ybWFsczp0LmZsYXRzaGFkaW5nfSx1PW8odCk7bC52ZXJ0ZXhJbnRlbnNpdHk9dC5fbWVzaEludGVuc2l0eSxsLnZlcnRleEludGVuc2l0eUJvdW5kcz1bdS5taW4sdS5tYXhdLGwuY29sb3JtYXA9aSh0KSx0aGlzLm1lc2gudXBkYXRlKGwpfSxmLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLnNjZW5lLmdscGxvdC5yZW1vdmUodGhpcy5tZXNoKSx0aGlzLm1lc2guZGlzcG9zZSgpfSxlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmdscGxvdC5nbCxpPW4oe2dsOnJ9KSxhPW5ldyB1KHQsaSxlLnVpZCk7cmV0dXJuIGkuX3RyYWNlPWEsYS51cGRhdGUoZSksdC5nbHBsb3QuYWRkKGkpLGF9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3JzY2FsZSI6NjUxLCIuLi8uLi9saWIvZ2xfZm9ybWF0X2NvbG9yIjo3NzIsIi4uLy4uL2xpYi9zdHIycmdiYXJyYXkiOjgwMSwiLi4vLi4vcGxvdHMvZ2wzZC96aXAzIjo4ODAsIi4uL2lzb3N1cmZhY2UvY29udmVydCI6MTEyOSwiZ2wtbWVzaDNkIjozMDN9XSwxMzU4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO3ZhciBuPXQoIi4uLy4uL2xpYiIpLGk9dCgiLi9hdHRyaWJ1dGVzIiksYT10KCIuLi9pc29zdXJmYWNlL2RlZmF1bHRzIikuc3VwcGx5SXNvRGVmYXVsdHMsbz10KCIuLi9zdXJmYWNlL2RlZmF1bHRzIikub3BhY2l0eXNjYWxlRGVmYXVsdHM7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe2Z1bmN0aW9uIGwocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1hKHQsZSxyLHMsbCksbyh0LGUscyxsKX19LHsiLi4vLi4vbGliIjo3NzYsIi4uL2lzb3N1cmZhY2UvZGVmYXVsdHMiOjExMzAsIi4uL3N1cmZhY2UvZGVmYXVsdHMiOjEzMTgsIi4vYXR0cmlidXRlcyI6MTM1Nn1dLDEzNTk6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPXthdHRyaWJ1dGVzOnQoIi4vYXR0cmlidXRlcyIpLHN1cHBseURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKSxjYWxjOnQoIi4uL2lzb3N1cmZhY2UvY2FsYyIpLGNvbG9yYmFyOnttaW46ImNtaW4iLG1heDoiY21heCJ9LHBsb3Q6dCgiLi9jb252ZXJ0IiksbW9kdWxlVHlwZToidHJhY2UiLG5hbWU6InZvbHVtZSIsYmFzZVBsb3RNb2R1bGU6dCgiLi4vLi4vcGxvdHMvZ2wzZCIpLGNhdGVnb3JpZXM6WyJnbDNkIiwic2hvd0xlZ2VuZCJdLG1ldGE6e319fSx7Ii4uLy4uL3Bsb3RzL2dsM2QiOjg2OSwiLi4vaXNvc3VyZmFjZS9jYWxjIjoxMTI4LCIuL2F0dHJpYnV0ZXMiOjEzNTYsIi4vY29udmVydCI6MTM1NywiLi9kZWZhdWx0cyI6MTM1OH1dLDEzNjA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vYmFyL2F0dHJpYnV0ZXMiKSxpPXQoIi4uL3NjYXR0ZXIvYXR0cmlidXRlcyIpLmxpbmUsYT10KCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIiksbz10KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYXhpc19mb3JtYXRfYXR0cmlidXRlcyIpLmF4aXNIb3ZlckZvcm1hdCxzPXQoIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiKS5ob3ZlcnRlbXBsYXRlQXR0cnMsbD10KCIuLi8uLi9wbG90cy90ZW1wbGF0ZV9hdHRyaWJ1dGVzIikudGV4dHRlbXBsYXRlQXR0cnMsYz10KCIuL2NvbnN0YW50cyIpLHU9dCgiLi4vLi4vbGliL2V4dGVuZCIpLmV4dGVuZEZsYXQsZj10KCIuLi8uLi9jb21wb25lbnRzL2NvbG9yIik7ZnVuY3Rpb24gaCh0KXtyZXR1cm57bWFya2VyOntjb2xvcjp1KHt9LG4ubWFya2VyLmNvbG9yLHthcnJheU9rOiExLGVkaXRUeXBlOiJzdHlsZSJ9KSxsaW5lOntjb2xvcjp1KHt9LG4ubWFya2VyLmxpbmUuY29sb3Ise2FycmF5T2s6ITEsZWRpdFR5cGU6InN0eWxlIn0pLHdpZHRoOnUoe30sbi5tYXJrZXIubGluZS53aWR0aCx7YXJyYXlPazohMSxlZGl0VHlwZToic3R5bGUifSksZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn0sZWRpdFR5cGU6InN0eWxlIn19ZS5leHBvcnRzPXttZWFzdXJlOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sYmFzZTp7dmFsVHlwZToibnVtYmVyIixkZmx0Om51bGwsYXJyYXlPazohMSxlZGl0VHlwZToiY2FsYyJ9LHg6bi54LHgwOm4ueDAsZHg6bi5keCx5Om4ueSx5MDpuLnkwLGR5Om4uZHkseHBlcmlvZDpuLnhwZXJpb2QseXBlcmlvZDpuLnlwZXJpb2QseHBlcmlvZDA6bi54cGVyaW9kMCx5cGVyaW9kMDpuLnlwZXJpb2QwLHhwZXJpb2RhbGlnbm1lbnQ6bi54cGVyaW9kYWxpZ25tZW50LHlwZXJpb2RhbGlnbm1lbnQ6bi55cGVyaW9kYWxpZ25tZW50LHhob3ZlcmZvcm1hdDpvKCJ4IikseWhvdmVyZm9ybWF0Om8oInkiKSxob3ZlcnRleHQ6bi5ob3ZlcnRleHQsaG92ZXJ0ZW1wbGF0ZTpzKHt9LHtrZXlzOmMuZXZlbnREYXRhS2V5c30pLGhvdmVyaW5mbzp1KHt9LGEuaG92ZXJpbmZvLHtmbGFnczpbIm5hbWUiLCJ4IiwieSIsInRleHQiLCJpbml0aWFsIiwiZGVsdGEiLCJmaW5hbCJdfSksdGV4dGluZm86e3ZhbFR5cGU6ImZsYWdsaXN0IixmbGFnczpbImxhYmVsIiwidGV4dCIsImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl0sZXh0cmFzOlsibm9uZSJdLGVkaXRUeXBlOiJwbG90IixhcnJheU9rOiExfSx0ZXh0dGVtcGxhdGU6bCh7ZWRpdFR5cGU6InBsb3QifSx7a2V5czpjLmV2ZW50RGF0YUtleXMuY29uY2F0KFsibGFiZWwiXSl9KSx0ZXh0Om4udGV4dCx0ZXh0cG9zaXRpb246bi50ZXh0cG9zaXRpb24saW5zaWRldGV4dGFuY2hvcjpuLmluc2lkZXRleHRhbmNob3IsdGV4dGFuZ2xlOm4udGV4dGFuZ2xlLHRleHRmb250Om4udGV4dGZvbnQsaW5zaWRldGV4dGZvbnQ6bi5pbnNpZGV0ZXh0Zm9udCxvdXRzaWRldGV4dGZvbnQ6bi5vdXRzaWRldGV4dGZvbnQsY29uc3RyYWludGV4dDpuLmNvbnN0cmFpbnRleHQsY2xpcG9uYXhpczpuLmNsaXBvbmF4aXMsb3JpZW50YXRpb246bi5vcmllbnRhdGlvbixvZmZzZXQ6bi5vZmZzZXQsd2lkdGg6bi53aWR0aCxpbmNyZWFzaW5nOmgoKSxkZWNyZWFzaW5nOmgoKSx0b3RhbHM6aCgpLGNvbm5lY3Rvcjp7bGluZTp7Y29sb3I6dSh7fSxpLmNvbG9yLHtkZmx0OmYuZGVmYXVsdExpbmV9KSx3aWR0aDp1KHt9LGkud2lkdGgse2VkaXRUeXBlOiJwbG90In0pLGRhc2g6aS5kYXNoLGVkaXRUeXBlOiJwbG90In0sbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsic3Bhbm5pbmciLCJiZXR3ZWVuIl0sZGZsdDoiYmV0d2VlbiIsZWRpdFR5cGU6InBsb3QifSx2aXNpYmxlOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJwbG90In0sZWRpdFR5cGU6InBsb3QifSxvZmZzZXRncm91cDpuLm9mZnNldGdyb3VwLGFsaWdubWVudGdyb3VwOm4uYWxpZ25tZW50Z3JvdXB9fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vbGliL2V4dGVuZCI6NzY2LCIuLi8uLi9wbG90cy9hdHRyaWJ1dGVzIjo4MjMsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGlzX2Zvcm1hdF9hdHRyaWJ1dGVzIjo4MzAsIi4uLy4uL3Bsb3RzL3RlbXBsYXRlX2F0dHJpYnV0ZXMiOjg5OSwiLi4vYmFyL2F0dHJpYnV0ZXMiOjkxNCwiLi4vc2NhdHRlci9hdHRyaWJ1dGVzIjoxMTkxLCIuL2NvbnN0YW50cyI6MTM2Mn1dLDEzNjE6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKSxpPXQoIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9hbGlnbl9wZXJpb2QiKSxhPXQoIi4uLy4uL2xpYiIpLm1lcmdlQXJyYXksbz10KCIuLi9zY2F0dGVyL2NhbGNfc2VsZWN0aW9uIikscz10KCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIikuQkFETlVNO2Z1bmN0aW9uIGwodCl7cmV0dXJuImEiPT09dHx8ImFic29sdXRlIj09PXR9ZnVuY3Rpb24gYyh0KXtyZXR1cm4idCI9PT10fHwidG90YWwiPT09dH1lLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcix1LGYsaCxwLGQsbT1uLmdldEZyb21JZCh0LGUueGF4aXN8fCJ4IiksZz1uLmdldEZyb21JZCh0LGUueWF4aXN8fCJ5Iik7ImgiPT09ZS5vcmllbnRhdGlvbj8ocj1tLm1ha2VDYWxjZGF0YShlLCJ4IiksZj1nLm1ha2VDYWxjZGF0YShlLCJ5IiksaD1pKGUsZywieSIsZikscD0hIWUueXBlcmlvZGFsaWdubWVudCxkPSJ5Iik6KHI9Zy5tYWtlQ2FsY2RhdGEoZSwieSIpLGY9bS5tYWtlQ2FsY2RhdGEoZSwieCIpLGg9aShlLG0sIngiLGYpLHA9ISFlLnhwZXJpb2RhbGlnbm1lbnQsZD0ieCIpLHU9aC52YWxzO2Zvcih2YXIgdix5PU1hdGgubWluKHUubGVuZ3RoLHIubGVuZ3RoKSx4PW5ldyBBcnJheSh5KSxiPTAsXz0hMSx3PTA7dzx5O3crKyl7dmFyIFQ9clt3XXx8MCxrPSExOyhyW3ddIT09c3x8YyhlLm1lYXN1cmVbd10pfHxsKGUubWVhc3VyZVt3XSkpJiZ3KzE8eSYmKHJbdysxXSE9PXN8fGMoZS5tZWFzdXJlW3crMV0pfHxsKGUubWVhc3VyZVt3KzFdKSkmJihrPSEwKTt2YXIgQT14W3ddPXtpOncscDp1W3ddLHM6VCxyYXdTOlQsY05leHQ6a307bChlLm1lYXN1cmVbd10pPyhiPUEucyxBLmlzU3VtPSEwLEEuZGlyPSJ0b3RhbHMiLEEucz1iKTpjKGUubWVhc3VyZVt3XSk/KEEuaXNTdW09ITAsQS5kaXI9InRvdGFscyIsQS5zPWIpOihBLmlzU3VtPSExLEEuZGlyPUEucmF3UzwwPyJkZWNyZWFzaW5nIjoiaW5jcmVhc2luZyIsdj1BLnMsQS5zPWIrdixiKz12KSwidG90YWxzIj09PUEuZGlyJiYoXz0hMCkscCYmKHhbd10ub3JpZ19wPWZbd10seFt3XVtkKyJFbmQiXT1oLmVuZHNbd10seFt3XVtkKyJTdGFydCJdPWguc3RhcnRzW3ddKSxlLmlkcyYmKEEuaWQ9U3RyaW5nKGUuaWRzW3ddKSksQS52PShlLmJhc2V8fDApK2J9cmV0dXJuIHgubGVuZ3RoJiYoeFswXS5oYXNUb3RhbHM9XyksYShlLnRleHQseCwidHgiKSxhKGUuaG92ZXJ0ZXh0LHgsImh0eCIpLG8oeCxlKSx4fX0seyIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4vYWxpZ25fcGVyaW9kIjo4MjQsIi4uLy4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4uL3NjYXR0ZXIvY2FsY19zZWxlY3Rpb24iOjExOTN9XSwxMzYyOltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17ZXZlbnREYXRhS2V5czpbImluaXRpYWwiLCJkZWx0YSIsImZpbmFsIl19fSx7fV0sMTM2MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9iYXIvY3Jvc3NfdHJhY2VfY2FsYyIpLnNldEdyb3VwUG9zaXRpb25zO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGksYT10Ll9mdWxsTGF5b3V0LG89dC5fZnVsbERhdGEscz10LmNhbGNkYXRhLGw9ZS54YXhpcyxjPWUueWF4aXMsdT1bXSxmPVtdLGg9W107Zm9yKGk9MDtpPG8ubGVuZ3RoO2krKyl7dmFyIHA9b1tpXTshMD09PXAudmlzaWJsZSYmcC54YXhpcz09PWwuX2lkJiZwLnlheGlzPT09Yy5faWQmJiJ3YXRlcmZhbGwiPT09cC50eXBlJiYocj1zW2ldLCJoIj09PXAub3JpZW50YXRpb24/aC5wdXNoKHIpOmYucHVzaChyKSx1LnB1c2gocikpfXZhciBkPXttb2RlOmEud2F0ZXJmYWxsbW9kZSxub3JtOmEud2F0ZXJmYWxsbm9ybSxnYXA6YS53YXRlcmZhbGxnYXAsZ3JvdXBnYXA6YS53YXRlcmZhbGxncm91cGdhcH07Zm9yKG4odCxsLGMsZixkKSxuKHQsYyxsLGgsZCksaT0wO2k8dS5sZW5ndGg7aSsrKXtyPXVbaV07Zm9yKHZhciBtPTA7bTxyLmxlbmd0aDttKyspe3ZhciBnPXJbbV07ITE9PT1nLmlzU3VtJiYoZy5zMCs9MD09PW0/MDpyW20tMV0ucyksbSsxPHIubGVuZ3RoJiYoclttXS5uZXh0UDA9clttKzFdLnAwLHJbbV0ubmV4dFMwPXJbbSsxXS5zMCl9fX19LHsiLi4vYmFyL2Nyb3NzX3RyYWNlX2NhbGMiOjkxN31dLDEzNjQ6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vbGliIiksaT10KCIuLi9iYXIvZGVmYXVsdHMiKS5oYW5kbGVHcm91cGluZ0RlZmF1bHRzLGE9dCgiLi4vYmFyL2RlZmF1bHRzIikuaGFuZGxlVGV4dCxvPXQoIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiKSxzPXQoIi4uL3NjYXR0ZXIvcGVyaW9kX2RlZmF1bHRzIiksbD10KCIuL2F0dHJpYnV0ZXMiKSxjPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSx1PXQoIi4uLy4uL2NvbnN0YW50cy9kZWx0YS5qcyIpLGY9dS5JTkNSRUFTSU5HLkNPTE9SLGg9dS5ERUNSRUFTSU5HLkNPTE9SO2Z1bmN0aW9uIHAodCxlLHIpe3QoZSsiLm1hcmtlci5jb2xvciIsciksdChlKyIubWFya2VyLmxpbmUuY29sb3IiLGMuZGVmYXVsdExpbmUpLHQoZSsiLm1hcmtlci5saW5lLndpZHRoIil9ZS5leHBvcnRzPXtzdXBwbHlEZWZhdWx0czpmdW5jdGlvbih0LGUscixpKXtmdW5jdGlvbiBjKHIsaSl7cmV0dXJuIG4uY29lcmNlKHQsZSxsLHIsaSl9aWYobyh0LGUsaSxjKSl7cyh0LGUsaSxjKSxjKCJ4aG92ZXJmb3JtYXQiKSxjKCJ5aG92ZXJmb3JtYXQiKSxjKCJtZWFzdXJlIiksYygib3JpZW50YXRpb24iLGUueCYmIWUueT8iaCI6InYiKSxjKCJiYXNlIiksYygib2Zmc2V0IiksYygid2lkdGgiKSxjKCJ0ZXh0IiksYygiaG92ZXJ0ZXh0IiksYygiaG92ZXJ0ZW1wbGF0ZSIpO3ZhciB1PWMoInRleHRwb3NpdGlvbiIpO2lmKGEodCxlLGksYyx1LHttb2R1bGVIYXNTZWxlY3RlZDohMSxtb2R1bGVIYXNVbnNlbGVjdGVkOiExLG1vZHVsZUhhc0NvbnN0cmFpbjohMCxtb2R1bGVIYXNDbGlwb25heGlzOiEwLG1vZHVsZUhhc1RleHRhbmdsZTohMCxtb2R1bGVIYXNJbnNpZGVhbmNob3I6ITB9KSwibm9uZSIhPT1lLnRleHRwb3NpdGlvbiYmKGMoInRleHR0ZW1wbGF0ZSIpLGUudGV4dHRlbXBsYXRlfHxjKCJ0ZXh0aW5mbyIpKSxwKGMsImluY3JlYXNpbmciLGYpLHAoYywiZGVjcmVhc2luZyIsaCkscChjLCJ0b3RhbHMiLCIjNDQ5OUZGIiksYygiY29ubmVjdG9yLnZpc2libGUiKSljKCJjb25uZWN0b3IubW9kZSIpLGMoImNvbm5lY3Rvci5saW5lLndpZHRoIikmJihjKCJjb25uZWN0b3IubGluZS5jb2xvciIpLGMoImNvbm5lY3Rvci5saW5lLmRhc2giKSl9ZWxzZSBlLnZpc2libGU9ITF9LGNyb3NzVHJhY2VEZWZhdWx0czpmdW5jdGlvbih0LGUpe3ZhciByLGE7ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbi5jb2VyY2UoYS5faW5wdXQsYSxsLHQpfWlmKCJncm91cCI9PT1lLndhdGVyZmFsbG1vZGUpZm9yKHZhciBzPTA7czx0Lmxlbmd0aDtzKyspcj0oYT10W3NdKS5faW5wdXQsaShyLGEsZSxvKX19fSx7Ii4uLy4uL2NvbXBvbmVudHMvY29sb3IiOjYzOSwiLi4vLi4vY29uc3RhbnRzL2RlbHRhLmpzIjo3NDYsIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvZGVmYXVsdHMiOjkxOCwiLi4vc2NhdHRlci9wZXJpb2RfZGVmYXVsdHMiOjEyMTEsIi4uL3NjYXR0ZXIveHlfZGVmYXVsdHMiOjEyMTgsIi4vYXR0cmlidXRlcyI6MTM2MH1dLDEzNjU6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueD0ieFZhbCJpbiBlP2UueFZhbDplLngsdC55PSJ5VmFsImluIGU/ZS55VmFsOmUueSwiaW5pdGlhbCJpbiBlJiYodC5pbml0aWFsPWUuaW5pdGlhbCksImRlbHRhImluIGUmJih0LmRlbHRhPWUuZGVsdGEpLCJmaW5hbCJpbiBlJiYodC5maW5hbD1lLmZpbmFsKSxlLnhhJiYodC54YXhpcz1lLnhhKSxlLnlhJiYodC55YXhpcz1lLnlhKSx0fX0se31dLDEzNjY6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiKS5ob3ZlckxhYmVsVGV4dCxpPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKS5vcGFjaXR5LGE9dCgiLi4vYmFyL2hvdmVyIikuaG92ZXJPbkJhcnMsbz10KCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiKSxzPW8uSU5DUkVBU0lORy5TWU1CT0wsbD1vLkRFQ1JFQVNJTkcuU1lNQk9MO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUscixvLGMpe3ZhciB1PWEodCxlLHIsbyxjKTtpZih1KXt2YXIgZj11LmNkLGg9ZlswXS50cmFjZSxwPSJoIj09PWgub3JpZW50YXRpb24sZD1wPyJ4IjoieSIsbT1wP3QueGE6dC55YSxnPWZbdS5pbmRleF0sdj1nLmlzU3VtP2cuYitnLnM6Zy5yYXdTO2lmKCFnLmlzU3VtKXt1LmluaXRpYWw9Zy5iK2cucy12LHUuZGVsdGE9dix1LmZpbmFsPXUuaW5pdGlhbCt1LmRlbHRhO3ZhciB5PWsoTWF0aC5hYnModS5kZWx0YSkpO3UuZGVsdGFMYWJlbD12PDA/IigiK3krIikiOnksdS5maW5hbExhYmVsPWsodS5maW5hbCksdS5pbml0aWFsTGFiZWw9ayh1LmluaXRpYWwpfXZhciB4PWcuaGl8fGguaG92ZXJpbmZvLGI9W107aWYoeCYmIm5vbmUiIT09eCYmInNraXAiIT09eCl7dmFyIF89ImFsbCI9PT14LHc9eC5zcGxpdCgiKyIpLFQ9ZnVuY3Rpb24odCl7cmV0dXJuIF98fC0xIT09dy5pbmRleE9mKHQpfTtnLmlzU3VtfHwoIVQoImZpbmFsIil8fFQocD8ieCI6InkiKXx8Yi5wdXNoKHUuZmluYWxMYWJlbCksVCgiZGVsdGEiKSYmKHY8MD9iLnB1c2godS5kZWx0YUxhYmVsKyIgIitsKTpiLnB1c2godS5kZWx0YUxhYmVsKyIgIitzKSksVCgiaW5pdGlhbCIpJiZiLnB1c2goIkluaXRpYWw6ICIrdS5pbml0aWFsTGFiZWwpKX1yZXR1cm4gYi5sZW5ndGgmJih1LmV4dHJhVGV4dD1iLmpvaW4oIjxicj4iKSksdS5jb2xvcj1mdW5jdGlvbih0LGUpe3ZhciByPXRbZS5kaXJdLm1hcmtlcixuPXIuY29sb3IsYT1yLmxpbmUuY29sb3Isbz1yLmxpbmUud2lkdGg7aWYoaShuKSlyZXR1cm4gbjtpZihpKGEpJiZvKXJldHVybiBhfShoLGcpLFt1XX1mdW5jdGlvbiBrKHQpe3JldHVybiBuKG0sdCxoW2QrImhvdmVyZm9ybWF0Il0pfX19LHsiLi4vLi4vY29tcG9uZW50cy9jb2xvciI6NjM5LCIuLi8uLi9jb25zdGFudHMvZGVsdGEuanMiOjc0NiwiLi4vLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vYmFyL2hvdmVyIjo5MjF9XSwxMzY3OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17YXR0cmlidXRlczp0KCIuL2F0dHJpYnV0ZXMiKSxsYXlvdXRBdHRyaWJ1dGVzOnQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKSxzdXBwbHlEZWZhdWx0czp0KCIuL2RlZmF1bHRzIikuc3VwcGx5RGVmYXVsdHMsY3Jvc3NUcmFjZURlZmF1bHRzOnQoIi4vZGVmYXVsdHMiKS5jcm9zc1RyYWNlRGVmYXVsdHMsc3VwcGx5TGF5b3V0RGVmYXVsdHM6dCgiLi9sYXlvdXRfZGVmYXVsdHMiKSxjYWxjOnQoIi4vY2FsYyIpLGNyb3NzVHJhY2VDYWxjOnQoIi4vY3Jvc3NfdHJhY2VfY2FsYyIpLHBsb3Q6dCgiLi9wbG90Iiksc3R5bGU6dCgiLi9zdHlsZSIpLnN0eWxlLGhvdmVyUG9pbnRzOnQoIi4vaG92ZXIiKSxldmVudERhdGE6dCgiLi9ldmVudF9kYXRhIiksc2VsZWN0UG9pbnRzOnQoIi4uL2Jhci9zZWxlY3QiKSxtb2R1bGVUeXBlOiJ0cmFjZSIsbmFtZToid2F0ZXJmYWxsIixiYXNlUGxvdE1vZHVsZTp0KCIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iKSxjYXRlZ29yaWVzOlsiYmFyLWxpa2UiLCJjYXJ0ZXNpYW4iLCJzdmciLCJvcmllbnRlZCIsInNob3dMZWdlbmQiLCJ6b29tU2NhbGUiXSxtZXRhOnt9fX0seyIuLi8uLi9wbG90cy9jYXJ0ZXNpYW4iOjg0MSwiLi4vYmFyL3NlbGVjdCI6OTI2LCIuL2F0dHJpYnV0ZXMiOjEzNjAsIi4vY2FsYyI6MTM2MSwiLi9jcm9zc190cmFjZV9jYWxjIjoxMzYzLCIuL2RlZmF1bHRzIjoxMzY0LCIuL2V2ZW50X2RhdGEiOjEzNjUsIi4vaG92ZXIiOjEzNjYsIi4vbGF5b3V0X2F0dHJpYnV0ZXMiOjEzNjgsIi4vbGF5b3V0X2RlZmF1bHRzIjoxMzY5LCIuL3Bsb3QiOjEzNzAsIi4vc3R5bGUiOjEzNzF9XSwxMzY4OltmdW5jdGlvbih0LGUscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17d2F0ZXJmYWxsbW9kZTp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOlsiZ3JvdXAiLCJvdmVybGF5Il0sZGZsdDoiZ3JvdXAiLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ2FwOnt2YWxUeXBlOiJudW1iZXIiLG1pbjowLG1heDoxLGVkaXRUeXBlOiJjYWxjIn0sd2F0ZXJmYWxsZ3JvdXBnYXA6e3ZhbFR5cGU6Im51bWJlciIsbWluOjAsbWF4OjEsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn19fSx7fV0sMTM2OTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi8uLi9saWIiKSxpPXQoIi4vbGF5b3V0X2F0dHJpYnV0ZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBhPSExO2Z1bmN0aW9uIG8ocixhKXtyZXR1cm4gbi5jb2VyY2UodCxlLGkscixhKX1mb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGw9cltzXTtpZihsLnZpc2libGUmJiJ3YXRlcmZhbGwiPT09bC50eXBlKXthPSEwO2JyZWFrfX1hJiYobygid2F0ZXJmYWxsbW9kZSIpLG8oIndhdGVyZmFsbGdhcCIsLjIpLG8oIndhdGVyZmFsbGdyb3VwZ2FwIikpfX0seyIuLi8uLi9saWIiOjc3NiwiLi9sYXlvdXRfYXR0cmlidXRlcyI6MTM2OH1dLDEzNzA6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7dmFyIG49dCgiQHBsb3RseS9kMyIpLGk9dCgiLi4vLi4vbGliIiksYT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU0scz10KCIuLi9iYXIvcGxvdCIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLmNsZWFyTWluVGV4dFNpemU7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGMpe3ZhciB1PXQuX2Z1bGxMYXlvdXQ7bCgid2F0ZXJmYWxsIix1KSxzLnBsb3QodCxlLHIsYyx7bW9kZTp1LndhdGVyZmFsbG1vZGUsbm9ybTp1LndhdGVyZmFsbG1vZGUsZ2FwOnUud2F0ZXJmYWxsZ2FwLGdyb3VwZ2FwOnUud2F0ZXJmYWxsZ3JvdXBnYXB9KSxmdW5jdGlvbih0LGUscixzKXt2YXIgbD1lLnhheGlzLGM9ZS55YXhpcztpLm1ha2VUcmFjZUdyb3VwcyhzLHIsInRyYWNlIGJhcnMiKS5lYWNoKChmdW5jdGlvbihyKXt2YXIgcz1uLnNlbGVjdCh0aGlzKSx1PXJbMF0udHJhY2UsZj1pLmVuc3VyZVNpbmdsZShzLCJnIiwibGluZXMiKTtpZih1LmNvbm5lY3RvciYmdS5jb25uZWN0b3IudmlzaWJsZSl7dmFyIGg9ImgiPT09dS5vcmllbnRhdGlvbixwPXUuY29ubmVjdG9yLm1vZGUsZD1mLnNlbGVjdEFsbCgiZy5saW5lIikuZGF0YShpLmlkZW50aXR5KTtkLmVudGVyKCkuYXBwZW5kKCJnIikuY2xhc3NlZCgibGluZSIsITApLGQuZXhpdCgpLnJlbW92ZSgpO3ZhciBtPWQuc2l6ZSgpO2QuZWFjaCgoZnVuY3Rpb24ocixzKXtpZihzPT09bS0xfHxyLmNOZXh0KXt2YXIgdT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1bXSxhPVtdLG89bj9lOnIscz1uP3I6ZTtyZXR1cm4gaVswXT1vLmMycCh0LnMwLCEwKSxhWzBdPXMuYzJwKHQucDAsITApLGlbMV09by5jMnAodC5zMSwhMCksYVsxXT1zLmMycCh0LnAxLCEwKSxpWzJdPW8uYzJwKHQubmV4dFMwLCEwKSxhWzJdPXMuYzJwKHQubmV4dFAwLCEwKSxuP1tpLGFdOlthLGldfShyLGwsYyxoKSxmPXVbMF0sZD11WzFdLGc9IiI7ZlswXSE9PW8mJmRbMF0hPT1vJiZmWzFdIT09byYmZFsxXSE9PW8mJigic3Bhbm5pbmciPT09cCYmIXIuaXNTdW0mJnM+MCYmKGcrPWg/Ik0iK2ZbMF0rIiwiK2RbMV0rIlYiK2RbMF06Ik0iK2ZbMV0rIiwiK2RbMF0rIkgiK2ZbMF0pLCJiZXR3ZWVuIiE9PXAmJihyLmlzU3VtfHxzPG0tMSkmJihnKz1oPyJNIitmWzFdKyIsIitkWzBdKyJWIitkWzFdOiJNIitmWzBdKyIsIitkWzFdKyJIIitmWzFdKSxmWzJdIT09byYmZFsyXSE9PW8mJihnKz1oPyJNIitmWzFdKyIsIitkWzFdKyJWIitkWzJdOiJNIitmWzFdKyIsIitkWzFdKyJIIitmWzJdKSksIiI9PT1nJiYoZz0iTTAsMFoiKSxpLmVuc3VyZVNpbmdsZShuLnNlbGVjdCh0aGlzKSwicGF0aCIpLmF0dHIoImQiLGcpLmNhbGwoYS5zZXRDbGlwVXJsLGUubGF5ZXJDbGlwSWQsdCl9fSkpfWVsc2UgZi5yZW1vdmUoKX0pKX0odCxlLHIsYyl9fSx7Ii4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvbnVtZXJpY2FsIjo3NTIsIi4uLy4uL2xpYiI6Nzc2LCIuLi9iYXIvcGxvdCI6OTI1LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTM3MTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCJAcGxvdGx5L2QzIiksaT10KCIuLi8uLi9jb21wb25lbnRzL2RyYXdpbmciKSxhPXQoIi4uLy4uL2NvbXBvbmVudHMvY29sb3IiKSxvPXQoIi4uLy4uL2NvbnN0YW50cy9pbnRlcmFjdGlvbnMiKS5ERVNFTEVDVERJTSxzPXQoIi4uL2Jhci9zdHlsZSIpLGw9dCgiLi4vYmFyL3VuaWZvcm1fdGV4dCIpLnJlc2l6ZVRleHQsYz1zLnN0eWxlVGV4dFBvaW50cztlLmV4cG9ydHM9e3N0eWxlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgcz1yfHxuLnNlbGVjdCh0KS5zZWxlY3RBbGwoImcud2F0ZXJmYWxsbGF5ZXIiKS5zZWxlY3RBbGwoImcudHJhY2UiKTtsKHQscywid2F0ZXJmYWxsIikscy5zdHlsZSgib3BhY2l0eSIsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdLnRyYWNlLm9wYWNpdHl9KSkscy5lYWNoKChmdW5jdGlvbihlKXt2YXIgcj1uLnNlbGVjdCh0aGlzKSxzPWVbMF0udHJhY2U7ci5zZWxlY3RBbGwoIi5wb2ludCA+IHBhdGgiKS5lYWNoKChmdW5jdGlvbih0KXtpZighdC5pc0JsYW5rKXt2YXIgZT1zW3QuZGlyXS5tYXJrZXI7bi5zZWxlY3QodGhpcykuY2FsbChhLmZpbGwsZS5jb2xvcikuY2FsbChhLnN0cm9rZSxlLmxpbmUuY29sb3IpLmNhbGwoaS5kYXNoTGluZSxlLmxpbmUuZGFzaCxlLmxpbmUud2lkdGgpLnN0eWxlKCJvcGFjaXR5IixzLnNlbGVjdGVkcG9pbnRzJiYhdC5zZWxlY3RlZD9vOjEpfX0pKSxjKHIscyx0KSxyLnNlbGVjdEFsbCgiLmxpbmVzIikuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1zLmNvbm5lY3Rvci5saW5lO2kubGluZUdyb3VwU3R5bGUobi5zZWxlY3QodGhpcykuc2VsZWN0QWxsKCJwYXRoIiksdC53aWR0aCx0LmNvbG9yLHQuZGFzaCl9KSl9KSl9fX0seyIuLi8uLi9jb21wb25lbnRzL2NvbG9yIjo2MzksIi4uLy4uL2NvbXBvbmVudHMvZHJhd2luZyI6NjYxLCIuLi8uLi9jb25zdGFudHMvaW50ZXJhY3Rpb25zIjo3NTEsIi4uL2Jhci9zdHlsZSI6OTI4LCIuLi9iYXIvdW5pZm9ybV90ZXh0Ijo5MzAsIkBwbG90bHkvZDMiOjU4fV0sMTM3MjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLGk9dCgiLi4vbGliIiksYT10KCIuLi9wbG90X2FwaS9wbG90X3NjaGVtYSIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9udW1lcmljYWwiKS5CQUROVU07ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iYWdncmVnYXRlIjt2YXIgbD1yLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSxncm91cHM6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LGFnZ3JlZ2F0aW9uczp7X2lzTGlua2VkVG9BcnJheToiYWdncmVnYXRpb24iLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LGZ1bmM6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbImNvdW50Iiwic3VtIiwiYXZnIiwibWVkaWFuIiwibW9kZSIsInJtcyIsInN0ZGRldiIsIm1pbiIsIm1heCIsImZpcnN0IiwibGFzdCIsImNoYW5nZSIsInJhbmdlIl0sZGZsdDoiZmlyc3QiLGVkaXRUeXBlOiJjYWxjIn0sZnVuY21vZGU6e3ZhbFR5cGU6ImVudW1lcmF0ZWQiLHZhbHVlczpbInNhbXBsZSIsInBvcHVsYXRpb24iXSxkZmx0OiJzYW1wbGUiLGVkaXRUeXBlOiJjYWxjIn0sZW5hYmxlZDp7dmFsVHlwZToiYm9vbGVhbiIsZGZsdDohMCxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxjPWwuYWdncmVnYXRpb25zO2Z1bmN0aW9uIHUodCxlLHIsYSl7aWYoYS5lbmFibGVkKXtmb3IodmFyIG89YS50YXJnZXQsbD1pLm5lc3RlZFByb3BlcnR5KGUsbyksYz1sLmdldCgpLHU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmZ1bmMsbj1lLmQyYyxhPWUuYzJkO3N3aXRjaChyKXtjYXNlImNvdW50IjpyZXR1cm4gZjtjYXNlImZpcnN0IjpyZXR1cm4gaDtjYXNlImxhc3QiOnJldHVybiBwO2Nhc2Uic3VtIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBvPW4odFtlW2ldXSk7byE9PXMmJihyKz1vKX1yZXR1cm4gYShyKX07Y2FzZSJhdmciOnJldHVybiBmdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyKz1sLGkrKyl9cmV0dXJuIGk/YShyL2kpOnN9O2Nhc2UibWluIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9MDtpPGUubGVuZ3RoO2krKyl7dmFyIG89bih0W2VbaV1dKTtvIT09cyYmKHI9TWF0aC5taW4ocixvKSl9cmV0dXJuIHI9PT0xLzA/czphKHIpfTtjYXNlIm1heCI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPS0xLzAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgbz1uKHRbZVtpXV0pO28hPT1zJiYocj1NYXRoLm1heChyLG8pKX1yZXR1cm4gcj09PS0xLzA/czphKHIpfTtjYXNlInJhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MS8wLGk9LTEvMCxvPTA7bzxlLmxlbmd0aDtvKyspe3ZhciBsPW4odFtlW29dXSk7bCE9PXMmJihyPU1hdGgubWluKHIsbCksaT1NYXRoLm1heChpLGwpKX1yZXR1cm4gaT09PS0xLzB8fHI9PT0xLzA/czphKGktcil9O2Nhc2UiY2hhbmdlIjpyZXR1cm4gZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRbZVswXV0pLGk9bih0W2VbZS5sZW5ndGgtMV1dKTtyZXR1cm4gcj09PXN8fGk9PT1zP3M6YShpLXIpfTtjYXNlIm1lZGlhbiI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKyl7dmFyIGw9bih0W2Vbb11dKTtsIT09cyYmci5wdXNoKGwpfWlmKCFyLmxlbmd0aClyZXR1cm4gcztyLnNvcnQoaS5zb3J0ZXJBc2MpO3ZhciBjPShyLmxlbmd0aC0xKS8yO3JldHVybiBhKChyW01hdGguZmxvb3IoYyldK3JbTWF0aC5jZWlsKGMpXSkvMil9O2Nhc2UibW9kZSI6cmV0dXJuIGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXt9LGk9MCxvPXMsbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1uKHRbZVtsXV0pO2lmKGMhPT1zKXt2YXIgdT1yW2NdPShyW2NdfHwwKSsxO3U+aSYmKGk9dSxvPWMpfX1yZXR1cm4gaT9hKG8pOnN9O2Nhc2Uicm1zIjpyZXR1cm4gZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTAsbz0wO288ZS5sZW5ndGg7bysrKXt2YXIgbD1uKHRbZVtvXV0pO2whPT1zJiYocis9bCpsLGkrKyl9cmV0dXJuIGk/YShNYXRoLnNxcnQoci9pKSk6c307Y2FzZSJzdGRkZXYiOnJldHVybiBmdW5jdGlvbihlLHIpe3ZhciBpLGE9MCxvPTAsbD0xLGM9cztmb3IoaT0wO2k8ci5sZW5ndGgmJmM9PT1zO2krKyljPW4oZVtyW2ldXSk7aWYoYz09PXMpcmV0dXJuIHM7Zm9yKDtpPHIubGVuZ3RoO2krKyl7dmFyIHU9bihlW3JbaV1dKTtpZih1IT09cyl7dmFyIGY9dS1jO2ErPWYsbys9ZipmLGwrK319dmFyIGg9InNhbXBsZSI9PT10LmZ1bmNtb2RlP2wtMTpsO3JldHVybiBoP01hdGguc3FydCgoby1hKmEvbCkvaCk6MH19fShhLG4uZ2V0RGF0YUNvbnZlcnNpb25zKHQsZSxvLGMpKSxkPW5ldyBBcnJheShyLmxlbmd0aCksbT0wO208ci5sZW5ndGg7bSsrKWRbbV09dShjLHJbbV0pO2wuc2V0KGQpLCJjb3VudCI9PT1hLmZ1bmMmJmkucHVzaFVuaXF1ZShlLl9hcnJheUF0dHJzLG8pfX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuIGUubGVuZ3RofWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdFtlWzBdXX1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuIHRbZVtlLmxlbmd0aC0xXV19ci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUpe3ZhciByLG49e307ZnVuY3Rpb24gbyhlLHIpe3JldHVybiBpLmNvZXJjZSh0LG4sbCxlLHIpfWlmKCFvKCJlbmFibGVkIikpcmV0dXJuIG47dmFyIHM9YS5maW5kQXJyYXlBdHRyaWJ1dGVzKGUpLHU9e307Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dPTE7dmFyIGY9bygiZ3JvdXBzIik7aWYoIUFycmF5LmlzQXJyYXkoZikpe2lmKCF1W2ZdKXJldHVybiBuLmVuYWJsZWQ9ITEsbjt1W2ZdPTB9dmFyIGgscD10LmFnZ3JlZ2F0aW9uc3x8W10sZD1uLmFnZ3JlZ2F0aW9ucz1uZXcgQXJyYXkocC5sZW5ndGgpO2Z1bmN0aW9uIG0odCxlKXtyZXR1cm4gaS5jb2VyY2UocFtyXSxoLGMsdCxlKX1mb3Iocj0wO3I8cC5sZW5ndGg7cisrKXtoPXtfaW5kZXg6cn07dmFyIGc9bSgidGFyZ2V0Iiksdj1tKCJmdW5jIik7bSgiZW5hYmxlZCIpJiZnJiYodVtnXXx8ImNvdW50Ij09PXYmJnZvaWQgMD09PXVbZ10pPygic3RkZGV2Ij09PXYmJm0oImZ1bmNtb2RlIiksdVtnXT0wLGRbcl09aCk6ZFtyXT17ZW5hYmxlZDohMSxfaW5kZXg6cn19Zm9yKHI9MDtyPHMubGVuZ3RoO3IrKyl1W3Nbcl1dJiZkLnB1c2goe3RhcmdldDpzW3JdLGZ1bmM6Yy5mdW5jLmRmbHQsZW5hYmxlZDohMCxfaW5kZXg6LTF9KTtyZXR1cm4gbn0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBuPXIuZ3JvdXBzLGE9aS5nZXRUYXJnZXRBcnJheShlLHt0YXJnZXQ6bn0pO2lmKGEpe3ZhciBzLGwsYyxmLGg9e30scD17fSxkPVtdLG09byhlLnRyYW5zZm9ybXMsciksZz1hLmxlbmd0aDtmb3IoZS5fbGVuZ3RoJiYoZz1NYXRoLm1pbihnLGUuX2xlbmd0aCkpLHM9MDtzPGc7cysrKXZvaWQgMD09PShjPWhbbD1hW3NdXSk/KGhbbF09ZC5sZW5ndGgsZj1bc10sZC5wdXNoKGYpLHBbaFtsXV09bShzKSk6KGRbY10ucHVzaChzKSxwW2hbbF1dPShwW2hbbF1dfHxbXSkuY29uY2F0KG0ocykpKTtyLl9pbmRleFRvUG9pbnRzPXA7dmFyIHY9ci5hZ2dyZWdhdGlvbnM7Zm9yKHM9MDtzPHYubGVuZ3RoO3MrKyl1KHQsZSxkLHZbc10pOyJzdHJpbmciPT10eXBlb2YgbiYmdSh0LGUsZCx7dGFyZ2V0Om4sZnVuYzoiZmlyc3QiLGVuYWJsZWQ6ITB9KSxlLl9sZW5ndGg9ZC5sZW5ndGh9fX19LHsiLi4vY29uc3RhbnRzL251bWVyaWNhbCI6NzUyLCIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjgxNSwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi9oZWxwZXJzIjoxMzc1fV0sMTM3MzpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3JlZ2lzdHJ5IiksYT10KCIuLi9wbG90cy9jYXJ0ZXNpYW4vYXhlcyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbixzPXQoIi4uL2NvbnN0YW50cy9maWx0ZXJfb3BzIiksbD1zLkNPTVBBUklTT05fT1BTLGM9cy5JTlRFUlZBTF9PUFMsdT1zLlNFVF9PUFM7ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZmlsdGVyIixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9wZXJhdGlvbjp7dmFsVHlwZToiZW51bWVyYXRlZCIsdmFsdWVzOltdLmNvbmNhdChsKS5jb25jYXQoYykuY29uY2F0KHUpLGRmbHQ6Ij0iLGVkaXRUeXBlOiJjYWxjIn0sdmFsdWU6e3ZhbFR5cGU6ImFueSIsZGZsdDowLGVkaXRUeXBlOiJjYWxjIn0scHJlc2VydmVnYXBzOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiExLGVkaXRUeXBlOiJjYWxjIn0sZWRpdFR5cGU6ImNhbGMifSxyLnN1cHBseURlZmF1bHRzPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O2Z1bmN0aW9uIGEoaSxhKXtyZXR1cm4gbi5jb2VyY2UodCxlLHIuYXR0cmlidXRlcyxpLGEpfWlmKGEoImVuYWJsZWQiKSl7dmFyIG89YSgidGFyZ2V0Iik7aWYobi5pc0FycmF5T3JUeXBlZEFycmF5KG8pJiYwPT09by5sZW5ndGgpcmV0dXJuIGUuZW5hYmxlZD0hMSxlO2EoInByZXNlcnZlZ2FwcyIpLGEoIm9wZXJhdGlvbiIpLGEoInZhbHVlIik7dmFyIHM9aS5nZXRDb21wb25lbnRNZXRob2QoImNhbGVuZGFycyIsImhhbmRsZURlZmF1bHRzIik7cyh0LGUsInZhbHVlY2FsZW5kYXIiLG51bGwpLHModCxlLCJ0YXJnZXRjYWxlbmRhciIsbnVsbCl9cmV0dXJuIGV9LHIuY2FsY1RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7aWYoci5lbmFibGVkKXt2YXIgaT1uLmdldFRhcmdldEFycmF5KGUscik7aWYoaSl7dmFyIHM9ci50YXJnZXQsZj1pLmxlbmd0aDtlLl9sZW5ndGgmJihmPU1hdGgubWluKGYsZS5fbGVuZ3RoKSk7dmFyIGg9ci50YXJnZXRjYWxlbmRhcixwPWUuX2FycmF5QXR0cnMsZD1yLnByZXNlcnZlZ2FwcztpZigic3RyaW5nIj09dHlwZW9mIHMpe3ZhciBtPW4ubmVzdGVkUHJvcGVydHkoZSxzKyJjYWxlbmRhciIpLmdldCgpO20mJihoPW0pfXZhciBnLHYseT1mdW5jdGlvbih0LGUscil7dmFyIG49dC5vcGVyYXRpb24saT10LnZhbHVlLGE9QXJyYXkuaXNBcnJheShpKTtmdW5jdGlvbiBvKHQpe3JldHVybi0xIT09dC5pbmRleE9mKG4pfXZhciBzLGY9ZnVuY3Rpb24ocil7cmV0dXJuIGUociwwLHQudmFsdWVjYWxlbmRhcil9LGg9ZnVuY3Rpb24odCl7cmV0dXJuIGUodCwwLHIpfTtvKGwpP3M9ZihhP2lbMF06aSk6byhjKT9zPWE/W2YoaVswXSksZihpWzFdKV06W2YoaSksZihpKV06byh1KSYmKHM9YT9pLm1hcChmKTpbZihpKV0pO3N3aXRjaChuKXtjYXNlIj0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KT09PXN9O2Nhc2UiIT0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSE9PXN9O2Nhc2UiPCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPHN9O2Nhc2UiPD0iOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaCh0KTw9c307Y2FzZSI+IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGgodCk+c307Y2FzZSI+PSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPj1zfTtjYXNlIltdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTw9c1sxXX07Y2FzZSIoKSI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU+c1swXSYmZTxzWzFdfTtjYXNlIlspIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT49c1swXSYmZTxzWzFdfTtjYXNlIihdIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZT5zWzBdJiZlPD1zWzFdfTtjYXNlIl1bIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT49c1sxXX07Y2FzZSIpKCI6cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBlPWgodCk7cmV0dXJuIGU8c1swXXx8ZT5zWzFdfTtjYXNlIl0oIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTw9c1swXXx8ZT5zWzFdfTtjYXNlIilbIjpyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9aCh0KTtyZXR1cm4gZTxzWzBdfHxlPj1zWzFdfTtjYXNlInt9IjpyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLTEhPT1zLmluZGV4T2YoaCh0KSl9O2Nhc2UifXsiOnJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4tMT09PXMuaW5kZXhPZihoKHQpKX19fShyLGEuZ2V0RGF0YVRvQ29vcmRGdW5jKHQsZSxzLGkpLGgpLHg9e30sYj17fSxfPTA7ZD8oZz1mdW5jdGlvbih0KXt4W3QuYXN0cl09bi5leHRlbmREZWVwKFtdLHQuZ2V0KCkpLHQuc2V0KG5ldyBBcnJheShmKSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKVtlXT1yfSk6KGc9ZnVuY3Rpb24odCl7eFt0LmFzdHJdPW4uZXh0ZW5kRGVlcChbXSx0LmdldCgpKSx0LnNldChbXSl9LHY9ZnVuY3Rpb24odCxlKXt2YXIgcj14W3QuYXN0cl1bZV07dC5nZXQoKS5wdXNoKHIpfSksayhnKTtmb3IodmFyIHc9byhlLnRyYW5zZm9ybXMsciksVD0wO1Q8ZjtUKyspe3koaVtUXSk/KGsodixUKSxiW18rK109dyhUKSk6ZCYmXysrfXIuX2luZGV4VG9Qb2ludHM9YixlLl9sZW5ndGg9X319ZnVuY3Rpb24gayh0LHIpe2Zvcih2YXIgaT0wO2k8cC5sZW5ndGg7aSsrKXt0KG4ubmVzdGVkUHJvcGVydHkoZSxwW2ldKSxyKX19fX0seyIuLi9jb25zdGFudHMvZmlsdGVyX29wcyI6NzQ4LCIuLi9saWIiOjc3NiwiLi4vcGxvdHMvY2FydGVzaWFuL2F4ZXMiOjgyNywiLi4vcmVnaXN0cnkiOjkwNCwiLi9oZWxwZXJzIjoxMzc1fV0sMTM3NDpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RfYXBpL3Bsb3Rfc2NoZW1hIiksYT10KCIuLi9wbG90cy9wbG90cyIpLG89dCgiLi9oZWxwZXJzIikucG9pbnRzQWNjZXNzb3JGdW5jdGlvbjtmdW5jdGlvbiBzKHQsZSl7dmFyIHIscyxsLGMsdSxmLGgscCxkLG0sZz1lLnRyYW5zZm9ybSx2PWUudHJhbnNmb3JtSW5kZXgseT10LnRyYW5zZm9ybXNbdl0uZ3JvdXBzLHg9byh0LnRyYW5zZm9ybXMsZyk7aWYoIW4uaXNBcnJheU9yVHlwZWRBcnJheSh5KXx8MD09PXkubGVuZ3RoKXJldHVyblt0XTt2YXIgYj1uLmZpbHRlclVuaXF1ZSh5KSxfPW5ldyBBcnJheShiLmxlbmd0aCksdz15Lmxlbmd0aCxUPWkuZmluZEFycmF5QXR0cmlidXRlcyh0KSxrPWcuc3R5bGVzfHxbXSxBPXt9O2ZvcihyPTA7cjxrLmxlbmd0aDtyKyspQVtrW3JdLnRhcmdldF09a1tyXS52YWx1ZTtnLnN0eWxlcyYmKG09bi5rZXllZENvbnRhaW5lcihnLCJzdHlsZXMiLCJ0YXJnZXQiLCJ2YWx1ZS5uYW1lIikpO3ZhciBNPXt9LFM9e307Zm9yKHI9MDtyPGIubGVuZ3RoO3IrKyl7TVtmPWJbcl1dPXIsU1tmXT0wLChoPV9bcl09bi5leHRlbmREZWVwTm9BcnJheXMoe30sdCkpLl9ncm91cD1mLGgudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50cz17fTt2YXIgRT1udWxsO2ZvcihtJiYoRT1tLmdldChmKSksaC5uYW1lPUV8fCIiPT09RT9FOm4udGVtcGxhdGVTdHJpbmcoZy5uYW1lZm9ybWF0LHt0cmFjZTp0Lm5hbWUsZ3JvdXA6Zn0pLHA9aC50cmFuc2Zvcm1zLGgudHJhbnNmb3Jtcz1bXSxzPTA7czxwLmxlbmd0aDtzKyspaC50cmFuc2Zvcm1zW3NdPW4uZXh0ZW5kRGVlcE5vQXJyYXlzKHt9LHBbc10pO2ZvcihzPTA7czxULmxlbmd0aDtzKyspbi5uZXN0ZWRQcm9wZXJ0eShoLFRbc10pLnNldChbXSl9Zm9yKGw9MDtsPFQubGVuZ3RoO2wrKyl7Zm9yKGM9VFtsXSxzPTAsZD1bXTtzPGIubGVuZ3RoO3MrKylkW3NdPW4ubmVzdGVkUHJvcGVydHkoX1tzXSxjKS5nZXQoKTtmb3IodT1uLm5lc3RlZFByb3BlcnR5KHQsYykuZ2V0KCkscz0wO3M8dztzKyspZFtNW3lbc11dXS5wdXNoKHVbc10pfWZvcihzPTA7czx3O3MrKyl7KGg9X1tNW3lbc11dXSkudHJhbnNmb3Jtc1t2XS5faW5kZXhUb1BvaW50c1tTW3lbc11dXT14KHMpLFNbeVtzXV0rK31mb3Iocj0wO3I8Yi5sZW5ndGg7cisrKWY9YltyXSxoPV9bcl0sYS5jbGVhckV4cGFuZGVkVHJhY2VEZWZhdWx0Q29sb3JzKGgpLGg9bi5leHRlbmREZWVwTm9BcnJheXMoaCxBW2ZdfHx7fSk7cmV0dXJuIF99ci5tb2R1bGVUeXBlPSJ0cmFuc2Zvcm0iLHIubmFtZT0iZ3JvdXBieSIsci5hdHRyaWJ1dGVzPXtlbmFibGVkOnt2YWxUeXBlOiJib29sZWFuIixkZmx0OiEwLGVkaXRUeXBlOiJjYWxjIn0sZ3JvdXBzOnt2YWxUeXBlOiJkYXRhX2FycmF5IixkZmx0OltdLGVkaXRUeXBlOiJjYWxjIn0sbmFtZWZvcm1hdDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHN0eWxlczp7X2lzTGlua2VkVG9BcnJheToic3R5bGUiLHRhcmdldDp7dmFsVHlwZToic3RyaW5nIixlZGl0VHlwZToiY2FsYyJ9LHZhbHVlOnt2YWxUeXBlOiJhbnkiLGRmbHQ6e30sZWRpdFR5cGU6ImNhbGMiLF9jb21wYXJlQXNKU09OOiEwfSxlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0LGUsaSl7dmFyIGEsbz17fTtmdW5jdGlvbiBzKGUsaSl7cmV0dXJuIG4uY29lcmNlKHQsbyxyLmF0dHJpYnV0ZXMsZSxpKX1pZighcygiZW5hYmxlZCIpKXJldHVybiBvO3MoImdyb3VwcyIpLHMoIm5hbWVmb3JtYXQiLGkuX2RhdGFMZW5ndGg+MT8iJXtncm91cH0gKCV7dHJhY2V9KSI6IiV7Z3JvdXB9Iik7dmFyIGw9dC5zdHlsZXMsYz1vLnN0eWxlcz1bXTtpZihsKWZvcihhPTA7YTxsLmxlbmd0aDthKyspe3ZhciB1PWNbYV09e307bi5jb2VyY2UobFthXSxjW2FdLHIuYXR0cmlidXRlcy5zdHlsZXMsInRhcmdldCIpO3ZhciBmPW4uY29lcmNlKGxbYV0sY1thXSxyLmF0dHJpYnV0ZXMuc3R5bGVzLCJ2YWx1ZSIpO24uaXNQbGFpbk9iamVjdChmKT91LnZhbHVlPW4uZXh0ZW5kRGVlcCh7fSxmKTpmJiZkZWxldGUgdS52YWx1ZX1yZXR1cm4gb30sci50cmFuc2Zvcm09ZnVuY3Rpb24odCxlKXt2YXIgcixuLGksYT1bXTtmb3Iobj0wO248dC5sZW5ndGg7bisrKWZvcihyPXModFtuXSxlKSxpPTA7aTxyLmxlbmd0aDtpKyspYS5wdXNoKHJbaV0pO3JldHVybiBhfX0seyIuLi9saWIiOjc3NiwiLi4vcGxvdF9hcGkvcGxvdF9zY2hlbWEiOjgxNSwiLi4vcGxvdHMvcGxvdHMiOjg5MCwiLi9oZWxwZXJzIjoxMzc1fV0sMTM3NTpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0IjtyLnBvaW50c0FjY2Vzc29yRnVuY3Rpb249ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixpPTA7aTx0Lmxlbmd0aCYmKHI9dFtpXSkhPT1lO2krKylyLl9pbmRleFRvUG9pbnRzJiYhMSE9PXIuZW5hYmxlZCYmKG49ci5faW5kZXhUb1BvaW50cyk7cmV0dXJuIG4/ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF19OmZ1bmN0aW9uKHQpe3JldHVyblt0XX19fSx7fV0sMTM3NjpbZnVuY3Rpb24odCxlLHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj10KCIuLi9saWIiKSxpPXQoIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIiksYT10KCIuL2hlbHBlcnMiKS5wb2ludHNBY2Nlc3NvckZ1bmN0aW9uLG89dCgiLi4vY29uc3RhbnRzL251bWVyaWNhbCIpLkJBRE5VTTtyLm1vZHVsZVR5cGU9InRyYW5zZm9ybSIsci5uYW1lPSJzb3J0IixyLmF0dHJpYnV0ZXM9e2VuYWJsZWQ6e3ZhbFR5cGU6ImJvb2xlYW4iLGRmbHQ6ITAsZWRpdFR5cGU6ImNhbGMifSx0YXJnZXQ6e3ZhbFR5cGU6InN0cmluZyIsc3RyaWN0OiEwLG5vQmxhbms6ITAsYXJyYXlPazohMCxkZmx0OiJ4IixlZGl0VHlwZToiY2FsYyJ9LG9yZGVyOnt2YWxUeXBlOiJlbnVtZXJhdGVkIix2YWx1ZXM6WyJhc2NlbmRpbmciLCJkZXNjZW5kaW5nIl0sZGZsdDoiYXNjZW5kaW5nIixlZGl0VHlwZToiY2FsYyJ9LGVkaXRUeXBlOiJjYWxjIn0sci5zdXBwbHlEZWZhdWx0cz1mdW5jdGlvbih0KXt2YXIgZT17fTtmdW5jdGlvbiBpKGksYSl7cmV0dXJuIG4uY29lcmNlKHQsZSxyLmF0dHJpYnV0ZXMsaSxhKX1yZXR1cm4gaSgiZW5hYmxlZCIpJiYoaSgidGFyZ2V0IiksaSgib3JkZXIiKSksZX0sci5jYWxjVHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXtpZihyLmVuYWJsZWQpe3ZhciBzPW4uZ2V0VGFyZ2V0QXJyYXkoZSxyKTtpZihzKXt2YXIgbD1yLnRhcmdldCxjPXMubGVuZ3RoO2UuX2xlbmd0aCYmKGM9TWF0aC5taW4oYyxlLl9sZW5ndGgpKTt2YXIgdSxmLGg9ZS5fYXJyYXlBdHRycyxwPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpLGE9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pO2ZvcihpPTA7aTxuO2krKylhW2ldPXt2OmVbaV0saTppfTtmb3IoYS5zb3J0KGZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQub3JkZXIpe2Nhc2UiYXNjZW5kaW5nIjpyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbj1lKHQudiksaT1lKHIudik7cmV0dXJuIG49PT1vPzE6aT09PW8/LTE6bi1pfTtjYXNlImRlc2NlbmRpbmciOnJldHVybiBmdW5jdGlvbih0LHIpe3ZhciBuPWUodC52KSxpPWUoci52KTtyZXR1cm4gbj09PW8/MTppPT09bz8tMTppLW59fX0odCxyKSksaT0wO2k8bjtpKyspc1tpXT1hW2ldLmk7cmV0dXJuIHN9KHIscyxpLmdldERhdGFUb0Nvb3JkRnVuYyh0LGUsbCxzKSxjKSxkPWEoZS50cmFuc2Zvcm1zLHIpLG09e307Zm9yKHU9MDt1PGgubGVuZ3RoO3UrKyl7dmFyIGc9bi5uZXN0ZWRQcm9wZXJ0eShlLGhbdV0pLHY9Zy5nZXQoKSx5PW5ldyBBcnJheShjKTtmb3IoZj0wO2Y8YztmKyspeVtmXT12W3BbZl1dO2cuc2V0KHkpfWZvcihmPTA7ZjxjO2YrKyltW2ZdPWQocFtmXSk7ci5faW5kZXhUb1BvaW50cz1tLGUuX2xlbmd0aD1jfX19fSx7Ii4uL2NvbnN0YW50cy9udW1lcmljYWwiOjc1MiwiLi4vbGliIjo3NzYsIi4uL3Bsb3RzL2NhcnRlc2lhbi9heGVzIjo4MjcsIi4vaGVscGVycyI6MTM3NX1dLDEzNzc6W2Z1bmN0aW9uKHQsZSxyKXsidXNlIHN0cmljdCI7ci52ZXJzaW9uPSIyLjUuMSJ9LHt9XX0se30sWzI3XSkoMjcpfSkpOw=="></script>

<style type="text/css">
  code{white-space: pre-wrap;}
  span.smallcaps{font-variant: small-caps;}
  span.underline{text-decoration: underline;}
  div.column{display: inline-block; vertical-align: top; width: 50%;}
  div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
  ul.task-list{list-style: none;}
    </style>


<style type="text/css">
  code {
    white-space: pre;
  }
  .sourceCode {
    overflow: visible;
  }
</style>
<style type="text/css" data-origin="pandoc">
pre > code.sourceCode { white-space: pre; position: relative; }
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
pre > code.sourceCode > span:empty { height: 1.2em; }
.sourceCode { overflow: visible; }
code.sourceCode > span { color: inherit; text-decoration: inherit; }
div.sourceCode { margin: 1em 0; }
pre.sourceCode { margin: 0; }
@media screen {
div.sourceCode { overflow: auto; }
}
@media print {
pre > code.sourceCode { white-space: pre-wrap; }
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
}
pre.numberSource code
  { counter-reset: source-line 0; }
pre.numberSource code > span
  { position: relative; left: -4em; counter-increment: source-line; }
pre.numberSource code > span > a:first-child::before
  { content: counter(source-line);
    position: relative; left: -1em; text-align: right; vertical-align: baseline;
    border: none; display: inline-block;
    -webkit-touch-callout: none; -webkit-user-select: none;
    -khtml-user-select: none; -moz-user-select: none;
    -ms-user-select: none; user-select: none;
    padding: 0 4px; width: 4em;
    color: #aaaaaa;
  }
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
div.sourceCode
  {   }
@media screen {
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
}
code span.al { color: #ff0000; } /* Alert */
code span.an { color: #008000; } /* Annotation */
code span.at { } /* Attribute */
code span.bu { } /* BuiltIn */
code span.cf { color: #0000ff; } /* ControlFlow */
code span.ch { color: #008080; } /* Char */
code span.cn { } /* Constant */
code span.co { color: #008000; } /* Comment */
code span.cv { color: #008000; } /* CommentVar */
code span.do { color: #008000; } /* Documentation */
code span.er { color: #ff0000; font-weight: bold; } /* Error */
code span.ex { } /* Extension */
code span.im { } /* Import */
code span.in { color: #008000; } /* Information */
code span.kw { color: #0000ff; } /* Keyword */
code span.op { } /* Operator */
code span.ot { color: #ff4000; } /* Other */
code span.pp { color: #ff4000; } /* Preprocessor */
code span.sc { color: #008080; } /* SpecialChar */
code span.ss { color: #008080; } /* SpecialString */
code span.st { color: #008080; } /* String */
code span.va { } /* Variable */
code span.vs { color: #008080; } /* VerbatimString */
code span.wa { color: #008000; font-weight: bold; } /* Warning */

.sourceCode .row {
  width: 100%;
}
.sourceCode {
  overflow-x: auto;
}
.code-folding-btn {
  margin-right: -30px;
}
</style>
<script>
// apply pandoc div.sourceCode style to pre.sourceCode instead
(function() {
  var sheets = document.styleSheets;
  for (var i = 0; i < sheets.length; i++) {
    if (sheets[i].ownerNode.dataset["origin"] !== "pandoc") continue;
    try { var rules = sheets[i].cssRules; } catch (e) { continue; }
    for (var j = 0; j < rules.length; j++) {
      var rule = rules[j];
      // check if there is a div.sourceCode rule
      if (rule.type !== rule.STYLE_RULE || rule.selectorText !== "div.sourceCode") continue;
      var style = rule.style.cssText;
      // check if color or background-color is set
      if (rule.style.color === '' && rule.style.backgroundColor === '') continue;
      // replace div.sourceCode by a pre.sourceCode rule
      sheets[i].deleteRule(j);
      sheets[i].insertRule('pre.sourceCode{' + style + '}', j);
    }
  }
})();
</script>




<link rel="stylesheet" href="data:text/css,body%20%7B%0Afont%2Dfamily%3A%20%22%E6%B8%B8%E3%82%B4%E3%82%B7%E3%83%83%E3%82%AF%22%2C%20%22Yu%20Gothic%20UI%22%2C%20%22Meiryo%20UI%22%2C%20%22Hiragino%20Kaku%20Gothic%20ProN%22%2C%20%22sans%2Dserif%22%3B%0Afont%2Dsize%3A12pt%3B%0A%7D%0Ah1%2Ch2%2Ch3%2Ch4%2Ch5%2Ch6%20%7B%0Afont%2Dweight%3Abold%3B%09margin%3A%202em%200%200%2E3em%200%3B%0A%7D%0Ah1%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0Ah2%20%7B%0Afont%2Dsize%3A%2020px%3B%0A%7D%0Ah3%20%7B%0Afont%2Dsize%3A%2018px%3B%0A%7D%0Ah4%20%7B%0Afont%2Dsize%3A%2016px%3B%0A%7D%0A%2Emath%20%7B%0Afont%2Dsize%3A%2012px%3B%0A%7D%0Att%2C%20code%2C%20pre%20%7B%0Afont%2Dfamily%3A%20%27DejaVu%20Sans%20Mono%27%2C%20%27Droid%20Sans%20Mono%27%2C%20%27Lucida%20Console%27%2C%20Consolas%2C%20Monaco%2C%20monospace%3B%0A%7D%0A%0Aspan%2Eco%20%7B%0Afont%2Dfamily%3A%20%22%E6%B8%B8%E3%82%B4%E3%82%B7%E3%83%83%E3%82%AF%22%2C%20%22Yu%20Gothic%20UI%22%2C%20%22Meiryo%20UI%22%2C%20%22Hiragino%20Kaku%20Gothic%20ProN%22%2C%20%22sans%2Dserif%22%3B%0Acolor%3A%20%230B6138%3B%0Afont%2Dstyle%3A%20normal%3B%0A%7D%0A%20blockquote%20%7B%0Afont%2Dsize%3A%2014px%3B%0A%7D%0A%0Aem%20%7B%0Afont%2Dstyle%3A%20normal%3B%0A%7D%0A%0A" type="text/css" />



<style type="text/css">
.main-container {
  max-width: 940px;
  margin-left: auto;
  margin-right: auto;
}
img {
  max-width:100%;
}
.tabbed-pane {
  padding-top: 12px;
}
.html-widget {
  margin-bottom: 20px;
}
button.code-folding-btn:focus {
  outline: none;
}
summary {
  display: list-item;
}
pre code {
  padding: 0;
}
</style>



<!-- tabsets -->

<style type="text/css">
.tabset-dropdown > .nav-tabs {
  display: inline-table;
  max-height: 500px;
  min-height: 44px;
  overflow-y: auto;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.tabset-dropdown > .nav-tabs > li.active:before {
  content: "";
  font-family: 'Glyphicons Halflings';
  display: inline-block;
  padding: 10px;
  border-right: 1px solid #ddd;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open > li.active:before {
  content: "";
  border: none;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open:before {
  content: "";
  font-family: 'Glyphicons Halflings';
  display: inline-block;
  padding: 10px;
  border-right: 1px solid #ddd;
}

.tabset-dropdown > .nav-tabs > li.active {
  display: block;
}

.tabset-dropdown > .nav-tabs > li > a,
.tabset-dropdown > .nav-tabs > li > a:focus,
.tabset-dropdown > .nav-tabs > li > a:hover {
  border: none;
  display: inline-block;
  border-radius: 4px;
  background-color: transparent;
}

.tabset-dropdown > .nav-tabs.nav-tabs-open > li {
  display: block;
  float: none;
}

.tabset-dropdown > .nav-tabs > li {
  display: none;
}
</style>

<!-- code folding -->
<style type="text/css">
.code-folding-btn { margin-bottom: 4px; }
</style>



<style type="text/css">

#TOC {
  margin: 25px 0px 20px 0px;
}
@media (max-width: 768px) {
#TOC {
  position: relative;
  width: 100%;
}
}

@media print {
.toc-content {
  /* see https://github.com/w3c/csswg-drafts/issues/4434 */
  float: right;
}
}

.toc-content {
  padding-left: 30px;
  padding-right: 40px;
}

div.main-container {
  max-width: 1200px;
}

div.tocify {
  width: 20%;
  max-width: 260px;
  max-height: 85%;
}

@media (min-width: 768px) and (max-width: 991px) {
  div.tocify {
    width: 25%;
  }
}

@media (max-width: 767px) {
  div.tocify {
    width: 100%;
    max-width: none;
  }
}

.tocify ul, .tocify li {
  line-height: 20px;
}

.tocify-subheader .tocify-item {
  font-size: 0.90em;
}

.tocify .list-group-item {
  border-radius: 0px;
}


</style>



</head>

<body>


<div class="container-fluid main-container">


<!-- setup 3col/9col grid for toc_float and main content  -->
<div class="row">
<div class="col-xs-12 col-sm-4 col-md-3">
<div id="TOC" class="tocify">
</div>
</div>

<div class="toc-content col-xs-12 col-sm-8 col-md-9">




<div id="header">

<div class="btn-group pull-right float-right">
<button type="button" class="btn btn-default btn-xs btn-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span>Code</span> <span class="caret"></span></button>
<ul class="dropdown-menu dropdown-menu-right" style="min-width: 50px;">
<li><a id="rmd-show-all-code" href="#">Show All Code</a></li>
<li><a id="rmd-hide-all-code" href="#">Hide All Code</a></li>
</ul>
</div>



<h1 class="title toc-ignore">Descriptive statistics and graphs</h1>
<h4 class="author"></h4>
<h4 class="date">2022-01-24</h4>

</div>


<div id="rmd-settings" class="section level1" number="1">
<h1 number="1"><span class="header-section-number">1</span> Rmd settings</h1>
<div class="sourceCode" id="cb1"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">Sys.setenv</span>(<span class="at">LANG =</span> <span class="st">&quot;en&quot;</span>) <span class="co">#English</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>knitr<span class="sc">::</span>opts_chunk<span class="sc">$</span><span class="fu">set</span>(<span class="at">echo =</span> <span class="cn">TRUE</span>)</span></code></pre></div>
<div class="sourceCode" id="cb2"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">rm</span>(<span class="at">list =</span> <span class="fu">ls</span>())</span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>path <span class="ot">&lt;-</span> <span class="fu">getwd</span>()</span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a><span class="fu">setwd</span>(path)</span>
<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a><span class="co"># packages</span></span>
<span id="cb2-8"><a href="#cb2-8" aria-hidden="true" tabindex="-1"></a>pacman<span class="sc">::</span><span class="fu">p_load</span>(tidyverse, plotly,readxl,scales, extrafont,PerformanceAnalytics, GGally, patchwork, ggpubr, ggrepel, stargazer, kableExtra,modelsummary)</span>
<span id="cb2-9"><a href="#cb2-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-10"><a href="#cb2-10" aria-hidden="true" tabindex="-1"></a><span class="co"># Font for windows and mac</span></span>
<span id="cb2-11"><a href="#cb2-11" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> (stringr<span class="sc">::</span><span class="fu">str_detect</span>(path, <span class="at">pattern=</span><span class="st">&quot;Users&quot;</span>)){ </span>
<span id="cb2-12"><a href="#cb2-12" aria-hidden="true" tabindex="-1"></a>  </span>
<span id="cb2-13"><a href="#cb2-13" aria-hidden="true" tabindex="-1"></a>   <span class="fu">theme_set</span>(<span class="fu">theme_classic</span>(<span class="at">base_size =</span> <span class="dv">10</span>, <span class="at">base_family =</span> <span class="st">&quot;HiraginoSans-W3&quot;</span>))  <span class="co"># For Mac OS</span></span>
<span id="cb2-14"><a href="#cb2-14" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-15"><a href="#cb2-15" aria-hidden="true" tabindex="-1"></a> } <span class="cf">else</span>{</span>
<span id="cb2-16"><a href="#cb2-16" aria-hidden="true" tabindex="-1"></a>  </span>
<span id="cb2-17"><a href="#cb2-17" aria-hidden="true" tabindex="-1"></a><span class="fu">theme_set</span>(<span class="fu">theme_classic</span>(<span class="at">base_size =</span> <span class="dv">10</span>, <span class="at">base_family =</span> <span class="st">&quot;Arial&quot;</span>)) <span class="co"># For Windows</span></span>
<span id="cb2-18"><a href="#cb2-18" aria-hidden="true" tabindex="-1"></a>   }    </span></code></pre></div>
</div>
<div id="contents-全体の流れのメモ" class="section level1" number="2">
<h1 number="2"><span class="header-section-number">2</span> Contents /全体の流れのメモ</h1>
<ul>
<li>Descriptive statistics / 記述統計</li>
<li>Correlation between two treatment variables / 処置変数間の相関</li>
<li>Correlation between the main treatment varialbe and suicod outcomes / 処置変数と自殺アウトカムの相関</li>
</ul>
</div>
<div id="read-data分析用データの読み込み" class="section level1" number="3">
<h1 number="3"><span class="header-section-number">3</span> Read data/分析用データの読み込み</h1>
<div class="sourceCode" id="cb3"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>df_analysis <span class="ot">&lt;-</span> readr<span class="sc">::</span><span class="fu">read_csv</span>(<span class="st">&quot;output/df_analysis.csv&quot;</span>)</span></code></pre></div>
<pre><code>## Rows: 1551 Columns: 149</code></pre>
<pre><code>## -- Column specification --------------------------------------------------------
## Delimiter: &quot;,&quot;
## chr    (4): prefec_kanji, prefecture, prefec, prefec_kanji2
## dbl  (144): id, month, year, suicide_total, suicide_male, suicide_female, su...
## date   (1): date</code></pre>
<pre><code>## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.</code></pre>
</div>
<div id="descriptive-statistics記述統計表" class="section level1" number="4">
<h1 number="4"><span class="header-section-number">4</span> Descriptive statistics/記述統計表</h1>
<div id="construct-a-dataset-for-descriptive-stat-table-in-the-paper論文用の記述統計のセットを抽出" class="section level2" number="4.1">
<h2 number="4.1"><span class="header-section-number">4.1</span> Construct a dataset for descriptive stat table in the paper/論文用の記述統計のセットを抽出</h2>
<div class="sourceCode" id="cb7"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>df_analysis_desc_stat <span class="ot">&lt;-</span> df_analysis <span class="sc">%&gt;%</span></span>
<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a>  <span class="fu">select</span>(date, prefec_kanji, <span class="co"># date and prefecture</span></span>
<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a>         unemploy_shock_diff2,  <span class="co"># main treatment</span></span>
<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a>         job_seeker_total_shock, <span class="co"># alternative treatment</span></span>
<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a>         suicide_rate,  <span class="co"># suicide</span></span>
<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a>         suicide_rate_female,</span>
<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a>         suicide_rate_male, </span>
<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-10"><a href="#cb7-10" aria-hidden="true" tabindex="-1"></a>         unemp_benefit_number_total, <span class="co"># unemployment benefit  </span></span>
<span id="cb7-11"><a href="#cb7-11" aria-hidden="true" tabindex="-1"></a>         unemp_benefit_number_female,</span>
<span id="cb7-12"><a href="#cb7-12" aria-hidden="true" tabindex="-1"></a>         unemp_benefit_number_male,　</span>
<span id="cb7-13"><a href="#cb7-13" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-14"><a href="#cb7-14" aria-hidden="true" tabindex="-1"></a>         yoy_unemp_benefit_number_total,  <span class="co"># unemployment benefit(YOY) 2021Nov11 added</span></span>
<span id="cb7-15"><a href="#cb7-15" aria-hidden="true" tabindex="-1"></a>         yoy_unemp_benefit_number_female, <span class="co">#2021Nov11 added</span></span>
<span id="cb7-16"><a href="#cb7-16" aria-hidden="true" tabindex="-1"></a>         yoy_unemp_benefit_number_male,   <span class="co">#2021Nov11 added</span></span>
<span id="cb7-17"><a href="#cb7-17" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-18"><a href="#cb7-18" aria-hidden="true" tabindex="-1"></a>         koguchi_number, <span class="co"># Emergency small-amount fund / 緊急小口資金</span></span>
<span id="cb7-19"><a href="#cb7-19" aria-hidden="true" tabindex="-1"></a>         sogo_number, <span class="co"># General support fund / 総合支援資金</span></span>
<span id="cb7-20"><a href="#cb7-20" aria-hidden="true" tabindex="-1"></a>         jukyo_number, <span class="co"># Housing Security Benefits /　住居確保給付金</span></span>
<span id="cb7-21"><a href="#cb7-21" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-22"><a href="#cb7-22" aria-hidden="true" tabindex="-1"></a>         persons_receive, <span class="co"># Public Assistance recipients / 生活保護受給者数</span></span>
<span id="cb7-23"><a href="#cb7-23" aria-hidden="true" tabindex="-1"></a>         households_receive, <span class="co"># Public Assistance recipient households / 生活保護受給世帯数</span></span>
<span id="cb7-24"><a href="#cb7-24" aria-hidden="true" tabindex="-1"></a>         </span>
<span id="cb7-25"><a href="#cb7-25" aria-hidden="true" tabindex="-1"></a>         yoy_persons_receive,   <span class="co">#2021Nov11 追加</span></span>
<span id="cb7-26"><a href="#cb7-26" aria-hidden="true" tabindex="-1"></a>         yoy_households_receive, <span class="co">#2021Nov11 追加</span></span>
<span id="cb7-27"><a href="#cb7-27" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb7-28"><a href="#cb7-28" aria-hidden="true" tabindex="-1"></a>         infection_rate_cumulative2020jun, <span class="co"># COVID-19 cumulative infection rate up to June 2020</span></span>
<span id="cb7-29"><a href="#cb7-29" aria-hidden="true" tabindex="-1"></a>         death_rate_cumulative2020jun, <span class="co"># COVID-19 cumulative death rate up to June 2020</span></span>
<span id="cb7-30"><a href="#cb7-30" aria-hidden="true" tabindex="-1"></a>         google_mobility_index_2020may, <span class="co"># Google Mobility index at the end of May 2020</span></span>
<span id="cb7-31"><a href="#cb7-31" aria-hidden="true" tabindex="-1"></a>         Population_per_1_km_2_of_inhabitable_area, <span class="co"># Population density, measured based on inhabitable area</span></span>
<span id="cb7-32"><a href="#cb7-32" aria-hidden="true" tabindex="-1"></a>         Secondary_industry_ratio, <span class="co"># secondary industry ratio</span></span>
<span id="cb7-33"><a href="#cb7-33" aria-hidden="true" tabindex="-1"></a>         Tertiary_industry_ratio, <span class="co"># tertiary (service) industry ratio</span></span>
<span id="cb7-34"><a href="#cb7-34" aria-hidden="true" tabindex="-1"></a>         Ratio_of_aged_population, <span class="co"># ratio of aged (65+) to working age (1? - 64)</span></span>
<span id="cb7-35"><a href="#cb7-35" aria-hidden="true" tabindex="-1"></a>         Total_population) <span class="co"># total population</span></span></code></pre></div>
</div>
<div id="keep-one-month-for-cross-sectional-variablesクロスセクション変数は1ヶ月分のみ" class="section level2" number="4.2">
<h2 number="4.2"><span class="header-section-number">4.2</span> Keep one month for cross-sectional variables/クロスセクション変数は1ヶ月分のみ</h2>
<div class="sourceCode" id="cb8"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 2021Sep30 </span></span>
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="co"># Keep only one month data for cross-sectional treatment and control variables / 処置変数とコントロール変数は１月分だけ残す(目視チェック)</span></span>
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a>df_analysis_desc_stat <span class="ot">&lt;-</span> df_analysis_desc_stat <span class="sc">%&gt;%</span></span>
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">unemploy_shock_diff2 =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> unemploy_shock_diff2)) <span class="sc">%&gt;%</span></span>
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">job_seeker_total_shock =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> job_seeker_total_shock)) <span class="sc">%&gt;%</span></span>
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">google_mobility_index_2020may =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> google_mobility_index_2020may)) <span class="sc">%&gt;%</span></span>
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">infection_rate_cumulative2020jun =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> infection_rate_cumulative2020jun)) <span class="sc">%&gt;%</span></span>
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">death_rate_cumulative2020jun =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> death_rate_cumulative2020jun)) <span class="sc">%&gt;%</span></span>
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">Population_per_1_km_2_of_inhabitable_area =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> Population_per_1_km_2_of_inhabitable_area)) <span class="sc">%&gt;%</span></span>
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">Secondary_industry_ratio =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> Secondary_industry_ratio)) <span class="sc">%&gt;%</span></span>
<span id="cb8-12"><a href="#cb8-12" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">Tertiary_industry_ratio =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> Tertiary_industry_ratio)) <span class="sc">%&gt;%</span></span>
<span id="cb8-13"><a href="#cb8-13" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">Ratio_of_aged_population =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> Ratio_of_aged_population))  <span class="sc">%&gt;%</span></span>
<span id="cb8-14"><a href="#cb8-14" aria-hidden="true" tabindex="-1"></a>   dplyr<span class="sc">::</span><span class="fu">mutate</span>(<span class="at">Total_population =</span> <span class="fu">case_when</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span> <span class="sc">~</span> Total_population))</span></code></pre></div>
</div>
<div id="show-desc-stat-in-html記述統計のhtml表示" class="section level2" number="4.3">
<h2 number="4.3"><span class="header-section-number">4.3</span> Show desc stat in html/記述統計のhtml表示</h2>
<div class="sourceCode" id="cb9"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="co"># summary stat: skimr</span></span>
<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a><span class="co">#skimr::skim(df_analysis_desc_stat)</span></span>
<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a><span class="co"># summary stat: text</span></span>
<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a><span class="co"># 処置変数とコントロール変数の記述統計量(html表示用)</span></span>
<span id="cb9-6"><a href="#cb9-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb9-7"><a href="#cb9-7" aria-hidden="true" tabindex="-1"></a>stargazer<span class="sc">::</span><span class="fu">stargazer</span>(<span class="fu">data.frame</span>(df_analysis_desc_stat),</span>
<span id="cb9-8"><a href="#cb9-8" aria-hidden="true" tabindex="-1"></a>          <span class="at">type =</span> <span class="st">&quot;text&quot;</span>,<span class="at">digits =</span> <span class="dv">3</span>,</span>
<span id="cb9-9"><a href="#cb9-9" aria-hidden="true" tabindex="-1"></a>          <span class="at">summary.stat =</span> <span class="fu">c</span>(<span class="st">&quot;n&quot;</span>, <span class="st">&quot;mean&quot;</span>,<span class="st">&quot;sd&quot;</span>,<span class="st">&quot;median&quot;</span>,<span class="st">&quot;min&quot;</span>, <span class="st">&quot;max&quot;</span>),</span>
<span id="cb9-10"><a href="#cb9-10" aria-hidden="true" tabindex="-1"></a>          <span class="at">covariate.labels =</span> <span class="fu">c</span>(<span class="st">&quot;Employment shock (baseline)&quot;</span>,</span>
<span id="cb9-11"><a href="#cb9-11" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Employment shock (full-time)&quot;</span>,</span>
<span id="cb9-12"><a href="#cb9-12" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Suicide rate (total)&quot;</span>,</span>
<span id="cb9-13"><a href="#cb9-13" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Suicide rate (female)&quot;</span>, </span>
<span id="cb9-14"><a href="#cb9-14" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Suicide rate (male)&quot;</span>,</span>
<span id="cb9-15"><a href="#cb9-15" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment benefit (total)&quot;</span>, </span>
<span id="cb9-16"><a href="#cb9-16" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment benefit (female)&quot;</span>, </span>
<span id="cb9-17"><a href="#cb9-17" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment benefit (male)&quot;</span>, </span>
<span id="cb9-18"><a href="#cb9-18" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment bene. (YOY, total)&quot;</span>, </span>
<span id="cb9-19"><a href="#cb9-19" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment benefit (YOY, female)&quot;</span>, </span>
<span id="cb9-20"><a href="#cb9-20" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Unemployment benefit (YOY, male)&quot;</span>, </span>
<span id="cb9-21"><a href="#cb9-21" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Emergency S.A. Funds&quot;</span>,</span>
<span id="cb9-22"><a href="#cb9-22" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;General Support Funds&quot;</span>,</span>
<span id="cb9-23"><a href="#cb9-23" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Housing Security Benefit&quot;</span>,</span>
<span id="cb9-24"><a href="#cb9-24" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Public assistance (recipients)&quot;</span>,</span>
<span id="cb9-25"><a href="#cb9-25" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Public assistance (households)&quot;</span>,</span>
<span id="cb9-26"><a href="#cb9-26" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Public assistance (YOY, recipients)&quot;</span>,</span>
<span id="cb9-27"><a href="#cb9-27" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Public assistance (YOY, households)&quot;</span>,</span>
<span id="cb9-28"><a href="#cb9-28" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Cumulative infection rate&quot;</span>,</span>
<span id="cb9-29"><a href="#cb9-29" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Cumulative death rate&quot;</span>,</span>
<span id="cb9-30"><a href="#cb9-30" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Google Mobility index&quot;</span>,</span>
<span id="cb9-31"><a href="#cb9-31" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Population density&quot;</span>,</span>
<span id="cb9-32"><a href="#cb9-32" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Ratio of employees (secondary)&quot;</span>,</span>
<span id="cb9-33"><a href="#cb9-33" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Ratio of employees (service)&quot;</span>,</span>
<span id="cb9-34"><a href="#cb9-34" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Elderly dependency rate&quot;</span>,</span>
<span id="cb9-35"><a href="#cb9-35" aria-hidden="true" tabindex="-1"></a>                               <span class="st">&quot;Total population&quot;</span>)) </span></code></pre></div>
<pre><code>## 
## ==========================================================================================
## Statistic                             N     Mean    St. Dev.   Median     Min       Max   
## ------------------------------------------------------------------------------------------
## Employment shock (baseline)          47     0.247     0.418     0.162    -0.767    1.227  
## Employment shock (full-time)         47     0.080     0.082     0.109    -0.139    0.216  
## Suicide rate (total)                1,551   1.356     0.376     1.322    0.177     3.266  
## Suicide rate (female)               1,551   0.781     0.342     0.758    0.000     2.165  
## Suicide rate (male)                 1,551   1.971     0.626     1.896    0.000     4.686  
## Unemployment benefit (total)        1,551  326.385   61.237    319.203  202.109   526.635 
## Unemployment benefit (female)       1,551  375.744   73.201    368.638  225.504   607.705 
## Unemployment benefit (male)         1,551  273.122   51.882    264.760  176.699   454.545 
## Unemployment bene. (YOY, total)     1,551  12.251    38.010     3.680   -137.246  191.956 
## Unemployment benefit (YOY, female)  1,551   9.552    39.779     1.292   -175.598  206.215 
## Unemployment benefit (YOY, male)    1,551  15.196    38.510     5.725   -94.493   187.694 
## Emergency S.A. Funds                 893   28.505    55.847     0.697    0.000    567.447 
## General Support Funds                893   14.903    36.930     0.034    0.000    426.290 
## Housing Security Benefit             423    6.130     9.494     2.782    0.000    81.259  
## Public assistance (recipients)      1,551 1,398.269  666.371  1,303.267 332.386  3,248.442
## Public assistance (households)      1,551 1,103.915  514.651   993.016  289.867  2,516.684
## Public assistance (YOY, recipients) 1,551  -10.959   18.902    -9.456   -61.430   46.458  
## Public assistance (YOY, households) 1,551   3.012    11.851     2.311   -21.452   50.504  
## Cumulative infection rate            47     8.512     8.556     6.084    0.000    44.717  
## Cumulative death rate                47     0.433     0.633     0.123    0.000     2.373  
## Google Mobility index                47    -22.180    4.864    -22.016  -39.048   -12.871 
## Population density                   47   1,350.738 1,781.228  795.600  234.700  9,792.900
## Ratio of employees (secondary)       47     0.245     0.049     0.235    0.138     0.331  
## Ratio of employees (service)         47     0.660     0.039     0.665    0.601     0.735  
## Elderly dependency rate              47    53.502     7.508    53.900    35.000   70.100  
## Total population                     47    268.489   277.929   160.000   56.000  1,392.000
## ------------------------------------------------------------------------------------------</code></pre>
</div>
<div id="save-desc-stat-tex記述統計のtex出力" class="section level2" number="4.4">
<h2 number="4.4"><span class="header-section-number">4.4</span> Save desc stat tex/記述統計のtex出力</h2>
<div class="sourceCode" id="cb11"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 2021Oct7</span></span>
<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a><span class="co"># Tretment, Outcome, Covariate</span></span>
<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="co"># modelsummary with kableExtra</span></span>
<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a><span class="co"># kableExtra::pack_rows</span></span>
<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a><span class="co"># kableExtra::add_footnote cannot be used (unsolved)</span></span>
<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a>table_desc_stat <span class="ot">&lt;-</span>  modelsummary<span class="sc">::</span><span class="fu">datasummary</span>(</span>
<span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Employment shock (baseline)</span><span class="st">`</span> <span class="ot">=</span> unemploy_shock_diff2) <span class="sc">+</span></span>
<span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Employment shock (full-time)</span><span class="st">`</span> <span class="ot">=</span> job_seeker_total_shock) <span class="sc">+</span></span>
<span id="cb11-10"><a href="#cb11-10" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Suicide rate (total)</span><span class="st">`</span> <span class="ot">=</span> suicide_rate) <span class="sc">+</span></span>
<span id="cb11-11"><a href="#cb11-11" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Suicide rate (female)</span><span class="st">`</span> <span class="ot">=</span> suicide_rate_female) <span class="sc">+</span></span>
<span id="cb11-12"><a href="#cb11-12" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Suicide rate (male)</span><span class="st">`</span> <span class="ot">=</span> suicide_rate_male) <span class="sc">+</span></span>
<span id="cb11-13"><a href="#cb11-13" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (total)</span><span class="st">`</span> <span class="ot">=</span> unemp_benefit_number_total) <span class="sc">+</span></span>
<span id="cb11-14"><a href="#cb11-14" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (female)</span><span class="st">`</span> <span class="ot">=</span> unemp_benefit_number_female) <span class="sc">+</span></span>
<span id="cb11-15"><a href="#cb11-15" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (male)</span><span class="st">`</span> <span class="ot">=</span> unemp_benefit_number_male) <span class="sc">+</span></span>
<span id="cb11-16"><a href="#cb11-16" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (total, yoy)</span><span class="st">`</span> <span class="ot">=</span> yoy_unemp_benefit_number_total) <span class="sc">+</span></span>
<span id="cb11-17"><a href="#cb11-17" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (female, yoy)</span><span class="st">`</span> <span class="ot">=</span> yoy_unemp_benefit_number_female) <span class="sc">+</span></span>
<span id="cb11-18"><a href="#cb11-18" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Unemployment benefit (male, yoy)</span><span class="st">`</span> <span class="ot">=</span> yoy_unemp_benefit_number_male) <span class="sc">+</span></span>
<span id="cb11-19"><a href="#cb11-19" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Emergency Small Ammount Funds</span><span class="st">`</span> <span class="ot">=</span> koguchi_number) <span class="sc">+</span></span>
<span id="cb11-20"><a href="#cb11-20" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">General Support Funds</span><span class="st">`</span> <span class="ot">=</span> sogo_number) <span class="sc">+</span></span>
<span id="cb11-21"><a href="#cb11-21" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Housing Security Benefit</span><span class="st">`</span> <span class="ot">=</span> jukyo_number) <span class="sc">+</span></span>
<span id="cb11-22"><a href="#cb11-22" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Public assistance (recipients)</span><span class="st">`</span> <span class="ot">=</span> persons_receive) <span class="sc">+</span></span>
<span id="cb11-23"><a href="#cb11-23" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Public assistance (households)</span><span class="st">`</span> <span class="ot">=</span> households_receive) <span class="sc">+</span></span>
<span id="cb11-24"><a href="#cb11-24" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Public assistance (recipients, yoy)</span><span class="st">`</span> <span class="ot">=</span> yoy_persons_receive) <span class="sc">+</span></span>
<span id="cb11-25"><a href="#cb11-25" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Public assistance (households, yoy)</span><span class="st">`</span> <span class="ot">=</span> yoy_households_receive) <span class="sc">+</span></span>
<span id="cb11-26"><a href="#cb11-26" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Cumulative infection rate</span><span class="st">`</span> <span class="ot">=</span> infection_rate_cumulative2020jun) <span class="sc">+</span></span>
<span id="cb11-27"><a href="#cb11-27" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Cumulative death rate</span><span class="st">`</span> <span class="ot">=</span> death_rate_cumulative2020jun) <span class="sc">+</span></span>
<span id="cb11-28"><a href="#cb11-28" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Google Mobility index</span><span class="st">`</span> <span class="ot">=</span> google_mobility_index_2020may) <span class="sc">+</span></span>
<span id="cb11-29"><a href="#cb11-29" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Population density</span><span class="st">`</span> <span class="ot">=</span> Population_per_1_km_2_of_inhabitable_area) <span class="sc">+</span></span>
<span id="cb11-30"><a href="#cb11-30" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Ratio of employees (secondary)</span><span class="st">`</span> <span class="ot">=</span> Secondary_industry_ratio) <span class="sc">+</span></span>
<span id="cb11-31"><a href="#cb11-31" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Ratio of employees (service)</span><span class="st">`</span> <span class="ot">=</span> Tertiary_industry_ratio) <span class="sc">+</span></span>
<span id="cb11-32"><a href="#cb11-32" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Elderly dependency rate</span><span class="st">`</span> <span class="ot">=</span> Ratio_of_aged_population) <span class="sc">+</span></span>
<span id="cb11-33"><a href="#cb11-33" aria-hidden="true" tabindex="-1"></a>                          (<span class="st">`</span><span class="at">Total population</span><span class="st">`</span> <span class="ot">=</span> Total_population) <span class="sc">~</span></span>
<span id="cb11-34"><a href="#cb11-34" aria-hidden="true" tabindex="-1"></a>                            N <span class="sc">+</span> Mean <span class="sc">+</span> (<span class="at">Std.Dev. =</span> SD) <span class="sc">+</span> Min <span class="sc">+</span> Max, </span>
<span id="cb11-35"><a href="#cb11-35" aria-hidden="true" tabindex="-1"></a>                          <span class="at">label =</span> <span class="st">&quot;tab:summary_stat&quot;</span>,</span>
<span id="cb11-36"><a href="#cb11-36" aria-hidden="true" tabindex="-1"></a>                          <span class="at">title =</span> <span class="st">&quot;Summary Statistics&quot;</span>,</span>
<span id="cb11-37"><a href="#cb11-37" aria-hidden="true" tabindex="-1"></a>                          <span class="at">data =</span> df_analysis_desc_stat,</span>
<span id="cb11-38"><a href="#cb11-38" aria-hidden="true" tabindex="-1"></a>                          <span class="at">output =</span> <span class="st">&#39;latex&#39;</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb11-39"><a href="#cb11-39" aria-hidden="true" tabindex="-1"></a>  kableExtra<span class="sc">::</span><span class="fu">pack_rows</span>(<span class="st">&quot;Treatment&quot;</span>,<span class="dv">1</span>,<span class="dv">2</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb11-40"><a href="#cb11-40" aria-hidden="true" tabindex="-1"></a>  kableExtra<span class="sc">::</span><span class="fu">pack_rows</span>(<span class="st">&quot;Outcome&quot;</span>,<span class="dv">3</span>,<span class="dv">18</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb11-41"><a href="#cb11-41" aria-hidden="true" tabindex="-1"></a>  kableExtra<span class="sc">::</span><span class="fu">pack_rows</span>(<span class="st">&quot;Covariate&quot;</span>,<span class="dv">19</span>,<span class="dv">26</span>) <span class="sc">%&gt;%</span> </span>
<span id="cb11-42"><a href="#cb11-42" aria-hidden="true" tabindex="-1"></a>  kableExtra<span class="sc">::</span><span class="fu">add_footnote</span>(<span class="fu">c</span>(<span class="st">&quot;</span><span class="sc">\\</span><span class="st">parbox[t]{</span><span class="sc">\\</span><span class="st">textwidth}{Notes: The employment shock is a cross-section variable calculated based on equation </span><span class="sc">\\</span><span class="st">eqref{eq:employment_shock}. All the outcome variables are calculated per 100,000 population. For the definition of each variable, see Table </span><span class="sc">\\</span><span class="st">ref{tab:data_source} in Appendix </span><span class="sc">\\</span><span class="st">ref{sec:background_info}. Outcome variables such as suicide rates, unemployment benefits, and Public assitance recipients are 21-months data (from January 2019 to September 2020) while the variables of Emergency Small Amount Funds, General Support Funds, and Housing Security Benefit are more restricted due to data limitation. ``yoy&#39;&#39; means year-on-year difference. </span><span class="sc">\\\\</span></span>
<span id="cb11-43"><a href="#cb11-43" aria-hidden="true" tabindex="-1"></a><span class="st">Sources: See Table </span><span class="sc">\\</span><span class="st">ref{tab:data_source} in Appendix </span><span class="sc">\\</span><span class="st">ref{sec:background_info}.}&quot;</span>),<span class="at">threeparttable =</span> <span class="cn">TRUE</span>, <span class="at">notation =</span> <span class="st">&quot;none&quot;</span>,<span class="at">escape =</span> <span class="cn">FALSE</span>)</span></code></pre></div>
<pre><code>## Warning: To compile a LaTeX document with this table, the following commands must be placed in the document preamble:
## 
## \usepackage{booktabs}
## \usepackage{siunitx}
## \newcolumntype{d}{S[input-symbols = ()]}
## 
## To disable `siunitx` and prevent `modelsummary` from wrapping numeric entries in `\num{}`, call:
## 
## options(&quot;modelsummary_format_numeric_latex&quot; = &quot;plain&quot;)
## 
## This warning is displayed once per session.</code></pre>
<div class="sourceCode" id="cb13"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">cat</span>(table_desc_stat, <span class="at">sep =</span> <span class="st">&#39;</span><span class="sc">\n</span><span class="st">&#39;</span>, <span class="at">file =</span> <span class="st">&quot;output/table_summary_stat.tex&quot;</span>)</span></code></pre></div>
</div>
</div>
<div id="treatment-variation-by-prefecture都道府県別の処置変数のグラフ" class="section level1" number="5">
<h1 number="5"><span class="header-section-number">5</span> Treatment variation by prefecture/都道府県別の処置変数のグラフ</h1>
<div id="extract-one-month-dataクロスセクションデータ抽出" class="section level2" number="5.1">
<h2 number="5.1"><span class="header-section-number">5.1</span> Extract one-month data/クロスセクションデータ抽出</h2>
<div class="sourceCode" id="cb14"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="co"># １月分のデータ抽出</span></span>
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a>df_employ_shock <span class="ot">&lt;-</span> df_analysis <span class="sc">%&gt;%</span> <span class="fu">filter</span>(date <span class="sc">==</span> <span class="st">&quot;2019-01-01&quot;</span>)</span></code></pre></div>
</div>
<div id="treatment-variable-yoy-of-diff-2-of-unemployment-rate" class="section level2" number="5.2">
<h2 number="5.2"><span class="header-section-number">5.2</span> Treatment variable: YOY of diff 2 of unemployment rate</h2>
<ul>
<li>(2020Q2 - 2019Q4) - (2019Q2 - 2018Q4)</li>
<li>(2020年4~6月の値 - 2019年10~12月の値）- (2019年4~6月の値 - 2018年10~12月の値）</li>
</ul>
<div class="sourceCode" id="cb15"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb15-1"><a href="#cb15-1" aria-hidden="true" tabindex="-1"></a>g_unemploy_shock <span class="ot">&lt;-</span> ggplot2<span class="sc">::</span><span class="fu">ggplot</span>(df_employ_shock, <span class="fu">aes</span>(<span class="at">x =</span> unemploy_shock_diff2, <span class="at">y =</span>  <span class="fu">reorder</span>(prefec, unemploy_shock_diff2))) <span class="sc">+</span></span>
<span id="cb15-2"><a href="#cb15-2" aria-hidden="true" tabindex="-1"></a>   <span class="fu">geom_bar</span>(<span class="at">stat =</span> <span class="st">&quot;identity&quot;</span>) <span class="sc">+</span></span>
<span id="cb15-3"><a href="#cb15-3" aria-hidden="true" tabindex="-1"></a>   <span class="fu">theme</span>(<span class="at">legend.position =</span> <span class="st">&#39;none&#39;</span>) <span class="sc">+</span></span>
<span id="cb15-4"><a href="#cb15-4" aria-hidden="true" tabindex="-1"></a>   <span class="fu">theme_light</span>() <span class="sc">+</span></span>
<span id="cb15-5"><a href="#cb15-5" aria-hidden="true" tabindex="-1"></a>   <span class="fu">labs</span>(<span class="at">title =</span> <span class="st">&quot;(a) Employment shock&quot;</span>, <span class="at">x =</span> <span class="st">&quot;Employment shock measured by the unemployment rate&quot;</span>,<span class="at">y =</span> <span class="st">&quot;&quot;</span>) </span>
<span id="cb15-6"><a href="#cb15-6" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(g_unemploy_shock)</span></code></pre></div>
<div id="htmlwidget-f64cfcccbab0ce00bef3" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-f64cfcccbab0ce00bef3">{"x":{"data":[{"orientation":"v","width":[0.811541155463418,0.160269136273551,0.279307405667278,0.465685279481301,0.422635468889403,0.360856714591046,0.301638954627877,0.10647604230414,0.0722147285801036,0.261990711663791,0.674202122735542,0.61582951066417,0.748267847350452,1.14006383060494,0.0989506445132391,0.186032694734044,0.00819233201850244,0.220701183513304,0.0644219130124384,0.236275811250615,0.162665883518411,0.0435858338272754,0.0465317903951021,0.0609485291145466,0.00509789209305688,0.509075803364402,1.08003322603163,0.678793530109888,0.897317976274262,0.871417998561598,0.319350522465534,0.766664318189394,0.0100263969051579,0.0722536452918527,0.162389643906844,0.2710027100271,0.211525062299764,0.141514696563313,0.0106392622897751,0.309892647504453,0.551008762199188,0.00657498222611629,2.76366500688852e-05,0.341848480205404,0.00904422541953386,0.475877324273987,1.22695353312486],"base":[41.55,22.55,27.55,34.55,33.55,32.55,28.55,6.55,7.55,2.55,38.55,37.55,40.55,45.55,20.55,24.55,13.55,4.55,18.55,3.55,5.55,8.55,16.55,17.55,11.55,36.55,44.55,39.55,43.55,42.55,30.55,0.55,15.55,19.55,23.55,26.55,25.55,21.55,9.55,29.55,1.55,10.55,12.55,31.55,14.55,35.55,46.55],"x":[0.405770577731709,0.0801345681367756,0.139653702833639,0.232842639740651,0.211317734444701,0.180428357295523,0.150819477313939,-0.0532380211520698,-0.0361073642900518,-0.130995355831896,0.337101061367771,0.307914755332085,0.374133923675226,0.570031915302472,0.0494753222566195,0.0930163473670221,0.00409616600925122,-0.110350591756652,0.0322109565062192,-0.118137905625308,-0.0813329417592054,-0.0217929169136377,0.0232658951975511,0.0304742645572733,-0.00254894604652844,0.254537901682201,0.540016613015814,0.339396765054944,0.448658988137131,0.435708999280799,0.159675261232767,-0.383332159094697,0.00501319845257897,0.0361268226459264,0.081194821953422,0.13550135501355,0.105762531149882,0.0707573482816567,-0.00531963114488754,0.154946323752227,-0.275504381099594,-0.00328749111305814,-1.38183250344426e-05,0.170924240102702,0.00452211270976693,0.237938662136993,0.61347676656243],"y":[0.900000000000006,0.899999999999999,0.899999999999999,0.900000000000006,0.900000000000006,0.900000000000006,0.899999999999999,0.9,0.899999999999999,0.9,0.900000000000006,0.900000000000006,0.900000000000006,0.900000000000006,0.899999999999999,0.899999999999999,0.899999999999999,0.9,0.899999999999999,0.9,0.9,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.900000000000006,0.900000000000006,0.900000000000006,0.900000000000006,0.900000000000006,0.899999999999999,0.9,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.899999999999999,0.9,0.899999999999999,0.899999999999999,0.900000000000002,0.899999999999999,0.900000000000006,0.900000000000006],"text":["unemploy_shock_diff2:  8.115412e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.602691e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  2.793074e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  4.656853e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  4.226355e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  3.608567e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  3.016390e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -1.064760e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -7.221473e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -2.619907e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  6.742021e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  6.158295e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  7.482678e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.140064e+00<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  9.895064e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.860327e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  8.192332e-03<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -2.207012e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  6.442191e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -2.362758e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -1.626659e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -4.358583e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  4.653179e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  6.094853e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -5.097892e-03<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  5.090758e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.080033e+00<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  6.787935e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  8.973180e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  8.714180e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  3.193505e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -7.666643e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.002640e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  7.225365e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.623896e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  2.710027e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  2.115251e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.415147e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -1.063926e-02<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  3.098926e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -5.510088e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -6.574982e-03<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2: -2.763665e-05<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  3.418485e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  9.044225e-03<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  4.758773e-01<br />reorder(prefec, unemploy_shock_diff2): 0.9","unemploy_shock_diff2:  1.226954e+00<br />reorder(prefec, unemploy_shock_diff2): 0.9"],"type":"bar","textposition":"none","marker":{"autocolorscale":false,"color":"rgba(89,89,89,1)","line":{"width":1.88976377952756,"color":"transparent"}},"showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":63.5616438356165},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":{"text":"(a) Employment shock","font":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.866345210755106,1.32663442569057],"tickmode":"array","ticktext":["-0.5","0.0","0.5","1.0"],"tickvals":[-0.5,0,0.5,1],"categoryorder":"array","categoryarray":["-0.5","0.0","0.5","1.0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(179,179,179,1)","ticklen":3.65296803652968,"tickwidth":0.33208800332088,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(222,222,222,1)","gridwidth":0.33208800332088,"zeroline":false,"anchor":"y","title":{"text":"Employment shock measured by the unemployment rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[0.4,47.6],"tickmode":"array","ticktext":["Shimane","Saga","Gunma","Nagano","Fukui","Gifu","Ibaraki","Tochigi","Shizuoka","Kochi","Nagasaki","Shiga","Kumamoto","Ishikawa","Miyazaki","Okayama","Aichi","Mie","Yamanashi","Hiroshima","Niigata","Ehime","Aomori","Yamaguchi","Toyama","Kagawa","Tokushima","Iwate","Fukushima","Fukuoka","Tottori","Oita","Yamagata","Akita","Miyagi","Kagoshima","Kyoto","Chiba","Saitama","Hyogo","Tokyo","Hokkaido","Wakayama","Nara","Osaka","Kanagawa","Okinawa"],"tickvals":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47],"categoryorder":"array","categoryarray":["Shimane","Saga","Gunma","Nagano","Fukui","Gifu","Ibaraki","Tochigi","Shizuoka","Kochi","Nagasaki","Shiga","Kumamoto","Ishikawa","Miyazaki","Okayama","Aichi","Mie","Yamanashi","Hiroshima","Niigata","Ehime","Aomori","Yamaguchi","Toyama","Kagawa","Tokushima","Iwate","Fukushima","Fukuoka","Tottori","Oita","Yamagata","Akita","Miyagi","Kagoshima","Kyoto","Chiba","Saitama","Hyogo","Tokyo","Hokkaido","Wakayama","Nara","Osaka","Kanagawa","Okinawa"],"nticks":null,"ticks":"outside","tickcolor":"rgba(179,179,179,1)","ticklen":3.65296803652968,"tickwidth":0.33208800332088,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":false,"linecolor":null,"linewidth":0,"showgrid":true,"gridcolor":"rgba(222,222,222,1)","gridwidth":0.33208800332088,"zeroline":false,"anchor":"x","title":{"text":"","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":"transparent","line":{"color":"rgba(179,179,179,1)","width":0.66417600664176,"linetype":"solid"},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"f330319a529f":{"x":{},"y":{},"type":"bar"}},"cur_data":"f330319a529f","visdat":{"f330319a529f":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb16"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="co">#Extract data / データ抽出</span></span>
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a>df_unemploy_shock_diff2 <span class="ot">&lt;-</span> df_employ_shock <span class="sc">%&gt;%</span></span>
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a>  <span class="fu">select</span>(prefec_kanji, unemploy_shock_diff2)</span>
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a><span class="co"># save data as csv for check</span></span>
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a><span class="fu">write_excel_csv</span>(df_unemploy_shock_diff2, <span class="st">&quot;output/unemploy_shock_diff2.csv&quot;</span>)</span></code></pre></div>
</div>
</div>
<div id="correlation-between-two-treatments2変数の相関-by-ggplot" class="section level1" number="6">
<h1 number="6"><span class="header-section-number">6</span> Correlation between two treatments/2変数の相関 by ggplot</h1>
<div id="function-for-plotting散布図グラフの関数" class="section level2" number="6.1">
<h2 number="6.1"><span class="header-section-number">6.1</span> Function for plotting/散布図グラフの関数</h2>
<div class="sourceCode" id="cb17"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb17-1"><a href="#cb17-1" aria-hidden="true" tabindex="-1"></a>scatter_treat_outcome <span class="ot">=</span> <span class="cf">function</span>(dataset, treat_var, outcome_var, </span>
<span id="cb17-2"><a href="#cb17-2" aria-hidden="true" tabindex="-1"></a>                                 point_size_var, main_title, x_title, y_title){</span>
<span id="cb17-3"><a href="#cb17-3" aria-hidden="true" tabindex="-1"></a>  </span>
<span id="cb17-4"><a href="#cb17-4" aria-hidden="true" tabindex="-1"></a>dataset <span class="sc">%&gt;%</span></span>
<span id="cb17-5"><a href="#cb17-5" aria-hidden="true" tabindex="-1"></a>    <span class="fu">ggplot</span>(<span class="fu">aes</span>(<span class="at">x =</span> treat_var, <span class="at">y =</span> outcome_var, <span class="at">size =</span> point_size_var, <span class="at">label =</span> prefec)) <span class="sc">+</span></span>
<span id="cb17-6"><a href="#cb17-6" aria-hidden="true" tabindex="-1"></a>    <span class="fu">geom_point</span>(<span class="at">color =</span> <span class="st">&quot;black&quot;</span>, <span class="at">shape =</span> <span class="dv">21</span>, <span class="at">fill =</span> <span class="st">&quot;blue1&quot;</span>, <span class="at">alpha =</span> <span class="fl">0.5</span>) <span class="sc">+</span></span>
<span id="cb17-7"><a href="#cb17-7" aria-hidden="true" tabindex="-1"></a>    <span class="fu">geom_smooth</span>(<span class="at">method =</span> <span class="st">&quot;lm&quot;</span>, <span class="at">se =</span> <span class="cn">FALSE</span>, <span class="at">color =</span> <span class="st">&quot;gray20&quot;</span>, <span class="at">linetype =</span> <span class="st">&quot;dashed&quot;</span>) <span class="sc">+</span></span>
<span id="cb17-8"><a href="#cb17-8" aria-hidden="true" tabindex="-1"></a>    <span class="fu">labs</span>(<span class="at">title =</span> main_title, <span class="at">x =</span> x_title, <span class="at">y =</span> y_title) <span class="sc">+</span></span>
<span id="cb17-9"><a href="#cb17-9" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme_classic</span>()  <span class="sc">+</span></span>
<span id="cb17-10"><a href="#cb17-10" aria-hidden="true" tabindex="-1"></a>    <span class="fu">scale_size</span>(<span class="at">range =</span> <span class="fu">c</span>(<span class="dv">2</span>,<span class="dv">12</span>)) <span class="sc">+</span></span>
<span id="cb17-11"><a href="#cb17-11" aria-hidden="true" tabindex="-1"></a>    <span class="fu">theme</span>(<span class="at">legend.position =</span> <span class="st">&#39;none&#39;</span>) <span class="sc">+</span></span>
<span id="cb17-12"><a href="#cb17-12" aria-hidden="true" tabindex="-1"></a>    <span class="fu">geom_vline</span>(<span class="at">xintercept=</span> <span class="dv">0</span>, <span class="at">colour =</span> <span class="st">&quot;gray&quot;</span>) <span class="sc">+</span></span>
<span id="cb17-13"><a href="#cb17-13" aria-hidden="true" tabindex="-1"></a>    <span class="fu">geom_hline</span>(<span class="at">yintercept=</span> <span class="dv">0</span>, <span class="at">colour =</span> <span class="st">&quot;gray&quot;</span>)</span>
<span id="cb17-14"><a href="#cb17-14" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
</div>
<div id="scatter-plot処置変数間の散布図" class="section level2" number="6.2">
<h2 number="6.2"><span class="header-section-number">6.2</span> Scatter plot/処置変数間の散布図</h2>
<div id="extract-dataデータ抽出" class="section level3" number="6.2.1">
<h3 number="6.2.1"><span class="header-section-number">6.2.1</span> Extract data/データ抽出</h3>
<div class="sourceCode" id="cb18"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb18-1"><a href="#cb18-1" aria-hidden="true" tabindex="-1"></a>df_correlation <span class="ot">&lt;-</span> df_analysis <span class="sc">%&gt;%</span></span>
<span id="cb18-2"><a href="#cb18-2" aria-hidden="true" tabindex="-1"></a>  dplyr<span class="sc">::</span><span class="fu">filter</span>(date <span class="sc">==</span> <span class="st">&quot;2020-01-01&quot;</span>) <span class="sc">%&gt;%</span></span>
<span id="cb18-3"><a href="#cb18-3" aria-hidden="true" tabindex="-1"></a>  dplyr<span class="sc">::</span><span class="fu">select</span>(unemploy_shock_diff2, job_seeker_total_shock, population_total, prefec)</span></code></pre></div>
</div>
<div id="scatter-plot散布図" class="section level3" number="6.2.2">
<h3 number="6.2.2"><span class="header-section-number">6.2.2</span> Scatter plot/散布図</h3>
<ul>
<li>unemployment-rate shock(main) and full-time unemployment-rate shock(alternative)</li>
<li>失業率ショックと有効求職者割合ショック</li>
</ul>
<div class="sourceCode" id="cb19"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb19-1"><a href="#cb19-1" aria-hidden="true" tabindex="-1"></a>graph_unemploy_job_seeker_plot <span class="ot">&lt;-</span> <span class="fu">scatter_treat_outcome</span>(<span class="at">dataset =</span> df_correlation, </span>
<span id="cb19-2"><a href="#cb19-2" aria-hidden="true" tabindex="-1"></a>                      <span class="at">treat_var =</span> df_correlation<span class="sc">$</span>unemploy_shock_diff2,</span>
<span id="cb19-3"><a href="#cb19-3" aria-hidden="true" tabindex="-1"></a>                      <span class="at">outcome_var =</span> df_correlation<span class="sc">$</span>job_seeker_total_shock,</span>
<span id="cb19-4"><a href="#cb19-4" aria-hidden="true" tabindex="-1"></a>                      <span class="at">point_size_var =</span> df_correlation<span class="sc">$</span>population_total,</span>
<span id="cb19-5"><a href="#cb19-5" aria-hidden="true" tabindex="-1"></a>                      <span class="at">main_title =</span> <span class="st">&quot;&quot;</span>,</span>
<span id="cb19-6"><a href="#cb19-6" aria-hidden="true" tabindex="-1"></a>                      <span class="at">x_title =</span> <span class="st">&quot;Baseline employment shock&quot;</span>,</span>
<span id="cb19-7"><a href="#cb19-7" aria-hidden="true" tabindex="-1"></a>                      <span class="at">y_title =</span> <span class="st">&quot;&#39;&#39;Full-time&#39;&#39; employment shock&quot;</span>) <span class="sc">+</span></span>
<span id="cb19-8"><a href="#cb19-8" aria-hidden="true" tabindex="-1"></a>                      <span class="fu">geom_text_repel</span>(<span class="at">size=</span><span class="dv">3</span>)</span>
<span id="cb19-9"><a href="#cb19-9" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb19-10"><a href="#cb19-10" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(graph_unemploy_job_seeker_plot)</span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<pre><code>## Warning in geom2trace.default(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]): geom_GeomTextRepel() has yet to be implemented in plotly.
##   If you&#39;d like to see this geom implemented,
##   Please open an issue with your example code at
##   https://github.com/ropensci/plotly/issues</code></pre>
<div id="htmlwidget-75b66843ba9bf5e24684" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-75b66843ba9bf5e24684">{"x":{"data":[{"x":[0.811541155463418,0.160269136273551,0.279307405667278,0.465685279481301,0.422635468889403,0.360856714591046,0.301638954627877,-0.10647604230414,-0.0722147285801036,-0.261990711663791,0.674202122735542,0.61582951066417,0.748267847350452,1.14006383060494,0.0989506445132391,0.186032694734044,0.00819233201850244,-0.220701183513304,0.0644219130124384,-0.236275811250615,-0.162665883518411,-0.0435858338272754,0.0465317903951021,0.0609485291145466,-0.00509789209305688,0.509075803364402,1.08003322603163,0.678793530109888,0.897317976274262,0.871417998561598,0.319350522465534,-0.766664318189394,0.0100263969051579,0.0722536452918527,0.162389643906844,0.2710027100271,0.211525062299764,0.141514696563313,-0.0106392622897751,0.309892647504453,-0.551008762199188,-0.00657498222611629,-2.76366500688852e-05,0.341848480205404,0.00904422541953386,0.475877324273987,1.22695353312486],"y":[0.117628577038386,0.00270855687698556,-0.138864586590138,0.0102921810597436,0.0404781919226629,0.0449855431272379,-0.0489859076383476,0.121721803509419,0.122836089090591,0.115661872238956,0.0816365950579037,0.164509989289427,0.129655521775237,0.109243061853927,0.079360244922043,0.143213227392261,0.0628296957934678,0.0455748655086754,0.0814540319281361,0.0488763087735091,0.216108061617822,0.17712505727261,0.201888538748575,0.133576510769626,0.151267283952229,0.179603220909134,0.154640707301333,0.139400043245158,0.123600322359218,0.174425020851962,0.0430260649665433,0.127373369167279,0.0179250855195687,0.148732702874081,0.0448929632915551,0.0613225527859675,0.0404741278674476,0.054414247266124,-0.0579638895371319,0.114326759669658,-0.105035780819256,-0.101467834187217,0.0600791801214642,0.111589840076035,0.157008008331156,-0.0505091838694023,0.127647158816582],"text":["treat_var:  8.115412e-01<br />outcome_var:  0.117628577<br />point_size_var:  5250<br />prefec: Hokkaido","treat_var:  1.602691e-01<br />outcome_var:  0.002708557<br />point_size_var:  1246<br />prefec: Aomori","treat_var:  2.793074e-01<br />outcome_var: -0.138864587<br />point_size_var:  1227<br />prefec: Iwate","treat_var:  4.656853e-01<br />outcome_var:  0.010292181<br />point_size_var:  2306<br />prefec: Miyagi","treat_var:  4.226355e-01<br />outcome_var:  0.040478192<br />point_size_var:   966<br />prefec: Akita","treat_var:  3.608567e-01<br />outcome_var:  0.044985543<br />point_size_var:  1078<br />prefec: Yamagata","treat_var:  3.016390e-01<br />outcome_var: -0.048985908<br />point_size_var:  1846<br />prefec: Fukushima","treat_var: -1.064760e-01<br />outcome_var:  0.121721804<br />point_size_var:  2860<br />prefec: Ibaraki","treat_var: -7.221473e-02<br />outcome_var:  0.122836089<br />point_size_var:  1934<br />prefec: Tochigi","treat_var: -2.619907e-01<br />outcome_var:  0.115661872<br />point_size_var:  1942<br />prefec: Gunma","treat_var:  6.742021e-01<br />outcome_var:  0.081636595<br />point_size_var:  7350<br />prefec: Saitama","treat_var:  6.158295e-01<br />outcome_var:  0.164509989<br />point_size_var:  6259<br />prefec: Chiba","treat_var:  7.482678e-01<br />outcome_var:  0.129655522<br />point_size_var: 13921<br />prefec: Tokyo","treat_var:  1.140064e+00<br />outcome_var:  0.109243062<br />point_size_var:  9198<br />prefec: Kanagawa","treat_var:  9.895064e-02<br />outcome_var:  0.079360245<br />point_size_var:  2223<br />prefec: Niigata","treat_var:  1.860327e-01<br />outcome_var:  0.143213227<br />point_size_var:  1044<br />prefec: Toyama","treat_var:  8.192332e-03<br />outcome_var:  0.062829696<br />point_size_var:  1138<br />prefec: Ishikawa","treat_var: -2.207012e-01<br />outcome_var:  0.045574866<br />point_size_var:   768<br />prefec: Fukui","treat_var:  6.442191e-02<br />outcome_var:  0.081454032<br />point_size_var:   811<br />prefec: Yamanashi","treat_var: -2.362758e-01<br />outcome_var:  0.048876309<br />point_size_var:  2049<br />prefec: Nagano","treat_var: -1.626659e-01<br />outcome_var:  0.216108062<br />point_size_var:  1987<br />prefec: Gifu","treat_var: -4.358583e-02<br />outcome_var:  0.177125057<br />point_size_var:  3644<br />prefec: Shizuoka","treat_var:  4.653179e-02<br />outcome_var:  0.201888539<br />point_size_var:  7552<br />prefec: Aichi","treat_var:  6.094853e-02<br />outcome_var:  0.133576511<br />point_size_var:  1781<br />prefec: Mie","treat_var: -5.097892e-03<br />outcome_var:  0.151267284<br />point_size_var:  1414<br />prefec: Shiga","treat_var:  5.090758e-01<br />outcome_var:  0.179603221<br />point_size_var:  2583<br />prefec: Kyoto","treat_var:  1.080033e+00<br />outcome_var:  0.154640707<br />point_size_var:  8809<br />prefec: Osaka","treat_var:  6.787935e-01<br />outcome_var:  0.139400043<br />point_size_var:  5466<br />prefec: Hyogo","treat_var:  8.973180e-01<br />outcome_var:  0.123600322<br />point_size_var:  1330<br />prefec: Nara","treat_var:  8.714180e-01<br />outcome_var:  0.174425021<br />point_size_var:   925<br />prefec: Wakayama","treat_var:  3.193505e-01<br />outcome_var:  0.043026065<br />point_size_var:   556<br />prefec: Tottori","treat_var: -7.666643e-01<br />outcome_var:  0.127373369<br />point_size_var:   674<br />prefec: Shimane","treat_var:  1.002640e-02<br />outcome_var:  0.017925086<br />point_size_var:  1890<br />prefec: Okayama","treat_var:  7.225365e-02<br />outcome_var:  0.148732703<br />point_size_var:  2804<br />prefec: Hiroshima","treat_var:  1.623896e-01<br />outcome_var:  0.044892963<br />point_size_var:  1358<br />prefec: Yamaguchi","treat_var:  2.710027e-01<br />outcome_var:  0.061322553<br />point_size_var:   728<br />prefec: Tokushima","treat_var:  2.115251e-01<br />outcome_var:  0.040474128<br />point_size_var:   956<br />prefec: Kagawa","treat_var:  1.415147e-01<br />outcome_var:  0.054414247<br />point_size_var:  1339<br />prefec: Ehime","treat_var: -1.063926e-02<br />outcome_var: -0.057963890<br />point_size_var:   698<br />prefec: Kochi","treat_var:  3.098926e-01<br />outcome_var:  0.114326760<br />point_size_var:  5104<br />prefec: Fukuoka","treat_var: -5.510088e-01<br />outcome_var: -0.105035781<br />point_size_var:   815<br />prefec: Saga","treat_var: -6.574982e-03<br />outcome_var: -0.101467834<br />point_size_var:  1327<br />prefec: Nagasaki","treat_var: -2.763665e-05<br />outcome_var:  0.060079180<br />point_size_var:  1748<br />prefec: Kumamoto","treat_var:  3.418485e-01<br />outcome_var:  0.111589840<br />point_size_var:  1135<br />prefec: Oita","treat_var:  9.044225e-03<br />outcome_var:  0.157008008<br />point_size_var:  1073<br />prefec: Miyazaki","treat_var:  4.758773e-01<br />outcome_var: -0.050509184<br />point_size_var:  1602<br />prefec: Kagoshima","treat_var:  1.226954e+00<br />outcome_var:  0.127647159<br />point_size_var:  1453<br />prefec: Okinawa"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,255,1)","opacity":0.5,"size":[29.9578461218343,16.1467692706863,16.0277072754529,21.235463459925,14.1788565611466,15.028499303167,19.3012123115092,23.2516322602638,19.6951131270115,19.7302901805266,34.5063891715372,32.2481245293543,45.3543307086614,37.9511170726148,20.9071976306237,14.781145944158,15.4461039040942,12.3192087031473,12.7796876473118,20.1913698857928,19.9262969097832,25.7264092012343,34.9040555944982,19.0015592842639,17.135331654376,22.2781094779273,37.259226640221,30.4674035975673,16.654490969827,13.8391501835295,7.55905511811024,11.1104097188694,19.4997870795502,23.0597507385724,16.8175463372456,11.8466846971743,14.0976289273409,16.7072185759042,11.4548600860031,29.6067536965575,12.8204744588913,16.6368470427334,18.8463835631895,15.4257501958764,14.9926400265137,18.1325577357223,17.3505557526536],"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.766664318189394,-0.741428649185416,-0.716192980181438,-0.69095731117746,-0.665721642173482,-0.640485973169504,-0.615250304165526,-0.590014635161549,-0.564778966157571,-0.539543297153593,-0.514307628149615,-0.489071959145637,-0.463836290141659,-0.438600621137681,-0.413364952133703,-0.388129283129725,-0.362893614125747,-0.337657945121769,-0.312422276117792,-0.287186607113814,-0.261950938109836,-0.236715269105858,-0.21147960010188,-0.186243931097902,-0.161008262093924,-0.135772593089946,-0.110536924085968,-0.0853012550819905,-0.0600655860780126,-0.0348299170740347,-0.00959424807005682,0.0156414209339211,0.040877089937899,0.0661127589418768,0.0913484279458547,0.116584096949833,0.141819765953811,0.167055434957788,0.192291103961766,0.217526772965744,0.242762441969722,0.2679981109737,0.293233779977678,0.318469448981656,0.343705117985634,0.368940786989612,0.394176455993589,0.419412124997567,0.444647794001545,0.469883463005523,0.495119132009501,0.520354801013479,0.545590470017457,0.570826139021435,0.596061808025413,0.621297477029391,0.646533146033369,0.671768815037346,0.697004484041324,0.722240153045302,0.74747582204928,0.772711491053258,0.797947160057236,0.823182829061214,0.848418498065192,0.87365416706917,0.898889836073147,0.924125505077125,0.949361174081103,0.974596843085081,0.999832512089059,1.02506818109304,1.05030385009701,1.07553951910099,1.10077518810497,1.12601085710895,1.15124652611293,1.1764821951169,1.20171786412088,1.22695353312486],"y":[0.0405756663386875,0.0415683003930373,0.0425609344473871,0.0435535685017369,0.0445462025560867,0.0455388366104366,0.0465314706647864,0.0475241047191362,0.048516738773486,0.0495093728278358,0.0505020068821856,0.0514946409365355,0.0524872749908853,0.0534799090452351,0.0544725430995849,0.0554651771539347,0.0564578112082845,0.0574504452626343,0.0584430793169842,0.059435713371334,0.0604283474256838,0.0614209814800336,0.0624136155343834,0.0634062495887332,0.0643988836430831,0.0653915176974329,0.0663841517517827,0.0673767858061325,0.0683694198604823,0.0693620539148321,0.070354687969182,0.0713473220235318,0.0723399560778816,0.0733325901322314,0.0743252241865812,0.075317858240931,0.0763104922952808,0.0773031263496307,0.0782957604039805,0.0792883944583303,0.0802810285126801,0.0812736625670299,0.0822662966213797,0.0832589306757296,0.0842515647300794,0.0852441987844292,0.086236832838779,0.0872294668931288,0.0882221009474786,0.0892147350018285,0.0902073690561783,0.0912000031105281,0.0921926371648779,0.0931852712192277,0.0941779052735775,0.0951705393279274,0.0961631733822772,0.097155807436627,0.0981484414909768,0.0991410755453266,0.100133709599676,0.101126343654026,0.102118977708376,0.103111611762726,0.104104245817076,0.105096879871426,0.106089513925775,0.107082147980125,0.108074782034475,0.109067416088825,0.110060050143175,0.111052684197524,0.112045318251874,0.113037952306224,0.114030586360574,0.115023220414924,0.116015854469273,0.117008488523623,0.118001122577973,0.118993756632323],"text":["treat_var: -0.766664318<br />outcome_var: 0.04057567<br />point_size_var: 1","treat_var: -0.741428649<br />outcome_var: 0.04156830<br />point_size_var: 1","treat_var: -0.716192980<br />outcome_var: 0.04256093<br />point_size_var: 1","treat_var: -0.690957311<br />outcome_var: 0.04355357<br />point_size_var: 1","treat_var: -0.665721642<br />outcome_var: 0.04454620<br />point_size_var: 1","treat_var: -0.640485973<br />outcome_var: 0.04553884<br />point_size_var: 1","treat_var: -0.615250304<br />outcome_var: 0.04653147<br />point_size_var: 1","treat_var: -0.590014635<br />outcome_var: 0.04752410<br />point_size_var: 1","treat_var: -0.564778966<br />outcome_var: 0.04851674<br />point_size_var: 1","treat_var: -0.539543297<br />outcome_var: 0.04950937<br />point_size_var: 1","treat_var: -0.514307628<br />outcome_var: 0.05050201<br />point_size_var: 1","treat_var: -0.489071959<br />outcome_var: 0.05149464<br />point_size_var: 1","treat_var: -0.463836290<br />outcome_var: 0.05248727<br />point_size_var: 1","treat_var: -0.438600621<br />outcome_var: 0.05347991<br />point_size_var: 1","treat_var: -0.413364952<br />outcome_var: 0.05447254<br />point_size_var: 1","treat_var: -0.388129283<br />outcome_var: 0.05546518<br />point_size_var: 1","treat_var: -0.362893614<br />outcome_var: 0.05645781<br />point_size_var: 1","treat_var: -0.337657945<br />outcome_var: 0.05745045<br />point_size_var: 1","treat_var: -0.312422276<br />outcome_var: 0.05844308<br />point_size_var: 1","treat_var: -0.287186607<br />outcome_var: 0.05943571<br />point_size_var: 1","treat_var: -0.261950938<br />outcome_var: 0.06042835<br />point_size_var: 1","treat_var: -0.236715269<br />outcome_var: 0.06142098<br />point_size_var: 1","treat_var: -0.211479600<br />outcome_var: 0.06241362<br />point_size_var: 1","treat_var: -0.186243931<br />outcome_var: 0.06340625<br />point_size_var: 1","treat_var: -0.161008262<br />outcome_var: 0.06439888<br />point_size_var: 1","treat_var: -0.135772593<br />outcome_var: 0.06539152<br />point_size_var: 1","treat_var: -0.110536924<br />outcome_var: 0.06638415<br />point_size_var: 1","treat_var: -0.085301255<br />outcome_var: 0.06737679<br />point_size_var: 1","treat_var: -0.060065586<br />outcome_var: 0.06836942<br />point_size_var: 1","treat_var: -0.034829917<br />outcome_var: 0.06936205<br />point_size_var: 1","treat_var: -0.009594248<br />outcome_var: 0.07035469<br />point_size_var: 1","treat_var:  0.015641421<br />outcome_var: 0.07134732<br />point_size_var: 1","treat_var:  0.040877090<br />outcome_var: 0.07233996<br />point_size_var: 1","treat_var:  0.066112759<br />outcome_var: 0.07333259<br />point_size_var: 1","treat_var:  0.091348428<br />outcome_var: 0.07432522<br />point_size_var: 1","treat_var:  0.116584097<br />outcome_var: 0.07531786<br />point_size_var: 1","treat_var:  0.141819766<br />outcome_var: 0.07631049<br />point_size_var: 1","treat_var:  0.167055435<br />outcome_var: 0.07730313<br />point_size_var: 1","treat_var:  0.192291104<br />outcome_var: 0.07829576<br />point_size_var: 1","treat_var:  0.217526773<br />outcome_var: 0.07928839<br />point_size_var: 1","treat_var:  0.242762442<br />outcome_var: 0.08028103<br />point_size_var: 1","treat_var:  0.267998111<br />outcome_var: 0.08127366<br />point_size_var: 1","treat_var:  0.293233780<br />outcome_var: 0.08226630<br />point_size_var: 1","treat_var:  0.318469449<br />outcome_var: 0.08325893<br />point_size_var: 1","treat_var:  0.343705118<br />outcome_var: 0.08425156<br />point_size_var: 1","treat_var:  0.368940787<br />outcome_var: 0.08524420<br />point_size_var: 1","treat_var:  0.394176456<br />outcome_var: 0.08623683<br />point_size_var: 1","treat_var:  0.419412125<br />outcome_var: 0.08722947<br />point_size_var: 1","treat_var:  0.444647794<br />outcome_var: 0.08822210<br />point_size_var: 1","treat_var:  0.469883463<br />outcome_var: 0.08921474<br />point_size_var: 1","treat_var:  0.495119132<br />outcome_var: 0.09020737<br />point_size_var: 1","treat_var:  0.520354801<br />outcome_var: 0.09120000<br />point_size_var: 1","treat_var:  0.545590470<br />outcome_var: 0.09219264<br />point_size_var: 1","treat_var:  0.570826139<br />outcome_var: 0.09318527<br />point_size_var: 1","treat_var:  0.596061808<br />outcome_var: 0.09417791<br />point_size_var: 1","treat_var:  0.621297477<br />outcome_var: 0.09517054<br />point_size_var: 1","treat_var:  0.646533146<br />outcome_var: 0.09616317<br />point_size_var: 1","treat_var:  0.671768815<br />outcome_var: 0.09715581<br />point_size_var: 1","treat_var:  0.697004484<br />outcome_var: 0.09814844<br />point_size_var: 1","treat_var:  0.722240153<br />outcome_var: 0.09914108<br />point_size_var: 1","treat_var:  0.747475822<br />outcome_var: 0.10013371<br />point_size_var: 1","treat_var:  0.772711491<br />outcome_var: 0.10112634<br />point_size_var: 1","treat_var:  0.797947160<br />outcome_var: 0.10211898<br />point_size_var: 1","treat_var:  0.823182829<br />outcome_var: 0.10311161<br />point_size_var: 1","treat_var:  0.848418498<br />outcome_var: 0.10410425<br />point_size_var: 1","treat_var:  0.873654167<br />outcome_var: 0.10509688<br />point_size_var: 1","treat_var:  0.898889836<br />outcome_var: 0.10608951<br />point_size_var: 1","treat_var:  0.924125505<br />outcome_var: 0.10708215<br />point_size_var: 1","treat_var:  0.949361174<br />outcome_var: 0.10807478<br />point_size_var: 1","treat_var:  0.974596843<br />outcome_var: 0.10906742<br />point_size_var: 1","treat_var:  0.999832512<br />outcome_var: 0.11006005<br />point_size_var: 1","treat_var:  1.025068181<br />outcome_var: 0.11105268<br />point_size_var: 1","treat_var:  1.050303850<br />outcome_var: 0.11204532<br />point_size_var: 1","treat_var:  1.075539519<br />outcome_var: 0.11303795<br />point_size_var: 1","treat_var:  1.100775188<br />outcome_var: 0.11403059<br />point_size_var: 1","treat_var:  1.126010857<br />outcome_var: 0.11502322<br />point_size_var: 1","treat_var:  1.151246526<br />outcome_var: 0.11601585<br />point_size_var: 1","treat_var:  1.176482195<br />outcome_var: 0.11700849<br />point_size_var: 1","treat_var:  1.201717864<br />outcome_var: 0.11800112<br />point_size_var: 1","treat_var:  1.226953533<br />outcome_var: 0.11899376<br />point_size_var: 1"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,51,51,1)","dash":"dash"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0],"y":[-0.156613219000536,0.23385669402822],"text":"xintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.866345210755106,1.32663442569057],"y":[0,0],"text":"yintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":26.2283105022831,"r":7.30593607305936,"b":40.1826484018265,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.866345210755106,1.32663442569057],"tickmode":"array","ticktext":["-0.5","0.0","0.5","1.0"],"tickvals":[-0.5,0,0.5,1],"categoryorder":"array","categoryarray":["-0.5","0.0","0.5","1.0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"Baseline employment shock","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.156613219000536,0.23385669402822],"tickmode":"array","ticktext":["-0.1","0.0","0.1","0.2"],"tickvals":[-0.1,0,0.1,0.2],"categoryorder":"array","categoryarray":["-0.1","0.0","0.1","0.2"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"''Full-time'' employment shock","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"f33068617e95":{"x":{},"y":{},"size":{},"label":{},"type":"scatter"},"f33076cc33f3":{"x":{},"y":{},"size":{},"label":{}},"f3305cf3c42":{"xintercept":{}},"f33062a04f8b":{"yintercept":{}},"f3307bed6e35":{"x":{},"y":{},"size":{},"label":{}}},"cur_data":"f33068617e95","visdat":{"f33068617e95":["function (y) ","x"],"f33076cc33f3":["function (y) ","x"],"f3305cf3c42":["function (y) ","x"],"f33062a04f8b":["function (y) ","x"],"f3307bed6e35":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb22"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb22-1"><a href="#cb22-1" aria-hidden="true" tabindex="-1"></a><span class="co"># save as PDF</span></span>
<span id="cb22-2"><a href="#cb22-2" aria-hidden="true" tabindex="-1"></a><span class="fu">ggsave</span>(<span class="at">file =</span> <span class="st">&quot;output/graph_unemploy_job_seeker_plot.pdf&quot;</span>, <span class="at">plot =</span> graph_unemploy_job_seeker_plot, </span>
<span id="cb22-3"><a href="#cb22-3" aria-hidden="true" tabindex="-1"></a>       <span class="at">dpi =</span> <span class="dv">100</span>, <span class="at">width =</span> <span class="dv">6</span>, <span class="at">height =</span> <span class="dv">5</span>)   </span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
</div>
<div id="check-regression" class="section level3" number="6.2.3">
<h3 number="6.2.3"><span class="header-section-number">6.2.3</span> Check regression</h3>
<div class="sourceCode" id="cb24"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a>reg1 <span class="ot">&lt;-</span> estimatr<span class="sc">::</span><span class="fu">lm_robust</span>(job_seeker_total_shock <span class="sc">~</span> unemploy_shock_diff2, </span>
<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a>                            <span class="at">data =</span> df_correlation, <span class="at">se_type =</span> <span class="st">&quot;stata&quot;</span>)</span>
<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a>texreg<span class="sc">::</span><span class="fu">screenreg</span>(<span class="fu">list</span>(reg1), <span class="at">include.ci =</span> <span class="cn">FALSE</span>, <span class="at">digits =</span> <span class="dv">3</span>)</span></code></pre></div>
<pre><code>## 
## ================================
##                       Model 1   
## --------------------------------
## (Intercept)            0.071 ***
##                       (0.016)   
## unemploy_shock_diff2   0.039    
##                       (0.026)   
## --------------------------------
## R^2                    0.040    
## Adj. R^2               0.019    
## Num. obs.             47        
## RMSE                   0.082    
## ================================
## *** p &lt; 0.001; ** p &lt; 0.01; * p &lt; 0.05</code></pre>
</div>
</div>
</div>
<div id="correlation-between-treatment-and-outcomes処置変数失業率ショック-yoy-diff2とアウトカム変数の散布図" class="section level1" number="7">
<h1 number="7"><span class="header-section-number">7</span> Correlation between treatment and outcomes/処置変数（失業率ショック, YOY diff2)とアウトカム変数の散布図</h1>
<ul>
<li>treatment = YOY of diff2 of unemployment rate</li>
</ul>
<div id="outcome-in-july-20202020年7月のアウトカム" class="section level2" number="7.1">
<h2 number="7.1"><span class="header-section-number">7.1</span> Outcome in July 2020/2020年7月のアウトカム</h2>
<div class="sourceCode" id="cb26"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 2020.7月分のデータ抽出 for 自殺率YOY）</span></span>
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a>df_analysis_2020jul <span class="ot">&lt;-</span> df_analysis <span class="sc">%&gt;%</span> <span class="fu">filter</span>(date <span class="sc">==</span> <span class="st">&quot;2020-07-01&quot;</span>)</span></code></pre></div>
</div>
<div id="scatter-plots" class="section level2" number="7.2">
<h2 number="7.2"><span class="header-section-number">7.2</span> Scatter plots</h2>
<ul>
<li>YOY of suicide rate in July 2020(Total, female, male)</li>
<li>自殺 7月YOY(全体、女性、男性)</li>
</ul>
<div class="sourceCode" id="cb27"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="co"># 2021Aug17</span></span>
<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a><span class="co"># Total / 全体</span></span>
<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a>graph_unemp_suicide_rate_total <span class="ot">&lt;-</span> <span class="fu">scatter_treat_outcome</span>(<span class="at">dataset =</span> df_analysis_2020jul, </span>
<span id="cb27-4"><a href="#cb27-4" aria-hidden="true" tabindex="-1"></a>                      <span class="at">treat_var =</span> df_analysis_2020jul<span class="sc">$</span>unemploy_shock_diff2,</span>
<span id="cb27-5"><a href="#cb27-5" aria-hidden="true" tabindex="-1"></a>                      <span class="at">outcome_var =</span> df_analysis_2020jul<span class="sc">$</span>yoy_suicide_rate,</span>
<span id="cb27-6"><a href="#cb27-6" aria-hidden="true" tabindex="-1"></a>                      <span class="at">point_size_var =</span> df_analysis_2020jul<span class="sc">$</span>population_total,</span>
<span id="cb27-7"><a href="#cb27-7" aria-hidden="true" tabindex="-1"></a>                      <span class="at">main_title =</span> <span class="st">&quot;(b) Total suicides&quot;</span>,</span>
<span id="cb27-8"><a href="#cb27-8" aria-hidden="true" tabindex="-1"></a>                      <span class="at">x_title =</span> <span class="st">&quot;Employment shock measured by the unemployment rate&quot;</span>,</span>
<span id="cb27-9"><a href="#cb27-9" aria-hidden="true" tabindex="-1"></a>                      <span class="at">y_title =</span> <span class="st">&quot;Change in the suicide rate&quot;</span>) <span class="sc">+</span></span>
<span id="cb27-10"><a href="#cb27-10" aria-hidden="true" tabindex="-1"></a>                      <span class="fu">scale_y_continuous</span>(<span class="at">limits =</span> <span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="fl">1.5</span>),</span>
<span id="cb27-11"><a href="#cb27-11" aria-hidden="true" tabindex="-1"></a>                                         <span class="at">breaks=</span><span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="sc">-</span><span class="fl">1.0</span>, <span class="sc">-</span><span class="fl">0.5</span>, <span class="fl">0.0</span>, </span>
<span id="cb27-12"><a href="#cb27-12" aria-hidden="true" tabindex="-1"></a>                                                  <span class="fl">0.5</span>, <span class="fl">1.0</span>, <span class="fl">1.5</span>))</span>
<span id="cb27-13"><a href="#cb27-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb27-14"><a href="#cb27-14" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(graph_unemp_suicide_rate_total)</span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<div id="htmlwidget-2aef1aa9896177a84f70" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-2aef1aa9896177a84f70">{"x":{"data":[{"x":[0.811541155463418,0.160269136273551,0.279307405667278,0.465685279481301,0.422635468889403,0.360856714591046,0.301638954627877,-0.10647604230414,-0.0722147285801036,-0.261990711663791,0.674202122735542,0.61582951066417,0.748267847350452,1.14006383060494,0.0989506445132391,0.186032694734044,0.00819233201850244,-0.220701183513304,0.0644219130124384,-0.236275811250615,-0.162665883518411,-0.0435858338272754,0.0465317903951021,0.0609485291145466,-0.00509789209305688,0.509075803364402,1.08003322603163,0.678793530109888,0.897317976274262,0.871417998561598,0.319350522465534,-0.766664318189394,0.0100263969051579,0.0722536452918527,0.162389643906844,0.2710027100271,0.211525062299764,0.141514696563313,-0.0106392622897751,0.309892647504453,-0.551008762199188,-0.00657498222611629,-2.76366500688852e-05,0.341848480205404,0.00904422541953386,0.475877324273987,1.22695353312486],"y":[0.370653003454208,0.491851001977921,0.184599995613098,0.13654899597168,-0.566815972328186,0.108955003321171,-0.0307470001280308,0.51911997795105,0.0582490004599094,-0.194361001253128,0.024932000786066,0.0772660002112389,0.106136001646519,0.214837998151779,-0.116204001009464,-0.836682975292206,0.00630699982866644,-1.13694715499878,0.854956984519958,0.00930699985474348,-0.139208003878593,0.356135994195938,-0.173460006713867,0.777370810508728,-0.352824985980988,0.160780996084213,0.327610999345779,-0.228805005550385,0.600609004497528,0.128382995724678,-0.700507879257202,-0.131152004003525,-0.361268013715744,-0.311917990446091,-0.572151124477386,0.0186950005590916,-0.0944069996476173,0.306843996047974,0.0162129998207092,-0.0970410034060478,-0.235493302345276,-0.135379001498222,0.0642699971795082,0.187187001109123,-0.2620629966259,0.0722590014338493,0.400317013263702],"text":["treat_var:  8.115412e-01<br />outcome_var:  0.3706530<br />point_size_var:  5250<br />prefec: Hokkaido","treat_var:  1.602691e-01<br />outcome_var:  0.4918510<br />point_size_var:  1246<br />prefec: Aomori","treat_var:  2.793074e-01<br />outcome_var:  0.1846000<br />point_size_var:  1227<br />prefec: Iwate","treat_var:  4.656853e-01<br />outcome_var:  0.1365490<br />point_size_var:  2306<br />prefec: Miyagi","treat_var:  4.226355e-01<br />outcome_var: -0.5668160<br />point_size_var:   966<br />prefec: Akita","treat_var:  3.608567e-01<br />outcome_var:  0.1089550<br />point_size_var:  1078<br />prefec: Yamagata","treat_var:  3.016390e-01<br />outcome_var: -0.0307470<br />point_size_var:  1846<br />prefec: Fukushima","treat_var: -1.064760e-01<br />outcome_var:  0.5191200<br />point_size_var:  2860<br />prefec: Ibaraki","treat_var: -7.221473e-02<br />outcome_var:  0.0582490<br />point_size_var:  1934<br />prefec: Tochigi","treat_var: -2.619907e-01<br />outcome_var: -0.1943610<br />point_size_var:  1942<br />prefec: Gunma","treat_var:  6.742021e-01<br />outcome_var:  0.0249320<br />point_size_var:  7350<br />prefec: Saitama","treat_var:  6.158295e-01<br />outcome_var:  0.0772660<br />point_size_var:  6259<br />prefec: Chiba","treat_var:  7.482678e-01<br />outcome_var:  0.1061360<br />point_size_var: 13921<br />prefec: Tokyo","treat_var:  1.140064e+00<br />outcome_var:  0.2148380<br />point_size_var:  9198<br />prefec: Kanagawa","treat_var:  9.895064e-02<br />outcome_var: -0.1162040<br />point_size_var:  2223<br />prefec: Niigata","treat_var:  1.860327e-01<br />outcome_var: -0.8366830<br />point_size_var:  1044<br />prefec: Toyama","treat_var:  8.192332e-03<br />outcome_var:  0.0063070<br />point_size_var:  1138<br />prefec: Ishikawa","treat_var: -2.207012e-01<br />outcome_var: -1.1369472<br />point_size_var:   768<br />prefec: Fukui","treat_var:  6.442191e-02<br />outcome_var:  0.8549570<br />point_size_var:   811<br />prefec: Yamanashi","treat_var: -2.362758e-01<br />outcome_var:  0.0093070<br />point_size_var:  2049<br />prefec: Nagano","treat_var: -1.626659e-01<br />outcome_var: -0.1392080<br />point_size_var:  1987<br />prefec: Gifu","treat_var: -4.358583e-02<br />outcome_var:  0.3561360<br />point_size_var:  3644<br />prefec: Shizuoka","treat_var:  4.653179e-02<br />outcome_var: -0.1734600<br />point_size_var:  7552<br />prefec: Aichi","treat_var:  6.094853e-02<br />outcome_var:  0.7773708<br />point_size_var:  1781<br />prefec: Mie","treat_var: -5.097892e-03<br />outcome_var: -0.3528250<br />point_size_var:  1414<br />prefec: Shiga","treat_var:  5.090758e-01<br />outcome_var:  0.1607810<br />point_size_var:  2583<br />prefec: Kyoto","treat_var:  1.080033e+00<br />outcome_var:  0.3276110<br />point_size_var:  8809<br />prefec: Osaka","treat_var:  6.787935e-01<br />outcome_var: -0.2288050<br />point_size_var:  5466<br />prefec: Hyogo","treat_var:  8.973180e-01<br />outcome_var:  0.6006090<br />point_size_var:  1330<br />prefec: Nara","treat_var:  8.714180e-01<br />outcome_var:  0.1283830<br />point_size_var:   925<br />prefec: Wakayama","treat_var:  3.193505e-01<br />outcome_var: -0.7005079<br />point_size_var:   556<br />prefec: Tottori","treat_var: -7.666643e-01<br />outcome_var: -0.1311520<br />point_size_var:   674<br />prefec: Shimane","treat_var:  1.002640e-02<br />outcome_var: -0.3612680<br />point_size_var:  1890<br />prefec: Okayama","treat_var:  7.225365e-02<br />outcome_var: -0.3119180<br />point_size_var:  2804<br />prefec: Hiroshima","treat_var:  1.623896e-01<br />outcome_var: -0.5721511<br />point_size_var:  1358<br />prefec: Yamaguchi","treat_var:  2.710027e-01<br />outcome_var:  0.0186950<br />point_size_var:   728<br />prefec: Tokushima","treat_var:  2.115251e-01<br />outcome_var: -0.0944070<br />point_size_var:   956<br />prefec: Kagawa","treat_var:  1.415147e-01<br />outcome_var:  0.3068440<br />point_size_var:  1339<br />prefec: Ehime","treat_var: -1.063926e-02<br />outcome_var:  0.0162130<br />point_size_var:   698<br />prefec: Kochi","treat_var:  3.098926e-01<br />outcome_var: -0.0970410<br />point_size_var:  5104<br />prefec: Fukuoka","treat_var: -5.510088e-01<br />outcome_var: -0.2354933<br />point_size_var:   815<br />prefec: Saga","treat_var: -6.574982e-03<br />outcome_var: -0.1353790<br />point_size_var:  1327<br />prefec: Nagasaki","treat_var: -2.763665e-05<br />outcome_var:  0.0642700<br />point_size_var:  1748<br />prefec: Kumamoto","treat_var:  3.418485e-01<br />outcome_var:  0.1871870<br />point_size_var:  1135<br />prefec: Oita","treat_var:  9.044225e-03<br />outcome_var: -0.2620630<br />point_size_var:  1073<br />prefec: Miyazaki","treat_var:  4.758773e-01<br />outcome_var:  0.0722590<br />point_size_var:  1602<br />prefec: Kagoshima","treat_var:  1.226954e+00<br />outcome_var:  0.4003170<br />point_size_var:  1453<br />prefec: Okinawa"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,255,1)","opacity":0.5,"size":[29.9578461218343,16.1467692706863,16.0277072754529,21.235463459925,14.1788565611466,15.028499303167,19.3012123115092,23.2516322602638,19.6951131270115,19.7302901805266,34.5063891715372,32.2481245293543,45.3543307086614,37.9511170726148,20.9071976306237,14.781145944158,15.4461039040942,12.3192087031473,12.7796876473118,20.1913698857928,19.9262969097832,25.7264092012343,34.9040555944982,19.0015592842639,17.135331654376,22.2781094779273,37.259226640221,30.4674035975673,16.654490969827,13.8391501835295,7.55905511811024,11.1104097188694,19.4997870795502,23.0597507385724,16.8175463372456,11.8466846971743,14.0976289273409,16.7072185759042,11.4548600860031,29.6067536965575,12.8204744588913,16.6368470427334,18.8463835631895,15.4257501958764,14.9926400265137,18.1325577357223,17.3505557526536],"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.766664318189394,-0.741428649185416,-0.716192980181438,-0.69095731117746,-0.665721642173482,-0.640485973169504,-0.615250304165526,-0.590014635161549,-0.564778966157571,-0.539543297153593,-0.514307628149615,-0.489071959145637,-0.463836290141659,-0.438600621137681,-0.413364952133703,-0.388129283129725,-0.362893614125747,-0.337657945121769,-0.312422276117792,-0.287186607113814,-0.261950938109836,-0.236715269105858,-0.21147960010188,-0.186243931097902,-0.161008262093924,-0.135772593089946,-0.110536924085968,-0.0853012550819905,-0.0600655860780126,-0.0348299170740347,-0.00959424807005682,0.0156414209339211,0.040877089937899,0.0661127589418768,0.0913484279458547,0.116584096949833,0.141819765953811,0.167055434957788,0.192291103961766,0.217526772965744,0.242762441969722,0.2679981109737,0.293233779977678,0.318469448981656,0.343705117985634,0.368940786989612,0.394176455993589,0.419412124997567,0.444647794001545,0.469883463005523,0.495119132009501,0.520354801013479,0.545590470017457,0.570826139021435,0.596061808025413,0.621297477029391,0.646533146033369,0.671768815037346,0.697004484041324,0.722240153045302,0.74747582204928,0.772711491053258,0.797947160057236,0.823182829061214,0.848418498065192,0.87365416706917,0.898889836073147,0.924125505077125,0.949361174081103,0.974596843085081,0.999832512089059,1.02506818109304,1.05030385009701,1.07553951910099,1.10077518810497,1.12601085710895,1.15124652611293,1.1764821951169,1.20171786412088,1.22695353312486],"y":[-0.28909922264834,-0.281950472159997,-0.274801721671655,-0.267652971183312,-0.26050422069497,-0.253355470206627,-0.246206719718284,-0.239057969229942,-0.231909218741599,-0.224760468253257,-0.217611717764914,-0.210462967276572,-0.203314216788229,-0.196165466299886,-0.189016715811544,-0.181867965323201,-0.174719214834859,-0.167570464346516,-0.160421713858174,-0.153272963369831,-0.146124212881489,-0.138975462393146,-0.131826711904803,-0.124677961416461,-0.117529210928118,-0.110380460439776,-0.103231709951433,-0.0960829594630905,-0.088934208974748,-0.0817854584864054,-0.0746367079980629,-0.0674879575097203,-0.0603392070213777,-0.0531904565330352,-0.0460417060446926,-0.03889295555635,-0.0317442050680075,-0.0245954545796649,-0.0174467040913223,-0.0102979536029798,-0.00314920311463721,0.00399954737370535,0.0111482978620479,0.0182970483503905,0.025445798838733,0.0325945493270756,0.0397432998154182,0.0468920503037607,0.0540408007921034,0.0611895512804459,0.0683383017687885,0.075487052257131,0.0826358027454736,0.0897845532338162,0.0969333037221587,0.104082054210501,0.111230804698844,0.118379555187186,0.125528305675529,0.132677056163872,0.139825806652214,0.146974557140557,0.154123307628899,0.161272058117242,0.168420808605584,0.175569559093927,0.182718309582269,0.189867060070612,0.197015810558955,0.204164561047297,0.21131331153564,0.218462062023982,0.225610812512325,0.232759563000667,0.23990831348901,0.247057063977353,0.254205814465695,0.261354564954038,0.26850331544238,0.275652065930723],"text":["treat_var: -0.766664318<br />outcome_var: -0.289099223<br />point_size_var: 1","treat_var: -0.741428649<br />outcome_var: -0.281950472<br />point_size_var: 1","treat_var: -0.716192980<br />outcome_var: -0.274801722<br />point_size_var: 1","treat_var: -0.690957311<br />outcome_var: -0.267652971<br />point_size_var: 1","treat_var: -0.665721642<br />outcome_var: -0.260504221<br />point_size_var: 1","treat_var: -0.640485973<br />outcome_var: -0.253355470<br />point_size_var: 1","treat_var: -0.615250304<br />outcome_var: -0.246206720<br />point_size_var: 1","treat_var: -0.590014635<br />outcome_var: -0.239057969<br />point_size_var: 1","treat_var: -0.564778966<br />outcome_var: -0.231909219<br />point_size_var: 1","treat_var: -0.539543297<br />outcome_var: -0.224760468<br />point_size_var: 1","treat_var: -0.514307628<br />outcome_var: -0.217611718<br />point_size_var: 1","treat_var: -0.489071959<br />outcome_var: -0.210462967<br />point_size_var: 1","treat_var: -0.463836290<br />outcome_var: -0.203314217<br />point_size_var: 1","treat_var: -0.438600621<br />outcome_var: -0.196165466<br />point_size_var: 1","treat_var: -0.413364952<br />outcome_var: -0.189016716<br />point_size_var: 1","treat_var: -0.388129283<br />outcome_var: -0.181867965<br />point_size_var: 1","treat_var: -0.362893614<br />outcome_var: -0.174719215<br />point_size_var: 1","treat_var: -0.337657945<br />outcome_var: -0.167570464<br />point_size_var: 1","treat_var: -0.312422276<br />outcome_var: -0.160421714<br />point_size_var: 1","treat_var: -0.287186607<br />outcome_var: -0.153272963<br />point_size_var: 1","treat_var: -0.261950938<br />outcome_var: -0.146124213<br />point_size_var: 1","treat_var: -0.236715269<br />outcome_var: -0.138975462<br />point_size_var: 1","treat_var: -0.211479600<br />outcome_var: -0.131826712<br />point_size_var: 1","treat_var: -0.186243931<br />outcome_var: -0.124677961<br />point_size_var: 1","treat_var: -0.161008262<br />outcome_var: -0.117529211<br />point_size_var: 1","treat_var: -0.135772593<br />outcome_var: -0.110380460<br />point_size_var: 1","treat_var: -0.110536924<br />outcome_var: -0.103231710<br />point_size_var: 1","treat_var: -0.085301255<br />outcome_var: -0.096082959<br />point_size_var: 1","treat_var: -0.060065586<br />outcome_var: -0.088934209<br />point_size_var: 1","treat_var: -0.034829917<br />outcome_var: -0.081785458<br />point_size_var: 1","treat_var: -0.009594248<br />outcome_var: -0.074636708<br />point_size_var: 1","treat_var:  0.015641421<br />outcome_var: -0.067487958<br />point_size_var: 1","treat_var:  0.040877090<br />outcome_var: -0.060339207<br />point_size_var: 1","treat_var:  0.066112759<br />outcome_var: -0.053190457<br />point_size_var: 1","treat_var:  0.091348428<br />outcome_var: -0.046041706<br />point_size_var: 1","treat_var:  0.116584097<br />outcome_var: -0.038892956<br />point_size_var: 1","treat_var:  0.141819766<br />outcome_var: -0.031744205<br />point_size_var: 1","treat_var:  0.167055435<br />outcome_var: -0.024595455<br />point_size_var: 1","treat_var:  0.192291104<br />outcome_var: -0.017446704<br />point_size_var: 1","treat_var:  0.217526773<br />outcome_var: -0.010297954<br />point_size_var: 1","treat_var:  0.242762442<br />outcome_var: -0.003149203<br />point_size_var: 1","treat_var:  0.267998111<br />outcome_var:  0.003999547<br />point_size_var: 1","treat_var:  0.293233780<br />outcome_var:  0.011148298<br />point_size_var: 1","treat_var:  0.318469449<br />outcome_var:  0.018297048<br />point_size_var: 1","treat_var:  0.343705118<br />outcome_var:  0.025445799<br />point_size_var: 1","treat_var:  0.368940787<br />outcome_var:  0.032594549<br />point_size_var: 1","treat_var:  0.394176456<br />outcome_var:  0.039743300<br />point_size_var: 1","treat_var:  0.419412125<br />outcome_var:  0.046892050<br />point_size_var: 1","treat_var:  0.444647794<br />outcome_var:  0.054040801<br />point_size_var: 1","treat_var:  0.469883463<br />outcome_var:  0.061189551<br />point_size_var: 1","treat_var:  0.495119132<br />outcome_var:  0.068338302<br />point_size_var: 1","treat_var:  0.520354801<br />outcome_var:  0.075487052<br />point_size_var: 1","treat_var:  0.545590470<br />outcome_var:  0.082635803<br />point_size_var: 1","treat_var:  0.570826139<br />outcome_var:  0.089784553<br />point_size_var: 1","treat_var:  0.596061808<br />outcome_var:  0.096933304<br />point_size_var: 1","treat_var:  0.621297477<br />outcome_var:  0.104082054<br />point_size_var: 1","treat_var:  0.646533146<br />outcome_var:  0.111230805<br />point_size_var: 1","treat_var:  0.671768815<br />outcome_var:  0.118379555<br />point_size_var: 1","treat_var:  0.697004484<br />outcome_var:  0.125528306<br />point_size_var: 1","treat_var:  0.722240153<br />outcome_var:  0.132677056<br />point_size_var: 1","treat_var:  0.747475822<br />outcome_var:  0.139825807<br />point_size_var: 1","treat_var:  0.772711491<br />outcome_var:  0.146974557<br />point_size_var: 1","treat_var:  0.797947160<br />outcome_var:  0.154123308<br />point_size_var: 1","treat_var:  0.823182829<br />outcome_var:  0.161272058<br />point_size_var: 1","treat_var:  0.848418498<br />outcome_var:  0.168420809<br />point_size_var: 1","treat_var:  0.873654167<br />outcome_var:  0.175569559<br />point_size_var: 1","treat_var:  0.898889836<br />outcome_var:  0.182718310<br />point_size_var: 1","treat_var:  0.924125505<br />outcome_var:  0.189867060<br />point_size_var: 1","treat_var:  0.949361174<br />outcome_var:  0.197015811<br />point_size_var: 1","treat_var:  0.974596843<br />outcome_var:  0.204164561<br />point_size_var: 1","treat_var:  0.999832512<br />outcome_var:  0.211313312<br />point_size_var: 1","treat_var:  1.025068181<br />outcome_var:  0.218462062<br />point_size_var: 1","treat_var:  1.050303850<br />outcome_var:  0.225610813<br />point_size_var: 1","treat_var:  1.075539519<br />outcome_var:  0.232759563<br />point_size_var: 1","treat_var:  1.100775188<br />outcome_var:  0.239908313<br />point_size_var: 1","treat_var:  1.126010857<br />outcome_var:  0.247057064<br />point_size_var: 1","treat_var:  1.151246526<br />outcome_var:  0.254205814<br />point_size_var: 1","treat_var:  1.176482195<br />outcome_var:  0.261354565<br />point_size_var: 1","treat_var:  1.201717864<br />outcome_var:  0.268503315<br />point_size_var: 1","treat_var:  1.226953533<br />outcome_var:  0.275652066<br />point_size_var: 1"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,51,51,1)","dash":"dash"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0],"y":[-1.65,1.65],"text":"xintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.866345210755106,1.32663442569057],"y":[0,0],"text":"yintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":{"text":"(b) Total suicides","font":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.866345210755106,1.32663442569057],"tickmode":"array","ticktext":["-0.5","0.0","0.5","1.0"],"tickvals":[-0.5,0,0.5,1],"categoryorder":"array","categoryarray":["-0.5","0.0","0.5","1.0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"Employment shock measured by the unemployment rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-1.65,1.65],"tickmode":"array","ticktext":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"tickvals":[-1.5,-1,-0.5,0,0.5,1,1.5],"categoryorder":"array","categoryarray":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"Change in the suicide rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"f33063254a91":{"x":{},"y":{},"size":{},"label":{},"type":"scatter"},"f33023ce3e41":{"x":{},"y":{},"size":{},"label":{}},"f3303eb91e39":{"xintercept":{}},"f33044933b23":{"yintercept":{}}},"cur_data":"f33063254a91","visdat":{"f33063254a91":["function (y) ","x"],"f33023ce3e41":["function (y) ","x"],"f3303eb91e39":["function (y) ","x"],"f33044933b23":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb29"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Female / 女性</span></span>
<span id="cb29-2"><a href="#cb29-2" aria-hidden="true" tabindex="-1"></a>graph_unemp_suicide_rate_female <span class="ot">&lt;-</span> <span class="fu">scatter_treat_outcome</span>(<span class="at">dataset =</span> df_analysis_2020jul, </span>
<span id="cb29-3"><a href="#cb29-3" aria-hidden="true" tabindex="-1"></a>                      <span class="at">treat_var =</span> df_analysis_2020jul<span class="sc">$</span>unemploy_shock_diff2,</span>
<span id="cb29-4"><a href="#cb29-4" aria-hidden="true" tabindex="-1"></a>                      <span class="at">outcome_var =</span> df_analysis_2020jul<span class="sc">$</span>yoy_suicide_rate_female,</span>
<span id="cb29-5"><a href="#cb29-5" aria-hidden="true" tabindex="-1"></a>                      <span class="at">point_size_var =</span> df_analysis_2020jul<span class="sc">$</span>population_total,</span>
<span id="cb29-6"><a href="#cb29-6" aria-hidden="true" tabindex="-1"></a>                      <span class="at">main_title =</span> <span class="st">&quot;(c) Female suicides&quot;</span>,</span>
<span id="cb29-7"><a href="#cb29-7" aria-hidden="true" tabindex="-1"></a>                      <span class="at">x_title =</span> <span class="st">&quot;Employment shock measured by the unemployment rate&quot;</span>,</span>
<span id="cb29-8"><a href="#cb29-8" aria-hidden="true" tabindex="-1"></a>                      <span class="at">y_title =</span> <span class="st">&quot;Change in the suicide rate&quot;</span>)<span class="sc">+</span></span>
<span id="cb29-9"><a href="#cb29-9" aria-hidden="true" tabindex="-1"></a>                      <span class="fu">scale_y_continuous</span>(<span class="at">limits =</span> <span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="fl">1.5</span>),</span>
<span id="cb29-10"><a href="#cb29-10" aria-hidden="true" tabindex="-1"></a>                                         <span class="at">breaks=</span><span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="sc">-</span><span class="fl">1.0</span>, <span class="sc">-</span><span class="fl">0.5</span>, <span class="fl">0.0</span>, </span>
<span id="cb29-11"><a href="#cb29-11" aria-hidden="true" tabindex="-1"></a>                                                  <span class="fl">0.5</span>, <span class="fl">1.0</span>, <span class="fl">1.5</span>))</span>
<span id="cb29-12"><a href="#cb29-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb29-13"><a href="#cb29-13" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb29-14"><a href="#cb29-14" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(graph_unemp_suicide_rate_female)</span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<div id="htmlwidget-2a6561826cf39b523eb7" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-2a6561826cf39b523eb7">{"x":{"data":[{"x":[0.811541155463418,0.160269136273551,0.279307405667278,0.465685279481301,0.422635468889403,0.360856714591046,0.301638954627877,-0.10647604230414,-0.0722147285801036,-0.261990711663791,0.674202122735542,0.61582951066417,0.748267847350452,1.14006383060494,0.0989506445132391,0.186032694734044,0.00819233201850244,-0.220701183513304,0.0644219130124384,-0.236275811250615,-0.162665883518411,-0.0435858338272754,0.0465317903951021,0.0609485291145466,-0.00509789209305688,0.509075803364402,1.08003322603163,0.678793530109888,0.897317976274262,0.871417998561598,0.319350522465534,-0.766664318189394,0.0100263969051579,0.0722536452918527,0.162389643906844,0.2710027100271,0.211525062299764,0.141514696563313,-0.0106392622897751,0.309892647504453,-0.551008762199188,-0.00657498222611629,-2.76366500688852e-05,0.341848480205404,0.00904422541953386,0.475877324273987,1.22695353312486],"y":[0.870589971542358,0.0117242997512221,-0.292409002780914,0.683071196079254,-0.174588993191719,0.190115407109261,0.3262580037117,0.964165389537811,0.311330407857895,0.208897992968559,0.214782506227493,0.156672105193138,0.0496965013444424,0.453176885843277,0.0972499027848244,-0.908252775669098,-0.335438191890717,-0.736819386482239,0.476842999458313,0.379889398813248,-0.0903280004858971,0.588504195213318,-0.0274187996983528,0.437540709972382,0.417739689350128,0.455186992883682,0.108691297471523,0.0723453015089035,0.569652020931244,-0.183740004897118,-1.0161190032959,-0.555025219917297,-0.0964405983686447,-0.681542694568634,0.0043470999225974,0.0141880000010133,-0.392297595739365,0.147314503788948,0.0095178997144103,0.186529904603958,-1.14933800697327,-0.129476100206375,-0.101893402636051,0.50426197052002,0.174589797854424,-0.572566986083984,-0.00318180001340806],"text":["treat_var:  8.115412e-01<br />outcome_var:  0.8705900<br />point_size_var:  5250<br />prefec: Hokkaido","treat_var:  1.602691e-01<br />outcome_var:  0.0117243<br />point_size_var:  1246<br />prefec: Aomori","treat_var:  2.793074e-01<br />outcome_var: -0.2924090<br />point_size_var:  1227<br />prefec: Iwate","treat_var:  4.656853e-01<br />outcome_var:  0.6830712<br />point_size_var:  2306<br />prefec: Miyagi","treat_var:  4.226355e-01<br />outcome_var: -0.1745890<br />point_size_var:   966<br />prefec: Akita","treat_var:  3.608567e-01<br />outcome_var:  0.1901154<br />point_size_var:  1078<br />prefec: Yamagata","treat_var:  3.016390e-01<br />outcome_var:  0.3262580<br />point_size_var:  1846<br />prefec: Fukushima","treat_var: -1.064760e-01<br />outcome_var:  0.9641654<br />point_size_var:  2860<br />prefec: Ibaraki","treat_var: -7.221473e-02<br />outcome_var:  0.3113304<br />point_size_var:  1934<br />prefec: Tochigi","treat_var: -2.619907e-01<br />outcome_var:  0.2088980<br />point_size_var:  1942<br />prefec: Gunma","treat_var:  6.742021e-01<br />outcome_var:  0.2147825<br />point_size_var:  7350<br />prefec: Saitama","treat_var:  6.158295e-01<br />outcome_var:  0.1566721<br />point_size_var:  6259<br />prefec: Chiba","treat_var:  7.482678e-01<br />outcome_var:  0.0496965<br />point_size_var: 13921<br />prefec: Tokyo","treat_var:  1.140064e+00<br />outcome_var:  0.4531769<br />point_size_var:  9198<br />prefec: Kanagawa","treat_var:  9.895064e-02<br />outcome_var:  0.0972499<br />point_size_var:  2223<br />prefec: Niigata","treat_var:  1.860327e-01<br />outcome_var: -0.9082528<br />point_size_var:  1044<br />prefec: Toyama","treat_var:  8.192332e-03<br />outcome_var: -0.3354382<br />point_size_var:  1138<br />prefec: Ishikawa","treat_var: -2.207012e-01<br />outcome_var: -0.7368194<br />point_size_var:   768<br />prefec: Fukui","treat_var:  6.442191e-02<br />outcome_var:  0.4768430<br />point_size_var:   811<br />prefec: Yamanashi","treat_var: -2.362758e-01<br />outcome_var:  0.3798894<br />point_size_var:  2049<br />prefec: Nagano","treat_var: -1.626659e-01<br />outcome_var: -0.0903280<br />point_size_var:  1987<br />prefec: Gifu","treat_var: -4.358583e-02<br />outcome_var:  0.5885042<br />point_size_var:  3644<br />prefec: Shizuoka","treat_var:  4.653179e-02<br />outcome_var: -0.0274188<br />point_size_var:  7552<br />prefec: Aichi","treat_var:  6.094853e-02<br />outcome_var:  0.4375407<br />point_size_var:  1781<br />prefec: Mie","treat_var: -5.097892e-03<br />outcome_var:  0.4177397<br />point_size_var:  1414<br />prefec: Shiga","treat_var:  5.090758e-01<br />outcome_var:  0.4551870<br />point_size_var:  2583<br />prefec: Kyoto","treat_var:  1.080033e+00<br />outcome_var:  0.1086913<br />point_size_var:  8809<br />prefec: Osaka","treat_var:  6.787935e-01<br />outcome_var:  0.0723453<br />point_size_var:  5466<br />prefec: Hyogo","treat_var:  8.973180e-01<br />outcome_var:  0.5696520<br />point_size_var:  1330<br />prefec: Nara","treat_var:  8.714180e-01<br />outcome_var: -0.1837400<br />point_size_var:   925<br />prefec: Wakayama","treat_var:  3.193505e-01<br />outcome_var: -1.0161190<br />point_size_var:   556<br />prefec: Tottori","treat_var: -7.666643e-01<br />outcome_var: -0.5550252<br />point_size_var:   674<br />prefec: Shimane","treat_var:  1.002640e-02<br />outcome_var: -0.0964406<br />point_size_var:  1890<br />prefec: Okayama","treat_var:  7.225365e-02<br />outcome_var: -0.6815427<br />point_size_var:  2804<br />prefec: Hiroshima","treat_var:  1.623896e-01<br />outcome_var:  0.0043471<br />point_size_var:  1358<br />prefec: Yamaguchi","treat_var:  2.710027e-01<br />outcome_var:  0.0141880<br />point_size_var:   728<br />prefec: Tokushima","treat_var:  2.115251e-01<br />outcome_var: -0.3922976<br />point_size_var:   956<br />prefec: Kagawa","treat_var:  1.415147e-01<br />outcome_var:  0.1473145<br />point_size_var:  1339<br />prefec: Ehime","treat_var: -1.063926e-02<br />outcome_var:  0.0095179<br />point_size_var:   698<br />prefec: Kochi","treat_var:  3.098926e-01<br />outcome_var:  0.1865299<br />point_size_var:  5104<br />prefec: Fukuoka","treat_var: -5.510088e-01<br />outcome_var: -1.1493380<br />point_size_var:   815<br />prefec: Saga","treat_var: -6.574982e-03<br />outcome_var: -0.1294761<br />point_size_var:  1327<br />prefec: Nagasaki","treat_var: -2.763665e-05<br />outcome_var: -0.1018934<br />point_size_var:  1748<br />prefec: Kumamoto","treat_var:  3.418485e-01<br />outcome_var:  0.5042620<br />point_size_var:  1135<br />prefec: Oita","treat_var:  9.044225e-03<br />outcome_var:  0.1745898<br />point_size_var:  1073<br />prefec: Miyazaki","treat_var:  4.758773e-01<br />outcome_var: -0.5725670<br />point_size_var:  1602<br />prefec: Kagoshima","treat_var:  1.226954e+00<br />outcome_var: -0.0031818<br />point_size_var:  1453<br />prefec: Okinawa"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,255,1)","opacity":0.5,"size":[29.9578461218343,16.1467692706863,16.0277072754529,21.235463459925,14.1788565611466,15.028499303167,19.3012123115092,23.2516322602638,19.6951131270115,19.7302901805266,34.5063891715372,32.2481245293543,45.3543307086614,37.9511170726148,20.9071976306237,14.781145944158,15.4461039040942,12.3192087031473,12.7796876473118,20.1913698857928,19.9262969097832,25.7264092012343,34.9040555944982,19.0015592842639,17.135331654376,22.2781094779273,37.259226640221,30.4674035975673,16.654490969827,13.8391501835295,7.55905511811024,11.1104097188694,19.4997870795502,23.0597507385724,16.8175463372456,11.8466846971743,14.0976289273409,16.7072185759042,11.4548600860031,29.6067536965575,12.8204744588913,16.6368470427334,18.8463835631895,15.4257501958764,14.9926400265137,18.1325577357223,17.3505557526536],"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.766664318189394,-0.741428649185416,-0.716192980181438,-0.69095731117746,-0.665721642173482,-0.640485973169504,-0.615250304165526,-0.590014635161549,-0.564778966157571,-0.539543297153593,-0.514307628149615,-0.489071959145637,-0.463836290141659,-0.438600621137681,-0.413364952133703,-0.388129283129725,-0.362893614125747,-0.337657945121769,-0.312422276117792,-0.287186607113814,-0.261950938109836,-0.236715269105858,-0.21147960010188,-0.186243931097902,-0.161008262093924,-0.135772593089946,-0.110536924085968,-0.0853012550819905,-0.0600655860780126,-0.0348299170740347,-0.00959424807005682,0.0156414209339211,0.040877089937899,0.0661127589418768,0.0913484279458547,0.116584096949833,0.141819765953811,0.167055434957788,0.192291103961766,0.217526772965744,0.242762441969722,0.2679981109737,0.293233779977678,0.318469448981656,0.343705117985634,0.368940786989612,0.394176455993589,0.419412124997567,0.444647794001545,0.469883463005523,0.495119132009501,0.520354801013479,0.545590470017457,0.570826139021435,0.596061808025413,0.621297477029391,0.646533146033369,0.671768815037346,0.697004484041324,0.722240153045302,0.74747582204928,0.772711491053258,0.797947160057236,0.823182829061214,0.848418498065192,0.87365416706917,0.898889836073147,0.924125505077125,0.949361174081103,0.974596843085081,0.999832512089059,1.02506818109304,1.05030385009701,1.07553951910099,1.10077518810497,1.12601085710895,1.15124652611293,1.1764821951169,1.20171786412088,1.22695353312486],"y":[-0.284390100515227,-0.276439228524253,-0.268488356533278,-0.260537484542304,-0.25258661255133,-0.244635740560355,-0.236684868569381,-0.228733996578406,-0.220783124587432,-0.212832252596458,-0.204881380605483,-0.196930508614509,-0.188979636623535,-0.18102876463256,-0.173077892641586,-0.165127020650611,-0.157176148659637,-0.149225276668663,-0.141274404677688,-0.133323532686714,-0.12537266069574,-0.117421788704765,-0.109470916713791,-0.101520044722816,-0.093569172731842,-0.0856183007408677,-0.0776674287498933,-0.0697165567589189,-0.0617656847679445,-0.0538148127769702,-0.0458639407859958,-0.0379130687950214,-0.029962196804047,-0.0220113248130727,-0.0140604528220983,-0.0061095808311239,0.00184129115985047,0.00979216315082485,0.0177430351417992,0.0256939071327736,0.033644779123748,0.0415956511147223,0.0495465231056967,0.0574973950966711,0.0654482670876455,0.0733991390786198,0.0813500110695942,0.0893008830605686,0.097251755051543,0.105202627042517,0.113153499033492,0.121104371024466,0.129055243015441,0.137006115006415,0.144956986997389,0.152907858988364,0.160858730979338,0.168809602970312,0.176760474961287,0.184711346952261,0.192662218943236,0.20061309093421,0.208563962925184,0.216514834916159,0.224465706907133,0.232416578898107,0.240367450889082,0.248318322880056,0.256269194871031,0.264220066862005,0.272170938852979,0.280121810843954,0.288072682834928,0.296023554825902,0.303974426816877,0.311925298807851,0.319876170798826,0.3278270427898,0.335777914780774,0.343728786771749],"text":["treat_var: -0.766664318<br />outcome_var: -0.284390101<br />point_size_var: 1","treat_var: -0.741428649<br />outcome_var: -0.276439229<br />point_size_var: 1","treat_var: -0.716192980<br />outcome_var: -0.268488357<br />point_size_var: 1","treat_var: -0.690957311<br />outcome_var: -0.260537485<br />point_size_var: 1","treat_var: -0.665721642<br />outcome_var: -0.252586613<br />point_size_var: 1","treat_var: -0.640485973<br />outcome_var: -0.244635741<br />point_size_var: 1","treat_var: -0.615250304<br />outcome_var: -0.236684869<br />point_size_var: 1","treat_var: -0.590014635<br />outcome_var: -0.228733997<br />point_size_var: 1","treat_var: -0.564778966<br />outcome_var: -0.220783125<br />point_size_var: 1","treat_var: -0.539543297<br />outcome_var: -0.212832253<br />point_size_var: 1","treat_var: -0.514307628<br />outcome_var: -0.204881381<br />point_size_var: 1","treat_var: -0.489071959<br />outcome_var: -0.196930509<br />point_size_var: 1","treat_var: -0.463836290<br />outcome_var: -0.188979637<br />point_size_var: 1","treat_var: -0.438600621<br />outcome_var: -0.181028765<br />point_size_var: 1","treat_var: -0.413364952<br />outcome_var: -0.173077893<br />point_size_var: 1","treat_var: -0.388129283<br />outcome_var: -0.165127021<br />point_size_var: 1","treat_var: -0.362893614<br />outcome_var: -0.157176149<br />point_size_var: 1","treat_var: -0.337657945<br />outcome_var: -0.149225277<br />point_size_var: 1","treat_var: -0.312422276<br />outcome_var: -0.141274405<br />point_size_var: 1","treat_var: -0.287186607<br />outcome_var: -0.133323533<br />point_size_var: 1","treat_var: -0.261950938<br />outcome_var: -0.125372661<br />point_size_var: 1","treat_var: -0.236715269<br />outcome_var: -0.117421789<br />point_size_var: 1","treat_var: -0.211479600<br />outcome_var: -0.109470917<br />point_size_var: 1","treat_var: -0.186243931<br />outcome_var: -0.101520045<br />point_size_var: 1","treat_var: -0.161008262<br />outcome_var: -0.093569173<br />point_size_var: 1","treat_var: -0.135772593<br />outcome_var: -0.085618301<br />point_size_var: 1","treat_var: -0.110536924<br />outcome_var: -0.077667429<br />point_size_var: 1","treat_var: -0.085301255<br />outcome_var: -0.069716557<br />point_size_var: 1","treat_var: -0.060065586<br />outcome_var: -0.061765685<br />point_size_var: 1","treat_var: -0.034829917<br />outcome_var: -0.053814813<br />point_size_var: 1","treat_var: -0.009594248<br />outcome_var: -0.045863941<br />point_size_var: 1","treat_var:  0.015641421<br />outcome_var: -0.037913069<br />point_size_var: 1","treat_var:  0.040877090<br />outcome_var: -0.029962197<br />point_size_var: 1","treat_var:  0.066112759<br />outcome_var: -0.022011325<br />point_size_var: 1","treat_var:  0.091348428<br />outcome_var: -0.014060453<br />point_size_var: 1","treat_var:  0.116584097<br />outcome_var: -0.006109581<br />point_size_var: 1","treat_var:  0.141819766<br />outcome_var:  0.001841291<br />point_size_var: 1","treat_var:  0.167055435<br />outcome_var:  0.009792163<br />point_size_var: 1","treat_var:  0.192291104<br />outcome_var:  0.017743035<br />point_size_var: 1","treat_var:  0.217526773<br />outcome_var:  0.025693907<br />point_size_var: 1","treat_var:  0.242762442<br />outcome_var:  0.033644779<br />point_size_var: 1","treat_var:  0.267998111<br />outcome_var:  0.041595651<br />point_size_var: 1","treat_var:  0.293233780<br />outcome_var:  0.049546523<br />point_size_var: 1","treat_var:  0.318469449<br />outcome_var:  0.057497395<br />point_size_var: 1","treat_var:  0.343705118<br />outcome_var:  0.065448267<br />point_size_var: 1","treat_var:  0.368940787<br />outcome_var:  0.073399139<br />point_size_var: 1","treat_var:  0.394176456<br />outcome_var:  0.081350011<br />point_size_var: 1","treat_var:  0.419412125<br />outcome_var:  0.089300883<br />point_size_var: 1","treat_var:  0.444647794<br />outcome_var:  0.097251755<br />point_size_var: 1","treat_var:  0.469883463<br />outcome_var:  0.105202627<br />point_size_var: 1","treat_var:  0.495119132<br />outcome_var:  0.113153499<br />point_size_var: 1","treat_var:  0.520354801<br />outcome_var:  0.121104371<br />point_size_var: 1","treat_var:  0.545590470<br />outcome_var:  0.129055243<br />point_size_var: 1","treat_var:  0.570826139<br />outcome_var:  0.137006115<br />point_size_var: 1","treat_var:  0.596061808<br />outcome_var:  0.144956987<br />point_size_var: 1","treat_var:  0.621297477<br />outcome_var:  0.152907859<br />point_size_var: 1","treat_var:  0.646533146<br />outcome_var:  0.160858731<br />point_size_var: 1","treat_var:  0.671768815<br />outcome_var:  0.168809603<br />point_size_var: 1","treat_var:  0.697004484<br />outcome_var:  0.176760475<br />point_size_var: 1","treat_var:  0.722240153<br />outcome_var:  0.184711347<br />point_size_var: 1","treat_var:  0.747475822<br />outcome_var:  0.192662219<br />point_size_var: 1","treat_var:  0.772711491<br />outcome_var:  0.200613091<br />point_size_var: 1","treat_var:  0.797947160<br />outcome_var:  0.208563963<br />point_size_var: 1","treat_var:  0.823182829<br />outcome_var:  0.216514835<br />point_size_var: 1","treat_var:  0.848418498<br />outcome_var:  0.224465707<br />point_size_var: 1","treat_var:  0.873654167<br />outcome_var:  0.232416579<br />point_size_var: 1","treat_var:  0.898889836<br />outcome_var:  0.240367451<br />point_size_var: 1","treat_var:  0.924125505<br />outcome_var:  0.248318323<br />point_size_var: 1","treat_var:  0.949361174<br />outcome_var:  0.256269195<br />point_size_var: 1","treat_var:  0.974596843<br />outcome_var:  0.264220067<br />point_size_var: 1","treat_var:  0.999832512<br />outcome_var:  0.272170939<br />point_size_var: 1","treat_var:  1.025068181<br />outcome_var:  0.280121811<br />point_size_var: 1","treat_var:  1.050303850<br />outcome_var:  0.288072683<br />point_size_var: 1","treat_var:  1.075539519<br />outcome_var:  0.296023555<br />point_size_var: 1","treat_var:  1.100775188<br />outcome_var:  0.303974427<br />point_size_var: 1","treat_var:  1.126010857<br />outcome_var:  0.311925299<br />point_size_var: 1","treat_var:  1.151246526<br />outcome_var:  0.319876171<br />point_size_var: 1","treat_var:  1.176482195<br />outcome_var:  0.327827043<br />point_size_var: 1","treat_var:  1.201717864<br />outcome_var:  0.335777915<br />point_size_var: 1","treat_var:  1.226953533<br />outcome_var:  0.343728787<br />point_size_var: 1"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,51,51,1)","dash":"dash"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0],"y":[-1.65,1.65],"text":"xintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.866345210755106,1.32663442569057],"y":[0,0],"text":"yintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":{"text":"(c) Female suicides","font":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.866345210755106,1.32663442569057],"tickmode":"array","ticktext":["-0.5","0.0","0.5","1.0"],"tickvals":[-0.5,0,0.5,1],"categoryorder":"array","categoryarray":["-0.5","0.0","0.5","1.0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"Employment shock measured by the unemployment rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-1.65,1.65],"tickmode":"array","ticktext":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"tickvals":[-1.5,-1,-0.5,0,0.5,1,1.5],"categoryorder":"array","categoryarray":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"Change in the suicide rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"f330570b48ed":{"x":{},"y":{},"size":{},"label":{},"type":"scatter"},"f330715417c3":{"x":{},"y":{},"size":{},"label":{}},"f330210f3aa6":{"xintercept":{}},"f3301578196c":{"yintercept":{}}},"cur_data":"f330570b48ed","visdat":{"f330570b48ed":["function (y) ","x"],"f330715417c3":["function (y) ","x"],"f330210f3aa6":["function (y) ","x"],"f3301578196c":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb31"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Male / 男性</span></span>
<span id="cb31-2"><a href="#cb31-2" aria-hidden="true" tabindex="-1"></a>graph_unemp_suicide_rate_male <span class="ot">&lt;-</span> <span class="fu">scatter_treat_outcome</span>(<span class="at">dataset =</span> df_analysis_2020jul, </span>
<span id="cb31-3"><a href="#cb31-3" aria-hidden="true" tabindex="-1"></a>                      <span class="at">treat_var =</span> df_analysis_2020jul<span class="sc">$</span>unemploy_shock_diff2,</span>
<span id="cb31-4"><a href="#cb31-4" aria-hidden="true" tabindex="-1"></a>                      <span class="at">outcome_var =</span> df_analysis_2020jul<span class="sc">$</span>yoy_suicide_rate_male,</span>
<span id="cb31-5"><a href="#cb31-5" aria-hidden="true" tabindex="-1"></a>                      <span class="at">point_size_var =</span> df_analysis_2020jul<span class="sc">$</span>population_total,</span>
<span id="cb31-6"><a href="#cb31-6" aria-hidden="true" tabindex="-1"></a>                      <span class="at">main_title =</span> <span class="st">&quot;(d) Male suicides&quot;</span>,</span>
<span id="cb31-7"><a href="#cb31-7" aria-hidden="true" tabindex="-1"></a>                      <span class="at">x_title =</span> <span class="st">&quot;Employment shock measured by the unemployment rate&quot;</span>,</span>
<span id="cb31-8"><a href="#cb31-8" aria-hidden="true" tabindex="-1"></a>                      <span class="at">y_title =</span> <span class="st">&quot;Change in the suicide rate&quot;</span>) <span class="sc">+</span></span>
<span id="cb31-9"><a href="#cb31-9" aria-hidden="true" tabindex="-1"></a>                      <span class="fu">scale_y_continuous</span>(<span class="at">limits =</span> <span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="fl">1.5</span>),</span>
<span id="cb31-10"><a href="#cb31-10" aria-hidden="true" tabindex="-1"></a>                                         <span class="at">breaks=</span><span class="fu">c</span>(<span class="sc">-</span><span class="fl">1.5</span>, <span class="sc">-</span><span class="fl">1.0</span>, <span class="sc">-</span><span class="fl">0.5</span>, <span class="fl">0.0</span>, </span>
<span id="cb31-11"><a href="#cb31-11" aria-hidden="true" tabindex="-1"></a>                                                  <span class="fl">0.5</span>, <span class="fl">1.0</span>, <span class="fl">1.5</span>))</span>
<span id="cb31-12"><a href="#cb31-12" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb31-13"><a href="#cb31-13" aria-hidden="true" tabindex="-1"></a><span class="fu">ggplotly</span>(graph_unemp_suicide_rate_male)</span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<pre><code>## Warning: Removed 1 rows containing non-finite values (stat_smooth).</code></pre>
<div id="htmlwidget-9f993dbd3a3fa86c5063" style="width:672px;height:480px;" class="plotly html-widget"></div>
<script type="application/json" data-for="htmlwidget-9f993dbd3a3fa86c5063">{"x":{"data":[{"x":[0.811541155463418,0.160269136273551,0.279307405667278,0.465685279481301,0.422635468889403,0.360856714591046,0.301638954627877,-0.10647604230414,-0.0722147285801036,-0.261990711663791,0.674202122735542,0.61582951066417,0.748267847350452,1.14006383060494,0.0989506445132391,0.186032694734044,0.00819233201850244,-0.220701183513304,0.0644219130124384,-0.236275811250615,-0.162665883518411,-0.0435858338272754,0.0465317903951021,0.0609485291145466,-0.00509789209305688,0.509075803364402,1.08003322603163,0.678793530109888,0.897317976274262,0.871417998561598,0.319350522465534,-0.766664318189394,0.0100263969051579,0.0722536452918527,0.162389643906844,0.2710027100271,0.211525062299764,0.141514696563313,-0.0106392622897751,0.309892647504453,-0.551008762199188,-0.00657498222611629,-2.76366500688852e-05,0.341848480205404,0.00904422541953386,0.475877324273987,1.22695353312486],"y":[-0.187693998217583,1.0251350402832,0.697529971599579,-0.437359988689423,-1.0072979927063,0.0211030002683401,-0.402570009231567,0.0759090036153793,-0.195629000663757,-0.604987978935242,-0.164177000522614,-0.00206599989905953,0.165206000208855,-0.0242940001189709,-0.342914998531342,-0.761573970317841,0.36888000369072,null,1.24664700031281,-0.37958300113678,-0.191752001643181,0.117705002427101,-0.318955987691879,1.13077294826508,-1.14396595954895,-0.159301996231079,0.562812983989716,-0.555666983127594,0.635079979896545,0.474961996078491,-0.357129991054535,0.326784998178482,-0.645444989204407,0.0789420008659363,-1.20977628231049,0.0232779998332262,0.221037998795509,0.481965988874435,0.0231529995799065,-0.410023003816605,0.773162007331848,-0.142032995820045,0.247512996196747,-0.164331004023552,-0.748867988586426,0.792653977870941,0.814297020435333],"text":["treat_var:  8.115412e-01<br />outcome_var: -0.187694<br />point_size_var:  5250<br />prefec: Hokkaido","treat_var:  1.602691e-01<br />outcome_var:  1.025135<br />point_size_var:  1246<br />prefec: Aomori","treat_var:  2.793074e-01<br />outcome_var:  0.697530<br />point_size_var:  1227<br />prefec: Iwate","treat_var:  4.656853e-01<br />outcome_var: -0.437360<br />point_size_var:  2306<br />prefec: Miyagi","treat_var:  4.226355e-01<br />outcome_var: -1.007298<br />point_size_var:   966<br />prefec: Akita","treat_var:  3.608567e-01<br />outcome_var:  0.021103<br />point_size_var:  1078<br />prefec: Yamagata","treat_var:  3.016390e-01<br />outcome_var: -0.402570<br />point_size_var:  1846<br />prefec: Fukushima","treat_var: -1.064760e-01<br />outcome_var:  0.075909<br />point_size_var:  2860<br />prefec: Ibaraki","treat_var: -7.221473e-02<br />outcome_var: -0.195629<br />point_size_var:  1934<br />prefec: Tochigi","treat_var: -2.619907e-01<br />outcome_var: -0.604988<br />point_size_var:  1942<br />prefec: Gunma","treat_var:  6.742021e-01<br />outcome_var: -0.164177<br />point_size_var:  7350<br />prefec: Saitama","treat_var:  6.158295e-01<br />outcome_var: -0.002066<br />point_size_var:  6259<br />prefec: Chiba","treat_var:  7.482678e-01<br />outcome_var:  0.165206<br />point_size_var: 13921<br />prefec: Tokyo","treat_var:  1.140064e+00<br />outcome_var: -0.024294<br />point_size_var:  9198<br />prefec: Kanagawa","treat_var:  9.895064e-02<br />outcome_var: -0.342915<br />point_size_var:  2223<br />prefec: Niigata","treat_var:  1.860327e-01<br />outcome_var: -0.761574<br />point_size_var:  1044<br />prefec: Toyama","treat_var:  8.192332e-03<br />outcome_var:  0.368880<br />point_size_var:  1138<br />prefec: Ishikawa","treat_var: -2.207012e-01<br />outcome_var: -1.561806<br />point_size_var:   768<br />prefec: Fukui","treat_var:  6.442191e-02<br />outcome_var:  1.246647<br />point_size_var:   811<br />prefec: Yamanashi","treat_var: -2.362758e-01<br />outcome_var: -0.379583<br />point_size_var:  2049<br />prefec: Nagano","treat_var: -1.626659e-01<br />outcome_var: -0.191752<br />point_size_var:  1987<br />prefec: Gifu","treat_var: -4.358583e-02<br />outcome_var:  0.117705<br />point_size_var:  3644<br />prefec: Shizuoka","treat_var:  4.653179e-02<br />outcome_var: -0.318956<br />point_size_var:  7552<br />prefec: Aichi","treat_var:  6.094853e-02<br />outcome_var:  1.130773<br />point_size_var:  1781<br />prefec: Mie","treat_var: -5.097892e-03<br />outcome_var: -1.143966<br />point_size_var:  1414<br />prefec: Shiga","treat_var:  5.090758e-01<br />outcome_var: -0.159302<br />point_size_var:  2583<br />prefec: Kyoto","treat_var:  1.080033e+00<br />outcome_var:  0.562813<br />point_size_var:  8809<br />prefec: Osaka","treat_var:  6.787935e-01<br />outcome_var: -0.555667<br />point_size_var:  5466<br />prefec: Hyogo","treat_var:  8.973180e-01<br />outcome_var:  0.635080<br />point_size_var:  1330<br />prefec: Nara","treat_var:  8.714180e-01<br />outcome_var:  0.474962<br />point_size_var:   925<br />prefec: Wakayama","treat_var:  3.193505e-01<br />outcome_var: -0.357130<br />point_size_var:   556<br />prefec: Tottori","treat_var: -7.666643e-01<br />outcome_var:  0.326785<br />point_size_var:   674<br />prefec: Shimane","treat_var:  1.002640e-02<br />outcome_var: -0.645445<br />point_size_var:  1890<br />prefec: Okayama","treat_var:  7.225365e-02<br />outcome_var:  0.078942<br />point_size_var:  2804<br />prefec: Hiroshima","treat_var:  1.623896e-01<br />outcome_var: -1.209776<br />point_size_var:  1358<br />prefec: Yamaguchi","treat_var:  2.710027e-01<br />outcome_var:  0.023278<br />point_size_var:   728<br />prefec: Tokushima","treat_var:  2.115251e-01<br />outcome_var:  0.221038<br />point_size_var:   956<br />prefec: Kagawa","treat_var:  1.415147e-01<br />outcome_var:  0.481966<br />point_size_var:  1339<br />prefec: Ehime","treat_var: -1.063926e-02<br />outcome_var:  0.023153<br />point_size_var:   698<br />prefec: Kochi","treat_var:  3.098926e-01<br />outcome_var: -0.410023<br />point_size_var:  5104<br />prefec: Fukuoka","treat_var: -5.510088e-01<br />outcome_var:  0.773162<br />point_size_var:   815<br />prefec: Saga","treat_var: -6.574982e-03<br />outcome_var: -0.142033<br />point_size_var:  1327<br />prefec: Nagasaki","treat_var: -2.763665e-05<br />outcome_var:  0.247513<br />point_size_var:  1748<br />prefec: Kumamoto","treat_var:  3.418485e-01<br />outcome_var: -0.164331<br />point_size_var:  1135<br />prefec: Oita","treat_var:  9.044225e-03<br />outcome_var: -0.748868<br />point_size_var:  1073<br />prefec: Miyazaki","treat_var:  4.758773e-01<br />outcome_var:  0.792654<br />point_size_var:  1602<br />prefec: Kagoshima","treat_var:  1.226954e+00<br />outcome_var:  0.814297<br />point_size_var:  1453<br />prefec: Okinawa"],"type":"scatter","mode":"markers","marker":{"autocolorscale":false,"color":"rgba(0,0,255,1)","opacity":0.5,"size":[29.9578461218343,16.1467692706863,16.0277072754529,21.235463459925,14.1788565611466,15.028499303167,19.3012123115092,23.2516322602638,19.6951131270115,19.7302901805266,34.5063891715372,32.2481245293543,45.3543307086614,37.9511170726148,20.9071976306237,14.781145944158,15.4461039040942,12.3192087031473,12.7796876473118,20.1913698857928,19.9262969097832,25.7264092012343,34.9040555944982,19.0015592842639,17.135331654376,22.2781094779273,37.259226640221,30.4674035975673,16.654490969827,13.8391501835295,7.55905511811024,11.1104097188694,19.4997870795502,23.0597507385724,16.8175463372456,11.8466846971743,14.0976289273409,16.7072185759042,11.4548600860031,29.6067536965575,12.8204744588913,16.6368470427334,18.8463835631895,15.4257501958764,14.9926400265137,18.1325577357223,17.3505557526536],"symbol":"circle","line":{"width":1.88976377952756,"color":"rgba(0,0,0,1)"}},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.766664318189394,-0.741428649185416,-0.716192980181438,-0.69095731117746,-0.665721642173482,-0.640485973169504,-0.615250304165526,-0.590014635161549,-0.564778966157571,-0.539543297153593,-0.514307628149615,-0.489071959145637,-0.463836290141659,-0.438600621137681,-0.413364952133703,-0.388129283129725,-0.362893614125747,-0.337657945121769,-0.312422276117792,-0.287186607113814,-0.261950938109836,-0.236715269105858,-0.21147960010188,-0.186243931097902,-0.161008262093924,-0.135772593089946,-0.110536924085968,-0.0853012550819905,-0.0600655860780126,-0.0348299170740347,-0.00959424807005682,0.0156414209339211,0.040877089937899,0.0661127589418768,0.0913484279458547,0.116584096949833,0.141819765953811,0.167055434957788,0.192291103961766,0.217526772965744,0.242762441969722,0.2679981109737,0.293233779977678,0.318469448981656,0.343705117985634,0.368940786989612,0.394176455993589,0.419412124997567,0.444647794001545,0.469883463005523,0.495119132009501,0.520354801013479,0.545590470017457,0.570826139021435,0.596061808025413,0.621297477029391,0.646533146033369,0.671768815037346,0.697004484041324,0.722240153045302,0.74747582204928,0.772711491053258,0.797947160057236,0.823182829061214,0.848418498065192,0.87365416706917,0.898889836073147,0.924125505077125,0.949361174081103,0.974596843085081,0.999832512089059,1.02506818109304,1.05030385009701,1.07553951910099,1.10077518810497,1.12601085710895,1.15124652611293,1.1764821951169,1.20171786412088,1.22695353312486],"y":[-0.164330773128646,-0.160414200312743,-0.15649762749684,-0.152581054680937,-0.148664481865034,-0.144747909049132,-0.140831336233229,-0.136914763417326,-0.132998190601423,-0.12908161778552,-0.125165044969617,-0.121248472153715,-0.117331899337812,-0.113415326521909,-0.109498753706006,-0.105582180890103,-0.101665608074201,-0.0977490352582978,-0.0938324624423949,-0.0899158896264921,-0.0859993168105893,-0.0820827439946865,-0.0781661711787837,-0.0742495983628809,-0.070333025546978,-0.0664164527310752,-0.0624998799151724,-0.0585833070992696,-0.0546667342833668,-0.050750161467464,-0.0468335886515611,-0.0429170158356583,-0.0390004430197555,-0.0350838702038527,-0.0311672973879499,-0.0272507245720471,-0.0233341517561443,-0.0194175789402414,-0.0155010061243386,-0.0115844333084358,-0.00766786049253301,-0.00375128767663019,0.000165285139272622,0.00408185795517544,0.00799843077107825,0.0119150035869811,0.0158315764028839,0.0197481492187867,0.0236647220346895,0.0275812948505924,0.0314978676664952,0.035414440482398,0.0393310132983008,0.0432475861142036,0.0471641589301064,0.0510807317460093,0.0549973045619121,0.0589138773778149,0.0628304501937177,0.0667470230096205,0.0706635958255233,0.0745801686414261,0.0784967414573289,0.0824133142732318,0.0863298870891346,0.0902464599050374,0.0941630327209402,0.098079605536843,0.101996178352746,0.105912751168649,0.109829323984551,0.113745896800454,0.117662469616357,0.12157904243226,0.125495615248163,0.129412188064066,0.133328760879968,0.137245333695871,0.141161906511774,0.145078479327677],"text":["treat_var: -0.766664318<br />outcome_var: -0.1643307731<br />point_size_var: 1","treat_var: -0.741428649<br />outcome_var: -0.1604142003<br />point_size_var: 1","treat_var: -0.716192980<br />outcome_var: -0.1564976275<br />point_size_var: 1","treat_var: -0.690957311<br />outcome_var: -0.1525810547<br />point_size_var: 1","treat_var: -0.665721642<br />outcome_var: -0.1486644819<br />point_size_var: 1","treat_var: -0.640485973<br />outcome_var: -0.1447479090<br />point_size_var: 1","treat_var: -0.615250304<br />outcome_var: -0.1408313362<br />point_size_var: 1","treat_var: -0.590014635<br />outcome_var: -0.1369147634<br />point_size_var: 1","treat_var: -0.564778966<br />outcome_var: -0.1329981906<br />point_size_var: 1","treat_var: -0.539543297<br />outcome_var: -0.1290816178<br />point_size_var: 1","treat_var: -0.514307628<br />outcome_var: -0.1251650450<br />point_size_var: 1","treat_var: -0.489071959<br />outcome_var: -0.1212484722<br />point_size_var: 1","treat_var: -0.463836290<br />outcome_var: -0.1173318993<br />point_size_var: 1","treat_var: -0.438600621<br />outcome_var: -0.1134153265<br />point_size_var: 1","treat_var: -0.413364952<br />outcome_var: -0.1094987537<br />point_size_var: 1","treat_var: -0.388129283<br />outcome_var: -0.1055821809<br />point_size_var: 1","treat_var: -0.362893614<br />outcome_var: -0.1016656081<br />point_size_var: 1","treat_var: -0.337657945<br />outcome_var: -0.0977490353<br />point_size_var: 1","treat_var: -0.312422276<br />outcome_var: -0.0938324624<br />point_size_var: 1","treat_var: -0.287186607<br />outcome_var: -0.0899158896<br />point_size_var: 1","treat_var: -0.261950938<br />outcome_var: -0.0859993168<br />point_size_var: 1","treat_var: -0.236715269<br />outcome_var: -0.0820827440<br />point_size_var: 1","treat_var: -0.211479600<br />outcome_var: -0.0781661712<br />point_size_var: 1","treat_var: -0.186243931<br />outcome_var: -0.0742495984<br />point_size_var: 1","treat_var: -0.161008262<br />outcome_var: -0.0703330255<br />point_size_var: 1","treat_var: -0.135772593<br />outcome_var: -0.0664164527<br />point_size_var: 1","treat_var: -0.110536924<br />outcome_var: -0.0624998799<br />point_size_var: 1","treat_var: -0.085301255<br />outcome_var: -0.0585833071<br />point_size_var: 1","treat_var: -0.060065586<br />outcome_var: -0.0546667343<br />point_size_var: 1","treat_var: -0.034829917<br />outcome_var: -0.0507501615<br />point_size_var: 1","treat_var: -0.009594248<br />outcome_var: -0.0468335887<br />point_size_var: 1","treat_var:  0.015641421<br />outcome_var: -0.0429170158<br />point_size_var: 1","treat_var:  0.040877090<br />outcome_var: -0.0390004430<br />point_size_var: 1","treat_var:  0.066112759<br />outcome_var: -0.0350838702<br />point_size_var: 1","treat_var:  0.091348428<br />outcome_var: -0.0311672974<br />point_size_var: 1","treat_var:  0.116584097<br />outcome_var: -0.0272507246<br />point_size_var: 1","treat_var:  0.141819766<br />outcome_var: -0.0233341518<br />point_size_var: 1","treat_var:  0.167055435<br />outcome_var: -0.0194175789<br />point_size_var: 1","treat_var:  0.192291104<br />outcome_var: -0.0155010061<br />point_size_var: 1","treat_var:  0.217526773<br />outcome_var: -0.0115844333<br />point_size_var: 1","treat_var:  0.242762442<br />outcome_var: -0.0076678605<br />point_size_var: 1","treat_var:  0.267998111<br />outcome_var: -0.0037512877<br />point_size_var: 1","treat_var:  0.293233780<br />outcome_var:  0.0001652851<br />point_size_var: 1","treat_var:  0.318469449<br />outcome_var:  0.0040818580<br />point_size_var: 1","treat_var:  0.343705118<br />outcome_var:  0.0079984308<br />point_size_var: 1","treat_var:  0.368940787<br />outcome_var:  0.0119150036<br />point_size_var: 1","treat_var:  0.394176456<br />outcome_var:  0.0158315764<br />point_size_var: 1","treat_var:  0.419412125<br />outcome_var:  0.0197481492<br />point_size_var: 1","treat_var:  0.444647794<br />outcome_var:  0.0236647220<br />point_size_var: 1","treat_var:  0.469883463<br />outcome_var:  0.0275812949<br />point_size_var: 1","treat_var:  0.495119132<br />outcome_var:  0.0314978677<br />point_size_var: 1","treat_var:  0.520354801<br />outcome_var:  0.0354144405<br />point_size_var: 1","treat_var:  0.545590470<br />outcome_var:  0.0393310133<br />point_size_var: 1","treat_var:  0.570826139<br />outcome_var:  0.0432475861<br />point_size_var: 1","treat_var:  0.596061808<br />outcome_var:  0.0471641589<br />point_size_var: 1","treat_var:  0.621297477<br />outcome_var:  0.0510807317<br />point_size_var: 1","treat_var:  0.646533146<br />outcome_var:  0.0549973046<br />point_size_var: 1","treat_var:  0.671768815<br />outcome_var:  0.0589138774<br />point_size_var: 1","treat_var:  0.697004484<br />outcome_var:  0.0628304502<br />point_size_var: 1","treat_var:  0.722240153<br />outcome_var:  0.0667470230<br />point_size_var: 1","treat_var:  0.747475822<br />outcome_var:  0.0706635958<br />point_size_var: 1","treat_var:  0.772711491<br />outcome_var:  0.0745801686<br />point_size_var: 1","treat_var:  0.797947160<br />outcome_var:  0.0784967415<br />point_size_var: 1","treat_var:  0.823182829<br />outcome_var:  0.0824133143<br />point_size_var: 1","treat_var:  0.848418498<br />outcome_var:  0.0863298871<br />point_size_var: 1","treat_var:  0.873654167<br />outcome_var:  0.0902464599<br />point_size_var: 1","treat_var:  0.898889836<br />outcome_var:  0.0941630327<br />point_size_var: 1","treat_var:  0.924125505<br />outcome_var:  0.0980796055<br />point_size_var: 1","treat_var:  0.949361174<br />outcome_var:  0.1019961784<br />point_size_var: 1","treat_var:  0.974596843<br />outcome_var:  0.1059127512<br />point_size_var: 1","treat_var:  0.999832512<br />outcome_var:  0.1098293240<br />point_size_var: 1","treat_var:  1.025068181<br />outcome_var:  0.1137458968<br />point_size_var: 1","treat_var:  1.050303850<br />outcome_var:  0.1176624696<br />point_size_var: 1","treat_var:  1.075539519<br />outcome_var:  0.1215790424<br />point_size_var: 1","treat_var:  1.100775188<br />outcome_var:  0.1254956152<br />point_size_var: 1","treat_var:  1.126010857<br />outcome_var:  0.1294121881<br />point_size_var: 1","treat_var:  1.151246526<br />outcome_var:  0.1333287609<br />point_size_var: 1","treat_var:  1.176482195<br />outcome_var:  0.1372453337<br />point_size_var: 1","treat_var:  1.201717864<br />outcome_var:  0.1411619065<br />point_size_var: 1","treat_var:  1.226953533<br />outcome_var:  0.1450784793<br />point_size_var: 1"],"type":"scatter","mode":"lines","name":"fitted values","line":{"width":3.77952755905512,"color":"rgba(51,51,51,1)","dash":"dash"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[0,0],"y":[-1.65,1.65],"text":"xintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null},{"x":[-0.866345210755106,1.32663442569057],"y":[0,0],"text":"yintercept: 0","type":"scatter","mode":"lines","line":{"width":1.88976377952756,"color":"rgba(190,190,190,1)","dash":"solid"},"hoveron":"points","showlegend":false,"xaxis":"x","yaxis":"y","hoverinfo":"text","frame":null}],"layout":{"margin":{"t":43.7625570776256,"r":7.30593607305936,"b":40.1826484018265,"l":48.9497716894977},"plot_bgcolor":"rgba(255,255,255,1)","paper_bgcolor":"rgba(255,255,255,1)","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187},"title":{"text":"(d) Male suicides","font":{"color":"rgba(0,0,0,1)","family":"","size":17.5342465753425},"x":0,"xref":"paper"},"xaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-0.866345210755106,1.32663442569057],"tickmode":"array","ticktext":["-0.5","0.0","0.5","1.0"],"tickvals":[-0.5,0,0.5,1],"categoryorder":"array","categoryarray":["-0.5","0.0","0.5","1.0"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"y","title":{"text":"Employment shock measured by the unemployment rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"yaxis":{"domain":[0,1],"automargin":true,"type":"linear","autorange":false,"range":[-1.65,1.65],"tickmode":"array","ticktext":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"tickvals":[-1.5,-1,-0.5,0,0.5,1,1.5],"categoryorder":"array","categoryarray":["-1.5","-1.0","-0.5","0.0","0.5","1.0","1.5"],"nticks":null,"ticks":"outside","tickcolor":"rgba(51,51,51,1)","ticklen":3.65296803652968,"tickwidth":0.66417600664176,"showticklabels":true,"tickfont":{"color":"rgba(77,77,77,1)","family":"","size":11.689497716895},"tickangle":-0,"showline":true,"linecolor":"rgba(0,0,0,1)","linewidth":0.66417600664176,"showgrid":false,"gridcolor":null,"gridwidth":0,"zeroline":false,"anchor":"x","title":{"text":"Change in the suicide rate","font":{"color":"rgba(0,0,0,1)","family":"","size":14.6118721461187}},"hoverformat":".2f"},"shapes":[{"type":"rect","fillcolor":null,"line":{"color":null,"width":0,"linetype":[]},"yref":"paper","xref":"paper","x0":0,"x1":1,"y0":0,"y1":1}],"showlegend":false,"legend":{"bgcolor":"rgba(255,255,255,1)","bordercolor":"transparent","borderwidth":1.88976377952756,"font":{"color":"rgba(0,0,0,1)","family":"","size":11.689497716895}},"hovermode":"closest","barmode":"relative"},"config":{"doubleClick":"reset","modeBarButtonsToAdd":["hoverclosest","hovercompare"],"showSendToCloud":false},"source":"A","attrs":{"f33049db55ae":{"x":{},"y":{},"size":{},"label":{},"type":"scatter"},"f33029f22f36":{"x":{},"y":{},"size":{},"label":{}},"f33056cf2809":{"xintercept":{}},"f3307598338d":{"yintercept":{}}},"cur_data":"f33049db55ae","visdat":{"f33049db55ae":["function (y) ","x"],"f33029f22f36":["function (y) ","x"],"f33056cf2809":["function (y) ","x"],"f3307598338d":["function (y) ","x"]},"highlight":{"on":"plotly_click","persistent":false,"dynamic":false,"selectize":false,"opacityDim":0.2,"selected":{"opacity":1},"debounce":0},"shinyEvents":["plotly_hover","plotly_click","plotly_selected","plotly_relayout","plotly_brushed","plotly_brushing","plotly_clickannotation","plotly_doubleclick","plotly_deselect","plotly_afterplot","plotly_sunburstclick"],"base_url":"https://plot.ly"},"evals":[],"jsHooks":[]}</script>
<div class="sourceCode" id="cb34"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Bind and save scatter plots / 散布図の統合と保存</span></span>
<span id="cb34-2"><a href="#cb34-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb34-3"><a href="#cb34-3" aria-hidden="true" tabindex="-1"></a><span class="do">## bind and save graphs </span></span>
<span id="cb34-4"><a href="#cb34-4" aria-hidden="true" tabindex="-1"></a>graph_unemp_suicide_bind <span class="ot">&lt;-</span>　(g_unemploy_shock <span class="sc">+</span> graph_unemp_suicide_rate_total) <span class="sc">/</span> (graph_unemp_suicide_rate_female <span class="sc">+</span>  graph_unemp_suicide_rate_male)</span>
<span id="cb34-5"><a href="#cb34-5" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb34-6"><a href="#cb34-6" aria-hidden="true" tabindex="-1"></a>graph_unemp_suicide_bind </span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;
## `geom_smooth()` using formula &#39;y ~ x&#39;
## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<pre><code>## Warning: Removed 1 rows containing non-finite values (stat_smooth).</code></pre>
<pre><code>## Warning: Removed 1 rows containing missing values (geom_point).</code></pre>
<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAPACAIAAAB7BESOAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nOzdb2wbZ54n+K9mN96d2EjiS8eaG4oXlSF5ZrzCpZHuNiFqNesa7CAjZYbtG9A6nIFj0o2MZM4bisDaL5oBVi9S+0I5gOKLaUrqRndcs9AuZKKh5nRLl5tDP2loRIHqtNEZMJ5JJLjUINnXsjdQEsjpgb2zvhf1h0Wy+FeUKErfDwLEIqueelii6qlfPX9+XU+ePAERERERERERHW2/1e4KEBEREREREVFtDOCJiIiIiIiIOgADeCIiIiIiIqIOwACeiIiIiIiIqAMwgCciIiIiIiLqAAzgiYiIiIiIiDoAA3giIiIiIiKiDsAAnoiIiIiIiKgDMIAnIiIiIiIi6gAM4ImIiIiIiIg6AAN4IiIiIiIiog7AAJ6IiIiIiIioAzCAJyIiIiIiIuoADOCJiIiIiIiIOgADeCIiIiIiIqIOwACeiIiIiIiIqAMwgCciIiIiIiLqAAzgiYiIiIiIiDoAA3giIiIiIiKiDsAAnoiIiIiIiKgDMIAnIiIiIiIi6gAM4ImIiIiIiIg6AAN4IiIiIiIiog7AAJ6IiIiIiIioAzCAJyIiIiIiIuoADOCJiIiIiIiIOgADeCIiIiIiIqIOwACeiIiIiIiIqAMwgKfWW5no6urqGopt7bOcrdhQV1dX18TKfqvSqP0c8cBZH2n/J5gOT0f82oy/uKNdSaKToKwZtf46G26g9tWSNteGHtGG9OhfhltYwyaLOvrniIjAAJ5abis2NDoPeGduhfr2WVRf6NaMF5gfZUNCB2FrJTYxxC8XER0tLWxG0eEtKa/SRETlGMBTS23FXptMARh/sxX3HegLvTkOIDX5Gttvaqmt2FBX/+jkfKrdFSEismtxM4qObUl5lSYicsYAnlrIuu9YnhtpUZEjc8stufHwzmw+qVvLak9H1uZd3hQS0ZFzAM0o9tGSjsw5t5KbM15ji/Hlg2pIT+BV2jrda/t+eNPCoojoyGEATy1j3nd4Z260MgAeuTHjRef1HRARETXkgJpRsCUlIjpGGMBTq6y8PZkCWjnsz2CM/kNq8u0jtyYOERFRaxxYMwq2pERExwcDeGqNrdhb8wCA8SutH38+cmUcADD/FrsOiIjoODrQZhRsSYmIjgsG8NQSZr9BrXF/Wyux2MTQkD3VzNDQRGxlq/rthDH4rz1dB2ZWFXMhXH1V3OLq27cvfr9raGjC6eOV5QTaWqljr9q2tlYmhuxnuLyCxR+rarIYayMrIdDBnI3KO1Ssv1P1yg9Wvqtx4kfnjZ9Tk/1NJc3Rj2X/Kg/V81Wu8DGrfUpzj3p/s9WPVO9uDgXFCqVMNFUCEVVWbzOq2ypqMuq7+LS1JUX9F7FGrtJN3lQ0XPXGLvg129cKWQFr71f39bx6UVtlTXfd1/QmmpR9NpdEVK7+hb2IKlrWn+tXXSpuc3ncW+Wb6K24Eo6+t7liTvXNKlWssUXsnMvwzmzaFu4pqb1RfMUPWXb84iWArHqWnpTyalf5SJVqZ5zfzboLKtukcNYP5mw8qb69Y/1L6ld53+KjVTxJ9X9FanyVHetqP9uVz4vTh6xa6Wo7PXmyOVPlhDp8XOsw1b9blQ9IRM2q0YwWNRkVr70OTYZzKY21pDWq09gOtS9idV6lG76paO6GYL8X/Bqno6iW1fZr8HpeuaiqLXPVmjfcRjd39oioJgbw1AIOcV7FTapdyKu1qXUco9peLQngZ6p9iPHlzaofsqQGtuZ7psqNTXnNK32kOs5wpSpUOjlO5/xgzsaT6rd35dUoPRfe6rcItqPtO4Cv56tcXtdmqlr/AatG4/XvVekbYSuqxoM2ImpOrSbO1mSMV70kVL+SNdeSVq1OHQU1eBGr6yrdxE1FMzcE+73gtyiAb/x6XqGoGgUVvlxVeh3qPg1Nnj0iqokBPO1f7TsC20XcO768aWsWNpdtD5VbH8G3MoC3PsCM9cB4c9nWohmBmf0DFr1fXPGyttC2X0kXbXHdnT+SvZJFNaxWVPUI3vkG42DORtHpKPqKFH+A6g8t7JUpee7foq6Y0lh2s+h0Fp+AFlW1qd9s6QmtdLB6HunYP3Hzf0VEVE3NBq68yah4DTmAZ+FVqlO7nCYvYlWv0k3dVDR+2d/3Bb81AXwz13PHooq+RSXNc0lPeeXHuHW30c2ePSKqiQE87VvNjlxbU+vc1NfVqtY+TNUj163qI+Ra/aNV36/UssFxULK9B9sxgrYVVyPGqlRU1XNa6/6ipWej7m9IQ5WpdLSitxq7c6h511ppgyar2uxvtsonLyq11hOd5TofrxHRftRu30qbjPINKl0NGj1SYxWuGcA3exGrepVu7qai4cv+/i/4LQngm7qe17hVcBq5XhzeOz8OaKCNbvrsEVFNXMSO9mvrx4sp/V8DF5wT36wsGUvRVFqbx1wbt6q+CwP6P1KLP27XwidOuX1slffO3Kr6fsVil+dGyvbrG5mzmsT5paorDplrH1WoQeWi+l4d09vP8nNa+LVWXBC5ZWfDWnsZ48tzzt8Q6wNUOhWOaZcKR0vd3XTcrXkZ54r0hdaMi6vzJ0FDVW32N2v9yTkfzMwnVeOPaWViaHQ+ZRx+c631ea2ICEA9zWgRxwtlnU3GYbekTTdPVQttyU1FI5q/4O9fa67nsP8uHG860Be65TxMfr9tdDvPHtHxxACeWsZ7sd/5jZE54xpdMwSoGmb1X6w5AeuA1crt43zrZdW7wqervORw4R4k83GVZnnr44xZwYrJgwtF1RfB1xO/t+xsbN6tdSzbB3A+FRX2bPl3xrr5RWp+tKtraGIittLgSroNVLXZ32zNu9s6/iYZvRMdvorNqH2b/TUZh9uS7qN5qqJFNxU1teCCv3+tuJ4DKPpdVGpqCw8DijTXRh+Js0d0TDGAp/2yruwN2tra2lpZicUmJoYK2WLq0kyLXP9owcpPgmvdWtVz6+WgSo9LrdhfZ/0GqlWgwp1dhQi+jvi9dWejcFcxP9pVkfkdcTwVTZ76Jph5mIzKzM9Pjo7295u5dOrIz9ZIVffzmwVQZ2+eg9Rkvxm9o61jXohOhIaa0X03Gah/m33b90WsAc3fVFSu2X4v+K3U7PXcVNfvovqj5Mba6CN19oiOFwbwdHi2inKB9vf394+OTk7Ozzf3AOC4qNaUFh5gHxjrgbs9SrPi9/oSEh+ufd3h7V9faM15Md5Uan5ycrS/q6ur2UTrrVK422qR1ORrFZISE9Eha3OTcaQc/E1F+y/4Lb+eV38S0IKvUKGNbv/ZIzquGMDTodhamRjq6u8fnZxPpU52vN6QA2i5y5mdH4UIvhC/j73KkdPl+kJrTov2WlLzk6P9Qx0f8tpzAjOEJ+oAh9JkHA2Hd1NxQi74B4Rnj+hAMICnQ7AyYR+QCwDwer3e8fHxmZnl5c3NZhaLPzYOZRij/cau7OF7aQTfvvi9rpVoj8h07L6R0Nzakyd6OpyZ8bL07ocW8lb5zTbPO778ZC3UZ1uZiCE80ZFwSE3GYWr8InboNxVH5oLfCtWGsVV/BtRkG32szh7RkcAAnvar5oo4hfVLbalA19bW1ubm5kKhkZG+RqOOw5vwfCiqtKV1TVmrb9pjtTmWxRH8ocfvhSF7bR4d35y+vpFQaG5tTb89seW23f/U8SZ/s/Wc0K2YMeq0a8Jh1SjvmDV1giE80YFraGG5fTcZqH+bfdt38+Sk5TcVDWjRBb/+j7z/67mp6d9F69roA2wuiU4WBvC0X4WkNBXahMItxcytOceWtZAkpZpmV8s76io2XIWblOqhtLUQHebfqhRh2fLQOKxKZ4/g29D/XritqNyGWzcobR1rV/M2qW8ktNa6rp9mf7PWklCpybed61nHKoUWhvBEB6xmM2q3zybjcFvS/TdPDlp1U1FLCy74FX6hjcx1aNn1vLHfhV1TbfQhN5dEJwsDeNo369Lu/Gy2VkO1FRuqa71Yq5xjNzHbOSzair1mpc+t8YkLzXKFolYmRqvfINki+B/fPfTx87Xqbz8Z7f3t13MD1MpZqM3+Zm1pmRzraUsHXM8NM0N4ooNVoxkttq8m47Bb0v03T+W7tOimoqbmL/iFIRVOmfFsv6p6tOx63sjvoqEdHdvow24uiU4UBvC0bzX6DmypQCdfm7AnAd3SV6GpsyGznrm3cKbvUZGa7Lcvxbq1tTIxVDgvldPnmmy5Wx2LstrkynlkjXQvqclJfdtDDZSL6981ZP+abK3EbCej9rmoUz09Ck41td3H6CfavnPxL64VdW32N1tI31OyG7ZWYoUUS3VnGWAIT3SQGuqCN/6sC1ef4qtk9UvPobekzTdPla7SrbqpqKPuzV7wbWu5z48OTcQq/arq07Lred2/i+o71tlGH3ZzSXSi1Jkbm6gKaxCU8wInzmlEHFVO117jGLX2akxRNawyKlSu1vuFj2+veuHVsvVcqp+RSoer46NWPrtPSn9LFTc9mLNRdnxnpb/7WgerfDSnw9X5zarz61zp19N4VZv8zdauZ9le1i61ymvoj5CIaqvVxNmuEOPVLglVL/PNtqRVq1NHQc1dxCpfpZu8qah5Ga76QRurfo39xmfM94vOX8UaNn49r1RU9ZK84+OVWoFm2uhmzx4R1cAeeGoBa4CX02AxoC90q9pF3Du+bC1lUrH3wZqYVecYuw4y8ObasnOGFe/4zGbda66PzD2pUIxR1nL1sgoPy9GWp+F9obXNiplmoH+Audb97m0dCqY6l+epVVHUcbIb0uRvti+0tlllP28D3y2jvMKf8fxotaWSiKhhNZpRuytzleKimn/WbWpJm7uIVb5Kt+Kmok7NXvD7QpUadnjHl5/Mvdp4NVpzPa+Ymx3wji+v3bhYdccG2+hDby6JTgoG8NQKtW49+kJreiJQ23Xc6/WOzyxvbj5ZmxsZKcyVci7gGMfvADAyt1aUJ9U4NWtzjbVqI3PmaS6cZ+M0P1mbG6k1Dr8QwbfpLPeF5tY2S78nqPsDNGhkbnO5+Eio90bPVtGi/W1f6VbXtanfbF9hv9JKNpONjyE80cFpIILXwzn7H3adf9ZtbEmbuohVvkrv+6aiAc1e8Efm1jY3l+176XusNfcounXX877Q2pPN4jPr9Y7XUbFm2uhDby6JToSuJ0+etLsOdBxsxYzJTOPLT1rYT2pYmdBneTXca3h0WSfsYM5YM8yzfHRqRER0YhxsM4pj2ZISEZ1E7IGn1rDGuu3/aXcZKzcOlzk5SMd8lAMR0ZF2kM0o2JISER0bDOCpVcx1UisnDGmSmeK07hWzqQnWvR1PMxFRWxxYMwq2pERExwcDeGoZc4ZsavLtVvYeGClOvTO32GlwULZWJo5GnnUiohPsgJpRsCUlIjpGGMBTC5n3Hi1c4Gplwpiyx5uOltuKDXXp+kfnmYyViKjtDqAZBVtSIqJjhQE8tZR179GaAYDGuG7edByIvgsDxS94Z1qZqI2IiBrW4mYUbEmJiI4ZBvDUYsa9R2rytX3fe2zFXptM8abj4PRfsTLXeZmLlYjoSGhhMwq2pERExw7TyBERERERERF1APbAExEREREREXUABvBEREREREREHYABPBEREREREVEHYABPRERERERE1AEYwBMRERERERF1AAbwREREdGRtbbUoHzoREdExwACeiIiIjpatldjE0FBXV1dXV39//8QKAKxMdA1NxFYYzhMR0UnGAJ6IiIiOjq2ViaH+0cn5VKrsrdT85Gj/kB7PExERnUQM4ImIiOioWJnoH51PAYB3fHxm3Ft4p/+i1wsAqfnRoRj74YmI6GRiAE9ERERHw8rE6DwAjC9vPlmbmwtdGSi81xdaW9tcHvcCSE2+zV54IiI6kRjA15DPpxPRUMhnCYWiiXTeactEyOfzhRJO79W3ARER0Um2sjQPwDuzOTfS57hB38jcrRkvgPklRvBERHQSMYCvIp8I+YJBRRWaVnhR04SqBH2hKANxIiKiFtr6OAPAO/aqc/Su63t1jBE8ERGdWP+y3RU4stLRkCI0AJIcuDY26HG5AAD5fHp9cUEVmlCD24jH/K66S3T5Y0n/AdWWiIio023eTQEYuFAtfgf6LgwA5QvcERERnQQM4J2lo4rQAClQGqK7XB5/2DPojU4rQlODUXcy7GlXJdvuRz/6UburQEREB+hP//RP212FY6urqwvAkydP2l0ROj6EEABkWW53RYjoADGAd5JPLAgAcqRSB7vLE74Z2A6qmlhIjHkq9sLnE6GgqpmPAfSfrGcC6ahPEZAjyTFEpxeMYfqSHLg25vcUF5hPJxYXVgsD+SVJHra20ospetJgHFaOFB4ulBy7RpkNaO29naZpkiS1sMCDw6oekGvXrrW7CkTHxMLCgv3HRi8F7XhE23/RC6Tml1bmRkYqb2VMlL/Yf2j1IiIiOjI4B95Bfn1VA6TAWLW+dZf/mgxAW12vMBfejN4rPwYAgO2FUFApxNGaUJVgNG3bIB0NOU/DN7byeGUAWjZXeD+X1QBgO2vVTP9E6HW76iqTiIjo8NUzvX0r9tY8UHugPRER0bHEAL5cSbRbkRE6O0fw6WhQ1QA5Eqs+xF7TNMiReDKZTCbjEVkCAJGy4mhrKL+xibEZAIgFfRm9HreEomg9nRJ60YWgXg/pZa+nzjKJiIgOnxnBjw5NrDhket9amRjqn0wB8M7cqNJHT0REdGwd6yH0ZePG7axF6uwjzQGY0a7k7qlVfo9bAjQtmwNKxrwnQooApEC89gR5KRAPGwPXXZ7wNVkoAtvZPDwumLG4FLhpH9vu8owFJKGaB3YNDkuqrRb57DYgSZKmlRRjxu91lFmu0lhKzd6N3wotL/DgsKpEdJSV/+F3wKWgL3RrZrF/MpWaH+2fh9frBQBk3pqYeCsznzJXrvPO3Aqx/52IiE6kYx3AV5ZPVIreLTU74CvSO98rPDeocZySZwKecDIZtiqdz+dy69lUdlUI+z2YHsGLVDrs8ZjjB+ThYWiqUUw+u43CE4m6yizjONf9Rz/6UWsnV3fQbG1WlYiOuJI//EYvBR9++GGra1SXvtDaJiZem5xPASkjZE+l5gurzntnNtcYvhMR0Ul1EgN4Y3J6tegdKPSCN0ZTg0oj29fu6M+no9NK1eja5e4FzP72XFYDZK/fDdX4DMaU/uHBwqepXSYREVF79IXm1l69sfLjt99azKQK3e5e78DYmzdCIwzeiYjoBDtxAXwd0XvFkfGlKoy1l2QZQmjqdGKwkTTx1asLAJIk9fYOu72Dg9npwqvQZ+MLkc0BrnRK6FXqcUsQ2RyA0vi9vjKJ2kJRlE4ZL9BZQxs6qLasKgFAX99IaG4kdJiHTEd9iqj6aL90Y4fX692fiIioOScrgM8bS8tVbGDN5GoAIBSfKEuuZs/99h9jAgA0dTqKa2N+I4yXI7GwJ+/eDqqaeuMNde++sackXTr7RfkRv/g7xafmAECSIzfDT2XyALD9iV6dxLSqARiQLz3c3tB0EKs/Of+pVYBeo7Nn9TEDPdltoOfsT4I+Fd3G0nb6mvT/d9CnSoF4bHC9dplEbROJRNpdBaIjpCQV3HG3FZt4+y4u3pirOkR+Kzbx9mImM3arpSPp01HHgLwCfW4aERHRoTtJAXw6GlT09O7O0bu1rF2BpglNEdnSHbYXQkHbUkCaUBWRvR4AzP74XPYhAFjROwBN23Dq3965Zy4VrwkluH3pvP1NvYv/FDJio6hWuXuFH/Te992z3bi3up53ZzVg4FEuB+CJBC2bS2cFAOnhfU2fb19PmURERIdv8+78/DzGr8yhWmTedwHzqRQGNlF1swbkzRuEuhnJXdjdTkREh+3EpJEzB7vJkQorwxcnV9OzqqG7G3BIrqZpGs4AenFm7rc7WXtR96FvIQXi9jxtwKefG1t9sq3/v8dI5xaPyJK2ce9RWc0elaZ8u9qtv/GLD/Mw08jtPQ1o2cWUALq/yAAA7nd1YzuV2gYwcPo+rGXo6yiTiIjoiNr6ONO6wvLpRDTUYPRu5XOpna6GiIioxU5GD3w6GjIaZ8nd4zwrvSS5miccD2wHVW0HAKD94wfmfPiH5g57gCRHwh4XPHrut1999ri4qP/w0k+mljQ15FPtQflvfqX/P//RAwA4I0eMEfouT/hmYDOo5grb9uCMfqBXBo1R/Pl0Ylq5rdcKjz8DzEXotdMDgBACePbze5/h1NmeR7t7T+O+EAC6v8jsmPF7XWWWYxq5cqwqER201v7xHr1LwcpE1+h86Yvzo11lr5XzXuzf9+GtNWEkOXLTm6o7jjeSu9gXhyUiIjocJyCAN9aFlyRJ07SKS8uVJ1fD8KXzDzbu7QHAxqzPN1u0vSQHboaNcvRV73KfPrYVlU+EjFi8pEv9nzaCoWjg5hg+3AOA59y291z+Pz2vzhbGsrvCIVkoAtps0H74U0ahew9sieAzX3QDOwB+6zGAU9JXXbtLXfpLPa5HuR2zp6C+MsswjVwJVpWIDkEL/3iPZBq5kbnl8fnyEL4O42+2aAK8JAf0tW7SqdobG3JZDZCG3blEdFrV595JknztZriJ5DVEREQNOQEBPAA9KTsSoaCqaWow6q60hF2l5Gp6p7Xl3JV47JtVWul09C8VkXN+718AmlCDHxp3UU8Vv/s7z50qCvk94fh1TH1P7NgfA1j/fqBnjtPTyD1y9WAnh+fx3z8Bnh74nd47+PBpAOg5dz+Xs/UU1FUmERHRwRu5sTyOJeOHTGY+lYLXOz4wUGWXixevvPpqS5LJufyxpL/x3fQOeE1VbGljNU0owWpr2H/1q18teeUrX/nKz3/+88YPT0REJ9qJCODliN7n7r8ZWA2qGoQS9ZY1sVWTq33NbJL1qfSnn3E6zItvJGc8ANJvBW3Re2lRf3g9gncVoY9jNGtm6R5w4Y4mDb9k1Wp6VuxUKEp+w9hZX8ju2deSSU/6LZ/yCXAKv+OWIHojyVhPIhRUi9PI1VMmUVswjdwB6aDasqonTN/I3NyI8e+VifnRFAbeLLxyJOkr2BnZYzwuAPl8YnFaFZpQQu74vjPIEhERVXYCAngpMGbG6i5/LJL1KQJlTayZsE2OxItGwOWzaFD+e9/Wl3evVNTznvDNwLb+sGDT1t2dT0enF/TAXlODoVWp99pr7oXSWuXTiUVzmEAh0d2gWzLTyOlT7J9Ct7vXnkZOU4MhxGN+Vz2p6Yjahmnk6CQ4Ycnh6td/cXx8HC2Y3H6gjBRyciRmdQW4XP5wzA2fIrTV9bzfKYJ///33S17p6uo60HoSEdGxdAIC+GKecESfAl48GV5/nC4FxkpGj5uP2euWX0/tAkBPtaJc/muXVGUDeGguSV/U/w8AmqZpyhRQVKvKie6uBySoq+t5d9bq+/d4ZYhsbnlVAMA5s7OfaeSIiOho6gvNzbW7DrVVGnivj4arGMETERG1wolJI1fgCccDEgBNDUbTNbbVF5Q3erLrkV9f1XO/P1X6TnFRnj++BAC7S99Pp6M+ny+oaoAUuHoJACAF4vFIwByX+cXfBX0+XzRtJbozttI3kwFAvJt9wUojd8rYr8ct4e53ZzUA3Ve/WzxlgGnkiIjoiNuqaCU2MRRbaXf9SulpXbVshTVwiIiIWuDE9cADgKt8Mry+kLymLqYHjcHq+XRiWlEbzbhjdbPXKqrn93uwkQM2lO+eN176l5/+P7cLnfQefyw5mAgFVW1H7xv/OCUAnHv5sXq70Hfu8owFJKFqGl6UsSGEAM6exu4jAHA9DezsAEDPK39UODDTyLUKq0pEzWnXn2RnXAq2VmJvvzU5X3NN+PErh1GbxjE7PBERHaQTGcA7hPAu/zVZVQSEErRngZUCkeFVRdW0rHNytQq6gZ2aRZl99Dvm2PX/vvvrfz1w6UuZDevZvVkrABC3BQDcv5ODFIi89BNlKaet/lV0NWOMqX/eLQEagOeewi4ApKOzxp2a9Ee2VLVMI9carCoRNa0tf5JHMo1cuZWJ/vrSynkvHnRVKjDmvDksOK8/w+91c/w8EREdnBM4hF7n8seM0edKKJEH4AnHIwHZureRJDkST8b8Hncv0MAYegDA01eu11nUpatyt23Hf9Kjd+1vvp9IpM1a2bbo6e4+B2iqspQDAC1TmBH//OCwBAA9Z08B0NSgYj4+sC1AD+hlXpe7T6FIURo5IiKiNtiKvWVG717v+Pj4uNdb+m8A3vHlzSdroTatVO/SG3ORKpmFl08sCACyt0IeOSIiolY41j3wNRK8esLJZNi+uccf9vjDVbcq3af0OHl9KP5nz8fCsapFGavm/f4fhf/4vwlFQL5+fft7s5oRR+9uqOqGquoparwXIXYgR+LuBVuiu55uPH706c7urv6z+M60/CeReMyDRCh4BwCkgW4tswP0vPT0YsgnNACSHLgZ9sOeRs7U03P+Ye7eLtPIEdGJ0JJ14Dm8pdW2fryYAgDvzOZaqA8AtmKZ/lQqNXBlbW4EmMNWbKh/MjX/1o9vjIRakQm+GcbcNaGEYKWRS0enjWVqxhi/ExHRQTqxPfAHxKX3g9fssE//rQAA7R+t4fLPj8ZigXMAgDPne4w7Qk0o04lPAAAPU1aiu2QyIiO3o1nROwDc14SqFJblkyOxr+vDC3NLs1Y/vXvQSiNXIpe7t1v+KhER0aHZvJsC4J25ZQXnfa+OeQFkPt4yfg6tLY8Dqcm3D20Ju3wi5PP5fPpoPQD6NDwJgCaUoM/n8/l8QT1FjBy5yYfgRER0sBjAt5gewWvqYrUF7vOJBWMdug0l+vFD89VcVl/Bfu9Lr8WSSWMdem31o4cA8MUDK9GdtRy9EcsDwKWr+oSAhXc/B8rW0LkUSSaTyWTM7yoss1e8Cn1kQH91+5P9ngEiIqJ9GLhg61vvuzAAIHV303pl5Mo4gPmldi5C7/LHkvGILJVMlgt7GL4TEdEB6/Ah9OmoTxFOK8kU3gQqvF91X0f6wlVF99wAACAASURBVDVSIB6r8oTdWHjOPrSupJR0VO8DHxhAJgOhrykvFJ8+Z/3sWexuKNF0MuwZHJZUhyWD9YR0UuCm3+NCelHf7cFv/zt9OfpffVYynvMMsLexkMh7jEo/0A9z5abfVjkXntb/8eCjPEYdPh1XoS/HqhJ1rlb9UXTWH1dn1bZI5uMtjBhx/ciVcczP219pCcc5cqg8Hc/lCcc8TjsQEREdoA4P4D1eGUKIVDrsKYvCzcTrgOP7Rhh8ANlePOF4YDuoakIJbsuBa2ODHpeRry2fXl9cUI3p6JH/FO5JJxYX3hWaOSH9zMtX/8PUhZ/6FCGUt74UeHBbA9D7pdMagKdfMBPdxY17jHw6EbKy0z34mynVcQy89O+vYGlJU6cTgzG/C+h5WUJGw+5nuTxcrnw+n/tgceU/izt71T8UV6EvwaoSdbSW/FF01h9XJ6xC33/RC6SKQ3P9tdTdTaAoXC9/hYiI6ATo8ADeyN++nc2jtK/bCNAlSdOc3s9nt1G+QHuLuPyxOKLTqtCEqgi19G19LTkXAI8/7HHDpwic78a9nb07t6d8xkYbt1UAkhwJX0gJAKe912RRnujOtFdxBvszr9wMfBBUNXUx7a+cMM8qp0IaOSIiogPWd2EASKUWf7wVKsyCvzAApOxd8FsfZ9pXRSIiovbq9ADepQ8zL0/TbsTvw9eGoWja6nreXzTsPb++qh1Y/A4ALn84NjiWXl9cWBXWmEVJkoevjfmd5si9+Eb8/8gWbQycladi4ZeRTuk/esLxiNvswbdI0rkvtPs76Lly5amlpfLRkb1ul8tjjOrXc973uHsAa/E8nDrTPfTv3xh7Jfsfg+p9PY0cJ/FR2yiK0ildmse797WNOqiq1HIjN2a885Opyf6huzNv3giN9MHqgrei+pW3J1MAvBf721xZIiKiNuj0AN6I4MsGyZvx+6BnEJJaFsE7xu/5dKLecLuwTyIUVDUUzYuvUU466gsKlM2k/2R9QRWaNSc/HfUpQvxfr23u7eqxtlBC2/LwtbFY3B0KqhogR65DmRVa718kYz2J6LSqR++/xM1k0gUgH72r7+fblgLX4smwMY4/Ma3mAAzIlx5ub2gaHu3tiCVl+/3zjwEwjRy1WSQSaXcV6BhqSdI4Ogx9oTfHJ0fnkZqfHJ2/u/xkbsR8KTXZ3zXp9SKlP9T2jr3K8fNERHQCdf4q9C53L8ryttkGyBvLwmdz9vf1pdh73YVYNR0NBRXV3v8NrTgxWzkzepcjhVi8djker4yyCuHhR6saANlrPYY4B8CM3u3l/CRrLkf/vP56NhEKFrrld0QwlMino76gletd01Rl2sx/o3/0U8iIjaJKMo0cERG138jck82ZcW/RSzeWx/V/GdF7UaY5IiKik6TzA3g9INZW120RvN7BbgToeoQvUrZAXO+ftwXLRYnZrMxqRmK2hHNO93TU6AiPhRsrR4/giypkZokzq5SOKuI+cAawllqSrxvl/HS7uB5CVSFHjKMAADQ1qAhJvnoJAC5d1bPRFSe2e1Rayavd+hu/+LBGBnsiIqID1ReaW3vyZHP5hjlIvm9kbnNzedzr9Xq93vGZ5c01hu9ERHRCdfwQephL0dumwRvxuxkN6+/bFrLT++dlr8dMJXdVtiVmM7k8Y3piNjUYdZfmmssnQooApEDc/oaV4G0wO+1TjIRzVjlWDY218xXfdiAeM3LTPMjYamyW8/a1bFAxe/OfN8q539UN7GjqYvq6edzPP7sVVIy++lNGdH4z7F4UAE5f8L/YrWo7+FkqD48LPTgD7AHSK4Pm6UgnppXbRnf948+cTzLTyJVjVYk6xcH9CXTWH1dn1bavKElcX9/I3NpI2ypDRER0RByHAF5fir4wDb4kfjeXqremwevvy14PYHRKX7Anf83n87ncejaVXRWiwq2O3vlenhDeSiKbTwDA4+wHicSiQzke7yWIDeBh4aUde40LyWjzAUnomeLu/jAUzGgA8OIfyvduCwhl1tz5kzs5SIHI8Kqiao8AY/JA8Rh9kysckoUioM0GfbOFl/W4v/Iq9EwjV4JVJeogB/Qn0Fl/XJ2QRg4rE11vwVq+joiIiEodiwBeX8jO7GIvi9/NpeqNCN5YwK40AXw+HZ1WKkXsdpoaVKq8bSsnJ2bLUsjpPC9L2NDwRdb+oq3GDvXZyVj/vlC8HP3ZHvkvI2GPC+ksUMcH8ITj1zH1PbHzyPai9W+uQk9ERO2xsjSPFCaXrjCAJyIicnYsAng9QleNAF1fpa0oGna5ewFzDHsu67AAvb4cnU6SpN7eYbd3cDA7XXjVTpJlCKGp04nB4j74onJw6uyloT/7fcdyXuo9A21vb/sDYDQckYUiimpcqz4ujz/s8Xv1CQB/+W1jGL8nnEzqr1k/hgHgr79bdOx8YnrWWuCutHCuQk/txTRyB6SDattBVaWDMX6FQ+WJiIgqOB4BvB6h69PgyxaoA6xZ56l02IOUKI3fH6amVQ2AHImH7Z3P+aIOcosciY3he79c0+5patCnApIcuDbm97jyCbOcKffClKq5/uwbYb/LKudnis9njbt3Pw3s4dNf54GcXuPfy4Z8igYpEL8Jqxxv9qcLq0ITmgahqjgFFA28B/Q8caWD+R/8TdCnAoAkR26GizY3K3np6pXT7y8JTdM0TcN29vPex3WebKIDxDRyVD8mhzt29JTvmY+3wB54IiIiR8dgFXoAxsruIpU2138rHSCvr/y+nc2ny+N3YwV4KTBWMnRc78svJeFvQ0Fl6V5hALomVCUYiqZzVoK3bqdy9ooSzp0GgN331/NGyrsPZ62MdEY58sOFqZKMdI8AYOOHlTPbAQ8AYM9MCacJJRj9h/LKnDm7cXvJNkBfE0vCec48ERHR4eh7dcwLpCZfi61stbsuRERER9Ix6YE3+ti3swkIlAXogLmQXXY9u43iBPCV6c8CgJI+77zYeARIcuDm72WDswLSleu9H8wKTSjfcR70mf6hXs4Z+WbJWvZAbnVxERoA7X5JRjo8EBt7gBSImGvjp83R8ZlbibzHeaR7+ocZADh1/npsZtQF5NPRoGKNly/Y29U/wpjf5QKQT3/rhpLZg55GjlPgiYioHfpevbWM10YnJ0f7J+H1egcGBipue/HGHJPJERHRiXNsAnj0uCWI1VXAMX43FrITqoqy8fXIZADAGA9f0yNYoXY+8K5QtaV3h+MROaiI+9oZYE9TF9Pn3QDwODPlUwvB854I+kRpaZowXrJlpNMfNuwB6DEy2+XTiWmlMI0+94PFvD/sEGanUxkAwLl/+5L+rssTjgc+DKr3rU16nj0L7ALdV2+G9YcA+XRiWo/eAez+/QeOq9AzjVw5VpWovY7CF/so1KF+R762KxP9o/PWT6lUKpVKVdx4/MocGMATEdFJc3wCeH0hO618gTrzfXevsUZ7afxe2xfmP4xp4mYJLv/NwGpQ1dRFRGQIgacl7GkQyhQAIHenvOvb2dkr9knsLv81WVUEgJz9ocLZ8wO4l9l1LEBnjRl4yvaia/DfnFHv71k/P6O/uXM76Ltd2EoKRHp/oIg93P8oj9Hy88c0ciVYVaK2a/sXu7P+uDoijRwRERFVd1zmwEOP4IFK8bs5Dd4pfpcjyWQ8EpCtGxtJkiPxZDKZjOhj9774xHhDD+B7CjPsXf5rMgChpL4kA7jfe91ejlWefMn2PzmSTMYDRRudfqakruF4JCCXzOPfLUTv/8PpA1bi+tJp20+57H0AZyWrcP3Dxvweby8A7P3yg0YKJyIiapGRuSf1m+Na9UREdAIdnx54wOWPJf1V3rfSqjnu7PGHPf7Stz1fl5ERePF54wBvyKoi0G+fQm+Wmo4KAHje4w97/GNmGjgj4Zx4EIgn/a50tHwMPXAKyJVlpHP1YLuwqlwh2duH3wou7RrPXTzhZNxtyzenL4cHOZIsnmt/4SKwg695bcV/+dq3y+bjF39YIqK26KBUgkRERESH7DgF8IdmO1vnQm9yJBb25N3bQVVTF9NljweAM8CeNHoFS0v6Bh7k04nFBdVaH75bvj4Vto1ozzuOaMyrQZ8qBeLXegENQgm5S9LKAYBQfIiYTzC2s3fS2Z8WDiTJgWtj7jo+EhEREREREbXHMRpCfxh63BIALVuecc0pfZ3+kzXKPlqe/W0PkK9985vmBn8dDQUV1ZbdDTtiNhiy7Zj7Vckc+M8/BfAIPbYEdaUVzGc39X/IXo/1EX4wVXQgTahKMOaYgY+IiIiIiIiOAgbwDTHm2YtUaSxuLB9n5KdLf1/VUFj7zhOOyADEQkrPR/dx1GeOe+8JjHkKG9wWGiDJgXg8IgNAj3xJAjShhBJ54zAbAIBHn+nL46W/v7QL4IwcCXtQmOZfVMH8+qoezg94PQBcgy+dBbBnHCiZTCaTyXhEloA9AHihrhR7REREREREdMg4hL4xejY6TSghmEnU8/nE4rQqAEiBsQrr23vGApJQNXFX/9HdDewA+NfyG0a3uWfsylmxtAucvx4LjwJ5twRoOXE6cl1WZoWmLi673e/aMskByCdCih7Pv+AuPg4g/sty2DMK5NPRaWOn7j+ouPh+HtlaH5xp5MqxqkQHpIO+sR1UVXRabYmIiKgcA/gGufyxSDakCE2oQWFPGy8VDWIv301POAcAuOB/45KqbADPurutLZ45DewC9z5KY9RjZZITyqz+tphVAEiB62f/6+ydR492f52OTqkael7uyd3JFR/n3aC6g3uzPp+x60A3MjvACxcAAPn1D3YBnAHKPsIZYA8PnCf4M41cCVaV6OB0yje2s/64mEaOiIjoGOAQ+sZ5wrGipHOQ5EAkHitb1b2YMRUewAOnt3PmtHVzrryeSa5wkDMDkXgy5n/p2VMAoM0qDuvZ68f5zvUBW9Ui11/Qh9u/YB5IAyD9+VT5RwjJcJ7gT0RERERERG13wnvgq2aWq7KBc9K5gtMAYI2Pt8qKyEIReKF0g3TUZ4TjxRngsqtCA+Srsrgt8LWve1zIp9/95SPr/VNA7s5TgXiy+Dj55/W+dABSr/eTjxQApYvT9bq7aw+bJyLav4WFhYa25zBvIiIiokpOeAB/NHi8MoQAihPU5ddXNQCy9wL06D4dDSn2FerxCAA09a/S/v9kRf35hC0xPDRrCH6Jn307KOzr2WtCVcS5bsdtiYiIiIiI6AjgEPqjwFo93j5+XR/rLnuREgB6PrulCA3oOX8WgBSIJ5PxiHwOADJKaNnYJ5/Ql6yT5AEAUmDq+vlTJcfqcfcA2Nt1WIX+/o71PhER0ZGwtbXV7ioQEREdGeyBr1M+nVhcWBXW0E5JkoevjfkdlnuzCMXnOE/dev2hVThgrEsvUumwxwOYielkL1IKADyVywGQIxH3QvCe3nfu8oS/G3ngUzLQ/nM0Pxp2WZ32kVgYUZERqz/9CI+KDw7X+XOnkHuE7quxsN960ROOXb3ru70DPP6N40fiKvTlWFWiejTx9eugb2wHVRUdVdutldjbby3Op1IAgPHlJ3MjWJnoegszb94IjfS1uXZERERtwwC+DsXD0nWaJjRFqJIcqbV6XW3pRUXsGP82E9TlUgLA+QcLSgZAz8uPc3cA2etBtmg2qefrl5DZwJ5QEmPfHlxf1axkdl4ZQggBoPs8du4VPsy9+48AYOd2KPrb9kx4t/UqPPXbeYCr0NfEqhLVqdGvXwd9YzuoquikVei3ViZeG51POb2Vmp8cnV8cX16bGznsWhERER0JDOBrsoalByI3Cz3u+XRicUEVmlCi3qRzCF+8Ih1grlYnR5LelE8R+kp2lm5gpzS7272MBkhy5BoUxViHrmTpOc8fy9gQQE5dTLuhAeh1uwCgxy0BGgBp8H/F0j3r+YO+3P2Zs9grSyPX3Y2dnVw25xTAExERHYKVif7ReQCAd3x8DJlJK5Tvv+j1IpVCan506OLmWoj98EREdAIxgK8lvahqgBSIF2d5d3n8YY8bPkWIhcSYp3IG+Lq9MICdzN6lq4HT76vmWnWSHLg25ve40lHACs0rEMoPB2w/ugaHJVXTIA1/+ZnVpdKNv/aXcW92caH4QO5UUNkp3ZLoUCmK0ildmse795WoPVYm9Oh9fHlzbqQPWJkoBPB9obW1V/Xe+dTk2ysh9sITEdEJxAC+hnx2G6gUO+vLx2ur63m/LYLPp1N3gcJc98J0eSMpXT7xhgCAh0Wj8zMZALj73wYXYm74FIFLVwOn319VglYn+dp/+Z73xjdjSXPqut6h3w0A0oCkZfQSfvGhvpL9TuYBAGjq1KelC9kB2x9+4P5su/Cztr2aWv/qw7LtiA5ZJBJpdxWolRrNIUcn3MrSPADvjB69O+gbmbs1k+mfTM0vrcyNMIInIqITh6vQ1+By9wKASKWd3vWEk8lk0t43n46GgoUZ7QAATROqEow6FlBm7+56Xn9ocGbjtiqKFhx6dG/JoZwdANAy1oa7S0oin476pu7sma88AvDp5/oPPW4JgLY0W1y4pgn19gZK88UTEREdlq2PMwC8Y69WGx3f9+qYF8D80kqLj56O+ny+OhtrAMgnoqGQzxCKJtL5FleIiIioHAP4WowUb0LRW+fqzXM6qggNOCcBgBwxU7QBgFhIOOzr8seSSX0DOZKMyMDO6uLiqgZgD5ACETPPW8Ac++pYTvfVeDKZTE7JZwEgpwYVccYoM35V33P37z/QjzjYewYAcM4qvFBJAC9UHadPRER0UDbvpgAMXKg+u73vwkDV95uTjiqOmWMqbu4L2h+EN/KonoiIqHkcQl+TJxyPYFoRmiZURV/0TZLk4WHv4KDHVRzs6qnfpMCf96qzVqPu8owFJKFqmrU63M7nem63DcXnAwCcAYCH5pB8YdxCdJ/XVCW4GojH/C5zRjsA7R8/AFxAPq+P1Afw7OAfuQDg5d87DaHnmNPj/3+H6PRtoya7v9aXl8891Hvm76+m1gd7jFXo11Ob+lbnX3ZeU59p5MqxqkQ1Nffd66BvbAdVFZ1W20OUT0eDDYbvit7eG6vb5tOJaUXVhBJyl6yYQ0RE1FoM4Ovg8oRj8bH0urXom6YJTROqCkkO3AwXmmpjjjvSURXAw0/S6UQ2lV0VonDL5JSSDnsAsKGEElPD5tLxgXjMvehT7gGf7+TTufVstvcctPsAsDHr880W7f8/PWP84/l+IGe9rKlTCiDJAw9EZs961fNmMpmOhhRRtgo9ALz4vPM5YBq5EqwqUT2a+O510De2g6qKzkgj13/RC9Sc3m5MlL/Y34pDmjllGtonsSAAyJGY33jm7fL4Y5GsTylbFYeIiKjFOIS+Ti6Xxx+OJZPJZDweiQRk/S5IE2qwZMJcPh0N6c/xN2YVRVXt0Xs66guqGnBWf25ySR9jn7x+SX9bU6d+crYHAKThQaR/+DMA0Jamgno590vr1K2vX1e6QD4Ac9U6SY7EY17sleyIHm8vZ7oTEdHRUs/09q3YW/NA7YH29cgnQkFFFRokOVKYSlZzr/VVDYDsLR6x5hkLSIC2us6p8EREdIDYA98wl8vj8ns8/rA55s6WR66of12SpN7eYbd3cDA7HVQ1PPihkgEgBaaGV6dUTQp8w2j7nz8NANI5aPdzdz4FIL30+XRQMcvpkaR+ezlWfvl01KfsOC6Q77IH9cbzhafMbvqqlSRqL6aROyCdVVs6sfpeHfNOplLzo0NYvlW+Ev2WnkQOgHfmRouWoDfztSKdqr0xACCXdYrfjVVvbfPliIiIDgAD+Or0TG1OndwAXJ5wRBaFEXP5xLSqAZAj8bDHtnk+CwDYzkAfcdedWHU4VO+fBzCranvA75x9f+kOgG5gB1IgEhtcj06rimoMdy9J9iYU37Zev3ziu+YUvs8/SISm9Unz57r1l4xeebOSA/Klh9sbmg5i9SfnP23qDBG1FNPIdQQmh6OD0he6NbPYP5lKzY/2z8Pr9QIAMm9NTLyVmU+ZIbZ35lZo//3v+kKy/tqbFdMzxTilbOlxS4C2ndWTuZb46le/WvLKV77ylZ///OeNHp6IiE44DqGvzki6ls3V3BLmQ3kpMFbScuuv68vKjTmvEQcAzw++cgkA5OFncwAk+UUAQHYxFCyanrfxHaf17AG43C8Y//r/lmZVc62i+0ZOu6fslTmFjNgoSiOXu7db+xMSEREdqL7Q2ubMuB64p1J6zJ5Kzduj9821loTvREREHYgBfHWuwWEJgFCcc8Poy847jmIv26jWhkIJzm4AUmDsgv1lTQhNTydnTc+7ry46Z6rx/Fsjtc4/Obz5hf2HR/YcdclkMn7V6Kf/xYecvEdERO3UF5pb29xcnhk3e+ABAF6vd3xmefPJUY/eKzzzf78Mu9+JiKgJHEJfg8t/TVYVAaH4tuXIzTErc5yxcC1s3er64DlNXUwPGkPojcQyZmHP/ELx+aTA1HCVA2rZnFGO+CUAfZG6wVwi5LPNUK8wQA/PG13w/wL4Z31nSX7pwuaP3809xm5mB34XenBGHwzwyqBRQj6dmFZuG/30jz9zrhbTyJVjVenEOuhvVAd9Yzuoquis2vb1jYTmRkLtrkYTnAbXExERtQoD+JpseeCVYFmaWEmOWNPjC8F+0XZSIDL8rqLuAP/D+Qg97h4r+1t3YMzjckFWFQE9ptbUoE81y1nVHwfUWiPnfw7Ev23UKh31iccA8OjTXwOAKxyShSKgzQbtyehOAY8AYO+Bc8lMI1eCVaWT7EC/UR30je2gqqIz0sgRERFRDQzg61DIA78qtMLy7fLwtbFBq0cegB7suwsZZSVJvnYz7HEh/Y/ADvDP/+xUfH59tTDc7ulCOX8VU4307YVysnqa+Fqecnpx99d5wAV4wvHrmPqe2Hlke9P694MKnftERESttbW11fzOfX3tGUpfebF5fZGZ6rPqiI6AqSm8996U/ZXLl6emppw3JqKjhgF8nVwujz/s8Ydrbue4mecbAWlD1X6jd8F325a9tXK6WcnhrHK+/jU1U7ICviccD2xb2d484WTcHSpP/mYbFGA6A+w994x5yOlZYYyYL0sjJ7/hsNw+ER0PXD2ejpKVif7R+eZ3H19+MteiVHKNqbTYfOXl6YmOCit0v3x5yv76e+9NXb7MMJ6oMzCAPxyuwWFJ1bS94lfz6WhR9J6O+hQhyZGb3lRQEThTWkpRBnfd51/ANsreTBlXtvkeAE39ftr/Zo+RRu7S1Sun318SRhq57eznvY9b93GJiIiOKaNFVxfTfvuD9/SiqgHS8CAfg9MRpQft29sA8M47U9brr78+pb+lh/ElnfNEdNQwgD8kRntvfykdDSoCtr53fbl6DXB5vDKEKAn3kV9fLY7e01Flacf+gp4y7mepCqPgT8Mc4Xfm7MbtJds7mljqnKWNiIjoGOi/sbx8pfzlj98andRTxnnHx8cuXrmgp2b5+OOlxUU9mZx3fObNKxf6+w+xrkWMFl0oIURuhj0uYzVYAcbvdHQ999zrzz3XC6C3d6rkLSuYf/31KQCXL08xhic6yo5LAK93NhcNNy9IR0OKcBimfqhc/muXVGUDyGd24Heloz4jeo/rVVr+lm82A6BHX9PeK0OUrpiX+0d7kJ1PhBShT57vuRL/9jddQP6v/yJ4ewd74lvfG7v1TZfLH0v6zQNZvfwAgL1dQJIDN8f8LheAfPpbN5TMHvQ0cpwCT0REB66vb6R8GvvKxGgKTsneR0ZGQqG5rZWJ/tH5+cmlK0/mDmkKvDGazX6H4fLfjGSDiihd3NZhBhtR212+PPWLX2x/+cvvVNrACun1SF7vkGcMT3RkHZcAvrJ84ghE7wAAzzfkMxti79Gdqb+4dmbHWJ7O3eMyMtJlAODUy8YcdE95BJ9Obdh+Mrrjz3fj3s5Txux214WLwA6A3aWpv37lO/+nC8h/fFd/T/Yaue6ePQvsAt1Xb4b9hVx3xnJ52P37DxxXoWcauXKsKnWcTvkmdEo90VFVRSfUdmVidN4perf0jcxtzmT6J+dHJ660aQo8AMBVsmgtJDlgtqpER8jly1PA1HPPvVfPxnok/847U729mJoC58MTHU3HPICvtERcm7hf0Gej7+yZo+Ot2esG14A5i93jHYDIAF+Yb+kD7C/J0obQgE/0+P3Si09v3HM61M7toO924cfuq9bHf+Yppw2kQKT3B4rYw/2P8hgtvwVhGrkSrCp1oo74JnTQN7aDqorOSCO39XEGgHfs1Wqd632vjnknU6nMx1sYaWUnvCecTDqtVOuyLTxb9Hp9a9sStcnU1NR77+Hy5al33nmvt/dy/Tv29k5tb+s98FMHVDci2o/fancFDtARi97tzko99tuobkkOXL1Uso3nD7oB4GFW/1GP3+WX3fqPn2Q1ANLvPutQejcAdJtPAs4AwMUL5pu57H29AuYLkiRH4smY3+PtBYC9X37Q5IciIiLaj827KQADF6rH5X0XBgCk7m4eSp2IOpQevb/3XjP79vZO/eIX2+yBJzqajm0PfOkC7w4bJBzyuvtL5n/n09FpfQQ+JDlyM9yz7jTXXh8DbxtHV14Q8umo8jfmwXbx1HO9kfhNPXUbdnq9/gspsyc+n4hOW4VhDznAZcTv0oez6n0pEI/5c1EBQFtaghxJhnsS0ZC+iyQHXoE6u4OL/1vg4ruq0LAHAA8+Ka7Nl195zf2R/vE1TShBIUny8FcvIbOBF5+v7wwT0ZFVni6us/qK6WSr1beu99MTUWWXL0+Za8431v1u+fKX35mZeX1q6p2W1ouIWuCY9sCXLfBe9n4oqKjCPhtQ04SqBKNp21b5RCioWJG0JpRgaDFbsaxCSUJVgiGHknK7tqNpQgkGs9ciMgAIJZR6CADILoaC9sKAtZU71vj53tMOHyabsO2iCXX2ZwAgZu3FZH6QyNv3WZt1+Pi37XPsiYiIDtfIlXEAqcm3V6pstPL2ZArA+JX2QyN8rwAAIABJREFUzYAnOtKs6H2fnnvu9ZaUQ0StdRwD+LIF3ss3UIQGSIFIPGmKG5H0ghXo5o2E6eZm8YgsaUIUrwBkLpEnyYF43CpJAjShhMyijJKkK3IPACkQTybjkYAEQCxkx/QDa+Ku/j+h2Q54DsCjO+pyPrsN2/h5AD1usy9NqCpkc4+ABH2aPc5e0l+7PgAAuK8upo0duwE8cv74AHrc1uB6IiKiw6RH8JgfHZpY2XJ4f2tlYmh0HmD8TkREJ9WxG0Kfjob0rGn6Au+Om+ij0QM37cPcXZ6xgCRUTcvm9FXYjVXe5UjM7zG2CN8MbOvj8k2FjQqPClyecCzywKdkNHXqW3jl64N+6PPVh7/sXl2yNvLHkoPpxHpqcWFbX0peX9fu7Flo6sL6oMfvcnnCfzEglAxy735/VQNk70vYto5SyCsvBfQ0tIDLMzh8TtXuA5D+9zf1155/wdhjO5uHxwXX03ovvvRKyce/dEpsPAIeP+141rgKfTlWlY4sx994B30NWNUD0gG1HZlbHp8fnUdqfrR/Hl7v+MCA8U4moyeBBwDv+HIbV6AnOuJa2G2ud+YzpRzRkXK8AnhNDSoAJEnSNE1TpxODThlZixaazefzudx6NpVdLe5c10NzSU/KbnL5r8mqIko2sjK02Q7xB93I7GAno6qZrDvulgBNU7/b1W3fKL2oqHpZ8vXAk1n9ycBTT9k36Xn5HDL3H2kbGiAVd427Boe7VW0HOIXPkQdcQD6fWHz3PgCcevm10UonafRG4N2gqmmzoegXN//dIB7n1j/827/7fzfuPQKAf/XiS457cRX6EqwqHWXlv/EO+hqwqgekE1ahB4CRuc1lvDY6nwKQShWCdkuVJHNERETH3vEK4AFACsRjfiRCQVXT1GDUXWkJO2txOme5rAag110S//e4JUAr3khyGHR+4QVgBzhzDnsilYvrveW5ezsANDUYygaGvU9nhfGoAXjef1P+QVDsAfd7I8nv2mp8yvpcw4MurNsO4fK/MaAqGTzSloLBJRQpZKMr1FhTgyHEY36Xyx+7fufabEYTalCoxTvC+8fMYktERG3UNzK39uTG1sqP335r0RbAe73jY2/eeHWkj8E7Ud16ey83t45d06vfEdFBO24BvBzR+9z9NwOrQVWDUKLeshDeyi8HAJIk9fYOu72Dg8aS8A0ri/ILTp+T9u6LVC4Zi7uj07eElgMAaELVBIBTUu8L0Ec0urxfgxAANpRQwrbGvdkhLw0Plh/lBQA4PyDdy1gL4MunhShantflvym/GxQ7hVfyidBsZg9Fui9dufirJZGr9zMTHRBFUTqlS7Ozel+JOkxf30hobiQ01+56EHW2y5fxzjvN76ubmgJTyhEdHccrgLeNeHf5Y5GsTxEQSshdlPTNXJxOjsTD9lxv+fIF5s1549VV2ejpPxiWMppIpcNhTzjmCQP5dGI9tWqkr3tkLF1X0PNyT+6OOfbfzIQHM37XF8V7nFF8ag5yJAIAePHrsRtfN1LiaUIfk5//u3fTg980KuXyXoTYgXTleu9q0Gd2uV+KTP3+wlQhJV7+e68tAfhZqo5PTHRgIsb3mppUnkCOiIhOsiY64e3bm3Pgp1pfMyJqyvEK4It5whFZKAIlk+GNce+BsZI4VX/dVDxWvupG1rp3Nh8/AIBTZ//N4MD7qiZS6bDHXArP7/f4/d6oTxFngL2SnvDiD+C9BLEBAN32/veHWg76xPsUADz4YSiYKanpo3tLSvCz4hx6+aVZ+1YbCz8tykmX+9UuiIiIDstWbOLtuwBw8cacPqndeqUe1l5EVE1znfBW9zsRHTXHOYAHPOF4YLv6ZHiLvjZ9YbF2fZV3dTHtt+1nbmQwNrLF5+Z2/7ADAKee7XYNDveomlB8wp6TPp0SwKWvSRvVpuEDnvPd2NgBnv1D+1p8j3dhLJyXAoBMRk+Jpy+qr+fQOwPsQSwkxjyFHR8BkAKRV7LKrED3+R6zt96skZ4E/tFnO2VPI4iIiFpu8+78vJESbg59Ra/Uw9qLiGp4/fXL77xTbyf89vZ7r79e15ZE1BbHO4AHXOWT4Y1uc3UxPWgMoc+nE9NK6fR3Mzi3RuDr695V2giBm2N+l7EU/LSqT0N/zg24Bv+oR1VzgFBCbj3KzicWBHD+l+KeQ40fA9DU4BuruG/VqPi3tAdA+j0PkDZfsafEewgAe7/9DH7zuT40IJ9O/b3+1qVIzO/JJyRA27n3u3JPTp/zvuP08UsxjVw5VpWOoCq/6w76GrCqB6SzaktELaTH8ACqhPHb2+/pWx5OlYioOcc9gHcI4c1ccEIJ2sNxKRAZXlVsieDNHTW1MHFckmUUpZtz+WORbEgRZSu6nwH29BXoXO5+IAcAmqoEC9vc2wGkgQEtU7Tm3D/9Rv///U/PArvAU8BjfPIPacDexX+mt5DsrdCzn8/ncx//CgDwm8/Nt9OLivgEAE69POpBIRXehrFinaZOKQCkwPWz/3X2zqNHu792PI1MI1eCVaWjqdLvuoO+BqzqATl6aeRG5p48mavxChG1zOuvX37vPSNKLwnjrRfLR86/995UCxPLE9H+/Va7K3AIXP5YRAYAoYQSeQCecDwSkK3bGEmSI/FkzO9x9wL6GHprx3jE2k6SI/GYt3xevCccKyoOkhyIXP+abQOvDAADsmy7dTrTLQci8djXXygu7De//hzAmfPA7nOBeDIe0DPUZVJGb/sX+v+edtv2+SQdDfl8Pp8vGAwqtysuJH/q2W6zwkX1Pdujf/yXnj0FAJ/+Ou+8PxERERF1sMuX8frrl/Vl7ez/9fZefv11h+hdxyXoiY6U49ID7/LHkv7Kb3vCyWTYvrnHH/b4wzW2AuDyhGP21/Q4ujRxXHlx6ai9XK8MITLwJmNhI4edHPpO2APbKHj94Om3fMonwHMvXtq7t6Eupv3hWNId9SlCn2bvcl8EdgCctnYZS4SCSl0p8b7mtSqt13csEQqqmvRnEWMmgfsFYE/6s1c4A57aiGnkiIiIDtTlywAut7kS1JmmpvDee1P2Vy5fnuIjnkN2XAL4ljNyxcvFK7nri9hJ7p7GCtMjeJFKhz0966uasQRdOXMluafcL8vYMKJ2feftbB6eXKpkDr6ZEg8AjHxw+UQoGFTPngWA7e/4fPfNbYXiQ+HT5NOJ7/9NHoAxQ0CSLp39orFPRXQAmEauJiaKo5Npa2urr4+L1hERtYE9bi+ZUvHee1P62A1G8ofmJAyhb4pLH08vlGjaHFKeT0cVATMne0P0UfQilc5Xj98FcAoA8JK5g7mztrqez2e3AZyx7WFltZPkSKxspfqK0tFQUFE3dh8VXtK0jTs7DX4qIiKig7C1EpsYGppYKbyy8nZ/f1dX19BEbGWrffUi6gQlHaT7LKqFpVGHunx5Sl8KQf+v/F39Py6XcGjYA1+JZ0zPIl+y1h2kwE1/44PM9aXvt1OL2xXjd31t+rOnsfsIVqf9QmLM49f/vbq4CA2QnoZmJY//WM+Xe/56rCRHnrHFn8ST7kUrr5xx3HRUERpwTsJ9zey4z6ejQUUA+PRzEBERtc3KxNDofAoAxsvfTM1Pjs4vji+vzY0cdr2IDsjU1NR77wFm6nV2YtKR4hi0V9oSZrR/kDWiExHAG6PhzTHmFTcoGS7v8oTjEffiwqow8u5Ikjx8bczK19YQM9+cQMX4fX1VA3qk07ndXcCM4LXV9bzfiOCFANBz9lROs6p9W+80v/dROj9qpMT7IFOyCN1DAMBzwKd6Sjx3SgA4c/a+Zuuld3nGrpwVS7t4/JnzB2AauXKsKrVF07/NDvoasKoHpANquxUzo3fAe7G/8MbIjeXli0tvLc6nUkjNjw5d3FwLcUA9dSYrYtddvjxlXz3OCpaajuetztJmK1goh5HYCdfEF8nqjT+QChGAkxHAF/LBTScGHUL49KIe3o+VxdXOa901Vwk9gkelGfTG2Po/HdievaO/Yo/g9Q58ANJX/xfk7gBAOhpUNUjyJU1slA0TwLmXe+7fyWnZHH7zSwA47Qm88K6eEk/fYG/XSIn3OPtBIrGYXRWi6qh7ppErwapSuzT32+ygrwGrekCOXho5BytvT6YAeMeXb82NFMfnfSMjoZGR0NxWbKh/MpWafHslxF546kDmeONqG9h/nJqaaksMz+idmv4KMYY/aCdjDrzLfzMgAdDUxXTpe/rE9uYGxjdUh8FhCag0g96cG/+S7TV94rymLqZtO3/5GQDQVH3AO+D+RklKvEtyD4DTz/4uYE+J90xRSryegYEeTU9onxOzqlqU256IiKgdVpbmAXhnyqJ3m77QrRkvgPmllUqbEB1JlaYQ1zJ1+XIzMfzly81Phmf0Tvt8ANSSMSBUyUnogQcAl/+arCoC+qTyQgStTzyHfK3F4btTRjqnTHfGdvlESAMglCAAa2V4g0ilw2MAAGl4sBur+qtGB7o6vR6PhWOFYQL5RGgDgPsbyeSbAPDX71oVMFLi5ROhoJoxXz1zTv7anxQyz9mSzRHR4eHa8kSmgQvVx8b3XRgAUodUGaLW2E888/+z9/6xbZxnvu83WUWrjXVTGokt3SXVzBiyT48rnAhualZKfTLcs4usnZbVLRhh18AyapB1zN6LSxN3IyzCAJ17kCkK5QCyDrCVrC5aZnbhu5CJHlWb2icHu51ZKKFD1TWYc1ifTSx4JkuykOwEYgI6qyo+yf3jnRkOh8PfpERK7wdCQw3fed+XQ7rid57n+T7kxFpD8WRwHetS9U5plg8DzzdtKoqZvSLgAXco7JEEqSCPXuvC5gmHrNnzmXjUVP1uU/8en/YKEjzhpZArOj0lSgoA1uOfDPmcADL5Y6z/9KSlbr5o8oN9ym2URpr5f+BQgG5FDAjHXADgCc+E3JkBNSAq4ovPizn99IJucHrxP4D1S17vJW27pPPc0NDDyeSHQO62JImQln9xKFvD1aRQKBQKpTUk31tF6Qg8sPpesvSTFEq7YTh7NTxTPWnJhjF4NRsgk1P1TmmKn7z+cW10Hkoxe0fAA+5xPyuJiiIuxH0hN/Ti92L5Hp8OCpacckWRFEFKFdrcAUhFg4LRiV2RxICK2dMpPb8dgKKIwhRM7nl2k99eB9D3zNKP/kw/ZNLeAHI3pRzQ58C6JtRJHX06dRcAcibxrygrZZLhb7yXAVIKgAeQTH5YsIf0rdLnUSgUCoXSek6OncH8fIX6dq1O/swYrYCndArNyiUmufS1ptMTQW7yxrOebih2Kt0plI5gLwl4w82O5NEjelGy867Tuqyx/nA+cq51WbMm4EMSRdYTng25ncjEo1OCqChiQADrCU8WHNNvGdhOfvkl71wSWL8WzfwZmVzLDADrGVIkI9CwfhtA+noagCIKwesPKMnbIA3idIN9oxtc6to6fMd8M0u+v/mO99KH6H4EWx9g/ZLuYfcpAMDln/2htuLf/Hng0jqAxK8zqMtnn0KhUCiUBiEKHvOnnsD5114MDlri8KurV1599tQ8QPU7pUNoQSVwPRoeJnFeRsBTKGhe/rwxG82ibzp7SsAbpfCKOBUFIyp23nXxmARiamfSsU49ep9KA+YTWP9kiIxzunWfefMxrfReTRFZbDd5/F1NohuTE0c7eMIzo6mglLQNqaeVJAB0H3Kf+vwfF/XCAKd7/D/8nvSP/4rPN/WBmbsA8Pn/zodP/ZM5b7/3+NlXXz7lBMhtBq0hHW0jVwN0q5Qmsg3vUQd9DOhWW0QH7Pbkhctn5k/NIzZ/7vD8OWB0dFR/KhbL172fuUwd6CntT8t8vOrU8ISmyHWeL5iH42j3+t1DU/LnCU3MoiefMHP/ReitFlFXt8WOZo8JeFMpvKjYe9cV2M9lMpl0+moqllq292kvsJR3DjCAUsJmvtTkb1yZkSyDiH5n/eNuON2nPb8QpDQAfOEgProN1zFX+nqaHeNPP/RPF0VJufWPi65jLlxXxL+axgEsS9K/AsDvPdqnzfa/dQHAp/+DF/4HWP/s0oyTlO/nVuYC3jlj0W5gCwBydyy3KDRoGzkLdKuU5tLq96iDPgZ0qy2iI9rIATh54eblo8+eOkfUulm1E0bPnH/tAm0BT6HsBGZdZ34sy/nGeDSe3xHwPE/EMHnj2lMAG5tE3kvCfqT52fZ8Lc1lzwl4Q8LbetdpZOLTU9ZC9aZRcfJ0SgHADDhJxn1aU9cf7TsI6OXuD/W5fSH3oUf+/PuX1klWPZKSaDfbQ/uAXMERd2j2LPgfS+tbpoPG4zspmkNPoVAolJ1j8GTwrc+Dq6tXfv7q4kLSqCMbGho/OvZ0sJy9HYXSPrS4jVZDQfj6KPOKLMKeavg2xCyGob2bBb/qD6Cq6vZtyw4jv8OyyTJYPoEct8tl/B4U8IBrgAUUYgRXTIF/HMuyDHMi32XNAjNQo9StZXKjx104GnKTUxU8MBRe4rVC+SCvJ76je7/rieE/GBgdGfn1S4HFDZvF8tvNRKfmpHUU4nIdupu+tQHP801uqEehUGyhfeMolLIMDp4MXjgZ3OltUCj1wPMtb4LN89un4Yn2q/IV6e3ud7mC6hTM5oVlxHDhm8tHIjIAhgFXpYBuHo13bTBm2MUfwj0p4Muh+8dp1nT546ltnlxNXc+n0peb6iyEOWnL8QfjIZ8TyFRKedRPtJCmLvQUCoVCoVAoTUCWS+b6NottEyY8zwPVBkIJ9TWupzSdutNAGIYjD2RZ3k4N38S8ld39IaQC3gLJX2f945Y0cnJ8WyYnCQL4OLFspNIXD8pPdSrtmZMkZflqxudzIv2bDWOM0zez5PubP/deWjf1qIvr01hs9l8KCEkAakFzOQqFQqFQWsTqzAuv3gCAoy9qRe3GkWowzmqQTHR6yrB4ZT3+0+O+KgrJiJ1MMZ6ifrMUSmdT980Ii98YZTshWej1qndeVXmGIedyjWj46vfQeOC9BLszH4QK+Oog9vEw7OTL8fEbQe+ipdO7GPCKll/01m9FkzuJnf3iVUDv+A7g8s9svinc+fufxH3fGWABzSA/HlsBAGx9tG7rRQfgDgBg/1ihzT4eJA/+5b9dx6ljxWdRF/pi6FYpjbD9b0oHfQzoVltEm+325o35ea0l3AUMFhypBuOsRrDqcEUSBSlVWYRnUmqjS1MoNSPLPClPZhigtKFXE2kkIkrOpfXw20+DYpjjEIkUHIhE5LrT6asRzi01jNiVoXgq4C2Q8LciLsRHtCx3rZl7a5aznVxT8OuAFoDPxKf5uWTBGNdAH7Ce23j/vQx+DwBw971osOQ+736Q0QS96xiLpIKNj9IZOJ2ZTCb9zsKVv5Wu5+xP1KEu9BboVikNss1vSgd9DOhWW0SnuNBvJ/FpgTR31TLStL/JkhAc0G+xl4CkwdFwO6XFGIqdwDA8ke6ESGRC9/oCWmC+3bisohp++2mFGCYZ9a1Ip29Z4L2YXRWKpwLegtYpHpIQMN+TZ/3hE8uCTSN4Gx56ambpOf2X/M19T3gp5Dbd689H5Ysmd/om/cvEf04SvGR8b6GZvNP37/vES+tYvxQIkCMrl0SA9Z/d/3dz17e2Nta0gQ/vA4CcFPBKJOhv/wJ1/teDn1ZxlSgUCoVCaZCTFz7//EKFI63EcIqd8Wkq3On2zYRTXsEoSysFyZwrZYZL2eM0xcEuEuFRpNgtTExEzJqK4/jvfe/JBteldC6NpM1bKMyiN+AiEXligqtykoqbaXGnBpvlUF0o3rDBN05sN9VPBXwR7tBseGDhoqh1emNZz+nJkNuJeApQqsqhb8LkTt8MnzrNS0Szs57wUxDmCgX3kaPAel7Xd+8//uL3X3Y7M9M/BbaQXdNC7g8/ChT607kGXEDa+LW7t++JP3x+/KnU9wLibdpGjrLDCILQKSHNzoq+UigUC5mrywoAz2hhDN097mclsbyCJwn07IkR+teSYkPjDnaRSLF2sl/IDMfxgF1whrI3aJZ6h00WvQbD1FYSX0b3brN6N1GyfYOlF53xWJbzJo5tkk6yJwW80zez5Cv3vNsXcvtClqPu0NJSqMRv5Y+Nmkvs7Cd3jfo9qihpQXliojP+bVYSFdbPn1jmhTltoCIGvCm/XxW1ZHk9Ks/+yfdfJrr7C/uAHDYWA95FAOwQC5jT/DJRXkwDYM/yp999TZCUrdy6+lEK+PhTAOg9Sr+PUHaScDi801toFbRvHIXSVmhZ8KPWHHjnAGMYy5Q7lT0xkI5OT2l35I0b8hRKIxiB90YmaUqqcBNDjjy/fZ75e5am6+GJCb7EjaSqNLwslyudaKl6l2UZQHEzeyOZheNsNHyZLVmEfTto+D0p4NuN+HRQkMzF64okCtJPh85+m4WiiJeZykG+Pi0OEJ8WFgtavCtJBdCd6wAgnVoHgP0H3n0tv+jAiDP9kw1QKBQKhbKTrK6uVjt0cLAhCzstim6TBU/McMok3JFTFVEQ8scURRICUpmi+Mcff9xy5Ctf+cqvfvWrOrZOaXPqDr9XGXg3L2Tr9N4U165mhXN1wdOEqSilaNH9kVIavlgbWyiv3lsE6V0PvWK/TO1JJCIDMvknghrr8A2dv7Myngr4nSYTJeqd9fgnx31OJ4DLL3nnksgl5/7r8eNQVlYkHH/m8Mqlm0CvZ/ZiyAkAPh8ppycp9J7nfU5tKpIb7xqb/eFzTiATf+lFIZlD8kfRjNucDLixIm3kffCB+HRF+3oKhUKhUFrJlRcOn6rehf7y5xdOtnI3JdHburKesBZ0z2SiC1OiVI39HYViT63qvQpKpgpTdhlNTJ63YKvhyyfSV1TvzQ2/W3R7NTAMB8jkoiUS6vDwRE3mfIbg30ENTwV8CTLRYKC89XwN5rN3AUD6UXTcXfRXXa/BC8/kJzv1f4bfDQgScHuFqGpl5RJ55tCo3rc9E4/dAIAcwHrCIXd+qv0PYOPT2/9CdLjT/a2vIikBt8WFuC/k1u3rARwcm/RVb7NP28gVQ7dKqYkdfxd2fAPVQ7faIjprtztM6Rx6rYWc+Q+30+kLzQygnP3dtWvXLEfuu+++Ju6X0j4QE7uaJEp96r2KTGaq4Xc/rS4mJxoe1soOGw1PBO22qXci3avX7UXwicTE8HCETFVrn7yd7bBABfzOYu+h43SHZp95P3DJMJ/rBrYA4L8LXm/hBH2e2RkSk9em+nf77/vv5mR4kgoIQBK8qn92xqfZ1+O2ViVPKLavL4S2kbNAt0qplZ19FzroY0C32iI6oY3c4RcvXx4r8dx77y3eWJifjwEYPX/55SM4fLileyltMV/KSMc96oFU0cCeQrHSgti7GarhdzPb88ZOTPCyDFXVFiMfVyOR3hCxFd3am7jbSERuQLprbG5qD1rXJ69FUAFfnlb3eCV5eDZfE5x/9qeeS4KkbyBz+aVAQSd4lh26T0newlE9Jq9PdaAnUziRb9J//UUxme9BR+zr9XsChvGO1b6eQqFQKJRtZXDwZMnC9pMnTyJ44cLqzBOHz5175b2bb51sqAS+FZA75tX0m6VQ2h4SXWw8WNq67G4K9MtLJLSlNN3s2db4QhwHYmRgVvKRSIRhmOq7rDXlw9Bw4F0jkeD7+yOqar4RwNUUit/BIDwV8O0AM1DpT73z4QNA4f2E+LQ3eatoIHP4cfzjDcU51Jc/1/etr4pJCZ6wuS7viaJbEwMHgBz7zafo1w7KDkLbyFEolHIMBl87v3D43LlnZ55+K9iIhC9tNk/uh1f+y1wC2h2eUouPXd3h91IOdnbUE4Tn+Uab4ZmnojQdooQTCdVo2F7Kto0kwJMBjetnQ8kDMHzgqjuxOeq9cekOIJHgHQ6yGc6s4WsNxe+UhqcCvlGIl5zZDw5GBX2Z+L024iALAGrsFa+wYp2EVM4L06MFk2Ti0XwfeeBGLJ5xm3xy1bWPi9eK/RIAfhkzO+reiU0HL0pGPSTLHt//SS2vm0JpCbuyjRxtIEehNJHBp8dHz8ViCz9fDTak4EuZzZe2p9eeL/kXvkHlT9l7tDh53gxNpN8N8Dxv3LXhOF6W5eFhruJZ5s+YXs2uzdD4fqr8XDX+0WtW4L2YbLb4WG2h+O2HCvidQPvrz3rCkwMXA4qi3CnWzvHYSvGJd34WDCQLPIjWJSGgesIzIbeWuvebjwpDgploMCDlAPR9e9z8nSIpSeZhirJCvY0oFAqF0v4MHhkCYrEbN4GGQvAjJ1hRUXSLV534gqgArNac1e68AQZQIMXiIbdZwWeiFyXYNZan7EF0VcO3aH6O2+56XXPiNIFh+HZVN7sQw/ncfM1VtVyzNFssYr7BmHz1srzB5PlmBd5tcTi4wkR6oO2r4nejgG+qgfyH0aBXVCyx8caITwdERfevzaRYUVGSdwBAEQNBaAvFY5LNqcmkAnSzYzOTzznT015BQt9BrGt9a8hXkRX1bvFaAHBUjwm8dwMAcNAf/n99etghE58OCBKAbHEAn0KhUCiU9mH1vWTlQVWgKXhJCEJrB5eJR6cECWX1O+Ae97OSaD4Pmfj0FGkJ6x+n+p0CoAovelmuP/xeh66oPlhqWoVnGBmQya+W3aoqH4lox0vtZUf6ge8yaupSXhPkDW1cxreapqv3in3sTZRrmGfA89tdJ7IbBXwzkeZEAFDEgFc0Ha7f2y4TDQoSwPpnyQTa94d18xDSThZ58/lCnCeecjoB0vD9wT8+6xHnJEVciPvGT7Cioii3AXz6MYBM9LuCfhsg/50i/j/XAYD9ts+UNOh0j4/tlxY38OlH9vumbeSKoVulVEmbXP822UY10K22iM7abQlWr7x6LgZg9GjDLvRO32Q4FRAkRRIC5pvmhZYxetJc/k6+0zfpXw6IivU8eMKT1H+ekqf81/46wqfGtFVXv+epQ2BwHM8wUFXOVj4Zep4o+YkJ6wJUvTdI66S7mW2Q8eRmVn3ntiL2ns0aBfAaDGMThNepoOH1Gni+1IBWsIu72xDtAAAgAElEQVQFfKsN5OuBBMQL4vlO30w49eeCRCS86U4Be9yDFaPW3fWF/QBpD6e1qNFS5sU5MkRNZZy+mXDqu4KUBtKFPeLMX0bc3/IgKYF5GAAymUw6fTUVSy1Lkrn5XBG0jZwFulVK9bTD9e+gjwHdaovohDZyqzMvvHqj3IBkcj4WAwCMjj/dBBd6pzs0Gx4wOcuwHv9kqLIId/pmlkbi01OGlYze0KXxLVF2Ea1IpN+25HkjfUCudLfAUIAWDd+WqccdQ6u7u1sgb2KLWgbIcrt/GGqJybcFu1jANwXPWb8616QU+ttiQLB9wh16/rgkmEreWY//9LjPdTWYP+b88mEsFlTFO32T/tSU8aWDOOm6Q+GxXwcWbxujutmxFyefs/lO8cuilvIUCoVCoewkN2/Mz89XM3D0/GsNGdiZcLp9IbcvVGZAibbvTndoxl3mPAoFVSTS18o2q3cAHMfJsqyqFfzDGIY3NLws8xwH6plXN9V8ZmS5FWXhNfcOrKM0o3paWvpeC1Ul0m8n9+/0BnaS+LTX6/UGowWN0zPRoNfr9f4kVfI0bYR2HqkozyTNSfBYT2YA4MZ7AAD3d/wFQQ9FDDz73eB03LTuPu2/rH92adbPqKIQ8FoK+fcBQC9MpXnplKQAnnDYAwCS4PV6vcGf/Es3Ge9i+7qBLWVREIJR81quARZADgW4XIf2A8BXR2n8gEJpGhcvXqQW9BRKMxkdPXP+8s3GOshRKNtJYdutBufZbvWuH+EmJjhVlcufSDQ8yZyn6r0+eL7a2HvLgsa80XauqtE1jK2NtlHvBK5iKsp2sqcFfD3kDeRrCcl/bG1QsJFWJCHgnY5bR6YWgoF8kziAdH8zsCmJR4p0iSMoK9fTANCHtLKujU4rojCl36bIRKfsHP7S6VtlU+gpFAqFQmkxJy98Xom33roQPEnVO6WDsE2kr9XBrimZ89VESsuoR6LhjR/zU6aDDe1wj0OqqXfcT864EdOU2RopgG8RDgefzfKWg6QMvo7ZduQtowK+JgoM5Ksm88Y/bQDoPnZ2dmlpaYkEzNELQLpYGP6HIkkK6w/PLi0tLfGeXgDISQtx6HFzGwEviVIOWuw+bIT6112e8KyxFqCIC+RmAWlTC0BfZmlpaWlpNjxEjqofVv+6KBQKhUKhUCiV0TU8T36tPnxKAu9NyeCtGCytOGBigiM/RO0YPwzDGU9VMw+lGHLrpHopWJ8DYtWT8ySdvuLIFr3XLQ2/13vpSgbht/8Dv4tr4CXBa9eJrXkG8oSH9wHA1saaeWRCMSvt9G82AGDfFx9zAoA7FPZIgpRzHXOlr4uB6YGlEDGkA2AyuMvcUrU0dzWVgVuzq7fZVy+QA5gBJ5zOkRMuUUkD3ceeD7mdgDMU1svrySzAHQDA/rHJAhd6PEge3Hk3g1M2qQXUhb4YulVKRdrqyrfVZspDt9oiOmu3FMoug0S/SRicNGArDxHs21l8W30skeNQKti+I6bcnc42W9ZVTRMyAupwsNuR5Pnq7qm1SzH8LhbwTcbGQB4A8DBRvsrcdPyxkNtJusguFqSju35/P7CBjX/6Sfyp77idTr2H7HXDa845wGgCft+DpKNsdEowMt2JP50hzjPLb2RGnnM6AdLxncTfSZc458DvA2lg3xf7rC9A6/DuOsYiqWDjo3QGTmcmk0m/s3Dlb6XrOev4QqgLvQW6VUo1tM+V76CPAd1qi+gEF/oyrK5euXkTAA6fpBn0lE6GCHhzf3WO40hgz1Ds5Lh+kGve0jQ23o7U96ZwHLcNQreirG2dgx2lDLtYwDezjZxSykAewAHtv6Z2sJ6znl/OSYYkdg6z3YsbW9hYEQIrAMB6/I95XIqUNiZxj3t6JSkHJOe83jlt/2EIgimJwOkLe34akHJbymIgkO8RB7jKFuTr/ngb77wDOOH0nfaIggRr91qN3J00QH3sKBQKhbJzrF6ZefW9py8YTnVXXnji1HxMf3b0zPnXLlAXO0rnomsejvzaOsVeE81VYbvvZgHP8+b7LLWqVjLekoJNpopE1ImJSGO7axUMs91l+dsTfh8e5hMJazf46igIwhPLxiZurEp2sYBvMqzHA0lSxKnoiI1a3s+6NpQ0GReeDLkWTpuf7Rty4rrSvR9bWid3yeQjR1LanaNfhWQoatYTngy509PWZQYOALn8WgCAobM/rO5GhTI3HT8VcsM14ALy53f39j3xh8+PP5X6XkC8DdzRMu0pFAqFQtl+VmeeOHwuBpw5cgFEpF95waTeAcTmzx3Gkc8vnNyZDVIoTcDcXm7bFHv5YGkTdVodWfQ8D7MQ4ri2COuaLwjH8eY3ytRmr5yYNw3jAZtk8kiEZ5hIJCIDYJgdu31Tlraw1ms6DWh4jZ1S76ACviT7RmeWQgAy0SCg2dZlBtSAqIgLcV+RYnacCL82k5e9mYEDQA5Hj5BfTU1kM/Ho1djyspQvRCQp+PGfSQCwf2z2tee0eTJXVeuuPs4C2Mg+Prv0QycQn/YKEu78NOid02djD/YBAPvNp5yGY34hmeiUmAZw/JmxfdfekRRlK7cuLV5Uf8N0A4Dn+Yb73VMoexjaNI5CaYgrLxw+Fys4sjrzCmkNP3r+5lvBwdUrLxw+NY/5V2ZePEmj8BRKh2NRyMZj0kneeGw+xSL10Ty1b9bkerC95LzF2t6yCV2xl9tZJKI1IzBizpGIXL2Mb6mPXSH2Gn735Vl0ClTAVwU74AL07HNJmB6tOzvf6fb53D5fCJn4j18SFjeADz4EAPe/7UNyHZ9+lB9q+MUbrP/LXQDY3080NmlBv37bNEy5vQ4An5TeAJl1//6VS+YsfEVZodZGFAqFQtlZrizOA7pWJ4du3oiRQ68FBwEMnrxw+cz8qfnYws9Xg1TBUygdTBnnNos8JordEs02MNR+reHQonb32q+RCE8KHKoMjJMTjQSHaqQ7TOrdDMNwqqqeP78IZB0OxnTcWKvcTlpJnXH4mva7zfZ15iA8w1TfG4LY0cs7FX7HHhfwxPudWMTpxzJXl8soWc1AXroYHXdrkerKk2iBcEtNvtOtVcZrEDO8rY/W9XnisaIa9bXsFoDeRx8DgPj0pXUAYJ+ZnfkzPWgffykgJIGN5Dp8TqdvZslHwvQw3PNJM7mNDT1Pnzjex6dfFKQcgBs0g55CoVAoO8Pqe0nktTqAvKQff9o4dHLsDObnYzduAlTAUzqXbRZibRUsJfXkVTve8w7HhMOBUoXiFmFfpayyvX0QifDQmqgVUJ33OM9xvKrKExNyNRuwkEio5IHDwejS3UbNmu8pbI+PXRl2gYPd8DCfyz0OIJfDI48gZzL17u29ZnuKqvKAqqqR7dhfCXaVgC9MGS/RRs7UqU3zfpeE6dFZw0DeknO+nswAyCTXQQS7ZiCfL4WvPInWAE4SggNho3dbJh796+tbAPDgwwCADz8GgC3ln4FjAJBJqYBrf3d6Y0tzm0c8dgsAfvvROuA09D1zxNQNzv11FkkFW1lzV7sCXF/YD2wAfc/k1Xt0StAt9zaMV1oIbSNXDN0qpZh2vtTtvDcLdKstou13S6LtQ0fyulzT7wXHKBRKJ8PzPMBXf/8iEuGHhyOoQkUboe/yGr5UhNw2JG6cVDG5PRKRAa5K1zdjLbNuL140kZAdDpglujnZHkA2q5ZfqKnshmJ4ItfrRlX5iQl+x7sk7ioBXzOaGi8wkLd6v1tx+ib9y+ZS+MqT6KcoohAQiybUXezJW7FxIw649SD+cXZfemNLy4jPpNYBAPeRvYeWwtCC68hkMun01VQstSxV/Hb20AMAgPVLAe+l/FHWH37s74XFja33/imDY8UKnraRs0C3SrGlbS91B30M6FZbREe2kSMheeDMGHWso+w2zD5227Nc+WAp0b1N2U/5eWpqDG4W1VVmOJOrWkrDl7rmZdU7oCvnUjcRCiPh1V7JREK10+15HA4OgKrahNmNI2+/vfi1r41VXKsFVBV+r/5zLsvNzyZoUK4TVJU3Hk9M8ND/Ne1g9sH9O7VwK3D6ZpaWlpZm/SwAeMJLYY/2oACTibzTNzPr9+hfaFhPeLaK2nan77QHgCRMx6udxOmbmQ37PaavTizrGfO4bGZfT2UArVTdc2yoGwDufgggc3WZCHjnkN7j/S4ASILXGwgEBEEUpcryHfm+cgUoota8Pvf+O1XMQaFQKBRKszl8dBRA8r1V7ffVny+QAvijh02jSFS+8BiF0olsWxZ9NUKj6W3kbKnpnoVFVDMMR8LOFSm1SjPumHByYS+4SESuNY89EuGz2YmK6t28aCIhq6ps+1x//3CZZ5uNdmekwxPnq0JVefLDMPzEhPaz05vS2I0R+LznezxWYSgApy804wuZD4SWlvK/kw5wec0MAHAXDKk8CQA43b6Qu2BMJho0+cgdOQqsA1hPpfUEeXbgMd+4fzkgMg/rIXkj/R/IRC+uGGezLMswJwZGR0ZSUwFRwaMPF77KfAF+sTWeBeupFMp2IghCp4Q0Oyv6SqF0AoNHhoBY7NyrV56+cHJw9cqrxJHeXAC/euWFU/OWYxRKh6IH8fgWr9IutcqN62ei4ScmuOauXjH8bpnJEoe3U+/lgvBra9n+fqbq5QAtFC/bPsUwTCIBgLEN1LeImj5RVd6oUtUCX30jeF6qFr3VlJHrO/6PaTcK+JrIxKMLF0U9cs16/KfHfRVM3LRSe01LE5M4k7A2DTH71mXi01MXje5xLMsyTz1WPHc3oP76x9OvLUoAFHFqGk8xgJrKACkFwB0x4F32z874EJ3SCu2Ph5dedkWnp0RJhCT+4tB+Yw/TU8YLu/Nh4Trs2NkTH71h6mbHsp4TlV86hdJqwuHwTm+hTmgDOQqlcYg/HeZPHZ7PHzzzMvG0W5154dlzWkd4qt8pu4RtSKSvXms1JYu+WXn4NYpqK5ZE+uapd20+ouHLxt5tLmYkImezkf7+SI3LaYuWkujDw0wioTocNjXzDaKqyGb5wrV4WbamITTO668/bvGQ206+8Y1rnVXev7cFfHw6KBRknSuSKEjLnvBMyUx6Xb17wjM1NEwv6siuKIoyZxMK39cLZXHReEKRxLmDLG6n0vGUBIB9EAr5aOcD6ftS0WDeNS99awMA7vzMG0ia5k3+NJo55XPCcM1ftKyuKJIiSKlw3f3xKBQKhUJplJMXbp5PFrSCP3P5glb/fvOGrt7PXH6LdpCj7Bpamkhfk/k8zzdnM9sZn5RlWLLHGWabWq3VnjkvMwyXSMgNrFlSwzsc5H85lKiZr5VEgtdn5s3HVZXPZh0VnQLN2N6lev31JlSn10dxSL+z1Dv2tIDPRIl6Zz3+yXGf0wkSJRckRRKCA7O2+jw+HRAVoJzCt11pSlQA1l9gQl9keA8AGzkA7NBxJbnCjp1l3pmTlNtKLxCLAcBxZl9xu3ZJFEndvdPUDS6ZdHnC4ZDbicsveeeSwG3ddM85wvSKSg7YPxb+/nNuo//cdECQIAnem/7ZH9Zwa4JCoVAolCYyGHzr86evzLy6eANHj449HTxpVuqjo2fGX36x8BiF0uHYJtIbxd4Vm5Dr43kATz75pPF4YoKvI3meKJm6xYwsl9R1Nan68vFdYoNnukSc+VlVlSMRcly7f1F9+L044Oxw8Oa8bhNcNrto+4SJfBC+1f3eGIYxFdWX1PlVYnRHt2NieFjlOK4mDZ/LvV6qoVUV5z5edxb9TqXft5q9K+C1Xu0FWtzpDs2E4RWkvMe8xsdvBL2LSjdg9FMvRBEDXtHa6l2HRMvZEyP5BHWn2zczC0tYHgAOsritJFcA9sRTp3xfflcSJACKJAFgf/8LxjgSSAfZ0KTRv07vBtd97HmtSdzDusu9qnV4T4OM2Vi8ePXLLiNp/q7WXW7EXr3TNnLF0K1SzLT/RW7/HRrQrbaIjtnt4MnghWLb+ZMXPqde9JTdCQlRqipnHDGrL7Nzm6X8m2h15FuXS8ZjWeYZRmVKqM8y1K3hy6h31BjkJM5htk8xDPf224uq6iglUI3jqorz5ydkmam4rlm3W4RrNssnEtpx87VMJGSHY0xVq7rChnpX1TLCuErKJdKrqgow5YeVhwTebTfJMCCvl+MYWZaND0n1Mr5d6bDwO/awgNf1+6hVcLtHPZAkQ+4a3AWwBZffGpr/UNUelFDvMLLWxanpgclxt7NseJth2NuKAoAZcAIYYAEl1wvkAPbE8EPL+r0+p++0RyRN5MjNAwLrGVKkJLDV9WnB4mRYELMzPndoaWl0OihItm3tjh6x3xdtI2eBbpVioc0vcgd9DOhWW0RHtpGjUPYGRD8wjGxraGcR8yQmT6R7KZXLcZBljqj9OlRWHRq+vHpvIomE3NMzXI1sZhhOVeVEQi2fwVBGspqPEyU/PMxDU+9lJzVhjr1ns1que2OUFOcM0wQNb7kUjzyi5bqrapRcdiM/oqYgfB1sQ/yc4yqke7Qnu6qNXC1oUfGB4k5u7lEPACWVNh1TFhdv282SiQZJLXmvp0wDOufICRYAFEkIBLxerzc4HY3GM3ZD2S89ScYW7GwfALAnRixW+GeHzGeynvDs0syoFnD/TUqb3+mb9BScBwCuUcauhR2FQqFQKBQKZTshUlkXzHx5U3qG4QDu/PlzDFPGek0226SbJq8BIsirkWfVj2ycmpQzweGYMPIULMgy1tZUh6OqqDgZlkjwVbaj3ykYhgHUbFat49xEgh8cfP2RRx43/xTObKWJFoy9vf+pt/ea+acp05anvup36kK/s5Awd1V0A1tAWpyKjmgxeLMz3YGBcuc6fTOzAyYTekUSFUkUodeum+kzmuDlORpe+pEbQCZacJhkxxdG/sltB9YfNjW7Hz0KaT1vlF/gqGftP0eh7Cy0jRyFQqFQ2hDjWz7HoVkt2cicZv1gipbbL6GqfDYLh+N8IqE6HKU0FWe7Vq3xUlnmeR5mI3fLs8bx7dEzdah3AsPwkYi1iXckwmezaq2G8A4Hn06f6+pyAFXtRFU5QK5ycC2Ui66TT4WqqrbDjPZsxQzWZS9Sx0eL8I1vFEj0pjvbV0HnJc8T9riAL0qUL8Vxj3NFUvbvx4ZWHp/R/OwwNIRkssRZv/yR1ytoj1nWcyI8OeNKR6/GlrX+bYok8O+71m+lAaAXAD5NCl4xbWlKhzux6WC+BZ3y98I0nh33aar9huD1FrWxEwNe0ZLTr6XQj1wl/eeGPMfvqisKAdLyLw5lq7gOFEqLabc2crQ5HIVCoexNzNoVdjKbUHfkuUzo0pBDHMdbRE02q2U4E7syvSaZ7KRwaIkVa9owz4PcSrBcDdSu25vSow5ANmtYtdWPfqkm6ji3q+tcTw+ztsb39/PlR5LWbqX6t7caPZ2+UUM7g0bM5K5d004s9mvcKTo0eZ6wZwW8VpeeSgMWAR+PSbAm12v2cY7h4xvSiiRMP+KRLkkAPOGl0Zi3WL+/82YGAHKmvPt8nzaf2+cLIROPCoKY1tQ7QKzlsrYqOilJ5l830pIoSClN6BwYwnrS8kK2ALu7E8yAU6sd6EZSWjE/paRv2a1MoVAoFAqFstcojo0XP2s8bmJM3rKERTOrqqbeSdxdVWVABRiiQziOIyZ25aetL1hqKPm6qalHHcPwFh87c/i9SmM+VeWz2YnhYQZFQXgyeR0d3dbW1J4e8/JMlT52aI6DnZnKylzX8CogcxzXRL3KcZy5TANVNyy07blgzNlqr37TWg21jqu1uUPT2bM18FpduhSLW54g+t1Irl9PZgC9N7uiiV6i3gFIglczklt+xzTFK3O3tgBg6OzS0tLSrJ8FgD4AkC5G9dp018d3AQD7x8KzS0tL4eMAkDP0PCF1BwBw0B+eNWZyeY6TqWJ3AeDBAyyIWrdQWMYP4HjesW8LYMmchNlntDr5xK9ta/MpFAqFQqFQ9gQ1FY2TwvVav81XOb+5PF5VAXCADMiqKhPxxjATADiOq771eROLlltHsxq5Oxxq8UGjdVwjfnI9PfzaGl9mAGnqVnsTAHtK1aVXhGEY8iGRZZl8eOpYvWJReq1t4XfcuL7jGr9b2LMReDhHTrCiokhCEHof+EwmujAlSgBY/3gNfd4BQJmbjj+m9WKf0WPbBx42rbSObmBLD5VnLv/o8gYADH1Xa8a+D9Ar7Q3eeT8HAOy3faZQ+gMDp/zsiqgodz4BgH3/5gQrWXMJ9rvYjbQRgid3AQ4dcwNwQfO0f2rE3JP+0jo58dOP7F8fbSNXDN3qXqD8peusC9tBu6VbbRGdtVsKZfspH3gvC199KL5uCV0iOGmNhe4aVFUmqambmwDUxidsbso00fD9/RPFT5lasucpZUFfkyCvF44E4QFUbMdeTZ58g1ey1Ke1Wfc7Kq7eyP6rzDVoKXtXwMPpmwmngoKkSGJAMndTYz3hfD1535AT1xV2bAwkCG9GKzzXTOEkIaDnLXnCYQgkNJ/JZNJpPHaoV7mV2wIASfDm05u62bPfL7hTsP8Q1k257I99ncUtBczDZKr11CcA7vw9L26Yznl45AQrKlIsHnK7Sbs7YP/jJxxpURP1H94FgG5HPwA4Q0GPJEhQ5gLeufwk+p2D3J3iogKAtpErgm51j1Dm0nXWhe2g3dKttgjaRo5CKU+DoWlybsXc2vq++htBY1ssvujmvvEMYyPt606kbxDb7nSyDFXVjmSzMsA5HMhmsbmp3ru32NV1DsDW1mZ3N7e2Jt+7t9nb26Mb+HFl1lJVfmKCN/sCkLR8mHrvMQxXkzFeNmvJn0dPT4VTyjS0b1y3kz55teacW6zjCOU/YE2nVCL9NmTRN5g8jzbIn8eeFvAA3KGZ2dHowkVR0rQ56/GfHveVtbXry0tsRQxMDyyF3L6ZWUxPaZOwnvBkyP3OS4BFrFum6cV6Dk+cPlV4+AGHS3eSN/FLwevN/5bbsDztHGAARYu3fwIAvY8+NYBFrQo+8+4dANj3xT79Vc+eBf9jad0c6zce36nW149CoVAolNazuro6WJ83MoXShrQid5dhuPPnFx0Ox5NPar8aT6mqHIkAAOkJv+OYNbzR3Y1heNKMfXMzcu9eIpcDAJeLX1vjiWC+dy9775762Weu7u6uzU309zMASAV7eSXfakG4ubnZtCz5PUaZYvjW0bh6bxN2t4B3h5aWQuWHON2+kNtXepCTdHXLRIOLAOAJPw9BuAXPWb86JyqQhOnRpZDb6QvN5Ce5Pv3sXN7YrruXPfKHJ771lNanzfOMR7ok4fMDmm2dDnHVS2c/NY5k4tGFX2QBY2B37/4jR7957I+KWr65/w0LSREDXhEH+wCw3x53ut7YD3II3QBc/u8/p8nyTHRqTlq3vE6X69Dd9K0NeJ73UfVO2bNQz3kKpU1YvTLz6isL87EYAODM5c8vnMSVF+57BedffjF4ksp5StNpXmU4v80BukRCzuWyXV09tkbIJEgL4Ac/WATQ32/kcKtkk9sfSyQZAeaQbyLBA/zmJolvM+Tg2prc3080PA+gq4sBNnt6eqA7yRmR8+IoNAm/Fy+dzXIOh1z3zjc3bULuqmpN/LbNn28FNXakb7tSC9O/FN442KL7IUS6y3J9BTJ52iF/HrtdwDcb1j/uxgIA4GHfTDjlFSRIQnDA3MIt/sqzwoo5Rr6VU5KLOPDlEa1V/JFRDyTp9ieA2Sg+c3VZAXD80QdXbgFAfDooSJac/a3cRnIl9a2XfUiZD6eiwbyav70OdO8/lJ4OLBqb2AKQ1U/JRKfs2r2nqQs9hUKhUNqB1SsvPHtqPmb3VGz+3Kn5hTOX37pwcrt3RdnNNNvXrckavkx685tvLnZ1OXp7x4Csw+EgLvQWc3UidPv7ASCbVYkru6rKssxznFH2v31Knud5hpkgLdz0wPsEUJydzhka/rPP/i9DvQPo6WE2N9W1NS0UD5BMeC0UX0q9A9jcjDBMxHykJh+7oSGf5cjq6j9ks3ypMDLD1Kqxy/HBB3W2cKuGYtv/mqg7rG26i6Sd3oqkiSYG3tshfx572IW+CbhDYQ8AKOKUbi2fiQY19b5/jNf83cMeFlAk4XvLmm52j3oArPcWTEa6u3kehQIAqZ8IkgIcZAGA9c9qEwHEx54M1pBEEZ6zYyzAjp319ALYus4LEut55jjgCZ8dAgDkpIW4aSFYXejDZBjUD5t5iSgUCoVCqYkrLxzW1PvomTPnz4zmnzl8dHQUAGLzp56YWd2Z3VF2Ia34Nl7KIovnm3anIJGQ33xzsbd3rKeHA+BwOLJ6CH5zk9ncZDY3sbkJS4G3w8EkEipMBeH6zQsts30bxAnH8RMTkYkJ7u23zzkc/ObmRE8PY1HvBKLhe3om7r//PwE/KHyK6elh1tZU8qvDwQFcIjFRRr3bwjBcNiuTxxan9+KfWl+pRRKXuVnwwQfXKv7UunpN1BqYLx7fyAdHF/DaFE0MwnMcAL556r3xOZrDronAa05yurFcyQGe8FKoRoP50rhDs341ICp6MbwWRgcAx0NaxbnTHZoJwytIt8lTaioTGvVAknK9gCIuxH0ht968zvPIBxIAfPL+CgDW/21GnDOkutM97mclUVFSvyCd7kBc6MH6J0On0tNzi9JH7x7Qsu1Z/2Ro5Kp6aTn2rn6+JHx3YPaHPs2Sfv/YpLnW34kHyYN/+W/XcepY8UulLvTF0K3uPmq9UJ11YTtot3SrLaIDdnvlhVPzAHDm8s0LJweBKy+cM2Lxg8G33nqaROdj5169EmxSFD4TnZ5alrRLU4UVTuMnUtqLVtTEEiVcLIZluTkN0hIJeXOT6e1ljCPm/HldDDPQEtELliQansThLXs2HrTO347cJiDV71/72vk33/znrq7+zc0sgJ6evMAlRwAAw0DC5fpBNqtubmq7Ikn1AIiG7+mJaEOHI6pqVWuGGlRV3vY2weDgXzTjlRmraPnzFcPvrdbkxRQ3b28fzKF4sndLEyEAACAASURBVE+Aa3DO5la883y7hN+xiwS80zfpXw6IiiJORUdsJHx8gcj7WtvDVbksJGF6dHZgWQFwqA+31hVxIT4S0tLjobVu03EbCj5HMvAHYhKAvhtaf/kHvz67dN4JZKLLgKKIf/U3Hx/74KNlieTUG13oCeyJESfgHPVAkrQ+9eSYc4CBIkkoXN11jEVSwcZH6Qyczkwmk35n4crfStcLCvKLoS70FuhWdyU1XajOurAdtFu61RbRES70VxbnAYyeJ+rdhsGTF147nzx8Lja/eOXCycYVfHzaK5j/piqSKEipKm71130ihdIScjkVuNeUqfTO861KqjcqAhIJ1eX6EjmYzZpFO3p6HEa8OpsFwyCRQH8/r48s2Njm5sTXvsaQx2Rms2wzq8FGGr/b4nA4SlgPlPOfb08mJvj6vOhluWl3fIhCJpXqjSTSN6vivXhvzZqtQXZRCr3TN+lnQaLa1ufi04IEsP7J5ju06ctCEv7qugKA/fr/QXLdhYCXEBAkIo97ASiptJ5FnzvUB0ARA9q3gPV11uPRv11l4tNB3akueWlRlPIV8X3+sJ8FsH7XtA/XQNH3Mv1Q38GC/Z42bS8QCAhzZvX+vx78FBQKhUKh7ACr7yUBjI4/Xc6lbvDp8VEA84tXGl6PfDnIl5TNkr+ukhDUK+OafSKF0jgk/G4OJudyalcX09XlKh5MstAtB41E+mJkWY5EZFXlZJlreqjWLH8s0WmHA/39DuPHorTNgx0O9Pfz5p+eHrV8rJvjNCe/bYDoeVv1zjB8Nms92Ai1pppXbH4+McEbLf0qTaVF8puo3gk8TybkGYavI7HfnDPfVPXerJmawy4S8CZterHwD2gmelEC4DndGoN1p2+GlKcnkwDADJwKzYb9hhIHy3rCZz0AsA8gxnWagr919GzYGNc7FJ6dGSU18B+/EQwYHnb7e7v1qboBwPO8zz3AAFrPd2bACQDOkRMsQG4S6Bsjo9ijjxTs1zVQ8H/w3b19nrHw7KyfyPw7Kfrlg0KhUCg7wc0bMQBDR8q7zA8eGWrKavqXg/CMnvrudGt/0JXlq2X+FtZ9IqX9aGJRevHMxfG6picv53IqUe8VG5Jb2Nw8byjMSEQ2fgCOYTiG4QAOkB2OCYbhmlUbL8u8qmpB8my2Wqv2wcG/eOSRxwcHfaVK0wcH/8KoY9cpVpWRiQneqPw309tbQyr76uq11dVrH3xwbXX1Hz744Fo2yzsc1gk7va9clRoeQOtKLXiel2VZljm9Np7XxXkB5CAR7eRNb7p0R5slzxN2TQo9wR0KeyRBKsij12zXPeGivLZMPLpw0ahfA1jWc6KghI1kyHnCSyEXGBaKIga8B/uM06N683eW9Ydnl9zpaa8gEWd5t28cAJlcUSRhDgBw4OzSj7TG7ySLXl37kNGne/AAgA9VAMj8w+IWAE/4LIQ5aePAn8xe9DmNMv67saBXUuAJhyEYCXyZ+FXiM58DgMyb72R8TqfWRi8+nW9Hn/nxueAiaTTv8vjDIeOeRubXnwJA79ERWsFH2TvQvnEUyp5Fs63xjBZ+OdD8ZpavZnwl7vrXfSKlDWlWUXoxTfy2b85tTiRkgANU6IH3iqfrdu5c8VORiIzCvvEWhocjAHQF1WhefSKhkgnLNFqrwysOgMPBJRLy8DBnOlZQDM8wDHkJkUi5ecrXpWezKgCHA9ls1kgSsMh1h0NV1UhnJc+bIRaA1eTSNz32breEbKhx27WMnIKWtnZvN/WOXSfgjT+ghjucVvxeLN9t+rQpiqTYlbClokHBaL12ex0A7r5nrn5TFFGYwuzkAAsoSiqN+EJxEzgAybnp+CkyeSZ1A4CymDepuy0JgV+TuwP35UDq9R9eMJ9eYD5vRnfwM9i6NRcIflJk55daCIr5baUlMaBCH5T+zQYoFAqFQtk5Dh8dBSqWt2uF8kcPN7aY1v1l1Hpz3znAaH/LYa/D6z6RsteIRFSiOgzdSwL+DYoN0i/dot43N/Nd1qqhp8fx9tuLX/vaWHXD82K4ejHD81bRtblZrga9PuleDYbULLVzIwj/wQcygFL2aQ4Hk82q2azDmuJPzuEgy3w2q+p3PWxnqHrTAIC1NZ486OlBcahfVZvcbs2A3DMijy1KXlV5hoGqqqoaacXSFoz7ay2V6GVok8bvFnadgDds5aSL0XG3D9GLkp13XXxakBSA9YfzZuyZ+HRAkEBONP3xlUSR9YRnQ24nMvHo9wTxNrBySWI94Unt2JQgKoq4kJ49wYqKIv3sJSlZMHne68aY3DnwKLAOAD0PYfNjT3hp/MOXXpxL5gDgd2xfWVwzn//NR4Vl6h9qnd1Zf3jShwWvIKEXyOXvYeikJQmsZ0iRkmDHzjLvzEmKyQaf+N9tfbROv3lQKBQKZScYfHp89FysvIJfnXllHqicaF+JTEoFwA4UVw27BlhAUVMZ2JrK13ni449bxclXvvKVX/3qV5IkFY2lbB/f+96TpHd6K3jyyWeNx8YbXd+KTz5pPksBqbiEfWDnv/wX2/ktB5+0O1huC/rgJ6v80D75JNl2qW0Ub/7VqjdTjFQ4ubYFcuTJJ7U9P/kk2VHF/ddxWQDtbSr//tb67psvYDVvazVU+fYZS9t+cqr9GDRI4Sd/B5Ck/OenPjweTxP3Q9h9Ap6Uwoskjx6MqNh51xEtzPoLW6kZfdosd89Z/6TmJ+90j3y5V7ydAw6ajpH1oKYw/th+UdlIJgG4SJ+2TCa6MCVKAFzHXOnraWNy1+8fBG4D2PwYgCR4TR+M392PTzYUcSF+VjuwTm4S2L7cu++SXL7wjM8NEP++A57jOWlFisVDbrOCZ/2zMyNXg1JSURbfPX3WI81JUFPX46nXjMk/XfvAdhXaRq4YutVdQINXprMubAftlm61RbT/bnUFf+oJXH6t2Il+lTSRAzB6/sXmNJGjUCgUCqWz2I0C3lQKLyr23nVacTghk8mk01dTsdSyZJP2rvdp03A+sg/IoffL9qXiDzkAkoqeXgx4F43jvX0H09fTpoGZq+/cBrrMLT9Y1nPi8bvipRU4ho9vSCvQS+cVkRcAsP7wiWVBVNIbW+Yl7/zaJpdv4DtLSy8X7Y4ZcOq3N4on/5Pf/s3f/ebzz//VXsDTNnIW6FZ3B41cmc66sB20W7rVFtERbeQwGHzt/MLhc7HY/KnD8xgdHQUAJF954YVXkvMxvSP86PnXgo3F3ytTdyp8iROvXbPW1t53331oTXCGUj2k73Tj8xTXDHNc3qm7aDDJfK4tl54skUjIH3/c3939pXv38NlnMnnq/vu/3tXVBeDKFQnAH/3RfeR4VxdH0uo3N/M18GtrWeB8fz+fzVqKxiuQy1WV4v6Nb9iUkZtbx21uOnp6HJubMgBLZX6pLHpbnznDSN8opyevyDCcn5ggk9u6CfIAV7HTOJmKZIxPTEyQimuSuJ5ITAwPM6bZNCo2MFdV3vyRI0nyRmf7WtB8BLJZ3uGwJrrbUuYzWT075eimr7gd65LXiNI1FzvO7hTwhoS39a7TyMSnp+wK1RvgnQVRgcdzXJJWHgDMie659duFQ0kJ3Rf7cGsdrH8277i3fGlFwcB3ZsNfWrioF6zvd3m+Gw65nYinAAXZghT6T27DPpevCM1+3h2aDQ/kJ+/t8wT5kNuZmf7p3/0mB2xmaA49hUKhUHaIweBbN/HCs+fmY0BMk+yx2HzMGDB6/uZbLZfvVf5dbeqJlJ2g8aJ0UipcLJ/KKCXd9oxY01Vb3KuXJXOAurW1BuD++zkAXV24d6+gA3xXl7buvXtyLoeuLhSr92pWrFKxV0SWbRzReno4ouGLsTjJZbPy8LDNMKKfVVXzlgOwuZkl6rqiROU4WwM2Tn+W6PC8Qd3ExIScb8KmqqrscDCNV2WvrfF1SXdipGc85lGicd1uwqSo+RYv1I6udRZ2q4DXS9FK/R0tsH1jWZZhTgyMjoykpgLFiepanzaNI0eBdRwYsJk0dV0C2IHxY4eklVv6wQqTwxLh13G6fSG3b3TaK0hgvxnW0vXdoaWlUCYaDIgb+m/xaa+wnt9jQW4B9GPkbsYDhZOPk2vw1ee1yQcOADn2m09R9U7ZQQRB6KCQJoVCaQWDwQtvPf3ilZ+/+spCMpYPu4+ODo2//GKwKLGeQmk+xJ4dAMOgjBysxqy7GI7jSJyWnGs2S68C+fPPh++7j7v//h7o6p2E34shSn5rS8sINav3bFZ2OLhSazQi3V9//XFLEF5V80p4eJh5881/Bhyws8cvNoGvmCbAMAAYfSFVj7qb4Yv1GM8TdzS5KHhOHti86cYRWeYTCfncuYjtfjiO0zMsSm2YTyT4zU2gzsA7YN+Ej08kKoTiGw+/Y6ct2U2rN38PunRv38C7we4V8OXQOstBs6bLH081Musn768A7IlDV98QAQBDZ5e+f8p28kw8+rNfAsCtdQDZf74az5iL8fHJmwGvCE94afQuAChiwCuyHv8kafq2nrwDAJLgVVn/6acAkOby2gyZeDQfXgfr8Z8e9xXsMz7tFSTWP/tsypjH458MHUpmAGSS66D9byg7Rzgc3s7laBs5CqVNGRw8GbxwMti6BUp7xpMUucKb9804sflYVF+rWzrtbmQZRuo1CjurGWIe+azsRqko80qxuSn/7u/it78dAgaBcuqdcO+e+tBDY0Qn37v3A5frB8ZTO9WuvLe3hxjpo2yLO1Sh3htBlnnik2/8O6pG3DalzfjmptrTE6n7dHP4vfA4jxaH4tvBkr1FofiOCLwb7E0BT/7Gsv5xi09syT5tVXH3FsCeGPk0RfQ7ku/GcSqfv69P/p61f93GiiisLHvCMyF34Q5S0R+tGL8opOnb6VRAuG4cU0Th9WMuwPDGK2qOp0iiIC0PDRXtNrXw11JO/2VgxEks8SkUCoVC2ROU8owv7TLf6IlNhOgHi4oo0y2ZUgZZ5h2OCYdjopSctoh5IyZfNvxeOdRp0s98NUH4SITPZtHfLwN4//3/G/jPXV24dw9DQ+Zo+auAdiSZzEeze3q499/3P/qoWH6JBrGtfrelv59ZW9M0fClaqt4JRAna/msqhvzL0v998WUEZPk7I4kE398fWVuTe3q46rdq4HDYht/N8LYanuPyXdPrpn0kbhND8R0UeDfYmwK+BHqftpK9Y8qT07LhUwDQC+QKGtLpk791STJ70B06O/un704JkiIJwYHZ0ymTF70kiq5Dfbi1Ds/Z8MAbgqgoYkCA61Bf+tY6cPwZ/51LopK+3t0HrEuxeMiVIuqd9fif/cIyv6jAczaMNwRJSSatm1UkCfv3Y2MDHq3vPRXwFAqFQmkrVldXSz85ONhYLr1z5AQrKkUtV+MLolKiuK3RE5tCGbFhforK+OrhOH54mKnoZ0YgYl6WZVWVS6n3KpWSnkgPgKuo4Yl6dzh4YvP2yCMAKmS537unAujtZTY3eQC/+7v/eW2NN/Lny2vj3t5rtln0hWZyvP5hky256OUh3dSJhgdw7142m803SM9mZfKgVvVed1N0IxRPfi2V2MJxBfqujHtCmfSKRIIncXJiLlgHldS7trtiDd8k+7pGJmgyRT5zfKmRJU43Zugk6U7YmwKe3D1XxIX4iJZCnynTp62GeU+MOIEBFlByAKD8/UtecaNwzFbhr7fmplKzM2F4BUkRA0LBc6w//KepgLAOaS52dowF6f+TvkWk9r4jvj/yiIKELacL62lJ+O5HB9MAPOHJ0dSUQKzpT7ndp8LQu9AXzj72JBYXN4qfsIW2kSuGbnUXQNvItSd0qy2iQ3a7OqN52JXnzOXPLzTUSk4T4pIQRJh0hs3Eo1OChEoyvO4TG6aa3F1DxlMNX5GiWx58lSeqKre2tgioTFGwtSajbzKM1MOrqs2A11/XVPQjjxDRbv9lzJaurgiAzU0Q0b62lgVglsrVYGv/bkFVIxMTkVLPFjvYMQwSCQDo72cAZLNMLrdIquIBOBxc3bn9detTouPIA8s/HItub2Q5Q70DcDi4OoLwpZLn7bCPwzdC+4TfzRhbsjwo3qlxpHN1u8HeFPD5VmoBs7LV+7TV3jvmLgDg0Dd8TgDa5ACwUYU+VsSA1/jlQdb1iZLWtnNixOke8bOSqECay7ekO+g5flvK59bjgaHn/Ru8qKSv3waQf1G6Ab971ANJQqEtPtgTww8tL6JaaBs5C3SruwPaRq4NoVttEZ3RRg5XXrjv1Pw2reX0TYZTAUFSLN8GPOEZkxmM5nprahhT5YmU9sZyN4Tj+Ood6bJZvr//PABVtWr4OuKchqddjW52FSi2mu/p4Tc3+WyWqya4XY10rwazg50tDgcAR4uz5W187EqMQ/X3cfQ5bcZXcw+i1iB8FcnzJWk8f77dwu/FFCv5ogHWkZ3L3hTwRa3UWNZzejLfp63WHPoP7wBA76OPmSf/a1EiofLu/cdf/P7LbifiL3mFJLB/bPa157TZrb3sHkC6cGqnb2YW01NGzzcPfzH06bS3MKLe55uZHZjmBW3B/MvR9jM6BClpEfAUCoVCobQZqzOvaOp9dPTM+PjYkSOlxx4+3Ph6Tsu3AeQNY1t0YgPUZJ1FBtMgfE00bupWt0zSQ/G8SQ3yJcbWQzab7elxALh3L9s8qayl/TMM0xR7806kVCK9cVPGOGIOvxMcDi6blaus3UC1yfMFuyNB+Mbbv3eWwVun7LMRdq+Ad/pmlnzlnnf7Qm5fccc1cxc2+55sRccynwAAclLAa5OqDsc3v6M1gfuWB0kJw1/O/4V3ukMzSyFAF/eEAw9iPW9k6/SFZnyh+LRXkHBgoA9w6luIx0wTjR6FtG5UtBdyAAA8z5u/WjADxwqvUN+QE9cV51CfzUugULYL2kaOQtnDrP58IQY0ITu+Buy/DZgHlPg6UfFEShtTQnQZtzysT5WGIUF4UjFOyg0tRYfVW7txpnTtmkTI6mpUl3YS7JqxbW4CUAH09joqhsRrpY4Jh4eZRKLOYHKJPcjNahBQKxwHgC/+zJgr4YvVO6FKDU9i73XtjldVXpa5vaPe9wi7V8BvH8S3pjSfWJrTqakM3CApeVa9/VsFwP47tzaQ7+9mlt0ZMeBd1tP44j+TAOATIBOdnhIlAHjr//vxuPs5J/RjCgD2oI0euvtedPrisqQYKQhPPVbj66ZQWkCr28jRvnEUShtz80YMwOj5F7dLvXcOdXSuokH4UpS5mNXUw6sqPzj4urkcPZcrNbY2eB3oAt7Wgag4uX14GImEajsnEX737m26XF8ii2SzfCt6aJeilLYnVnZN0fAV7etamv5dpqtZNfc1KhbDN5I5X+UeykPVextCBXzDEHt528j3dd7HX9/KJd7I4DknDPO8VBpwDzCAAkmYHp0NuZ3xGAm/bwLAxvon2gRa77jyNXVbSSFwXc+837q1GAg+NHs6Fcgb1ym3FQCuws42K5fMvUQURZpTumt85RQKhUKhNJ2hI43Zy1MoZahGiZAbH6oKc0m84cr+yCMt2Rjs9nbt2jWe5yMRVCzOHx5mAAAKUBCtdTgYhoFqa5EHqCpPTNGIs12tnmfkQk1M8JHIRPWp4ATDyi6blR2O2s6120m5Z7dBgtp2NSOJ9ImEbBt+N+jvt9fwRLpns2hEvavqBMNEan13TFD13o5QAd8oRL/3SYJXKrC4AYC+L+7D9S1sXLt6+SNxToLnrJ+Fokix+HjqoqavLQ44AFz+Z35fvLSC48947lySijvVWNm4Dk94NuRG9LsBMQ1AEQMCWA/xxs1cfik4l9wCPv1XfWd3yH/0ETCb8H9iuwSFQqFQKC3n8NFRIJZ8bxUnqYbvQGpy8N4pqjSK6+hufLqYtyGblXM5NZHgya8OB282pTcdB6rW8zyPSKTks2XcAUkiPRqLEu9g8rwF21A8x3Fvv13ZM7rY0K7BwDuh2GSxJtrfuG7PQgV8gxD9PnQAyXVAEaeiI2YJ/9A+YANIi3NpAJDmSNRbEgLk+d6jxx0fr6RNxnUu/+wPfelpEcC+I6E/8kiCpOXcl6T72PNEh4/8AStq2fyuMaLeM9G/+tsk6Vz3wO9lACeQiakA0PfMTP6ugNPtm+GTPv761kZyHXbxftpGrhi61U6kuZeisy5sB+2WbrVFtP1uB58eHz0Xiy38fDUYpAq+kzCke3EPbY7bSRn/+OMFzcyvXavNWd38ckp9EWo1dbjimfU5kW8MwyQS6uam2tPDdXWVDAhbjlfsQ0b2xvN83SpxeJh5++1EfeeindS7QXEovhq3eXMxfOOBdwLDgCRekESJWmtwaOl7O0MFfENkohclAJ5/e0AiKfDWcPkD5c/P3VjR6qbYoSElmQQODziRd6I35dyXZt8XNd85p28mfP20kMwB6cWA13K/T9tK5uqvcwDwqNXal6QLbCmJDI4VK3jaRs4C3WqH0sRL0VkXtoN2S7faIjqijdxg8OUz507Nn3v2hSOvXaBR+A7B3E3d9iki47cnmm1R7NtJ9WZ1pWgk4KmL9idh0uHZLJ/Q1DGXy2329v5xrTtKJHiHo3IonujDOnrgqar8l385FonIAMrXsRefCKDd1DvB7GIQiWB4+LyqqgBT/iyHgwPktbVsNjvcuDUAqZsgN1bq6ozAd3Sb9F0PFfCNkLm6rADwjB6BBIBlWUWRhOnRwnL4boDEwI1C+Uw8Wth75vS4DwveJMAWFqrXjPtbX0VSMi3JDh1SkrdsRq4IXq/NYWz8Jg3QNrYUCoVCaTGrMy+8eqP48OgoYrH5U4fnMTp6Zmio5OlHX7ywh8L0dQgkWd4OB7tqdmUo/KbspxGJTpp+Nb4HFDnJNd6pqwwMw5cJhhPprov2grJMcnBtTQUin312D/jjzU2+p8d+HlvIDBVD8Sj7ES0Vnjfi5xMTnCxX9qIzn8gw1V7sncoD1wX8BCAzDAAV4CxeBMaVIfcjAHzta2OqKldU++Uxq/daoYH3joAK+EYwesvEpwGAOT154mJAtEp4p392ZmDBmzeVg9M9MnBRRL5mPhMNmivh3aGlpVAmPh0MEJH/y5/FM98f97OSxe7+AAD0PfBOwNDi7ME+fUmfMxMNBkRDvStiYHpgKYTU7fIval+tV4FCaSuozzyF0iHcvDE/P19uQCw2H4uVfPbM2AXsHQHfnnRca3pZruB2VgZzgD0S4Xt7rTM3TinhxHEli8xL9ScjrK2pAHp6GIAHNnM5vqsL5qL36reWSPDDw/Z7M1N9qrYhWU3zcCQUT7CIefP4mgLvOytHGf1OgyzLqhqxKHNDz5tfLMNwqirXbTtH1ftegAr4puL0TfqXiyV87WRIlzmNXFIIBD0e66D3bgDA+m2TqldurwNVWNHlQ/QF2HeRp1AoFAqFssPUFITfhvB7fV/yqS1WEymv3gk9PYz+oCeX+8utrbP1reVw2GcByLIs63cvDB8Ey6e02MeuVO26cZAE5M1PVR9yb08MGU9+Kz+4Pg1PpLuqgqr3XQ8V8E2mQMLXmw6fiU6JCgB2zPPpopTW/OgtZvXx6UvrAMA+MzvzZ1rOeyb+UkBIAsSKzumbWfLFp7XYP+ufDbmBzEAfsL4FsP7wpM9tnDgdECRIF6Pj7rI96ygUCoVCaQonL3z++YWd3gSlbmqyxXr99cf1B6+//nrNZnKNYF6rWfnz2wlRrcVZ9BXV+9qaaqh3nTe7uyNra3x/f7kTS2Pdg21Gg/mDYTwgitLQ5BVD6CQgX9cmC2i3G0YmGc+VH6lreFR5HcoH3sv72OnSnRa9dwx7RMATFVsmvmwdQCLg1rZwVWGS8LMDtW40k1yHD1ppfXjmqVRwEcC+I6Hv+FU9JJ9JrsPnJPb3AJgj+R063V9nkVSwlV0rub0HSY78/sdG3OYTx/0HJfG2IvLRkR/ZvGbqQl8M3Wp7sp0vtrMubAftlm61RXTWbinFGF/BywhREgXd2fC7Idd3hDJ3B5oVwp2YsIaUOa7xLPpywc8yWfQAsllsbqrGr+m0+tlnm/ff35/LZbu6HIYLeldXV09PdnOzoU0aGp7jiKcAVzyIfPwsbQVVlWMYeTuj6DseUi6VMkP6w5OHZU4nefXVyfgKgfdSH04q3TuUPSLgtxen77RHFCRJ+ImnHntiYo3H+sfdQMoyZ36UO7QUhl5Yn8lk0umrqVhqWar47ezU+fC7XkHaWAwEHwo/O+L6NH01Ffvn/yqt3AaAvn9vf8eCutBboFttW7btxXbWhe2g3dKttohOcKEntnaV3OlWZ154dSGZHH/trT1kYmdg7tZW3LMNrZfuxlq53Os70lltO6P3ZWikdXkx1QSKzXcNSPidlLgD2NravP9+c7Myx+eff/DZZz0A7t3L5nIA8Nlnb3/xi38MYG3tXANB+DyyLMtyOXlMvNjNRziOtxxpKe2cEF5TKB66jGcYGxu8OireyVWh0r1zoQLeHsOerj7cobBHEqSVRBaAIgY0jzlJ8BbkwStiwLvsn50pXCmdUgAwA04gYzpMWsoBcA5pbeNw127SanZ3duiXc8mcIgq8aHnuqLW7HIVCoVAo2wOxtavkTjd4BPOxGIZuYu+a2JVqur4Te+kkiAt9UxLpdUM+bapGLOjLB4rNezZreJIhv7mJe/fU7u4v6cMVAJ99lv2d39H+cXz2Gbq7e+7dkx966I/JKT09aDwIPzHBy3LNCnnbw+/bt1x9mELxqCUaj4kJLhJRAdRU8W7W7QCV7h0MFfAtQpPwG61bIRP90YrxC8uyDHNiYHTkwYuBuQpB+Ew0OJfMFR7rcx13bq1cr2BQT6G0HEEQOiikSaFQdoDV95I7vYU2gSr2naXYm60+apLBExP8f/yPf9Ld/YOeHiaXUwF0dTGWMfffz5ge9/z2t//wO7/zOICeHoZk2vf0nFtb+8v+/h/UsVuGAcBFIhMTExFArulc/ZXydaxb40JtEX6v5oaFcd/HUPJ6cN52Kk3w09eg5gAAIABJREFURyIRk25Xy55C7i5p+RKgun1XQAW8PdYa+Pi0V5BY/+zkwMKUIP3/7L1vbBvnne/7dVF701g3kW7WVm6HPOEYkrfHEZDAbTRHzGqr6dk9hpQbRlgwwh4DZdoiK5vZi0sTuBYOlgGWF8gUC+UFTeBuKamLtpkFdHplIldlT+zru3v6qFBCg0oqJAvWu40FPewhx4jszaUdyE6O3Lu+L56Z4fCPZOoPJVH6fRDA4vCZZ36cvCC/8/vz5QBkNTASNsvNjY9zgJ0LF77uiinhhVdcIebTGFoAUzi72g4ViislGznrulJXOz4tbSargUQqXqum3UiO6kJud0dSr7uSsVGd6WC661gbUMRTT8BIxkZtr/mus6nvD9gncgBdavfd3JzVD7l08Mbhu1t3+whio0QikXWtJ9M4gmhmLp85MFDlJDcxcGBNdzmB90RnIyLa01Q7qG9nObptw7aXnjtsvpC+nkSxUwf+5CfRxx772hdf5D777MNDhwbXPvFf/3UGwO/93h8DWF6+3dLSKsbaffFF7pFHHgFy6/Ubtwq2+zyemY2luLewCGLtq+wGmbquD1ut5J3Yx1YZOvCQU6LRvl1yT4gtgQT8eshPlSQx3D1CWGdiIa2s85wzXWOzaiQeFhJeH00e87wP2OodQKG4AoC/+xEqWs7zUyHHZpzpwRyEyheV9fYG9qvD+WRIsy3nCotFALj1M1/QmaHIvp00BvySfeIhZNmc433wwiIIgiAIYjvpH780PFEt4etg+PX92AC/NtX6fAdxuqbvKtblxvdQrEL6mb6+mfWeW//8MFsHioT/hx9GARw6NPi735kX/fKX+5zrhW4H8KUv9X3Z+qX/5S+3Cg0P4JFHPMvLt5991pMzO6o9D4222qJsw4Kw0YX0TVE8vwYb6MV46Cmk3vcYJODXAWdmPr2kuY2kUO8twLI5xN7IxEY1xpkWcifipoT/vtDXpTz4fOyVKCti8b9Yutp5iTLzOM71qYw/rNhT5ythui6rkURYkWBkYuc1tgwgm3WpkUhYkXDpL31jWeCm2MU6qcpG7u/+PHhxCcCHvzagkI8cQRAEsS30n780jGnzRTY7kU7D6x3u6lrjlBMnBl94oZ/ku8WO6Pa+vujMzEZc2dZlPtcgtlZAWoPcouuqDN9Mjffycq6lpQ+A6Jr+4gvYSl7g1O2r8eUvt3744cyzz/ZBTDC38Hg84pVl/Ga+tWF38WocHzy6JRs6dqbBbMS+YG8IeFHwjkp1XcJRlb4p5MBI2f6Gafj28nPsorW1pITjEfg0JpS3WUgPADjyhHViu7sVKMqBSGW4ciAR9yP5EdP53MWc2g0+h9yvL8Umx8pDt0faAXJgRKj35KhQ7wAOnXw1LHT4E0fMM5j2mjvxA7/LLOSXT1k2ckYmOaoJT3ngs39cAmrcQrKRq4ZC3Q3s7EdrrhvbRNFSqA1iV0bb0T8+3m/+ffnMxEAaXa+XjhC7lGh04zJ4x7XVFnZiO3V4NFr/Q411i8y+Poj0e8UQcgCPPALH/DMGYDX17kzCC3I5eDxlytyp2IFVRfsmH4I4mrGjm9qobE/KMxP7hb0h4E3rdc710WRPDQmfeXdrfrPIvT1le1v63Xsc5fJa8apgDLm8AUUZGmxj00UAuPaxYSjSmvltj1sCYH0eUebOp8c4ZFUFK1XXO2zluB70WcPkZbWLsyyw8uX75hGH0i/8/Irh/144pDKNgY8FfWOl6x4CVgDg/7tb20GebOQqoFB3CTv40ZrrxjZRtBRqg2gGG7nOE8PDw6Dm9uZAVI+vK52+G9Lvgq3qxHYqxloTwuy3yo5vQGTOzJhzyG/fjlZPrasfp4Zvbe27fXumYvh5PWn2rSph2KpU/G5OvG/n4P3VaPaeAqKavSHgnRK+rFIcAJCJaaIdXJS41yQT82nrz86LfnLZ7Sr5tZsIBc/zBUCSvhc6eSk6vwIsXQwGLwKQ1cG2ezV3lN0u8/PEE+6YOS8PLV2RN7+PqfL6ASV8touN2Y3usqyeHgkrhZhYdSNvlsJL/hH1SpAtOU9MnEX0R2xpxbFb6e97Rs0UPEEQBEE0lo7Q+PhOx9B8fPDBB/VX0W/h1LqNJeF3j5DYvLKqqYtqCvUt0ZZ9fX1//dfnnnzyAoBPPok+8sjGN/ziC9MHvrW1zy6kr5+ZmZmtcnTffCp+lyfet+pREUE42SsCvpSSZpPJIaWsS31yk3XzJUR6vMZRxZ9KhVc/72Q0mcjERieZWb3I2bT4I18wIEmA5I9H8hWPECQlHE+4Q0Gd47mXFAmZqm1FdXz5Y4kCAKCsNl/yngBbAuB68ZQEwEiOjtmC3vaf68mPBnUO9dWaPQgEsU2QjRxBEMSG2c6p8ljnQLiZmeiumj+/mfRvnSnfLVeVjzyytftthL6+SruyzeNsQ6jzntk3f3cm3ncVu/kBB7Ex9o6At63Xy+roTdO0ri5kK2xjjUxyanKWlTUE3vq0fA3XgzF3KuxKxn7IAID9MOZ2Ce84h0nbe5cvDSkD5bX1mfQ1oNR1L8tq7+mReFiCkUleTc+a1+VM09B9sOTmhnuf2R39aiQVFul4vP9Dn08rRZn9yPBLFddzPB4AYLxbtcR650fnQubTA5caiIRtuW78+jYAvJ+mIXbETrIuGznykCMIgsC263YndlX8GjJe6PZdpd4FG0v/bn/K175Ua2ur8H578snohpPw//qvf/3IIxtxgIep3mf6+vq2vCq7VgNCmZ6vakNoGt2+s1X0VD+/J9lLAh5QhgIyc9bRZ6Z0DqiRl6CV6fcq6zdBdiyWGaiosi8zabspbN1O54OObPnK/Nho8plS632NzTlnXGP5SCqsKH6/4vd7rZL9Qrmb29L0jzPf+xMPwMG0mPfPfmsAwPJN55rl+bFg7IlS2v1TZ4RmSItjQd9vqjoG8lOhkg0eCg6POqBwo1h1PwiCIAiCINZkZiYajZr6vELG2wd3s4QQarxx8+c2j3hKIvLeHo/nww9zra2eDe/2pS898sUXOad1nBhlV18kMxswOaufagHv+LtpFHsFO1tFT+n3PcmXdjqArUXyjwRkAGwyaVjV83JgqKLxPRPTGAfkQCSRMol0i7fEiQ6YrkONJCIqAMhHAXA9qDFZjSRSqVRisB0AwPWpTPnmAAA1kkqlUomAa5XNAaBFjaZSqVTqrOmZM5fOKEPickz76aKzT10eHLRKix1b5d7WHR9GnNnWVutyBca4rHaJrc6qsjPwTFo8SFi5swSCIAiCIIi6EQJejLVz/ieO7H75EI2K8n7nf/ZbcB7fQTmUy0U9niiA1lYAePLJ6BdfrDuS3/0u2tJSdpY1yu7hOJX79tyHaDmNvlzj2KkkfDPfM2It9lYGHnYrPNdHk/Do3DR+K+sfF47qcqDkgg7gsPmvmDvnWC1M2jJpADjytMxvctu4DZBOnZKndQ7g/cvzhnJSQubvWelM8eRA6vmWrOscAJ//CGai/q616jnvSQAOu7dc3pD84UTE/TdxPWu6wrXL6qnTf5DX/s/3AHzlK/j8c54vwA0AuHcTgNxrmsJ9esvcvdQab6TftyNKxHuuhliW8+nfnD6rsjGGXH4+k3+rMoVfBdnIVUOh7jg7/rl2PIB10UTRUqgNormiJZoOS+s2K+X53qj1x65L/Ho8nlwut4FC+mr1Xj928fzGTt/nWA8gott7UUq/71n2nIB3tMLrHFBPV89kU8KOiXOGYRQKV/M/u7bKbmXOcYd/3wNw5zHJH3/5iu/iEpbno0Gf8zw1EvfDMDKFq/l03vJ0y475nN5taOmKVM3FN0fXK/7vT/qtdvhX40Mu4xfzKK4A+PzzsvWPHgVucn005h4ZUgrvZgFgpXY5vMctlYb9aSIQrkc1AHLgbNtPx+ZXVopkI1cXFOpuYGc/V3Pd2CaKlkJtEM1gI0cQu4VdLnsqNDyAtWX8734XBUDqfQfZ/kJ6Uu97mD0o4G0JD6jV8tjEyNgebZvl+AlgCS1tWDZVs9ytHr7BrPl1ZbQAy46/XH/6F6vEZ/HZPaA0C68mZlkAZ1qw9iLJ+xwYA+ASHnVKOBFxT01a3fAt7WooGlYkI/Y2sILbn5CNHEEQBEEQxC5BdCJUHHRqeABCxgPfdK4Ruh3l0v2LL3KPPOJZz9Ur1TvNRdsY2/kAhP4f7W32pIAHXG4Z4JapekXS3RrzLqj0URPYvm6mc5y5QSa2mpA+8mJi0hxPHwrq1sS8ys2fs+rahe/8QccGSjhlmsY54hydtjvSZbn9Hl9agqv72M25xRXccnwqw1s+hB4A2N/GvC5R6G890LAvJyn+sOIfErfhuVfFKriPAMuysJojiB2CbOQIgiAIwkk0Wlv7WRoetowHGBy6/ctfjtZ0nhNd9A9FSPeZGVDufUvYtkJ6Kp7f8+xRAb8WprMc1Egi7DRMM/K7a/OqrTIxn7aEg1996jAWV3DrY8BK30tKOK6EkXnDp12XXYd4YQnAEtNG3Ym4XzKSIa36uYORufKuAZjpfVlWTz2z7hAJYsup30aOPOQIYs+zsLCw+psdHR3bFwlB7DgeT9SeY+c46AEgUvH2wZYW1K8Sb9+eaW3tqz6+Wtk8icPNsA0anv4H7Qf22BT6eijkOcSEOanG8d2z+Wpb3blbBIClf8pUnJBJzwHPnv7BqyoAtADgs1erx94DokxAm3aMuOecjU3XXksQBEEQ28fC5fiZ5w8cOHDgwIHOtThzeacjJYjtZI0suMfjAXJATrxsbV3fgPpaHnIzqzW9kzjcJA0V8KTe9wn7UMCvgphND+TyDdCx69v802TI5/Np79d8827ONI7P/jwDwEiGfD6fL5YR11C9Vlb+aHvVqUZWFORnYkGdA65j7YDwuktEAjKwAqCQJRs5giAIYqe4fKZz4NxEeqfDIIjdhbDlW2OBx+PxOIR4zcp5AF98kXvySU/t9wCYjwlm+vr6VlHva4dJ1IWl4aNbuid21uaQ2E72YQm96I/n+lSmx6xyNzLJ0Yf6qG3f5nd/M8sBYPkQsOLc6i4A3LS3+sd0BorS0yvrnDPtlQ9h6neRmV9cghg7j4pnBkZykgFQIxH3ZHBRHJMUf/x/+YeX/o8bD373yb/UDIps5KqhUHeW3fChdkMM9dNE0VKoDWL3R7sQf2NC/OUdHh46MXj8+OprOzu35ppGMjY6a42RkdXA6SG/8vBhMGKUTTUlD1eC2FpmZqKtrd+pb22utfU7t29HKyTiGupdFMwDWKPjnbK7W0jUEtxbIuPpf81+Yx8K+JKPWtnUdjkQ6Z3VdF5lBL/tm/+WcaiqyhhrAZYrtzp08uyfFcd0DoClM2FF8Y8EZoM6LxZRMa5erjmE37g6y02P+qtlLcRPd7diuvjg80LNKfRkI1cBhbrj7PiHaq4b20TRUqgNohls5BbemUoDwPClB+P923LFSh3Oma6x/MNFuJHPNTIsgqjJs896qtvgq7Ea47/zySf/6ZFH/lNrayuA27cr1gBALjfz7LMA6ppU55SI0SgqKgL6+kg/rhvHLY1udAexyW43PiS2ln0o4Kt81GRZPT0SViRk8gBHLm+gjofvjdt8CZDdQ16VMYYuVb3LzK3aW7C0DKnrGXce4ICl4CV/PJp/JcrKvd+7zsbX+P3B9aBPF39WeNQVb2zmAQZBEARBbJTr19IAvBfOb496RyamMQByIDLiVyS7Zo5pIXci7l/rq1CMqaF0O7G9zMxEPZ6ZejQ8TBn/CHDh9u1zAL744pMnn3zE7pPP5XD79oetrc/29XkeupWd4HXq9gpL85mZqHgCQEp+XThS8eaB+s6yTyTpvh/ZowJe8sdT/rXeV/xhxR+uOFpuNlf+ah3HNro5JH885Y75NCb39kiKWwVjWXjthVaeYCmfA3BUxk0uFDyMxVwRaD+KpZv2Zo8+Uf2pu9phTF3Z7RWUBLEqNHmeIPYBXce3Z7y83VEW95sqXFJMD1k+e9Xwr6HgxWSbklktQWwXuVxfa+tPcrkZj6fvoYuFzv/ww+8A0X/3775WtVXuO9/xPHQTW70LxV6h223s40LJr92xvyPs5qoBR2lDtOId63jZW6Tb9zl7VMA3LZk0A+TeHgmQvCoYMyV6NYc93eBzLJ0JK64rP+eAU70DmPth0lAqfn3kp0I6KxtSJwfsJIORDAV1Lge+S9kEgiAIYifoPOEF0tmPF9DfeA0vOsocw18FylBAZvraCl4U0Isva4LYbm7f/klfXzSXQz0aPpebOXfuJ5ZwjTqPf+c7DzndWZ7d1xddTbpXYOv83aPh7chXqxrYPaFWyHJnzwIpdsKGBPxuQmQDrJ8EilDwk8mhSiEOAHCfVDHHWDrzzTuXikCpBjDzhk+bA27qUxl/WW0fZwzyoHp/mhXQ/bJ66yLjvGoRQRAEQewMHS8Mec+l01PvLIRCDVfwZhW8t/IrUHJ7gLVn1hTyHJB73YVkbNTsmLMb5ghiG5iZiQoNb+MU87ncjP23UOlCuIqzZmYert6FVLQ7tOtX7zbilN0gjNcI3insd0Oo1ZBoJ2pCAh6Gkbk6NWlPoAVkWe2tOYTWylE/pDNu45GI+XL2I32h4FdNAzzplgGe+/u3jBUAXaUawMPmgqrsvRxIxP1IfsR0PveB+6yKMeboys/fAsB/fsXwf6/6ajSFvhoKdfvZbR9kt8WzNk0ULYXaIHZ/tB2hty5MdZ4798qZ42+NNzYLb2bRa1TBCz+ZNWbWiFO5rmmlY5wzLcjWaIr/xje+UXHk61//+q9+9asNhE4QsNQ4TPFZJto9ntoD6fr6oj/5SR9MVT8DU6IDDsUuVjpfbkC925fbWWG8ds1/xUr7GUdDQyKILWGfC3ghySsOcs64xnRZDYyEG6PUVwnm6iwH1NOla66t4NuFg9wcB4Culyp+MtT6FeFxSwDEoHyuj91uA4oiyWBkYhpbBtDy7KmaH5mm0FdAoe4Iu+qDNNeNbaJoKdQG0RRT6ONn3rzW5UU6PTHQOQGvd7ira9XFJ86PNz5NXxORuwdkNWIm3Q0jOTWqs3rG3xHEljEzY06V6+uLAn0AAAbTy732+u98Z8aZ062p2J1sWL07T99xDV/nSlLvRLOwnwV8JhbSGIdp+9qjSGYvuJG5OjWpM870YA7b90Vs6veyYj5Twa9S5y4JBQ8AbR11TNKxEg1KOKLmNCac5yqm0B9xb+IjEARBEMTGuX5tYmKi9DKdnkinV108PDiOBgr41WvoTQs5NVIye5Ekfzjuxlrj7z744IOKIwcOHNjCeIn9iZhEbsvUb37zmxULnKK0WqCuXaG9VeXb0eiWbVU/TV32TxBrs38FfCamMV42xc1EkhR/WOnxxkY1xvVgzL09JjHmNJ0KUzcTls7UCqKk4DufXtdjBiUcT3h/NPrmNF8RB2RZfcZzfZoV1h84QWwlmqY1UUqTIIg9y+oj5lczunlI3xtBNAxbczLGUC7UNzNo3a7S3wyWJN7sPuu9aJOW/RNEPexXAe8wj6n9LSsp4ZFALqjzVYfImfuEgjovfwxgZJJr9dQLN7jKBweZH1eV8jthmo/JshqIDPkVJGetnYI6RzuwhOv/+TWfVgAgq4ERYVFnJGMhMVtHltUusGx54IX8jdullxy5I3furxEAQWwPkUgEZBdHEPuU/vEHD8a3dkvLgdVJo+zbRfP8muPvCGIbIP1JEHubL+10ADuDOS4uMLTWN7jkP60C4LNXjVV2MdW78zFAJhYKajpzDgrinOlaMJYxXypeFWZtXonM388BANRIShBRq5KQFftYHG4DUFw0t+NMD4aSRibmC5qTcQHOK9S7CHKuuOLcfG6+zGCOIAiCIPYuktuDqi9jAFaLu5gaswHIHZ7YE2xt0ft2ltBv/lo0+p3Y5exPAW+Wqz/029nU2rUVvMh/lzXBleryI4mURSKiAgCbTBrOXVnaocQzaVO/mx3wZfskAjIAuNRusc+Vz8riWCyKUyOpVCISkAFwPaixQ+ZB81hZ4GLzQdVlnWgFCdwu35wgCIIgmhglnKpCfGu73DKAXL7yG3718fTm+8mQz+fzVT1O37TyJ4jdxJbUzwu2uSh9k5FTCT2x+9mfJfTiO3aVb+dMzDeZkz2eXre3p2e1crj52CsaAw6h2x46Z0+0lwMjTg86SRkKyEx37GIavJdM3jJpUd9n6/c0c+4jOt0Lua8Oypjm/MadckXuOukqzBeYFnJHRqym+ENYWRH7SebUeQBcD4aQOJ03Nz+F0WlHkP/+K+y/fo7P/nGpZukf2chVQ6E2jmYJuFniFDRRtBRqg9hl0S7Ez7x5DXDMk7eP1MNmp9CbY2Qqx8RmpvQyR9fq89wegFc7tVq9eVXG8gRBEASxhexPAS9Y/SE555xzDpZ/NFDz/cxfRlkRAFZsz3WLUm+7YRiFwtV8Oj/LWMVPpnIFb37nO771FdHFLjAMPOppAy/y6WnUQP7Wn49gNKhzrmtB3Ty4AkCN1Ozxszc3kgCAWx8nk+n8LGOfr3I3AJCNXBUUakNpioCb68Y2UbQUaoPYfTZy9sx5e558xRT6tdn0FHpTwTMtBNMOzsgkRzWGNfU7YD6Wd5wHIxMbNSvn1uzNIwiCIIjNsp8FfC5vQFntG1qWZc7ZfL76xw7XgxoA4JDQyRbmWFojEwsFKxV7JU4Fb9bzVz61t38N1IHkjyfcyalJu+v9kHw2Hh9Y/deHc/PsRd3RIf+Vp9rruiRBEARBNDeSfySSD2qMMy3oHHRXPuC2elqt5B8JzAZ1Xnke1MgIzZ8nCIIgGsv+7IEXjW+1RteU8HhkYO5azVr7lir1bmIkQ0FbdcuyrKqBQCSRqOxCL+uDN2fllen3Nfc57I2nUin714UoJJAUfzieSqVEL7vU+0zVT4i2tno2f85Lvz2InUTTNBpBTxD7g/7xB4Lx/soj9WCftQkkJZyIBBxTY2U1kKhjRL3kj6cSEbVU0SDLaiSRCq+aFSAIgiCILWJ/ZuDNsrk1U/Bub68shslXVtJ1dS1n7w4O3pueXgJu2YeN5GtBvQAAaiThTQc1xtE74vdLMPKlNaGgzqFGUmGvCsZy+flMPhlngOUAL8tq76nHZ3Uu9gljyqcxUdCvm/XxllW8LKbamTuXeddxXQvlv+XwriuxlBy1Nh/KjwZ1ztE7ElYk49e3AeD99Br3hCAaDtnIEQSxrUiKP6z4w2ssWMX2XVLCcWWN8wiiqRGz3LZkjt0WzsOrh01Gvs3REsQG2J8ZeEg9vTLA9anqIbI2rmNthwCgvUK/t9/LAp6nv/dH7QCQ/VlpC5GSdwWGFKnMK07MzIM9/V71KmYOnv80qunZZcfunDN9bFrMwhuqV0nX8K4r1PacAz4RA/wC38yPlnngFW4U67sYQRAEQRAEsachGzmC2LXsUwFv1a0zLRTL1HR5v5//8VvzKwBwpGLW3d1FIcGPnwAAZG17uDIcNfLWjPlc/qO8rd8B5ffbgRWgpQ0l/3fbzs3ep2SAY70lauHlwIhXTND72Ok5JxbJg2crvOsquPdutNwDzzKyW7lDbvAEQRAEQRAEQRC7kf1ZQg8ASjgRyAV1zrRgTg2cHupRJCHUP70LAAU2B6CtBcVsOgOnU8yyKcGt5DbXR5M9cb/00bs3AQAFfSrTE1bMOXX/+c/ZoiWJ8/OiVn4yOaT4pcy/iOPLRUeXveU5B1Ef0GP20xmZ5Kimmwn2YtGcsJOJAcCtf3J6zplt/Y894/CuK+NJtwzwpUXAFUiElcrNV4Ns5KqhUBtHswTcLHEKmihaCrVBNFe0BEHsLFtSRb8jFeniohu47swMmcATTcD+FfBidjtiozrjTNeYXr3g2NnXnhrTnIbt9wHA4f0OHGvHonCRLZ3nHEu7uAQ5EOmd1XTOr805d1fCicEPg9NFAK7eYzAymUrPuYrxtnIg4nlbY8toUROOCTtHXkqlvm+9MMTjh1vvasHF2iP62t2W811BD/rsTy0Hzrb9dGx+ZaX4Sc3TyEauAgq1oTRFwM11Y5soWgq1Qew+GzmCIHY10Sj6+rZmn01SIcXr0dgb0PCk3olmYT8LeACSPxzvGcpcdcx/A1oA0ZX+1BPlhu347C4AHDvpyMc/9Ufq4kXGtJj3LADg4LE//sMH/2CK8BZgGeppv4I8wLEEQI2UxttKz/5PB6eL94GCHg1WPEDofjlw+APLFk6W1dMjYdfVUHAZAFrdlZ+j0nNueRX1XvLAa2nDctGxuSIZsbeBFdz+xABoih1BEARBEMQ+Z8OpbPv0zUvi6gBEaUCdAdQZPEl3oonY5wIeAKSKCbSZmE+zE9/lCv6xVqCo/scB5+nHw6lUGAAunQOAA61/GI7+r2HHViydCYfDqQh8Gqvwiktcu2+9kGXZ4+l1e3t6xHC5w8f94W870/qZmE90rZceACji0uZo+9r72OuMZCioFwHIqgrGeNFhaStwHwGW5RdPkXondhBN05oopUkQBEEQe5udLUeveWlx8KGbiwX1BE+5d6K5IAH/EEoK3vXpmz/lKNm9Hb232jlGMjZqJs9bgOVc3oBSSDMA3Zj0+TQ5kIj7kRzVRRP844OJv/uepZqNH/2AA0DuU8d+mR+9+eb0ImBeXZbVXtsi7tI5odO7I4nXzan1RjIUDOpoKQvJ7HJXI/GwYrhzQZ3r51/Vl2+aC2S5u23VD0QQ2wbZyBEEQRDErmKnytHXuGidGh7lSfjVSvFJvRPNBQn4h2Eq+MlXGb/pOMzNV7cq19++FArO2cXsywD4z68YPY/lAKgn3TmrD77wz9ai//Exa7WRDImmeMDzhHksEws5i+PFtRnXWF7k4p94FABw7GTJc860rXO40xlXZ0VNvZiWV8jfBYBlxwfifI5mGxEEQRAEQRBV2DK4nmw2tkIS19M5H43WtUwEE41WRtXXFyXHOKIZ2aMCXlSVVxWJC2xJ7CxHXx2XWy627WmUAAAgAElEQVTp9e5I6nUFAIxM7LzGlpFLG3Data8sznE5EBnxK5LdmV78h7+ZOsIB1fsMcgDuztrT4w4AD0pxlSrhkcsbUCRkYpZ6t68MIxMLaswaZg8h4Iul1nXLts7cZz6T/+UPrzjUeSamsZtmg751i8w9gdufPfSGEARBEMS2sbCw0NHRsdNREMS+Z2Ym6tTAq2Wzt0oVP7R93crA13uxaBT1LyaI3cweFfCrYyTXpd4BSD297ToX1e7qn9gD6BTvc2AMz3krnhC0DdpPDSQlfFplGsNyli07vOLQ5gIXGfEHMEfbG8mQxlBJ5u/FMVcg8bodrGU1x/MFQHJ9zYW5AopXf2F879sSAKN8cHD+ksZE1t8czif0vRz433pno7rlgScpQ4NtbLqI+3dq3wWykauGQm0czRJws8QpaKJoKdQG0UTRLlyOv/nG1EQ6DQAYvvRgvB+Xzxx4AxdePx/qJzlPEDuCrYEpm00QO8j+EvD2uLe61TsASD09bfp0EcCh335qGJDWnPLW9qTzbZfbZXmzy709Eq4CwOGuSCoq2dPyKuzcTM+5fAGQYFq+lS2xYT/LhBXF/0q3rs1h6WLQd9ERxsmjxfmbAL9ldba3HUQRsEffAegJzAZ1rv9NDEcwy1hxrY9FNnIVUKgNpSkCbq4b20TRUqgNonls5BYun3llYCJd6630xLmBianhS++N9293VARBlKjOZkejZTl50vME0Tj2kYDfmHoHAOnUN9ump4vAyuJYMDgGQFYDvb9/t9baQ61Plh84aP4r9/ZUCH8lHFU/jDp0c4sanQyfRCYPcFFDX1d4yutnu3xjWXsXYLk78tafpH3zNwFYAt4lHy4UrWuV2c5lWfWzAYIgCILYCS6f6RyYAAB4h4eHkD1nS/nOE14v0mmkJwaeP3H9vRDl4QliN1BzRNzMTFR4yG+4GV5UyK9RRV+/RRxB7DH2i4A3rAbzavUuEuGlfnklnEq4XwvqBTAt5k2FFUB6+llMM7S0Y1mU0nMmutVl1esqmzqPw4+vEgEvJdFvZT8y/JIEtLtbAVNUtwDLLH7uenGxAEBWe3skQBoKuJhuebofamt/9tlTX7Mt4tSXFBiZ5NSkbql3WVUPM5aVv+YSrfu3gCUxvR6F+QLUSNwvldvOmRztHnz6xjQrVLcEEMS2QjZyBLGvuXxGqPfhS9fH+zuAy2dKAr4j9N57L4jsfPrcm5dDlIUniJ1ljbF2Fap+AzI+GoV4BLD2GoLYh3xppwPYFqwJbevOvZfz3KlAhbDgTIue8wX10pj4IvvbpFFa8NG7BVSxPD8WjGVKr9sB4MTJNkCodwCc6cFQcj52Xnecv1JcuuXu8Zdm5n0cCwU1x8XBGcsCLZ4eCZLbA6xUX9xIjlaqdwA356ZZjUgJgiAIYvu4PD0BwHtBqPcadPSPv3XBC2Bi+vK2RkYQRDnCyO2hOfA6l9VkDS86cm4n9jP7QMBbreZqJLEZ9Q6A6TrUSCKVSqUSkYA5kW5psa07kkilUpFucaCgT1niPBMbW7wPAI+fSqVSqVQqYT8BYJO2zm8/DABz80Vh3K5GEpGADIDrUbYMwBVIpFL2samM7RP3/kXGAVkNJBKJgAzIg2e7WgAss9GkAcWrYkWNvNwOAO0vp1KpVFixz4V5ohlXRD0qDjr95wmCIAhiG1n4OAvAO/TCWtXxHS8MkYIniJ1lvZp8azU8qXdin7PXS+gzMWu4u+x2bbQ43Ej+rblHYCQs8t+S0vMtWdc5gLZvflccO2ytz+UNKAXzuQEA4A++4dyvrQ3FIn/7r3z6TcAucm8ffPPVO0GNscmrQyO9sl4+LFhS/KdVXWPI5Y1MXmy8DEA+ypk+6u457QHYnd+owvyd61MZ/5Bbxmz6n+4CwJHj9k5m6353JB52DLb3Pg12EwD/fy5hYKD6HtAU+moo1AbRRNE2Uahoqmgp1Aax66O9fi0NoOv42t3tHce7gJoz7giC2AY2psbFWRsQ3tW97qTeiX3OnhbwXA9qAGRZ5pxbhmkb2EfqOdGiLy0Dtz8rlIbQf35A/Nv5dO093TLAgUPACg4DhmEUCleytwCIWXLLN8vXL00HJ7tVGYzro1fPegDrd1ZBn8r0hK3C+ds/D2qluXfdnsNzHAAUrwrGGAPaj2FpEbm8Ibk94Ey0xz9qn3Hwd4eAFeAeLON4I5Mc1eyyeoehvBOaQl8BhdogmijaJgoVTRUthdogmmcKPUEQRBmk2AnCyZ4W8ADEcDokQ0Gdcz0Yc2+oCV7yngCbA4rTWnC6/K0W9bu1N1T88ZQfxo/+PDi9BKb5qkzeu86m/uJeKKhzobhb2rDM51i3KnPG9XcPO5cyLWifXixCDkR6r2j6EnD0a0Px14UnnGE+MMCJr6tLi4znC+ixDjmqA3D/cdEYn9WCPscl7D2LC4VaAp4gCIIgGkznCS+Qnpi+PN6/xoA6s1H+ROe2xUUQhMWGi+GxiSQ8QRBO9ngPvBi7Dsk/IprPmeYcHrcODgPAsS5H8kJubweAI+41zjKS2vSSfYIsq93Hfg8wH5sceaJs7XOvRVQAczlPN4Cs7QrnUgdVZ8rk6GAi7lfcRwAALY/aUlvq6ZUBQHbb+0puz2qRHeuy95RlNZJIlfa8R13wBEEQxE5QT3v7QvyNCeDhhfYEQRAEsSfZ0wJeDgxZ2XHJH4+oAMC0kHNKfG0kf6Ry3jwAPPVSPJ6yiL96ovxdJZxKiWuYGMlRvQBYc+/i8Xj4u3/4VQB4pBRVKpV69SlzA68KgOe+lnBudNB9KjwSKGn4e/9tCYDykgoADz75Ucjn84WShrVZKu7HLfFBfT4tp0bO1vzYDzpOBVTxOIJzpgV9oVAs/2+7AeCp8gcLBLF9nD59eqdDIAhiJ7EU/MDzZy4vVL+9cPnM853n0gC8F86TiRxBbDebSb9v1Q4EQexpAV+OEhaqmOujD5fwW4GY9y4Hhkq+b2ZOfLn2CUpYKPDyAvb8VMjpU7c8Hw0lDWHzDn7jTsUeRvLVMTt7D860sffLF5gnTo/pzDnNiHOmX5wDILtd9X5AgiAIgthSOkLCJS49MdB54MDzz7+RBYDsG2fOPP/8gQOdA8IU3nvhrRDl3wmCIIh9yT4S8IASTphebE4bdlPR5p026MbV2caM6hVZdgDA+5cvGXU8SOCMcTkQcWbluT6VMSvm53J3nYuN5KiYbI+us5Y9XMXTAqnHI+zqjgYiCbueIGFvfsRNDfAEQRDETtEReu/6hWEvACCdTqfFvxMTaWvuvPfC9fdIvhMEQRD7lT0/xK4cyT8SmA3qHEyLeSPQNAbIajcgjiTCilQ2lJ1pPqZGUuENXczllgHOHTPkjUxy0p5Gtzw/FgyOATjaAgB3V2s9lwMJkZQXTxhagGXk8obU0yvrnPObAO5/BgAw5n/4NjfP+YsBAJCU8J/KbIwDuJfVfHpBDiRO3xWS/uZs+mqPyy9JgGFcTV8XV/s91E7Ak41cNRRqg2iiaJsoVDRVtBRqg2iWaDtC4++9cP7yO2++MZVNl4S719s19Pr5UD+Jd4IgCGIfs88EfJmE/1kXAICzGyddmC84Z72rEVPdb+5SwrndOUMeYt77LzS9IKQ4gJvLADA35gv9JjASrjK685SnxA+2AUWeL8Dvj0fyr2msABSmg77SdPy27oijDP+Z3nbwJWBpvgDgPqC8nkplYiGNcaYHmV5xtYOHUROykauAQm0czRJtc93YJoqWQm0QTWYj19HRHxrvD+1kCARBEASxC9lXJfQCe56dPem9MN95tjQmTlYjiY14zdVACScijvlzpXnvnQBwJJBIpRKJyMvWAs70oK9yTP5aPelKODJ4tPJg92uvO6OX/MGTLZVrXF7PKrs+56UKeoIgCIIgCIIgiN3IHs3AS/54yr/620o4lQojE/NpDLIsc87G8pFUWaW8FE6lvDGfmYUXJ9Ta5CHHJMUfVvxrLZOUb8dT3wZgZGJBjYFNJocUv1J2ecdZRjIU1Iulg48dhl1lLz5QVQq9vesI5pddJ12F+cJBAEYyFNStMkpZlj2eXre3pyc/WjpKEDvC5ORks5T4EgTREBYWagyfr0VHB1XSE8R2MzMT3eQY+ZkZ8oEniM2yRwX8OvCcHumdDOpMi3lTdSXejUxyanK2NMJdltXe00N+RapYFRvVxOx4WY2MhF1XQ0GdtwDLpab2qq2OtuDmMp+9avgdhfSffRQLjdprXG2HVo3qh+8Dom9/tagALCVHdQ5AjSSG8qNBnXP0joQVyfj1bQB4P22g+iSCaDzCQ07TtJ0OhCCIneLymc6BiXWd4fUOU188QRAEsZ/YhyX0VUj+kYAMMK2yer0GmVgoqFUbsGnBsnONZCio2c5vnGnB0FQeEA3s1sD7GluJbvhbeecVjekx55pCcQUArn3sXHPvXS2o6eymY+C8IyphZ2fxiWlu902RcZdVs2G+cKMIgiAIgmgm0umJcwOdB56P15m4Jwhic2wmhU7pd4LYEkjAA/VL+ExMYxyQaxiwsUnbXN4wc9zWskRElTljHMBh2QVxnVpbnRVT9ZZ/fdVhL7dSviiqtgHA0i+dXvZLiwVADkSiARkA1Igzqky6xjC+e+9GdQ6okbhZdZBJz4nL3Vla370jCIIgiK2h8/ylS5cueK2X3uHhC5csLgwPe+3jFy5dunTpwoXhYa/pN3eu88zlnYiYIAiCILYZKqEXmMPp1y6kF1JYDow4K9MlZSggM53zfAGQYHvIq5G4XzFXhEcCuaDOgYP/5qst84VlMFEm7LK3MjLJqUndnKp388ov4P+2fQVXb0/peu3uVqAI9c8rptWLqIy8rHPOtJA7MSKiuhLVhCIvzAsbuifdMsCXFgFXQAzrc/rm4f4n/1Lzs5ONXDUUaoNoomibKFQ0VbQUaoPY9dF2dPRff3MgjVpm7/39/aHx8YXLZzoHJibOTQ8+GA/19yME8xAm3oif7yd/eIJoPBvrhKf0O0FsFSTgLUzTt7UkfNmIOsMwCoWr+XR+ljHnLyKh3+XAUPkoeOEoB3z1CLB8CFgBgIIe9FX6uAHAiePOVwV9NOYeGVKkVVvT7a56qeeVwSvR6SWuB4PiraUlWVXhCLHdbU25K7u6HPiz//53P73x4MHntQU82chVQKE2jmaJtrlubBNFS6E2iKawkbt8ZmCilnq36egfv34h23luYuDM4IPxfvPQpeGJgYn01DsLIVLwBLEdrFfDk3oniC2EBHwJJRxRmcbEGPjVxLJjOF1tRMd5hXk74HLLgHWaNBg9/dgv37rCCvXVq3PLSl5WB9vu1Vjw2UexULBmVF1n497f+Owieq4HxYiwljYsi6Z3WVZPj4QVyYi9/dMby8AXhqgkIAiCIIhtZeHjLADv0AtryfCOF4a859Lp7McLsGbXdZ7wAun0tevAJgR8JubTmBqpb6AtACMZG7Xn0MpqoObkWILYqwgND2BtGS90O6l3gthCSMA7MSW8PprsideS8FtmwPZYuwu5kno3M/JdZxMnr5S2Egl/IxMbnbR+IHA2LQbbA0JmS/54qicZCo5ZEr0yqiNPVF7bzMgXS8PwTdxHgGX5xVP084PYESYnJ9EEJb4EQTSO69fSALqOr63CO453Vch1cWRz187EypxbH7683OmVM11j+frVP0HsAYQstwW8U8nbip2kO0FsOSTgyymT8BXvGSUDtrDzIbuRRxW5/JpubJ9dGZ0WW0W96ajGAKiRVFgxklcql0oub68nV6FqONNG3UJ/W1F1qd232VyBc845ZLiPuc215UPsulVPjjEA4Ho01vPDsB3kUtYAYGSXsGr5AUE0CuEhB7KRIwgCztx6LUSefisxMrHgOuW7JobiRMQoG3OYDNNC7kTNBABB7F2ERI9Gy7R6X180Gl3lBIIgNgdNoa9ECUdUgOujzjHvAKzieDkwVKHMy23aXO6aLYbli+7cEFv9gVO9V61CyWuu/OghAHxWzKoXpxxCls0VrPc5Z1r0bQ4At36mMQAt1plzjnb4JRZ8tepTEgRBEMTO0D84DCB97s21JspffvNcGsDwYH/p0PQEAO+JzvVf0sgkY6H1qXcYyUnx1R23auYlxR+PqCh9NxPEfkMIePs/Uu8E0ThIwDsxMslYKKSZCeqg9h4A3K1YlP+xz+fzhWzla2W4c3kDAKSeXhngetC5BjW93G7pY+InQML2civbaj7q1xgHjqqBRMI2rZPNCXj3nVutQPjICfc4AIAwhc9mAcjqCWtd26DpbfdyOwDc1H+8tnMeQRAEQWwXQsFjYuD5M5drObsvXD7z/MAE4NDv9qGHtM7XwkiaD8llNZJwfIE+5CzTbMZbXi2vDAVkUvAEQRBEo6ESeouy/naTFQCY00KxSDysmHPoOPtt6RynAZuF1NMr65wDuP2ZuSo2WvFw//GvtgNLQmLLbpdUcytj8eYKAOBmDqZFHSRl6LT6vsaWgfufSwDgerwNKALtL4/4FQlKVJ2Psjv2JofkwfMj38OUOcfO9eIpkS6Qvh1VLwfZMj68PA/l5ENvD9nIVUOhNogmiraJQkVTRUuhNogmiNacKI/0xEDnBLze4a4u851sNptOW33uw5fG+wFcPnNAyHlsSL8DcEyfy9TbRC8q3yr1OyC5PUDJVJYgCIIgGgEJeIHVSV7qZ3PoeW56y5lecEuASLELDzY5EOmd1RxG8KanPEdxOuibFluUe7nx6enSpUs7lW+Fq7MFAC3AMte1YJXd3KNfEXPsHjsIAFi6GPRdLL3bNhh58SNN5yuepxUJdpb9YGmFNPTHbWy6uDKfzODkQ4fukI1cBRRq42iWaJvrxjZRtBRqg2gKGzkA/ePXL+GVgYk0gHR6Il0lq70XLr0V6q84NnxpNeO5tZD88VTlvJuHYuRzAGS3q+od8Zx/lSE43/jGNyqOfP3rX//Vr3613ssTBEEQ+xwqoQcAZKZ0btqpW/1s/pGA+KHT1QWATSYNQAknIoEuq58csqxGEqm4X3F7ALvwHYDkj4tad7FMjSTiXlTkPeTBswHV/vpvaa/aymy5/9NoJKA6fnPJshp4uRuAUPko5G8CaJPtrdoOAZBfPFUVVRWPtQIAslqMyugJgiCIXUJH//h7D65fv3Rh2Ov1lg57vcMXLl2//uC9kD3hrvPE8PCFC5euP3hvvL/mVgRBEASx19jPGXhh0wZYj9MrzNvtB/OZmC/L+OxVw++XJMX/0nN6lkEOJOI9V2OjQZ8GALIaGAmXBs8ayVGNccuoLRPzmRXsjtQ7nx7jgDw4iOlpjuUlpgVzgUTcbweVuQsAXP8lUuG4P2xvnUlO/VAHAKb5mKyqhwHg2dM/MPvoS6UD9uczkn/FAKBtsDQc18gkf/xzS9ozzZeTu9vagCWpq32Tt5Ug1sYeOE8QBLEqHR39ofH+0EMWhcbHtyecdbBKDf0HH3xQceTAgQPbExFBEASxl9jPAr6E6FsDS2fCSnUxeUnoO8lPhRzT4TnTgzkk4n7JFNAtVSfU5rFT8cgd00zW7JmvwDlELxMLaWUj6Tkrjb2rbVtnJENB/SYAoPWx1bYBOJ/b9a2RBEEQBLHbqVVcTxAEQRBbBZXQAwAUrwoATPOFYsmMUccEWc4YlwPmRHdRLs/1qYz5MEDMgLfmxLvE7pADiURABiAPDsriwIhfghKOiBk9xV9ecVzZ9dU2AMA964CRFLJb7jJPTqQSEbMKn89+VDPMTCyoc7MNoHRMbDMozlUj4iOIN2s/RCAIgiCIbWdhLerbIhPzVUF9Y8SGiUbR1xe1/yOzNIIgth/KwAuUcCKCUY1xznSN6QAgy2pvr7enR5FqZrblQLR3Nlo+W45pPue0+UJpPB0stZ4EgFvT08vCQVZsrbzUjewcUJwOxp5OmbXw0rPyoeniCm59DCgo+dZEvnFN4wDwqARJCv/g7G99Y4vg/9ffYeDb9sXu/UPIp6/gkLhw4qV8MGu9Jbzq5MDIKYzaBf2SMvTvv8L+6+f47B+Xao7PpSn01VCoDaKJom2iUNFU0VKoDaI5ol24HH/zjXMTD50JP3zpwY50vq8+bF7MrilvxyP2DH190Yo/AMzMRPv6zD+2PSKCIPYpJOAtJCUcTwxlrk5NmpXxnDPOma5X9rebeNx1N4u7ZPVbwqQGIsO+DMgBy/wdAHDY+sMceA8A7f/mMOZXsHQxFPvKyFCP0O/Hbk1eXAKAtmeeEWcM/IdjY2OLWLr4WvJ4xG/uWbyxAgArYjCflImVLuVojQcA3Po4mUznZxn7fK3PQFPoK6BQG0ezRNtcN7aJoqVQG0STTKG/fKbTdobbCmp3wW2K1YbNrz6enmh6RL695nH7D9LwBEFsDyTgnUiS4g8r/jBgGJnC1fTkLOMcnOlBlo+knIIbstvltJ9xuM6pkVTYlQwFdXuInYOlrAEAbYMjVU8EgLY2FIsOCf9YK1CEaLBnZip/MWvmT+yGdgz8x+4xbQ4oOMzmVtb+oMKaXuyUvahnS+985SkaYkcQBEHsDAvxN0z17h0eHjoxePz46ms7O7cnpiqknl5Z51yfyvidPwxMP5veHkrA7zVWU+/Va0jDEwSxDZCAr40kKZJfUfxhGJlYUGNgk8khpYboXheZWHR+BUD7i6dq7dT64tln9TEGpoXcibj1bKD75cDhD+x5ee1q4I/u6hfnyk48DADHumRb3QO29bw+muyJu52rnRb3AFq61D896e3p+fVfBqeLm/t8BFEHk5OTa7zbHCW+BEE0hIV3ptLAzlXH14mp4JkWQmQkrEiAkUmOagyk3/cg9ah350rS8ARBNBoS8AAyMZ/GUCNfDgCSEo6oTLN85DZ+FSMZ0hjQdsxVXDSb42U1YJbWmzwjSv2MTHIq5DM1+7Vf5kP/eypcEEGeGvK7p3R7y9ioLe0f/GE89X1bnstHOWOuky7Mc30qkwqnUmEjExv1+Sx11B2Jfm0yqnP5T/8i7JcAY0dqJYm9zQYc4zRNa0QkBEE0A9evpQF4L5zfTerd+lp1/EiQ/CORfFBjnGlB5+ib0mwbYm9Qv3p3ricNTxBEQ6Ep9DDb2YRza8Mwx8EDxcXSZTjTtWCoYhyukQwFNYdD3fJNpgVDyYOVQeanQkHHMvCxUNIeYu9qOwTgYNf/rAJgWixjJEPBMuu4uclf5p2XLdyg9DtBEASx83Qd79jpEB6KpIQTkYBamikgq4FEeasdQRAEQTQCEvAQxXAQOrfW22Js+6bmymZimvWMXlYDiUQqVbKf40wL/fpxS50byVGdA5ADZ4XVnLCA4/ovHxVBps0YbR87ywDO8rEr45lwRAXAfvCX5q6RsyoAtB9zcebU85m0qMpfubO04U9JEARBEJug84QXQPbjOi3ithYlnEqlamhwyR9PpVKpqty6pPjD8ZRFvHrYLdHkbNgijrzlCIJoKFRCDwCS/7SqawxM8+XUyMiQ7RxnZJJTk7qwXRuq88E603w4GzBfiOr8FgA4BKxAjcRLPw4kJRyPwKcxPr3QJU59Ay4OoPvl3tkxs0/9yEsRNasx9ptHAzI4Z9rfijFzciAx0nN1KiTCU7s5m0MuX2VhrwwFZKZzkV7ns/kne2WALy1+VXUVWAEAljLJUc1qir//yb/U/FRkI1cNhdogmijaJgoVTRUthdogdn20HS8Mec+l01PvLIRCuz8LT+xxZmbWVz8vsEro130iQRBEnZCAFzh84Msb2gAA8ibb2pYBczB8hVM8RII9i7sdg3J2mmNOaOq5izrUSASaxuA0wXkiH9IYFzlyrgfNofOyGokP5UNsjvN8Ae7y/SH5Xzn50+j8iniCgHbzYYV5JXA9qgGQA3/23//upzcePPi8toAnG7kKKNTG0SzRNteNbaJoKdQG0RQ2ch2hty5MdZ4798qZ42+N95OGJwiCIIhKSMBblHzgZ5mdo5Bltff0UI+dkW8AR/6tiizjd55OJR6LRXW2BAAuNRIJK4VY5WIlHE94Y1GNWXXu9hg8I1+5tsT9x01TeGuTRMRt292jzaW+FgkrkhF7+6c3loEvDIDqAAmCIIhtZyF+5s1rXV6k0xMDnRPweoe7ulZdfOL8OKXpCYIgiH0HCXgnJR/4NSjlw51n+uMpv6iXB4AnLIv4TAyAnUxXIzW66zIxZu0RfjXPNAY18oOwAkCqeSXFewJsabWh+SISGMlQcL78Dfko+E1rD39Y8Q8Js/oXI2ExB999BFiWazvcEcRGWNsxria7vsSXIIjGcf3axMRE6WU6PZFOr7p4eHAcJOAJgiCI/QYJ+G3iLmAV0FeZxwEAPs0kY5P/N7OXieS/c1km5tOYHEicugUAXA/6ZtXAiDk2Zyl/u3QFAG2HANx3XuB22SsA+Ow2AK5ryZ4f+CUsZQ0ARnYJNIiHWCcbsItbDbKRIwiCIHYDopt9vW3wG+ucJwiCqB+aQr8tpP9+rvSCM10L2gPvxYz7lg/HNJ1ZGXIA4OXLbPJTb2ftF+4eCQAysVCUlbvAFVcAFN79CLBs8iowkn81XQTQokZIsBMEQRC7gP7xB/UzvpvM4ok9CE2hJwhid0ICfjtgbA5tbQCgRoR3nO1ZZ3rULRcBORBJJAKyvQwA2GTSgJEM+Xw+389uAeCM3WwBADmQME1tMjGNceCQOFH42UTVFgBY/C9Jw7LJKzoVfiYW1MXTgiOVQ+8IgiAIgiAIgiCI3QiV0G8PauT77smgzpk2isArg3J0mrO3fvR4+qNp2x8+MOJXJLh6ZZ1zpo26zw7KbJrzf/5FcvYiByB/ljObg5cBwPi5FsMrQ36lkGYAXCePFuYLAIxkKKhz18kngWWgkC8AknSsrQV8GQDXgyFEe3+hVU3afwhkI1cNhdogmijaJgoVTRUthdogmitagthxRD18/SXxMzPCQ44gCKKBkIDfDuTAkCJJSiQf0hhnelQcLUxPFyBM4Byj7XpeUSgV7j4AACAASURBVK9E2RLXx8TvrLmLwisO/L8tO/dcKRaYrjFdViOJVFgyp9bd/XQpfxfA//tPn5SWZmLR+dK5XI9yAHCp6kHG6v0xRzZyFVCojaNZom2uG9tE0VKoDaIpbOTKWVhYWOWd6++8+QYG3wtRFT3RaOrX8KTeCYLYHkjAbwcetwSYJnDJkoEb2roDr33Xr0iAkYmNarXV9EExjE5W1cOMZSEHznr0MQbX4NnOj64I43qcjdz9OQeAubEoAODe56UNjHwOAI49gcVP7YNHByPeO9WO9wRBEASxoyxcjr/5xrmJ1cfPmwwPbkc0BFGXhif1ThDEtkECfgtRwolALqivldQ2feoM08HNVO/JUOksWZY9nl63t6cnPxrUOXAfkNXISFgpxBgDPO6BcGrAdJcbEFZwbMwe3F11uoWr9SsFsUJVwRifHk13A/bDBaC9S8I8l7rat+huEPuIDdjFrQaV+BLE/ubymc6BiYcvA7wnGh0KQdg4Z8s7lbwt2km9EwSxbZCA33GM5KjOAaiRRNjpLWfkTd83OTASViSgUONkyX/qmD62CKA7knjdfhrAcjjWC8DhKyc65NH+cjz87Uu/ZWOLnM0BkN0ucythI8ff/Yhs5AibLfSHqxOykSOI/cxC/A1LvXu9w11dyGYn0umyvwF4hy+9Nd5PHvDEtiIkejRaptX7+qI0c54giG2GBPx2kMsbKNPmV2c5rOR3Ic9htsmXnVT4Z6HYu06vKaifeApYhBz4bsXpn+RrJjIPP2GfAwDtvT2k1gmCIIhdwcI7U0KhX7j+XqgDABbi2c50Ot01+N54PzCOhfjznefSE2+8c74/RAqe2H6iUQDRHQ6CIIj9DQn47YDPXjX8JRlu6vdSdhwA14M+veykJ8Q/LUdceDiGHvTNBhJx+yL5ebG1HEiMwFFMvzjm842VzjtY+vNfPrkPAMXbdX0kgiAIgthirl9LA/BeeMsW5x0vDHnPpdPZjxfQ3wGgI/TepWsHBibOvXk5REbwBEEQxD6EBPy2wPVgzC0q5I1MTMjpFtMPbjXMgXMHH197a5dbBvgKxKg7mP+K+ngn7cceX1q84zzS8hiWC/posideR8082chVQ6E2iCaKtolCRVNFS6E2iCaJtuu4I7fecbwLSKevXQfMo/2Dw5iYmJi+PN5PCp4gCILYd5CA3w5UVWVMc858l7tVzLFlqJFUWMnEfNW+7LLaxVkWKN4pAGUCu2zmnYOCM4nfNhh58SNN5zxfgBsADrb+D8AdOZCI+yVxwSPfGjwyPc31qYw/rAC//+RB3FhBW2vNj0A2chVQqI2jWaJtrhvbRNFSqA2iCW3kHNgpeFgK3nmEIAiCIPYNX9rpAPYH3nAiolq/m2Q1koh/1116VwknIgH7bciyGkmk4t4j4uX1vLGua7UdAiC/eEpxewAgl19abeVjp06rAJgWy6zrCgRBEATRADpPeCHEeuWx9LXrFWurjxAEQRDEPoAy8FuK5I+n/M4DSjiVMi3fwnHrLwAoF+Wmu1z5Zm4Z4Ohq1YM+XQ4k4n57LyWBUFDnIn9vJ+RFdt18+dmVkMYAOTDib786C6AwX5CdTfLA/aymzUNsUrrqg03fBKIZ2P7x8gRBEA/DrJefemchVOqCP94FpJ0p+IWPszsXIkEQBEHsLJSB37VIPb0ygOytjZxsTE9zyGqknvZ2giAIgtgV9J+/4AXS5zqfPxO/bObhzRT81Dvm68tvnksD8J7o3KkoCYIgCGLnIAG/ezEV/KoV8KtxD8AKoEbizsw6QRAEQex2OkKvDwNAeuLcQOeZy45D6XOdBw48//yBAwMTAOAdeoEa4AmCIIh9CJXQ1485a66iEL1qQUVJ+to4neQciD0k/2lVF+Pt7n62ygZGxvSks15f+fkSgEMno2sEISbXF4orzhM/5CurnkBT6GtBoTaIJoq2iUJFU0VLoTaIpoi2f/zB9RNnXjk3kS4dOn9peGJgAkDaPOh0miMIgiCI/QQJ+HXD63Ve2wKUcEJ9P8iWcXNaC9351umhHkVyXPja3/qCIkF/CFgBkIkFp4sAIHW1r7Gt5PYAHPym+drIJEc1ceJq0BT6CijUxtEs0TbXjW2iaCnUBtFEU+g7QuPvhcYXLtuz7Dr6x69fH3zzlTeyALqGXj8fovnzBEEQxD6FBPwGsJ3XNs9D0/WS9zkwBqDAma4xvezNpSUAsho49fjs2DTnelCr87LKUEBmphWdWQSgnlXfH2NrOtMTBEEQxHbRUSbSOzr6x98j33eCIAhi30MCfr3Issw502LedRTKb8FVB6OnH/vl5GyurADy2MuJ89+WJBjJWXOZqt5nrADcXq3k3kTyxxOfhULTomxeViMjYdcUjSXfR0xOTu50CLVpihJfgiAIgiAIgtgRSMCvF8/pkd7JoF6/hDcyyanJWWbLEllWe08P9VStio1qjAOWnL4aCupcDiRMVf1Yu+IPu9zJqUmUtrr5y6mrx4f8VhRq5DQ0kYQvLvxNKJTl5n6Bl7v5xbmKCxZwwPqbs8kp96nHjwDLcu8z9d4JognZ/e5xmlZvHQlBEHuehYWF1d/s6KAyeoIgCGL/QQJ+/Uj+kcBsnRI+EwuZstyGc8Y19s+qoxPRtnIXC5gWzKlqHVst32S6xvKRhBsAZLcLeQBoAZazWcd+emVOs2ovzvQxHFr7sxAEQRBE41mIl8+wW4XhSw/GqaaeIAiC2G+QjdxGkPwjARlgWiyz5rpMTGMckAORRMoiEVEBYO7D29YqIzmqc5SWJSKqzJmlr11uGQCf/xvHVomAUP9dXQDAJq+UF8ybjexyICE2s47zfEFcT6j3thYAgBqxVq3g4bX3BEEQBNE4Lp850FmHeicIgiCIfQpl4DdGrSy88XEOcDrDHW0BAFdgxK+URsdL5gC54n3zgCF84NRI3KyFl5TwSCBnpeTNifHZLAA5MOJ3FZIhzXzvyB8G5KzO+Y075YOF5cFBTE+b4/LDp1UmvOjAtJg3MZSf5QBaUCxNrJOUcPzsb31jiyj+40dAjQn7ZCNXDYXaIJoo2iYKFU0VLYXaIHZ/tAvxNybEX17v8NDQ4PHjq6/t7NyemAiCIAhiN0ECfqOYJu1CwruSsVGdVf4wurkMAAV9NOYeCbtgFApX8+n8LCtbKPS7HBhyFuM7HOCdE+O5HvTpALrPvnxv7GIW74/pNcfGe57+3tBjHwV1MS5fuL6jBVgG04Lm04VlNRKBppVc6J95qgWLyyh+YtRS8GQjVwGF2jiaJdrmurFNFC2F2iCawUZu4Z2pNEDV8QRBEASxKiTgN44SjqhMY+yt6PXCfAHA0XbcXHI4wxlGZkr7ISvwkmyuppDnADzuCs1sqm5ATIxH2QOCubGLAOxa+UpktwuSYj9fEB3yeO5sAFesTVrUaFi5Hys7zX0YWEbxRqFmCp4gCIIgGsv1a2kA3gvnSb0TBEEQRG1IwG8GU8LPF8ToeG86qC053paQzxVuWq/aXPKznb1ub09PfjSoczwnhH4mVmPjSiT/UG/ZIHvZ43FsddgbT4WB8s2UcEocNJLCMOwJfzjuD2diPo3hOe9JANYK8xqvqrrGcHhDt4JoDnate5zN7i/xJQiiwXQd35nx8pmYT2Olh/B1LK5xvN7zCYIgCGJjkIDfHC73UeAm0PbMkCIVyqfuWMPp1Je72cU5tH5rJOyXABjpWwDwftqA3Rufy88nJ6M6t7/6P3qXA7iVh5GJjU5a2r1dPRsND1gnZWI+sxn+02QsVFnCb9hl/W3V4+Vzv76UTF+pMLf7xt1N3w9iV7H7TeOqIRs5gtjHdJ7wAunsxwvo33YNn4nVFOSrYORzDYuEIAiCINaABPymMK7Oigx7cXo0eapCLInieDkw9G3/0Lcg2WXphVvO0ndHrbyTT+8CwMqHWpAVSkeX2FgQT1Q93a/ohTeyS5n8/8/e/YY2kuYJnv9p6G6amYZ1M/QfTmlGGuQ8yE24pKu2PSlv0tJxMNi5Y/KFxyz1wuWDObl9HMh+kfniXNCxkIYj84WtV26JY8/pO+pFjjnyfF0W+2alJrGqXVvdeCEnj0uLkW6dOrq6d+icpXppeobzvQgpFJIiQhGhiFCE9P1QdDslRcSjiFD8nl88TzzPZrcm8pvfi4j8Vr+9xosfD05up84aP3vD6hsDAOCT1P3V9Fat9vyTej4fZAbfOt/bdJK+dyI8ze0AgMAxjdwoOgPI/2VWpHH05OOm2QfjuofKz2uvRETk93//hYhI/O69pEjj6PRKv8D5//WFiMjvf/NWsjsHJ+rUc9/4pohIpabNXffr9v///k9/qE5A95dJEZHf/0LZrSSznUnpHnxTRET+nzdqUe4m1Onjvm0wuZ2IfKv/aXwAAIKRyn+UE6ltfbhRrgezxdb58V7eYfYucl6rCHe8AQDjQAv8KNpt7LP/9fbOf6zsVvoe3m23dR89P7+7rfaVb50fP+lMAdf1h9/8hjS+/EztAV/ZzV/eln941f7QNx8cbM/HpTWbFGl8+ZvviHwhzauWzMv58ZPdV+01fPuf/1dxEZH4zW+1W/OTa4/a24zP//mdb7yofCm//Y/q8PJvf6u21v/qZe3TuzdW4nGRVuvT2qW6qj/9nnFjAtPIDYpQUaMlQjs2QkWVSJWWovokZKWtFzaevh58OZ2WWq20NFeSdDp3+7bp4rceFkdtpm8d59U5Wzvj2NjM49UO9Ml7d7njDQAIGgn86BKzcf1cbyK6OoGISN8Y9Mm1v4wd/fXfyu9/88vez7U13r4SEfmqyD+IfPO7ahbenlbuC5HuZHKizgwnIm+vOiPHt0egu2FRq5j/6OTkfC+/W2lUjjYrR33v/skfGy/FNHJ9IlTUyInKjo3WORCh0lJUn4RvGrnL16VSyeoDtVqpVjN9N/egKB70s09m1z5YXZmPy7n5pvq9vWqIJO/Nvu3OIZtMZj/o3DkHAMA/dKEfXfOqJRJfebQ2rGL0zRvZnYOTwsrNPxQRkXf1f62Ocpdc2zk4+GGyM9Tcd5K3b4j8g4jI12a+235xfvtgZ+373+ysKpnM7hzs/LOeIjhwI52g3x8AYLrFVwonhe0Vp2m32gDfONrd7Q4f22hUdjeX985NF3p/wHvvvee24ACA6UULvH3zPbOuiWid5NX27/hK4WSl847+706DfPIvdto3578lIpK8859eVESSaweFlbhI615cGtoo9Of/w/LufxCRr3xHW0l8fuW/vXr5mW6kerW1QD+GTnteO/mqvpTx9D+TSkW+NdtTmvY/+mekwyRRJ42LXCPhuIsAIBiLxevr4rgL4Yb6/Jza8V6N663W8fMnR5VGZTc/qwZ1AAD8QQI/ivjde8mjRqNSO9+edzwO7T/8/f8rIvKtqyfLyw3J/nDN4DP/35dftPvGi4jIF1fvREQqu8tqn/xviGijy/dotXvZJ7M7j7Zv1P6diMi7/6S+1Z7c7nb2+79tftZQSeXlv/3Td06/wcSK4uxrE4Np5ACEXHsKuexOQbt9Ho+vbBdmZXm30nj5aWvFKIP//PPP+16JxWK+lhMAMJHoQj8SdQh5qXx87KwLu4jIV//JfyEi8tmv/0hEpPLjl1om3jrf2/0PIiLy3fe7LfDne3ml8pueVXwpIvLZ/6Hvsfd3TRGR37f/1ajsbuaf/1q/jNpw8DV5VflM39TZePu3vesGAACD4iuFk5OTwQnk5tNZEWm8/NR5jQAAALtogTfTOj9+/vHL7sjyyWT2njrOjc75c7XXeePoyd6syeg1rX/9V5svfqV/pd3zXv4kK59V5NUrdTC6xq9EdK3rIiK6rvDne7uVhsjXRH6vdZo//R+Xf/xK5NXHx6159XZ/6/h/b4iIfO17PywoS3Fpne892a28kgG/F0mu7TzSvk7rf/3vNv/6CxG5+JuWMAgPACB49XpdUqnBgenqhYUPX69+9PD+osGbQ5zvLQ+MLe/X9O09z9UBAOALEngjhoPDNyqN3cpRUt9nru2b35TfNCq7m81k9t4Hq3fnO7O+t1rnnz7/+KiiZu83Ep0Z1uOzCZGGVP5afvjD7L/5caXxZe/6vnPj+39+V47++rPuS+qUsze+9+23v3irvfjH32oXrVNZaH36Ut1W/HZ7Xrn57UdrzZ7vcqM9dn3yz++2E/XW+fGT3b/+Qn37H/7eeJcwjRwCE6FzIEJFlUiVlqL6JLylrZc3Plwq1SS9f3k2MDdc/ZPntVqttlTaknTu9Flx0YOx533E7PAAAD+RwA/qPCXe00SttsgfVRqV3b103637mb9Q/vurZ7uVdo4/uEZtkpq2zqRzlR//2KgAX7z97Oin3+l5SR1Ar3Wc3/yFyG//rnV+/ulV7Rf/rq/gn74crJvFVz64fbTbbYSPb+ezld2KNH68uazb+tfa/e6//LVxywHTyCEwUTkHonW6Rqi0FNUn4ZtGrq2TvIuI1F5fysDccJfdP2ulpblXRkm+qcHxZ0fVvsdv0IyvPqOm3a0HAMAHPAM/QO0Wn1w7KPT0l4/Pr2wXdrJi+MT7d+a3CycHBztr2Z7qUTKZXds5OBicpCa+UjhYy3Y+mczuHJyc7GRFRJK31RX86gsRkf+sX6h1/r/8nw0Rkc9+vLm7e3RUedXXct8ZF7fPjW99o+ff89sHP8x+52u9H+o8NS+/djgjHQAArpU35jrZu6Rzpw/nBj+ymD+7vr48zaXVf9a25jbKwRVwQHw2ISJSqfVNGdc6/rgiItm0H73zAQBoowW+X3t0WeM76PPprFQMx5htHe89ac8Hm8yuPdruvt06zi8fNTqzxbUfx8vunGyv3rtqNioNkUaz9mlrfmX75GS7dbz3RNeE/4e69Q/26pcbN/70twaDz2V3Cnff7uWftB/gv/Gn3xSR5F/8eadn//GTH1e+6F3k2ze+/0/ls8pbyf5V0NPfMOQ7AEyr8sZSSf3LsPO8TmqxeHZ5a2FuqyYipaWNB9fFxUCKOKjdi66ymxdtGrnzvSe7lYZIcm2V/B0A4CcS+H6dB9SNp4Yz7ot39TzfTt5FRBqVo82mDJkI9mrvg93Kl71LfHC12TfUTuPfqrcKOr36+7x9+7dG6778OL+pe9BRTfE7jfnGq/rV289+NfAiAAD+qRcea+n7Mxu94lP5Z/vP2yn848LDRfsd6UfRvoGu3YcXia88Wnu5edRoVHY3e6J2ducRc8ADAPxFF/oB6jwwUtldzu8dn7dsdChvVCqN5NrOwcnJycnBTjYpIo2j5+dWi1SOKl/9hohIdudgZ01dYnO3onamPzk52Fn7toiIvLsSEV3n+M5mTtRP3VZfbf6diIjcmFUfnH/baEh7RScHO1l1Tb9V16TrZ9/ZmH570jPlHAAAfql/8rzddz73kc1cPJX/KKf+VXv+Sd2nctkQXymcHOxkuw/NJZPZnYMT48loAADwEC3wg+a3D3bkyW6l0agctcekSyaz9+6l73YHmO+lvy8/v/1BtrJbkeaV5XxsybX8vZfKUaOy+zx9cC951GiIJNc6M9HF52e/LaJrE1fz6m8+eKR/mD7e6WL/6/+7JUtxid+99Y2jL74U+fbaQacWEZ9Pf1sqvxL5/d9/oY5O155u/vv60fTj87P/VN3em/IvZP57g+UNbBR6IEInVYSKKpEqLUX1SchKe/m68+z7LYMn303M3UqL1MRkvLtRmA13F18pnKwYvT6/XZj3dnw8AACGIoE3Ep/fLhysqnPAqfO8NyqNRuXoqP/59rbeB+btTASbvHf3eyuz2aPdilR2N7/znfZr6mTu58fPPz5Sx42fmVVX+b2kvGrIb/7+bUvi8Var9fbfPy//b5Vf9I1iF/8vvy2VL0V+9W/aD+m3zveetEeg//27X4qIyFf/sTPgfKtdvtb58ZPdTrf63zcuWvK9wXIHMwo9IIxC748IlZai+iS0o9CL3L5pPxFP3bytJvAAAEwlEngz8fj8yvb8yrZIq3X+9tPaxy8rjYY0Kkeblau+uWPczvmqNfV/8YWISONoc1k3gN03RL6Ur7YLs/JBJ9mvGKxIm/vtj/9E5G9F5AvdqpLfT7Y+a2ijzH/n9oz84lcin+1uLhsV6jd1qxsPAAAAAIAxIYEfLh6fj6/Mz69sS+t8b3O3IpWPj1fnRxunpt1m327qf67s6oaFTyaz9z5Y/cPa5o91yfqN2Rsib7V/fu0b31n4b/5q9c+vfrR59Ct17rdu3/pvJ2/8qvFWRCSZ3Xm0/XdPlj/rrujt1ZDR6v7z3zn5ImZd6+1jFHro/c3f/E2A7X6jilBRJVKlpag+CVlptd7wr97UZdFmI3z9jdqtzFG/+zCLxWLjLgIAwC/X19eer5MEvo86y5vuoXa9+Pz2TrayaziPnGvx+Hz6llS+6Nvoub6HYOv4ydFbEcnuHPQMkdO6+iMR6Z/77Y/u7ZwUui+cqv/3h3+s+4jJFwQAICBab/ja80/qeXvD2HUHvnPS7z6crq+vpzZ7f++990Tk5z//+bgLMmnYsT5hx/qEHesOCXwfOw+wB08dOj65tto3LF53SHkRkdbx/1wR0Yapazv/hfqZ9oB3Xn5Bwwfjp8RPfvKTaf76/mHH+oQd6wf26ogWH+SkVBIHGXw3f5+MBng/WmYi4f3335cp/vr+Ycf6hB3rE3asO0wj1yd+915SRCq7e4bTwJ3XKiL9o9aNTbs00rxqiYjEZ78lIiK/evnvO5Pftc73dtv95/9I/b/OF/z4uH+CvPO95eXl5fzA6wAA+GHxQWdSuK0PC8NnhStvqJPAi4OJ5wAAmCwk8P3iKx9054HXTwPfOj/ey+9WRG0JD7ZQN2Y7k8t3M/Pj/PJu34h28/9cnRi+8ePNZdXmbkVEvqb/UPsLNo4288e61bW/W/YDetYDAIKxWDzVUvi5hY2yaRJfLxc2FpZK7X+l9x8uBlA6AADChy70g3TzwBsM+p7M7gT/9LjJKPTJtZ17L3ePuh3i//hbIiLf+OaNL3+jDniXTGbv/fk/efnjF/qu9vPbO9nmbqXRONrd1A17L5LM7mwHfGsCADDNFouX+6/UhvVaaWmuJJLO7a8+uHmz84E3L148L5X0w8LkTs9ofgcATCsSeCPdeeBfVhqd1FcdHP7ufHwsLdTz2wc7s9q89JJMZj94tD0fl/MrkYY0e0ah/9Zf7Hysu8fQOn45uLbCQfpY9/XUL7cyT+s7ACBQqfzZpWx8uNVJ0mulrVrJ5LPp3P6zItk7AGCKxRg2AHCBwat8wo71CTvWD+xVL9XLhaePt3qa2vXS6dxHzx4upkjeJ4I6ctXnn38+7oJMGnasT9ixPmHHukMLPAAAGLfUYr64mC9KvV6+vHzz5sXr1yJy69aDmzfn5sjbAQBoowUeAAAAAIAIYBR6AAAAAAAigAQeAAAAAIAIIIEHAAAAACACSOABAAAAAIgAEngAAAAAACKABB4AAAAAgAgggQcAAAAAIAK+Mu4CAGHWOt578rLSaIiISDK79sHqynx86FLne8u7FYPXszsn2/MelzBC3O3MURacEpylvjrfW96tONgrnK6AHhcoDxFGfcJZ6jciqcdogQfMnO8tbx51Lh8i0qgc7W7unQ9drnXV9LNY0eR2Z7pfcEpwlvrrfM+wfmb+cU5XoIsLlIcIoz7hLPUdkdRztMADxtqXm+TazqOV+bhI6/z4ye5Ro7Kbnz0orFjdB3x71RDuwPZwvTPdH4XpwFnqp9b53qbDSgenK9DFBcpDhFGfcJb6jEjqC1rgASOt448rIpLdKXQ67cTnVwo7WRFpvPy0ZbXoea0iIsnZG/6XMiJc78wRjsJU4Cz1Tev8eC/vrM7B6Qr04ALlIcKoTzhL/UQk9Q8JPGCg9enLhohk0723VedX15JDo+VVU0SS9+5yl7DN9c4c4ShMBc5Sn7SO85u7R5WGJLM7BztZu0txugI6XKA8RBj1CWepf4ikvqILPWCg3TEq3d8tKj6bEGk0rt6KmF2y3141RJL3Zt8e7z05qjRERJLJ7AePtqd2+A3XO3OEozAVOEt9pI2Zc16zuQSnK6DHBcpDhFGfcJb6i0jqG1rggUHtG6sGHaNuzCZFpHllfrv7qikijaPd3fYFXUQajcru5vK0jr/hemeOcBSmAmepX+IrhZPCtsMRbzldAT0uUB4ijPqEs9RHRFJfkcADnlJvHookszsHJycnJycnBwdr2aSIVHbzx1x4EAacpQBCiwsUwo+zFGNFAg8417h6a/JOe1aR7E5B60UVj69sM/6GOfOd6deCU4KzNFQ4XQE9LlAeIoz6hLM0bDhjO0jgAefMRx2NrxROTk4G5xSZT3NRN+F6CFfGfrXGWRoqnK6AHhcoDxFGfcJZGjacsR0MYocpdr63PDC7hV8zet6YTTL+BkKOsxSAI4RRQI+zFIGgBR4YFJ9NiHFPHfWpp8Ssy+vyNN47dL0zfTsKE4KzNFQ4XQE9LlAeIoz6hLM0bDhj7aIFHlNsfvvkZNvwHfUWavOqJb3jZ5qPj9l+/zi/edQwan+Y4kuP253pfsEpwVkaKpyumEaE0UAQRn3CWRo2nLE20QIPGIjfvZcUaRw9750N5Pz5UUMkee+u2ZVZvXcolVrfLCKt448rYjSz5TRwuzPdLzglOEtDhdMV0OMC5SHCqE84S8OGM9YmEnjAiHoJkcpufu9cHYqkdX6c363IkAvI/Opa33LSOt/Lbx41RJJrq9N5SXe7M90vOCU4S0OF0xXQ4wLlIcKoTzhLw4Yz1p7Y9fX1uMsAhFLrfG9zYHCevg5T7V5UybWDwkq897XBBQ+256f20uN2Z9pacJpxlvpNHaNr8IzjdAWG4gLlIcKoTzhLA0Ak9Rot8ICJ+Pz2wc5aNqm9kMyuHdi4fMRXCicHO9mktmAymd05OJnuC7rbnel+wSnBWRoqnK6AHhcoDxFGfcJZGjacsTbQAg8AAAAAZfv+jQAAIABJREFUQATQAg8AAAAAQASQwAMAAAAAEAEk8AAAAAAARAAJPAAAAAAAEUACDwAAAABABJDAAwAAAAAQASTwAAAAAABEAAk8AAAAAAARQAIPAAAAAEAEkMADAAAAABABJPAAAAAAAEQACTwAAAAAABEwvQl8eSNm20Z53KVVtcu8UKiPuyRTI0y7vF5YCE9hYE/noNm5hoTkZAtJMaZaVI4BYRQ2hGmXE0YjiDAKFyb+GExvAo9JUi9vLEzurxTwCT8cACquBoAL/HAwFiTwiLzyRmxuqVQbdzGAaOGHA0DF1QBwgR8OxuUr4y7AuKX3L8/yqXGXAgCASCKMAgAQIFrgAQAAAACIABJ4AAAAAAAigATeqZ7hMOvlwsaCNsruwsJGWRvHol4ubCzo3tsolPvHuNAPkdi3JoNPDytX7/ZiCwbrsBp/tTOccHuYTw+/ppMSGu6WBdMl1FIulUREpLY1Z3/Iyf7CmJbGdBnrBex+WTfr7qeNBL0wdIzWMR7WzscN9rz5EnYPk9Voo0YD2LZf2yj37oS+gWicfrX+Y+j0N9y7MuvzwcFv2Wjtdn84fp7zJsW2fRAdXChclZNLvdtrgo3vwL4ljA5fgDBq9nHCqC2EUYMCE0btlj/8l/rraXWaExGR9P6ls+Uu99MiIpLbb6+hX+70+vo0lzZ6q29jWhFO9+183LzMl8bLi0g61/PZTpEHv7X2tU49/5rWJZR0Z5MD33LfZPXdBQxXO/SQXpp8JaPSdAqT2zdexmhjtg/HkM/3l6XzuZ5tasdgYD8afvXxHVZ1x5t+fnABN4fJavfqF2m/lsv1bWLIqWXx1Uw+nuucxHaOjqOTzf5v2YDlD8fbc97eianfrt2D6OBC4aqcXOqHf83cvzTZyhDsW6df07qEhFHCqPEChNGBDRNGCaMTcqmf+gR+uL6d27Nj07nTzpu6q2o63T4RLjtvacsYXjvaq9J9XltV74/B8HTsFiidO9VWYbIOs/Nx4Ift4dfsriud29dWpC9i729ev1vsrN7hvZhuaXSF0a/dqjCnQwvj6HD0fl63dm3P6Fc+WPPQ7Vl7V/cxHtaewup3fPeaZlA3cHaYnNY8eha6PO0eAIdfTTtLjHepwWE31HdBMFqVbjW2f8vDtte/AvfnvM3d5aw4pl/K8YXCYTm51Nv4mt8RewijhNGB4hNGCaODmyeMEka51NvbwyTwQ5lHFpPbPYOnke49k1+O6eeNzl+bdxC7RTW4XBkHBaM7p6N+TaNSDLyp30h3/QNLGN48d1bzsLguWx8je4VxeDiGXh+M9mT7s46rHdehOKwWO173cXeHyUXNw+r2ss2vZnxW9m7GYc3DfFW6d+z+lodtz7zmYeucd3wmOCyO6bfyu5xc6u0U2ybCKGHUfmEIowYlNVuHxU4gjA7fLmHU33JyqffxmkACP5RZzcPeFbR/McMQa3iRMDiyg6fjkB+2zcuVwc/as6857EI4+L7F6o1/Ta5qHjYbGpwVxvHhGB6OTQ62m2rH9TgPq52wYn9PmpTdec3DouJh96tZHMNhv3FHHx7cjs3f8rDtmdU8nJ3z9n/gDotjuha/y8ml3lZlxx7C6EhfkzBqtW3CqEmpCKOm7xJGAyonl3ofrwlTP4jd8Cubyfy26Vtzpiu9fXNgkdTN26Yfzz1YNHh18YF61F+9sRic4fJ1zWyL+q3WXl/2r7b0QhvHov7J85pZOUb9mlbr7lli8Gsafae5W45qjRbbq23NqWNC2Bv6wl5hnB6O+ptXImK8dxaLpqff60825rbU3Xp6VjTZsZaCP6wWX8fox+HyMDllsB+cfjWrY9j9uTli94Lg8LfslK1zfoQfuFf8LieX+qFfs5MMEUYJo1YIoz0Io4RRmxskjOpwqZf215z6BN41kxPABasjLj2n0oDOVc90FZ0foO6cHjgfLc+YUb9m5/dSWoqZ6Izh2f81h+wW1xaLnSdJarXS1tLcXHd8R/Pfvb3COD4c7b3j8KvWSlul9p+lx3bGCh40vsPaVq/X6+VyuVzY2FhY6HxYz9VhcsxgPzj9ap3Pm3BRV7Z/QXD2W/a2GG0jnwnhLyeXeluG/BCMsW9tIYzqEUY7CKPmCKPhKieXeluc7WES+PEzO+IOrlmmJ43Rbay+89HLi1U0LBbPLk/3c2nd7tWi22iTI7U5OhzupDtheevpsDlvQqQ7qcvc3Nzc0tLS0lapVDOJ3L4fJk95WFF2cEGY+t9ytHCp9w/7NmCE0XEhjNpBGJ1UXOo1JPDjZ9bjw0GLhmmnkc4Npx69XU3am/H5bBz+6I6rPmxupRbzxbOz6+vry8vT/ZwuutVKW0tzQ+eBHcLZ4XAuvX95VnzWfhSmtDRqcUfg4LDWCwuxuaVuPSOdTudyuf3908tL0wEp/D1Mnn01EU/vjDu5IIzjt2woZD9wU2Mt51Rc6sdkKvZtyH5lhFFvEEa1EhFGw/QDN0UYDcelngQ+9KzuSRo8sdHL+ImP9vlYe/5JXcovSiL+nY0GPVJCJZVazBfb0U2b1MFtjzqXh8Pk8/WCepd9IMCmV++nRFL5MdY9HB/WeuFD9XFDbYKNs7OzYrGYzy+mbHQ5GuUwOeza6/SrDbnt66pjsaXeC0KAv2VDAf3AR96NYb8QiUzKpT6cJmPfhvXsJYy6Qhgd+Lw3W7eBMOpG2C9EItN1qSeBH7/a80+MDlX7PFHDjJnO0dYNsGCwjoFTuns++n2x0n4wxl+yG18X3AV7p0zDuUhqMX/Wvoft9j6w08NhMD5Gt6RDO+qMse7h9LB2vkx6/1lxceB87uyXwcUdHiaj4+a0ucbpV0vdX02LmB1zN41Fzi4Iwf2WDXn/A/fiIA4KxYVoKi71YzIV+5YwKoRRwqgthNHBlRBGJ+xSTwIfArWtDwfO9vLGko2zUVL5j9qxy+A2ar3wWD0bcx/1D1qqnY+PX4n4erFafKhGR6MvKSLlp+1xYAeK6A8tThjedh46xMWwtTs9HFrVY+Dz2o6xOjTjq3t4eFi1/aLj9DCZ37bslMQ+p19NK+vgIdAaTJwxeiLT/IIQ3G/ZkHdngpcH0c9yjmDSL/V+rdqOSd+34z97uwij3iCMEkbbmyeM2selXivisH72E8v2PPAihvMIGj2iYDWVpcHsjD1FSO+3+0RdX57ut4dW6Z/kznCGx+58vOnc6WVnHZedwUfNZsrTb9zhLJ4Ov2ZPCbVvqe/E1ftxp/NY9k2leHk5ZGJA7Zvr9ldvcSwnkrRZGNuHo1sc3RlgeAIYT2HZncrWxlyvYzus+gl3uy/qdsvA+h0dJn1hjH5IZh83edDI4Rmr/3YGB9FqSz0cXxAMlnMyn7HJD2ekc97O7hpWHpsH0e9ycqm38zUdIIyO8DUJo4RRwihh1H55CKOTf6kngbfF15pHOtd7+TXYqPk6espksI6c6U++uwOMiuvl6WhZQtNQbP+C0n8sh158rUrTt13nhXF+OMw+n+5bsXHNo6fuMuz6PtbDavLZdG5fuzCZBAobqzf7dFpbuYOah8OvZv710rn9oVsy2Mv7hhen/vNhYEGbmzFaTr+wt+e83WqH1WqMD6Lf5eRSH6UEfhL3LWHUweEgjBJGe/cyYbR/DYTRYeWP2KWeLvQhcOvhWe8NMvW2y5ntTiip/Nl1/1Qh6XTu9PLyrGi6kk63s0A6C3VL2FtEZ9/TzGKx7z7tkMdvTEqj3o8bvThOD8fg59U9c2ZzIM/FYudhNuNON/5xclgHp7NRP3h5Vswvav2a9E8mOTtMqfzZwE48vbw+y7vtxunsjF0snl1envZv/qx4383G7xevB9dlcT64/S07/eGY8+gH7vFB9K2cbk3BpX5spmDfEkYJo4RR2wijulUQRnUm5lIfu76+9r0sMFbeiC2VRNL7lwGc84PqhYW5rZrkTkMyMwUAd/gthxuXev+wbwF4gN9yuHGp70cL/NRqj2g60Y0ywDTgtwwLnB7+Yd8Ck4HfMiyE8fQggZ9WYTwbATjHbxkWOD38w74FJgO/ZVgI5elBAj+V6mV1Yo70/sMwnY0AHOK3DAucHv5h3wKTgd8yLIT19PjKuAuAQLWf4mgLatZYAF7jtwwLnB7+Yd8Ck4HfMiyE/PSgBX66pG7ebv+Vzp1ehmYoBgAO8VuGBU4P/7BvgcnAbxkWQn56MAo9AAAAAAARQAs8AAAAAAARQAIPAAAAAEAEkMADAAAAABABJPAAAAAAAEQACTwAAAAAABFAAg8AAAAAQASQwAMAAAAAEAEk8AAAAAAARAAJPAAAAAAAEUACDwAAAABABJDAAwAAAAAQASTwAAAAAABEAAk8AAAAAAARQAIPAAAAAEAEkMADAAAAABABJPAAAAAAAEQACTwAAAAAABFAAg8AAAAAQASQwAMAAAAAEAEk8AAAAAAARAAJPAAAAAAAEUACDwAAAABABJDAAwAAAAAQASTwAAAAAABEAAk8AAAAAAARQAIPAAAAAEAEkMADAAAAABABJPAAAAAAAEQACTwAAAAAABFAAg/vlTdisVhsoVAfcT31wkIsFottlEctihOjbC18tO8/+tEIFQ+/l8tVTeqeBRAGLsKo2UXJh0hqd119y3kRXif10ktQA+AACTw8Vi8sLJVE0vvP8qkRV5XKP9tPi5SWCCcAgCnhYRgVXyJp6YWtVLz8ouTRBgEAOiTw8FS98OFWTURyH3lR75BU/qOciNS2PiSFBwBMPo/DqPgRSW1l8OTvAOAPEnh4SKt3nBYXPVrlYvHUk4pHev/y2hbPSg4fLRbbh+ts5Bquh6sCgBH5EEbFw0iaTqt/2MjgO/m7tgwsENQAOEACD8906h3p/YdeJsGLD/fTQis8AGDC+RRGxbNIurqaU/949WbIajr5e251dYTtAQAGkcDDK+WnWzURL7v9tbV7/0lt6+lEDTAHAECXb2FUPIuk9x+oGXzt+SeWGbyWvz+4P8LWAAAGSODhjXrhcSdae98HfbFdYyg9phEeADCJfA2j4lUkXbSVwXfzd55KAwCvkcDDE512g+H9/urlwsbCQndemYWFjUJ5WGWi3flvfI3wTkrdmYulM+Jv77KDS/ate2Fho1y32iH1cqG3MJ2VuqiSuToaw1e40FM2i8INnbemPQFS/wREw5ez/cWsV1UfOHq2d4+Lfetw7wGYIDbD6AgXJW8iqZ0Mvv7mlYjYzd8JagQ1AM7YG9gLsHTafirOeqi4y/2c6Vg2wwaZu9xvL5o7dVMw+4PYDW751KLUudPB1ep3hlZsk69runLj8lqVRS2O/e/v+HuNsqPMVjr0+HR3YM93s1rO4WlmvirLg2NZchf71s3eAzA57IRR9xelzgo8iaRDi9rZTO702vQqPuQbaRc+66LYXRdBzfILEdSAiCGBhwe0675FncAslbWMQw63YbGUywR+eKkHy9Ot2+znLJe7PLV6f7DElh83Xsrs+7v5XtbsFG5wpZ7XdZyfZiarGrKiXM68ijTCOeNwMQCTYniIc39RcrQZy6Xaqx6Swffk71YJPEFt+HIENQCD6EKP0WmTvZr3lusMrSsiks7td++76u7RWo+O2+m1Z2/+WW/0lvr0sltqXbFLSyY93mpbWyXp/bqXp904WHr84VKpb8X69/s7OZY3ljpz6vaU5fr68rR7e37YwEIefC/jNT42Kdz1Ze+X9nUUg9FPM4MV9R+hXFpESiWTCY7d7NuQ7D0AYzM0jLq/KPXwJpLO3VIvS8YBp/7Jc3UoviH95wlqdopBUANg4BoYkXZz1vy2f/derGHfLO1qbtl3cPhmrDY8nMUdZOO7xCbv67dp1btt6Ps9b9oujPFS+lddfi8Lll0krT7gbWOFq9PMaFW69gajTn49zRG9m3Kzb13vPQATYmh8c39RcrolIwOXSau19La/27j8E9SGf1uCGgA9WuAxqs7NdpHbN00mvtHaFownx+nMbmN9qz118/bwD3moewc5d1o0bEdYLHYil1lbhtHX1RpARNL7zyzf19F2odn4RsaLGfDie5l7ZbxEKn/WvuQYb9ITnpxmIt2xpNRdZLSmZ8Y9Ckfdt+PcewDGZmgYdX1RGvykJ5E0dX/VrA3edvs7QW0oghoAYyTw8Ez61pzxG0PjtCwW29fyM4vJbzud9gJy+boT78yrIVoF49Ubo+A5rAJjXFXTvmft9WV3S3b20MBSRjz4XgO0KqHUSkux2MLGRqEc+CizHp1m3fGTLXZRt97Uw92+DcXeAxACJmHU/UVpkDeR1DSDt5u/E9SGI6gBMEECj1Fp1/fhTJvonRkWzY3Y6C3YeyO4G/BKSzFTnSf4DItkekfD5vvD1ev1erlcKGxsLGhFGbbI6N/LQGd2ovZSpdLW0tLcXGeemdEm8XFs1NNMO6OtDpBRJdjtvg3V3gMQuGFh1PVFyYqbSNplksHbzt9NENSMENQA9CKBh++6EWCC2byrP7J6z6yqc3Nzc0tLW1ulku2bKA7Z/V6p/JnxQLW1Wmlra2kuFouNOhvvED6cZlaVpm4Lg2vdfTv+vQcgCny+KDlhmMG7yN8JamYIagDMkMADEVEvbyzE5uaWtkq1ml9Vm1Gk8me9gwf3qZW2luYcDAI8Xdh7ACLFIIPv5O82u5cR1CYZew/wEQk8MIStQVKHPsU3qvLG3FJfk0Q6nU7ncrn9/dPTy0tHA+6LiE/fK7WYL55dX6tTxezn0um+0G1rvpuwsGqpsW4bcblvJ2rvAfCc+4uSD7oZfLvrtJa/r963ETgIasEjqAETggQeoxr63F23X5Z57KgX2v3nYhvDh4gd/dlxG+yUOjiGk6qenZ2dFYvFfH5xMWW7RhLU90qlFvP54tmZGrr189s7GvrY/ggL3p1mhqMI2imYd/vWo70HIBKGhVHXFyUro0dSLYNXxx93lL8T1IZvkKAGwAQJPEbVnZTGLDJoQ5TWtp4ah5juHDoWT845rZ2MqBvxzMOLFjv97gbWHYJm/1nRsGbTnW5mCB++19AqRGoxf2bdmGJy8jhpUvLoNNNVSqX02Oz7G+9uV/vWg70HINKGhVH3F6VBXkbSngzeWfs7QW04ghoAEyTwGJl2gTe9Q9udztU4eOimKDWPQVrYs1c7GFk34pn18aoXPmyX2+8iDQv59cKCzfF6ffledioHxl+h2+5kNINstyC2eHKaiQzfRfXyhvHudrVv3e89ABNiWBh1fVEa/KSnkVSXwRc+ee0gfyeo2UFQA2DCxkMtgDXtRqr5Q1L64UjTuf1TbU43fU8q67nebGzFYiEb08hZLK0Wu9PL77p/YJbeEg3b5rD3u/uqu15dSXrKcX15edo/Qoy+NMbbcve9rAwcX/036y2jyc5SF9SWGxz5pmc5k33o5jQbvov0axrc331H0c2+db33AEyI4QHO9UXJ6YasFhpcdf9Y41afMAxOBDWL70VQA2CIBB4esFMjMJ5RxCJouNiGxVKuEng7pR4skB8JvK2CGKzWbFtuvtfoe8roOw9ZLrffed9OXcfNaeZuF6VznQqI0280+GVG2HsAJoTDG+GOLkrONmO1lMGqe0tl+YGebRLUCGoENcAtutDDA1o3L6MuY22p/NngffWu9P6l5diw2uNZDqaX9UAqf3ZpOgmKqHeji0EUKJV/ZhUO07lT7Xa81Sg13dV5/b2GrbG90oGDnMqfmZ0W6dzpdfG+k0KMfJr1rclkl6dzp2cPb1ku6HDfut17ACaEjTDq+qLU5UMk7faXFkf98glq9otBUAPQZ9x3EDAZ7N/Vvzzdz+knEkn39Aobff0my412m/eyv9RWxfalBb791sDO03VOs+x6b7wtR9/LlvYae6J2eqAHndFi+qV0pbh01lihrdD2aTZ8F+lXlE7n1NVo5TItgYt963LvAZgAdsOc64uSX5G0G3uGvG2wVYKave9FUAOgF7u+vhZgZPXCwtxWTURyp9feN0mXN2JLJXF0rxkAgOjwN4wKkRQAJgRd6OGNVP4j9aavRS96t7T5YnMfUecAAEwiP8OoEEkBYGKQwMMriw/V/lfm04a4pE0uu/8wyMffAQAIkG9hVIikADA56EIPD3U6AHra/6/d6Y8+fwCACedLGBUiKQBMEFrg4aHOqLKlpQ2vOgCWN9qP7D2jzgEAmGw+hFEhkgLARCGBh6e0uoc3HQDbz+xR6QAATAWPw6gQSQFgwpDAw2Ptukdt68OR6x71wodbNSodAIAp4mEYFSIpAEwcnoEHAAAAACACaIEHAAAAACACSOABAAAAAIgAEngAAAAAACKABB4AAAAAgAgggQcAAAAAIALGm8DX6x5NcgoAACYRVQUAALrGkMDXy4WNhYVYLBaLzc3NbZRFRMobsYWNQpkYDQAAqCoAAGAo4AS+Xt5YmFvaKtVqA2/VSltLcwtqkAYAANOJqgIAAKYCTeDLG3NLpZqISDqX28+lu+/M3UqnRURqpaWFAjfXAQCYTlQVAACwEGACX95YKomI5E4vr8+KxfyD2933Uvmzs8vTXFpEaltPubUOAMAUoqoAAICl4BL48ouSiKT3L4uLKcMPpBaLz/bTIlJ6QVgGAGDqUFUAAMBaYAl8/c0rEUmv3jcOyarU/VXCMgAAU4mqAgAAQwSWwF++ronI7ZtWQVkkdfO25fsAAGBCUVUAAGCI8c4DjwiLxWKxWGzcpcBEqVQqlUpl3KUAgCAQRuE5wigwDQJL4Odu2enx1n767dZcIGUCAAChQVUBAIAhAkvg7TyzVi88LokM7z0HAAAmDlUFAACGCK4LfScsLy1slA2mb62XNxbmtmoikt5/uBhYqQAAQEhQVQAAwFrs+vo6sI3VC+3AKyLpdFpqtZqk07nb8qpUa78s6f3Lszx31SNAfXIvyPMHE099ci+bzY67IADGZnqqCoRReI4wCkyDQBN4EakXNj7cKtVM3p2MkDwlqHnAc9Q8AMjUVBUIo/AcYRSYBkGPQp/KF88uL0/3c+l0uvtqOp3O7Z9eXk9GSAYAAK5RVQAAwEzQLfDwzfne8m4lu3OyPW/3wwav211eaDqAD2g6ADA+hFFEHmEUmAaBtcDXCxsbGxsFgzFp+j+1sLAw7GMYcL5nWJMw0bpq+lYSAABcGWdVgTAKAIiErwS1ocvXpVJJcg+KYtX1LXVTSrWa3L4Uy4+hR+t8b9NJvUPk7VVDHLUTAADgt3FVFQijAIDICCyBt6f+5tW4ixAtrfPj5x8fVRrOljqvVUQkOXvDlzIBAOAfT6sKhFEAQLT4l8CXN2JLpf4XS0uxgdcGpW/N+VGiidM6zm8eNUQkmd15lK7Zbj5Qe/4l792N+1g4AACGGHNVgTAKAIgc/xL4xeJprjQYl23IfcQIs7Yls2sfrK7Mx+XcbMKdQW+vGiLJe7Nvj/eetJsdksnsB4+256mKAACCE4KqAmEUABApfnahX3x4mpMX7X+8elWq1SSdzt2+bbHIrVsP7t9fJH23J75SOFlxvpjactA42t3tvtZoVHY3rQbfff/99/teee+9937+85873zwAAB1jrSoQRgEAkePrM/CpxWJxsf13eaO0VJPbH3VfwZioQ++oPQbV1oJW6/j5k6NKo7Kbnz0orNCAAAAISASrCoRRAMD4BDaI3dytXC4nPNw+fu25b7I7Ba2ZIB5f2S7MyvJupfHy09aKUdXj888/73tFncAWAACPRKOqQBgFAIxRYAl8Kl8sBrUtWDHrMTifzkrFvOoBAIC/olFVIIwCAMZoXNPI1et1k3cuP3n6WB6c5UPdfW4i3ZhNijQaV29FqHkAAMYtalUFwigAwH/BJvD1cuHp463S0IFecw+CKA2MMK0tAGCMol5VIIwCAPz0BwFuq7wxt2QjJIukb/lfmKnVOs4vLy8v750PvKOOypOYpd0AADAm4a8qEEYBAOMUXAJfLzzuzPSaTudyuVw63f+3iKRzp5fXYesUN1HiswkRkUqtr+rROv64IiLZtMkEOAAA+CwKVQXCKABgnAJL4OufPK+JiKT3L6/PzorFYvHZalpEarcfFIvFs7Pr68v9tEit9PgTs0fe4In51bWkiFR283vnLfWl1vlefvOoIZJcW6XiAQAYj2hUFQijAIAxCiyBv3xdE5H0/rN8qv1K6v5qWkRevWlH4VT+7DQnUtt6Wg6qUNOg3dcvf9zqvBJfebSWFJFGZXdzeXl5eXl5c7fSEJHsziMGzgUAjEsoqwqEUQBAmAT5DLyI3L6Z6v4jdfO2iNReX2qvLD7IiUjpBRm8v+IrhZODnWwy2XkhmczuHJxsz1PvAACMWQSqCoRRAMC4jGsaOZ1Xb+qy2A7Wiw9yUirpX4FN89snJ9sGr5vNVxuf3y7MGy0AAEDIBFBVIIwCAKIgsBb4uVs9neB0r+nvq6sGXwEAABOOqgIAAEMElsC3O8E91487o76mD9X1N6+CKhAAAAgTqgoAAAwR3DPwiw/30yK1rbmFjUK5HYbb99W1UF1+ulUTkfStucCKBQAAwoGqAgAA1gIcxC6V/ygnIlIrbS3NbZR1L9W25mKxhYVYbKkkIpJevc8D8AAATB2qCgAAWAp0FPrF4vXlfi7d89LD05z6V62m/r9++hgAADBNqCoAflMUyWQU/X+KMu4yAbAtdn19HfxW6+W6LKY6sbdeLz/98PErEbm9+tHDPOPPR0MsFhORsZw/mFSVSkVEstnsuAsCYPwmvqpAGIXnhoZRRZFqVRGRTEbRv669SCYPhN94EnhMAGoe8BwJPIDpQRiF56zDqJq096Xuemoar/4vgNAKrgt9eSOmG5MGAACgB1UFwCdab/kRPwNg7AJL4MsvSlIrbb1g2lYAAGCAqgLgC0dpOTk8EHKBDmInknuwGOwGAQBAlFBVALzk7rF2HoYHQusrQW1o7lZapPbqTV0mYeQZAADgMaoKgPeq1Z4W9cNDpe8D6+v9r2QySrWqiPS/DiAMAkvgU/dX01vQ6Es/AAAgAElEQVS12taHhZvPJmL0WAAA4CWqCoDHtIZ0LW9PJJS+z2hv9WXyikI7PBBGAY5CX6+XP/lwaasmIpJOp2/fvm360VsPi0zwGnYMnwvPMQo9MO2mqapAGIXnBsNoJqM0myJGefugZlMRXRpfrSqMSA+EUGAt8OWNuaWS9q9arVar1Uw/nHtQlEhHZQAA4BBVBcBjFxfNO3cObX5YTfIPD5XBTvUAwiPgQewAAAAA+EtRlExGmZlZd7pgIqEMPicPIDwCS+AXi9f2FRmAFgCAKUNVAfBMtSquZ4MjhwfCjBZ4AAAAYHKMPpd7IqFcXDS9KQ0AT5HAAwAAABNCn70nEplms+piJc1m9c6dwxHvAgDwAwk8AAAAMIEymfEsC8A/JPAAAADAhOhrNnfRCN9sVhOJjHjRFR+A50jgAQAAgMnkriGd5ncgtEjgAQAAgIm1vu6gEb7ZrK6vZ3wsDYDRfGXcBQAAAADgo/X1zOFhVUTUvvGG1CR/MHtXFFGU/leq1e5LmYzS9wEA/iGBB+CeoijVqkinrx0BHACAcFpfz1Sr7Sy9L43XXhzsOZ/JKNWqIqJI79P1+r+rVUVbUJ/YA/ADCTwAB7SMXZXJKPpgr4Vz8nkAAMImkxGRbhqvMUzdB5Y1HdCuL7Enhwd8Fbu+vh7f1uv1eiqVGt/2MYJYLCYiYz1/EDTno9EqjnL4SqUiItls1lGpAEy0ia0qEEbhOTWM/vSnHofRw8P1RCJhvwKgNshzEx/wyRgGsauXCxsLC7FYLBabm5vbKIuIlDdiCxuFcj340gCwQU3dnc8lo2QyznJ4ABCqCkBoVKtVEQfZu7Qb5In+gF8C7kJfL298uFSqGb1VK20tlZ7nTs+Ki8GWCYC1UaaBVRdUFAI5vMTgCxONqgIQIhcXh3fuHLpYUP/AHQAPBZrAlzfmlkoiIpLO5Vbl1ZYWn+dupdNSq0mttLRw6/IsP4l95YDoUdNv19m7jsJDcRgFgy9MD6oKQHgcHlZnZhJuZ5In9AO+CPAZ+PJGbKkkIrnTy+JiqvPv3Ol1+z66dsu9+xJCjIf3psEobe9GhrTD8ww8+ugyc8X+Ump9kScwI2maqgqEUXjO22fgDw+riUSm2VTW1xXXK6lWyeEBjwX3DHz5RUlE0vtqSDaQWiw+20+LSOlFObBSTZDzveXl5b1z259vHe/l88tt+b3j85aPhUMUeZ29C0/EwRFt5AWn52FnEc636BlrVYEwCgCIgMAS+PqbVyKSXr1v1eUtdX+VDN6d873diqOPL28eVRqNzr8blaPdTQfVFkw8H7J3FTkVhlMUr85AzrdoGWdVgTCKieFhi/eIze8A/BBYAn/5uiYit29aP7KWunk7mOJMlNb53rLDesduRUSSazsHJycnJycHO2tJEans5o9pPwAwXuozk97dP2IqhAgZV1WBMAr083AIOi7AgLfGMI0cPNQ6P97Lbzqqdkjr+OOKiGR3CivzcRERic+vFHayItJ4+SlVD/jY/K4im4IptxMWDlknZx3MEEYxeTx57LzZrIpUR29+Zxw7wHOBJfBzt+z0eGs//XZrLpAyRV3rOL+5e1RpSDK7c7Bjd8CS1qcvGyKSTc/3vDy/upak6gERURRfs/f2Jsim0Me7bvOmW/D7xMbIgq4qEEYxqUbP4d+9O6TzPBBOgSXwdp5Zqxcel0SG955DVzK7tnNQ2G63Adjx9sqo4iESn02ISOPqrYelQxQFMHEryTsGedpt3hh96UNvHFUFwigmVCbj/mH4alW5cyfhZWkAeCe4eeBT91fTW7VaaWlBTp8NDi+rzQwj6f2HEZ8ZJijxlcLJitOFWldNEUnO3hh458ZsUqTRvGqJQT3m/fff73vlvffe+/nPf+508wAwyOe2dz2FDiBhFnBVgTCKCaZe6FxcXdXWe7osAaEV4DPwqbw69UuttDQXiy0sPH4lIvLq8cbGwkIsNqeGZEnvP8vT/g4AUyPgbDqAPiZwj6oC4Ck1G7fZFK//sFfPrnMvAPBccC3wIpLKn13KxodbpZpIrVYTEZFaTY3GIiKS3r88IyaPV+Pqrchg08Hnn3/e90osFgumRAAmW8DVO7UjPY3woRX5qgJhFCGjJeTqPwevt1qirs/YFUUyGW8KwOUW8FagCbyIpPLFs/sPy588ffz8VScwi6TT6durHz3MD/SWQ+CMegViegQwgp22IZIoSKCd5/U4/UIt2lUFwihCSUvOLRJ4AJEQdAIvIpJKLeaLi/kxbBmAtWrVszvu1kidIGM9DehIH3ZUFQB/kK4DUcc88NPGfJRcdVzdxKz9kXgBYBRjfDaSEenhFmEU02L0ueg8mZEeCJg2r636XwgrC761wNfrdfcLp1Ih7yAXZWaj5JqPq4spEkzzu4goCo3wwNSLZlWBMIrpod5mdXenlewd0aI/z/V/V6uKVj0OySntUwJf3phbKrlfPHd6XWQqOZ/E795LHjUaR8/PV7Z1k9iePz9qiCTv3aXlAEAQAhtwwaIAPAk/VlGtKhBGMVVc39kPrEnAQ4rSn6GFswEWnrO4UdWX2Ichhx/HM/AYr3bVo7Kbl51H2/Nxkdb58ZPdilDxQDunCiCtInFCYAMumOEEhEuEUUwTNV5Xqwaj35lRWywjFOX1eXvf19RaX8nkJ5V6xG2e3lolebxpvE8J/NzD09MHgy+/eby0pQ4nm87lVm89uHlTffnNi+fPS7WaiKRz+x89uDk350+xplHrOL951JDk2kFhpV2riK882rna3K00KrubFd1HszvaRwAA8FdEqgqEUUw9NXO1eX8/cj3nrfM37XU1k4/WV8NQLlqttBNmjCeDTwl8KrU4+GxaeWOpJkYzuC4uLubzxXp5Y26pVNp68eC6yCPw/orPbx/szD7/+KjSUF9IZtcebVPtAAAEJspVBcIopk/fsKN9Dwkb/h1yasO7/aZX6eR7NMVPhlH6nKrLjutsj11fXwezpfJGbKlkEJL16oWFua0aj8BHQiwWE5HAzh8ERlEUEcXnTRh3oa9UKiKSzWZ93TpCYkwzwPfhUY5wmaqqAmEUngssjPY9Kx7FnNZRx2k99YtH6D4FzIxYDxljZ5PAppGrv3klIunV+1Z3zFP3V9Mi8urNCMPSAgDCbuwj2GnFiF6tc5JRVQCiQU3gtf8idx1VC+wuDGmzi3lZIARu9IM4xtMgsAT+8nVNRG7ftO7xlrp5W0Rqry8DKROAQX63wJs1v2OqVKvjLoGIMI5d6FBViLa+yZOj2CqLKWG/5zwmkle597hy+IBHoX/1pi6LFoFZvfkOYKx8HYue7B2AJaoK0aN1qDYcwZtMHqHiSQ1nvI9AY8oFlsAvPshJqVTbelrOmz+0Vn66VROR3INoP9YGRJ9P83spCm2eftGqI5GYvCck8wNzQoYMVYVIsniWWJtvieG7ERIeXvPJ4YOkVmz6uu9pdYnwV3u8FVwLvBqWpbS0IKfPioP31uvljQ+XSiIEZSAEOu3kiqfrpPndS33VZbPBgSORzwMqqgqRY6cxMwyzLgEqOs9HiKIoWsbeuYwYf1L/7tA6j+d1ouAbA4IbhV46o8uq0unc7dvtv1+9Umd2FRFJ507PIj6u7JRg+Nxp4HVH+iHZO6PQ2+fw0ITxvkk4BgEK456ZctNTVZiAMOr0Vxy5GcIjhzA6lLehh1PaD2aP5NikdvmxCO6eVz+CPw0CfQZ+sXh5Kh8ulWoiUqt1I7HGeuYYAAHLZEREGb0dnrZ3D7ma+UYd1ICmeEQAVYWocHc54bkVGApmXjqf1skp7SHX0/sNrmGCqz0BD2KXWiyeXT+slz95+vi5Liqn07nVjx7eX0wRkYEwUS98I/alJ3v3kOvbxupSHAhEAVWFaHDRFbnTi97ZUphgZg9/qY2o2t9ebc7z/vOc0t7ysG18sqs9ASfwIiKSSi3mi4v54hg2DcA53eVPcbiguuzE3gENmBeBTQlPMBv7OHY0m4QaVYVwG+W3w08PKoug1pfY00194o3e8G5iMnsgjiOBBxA1WlO8zexP/Uzfp7XBSGyOMgI9725LhyiHBxBRrlsyabGEdOoDNk8hNfxNXg4Gja9j4gw2xatXIa+2OJZhEX1K4OuFjaevRURuPSyqT6ppr9ihLQUgRAYTP+0FLWPvvN7+QN9NdH2jq37aMyGft+THaIJj3+GKoox3HLsw7ITpRlUBmEbqc3mOOmFNdnfoaeZbw/ug7m0gRfG4D2DwZ6VPCfzl61KpPc9LUVI9r9ihLQUgXAYT+M4fPf/UjyBiZnAWtB/96AeeFBJAFFBVAKZRteoyfeqbAxxRF/BN/Em6DUQXegDuGV4E3V2RMxlFpDJyiSaQPxEuFI3wasezMTXCj//rA8C0GeWary47yvPw3vadlqmcVb5vvgBxO2UA0X8UPiXwi8Xr6+KQVwBMGk+6QvGom56fES4UOfxYhrIL8xha6hEZbGjSdtTYD5l3qCoA02X0iDZiDu9532kZR/fpsdDn7X0HUZsywH4mP94H6NTu9J7cfAl+BngVLfAAvOHV5XiS+jhhqLE8CR/Cs0s3JIQilvc1tA+E7Stgqriu/k5hiyUQddbNM9rraiYflSkDRu8DOK7sXUjgAXjChxwsFO3DCEDgHelDdF715e0uFiGTx1iM0pLJCYsx8rwX/cSzH6C1PN86rR1387sqRDUBF/5g3AUQEanX6+MuAgD3fLsWR/vyCvsC60gfnhOqMzGS+5sXnQWVTGYqfilUFcLGRU9mEqdp5uFVapRVeViMMTbABsZFhLJeJBzZu2qk/gLjPfrBJ/D1cmFjYWGj3H2l/HRuLhaLLWwUykRnIGp8vhZPRWYCRQkoEIakW8coebvh2ibul0JVIQLcnXETdZ7CCa9u34w4jp14lHqRvbtYMGw//2q1fRwdHUoXi3gu2AS+vLEQm1vaKtVqBm/WSltLcz3hGgCmmf83qkOU9VWrioji3/oVRUSUzkyw3f8C3gHepu69JqUpnqpCdDiqxY69ygtoRr8LMPFGDFWGi4etD44aNB0l5GHI3iXQZ+DrhYWlUjscp2/Ndd9YfHh6euvF4+elWk1qpaWFW5dn+VRw5QLgWiBdoXgYflp0DrTix8oTifVEIqFmufrXXQyf65rfv5dJGACSqkLUaDVyi3NbreyOvcoLaNRBHFwPxCiTfj57FUP0c76EqfO8XruS2Xcy6P/WH+uQHPfY9fV1MFsqb8SWSiLp3Omz4qJx0K0XFua2aiK50+viYjClgmuxWExEAjt/EEKeX4t/8IOKiPz0p1mjN6Ock7gV2P0RnzfhjKIo1eqokxHq1iaJxLqIrK8fWn/S1zqZJzMs2qfelQjbkbVjqqoKkxRGlc4UU4M3yCSQu2NQVSoVEclmDcPomHkY0bxqAlXPW0elUj8/8eezVwdLO1IudnVgBk8n7YKmCuERD6wFvvyiJCLpfdOQLCKp/LP953NbtdKLcnEx2mEZAEbm99Bu+lvj4aHGSU+a4tXsfWjqrrI5fK4LwTc7RLYpnqpCVGm/2r6fTwgrvhgXD2fe9vAOr9Yta+g6p6Hh3T+hzd6l05Fef6nqPHMXXgF2oRcRuX3TusNb6uZtEaOn3gCEi6IEei1WlP7L6zRQfJ4jPcy7dPTu9I6yd426wz2soo2102BEfzVUFaIq/LVejJEywtSDg6vyULXac+/JsBeJTNPdKG+/ZjibCqIu4AT+1Zu6mN9WF6m/eRVcYQC4V60GN/WXhG/kUgRAn3zazEPVz6gfTSSaTrN3lYc5fAge+YtiDk9VAUCgtHtP9CIRT1vL1WCqKME9QeZO5FqJAkvgFx/kpFSqbT0t580fWis/3aqJSO4BneIAAPoEvu/1Tq7e97H2PzMZxV32rvK8HR72UFUAME70IvFDwE0+LkQnc28LrgVeDctSWlqQ/WcP86m+m+v1evnph0slEYIygMk1rrv71arSbIqIJBLtjfq+SU8NJvCdPwzf9WqjI60qBM3vqig1LFBVACaY2rQ7yoUxDDN4AWMXYBf6xeJprrRUklppa660JZJOpztv1XSzveZOIz6sLAAY0KosZtOYGVZKRrlpfXjYXWEioaipu/ZWIiHNZjOEo9DbYV1mT7r/dVrgXa4nNNm7Kjo5PFUFIJS8uvs8Sg5P9g6oAn0GfrF4eXrrw6UtNQTrQ7Eqndt/VmReVyD0Ah7BTttoZJKQXtYj3PYl9gNzmbgZy01N3RMJ06XW15Vqtbq+npF2qjkkJQYCQ1UBCA/r0d3UW8xOM3nXN6ZD3g0bhppNl+PRBCxalczg5oHXqdfLnzx98fyVNgrN7durtx7cz1uNWYOwmaQJbOGUT62LlvPAqyJzbdU43VeGLQyOVnJ4qFik7tp2Mv1VoejtW0OKd5PNup7vN2TN75poHeLJryoQRuE5b+eB929+NUVRqlUHD3OpNwsidQWLMG/DqEhmoL4RRooiEUrgAx6FXpVKLeaLi/lxbBpAtA1GlDB3qHORyBkOn2Yz9g1teNfWVq0OvqxMRlO858PnOu3+ENbsXaLUkV6EqgIwXvYvZVqebz8cqxcim5ug53zAFN2Ef9WqNJuK/t1EQnGYj1dFnC0wFpGJjSIypgQeQLQFfy9Ve2Z7ff2wWpVms6q9NTOzPjOTSCRCl8m7TuQGc3g7HentNbyr2ftg83t7u7ptAQCmlFd3n6313W/V/61fT9iC+5TQhtHpq1o0m8rhoYjI+roiGBOfEvh6YePpaxGRWw/bT6ppr9ihLYWhWsd7T15WGg0REUlm1z5YXZmPD13qfG95t2LwenbnZHve4xICI9FalTMZOTysHh5WRSSRyOg+kmk2q81me5y2SY301jn86Nn7wKaGrw2DQtz8rgrVwQ1JVYEwCvTw8O7zUNqH+wbJm8LZ10Ol2RSRTG9dq02rbBweKtY5vHqDZlJrZePlUwJ/+bpUas/zUpRUzyt2aEvBWn8FolE52q1cDa89tK6afhYLE08dxM6rREXroPWDH/xAeucL1eel+/uHMzMJk3CSEZFmU5pNZ734/DPi/jGsBrkb0E63TjvZOxCYMFQVCKNADz+Clx2KIkzAHgbq0V9fV9T2EguJhKI2sVik8fre+PAQXegj7HxvtyIiybWdRyvzcZHW+fGT3aNGZTc/e1BYsWo/eHvVENoJpotuqPOwPOTcN8mZiIhUpNM769275u9+J3/2Z4fqBy4ummbZu24lGZEQ5fB+0DWfKtqLQ5vf1dS9WhXb2Xuo2mkBvxBGAT2vrvqKErEniqHXyeEzh4fVYfUupe8JeQ0jF/jqD/xZ7WLxWqVN1Kq9YgfTu9rQOv64IiLZnUKns198fqWwkxWRxstPW1aLntcqIpKcveF/KTE2itK+Ed73X2esMi+b0F1Qc07tP/1bnVfWv/vdw4sLRTrZu801JxKZZjMz3m7MHtaBjF7saYe3mb1nMk6HgY1qAu/h7Run4+GFvv+8KjxHdtxVBcIo0MuTQUAn+B76xOuLYuvrGf2QQ4a0dng9ffYelRb4sARGe2iBj6rWpy8bIpJN9978n19dS1aOGi8/ba2YNh6oPf+S9+4Of8gPEWVz4nEZYQ5w11dkOyOlX1xUZ2YyIjIzo/zsZ8o//uPv7tz5n5pNR9sZ55NXntaBjNejayFvilTVJToLSlU3yryThvdJ4G2HvWhFdDhCGAUwGdT6QN/8MlootFnHM7wHbbMdXv88PG3vASCBj6p29710f+e9+GxCpNG4eitiVrF4e9UQSd6bfXu89+So0hARSSazHzzatjFsDyLAUTNgwAOP2xlrTcveO7a+8Y2Ziwul90UriUSm2ayur0/46CnqSATr64fqP7Wk3buMnY70mGSEUUDP24s9vej9NjiAv1nkH/EhSjWHl/7xgw2oNa4JrneFR4AJfL1et/vRVIoh7IZo3/436L53YzYp0mhetcSkIqEu2jja3e2+1mhUdjcrFk/zvf/++32vvPfeez//+c9dFB3+sW54t+R4DnAX49jZHCld79077c/1d+8OHU0lajTV+SSbqmZ2a+qNmxE7QThdg/qLGGWLgVGUEN+aCa6qQBgFenjSd0xl3YMMrimKotVtnDbV6P9W6wv6KGAdENbXM/oZfPsy+Waz+u5d8/Cwur5uEFi8HfbYP+ENi0YCS+DLG3NL9oeWPeUxeP+ojQ4iyexOu7Wg1Tp+/uSoYmfcHoTX6CPHisPrl08Jo76l/Xe/e/f1r8/MzOgzeVumpBE+hDzpyDdyGbw5OaMTyidGRKoKhFGEW1/CxqVsAmgtNCNGN7OHKIfevslkRG1E0WfyqkQik8lkqlVFUUYrHGyjC/2EMu/81577JrtT0JoJ4vGV7cKsLO9WTJ/6+/zzz/teicViHpYXUeRoVjMXze+qmRl5904dxE65uFDu3HGzkoA1m9I3/0oiMeEN5LoeeooM68gXwFQIal3E9S0tF4/w6ac/DDlq87YQRhEp6uXuRz/6gfQmadVqO+XjXnZEjdC50u6aHQUvLZN3uEioRe6Jj8AS+LmHp6cPTN578+bF6+elUk1E0vunH92UubmgijWxzMfGja8UTlYMXp9PZ6ViXvVAuHnXPclZ31qznlFa+ppISCaTcZ29i2jZu4jIzEyoc3jdfsiIVPVfudmsHh62/15fz9hZ29Db4QH02R7a17ovbx9qMM/3L5N3ncMzAM/4hKmqQBhFRPQmeBXDd7U/uLhFiH+p++BWLi7WRaoT3tQwQQJL4FOpRdOn1RYXFyVfLNYLC3NbW4/fXJ4t8gj8GKhP/VmO24Nw8vrhImc5fOfWfk+XKv3zUYeH1V/+8t27d00RuXMn4agoX/+6w67zRgK4saoo/fn2YAu8/i2bDfLWxQ6gyde6AKOcePo6pX8VShc5PNn7WEW8qkAYReDsX+K0bJBLXCQE/Nz4zExCJKNOOuv5ysP/GHy0HoAX3+aBdyWVf7afltrWhwXbQ9hMr/hsQto9/Pqoz+YlZl3WHpjWNmr8uOA4Gv5NUZTDw0yzWU0kMtp/+g8kEpmvf31mZiYxM5O4uGg2bU8Hl0jI7373zv4M8IYCqKw4HTJNfT6/L8OPFjUSexKM1fX42g5vMye3/0mMk2dVBcIoIs/FddhiEQ/DpYfj4U2n8aW7meq0jQAcTWFK4EVS91fTIrXnn5DBD3VjNikizatW3+vm4+q23z/OLy8vL++dD7wzYpUFY+JHmHSUUGUyyvp6NZGomn1An7DPzCREEnZy+ERCms3md797R226N1uh+UaHTFvqFbNUdn1daTb7X9Sotzkscng7mWQAPd0MzwIPs3dthertb69W2Ef9jZjl59rrNExFhVdVBcIoIs31ddhsQW+vwZFqzgwRRRlP9p5IaJUWq8qJmaF10XDfH49Y87uELYGX1M3bIlJ7fTnugoRf/O69pEjj6HlvFeL8+VFDJHnvrln9QW1zkEqtr+rROv64IkYz4gJm9ImcmoMZfuzdO2Vmpu+tIU3xavaeSCQSif63ZmaUd++MNzRQPDufGsmIUdY6hw8hz1P3Xj42xavPOPRl8n2vRC18TzGPqgqEUQCh4skcqG433f1brZw4bYofGkPD+Xx9REN/yBL4+ptX4y5CZKhVD6ns5vfO1faD1vlxfrcilhUPkfnVtb7lpHW+l988aogk11apeMCewVyuk8MrJkv0sGyKb6rZu/bJwUZ4a8E0vw9NZRMJ+dnP1i8uqhcX1b45V3SfMcjhbd6oVhTf72frnwrzOXtvb8LvG+FaJq/959XWwlk1MRTR+kqXV1WF6IdR7VcZ8udL4bnRJ441XNyTjkj0n3cnVD/kRCLjeXf6ACotLkTu6XdVYIPY2VEvP92qiUj6FqPQ2xBfebRztblbaVR2N/WDjmZ39HPQto7zm0cNSa5pM9PGVx6tvdw8avQvJ9mdRwycGzH+jUM+dPhxQ7pBbp0tqNfX7J5IyMWF45Vo2ZRPNQnDHVOtKvo7EomE8md/JhcX7Q4IFxdV7a2ZmZ5h7fTD0YWzm1mnz7/S+2L7jxH3sPp99bvu8HB9fb299ihG1kGD31G824FTxsOqQoTDqOHw1AwzjhEpijf3Iifish2oMKTu6+vKwJxBtoa1s19vGXGGVx9EMnuXABP4emHj6WurD7x6VarVREQkvXo/dEPLhlN8fvtgZ/b5x0eVhvpCMrv2aHt47SG+Uji5e7735ONKQ10wmcx+8Gh7nuw9cvwbh3yU4ce1W/iZjDLs7m2i2WyqqZrFjd47dxIXF02bo9k1m9W+edr8Geevb8x5RUQSCWWwz/+dO8rFhSIifc8RqPm8msk3m1WRjLrTQlX5PjysVqvKxUXzzp2q6BLOgY8p0p4yULG95u4n1epC38q1SoNuvPqIJfP6GzqG31Gj7UCZ9mQ+8KpCBMOoxcxS+rdCdSWBtwwvhOpl5Ac/+IH29/q60ed61zO4qhFTrHDegw658ES2wRx+6KhDTo94eHqrGZ7/URG7vr4OZEPljdhSyc4H0/uXZ3kS+PCLxWIiEtT5A2M+38g0vjFpf6OdVsfMu3eHMzPriURGjQRqoqLrVd5MJBKZTOYHP6iIyL/6V1nDtV1cNEVE5HBmxiBP1lbYl737UZno2wM2Z7lX03gZyOTfvVtXHxN49+7QaUkURRmls4OFw8P2wITNZv+0AhaaTcUijR9MaIfpv/HfuTEkEsqWefXEqFZFHQrI3nfsZ70PPRLaNofpqiq4CKOOLr/kUZNKfxpoN0PVC86PftQNo9pAqmaZvMVJ4q52wVnnTqgapbUGCd1rpo3w7hoe/Ku6OClDVDvPq8LUhT6dzq1+9DAfvpldAXQ4utbpahjVTjuzSOeGrpYWNpvDO2iJyJ07iWZTfvnLdyJVkZ7Pq2u2Obm6h4zinKk7dxQRaTalbxC+mZlDEWVmpumiAH7Mrao+k59IZESqmYziaJg9dVccHrERPZkAACAASURBVPanoBY9FBzpG3MhhG3yjk4JQ2b7EG1UFQARsXG10d6y2SCv56IdnuzdnVBl79I5T3pbJow70rs+4mGYFj7S2bsEmMAvFq+vi0FtDJgSZvmqlnQlEuIuqTXrWTTKI+VmDbmJRE9ssBiCLpEQkRn9vQBtDYbf0tf6hM2G9z6JhBjdeFaazaq7cOLtPQv1Vou62mq1+09H1N2iniqjJbRWT99pvYXDk8Y3m81E4tCTVen3oScr1IS70yBVBSuOqryd/iB2P49ocRSAtNuCLnJ4sfFcTwif/4qKseexZtS+9OrfiYSiD8fagR7liI+3I32446AtYWqBB+BWtarvkd6TKutbUPu6l0eU+mT0uLauKHJx0Ww23WTv1jotHs7S0U7aP2phdA3vavauOOo8P+jiQn72s/Xvfnd9tBkBhoygE5I0Xi3G+vqhu1se5hSnTfE/+cn76h//4l98brzGiDc7AFNOUdRxSQ6dLphIKC5yeEXp5ml9FyL961xUXAht9q5STxXtoTAROTw8TCQSnhxur6ourjY9CXEwsGfgMWl4Bj4kMhml2cyIefu2XrNZtd0mP+oD8H2GNRdUtWfgf/rTrFkW1Gw6qHz41Pw+M7PuouZkh274PTfj/49SDxjY4WrjuftcVBt7X0RERsxpbT1hISLjerS793lUn6YwbG9Cy8+HMkvgQ/wA/NRxFEZ5JhkqNeibXWf0z8Ab0odRR6eHPpPXSsK1ZBQhT+CNeBw+gs/hJyN7l3DMA1+vl1X1cZcEiJ6Li6Y6xZedD484sacywqx16+uKdhN3UCbTU6r19f5O8hKO7D20XPdGOzys9uWc6qq8y95FJHNxUR08oLbZP2ODjsqD0/aO+JD/oC+/fP/LL9//8suf/OQn79vP3s1EudJCVQFoX3MGnyOzT22HF+dP6KgJvP6/KF9Pxi+C2bv4lsB7uU7zbYk2RXIAm/Nb4Al8vVzYKOjCb3ljYW5uSTUXW+h5D4AF9epvc3K1vkUPD6su0ni3ib+bNScS4rqC4l/2nskoMzPrfqy5l+MAM8pt7L7sfZTO883mYPYuIjIz42ZtOg5y+MCqRIPZu4hkMu4r1oO+/NJ9xm6Y7Uem7kJVARigXXBGfH5Yy+H9vhgoSvc6qf4XicsPghRMX3qt4X1iTsFAE/h6YSE2t7RVen3ZeaW8sVSq6T5RK23NbZSDLBMQTVo4tG7ZNjOsKd6Xa5yjomYyGX07vP3md1+z9wDvl7vO4R0spW9mz2RERBll1LSLC+Xdu57s/Ze/VNT/3r1TRLzMbC10qonK0E+OvhXDtzxvhPdKVOotVBUAM9VqVe029e5dM5grqjvaGIp9CfyIk8xPjCjvBF/Cq39N8RPW8K4JcBC78sbcVq3nlXrhsTrfqzqha728MbdUktLjwsPFyE/vCgTH24TB18E5tXFNbY4At76e2d9fF5GtrcOhH47iQLjNprx711T//t3v3qkZtevWFaUTqexEwb7sfcQBz9WGdzVd1178+te7f6uv//KXL77+9ZmZmZEmWhtK/SL+BWzrupf6PMiXX/7/7L1NaBxZtu+71Nc0Gph7c1DwDCpzQ5AyD6OBoAzqSp+iQvAmkgtfXxDi0ANX9iR1PEoZrosGFVQ0WFCUDzg1MsrJzdKgeBjDMaasHNzHySiqnF0CF+RAeGAlZIAt8KAGycED3YtpvcHOCEXG546IveMj8/+j6UpHxsfOiNBe67/X2mv/D/bPixf95qLLwnP2e2Em/sFVAMCGpmlspL3XM0qlqqKolsXv9YxeT2efSyUivlI4JiqRLqqRzlP795DWdiyRABxEcmC4z1kQwxed9IrYtTdn1pqmAfbbxLbY9wF5BUXsMsRtHXVdi9vljVUIC+7sBHasjpp2qkq6rn/zzRkR/eUvP7GNiqKxmDCNW33HqYSsaBKKdc9Zwf/khcp6PYN9YJMghkO9VFLtEweqVTX2ULd5VNCx1mCB4w7HmP3+yy/VCxcUGlfsPhjm79WIKKKS569mZyHFcrv/AANmpycU8O4s+osXX8aaKVAMJ2aqXIWoZhTrck8VjiXc3IVgez3DMYduONT/7d/OKLCIHcMwdEXRhb8enMvOMYo45i6EFDLGpSJbFbNBq4QZCqyRdO4OTRqpReD7r4+IqNL4/tzctp82iYgqGzesTau3atRsdl8dExXaKgMgD08fji24HSuqObZMV2pDlfYlRomo1aLhcEj031iT2MZer7q0pLBxer9lbCgV82+/56pKrVaiszHp7i5ewOIqlnhutXQiNZ7uctst68Gy/zcLH+oJzWSvp52e0oUL1dlZle8IZTg0SiXFyrTv9TR5AXmBVRuuXRsT0j/++KOwU4fhNQQQbbKD1LQaocBVAICIb7BmaUlxaPhSSSXqhJ6crXgSu5xtMPz90tQG4XU9aRWDbJFtTewOTFSf1PRzNEvATyqpCfjjV10iWrxybmxHRnlsGwAgkIDuKHYivWGcnzy4u9M0kbPX2Jz2VksbDoloqVQqEZ0RkS2H3PzPKPR9/v9R0XKz/o07ZuIHU/KtVvx2OgS8+YFaLb1a1WOe1IaZNq9zq3fGSMOzfzAlbxjxhp9CYJPhs7Xi799fSxKE9z+WV8MXKocQrkIQkeYPI/xeUDyD2H4D9G4Nz+j19FLJO6Petl6p4KG9GO6BNTFeWCPApOAZhyCXG2z90/2tV6xrbOdCk5qAd8HG2Ylqt1YzawMARSPAZbdZQe8d/FAUlR2S/oClzSlhWQAd8qqvazk0Uc28Xbe7Jx2wC4UqeS3B4nkO+NW7haKoQvwb+48MOJuuc+XP93oaEcVS735ooaF4Nrc8Xhb9BFhrN9bQWzDF/vlwFcA0EUMDMw1P41ldbOEPx2wvNj/LUu/MsmjaKFOJ9ayx+4rYg/vTpuEFehQZomkpGVbPOMT4DuffOuZaBjgL1g7FNY6pCfiFqxWi7tHrPq2WiYj6zx93iYgqVxdse7Gh9vFtAABObJFqLcpRpOtxVpVLSNSc/1Azr5nFflivbX723t/azpR8oKZ1moFqVY0xUTxAvQ+H+tKS39k0NuFZlH+TPIfCWigugXofC8IzZIbis9HwX3zxUtd1K5FEOIoSHoQvTvI8A65CCNYTD3juUzu1uLgw49XrGUtL1RjDlEtLCtnqqtgYW/uDSXdd162xv+HQUNWW/Wr2yWI0EYHK/MBuZqNhlEq6tdHKnYxfvTYLMnkv/N5Gq0uMNH1j/NjiveqpCfjylUWibnfrQfvG3mq5337AyszaZ7X125trTcc2AEBUmNgzDM55xaxYiMp5clFrwIyrd19/hQ0r2CKNaqlU3dpS2D8cI9mqqlmnabU0JpxaLV1Rgn5gvPC+oqhCStmRWb4u+XmEYBghczFEqPdgND8NzzPEFFBM7scff3z5UmJBeM/a7yxrQJ6GD06kL1TyPAOuQjj2qpNe1Uwh3QuANdzMUFXNMLSlpRb7Z6s1+o71xpwGmsl4ogHR+eImREqpZFhRdzb0bHXy7oXoHG8UZweSvI8p2lBjBBxasVTSPD0H9tCD3RXgIFLRxIAzkOlAFshcppdCz4rOUHNtoXm+sfY1K1TT3938cmu0zOvUGmUAQuDPvLJPGreONr8a224uuBXB0RdrXFTVQ5jZ3BeVxqf3G4bOfkurpTca1VJJUZTw6YI8Mj6Sho9ayi44eT60foGoJMOEgy+WeheBRxDexFfDOwiQ62LRNLp48Yu4CaJyNbxfIn0B1TsRXAVuHItH2DeCnGMuin6+xWGzHAIvRn6cKeZH57Oi7tEHnTUeYZNwFVLTusU/Qz6JJC/t9Wsh43kQWJKJ5K8+K5z0BDyt7h03jsbWd60d7I0mtR2/Mk1y7aDgy8IAII2olUvtXZttrTUPcxKpvzI7uCjHjGM5Kyx732GogrPTFYWVr2dF1FXrhDQauvauxs9OGJyaGFUkx0ukdxCYPJ8v7OpdWvjdwlfDJxHtsW1zYvfUKvisxj6JH+5EelO6FymYcA5chShAsReLuAFD9d27p0SGErdWba83XFq65djIOU5aOGGTB5JEhs36tZDxviQPvPvDNWKVB/6Q5sXK9RdnxweNWq1WazQOjs/27DVpKpVa4+D4xR7q1AAgAXPIX8yApaaJmZJtV9SOqLsfvZ7x7t3QsY+iMEdE+/bbaqBHorZaQbP93fcnOOuhWlXdKYhu/GKkUdV77g0K8EVVVVVViXTZF7IC7/n3P/yAqwAmEj8TzFMO5k9/agyHLYOzcKWNXk/v9fRS6ZbnsVHkocho52QT4GvpOm+RFxaiSL84ET9ZWRmBrqzf+eMt35syKUbgGeXVuofhXd07gzUGoEjEHhceD7+zLTqNzFXIArZmInqj19OWljTHt4ZBs7NKwPI5xBeKt0/GC816YHF4Chx3cOeKD4c6EXGr91GINWGSIf8UDDcywu+lUkAWPfEn0kchjrJNct8cSArFs3dD17UCB94dwFUAE0RAwDBiMVel1zPG0+PDMWusKIYRP4ZP+ViVM+dIiAyrCMVbyAy8u8l7KD51AQ8AiIu8DjxG/RibIY945Hnde1JVAVnoFsPhuciMXWEuhk6uVlVdj3BFVrUugR8lEc9WJZ/6Xi6P5b33+5zF5MY0vGe5BDeexeSSEHXqSjDMDxM7K561EL41ALlFlOoolSLo8F5PeIVUaHhfeMLCoWVi3fBEHTIh5bdAatTd74qU48kjEPAAgJiwTi3qfHhFGZmiVkuPpN4jLqKuBobi460o7n8xldhIubXFcV0WcmdkNeldiBAdDp3hd4c4j3KqpI2h6HI9J+nlAkPx1jKQeU62BGBqCRAe/AnVRLS0pJljqVwa3q3eFeX8QMPQqlXeS4/j0YWyge/Y+iphkZHMSSUyPNWh+PTVu41c+AxuIOABKAwslVdGL5ake2LHetbG89zdMIwY5d9C1bt7fh/zXfwD40Ea3kpJiGQrraV6WEDe2n56Orx06VbskDtn5FkSjvD76SnNzhIl0O0RcSbSJwyw58cK20Lxow0RDx8day4DGe1wAEAKBJvsGPFYkzj58NFn0POiaUlHh/PTM8cjBXmpKGoKVVRySKbqnZFHDQ8BDwBIii0Uf77N/GpsO6t+JzBt3sKePz9O5AXbk882ZwF5659s4Dw2aUYnxE5qEEsmOYQCJ8B7Yv0iS8mbwt69J9n3NHX7iJxkFgAA5GELwocQnDyfIPzOQG9zTrryUnDyIGD4rW4jfEaeQCDgAQBicAh184OzBEivZ0TNIY+YPO/GT8OH20IhWQ+KEnkQwU0ekgzd+fMpoCiCq9nlU+u6lbwDazO8NwAKgQxpx5lIL1O9E3n1osxCxfi9rABnwvZkRRbB4enS8MnvcJKlZ23kzm2AgAegSMS2kYGI75X8Tqiq2tZWK2LdXSfDoUcJ+jDGJLRh0HBojD4auqLItYaqSq2WgPMkfErv3//4448/2rd4ji7bHUK//Hki6vdfRsqi5y5c54SlfQqcRxDpNoqtYMdDvHfR/qM0bWx5cFXNldcBwFQgL3mnVBplnNnntHMyHDa2thrJ2+DZpcTwT4Sod0ePRznu9PJZvDYeMYofRyUHyfN28qXhIeABKBhi5UQKXXB+6PUM9uH0tETEPpeGQ/r116e93lKpZJBtHnvRuXYt5qhzjCz6eOK8VIpQx26qYg7xaLUMy4u1Oz26rtnS7zUCAMgndOwvUgU7O+yoXk8zjGiHD4fa1lZDdl/KnyyWvDuyLuS4otXpSe3xspOXExKE5/FSWNQhz6nsWQEBD0DBMIcANRGnSlS+LiqWtatWtdhB+FjhdyKid++WiIambiczFXyUnD8c6kxMNhrG1pYy3uwYV3MSo26fdXVd5wpTxFbssYkdVAfCabU0Ral6unR2F9Os7wAAyJgEFeyIzFx6oiFReER9ONTYIbLrobLuhUfZ2o1ajKSh4MLvDmEvo9PLOjhcPA2fvosigRwF4bMV8P1+v1wuZ9oEAAqIqHL0maj3qBgG1wT4Uknzq2M3HA5PT+nDhx4RXbigzM4qtqOU4dAolRRrxuBwqN+//9d/+qd/4Wyeo+C88Gx8Fs0I8D9kGMW8pfnlrT25otXSaBSU00N3tv4MCyXj4SoA4MHSkkakszj8u3fG7GzVsQPT7eae6WEPwrtj4/YPnruFxs/53QlL5+ekx1NVruiFYRjkWmm1VBp9iLr6QHKsaeT2SHh+pKwQuIP8edHwGQj4fnv3wf3HzW6XiIhqB2d7q9TenLlPja/v1VdhowHgIblKzDZ53grC93p68J7D4bndCgi/Kwr1ep6HD4lKHz7oFy6oRGRF4K2TOyiVVCLdMHRN063q+p7ugrXquz2ubhg6m+7uTsWPHYRPv8aPOlqlXLVvFF7Bjg2dhO6mKESkEjnbk4R81rGLQYxMlrx5tH7AVQCTjVgV9qc/tXo9jYiIPieit2+rRPRP/9Ry7Ca0mEhQL8q6l+DZ6X463K7q3d1UjGAAO0Rgjycp/G7N8mOW0fJ8PHcrlZTYQXhBdd2KwaSm36cs4PvtzS/Xml2vr7rNrbXm49rBi73VdNsEQBGxGU4t+rHscN9Sc8Lxs3a//lq9dKll29Ahol5P9yxTHy95/vSUbOqdiJTTU8MehPdEUbRGo2rzM5w7+Elxa2OrpXNq+PfvrxHRxYseNkZVqdXS7RH+hFy8+AV34EL99tutS5cElDtKiGEYGa5/m+cURbt6j+qXC/dohQJXARQbeRXs7PR6WqlERFUWkjXtY4eIPv64xXYgaeF3HveBjYF7fsWjgd3dVGzlnOcez6HbQ7F26/V0w9AVBUuTpEwuAgCpCvj25sJak4iIKrXaBh1tWfZ54WqlQt0udZtr168ev6hjcB2AUKz4cCQNn/K8d/KyuFbSr6KMPAx76nuppLKwPJPxrOIucXgh7iz6d++GHz70bOqdca7h3XXUrDMsLbVKpepw2CJX3QGeQLqiqEzDO4a6P/qI3r8PPtRC41HvL1++9Muif/nSOSgQ6blbBecZ9hL0yeGsYKcooyr0Ysna8oIg4CqAosOzegVnNrUftiVCDL992A693vnYd04mTkfKgc+b8E4YfndkXvitkvvRRyFB8t9/f1kqVVlummfAQAY//niNBbRFpXC6vRTKvr5AMUhRwLc3mUmuHRzvrZaJ2pvnVrlcf/HiBhty7249aNcxtM7NyZOH3/3cGQyIiGh+5fafN9aX56QeCPIF05a67lvNxbU7l4qz5bAJDtQ7XBbmWNhz/8hcw/bXX6uXLinD4XBpiSsO7Mii91HvXOcx2zam4ZlRCVXvLKJORB99ROOrtnFhKfZqlTRNj3Sspy20E6l6QqnEavUrkdrACU/+vKJQ1EWSpoeEazFSLj1jokxcBZhRACITW8JFlWdWT5VQ1+Wtx+v1jHJ5XUh1DxYwyHkoPtQ/AZFIT8C3nzaJqNJgJtmD8ure942jha1u82l7bxUKnofDhzd3OrZ/Dzr7O50328/uLss6EOQRWyj+fJv51dj2ACnuLgPr+VmS8bPn/r19u2VuvqUot1gaOefUcVaYl4UdPnwIjxc7ZKRnlr7lpoS2xJLuMXj//trvv/8rmWXwNC2Ceo9kF/ntu6IQkeIXH0gCZ/jdUu8C521GRVTBSLG41Xu8wFrePFrKwFWAGQXikS2jLDPHk6NUKmn2IDzIFpZ5MRxWxRpW5pnIy7BwzCSXl8iZQ4PrRfZZ9KkJ+P7rIyKqbNwIGmsq39iobHWh4Dk5fLjTIaL529tfrS/PEZ0cPvluZ3/Q2alffrS7HhAGiH0gyDOeQj1SvD10RRYa9a0RYvKOvtgzbNjr6e/fPyUiov9GRBculIjo0iWNiH79tWoYyrt3w+FQ5/Q/LA3/j3/88sc//j8+e3nMhPdU76VSVdc1NiCiaVqrpcqbjG2lwEmd5sCvSJmfUSpVhbeBO/wu/Mog56TtKsCMggxJObtI7EhoPCMV26yJkqXBiQOcq7r8aEuui1ojrdXSOQu48qAoqmHY4wpcoXjWZl3XmZFl7yG/8s+2BDJgpCbgj191iWjxSnCuSPnKIpFn4Rrg5OTJDx0iWtneXR+N988tr+9uv7m50xn8/PeTdV8PIvaBoDhEMquRxjvZnqLk5a+/ah8+DC9cKF28yJLkO0Q0O6sR0bt3GhF9+ECKojFrx2Q5j8eztKT9+qtG9E/8Lfnoo2sffUTv3//oLiZnyUhNY8Yyaeqym9TGthmRPCFFUQzDEJhIzxN+dyTP2xclSp8c5ySOyDBDQTTpugowo0AOUjN3bLPfeScZsSB8HgKb8TpzVdUajerWVivh1c2EI2cDUluinCXxCSxM6yYgFG8pdmtP+7tjW1iHKIqeB5mQchV6IIyTv/88IKKVyni23vLG7fnOfpAHEftAMHkEB94D0aKG4mk8/N7rae/fDy9c2Lp4UfHcmcl4Ivrll+qFC5eIvmU16no9zpq6W0RbHz78cuGC986Li+s8bVYUtddrsfHm0CXZL1586ZlF//vv/8pfYCaFsW1HTb5QmIYXUsGuVAoPv6cw9b3QAQThWr3QdyMJMKMgWxLWsYtKTirYCcG9EFr+VwuzpuApimYfhfHj99/Df5F/nppqPW77krcBdtUxPZAd5RnMl50hKOPMwtFMsmpAagJ+4WqFKDTjbTT77epCWs0qLm/fePkPRHOXFaLB4M1bIm8HIvaBYMJIXg+Gwvpxv76419NOT6t+0t3BhQvVS5fUt2//+vHH37pr6vrx4cO3//k/t05P6cMHjYiWlqJXkzOxZ9HT2Mq0vm1whPF//13nuZCZOS+4aqDPtaIFiBRF6dkrBMYlD+o9KnmbBu/OAUnil/uFpDIiVVcBZhRkTmpdnd+i4vGQNOoXsD55uVzs1csdBXTY4+CR6AlQWcids4SQA+soh32Z2gHfvDFzdnaWzpX6u9cXtrpUOzgb1Y1tb86sNW3/tnYZ2wa8OXlSv7M/mL/tnmzn/02SAz3zi3777bd///d/j/8jAAAA5JiVlZWUr5iiqwAzCgAAQDoyLOkfhJ/Rj/KNjQoRNdeub7b77q/77U1mkqnSuAf1DgAAAEwdcBUAAACAYFKcA1+uf994vLDV7TbXFppUqVSIiOjo/ubm/aNm1yxHU2l8XxexKOK0EzuHz+dA9zpVMzMzlEV8BiRHQj6wdyK940LffludnW2dnhofPhhE5F6hvd3uENHq6uil+vBBJ6ILF+jSpdGe794NiRqsQP1w6FvTLt5ybu7ydURk1nfVdF2zpsE79gnOQGZn8EtwllpwnofQl2G8coFeKqlENByVoYuUlBmQPG8QkX/avIz09cj3PFLVAKnYn4iqCpjXqut5WkkuP64CzChIBn+nEXUaC5tHZs02MgwaDkeH/9u/fU5Ef/nLynA46q4VhXq9ra2tBv/5KTCbPZTglU0DjE6Si/LMgWcWnKfv92tk2KK2HkcFHMIzE54D5/ldi7/yLsTLgarLrJiaq9lqHEzFHHgionL9xTFtfrnV7BJ1R3a4222el5KtNI5fQL4LYf7yxykfCAqCjN6Gpz9vtbQ//an1yy9PiUp26b64aDfYD6wtR0cvL1xQP3wwmLpjzM4SkfbunXbpksZq2iXRVL///q88Vs0q8a1p3gXJrVnxqqp53gr3UdZE93RmvAegqkSkBdxGT1ldKpVoJOPDNTwrXOd38uAZ7/mpr56fmfCKolnT4IWo9zz8KDt5cRVgRkEyNE0rlUbLfStKUL3YGKUo2OIgvZ5GROXyjx99ZH3zOZnrqhwdfXHpkmYYRknsDPgwrl27FqzhhRCval2ovQ0u7htWs4BVJTw/PFjwJ38sjvVWDcOz0IxjqbmYqCrpuhpcyhekRtpV6Mv1vRc37rWfP7j/+Kh7PpZeqSxufH2vvgrxDoBkZPjrqspVjbPX05eW7kc9+eys+u6dzoLwpVJpOBwSnbKv2NI4nOvD9/svLSVpmjed50CeO8Z2cFg1u553CPXMdbuFOY6g+fmO9jrJDm/DfByjf3ke7ll2nul2IjKMgMA7kZzXNXYNHtaYzOWuqlKrxT6KqSmdjzdxDLgKoKCwRC3rn0tLVSKVfW61zrdXqxqN49bwvZ7OPpTL/8Oxc7lMRD8SkU23e3DpUvXdu78SvfvrX1t8zU+DgI7UU5NbKUIpdL/JL2EOrXKdh43GCsztErjCvANVPf9R2aYNAkbaAp6IqFxere+t1jO48gThX+yWlcdVLvsk/sU+EIA4WBlxH31EH30UrRT8hw8Gq1Tv0PBE375799dLl771O5Alw//yy18vXjzfh2cBMz8sUxUs4RzbdV0zDL1aVYn0/Ch2T2z2WHN/GyCxrcCOpeTN4Pzohg+HVCqdi3RO3c7IT/jdIj9rMOXw5ghGuqsAMwoE4xm81XWdaXj74hGOOK2J1uupVifMEuA/+ihR6fXZ2X8hMhqNraWlW44lx6w+WODacpyBd/7BUPsEH+soXSfDGDtWUbTQHxE6V0joAIGm65phqKFxb4Ea3pU5bydREN6u3onIWkMt3tmAELIQ8EAEH1+eJxoYb05oecxVOHljUGAGX+wDAYjK+/fxF29zYNfwRDQ7O2tPrffk4sXZ09Ph7GzJriStbx2JZ54w+e2Y8RUpDGsYeug+OSEgFG+FhhRFtabBO3Ao+VJpOBwOzY2Gdav514dzeQzCSOJ5mMfGPFwUijJRSzpnBcwoiI3nmgKMH390Gj73dC13nJbF55eWdFOaaskb+e5d78OH04sXT0ulRkC2WsCK325E5cbzWFK35O71DHZ/HEtpGobG8pLcqQ1iUVU1bBr8iF7PWFoK3424l4X3xJLlof5MEg3vtsWSho8LZNNip/KJIjMB3+971Jc1KZeRIBfG3Kefze8PBvuPD9fv2taiPXy8PyCa/+xT3wBA7APBBOC3MLuQM4sdkbXC73ZYXJfBh1ZkpwAAIABJREFUpGCvNzQMQ1EMIlJVlRkVZgMMozocaqen1eGwFCPwbqp376p1MTyPhDgyM2k0c0HgFdhVvEPxViJ96Jy9paUS0+tLS0tJWiJNvSc1unmYDM9q11mpubHJV/k6L6S6CjCjIBIBoj0YRSEi3esPdjRl2jDOFSn7ICQq+6c/3WIfDEMPmHFmiTq7krdns2tyiq3aO3l7j2oPuVsb2Q5bWy1P/WzdPTYO4pbx6YbfGefFSkJZWoqv4Rnykuc9K/NxTpwE8khZwPd3R4VpgsFC8ByMPIjOTp22v7q7PEd0cvjku50OhfkPsQ8ExUfXeQc4rdR3zjoxSbrxoyPrEh0i6vWeXLyoXLzo3G12Vj091S0fyDBIUWhpqWEYmjkFXWdfsf9Wq2qrVSIqESkxWmWFij1/WiTPIyGeFzLbIPhaNBaKJ7sHGRo7ZzPbOdPjgxGVH+7OtBQS18o2SsDGIJJPyM+xek/LVYAZnQIcqjuF4mpuWGTbc9BtOFR7PSqVdMd2M7OaLl58ybOuyu+//yvZpjI5FlVRFNUw9FJJDa4aY1fy1apK59Jd1hQw1gU5hqfdY9P2vq5aDYqBM8Hcaml2DS9WvUexbxE0fIyCdlYiYWDyfCICbTE0fJbMnJ2dpXWt9ubMWpNrTwh4Pk4OH97Z6Ti3rmw/s8UETp7U7+wPaP72o931uSgHhsHWv0nx/QECYFYq0kotUQq9enTl7pBFvz92wvfvDevz//pfAyL67//dd1Gl09PzLPrhcOSIGIYWkDXXamlEVUf+PBEFLKxiGDoLQfAonFDPIyE8joU8JWb9GPZBVTUizcqid8xspygZ8gEISZ636kW5Mi2rrJEJ71hWifT2UNiECvh0XQWY0YITNSqeRMDHjsBbZtQcZVbZP20zknxlnmFoH3304++/Lw6Ht4ieLi21WHfL+lrD0IkMKx+tVCr9z/95RkR/+5u3Ge31qktLLb5WjwaIM1donh2dmSyg+h3FHAPWxYV2dFH70tAsepui5hXwFCftQlcU1afyfNAhnGcPtcUyjEjmCW7cZDx4kV4Evr97f2SSK5XaxsatK1f8911YSKdNRWdu+e6j7cuPf9jvDNiG+ZXbX91dDx/9j30gKCyW5+Geniebfv8LIvX0VJmdVdzfjufJD0LPZs+i56Fa1VotbWlJ4xyiNsvO8VomFq6O0CBughezcezpWQY/OS4BT7qulkpVVoAgxsz2UESpd0+fSVVJ16ssGpZwLZxMJsM7ElmTBOHzqt5TdxVgRgtIbCGdOVYo3prwZeIdqmXLfOq6+sUXaqulKUrLqqtiyniVrUbRaulLSyxh3jWsZGNpqdXrVZeWFNslNPvUM3u3wJ+yJw+/Lo6ZaSbjyaXkDUMnUhuN6nDYin2JACQF4VnaxXBIPLn0VvhdWvK8pushHggS6TMkNQHff/64S4TgumjmltfvLq/fDdhhfffZepwDASAioh9/vMYThPebWvzFF198+61x6ZL67p2RvDGOLHpO7BqebSmVxhpjLzUXSb3Lht+rkL00q91Ca5rWahnJF5V1k1y9s8C7n7dkL/yWfNTDr16ADPwSWa3bxX/TOENSGZGFqwAzKoFQjZ1JKrtYLl78Il5npaqqruu93rBUWmKDoYqiGIZmZZM5poPZa8u5O95ej3q9p6Z6D6dUUnymfbFraY79VVVT1ezj8J6Y9tpZL1ZRVLNQiBT4S9lFhb8CgpCl3T2RV0GW8+r5x8/jTZPUBPzxqy4RVRr3oN4BmCI0Tbt//5+zbsVIw5dKlnU0yKbbmbFn5ETexIgJmOvrRDsqBpqm6bpKpAoUrsxjCB3v58FPvbvn8iW/XbZ6AYnOE3aVoApSkVZIzsnIlD9wFYpEcSPh8bAPOjgmT0XFMMguuZlJGg6HTHOqLhHjJ0WtJHzDMPgzoeyh9dB+I8Olvzm7NZZT5Xe4pB4v4GYbRtKQeOjaclb4Peq1WDWEAOUfVb1rJvxtCD1h/rPo85B3kF4KPRERLV4pp3tBAIpMttV3osx+D+/OZmeV01PDM4s+BsPhqF4rf3JatWpfPNaoVlv2by0bL6O0e1RiW6/UNLyu62w+vKiacELG+/0y5xme664JuWPyQvF+gXc3jhvoGWGjHIxM8QFXAYhEhulM0mW51bipvRueFb/Jx9LZF/U0q9eFE3fhcSRLj8HSKJIvBeJHwGNSlPPwe9RJhcHEsMV4I7IiNQG/cLVC1D163adVGGYAvEgzmhFJnCfk449nmd5+907kaa3xb/6EKzafUNNIVfUUlmSbbMzJmRoRxRauAgPvweo9oJSuKA1PokPxwYF3N9ZPcMQGC/Vuw1VIRAwjMgGp7IX7CUKSn+3qnYhKJSVSED4WqWp4UdcJznbWEqyt65dI7xDVTIrzl7JzHMiaad+e5P3xWy5eoC1OTs6z6POQP08pCvjyjY3KVrf7+Hm/XodZBoAoXcVuuTjp5yYpitLrcUcHJMNEka5r8gbOE5LcMKRjXZgn55pGznVh5ivQKJOT65AksMmQ7vC7cNg9Sf6j+APvfodnUiFfBHAV4jDNqezTiUO9p0h6Gl5IWpY5OOt7noSF+ngGTPw0M9/5NSKyy3greV4UuZLujJxn0eckFSW9FPpy/eva1lpz68vNK9/vYWgdTCuZe1rJl4/2Iqg7U1Wt16sOh0byy5ye6rOzapIzSOp5BcY8E3otof6KQMybed5gVxxbM1vlLm7s2DMRAbWKONW7qFEPWyieor5rbOck0n0CgKswMUywzE4Stg2GdeC5lS7AgexEeoYl49l4QYxgvhtr0YFcSXeL3AbhcxJ+J2kCvr+7+eCVe3OlQt1uc22hSZVKbXHR9/Cr9/Yw9g6ALMT2jKHdmaaRriu9XuPSpca7d0mnwZdKvCvAe7ZEbM8bMOvYURVvUnGMlDv8AHt9Y6kuQkCCIo96Fz7qYZfx41scu3l8O03SHa5CsZlgiR5MkrCtrgflP/PUTfcLvyuKYogNznqTaiK9ruu29Uo9yvslJPn5QivSi4qZK4pmGimNiFRVa7UiV8tTFCLSrYUOhNhlTRP/SljhAYHnTE7UeW1SkSTgj181m82gHbrdZrfr+23t1h7BKgNAcjwkgT0jf3dWKpWIDIGl7KJOKhPe8wYkMjiE/WRr+ICcjhyM66eROe+HW8C7dgj6dgqAqyCGly9fZp7bBTgxjEiriI+w5lEHJM9zqsRQ02lpZtZOry5UoobXtNG69L2ewSZ722+XtfA7ydHz8TBVsSrvElYWmz3fzb4CvBmldzeM6DwJn+2gV6u6wLZJMl85TKTPj3qn1KvQA1AAMlzANrWAhqiekbM7YyLWMFpE1djXYvnzVvidIo6dC+x5tSjznNl9zu06ukLIhxPlJKBwXfpM8NMHuWJqo+KTjapSqyXybA7GhbG3ZpYtmJlJZeaSRgMNzss5trC2JWmYEF+IXd3KpXeUhY9XwW78/B5z61RVs1ezsyT6+KVHH6wGOKaz5ZxcuRb5SZ5nSBLwq3tnZ3tyTg2AWLINXGTobCXvGfm7M00jVaVqVWs0tpIl0mefPK+NZn1HOCTDdXTTIYfZbqkVrgMJgKsgDOj2NJHXrwQPO8qoXWdqYN/T2r9qtXRTLQsOwrtVNE/xdqttfr19mgUFzPnwRKSIO2fQNHX7OIuQifHxkKds8+Na5Cp5nvGHrBsAQDZcM0n5ui/HSfnqdsxuUYt1LEW137qu6bq2tFQaDrcuXVJOTw2/Pd+/P7X+d3o62nh6qs/O6gnUu7CeN3ZQl/PAhCn3WRVAYq9Tbob2dah3AEAOib3Q23CoEukJz+yQxGzyNv+aZIqiElkyVYxVNZPUnKeK2H+rrZaue1nZNDWXqqqqqgY/pihnk1R1uEhoWi78irypd0pRwPd3Nzc3N3f74Xtdv349bDcAgAjijW5aejhqd8Z64a2thqXhLRnP5Dr7fOHCrPW/Dx9O378//Y//+P+YejcMLVv1nsSUch6bvKVZWRnT0GZweWu9XJbJaHpRvKDsc26AqwDyi11qShIVAX1RqaQLuQTrGlstPbj0WvA5/NRy9MYIE6jjgwuR2pD84mNUq9XhsMVkfLzxGlUlNiAefGdUVTUMPdKZZRg72eI286H4nCn3EakJ+ONXzWaz+eo4eK/yFWp2u92w3QAA4ogYO02UOMfi8EzDz862ZmeV//iP/vv3p0yuu/e/cGH2H//4lz/+8Rei6q+/bilKUdW7qDPkn0wS3piBT5I2n08LPX3AVQA5QtPOFab9f0Rar2cwDWyfPc5DDNFlsbSkDYea37eGYSiBetEa/o4aeHcTWy1b8Ej3alXznNodfGJrcIH5G6EHyIjxlkqKoqhEumGokZLb7dJ94r0FTrLNos9h8jwjZ0Xs+q+Psm4CyC3udPckKejBZXunbT6hZubE27eZX41tT96LMcu0tFQiUn/55V/++MdL/+f/DD982HLs9uGD9o9/GGdnp//lv/zfRETU+tOfGoahcxZ6NftcAQ1On9jGm9NfkU0m89YUBZPepwa4CkA+Vk01z29NhUY0NjNcFq3WKPV9aUnr9bRSybtVAURNXuMj5oC+VHXKnkukwQXhj44NpFSrqq6rlik0cze8L81st9QlV3NV2DUSWU2Gz616J5kCvr05s+ZaHqa5NhO4ZAyjcnVBRotAoUhzdvq0yXU/PIW6DA2s65qmUaNR/fhjZTg0Ll1qvXvHLvE5Ef3v//3PRPSf/tPsH/9YvXRJHS/TorZaerWqBp8/z30uJzE0fE7UO8N2/zX51yJN01j4PcZCPrm6b9MHXAWQR3iCw5aothRjYg3P1efH0PB29Z4gc96NKq/z1HViQ/a//ro1O7tFo0ET3sMNo2UYLc6dhetDVVXdxec875WlqOPp9kgp+nLy51PKX0vTqaAiBIHkCfjVvYNa022XOah9XS8Lbw7IKxkWgYduD0B2n6Xr2tZWi4h0nXq96uwsWYVb/+t//X8DbBKHhpfS5wo8H7/B4ze3OZSg42kdmpxLOE1soUc9phK4CiBfBAfe7bjslMoZiq9WVbeKjhQdZRqeiGwy3jt/nqWgy1HvDDXqcHlwL+1Y0I79PxuwGA6NXm/01dKSEnAJw9Cq1VakhmmapqqaYajmpZOmVBiGc7l1pMQnxOZUaJIvVIAg0MzZ2Zm0k/fbmw+ejj4fHTW7XapUaouLAUdcvXrrxo3VMoxyAZiZmSGi5O9PEgEPBV5c3CZc17VvvvmciP72t5XgYw3DW8BL7XMFpvxFEo08182/CrXsrpCHw04yPkAwgt/5pvOURRFtAvGZXldBlBkFoogxAuilJcJD8Y50Ic+FvsOuQoZBbEp8qUREVSbgv/mmQ0R/+ctPbB9F0extES7gVZV0PcJk+IA7zELufs1zDFgMh4ZnQN4xYBFaKt/eGMPQFUW3/9P6HFXPaxqrSK+H7pkczmca/I4lIAOhKy8wYMUDcq7eSfIc+PLq3t7q6HN7s7nWpcWvz7cAAKYUnzVjNKIOEYUubucIwts6XGF9rqY5dZ01MJ8ydovrHvJwfMgtDosYT8lbut0u4B2wWzEZox5TA1wFUFRU9TyRPuKBql3Dx1NWikJEmqpSq2UQtQyDbf6cXLqdISH8zogchHcTuhw9W0SWyXgisgLyLBRv1bqLNM/fM5BguR+OxvBPkWCuiM7mCqaS7x2KNPWeDZJC8YUIvFtIjcDb6e9uPnhFV+/tIedtQsgkAo+Q+2Tgp68+/7xDRD/9tGIpK7+iL0x92QWhwLY5PjAajWqppFBE/8CTeNLRPaagqkUxNE4c7bbGX8Y3Bu0cygSMekwl0+UqIAKfK2KXDo0XhCdTUYeKq7AxgrFrWWbU73KhrYqOpqpcPbPfHeZpWK+nW59PT5XZ2Zb5eXjpUslzwMJqnrttAblapmnw+MowQqZIuOO36RST57iBkpqRsdwVFYovUODdQmoE3k65vreX1rXAhAC5PpHwdI+WpfEr+mIYuqqKj6AG2NpSqcoMZKslo5ZvOMy4pH9dGfBocj8Bzwl7NyZp1GM6gKsAsiG20LJZIvvhKk/AtlrVdV1PUni8QHXFE6r3Umlsn+FQXVoabTEMPfBOa46wavCzNsMGmtvgBlcr9IzfprMuSnApO0kviZZW+brANmg05iRofnv6HC4+fzM1UhPwAHgDlT5tRMrjCthTrHoPnTutKCqbnqcoWqulUdxQ/CSlsYlCnuGcpFEPAIAkEvZAnpLPTGgPuqimxRd4bN0NXU9aay1b4ql3IiqV1F5PZxqec3kaBudIjc+4zOhLh4Y3pbuHLTMlffgV/WD+Bo3m4XufR1U9yiKaX8nyOvKTbe5OxvRM67NvKa5ut4CABwAAorDKZ6pKrdbos6Jo1oy7GBTWXgAAwAQiROEwyWcYZK0tFxiEH9N7UTUeU++RpLuuS8qfJ7Ji3P62TdM87jBPWNhTvTPsGp5GK6iHnC1SnoVtXOZ8C2uzqqr25xWsA9lv57+updgZ9tkT9q8cet5zaQOSGDPIi3q341byrh2cexYXCHgAwLQTI3mSxeEzyaUHAACQQ1ySTyfS2SeHxnNPI9I057Lh/sQJvBtGtDXDIxGqhjzVdUDNeXOH8Euz38VS5OyF/Z0NjHB7x/BcyN2U8bw6kOdZ2SLtvud0fMUOsZS8+/lOcPJ8MBOgz0OBgAcATDWxpz5CwwMAAHBgMyiaFacNTdZ1zeYl69hqlezrtOUqZz62RORJnh8OfcPvjFJJHQ51ptsjJdLHw+UqaF57eRCcSG/qcN6zWViHtFoak/H2uzoNyfPTDAQ8AABw4Zeixg+WLgMAgFzhmd0t6sxRpY5nlF7X9eQtlBd+pyKEZFstvVrVRZ81wvP10/DxliF0wM6g61q1qrHlCSWpd3O2v+DTghj8IesGAACmCyHV40VZpqhmqFpleXr2lvAeC/UOAAB5Q14V94Qyx9L/uQq5FxFp6+dRpKngDgHfamlC1Lv9Cq2WRjRaowfqfbKBgAcApIqozl/IeWIYOXscI1I1O/hgAAAAoqJpAgZ/VdU5+iwEZkOjVrDjHDQxM+R9cefY53xRPVPDj6S7UPVONFoch1VPFLlSjzm9A+o9R0DAAwBABFRVJdIjeUJseSFYPgAAANOGW1SHlq9j8KT9jw+pBwxS5CUDjpXTk5ERYK1NoKo6+SxlHwMr8A4fJldkNge+3+/7f1kul9NrCQAgZdiYfez8rsxz0VlCI2dWXuatBaC4wFUAspGXGyVwZng+E7gkFTm3s7Sk+q0kNxyeryFXICznxyxMqAo6sWNtAs2murXYJ0XafG5JV8D327sP7m81u2H71Q7O9lbTaBAAAMSE1bQbDg2mzz0Xm3F8BgCEA1cBgHG0iGuJeyK8jp2ZPy+3gp2nhi+6eiczEsBqziU75yjw7vpGc0TOOZU420cb5c0T1Hs+SVPAtzcX1popXg8AkFtiB+FzFdCuVlVd13Vd07Qxoc58GgBAdOAqgFQRoo39zpwrS6CqSRdS8ST0ZyZPH2Aa3rGF81j2k2UmCyRKL1dV1bZGoBrlwFEMfzzw7oFdwDu2m1rdsZvHziBvpCfg+7v3Rya5UqttXL115Yr/vgsL6bRpEjh58vC7nzuDARERza/c/vPG+vJc6FGHD2/udDy2r2w/u7ssuIUAeBNDwwtX7wmLtVrHsqFqUa2KjWMcgTCUAIpGFq4CzCgoAEKy6AUG4ZkkTm0BuYTxdkkrokfCz+Gx5Lel5M3gvGM3su8WqtuJyDG44Bbw5gePb0HOSU3A958/7hIh5U0sTgdi0Nnf6bwJ9x5O3hgymwUAJ5ZNDbWsTJcKj71rWlKvKA8mz67bXcV+NfYDoeRBEUjfVYAZBd60Wjr7oCg8Skk6yecz03m8V03YGFbkXNe5gs/uHAdWbU54LoCMc4qCJ1zhVvJ2rG0R30bfZwSfoNCkJuCPX3WJqNK4B/UujMOHOx0imr+9/dX68hzRyeGT73b2B52d+uVHu+tB8YO3bwaEOAHIBfYJ5J9//rnnt4SZ5P4Ej4BY25mSx20E+SZtVwFmFND5ULJmr2Ful4KWmCeiavV8eyDi8+eFZPsLSaTnWT0usA3UaiW5ftCZHQif+e9ARg5CHgaMQM5JuQr94hXUjBXFyZMfOkS0sr27PnIf5pbXd7ff3NzpDH7++8l6gOtx2O0Q0fzlj1NpqC/uUGE27QA5gD39TqdD429CCnHj4s7GZ4F3zpZbOh+heJB70nIVim9GgSgMQyfylbUOMR8ak5eXWJ6HRPqUk+cTYg5YyDo/zyiGpCIL3CSapQ/ySWoCfuFqhah79LpPq9DwIjj5+88DIlqpjA/+L2/cnu/sB7seLPNv/rNPwyf5ScIzZmiuq6G59wdTRfrvQB5m40eFc+qB+yiE4kGOSdVVKLQZBQJRVa1a1XVd48ktZ2Lep+43keSVt4Qm0lOMXHpVJSJNVaP9xmwjyoqiZ3l5ACTwh7QuVL6xUSHqPn4esKYriMAofa/iTN6bu6wQ0eDN25BD5z+7/PbJw/pNRr3+8PBEXmPPYTLJUywFfAVACvBr2szVL/Oa4v2l4K8M5JhUXYWCmlEgEHt/qKqaYWj8h7ZauudcZdnRTk0TMHysqqqqqkR6jOuTiN9Yrar2CQvJMQzdb3aDYehTbvIQgZ880kuhL9e/bzxe2Nr6cvPK93uIwidlNPzvkb738eV5ooHx5oR8yuiyQwf7Ozvn2waDzs6dTsBsvmvXrjm2fPLJJ7/99lukRvPV8NDIjBNGOjkASbCm4vOU08v85cxDQV0AZJCiq1BIMwoE4u7wIyVae4bi00ksDw1ot1rnjVAUzW//SKF4FnvXde9hi2A8Z+8LLGVX9PJ1soF4nzzSq0K/u/ng1WKFut3m2kKTKpXa4qLvzlfv7dUh8WXBgg5E8yvbX91dniOik5Mnj7/b7/DU7QEgL2iaxrwI5poIGV22C2O/Gg2Zq3ch3gA7Sea/BYBxCuIqwIxOKLZeUYt6rJk5n0Zxb3civaXYWS1YRTn/yjA0q2Jctepsm7limW7fYrettq90x56RcA8iiC1l5zdIoWnyVoAvTCEAMHmkWIW+2Wye/7PbbXa7vjvXbu0RBHwiBm/eEnm6EKO1b1a2d60wwdzc+t3dyxRUt+fly5eOLTMzM5FaFEl1QF0AN5ZiZ6jqWFTBJrxHO8e7CnvrtLwuqC6wDfgrA/kjT65C/swoEIj/otwajQyBx7eeZ9J1XdfVlLOULQ2v62QYmk2xdxx72sV8q6V5BuTtSQSWRDdlvEojpaon+YGes/erVQEl8QOS59l4iq7ryQsH+J08F54BmD7SS6EHqeJfG3dufffZusf25coKdUIr7wKQDeZMxaAd7P9MaFY1jYQbeyEgeR6AlIAZnVxCIwpscNMwxtSvP7qqarFD07HRNE1RqkQKXyOJiBRFYwF5dyjewl2cT5RS9UykT6jhA9Q72TwBz0snBOodZEhqAn517+xsL62LTQ6HD2/uOAdTZa07y2b9+ccckhCj30R4EDDilVsnGgl+2FcAioMEV2FSzCgQBadN8FoZRzO/ci53momvoqpatdrSdZ1I568nz9R+q6UFaHgL4fMCPEfhmYan8eX6QmE18ALV+9izFlsJv3DJ85pJ1g0BYkAEvqDMXVZ83AQ2N0+5HNN7wLK2IE8kGTJnB06SxZLxOwrnhQAgCJjRKSVSHpN9T1slFI91cFO2Nbbi+SqN8t5V/sMVRQvV8DJSxD0T6YmoWlV1PUItOrZngCZ3N97v0jHgvzN5qGDHgKGfMCDg883y3WfP7np+41cl17+u7uj7J/U7+wOv+ENClwUAocQNvLuZnFQO4fnz5p0ReU4A8gXMKBBETpQYeclCWz15XsI0vMjAu+O8PmsJE1ucz9ZC1b6Dfdm5gMC7dRV344VoeEx9B3lAkoDv724+eEVkKxJrbeEBVejDmfv0s/n9wWD/8eG63YU4fLw/IJr/7FM//4HFHKjTPby7bHc9Tp780CGvFXEByApR3lL6sREAAAcZuwowo6CI+JkyMx7tnDASjK47c8tTEKgBkXNLmbOAvP2r4JC7nYDMsoQaHuod5ARJAt4qJGsViXWUlg0GVeg5GLkenZ06jdaxOTl88t1OhwIdD6LljdvznX37cXRy+PC7nc6AaP72BhwPkAMkZJ1BwwOQN7J2FWBGpw8W/pV05nSsDF8qlk5EoUn1rKYdU7NWvF1S4N2O7Ub5XogF5KOfmZ086CfwXD3emd2InXifBEyXmzCQQl9c5ta/2n5zZ6cz6OzcsQ+4rmzb16Ad5frN37ZWpp1b/+r2z3f2B87jaGX7K1mFc5m9iWQ1dX1C0p5BVKTNGYOGBwDYKZIZBUJwB5xFkY5t4bSPjtXdzX869mH/1VqtarWqpKDb7ZiDBZrAOVz84fGoV48dePebLwBAQiQJeHchWVShl8Dc8t1H25cf/7DfGbAN8yu3v7ob7j3Mre8++/Tw4Xc/dAbswPn5lT+PwggAAABAGuTAVYAZBZOLlXHuOT3e2qYoSlZD2/GC4V7niRMe99Lkmv2EjvMnaWHmIIAxYcycnZ1l3QZQSGZmZogo0vvDPwyJ8Pt00ul0iOinn1ZkXqTANkzTBNexY2cr7P0AoNjEMKMgIZLDodLtS2j7P/88shnNg8eVk3np46JdwAkpR4XoC+z8ADd/yLoBAACQHoUehJbR8MLeDAAAiIy8Ockp9KXyLpG5ITAFfAT7zLLgxU6O02wIOSEAksAceJAeVvAwYDCSDQNnPhgMJhUYZQAAAEWEPwOr1Rrtpiha6JhFTtYTtc1LH9tobShoWnse6tihgt3kAQEPUoUpc08ZD+meAiwH2/on0qcLB/O08pGPBwAABUNeUbHMw7ZMtH/++edEpCijlhiG1moREfmv9y4MIQ6GW8Dbz19ElwV17IAMIOBBBti9f4MNAAAgAElEQVRlvGMjkIR1t+23XddHY/O4+UVB04QN5+dh3iMAAICEMOluivaxdREsJc/2kSTj5TkYRVTsOSTz0SUgHAh4kBkQD6nhN/prN7p4HEUhxqKMnifBEwcAgKLTammWSg+A7dNqaWI1fMC8SIeqn2aLk20WPfLnJxIUsQNgwuERe3nI70pteHgChqIx4AIAAPGQM3yZjVnhVO8WiqJZ0+OTwzwHTgcjcx8jQzQtS5M9AT4PcAMBD8Akw281M7evXuvUSmECDBn7CfEcAua8Qv8DAKYWsRHR1GyKY+g2qnpnuDV8vLoqUX2GzH2MbMkqCD8BDg/wBAIegIkF9nWCYS5XVB0e7ygAAJgkkqw67jpVehHO/CwjF89bmGYfQ+ArF+WiCL9PLNkK+H6/n+n1AQC5IbXx6YmxZazkL2c43dpzYn4+mBrgKgDxiMpqzkogxQu/M8Qm0gNO0k+kh3qfYDIQ8P327ub16zMzMzMzCwsLm20iovbmzPXN3TZsNACiiN1po7cvFlZQ3VPJW9sReAfFAq4CkE3yUePpNJdJAunTHISndBPpp/PlnB5mzs7OUrxcv7355Vqza9tSOzjbW6X25sxak4gqtYMXe6spNgjEZmZmhojSfX9ABGKbyQwnSHc6HSL66acVydeZ2DFpxzK8FHclXgAyZVpcBZjRzDH7Ry36gaNj0+9hVVUzDPILv3/zTYeI/va3cDNqGFq1GqckSkIRPuVFWNLJpUfy/MST6jJy7c2FtSYREVVqtQ062rLs88LVSoW6Xeo2165fPX5RL6fZLAAAmAiYP5lxIwBIBlwFkBo2Ea5FOSpLdaSqWqNRFXKqGOXrkofQ2RmmVsObb44m8xJQ75NPiin07U1mkmsHx2cv9vbqtxbPvyvXX7w4PqhViKi79aCdXqMAAAAAkBfgKoDUYYKKW1Jq2aojsVeGyksfqQIe6n1KSE/At582iajSON5b9R40L6/ufd+oEFHzKcwyAEAKMGoA5Bm4CiATzAJj9v9ZX5F9ex7U0dKSYhh6wpMMh8bUhsEzx9TwmtBzUk7eT5ACqaXQ918fEVFl40ZQylv5xkZlq9ttPm3vrU7A9DYAMoSlqEVNdYu3HiwAAIgArgLIErvysT5b091zRbWqtlq6oqjxDjcMfWlJEdkgEJF40zf8z4bA+3SRmoA/ftUlosUrwVPWylcWibqBuwAAeNC0mPVOJ7j/h4UDIN/AVQB5If+Wgml4Iook41novlpVdV2X0SoQCZtPosU9AztJAd5YIJBUi9gBAEAo8rIAoN4BAAAUHWYlVVWrVlVdJ8PgDcWzPVV12kvB5wrXcgaa357jR1kHQrpPI6kJ+IWrFaLQjLfR7LerC2k1C4AJxrLx/PvnwaJLWihV03yTCxyrr2HpNQAyAq4CANFQVSIaheI9sc+Wr1bVhJeL6ld4niEPnkbesE3Z0BzfmNsdUzyg26ea1AQ8z5y1/u79JlF49hwAgBN+W5sfmypjkRW/5Hnrzthvka5rbBAhJzcEgKkBrgIAXDiMu02Zd2hctLOQu+NYWLfc4nBUcl6LAWRFein0plleu04H37vLy/bbm1+uNbtEVGncQ1UaAITBo+HzZs41LekYv/uEDsvHTu55CYeqz9WdAWCygasAQHKSR9oDSBKEz5uzkX8g2oEnM2dnZ6ldrL97fWFrVHemUqlQt9ulSqW2SEfNrlmOptI4flHHqHoBmJmZIaI03x+QBL9Qs+NDtnQ6HSJaWVmhc6OlJTynZ+y9iDMLAJgSpsdVgBkFCXHbss8/7xDRTz+t+B0ixKJBwAOQLakKeCLq725+udX0Kx47GSZ5SoDnUURyPtnbLuAZCXPpk6t3BnwOANJkSlwFmFGQHIdFCxbwAm0ZLCkAGZK2gCci6vfbzx/cf3zUPR9Lr1QWN76+V3dly4H8As8DCMct4CluKN5WoHXsQMQNACgGU+AqwIwCIdhnhPkJeGa/xFox5LIBkBVZCHgwEcDzAMLxFPAMTeNdA47t47c3BDwAICfAjAKBMNP2zTefk03Ay54oF1BNxkLG2AEAUw4EPIgJPA8gnAABT16lWU2t7v2t+wxY/AYAkB9gRoFwmBn9299+Yv9MZ6JcIYrsADBJpFeFnvr9Pt+O5fKkpMcBAMQRsLaK+1sAQCGBqwBAYlLWzOxyOS+yA8AkkVoEvr05s9aMdESlUpuoyW6TBkIHQDjBEfiECFmXDkF4AGQyXa4CzCgQjlQzCgDICSlG4KPS7Ta7a82tiSk3CwAAAAChwFUAAPDhyBEgpAmAwpKagF+4d3Bw6/X9tdHirpVabePWrSvsu9dPnz5usgVjKrXG17eu0OvXT189Zku+drcWNq+c7a2m1VAAAAAAZAFcBQCAeDxn6RORrmuqOvqQbosASESaRexGqXF+4+T99ubCWpOodmDZYHMThtZzCHL/gHCQQg/A1DNFrgLMKBAOUujd8Fh/GHdQLP6Q2pXamyH2tby6d9yoEDXXNtvnmw5qRNR9/Jyzqs0Uc/jw5s2bDw+59z958rBevzmi/vDJ4YnExgEAAAChZOoqwIwCMFEw6c4zds+/JwB5IDUB3399RESVjRtBo+PlGxsVIjp6fW6DF65WiKj76lhy+4rO4cOdTqTdb97Z7wwG5r8Hnf2dOxHcFgAAAEA0WboKMKMATB78mhzqHRSI1AT88asuES1eCc5uK19ZpHEbzLaAIE4OH96M6HfsdIho/vb2o2fPnj179mj79jwRdXbqTxA/AJNK8gQ5pNgBIJmsXAWYUQAmjRgRdQThQVFIL4WeiMYHzL1gg++Am5PDJw/rdyK5HXTy5IcOEa1s764vzxER0dzy+u72ChENfv47XA8ARGPl5sE5AICDVF0FmFEAJo/Y1hZmGhSC1AT86q0aEXW3HrQDdmo/2OoSUe3WeSHZ9tMmEVWuLkhuXxE5eVK/s7PfGdD8yvajbd6CJSd//3lARCuV5bHNyxu35+F6gMkmSQg99rEO9Q7nAAB/0nYVYEYBAAAUjvQi8MwsU3Pt+mbba2y93968vtYkshlla1PIfLhpZn7l9vaj3bujGAAPb994OR5Ec5cVIhq8eSuwdQBMOZ5yHRoeAD8ycBVgRgGYLJIv7Y7F4UHOSW0deKLVvYNac61J3ebaQpMqldqiOWXt6Oio2+2O/lE72FslayEZIoJ+92NufffZetSDTt4YRDR/+WPXNx9fnicaGG9OyMOPuXbtmmPLJ5988ttvv0W9PADZoutxYuDxwu8BF2JfYUY9AE7SdRVgRgGYPJihj324aZ3jnwEA2aQo4IlW944P6Mu1ZpeIut2mZYgtKo2D7+urjm21g2It7AoAyDVRNXw89c4zfq9pGOYHwAlcBQCiomnE7NQ333xOMC4ATDqpCnii8urei7N7/fbzB/cf24bSK5Xaxtf3bqyWz63vwtVarXH11o36KixyqgzevCVyhw5evnzp2DIzM5NOiwAQjjU8HyzjmT8UL04eGgHAGD8APhTcVYAZBWlhtzLm5w6NDNBoO1K9AJg8UhbwRERULq/W91brITvV9/bSaQ4YwysrEIDJg/k0lvdjd4Msdwd+DwCZUVxXAWYUpELwLC37Z9gyACaMLAQ84MdradqV7Wd3naVzAABxYG6NlXzIUFUNyYcATAgwo2Di4Mkgs+/M9oSMB2BiyEzA9/sBy7yWyzlKhpsw5i4rRAOvDD9WV1e5zF+JF4DJQNNIeCo7C3oEOFgJq+wAMA3k0lWAGQVZEqMOqyX4p0TDh9rfYGCdQf5JV8D327sP7m81XRVpnNQOzvZWw3aaCpbvPnt2V+wp/ark+tfVnRYcYVhCJBYkQNPImoIYsA8AwIlYVwFmFEwQSVYhnZ7VT3jsb+gZAMgzaQr49uaCtdwLyIy5Tz+b3x8M9h8frttTCA8f7w+I5j/7dBojB5Z0d9hFVgYGMh7EI6DcfbzK9gBMAQVwFWBGAQAAZEh6Ar6/e39kkiu12sbVW1eu+O+7sJBOm6aTkevR2anT9ld3l+eITg6ffLfToSl1PALmklnTxlQVk8dAHDw1PNQ7AH4Uw1WAGQVZkCT8bj/DNBigqOvF2g+chvsDik5qAr7//HGXCNnxqXPypH5nf0Dztx/tro+8irn1r7bf3NnpDDo7d+ylfVa2rV2mBp7+fdomjwGxuGfT4UUCwIdcugowoyAHJFfv9vMkN0P5n3UYQ8NDvYOikJqAP37VJaJK415uTPI0M7d899H25cc/7HcGbMP8yu2v7k6d2xGpZ5+ecWsgHLw2APBRHFcBZhRMJXbd7jnrkHKm5Pkr0sFSgwKRchX6xSsoLy8Jvzo9c+u7z9a9ti+v311eF1zZp0jEsy6ahtImAAAglYxcBZhRAAIJXr7O2p6fiYdWeaNQDY/YOygWqQn4hasVou7R6z6tQsODHBBjmRAzAh/tKAAAAHzAVQDAA+GRgxjRCP6kxbxNPLT7e34z2nLSVAA4SU3Al29sVLa63cfP+/U6zDLImCS2EEF4AACQA1wFADwQuzJ5jGhEvMXnc6XhqQjz9gHgJL0U+nL9+8bjha2tLzevfL+HoXWQKbFtIYLwAAAgD7gKAOSN2PXzcqXhaRS80TJuBAAiSK8K/e7mg1eLFep2m2sLTapUaouLvjtfvbeHsXcAAABgqoCrAEC+SFj9Pm8aHoDJIMUq9M1m8/yf3W6z2/XduXZrj2CVAQAAgGkCrgIAOUJUejnmHgIglj9k3QAAAAAAAACAN2KD2JFWVks+9x4ReACEk1oEfnXv7GwvrYsBAAAAoGjAVQDAA00jtsS6wBMCAIoLIvBgGok9Hiy2EiwAAAAAQA4RK/IxZACAQCDgwTSScBk5AAAAAIAJRmDEAln0AIglvWXkxun3+z7fHD9/cJ9uvaivptoeMHUwcxLJOCH8DgAAKQJXAYARzANJ7oToOrQ0AIUnXQHfb+8+uL/V9K8pO6J2K43WgKkm3owyhN8BAEAucBUA8CK5hod6B2AySFPAtzcX1prhuxFVrspuCgAU0RbC7AEAgHzgKgAAAABBpCfg+7v3TZNcqdQWF+noqNntjn0mokrt4Pu9VSzsClLCyooPkPFMt0O9AwCAbOAqABBAkiA84hAATAypFbHrP3/MzG7j+OzFi729vb3vNypE1F28tbe39+LF2dlxo0LUbd5/7jflDQAZMHPoadjYRhRfAQCAVICrAEAIzDOJ5JbEOISEVp5DCSEAxJJaBP74VZeIKo3v6+aYefnGRmWr2z163afVMhGV6y8OXs2sNbcetOt7qEsDUkTTiEjTNGeYXVU1THoHAIC0gKsAQDjMV+EMxccOvItdfB7eFAACSbkK/eIVW8pb+coiUbf76photHX1Vo2azebT9t4qzDJIGybjM24EAABMO3AVAAjHEda2f7YrdqQQAjB55GAd+KPX54lwq7dqji0AAAAAmHLgKgDgwsqNd8wEtP6ZUL0LyaJH/jwAwklNwC9crZDT3rJt3VfHjn3dWwAAAAAw4cBVACAObA6gJbZF5avn7TwAAEZqAr58ZZGIuo/tdWfYNrup7r8+SqtBAAAAAMgTcBUAyBcJw/gofQ+ADNJLoV+916gQdbcWrm/utkdmeDSubpnq9oOtLhFVri6k1iwAAAAA5AO4CgDkjdgiHOodAEmkOAe+XP+6RkTUbW6tLWy2bZu6WwszM9evz8ysNYmIKhs3sLorAAAAMHXAVQAgf8SQ4lDvAMgj1SJ2q3tnx41aZWzTvYMa+9Ttsv/al48BAAAAwDQBVwGAHMJfFU9I/TwAQAAzZ2dn6V+13+7Tatm0vf1++8GX94+IaHHj63v1VdjkQjAzM0NEmbw/YFLpdDpEtLKyknVDAADZM/GuAswoEI5sM8qq5bHPjtry9u2oWgeAVLIR8GACgOcBhAMBDwCYHmBGgXBSM6N2Jc+AbgcgNS5k3QAAAAAAAABAYdA0ItIybgQA00pmAr7f7/t/WS5PQG4cAAAAABIAVwEAAABwkLKA7+9ufrnV7IbtVjs421tNoz0AAAAAyBVwFQAAAABf0hTw7c3R4i8AAAAAAG7gKgAAAABBpCfg+7v3Rya5UqltbNy6csV/34WFdNoEAAAAgNwAVwEAAAAIJjUB33/+uEuElDcAAAAAeAJXAQAAAAjhD2ld6PhVl4gqjXswyQAAAABwA1cBAAAACCHlInaLV1AzVhaHD2/udFa2n91d5t3ZYzvv8QAAAIAcsnIVYEYBAAAUgNQi8AtXK0R09DpgRRiQgMOHnp6EDydvDGktAQAAAGKRpasAMwoAAKAQpBaBL9/YqGx1u4+f9+t1ROHFcnL48E4Uv4Po7ZsBIU4AAAAgV2TlKsCMAgAAKAypReCpXP+6RtTd+nKzjSi8ME4OnzysR3Q7iA67HSKav/yxlDYBAAAAsUjfVYAZBQAAUCwkReD7u5sPXrk3VyrU7TbXFppUqdQWF30Pv3pvD2H6cE6e1O/sD4hofmX7q0qX2wFhmX/zn306J7FxAAAAQBDZuwowowAAAAqHJAF//KrZbAbt0O02u13fb2u39ggCnov5ldt/3lhfnqND/9vp5O2bAdH8Z5ffPnn43X5nQEQ0P7/y56/uLsMVAQAAkBL5cBVgRgEAABSKlKvQA5HMre8+W49+GIscDPZ3ds63DQadnTtBxXevXbvm2PLJJ5/89ttv0S8PAAAA5AKYUQAAAIVDkoBf3Ts725NzapAUVnqHZQyyaMHJyZPH3+13Bp2d+uVHu+sIIAAAAJBOYV0FmFEAAADZgQj81DFa+2Zle9cKE8zNrd/dvUw3dzqDn/9+su7lerx8+dKxZWZmRmo7AQAAgBwCMwoAACBD0qtCD3LC3Prus2fP3El+y5UVIhr8/PeTLFoFAAAAFAKYUQAAABmSVgS+3+9TueyuNtPfvf7lq42v791Y9fgS0OHDm66iuLLWnf348jzRYPDmLRGy/wAAAKSNDFcBZhQAAMBkIT8C329vXp+ZWVj48rnHmq7954+73ebW2sLCzHWsD58LsKwtAACAlJkkVwFmFAAAgEzkRuD77c0v15psYZbuq2NyLfhyfP6x21xbOGocv8AC8HaW7z57dlfoGUer3nrEH1hVHuUy4gYAAABSQ66rADMKAABgspAZgW9vLpgmmSq1g3sL7l1W6y/Ozo4PahX2z+7WwmZbYosA0dxlhYio0z0c337y5IcOEa1UZKQVAgAAAF4Uz1WAGQUAAJAl8gR8e3OtyT5VGsdnL/b8Z66VV/deHDdGhrm5Bgkvl+WN2/NE1NmpPzwcFdo5OXxYv7M/IJq/vQHHAwAAQEoU0lWAGQUAAJAhsgR8f/e+ZZO/50h1K9e/t+zy/d3cz3ArECdP6jdv3rxZf2JVxZ1b/+r2PBENOjt3bt68efPmzTs7nQERrWx/hcVrAQAApEQxXAWYUQAAAHlCkoDvP388Soirfc05U61c/7rGPnUfexWxAeKYW9999mh7ZX7e3DA/v7L96NndZfgdAAAAUqLArgLMKAAAgKyYOTs7k3Da9uYMy4qrRKg109+9vrDVJSKqHZztrUpoFhDIzMwMEcl5f8CU0ul0iGhlZSXrhgAAUmDaXQWYUSAcmFEApgHZy8gtXuEvKl++siixJQAAAADIIXAVAAAAAF7krwMPAAAAAAAAAACAxEhaB37haoWoS0RHr/u0ypsX9/qIfahc9VhGBuQSlgEIAABg8pCc3Q1XgQhmFAAAJhoZllRSBN5KcYtQZea8mk2UZDqQFdM8be+TTz755JNPsm7FBIIbKwncWBngriZm2l0FmNGsWzGB4MZKAjdWErix8ZAUgafVWzVqNomZ5TpPbZpzozwpo+qTz9Q6H9euXaMp/vnywI2VBG6sDHBXkwNXYWrfH/z5SAI3VhK4sZLAjY2HtDnwq7fMlV62vuRYrLW9OaoqG2E1GQAAAAAUF7gKAAAAQETkFbFb3Tuw7PLC9c22r2Xut3c3r7OVZIio0rhX6FVhAAAAAMAHXAUAAAAgGrJS6ImIVveOG0dstLzbXFtoElVqjY1bV66YO7x++vRxs9m1HVI74F4KFgAAAAAFB64CAAAAEAWZAp6oXH9xTJtfbpmWt9vc6jZ99q3UGt/vwSQDAAAA0wRcBQAAAIAf6evAl+t7L44PGrWK/y6VSu3g+PgFTDIAAAAwhcBVAAAAADiZSbPuX7/fPj5+/frpq1dEdPXqrStXFhZWy7DFAAAAACAiuAoAAABAIKkKeAAAAAAAAAAAAMRDego9AAAAAAAAAAAAkgMBDwAAAAAAAAAAFAAIeAAAAAAAAAAAoABAwAMAAAAAAAAAAAUAAh4AAAAAAAAAACgAEPAAAAAAAAAAAEABuJB1AwDIMydPHn73c2cwICKi+ZXbf95YX54LPerw4c2djsf2le1nd5cFt7BAxLuZSQ6cEvCWSuXw4c2dToS7gtcVADvooAQCMyoJvKWygSUVDCLwAPhx+PDmnX2z+yCiQWd/587Dw9DjTt4YMptVTOLezPgHTgl4S+Vy+NDTP/PfHa8rAOeggxIIzKgk8JZKB5ZUOIjAA+DNqLuZv7391fryHNHJ4ZPvdvYHnZ365Ue760HjgG/fDAgjsGPEvpnxn8J0gLdUJieHD+9EdDrwugJwDjoogcCMSgJvqWRgSaWACDwAXpw8+aFDRCvbu2bSztzy+u72ChENfv77SdChh90OEc1f/lh+KwtC7JuZ4ClMBXhLpXFy+ORhPZrPgdcVgDHQQQkEZlQSeEtlAksqDwh4ADw4+fvPAyJaqYwPqy5v3J4PtZZvDCKa/+xTjBKOiH0zEzyFqQBvqSROntTv7Ox3BjS/sv1oe4X3KLyuANhAByUQmFFJ4C2VByypVJBCD4AHo8SoijMtau6yQjQYvHlL5Ndlv30zIJr/7PLbJw+/2+8MiIjm51f+/NXdqS2/EftmJngKUwHeUolYNXMOu5xH4HUFwA46KIHAjEoCb6lcYEmlgQg8AG5GA6seiVEfX54nIuON/3D3G4OIBvs7O6MOnYgGg87OnZvTWn8j9s1M8BSmArylsphb3322ezdixVu8rgDYQQclEJhRSeAtlQgsqVQg4AEQChs8JJpf2X707NmzZ8+ePXp0e2WeiDo79SfoeEAewFsKAMgt6KBA/sFbCjIFAh6A6AzevPX5ZrSqyMr2rpVFNTe3fhf1N/zxv5myDpwS8JbmCryuANhBByUQmFFJ4C3NG3hjTSDgAYiOf9XRufXdZ8+eudcUWa6gU/chdglX1H4NBm9prsDrCoAddFACgRmVBN7SvIE31gRF7MAUc/jwpmt1C1kren58eR71N0DOwVsKAIgEzCgAdvCWglRABB4AN3OXFfLO1GGznpTLMfvlaRw7jH0zpT2FCQFvaa7A6wqAHXRQAoEZlQTe0ryBN5YXRODBFLN899mzu57fsCFU480JjdfP9K+POfr+Sf3O/sAr/jDFXU/cmxn/wCkBb2muwOsKphGY0VSAGZUE3tK8gTeWE0TgAfBg7tPP5okG+4/HVwM5fLw/IJr/7FO/npmNHVKn61hF5OTJDx3yWtlyGoh7M+MfOCXgLc0VeF0BsIMOSiAwo5LAW5o38MZyAgEPgBesC6HOTv3hIStFcnL4pL7ToZAOZHnjtuM4Ojl8WL+zPyCav70xnV163JsZ/8ApAW9prsDrCoAddFACgRmVBN7SvIE3lo+Zs7OzrNsAQC45OXx4x1Wcx5EwNcqimr/9aHd9bnyb+8BHd5entuuJezO5Dpxm8JbKhtXocr9xeF0BCAUdlEBgRiWBtzQFYElFgwg8AD7MLd99tH17Zd7aML9y+xFH9zG3vvvs0fbKvHXg/PzK9qNn092hx72Z8Q+cEvCW5gq8rgDYQQclEJhRSeAtzRt4YzlABB4AAAAAAAAAACgAiMADAAAAAAAAAAAFAAIeAAAAAAAAAAAoABDwAAAAAAAAAABAAYCABwAAAAAAAAAACgAEPAAAAAAAAAAAUAAg4AEAAAAAAAAAgAIAAQ8AAAAAAAAAABQACHgAAAAAAAAAAKAAQMADAAAAAAAAAAAFAAIeAAAAAAAAAAAoABDwAAAAAAAAAABAAYCABwAAAAAAAAAACgAEPAAAAAAAAAAAUACmV8C3N2e42Wxn3VrGqM3Xd/tZt2RqyNMt7+9ez09jAB/mQ+PpQ3LysuWkGVNNUZ4BzCjgIE+3HGa0gMCMghhM/DOYXgEPJol+e/P65P6VAiAJ/OEAABjoDQCIAf5wQCZAwIPC096cWVhrdrNuBgDFAn84AAAGegMAYoA/HJAVF7JuQNZUGscv6uWsWwEAAAAUEphRAAAAIEUQgQcAAAAAAAAAAAoABDwAAAAAAAAAAFAAIOCjMlYOs9/e3bxuVdm9fn2zbdWx6Ld3N6/bvtvcbTtrXNhLJDrO5LF3WLvGrzdz3eMcQfVXzXLCozKfAn9mlBZ63pbrvkewVq41iYiou7XAX3LS2Rjf1vgeE3wA74+Nc24nViXo66E1WjN8rObuHnfe/wjexxRUbdSrgO1o22Z7/CY4CtFE/WnOZxj1b3j8ZMHvQ4S/Za+z8/7hyHznfZrN/RAjdBSx2omuPm6fwPEbcG9hRsMPgBn12x1mlAuYUY8Gw4zytj//Xf3ZtHJQIyKiSuM42nHHjQoREdUaozM4qR2cnR3UKl5fOS5mNeGgwbO7f5uPvY8nokptbF+zye5fbf2sA+E/M7iFVDEv6fqVDZ/Tnx/gedrQR3rs85O8WmM2ptbwPsbrYtyPI2R/Z1vM/cauaT0D1330/OnZPVZ24333dx8Q5zEF3V77IaNttZrjEiGvVsBP89m9Zr7EPE8n0svG/7fsQeAfjth3nu/FtF+X9yFG6ChitRNdffjPrP2zz1VCwL2N+jODWwgzCjPqfQDMqOvCMKMwoxPS1U+9gA/HcXPHbmyldmB+aetVKxHgacgAAAo/SURBVJXRi3BsfmUd49l3jE5l29861fgfg+freN6gSu3AOoXPOfzeR9cftsCfeX6uSq1hncjexPG/eftt4Tl9xLGY89bYGmM/e1BjDkIbE+lxjO9vO7t1Z+wnd3setjvL17tn+FjHGmu/8ed9modvEO0xRfU8xg46Pjh/ABF/mvWWeN9Sj8fuiaND8DqV7TTcf8th13OeIP47z3m7ojXH90dF7igithNdPcfP/L+ID5hRmFFX82FGYUbdl4cZhRlFV893hyHgQ/G3LD7DPe7XyPadz1+O7/5e7y/nCOJ5Uz26K2+j4DVymvRnerXC9aX9Iufndx3hOXgezfMI6JeDnxFfYyI+jtD+wetOjvaN7Hac5eKxBtx42+7xHlMMzyNoeJnzp3m/leOXieh5+J/K9g3v33LY9fw9D653PvKbELE5vr9KdjvR1fM0mxOYUZhR/sbAjHq01O8cATcBZjT8ujCjctuJrl5inwABH4qf58HXgzoP8zSxnp2Ex5N1v44hf9ic3ZXHn7WwnxnWEbq/Dzi9919TLM+DM9AQrTGRH0e4OfZ52HHcjrMsHyuPWeG/kz5tj+55BDgevD8t4BmG/Y1H2tl9Hc6/5bDr+Xke0d55/j/wiM3xPYvsdqKr53J2+IAZTfQzYUaDrg0z6tMqmFHfb2FGU2onunqJfcLUF7EL79l81retXF3wPeniFdch5SuLvrvXbq16bF29xZ760euA4gzHr7p+V7Rftfvq2Hna5lOrjkX/+eOuXzuS/sygc48d4f6ZXr9p4WokrzHget2tBVYTgq/0BV9joj6O/usjIvK+O6t7vq/fq+ebC1vsth682PO5sYGk/1gDfo7XH0fMxxQVj/sQ9acFPcPzP7dI8HYIEf+Wo8L1zif4AxeF7Haiqw/9maYYghmFGQ0CZnQMmFGYUc4LwozaQFdPo5859QI+Nj4vQAyCnjiNvUouzF7P9xTmH6DtnXa9j4FvTNKfaf69NNdmfDBreDp/Zshtic3qnjmTpNttbq0tLJzXd/T/u+drTOTHMbo7EX9qt7nVHH1s3uepFewmu8c6ot/v99vtdnt3c/P6dXNnO7EeU2Q87kPUn2bu70MMX5m/Q4j2tyy2GSMSvwn5bye6ei5C/hC8wb3lAmbUDsyoCcyoPzCj+Wonunouot1hCPjs8XviEfos35fGaxjL8T6K7KyKwerei+ODRq1iu72WdUu2ONKISI8jHhXTLG89CFvzJkecL+qysLCwsLa2trbVbHZ9LLf0xyQUgY5yhA5h6v+WiwW6enng3qYMzGhWwIzyADM6qaCrt4CAzx6/jI8IEQ3fpBFzwGmM8VST0WUkv43hU3di5bDFpbxa33vx4uzs7Pj4oFGzWbduc2ttIXQd2BCiPY7oVBrHL/a+H02Faa4lbW4CIjzW/u71mYW1cz+jUqnUarVG4+D42LcghdzHJOynEQkdGY/SIWTxt+xJzv7Afcm0nVPR1WfEVNzbnP2VwYyKAWbUahHMaJ7+wH2BGc1HVw8Bn3uCxiQ9ZmyM4z3jY/Q+dh8/71P7aZNI3tvokZGSK8rl1freyLpZizrEzaiL+Th89u/vslF2l4GtbNwoE5XrGfoekR9rf/dLNt3QWmDjxYsXe3t79fpqmSPlKMljipjaG/WnhQz7xkosDmS8Q0jxb9mTlP7AE9/GvHdERJPS1eeTybi3eX17YUZjATPq2l/M1TmAGY1D3jsiounq6iHg///27hhLbSMMALD8Xo5CUuTlBPIJsPu06XCJm+1cukuDS9KlTR/2BOwJ0mnvQgpACGkkNCxaNOL7Kj8/djSa+Wd+jRCa+3v5599QVx3iZJ9m2hx7u/KChUAZjZA+xePQk1U5YMInecqvH69L9rFa03mWzebL7eEe9rX3gWO7I/B+jFNNLz6oc8drj9huPZ5Mvvp7PW/E87Fdmn8e2U2hfov9uib21Gaff8+zrK3Pr/myKG5CeL+xHHT7AX6LTmwaxUT0EFP9nTxE20qjmTQqjfYijTYLkUYnNtVbwI/Ay9c/GtH+/OVTj2jMZstvh9wVuI36+uP7PhoX3+ovLS3j8ft/WTboZDV/2mfH0ElmWfb85+E9sI0qDqPME8HbzhdfcXGp9NjuKC89Gp8vG6ara+537XHDbi3bpSK2m9pvWx5r0l/sqZV1bXZB+YVJnNAvMtsnhPcby0G3i4RbduKQ9XyDqU/1QxXdx9Tb9v7ReyKN3oY0Ko0eDi+N9meqL6t46Tn7yeq9D3yWBfcRDP1EoWsry8DujGdVyFeHZ6J2xWZ1eLVKfZO74A6Pp/1488WmOJZRHF8+2rZTXvXgkbt4Rp7mWQ3Ls6w+xHX+8dh9LGtbKRbFhY0ByzOvtNd5dTo3kuxZmd7dcapOJQKCARDewvK0lW2PvV7v1q3VDXdP/1lplkb5Ud1UrUxoILV9vOWHRpERWz27QCd2HelM9IQQ+LuY/YxbBs6bYr5Pc12qT89OHLqepvo+pxlBGn3DaUqj0qg0Ko32r480Ov2p3gK+l0GvPPLF+fQbOGh7GWd1CpSxaB3ypwYIVfeW4dhZw9ZU3H9Cqfflxcm3qza148ZXJr472j6f1woOX3mcXbtcmt/v2q0tn80Xq3JiakkUPYpv+3ReFh5x5RF5au2nly9WF48UaOVVcHKqx0PjD3seJvR31T++bcz3vezoKibciUPX01Sf0gJ+im0rjUZ0hzQqjZ63sjRaL0EavVT/xKZ6j9CPwK9P2/MbZPvbLtveD6HMlttdfauQPF9simK7bi3k+NjZuzwsdKrheRXjzrPNfF27T3vh5zcttdnfj3t7dWK7o/n5fctse77Ic74+/pgt/NDNcGK6tbmdzf6DxXa9nJfPNVV/mRTXTbPlttGIm2K3XV77GGdcxM7X26LY1A+/XX++5uCf17tmWR3xcO1Yjh047W40wG/ciYPV81oPMNXfzQO0rTQqjUqjvUmjlSKk0YrJTPUfdrvd4HUh7PnLh09/ZVm+Kt4h5ptef3z8+etLttiMZGcK4DrG8riZ6oejbYEbMJbHzVRf5xv4h3V4o+mkv5SBR2As00F4DEfbwjQYy3QYY3hYwD+qMUYjEM9YpoPwGI62hWkwlukwyvCwgH9Ir8/7jTny1dOYohGIZCzTQXgMR9vCNBjLdBhrePx07wrwrg6/4jh4r11jgVszlukgPIajbWEajGU6jDw8fAP/WGa//Hb4V77YFKN5FQMQyVimg/AYjraFaTCW6TDy8PAWegAAAEiAb+ABAAAgARbwAAAAkAALeAAAAEiABTwAAAAkwAIeAAAAEmABDwAAAAmwgAcAAIAEWMADAABAAizgAQAAIAEW8AAAAJAAC3gAAABIgAU8AAAAJMACHgAAABJgAQ8AAAAJsIAHAACABFjAAwAAQAIs4AEAACABFvAAAACQAAt4AAAASIAFPAAAACTAAh4AAAASYAEPAAAACbCABwAAgARYwAMAAEACLOABAAAgARbwAAAAkID/Afj4JNmdvRGFAAAAAElFTkSuQmCC" width="672" /></p>
<div class="sourceCode" id="cb38"><pre class="sourceCode r"><code class="sourceCode r"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="fu">ggsave</span>(<span class="at">file =</span> <span class="st">&quot;output/graph_unemp_suicide_YOY_Jul.pdf&quot;</span>, <span class="at">plot =</span> graph_unemp_suicide_bind, </span>
<span id="cb38-2"><a href="#cb38-2" aria-hidden="true" tabindex="-1"></a>       <span class="at">dpi =</span> <span class="dv">100</span>, <span class="at">width =</span> <span class="dv">12</span>, <span class="at">height =</span> <span class="dv">12</span>)     </span></code></pre></div>
<pre><code>## `geom_smooth()` using formula &#39;y ~ x&#39;
## `geom_smooth()` using formula &#39;y ~ x&#39;
## `geom_smooth()` using formula &#39;y ~ x&#39;</code></pre>
<pre><code>## Warning: Removed 1 rows containing non-finite values (stat_smooth).

## Warning: Removed 1 rows containing missing values (geom_point).</code></pre>
</div>
</div>



</div>
</div>

</div>

<script>

// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
  $('tr.odd').parent('tbody').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
  bootstrapStylePandocTables();
});


</script>

<!-- tabsets -->

<script>
$(document).ready(function () {
  window.buildTabsets("TOC");
});

$(document).ready(function () {
  $('.tabset-dropdown > .nav-tabs > li').click(function () {
    $(this).parent().toggleClass('nav-tabs-open');
  });
});
</script>

<!-- code folding -->
<script>
$(document).ready(function () {
  window.initializeCodeFolding("hide" === "show");
});
</script>

<script>
$(document).ready(function ()  {

    // temporarily add toc-ignore selector to headers for the consistency with Pandoc
    $('.unlisted.unnumbered').addClass('toc-ignore')

    // move toc-ignore selectors from section div to header
    $('div.section.toc-ignore')
        .removeClass('toc-ignore')
        .children('h1,h2,h3,h4,h5').addClass('toc-ignore');

    // establish options
    var options = {
      selectors: "h1,h2,h3",
      theme: "bootstrap3",
      context: '.toc-content',
      hashGenerator: function (text) {
        return text.replace(/[.\\/?&!#<>]/g, '').replace(/\s/g, '_');
      },
      ignoreSelector: ".toc-ignore",
      scrollTo: 0
    };
    options.showAndHide = true;
    options.smoothScroll = true;

    // tocify
    var toc = $("#TOC").tocify(options).data("toc-tocify");
});
</script>

<!-- dynamically load mathjax for compatibility with self-contained -->
<script>
  (function () {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src  = "https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML";
    document.getElementsByTagName("head")[0].appendChild(script);
  })();
</script>

</body>
</html>
